@bitgo-beta/sdk-coin-hbar 2.0.73-alpha.207 → 2.0.73-alpha.208
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +15 -1
- package/dist/test/unit/transactionBuilder/coinTransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/coinTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/coinTransferBuilder.js +128 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,eAAe,EAA4C,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAM3H,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,MAAM,EAAa,MAAM,SAAS,CAAC;AAE5C,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAG7B,qBAAa,WAAY,SAAQ,eAAe;IAC9C,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,OAAO,CAAwB;IACvC,SAAS,CAAC,KAAK,EAAE,eAAe,CAAC;gBAErB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,kBAAkB;IAClB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAIxB,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAU3C;;;;;OAKG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI;IAWnD,kBAAkB;IAClB,iBAAiB,IAAI,MAAM;IAK3B;;;;OAIG;IACH,kBAAkB,CAAC,cAAc,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI;IAmB7D,kBAAkB;IAClB,MAAM,IAAI,MAAM;IAwChB;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;
|
|
1
|
+
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,eAAe,EAA4C,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAM3H,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,MAAM,EAAa,MAAM,SAAS,CAAC;AAE5C,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAG7B,qBAAa,WAAY,SAAQ,eAAe;IAC9C,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,OAAO,CAAwB;IACvC,SAAS,CAAC,KAAK,EAAE,eAAe,CAAC;gBAErB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,kBAAkB;IAClB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAIxB,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAU3C;;;;;OAKG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI;IAWnD,kBAAkB;IAClB,iBAAiB,IAAI,MAAM;IAK3B;;;;OAIG;IACH,kBAAkB,CAAC,cAAc,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI;IAmB7D,kBAAkB;IAClB,MAAM,IAAI,MAAM;IAwChB;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;IA8CvB;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAgB5B;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB;IAS/B,IAAI,MAAM,IAAI,KAAK,CAAC,eAAe,CAElC;IAED,IAAI,QAAQ,IAAI,KAAK,CAAC,WAAW,CAEhC;IAED;;;;OAIG;IACH,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,WAAW,GAAG,IAAI;IAMjC;;;;OAIG;IACH,kBAAkB,CAAC,eAAe,EAAE,eAAe,GAAG,IAAI;IAI1D;;;OAGG;IACH,sBAAsB,IAAI,IAAI;IAY9B;;;;OAIG;IACH,oBAAoB,IAAI,IAAI;IAqD5B;;;;OAIG;IACH,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAMlC;;;;OAIG;IACH,YAAY,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;IAehC;;;;OAIG;IACH,SAAS,IAAI,MAAM;IAYnB;;;;;;OAMG;IACH,OAAO,CAAC,MAAM;IAOd;;;;;OAKG;IACH,GAAG,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM;CAG/B"}
|
|
@@ -170,6 +170,20 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
170
170
|
});
|
|
171
171
|
}
|
|
172
172
|
});
|
|
173
|
+
// Handle self-transfer: when sender == recipient, the positive entry is filtered out above
|
|
174
|
+
// because its accountID matches the sender. Fall back to including it as the recipient.
|
|
175
|
+
if (transferData.length === 0 && transfers.length > 0) {
|
|
176
|
+
const selfTransferEntry = transfers.find((t) => long_1.default.fromValue(t.amount).isPositive());
|
|
177
|
+
if (selfTransferEntry) {
|
|
178
|
+
transferData.push({
|
|
179
|
+
address: (0, utils_1.stringifyAccountId)(selfTransferEntry.accountID),
|
|
180
|
+
amount: long_1.default.fromValue(selfTransferEntry.amount).toString(),
|
|
181
|
+
...(tokenTransfers.length && {
|
|
182
|
+
tokenName: tokenName,
|
|
183
|
+
}),
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
}
|
|
173
187
|
return {
|
|
174
188
|
...(tokenTransfers.length && {
|
|
175
189
|
tokenName: tokenName,
|
|
@@ -367,4 +381,4 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
367
381
|
}
|
|
368
382
|
}
|
|
369
383
|
exports.Transaction = Transaction;
|
|
370
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLG1EQUEySDtBQUMzSCw4Q0FBeUM7QUFDekMsZ0VBQXFDO0FBRXJDLGdEQUFrQztBQUNsQyxnREFBd0I7QUFDeEIsNENBQXlDO0FBRXpDLG1DQUEwRztBQUUxRywyQ0FBcUQ7QUFFckQsTUFBYSxXQUFZLFNBQVEsMEJBQWU7SUFLOUMsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixPQUFPLENBQUMsR0FBWTtRQUNsQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQWdCO1FBQ3pCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNkLE1BQU0sSUFBSSx1QkFBWSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLElBQUEsdUJBQVksRUFBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUEsZ0JBQUssRUFBQyxTQUFTLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxZQUFZLENBQUMsU0FBaUIsRUFBRSxHQUFZ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LENBQUM7UUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxTQUFTO1FBQ1AsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFDRCxNQUFNLFNBQVMsR0FBRyxJQUFJLGFBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ2hELFNBQVMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDekMsU0FBUyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQztRQUUvQyxNQUFNLE9BQU8sR0FBRyxhQUFLLENBQUMsaUJBQWlCLENBQUM7UUFDeEMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLE1BQU0sQ0FDWixHQUFNLEVBQ04sT0FBbUM7UUFFbkMsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEdBQUcsQ0FBQyxLQUFpQjtRQUNuQixPQUFPLElBQUEsZ0JBQUssRUFBQyxJQUFBLGFBQUksRUFBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzVCLENBQUM7Q0FDRjtBQXhXRCxrQ0F3V0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBCYXNlS2V5LCBCYXNlVHJhbnNhY3Rpb24sIEVudHJ5LCBTaWduaW5nRXJyb3IsIHRvSGV4LCB0b1VpbnQ4QXJyYXksIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGhhc2ggfSBmcm9tICdAc3RhYmxlbGliL3NoYTM4NCc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBXcml0ZXIgfSBmcm9tICdwcm90b2J1ZmpzJztcbmltcG9ydCAqIGFzIG5hY2wgZnJvbSAndHdlZXRuYWNsJztcbmltcG9ydCBMb25nIGZyb20gJ2xvbmcnO1xuaW1wb3J0IHsgcHJvdG8gfSBmcm9tICdAaGFzaGdyYXBoL3Byb3RvJztcbmltcG9ydCB7IFR4RGF0YSwgUmVjaXBpZW50IH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBzdHJpbmdpZnlBY2NvdW50SWQsIHN0cmluZ2lmeVR4VGltZSwgc3RyaW5naWZ5VG9rZW5JZCwgZ2V0SGVkZXJhVG9rZW5OYW1lRnJvbUlkIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBLZXlQYWlyIH0gZnJvbSAnLi8nO1xuaW1wb3J0IHsgSGVkZXJhVHJhbnNhY3Rpb25UeXBlcyB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uIHtcbiAgcHJpdmF0ZSBfaGVkZXJhVHg6IHByb3RvLlRyYW5zYWN0aW9uO1xuICBwcml2YXRlIF90eEJvZHk6IHByb3RvLlRyYW5zYWN0aW9uQm9keTtcbiAgcHJvdGVjdGVkIF90eXBlOiBUcmFuc2FjdGlvblR5cGU7XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGNhblNpZ24oa2V5OiBCYXNlS2V5KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyBzaWduKGtleVBhaXI6IEtleVBhaXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBrZXlzID0ga2V5UGFpci5nZXRLZXlzKHRydWUpO1xuICAgIGlmICgha2V5cy5wcnYpIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ01pc3NpbmcgcHJpdmF0ZSBrZXknKTtcbiAgICB9XG4gICAgY29uc3Qgc2VjcmV0S2V5ID0gdG9VaW50OEFycmF5KGtleXMucHJ2ICsga2V5cy5wdWIpO1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IG5hY2wuc2lnbi5kZXRhY2hlZCh0aGlzLl9oZWRlcmFUeC5ib2R5Qnl0ZXMsIHNlY3JldEtleSk7XG4gICAgdGhpcy5hZGRTaWduYXR1cmUodG9IZXgoc2lnbmF0dXJlKSwga2V5UGFpcik7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgc2lnbmF0dXJlIHRvIHRoaXMgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNpZ25hdHVyZSAtIFRoZSBzaWduYXR1cmUgdG8gYWRkLCBpbiBzdHJpbmcgaGV4IGZvcm1hdFxuICAgKiBAcGFyYW0ge0tleVBhaXJ9IGtleSAtIFRoZSBrZXkgb2YgdGhlIGtleSB0aGF0IGNyZWF0ZWQgdGhlIHNpZ25hdHVyZVxuICAgKi9cbiAgYWRkU2lnbmF0dXJlKHNpZ25hdHVyZTogc3RyaW5nLCBrZXk6IEtleVBhaXIpOiB2b2lkIHtcbiAgICBjb25zdCBzaWdQYWlyID0gbmV3IHByb3RvLlNpZ25hdHVyZVBhaXIoKTtcbiAgICBzaWdQYWlyLnB1YktleVByZWZpeCA9IHRvVWludDhBcnJheShrZXkuZ2V0S2V5cyh0cnVlKS5wdWIpO1xuICAgIHNpZ1BhaXIuZWQyNTUxOSA9IHRvVWludDhBcnJheShzaWduYXR1cmUpO1xuXG4gICAgY29uc3Qgc2lnTWFwID0gdGhpcy5faGVkZXJhVHguc2lnTWFwIHx8IG5ldyBwcm90by5TaWduYXR1cmVNYXAoKTtcbiAgICBzaWdNYXAuc2lnUGFpciEucHVzaChzaWdQYWlyKTtcbiAgICB0aGlzLl9oZWRlcmFUeC5zaWdNYXAgPSBzaWdNYXA7XG4gICAgdGhpcy5fc2lnbmF0dXJlcy5wdXNoKHNpZ25hdHVyZSk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdG9Ccm9hZGNhc3RGb3JtYXQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBlbmNvZGVyID0gcHJvdG8uVHJhbnNhY3Rpb247XG4gICAgcmV0dXJuIHRvSGV4KHRoaXMuZW5jb2RlKHRoaXMuX2hlZGVyYVR4LCBlbmNvZGVyKSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGlzIHRyYW5zYWN0aW9uIHBheWxvYWRcbiAgICpcbiAgICogQHBhcmFtIHJhd1RyYW5zYWN0aW9uXG4gICAqL1xuICBmcm9tUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb246IFVpbnQ4QXJyYXkgfCBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBidWZmZXIgPSB0eXBlb2YgcmF3VHJhbnNhY3Rpb24gPT09ICdzdHJpbmcnID8gdG9VaW50OEFycmF5KHJhd1RyYW5zYWN0aW9uKSA6IHJhd1RyYW5zYWN0aW9uO1xuICAgIHRoaXMuYm9keUJ5dGVzKGJ1ZmZlcik7XG4gICAgc3dpdGNoICh0aGlzLnR4Qm9keS5kYXRhKSB7XG4gICAgICBjYXNlIEhlZGVyYVRyYW5zYWN0aW9uVHlwZXMuVHJhbnNmZXI6XG4gICAgICAgIHRoaXMuc2V0VHJhbnNhY3Rpb25UeXBlKFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEhlZGVyYVRyYW5zYWN0aW9uVHlwZXMuQ3JlYXRlQWNjb3VudDpcbiAgICAgICAgdGhpcy5zZXRUcmFuc2FjdGlvblR5cGUoVHJhbnNhY3Rpb25UeXBlLldhbGxldEluaXRpYWxpemF0aW9uKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEhlZGVyYVRyYW5zYWN0aW9uVHlwZXMuVG9rZW5Bc3NvY2lhdGVUb0FjY291bnQ6XG4gICAgICAgIHRoaXMuc2V0VHJhbnNhY3Rpb25UeXBlKFRyYW5zYWN0aW9uVHlwZS5Bc3NvY2lhdGVkVG9rZW5BY2NvdW50SW5pdGlhbGl6YXRpb24pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgSGVkZXJhVHJhbnNhY3Rpb25UeXBlcy5BY2NvdW50VXBkYXRlOlxuICAgICAgICB0aGlzLnNldFRyYW5zYWN0aW9uVHlwZShUcmFuc2FjdGlvblR5cGUuQWNjb3VudFVwZGF0ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB0b0pzb24oKTogVHhEYXRhIHtcbiAgICBjb25zdCBbYWNjLCB0aW1lXSA9IHRoaXMuZ2V0VHhJZFBhcnRzKCk7XG4gICAgY29uc3QgcmVzdWx0OiBUeERhdGEgPSB7XG4gICAgICBpZDogYWNjICsgJ0AnICsgdGltZSxcbiAgICAgIGhhc2g6IHRoaXMuZ2V0VHhIYXNoKCksIC8vIFRPRE86IFVwZGF0ZSBvbmNlIGhlZGVyYS1zZGsgcmVsZWFzZSB0aGlzIGZ1bmN0aW9uYWxpdHkgQkdBLTI4NFxuICAgICAgZGF0YTogdG9IZXgodGhpcy5faGVkZXJhVHguYm9keUJ5dGVzKSxcbiAgICAgIGZlZTogbmV3IEJpZ051bWJlcih0aGlzLl90eEJvZHkudHJhbnNhY3Rpb25GZWUhLnRvU3RyaW5nKCkpLnRvTnVtYmVyKCksXG4gICAgICBmcm9tOiBhY2MsXG4gICAgICBzdGFydFRpbWU6IHRpbWUsXG4gICAgICB2YWxpZER1cmF0aW9uOiB0aGlzLl90eEJvZHkudHJhbnNhY3Rpb25WYWxpZER1cmF0aW9uIS5zZWNvbmRzIS50b1N0cmluZygpLFxuICAgICAgbm9kZTogc3RyaW5naWZ5QWNjb3VudElkKHRoaXMuX3R4Qm9keS5ub2RlQWNjb3VudElEISksXG4gICAgICBtZW1vOiB0aGlzLl90eEJvZHkubWVtbyxcbiAgICB9O1xuXG4gICAgc3dpdGNoICh0aGlzLl90eEJvZHkuZGF0YSkge1xuICAgICAgY2FzZSBIZWRlcmFUcmFuc2FjdGlvblR5cGVzLlRyYW5zZmVyOlxuICAgICAgICByZXN1bHQuaW5zdHJ1Y3Rpb25zRGF0YSA9IHtcbiAgICAgICAgICB0eXBlOiBIZWRlcmFUcmFuc2FjdGlvblR5cGVzLlRyYW5zZmVyLFxuICAgICAgICAgIHBhcmFtczogdGhpcy5nZXRUcmFuc2ZlckRhdGEoKSxcbiAgICAgICAgfTtcbiAgICAgICAgcmVzdWx0LnRvID0gcmVzdWx0Lmluc3RydWN0aW9uc0RhdGEucGFyYW1zLnJlY2lwaWVudHNbMF0uYWRkcmVzcztcbiAgICAgICAgcmVzdWx0LmFtb3VudCA9IHJlc3VsdC5pbnN0cnVjdGlvbnNEYXRhLnBhcmFtcy5yZWNpcGllbnRzWzBdLmFtb3VudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEhlZGVyYVRyYW5zYWN0aW9uVHlwZXMuVG9rZW5Bc3NvY2lhdGVUb0FjY291bnQ6XG4gICAgICAgIHJlc3VsdC5pbnN0cnVjdGlvbnNEYXRhID0ge1xuICAgICAgICAgIHR5cGU6IEhlZGVyYVRyYW5zYWN0aW9uVHlwZXMuVG9rZW5Bc3NvY2lhdGVUb0FjY291bnQsXG4gICAgICAgICAgcGFyYW1zOiB0aGlzLmdldEFjY291bnRBc3NvY2lhdGVEYXRhKCksXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBIZWRlcmFUcmFuc2FjdGlvblR5cGVzLkFjY291bnRVcGRhdGU6XG4gICAgICAgIHJlc3VsdC5pbnN0cnVjdGlvbnNEYXRhID0ge1xuICAgICAgICAgIHR5cGU6IEhlZGVyYVRyYW5zYWN0aW9uVHlwZXMuQWNjb3VudFVwZGF0ZSxcbiAgICAgICAgICBwYXJhbXM6IHRoaXMuZ2V0QWNjb3VudFVwZGF0ZURhdGEoKSxcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHJlY2lwaWVudCBhY2NvdW50IGFuZCB0aGUgYW1vdW50XG4gICAqIHRyYW5zZmVycmVkIG9uIHRoaXMgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHJldHVybnMgeyB0b2tlbk5hbWUsIFJlY2lwaWVudFtdfSBpcyBvYmplY3QgY29uc2lzdGluZyBvZiB0b2tlbk5hbWUgaWYgaXQncyBhIHRva2VuIHRyYW5zZmVyIGFuZCByZWNpcGllbnRzIGNvbnNpc3RpbmdcbiAgICogIHRoZSByZWNpcGllbnQgYWRkcmVzcywgdGhlIHRyYW5zZmVyIGFtb3VudCwgYW5kIHRoZSB0b2tlbiBuYW1lIGZvciB0b2tlbiB0cmFuc2ZlclxuICAgKi9cbiAgcHJpdmF0ZSBnZXRUcmFuc2ZlckRhdGEoKTogeyB0b2tlbk5hbWU/OiBzdHJpbmc7IHJlY2lwaWVudHM6IFJlY2lwaWVudFtdIH0ge1xuICAgIGNvbnN0IFthY2NdID0gdGhpcy5nZXRUeElkUGFydHMoKTtcbiAgICBjb25zdCB0cmFuc2ZlckRhdGE6IFJlY2lwaWVudFtdID0gW107XG4gICAgY29uc3QgdG9rZW5UcmFuc2ZlcnM6IHByb3RvLklUb2tlblRyYW5zZmVyTGlzdFtdID0gdGhpcy5fdHhCb2R5LmNyeXB0b1RyYW5zZmVyPy50b2tlblRyYW5zZmVycyB8fCBbXTtcbiAgICBjb25zdCB0cmFuc2ZlcnM6IHByb3RvLklBY2NvdW50QW1vdW50W10gPVxuICAgICAgdG9rZW5UcmFuc2ZlcnNbMF0/LnRyYW5zZmVycyB8fCB0aGlzLl90eEJvZHkuY3J5cHRvVHJhbnNmZXI/LnRyYW5zZmVycz8uYWNjb3VudEFtb3VudHMgfHwgW107XG4gICAgY29uc3QgdG9rZW5OYW1lID0gdG9rZW5UcmFuc2ZlcnMubGVuZ3RoXG4gICAgICA/IGdldEhlZGVyYVRva2VuTmFtZUZyb21JZChzdHJpbmdpZnlUb2tlbklkKHRva2VuVHJhbnNmZXJzWzBdLnRva2VuISkpPy5uYW1lXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHRyYW5zZmVycy5mb3JFYWNoKCh0cmFuc2ZlcikgPT4ge1xuICAgICAgY29uc3QgYW1vdW50ID0gTG9uZy5mcm9tVmFsdWUodHJhbnNmZXIuYW1vdW50ISk7XG4gICAgICBpZiAoYW1vdW50LmlzUG9zaXRpdmUoKSAmJiBzdHJpbmdpZnlBY2NvdW50SWQodHJhbnNmZXIuYWNjb3VudElEISkgIT09IGFjYykge1xuICAgICAgICB0cmFuc2ZlckRhdGEucHVzaCh7XG4gICAgICAgICAgYWRkcmVzczogc3RyaW5naWZ5QWNjb3VudElkKHRyYW5zZmVyLmFjY291bnRJRCEpLFxuICAgICAgICAgIGFtb3VudDogYW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgICAgLi4uKHRva2VuVHJhbnNmZXJzLmxlbmd0aCAmJiB7XG4gICAgICAgICAgICB0b2tlbk5hbWU6IHRva2VuTmFtZSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uKHRva2VuVHJhbnNmZXJzLmxlbmd0aCAmJiB7XG4gICAgICAgIHRva2VuTmFtZTogdG9rZW5OYW1lLFxuICAgICAgfSksXG4gICAgICByZWNpcGllbnRzOiB0cmFuc2ZlckRhdGEsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGFjY291bnQgdXBkYXRlIHN0YWtpbmcgZGF0YSBmcm9tIHRoaXMgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHJldHVybnMge29iamVjdH0gVGhlIGFjY291bnQgdXBkYXRlIHBhcmFtZXRlcnMgaW5jbHVkaW5nIHN0YWtlZE5vZGVJZCBhbmQgZGVjbGluZVJld2FyZFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRBY2NvdW50VXBkYXRlRGF0YSgpOiB7IGFjY291bnRJZDogc3RyaW5nOyBzdGFrZWROb2RlSWQ/OiBzdHJpbmc7IGRlY2xpbmVSZXdhcmQ/OiBib29sZWFuIH0ge1xuICAgIGNvbnN0IHVwZGF0ZUJvZHkgPSB0aGlzLl90eEJvZHkuY3J5cHRvVXBkYXRlQWNjb3VudCE7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFjY291bnRJZDogc3RyaW5naWZ5QWNjb3VudElkKHVwZGF0ZUJvZHkuYWNjb3VudElEVG9VcGRhdGUhKSxcbiAgICAgIC4uLih1cGRhdGVCb2R5LnN0YWtlZE5vZGVJZCAhPSBudWxsICYmIHtcbiAgICAgICAgc3Rha2VkTm9kZUlkOiBMb25nLmZyb21WYWx1ZSh1cGRhdGVCb2R5LnN0YWtlZE5vZGVJZCkudG9TdHJpbmcoKSxcbiAgICAgIH0pLFxuICAgICAgLi4uKHVwZGF0ZUJvZHkuZGVjbGluZVJld2FyZCAhPSBudWxsICYmIHtcbiAgICAgICAgZGVjbGluZVJld2FyZDpcbiAgICAgICAgICB0eXBlb2YgdXBkYXRlQm9keS5kZWNsaW5lUmV3YXJkID09PSAnYm9vbGVhbidcbiAgICAgICAgICAgID8gdXBkYXRlQm9keS5kZWNsaW5lUmV3YXJkXG4gICAgICAgICAgICA6ICh1cGRhdGVCb2R5LmRlY2xpbmVSZXdhcmQgYXMgeyB2YWx1ZTogYm9vbGVhbiB9KS52YWx1ZSxcbiAgICAgIH0pLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSByZWNpcGllbnQgYWNjb3VudCBhbmQgdGhlIGFtb3VudFxuICAgKiB0cmFuc2ZlcnJlZCBvbiB0aGlzIHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEByZXR1cm5zIHsgYWNjb3VudElkOiBzdHJpbmc7IHRva2VuTmFtZXNbXX0gaXMgYW4gb2JqZWN0IGNvbnNpc3Rpbmcgb2YgYWNjb3VudElkIGZvciB0aGUgdG9rZW4gb3duZXJcbiAgICogIGFuZCBsaXN0IG9mIHRva2VuTmFtZXMgdGhhdCB3aWxsIGJlIGVuYWJsZWRcbiAgICovXG4gIHByaXZhdGUgZ2V0QWNjb3VudEFzc29jaWF0ZURhdGEoKTogeyBhY2NvdW50SWQ6IHN0cmluZzsgdG9rZW5OYW1lczogc3RyaW5nW10gfSB7XG4gICAgY29uc3QgdG9rZW5zOiBwcm90by5JVG9rZW5JRFtdID0gdGhpcy5fdHhCb2R5LnRva2VuQXNzb2NpYXRlIS50b2tlbnMgfHwgW107XG4gICAgcmV0dXJuIHtcbiAgICAgIGFjY291bnRJZDogc3RyaW5naWZ5QWNjb3VudElkKHRoaXMuX3R4Qm9keS50b2tlbkFzc29jaWF0ZSEuYWNjb3VudCEpLFxuICAgICAgdG9rZW5OYW1lczogdG9rZW5zLm1hcCgodG9rZW46IHByb3RvLklUb2tlbklEKSA9PiBnZXRIZWRlcmFUb2tlbk5hbWVGcm9tSWQoc3RyaW5naWZ5VG9rZW5JZCh0b2tlbikpIS5uYW1lKSxcbiAgICB9O1xuICB9XG5cbiAgLy8gcmVnaW9uIGdldHRlcnMgJiBzZXR0ZXJzXG4gIGdldCB0eEJvZHkoKTogcHJvdG8uVHJhbnNhY3Rpb25Cb2R5IHtcbiAgICByZXR1cm4gdGhpcy5fdHhCb2R5O1xuICB9XG5cbiAgZ2V0IGhlZGVyYVR4KCk6IHByb3RvLlRyYW5zYWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5faGVkZXJhVHg7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGlzIHRyYW5zYWN0aW9uIGJvZHkgY29tcG9uZW50c1xuICAgKlxuICAgKiBAcGFyYW0ge3Byb3RvLlRyYW5zYWN0aW9ufSB0eCAtIEJvZHkgVHJhbnNhY3Rpb25cbiAgICovXG4gIGJvZHkodHg6IHByb3RvLlRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5fdHhCb2R5ID0gcHJvdG8uVHJhbnNhY3Rpb25Cb2R5LmRlY29kZSh0eC5ib2R5Qnl0ZXMpO1xuICAgIHRoaXMuX2hlZGVyYVR4ID0gdHg7XG4gICAgdGhpcy5sb2FkSW5wdXRzQW5kT3V0cHV0cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdHJhbnNhY3Rpb24gdHlwZVxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uVHlwZX0gdHJhbnNhY3Rpb25UeXBlIC0gVGhlIHRyYW5zYWN0aW9uIHR5cGUgdG8gYmUgc2V0XG4gICAqL1xuICBzZXRUcmFuc2FjdGlvblR5cGUodHJhbnNhY3Rpb25UeXBlOiBUcmFuc2FjdGlvblR5cGUpOiB2b2lkIHtcbiAgICB0aGlzLl90eXBlID0gdHJhbnNhY3Rpb25UeXBlO1xuICB9XG5cbiAgLyoqXG4gICAqIERlY29kZSBwcmV2aW91cyBzaWduYXR1cmVzIGZyb20gdGhlIGlubmVyIGhlZGVyYSB0cmFuc2FjdGlvblxuICAgKiBhbmQgc2F2ZSB0aGVtIGludG8gdGhlIGJhc2UgdHJhbnNhY3Rpb24gc2lnbmF0dXJlIGxpc3QuXG4gICAqL1xuICBsb2FkUHJldmlvdXNTaWduYXR1cmVzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9oZWRlcmFUeC5zaWdNYXAgJiYgdGhpcy5faGVkZXJhVHguc2lnTWFwLnNpZ1BhaXIpIHtcbiAgICAgIGNvbnN0IHNpZ1BhaXJzID0gdGhpcy5faGVkZXJhVHguc2lnTWFwLnNpZ1BhaXI7XG4gICAgICBzaWdQYWlycy5mb3JFYWNoKChzaWdQYWlyKSA9PiB7XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHNpZ1BhaXIuZWQyNTUxOTtcbiAgICAgICAgaWYgKHNpZ25hdHVyZSkge1xuICAgICAgICAgIHRoaXMuX3NpZ25hdHVyZXMucHVzaCh0b0hleChzaWduYXR1cmUpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgdGhlIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBvbiB0aGlzIHRyYW5zYWN0aW9uIHVzaW5nIHRoZSB0cmFuc2FjdGlvbiBqc29uXG4gICAqIGlmIHRoZXJlIGFyZSBvdXRwdXRzLiBGb3IgdHJhbnNhY3Rpb25zIHdpdGhvdXQgb3V0cHV0cyAoZS5nLiB3YWxsZXQgaW5pdGlhbGl6YXRpb25zKSxcbiAgICogdGhpcyBmdW5jdGlvbiB3aWxsIG5vdCBkbyBhbnl0aGluZ1xuICAgKi9cbiAgbG9hZElucHV0c0FuZE91dHB1dHMoKTogdm9pZCB7XG4gICAgY29uc3QgdHhKc29uID0gdGhpcy50b0pzb24oKTtcbiAgICBjb25zdCBpbnN0cnVjdGlvbiA9IHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhO1xuICAgIGNvbnN0IG91dHB1dHM6IEVudHJ5W10gPSBbXTtcbiAgICBjb25zdCBpbnB1dHM6IEVudHJ5W10gPSBbXTtcblxuICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24/LnR5cGUpIHtcbiAgICAgIGNhc2UgSGVkZXJhVHJhbnNhY3Rpb25UeXBlcy5UcmFuc2ZlcjpcbiAgICAgICAgbGV0IHRvdGFsQW1vdW50ID0gbmV3IEJpZ051bWJlcigwKTtcbiAgICAgICAgaW5zdHJ1Y3Rpb24ucGFyYW1zLnJlY2lwaWVudHMuZm9yRWFjaCgocmVjaXBpZW50KSA9PiB7XG4gICAgICAgICAgdG90YWxBbW91bnQgPSB0b3RhbEFtb3VudC5wbHVzKHJlY2lwaWVudC5hbW91bnQpO1xuICAgICAgICAgIG91dHB1dHMucHVzaCh7XG4gICAgICAgICAgICBhZGRyZXNzOiByZWNpcGllbnQuYWRkcmVzcyxcbiAgICAgICAgICAgIHZhbHVlOiByZWNpcGllbnQuYW1vdW50LFxuICAgICAgICAgICAgY29pbjogcmVjaXBpZW50LnRva2VuTmFtZSB8fCB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpbnB1dHMucHVzaCh7XG4gICAgICAgICAgYWRkcmVzczogdHhKc29uLmZyb20sXG4gICAgICAgICAgdmFsdWU6IHRvdGFsQW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgICAgY29pbjogaW5zdHJ1Y3Rpb24ucGFyYW1zLnRva2VuTmFtZSB8fCB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBIZWRlcmFUcmFuc2FjdGlvblR5cGVzLlRva2VuQXNzb2NpYXRlVG9BY2NvdW50OlxuICAgICAgICBpbnN0cnVjdGlvbi5wYXJhbXMudG9rZW5OYW1lcy5mb3JFYWNoKCh0b2tlbk5hbWUpID0+IHtcbiAgICAgICAgICBjb25zdCB0b2tlbkVudHJ5OiBFbnRyeSA9IHtcbiAgICAgICAgICAgIGFkZHJlc3M6IGluc3RydWN0aW9uLnBhcmFtcy5hY2NvdW50SWQsXG4gICAgICAgICAgICB2YWx1ZTogJzAnLFxuICAgICAgICAgICAgY29pbjogdG9rZW5OYW1lLFxuICAgICAgICAgIH07XG4gICAgICAgICAgaW5wdXRzLnB1c2godG9rZW5FbnRyeSk7XG4gICAgICAgICAgb3V0cHV0cy5wdXNoKHRva2VuRW50cnkpO1xuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgSGVkZXJhVHJhbnNhY3Rpb25UeXBlcy5BY2NvdW50VXBkYXRlOlxuICAgICAgICBpbnB1dHMucHVzaCh7XG4gICAgICAgICAgYWRkcmVzczogdHhKc29uLmZyb20sXG4gICAgICAgICAgdmFsdWU6ICcwJyxcbiAgICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICAgIH0pO1xuICAgICAgICBvdXRwdXRzLnB1c2goe1xuICAgICAgICAgIGFkZHJlc3M6IGluc3RydWN0aW9uLnBhcmFtcy5hY2NvdW50SWQsXG4gICAgICAgICAgdmFsdWU6ICcwJyxcbiAgICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgdGhpcy5faW5wdXRzID0gaW5wdXRzO1xuICAgIHRoaXMuX291dHB1dHMgPSBvdXRwdXRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhpcyB0cmFuc2FjdGlvbiBib2R5IGNvbXBvbmVudHNcbiAgICpcbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBieXRlcyAtIEVuY29kZWQgYm9keSB0cmFuc2FjdGlvblxuICAgKi9cbiAgYm9keUJ5dGVzKGJ5dGVzOiBVaW50OEFycmF5KTogdm9pZCB7XG4gICAgdGhpcy5ib2R5KHByb3RvLlRyYW5zYWN0aW9uLmRlY29kZShieXRlcykpO1xuICB9XG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8vIHJlZ2lvbiBoZWxwZXJzXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoaXMgaGVkZXJhIHRyYW5zYWN0aW9uIGlkIGNvbXBvbmVudHMgaW4gYSByZWFkYWJsZSBmb3JtYXRcbiAgICpcbiAgICogQHJldHVybnMge1tzdHJpbmcsIHN0cmluZ119IC0gVHJhbnNhY3Rpb24gaWQgcGFydHMgWzxhY2NvdW50IGlkPiwgPHN0YXJ0VGltZSBpbiBzZWNvbmRzPl1cbiAgICovXG4gIGdldFR4SWRQYXJ0cygpOiBbc3RyaW5nLCBzdHJpbmddIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLl90eEJvZHkgJiZcbiAgICAgIHRoaXMuX3R4Qm9keS50cmFuc2FjdGlvbklEICYmXG4gICAgICB0aGlzLl90eEJvZHkudHJhbnNhY3Rpb25JRC5hY2NvdW50SUQgJiZcbiAgICAgIHRoaXMuX3R4Qm9keS50cmFuc2FjdGlvbklELnRyYW5zYWN0aW9uVmFsaWRTdGFydFxuICAgICkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgc3RyaW5naWZ5QWNjb3VudElkKHRoaXMuX3R4Qm9keS50cmFuc2FjdGlvbklELmFjY291bnRJRCksXG4gICAgICAgIHN0cmluZ2lmeVR4VGltZSh0aGlzLl90eEJvZHkudHJhbnNhY3Rpb25JRC50cmFuc2FjdGlvblZhbGlkU3RhcnQpLFxuICAgICAgXTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHRyYW5zYWN0aW9uIGlkIGluZm9ybWF0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGlzIHRyYW5zYWN0aW9uIGhhc2hcbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgdHJhbnNhY3Rpb24gaGFzaFxuICAgKi9cbiAgZ2V0VHhIYXNoKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLl90eEJvZHkubm9kZUFjY291bnRJRCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHRyYW5zYWN0aW9uIG5vZGUgaWQnKTtcbiAgICB9XG4gICAgY29uc3QgX3NpZ25lZFR4ID0gbmV3IHByb3RvLlNpZ25lZFRyYW5zYWN0aW9uKCk7XG4gICAgX3NpZ25lZFR4LnNpZ01hcCA9IHRoaXMuX2hlZGVyYVR4LnNpZ01hcDtcbiAgICBfc2lnbmVkVHguYm9keUJ5dGVzID0gdGhpcy5faGVkZXJhVHguYm9keUJ5dGVzO1xuXG4gICAgY29uc3QgZW5jb2RlciA9IHByb3RvLlNpZ25lZFRyYW5zYWN0aW9uO1xuICAgIHJldHVybiB0aGlzLnNoYSh0aGlzLmVuY29kZShfc2lnbmVkVHgsIGVuY29kZXIpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmNvZGUgYW4gb2JqZWN0IHVzaW5nIHRoZSBnaXZlbiBlbmNvZGVyIGNsYXNzXG4gICAqXG4gICAqIEBwYXJhbSB7cHJvdG99IG9iaiAtIFRoZSBvYmplY3QgdG8gYmUgZW5jb2RlZCwgbXVzdCBiZSBpbiBwcm90byBuYW1lc3BhY2VcbiAgICogQHBhcmFtIGVuY29kZXIgLSBPYmplY3QgZW5jb2RlclxuICAgKiBAcmV0dXJucyB7VWludDhBcnJheX0gLSBFbmNvZGVkIG9iamVjdCBieXRlIGFycmF5XG4gICAqL1xuICBwcml2YXRlIGVuY29kZTxDdG9yRm4gZXh0ZW5kcyB7IG5ldyAoKTogVCB9LCBUIGV4dGVuZHMgeyBjb25zdHJ1Y3RvcjogQ3RvckZuIH0+KFxuICAgIG9iajogVCxcbiAgICBlbmNvZGVyOiB7IGVuY29kZShhcmc6IFQpOiBXcml0ZXIgfVxuICApOiBVaW50OEFycmF5IHtcbiAgICByZXR1cm4gZW5jb2Rlci5lbmNvZGUob2JqKS5maW5pc2goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc2hhLTM4NCBoYXNoXG4gICAqXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0gYnl0ZXMgLSBCeXRlcyB0byBiZSBoYXNoZWRcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgcmVzdWx0aW5nIGhhc2ggc3RyaW5nXG4gICAqL1xuICBzaGEoYnl0ZXM6IFVpbnQ4QXJyYXkpOiBzdHJpbmcge1xuICAgIHJldHVybiB0b0hleChoYXNoKGJ5dGVzKSk7XG4gIH1cbn1cbiJdfQ==
|
|
384
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLG1EQUEySDtBQUMzSCw4Q0FBeUM7QUFDekMsZ0VBQXFDO0FBRXJDLGdEQUFrQztBQUNsQyxnREFBd0I7QUFDeEIsNENBQXlDO0FBRXpDLG1DQUEwRztBQUUxRywyQ0FBcUQ7QUFFckQsTUFBYSxXQUFZLFNBQVEsMEJBQWU7SUFLOUMsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixPQUFPLENBQUMsR0FBWTtRQUNsQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQWdCO1FBQ3pCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNkLE1BQU0sSUFBSSx1QkFBWSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLElBQUEsdUJBQVksRUFBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUEsZ0JBQUssRUFBQyxTQUFTLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxZQUFZLENBQUMsU0FBaUIsRUFBRSxHQUFZ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SyxDQUFDLGlCQUFpQixDQUFDO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSyxNQUFNLENBQ1osR0FBTSxFQUNOLE9BQW1DO1FBRW5DLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxHQUFHLENBQUMsS0FBaUI7UUFDbkIsT0FBTyxJQUFBLGdCQUFLLEVBQUMsSUFBQSxhQUFJLEVBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM1QixDQUFDO0NBQ0Y7QUF2WEQsa0NBdVhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgQmFzZUtleSwgQmFzZVRyYW5zYWN0aW9uLCBFbnRyeSwgU2lnbmluZ0Vycm9yLCB0b0hleCwgdG9VaW50OEFycmF5LCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBoYXNoIH0gZnJvbSAnQHN0YWJsZWxpYi9zaGEzODQnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgV3JpdGVyIH0gZnJvbSAncHJvdG9idWZqcyc7XG5pbXBvcnQgKiBhcyBuYWNsIGZyb20gJ3R3ZWV0bmFjbCc7XG5pbXBvcnQgTG9uZyBmcm9tICdsb25nJztcbmltcG9ydCB7IHByb3RvIH0gZnJvbSAnQGhhc2hncmFwaC9wcm90byc7XG5pbXBvcnQgeyBUeERhdGEsIFJlY2lwaWVudCB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgc3RyaW5naWZ5QWNjb3VudElkLCBzdHJpbmdpZnlUeFRpbWUsIHN0cmluZ2lmeVRva2VuSWQsIGdldEhlZGVyYVRva2VuTmFtZUZyb21JZCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4vJztcbmltcG9ydCB7IEhlZGVyYVRyYW5zYWN0aW9uVHlwZXMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbiBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbiB7XG4gIHByaXZhdGUgX2hlZGVyYVR4OiBwcm90by5UcmFuc2FjdGlvbjtcbiAgcHJpdmF0ZSBfdHhCb2R5OiBwcm90by5UcmFuc2FjdGlvbkJvZHk7XG4gIHByb3RlY3RlZCBfdHlwZTogVHJhbnNhY3Rpb25UeXBlO1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBjYW5TaWduKGtleTogQmFzZUtleSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgc2lnbihrZXlQYWlyOiBLZXlQYWlyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qga2V5cyA9IGtleVBhaXIuZ2V0S2V5cyh0cnVlKTtcbiAgICBpZiAoIWtleXMucHJ2KSB7XG4gICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdNaXNzaW5nIHByaXZhdGUga2V5Jyk7XG4gICAgfVxuICAgIGNvbnN0IHNlY3JldEtleSA9IHRvVWludDhBcnJheShrZXlzLnBydiArIGtleXMucHViKTtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBuYWNsLnNpZ24uZGV0YWNoZWQodGhpcy5faGVkZXJhVHguYm9keUJ5dGVzLCBzZWNyZXRLZXkpO1xuICAgIHRoaXMuYWRkU2lnbmF0dXJlKHRvSGV4KHNpZ25hdHVyZSksIGtleVBhaXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHNpZ25hdHVyZSB0byB0aGlzIHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzaWduYXR1cmUgLSBUaGUgc2lnbmF0dXJlIHRvIGFkZCwgaW4gc3RyaW5nIGhleCBmb3JtYXRcbiAgICogQHBhcmFtIHtLZXlQYWlyfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBrZXkgdGhhdCBjcmVhdGVkIHRoZSBzaWduYXR1cmVcbiAgICovXG4gIGFkZFNpZ25hdHVyZShzaWduYXR1cmU6IHN0cmluZywga2V5OiBLZXlQYWlyKTogdm9pZCB7XG4gICAgY29uc3Qgc2lnUGFpciA9IG5ldyBwcm90by5TaWduYXR1cmVQYWlyKCk7XG4gICAgc2lnUGFpci5wdWJLZXlQcmVmaXggPSB0b1VpbnQ4QXJyYXkoa2V5LmdldEtleXModHJ1ZSkucHViKTtcbiAgICBzaWdQYWlyLmVkMjU1MTkgPSB0b1VpbnQ4QXJyYXkoc2lnbmF0dXJlKTtcblxuICAgIGNvbnN0IHNpZ01hcCA9IHRoaXMuX2hlZGVyYVR4LnNpZ01hcCB8fCBuZXcgcHJvdG8uU2lnbmF0dXJlTWFwKCk7XG4gICAgc2lnTWFwLnNpZ1BhaXIhLnB1c2goc2lnUGFpcik7XG4gICAgdGhpcy5faGVkZXJhVHguc2lnTWFwID0gc2lnTWFwO1xuICAgIHRoaXMuX3NpZ25hdHVyZXMucHVzaChzaWduYXR1cmUpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHRvQnJvYWRjYXN0Rm9ybWF0KCk6IHN0cmluZyB7XG4gICAgY29uc3QgZW5jb2RlciA9IHByb3RvLlRyYW5zYWN0aW9uO1xuICAgIHJldHVybiB0b0hleCh0aGlzLmVuY29kZSh0aGlzLl9oZWRlcmFUeCwgZW5jb2RlcikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhpcyB0cmFuc2FjdGlvbiBwYXlsb2FkXG4gICAqXG4gICAqIEBwYXJhbSByYXdUcmFuc2FjdGlvblxuICAgKi9cbiAgZnJvbVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBVaW50OEFycmF5IHwgc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgYnVmZmVyID0gdHlwZW9mIHJhd1RyYW5zYWN0aW9uID09PSAnc3RyaW5nJyA/IHRvVWludDhBcnJheShyYXdUcmFuc2FjdGlvbikgOiByYXdUcmFuc2FjdGlvbjtcbiAgICB0aGlzLmJvZHlCeXRlcyhidWZmZXIpO1xuICAgIHN3aXRjaCAodGhpcy50eEJvZHkuZGF0YSkge1xuICAgICAgY2FzZSBIZWRlcmFUcmFuc2FjdGlvblR5cGVzLlRyYW5zZmVyOlxuICAgICAgICB0aGlzLnNldFRyYW5zYWN0aW9uVHlwZShUcmFuc2FjdGlvblR5cGUuU2VuZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBIZWRlcmFUcmFuc2FjdGlvblR5cGVzLkNyZWF0ZUFjY291bnQ6XG4gICAgICAgIHRoaXMuc2V0VHJhbnNhY3Rpb25UeXBlKFRyYW5zYWN0aW9uVHlwZS5XYWxsZXRJbml0aWFsaXphdGlvbik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBIZWRlcmFUcmFuc2FjdGlvblR5cGVzLlRva2VuQXNzb2NpYXRlVG9BY2NvdW50OlxuICAgICAgICB0aGlzLnNldFRyYW5zYWN0aW9uVHlwZShUcmFuc2FjdGlvblR5cGUuQXNzb2NpYXRlZFRva2VuQWNjb3VudEluaXRpYWxpemF0aW9uKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEhlZGVyYVRyYW5zYWN0aW9uVHlwZXMuQWNjb3VudFVwZGF0ZTpcbiAgICAgICAgdGhpcy5zZXRUcmFuc2FjdGlvblR5cGUoVHJhbnNhY3Rpb25UeXBlLkFjY291bnRVcGRhdGUpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdG9Kc29uKCk6IFR4RGF0YSB7XG4gICAgY29uc3QgW2FjYywgdGltZV0gPSB0aGlzLmdldFR4SWRQYXJ0cygpO1xuICAgIGNvbnN0IHJlc3VsdDogVHhEYXRhID0ge1xuICAgICAgaWQ6IGFjYyArICdAJyArIHRpbWUsXG4gICAgICBoYXNoOiB0aGlzLmdldFR4SGFzaCgpLCAvLyBUT0RPOiBVcGRhdGUgb25jZSBoZWRlcmEtc2RrIHJlbGVhc2UgdGhpcyBmdW5jdGlvbmFsaXR5IEJHQS0yODRcbiAgICAgIGRhdGE6IHRvSGV4KHRoaXMuX2hlZGVyYVR4LmJvZHlCeXRlcyksXG4gICAgICBmZWU6IG5ldyBCaWdOdW1iZXIodGhpcy5fdHhCb2R5LnRyYW5zYWN0aW9uRmVlIS50b1N0cmluZygpKS50b051bWJlcigpLFxuICAgICAgZnJvbTogYWNjLFxuICAgICAgc3RhcnRUaW1lOiB0aW1lLFxuICAgICAgdmFsaWREdXJhdGlvbjogdGhpcy5fdHhCb2R5LnRyYW5zYWN0aW9uVmFsaWREdXJhdGlvbiEuc2Vjb25kcyEudG9TdHJpbmcoKSxcbiAgICAgIG5vZGU6IHN0cmluZ2lmeUFjY291bnRJZCh0aGlzLl90eEJvZHkubm9kZUFjY291bnRJRCEpLFxuICAgICAgbWVtbzogdGhpcy5fdHhCb2R5Lm1lbW8sXG4gICAgfTtcblxuICAgIHN3aXRjaCAodGhpcy5fdHhCb2R5LmRhdGEpIHtcbiAgICAgIGNhc2UgSGVkZXJhVHJhbnNhY3Rpb25UeXBlcy5UcmFuc2ZlcjpcbiAgICAgICAgcmVzdWx0Lmluc3RydWN0aW9uc0RhdGEgPSB7XG4gICAgICAgICAgdHlwZTogSGVkZXJhVHJhbnNhY3Rpb25UeXBlcy5UcmFuc2ZlcixcbiAgICAgICAgICBwYXJhbXM6IHRoaXMuZ2V0VHJhbnNmZXJEYXRhKCksXG4gICAgICAgIH07XG4gICAgICAgIHJlc3VsdC50byA9IHJlc3VsdC5pbnN0cnVjdGlvbnNEYXRhLnBhcmFtcy5yZWNpcGllbnRzWzBdLmFkZHJlc3M7XG4gICAgICAgIHJlc3VsdC5hbW91bnQgPSByZXN1bHQuaW5zdHJ1Y3Rpb25zRGF0YS5wYXJhbXMucmVjaXBpZW50c1swXS5hbW91bnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBIZWRlcmFUcmFuc2FjdGlvblR5cGVzLlRva2VuQXNzb2NpYXRlVG9BY2NvdW50OlxuICAgICAgICByZXN1bHQuaW5zdHJ1Y3Rpb25zRGF0YSA9IHtcbiAgICAgICAgICB0eXBlOiBIZWRlcmFUcmFuc2FjdGlvblR5cGVzLlRva2VuQXNzb2NpYXRlVG9BY2NvdW50LFxuICAgICAgICAgIHBhcmFtczogdGhpcy5nZXRBY2NvdW50QXNzb2NpYXRlRGF0YSgpLFxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgSGVkZXJhVHJhbnNhY3Rpb25UeXBlcy5BY2NvdW50VXBkYXRlOlxuICAgICAgICByZXN1bHQuaW5zdHJ1Y3Rpb25zRGF0YSA9IHtcbiAgICAgICAgICB0eXBlOiBIZWRlcmFUcmFuc2FjdGlvblR5cGVzLkFjY291bnRVcGRhdGUsXG4gICAgICAgICAgcGFyYW1zOiB0aGlzLmdldEFjY291bnRVcGRhdGVEYXRhKCksXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSByZWNpcGllbnQgYWNjb3VudCBhbmQgdGhlIGFtb3VudFxuICAgKiB0cmFuc2ZlcnJlZCBvbiB0aGlzIHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEByZXR1cm5zIHsgdG9rZW5OYW1lLCBSZWNpcGllbnRbXX0gaXMgb2JqZWN0IGNvbnNpc3Rpbmcgb2YgdG9rZW5OYW1lIGlmIGl0J3MgYSB0b2tlbiB0cmFuc2ZlciBhbmQgcmVjaXBpZW50cyBjb25zaXN0aW5nXG4gICAqICB0aGUgcmVjaXBpZW50IGFkZHJlc3MsIHRoZSB0cmFuc2ZlciBhbW91bnQsIGFuZCB0aGUgdG9rZW4gbmFtZSBmb3IgdG9rZW4gdHJhbnNmZXJcbiAgICovXG4gIHByaXZhdGUgZ2V0VHJhbnNmZXJEYXRhKCk6IHsgdG9rZW5OYW1lPzogc3RyaW5nOyByZWNpcGllbnRzOiBSZWNpcGllbnRbXSB9IHtcbiAgICBjb25zdCBbYWNjXSA9IHRoaXMuZ2V0VHhJZFBhcnRzKCk7XG4gICAgY29uc3QgdHJhbnNmZXJEYXRhOiBSZWNpcGllbnRbXSA9IFtdO1xuICAgIGNvbnN0IHRva2VuVHJhbnNmZXJzOiBwcm90by5JVG9rZW5UcmFuc2Zlckxpc3RbXSA9IHRoaXMuX3R4Qm9keS5jcnlwdG9UcmFuc2Zlcj8udG9rZW5UcmFuc2ZlcnMgfHwgW107XG4gICAgY29uc3QgdHJhbnNmZXJzOiBwcm90by5JQWNjb3VudEFtb3VudFtdID1cbiAgICAgIHRva2VuVHJhbnNmZXJzWzBdPy50cmFuc2ZlcnMgfHwgdGhpcy5fdHhCb2R5LmNyeXB0b1RyYW5zZmVyPy50cmFuc2ZlcnM/LmFjY291bnRBbW91bnRzIHx8IFtdO1xuICAgIGNvbnN0IHRva2VuTmFtZSA9IHRva2VuVHJhbnNmZXJzLmxlbmd0aFxuICAgICAgPyBnZXRIZWRlcmFUb2tlbk5hbWVGcm9tSWQoc3RyaW5naWZ5VG9rZW5JZCh0b2tlblRyYW5zZmVyc1swXS50b2tlbiEpKT8ubmFtZVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICB0cmFuc2ZlcnMuZm9yRWFjaCgodHJhbnNmZXIpID0+IHtcbiAgICAgIGNvbnN0IGFtb3VudCA9IExvbmcuZnJvbVZhbHVlKHRyYW5zZmVyLmFtb3VudCEpO1xuICAgICAgaWYgKGFtb3VudC5pc1Bvc2l0aXZlKCkgJiYgc3RyaW5naWZ5QWNjb3VudElkKHRyYW5zZmVyLmFjY291bnRJRCEpICE9PSBhY2MpIHtcbiAgICAgICAgdHJhbnNmZXJEYXRhLnB1c2goe1xuICAgICAgICAgIGFkZHJlc3M6IHN0cmluZ2lmeUFjY291bnRJZCh0cmFuc2Zlci5hY2NvdW50SUQhKSxcbiAgICAgICAgICBhbW91bnQ6IGFtb3VudC50b1N0cmluZygpLFxuICAgICAgICAgIC4uLih0b2tlblRyYW5zZmVycy5sZW5ndGggJiYge1xuICAgICAgICAgICAgdG9rZW5OYW1lOiB0b2tlbk5hbWUsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gSGFuZGxlIHNlbGYtdHJhbnNmZXI6IHdoZW4gc2VuZGVyID09IHJlY2lwaWVudCwgdGhlIHBvc2l0aXZlIGVudHJ5IGlzIGZpbHRlcmVkIG91dCBhYm92ZVxuICAgIC8vIGJlY2F1c2UgaXRzIGFjY291bnRJRCBtYXRjaGVzIHRoZSBzZW5kZXIuIEZhbGwgYmFjayB0byBpbmNsdWRpbmcgaXQgYXMgdGhlIHJlY2lwaWVudC5cbiAgICBpZiAodHJhbnNmZXJEYXRhLmxlbmd0aCA9PT0gMCAmJiB0cmFuc2ZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgc2VsZlRyYW5zZmVyRW50cnkgPSB0cmFuc2ZlcnMuZmluZCgodCkgPT4gTG9uZy5mcm9tVmFsdWUodC5hbW91bnQhKS5pc1Bvc2l0aXZlKCkpO1xuICAgICAgaWYgKHNlbGZUcmFuc2ZlckVudHJ5KSB7XG4gICAgICAgIHRyYW5zZmVyRGF0YS5wdXNoKHtcbiAgICAgICAgICBhZGRyZXNzOiBzdHJpbmdpZnlBY2NvdW50SWQoc2VsZlRyYW5zZmVyRW50cnkuYWNjb3VudElEISksXG4gICAgICAgICAgYW1vdW50OiBMb25nLmZyb21WYWx1ZShzZWxmVHJhbnNmZXJFbnRyeS5hbW91bnQhKS50b1N0cmluZygpLFxuICAgICAgICAgIC4uLih0b2tlblRyYW5zZmVycy5sZW5ndGggJiYge1xuICAgICAgICAgICAgdG9rZW5OYW1lOiB0b2tlbk5hbWUsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi4odG9rZW5UcmFuc2ZlcnMubGVuZ3RoICYmIHtcbiAgICAgICAgdG9rZW5OYW1lOiB0b2tlbk5hbWUsXG4gICAgICB9KSxcbiAgICAgIHJlY2lwaWVudHM6IHRyYW5zZmVyRGF0YSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgYWNjb3VudCB1cGRhdGUgc3Rha2luZyBkYXRhIGZyb20gdGhpcyB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBUaGUgYWNjb3VudCB1cGRhdGUgcGFyYW1ldGVycyBpbmNsdWRpbmcgc3Rha2VkTm9kZUlkIGFuZCBkZWNsaW5lUmV3YXJkXG4gICAqL1xuICBwcml2YXRlIGdldEFjY291bnRVcGRhdGVEYXRhKCk6IHsgYWNjb3VudElkOiBzdHJpbmc7IHN0YWtlZE5vZGVJZD86IHN0cmluZzsgZGVjbGluZVJld2FyZD86IGJvb2xlYW4gfSB7XG4gICAgY29uc3QgdXBkYXRlQm9keSA9IHRoaXMuX3R4Qm9keS5jcnlwdG9VcGRhdGVBY2NvdW50ITtcbiAgICByZXR1cm4ge1xuICAgICAgYWNjb3VudElkOiBzdHJpbmdpZnlBY2NvdW50SWQodXBkYXRlQm9keS5hY2NvdW50SURUb1VwZGF0ZSEpLFxuICAgICAgLi4uKHVwZGF0ZUJvZHkuc3Rha2VkTm9kZUlkICE9IG51bGwgJiYge1xuICAgICAgICBzdGFrZWROb2RlSWQ6IExvbmcuZnJvbVZhbHVlKHVwZGF0ZUJvZHkuc3Rha2VkTm9kZUlkKS50b1N0cmluZygpLFxuICAgICAgfSksXG4gICAgICAuLi4odXBkYXRlQm9keS5kZWNsaW5lUmV3YXJkICE9IG51bGwgJiYge1xuICAgICAgICBkZWNsaW5lUmV3YXJkOlxuICAgICAgICAgIHR5cGVvZiB1cGRhdGVCb2R5LmRlY2xpbmVSZXdhcmQgPT09ICdib29sZWFuJ1xuICAgICAgICAgICAgPyB1cGRhdGVCb2R5LmRlY2xpbmVSZXdhcmRcbiAgICAgICAgICAgIDogKHVwZGF0ZUJvZHkuZGVjbGluZVJld2FyZCBhcyB7IHZhbHVlOiBib29sZWFuIH0pLnZhbHVlLFxuICAgICAgfSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHJlY2lwaWVudCBhY2NvdW50IGFuZCB0aGUgYW1vdW50XG4gICAqIHRyYW5zZmVycmVkIG9uIHRoaXMgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHJldHVybnMgeyBhY2NvdW50SWQ6IHN0cmluZzsgdG9rZW5OYW1lc1tdfSBpcyBhbiBvYmplY3QgY29uc2lzdGluZyBvZiBhY2NvdW50SWQgZm9yIHRoZSB0b2tlbiBvd25lclxuICAgKiAgYW5kIGxpc3Qgb2YgdG9rZW5OYW1lcyB0aGF0IHdpbGwgYmUgZW5hYmxlZFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRBY2NvdW50QXNzb2NpYXRlRGF0YSgpOiB7IGFjY291bnRJZDogc3RyaW5nOyB0b2tlbk5hbWVzOiBzdHJpbmdbXSB9IHtcbiAgICBjb25zdCB0b2tlbnM6IHByb3RvLklUb2tlbklEW10gPSB0aGlzLl90eEJvZHkudG9rZW5Bc3NvY2lhdGUhLnRva2VucyB8fCBbXTtcbiAgICByZXR1cm4ge1xuICAgICAgYWNjb3VudElkOiBzdHJpbmdpZnlBY2NvdW50SWQodGhpcy5fdHhCb2R5LnRva2VuQXNzb2NpYXRlIS5hY2NvdW50ISksXG4gICAgICB0b2tlbk5hbWVzOiB0b2tlbnMubWFwKCh0b2tlbjogcHJvdG8uSVRva2VuSUQpID0+IGdldEhlZGVyYVRva2VuTmFtZUZyb21JZChzdHJpbmdpZnlUb2tlbklkKHRva2VuKSkhLm5hbWUpLFxuICAgIH07XG4gIH1cblxuICAvLyByZWdpb24gZ2V0dGVycyAmIHNldHRlcnNcbiAgZ2V0IHR4Qm9keSgpOiBwcm90by5UcmFuc2FjdGlvbkJvZHkge1xuICAgIHJldHVybiB0aGlzLl90eEJvZHk7XG4gIH1cblxuICBnZXQgaGVkZXJhVHgoKTogcHJvdG8uVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl9oZWRlcmFUeDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoaXMgdHJhbnNhY3Rpb24gYm9keSBjb21wb25lbnRzXG4gICAqXG4gICAqIEBwYXJhbSB7cHJvdG8uVHJhbnNhY3Rpb259IHR4IC0gQm9keSBUcmFuc2FjdGlvblxuICAgKi9cbiAgYm9keSh0eDogcHJvdG8uVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLl90eEJvZHkgPSBwcm90by5UcmFuc2FjdGlvbkJvZHkuZGVjb2RlKHR4LmJvZHlCeXRlcyk7XG4gICAgdGhpcy5faGVkZXJhVHggPSB0eDtcbiAgICB0aGlzLmxvYWRJbnB1dHNBbmRPdXRwdXRzKCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB0cmFuc2FjdGlvbiB0eXBlXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25UeXBlfSB0cmFuc2FjdGlvblR5cGUgLSBUaGUgdHJhbnNhY3Rpb24gdHlwZSB0byBiZSBzZXRcbiAgICovXG4gIHNldFRyYW5zYWN0aW9uVHlwZSh0cmFuc2FjdGlvblR5cGU6IFRyYW5zYWN0aW9uVHlwZSk6IHZvaWQge1xuICAgIHRoaXMuX3R5cGUgPSB0cmFuc2FjdGlvblR5cGU7XG4gIH1cblxuICAvKipcbiAgICogRGVjb2RlIHByZXZpb3VzIHNpZ25hdHVyZXMgZnJvbSB0aGUgaW5uZXIgaGVkZXJhIHRyYW5zYWN0aW9uXG4gICAqIGFuZCBzYXZlIHRoZW0gaW50byB0aGUgYmFzZSB0cmFuc2FjdGlvbiBzaWduYXR1cmUgbGlzdC5cbiAgICovXG4gIGxvYWRQcmV2aW91c1NpZ25hdHVyZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2hlZGVyYVR4LnNpZ01hcCAmJiB0aGlzLl9oZWRlcmFUeC5zaWdNYXAuc2lnUGFpcikge1xuICAgICAgY29uc3Qgc2lnUGFpcnMgPSB0aGlzLl9oZWRlcmFUeC5zaWdNYXAuc2lnUGFpcjtcbiAgICAgIHNpZ1BhaXJzLmZvckVhY2goKHNpZ1BhaXIpID0+IHtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gc2lnUGFpci5lZDI1NTE5O1xuICAgICAgICBpZiAoc2lnbmF0dXJlKSB7XG4gICAgICAgICAgdGhpcy5fc2lnbmF0dXJlcy5wdXNoKHRvSGV4KHNpZ25hdHVyZSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZCB0aGUgaW5wdXQgYW5kIG91dHB1dCBkYXRhIG9uIHRoaXMgdHJhbnNhY3Rpb24gdXNpbmcgdGhlIHRyYW5zYWN0aW9uIGpzb25cbiAgICogaWYgdGhlcmUgYXJlIG91dHB1dHMuIEZvciB0cmFuc2FjdGlvbnMgd2l0aG91dCBvdXRwdXRzIChlLmcuIHdhbGxldCBpbml0aWFsaXphdGlvbnMpLFxuICAgKiB0aGlzIGZ1bmN0aW9uIHdpbGwgbm90IGRvIGFueXRoaW5nXG4gICAqL1xuICBsb2FkSW5wdXRzQW5kT3V0cHV0cygpOiB2b2lkIHtcbiAgICBjb25zdCB0eEpzb24gPSB0aGlzLnRvSnNvbigpO1xuICAgIGNvbnN0IGluc3RydWN0aW9uID0gdHhKc29uLmluc3RydWN0aW9uc0RhdGE7XG4gICAgY29uc3Qgb3V0cHV0czogRW50cnlbXSA9IFtdO1xuICAgIGNvbnN0IGlucHV0czogRW50cnlbXSA9IFtdO1xuXG4gICAgc3dpdGNoIChpbnN0cnVjdGlvbj8udHlwZSkge1xuICAgICAgY2FzZSBIZWRlcmFUcmFuc2FjdGlvblR5cGVzLlRyYW5zZmVyOlxuICAgICAgICBsZXQgdG90YWxBbW91bnQgPSBuZXcgQmlnTnVtYmVyKDApO1xuICAgICAgICBpbnN0cnVjdGlvbi5wYXJhbXMucmVjaXBpZW50cy5mb3JFYWNoKChyZWNpcGllbnQpID0+IHtcbiAgICAgICAgICB0b3RhbEFtb3VudCA9IHRvdGFsQW1vdW50LnBsdXMocmVjaXBpZW50LmFtb3VudCk7XG4gICAgICAgICAgb3V0cHV0cy5wdXNoKHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHJlY2lwaWVudC5hZGRyZXNzLFxuICAgICAgICAgICAgdmFsdWU6IHJlY2lwaWVudC5hbW91bnQsXG4gICAgICAgICAgICBjb2luOiByZWNpcGllbnQudG9rZW5OYW1lIHx8IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlucHV0cy5wdXNoKHtcbiAgICAgICAgICBhZGRyZXNzOiB0eEpzb24uZnJvbSxcbiAgICAgICAgICB2YWx1ZTogdG90YWxBbW91bnQudG9TdHJpbmcoKSxcbiAgICAgICAgICBjb2luOiBpbnN0cnVjdGlvbi5wYXJhbXMudG9rZW5OYW1lIHx8IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEhlZGVyYVRyYW5zYWN0aW9uVHlwZXMuVG9rZW5Bc3NvY2lhdGVUb0FjY291bnQ6XG4gICAgICAgIGluc3RydWN0aW9uLnBhcmFtcy50b2tlbk5hbWVzLmZvckVhY2goKHRva2VuTmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRva2VuRW50cnk6IEVudHJ5ID0ge1xuICAgICAgICAgICAgYWRkcmVzczogaW5zdHJ1Y3Rpb24ucGFyYW1zLmFjY291bnRJZCxcbiAgICAgICAgICAgIHZhbHVlOiAnMCcsXG4gICAgICAgICAgICBjb2luOiB0b2tlbk5hbWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpbnB1dHMucHVzaCh0b2tlbkVudHJ5KTtcbiAgICAgICAgICBvdXRwdXRzLnB1c2godG9rZW5FbnRyeSk7XG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBIZWRlcmFUcmFuc2FjdGlvblR5cGVzLkFjY291bnRVcGRhdGU6XG4gICAgICAgIGlucHV0cy5wdXNoKHtcbiAgICAgICAgICBhZGRyZXNzOiB0eEpzb24uZnJvbSxcbiAgICAgICAgICB2YWx1ZTogJzAnLFxuICAgICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgICAgfSk7XG4gICAgICAgIG91dHB1dHMucHVzaCh7XG4gICAgICAgICAgYWRkcmVzczogaW5zdHJ1Y3Rpb24ucGFyYW1zLmFjY291bnRJZCxcbiAgICAgICAgICB2YWx1ZTogJzAnLFxuICAgICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLl9pbnB1dHMgPSBpbnB1dHM7XG4gICAgdGhpcy5fb3V0cHV0cyA9IG91dHB1dHM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGlzIHRyYW5zYWN0aW9uIGJvZHkgY29tcG9uZW50c1xuICAgKlxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ5dGVzIC0gRW5jb2RlZCBib2R5IHRyYW5zYWN0aW9uXG4gICAqL1xuICBib2R5Qnl0ZXMoYnl0ZXM6IFVpbnQ4QXJyYXkpOiB2b2lkIHtcbiAgICB0aGlzLmJvZHkocHJvdG8uVHJhbnNhY3Rpb24uZGVjb2RlKGJ5dGVzKSk7XG4gIH1cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIGhlbHBlcnNcbiAgLyoqXG4gICAqIFJldHVybnMgdGhpcyBoZWRlcmEgdHJhbnNhY3Rpb24gaWQgY29tcG9uZW50cyBpbiBhIHJlYWRhYmxlIGZvcm1hdFxuICAgKlxuICAgKiBAcmV0dXJucyB7W3N0cmluZywgc3RyaW5nXX0gLSBUcmFuc2FjdGlvbiBpZCBwYXJ0cyBbPGFjY291bnQgaWQ+LCA8c3RhcnRUaW1lIGluIHNlY29uZHM+XVxuICAgKi9cbiAgZ2V0VHhJZFBhcnRzKCk6IFtzdHJpbmcsIHN0cmluZ10ge1xuICAgIGlmIChcbiAgICAgIHRoaXMuX3R4Qm9keSAmJlxuICAgICAgdGhpcy5fdHhCb2R5LnRyYW5zYWN0aW9uSUQgJiZcbiAgICAgIHRoaXMuX3R4Qm9keS50cmFuc2FjdGlvbklELmFjY291bnRJRCAmJlxuICAgICAgdGhpcy5fdHhCb2R5LnRyYW5zYWN0aW9uSUQudHJhbnNhY3Rpb25WYWxpZFN0YXJ0XG4gICAgKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBzdHJpbmdpZnlBY2NvdW50SWQodGhpcy5fdHhCb2R5LnRyYW5zYWN0aW9uSUQuYWNjb3VudElEKSxcbiAgICAgICAgc3RyaW5naWZ5VHhUaW1lKHRoaXMuX3R4Qm9keS50cmFuc2FjdGlvbklELnRyYW5zYWN0aW9uVmFsaWRTdGFydCksXG4gICAgICBdO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgdHJhbnNhY3Rpb24gaWQgaW5mb3JtYXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoaXMgdHJhbnNhY3Rpb24gaGFzaFxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSB0cmFuc2FjdGlvbiBoYXNoXG4gICAqL1xuICBnZXRUeEhhc2goKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuX3R4Qm9keS5ub2RlQWNjb3VudElEKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgdHJhbnNhY3Rpb24gbm9kZSBpZCcpO1xuICAgIH1cbiAgICBjb25zdCBfc2lnbmVkVHggPSBuZXcgcHJvdG8uU2lnbmVkVHJhbnNhY3Rpb24oKTtcbiAgICBfc2lnbmVkVHguc2lnTWFwID0gdGhpcy5faGVkZXJhVHguc2lnTWFwO1xuICAgIF9zaWduZWRUeC5ib2R5Qnl0ZXMgPSB0aGlzLl9oZWRlcmFUeC5ib2R5Qnl0ZXM7XG5cbiAgICBjb25zdCBlbmNvZGVyID0gcHJvdG8uU2lnbmVkVHJhbnNhY3Rpb247XG4gICAgcmV0dXJuIHRoaXMuc2hhKHRoaXMuZW5jb2RlKF9zaWduZWRUeCwgZW5jb2RlcikpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuY29kZSBhbiBvYmplY3QgdXNpbmcgdGhlIGdpdmVuIGVuY29kZXIgY2xhc3NcbiAgICpcbiAgICogQHBhcmFtIHtwcm90b30gb2JqIC0gVGhlIG9iamVjdCB0byBiZSBlbmNvZGVkLCBtdXN0IGJlIGluIHByb3RvIG5hbWVzcGFjZVxuICAgKiBAcGFyYW0gZW5jb2RlciAtIE9iamVjdCBlbmNvZGVyXG4gICAqIEByZXR1cm5zIHtVaW50OEFycmF5fSAtIEVuY29kZWQgb2JqZWN0IGJ5dGUgYXJyYXlcbiAgICovXG4gIHByaXZhdGUgZW5jb2RlPEN0b3JGbiBleHRlbmRzIHsgbmV3ICgpOiBUIH0sIFQgZXh0ZW5kcyB7IGNvbnN0cnVjdG9yOiBDdG9yRm4gfT4oXG4gICAgb2JqOiBULFxuICAgIGVuY29kZXI6IHsgZW5jb2RlKGFyZzogVCk6IFdyaXRlciB9XG4gICk6IFVpbnQ4QXJyYXkge1xuICAgIHJldHVybiBlbmNvZGVyLmVuY29kZShvYmopLmZpbmlzaCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzaGEtMzg0IGhhc2hcbiAgICpcbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBieXRlcyAtIEJ5dGVzIHRvIGJlIGhhc2hlZFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSByZXN1bHRpbmcgaGFzaCBzdHJpbmdcbiAgICovXG4gIHNoYShieXRlczogVWludDhBcnJheSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRvSGV4KGhhc2goYnl0ZXMpKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coinTransferBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/coinTransferBuilder.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const should = __importStar(require("should"));
|
|
37
|
+
const getBuilderFactory_1 = require("../getBuilderFactory");
|
|
38
|
+
const testData = __importStar(require("../../resources/hbar"));
|
|
39
|
+
/**
|
|
40
|
+
* Tests for CoinTransferBuilder self-transfer (stakeClaimRewards).
|
|
41
|
+
*
|
|
42
|
+
* HBAR staking rewards are claimed by submitting a 1-tinybar CryptoTransfer
|
|
43
|
+
* where sender == receiver == accountId. Hedera atomically flushes
|
|
44
|
+
* pending_reward into account balance on any CryptoTransfer touching the
|
|
45
|
+
* account. staking-service uses this as the CLAIM_REWARDS operation.
|
|
46
|
+
*
|
|
47
|
+
* The key behaviour under test:
|
|
48
|
+
* buildTransferData() must produce TWO separate accountAmounts entries:
|
|
49
|
+
* [{accountId, -1}, {accountId, +1}]
|
|
50
|
+
* The Hedera SDK TransferTransaction merges same-account entries (nets to 0),
|
|
51
|
+
* so CoinTransferBuilder.buildTransferData() bypasses that by building the
|
|
52
|
+
* proto list directly.
|
|
53
|
+
*
|
|
54
|
+
* initTransfers() must reconstruct the self-transfer from serialised bytes:
|
|
55
|
+
* it filters for positive amounts only, so recipients[0].address == source.
|
|
56
|
+
*/
|
|
57
|
+
describe('HBAR CoinTransferBuilder - self-transfer (stakeClaimRewards)', () => {
|
|
58
|
+
const factory = (0, getBuilderFactory_1.getBuilderFactory)('thbar');
|
|
59
|
+
const SOURCE = testData.ACCOUNT_1.accountId; // '0.0.81320'
|
|
60
|
+
const initSelfTransferBuilder = () => {
|
|
61
|
+
const txBuilder = factory.getTransferBuilder();
|
|
62
|
+
txBuilder.fee({ fee: testData.FEE });
|
|
63
|
+
txBuilder.source({ address: SOURCE });
|
|
64
|
+
txBuilder.send({ address: SOURCE, amount: '1' }); // self-transfer: 1 tinybar
|
|
65
|
+
txBuilder.node({ nodeId: '0.0.3' });
|
|
66
|
+
txBuilder.startTime('1596110493.372646570');
|
|
67
|
+
return txBuilder;
|
|
68
|
+
};
|
|
69
|
+
describe('build', () => {
|
|
70
|
+
it('should build a self-transfer transaction with source equal to recipient', async () => {
|
|
71
|
+
const tx = await initSelfTransferBuilder().build();
|
|
72
|
+
const txJson = tx.toJson();
|
|
73
|
+
// Source and recipient are the same account
|
|
74
|
+
should.deepEqual(txJson.from, SOURCE);
|
|
75
|
+
should.deepEqual(txJson.to, SOURCE);
|
|
76
|
+
should.deepEqual(txJson.amount, '1');
|
|
77
|
+
// inputs and outputs both reference the same address
|
|
78
|
+
tx.inputs.length.should.equal(1);
|
|
79
|
+
tx.inputs[0].address.should.equal(SOURCE);
|
|
80
|
+
tx.inputs[0].value.should.equal('1');
|
|
81
|
+
tx.outputs.length.should.equal(1);
|
|
82
|
+
tx.outputs[0].address.should.equal(SOURCE);
|
|
83
|
+
tx.outputs[0].value.should.equal('1');
|
|
84
|
+
});
|
|
85
|
+
it('should produce two separate accountAmounts entries in the protobuf', async () => {
|
|
86
|
+
const tx = await initSelfTransferBuilder().build();
|
|
87
|
+
// Access the raw protobuf transfer list
|
|
88
|
+
const transfers = tx.txBody.cryptoTransfer.transfers.accountAmounts;
|
|
89
|
+
should.exist(transfers);
|
|
90
|
+
transfers.length.should.equal(2, 'expected exactly two entries: [{source,-1},{source,+1}]');
|
|
91
|
+
// Both entries reference the same account
|
|
92
|
+
const accountNums = transfers.map((a) => {
|
|
93
|
+
const id = a.accountID;
|
|
94
|
+
return `${id.shardNum || 0}.${id.realmNum || 0}.${id.accountNum}`;
|
|
95
|
+
});
|
|
96
|
+
accountNums.every((id) => id === SOURCE || id.endsWith('.81320')).should.be.true();
|
|
97
|
+
// One entry is -1 (debit), one is +1 (credit)
|
|
98
|
+
const amounts = transfers.map((a) => Number(a.amount.toString()));
|
|
99
|
+
amounts.should.containEql(-1);
|
|
100
|
+
amounts.should.containEql(1);
|
|
101
|
+
});
|
|
102
|
+
it('should round-trip through serialisation: deserialized tx has source == recipient', async () => {
|
|
103
|
+
const originalTx = await initSelfTransferBuilder().build();
|
|
104
|
+
const txHex = originalTx.toBroadcastFormat();
|
|
105
|
+
should.exist(txHex);
|
|
106
|
+
txHex.length.should.be.greaterThan(0);
|
|
107
|
+
// Rebuild from serialised hex
|
|
108
|
+
const rebuiltBuilder = factory.getTransferBuilder();
|
|
109
|
+
rebuiltBuilder.from(txHex);
|
|
110
|
+
const rebuiltTx = await rebuiltBuilder.build();
|
|
111
|
+
const rebuiltJson = rebuiltTx.toJson();
|
|
112
|
+
// After round-trip, source and recipient must still be the same account
|
|
113
|
+
should.deepEqual(rebuiltJson.from, SOURCE);
|
|
114
|
+
should.deepEqual(rebuiltJson.to, SOURCE);
|
|
115
|
+
should.deepEqual(rebuiltJson.amount, '1');
|
|
116
|
+
});
|
|
117
|
+
it('should sign a self-transfer transaction successfully', async () => {
|
|
118
|
+
const builder = initSelfTransferBuilder();
|
|
119
|
+
builder.sign({ key: testData.ACCOUNT_1.prvKeyWithPrefix });
|
|
120
|
+
const tx = await builder.build();
|
|
121
|
+
tx.signature.length.should.equal(1);
|
|
122
|
+
const txJson = tx.toJson();
|
|
123
|
+
should.deepEqual(txJson.from, SOURCE);
|
|
124
|
+
should.deepEqual(txJson.to, SOURCE);
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29pblRyYW5zZmVyQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbkJ1aWxkZXIvY29pblRyYW5zZmVyQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyw0REFBeUQ7QUFDekQsK0RBQWlEO0FBRWpEOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILFFBQVEsQ0FBQyw4REFBOEQsRUFBRSxHQUFHLEVBQUU7SUFDNUUsTUFBTSxPQUFPLEdBQUcsSUFBQSxxQ0FBaUIsRUFBQyxPQUFPLENBQUMsQ0FBQztJQUUzQyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLGNBQWM7SUFFM0QsTUFBTSx1QkFBdUIsR0FBRyxHQUFHLEVBQUU7UUFDbkMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDL0MsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNyQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDdEMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQywyQkFBMkI7UUFDN0UsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLFNBQVMsQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUM1QyxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDLENBQUM7SUFFRixRQUFRLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtRQUNy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RUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDM0IsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IGdldEJ1aWxkZXJGYWN0b3J5IH0gZnJvbSAnLi4vZ2V0QnVpbGRlckZhY3RvcnknO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2hiYXInO1xuXG4vKipcbiAqIFRlc3RzIGZvciBDb2luVHJhbnNmZXJCdWlsZGVyIHNlbGYtdHJhbnNmZXIgKHN0YWtlQ2xhaW1SZXdhcmRzKS5cbiAqXG4gKiBIQkFSIHN0YWtpbmcgcmV3YXJkcyBhcmUgY2xhaW1lZCBieSBzdWJtaXR0aW5nIGEgMS10aW55YmFyIENyeXB0b1RyYW5zZmVyXG4gKiB3aGVyZSBzZW5kZXIgPT0gcmVjZWl2ZXIgPT0gYWNjb3VudElkLiBIZWRlcmEgYXRvbWljYWxseSBmbHVzaGVzXG4gKiBwZW5kaW5nX3Jld2FyZCBpbnRvIGFjY291bnQgYmFsYW5jZSBvbiBhbnkgQ3J5cHRvVHJhbnNmZXIgdG91Y2hpbmcgdGhlXG4gKiBhY2NvdW50LiBzdGFraW5nLXNlcnZpY2UgdXNlcyB0aGlzIGFzIHRoZSBDTEFJTV9SRVdBUkRTIG9wZXJhdGlvbi5cbiAqXG4gKiBUaGUga2V5IGJlaGF2aW91ciB1bmRlciB0ZXN0OlxuICogICBidWlsZFRyYW5zZmVyRGF0YSgpIG11c3QgcHJvZHVjZSBUV08gc2VwYXJhdGUgYWNjb3VudEFtb3VudHMgZW50cmllczpcbiAqICAgICBbe2FjY291bnRJZCwgLTF9LCB7YWNjb3VudElkLCArMX1dXG4gKiAgIFRoZSBIZWRlcmEgU0RLIFRyYW5zZmVyVHJhbnNhY3Rpb24gbWVyZ2VzIHNhbWUtYWNjb3VudCBlbnRyaWVzIChuZXRzIHRvIDApLFxuICogICBzbyBDb2luVHJhbnNmZXJCdWlsZGVyLmJ1aWxkVHJhbnNmZXJEYXRhKCkgYnlwYXNzZXMgdGhhdCBieSBidWlsZGluZyB0aGVcbiAqICAgcHJvdG8gbGlzdCBkaXJlY3RseS5cbiAqXG4gKiAgIGluaXRUcmFuc2ZlcnMoKSBtdXN0IHJlY29uc3RydWN0IHRoZSBzZWxmLXRyYW5zZmVyIGZyb20gc2VyaWFsaXNlZCBieXRlczpcbiAqICAgaXQgZmlsdGVycyBmb3IgcG9zaXRpdmUgYW1vdW50cyBvbmx5LCBzbyByZWNpcGllbnRzWzBdLmFkZHJlc3MgPT0gc291cmNlLlxuICovXG5kZXNjcmliZSgnSEJBUiBDb2luVHJhbnNmZXJCdWlsZGVyIC0gc2VsZi10cmFuc2ZlciAoc3Rha2VDbGFpbVJld2FyZHMpJywgKCkgPT4ge1xuICBjb25zdCBmYWN0b3J5ID0gZ2V0QnVpbGRlckZhY3RvcnkoJ3RoYmFyJyk7XG5cbiAgY29uc3QgU09VUkNFID0gdGVzdERhdGEuQUNDT1VOVF8xLmFjY291bnRJZDsgLy8gJzAuMC44MTMyMCdcblxuICBjb25zdCBpbml0U2VsZlRyYW5zZmVyQnVpbGRlciA9ICgpID0+IHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5mZWUoeyBmZWU6IHRlc3REYXRhLkZFRSB9KTtcbiAgICB0eEJ1aWxkZXIuc291cmNlKHsgYWRkcmVzczogU09VUkNFIH0pO1xuICAgIHR4QnVpbGRlci5zZW5kKHsgYWRkcmVzczogU09VUkNFLCBhbW91bnQ6ICcxJyB9KTsgLy8gc2VsZi10cmFuc2ZlcjogMSB0aW55YmFyXG4gICAgdHhCdWlsZGVyLm5vZGUoeyBub2RlSWQ6ICcwLjAuMycgfSk7XG4gICAgdHhCdWlsZGVyLnN0YXJ0VGltZSgnMTU5NjExMDQ5My4zNzI2NDY1NzAnKTtcbiAgICByZXR1cm4gdHhCdWlsZGVyO1xuICB9O1xuXG4gIGRlc2NyaWJlKCdidWlsZCcsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgc2VsZi10cmFuc2ZlciB0cmFuc2FjdGlvbiB3aXRoIHNvdXJjZSBlcXVhbCB0byByZWNpcGllbnQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGluaXRTZWxmVHJhbnNmZXJCdWlsZGVyKCkuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuXG4gICAgICAvLyBTb3VyY2UgYW5kIHJlY2lwaWVudCBhcmUgdGhlIHNhbWUgYWNjb3VudFxuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZnJvbSwgU09VUkNFKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRvLCBTT1VSQ0UpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uYW1vdW50LCAnMScpO1xuXG4gICAgICAvLyBpbnB1dHMgYW5kIG91dHB1dHMgYm90aCByZWZlcmVuY2UgdGhlIHNhbWUgYWRkcmVzc1xuICAgICAgdHguaW5wdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICB0eC5pbnB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwoU09VUkNFKTtcbiAgICAgIHR4LmlucHV0c1swXS52YWx1ZS5zaG91bGQuZXF1YWwoJzEnKTtcblxuICAgICAgdHgub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgdHgub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbChTT1VSQ0UpO1xuICAgICAgdHgub3V0cHV0c1swXS52YWx1ZS5zaG91bGQuZXF1YWwoJzEnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcHJvZHVjZSB0d28gc2VwYXJhdGUgYWNjb3VudEFtb3VudHMgZW50cmllcyBpbiB0aGUgcHJvdG9idWYnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGluaXRTZWxmVHJhbnNmZXJCdWlsZGVyKCkuYnVpbGQoKTtcblxuICAgICAgLy8gQWNjZXNzIHRoZSByYXcgcHJvdG9idWYgdHJhbnNmZXIgbGlzdFxuICAgICAgY29uc3QgdHJhbnNmZXJzID0gKHR4IGFzIGFueSkudHhCb2R5LmNyeXB0b1RyYW5zZmVyLnRyYW5zZmVycy5hY2NvdW50QW1vdW50cyBhcyBhbnlbXTtcbiAgICAgIHNob3VsZC5leGlzdCh0cmFuc2ZlcnMpO1xuICAgICAgdHJhbnNmZXJzLmxlbmd0aC5zaG91bGQuZXF1YWwoMiwgJ2V4cGVjdGVkIGV4YWN0bHkgdHdvIGVudHJpZXM6IFt7c291cmNlLC0xfSx7c291cmNlLCsxfV0nKTtcblxuICAgICAgLy8gQm90aCBlbnRyaWVzIHJlZmVyZW5jZSB0aGUgc2FtZSBhY2NvdW50XG4gICAgICBjb25zdCBhY2NvdW50TnVtcyA9IHRyYW5zZmVycy5tYXAoKGE6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBpZCA9IGEuYWNjb3VudElEO1xuICAgICAgICByZXR1cm4gYCR7aWQuc2hhcmROdW0gfHwgMH0uJHtpZC5yZWFsbU51bSB8fCAwfS4ke2lkLmFjY291bnROdW19YDtcbiAgICAgIH0pO1xuICAgICAgYWNjb3VudE51bXMuZXZlcnkoKGlkOiBzdHJpbmcpID0+IGlkID09PSBTT1VSQ0UgfHwgaWQuZW5kc1dpdGgoJy44MTMyMCcpKS5zaG91bGQuYmUudHJ1ZSgpO1xuXG4gICAgICAvLyBPbmUgZW50cnkgaXMgLTEgKGRlYml0KSwgb25lIGlzICsxIChjcmVkaXQpXG4gICAgICBjb25zdCBhbW91bnRzID0gdHJhbnNmZXJzLm1hcCgoYTogYW55KSA9PiBOdW1iZXIoYS5hbW91bnQudG9TdHJpbmcoKSkpO1xuICAgICAgYW1vdW50cy5zaG91bGQuY29udGFpbkVxbCgtMSk7XG4gICAgICBhbW91bnRzLnNob3VsZC5jb250YWluRXFsKDEpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByb3VuZC10cmlwIHRocm91Z2ggc2VyaWFsaXNhdGlvbjogZGVzZXJpYWxpemVkIHR4IGhhcyBzb3VyY2UgPT0gcmVjaXBpZW50JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgb3JpZ2luYWxUeCA9IGF3YWl0IGluaXRTZWxmVHJhbnNmZXJCdWlsZGVyKCkuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4SGV4ID0gb3JpZ2luYWxUeC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgc2hvdWxkLmV4aXN0KHR4SGV4KTtcbiAgICAgIHR4SGV4Lmxlbmd0aC5zaG91bGQuYmUuZ3JlYXRlclRoYW4oMCk7XG5cbiAgICAgIC8vIFJlYnVpbGQgZnJvbSBzZXJpYWxpc2VkIGhleFxuICAgICAgY29uc3QgcmVidWlsdEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgcmVidWlsdEJ1aWxkZXIuZnJvbSh0eEhleCk7XG4gICAgICBjb25zdCByZWJ1aWx0VHggPSBhd2FpdCByZWJ1aWx0QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgcmVidWlsdEpzb24gPSByZWJ1aWx0VHgudG9Kc29uKCk7XG5cbiAgICAgIC8vIEFmdGVyIHJvdW5kLXRyaXAsIHNvdXJjZSBhbmQgcmVjaXBpZW50IG11c3Qgc3RpbGwgYmUgdGhlIHNhbWUgYWNjb3VudFxuICAgICAgc2hvdWxkLmRlZXBFcXVhbChyZWJ1aWx0SnNvbi5mcm9tLCBTT1VSQ0UpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbChyZWJ1aWx0SnNvbi50bywgU09VUkNFKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwocmVidWlsdEpzb24uYW1vdW50LCAnMScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzaWduIGEgc2VsZi10cmFuc2ZlciB0cmFuc2FjdGlvbiBzdWNjZXNzZnVsbHknLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gaW5pdFNlbGZUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEuQUNDT1VOVF8xLnBydktleVdpdGhQcmVmaXggfSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgdHguc2lnbmF0dXJlLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmZyb20sIFNPVVJDRSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50bywgU09VUkNFKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|