@bitgo-beta/sdk-coin-trx 1.2.3-alpha.317 → 1.2.3-alpha.319

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 (45) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/resources/protobuf/Contract.proto +16 -0
  3. package/dist/resources/protobuf/tron.d.ts +1012 -0
  4. package/dist/resources/protobuf/tron.js +4169 -1231
  5. package/dist/resources/protobuf/tron.proto +4 -0
  6. package/dist/src/lib/contractCallBuilder.d.ts +1 -35
  7. package/dist/src/lib/contractCallBuilder.d.ts.map +1 -1
  8. package/dist/src/lib/contractCallBuilder.js +3 -66
  9. package/dist/src/lib/enum.d.ts +24 -1
  10. package/dist/src/lib/enum.d.ts.map +1 -1
  11. package/dist/src/lib/enum.js +26 -2
  12. package/dist/src/lib/freezeBalanceTxBuilder.d.ts +71 -0
  13. package/dist/src/lib/freezeBalanceTxBuilder.d.ts.map +1 -0
  14. package/dist/src/lib/freezeBalanceTxBuilder.js +211 -0
  15. package/dist/src/lib/iface.d.ts +171 -2
  16. package/dist/src/lib/iface.d.ts.map +1 -1
  17. package/dist/src/lib/iface.js +1 -1
  18. package/dist/src/lib/transaction.d.ts.map +1 -1
  19. package/dist/src/lib/transaction.js +51 -1
  20. package/dist/src/lib/transactionBuilder.d.ts +50 -5
  21. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  22. package/dist/src/lib/transactionBuilder.js +83 -8
  23. package/dist/src/lib/unfreezeBalanceTxBuilder.d.ts +65 -0
  24. package/dist/src/lib/unfreezeBalanceTxBuilder.d.ts.map +1 -0
  25. package/dist/src/lib/unfreezeBalanceTxBuilder.js +204 -0
  26. package/dist/src/lib/utils.d.ts +34 -2
  27. package/dist/src/lib/utils.d.ts.map +1 -1
  28. package/dist/src/lib/utils.js +178 -3
  29. package/dist/src/lib/voteWitnessTxBuilder.d.ts +62 -0
  30. package/dist/src/lib/voteWitnessTxBuilder.d.ts.map +1 -0
  31. package/dist/src/lib/voteWitnessTxBuilder.js +219 -0
  32. package/dist/src/lib/withdrawExpireUnfreezeTxBuilder.d.ts +49 -0
  33. package/dist/src/lib/withdrawExpireUnfreezeTxBuilder.d.ts.map +1 -0
  34. package/dist/src/lib/withdrawExpireUnfreezeTxBuilder.js +167 -0
  35. package/dist/src/lib/wrappedBuilder.d.ts +32 -0
  36. package/dist/src/lib/wrappedBuilder.d.ts.map +1 -1
  37. package/dist/src/lib/wrappedBuilder.js +49 -1
  38. package/dist/src/trx.d.ts +0 -2
  39. package/dist/src/trx.d.ts.map +1 -1
  40. package/dist/src/trx.js +5 -6
  41. package/package.json +8 -7
  42. package/resources/protobuf/Contract.proto +16 -0
  43. package/resources/protobuf/tron.d.ts +1012 -0
  44. package/resources/protobuf/tron.js +4169 -1231
  45. package/resources/protobuf/tron.proto +4 -0
@@ -1,7 +1,7 @@
1
1
  import BigNumber from 'bignumber.js';
2
2
  import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
3
3
  import { BaseKey, BaseTransactionBuilder } from '@bitgo-beta/sdk-core';
4
- import { TransactionReceipt } from './iface';
4
+ import { TransactionReceipt, Block } from './iface';
5
5
  import { Address } from './address';
6
6
  import { Transaction } from './transaction';
7
7
  /**
@@ -9,12 +9,49 @@ import { Transaction } from './transaction';
9
9
  */
10
10
  export declare class TransactionBuilder extends BaseTransactionBuilder {
11
11
  private _transaction;
12
+ protected _ownerAddress: string;
13
+ protected _refBlockBytes: string;
14
+ protected _refBlockHash: string;
15
+ protected _expiration: number;
16
+ protected _timestamp: number;
12
17
  /**
13
18
  * Public constructor.
14
19
  *
15
20
  * @param {CoinConfig} _coinConfig Configuration object
16
21
  */
17
22
  constructor(_coinConfig: Readonly<CoinConfig>);
23
+ /** @inheritdoc */
24
+ protected get transaction(): Transaction;
25
+ /** @inheritdoc */
26
+ protected set transaction(transaction: Transaction);
27
+ /**
28
+ * Set the source address for the transaction
29
+ *
30
+ * @param {Address} address The source address
31
+ * @returns the builder with the new parameter set
32
+ */
33
+ source(address: Address): this;
34
+ /**
35
+ * Set the timestamp for the transaction
36
+ *
37
+ * @param {number} time the timestamp in milliseconds
38
+ * @returns the builder with the new parameter set
39
+ */
40
+ timestamp(time: number): this;
41
+ /**
42
+ * Set the block values,
43
+ *
44
+ * @param {Block} block the object containing number and hash of the block
45
+ * @returns the builder with the new parameter set
46
+ */
47
+ block(block: Block): this;
48
+ /**
49
+ * Set the expiration time for the transaction, set timestamp if it was not set previously
50
+ *
51
+ * @param {number} time the expiration time in milliseconds
52
+ * @returns the builder with the new parameter set
53
+ */
54
+ expiration(time: number): this;
18
55
  /**
19
56
  * Parse transaction takes in raw JSON directly from the node.
20
57
  *
@@ -39,6 +76,11 @@ export declare class TransactionBuilder extends BaseTransactionBuilder {
39
76
  validateValue(value: BigNumber): void;
40
77
  /** @inheritdoc */
41
78
  validateAddress(address: Address): void;
79
+ /**
80
+ * Helper method to validate the resource type
81
+ * @param resource The resource type to be validated
82
+ */
83
+ validateResource(resource: string): void;
42
84
  /** @inheritdoc */
43
85
  validateKey(key: BaseKey): void;
44
86
  /**
@@ -57,9 +99,12 @@ export declare class TransactionBuilder extends BaseTransactionBuilder {
57
99
  validateRawTransaction(rawTransaction: TransactionReceipt | string): void;
58
100
  /** @inheritdoc */
59
101
  validateTransaction(transaction: Transaction): void;
60
- /** @inheritdoc */
61
- protected get transaction(): Transaction;
62
- /** @inheritdoc */
63
- protected set transaction(transaction: Transaction);
102
+ /**
103
+ * Validate the expiration time of the transaction
104
+ *
105
+ * @param {number} value The expiration time in milliseconds
106
+ * @throws {InvalidParameterValueError} If the expiration time is invalid
107
+ */
108
+ validateExpirationTime(value: number): void;
64
109
  }
65
110
  //# sourceMappingURL=transactionBuilder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"AAEA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EACL,OAAO,EACP,sBAAsB,EAKvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,sBAAsB;IAE5D,OAAO,CAAC,YAAY,CAAc;IAClC;;;;OAIG;gBACS,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C;;;;;OAKG;IACH,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,kBAAkB,GAAG,MAAM,GAAG,WAAW;IAWtF,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;IAWvD,SAAS,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;IAuBnD,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAQ3D,WAAW,CAAC,EAAE,EAAE,kBAAkB,GAAG,MAAM;IAI3C;;;;;OAKG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAIxC,kBAAkB;IAClB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAWrC,kBAAkB;IAClB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAOvC,kBAAkB;IAClB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAQ/B;;;;;;;;;;;;OAYG;IACH,sBAAsB,CAAC,cAAc,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI;IA2CzE,kBAAkB;IAClB,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAQnD,kBAAkB;IAClB,SAAS,KAAK,WAAW,IAAI,WAAW,CAEvC;IAED,kBAAkB;IAClB,SAAS,KAAK,WAAW,CAAC,WAAW,EAAE,WAAW,EAEjD;CACF"}
1
+ {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"AAEA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EACL,OAAO,EACP,sBAAsB,EAOvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,sBAAsB;IAE5D,OAAO,CAAC,YAAY,CAAc;IAClC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC;IACjC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAE7B;;;;OAIG;gBACS,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,kBAAkB;IAClB,SAAS,KAAK,WAAW,IAAI,WAAW,CAEvC;IAED,kBAAkB;IAClB,SAAS,KAAK,WAAW,CAAC,WAAW,EAAE,WAAW,EAEjD;IAED;;;;;OAKG;IACH,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAM9B;;;;;OAKG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK7B;;;;;OAKG;IACH,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IASzB;;;;;OAKG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAU9B;;;;;OAKG;IACH,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,kBAAkB,GAAG,MAAM,GAAG,WAAW;IAWtF,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;IAWvD,SAAS,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;IAuBnD,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAQ3D,WAAW,CAAC,EAAE,EAAE,kBAAkB,GAAG,MAAM;IAI3C;;;;;OAKG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAIxC,kBAAkB;IAClB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAWrC,kBAAkB;IAClB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAOvC;;;OAGG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMxC,kBAAkB;IAClB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAQ/B;;;;;;;;;;;;OAYG;IACH,sBAAsB,CAAC,cAAc,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI;IA2CzE,kBAAkB;IAClB,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAQnD;;;;;OAKG;IACH,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAa5C"}
@@ -56,6 +56,63 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
56
56
  constructor(_coinConfig) {
57
57
  super(_coinConfig);
58
58
  }
59
+ /** @inheritdoc */
60
+ get transaction() {
61
+ return this._transaction;
62
+ }
63
+ /** @inheritdoc */
64
+ set transaction(transaction) {
65
+ this._transaction = transaction;
66
+ }
67
+ /**
68
+ * Set the source address for the transaction
69
+ *
70
+ * @param {Address} address The source address
71
+ * @returns the builder with the new parameter set
72
+ */
73
+ source(address) {
74
+ this.validateAddress(address);
75
+ this._ownerAddress = (0, utils_1.getHexAddressFromBase58Address)(address.address);
76
+ return this;
77
+ }
78
+ /**
79
+ * Set the timestamp for the transaction
80
+ *
81
+ * @param {number} time the timestamp in milliseconds
82
+ * @returns the builder with the new parameter set
83
+ */
84
+ timestamp(time) {
85
+ this._timestamp = time;
86
+ return this;
87
+ }
88
+ /**
89
+ * Set the block values,
90
+ *
91
+ * @param {Block} block the object containing number and hash of the block
92
+ * @returns the builder with the new parameter set
93
+ */
94
+ block(block) {
95
+ const blockBytes = Buffer.alloc(8);
96
+ blockBytes.writeInt32BE(block.number, 4);
97
+ this._refBlockBytes = blockBytes.slice(6, 8).toString('hex');
98
+ this._refBlockHash = Buffer.from(block.hash, 'hex').slice(8, 16).toString('hex');
99
+ return this;
100
+ }
101
+ /**
102
+ * Set the expiration time for the transaction, set timestamp if it was not set previously
103
+ *
104
+ * @param {number} time the expiration time in milliseconds
105
+ * @returns the builder with the new parameter set
106
+ */
107
+ expiration(time) {
108
+ if (this.transaction.id) {
109
+ throw new sdk_core_1.ExtendTransactionError('Expiration is already set, it can only be extended');
110
+ }
111
+ this._timestamp = this._timestamp || Date.now();
112
+ this.validateExpirationTime(time);
113
+ this._expiration = time;
114
+ return this;
115
+ }
59
116
  /**
60
117
  * Parse transaction takes in raw JSON directly from the node.
61
118
  *
@@ -141,6 +198,15 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
141
198
  throw new Error(address.address + ' is not a valid base58 address.');
142
199
  }
143
200
  }
201
+ /**
202
+ * Helper method to validate the resource type
203
+ * @param resource The resource type to be validated
204
+ */
205
+ validateResource(resource) {
206
+ if (!utils_1.VALID_RESOURCE_TYPES.includes(resource)) {
207
+ throw new Error(resource + ' is not a valid resource type.');
208
+ }
209
+ }
144
210
  /** @inheritdoc */
145
211
  validateKey(key) {
146
212
  try {
@@ -216,14 +282,23 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
216
282
  throw new sdk_core_1.InvalidTransactionError(transaction.id + ' is not a valid transaction id. Expecting: ' + txId);
217
283
  }
218
284
  }
219
- /** @inheritdoc */
220
- get transaction() {
221
- return this._transaction;
222
- }
223
- /** @inheritdoc */
224
- set transaction(transaction) {
225
- this._transaction = transaction;
285
+ /**
286
+ * Validate the expiration time of the transaction
287
+ *
288
+ * @param {number} value The expiration time in milliseconds
289
+ * @throws {InvalidParameterValueError} If the expiration time is invalid
290
+ */
291
+ validateExpirationTime(value) {
292
+ if (value < this._timestamp) {
293
+ throw new sdk_core_1.InvalidParameterValueError('Expiration must be greater than timestamp');
294
+ }
295
+ if (value < Date.now()) {
296
+ throw new sdk_core_1.InvalidParameterValueError('Expiration must be greater than current time');
297
+ }
298
+ if (value - this._timestamp > utils_1.TRANSACTION_MAX_EXPIRATION) {
299
+ throw new sdk_core_1.InvalidParameterValueError('Expiration must not be greater than one day');
300
+ }
226
301
  }
227
302
  }
228
303
  exports.TransactionBuilder = TransactionBuilder;
229
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbUNBQW9DO0FBQ3BDLDBDQUE0QjtBQUM1QixnRUFBcUM7QUFFckMsbURBTzhCO0FBRzlCLG1DQUE4RTtBQUM5RSwrQ0FBNEM7QUFDNUMsdUNBQW9DO0FBRXBDOztHQUVHO0FBQ0gsTUFBYSxrQkFBbUIsU0FBUSxpQ0FBc0I7SUFHNUQ7Ozs7T0FJRztJQUNILFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNPLGtCQUFrQixDQUFDLGNBQTJDO1FBQ3RFLElBQUksRUFBRSxDQUFDO1FBQ1AsSUFBSSxPQUFPLGNBQWMsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN2QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQy9DLEVBQUUsR0FBRyxJQUFJLHlCQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN0RCxDQUFDO2FBQU0sQ0FBQztZQUNOLEVBQUUsR0FBRyxJQUFJLHlCQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsa0JBQWtCO0lBQ1Isa0JBQWtCLENBQUMsR0FBWTtRQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM3QixNQUFNLElBQUksdUJBQVksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQ3RELENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FB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QUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEUsSUFBSSxXQUFXLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzVCLE1BQU0sSUFBSSxrQ0FBdUIsQ0FBQyxXQUFXLENBQUMsRUFBRSxHQUFHLDZDQUE2QyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQzNHLENBQUM7SUFDSCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLElBQWMsV0FBVztRQUN2QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFjLFdBQVcsQ0FBQyxXQUF3QjtRQUNoRCxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztJQUNsQyxDQUFDO0NBQ0Y7QUE5TEQsZ0RBOExDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQge1xuICBCYXNlS2V5LFxuICBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyLFxuICBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsXG4gIEludmFsaWRUcmFuc2FjdGlvbkVycm9yLFxuICBQYXJzZVRyYW5zYWN0aW9uRXJyb3IsXG4gIFNpZ25pbmdFcnJvcixcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25SZWNlaXB0IH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBBZGRyZXNzIH0gZnJvbSAnLi9hZGRyZXNzJztcbmltcG9ydCB7IHNpZ25UcmFuc2FjdGlvbiwgaXNCYXNlNThBZGRyZXNzLCBkZWNvZGVUcmFuc2FjdGlvbiB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuXG4vKipcbiAqIFRyb24gdHJhbnNhY3Rpb24gYnVpbGRlci5cbiAqL1xuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uQnVpbGRlciBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAvLyB0cmFuc2FjdGlvbiBiZWluZyBidWlsdFxuICBwcml2YXRlIF90cmFuc2FjdGlvbjogVHJhbnNhY3Rpb247XG4gIC8qKlxuICAgKiBQdWJsaWMgY29uc3RydWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29pbkNvbmZpZ30gX2NvaW5Db25maWcgQ29uZmlndXJhdGlvbiBvYmplY3RcbiAgICovXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSB0cmFuc2FjdGlvbiB0YWtlcyBpbiByYXcgSlNPTiBkaXJlY3RseSBmcm9tIHRoZSBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uUmVjZWlwdH0gcmF3VHJhbnNhY3Rpb24gVGhlIFRyb24gdHJhbnNhY3Rpb24gaW4gSlNPTiBmb3JtYXQgYXMgcmV0dXJuZWQgYnkgdGhlIFRyb24gbGliIG9yIGEgc3RyaW5naWZ5ZWQgdmVyc2lvbiBvZiBzdWNoIEpTT04uXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbn0gVHJvbiB0cmFuc2FjdGlvblxuICAgKi9cbiAgcHJvdGVjdGVkIGZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbjogVHJhbnNhY3Rpb25SZWNlaXB0IHwgc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIGxldCB0eDtcbiAgICBpZiAodHlwZW9mIHJhd1RyYW5zYWN0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSBKU09OLnBhcnNlKHJhd1RyYW5zYWN0aW9uKTtcbiAgICAgIHR4ID0gbmV3IFRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcsIHRyYW5zYWN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHggPSBuZXcgVHJhbnNhY3Rpb24odGhpcy5fY29pbkNvbmZpZywgcmF3VHJhbnNhY3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gdHg7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIHNpZ25JbXBsZW1lbnRhdGlvbihrZXk6IEJhc2VLZXkpOiBUcmFuc2FjdGlvbiB7XG4gICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9uLmlucHV0cykge1xuICAgICAgdGhyb3cgbmV3IFNpZ25pbmdFcnJvcignVHJhbnNhY3Rpb24gaGFzIG5vIHNlbmRlcicpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy50cmFuc2FjdGlvbi5vdXRwdXRzKSB7XG4gICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdUcmFuc2FjdGlvbiBoYXMgbm8gcmVjZWl2ZXInKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYXBwbHlTaWduYXR1cmUoa2V5KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhcHBseVNpZ25hdHVyZShrZXk6IEJhc2VLZXkpOiBUcmFuc2FjdGlvbiB7XG4gICAgY29uc3Qgb2xkVHJhbnNhY3Rpb24gPSB0aGlzLnRyYW5zYWN0aW9uLnRvSnNvbigpO1xuICAgIC8vIFN0b3JlIHRoZSBvcmlnaW5hbCBzaWduYXR1cmVzIHRvIGNvbXBhcmUgdGhlbSB3aXRoIHRoZSBuZXcgb25lcyBpbiBhIGxhdGVyIHN0ZXAuIFNpZ25hdHVyZXNcbiAgICAvLyBjYW4gYmUgdW5kZWZpbmVkIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgdGhlIHRyYW5zYWN0aW9uIGlzIGJlaW5nIHNpZ25lZFxuICAgIGNvbnN0IG9sZFNpZ25hdHVyZUNvdW50ID0gb2xkVHJhbnNhY3Rpb24uc2lnbmF0dXJlID8gb2xkVHJhbnNhY3Rpb24uc2lnbmF0dXJlLmxlbmd0aCA6IDA7XG4gICAgbGV0IHNpZ25lZFRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvblJlY2VpcHQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcih7IHBydjoga2V5LmtleSB9KTtcbiAgICAgIC8vIFNpbmNlIHRoZSBrZXkgcGFpciB3YXMgZ2VuZXJhdGVkIHVzaW5nIGEgcHJpdmF0ZSBrZXksIGl0IHdpbGwgYWx3YXlzIGhhdmUgYSBwcnYgYXR0cmlidXRlLFxuICAgICAgLy8gaGVuY2UgaXQgaXMgc2FmZSB0byB1c2Ugbm9uLW51bGwgb3BlcmF0b3JcbiAgICAgIHNpZ25lZFRyYW5zYWN0aW9uID0gc2lnblRyYW5zYWN0aW9uKGtleVBhaXIuZ2V0S2V5cygpLnBydiEsIHRoaXMudHJhbnNhY3Rpb24udG9Kc29uKCkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ0ZhaWxlZCB0byBzaWduIHRyYW5zYWN0aW9uIHZpYSBoZWxwZXIuJyk7XG4gICAgfVxuXG4gICAgLy8gRW5zdXJlIHRoYXQgd2UgaGF2ZSBtb3JlIHNpZ25hdHVyZXMgdGhhbiB3aGF0IHdlIHN0YXJ0ZWQgd2l0aFxuICAgIGlmICghc2lnbmVkVHJhbnNhY3Rpb24uc2lnbmF0dXJlIHx8IG9sZFNpZ25hdHVyZUNvdW50ID49IHNpZ25lZFRyYW5zYWN0aW9uLnNpZ25hdHVyZS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ1RyYW5zYWN0aW9uIHNpZ25pbmcgZGlkIG5vdCByZXR1cm4gYW4gYWRkaXRpb25hbCBzaWduYXR1cmUuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbih0aGlzLl9jb2luQ29uZmlnLCBzaWduZWRUcmFuc2FjdGlvbik7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIC8vIFRoaXMgaXMgYSBuby1vcCBzaW5jZSBUcm9uIHRyYW5zYWN0aW9ucyBhcmUgYnVpbHQgZnJvbVxuICAgIGlmICghdGhpcy50cmFuc2FjdGlvbi5pZCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignQSB2YWxpZCB0cmFuc2FjdGlvbiBtdXN0IGhhdmUgYW4gaWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLnRyYW5zYWN0aW9uKTtcbiAgfVxuXG4gIGluaXRCdWlsZGVyKHR4OiBUcmFuc2FjdGlvblJlY2VpcHQgfCBzdHJpbmcpIHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uID0gdGhpcy5mcm9tSW1wbGVtZW50YXRpb24odHgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dGVuZCB0aGUgdmFsaWRpdHkgb2YgdGhpcyB0cmFuc2FjdGlvbiBieSB0aGUgZ2l2ZW4gYW1vdW50IG9mIHRpbWVcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGV4dGVuc2lvbk1zIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGV4dGVuZCB0aGUgdmFsaWRUbyB0aW1lXG4gICAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gICAqL1xuICBleHRlbmRWYWxpZFRvKGV4dGVuc2lvbk1zOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLmV4dGVuZEV4cGlyYXRpb24oZXh0ZW5zaW9uTXMpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVmFsdWUodmFsdWU6IEJpZ051bWJlcik6IHZvaWQge1xuICAgIGlmICh2YWx1ZS5pc0xlc3NUaGFuT3JFcXVhbFRvKDApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZhbHVlIGNhbm5vdCBiZSBiZWxvdyB6ZXJvLicpO1xuICAgIH1cblxuICAgIC8vIG1heCBsb25nIGluIEphdmEgLSBhc3N1bWVkIHVwcGVyIGxpbWl0IGZvciBhIFRSWCB0cmFuc2FjdGlvblxuICAgIGlmICh2YWx1ZS5pc0dyZWF0ZXJUaGFuKG5ldyBCaWdOdW1iZXIoJzkyMjMzNzIwMzY4NTQ3NzU4MDcnKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVmFsdWUgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiBoYW5kbGVkIGJ5IHRoZSBqYXZhdHJvbiBub2RlLicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZUFkZHJlc3MoYWRkcmVzczogQWRkcmVzcyk6IHZvaWQge1xuICAgIC8vIGFzc3VtZXMgYSBiYXNlIDU4IGFkZHJlc3MgZm9yIG91ciBhZGRyZXNzZXNcbiAgICBpZiAoIWlzQmFzZTU4QWRkcmVzcyhhZGRyZXNzLmFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYWRkcmVzcy5hZGRyZXNzICsgJyBpcyBub3QgYSB2YWxpZCBiYXNlNTggYWRkcmVzcy4nKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVLZXkoa2V5OiBCYXNlS2V5KTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIG5ldyBLZXlQYWlyKHsgcHJ2OiBrZXkua2V5IH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgcHJvdmlkZWQga2V5IGlzIG5vdCB2YWxpZCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGUgY29udGVudHMgb2YgYSByYXcgdHJhbnNhY3Rpb24uIFRoZSB2YWxpZGF0aW9uXG4gICAqIHBoYXNlIGlzIHRvIGNvbXBhcmUgdGhlIHJhdy1kYXRhLWhleCB0byB0aGUgcmF3LWRhdGEgb2YgdGhlXG4gICAqIHRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBUaGUgY29udGVudHMgdG8gYmUgdmFsaWRhdGVkIGFyZVxuICAgKiAxLiBUaGUgdHJhbnNhY3Rpb24gaWRcbiAgICogMi4gVGhlIGV4cGlyYXRpb24gZGF0ZVxuICAgKiAzLiBUaGUgdGltZXN0YW1wXG4gICAqIDQuIFRoZSBjb250cmFjdFxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uUmVjZWlwdCB8IHN0cmluZ30gcmF3VHJhbnNhY3Rpb24gVGhlIHJhdyB0cmFuc2FjdGlvbiB0byBiZSB2YWxpZGF0ZWRcbiAgICovXG4gIHZhbGlkYXRlUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uUmVjZWlwdCB8IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIFRPRE86IFZhbGlkYXRpb24gb2Ygc2lnbmF0dXJlXG4gICAgaWYgKCFyYXdUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdSYXcgdHJhbnNhY3Rpb24gaXMgZW1wdHknKTtcbiAgICB9XG4gICAgbGV0IGN1cnJUcmFuc2FjdGlvbjogVHJhbnNhY3Rpb25SZWNlaXB0O1xuICAgIC8vIHJhd1RyYW5zYWN0aW9uIGNhbiBiZSBlaXRoZXIgU3RyaW5naWZpZWQgSlNPTiBPUlxuICAgIC8vIGl0IGNhbiBiZSBhIHJlZ3VsYXIgSlNPTiBvYmplY3QgKG5vdCBzdHJpbmdpZmllZCkuXG4gICAgaWYgKHR5cGVvZiByYXdUcmFuc2FjdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGN1cnJUcmFuc2FjdGlvbiA9IEpTT04ucGFyc2UocmF3VHJhbnNhY3Rpb24pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKCdUaGVyZSB3YXMgZXJyb3IgaW4gcGFyc2luZyB0aGUgSlNPTiBzdHJpbmcnKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKF8uaXNPYmplY3QocmF3VHJhbnNhY3Rpb24pKSB7XG4gICAgICBjdXJyVHJhbnNhY3Rpb24gPSByYXdUcmFuc2FjdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiBpcyBub3QgYW4gb2JqZWN0IG9yIHN0cmluZ2lmaWVkIGpzb24nKTtcbiAgICB9XG4gICAgY29uc3QgZGVjb2RlZFJhd0RhdGFIZXggPSBkZWNvZGVUcmFuc2FjdGlvbihjdXJyVHJhbnNhY3Rpb24ucmF3X2RhdGFfaGV4KTtcbiAgICBpZiAoIWN1cnJUcmFuc2FjdGlvbi50eElEKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ1RyYW5zYWN0aW9uIElEIGlzIGVtcHR5Jyk7XG4gICAgfVxuICAgIC8vIFZhbGlkYXRlIHRoZSB0cmFuc2FjdGlvbiBJRCBmcm9tIHRoZSByYXcgZGF0YSBoZXhcbiAgICBjb25zdCBoZXhCdWZmZXIgPSBCdWZmZXIuZnJvbShjdXJyVHJhbnNhY3Rpb24ucmF3X2RhdGFfaGV4LCAnaGV4Jyk7XG4gICAgY29uc3QgY3VyclR4SUQgPSBjcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoaGV4QnVmZmVyKS5kaWdlc3QoJ2hleCcpO1xuICAgIGlmIChjdXJyVHJhbnNhY3Rpb24udHhJRCAhPT0gY3VyclR4SUQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gaGFzIG5vdCBoYXZlIGEgdmFsaWQgaWQnKTtcbiAgICB9XG4gICAgLy8gVmFsaWRhdGUgdGhlIGV4cGlyYXRpb24gdGltZSBmcm9tIHRoZSByYXctZGF0YS1oZXhcbiAgICBpZiAoY3VyclRyYW5zYWN0aW9uLnJhd19kYXRhLmV4cGlyYXRpb24gIT09IGRlY29kZWRSYXdEYXRhSGV4LmV4cGlyYXRpb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gaGFzIG5vdCBoYXZlIGEgdmFsaWQgZXhwaXJhdGlvbicpO1xuICAgIH1cbiAgICAvLyBWYWxpZGF0ZSB0aGUgdGltZXN0YW1wIGZyb20gdGhlIHJhdy1kYXRhLWhleFxuICAgIGlmIChjdXJyVHJhbnNhY3Rpb24ucmF3X2RhdGEudGltZXN0YW1wICE9PSBkZWNvZGVkUmF3RGF0YUhleC50aW1lc3RhbXApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gaGFzIG5vdCBoYXZlIGEgdmFsaWQgdGltZXRhbXAnKTtcbiAgICB9XG4gICAgLy8gVHJhbnNhY3Rpb24gY29udHJhY3QgbXVzdCBleGlzdFxuICAgIGlmICghY3VyclRyYW5zYWN0aW9uLnJhd19kYXRhLmNvbnRyYWN0KSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ1RyYW5zYWN0aW9uIGNvbnRyYWN0cyBhcmUgZW1wdHknKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICBjb25zdCBoZXhCdWZmZXIgPSBCdWZmZXIuZnJvbSh0cmFuc2FjdGlvbi50b0pzb24oKS5yYXdfZGF0YV9oZXgsICdoZXgnKTtcbiAgICBjb25zdCB0eElkID0gY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKGhleEJ1ZmZlcikuZGlnZXN0KCdoZXgnKTtcbiAgICBpZiAodHJhbnNhY3Rpb24uaWQgIT09IHR4SWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcih0cmFuc2FjdGlvbi5pZCArICcgaXMgbm90IGEgdmFsaWQgdHJhbnNhY3Rpb24gaWQuIEV4cGVjdGluZzogJyArIHR4SWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uKCk6IFRyYW5zYWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIHNldCB0cmFuc2FjdGlvbih0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uO1xuICB9XG59XG4iXX0=
304
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbUNBQW9DO0FBQ3BDLDBDQUE0QjtBQUM1QixnRUFBcUM7QUFFckMsbURBUzhCO0FBRzlCLG1DQU9pQjtBQUNqQiwrQ0FBNEM7QUFDNUMsdUNBQW9DO0FBRXBDOztHQUVHO0FBQ0gsTUFBYSxrQkFBbUIsU0FBUSxpQ0FBc0I7SUFTNUQ7Ozs7T0FJRztJQUNILFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBYyxXQUFXO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLElBQWMsV0FBVyxDQUFDLFdBQXdCO1FBQ2hELElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxPQUFnQjtRQUNyQixJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBQSxzQ0FBOEIsRUFBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckUsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxTQUFTLENBQUMsSUFBWTtRQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN2QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxLQUFZO1FBQ2hCLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7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QUFDLFVBQVUsR0FBRyxrQ0FBMEIsRUFBRSxDQUFDO1lBQ3pELE1BQU0sSUFBSSxxQ0FBMEIsQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1FBQ3RGLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUF4UkQsZ0RBd1JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQge1xuICBCYXNlS2V5LFxuICBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyLFxuICBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsXG4gIEludmFsaWRUcmFuc2FjdGlvbkVycm9yLFxuICBQYXJzZVRyYW5zYWN0aW9uRXJyb3IsXG4gIFNpZ25pbmdFcnJvcixcbiAgRXh0ZW5kVHJhbnNhY3Rpb25FcnJvcixcbiAgSW52YWxpZFBhcmFtZXRlclZhbHVlRXJyb3IsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uUmVjZWlwdCwgQmxvY2sgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IEFkZHJlc3MgfSBmcm9tICcuL2FkZHJlc3MnO1xuaW1wb3J0IHtcbiAgc2lnblRyYW5zYWN0aW9uLFxuICBpc0Jhc2U1OEFkZHJlc3MsXG4gIGRlY29kZVRyYW5zYWN0aW9uLFxuICBWQUxJRF9SRVNPVVJDRV9UWVBFUyxcbiAgZ2V0SGV4QWRkcmVzc0Zyb21CYXNlNThBZGRyZXNzLFxuICBUUkFOU0FDVElPTl9NQVhfRVhQSVJBVElPTixcbn0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4va2V5UGFpcic7XG5cbi8qKlxuICogVHJvbiB0cmFuc2FjdGlvbiBidWlsZGVyLlxuICovXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25CdWlsZGVyIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIC8vIHRyYW5zYWN0aW9uIGJlaW5nIGJ1aWx0XG4gIHByaXZhdGUgX3RyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbjtcbiAgcHJvdGVjdGVkIF9vd25lckFkZHJlc3M6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9yZWZCbG9ja0J5dGVzOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfcmVmQmxvY2tIYXNoOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfZXhwaXJhdGlvbjogbnVtYmVyO1xuICBwcm90ZWN0ZWQgX3RpbWVzdGFtcDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBQdWJsaWMgY29uc3RydWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29pbkNvbmZpZ30gX2NvaW5Db25maWcgQ29uZmlndXJhdGlvbiBvYmplY3RcbiAgICovXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uKCk6IFRyYW5zYWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIHNldCB0cmFuc2FjdGlvbih0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgc291cmNlIGFkZHJlc3MgZm9yIHRoZSB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge0FkZHJlc3N9IGFkZHJlc3MgVGhlIHNvdXJjZSBhZGRyZXNzXG4gICAqIEByZXR1cm5zIHRoZSBidWlsZGVyIHdpdGggdGhlIG5ldyBwYXJhbWV0ZXIgc2V0XG4gICAqL1xuICBzb3VyY2UoYWRkcmVzczogQWRkcmVzcyk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVBZGRyZXNzKGFkZHJlc3MpO1xuICAgIHRoaXMuX293bmVyQWRkcmVzcyA9IGdldEhleEFkZHJlc3NGcm9tQmFzZTU4QWRkcmVzcyhhZGRyZXNzLmFkZHJlc3MpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdGltZXN0YW1wIGZvciB0aGUgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWUgdGhlIHRpbWVzdGFtcCBpbiBtaWxsaXNlY29uZHNcbiAgICogQHJldHVybnMgdGhlIGJ1aWxkZXIgd2l0aCB0aGUgbmV3IHBhcmFtZXRlciBzZXRcbiAgICovXG4gIHRpbWVzdGFtcCh0aW1lOiBudW1iZXIpOiB0aGlzIHtcbiAgICB0aGlzLl90aW1lc3RhbXAgPSB0aW1lO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgYmxvY2sgdmFsdWVzLFxuICAgKlxuICAgKiBAcGFyYW0ge0Jsb2NrfSBibG9jayB0aGUgb2JqZWN0IGNvbnRhaW5pbmcgbnVtYmVyIGFuZCBoYXNoIG9mIHRoZSBibG9ja1xuICAgKiBAcmV0dXJucyB0aGUgYnVpbGRlciB3aXRoIHRoZSBuZXcgcGFyYW1ldGVyIHNldFxuICAgKi9cbiAgYmxvY2soYmxvY2s6IEJsb2NrKTogdGhpcyB7XG4gICAgY29uc3QgYmxvY2tCeXRlcyA9IEJ1ZmZlci5hbGxvYyg4KTtcbiAgICBibG9ja0J5dGVzLndyaXRlSW50MzJCRShibG9jay5udW1iZXIsIDQpO1xuICAgIHRoaXMuX3JlZkJsb2NrQnl0ZXMgPSBibG9ja0J5dGVzLnNsaWNlKDYsIDgpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICB0aGlzLl9yZWZCbG9ja0hhc2ggPSBCdWZmZXIuZnJvbShibG9jay5oYXNoLCAnaGV4Jykuc2xpY2UoOCwgMTYpLnRvU3RyaW5nKCdoZXgnKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZXhwaXJhdGlvbiB0aW1lIGZvciB0aGUgdHJhbnNhY3Rpb24sIHNldCB0aW1lc3RhbXAgaWYgaXQgd2FzIG5vdCBzZXQgcHJldmlvdXNseVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdGltZSB0aGUgZXhwaXJhdGlvbiB0aW1lIGluIG1pbGxpc2Vjb25kc1xuICAgKiBAcmV0dXJucyB0aGUgYnVpbGRlciB3aXRoIHRoZSBuZXcgcGFyYW1ldGVyIHNldFxuICAgKi9cbiAgZXhwaXJhdGlvbih0aW1lOiBudW1iZXIpOiB0aGlzIHtcbiAgICBpZiAodGhpcy50cmFuc2FjdGlvbi5pZCkge1xuICAgICAgdGhyb3cgbmV3IEV4dGVuZFRyYW5zYWN0aW9uRXJyb3IoJ0V4cGlyYXRpb24gaXMgYWxyZWFkeSBzZXQsIGl0IGNhbiBvbmx5IGJlIGV4dGVuZGVkJyk7XG4gICAgfVxuICAgIHRoaXMuX3RpbWVzdGFtcCA9IHRoaXMuX3RpbWVzdGFtcCB8fCBEYXRlLm5vdygpO1xuICAgIHRoaXMudmFsaWRhdGVFeHBpcmF0aW9uVGltZSh0aW1lKTtcbiAgICB0aGlzLl9leHBpcmF0aW9uID0gdGltZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSB0cmFuc2FjdGlvbiB0YWtlcyBpbiByYXcgSlNPTiBkaXJlY3RseSBmcm9tIHRoZSBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uUmVjZWlwdH0gcmF3VHJhbnNhY3Rpb24gVGhlIFRyb24gdHJhbnNhY3Rpb24gaW4gSlNPTiBmb3JtYXQgYXMgcmV0dXJuZWQgYnkgdGhlIFRyb24gbGliIG9yIGEgc3RyaW5naWZ5ZWQgdmVyc2lvbiBvZiBzdWNoIEpTT04uXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbn0gVHJvbiB0cmFuc2FjdGlvblxuICAgKi9cbiAgcHJvdGVjdGVkIGZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbjogVHJhbnNhY3Rpb25SZWNlaXB0IHwgc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIGxldCB0eDtcbiAgICBpZiAodHlwZW9mIHJhd1RyYW5zYWN0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSBKU09OLnBhcnNlKHJhd1RyYW5zYWN0aW9uKTtcbiAgICAgIHR4ID0gbmV3IFRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcsIHRyYW5zYWN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHggPSBuZXcgVHJhbnNhY3Rpb24odGhpcy5fY29pbkNvbmZpZywgcmF3VHJhbnNhY3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gdHg7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIHNpZ25JbXBsZW1lbnRhdGlvbihrZXk6IEJhc2VLZXkpOiBUcmFuc2FjdGlvbiB7XG4gICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9uLmlucHV0cykge1xuICAgICAgdGhyb3cgbmV3IFNpZ25pbmdFcnJvcignVHJhbnNhY3Rpb24gaGFzIG5vIHNlbmRlcicpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy50cmFuc2FjdGlvbi5vdXRwdXRzKSB7XG4gICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdUcmFuc2FjdGlvbiBoYXMgbm8gcmVjZWl2ZXInKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYXBwbHlTaWduYXR1cmUoa2V5KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhcHBseVNpZ25hdHVyZShrZXk6IEJhc2VLZXkpOiBUcmFuc2FjdGlvbiB7XG4gICAgY29uc3Qgb2xkVHJhbnNhY3Rpb24gPSB0aGlzLnRyYW5zYWN0aW9uLnRvSnNvbigpO1xuICAgIC8vIFN0b3JlIHRoZSBvcmlnaW5hbCBzaWduYXR1cmVzIHRvIGNvbXBhcmUgdGhlbSB3aXRoIHRoZSBuZXcgb25lcyBpbiBhIGxhdGVyIHN0ZXAuIFNpZ25hdHVyZXNcbiAgICAvLyBjYW4gYmUgdW5kZWZpbmVkIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgdGhlIHRyYW5zYWN0aW9uIGlzIGJlaW5nIHNpZ25lZFxuICAgIGNvbnN0IG9sZFNpZ25hdHVyZUNvdW50ID0gb2xkVHJhbnNhY3Rpb24uc2lnbmF0dXJlID8gb2xkVHJhbnNhY3Rpb24uc2lnbmF0dXJlLmxlbmd0aCA6IDA7XG4gICAgbGV0IHNpZ25lZFRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvblJlY2VpcHQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcih7IHBydjoga2V5LmtleSB9KTtcbiAgICAgIC8vIFNpbmNlIHRoZSBrZXkgcGFpciB3YXMgZ2VuZXJhdGVkIHVzaW5nIGEgcHJpdmF0ZSBrZXksIGl0IHdpbGwgYWx3YXlzIGhhdmUgYSBwcnYgYXR0cmlidXRlLFxuICAgICAgLy8gaGVuY2UgaXQgaXMgc2FmZSB0byB1c2Ugbm9uLW51bGwgb3BlcmF0b3JcbiAgICAgIHNpZ25lZFRyYW5zYWN0aW9uID0gc2lnblRyYW5zYWN0aW9uKGtleVBhaXIuZ2V0S2V5cygpLnBydiEsIHRoaXMudHJhbnNhY3Rpb24udG9Kc29uKCkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ0ZhaWxlZCB0byBzaWduIHRyYW5zYWN0aW9uIHZpYSBoZWxwZXIuJyk7XG4gICAgfVxuXG4gICAgLy8gRW5zdXJlIHRoYXQgd2UgaGF2ZSBtb3JlIHNpZ25hdHVyZXMgdGhhbiB3aGF0IHdlIHN0YXJ0ZWQgd2l0aFxuICAgIGlmICghc2lnbmVkVHJhbnNhY3Rpb24uc2lnbmF0dXJlIHx8IG9sZFNpZ25hdHVyZUNvdW50ID49IHNpZ25lZFRyYW5zYWN0aW9uLnNpZ25hdHVyZS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ1RyYW5zYWN0aW9uIHNpZ25pbmcgZGlkIG5vdCByZXR1cm4gYW4gYWRkaXRpb25hbCBzaWduYXR1cmUuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbih0aGlzLl9jb2luQ29uZmlnLCBzaWduZWRUcmFuc2FjdGlvbik7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIC8vIFRoaXMgaXMgYSBuby1vcCBzaW5jZSBUcm9uIHRyYW5zYWN0aW9ucyBhcmUgYnVpbHQgZnJvbVxuICAgIGlmICghdGhpcy50cmFuc2FjdGlvbi5pZCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignQSB2YWxpZCB0cmFuc2FjdGlvbiBtdXN0IGhhdmUgYW4gaWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLnRyYW5zYWN0aW9uKTtcbiAgfVxuXG4gIGluaXRCdWlsZGVyKHR4OiBUcmFuc2FjdGlvblJlY2VpcHQgfCBzdHJpbmcpIHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uID0gdGhpcy5mcm9tSW1wbGVtZW50YXRpb24odHgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dGVuZCB0aGUgdmFsaWRpdHkgb2YgdGhpcyB0cmFuc2FjdGlvbiBieSB0aGUgZ2l2ZW4gYW1vdW50IG9mIHRpbWVcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGV4dGVuc2lvbk1zIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIGV4dGVuZCB0aGUgdmFsaWRUbyB0aW1lXG4gICAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gICAqL1xuICBleHRlbmRWYWxpZFRvKGV4dGVuc2lvbk1zOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLmV4dGVuZEV4cGlyYXRpb24oZXh0ZW5zaW9uTXMpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVmFsdWUodmFsdWU6IEJpZ051bWJlcik6IHZvaWQge1xuICAgIGlmICh2YWx1ZS5pc0xlc3NUaGFuT3JFcXVhbFRvKDApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZhbHVlIGNhbm5vdCBiZSBiZWxvdyB6ZXJvLicpO1xuICAgIH1cblxuICAgIC8vIG1heCBsb25nIGluIEphdmEgLSBhc3N1bWVkIHVwcGVyIGxpbWl0IGZvciBhIFRSWCB0cmFuc2FjdGlvblxuICAgIGlmICh2YWx1ZS5pc0dyZWF0ZXJUaGFuKG5ldyBCaWdOdW1iZXIoJzkyMjMzNzIwMzY4NTQ3NzU4MDcnKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVmFsdWUgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiBoYW5kbGVkIGJ5IHRoZSBqYXZhdHJvbiBub2RlLicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZUFkZHJlc3MoYWRkcmVzczogQWRkcmVzcyk6IHZvaWQge1xuICAgIC8vIGFzc3VtZXMgYSBiYXNlIDU4IGFkZHJlc3MgZm9yIG91ciBhZGRyZXNzZXNcbiAgICBpZiAoIWlzQmFzZTU4QWRkcmVzcyhhZGRyZXNzLmFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYWRkcmVzcy5hZGRyZXNzICsgJyBpcyBub3QgYSB2YWxpZCBiYXNlNTggYWRkcmVzcy4nKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIG1ldGhvZCB0byB2YWxpZGF0ZSB0aGUgcmVzb3VyY2UgdHlwZVxuICAgKiBAcGFyYW0gcmVzb3VyY2UgVGhlIHJlc291cmNlIHR5cGUgdG8gYmUgdmFsaWRhdGVkXG4gICAqL1xuICB2YWxpZGF0ZVJlc291cmNlKHJlc291cmNlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIVZBTElEX1JFU09VUkNFX1RZUEVTLmluY2x1ZGVzKHJlc291cmNlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHJlc291cmNlICsgJyBpcyBub3QgYSB2YWxpZCByZXNvdXJjZSB0eXBlLicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZUtleShrZXk6IEJhc2VLZXkpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgbmV3IEtleVBhaXIoeyBwcnY6IGtleS5rZXkgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBwcm92aWRlZCBrZXkgaXMgbm90IHZhbGlkJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoZSBjb250ZW50cyBvZiBhIHJhdyB0cmFuc2FjdGlvbi4gVGhlIHZhbGlkYXRpb25cbiAgICogcGhhc2UgaXMgdG8gY29tcGFyZSB0aGUgcmF3LWRhdGEtaGV4IHRvIHRoZSByYXctZGF0YSBvZiB0aGVcbiAgICogdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIFRoZSBjb250ZW50cyB0byBiZSB2YWxpZGF0ZWQgYXJlXG4gICAqIDEuIFRoZSB0cmFuc2FjdGlvbiBpZFxuICAgKiAyLiBUaGUgZXhwaXJhdGlvbiBkYXRlXG4gICAqIDMuIFRoZSB0aW1lc3RhbXBcbiAgICogNC4gVGhlIGNvbnRyYWN0XG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25SZWNlaXB0IHwgc3RyaW5nfSByYXdUcmFuc2FjdGlvbiBUaGUgcmF3IHRyYW5zYWN0aW9uIHRvIGJlIHZhbGlkYXRlZFxuICAgKi9cbiAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogVHJhbnNhY3Rpb25SZWNlaXB0IHwgc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gVE9ETzogVmFsaWRhdGlvbiBvZiBzaWduYXR1cmVcbiAgICBpZiAoIXJhd1RyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ1JhdyB0cmFuc2FjdGlvbiBpcyBlbXB0eScpO1xuICAgIH1cbiAgICBsZXQgY3VyclRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvblJlY2VpcHQ7XG4gICAgLy8gcmF3VHJhbnNhY3Rpb24gY2FuIGJlIGVpdGhlciBTdHJpbmdpZmllZCBKU09OIE9SXG4gICAgLy8gaXQgY2FuIGJlIGEgcmVndWxhciBKU09OIG9iamVjdCAobm90IHN0cmluZ2lmaWVkKS5cbiAgICBpZiAodHlwZW9mIHJhd1RyYW5zYWN0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY3VyclRyYW5zYWN0aW9uID0gSlNPTi5wYXJzZShyYXdUcmFuc2FjdGlvbik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZVRyYW5zYWN0aW9uRXJyb3IoJ1RoZXJlIHdhcyBlcnJvciBpbiBwYXJzaW5nIHRoZSBKU09OIHN0cmluZycpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXy5pc09iamVjdChyYXdUcmFuc2FjdGlvbikpIHtcbiAgICAgIGN1cnJUcmFuc2FjdGlvbiA9IHJhd1RyYW5zYWN0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ1RyYW5zYWN0aW9uIGlzIG5vdCBhbiBvYmplY3Qgb3Igc3RyaW5naWZpZWQganNvbicpO1xuICAgIH1cbiAgICBjb25zdCBkZWNvZGVkUmF3RGF0YUhleCA9IGRlY29kZVRyYW5zYWN0aW9uKGN1cnJUcmFuc2FjdGlvbi5yYXdfZGF0YV9oZXgpO1xuICAgIGlmICghY3VyclRyYW5zYWN0aW9uLnR4SUQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gSUQgaXMgZW1wdHknKTtcbiAgICB9XG4gICAgLy8gVmFsaWRhdGUgdGhlIHRyYW5zYWN0aW9uIElEIGZyb20gdGhlIHJhdyBkYXRhIGhleFxuICAgIGNvbnN0IGhleEJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGN1cnJUcmFuc2FjdGlvbi5yYXdfZGF0YV9oZXgsICdoZXgnKTtcbiAgICBjb25zdCBjdXJyVHhJRCA9IGNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShoZXhCdWZmZXIpLmRpZ2VzdCgnaGV4Jyk7XG4gICAgaWYgKGN1cnJUcmFuc2FjdGlvbi50eElEICE9PSBjdXJyVHhJRCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiBoYXMgbm90IGhhdmUgYSB2YWxpZCBpZCcpO1xuICAgIH1cbiAgICAvLyBWYWxpZGF0ZSB0aGUgZXhwaXJhdGlvbiB0aW1lIGZyb20gdGhlIHJhdy1kYXRhLWhleFxuICAgIGlmIChjdXJyVHJhbnNhY3Rpb24ucmF3X2RhdGEuZXhwaXJhdGlvbiAhPT0gZGVjb2RlZFJhd0RhdGFIZXguZXhwaXJhdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiBoYXMgbm90IGhhdmUgYSB2YWxpZCBleHBpcmF0aW9uJyk7XG4gICAgfVxuICAgIC8vIFZhbGlkYXRlIHRoZSB0aW1lc3RhbXAgZnJvbSB0aGUgcmF3LWRhdGEtaGV4XG4gICAgaWYgKGN1cnJUcmFuc2FjdGlvbi5yYXdfZGF0YS50aW1lc3RhbXAgIT09IGRlY29kZWRSYXdEYXRhSGV4LnRpbWVzdGFtcCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiBoYXMgbm90IGhhdmUgYSB2YWxpZCB0aW1ldGFtcCcpO1xuICAgIH1cbiAgICAvLyBUcmFuc2FjdGlvbiBjb250cmFjdCBtdXN0IGV4aXN0XG4gICAgaWYgKCFjdXJyVHJhbnNhY3Rpb24ucmF3X2RhdGEuY29udHJhY3QpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gY29udHJhY3RzIGFyZSBlbXB0eScpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGhleEJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHRyYW5zYWN0aW9uLnRvSnNvbigpLnJhd19kYXRhX2hleCwgJ2hleCcpO1xuICAgIGNvbnN0IHR4SWQgPSBjcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoaGV4QnVmZmVyKS5kaWdlc3QoJ2hleCcpO1xuICAgIGlmICh0cmFuc2FjdGlvbi5pZCAhPT0gdHhJZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKHRyYW5zYWN0aW9uLmlkICsgJyBpcyBub3QgYSB2YWxpZCB0cmFuc2FjdGlvbiBpZC4gRXhwZWN0aW5nOiAnICsgdHhJZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoZSBleHBpcmF0aW9uIHRpbWUgb2YgdGhlIHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBUaGUgZXhwaXJhdGlvbiB0aW1lIGluIG1pbGxpc2Vjb25kc1xuICAgKiBAdGhyb3dzIHtJbnZhbGlkUGFyYW1ldGVyVmFsdWVFcnJvcn0gSWYgdGhlIGV4cGlyYXRpb24gdGltZSBpcyBpbnZhbGlkXG4gICAqL1xuICB2YWxpZGF0ZUV4cGlyYXRpb25UaW1lKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUgPCB0aGlzLl90aW1lc3RhbXApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkUGFyYW1ldGVyVmFsdWVFcnJvcignRXhwaXJhdGlvbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB0aW1lc3RhbXAnKTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgPCBEYXRlLm5vdygpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFBhcmFtZXRlclZhbHVlRXJyb3IoJ0V4cGlyYXRpb24gbXVzdCBiZSBncmVhdGVyIHRoYW4gY3VycmVudCB0aW1lJyk7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlIC0gdGhpcy5fdGltZXN0YW1wID4gVFJBTlNBQ1RJT05fTUFYX0VYUElSQVRJT04pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkUGFyYW1ldGVyVmFsdWVFcnJvcignRXhwaXJhdGlvbiBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4gb25lIGRheScpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,65 @@
1
+ import { TransactionType, BaseKey } from '@bitgo-beta/sdk-core';
2
+ import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
3
+ import { TransactionBuilder } from './transactionBuilder';
4
+ import { Transaction } from './transaction';
5
+ import { TransactionReceipt, UnfreezeBalanceV2Contract } from './iface';
6
+ export declare class UnfreezeBalanceTxBuilder extends TransactionBuilder {
7
+ protected _signingKeys: BaseKey[];
8
+ private _unfreezeBalance;
9
+ private _resource;
10
+ constructor(_coinConfig: Readonly<CoinConfig>);
11
+ /** @inheritdoc */
12
+ protected get transactionType(): TransactionType;
13
+ /**
14
+ * Set the unfrozen balance amount
15
+ *
16
+ * @param amount amount in TRX to unfreeze
17
+ * @returns the builder with the new parameter set
18
+ */
19
+ setUnfreezeBalance(amount: string): this;
20
+ /**
21
+ * Set the resource type
22
+ *
23
+ * @param resource resource type to unfreeze
24
+ * @returns the builder with the new parameter set
25
+ */
26
+ setResource(resource: string): this;
27
+ /** @inheritdoc */
28
+ extendValidTo(extensionMs: number): void;
29
+ initBuilder(rawTransaction: TransactionReceipt | string): this;
30
+ /**
31
+ * Initialize the freeze contract call specific data
32
+ *
33
+ * @param {UnfreezeBalanceV2Contract} unfreezeContractCall object with freeze txn data
34
+ */
35
+ protected initUnfreezeContractCall(unfreezeContractCall: UnfreezeBalanceV2Contract): void;
36
+ protected buildImplementation(): Promise<Transaction>;
37
+ /**
38
+ * Helper method to create the freeze balance transaction
39
+ */
40
+ private createUnfreezeBalanceTransaction;
41
+ /**
42
+ * Helper method to get the unfreeze balance transaction raw data hex
43
+ *
44
+ * @returns {string} the freeze balance transaction raw data hex
45
+ */
46
+ private getUnfreezeRawDataHex;
47
+ /** @inheritdoc */
48
+ protected signImplementation(key: BaseKey): Transaction;
49
+ private applySignatures;
50
+ /**
51
+ * Validates the transaction
52
+ *
53
+ * @param {Transaction} transaction - The transaction to validate
54
+ * @throws {BuildTransactionError} when the transaction is invalid
55
+ */
56
+ validateTransaction(transaction: Transaction): void;
57
+ /**
58
+ * Validates if the transaction is a valid unfreeze transaction
59
+ *
60
+ * @param {TransactionReceipt} transaction - The transaction to validate
61
+ * @throws {BuildTransactionError} when the transaction is invalid
62
+ */
63
+ private validateFreezeTransactionFields;
64
+ }
65
+ //# sourceMappingURL=unfreezeBalanceTxBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unfreezeBalanceTxBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/unfreezeBalanceTxBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,OAAO,EAA+D,MAAM,sBAAsB,CAAC;AAC7H,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC;AAYxE,qBAAa,wBAAyB,SAAQ,kBAAkB;IAC9D,SAAS,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC;IAClC,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,SAAS,CAAS;gBAEd,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAM7C,kBAAkB;IAClB,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED;;;;;OAKG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAKxC;;;;;OAKG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMnC,kBAAkB;IAClB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAoBxC,WAAW,CAAC,cAAc,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI;IAiB9D;;;;OAIG;IACH,SAAS,CAAC,wBAAwB,CAAC,oBAAoB,EAAE,yBAAyB,GAAG,IAAI;cAezE,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAc3D;;OAEG;IACH,OAAO,CAAC,gCAAgC;IAqBxC;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IA0B7B,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;IAUvD,OAAO,CAAC,eAAe;IAQvB;;;;;OAKG;IACH,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAInD;;;;;OAKG;IACH,OAAO,CAAC,+BAA+B;CAiBxC"}
@@ -0,0 +1,204 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UnfreezeBalanceTxBuilder = void 0;
4
+ const crypto_1 = require("crypto");
5
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
6
+ const transactionBuilder_1 = require("./transactionBuilder");
7
+ const transaction_1 = require("./transaction");
8
+ const utils_1 = require("./utils");
9
+ const tron_1 = require("../../resources/protobuf/tron");
10
+ var ContractType = tron_1.protocol.Transaction.Contract.ContractType;
11
+ class UnfreezeBalanceTxBuilder extends transactionBuilder_1.TransactionBuilder {
12
+ constructor(_coinConfig) {
13
+ super(_coinConfig);
14
+ this._signingKeys = [];
15
+ this.transaction = new transaction_1.Transaction(_coinConfig);
16
+ }
17
+ /** @inheritdoc */
18
+ get transactionType() {
19
+ return sdk_core_1.TransactionType.StakingDeactivate;
20
+ }
21
+ /**
22
+ * Set the unfrozen balance amount
23
+ *
24
+ * @param amount amount in TRX to unfreeze
25
+ * @returns the builder with the new parameter set
26
+ */
27
+ setUnfreezeBalance(amount) {
28
+ this._unfreezeBalance = amount;
29
+ return this;
30
+ }
31
+ /**
32
+ * Set the resource type
33
+ *
34
+ * @param resource resource type to unfreeze
35
+ * @returns the builder with the new parameter set
36
+ */
37
+ setResource(resource) {
38
+ this.validateResource(resource);
39
+ this._resource = resource;
40
+ return this;
41
+ }
42
+ /** @inheritdoc */
43
+ extendValidTo(extensionMs) {
44
+ if (this.transaction.signature && this.transaction.signature.length > 0) {
45
+ throw new sdk_core_1.ExtendTransactionError('Cannot extend a signed transaction');
46
+ }
47
+ if (extensionMs <= 0) {
48
+ throw new Error('Value cannot be below zero');
49
+ }
50
+ if (extensionMs > utils_1.TRANSACTION_MAX_EXPIRATION) {
51
+ throw new sdk_core_1.ExtendTransactionError('The expiration cannot be extended more than one year');
52
+ }
53
+ if (this._expiration) {
54
+ this._expiration = this._expiration + extensionMs;
55
+ }
56
+ else {
57
+ throw new Error('There is not expiration to extend');
58
+ }
59
+ }
60
+ initBuilder(rawTransaction) {
61
+ this.transaction = this.fromImplementation(rawTransaction);
62
+ this.transaction.setTransactionType(this.transactionType);
63
+ this.validateRawTransaction(rawTransaction);
64
+ const tx = this.fromImplementation(rawTransaction);
65
+ this.transaction = tx;
66
+ this._signingKeys = [];
67
+ const rawData = tx.toJson().raw_data;
68
+ this._refBlockBytes = rawData.ref_block_bytes;
69
+ this._refBlockHash = rawData.ref_block_hash;
70
+ this._expiration = rawData.expiration;
71
+ this._timestamp = rawData.timestamp;
72
+ const contractCall = rawData.contract[0];
73
+ this.initUnfreezeContractCall(contractCall);
74
+ return this;
75
+ }
76
+ /**
77
+ * Initialize the freeze contract call specific data
78
+ *
79
+ * @param {UnfreezeBalanceV2Contract} unfreezeContractCall object with freeze txn data
80
+ */
81
+ initUnfreezeContractCall(unfreezeContractCall) {
82
+ const { resource, owner_address, unfreeze_balance } = unfreezeContractCall.parameter.value;
83
+ if (owner_address) {
84
+ this.source({ address: (0, utils_1.getBase58AddressFromHex)(owner_address) });
85
+ }
86
+ if (resource) {
87
+ this.setResource(resource);
88
+ }
89
+ if (unfreeze_balance) {
90
+ this.setUnfreezeBalance(unfreeze_balance.toString());
91
+ }
92
+ }
93
+ async buildImplementation() {
94
+ this.createUnfreezeBalanceTransaction();
95
+ /** @inheritdoccreateTransaction */
96
+ // This method must be extended on child classes
97
+ if (this._signingKeys.length > 0) {
98
+ this.applySignatures();
99
+ }
100
+ if (!this.transaction.id) {
101
+ throw new sdk_core_1.BuildTransactionError('A valid transaction must have an id');
102
+ }
103
+ return Promise.resolve(this.transaction);
104
+ }
105
+ /**
106
+ * Helper method to create the freeze balance transaction
107
+ */
108
+ createUnfreezeBalanceTransaction() {
109
+ const rawDataHex = this.getUnfreezeRawDataHex();
110
+ const rawData = (0, utils_1.decodeTransaction)(rawDataHex);
111
+ const contract = rawData.contract[0];
112
+ const contractParameter = contract.parameter;
113
+ contractParameter.value.owner_address = this._ownerAddress.toLocaleLowerCase();
114
+ contractParameter.value.unfreeze_balance = Number(this._unfreezeBalance);
115
+ contractParameter.value.resource = this._resource;
116
+ contractParameter.type_url = 'type.googleapis.com/protocol.UnfreezeBalanceV2Contract';
117
+ contract.type = 'UnfreezeBalanceV2Contract';
118
+ const hexBuffer = Buffer.from(rawDataHex, 'hex');
119
+ const id = (0, crypto_1.createHash)('sha256').update(hexBuffer).digest('hex');
120
+ const txRecip = {
121
+ raw_data: rawData,
122
+ raw_data_hex: rawDataHex,
123
+ txID: id,
124
+ signature: this.transaction.signature,
125
+ };
126
+ this.transaction = new transaction_1.Transaction(this._coinConfig, txRecip);
127
+ }
128
+ /**
129
+ * Helper method to get the unfreeze balance transaction raw data hex
130
+ *
131
+ * @returns {string} the freeze balance transaction raw data hex
132
+ */
133
+ getUnfreezeRawDataHex() {
134
+ const rawContract = {
135
+ ownerAddress: (0, utils_1.getByteArrayFromHexAddress)(this._ownerAddress),
136
+ unfreezeBalance: this._unfreezeBalance,
137
+ resource: this._resource,
138
+ };
139
+ const unfreezeContract = tron_1.protocol.UnfreezeBalanceV2Contract.fromObject(rawContract);
140
+ const unfreezeContractBytes = tron_1.protocol.UnfreezeBalanceV2Contract.encode(unfreezeContract).finish();
141
+ const txContract = {
142
+ type: ContractType.UnfreezeBalanceV2Contract,
143
+ parameter: {
144
+ value: unfreezeContractBytes,
145
+ type_url: 'type.googleapis.com/protocol.UnfreezeBalanceV2Contract',
146
+ },
147
+ };
148
+ const raw = {
149
+ refBlockBytes: Buffer.from(this._refBlockBytes, 'hex'),
150
+ refBlockHash: Buffer.from(this._refBlockHash, 'hex'),
151
+ expiration: this._expiration || Date.now() + utils_1.TRANSACTION_DEFAULT_EXPIRATION,
152
+ timestamp: this._timestamp || Date.now(),
153
+ contract: [txContract],
154
+ };
155
+ const rawTx = tron_1.protocol.Transaction.raw.create(raw);
156
+ return Buffer.from(tron_1.protocol.Transaction.raw.encode(rawTx).finish()).toString('hex');
157
+ }
158
+ /** @inheritdoc */
159
+ signImplementation(key) {
160
+ if (this._signingKeys.some((signingKey) => signingKey.key === key.key)) {
161
+ throw new sdk_core_1.SigningError('Duplicated key');
162
+ }
163
+ this._signingKeys.push(key);
164
+ // We keep this return for compatibility but is not meant to be use
165
+ return this.transaction;
166
+ }
167
+ applySignatures() {
168
+ if (!this.transaction.inputs) {
169
+ throw new sdk_core_1.SigningError('Transaction has no inputs');
170
+ }
171
+ this._signingKeys.forEach((key) => this.applySignature(key));
172
+ }
173
+ /**
174
+ * Validates the transaction
175
+ *
176
+ * @param {Transaction} transaction - The transaction to validate
177
+ * @throws {BuildTransactionError} when the transaction is invalid
178
+ */
179
+ validateTransaction(transaction) {
180
+ this.validateFreezeTransactionFields();
181
+ }
182
+ /**
183
+ * Validates if the transaction is a valid unfreeze transaction
184
+ *
185
+ * @param {TransactionReceipt} transaction - The transaction to validate
186
+ * @throws {BuildTransactionError} when the transaction is invalid
187
+ */
188
+ validateFreezeTransactionFields() {
189
+ if (!this._unfreezeBalance) {
190
+ throw new sdk_core_1.BuildTransactionError('Missing parameter: unfreezeBalance');
191
+ }
192
+ if (!this._ownerAddress) {
193
+ throw new sdk_core_1.BuildTransactionError('Missing parameter: source');
194
+ }
195
+ if (!this._resource) {
196
+ throw new sdk_core_1.BuildTransactionError('Missing parameter: resource');
197
+ }
198
+ if (!this._refBlockBytes || !this._refBlockHash) {
199
+ throw new sdk_core_1.BuildTransactionError('Missing block reference information');
200
+ }
201
+ }
202
+ }
203
+ exports.UnfreezeBalanceTxBuilder = UnfreezeBalanceTxBuilder;
204
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5mcmVlemVCYWxhbmNlVHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi91bmZyZWV6ZUJhbGFuY2VUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQW9DO0FBQ3BDLG1EQUE2SDtBQUU3SCw2REFBMEQ7QUFDMUQsK0NBQTRDO0FBRTVDLG1DQU1pQjtBQUNqQix3REFBeUQ7QUFFekQsSUFBTyxZQUFZLEdBQUcsZUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO0FBRWpFLE1BQWEsd0JBQXlCLFNBQVEsdUNBQWtCO0lBSzlELFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSx5QkFBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBYyxlQUFlO1FBQzNCLE9BQU8sMEJBQWUsQ0FBQyxpQkFBaUIsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxrQkFBa0IsQ0FBQyxNQUFjO1FBQy9CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUM7UUFDL0IsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxXQUFXLENBQUMsUUFBZ0I7UUFDMUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO1FBQzFCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixhQUFhLENBQUMsV0FBbUI7UUFDL0IsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxN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QU0sSUFBSSxnQ0FBcUIsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQy9ELENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNoRCxNQUFNLElBQUksZ0NBQXFCLENBQUMscUNBQXFDLENBQUMsQ0FBQztRQUN6RSxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBMU5ELDREQTBOQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlLCBCYXNlS2V5LCBFeHRlbmRUcmFuc2FjdGlvbkVycm9yLCBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsIFNpZ25pbmdFcnJvciB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblJlY2VpcHQsIFVuZnJlZXplQmFsYW5jZVYyQ29udHJhY3QgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7XG4gIGRlY29kZVRyYW5zYWN0aW9uLFxuICBnZXRCeXRlQXJyYXlGcm9tSGV4QWRkcmVzcyxcbiAgZ2V0QmFzZTU4QWRkcmVzc0Zyb21IZXgsXG4gIFRSQU5TQUNUSU9OX01BWF9FWFBJUkFUSU9OLFxuICBUUkFOU0FDVElPTl9ERUZBVUxUX0VYUElSQVRJT04sXG59IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgcHJvdG9jb2wgfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvcHJvdG9idWYvdHJvbic7XG5cbmltcG9ydCBDb250cmFjdFR5cGUgPSBwcm90b2NvbC5UcmFuc2FjdGlvbi5Db250cmFjdC5Db250cmFjdFR5cGU7XG5cbmV4cG9ydCBjbGFzcyBVbmZyZWV6ZUJhbGFuY2VUeEJ1aWxkZXIgZXh0ZW5kcyBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwcm90ZWN0ZWQgX3NpZ25pbmdLZXlzOiBCYXNlS2V5W107XG4gIHByaXZhdGUgX3VuZnJlZXplQmFsYW5jZTogc3RyaW5nO1xuICBwcml2YXRlIF9yZXNvdXJjZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLl9zaWduaW5nS2V5cyA9IFtdO1xuICAgIHRoaXMudHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nRGVhY3RpdmF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHVuZnJvemVuIGJhbGFuY2UgYW1vdW50XG4gICAqXG4gICAqIEBwYXJhbSBhbW91bnQgYW1vdW50IGluIFRSWCB0byB1bmZyZWV6ZVxuICAgKiBAcmV0dXJucyB0aGUgYnVpbGRlciB3aXRoIHRoZSBuZXcgcGFyYW1ldGVyIHNldFxuICAgKi9cbiAgc2V0VW5mcmVlemVCYWxhbmNlKGFtb3VudDogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy5fdW5mcmVlemVCYWxhbmNlID0gYW1vdW50O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgcmVzb3VyY2UgdHlwZVxuICAgKlxuICAgKiBAcGFyYW0gcmVzb3VyY2UgcmVzb3VyY2UgdHlwZSB0byB1bmZyZWV6ZVxuICAgKiBAcmV0dXJucyB0aGUgYnVpbGRlciB3aXRoIHRoZSBuZXcgcGFyYW1ldGVyIHNldFxuICAgKi9cbiAgc2V0UmVzb3VyY2UocmVzb3VyY2U6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVSZXNvdXJjZShyZXNvdXJjZSk7XG4gICAgdGhpcy5fcmVzb3VyY2UgPSByZXNvdXJjZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBleHRlbmRWYWxpZFRvKGV4dGVuc2lvbk1zOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50cmFuc2FjdGlvbi5zaWduYXR1cmUgJiYgdGhpcy50cmFuc2FjdGlvbi5zaWduYXR1cmUubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEV4dGVuZFRyYW5zYWN0aW9uRXJyb3IoJ0Nhbm5vdCBleHRlbmQgYSBzaWduZWQgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICBpZiAoZXh0ZW5zaW9uTXMgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdWYWx1ZSBjYW5ub3QgYmUgYmVsb3cgemVybycpO1xuICAgIH1cblxuICAgIGlmIChleHRlbnNpb25NcyA+IFRSQU5TQUNUSU9OX01BWF9FWFBJUkFUSU9OKSB7XG4gICAgICB0aHJvdyBuZXcgRXh0ZW5kVHJhbnNhY3Rpb25FcnJvcignVGhlIGV4cGlyYXRpb24gY2Fubm90IGJlIGV4dGVuZGVkIG1vcmUgdGhhbiBvbmUgeWVhcicpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9leHBpcmF0aW9uKSB7XG4gICAgICB0aGlzLl9leHBpcmF0aW9uID0gdGhpcy5fZXhwaXJhdGlvbiArIGV4dGVuc2lvbk1zO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIG5vdCBleHBpcmF0aW9uIHRvIGV4dGVuZCcpO1xuICAgIH1cbiAgfVxuXG4gIGluaXRCdWlsZGVyKHJhd1RyYW5zYWN0aW9uOiBUcmFuc2FjdGlvblJlY2VpcHQgfCBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uID0gdGhpcy5mcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb24pO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uc2V0VHJhbnNhY3Rpb25UeXBlKHRoaXMudHJhbnNhY3Rpb25UeXBlKTtcbiAgICB0aGlzLnZhbGlkYXRlUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb24pO1xuICAgIGNvbnN0IHR4ID0gdGhpcy5mcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb24pO1xuICAgIHRoaXMudHJhbnNhY3Rpb24gPSB0eDtcbiAgICB0aGlzLl9zaWduaW5nS2V5cyA9IFtdO1xuICAgIGNvbnN0IHJhd0RhdGEgPSB0eC50b0pzb24oKS5yYXdfZGF0YTtcbiAgICB0aGlzLl9yZWZCbG9ja0J5dGVzID0gcmF3RGF0YS5yZWZfYmxvY2tfYnl0ZXM7XG4gICAgdGhpcy5fcmVmQmxvY2tIYXNoID0gcmF3RGF0YS5yZWZfYmxvY2tfaGFzaDtcbiAgICB0aGlzLl9leHBpcmF0aW9uID0gcmF3RGF0YS5leHBpcmF0aW9uO1xuICAgIHRoaXMuX3RpbWVzdGFtcCA9IHJhd0RhdGEudGltZXN0YW1wO1xuICAgIGNvbnN0IGNvbnRyYWN0Q2FsbCA9IHJhd0RhdGEuY29udHJhY3RbMF0gYXMgVW5mcmVlemVCYWxhbmNlVjJDb250cmFjdDtcbiAgICB0aGlzLmluaXRVbmZyZWV6ZUNvbnRyYWN0Q2FsbChjb250cmFjdENhbGwpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIGZyZWV6ZSBjb250cmFjdCBjYWxsIHNwZWNpZmljIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHtVbmZyZWV6ZUJhbGFuY2VWMkNvbnRyYWN0fSB1bmZyZWV6ZUNvbnRyYWN0Q2FsbCBvYmplY3Qgd2l0aCBmcmVlemUgdHhuIGRhdGFcbiAgICovXG4gIHByb3RlY3RlZCBpbml0VW5mcmVlemVDb250cmFjdENhbGwodW5mcmVlemVDb250cmFjdENhbGw6IFVuZnJlZXplQmFsYW5jZVYyQ29udHJhY3QpOiB2b2lkIHtcbiAgICBjb25zdCB7IHJlc291cmNlLCBvd25lcl9hZGRyZXNzLCB1bmZyZWV6ZV9iYWxhbmNlIH0gPSB1bmZyZWV6ZUNvbnRyYWN0Q2FsbC5wYXJhbWV0ZXIudmFsdWU7XG4gICAgaWYgKG93bmVyX2FkZHJlc3MpIHtcbiAgICAgIHRoaXMuc291cmNlKHsgYWRkcmVzczogZ2V0QmFzZTU4QWRkcmVzc0Zyb21IZXgob3duZXJfYWRkcmVzcykgfSk7XG4gICAgfVxuXG4gICAgaWYgKHJlc291cmNlKSB7XG4gICAgICB0aGlzLnNldFJlc291cmNlKHJlc291cmNlKTtcbiAgICB9XG5cbiAgICBpZiAodW5mcmVlemVfYmFsYW5jZSkge1xuICAgICAgdGhpcy5zZXRVbmZyZWV6ZUJhbGFuY2UodW5mcmVlemVfYmFsYW5jZS50b1N0cmluZygpKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRJbXBsZW1lbnRhdGlvbigpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgdGhpcy5jcmVhdGVVbmZyZWV6ZUJhbGFuY2VUcmFuc2FjdGlvbigpO1xuICAgIC8qKiBAaW5oZXJpdGRvY2NyZWF0ZVRyYW5zYWN0aW9uICovXG4gICAgLy8gVGhpcyBtZXRob2QgbXVzdCBiZSBleHRlbmRlZCBvbiBjaGlsZCBjbGFzc2VzXG4gICAgaWYgKHRoaXMuX3NpZ25pbmdLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuYXBwbHlTaWduYXR1cmVzKCk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9uLmlkKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdBIHZhbGlkIHRyYW5zYWN0aW9uIG11c3QgaGF2ZSBhbiBpZCcpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMudHJhbnNhY3Rpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBtZXRob2QgdG8gY3JlYXRlIHRoZSBmcmVlemUgYmFsYW5jZSB0cmFuc2FjdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVVbmZyZWV6ZUJhbGFuY2VUcmFuc2FjdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCByYXdEYXRhSGV4ID0gdGhpcy5nZXRVbmZyZWV6ZVJhd0RhdGFIZXgoKTtcbiAgICBjb25zdCByYXdEYXRhID0gZGVjb2RlVHJhbnNhY3Rpb24ocmF3RGF0YUhleCk7XG4gICAgY29uc3QgY29udHJhY3QgPSByYXdEYXRhLmNvbnRyYWN0WzBdIGFzIFVuZnJlZXplQmFsYW5jZVYyQ29udHJhY3Q7XG4gICAgY29uc3QgY29udHJhY3RQYXJhbWV0ZXIgPSBjb250cmFjdC5wYXJhbWV0ZXI7XG4gICAgY29udHJhY3RQYXJhbWV0ZXIudmFsdWUub3duZXJfYWRkcmVzcyA9IHRoaXMuX293bmVyQWRkcmVzcy50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIGNvbnRyYWN0UGFyYW1ldGVyLnZhbHVlLnVuZnJlZXplX2JhbGFuY2UgPSBOdW1iZXIodGhpcy5fdW5mcmVlemVCYWxhbmNlKTtcbiAgICBjb250cmFjdFBhcmFtZXRlci52YWx1ZS5yZXNvdXJjZSA9IHRoaXMuX3Jlc291cmNlO1xuICAgIGNvbnRyYWN0UGFyYW1ldGVyLnR5cGVfdXJsID0gJ3R5cGUuZ29vZ2xlYXBpcy5jb20vcHJvdG9jb2wuVW5mcmVlemVCYWxhbmNlVjJDb250cmFjdCc7XG4gICAgY29udHJhY3QudHlwZSA9ICdVbmZyZWV6ZUJhbGFuY2VWMkNvbnRyYWN0JztcbiAgICBjb25zdCBoZXhCdWZmZXIgPSBCdWZmZXIuZnJvbShyYXdEYXRhSGV4LCAnaGV4Jyk7XG4gICAgY29uc3QgaWQgPSBjcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoaGV4QnVmZmVyKS5kaWdlc3QoJ2hleCcpO1xuICAgIGNvbnN0IHR4UmVjaXA6IFRyYW5zYWN0aW9uUmVjZWlwdCA9IHtcbiAgICAgIHJhd19kYXRhOiByYXdEYXRhLFxuICAgICAgcmF3X2RhdGFfaGV4OiByYXdEYXRhSGV4LFxuICAgICAgdHhJRDogaWQsXG4gICAgICBzaWduYXR1cmU6IHRoaXMudHJhbnNhY3Rpb24uc2lnbmF0dXJlLFxuICAgIH07XG4gICAgdGhpcy50cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbih0aGlzLl9jb2luQ29uZmlnLCB0eFJlY2lwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgbWV0aG9kIHRvIGdldCB0aGUgdW5mcmVlemUgYmFsYW5jZSB0cmFuc2FjdGlvbiByYXcgZGF0YSBoZXhcbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gdGhlIGZyZWV6ZSBiYWxhbmNlIHRyYW5zYWN0aW9uIHJhdyBkYXRhIGhleFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRVbmZyZWV6ZVJhd0RhdGFIZXgoKTogc3RyaW5nIHtcbiAgICBjb25zdCByYXdDb250cmFjdCA9IHtcbiAgICAgIG93bmVyQWRkcmVzczogZ2V0Qnl0ZUFycmF5RnJvbUhleEFkZHJlc3ModGhpcy5fb3duZXJBZGRyZXNzKSxcbiAgICAgIHVuZnJlZXplQmFsYW5jZTogdGhpcy5fdW5mcmVlemVCYWxhbmNlLFxuICAgICAgcmVzb3VyY2U6IHRoaXMuX3Jlc291cmNlLFxuICAgIH07XG4gICAgY29uc3QgdW5mcmVlemVDb250cmFjdCA9IHByb3RvY29sLlVuZnJlZXplQmFsYW5jZVYyQ29udHJhY3QuZnJvbU9iamVjdChyYXdDb250cmFjdCk7XG4gICAgY29uc3QgdW5mcmVlemVDb250cmFjdEJ5dGVzID0gcHJvdG9jb2wuVW5mcmVlemVCYWxhbmNlVjJDb250cmFjdC5lbmNvZGUodW5mcmVlemVDb250cmFjdCkuZmluaXNoKCk7XG4gICAgY29uc3QgdHhDb250cmFjdCA9IHtcbiAgICAgIHR5cGU6IENvbnRyYWN0VHlwZS5VbmZyZWV6ZUJhbGFuY2VWMkNvbnRyYWN0LFxuICAgICAgcGFyYW1ldGVyOiB7XG4gICAgICAgIHZhbHVlOiB1bmZyZWV6ZUNvbnRyYWN0Qnl0ZXMsXG4gICAgICAgIHR5cGVfdXJsOiAndHlwZS5nb29nbGVhcGlzLmNvbS9wcm90b2NvbC5VbmZyZWV6ZUJhbGFuY2VWMkNvbnRyYWN0JyxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBjb25zdCByYXcgPSB7XG4gICAgICByZWZCbG9ja0J5dGVzOiBCdWZmZXIuZnJvbSh0aGlzLl9yZWZCbG9ja0J5dGVzLCAnaGV4JyksXG4gICAgICByZWZCbG9ja0hhc2g6IEJ1ZmZlci5mcm9tKHRoaXMuX3JlZkJsb2NrSGFzaCwgJ2hleCcpLFxuICAgICAgZXhwaXJhdGlvbjogdGhpcy5fZXhwaXJhdGlvbiB8fCBEYXRlLm5vdygpICsgVFJBTlNBQ1RJT05fREVGQVVMVF9FWFBJUkFUSU9OLFxuICAgICAgdGltZXN0YW1wOiB0aGlzLl90aW1lc3RhbXAgfHwgRGF0ZS5ub3coKSxcbiAgICAgIGNvbnRyYWN0OiBbdHhDb250cmFjdF0sXG4gICAgfTtcbiAgICBjb25zdCByYXdUeCA9IHByb3RvY29sLlRyYW5zYWN0aW9uLnJhdy5jcmVhdGUocmF3KTtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20ocHJvdG9jb2wuVHJhbnNhY3Rpb24ucmF3LmVuY29kZShyYXdUeCkuZmluaXNoKCkpLnRvU3RyaW5nKCdoZXgnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgc2lnbkltcGxlbWVudGF0aW9uKGtleTogQmFzZUtleSk6IFRyYW5zYWN0aW9uIHtcbiAgICBpZiAodGhpcy5fc2lnbmluZ0tleXMuc29tZSgoc2lnbmluZ0tleSkgPT4gc2lnbmluZ0tleS5rZXkgPT09IGtleS5rZXkpKSB7XG4gICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdEdXBsaWNhdGVkIGtleScpO1xuICAgIH1cbiAgICB0aGlzLl9zaWduaW5nS2V5cy5wdXNoKGtleSk7XG5cbiAgICAvLyBXZSBrZWVwIHRoaXMgcmV0dXJuIGZvciBjb21wYXRpYmlsaXR5IGJ1dCBpcyBub3QgbWVhbnQgdG8gYmUgdXNlXG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICBwcml2YXRlIGFwcGx5U2lnbmF0dXJlcygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb24uaW5wdXRzKSB7XG4gICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdUcmFuc2FjdGlvbiBoYXMgbm8gaW5wdXRzJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fc2lnbmluZ0tleXMuZm9yRWFjaCgoa2V5KSA9PiB0aGlzLmFwcGx5U2lnbmF0dXJlKGtleSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb24gLSBUaGUgdHJhbnNhY3Rpb24gdG8gdmFsaWRhdGVcbiAgICogQHRocm93cyB7QnVpbGRUcmFuc2FjdGlvbkVycm9yfSB3aGVuIHRoZSB0cmFuc2FjdGlvbiBpcyBpbnZhbGlkXG4gICAqL1xuICB2YWxpZGF0ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHRoaXMudmFsaWRhdGVGcmVlemVUcmFuc2FjdGlvbkZpZWxkcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBpZiB0aGUgdHJhbnNhY3Rpb24gaXMgYSB2YWxpZCB1bmZyZWV6ZSB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uUmVjZWlwdH0gdHJhbnNhY3Rpb24gLSBUaGUgdHJhbnNhY3Rpb24gdG8gdmFsaWRhdGVcbiAgICogQHRocm93cyB7QnVpbGRUcmFuc2FjdGlvbkVycm9yfSB3aGVuIHRoZSB0cmFuc2FjdGlvbiBpcyBpbnZhbGlkXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlRnJlZXplVHJhbnNhY3Rpb25GaWVsZHMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl91bmZyZWV6ZUJhbGFuY2UpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ01pc3NpbmcgcGFyYW1ldGVyOiB1bmZyZWV6ZUJhbGFuY2UnKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX293bmVyQWRkcmVzcykge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignTWlzc2luZyBwYXJhbWV0ZXI6IHNvdXJjZScpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fcmVzb3VyY2UpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ01pc3NpbmcgcGFyYW1ldGVyOiByZXNvdXJjZScpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fcmVmQmxvY2tCeXRlcyB8fCAhdGhpcy5fcmVmQmxvY2tIYXNoKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdNaXNzaW5nIGJsb2NrIHJlZmVyZW5jZSBpbmZvcm1hdGlvbicpO1xuICAgIH1cbiAgfVxufVxuIl19