@bitgo/abstract-utxo 12.7.0 → 13.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
  2. package/dist/cjs/src/abstractUtxoCoin.js +3 -3
  3. package/dist/cjs/src/impl/zec/address.d.ts +6 -0
  4. package/dist/cjs/src/impl/zec/address.d.ts.map +1 -1
  5. package/dist/cjs/src/impl/zec/address.js +38 -1
  6. package/dist/cjs/src/impl/zec/index.d.ts +1 -0
  7. package/dist/cjs/src/impl/zec/index.d.ts.map +1 -1
  8. package/dist/cjs/src/impl/zec/index.js +2 -1
  9. package/dist/cjs/src/impl/zec/recipients.d.ts +2 -1
  10. package/dist/cjs/src/impl/zec/recipients.d.ts.map +1 -1
  11. package/dist/cjs/src/impl/zec/recipients.js +7 -3
  12. package/dist/cjs/src/impl/zec/shieldedAddress.d.ts +36 -0
  13. package/dist/cjs/src/impl/zec/shieldedAddress.d.ts.map +1 -0
  14. package/dist/cjs/src/impl/zec/shieldedAddress.js +51 -0
  15. package/dist/cjs/src/impl/zec/signIronwoodTransaction.d.ts +29 -0
  16. package/dist/cjs/src/impl/zec/signIronwoodTransaction.d.ts.map +1 -0
  17. package/dist/cjs/src/impl/zec/signIronwoodTransaction.js +57 -0
  18. package/dist/cjs/src/impl/zec/types.d.ts +5 -0
  19. package/dist/cjs/src/impl/zec/types.d.ts.map +1 -1
  20. package/dist/cjs/src/impl/zec/types.js +1 -1
  21. package/dist/cjs/src/impl/zec/zec.d.ts +35 -2
  22. package/dist/cjs/src/impl/zec/zec.d.ts.map +1 -1
  23. package/dist/cjs/src/impl/zec/zec.js +94 -1
  24. package/dist/cjs/src/transaction/explainTransaction.d.ts +2 -1
  25. package/dist/cjs/src/transaction/explainTransaction.d.ts.map +1 -1
  26. package/dist/cjs/src/transaction/explainTransaction.js +3 -2
  27. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts +2 -0
  28. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -1
  29. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.js +4 -1
  30. package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts.map +1 -1
  31. package/dist/cjs/src/transaction/fixedScript/parseTransaction.js +9 -3
  32. package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.d.ts +7 -0
  33. package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -1
  34. package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.js +32 -20
  35. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts +9 -0
  36. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts.map +1 -1
  37. package/dist/cjs/src/transaction/fixedScript/signTransaction.js +18 -9
  38. package/dist/cjs/src/transaction/recipient.d.ts +24 -1
  39. package/dist/cjs/src/transaction/recipient.d.ts.map +1 -1
  40. package/dist/cjs/src/transaction/recipient.js +32 -4
  41. package/dist/cjs/src/transaction/signTransaction.d.ts +12 -0
  42. package/dist/cjs/src/transaction/signTransaction.d.ts.map +1 -1
  43. package/dist/cjs/src/transaction/signTransaction.js +16 -7
  44. package/dist/cjs/test/unit/bip322.js +14 -4
  45. package/dist/cjs/test/unit/customChangeWallet.js +3 -1
  46. package/dist/cjs/test/unit/impl/zec/psbtDecode.d.ts +2 -0
  47. package/dist/cjs/test/unit/impl/zec/psbtDecode.d.ts.map +1 -0
  48. package/dist/cjs/test/unit/impl/zec/psbtDecode.js +69 -0
  49. package/dist/cjs/test/unit/impl/zec/shieldedPrebuildAndSign.d.ts +2 -0
  50. package/dist/cjs/test/unit/impl/zec/shieldedPrebuildAndSign.d.ts.map +1 -0
  51. package/dist/cjs/test/unit/impl/zec/shieldedPrebuildAndSign.js +470 -0
  52. package/dist/cjs/test/unit/impl/zec/unit/address.js +23 -1
  53. package/dist/cjs/test/unit/impl/zec/unit/resolvePsbtRecipients.js +7 -5
  54. package/dist/cjs/test/unit/impl/zec/unit/shieldedAddress.d.ts +2 -0
  55. package/dist/cjs/test/unit/impl/zec/unit/shieldedAddress.d.ts.map +1 -0
  56. package/dist/cjs/test/unit/impl/zec/unit/shieldedAddress.js +57 -0
  57. package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.js +9 -1
  58. package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.js +2 -1
  59. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  60. package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
  61. package/dist/esm/abstractUtxoCoin.js +3 -3
  62. package/dist/esm/impl/zec/address.d.ts +6 -0
  63. package/dist/esm/impl/zec/address.d.ts.map +1 -1
  64. package/dist/esm/impl/zec/address.js +38 -1
  65. package/dist/esm/impl/zec/index.d.ts +1 -0
  66. package/dist/esm/impl/zec/index.d.ts.map +1 -1
  67. package/dist/esm/impl/zec/index.js +2 -1
  68. package/dist/esm/impl/zec/recipients.d.ts +2 -1
  69. package/dist/esm/impl/zec/recipients.d.ts.map +1 -1
  70. package/dist/esm/impl/zec/recipients.js +7 -3
  71. package/dist/esm/impl/zec/shieldedAddress.d.ts +36 -0
  72. package/dist/esm/impl/zec/shieldedAddress.d.ts.map +1 -0
  73. package/dist/esm/impl/zec/shieldedAddress.js +48 -0
  74. package/dist/esm/impl/zec/signIronwoodTransaction.d.ts +29 -0
  75. package/dist/esm/impl/zec/signIronwoodTransaction.d.ts.map +1 -0
  76. package/dist/esm/impl/zec/signIronwoodTransaction.js +50 -0
  77. package/dist/esm/impl/zec/types.d.ts +5 -0
  78. package/dist/esm/impl/zec/types.d.ts.map +1 -1
  79. package/dist/esm/impl/zec/types.js +1 -1
  80. package/dist/esm/impl/zec/zec.d.ts +35 -2
  81. package/dist/esm/impl/zec/zec.d.ts.map +1 -1
  82. package/dist/esm/impl/zec/zec.js +92 -2
  83. package/dist/esm/transaction/explainTransaction.d.ts +2 -1
  84. package/dist/esm/transaction/explainTransaction.d.ts.map +1 -1
  85. package/dist/esm/transaction/explainTransaction.js +3 -2
  86. package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts +2 -0
  87. package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -1
  88. package/dist/esm/transaction/fixedScript/explainPsbtWasm.js +4 -1
  89. package/dist/esm/transaction/fixedScript/parseTransaction.d.ts.map +1 -1
  90. package/dist/esm/transaction/fixedScript/parseTransaction.js +9 -3
  91. package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts +7 -0
  92. package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -1
  93. package/dist/esm/transaction/fixedScript/signPsbtWasm.js +30 -20
  94. package/dist/esm/transaction/fixedScript/signTransaction.d.ts +9 -0
  95. package/dist/esm/transaction/fixedScript/signTransaction.d.ts.map +1 -1
  96. package/dist/esm/transaction/fixedScript/signTransaction.js +17 -9
  97. package/dist/esm/transaction/recipient.d.ts +24 -1
  98. package/dist/esm/transaction/recipient.d.ts.map +1 -1
  99. package/dist/esm/transaction/recipient.js +32 -4
  100. package/dist/esm/transaction/signTransaction.d.ts +12 -0
  101. package/dist/esm/transaction/signTransaction.d.ts.map +1 -1
  102. package/dist/esm/transaction/signTransaction.js +15 -8
  103. package/package.json +6 -6
@@ -1,5 +1,6 @@
1
1
  import { fixedScriptWallet } from '@bitgo/wasm-utxo';
2
2
  import type { UnifiedRecipientPreference } from '@bitgo/sdk-core';
3
+ import type { AddressCodec } from '../../transaction/recipient';
3
4
  import { ZcashCoinName } from './types';
4
5
  /**
5
6
  * How a recipient parsed from a Zcash PSBT is spent.
@@ -61,7 +62,7 @@ export interface PsbtRecipient {
61
62
  * and `unifiedAddress` report it verbatim. Opaque outputs with no address (e.g. OP_RETURN) are
62
63
  * skipped, as they carry no recipient.
63
64
  */
64
- export declare function resolvePsbtRecipients(psbt: fixedScriptWallet.ZcashBitGoPsbt, walletKeys: fixedScriptWallet.RootWalletKeys): PsbtRecipient[];
65
+ export declare function resolvePsbtRecipients(psbt: fixedScriptWallet.ZcashBitGoPsbt, walletKeys: fixedScriptWallet.RootWalletKeys, addressCodec: AddressCodec): PsbtRecipient[];
65
66
  /**
66
67
  * Infer the Unified-Address recipient preference for a Zcash transaction when the caller did
67
68
  * not pass one — the counterpart of wallet-platform's utxo-core `buildTransaction`
@@ -1 +1 @@
1
- {"version":3,"file":"recipients.d.ts","sourceRoot":"","sources":["../../../../../src/impl/zec/recipients.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAgB,MAAM,kBAAkB,CAAC;AACnE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAIlE,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC;;;;;;;;GAQG;AACH,MAAM,MAAM,wBAAwB,GAChC;IACE,IAAI,EAAE,eAAe,CAAC;IACtB;;;;OAIG;IACH,cAAc,EAAE,MAAM,CAAC;CACxB,GACD;IACE,IAAI,EAAE,yBAAyB,CAAC;IAChC,+EAA+E;IAC/E,cAAc,EAAE,MAAM,CAAC;CACxB,GACD;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC;AAE5B,yEAAyE;AACzE,MAAM,WAAW,aAAa;IAC5B,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,MAAM,EAAE,UAAU,CAAC;IACnB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,wBAAwB,CAAC;CACvC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,iBAAiB,CAAC,cAAc,EACtC,UAAU,EAAE,iBAAiB,CAAC,cAAc,GAC3C,aAAa,EAAE,CAgCjB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,aAAa,EACnB,UAAU,EAAE;IAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,EAAE,GAC5C,0BAA0B,GAAG,SAAS,CA0BxC"}
1
+ {"version":3,"file":"recipients.d.ts","sourceRoot":"","sources":["../../../../../src/impl/zec/recipients.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAgB,MAAM,kBAAkB,CAAC;AACnE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAGlE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC;;;;;;;;GAQG;AACH,MAAM,MAAM,wBAAwB,GAChC;IACE,IAAI,EAAE,eAAe,CAAC;IACtB;;;;OAIG;IACH,cAAc,EAAE,MAAM,CAAC;CACxB,GACD;IACE,IAAI,EAAE,yBAAyB,CAAC;IAChC,+EAA+E;IAC/E,cAAc,EAAE,MAAM,CAAC;CACxB,GACD;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC;AAE5B,yEAAyE;AACzE,MAAM,WAAW,aAAa;IAC5B,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,MAAM,EAAE,UAAU,CAAC;IACnB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,wBAAwB,CAAC;CACvC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,iBAAiB,CAAC,cAAc,EACtC,UAAU,EAAE,iBAAiB,CAAC,cAAc,EAC5C,YAAY,EAAE,YAAY,GACzB,aAAa,EAAE,CAoCjB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,aAAa,EACnB,UAAU,EAAE;IAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,EAAE,GAC5C,0BAA0B,GAAG,SAAS,CA0BxC"}
@@ -15,7 +15,7 @@ const replayProtection_1 = require("../../transaction/fixedScript/replayProtecti
15
15
  * and `unifiedAddress` report it verbatim. Opaque outputs with no address (e.g. OP_RETURN) are
16
16
  * skipped, as they carry no recipient.
17
17
  */
18
- function resolvePsbtRecipients(psbt, walletKeys) {
18
+ function resolvePsbtRecipients(psbt, walletKeys, addressCodec) {
19
19
  const parsed = psbt.parseTransactionWithWalletKeys(walletKeys, {
20
20
  replayProtection: { publicKeys: (0, replayProtection_1.getReplayProtectionPubkeys)('zec') },
21
21
  });
@@ -29,8 +29,12 @@ function resolvePsbtRecipients(psbt, walletKeys) {
29
29
  if (output.address === null) {
30
30
  return;
31
31
  }
32
+ // The raw parsed receiver/script is authoritative; proprietary Unified Address metadata
33
+ // must match it before it is exposed to callers.
34
+ if (!addressCodec.isMatchingScript(output)) {
35
+ throw new Error(`Output ${i} address ${output.address} does not match its raw recipient`);
36
+ }
32
37
  // The original client-passed Unified Address, stored verbatim in the PSBT's key-value
33
- // pairs: the orchard PCZT for a shielded output (parsed `address` reports it in full), the
34
38
  // transparent-output proprietary map for a v4 transparent output.
35
39
  const unifiedAddress = output.isShielded ? output.address : psbt.transparentOutputUnifiedAddress(i) ?? undefined;
36
40
  recipients.push({
@@ -91,4 +95,4 @@ function getUnifiedRecipientPreference(name, recipients) {
91
95
  }
92
96
  return hasShielded ? 'shielded' : undefined;
93
97
  }
94
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjaXBpZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9pbXBsL3plYy9yZWNpcGllbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBc0VBLHNEQW1DQztBQW1CRCxzRUE2QkM7QUF6SkQsZ0RBQW1FO0FBR25FLHFGQUE0RjtBQXdENUY7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQWdCLHFCQUFxQixDQUNuQyxJQUFzQyxFQUN0QyxVQUE0QztJQUU1QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsOEJBQThCLENBQUMsVUFBVSxFQUFFO1FBQzdELGdCQUFnQixFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUEsNkNBQTBCLEVBQUMsS0FBSyxDQUFDLEVBQUU7S0FDcEUsQ0FBQyxDQUFDO0lBRUgsTUFBTSxVQUFVLEdBQW9CLEVBQUUsQ0FBQztJQUN2QyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNuQyxpQ0FBaUM7UUFDakMsSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzdCLE9BQU87UUFDVCxDQUFDO1FBQ0QsOERBQThEO1FBQzlELElBQUksTUFBTSxDQUFDLE9BQU8sS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUM1QixPQUFPO1FBQ1QsQ0FBQztRQUNELHNGQUFzRjtRQUN0RiwyRkFBMkY7UUFDM0Ysa0VBQWtFO1FBQ2xFLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUM7UUFDakgsVUFBVSxDQUFDLElBQUksQ0FBQztZQUNkLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSztZQUNwQixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87WUFDdkIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1lBQ3JCLGNBQWM7WUFDZCxXQUFXLEVBQUUsTUFBTSxDQUFDLFVBQVU7Z0JBQzVCLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Z0JBQzNELENBQUMsQ0FBQyxjQUFjO29CQUNoQixDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUseUJBQXlCLEVBQUUsY0FBYyxFQUFFO29CQUNyRCxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFO1NBQzVCLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsU0FBZ0IsNkJBQTZCLENBQzNDLElBQW1CLEVBQ25CLFVBQTZDO0lBRTdDLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtRQUNoRCxJQUFJLFNBQVMsQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDcEMscUNBQXFDO1lBQ3JDLE9BQU8sYUFBc0IsQ0FBQztRQUNoQyxDQUFDO1FBQ0Qsc0ZBQXNGO1FBQ3RGLHVGQUF1RjtRQUN2RixJQUFJLHdCQUFZLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2pFLE9BQU8sYUFBc0IsQ0FBQztRQUNoQyxDQUFDO1FBQ0Qsc0ZBQXNGO1FBQ3RGLG1GQUFtRjtRQUNuRixzQkFBc0I7UUFDdEIsTUFBTSxPQUFPLEdBQUcsNkJBQWlCLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckYsSUFBSSxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMvQixPQUFPLFVBQW1CLENBQUM7UUFDN0IsQ0FBQztRQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxTQUFTLENBQUMsT0FBTyw2Q0FBNkMsQ0FBQyxDQUFDO0lBQzdGLENBQUMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0RCxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzVELElBQUksV0FBVyxJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsNkRBQTZELENBQUMsQ0FBQztJQUNqRixDQUFDO0lBQ0QsT0FBTyxXQUFXLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQzlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmaXhlZFNjcmlwdFdhbGxldCwgemNhc2hBZGRyZXNzIH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5pbXBvcnQgdHlwZSB7IFVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcblxuaW1wb3J0IHsgZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmtleXMgfSBmcm9tICcuLi8uLi90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9yZXBsYXlQcm90ZWN0aW9uJztcblxuaW1wb3J0IHsgWmNhc2hDb2luTmFtZSB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIEhvdyBhIHJlY2lwaWVudCBwYXJzZWQgZnJvbSBhIFpjYXNoIFBTQlQgaXMgc3BlbnQuXG4gKlxuICogVGhlIGRlY29kZS1zaWRlIGNvdW50ZXJwYXJ0IG9mIHV0eG8tY29yZSdzIGBidWlsZFRyYW5zYWN0aW9uL3pjYXNoLnRzYCBgWmNhc2hEZXN0aW5hdGlvbmAgb25cbiAqIHRoZSBidWlsZCBzaWRlOiBhIHNoaWVsZGVkIHJlY2lwaWVudCBpcyBhbiBPcmNoYXJkL0lyb253b29kIG91dHB1dCBzdG9yZWQgaW4gdGhlIHY2IChJcm9ud29vZClcbiAqIFBTQlQncyBvcmNoYXJkIFBDWlQsIGFuZCBldmVyeXRoaW5nIGVsc2UgaXMgYW4gb3JkaW5hcnkgdHJhbnNwYXJlbnQgb3V0cHV0LiBBIHRyYW5zcGFyZW50XG4gKiBvdXRwdXQgcmVzb2x2ZWQgZnJvbSBhIFVuaWZpZWQgQWRkcmVzcyBjYXJyaWVzIHRoYXQgb3JpZ2luYWwgVUEgKGB6Y2FzaFVuaWZpZWRUcmFuc3BhcmVudGApLCBhXG4gKiBwbGFpbiBhZGRyZXNzIGRvZXMgbm90LlxuICovXG5leHBvcnQgdHlwZSBQc2J0UmVjaXBpZW50RGVzdGluYXRpb24gPVxuICB8IHtcbiAgICAgIGtpbmQ6ICd6Y2FzaFNoaWVsZGVkJztcbiAgICAgIC8qKlxuICAgICAgICogVGhlIFVuaWZpZWQgQWRkcmVzcyB0aGUgb3V0cHV0IHdhcyBhZGRyZXNzZWQgdG8g4oCUIHRoZSBvcmlnaW5hbCBtdWx0aS1yZWNlaXZlciBVQSB0aGVcbiAgICAgICAqIGNsaWVudCBwYXNzZWQgd2hlbiB0aGUgUFNCVCBzdG9yZXMgb25lIHZlcmJhdGltLCBvdGhlcndpc2UgYSByZS1lbmNvZGVkIHNpbmdsZS1yZWNlaXZlclxuICAgICAgICogT3JjaGFyZCBVQS5cbiAgICAgICAqL1xuICAgICAgdW5pZmllZEFkZHJlc3M6IHN0cmluZztcbiAgICB9XG4gIHwge1xuICAgICAga2luZDogJ3pjYXNoVW5pZmllZFRyYW5zcGFyZW50JztcbiAgICAgIC8qKiBUaGUgb3JpZ2luYWwgVW5pZmllZCBBZGRyZXNzIHRoZSB0cmFuc3BhcmVudCByZWNlaXZlciB3YXMgcmVzb2x2ZWQgZnJvbS4gKi9cbiAgICAgIHVuaWZpZWRBZGRyZXNzOiBzdHJpbmc7XG4gICAgfVxuICB8IHsga2luZDogJ3RyYW5zcGFyZW50JyB9O1xuXG4vKiogQSByZWNpcGllbnQgcmVzb2x2ZWQgZnJvbSBhIGRlY29kZWQgWmNhc2ggUFNCVCdzIGV4dGVybmFsIG91dHB1dHMuICovXG5leHBvcnQgaW50ZXJmYWNlIFBzYnRSZWNpcGllbnQge1xuICAvKiogQW1vdW50IGluIHNhdG9zaGlzLiAqL1xuICBhbW91bnQ6IGJpZ2ludDtcbiAgLyoqXG4gICAqIFRoZSByZWNpcGllbnQgYWRkcmVzcy4gRm9yIGEgc2hpZWxkZWQgb3V0cHV0IHRoaXMgaXMgdGhlIFVuaWZpZWQgQWRkcmVzcyB0aGUgb3V0cHV0IHdhc1xuICAgKiBhZGRyZXNzZWQgdG8g4oCUIHRoZSBvcmlnaW5hbCBtdWx0aS1yZWNlaXZlciBVQSB3aGVuIHRoZSBQU0JUIHN0b3JlcyBvbmUgdmVyYmF0aW0sIG90aGVyd2lzZSBhXG4gICAqIHJlLWVuY29kZWQgc2luZ2xlLXJlY2VpdmVyIE9yY2hhcmQgVUEuIEZvciBhIHRyYW5zcGFyZW50IG91dHB1dCBpdCBpcyB0aGUgb3JpZ2luYWwgVW5pZmllZFxuICAgKiBBZGRyZXNzIHdoZW4gb25lIHdhcyBzdG9yZWQsIGVsc2UgdGhlIGRlY29kZWQgdHJhbnNwYXJlbnQgYWRkcmVzcy5cbiAgICovXG4gIGFkZHJlc3M6IHN0cmluZztcbiAgLyoqXG4gICAqIFJhdyByZWNlaXZlciBieXRlczogdGhlIDQzLWJ5dGUgT3JjaGFyZC9Jcm9ud29vZCByZWNlaXZlciBmb3IgYSBzaGllbGRlZCBvdXRwdXQsIHRoZVxuICAgKiBzY3JpcHRQdWJLZXkgZm9yIGEgdHJhbnNwYXJlbnQgb25lLlxuICAgKi9cbiAgc2NyaXB0OiBVaW50OEFycmF5O1xuICAvKipcbiAgICogVGhlIG9yaWdpbmFsIFVuaWZpZWQgQWRkcmVzcyB0aGUgY2xpZW50IHN1cHBsaWVkIGZvciB0aGlzIHJlY2lwaWVudCwgd2hlbiB0aGUgUFNCVCBzdG9yZXNcbiAgICogb25lOiB0aGUgdjYgKElyb253b29kKSBQQ1pUIGZvciBhIHNoaWVsZGVkIG91dHB1dCwgdGhlIHRyYW5zcGFyZW50LW91dHB1dCBwcm9wcmlldGFyeVxuICAgKiBrZXktdmFsdWUgbWFwIGZvciBhIHY0IHRyYW5zcGFyZW50IG91dHB1dC4gYHVuZGVmaW5lZGAgd2hlbiB0aGUgcmVjaXBpZW50IHdhcyBidWlsdCBmcm9tIGFcbiAgICogcGxhaW4gYWRkcmVzcy5cbiAgICovXG4gIHVuaWZpZWRBZGRyZXNzPzogc3RyaW5nO1xuICBkZXN0aW5hdGlvbjogUHNidFJlY2lwaWVudERlc3RpbmF0aW9uO1xufVxuXG4vKipcbiAqIFJlc29sdmUgdGhlIHJlY2lwaWVudCBsaXN0IG9mIGEgZGVjb2RlZCBaY2FzaCBQU0JUICh2NCBTYXBsaW5nLXNoYXBlZCBvciB2NiBJcm9ud29vZCkuXG4gKlxuICogTWlycm9ycyB0aGUgcmVjaXBpZW50IHJlc29sdXRpb24gb2Ygd2FsbGV0LXBsYXRmb3JtJ3MgdXR4by1jb3JlIGBidWlsZFRyYW5zYWN0aW9uYCBpbiB0aGVcbiAqIGRlY29kZSBkaXJlY3Rpb246IGV2ZXJ5IG5vbi13YWxsZXQgb3V0cHV0IHdpdGggYSByZXNvbHZhYmxlIGFkZHJlc3MgaXMgYSByZWNpcGllbnQuIEFcbiAqIHNoaWVsZGVkIG91dHB1dCBwYXJzZXMgd2l0aCBgaXNTaGllbGRlZDogdHJ1ZWAsIGl0cyBgc2NyaXB0YCBiZWluZyB0aGUgcmF3IDQzLWJ5dGUgcmVjZWl2ZXI7XG4gKiB3aGVuIHRoZSBidWlsZCBzdG9yZWQgdGhlIGNsaWVudCdzIG9yaWdpbmFsIFVuaWZpZWQgQWRkcmVzcyAodGhlIHY2IFBDWlQgZm9yIHNoaWVsZGVkXG4gKiBvdXRwdXRzLCB0aGUgdHJhbnNwYXJlbnQtb3V0cHV0IHByb3ByaWV0YXJ5IGtleS12YWx1ZSBtYXAgZm9yIHY0KSwgYm90aCB0aGUgcGFyc2VkIGFkZHJlc3NcbiAqIGFuZCBgdW5pZmllZEFkZHJlc3NgIHJlcG9ydCBpdCB2ZXJiYXRpbS4gT3BhcXVlIG91dHB1dHMgd2l0aCBubyBhZGRyZXNzIChlLmcuIE9QX1JFVFVSTikgYXJlXG4gKiBza2lwcGVkLCBhcyB0aGV5IGNhcnJ5IG5vIHJlY2lwaWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQc2J0UmVjaXBpZW50cyhcbiAgcHNidDogZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hCaXRHb1BzYnQsXG4gIHdhbGxldEtleXM6IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzXG4pOiBQc2J0UmVjaXBpZW50W10ge1xuICBjb25zdCBwYXJzZWQgPSBwc2J0LnBhcnNlVHJhbnNhY3Rpb25XaXRoV2FsbGV0S2V5cyh3YWxsZXRLZXlzLCB7XG4gICAgcmVwbGF5UHJvdGVjdGlvbjogeyBwdWJsaWNLZXlzOiBnZXRSZXBsYXlQcm90ZWN0aW9uUHVia2V5cygnemVjJykgfSxcbiAgfSk7XG5cbiAgY29uc3QgcmVjaXBpZW50czogUHNidFJlY2lwaWVudFtdID0gW107XG4gIHBhcnNlZC5vdXRwdXRzLmZvckVhY2goKG91dHB1dCwgaSkgPT4ge1xuICAgIC8vIFdhbGxldC1vd25lZCAoY2hhbmdlKSBvdXRwdXRzLlxuICAgIGlmIChvdXRwdXQuc2NyaXB0SWQgIT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gT3BhcXVlIG91dHB1dHMgKGUuZy4gT1BfUkVUVVJOKSBjYXJyeSBubyByZWNpcGllbnQgYWRkcmVzcy5cbiAgICBpZiAob3V0cHV0LmFkZHJlc3MgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gVGhlIG9yaWdpbmFsIGNsaWVudC1wYXNzZWQgVW5pZmllZCBBZGRyZXNzLCBzdG9yZWQgdmVyYmF0aW0gaW4gdGhlIFBTQlQncyBrZXktdmFsdWVcbiAgICAvLyBwYWlyczogdGhlIG9yY2hhcmQgUENaVCBmb3IgYSBzaGllbGRlZCBvdXRwdXQgKHBhcnNlZCBgYWRkcmVzc2AgcmVwb3J0cyBpdCBpbiBmdWxsKSwgdGhlXG4gICAgLy8gdHJhbnNwYXJlbnQtb3V0cHV0IHByb3ByaWV0YXJ5IG1hcCBmb3IgYSB2NCB0cmFuc3BhcmVudCBvdXRwdXQuXG4gICAgY29uc3QgdW5pZmllZEFkZHJlc3MgPSBvdXRwdXQuaXNTaGllbGRlZCA/IG91dHB1dC5hZGRyZXNzIDogcHNidC50cmFuc3BhcmVudE91dHB1dFVuaWZpZWRBZGRyZXNzKGkpID8/IHVuZGVmaW5lZDtcbiAgICByZWNpcGllbnRzLnB1c2goe1xuICAgICAgYW1vdW50OiBvdXRwdXQudmFsdWUsXG4gICAgICBhZGRyZXNzOiBvdXRwdXQuYWRkcmVzcyxcbiAgICAgIHNjcmlwdDogb3V0cHV0LnNjcmlwdCxcbiAgICAgIHVuaWZpZWRBZGRyZXNzLFxuICAgICAgZGVzdGluYXRpb246IG91dHB1dC5pc1NoaWVsZGVkXG4gICAgICAgID8geyBraW5kOiAnemNhc2hTaGllbGRlZCcsIHVuaWZpZWRBZGRyZXNzOiBvdXRwdXQuYWRkcmVzcyB9XG4gICAgICAgIDogdW5pZmllZEFkZHJlc3NcbiAgICAgICAgPyB7IGtpbmQ6ICd6Y2FzaFVuaWZpZWRUcmFuc3BhcmVudCcsIHVuaWZpZWRBZGRyZXNzIH1cbiAgICAgICAgOiB7IGtpbmQ6ICd0cmFuc3BhcmVudCcgfSxcbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiByZWNpcGllbnRzO1xufVxuXG4vKipcbiAqIEluZmVyIHRoZSBVbmlmaWVkLUFkZHJlc3MgcmVjaXBpZW50IHByZWZlcmVuY2UgZm9yIGEgWmNhc2ggdHJhbnNhY3Rpb24gd2hlbiB0aGUgY2FsbGVyIGRpZFxuICogbm90IHBhc3Mgb25lIOKAlCB0aGUgY291bnRlcnBhcnQgb2Ygd2FsbGV0LXBsYXRmb3JtJ3MgdXR4by1jb3JlIGBidWlsZFRyYW5zYWN0aW9uYFxuICogYGNsYXNzaWZ5UmVjaXBpZW50U2hpZWxkZWRuZXNzYC5cbiAqXG4gKiBBIHJlY2lwaWVudCB0aGF0IHJlc29sdmVzIHRvIGEgdHJhbnNwYXJlbnQgb3V0cHV0IOKAlCBhbiBvcmRpbmFyeSB0cmFuc3BhcmVudCBhZGRyZXNzLCBvciBhXG4gKiBVbmlmaWVkIEFkZHJlc3MgY2FycnlpbmcgYSB0cmFuc3BhcmVudCByZWNlaXZlciDigJQgaXMgY2xhc3NpZmllZCBgJ3RyYW5zcGFyZW50J2A7IGEgVW5pZmllZFxuICogQWRkcmVzcyBjYXJyeWluZyBvbmx5IGFuIE9yY2hhcmQvSXJvbndvb2QgcmVjZWl2ZXIgaXMgY2xhc3NpZmllZCBgJ3NoaWVsZGVkJ2AuIEEgbWl4IG9mXG4gKiBzaGllbGRlZCBhbmQgdHJhbnNwYXJlbnQgcmVjaXBpZW50cyBpcyByZWplY3RlZC4gQW4gYWRkcmVzcyB0aGF0IGlzIG5laXRoZXIgYSB0cmFuc3BhcmVudFxuICogYWRkcmVzcyBub3IgYSBVbmlmaWVkIEFkZHJlc3MgcHJvcGFnYXRlcyB0aGUgVW5pZmllZC1BZGRyZXNzIHBhcnNlIGVycm9yIOKAlCBpdCBpcyBub3RcbiAqIHNpbGVudGx5IGRlZmF1bHRlZCB0byBgJ3RyYW5zcGFyZW50J2AuXG4gKlxuICogQHJldHVybnMgYCdzaGllbGRlZCdgIHdoZW4gZXZlcnkgcmVjaXBpZW50IHJlc29sdmVzIHNoaWVsZGVkLCBgdW5kZWZpbmVkYCB3aGVuIGV2ZXJ5XG4gKiAgIHJlY2lwaWVudCByZXNvbHZlcyB0cmFuc3BhcmVudCAodGhlIGJ1aWxkJ3MgZGVmYXVsdCkuIFRoZSBgJ3RyYW5zcGFyZW50J2AgYXJtIG9mIHRoZVxuICogICByZXR1cm4gdHlwZSBleGlzdHMgc28gY2FsbGVycyBjYW4gcGFzcyB0aGUgZXhwbGljaXQgcHJlZmVyZW5jZSB0aHJvdWdoIHVuY2hhbmdlZDsgdGhpc1xuICogICBmdW5jdGlvbiBpdHNlbGYgbmV2ZXIgcmV0dXJucyBgJ3RyYW5zcGFyZW50J2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRVbmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZShcbiAgbmFtZTogWmNhc2hDb2luTmFtZSxcbiAgcmVjaXBpZW50czogeyBhZGRyZXNzOiBzdHJpbmcgfCB1bmRlZmluZWQgfVtdXG4pOiBVbmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNoaWVsZGVkbmVzcyA9IHJlY2lwaWVudHMubWFwKChyZWNpcGllbnQpID0+IHtcbiAgICBpZiAocmVjaXBpZW50LmFkZHJlc3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gUmF3IHNjcmlwdCBpbmhlcmVudGx5IHRyYW5zcGFyZW50LlxuICAgICAgcmV0dXJuICd0cmFuc3BhcmVudCcgYXMgY29uc3Q7XG4gICAgfVxuICAgIC8vIE9yZGluYXJ5IHRyYW5zcGFyZW50IGFkZHJlc3MsIG9yIGEgVW5pZmllZCBBZGRyZXNzIGNhcnJ5aW5nIGEgdHJhbnNwYXJlbnQgcmVjZWl2ZXI6XG4gICAgLy8gcmVzb2x2ZXMgdHJhbnNwYXJlbnRseSBlaXRoZXIgd2F5ICh0aGUgYnVpbGQncyBkZWZhdWx0IHdoZW4gbm8gcHJlZmVyZW5jZSBpcyBnaXZlbikuXG4gICAgaWYgKHpjYXNoQWRkcmVzcy5oYXNUcmFuc3BhcmVudFJlY2VpdmVyKHJlY2lwaWVudC5hZGRyZXNzLCBuYW1lKSkge1xuICAgICAgcmV0dXJuICd0cmFuc3BhcmVudCcgYXMgY29uc3Q7XG4gICAgfVxuICAgIC8vIEEgc2hpZWxkZWQgKE9yY2hhcmQvSXJvbndvb2Qtb25seSkgVW5pZmllZCBBZGRyZXNzIGlzIHRoZSBvbmx5IHJlbWFpbmluZyByZXNvbHZhYmxlXG4gICAgLy8gZm9ybS4gQW4gYWRkcmVzcyB0aGF0IGlzIG5vbmUgb2YgdGhlIGFib3ZlIHByb3BhZ2F0ZXMgdGhlIHBhcnNlIGVycm9yIGluc3RlYWQgb2ZcbiAgICAvLyBhc3N1bWluZyBhIGRlZmF1bHQuXG4gICAgY29uc3QgdW5pZmllZCA9IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoVW5pZmllZEFkZHJlc3MucGFyc2UocmVjaXBpZW50LmFkZHJlc3MsIG5hbWUpO1xuICAgIGlmICh1bmlmaWVkLmhhc09yY2hhcmRSZWNlaXZlcikge1xuICAgICAgcmV0dXJuICdzaGllbGRlZCcgYXMgY29uc3Q7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgYWRkcmVzcyAke3JlY2lwaWVudC5hZGRyZXNzfSBjYXJyaWVzIG5vIHRyYW5zcGFyZW50IG9yIE9yY2hhcmQgcmVjZWl2ZXJgKTtcbiAgfSk7XG4gIGNvbnN0IGhhc1NoaWVsZGVkID0gc2hpZWxkZWRuZXNzLmluY2x1ZGVzKCdzaGllbGRlZCcpO1xuICBjb25zdCBoYXNUcmFuc3BhcmVudCA9IHNoaWVsZGVkbmVzcy5pbmNsdWRlcygndHJhbnNwYXJlbnQnKTtcbiAgaWYgKGhhc1NoaWVsZGVkICYmIGhhc1RyYW5zcGFyZW50KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNaXhlZCBzaGllbGRlZCBhbmQgdHJhbnNwYXJlbnQgcmVjaXBpZW50cyBhcmUgbm90IHN1cHBvcnRlZCcpO1xuICB9XG4gIHJldHVybiBoYXNTaGllbGRlZCA/ICdzaGllbGRlZCcgOiB1bmRlZmluZWQ7XG59XG4iXX0=
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjaXBpZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9pbXBsL3plYy9yZWNpcGllbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBdUVBLHNEQXdDQztBQW1CRCxzRUE2QkM7QUEvSkQsZ0RBQW1FO0FBR25FLHFGQUE0RjtBQXlENUY7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQWdCLHFCQUFxQixDQUNuQyxJQUFzQyxFQUN0QyxVQUE0QyxFQUM1QyxZQUEwQjtJQUUxQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsOEJBQThCLENBQUMsVUFBVSxFQUFFO1FBQzdELGdCQUFnQixFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUEsNkNBQTBCLEVBQUMsS0FBSyxDQUFDLEVBQUU7S0FDcEUsQ0FBQyxDQUFDO0lBRUgsTUFBTSxVQUFVLEdBQW9CLEVBQUUsQ0FBQztJQUN2QyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNuQyxpQ0FBaUM7UUFDakMsSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzdCLE9BQU87UUFDVCxDQUFDO1FBQ0QsOERBQThEO1FBQzlELElBQUksTUFBTSxDQUFDLE9BQU8sS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUM1QixPQUFPO1FBQ1QsQ0FBQztRQUNELHdGQUF3RjtRQUN4RixpREFBaUQ7UUFDakQsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzNDLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLFlBQVksTUFBTSxDQUFDLE9BQU8sbUNBQW1DLENBQUMsQ0FBQztRQUM1RixDQUFDO1FBQ0Qsc0ZBQXNGO1FBQ3RGLGtFQUFrRTtRQUNsRSxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsK0JBQStCLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDO1FBQ2pILFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDZCxNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUs7WUFDcEIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO1lBQ3ZCLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtZQUNyQixjQUFjO1lBQ2QsV0FBVyxFQUFFLE1BQU0sQ0FBQyxVQUFVO2dCQUM1QixDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFO2dCQUMzRCxDQUFDLENBQUMsY0FBYztvQkFDaEIsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLHlCQUF5QixFQUFFLGNBQWMsRUFBRTtvQkFDckQsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRTtTQUM1QixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILFNBQWdCLDZCQUE2QixDQUMzQyxJQUFtQixFQUNuQixVQUE2QztJQUU3QyxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7UUFDaEQsSUFBSSxTQUFTLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3BDLHFDQUFxQztZQUNyQyxPQUFPLGFBQXNCLENBQUM7UUFDaEMsQ0FBQztRQUNELHNGQUFzRjtRQUN0Rix1RkFBdUY7UUFDdkYsSUFBSSx3QkFBWSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNqRSxPQUFPLGFBQXNCLENBQUM7UUFDaEMsQ0FBQztRQUNELHNGQUFzRjtRQUN0RixtRkFBbUY7UUFDbkYsc0JBQXNCO1FBQ3RCLE1BQU0sT0FBTyxHQUFHLDZCQUFpQixDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3JGLElBQUksT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDL0IsT0FBTyxVQUFtQixDQUFDO1FBQzdCLENBQUM7UUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsU0FBUyxDQUFDLE9BQU8sNkNBQTZDLENBQUMsQ0FBQztJQUM3RixDQUFDLENBQUMsQ0FBQztJQUNILE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdEQsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM1RCxJQUFJLFdBQVcsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLDZEQUE2RCxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUNELE9BQU8sV0FBVyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUM5QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZml4ZWRTY3JpcHRXYWxsZXQsIHpjYXNoQWRkcmVzcyB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuaW1wb3J0IHR5cGUgeyBVbmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5cbmltcG9ydCB7IGdldFJlcGxheVByb3RlY3Rpb25QdWJrZXlzIH0gZnJvbSAnLi4vLi4vdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvcmVwbGF5UHJvdGVjdGlvbic7XG5pbXBvcnQgdHlwZSB7IEFkZHJlc3NDb2RlYyB9IGZyb20gJy4uLy4uL3RyYW5zYWN0aW9uL3JlY2lwaWVudCc7XG5cbmltcG9ydCB7IFpjYXNoQ29pbk5hbWUgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBIb3cgYSByZWNpcGllbnQgcGFyc2VkIGZyb20gYSBaY2FzaCBQU0JUIGlzIHNwZW50LlxuICpcbiAqIFRoZSBkZWNvZGUtc2lkZSBjb3VudGVycGFydCBvZiB1dHhvLWNvcmUncyBgYnVpbGRUcmFuc2FjdGlvbi96Y2FzaC50c2AgYFpjYXNoRGVzdGluYXRpb25gIG9uXG4gKiB0aGUgYnVpbGQgc2lkZTogYSBzaGllbGRlZCByZWNpcGllbnQgaXMgYW4gT3JjaGFyZC9Jcm9ud29vZCBvdXRwdXQgc3RvcmVkIGluIHRoZSB2NiAoSXJvbndvb2QpXG4gKiBQU0JUJ3Mgb3JjaGFyZCBQQ1pULCBhbmQgZXZlcnl0aGluZyBlbHNlIGlzIGFuIG9yZGluYXJ5IHRyYW5zcGFyZW50IG91dHB1dC4gQSB0cmFuc3BhcmVudFxuICogb3V0cHV0IHJlc29sdmVkIGZyb20gYSBVbmlmaWVkIEFkZHJlc3MgY2FycmllcyB0aGF0IG9yaWdpbmFsIFVBIChgemNhc2hVbmlmaWVkVHJhbnNwYXJlbnRgKSwgYVxuICogcGxhaW4gYWRkcmVzcyBkb2VzIG5vdC5cbiAqL1xuZXhwb3J0IHR5cGUgUHNidFJlY2lwaWVudERlc3RpbmF0aW9uID1cbiAgfCB7XG4gICAgICBraW5kOiAnemNhc2hTaGllbGRlZCc7XG4gICAgICAvKipcbiAgICAgICAqIFRoZSBVbmlmaWVkIEFkZHJlc3MgdGhlIG91dHB1dCB3YXMgYWRkcmVzc2VkIHRvIOKAlCB0aGUgb3JpZ2luYWwgbXVsdGktcmVjZWl2ZXIgVUEgdGhlXG4gICAgICAgKiBjbGllbnQgcGFzc2VkIHdoZW4gdGhlIFBTQlQgc3RvcmVzIG9uZSB2ZXJiYXRpbSwgb3RoZXJ3aXNlIGEgcmUtZW5jb2RlZCBzaW5nbGUtcmVjZWl2ZXJcbiAgICAgICAqIE9yY2hhcmQgVUEuXG4gICAgICAgKi9cbiAgICAgIHVuaWZpZWRBZGRyZXNzOiBzdHJpbmc7XG4gICAgfVxuICB8IHtcbiAgICAgIGtpbmQ6ICd6Y2FzaFVuaWZpZWRUcmFuc3BhcmVudCc7XG4gICAgICAvKiogVGhlIG9yaWdpbmFsIFVuaWZpZWQgQWRkcmVzcyB0aGUgdHJhbnNwYXJlbnQgcmVjZWl2ZXIgd2FzIHJlc29sdmVkIGZyb20uICovXG4gICAgICB1bmlmaWVkQWRkcmVzczogc3RyaW5nO1xuICAgIH1cbiAgfCB7IGtpbmQ6ICd0cmFuc3BhcmVudCcgfTtcblxuLyoqIEEgcmVjaXBpZW50IHJlc29sdmVkIGZyb20gYSBkZWNvZGVkIFpjYXNoIFBTQlQncyBleHRlcm5hbCBvdXRwdXRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQc2J0UmVjaXBpZW50IHtcbiAgLyoqIEFtb3VudCBpbiBzYXRvc2hpcy4gKi9cbiAgYW1vdW50OiBiaWdpbnQ7XG4gIC8qKlxuICAgKiBUaGUgcmVjaXBpZW50IGFkZHJlc3MuIEZvciBhIHNoaWVsZGVkIG91dHB1dCB0aGlzIGlzIHRoZSBVbmlmaWVkIEFkZHJlc3MgdGhlIG91dHB1dCB3YXNcbiAgICogYWRkcmVzc2VkIHRvIOKAlCB0aGUgb3JpZ2luYWwgbXVsdGktcmVjZWl2ZXIgVUEgd2hlbiB0aGUgUFNCVCBzdG9yZXMgb25lIHZlcmJhdGltLCBvdGhlcndpc2UgYVxuICAgKiByZS1lbmNvZGVkIHNpbmdsZS1yZWNlaXZlciBPcmNoYXJkIFVBLiBGb3IgYSB0cmFuc3BhcmVudCBvdXRwdXQgaXQgaXMgdGhlIG9yaWdpbmFsIFVuaWZpZWRcbiAgICogQWRkcmVzcyB3aGVuIG9uZSB3YXMgc3RvcmVkLCBlbHNlIHRoZSBkZWNvZGVkIHRyYW5zcGFyZW50IGFkZHJlc3MuXG4gICAqL1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBSYXcgcmVjZWl2ZXIgYnl0ZXM6IHRoZSA0My1ieXRlIE9yY2hhcmQvSXJvbndvb2QgcmVjZWl2ZXIgZm9yIGEgc2hpZWxkZWQgb3V0cHV0LCB0aGVcbiAgICogc2NyaXB0UHViS2V5IGZvciBhIHRyYW5zcGFyZW50IG9uZS5cbiAgICovXG4gIHNjcmlwdDogVWludDhBcnJheTtcbiAgLyoqXG4gICAqIFRoZSBvcmlnaW5hbCBVbmlmaWVkIEFkZHJlc3MgdGhlIGNsaWVudCBzdXBwbGllZCBmb3IgdGhpcyByZWNpcGllbnQsIHdoZW4gdGhlIFBTQlQgc3RvcmVzXG4gICAqIG9uZTogdGhlIHY2IChJcm9ud29vZCkgUENaVCBmb3IgYSBzaGllbGRlZCBvdXRwdXQsIHRoZSB0cmFuc3BhcmVudC1vdXRwdXQgcHJvcHJpZXRhcnlcbiAgICoga2V5LXZhbHVlIG1hcCBmb3IgYSB2NCB0cmFuc3BhcmVudCBvdXRwdXQuIGB1bmRlZmluZWRgIHdoZW4gdGhlIHJlY2lwaWVudCB3YXMgYnVpbHQgZnJvbSBhXG4gICAqIHBsYWluIGFkZHJlc3MuXG4gICAqL1xuICB1bmlmaWVkQWRkcmVzcz86IHN0cmluZztcbiAgZGVzdGluYXRpb246IFBzYnRSZWNpcGllbnREZXN0aW5hdGlvbjtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSByZWNpcGllbnQgbGlzdCBvZiBhIGRlY29kZWQgWmNhc2ggUFNCVCAodjQgU2FwbGluZy1zaGFwZWQgb3IgdjYgSXJvbndvb2QpLlxuICpcbiAqIE1pcnJvcnMgdGhlIHJlY2lwaWVudCByZXNvbHV0aW9uIG9mIHdhbGxldC1wbGF0Zm9ybSdzIHV0eG8tY29yZSBgYnVpbGRUcmFuc2FjdGlvbmAgaW4gdGhlXG4gKiBkZWNvZGUgZGlyZWN0aW9uOiBldmVyeSBub24td2FsbGV0IG91dHB1dCB3aXRoIGEgcmVzb2x2YWJsZSBhZGRyZXNzIGlzIGEgcmVjaXBpZW50LiBBXG4gKiBzaGllbGRlZCBvdXRwdXQgcGFyc2VzIHdpdGggYGlzU2hpZWxkZWQ6IHRydWVgLCBpdHMgYHNjcmlwdGAgYmVpbmcgdGhlIHJhdyA0My1ieXRlIHJlY2VpdmVyO1xuICogd2hlbiB0aGUgYnVpbGQgc3RvcmVkIHRoZSBjbGllbnQncyBvcmlnaW5hbCBVbmlmaWVkIEFkZHJlc3MgKHRoZSB2NiBQQ1pUIGZvciBzaGllbGRlZFxuICogb3V0cHV0cywgdGhlIHRyYW5zcGFyZW50LW91dHB1dCBwcm9wcmlldGFyeSBrZXktdmFsdWUgbWFwIGZvciB2NCksIGJvdGggdGhlIHBhcnNlZCBhZGRyZXNzXG4gKiBhbmQgYHVuaWZpZWRBZGRyZXNzYCByZXBvcnQgaXQgdmVyYmF0aW0uIE9wYXF1ZSBvdXRwdXRzIHdpdGggbm8gYWRkcmVzcyAoZS5nLiBPUF9SRVRVUk4pIGFyZVxuICogc2tpcHBlZCwgYXMgdGhleSBjYXJyeSBubyByZWNpcGllbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUHNidFJlY2lwaWVudHMoXG4gIHBzYnQ6IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoQml0R29Qc2J0LFxuICB3YWxsZXRLZXlzOiBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cyxcbiAgYWRkcmVzc0NvZGVjOiBBZGRyZXNzQ29kZWNcbik6IFBzYnRSZWNpcGllbnRbXSB7XG4gIGNvbnN0IHBhcnNlZCA9IHBzYnQucGFyc2VUcmFuc2FjdGlvbldpdGhXYWxsZXRLZXlzKHdhbGxldEtleXMsIHtcbiAgICByZXBsYXlQcm90ZWN0aW9uOiB7IHB1YmxpY0tleXM6IGdldFJlcGxheVByb3RlY3Rpb25QdWJrZXlzKCd6ZWMnKSB9LFxuICB9KTtcblxuICBjb25zdCByZWNpcGllbnRzOiBQc2J0UmVjaXBpZW50W10gPSBbXTtcbiAgcGFyc2VkLm91dHB1dHMuZm9yRWFjaCgob3V0cHV0LCBpKSA9PiB7XG4gICAgLy8gV2FsbGV0LW93bmVkIChjaGFuZ2UpIG91dHB1dHMuXG4gICAgaWYgKG91dHB1dC5zY3JpcHRJZCAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBPcGFxdWUgb3V0cHV0cyAoZS5nLiBPUF9SRVRVUk4pIGNhcnJ5IG5vIHJlY2lwaWVudCBhZGRyZXNzLlxuICAgIGlmIChvdXRwdXQuYWRkcmVzcyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBUaGUgcmF3IHBhcnNlZCByZWNlaXZlci9zY3JpcHQgaXMgYXV0aG9yaXRhdGl2ZTsgcHJvcHJpZXRhcnkgVW5pZmllZCBBZGRyZXNzIG1ldGFkYXRhXG4gICAgLy8gbXVzdCBtYXRjaCBpdCBiZWZvcmUgaXQgaXMgZXhwb3NlZCB0byBjYWxsZXJzLlxuICAgIGlmICghYWRkcmVzc0NvZGVjLmlzTWF0Y2hpbmdTY3JpcHQob3V0cHV0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBPdXRwdXQgJHtpfSBhZGRyZXNzICR7b3V0cHV0LmFkZHJlc3N9IGRvZXMgbm90IG1hdGNoIGl0cyByYXcgcmVjaXBpZW50YCk7XG4gICAgfVxuICAgIC8vIFRoZSBvcmlnaW5hbCBjbGllbnQtcGFzc2VkIFVuaWZpZWQgQWRkcmVzcywgc3RvcmVkIHZlcmJhdGltIGluIHRoZSBQU0JUJ3Mga2V5LXZhbHVlXG4gICAgLy8gdHJhbnNwYXJlbnQtb3V0cHV0IHByb3ByaWV0YXJ5IG1hcCBmb3IgYSB2NCB0cmFuc3BhcmVudCBvdXRwdXQuXG4gICAgY29uc3QgdW5pZmllZEFkZHJlc3MgPSBvdXRwdXQuaXNTaGllbGRlZCA/IG91dHB1dC5hZGRyZXNzIDogcHNidC50cmFuc3BhcmVudE91dHB1dFVuaWZpZWRBZGRyZXNzKGkpID8/IHVuZGVmaW5lZDtcbiAgICByZWNpcGllbnRzLnB1c2goe1xuICAgICAgYW1vdW50OiBvdXRwdXQudmFsdWUsXG4gICAgICBhZGRyZXNzOiBvdXRwdXQuYWRkcmVzcyxcbiAgICAgIHNjcmlwdDogb3V0cHV0LnNjcmlwdCxcbiAgICAgIHVuaWZpZWRBZGRyZXNzLFxuICAgICAgZGVzdGluYXRpb246IG91dHB1dC5pc1NoaWVsZGVkXG4gICAgICAgID8geyBraW5kOiAnemNhc2hTaGllbGRlZCcsIHVuaWZpZWRBZGRyZXNzOiBvdXRwdXQuYWRkcmVzcyB9XG4gICAgICAgIDogdW5pZmllZEFkZHJlc3NcbiAgICAgICAgPyB7IGtpbmQ6ICd6Y2FzaFVuaWZpZWRUcmFuc3BhcmVudCcsIHVuaWZpZWRBZGRyZXNzIH1cbiAgICAgICAgOiB7IGtpbmQ6ICd0cmFuc3BhcmVudCcgfSxcbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiByZWNpcGllbnRzO1xufVxuXG4vKipcbiAqIEluZmVyIHRoZSBVbmlmaWVkLUFkZHJlc3MgcmVjaXBpZW50IHByZWZlcmVuY2UgZm9yIGEgWmNhc2ggdHJhbnNhY3Rpb24gd2hlbiB0aGUgY2FsbGVyIGRpZFxuICogbm90IHBhc3Mgb25lIOKAlCB0aGUgY291bnRlcnBhcnQgb2Ygd2FsbGV0LXBsYXRmb3JtJ3MgdXR4by1jb3JlIGBidWlsZFRyYW5zYWN0aW9uYFxuICogYGNsYXNzaWZ5UmVjaXBpZW50U2hpZWxkZWRuZXNzYC5cbiAqXG4gKiBBIHJlY2lwaWVudCB0aGF0IHJlc29sdmVzIHRvIGEgdHJhbnNwYXJlbnQgb3V0cHV0IOKAlCBhbiBvcmRpbmFyeSB0cmFuc3BhcmVudCBhZGRyZXNzLCBvciBhXG4gKiBVbmlmaWVkIEFkZHJlc3MgY2FycnlpbmcgYSB0cmFuc3BhcmVudCByZWNlaXZlciDigJQgaXMgY2xhc3NpZmllZCBgJ3RyYW5zcGFyZW50J2A7IGEgVW5pZmllZFxuICogQWRkcmVzcyBjYXJyeWluZyBvbmx5IGFuIE9yY2hhcmQvSXJvbndvb2QgcmVjZWl2ZXIgaXMgY2xhc3NpZmllZCBgJ3NoaWVsZGVkJ2AuIEEgbWl4IG9mXG4gKiBzaGllbGRlZCBhbmQgdHJhbnNwYXJlbnQgcmVjaXBpZW50cyBpcyByZWplY3RlZC4gQW4gYWRkcmVzcyB0aGF0IGlzIG5laXRoZXIgYSB0cmFuc3BhcmVudFxuICogYWRkcmVzcyBub3IgYSBVbmlmaWVkIEFkZHJlc3MgcHJvcGFnYXRlcyB0aGUgVW5pZmllZC1BZGRyZXNzIHBhcnNlIGVycm9yIOKAlCBpdCBpcyBub3RcbiAqIHNpbGVudGx5IGRlZmF1bHRlZCB0byBgJ3RyYW5zcGFyZW50J2AuXG4gKlxuICogQHJldHVybnMgYCdzaGllbGRlZCdgIHdoZW4gZXZlcnkgcmVjaXBpZW50IHJlc29sdmVzIHNoaWVsZGVkLCBgdW5kZWZpbmVkYCB3aGVuIGV2ZXJ5XG4gKiAgIHJlY2lwaWVudCByZXNvbHZlcyB0cmFuc3BhcmVudCAodGhlIGJ1aWxkJ3MgZGVmYXVsdCkuIFRoZSBgJ3RyYW5zcGFyZW50J2AgYXJtIG9mIHRoZVxuICogICByZXR1cm4gdHlwZSBleGlzdHMgc28gY2FsbGVycyBjYW4gcGFzcyB0aGUgZXhwbGljaXQgcHJlZmVyZW5jZSB0aHJvdWdoIHVuY2hhbmdlZDsgdGhpc1xuICogICBmdW5jdGlvbiBpdHNlbGYgbmV2ZXIgcmV0dXJucyBgJ3RyYW5zcGFyZW50J2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRVbmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZShcbiAgbmFtZTogWmNhc2hDb2luTmFtZSxcbiAgcmVjaXBpZW50czogeyBhZGRyZXNzOiBzdHJpbmcgfCB1bmRlZmluZWQgfVtdXG4pOiBVbmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNoaWVsZGVkbmVzcyA9IHJlY2lwaWVudHMubWFwKChyZWNpcGllbnQpID0+IHtcbiAgICBpZiAocmVjaXBpZW50LmFkZHJlc3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gUmF3IHNjcmlwdCBpbmhlcmVudGx5IHRyYW5zcGFyZW50LlxuICAgICAgcmV0dXJuICd0cmFuc3BhcmVudCcgYXMgY29uc3Q7XG4gICAgfVxuICAgIC8vIE9yZGluYXJ5IHRyYW5zcGFyZW50IGFkZHJlc3MsIG9yIGEgVW5pZmllZCBBZGRyZXNzIGNhcnJ5aW5nIGEgdHJhbnNwYXJlbnQgcmVjZWl2ZXI6XG4gICAgLy8gcmVzb2x2ZXMgdHJhbnNwYXJlbnRseSBlaXRoZXIgd2F5ICh0aGUgYnVpbGQncyBkZWZhdWx0IHdoZW4gbm8gcHJlZmVyZW5jZSBpcyBnaXZlbikuXG4gICAgaWYgKHpjYXNoQWRkcmVzcy5oYXNUcmFuc3BhcmVudFJlY2VpdmVyKHJlY2lwaWVudC5hZGRyZXNzLCBuYW1lKSkge1xuICAgICAgcmV0dXJuICd0cmFuc3BhcmVudCcgYXMgY29uc3Q7XG4gICAgfVxuICAgIC8vIEEgc2hpZWxkZWQgKE9yY2hhcmQvSXJvbndvb2Qtb25seSkgVW5pZmllZCBBZGRyZXNzIGlzIHRoZSBvbmx5IHJlbWFpbmluZyByZXNvbHZhYmxlXG4gICAgLy8gZm9ybS4gQW4gYWRkcmVzcyB0aGF0IGlzIG5vbmUgb2YgdGhlIGFib3ZlIHByb3BhZ2F0ZXMgdGhlIHBhcnNlIGVycm9yIGluc3RlYWQgb2ZcbiAgICAvLyBhc3N1bWluZyBhIGRlZmF1bHQuXG4gICAgY29uc3QgdW5pZmllZCA9IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoVW5pZmllZEFkZHJlc3MucGFyc2UocmVjaXBpZW50LmFkZHJlc3MsIG5hbWUpO1xuICAgIGlmICh1bmlmaWVkLmhhc09yY2hhcmRSZWNlaXZlcikge1xuICAgICAgcmV0dXJuICdzaGllbGRlZCcgYXMgY29uc3Q7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgYWRkcmVzcyAke3JlY2lwaWVudC5hZGRyZXNzfSBjYXJyaWVzIG5vIHRyYW5zcGFyZW50IG9yIE9yY2hhcmQgcmVjZWl2ZXJgKTtcbiAgfSk7XG4gIGNvbnN0IGhhc1NoaWVsZGVkID0gc2hpZWxkZWRuZXNzLmluY2x1ZGVzKCdzaGllbGRlZCcpO1xuICBjb25zdCBoYXNUcmFuc3BhcmVudCA9IHNoaWVsZGVkbmVzcy5pbmNsdWRlcygndHJhbnNwYXJlbnQnKTtcbiAgaWYgKGhhc1NoaWVsZGVkICYmIGhhc1RyYW5zcGFyZW50KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNaXhlZCBzaGllbGRlZCBhbmQgdHJhbnNwYXJlbnQgcmVjaXBpZW50cyBhcmUgbm90IHN1cHBvcnRlZCcpO1xuICB9XG4gIHJldHVybiBoYXNTaGllbGRlZCA/ICdzaGllbGRlZCcgOiB1bmRlZmluZWQ7XG59XG4iXX0=
@@ -0,0 +1,36 @@
1
+ import type { UtxoCoinName } from '../../names';
2
+ /**
3
+ * Platform-reported shielded address details (wallet-platform
4
+ * `coinSpecific.shielded` for Zcash Orchard/Ironwood addresses).
5
+ */
6
+ export interface ShieldedAddressDetails {
7
+ /** Receiver type, e.g. 'ironwood'. */
8
+ type?: string;
9
+ /** 11-byte hex diversifier. */
10
+ diversifier?: string;
11
+ /** 32-byte hex `pk_d`. */
12
+ pkD?: string;
13
+ /** Wallet address index the diversifier was derived from. */
14
+ diversifierIndex?: number;
15
+ }
16
+ /**
17
+ * Verify a Zcash shielded (Orchard/Ironwood) wallet address returned by the platform.
18
+ *
19
+ * Shielded custodial wallets use RedPallas threshold keys whose keychains carry no
20
+ * secp256k1 xpubs, so the address cannot be locally rederived the way fixed-script
21
+ * (transparent) addresses are (`assertFixedScriptWalletAddress` would throw reading
22
+ * `pub`). Instead, this checks the address is a well-formed Orchard Unified Address
23
+ * whose 43-byte receiver matches the diversifier and `pk_d` the platform reports in
24
+ * `coinSpecific.shielded` — i.e. the UA really encodes the reported shielded receiver.
25
+ *
26
+ * @throws {UnexpectedAddressError} if the address is not a valid Orchard UA, the
27
+ * platform-reported data is missing/malformed, or the UA's Orchard receiver does
28
+ * not match the reported diversifier/`pk_d`
29
+ */
30
+ export declare function assertShieldedWalletAddress(coinName: UtxoCoinName, params: {
31
+ address: string;
32
+ coinSpecific?: {
33
+ shielded?: ShieldedAddressDetails;
34
+ };
35
+ }): void;
36
+ //# sourceMappingURL=shieldedAddress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shieldedAddress.d.ts","sourceRoot":"","sources":["../../../../../src/impl/zec/shieldedAddress.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+BAA+B;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0BAA0B;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE;IACN,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,sBAAsB,CAAA;KAAE,CAAC;CACtD,GACA,IAAI,CAoCN"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.assertShieldedWalletAddress = assertShieldedWalletAddress;
4
+ const wasm_utxo_1 = require("@bitgo/wasm-utxo");
5
+ const sdk_core_1 = require("@bitgo/sdk-core");
6
+ /**
7
+ * Verify a Zcash shielded (Orchard/Ironwood) wallet address returned by the platform.
8
+ *
9
+ * Shielded custodial wallets use RedPallas threshold keys whose keychains carry no
10
+ * secp256k1 xpubs, so the address cannot be locally rederived the way fixed-script
11
+ * (transparent) addresses are (`assertFixedScriptWalletAddress` would throw reading
12
+ * `pub`). Instead, this checks the address is a well-formed Orchard Unified Address
13
+ * whose 43-byte receiver matches the diversifier and `pk_d` the platform reports in
14
+ * `coinSpecific.shielded` — i.e. the UA really encodes the reported shielded receiver.
15
+ *
16
+ * @throws {UnexpectedAddressError} if the address is not a valid Orchard UA, the
17
+ * platform-reported data is missing/malformed, or the UA's Orchard receiver does
18
+ * not match the reported diversifier/`pk_d`
19
+ */
20
+ function assertShieldedWalletAddress(coinName, params) {
21
+ const shielded = params.coinSpecific?.shielded;
22
+ if (!shielded?.diversifier || !shielded.pkD) {
23
+ throw new sdk_core_1.UnexpectedAddressError('address validation failure: shielded address missing diversifier or pkD');
24
+ }
25
+ const diversifier = Buffer.from(shielded.diversifier, 'hex');
26
+ const pkD = Buffer.from(shielded.pkD, 'hex');
27
+ if (diversifier.length !== 11) {
28
+ throw new sdk_core_1.UnexpectedAddressError(`address validation failure: invalid diversifier length ${diversifier.length}`);
29
+ }
30
+ if (pkD.length !== 32) {
31
+ throw new sdk_core_1.UnexpectedAddressError(`address validation failure: invalid pkD length ${pkD.length}`);
32
+ }
33
+ // Only zec/tzec produce shielded addresses, so the name is always a valid ZcashNetworkName.
34
+ const network = coinName;
35
+ let ua;
36
+ try {
37
+ ua = wasm_utxo_1.fixedScriptWallet.ZcashUnifiedAddress.parse(params.address, network);
38
+ }
39
+ catch (e) {
40
+ throw new sdk_core_1.UnexpectedAddressError(`address validation failure: not a valid unified address: ${params.address}`);
41
+ }
42
+ const orchard = ua.orchardReceiver;
43
+ if (!orchard || orchard.length !== 43) {
44
+ throw new sdk_core_1.UnexpectedAddressError('address validation failure: unified address carries no Orchard receiver');
45
+ }
46
+ const expectedReceiver = Buffer.concat([diversifier, pkD]);
47
+ if (!Buffer.from(orchard).equals(expectedReceiver)) {
48
+ throw new sdk_core_1.UnexpectedAddressError('address validation failure: unified address Orchard receiver does not match shielded coinSpecific');
49
+ }
50
+ }
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hpZWxkZWRBZGRyZXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2ltcGwvemVjL3NoaWVsZGVkQWRkcmVzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWtDQSxrRUEwQ0M7QUE1RUQsZ0RBQXFEO0FBQ3JELDhDQUF5RDtBQW1CekQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILFNBQWdCLDJCQUEyQixDQUN6QyxRQUFzQixFQUN0QixNQUdDO0lBRUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUM7SUFDL0MsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDNUMsTUFBTSxJQUFJLGlDQUFzQixDQUFDLHlFQUF5RSxDQUFDLENBQUM7SUFDOUcsQ0FBQztJQUVELE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM3RCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDN0MsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQzlCLE1BQU0sSUFBSSxpQ0FBc0IsQ0FBQywwREFBMEQsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDbkgsQ0FBQztJQUNELElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUN0QixNQUFNLElBQUksaUNBQXNCLENBQUMsa0RBQWtELEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ25HLENBQUM7SUFFRCw0RkFBNEY7SUFDNUYsTUFBTSxPQUFPLEdBQUcsUUFBOEMsQ0FBQztJQUUvRCxJQUFJLEVBQXlDLENBQUM7SUFDOUMsSUFBSSxDQUFDO1FBQ0gsRUFBRSxHQUFHLDZCQUFpQixDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1gsTUFBTSxJQUFJLGlDQUFzQixDQUFDLDREQUE0RCxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNqSCxDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQztJQUNuQyxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDdEMsTUFBTSxJQUFJLGlDQUFzQixDQUFDLHlFQUF5RSxDQUFDLENBQUM7SUFDOUcsQ0FBQztJQUVELE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7UUFDbkQsTUFBTSxJQUFJLGlDQUFzQixDQUM5QixtR0FBbUcsQ0FDcEcsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZml4ZWRTY3JpcHRXYWxsZXQgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcbmltcG9ydCB7IFVuZXhwZWN0ZWRBZGRyZXNzRXJyb3IgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuXG5pbXBvcnQgdHlwZSB7IFV0eG9Db2luTmFtZSB9IGZyb20gJy4uLy4uL25hbWVzJztcblxuLyoqXG4gKiBQbGF0Zm9ybS1yZXBvcnRlZCBzaGllbGRlZCBhZGRyZXNzIGRldGFpbHMgKHdhbGxldC1wbGF0Zm9ybVxuICogYGNvaW5TcGVjaWZpYy5zaGllbGRlZGAgZm9yIFpjYXNoIE9yY2hhcmQvSXJvbndvb2QgYWRkcmVzc2VzKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTaGllbGRlZEFkZHJlc3NEZXRhaWxzIHtcbiAgLyoqIFJlY2VpdmVyIHR5cGUsIGUuZy4gJ2lyb253b29kJy4gKi9cbiAgdHlwZT86IHN0cmluZztcbiAgLyoqIDExLWJ5dGUgaGV4IGRpdmVyc2lmaWVyLiAqL1xuICBkaXZlcnNpZmllcj86IHN0cmluZztcbiAgLyoqIDMyLWJ5dGUgaGV4IGBwa19kYC4gKi9cbiAgcGtEPzogc3RyaW5nO1xuICAvKiogV2FsbGV0IGFkZHJlc3MgaW5kZXggdGhlIGRpdmVyc2lmaWVyIHdhcyBkZXJpdmVkIGZyb20uICovXG4gIGRpdmVyc2lmaWVySW5kZXg/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVmVyaWZ5IGEgWmNhc2ggc2hpZWxkZWQgKE9yY2hhcmQvSXJvbndvb2QpIHdhbGxldCBhZGRyZXNzIHJldHVybmVkIGJ5IHRoZSBwbGF0Zm9ybS5cbiAqXG4gKiBTaGllbGRlZCBjdXN0b2RpYWwgd2FsbGV0cyB1c2UgUmVkUGFsbGFzIHRocmVzaG9sZCBrZXlzIHdob3NlIGtleWNoYWlucyBjYXJyeSBub1xuICogc2VjcDI1NmsxIHhwdWJzLCBzbyB0aGUgYWRkcmVzcyBjYW5ub3QgYmUgbG9jYWxseSByZWRlcml2ZWQgdGhlIHdheSBmaXhlZC1zY3JpcHRcbiAqICh0cmFuc3BhcmVudCkgYWRkcmVzc2VzIGFyZSAoYGFzc2VydEZpeGVkU2NyaXB0V2FsbGV0QWRkcmVzc2Agd291bGQgdGhyb3cgcmVhZGluZ1xuICogYHB1YmApLiBJbnN0ZWFkLCB0aGlzIGNoZWNrcyB0aGUgYWRkcmVzcyBpcyBhIHdlbGwtZm9ybWVkIE9yY2hhcmQgVW5pZmllZCBBZGRyZXNzXG4gKiB3aG9zZSA0My1ieXRlIHJlY2VpdmVyIG1hdGNoZXMgdGhlIGRpdmVyc2lmaWVyIGFuZCBgcGtfZGAgdGhlIHBsYXRmb3JtIHJlcG9ydHMgaW5cbiAqIGBjb2luU3BlY2lmaWMuc2hpZWxkZWRgIOKAlCBpLmUuIHRoZSBVQSByZWFsbHkgZW5jb2RlcyB0aGUgcmVwb3J0ZWQgc2hpZWxkZWQgcmVjZWl2ZXIuXG4gKlxuICogQHRocm93cyB7VW5leHBlY3RlZEFkZHJlc3NFcnJvcn0gaWYgdGhlIGFkZHJlc3MgaXMgbm90IGEgdmFsaWQgT3JjaGFyZCBVQSwgdGhlXG4gKiAgIHBsYXRmb3JtLXJlcG9ydGVkIGRhdGEgaXMgbWlzc2luZy9tYWxmb3JtZWQsIG9yIHRoZSBVQSdzIE9yY2hhcmQgcmVjZWl2ZXIgZG9lc1xuICogICBub3QgbWF0Y2ggdGhlIHJlcG9ydGVkIGRpdmVyc2lmaWVyL2Bwa19kYFxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0U2hpZWxkZWRXYWxsZXRBZGRyZXNzKFxuICBjb2luTmFtZTogVXR4b0NvaW5OYW1lLFxuICBwYXJhbXM6IHtcbiAgICBhZGRyZXNzOiBzdHJpbmc7XG4gICAgY29pblNwZWNpZmljPzogeyBzaGllbGRlZD86IFNoaWVsZGVkQWRkcmVzc0RldGFpbHMgfTtcbiAgfVxuKTogdm9pZCB7XG4gIGNvbnN0IHNoaWVsZGVkID0gcGFyYW1zLmNvaW5TcGVjaWZpYz8uc2hpZWxkZWQ7XG4gIGlmICghc2hpZWxkZWQ/LmRpdmVyc2lmaWVyIHx8ICFzaGllbGRlZC5wa0QpIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZEFkZHJlc3NFcnJvcignYWRkcmVzcyB2YWxpZGF0aW9uIGZhaWx1cmU6IHNoaWVsZGVkIGFkZHJlc3MgbWlzc2luZyBkaXZlcnNpZmllciBvciBwa0QnKTtcbiAgfVxuXG4gIGNvbnN0IGRpdmVyc2lmaWVyID0gQnVmZmVyLmZyb20oc2hpZWxkZWQuZGl2ZXJzaWZpZXIsICdoZXgnKTtcbiAgY29uc3QgcGtEID0gQnVmZmVyLmZyb20oc2hpZWxkZWQucGtELCAnaGV4Jyk7XG4gIGlmIChkaXZlcnNpZmllci5sZW5ndGggIT09IDExKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRBZGRyZXNzRXJyb3IoYGFkZHJlc3MgdmFsaWRhdGlvbiBmYWlsdXJlOiBpbnZhbGlkIGRpdmVyc2lmaWVyIGxlbmd0aCAke2RpdmVyc2lmaWVyLmxlbmd0aH1gKTtcbiAgfVxuICBpZiAocGtELmxlbmd0aCAhPT0gMzIpIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZEFkZHJlc3NFcnJvcihgYWRkcmVzcyB2YWxpZGF0aW9uIGZhaWx1cmU6IGludmFsaWQgcGtEIGxlbmd0aCAke3BrRC5sZW5ndGh9YCk7XG4gIH1cblxuICAvLyBPbmx5IHplYy90emVjIHByb2R1Y2Ugc2hpZWxkZWQgYWRkcmVzc2VzLCBzbyB0aGUgbmFtZSBpcyBhbHdheXMgYSB2YWxpZCBaY2FzaE5ldHdvcmtOYW1lLlxuICBjb25zdCBuZXR3b3JrID0gY29pbk5hbWUgYXMgZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hOZXR3b3JrTmFtZTtcblxuICBsZXQgdWE6IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoVW5pZmllZEFkZHJlc3M7XG4gIHRyeSB7XG4gICAgdWEgPSBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaFVuaWZpZWRBZGRyZXNzLnBhcnNlKHBhcmFtcy5hZGRyZXNzLCBuZXR3b3JrKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkQWRkcmVzc0Vycm9yKGBhZGRyZXNzIHZhbGlkYXRpb24gZmFpbHVyZTogbm90IGEgdmFsaWQgdW5pZmllZCBhZGRyZXNzOiAke3BhcmFtcy5hZGRyZXNzfWApO1xuICB9XG5cbiAgY29uc3Qgb3JjaGFyZCA9IHVhLm9yY2hhcmRSZWNlaXZlcjtcbiAgaWYgKCFvcmNoYXJkIHx8IG9yY2hhcmQubGVuZ3RoICE9PSA0Mykge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkQWRkcmVzc0Vycm9yKCdhZGRyZXNzIHZhbGlkYXRpb24gZmFpbHVyZTogdW5pZmllZCBhZGRyZXNzIGNhcnJpZXMgbm8gT3JjaGFyZCByZWNlaXZlcicpO1xuICB9XG5cbiAgY29uc3QgZXhwZWN0ZWRSZWNlaXZlciA9IEJ1ZmZlci5jb25jYXQoW2RpdmVyc2lmaWVyLCBwa0RdKTtcbiAgaWYgKCFCdWZmZXIuZnJvbShvcmNoYXJkKS5lcXVhbHMoZXhwZWN0ZWRSZWNlaXZlcikpIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZEFkZHJlc3NFcnJvcihcbiAgICAgICdhZGRyZXNzIHZhbGlkYXRpb24gZmFpbHVyZTogdW5pZmllZCBhZGRyZXNzIE9yY2hhcmQgcmVjZWl2ZXIgZG9lcyBub3QgbWF0Y2ggc2hpZWxkZWQgY29pblNwZWNpZmljJ1xuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,29 @@
1
+ import { BIP32, fixedScriptWallet } from '@bitgo/wasm-utxo';
2
+ import { SignTransactionOptions } from '../../abstractUtxoCoin';
3
+ import { ReplayProtectionKeys } from '../../transaction/fixedScript/signPsbtWasm';
4
+ import type { Zec } from './zec';
5
+ /**
6
+ * Sign all transparent inputs of a v6 (Ironwood) Zcash PSBT and verify the signatures.
7
+ *
8
+ * v6 PSBTs override `sign(key)` to require the wallet root keys: on the first signing round —
9
+ * which the wasm enforces to be the user's root key — they derive the wallet ovk (the ECDH
10
+ * agreement of `rootWalletKeys.bitgoKey()` and the user root key) and finalize the shielded
11
+ * output's out_ciphertext before computing any transparent sighash. Later rounds no-op that
12
+ * step, so rootWalletKeys is passed unconditionally. Transparent inputs are signed with
13
+ * ordinary ECDSA over the ZIP-244 sighash either way.
14
+ *
15
+ * The generic `signAndVerifyPsbtWasm` cannot provide this: its `tx.sign(wasmSigner)` call does
16
+ * not satisfy the v6 override's rootWalletKeys requirement. Verification and signed-with
17
+ * metadata are shared with the generic path.
18
+ */
19
+ export declare function signAndVerifyIronwoodPsbt(tx: fixedScriptWallet.ZcashIronwoodBitGoPsbt, signerKeychain: BIP32, rootWalletKeys: fixedScriptWallet.RootWalletKeys, replayProtection: ReplayProtectionKeys, { writeSignedWith }?: {
20
+ writeSignedWith?: boolean;
21
+ }): fixedScriptWallet.ZcashIronwoodBitGoPsbt;
22
+ /**
23
+ * Sign a v6 (Ironwood) Zcash prebuild. Called from `Zec.signTransaction` once the decoded
24
+ * prebuild is known to be an Ironwood PSBT; every other prebuild keeps the generic path.
25
+ */
26
+ export declare function signIronwoodTransaction<TNumber extends number | bigint = number>(coin: Zec, tx: fixedScriptWallet.ZcashIronwoodBitGoPsbt, params: SignTransactionOptions<TNumber>): {
27
+ txHex: string;
28
+ };
29
+ //# sourceMappingURL=signIronwoodTransaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signIronwoodTransaction.d.ts","sourceRoot":"","sources":["../../../../../src/impl/zec/signIronwoodTransaction.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAIhE,OAAO,EACL,oBAAoB,EAGrB,MAAM,4CAA4C,CAAC;AAGpD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAEjC;;;;;;;;;;;;;GAaG;AACH,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,iBAAiB,CAAC,sBAAsB,EAC5C,cAAc,EAAE,KAAK,EACrB,cAAc,EAAE,iBAAiB,CAAC,cAAc,EAChD,gBAAgB,EAAE,oBAAoB,EACtC,EAAE,eAAuB,EAAE,GAAE;IAAE,eAAe,CAAC,EAAE,OAAO,CAAA;CAAO,GAC9D,iBAAiB,CAAC,sBAAsB,CAc1C;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,EAC9E,IAAI,EAAE,GAAG,EACT,EAAE,EAAE,iBAAiB,CAAC,sBAAsB,EAC5C,MAAM,EAAE,sBAAsB,CAAC,OAAO,CAAC,GACtC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAkBnB"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.signAndVerifyIronwoodPsbt = signAndVerifyIronwoodPsbt;
7
+ exports.signIronwoodTransaction = signIronwoodTransaction;
8
+ const assert_1 = __importDefault(require("assert"));
9
+ const sdk_core_1 = require("@bitgo/sdk-core");
10
+ const wasm_utxo_1 = require("@bitgo/wasm-utxo");
11
+ const replayProtection_1 = require("../../transaction/fixedScript/replayProtection");
12
+ const SigningError_1 = require("../../transaction/fixedScript/SigningError");
13
+ const signTransaction_1 = require("../../transaction/fixedScript/signTransaction");
14
+ const signPsbtWasm_1 = require("../../transaction/fixedScript/signPsbtWasm");
15
+ const signTransaction_2 = require("../../transaction/signTransaction");
16
+ /**
17
+ * Sign all transparent inputs of a v6 (Ironwood) Zcash PSBT and verify the signatures.
18
+ *
19
+ * v6 PSBTs override `sign(key)` to require the wallet root keys: on the first signing round —
20
+ * which the wasm enforces to be the user's root key — they derive the wallet ovk (the ECDH
21
+ * agreement of `rootWalletKeys.bitgoKey()` and the user root key) and finalize the shielded
22
+ * output's out_ciphertext before computing any transparent sighash. Later rounds no-op that
23
+ * step, so rootWalletKeys is passed unconditionally. Transparent inputs are signed with
24
+ * ordinary ECDSA over the ZIP-244 sighash either way.
25
+ *
26
+ * The generic `signAndVerifyPsbtWasm` cannot provide this: its `tx.sign(wasmSigner)` call does
27
+ * not satisfy the v6 override's rootWalletKeys requirement. Verification and signed-with
28
+ * metadata are shared with the generic path.
29
+ */
30
+ function signAndVerifyIronwoodPsbt(tx, signerKeychain, rootWalletKeys, replayProtection, { writeSignedWith = false } = {}) {
31
+ try {
32
+ tx.sign(signerKeychain, rootWalletKeys);
33
+ }
34
+ catch (e) {
35
+ throw new SigningError_1.BulkSigningError(e);
36
+ }
37
+ (0, signPsbtWasm_1.verifyPsbtSignaturesWasm)(tx, signerKeychain, rootWalletKeys, replayProtection);
38
+ if (writeSignedWith) {
39
+ (0, signPsbtWasm_1.writeWasmUtxoSignedWithKv)(tx);
40
+ }
41
+ return tx;
42
+ }
43
+ /**
44
+ * Sign a v6 (Ironwood) Zcash prebuild. Called from `Zec.signTransaction` once the decoded
45
+ * prebuild is known to be an Ironwood PSBT; every other prebuild keeps the generic path.
46
+ */
47
+ function signIronwoodTransaction(coin, tx, params) {
48
+ const signerKeychain = (0, signTransaction_2.getSignerKeychain)('prv' in params ? params.prv : undefined);
49
+ (0, assert_1.default)(signerKeychain, 'missing signer keychain');
50
+ (0, assert_1.default)(params.pubs, 'pubs are required for fixed script signing');
51
+ (0, assert_1.default)((0, sdk_core_1.isTriple)(params.pubs), 'pubs must be a triple');
52
+ const rootWalletKeys = wasm_utxo_1.fixedScriptWallet.RootWalletKeys.fromXpubs(params.pubs);
53
+ const signedPsbt = signAndVerifyIronwoodPsbt(tx, signerKeychain, rootWalletKeys, { publicKeys: (0, replayProtection_1.getReplayProtectionPubkeys)(coin.wasmName) }, { writeSignedWith: params.writeSignedWith });
54
+ const signedTx = (0, signTransaction_1.finalizeSignedPsbt)(signedPsbt, params);
55
+ return (0, signTransaction_2.toSignTransactionResult)(signedTx, params);
56
+ }
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbklyb253b29kVHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvaW1wbC96ZWMvc2lnbklyb253b29kVHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFnQ0EsOERBb0JDO0FBTUQsMERBc0JDO0FBaEZELG9EQUE0QjtBQUU1Qiw4Q0FBMkM7QUFDM0MsZ0RBQTREO0FBRzVELHFGQUE0RjtBQUM1Riw2RUFBOEU7QUFDOUUsbUZBQW1GO0FBQ25GLDZFQUlvRDtBQUNwRCx1RUFBK0Y7QUFJL0Y7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILFNBQWdCLHlCQUF5QixDQUN2QyxFQUE0QyxFQUM1QyxjQUFxQixFQUNyQixjQUFnRCxFQUNoRCxnQkFBc0MsRUFDdEMsRUFBRSxlQUFlLEdBQUcsS0FBSyxLQUFvQyxFQUFFO0lBRS9ELElBQUksQ0FBQztRQUNILEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1gsTUFBTSxJQUFJLCtCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFBLHVDQUF3QixFQUFDLEVBQUUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFFL0UsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUNwQixJQUFBLHdDQUF5QixFQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQix1QkFBdUIsQ0FDckMsSUFBUyxFQUNULEVBQTRDLEVBQzVDLE1BQXVDO0lBRXZDLE1BQU0sY0FBYyxHQUFHLElBQUEsbUNBQWlCLEVBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkYsSUFBQSxnQkFBTSxFQUFDLGNBQWMsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO0lBRWxELElBQUEsZ0JBQU0sRUFBQyxNQUFNLENBQUMsSUFBSSxFQUFFLDRDQUE0QyxDQUFDLENBQUM7SUFDbEUsSUFBQSxnQkFBTSxFQUFDLElBQUEsbUJBQVEsRUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztJQUN2RCxNQUFNLGNBQWMsR0FBRyw2QkFBaUIsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUUvRSxNQUFNLFVBQVUsR0FBRyx5QkFBeUIsQ0FDMUMsRUFBRSxFQUNGLGNBQWMsRUFDZCxjQUFjLEVBQ2QsRUFBRSxVQUFVLEVBQUUsSUFBQSw2Q0FBMEIsRUFBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFDekQsRUFBRSxlQUFlLEVBQUUsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUM1QyxDQUFDO0lBRUYsTUFBTSxRQUFRLEdBQUcsSUFBQSxvQ0FBa0IsRUFBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDeEQsT0FBTyxJQUFBLHlDQUF1QixFQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNuRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgeyBpc1RyaXBsZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBCSVAzMiwgZml4ZWRTY3JpcHRXYWxsZXQgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcblxuaW1wb3J0IHsgU2lnblRyYW5zYWN0aW9uT3B0aW9ucyB9IGZyb20gJy4uLy4uL2Fic3RyYWN0VXR4b0NvaW4nO1xuaW1wb3J0IHsgZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmtleXMgfSBmcm9tICcuLi8uLi90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9yZXBsYXlQcm90ZWN0aW9uJztcbmltcG9ydCB7IEJ1bGtTaWduaW5nRXJyb3IgfSBmcm9tICcuLi8uLi90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9TaWduaW5nRXJyb3InO1xuaW1wb3J0IHsgZmluYWxpemVTaWduZWRQc2J0IH0gZnJvbSAnLi4vLi4vdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvc2lnblRyYW5zYWN0aW9uJztcbmltcG9ydCB7XG4gIFJlcGxheVByb3RlY3Rpb25LZXlzLFxuICB2ZXJpZnlQc2J0U2lnbmF0dXJlc1dhc20sXG4gIHdyaXRlV2FzbVV0eG9TaWduZWRXaXRoS3YsXG59IGZyb20gJy4uLy4uL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L3NpZ25Qc2J0V2FzbSc7XG5pbXBvcnQgeyBnZXRTaWduZXJLZXljaGFpbiwgdG9TaWduVHJhbnNhY3Rpb25SZXN1bHQgfSBmcm9tICcuLi8uLi90cmFuc2FjdGlvbi9zaWduVHJhbnNhY3Rpb24nO1xuXG5pbXBvcnQgdHlwZSB7IFplYyB9IGZyb20gJy4vemVjJztcblxuLyoqXG4gKiBTaWduIGFsbCB0cmFuc3BhcmVudCBpbnB1dHMgb2YgYSB2NiAoSXJvbndvb2QpIFpjYXNoIFBTQlQgYW5kIHZlcmlmeSB0aGUgc2lnbmF0dXJlcy5cbiAqXG4gKiB2NiBQU0JUcyBvdmVycmlkZSBgc2lnbihrZXkpYCB0byByZXF1aXJlIHRoZSB3YWxsZXQgcm9vdCBrZXlzOiBvbiB0aGUgZmlyc3Qgc2lnbmluZyByb3VuZCDigJRcbiAqIHdoaWNoIHRoZSB3YXNtIGVuZm9yY2VzIHRvIGJlIHRoZSB1c2VyJ3Mgcm9vdCBrZXkg4oCUIHRoZXkgZGVyaXZlIHRoZSB3YWxsZXQgb3ZrICh0aGUgRUNESFxuICogYWdyZWVtZW50IG9mIGByb290V2FsbGV0S2V5cy5iaXRnb0tleSgpYCBhbmQgdGhlIHVzZXIgcm9vdCBrZXkpIGFuZCBmaW5hbGl6ZSB0aGUgc2hpZWxkZWRcbiAqIG91dHB1dCdzIG91dF9jaXBoZXJ0ZXh0IGJlZm9yZSBjb21wdXRpbmcgYW55IHRyYW5zcGFyZW50IHNpZ2hhc2guIExhdGVyIHJvdW5kcyBuby1vcCB0aGF0XG4gKiBzdGVwLCBzbyByb290V2FsbGV0S2V5cyBpcyBwYXNzZWQgdW5jb25kaXRpb25hbGx5LiBUcmFuc3BhcmVudCBpbnB1dHMgYXJlIHNpZ25lZCB3aXRoXG4gKiBvcmRpbmFyeSBFQ0RTQSBvdmVyIHRoZSBaSVAtMjQ0IHNpZ2hhc2ggZWl0aGVyIHdheS5cbiAqXG4gKiBUaGUgZ2VuZXJpYyBgc2lnbkFuZFZlcmlmeVBzYnRXYXNtYCBjYW5ub3QgcHJvdmlkZSB0aGlzOiBpdHMgYHR4LnNpZ24od2FzbVNpZ25lcilgIGNhbGwgZG9lc1xuICogbm90IHNhdGlzZnkgdGhlIHY2IG92ZXJyaWRlJ3Mgcm9vdFdhbGxldEtleXMgcmVxdWlyZW1lbnQuIFZlcmlmaWNhdGlvbiBhbmQgc2lnbmVkLXdpdGhcbiAqIG1ldGFkYXRhIGFyZSBzaGFyZWQgd2l0aCB0aGUgZ2VuZXJpYyBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2lnbkFuZFZlcmlmeUlyb253b29kUHNidChcbiAgdHg6IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoSXJvbndvb2RCaXRHb1BzYnQsXG4gIHNpZ25lcktleWNoYWluOiBCSVAzMixcbiAgcm9vdFdhbGxldEtleXM6IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzLFxuICByZXBsYXlQcm90ZWN0aW9uOiBSZXBsYXlQcm90ZWN0aW9uS2V5cyxcbiAgeyB3cml0ZVNpZ25lZFdpdGggPSBmYWxzZSB9OiB7IHdyaXRlU2lnbmVkV2l0aD86IGJvb2xlYW4gfSA9IHt9XG4pOiBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaElyb253b29kQml0R29Qc2J0IHtcbiAgdHJ5IHtcbiAgICB0eC5zaWduKHNpZ25lcktleWNoYWluLCByb290V2FsbGV0S2V5cyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgQnVsa1NpZ25pbmdFcnJvcihlKTtcbiAgfVxuXG4gIHZlcmlmeVBzYnRTaWduYXR1cmVzV2FzbSh0eCwgc2lnbmVyS2V5Y2hhaW4sIHJvb3RXYWxsZXRLZXlzLCByZXBsYXlQcm90ZWN0aW9uKTtcblxuICBpZiAod3JpdGVTaWduZWRXaXRoKSB7XG4gICAgd3JpdGVXYXNtVXR4b1NpZ25lZFdpdGhLdih0eCk7XG4gIH1cblxuICByZXR1cm4gdHg7XG59XG5cbi8qKlxuICogU2lnbiBhIHY2IChJcm9ud29vZCkgWmNhc2ggcHJlYnVpbGQuIENhbGxlZCBmcm9tIGBaZWMuc2lnblRyYW5zYWN0aW9uYCBvbmNlIHRoZSBkZWNvZGVkXG4gKiBwcmVidWlsZCBpcyBrbm93biB0byBiZSBhbiBJcm9ud29vZCBQU0JUOyBldmVyeSBvdGhlciBwcmVidWlsZCBrZWVwcyB0aGUgZ2VuZXJpYyBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2lnbklyb253b29kVHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gIGNvaW46IFplYyxcbiAgdHg6IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoSXJvbndvb2RCaXRHb1BzYnQsXG4gIHBhcmFtczogU2lnblRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyPlxuKTogeyB0eEhleDogc3RyaW5nIH0ge1xuICBjb25zdCBzaWduZXJLZXljaGFpbiA9IGdldFNpZ25lcktleWNoYWluKCdwcnYnIGluIHBhcmFtcyA/IHBhcmFtcy5wcnYgOiB1bmRlZmluZWQpO1xuICBhc3NlcnQoc2lnbmVyS2V5Y2hhaW4sICdtaXNzaW5nIHNpZ25lciBrZXljaGFpbicpO1xuXG4gIGFzc2VydChwYXJhbXMucHVicywgJ3B1YnMgYXJlIHJlcXVpcmVkIGZvciBmaXhlZCBzY3JpcHQgc2lnbmluZycpO1xuICBhc3NlcnQoaXNUcmlwbGUocGFyYW1zLnB1YnMpLCAncHVicyBtdXN0IGJlIGEgdHJpcGxlJyk7XG4gIGNvbnN0IHJvb3RXYWxsZXRLZXlzID0gZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXMuZnJvbVhwdWJzKHBhcmFtcy5wdWJzKTtcblxuICBjb25zdCBzaWduZWRQc2J0ID0gc2lnbkFuZFZlcmlmeUlyb253b29kUHNidChcbiAgICB0eCxcbiAgICBzaWduZXJLZXljaGFpbixcbiAgICByb290V2FsbGV0S2V5cyxcbiAgICB7IHB1YmxpY0tleXM6IGdldFJlcGxheVByb3RlY3Rpb25QdWJrZXlzKGNvaW4ud2FzbU5hbWUpIH0sXG4gICAgeyB3cml0ZVNpZ25lZFdpdGg6IHBhcmFtcy53cml0ZVNpZ25lZFdpdGggfVxuICApO1xuXG4gIGNvbnN0IHNpZ25lZFR4ID0gZmluYWxpemVTaWduZWRQc2J0KHNpZ25lZFBzYnQsIHBhcmFtcyk7XG4gIHJldHVybiB0b1NpZ25UcmFuc2FjdGlvblJlc3VsdChzaWduZWRUeCwgcGFyYW1zKTtcbn1cbiJdfQ==
@@ -1,3 +1,8 @@
1
+ import type { AddressCodecOutput } from '../../transaction/recipient';
1
2
  /** A Zcash coin name — the only UTXO coins with shielded (Orchard/Ironwood) support. */
2
3
  export type ZcashCoinName = 'zec' | 'tzec';
4
+ /** Parsed output metadata used to distinguish Zcash transparent and shielded receivers. */
5
+ export interface ZecAddressCodecOutput extends AddressCodecOutput {
6
+ isShielded?: boolean;
7
+ }
3
8
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/impl/zec/types.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/impl/zec/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEtE,wFAAwF;AACxF,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,CAAC;AAE3C,2FAA2F;AAC3F,MAAM,WAAW,qBAAsB,SAAQ,kBAAkB;IAC/D,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB"}
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvaW1wbC96ZWMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBBIFpjYXNoIGNvaW4gbmFtZSDigJQgdGhlIG9ubHkgVVRYTyBjb2lucyB3aXRoIHNoaWVsZGVkIChPcmNoYXJkL0lyb253b29kKSBzdXBwb3J0LiAqL1xuZXhwb3J0IHR5cGUgWmNhc2hDb2luTmFtZSA9ICd6ZWMnIHwgJ3R6ZWMnO1xuIl19
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvaW1wbC96ZWMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQWRkcmVzc0NvZGVjT3V0cHV0IH0gZnJvbSAnLi4vLi4vdHJhbnNhY3Rpb24vcmVjaXBpZW50JztcblxuLyoqIEEgWmNhc2ggY29pbiBuYW1lIOKAlCB0aGUgb25seSBVVFhPIGNvaW5zIHdpdGggc2hpZWxkZWQgKE9yY2hhcmQvSXJvbndvb2QpIHN1cHBvcnQuICovXG5leHBvcnQgdHlwZSBaY2FzaENvaW5OYW1lID0gJ3plYycgfCAndHplYyc7XG5cbi8qKiBQYXJzZWQgb3V0cHV0IG1ldGFkYXRhIHVzZWQgdG8gZGlzdGluZ3Vpc2ggWmNhc2ggdHJhbnNwYXJlbnQgYW5kIHNoaWVsZGVkIHJlY2VpdmVycy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgWmVjQWRkcmVzc0NvZGVjT3V0cHV0IGV4dGVuZHMgQWRkcmVzc0NvZGVjT3V0cHV0IHtcbiAgaXNTaGllbGRlZD86IGJvb2xlYW47XG59XG4iXX0=
@@ -1,10 +1,13 @@
1
1
  /**
2
2
  * @prettier
3
3
  */
4
- import { BitGoBase, MPCAlgorithm } from '@bitgo/sdk-core';
5
- import { AbstractUtxoCoin } from '../../abstractUtxoCoin';
4
+ import { fixedScriptWallet } from '@bitgo/wasm-utxo';
5
+ import { BitGoBase, ExtraPrebuildParamsOptions, HalfSignedUtxoTransaction, IWallet, MPCAlgorithm, SignedTransaction, Wallet } from '@bitgo/sdk-core';
6
+ import { AbstractUtxoCoin, ParseTransactionOptions, SignTransactionOptions, UtxoCoinSpecific, VerifyAddressOptions } from '../../abstractUtxoCoin';
7
+ import type { ParsedTransaction } from '../../transaction/types';
6
8
  import { UtxoCoinName } from '../../names';
7
9
  import { ZecAddressCodec } from './address';
10
+ import { PsbtRecipient } from './recipients';
8
11
  export declare class Zec extends AbstractUtxoCoin {
9
12
  readonly name: UtxoCoinName;
10
13
  constructor(bitgo: BitGoBase);
@@ -17,9 +20,39 @@ export declare class Zec extends AbstractUtxoCoin {
17
20
  getMPCAlgorithm(): MPCAlgorithm;
18
21
  static createInstance(bitgo: BitGoBase): Zec;
19
22
  get addressCodec(): ZecAddressCodec;
23
+ /**
24
+ * Shielded (Orchard/Ironwood) addresses are returned with `coinSpecific.shielded` and
25
+ * cannot be locally rederived from secp256k1 xpubs (RedPallas keychains carry none), so
26
+ * verify them against the platform-reported diversifier/pkD instead of the fixed-script
27
+ * transparent derivation the base class performs.
28
+ * @inheritdoc
29
+ */
30
+ isWalletAddress(params: VerifyAddressOptions<UtxoCoinSpecific>, wallet?: IWallet): Promise<boolean>;
20
31
  isValidAddress(address: string, param?: {
21
32
  anyFormat?: boolean;
22
33
  allowLightning?: boolean;
23
34
  } | boolean): boolean;
35
+ private inferUnifiedRecipientPreference;
36
+ parseTransaction<TNumber extends number | bigint = number>(params: ParseTransactionOptions<TNumber>): Promise<ParsedTransaction<TNumber>>;
37
+ getExtraPrebuildParams(buildParams: ExtraPrebuildParamsOptions & {
38
+ wallet: Wallet;
39
+ }): Promise<{
40
+ txFormat?: import("../../abstractUtxoCoin").TxFormat;
41
+ changeAddressType?: ("p2sh" | "p2wsh" | "p2shP2wsh" | "p2trMusig2" | "p2tr")[] | ("p2sh" | "p2wsh" | "p2shP2wsh" | "p2trMusig2" | "p2tr");
42
+ allowedInputScriptTypes?: ("p2sh" | "p2wsh" | "p2shP2wsh" | "p2trMusig2" | "p2tr")[];
43
+ } | {
44
+ unifiedRecipientPreference: "shielded" | "transparent";
45
+ txFormat?: import("../../abstractUtxoCoin").TxFormat;
46
+ changeAddressType?: ("p2sh" | "p2wsh" | "p2shP2wsh" | "p2trMusig2" | "p2tr")[] | ("p2sh" | "p2wsh" | "p2shP2wsh" | "p2trMusig2" | "p2tr");
47
+ allowedInputScriptTypes?: ("p2sh" | "p2wsh" | "p2shP2wsh" | "p2trMusig2" | "p2tr")[];
48
+ }>;
49
+ decodeTransaction(input: Buffer | string): fixedScriptWallet.BitGoPsbt;
50
+ /**
51
+ * Route v6 (Ironwood) prebuilds to the Ironwood signing path — its `sign` override requires
52
+ * the wallet root keys to derive the ovk on the user's first signing round — and keep every
53
+ * other prebuild (v4 and non-PSBT) on the generic path.
54
+ */
55
+ signTransaction<TNumber extends number | bigint = number>(params: SignTransactionOptions<TNumber>): Promise<SignedTransaction | HalfSignedUtxoTransaction>;
56
+ resolveRecipientsFromPsbt(input: Buffer | string, walletKeys: fixedScriptWallet.RootWalletKeys): PsbtRecipient[];
24
57
  }
25
58
  //# sourceMappingURL=zec.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"zec.d.ts","sourceRoot":"","sources":["../../../../../src/impl/zec/zec.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,qBAAa,GAAI,SAAQ,gBAAgB;IACvC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAS;gBAExB,KAAK,EAAE,SAAS;IAI5B;;;;;OAKG;IACH,eAAe,IAAI,YAAY;IAI/B,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,GAAG;IAI5C,IAAa,YAAY,IAAI,eAAe,CAE3C;IAED,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,GAAG,OAAO;CAG9G"}
1
+ {"version":3,"file":"zec.d.ts","sourceRoot":"","sources":["../../../../../src/impl/zec/zec.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAA8B,MAAM,kBAAkB,CAAC;AACjF,OAAO,EACL,SAAS,EACT,0BAA0B,EAC1B,yBAAyB,EACzB,OAAO,EACP,YAAY,EACZ,iBAAiB,EACjB,MAAM,EAEP,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO,EAAE,YAAY,EAAsB,MAAM,aAAa,CAAC;AAG/D,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,EAAyB,aAAa,EAAE,MAAM,cAAc,CAAC;AAIpE,qBAAa,GAAI,SAAQ,gBAAgB;IACvC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAS;gBAExB,KAAK,EAAE,SAAS;IAI5B;;;;;OAKG;IACH,eAAe,IAAI,YAAY;IAI/B,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,GAAG;IAI5C,IAAa,YAAY,IAAI,eAAe,CAE3C;IAED;;;;;;OAMG;IACY,eAAe,CAAC,MAAM,EAAE,oBAAoB,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAQlH,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,GAAG,OAAO;IAI7G,OAAO,CAAC,+BAA+B;IAyBxB,gBAAgB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,EACtE,MAAM,EAAE,uBAAuB,CAAC,OAAO,CAAC,GACvC,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IASvB,sBAAsB,CAAC,WAAW,EAAE,0BAA0B,GAAG;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE;;;;;;;;;;IASzF,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,iBAAiB,CAAC,SAAS;IAQ/E;;;;OAIG;IACY,eAAe,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,EACrE,MAAM,EAAE,sBAAsB,CAAC,OAAO,CAAC,GACtC,OAAO,CAAC,iBAAiB,GAAG,yBAAyB,CAAC;IAYzD,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,UAAU,EAAE,iBAAiB,CAAC,cAAc,GAAG,aAAa,EAAE;CAOjH"}
@@ -1,8 +1,22 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.Zec = void 0;
7
+ /**
8
+ * @prettier
9
+ */
10
+ const wasm_utxo_1 = require("@bitgo/wasm-utxo");
11
+ const lodash_1 = __importDefault(require("lodash"));
4
12
  const abstractUtxoCoin_1 = require("../../abstractUtxoCoin");
13
+ const decode_1 = require("../../transaction/decode");
14
+ const names_1 = require("../../names");
15
+ const recipient_1 = require("../../transaction/recipient");
5
16
  const address_1 = require("./address");
17
+ const signIronwoodTransaction_1 = require("./signIronwoodTransaction");
18
+ const recipients_1 = require("./recipients");
19
+ const shieldedAddress_1 = require("./shieldedAddress");
6
20
  class Zec extends abstractUtxoCoin_1.AbstractUtxoCoin {
7
21
  constructor(bitgo) {
8
22
  super(bitgo);
@@ -23,9 +37,88 @@ class Zec extends abstractUtxoCoin_1.AbstractUtxoCoin {
23
37
  get addressCodec() {
24
38
  return new address_1.ZecAddressCodec(this.name, this.wasmName);
25
39
  }
40
+ /**
41
+ * Shielded (Orchard/Ironwood) addresses are returned with `coinSpecific.shielded` and
42
+ * cannot be locally rederived from secp256k1 xpubs (RedPallas keychains carry none), so
43
+ * verify them against the platform-reported diversifier/pkD instead of the fixed-script
44
+ * transparent derivation the base class performs.
45
+ * @inheritdoc
46
+ */
47
+ async isWalletAddress(params, wallet) {
48
+ if (params.coinSpecific?.shielded) {
49
+ (0, shieldedAddress_1.assertShieldedWalletAddress)(this.name, params);
50
+ return true;
51
+ }
52
+ return super.isWalletAddress(params, wallet);
53
+ }
26
54
  isValidAddress(address, param) {
27
55
  return this.addressCodec.isValidAddress(address);
28
56
  }
57
+ inferUnifiedRecipientPreference(recipients) {
58
+ const shieldedness = (recipients ?? []).map((recipient) => {
59
+ const address = recipient.address;
60
+ if (address === undefined) {
61
+ return 'transparent';
62
+ }
63
+ if (recipient_1.AddressCodec.isScriptRecipient(address)) {
64
+ return 'transparent';
65
+ }
66
+ const hasTransparentReceiver = wasm_utxo_1.zcashAddress.hasTransparentReceiver(address, this.wasmName);
67
+ const hasOrchardReceiver = wasm_utxo_1.zcashAddress.hasOrchardReceiver(address, this.wasmName);
68
+ return hasOrchardReceiver && !hasTransparentReceiver
69
+ ? 'shielded'
70
+ : hasTransparentReceiver
71
+ ? 'transparent'
72
+ : undefined;
73
+ });
74
+ if (shieldedness.includes('shielded') && shieldedness.includes('transparent')) {
75
+ throw new Error('Mixed shielded and transparent recipients are not supported');
76
+ }
77
+ return shieldedness.includes('shielded') ? 'shielded' : undefined;
78
+ }
79
+ async parseTransaction(params) {
80
+ const preference = params.txParams.unifiedRecipientPreference ?? this.inferUnifiedRecipientPreference(params.txParams.recipients);
81
+ return this.parseTransactionWithAddressCodec(params, new address_1.ZecAddressCodec(this.name, this.wasmName, preference ?? 'transparent'));
82
+ }
83
+ async getExtraPrebuildParams(buildParams) {
84
+ const extraParams = await super.getExtraPrebuildParams(buildParams);
85
+ const { unifiedRecipientPreference } = buildParams;
86
+ if (unifiedRecipientPreference === undefined) {
87
+ return extraParams;
88
+ }
89
+ return { ...extraParams, unifiedRecipientPreference };
90
+ }
91
+ decodeTransaction(input) {
92
+ const buffer = typeof input === 'string' ? (0, decode_1.stringToBufferTryFormats)(input, ['hex', 'base64']) : input;
93
+ if (!(0, wasm_utxo_1.hasPsbtMagic)(buffer)) {
94
+ return super.decodeTransaction(input);
95
+ }
96
+ return wasm_utxo_1.fixedScriptWallet.ZcashPsbt.fromBytes(buffer, (0, names_1.toWasmUtxoCoinName)(this.name));
97
+ }
98
+ /**
99
+ * Route v6 (Ironwood) prebuilds to the Ironwood signing path — its `sign` override requires
100
+ * the wallet root keys to derive the ovk on the user's first signing round — and keep every
101
+ * other prebuild (v4 and non-PSBT) on the generic path.
102
+ */
103
+ async signTransaction(params) {
104
+ const txPrebuild = params?.txPrebuild;
105
+ if (!lodash_1.default.isObject(txPrebuild)) {
106
+ // Defer to the base path for its standard missing/malformed-prebuild validation errors.
107
+ return super.signTransaction(params);
108
+ }
109
+ const tx = this.decodeTransactionFromPrebuild(txPrebuild);
110
+ if (!(tx instanceof wasm_utxo_1.fixedScriptWallet.ZcashIronwoodBitGoPsbt)) {
111
+ return super.signTransaction(params);
112
+ }
113
+ return (0, signIronwoodTransaction_1.signIronwoodTransaction)(this, tx, params);
114
+ }
115
+ resolveRecipientsFromPsbt(input, walletKeys) {
116
+ const psbt = this.decodeTransaction(input);
117
+ if (!(psbt instanceof wasm_utxo_1.fixedScriptWallet.ZcashBitGoPsbt)) {
118
+ throw new Error('expected a Zcash PSBT');
119
+ }
120
+ return (0, recipients_1.resolvePsbtRecipients)(psbt, walletKeys, this.addressCodec);
121
+ }
29
122
  }
30
123
  exports.Zec = Zec;
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2ltcGwvemVjL3plYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFLQSw2REFBMEQ7QUFHMUQsdUNBQTRDO0FBRTVDLE1BQWEsR0FBSSxTQUFRLG1DQUFnQjtJQUd2QyxZQUFZLEtBQWdCO1FBQzFCLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUhOLFNBQUksR0FBaUIsS0FBSyxDQUFDO0lBSXBDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGVBQWU7UUFDYixPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFnQjtRQUNwQyxPQUFPLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFhLFlBQVk7UUFDdkIsT0FBTyxJQUFJLHlCQUFlLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELGNBQWMsQ0FBQyxPQUFlLEVBQUUsS0FBbUU7UUFDakcsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuRCxDQUFDO0NBQ0Y7QUE1QkQsa0JBNEJDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0IHsgQml0R29CYXNlLCBNUENBbGdvcml0aG0gfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdFV0eG9Db2luIH0gZnJvbSAnLi4vLi4vYWJzdHJhY3RVdHhvQ29pbic7XG5pbXBvcnQgeyBVdHhvQ29pbk5hbWUgfSBmcm9tICcuLi8uLi9uYW1lcyc7XG5cbmltcG9ydCB7IFplY0FkZHJlc3NDb2RlYyB9IGZyb20gJy4vYWRkcmVzcyc7XG5cbmV4cG9ydCBjbGFzcyBaZWMgZXh0ZW5kcyBBYnN0cmFjdFV0eG9Db2luIHtcbiAgcmVhZG9ubHkgbmFtZTogVXR4b0NvaW5OYW1lID0gJ3plYyc7XG5cbiAgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSkge1xuICAgIHN1cGVyKGJpdGdvKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBaRUMgc2hpZWxkZWQgKE9yY2hhcmQvSXJvbndvb2QpIGN1c3RvZGlhbCB3YWxsZXRzIHVzZSBSZWRQYWxsYXMgdGhyZXNob2xkIGtleXMuXG4gICAqIFRyYW5zcGFyZW50IChzZWNwMjU2azEgbXVsdGlzaWcpIGZsb3dzIGFyZSB1bmFmZmVjdGVkOiBNUENBbGdvcml0aG0gaXMgb25seVxuICAgKiBjb25zdWx0ZWQgb24gdGhlIFRTUyBjdXN0b2RpYWwgd2FsbGV0LWNyZWF0aW9uIHBhdGguXG4gICAqIEBpbmhlcml0ZG9jXG4gICAqL1xuICBnZXRNUENBbGdvcml0aG0oKTogTVBDQWxnb3JpdGhtIHtcbiAgICByZXR1cm4gJ3JlZHBhbGxhcyc7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlSW5zdGFuY2UoYml0Z286IEJpdEdvQmFzZSk6IFplYyB7XG4gICAgcmV0dXJuIG5ldyBaZWMoYml0Z28pO1xuICB9XG5cbiAgb3ZlcnJpZGUgZ2V0IGFkZHJlc3NDb2RlYygpOiBaZWNBZGRyZXNzQ29kZWMge1xuICAgIHJldHVybiBuZXcgWmVjQWRkcmVzc0NvZGVjKHRoaXMubmFtZSwgdGhpcy53YXNtTmFtZSk7XG4gIH1cblxuICBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcsIHBhcmFtPzogeyBhbnlGb3JtYXQ/OiBib29sZWFuOyBhbGxvd0xpZ2h0bmluZz86IGJvb2xlYW4gfSB8IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hZGRyZXNzQ29kZWMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcyk7XG4gIH1cbn1cbiJdfQ==
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2ltcGwvemVjL3plYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7R0FFRztBQUNILGdEQUFpRjtBQVdqRixvREFBdUI7QUFFdkIsNkRBTWdDO0FBRWhDLHFEQUFvRTtBQUNwRSx1Q0FBK0Q7QUFDL0QsMkRBQTJEO0FBRTNELHVDQUE0QztBQUM1Qyx1RUFBb0U7QUFDcEUsNkNBQW9FO0FBQ3BFLHVEQUFnRTtBQUdoRSxNQUFhLEdBQUksU0FBUSxtQ0FBZ0I7SUFHdkMsWUFBWSxLQUFnQjtRQUMxQixLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFITixTQUFJLEdBQWlCLEtBQUssQ0FBQztJQUlwQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxlQUFlO1FBQ2IsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBZ0I7UUFDcEMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBYSxZQUFZO1FBQ3ZCLE9BQU8sSUFBSSx5QkFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDTSxLQUFLLENBQUMsZUFBZSxDQUFDLE1BQThDLEVBQUUsTUFBZ0I7UUFDN0YsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxDQUFDO1lBQ2xDLElBQUEsNkNBQTJCLEVBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMvQyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxjQUFjLENBQUMsT0FBZSxFQUFFLEtBQW1FO1FBQ2pHLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVPLCtCQUErQixDQUNyQyxVQUF5RDtRQUV6RCxNQUFNLFlBQVksR0FBRyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQTBDLEVBQUU7WUFDaEcsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQztZQUNsQyxJQUFJLE9BQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDMUIsT0FBTyxhQUFhLENBQUM7WUFDdkIsQ0FBQztZQUNELElBQUksd0JBQVksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUM1QyxPQUFPLGFBQWEsQ0FBQztZQUN2QixDQUFDO1lBQ0QsTUFBTSxzQkFBc0IsR0FBRyx3QkFBWSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDM0YsTUFBTSxrQkFBa0IsR0FBRyx3QkFBWSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbkYsT0FBTyxrQkFBa0IsSUFBSSxDQUFDLHNCQUFzQjtnQkFDbEQsQ0FBQyxDQUFDLFVBQVU7Z0JBQ1osQ0FBQyxDQUFDLHNCQUFzQjtvQkFDeEIsQ0FBQyxDQUFDLGFBQWE7b0JBQ2YsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDOUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO1FBQ2pGLENBQUM7UUFDRCxPQUFPLFlBQVksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3BFLENBQUM7SUFFUSxLQUFLLENBQUMsZ0JBQWdCLENBQzdCLE1BQXdDO1FBRXhDLE1BQU0sVUFBVSxHQUNkLE1BQU0sQ0FBQyxRQUFRLENBQUMsMEJBQTBCLElBQUksSUFBSSxDQUFDLCtCQUErQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakgsT0FBTyxJQUFJLENBQUMsZ0NBQWdDLENBQzFDLE1BQU0sRUFDTixJQUFJLHlCQUFlLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLFVBQVUsSUFBSSxhQUFhLENBQUMsQ0FDM0UsQ0FBQztJQUNKLENBQUM7SUFFUSxLQUFLLENBQUMsc0JBQXNCLENBQUMsV0FBNEQ7UUFDaEcsTUFBTSxXQUFXLEdBQUcsTUFBTSxLQUFLLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEUsTUFBTSxFQUFFLDBCQUEwQixFQUFFLEdBQUcsV0FBVyxDQUFDO1FBQ25ELElBQUksMEJBQTBCLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDN0MsT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQztRQUNELE9BQU8sRUFBRSxHQUFHLFdBQVcsRUFBRSwwQkFBMEIsRUFBRSxDQUFDO0lBQ3hELENBQUM7SUFFUSxpQkFBaUIsQ0FBQyxLQUFzQjtRQUMvQyxNQUFNLE1BQU0sR0FBRyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUEsaUNBQXdCLEVBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUN0RyxJQUFJLENBQUMsSUFBQSx3QkFBWSxFQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDMUIsT0FBTyxLQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsQ0FBQztRQUNELE9BQU8sNkJBQWlCLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBQSwwQkFBa0IsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFrQixDQUFDLENBQUM7SUFDdkcsQ0FBQztJQUVEOzs7O09BSUc7SUFDTSxLQUFLLENBQUMsZUFBZSxDQUM1QixNQUF1QztRQUV2QyxNQUFNLFVBQVUsR0FBRyxNQUFNLEVBQUUsVUFBVSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxnQkFBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQzVCLHdGQUF3RjtZQUN4RixPQUFPLEtBQUssQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkMsQ0FBQztRQUNELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsQ0FBQyxFQUFFLFlBQVksNkJBQWlCLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUFDO1lBQzlELE9BQU8sS0FBSyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QyxDQUFDO1FBQ0QsT0FBTyxJQUFBLGlEQUF1QixFQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUNELHlCQUF5QixDQUFDLEtBQXNCLEVBQUUsVUFBNEM7UUFDNUYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxDQUFDLElBQUksWUFBWSw2QkFBaUIsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQ3hELE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBQ0QsT0FBTyxJQUFBLGtDQUFxQixFQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3BFLENBQUM7Q0FDRjtBQTNIRCxrQkEySEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICovXG5pbXBvcnQgeyBmaXhlZFNjcmlwdFdhbGxldCwgaGFzUHNidE1hZ2ljLCB6Y2FzaEFkZHJlc3MgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcbmltcG9ydCB7XG4gIEJpdEdvQmFzZSxcbiAgRXh0cmFQcmVidWlsZFBhcmFtc09wdGlvbnMsXG4gIEhhbGZTaWduZWRVdHhvVHJhbnNhY3Rpb24sXG4gIElXYWxsZXQsXG4gIE1QQ0FsZ29yaXRobSxcbiAgU2lnbmVkVHJhbnNhY3Rpb24sXG4gIFdhbGxldCxcbiAgVW5pZmllZFJlY2lwaWVudFByZWZlcmVuY2UsXG59IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG5pbXBvcnQge1xuICBBYnN0cmFjdFV0eG9Db2luLFxuICBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgU2lnblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgVXR4b0NvaW5TcGVjaWZpYyxcbiAgVmVyaWZ5QWRkcmVzc09wdGlvbnMsXG59IGZyb20gJy4uLy4uL2Fic3RyYWN0VXR4b0NvaW4nO1xuaW1wb3J0IHR5cGUgeyBQYXJzZWRUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3RyYW5zYWN0aW9uL3R5cGVzJztcbmltcG9ydCB7IHN0cmluZ1RvQnVmZmVyVHJ5Rm9ybWF0cyB9IGZyb20gJy4uLy4uL3RyYW5zYWN0aW9uL2RlY29kZSc7XG5pbXBvcnQgeyBVdHhvQ29pbk5hbWUsIHRvV2FzbVV0eG9Db2luTmFtZSB9IGZyb20gJy4uLy4uL25hbWVzJztcbmltcG9ydCB7IEFkZHJlc3NDb2RlYyB9IGZyb20gJy4uLy4uL3RyYW5zYWN0aW9uL3JlY2lwaWVudCc7XG5cbmltcG9ydCB7IFplY0FkZHJlc3NDb2RlYyB9IGZyb20gJy4vYWRkcmVzcyc7XG5pbXBvcnQgeyBzaWduSXJvbndvb2RUcmFuc2FjdGlvbiB9IGZyb20gJy4vc2lnbklyb253b29kVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgcmVzb2x2ZVBzYnRSZWNpcGllbnRzLCBQc2J0UmVjaXBpZW50IH0gZnJvbSAnLi9yZWNpcGllbnRzJztcbmltcG9ydCB7IGFzc2VydFNoaWVsZGVkV2FsbGV0QWRkcmVzcyB9IGZyb20gJy4vc2hpZWxkZWRBZGRyZXNzJztcbmltcG9ydCB0eXBlIHsgWmNhc2hDb2luTmFtZSB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgWmVjIGV4dGVuZHMgQWJzdHJhY3RVdHhvQ29pbiB7XG4gIHJlYWRvbmx5IG5hbWU6IFV0eG9Db2luTmFtZSA9ICd6ZWMnO1xuXG4gIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UpIHtcbiAgICBzdXBlcihiaXRnbyk7XG4gIH1cblxuICAvKipcbiAgICogWkVDIHNoaWVsZGVkIChPcmNoYXJkL0lyb253b29kKSBjdXN0b2RpYWwgd2FsbGV0cyB1c2UgUmVkUGFsbGFzIHRocmVzaG9sZCBrZXlzLlxuICAgKiBUcmFuc3BhcmVudCAoc2VjcDI1NmsxIG11bHRpc2lnKSBmbG93cyBhcmUgdW5hZmZlY3RlZDogTVBDQWxnb3JpdGhtIGlzIG9ubHlcbiAgICogY29uc3VsdGVkIG9uIHRoZSBUU1MgY3VzdG9kaWFsIHdhbGxldC1jcmVhdGlvbiBwYXRoLlxuICAgKiBAaW5oZXJpdGRvY1xuICAgKi9cbiAgZ2V0TVBDQWxnb3JpdGhtKCk6IE1QQ0FsZ29yaXRobSB7XG4gICAgcmV0dXJuICdyZWRwYWxsYXMnO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZUluc3RhbmNlKGJpdGdvOiBCaXRHb0Jhc2UpOiBaZWMge1xuICAgIHJldHVybiBuZXcgWmVjKGJpdGdvKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGdldCBhZGRyZXNzQ29kZWMoKTogWmVjQWRkcmVzc0NvZGVjIHtcbiAgICByZXR1cm4gbmV3IFplY0FkZHJlc3NDb2RlYyh0aGlzLm5hbWUsIHRoaXMud2FzbU5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNoaWVsZGVkIChPcmNoYXJkL0lyb253b29kKSBhZGRyZXNzZXMgYXJlIHJldHVybmVkIHdpdGggYGNvaW5TcGVjaWZpYy5zaGllbGRlZGAgYW5kXG4gICAqIGNhbm5vdCBiZSBsb2NhbGx5IHJlZGVyaXZlZCBmcm9tIHNlY3AyNTZrMSB4cHVicyAoUmVkUGFsbGFzIGtleWNoYWlucyBjYXJyeSBub25lKSwgc29cbiAgICogdmVyaWZ5IHRoZW0gYWdhaW5zdCB0aGUgcGxhdGZvcm0tcmVwb3J0ZWQgZGl2ZXJzaWZpZXIvcGtEIGluc3RlYWQgb2YgdGhlIGZpeGVkLXNjcmlwdFxuICAgKiB0cmFuc3BhcmVudCBkZXJpdmF0aW9uIHRoZSBiYXNlIGNsYXNzIHBlcmZvcm1zLlxuICAgKiBAaW5oZXJpdGRvY1xuICAgKi9cbiAgb3ZlcnJpZGUgYXN5bmMgaXNXYWxsZXRBZGRyZXNzKHBhcmFtczogVmVyaWZ5QWRkcmVzc09wdGlvbnM8VXR4b0NvaW5TcGVjaWZpYz4sIHdhbGxldD86IElXYWxsZXQpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAocGFyYW1zLmNvaW5TcGVjaWZpYz8uc2hpZWxkZWQpIHtcbiAgICAgIGFzc2VydFNoaWVsZGVkV2FsbGV0QWRkcmVzcyh0aGlzLm5hbWUsIHBhcmFtcyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLmlzV2FsbGV0QWRkcmVzcyhwYXJhbXMsIHdhbGxldCk7XG4gIH1cblxuICBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcsIHBhcmFtPzogeyBhbnlGb3JtYXQ/OiBib29sZWFuOyBhbGxvd0xpZ2h0bmluZz86IGJvb2xlYW4gfSB8IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hZGRyZXNzQ29kZWMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcyk7XG4gIH1cblxuICBwcml2YXRlIGluZmVyVW5pZmllZFJlY2lwaWVudFByZWZlcmVuY2UoXG4gICAgcmVjaXBpZW50czogeyBhZGRyZXNzOiBzdHJpbmcgfCB1bmRlZmluZWQgfVtdIHwgdW5kZWZpbmVkXG4gICk6IFVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzaGllbGRlZG5lc3MgPSAocmVjaXBpZW50cyA/PyBbXSkubWFwKChyZWNpcGllbnQpOiBVbmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgICBjb25zdCBhZGRyZXNzID0gcmVjaXBpZW50LmFkZHJlc3M7XG4gICAgICBpZiAoYWRkcmVzcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiAndHJhbnNwYXJlbnQnO1xuICAgICAgfVxuICAgICAgaWYgKEFkZHJlc3NDb2RlYy5pc1NjcmlwdFJlY2lwaWVudChhZGRyZXNzKSkge1xuICAgICAgICByZXR1cm4gJ3RyYW5zcGFyZW50JztcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhhc1RyYW5zcGFyZW50UmVjZWl2ZXIgPSB6Y2FzaEFkZHJlc3MuaGFzVHJhbnNwYXJlbnRSZWNlaXZlcihhZGRyZXNzLCB0aGlzLndhc21OYW1lKTtcbiAgICAgIGNvbnN0IGhhc09yY2hhcmRSZWNlaXZlciA9IHpjYXNoQWRkcmVzcy5oYXNPcmNoYXJkUmVjZWl2ZXIoYWRkcmVzcywgdGhpcy53YXNtTmFtZSk7XG4gICAgICByZXR1cm4gaGFzT3JjaGFyZFJlY2VpdmVyICYmICFoYXNUcmFuc3BhcmVudFJlY2VpdmVyXG4gICAgICAgID8gJ3NoaWVsZGVkJ1xuICAgICAgICA6IGhhc1RyYW5zcGFyZW50UmVjZWl2ZXJcbiAgICAgICAgPyAndHJhbnNwYXJlbnQnXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH0pO1xuICAgIGlmIChzaGllbGRlZG5lc3MuaW5jbHVkZXMoJ3NoaWVsZGVkJykgJiYgc2hpZWxkZWRuZXNzLmluY2x1ZGVzKCd0cmFuc3BhcmVudCcpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01peGVkIHNoaWVsZGVkIGFuZCB0cmFuc3BhcmVudCByZWNpcGllbnRzIGFyZSBub3Qgc3VwcG9ydGVkJyk7XG4gICAgfVxuICAgIHJldHVybiBzaGllbGRlZG5lc3MuaW5jbHVkZXMoJ3NoaWVsZGVkJykgPyAnc2hpZWxkZWQnIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgcGFyc2VUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgICBwYXJhbXM6IFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+XG4gICk6IFByb21pc2U8UGFyc2VkVHJhbnNhY3Rpb248VE51bWJlcj4+IHtcbiAgICBjb25zdCBwcmVmZXJlbmNlID1cbiAgICAgIHBhcmFtcy50eFBhcmFtcy51bmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZSA/PyB0aGlzLmluZmVyVW5pZmllZFJlY2lwaWVudFByZWZlcmVuY2UocGFyYW1zLnR4UGFyYW1zLnJlY2lwaWVudHMpO1xuICAgIHJldHVybiB0aGlzLnBhcnNlVHJhbnNhY3Rpb25XaXRoQWRkcmVzc0NvZGVjKFxuICAgICAgcGFyYW1zLFxuICAgICAgbmV3IFplY0FkZHJlc3NDb2RlYyh0aGlzLm5hbWUsIHRoaXMud2FzbU5hbWUsIHByZWZlcmVuY2UgPz8gJ3RyYW5zcGFyZW50JylcbiAgICApO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgZ2V0RXh0cmFQcmVidWlsZFBhcmFtcyhidWlsZFBhcmFtczogRXh0cmFQcmVidWlsZFBhcmFtc09wdGlvbnMgJiB7IHdhbGxldDogV2FsbGV0IH0pIHtcbiAgICBjb25zdCBleHRyYVBhcmFtcyA9IGF3YWl0IHN1cGVyLmdldEV4dHJhUHJlYnVpbGRQYXJhbXMoYnVpbGRQYXJhbXMpO1xuICAgIGNvbnN0IHsgdW5pZmllZFJlY2lwaWVudFByZWZlcmVuY2UgfSA9IGJ1aWxkUGFyYW1zO1xuICAgIGlmICh1bmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZXh0cmFQYXJhbXM7XG4gICAgfVxuICAgIHJldHVybiB7IC4uLmV4dHJhUGFyYW1zLCB1bmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZSB9O1xuICB9XG5cbiAgb3ZlcnJpZGUgZGVjb2RlVHJhbnNhY3Rpb24oaW5wdXQ6IEJ1ZmZlciB8IHN0cmluZyk6IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidCB7XG4gICAgY29uc3QgYnVmZmVyID0gdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyA/IHN0cmluZ1RvQnVmZmVyVHJ5Rm9ybWF0cyhpbnB1dCwgWydoZXgnLCAnYmFzZTY0J10pIDogaW5wdXQ7XG4gICAgaWYgKCFoYXNQc2J0TWFnaWMoYnVmZmVyKSkge1xuICAgICAgcmV0dXJuIHN1cGVyLmRlY29kZVRyYW5zYWN0aW9uKGlucHV0KTtcbiAgICB9XG4gICAgcmV0dXJuIGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoUHNidC5mcm9tQnl0ZXMoYnVmZmVyLCB0b1dhc21VdHhvQ29pbk5hbWUodGhpcy5uYW1lKSBhcyBaY2FzaENvaW5OYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSb3V0ZSB2NiAoSXJvbndvb2QpIHByZWJ1aWxkcyB0byB0aGUgSXJvbndvb2Qgc2lnbmluZyBwYXRoIOKAlCBpdHMgYHNpZ25gIG92ZXJyaWRlIHJlcXVpcmVzXG4gICAqIHRoZSB3YWxsZXQgcm9vdCBrZXlzIHRvIGRlcml2ZSB0aGUgb3ZrIG9uIHRoZSB1c2VyJ3MgZmlyc3Qgc2lnbmluZyByb3VuZCDigJQgYW5kIGtlZXAgZXZlcnlcbiAgICogb3RoZXIgcHJlYnVpbGQgKHY0IGFuZCBub24tUFNCVCkgb24gdGhlIGdlbmVyaWMgcGF0aC5cbiAgICovXG4gIG92ZXJyaWRlIGFzeW5jIHNpZ25UcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgICBwYXJhbXM6IFNpZ25UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlcj5cbiAgKTogUHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbiB8IEhhbGZTaWduZWRVdHhvVHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCB0eFByZWJ1aWxkID0gcGFyYW1zPy50eFByZWJ1aWxkO1xuICAgIGlmICghXy5pc09iamVjdCh0eFByZWJ1aWxkKSkge1xuICAgICAgLy8gRGVmZXIgdG8gdGhlIGJhc2UgcGF0aCBmb3IgaXRzIHN0YW5kYXJkIG1pc3NpbmcvbWFsZm9ybWVkLXByZWJ1aWxkIHZhbGlkYXRpb24gZXJyb3JzLlxuICAgICAgcmV0dXJuIHN1cGVyLnNpZ25UcmFuc2FjdGlvbihwYXJhbXMpO1xuICAgIH1cbiAgICBjb25zdCB0eCA9IHRoaXMuZGVjb2RlVHJhbnNhY3Rpb25Gcm9tUHJlYnVpbGQodHhQcmVidWlsZCk7XG4gICAgaWYgKCEodHggaW5zdGFuY2VvZiBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaElyb253b29kQml0R29Qc2J0KSkge1xuICAgICAgcmV0dXJuIHN1cGVyLnNpZ25UcmFuc2FjdGlvbihwYXJhbXMpO1xuICAgIH1cbiAgICByZXR1cm4gc2lnbklyb253b29kVHJhbnNhY3Rpb24odGhpcywgdHgsIHBhcmFtcyk7XG4gIH1cbiAgcmVzb2x2ZVJlY2lwaWVudHNGcm9tUHNidChpbnB1dDogQnVmZmVyIHwgc3RyaW5nLCB3YWxsZXRLZXlzOiBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cyk6IFBzYnRSZWNpcGllbnRbXSB7XG4gICAgY29uc3QgcHNidCA9IHRoaXMuZGVjb2RlVHJhbnNhY3Rpb24oaW5wdXQpO1xuICAgIGlmICghKHBzYnQgaW5zdGFuY2VvZiBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaEJpdEdvUHNidCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgYSBaY2FzaCBQU0JUJyk7XG4gICAgfVxuICAgIHJldHVybiByZXNvbHZlUHNidFJlY2lwaWVudHMocHNidCwgd2FsbGV0S2V5cywgdGhpcy5hZGRyZXNzQ29kZWMpO1xuICB9XG59XG4iXX0=
@@ -3,6 +3,7 @@ import { IWallet, Triple } from '@bitgo/sdk-core';
3
3
  import { UtxoCoinName, WasmUtxoCoinName } from '../names';
4
4
  import type { Unspent } from '../unspent';
5
5
  import type { TransactionExplanationUtxolibPsbt, TransactionExplanationWasm } from './fixedScript/explainTransaction';
6
+ import type { AddressCodec } from './recipient';
6
7
  /**
7
8
  * Decompose a raw transaction into useful information, such as the total amounts,
8
9
  * change amounts, and transaction outputs.
@@ -14,5 +15,5 @@ export declare function explainTx<TNumber extends number | bigint>(tx: fixedScri
14
15
  txInfo?: {
15
16
  unspents?: Unspent<TNumber>[];
16
17
  };
17
- }, coinName: UtxoCoinName | WasmUtxoCoinName): TransactionExplanationUtxolibPsbt | TransactionExplanationWasm;
18
+ }, coinName: UtxoCoinName | WasmUtxoCoinName, addressCodec: AddressCodec): TransactionExplanationUtxolibPsbt | TransactionExplanationWasm;
18
19
  //# sourceMappingURL=explainTransaction.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"explainTransaction.d.ts","sourceRoot":"","sources":["../../../../src/transaction/explainTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAY,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAK5D,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAG1C,OAAO,KAAK,EAAE,iCAAiC,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAItH;;;GAGG;AACH,wBAAgB,SAAS,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACvD,EAAE,EAAE,iBAAiB,CAAC,SAAS,GAAG,QAAQ,EAC1C,MAAM,EAAE;IACN,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,CAAA;KAAE,CAAC;CAC5C,EACD,QAAQ,EAAE,YAAY,GAAG,gBAAgB,GACxC,iCAAiC,GAAG,0BAA0B,CAgChE"}
1
+ {"version":3,"file":"explainTransaction.d.ts","sourceRoot":"","sources":["../../../../src/transaction/explainTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAY,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAK5D,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAG1C,OAAO,KAAK,EAAE,iCAAiC,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAGtH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACvD,EAAE,EAAE,iBAAiB,CAAC,SAAS,GAAG,QAAQ,EAC1C,MAAM,EAAE;IACN,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,CAAA;KAAE,CAAC;CAC5C,EACD,QAAQ,EAAE,YAAY,GAAG,gBAAgB,EACzC,YAAY,EAAE,YAAY,GACzB,iCAAiC,GAAG,0BAA0B,CAiChE"}