@bitgo-beta/sdk-coin-canton 1.0.1-beta.91 → 1.0.1-beta.910

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 (183) hide show
  1. package/dist/src/canton.d.ts +19 -2
  2. package/dist/src/canton.d.ts.map +1 -1
  3. package/dist/src/canton.js +342 -10
  4. package/dist/src/cantonToken.d.ts +19 -0
  5. package/dist/src/cantonToken.d.ts.map +1 -0
  6. package/dist/src/cantonToken.js +52 -0
  7. package/dist/src/index.d.ts +1 -0
  8. package/dist/src/index.d.ts.map +1 -1
  9. package/dist/src/index.js +2 -1
  10. package/dist/src/lib/allocationAllocateBuilder.d.ts +135 -0
  11. package/dist/src/lib/allocationAllocateBuilder.d.ts.map +1 -0
  12. package/dist/src/lib/allocationAllocateBuilder.js +268 -0
  13. package/dist/src/lib/allocationAllocateWithdrawnBuilder.d.ts +67 -0
  14. package/dist/src/lib/allocationAllocateWithdrawnBuilder.d.ts.map +1 -0
  15. package/dist/src/lib/allocationAllocateWithdrawnBuilder.js +130 -0
  16. package/dist/src/lib/allocationRejectBuilder.d.ts +51 -0
  17. package/dist/src/lib/allocationRejectBuilder.d.ts.map +1 -0
  18. package/dist/src/lib/allocationRejectBuilder.js +107 -0
  19. package/dist/src/lib/allocationRequestBuilder.d.ts +130 -0
  20. package/dist/src/lib/allocationRequestBuilder.d.ts.map +1 -0
  21. package/dist/src/lib/allocationRequestBuilder.js +278 -0
  22. package/dist/src/lib/amount.d.ts +8 -0
  23. package/dist/src/lib/amount.d.ts.map +1 -0
  24. package/dist/src/lib/amount.js +36 -0
  25. package/dist/src/lib/broadridge.d.ts +31 -0
  26. package/dist/src/lib/broadridge.d.ts.map +1 -0
  27. package/dist/src/lib/broadridge.js +289 -0
  28. package/dist/src/lib/broadridgeSettlementAuthorizationBuilder.d.ts +37 -0
  29. package/dist/src/lib/broadridgeSettlementAuthorizationBuilder.d.ts.map +1 -0
  30. package/dist/src/lib/broadridgeSettlementAuthorizationBuilder.js +111 -0
  31. package/dist/src/lib/cantonCommandBuilder.d.ts +82 -0
  32. package/dist/src/lib/cantonCommandBuilder.d.ts.map +1 -0
  33. package/dist/src/lib/cantonCommandBuilder.js +215 -0
  34. package/dist/src/lib/clearSigning.d.ts +58 -0
  35. package/dist/src/lib/clearSigning.d.ts.map +1 -0
  36. package/dist/src/lib/clearSigning.js +66 -0
  37. package/dist/src/lib/cosignDelegationAcceptBuilder.d.ts +56 -0
  38. package/dist/src/lib/cosignDelegationAcceptBuilder.d.ts.map +1 -0
  39. package/dist/src/lib/cosignDelegationAcceptBuilder.js +112 -0
  40. package/dist/src/lib/cosignDelegationProposalBuilder.d.ts +60 -0
  41. package/dist/src/lib/cosignDelegationProposalBuilder.d.ts.map +1 -0
  42. package/dist/src/lib/cosignDelegationProposalBuilder.js +111 -0
  43. package/dist/src/lib/endInvestorOnboardingOfferBuilder.d.ts +58 -0
  44. package/dist/src/lib/endInvestorOnboardingOfferBuilder.d.ts.map +1 -0
  45. package/dist/src/lib/endInvestorOnboardingOfferBuilder.js +112 -0
  46. package/dist/src/lib/iface.d.ts +295 -8
  47. package/dist/src/lib/iface.d.ts.map +1 -1
  48. package/dist/src/lib/iface.js +3 -1
  49. package/dist/src/lib/index.d.ts +15 -0
  50. package/dist/src/lib/index.d.ts.map +1 -1
  51. package/dist/src/lib/index.js +32 -2
  52. package/dist/src/lib/messages/cantonBaseMessage.d.ts +16 -0
  53. package/dist/src/lib/messages/cantonBaseMessage.d.ts.map +1 -0
  54. package/dist/src/lib/messages/cantonBaseMessage.js +28 -0
  55. package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessage.d.ts +14 -0
  56. package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessage.d.ts.map +1 -0
  57. package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessage.js +23 -0
  58. package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessageBuilder.d.ts +17 -0
  59. package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessageBuilder.d.ts.map +1 -0
  60. package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessageBuilder.js +25 -0
  61. package/dist/src/lib/messages/cantonSignTopology/index.d.ts +3 -0
  62. package/dist/src/lib/messages/cantonSignTopology/index.d.ts.map +1 -0
  63. package/dist/src/lib/messages/cantonSignTopology/index.js +19 -0
  64. package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessage.d.ts +13 -0
  65. package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessage.d.ts.map +1 -0
  66. package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessage.js +22 -0
  67. package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessageBuilder.d.ts +14 -0
  68. package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessageBuilder.d.ts.map +1 -0
  69. package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessageBuilder.js +22 -0
  70. package/dist/src/lib/messages/cantonSignTransaction/index.d.ts +3 -0
  71. package/dist/src/lib/messages/cantonSignTransaction/index.d.ts.map +1 -0
  72. package/dist/src/lib/messages/cantonSignTransaction/index.js +19 -0
  73. package/dist/src/lib/messages/index.d.ts +5 -0
  74. package/dist/src/lib/messages/index.d.ts.map +1 -0
  75. package/dist/src/lib/messages/index.js +21 -0
  76. package/dist/src/lib/messages/messageBuilderFactory.d.ts +7 -0
  77. package/dist/src/lib/messages/messageBuilderFactory.d.ts.map +1 -0
  78. package/dist/src/lib/messages/messageBuilderFactory.js +23 -0
  79. package/dist/src/lib/oneStepPreApprovalBuilder.d.ts +8 -0
  80. package/dist/src/lib/oneStepPreApprovalBuilder.d.ts.map +1 -1
  81. package/dist/src/lib/oneStepPreApprovalBuilder.js +15 -1
  82. package/dist/src/lib/resourcesInterface.d.ts +1 -1
  83. package/dist/src/lib/resourcesInterface.d.ts.map +1 -1
  84. package/dist/src/lib/resourcesInterface.js +1 -1
  85. package/dist/src/lib/transaction/transaction.d.ts +16 -1
  86. package/dist/src/lib/transaction/transaction.d.ts.map +1 -1
  87. package/dist/src/lib/transaction/transaction.js +343 -21
  88. package/dist/src/lib/transactionBuilderFactory.d.ts +24 -0
  89. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  90. package/dist/src/lib/transactionBuilderFactory.js +82 -1
  91. package/dist/src/lib/transferAcknowledgeBuilder.d.ts +4 -4
  92. package/dist/src/lib/transferAcknowledgeBuilder.d.ts.map +1 -1
  93. package/dist/src/lib/transferAcknowledgeBuilder.js +5 -7
  94. package/dist/src/lib/transferBuilder.d.ts +84 -2
  95. package/dist/src/lib/transferBuilder.d.ts.map +1 -1
  96. package/dist/src/lib/transferBuilder.js +164 -2
  97. package/dist/src/lib/transferOfferWithdrawnBuilder.d.ts +67 -0
  98. package/dist/src/lib/transferOfferWithdrawnBuilder.d.ts.map +1 -0
  99. package/dist/src/lib/transferOfferWithdrawnBuilder.js +130 -0
  100. package/dist/src/lib/transferPreapprovalCancelBuilder.d.ts +68 -0
  101. package/dist/src/lib/transferPreapprovalCancelBuilder.d.ts.map +1 -0
  102. package/dist/src/lib/transferPreapprovalCancelBuilder.js +124 -0
  103. package/dist/src/lib/utils.d.ts +51 -3
  104. package/dist/src/lib/utils.d.ts.map +1 -1
  105. package/dist/src/lib/utils.js +912 -68
  106. package/dist/src/lib/walletInitBuilder.d.ts +2 -1
  107. package/dist/src/lib/walletInitBuilder.d.ts.map +1 -1
  108. package/dist/src/lib/walletInitBuilder.js +4 -1
  109. package/dist/src/register.d.ts +2 -0
  110. package/dist/src/register.d.ts.map +1 -1
  111. package/dist/src/register.js +19 -2
  112. package/dist/test/integration/canton.integration.js +120 -3
  113. package/dist/test/integration/canton.token.integration.d.ts +2 -0
  114. package/dist/test/integration/canton.token.integration.d.ts.map +1 -0
  115. package/dist/test/integration/canton.token.integration.js +51 -0
  116. package/dist/test/resources.d.ts +319 -1
  117. package/dist/test/resources.d.ts.map +1 -1
  118. package/dist/test/resources.js +333 -6
  119. package/dist/test/unit/builder/allocationAllocate/allocationAllocateBuilder.d.ts +2 -0
  120. package/dist/test/unit/builder/allocationAllocate/allocationAllocateBuilder.d.ts.map +1 -0
  121. package/dist/test/unit/builder/allocationAllocate/allocationAllocateBuilder.js +434 -0
  122. package/dist/test/unit/builder/allocationAllocateWithdrawn/allocationAllocateWithdrawnBuilder.d.ts +2 -0
  123. package/dist/test/unit/builder/allocationAllocateWithdrawn/allocationAllocateWithdrawnBuilder.d.ts.map +1 -0
  124. package/dist/test/unit/builder/allocationAllocateWithdrawn/allocationAllocateWithdrawnBuilder.js +133 -0
  125. package/dist/test/unit/builder/allocationReject/allocationRejectBuilder.d.ts +2 -0
  126. package/dist/test/unit/builder/allocationReject/allocationRejectBuilder.d.ts.map +1 -0
  127. package/dist/test/unit/builder/allocationReject/allocationRejectBuilder.js +121 -0
  128. package/dist/test/unit/builder/allocationRequest/allocationRequestBuilder.d.ts +2 -0
  129. package/dist/test/unit/builder/allocationRequest/allocationRequestBuilder.d.ts.map +1 -0
  130. package/dist/test/unit/builder/allocationRequest/allocationRequestBuilder.js +531 -0
  131. package/dist/test/unit/builder/cantonCommand/cantonCommandBuilder.d.ts +2 -0
  132. package/dist/test/unit/builder/cantonCommand/cantonCommandBuilder.d.ts.map +1 -0
  133. package/dist/test/unit/builder/cantonCommand/cantonCommandBuilder.js +399 -0
  134. package/dist/test/unit/builder/cosignDelegationAccept/cosignDelegationAcceptBuilder.d.ts +2 -0
  135. package/dist/test/unit/builder/cosignDelegationAccept/cosignDelegationAcceptBuilder.d.ts.map +1 -0
  136. package/dist/test/unit/builder/cosignDelegationAccept/cosignDelegationAcceptBuilder.js +116 -0
  137. package/dist/test/unit/builder/cosignDelegationProposal/cosignDelegationProposalBuilder.d.ts +2 -0
  138. package/dist/test/unit/builder/cosignDelegationProposal/cosignDelegationProposalBuilder.d.ts.map +1 -0
  139. package/dist/test/unit/builder/cosignDelegationProposal/cosignDelegationProposalBuilder.js +74 -0
  140. package/dist/test/unit/builder/endInvestorOnboardingOffer/endInvestorOnboardingOfferBuilder.d.ts +2 -0
  141. package/dist/test/unit/builder/endInvestorOnboardingOffer/endInvestorOnboardingOfferBuilder.d.ts.map +1 -0
  142. package/dist/test/unit/builder/endInvestorOnboardingOffer/endInvestorOnboardingOfferBuilder.js +116 -0
  143. package/dist/test/unit/builder/oneStepEnablement/oneStepEnablementBuilder.js +20 -1
  144. package/dist/test/unit/builder/settlementAuthorization/settlementAuthorizationBuilder.d.ts +2 -0
  145. package/dist/test/unit/builder/settlementAuthorization/settlementAuthorizationBuilder.d.ts.map +1 -0
  146. package/dist/test/unit/builder/settlementAuthorization/settlementAuthorizationBuilder.js +156 -0
  147. package/dist/test/unit/builder/transfer/transferBuilder.d.ts +2 -0
  148. package/dist/test/unit/builder/transfer/transferBuilder.d.ts.map +1 -0
  149. package/dist/test/unit/builder/transfer/transferBuilder.js +100 -0
  150. package/dist/test/unit/builder/transferAccept/transferAcceptBuilder.js +64 -1
  151. package/dist/test/unit/builder/transferAcknowledge/transferAcknowledgeBuilder.js +34 -1
  152. package/dist/test/unit/builder/transferOfferWithdrawn/transferOfferWithdrawnBuilder.d.ts +2 -0
  153. package/dist/test/unit/builder/transferOfferWithdrawn/transferOfferWithdrawnBuilder.d.ts.map +1 -0
  154. package/dist/test/unit/builder/transferOfferWithdrawn/transferOfferWithdrawnBuilder.js +64 -0
  155. package/dist/test/unit/builder/transferPreapprovalCancel/transferPreapprovalCancelBuilder.d.ts +2 -0
  156. package/dist/test/unit/builder/transferPreapprovalCancel/transferPreapprovalCancelBuilder.d.ts.map +1 -0
  157. package/dist/test/unit/builder/transferPreapprovalCancel/transferPreapprovalCancelBuilder.js +74 -0
  158. package/dist/test/unit/builder/transferReject/transferRejectBuilder.js +40 -1
  159. package/dist/test/unit/canton.d.ts +2 -0
  160. package/dist/test/unit/canton.d.ts.map +1 -0
  161. package/dist/test/unit/canton.js +922 -0
  162. package/dist/test/unit/index.d.ts +5 -0
  163. package/dist/test/unit/index.d.ts.map +1 -1
  164. package/dist/test/unit/index.js +6 -1
  165. package/dist/test/unit/messages/cantonSignTopologyMessage.d.ts +2 -0
  166. package/dist/test/unit/messages/cantonSignTopologyMessage.d.ts.map +1 -0
  167. package/dist/test/unit/messages/cantonSignTopologyMessage.js +46 -0
  168. package/dist/test/unit/messages/cantonSignTransactionMessage.d.ts +2 -0
  169. package/dist/test/unit/messages/cantonSignTransactionMessage.d.ts.map +1 -0
  170. package/dist/test/unit/messages/cantonSignTransactionMessage.js +48 -0
  171. package/dist/test/unit/messages/clearSigning.d.ts +2 -0
  172. package/dist/test/unit/messages/clearSigning.d.ts.map +1 -0
  173. package/dist/test/unit/messages/clearSigning.js +72 -0
  174. package/dist/test/unit/messages/messageBuilderFactory.d.ts +2 -0
  175. package/dist/test/unit/messages/messageBuilderFactory.d.ts.map +1 -0
  176. package/dist/test/unit/messages/messageBuilderFactory.js +52 -0
  177. package/dist/test/unit/register.d.ts +2 -0
  178. package/dist/test/unit/register.d.ts.map +1 -0
  179. package/dist/test/unit/register.js +65 -0
  180. package/dist/test/unit/utils.js +452 -9
  181. package/dist/tsconfig.tsbuildinfo +1 -1
  182. package/package.json +8 -8
  183. package/LICENSE +0 -191
@@ -1,11 +1,17 @@
1
- import { AuditDecryptedKeyParams, BaseCoin, BitGoBase, KeyPair, MPCAlgorithm, MultisigType, ParsedTransaction, ParseTransactionOptions, SignedTransaction, SignTransactionOptions, TransactionType, TssVerifyAddressOptions, VerifyTransactionOptions, TransactionExplanation as BaseTransactionExplanation, PopulatedIntent, PrebuildTransactionWithIntentOptions } from '@bitgo-beta/sdk-core';
1
+ import { AuditDecryptedKeyParams, BaseCoin, BitGoBase, CantonCommandParams, KeyPair, MPCAlgorithm, MultisigType, ParsedTransaction, ParseTransactionOptions, PopulatedIntent, PrebuildTransactionWithIntentOptions, SignedTransaction, SignTransactionOptions, TokenEnablementConfig, TransactionExplanation as BaseTransactionExplanation, TransactionParams, TransactionType, TssVerifyAddressOptions, VerifyTransactionOptions } from '@bitgo-beta/sdk-core';
2
2
  import { BaseCoin as StaticsBaseCoin } from '@bitgo-beta/statics';
3
+ import { BroadridgeCommandParams } from './lib/iface';
3
4
  export interface TransactionExplanation extends BaseTransactionExplanation {
4
5
  type: TransactionType;
5
6
  }
6
7
  export interface ExplainTransactionOptions {
7
8
  txHex: string;
8
9
  }
10
+ export interface CantonTransactionParams extends TransactionParams {
11
+ cantonCommandParams?: CantonCommandParams;
12
+ broadridgeCommandParams?: BroadridgeCommandParams;
13
+ executorPartyId?: string;
14
+ }
9
15
  export declare class Canton extends BaseCoin {
10
16
  protected readonly _staticsCoin: Readonly<StaticsBaseCoin>;
11
17
  protected constructor(bitgo: BitGoBase, staticsCoin?: Readonly<StaticsBaseCoin>);
@@ -21,6 +27,8 @@ export declare class Canton extends BaseCoin {
21
27
  getFullName(): string;
22
28
  /** @inheritDoc */
23
29
  supportsTss(): boolean;
30
+ /** @inheritDoc */
31
+ supportsMessageSigning(): boolean;
24
32
  /** inherited doc */
25
33
  getDefaultMultisigType(): MultisigType;
26
34
  /** inherited doc */
@@ -28,6 +36,10 @@ export declare class Canton extends BaseCoin {
28
36
  getMPCAlgorithm(): MPCAlgorithm;
29
37
  /** @inheritDoc */
30
38
  verifyTransaction(params: VerifyTransactionOptions): Promise<boolean>;
39
+ private verifyBroadridgeStandingDelegationTransaction;
40
+ private verifyBroadridgeCommandTransaction;
41
+ private verifyCantonCommandTransaction;
42
+ private relativeSkipPaths;
31
43
  /** @inheritDoc */
32
44
  isWalletAddress(params: TssVerifyAddressOptions): Promise<boolean>;
33
45
  /** @inheritDoc */
@@ -41,10 +53,15 @@ export declare class Canton extends BaseCoin {
41
53
  /** @inheritDoc */
42
54
  isValidAddress(address: string): boolean;
43
55
  /** @inheritDoc */
56
+ getTokenEnablementConfig(): TokenEnablementConfig;
57
+ getAddressFromPublicKey(publicKeyHex: string): string;
58
+ /** @inheritDoc */
44
59
  signTransaction(params: SignTransactionOptions): Promise<SignedTransaction>;
45
60
  /** @inheritDoc */
46
61
  auditDecryptedKey({ multiSigType, prv, publicKey }: AuditDecryptedKeyParams): void;
47
62
  /** @inheritDoc */
48
- setCoinSpecificFieldsInIntent(intent: PopulatedIntent, params: PrebuildTransactionWithIntentOptions): void;
63
+ setCoinSpecificFieldsInIntent(intent: PopulatedIntent, params: PrebuildTransactionWithIntentOptions & {
64
+ executorPartyId?: string;
65
+ }): void;
49
66
  }
50
67
  //# sourceMappingURL=canton.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"canton.d.ts","sourceRoot":"","sources":["../../src/canton.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,QAAQ,EACR,SAAS,EACT,OAAO,EACP,YAAY,EACZ,YAAY,EAEZ,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EACjB,sBAAsB,EACtB,eAAe,EACf,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,IAAI,0BAA0B,EAEpD,eAAe,EACf,oCAAoC,EACrC,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAS,MAAM,qBAAqB,CAAC;AAKzE,MAAM,WAAW,sBAAuB,SAAQ,0BAA0B;IACxE,IAAI,EAAE,eAAe,CAAC;CACvB;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,MAAO,SAAQ,QAAQ;IAClC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;IAE3D,SAAS,aAAa,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;IAU/E,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ;IAI1F,OAAO,CAAC,UAAU;IAIlB,kBAAkB;IACX,aAAa,IAAI,MAAM;IAI9B,kBAAkB;IACX,QAAQ,IAAI,MAAM;IAIzB,kBAAkB;IACX,SAAS,IAAI,MAAM;IAI1B,kBAAkB;IACX,WAAW,IAAI,MAAM;IAI5B,kBAAkB;IAClB,WAAW,IAAI,OAAO;IAItB,oBAAoB;IACpB,sBAAsB,IAAI,YAAY;IAItC,oBAAoB;IACpB,uCAAuC,IAAI,OAAO;IAIlD,eAAe,IAAI,YAAY;IAI/B,kBAAkB;IACZ,iBAAiB,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC;IAqB3E,kBAAkB;IAClB,eAAe,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,OAAO,CAAC;IAIlE,kBAAkB;IAClB,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAI7E,kBAAkB;IAClB,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO;IAYvC,kBAAkB;IAClB,kBAAkB,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAatF,kBAAkB;IAClB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIhC,kBAAkB;IAClB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAMxC,kBAAkB;IAClB,eAAe,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAI3E,kBAAkB;IAClB,iBAAiB,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,uBAAuB,GAAG,IAAI;IAOlF,kBAAkB;IAClB,6BAA6B,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,oCAAoC,GAAG,IAAI;CAK3G"}
1
+ {"version":3,"file":"canton.d.ts","sourceRoot":"","sources":["../../src/canton.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,7 @@ const sdk_lib_mpc_1 = require("@bitgo-beta/sdk-lib-mpc");
9
9
  const statics_1 = require("@bitgo-beta/statics");
10
10
  const lib_1 = require("./lib");
11
11
  const keyPair_1 = require("./lib/keyPair");
12
+ const broadridge_1 = require("./lib/broadridge");
12
13
  const utils_1 = __importDefault(require("./lib/utils"));
13
14
  class Canton extends sdk_core_1.BaseCoin {
14
15
  constructor(bitgo, staticsCoin) {
@@ -44,6 +45,10 @@ class Canton extends sdk_core_1.BaseCoin {
44
45
  supportsTss() {
45
46
  return true;
46
47
  }
48
+ /** @inheritDoc */
49
+ supportsMessageSigning() {
50
+ return true;
51
+ }
47
52
  /** inherited doc */
48
53
  getDefaultMultisigType() {
49
54
  return sdk_core_1.multisigTypes.tss;
@@ -58,31 +63,311 @@ class Canton extends sdk_core_1.BaseCoin {
58
63
  /** @inheritDoc */
59
64
  async verifyTransaction(params) {
60
65
  const coinConfig = statics_1.coins.get(this.getChain());
61
- // extract `txParams` when verifying other transaction types
62
- const { txPrebuild: txPrebuild } = params;
66
+ const { txPrebuild: txPrebuild, txParams } = params;
63
67
  const rawTx = txPrebuild.txHex;
64
68
  if (!rawTx) {
65
69
  throw new Error('missing required tx prebuild property txHex');
66
70
  }
67
71
  const txBuilder = new lib_1.TransactionBuilderFactory(coinConfig).from(rawTx);
68
72
  const transaction = txBuilder.transaction;
73
+ const explainedTx = transaction.explainTransaction();
74
+ const broadridgeParams = txParams.broadridgeCommandParams;
75
+ if (broadridgeParams) {
76
+ return this.verifyBroadridgeCommandTransaction(transaction, broadridgeParams);
77
+ }
78
+ if (txParams.type === 'cantonBroadridgeStandingDelegation') {
79
+ const executorPartyId = txParams.executorPartyId;
80
+ if (!executorPartyId) {
81
+ throw new Error('cantonBroadridgeStandingDelegation verifyTransaction: missing executorPartyId');
82
+ }
83
+ return this.verifyBroadridgeStandingDelegationTransaction(transaction, executorPartyId);
84
+ }
69
85
  switch (transaction.type) {
70
- case sdk_core_1.TransactionType.WalletInitialization: {
71
- // there is no input for this type of transaction, so always return true
86
+ case sdk_core_1.TransactionType.WalletInitialization:
87
+ case sdk_core_1.TransactionType.TransferAccept:
88
+ case sdk_core_1.TransactionType.TransferReject:
89
+ case sdk_core_1.TransactionType.TransferAcknowledge:
90
+ case sdk_core_1.TransactionType.TransferOfferWithdrawn:
91
+ case sdk_core_1.TransactionType.CosignDelegationAccept:
92
+ case sdk_core_1.TransactionType.CosignDelegationProposal:
93
+ case sdk_core_1.TransactionType.AllocationAllocate:
94
+ case sdk_core_1.TransactionType.AllocationRequest:
95
+ case sdk_core_1.TransactionType.AllocationReject:
96
+ case sdk_core_1.TransactionType.EndInvestorOnboardingOffer:
97
+ case sdk_core_1.TransactionType.AllocationAllocateWithdrawn:
98
+ // There is no recipient info to verify for these transaction types, so always return true.
99
+ return true;
100
+ case sdk_core_1.TransactionType.CantonCommand:
101
+ return this.verifyCantonCommandTransaction(transaction, txParams.cantonCommandParams);
102
+ case sdk_core_1.TransactionType.OneStepPreApproval:
103
+ // Canton is always a TSS wallet. The SDK's buildTokenEnablements passes enableTokens
104
+ // through unchanged for TSS wallets (no conversion to recipients), so txParams.enableTokens
105
+ // is the only source of user intent here.
106
+ //
107
+ // Receiver validation: the receiver of a OneStepPreApproval is always the wallet's root address.
108
+ // We use enableToken.address if explicitly provided, otherwise fall back to
109
+ // wallet.coinSpecific().rootAddress (the Canton party ID stored at wallet creation time).
110
+ // Token name validation: checked when the token is resolvable from statics.
111
+ if (txParams.type === 'enabletoken' &&
112
+ txParams.enableTokens !== undefined &&
113
+ txParams.enableTokens.length > 0) {
114
+ const txData = transaction.toJson();
115
+ const enableToken = txParams.enableTokens[0];
116
+ const walletRootAddress = params.wallet?.coinSpecific?.()?.rootAddress;
117
+ const expectedReceiver = enableToken.address ?? walletRootAddress;
118
+ if (expectedReceiver) {
119
+ // Strip ?memoId suffix if present in the stored address
120
+ const [expectedReceiverBase] = expectedReceiver.split('?memoId=');
121
+ if (txData.receiver !== expectedReceiverBase) {
122
+ throw new Error(`OneStepPreApproval receiver mismatch: expected '${expectedReceiverBase}', got '${txData.receiver}'`);
123
+ }
124
+ }
125
+ if (txData.token !== undefined && txData.token !== enableToken.name) {
126
+ throw new Error(`OneStepPreApproval token name mismatch: expected '${enableToken.name}', got '${txData.token}'`);
127
+ }
128
+ }
129
+ return true;
130
+ case sdk_core_1.TransactionType.TransferPreapprovalCancel:
131
+ // Mirrors OneStepPreApproval's receiver/token validation above, opposite direction.
132
+ // The cancel is self-service (the wallet's own party exercises the choice on its own
133
+ // TransferPreapproval), so sender === receiver on the parsed transaction; both must match
134
+ // the wallet's rootAddress (or the explicit enableToken.address, if provided).
135
+ if (txParams.type === 'disabletoken' &&
136
+ txParams.enableTokens !== undefined &&
137
+ txParams.enableTokens.length > 0) {
138
+ const txData = transaction.toJson();
139
+ const disableToken = txParams.enableTokens[0];
140
+ const walletRootAddress = params.wallet?.coinSpecific?.()?.rootAddress;
141
+ const expectedParty = disableToken.address ?? walletRootAddress;
142
+ if (expectedParty) {
143
+ const [expectedPartyBase] = expectedParty.split('?memoId=');
144
+ if (txData.receiver !== expectedPartyBase) {
145
+ throw new Error(`TransferPreapprovalCancel receiver mismatch: expected '${expectedPartyBase}', got '${txData.receiver}'`);
146
+ }
147
+ }
148
+ if (txData.token !== undefined && txData.token !== disableToken.name) {
149
+ throw new Error(`TransferPreapprovalCancel token name mismatch: expected '${disableToken.name}', got '${txData.token}'`);
150
+ }
151
+ }
152
+ return true;
153
+ case sdk_core_1.TransactionType.Send:
154
+ if (txParams.recipients !== undefined) {
155
+ const filteredRecipients = txParams.recipients?.map((recipient) => {
156
+ const { address, amount, tokenName } = recipient;
157
+ const [addressPart, memoId] = address.split('?memoId=');
158
+ return {
159
+ address: addressPart,
160
+ amount,
161
+ ...(memoId && { memo: memoId }),
162
+ ...(tokenName && { tokenName }),
163
+ };
164
+ });
165
+ const filteredOutputs = explainedTx.outputs?.map((output) => {
166
+ const { address, amount, tokenName, memo } = output;
167
+ return {
168
+ address,
169
+ amount,
170
+ ...(memo && { memo }),
171
+ ...(tokenName && { tokenName }),
172
+ };
173
+ });
174
+ if (JSON.stringify(filteredRecipients) !== JSON.stringify(filteredOutputs)) {
175
+ throw new Error('Tx outputs do not match with expected txParams recipients');
176
+ }
177
+ }
72
178
  return true;
73
- }
74
179
  default: {
75
180
  throw new Error(`unknown transaction type, ${transaction.type}`);
76
181
  }
77
182
  }
78
183
  }
184
+ verifyBroadridgeStandingDelegationTransaction(transaction, executorPartyId) {
185
+ const rawPrepared = transaction.prepareCommand?.preparedTransaction;
186
+ if (!rawPrepared) {
187
+ throw new Error('Broadridge standing delegation verifyTransaction: missing preparedTransaction protobuf');
188
+ }
189
+ const actual = utils_1.default.extractCantonCommandInfo(rawPrepared);
190
+ if (actual.kind !== 'CreateCommand' || actual.choice !== undefined) {
191
+ throw new Error('Broadridge standing delegation verifyTransaction: expected a StandingDelegationImpl_v1 CreateCommand');
192
+ }
193
+ const descriptor = (0, broadridge_1.broadridgeDescriptorFromCommand)(actual);
194
+ if (!descriptor ||
195
+ descriptor.standard !== 'CIP-56' ||
196
+ descriptor.entityName !== 'StandingDelegationImpl_v1' ||
197
+ descriptor.role !== 'client') {
198
+ throw new Error('Broadridge standing delegation verifyTransaction: unsupported prepared command');
199
+ }
200
+ const parsed = (0, broadridge_1.parseBroadridgeSettlementAuthorization)(actual);
201
+ if (parsed?.executor !== executorPartyId) {
202
+ throw new Error(`Broadridge standing delegation executor mismatch: expected '${executorPartyId}', got '${parsed?.executor ?? ''}'`);
203
+ }
204
+ return true;
205
+ }
206
+ verifyBroadridgeCommandTransaction(transaction, params) {
207
+ const rawPrepared = transaction.prepareCommand?.preparedTransaction;
208
+ if (!rawPrepared) {
209
+ throw new Error('Broadridge verifyTransaction: missing preparedTransaction protobuf');
210
+ }
211
+ const actual = utils_1.default.extractCantonCommandInfo(rawPrepared);
212
+ const actualDescriptor = (0, broadridge_1.broadridgeDescriptorFromCommand)(actual);
213
+ if (!actualDescriptor) {
214
+ throw new Error('Broadridge verifyTransaction: prepared command is not a supported Broadridge template');
215
+ }
216
+ const expected = params.descriptor;
217
+ const expectedTemplate = utils_1.default.parseCantonTemplateId(expected.templateId);
218
+ if (!expectedTemplate || expected.protocol !== 'broadridge') {
219
+ throw new Error('Broadridge verifyTransaction: invalid protocol descriptor');
220
+ }
221
+ if (expected.standard !== actualDescriptor.standard ||
222
+ expectedTemplate.pkg !== actualDescriptor.packageId ||
223
+ expectedTemplate.moduleName !== actualDescriptor.moduleName ||
224
+ expectedTemplate.entityName !== actualDescriptor.entityName ||
225
+ expected.choice !== actualDescriptor.choice ||
226
+ expected.role !== actualDescriptor.role) {
227
+ throw new Error('Broadridge verifyTransaction: template, package, protocol, choice, or role mismatch');
228
+ }
229
+ if (!utils_1.default.sameElements(expected.actors, actualDescriptor.actors)) {
230
+ throw new Error('Broadridge verifyTransaction: actor set mismatch');
231
+ }
232
+ const expectedContractId = expected.contractId ?? expected.requestCid ?? expected.agreementCid;
233
+ if (expectedContractId !== undefined && expectedContractId !== actual.contractId) {
234
+ throw new Error('Broadridge verifyTransaction: contract/request/agreement CID mismatch');
235
+ }
236
+ if (params.argument !== undefined) {
237
+ utils_1.default.assertDeepCantonMatch(params.argument, actual.argument, new Set());
238
+ }
239
+ return true;
240
+ }
241
+ verifyCantonCommandTransaction(transaction, userParams) {
242
+ if (!userParams) {
243
+ return true;
244
+ }
245
+ const cantonTx = transaction;
246
+ const rawPrepared = cantonTx.prepareCommand?.preparedTransaction;
247
+ if (!rawPrepared) {
248
+ throw new Error('CantonCommand verifyTransaction: missing preparedTransaction protobuf on tx prebuild');
249
+ }
250
+ const decodedCommand = utils_1.default.extractCantonCommandInfo(rawPrepared);
251
+ const userCommand = userParams.command;
252
+ // Input shape is enforced by mpcUtils at build time; here we resolve which branch is present.
253
+ const hasCreate = 'CreateCommand' in userCommand && utils_1.default.isPlainObject(userCommand.CreateCommand);
254
+ const hasExercise = 'ExerciseCommand' in userCommand && utils_1.default.isPlainObject(userCommand.ExerciseCommand);
255
+ if (!hasCreate && !hasExercise) {
256
+ throw new Error(`CantonCommand verifyTransaction: command must contain a CreateCommand or ExerciseCommand wrapper`);
257
+ }
258
+ if (hasCreate && hasExercise) {
259
+ throw new Error(`CantonCommand verifyTransaction: command must contain exactly one of CreateCommand or ExerciseCommand, not both`);
260
+ }
261
+ const userKind = hasCreate ? 'CreateCommand' : 'ExerciseCommand';
262
+ if (decodedCommand.kind !== userKind) {
263
+ throw new Error(`CantonCommand verifyTransaction: command kind mismatch — expected ${userKind}, got ${decodedCommand.kind}`);
264
+ }
265
+ const userInner = userKind === 'CreateCommand'
266
+ ? userCommand.CreateCommand
267
+ : userCommand.ExerciseCommand;
268
+ if (!userInner?.templateId) {
269
+ throw new Error(`CantonCommand verifyTransaction: ${userKind}.templateId must be a non-empty string`);
270
+ }
271
+ // templateId (moduleName + entityName; package id is mutable, so ignored)
272
+ const parsed = utils_1.default.parseCantonTemplateId(userInner.templateId);
273
+ if (!parsed) {
274
+ throw new Error(`CantonCommand verifyTransaction: invalid user templateId '${userInner.templateId}' — expected format 'Pkg:Module:Entity'`);
275
+ }
276
+ if (decodedCommand.templateId.moduleName !== parsed.moduleName ||
277
+ decodedCommand.templateId.entityName !== parsed.entityName) {
278
+ throw new Error(`CantonCommand verifyTransaction: templateId mismatch — expected '${parsed.moduleName}:${parsed.entityName}', got '${decodedCommand.templateId.moduleName}:${decodedCommand.templateId.entityName}'`);
279
+ }
280
+ // Build the inject-as skip set once for use across the contractId and argument checks
281
+ const skipPaths = utils_1.default.normalizeInjectAs(userParams.resolveContracts);
282
+ // metadata.submitterInfo.actAs must contain exactly the same parties as the user's actAs
283
+ if (!Array.isArray(userParams.actAs) || userParams.actAs.length === 0) {
284
+ throw new Error(`CantonCommand verifyTransaction: actAs must be a non-empty array of party IDs`);
285
+ }
286
+ if (!userParams.actAs.every((p) => typeof p === 'string' && p.trim() !== '')) {
287
+ throw new Error(`CantonCommand verifyTransaction: all actAs entries must be non-empty strings`);
288
+ }
289
+ const submitterActAs = cantonTx.cantonCommandActAsParties ?? [];
290
+ if (!utils_1.default.sameElements(submitterActAs, userParams.actAs)) {
291
+ throw new Error(`CantonCommand verifyTransaction: submitterInfo.actAs [${submitterActAs.join(', ')}] does not match user actAs [${userParams.actAs.join(', ')}]`);
292
+ }
293
+ if (userKind === 'ExerciseCommand') {
294
+ const exerciseInner = userInner;
295
+ // choice id
296
+ if (decodedCommand.choice !== exerciseInner.choice) {
297
+ throw new Error(`CantonCommand verifyTransaction: choice mismatch — expected '${exerciseInner.choice}', got '${decodedCommand.choice ?? ''}'`);
298
+ }
299
+ // every on-chain actingParty must be in the user's actAs (prevents privilege escalation)
300
+ const onChainActors = decodedCommand.actingParties ?? [];
301
+ for (const actor of onChainActors) {
302
+ if (!userParams.actAs.includes(actor)) {
303
+ throw new Error(`CantonCommand verifyTransaction: unauthorized acting party '${actor}' on root exercise (not in user actAs)`);
304
+ }
305
+ }
306
+ // contractId — skip when absent/empty or when IMS will inject it via resolveContracts
307
+ if (exerciseInner.contractId !== undefined &&
308
+ exerciseInner.contractId !== '' &&
309
+ !skipPaths.has('ExerciseCommand.contractId')) {
310
+ if (decodedCommand.contractId !== exerciseInner.contractId) {
311
+ throw new Error(`CantonCommand verifyTransaction: contractId mismatch — expected '${exerciseInner.contractId}', got '${decodedCommand.contractId ?? ''}'`);
312
+ }
313
+ }
314
+ // deep argument compare
315
+ const argumentSkipPaths = this.relativeSkipPaths(skipPaths, 'ExerciseCommand.choiceArgument.');
316
+ utils_1.default.assertDeepCantonMatch(exerciseInner.choiceArgument, decodedCommand.argument, argumentSkipPaths);
317
+ }
318
+ else {
319
+ const createInner = userInner;
320
+ // deep argument compare
321
+ const argumentSkipPaths = this.relativeSkipPaths(skipPaths, 'CreateCommand.createArguments.');
322
+ utils_1.default.assertDeepCantonMatch(createInner.createArguments, decodedCommand.argument, argumentSkipPaths);
323
+ }
324
+ return true;
325
+ }
326
+ relativeSkipPaths(skipPaths, prefix) {
327
+ const out = new Set();
328
+ for (const p of skipPaths) {
329
+ if (p.startsWith(prefix)) {
330
+ const stripped = p.slice(prefix.length);
331
+ if (stripped)
332
+ out.add(stripped);
333
+ }
334
+ }
335
+ return out;
336
+ }
79
337
  /** @inheritDoc */
80
- isWalletAddress(params) {
81
- throw new Error('Method not implemented.');
338
+ async isWalletAddress(params) {
339
+ // TODO: refactor this and use the `verifyEddsaMemoBasedWalletAddress` once published from sdk-core
340
+ // https://bitgoinc.atlassian.net/browse/COIN-6347
341
+ const { keychains, address: newAddress, index } = params;
342
+ const [addressPart, memoId] = newAddress.split('?memoId=');
343
+ if (!this.isValidAddress(addressPart)) {
344
+ throw new sdk_core_1.InvalidAddressError(`invalid address: ${newAddress}`);
345
+ }
346
+ if (memoId && memoId !== `${index}`) {
347
+ throw new sdk_core_1.InvalidAddressError(`invalid memoId index: ${memoId}`);
348
+ }
349
+ const commonKeychain = (0, sdk_core_1.extractCommonKeychain)(keychains);
350
+ const MPC = await sdk_core_1.EDDSAMethods.getInitializedMpcInstance();
351
+ const derivationPath = 'm/0';
352
+ const derivedPublicKey = MPC.deriveUnhardened(commonKeychain, derivationPath).slice(0, 64);
353
+ const publicKeyBase64 = Buffer.from(derivedPublicKey, 'hex').toString('base64');
354
+ const rootAddressFingerprint = utils_1.default.getAddressFromPublicKey(publicKeyBase64);
355
+ const rootAddress = `${rootAddressFingerprint.slice(0, 5)}::${rootAddressFingerprint}`;
356
+ return addressPart === rootAddress;
82
357
  }
83
358
  /** @inheritDoc */
84
- parseTransaction(params) {
85
- throw new Error('Method not implemented.');
359
+ async parseTransaction(params) {
360
+ const txHex = params.txHex;
361
+ if (!txHex) {
362
+ // Message-only signing requests (e.g. CANTON_SIGN_TRANSACTION, CANTON_SIGN_TOPOLOGY)
363
+ // have no transaction hex to parse — return an empty result.
364
+ return {};
365
+ }
366
+ const transactionExplanation = await this.explainTransaction({ txHex });
367
+ if (!transactionExplanation) {
368
+ throw new Error('Invalid transaction');
369
+ }
370
+ return transactionExplanation;
86
371
  }
87
372
  /** @inheritDoc */
88
373
  generateKeyPair(seed) {
@@ -121,6 +406,17 @@ class Canton extends sdk_core_1.BaseCoin {
121
406
  return utils_1.default.isValidAddress(address);
122
407
  }
123
408
  /** @inheritDoc */
409
+ getTokenEnablementConfig() {
410
+ return {
411
+ requiresTokenEnablement: true,
412
+ supportsMultipleTokenEnablements: false,
413
+ };
414
+ }
415
+ getAddressFromPublicKey(publicKeyHex) {
416
+ const publicKeyBase64 = Buffer.from(publicKeyHex, 'hex').toString('base64');
417
+ return utils_1.default.getAddressFromPublicKey(publicKeyBase64);
418
+ }
419
+ /** @inheritDoc */
124
420
  signTransaction(params) {
125
421
  throw new Error('Method not implemented.');
126
422
  }
@@ -136,7 +432,43 @@ class Canton extends sdk_core_1.BaseCoin {
136
432
  if (params.txRequestId) {
137
433
  intent.txRequestId = params.txRequestId;
138
434
  }
435
+ if (params.transferOfferId) {
436
+ intent.transferOfferId = params.transferOfferId;
437
+ }
438
+ if (params.unspents) {
439
+ intent.unspents = params.unspents;
440
+ }
441
+ if (params.cantonCommandParams) {
442
+ intent.cantonCommandParams = params.cantonCommandParams;
443
+ }
444
+ if (params.executorPartyId) {
445
+ intent.executorPartyId = params.executorPartyId;
446
+ }
447
+ if (params.endInvestorPartyId) {
448
+ intent.endInvestorPartyId = params.endInvestorPartyId;
449
+ }
450
+ if (params.reason) {
451
+ intent.reason = params.reason;
452
+ }
453
+ if (params.operator) {
454
+ intent.operator = params.operator;
455
+ }
456
+ if (params.provider) {
457
+ intent.provider = params.provider;
458
+ }
459
+ if (params.compliance) {
460
+ intent.compliance = params.compliance;
461
+ }
462
+ if (params.registrar) {
463
+ intent.registrar = params.registrar;
464
+ }
465
+ if (params.clientOnboarder) {
466
+ intent.clientOnboarder = params.clientOnboarder;
467
+ }
468
+ if (params.expirationIso) {
469
+ intent.expirationIso = params.expirationIso;
470
+ }
139
471
  }
140
472
  }
141
473
  exports.Canton = Canton;
142
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudG9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NhbnRvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtREFtQjhCO0FBQzlCLHlEQUErRDtBQUMvRCxpREFBeUU7QUFDekUsK0JBQWtEO0FBQ2xELDJDQUF5RDtBQUN6RCx3REFBZ0M7QUFVaEMsTUFBYSxNQUFPLFNBQVEsbUJBQVE7SUFHbEMsWUFBc0IsS0FBZ0IsRUFBRSxXQUF1QztRQUM3RSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFYixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztJQUNsQyxDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFnQixFQUFFLFdBQXVDO1FBQzdFLE9BQU8sSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFTyxVQUFVO1FBQ2hCLE9BQU8sSUFBSSwrQkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELGtCQUFrQjtJQUNYLGFBQWE7UUFDbEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsa0JBQWtCO0lBQ1gsUUFBUTtRQUNiLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxrQkFBa0I7SUFDWCxTQUFTO1FBQ2QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELGtCQUFrQjtJQUNYLFdBQVc7UUFDaEIsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsb0JBQW9CO0lBQ3BCLHNC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LE9BQU8sZUFBSyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsY0FBYyxDQUFDLE9BQWU7UUFDNUIsMkRBQTJEO1FBQzNELHVFQUF1RTtRQUN2RSxPQUFPLGVBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixlQUFlLENBQUMsTUFBOEI7UUFDNUMsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsaUJBQWlCLENBQUMsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBMkI7UUFDekUsSUFBSSxZQUFZLEtBQUssd0JBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN2QyxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUNELElBQUEsa0NBQW9CLEVBQUMsR0FBRyxFQUFFLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLDZCQUE2QixDQUFDLE1BQXVCLEVBQUUsTUFBNEM7UUFDakcsSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdkIsTUFBTSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQzFDLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUF0SkQsd0JBc0pDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQXVkaXREZWNyeXB0ZWRLZXlQYXJhbXMsXG4gIEJhc2VDb2luLFxuICBCaXRHb0Jhc2UsXG4gIEtleVBhaXIsXG4gIE1QQ0FsZ29yaXRobSxcbiAgTXVsdGlzaWdUeXBlLFxuICBtdWx0aXNpZ1R5cGVzLFxuICBQYXJzZWRUcmFuc2FjdGlvbixcbiAgUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFNpZ25lZFRyYW5zYWN0aW9uLFxuICBTaWduVHJhbnNhY3Rpb25PcHRpb25zLFxuICBUcmFuc2FjdGlvblR5cGUsXG4gIFRzc1ZlcmlmeUFkZHJlc3NPcHRpb25zLFxuICBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gYXMgQmFzZVRyYW5zYWN0aW9uRXhwbGFuYXRpb24sXG4gIEJhc2VUcmFuc2FjdGlvbixcbiAgUG9wdWxhdGVkSW50ZW50LFxuICBQcmVidWlsZFRyYW5zYWN0aW9uV2l0aEludGVudE9wdGlvbnMsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGF1ZGl0RWRkc2FQcml2YXRlS2V5IH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWxpYi1tcGMnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgU3RhdGljc0Jhc2VDb2luLCBjb2lucyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4vbGliJztcbmltcG9ydCB7IEtleVBhaXIgYXMgQ2FudG9uS2V5UGFpciB9IGZyb20gJy4vbGliL2tleVBhaXInO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vbGliL3V0aWxzJztcblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICB0eXBlOiBUcmFuc2FjdGlvblR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9ucyB7XG4gIHR4SGV4OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBDYW50b24gZXh0ZW5kcyBCYXNlQ29pbiB7XG4gIHByb3RlY3RlZCByZWFkb25seSBfc3RhdGljc0NvaW46IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj47XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPikge1xuICAgIHN1cGVyKGJpdGdvKTtcblxuICAgIGlmICghc3RhdGljc0NvaW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIgc3RhdGljc0NvaW4nKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0aWNzQ29pbiA9IHN0YXRpY3NDb2luO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZUluc3RhbmNlKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPik6IEJhc2VDb2luIHtcbiAgICByZXR1cm4gbmV3IENhbnRvbihiaXRnbywgc3RhdGljc0NvaW4pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRCdWlsZGVyKCk6IFRyYW5zYWN0aW9uQnVpbGRlckZhY3Rvcnkge1xuICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQodGhpcy5nZXRDaGFpbigpKSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldEJhc2VGYWN0b3IoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gMWUxMDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0Q2hhaW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ2NhbnRvbic7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHVibGljIGdldEZhbWlseSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnY2FudG9uJztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0RnVsbE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ0NhbnRvbic7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgc3VwcG9ydHNUc3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKiogaW5oZXJpdGVkIGRvYyAqL1xuICBnZXREZWZhdWx0TXVsdGlzaWdUeXBlKCk6IE11bHRpc2lnVHlwZSB7XG4gICAgcmV0dXJuIG11bHRpc2lnVHlwZXMudHNzO1xuICB9XG5cbiAgLyoqIGluaGVyaXRlZCBkb2MgKi9cbiAgcmVxdWlyZXNXYWxsZXRJbml0aWFsaXphdGlvblRyYW5zYWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZ2V0TVBDQWxnb3JpdGhtKCk6IE1QQ0FsZ29yaXRobSB7XG4gICAgcmV0dXJuICdlZGRzYSc7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgYXN5bmMgdmVyaWZ5VHJhbnNhY3Rpb24ocGFyYW1zOiBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBjb2luQ29uZmlnID0gY29pbnMuZ2V0KHRoaXMuZ2V0Q2hhaW4oKSk7XG4gICAgLy8gZXh0cmFjdCBgdHhQYXJhbXNgIHdoZW4gdmVyaWZ5aW5nIG90aGVyIHRyYW5zYWN0aW9uIHR5cGVzXG4gICAgY29uc3QgeyB0eFByZWJ1aWxkOiB0eFByZWJ1aWxkIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgcmF3VHggPSB0eFByZWJ1aWxkLnR4SGV4O1xuICAgIGlmICghcmF3VHgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCB0eCBwcmVidWlsZCBwcm9wZXJ0eSB0eEhleCcpO1xuICAgIH1cbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2luQ29uZmlnKS5mcm9tKHJhd1R4KTtcbiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHR4QnVpbGRlci50cmFuc2FjdGlvbjtcbiAgICBzd2l0Y2ggKHRyYW5zYWN0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLldhbGxldEluaXRpYWxpemF0aW9uOiB7XG4gICAgICAgIC8vIHRoZXJlIGlzIG5vIGlucHV0IGZvciB0aGlzIHR5cGUgb2YgdHJhbnNhY3Rpb24sIHNvIGFsd2F5cyByZXR1cm4gdHJ1ZVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIHRyYW5zYWN0aW9uIHR5cGUsICR7dHJhbnNhY3Rpb24udHlwZX1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgaXNXYWxsZXRBZGRyZXNzKHBhcmFtczogVHNzVmVyaWZ5QWRkcmVzc09wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcGFyc2VUcmFuc2FjdGlvbihwYXJhbXM6IFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxQYXJzZWRUcmFuc2FjdGlvbj4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBnZW5lcmF0ZUtleVBhaXIoc2VlZD86IEJ1ZmZlcik6IEtleVBhaXIge1xuICAgIGNvbnN0IGtleVBhaXIgPSBzZWVkID8gbmV3IENhbnRvbktleVBhaXIoeyBzZWVkIH0pIDogbmV3IENhbnRvbktleVBhaXIoKTtcbiAgICBjb25zdCBrZXlzID0ga2V5UGFpci5nZXRLZXlzKCk7XG4gICAgaWYgKCFrZXlzLnBydikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHBydiBpbiBrZXkgZ2VuZXJhdGlvbi4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHB1Yjoga2V5cy5wdWIsXG4gICAgICBwcnY6IGtleXMucHJ2LFxuICAgIH07XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgZXhwbGFpblRyYW5zYWN0aW9uKHBhcmFtczogRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8VHJhbnNhY3Rpb25FeHBsYW5hdGlvbj4ge1xuICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLmdldEJ1aWxkZXIoKTtcbiAgICBsZXQgcmVidWlsdFRyYW5zYWN0aW9uOiBCYXNlVHJhbnNhY3Rpb247XG4gICAgY29uc3QgdHhSYXcgPSBwYXJhbXMudHhIZXg7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZnJvbSh0eFJhdyk7XG4gICAgICByZWJ1aWx0VHJhbnNhY3Rpb24gPSB0eEJ1aWxkZXIudHJhbnNhY3Rpb247XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIHJldHVybiByZWJ1aWx0VHJhbnNhY3Rpb24uZXhwbGFpblRyYW5zYWN0aW9uKCk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgaXNWYWxpZFB1YihwdWI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB1dGlscy5pc1ZhbGlkUHVibGljS2V5KHB1Yik7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgLy8gY2FudG9uIGFkZHJlc3NlcyBhcmUgb2YgdGhlIGZvcm0sIHBhcnR5SGludDo6ZmluZ2VycHJpbnRcbiAgICAvLyB3aGVyZSBwYXJ0eUhpbnQgaXMgb2YgbGVuZ3RoIDUgYW5kIGZpbmdlcnByaW50IGlzIDY4IGNoYXJhY3RlcnMgbG9uZ1xuICAgIHJldHVybiB1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzaWduVHJhbnNhY3Rpb24ocGFyYW1zOiBTaWduVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbj4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBhdWRpdERlY3J5cHRlZEtleSh7IG11bHRpU2lnVHlwZSwgcHJ2LCBwdWJsaWNLZXkgfTogQXVkaXREZWNyeXB0ZWRLZXlQYXJhbXMpOiB2b2lkIHtcbiAgICBpZiAobXVsdGlTaWdUeXBlICE9PSBtdWx0aXNpZ1R5cGVzLnRzcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBtdWx0aVNpZ1R5cGUnKTtcbiAgICB9XG4gICAgYXVkaXRFZGRzYVByaXZhdGVLZXkocHJ2LCBwdWJsaWNLZXkgPz8gJycpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHNldENvaW5TcGVjaWZpY0ZpZWxkc0luSW50ZW50KGludGVudDogUG9wdWxhdGVkSW50ZW50LCBwYXJhbXM6IFByZWJ1aWxkVHJhbnNhY3Rpb25XaXRoSW50ZW50T3B0aW9ucyk6IHZvaWQge1xuICAgIGlmIChwYXJhbXMudHhSZXF1ZXN0SWQpIHtcbiAgICAgIGludGVudC50eFJlcXVlc3RJZCA9IHBhcmFtcy50eFJlcXVlc3RJZDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
474
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudG9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NhbnRvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtREE0QjhCO0FBQzlCLHlEQUErRDtBQUMvRCxpREFBeUU7QUFDekUsK0JBQWtEO0FBQ2xELDJDQUF5RDtBQUV6RCxpREFBMkc7QUFFM0csd0RBQWdDO0FBZ0JoQyxNQUFhLE1BQU8sU0FBUSxtQkFBUTtJQUdsQyxZQUFzQixLQUFnQixFQUFFLFdBQXVDO1FBQzdFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUViLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWdCLEVBQUUsV0FBdUM7UUFDN0UsT0FBTyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVPLFVBQVU7UUFDaEIsT0FBTyxJQUFJLCtCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsa0JBQWtCO0lBQ1gsYUFBYTtRQUNsQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxrQkFBa0I7SUFDWCxRQUFRO1FBQ2IsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELGtCQUFrQjtJQUNYLFNBQVM7UUFDZCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsa0JBQWtCO0lBQ1gsV0FBVztRQUNoQixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxr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UUFBUSxFQUFFLENBQUM7WUFDcEIsTUFBTSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ3BDLENBQUM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNwQixNQUFNLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDcEMsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUN4QyxDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDckIsTUFBTSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQ3RDLENBQUM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMzQixNQUFNLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUM7UUFDbEQsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQztRQUM5QyxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBbmpCRCx3QkFtakJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQXVkaXREZWNyeXB0ZWRLZXlQYXJhbXMsXG4gIEJhc2VDb2luLFxuICBCYXNlVHJhbnNhY3Rpb24sXG4gIEJpdEdvQmFzZSxcbiAgQ2FudG9uQ29tbWFuZCxcbiAgQ2FudG9uQ29tbWFuZFBhcmFtcyxcbiAgQ2FudG9uQ3JlYXRlQ29tbWFuZCxcbiAgQ2FudG9uRXhlcmNpc2VDb21tYW5kLFxuICBFRERTQU1ldGhvZHMsXG4gIGV4dHJhY3RDb21tb25LZXljaGFpbixcbiAgSW52YWxpZEFkZHJlc3NFcnJvcixcbiAgS2V5UGFpcixcbiAgTVBDQWxnb3JpdGhtLFxuICBNdWx0aXNpZ1R5cGUsXG4gIG11bHRpc2lnVHlwZXMsXG4gIFBhcnNlZFRyYW5zYWN0aW9uLFxuICBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgUG9wdWxhdGVkSW50ZW50LFxuICBQcmVidWlsZFRyYW5zYWN0aW9uV2l0aEludGVudE9wdGlvbnMsXG4gIFNpZ25lZFRyYW5zYWN0aW9uLFxuICBTaWduVHJhbnNhY3Rpb25PcHRpb25zLFxuICBUb2tlbkVuYWJsZW1lbnRDb25maWcsXG4gIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gYXMgQmFzZVRyYW5zYWN0aW9uRXhwbGFuYXRpb24sXG4gIFRyYW5zYWN0aW9uUGFyYW1zLFxuICBUcmFuc2FjdGlvblR5cGUsXG4gIFRzc1ZlcmlmeUFkZHJlc3NPcHRpb25zLFxuICBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGF1ZGl0RWRkc2FQcml2YXRlS2V5IH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWxpYi1tcGMnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgU3RhdGljc0Jhc2VDb2luLCBjb2lucyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4vbGliJztcbmltcG9ydCB7IEtleVBhaXIgYXMgQ2FudG9uS2V5UGFpciB9IGZyb20gJy4vbGliL2tleVBhaXInO1xuaW1wb3J0IHsgQnJvYWRyaWRnZUNvbW1hbmRQYXJhbXMsIENhbnRvbkNvbW1hbmRLaW5kLCBUeERhdGEgfSBmcm9tICcuL2xpYi9pZmFjZSc7XG5pbXBvcnQgeyBicm9hZHJpZGdlRGVzY3JpcHRvckZyb21Db21tYW5kLCBwYXJzZUJyb2FkcmlkZ2VTZXR0bGVtZW50QXV0aG9yaXphdGlvbiB9IGZyb20gJy4vbGliL2Jyb2FkcmlkZ2UnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL2xpYi90cmFuc2FjdGlvbi90cmFuc2FjdGlvbic7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi9saWIvdXRpbHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB7XG4gIHR5cGU6IFRyYW5zYWN0aW9uVHlwZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgdHhIZXg6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYW50b25UcmFuc2FjdGlvblBhcmFtcyBleHRlbmRzIFRyYW5zYWN0aW9uUGFyYW1zIHtcbiAgY2FudG9uQ29tbWFuZFBhcmFtcz86IENhbnRvbkNvbW1hbmRQYXJhbXM7XG4gIGJyb2FkcmlkZ2VDb21tYW5kUGFyYW1zPzogQnJvYWRyaWRnZUNvbW1hbmRQYXJhbXM7XG4gIGV4ZWN1dG9yUGFydHlJZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIENhbnRvbiBleHRlbmRzIEJhc2VDb2luIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9zdGF0aWNzQ29pbjogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPjtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSwgc3RhdGljc0NvaW4/OiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+KSB7XG4gICAgc3VwZXIoYml0Z28pO1xuXG4gICAgaWYgKCFzdGF0aWNzQ29pbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIGNvbnN0cnVjdG9yIHBhcmFtZXRlciBzdGF0aWNzQ29pbicpO1xuICAgIH1cblxuICAgIHRoaXMuX3N0YXRpY3NDb2luID0gc3RhdGljc0NvaW47XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlSW5zdGFuY2UoYml0Z286IEJpdEdvQmFzZSwgc3RhdGljc0NvaW4/OiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+KTogQmFzZUNvaW4ge1xuICAgIHJldHVybiBuZXcgQ2FudG9uKGJpdGdvLCBzdGF0aWNzQ29pbik7XG4gIH1cblxuICBwcml2YXRlIGdldEJ1aWxkZXIoKTogVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCh0aGlzLmdldENoYWluKCkpKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0QmFzZUZhY3RvcigpOiBudW1iZXIge1xuICAgIHJldHVybiAxZTEwO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRDaGFpbigpOiBzdHJpbmcge1xuICAgIHJldHVybiAnY2FudG9uJztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwdWJsaWMgZ2V0RmFtaWx5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdjYW50b24nO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHB1YmxpYyBnZXRGdWxsTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnQ2FudG9uJztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzdXBwb3J0c1RzcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzdXBwb3J0c01lc3NhZ2VTaWduaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqIGluaGVyaXRlZCBkb2MgKi9cbiAgZ2V0RGVmYXVsdE11bHRpc2lnVHlwZSgpOiBNdWx0aXNpZ1R5cGUge1xuICAgIHJldHVybiBtdWx0aXNpZ1R5cGVzLnRzcztcbiAgfVxuXG4gIC8qKiBpbmhlcml0ZWQgZG9jICovXG4gIHJlcXVpcmVzV2FsbGV0SW5pdGlhbGl6YXRpb25UcmFuc2FjdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldE1QQ0FsZ29yaXRobSgpOiBNUENBbGdvcml0aG0ge1xuICAgIHJldHVybiAnZWRkc2EnO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGFzeW5jIHZlcmlmeVRyYW5zYWN0aW9uKHBhcmFtczogVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgY29pbkNvbmZpZyA9IGNvaW5zLmdldCh0aGlzLmdldENoYWluKCkpO1xuICAgIGNvbnN0IHsgdHhQcmVidWlsZDogdHhQcmVidWlsZCwgdHhQYXJhbXMgfSA9IHBhcmFtcztcbiAgICBjb25zdCByYXdUeCA9IHR4UHJlYnVpbGQudHhIZXg7XG4gICAgaWYgKCFyYXdUeCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHR4IHByZWJ1aWxkIHByb3BlcnR5IHR4SGV4Jyk7XG4gICAgfVxuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5Db25maWcpLmZyb20ocmF3VHgpO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdHhCdWlsZGVyLnRyYW5zYWN0aW9uO1xuICAgIGNvbnN0IGV4cGxhaW5lZFR4ID0gdHJhbnNhY3Rpb24uZXhwbGFpblRyYW5zYWN0aW9uKCk7XG4gICAgY29uc3QgYnJvYWRyaWRnZVBhcmFtcyA9ICh0eFBhcmFtcyBhcyBDYW50b25UcmFuc2FjdGlvblBhcmFtcykuYnJvYWRyaWRnZUNvbW1hbmRQYXJhbXM7XG4gICAgaWYgKGJyb2FkcmlkZ2VQYXJhbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLnZlcmlmeUJyb2FkcmlkZ2VDb21tYW5kVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIGJyb2FkcmlkZ2VQYXJhbXMpO1xuICAgIH1cbiAgICBpZiAodHhQYXJhbXMudHlwZSA9PT0gJ2NhbnRvbkJyb2FkcmlkZ2VTdGFuZGluZ0RlbGVnYXRpb24nKSB7XG4gICAgICBjb25zdCBleGVjdXRvclBhcnR5SWQgPSAodHhQYXJhbXMgYXMgQ2FudG9uVHJhbnNhY3Rpb25QYXJhbXMpLmV4ZWN1dG9yUGFydHlJZDtcbiAgICAgIGlmICghZXhlY3V0b3JQYXJ0eUlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY2FudG9uQnJvYWRyaWRnZVN0YW5kaW5nRGVsZWdhdGlvbiB2ZXJpZnlUcmFuc2FjdGlvbjogbWlzc2luZyBleGVjdXRvclBhcnR5SWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnZlcmlmeUJyb2FkcmlkZ2VTdGFuZGluZ0RlbGVnYXRpb25UcmFuc2FjdGlvbih0cmFuc2FjdGlvbiwgZXhlY3V0b3JQYXJ0eUlkKTtcbiAgICB9XG4gICAgc3dpdGNoICh0cmFuc2FjdGlvbi50eXBlKSB7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5XYWxsZXRJbml0aWFsaXphdGlvbjpcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlRyYW5zZmVyQWNjZXB0OlxuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuVHJhbnNmZXJSZWplY3Q6XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5UcmFuc2ZlckFja25vd2xlZGdlOlxuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuVHJhbnNmZXJPZmZlcldpdGhkcmF3bjpcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkNvc2lnbkRlbGVnYXRpb25BY2NlcHQ6XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5Db3NpZ25EZWxlZ2F0aW9uUHJvcG9zYWw6XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5BbGxvY2F0aW9uQWxsb2NhdGU6XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5BbGxvY2F0aW9uUmVxdWVzdDpcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkFsbG9jYXRpb25SZWplY3Q6XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5FbmRJbnZlc3Rvck9uYm9hcmRpbmdPZmZlcjpcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkFsbG9jYXRpb25BbGxvY2F0ZVdpdGhkcmF3bjpcbiAgICAgICAgLy8gVGhlcmUgaXMgbm8gcmVjaXBpZW50IGluZm8gdG8gdmVyaWZ5IGZvciB0aGVzZSB0cmFuc2FjdGlvbiB0eXBlcywgc28gYWx3YXlzIHJldHVybiB0cnVlLlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkNhbnRvbkNvbW1hbmQ6XG4gICAgICAgIHJldHVybiB0aGlzLnZlcmlmeUNhbnRvbkNvbW1hbmRUcmFuc2FjdGlvbihcbiAgICAgICAgICB0cmFuc2FjdGlvbixcbiAgICAgICAgICAodHhQYXJhbXMgYXMgQ2FudG9uVHJhbnNhY3Rpb25QYXJhbXMpLmNhbnRvbkNvbW1hbmRQYXJhbXNcbiAgICAgICAgKTtcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLk9uZVN0ZXBQcmVBcHByb3ZhbDpcbiAgICAgICAgLy8gQ2FudG9uIGlzIGFsd2F5cyBhIFRTUyB3YWxsZXQuIFRoZSBTREsncyBidWlsZFRva2VuRW5hYmxlbWVudHMgcGFzc2VzIGVuYWJsZVRva2Vuc1xuICAgICAgICAvLyB0aHJvdWdoIHVuY2hhbmdlZCBmb3IgVFNTIHdhbGxldHMgKG5vIGNvbnZlcnNpb24gdG8gcmVjaXBpZW50cyksIHNvIHR4UGFyYW1zLmVuYWJsZVRva2Vuc1xuICAgICAgICAvLyBpcyB0aGUgb25seSBzb3VyY2Ugb2YgdXNlciBpbnRlbnQgaGVyZS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gUmVjZWl2ZXIgdmFsaWRhdGlvbjogdGhlIHJlY2VpdmVyIG9mIGEgT25lU3RlcFByZUFwcHJvdmFsIGlzIGFsd2F5cyB0aGUgd2FsbGV0J3Mgcm9vdCBhZGRyZXNzLlxuICAgICAgICAvLyBXZSB1c2UgZW5hYmxlVG9rZW4uYWRkcmVzcyBpZiBleHBsaWNpdGx5IHByb3ZpZGVkLCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvXG4gICAgICAgIC8vIHdhbGxldC5jb2luU3BlY2lmaWMoKS5yb290QWRkcmVzcyAodGhlIENhbnRvbiBwYXJ0eSBJRCBzdG9yZWQgYXQgd2FsbGV0IGNyZWF0aW9uIHRpbWUpLlxuICAgICAgICAvLyBUb2tlbiBuYW1lIHZhbGlkYXRpb246IGNoZWNrZWQgd2hlbiB0aGUgdG9rZW4gaXMgcmVzb2x2YWJsZSBmcm9tIHN0YXRpY3MuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0eFBhcmFtcy50eXBlID09PSAnZW5hYmxldG9rZW4nICYmXG4gICAgICAgICAgdHhQYXJhbXMuZW5hYmxlVG9rZW5zICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICB0eFBhcmFtcy5lbmFibGVUb2tlbnMubGVuZ3RoID4gMFxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCB0eERhdGEgPSB0cmFuc2FjdGlvbi50b0pzb24oKSBhcyBUeERhdGE7XG4gICAgICAgICAgY29uc3QgZW5hYmxlVG9rZW4gPSB0eFBhcmFtcy5lbmFibGVUb2tlbnNbMF07XG4gICAgICAgICAgY29uc3Qgd2FsbGV0Um9vdEFkZHJlc3MgPSBwYXJhbXMud2FsbGV0Py5jb2luU3BlY2lmaWM/LigpPy5yb290QWRkcmVzcztcbiAgICAgICAgICBjb25zdCBleHBlY3RlZFJlY2VpdmVyID0gZW5hYmxlVG9rZW4uYWRkcmVzcyA/PyB3YWxsZXRSb290QWRkcmVzcztcbiAgICAgICAgICBpZiAoZXhwZWN0ZWRSZWNlaXZlcikge1xuICAgICAgICAgICAgLy8gU3RyaXAgP21lbW9JZCBzdWZmaXggaWYgcHJlc2VudCBpbiB0aGUgc3RvcmVkIGFkZHJlc3NcbiAgICAgICAgICAgIGNvbnN0IFtleHBlY3RlZFJlY2VpdmVyQmFzZV0gPSBleHBlY3RlZFJlY2VpdmVyLnNwbGl0KCc/bWVtb0lkPScpO1xuICAgICAgICAgICAgaWYgKHR4RGF0YS5yZWNlaXZlciAhPT0gZXhwZWN0ZWRSZWNlaXZlckJhc2UpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIGBPbmVTdGVwUHJlQXBwcm92YWwgcmVjZWl2ZXIgbWlzbWF0Y2g6IGV4cGVjdGVkICcke2V4cGVjdGVkUmVjZWl2ZXJCYXNlfScsIGdvdCAnJHt0eERhdGEucmVjZWl2ZXJ9J2BcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR4RGF0YS50b2tlbiAhPT0gdW5kZWZpbmVkICYmIHR4RGF0YS50b2tlbiAhPT0gZW5hYmxlVG9rZW4ubmFtZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgT25lU3RlcFByZUFwcHJvdmFsIHRva2VuIG5hbWUgbWlzbWF0Y2g6IGV4cGVjdGVkICcke2VuYWJsZVRva2VuLm5hbWV9JywgZ290ICcke3R4RGF0YS50b2tlbn0nYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5UcmFuc2ZlclByZWFwcHJvdmFsQ2FuY2VsOlxuICAgICAgICAvLyBNaXJyb3JzIE9uZVN0ZXBQcmVBcHByb3ZhbCdzIHJlY2VpdmVyL3Rva2VuIHZhbGlkYXRpb24gYWJvdmUsIG9wcG9zaXRlIGRpcmVjdGlvbi5cbiAgICAgICAgLy8gVGhlIGNhbmNlbCBpcyBzZWxmLXNlcnZpY2UgKHRoZSB3YWxsZXQncyBvd24gcGFydHkgZXhlcmNpc2VzIHRoZSBjaG9pY2Ugb24gaXRzIG93blxuICAgICAgICAvLyBUcmFuc2ZlclByZWFwcHJvdmFsKSwgc28gc2VuZGVyID09PSByZWNlaXZlciBvbiB0aGUgcGFyc2VkIHRyYW5zYWN0aW9uOyBib3RoIG11c3QgbWF0Y2hcbiAgICAgICAgLy8gdGhlIHdhbGxldCdzIHJvb3RBZGRyZXNzIChvciB0aGUgZXhwbGljaXQgZW5hYmxlVG9rZW4uYWRkcmVzcywgaWYgcHJvdmlkZWQpLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgdHhQYXJhbXMudHlwZSA9PT0gJ2Rpc2FibGV0b2tlbicgJiZcbiAgICAgICAgICB0eFBhcmFtcy5lbmFibGVUb2tlbnMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHR4UGFyYW1zLmVuYWJsZVRva2Vucy5sZW5ndGggPiAwXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IHR4RGF0YSA9IHRyYW5zYWN0aW9uLnRvSnNvbigpIGFzIFR4RGF0YTtcbiAgICAgICAgICBjb25zdCBkaXNhYmxlVG9rZW4gPSB0eFBhcmFtcy5lbmFibGVUb2tlbnNbMF07XG4gICAgICAgICAgY29uc3Qgd2FsbGV0Um9vdEFkZHJlc3MgPSBwYXJhbXMud2FsbGV0Py5jb2luU3BlY2lmaWM/LigpPy5yb290QWRkcmVzcztcbiAgICAgICAgICBjb25zdCBleHBlY3RlZFBhcnR5ID0gZGlzYWJsZVRva2VuLmFkZHJlc3MgPz8gd2FsbGV0Um9vdEFkZHJlc3M7XG4gICAgICAgICAgaWYgKGV4cGVjdGVkUGFydHkpIHtcbiAgICAgICAgICAgIGNvbnN0IFtleHBlY3RlZFBhcnR5QmFzZV0gPSBleHBlY3RlZFBhcnR5LnNwbGl0KCc/bWVtb0lkPScpO1xuICAgICAgICAgICAgaWYgKHR4RGF0YS5yZWNlaXZlciAhPT0gZXhwZWN0ZWRQYXJ0eUJhc2UpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIGBUcmFuc2ZlclByZWFwcHJvdmFsQ2FuY2VsIHJlY2VpdmVyIG1pc21hdGNoOiBleHBlY3RlZCAnJHtleHBlY3RlZFBhcnR5QmFzZX0nLCBnb3QgJyR7dHhEYXRhLnJlY2VpdmVyfSdgXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eERhdGEudG9rZW4gIT09IHVuZGVmaW5lZCAmJiB0eERhdGEudG9rZW4gIT09IGRpc2FibGVUb2tlbi5uYW1lKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBUcmFuc2ZlclByZWFwcHJvdmFsQ2FuY2VsIHRva2VuIG5hbWUgbWlzbWF0Y2g6IGV4cGVjdGVkICcke2Rpc2FibGVUb2tlbi5uYW1lfScsIGdvdCAnJHt0eERhdGEudG9rZW59J2BcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU2VuZDpcbiAgICAgICAgaWYgKHR4UGFyYW1zLnJlY2lwaWVudHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnN0IGZpbHRlcmVkUmVjaXBpZW50cyA9IHR4UGFyYW1zLnJlY2lwaWVudHM/Lm1hcCgocmVjaXBpZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGFkZHJlc3MsIGFtb3VudCwgdG9rZW5OYW1lIH0gPSByZWNpcGllbnQ7XG4gICAgICAgICAgICBjb25zdCBbYWRkcmVzc1BhcnQsIG1lbW9JZF0gPSBhZGRyZXNzLnNwbGl0KCc/bWVtb0lkPScpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgYWRkcmVzczogYWRkcmVzc1BhcnQsXG4gICAgICAgICAgICAgIGFtb3VudCxcbiAgICAgICAgICAgICAgLi4uKG1lbW9JZCAmJiB7IG1lbW86IG1lbW9JZCB9KSxcbiAgICAgICAgICAgICAgLi4uKHRva2VuTmFtZSAmJiB7IHRva2VuTmFtZSB9KSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3QgZmlsdGVyZWRPdXRwdXRzID0gZXhwbGFpbmVkVHgub3V0cHV0cz8ubWFwKChvdXRwdXQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgYWRkcmVzcywgYW1vdW50LCB0b2tlbk5hbWUsIG1lbW8gfSA9IG91dHB1dDtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgICAgIGFtb3VudCxcbiAgICAgICAgICAgICAgLi4uKG1lbW8gJiYgeyBtZW1vIH0pLFxuICAgICAgICAgICAgICAuLi4odG9rZW5OYW1lICYmIHsgdG9rZW5OYW1lIH0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkoZmlsdGVyZWRSZWNpcGllbnRzKSAhPT0gSlNPTi5zdHJpbmdpZnkoZmlsdGVyZWRPdXRwdXRzKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUeCBvdXRwdXRzIGRvIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zIHJlY2lwaWVudHMnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5rbm93biB0cmFuc2FjdGlvbiB0eXBlLCAke3RyYW5zYWN0aW9uLnR5cGV9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgdmVyaWZ5QnJvYWRyaWRnZVN0YW5kaW5nRGVsZWdhdGlvblRyYW5zYWN0aW9uKFxuICAgIHRyYW5zYWN0aW9uOiBCYXNlVHJhbnNhY3Rpb24sXG4gICAgZXhlY3V0b3JQYXJ0eUlkOiBzdHJpbmdcbiAgKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmF3UHJlcGFyZWQgPSAodHJhbnNhY3Rpb24gYXMgVHJhbnNhY3Rpb24pLnByZXBhcmVDb21tYW5kPy5wcmVwYXJlZFRyYW5zYWN0aW9uO1xuICAgIGlmICghcmF3UHJlcGFyZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQnJvYWRyaWRnZSBzdGFuZGluZyBkZWxlZ2F0aW9uIHZlcmlmeVRyYW5zYWN0aW9uOiBtaXNzaW5nIHByZXBhcmVkVHJhbnNhY3Rpb24gcHJvdG9idWYnKTtcbiAgICB9XG4gICAgY29uc3QgYWN0dWFsID0gdXRpbHMuZXh0cmFjdENhbnRvbkNvbW1hbmRJbmZvKHJhd1ByZXBhcmVkKTtcbiAgICBpZiAoYWN0dWFsLmtpbmQgIT09ICdDcmVhdGVDb21tYW5kJyB8fCBhY3R1YWwuY2hvaWNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0Jyb2FkcmlkZ2Ugc3RhbmRpbmcgZGVsZWdhdGlvbiB2ZXJpZnlUcmFuc2FjdGlvbjogZXhwZWN0ZWQgYSBTdGFuZGluZ0RlbGVnYXRpb25JbXBsX3YxIENyZWF0ZUNvbW1hbmQnXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBkZXNjcmlwdG9yID0gYnJvYWRyaWRnZURlc2NyaXB0b3JGcm9tQ29tbWFuZChhY3R1YWwpO1xuICAgIGlmIChcbiAgICAgICFkZXNjcmlwdG9yIHx8XG4gICAgICBkZXNjcmlwdG9yLnN0YW5kYXJkICE9PSAnQ0lQLTU2JyB8fFxuICAgICAgZGVzY3JpcHRvci5lbnRpdHlOYW1lICE9PSAnU3RhbmRpbmdEZWxlZ2F0aW9uSW1wbF92MScgfHxcbiAgICAgIGRlc2NyaXB0b3Iucm9sZSAhPT0gJ2NsaWVudCdcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQnJvYWRyaWRnZSBzdGFuZGluZyBkZWxlZ2F0aW9uIHZlcmlmeVRyYW5zYWN0aW9uOiB1bnN1cHBvcnRlZCBwcmVwYXJlZCBjb21tYW5kJyk7XG4gICAgfVxuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlQnJvYWRyaWRnZVNldHRsZW1lbnRBdXRob3JpemF0aW9uKGFjdHVhbCk7XG4gICAgaWYgKHBhcnNlZD8uZXhlY3V0b3IgIT09IGV4ZWN1dG9yUGFydHlJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQnJvYWRyaWRnZSBzdGFuZGluZyBkZWxlZ2F0aW9uIGV4ZWN1dG9yIG1pc21hdGNoOiBleHBlY3RlZCAnJHtleGVjdXRvclBhcnR5SWR9JywgZ290ICcke1xuICAgICAgICAgIHBhcnNlZD8uZXhlY3V0b3IgPz8gJydcbiAgICAgICAgfSdgXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgdmVyaWZ5QnJvYWRyaWRnZUNvbW1hbmRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbjogQmFzZVRyYW5zYWN0aW9uLCBwYXJhbXM6IEJyb2FkcmlkZ2VDb21tYW5kUGFyYW1zKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmF3UHJlcGFyZWQgPSAodHJhbnNhY3Rpb24gYXMgVHJhbnNhY3Rpb24pLnByZXBhcmVDb21tYW5kPy5wcmVwYXJlZFRyYW5zYWN0aW9uO1xuICAgIGlmICghcmF3UHJlcGFyZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQnJvYWRyaWRnZSB2ZXJpZnlUcmFuc2FjdGlvbjogbWlzc2luZyBwcmVwYXJlZFRyYW5zYWN0aW9uIHByb3RvYnVmJyk7XG4gICAgfVxuICAgIGNvbnN0IGFjdHVhbCA9IHV0aWxzLmV4dHJhY3RDYW50b25Db21tYW5kSW5mbyhyYXdQcmVwYXJlZCk7XG4gICAgY29uc3QgYWN0dWFsRGVzY3JpcHRvciA9IGJyb2FkcmlkZ2VEZXNjcmlwdG9yRnJvbUNvbW1hbmQoYWN0dWFsKTtcbiAgICBpZiAoIWFjdHVhbERlc2NyaXB0b3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQnJvYWRyaWRnZSB2ZXJpZnlUcmFuc2FjdGlvbjogcHJlcGFyZWQgY29tbWFuZCBpcyBub3QgYSBzdXBwb3J0ZWQgQnJvYWRyaWRnZSB0ZW1wbGF0ZScpO1xuICAgIH1cbiAgICBjb25zdCBleHBlY3RlZCA9IHBhcmFtcy5kZXNjcmlwdG9yO1xuICAgIGNvbnN0IGV4cGVjdGVkVGVtcGxhdGUgPSB1dGlscy5wYXJzZUNhbnRvblRlbXBsYXRlSWQoZXhwZWN0ZWQudGVtcGxhdGVJZCk7XG4gICAgaWYgKCFleHBlY3RlZFRlbXBsYXRlIHx8IGV4cGVjdGVkLnByb3RvY29sICE9PSAnYnJvYWRyaWRnZScpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQnJvYWRyaWRnZSB2ZXJpZnlUcmFuc2FjdGlvbjogaW52YWxpZCBwcm90b2NvbCBkZXNjcmlwdG9yJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGV4cGVjdGVkLnN0YW5kYXJkICE9PSBhY3R1YWxEZXNjcmlwdG9yLnN0YW5kYXJkIHx8XG4gICAgICBleHBlY3RlZFRlbXBsYXRlLnBrZyAhPT0gYWN0dWFsRGVzY3JpcHRvci5wYWNrYWdlSWQgfHxcbiAgICAgIGV4cGVjdGVkVGVtcGxhdGUubW9kdWxlTmFtZSAhPT0gYWN0dWFsRGVzY3JpcHRvci5tb2R1bGVOYW1lIHx8XG4gICAgICBleHBlY3RlZFRlbXBsYXRlLmVudGl0eU5hbWUgIT09IGFjdHVhbERlc2NyaXB0b3IuZW50aXR5TmFtZSB8fFxuICAgICAgZXhwZWN0ZWQuY2hvaWNlICE9PSBhY3R1YWxEZXNjcmlwdG9yLmNob2ljZSB8fFxuICAgICAgZXhwZWN0ZWQucm9sZSAhPT0gYWN0dWFsRGVzY3JpcHRvci5yb2xlXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Jyb2FkcmlkZ2UgdmVyaWZ5VHJhbnNhY3Rpb246IHRlbXBsYXRlLCBwYWNrYWdlLCBwcm90b2NvbCwgY2hvaWNlLCBvciByb2xlIG1pc21hdGNoJyk7XG4gICAgfVxuICAgIGlmICghdXRpbHMuc2FtZUVsZW1lbnRzKGV4cGVjdGVkLmFjdG9ycywgYWN0dWFsRGVzY3JpcHRvci5hY3RvcnMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Jyb2FkcmlkZ2UgdmVyaWZ5VHJhbnNhY3Rpb246IGFjdG9yIHNldCBtaXNtYXRjaCcpO1xuICAgIH1cbiAgICBjb25zdCBleHBlY3RlZENvbnRyYWN0SWQgPSBleHBlY3RlZC5jb250cmFjdElkID8/IGV4cGVjdGVkLnJlcXVlc3RDaWQgPz8gZXhwZWN0ZWQuYWdyZWVtZW50Q2lkO1xuICAgIGlmIChleHBlY3RlZENvbnRyYWN0SWQgIT09IHVuZGVmaW5lZCAmJiBleHBlY3RlZENvbnRyYWN0SWQgIT09IGFjdHVhbC5jb250cmFjdElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Jyb2FkcmlkZ2UgdmVyaWZ5VHJhbnNhY3Rpb246IGNvbnRyYWN0L3JlcXVlc3QvYWdyZWVtZW50IENJRCBtaXNtYXRjaCcpO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLmFyZ3VtZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHV0aWxzLmFzc2VydERlZXBDYW50b25NYXRjaChwYXJhbXMuYXJndW1lbnQsIGFjdHVhbC5hcmd1bWVudCwgbmV3IFNldCgpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeUNhbnRvbkNvbW1hbmRUcmFuc2FjdGlvbihcbiAgICB0cmFuc2FjdGlvbjogQmFzZVRyYW5zYWN0aW9uLFxuICAgIHVzZXJQYXJhbXM6IENhbnRvbkNvbW1hbmRQYXJhbXMgfCB1bmRlZmluZWRcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCF1c2VyUGFyYW1zKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjYW50b25UeCA9IHRyYW5zYWN0aW9uIGFzIFRyYW5zYWN0aW9uO1xuICAgIGNvbnN0IHJhd1ByZXBhcmVkID0gY2FudG9uVHgucHJlcGFyZUNvbW1hbmQ/LnByZXBhcmVkVHJhbnNhY3Rpb247XG4gICAgaWYgKCFyYXdQcmVwYXJlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW50b25Db21tYW5kIHZlcmlmeVRyYW5zYWN0aW9uOiBtaXNzaW5nIHByZXBhcmVkVHJhbnNhY3Rpb24gcHJvdG9idWYgb24gdHggcHJlYnVpbGQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZWNvZGVkQ29tbWFuZCA9IHV0aWxzLmV4dHJhY3RDYW50b25Db21tYW5kSW5mbyhyYXdQcmVwYXJlZCk7XG4gICAgY29uc3QgdXNlckNvbW1hbmQgPSB1c2VyUGFyYW1zLmNvbW1hbmQgYXMgUGFydGlhbDxDYW50b25Db21tYW5kPjtcblxuICAgIC8vIElucHV0IHNoYXBlIGlzIGVuZm9yY2VkIGJ5IG1wY1V0aWxzIGF0IGJ1aWxkIHRpbWU7IGhlcmUgd2UgcmVzb2x2ZSB3aGljaCBicmFuY2ggaXMgcHJlc2VudC5cbiAgICBjb25zdCBoYXNDcmVhdGUgPSAnQ3JlYXRlQ29tbWFuZCcgaW4gdXNlckNvbW1hbmQgJiYgdXRpbHMuaXNQbGFpbk9iamVjdCh1c2VyQ29tbWFuZC5DcmVhdGVDb21tYW5kKTtcbiAgICBjb25zdCBoYXNFeGVyY2lzZSA9ICdFeGVyY2lzZUNvbW1hbmQnIGluIHVzZXJDb21tYW5kICYmIHV0aWxzLmlzUGxhaW5PYmplY3QodXNlckNvbW1hbmQuRXhlcmNpc2VDb21tYW5kKTtcbiAgICBpZiAoIWhhc0NyZWF0ZSAmJiAhaGFzRXhlcmNpc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbnRvbkNvbW1hbmQgdmVyaWZ5VHJhbnNhY3Rpb246IGNvbW1hbmQgbXVzdCBjb250YWluIGEgQ3JlYXRlQ29tbWFuZCBvciBFeGVyY2lzZUNvbW1hbmQgd3JhcHBlcmBcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChoYXNDcmVhdGUgJiYgaGFzRXhlcmNpc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbnRvbkNvbW1hbmQgdmVyaWZ5VHJhbnNhY3Rpb246IGNvbW1hbmQgbXVzdCBjb250YWluIGV4YWN0bHkgb25lIG9mIENyZWF0ZUNvbW1hbmQgb3IgRXhlcmNpc2VDb21tYW5kLCBub3QgYm90aGBcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHVzZXJLaW5kOiBDYW50b25Db21tYW5kS2luZCA9IGhhc0NyZWF0ZSA/ICdDcmVhdGVDb21tYW5kJyA6ICdFeGVyY2lzZUNvbW1hbmQnO1xuICAgIGlmIChkZWNvZGVkQ29tbWFuZC5raW5kICE9PSB1c2VyS2luZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2FudG9uQ29tbWFuZCB2ZXJpZnlUcmFuc2FjdGlvbjogY29tbWFuZCBraW5kIG1pc21hdGNoIOKAlCBleHBlY3RlZCAke3VzZXJLaW5kfSwgZ290ICR7ZGVjb2RlZENvbW1hbmQua2luZH1gXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZXJJbm5lciA9XG4gICAgICB1c2VyS2luZCA9PT0gJ0NyZWF0ZUNvbW1hbmQnXG4gICAgICAgID8gKHVzZXJDb21tYW5kIGFzIENhbnRvbkNyZWF0ZUNvbW1hbmQpLkNyZWF0ZUNvbW1hbmRcbiAgICAgICAgOiAodXNlckNvbW1hbmQgYXMgQ2FudG9uRXhlcmNpc2VDb21tYW5kKS5FeGVyY2lzZUNvbW1hbmQ7XG5cbiAgICBpZiAoIXVzZXJJbm5lcj8udGVtcGxhdGVJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW50b25Db21tYW5kIHZlcmlmeVRyYW5zYWN0aW9uOiAke3VzZXJLaW5kfS50ZW1wbGF0ZUlkIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nYCk7XG4gICAgfVxuXG4gICAgLy8gdGVtcGxhdGVJZCAobW9kdWxlTmFtZSArIGVudGl0eU5hbWU7IHBhY2thZ2UgaWQgaXMgbXV0YWJsZSwgc28gaWdub3JlZClcbiAgICBjb25zdCBwYXJzZWQgPSB1dGlscy5wYXJzZUNhbnRvblRlbXBsYXRlSWQodXNlcklubmVyLnRlbXBsYXRlSWQpO1xuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW50b25Db21tYW5kIHZlcmlmeVRyYW5zYWN0aW9uOiBpbnZhbGlkIHVzZXIgdGVtcGxhdGVJZCAnJHt1c2VySW5uZXIudGVtcGxhdGVJZH0nIOKAlCBleHBlY3RlZCBmb3JtYXQgJ1BrZzpNb2R1bGU6RW50aXR5J2BcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGRlY29kZWRDb21tYW5kLnRlbXBsYXRlSWQubW9kdWxlTmFtZSAhPT0gcGFyc2VkLm1vZHVsZU5hbWUgfHxcbiAgICAgIGRlY29kZWRDb21tYW5kLnRlbXBsYXRlSWQuZW50aXR5TmFtZSAhPT0gcGFyc2VkLmVudGl0eU5hbWVcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbnRvbkNvbW1hbmQgdmVyaWZ5VHJhbnNhY3Rpb246IHRlbXBsYXRlSWQgbWlzbWF0Y2gg4oCUIGV4cGVjdGVkICcke3BhcnNlZC5tb2R1bGVOYW1lfToke3BhcnNlZC5lbnRpdHlOYW1lfScsIGdvdCAnJHtkZWNvZGVkQ29tbWFuZC50ZW1wbGF0ZUlkLm1vZHVsZU5hbWV9OiR7ZGVjb2RlZENvbW1hbmQudGVtcGxhdGVJZC5lbnRpdHlOYW1lfSdgXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEJ1aWxkIHRoZSBpbmplY3QtYXMgc2tpcCBzZXQgb25jZSBmb3IgdXNlIGFjcm9zcyB0aGUgY29udHJhY3RJZCBhbmQgYXJndW1lbnQgY2hlY2tzXG4gICAgY29uc3Qgc2tpcFBhdGhzID0gdXRpbHMubm9ybWFsaXplSW5qZWN0QXModXNlclBhcmFtcy5yZXNvbHZlQ29udHJhY3RzKTtcblxuICAgIC8vIG1ldGFkYXRhLnN1Ym1pdHRlckluZm8uYWN0QXMgbXVzdCBjb250YWluIGV4YWN0bHkgdGhlIHNhbWUgcGFydGllcyBhcyB0aGUgdXNlcidzIGFjdEFzXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHVzZXJQYXJhbXMuYWN0QXMpIHx8IHVzZXJQYXJhbXMuYWN0QXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbnRvbkNvbW1hbmQgdmVyaWZ5VHJhbnNhY3Rpb246IGFjdEFzIG11c3QgYmUgYSBub24tZW1wdHkgYXJyYXkgb2YgcGFydHkgSURzYCk7XG4gICAgfVxuICAgIGlmICghdXNlclBhcmFtcy5hY3RBcy5ldmVyeSgocCkgPT4gdHlwZW9mIHAgPT09ICdzdHJpbmcnICYmIHAudHJpbSgpICE9PSAnJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FudG9uQ29tbWFuZCB2ZXJpZnlUcmFuc2FjdGlvbjogYWxsIGFjdEFzIGVudHJpZXMgbXVzdCBiZSBub24tZW1wdHkgc3RyaW5nc2ApO1xuICAgIH1cbiAgICBjb25zdCBzdWJtaXR0ZXJBY3RBcyA9IGNhbnRvblR4LmNhbnRvbkNvbW1hbmRBY3RBc1BhcnRpZXMgPz8gW107XG4gICAgaWYgKCF1dGlscy5zYW1lRWxlbWVudHMoc3VibWl0dGVyQWN0QXMsIHVzZXJQYXJhbXMuYWN0QXMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW50b25Db21tYW5kIHZlcmlmeVRyYW5zYWN0aW9uOiBzdWJtaXR0ZXJJbmZvLmFjdEFzIFske3N1Ym1pdHRlckFjdEFzLmpvaW4oXG4gICAgICAgICAgJywgJ1xuICAgICAgICApfV0gZG9lcyBub3QgbWF0Y2ggdXNlciBhY3RBcyBbJHt1c2VyUGFyYW1zLmFjdEFzLmpvaW4oJywgJyl9XWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHVzZXJLaW5kID09PSAnRXhlcmNpc2VDb21tYW5kJykge1xuICAgICAgY29uc3QgZXhlcmNpc2VJbm5lciA9IHVzZXJJbm5lciBhcyBDYW50b25FeGVyY2lzZUNvbW1hbmRbJ0V4ZXJjaXNlQ29tbWFuZCddO1xuXG4gICAgICAvLyBjaG9pY2UgaWRcbiAgICAgIGlmIChkZWNvZGVkQ29tbWFuZC5jaG9pY2UgIT09IGV4ZXJjaXNlSW5uZXIuY2hvaWNlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2FudG9uQ29tbWFuZCB2ZXJpZnlUcmFuc2FjdGlvbjogY2hvaWNlIG1pc21hdGNoIOKAlCBleHBlY3RlZCAnJHtleGVyY2lzZUlubmVyLmNob2ljZX0nLCBnb3QgJyR7XG4gICAgICAgICAgICBkZWNvZGVkQ29tbWFuZC5jaG9pY2UgPz8gJydcbiAgICAgICAgICB9J2BcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gZXZlcnkgb24tY2hhaW4gYWN0aW5nUGFydHkgbXVzdCBiZSBpbiB0aGUgdXNlcidzIGFjdEFzIChwcmV2ZW50cyBwcml2aWxlZ2UgZXNjYWxhdGlvbilcbiAgICAgIGNvbnN0IG9uQ2hhaW5BY3RvcnMgPSBkZWNvZGVkQ29tbWFuZC5hY3RpbmdQYXJ0aWVzID8/IFtdO1xuICAgICAgZm9yIChjb25zdCBhY3RvciBvZiBvbkNoYWluQWN0b3JzKSB7XG4gICAgICAgIGlmICghdXNlclBhcmFtcy5hY3RBcy5pbmNsdWRlcyhhY3RvcikpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQ2FudG9uQ29tbWFuZCB2ZXJpZnlUcmFuc2FjdGlvbjogdW5hdXRob3JpemVkIGFjdGluZyBwYXJ0eSAnJHthY3Rvcn0nIG9uIHJvb3QgZXhlcmNpc2UgKG5vdCBpbiB1c2VyIGFjdEFzKWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGNvbnRyYWN0SWQg4oCUIHNraXAgd2hlbiBhYnNlbnQvZW1wdHkgb3Igd2hlbiBJTVMgd2lsbCBpbmplY3QgaXQgdmlhIHJlc29sdmVDb250cmFjdHNcbiAgICAgIGlmIChcbiAgICAgICAgZXhlcmNpc2VJbm5lci5jb250cmFjdElkICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgZXhlcmNpc2VJbm5lci5jb250cmFjdElkICE9PSAnJyAmJlxuICAgICAgICAhc2tpcFBhdGhzLmhhcygnRXhlcmNpc2VDb21tYW5kLmNvbnRyYWN0SWQnKVxuICAgICAgKSB7XG4gICAgICAgIGlmIChkZWNvZGVkQ29tbWFuZC5jb250cmFjdElkICE9PSBleGVyY2lzZUlubmVyLmNvbnRyYWN0SWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQ2FudG9uQ29tbWFuZCB2ZXJpZnlUcmFuc2FjdGlvbjogY29udHJhY3RJZCBtaXNtYXRjaCDigJQgZXhwZWN0ZWQgJyR7ZXhlcmNpc2VJbm5lci5jb250cmFjdElkfScsIGdvdCAnJHtcbiAgICAgICAgICAgICAgZGVjb2RlZENvbW1hbmQuY29udHJhY3RJZCA/PyAnJ1xuICAgICAgICAgICAgfSdgXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBkZWVwIGFyZ3VtZW50IGNvbXBhcmVcbiAgICAgIGNvbnN0IGFyZ3VtZW50U2tpcFBhdGhzID0gdGhpcy5yZWxhdGl2ZVNraXBQYXRocyhza2lwUGF0aHMsICdFeGVyY2lzZUNvbW1hbmQuY2hvaWNlQXJndW1lbnQuJyk7XG4gICAgICB1dGlscy5hc3NlcnREZWVwQ2FudG9uTWF0Y2goZXhlcmNpc2VJbm5lci5jaG9pY2VBcmd1bWVudCwgZGVjb2RlZENvbW1hbmQuYXJndW1lbnQsIGFyZ3VtZW50U2tpcFBhdGhzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY3JlYXRlSW5uZXIgPSB1c2VySW5uZXIgYXMgQ2FudG9uQ3JlYXRlQ29tbWFuZFsnQ3JlYXRlQ29tbWFuZCddO1xuXG4gICAgICAvLyBkZWVwIGFyZ3VtZW50IGNvbXBhcmVcbiAgICAgIGNvbnN0IGFyZ3VtZW50U2tpcFBhdGhzID0gdGhpcy5yZWxhdGl2ZVNraXBQYXRocyhza2lwUGF0aHMsICdDcmVhdGVDb21tYW5kLmNyZWF0ZUFyZ3VtZW50cy4nKTtcbiAgICAgIHV0aWxzLmFzc2VydERlZXBDYW50b25NYXRjaChjcmVhdGVJbm5lci5jcmVhdGVBcmd1bWVudHMsIGRlY29kZWRDb21tYW5kLmFyZ3VtZW50LCBhcmd1bWVudFNraXBQYXRocyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIHJlbGF0aXZlU2tpcFBhdGhzKHNraXBQYXRoczogU2V0PHN0cmluZz4sIHByZWZpeDogc3RyaW5nKTogU2V0PHN0cmluZz4ge1xuICAgIGNvbnN0IG91dCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGZvciAoY29uc3QgcCBvZiBza2lwUGF0aHMpIHtcbiAgICAgIGlmIChwLnN0YXJ0c1dpdGgocHJlZml4KSkge1xuICAgICAgICBjb25zdCBzdHJpcHBlZCA9IHAuc2xpY2UocHJlZml4Lmxlbmd0aCk7XG4gICAgICAgIGlmIChzdHJpcHBlZCkgb3V0LmFkZChzdHJpcHBlZCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgYXN5bmMgaXNXYWxsZXRBZGRyZXNzKHBhcmFtczogVHNzVmVyaWZ5QWRkcmVzc09wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBUT0RPOiByZWZhY3RvciB0aGlzIGFuZCB1c2UgdGhlIGB2ZXJpZnlFZGRzYU1lbW9CYXNlZFdhbGxldEFkZHJlc3NgIG9uY2UgcHVibGlzaGVkIGZyb20gc2RrLWNvcmVcbiAgICAvLyBodHRwczovL2JpdGdvaW5jLmF0bGFzc2lhbi5uZXQvYnJvd3NlL0NPSU4tNjM0N1xuICAgIGNvbnN0IHsga2V5Y2hhaW5zLCBhZGRyZXNzOiBuZXdBZGRyZXNzLCBpbmRleCB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IFthZGRyZXNzUGFydCwgbWVtb0lkXSA9IG5ld0FkZHJlc3Muc3BsaXQoJz9tZW1vSWQ9Jyk7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3NQYXJ0KSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoYGludmFsaWQgYWRkcmVzczogJHtuZXdBZGRyZXNzfWApO1xuICAgIH1cbiAgICBpZiAobWVtb0lkICYmIG1lbW9JZCAhPT0gYCR7aW5kZXh9YCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoYGludmFsaWQgbWVtb0lkIGluZGV4OiAke21lbW9JZH1gKTtcbiAgICB9XG4gICAgY29uc3QgY29tbW9uS2V5Y2hhaW4gPSBleHRyYWN0Q29tbW9uS2V5Y2hhaW4oa2V5Y2hhaW5zKTtcbiAgICBjb25zdCBNUEMgPSBhd2FpdCBFRERTQU1ldGhvZHMuZ2V0SW5pdGlhbGl6ZWRNcGNJbnN0YW5jZSgpO1xuICAgIGNvbnN0IGRlcml2YXRpb25QYXRoID0gJ20vMCc7XG4gICAgY29uc3QgZGVyaXZlZFB1YmxpY0tleSA9IE1QQy5kZXJpdmVVbmhhcmRlbmVkKGNvbW1vbktleWNoYWluLCBkZXJpdmF0aW9uUGF0aCkuc2xpY2UoMCwgNjQpO1xuICAgIGNvbnN0IHB1YmxpY0tleUJhc2U2NCA9IEJ1ZmZlci5mcm9tKGRlcml2ZWRQdWJsaWNLZXksICdoZXgnKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgY29uc3Qgcm9vdEFkZHJlc3NGaW5nZXJwcmludCA9IHV0aWxzLmdldEFkZHJlc3NGcm9tUHVibGljS2V5KHB1YmxpY0tleUJhc2U2NCk7XG4gICAgY29uc3Qgcm9vdEFkZHJlc3MgPSBgJHtyb290QWRkcmVzc0ZpbmdlcnByaW50LnNsaWNlKDAsIDUpfTo6JHtyb290QWRkcmVzc0ZpbmdlcnByaW50fWA7XG4gICAgcmV0dXJuIGFkZHJlc3NQYXJ0ID09PSByb290QWRkcmVzcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBhc3luYyBwYXJzZVRyYW5zYWN0aW9uKHBhcmFtczogUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPFBhcnNlZFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgdHhIZXggPSBwYXJhbXMudHhIZXggYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlmICghdHhIZXgpIHtcbiAgICAgIC8vIE1lc3NhZ2Utb25seSBzaWduaW5nIHJlcXVlc3RzIChlLmcuIENBTlRPTl9TSUdOX1RSQU5TQUNUSU9OLCBDQU5UT05fU0lHTl9UT1BPTE9HWSlcbiAgICAgIC8vIGhhdmUgbm8gdHJhbnNhY3Rpb24gaGV4IHRvIHBhcnNlIOKAlCByZXR1cm4gYW4gZW1wdHkgcmVzdWx0LlxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCB0cmFuc2FjdGlvbkV4cGxhbmF0aW9uID0gYXdhaXQgdGhpcy5leHBsYWluVHJhbnNhY3Rpb24oeyB0eEhleCB9KTtcbiAgICBpZiAoIXRyYW5zYWN0aW9uRXhwbGFuYXRpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICByZXR1cm4gdHJhbnNhY3Rpb25FeHBsYW5hdGlvbiBhcyB1bmtub3duIGFzIFBhcnNlZFRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdlbmVyYXRlS2V5UGFpcihzZWVkPzogQnVmZmVyKTogS2V5UGFpciB7XG4gICAgY29uc3Qga2V5UGFpciA9IHNlZWQgPyBuZXcgQ2FudG9uS2V5UGFpcih7IHNlZWQgfSkgOiBuZXcgQ2FudG9uS2V5UGFpcigpO1xuICAgIGNvbnN0IGtleXMgPSBrZXlQYWlyLmdldEtleXMoKTtcbiAgICBpZiAoIWtleXMucHJ2KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcHJ2IGluIGtleSBnZW5lcmF0aW9uLicpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgcHViOiBrZXlzLnB1YixcbiAgICAgIHBydjoga2V5cy5wcnYsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBleHBsYWluVHJhbnNhY3Rpb24ocGFyYW1zOiBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxUcmFuc2FjdGlvbkV4cGxhbmF0aW9uPiB7XG4gICAgY29uc3QgZmFjdG9yeSA9IHRoaXMuZ2V0QnVpbGRlcigpO1xuICAgIGxldCByZWJ1aWx0VHJhbnNhY3Rpb246IEJhc2VUcmFuc2FjdGlvbjtcbiAgICBjb25zdCB0eFJhdyA9IHBhcmFtcy50eEhleDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHR4UmF3KTtcbiAgICAgIHJlYnVpbHRUcmFuc2FjdGlvbiA9IHR4QnVpbGRlci50cmFuc2FjdGlvbjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlYnVpbHRUcmFuc2FjdGlvbi5leHBsYWluVHJhbnNhY3Rpb24oKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBpc1ZhbGlkUHViKHB1Yjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHV0aWxzLmlzVmFsaWRQdWJsaWNLZXkocHViKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAvLyBjYW50b24gYWRkcmVzc2VzIGFyZSBvZiB0aGUgZm9ybSwgcGFydHlIaW50OjpmaW5nZXJwcmludFxuICAgIC8vIHdoZXJlIHBhcnR5SGludCBpcyBvZiBsZW5ndGggNSBhbmQgZmluZ2VycHJpbnQgaXMgNjggY2hhcmFjdGVycyBsb25nXG4gICAgcmV0dXJuIHV0aWxzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdldFRva2VuRW5hYmxlbWVudENvbmZpZygpOiBUb2tlbkVuYWJsZW1lbnRDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICByZXF1aXJlc1Rva2VuRW5hYmxlbWVudDogdHJ1ZSxcbiAgICAgIHN1cHBvcnRzTXVsdGlwbGVUb2tlbkVuYWJsZW1lbnRzOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkocHVibGljS2V5SGV4OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHB1YmxpY0tleUJhc2U2NCA9IEJ1ZmZlci5mcm9tKHB1YmxpY0tleUhleCwgJ2hleCcpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICByZXR1cm4gdXRpbHMuZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkocHVibGljS2V5QmFzZTY0KTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzaWduVHJhbnNhY3Rpb24ocGFyYW1zOiBTaWduVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbj4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBhdWRpdERlY3J5cHRlZEtleSh7IG11bHRpU2lnVHlwZSwgcHJ2LCBwdWJsaWNLZXkgfTogQXVkaXREZWNyeXB0ZWRLZXlQYXJhbXMpOiB2b2lkIHtcbiAgICBpZiAobXVsdGlTaWdUeXBlICE9PSBtdWx0aXNpZ1R5cGVzLnRzcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBtdWx0aVNpZ1R5cGUnKTtcbiAgICB9XG4gICAgYXVkaXRFZGRzYVByaXZhdGVLZXkocHJ2LCBwdWJsaWNLZXkgPz8gJycpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHNldENvaW5TcGVjaWZpY0ZpZWxkc0luSW50ZW50KFxuICAgIGludGVudDogUG9wdWxhdGVkSW50ZW50LFxuICAgIHBhcmFtczogUHJlYnVpbGRUcmFuc2FjdGlvbldpdGhJbnRlbnRPcHRpb25zICYgeyBleGVjdXRvclBhcnR5SWQ/OiBzdHJpbmcgfVxuICApOiB2b2lkIHtcbiAgICBpZiAocGFyYW1zLnR4UmVxdWVzdElkKSB7XG4gICAgICBpbnRlbnQudHhSZXF1ZXN0SWQgPSBwYXJhbXMudHhSZXF1ZXN0SWQ7XG4gICAgfVxuICAgIGlmIChwYXJhbXMudHJhbnNmZXJPZmZlcklkKSB7XG4gICAgICBpbnRlbnQudHJhbnNmZXJPZmZlcklkID0gcGFyYW1zLnRyYW5zZmVyT2ZmZXJJZDtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy51bnNwZW50cykge1xuICAgICAgaW50ZW50LnVuc3BlbnRzID0gcGFyYW1zLnVuc3BlbnRzO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLmNhbnRvbkNvbW1hbmRQYXJhbXMpIHtcbiAgICAgIGludGVudC5jYW50b25Db21tYW5kUGFyYW1zID0gcGFyYW1zLmNhbnRvbkNvbW1hbmRQYXJhbXM7XG4gICAgfVxuICAgIGlmIChwYXJhbXMuZXhlY3V0b3JQYXJ0eUlkKSB7XG4gICAgICAoaW50ZW50IGFzIFBvcHVsYXRlZEludGVudCAmIHsgZXhlY3V0b3JQYXJ0eUlkPzogc3RyaW5nIH0pLmV4ZWN1dG9yUGFydHlJZCA9IHBhcmFtcy5leGVjdXRvclBhcnR5SWQ7XG4gICAgfVxuICAgIGlmIChwYXJhbXMuZW5kSW52ZXN0b3JQYXJ0eUlkKSB7XG4gICAgICBpbnRlbnQuZW5kSW52ZXN0b3JQYXJ0eUlkID0gcGFyYW1zLmVuZEludmVzdG9yUGFydHlJZDtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5yZWFzb24pIHtcbiAgICAgIGludGVudC5yZWFzb24gPSBwYXJhbXMucmVhc29uO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLm9wZXJhdG9yKSB7XG4gICAgICBpbnRlbnQub3BlcmF0b3IgPSBwYXJhbXMub3BlcmF0b3I7XG4gICAgfVxuICAgIGlmIChwYXJhbXMucHJvdmlkZXIpIHtcbiAgICAgIGludGVudC5wcm92aWRlciA9IHBhcmFtcy5wcm92aWRlcjtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5jb21wbGlhbmNlKSB7XG4gICAgICBpbnRlbnQuY29tcGxpYW5jZSA9IHBhcmFtcy5jb21wbGlhbmNlO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLnJlZ2lzdHJhcikge1xuICAgICAgaW50ZW50LnJlZ2lzdHJhciA9IHBhcmFtcy5yZWdpc3RyYXI7XG4gICAgfVxuICAgIGlmIChwYXJhbXMuY2xpZW50T25ib2FyZGVyKSB7XG4gICAgICBpbnRlbnQuY2xpZW50T25ib2FyZGVyID0gcGFyYW1zLmNsaWVudE9uYm9hcmRlcjtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5leHBpcmF0aW9uSXNvKSB7XG4gICAgICBpbnRlbnQuZXhwaXJhdGlvbklzbyA9IHBhcmFtcy5leHBpcmF0aW9uSXNvO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,19 @@
1
+ import { BitGoBase, CoinConstructor, NamedCoinConstructor } from '@bitgo-beta/sdk-core';
2
+ import { CantonTokenConfig } from '@bitgo-beta/statics';
3
+ import { Canton } from './canton';
4
+ export declare class CantonToken extends Canton {
5
+ readonly tokenConfig: CantonTokenConfig;
6
+ constructor(bitgo: BitGoBase, tokenConfig: CantonTokenConfig);
7
+ static createTokenConstructor(config: CantonTokenConfig): CoinConstructor;
8
+ static createTokenConstructors(tokenConfig?: CantonTokenConfig[]): NamedCoinConstructor[];
9
+ get name(): string;
10
+ get coin(): string;
11
+ get baseUrl(): string;
12
+ get contractAddress(): string;
13
+ get decimalPlaces(): number;
14
+ getChain(): string;
15
+ getBaseChain(): string;
16
+ getFullName(): string;
17
+ getBaseFactor(): number;
18
+ }
19
+ //# sourceMappingURL=cantonToken.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cantonToken.d.ts","sourceRoot":"","sources":["../../src/cantonToken.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAS,iBAAiB,EAAuB,MAAM,qBAAqB,CAAC;AAEpF,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,qBAAa,WAAY,SAAQ,MAAM;IACrC,SAAgB,WAAW,EAAE,iBAAiB,CAAC;gBAEnC,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,iBAAiB;IAM5D,MAAM,CAAC,sBAAsB,CAAC,MAAM,EAAE,iBAAiB,GAAG,eAAe;IAIzE,MAAM,CAAC,uBAAuB,CAC5B,WAAW,GAAE,iBAAiB,EAAuE,GACpG,oBAAoB,EAAE;IASzB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,QAAQ,IAAI,MAAM;IAIlB,YAAY,IAAI,MAAM;IAItB,WAAW,IAAI,MAAM;IAIrB,aAAa,IAAI,MAAM;CAGxB"}