@bitgo-beta/statics 10.0.1-alpha.486 → 10.0.1-alpha.488

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.
@@ -1,5 +1,5 @@
1
1
  import { BaseCoin } from './base';
2
- import { AmsTokenConfig, TrimmedAmsTokenConfig } from './tokenConfig';
2
+ import { AmsNetworkConfigMap, AmsTokenConfig, TrimmedAmsTokenConfig } from './tokenConfig';
3
3
  import { CoinMap } from './map';
4
4
  export declare const coins: CoinMap;
5
5
  export declare function createToken(token: AmsTokenConfig): Readonly<BaseCoin> | undefined;
@@ -9,6 +9,17 @@ export declare function isCoinPresentInCoinMap({ name, id, alias }: {
9
9
  alias?: string;
10
10
  }): boolean;
11
11
  export declare function createTokenMapUsingConfigDetails(tokenConfigMap: Record<string, AmsTokenConfig[]>): CoinMap;
12
+ /**
13
+ * Enrich base chain coins (isToken=false) with features from the AMS networks map.
14
+ *
15
+ * createTokenMapUsingTrimmedConfigDetails reads features for base chains from
16
+ * TrimmedAmsTokenConfig.additionalFeatures. The assetsList endpoint returns base chains with no features;
17
+ * features are in the networks endpoint (/api/v1/networks/:network), matched by coin.network.name === networksEntry.name.
18
+ *
19
+ * Coins that already have additionalFeatures defined are left unchanged.
20
+ * Coins whose network.name has no match in networksMap are left unchanged (empty features).
21
+ */
22
+ export declare function enrichBaseChainFeatures(coinTokenMap: Record<string, TrimmedAmsTokenConfig[]>, networksMap: AmsNetworkConfigMap): Record<string, TrimmedAmsTokenConfig[]>;
12
23
  export declare function createTokenMapUsingTrimmedConfigDetails(reducedTokenConfigMap: Record<string, TrimmedAmsTokenConfig[]>): CoinMap;
13
24
  export declare function createTokenUsingTrimmedConfigDetails(tokenConfig: TrimmedAmsTokenConfig): Readonly<BaseCoin> | undefined;
14
25
  //# sourceMappingURL=coins.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"coins.d.ts","sourceRoot":"","sources":["../../src/coins.ts"],"names":[],"mappings":"AAgCA,OAAO,EAAE,QAAQ,EAA4B,MAAM,QAAQ,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAQhC,eAAO,MAAM,KAAK,SAMhB,CAAC;AA2BH,wBAAgB,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,SAAS,CA6RjF;AA6DD,wBAAgB,sBAAsB,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAElH;AAED,wBAAgB,gCAAgC,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,GAAG,OAAO,CA8C1G;AAED,wBAAgB,uCAAuC,CACrD,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,EAAE,CAAC,GAC7D,OAAO,CA4BT;AAED,wBAAgB,oCAAoC,CAClD,WAAW,EAAE,qBAAqB,GACjC,QAAQ,CAAC,QAAQ,CAAC,GAAG,SAAS,CAwBhC"}
1
+ {"version":3,"file":"coins.d.ts","sourceRoot":"","sources":["../../src/coins.ts"],"names":[],"mappings":"AAgCA,OAAO,EAAE,QAAQ,EAA4B,MAAM,QAAQ,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC3F,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAQhC,eAAO,MAAM,KAAK,SAMhB,CAAC;AA2BH,wBAAgB,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,SAAS,CA6RjF;AA6DD,wBAAgB,sBAAsB,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAElH;AAED,wBAAgB,gCAAgC,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,GAAG,OAAO,CA8C1G;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,EAAE,CAAC,EACrD,WAAW,EAAE,mBAAmB,GAC/B,MAAM,CAAC,MAAM,EAAE,qBAAqB,EAAE,CAAC,CAczC;AAED,wBAAgB,uCAAuC,CACrD,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,EAAE,CAAC,GAC7D,OAAO,CA4BT;AAED,wBAAgB,oCAAoC,CAClD,WAAW,EAAE,qBAAqB,GACjC,QAAQ,CAAC,QAAQ,CAAC,GAAG,SAAS,CAwBhC"}
package/dist/src/coins.js CHANGED
@@ -4,6 +4,7 @@ exports.coins = void 0;
4
4
  exports.createToken = createToken;
5
5
  exports.isCoinPresentInCoinMap = isCoinPresentInCoinMap;
6
6
  exports.createTokenMapUsingConfigDetails = createTokenMapUsingConfigDetails;
7
+ exports.enrichBaseChainFeatures = enrichBaseChainFeatures;
7
8
  exports.createTokenMapUsingTrimmedConfigDetails = createTokenMapUsingTrimmedConfigDetails;
8
9
  exports.createTokenUsingTrimmedConfigDetails = createTokenUsingTrimmedConfigDetails;
9
10
  const account_1 = require("./account");
@@ -367,6 +368,28 @@ function createTokenMapUsingConfigDetails(tokenConfigMap) {
367
368
  }
368
369
  return map_1.CoinMap.fromCoins(Array.from(BaseCoins.values()));
369
370
  }
371
+ /**
372
+ * Enrich base chain coins (isToken=false) with features from the AMS networks map.
373
+ *
374
+ * createTokenMapUsingTrimmedConfigDetails reads features for base chains from
375
+ * TrimmedAmsTokenConfig.additionalFeatures. The assetsList endpoint returns base chains with no features;
376
+ * features are in the networks endpoint (/api/v1/networks/:network), matched by coin.network.name === networksEntry.name.
377
+ *
378
+ * Coins that already have additionalFeatures defined are left unchanged.
379
+ * Coins whose network.name has no match in networksMap are left unchanged (empty features).
380
+ */
381
+ function enrichBaseChainFeatures(coinTokenMap, networksMap) {
382
+ const featuresByNetworkName = new Map(Object.values(networksMap).map((net) => [net.name, net.features]));
383
+ return Object.fromEntries(Object.entries(coinTokenMap).map(([key, coins]) => [
384
+ key,
385
+ coins.map((coin) => {
386
+ if (coin.isToken || coin.additionalFeatures !== undefined)
387
+ return coin;
388
+ const features = featuresByNetworkName.get(coin.network.name);
389
+ return features !== undefined ? { ...coin, additionalFeatures: features } : coin;
390
+ }),
391
+ ]));
392
+ }
370
393
  function createTokenMapUsingTrimmedConfigDetails(reducedTokenConfigMap) {
371
394
  const amsTokenConfigMap = {};
372
395
  const networkNameMap = (0, networks_1.getNetworksMap)();
@@ -417,4 +440,4 @@ function createTokenUsingTrimmedConfigDetails(tokenConfig) {
417
440
  return createToken(fullTokenConfig);
418
441
  }
419
442
  }
420
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29pbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29pbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBMkVBLGtDQTZSQztBQTZERCx3REFFQztBQUVELDRFQThDQztBQUVELDBGQThCQztBQUVELG9GQTBCQztBQW5oQkQsdUNBOEJtQjtBQUNuQiwrQkFBaUM7QUFDakMsaUNBQTREO0FBRTVELCtCQUFnQztBQUNoQyx5Q0FBa0Y7QUFDbEYsNkVBQTBFO0FBQzFFLHlEQUFzRTtBQUN0RSwrQ0FBNEM7QUFDNUMsMkRBQXdEO0FBQ3hELHVEQUFvRDtBQUV2QyxRQUFBLEtBQUssR0FBRyxhQUFPLENBQUMsU0FBUyxDQUFDO0lBQ3JDLEdBQUcscUNBQWlCO0lBQ3BCLEdBQUcsNkJBQWE7SUFDaEIsR0FBRyw4QkFBYztJQUNqQixHQUFHLG1CQUFRO0lBQ1gsR0FBRywyQkFBWTtDQUNoQixDQUFDLENBQUM7QUFFSCxpRkFBaUY7QUFDakYsZ0RBQWdEO0FBQ2hELE1BQU0sbUJBQW1CLEdBQTJCLEVBQUUsQ0FBQztBQUV2RCxxQ0FBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtJQUNqQyxJQUNFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGtCQUFXLENBQUMsY0FBYyxDQUFDO1FBQ2xELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLHNCQUFXLENBQUMsT0FBTztRQUN6QyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQ2IsQ0FBQztRQUNELG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQy9DLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVILE1BQU0sb0JBQW9CLEdBQTJCLEVBQUUsQ0FBQztBQUN4RCxxQ0FBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtJQUNqQyxJQUNFLElBQUksQ0FBQyxRQUFRLENB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QUFDO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFakUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN6Qix5R0FBeUc7UUFDekcsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLE9BQU8sV0FBVyxDQUFDLEVBQUUsR0FBRyxXQUFXLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxrQkFBa0IsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFvQixDQUFDLENBQUM7UUFDcEgsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJLE9BQU8sSUFBSSx1REFBMEIsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUMxRCxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsQ0FBQztZQUN2QixHQUFHLENBQUMsdURBQTBCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNyRCxHQUFHLENBQUMsV0FBVyxDQUFDLGtCQUFrQixJQUFJLEVBQUUsQ0FBQztTQUMxQyxDQUFDLENBQUM7UUFDSCxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDN0UsZUFBZSxHQUFHLEVBQUUsR0FBRyxXQUFXLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxFQUFvQixDQUFDO1FBQ2hHLE9BQU8sV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYWxnb1Rva2VuLFxuICBhcHRORlRDb2xsZWN0aW9uLFxuICBhcHRUb2tlbixcbiAgYXJiZXRoRXJjMjAsXG4gIGF2YXhFcmMyMCxcbiAgYmVyYUVyYzIwLFxuICBic2NUb2tlbixcbiAgY2Vsb1Rva2VuLFxuICBjb3Ntb3NUb2tlbixcbiAgZW9zVG9rZW4sXG4gIGVyYzIwLFxuICBoZWRlcmFUb2tlbixcbiAgamV0dG9uVG9rZW4sXG4gIG5lcDE0MVRva2VuLFxuICBvcGV0aEVyYzIwLFxuICBwb2x5Z29uRXJjMjAsXG4gIHBvbHl4VG9rZW4sXG4gIHNpcDEwVG9rZW4sXG4gIHNvbFRva2VuLFxuICBzdGVsbGFyVG9rZW4sXG4gIHN1aVRva2VuLFxuICB0YW9Ub2tlbixcbiAgdHJvblRva2VuLFxuICB2ZXRORlRDb2xsZWN0aW9uLFxuICB2ZXRUb2tlbixcbiAgeHJwVG9rZW4sXG4gIGFkYVRva2VuLFxuICBlcmMyMFRva2VuLFxuICBlcmM3MjFUb2tlbixcbn0gZnJvbSAnLi9hY2NvdW50JztcbmltcG9ydCB7IG9mY1Rva2VuIH0gZnJvbSAnLi9vZmMnO1xuaW1wb3J0IHsgQmFzZUNvaW4sIENvaW5GZWF0dXJlLCBEeW5hbWljQ29pbiB9IGZyb20gJy4vYmFzZSc7XG5pbXBvcnQgeyBBbXNUb2tlbkNvbmZpZywgVHJpbW1lZEFtc1Rva2VuQ29uZmlnIH0gZnJvbSAnLi90b2tlbkNvbmZpZyc7XG5pbXBvcnQgeyBDb2luTWFwIH0gZnJvbSAnLi9tYXAnO1xuaW1wb3J0IHsgQmFzZU5ldHdvcmssIGdldE5ldHdvcmssIGdldE5ldHdvcmtzTWFwLCBOZXR3b3JrVHlwZSB9IGZyb20gJy4vbmV0d29ya3MnO1xuaW1wb3J0IHsgbmV0d29ya0ZlYXR1cmVNYXBGb3JUb2tlbnMgfSBmcm9tICcuL25ldHdvcmtGZWF0dXJlTWFwRm9yVG9rZW5zJztcbmltcG9ydCB7IG9mY0VyYzIwQ29pbnMsIHRPZmNFcmMyMENvaW5zIH0gZnJvbSAnLi9jb2lucy9vZmNFcmMyMENvaW5zJztcbmltcG9ydCB7IG9mY0NvaW5zIH0gZnJvbSAnLi9jb2lucy9vZmNDb2lucyc7XG5pbXBvcnQgeyBhbGxDb2luc0FuZFRva2VucyB9IGZyb20gJy4vYWxsQ29pbnNBbmRUb2tlbnMnO1xuaW1wb3J0IHsgYm90T2ZjVG9rZW5zIH0gZnJvbSAnLi9jb2lucy9ib3RPZmNUb2tlbnMnO1xuXG5leHBvcnQgY29uc3QgY29pbnMgPSBDb2luTWFwLmZyb21Db2lucyhbXG4gIC4uLmFsbENvaW5zQW5kVG9rZW5zLFxuICAuLi5vZmNFcmMyMENvaW5zLFxuICAuLi50T2ZjRXJjMjBDb2lucyxcbiAgLi4ub2ZjQ29pbnMsXG4gIC4uLmJvdE9mY1Rva2Vucyxcbl0pO1xuXG4vLyBCdWlsZCBhIG1hcCBvZiBFUkMyMC1zdXBwb3J0aW5nIGNoYWluIGZhbWlseSBuYW1lcyB0byB0aGVpciBtYWlubmV0IGNvaW4gbmFtZXNcbi8vIE1hcHMgZmFtaWx5IC0+IGNvaW4gbmFtZSAoZS5nLiwgJ2lwJyAtPiAnaXAnKVxuY29uc3QgZXJjMjBDaGFpblRvTmFtZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG5hbGxDb2luc0FuZFRva2Vucy5mb3JFYWNoKChjb2luKSA9PiB7XG4gIGlmIChcbiAgICBjb2luLmZlYXR1cmVzLmluY2x1ZGVzKENvaW5GZWF0dXJlLlNVUFBPUlRTX0VSQzIwKSAmJlxuICAgIGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUICYmXG4gICAgIWNvaW4uaXNUb2tlblxuICApIHtcbiAgICBlcmMyMENoYWluVG9OYW1lTWFwW2NvaW4uZmFtaWx5XSA9IGNvaW4ubmFtZTtcbiAgfVxufSk7XG5cbmNvbnN0IGVyYzcyMUNoYWluVG9OYW1lTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5hbGxDb2luc0FuZFRva2Vucy5mb3JFYWNoKChjb2luKSA9PiB7XG4gIGlmIChcbiAgICBjb2luLmZlYXR1cmVzLmluY2x1ZGVzKENvaW5GZWF0dXJlLlNVUFBPUlRTX0VSQzcyMSkgJiZcbiAgICBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCAmJlxuICAgICFjb2luLmlzVG9rZW5cbiAgKSB7XG4gICAgZXJjNzIxQ2hhaW5Ub05hbWVNYXBbY29pbi5mYW1pbHldID0gY29pbi5uYW1lO1xuICB9XG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRva2VuKHRva2VuOiBBbXNUb2tlbkNvbmZpZyk6IFJlYWRvbmx5PEJhc2VDb2luPiB8IHVuZGVmaW5lZCB7XG4gIGlmICghdG9rZW4uaXNUb2tlbikge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYnVpbGREeW5hbWljQ29pbih0b2tlbik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybihgRmFpbGVkIHRvIGJ1aWxkIGR5bmFtaWMgY29pbiBmb3IgJHt0b2tlbi5uYW1lfSAoJHt0b2tlbi5pZH0pOmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIGNvbnN0IGluaXRpYWxpemVyTWFwOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICBhbGdvOiBhbGdvVG9rZW4sXG4gICAgYXB0OiBhcHRUb2tlbixcbiAgICBhcmJldGg6IGFyYmV0aEVyYzIwLFxuICAgIGF2YXhjOiBhdmF4RXJjMjAsXG4gICAgYmFzZWV0aDogZXJjMjBUb2tlbixcbiAgICBiZXJhOiBiZXJhRXJjMjAsXG4gICAgZmxvdzogZXJjMjBUb2tlbixcbiAgICBsaW5lYWV0aDogZXJjMjBUb2tlbixcbiAgICBzZWlldm06IGVyYzIwVG9rZW4sXG4gICAgbW9uOiBlcmMyMFRva2VuLFxuICAgIHhkYzogZXJjMjBUb2tlbixcbiAgICBic2M6IGJzY1Rva2VuLFxuICAgIGNlbG86IGNlbG9Ub2tlbixcbiAgICBjb3Ntb3M6IGNvc21vc1Rva2VuLFxuICAgIGV0aDogZXJjMjAsXG4gICAgZW9zOiBlb3NUb2tlbixcbiAgICBoYmFyOiBoZWRlcmFUb2tlbixcbiAgICBuZWFyOiBuZXAxNDFUb2tlbixcbiAgICBvcGV0aDogb3BldGhFcmMyMCxcbiAgICBwb2x5Z29uOiBwb2x5Z29uRXJjMjAsXG4gICAgc29sOiBzb2xUb2tlbixcbiAgICBzdHg6IHNpcDEwVG9rZW4sXG4gICAgc3VpOiBzdWlUb2tlbixcbiAgICB0YW86IHRhb1Rva2VuLFxuICAgIHBvbHl4OiBwb2x5eFRva2VuLFxuICAgIHRyeDogdHJvblRva2VuLFxuICAgIHZldDogdmV0VG9rZW4sXG4gICAgeGxtOiBzdGVsbGFyVG9rZW4sXG4gICAgeHJwOiB4cnBUb2tlbixcbiAgICBvZmM6IG9mY1Rva2VuLFxuICAgIGFkYTogYWRhVG9rZW4sXG4gICAgdG9uOiBqZXR0b25Ub2tlbixcbiAgfTtcblxuICAvLyBkeW5hbWljYWxseSBhZGQgZXJjMjAgdG9rZW4gaW5pdGlhbGl6ZXJzIGZvciBldGggbGlrZSBjaGFpbnMgdG8gdGhlIGluaXRpYWxpemVyIG1hcFxuICBPYmplY3Qua2V5cyhlcmMyMENoYWluVG9OYW1lTWFwKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBpbml0aWFsaXplck1hcFtrZXldID0gZXJjMjBUb2tlbjtcbiAgfSk7XG5cbiAgT2JqZWN0LmtleXMoZXJjNzIxQ2hhaW5Ub05hbWVNYXApLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGluaXRpYWxpemVyTWFwW2tleV0gPSBlcmM3MjFUb2tlbjtcbiAgfSk7XG5cbiAgLy9yZXR1cm4gdGhlIEJhc2VDb2luIGZyb20gZGVmYXVsdCBjb2luIG1hcCBpZiBwcmVzZW50XG4gIGlmIChpc0NvaW5QcmVzZW50SW5Db2luTWFwKHsgLi4udG9rZW4gfSkpIHtcbiAgICBpZiAoY29pbnMuaGFzKHRva2VuLm5hbWUpKSB7XG4gICAgICByZXR1cm4gY29pbnMuZ2V0KHRva2VuLm5hbWUpO1xuICAgIH1cbiAgICBpZiAoY29pbnMuaGFzKHRva2VuLmlkKSkge1xuICAgICAgcmV0dXJuIGNvaW5zLmdldCh0b2tlbi5pZCk7XG4gICAgfVxuICAgIGlmICh0b2tlbi5hbGlhcyAmJiBjb2lucy5oYXModG9rZW4uYWxpYXMpKSB7XG4gICAgICByZXR1cm4gY29pbnMuZ2V0KHRva2VuLmFsaWFzKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgZmFtaWx5ID0gdG9rZW4uZmFtaWx5O1xuICBjb25zdCBpbml0aWFsaXplciA9IGluaXRpYWxpemVyTWFwW2ZhbWlseV0gYXMgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gUmVhZG9ubHk8QmFzZUNvaW4+O1xuICBpZiAoIWluaXRpYWxpemVyKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGNvbW1vbkFyZ3MgPSBbXG4gICAgdG9rZW4uaWQsXG4gICAgdG9rZW4ubmFtZSxcbiAgICB0b2tlbi5mdWxsTmFtZSxcbiAgICB0b2tlbi5kZWNpbWFsUGxhY2VzLFxuICAgIHRva2VuLmFzc2V0LFxuICAgIHRva2VuLmZlYXR1cmVzLFxuICAgIHRva2VuLnByZWZpeCxcbiAgICB0b2tlbi5zdWZmaXgsXG4gICAgdG9rZW4ubmV0d29yayxcbiAgICB0b2tlbi5wcmltYXJ5S2V5Q3VydmUsXG4gIF07XG5cbiAgc3dpdGNoIChmYW1pbHkpIHtcbiAgICBjYXNlIGVyYzIwQ2hhaW5Ub05hbWVNYXBbZmFtaWx5XTpcbiAgICAgIHJldHVybiBpbml0aWFsaXplcihcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSgwLCA0KSwgLy8gaWQsIG5hbWUsIGZ1bGxOYW1lLCBkZWNpbWFsUGxhY2VzXG4gICAgICAgIHRva2VuLmNvbnRyYWN0QWRkcmVzcyB8fCB0b2tlbi50b2tlbkFkZHJlc3MsIC8vIGNvbnRyYWN0QWRkcmVzc1xuICAgICAgICB0b2tlbi5hc3NldCxcbiAgICAgICAgdG9rZW4ubmV0d29yayxcbiAgICAgICAgdG9rZW4uZmVhdHVyZXMsXG4gICAgICAgIHRva2VuLnByZWZpeCxcbiAgICAgICAgdG9rZW4uc3VmZml4LFxuICAgICAgICB0b2tlbi5wcmltYXJ5S2V5Q3VydmVcbiAgICAgICk7XG4gICAgY2FzZSBlcmM3MjFDaGFpblRvTmFtZU1hcFtmYW1pbHldOlxuICAgICAgcmV0dXJuIGluaXRpYWxpemVyKFxuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDAsIDMpLCAvLyBpZCwgbmFtZSwgZnVsbE5hbWVcbiAgICAgICAgdG9rZW4uY29udHJhY3RBZGRyZXNzLCAvLyBjb250cmFjdEFkZHJlc3NcbiAgICAgICAgdG9rZW4ubmV0d29yayxcbiAgICAgICAgdG9rZW4uZmVhdHVyZXMsXG4gICAgICAgIHRva2VuLnByZWZpeCxcbiAgICAgICAgdG9rZW4uc3VmZml4LFxuICAgICAgICB0b2tlbi5wcmltYXJ5S2V5Q3VydmVcbiAgICAgICk7XG4gICAgY2FzZSAnYXJiZXRoJzpcbiAgICBjYXNlICdhdmF4Yyc6XG4gICAgY2FzZSAnYmFzZWV0aCc6XG4gICAgY2FzZSAnYmVyYSc6XG4gICAgY2FzZSAnYnNjJzpcbiAgICBjYXNlICdmbG93JzpcbiAgICBjYXNlICdsaW5lYWV0aCc6XG4gICAgY2FzZSAnc2VpZXZtJzpcbiAgICBjYXNlICdtb24nOlxuICAgIGNhc2UgJ3hkYyc6XG4gICAgY2FzZSAnY2Vsbyc6XG4gICAgY2FzZSAnZXRoJzpcbiAgICBjYXNlICdvcGV0aCc6XG4gICAgY2FzZSAncG9seWdvbic6XG4gICAgY2FzZSAndHJ4JzpcbiAgICAgIHJldHVybiBpbml0aWFsaXplcihcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSgwLCA0KSwgLy8gaWQsIG5hbWUsIGZ1bGxOYW1lLCBkZWNpbWFsUGxhY2VzXG4gICAgICAgIHRva2VuLmNvbnRyYWN0QWRkcmVzcyB8fCB0b2tlbi50b2tlbkFkZHJlc3MsIC8vIGNvbnRyYWN0QWRkcmVzc1xuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDQpIC8vIGFzc2V0LCBmZWF0dXJlcywgcHJlZml4LCBzdWZmaXgsIG5ldHdvcmssIHByaW1hcnlLZXlDdXJ2ZVxuICAgICAgKTtcblxuICAgIGNhc2UgJ2FwdCc6XG4gICAgICBjb25zdCB7IGluaXRGdW5jLCBvYmplY3RJZCB9ID0gZ2V0QXB0VG9rZW5Jbml0aWFsaXplcih0b2tlbik7XG4gICAgICByZXR1cm4gaW5pdEZ1bmMoXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoMCwgNCksIC8vIGlkLCBuYW1lLCBmdWxsTmFtZSwgZGVjaW1hbFBsYWNlc1xuICAgICAgICBvYmplY3RJZCxcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSg0KSAvLyBhc3NldCwgZmVhdHVyZXMsIHByZWZpeCwgc3VmZml4LCBuZXR3b3JrLCBwcmltYXJ5S2V5Q3VydmVcbiAgICAgICk7XG5cbiAgICBjYXNlICd2ZXQnOlxuICAgICAgY29uc3QgeyB2ZXRJbml0RnVuYywgdmV0T2JqZWN0SWQsIGlzTkZUIH0gPSBnZXRWZXRUb2tlbkluaXRpYWxpemVyKHRva2VuKTtcbiAgICAgIGlmIChpc05GVCkge1xuICAgICAgICByZXR1cm4gdmV0SW5pdEZ1bmMoXG4gICAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSgwLCAzKSwgLy8gaWQsIG5hbWUsIGZ1bGxOYW1lXG4gICAgICAgICAgdmV0T2JqZWN0SWQsXG4gICAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSg0KSAvLyBhc3NldCwgZmVhdHVyZXMsIHByZWZpeCwgc3VmZml4LCBuZXR3b3JrLCBwcmltYXJ5S2V5Q3VydmVcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2ZXRJbml0RnVuYyhcbiAgICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDAsIDQpLCAvLyBpZCwgbmFtZSwgZnVsbE5hbWUsIGRlY2ltYWxQbGFjZXNcbiAgICAgICAgICB2ZXRPYmplY3RJZCxcbiAgICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDQpIC8vIGFzc2V0LCBmZWF0dXJlcywgcHJlZml4LCBzdWZmaXgsIG5ldHdvcmssIHByaW1hcnlLZXlDdXJ2ZVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgY2FzZSAnc3R4JzpcbiAgICAgIHJldHVybiBpbml0aWFsaXplcihcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSgwLCA0KSwgLy8gaWQsIG5hbWUsIGZ1bGxOYW1lLCBkZWNpbWFsUGxhY2VzXG4gICAgICAgIHRva2VuLmFzc2V0SWQsIC8vIGFzc2V0SWRcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSg0KSAvLyBhc3NldCwgZmVhdHVyZXMsIHByZWZpeCwgc3VmZml4LCBuZXR3b3JrLCBwcmltYXJ5S2V5Q3VydmVcbiAgICAgICk7XG5cbiAgICBjYXNlICdhbGdvJzpcbiAgICAgIHJldHVybiBpbml0aWFsaXplcihcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSgwLCAyKSwgLy8gaWQsIG5hbWVcbiAgICAgICAgdG9rZW4uYWxpYXMsIC8vIGFsaWFzXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoMikgLy8gZnVsbE5hbWUsIGRlY2ltYWwsIGFzc2V0LCBmZWF0dXJlcywgcHJlZml4LCBzdWZmaXgsIG5ldHdvcmssIHByaW1hcnlLZXlDdXJ2ZVxuICAgICAgKTtcblxuICAgIGNhc2UgJ2Vvcyc6XG4gICAgICByZXR1cm4gaW5pdGlhbGl6ZXIoXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoMCwgNCksIC8vIGlkLCBuYW1lLCBmdWxsTmFtZSwgZGVjaW1hbFBsYWNlc1xuICAgICAgICB0b2tlbi5jb250cmFjdE5hbWUsIC8vIGNvbnRyYWN0TmFtZVxuICAgICAgICB0b2tlbi5jb250cmFjdEFkZHJlc3MsIC8vIGNvbnRyYWN0QWRkcmVzc1xuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDQsIDgpLCAvLyBhc3NldCwgZmVhdHVyZXMsIHByZWZpeCwgc3VmZml4XG4gICAgICAgIHRva2VuLnN5bWJvbCwgLy8gc3ltYm9sXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoOCkgLy8gbmV0d29yaywgcHJpbWFyeUtleUN1cnZlXG4gICAgICApO1xuXG4gICAgY2FzZSAnaGJhcic6XG4gICAgICByZXR1cm4gaW5pdGlhbGl6ZXIoXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoMCwgMyksIC8vIGlkLCBuYW1lLCBmdWxsTmFtZVxuICAgICAgICB0b2tlbi5uZXR3b3JrLCAvLyBuZXR3b3JrXG4gICAgICAgIHRva2VuLmRlY2ltYWxQbGFjZXMsXG4gICAgICAgIHRva2VuLmFzc2V0LFxuICAgICAgICB0b2tlbi5jb250cmFjdEFkZHJlc3MsIC8vIGNvbnRyYWN0QWRkcmVzc1xuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDUsIDgpLCAvLyBmZWF0dXJlcywgcHJlZml4LCBzdWZmaXhcbiAgICAgICAgdG9rZW4ucHJpbWFyeUtleUN1cnZlXG4gICAgICApO1xuXG4gICAgY2FzZSAnc29sJzpcbiAgICAgIHJldHVybiBpbml0aWFsaXplcihcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSgwLCA0KSwgLy8gaWQsIG5hbWUsIGZ1bGxOYW1lLCBkZWNpbWFsUGxhY2VzXG4gICAgICAgIHRva2VuLnRva2VuQWRkcmVzcywgLy8gdG9rZW5BZGRyZXNzXG4gICAgICAgIHRva2VuLmNvbnRyYWN0QWRkcmVzcywgLy8gY29udHJhY3RBZGRyZXNzXG4gICAgICAgIHRva2VuLmFzc2V0LFxuICAgICAgICB0b2tlbi5mZWF0dXJlcyxcbiAgICAgICAgdG9rZW4ucHJvZ3JhbUlkLFxuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDYpIC8vIHByZWZpeCwgc3VmZml4LCBuZXR3b3JrLCBwcmltYXJ5S2V5Q3VydmVcbiAgICAgICk7XG5cbiAgICBjYXNlICdzdWknOlxuICAgICAgcmV0dXJuIGluaXRpYWxpemVyKFxuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDAsIDQpLCAvLyBpZCwgbmFtZSwgZnVsbE5hbWUsIGRlY2ltYWxQbGFjZXNcbiAgICAgICAgdG9rZW4ucGFja2FnZUlkLCAvLyBwYWNrYWdlSWRcbiAgICAgICAgdG9rZW4ubW9kdWxlLCAvLyBtb2R1bGVcbiAgICAgICAgdG9rZW4uc3ltYm9sLCAvLyBzeW1ib2xcbiAgICAgICAgdG9rZW4uY29udHJhY3RBZGRyZXNzLCAvLyBjb250cmFjdEFkZHJlc3NcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSg0KSAvLyBhc3NldCwgZmVhdHVyZXMsIHByZWZpeCwgc3VmZml4LCBuZXR3b3JrLCBwcmltYXJ5S2V5Q3VydmVcbiAgICAgICk7XG5cbiAgICBjYXNlICd0YW8nOlxuICAgICAgcmV0dXJuIGluaXRpYWxpemVyKFxuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDAsIDQpLCAvLyBpZCwgbmFtZSwgZnVsbE5hbWUsIGRlY2ltYWxQbGFjZXNcbiAgICAgICAgdG9rZW4uc3VibmV0SWQsIC8vIHN1Ym5ldElkXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoNCkgLy8gYXNzZXQsIGZlYXR1cmVzLCBwcmVmaXgsIHN1ZmZpeCwgbmV0d29yaywgcHJpbWFyeUtleUN1cnZlXG4gICAgICApO1xuICAgIGNhc2UgJ3BvbHl4JzpcbiAgICAgIHJldHVybiBpbml0aWFsaXplcihcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSgwLCA0KSwgLy8gaWQsIG5hbWUsIGZ1bGxOYW1lLCBkZWNpbWFsUGxhY2VzXG4gICAgICAgIHRva2VuLnRpY2tlciwgLy8gdGlja2VyXG4gICAgICAgIHRva2VuLmFzc2V0SWQsIC8vIGFzc2V0SWRcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSg0KSAvLyBhc3NldCwgZmVhdHVyZXMsIHByZWZpeCwgc3VmZml4LCBuZXR3b3JrLCBwcmltYXJ5S2V5Q3VydmVcbiAgICAgICk7XG5cbiAgICBjYXNlICd4bG0nOlxuICAgICAgcmV0dXJuIGluaXRpYWxpemVyKFxuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDAsIDUpLCAvLyBpZCwgbmFtZSwgZnVsbE5hbWUsIGRlY2ltYWxQbGFjZXMsIGFzc2V0XG4gICAgICAgIHRva2VuLmRvbWFpbiwgLy8gZG9tYWluXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoNSkgLy8gZmVhdHVyZXMsIHByZWZpeCwgc3VmZml4LCBuZXR3b3JrLCBwcmltYXJ5S2V5Q3VydmVcbiAgICAgICk7XG5cbiAgICBjYXNlICd4cnAnOlxuICAgICAgcmV0dXJuIGluaXRpYWxpemVyKFxuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDAsIDQpLCAvLyBpZCwgbmFtZSwgZnVsbE5hbWUsIGRlY2ltYWxQbGFjZXNcbiAgICAgICAgdG9rZW4uaXNzdWVyQWRkcmVzcywgLy8gaXNzdWVyQWRkcmVzc1xuICAgICAgICB0b2tlbi5jdXJyZWNueWNvZGUsIC8vIGN1cnJlbmN5Q29kZVxuICAgICAgICB0b2tlbi5jb250cmFjdEFkZHJlc3MsIC8vIGNvbnRyYWN0QWRkcmVzc1xuICAgICAgICB0b2tlbi5kb21haW4sIC8vIGRvbWFpblxuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDQpIC8vIGFzc2V0LCBmZWF0dXJlcywgcHJlZml4LCBzdWZmaXgsIG5ldHdvcmssIHByaW1hcnlLZXlDdXJ2ZVxuICAgICAgKTtcbiAgICBjYXNlICdvZmMnOlxuICAgICAgcmV0dXJuIGluaXRpYWxpemVyKFxuICAgICAgICAuLi5jb21tb25BcmdzLCAvLyBpZCwgbmFtZSwgZnVsbE5hbWUsIGRlY2ltYWxQbGFjZXMsIGFzc2V0LCBwcmVmaXgsIHN1ZmZpeCwgbmV0d29yaywgcHJpbWFyeUtleUN1cnZlXG4gICAgICAgIHRva2VuLmJhc2VVbml0LCAvLyBiYXNlVW5pdFxuICAgICAgICB0b2tlbi5pc1Rva2VuLCAvLyBpc1Rva2VuXG4gICAgICAgIHRva2VuLmtpbmQsIC8vIGtpbmRcbiAgICAgICAgdG9rZW4uYWRkcmVzc0NvaW4gLy8gYWRkcmVzc0NvaW5cbiAgICAgICk7XG4gICAgY2FzZSAnYXNpJzpcbiAgICBjYXNlICdhdG9tJzpcbiAgICBjYXNlICdiYWJ5JzpcbiAgICBjYXNlICdibGQnOlxuICAgIGNhc2UgJ2NvcmV1bSc6XG4gICAgY2FzZSAnY3Jvbm9zJzpcbiAgICBjYXNlICdoYXNoJzpcbiAgICBjYXNlICdpbmplY3RpdmUnOlxuICAgIGNhc2UgJ2luaXRpYSc6XG4gICAgY2FzZSAnb3Ntbyc6XG4gICAgY2FzZSAndGhvcic6XG4gICAgY2FzZSAnc2VpJzpcbiAgICBjYXNlICd0aWEnOlxuICAgIGNhc2UgJ3pldGEnOlxuICAgICAgcmV0dXJuIGluaXRpYWxpemVyKFxuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDAsIDMpLCAvLyBpZCwgbmFtZSwgZnVsbE5hbWVcbiAgICAgICAgdG9rZW4uZGVub20sIC8vIGRlbm9tXG4gICAgICAgIHRva2VuLmRlY2ltYWxQbGFjZXMsIC8vIGRlY2ltYWxQbGFjZXNcbiAgICAgICAgdG9rZW4ubmV0d29yaywgLy8gbmV0d29ya1xuICAgICAgICB0b2tlbi5iYXNlVW5pdCwgLy8gYmFzZVVuaXRcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSg0LCA4KSwgLy8gYXNzZXQsIGZlYXR1cmVzLCBwcmVmaXgsIHN1ZmZpeFxuICAgICAgICB0b2tlbi5wcmltYXJ5S2V5Q3VydmUgLy8gcHJpbWFyeUtleUN1cnZlXG4gICAgICApO1xuICAgIGNhc2UgJ2FkYSc6XG4gICAgICByZXR1cm4gaW5pdGlhbGl6ZXIoXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoMCwgNCksIC8vIGlkLCBuYW1lLCBmdWxsTmFtZSwgZGVjaW1hbFBsYWNlc1xuICAgICAgICB0b2tlbi5hc3NldE5hbWUsXG4gICAgICAgIHRva2VuLnBvbGljeUlkLFxuICAgICAgICB0b2tlbi5jb250cmFjdEFkZHJlc3MsXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoNCkgLy8gYXNzZXQsIGZlYXR1cmVzLCBwcmVmaXgsIHN1ZmZpeCwgbmV0d29yaywgcHJpbWFyeUtleUN1cnZlXG4gICAgICApO1xuICAgIGNhc2UgJ3Rvbic6XG4gICAgICByZXR1cm4gaW5pdGlhbGl6ZXIoXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoMCwgNCksIC8vIGlkLCBuYW1lLCBmdWxsTmFtZSwgZGVjaW1hbFBsYWNlc1xuICAgICAgICB0b2tlbi5jb250cmFjdEFkZHJlc3MsIC8vIGNvbnRyYWN0QWRkcmVzc1xuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDQpIC8vIGFzc2V0LCBmZWF0dXJlcywgcHJlZml4LCBzdWZmaXgsIG5ldHdvcmssIHByaW1hcnlLZXlDdXJ2ZVxuICAgICAgKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIEJ1aWxkIGEgcmVhbCBEeW5hbWljQ29pbiArIER5bmFtaWNOZXR3b3JrIGluc3RhbmNlIGZvciBBTVMtZGlzY292ZXJlZCBiYXNlIGNoYWluc1xuICogd2hvc2UgZmFtaWx5IGlzIG5vdCB5ZXQgcmVnaXN0ZXJlZCBpbiB0aGUgU0RLJ3MgaW5pdGlhbGl6ZXJNYXAuXG4gKiBDYWxsZWQgZnJvbSBjcmVhdGVUb2tlbigpIGFzIGEgZmFsbGJhY2sgd2hlbiBubyBpbml0aWFsaXplciBleGlzdHMgYW5kIGlzVG9rZW4gaXMgZmFsc2UuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkRHluYW1pY0NvaW4odG9rZW46IEFtc1Rva2VuQ29uZmlnKTogUmVhZG9ubHk8QmFzZUNvaW4+IHtcbiAgY29uc3QgbmV0d29yayA9IHRva2VuLm5ldHdvcmsgaW5zdGFuY2VvZiBCYXNlTmV0d29yayA/IHRva2VuLm5ldHdvcmsgOiBnZXROZXR3b3JrKHRva2VuLm5ldHdvcmsgYXMgc3RyaW5nKTtcblxuICByZXR1cm4gT2JqZWN0LmZyZWV6ZShcbiAgICBuZXcgRHluYW1pY0NvaW4oe1xuICAgICAgaWQ6IHRva2VuLmlkLFxuICAgICAgbmFtZTogdG9rZW4ubmFtZSxcbiAgICAgIGZ1bGxOYW1lOiB0b2tlbi5mdWxsTmFtZSxcbiAgICAgIGRlY2ltYWxQbGFjZXM6IHRva2VuLmRlY2ltYWxQbGFjZXMsXG4gICAgICBhc3NldDogdG9rZW4uYXNzZXQgYXMgc3RyaW5nLFxuICAgICAgaXNUb2tlbjogdG9rZW4uaXNUb2tlbixcbiAgICAgIGZlYXR1cmVzOiAodG9rZW4uZmVhdHVyZXMgPz8gW10pIGFzIHN0cmluZ1tdLFxuICAgICAgbmV0d29yayxcbiAgICAgIHByaW1hcnlLZXlDdXJ2ZTogKHRva2VuLnByaW1hcnlLZXlDdXJ2ZSBhcyBzdHJpbmcpID8/ICdzZWNwMjU2azEnLFxuICAgICAgcHJlZml4OiB0b2tlbi5wcmVmaXggPz8gJycsXG4gICAgICBzdWZmaXg6IHRva2VuLnN1ZmZpeCA/PyB0b2tlbi5uYW1lLnRvVXBwZXJDYXNlKCksXG4gICAgICBiYXNlVW5pdDogKHRva2VuLmJhc2VVbml0IGFzIHN0cmluZykgPz8gJycsXG4gICAgICBraW5kOiAodG9rZW4ua2luZCBhcyBzdHJpbmcpID8/ICdjcnlwdG8nLFxuICAgICAgYWxpYXM6IHRva2VuLmFsaWFzLFxuICAgIH0pXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldEFwdFRva2VuSW5pdGlhbGl6ZXIodG9rZW46IEFtc1Rva2VuQ29uZmlnKSB7XG4gIGlmICh0b2tlbi5hc3NldElkKSB7XG4gICAgLy8gdXNlZCBmb3IgZnVuZ2libGUtYXNzZXRzIC8gbGVnYWN5IGNvaW5zIGV0Yy5cbiAgICByZXR1cm4ge1xuICAgICAgaW5pdEZ1bmM6IGFwdFRva2VuIGFzICguLi5hcmdzOiB1bmtub3duW10pID0+IFJlYWRvbmx5PEJhc2VDb2luPixcbiAgICAgIG9iamVjdElkOiB0b2tlbi5hc3NldElkLFxuICAgIH07XG4gIH1cbiAgLy8gdXNlZCBmb3Igbm9uLWZ1bmdpYmxlIHRva2VuIChORlQpIGNvbGxlY3Rpb25zXG4gIHJldHVybiB7XG4gICAgaW5pdEZ1bmM6IGFwdE5GVENvbGxlY3Rpb24gYXMgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gUmVhZG9ubHk8QmFzZUNvaW4+LFxuICAgIG9iamVjdElkOiB0b2tlbi5uZnRDb2xsZWN0aW9uSWQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFZldFRva2VuSW5pdGlhbGl6ZXIodG9rZW46IEFtc1Rva2VuQ29uZmlnKSB7XG4gIGlmICh0b2tlbi5uZnRDb2xsZWN0aW9uSWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmV0SW5pdEZ1bmM6IHZldE5GVENvbGxlY3Rpb24gYXMgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gUmVhZG9ubHk8QmFzZUNvaW4+LFxuICAgICAgdmV0T2JqZWN0SWQ6IHRva2VuLm5mdENvbGxlY3Rpb25JZCxcbiAgICAgIGlzTkZUOiB0cnVlLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHZldEluaXRGdW5jOiB2ZXRUb2tlbiBhcyAoLi4uYXJnczogdW5rbm93bltdKSA9PiBSZWFkb25seTxCYXNlQ29pbj4sXG4gICAgdmV0T2JqZWN0SWQ6IHRva2VuLmNvbnRyYWN0QWRkcmVzcyxcbiAgICBpc05GVDogZmFsc2UsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvaW5QcmVzZW50SW5Db2luTWFwKHsgbmFtZSwgaWQsIGFsaWFzIH06IHsgbmFtZTogc3RyaW5nOyBpZD86IHN0cmluZzsgYWxpYXM/OiBzdHJpbmcgfSk6IGJvb2xlYW4ge1xuICByZXR1cm4gQm9vbGVhbihjb2lucy5oYXMobmFtZSkgfHwgKGlkICYmIGNvaW5zLmhhcyhpZCkpIHx8IChhbGlhcyAmJiBjb2lucy5oYXMoYWxpYXMpKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUb2tlbk1hcFVzaW5nQ29uZmlnRGV0YWlscyh0b2tlbkNvbmZpZ01hcDogUmVjb3JkPHN0cmluZywgQW1zVG9rZW5Db25maWdbXT4pOiBDb2luTWFwIHtcbiAgY29uc3QgQmFzZUNvaW5zOiBNYXA8c3RyaW5nLCBSZWFkb25seTxCYXNlQ29pbj4+ID0gbmV3IE1hcCgpO1xuXG4gIGNvbnN0IG5mdEFuZE90aGVyVG9rZW5zID0gbmV3IFNldChbXG4gICAgJ2VyYzcyMTpic2N0b2tlbicsXG4gICAgJ3RlcmM3MjE6YnNjdG9rZW4nLFxuICAgICdlcmMxMTU1OmJzY3Rva2VuJyxcbiAgICAndGVyYzExNTU6YnNjdG9rZW4nLFxuICAgICdlcmM3MjE6d2l0Y2gnLFxuICAgICdlcmM3MjE6dG9rZW4nLFxuICAgICdlcmMxMTU1OnRva2VuJyxcbiAgICAnbm9uc3RhbmRhcmQ6dG9rZW4nLFxuICAgICd0ZXJjNzIxOnRva2VuJyxcbiAgICAndGVyYzExNTU6dG9rZW4nLFxuICAgICd0bm9uc3RhbmRhcmQ6dG9rZW4nLFxuICAgICd0ZXJjNzIxOmJpdGdvZXJjNzIxJyxcbiAgICAndGVyYzExNTU6Yml0Z29lcmMxMTU1JyxcbiAgICAndGVyYzcyMTpob29kaWRqJyxcbiAgICAnZXJjNzIxOnBvbHlnb250b2tlbicsXG4gICAgJ2VyYzExNTU6cG9seWdvbnRva2VuJyxcbiAgICAndGVyYzcyMTpwb2x5Z29udG9rZW4nLFxuICAgICd0ZXJjMTE1NTpwb2x5Z29udG9rZW4nLFxuICAgICdlcmM3MjE6c29uZWl1bXRva2VuJyxcbiAgICAnZXJjMTE1NTpzb25laXVtdG9rZW4nLFxuICAgICd0ZXJjNzIxOnNvbmVpdW10b2tlbicsXG4gICAgJ3RlcmMxMTU1OnNvbmVpdW10b2tlbicsXG4gIF0pO1xuXG4gIC8vIEFkZCBhbGwgdGhlIGNvaW5zIGZyb20gc3RhdGljcyBjb2luIG1hcCBmaXJzdFxuICBjb2lucy5mb3JFYWNoKChjb2luLCBjb2luTmFtZSkgPT4ge1xuICAgIEJhc2VDb2lucy5zZXQoY29pbk5hbWUsIGNvaW4pO1xuICB9KTtcblxuICAvLyBhZGQgdGhlIHRva2VucyBub3QgcHJlc2VudCBpbiB0aGUgc3RhdGljIGNvaW4gbWFwXG4gIGZvciAoY29uc3QgdG9rZW5Db25maWdzIG9mIE9iamVjdC52YWx1ZXModG9rZW5Db25maWdNYXApKSB7XG4gICAgY29uc3QgdG9rZW5Db25maWcgPSB0b2tlbkNvbmZpZ3NbMF07XG5cbiAgICBpZiAoIWlzQ29pblByZXNlbnRJbkNvaW5NYXAoeyAuLi50b2tlbkNvbmZpZyB9KSAmJiAhbmZ0QW5kT3RoZXJUb2tlbnMuaGFzKHRva2VuQ29uZmlnLm5hbWUpKSB7XG4gICAgICBjb25zdCB0b2tlbiA9IGNyZWF0ZVRva2VuKHRva2VuQ29uZmlnKTtcbiAgICAgIGlmICh0b2tlbikge1xuICAgICAgICBCYXNlQ29pbnMuc2V0KHRva2VuLm5hbWUsIHRva2VuKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gQ29pbk1hcC5mcm9tQ29pbnMoQXJyYXkuZnJvbShCYXNlQ29pbnMudmFsdWVzKCkpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRva2VuTWFwVXNpbmdUcmltbWVkQ29uZmlnRGV0YWlscyhcbiAgcmVkdWNlZFRva2VuQ29uZmlnTWFwOiBSZWNvcmQ8c3RyaW5nLCBUcmltbWVkQW1zVG9rZW5Db25maWdbXT5cbik6IENvaW5NYXAge1xuICBjb25zdCBhbXNUb2tlbkNvbmZpZ01hcDogUmVjb3JkPHN0cmluZywgQW1zVG9rZW5Db25maWdbXT4gPSB7fTtcbiAgY29uc3QgbmV0d29ya05hbWVNYXAgPSBnZXROZXR3b3Jrc01hcCgpO1xuXG4gIGZvciAoY29uc3QgdG9rZW5Db25maWdzIG9mIE9iamVjdC52YWx1ZXMocmVkdWNlZFRva2VuQ29uZmlnTWFwKSkge1xuICAgIGNvbnN0IHRva2VuQ29uZmlnID0gdG9rZW5Db25maWdzWzBdO1xuICAgIGNvbnN0IG5ldHdvcmsgPSBuZXR3b3JrTmFtZU1hcC5nZXQodG9rZW5Db25maWcubmV0d29yay5uYW1lKTtcblxuICAgIGlmIChpc0NvaW5QcmVzZW50SW5Db2luTWFwKHsgLi4udG9rZW5Db25maWcgfSkpIGNvbnRpbnVlO1xuXG4gICAgaWYgKCF0b2tlbkNvbmZpZy5pc1Rva2VuKSB7XG4gICAgICAvLyBEeW5hbWljIGJhc2UgY2hhaW4g4oCUIG5ldHdvcmsgbXVzdCBiZSBwcmUtcmVnaXN0ZXJlZCBpbiBuZXR3b3JrQnlOYW1lIG1hcCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLlxuICAgICAgaWYgKG5ldHdvcmspIHtcbiAgICAgICAgYW1zVG9rZW5Db25maWdNYXBbdG9rZW5Db25maWcubmFtZV0gPSBbXG4gICAgICAgICAgeyAuLi50b2tlbkNvbmZpZywgZmVhdHVyZXM6IHRva2VuQ29uZmlnLmFkZGl0aW9uYWxGZWF0dXJlcyA/PyBbXSwgbmV0d29yayB9LFxuICAgICAgICBdO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobmV0d29yayAmJiBuZXR3b3JrRmVhdHVyZU1hcEZvclRva2Vuc1tuZXR3b3JrLmZhbWlseV0pIHtcbiAgICAgIGNvbnN0IGZlYXR1cmVzID0gbmV3IFNldChbXG4gICAgICAgIC4uLihuZXR3b3JrRmVhdHVyZU1hcEZvclRva2Vuc1tuZXR3b3JrLmZhbWlseV0gfHwgW10pLFxuICAgICAgICAuLi4odG9rZW5Db25maWcuYWRkaXRpb25hbEZlYXR1cmVzIHx8IFtdKSxcbiAgICAgIF0pO1xuICAgICAgdG9rZW5Db25maWcuZXhjbHVkZWRGZWF0dXJlcz8uZm9yRWFjaCgoZmVhdHVyZSkgPT4gZmVhdHVyZXMuZGVsZXRlKGZlYXR1cmUpKTtcbiAgICAgIGFtc1Rva2VuQ29uZmlnTWFwW3Rva2VuQ29uZmlnLm5hbWVdID0gW3sgLi4udG9rZW5Db25maWcsIGZlYXR1cmVzOiBBcnJheS5mcm9tKGZlYXR1cmVzKSwgbmV0d29yayB9XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY3JlYXRlVG9rZW5NYXBVc2luZ0NvbmZpZ0RldGFpbHMoYW1zVG9rZW5Db25maWdNYXApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVG9rZW5Vc2luZ1RyaW1tZWRDb25maWdEZXRhaWxzKFxuICB0b2tlbkNvbmZpZzogVHJpbW1lZEFtc1Rva2VuQ29uZmlnXG4pOiBSZWFkb25seTxCYXNlQ29pbj4gfCB1bmRlZmluZWQge1xuICBsZXQgZnVsbFRva2VuQ29uZmlnOiBBbXNUb2tlbkNvbmZpZyB8IHVuZGVmaW5lZDtcbiAgY29uc3QgbmV0d29ya05hbWVNYXAgPSBnZXROZXR3b3Jrc01hcCgpO1xuICBjb25zdCBuZXR3b3JrID0gbmV0d29ya05hbWVNYXAuZ2V0KHRva2VuQ29uZmlnLm5ldHdvcmsubmFtZSk7XG5cbiAgaWYgKGlzQ29pblByZXNlbnRJbkNvaW5NYXAoeyAuLi50b2tlbkNvbmZpZyB9KSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICBpZiAoIXRva2VuQ29uZmlnLmlzVG9rZW4pIHtcbiAgICAvLyBEeW5hbWljIGJhc2UgY2hhaW4g4oCUIG5ldHdvcmsgbXVzdCBiZSBwcmUtcmVnaXN0ZXJlZCBpbiBuZXR3b3JrQnlOYW1lIG1hcCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLlxuICAgIGlmIChuZXR3b3JrKSB7XG4gICAgICByZXR1cm4gY3JlYXRlVG9rZW4oeyAuLi50b2tlbkNvbmZpZywgZmVhdHVyZXM6IHRva2VuQ29uZmlnLmFkZGl0aW9uYWxGZWF0dXJlcyA/PyBbXSwgbmV0d29yayB9IGFzIEFtc1Rva2VuQ29uZmlnKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChuZXR3b3JrICYmIG5ldHdvcmtGZWF0dXJlTWFwRm9yVG9rZW5zW25ldHdvcmsuZmFtaWx5XSkge1xuICAgIGNvbnN0IGZlYXR1cmVzID0gbmV3IFNldChbXG4gICAgICAuLi4obmV0d29ya0ZlYXR1cmVNYXBGb3JUb2tlbnNbbmV0d29yay5mYW1pbHldIHx8IFtdKSxcbiAgICAgIC4uLih0b2tlbkNvbmZpZy5hZGRpdGlvbmFsRmVhdHVyZXMgfHwgW10pLFxuICAgIF0pO1xuICAgIHRva2VuQ29uZmlnLmV4Y2x1ZGVkRmVhdHVyZXM/LmZvckVhY2goKGZlYXR1cmUpID0+IGZlYXR1cmVzLmRlbGV0ZShmZWF0dXJlKSk7XG4gICAgZnVsbFRva2VuQ29uZmlnID0geyAuLi50b2tlbkNvbmZpZywgZmVhdHVyZXM6IEFycmF5LmZyb20oZmVhdHVyZXMpLCBuZXR3b3JrIH0gYXMgQW1zVG9rZW5Db25maWc7XG4gICAgcmV0dXJuIGNyZWF0ZVRva2VuKGZ1bGxUb2tlbkNvbmZpZyk7XG4gIH1cbn1cbiJdfQ==
443
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29pbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29pbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBMkVBLGtDQTZSQztBQTZERCx3REFFQztBQUVELDRFQThDQztBQVlELDBEQWlCQztBQUVELDBGQThCQztBQUVELG9GQTBCQztBQWhqQkQsdUNBOEJtQjtBQUNuQiwrQkFBaUM7QUFDakMsaUNBQTREO0FBRTVELCtCQUFnQztBQUNoQyx5Q0FBa0Y7QUFDbEYsNkVBQTBFO0FBQzFFLHlEQUFzRTtBQUN0RSwrQ0FBNEM7QUFDNUMsMkRBQXdEO0FBQ3hELHVEQUFvRDtBQUV2QyxRQUFBLEtBQUssR0FBRyxhQUFPLENBQUMsU0FBUyxDQUFDO0lBQ3JDLEdBQUcscUNBQWlCO0lBQ3BCLEdBQUcsNkJBQWE7SUFDaEIsR0FBRyw4QkFBYztJQUNqQixHQUFHLG1CQUFRO0lBQ1gsR0FBRywyQkFBWTtDQUNoQixDQUFDLENBQUM7QUFFSCxpRkFBaUY7QUFDakYsZ0RBQWdEO0FBQ2hELE1BQU0sbUJBQW1CLEdBQTJCLEVBQUUsQ0FBQztBQUV2RCxxQ0FBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtJQUNqQyxJQUNFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGtCQUFXLENBQUMsY0FBYyxDQUFDO1FBQ2xELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLHNCQUFXLENBQUMsT0FBTztRQUN6QyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQ2IsQ0FBQztRQUNELG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQy9DLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVILE1BQU0sb0JBQW9CLEdBQTJCLEVBQUUsQ0FBQztBQUN4RCxxQ0FBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtJQUNqQyxJQUNFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGtCQUFXLENBQUMsZUFBZSxDQUFDO1FBQ25ELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLHNCQUFXLENBQUMsT0FBTztRQUN6QyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQ2IsQ0FBQztRQUNELG9CQUFvQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ2hELENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVILFNBQWdCLFdBQVcsQ0FBQyxLQUFxQjtJQUMvQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQztZQUNILE9BQU8sZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsSUFBSSxDQUFDLG9DQUFvQyxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNyRixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUNELE1BQU0sY0FBYyxHQUE0QjtRQUM5QyxJQUFJLEVBQUUsbUJBQVM7UUFDZixHQUFHLEVBQUUsa0JBQVE7UUFDYixNQUFNLEVBQUUscUJBQVc7UUFDbkIsS0FBSyxFQUFFLG1CQUFTO1FBQ2hCLE9BQU8sRUFBRSxvQkFBVTtRQUNuQixJQUFJLEVBQUUsbUJBQVM7UUFDZixJQUFJLEVBQUUsb0JBQVU7UUFDaEIsUUFBUSxFQUFFLG9CQUFVO1FBQ3BCLE1BQU0sRUFBRSxvQkFBVTtRQUNsQixHQUFHLEVBQUUsb0JBQVU7UUFDZixHQUFHLEVBQUUsb0JBQVU7UUFDZixHQUFHLEVBQUUsa0JBQVE7UUFDYixJQUFJLEVBQUUsbUJBQVM7UUFDZixNQUFNLEVBQUUscUJBQVc7UUFDbkIsR0FBRyxFQUFFLGVBQUs7UUFDVixHQUFHLEVBQUUsa0JBQVE7UUFDYixJQUFJLEVBQUUscUJBQVc7UUFDakIsSUFBSSxFQUFFLHFCQUFXO1FBQ2pCLEtBQUssRUFBRSxvQkFBVTtRQUNqQixPQUFPLEVBQUUsc0JBQVk7UUFDckIsR0FBRyxFQUFFLGtCQUFRO1FBQ2IsR0FBRyxFQUFFLG9CQUFVO1FBQ2YsR0FBRyxFQUFFLGtCQUFRO1FBQ2IsR0FBRyxFQUFFLGtCQUFRO1FBQ2IsS0FBSyxFQUFFLG9CQUFVO1FBQ2pCLEdBQUcsRUFBRSxtQkFBUztRQUNkLEdBQUcsRUFBRSxrQkFBUTtRQUNiLEdBQUcsRUFBRSxzQkFBWTtRQUNqQixHQUFHLEVBQUUsa0JBQVE7UUFDYixHQUFHLEVBQUUsY0FBUTtRQUNiLEdBQUcsRUFBRSxrQkFBUTtRQUNiLEdBQUcsRUFBRSxxQkFBVztLQUNqQixDQUFDO0lBRUYsc0ZBQXNGO0lBQ3RGLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUMvQyxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsb0JBQVUsQ0FBQztJQUNuQyxDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUNoRCxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcscUJBQVcsQ0FBQztJQUNwQyxDQUFDLENBQUMsQ0FBQztJQUVILHNEQUFzRDtJQUN0RCxJQUFJLHNCQUFzQixDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDekMsSUFBSSxhQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzFCLE9BQU8sYUFBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsQ0FBQztRQUNELElBQUksYUFBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUN4QixPQUFPLGFBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdCLENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksYUFBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMxQyxPQUFPLGFBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLENBQUM7SUFDSCxDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUM1QixNQUFNLFdBQVcsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUErQyxDQUFDO0lBQ3pGLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQUc7UUFDakIsS0FBSyxDQUFDLEVBQUU7UUFDUixLQUFLLENBQUMsSUFBSTtRQUNWLEtBQUssQ0FBQyxRQUFRO1FBQ2QsS0FBSyxDQUFDLGFBQWE7UUFDbkIsS0FBSyxDQUFDLEtBQUs7UUFDWCxLQUFLLENBQUMsUUFBUTtRQUNkLEtBQUssQ0FBQyxNQUFNO1FBQ1osS0FBSyxDQUFDLE1BQU07UUFDWixLQUFLLENBQUMsT0FBTztRQUNiLEtBQUssQ0FBQyxlQUFlO0tBQ3RCLENBQUM7SUFFRixRQUFRLE1BQU0sRUFBRSxDQUFDO1FBQ2YsS0FBSyxtQkFBbUIsQ0FBQyxNQUFNLENBQUM7WUFDOUIsT0FBTyxXQUFXLENBQ2hCLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsb0NBQW9DO1lBQy9ELEtBQUssQ0FBQyxlQUFlLElBQUksS0FBSyxDQUFDLFlBQVksRUFBRSxrQkFBa0I7WUFDL0QsS0FBSyxDQUFDLEtBQUssRUFDWCxLQUFLLENBQUMsT0FBTyxFQUNiLEtBQUssQ0FBQyxRQUFRLEVBQ2QsS0FBSyxDQUFDLE1BQU0sRUFDWixLQUFLLENBQUMsTUFBTSxFQUNaLEtBQUssQ0FBQyxlQUFlLENBQ3RCLENBQUM7UUFDSixLQUFLLG9CQUFvQixDQUFDLE1BQU0sQ0FBQztZQUMvQixPQUFPLFdBQVcsQ0FDaEIsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxxQkFBcUI7WUFDaEQsS0FBSyxDQUFDLGVBQWUsRUFBRSxrQkFBa0I7WUFDekMsS0FBSyxDQUFDLE9BQU8sRUFDYixLQUFLLENBQUMsUUFBUSxFQUNkLEtBQUssQ0FBQyxNQUFNLEVBQ1osS0FBSyxDQUFDLE1BQU0sRUFDWixLQUFLLENBQUMsZUFBZSxDQUN0QixDQUFDO1FBQ0osS0FBSyxRQUFRLENBQUM7UUFDZCxLQUFLLE9BQU8sQ0FBQztRQUNiLEtBQUssU0FBUyxDQUFDO1FBQ2YsS0FBSyxNQUFNLENBQUM7UUFDWixLQUFLLEtBQUssQ0FBQztRQUNYLEtBQUssTUFBTSxDQUFDO1FBQ1osS0FBSyxVQUFVLENBQUM7UUFDaEIsS0FBSyxRQUFRLENBQUM7UUFDZCxLQUFLLEtBQUssQ0FBQztRQUNYLEtBQUssS0FBSyxDQUFDO1FBQ1gsS0FBSyxNQUFNLENBQUM7UUFDWixLQUFLLEtBQUssQ0FBQztRQUNYLEtBQUssT0FBTyxDQUFDO1FBQ2IsS0FBSyxTQUFTLENBQUM7UUFDZixLQUFLLEtBQUs7WUFDUixPQUFPLFdBQVcsQ0FDaEIsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxvQ0FBb0M7WUFDL0QsS0FBSyxDQUFDLGVBQWUsSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFLGtCQUFrQjtZQUMvRCxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsNERBQTREO2FBQ3BGLENBQUM7UUFFSixLQUFLLEtBQUs7WUFDUixNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxHQUFHLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdELE9BQU8sUUFBUSxDQUNiLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsb0NBQW9DO1lBQy9ELFFBQVEsRUFDUixHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsNERBQTREO2FBQ3BGLENBQUM7UUFFSixLQUFLLEtBQUs7WUFDUixNQUFNLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsR0FBRyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxRSxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLE9BQU8sV0FBVyxDQUNoQixHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLHFCQUFxQjtnQkFDaEQsV0FBVyxFQUNYLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyw0REFBNEQ7aUJBQ3BGLENBQUM7WUFDSixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxXQUFXLENBQ2hCLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsb0NBQW9DO2dCQUMvRCxXQUFXLEVBQ1gsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLDREQUE0RDtpQkFDcEYsQ0FBQztZQUNKLENBQUM7UUFFSCxLQUFLLEtBQUs7WUFDUixPQUFPLFdBQVcsQ0FDaEIsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxvQ0FBb0M7WUFDL0QsS0FBSyxDQUFDLE9BQU8sRUFBRSxVQUFVO1lBQ3pCLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyw0REFBNEQ7YUFDcEYsQ0FBQztRQUVKLEtBQUssTUFBTTtZQUNULE9BQU8sV0FBVyxDQUNoQixHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVc7WUFDdEMsS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRO1lBQ3JCLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQywrRUFBK0U7YUFDdkcsQ0FBQztRQUVKLEtBQUssS0FBSztZQUNSLE9BQU8sV0FBVyxDQUNoQixHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLG9DQUFvQztZQUMvRCxLQUFLLENBQUMsWUFBWSxFQUFFLGVBQWU7WUFDbkMsS0FBSyxDQUFDLGVBQWUsRUFBRSxrQkFBa0I7WUFDekMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxrQ0FBa0M7WUFDN0QsS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTO1lBQ3ZCLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQywyQkFBMkI7YUFDbkQsQ0FBQztRQUVKLEtBQUssTUFBTTtZQUNULE9BQU8sV0FBVyxDQUNoQixHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLHFCQUFxQjtZQUNoRCxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVU7WUFDekIsS0FBSyxDQUFDLGFBQWEsRUFDbkIsS0FBSyxDQUFDLEtBQUssRUFDWCxLQUFLLENBQUMsZUFBZSxFQUFFLGtCQUFrQjtZQUN6QyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLDJCQUEyQjtZQUN0RCxLQUFLLENBQUMsZUFBZSxDQUN0QixDQUFDO1FBRUosS0FBSyxLQUFLO1lBQ1IsT0FBTyxXQUFXLENBQ2hCLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsb0NBQW9DO1lBQy9ELEtBQUssQ0FBQyxZQUFZLEVBQUUsZUFBZTtZQUNuQyxLQUFLLENBQUMsZUFBZSxFQUFFLGtCQUFrQjtZQUN6QyxLQUFLLENBQUMsS0FBSyxFQUNYLEtBQUssQ0FBQyxRQUFRLEVBQ2QsS0FBSyxDQUFDLFNBQVMsRUFDZixHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsMkNBQTJDO2FBQ25FLENBQUM7UUFFSixLQUFLLEtBQUs7WUFDUixPQUFPLFdBQVcsQ0FDaEIsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxvQ0FBb0M7WUFDL0QsS0FBSyxDQUFDLFNBQVMsRUFBRSxZQUFZO1lBQzdCLEtBQUssQ0FBQyxNQUFNLEVBQUUsU0FBUztZQUN2QixLQUFLLENBQUMsTUFBTSxFQUFFLFNBQVM7WUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxrQkFBa0I7WUFDekMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLDREQUE0RDthQUNwRixDQUFDO1FBRUosS0FBSyxLQUFLO1lBQ1IsT0FBTyxXQUFXLENBQ2hCLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsb0NBQW9DO1lBQy9ELEtBQUssQ0FBQyxRQUFRLEVBQUUsV0FBVztZQUMzQixHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsNERBQTREO2FBQ3BGLENBQUM7UUFDSixLQUFLLE9BQU87WUFDVixPQUFPLFdBQVcsQ0FDaEIsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxvQ0FBb0M7WUFDL0QsS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTO1lBQ3ZCLEtBQUssQ0FBQyxPQUFPLEVBQUUsVUFBVTtZQUN6QixHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsNERBQTREO2FBQ3BGLENBQUM7UUFFSixLQUFLLEtBQUs7WUFDUixPQUFPLFdBQVcsQ0FDaEIsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSwyQ0FBMkM7WUFDdEUsS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTO1lBQ3ZCLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxxREFBcUQ7YUFDN0UsQ0FBQztRQUVKLEtBQUssS0FBSztZQUNSLE9BQU8sV0FBVyxDQUNoQixHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLG9DQUFvQztZQUMvRCxLQUFLLENBQUMsYUFBYSxFQUFFLGdCQUFnQjtZQUNyQyxLQUFLLENBQUMsWUFBWSxFQUFFLGVBQWU7WUFDbkMsS0FBSyxDQUFDLGVBQWUsRUFBRSxrQkFBa0I7WUFDekMsS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTO1lBQ3ZCLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyw0REFBNEQ7YUFDcEYsQ0FBQztRQUNKLEtBQUssS0FBSztZQUNSLE9BQU8sV0FBVyxDQUNoQixHQUFHLFVBQVUsRUFBRSxxRkFBcUY7WUFDcEcsS0FBSyxDQUFDLFFBQVEsRUFBRSxXQUFXO1lBQzNCLEtBQUssQ0FBQyxPQUFPLEVBQUUsVUFBVTtZQUN6QixLQUFLLENBQUMsSUFBSSxFQUFFLE9BQU87WUFDbkIsS0FBSyxDQUFDLFdBQVcsQ0FBQyxjQUFjO2FBQ2pDLENBQUM7UUFDSixLQUFLLEtBQUssQ0FBQztRQUNYLEtBQUssTUFBTSxDQUFDO1FBQ1osS0FBSyxNQUFNLENBQUM7UUFDWixLQUFLLEtBQUssQ0FBQztRQUNYLEtBQUssUUFBUSxDQUFDO1FBQ2QsS0FBSyxRQUFRLENBQUM7UUFDZCxLQUFLLE1BQU0sQ0FBQztRQUNaLEtBQUssV0FBVyxDQUFDO1FBQ2pCLEtBQUssUUFBUSxDQUFDO1FBQ2QsS0FBSyxNQUFNLENBQUM7UUFDWixLQUFLLE1BQU0sQ0FBQztRQUNaLEtBQUssS0FBSyxDQUFDO1FBQ1gsS0FBSyxLQUFLLENBQUM7UUFDWCxLQUFLLE1BQU07WUFDVCxPQUFPLFdBQVcsQ0FDaEIsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxxQkFBcUI7WUFDaEQsS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRO1lBQ3JCLEtBQUssQ0FBQyxhQUFhLEVBQUUsZ0JBQWdCO1lBQ3JDLEtBQUssQ0FBQyxPQUFPLEVBQUUsVUFBVTtZQUN6QixLQUFLLENBQUMsUUFBUSxFQUFFLFdBQVc7WUFDM0IsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxrQ0FBa0M7WUFDN0QsS0FBSyxDQUFDLGVBQWUsQ0FBQyxrQkFBa0I7YUFDekMsQ0FBQztRQUNKLEtBQUssS0FBSztZQUNSLE9BQU8sV0FBVyxDQUNoQixHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLG9DQUFvQztZQUMvRCxLQUFLLENBQUMsU0FBUyxFQUNmLEtBQUssQ0FBQyxRQUFRLEVBQ2QsS0FBSyxDQUFDLGVBQWUsRUFDckIsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLDREQUE0RDthQUNwRixDQUFDO1FBQ0osS0FBSyxLQUFLO1lBQ1IsT0FBTyxXQUFXLENBQ2hCLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsb0NBQW9DO1lBQy9ELEtBQUssQ0FBQyxlQUFlLEVBQUUsa0JBQWtCO1lBQ3pDLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyw0REFBNEQ7YUFDcEYsQ0FBQztRQUNKO1lBQ0UsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxLQUFxQjtJQUM3QyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxZQUFZLHNCQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUEscUJBQVUsRUFBQyxLQUFLLENBQUMsT0FBaUIsQ0FBQyxDQUFDO0lBRTNHLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FDbEIsSUFBSSxrQkFBVyxDQUFDO1FBQ2QsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFO1FBQ1osSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1FBQ2hCLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtRQUN4QixhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWE7UUFDbEMsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFlO1FBQzVCLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztRQUN0QixRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBYTtRQUM1QyxPQUFPO1FBQ1AsZUFBZSxFQUFHLEtBQUssQ0FBQyxlQUEwQixJQUFJLFdBQVc7UUFDakUsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLElBQUksRUFBRTtRQUMxQixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtRQUNoRCxRQUFRLEVBQUcsS0FBSyxDQUFDLFFBQW1CLElBQUksRUFBRTtRQUMxQyxJQUFJLEVBQUcsS0FBSyxDQUFDLElBQWUsSUFBSSxRQUFRO1FBQ3hDLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztLQUNuQixDQUFDLENBQ0gsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLHNCQUFzQixDQUFDLEtBQXFCO0lBQ25ELElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xCLCtDQUErQztRQUMvQyxPQUFPO1lBQ0wsUUFBUSxFQUFFLGtCQUFzRDtZQUNoRSxRQUFRLEVBQUUsS0FBSyxDQUFDLE9BQU87U0FDeEIsQ0FBQztJQUNKLENBQUM7SUFDRCxnREFBZ0Q7SUFDaEQsT0FBTztRQUNMLFFBQVEsRUFBRSwwQkFBOEQ7UUFDeEUsUUFBUSxFQUFFLEtBQUssQ0FBQyxlQUFlO0tBQ2hDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxzQkFBc0IsQ0FBQyxLQUFxQjtJQUNuRCxJQUFJLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUMxQixPQUFPO1lBQ0wsV0FBVyxFQUFFLDBCQUE4RDtZQUMzRSxXQUFXLEVBQUUsS0FBSyxDQUFDLGVBQWU7WUFDbEMsS0FBSyxFQUFFLElBQUk7U0FDWixDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU87UUFDTCxXQUFXLEVBQUUsa0JBQXNEO1FBQ25FLFdBQVcsRUFBRSxLQUFLLENBQUMsZUFBZTtRQUNsQyxLQUFLLEVBQUUsS0FBSztLQUNiLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBZ0Isc0JBQXNCLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBaUQ7SUFDdkcsT0FBTyxPQUFPLENBQUMsYUFBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxhQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksYUFBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUYsQ0FBQztBQUVELFNBQWdCLGdDQUFnQyxDQUFDLGNBQWdEO0lBQy9GLE1BQU0sU0FBUyxHQUFvQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRTdELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxHQUFHLENBQUM7UUFDaEMsaUJBQWlCO1FBQ2pCLGtCQUFrQjtRQUNsQixrQkFBa0I7UUFDbEIsbUJBQW1CO1FBQ25CLGNBQWM7UUFDZCxjQUFjO1FBQ2QsZUFBZTtRQUNmLG1CQUFtQjtRQUNuQixlQUFlO1FBQ2YsZ0JBQWdCO1FBQ2hCLG9CQUFvQjtRQUNwQixxQkFBcUI7UUFDckIsdUJBQXVCO1FBQ3ZCLGlCQUFpQjtRQUNqQixxQkFBcUI7UUFDckIsc0JBQXNCO1FBQ3RCLHNCQUFzQjtRQUN0Qix1QkFBdUI7UUFDdkIscUJBQXFCO1FBQ3JCLHNCQUFzQjtRQUN0QixzQkFBc0I7UUFDdEIsdUJBQXVCO0tBQ3hCLENBQUMsQ0FBQztJQUVILGdEQUFnRDtJQUNoRCxhQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFO1FBQy9CLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUMsQ0FBQyxDQUFDO0lBRUgsb0RBQW9EO0lBQ3BELEtBQUssTUFBTSxZQUFZLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1FBQ3pELE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVwQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsRUFBRSxHQUFHLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDNUYsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ1YsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ25DLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sYUFBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0QsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQWdCLHVCQUF1QixDQUNyQyxZQUFxRCxFQUNyRCxXQUFnQztJQUVoQyxNQUFNLHFCQUFxQixHQUFHLElBQUksR0FBRyxDQUNuQyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBc0IsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FDdEYsQ0FBQztJQUNGLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FDdkIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDakQsR0FBRztRQUNILEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNqQixJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLGtCQUFrQixLQUFLLFNBQVM7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDdkUsTUFBTSxRQUFRLEdBQUcscUJBQXFCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUQsT0FBTyxRQUFRLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDbkYsQ0FBQyxDQUFDO0tBQ0gsQ0FBQyxDQUNILENBQUM7QUFDSixDQUFDO0FBRUQsU0FBZ0IsdUNBQXVDLENBQ3JELHFCQUE4RDtJQUU5RCxNQUFNLGlCQUFpQixHQUFxQyxFQUFFLENBQUM7SUFDL0QsTUFBTSxjQUFjLEdBQUcsSUFBQSx5QkFBYyxHQUFFLENBQUM7SUFFeEMsS0FBSyxNQUFNLFlBQVksSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQztRQUNoRSxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEMsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTdELElBQUksc0JBQXNCLENBQUMsRUFBRSxHQUFHLFdBQVcsRUFBRSxDQUFDO1lBQUUsU0FBUztRQUV6RCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3pCLHlHQUF5RztZQUN6RyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNaLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRztvQkFDcEMsRUFBRSxHQUFHLFdBQVcsRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLGtCQUFrQixJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUU7aUJBQzVFLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQUksT0FBTyxJQUFJLHVEQUEwQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2pFLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxDQUFDO2dCQUN2QixHQUFHLENBQUMsdURBQTBCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDckQsR0FBRyxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsSUFBSSxFQUFFLENBQUM7YUFDMUMsQ0FBQyxDQUFDO1lBQ0gsV0FBVyxDQUFDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQzdFLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxXQUFXLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN0RyxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sZ0NBQWdDLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUM3RCxDQUFDO0FBRUQsU0FBZ0Isb0NBQW9DLENBQ2xELFdBQWtDO0lBRWxDLElBQUksZUFBMkMsQ0FBQztJQUNoRCxNQUFNLGNBQWMsR0FBRyxJQUFBLHlCQUFjLEdBQUUsQ0FBQztJQUN4QyxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFN0QsSUFBSSxzQkFBc0IsQ0FBQyxFQUFFLEdBQUcsV0FBVyxFQUFFLENBQUM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUVqRSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3pCLHlHQUF5RztRQUN6RyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osT0FBTyxXQUFXLENBQUMsRUFBRSxHQUFHLFdBQVcsRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLGtCQUFrQixJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQW9CLENBQUMsQ0FBQztRQUNwSCxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELElBQUksT0FBTyxJQUFJLHVEQUEwQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQzFELE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxDQUFDO1lBQ3ZCLEdBQUcsQ0FBQyx1REFBMEIsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3JELEdBQUcsQ0FBQyxXQUFXLENBQUMsa0JBQWtCLElBQUksRUFBRSxDQUFDO1NBQzFDLENBQUMsQ0FBQztRQUNILFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUM3RSxlQUFlLEdBQUcsRUFBRSxHQUFHLFdBQVcsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxPQUFPLEVBQW9CLENBQUM7UUFDaEcsT0FBTyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDdEMsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBhbGdvVG9rZW4sXG4gIGFwdE5GVENvbGxlY3Rpb24sXG4gIGFwdFRva2VuLFxuICBhcmJldGhFcmMyMCxcbiAgYXZheEVyYzIwLFxuICBiZXJhRXJjMjAsXG4gIGJzY1Rva2VuLFxuICBjZWxvVG9rZW4sXG4gIGNvc21vc1Rva2VuLFxuICBlb3NUb2tlbixcbiAgZXJjMjAsXG4gIGhlZGVyYVRva2VuLFxuICBqZXR0b25Ub2tlbixcbiAgbmVwMTQxVG9rZW4sXG4gIG9wZXRoRXJjMjAsXG4gIHBvbHlnb25FcmMyMCxcbiAgcG9seXhUb2tlbixcbiAgc2lwMTBUb2tlbixcbiAgc29sVG9rZW4sXG4gIHN0ZWxsYXJUb2tlbixcbiAgc3VpVG9rZW4sXG4gIHRhb1Rva2VuLFxuICB0cm9uVG9rZW4sXG4gIHZldE5GVENvbGxlY3Rpb24sXG4gIHZldFRva2VuLFxuICB4cnBUb2tlbixcbiAgYWRhVG9rZW4sXG4gIGVyYzIwVG9rZW4sXG4gIGVyYzcyMVRva2VuLFxufSBmcm9tICcuL2FjY291bnQnO1xuaW1wb3J0IHsgb2ZjVG9rZW4gfSBmcm9tICcuL29mYyc7XG5pbXBvcnQgeyBCYXNlQ29pbiwgQ29pbkZlYXR1cmUsIER5bmFtaWNDb2luIH0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7IEFtc05ldHdvcmtDb25maWdNYXAsIEFtc1Rva2VuQ29uZmlnLCBUcmltbWVkQW1zVG9rZW5Db25maWcgfSBmcm9tICcuL3Rva2VuQ29uZmlnJztcbmltcG9ydCB7IENvaW5NYXAgfSBmcm9tICcuL21hcCc7XG5pbXBvcnQgeyBCYXNlTmV0d29yaywgZ2V0TmV0d29yaywgZ2V0TmV0d29ya3NNYXAsIE5ldHdvcmtUeXBlIH0gZnJvbSAnLi9uZXR3b3Jrcyc7XG5pbXBvcnQgeyBuZXR3b3JrRmVhdHVyZU1hcEZvclRva2VucyB9IGZyb20gJy4vbmV0d29ya0ZlYXR1cmVNYXBGb3JUb2tlbnMnO1xuaW1wb3J0IHsgb2ZjRXJjMjBDb2lucywgdE9mY0VyYzIwQ29pbnMgfSBmcm9tICcuL2NvaW5zL29mY0VyYzIwQ29pbnMnO1xuaW1wb3J0IHsgb2ZjQ29pbnMgfSBmcm9tICcuL2NvaW5zL29mY0NvaW5zJztcbmltcG9ydCB7IGFsbENvaW5zQW5kVG9rZW5zIH0gZnJvbSAnLi9hbGxDb2luc0FuZFRva2Vucyc7XG5pbXBvcnQgeyBib3RPZmNUb2tlbnMgfSBmcm9tICcuL2NvaW5zL2JvdE9mY1Rva2Vucyc7XG5cbmV4cG9ydCBjb25zdCBjb2lucyA9IENvaW5NYXAuZnJvbUNvaW5zKFtcbiAgLi4uYWxsQ29pbnNBbmRUb2tlbnMsXG4gIC4uLm9mY0VyYzIwQ29pbnMsXG4gIC4uLnRPZmNFcmMyMENvaW5zLFxuICAuLi5vZmNDb2lucyxcbiAgLi4uYm90T2ZjVG9rZW5zLFxuXSk7XG5cbi8vIEJ1aWxkIGEgbWFwIG9mIEVSQzIwLXN1cHBvcnRpbmcgY2hhaW4gZmFtaWx5IG5hbWVzIHRvIHRoZWlyIG1haW5uZXQgY29pbiBuYW1lc1xuLy8gTWFwcyBmYW1pbHkgLT4gY29pbiBuYW1lIChlLmcuLCAnaXAnIC0+ICdpcCcpXG5jb25zdCBlcmMyMENoYWluVG9OYW1lTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbmFsbENvaW5zQW5kVG9rZW5zLmZvckVhY2goKGNvaW4pID0+IHtcbiAgaWYgKFxuICAgIGNvaW4uZmVhdHVyZXMuaW5jbHVkZXMoQ29pbkZlYXR1cmUuU1VQUE9SVFNfRVJDMjApICYmXG4gICAgY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgJiZcbiAgICAhY29pbi5pc1Rva2VuXG4gICkge1xuICAgIGVyYzIwQ2hhaW5Ub05hbWVNYXBbY29pbi5mYW1pbHldID0gY29pbi5uYW1lO1xuICB9XG59KTtcblxuY29uc3QgZXJjNzIxQ2hhaW5Ub05hbWVNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbmFsbENvaW5zQW5kVG9rZW5zLmZvckVhY2goKGNvaW4pID0+IHtcbiAgaWYgKFxuICAgIGNvaW4uZmVhdHVyZXMuaW5jbHVkZXMoQ29pbkZlYXR1cmUuU1VQUE9SVFNfRVJDNzIxKSAmJlxuICAgIGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUICYmXG4gICAgIWNvaW4uaXNUb2tlblxuICApIHtcbiAgICBlcmM3MjFDaGFpblRvTmFtZU1hcFtjb2luLmZhbWlseV0gPSBjb2luLm5hbWU7XG4gIH1cbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVG9rZW4odG9rZW46IEFtc1Rva2VuQ29uZmlnKTogUmVhZG9ubHk8QmFzZUNvaW4+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKCF0b2tlbi5pc1Rva2VuKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBidWlsZER5bmFtaWNDb2luKHRva2VuKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS53YXJuKGBGYWlsZWQgdG8gYnVpbGQgZHluYW1pYyBjb2luIGZvciAke3Rva2VuLm5hbWV9ICgke3Rva2VuLmlkfSk6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgY29uc3QgaW5pdGlhbGl6ZXJNYXA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgIGFsZ286IGFsZ29Ub2tlbixcbiAgICBhcHQ6IGFwdFRva2VuLFxuICAgIGFyYmV0aDogYXJiZXRoRXJjMjAsXG4gICAgYXZheGM6IGF2YXhFcmMyMCxcbiAgICBiYXNlZXRoOiBlcmMyMFRva2VuLFxuICAgIGJlcmE6IGJlcmFFcmMyMCxcbiAgICBmbG93OiBlcmMyMFRva2VuLFxuICAgIGxpbmVhZXRoOiBlcmMyMFRva2VuLFxuICAgIHNlaWV2bTogZXJjMjBUb2tlbixcbiAgICBtb246IGVyYzIwVG9rZW4sXG4gICAgeGRjOiBlcmMyMFRva2VuLFxuICAgIGJzYzogYnNjVG9rZW4sXG4gICAgY2VsbzogY2Vsb1Rva2VuLFxuICAgIGNvc21vczogY29zbW9zVG9rZW4sXG4gICAgZXRoOiBlcmMyMCxcbiAgICBlb3M6IGVvc1Rva2VuLFxuICAgIGhiYXI6IGhlZGVyYVRva2VuLFxuICAgIG5lYXI6IG5lcDE0MVRva2VuLFxuICAgIG9wZXRoOiBvcGV0aEVyYzIwLFxuICAgIHBvbHlnb246IHBvbHlnb25FcmMyMCxcbiAgICBzb2w6IHNvbFRva2VuLFxuICAgIHN0eDogc2lwMTBUb2tlbixcbiAgICBzdWk6IHN1aVRva2VuLFxuICAgIHRhbzogdGFvVG9rZW4sXG4gICAgcG9seXg6IHBvbHl4VG9rZW4sXG4gICAgdHJ4OiB0cm9uVG9rZW4sXG4gICAgdmV0OiB2ZXRUb2tlbixcbiAgICB4bG06IHN0ZWxsYXJUb2tlbixcbiAgICB4cnA6IHhycFRva2VuLFxuICAgIG9mYzogb2ZjVG9rZW4sXG4gICAgYWRhOiBhZGFUb2tlbixcbiAgICB0b246IGpldHRvblRva2VuLFxuICB9O1xuXG4gIC8vIGR5bmFtaWNhbGx5IGFkZCBlcmMyMCB0b2tlbiBpbml0aWFsaXplcnMgZm9yIGV0aCBsaWtlIGNoYWlucyB0byB0aGUgaW5pdGlhbGl6ZXIgbWFwXG4gIE9iamVjdC5rZXlzKGVyYzIwQ2hhaW5Ub05hbWVNYXApLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGluaXRpYWxpemVyTWFwW2tleV0gPSBlcmMyMFRva2VuO1xuICB9KTtcblxuICBPYmplY3Qua2V5cyhlcmM3MjFDaGFpblRvTmFtZU1hcCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgaW5pdGlhbGl6ZXJNYXBba2V5XSA9IGVyYzcyMVRva2VuO1xuICB9KTtcblxuICAvL3JldHVybiB0aGUgQmFzZUNvaW4gZnJvbSBkZWZhdWx0IGNvaW4gbWFwIGlmIHByZXNlbnRcbiAgaWYgKGlzQ29pblByZXNlbnRJbkNvaW5NYXAoeyAuLi50b2tlbiB9KSkge1xuICAgIGlmIChjb2lucy5oYXModG9rZW4ubmFtZSkpIHtcbiAgICAgIHJldHVybiBjb2lucy5nZXQodG9rZW4ubmFtZSk7XG4gICAgfVxuICAgIGlmIChjb2lucy5oYXModG9rZW4uaWQpKSB7XG4gICAgICByZXR1cm4gY29pbnMuZ2V0KHRva2VuLmlkKTtcbiAgICB9XG4gICAgaWYgKHRva2VuLmFsaWFzICYmIGNvaW5zLmhhcyh0b2tlbi5hbGlhcykpIHtcbiAgICAgIHJldHVybiBjb2lucy5nZXQodG9rZW4uYWxpYXMpO1xuICAgIH1cbiAgfVxuICBjb25zdCBmYW1pbHkgPSB0b2tlbi5mYW1pbHk7XG4gIGNvbnN0IGluaXRpYWxpemVyID0gaW5pdGlhbGl6ZXJNYXBbZmFtaWx5XSBhcyAoLi4uYXJnczogdW5rbm93bltdKSA9PiBSZWFkb25seTxCYXNlQ29pbj47XG4gIGlmICghaW5pdGlhbGl6ZXIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgY29tbW9uQXJncyA9IFtcbiAgICB0b2tlbi5pZCxcbiAgICB0b2tlbi5uYW1lLFxuICAgIHRva2VuLmZ1bGxOYW1lLFxuICAgIHRva2VuLmRlY2ltYWxQbGFjZXMsXG4gICAgdG9rZW4uYXNzZXQsXG4gICAgdG9rZW4uZmVhdHVyZXMsXG4gICAgdG9rZW4ucHJlZml4LFxuICAgIHRva2VuLnN1ZmZpeCxcbiAgICB0b2tlbi5uZXR3b3JrLFxuICAgIHRva2VuLnByaW1hcnlLZXlDdXJ2ZSxcbiAgXTtcblxuICBzd2l0Y2ggKGZhbWlseSkge1xuICAgIGNhc2UgZXJjMjBDaGFpblRvTmFtZU1hcFtmYW1pbHldOlxuICAgICAgcmV0dXJuIGluaXRpYWxpemVyKFxuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDAsIDQpLCAvLyBpZCwgbmFtZSwgZnVsbE5hbWUsIGRlY2ltYWxQbGFjZXNcbiAgICAgICAgdG9rZW4uY29udHJhY3RBZGRyZXNzIHx8IHRva2VuLnRva2VuQWRkcmVzcywgLy8gY29udHJhY3RBZGRyZXNzXG4gICAgICAgIHRva2VuLmFzc2V0LFxuICAgICAgICB0b2tlbi5uZXR3b3JrLFxuICAgICAgICB0b2tlbi5mZWF0dXJlcyxcbiAgICAgICAgdG9rZW4ucHJlZml4LFxuICAgICAgICB0b2tlbi5zdWZmaXgsXG4gICAgICAgIHRva2VuLnByaW1hcnlLZXlDdXJ2ZVxuICAgICAgKTtcbiAgICBjYXNlIGVyYzcyMUNoYWluVG9OYW1lTWFwW2ZhbWlseV06XG4gICAgICByZXR1cm4gaW5pdGlhbGl6ZXIoXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoMCwgMyksIC8vIGlkLCBuYW1lLCBmdWxsTmFtZVxuICAgICAgICB0b2tlbi5jb250cmFjdEFkZHJlc3MsIC8vIGNvbnRyYWN0QWRkcmVzc1xuICAgICAgICB0b2tlbi5uZXR3b3JrLFxuICAgICAgICB0b2tlbi5mZWF0dXJlcyxcbiAgICAgICAgdG9rZW4ucHJlZml4LFxuICAgICAgICB0b2tlbi5zdWZmaXgsXG4gICAgICAgIHRva2VuLnByaW1hcnlLZXlDdXJ2ZVxuICAgICAgKTtcbiAgICBjYXNlICdhcmJldGgnOlxuICAgIGNhc2UgJ2F2YXhjJzpcbiAgICBjYXNlICdiYXNlZXRoJzpcbiAgICBjYXNlICdiZXJhJzpcbiAgICBjYXNlICdic2MnOlxuICAgIGNhc2UgJ2Zsb3cnOlxuICAgIGNhc2UgJ2xpbmVhZXRoJzpcbiAgICBjYXNlICdzZWlldm0nOlxuICAgIGNhc2UgJ21vbic6XG4gICAgY2FzZSAneGRjJzpcbiAgICBjYXNlICdjZWxvJzpcbiAgICBjYXNlICdldGgnOlxuICAgIGNhc2UgJ29wZXRoJzpcbiAgICBjYXNlICdwb2x5Z29uJzpcbiAgICBjYXNlICd0cngnOlxuICAgICAgcmV0dXJuIGluaXRpYWxpemVyKFxuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDAsIDQpLCAvLyBpZCwgbmFtZSwgZnVsbE5hbWUsIGRlY2ltYWxQbGFjZXNcbiAgICAgICAgdG9rZW4uY29udHJhY3RBZGRyZXNzIHx8IHRva2VuLnRva2VuQWRkcmVzcywgLy8gY29udHJhY3RBZGRyZXNzXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoNCkgLy8gYXNzZXQsIGZlYXR1cmVzLCBwcmVmaXgsIHN1ZmZpeCwgbmV0d29yaywgcHJpbWFyeUtleUN1cnZlXG4gICAgICApO1xuXG4gICAgY2FzZSAnYXB0JzpcbiAgICAgIGNvbnN0IHsgaW5pdEZ1bmMsIG9iamVjdElkIH0gPSBnZXRBcHRUb2tlbkluaXRpYWxpemVyKHRva2VuKTtcbiAgICAgIHJldHVybiBpbml0RnVuYyhcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSgwLCA0KSwgLy8gaWQsIG5hbWUsIGZ1bGxOYW1lLCBkZWNpbWFsUGxhY2VzXG4gICAgICAgIG9iamVjdElkLFxuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDQpIC8vIGFzc2V0LCBmZWF0dXJlcywgcHJlZml4LCBzdWZmaXgsIG5ldHdvcmssIHByaW1hcnlLZXlDdXJ2ZVxuICAgICAgKTtcblxuICAgIGNhc2UgJ3ZldCc6XG4gICAgICBjb25zdCB7IHZldEluaXRGdW5jLCB2ZXRPYmplY3RJZCwgaXNORlQgfSA9IGdldFZldFRva2VuSW5pdGlhbGl6ZXIodG9rZW4pO1xuICAgICAgaWYgKGlzTkZUKSB7XG4gICAgICAgIHJldHVybiB2ZXRJbml0RnVuYyhcbiAgICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDAsIDMpLCAvLyBpZCwgbmFtZSwgZnVsbE5hbWVcbiAgICAgICAgICB2ZXRPYmplY3RJZCxcbiAgICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDQpIC8vIGFzc2V0LCBmZWF0dXJlcywgcHJlZml4LCBzdWZmaXgsIG5ldHdvcmssIHByaW1hcnlLZXlDdXJ2ZVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZldEluaXRGdW5jKFxuICAgICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoMCwgNCksIC8vIGlkLCBuYW1lLCBmdWxsTmFtZSwgZGVjaW1hbFBsYWNlc1xuICAgICAgICAgIHZldE9iamVjdElkLFxuICAgICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoNCkgLy8gYXNzZXQsIGZlYXR1cmVzLCBwcmVmaXgsIHN1ZmZpeCwgbmV0d29yaywgcHJpbWFyeUtleUN1cnZlXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICBjYXNlICdzdHgnOlxuICAgICAgcmV0dXJuIGluaXRpYWxpemVyKFxuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDAsIDQpLCAvLyBpZCwgbmFtZSwgZnVsbE5hbWUsIGRlY2ltYWxQbGFjZXNcbiAgICAgICAgdG9rZW4uYXNzZXRJZCwgLy8gYXNzZXRJZFxuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDQpIC8vIGFzc2V0LCBmZWF0dXJlcywgcHJlZml4LCBzdWZmaXgsIG5ldHdvcmssIHByaW1hcnlLZXlDdXJ2ZVxuICAgICAgKTtcblxuICAgIGNhc2UgJ2FsZ28nOlxuICAgICAgcmV0dXJuIGluaXRpYWxpemVyKFxuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDAsIDIpLCAvLyBpZCwgbmFtZVxuICAgICAgICB0b2tlbi5hbGlhcywgLy8gYWxpYXNcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSgyKSAvLyBmdWxsTmFtZSwgZGVjaW1hbCwgYXNzZXQsIGZlYXR1cmVzLCBwcmVmaXgsIHN1ZmZpeCwgbmV0d29yaywgcHJpbWFyeUtleUN1cnZlXG4gICAgICApO1xuXG4gICAgY2FzZSAnZW9zJzpcbiAgICAgIHJldHVybiBpbml0aWFsaXplcihcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSgwLCA0KSwgLy8gaWQsIG5hbWUsIGZ1bGxOYW1lLCBkZWNpbWFsUGxhY2VzXG4gICAgICAgIHRva2VuLmNvbnRyYWN0TmFtZSwgLy8gY29udHJhY3ROYW1lXG4gICAgICAgIHRva2VuLmNvbnRyYWN0QWRkcmVzcywgLy8gY29udHJhY3RBZGRyZXNzXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoNCwgOCksIC8vIGFzc2V0LCBmZWF0dXJlcywgcHJlZml4LCBzdWZmaXhcbiAgICAgICAgdG9rZW4uc3ltYm9sLCAvLyBzeW1ib2xcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSg4KSAvLyBuZXR3b3JrLCBwcmltYXJ5S2V5Q3VydmVcbiAgICAgICk7XG5cbiAgICBjYXNlICdoYmFyJzpcbiAgICAgIHJldHVybiBpbml0aWFsaXplcihcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSgwLCAzKSwgLy8gaWQsIG5hbWUsIGZ1bGxOYW1lXG4gICAgICAgIHRva2VuLm5ldHdvcmssIC8vIG5ldHdvcmtcbiAgICAgICAgdG9rZW4uZGVjaW1hbFBsYWNlcyxcbiAgICAgICAgdG9rZW4uYXNzZXQsXG4gICAgICAgIHRva2VuLmNvbnRyYWN0QWRkcmVzcywgLy8gY29udHJhY3RBZGRyZXNzXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoNSwgOCksIC8vIGZlYXR1cmVzLCBwcmVmaXgsIHN1ZmZpeFxuICAgICAgICB0b2tlbi5wcmltYXJ5S2V5Q3VydmVcbiAgICAgICk7XG5cbiAgICBjYXNlICdzb2wnOlxuICAgICAgcmV0dXJuIGluaXRpYWxpemVyKFxuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDAsIDQpLCAvLyBpZCwgbmFtZSwgZnVsbE5hbWUsIGRlY2ltYWxQbGFjZXNcbiAgICAgICAgdG9rZW4udG9rZW5BZGRyZXNzLCAvLyB0b2tlbkFkZHJlc3NcbiAgICAgICAgdG9rZW4uY29udHJhY3RBZGRyZXNzLCAvLyBjb250cmFjdEFkZHJlc3NcbiAgICAgICAgdG9rZW4uYXNzZXQsXG4gICAgICAgIHRva2VuLmZlYXR1cmVzLFxuICAgICAgICB0b2tlbi5wcm9ncmFtSWQsXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoNikgLy8gcHJlZml4LCBzdWZmaXgsIG5ldHdvcmssIHByaW1hcnlLZXlDdXJ2ZVxuICAgICAgKTtcblxuICAgIGNhc2UgJ3N1aSc6XG4gICAgICByZXR1cm4gaW5pdGlhbGl6ZXIoXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoMCwgNCksIC8vIGlkLCBuYW1lLCBmdWxsTmFtZSwgZGVjaW1hbFBsYWNlc1xuICAgICAgICB0b2tlbi5wYWNrYWdlSWQsIC8vIHBhY2thZ2VJZFxuICAgICAgICB0b2tlbi5tb2R1bGUsIC8vIG1vZHVsZVxuICAgICAgICB0b2tlbi5zeW1ib2wsIC8vIHN5bWJvbFxuICAgICAgICB0b2tlbi5jb250cmFjdEFkZHJlc3MsIC8vIGNvbnRyYWN0QWRkcmVzc1xuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDQpIC8vIGFzc2V0LCBmZWF0dXJlcywgcHJlZml4LCBzdWZmaXgsIG5ldHdvcmssIHByaW1hcnlLZXlDdXJ2ZVxuICAgICAgKTtcblxuICAgIGNhc2UgJ3Rhbyc6XG4gICAgICByZXR1cm4gaW5pdGlhbGl6ZXIoXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoMCwgNCksIC8vIGlkLCBuYW1lLCBmdWxsTmFtZSwgZGVjaW1hbFBsYWNlc1xuICAgICAgICB0b2tlbi5zdWJuZXRJZCwgLy8gc3VibmV0SWRcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSg0KSAvLyBhc3NldCwgZmVhdHVyZXMsIHByZWZpeCwgc3VmZml4LCBuZXR3b3JrLCBwcmltYXJ5S2V5Q3VydmVcbiAgICAgICk7XG4gICAgY2FzZSAncG9seXgnOlxuICAgICAgcmV0dXJuIGluaXRpYWxpemVyKFxuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDAsIDQpLCAvLyBpZCwgbmFtZSwgZnVsbE5hbWUsIGRlY2ltYWxQbGFjZXNcbiAgICAgICAgdG9rZW4udGlja2VyLCAvLyB0aWNrZXJcbiAgICAgICAgdG9rZW4uYXNzZXRJZCwgLy8gYXNzZXRJZFxuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDQpIC8vIGFzc2V0LCBmZWF0dXJlcywgcHJlZml4LCBzdWZmaXgsIG5ldHdvcmssIHByaW1hcnlLZXlDdXJ2ZVxuICAgICAgKTtcblxuICAgIGNhc2UgJ3hsbSc6XG4gICAgICByZXR1cm4gaW5pdGlhbGl6ZXIoXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoMCwgNSksIC8vIGlkLCBuYW1lLCBmdWxsTmFtZSwgZGVjaW1hbFBsYWNlcywgYXNzZXRcbiAgICAgICAgdG9rZW4uZG9tYWluLCAvLyBkb21haW5cbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSg1KSAvLyBmZWF0dXJlcywgcHJlZml4LCBzdWZmaXgsIG5ldHdvcmssIHByaW1hcnlLZXlDdXJ2ZVxuICAgICAgKTtcblxuICAgIGNhc2UgJ3hycCc6XG4gICAgICByZXR1cm4gaW5pdGlhbGl6ZXIoXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoMCwgNCksIC8vIGlkLCBuYW1lLCBmdWxsTmFtZSwgZGVjaW1hbFBsYWNlc1xuICAgICAgICB0b2tlbi5pc3N1ZXJBZGRyZXNzLCAvLyBpc3N1ZXJBZGRyZXNzXG4gICAgICAgIHRva2VuLmN1cnJlY255Y29kZSwgLy8gY3VycmVuY3lDb2RlXG4gICAgICAgIHRva2VuLmNvbnRyYWN0QWRkcmVzcywgLy8gY29udHJhY3RBZGRyZXNzXG4gICAgICAgIHRva2VuLmRvbWFpbiwgLy8gZG9tYWluXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoNCkgLy8gYXNzZXQsIGZlYXR1cmVzLCBwcmVmaXgsIHN1ZmZpeCwgbmV0d29yaywgcHJpbWFyeUtleUN1cnZlXG4gICAgICApO1xuICAgIGNhc2UgJ29mYyc6XG4gICAgICByZXR1cm4gaW5pdGlhbGl6ZXIoXG4gICAgICAgIC4uLmNvbW1vbkFyZ3MsIC8vIGlkLCBuYW1lLCBmdWxsTmFtZSwgZGVjaW1hbFBsYWNlcywgYXNzZXQsIHByZWZpeCwgc3VmZml4LCBuZXR3b3JrLCBwcmltYXJ5S2V5Q3VydmVcbiAgICAgICAgdG9rZW4uYmFzZVVuaXQsIC8vIGJhc2VVbml0XG4gICAgICAgIHRva2VuLmlzVG9rZW4sIC8vIGlzVG9rZW5cbiAgICAgICAgdG9rZW4ua2luZCwgLy8ga2luZFxuICAgICAgICB0b2tlbi5hZGRyZXNzQ29pbiAvLyBhZGRyZXNzQ29pblxuICAgICAgKTtcbiAgICBjYXNlICdhc2knOlxuICAgIGNhc2UgJ2F0b20nOlxuICAgIGNhc2UgJ2JhYnknOlxuICAgIGNhc2UgJ2JsZCc6XG4gICAgY2FzZSAnY29yZXVtJzpcbiAgICBjYXNlICdjcm9ub3MnOlxuICAgIGNhc2UgJ2hhc2gnOlxuICAgIGNhc2UgJ2luamVjdGl2ZSc6XG4gICAgY2FzZSAnaW5pdGlhJzpcbiAgICBjYXNlICdvc21vJzpcbiAgICBjYXNlICd0aG9yJzpcbiAgICBjYXNlICdzZWknOlxuICAgIGNhc2UgJ3RpYSc6XG4gICAgY2FzZSAnemV0YSc6XG4gICAgICByZXR1cm4gaW5pdGlhbGl6ZXIoXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoMCwgMyksIC8vIGlkLCBuYW1lLCBmdWxsTmFtZVxuICAgICAgICB0b2tlbi5kZW5vbSwgLy8gZGVub21cbiAgICAgICAgdG9rZW4uZGVjaW1hbFBsYWNlcywgLy8gZGVjaW1hbFBsYWNlc1xuICAgICAgICB0b2tlbi5uZXR3b3JrLCAvLyBuZXR3b3JrXG4gICAgICAgIHRva2VuLmJhc2VVbml0LCAvLyBiYXNlVW5pdFxuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDQsIDgpLCAvLyBhc3NldCwgZmVhdHVyZXMsIHByZWZpeCwgc3VmZml4XG4gICAgICAgIHRva2VuLnByaW1hcnlLZXlDdXJ2ZSAvLyBwcmltYXJ5S2V5Q3VydmVcbiAgICAgICk7XG4gICAgY2FzZSAnYWRhJzpcbiAgICAgIHJldHVybiBpbml0aWFsaXplcihcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSgwLCA0KSwgLy8gaWQsIG5hbWUsIGZ1bGxOYW1lLCBkZWNpbWFsUGxhY2VzXG4gICAgICAgIHRva2VuLmFzc2V0TmFtZSxcbiAgICAgICAgdG9rZW4ucG9saWN5SWQsXG4gICAgICAgIHRva2VuLmNvbnRyYWN0QWRkcmVzcyxcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSg0KSAvLyBhc3NldCwgZmVhdHVyZXMsIHByZWZpeCwgc3VmZml4LCBuZXR3b3JrLCBwcmltYXJ5S2V5Q3VydmVcbiAgICAgICk7XG4gICAgY2FzZSAndG9uJzpcbiAgICAgIHJldHVybiBpbml0aWFsaXplcihcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSgwLCA0KSwgLy8gaWQsIG5hbWUsIGZ1bGxOYW1lLCBkZWNpbWFsUGxhY2VzXG4gICAgICAgIHRva2VuLmNvbnRyYWN0QWRkcmVzcywgLy8gY29udHJhY3RBZGRyZXNzXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoNCkgLy8gYXNzZXQsIGZlYXR1cmVzLCBwcmVmaXgsIHN1ZmZpeCwgbmV0d29yaywgcHJpbWFyeUtleUN1cnZlXG4gICAgICApO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogQnVpbGQgYSByZWFsIER5bmFtaWNDb2luICsgRHluYW1pY05ldHdvcmsgaW5zdGFuY2UgZm9yIEFNUy1kaXNjb3ZlcmVkIGJhc2UgY2hhaW5zXG4gKiB3aG9zZSBmYW1pbHkgaXMgbm90IHlldCByZWdpc3RlcmVkIGluIHRoZSBTREsncyBpbml0aWFsaXplck1hcC5cbiAqIENhbGxlZCBmcm9tIGNyZWF0ZVRva2VuKCkgYXMgYSBmYWxsYmFjayB3aGVuIG5vIGluaXRpYWxpemVyIGV4aXN0cyBhbmQgaXNUb2tlbiBpcyBmYWxzZS5cbiAqL1xuZnVuY3Rpb24gYnVpbGREeW5hbWljQ29pbih0b2tlbjogQW1zVG9rZW5Db25maWcpOiBSZWFkb25seTxCYXNlQ29pbj4ge1xuICBjb25zdCBuZXR3b3JrID0gdG9rZW4ubmV0d29yayBpbnN0YW5jZW9mIEJhc2VOZXR3b3JrID8gdG9rZW4ubmV0d29yayA6IGdldE5ldHdvcmsodG9rZW4ubmV0d29yayBhcyBzdHJpbmcpO1xuXG4gIHJldHVybiBPYmplY3QuZnJlZXplKFxuICAgIG5ldyBEeW5hbWljQ29pbih7XG4gICAgICBpZDogdG9rZW4uaWQsXG4gICAgICBuYW1lOiB0b2tlbi5uYW1lLFxuICAgICAgZnVsbE5hbWU6IHRva2VuLmZ1bGxOYW1lLFxuICAgICAgZGVjaW1hbFBsYWNlczogdG9rZW4uZGVjaW1hbFBsYWNlcyxcbiAgICAgIGFzc2V0OiB0b2tlbi5hc3NldCBhcyBzdHJpbmcsXG4gICAgICBpc1Rva2VuOiB0b2tlbi5pc1Rva2VuLFxuICAgICAgZmVhdHVyZXM6ICh0b2tlbi5mZWF0dXJlcyA/PyBbXSkgYXMgc3RyaW5nW10sXG4gICAgICBuZXR3b3JrLFxuICAgICAgcHJpbWFyeUtleUN1cnZlOiAodG9rZW4ucHJpbWFyeUtleUN1cnZlIGFzIHN0cmluZykgPz8gJ3NlY3AyNTZrMScsXG4gICAgICBwcmVmaXg6IHRva2VuLnByZWZpeCA/PyAnJyxcbiAgICAgIHN1ZmZpeDogdG9rZW4uc3VmZml4ID8/IHRva2VuLm5hbWUudG9VcHBlckNhc2UoKSxcbiAgICAgIGJhc2VVbml0OiAodG9rZW4uYmFzZVVuaXQgYXMgc3RyaW5nKSA/PyAnJyxcbiAgICAgIGtpbmQ6ICh0b2tlbi5raW5kIGFzIHN0cmluZykgPz8gJ2NyeXB0bycsXG4gICAgICBhbGlhczogdG9rZW4uYWxpYXMsXG4gICAgfSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0QXB0VG9rZW5Jbml0aWFsaXplcih0b2tlbjogQW1zVG9rZW5Db25maWcpIHtcbiAgaWYgKHRva2VuLmFzc2V0SWQpIHtcbiAgICAvLyB1c2VkIGZvciBmdW5naWJsZS1hc3NldHMgLyBsZWdhY3kgY29pbnMgZXRjLlxuICAgIHJldHVybiB7XG4gICAgICBpbml0RnVuYzogYXB0VG9rZW4gYXMgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gUmVhZG9ubHk8QmFzZUNvaW4+LFxuICAgICAgb2JqZWN0SWQ6IHRva2VuLmFzc2V0SWQsXG4gICAgfTtcbiAgfVxuICAvLyB1c2VkIGZvciBub24tZnVuZ2libGUgdG9rZW4gKE5GVCkgY29sbGVjdGlvbnNcbiAgcmV0dXJuIHtcbiAgICBpbml0RnVuYzogYXB0TkZUQ29sbGVjdGlvbiBhcyAoLi4uYXJnczogdW5rbm93bltdKSA9PiBSZWFkb25seTxCYXNlQ29pbj4sXG4gICAgb2JqZWN0SWQ6IHRva2VuLm5mdENvbGxlY3Rpb25JZCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0VmV0VG9rZW5Jbml0aWFsaXplcih0b2tlbjogQW1zVG9rZW5Db25maWcpIHtcbiAgaWYgKHRva2VuLm5mdENvbGxlY3Rpb25JZCkge1xuICAgIHJldHVybiB7XG4gICAgICB2ZXRJbml0RnVuYzogdmV0TkZUQ29sbGVjdGlvbiBhcyAoLi4uYXJnczogdW5rbm93bltdKSA9PiBSZWFkb25seTxCYXNlQ29pbj4sXG4gICAgICB2ZXRPYmplY3RJZDogdG9rZW4ubmZ0Q29sbGVjdGlvbklkLFxuICAgICAgaXNORlQ6IHRydWUsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdmV0SW5pdEZ1bmM6IHZldFRva2VuIGFzICguLi5hcmdzOiB1bmtub3duW10pID0+IFJlYWRvbmx5PEJhc2VDb2luPixcbiAgICB2ZXRPYmplY3RJZDogdG9rZW4uY29udHJhY3RBZGRyZXNzLFxuICAgIGlzTkZUOiBmYWxzZSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29pblByZXNlbnRJbkNvaW5NYXAoeyBuYW1lLCBpZCwgYWxpYXMgfTogeyBuYW1lOiBzdHJpbmc7IGlkPzogc3RyaW5nOyBhbGlhcz86IHN0cmluZyB9KTogYm9vbGVhbiB7XG4gIHJldHVybiBCb29sZWFuKGNvaW5zLmhhcyhuYW1lKSB8fCAoaWQgJiYgY29pbnMuaGFzKGlkKSkgfHwgKGFsaWFzICYmIGNvaW5zLmhhcyhhbGlhcykpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRva2VuTWFwVXNpbmdDb25maWdEZXRhaWxzKHRva2VuQ29uZmlnTWFwOiBSZWNvcmQ8c3RyaW5nLCBBbXNUb2tlbkNvbmZpZ1tdPik6IENvaW5NYXAge1xuICBjb25zdCBCYXNlQ29pbnM6IE1hcDxzdHJpbmcsIFJlYWRvbmx5PEJhc2VDb2luPj4gPSBuZXcgTWFwKCk7XG5cbiAgY29uc3QgbmZ0QW5kT3RoZXJUb2tlbnMgPSBuZXcgU2V0KFtcbiAgICAnZXJjNzIxOmJzY3Rva2VuJyxcbiAgICAndGVyYzcyMTpic2N0b2tlbicsXG4gICAgJ2VyYzExNTU6YnNjdG9rZW4nLFxuICAgICd0ZXJjMTE1NTpic2N0b2tlbicsXG4gICAgJ2VyYzcyMTp3aXRjaCcsXG4gICAgJ2VyYzcyMTp0b2tlbicsXG4gICAgJ2VyYzExNTU6dG9rZW4nLFxuICAgICdub25zdGFuZGFyZDp0b2tlbicsXG4gICAgJ3RlcmM3MjE6dG9rZW4nLFxuICAgICd0ZXJjMTE1NTp0b2tlbicsXG4gICAgJ3Rub25zdGFuZGFyZDp0b2tlbicsXG4gICAgJ3RlcmM3MjE6Yml0Z29lcmM3MjEnLFxuICAgICd0ZXJjMTE1NTpiaXRnb2VyYzExNTUnLFxuICAgICd0ZXJjNzIxOmhvb2RpZGonLFxuICAgICdlcmM3MjE6cG9seWdvbnRva2VuJyxcbiAgICAnZXJjMTE1NTpwb2x5Z29udG9rZW4nLFxuICAgICd0ZXJjNzIxOnBvbHlnb250b2tlbicsXG4gICAgJ3RlcmMxMTU1OnBvbHlnb250b2tlbicsXG4gICAgJ2VyYzcyMTpzb25laXVtdG9rZW4nLFxuICAgICdlcmMxMTU1OnNvbmVpdW10b2tlbicsXG4gICAgJ3RlcmM3MjE6c29uZWl1bXRva2VuJyxcbiAgICAndGVyYzExNTU6c29uZWl1bXRva2VuJyxcbiAgXSk7XG5cbiAgLy8gQWRkIGFsbCB0aGUgY29pbnMgZnJvbSBzdGF0aWNzIGNvaW4gbWFwIGZpcnN0XG4gIGNvaW5zLmZvckVhY2goKGNvaW4sIGNvaW5OYW1lKSA9PiB7XG4gICAgQmFzZUNvaW5zLnNldChjb2luTmFtZSwgY29pbik7XG4gIH0pO1xuXG4gIC8vIGFkZCB0aGUgdG9rZW5zIG5vdCBwcmVzZW50IGluIHRoZSBzdGF0aWMgY29pbiBtYXBcbiAgZm9yIChjb25zdCB0b2tlbkNvbmZpZ3Mgb2YgT2JqZWN0LnZhbHVlcyh0b2tlbkNvbmZpZ01hcCkpIHtcbiAgICBjb25zdCB0b2tlbkNvbmZpZyA9IHRva2VuQ29uZmlnc1swXTtcblxuICAgIGlmICghaXNDb2luUHJlc2VudEluQ29pbk1hcCh7IC4uLnRva2VuQ29uZmlnIH0pICYmICFuZnRBbmRPdGhlclRva2Vucy5oYXModG9rZW5Db25maWcubmFtZSkpIHtcbiAgICAgIGNvbnN0IHRva2VuID0gY3JlYXRlVG9rZW4odG9rZW5Db25maWcpO1xuICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgIEJhc2VDb2lucy5zZXQodG9rZW4ubmFtZSwgdG9rZW4pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBDb2luTWFwLmZyb21Db2lucyhBcnJheS5mcm9tKEJhc2VDb2lucy52YWx1ZXMoKSkpO1xufVxuXG4vKipcbiAqIEVucmljaCBiYXNlIGNoYWluIGNvaW5zIChpc1Rva2VuPWZhbHNlKSB3aXRoIGZlYXR1cmVzIGZyb20gdGhlIEFNUyBuZXR3b3JrcyBtYXAuXG4gKlxuICogY3JlYXRlVG9rZW5NYXBVc2luZ1RyaW1tZWRDb25maWdEZXRhaWxzIHJlYWRzIGZlYXR1cmVzIGZvciBiYXNlIGNoYWlucyBmcm9tXG4gKiBUcmltbWVkQW1zVG9rZW5Db25maWcuYWRkaXRpb25hbEZlYXR1cmVzLiBUaGUgYXNzZXRzTGlzdCBlbmRwb2ludCByZXR1cm5zIGJhc2UgY2hhaW5zIHdpdGggbm8gZmVhdHVyZXM7XG4gKiBmZWF0dXJlcyBhcmUgaW4gdGhlIG5ldHdvcmtzIGVuZHBvaW50ICgvYXBpL3YxL25ldHdvcmtzLzpuZXR3b3JrKSwgbWF0Y2hlZCBieSBjb2luLm5ldHdvcmsubmFtZSA9PT0gbmV0d29ya3NFbnRyeS5uYW1lLlxuICpcbiAqIENvaW5zIHRoYXQgYWxyZWFkeSBoYXZlIGFkZGl0aW9uYWxGZWF0dXJlcyBkZWZpbmVkIGFyZSBsZWZ0IHVuY2hhbmdlZC5cbiAqIENvaW5zIHdob3NlIG5ldHdvcmsubmFtZSBoYXMgbm8gbWF0Y2ggaW4gbmV0d29ya3NNYXAgYXJlIGxlZnQgdW5jaGFuZ2VkIChlbXB0eSBmZWF0dXJlcykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbnJpY2hCYXNlQ2hhaW5GZWF0dXJlcyhcbiAgY29pblRva2VuTWFwOiBSZWNvcmQ8c3RyaW5nLCBUcmltbWVkQW1zVG9rZW5Db25maWdbXT4sXG4gIG5ldHdvcmtzTWFwOiBBbXNOZXR3b3JrQ29uZmlnTWFwXG4pOiBSZWNvcmQ8c3RyaW5nLCBUcmltbWVkQW1zVG9rZW5Db25maWdbXT4ge1xuICBjb25zdCBmZWF0dXJlc0J5TmV0d29ya05hbWUgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nW10+KFxuICAgIE9iamVjdC52YWx1ZXMobmV0d29ya3NNYXApLm1hcCgobmV0KTogW3N0cmluZywgc3RyaW5nW11dID0+IFtuZXQubmFtZSwgbmV0LmZlYXR1cmVzXSlcbiAgKTtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhjb2luVG9rZW5NYXApLm1hcCgoW2tleSwgY29pbnNdKSA9PiBbXG4gICAgICBrZXksXG4gICAgICBjb2lucy5tYXAoKGNvaW4pID0+IHtcbiAgICAgICAgaWYgKGNvaW4uaXNUb2tlbiB8fCBjb2luLmFkZGl0aW9uYWxGZWF0dXJlcyAhPT0gdW5kZWZpbmVkKSByZXR1cm4gY29pbjtcbiAgICAgICAgY29uc3QgZmVhdHVyZXMgPSBmZWF0dXJlc0J5TmV0d29ya05hbWUuZ2V0KGNvaW4ubmV0d29yay5uYW1lKTtcbiAgICAgICAgcmV0dXJuIGZlYXR1cmVzICE9PSB1bmRlZmluZWQgPyB7IC4uLmNvaW4sIGFkZGl0aW9uYWxGZWF0dXJlczogZmVhdHVyZXMgfSA6IGNvaW47XG4gICAgICB9KSxcbiAgICBdKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVG9rZW5NYXBVc2luZ1RyaW1tZWRDb25maWdEZXRhaWxzKFxuICByZWR1Y2VkVG9rZW5Db25maWdNYXA6IFJlY29yZDxzdHJpbmcsIFRyaW1tZWRBbXNUb2tlbkNvbmZpZ1tdPlxuKTogQ29pbk1hcCB7XG4gIGNvbnN0IGFtc1Rva2VuQ29uZmlnTWFwOiBSZWNvcmQ8c3RyaW5nLCBBbXNUb2tlbkNvbmZpZ1tdPiA9IHt9O1xuICBjb25zdCBuZXR3b3JrTmFtZU1hcCA9IGdldE5ldHdvcmtzTWFwKCk7XG5cbiAgZm9yIChjb25zdCB0b2tlbkNvbmZpZ3Mgb2YgT2JqZWN0LnZhbHVlcyhyZWR1Y2VkVG9rZW5Db25maWdNYXApKSB7XG4gICAgY29uc3QgdG9rZW5Db25maWcgPSB0b2tlbkNvbmZpZ3NbMF07XG4gICAgY29uc3QgbmV0d29yayA9IG5ldHdvcmtOYW1lTWFwLmdldCh0b2tlbkNvbmZpZy5uZXR3b3JrLm5hbWUpO1xuXG4gICAgaWYgKGlzQ29pblByZXNlbnRJbkNvaW5NYXAoeyAuLi50b2tlbkNvbmZpZyB9KSkgY29udGludWU7XG5cbiAgICBpZiAoIXRva2VuQ29uZmlnLmlzVG9rZW4pIHtcbiAgICAgIC8vIER5bmFtaWMgYmFzZSBjaGFpbiDigJQgbmV0d29yayBtdXN0IGJlIHByZS1yZWdpc3RlcmVkIGluIG5ldHdvcmtCeU5hbWUgbWFwIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXG4gICAgICBpZiAobmV0d29yaykge1xuICAgICAgICBhbXNUb2tlbkNvbmZpZ01hcFt0b2tlbkNvbmZpZy5uYW1lXSA9IFtcbiAgICAgICAgICB7IC4uLnRva2VuQ29uZmlnLCBmZWF0dXJlczogdG9rZW5Db25maWcuYWRkaXRpb25hbEZlYXR1cmVzID8/IFtdLCBuZXR3b3JrIH0sXG4gICAgICAgIF07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChuZXR3b3JrICYmIG5ldHdvcmtGZWF0dXJlTWFwRm9yVG9rZW5zW25ldHdvcmsuZmFtaWx5XSkge1xuICAgICAgY29uc3QgZmVhdHVyZXMgPSBuZXcgU2V0KFtcbiAgICAgICAgLi4uKG5ldHdvcmtGZWF0dXJlTWFwRm9yVG9rZW5zW25ldHdvcmsuZmFtaWx5XSB8fCBbXSksXG4gICAgICAgIC4uLih0b2tlbkNvbmZpZy5hZGRpdGlvbmFsRmVhdHVyZXMgfHwgW10pLFxuICAgICAgXSk7XG4gICAgICB0b2tlbkNvbmZpZy5leGNsdWRlZEZlYXR1cmVzPy5mb3JFYWNoKChmZWF0dXJlKSA9PiBmZWF0dXJlcy5kZWxldGUoZmVhdHVyZSkpO1xuICAgICAgYW1zVG9rZW5Db25maWdNYXBbdG9rZW5Db25maWcubmFtZV0gPSBbeyAuLi50b2tlbkNvbmZpZywgZmVhdHVyZXM6IEFycmF5LmZyb20oZmVhdHVyZXMpLCBuZXR3b3JrIH1dO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjcmVhdGVUb2tlbk1hcFVzaW5nQ29uZmlnRGV0YWlscyhhbXNUb2tlbkNvbmZpZ01hcCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUb2tlblVzaW5nVHJpbW1lZENvbmZpZ0RldGFpbHMoXG4gIHRva2VuQ29uZmlnOiBUcmltbWVkQW1zVG9rZW5Db25maWdcbik6IFJlYWRvbmx5PEJhc2VDb2luPiB8IHVuZGVmaW5lZCB7XG4gIGxldCBmdWxsVG9rZW5Db25maWc6IEFtc1Rva2VuQ29uZmlnIHwgdW5kZWZpbmVkO1xuICBjb25zdCBuZXR3b3JrTmFtZU1hcCA9IGdldE5ldHdvcmtzTWFwKCk7XG4gIGNvbnN0IG5ldHdvcmsgPSBuZXR3b3JrTmFtZU1hcC5nZXQodG9rZW5Db25maWcubmV0d29yay5uYW1lKTtcblxuICBpZiAoaXNDb2luUHJlc2VudEluQ29pbk1hcCh7IC4uLnRva2VuQ29uZmlnIH0pKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGlmICghdG9rZW5Db25maWcuaXNUb2tlbikge1xuICAgIC8vIER5bmFtaWMgYmFzZSBjaGFpbiDigJQgbmV0d29yayBtdXN0IGJlIHByZS1yZWdpc3RlcmVkIGluIG5ldHdvcmtCeU5hbWUgbWFwIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXG4gICAgaWYgKG5ldHdvcmspIHtcbiAgICAgIHJldHVybiBjcmVhdGVUb2tlbih7IC4uLnRva2VuQ29uZmlnLCBmZWF0dXJlczogdG9rZW5Db25maWcuYWRkaXRpb25hbEZlYXR1cmVzID8/IFtdLCBuZXR3b3JrIH0gYXMgQW1zVG9rZW5Db25maWcpO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKG5ldHdvcmsgJiYgbmV0d29ya0ZlYXR1cmVNYXBGb3JUb2tlbnNbbmV0d29yay5mYW1pbHldKSB7XG4gICAgY29uc3QgZmVhdHVyZXMgPSBuZXcgU2V0KFtcbiAgICAgIC4uLihuZXR3b3JrRmVhdHVyZU1hcEZvclRva2Vuc1tuZXR3b3JrLmZhbWlseV0gfHwgW10pLFxuICAgICAgLi4uKHRva2VuQ29uZmlnLmFkZGl0aW9uYWxGZWF0dXJlcyB8fCBbXSksXG4gICAgXSk7XG4gICAgdG9rZW5Db25maWcuZXhjbHVkZWRGZWF0dXJlcz8uZm9yRWFjaCgoZmVhdHVyZSkgPT4gZmVhdHVyZXMuZGVsZXRlKGZlYXR1cmUpKTtcbiAgICBmdWxsVG9rZW5Db25maWcgPSB7IC4uLnRva2VuQ29uZmlnLCBmZWF0dXJlczogQXJyYXkuZnJvbShmZWF0dXJlcyksIG5ldHdvcmsgfSBhcyBBbXNUb2tlbkNvbmZpZztcbiAgICByZXR1cm4gY3JlYXRlVG9rZW4oZnVsbFRva2VuQ29uZmlnKTtcbiAgfVxufVxuIl19
@@ -10,4 +10,5 @@ export { AccountCoin, GasTankAccountCoin, CeloCoin, ContractAddressDefinedToken,
10
10
  export { CoinMap } from './map';
11
11
  export { networkFeatureMapForTokens } from './networkFeatureMapForTokens';
12
12
  export { generateErc20Coin, generateTestErc20Coin, generateErc20Token, generateTestErc20Token, } from './coins/generateERC20';
13
+ export { KASCoin } from './kas';
13
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,QAAQ,EACR,2BAA2B,EAC3B,SAAS,EACT,WAAW,EACX,OAAO,EACP,QAAQ,EACR,cAAc,EACd,2BAA2B,EAC3B,OAAO,EACP,WAAW,EACX,aAAa,EACb,OAAO,EACP,OAAO,EACP,SAAS,EACT,OAAO,EACP,OAAO,EACP,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,EAChB,QAAQ,EACR,WAAW,EACX,WAAW,GACZ,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,QAAQ,EACR,2BAA2B,EAC3B,SAAS,EACT,WAAW,EACX,OAAO,EACP,QAAQ,EACR,cAAc,EACd,2BAA2B,EAC3B,OAAO,EACP,WAAW,EACX,aAAa,EACb,OAAO,EACP,OAAO,EACP,SAAS,EACT,OAAO,EACP,OAAO,EACP,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,EAChB,QAAQ,EACR,WAAW,EACX,WAAW,GACZ,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC"}
package/dist/src/index.js CHANGED
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.generateTestErc20Token = exports.generateErc20Token = exports.generateTestErc20Coin = exports.generateErc20Coin = exports.networkFeatureMapForTokens = exports.CoinMap = exports.CantonToken = exports.JettonToken = exports.AdaToken = exports.CosmosChainToken = exports.VetNFTCollection = exports.VetToken = exports.Nep141Token = exports.Sip10Token = exports.AptNFTCollection = exports.AptCoin = exports.XrpCoin = exports.PolyxCoin = exports.TaoCoin = exports.SuiCoin = exports.TronErc20Coin = exports.HederaToken = exports.SolCoin = exports.NFTCollectionIdDefinedToken = exports.AvaxERC20Token = exports.AlgoCoin = exports.EosCoin = exports.StellarCoin = exports.Erc20Coin = exports.ContractAddressDefinedToken = exports.CeloCoin = exports.GasTankAccountCoin = exports.AccountCoin = exports.LightningCoin = exports.UtxoCoin = exports.OfcCoin = void 0;
17
+ exports.KASCoin = exports.generateTestErc20Token = exports.generateErc20Token = exports.generateTestErc20Coin = exports.generateErc20Coin = exports.networkFeatureMapForTokens = exports.CoinMap = exports.CantonToken = exports.JettonToken = exports.AdaToken = exports.CosmosChainToken = exports.VetNFTCollection = exports.VetToken = exports.Nep141Token = exports.Sip10Token = exports.AptNFTCollection = exports.AptCoin = exports.XrpCoin = exports.PolyxCoin = exports.TaoCoin = exports.SuiCoin = exports.TronErc20Coin = exports.HederaToken = exports.SolCoin = exports.NFTCollectionIdDefinedToken = exports.AvaxERC20Token = exports.AlgoCoin = exports.EosCoin = exports.StellarCoin = exports.Erc20Coin = exports.ContractAddressDefinedToken = exports.CeloCoin = exports.GasTankAccountCoin = exports.AccountCoin = exports.LightningCoin = exports.UtxoCoin = exports.OfcCoin = void 0;
18
18
  __exportStar(require("./base"), exports);
19
19
  __exportStar(require("./coins"), exports);
20
20
  __exportStar(require("./networks"), exports);
@@ -63,4 +63,6 @@ Object.defineProperty(exports, "generateErc20Coin", { enumerable: true, get: fun
63
63
  Object.defineProperty(exports, "generateTestErc20Coin", { enumerable: true, get: function () { return generateERC20_1.generateTestErc20Coin; } });
64
64
  Object.defineProperty(exports, "generateErc20Token", { enumerable: true, get: function () { return generateERC20_1.generateErc20Token; } });
65
65
  Object.defineProperty(exports, "generateTestErc20Token", { enumerable: true, get: function () { return generateERC20_1.generateTestErc20Token; } });
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx5Q0FBdUI7QUFDdkIsMENBQXdCO0FBQ3hCLDZDQUEyQjtBQUMzQiwyQ0FBeUI7QUFDekIsZ0RBQThCO0FBQzlCLDZCQUFnQztBQUF2Qiw4RkFBQSxPQUFPLE9BQUE7QUFDaEIsK0JBQWtDO0FBQXpCLGdHQUFBLFFBQVEsT0FBQTtBQUNqQix5Q0FBNEM7QUFBbkMsMEdBQUEsYUFBYSxPQUFBO0FBQ3RCLHFDQTRCbUI7QUEzQmpCLHNHQUFBLFdBQVcsT0FBQTtBQUNYLDZHQUFBLGtCQUFrQixPQUFBO0FBQ2xCLG1HQUFBLFFBQVEsT0FBQTtBQUNSLHNIQUFBLDJCQUEyQixPQUFBO0FBQzNCLG9HQUFBLFNBQVMsT0FBQTtBQUNULHNHQUFBLFdBQVcsT0FBQTtBQUNYLGtHQUFBLE9BQU8sT0FBQTtBQUNQLG1HQUFBLFFBQVEsT0FBQTtBQUNSLHlHQUFBLGNBQWMsT0FBQTtBQUNkLHNIQUFBLDJCQUEyQixPQUFBO0FBQzNCLGtHQUFBLE9BQU8sT0FBQTtBQUNQLHNHQUFBLFdBQVcsT0FBQTtBQUNYLHdHQUFBLGFBQWEsT0FBQTtBQUNiLGtHQUFBLE9BQU8sT0FBQTtBQUNQLGtHQUFBLE9BQU8sT0FBQTtBQUNQLG9HQUFBLFNBQVMsT0FBQTtBQUNULGtHQUFBLE9BQU8sT0FBQTtBQUNQLGtHQUFBLE9BQU8sT0FBQTtBQUNQLDJHQUFBLGdCQUFnQixPQUFBO0FBQ2hCLHFHQUFBLFVBQVUsT0FBQTtBQUNWLHNHQUFBLFdBQVcsT0FBQTtBQUNYLG1HQUFBLFFBQVEsT0FBQTtBQUNSLDJHQUFBLGdCQUFnQixPQUFBO0FBQ2hCLDJHQUFBLGdCQUFnQixPQUFBO0FBQ2hCLG1HQUFBLFFBQVEsT0FBQTtBQUNSLHNHQUFBLFdBQVcsT0FBQTtBQUNYLHNHQUFBLFdBQVcsT0FBQTtBQUViLDZCQUFnQztBQUF2Qiw4RkFBQSxPQUFPLE9BQUE7QUFDaEIsMkVBQTBFO0FBQWpFLHdJQUFBLDBCQUEwQixPQUFBO0FBQ25DLHVEQUsrQjtBQUo3QixrSEFBQSxpQkFBaUIsT0FBQTtBQUNqQixzSEFBQSxxQkFBcUIsT0FBQTtBQUNyQixtSEFBQSxrQkFBa0IsT0FBQTtBQUNsQix1SEFBQSxzQkFBc0IsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYmFzZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvaW5zJztcbmV4cG9ydCAqIGZyb20gJy4vbmV0d29ya3MnO1xuZXhwb3J0ICogZnJvbSAnLi9lcnJvcnMnO1xuZXhwb3J0ICogZnJvbSAnLi90b2tlbkNvbmZpZyc7XG5leHBvcnQgeyBPZmNDb2luIH0gZnJvbSAnLi9vZmMnO1xuZXhwb3J0IHsgVXR4b0NvaW4gfSBmcm9tICcuL3V0eG8nO1xuZXhwb3J0IHsgTGlnaHRuaW5nQ29pbiB9IGZyb20gJy4vbGlnaHRuaW5nJztcbmV4cG9ydCB7XG4gIEFjY291bnRDb2luLFxuICBHYXNUYW5rQWNjb3VudENvaW4sXG4gIENlbG9Db2luLFxuICBDb250cmFjdEFkZHJlc3NEZWZpbmVkVG9rZW4sXG4gIEVyYzIwQ29pbixcbiAgU3RlbGxhckNvaW4sXG4gIEVvc0NvaW4sXG4gIEFsZ29Db2luLFxuICBBdmF4RVJDMjBUb2tlbixcbiAgTkZUQ29sbGVjdGlvbklkRGVmaW5lZFRva2VuLFxuICBTb2xDb2luLFxuICBIZWRlcmFUb2tlbixcbiAgVHJvbkVyYzIwQ29pbixcbiAgU3VpQ29pbixcbiAgVGFvQ29pbixcbiAgUG9seXhDb2luLFxuICBYcnBDb2luLFxuICBBcHRDb2luLFxuICBBcHRORlRDb2xsZWN0aW9uLFxuICBTaXAxMFRva2VuLFxuICBOZXAxNDFUb2tlbixcbiAgVmV0VG9rZW4sXG4gIFZldE5GVENvbGxlY3Rpb24sXG4gIENvc21vc0NoYWluVG9rZW4sXG4gIEFkYVRva2VuLFxuICBKZXR0b25Ub2tlbixcbiAgQ2FudG9uVG9rZW4sXG59IGZyb20gJy4vYWNjb3VudCc7XG5leHBvcnQgeyBDb2luTWFwIH0gZnJvbSAnLi9tYXAnO1xuZXhwb3J0IHsgbmV0d29ya0ZlYXR1cmVNYXBGb3JUb2tlbnMgfSBmcm9tICcuL25ldHdvcmtGZWF0dXJlTWFwRm9yVG9rZW5zJztcbmV4cG9ydCB7XG4gIGdlbmVyYXRlRXJjMjBDb2luLFxuICBnZW5lcmF0ZVRlc3RFcmMyMENvaW4sXG4gIGdlbmVyYXRlRXJjMjBUb2tlbixcbiAgZ2VuZXJhdGVUZXN0RXJjMjBUb2tlbixcbn0gZnJvbSAnLi9jb2lucy9nZW5lcmF0ZUVSQzIwJztcbiJdfQ==
66
+ var kas_1 = require("./kas");
67
+ Object.defineProperty(exports, "KASCoin", { enumerable: true, get: function () { return kas_1.KASCoin; } });
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx5Q0FBdUI7QUFDdkIsMENBQXdCO0FBQ3hCLDZDQUEyQjtBQUMzQiwyQ0FBeUI7QUFDekIsZ0RBQThCO0FBQzlCLDZCQUFnQztBQUF2Qiw4RkFBQSxPQUFPLE9BQUE7QUFDaEIsK0JBQWtDO0FBQXpCLGdHQUFBLFFBQVEsT0FBQTtBQUNqQix5Q0FBNEM7QUFBbkMsMEdBQUEsYUFBYSxPQUFBO0FBQ3RCLHFDQTRCbUI7QUEzQmpCLHNHQUFBLFdBQVcsT0FBQTtBQUNYLDZHQUFBLGtCQUFrQixPQUFBO0FBQ2xCLG1HQUFBLFFBQVEsT0FBQTtBQUNSLHNIQUFBLDJCQUEyQixPQUFBO0FBQzNCLG9HQUFBLFNBQVMsT0FBQTtBQUNULHNHQUFBLFdBQVcsT0FBQTtBQUNYLGtHQUFBLE9BQU8sT0FBQTtBQUNQLG1HQUFBLFFBQVEsT0FBQTtBQUNSLHlHQUFBLGNBQWMsT0FBQTtBQUNkLHNIQUFBLDJCQUEyQixPQUFBO0FBQzNCLGtHQUFBLE9BQU8sT0FBQTtBQUNQLHNHQUFBLFdBQVcsT0FBQTtBQUNYLHdHQUFBLGFBQWEsT0FBQTtBQUNiLGtHQUFBLE9BQU8sT0FBQTtBQUNQLGtHQUFBLE9BQU8sT0FBQTtBQUNQLG9HQUFBLFNBQVMsT0FBQTtBQUNULGtHQUFBLE9BQU8sT0FBQTtBQUNQLGtHQUFBLE9BQU8sT0FBQTtBQUNQLDJHQUFBLGdCQUFnQixPQUFBO0FBQ2hCLHFHQUFBLFVBQVUsT0FBQTtBQUNWLHNHQUFBLFdBQVcsT0FBQTtBQUNYLG1HQUFBLFFBQVEsT0FBQTtBQUNSLDJHQUFBLGdCQUFnQixPQUFBO0FBQ2hCLDJHQUFBLGdCQUFnQixPQUFBO0FBQ2hCLG1HQUFBLFFBQVEsT0FBQTtBQUNSLHNHQUFBLFdBQVcsT0FBQTtBQUNYLHNHQUFBLFdBQVcsT0FBQTtBQUViLDZCQUFnQztBQUF2Qiw4RkFBQSxPQUFPLE9BQUE7QUFDaEIsMkVBQTBFO0FBQWpFLHdJQUFBLDBCQUEwQixPQUFBO0FBQ25DLHVEQUsrQjtBQUo3QixrSEFBQSxpQkFBaUIsT0FBQTtBQUNqQixzSEFBQSxxQkFBcUIsT0FBQTtBQUNyQixtSEFBQSxrQkFBa0IsT0FBQTtBQUNsQix1SEFBQSxzQkFBc0IsT0FBQTtBQUV4Qiw2QkFBZ0M7QUFBdkIsOEZBQUEsT0FBTyxPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9iYXNlJztcbmV4cG9ydCAqIGZyb20gJy4vY29pbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9uZXR3b3Jrcyc7XG5leHBvcnQgKiBmcm9tICcuL2Vycm9ycyc7XG5leHBvcnQgKiBmcm9tICcuL3Rva2VuQ29uZmlnJztcbmV4cG9ydCB7IE9mY0NvaW4gfSBmcm9tICcuL29mYyc7XG5leHBvcnQgeyBVdHhvQ29pbiB9IGZyb20gJy4vdXR4byc7XG5leHBvcnQgeyBMaWdodG5pbmdDb2luIH0gZnJvbSAnLi9saWdodG5pbmcnO1xuZXhwb3J0IHtcbiAgQWNjb3VudENvaW4sXG4gIEdhc1RhbmtBY2NvdW50Q29pbixcbiAgQ2Vsb0NvaW4sXG4gIENvbnRyYWN0QWRkcmVzc0RlZmluZWRUb2tlbixcbiAgRXJjMjBDb2luLFxuICBTdGVsbGFyQ29pbixcbiAgRW9zQ29pbixcbiAgQWxnb0NvaW4sXG4gIEF2YXhFUkMyMFRva2VuLFxuICBORlRDb2xsZWN0aW9uSWREZWZpbmVkVG9rZW4sXG4gIFNvbENvaW4sXG4gIEhlZGVyYVRva2VuLFxuICBUcm9uRXJjMjBDb2luLFxuICBTdWlDb2luLFxuICBUYW9Db2luLFxuICBQb2x5eENvaW4sXG4gIFhycENvaW4sXG4gIEFwdENvaW4sXG4gIEFwdE5GVENvbGxlY3Rpb24sXG4gIFNpcDEwVG9rZW4sXG4gIE5lcDE0MVRva2VuLFxuICBWZXRUb2tlbixcbiAgVmV0TkZUQ29sbGVjdGlvbixcbiAgQ29zbW9zQ2hhaW5Ub2tlbixcbiAgQWRhVG9rZW4sXG4gIEpldHRvblRva2VuLFxuICBDYW50b25Ub2tlbixcbn0gZnJvbSAnLi9hY2NvdW50JztcbmV4cG9ydCB7IENvaW5NYXAgfSBmcm9tICcuL21hcCc7XG5leHBvcnQgeyBuZXR3b3JrRmVhdHVyZU1hcEZvclRva2VucyB9IGZyb20gJy4vbmV0d29ya0ZlYXR1cmVNYXBGb3JUb2tlbnMnO1xuZXhwb3J0IHtcbiAgZ2VuZXJhdGVFcmMyMENvaW4sXG4gIGdlbmVyYXRlVGVzdEVyYzIwQ29pbixcbiAgZ2VuZXJhdGVFcmMyMFRva2VuLFxuICBnZW5lcmF0ZVRlc3RFcmMyMFRva2VuLFxufSBmcm9tICcuL2NvaW5zL2dlbmVyYXRlRVJDMjAnO1xuZXhwb3J0IHsgS0FTQ29pbiB9IGZyb20gJy4va2FzJztcbiJdfQ==
@@ -0,0 +1,40 @@
1
+ import { BaseCoin, CoinFeature, KeyCurve, UnderlyingAsset } from './base';
2
+ import { KaspaNetwork } from './networks';
3
+ export interface KASConstructorOptions {
4
+ id: string;
5
+ fullName: string;
6
+ name: string;
7
+ network: KaspaNetwork;
8
+ features: CoinFeature[];
9
+ asset: UnderlyingAsset;
10
+ prefix?: string;
11
+ suffix?: string;
12
+ primaryKeyCurve: KeyCurve;
13
+ }
14
+ /**
15
+ * Kaspa (KAS) coin statics.
16
+ *
17
+ * UTXO-based BlockDAG chain using Schnorr signatures over secp256k1.
18
+ */
19
+ export declare class KASCoin extends BaseCoin {
20
+ static readonly DEFAULT_FEATURES: CoinFeature[];
21
+ readonly network: KaspaNetwork;
22
+ constructor(options: KASConstructorOptions);
23
+ protected disallowedFeatures(): Set<CoinFeature>;
24
+ protected requiredFeatures(): Set<CoinFeature>;
25
+ }
26
+ /**
27
+ * Factory function for Kaspa coin instances.
28
+ *
29
+ * @param id uuid v4
30
+ * @param name unique identifier of the coin (e.g. 'kas', 'tkas')
31
+ * @param fullName Complete human-readable name (e.g. 'Kaspa', 'Kaspa Testnet')
32
+ * @param network Network object (KaspaMainnet or KaspaTestnet)
33
+ * @param asset Underlying asset (UnderlyingAsset.KAS)
34
+ * @param features CoinFeature array; defaults to KASCoin.DEFAULT_FEATURES
35
+ * @param prefix Optional prefix (empty string)
36
+ * @param suffix Optional suffix (defaults to upper-case coin name)
37
+ * @param primaryKeyCurve Key curve (Secp256k1 for Kaspa)
38
+ */
39
+ export declare function kas(id: string, name: string, fullName: string, network: KaspaNetwork, asset: UnderlyingAsset, features?: CoinFeature[], prefix?: string, suffix?: string, primaryKeyCurve?: KeyCurve): Readonly<KASCoin>;
40
+ //# sourceMappingURL=kas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kas.d.ts","sourceRoot":"","sources":["../../src/kas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAY,WAAW,EAAY,QAAQ,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAC9F,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,KAAK,EAAE,eAAe,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,QAAQ,CAAC;CAC3B;AAED;;;;GAIG;AACH,qBAAa,OAAQ,SAAQ,QAAQ;IACnC,gBAAuB,gBAAgB,gBAWrC;IAEF,SAAgB,OAAO,EAAE,YAAY,CAAC;gBAE1B,OAAO,EAAE,qBAAqB;IAW1C,SAAS,CAAC,kBAAkB,IAAI,GAAG,CAAC,WAAW,CAAC;IAIhD,SAAS,CAAC,gBAAgB,IAAI,GAAG,CAAC,WAAW,CAAC;CAG/C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,GAAG,CACjB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,eAAe,EACtB,QAAQ,GAAE,WAAW,EAA6B,EAClD,MAAM,SAAK,EACX,MAAM,GAAE,MAA2B,EACnC,eAAe,GAAE,QAA6B,qBAe/C"}
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.KASCoin = void 0;
4
+ exports.kas = kas;
5
+ const base_1 = require("./base");
6
+ /**
7
+ * Kaspa (KAS) coin statics.
8
+ *
9
+ * UTXO-based BlockDAG chain using Schnorr signatures over secp256k1.
10
+ */
11
+ class KASCoin extends base_1.BaseCoin {
12
+ constructor(options) {
13
+ super({
14
+ ...options,
15
+ kind: base_1.CoinKind.CRYPTO,
16
+ isToken: false,
17
+ decimalPlaces: 8, // 1 KAS = 10^8 sompi
18
+ baseUnit: base_1.BaseUnit.KAS,
19
+ });
20
+ this.network = options.network;
21
+ }
22
+ disallowedFeatures() {
23
+ return new Set([base_1.CoinFeature.ACCOUNT_MODEL]);
24
+ }
25
+ requiredFeatures() {
26
+ return new Set([base_1.CoinFeature.UNSPENT_MODEL]);
27
+ }
28
+ }
29
+ exports.KASCoin = KASCoin;
30
+ KASCoin.DEFAULT_FEATURES = [
31
+ base_1.CoinFeature.UNSPENT_MODEL,
32
+ base_1.CoinFeature.TSS,
33
+ base_1.CoinFeature.TSS_COLD,
34
+ base_1.CoinFeature.CUSTODY,
35
+ base_1.CoinFeature.CUSTODY_BITGO_TRUST,
36
+ base_1.CoinFeature.CUSTODY_BITGO_INDIA,
37
+ base_1.CoinFeature.CUSTODY_BITGO_MENA_FZE,
38
+ base_1.CoinFeature.CUSTODY_BITGO_CUSTODY_MENA_FZE,
39
+ base_1.CoinFeature.CUSTODY_BITGO_GERMANY,
40
+ base_1.CoinFeature.CUSTODY_BITGO_FRANKFURT,
41
+ ];
42
+ /**
43
+ * Factory function for Kaspa coin instances.
44
+ *
45
+ * @param id uuid v4
46
+ * @param name unique identifier of the coin (e.g. 'kas', 'tkas')
47
+ * @param fullName Complete human-readable name (e.g. 'Kaspa', 'Kaspa Testnet')
48
+ * @param network Network object (KaspaMainnet or KaspaTestnet)
49
+ * @param asset Underlying asset (UnderlyingAsset.KAS)
50
+ * @param features CoinFeature array; defaults to KASCoin.DEFAULT_FEATURES
51
+ * @param prefix Optional prefix (empty string)
52
+ * @param suffix Optional suffix (defaults to upper-case coin name)
53
+ * @param primaryKeyCurve Key curve (Secp256k1 for Kaspa)
54
+ */
55
+ function kas(id, name, fullName, network, asset, features = KASCoin.DEFAULT_FEATURES, prefix = '', suffix = name.toUpperCase(), primaryKeyCurve = base_1.KeyCurve.Secp256k1) {
56
+ return Object.freeze(new KASCoin({
57
+ id,
58
+ name,
59
+ fullName,
60
+ network,
61
+ prefix,
62
+ suffix,
63
+ features,
64
+ asset,
65
+ primaryKeyCurve,
66
+ }));
67
+ }
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2FzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2thcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFxRUEsa0JBd0JDO0FBN0ZELGlDQUE4RjtBQWU5Rjs7OztHQUlHO0FBQ0gsTUFBYSxPQUFRLFNBQVEsZUFBUTtJQWdCbkMsWUFBWSxPQUE4QjtRQUN4QyxLQUFLLENBQUM7WUFDSixHQUFHLE9BQU87WUFDVixJQUFJLEVBQUUsZUFBUSxDQUFDLE1BQU07WUFDckIsT0FBTyxFQUFFLEtBQUs7WUFDZCxhQUFhLEVBQUUsQ0FBQyxFQUFFLHFCQUFxQjtZQUN2QyxRQUFRLEVBQUUsZUFBUSxDQUFDLEdBQUc7U0FDdkIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO0lBQ2pDLENBQUM7SUFFUyxrQkFBa0I7UUFDMUIsT0FBTyxJQUFJLEdBQUcsQ0FBQyxDQUFDLGtCQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRVMsZ0JBQWdCO1FBQ3hCLE9BQU8sSUFBSSxHQUFHLENBQUMsQ0FBQyxrQkFBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQzs7QUFqQ0gsMEJBa0NDO0FBakN3Qix3QkFBZ0IsR0FBRztJQUN4QyxrQkFBVyxDQUFDLGFBQWE7SUFDekIsa0JBQVcsQ0FBQyxHQUFHO0lBQ2Ysa0JBQVcsQ0FBQyxRQUFRO0lBQ3BCLGtCQUFXLENBQUMsT0FBTztJQUNuQixrQkFBVyxDQUFDLG1CQUFtQjtJQUMvQixrQkFBVyxDQUFDLG1CQUFtQjtJQUMvQixrQkFBVyxDQUFDLHNCQUFzQjtJQUNsQyxrQkFBVyxDQUFDLDhCQUE4QjtJQUMxQyxrQkFBVyxDQUFDLHFCQUFxQjtJQUNqQyxrQkFBVyxDQUFDLHVCQUF1QjtDQUNwQyxDQUFDO0FBd0JKOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILFNBQWdCLEdBQUcsQ0FDakIsRUFBVSxFQUNWLElBQVksRUFDWixRQUFnQixFQUNoQixPQUFxQixFQUNyQixLQUFzQixFQUN0QixXQUEwQixPQUFPLENBQUMsZ0JBQWdCLEVBQ2xELE1BQU0sR0FBRyxFQUFFLEVBQ1gsU0FBaUIsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUNuQyxrQkFBNEIsZUFBUSxDQUFDLFNBQVM7SUFFOUMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUNsQixJQUFJLE9BQU8sQ0FBQztRQUNWLEVBQUU7UUFDRixJQUFJO1FBQ0osUUFBUTtRQUNSLE9BQU87UUFDUCxNQUFNO1FBQ04sTUFBTTtRQUNOLFFBQVE7UUFDUixLQUFLO1FBQ0wsZUFBZTtLQUNoQixDQUFDLENBQ0gsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29pbiwgQmFzZVVuaXQsIENvaW5GZWF0dXJlLCBDb2luS2luZCwgS2V5Q3VydmUsIFVuZGVybHlpbmdBc3NldCB9IGZyb20gJy4vYmFzZSc7XG5pbXBvcnQgeyBLYXNwYU5ldHdvcmsgfSBmcm9tICcuL25ldHdvcmtzJztcblxuZXhwb3J0IGludGVyZmFjZSBLQVNDb25zdHJ1Y3Rvck9wdGlvbnMge1xuICBpZDogc3RyaW5nO1xuICBmdWxsTmFtZTogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIG5ldHdvcms6IEthc3BhTmV0d29yaztcbiAgZmVhdHVyZXM6IENvaW5GZWF0dXJlW107XG4gIGFzc2V0OiBVbmRlcmx5aW5nQXNzZXQ7XG4gIHByZWZpeD86IHN0cmluZztcbiAgc3VmZml4Pzogc3RyaW5nO1xuICBwcmltYXJ5S2V5Q3VydmU6IEtleUN1cnZlO1xufVxuXG4vKipcbiAqIEthc3BhIChLQVMpIGNvaW4gc3RhdGljcy5cbiAqXG4gKiBVVFhPLWJhc2VkIEJsb2NrREFHIGNoYWluIHVzaW5nIFNjaG5vcnIgc2lnbmF0dXJlcyBvdmVyIHNlY3AyNTZrMS5cbiAqL1xuZXhwb3J0IGNsYXNzIEtBU0NvaW4gZXh0ZW5kcyBCYXNlQ29pbiB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9GRUFUVVJFUyA9IFtcbiAgICBDb2luRmVhdHVyZS5VTlNQRU5UX01PREVMLFxuICAgIENvaW5GZWF0dXJlLlRTUyxcbiAgICBDb2luRmVhdHVyZS5UU1NfQ09MRCxcbiAgICBDb2luRmVhdHVyZS5DVVNUT0RZLFxuICAgIENvaW5GZWF0dXJlLkNVU1RPRFlfQklUR09fVFJVU1QsXG4gICAgQ29pbkZlYXR1cmUuQ1VTVE9EWV9CSVRHT19JTkRJQSxcbiAgICBDb2luRmVhdHVyZS5DVVNUT0RZX0JJVEdPX01FTkFfRlpFLFxuICAgIENvaW5GZWF0dXJlLkNVU1RPRFlfQklUR09fQ1VTVE9EWV9NRU5BX0ZaRSxcbiAgICBDb2luRmVhdHVyZS5DVVNUT0RZX0JJVEdPX0dFUk1BTlksXG4gICAgQ29pbkZlYXR1cmUuQ1VTVE9EWV9CSVRHT19GUkFOS0ZVUlQsXG4gIF07XG5cbiAgcHVibGljIHJlYWRvbmx5IG5ldHdvcms6IEthc3BhTmV0d29yaztcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBLQVNDb25zdHJ1Y3Rvck9wdGlvbnMpIHtcbiAgICBzdXBlcih7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAga2luZDogQ29pbktpbmQuQ1JZUFRPLFxuICAgICAgaXNUb2tlbjogZmFsc2UsXG4gICAgICBkZWNpbWFsUGxhY2VzOiA4LCAvLyAxIEtBUyA9IDEwXjggc29tcGlcbiAgICAgIGJhc2VVbml0OiBCYXNlVW5pdC5LQVMsXG4gICAgfSk7XG4gICAgdGhpcy5uZXR3b3JrID0gb3B0aW9ucy5uZXR3b3JrO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRpc2FsbG93ZWRGZWF0dXJlcygpOiBTZXQ8Q29pbkZlYXR1cmU+IHtcbiAgICByZXR1cm4gbmV3IFNldChbQ29pbkZlYXR1cmUuQUNDT1VOVF9NT0RFTF0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlcXVpcmVkRmVhdHVyZXMoKTogU2V0PENvaW5GZWF0dXJlPiB7XG4gICAgcmV0dXJuIG5ldyBTZXQoW0NvaW5GZWF0dXJlLlVOU1BFTlRfTU9ERUxdKTtcbiAgfVxufVxuXG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gZm9yIEthc3BhIGNvaW4gaW5zdGFuY2VzLlxuICpcbiAqIEBwYXJhbSBpZCAgICAgICAgICAgIHV1aWQgdjRcbiAqIEBwYXJhbSBuYW1lICAgICAgICAgIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBjb2luIChlLmcuICdrYXMnLCAndGthcycpXG4gKiBAcGFyYW0gZnVsbE5hbWUgICAgICBDb21wbGV0ZSBodW1hbi1yZWFkYWJsZSBuYW1lIChlLmcuICdLYXNwYScsICdLYXNwYSBUZXN0bmV0JylcbiAqIEBwYXJhbSBuZXR3b3JrICAgICAgIE5ldHdvcmsgb2JqZWN0IChLYXNwYU1haW5uZXQgb3IgS2FzcGFUZXN0bmV0KVxuICogQHBhcmFtIGFzc2V0ICAgICAgICAgVW5kZXJseWluZyBhc3NldCAoVW5kZXJseWluZ0Fzc2V0LktBUylcbiAqIEBwYXJhbSBmZWF0dXJlcyAgICAgIENvaW5GZWF0dXJlIGFycmF5OyBkZWZhdWx0cyB0byBLQVNDb2luLkRFRkFVTFRfRkVBVFVSRVNcbiAqIEBwYXJhbSBwcmVmaXggICAgICAgIE9wdGlvbmFsIHByZWZpeCAoZW1wdHkgc3RyaW5nKVxuICogQHBhcmFtIHN1ZmZpeCAgICAgICAgT3B0aW9uYWwgc3VmZml4IChkZWZhdWx0cyB0byB1cHBlci1jYXNlIGNvaW4gbmFtZSlcbiAqIEBwYXJhbSBwcmltYXJ5S2V5Q3VydmUgS2V5IGN1cnZlIChTZWNwMjU2azEgZm9yIEthc3BhKVxuICovXG5leHBvcnQgZnVuY3Rpb24ga2FzKFxuICBpZDogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIGZ1bGxOYW1lOiBzdHJpbmcsXG4gIG5ldHdvcms6IEthc3BhTmV0d29yayxcbiAgYXNzZXQ6IFVuZGVybHlpbmdBc3NldCxcbiAgZmVhdHVyZXM6IENvaW5GZWF0dXJlW10gPSBLQVNDb2luLkRFRkFVTFRfRkVBVFVSRVMsXG4gIHByZWZpeCA9ICcnLFxuICBzdWZmaXg6IHN0cmluZyA9IG5hbWUudG9VcHBlckNhc2UoKSxcbiAgcHJpbWFyeUtleUN1cnZlOiBLZXlDdXJ2ZSA9IEtleUN1cnZlLlNlY3AyNTZrMVxuKSB7XG4gIHJldHVybiBPYmplY3QuZnJlZXplKFxuICAgIG5ldyBLQVNDb2luKHtcbiAgICAgIGlkLFxuICAgICAgbmFtZSxcbiAgICAgIGZ1bGxOYW1lLFxuICAgICAgbmV0d29yayxcbiAgICAgIHByZWZpeCxcbiAgICAgIHN1ZmZpeCxcbiAgICAgIGZlYXR1cmVzLFxuICAgICAgYXNzZXQsXG4gICAgICBwcmltYXJ5S2V5Q3VydmUsXG4gICAgfSlcbiAgKTtcbn1cbiJdfQ==
@@ -1457,6 +1457,18 @@ declare class HypeEVM extends Mainnet implements EthereumNetwork {
1457
1457
  walletImplementationAddress: string;
1458
1458
  batcherContractAddress: string;
1459
1459
  }
1460
+ declare class Hyperliquid extends Mainnet implements AccountNetwork {
1461
+ name: string;
1462
+ family: CoinFamily;
1463
+ explorerUrl: string;
1464
+ accountExplorerUrl: string;
1465
+ }
1466
+ declare class HyperliquidTestnet extends Testnet implements AccountNetwork {
1467
+ name: string;
1468
+ family: CoinFamily;
1469
+ explorerUrl: string;
1470
+ accountExplorerUrl: string;
1471
+ }
1460
1472
  declare class KavaEVMTestnet extends Testnet implements EthereumNetwork {
1461
1473
  name: string;
1462
1474
  family: CoinFamily;
@@ -1720,6 +1732,26 @@ declare class KaiaTestnet extends Testnet implements EthereumNetwork {
1720
1732
  forwarderImplementationAddress: string;
1721
1733
  walletImplementationAddress: string;
1722
1734
  }
1735
+ /**
1736
+ * Kaspa network interface.
1737
+ * Kaspa is a UTXO-based BlockDAG using GHOSTDAG/Proof-of-Work with bech32m addresses.
1738
+ */
1739
+ export interface KaspaNetwork extends BaseNetwork {
1740
+ /** bech32m Human-Readable Part ('kaspa' for mainnet, 'kaspatest' for testnet) */
1741
+ readonly hrp: string;
1742
+ }
1743
+ export declare class KaspaMainnet extends Mainnet implements KaspaNetwork {
1744
+ name: string;
1745
+ family: CoinFamily;
1746
+ explorerUrl: string;
1747
+ hrp: string;
1748
+ }
1749
+ export declare class KaspaTestnet extends Testnet implements KaspaNetwork {
1750
+ name: string;
1751
+ family: CoinFamily;
1752
+ explorerUrl: string;
1753
+ hrp: string;
1754
+ }
1723
1755
  declare class Irys extends Mainnet implements EthereumNetwork {
1724
1756
  name: string;
1725
1757
  family: CoinFamily;
@@ -2376,6 +2408,7 @@ export declare const Networks: {
2376
2408
  islm: Readonly<Islm>;
2377
2409
  jovayeth: Readonly<JovayETH>;
2378
2410
  kaia: Readonly<Kaia>;
2411
+ kas: Readonly<KaspaMainnet>;
2379
2412
  kavacosmos: Readonly<KavaCosmos>;
2380
2413
  kavaevm: Readonly<KavaEVM>;
2381
2414
  lnbtc: Readonly<LightningBitcoin>;
@@ -2390,6 +2423,7 @@ export declare const Networks: {
2390
2423
  phrs: Readonly<Pharos>;
2391
2424
  ctc: Readonly<Creditcoin>;
2392
2425
  hypeevm: Readonly<HypeEVM>;
2426
+ hyperliquid: Readonly<Hyperliquid>;
2393
2427
  lineaeth: Readonly<LineaETH>;
2394
2428
  oas: Readonly<Oas>;
2395
2429
  og: Readonly<Og>;
@@ -2498,6 +2532,7 @@ export declare const Networks: {
2498
2532
  irys: Readonly<IrysTestnet>;
2499
2533
  islm: Readonly<IslmTestnet>;
2500
2534
  jovayeth: Readonly<JovayETHTestnet>;
2535
+ kas: Readonly<KaspaTestnet>;
2501
2536
  kavacosmos: Readonly<KavaCosmosTestnet>;
2502
2537
  kavaevm: Readonly<KavaEVMTestnet>;
2503
2538
  kovan: Readonly<Kovan>;
@@ -2513,6 +2548,7 @@ export declare const Networks: {
2513
2548
  phrs: Readonly<PharosTestnet>;
2514
2549
  ctc: Readonly<CreditcoinTestnet>;
2515
2550
  hypeevm: Readonly<HypeEVMTestnet>;
2551
+ hyperliquid: Readonly<HyperliquidTestnet>;
2516
2552
  lineaeth: Readonly<LineaETHTestnet>;
2517
2553
  oas: Readonly<OasTestnet>;
2518
2554
  og: Readonly<OgTestnet>;