@bitgo/statics 58.46.0 → 58.48.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/account.d.ts +1 -1
- package/dist/src/account.d.ts.map +1 -1
- package/dist/src/allCoinsAndTokens.d.ts.map +1 -1
- package/dist/src/allCoinsAndTokens.js +65 -37
- package/dist/src/base.d.ts +123 -0
- package/dist/src/base.d.ts.map +1 -1
- package/dist/src/base.js +125 -1
- package/dist/src/coinFeatures.d.ts +12 -12
- package/dist/src/coinFeatures.d.ts.map +1 -1
- package/dist/src/coins/avaxTokens.d.ts.map +1 -1
- package/dist/src/coins/avaxTokens.js +3 -1
- package/dist/src/coins/botOfcTokens.d.ts.map +1 -1
- package/dist/src/coins/botOfcTokens.js +3 -1
- package/dist/src/coins/botTokens.d.ts.map +1 -1
- package/dist/src/coins/botTokens.js +16 -1
- package/dist/src/coins/bscTokens.d.ts.map +1 -1
- package/dist/src/coins/bscTokens.js +6 -1
- package/dist/src/coins/cantonTokens.js +2 -2
- package/dist/src/coins/erc20Coins.d.ts.map +1 -1
- package/dist/src/coins/erc20Coins.js +4 -1
- package/dist/src/coins/hoodethTokens.d.ts +2 -0
- package/dist/src/coins/hoodethTokens.d.ts.map +1 -0
- package/dist/src/coins/hoodethTokens.js +114 -0
- package/dist/src/coins/ofcCoins.d.ts.map +1 -1
- package/dist/src/coins/ofcCoins.js +43 -7
- package/dist/src/coins/ofcErc20Coins.d.ts.map +1 -1
- package/dist/src/coins/ofcErc20Coins.js +6 -29
- package/dist/src/coins/ofcHoodethTokens.d.ts +2 -0
- package/dist/src/coins/ofcHoodethTokens.d.ts.map +1 -0
- package/dist/src/coins/ofcHoodethTokens.js +112 -0
- package/dist/src/coins/polygonTokens.d.ts.map +1 -1
- package/dist/src/coins/polygonTokens.js +5 -1
- package/dist/src/coins/solTokens.d.ts.map +1 -1
- package/dist/src/coins/solTokens.js +18 -2
- package/dist/src/coins.d.ts.map +1 -1
- package/dist/src/coins.js +14 -2
- package/dist/src/map.d.ts +8 -0
- package/dist/src/map.d.ts.map +1 -1
- package/dist/src/map.js +37 -9
- package/dist/src/networks.d.ts.map +1 -1
- package/dist/src/networks.js +10 -10
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
package/dist/src/coins.d.ts.map
CHANGED
|
@@ -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,mBAAmB,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC3F,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;
|
|
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;AAShC,eAAO,MAAM,KAAK,SAOhB,CAAC;AA2BH,wBAAgB,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,SAAS,CAySjF;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,CAmE1G;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,CA6BT;AAED,wBAAgB,oCAAoC,CAClD,WAAW,EAAE,qBAAqB,GACjC,QAAQ,CAAC,QAAQ,CAAC,GAAG,SAAS,CAwBhC"}
|
package/dist/src/coins.js
CHANGED
|
@@ -14,12 +14,14 @@ const map_1 = require("./map");
|
|
|
14
14
|
const networks_1 = require("./networks");
|
|
15
15
|
const networkFeatureMapForTokens_1 = require("./networkFeatureMapForTokens");
|
|
16
16
|
const ofcErc20Coins_1 = require("./coins/ofcErc20Coins");
|
|
17
|
+
const ofcHoodethTokens_1 = require("./coins/ofcHoodethTokens");
|
|
17
18
|
const ofcCoins_1 = require("./coins/ofcCoins");
|
|
18
19
|
const allCoinsAndTokens_1 = require("./allCoinsAndTokens");
|
|
19
20
|
const botOfcTokens_1 = require("./coins/botOfcTokens");
|
|
20
21
|
exports.coins = map_1.CoinMap.fromCoins([
|
|
21
22
|
...allCoinsAndTokens_1.allCoinsAndTokens,
|
|
22
23
|
...ofcErc20Coins_1.ofcErc20Coins,
|
|
24
|
+
...ofcHoodethTokens_1.ofcHoodethTokens,
|
|
23
25
|
...ofcErc20Coins_1.tOfcErc20Coins,
|
|
24
26
|
...ofcCoins_1.ofcCoins,
|
|
25
27
|
...botOfcTokens_1.botOfcTokens,
|
|
@@ -365,6 +367,9 @@ function createTokenMapUsingConfigDetails(tokenConfigMap) {
|
|
|
365
367
|
exports.coins.forEach((coin, coinName) => {
|
|
366
368
|
BaseCoins.set(coinName, coin);
|
|
367
369
|
});
|
|
370
|
+
// Accumulates both static and already-accepted AMS tokens so AMS-vs-AMS contract address
|
|
371
|
+
// conflicts are caught in addition to static-vs-AMS conflicts.
|
|
372
|
+
const accumulatedMap = map_1.CoinMap.fromCoins(Array.from(BaseCoins.values()));
|
|
368
373
|
// add the tokens not present in the static coin map
|
|
369
374
|
for (const tokenConfigs of Object.values(tokenConfigMap)) {
|
|
370
375
|
if (!tokenConfigs.length)
|
|
@@ -373,8 +378,15 @@ function createTokenMapUsingConfigDetails(tokenConfigMap) {
|
|
|
373
378
|
if (!isCoinPresentInCoinMap({ ...tokenConfig }) && !nftAndOtherTokens.has(tokenConfig.name)) {
|
|
374
379
|
try {
|
|
375
380
|
const token = createToken(tokenConfig);
|
|
376
|
-
|
|
381
|
+
// A token whose name is absent from the accumulated map can still reuse a contract address
|
|
382
|
+
// (or NFT collection id) already claimed by a static or previously-accepted AMS token.
|
|
383
|
+
// Adding it would make the final CoinMap.fromCoins throw, so skip it instead.
|
|
384
|
+
if (token && !accumulatedMap.hasTokenAddressConflict(token)) {
|
|
377
385
|
BaseCoins.set(token.name, token);
|
|
386
|
+
accumulatedMap.addCoin(token);
|
|
387
|
+
}
|
|
388
|
+
else if (token) {
|
|
389
|
+
console.warn(`Skipping token with conflicting contract address or NFT collection id: name="${tokenConfig.name}" id="${tokenConfig.id}"`);
|
|
378
390
|
}
|
|
379
391
|
}
|
|
380
392
|
catch (e) {
|
|
@@ -458,4 +470,4 @@ function createTokenUsingTrimmedConfigDetails(tokenConfig) {
|
|
|
458
470
|
return createToken(fullTokenConfig);
|
|
459
471
|
}
|
|
460
472
|
}
|
|
461
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29pbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29pbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBMkVBLGtDQXlTQztBQTZERCx3REFFQztBQUVELDRFQXVEQztBQVlELDBEQWlCQztBQUVELDBGQStCQztBQUVELG9GQTBCQztBQXRrQkQsdUNBOEJtQjtBQUNuQiwrQkFBaUM7QUFDakMsaUNBQTREO0FBRTVELCtCQUFnQztBQUNoQyx5Q0FBa0Y7QUFDbEYsNkVBQWtFO0FBQ2xFLHlEQUFzRTtBQUN0RSwrQ0FBNEM7QUFDNUMsMkRBQXdEO0FBQ3hELHVEQUFvRDtBQUV2QyxRQUFBLEtBQUssR0FBRyxhQUFPLENBQUMsU0FBUyxDQUFDO0lBQ3JDLEdBQUcscUNBQWlCO0lBQ3BCLEdBQUcsNkJBQWE7SUFDaEIsR0FBRyw4QkFBYztJQUNqQixHQUFHLG1CQUFRO0lBQ1gsR0FBRywyQkFBWTtDQUNoQixDQUFDLENBQUM7QUFFSCxpRkFBaUY7QUFDakYsZ0RBQWdEO0FBQ2hELE1BQU0sbUJBQW1CLEdBQTJCLEVBQUUsQ0FBQztBQUV2RCxxQ0FBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtJQUNqQyxJQUNFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGtCQUFXLENBQUMsY0FBYyxDQUFDO1FBQ2xELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLHNCQUFXLENBQUMsT0FBTztRQUN6QyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQ2IsQ0FBQztRQUNELG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQy9DLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVILE1BQU0sb0JBQW9CLEdBQTJCLEVBQUUsQ0FBQztBQUN4RCxxQ0FBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtJQUNqQyxJQUNFLElBQUks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QUFDO1lBQ3ZELEdBQUcsQ0FBQyxXQUFXLENBQUMsa0JBQWtCLElBQUksRUFBRSxDQUFDO1NBQzFDLENBQUMsQ0FBQztRQUNILFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUM3RSxlQUFlLEdBQUcsRUFBRSxHQUFHLFdBQVcsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxPQUFPLEVBQW9CLENBQUM7UUFDaEcsT0FBTyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDdEMsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBhbGdvVG9rZW4sXG4gIGFwdE5GVENvbGxlY3Rpb24sXG4gIGFwdFRva2VuLFxuICBhcmJldGhFcmMyMCxcbiAgYXZheEVyYzIwLFxuICBiZXJhRXJjMjAsXG4gIGJzY1Rva2VuLFxuICBjZWxvVG9rZW4sXG4gIGNvc21vc1Rva2VuLFxuICBlb3NUb2tlbixcbiAgZXJjMjAsXG4gIGhlZGVyYVRva2VuLFxuICBqZXR0b25Ub2tlbixcbiAgbmVwMTQxVG9rZW4sXG4gIG9wZXRoRXJjMjAsXG4gIHBvbHlnb25FcmMyMCxcbiAgcG9seXhUb2tlbixcbiAgc2lwMTBUb2tlbixcbiAgc29sVG9rZW4sXG4gIHN0ZWxsYXJUb2tlbixcbiAgc3VpVG9rZW4sXG4gIHRhb1Rva2VuLFxuICB0cm9uVG9rZW4sXG4gIHZldE5GVENvbGxlY3Rpb24sXG4gIHZldFRva2VuLFxuICB4cnBUb2tlbixcbiAgYWRhVG9rZW4sXG4gIGVyYzIwVG9rZW4sXG4gIGVyYzcyMVRva2VuLFxufSBmcm9tICcuL2FjY291bnQnO1xuaW1wb3J0IHsgb2ZjVG9rZW4gfSBmcm9tICcuL29mYyc7XG5pbXBvcnQgeyBCYXNlQ29pbiwgQ29pbkZlYXR1cmUsIER5bmFtaWNDb2luIH0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7IEFtc05ldHdvcmtDb25maWdNYXAsIEFtc1Rva2VuQ29uZmlnLCBUcmltbWVkQW1zVG9rZW5Db25maWcgfSBmcm9tICcuL3Rva2VuQ29uZmlnJztcbmltcG9ydCB7IENvaW5NYXAgfSBmcm9tICcuL21hcCc7XG5pbXBvcnQgeyBCYXNlTmV0d29yaywgZ2V0TmV0d29yaywgZ2V0TmV0d29ya3NNYXAsIE5ldHdvcmtUeXBlIH0gZnJvbSAnLi9uZXR3b3Jrcyc7XG5pbXBvcnQgeyBnZXROZXR3b3JrRmVhdHVyZXMgfSBmcm9tICcuL25ldHdvcmtGZWF0dXJlTWFwRm9yVG9rZW5zJztcbmltcG9ydCB7IG9mY0VyYzIwQ29pbnMsIHRPZmNFcmMyMENvaW5zIH0gZnJvbSAnLi9jb2lucy9vZmNFcmMyMENvaW5zJztcbmltcG9ydCB7IG9mY0NvaW5zIH0gZnJvbSAnLi9jb2lucy9vZmNDb2lucyc7XG5pbXBvcnQgeyBhbGxDb2luc0FuZFRva2VucyB9IGZyb20gJy4vYWxsQ29pbnNBbmRUb2tlbnMnO1xuaW1wb3J0IHsgYm90T2ZjVG9rZW5zIH0gZnJvbSAnLi9jb2lucy9ib3RPZmNUb2tlbnMnO1xuXG5leHBvcnQgY29uc3QgY29pbnMgPSBDb2luTWFwLmZyb21Db2lucyhbXG4gIC4uLmFsbENvaW5zQW5kVG9rZW5zLFxuICAuLi5vZmNFcmMyMENvaW5zLFxuICAuLi50T2ZjRXJjMjBDb2lucyxcbiAgLi4ub2ZjQ29pbnMsXG4gIC4uLmJvdE9mY1Rva2Vucyxcbl0pO1xuXG4vLyBCdWlsZCBhIG1hcCBvZiBFUkMyMC1zdXBwb3J0aW5nIGNoYWluIGZhbWlseSBuYW1lcyB0byB0aGVpciBtYWlubmV0IGNvaW4gbmFtZXNcbi8vIE1hcHMgZmFtaWx5IC0+IGNvaW4gbmFtZSAoZS5nLiwgJ2lwJyAtPiAnaXAnKVxuY29uc3QgZXJjMjBDaGFpblRvTmFtZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG5hbGxDb2luc0FuZFRva2Vucy5mb3JFYWNoKChjb2luKSA9PiB7XG4gIGlmIChcbiAgICBjb2luLmZlYXR1cmVzLmluY2x1ZGVzKENvaW5GZWF0dXJlLlNVUFBPUlRTX0VSQzIwKSAmJlxuICAgIGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUICYmXG4gICAgIWNvaW4uaXNUb2tlblxuICApIHtcbiAgICBlcmMyMENoYWluVG9OYW1lTWFwW2NvaW4uZmFtaWx5XSA9IGNvaW4ubmFtZTtcbiAgfVxufSk7XG5cbmNvbnN0IGVyYzcyMUNoYWluVG9OYW1lTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5hbGxDb2luc0FuZFRva2Vucy5mb3JFYWNoKChjb2luKSA9PiB7XG4gIGlmIChcbiAgICBjb2luLmZlYXR1cmVzLmluY2x1ZGVzKENvaW5GZWF0dXJlLlNVUFBPUlRTX0VSQzcyMSkgJiZcbiAgICBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCAmJlxuICAgICFjb2luLmlzVG9rZW5cbiAgKSB7XG4gICAgZXJjNzIxQ2hhaW5Ub05hbWVNYXBbY29pbi5mYW1pbHldID0gY29pbi5uYW1lO1xuICB9XG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRva2VuKHRva2VuOiBBbXNUb2tlbkNvbmZpZyk6IFJlYWRvbmx5PEJhc2VDb2luPiB8IHVuZGVmaW5lZCB7XG4gIGlmICghdG9rZW4uaXNUb2tlbikge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYnVpbGREeW5hbWljQ29pbih0b2tlbik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybihgRmFpbGVkIHRvIGJ1aWxkIGR5bmFtaWMgY29pbiBmb3IgJHt0b2tlbi5uYW1lfSAoJHt0b2tlbi5pZH0pOmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIGNvbnN0IGluaXRpYWxpemVyTWFwOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICBhbGdvOiBhbGdvVG9rZW4sXG4gICAgYXB0OiBhcHRUb2tlbixcbiAgICBhcmJldGg6IGFyYmV0aEVyYzIwLFxuICAgIGF2YXhjOiBhdmF4RXJjMjAsXG4gICAgYmFzZWV0aDogZXJjMjBUb2tlbixcbiAgICBiZXJhOiBiZXJhRXJjMjAsXG4gICAgZmxvdzogZXJjMjBUb2tlbixcbiAgICBsaW5lYWV0aDogZXJjMjBUb2tlbixcbiAgICBzZWlldm06IGVyYzIwVG9rZW4sXG4gICAgbW9uOiBlcmMyMFRva2VuLFxuICAgIHhkYzogZXJjMjBUb2tlbixcbiAgICBic2M6IGJzY1Rva2VuLFxuICAgIGNlbG86IGNlbG9Ub2tlbixcbiAgICBjb3Ntb3M6IGNvc21vc1Rva2VuLFxuICAgIGV0aDogZXJjMjAsXG4gICAgZW9zOiBlb3NUb2tlbixcbiAgICBoYmFyOiBoZWRlcmFUb2tlbixcbiAgICBuZWFyOiBuZXAxNDFUb2tlbixcbiAgICBvcGV0aDogb3BldGhFcmMyMCxcbiAgICBwb2x5Z29uOiBwb2x5Z29uRXJjMjAsXG4gICAgc29sOiBzb2xUb2tlbixcbiAgICBzdHg6IHNpcDEwVG9rZW4sXG4gICAgc3VpOiBzdWlUb2tlbixcbiAgICB0YW86IHRhb1Rva2VuLFxuICAgIHBvbHl4OiBwb2x5eFRva2VuLFxuICAgIHRyeDogdHJvblRva2VuLFxuICAgIHZldDogdmV0VG9rZW4sXG4gICAgeGxtOiBzdGVsbGFyVG9rZW4sXG4gICAgeHJwOiB4cnBUb2tlbixcbiAgICBvZmM6IG9mY1Rva2VuLFxuICAgIGFkYTogYWRhVG9rZW4sXG4gICAgdG9uOiBqZXR0b25Ub2tlbixcbiAgfTtcblxuICAvLyBFVk0tY29tcGF0aWJsZSBjaGFpbnMgYXJlIGlkZW50aWZpZWQgYnkgYSBudW1lcmljIGNoYWluSWQgb24gdGhlaXIgbmV0d29yayBvYmplY3QuXG4gIGNvbnN0IHRva2VuTmV0d29yayA9IHRva2VuLm5ldHdvcmsgaW5zdGFuY2VvZiBCYXNlTmV0d29yayA/IHRva2VuLm5ldHdvcmsgOiB1bmRlZmluZWQ7XG4gIGlmIChcbiAgICB0b2tlbk5ldHdvcmsgJiZcbiAgICAnY2hhaW5JZCcgaW4gdG9rZW5OZXR3b3JrICYmXG4gICAgdHlwZW9mICh0b2tlbk5ldHdvcmsgYXMgeyBjaGFpbklkPzogdW5rbm93biB9KS5jaGFpbklkID09PSAnbnVtYmVyJ1xuICApIHtcbiAgICBpZiAoIWVyYzIwQ2hhaW5Ub05hbWVNYXBbdG9rZW4uZmFtaWx5XSkge1xuICAgICAgZXJjMjBDaGFpblRvTmFtZU1hcFt0b2tlbi5mYW1pbHldID0gdG9rZW4uZmFtaWx5O1xuICAgIH1cbiAgfVxuXG4gIC8vIGR5bmFtaWNhbGx5IGFkZCBlcmMyMCB0b2tlbiBpbml0aWFsaXplcnMgZm9yIGV0aCBsaWtlIGNoYWlucyB0byB0aGUgaW5pdGlhbGl6ZXIgbWFwXG4gIE9iamVjdC5rZXlzKGVyYzIwQ2hhaW5Ub05hbWVNYXApLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGluaXRpYWxpemVyTWFwW2tleV0gPSBlcmMyMFRva2VuO1xuICB9KTtcblxuICBPYmplY3Qua2V5cyhlcmM3MjFDaGFpblRvTmFtZU1hcCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgaW5pdGlhbGl6ZXJNYXBba2V5XSA9IGVyYzcyMVRva2VuO1xuICB9KTtcblxuICAvL3JldHVybiB0aGUgQmFzZUNvaW4gZnJvbSBkZWZhdWx0IGNvaW4gbWFwIGlmIHByZXNlbnRcbiAgaWYgKGlzQ29pblByZXNlbnRJbkNvaW5NYXAoeyAuLi50b2tlbiB9KSkge1xuICAgIGlmIChjb2lucy5oYXModG9rZW4ubmFtZSkpIHtcbiAgICAgIHJldHVybiBjb2lucy5nZXQodG9rZW4ubmFtZSk7XG4gICAgfVxuICAgIGlmIChjb2lucy5oYXModG9rZW4uaWQpKSB7XG4gICAgICByZXR1cm4gY29pbnMuZ2V0KHRva2VuLmlkKTtcbiAgICB9XG4gICAgaWYgKHRva2VuLmFsaWFzICYmIGNvaW5zLmhhcyh0b2tlbi5hbGlhcykpIHtcbiAgICAgIHJldHVybiBjb2lucy5nZXQodG9rZW4uYWxpYXMpO1xuICAgIH1cbiAgfVxuICBjb25zdCBmYW1pbHkgPSB0b2tlbi5mYW1pbHk7XG4gIGNvbnN0IGluaXRpYWxpemVyID0gaW5pdGlhbGl6ZXJNYXBbZmFtaWx5XSBhcyAoLi4uYXJnczogdW5rbm93bltdKSA9PiBSZWFkb25seTxCYXNlQ29pbj47XG4gIGlmICghaW5pdGlhbGl6ZXIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgY29tbW9uQXJncyA9IFtcbiAgICB0b2tlbi5pZCxcbiAgICB0b2tlbi5uYW1lLFxuICAgIHRva2VuLmZ1bGxOYW1lLFxuICAgIHRva2VuLmRlY2ltYWxQbGFjZXMsXG4gICAgdG9rZW4uYXNzZXQsXG4gICAgdG9rZW4uZmVhdHVyZXMsXG4gICAgdG9rZW4ucHJlZml4LFxuICAgIHRva2VuLnN1ZmZpeCxcbiAgICB0b2tlbi5uZXR3b3JrLFxuICAgIHRva2VuLnByaW1hcnlLZXlDdXJ2ZSxcbiAgXTtcblxuICBzd2l0Y2ggKGZhbWlseSkge1xuICAgIGNhc2UgZXJjMjBDaGFpblRvTmFtZU1hcFtmYW1pbHldOlxuICAgICAgcmV0dXJuIGluaXRpYWxpemVyKFxuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDAsIDQpLCAvLyBpZCwgbmFtZSwgZnVsbE5hbWUsIGRlY2ltYWxQbGFjZXNcbiAgICAgICAgdG9rZW4uY29udHJhY3RBZGRyZXNzIHx8IHRva2VuLnRva2VuQWRkcmVzcywgLy8gY29udHJhY3RBZGRyZXNzXG4gICAgICAgIHRva2VuLmFzc2V0LFxuICAgICAgICB0b2tlbi5uZXR3b3JrLFxuICAgICAgICB0b2tlbi5mZWF0dXJlcyxcbiAgICAgICAgdG9rZW4ucHJlZml4LFxuICAgICAgICB0b2tlbi5zdWZmaXgsXG4gICAgICAgIHRva2VuLnByaW1hcnlLZXlDdXJ2ZVxuICAgICAgKTtcbiAgICBjYXNlIGVyYzcyMUNoYWluVG9OYW1lTWFwW2ZhbWlseV06XG4gICAgICByZXR1cm4gaW5pdGlhbGl6ZXIoXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoMCwgMyksIC8vIGlkLCBuYW1lLCBmdWxsTmFtZVxuICAgICAgICB0b2tlbi5jb250cmFjdEFkZHJlc3MsIC8vIGNvbnRyYWN0QWRkcmVzc1xuICAgICAgICB0b2tlbi5uZXR3b3JrLFxuICAgICAgICB0b2tlbi5mZWF0dXJlcyxcbiAgICAgICAgdG9rZW4ucHJlZml4LFxuICAgICAgICB0b2tlbi5zdWZmaXgsXG4gICAgICAgIHRva2VuLnByaW1hcnlLZXlDdXJ2ZVxuICAgICAgKTtcbiAgICBjYXNlICdhcmJldGgnOlxuICAgIGNhc2UgJ2F2YXhjJzpcbiAgICBjYXNlICdiYXNlZXRoJzpcbiAgICBjYXNlICdiZXJhJzpcbiAgICBjYXNlICdic2MnOlxuICAgIGNhc2UgJ2Zsb3cnOlxuICAgIGNhc2UgJ2xpbmVhZXRoJzpcbiAgICBjYXNlICdzZWlldm0nOlxuICAgIGNhc2UgJ21vbic6XG4gICAgY2FzZSAneGRjJzpcbiAgICBjYXNlICdjZWxvJzpcbiAgICBjYXNlICdldGgnOlxuICAgIGNhc2UgJ29wZXRoJzpcbiAgICBjYXNlICdwb2x5Z29uJzpcbiAgICBjYXNlICd0cngnOlxuICAgICAgcmV0dXJuIGluaXRpYWxpemVyKFxuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDAsIDQpLCAvLyBpZCwgbmFtZSwgZnVsbE5hbWUsIGRlY2ltYWxQbGFjZXNcbiAgICAgICAgdG9rZW4uY29udHJhY3RBZGRyZXNzIHx8IHRva2VuLnRva2VuQWRkcmVzcywgLy8gY29udHJhY3RBZGRyZXNzXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoNCkgLy8gYXNzZXQsIGZlYXR1cmVzLCBwcmVmaXgsIHN1ZmZpeCwgbmV0d29yaywgcHJpbWFyeUtleUN1cnZlXG4gICAgICApO1xuXG4gICAgY2FzZSAnYXB0JzpcbiAgICAgIGNvbnN0IHsgaW5pdEZ1bmMsIG9iamVjdElkIH0gPSBnZXRBcHRUb2tlbkluaXRpYWxpemVyKHRva2VuKTtcbiAgICAgIHJldHVybiBpbml0RnVuYyhcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSgwLCA0KSwgLy8gaWQsIG5hbWUsIGZ1bGxOYW1lLCBkZWNpbWFsUGxhY2VzXG4gICAgICAgIG9iamVjdElkLFxuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDQpIC8vIGFzc2V0LCBmZWF0dXJlcywgcHJlZml4LCBzdWZmaXgsIG5ldHdvcmssIHByaW1hcnlLZXlDdXJ2ZVxuICAgICAgKTtcblxuICAgIGNhc2UgJ3ZldCc6XG4gICAgICBjb25zdCB7IHZldEluaXRGdW5jLCB2ZXRPYmplY3RJZCwgaXNORlQgfSA9IGdldFZldFRva2VuSW5pdGlhbGl6ZXIodG9rZW4pO1xuICAgICAgaWYgKGlzTkZUKSB7XG4gICAgICAgIHJldHVybiB2ZXRJbml0RnVuYyhcbiAgICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDAsIDMpLCAvLyBpZCwgbmFtZSwgZnVsbE5hbWVcbiAgICAgICAgICB2ZXRPYmplY3RJZCxcbiAgICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDQpIC8vIGFzc2V0LCBmZWF0dXJlcywgcHJlZml4LCBzdWZmaXgsIG5ldHdvcmssIHByaW1hcnlLZXlDdXJ2ZVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZldEluaXRGdW5jKFxuICAgICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoMCwgNCksIC8vIGlkLCBuYW1lLCBmdWxsTmFtZSwgZGVjaW1hbFBsYWNlc1xuICAgICAgICAgIHZldE9iamVjdElkLFxuICAgICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoNCkgLy8gYXNzZXQsIGZlYXR1cmVzLCBwcmVmaXgsIHN1ZmZpeCwgbmV0d29yaywgcHJpbWFyeUtleUN1cnZlXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICBjYXNlICdzdHgnOlxuICAgICAgcmV0dXJuIGluaXRpYWxpemVyKFxuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDAsIDQpLCAvLyBpZCwgbmFtZSwgZnVsbE5hbWUsIGRlY2ltYWxQbGFjZXNcbiAgICAgICAgdG9rZW4uYXNzZXRJZCwgLy8gYXNzZXRJZFxuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDQpIC8vIGFzc2V0LCBmZWF0dXJlcywgcHJlZml4LCBzdWZmaXgsIG5ldHdvcmssIHByaW1hcnlLZXlDdXJ2ZVxuICAgICAgKTtcblxuICAgIGNhc2UgJ2FsZ28nOlxuICAgICAgcmV0dXJuIGluaXRpYWxpemVyKFxuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDAsIDIpLCAvLyBpZCwgbmFtZVxuICAgICAgICB0b2tlbi5hbGlhcywgLy8gYWxpYXNcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSgyKSAvLyBmdWxsTmFtZSwgZGVjaW1hbCwgYXNzZXQsIGZlYXR1cmVzLCBwcmVmaXgsIHN1ZmZpeCwgbmV0d29yaywgcHJpbWFyeUtleUN1cnZlXG4gICAgICApO1xuXG4gICAgY2FzZSAnZW9zJzpcbiAgICAgIHJldHVybiBpbml0aWFsaXplcihcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSgwLCA0KSwgLy8gaWQsIG5hbWUsIGZ1bGxOYW1lLCBkZWNpbWFsUGxhY2VzXG4gICAgICAgIHRva2VuLmNvbnRyYWN0TmFtZSwgLy8gY29udHJhY3ROYW1lXG4gICAgICAgIHRva2VuLmNvbnRyYWN0QWRkcmVzcywgLy8gY29udHJhY3RBZGRyZXNzXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoNCwgOCksIC8vIGFzc2V0LCBmZWF0dXJlcywgcHJlZml4LCBzdWZmaXhcbiAgICAgICAgdG9rZW4uc3ltYm9sLCAvLyBzeW1ib2xcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSg4KSAvLyBuZXR3b3JrLCBwcmltYXJ5S2V5Q3VydmVcbiAgICAgICk7XG5cbiAgICBjYXNlICdoYmFyJzpcbiAgICAgIHJldHVybiBpbml0aWFsaXplcihcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSgwLCAzKSwgLy8gaWQsIG5hbWUsIGZ1bGxOYW1lXG4gICAgICAgIHRva2VuLm5ldHdvcmssIC8vIG5ldHdvcmtcbiAgICAgICAgdG9rZW4uZGVjaW1hbFBsYWNlcyxcbiAgICAgICAgdG9rZW4uYXNzZXQsXG4gICAgICAgIHRva2VuLmNvbnRyYWN0QWRkcmVzcywgLy8gY29udHJhY3RBZGRyZXNzXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoNSwgOCksIC8vIGZlYXR1cmVzLCBwcmVmaXgsIHN1ZmZpeFxuICAgICAgICB0b2tlbi5wcmltYXJ5S2V5Q3VydmVcbiAgICAgICk7XG5cbiAgICBjYXNlICdzb2wnOlxuICAgICAgcmV0dXJuIGluaXRpYWxpemVyKFxuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDAsIDQpLCAvLyBpZCwgbmFtZSwgZnVsbE5hbWUsIGRlY2ltYWxQbGFjZXNcbiAgICAgICAgdG9rZW4udG9rZW5BZGRyZXNzLCAvLyB0b2tlbkFkZHJlc3NcbiAgICAgICAgdG9rZW4uY29udHJhY3RBZGRyZXNzLCAvLyBjb250cmFjdEFkZHJlc3NcbiAgICAgICAgdG9rZW4uYXNzZXQsXG4gICAgICAgIHRva2VuLmZlYXR1cmVzLFxuICAgICAgICB0b2tlbi5wcm9ncmFtSWQsXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoNikgLy8gcHJlZml4LCBzdWZmaXgsIG5ldHdvcmssIHByaW1hcnlLZXlDdXJ2ZVxuICAgICAgKTtcblxuICAgIGNhc2UgJ3N1aSc6XG4gICAgICByZXR1cm4gaW5pdGlhbGl6ZXIoXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoMCwgNCksIC8vIGlkLCBuYW1lLCBmdWxsTmFtZSwgZGVjaW1hbFBsYWNlc1xuICAgICAgICB0b2tlbi5wYWNrYWdlSWQsIC8vIHBhY2thZ2VJZFxuICAgICAgICB0b2tlbi5tb2R1bGUsIC8vIG1vZHVsZVxuICAgICAgICB0b2tlbi5zeW1ib2wsIC8vIHN5bWJvbFxuICAgICAgICB0b2tlbi5jb250cmFjdEFkZHJlc3MsIC8vIGNvbnRyYWN0QWRkcmVzc1xuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDQpIC8vIGFzc2V0LCBmZWF0dXJlcywgcHJlZml4LCBzdWZmaXgsIG5ldHdvcmssIHByaW1hcnlLZXlDdXJ2ZVxuICAgICAgKTtcblxuICAgIGNhc2UgJ3Rhbyc6XG4gICAgICByZXR1cm4gaW5pdGlhbGl6ZXIoXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoMCwgNCksIC8vIGlkLCBuYW1lLCBmdWxsTmFtZSwgZGVjaW1hbFBsYWNlc1xuICAgICAgICB0b2tlbi5zdWJuZXRJZCwgLy8gc3VibmV0SWRcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSg0KSAvLyBhc3NldCwgZmVhdHVyZXMsIHByZWZpeCwgc3VmZml4LCBuZXR3b3JrLCBwcmltYXJ5S2V5Q3VydmVcbiAgICAgICk7XG4gICAgY2FzZSAncG9seXgnOlxuICAgICAgcmV0dXJuIGluaXRpYWxpemVyKFxuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDAsIDQpLCAvLyBpZCwgbmFtZSwgZnVsbE5hbWUsIGRlY2ltYWxQbGFjZXNcbiAgICAgICAgdG9rZW4udGlja2VyLCAvLyB0aWNrZXJcbiAgICAgICAgdG9rZW4uYXNzZXRJZCwgLy8gYXNzZXRJZFxuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDQpIC8vIGFzc2V0LCBmZWF0dXJlcywgcHJlZml4LCBzdWZmaXgsIG5ldHdvcmssIHByaW1hcnlLZXlDdXJ2ZVxuICAgICAgKTtcblxuICAgIGNhc2UgJ3hsbSc6XG4gICAgICByZXR1cm4gaW5pdGlhbGl6ZXIoXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoMCwgNSksIC8vIGlkLCBuYW1lLCBmdWxsTmFtZSwgZGVjaW1hbFBsYWNlcywgYXNzZXRcbiAgICAgICAgdG9rZW4uZG9tYWluLCAvLyBkb21haW5cbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSg1KSAvLyBmZWF0dXJlcywgcHJlZml4LCBzdWZmaXgsIG5ldHdvcmssIHByaW1hcnlLZXlDdXJ2ZVxuICAgICAgKTtcblxuICAgIGNhc2UgJ3hycCc6XG4gICAgICByZXR1cm4gaW5pdGlhbGl6ZXIoXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoMCwgNCksIC8vIGlkLCBuYW1lLCBmdWxsTmFtZSwgZGVjaW1hbFBsYWNlc1xuICAgICAgICB0b2tlbi5pc3N1ZXJBZGRyZXNzLCAvLyBpc3N1ZXJBZGRyZXNzXG4gICAgICAgIHRva2VuLmN1cnJlY255Y29kZSwgLy8gY3VycmVuY3lDb2RlXG4gICAgICAgIHRva2VuLmNvbnRyYWN0QWRkcmVzcywgLy8gY29udHJhY3RBZGRyZXNzXG4gICAgICAgIHRva2VuLmRvbWFpbiwgLy8gZG9tYWluXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoNCkgLy8gYXNzZXQsIGZlYXR1cmVzLCBwcmVmaXgsIHN1ZmZpeCwgbmV0d29yaywgcHJpbWFyeUtleUN1cnZlXG4gICAgICApO1xuICAgIGNhc2UgJ29mYyc6XG4gICAgICByZXR1cm4gaW5pdGlhbGl6ZXIoXG4gICAgICAgIC4uLmNvbW1vbkFyZ3MsIC8vIGlkLCBuYW1lLCBmdWxsTmFtZSwgZGVjaW1hbFBsYWNlcywgYXNzZXQsIHByZWZpeCwgc3VmZml4LCBuZXR3b3JrLCBwcmltYXJ5S2V5Q3VydmVcbiAgICAgICAgdG9rZW4uYmFzZVVuaXQsIC8vIGJhc2VVbml0XG4gICAgICAgIHRva2VuLmlzVG9rZW4sIC8vIGlzVG9rZW5cbiAgICAgICAgdG9rZW4ua2luZCwgLy8ga2luZFxuICAgICAgICB0b2tlbi5hZGRyZXNzQ29pbiAvLyBhZGRyZXNzQ29pblxuICAgICAgKTtcbiAgICBjYXNlICdhc2knOlxuICAgIGNhc2UgJ2F0b20nOlxuICAgIGNhc2UgJ2JhYnknOlxuICAgIGNhc2UgJ2JsZCc6XG4gICAgY2FzZSAnY29yZXVtJzpcbiAgICBjYXNlICdjcm9ub3MnOlxuICAgIGNhc2UgJ2hhc2gnOlxuICAgIGNhc2UgJ2luamVjdGl2ZSc6XG4gICAgY2FzZSAnaW5pdGlhJzpcbiAgICBjYXNlICdvc21vJzpcbiAgICBjYXNlICd0aG9yJzpcbiAgICBjYXNlICdzZWknOlxuICAgIGNhc2UgJ3RpYSc6XG4gICAgY2FzZSAnemV0YSc6XG4gICAgICByZXR1cm4gaW5pdGlhbGl6ZXIoXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoMCwgMyksIC8vIGlkLCBuYW1lLCBmdWxsTmFtZVxuICAgICAgICB0b2tlbi5kZW5vbSwgLy8gZGVub21cbiAgICAgICAgdG9rZW4uZGVjaW1hbFBsYWNlcywgLy8gZGVjaW1hbFBsYWNlc1xuICAgICAgICB0b2tlbi5uZXR3b3JrLCAvLyBuZXR3b3JrXG4gICAgICAgIHRva2VuLmJhc2VVbml0LCAvLyBiYXNlVW5pdFxuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDQsIDgpLCAvLyBhc3NldCwgZmVhdHVyZXMsIHByZWZpeCwgc3VmZml4XG4gICAgICAgIHRva2VuLnByaW1hcnlLZXlDdXJ2ZSAvLyBwcmltYXJ5S2V5Q3VydmVcbiAgICAgICk7XG4gICAgY2FzZSAnYWRhJzpcbiAgICAgIHJldHVybiBpbml0aWFsaXplcihcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSgwLCA0KSwgLy8gaWQsIG5hbWUsIGZ1bGxOYW1lLCBkZWNpbWFsUGxhY2VzXG4gICAgICAgIHRva2VuLmFzc2V0TmFtZSxcbiAgICAgICAgdG9rZW4ucG9saWN5SWQsXG4gICAgICAgIHRva2VuLmNvbnRyYWN0QWRkcmVzcyxcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSg0KSAvLyBhc3NldCwgZmVhdHVyZXMsIHByZWZpeCwgc3VmZml4LCBuZXR3b3JrLCBwcmltYXJ5S2V5Q3VydmVcbiAgICAgICk7XG4gICAgY2FzZSAndG9uJzpcbiAgICAgIHJldHVybiBpbml0aWFsaXplcihcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSgwLCA0KSwgLy8gaWQsIG5hbWUsIGZ1bGxOYW1lLCBkZWNpbWFsUGxhY2VzXG4gICAgICAgIHRva2VuLmNvbnRyYWN0QWRkcmVzcywgLy8gY29udHJhY3RBZGRyZXNzXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoNCkgLy8gYXNzZXQsIGZlYXR1cmVzLCBwcmVmaXgsIHN1ZmZpeCwgbmV0d29yaywgcHJpbWFyeUtleUN1cnZlXG4gICAgICApO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogQnVpbGQgYSByZWFsIER5bmFtaWNDb2luICsgRHluYW1pY05ldHdvcmsgaW5zdGFuY2UgZm9yIEFNUy1kaXNjb3ZlcmVkIGJhc2UgY2hhaW5zXG4gKiB3aG9zZSBmYW1pbHkgaXMgbm90IHlldCByZWdpc3RlcmVkIGluIHRoZSBTREsncyBpbml0aWFsaXplck1hcC5cbiAqIENhbGxlZCBmcm9tIGNyZWF0ZVRva2VuKCkgYXMgYSBmYWxsYmFjayB3aGVuIG5vIGluaXRpYWxpemVyIGV4aXN0cyBhbmQgaXNUb2tlbiBpcyBmYWxzZS5cbiAqL1xuZnVuY3Rpb24gYnVpbGREeW5hbWljQ29pbih0b2tlbjogQW1zVG9rZW5Db25maWcpOiBSZWFkb25seTxCYXNlQ29pbj4ge1xuICBjb25zdCBuZXR3b3JrID0gdG9rZW4ubmV0d29yayBpbnN0YW5jZW9mIEJhc2VOZXR3b3JrID8gdG9rZW4ubmV0d29yayA6IGdldE5ldHdvcmsodG9rZW4ubmV0d29yayBhcyBzdHJpbmcpO1xuXG4gIHJldHVybiBPYmplY3QuZnJlZXplKFxuICAgIG5ldyBEeW5hbWljQ29pbih7XG4gICAgICBpZDogdG9rZW4uaWQsXG4gICAgICBuYW1lOiB0b2tlbi5uYW1lLFxuICAgICAgZnVsbE5hbWU6IHRva2VuLmZ1bGxOYW1lLFxuICAgICAgZGVjaW1hbFBsYWNlczogdG9rZW4uZGVjaW1hbFBsYWNlcyxcbiAgICAgIGFzc2V0OiB0b2tlbi5hc3NldCBhcyBzdHJpbmcsXG4gICAgICBpc1Rva2VuOiB0b2tlbi5pc1Rva2VuLFxuICAgICAgZmVhdHVyZXM6ICh0b2tlbi5mZWF0dXJlcyA/PyBbXSkgYXMgc3RyaW5nW10sXG4gICAgICBuZXR3b3JrLFxuICAgICAgcHJpbWFyeUtleUN1cnZlOiAodG9rZW4ucHJpbWFyeUtleUN1cnZlIGFzIHN0cmluZykgPz8gJ3NlY3AyNTZrMScsXG4gICAgICBwcmVmaXg6IHRva2VuLnByZWZpeCA/PyAnJyxcbiAgICAgIHN1ZmZpeDogdG9rZW4uc3VmZml4ID8/IHRva2VuLm5hbWUudG9VcHBlckNhc2UoKSxcbiAgICAgIGJhc2VVbml0OiAodG9rZW4uYmFzZVVuaXQgYXMgc3RyaW5nKSA/PyAnJyxcbiAgICAgIGtpbmQ6ICh0b2tlbi5raW5kIGFzIHN0cmluZykgPz8gJ2NyeXB0bycsXG4gICAgICBhbGlhczogdG9rZW4uYWxpYXMsXG4gICAgfSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0QXB0VG9rZW5Jbml0aWFsaXplcih0b2tlbjogQW1zVG9rZW5Db25maWcpIHtcbiAgaWYgKHRva2VuLmFzc2V0SWQpIHtcbiAgICAvLyB1c2VkIGZvciBmdW5naWJsZS1hc3NldHMgLyBsZWdhY3kgY29pbnMgZXRjLlxuICAgIHJldHVybiB7XG4gICAgICBpbml0RnVuYzogYXB0VG9rZW4gYXMgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gUmVhZG9ubHk8QmFzZUNvaW4+LFxuICAgICAgb2JqZWN0SWQ6IHRva2VuLmFzc2V0SWQsXG4gICAgfTtcbiAgfVxuICAvLyB1c2VkIGZvciBub24tZnVuZ2libGUgdG9rZW4gKE5GVCkgY29sbGVjdGlvbnNcbiAgcmV0dXJuIHtcbiAgICBpbml0RnVuYzogYXB0TkZUQ29sbGVjdGlvbiBhcyAoLi4uYXJnczogdW5rbm93bltdKSA9PiBSZWFkb25seTxCYXNlQ29pbj4sXG4gICAgb2JqZWN0SWQ6IHRva2VuLm5mdENvbGxlY3Rpb25JZCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0VmV0VG9rZW5Jbml0aWFsaXplcih0b2tlbjogQW1zVG9rZW5Db25maWcpIHtcbiAgaWYgKHRva2VuLm5mdENvbGxlY3Rpb25JZCkge1xuICAgIHJldHVybiB7XG4gICAgICB2ZXRJbml0RnVuYzogdmV0TkZUQ29sbGVjdGlvbiBhcyAoLi4uYXJnczogdW5rbm93bltdKSA9PiBSZWFkb25seTxCYXNlQ29pbj4sXG4gICAgICB2ZXRPYmplY3RJZDogdG9rZW4ubmZ0Q29sbGVjdGlvbklkLFxuICAgICAgaXNORlQ6IHRydWUsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdmV0SW5pdEZ1bmM6IHZldFRva2VuIGFzICguLi5hcmdzOiB1bmtub3duW10pID0+IFJlYWRvbmx5PEJhc2VDb2luPixcbiAgICB2ZXRPYmplY3RJZDogdG9rZW4uY29udHJhY3RBZGRyZXNzLFxuICAgIGlzTkZUOiBmYWxzZSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29pblByZXNlbnRJbkNvaW5NYXAoeyBuYW1lLCBpZCwgYWxpYXMgfTogeyBuYW1lOiBzdHJpbmc7IGlkPzogc3RyaW5nOyBhbGlhcz86IHN0cmluZyB9KTogYm9vbGVhbiB7XG4gIHJldHVybiBCb29sZWFuKGNvaW5zLmhhcyhuYW1lKSB8fCAoaWQgJiYgY29pbnMuaGFzKGlkKSkgfHwgKGFsaWFzICYmIGNvaW5zLmhhcyhhbGlhcykpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRva2VuTWFwVXNpbmdDb25maWdEZXRhaWxzKHRva2VuQ29uZmlnTWFwOiBSZWNvcmQ8c3RyaW5nLCBBbXNUb2tlbkNvbmZpZ1tdPik6IENvaW5NYXAge1xuICBjb25zdCBCYXNlQ29pbnM6IE1hcDxzdHJpbmcsIFJlYWRvbmx5PEJhc2VDb2luPj4gPSBuZXcgTWFwKCk7XG5cbiAgY29uc3QgbmZ0QW5kT3RoZXJUb2tlbnMgPSBuZXcgU2V0KFtcbiAgICAnZXJjNzIxOmJzY3Rva2VuJyxcbiAgICAndGVyYzcyMTpic2N0b2tlbicsXG4gICAgJ2VyYzExNTU6YnNjdG9rZW4nLFxuICAgICd0ZXJjMTE1NTpic2N0b2tlbicsXG4gICAgJ2VyYzcyMTp3aXRjaCcsXG4gICAgJ2VyYzcyMTp0b2tlbicsXG4gICAgJ2VyYzExNTU6dG9rZW4nLFxuICAgICdub25zdGFuZGFyZDp0b2tlbicsXG4gICAgJ3RlcmM3MjE6dG9rZW4nLFxuICAgICd0ZXJjMTE1NTp0b2tlbicsXG4gICAgJ3Rub25zdGFuZGFyZDp0b2tlbicsXG4gICAgJ3RlcmM3MjE6Yml0Z29lcmM3MjEnLFxuICAgICd0ZXJjMTE1NTpiaXRnb2VyYzExNTUnLFxuICAgICd0ZXJjNzIxOmhvb2RpZGonLFxuICAgICdlcmM3MjE6cG9seWdvbnRva2VuJyxcbiAgICAnZXJjMTE1NTpwb2x5Z29udG9rZW4nLFxuICAgICd0ZXJjNzIxOnBvbHlnb250b2tlbicsXG4gICAgJ3RlcmMxMTU1OnBvbHlnb250b2tlbicsXG4gICAgJ2VyYzcyMTpzb25laXVtdG9rZW4nLFxuICAgICdlcmMxMTU1OnNvbmVpdW10b2tlbicsXG4gICAgJ3RlcmM3MjE6c29uZWl1bXRva2VuJyxcbiAgICAndGVyYzExNTU6c29uZWl1bXRva2VuJyxcbiAgXSk7XG5cbiAgLy8gQWRkIGFsbCB0aGUgY29pbnMgZnJvbSBzdGF0aWNzIGNvaW4gbWFwIGZpcnN0XG4gIGNvaW5zLmZvckVhY2goKGNvaW4sIGNvaW5OYW1lKSA9PiB7XG4gICAgQmFzZUNvaW5zLnNldChjb2luTmFtZSwgY29pbik7XG4gIH0pO1xuXG4gIC8vIGFkZCB0aGUgdG9rZW5zIG5vdCBwcmVzZW50IGluIHRoZSBzdGF0aWMgY29pbiBtYXBcbiAgZm9yIChjb25zdCB0b2tlbkNvbmZpZ3Mgb2YgT2JqZWN0LnZhbHVlcyh0b2tlbkNvbmZpZ01hcCkpIHtcbiAgICBpZiAoIXRva2VuQ29uZmlncy5sZW5ndGgpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHRva2VuQ29uZmlnID0gdG9rZW5Db25maWdzWzBdO1xuXG4gICAgaWYgKCFpc0NvaW5QcmVzZW50SW5Db2luTWFwKHsgLi4udG9rZW5Db25maWcgfSkgJiYgIW5mdEFuZE90aGVyVG9rZW5zLmhhcyh0b2tlbkNvbmZpZy5uYW1lKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSBjcmVhdGVUb2tlbih0b2tlbkNvbmZpZyk7XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgIEJhc2VDb2lucy5zZXQodG9rZW4ubmFtZSwgdG9rZW4pO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgU2tpcHBpbmcgbWFsZm9ybWVkIHRva2VuOiBuYW1lPVwiJHt0b2tlbkNvbmZpZy5uYW1lfVwiIGlkPVwiJHt0b2tlbkNvbmZpZy5pZH1cIiBmYW1pbHk9XCIke1xuICAgICAgICAgICAgdG9rZW5Db25maWcuZmFtaWx5XG4gICAgICAgICAgfVwiIGVycm9yPSR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBDb2luTWFwLmZyb21Db2lucyhBcnJheS5mcm9tKEJhc2VDb2lucy52YWx1ZXMoKSkpO1xufVxuXG4vKipcbiAqIEVucmljaCBiYXNlIGNoYWluIGNvaW5zIChpc1Rva2VuPWZhbHNlKSB3aXRoIGZlYXR1cmVzIGZyb20gdGhlIEFNUyBuZXR3b3JrcyBtYXAuXG4gKlxuICogY3JlYXRlVG9rZW5NYXBVc2luZ1RyaW1tZWRDb25maWdEZXRhaWxzIHJlYWRzIGZlYXR1cmVzIGZvciBiYXNlIGNoYWlucyBmcm9tXG4gKiBUcmltbWVkQW1zVG9rZW5Db25maWcuYWRkaXRpb25hbEZlYXR1cmVzLiBUaGUgYXNzZXRzTGlzdCBlbmRwb2ludCByZXR1cm5zIGJhc2UgY2hhaW5zIHdpdGggbm8gZmVhdHVyZXM7XG4gKiBmZWF0dXJlcyBhcmUgaW4gdGhlIG5ldHdvcmtzIGVuZHBvaW50ICgvYXBpL3YxL25ldHdvcmtzLzpuZXR3b3JrKSwgbWF0Y2hlZCBieSBjb2luLm5ldHdvcmsubmFtZSA9PT0gbmV0d29ya3NFbnRyeS5uYW1lLlxuICpcbiAqIENvaW5zIHRoYXQgYWxyZWFkeSBoYXZlIGFkZGl0aW9uYWxGZWF0dXJlcyBkZWZpbmVkIGFyZSBsZWZ0IHVuY2hhbmdlZC5cbiAqIENvaW5zIHdob3NlIG5ldHdvcmsubmFtZSBoYXMgbm8gbWF0Y2ggaW4gbmV0d29ya3NNYXAgYXJlIGxlZnQgdW5jaGFuZ2VkIChlbXB0eSBmZWF0dXJlcykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbnJpY2hCYXNlQ2hhaW5GZWF0dXJlcyhcbiAgY29pblRva2VuTWFwOiBSZWNvcmQ8c3RyaW5nLCBUcmltbWVkQW1zVG9rZW5Db25maWdbXT4sXG4gIG5ldHdvcmtzTWFwOiBBbXNOZXR3b3JrQ29uZmlnTWFwXG4pOiBSZWNvcmQ8c3RyaW5nLCBUcmltbWVkQW1zVG9rZW5Db25maWdbXT4ge1xuICBjb25zdCBmZWF0dXJlc0J5TmV0d29ya05hbWUgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nW10+KFxuICAgIE9iamVjdC52YWx1ZXMobmV0d29ya3NNYXApLm1hcCgobmV0KTogW3N0cmluZywgc3RyaW5nW11dID0+IFtuZXQubmFtZSwgbmV0LmZlYXR1cmVzXSlcbiAgKTtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhjb2luVG9rZW5NYXApLm1hcCgoW2tleSwgY29pbnNdKSA9PiBbXG4gICAgICBrZXksXG4gICAgICBjb2lucy5tYXAoKGNvaW4pID0+IHtcbiAgICAgICAgaWYgKGNvaW4uaXNUb2tlbiB8fCBjb2luLmFkZGl0aW9uYWxGZWF0dXJlcyAhPT0gdW5kZWZpbmVkIHx8IGNvaW4ubmV0d29yayA9PT0gdW5kZWZpbmVkKSByZXR1cm4gY29pbjtcbiAgICAgICAgY29uc3QgZmVhdHVyZXMgPSBmZWF0dXJlc0J5TmV0d29ya05hbWUuZ2V0KGNvaW4ubmV0d29yay5uYW1lKTtcbiAgICAgICAgcmV0dXJuIGZlYXR1cmVzICE9PSB1bmRlZmluZWQgPyB7IC4uLmNvaW4sIGFkZGl0aW9uYWxGZWF0dXJlczogZmVhdHVyZXMgfSA6IGNvaW47XG4gICAgICB9KSxcbiAgICBdKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVG9rZW5NYXBVc2luZ1RyaW1tZWRDb25maWdEZXRhaWxzKFxuICByZWR1Y2VkVG9rZW5Db25maWdNYXA6IFJlY29yZDxzdHJpbmcsIFRyaW1tZWRBbXNUb2tlbkNvbmZpZ1tdPlxuKTogQ29pbk1hcCB7XG4gIGNvbnN0IGFtc1Rva2VuQ29uZmlnTWFwOiBSZWNvcmQ8c3RyaW5nLCBBbXNUb2tlbkNvbmZpZ1tdPiA9IHt9O1xuICBjb25zdCBuZXR3b3JrTmFtZU1hcCA9IGdldE5ldHdvcmtzTWFwKCk7XG5cbiAgZm9yIChjb25zdCB0b2tlbkNvbmZpZ3Mgb2YgT2JqZWN0LnZhbHVlcyhyZWR1Y2VkVG9rZW5Db25maWdNYXApKSB7XG4gICAgaWYgKCF0b2tlbkNvbmZpZ3MubGVuZ3RoKSBjb250aW51ZTtcbiAgICBjb25zdCB0b2tlbkNvbmZpZyA9IHRva2VuQ29uZmlnc1swXTtcbiAgICBjb25zdCBuZXR3b3JrID0gbmV0d29ya05hbWVNYXAuZ2V0KHRva2VuQ29uZmlnLm5ldHdvcmsubmFtZSk7XG5cbiAgICBpZiAoaXNDb2luUHJlc2VudEluQ29pbk1hcCh7IC4uLnRva2VuQ29uZmlnIH0pKSBjb250aW51ZTtcblxuICAgIGlmICghdG9rZW5Db25maWcuaXNUb2tlbikge1xuICAgICAgLy8gRHluYW1pYyBiYXNlIGNoYWluIOKAlCBuZXR3b3JrIG11c3QgYmUgcHJlLXJlZ2lzdGVyZWQgaW4gbmV0d29ya0J5TmFtZSBtYXAgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi5cbiAgICAgIGlmIChuZXR3b3JrKSB7XG4gICAgICAgIGFtc1Rva2VuQ29uZmlnTWFwW3Rva2VuQ29uZmlnLm5hbWVdID0gW1xuICAgICAgICAgIHsgLi4udG9rZW5Db25maWcsIGZlYXR1cmVzOiB0b2tlbkNvbmZpZy5hZGRpdGlvbmFsRmVhdHVyZXMgPz8gW10sIG5ldHdvcmsgfSxcbiAgICAgICAgXTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5ldHdvcmsgJiYgZ2V0TmV0d29ya0ZlYXR1cmVzKG5ldHdvcmsuZmFtaWx5IGFzIHN0cmluZykpIHtcbiAgICAgIGNvbnN0IGZlYXR1cmVzID0gbmV3IFNldChbXG4gICAgICAgIC4uLihnZXROZXR3b3JrRmVhdHVyZXMobmV0d29yay5mYW1pbHkgYXMgc3RyaW5nKSB8fCBbXSksXG4gICAgICAgIC4uLih0b2tlbkNvbmZpZy5hZGRpdGlvbmFsRmVhdHVyZXMgfHwgW10pLFxuICAgICAgXSk7XG4gICAgICB0b2tlbkNvbmZpZy5leGNsdWRlZEZlYXR1cmVzPy5mb3JFYWNoKChmZWF0dXJlKSA9PiBmZWF0dXJlcy5kZWxldGUoZmVhdHVyZSkpO1xuICAgICAgYW1zVG9rZW5Db25maWdNYXBbdG9rZW5Db25maWcubmFtZV0gPSBbeyAuLi50b2tlbkNvbmZpZywgZmVhdHVyZXM6IEFycmF5LmZyb20oZmVhdHVyZXMpLCBuZXR3b3JrIH1dO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjcmVhdGVUb2tlbk1hcFVzaW5nQ29uZmlnRGV0YWlscyhhbXNUb2tlbkNvbmZpZ01hcCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUb2tlblVzaW5nVHJpbW1lZENvbmZpZ0RldGFpbHMoXG4gIHRva2VuQ29uZmlnOiBUcmltbWVkQW1zVG9rZW5Db25maWdcbik6IFJlYWRvbmx5PEJhc2VDb2luPiB8IHVuZGVmaW5lZCB7XG4gIGxldCBmdWxsVG9rZW5Db25maWc6IEFtc1Rva2VuQ29uZmlnIHwgdW5kZWZpbmVkO1xuICBjb25zdCBuZXR3b3JrTmFtZU1hcCA9IGdldE5ldHdvcmtzTWFwKCk7XG4gIGNvbnN0IG5ldHdvcmsgPSBuZXR3b3JrTmFtZU1hcC5nZXQodG9rZW5Db25maWcubmV0d29yay5uYW1lKTtcblxuICBpZiAoaXNDb2luUHJlc2VudEluQ29pbk1hcCh7IC4uLnRva2VuQ29uZmlnIH0pKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGlmICghdG9rZW5Db25maWcuaXNUb2tlbikge1xuICAgIC8vIER5bmFtaWMgYmFzZSBjaGFpbiDigJQgbmV0d29yayBtdXN0IGJlIHByZS1yZWdpc3RlcmVkIGluIG5ldHdvcmtCeU5hbWUgbWFwIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXG4gICAgaWYgKG5ldHdvcmspIHtcbiAgICAgIHJldHVybiBjcmVhdGVUb2tlbih7IC4uLnRva2VuQ29uZmlnLCBmZWF0dXJlczogdG9rZW5Db25maWcuYWRkaXRpb25hbEZlYXR1cmVzID8/IFtdLCBuZXR3b3JrIH0gYXMgQW1zVG9rZW5Db25maWcpO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKG5ldHdvcmsgJiYgZ2V0TmV0d29ya0ZlYXR1cmVzKG5ldHdvcmsuZmFtaWx5IGFzIHN0cmluZykpIHtcbiAgICBjb25zdCBmZWF0dXJlcyA9IG5ldyBTZXQoW1xuICAgICAgLi4uKGdldE5ldHdvcmtGZWF0dXJlcyhuZXR3b3JrLmZhbWlseSBhcyBzdHJpbmcpIHx8IFtdKSxcbiAgICAgIC4uLih0b2tlbkNvbmZpZy5hZGRpdGlvbmFsRmVhdHVyZXMgfHwgW10pLFxuICAgIF0pO1xuICAgIHRva2VuQ29uZmlnLmV4Y2x1ZGVkRmVhdHVyZXM/LmZvckVhY2goKGZlYXR1cmUpID0+IGZlYXR1cmVzLmRlbGV0ZShmZWF0dXJlKSk7XG4gICAgZnVsbFRva2VuQ29uZmlnID0geyAuLi50b2tlbkNvbmZpZywgZmVhdHVyZXM6IEFycmF5LmZyb20oZmVhdHVyZXMpLCBuZXR3b3JrIH0gYXMgQW1zVG9rZW5Db25maWc7XG4gICAgcmV0dXJuIGNyZWF0ZVRva2VuKGZ1bGxUb2tlbkNvbmZpZyk7XG4gIH1cbn1cbiJdfQ==
|
|
473
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29pbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29pbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBNkVBLGtDQXlTQztBQTZERCx3REFFQztBQUVELDRFQW1FQztBQVlELDBEQWlCQztBQUVELDBGQStCQztBQUVELG9GQTBCQztBQXBsQkQsdUNBOEJtQjtBQUNuQiwrQkFBaUM7QUFDakMsaUNBQTREO0FBRTVELCtCQUFnQztBQUNoQyx5Q0FBa0Y7QUFDbEYsNkVBQWtFO0FBQ2xFLHlEQUFzRTtBQUN0RSwrREFBNEQ7QUFDNUQsK0NBQTRDO0FBQzVDLDJEQUF3RDtBQUN4RCx1REFBb0Q7QUFFdkMsUUFBQSxLQUFLLEdBQUcsYUFBTyxDQUFDLFNBQVMsQ0FBQztJQUNyQyxHQUFHLHFDQUFpQjtJQUNwQixHQUFHLDZCQUFhO0lBQ2hCLEdBQUcsbUNBQWdCO0lBQ25CLEdBQUcsOEJBQWM7SUFDakIsR0FBRyxtQkFBUTtJQUNYLEdBQUcsMkJBQVk7Q0FDaEIsQ0FBQyxDQUFDO0FBRUgsaUZBQWlGO0FBQ2pGLGdEQUFnRDtBQUNoRCxNQUFNLG1CQUFtQixHQUEyQixFQUFFLENBQUM7QUFFdkQscUNBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7SUFDakMsSUFDRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxrQkFBVyxDQUFDLGNBQWMsQ0FBQztRQUNsRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxzQkFBVyxDQUFDLE9BQU87UUFDekMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUNiLENBQUM7UUFDRCxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztJQUMvQyxDQUFDO0FBQ0gsQ0FBQyxDQUFDLENBQUM7QUFFSCxNQUFNLG9CQUFvQixHQUEyQixFQUFFLENBQUM7QUFDeEQscUNBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMs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QVMsQ0FBQztJQUVqRSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3pCLHlHQUF5RztRQUN6RyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osT0FBTyxXQUFXLENBQUMsRUFBRSxHQUFHLFdBQVcsRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLGtCQUFrQixJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQW9CLENBQUMsQ0FBQztRQUNwSCxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELElBQUksT0FBTyxJQUFJLElBQUEsK0NBQWtCLEVBQUMsT0FBTyxDQUFDLE1BQWdCLENBQUMsRUFBRSxDQUFDO1FBQzVELE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxDQUFDO1lBQ3ZCLEdBQUcsQ0FBQyxJQUFBLCtDQUFrQixFQUFDLE9BQU8sQ0FBQyxNQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3ZELEdBQUcsQ0FBQyxXQUFXLENBQUMsa0JBQWtCLElBQUksRUFBRSxDQUFDO1NBQzFDLENBQUMsQ0FBQztRQUNILFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUM3RSxlQUFlLEdBQUcsRUFBRSxHQUFHLFdBQVcsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxPQUFPLEVBQW9CLENBQUM7UUFDaEcsT0FBTyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDdEMsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBhbGdvVG9rZW4sXG4gIGFwdE5GVENvbGxlY3Rpb24sXG4gIGFwdFRva2VuLFxuICBhcmJldGhFcmMyMCxcbiAgYXZheEVyYzIwLFxuICBiZXJhRXJjMjAsXG4gIGJzY1Rva2VuLFxuICBjZWxvVG9rZW4sXG4gIGNvc21vc1Rva2VuLFxuICBlb3NUb2tlbixcbiAgZXJjMjAsXG4gIGhlZGVyYVRva2VuLFxuICBqZXR0b25Ub2tlbixcbiAgbmVwMTQxVG9rZW4sXG4gIG9wZXRoRXJjMjAsXG4gIHBvbHlnb25FcmMyMCxcbiAgcG9seXhUb2tlbixcbiAgc2lwMTBUb2tlbixcbiAgc29sVG9rZW4sXG4gIHN0ZWxsYXJUb2tlbixcbiAgc3VpVG9rZW4sXG4gIHRhb1Rva2VuLFxuICB0cm9uVG9rZW4sXG4gIHZldE5GVENvbGxlY3Rpb24sXG4gIHZldFRva2VuLFxuICB4cnBUb2tlbixcbiAgYWRhVG9rZW4sXG4gIGVyYzIwVG9rZW4sXG4gIGVyYzcyMVRva2VuLFxufSBmcm9tICcuL2FjY291bnQnO1xuaW1wb3J0IHsgb2ZjVG9rZW4gfSBmcm9tICcuL29mYyc7XG5pbXBvcnQgeyBCYXNlQ29pbiwgQ29pbkZlYXR1cmUsIER5bmFtaWNDb2luIH0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7IEFtc05ldHdvcmtDb25maWdNYXAsIEFtc1Rva2VuQ29uZmlnLCBUcmltbWVkQW1zVG9rZW5Db25maWcgfSBmcm9tICcuL3Rva2VuQ29uZmlnJztcbmltcG9ydCB7IENvaW5NYXAgfSBmcm9tICcuL21hcCc7XG5pbXBvcnQgeyBCYXNlTmV0d29yaywgZ2V0TmV0d29yaywgZ2V0TmV0d29ya3NNYXAsIE5ldHdvcmtUeXBlIH0gZnJvbSAnLi9uZXR3b3Jrcyc7XG5pbXBvcnQgeyBnZXROZXR3b3JrRmVhdHVyZXMgfSBmcm9tICcuL25ldHdvcmtGZWF0dXJlTWFwRm9yVG9rZW5zJztcbmltcG9ydCB7IG9mY0VyYzIwQ29pbnMsIHRPZmNFcmMyMENvaW5zIH0gZnJvbSAnLi9jb2lucy9vZmNFcmMyMENvaW5zJztcbmltcG9ydCB7IG9mY0hvb2RldGhUb2tlbnMgfSBmcm9tICcuL2NvaW5zL29mY0hvb2RldGhUb2tlbnMnO1xuaW1wb3J0IHsgb2ZjQ29pbnMgfSBmcm9tICcuL2NvaW5zL29mY0NvaW5zJztcbmltcG9ydCB7IGFsbENvaW5zQW5kVG9rZW5zIH0gZnJvbSAnLi9hbGxDb2luc0FuZFRva2Vucyc7XG5pbXBvcnQgeyBib3RPZmNUb2tlbnMgfSBmcm9tICcuL2NvaW5zL2JvdE9mY1Rva2Vucyc7XG5cbmV4cG9ydCBjb25zdCBjb2lucyA9IENvaW5NYXAuZnJvbUNvaW5zKFtcbiAgLi4uYWxsQ29pbnNBbmRUb2tlbnMsXG4gIC4uLm9mY0VyYzIwQ29pbnMsXG4gIC4uLm9mY0hvb2RldGhUb2tlbnMsXG4gIC4uLnRPZmNFcmMyMENvaW5zLFxuICAuLi5vZmNDb2lucyxcbiAgLi4uYm90T2ZjVG9rZW5zLFxuXSk7XG5cbi8vIEJ1aWxkIGEgbWFwIG9mIEVSQzIwLXN1cHBvcnRpbmcgY2hhaW4gZmFtaWx5IG5hbWVzIHRvIHRoZWlyIG1haW5uZXQgY29pbiBuYW1lc1xuLy8gTWFwcyBmYW1pbHkgLT4gY29pbiBuYW1lIChlLmcuLCAnaXAnIC0+ICdpcCcpXG5jb25zdCBlcmMyMENoYWluVG9OYW1lTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbmFsbENvaW5zQW5kVG9rZW5zLmZvckVhY2goKGNvaW4pID0+IHtcbiAgaWYgKFxuICAgIGNvaW4uZmVhdHVyZXMuaW5jbHVkZXMoQ29pbkZlYXR1cmUuU1VQUE9SVFNfRVJDMjApICYmXG4gICAgY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgJiZcbiAgICAhY29pbi5pc1Rva2VuXG4gICkge1xuICAgIGVyYzIwQ2hhaW5Ub05hbWVNYXBbY29pbi5mYW1pbHldID0gY29pbi5uYW1lO1xuICB9XG59KTtcblxuY29uc3QgZXJjNzIxQ2hhaW5Ub05hbWVNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbmFsbENvaW5zQW5kVG9rZW5zLmZvckVhY2goKGNvaW4pID0+IHtcbiAgaWYgKFxuICAgIGNvaW4uZmVhdHVyZXMuaW5jbHVkZXMoQ29pbkZlYXR1cmUuU1VQUE9SVFNfRVJDNzIxKSAmJlxuICAgIGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUICYmXG4gICAgIWNvaW4uaXNUb2tlblxuICApIHtcbiAgICBlcmM3MjFDaGFpblRvTmFtZU1hcFtjb2luLmZhbWlseV0gPSBjb2luLm5hbWU7XG4gIH1cbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVG9rZW4odG9rZW46IEFtc1Rva2VuQ29uZmlnKTogUmVhZG9ubHk8QmFzZUNvaW4+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKCF0b2tlbi5pc1Rva2VuKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBidWlsZER5bmFtaWNDb2luKHRva2VuKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS53YXJuKGBGYWlsZWQgdG8gYnVpbGQgZHluYW1pYyBjb2luIGZvciAke3Rva2VuLm5hbWV9ICgke3Rva2VuLmlkfSk6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgY29uc3QgaW5pdGlhbGl6ZXJNYXA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgIGFsZ286IGFsZ29Ub2tlbixcbiAgICBhcHQ6IGFwdFRva2VuLFxuICAgIGFyYmV0aDogYXJiZXRoRXJjMjAsXG4gICAgYXZheGM6IGF2YXhFcmMyMCxcbiAgICBiYXNlZXRoOiBlcmMyMFRva2VuLFxuICAgIGJlcmE6IGJlcmFFcmMyMCxcbiAgICBmbG93OiBlcmMyMFRva2VuLFxuICAgIGxpbmVhZXRoOiBlcmMyMFRva2VuLFxuICAgIHNlaWV2bTogZXJjMjBUb2tlbixcbiAgICBtb246IGVyYzIwVG9rZW4sXG4gICAgeGRjOiBlcmMyMFRva2VuLFxuICAgIGJzYzogYnNjVG9rZW4sXG4gICAgY2VsbzogY2Vsb1Rva2VuLFxuICAgIGNvc21vczogY29zbW9zVG9rZW4sXG4gICAgZXRoOiBlcmMyMCxcbiAgICBlb3M6IGVvc1Rva2VuLFxuICAgIGhiYXI6IGhlZGVyYVRva2VuLFxuICAgIG5lYXI6IG5lcDE0MVRva2VuLFxuICAgIG9wZXRoOiBvcGV0aEVyYzIwLFxuICAgIHBvbHlnb246IHBvbHlnb25FcmMyMCxcbiAgICBzb2w6IHNvbFRva2VuLFxuICAgIHN0eDogc2lwMTBUb2tlbixcbiAgICBzdWk6IHN1aVRva2VuLFxuICAgIHRhbzogdGFvVG9rZW4sXG4gICAgcG9seXg6IHBvbHl4VG9rZW4sXG4gICAgdHJ4OiB0cm9uVG9rZW4sXG4gICAgdmV0OiB2ZXRUb2tlbixcbiAgICB4bG06IHN0ZWxsYXJUb2tlbixcbiAgICB4cnA6IHhycFRva2VuLFxuICAgIG9mYzogb2ZjVG9rZW4sXG4gICAgYWRhOiBhZGFUb2tlbixcbiAgICB0b246IGpldHRvblRva2VuLFxuICB9O1xuXG4gIC8vIEVWTS1jb21wYXRpYmxlIGNoYWlucyBhcmUgaWRlbnRpZmllZCBieSBhIG51bWVyaWMgY2hhaW5JZCBvbiB0aGVpciBuZXR3b3JrIG9iamVjdC5cbiAgY29uc3QgdG9rZW5OZXR3b3JrID0gdG9rZW4ubmV0d29yayBpbnN0YW5jZW9mIEJhc2VOZXR3b3JrID8gdG9rZW4ubmV0d29yayA6IHVuZGVmaW5lZDtcbiAgaWYgKFxuICAgIHRva2VuTmV0d29yayAmJlxuICAgICdjaGFpbklkJyBpbiB0b2tlbk5ldHdvcmsgJiZcbiAgICB0eXBlb2YgKHRva2VuTmV0d29yayBhcyB7IGNoYWluSWQ/OiB1bmtub3duIH0pLmNoYWluSWQgPT09ICdudW1iZXInXG4gICkge1xuICAgIGlmICghZXJjMjBDaGFpblRvTmFtZU1hcFt0b2tlbi5mYW1pbHldKSB7XG4gICAgICBlcmMyMENoYWluVG9OYW1lTWFwW3Rva2VuLmZhbWlseV0gPSB0b2tlbi5mYW1pbHk7XG4gICAgfVxuICB9XG5cbiAgLy8gZHluYW1pY2FsbHkgYWRkIGVyYzIwIHRva2VuIGluaXRpYWxpemVycyBmb3IgZXRoIGxpa2UgY2hhaW5zIHRvIHRoZSBpbml0aWFsaXplciBtYXBcbiAgT2JqZWN0LmtleXMoZXJjMjBDaGFpblRvTmFtZU1hcCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgaW5pdGlhbGl6ZXJNYXBba2V5XSA9IGVyYzIwVG9rZW47XG4gIH0pO1xuXG4gIE9iamVjdC5rZXlzKGVyYzcyMUNoYWluVG9OYW1lTWFwKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBpbml0aWFsaXplck1hcFtrZXldID0gZXJjNzIxVG9rZW47XG4gIH0pO1xuXG4gIC8vcmV0dXJuIHRoZSBCYXNlQ29pbiBmcm9tIGRlZmF1bHQgY29pbiBtYXAgaWYgcHJlc2VudFxuICBpZiAoaXNDb2luUHJlc2VudEluQ29pbk1hcCh7IC4uLnRva2VuIH0pKSB7XG4gICAgaWYgKGNvaW5zLmhhcyh0b2tlbi5uYW1lKSkge1xuICAgICAgcmV0dXJuIGNvaW5zLmdldCh0b2tlbi5uYW1lKTtcbiAgICB9XG4gICAgaWYgKGNvaW5zLmhhcyh0b2tlbi5pZCkpIHtcbiAgICAgIHJldHVybiBjb2lucy5nZXQodG9rZW4uaWQpO1xuICAgIH1cbiAgICBpZiAodG9rZW4uYWxpYXMgJiYgY29pbnMuaGFzKHRva2VuLmFsaWFzKSkge1xuICAgICAgcmV0dXJuIGNvaW5zLmdldCh0b2tlbi5hbGlhcyk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGZhbWlseSA9IHRva2VuLmZhbWlseTtcbiAgY29uc3QgaW5pdGlhbGl6ZXIgPSBpbml0aWFsaXplck1hcFtmYW1pbHldIGFzICguLi5hcmdzOiB1bmtub3duW10pID0+IFJlYWRvbmx5PEJhc2VDb2luPjtcbiAgaWYgKCFpbml0aWFsaXplcikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBjb21tb25BcmdzID0gW1xuICAgIHRva2VuLmlkLFxuICAgIHRva2VuLm5hbWUsXG4gICAgdG9rZW4uZnVsbE5hbWUsXG4gICAgdG9rZW4uZGVjaW1hbFBsYWNlcyxcbiAgICB0b2tlbi5hc3NldCxcbiAgICB0b2tlbi5mZWF0dXJlcyxcbiAgICB0b2tlbi5wcmVmaXgsXG4gICAgdG9rZW4uc3VmZml4LFxuICAgIHRva2VuLm5ldHdvcmssXG4gICAgdG9rZW4ucHJpbWFyeUtleUN1cnZlLFxuICBdO1xuXG4gIHN3aXRjaCAoZmFtaWx5KSB7XG4gICAgY2FzZSBlcmMyMENoYWluVG9OYW1lTWFwW2ZhbWlseV06XG4gICAgICByZXR1cm4gaW5pdGlhbGl6ZXIoXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoMCwgNCksIC8vIGlkLCBuYW1lLCBmdWxsTmFtZSwgZGVjaW1hbFBsYWNlc1xuICAgICAgICB0b2tlbi5jb250cmFjdEFkZHJlc3MgfHwgdG9rZW4udG9rZW5BZGRyZXNzLCAvLyBjb250cmFjdEFkZHJlc3NcbiAgICAgICAgdG9rZW4uYXNzZXQsXG4gICAgICAgIHRva2VuLm5ldHdvcmssXG4gICAgICAgIHRva2VuLmZlYXR1cmVzLFxuICAgICAgICB0b2tlbi5wcmVmaXgsXG4gICAgICAgIHRva2VuLnN1ZmZpeCxcbiAgICAgICAgdG9rZW4ucHJpbWFyeUtleUN1cnZlXG4gICAgICApO1xuICAgIGNhc2UgZXJjNzIxQ2hhaW5Ub05hbWVNYXBbZmFtaWx5XTpcbiAgICAgIHJldHVybiBpbml0aWFsaXplcihcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSgwLCAzKSwgLy8gaWQsIG5hbWUsIGZ1bGxOYW1lXG4gICAgICAgIHRva2VuLmNvbnRyYWN0QWRkcmVzcywgLy8gY29udHJhY3RBZGRyZXNzXG4gICAgICAgIHRva2VuLm5ldHdvcmssXG4gICAgICAgIHRva2VuLmZlYXR1cmVzLFxuICAgICAgICB0b2tlbi5wcmVmaXgsXG4gICAgICAgIHRva2VuLnN1ZmZpeCxcbiAgICAgICAgdG9rZW4ucHJpbWFyeUtleUN1cnZlXG4gICAgICApO1xuICAgIGNhc2UgJ2FyYmV0aCc6XG4gICAgY2FzZSAnYXZheGMnOlxuICAgIGNhc2UgJ2Jhc2VldGgnOlxuICAgIGNhc2UgJ2JlcmEnOlxuICAgIGNhc2UgJ2JzYyc6XG4gICAgY2FzZSAnZmxvdyc6XG4gICAgY2FzZSAnbGluZWFldGgnOlxuICAgIGNhc2UgJ3NlaWV2bSc6XG4gICAgY2FzZSAnbW9uJzpcbiAgICBjYXNlICd4ZGMnOlxuICAgIGNhc2UgJ2NlbG8nOlxuICAgIGNhc2UgJ2V0aCc6XG4gICAgY2FzZSAnb3BldGgnOlxuICAgIGNhc2UgJ3BvbHlnb24nOlxuICAgIGNhc2UgJ3RyeCc6XG4gICAgICByZXR1cm4gaW5pdGlhbGl6ZXIoXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoMCwgNCksIC8vIGlkLCBuYW1lLCBmdWxsTmFtZSwgZGVjaW1hbFBsYWNlc1xuICAgICAgICB0b2tlbi5jb250cmFjdEFkZHJlc3MgfHwgdG9rZW4udG9rZW5BZGRyZXNzLCAvLyBjb250cmFjdEFkZHJlc3NcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSg0KSAvLyBhc3NldCwgZmVhdHVyZXMsIHByZWZpeCwgc3VmZml4LCBuZXR3b3JrLCBwcmltYXJ5S2V5Q3VydmVcbiAgICAgICk7XG5cbiAgICBjYXNlICdhcHQnOlxuICAgICAgY29uc3QgeyBpbml0RnVuYywgb2JqZWN0SWQgfSA9IGdldEFwdFRva2VuSW5pdGlhbGl6ZXIodG9rZW4pO1xuICAgICAgcmV0dXJuIGluaXRGdW5jKFxuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDAsIDQpLCAvLyBpZCwgbmFtZSwgZnVsbE5hbWUsIGRlY2ltYWxQbGFjZXNcbiAgICAgICAgb2JqZWN0SWQsXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoNCkgLy8gYXNzZXQsIGZlYXR1cmVzLCBwcmVmaXgsIHN1ZmZpeCwgbmV0d29yaywgcHJpbWFyeUtleUN1cnZlXG4gICAgICApO1xuXG4gICAgY2FzZSAndmV0JzpcbiAgICAgIGNvbnN0IHsgdmV0SW5pdEZ1bmMsIHZldE9iamVjdElkLCBpc05GVCB9ID0gZ2V0VmV0VG9rZW5Jbml0aWFsaXplcih0b2tlbik7XG4gICAgICBpZiAoaXNORlQpIHtcbiAgICAgICAgcmV0dXJuIHZldEluaXRGdW5jKFxuICAgICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoMCwgMyksIC8vIGlkLCBuYW1lLCBmdWxsTmFtZVxuICAgICAgICAgIHZldE9iamVjdElkLFxuICAgICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoNCkgLy8gYXNzZXQsIGZlYXR1cmVzLCBwcmVmaXgsIHN1ZmZpeCwgbmV0d29yaywgcHJpbWFyeUtleUN1cnZlXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmV0SW5pdEZ1bmMoXG4gICAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSgwLCA0KSwgLy8gaWQsIG5hbWUsIGZ1bGxOYW1lLCBkZWNpbWFsUGxhY2VzXG4gICAgICAgICAgdmV0T2JqZWN0SWQsXG4gICAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSg0KSAvLyBhc3NldCwgZmVhdHVyZXMsIHByZWZpeCwgc3VmZml4LCBuZXR3b3JrLCBwcmltYXJ5S2V5Q3VydmVcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ3N0eCc6XG4gICAgICByZXR1cm4gaW5pdGlhbGl6ZXIoXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoMCwgNCksIC8vIGlkLCBuYW1lLCBmdWxsTmFtZSwgZGVjaW1hbFBsYWNlc1xuICAgICAgICB0b2tlbi5hc3NldElkLCAvLyBhc3NldElkXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoNCkgLy8gYXNzZXQsIGZlYXR1cmVzLCBwcmVmaXgsIHN1ZmZpeCwgbmV0d29yaywgcHJpbWFyeUtleUN1cnZlXG4gICAgICApO1xuXG4gICAgY2FzZSAnYWxnbyc6XG4gICAgICByZXR1cm4gaW5pdGlhbGl6ZXIoXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoMCwgMiksIC8vIGlkLCBuYW1lXG4gICAgICAgIHRva2VuLmFsaWFzLCAvLyBhbGlhc1xuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDIpIC8vIGZ1bGxOYW1lLCBkZWNpbWFsLCBhc3NldCwgZmVhdHVyZXMsIHByZWZpeCwgc3VmZml4LCBuZXR3b3JrLCBwcmltYXJ5S2V5Q3VydmVcbiAgICAgICk7XG5cbiAgICBjYXNlICdlb3MnOlxuICAgICAgcmV0dXJuIGluaXRpYWxpemVyKFxuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDAsIDQpLCAvLyBpZCwgbmFtZSwgZnVsbE5hbWUsIGRlY2ltYWxQbGFjZXNcbiAgICAgICAgdG9rZW4uY29udHJhY3ROYW1lLCAvLyBjb250cmFjdE5hbWVcbiAgICAgICAgdG9rZW4uY29udHJhY3RBZGRyZXNzLCAvLyBjb250cmFjdEFkZHJlc3NcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSg0LCA4KSwgLy8gYXNzZXQsIGZlYXR1cmVzLCBwcmVmaXgsIHN1ZmZpeFxuICAgICAgICB0b2tlbi5zeW1ib2wsIC8vIHN5bWJvbFxuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDgpIC8vIG5ldHdvcmssIHByaW1hcnlLZXlDdXJ2ZVxuICAgICAgKTtcblxuICAgIGNhc2UgJ2hiYXInOlxuICAgICAgcmV0dXJuIGluaXRpYWxpemVyKFxuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDAsIDMpLCAvLyBpZCwgbmFtZSwgZnVsbE5hbWVcbiAgICAgICAgdG9rZW4ubmV0d29yaywgLy8gbmV0d29ya1xuICAgICAgICB0b2tlbi5kZWNpbWFsUGxhY2VzLFxuICAgICAgICB0b2tlbi5hc3NldCxcbiAgICAgICAgdG9rZW4uY29udHJhY3RBZGRyZXNzLCAvLyBjb250cmFjdEFkZHJlc3NcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSg1LCA4KSwgLy8gZmVhdHVyZXMsIHByZWZpeCwgc3VmZml4XG4gICAgICAgIHRva2VuLnByaW1hcnlLZXlDdXJ2ZVxuICAgICAgKTtcblxuICAgIGNhc2UgJ3NvbCc6XG4gICAgICByZXR1cm4gaW5pdGlhbGl6ZXIoXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoMCwgNCksIC8vIGlkLCBuYW1lLCBmdWxsTmFtZSwgZGVjaW1hbFBsYWNlc1xuICAgICAgICB0b2tlbi50b2tlbkFkZHJlc3MsIC8vIHRva2VuQWRkcmVzc1xuICAgICAgICB0b2tlbi5jb250cmFjdEFkZHJlc3MsIC8vIGNvbnRyYWN0QWRkcmVzc1xuICAgICAgICB0b2tlbi5hc3NldCxcbiAgICAgICAgdG9rZW4uZmVhdHVyZXMsXG4gICAgICAgIHRva2VuLnByb2dyYW1JZCxcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSg2KSAvLyBwcmVmaXgsIHN1ZmZpeCwgbmV0d29yaywgcHJpbWFyeUtleUN1cnZlXG4gICAgICApO1xuXG4gICAgY2FzZSAnc3VpJzpcbiAgICAgIHJldHVybiBpbml0aWFsaXplcihcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSgwLCA0KSwgLy8gaWQsIG5hbWUsIGZ1bGxOYW1lLCBkZWNpbWFsUGxhY2VzXG4gICAgICAgIHRva2VuLnBhY2thZ2VJZCwgLy8gcGFja2FnZUlkXG4gICAgICAgIHRva2VuLm1vZHVsZSwgLy8gbW9kdWxlXG4gICAgICAgIHRva2VuLnN5bWJvbCwgLy8gc3ltYm9sXG4gICAgICAgIHRva2VuLmNvbnRyYWN0QWRkcmVzcywgLy8gY29udHJhY3RBZGRyZXNzXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoNCkgLy8gYXNzZXQsIGZlYXR1cmVzLCBwcmVmaXgsIHN1ZmZpeCwgbmV0d29yaywgcHJpbWFyeUtleUN1cnZlXG4gICAgICApO1xuXG4gICAgY2FzZSAndGFvJzpcbiAgICAgIHJldHVybiBpbml0aWFsaXplcihcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSgwLCA0KSwgLy8gaWQsIG5hbWUsIGZ1bGxOYW1lLCBkZWNpbWFsUGxhY2VzXG4gICAgICAgIHRva2VuLnN1Ym5ldElkLCAvLyBzdWJuZXRJZFxuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDQpIC8vIGFzc2V0LCBmZWF0dXJlcywgcHJlZml4LCBzdWZmaXgsIG5ldHdvcmssIHByaW1hcnlLZXlDdXJ2ZVxuICAgICAgKTtcbiAgICBjYXNlICdwb2x5eCc6XG4gICAgICByZXR1cm4gaW5pdGlhbGl6ZXIoXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoMCwgNCksIC8vIGlkLCBuYW1lLCBmdWxsTmFtZSwgZGVjaW1hbFBsYWNlc1xuICAgICAgICB0b2tlbi50aWNrZXIsIC8vIHRpY2tlclxuICAgICAgICB0b2tlbi5hc3NldElkLCAvLyBhc3NldElkXG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoNCkgLy8gYXNzZXQsIGZlYXR1cmVzLCBwcmVmaXgsIHN1ZmZpeCwgbmV0d29yaywgcHJpbWFyeUtleUN1cnZlXG4gICAgICApO1xuXG4gICAgY2FzZSAneGxtJzpcbiAgICAgIHJldHVybiBpbml0aWFsaXplcihcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSgwLCA1KSwgLy8gaWQsIG5hbWUsIGZ1bGxOYW1lLCBkZWNpbWFsUGxhY2VzLCBhc3NldFxuICAgICAgICB0b2tlbi5kb21haW4sIC8vIGRvbWFpblxuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDUpIC8vIGZlYXR1cmVzLCBwcmVmaXgsIHN1ZmZpeCwgbmV0d29yaywgcHJpbWFyeUtleUN1cnZlXG4gICAgICApO1xuXG4gICAgY2FzZSAneHJwJzpcbiAgICAgIHJldHVybiBpbml0aWFsaXplcihcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSgwLCA0KSwgLy8gaWQsIG5hbWUsIGZ1bGxOYW1lLCBkZWNpbWFsUGxhY2VzXG4gICAgICAgIHRva2VuLmlzc3VlckFkZHJlc3MsIC8vIGlzc3VlckFkZHJlc3NcbiAgICAgICAgdG9rZW4uY3VycmVjbnljb2RlLCAvLyBjdXJyZW5jeUNvZGVcbiAgICAgICAgdG9rZW4uY29udHJhY3RBZGRyZXNzLCAvLyBjb250cmFjdEFkZHJlc3NcbiAgICAgICAgdG9rZW4uZG9tYWluLCAvLyBkb21haW5cbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSg0KSAvLyBhc3NldCwgZmVhdHVyZXMsIHByZWZpeCwgc3VmZml4LCBuZXR3b3JrLCBwcmltYXJ5S2V5Q3VydmVcbiAgICAgICk7XG4gICAgY2FzZSAnb2ZjJzpcbiAgICAgIHJldHVybiBpbml0aWFsaXplcihcbiAgICAgICAgLi4uY29tbW9uQXJncywgLy8gaWQsIG5hbWUsIGZ1bGxOYW1lLCBkZWNpbWFsUGxhY2VzLCBhc3NldCwgcHJlZml4LCBzdWZmaXgsIG5ldHdvcmssIHByaW1hcnlLZXlDdXJ2ZVxuICAgICAgICB0b2tlbi5iYXNlVW5pdCwgLy8gYmFzZVVuaXRcbiAgICAgICAgdG9rZW4uaXNUb2tlbiwgLy8gaXNUb2tlblxuICAgICAgICB0b2tlbi5raW5kLCAvLyBraW5kXG4gICAgICAgIHRva2VuLmFkZHJlc3NDb2luIC8vIGFkZHJlc3NDb2luXG4gICAgICApO1xuICAgIGNhc2UgJ2FzaSc6XG4gICAgY2FzZSAnYXRvbSc6XG4gICAgY2FzZSAnYmFieSc6XG4gICAgY2FzZSAnYmxkJzpcbiAgICBjYXNlICdjb3JldW0nOlxuICAgIGNhc2UgJ2Nyb25vcyc6XG4gICAgY2FzZSAnaGFzaCc6XG4gICAgY2FzZSAnaW5qZWN0aXZlJzpcbiAgICBjYXNlICdpbml0aWEnOlxuICAgIGNhc2UgJ29zbW8nOlxuICAgIGNhc2UgJ3Rob3InOlxuICAgIGNhc2UgJ3NlaSc6XG4gICAgY2FzZSAndGlhJzpcbiAgICBjYXNlICd6ZXRhJzpcbiAgICAgIHJldHVybiBpbml0aWFsaXplcihcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSgwLCAzKSwgLy8gaWQsIG5hbWUsIGZ1bGxOYW1lXG4gICAgICAgIHRva2VuLmRlbm9tLCAvLyBkZW5vbVxuICAgICAgICB0b2tlbi5kZWNpbWFsUGxhY2VzLCAvLyBkZWNpbWFsUGxhY2VzXG4gICAgICAgIHRva2VuLm5ldHdvcmssIC8vIG5ldHdvcmtcbiAgICAgICAgdG9rZW4uYmFzZVVuaXQsIC8vIGJhc2VVbml0XG4gICAgICAgIC4uLmNvbW1vbkFyZ3Muc2xpY2UoNCwgOCksIC8vIGFzc2V0LCBmZWF0dXJlcywgcHJlZml4LCBzdWZmaXhcbiAgICAgICAgdG9rZW4ucHJpbWFyeUtleUN1cnZlIC8vIHByaW1hcnlLZXlDdXJ2ZVxuICAgICAgKTtcbiAgICBjYXNlICdhZGEnOlxuICAgICAgcmV0dXJuIGluaXRpYWxpemVyKFxuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDAsIDQpLCAvLyBpZCwgbmFtZSwgZnVsbE5hbWUsIGRlY2ltYWxQbGFjZXNcbiAgICAgICAgdG9rZW4uYXNzZXROYW1lLFxuICAgICAgICB0b2tlbi5wb2xpY3lJZCxcbiAgICAgICAgdG9rZW4uY29udHJhY3RBZGRyZXNzLFxuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDQpIC8vIGFzc2V0LCBmZWF0dXJlcywgcHJlZml4LCBzdWZmaXgsIG5ldHdvcmssIHByaW1hcnlLZXlDdXJ2ZVxuICAgICAgKTtcbiAgICBjYXNlICd0b24nOlxuICAgICAgcmV0dXJuIGluaXRpYWxpemVyKFxuICAgICAgICAuLi5jb21tb25BcmdzLnNsaWNlKDAsIDQpLCAvLyBpZCwgbmFtZSwgZnVsbE5hbWUsIGRlY2ltYWxQbGFjZXNcbiAgICAgICAgdG9rZW4uY29udHJhY3RBZGRyZXNzLCAvLyBjb250cmFjdEFkZHJlc3NcbiAgICAgICAgLi4uY29tbW9uQXJncy5zbGljZSg0KSAvLyBhc3NldCwgZmVhdHVyZXMsIHByZWZpeCwgc3VmZml4LCBuZXR3b3JrLCBwcmltYXJ5S2V5Q3VydmVcbiAgICAgICk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZCBhIHJlYWwgRHluYW1pY0NvaW4gKyBEeW5hbWljTmV0d29yayBpbnN0YW5jZSBmb3IgQU1TLWRpc2NvdmVyZWQgYmFzZSBjaGFpbnNcbiAqIHdob3NlIGZhbWlseSBpcyBub3QgeWV0IHJlZ2lzdGVyZWQgaW4gdGhlIFNESydzIGluaXRpYWxpemVyTWFwLlxuICogQ2FsbGVkIGZyb20gY3JlYXRlVG9rZW4oKSBhcyBhIGZhbGxiYWNrIHdoZW4gbm8gaW5pdGlhbGl6ZXIgZXhpc3RzIGFuZCBpc1Rva2VuIGlzIGZhbHNlLlxuICovXG5mdW5jdGlvbiBidWlsZER5bmFtaWNDb2luKHRva2VuOiBBbXNUb2tlbkNvbmZpZyk6IFJlYWRvbmx5PEJhc2VDb2luPiB7XG4gIGNvbnN0IG5ldHdvcmsgPSB0b2tlbi5uZXR3b3JrIGluc3RhbmNlb2YgQmFzZU5ldHdvcmsgPyB0b2tlbi5uZXR3b3JrIDogZ2V0TmV0d29yayh0b2tlbi5uZXR3b3JrIGFzIHN0cmluZyk7XG5cbiAgcmV0dXJuIE9iamVjdC5mcmVlemUoXG4gICAgbmV3IER5bmFtaWNDb2luKHtcbiAgICAgIGlkOiB0b2tlbi5pZCxcbiAgICAgIG5hbWU6IHRva2VuLm5hbWUsXG4gICAgICBmdWxsTmFtZTogdG9rZW4uZnVsbE5hbWUsXG4gICAgICBkZWNpbWFsUGxhY2VzOiB0b2tlbi5kZWNpbWFsUGxhY2VzLFxuICAgICAgYXNzZXQ6IHRva2VuLmFzc2V0IGFzIHN0cmluZyxcbiAgICAgIGlzVG9rZW46IHRva2VuLmlzVG9rZW4sXG4gICAgICBmZWF0dXJlczogKHRva2VuLmZlYXR1cmVzID8/IFtdKSBhcyBzdHJpbmdbXSxcbiAgICAgIG5ldHdvcmssXG4gICAgICBwcmltYXJ5S2V5Q3VydmU6ICh0b2tlbi5wcmltYXJ5S2V5Q3VydmUgYXMgc3RyaW5nKSA/PyAnc2VjcDI1NmsxJyxcbiAgICAgIHByZWZpeDogdG9rZW4ucHJlZml4ID8/ICcnLFxuICAgICAgc3VmZml4OiB0b2tlbi5zdWZmaXggPz8gdG9rZW4ubmFtZS50b1VwcGVyQ2FzZSgpLFxuICAgICAgYmFzZVVuaXQ6ICh0b2tlbi5iYXNlVW5pdCBhcyBzdHJpbmcpID8/ICcnLFxuICAgICAga2luZDogKHRva2VuLmtpbmQgYXMgc3RyaW5nKSA/PyAnY3J5cHRvJyxcbiAgICAgIGFsaWFzOiB0b2tlbi5hbGlhcyxcbiAgICB9KVxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRBcHRUb2tlbkluaXRpYWxpemVyKHRva2VuOiBBbXNUb2tlbkNvbmZpZykge1xuICBpZiAodG9rZW4uYXNzZXRJZCkge1xuICAgIC8vIHVzZWQgZm9yIGZ1bmdpYmxlLWFzc2V0cyAvIGxlZ2FjeSBjb2lucyBldGMuXG4gICAgcmV0dXJuIHtcbiAgICAgIGluaXRGdW5jOiBhcHRUb2tlbiBhcyAoLi4uYXJnczogdW5rbm93bltdKSA9PiBSZWFkb25seTxCYXNlQ29pbj4sXG4gICAgICBvYmplY3RJZDogdG9rZW4uYXNzZXRJZCxcbiAgICB9O1xuICB9XG4gIC8vIHVzZWQgZm9yIG5vbi1mdW5naWJsZSB0b2tlbiAoTkZUKSBjb2xsZWN0aW9uc1xuICByZXR1cm4ge1xuICAgIGluaXRGdW5jOiBhcHRORlRDb2xsZWN0aW9uIGFzICguLi5hcmdzOiB1bmtub3duW10pID0+IFJlYWRvbmx5PEJhc2VDb2luPixcbiAgICBvYmplY3RJZDogdG9rZW4ubmZ0Q29sbGVjdGlvbklkLFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRWZXRUb2tlbkluaXRpYWxpemVyKHRva2VuOiBBbXNUb2tlbkNvbmZpZykge1xuICBpZiAodG9rZW4ubmZ0Q29sbGVjdGlvbklkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZldEluaXRGdW5jOiB2ZXRORlRDb2xsZWN0aW9uIGFzICguLi5hcmdzOiB1bmtub3duW10pID0+IFJlYWRvbmx5PEJhc2VDb2luPixcbiAgICAgIHZldE9iamVjdElkOiB0b2tlbi5uZnRDb2xsZWN0aW9uSWQsXG4gICAgICBpc05GVDogdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB2ZXRJbml0RnVuYzogdmV0VG9rZW4gYXMgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gUmVhZG9ubHk8QmFzZUNvaW4+LFxuICAgIHZldE9iamVjdElkOiB0b2tlbi5jb250cmFjdEFkZHJlc3MsXG4gICAgaXNORlQ6IGZhbHNlLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb2luUHJlc2VudEluQ29pbk1hcCh7IG5hbWUsIGlkLCBhbGlhcyB9OiB7IG5hbWU6IHN0cmluZzsgaWQ/OiBzdHJpbmc7IGFsaWFzPzogc3RyaW5nIH0pOiBib29sZWFuIHtcbiAgcmV0dXJuIEJvb2xlYW4oY29pbnMuaGFzKG5hbWUpIHx8IChpZCAmJiBjb2lucy5oYXMoaWQpKSB8fCAoYWxpYXMgJiYgY29pbnMuaGFzKGFsaWFzKSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVG9rZW5NYXBVc2luZ0NvbmZpZ0RldGFpbHModG9rZW5Db25maWdNYXA6IFJlY29yZDxzdHJpbmcsIEFtc1Rva2VuQ29uZmlnW10+KTogQ29pbk1hcCB7XG4gIGNvbnN0IEJhc2VDb2luczogTWFwPHN0cmluZywgUmVhZG9ubHk8QmFzZUNvaW4+PiA9IG5ldyBNYXAoKTtcblxuICBjb25zdCBuZnRBbmRPdGhlclRva2VucyA9IG5ldyBTZXQoW1xuICAgICdlcmM3MjE6YnNjdG9rZW4nLFxuICAgICd0ZXJjNzIxOmJzY3Rva2VuJyxcbiAgICAnZXJjMTE1NTpic2N0b2tlbicsXG4gICAgJ3RlcmMxMTU1OmJzY3Rva2VuJyxcbiAgICAnZXJjNzIxOndpdGNoJyxcbiAgICAnZXJjNzIxOnRva2VuJyxcbiAgICAnZXJjMTE1NTp0b2tlbicsXG4gICAgJ25vbnN0YW5kYXJkOnRva2VuJyxcbiAgICAndGVyYzcyMTp0b2tlbicsXG4gICAgJ3RlcmMxMTU1OnRva2VuJyxcbiAgICAndG5vbnN0YW5kYXJkOnRva2VuJyxcbiAgICAndGVyYzcyMTpiaXRnb2VyYzcyMScsXG4gICAgJ3RlcmMxMTU1OmJpdGdvZXJjMTE1NScsXG4gICAgJ3RlcmM3MjE6aG9vZGlkaicsXG4gICAgJ2VyYzcyMTpwb2x5Z29udG9rZW4nLFxuICAgICdlcmMxMTU1OnBvbHlnb250b2tlbicsXG4gICAgJ3RlcmM3MjE6cG9seWdvbnRva2VuJyxcbiAgICAndGVyYzExNTU6cG9seWdvbnRva2VuJyxcbiAgICAnZXJjNzIxOnNvbmVpdW10b2tlbicsXG4gICAgJ2VyYzExNTU6c29uZWl1bXRva2VuJyxcbiAgICAndGVyYzcyMTpzb25laXVtdG9rZW4nLFxuICAgICd0ZXJjMTE1NTpzb25laXVtdG9rZW4nLFxuICBdKTtcblxuICAvLyBBZGQgYWxsIHRoZSBjb2lucyBmcm9tIHN0YXRpY3MgY29pbiBtYXAgZmlyc3RcbiAgY29pbnMuZm9yRWFjaCgoY29pbiwgY29pbk5hbWUpID0+IHtcbiAgICBCYXNlQ29pbnMuc2V0KGNvaW5OYW1lLCBjb2luKTtcbiAgfSk7XG5cbiAgLy8gQWNjdW11bGF0ZXMgYm90aCBzdGF0aWMgYW5kIGFscmVhZHktYWNjZXB0ZWQgQU1TIHRva2VucyBzbyBBTVMtdnMtQU1TIGNvbnRyYWN0IGFkZHJlc3NcbiAgLy8gY29uZmxpY3RzIGFyZSBjYXVnaHQgaW4gYWRkaXRpb24gdG8gc3RhdGljLXZzLUFNUyBjb25mbGljdHMuXG4gIGNvbnN0IGFjY3VtdWxhdGVkTWFwID0gQ29pbk1hcC5mcm9tQ29pbnMoQXJyYXkuZnJvbShCYXNlQ29pbnMudmFsdWVzKCkpKTtcblxuICAvLyBhZGQgdGhlIHRva2VucyBub3QgcHJlc2VudCBpbiB0aGUgc3RhdGljIGNvaW4gbWFwXG4gIGZvciAoY29uc3QgdG9rZW5Db25maWdzIG9mIE9iamVjdC52YWx1ZXModG9rZW5Db25maWdNYXApKSB7XG4gICAgaWYgKCF0b2tlbkNvbmZpZ3MubGVuZ3RoKSBjb250aW51ZTtcbiAgICBjb25zdCB0b2tlbkNvbmZpZyA9IHRva2VuQ29uZmlnc1swXTtcblxuICAgIGlmICghaXNDb2luUHJlc2VudEluQ29pbk1hcCh7IC4uLnRva2VuQ29uZmlnIH0pICYmICFuZnRBbmRPdGhlclRva2Vucy5oYXModG9rZW5Db25maWcubmFtZSkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gY3JlYXRlVG9rZW4odG9rZW5Db25maWcpO1xuICAgICAgICAvLyBBIHRva2VuIHdob3NlIG5hbWUgaXMgYWJzZW50IGZyb20gdGhlIGFjY3VtdWxhdGVkIG1hcCBjYW4gc3RpbGwgcmV1c2UgYSBjb250cmFjdCBhZGRyZXNzXG4gICAgICAgIC8vIChvciBORlQgY29sbGVjdGlvbiBpZCkgYWxyZWFkeSBjbGFpbWVkIGJ5IGEgc3RhdGljIG9yIHByZXZpb3VzbHktYWNjZXB0ZWQgQU1TIHRva2VuLlxuICAgICAgICAvLyBBZGRpbmcgaXQgd291bGQgbWFrZSB0aGUgZmluYWwgQ29pbk1hcC5mcm9tQ29pbnMgdGhyb3csIHNvIHNraXAgaXQgaW5zdGVhZC5cbiAgICAgICAgaWYgKHRva2VuICYmICFhY2N1bXVsYXRlZE1hcC5oYXNUb2tlbkFkZHJlc3NDb25mbGljdCh0b2tlbikpIHtcbiAgICAgICAgICBCYXNlQ29pbnMuc2V0KHRva2VuLm5hbWUsIHRva2VuKTtcbiAgICAgICAgICBhY2N1bXVsYXRlZE1hcC5hZGRDb2luKHRva2VuKTtcbiAgICAgICAgfSBlbHNlIGlmICh0b2tlbikge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBTa2lwcGluZyB0b2tlbiB3aXRoIGNvbmZsaWN0aW5nIGNvbnRyYWN0IGFkZHJlc3Mgb3IgTkZUIGNvbGxlY3Rpb24gaWQ6IG5hbWU9XCIke3Rva2VuQ29uZmlnLm5hbWV9XCIgaWQ9XCIke3Rva2VuQ29uZmlnLmlkfVwiYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBTa2lwcGluZyBtYWxmb3JtZWQgdG9rZW46IG5hbWU9XCIke3Rva2VuQ29uZmlnLm5hbWV9XCIgaWQ9XCIke3Rva2VuQ29uZmlnLmlkfVwiIGZhbWlseT1cIiR7XG4gICAgICAgICAgICB0b2tlbkNvbmZpZy5mYW1pbHlcbiAgICAgICAgICB9XCIgZXJyb3I9JHsoZSBhcyBFcnJvcikubWVzc2FnZX1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIENvaW5NYXAuZnJvbUNvaW5zKEFycmF5LmZyb20oQmFzZUNvaW5zLnZhbHVlcygpKSk7XG59XG5cbi8qKlxuICogRW5yaWNoIGJhc2UgY2hhaW4gY29pbnMgKGlzVG9rZW49ZmFsc2UpIHdpdGggZmVhdHVyZXMgZnJvbSB0aGUgQU1TIG5ldHdvcmtzIG1hcC5cbiAqXG4gKiBjcmVhdGVUb2tlbk1hcFVzaW5nVHJpbW1lZENvbmZpZ0RldGFpbHMgcmVhZHMgZmVhdHVyZXMgZm9yIGJhc2UgY2hhaW5zIGZyb21cbiAqIFRyaW1tZWRBbXNUb2tlbkNvbmZpZy5hZGRpdGlvbmFsRmVhdHVyZXMuIFRoZSBhc3NldHNMaXN0IGVuZHBvaW50IHJldHVybnMgYmFzZSBjaGFpbnMgd2l0aCBubyBmZWF0dXJlcztcbiAqIGZlYXR1cmVzIGFyZSBpbiB0aGUgbmV0d29ya3MgZW5kcG9pbnQgKC9hcGkvdjEvbmV0d29ya3MvOm5ldHdvcmspLCBtYXRjaGVkIGJ5IGNvaW4ubmV0d29yay5uYW1lID09PSBuZXR3b3Jrc0VudHJ5Lm5hbWUuXG4gKlxuICogQ29pbnMgdGhhdCBhbHJlYWR5IGhhdmUgYWRkaXRpb25hbEZlYXR1cmVzIGRlZmluZWQgYXJlIGxlZnQgdW5jaGFuZ2VkLlxuICogQ29pbnMgd2hvc2UgbmV0d29yay5uYW1lIGhhcyBubyBtYXRjaCBpbiBuZXR3b3Jrc01hcCBhcmUgbGVmdCB1bmNoYW5nZWQgKGVtcHR5IGZlYXR1cmVzKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVucmljaEJhc2VDaGFpbkZlYXR1cmVzKFxuICBjb2luVG9rZW5NYXA6IFJlY29yZDxzdHJpbmcsIFRyaW1tZWRBbXNUb2tlbkNvbmZpZ1tdPixcbiAgbmV0d29ya3NNYXA6IEFtc05ldHdvcmtDb25maWdNYXBcbik6IFJlY29yZDxzdHJpbmcsIFRyaW1tZWRBbXNUb2tlbkNvbmZpZ1tdPiB7XG4gIGNvbnN0IGZlYXR1cmVzQnlOZXR3b3JrTmFtZSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oXG4gICAgT2JqZWN0LnZhbHVlcyhuZXR3b3Jrc01hcCkubWFwKChuZXQpOiBbc3RyaW5nLCBzdHJpbmdbXV0gPT4gW25ldC5uYW1lLCBuZXQuZmVhdHVyZXNdKVxuICApO1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGNvaW5Ub2tlbk1hcCkubWFwKChba2V5LCBjb2luc10pID0+IFtcbiAgICAgIGtleSxcbiAgICAgIGNvaW5zLm1hcCgoY29pbikgPT4ge1xuICAgICAgICBpZiAoY29pbi5pc1Rva2VuIHx8IGNvaW4uYWRkaXRpb25hbEZlYXR1cmVzICE9PSB1bmRlZmluZWQgfHwgY29pbi5uZXR3b3JrID09PSB1bmRlZmluZWQpIHJldHVybiBjb2luO1xuICAgICAgICBjb25zdCBmZWF0dXJlcyA9IGZlYXR1cmVzQnlOZXR3b3JrTmFtZS5nZXQoY29pbi5uZXR3b3JrLm5hbWUpO1xuICAgICAgICByZXR1cm4gZmVhdHVyZXMgIT09IHVuZGVmaW5lZCA/IHsgLi4uY29pbiwgYWRkaXRpb25hbEZlYXR1cmVzOiBmZWF0dXJlcyB9IDogY29pbjtcbiAgICAgIH0pLFxuICAgIF0pXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUb2tlbk1hcFVzaW5nVHJpbW1lZENvbmZpZ0RldGFpbHMoXG4gIHJlZHVjZWRUb2tlbkNvbmZpZ01hcDogUmVjb3JkPHN0cmluZywgVHJpbW1lZEFtc1Rva2VuQ29uZmlnW10+XG4pOiBDb2luTWFwIHtcbiAgY29uc3QgYW1zVG9rZW5Db25maWdNYXA6IFJlY29yZDxzdHJpbmcsIEFtc1Rva2VuQ29uZmlnW10+ID0ge307XG4gIGNvbnN0IG5ldHdvcmtOYW1lTWFwID0gZ2V0TmV0d29ya3NNYXAoKTtcblxuICBmb3IgKGNvbnN0IHRva2VuQ29uZmlncyBvZiBPYmplY3QudmFsdWVzKHJlZHVjZWRUb2tlbkNvbmZpZ01hcCkpIHtcbiAgICBpZiAoIXRva2VuQ29uZmlncy5sZW5ndGgpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHRva2VuQ29uZmlnID0gdG9rZW5Db25maWdzWzBdO1xuICAgIGNvbnN0IG5ldHdvcmsgPSBuZXR3b3JrTmFtZU1hcC5nZXQodG9rZW5Db25maWcubmV0d29yay5uYW1lKTtcblxuICAgIGlmIChpc0NvaW5QcmVzZW50SW5Db2luTWFwKHsgLi4udG9rZW5Db25maWcgfSkpIGNvbnRpbnVlO1xuXG4gICAgaWYgKCF0b2tlbkNvbmZpZy5pc1Rva2VuKSB7XG4gICAgICAvLyBEeW5hbWljIGJhc2UgY2hhaW4g4oCUIG5ldHdvcmsgbXVzdCBiZSBwcmUtcmVnaXN0ZXJlZCBpbiBuZXR3b3JrQnlOYW1lIG1hcCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLlxuICAgICAgaWYgKG5ldHdvcmspIHtcbiAgICAgICAgYW1zVG9rZW5Db25maWdNYXBbdG9rZW5Db25maWcubmFtZV0gPSBbXG4gICAgICAgICAgeyAuLi50b2tlbkNvbmZpZywgZmVhdHVyZXM6IHRva2VuQ29uZmlnLmFkZGl0aW9uYWxGZWF0dXJlcyA/PyBbXSwgbmV0d29yayB9LFxuICAgICAgICBdO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobmV0d29yayAmJiBnZXROZXR3b3JrRmVhdHVyZXMobmV0d29yay5mYW1pbHkgYXMgc3RyaW5nKSkge1xuICAgICAgY29uc3QgZmVhdHVyZXMgPSBuZXcgU2V0KFtcbiAgICAgICAgLi4uKGdldE5ldHdvcmtGZWF0dXJlcyhuZXR3b3JrLmZhbWlseSBhcyBzdHJpbmcpIHx8IFtdKSxcbiAgICAgICAgLi4uKHRva2VuQ29uZmlnLmFkZGl0aW9uYWxGZWF0dXJlcyB8fCBbXSksXG4gICAgICBdKTtcbiAgICAgIHRva2VuQ29uZmlnLmV4Y2x1ZGVkRmVhdHVyZXM/LmZvckVhY2goKGZlYXR1cmUpID0+IGZlYXR1cmVzLmRlbGV0ZShmZWF0dXJlKSk7XG4gICAgICBhbXNUb2tlbkNvbmZpZ01hcFt0b2tlbkNvbmZpZy5uYW1lXSA9IFt7IC4uLnRva2VuQ29uZmlnLCBmZWF0dXJlczogQXJyYXkuZnJvbShmZWF0dXJlcyksIG5ldHdvcmsgfV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZVRva2VuTWFwVXNpbmdDb25maWdEZXRhaWxzKGFtc1Rva2VuQ29uZmlnTWFwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRva2VuVXNpbmdUcmltbWVkQ29uZmlnRGV0YWlscyhcbiAgdG9rZW5Db25maWc6IFRyaW1tZWRBbXNUb2tlbkNvbmZpZ1xuKTogUmVhZG9ubHk8QmFzZUNvaW4+IHwgdW5kZWZpbmVkIHtcbiAgbGV0IGZ1bGxUb2tlbkNvbmZpZzogQW1zVG9rZW5Db25maWcgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IG5ldHdvcmtOYW1lTWFwID0gZ2V0TmV0d29ya3NNYXAoKTtcbiAgY29uc3QgbmV0d29yayA9IG5ldHdvcmtOYW1lTWFwLmdldCh0b2tlbkNvbmZpZy5uZXR3b3JrLm5hbWUpO1xuXG4gIGlmIChpc0NvaW5QcmVzZW50SW5Db2luTWFwKHsgLi4udG9rZW5Db25maWcgfSkpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgaWYgKCF0b2tlbkNvbmZpZy5pc1Rva2VuKSB7XG4gICAgLy8gRHluYW1pYyBiYXNlIGNoYWluIOKAlCBuZXR3b3JrIG11c3QgYmUgcHJlLXJlZ2lzdGVyZWQgaW4gbmV0d29ya0J5TmFtZSBtYXAgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi5cbiAgICBpZiAobmV0d29yaykge1xuICAgICAgcmV0dXJuIGNyZWF0ZVRva2VuKHsgLi4udG9rZW5Db25maWcsIGZlYXR1cmVzOiB0b2tlbkNvbmZpZy5hZGRpdGlvbmFsRmVhdHVyZXMgPz8gW10sIG5ldHdvcmsgfSBhcyBBbXNUb2tlbkNvbmZpZyk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAobmV0d29yayAmJiBnZXROZXR3b3JrRmVhdHVyZXMobmV0d29yay5mYW1pbHkgYXMgc3RyaW5nKSkge1xuICAgIGNvbnN0IGZlYXR1cmVzID0gbmV3IFNldChbXG4gICAgICAuLi4oZ2V0TmV0d29ya0ZlYXR1cmVzKG5ldHdvcmsuZmFtaWx5IGFzIHN0cmluZykgfHwgW10pLFxuICAgICAgLi4uKHRva2VuQ29uZmlnLmFkZGl0aW9uYWxGZWF0dXJlcyB8fCBbXSksXG4gICAgXSk7XG4gICAgdG9rZW5Db25maWcuZXhjbHVkZWRGZWF0dXJlcz8uZm9yRWFjaCgoZmVhdHVyZSkgPT4gZmVhdHVyZXMuZGVsZXRlKGZlYXR1cmUpKTtcbiAgICBmdWxsVG9rZW5Db25maWcgPSB7IC4uLnRva2VuQ29uZmlnLCBmZWF0dXJlczogQXJyYXkuZnJvbShmZWF0dXJlcyksIG5ldHdvcmsgfSBhcyBBbXNUb2tlbkNvbmZpZztcbiAgICByZXR1cm4gY3JlYXRlVG9rZW4oZnVsbFRva2VuQ29uZmlnKTtcbiAgfVxufVxuIl19
|
package/dist/src/map.d.ts
CHANGED
|
@@ -9,6 +9,14 @@ export declare class CoinMap {
|
|
|
9
9
|
private constructor();
|
|
10
10
|
private static contractAddressKey;
|
|
11
11
|
private static nftCollectionIdKey;
|
|
12
|
+
/**
|
|
13
|
+
* Whether a different token with the same contract address (or NFT collection id) is already
|
|
14
|
+
* registered. Token identity in the map is keyed by name/id/alias, but a token also claims a
|
|
15
|
+
* contract-address key (`family:contractAddress`) and, for NFTs, a collection-id key. Two tokens
|
|
16
|
+
* that share such a key but differ in name cannot coexist — `addCoin` throws on the second.
|
|
17
|
+
* Callers merging externally-sourced tokens use this to skip a colliding token rather than crash.
|
|
18
|
+
*/
|
|
19
|
+
hasTokenAddressConflict(coin: Readonly<BaseCoin>): boolean;
|
|
12
20
|
static fromCoins(coins: Readonly<BaseCoin>[]): CoinMap;
|
|
13
21
|
addCoin(coin: Readonly<BaseCoin>): void;
|
|
14
22
|
/**
|
package/dist/src/map.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAWlC,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAyC;IAC9D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAyC;IAEpE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyC;IAGxE,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAyC;IAEhF,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAyC;IAEhF,OAAO,CAAC,cAAc,CAAoC;IAE1D,OAAO;IAIP,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAIjC,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAIjC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,GAAG,OAAO;IAQ/C,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAWlC,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAyC;IAC9D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAyC;IAEpE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyC;IAGxE,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAyC;IAEhF,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAyC;IAEhF,OAAO,CAAC,cAAc,CAAoC;IAE1D,OAAO;IAIP,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAIjC,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAIjC;;;;;;OAMG;IACI,uBAAuB,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO;IAcjE,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,GAAG,OAAO;IAQ/C,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,IAAI;IA0C9C;;;;OAIG;IACI,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,IAAI;IAmB9C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CA+FzC;IAEF,OAAO,CAAC,eAAe;IAkBhB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAY/D;;;;;OAKG;IACI,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC;IAepC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAUzB,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC,EAAE;IAQtE,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC;IAQjG,MAAM,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO;IAUnF,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAI7E,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;CAG3E"}
|
package/dist/src/map.js
CHANGED
|
@@ -9,20 +9,40 @@ class CoinMap {
|
|
|
9
9
|
this._coinByIds = new Map();
|
|
10
10
|
// Holds key equivalences used during an asset name migration
|
|
11
11
|
this._coinByAliases = new Map();
|
|
12
|
-
// map of coin by address -> the key is the family:
|
|
12
|
+
// map of coin by address -> the key is the family:contractAddress
|
|
13
13
|
// the family is the where the coin is e.g l1 chains like eth, bsc etc. or l2 like arbeth, celo etc.
|
|
14
14
|
this._coinByContractAddress = new Map();
|
|
15
|
-
// map of coin by NFT collection ID -> the key is the (t)family:
|
|
15
|
+
// map of coin by NFT collection ID -> the key is the (t)family:nftCollectionID
|
|
16
16
|
this._coinByNftCollectionID = new Map();
|
|
17
17
|
// Lazily initialized cache for chainId to coin name mapping (derived from network definitions)
|
|
18
18
|
this._coinByChainId = null;
|
|
19
19
|
// Do not instantiate
|
|
20
20
|
}
|
|
21
21
|
static contractAddressKey(coin) {
|
|
22
|
-
return `${coin.family}:${coin.
|
|
22
|
+
return `${coin.family}:${coin.contractAddress}`;
|
|
23
23
|
}
|
|
24
24
|
static nftCollectionIdKey(coin) {
|
|
25
|
-
return `${coin.prefix}${coin.family}:${coin.
|
|
25
|
+
return `${coin.prefix}${coin.family}:${coin.nftCollectionId}`;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Whether a different token with the same contract address (or NFT collection id) is already
|
|
29
|
+
* registered. Token identity in the map is keyed by name/id/alias, but a token also claims a
|
|
30
|
+
* contract-address key (`family:contractAddress`) and, for NFTs, a collection-id key. Two tokens
|
|
31
|
+
* that share such a key but differ in name cannot coexist — `addCoin` throws on the second.
|
|
32
|
+
* Callers merging externally-sourced tokens use this to skip a colliding token rather than crash.
|
|
33
|
+
*/
|
|
34
|
+
hasTokenAddressConflict(coin) {
|
|
35
|
+
if (coin instanceof account_1.ContractAddressDefinedToken) {
|
|
36
|
+
const key = CoinMap.contractAddressKey(coin);
|
|
37
|
+
const existing = this._coinByContractAddress.get(key);
|
|
38
|
+
return existing !== undefined && existing.network.type === coin.network.type;
|
|
39
|
+
}
|
|
40
|
+
if (coin instanceof account_1.NFTCollectionIdDefinedToken) {
|
|
41
|
+
const key = CoinMap.nftCollectionIdKey(coin);
|
|
42
|
+
const existing = this._coinByNftCollectionID.get(key);
|
|
43
|
+
return existing !== undefined && existing.network.type === coin.network.type;
|
|
44
|
+
}
|
|
45
|
+
return false;
|
|
26
46
|
}
|
|
27
47
|
static fromCoins(coins) {
|
|
28
48
|
const coinMap = new CoinMap();
|
|
@@ -52,17 +72,25 @@ class CoinMap {
|
|
|
52
72
|
const contractAddressKey = CoinMap.contractAddressKey(coin);
|
|
53
73
|
const existingByContractAddress = this._coinByContractAddress.get(contractAddressKey);
|
|
54
74
|
if (existingByContractAddress) {
|
|
55
|
-
|
|
75
|
+
if (existingByContractAddress.network.type === coin.network.type) {
|
|
76
|
+
throw new errors_1.DuplicateContractAddressDefinitionError(contractAddressKey, existingByContractAddress.name);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
this._coinByContractAddress.set(contractAddressKey, coin);
|
|
56
81
|
}
|
|
57
|
-
this._coinByContractAddress.set(contractAddressKey, coin);
|
|
58
82
|
}
|
|
59
83
|
else if (coin instanceof account_1.NFTCollectionIdDefinedToken) {
|
|
60
84
|
const nftCollectionKey = CoinMap.nftCollectionIdKey(coin);
|
|
61
85
|
const existingByNftCollectionId = this._coinByNftCollectionID.get(nftCollectionKey);
|
|
62
86
|
if (existingByNftCollectionId) {
|
|
63
|
-
|
|
87
|
+
if (existingByNftCollectionId.network.type === coin.network.type) {
|
|
88
|
+
throw new errors_1.DuplicateNftCollectionIdDefinitionError(nftCollectionKey, existingByNftCollectionId.name);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
this._coinByNftCollectionID.set(nftCollectionKey, coin);
|
|
64
93
|
}
|
|
65
|
-
this._coinByNftCollectionID.set(nftCollectionKey, coin);
|
|
66
94
|
}
|
|
67
95
|
}
|
|
68
96
|
}
|
|
@@ -271,4 +299,4 @@ CoinMap.LEGACY_CHAIN_ID_MAP = {
|
|
|
271
299
|
25363: 'fluenteth',
|
|
272
300
|
20994: 'tfluenteth',
|
|
273
301
|
};
|
|
274
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21hcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxxQ0FNa0I7QUFDbEIsdUNBQXFGO0FBR3JGLE1BQWEsT0FBTztJQWFsQjtRQVppQixTQUFJLEdBQUcsSUFBSSxHQUFHLEVBQThCLENBQUM7UUFDN0MsZUFBVSxHQUFHLElBQUksR0FBRyxFQUE4QixDQUFDO1FBQ3BFLDZEQUE2RDtRQUM1QyxtQkFBYyxHQUFHLElBQUksR0FBRyxFQUE4QixDQUFDO1FBQ3hFLDhFQUE4RTtRQUM5RSxvR0FBb0c7UUFDbkYsMkJBQXNCLEdBQUcsSUFBSSxHQUFHLEVBQThCLENBQUM7UUFDaEYsMkZBQTJGO1FBQzFFLDJCQUFzQixHQUFHLElBQUksR0FBRyxFQUE4QixDQUFDO1FBQ2hGLCtGQUErRjtRQUN2RixtQkFBYyxHQUErQixJQUFJLENBQUM7UUFHeEQscUJBQXFCO0lBQ3ZCLENBQUM7SUFFTyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBaUM7UUFDakUsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3ZFLENBQUM7SUFFTyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBaUM7UUFDakUsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDckYsQ0FBQztJQUVELE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBMkI7UUFDMUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM5QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDckIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMs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QUFFLEtBQUs7SUFDWCxJQUFJLEVBQUUsSUFBSTtJQUNWLEdBQUcsRUFBRSxPQUFPO0lBQ1osR0FBRyxFQUFFLE1BQU07SUFDWCxLQUFLLEVBQUUsUUFBUTtJQUNmLEtBQUssRUFBRSxPQUFPO0lBQ2QsSUFBSSxFQUFFLFVBQVU7SUFDaEIsSUFBSSxFQUFFLFNBQVM7SUFDZixHQUFHLEVBQUUsU0FBUztJQUNkLEdBQUcsRUFBRSxVQUFVO0lBQ2YsR0FBRyxFQUFFLFdBQVc7SUFDaEIsSUFBSSxFQUFFLFlBQVk7SUFDbEIsT0FBTyxFQUFFLFVBQVU7SUFDbkIsT0FBTyxFQUFFLFdBQVc7SUFDcEIsT0FBTyxFQUFFLFVBQVU7SUFDbkIsSUFBSSxFQUFFLE9BQU87SUFDYixLQUFLLEVBQUUsUUFBUTtJQUNmLElBQUksRUFBRSxRQUFRO0lBQ2QsSUFBSSxFQUFFLFNBQVM7SUFDZixLQUFLLEVBQUUsV0FBVztJQUNsQixLQUFLLEVBQUUsWUFBWTtDQUNwQixBQS9GMEMsQ0ErRnpDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUNvaW4gfSBmcm9tICcuL2Jhc2UnO1xuaW1wb3J0IHtcbiAgRHVwbGljYXRlQ29pbkRlZmluaXRpb25FcnJvcixcbiAgQ29pbk5vdERlZmluZWRFcnJvcixcbiAgRHVwbGljYXRlQ29pbklkRGVmaW5pdGlvbkVycm9yLFxuICBEdXBsaWNhdGVDb250cmFjdEFkZHJlc3NEZWZpbml0aW9uRXJyb3IsXG4gIER1cGxpY2F0ZU5mdENvbGxlY3Rpb25JZERlZmluaXRpb25FcnJvcixcbn0gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHsgQ29udHJhY3RBZGRyZXNzRGVmaW5lZFRva2VuLCBORlRDb2xsZWN0aW9uSWREZWZpbmVkVG9rZW4gfSBmcm9tICcuL2FjY291bnQnO1xuaW1wb3J0IHsgRXRoZXJldW1OZXR3b3JrIH0gZnJvbSAnLi9uZXR3b3Jrcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2luTWFwIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWFwID0gbmV3IE1hcDxzdHJpbmcsIFJlYWRvbmx5PEJhc2VDb2luPj4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY29pbkJ5SWRzID0gbmV3IE1hcDxzdHJpbmcsIFJlYWRvbmx5PEJhc2VDb2luPj4oKTtcbiAgLy8gSG9sZHMga2V5IGVxdWl2YWxlbmNlcyB1c2VkIGR1cmluZyBhbiBhc3NldCBuYW1lIG1pZ3JhdGlvblxuICBwcml2YXRlIHJlYWRvbmx5IF9jb2luQnlBbGlhc2VzID0gbmV3IE1hcDxzdHJpbmcsIFJlYWRvbmx5PEJhc2VDb2luPj4oKTtcbiAgLy8gbWFwIG9mIGNvaW4gYnkgYWRkcmVzcyAtPiB0aGUga2V5IGlzIHRoZSBmYW1pbHk6bmV0d29ya1R5cGU6Y29udHJhY3RBZGRyZXNzXG4gIC8vIHRoZSBmYW1pbHkgaXMgdGhlIHdoZXJlIHRoZSBjb2luIGlzIGUuZyBsMSBjaGFpbnMgbGlrZSBldGgsIGJzYyBldGMuIG9yIGwyIGxpa2UgYXJiZXRoLCBjZWxvIGV0Yy5cbiAgcHJpdmF0ZSByZWFkb25seSBfY29pbkJ5Q29udHJhY3RBZGRyZXNzID0gbmV3IE1hcDxzdHJpbmcsIFJlYWRvbmx5PEJhc2VDb2luPj4oKTtcbiAgLy8gbWFwIG9mIGNvaW4gYnkgTkZUIGNvbGxlY3Rpb24gSUQgLT4gdGhlIGtleSBpcyB0aGUgKHQpZmFtaWx5Om5ldHdvcmtUeXBlOm5mdENvbGxlY3Rpb25JRFxuICBwcml2YXRlIHJlYWRvbmx5IF9jb2luQnlOZnRDb2xsZWN0aW9uSUQgPSBuZXcgTWFwPHN0cmluZywgUmVhZG9ubHk8QmFzZUNvaW4+PigpO1xuICAvLyBMYXppbHkgaW5pdGlhbGl6ZWQgY2FjaGUgZm9yIGNoYWluSWQgdG8gY29pbiBuYW1lIG1hcHBpbmcgKGRlcml2ZWQgZnJvbSBuZXR3b3JrIGRlZmluaXRpb25zKVxuICBwcml2YXRlIF9jb2luQnlDaGFpbklkOiBNYXA8bnVtYmVyLCBzdHJpbmc+IHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyBEbyBub3QgaW5zdGFudGlhdGVcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNvbnRyYWN0QWRkcmVzc0tleShjb2luOiBDb250cmFjdEFkZHJlc3NEZWZpbmVkVG9rZW4pOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtjb2luLmZhbWlseX06JHtjb2luLm5ldHdvcmsudHlwZX06JHtjb2luLmNvbnRyYWN0QWRkcmVzc31gO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgbmZ0Q29sbGVjdGlvbklkS2V5KGNvaW46IE5GVENvbGxlY3Rpb25JZERlZmluZWRUb2tlbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke2NvaW4ucHJlZml4fSR7Y29pbi5mYW1pbHl9OiR7Y29pbi5uZXR3b3JrLnR5cGV9OiR7Y29pbi5uZnRDb2xsZWN0aW9uSWR9YDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29pbnMoY29pbnM6IFJlYWRvbmx5PEJhc2VDb2luPltdKTogQ29pbk1hcCB7XG4gICAgY29uc3QgY29pbk1hcCA9IG5ldyBDb2luTWFwKCk7XG4gICAgY29pbnMuZm9yRWFjaCgoY29pbikgPT4ge1xuICAgICAgY29pbk1hcC5hZGRDb2luKGNvaW4pO1xuICAgIH0pO1xuICAgIHJldHVybiBjb2luTWFwO1xuICB9XG5cbiAgcHVibGljIGFkZENvaW4oY29pbjogUmVhZG9ubHk8QmFzZUNvaW4+KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX21hcC5oYXMoY29pbi5uYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IER1cGxpY2F0ZUNvaW5EZWZpbml0aW9uRXJyb3IoY29pbi5uYW1lKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2NvaW5CeUlkcy5oYXMoY29pbi5pZCkpIHtcbiAgICAgIHRocm93IG5ldyBEdXBsaWNhdGVDb2luSWREZWZpbml0aW9uRXJyb3IoY29pbi5pZCk7XG4gICAgfVxuICAgIGNvbnN0IGFsaWFzID0gY29pbi5hbGlhcztcbiAgICBpZiAoYWxpYXMgJiYgdGhpcy5fY29pbkJ5QWxpYXNlcy5oYXMoYWxpYXMpKSB7XG4gICAgICB0aHJvdyBuZXcgRHVwbGljYXRlQ29pbkRlZmluaXRpb25FcnJvcihhbGlhcyk7XG4gICAgfVxuICAgIHRoaXMuX21hcC5zZXQoY29pbi5uYW1lLCBjb2luKTtcbiAgICB0aGlzLl9jb2luQnlJZHMuc2V0KGNvaW4uaWQsIGNvaW4pO1xuICAgIGlmIChhbGlhcykge1xuICAgICAgdGhpcy5fY29pbkJ5QWxpYXNlcy5zZXQoY29pbi5hbGlhcywgY29pbik7XG4gICAgfVxuXG4gICAgaWYgKGNvaW4uaXNUb2tlbikge1xuICAgICAgaWYgKGNvaW4gaW5zdGFuY2VvZiBDb250cmFjdEFkZHJlc3NEZWZpbmVkVG9rZW4pIHtcbiAgICAgICAgY29uc3QgY29udHJhY3RBZGRyZXNzS2V5ID0gQ29pbk1hcC5jb250cmFjdEFkZHJlc3NLZXkoY29pbik7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nQnlDb250cmFjdEFkZHJlc3MgPSB0aGlzLl9jb2luQnlDb250cmFjdEFkZHJlc3MuZ2V0KGNvbnRyYWN0QWRkcmVzc0tleSk7XG4gICAgICAgIGlmIChleGlzdGluZ0J5Q29udHJhY3RBZGRyZXNzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IER1cGxpY2F0ZUNvbnRyYWN0QWRkcmVzc0RlZmluaXRpb25FcnJvcihjb250cmFjdEFkZHJlc3NLZXksIGV4aXN0aW5nQnlDb250cmFjdEFkZHJlc3MubmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY29pbkJ5Q29udHJhY3RBZGRyZXNzLnNldChjb250cmFjdEFkZHJlc3NLZXksIGNvaW4pO1xuICAgICAgfSBlbHNlIGlmIChjb2luIGluc3RhbmNlb2YgTkZUQ29sbGVjdGlvbklkRGVmaW5lZFRva2VuKSB7XG4gICAgICAgIGNvbnN0IG5mdENvbGxlY3Rpb25LZXkgPSBDb2luTWFwLm5mdENvbGxlY3Rpb25JZEtleShjb2luKTtcbiAgICAgICAgY29uc3QgZXhpc3RpbmdCeU5mdENvbGxlY3Rpb25JZCA9IHRoaXMuX2NvaW5CeU5mdENvbGxlY3Rpb25JRC5nZXQobmZ0Q29sbGVjdGlvbktleSk7XG4gICAgICAgIGlmIChleGlzdGluZ0J5TmZ0Q29sbGVjdGlvbklkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IER1cGxpY2F0ZU5mdENvbGxlY3Rpb25JZERlZmluaXRpb25FcnJvcihuZnRDb2xsZWN0aW9uS2V5LCBleGlzdGluZ0J5TmZ0Q29sbGVjdGlvbklkLm5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NvaW5CeU5mdENvbGxlY3Rpb25JRC5zZXQobmZ0Q29sbGVjdGlvbktleSwgY29pbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2UgYSBCYXNlIGNvaW4gb2JqZWN0IGNvbXBsZXRlbHkgZnJvbSB0aGUgQ29pbk1hcCB1c2luZyBpdHMgSUQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkga2V5IHRvIHNlYXJjaCB0aGUgb2xkIGNvaW4gb2JqZWN0XG4gICAqIEBwYXJhbSB7UmVhZG9ubHk8QmFzZUNvaW4+fSBjb2luIG5ldyBjb2luIG9iamVjdFxuICAgKi9cbiAgcHVibGljIHJlcGxhY2UoY29pbjogUmVhZG9ubHk8QmFzZUNvaW4+KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaGFzKGNvaW4uaWQpKSB7XG4gICAgICBjb25zdCBvbGRDb2luID0gdGhpcy5nZXQoY29pbi5pZCk7XG4gICAgICB0aGlzLl9tYXAuZGVsZXRlKG9sZENvaW4ubmFtZSk7XG4gICAgICB0aGlzLl9jb2luQnlJZHMuZGVsZXRlKG9sZENvaW4uaWQpO1xuICAgICAgaWYgKG9sZENvaW4uYWxpYXMpIHtcbiAgICAgICAgdGhpcy5fY29pbkJ5QWxpYXNlcy5kZWxldGUob2xkQ29pbi5hbGlhcyk7XG4gICAgICB9XG4gICAgICBpZiAob2xkQ29pbi5pc1Rva2VuKSB7XG4gICAgICAgIGlmIChvbGRDb2luIGluc3RhbmNlb2YgQ29udHJhY3RBZGRyZXNzRGVmaW5lZFRva2VuKSB7XG4gICAgICAgICAgdGhpcy5fY29pbkJ5Q29udHJhY3RBZGRyZXNzLmRlbGV0ZShDb2luTWFwLmNvbnRyYWN0QWRkcmVzc0tleShvbGRDb2luKSk7XG4gICAgICAgIH0gZWxzZSBpZiAob2xkQ29pbiBpbnN0YW5jZW9mIE5GVENvbGxlY3Rpb25JZERlZmluZWRUb2tlbikge1xuICAgICAgICAgIHRoaXMuX2NvaW5CeU5mdENvbGxlY3Rpb25JRC5kZWxldGUoQ29pbk1hcC5uZnRDb2xsZWN0aW9uSWRLZXkob2xkQ29pbikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuYWRkQ29pbihjb2luKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYXJkY29kZWQgbWFwcGluZyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IExFR0FDWV9DSEFJTl9JRF9NQVA6IFJlY29yZDxudW1iZXIsIHN0cmluZz4gPSB7XG4gICAgMTogJ2V0aCcsXG4gICAgNDI6ICd0ZXRoJyxcbiAgICA1OiAnZ3RldGgnLFxuICAgIDU2MDA0ODogJ2h0ZXRoJyxcbiAgICAxMDAwMTogJ2V0aHcnLFxuICAgIDgwMDAyOiAndHBvbHlnb24nLFxuICAgIDEzNzogJ3BvbHlnb24nLFxuICAgIDU2OiAnYnNjJyxcbiAgICA5NzogJ3Ric2MnLFxuICAgIDQyMTYxOiAnYXJiZXRoJyxcbiAgICA0MjE2MTQ6ICd0YXJiZXRoJyxcbiAgICAxMDogJ29wZXRoJyxcbiAgICAxMTE1NTQyMDogJ3RvcGV0aCcsXG4gICAgMTExNjogJ2NvcmVkYW8nLFxuICAgIDExMTQ6ICd0Y29yZWRhbycsXG4gICAgMjQ4OiAnb2FzJyxcbiAgICA5MzcyOiAndG9hcycsXG4gICAgMTQ6ICdmbHInLFxuICAgIDExNDogJ3RmbHInLFxuICAgIDE5OiAnc2diJyxcbiAgICAxNjogJ3RzZ2InLFxuICAgIDExMTE6ICd3ZW1peCcsXG4gICAgMTExMjogJ3R3ZW1peCcsXG4gICAgNTA6ICd4ZGMnLFxuICAgIDUxOiAndHhkYycsXG4gICAgODAwOTQ6ICdiZXJhJyxcbiAgICA4MDA2OTogJ3RiZXJhJyxcbiAgICA0MjIyMDogJ2NlbG8nLFxuICAgIDExMTQyMjIwOiAndGNlbG8nLFxuICAgIDIyMjI6ICdrYXZhJyxcbiAgICAyMjIxOiAndGthdmEnLFxuICAgIDQzMTE0OiAnYXZheGMnLFxuICAgIDQzMTEzOiAndGF2YXhjJyxcbiAgICAxMDA6ICdnbm8nLFxuICAgIDEzMDogJ3VuaWV0aCcsXG4gICAgMTMwMTogJ3R1bmlldGgnLFxuICAgIDE5MDQxNTogJ2hwcGV0aCcsXG4gICAgMTgxMjI4OiAndGhwcGV0aCcsXG4gICAgNjk4NTM4NTogJ2gnLFxuICAgIDcwODA5Njk6ICd0aCcsXG4gICAgNDY2MzogJ2hvb2RldGgnLFxuICAgIDQ2NjMwOiAndGhvb2RldGgnLFxuICAgIDMyNDogJ3prZXRoJyxcbiAgICA4NDUzOiAnYmFzZWV0aCcsXG4gICAgODQ1MzI6ICd0YmFzZWV0aCcsXG4gICAgMTQzOiAnbW9uJyxcbiAgICAxMDE0MzogJ3Rtb24nLFxuICAgIDQ4MDogJ3dvcmxkJyxcbiAgICA0ODAxOiAndHdvcmxkJyxcbiAgICA1MDMxOiAnc29taScsXG4gICAgNTAzMTI6ICd0c3R0JyxcbiAgICAxODY4OiAnc29uZWl1bScsXG4gICAgMTk0NjogJ3Rzb25laXVtJyxcbiAgICAzMzExMTogJ3RhcGVjaGFpbicsXG4gICAgMzMxMzk6ICdhcGVjaGFpbicsXG4gICAgNjg4Njg5OiAndHBocnMnLFxuICAgIDEwMjAzMDogJ2N0YycsXG4gICAgMTAyMDMxOiAndGN0YycsXG4gICAgOTk4OiAndGh5cGVldm0nLFxuICAgIDk5OTogJ2h5cGVldm0nLFxuICAgIDE2NjAyOiAndG9nJyxcbiAgICAxNjY2MTogJ29nJyxcbiAgICA5NzQ2OiAndHhwbCcsXG4gICAgOTc0NTogJ3hwbCcsXG4gICAgMTQ2MDE6ICd0c29uaWMnLFxuICAgIDE0NjogJ3NvbmljJyxcbiAgICAxMzI4OiAndHNlaWV2bScsXG4gICAgMTMyOTogJ3NlaWV2bScsXG4gICAgMTAwMTogJ3RrYWlhJyxcbiAgICA4MjE3OiAna2FpYScsXG4gICAgMTI3MDogJ3RpcnlzJyxcbiAgICA1OTE0MTogJ3RsaW5lYWV0aCcsXG4gICAgNTkxNDQ6ICdsaW5lYWV0aCcsXG4gICAgMTMxNTogJ3RpcCcsXG4gICAgMTUxNDogJ2lwJyxcbiAgICA1NDU6ICd0ZmxvdycsXG4gICAgNzQ3OiAnZmxvdycsXG4gICAgOTg4Njc6ICd0cGx1bWUnLFxuICAgIDk4ODY2OiAncGx1bWUnLFxuICAgIDYzNDM6ICd0bWVnYWV0aCcsXG4gICAgNDMyNjogJ21lZ2FldGgnLFxuICAgIDI5NTogJ2hiYXJldm0nLFxuICAgIDI5NjogJ3RoYmFyZXZtJyxcbiAgICAxOTY6ICdva2J4bGF5ZXInLFxuICAgIDE5NTI6ICd0b2tieGxheWVyJyxcbiAgICA1NzM0OTUxOiAnam92YXlldGgnLFxuICAgIDIwMTk3NzU6ICd0am92YXlldGgnLFxuICAgIDUwNDIwMDI6ICd0YXJjdXNkYycsXG4gICAgNDIxNzogJ3RlbXBvJyxcbiAgICA0MjQzMTogJ3R0ZW1wbycsXG4gICAgNTAwMDogJ21hbnRsZScsXG4gICAgNTAwMzogJ3RtYW50bGUnLFxuICAgIDI1MzYzOiAnZmx1ZW50ZXRoJyxcbiAgICAyMDk5NDogJ3RmbHVlbnRldGgnLFxuICB9O1xuXG4gIHByaXZhdGUgYnVpbGRDaGFpbklkTWFwKCk6IE1hcDxudW1iZXIsIHN0cmluZz4ge1xuICAgIGNvbnN0IGNoYWluSWRNYXAgPSBuZXcgTWFwPG51bWJlciwgc3RyaW5nPigpO1xuICAgIHRoaXMuX21hcC5mb3JFYWNoKChjb2luLCBjb2luTmFtZSkgPT4ge1xuICAgICAgLy8gU2tpcCB0b2tlbnMgLSB0aGV5IHNoYXJlIHRoZSBzYW1lIGNoYWluSWQgYXMgdGhlaXIgcGFyZW50IGNoYWluXG4gICAgICBpZiAoY29pbi5pc1Rva2VuKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5ldHdvcmsgPSBjb2luLm5ldHdvcms7XG4gICAgICBpZiAoJ2NoYWluSWQnIGluIG5ldHdvcmsgJiYgdHlwZW9mIChuZXR3b3JrIGFzIEV0aGVyZXVtTmV0d29yaykuY2hhaW5JZCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgY29uc3QgY2hhaW5JZCA9IChuZXR3b3JrIGFzIEV0aGVyZXVtTmV0d29yaykuY2hhaW5JZDtcbiAgICAgICAgaWYgKCFjaGFpbklkTWFwLmhhcyhjaGFpbklkKSkge1xuICAgICAgICAgIGNoYWluSWRNYXAuc2V0KGNoYWluSWQsIGNvaW5OYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjaGFpbklkTWFwO1xuICB9XG5cbiAgcHVibGljIGNvaW5OYW1lRnJvbUNoYWluSWQoY2hhaW5JZDogbnVtYmVyKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBjb2luTmFtZSA9IENvaW5NYXAuTEVHQUNZX0NIQUlOX0lEX01BUFtjaGFpbklkXTtcbiAgICBpZiAoY29pbk5hbWUpIHtcbiAgICAgIHJldHVybiBjb2luTmFtZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY29pbkJ5Q2hhaW5JZCA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fY29pbkJ5Q2hhaW5JZCA9IHRoaXMuYnVpbGRDaGFpbklkTWFwKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jb2luQnlDaGFpbklkLmdldChjaGFpbklkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBgZ2V0YCB0byB0aHJvdyBpZiBhIGNvaW4gaXMgbWlzc2luZywgaW5zdGVhZCBvZiByZXR1cm5pbmcgdW5kZWZpbmVkLlxuICAgKiBJdCB3aWxsIGhvbm9yIGtleSBlcXVpdmFsZW5jZXMgaW4gY2FzZSBnaXZlbiBrZXkgaXMgbWlzc2luZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKiBAcmV0dXJuIHtCYXNlQ29pbn1cbiAgICovXG4gIHB1YmxpYyBnZXQoa2V5OiBzdHJpbmcpOiBSZWFkb25seTxCYXNlQ29pbj4ge1xuICAgIGNvbnN0IGNvaW4gPVxuICAgICAgdGhpcy5fbWFwLmdldChrZXkpIHx8XG4gICAgICB0aGlzLl9jb2luQnlJZHMuZ2V0KGtleSkgfHxcbiAgICAgIHRoaXMuX2NvaW5CeUFsaWFzZXMuZ2V0KGtleSkgfHxcbiAgICAgIHRoaXMuX2NvaW5CeUNvbnRyYWN0QWRkcmVzcy5nZXQoa2V5KSB8fFxuICAgICAgdGhpcy5fY29pbkJ5TmZ0Q29sbGVjdGlvbklELmdldChrZXkpO1xuXG4gICAgaWYgKGNvaW4pIHtcbiAgICAgIHJldHVybiBjb2luO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBDb2luTm90RGVmaW5lZEVycm9yKGtleSk7XG4gIH1cblxuICBwdWJsaWMgaGFzKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuX21hcC5oYXMoa2V5KSB8fFxuICAgICAgdGhpcy5fY29pbkJ5SWRzLmhhcyhrZXkpIHx8XG4gICAgICB0aGlzLl9jb2luQnlBbGlhc2VzLmhhcyhrZXkpIHx8XG4gICAgICB0aGlzLl9jb2luQnlDb250cmFjdEFkZHJlc3MuaGFzKGtleSkgfHxcbiAgICAgIHRoaXMuX2NvaW5CeU5mdENvbGxlY3Rpb25JRC5oYXMoa2V5KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgbWFwPFQ+KG1hcHBlcjogKGNvaW46IFJlYWRvbmx5PEJhc2VDb2luPiwgY29pbk5hbWU6IHN0cmluZykgPT4gVCk6IFRbXSB7XG4gICAgY29uc3QgbWFwUmVzdWx0OiBUW10gPSBbXTtcbiAgICB0aGlzLl9tYXAuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgbWFwUmVzdWx0LnB1c2gobWFwcGVyKHZhbHVlLCBrZXkpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gbWFwUmVzdWx0O1xuICB9XG5cbiAgcHVibGljIHJlZHVjZTxUPihyZWR1Y2VyOiAoYWNjOiBULCBjb2luOiBSZWFkb25seTxCYXNlQ29pbj4sIGNvaW5OYW1lOiBzdHJpbmcpID0+IFQsIGluaXRpYWxWYWx1ZTogVCk6IFQge1xuICAgIGxldCBhY2MgPSBpbml0aWFsVmFsdWU7XG4gICAgdGhpcy5fbWFwLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgIGFjYyA9IHJlZHVjZXIoYWNjLCB2YWx1ZSwga2V5KTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWNjO1xuICB9XG5cbiAgcHVibGljIGZpbHRlcihwcmVkaWNhdGU6IChjb2luOiBSZWFkb25seTxCYXNlQ29pbj4sIGNvaW5OYW1lOiBzdHJpbmcpID0+IGJvb2xlYW4pOiBDb2luTWFwIHtcbiAgICBjb25zdCBmaWx0ZXJSZXN1bHQ6IFJlYWRvbmx5PEJhc2VDb2luPltdID0gW107XG4gICAgdGhpcy5fbWFwLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGtleSkpIHtcbiAgICAgICAgZmlsdGVyUmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDb2luTWFwLmZyb21Db2lucyhmaWx0ZXJSZXN1bHQpO1xuICB9XG5cbiAgcHVibGljIGZvckVhY2goY2FsbGJhY2s6IChjb2luOiBSZWFkb25seTxCYXNlQ29pbj4sIGNvaW5OYW1lOiBzdHJpbmcpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9tYXAuZm9yRWFjaChjYWxsYmFjayk7XG4gIH1cblxuICBwdWJsaWMgW1N5bWJvbC5pdGVyYXRvcl0oKTogSXRlcmFibGVJdGVyYXRvcjxbc3RyaW5nLCBSZWFkb25seTxCYXNlQ29pbj5dPiB7XG4gICAgcmV0dXJuIHRoaXMuX21hcFtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gIH1cbn1cbiJdfQ==
|
|
302
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21hcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxxQ0FNa0I7QUFDbEIsdUNBQXFGO0FBR3JGLE1BQWEsT0FBTztJQWFsQjtRQVppQixTQUFJLEdBQUcsSUFBSSxHQUFHLEVBQThCLENBQUM7UUFDN0MsZUFBVSxHQUFHLElBQUksR0FBRyxFQUE4QixDQUFDO1FBQ3BFLDZEQUE2RDtRQUM1QyxtQkFBYyxHQUFHLElBQUksR0FBRyxFQUE4QixDQUFDO1FBQ3hFLGtFQUFrRTtRQUNsRSxvR0FBb0c7UUFDbkYsMkJBQXNCLEdBQUcsSUFBSSxHQUFHLEVBQThCLENBQUM7UUFDaEYsK0VBQStFO1FBQzlELDJCQUFzQixHQUFHLElBQUksR0FBRyxFQUE4QixDQUFDO1FBQ2hGLCtGQUErRjtRQUN2RixtQkFBYyxHQUErQixJQUFJLENBQUM7UUFHeEQscUJBQXFCO0lBQ3ZCLENBQUM7SUFFTyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBaUM7UUFDakUsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ2xELENBQUM7SUFFTyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBaUM7UUFDakUsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDaEUsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLHVCQUF1QixDQUFDLElBQXdCO1FBQ3JELElBQUksSUFBSSxZQUFZLHFDQUEyQixFQUFFLENBQUM7WUFDaEQsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEQsT0FBTyxR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QUksRUFBRSxTQUFTO0lBQ2YsR0FBRyxFQUFFLFNBQVM7SUFDZCxHQUFHLEVBQUUsVUFBVTtJQUNmLEdBQUcsRUFBRSxXQUFXO0lBQ2hCLElBQUksRUFBRSxZQUFZO0lBQ2xCLE9BQU8sRUFBRSxVQUFVO0lBQ25CLE9BQU8sRUFBRSxXQUFXO0lBQ3BCLE9BQU8sRUFBRSxVQUFVO0lBQ25CLElBQUksRUFBRSxPQUFPO0lBQ2IsS0FBSyxFQUFFLFFBQVE7SUFDZixJQUFJLEVBQUUsUUFBUTtJQUNkLElBQUksRUFBRSxTQUFTO0lBQ2YsS0FBSyxFQUFFLFdBQVc7SUFDbEIsS0FBSyxFQUFFLFlBQVk7Q0FDcEIsQUEvRjBDLENBK0Z6QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VDb2luIH0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7XG4gIER1cGxpY2F0ZUNvaW5EZWZpbml0aW9uRXJyb3IsXG4gIENvaW5Ob3REZWZpbmVkRXJyb3IsXG4gIER1cGxpY2F0ZUNvaW5JZERlZmluaXRpb25FcnJvcixcbiAgRHVwbGljYXRlQ29udHJhY3RBZGRyZXNzRGVmaW5pdGlvbkVycm9yLFxuICBEdXBsaWNhdGVOZnRDb2xsZWN0aW9uSWREZWZpbml0aW9uRXJyb3IsXG59IGZyb20gJy4vZXJyb3JzJztcbmltcG9ydCB7IENvbnRyYWN0QWRkcmVzc0RlZmluZWRUb2tlbiwgTkZUQ29sbGVjdGlvbklkRGVmaW5lZFRva2VuIH0gZnJvbSAnLi9hY2NvdW50JztcbmltcG9ydCB7IEV0aGVyZXVtTmV0d29yayB9IGZyb20gJy4vbmV0d29ya3MnO1xuXG5leHBvcnQgY2xhc3MgQ29pbk1hcCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hcCA9IG5ldyBNYXA8c3RyaW5nLCBSZWFkb25seTxCYXNlQ29pbj4+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvaW5CeUlkcyA9IG5ldyBNYXA8c3RyaW5nLCBSZWFkb25seTxCYXNlQ29pbj4+KCk7XG4gIC8vIEhvbGRzIGtleSBlcXVpdmFsZW5jZXMgdXNlZCBkdXJpbmcgYW4gYXNzZXQgbmFtZSBtaWdyYXRpb25cbiAgcHJpdmF0ZSByZWFkb25seSBfY29pbkJ5QWxpYXNlcyA9IG5ldyBNYXA8c3RyaW5nLCBSZWFkb25seTxCYXNlQ29pbj4+KCk7XG4gIC8vIG1hcCBvZiBjb2luIGJ5IGFkZHJlc3MgLT4gdGhlIGtleSBpcyB0aGUgZmFtaWx5OmNvbnRyYWN0QWRkcmVzc1xuICAvLyB0aGUgZmFtaWx5IGlzIHRoZSB3aGVyZSB0aGUgY29pbiBpcyBlLmcgbDEgY2hhaW5zIGxpa2UgZXRoLCBic2MgZXRjLiBvciBsMiBsaWtlIGFyYmV0aCwgY2VsbyBldGMuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvaW5CeUNvbnRyYWN0QWRkcmVzcyA9IG5ldyBNYXA8c3RyaW5nLCBSZWFkb25seTxCYXNlQ29pbj4+KCk7XG4gIC8vIG1hcCBvZiBjb2luIGJ5IE5GVCBjb2xsZWN0aW9uIElEIC0+IHRoZSBrZXkgaXMgdGhlICh0KWZhbWlseTpuZnRDb2xsZWN0aW9uSURcbiAgcHJpdmF0ZSByZWFkb25seSBfY29pbkJ5TmZ0Q29sbGVjdGlvbklEID0gbmV3IE1hcDxzdHJpbmcsIFJlYWRvbmx5PEJhc2VDb2luPj4oKTtcbiAgLy8gTGF6aWx5IGluaXRpYWxpemVkIGNhY2hlIGZvciBjaGFpbklkIHRvIGNvaW4gbmFtZSBtYXBwaW5nIChkZXJpdmVkIGZyb20gbmV0d29yayBkZWZpbml0aW9ucylcbiAgcHJpdmF0ZSBfY29pbkJ5Q2hhaW5JZDogTWFwPG51bWJlciwgc3RyaW5nPiB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gRG8gbm90IGluc3RhbnRpYXRlXG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjb250cmFjdEFkZHJlc3NLZXkoY29pbjogQ29udHJhY3RBZGRyZXNzRGVmaW5lZFRva2VuKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7Y29pbi5mYW1pbHl9OiR7Y29pbi5jb250cmFjdEFkZHJlc3N9YDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIG5mdENvbGxlY3Rpb25JZEtleShjb2luOiBORlRDb2xsZWN0aW9uSWREZWZpbmVkVG9rZW4pOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtjb2luLnByZWZpeH0ke2NvaW4uZmFtaWx5fToke2NvaW4ubmZ0Q29sbGVjdGlvbklkfWA7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciBhIGRpZmZlcmVudCB0b2tlbiB3aXRoIHRoZSBzYW1lIGNvbnRyYWN0IGFkZHJlc3MgKG9yIE5GVCBjb2xsZWN0aW9uIGlkKSBpcyBhbHJlYWR5XG4gICAqIHJlZ2lzdGVyZWQuIFRva2VuIGlkZW50aXR5IGluIHRoZSBtYXAgaXMga2V5ZWQgYnkgbmFtZS9pZC9hbGlhcywgYnV0IGEgdG9rZW4gYWxzbyBjbGFpbXMgYVxuICAgKiBjb250cmFjdC1hZGRyZXNzIGtleSAoYGZhbWlseTpjb250cmFjdEFkZHJlc3NgKSBhbmQsIGZvciBORlRzLCBhIGNvbGxlY3Rpb24taWQga2V5LiBUd28gdG9rZW5zXG4gICAqIHRoYXQgc2hhcmUgc3VjaCBhIGtleSBidXQgZGlmZmVyIGluIG5hbWUgY2Fubm90IGNvZXhpc3Qg4oCUIGBhZGRDb2luYCB0aHJvd3Mgb24gdGhlIHNlY29uZC5cbiAgICogQ2FsbGVycyBtZXJnaW5nIGV4dGVybmFsbHktc291cmNlZCB0b2tlbnMgdXNlIHRoaXMgdG8gc2tpcCBhIGNvbGxpZGluZyB0b2tlbiByYXRoZXIgdGhhbiBjcmFzaC5cbiAgICovXG4gIHB1YmxpYyBoYXNUb2tlbkFkZHJlc3NDb25mbGljdChjb2luOiBSZWFkb25seTxCYXNlQ29pbj4pOiBib29sZWFuIHtcbiAgICBpZiAoY29pbiBpbnN0YW5jZW9mIENvbnRyYWN0QWRkcmVzc0RlZmluZWRUb2tlbikge1xuICAgICAgY29uc3Qga2V5ID0gQ29pbk1hcC5jb250cmFjdEFkZHJlc3NLZXkoY29pbik7XG4gICAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuX2NvaW5CeUNvbnRyYWN0QWRkcmVzcy5nZXQoa2V5KTtcbiAgICAgIHJldHVybiBleGlzdGluZyAhPT0gdW5kZWZpbmVkICYmIGV4aXN0aW5nLm5ldHdvcmsudHlwZSA9PT0gY29pbi5uZXR3b3JrLnR5cGU7XG4gICAgfVxuICAgIGlmIChjb2luIGluc3RhbmNlb2YgTkZUQ29sbGVjdGlvbklkRGVmaW5lZFRva2VuKSB7XG4gICAgICBjb25zdCBrZXkgPSBDb2luTWFwLm5mdENvbGxlY3Rpb25JZEtleShjb2luKTtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5fY29pbkJ5TmZ0Q29sbGVjdGlvbklELmdldChrZXkpO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nICE9PSB1bmRlZmluZWQgJiYgZXhpc3RpbmcubmV0d29yay50eXBlID09PSBjb2luLm5ldHdvcmsudHlwZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3RhdGljIGZyb21Db2lucyhjb2luczogUmVhZG9ubHk8QmFzZUNvaW4+W10pOiBDb2luTWFwIHtcbiAgICBjb25zdCBjb2luTWFwID0gbmV3IENvaW5NYXAoKTtcbiAgICBjb2lucy5mb3JFYWNoKChjb2luKSA9PiB7XG4gICAgICBjb2luTWFwLmFkZENvaW4oY29pbik7XG4gICAgfSk7XG4gICAgcmV0dXJuIGNvaW5NYXA7XG4gIH1cblxuICBwdWJsaWMgYWRkQ29pbihjb2luOiBSZWFkb25seTxCYXNlQ29pbj4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbWFwLmhhcyhjb2luLm5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRHVwbGljYXRlQ29pbkRlZmluaXRpb25FcnJvcihjb2luLm5hbWUpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fY29pbkJ5SWRzLmhhcyhjb2luLmlkKSkge1xuICAgICAgdGhyb3cgbmV3IER1cGxpY2F0ZUNvaW5JZERlZmluaXRpb25FcnJvcihjb2luLmlkKTtcbiAgICB9XG4gICAgY29uc3QgYWxpYXMgPSBjb2luLmFsaWFzO1xuICAgIGlmIChhbGlhcyAmJiB0aGlzLl9jb2luQnlBbGlhc2VzLmhhcyhhbGlhcykpIHtcbiAgICAgIHRocm93IG5ldyBEdXBsaWNhdGVDb2luRGVmaW5pdGlvbkVycm9yKGFsaWFzKTtcbiAgICB9XG4gICAgdGhpcy5fbWFwLnNldChjb2luLm5hbWUsIGNvaW4pO1xuICAgIHRoaXMuX2NvaW5CeUlkcy5zZXQoY29pbi5pZCwgY29pbik7XG4gICAgaWYgKGFsaWFzKSB7XG4gICAgICB0aGlzLl9jb2luQnlBbGlhc2VzLnNldChjb2luLmFsaWFzLCBjb2luKTtcbiAgICB9XG5cbiAgICBpZiAoY29pbi5pc1Rva2VuKSB7XG4gICAgICBpZiAoY29pbiBpbnN0YW5jZW9mIENvbnRyYWN0QWRkcmVzc0RlZmluZWRUb2tlbikge1xuICAgICAgICBjb25zdCBjb250cmFjdEFkZHJlc3NLZXkgPSBDb2luTWFwLmNvbnRyYWN0QWRkcmVzc0tleShjb2luKTtcbiAgICAgICAgY29uc3QgZXhpc3RpbmdCeUNvbnRyYWN0QWRkcmVzcyA9IHRoaXMuX2NvaW5CeUNvbnRyYWN0QWRkcmVzcy5nZXQoY29udHJhY3RBZGRyZXNzS2V5KTtcbiAgICAgICAgaWYgKGV4aXN0aW5nQnlDb250cmFjdEFkZHJlc3MpIHtcbiAgICAgICAgICBpZiAoZXhpc3RpbmdCeUNvbnRyYWN0QWRkcmVzcy5uZXR3b3JrLnR5cGUgPT09IGNvaW4ubmV0d29yay50eXBlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRHVwbGljYXRlQ29udHJhY3RBZGRyZXNzRGVmaW5pdGlvbkVycm9yKGNvbnRyYWN0QWRkcmVzc0tleSwgZXhpc3RpbmdCeUNvbnRyYWN0QWRkcmVzcy5uYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fY29pbkJ5Q29udHJhY3RBZGRyZXNzLnNldChjb250cmFjdEFkZHJlc3NLZXksIGNvaW4pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNvaW4gaW5zdGFuY2VvZiBORlRDb2xsZWN0aW9uSWREZWZpbmVkVG9rZW4pIHtcbiAgICAgICAgY29uc3QgbmZ0Q29sbGVjdGlvbktleSA9IENvaW5NYXAubmZ0Q29sbGVjdGlvbklkS2V5KGNvaW4pO1xuICAgICAgICBjb25zdCBleGlzdGluZ0J5TmZ0Q29sbGVjdGlvbklkID0gdGhpcy5fY29pbkJ5TmZ0Q29sbGVjdGlvbklELmdldChuZnRDb2xsZWN0aW9uS2V5KTtcbiAgICAgICAgaWYgKGV4aXN0aW5nQnlOZnRDb2xsZWN0aW9uSWQpIHtcbiAgICAgICAgICBpZiAoZXhpc3RpbmdCeU5mdENvbGxlY3Rpb25JZC5uZXR3b3JrLnR5cGUgPT09IGNvaW4ubmV0d29yay50eXBlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRHVwbGljYXRlTmZ0Q29sbGVjdGlvbklkRGVmaW5pdGlvbkVycm9yKG5mdENvbGxlY3Rpb25LZXksIGV4aXN0aW5nQnlOZnRDb2xsZWN0aW9uSWQubmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX2NvaW5CeU5mdENvbGxlY3Rpb25JRC5zZXQobmZ0Q29sbGVjdGlvbktleSwgY29pbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZSBhIEJhc2UgY29pbiBvYmplY3QgY29tcGxldGVseSBmcm9tIHRoZSBDb2luTWFwIHVzaW5nIGl0cyBJRC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBrZXkgdG8gc2VhcmNoIHRoZSBvbGQgY29pbiBvYmplY3RcbiAgICogQHBhcmFtIHtSZWFkb25seTxCYXNlQ29pbj59IGNvaW4gbmV3IGNvaW4gb2JqZWN0XG4gICAqL1xuICBwdWJsaWMgcmVwbGFjZShjb2luOiBSZWFkb25seTxCYXNlQ29pbj4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5oYXMoY29pbi5pZCkpIHtcbiAgICAgIGNvbnN0IG9sZENvaW4gPSB0aGlzLmdldChjb2luLmlkKTtcbiAgICAgIHRoaXMuX21hcC5kZWxldGUob2xkQ29pbi5uYW1lKTtcbiAgICAgIHRoaXMuX2NvaW5CeUlkcy5kZWxldGUob2xkQ29pbi5pZCk7XG4gICAgICBpZiAob2xkQ29pbi5hbGlhcykge1xuICAgICAgICB0aGlzLl9jb2luQnlBbGlhc2VzLmRlbGV0ZShvbGRDb2luLmFsaWFzKTtcbiAgICAgIH1cbiAgICAgIGlmIChvbGRDb2luLmlzVG9rZW4pIHtcbiAgICAgICAgaWYgKG9sZENvaW4gaW5zdGFuY2VvZiBDb250cmFjdEFkZHJlc3NEZWZpbmVkVG9rZW4pIHtcbiAgICAgICAgICB0aGlzLl9jb2luQnlDb250cmFjdEFkZHJlc3MuZGVsZXRlKENvaW5NYXAuY29udHJhY3RBZGRyZXNzS2V5KG9sZENvaW4pKTtcbiAgICAgICAgfSBlbHNlIGlmIChvbGRDb2luIGluc3RhbmNlb2YgTkZUQ29sbGVjdGlvbklkRGVmaW5lZFRva2VuKSB7XG4gICAgICAgICAgdGhpcy5fY29pbkJ5TmZ0Q29sbGVjdGlvbklELmRlbGV0ZShDb2luTWFwLm5mdENvbGxlY3Rpb25JZEtleShvbGRDb2luKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hZGRDb2luKGNvaW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhcmRjb2RlZCBtYXBwaW5nIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgTEVHQUNZX0NIQUlOX0lEX01BUDogUmVjb3JkPG51bWJlciwgc3RyaW5nPiA9IHtcbiAgICAxOiAnZXRoJyxcbiAgICA0MjogJ3RldGgnLFxuICAgIDU6ICdndGV0aCcsXG4gICAgNTYwMDQ4OiAnaHRldGgnLFxuICAgIDEwMDAxOiAnZXRodycsXG4gICAgODAwMDI6ICd0cG9seWdvbicsXG4gICAgMTM3OiAncG9seWdvbicsXG4gICAgNTY6ICdic2MnLFxuICAgIDk3OiAndGJzYycsXG4gICAgNDIxNjE6ICdhcmJldGgnLFxuICAgIDQyMTYxNDogJ3RhcmJldGgnLFxuICAgIDEwOiAnb3BldGgnLFxuICAgIDExMTU1NDIwOiAndG9wZXRoJyxcbiAgICAxMTE2OiAnY29yZWRhbycsXG4gICAgMTExNDogJ3Rjb3JlZGFvJyxcbiAgICAyNDg6ICdvYXMnLFxuICAgIDkzNzI6ICd0b2FzJyxcbiAgICAxNDogJ2ZscicsXG4gICAgMTE0OiAndGZscicsXG4gICAgMTk6ICdzZ2InLFxuICAgIDE2OiAndHNnYicsXG4gICAgMTExMTogJ3dlbWl4JyxcbiAgICAxMTEyOiAndHdlbWl4JyxcbiAgICA1MDogJ3hkYycsXG4gICAgNTE6ICd0eGRjJyxcbiAgICA4MDA5NDogJ2JlcmEnLFxuICAgIDgwMDY5OiAndGJlcmEnLFxuICAgIDQyMjIwOiAnY2VsbycsXG4gICAgMTExNDIyMjA6ICd0Y2VsbycsXG4gICAgMjIyMjogJ2thdmEnLFxuICAgIDIyMjE6ICd0a2F2YScsXG4gICAgNDMxMTQ6ICdhdmF4YycsXG4gICAgNDMxMTM6ICd0YXZheGMnLFxuICAgIDEwMDogJ2dubycsXG4gICAgMTMwOiAndW5pZXRoJyxcbiAgICAxMzAxOiAndHVuaWV0aCcsXG4gICAgMTkwNDE1OiAnaHBwZXRoJyxcbiAgICAxODEyMjg6ICd0aHBwZXRoJyxcbiAgICA2OTg1Mzg1OiAnaCcsXG4gICAgNzA4MDk2OTogJ3RoJyxcbiAgICA0NjYzOiAnaG9vZGV0aCcsXG4gICAgNDY2MzA6ICd0aG9vZGV0aCcsXG4gICAgMzI0OiAnemtldGgnLFxuICAgIDg0NTM6ICdiYXNlZXRoJyxcbiAgICA4NDUzMjogJ3RiYXNlZXRoJyxcbiAgICAxNDM6ICdtb24nLFxuICAgIDEwMTQzOiAndG1vbicsXG4gICAgNDgwOiAnd29ybGQnLFxuICAgIDQ4MDE6ICd0d29ybGQnLFxuICAgIDUwMzE6ICdzb21pJyxcbiAgICA1MDMxMjogJ3RzdHQnLFxuICAgIDE4Njg6ICdzb25laXVtJyxcbiAgICAxOTQ2OiAndHNvbmVpdW0nLFxuICAgIDMzMTExOiAndGFwZWNoYWluJyxcbiAgICAzMzEzOTogJ2FwZWNoYWluJyxcbiAgICA2ODg2ODk6ICd0cGhycycsXG4gICAgMTAyMDMwOiAnY3RjJyxcbiAgICAxMDIwMzE6ICd0Y3RjJyxcbiAgICA5OTg6ICd0aHlwZWV2bScsXG4gICAgOTk5OiAnaHlwZWV2bScsXG4gICAgMTY2MDI6ICd0b2cnLFxuICAgIDE2NjYxOiAnb2cnLFxuICAgIDk3NDY6ICd0eHBsJyxcbiAgICA5NzQ1OiAneHBsJyxcbiAgICAxNDYwMTogJ3Rzb25pYycsXG4gICAgMTQ2OiAnc29uaWMnLFxuICAgIDEzMjg6ICd0c2VpZXZtJyxcbiAgICAxMzI5OiAnc2VpZXZtJyxcbiAgICAxMDAxOiAndGthaWEnLFxuICAgIDgyMTc6ICdrYWlhJyxcbiAgICAxMjcwOiAndGlyeXMnLFxuICAgIDU5MTQxOiAndGxpbmVhZXRoJyxcbiAgICA1OTE0NDogJ2xpbmVhZXRoJyxcbiAgICAxMzE1OiAndGlwJyxcbiAgICAxNTE0OiAnaXAnLFxuICAgIDU0NTogJ3RmbG93JyxcbiAgICA3NDc6ICdmbG93JyxcbiAgICA5ODg2NzogJ3RwbHVtZScsXG4gICAgOTg4NjY6ICdwbHVtZScsXG4gICAgNjM0MzogJ3RtZWdhZXRoJyxcbiAgICA0MzI2OiAnbWVnYWV0aCcsXG4gICAgMjk1OiAnaGJhcmV2bScsXG4gICAgMjk2OiAndGhiYXJldm0nLFxuICAgIDE5NjogJ29rYnhsYXllcicsXG4gICAgMTk1MjogJ3Rva2J4bGF5ZXInLFxuICAgIDU3MzQ5NTE6ICdqb3ZheWV0aCcsXG4gICAgMjAxOTc3NTogJ3Rqb3ZheWV0aCcsXG4gICAgNTA0MjAwMjogJ3RhcmN1c2RjJyxcbiAgICA0MjE3OiAndGVtcG8nLFxuICAgIDQyNDMxOiAndHRlbXBvJyxcbiAgICA1MDAwOiAnbWFudGxlJyxcbiAgICA1MDAzOiAndG1hbnRsZScsXG4gICAgMjUzNjM6ICdmbHVlbnRldGgnLFxuICAgIDIwOTk0OiAndGZsdWVudGV0aCcsXG4gIH07XG5cbiAgcHJpdmF0ZSBidWlsZENoYWluSWRNYXAoKTogTWFwPG51bWJlciwgc3RyaW5nPiB7XG4gICAgY29uc3QgY2hhaW5JZE1hcCA9IG5ldyBNYXA8bnVtYmVyLCBzdHJpbmc+KCk7XG4gICAgdGhpcy5fbWFwLmZvckVhY2goKGNvaW4sIGNvaW5OYW1lKSA9PiB7XG4gICAgICAvLyBTa2lwIHRva2VucyAtIHRoZXkgc2hhcmUgdGhlIHNhbWUgY2hhaW5JZCBhcyB0aGVpciBwYXJlbnQgY2hhaW5cbiAgICAgIGlmIChjb2luLmlzVG9rZW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgbmV0d29yayA9IGNvaW4ubmV0d29yaztcbiAgICAgIGlmICgnY2hhaW5JZCcgaW4gbmV0d29yayAmJiB0eXBlb2YgKG5ldHdvcmsgYXMgRXRoZXJldW1OZXR3b3JrKS5jaGFpbklkID09PSAnbnVtYmVyJykge1xuICAgICAgICBjb25zdCBjaGFpbklkID0gKG5ldHdvcmsgYXMgRXRoZXJldW1OZXR3b3JrKS5jaGFpbklkO1xuICAgICAgICBpZiAoIWNoYWluSWRNYXAuaGFzKGNoYWluSWQpKSB7XG4gICAgICAgICAgY2hhaW5JZE1hcC5zZXQoY2hhaW5JZCwgY29pbk5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNoYWluSWRNYXA7XG4gIH1cblxuICBwdWJsaWMgY29pbk5hbWVGcm9tQ2hhaW5JZChjaGFpbklkOiBudW1iZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGNvaW5OYW1lID0gQ29pbk1hcC5MRUdBQ1lfQ0hBSU5fSURfTUFQW2NoYWluSWRdO1xuICAgIGlmIChjb2luTmFtZSkge1xuICAgICAgcmV0dXJuIGNvaW5OYW1lO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jb2luQnlDaGFpbklkID09PSBudWxsKSB7XG4gICAgICB0aGlzLl9jb2luQnlDaGFpbklkID0gdGhpcy5idWlsZENoYWluSWRNYXAoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2NvaW5CeUNoYWluSWQuZ2V0KGNoYWluSWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIGBnZXRgIHRvIHRocm93IGlmIGEgY29pbiBpcyBtaXNzaW5nLCBpbnN0ZWFkIG9mIHJldHVybmluZyB1bmRlZmluZWQuXG4gICAqIEl0IHdpbGwgaG9ub3Iga2V5IGVxdWl2YWxlbmNlcyBpbiBjYXNlIGdpdmVuIGtleSBpcyBtaXNzaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEByZXR1cm4ge0Jhc2VDb2lufVxuICAgKi9cbiAgcHVibGljIGdldChrZXk6IHN0cmluZyk6IFJlYWRvbmx5PEJhc2VDb2luPiB7XG4gICAgY29uc3QgY29pbiA9XG4gICAgICB0aGlzLl9tYXAuZ2V0KGtleSkgfHxcbiAgICAgIHRoaXMuX2NvaW5CeUlkcy5nZXQoa2V5KSB8fFxuICAgICAgdGhpcy5fY29pbkJ5QWxpYXNlcy5nZXQoa2V5KSB8fFxuICAgICAgdGhpcy5fY29pbkJ5Q29udHJhY3RBZGRyZXNzLmdldChrZXkpIHx8XG4gICAgICB0aGlzLl9jb2luQnlOZnRDb2xsZWN0aW9uSUQuZ2V0KGtleSk7XG5cbiAgICBpZiAoY29pbikge1xuICAgICAgcmV0dXJuIGNvaW47XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IENvaW5Ob3REZWZpbmVkRXJyb3Ioa2V5KTtcbiAgfVxuXG4gIHB1YmxpYyBoYXMoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5fbWFwLmhhcyhrZXkpIHx8XG4gICAgICB0aGlzLl9jb2luQnlJZHMuaGFzKGtleSkgfHxcbiAgICAgIHRoaXMuX2NvaW5CeUFsaWFzZXMuaGFzKGtleSkgfHxcbiAgICAgIHRoaXMuX2NvaW5CeUNvbnRyYWN0QWRkcmVzcy5oYXMoa2V5KSB8fFxuICAgICAgdGhpcy5fY29pbkJ5TmZ0Q29sbGVjdGlvbklELmhhcyhrZXkpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBtYXA8VD4obWFwcGVyOiAoY29pbjogUmVhZG9ubHk8QmFzZUNvaW4+LCBjb2luTmFtZTogc3RyaW5nKSA9PiBUKTogVFtdIHtcbiAgICBjb25zdCBtYXBSZXN1bHQ6IFRbXSA9IFtdO1xuICAgIHRoaXMuX21hcC5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICBtYXBSZXN1bHQucHVzaChtYXBwZXIodmFsdWUsIGtleSkpO1xuICAgIH0pO1xuICAgIHJldHVybiBtYXBSZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgcmVkdWNlPFQ+KHJlZHVjZXI6IChhY2M6IFQsIGNvaW46IFJlYWRvbmx5PEJhc2VDb2luPiwgY29pbk5hbWU6IHN0cmluZykgPT4gVCwgaW5pdGlhbFZhbHVlOiBUKTogVCB7XG4gICAgbGV0IGFjYyA9IGluaXRpYWxWYWx1ZTtcbiAgICB0aGlzLl9tYXAuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgYWNjID0gcmVkdWNlcihhY2MsIHZhbHVlLCBrZXkpO1xuICAgIH0pO1xuICAgIHJldHVybiBhY2M7XG4gIH1cblxuICBwdWJsaWMgZmlsdGVyKHByZWRpY2F0ZTogKGNvaW46IFJlYWRvbmx5PEJhc2VDb2luPiwgY29pbk5hbWU6IHN0cmluZykgPT4gYm9vbGVhbik6IENvaW5NYXAge1xuICAgIGNvbnN0IGZpbHRlclJlc3VsdDogUmVhZG9ubHk8QmFzZUNvaW4+W10gPSBbXTtcbiAgICB0aGlzLl9tYXAuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwga2V5KSkge1xuICAgICAgICBmaWx0ZXJSZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIENvaW5NYXAuZnJvbUNvaW5zKGZpbHRlclJlc3VsdCk7XG4gIH1cblxuICBwdWJsaWMgZm9yRWFjaChjYWxsYmFjazogKGNvaW46IFJlYWRvbmx5PEJhc2VDb2luPiwgY29pbk5hbWU6IHN0cmluZykgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuX21hcC5mb3JFYWNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIHB1YmxpYyBbU3ltYm9sLml0ZXJhdG9yXSgpOiBJdGVyYWJsZUl0ZXJhdG9yPFtzdHJpbmcsIFJlYWRvbmx5PEJhc2VDb2luPl0+IHtcbiAgICByZXR1cm4gdGhpcy5fbWFwW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgfVxufVxuIl19
|