@bitgo/sdk-coin-flrp 1.6.1 → 1.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/dist/src/lib/ExportInCTxBuilder.d.ts +5 -13
  2. package/dist/src/lib/ExportInCTxBuilder.d.ts.map +1 -1
  3. package/dist/src/lib/ExportInCTxBuilder.js +24 -64
  4. package/dist/src/lib/ExportInPTxBuilder.d.ts +8 -26
  5. package/dist/src/lib/ExportInPTxBuilder.d.ts.map +1 -1
  6. package/dist/src/lib/ExportInPTxBuilder.js +84 -181
  7. package/dist/src/lib/ImportInCTxBuilder.d.ts +7 -20
  8. package/dist/src/lib/ImportInCTxBuilder.d.ts.map +1 -1
  9. package/dist/src/lib/ImportInCTxBuilder.js +80 -167
  10. package/dist/src/lib/ImportInPTxBuilder.d.ts +28 -13
  11. package/dist/src/lib/ImportInPTxBuilder.d.ts.map +1 -1
  12. package/dist/src/lib/ImportInPTxBuilder.js +136 -105
  13. package/dist/src/lib/atomicInCTransactionBuilder.d.ts +0 -6
  14. package/dist/src/lib/atomicInCTransactionBuilder.d.ts.map +1 -1
  15. package/dist/src/lib/atomicInCTransactionBuilder.js +1 -14
  16. package/dist/src/lib/atomicTransactionBuilder.d.ts +50 -24
  17. package/dist/src/lib/atomicTransactionBuilder.d.ts.map +1 -1
  18. package/dist/src/lib/atomicTransactionBuilder.js +127 -187
  19. package/dist/src/lib/iface.d.ts +31 -0
  20. package/dist/src/lib/iface.d.ts.map +1 -1
  21. package/dist/src/lib/iface.js +9 -2
  22. package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts +0 -2
  23. package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts.map +1 -1
  24. package/dist/src/lib/permissionlessValidatorTxBuilder.js +1 -7
  25. package/dist/src/lib/transaction.d.ts +10 -6
  26. package/dist/src/lib/transaction.d.ts.map +1 -1
  27. package/dist/src/lib/transaction.js +10 -13
  28. package/dist/src/lib/transactionBuilder.d.ts +24 -16
  29. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  30. package/dist/src/lib/transactionBuilder.js +46 -28
  31. package/dist/src/lib/utils.d.ts +31 -2
  32. package/dist/src/lib/utils.d.ts.map +1 -1
  33. package/dist/src/lib/utils.js +71 -1
  34. package/dist/test/resources/account.d.ts +30 -0
  35. package/dist/test/resources/account.d.ts.map +1 -1
  36. package/dist/test/resources/account.js +27 -2
  37. package/dist/test/resources/transactionData/exportInC.d.ts +30 -0
  38. package/dist/test/resources/transactionData/exportInC.d.ts.map +1 -1
  39. package/dist/test/resources/transactionData/exportInC.js +32 -13
  40. package/dist/test/resources/transactionData/exportInP.d.ts +39 -48
  41. package/dist/test/resources/transactionData/exportInP.d.ts.map +1 -1
  42. package/dist/test/resources/transactionData/exportInP.js +70 -109
  43. package/dist/test/resources/transactionData/importInC.d.ts +39 -10
  44. package/dist/test/resources/transactionData/importInC.d.ts.map +1 -1
  45. package/dist/test/resources/transactionData/importInC.js +101 -25
  46. package/dist/test/resources/transactionData/importInP.d.ts +46 -15
  47. package/dist/test/resources/transactionData/importInP.d.ts.map +1 -1
  48. package/dist/test/resources/transactionData/importInP.js +65 -39
  49. package/dist/test/unit/flrp.js +15 -12
  50. package/dist/test/unit/lib/exportInCTxBuilder.js +32 -31
  51. package/dist/test/unit/lib/exportInPTxBuilder.js +112 -246
  52. package/dist/test/unit/lib/importInCTxBuilder.js +157 -353
  53. package/dist/test/unit/lib/importInPTxBuilder.js +227 -222
  54. package/dist/test/unit/lib/signFlowTestSuit.d.ts.map +1 -1
  55. package/dist/test/unit/lib/signFlowTestSuit.js +1 -1
  56. package/dist/test/unit/lib/signatureIndex.d.ts +13 -0
  57. package/dist/test/unit/lib/signatureIndex.d.ts.map +1 -0
  58. package/dist/test/unit/lib/signatureIndex.js +591 -0
  59. package/dist/test/unit/lib/transactionBuilderFactory.js +2 -2
  60. package/dist/test/unit/lib/utils.js +94 -32
  61. package/dist/tsconfig.tsbuildinfo +1 -1
  62. package/package.json +8 -7
@@ -42,28 +42,6 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
42
42
  throw new sdk_core_1.BuildTransactionError('Invalid transaction: threshold must be set to 2');
43
43
  }
44
44
  }
45
- /**
46
- * Validates a single UTXO object
47
- * @param value - UTXO to validate
48
- */
49
- validateUtxo(value) {
50
- const requiredFields = ['outputID', 'amount', 'txid', 'outputidx'];
51
- for (const field of requiredFields) {
52
- if (!value.hasOwnProperty(field)) {
53
- throw new sdk_core_1.BuildTransactionError(`UTXO missing required field: ${field}`);
54
- }
55
- }
56
- }
57
- /**
58
- * Validates an array of UTXOs
59
- * @param values - Array of UTXOs to validate
60
- */
61
- validateUtxos(values) {
62
- if (values.length === 0) {
63
- throw new sdk_core_1.BuildTransactionError('UTXOs array cannot be empty');
64
- }
65
- values.forEach(this.validateUtxo);
66
- }
67
45
  /**
68
46
  * Validates the locktime value
69
47
  * @param locktime - Timestamp after which the output can be spent
@@ -110,12 +88,52 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
110
88
  return this;
111
89
  }
112
90
  /**
113
- * Sets the UTXOs for the transaction
114
- * @param value - Array of UTXOs to use
91
+ * Validates an array of UTXOs
92
+ * @param utxos - Array of UTXOs to validate
93
+ * @throws {BuildTransactionError} if validation fails
115
94
  */
116
- utxos(value) {
117
- this.validateUtxos(value);
118
- this._transaction._utxos = value;
95
+ validateUtxos(utxos) {
96
+ if (!utxos || utxos.length === 0) {
97
+ throw new sdk_core_1.BuildTransactionError('UTXOs array cannot be empty');
98
+ }
99
+ utxos.forEach((utxo, index) => {
100
+ this.validateUtxo(utxo, index);
101
+ });
102
+ }
103
+ /**
104
+ * Validates a single UTXO
105
+ * @param utxo - UTXO to validate
106
+ * @param index - Index in the array for error messaging
107
+ * @throws {BuildTransactionError} if validation fails
108
+ */
109
+ validateUtxo(utxo, index) {
110
+ if (!utxo) {
111
+ throw new sdk_core_1.BuildTransactionError(`UTXO at index ${index} is null or undefined`);
112
+ }
113
+ if (!utxo.utxoId) {
114
+ throw new sdk_core_1.BuildTransactionError(`UTXO at index ${index} missing required field: utxoId`);
115
+ }
116
+ if (!utxo.assetId) {
117
+ throw new sdk_core_1.BuildTransactionError(`UTXO at index ${index} missing required field: assetId`);
118
+ }
119
+ if (!utxo.output) {
120
+ throw new sdk_core_1.BuildTransactionError(`UTXO at index ${index} missing required field: output`);
121
+ }
122
+ }
123
+ /**
124
+ * Sets the decoded UTXOs for the transaction.
125
+ * UTXOs should be provided in decoded format (DecodedUtxoObj).
126
+ * @param decodedUtxos - Array of decoded UTXO objects
127
+ */
128
+ decodedUtxos(decodedUtxos) {
129
+ if (!decodedUtxos || decodedUtxos.length === 0) {
130
+ throw new sdk_core_1.BuildTransactionError('UTXOs array cannot be empty');
131
+ }
132
+ this._transaction._utxos = decodedUtxos;
133
+ return this;
134
+ }
135
+ context(context) {
136
+ this._transaction._context = context;
119
137
  return this;
120
138
  }
121
139
  /** @inheritdoc */
@@ -207,4 +225,4 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
207
225
  }
208
226
  }
209
227
  exports.TransactionBuilder = TransactionBuilder;
210
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsbURBQXlFO0FBQ3pFLDhDQUFzRztBQUd0Ryx1Q0FBb0M7QUFDcEMsK0NBQTRDO0FBQzVDLG9EQUE0QjtBQUc1QixNQUFzQixrQkFBbUIsU0FBUSxpQ0FBc0I7SUFLckUsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFKWCxrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUN6QixZQUFPLEdBQWMsRUFBRSxDQUFDO1FBSTdCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSx5QkFBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFdBQVcsQ0FBQyxFQUFNO1FBQ2hCLE1BQU0sTUFBTSxHQUFLLEVBQWlCLENBQUMsRUFBNkMsQ0FBQyxNQUFNLENBQUM7UUFFeEYsNENBQTRDO1FBQzVDLElBQ0UsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVU7WUFDekQsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFDL0QsQ0FBQztZQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsb0JBQW9CO0lBQ3BCOzs7T0FHRztJQUNILGlCQUFpQixDQUFDLFNBQWlCO1FBQ2pDLElBQUksQ0FBQyxTQUFTLElBQUksU0FBUyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO1FBQ3JGLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWSxDQUFDLEtBQXFCO1FBQ2hDLE1BQU0sY0FBYyxHQUFHLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDbkUsS0FBSyxNQUFNLEtBQUssSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNqQyxNQUFNLElBQUksZ0NBQXFCLENBQUMsZ0NBQWdDLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDM0UsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsYUFBYSxDQUFDLE1BQXdCO1FBQ3BDLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN4QixNQUFNLElBQUksZ0NBQXFCLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBQ0QsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILGdCQUFnQixDQUFDLFFBQWdCO1FBQy9CLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO1FBQ3ZGLENBQUM7SUFDSCxDQUFDO0lBQ0QsWUFBWTtJQUVaOzs7T0FHRztJQUNILFNBQVMsQ0FBQyxLQUFhO1FBQ3JCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsUUFBUSxDQUFDLEtBQXNCO1FBQzdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsV0FBVyxDQUFDLGFBQWEsR0FBRyxJQUFJO1FBQzlCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ25DLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7T0FHRztJQUNILFVBQVUsQ0FBQyxZQUErQjtRQUN4QyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsZUFBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ25GLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxLQUF1QjtRQUMzQixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNqQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxrQkFBa0I7SUFDUixrQkFBa0IsQ0FBQyxjQUFzQjtRQUNqRCxJQUFJLENBQUM7WUFDSCw0REFBNEQ7WUFDNUQsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLG1CQUFTLENBQUMsNEJBQTRCLENBQUMsU0FBUyxDQUMzRCxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsRUFDbEMsbUJBQVMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxlQUFlLEVBQUUsQ0FDNUMsQ0FBQztZQUNGLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQzNCLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsTUFBTSxJQUFJLGdDQUFxQixDQUFDLG9DQUFvQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNuRixDQUFDO0lBQ0gsQ0FBQztJQVFEOzs7T0FHRztJQUNILGVBQWUsQ0FBQyxPQUFlO1FBQzdCLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUMxQixNQUFNLElBQUksZ0NBQXFCLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUMvRCxDQUFDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFjLFdBQVc7UUFDdkIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFjLFdBQVcsQ0FBQyxXQUF3QjtRQUNoRCxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsV0FBVyxDQUFDLEdBQVc7UUFDckIsSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDckIsTUFBTSxJQUFJLGdDQUFxQixDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDaEUsQ0FBQztJQUNILENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsV0FBVyxDQUFDLEVBQUUsR0FBRyxFQUFXO1FBQzFCLElBQUksQ0FBQztZQUNILElBQUksaUJBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsTUFBTSxJQUFJLGdDQUFxQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2pELENBQUM7SUFDSCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLG1CQUFtQixDQUFDLFdBQXlCO1FBQzNDLHdFQUF3RTtJQUMxRSxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGFBQWEsQ0FBQyxLQUFnQjtRQUM1QixJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN4QixNQUFNLElBQUksZ0NBQXFCLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUNwRSxDQUFDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixlQUFlLENBQUMsT0FBb0IsRUFBRSxhQUFzQjtRQUMxRCxJQUFJLENBQUMsZUFBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMzQyxNQUFNLElBQUksZ0NBQXFCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNyRCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxzQkFBc0IsQ0FBQyxjQUFzQjtRQUMzQyxlQUFLLENBQUMsc0JBQXNCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELGtCQUFrQjtJQUNSLGtCQUFrQixDQUFDLEVBQUUsR0FBRyxFQUFXO1FBQzNDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksaUJBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDN0MsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVEOzs7T0FHRztJQUNILGNBQWMsQ0FBQyxNQUFjO1FBQzNCLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ25FLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUF4T0QsZ0RBd09DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXZtU2VyaWFsLCBwdm1TZXJpYWwsIFVuc2lnbmVkVHggfSBmcm9tICdAZmxhcmVuZXR3b3JrL2ZsYXJlanMnO1xuaW1wb3J0IHsgQmFzZVRyYW5zYWN0aW9uQnVpbGRlciwgQnVpbGRUcmFuc2FjdGlvbkVycm9yLCBCYXNlS2V5LCBCYXNlQWRkcmVzcyB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgRGVjb2RlZFV0eG9PYmosIFR4IH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBLZXlQYWlyIH0gZnJvbSAnLi9rZXlQYWlyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUcmFuc2FjdGlvbkJ1aWxkZXIgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJvdGVjdGVkIF90cmFuc2FjdGlvbjogVHJhbnNhY3Rpb247XG4gIHByb3RlY3RlZCByZWNvdmVyU2lnbmVyID0gZmFsc2U7XG4gIHB1YmxpYyBfc2lnbmVyOiBLZXlQYWlyW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIHRyYW5zYWN0aW9uIGJ1aWxkZXIgZmllbGRzIHVzaW5nIHRoZSBkZWNvZGVkIHRyYW5zYWN0aW9uIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbn0gdHggdGhlIHRyYW5zYWN0aW9uIGRhdGFcbiAgICogQHJldHVybnMgaXRzZWxmXG4gICAqL1xuICBpbml0QnVpbGRlcih0eDogVHgpOiB0aGlzIHtcbiAgICBjb25zdCBiYXNlVHggPSAoKHR4IGFzIFVuc2lnbmVkVHgpLnR4IGFzIHB2bVNlcmlhbC5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4KS5iYXNlVHg7XG5cbiAgICAvLyBWYWxpZGF0ZSBuZXR3b3JrIGFuZCBibG9ja2NoYWluIElEcyBtYXRjaFxuICAgIGlmIChcbiAgICAgIGJhc2VUeC5OZXR3b3JrSWQudmFsdWUoKSAhPT0gdGhpcy5fdHJhbnNhY3Rpb24uX25ldHdvcmtJRCB8fFxuICAgICAgYmFzZVR4LkJsb2NrY2hhaW5JZC52YWx1ZSgpICE9PSB0aGlzLl90cmFuc2FjdGlvbi5fYmxvY2tjaGFpbklEXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05ldHdvcmsgb3IgYmxvY2tjaGFpbiBJRCBtaXNtYXRjaCcpO1xuICAgIH1cblxuICAgIHRoaXMuX3RyYW5zYWN0aW9uLnNldFRyYW5zYWN0aW9uKHR4KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIHJlZ2lvbiBWYWxpZGF0b3JzXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIHRocmVzaG9sZCBmb3IgbXVsdGktc2lnbmF0dXJlIHRyYW5zYWN0aW9uc1xuICAgKiBAcGFyYW0gdGhyZXNob2xkIC0gTnVtYmVyIG9mIHJlcXVpcmVkIHNpZ25hdHVyZXNcbiAgICovXG4gIHZhbGlkYXRlVGhyZXNob2xkKHRocmVzaG9sZDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aHJlc2hvbGQgfHwgdGhyZXNob2xkICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiB0aHJlc2hvbGQgbXVzdCBiZSBzZXQgdG8gMicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYSBzaW5nbGUgVVRYTyBvYmplY3RcbiAgICogQHBhcmFtIHZhbHVlIC0gVVRYTyB0byB2YWxpZGF0ZVxuICAgKi9cbiAgdmFsaWRhdGVVdHhvKHZhbHVlOiBEZWNvZGVkVXR4b09iaik6IHZvaWQge1xuICAgIGNvbnN0IHJlcXVpcmVkRmllbGRzID0gWydvdXRwdXRJRCcsICdhbW91bnQnLCAndHhpZCcsICdvdXRwdXRpZHgnXTtcbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHJlcXVpcmVkRmllbGRzKSB7XG4gICAgICBpZiAoIXZhbHVlLmhhc093blByb3BlcnR5KGZpZWxkKSkge1xuICAgICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBVVFhPIG1pc3NpbmcgcmVxdWlyZWQgZmllbGQ6ICR7ZmllbGR9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBhbiBhcnJheSBvZiBVVFhPc1xuICAgKiBAcGFyYW0gdmFsdWVzIC0gQXJyYXkgb2YgVVRYT3MgdG8gdmFsaWRhdGVcbiAgICovXG4gIHZhbGlkYXRlVXR4b3ModmFsdWVzOiBEZWNvZGVkVXR4b09ialtdKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1VUWE9zIGFycmF5IGNhbm5vdCBiZSBlbXB0eScpO1xuICAgIH1cbiAgICB2YWx1ZXMuZm9yRWFjaCh0aGlzLnZhbGlkYXRlVXR4byk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBsb2NrdGltZSB2YWx1ZVxuICAgKiBAcGFyYW0gbG9ja3RpbWUgLSBUaW1lc3RhbXAgYWZ0ZXIgd2hpY2ggdGhlIG91dHB1dCBjYW4gYmUgc3BlbnRcbiAgICovXG4gIHZhbGlkYXRlTG9ja3RpbWUobG9ja3RpbWU6IGJpZ2ludCk6IHZvaWQge1xuICAgIGlmIChsb2NrdGltZSA8IEJpZ0ludCgwKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbjogbG9ja3RpbWUgbXVzdCBiZSAwIG9yIGhpZ2hlcicpO1xuICAgIH1cbiAgfVxuICAvLyBlbmRyZWdpb25cblxuICAvKipcbiAgICogU2V0cyB0aGUgdGhyZXNob2xkIGZvciBtdWx0aS1zaWduYXR1cmUgdHJhbnNhY3Rpb25zXG4gICAqIEBwYXJhbSB2YWx1ZSAtIE51bWJlciBvZiByZXF1aXJlZCBzaWduYXR1cmVzXG4gICAqL1xuICB0aHJlc2hvbGQodmFsdWU6IG51bWJlcik6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVUaHJlc2hvbGQodmFsdWUpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uLl90aHJlc2hvbGQgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBsb2NrdGltZSBmb3IgdGhlIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRpbWVzdGFtcCBhZnRlciB3aGljaCB0aGUgb3V0cHV0IGNhbiBiZSBzcGVudFxuICAgKi9cbiAgbG9ja3RpbWUodmFsdWU6IHN0cmluZyB8IG51bWJlcik6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVMb2NrdGltZShCaWdJbnQodmFsdWUpKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbi5fbG9ja3RpbWUgPSBCaWdJbnQodmFsdWUpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgcmVjb3ZlcnkgbW9kZSBmb3IgdGhlIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSByZWNvdmVyU2lnbmVyIC0gV2hldGhlciB0byB1c2UgcmVjb3Zlcnkgc2lnbmluZ1xuICAgKi9cbiAgcmVjb3Zlck1vZGUocmVjb3ZlclNpZ25lciA9IHRydWUpOiB0aGlzIHtcbiAgICB0aGlzLnJlY292ZXJTaWduZXIgPSByZWNvdmVyU2lnbmVyO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHNlbmRlcidzIHB1YmxpYyBrZXkocylcbiAgICogQHBhcmFtIHNlbmRlclB1YktleSAtIFB1YmxpYyBrZXkgb3IgYXJyYXkgb2YgcHVibGljIGtleXNcbiAgICovXG4gIGZyb21QdWJLZXkoc2VuZGVyUHViS2V5OiBzdHJpbmcgfCBzdHJpbmdbXSk6IHRoaXMge1xuICAgIGNvbnN0IHB1YktleXMgPSBBcnJheS5pc0FycmF5KHNlbmRlclB1YktleSkgPyBzZW5kZXJQdWJLZXkgOiBbc2VuZGVyUHViS2V5XTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3NlcyA9IHB1YktleXMubWFwKChhZGRyKSA9PiB1dGlscy5wYXJzZUFkZHJlc3MoYWRkcikpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIFVUWE9zIGZvciB0aGUgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHZhbHVlIC0gQXJyYXkgb2YgVVRYT3MgdG8gdXNlXG4gICAqL1xuICB1dHhvcyh2YWx1ZTogRGVjb2RlZFV0eG9PYmpbXSk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVVdHhvcyh2YWx1ZSk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24uX3V0eG9zID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIHRyeSB7XG4gICAgICAvLyBQYXJzZSB0aGUgcmF3IHRyYW5zYWN0aW9uIHVzaW5nIEZsYXJlJ3MgUFZNIHNlcmlhbGl6YXRpb25cbiAgICAgIGNvbnN0IFt0eF0gPSBwdm1TZXJpYWwuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeC5mcm9tQnl0ZXMoXG4gICAgICAgIEJ1ZmZlci5mcm9tKHJhd1RyYW5zYWN0aW9uLCAnaGV4JyksXG4gICAgICAgIGF2bVNlcmlhbC5nZXRBVk1NYW5hZ2VyKCkuZ2V0RGVmYXVsdENvZGVjKClcbiAgICAgICk7XG4gICAgICB0aGlzLmluaXRCdWlsZGVyKHR4KTtcbiAgICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBGYWlsZWQgdG8gcGFyc2UgcmF3IHRyYW5zYWN0aW9uOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWJzdHJhY3QgbWV0aG9kIHRvIGJlIGltcGxlbWVudGVkIGJ5IHNwZWNpZmljIHRyYW5zYWN0aW9uIGJ1aWxkZXJzXG4gICAqIEJ1aWxkcyB0aGUgYWN0dWFsIHRyYW5zYWN0aW9uIGJhc2VkIG9uIHRoZSBidWlsZGVyJ3MgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxUcmFuc2FjdGlvbj47XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoZSBidWZmZXIgaGFzIDMyIGJ5dGUgbG9uZy5cbiAgICogQHBhcmFtIGNoYWluSURcbiAgICovXG4gIHZhbGlkYXRlQ2hhaW5JZChjaGFpbklEOiBCdWZmZXIpOiB2b2lkIHtcbiAgICBpZiAoY2hhaW5JRC5sZW5ndGggIT09IDMyKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdDaGFpbiBpZCBhcmUgMzIgYnl0ZSBzaXplJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb24oKTogVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXQgdHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKSB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0aGF0IGZlZSBpcyBncmVhdGVyIHRoYW4gMC5cbiAgICogQHBhcmFtIHtiaWdpbnR9IGZlZVxuICAgKi9cbiAgdmFsaWRhdGVGZWUoZmVlOiBiaWdpbnQpOiB2b2lkIHtcbiAgICBpZiAoZmVlIDw9IEJpZ0ludCgwKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignRmVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAnKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVLZXkoeyBrZXkgfTogQmFzZUtleSk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBuZXcgS2V5UGFpcih7IHBydjoga2V5IH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQga2V5Jyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24/OiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIC8vIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCd2YWxpZGF0ZVRyYW5zYWN0aW9uIG5vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVmFsdWUodmFsdWU6IEJpZ051bWJlcik6IHZvaWQge1xuICAgIGlmICh2YWx1ZS5pc0xlc3NUaGFuKDApKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdWYWx1ZSBjYW5ub3QgYmUgbGVzcyB0aGFuIHplcm8nKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVBZGRyZXNzKGFkZHJlc3M6IEJhc2VBZGRyZXNzLCBhZGRyZXNzRm9ybWF0Pzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzLmFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIGFkZHJlc3MnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdGhlIHJhdyB0cmFuc2FjdGlvbiBoYXMgYSB2YWxpZCBmb3JtYXQgaW4gdGhlIGJsb2NrY2hhaW4gY29udGV4dCwgdGhyb3cgb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBAcGFyYW0gcmF3VHJhbnNhY3Rpb24gVHJhbnNhY3Rpb24gaW4gYW55IGZvcm1hdFxuICAgKi9cbiAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdXRpbHMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIHNpZ25JbXBsZW1lbnRhdGlvbih7IGtleSB9OiBCYXNlS2V5KTogVHJhbnNhY3Rpb24ge1xuICAgIHRoaXMuX3NpZ25lci5wdXNoKG5ldyBLZXlQYWlyKHsgcHJ2OiBrZXkgfSkpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgaGFzU2lnbmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zaWduZXIgIT09IHVuZGVmaW5lZCAmJiB0aGlzLl9zaWduZXIubGVuZ3RoID4gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0aGUgYW1vdW50IGlzIHBvc2l0aXZlLlxuICAgKiBAcGFyYW0gYW1vdW50XG4gICAqL1xuICB2YWxpZGF0ZUFtb3VudChhbW91bnQ6IGJpZ2ludCk6IHZvaWQge1xuICAgIGlmIChhbW91bnQgPD0gQmlnSW50KDApKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdBbW91bnQgbXVzdCBiZSBncmVhdGVyIHRoYW4gMCcpO1xuICAgIH1cbiAgfVxufVxuIl19
228
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsbURBQXdGO0FBQ3hGLDhDQUFzRztBQUd0Ryx1Q0FBb0M7QUFDcEMsK0NBQTRDO0FBQzVDLG9EQUE0QjtBQUs1QixNQUFzQixrQkFBbUIsU0FBUSxpQ0FBc0I7SUFLckUsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFKWCxrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUN6QixZQUFPLEdBQWMsRUFBRSxDQUFDO1FBSTdCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSx5QkFBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFdBQVcsQ0FBQyxFQUFNO1FBQ2hCLE1BQU0sTUFBTSxHQUFLLEVBQWlCLENBQUMsRUFBNkMsQ0FBQyxNQUFNLENBQUM7UUFFeEYsNENBQTRDO1FBQzVDLElBQ0UsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVU7WUFDekQsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFDL0QsQ0FBQztZQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsb0JBQW9CO0lBQ3BCOzs7T0FHRztJQUNILGlCQUFpQixDQUFDLFNBQWlCO1FBQ2pDLElBQUksQ0FBQyxTQUFTLElBQUksU0FBUyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sSUFB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a0IsQ0FBQyxFQUFFLEdBQUcsRUFBVztRQUMzQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLGlCQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRDs7O09BR0c7SUFDSCxjQUFjLENBQUMsTUFBYztRQUMzQixJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN4QixNQUFNLElBQUksZ0NBQXFCLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUNuRSxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBM1BELGdEQTJQQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGF2bVNlcmlhbCwgcHZtU2VyaWFsLCBVbnNpZ25lZFR4LCBVdHhvLCBDb250ZXh0IH0gZnJvbSAnQGZsYXJlbmV0d29yay9mbGFyZWpzJztcbmltcG9ydCB7IEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIsIEJ1aWxkVHJhbnNhY3Rpb25FcnJvciwgQmFzZUtleSwgQmFzZUFkZHJlc3MgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IFR4LCBEZWNvZGVkVXR4b09iaiB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4va2V5UGFpcic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgRmxycENvbnRleHQgfSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcblxudHlwZSBCaWdOdW1iZXJUeXBlID0gUGFyYW1ldGVyczxCYXNlVHJhbnNhY3Rpb25CdWlsZGVyWyd2YWxpZGF0ZVZhbHVlJ10+WzBdO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVHJhbnNhY3Rpb25CdWlsZGVyIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByb3RlY3RlZCBfdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uO1xuICBwcm90ZWN0ZWQgcmVjb3ZlclNpZ25lciA9IGZhbHNlO1xuICBwdWJsaWMgX3NpZ25lcjogS2V5UGFpcltdID0gW107XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSB0cmFuc2FjdGlvbiBidWlsZGVyIGZpZWxkcyB1c2luZyB0aGUgZGVjb2RlZCB0cmFuc2FjdGlvbiBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb259IHR4IHRoZSB0cmFuc2FjdGlvbiBkYXRhXG4gICAqIEByZXR1cm5zIGl0c2VsZlxuICAgKi9cbiAgaW5pdEJ1aWxkZXIodHg6IFR4KTogdGhpcyB7XG4gICAgY29uc3QgYmFzZVR4ID0gKCh0eCBhcyBVbnNpZ25lZFR4KS50eCBhcyBwdm1TZXJpYWwuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeCkuYmFzZVR4O1xuXG4gICAgLy8gVmFsaWRhdGUgbmV0d29yayBhbmQgYmxvY2tjaGFpbiBJRHMgbWF0Y2hcbiAgICBpZiAoXG4gICAgICBiYXNlVHguTmV0d29ya0lkLnZhbHVlKCkgIT09IHRoaXMuX3RyYW5zYWN0aW9uLl9uZXR3b3JrSUQgfHxcbiAgICAgIGJhc2VUeC5CbG9ja2NoYWluSWQudmFsdWUoKSAhPT0gdGhpcy5fdHJhbnNhY3Rpb24uX2Jsb2NrY2hhaW5JRFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdOZXR3b3JrIG9yIGJsb2NrY2hhaW4gSUQgbWlzbWF0Y2gnKTtcbiAgICB9XG5cbiAgICB0aGlzLl90cmFuc2FjdGlvbi5zZXRUcmFuc2FjdGlvbih0eCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyByZWdpb24gVmFsaWRhdG9yc1xuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSB0aHJlc2hvbGQgZm9yIG11bHRpLXNpZ25hdHVyZSB0cmFuc2FjdGlvbnNcbiAgICogQHBhcmFtIHRocmVzaG9sZCAtIE51bWJlciBvZiByZXF1aXJlZCBzaWduYXR1cmVzXG4gICAqL1xuICB2YWxpZGF0ZVRocmVzaG9sZCh0aHJlc2hvbGQ6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhyZXNob2xkIHx8IHRocmVzaG9sZCAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbjogdGhyZXNob2xkIG11c3QgYmUgc2V0IHRvIDInKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBsb2NrdGltZSB2YWx1ZVxuICAgKiBAcGFyYW0gbG9ja3RpbWUgLSBUaW1lc3RhbXAgYWZ0ZXIgd2hpY2ggdGhlIG91dHB1dCBjYW4gYmUgc3BlbnRcbiAgICovXG4gIHZhbGlkYXRlTG9ja3RpbWUobG9ja3RpbWU6IGJpZ2ludCk6IHZvaWQge1xuICAgIGlmIChsb2NrdGltZSA8IEJpZ0ludCgwKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbjogbG9ja3RpbWUgbXVzdCBiZSAwIG9yIGhpZ2hlcicpO1xuICAgIH1cbiAgfVxuICAvLyBlbmRyZWdpb25cblxuICAvKipcbiAgICogU2V0cyB0aGUgdGhyZXNob2xkIGZvciBtdWx0aS1zaWduYXR1cmUgdHJhbnNhY3Rpb25zXG4gICAqIEBwYXJhbSB2YWx1ZSAtIE51bWJlciBvZiByZXF1aXJlZCBzaWduYXR1cmVzXG4gICAqL1xuICB0aHJlc2hvbGQodmFsdWU6IG51bWJlcik6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVUaHJlc2hvbGQodmFsdWUpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uLl90aHJlc2hvbGQgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBsb2NrdGltZSBmb3IgdGhlIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRpbWVzdGFtcCBhZnRlciB3aGljaCB0aGUgb3V0cHV0IGNhbiBiZSBzcGVudFxuICAgKi9cbiAgbG9ja3RpbWUodmFsdWU6IHN0cmluZyB8IG51bWJlcik6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVMb2NrdGltZShCaWdJbnQodmFsdWUpKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbi5fbG9ja3RpbWUgPSBCaWdJbnQodmFsdWUpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgcmVjb3ZlcnkgbW9kZSBmb3IgdGhlIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSByZWNvdmVyU2lnbmVyIC0gV2hldGhlciB0byB1c2UgcmVjb3Zlcnkgc2lnbmluZ1xuICAgKi9cbiAgcmVjb3Zlck1vZGUocmVjb3ZlclNpZ25lciA9IHRydWUpOiB0aGlzIHtcbiAgICB0aGlzLnJlY292ZXJTaWduZXIgPSByZWNvdmVyU2lnbmVyO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHNlbmRlcidzIHB1YmxpYyBrZXkocylcbiAgICogQHBhcmFtIHNlbmRlclB1YktleSAtIFB1YmxpYyBrZXkgb3IgYXJyYXkgb2YgcHVibGljIGtleXNcbiAgICovXG4gIGZyb21QdWJLZXkoc2VuZGVyUHViS2V5OiBzdHJpbmcgfCBzdHJpbmdbXSk6IHRoaXMge1xuICAgIGNvbnN0IHB1YktleXMgPSBBcnJheS5pc0FycmF5KHNlbmRlclB1YktleSkgPyBzZW5kZXJQdWJLZXkgOiBbc2VuZGVyUHViS2V5XTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3NlcyA9IHB1YktleXMubWFwKChhZGRyKSA9PiB1dGlscy5wYXJzZUFkZHJlc3MoYWRkcikpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBhbiBhcnJheSBvZiBVVFhPc1xuICAgKiBAcGFyYW0gdXR4b3MgLSBBcnJheSBvZiBVVFhPcyB0byB2YWxpZGF0ZVxuICAgKiBAdGhyb3dzIHtCdWlsZFRyYW5zYWN0aW9uRXJyb3J9IGlmIHZhbGlkYXRpb24gZmFpbHNcbiAgICovXG4gIHZhbGlkYXRlVXR4b3ModXR4b3M6IFV0eG9bXSk6IHZvaWQge1xuICAgIGlmICghdXR4b3MgfHwgdXR4b3MubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdVVFhPcyBhcnJheSBjYW5ub3QgYmUgZW1wdHknKTtcbiAgICB9XG4gICAgdXR4b3MuZm9yRWFjaCgodXR4bywgaW5kZXgpID0+IHtcbiAgICAgIHRoaXMudmFsaWRhdGVVdHhvKHV0eG8sIGluZGV4KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYSBzaW5nbGUgVVRYT1xuICAgKiBAcGFyYW0gdXR4byAtIFVUWE8gdG8gdmFsaWRhdGVcbiAgICogQHBhcmFtIGluZGV4IC0gSW5kZXggaW4gdGhlIGFycmF5IGZvciBlcnJvciBtZXNzYWdpbmdcbiAgICogQHRocm93cyB7QnVpbGRUcmFuc2FjdGlvbkVycm9yfSBpZiB2YWxpZGF0aW9uIGZhaWxzXG4gICAqL1xuICB2YWxpZGF0ZVV0eG8odXR4bzogVXR4bywgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdXR4bykge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihgVVRYTyBhdCBpbmRleCAke2luZGV4fSBpcyBudWxsIG9yIHVuZGVmaW5lZGApO1xuICAgIH1cbiAgICBpZiAoIXV0eG8udXR4b0lkKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBVVFhPIGF0IGluZGV4ICR7aW5kZXh9IG1pc3NpbmcgcmVxdWlyZWQgZmllbGQ6IHV0eG9JZGApO1xuICAgIH1cbiAgICBpZiAoIXV0eG8uYXNzZXRJZCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihgVVRYTyBhdCBpbmRleCAke2luZGV4fSBtaXNzaW5nIHJlcXVpcmVkIGZpZWxkOiBhc3NldElkYCk7XG4gICAgfVxuICAgIGlmICghdXR4by5vdXRwdXQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYFVUWE8gYXQgaW5kZXggJHtpbmRleH0gbWlzc2luZyByZXF1aXJlZCBmaWVsZDogb3V0cHV0YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGRlY29kZWQgVVRYT3MgZm9yIHRoZSB0cmFuc2FjdGlvbi5cbiAgICogVVRYT3Mgc2hvdWxkIGJlIHByb3ZpZGVkIGluIGRlY29kZWQgZm9ybWF0IChEZWNvZGVkVXR4b09iaikuXG4gICAqIEBwYXJhbSBkZWNvZGVkVXR4b3MgLSBBcnJheSBvZiBkZWNvZGVkIFVUWE8gb2JqZWN0c1xuICAgKi9cbiAgZGVjb2RlZFV0eG9zKGRlY29kZWRVdHhvczogRGVjb2RlZFV0eG9PYmpbXSk6IHRoaXMge1xuICAgIGlmICghZGVjb2RlZFV0eG9zIHx8IGRlY29kZWRVdHhvcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1VUWE9zIGFycmF5IGNhbm5vdCBiZSBlbXB0eScpO1xuICAgIH1cbiAgICB0aGlzLl90cmFuc2FjdGlvbi5fdXR4b3MgPSBkZWNvZGVkVXR4b3M7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjb250ZXh0KGNvbnRleHQ6IEZscnBDb250ZXh0KTogdGhpcyB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24uX2NvbnRleHQgPSBjb250ZXh0IGFzIENvbnRleHQuQ29udGV4dDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBUcmFuc2FjdGlvbiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFBhcnNlIHRoZSByYXcgdHJhbnNhY3Rpb24gdXNpbmcgRmxhcmUncyBQVk0gc2VyaWFsaXphdGlvblxuICAgICAgY29uc3QgW3R4XSA9IHB2bVNlcmlhbC5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4LmZyb21CeXRlcyhcbiAgICAgICAgQnVmZmVyLmZyb20ocmF3VHJhbnNhY3Rpb24sICdoZXgnKSxcbiAgICAgICAgYXZtU2VyaWFsLmdldEFWTU1hbmFnZXIoKS5nZXREZWZhdWx0Q29kZWMoKVxuICAgICAgKTtcbiAgICAgIHRoaXMuaW5pdEJ1aWxkZXIodHgpO1xuICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYEZhaWxlZCB0byBwYXJzZSByYXcgdHJhbnNhY3Rpb246ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBYnN0cmFjdCBtZXRob2QgdG8gYmUgaW1wbGVtZW50ZWQgYnkgc3BlY2lmaWMgdHJhbnNhY3Rpb24gYnVpbGRlcnNcbiAgICogQnVpbGRzIHRoZSBhY3R1YWwgdHJhbnNhY3Rpb24gYmFzZWQgb24gdGhlIGJ1aWxkZXIncyBjb25maWd1cmF0aW9uXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgYnVpbGRJbXBsZW1lbnRhdGlvbigpOiBQcm9taXNlPFRyYW5zYWN0aW9uPjtcblxuICAvKipcbiAgICogQ2hlY2sgdGhlIGJ1ZmZlciBoYXMgMzIgYnl0ZSBsb25nLlxuICAgKiBAcGFyYW0gY2hhaW5JRFxuICAgKi9cbiAgdmFsaWRhdGVDaGFpbklkKGNoYWluSUQ6IEJ1ZmZlcik6IHZvaWQge1xuICAgIGlmIChjaGFpbklELmxlbmd0aCAhPT0gMzIpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0NoYWluIGlkIGFyZSAzMiBieXRlIHNpemUnKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvbigpOiBUcmFuc2FjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldCB0cmFuc2FjdGlvbih0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoYXQgZmVlIGlzIGdyZWF0ZXIgdGhhbiAwLlxuICAgKiBAcGFyYW0ge2JpZ2ludH0gZmVlXG4gICAqL1xuICB2YWxpZGF0ZUZlZShmZWU6IGJpZ2ludCk6IHZvaWQge1xuICAgIGlmIChmZWUgPD0gQmlnSW50KDApKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdGZWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gMCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZUtleSh7IGtleSB9OiBCYXNlS2V5KTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIG5ldyBLZXlQYWlyKHsgcHJ2OiBrZXkgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBrZXknKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbj86IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgLy8gdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoJ3ZhbGlkYXRlVHJhbnNhY3Rpb24gbm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVWYWx1ZSh2YWx1ZTogQmlnTnVtYmVyVHlwZSk6IHZvaWQge1xuICAgIGlmICh2YWx1ZS5pc0xlc3NUaGFuKDApKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdWYWx1ZSBjYW5ub3QgYmUgbGVzcyB0aGFuIHplcm8nKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVBZGRyZXNzKGFkZHJlc3M6IEJhc2VBZGRyZXNzLCBhZGRyZXNzRm9ybWF0Pzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzLmFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIGFkZHJlc3MnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdGhlIHJhdyB0cmFuc2FjdGlvbiBoYXMgYSB2YWxpZCBmb3JtYXQgaW4gdGhlIGJsb2NrY2hhaW4gY29udGV4dCwgdGhyb3cgb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBAcGFyYW0gcmF3VHJhbnNhY3Rpb24gVHJhbnNhY3Rpb24gaW4gYW55IGZvcm1hdFxuICAgKi9cbiAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdXRpbHMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIHNpZ25JbXBsZW1lbnRhdGlvbih7IGtleSB9OiBCYXNlS2V5KTogVHJhbnNhY3Rpb24ge1xuICAgIHRoaXMuX3NpZ25lci5wdXNoKG5ldyBLZXlQYWlyKHsgcHJ2OiBrZXkgfSkpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgaGFzU2lnbmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zaWduZXIgIT09IHVuZGVmaW5lZCAmJiB0aGlzLl9zaWduZXIubGVuZ3RoID4gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0aGUgYW1vdW50IGlzIHBvc2l0aXZlLlxuICAgKiBAcGFyYW0gYW1vdW50XG4gICAqL1xuICB2YWxpZGF0ZUFtb3VudChhbW91bnQ6IGJpZ2ludCk6IHZvaWQge1xuICAgIGlmIChhbW91bnQgPD0gQmlnSW50KDApKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdBbW91bnQgbXVzdCBiZSBncmVhdGVyIHRoYW4gMCcpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -1,8 +1,8 @@
1
- import { Signature, TransferableOutput, Id } from '@flarenetwork/flarejs';
1
+ import { Signature, TransferableOutput, Id, Utxo } from '@flarenetwork/flarejs';
2
2
  import { BaseUtils, Entry } from '@bitgo/sdk-core';
3
3
  import { FlareNetwork } from '@bitgo/statics';
4
4
  import { Buffer } from 'buffer';
5
- import { Output, Tx } from './iface';
5
+ import { DecodedUtxoObj, Output, Tx } from './iface';
6
6
  export declare class Utils implements BaseUtils {
7
7
  isValidTransactionId(txId: string): boolean;
8
8
  isValidSignature(signature: string): boolean;
@@ -140,6 +140,35 @@ export declare class Utils implements BaseUtils {
140
140
  * @returns true if tx is for blockchainId
141
141
  */
142
142
  isTransactionOf(tx: Tx, blockchainId: string): boolean;
143
+ /**
144
+ * Convert FlareJS native Utxo to DecodedUtxoObj for internal use
145
+ * @param utxo - FlareJS Utxo object
146
+ * @param network - Flare network configuration
147
+ * @returns DecodedUtxoObj compatible with existing methods
148
+ */
149
+ utxoToDecoded(utxo: Utxo, network: FlareNetwork): DecodedUtxoObj;
150
+ /**
151
+ * Convert array of FlareJS Utxos to DecodedUtxoObj array
152
+ * @param utxos - Array of FlareJS Utxo objects
153
+ * @param network - Flare network configuration
154
+ * @returns Array of DecodedUtxoObj
155
+ */
156
+ utxosToDecoded(utxos: Utxo[], network: FlareNetwork): DecodedUtxoObj[];
157
+ /**
158
+ * Convert DecodedUtxoObj to native FlareJS Utxo object
159
+ * This is the reverse of utxoToDecoded
160
+ * @param decoded - DecodedUtxoObj to convert
161
+ * @param assetId - Asset ID as cb58 encoded string
162
+ * @returns Native FlareJS Utxo object
163
+ */
164
+ decodedToUtxo(decoded: DecodedUtxoObj, assetId: string): Utxo;
165
+ /**
166
+ * Convert array of DecodedUtxoObj to native FlareJS Utxo objects
167
+ * @param decodedUtxos - Array of DecodedUtxoObj
168
+ * @param assetId - Asset ID as cb58 encoded string
169
+ * @returns Array of native FlareJS Utxo objects
170
+ */
171
+ decodedToUtxos(decodedUtxos: DecodedUtxoObj[], assetId: string): Utxo[];
143
172
  }
144
173
  declare const utils: Utils;
145
174
  export default utils;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"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"}
@@ -394,8 +394,78 @@ class Utils {
394
394
  const txBlockchainId = extractBlockchainId(tx);
395
395
  return txBlockchainId === blockchainId;
396
396
  }
397
+ /**
398
+ * Convert FlareJS native Utxo to DecodedUtxoObj for internal use
399
+ * @param utxo - FlareJS Utxo object
400
+ * @param network - Flare network configuration
401
+ * @returns DecodedUtxoObj compatible with existing methods
402
+ */
403
+ utxoToDecoded(utxo, network) {
404
+ const outputOwners = utxo.getOutputOwners();
405
+ const output = utxo.output;
406
+ // Get amount from output
407
+ const amount = output.amount().toString();
408
+ // Get txid from utxoId (cb58 encoded)
409
+ const txid = this.cb58Encode(buffer_1.Buffer.from(utxo.utxoId.txID.toBytes()));
410
+ // Get output index
411
+ const outputidx = utxo.utxoId.outputIdx.value().toString();
412
+ // Get threshold
413
+ const threshold = outputOwners.threshold.value();
414
+ // Get locktime
415
+ const locktime = outputOwners.locktime.value().toString();
416
+ // Get addresses as bech32 strings
417
+ const addresses = outputOwners.addrs.map((addr) => this.addressToString(network.hrp, network.alias, buffer_1.Buffer.from(addr.toBytes())));
418
+ return {
419
+ outputID: iface_1.SECP256K1_Transfer_Output,
420
+ locktime,
421
+ amount,
422
+ txid,
423
+ outputidx,
424
+ threshold,
425
+ addresses,
426
+ };
427
+ }
428
+ /**
429
+ * Convert array of FlareJS Utxos to DecodedUtxoObj array
430
+ * @param utxos - Array of FlareJS Utxo objects
431
+ * @param network - Flare network configuration
432
+ * @returns Array of DecodedUtxoObj
433
+ */
434
+ utxosToDecoded(utxos, network) {
435
+ return utxos.map((utxo) => this.utxoToDecoded(utxo, network));
436
+ }
437
+ /**
438
+ * Convert DecodedUtxoObj to native FlareJS Utxo object
439
+ * This is the reverse of utxoToDecoded
440
+ * @param decoded - DecodedUtxoObj to convert
441
+ * @param assetId - Asset ID as cb58 encoded string
442
+ * @returns Native FlareJS Utxo object
443
+ */
444
+ decodedToUtxo(decoded, assetId) {
445
+ // Create UTXOID from txid and output index
446
+ const utxoId = flarejs_1.avaxSerial.UTXOID.fromNative(decoded.txid, parseInt(decoded.outputidx, 10));
447
+ // Parse addresses from bech32 strings to byte buffers
448
+ const addressBytes = decoded.addresses.map((addr) => this.parseAddress(addr));
449
+ // Create OutputOwners with locktime, threshold, and addresses
450
+ const locktime = decoded.locktime ? BigInt(decoded.locktime) : BigInt(0);
451
+ const outputOwners = flarejs_1.OutputOwners.fromNative(addressBytes, locktime, decoded.threshold);
452
+ // Create TransferOutput with amount and owners
453
+ const amount = BigInt(decoded.amount);
454
+ const transferOutput = new flarejs_1.TransferOutput(new flarejs_1.BigIntPr(amount), outputOwners);
455
+ // Create and return the Utxo
456
+ return new flarejs_1.Utxo(utxoId, flarejs_1.Id.fromString(assetId), transferOutput);
457
+ }
458
+ /**
459
+ * Convert array of DecodedUtxoObj to native FlareJS Utxo objects
460
+ * @param decodedUtxos - Array of DecodedUtxoObj
461
+ * @param assetId - Asset ID as cb58 encoded string
462
+ * @returns Array of native FlareJS Utxo objects
463
+ */
464
+ decodedToUtxos(decodedUtxos, assetId) {
465
+ return decodedUtxos.map((decoded) => this.decodedToUtxo(decoded, assetId));
466
+ }
397
467
  }
398
468
  exports.Utils = Utils;
399
469
  const utils = new Utils();
400
470
  exports.default = utils;
401
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1EQUF1RztBQUN2Ryw4Q0FPeUI7QUFFekIsbUNBQWdDO0FBQ2hDLG1DQUFvQztBQUNwQyxnREFBdUM7QUFDdkMsbUNBQXdEO0FBQ3hELGdEQUF3QjtBQUN4QixtQ0FBZ0M7QUFFaEMsTUFBYSxLQUFLO0lBQWxCO1FBNlBFOztXQUVHO1FBQ0ksb0JBQWUsR0FBRyxDQUFDLEdBQVcsRUFBRSxNQUFjLEVBQUUsT0FBZSxFQUFVLEVBQUU7WUFDaEYsK0RBQStEO1lBQy9ELE1BQU0sS0FBSyxHQUFHLGVBQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdEMsK0VBQStFO1lBQy9FLE9BQU8sR0FBRyxNQUFNLElBQUksZUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNsRCxDQUFDLENBQUM7UUEyQ0YsbURBQW1EO1FBRW5EOzs7O1dBSUc7UUFDSSxpQkFBWSxHQUFHLENBQUMsT0FBZSxFQUFVLEVBQUU7WUFDaEQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQztRQUVLLG9CQUFlLEdBQUcsQ0FBQyxPQUFlLEVBQUUsR0FBWSxFQUFVLEVBQUU7WUFDakUsdUJBQXVCO1lBQ3ZCLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUM3QixPQUFPLGVBQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM5QyxDQUFDO1lBRUQsbUNBQW1DO1lBQ25DLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ3RDLE9BQU8sZUFBTSxDQUFDLElB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LENBQUM7WUFDSCxDQUFDO1lBRUQsSUFBSSxLQUFLLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLENBQUM7Z0JBQzVDLE9BQU8sZUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0UsQ0FBQztZQUVELElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLENBQUM7Z0JBQ3hDLE9BQU8sZUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxRSxDQUFDO1lBQ0QsSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxDQUFDO2dCQUNoQyxPQUFPLGVBQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuRSxDQUFDO1lBRUQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUM7UUFFRixNQUFNLGNBQWMsR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvQyxPQUFPLGNBQWMsS0FBSyxZQUFZLENBQUM7SUFDekMsQ0FBQztDQUNGO0FBaGFELHNCQWdhQztBQUVELE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7QUFDMUIsa0JBQWUsS0FBSyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2lnbmF0dXJlLCBUcmFuc2ZlcmFibGVPdXRwdXQsIFRyYW5zZmVyT3V0cHV0LCBUeXBlU3ltYm9scywgSWQgfSBmcm9tICdAZmxhcmVuZXR3b3JrL2ZsYXJlanMnO1xuaW1wb3J0IHtcbiAgQmFzZVV0aWxzLFxuICBFbnRyeSxcbiAgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsXG4gIGlzVmFsaWRYcHJ2LFxuICBpc1ZhbGlkWHB1YixcbiAgUGFyc2VUcmFuc2FjdGlvbkVycm9yLFxufSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgRmxhcmVOZXR3b3JrIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJztcbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgZWNjIH0gZnJvbSAnQGJpdGdvL3NlY3AyNTZrMSc7XG5pbXBvcnQgeyBBRERSRVNTX1NFUEFSQVRPUiwgT3V0cHV0LCBUeCB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IGJzNTggZnJvbSAnYnM1OCc7XG5pbXBvcnQgeyBiZWNoMzIgfSBmcm9tICdiZWNoMzInO1xuXG5leHBvcnQgY2xhc3MgVXRpbHMgaW1wbGVtZW50cyBCYXNlVXRpbHMge1xuICBpc1ZhbGlkVHJhbnNhY3Rpb25JZCh0eElkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cbiAgaXNWYWxpZFNpZ25hdHVyZShzaWduYXR1cmU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuICAvKipcbiAgICogQ2hlY2sgaWYgYWRkcmVzc2VzIGluIHdhbGxldCBtYXRjaCBVVFhPIG91dHB1dCBhZGRyZXNzZXNcbiAgICovXG4gIHB1YmxpYyBpbmNsdWRlSW4od2FsbGV0QWRkcmVzc2VzOiBzdHJpbmdbXSwgb3R4b091dHB1dEFkZHJlc3Nlczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gd2FsbGV0QWRkcmVzc2VzLm1hcCgoYSkgPT4gb3R4b091dHB1dEFkZHJlc3Nlcy5pbmNsdWRlcyhhKSkucmVkdWNlKChhLCBiKSA9PiBhICYmIGIsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBhIEZsYXJlIGFkZHJlc3Mgb3IgYXJyYXkgb2YgYWRkcmVzc2VzXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgc3RyaW5nW119IGFkZHJlc3MgLSBhZGRyZXNzKGVzKSB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSB2YWxpZGF0aW9uIHJlc3VsdFxuICAgKi9cbiAgaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nIHwgc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICBjb25zdCBhZGRyZXNzQXJyOiBzdHJpbmdbXSA9IEFycmF5LmlzQXJyYXkoYWRkcmVzcykgPyBhZGRyZXNzIDogYWRkcmVzcy5zcGxpdCgnficpO1xuXG4gICAgZm9yIChjb25zdCBhZGRyZXNzIG9mIGFkZHJlc3NBcnIpIHtcbiAgICAgIGlmICghdGhpcy5pc1ZhbGlkQWRkcmVzc1JlZ2V4KGFkZHJlc3MpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgaXNWYWxpZEFkZHJlc3NSZWdleChhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gL14oXlB8fE5vZGVJRCktW2EtekEtWjAtOV0rJC8udGVzdChhZGRyZXNzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYSBibG9jayBJRFxuICAgKiBAcGFyYW0ge3N0cmluZ30gaGFzaCAtIGJsb2NrIElEIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIHZhbGlkYXRpb24gcmVzdWx0XG4gICAqL1xuICBpc1ZhbGlkQmxvY2tJZChoYXNoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGVjb2RlZCA9IEJ1ZmZlci5mcm9tKGhhc2gsICdoZXgnKTtcbiAgICAgIHJldHVybiBkZWNvZGVkLmxlbmd0aCA9PT0gMzI7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBhIHB1YmxpYyBrZXlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHB1YiAtIHB1YmxpYyBrZXkgdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gdmFsaWRhdGlvbiByZXN1bHRcbiAgICovXG4gIGlzVmFsaWRQdWJsaWNLZXkocHViOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoaXNWYWxpZFhwdWIocHViKSkgcmV0dXJuIHRydWU7XG5cbiAgICBsZXQgcHViQnVmOiBCdWZmZXI7XG4gICAgaWYgKHB1Yi5sZW5ndGggPT09IDUwKSB7XG4gICAgICB0cnkge1xuICAgICAgICBwdWJCdWYgPSBCdWZmZXIuZnJvbShwdWIsICdoZXgnKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwdWIubGVuZ3RoICE9PSA2NiAmJiBwdWIubGVuZ3RoICE9PSAxMzApIHJldHVybiBmYWxzZTtcblxuICAgICAgY29uc3QgZmlyc3RCeXRlID0gcHViLnNsaWNlKDAsIDIpO1xuICAgICAgaWYgKHB1Yi5sZW5ndGggPT09IDEzMCAmJiBmaXJzdEJ5dGUgIT09ICcwNCcpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmIChwdWIubGVuZ3RoID09PSA2NiAmJiBmaXJzdEJ5dGUgIT09ICcwMicgJiYgZmlyc3RCeXRlICE9PSAnMDMnKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoIXRoaXMuYWxsSGV4Q2hhcnMocHViKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICBwdWJCdWYgPSBCdWZmZXIuZnJvbShwdWIsICdoZXgnKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgZWNjLmlzUG9pbnQocHViQnVmKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGEgcHJpdmF0ZSBrZXlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBydiAtIHByaXZhdGUga2V5IHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIHZhbGlkYXRpb24gcmVzdWx0XG4gICAqL1xuICBpc1ZhbGlkUHJpdmF0ZUtleShwcnY6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmIChpc1ZhbGlkWHBydihwcnYpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAocHJ2Lmxlbmd0aCAhPT0gNjQgJiYgcHJ2Lmxlbmd0aCAhPT0gNjYpIHJldHVybiBmYWxzZTtcbiAgICBpZiAocHJ2Lmxlbmd0aCA9PT0gNjYgJiYgcHJ2LnNsaWNlKDY0KSAhPT0gJzAxJykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmFsbEhleENoYXJzKHBydik7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgc3RyaW5nIGNvbnRhaW5zIG9ubHkgaGV4IGNoYXJhY3RlcnNcbiAgICovXG4gIGFsbEhleENoYXJzKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIC9eKDB4KXswLDF9KFswLTlhLWZdKSskL2kudGVzdChzdHIpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBzaWduYXR1cmUgdXNpbmcgdGhlIEZsYXJlIG5ldHdvcmsgcGFyYW1ldGVyc1xuICAgKiBSZXR1cm5zIGEgNjUtYnl0ZSBzaWduYXR1cmUgKDY0IGJ5dGVzIHNpZ25hdHVyZSArIDEgYnl0ZSByZWNvdmVyeSBwYXJhbWV0ZXIpXG4gICAqL1xuICBjcmVhdGVTaWduYXR1cmUobmV0d29yazogRmxhcmVOZXR3b3JrLCBtZXNzYWdlOiBCdWZmZXIsIHBydjogQnVmZmVyKTogQnVmZmVyIHtcbiAgICBjb25zdCBtZXNzYWdlSGFzaCA9IHRoaXMuc2hhMjU2KG1lc3NhZ2UpO1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IGVjYy5zaWduKG1lc3NhZ2VIYXNoLCBwcnYpO1xuXG4gICAgLy8gR2V0IHRoZSBwdWJsaWMga2V5IGZyb20gdGhlIHByaXZhdGUga2V5IGZvciByZWNvdmVyeSBwYXJhbWV0ZXIgZGV0ZXJtaW5hdGlvblxuICAgIGNvbnN0IHB1YmxpY0tleSA9IGVjYy5wb2ludEZyb21TY2FsYXIocHJ2LCB0cnVlKTtcbiAgICBpZiAoIXB1YmxpY0tleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZGVyaXZlIHB1YmxpYyBrZXkgZnJvbSBwcml2YXRlIGtleScpO1xuICAgIH1cblxuICAgIC8vIFRyeSByZWNvdmVyeSB3aXRoIHBhcmFtIDAgYW5kIDEgdG8gZmluZCB0aGUgY29ycmVjdCBvbmVcbiAgICBsZXQgcmVjb3ZlcnlQYXJhbSA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gMTsgaSsrKSB7XG4gICAgICBjb25zdCByZWNvdmVyZWQgPSBlY2MucmVjb3ZlclB1YmxpY0tleShtZXNzYWdlSGFzaCwgc2lnbmF0dXJlLCBpLCB0cnVlKTtcbiAgICAgIGlmIChyZWNvdmVyZWQgJiYgQnVmZmVyLmZyb20ocmVjb3ZlcmVkKS5lcXVhbHMoQnVmZmVyLmZyb20ocHVibGljS2V5KSkpIHtcbiAgICAgICAgcmVjb3ZlcnlQYXJhbSA9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFwcGVuZCByZWNvdmVyeSBwYXJhbWV0ZXIgdG8gY3JlYXRlIDY1LWJ5dGUgc2lnbmF0dXJlXG4gICAgY29uc3Qgc2lnV2l0aFJlY292ZXJ5ID0gQnVmZmVyLmFsbG9jKDY1KTtcbiAgICBCdWZmZXIuZnJvbShzaWduYXR1cmUpLmNvcHkoc2lnV2l0aFJlY292ZXJ5LCAwKTtcbiAgICBzaWdXaXRoUmVjb3ZlcnlbNjRdID0gcmVjb3ZlcnlQYXJhbTtcblxuICAgIHJldHVybiBzaWdXaXRoUmVjb3Zlcnk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgYSBzaWduYXR1cmVcbiAgICogQHBhcmFtIG1lc3NhZ2VIYXNoIC0gVGhlIFNIQTI1NiBoYXNoIG9mIHRoZSBtZXNzYWdlIChlLmcuLCBzaWduYWJsZVBheWxvYWQpXG4gICAqIEBwYXJhbSBzaWduYXR1cmUgLSBUaGUgNjQtYnl0ZSBzaWduYXR1cmUgKHdpdGhvdXQgcmVjb3ZlcnkgcGFyYW1ldGVyKVxuICAgKiBAcGFyYW0gcHVibGljS2V5IC0gVGhlIHB1YmxpYyBrZXkgdG8gdmVyaWZ5IGFnYWluc3RcbiAgICogQHJldHVybnMgdHJ1ZSBpZiBzaWduYXR1cmUgaXMgdmFsaWRcbiAgICovXG4gIHZlcmlmeVNpZ25hdHVyZShtZXNzYWdlSGFzaDogQnVmZmVyLCBzaWduYXR1cmU6IEJ1ZmZlciwgcHVibGljS2V5OiBCdWZmZXIpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGVjYy52ZXJpZnkobWVzc2FnZUhhc2gsIHB1YmxpY0tleSwgc2lnbmF0dXJlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgc2lnbmF0dXJlIG9iamVjdFxuICAgKi9cbiAgY3JlYXRlTmV3U2lnKHNpZ0hleDogc3RyaW5nKTogU2lnbmF0dXJlIHtcbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShzaWdIZXgucGFkU3RhcnQoMTMwLCAnMCcpLCAnaGV4Jyk7XG4gICAgcmV0dXJuIG5ldyBTaWduYXR1cmUoYnVmZmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGVtcHR5IHNpZ25hdHVyZSB3aXRoIGVtYmVkZGVkIGFkZHJlc3MgZm9yIHNpZ25hdHVyZSBzbG90IGlkZW50aWZpY2F0aW9uLlxuICAgKiBUaGUgYWRkcmVzcyBpcyBlbWJlZGRlZCBhdCBwb3NpdGlvbiA5MCAoYWZ0ZXIgdGhlIGZpcnN0IDQ1IHplcm8gYnl0ZXMpLlxuICAgKiBUaGlzIGFsbG93cyB0aGUgc2lnbmluZyBsb2dpYyB0byBkZXRlcm1pbmUgd2hpY2ggc2xvdCBiZWxvbmdzIHRvIHdoaWNoIGFkZHJlc3MuXG4gICAqIEBwYXJhbSBhZGRyZXNzSGV4IFRoZSAyMC1ieXRlIGFkZHJlc3MgaW4gaGV4IGZvcm1hdCAoNDAgY2hhcnMsIHdpdGhvdXQgMHggcHJlZml4KVxuICAgKi9cbiAgY3JlYXRlRW1wdHlTaWdXaXRoQWRkcmVzcyhhZGRyZXNzSGV4OiBzdHJpbmcpOiBTaWduYXR1cmUge1xuICAgIC8vIEZpcnN0IDQ1IGJ5dGVzICg5MCBoZXggY2hhcnMpIGFyZSB6ZXJvcywgZm9sbG93ZWQgYnkgMjAtYnl0ZSBhZGRyZXNzICg0MCBoZXggY2hhcnMpXG4gICAgY29uc3QgY2xlYW5BZGRyID0gdGhpcy5yZW1vdmVIZXhQcmVmaXgoYWRkcmVzc0hleCkudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBzaWdIZXggPSAnMCcucmVwZWF0KDkwKSArIGNsZWFuQWRkci5wYWRTdGFydCg0MCwgJzAnKTtcbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShzaWdIZXgsICdoZXgnKTtcbiAgICByZXR1cm4gbmV3IFNpZ25hdHVyZShidWZmZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3RzIHRoZSBlbWJlZGRlZCBhZGRyZXNzIGZyb20gYW4gZW1wdHkgc2lnbmF0dXJlLlxuICAgKiBSZXR1cm5zIHRoZSBhZGRyZXNzIGhleCBzdHJpbmcgKDQwIGNoYXJzKSBvciBlbXB0eSBzdHJpbmcgaWYgbm90IGZvdW5kLlxuICAgKi9cbiAgZ2V0QWRkcmVzc0Zyb21FbXB0eVNpZyhzaWc6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgY2xlYW5TaWcgPSB0aGlzLnJlbW92ZUhleFByZWZpeChzaWcpO1xuICAgIGlmIChjbGVhblNpZy5sZW5ndGggPj0gMTMwKSB7XG4gICAgICAvLyBBZGRyZXNzIGlzIGF0IHBvc2l0aW9uIDkwLTEzMCAobGFzdCA0MCBoZXggY2hhcnMgPSAyMCBieXRlcylcbiAgICAgIHJldHVybiBjbGVhblNpZy5zdWJzdHJpbmcoOTAsIDEzMCkudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGVzIFNIQTI1NiBoYXNoXG4gICAqL1xuICBzaGEyNTYoYnVmOiBVaW50OEFycmF5KTogQnVmZmVyIHtcbiAgICByZXR1cm4gY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKGJ1ZikuZGlnZXN0KCk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHJhdyB0cmFuc2FjdGlvbiBmb3JtYXRcbiAgICovXG4gIHZhbGlkYXRlUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghcmF3VHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignUmF3IHRyYW5zYWN0aW9uIGlzIGVtcHR5Jyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5hbGxIZXhDaGFycyhyYXdUcmFuc2FjdGlvbikpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZVRyYW5zYWN0aW9uRXJyb3IoJ1JhdyB0cmFuc2FjdGlvbiBpcyBub3QgaGV4IHN0cmluZycpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgb3V0cHV0IGlzIFRyYW5zZmVyYWJsZU91dHB1dCB0eXBlXG4gICAqL1xuICBpc1RyYW5zZmVyYWJsZU91dHB1dChvdXRwdXQ6IE91dHB1dCk6IG91dHB1dCBpcyBUcmFuc2ZlcmFibGVPdXRwdXQge1xuICAgIHJldHVybiBvdXRwdXQ/Ll90eXBlID09PSBUeXBlU3ltYm9scy5UcmFuc2ZlcmFibGVPdXRwdXQ7XG4gIH1cblxuICAvKipcbiAgICogTWFwcyBvdXRwdXRzIHRvIGVudHJ5IGZvcm1hdFxuICAgKi9cbiAgbWFwT3V0cHV0VG9FbnRyeShuZXR3b3JrOiBGbGFyZU5ldHdvcmspOiAoT3V0cHV0KSA9PiBFbnRyeSB7XG4gICAgcmV0dXJuIChvdXRwdXQ6IE91dHB1dCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNUcmFuc2ZlcmFibGVPdXRwdXQob3V0cHV0KSkge1xuICAgICAgICBjb25zdCBvdXRwdXRBbW91bnQgPSBvdXRwdXQuYW1vdW50KCk7XG4gICAgICAgIGNvbnN0IGFkZHJlc3MgPSAob3V0cHV0Lm91dHB1dCBhcyBUcmFuc2Zlck91dHB1dClcbiAgICAgICAgICAuZ2V0T3duZXJzKClcbiAgICAgICAgICAubWFwKChhKSA9PiB0aGlzLmFkZHJlc3NUb1N0cmluZyhuZXR3b3JrLmhycCwgbmV0d29yay5hbGlhcywgQnVmZmVyLmZyb20oYSkpKVxuICAgICAgICAgIC5zb3J0KClcbiAgICAgICAgICAuam9pbihBRERSRVNTX1NFUEFSQVRPUik7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmFsdWU6IG91dHB1dEFtb3VudC50b1N0cmluZygpLFxuICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgb3V0cHV0IHR5cGUnKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgMHggcHJlZml4IGZyb20gaGV4IHN0cmluZ1xuICAgKi9cbiAgcmVtb3ZlSGV4UHJlZml4KGhleDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gaGV4LnN0YXJ0c1dpdGgoJzB4JykgPyBoZXguc3Vic3RyaW5nKDIpIDogaGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIG91dHB1dCBpbmRleCB0byBidWZmZXJcbiAgICovXG4gIG91dHB1dGlkeE51bWJlclRvQnVmZmVyKG91dHB1dGlkeDogc3RyaW5nKTogQnVmZmVyIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oTnVtYmVyKG91dHB1dGlkeCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsICcwJyksICdoZXgnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBvdXRwdXQgaW5kZXggYnVmZmVyIHRvIG51bWJlciBzdHJpbmdcbiAgICovXG4gIG91dHB1dGlkeEJ1ZmZlclRvTnVtYmVyKG91dHB1dGlkeDogQnVmZmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcGFyc2VJbnQob3V0cHV0aWR4LnRvU3RyaW5nKCdoZXgnKSwgMTYpLnRvU3RyaW5nKCk7XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIG1ldGhvZCB0byBjb252ZXJ0IGFkZHJlc3MgY29tcG9uZW50cyB0byBzdHJpbmdcbiAgICovXG4gIHB1YmxpYyBhZGRyZXNzVG9TdHJpbmcgPSAoaHJwOiBzdHJpbmcsIHByZWZpeDogc3RyaW5nLCBhZGRyZXNzOiBCdWZmZXIpOiBzdHJpbmcgPT4ge1xuICAgIC8vIENvbnZlcnQgdGhlIGFkZHJlc3MgYnl0ZXMgdG8gNS1iaXQgd29yZHMgZm9yIGJlY2gzMiBlbmNvZGluZ1xuICAgIGNvbnN0IHdvcmRzID0gYmVjaDMyLnRvV29yZHMoYWRkcmVzcyk7XG4gICAgLy8gQ3JlYXRlIHRoZSBmdWxsIGJlY2gzMiBhZGRyZXNzIHdpdGggZm9ybWF0OiBQLXtocnB9MXtiZWNoMzJfZW5jb2RlZF9hZGRyZXNzfVxuICAgIHJldHVybiBgJHtwcmVmaXh9LSR7YmVjaDMyLmVuY29kZShocnAsIHdvcmRzKX1gO1xuICB9O1xuXG4gIC8qKlxuICAgKiBEZWNvZGVzIGEgYmFzZTU4IHN0cmluZyB3aXRoIGNoZWNrc3VtIHRvIGEgQnVmZmVyXG4gICAqL1xuICBwdWJsaWMgY2I1OERlY29kZShzdHI6IHN0cmluZyk6IEJ1ZmZlciB7XG4gICAgY29uc3QgZGVjb2RlZCA9IGJzNTguZGVjb2RlKHN0cik7XG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlQ2hlY2tzdW0oQnVmZmVyLmZyb20oZGVjb2RlZCkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY2hlY2tzdW0nKTtcbiAgICB9XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGRlY29kZWQuc2xpY2UoMCwgZGVjb2RlZC5sZW5ndGggLSA0KSk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGEgY2hlY2tzdW0gb24gYSBCdWZmZXIgYW5kIHJldHVybnMgdHJ1ZSBpZiB2YWxpZCwgZmFsc2UgaWYgbm90XG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlQ2hlY2tzdW0oYnVmZjogQnVmZmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaGFzaFNsaWNlID0gYnVmZi5zbGljZShidWZmLmxlbmd0aCAtIDQpO1xuICAgIGNvbnN0IGNhbGN1bGF0ZWRIYXNoU2xpY2UgPSBjcmVhdGVIYXNoKCdzaGEyNTYnKVxuICAgICAgLnVwZGF0ZShidWZmLnNsaWNlKDAsIGJ1ZmYubGVuZ3RoIC0gNCkpXG4gICAgICAuZGlnZXN0KClcbiAgICAgIC5zbGljZSgyOCk7XG4gICAgcmV0dXJuIGhhc2hTbGljZS50b1N0cmluZygnaGV4JykgPT09IGNhbGN1bGF0ZWRIYXNoU2xpY2UudG9TdHJpbmcoJ2hleCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuY29kZXMgYSBCdWZmZXIgYXMgYSBiYXNlNTggc3RyaW5nIHdpdGggY2hlY2tzdW1cbiAgICovXG4gIHB1YmxpYyBjYjU4RW5jb2RlKGJ5dGVzOiBCdWZmZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IHdpdGhDaGVja3N1bSA9IHRoaXMuYWRkQ2hlY2tzdW0oYnl0ZXMpO1xuICAgIHJldHVybiBiczU4LmVuY29kZSh3aXRoQ2hlY2tzdW0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBjaGVja3N1bSB0byBhIEJ1ZmZlciBhbmQgcmV0dXJucyB0aGUgY29uY2F0ZW5hdGVkIHJlc3VsdFxuICAgKiBVc2VzIGxhc3QgNCBieXRlcyBvZiBTSEEyNTYgaGFzaCBhcyBjaGVja3N1bSAobWF0Y2hpbmcgYXZheHAgYmVoYXZpb3IpXG4gICAqL1xuICBwdWJsaWMgYWRkQ2hlY2tzdW0oYnVmZjogQnVmZmVyIHwgVWludDhBcnJheSk6IFVpbnQ4QXJyYXkge1xuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGJ1ZmYpO1xuICAgIGNvbnN0IGhhc2hTbGljZSA9IGNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShidWZmZXIpLmRpZ2VzdCgpLnNsaWNlKDI4KTtcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmNvbmNhdChbYnVmZmVyLCBoYXNoU2xpY2VdKSk7XG4gIH1cblxuICAvLyBJbiB1dGlscy50cywgYWRkIHRoaXMgbWV0aG9kIHRvIHRoZSBVdGlscyBjbGFzczpcblxuICAvKipcbiAgICogUGFyc2UgYW4gYWRkcmVzcyBzdHJpbmcgaW50byBhIEJ1ZmZlclxuICAgKiBAcGFyYW0gYWRkcmVzcyAtIFRoZSBhZGRyZXNzIHRvIHBhcnNlXG4gICAqIEByZXR1cm5zIEJ1ZmZlciBjb250YWluaW5nIHRoZSBwYXJzZWQgYWRkcmVzc1xuICAgKi9cbiAgcHVibGljIHBhcnNlQWRkcmVzcyA9IChhZGRyZXNzOiBzdHJpbmcpOiBCdWZmZXIgPT4ge1xuICAgIHJldHVybiB0aGlzLnN0cmluZ1RvQWRkcmVzcyhhZGRyZXNzKTtcbiAgfTtcblxuICBwdWJsaWMgc3RyaW5nVG9BZGRyZXNzID0gKGFkZHJlc3M6IHN0cmluZywgaHJwPzogc3RyaW5nKTogQnVmZmVyID0+IHtcbiAgICAvLyBIYW5kbGUgaGV4IGFkZHJlc3Nlc1xuICAgIGlmIChhZGRyZXNzLnN0YXJ0c1dpdGgoJzB4JykpIHtcbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbShhZGRyZXNzLnNsaWNlKDIpLCAnaGV4Jyk7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHJhdyBoZXggd2l0aG91dCAweCBwcmVmaXhcbiAgICBpZiAoL15bMC05YS1mQS1GXXs0MH0kLy50ZXN0KGFkZHJlc3MpKSB7XG4gICAgICByZXR1cm4gQnVmZmVyLmZyb20oYWRkcmVzcywgJ2hleCcpO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBCZWNoMzIgYWRkcmVzc2VzXG4gICAgY29uc3QgcGFydHMgPSBhZGRyZXNzLnRyaW0oKS5zcGxpdCgnLScpO1xuICAgIGlmIChwYXJ0cy5sZW5ndGggPCAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yIC0gVmFsaWQgYWRkcmVzcyBzaG91bGQgaW5jbHVkZSAtJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3BsaXQgPSBwYXJ0c1sxXS5sYXN0SW5kZXhPZignMScpO1xuICAgIGlmIChzcGxpdCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IgLSBWYWxpZCBiZWNoMzIgYWRkcmVzcyBtdXN0IGluY2x1ZGUgc2VwYXJhdG9yICgxKScpO1xuICAgIH1cblxuICAgIGNvbnN0IGh1bWFuUmVhZGFibGVQYXJ0ID0gcGFydHNbMV0uc2xpY2UoMCwgc3BsaXQpO1xuICAgIGlmIChodW1hblJlYWRhYmxlUGFydCAhPT0gJ2ZsYXJlJyAmJiBodW1hblJlYWRhYmxlUGFydCAhPT0gJ2Nvc3R3bycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IgLSBJbnZhbGlkIEhSUCcpO1xuICAgIH1cblxuICAgIHJldHVybiBCdWZmZXIuZnJvbShiZWNoMzIuZnJvbVdvcmRzKGJlY2gzMi5kZWNvZGUocGFydHNbMV0pLndvcmRzKSk7XG4gIH07XG5cbiAgZmxhcmVJZFN0cmluZyh2YWx1ZTogc3RyaW5nKTogSWQge1xuICAgIHJldHVybiBuZXcgSWQoQnVmZmVyLmZyb20odmFsdWUsICdoZXgnKSk7XG4gIH1cblxuICAvKipcbiAgICogUmVjb3ZlciBwdWJsaWMga2V5IGZyb20gc2lnbmF0dXJlXG4gICAqIEBwYXJhbSBtZXNzYWdlSGFzaCAtIFRoZSBTSEEyNTYgaGFzaCBvZiB0aGUgbWVzc2FnZSAoZS5nLiwgc2lnbmFibGVQYXlsb2FkKVxuICAgKiBAcGFyYW0gc2lnbmF0dXJlIC0gNjUtYnl0ZSBzaWduYXR1cmUgKDY0IGJ5dGVzIHNpZ25hdHVyZSArIDEgYnl0ZSByZWNvdmVyeSBwYXJhbWV0ZXIpXG4gICAqIEByZXR1cm4gcmVjb3ZlcmVkIHB1YmxpYyBrZXlcbiAgICovXG4gIHJlY292ZXJ5U2lnbmF0dXJlKG1lc3NhZ2VIYXNoOiBCdWZmZXIsIHNpZ25hdHVyZTogQnVmZmVyKTogQnVmZmVyIHtcbiAgICB0cnkge1xuICAgICAgLy8gRXh0cmFjdCByZWNvdmVyeSBwYXJhbWV0ZXIgYW5kIHNpZ25hdHVyZVxuICAgICAgaWYgKHNpZ25hdHVyZS5sZW5ndGggIT09IDY1KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzaWduYXR1cmUgbGVuZ3RoIC0gZXhwZWN0ZWQgNjUgYnl0ZXMgKDY0IGJ5dGVzIHNpZ25hdHVyZSArIDEgYnl0ZSByZWNvdmVyeSknKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVjb3ZlcnlQYXJhbSA9IHNpZ25hdHVyZVs2NF07XG4gICAgICBjb25zdCBzaWdPbmx5ID0gc2lnbmF0dXJlLnNsaWNlKDAsIDY0KTtcblxuICAgICAgLy8gUmVjb3ZlciBwdWJsaWMga2V5IHVzaW5nIHRoZSBwcm92aWRlZCByZWNvdmVyeSBwYXJhbWV0ZXJcbiAgICAgIC8vIG1lc3NhZ2VIYXNoIHNob3VsZCBhbHJlYWR5IGJlIHRoZSBTSEEyNTYgaGFzaCAoc2lnbmFibGVQYXlsb2FkKVxuICAgICAgY29uc3QgcmVjb3ZlcmVkID0gZWNjLnJlY292ZXJQdWJsaWNLZXkobWVzc2FnZUhhc2gsIHNpZ09ubHksIHJlY292ZXJ5UGFyYW0sIHRydWUpO1xuICAgICAgaWYgKCFyZWNvdmVyZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gcmVjb3ZlciBwdWJsaWMga2V5Jyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbShyZWNvdmVyZWQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byByZWNvdmVyIHNpZ25hdHVyZTogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0eCBpcyBmb3IgdGhlIGJsb2NrY2hhaW5JZFxuICAgKlxuICAgKiBAcGFyYW0ge1R4fSB0eFxuICAgKiBAcGFyYW0ge3N0cmluZ30gYmxvY2tjaGFpbklkIC0gYmxvY2tjaGFpbiBJRCBpbiBoZXggZm9ybWF0XG4gICAqIEByZXR1cm5zIHRydWUgaWYgdHggaXMgZm9yIGJsb2NrY2hhaW5JZFxuICAgKi9cbiAgaXNUcmFuc2FjdGlvbk9mKHR4OiBUeCwgYmxvY2tjaGFpbklkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAvLyBOb3RlOiBnZXRCbG9ja2NoYWluSWQoKSBhbmQgQmxvY2tjaGFpbklkLnZhbHVlKCkgcmV0dXJuIENCNTgtZW5jb2RlZCBzdHJpbmdzLFxuICAgIC8vIGJ1dCB3ZSBuZWVkIGhleCBmb3JtYXQsIHNvIHdlIHVzZSB0b0J5dGVzKCkgYW5kIGNvbnZlcnQgdG8gaGV4XG4gICAgY29uc3QgZXh0cmFjdEJsb2NrY2hhaW5JZCA9ICh0eE9iajogYW55KTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gICAgICBpZiAodHlwZW9mIHR4T2JqLmdldFR4ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbnN0IGlubmVyVHggPSB0eE9iai5nZXRUeCgpO1xuICAgICAgICBpZiAoaW5uZXJUeC5iYXNlVHg/LkJsb2NrY2hhaW5JZD8udG9CeXRlcykge1xuICAgICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShpbm5lclR4LmJhc2VUeC5CbG9ja2NoYWluSWQudG9CeXRlcygpKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlubmVyVHguYmxvY2tjaGFpbklkPy50b0J5dGVzKSB7XG4gICAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGlubmVyVHguYmxvY2tjaGFpbklkLnRvQnl0ZXMoKSkudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0eE9iai50eD8uYmFzZVR4Py5CbG9ja2NoYWluSWQ/LnRvQnl0ZXMpIHtcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHR4T2JqLnR4LmJhc2VUeC5CbG9ja2NoYWluSWQudG9CeXRlcygpKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eE9iai5iYXNlVHg/LkJsb2NrY2hhaW5JZD8udG9CeXRlcykge1xuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20odHhPYmouYmFzZVR4LkJsb2NrY2hhaW5JZC50b0J5dGVzKCkpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eE9iai5ibG9ja2NoYWluSWQ/LnRvQnl0ZXMpIHtcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHR4T2JqLmJsb2NrY2hhaW5JZC50b0J5dGVzKCkpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIGNvbnN0IHR4QmxvY2tjaGFpbklkID0gZXh0cmFjdEJsb2NrY2hhaW5JZCh0eCk7XG4gICAgcmV0dXJuIHR4QmxvY2tjaGFpbklkID09PSBibG9ja2NoYWluSWQ7XG4gIH1cbn1cblxuY29uc3QgdXRpbHMgPSBuZXcgVXRpbHMoKTtcbmV4cG9ydCBkZWZhdWx0IHV0aWxzO1xuIl19
471
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1EQVUrQjtBQUMvQiw4Q0FPeUI7QUFFekIsbUNBQWdDO0FBQ2hDLG1DQUFvQztBQUNwQyxnREFBdUM7QUFDdkMsbUNBQW1HO0FBQ25HLGdEQUF3QjtBQUN4QixtQ0FBZ0M7QUFFaEMsTUFBYSxLQUFLO0lBQWxCO1FBNlBFOztXQUVHO1FBQ0ksb0JBQWUsR0FBRyxDQUFDLEdBQVcsRUFBRSxNQUFjLEVBQUUsT0FBZSxFQUFVLEVBQUU7WUFDaEYsK0RBQStEO1lBQy9ELE1BQU0sS0FBSyxHQUFHLGVBQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdEMsK0VBQStFO1lBQy9FLE9BQU8sR0FBRyxNQUFNLElBQUksZUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNsRCxDQUFDLENBQUM7UUEyQ0YsbURBQW1EO1FBRW5EOzs7O1dBSUc7UUFDSSxpQkFBWSxHQUFHLENBQUMsT0FBZSxFQUFVLEVBQUU7WUFDaEQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQztRQUVLLG9CQUFlLEdBQUcsQ0FBQyxPQUFlLEVBQUUsR0FBWSxFQUFVLEVBQUU7WUFDakUsdUJBQXVCO1lBQ3ZCLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUM3QixPQUFPLGVBQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM5QyxDQUFDO1lBRUQsbUNBQW1DO1lBQ25DLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ3RDLE9BQU8sZUFBTSxDQUFDLElB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RUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUMxQixrQkFBZSxLQUFLLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBTaWduYXR1cmUsXG4gIFRyYW5zZmVyYWJsZU91dHB1dCxcbiAgVHJhbnNmZXJPdXRwdXQsXG4gIFR5cGVTeW1ib2xzLFxuICBJZCxcbiAgVXR4byxcbiAgQmlnSW50UHIsXG4gIE91dHB1dE93bmVycyxcbiAgYXZheFNlcmlhbCxcbn0gZnJvbSAnQGZsYXJlbmV0d29yay9mbGFyZWpzJztcbmltcG9ydCB7XG4gIEJhc2VVdGlscyxcbiAgRW50cnksXG4gIEludmFsaWRUcmFuc2FjdGlvbkVycm9yLFxuICBpc1ZhbGlkWHBydixcbiAgaXNWYWxpZFhwdWIsXG4gIFBhcnNlVHJhbnNhY3Rpb25FcnJvcixcbn0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IEZsYXJlTmV0d29yayB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ2J1ZmZlcic7XG5pbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IGVjYyB9IGZyb20gJ0BiaXRnby9zZWNwMjU2azEnO1xuaW1wb3J0IHsgQUREUkVTU19TRVBBUkFUT1IsIERlY29kZWRVdHhvT2JqLCBPdXRwdXQsIFNFQ1AyNTZLMV9UcmFuc2Zlcl9PdXRwdXQsIFR4IH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgYnM1OCBmcm9tICdiczU4JztcbmltcG9ydCB7IGJlY2gzMiB9IGZyb20gJ2JlY2gzMic7XG5cbmV4cG9ydCBjbGFzcyBVdGlscyBpbXBsZW1lbnRzIEJhc2VVdGlscyB7XG4gIGlzVmFsaWRUcmFuc2FjdGlvbklkKHR4SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuICBpc1ZhbGlkU2lnbmF0dXJlKHNpZ25hdHVyZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG4gIC8qKlxuICAgKiBDaGVjayBpZiBhZGRyZXNzZXMgaW4gd2FsbGV0IG1hdGNoIFVUWE8gb3V0cHV0IGFkZHJlc3Nlc1xuICAgKi9cbiAgcHVibGljIGluY2x1ZGVJbih3YWxsZXRBZGRyZXNzZXM6IHN0cmluZ1tdLCBvdHhvT3V0cHV0QWRkcmVzc2VzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB3YWxsZXRBZGRyZXNzZXMubWFwKChhKSA9PiBvdHhvT3V0cHV0QWRkcmVzc2VzLmluY2x1ZGVzKGEpKS5yZWR1Y2UoKGEsIGIpID0+IGEgJiYgYiwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGEgRmxhcmUgYWRkcmVzcyBvciBhcnJheSBvZiBhZGRyZXNzZXNcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBzdHJpbmdbXX0gYWRkcmVzcyAtIGFkZHJlc3MoZXMpIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIHZhbGlkYXRpb24gcmVzdWx0XG4gICAqL1xuICBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGFkZHJlc3NBcnI6IHN0cmluZ1tdID0gQXJyYXkuaXNBcnJheShhZGRyZXNzKSA/IGFkZHJlc3MgOiBhZGRyZXNzLnNwbGl0KCd+Jyk7XG5cbiAgICBmb3IgKGNvbnN0IGFkZHJlc3Mgb2YgYWRkcmVzc0Fycikge1xuICAgICAgaWYgKCF0aGlzLmlzVmFsaWRBZGRyZXNzUmVnZXgoYWRkcmVzcykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1ZhbGlkQWRkcmVzc1JlZ2V4KGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvXiheUHx8Tm9kZUlEKS1bYS16QS1aMC05XSskLy50ZXN0KGFkZHJlc3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBhIGJsb2NrIElEXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBoYXNoIC0gYmxvY2sgSUQgdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gdmFsaWRhdGlvbiByZXN1bHRcbiAgICovXG4gIGlzVmFsaWRCbG9ja0lkKGhhc2g6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZWNvZGVkID0gQnVmZmVyLmZyb20oaGFzaCwgJ2hleCcpO1xuICAgICAgcmV0dXJuIGRlY29kZWQubGVuZ3RoID09PSAzMjtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGEgcHVibGljIGtleVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHViIC0gcHVibGljIGtleSB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSB2YWxpZGF0aW9uIHJlc3VsdFxuICAgKi9cbiAgaXNWYWxpZFB1YmxpY0tleShwdWI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmIChpc1ZhbGlkWHB1YihwdWIpKSByZXR1cm4gdHJ1ZTtcblxuICAgIGxldCBwdWJCdWY6IEJ1ZmZlcjtcbiAgICBpZiAocHViLmxlbmd0aCA9PT0gNTApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHB1YkJ1ZiA9IEJ1ZmZlci5mcm9tKHB1YiwgJ2hleCcpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHB1Yi5sZW5ndGggIT09IDY2ICYmIHB1Yi5sZW5ndGggIT09IDEzMCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICBjb25zdCBmaXJzdEJ5dGUgPSBwdWIuc2xpY2UoMCwgMik7XG4gICAgICBpZiAocHViLmxlbmd0aCA9PT0gMTMwICYmIGZpcnN0Qnl0ZSAhPT0gJzA0JykgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKHB1Yi5sZW5ndGggPT09IDY2ICYmIGZpcnN0Qnl0ZSAhPT0gJzAyJyAmJiBmaXJzdEJ5dGUgIT09ICcwMycpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmICghdGhpcy5hbGxIZXhDaGFycyhwdWIpKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIHB1YkJ1ZiA9IEJ1ZmZlci5mcm9tKHB1YiwgJ2hleCcpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBlY2MuaXNQb2ludChwdWJCdWYpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYSBwcml2YXRlIGtleVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJ2IC0gcHJpdmF0ZSBrZXkgdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gdmFsaWRhdGlvbiByZXN1bHRcbiAgICovXG4gIGlzVmFsaWRQcml2YXRlS2V5KHBydjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKGlzVmFsaWRYcHJ2KHBydikpIHJldHVybiB0cnVlO1xuICAgIGlmIChwcnYubGVuZ3RoICE9PSA2NCAmJiBwcnYubGVuZ3RoICE9PSA2NikgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChwcnYubGVuZ3RoID09PSA2NiAmJiBwcnYuc2xpY2UoNjQpICE9PSAnMDEnKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuYWxsSGV4Q2hhcnMocHJ2KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBzdHJpbmcgY29udGFpbnMgb25seSBoZXggY2hhcmFjdGVyc1xuICAgKi9cbiAgYWxsSGV4Q2hhcnMoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gL14oMHgpezAsMX0oWzAtOWEtZl0pKyQvaS50ZXN0KHN0cik7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHNpZ25hdHVyZSB1c2luZyB0aGUgRmxhcmUgbmV0d29yayBwYXJhbWV0ZXJzXG4gICAqIFJldHVybnMgYSA2NS1ieXRlIHNpZ25hdHVyZSAoNjQgYnl0ZXMgc2lnbmF0dXJlICsgMSBieXRlIHJlY292ZXJ5IHBhcmFtZXRlcilcbiAgICovXG4gIGNyZWF0ZVNpZ25hdHVyZShuZXR3b3JrOiBGbGFyZU5ldHdvcmssIG1lc3NhZ2U6IEJ1ZmZlciwgcHJ2OiBCdWZmZXIpOiBCdWZmZXIge1xuICAgIGNvbnN0IG1lc3NhZ2VIYXNoID0gdGhpcy5zaGEyNTYobWVzc2FnZSk7XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gZWNjLnNpZ24obWVzc2FnZUhhc2gsIHBydik7XG5cbiAgICAvLyBHZXQgdGhlIHB1YmxpYyBrZXkgZnJvbSB0aGUgcHJpdmF0ZSBrZXkgZm9yIHJlY292ZXJ5IHBhcmFtZXRlciBkZXRlcm1pbmF0aW9uXG4gICAgY29uc3QgcHVibGljS2V5ID0gZWNjLnBvaW50RnJvbVNjYWxhcihwcnYsIHRydWUpO1xuICAgIGlmICghcHVibGljS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBkZXJpdmUgcHVibGljIGtleSBmcm9tIHByaXZhdGUga2V5Jyk7XG4gICAgfVxuXG4gICAgLy8gVHJ5IHJlY292ZXJ5IHdpdGggcGFyYW0gMCBhbmQgMSB0byBmaW5kIHRoZSBjb3JyZWN0IG9uZVxuICAgIGxldCByZWNvdmVyeVBhcmFtID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8PSAxOyBpKyspIHtcbiAgICAgIGNvbnN0IHJlY292ZXJlZCA9IGVjYy5yZWNvdmVyUHVibGljS2V5KG1lc3NhZ2VIYXNoLCBzaWduYXR1cmUsIGksIHRydWUpO1xuICAgICAgaWYgKHJlY292ZXJlZCAmJiBCdWZmZXIuZnJvbShyZWNvdmVyZWQpLmVxdWFscyhCdWZmZXIuZnJvbShwdWJsaWNLZXkpKSkge1xuICAgICAgICByZWNvdmVyeVBhcmFtID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQXBwZW5kIHJlY292ZXJ5IHBhcmFtZXRlciB0byBjcmVhdGUgNjUtYnl0ZSBzaWduYXR1cmVcbiAgICBjb25zdCBzaWdXaXRoUmVjb3ZlcnkgPSBCdWZmZXIuYWxsb2MoNjUpO1xuICAgIEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSkuY29weShzaWdXaXRoUmVjb3ZlcnksIDApO1xuICAgIHNpZ1dpdGhSZWNvdmVyeVs2NF0gPSByZWNvdmVyeVBhcmFtO1xuXG4gICAgcmV0dXJuIHNpZ1dpdGhSZWNvdmVyeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmllcyBhIHNpZ25hdHVyZVxuICAgKiBAcGFyYW0gbWVzc2FnZUhhc2ggLSBUaGUgU0hBMjU2IGhhc2ggb2YgdGhlIG1lc3NhZ2UgKGUuZy4sIHNpZ25hYmxlUGF5bG9hZClcbiAgICogQHBhcmFtIHNpZ25hdHVyZSAtIFRoZSA2NC1ieXRlIHNpZ25hdHVyZSAod2l0aG91dCByZWNvdmVyeSBwYXJhbWV0ZXIpXG4gICAqIEBwYXJhbSBwdWJsaWNLZXkgLSBUaGUgcHVibGljIGtleSB0byB2ZXJpZnkgYWdhaW5zdFxuICAgKiBAcmV0dXJucyB0cnVlIGlmIHNpZ25hdHVyZSBpcyB2YWxpZFxuICAgKi9cbiAgdmVyaWZ5U2lnbmF0dXJlKG1lc3NhZ2VIYXNoOiBCdWZmZXIsIHNpZ25hdHVyZTogQnVmZmVyLCBwdWJsaWNLZXk6IEJ1ZmZlcik6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZWNjLnZlcmlmeShtZXNzYWdlSGFzaCwgcHVibGljS2V5LCBzaWduYXR1cmUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBzaWduYXR1cmUgb2JqZWN0XG4gICAqL1xuICBjcmVhdGVOZXdTaWcoc2lnSGV4OiBzdHJpbmcpOiBTaWduYXR1cmUge1xuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHNpZ0hleC5wYWRTdGFydCgxMzAsICcwJyksICdoZXgnKTtcbiAgICByZXR1cm4gbmV3IFNpZ25hdHVyZShidWZmZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gZW1wdHkgc2lnbmF0dXJlIHdpdGggZW1iZWRkZWQgYWRkcmVzcyBmb3Igc2lnbmF0dXJlIHNsb3QgaWRlbnRpZmljYXRpb24uXG4gICAqIFRoZSBhZGRyZXNzIGlzIGVtYmVkZGVkIGF0IHBvc2l0aW9uIDkwIChhZnRlciB0aGUgZmlyc3QgNDUgemVybyBieXRlcykuXG4gICAqIFRoaXMgYWxsb3dzIHRoZSBzaWduaW5nIGxvZ2ljIHRvIGRldGVybWluZSB3aGljaCBzbG90IGJlbG9uZ3MgdG8gd2hpY2ggYWRkcmVzcy5cbiAgICogQHBhcmFtIGFkZHJlc3NIZXggVGhlIDIwLWJ5dGUgYWRkcmVzcyBpbiBoZXggZm9ybWF0ICg0MCBjaGFycywgd2l0aG91dCAweCBwcmVmaXgpXG4gICAqL1xuICBjcmVhdGVFbXB0eVNpZ1dpdGhBZGRyZXNzKGFkZHJlc3NIZXg6IHN0cmluZyk6IFNpZ25hdHVyZSB7XG4gICAgLy8gRmlyc3QgNDUgYnl0ZXMgKDkwIGhleCBjaGFycykgYXJlIHplcm9zLCBmb2xsb3dlZCBieSAyMC1ieXRlIGFkZHJlc3MgKDQwIGhleCBjaGFycylcbiAgICBjb25zdCBjbGVhbkFkZHIgPSB0aGlzLnJlbW92ZUhleFByZWZpeChhZGRyZXNzSGV4KS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHNpZ0hleCA9ICcwJy5yZXBlYXQoOTApICsgY2xlYW5BZGRyLnBhZFN0YXJ0KDQwLCAnMCcpO1xuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHNpZ0hleCwgJ2hleCcpO1xuICAgIHJldHVybiBuZXcgU2lnbmF0dXJlKGJ1ZmZlcik7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdHMgdGhlIGVtYmVkZGVkIGFkZHJlc3MgZnJvbSBhbiBlbXB0eSBzaWduYXR1cmUuXG4gICAqIFJldHVybnMgdGhlIGFkZHJlc3MgaGV4IHN0cmluZyAoNDAgY2hhcnMpIG9yIGVtcHR5IHN0cmluZyBpZiBub3QgZm91bmQuXG4gICAqL1xuICBnZXRBZGRyZXNzRnJvbUVtcHR5U2lnKHNpZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBjbGVhblNpZyA9IHRoaXMucmVtb3ZlSGV4UHJlZml4KHNpZyk7XG4gICAgaWYgKGNsZWFuU2lnLmxlbmd0aCA+PSAxMzApIHtcbiAgICAgIC8vIEFkZHJlc3MgaXMgYXQgcG9zaXRpb24gOTAtMTMwIChsYXN0IDQwIGhleCBjaGFycyA9IDIwIGJ5dGVzKVxuICAgICAgcmV0dXJuIGNsZWFuU2lnLnN1YnN0cmluZyg5MCwgMTMwKS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZXMgU0hBMjU2IGhhc2hcbiAgICovXG4gIHNoYTI1NihidWY6IFVpbnQ4QXJyYXkpOiBCdWZmZXIge1xuICAgIHJldHVybiBjcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoYnVmKS5kaWdlc3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgcmF3IHRyYW5zYWN0aW9uIGZvcm1hdFxuICAgKi9cbiAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFyYXdUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdSYXcgdHJhbnNhY3Rpb24gaXMgZW1wdHknKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmFsbEhleENoYXJzKHJhd1RyYW5zYWN0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcignUmF3IHRyYW5zYWN0aW9uIGlzIG5vdCBoZXggc3RyaW5nJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBvdXRwdXQgaXMgVHJhbnNmZXJhYmxlT3V0cHV0IHR5cGVcbiAgICovXG4gIGlzVHJhbnNmZXJhYmxlT3V0cHV0KG91dHB1dDogT3V0cHV0KTogb3V0cHV0IGlzIFRyYW5zZmVyYWJsZU91dHB1dCB7XG4gICAgcmV0dXJuIG91dHB1dD8uX3R5cGUgPT09IFR5cGVTeW1ib2xzLlRyYW5zZmVyYWJsZU91dHB1dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXBzIG91dHB1dHMgdG8gZW50cnkgZm9ybWF0XG4gICAqL1xuICBtYXBPdXRwdXRUb0VudHJ5KG5ldHdvcms6IEZsYXJlTmV0d29yayk6IChPdXRwdXQpID0+IEVudHJ5IHtcbiAgICByZXR1cm4gKG91dHB1dDogT3V0cHV0KSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1RyYW5zZmVyYWJsZU91dHB1dChvdXRwdXQpKSB7XG4gICAgICAgIGNvbnN0IG91dHB1dEFtb3VudCA9IG91dHB1dC5hbW91bnQoKTtcbiAgICAgICAgY29uc3QgYWRkcmVzcyA9IChvdXRwdXQub3V0cHV0IGFzIFRyYW5zZmVyT3V0cHV0KVxuICAgICAgICAgIC5nZXRPd25lcnMoKVxuICAgICAgICAgIC5tYXAoKGEpID0+IHRoaXMuYWRkcmVzc1RvU3RyaW5nKG5ldHdvcmsuaHJwLCBuZXR3b3JrLmFsaWFzLCBCdWZmZXIuZnJvbShhKSkpXG4gICAgICAgICAgLnNvcnQoKVxuICAgICAgICAgIC5qb2luKEFERFJFU1NfU0VQQVJBVE9SKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2YWx1ZTogb3V0cHV0QW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBvdXRwdXQgdHlwZScpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyAweCBwcmVmaXggZnJvbSBoZXggc3RyaW5nXG4gICAqL1xuICByZW1vdmVIZXhQcmVmaXgoaGV4OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBoZXguc3RhcnRzV2l0aCgnMHgnKSA/IGhleC5zdWJzdHJpbmcoMikgOiBoZXg7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgb3V0cHV0IGluZGV4IHRvIGJ1ZmZlclxuICAgKi9cbiAgb3V0cHV0aWR4TnVtYmVyVG9CdWZmZXIob3V0cHV0aWR4OiBzdHJpbmcpOiBCdWZmZXIge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShOdW1iZXIob3V0cHV0aWR4KS50b1N0cmluZygxNikucGFkU3RhcnQoOCwgJzAnKSwgJ2hleCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIG91dHB1dCBpbmRleCBidWZmZXIgdG8gbnVtYmVyIHN0cmluZ1xuICAgKi9cbiAgb3V0cHV0aWR4QnVmZmVyVG9OdW1iZXIob3V0cHV0aWR4OiBCdWZmZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBwYXJzZUludChvdXRwdXRpZHgudG9TdHJpbmcoJ2hleCcpLCAxNikudG9TdHJpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgbWV0aG9kIHRvIGNvbnZlcnQgYWRkcmVzcyBjb21wb25lbnRzIHRvIHN0cmluZ1xuICAgKi9cbiAgcHVibGljIGFkZHJlc3NUb1N0cmluZyA9IChocnA6IHN0cmluZywgcHJlZml4OiBzdHJpbmcsIGFkZHJlc3M6IEJ1ZmZlcik6IHN0cmluZyA9PiB7XG4gICAgLy8gQ29udmVydCB0aGUgYWRkcmVzcyBieXRlcyB0byA1LWJpdCB3b3JkcyBmb3IgYmVjaDMyIGVuY29kaW5nXG4gICAgY29uc3Qgd29yZHMgPSBiZWNoMzIudG9Xb3JkcyhhZGRyZXNzKTtcbiAgICAvLyBDcmVhdGUgdGhlIGZ1bGwgYmVjaDMyIGFkZHJlc3Mgd2l0aCBmb3JtYXQ6IFAte2hycH0xe2JlY2gzMl9lbmNvZGVkX2FkZHJlc3N9XG4gICAgcmV0dXJuIGAke3ByZWZpeH0tJHtiZWNoMzIuZW5jb2RlKGhycCwgd29yZHMpfWA7XG4gIH07XG5cbiAgLyoqXG4gICAqIERlY29kZXMgYSBiYXNlNTggc3RyaW5nIHdpdGggY2hlY2tzdW0gdG8gYSBCdWZmZXJcbiAgICovXG4gIHB1YmxpYyBjYjU4RGVjb2RlKHN0cjogc3RyaW5nKTogQnVmZmVyIHtcbiAgICBjb25zdCBkZWNvZGVkID0gYnM1OC5kZWNvZGUoc3RyKTtcbiAgICBpZiAoIXRoaXMudmFsaWRhdGVDaGVja3N1bShCdWZmZXIuZnJvbShkZWNvZGVkKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjaGVja3N1bScpO1xuICAgIH1cbiAgICByZXR1cm4gQnVmZmVyLmZyb20oZGVjb2RlZC5zbGljZSgwLCBkZWNvZGVkLmxlbmd0aCAtIDQpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYSBjaGVja3N1bSBvbiBhIEJ1ZmZlciBhbmQgcmV0dXJucyB0cnVlIGlmIHZhbGlkLCBmYWxzZSBpZiBub3RcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVDaGVja3N1bShidWZmOiBCdWZmZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBoYXNoU2xpY2UgPSBidWZmLnNsaWNlKGJ1ZmYubGVuZ3RoIC0gNCk7XG4gICAgY29uc3QgY2FsY3VsYXRlZEhhc2hTbGljZSA9IGNyZWF0ZUhhc2goJ3NoYTI1NicpXG4gICAgICAudXBkYXRlKGJ1ZmYuc2xpY2UoMCwgYnVmZi5sZW5ndGggLSA0KSlcbiAgICAgIC5kaWdlc3QoKVxuICAgICAgLnNsaWNlKDI4KTtcbiAgICByZXR1cm4gaGFzaFNsaWNlLnRvU3RyaW5nKCdoZXgnKSA9PT0gY2FsY3VsYXRlZEhhc2hTbGljZS50b1N0cmluZygnaGV4Jyk7XG4gIH1cblxuICAvKipcbiAgICogRW5jb2RlcyBhIEJ1ZmZlciBhcyBhIGJhc2U1OCBzdHJpbmcgd2l0aCBjaGVja3N1bVxuICAgKi9cbiAgcHVibGljIGNiNThFbmNvZGUoYnl0ZXM6IEJ1ZmZlcik6IHN0cmluZyB7XG4gICAgY29uc3Qgd2l0aENoZWNrc3VtID0gdGhpcy5hZGRDaGVja3N1bShieXRlcyk7XG4gICAgcmV0dXJuIGJzNTguZW5jb2RlKHdpdGhDaGVja3N1bSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGNoZWNrc3VtIHRvIGEgQnVmZmVyIGFuZCByZXR1cm5zIHRoZSBjb25jYXRlbmF0ZWQgcmVzdWx0XG4gICAqIFVzZXMgbGFzdCA0IGJ5dGVzIG9mIFNIQTI1NiBoYXNoIGFzIGNoZWNrc3VtIChtYXRjaGluZyBhdmF4cCBiZWhhdmlvcilcbiAgICovXG4gIHB1YmxpYyBhZGRDaGVja3N1bShidWZmOiBCdWZmZXIgfCBVaW50OEFycmF5KTogVWludDhBcnJheSB7XG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oYnVmZik7XG4gICAgY29uc3QgaGFzaFNsaWNlID0gY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKGJ1ZmZlcikuZGlnZXN0KCkuc2xpY2UoMjgpO1xuICAgIHJldHVybiBuZXcgVWludDhBcnJheShCdWZmZXIuY29uY2F0KFtidWZmZXIsIGhhc2hTbGljZV0pKTtcbiAgfVxuXG4gIC8vIEluIHV0aWxzLnRzLCBhZGQgdGhpcyBtZXRob2QgdG8gdGhlIFV0aWxzIGNsYXNzOlxuXG4gIC8qKlxuICAgKiBQYXJzZSBhbiBhZGRyZXNzIHN0cmluZyBpbnRvIGEgQnVmZmVyXG4gICAqIEBwYXJhbSBhZGRyZXNzIC0gVGhlIGFkZHJlc3MgdG8gcGFyc2VcbiAgICogQHJldHVybnMgQnVmZmVyIGNvbnRhaW5pbmcgdGhlIHBhcnNlZCBhZGRyZXNzXG4gICAqL1xuICBwdWJsaWMgcGFyc2VBZGRyZXNzID0gKGFkZHJlc3M6IHN0cmluZyk6IEJ1ZmZlciA9PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RyaW5nVG9BZGRyZXNzKGFkZHJlc3MpO1xuICB9O1xuXG4gIHB1YmxpYyBzdHJpbmdUb0FkZHJlc3MgPSAoYWRkcmVzczogc3RyaW5nLCBocnA/OiBzdHJpbmcpOiBCdWZmZXIgPT4ge1xuICAgIC8vIEhhbmRsZSBoZXggYWRkcmVzc2VzXG4gICAgaWYgKGFkZHJlc3Muc3RhcnRzV2l0aCgnMHgnKSkge1xuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGFkZHJlc3Muc2xpY2UoMiksICdoZXgnKTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcmF3IGhleCB3aXRob3V0IDB4IHByZWZpeFxuICAgIGlmICgvXlswLTlhLWZBLUZdezQwfSQvLnRlc3QoYWRkcmVzcykpIHtcbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbShhZGRyZXNzLCAnaGV4Jyk7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIEJlY2gzMiBhZGRyZXNzZXNcbiAgICBjb25zdCBwYXJ0cyA9IGFkZHJlc3MudHJpbSgpLnNwbGl0KCctJyk7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IgLSBWYWxpZCBhZGRyZXNzIHNob3VsZCBpbmNsdWRlIC0nKTtcbiAgICB9XG5cbiAgICBjb25zdCBzcGxpdCA9IHBhcnRzWzFdLmxhc3RJbmRleE9mKCcxJyk7XG4gICAgaWYgKHNwbGl0IDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciAtIFZhbGlkIGJlY2gzMiBhZGRyZXNzIG11c3QgaW5jbHVkZSBzZXBhcmF0b3IgKDEpJyk7XG4gICAgfVxuXG4gICAgY29uc3QgaHVtYW5SZWFkYWJsZVBhcnQgPSBwYXJ0c1sxXS5zbGljZSgwLCBzcGxpdCk7XG4gICAgaWYgKGh1bWFuUmVhZGFibGVQYXJ0ICE9PSAnZmxhcmUnICYmIGh1bWFuUmVhZGFibGVQYXJ0ICE9PSAnY29zdHdvJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciAtIEludmFsaWQgSFJQJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGJlY2gzMi5mcm9tV29yZHMoYmVjaDMyLmRlY29kZShwYXJ0c1sxXSkud29yZHMpKTtcbiAgfTtcblxuICBmbGFyZUlkU3RyaW5nKHZhbHVlOiBzdHJpbmcpOiBJZCB7XG4gICAgcmV0dXJuIG5ldyBJZChCdWZmZXIuZnJvbSh2YWx1ZSwgJ2hleCcpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvdmVyIHB1YmxpYyBrZXkgZnJvbSBzaWduYXR1cmVcbiAgICogQHBhcmFtIG1lc3NhZ2VIYXNoIC0gVGhlIFNIQTI1NiBoYXNoIG9mIHRoZSBtZXNzYWdlIChlLmcuLCBzaWduYWJsZVBheWxvYWQpXG4gICAqIEBwYXJhbSBzaWduYXR1cmUgLSA2NS1ieXRlIHNpZ25hdHVyZSAoNjQgYnl0ZXMgc2lnbmF0dXJlICsgMSBieXRlIHJlY292ZXJ5IHBhcmFtZXRlcilcbiAgICogQHJldHVybiByZWNvdmVyZWQgcHVibGljIGtleVxuICAgKi9cbiAgcmVjb3ZlcnlTaWduYXR1cmUobWVzc2FnZUhhc2g6IEJ1ZmZlciwgc2lnbmF0dXJlOiBCdWZmZXIpOiBCdWZmZXIge1xuICAgIHRyeSB7XG4gICAgICAvLyBFeHRyYWN0IHJlY292ZXJ5IHBhcmFtZXRlciBhbmQgc2lnbmF0dXJlXG4gICAgICBpZiAoc2lnbmF0dXJlLmxlbmd0aCAhPT0gNjUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHNpZ25hdHVyZSBsZW5ndGggLSBleHBlY3RlZCA2NSBieXRlcyAoNjQgYnl0ZXMgc2lnbmF0dXJlICsgMSBieXRlIHJlY292ZXJ5KScpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZWNvdmVyeVBhcmFtID0gc2lnbmF0dXJlWzY0XTtcbiAgICAgIGNvbnN0IHNpZ09ubHkgPSBzaWduYXR1cmUuc2xpY2UoMCwgNjQpO1xuXG4gICAgICAvLyBSZWNvdmVyIHB1YmxpYyBrZXkgdXNpbmcgdGhlIHByb3ZpZGVkIHJlY292ZXJ5IHBhcmFtZXRlclxuICAgICAgLy8gbWVzc2FnZUhhc2ggc2hvdWxkIGFscmVhZHkgYmUgdGhlIFNIQTI1NiBoYXNoIChzaWduYWJsZVBheWxvYWQpXG4gICAgICBjb25zdCByZWNvdmVyZWQgPSBlY2MucmVjb3ZlclB1YmxpY0tleShtZXNzYWdlSGFzaCwgc2lnT25seSwgcmVjb3ZlcnlQYXJhbSwgdHJ1ZSk7XG4gICAgICBpZiAoIXJlY292ZXJlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZWNvdmVyIHB1YmxpYyBrZXknKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHJlY292ZXJlZCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHJlY292ZXIgc2lnbmF0dXJlOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHR4IGlzIGZvciB0aGUgYmxvY2tjaGFpbklkXG4gICAqXG4gICAqIEBwYXJhbSB7VHh9IHR4XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBibG9ja2NoYWluSWQgLSBibG9ja2NoYWluIElEIGluIGhleCBmb3JtYXRcbiAgICogQHJldHVybnMgdHJ1ZSBpZiB0eCBpcyBmb3IgYmxvY2tjaGFpbklkXG4gICAqL1xuICBpc1RyYW5zYWN0aW9uT2YodHg6IFR4LCBibG9ja2NoYWluSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8vIE5vdGU6IGdldEJsb2NrY2hhaW5JZCgpIGFuZCBCbG9ja2NoYWluSWQudmFsdWUoKSByZXR1cm4gQ0I1OC1lbmNvZGVkIHN0cmluZ3MsXG4gICAgLy8gYnV0IHdlIG5lZWQgaGV4IGZvcm1hdCwgc28gd2UgdXNlIHRvQnl0ZXMoKSBhbmQgY29udmVydCB0byBoZXhcbiAgICBjb25zdCBleHRyYWN0QmxvY2tjaGFpbklkID0gKHR4T2JqOiBhbnkpOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdHhPYmouZ2V0VHggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3QgaW5uZXJUeCA9IHR4T2JqLmdldFR4KCk7XG4gICAgICAgIGlmIChpbm5lclR4LmJhc2VUeD8uQmxvY2tjaGFpbklkPy50b0J5dGVzKSB7XG4gICAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGlubmVyVHguYmFzZVR4LkJsb2NrY2hhaW5JZC50b0J5dGVzKCkpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5uZXJUeC5ibG9ja2NoYWluSWQ/LnRvQnl0ZXMpIHtcbiAgICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oaW5uZXJUeC5ibG9ja2NoYWluSWQudG9CeXRlcygpKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR4T2JqLnR4Py5iYXNlVHg/LkJsb2NrY2hhaW5JZD8udG9CeXRlcykge1xuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20odHhPYmoudHguYmFzZVR4LkJsb2NrY2hhaW5JZC50b0J5dGVzKCkpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR4T2JqLmJhc2VUeD8uQmxvY2tjaGFpbklkPy50b0J5dGVzKSB7XG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbSh0eE9iai5iYXNlVHguQmxvY2tjaGFpbklkLnRvQnl0ZXMoKSkudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgfVxuICAgICAgaWYgKHR4T2JqLmJsb2NrY2hhaW5JZD8udG9CeXRlcykge1xuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20odHhPYmouYmxvY2tjaGFpbklkLnRvQnl0ZXMoKSkudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgY29uc3QgdHhCbG9ja2NoYWluSWQgPSBleHRyYWN0QmxvY2tjaGFpbklkKHR4KTtcbiAgICByZXR1cm4gdHhCbG9ja2NoYWluSWQgPT09IGJsb2NrY2hhaW5JZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IEZsYXJlSlMgbmF0aXZlIFV0eG8gdG8gRGVjb2RlZFV0eG9PYmogZm9yIGludGVybmFsIHVzZVxuICAgKiBAcGFyYW0gdXR4byAtIEZsYXJlSlMgVXR4byBvYmplY3RcbiAgICogQHBhcmFtIG5ldHdvcmsgLSBGbGFyZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb25cbiAgICogQHJldHVybnMgRGVjb2RlZFV0eG9PYmogY29tcGF0aWJsZSB3aXRoIGV4aXN0aW5nIG1ldGhvZHNcbiAgICovXG4gIHB1YmxpYyB1dHhvVG9EZWNvZGVkKHV0eG86IFV0eG8sIG5ldHdvcms6IEZsYXJlTmV0d29yayk6IERlY29kZWRVdHhvT2JqIHtcbiAgICBjb25zdCBvdXRwdXRPd25lcnMgPSB1dHhvLmdldE91dHB1dE93bmVycygpO1xuICAgIGNvbnN0IG91dHB1dCA9IHV0eG8ub3V0cHV0IGFzIFRyYW5zZmVyT3V0cHV0O1xuXG4gICAgLy8gR2V0IGFtb3VudCBmcm9tIG91dHB1dFxuICAgIGNvbnN0IGFtb3VudCA9IG91dHB1dC5hbW91bnQoKS50b1N0cmluZygpO1xuXG4gICAgLy8gR2V0IHR4aWQgZnJvbSB1dHhvSWQgKGNiNTggZW5jb2RlZClcbiAgICBjb25zdCB0eGlkID0gdGhpcy5jYjU4RW5jb2RlKEJ1ZmZlci5mcm9tKHV0eG8udXR4b0lkLnR4SUQudG9CeXRlcygpKSk7XG5cbiAgICAvLyBHZXQgb3V0cHV0IGluZGV4XG4gICAgY29uc3Qgb3V0cHV0aWR4ID0gdXR4by51dHhvSWQub3V0cHV0SWR4LnZhbHVlKCkudG9TdHJpbmcoKTtcblxuICAgIC8vIEdldCB0aHJlc2hvbGRcbiAgICBjb25zdCB0aHJlc2hvbGQgPSBvdXRwdXRPd25lcnMudGhyZXNob2xkLnZhbHVlKCk7XG5cbiAgICAvLyBHZXQgbG9ja3RpbWVcbiAgICBjb25zdCBsb2NrdGltZSA9IG91dHB1dE93bmVycy5sb2NrdGltZS52YWx1ZSgpLnRvU3RyaW5nKCk7XG5cbiAgICAvLyBHZXQgYWRkcmVzc2VzIGFzIGJlY2gzMiBzdHJpbmdzXG4gICAgY29uc3QgYWRkcmVzc2VzID0gb3V0cHV0T3duZXJzLmFkZHJzLm1hcCgoYWRkcikgPT5cbiAgICAgIHRoaXMuYWRkcmVzc1RvU3RyaW5nKG5ldHdvcmsuaHJwLCBuZXR3b3JrLmFsaWFzLCBCdWZmZXIuZnJvbShhZGRyLnRvQnl0ZXMoKSkpXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBvdXRwdXRJRDogU0VDUDI1NksxX1RyYW5zZmVyX091dHB1dCxcbiAgICAgIGxvY2t0aW1lLFxuICAgICAgYW1vdW50LFxuICAgICAgdHhpZCxcbiAgICAgIG91dHB1dGlkeCxcbiAgICAgIHRocmVzaG9sZCxcbiAgICAgIGFkZHJlc3NlcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYXJyYXkgb2YgRmxhcmVKUyBVdHhvcyB0byBEZWNvZGVkVXR4b09iaiBhcnJheVxuICAgKiBAcGFyYW0gdXR4b3MgLSBBcnJheSBvZiBGbGFyZUpTIFV0eG8gb2JqZWN0c1xuICAgKiBAcGFyYW0gbmV0d29yayAtIEZsYXJlIG5ldHdvcmsgY29uZmlndXJhdGlvblxuICAgKiBAcmV0dXJucyBBcnJheSBvZiBEZWNvZGVkVXR4b09ialxuICAgKi9cbiAgcHVibGljIHV0eG9zVG9EZWNvZGVkKHV0eG9zOiBVdHhvW10sIG5ldHdvcms6IEZsYXJlTmV0d29yayk6IERlY29kZWRVdHhvT2JqW10ge1xuICAgIHJldHVybiB1dHhvcy5tYXAoKHV0eG8pID0+IHRoaXMudXR4b1RvRGVjb2RlZCh1dHhvLCBuZXR3b3JrKSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBEZWNvZGVkVXR4b09iaiB0byBuYXRpdmUgRmxhcmVKUyBVdHhvIG9iamVjdFxuICAgKiBUaGlzIGlzIHRoZSByZXZlcnNlIG9mIHV0eG9Ub0RlY29kZWRcbiAgICogQHBhcmFtIGRlY29kZWQgLSBEZWNvZGVkVXR4b09iaiB0byBjb252ZXJ0XG4gICAqIEBwYXJhbSBhc3NldElkIC0gQXNzZXQgSUQgYXMgY2I1OCBlbmNvZGVkIHN0cmluZ1xuICAgKiBAcmV0dXJucyBOYXRpdmUgRmxhcmVKUyBVdHhvIG9iamVjdFxuICAgKi9cbiAgcHVibGljIGRlY29kZWRUb1V0eG8oZGVjb2RlZDogRGVjb2RlZFV0eG9PYmosIGFzc2V0SWQ6IHN0cmluZyk6IFV0eG8ge1xuICAgIC8vIENyZWF0ZSBVVFhPSUQgZnJvbSB0eGlkIGFuZCBvdXRwdXQgaW5kZXhcbiAgICBjb25zdCB1dHhvSWQgPSBhdmF4U2VyaWFsLlVUWE9JRC5mcm9tTmF0aXZlKGRlY29kZWQudHhpZCwgcGFyc2VJbnQoZGVjb2RlZC5vdXRwdXRpZHgsIDEwKSk7XG5cbiAgICAvLyBQYXJzZSBhZGRyZXNzZXMgZnJvbSBiZWNoMzIgc3RyaW5ncyB0byBieXRlIGJ1ZmZlcnNcbiAgICBjb25zdCBhZGRyZXNzQnl0ZXMgPSBkZWNvZGVkLmFkZHJlc3Nlcy5tYXAoKGFkZHIpID0+IHRoaXMucGFyc2VBZGRyZXNzKGFkZHIpKTtcblxuICAgIC8vIENyZWF0ZSBPdXRwdXRPd25lcnMgd2l0aCBsb2NrdGltZSwgdGhyZXNob2xkLCBhbmQgYWRkcmVzc2VzXG4gICAgY29uc3QgbG9ja3RpbWUgPSBkZWNvZGVkLmxvY2t0aW1lID8gQmlnSW50KGRlY29kZWQubG9ja3RpbWUpIDogQmlnSW50KDApO1xuICAgIGNvbnN0IG91dHB1dE93bmVycyA9IE91dHB1dE93bmVycy5mcm9tTmF0aXZlKGFkZHJlc3NCeXRlcywgbG9ja3RpbWUsIGRlY29kZWQudGhyZXNob2xkKTtcblxuICAgIC8vIENyZWF0ZSBUcmFuc2Zlck91dHB1dCB3aXRoIGFtb3VudCBhbmQgb3duZXJzXG4gICAgY29uc3QgYW1vdW50ID0gQmlnSW50KGRlY29kZWQuYW1vdW50KTtcbiAgICBjb25zdCB0cmFuc2Zlck91dHB1dCA9IG5ldyBUcmFuc2Zlck91dHB1dChuZXcgQmlnSW50UHIoYW1vdW50KSwgb3V0cHV0T3duZXJzKTtcblxuICAgIC8vIENyZWF0ZSBhbmQgcmV0dXJuIHRoZSBVdHhvXG4gICAgcmV0dXJuIG5ldyBVdHhvKHV0eG9JZCwgSWQuZnJvbVN0cmluZyhhc3NldElkKSwgdHJhbnNmZXJPdXRwdXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYXJyYXkgb2YgRGVjb2RlZFV0eG9PYmogdG8gbmF0aXZlIEZsYXJlSlMgVXR4byBvYmplY3RzXG4gICAqIEBwYXJhbSBkZWNvZGVkVXR4b3MgLSBBcnJheSBvZiBEZWNvZGVkVXR4b09ialxuICAgKiBAcGFyYW0gYXNzZXRJZCAtIEFzc2V0IElEIGFzIGNiNTggZW5jb2RlZCBzdHJpbmdcbiAgICogQHJldHVybnMgQXJyYXkgb2YgbmF0aXZlIEZsYXJlSlMgVXR4byBvYmplY3RzXG4gICAqL1xuICBwdWJsaWMgZGVjb2RlZFRvVXR4b3MoZGVjb2RlZFV0eG9zOiBEZWNvZGVkVXR4b09ialtdLCBhc3NldElkOiBzdHJpbmcpOiBVdHhvW10ge1xuICAgIHJldHVybiBkZWNvZGVkVXR4b3MubWFwKChkZWNvZGVkKSA9PiB0aGlzLmRlY29kZWRUb1V0eG8oZGVjb2RlZCwgYXNzZXRJZCkpO1xuICB9XG59XG5cbmNvbnN0IHV0aWxzID0gbmV3IFV0aWxzKCk7XG5leHBvcnQgZGVmYXVsdCB1dGlscztcbiJdfQ==
@@ -44,6 +44,36 @@ export declare const ACCOUNT_4: {
44
44
  xPublicKey: string;
45
45
  address: string;
46
46
  };
47
+ export declare const CONTEXT: {
48
+ xBlockchainID: string;
49
+ pBlockchainID: string;
50
+ cBlockchainID: string;
51
+ avaxAssetID: string;
52
+ baseTxFee: bigint;
53
+ createAssetTxFee: bigint;
54
+ createSubnetTxFee: bigint;
55
+ transformSubnetTxFee: bigint;
56
+ createBlockchainTxFee: bigint;
57
+ addPrimaryNetworkValidatorFee: bigint;
58
+ addPrimaryNetworkDelegatorFee: bigint;
59
+ addSubnetValidatorFee: bigint;
60
+ addSubnetDelegatorFee: bigint;
61
+ networkID: number;
62
+ hrp: string;
63
+ platformFeeConfig: {
64
+ weights: {
65
+ 0: number;
66
+ 1: number;
67
+ 2: number;
68
+ 3: number;
69
+ };
70
+ maxCapacity: bigint;
71
+ maxPerSecond: bigint;
72
+ targetPerSecond: bigint;
73
+ minPrice: bigint;
74
+ excessConversionConstant: bigint;
75
+ };
76
+ };
47
77
  export declare const INVALID_SHORT_KEYPAIR_KEY = "82A34E";
48
78
  export declare const INVALID_PRIVATE_KEY_ERROR_MESSAGE = "Unsupported private key";
49
79
  export declare const INVALID_PUBLIC_KEY_ERROR_MESSAGE = "Unsupported public key";
@@ -1 +1 @@
1
- {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../test/resources/account.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY;;;;;;;;;;;CAcxB,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;;;CAUrB,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;;;CAUrB,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;;CASrB,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;;CASrB,CAAC;AAEF,eAAO,MAAM,yBAAyB,WAAW,CAAC;AAElD,eAAO,MAAM,iCAAiC,4BAA4B,CAAC;AAE3E,eAAO,MAAM,gCAAgC,2BAA2B,CAAC;AAEzE,eAAO,MAAM,wBAAwB,QAAiC,CAAC"}
1
+ {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../test/resources/account.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY;;;;;;;;;;;CAcxB,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;;;CAUrB,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;;;CAUrB,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;;CASrB,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;;CASrB,CAAC;AAEF,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwBnB,CAAC;AAEF,eAAO,MAAM,yBAAyB,WAAW,CAAC;AAElD,eAAO,MAAM,iCAAiC,4BAA4B,CAAC;AAE3E,eAAO,MAAM,gCAAgC,2BAA2B,CAAC;AAEzE,eAAO,MAAM,wBAAwB,QAAiC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.INVALID_LONG_KEYPAIR_PRV = exports.INVALID_PUBLIC_KEY_ERROR_MESSAGE = exports.INVALID_PRIVATE_KEY_ERROR_MESSAGE = exports.INVALID_SHORT_KEYPAIR_KEY = exports.ACCOUNT_4 = exports.ACCOUNT_3 = exports.ACCOUNT_2 = exports.ACCOUNT_1 = exports.SEED_ACCOUNT = void 0;
3
+ exports.INVALID_LONG_KEYPAIR_PRV = exports.INVALID_PUBLIC_KEY_ERROR_MESSAGE = exports.INVALID_PRIVATE_KEY_ERROR_MESSAGE = exports.INVALID_SHORT_KEYPAIR_KEY = exports.CONTEXT = exports.ACCOUNT_4 = exports.ACCOUNT_3 = exports.ACCOUNT_2 = exports.ACCOUNT_1 = exports.SEED_ACCOUNT = void 0;
4
4
  exports.SEED_ACCOUNT = {
5
5
  seed: '4c3b89f6ca897cb729d2146913877f71',
6
6
  privateKey: 'd8f07de5977843949bf4b81b0978117c85f2582c57d7dda9a0450ff3fbef19fe',
@@ -47,8 +47,33 @@ exports.ACCOUNT_4 = {
47
47
  xPublicKey: 'xpub661MyMwAqRbcFLSpQCLmotGrG9gwK6W685gfLtqgLVhNAxjTpP39KTKKfLFBxxptfe4k8KbyzWCPCFbm9xuSUXQNRQTNQoebYiupV8fSPHJ',
48
48
  address: 'P-costwo1jvjdvg6jdqez24c5kjxgsu47mqwvpyerk22yl8',
49
49
  };
50
+ exports.CONTEXT = {
51
+ xBlockchainID: 'FJuSwZuP85eyBpuBrKECnpPedGyXoDy2hP9q4JD8qBTZGxYbJ',
52
+ pBlockchainID: '11111111111111111111111111111111LpoYY',
53
+ cBlockchainID: 'vE8M98mEQH6wk56sStD1ML8HApTgSqfJZLk9gQ3Fsd4i6m3Bi',
54
+ avaxAssetID: 'fxMAKpBQQpFedrUhWMsDYfCUJxdUw4mneTczKBzNg3rc2JUub',
55
+ baseTxFee: 1000000n,
56
+ createAssetTxFee: 1000000n,
57
+ createSubnetTxFee: 100000000n,
58
+ transformSubnetTxFee: 100000000n,
59
+ createBlockchainTxFee: 100000000n,
60
+ addPrimaryNetworkValidatorFee: 0n,
61
+ addPrimaryNetworkDelegatorFee: 0n,
62
+ addSubnetValidatorFee: 1000000n,
63
+ addSubnetDelegatorFee: 1000000n,
64
+ networkID: 114,
65
+ hrp: 'costwo',
66
+ platformFeeConfig: {
67
+ weights: { 0: 1, 1: 1000, 2: 1000, 3: 4 },
68
+ maxCapacity: 1000000n,
69
+ maxPerSecond: 100000n,
70
+ targetPerSecond: 50000n,
71
+ minPrice: 250n,
72
+ excessConversionConstant: 2164043n,
73
+ },
74
+ };
50
75
  exports.INVALID_SHORT_KEYPAIR_KEY = '82A34E';
51
76
  exports.INVALID_PRIVATE_KEY_ERROR_MESSAGE = 'Unsupported private key';
52
77
  exports.INVALID_PUBLIC_KEY_ERROR_MESSAGE = 'Unsupported public key';
53
78
  exports.INVALID_LONG_KEYPAIR_PRV = exports.SEED_ACCOUNT.privateKey + 'F1';
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvcmVzb3VyY2VzL2FjY291bnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxZQUFZLEdBQUc7SUFDMUIsSUFBSSxFQUFFLGtDQUFrQztJQUN4QyxVQUFVLEVBQUUsa0VBQWtFO0lBQzlFLFNBQVMsRUFBRSxvRUFBb0U7SUFDL0UsV0FBVyxFQUNULGlIQUFpSDtJQUNuSCxVQUFVLEVBQ1IsaUhBQWlIO0lBQ25ILGNBQWMsRUFBRSwrREFBK0Q7SUFDL0UsY0FBYyxFQUFFLGdEQUFnRDtJQUNoRSxjQUFjLEVBQUUsaURBQWlEO0lBQ2pFLE9BQU8sRUFBRSxjQUFjO0lBQ3ZCLFNBQVMsRUFDUCxvSUFBb0k7Q0FDdkksQ0FBQztBQUVXLFFBQUEsU0FBUyxHQUFHO0lBQ3ZCLElBQUksRUFBRSxrQ0FBa0M7SUFDeEMsVUFBVSxFQUFFLGtFQUFrRTtJQUM5RSxTQUFTLEVBQUUsb0VBQW9FO0lBQy9FLFdBQVcsRUFDVCxpSEFBaUg7SUFDbkgsVUFBVSxFQUNSLGlIQUFpSDtJQUNuSCxjQUFjLEVBQUUsZ0RBQWdEO0lBQ2hFLGNBQWMsRUFBRSxpREFBaUQ7Q0FDbEUsQ0FBQztBQUVXLFFBQUEsU0FBUyxHQUFHO0lBQ3ZCLElBQUksRUFBRSxrQ0FBa0M7SUFDeEMsVUFBVSxFQUFFLGtFQUFrRTtJQUM5RSxTQUFTLEVBQUUsb0VBQW9FO0lBQy9FLFdBQVcsRUFDVCxpSEFBaUg7SUFDbkgsVUFBVSxFQUNSLGlIQUFpSDtJQUNuSCxjQUFjLEVBQUUsZ0RBQWdEO0lBQ2hFLGNBQWMsRUFBRSxpREFBaUQ7Q0FDbEUsQ0FBQztBQUVXLFFBQUEsU0FBUyxHQUFHO0lBQ3ZCLElBQUksRUFBRSxrQ0FBa0M7SUFDeEMsVUFBVSxFQUFFLGtFQUFrRTtJQUM5RSxTQUFTLEVBQUUsb0VBQW9FO0lBQy9FLFdBQVcsRUFDVCxpSEFBaUg7SUFDbkgsVUFBVSxFQUNSLGlIQUFpSDtJQUNuSCxPQUFPLEVBQUUsaURBQWlEO0NBQzNELENBQUM7QUFFVyxRQUFBLFNBQVMsR0FBRztJQUN2QixJQUFJLEVBQUUsa0NBQWtDO0lBQ3hDLFVBQVUsRUFBRSxrRUFBa0U7SUFDOUUsU0FBUyxFQUFFLG9FQUFvRTtJQUMvRSxXQUFXLEVBQ1QsaUhBQWlIO0lBQ25ILFVBQVUsRUFDUixpSEFBaUg7SUFDbkgsT0FBTyxFQUFFLGlEQUFpRDtDQUMzRCxDQUFDO0FBRVcsUUFBQSx5QkFBeUIsR0FBRyxRQUFRLENBQUM7QUFFckMsUUFBQSxpQ0FBaUMsR0FBRyx5QkFBeUIsQ0FBQztBQUU5RCxRQUFBLGdDQUFnQyxHQUFHLHdCQUF3QixDQUFDO0FBRTVELFFBQUEsd0JBQXdCLEdBQUcsb0JBQVksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFNFRURfQUNDT1VOVCA9IHtcbiAgc2VlZDogJzRjM2I4OWY2Y2E4OTdjYjcyOWQyMTQ2OTEzODc3ZjcxJyxcbiAgcHJpdmF0ZUtleTogJ2Q4ZjA3ZGU1OTc3ODQzOTQ5YmY0YjgxYjA5NzgxMTdjODVmMjU4MmM1N2Q3ZGRhOWEwNDUwZmYzZmJlZjE5ZmUnLFxuICBwdWJsaWNLZXk6ICcwM2NkOTE5NzY1OGZiNTYzNTkzNTYwYjkzZjhlYmEyYWViMmU0ZjM3ODEyNjI1NjliMzI3N2I4ZGE3ZjRmNzI3YjInLFxuICB4UHJpdmF0ZUtleTpcbiAgICAneHBydjlzMjFaclFIMTQzSzN1UFQzYVNqUU5hVVlKUVg0TXlHWG1hdmJETjVXQk1BYWZTM1BROVhWMkU1aU1YTGNOVXBwTlBCaDc3VXlubmpNVEwzNXQ1QkQ4dnVIcUFZcThHM01ORWJuRUVSM0JZJyxcbiAgeFB1YmxpY0tleTpcbiAgICAneHB1YjY2MU15TXdBcVJiY0dQVHY5YnlqbVdYRDZMRjFUcGg3dHpXWFBibWg0V3Q5VFRtQnZ3VG4ycFlaWmVRcW5CRUg2Y1RZQ1FFZVlMTGt2czdyd0ROOWNBS3JLOTFyYkJzOGl4czUzMlpEWmdFJyxcbiAgZmxycFByaXZhdGVLZXk6ICdQcml2YXRlS2V5LTJlWVJqRU5yUWtqV2RpenQ2UHh4UDFEUEYzRTJ3NlNZV2FpU0FNV0p3RGJxVld4TUxXJyxcbiAgYWRkcmVzc01haW5uZXQ6ICdQLWZsYXJlMXV5cDVuNzZnanFsdHJkZHVyN3FscnNtdDNreWg4Zm5ycnF3dGFsJyxcbiAgYWRkcmVzc1Rlc3RuZXQ6ICdQLWNvc3R3bzF1eXA1bjc2Z2pxbHRyZGR1cjdxbHJzbXQza3loOGZucm13aHFrNycsXG4gIG1lc3NhZ2U6ICd0ZXN0IG1lc3NhZ2UnLFxuICBzaWduYXR1cmU6XG4gICAgJzE2OTJjMGEyNWM4NGQzODllNjM2OTJjYTNiN2ViYzg5ODM1YzNiMTFmNmU2NGE1MDVkZGQ3MTY2NGQyYTNhZTkxNGUwZDFiZTEzYTgyNGFlOTczMzE4MDU2NTBhMDYzMWRmOWFlOTJiYTEzM2Y5YWE4MTkxMWYzYTU2ODA3YmEzMDEnLFxufTtcblxuZXhwb3J0IGNvbnN0IEFDQ09VTlRfMSA9IHtcbiAgc2VlZDogJzRjM2I4OWY2Y2E4OTdjYjcyOWQyMTQ2OTEzODc3ZjcxJyxcbiAgcHJpdmF0ZUtleTogJ2E1MzNkODQxOWQ0NTE4ZTExY2Q4ZDlmMDQ5YzczYThiZGFmMDAzZDY2MDIzMTlmOTY3Y2UzYzI0M2U2NDZiYTUnLFxuICBwdWJsaWNLZXk6ICcwMmEyMjBlNWZkMTA4OTk2ZDBlNmM4NWRiNDMzODRkY2VmODg4NGJjYWVlMTIwM2U5ODBmOWY5OWY2NWFiM2QzZjMnLFxuICB4UHJpdmF0ZUtleTpcbiAgICAneHBydjlzMjFaclFIMTQzSzRTS3hmYWRNN1czWXExaGh3SmdHQUZRaW84c0JxYVhBRFZvOHhtUWlVZTJjeTZHd0Nrd3NmRFpNU2U0VzZHdjV2SFRzYVVGOHlvWXV6cThLRkpQVXUycDk4UkFYS3NKJyxcbiAgeFB1YmxpY0tleTpcbiAgICAneHB1YjY2MU15TXdBcVJiY0d2UVJtY0FNVWR6SFAzWUNMbVE3WFVMS2JYR29QdjQ5Nko4SFdKaXkyU002cE1ITTg5c1FueUdpTEY0NmRmekZCNVpSVHdSbXBpVXEyaFVrcDVZY2NyY1dHNVhrUzNEJyxcbiAgYWRkcmVzc01haW5uZXQ6ICdQLWZsYXJlMWV2dW01bjBhZ2ZmcmRoZzJkbTJ2ZzdzdmZncnJhNXJ1eG5tZndrJyxcbiAgYWRkcmVzc1Rlc3RuZXQ6ICdQLWNvc3R3bzFldnVtNW4wYWdmZnJkaGcyZG0ydmc3c3ZmZ3JyYTVydTdheno5aCcsXG59O1xuXG5leHBvcnQgY29uc3QgQUNDT1VOVF8yID0ge1xuICBzZWVkOiAnNGMzYjg5ZjZjYTg5N2NiNzI5ZDIxNDY5MTM4NzdmNzEnLFxuICBwcml2YXRlS2V5OiAnODM2ZDI0Mzk2ZmY2ZTk1MmU2MzJiMzU1MmZjNjU5MTU2NmU4YmU3YzkzMWE2YzY0ZmE3ZjY4NWJlOTY0Nzg0MScsXG4gIHB1YmxpY0tleTogJzAzY2Q0NjYwYWMxNTcwNDczZTcxMDdlZDFmMzE0MjVkODFhNjI0OTkyYmJjNTk4M2ZkNjE3ODdjNTYwZDhmZDQyMCcsXG4gIHhQcml2YXRlS2V5OlxuICAgICd4cHJ2OXMyMVpyUUgxNDNLMktqRDh5dFNmTFdEZmUyNTg1cEJKTmRhZExnd3NFS29HTGJHZEhDS1NLNXlEbmZjbVRvYXpkM29QTERYcHJ0WG5DdnNuOVQ2TURKejFxd01QYXEyMm9UcnpxdnllRFEnLFxuICB4UHVibGljS2V5OlxuICAgICd4cHJ2OXMyMVpyUUgxNDNLMktqRDh5dFNmTFdEZmUyNTg1cEJKTmRhZExnd3NFS29HTGJHZEhDS1NLNXlEbmZjbVRvYXpkM29QTERYcHJ0WG5DdnNuOVQ2TURKejFxd01QYXEyMm9UcnpxdnllRFEnLFxuICBhZGRyZXNzTWFpbm5ldDogJ1AtZmxhcmUxeHZuZ3JybXF6bGRqNTBrcHZxeDdtaGt4M2h0dmg1eDg3bmtsOWonLFxuICBhZGRyZXNzVGVzdG5ldDogJ1AtY29zdHdvMXh2bmdycm1xemxkajUwa3B2cXg3bWhreDNodHZoNXg4bWhnc3F5Jyxcbn07XG5cbmV4cG9ydCBjb25zdCBBQ0NPVU5UXzMgPSB7XG4gIHNlZWQ6ICc0YzNiODlmNmNhODk3Y2I3MjlkMjE0NjkxMzg3N2Y3MScsXG4gIHByaXZhdGVLZXk6ICcwOTA2ODQwOTI2ZmNkMDM4ZjQyOTIxNzA5NjU1ZThiOGIwNjYxMzI3MmEzYWM5MDQwNTEwYjdkNGIyNmYwOWI2JyxcbiAgcHVibGljS2V5OiAnMDI5YWE0ZDlmMThkMjk5NGYyZDgzM2MzYjlkZDE3YTVhZDliMWMzZTc0NGYwZmUwYjRjYjE1OTVmOGY2N2ZkMTJjJyxcbiAgeFByaXZhdGVLZXk6XG4gICAgJ3hwcnY5czIxWnJRSDE0M0s0VHRvOWgxRFczZ21NRnB4R2pTeVVTM1YxckNValZFRERtOHh6czM4R0Nyc0NyeWpFYnJFb3ZIaGcxMmQ1NW1CeDRqSEsxSDE5Unl1aHpKdTRHUUQ5SEJxTFpDcEE2YicsXG4gIHhQdWJsaWNLZXk6XG4gICAgJ3hwdWI2NjFNeU13QXFSYmNHd3lHRmlZRHNCZFZ1SGZTZ0NBcHFleTVwRWM2SHBtQzZaVTdZUU1OcDFCTTQ5N2RKakJuUVptTkZQVlFGUlZMbkczeUp2enlBOHpHanNlaWZtVHEzSGtReXExekhxcScsXG4gIGFkZHJlc3M6ICdQLWNvc3R3bzF4cXI4cHM4czZxdjVqa2U5d2x0YzhkYzl3bTVxN2NrMmZydDVoZCcsXG59O1xuXG5leHBvcnQgY29uc3QgQUNDT1VOVF80ID0ge1xuICBzZWVkOiAnNGMzYjg5ZjZjYTg5N2NiNzI5ZDIxNDY5MTM4NzdmNzEnLFxuICBwcml2YXRlS2V5OiAnNmQxOWVmMTI2MjJhZDJlMzY4ODA2NDgzZjkxNDQ1YmE4MzJhMGNhZGQ3M2Q4NTg1YmZkOWRlNTkwMzdlNzliNCcsXG4gIHB1YmxpY0tleTogJzAyNmJiNTAzN2RjZTU3MTRkYzk0MjdlNDVlYWJlYmQ2ODlmYzY3MWI5YzdiYTdiMGZmYzc0Yzk0NDc4OWVjZTlkMScsXG4gIHhQcml2YXRlS2V5OlxuICAgICd4cHJ2OXMyMVpyUUgxNDNLMnJOTUpBb21Ta0w3aTdyU3VkbkVrcm00WVdTNG5BQVBKQVFLR3FpdG1lenFwNUUzOHVWZUxXa3pMTjdWWG5rS3kzdXFuYzNERFhxb2pRMnJYR0xZQnd0VlJWY1JlN2QnLFxuICB4UHVibGljS2V5OlxuICAgICd4cHViNjYxTXlNd0FxUmJjRkxTcFFDTG1vdEdyRzlnd0s2VzY4NWdmTHRxZ0xWaE5BeGpUcFAzOUtUS0tmTEZCeHhwdGZlNGs4S2J5eldDUENGYm05eHVTVVhRTlJRVE5Rb2ViWWl1cFY4ZlNQSEonLFxuICBhZGRyZXNzOiAnUC1jb3N0d28xanZqZHZnNmpkcWV6MjRjNWtqeGdzdTQ3bXF3dnB5ZXJrMjJ5bDgnLFxufTtcblxuZXhwb3J0IGNvbnN0IElOVkFMSURfU0hPUlRfS0VZUEFJUl9LRVkgPSAnODJBMzRFJztcblxuZXhwb3J0IGNvbnN0IElOVkFMSURfUFJJVkFURV9LRVlfRVJST1JfTUVTU0FHRSA9ICdVbnN1cHBvcnRlZCBwcml2YXRlIGtleSc7XG5cbmV4cG9ydCBjb25zdCBJTlZBTElEX1BVQkxJQ19LRVlfRVJST1JfTUVTU0FHRSA9ICdVbnN1cHBvcnRlZCBwdWJsaWMga2V5JztcblxuZXhwb3J0IGNvbnN0IElOVkFMSURfTE9OR19LRVlQQUlSX1BSViA9IFNFRURfQUNDT1VOVC5wcml2YXRlS2V5ICsgJ0YxJztcbiJdfQ==
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvcmVzb3VyY2VzL2FjY291bnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxZQUFZLEdBQUc7SUFDMUIsSUFBSSxFQUFFLGtDQUFrQztJQUN4QyxVQUFVLEVBQUUsa0VBQWtFO0lBQzlFLFNBQVMsRUFBRSxvRUFBb0U7SUFDL0UsV0FBVyxFQUNULGlIQUFpSDtJQUNuSCxVQUFVLEVBQ1IsaUhBQWlIO0lBQ25ILGNBQWMsRUFBRSwrREFBK0Q7SUFDL0UsY0FBYyxFQUFFLGdEQUFnRDtJQUNoRSxjQUFjLEVBQUUsaURBQWlEO0lBQ2pFLE9BQU8sRUFBRSxjQUFjO0lBQ3ZCLFNBQVMsRUFDUCxvSUFBb0k7Q0FDdkksQ0FBQztBQUVXLFFBQUEsU0FBUyxHQUFHO0lBQ3ZCLElBQUksRUFBRSxrQ0FBa0M7SUFDeEMsVUFBVSxFQUFFLGtFQUFrRTtJQUM5RSxTQUFTLEVBQUUsb0VBQW9FO0lBQy9FLFdBQVcsRUFDVCxpSEFBaUg7SUFDbkgsVUFBVSxFQUNSLGlIQUFpSDtJQUNuSCxjQUFjLEVBQUUsZ0RBQWdEO0lBQ2hFLGNBQWMsRUFBRSxpREFBaUQ7Q0FDbEUsQ0FBQztBQUVXLFFBQUEsU0FBUyxHQUFHO0lBQ3ZCLElBQUksRUFBRSxrQ0FBa0M7SUFDeEMsVUFBVSxFQUFFLGtFQUFrRTtJQUM5RSxTQUFTLEVBQUUsb0VBQW9FO0lBQy9FLFdBQVcsRUFDVCxpSEFBaUg7SUFDbkgsVUFBVSxFQUNSLGlIQUFpSDtJQUNuSCxjQUFjLEVBQUUsZ0RBQWdEO0lBQ2hFLGNBQWMsRUFBRSxpREFBaUQ7Q0FDbEUsQ0FBQztBQUVXLFFBQUEsU0FBUyxHQUFHO0lBQ3ZCLElBQUksRUFBRSxrQ0FBa0M7SUFDeEMsVUFBVSxFQUFFLGtFQUFrRTtJQUM5RSxTQUFTLEVBQUUsb0VBQW9FO0lBQy9FLFdBQVcsRUFDVCxpSEFBaUg7SUFDbkgsVUFBVSxFQUNSLGlIQUFpSDtJQUNuSCxPQUFPLEVBQUUsaURBQWlEO0NBQzNELENBQUM7QUFFVyxRQUFBLFNBQVMsR0FBRztJQUN2QixJQUFJLEVBQUUsa0NBQWtDO0lBQ3hDLFVBQVUsRUFBRSxrRUFBa0U7SUFDOUUsU0FBUyxFQUFFLG9FQUFvRTtJQUMvRSxXQUFXLEVBQ1QsaUhBQWlIO0lBQ25ILFVBQVUsRUFDUixpSEFBaUg7SUFDbkgsT0FBTyxFQUFFLGlEQUFpRDtDQUMzRCxDQUFDO0FBRVcsUUFBQSxPQUFPLEdBQUc7SUFDckIsYUFBYSxFQUFFLG1EQUFtRDtJQUNsRSxhQUFhLEVBQUUsdUNBQXVDO0lBQ3RELGFBQWEsRUFBRSxtREFBbUQ7SUFDbEUsV0FBVyxFQUFFLG1EQUFtRDtJQUNoRSxTQUFTLEVBQUUsUUFBUTtJQUNuQixnQkFBZ0IsRUFBRSxRQUFRO0lBQzFCLGlCQUFpQixFQUFFLFVBQVU7SUFDN0Isb0JBQW9CLEVBQUUsVUFBVTtJQUNoQyxxQkFBcUIsRUFBRSxVQUFVO0lBQ2pDLDZCQUE2QixFQUFFLEVBQUU7SUFDakMsNkJBQTZCLEVBQUUsRUFBRTtJQUNqQyxxQkFBcUIsRUFBRSxRQUFRO0lBQy9CLHFCQUFxQixFQUFFLFFBQVE7SUFDL0IsU0FBUyxFQUFFLEdBQUc7SUFDZCxHQUFHLEVBQUUsUUFBUTtJQUNiLGlCQUFpQixFQUFFO1FBQ2pCLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7UUFDekMsV0FBVyxFQUFFLFFBQVE7UUFDckIsWUFBWSxFQUFFLE9BQU87UUFDckIsZUFBZSxFQUFFLE1BQU07UUFDdkIsUUFBUSxFQUFFLElBQUk7UUFDZCx3QkFBd0IsRUFBRSxRQUFRO0tBQ25DO0NBQ0YsQ0FBQztBQUVXLFFBQUEseUJBQXlCLEdBQUcsUUFBUSxDQUFDO0FBRXJDLFFBQUEsaUNBQWlDLEdBQUcseUJBQXlCLENBQUM7QUFFOUQsUUFBQSxnQ0FBZ0MsR0FBRyx3QkFBd0IsQ0FBQztBQUU1RCxRQUFBLHdCQUF3QixHQUFHLG9CQUFZLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBTRUVEX0FDQ09VTlQgPSB7XG4gIHNlZWQ6ICc0YzNiODlmNmNhODk3Y2I3MjlkMjE0NjkxMzg3N2Y3MScsXG4gIHByaXZhdGVLZXk6ICdkOGYwN2RlNTk3Nzg0Mzk0OWJmNGI4MWIwOTc4MTE3Yzg1ZjI1ODJjNTdkN2RkYTlhMDQ1MGZmM2ZiZWYxOWZlJyxcbiAgcHVibGljS2V5OiAnMDNjZDkxOTc2NThmYjU2MzU5MzU2MGI5M2Y4ZWJhMmFlYjJlNGYzNzgxMjYyNTY5YjMyNzdiOGRhN2Y0ZjcyN2IyJyxcbiAgeFByaXZhdGVLZXk6XG4gICAgJ3hwcnY5czIxWnJRSDE0M0szdVBUM2FTalFOYVVZSlFYNE15R1htYXZiRE41V0JNQWFmUzNQUTlYVjJFNWlNWExjTlVwcE5QQmg3N1V5bm5qTVRMMzV0NUJEOHZ1SHFBWXE4RzNNTkVibkVFUjNCWScsXG4gIHhQdWJsaWNLZXk6XG4gICAgJ3hwdWI2NjFNeU13QXFSYmNHUFR2OWJ5am1XWEQ2TEYxVHBoN3R6V1hQYm1oNFd0OVRUbUJ2d1RuMnBZWlplUXFuQkVINmNUWUNRRWVZTExrdnM3cndETjljQUtySzkxcmJCczhpeHM1MzJaRFpnRScsXG4gIGZscnBQcml2YXRlS2V5OiAnUHJpdmF0ZUtleS0yZVlSakVOclFraldkaXp0NlB4eFAxRFBGM0UydzZTWVdhaVNBTVdKd0RicVZXeE1MVycsXG4gIGFkZHJlc3NNYWlubmV0OiAnUC1mbGFyZTF1eXA1bjc2Z2pxbHRyZGR1cjdxbHJzbXQza3loOGZucnJxd3RhbCcsXG4gIGFkZHJlc3NUZXN0bmV0OiAnUC1jb3N0d28xdXlwNW43NmdqcWx0cmRkdXI3cWxyc210M2t5aDhmbnJtd2hxazcnLFxuICBtZXNzYWdlOiAndGVzdCBtZXNzYWdlJyxcbiAgc2lnbmF0dXJlOlxuICAgICcxNjkyYzBhMjVjODRkMzg5ZTYzNjkyY2EzYjdlYmM4OTgzNWMzYjExZjZlNjRhNTA1ZGRkNzE2NjRkMmEzYWU5MTRlMGQxYmUxM2E4MjRhZTk3MzMxODA1NjUwYTA2MzFkZjlhZTkyYmExMzNmOWFhODE5MTFmM2E1NjgwN2JhMzAxJyxcbn07XG5cbmV4cG9ydCBjb25zdCBBQ0NPVU5UXzEgPSB7XG4gIHNlZWQ6ICc0YzNiODlmNmNhODk3Y2I3MjlkMjE0NjkxMzg3N2Y3MScsXG4gIHByaXZhdGVLZXk6ICdhNTMzZDg0MTlkNDUxOGUxMWNkOGQ5ZjA0OWM3M2E4YmRhZjAwM2Q2NjAyMzE5Zjk2N2NlM2MyNDNlNjQ2YmE1JyxcbiAgcHVibGljS2V5OiAnMDJhMjIwZTVmZDEwODk5NmQwZTZjODVkYjQzMzg0ZGNlZjg4ODRiY2FlZTEyMDNlOTgwZjlmOTlmNjVhYjNkM2YzJyxcbiAgeFByaXZhdGVLZXk6XG4gICAgJ3hwcnY5czIxWnJRSDE0M0s0U0t4ZmFkTTdXM1lxMWhod0pnR0FGUWlvOHNCcWFYQURWbzh4bVFpVWUyY3k2R3dDa3dzZkRaTVNlNFc2R3Y1dkhUc2FVRjh5b1l1enE4S0ZKUFV1MnA5OFJBWEtzSicsXG4gIHhQdWJsaWNLZXk6XG4gICAgJ3hwdWI2NjFNeU13QXFSYmNHdlFSbWNBTVVkekhQM1lDTG1RN1hVTEtiWEdvUHY0OTZKOEhXSml5MlNNNnBNSE04OXNRbnlHaUxGNDZkZnpGQjVaUlR3Um1waVVxMmhVa3A1WWNjcmNXRzVYa1MzRCcsXG4gIGFkZHJlc3NNYWlubmV0OiAnUC1mbGFyZTFldnVtNW4wYWdmZnJkaGcyZG0ydmc3c3ZmZ3JyYTVydXhubWZ3aycsXG4gIGFkZHJlc3NUZXN0bmV0OiAnUC1jb3N0d28xZXZ1bTVuMGFnZmZyZGhnMmRtMnZnN3N2ZmdycmE1cnU3YXp6OWgnLFxufTtcblxuZXhwb3J0IGNvbnN0IEFDQ09VTlRfMiA9IHtcbiAgc2VlZDogJzRjM2I4OWY2Y2E4OTdjYjcyOWQyMTQ2OTEzODc3ZjcxJyxcbiAgcHJpdmF0ZUtleTogJzgzNmQyNDM5NmZmNmU5NTJlNjMyYjM1NTJmYzY1OTE1NjZlOGJlN2M5MzFhNmM2NGZhN2Y2ODViZTk2NDc4NDEnLFxuICBwdWJsaWNLZXk6ICcwM2NkNDY2MGFjMTU3MDQ3M2U3MTA3ZWQxZjMxNDI1ZDgxYTYyNDk5MmJiYzU5ODNmZDYxNzg3YzU2MGQ4ZmQ0MjAnLFxuICB4UHJpdmF0ZUtleTpcbiAgICAneHBydjlzMjFaclFIMTQzSzJLakQ4eXRTZkxXRGZlMjU4NXBCSk5kYWRMZ3dzRUtvR0xiR2RIQ0tTSzV5RG5mY21Ub2F6ZDNvUExEWHBydFhuQ3ZzbjlUNk1ESnoxcXdNUGFxMjJvVHJ6cXZ5ZURRJyxcbiAgeFB1YmxpY0tleTpcbiAgICAneHBydjlzMjFaclFIMTQzSzJLakQ4eXRTZkxXRGZlMjU4NXBCSk5kYWRMZ3dzRUtvR0xiR2RIQ0tTSzV5RG5mY21Ub2F6ZDNvUExEWHBydFhuQ3ZzbjlUNk1ESnoxcXdNUGFxMjJvVHJ6cXZ5ZURRJyxcbiAgYWRkcmVzc01haW5uZXQ6ICdQLWZsYXJlMXh2bmdycm1xemxkajUwa3B2cXg3bWhreDNodHZoNXg4N25rbDlqJyxcbiAgYWRkcmVzc1Rlc3RuZXQ6ICdQLWNvc3R3bzF4dm5ncnJtcXpsZGo1MGtwdnF4N21oa3gzaHR2aDV4OG1oZ3NxeScsXG59O1xuXG5leHBvcnQgY29uc3QgQUNDT1VOVF8zID0ge1xuICBzZWVkOiAnNGMzYjg5ZjZjYTg5N2NiNzI5ZDIxNDY5MTM4NzdmNzEnLFxuICBwcml2YXRlS2V5OiAnMDkwNjg0MDkyNmZjZDAzOGY0MjkyMTcwOTY1NWU4YjhiMDY2MTMyNzJhM2FjOTA0MDUxMGI3ZDRiMjZmMDliNicsXG4gIHB1YmxpY0tleTogJzAyOWFhNGQ5ZjE4ZDI5OTRmMmQ4MzNjM2I5ZGQxN2E1YWQ5YjFjM2U3NDRmMGZlMGI0Y2IxNTk1ZjhmNjdmZDEyYycsXG4gIHhQcml2YXRlS2V5OlxuICAgICd4cHJ2OXMyMVpyUUgxNDNLNFR0bzloMURXM2dtTUZweEdqU3lVUzNWMXJDVWpWRUREbTh4enMzOEdDcnNDcnlqRWJyRW92SGhnMTJkNTVtQng0akhLMUgxOVJ5dWh6SnU0R1FEOUhCcUxaQ3BBNmInLFxuICB4UHVibGljS2V5OlxuICAgICd4cHViNjYxTXlNd0FxUmJjR3d5R0ZpWURzQmRWdUhmU2dDQXBxZXk1cEVjNkhwbUM2WlU3WVFNTnAxQk00OTdkSmpCblFabU5GUFZRRlJWTG5HM3lKdnp5QTh6R2pzZWlmbVRxM0hrUXlxMXpIcXEnLFxuICBhZGRyZXNzOiAnUC1jb3N0d28xeHFyOHBzOHM2cXY1amtlOXdsdGM4ZGM5d201cTdjazJmcnQ1aGQnLFxufTtcblxuZXhwb3J0IGNvbnN0IEFDQ09VTlRfNCA9IHtcbiAgc2VlZDogJzRjM2I4OWY2Y2E4OTdjYjcyOWQyMTQ2OTEzODc3ZjcxJyxcbiAgcHJpdmF0ZUtleTogJzZkMTllZjEyNjIyYWQyZTM2ODgwNjQ4M2Y5MTQ0NWJhODMyYTBjYWRkNzNkODU4NWJmZDlkZTU5MDM3ZTc5YjQnLFxuICBwdWJsaWNLZXk6ICcwMjZiYjUwMzdkY2U1NzE0ZGM5NDI3ZTQ1ZWFiZWJkNjg5ZmM2NzFiOWM3YmE3YjBmZmM3NGM5NDQ3ODllY2U5ZDEnLFxuICB4UHJpdmF0ZUtleTpcbiAgICAneHBydjlzMjFaclFIMTQzSzJyTk1KQW9tU2tMN2k3clN1ZG5Fa3JtNFlXUzRuQUFQSkFRS0dxaXRtZXpxcDVFMzh1VmVMV2t6TE43Vlhua0t5M3VxbmMzRERYcW9qUTJyWEdMWUJ3dFZSVmNSZTdkJyxcbiAgeFB1YmxpY0tleTpcbiAgICAneHB1YjY2MU15TXdBcVJiY0ZMU3BRQ0xtb3RHckc5Z3dLNlc2ODVnZkx0cWdMVmhOQXhqVHBQMzlLVEtLZkxGQnh4cHRmZTRrOEtieXpXQ1BDRmJtOXh1U1VYUU5SUVROUW9lYllpdXBWOGZTUEhKJyxcbiAgYWRkcmVzczogJ1AtY29zdHdvMWp2amR2ZzZqZHFlejI0YzVranhnc3U0N21xd3ZweWVyazIyeWw4Jyxcbn07XG5cbmV4cG9ydCBjb25zdCBDT05URVhUID0ge1xuICB4QmxvY2tjaGFpbklEOiAnRkp1U3dadVA4NWV5QnB1QnJLRUNucFBlZEd5WG9EeTJoUDlxNEpEOHFCVFpHeFliSicsXG4gIHBCbG9ja2NoYWluSUQ6ICcxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMUxwb1lZJyxcbiAgY0Jsb2NrY2hhaW5JRDogJ3ZFOE05OG1FUUg2d2s1NnNTdEQxTUw4SEFwVGdTcWZKWkxrOWdRM0ZzZDRpNm0zQmknLFxuICBhdmF4QXNzZXRJRDogJ2Z4TUFLcEJRUXBGZWRyVWhXTXNEWWZDVUp4ZFV3NG1uZVRjektCek5nM3JjMkpVdWInLFxuICBiYXNlVHhGZWU6IDEwMDAwMDBuLFxuICBjcmVhdGVBc3NldFR4RmVlOiAxMDAwMDAwbixcbiAgY3JlYXRlU3VibmV0VHhGZWU6IDEwMDAwMDAwMG4sXG4gIHRyYW5zZm9ybVN1Ym5ldFR4RmVlOiAxMDAwMDAwMDBuLFxuICBjcmVhdGVCbG9ja2NoYWluVHhGZWU6IDEwMDAwMDAwMG4sXG4gIGFkZFByaW1hcnlOZXR3b3JrVmFsaWRhdG9yRmVlOiAwbixcbiAgYWRkUHJpbWFyeU5ldHdvcmtEZWxlZ2F0b3JGZWU6IDBuLFxuICBhZGRTdWJuZXRWYWxpZGF0b3JGZWU6IDEwMDAwMDBuLFxuICBhZGRTdWJuZXREZWxlZ2F0b3JGZWU6IDEwMDAwMDBuLFxuICBuZXR3b3JrSUQ6IDExNCxcbiAgaHJwOiAnY29zdHdvJyxcbiAgcGxhdGZvcm1GZWVDb25maWc6IHtcbiAgICB3ZWlnaHRzOiB7IDA6IDEsIDE6IDEwMDAsIDI6IDEwMDAsIDM6IDQgfSxcbiAgICBtYXhDYXBhY2l0eTogMTAwMDAwMG4sXG4gICAgbWF4UGVyU2Vjb25kOiAxMDAwMDBuLFxuICAgIHRhcmdldFBlclNlY29uZDogNTAwMDBuLFxuICAgIG1pblByaWNlOiAyNTBuLFxuICAgIGV4Y2Vzc0NvbnZlcnNpb25Db25zdGFudDogMjE2NDA0M24sXG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgSU5WQUxJRF9TSE9SVF9LRVlQQUlSX0tFWSA9ICc4MkEzNEUnO1xuXG5leHBvcnQgY29uc3QgSU5WQUxJRF9QUklWQVRFX0tFWV9FUlJPUl9NRVNTQUdFID0gJ1Vuc3VwcG9ydGVkIHByaXZhdGUga2V5JztcblxuZXhwb3J0IGNvbnN0IElOVkFMSURfUFVCTElDX0tFWV9FUlJPUl9NRVNTQUdFID0gJ1Vuc3VwcG9ydGVkIHB1YmxpYyBrZXknO1xuXG5leHBvcnQgY29uc3QgSU5WQUxJRF9MT05HX0tFWVBBSVJfUFJWID0gU0VFRF9BQ0NPVU5ULnByaXZhdGVLZXkgKyAnRjEnO1xuIl19
@@ -16,5 +16,35 @@ export declare const EXPORT_IN_C: {
16
16
  threshold: number;
17
17
  fee: string;
18
18
  locktime: number;
19
+ context: {
20
+ xBlockchainID: string;
21
+ pBlockchainID: string;
22
+ cBlockchainID: string;
23
+ avaxAssetID: string;
24
+ baseTxFee: bigint;
25
+ createAssetTxFee: bigint;
26
+ createSubnetTxFee: bigint;
27
+ transformSubnetTxFee: bigint;
28
+ createBlockchainTxFee: bigint;
29
+ addPrimaryNetworkValidatorFee: bigint;
30
+ addPrimaryNetworkDelegatorFee: bigint;
31
+ addSubnetValidatorFee: bigint;
32
+ addSubnetDelegatorFee: bigint;
33
+ networkID: number;
34
+ hrp: string;
35
+ platformFeeConfig: {
36
+ weights: {
37
+ 0: number;
38
+ 1: number;
39
+ 2: number;
40
+ 3: number;
41
+ };
42
+ maxCapacity: bigint;
43
+ maxPerSecond: bigint;
44
+ targetPerSecond: bigint;
45
+ minPrice: bigint;
46
+ excessConversionConstant: bigint;
47
+ };
48
+ };
19
49
  };
20
50
  //# sourceMappingURL=exportInC.d.ts.map