New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@rosen-bridge/tokens

Package Overview
Dependencies
Maintainers
0
Versions
19
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@rosen-bridge/tokens - npm Package Compare versions

Comparing version 1.2.1 to 2.0.0

dist/vitest.config.d.ts

3

dist/lib/TokenMap/constants.d.ts

@@ -0,4 +1,7 @@

export declare const ERGO_CHAIN = "ergo";
export declare const NATIVE_TOKEN = "native";
export declare const NATIVE_RESIDENCY = "native";
export declare const WRAPPED_RESIDENCY = "wrapped";
export declare const ERGO_SIDE_TOKEN_ID_KEY = "ergoSideTokenId";
export declare const REQUIRED_FIELDS: string[];
//# sourceMappingURL=constants.d.ts.map

@@ -0,4 +1,14 @@

export const ERGO_CHAIN = 'ergo';
export const NATIVE_TOKEN = 'native';
export const NATIVE_RESIDENCY = 'native';
export const WRAPPED_RESIDENCY = 'wrapped';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL1Rva2VuTWFwL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDO0FBQ3JDLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLFFBQVEsQ0FBQztBQUN6QyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgTkFUSVZFX1RPS0VOID0gJ25hdGl2ZSc7XG5leHBvcnQgY29uc3QgTkFUSVZFX1JFU0lERU5DWSA9ICduYXRpdmUnO1xuZXhwb3J0IGNvbnN0IFdSQVBQRURfUkVTSURFTkNZID0gJ3dyYXBwZWQnO1xuIl19
export const ERGO_SIDE_TOKEN_ID_KEY = 'ergoSideTokenId';
export const REQUIRED_FIELDS = [
ERGO_SIDE_TOKEN_ID_KEY,
'tokenId',
'name',
'decimals',
'type',
'residency',
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL1Rva2VuTWFwL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDO0FBQ2pDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUM7QUFDckMsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDO0FBQ3pDLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLFNBQVMsQ0FBQztBQUMzQyxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxpQkFBaUIsQ0FBQztBQUN4RCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUc7SUFDN0Isc0JBQXNCO0lBQ3RCLFNBQVM7SUFDVCxNQUFNO0lBQ04sVUFBVTtJQUNWLE1BQU07SUFDTixXQUFXO0NBQ1osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBFUkdPX0NIQUlOID0gJ2VyZ28nO1xuZXhwb3J0IGNvbnN0IE5BVElWRV9UT0tFTiA9ICduYXRpdmUnO1xuZXhwb3J0IGNvbnN0IE5BVElWRV9SRVNJREVOQ1kgPSAnbmF0aXZlJztcbmV4cG9ydCBjb25zdCBXUkFQUEVEX1JFU0lERU5DWSA9ICd3cmFwcGVkJztcbmV4cG9ydCBjb25zdCBFUkdPX1NJREVfVE9LRU5fSURfS0VZID0gJ2VyZ29TaWRlVG9rZW5JZCc7XG5leHBvcnQgY29uc3QgUkVRVUlSRURfRklFTERTID0gW1xuICBFUkdPX1NJREVfVE9LRU5fSURfS0VZLFxuICAndG9rZW5JZCcsXG4gICduYW1lJyxcbiAgJ2RlY2ltYWxzJyxcbiAgJ3R5cGUnLFxuICAncmVzaWRlbmN5Jyxcbl07XG4iXX0=

28

dist/lib/TokenMap/TokenMap.d.ts

@@ -0,1 +1,2 @@

import { Semaphore } from 'await-semaphore';
import { RosenAmount, RosenChainToken, RosenTokens } from './types';

@@ -6,10 +7,20 @@ /**

export declare class TokenMap {
private tokensConfig;
protected tokensConfig: RosenTokens;
protected updateSemaphore: Semaphore;
constructor();
/**
* it takes input tokens list json and the default value is used for
* production
* @param tokens tokens list as json
* returns tokens config
*/
constructor(tokens: RosenTokens);
getConfig: () => RosenTokens;
/**
* set tokens config by token map boxes
* @param serializedBoxes list of sigma serialized bytes of token map config boxes
*/
updateConfigByBoxes: (serializedBoxes: string[]) => Promise<void>;
/**
* set tokens config by json
* @param tokens
*/
updateConfigByJson: (tokens: RosenTokens) => Promise<void>;
/**
* Get a list of tokens that can be transferred between specific chains

@@ -38,9 +49,4 @@ * @param fromChain

[key: string]: string;
}) => Record<string, RosenChainToken>[];
}) => Record<string, RosenChainToken & Record<string, any>>[];
/**
* returns ID key for specific chain.
* @param chain: one of supported tokens
*/
getIdKey: (chain: string) => string;
/**
* returns tokenId in specific chain with respect to idKeys in the tokensConfig

@@ -47,0 +53,0 @@ * @param token

@@ -1,2 +0,5 @@

import { NATIVE_RESIDENCY } from './constants';
import { ErgoBox } from 'ergo-lib-wasm-nodejs';
import { Semaphore } from 'await-semaphore';
import { ERGO_CHAIN, ERGO_SIDE_TOKEN_ID_KEY, NATIVE_RESIDENCY, REQUIRED_FIELDS, } from './constants';
import { CorruptedConfigError, } from './types';
/**

@@ -7,11 +10,90 @@ * TokenMap class searches for different assets properties in different chains

tokensConfig;
updateSemaphore;
constructor() {
this.tokensConfig = [];
this.updateSemaphore = new Semaphore(1);
}
/**
* it takes input tokens list json and the default value is used for
* production
* @param tokens tokens list as json
* returns tokens config
*/
constructor(tokens) {
this.tokensConfig = tokens;
}
getConfig = () => {
return structuredClone(this.tokensConfig);
};
/**
* set tokens config by token map boxes
* @param serializedBoxes list of sigma serialized bytes of token map config boxes
*/
updateConfigByBoxes = async (serializedBoxes) => {
const tokens = [];
const ergoConfigs = [];
const nonErgoConfigs = [];
serializedBoxes.forEach((serializedBox) => {
const box = ErgoBox.sigma_parse_bytes(Uint8Array.from(Buffer.from(serializedBox, 'hex')));
const boxId = box.box_id().to_str();
const chain = Buffer.from(box.register_value(4)?.to_byte_array() ?? []).toString();
const headers = (box.register_value(5)?.to_coll_coll_byte() ?? []).map((header) => Buffer.from(header).toString());
const values = box
.register_value(6)
?.to_js()
.map((arr) => arr.map((value) => Buffer.from(value).toString()));
if (!REQUIRED_FIELDS.every((field) => headers.includes(field)))
throw new CorruptedConfigError(boxId, `Headers does not contain all required fields. Found [${headers.join(',')}]`);
if (headers[0] !== ERGO_SIDE_TOKEN_ID_KEY)
throw new CorruptedConfigError(boxId, `Expected first header to be [${ERGO_SIDE_TOKEN_ID_KEY}] but found [${headers.join(',')}]`);
(chain === ERGO_CHAIN ? ergoConfigs : nonErgoConfigs).push({
boxId,
chain,
headers,
values,
});
});
ergoConfigs.forEach((config) => {
const boxId = config.boxId;
const headers = config.headers;
const values = config.values;
values.forEach((data) => {
if (data.length !== headers.length)
throw new CorruptedConfigError(boxId, `Mismatch between headers and data at [${values.indexOf(data)}]: Expected length [${headers.length}] found [${data.length}]`);
if (tokens.find((token) => token.ergo.tokenId === data[0]))
throw new CorruptedConfigError(boxId, `Duplicate ergo token [${data[0]}] is found`);
const chainToken = {};
for (let i = 1; i < headers.length; i++)
chainToken[headers[i]] = data[i];
chainToken.decimals = Number(chainToken.decimals);
tokens.push({ [ERGO_CHAIN]: chainToken });
});
});
nonErgoConfigs.forEach((config) => {
const boxId = config.boxId;
const chain = config.chain;
const headers = config.headers;
const values = config.values;
values.forEach((data) => {
if (data.length !== headers.length)
throw new CorruptedConfigError(boxId, `Mismatch between headers and data at [${values.indexOf(data)}]: Expected length [${headers.length}] found [${data.length}]`);
const index = tokens.findIndex((token) => token.ergo.tokenId === data[0]);
if (index === -1)
throw new CorruptedConfigError(boxId, `Ergo token [${data[0]}] is not found`);
const chainToken = {};
for (let i = 1; i < headers.length; i++)
chainToken[headers[i]] = data[i];
chainToken.decimals = Number(chainToken.decimals);
if (Object.hasOwn(tokens[index], chain))
throw new CorruptedConfigError(boxId, `Duplicate token for ergo token [${data[0]}] on chain [${chain}] is found: Have [${tokens[index][chain].tokenId}] found [${chainToken.tokenId}]`);
tokens[index][chain] = chainToken;
});
});
await this.updateConfigByJson(tokens);
};
/**
* set tokens config by json
* @param tokens
*/
updateConfigByJson = async (tokens) => {
await this.updateSemaphore.acquire().then(async (release) => {
this.tokensConfig = tokens;
release();
});
};
/**
* Get a list of tokens that can be transferred between specific chains

@@ -22,3 +104,3 @@ * @param fromChain

getTokens = (fromChain, toChain) => {
return this.tokensConfig.tokens
return this.tokensConfig
.filter((item) => Object.hasOwn(item, fromChain) && Object.hasOwn(item, toChain))

@@ -31,3 +113,3 @@ .map((item) => item[fromChain]);

getAllChains = () => {
return this.tokensConfig.tokens
return this.tokensConfig
.map((item) => Object.keys(item))

@@ -43,3 +125,3 @@ .reduce((allUniqChains, tokenChains) => [

getSupportedChains = (sourceChain) => {
return this.tokensConfig.tokens
return this.tokensConfig
.filter((token) => Object.hasOwn(token, sourceChain))

@@ -58,3 +140,3 @@ .map((token) => Object.keys(token))

search = (chain, condition) => {
return this.tokensConfig.tokens.filter((token) => {
return this.tokensConfig.filter((token) => {
if (Object.hasOwnProperty.call(token, chain)) {

@@ -76,12 +158,2 @@ const resToken = token[chain];

/**
* returns ID key for specific chain.
* @param chain: one of supported tokens
*/
getIdKey = (chain) => {
if (Object.hasOwnProperty.call(this.tokensConfig.idKeys, chain)) {
return this.tokensConfig.idKeys[chain];
}
throw Error(`chain ${chain} not supported in current config`);
};
/**
* returns tokenId in specific chain with respect to idKeys in the tokensConfig

@@ -104,9 +176,3 @@ * @param token

getID = (token, chain) => {
if (Object.hasOwnProperty.call(this.tokensConfig.idKeys, chain)) {
const idKey = this.tokensConfig.idKeys[chain];
return token[chain][idKey];
}
else {
throw new Error(`idKey of the ${chain} chain is missed in the config file`);
}
return token[chain].tokenId;
};

@@ -118,5 +184,5 @@ /**

getAllNativeTokens = (chain) => {
return this.tokensConfig.tokens
return this.tokensConfig
.filter((token) => Object.hasOwn(token, chain) &&
token[chain].metaData.residency == NATIVE_RESIDENCY)
token[chain].residency == NATIVE_RESIDENCY)
.map((token) => token[chain]);

@@ -129,3 +195,3 @@ };

getTokenSet = (tokenId) => {
const result = this.tokensConfig.tokens.filter((tokenSet) => Object.keys(tokenSet).filter((chain) => tokenSet[chain][this.getIdKey(chain)] === tokenId).length);
const result = this.tokensConfig.filter((tokenSet) => Object.keys(tokenSet).filter((chain) => tokenSet[chain].tokenId === tokenId).length);
if (result.length === 0)

@@ -199,2 +265,2 @@ return undefined;

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVG9rZW5NYXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvVG9rZW5NYXAvVG9rZW5NYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRy9DOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFFBQVE7SUFDWCxZQUFZLENBQWM7SUFFbEM7Ozs7T0FJRztJQUNILFlBQVksTUFBbUI7UUFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxTQUFTLEdBQUcsQ0FBQyxTQUFpQixFQUFFLE9BQWUsRUFBMEIsRUFBRTtRQUN6RSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTTthQUM1QixNQUFNLENBQ0wsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUN6RTthQUNBLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsQ0FBQyxDQUFDO0lBRUY7O09BRUc7SUFDSCxZQUFZLEdBQUcsR0FBa0IsRUFBRTtRQUNqQyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTTthQUM1QixHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDaEMsTUFBTSxDQUNMLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDOUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsYUFBYSxFQUFFLEdBQUcsV0FBVyxDQUFDLENBQUM7U0FDL0MsRUFDRCxFQUFFLENBQ0gsQ0FBQztJQUNOLENB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QUMsT0FBTyxDQUFDLENBQUMsUUFBUSxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQztZQUMxRSxPQUFPO2dCQUNMLE1BQU0sRUFBRSxNQUFNO2dCQUNkLFFBQVEsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUTthQUNuQyxDQUFDO1NBQ0g7SUFDSCxDQUFDLENBQUM7SUFFRjs7O09BR0c7SUFDSCxzQkFBc0IsR0FBRyxDQUFDLE9BQWUsRUFBc0IsRUFBRTtRQUMvRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pDLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRTtZQUN4Qiw0Q0FBNEM7WUFDNUMsT0FBTyxTQUFTLENBQUM7U0FDbEI7UUFDRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQ2IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUM5RCxDQUFDO0lBQ0osQ0FBQyxDQUFDO0NBQ0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOQVRJVkVfUkVTSURFTkNZIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgUm9zZW5BbW91bnQsIFJvc2VuQ2hhaW5Ub2tlbiwgUm9zZW5Ub2tlbnMgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBUb2tlbk1hcCBjbGFzcyBzZWFyY2hlcyBmb3IgZGlmZmVyZW50IGFzc2V0cyBwcm9wZXJ0aWVzIGluIGRpZmZlcmVudCBjaGFpbnNcbiAqL1xuZXhwb3J0IGNsYXNzIFRva2VuTWFwIHtcbiAgcHJpdmF0ZSB0b2tlbnNDb25maWc6IFJvc2VuVG9rZW5zO1xuXG4gIC8qKlxuICAgKiBpdCB0YWtlcyBpbnB1dCB0b2tlbnMgbGlzdCBqc29uIGFuZCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyB1c2VkIGZvclxuICAgKiAgcHJvZHVjdGlvblxuICAgKiBAcGFyYW0gdG9rZW5zIHRva2VucyBsaXN0IGFzIGpzb25cbiAgICovXG4gIGNvbnN0cnVjdG9yKHRva2VuczogUm9zZW5Ub2tlbnMpIHtcbiAgICB0aGlzLnRva2Vuc0NvbmZpZyA9IHRva2VucztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBsaXN0IG9mIHRva2VucyB0aGF0IGNhbiBiZSB0cmFuc2ZlcnJlZCBiZXR3ZWVuIHNwZWNpZmljIGNoYWluc1xuICAgKiBAcGFyYW0gZnJvbUNoYWluXG4gICAqIEBwYXJhbSB0b0NoYWluXG4gICAqL1xuICBnZXRUb2tlbnMgPSAoZnJvbUNoYWluOiBzdHJpbmcsIHRvQ2hhaW46IHN0cmluZyk6IEFycmF5PFJvc2VuQ2hhaW5Ub2tlbj4gPT4ge1xuICAgIHJldHVybiB0aGlzLnRva2Vuc0NvbmZpZy50b2tlbnNcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChpdGVtKSA9PiBPYmplY3QuaGFzT3duKGl0ZW0sIGZyb21DaGFpbikgJiYgT2JqZWN0Lmhhc093bihpdGVtLCB0b0NoYWluKVxuICAgICAgKVxuICAgICAgLm1hcCgoaXRlbSkgPT4gaXRlbVtmcm9tQ2hhaW5dKTtcbiAgfTtcblxuICAvKipcbiAgICogZ2V0IGEgbGlzdCBvZiBhbGwgc3VwcG9ydGVkIG5ldHdvcmsgbmFtZXNcbiAgICovXG4gIGdldEFsbENoYWlucyA9ICgpOiBBcnJheTxzdHJpbmc+ID0+IHtcbiAgICByZXR1cm4gdGhpcy50b2tlbnNDb25maWcudG9rZW5zXG4gICAgICAubWFwKChpdGVtKSA9PiBPYmplY3Qua2V5cyhpdGVtKSlcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChhbGxVbmlxQ2hhaW5zLCB0b2tlbkNoYWlucykgPT4gW1xuICAgICAgICAgIC4uLm5ldyBTZXQoWy4uLmFsbFVuaXFDaGFpbnMsIC4uLnRva2VuQ2hhaW5zXSksXG4gICAgICAgIF0sXG4gICAgICAgIFtdXG4gICAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBnZXQgbGlzdCBvZiBhbGwgc3VwcG9ydGVkIGNoYWlucyBmb3Igc3BlY2lmaWMgY2hhaW5cbiAgICogQHBhcmFtIHNvdXJjZUNoYWluXG4gICAqL1xuICBnZXRTdXBwb3J0ZWRDaGFpbnMgPSAoc291cmNlQ2hhaW46IHN0cmluZyk6IEFycmF5PHN0cmluZz4gPT4ge1xuICAgIHJldHVybiB0aGlzLnRva2Vuc0NvbmZpZy50b2tlbnNcbiAgICAgIC5maWx0ZXIoKHRva2VuKSA9PiBPYmplY3QuaGFzT3duKHRva2VuLCBzb3VyY2VDaGFpbikpXG4gICAgICAubWFwKCh0b2tlbikgPT4gT2JqZWN0LmtleXModG9rZW4pKVxuICAgICAgLnJlZHVjZShcbiAgICAgICAgKGFsbENoYWlucywgbmV3Q2hhaW5zKSA9PiBbLi4ubmV3IFNldChbLi4uYWxsQ2hhaW5zLCAuLi5uZXdDaGFpbnNdKV0sXG4gICAgICAgIFtdXG4gICAgICApXG4gICAgICAuZmlsdGVyKChjaGFpbikgPT4gY2hhaW4gIT09IHNvdXJjZUNoYWluKTtcbiAgfTtcblxuICAvKipcbiAgICogaXQgcmV0dXJucyBzcGVjaWZpYyB0b2tlbiB3aXRoIHJlc3BlY3QgdG8gY29uZGl0aW9uIG9uIHRoZSBzcGVjaWZpYyBjaGFpblxuICAgKiBAcGFyYW0gY2hhaW5cbiAgICogIGV4YW1wbGU6IFwiZXJnb1wiXG4gICAqIEBwYXJhbSBjb25kaXRpb25cbiAgICogIGV4YW1wbGU6IHt0b2tlbklkOlwidG9rZW5JZFwifVxuICAgKi9cbiAgc2VhcmNoID0gKGNoYWluOiBzdHJpbmcsIGNvbmRpdGlvbjogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSkgPT4ge1xuICAgIHJldHVybiB0aGlzLnRva2Vuc0NvbmZpZy50b2tlbnMuZmlsdGVyKCh0b2tlbikgPT4ge1xuICAgICAgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRva2VuLCBjaGFpbikpIHtcbiAgICAgICAgY29uc3QgcmVzVG9rZW4gPSB0b2tlbltjaGFpbl07XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhjb25kaXRpb24pKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIU9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlc1Rva2VuLCBrZXkpIHx8XG4gICAgICAgICAgICByZXNUb2tlbltrZXldICE9PSB2YWxcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIHJldHVybnMgSUQga2V5IGZvciBzcGVjaWZpYyBjaGFpbi5cbiAgICogQHBhcmFtIGNoYWluOiBvbmUgb2Ygc3VwcG9ydGVkIHRva2Vuc1xuICAgKi9cbiAgZ2V0SWRLZXkgPSAoY2hhaW46IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMudG9rZW5zQ29uZmlnLmlkS2V5cywgY2hhaW4pKSB7XG4gICAgICByZXR1cm4gdGhpcy50b2tlbnNDb25maWcuaWRLZXlzW2NoYWluXTtcbiAgICB9XG4gICAgdGhyb3cgRXJyb3IoYGNoYWluICR7Y2hhaW59IG5vdCBzdXBwb3J0ZWQgaW4gY3VycmVudCBjb25maWdgKTtcbiAgfTtcblxuICAvKipcbiAgICogcmV0dXJucyB0b2tlbklkIGluIHNwZWNpZmljIGNoYWluIHdpdGggcmVzcGVjdCB0byBpZEtleXMgaW4gdGhlIHRva2Vuc0NvbmZpZ1xuICAgKiBAcGFyYW0gdG9rZW5cbiAgICogIGV4YW1wbGU6IHtcbiAgICogICAgICAgXCJlcmdvXCI6IHtcbiAgICogICAgICAgICBcInRva2VuSWRcIjogXCJ0b2tlbklkXCIsXG4gICAqICAgICAgICAgXCJ0b2tlbk5hbWVcIjogXCJ0b2tlbjFcIlxuICAgKiAgICAgICB9LFxuICAgKiAgICAgICBcImNhcmRhbm9cIjoge1xuICAgKiAgICAgICAgIFwidG9rZW5JZFwiOiBcIi4uLlwiLFxuICAgKiAgICAgICAgIFwicG9saWN5SWRcIjogXCJwb2xpY3lcIixcbiAgICogICAgICAgICBcImFzc2V0TmFtZVwiOiBcImlkXCJcbiAgICogICAgICAgfVxuICAgKiAgICAgfVxuICAgKiBAcGFyYW0gY2hhaW5cbiAgICogIGV4YW1wbGU6IFwiY2FyZGFub1wiXG4gICAqL1xuICBnZXRJRCA9IChcbiAgICB0b2tlbjogeyBba2V5OiBzdHJpbmddOiBSb3NlbkNoYWluVG9rZW4gfSxcbiAgICBjaGFpbjogc3RyaW5nXG4gICk6IHN0cmluZyA9PiB7XG4gICAgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMudG9rZW5zQ29uZmlnLmlkS2V5cywgY2hhaW4pKSB7XG4gICAgICBjb25zdCBpZEtleSA9IHRoaXMudG9rZW5zQ29uZmlnLmlkS2V5c1tjaGFpbl07XG4gICAgICByZXR1cm4gdG9rZW5bY2hhaW5dW2lkS2V5XSBhcyBzdHJpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYGlkS2V5IG9mIHRoZSAke2NoYWlufSBjaGFpbiBpcyBtaXNzZWQgaW4gdGhlIGNvbmZpZyBmaWxlYFxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIHJldHVybiBhbGwgbmF0aXZlIHRva2VucyBmb3IgYSBzcGVjaWZpYyBjaGFpbi5cbiAgICogQHBhcmFtIGNoYWluOiBvbmUgb2Ygc3VwcG9ydGVkIGNoYWluc1xuICAgKi9cbiAgZ2V0QWxsTmF0aXZlVG9rZW5zID0gKGNoYWluOiBzdHJpbmcpOiBSb3NlbkNoYWluVG9rZW5bXSA9PiB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zQ29uZmlnLnRva2Vuc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgKHRva2VuKSA9PlxuICAgICAgICAgIE9iamVjdC5oYXNPd24odG9rZW4sIGNoYWluKSAmJlxuICAgICAgICAgIHRva2VuW2NoYWluXS5tZXRhRGF0YS5yZXNpZGVuY3kgPT0gTkFUSVZFX1JFU0lERU5DWVxuICAgICAgKVxuICAgICAgLm1hcCgodG9rZW4pID0+IHRva2VuW2NoYWluXSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIGdldCBhIHRva2VuIHNldCBieSB0aGUgaWQgb2Ygb25lIG9mIHRoZW1cbiAgICogQHBhcmFtIHRva2VuSWRcbiAgICovXG4gIGdldFRva2VuU2V0ID0gKFxuICAgIHRva2VuSWQ6IHN0cmluZ1xuICApOiBSZWNvcmQ8c3RyaW5nLCBSb3NlbkNoYWluVG9rZW4+IHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnRva2Vuc0NvbmZpZy50b2tlbnMuZmlsdGVyKFxuICAgICAgKHRva2VuU2V0KSA9PlxuICAgICAgICBPYmplY3Qua2V5cyh0b2tlblNldCkuZmlsdGVyKFxuICAgICAgICAgIChjaGFpbikgPT4gdG9rZW5TZXRbY2hhaW5dW3RoaXMuZ2V0SWRLZXkoY2hhaW4pXSA9PT0gdG9rZW5JZFxuICAgICAgICApLmxlbmd0aFxuICAgICk7XG4gICAgaWYgKHJlc3VsdC5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlc3VsdFswXTtcbiAgfTtcblxuICAvKipcbiAgICogd3JhcHMgYW1vdW50IG9mIGEgdG9rZW4gb24gdGhlIGdpdmVuIGNoYWluXG4gICAqIEBwYXJhbSB0b2tlbklkXG4gICAqIEBwYXJhbSBhbW91bnRcbiAgICogQHBhcmFtIGNoYWluXG4gICAqL1xuICB3cmFwQW1vdW50ID0gKFxuICAgIHRva2VuSWQ6IHN0cmluZyxcbiAgICBhbW91bnQ6IGJpZ2ludCxcbiAgICBjaGFpbjogc3RyaW5nXG4gICk6IFJvc2VuQW1vdW50ID0+IHtcbiAgICBjb25zdCB0b2tlbnMgPSB0aGlzLmdldFRva2VuU2V0KHRva2VuSWQpO1xuXG4gICAgaWYgKHRva2VucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyB0b2tlbiBpcyBub3Qgc3VwcG9ydGVkLCBubyBkZWNpbWFscyBkcm9wXG4gICAgICByZXR1cm4ge1xuICAgICAgICBhbW91bnQ6IGFtb3VudCxcbiAgICAgICAgZGVjaW1hbHM6IDAsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzaWduaWZpY2FudERlY2ltYWxzID0gTWF0aC5taW4oXG4gICAgICAgIC4uLk9iamVjdC5rZXlzKHRva2VucykubWFwKFxuICAgICAgICAgIChzdXBwb3J0ZWRDaGFpbikgPT4gdG9rZW5zW3N1cHBvcnRlZENoYWluXS5kZWNpbWFsc1xuICAgICAgICApXG4gICAgICApO1xuICAgICAgY29uc3QgcmVzdWx0ID1cbiAgICAgICAgYW1vdW50IC8gQmlnSW50KDEwICoqICh0b2tlbnNbY2hhaW5dLmRlY2ltYWxzIC0gc2lnbmlmaWNhbnREZWNpbWFscykpICtcbiAgICAgICAgKGFtb3VudCAlIEJpZ0ludCgxMCAqKiAodG9rZW5zW2NoYWluXS5kZWNpbWFscyAtIHNpZ25pZmljYW50RGVjaW1hbHMpKVxuICAgICAgICAgID8gMW5cbiAgICAgICAgICA6IDBuKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFtb3VudDogcmVzdWx0LFxuICAgICAgICBkZWNpbWFsczogc2lnbmlmaWNhbnREZWNpbWFscyxcbiAgICAgIH07XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiB3cmFwcyBhbW91bnQgb2YgYSB0b2tlbiBvbiB0aGUgZ2l2ZW4gY2hhaW5cbiAgICogQHBhcmFtIHRva2VuSWRcbiAgICogQHBhcmFtIGFtb3VudFxuICAgKiBAcGFyYW0gdG9DaGFpblxuICAgKi9cbiAgdW53cmFwQW1vdW50ID0gKFxuICAgIHRva2VuSWQ6IHN0cmluZyxcbiAgICBhbW91bnQ6IGJpZ2ludCxcbiAgICB0b0NoYWluOiBzdHJpbmdcbiAgKTogUm9zZW5BbW91bnQgPT4ge1xuICAgIGNvbnN0IHRva2VucyA9IHRoaXMuZ2V0VG9rZW5TZXQodG9rZW5JZCk7XG5cbiAgICBpZiAodG9rZW5zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHRva2VuIGlzIG5vdCBzdXBwb3J0ZWQsIG5vIGRlY2ltYWxzIGFkZGVkXG4gICAgICByZXR1cm4ge1xuICAgICAgICBhbW91bnQ6IGFtb3VudCxcbiAgICAgICAgZGVjaW1hbHM6IDAsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzaWduaWZpY2FudERlY2ltYWxzID0gTWF0aC5taW4oXG4gICAgICAgIC4uLk9iamVjdC5rZXlzKHRva2VucykubWFwKChjaGFpbikgPT4gdG9rZW5zW2NoYWluXS5kZWNpbWFscylcbiAgICAgICk7XG4gICAgICBjb25zdCByZXN1bHQgPVxuICAgICAgICBhbW91bnQgKiBCaWdJbnQoMTAgKiogKHRva2Vuc1t0b0NoYWluXS5kZWNpbWFscyAtIHNpZ25pZmljYW50RGVjaW1hbHMpKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFtb3VudDogcmVzdWx0LFxuICAgICAgICBkZWNpbWFsczogdG9rZW5zW3RvQ2hhaW5dLmRlY2ltYWxzLFxuICAgICAgfTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIHJldHVybnMgc2lnbmlmaWNhbnQgZGVjaW1hbHMgKGRlY2ltYWxzIG9mIHRoZSB3cmFwcGVkIHZhbHVlKSBmb3IgYSB0b2tlblxuICAgKiBAcGFyYW0gdG9rZW5JZFxuICAgKi9cbiAgZ2V0U2lnbmlmaWNhbnREZWNpbWFscyA9ICh0b2tlbklkOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQgPT4ge1xuICAgIGNvbnN0IHRva2VucyA9IHRoaXMuZ2V0VG9rZW5TZXQodG9rZW5JZCk7XG4gICAgaWYgKHRva2VucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyB0b2tlbiBpcyBub3Qgc3VwcG9ydGVkLCBubyBkZWNpbWFscyBhZGRlZFxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIE1hdGgubWluKFxuICAgICAgLi4uT2JqZWN0LmtleXModG9rZW5zKS5tYXAoKGNoYWluKSA9PiB0b2tlbnNbY2hhaW5dLmRlY2ltYWxzKVxuICAgICk7XG4gIH07XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVG9rZW5NYXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvVG9rZW5NYXAvVG9rZW5NYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQ0wsVUFBVSxFQUNWLHNCQUFzQixFQUN0QixnQkFBZ0IsRUFDaEIsZUFBZSxHQUNoQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQ0wsb0JBQW9CLEdBS3JCLE1BQU0sU0FBUyxDQUFDO0FBRWpCOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFFBQVE7SUFDVCxZQUFZLENBQWM7SUFDMUIsZUFBZSxDQUFZO0lBRXJDO1FBQ0UsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxTQUFTLEdBQUcsR0FBRyxFQUFFO1FBQ2YsT0FBTyxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzVDLENBQUMsQ0FBQztJQUVGOzs7T0FHRztJQUNILG1CQUFtQixHQUFHLEtBQUssRUFBRSxlQUF5QixFQUFFLEVBQUU7UUFDeEQsTUFBTSxNQUFNLEdBQWdCLEVBQUUsQ0FBQztRQUMvQixNQUFNLFdBQVcsR0FBc0IsRUFBRSxDQUFDO1FBQzFDLE1BQU0sY0FBYyxHQUFzQixFQUFFLENBQUM7UUFFN0MsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFO1lBQ3hDLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FDbkMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FB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QUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7WUFDMUUsT0FBTztnQkFDTCxNQUFNLEVBQUUsTUFBTTtnQkFDZCxRQUFRLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVE7YUFDbkMsQ0FBQztTQUNIO0lBQ0gsQ0FBQyxDQUFDO0lBRUY7OztPQUdHO0lBQ0gsc0JBQXNCLEdBQUcsQ0FBQyxPQUFlLEVBQXNCLEVBQUU7UUFDL0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6QyxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUU7WUFDeEIsNENBQTRDO1lBQzVDLE9BQU8sU0FBUyxDQUFDO1NBQ2xCO1FBQ0QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUNiLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FDOUQsQ0FBQztJQUNKLENBQUMsQ0FBQztDQUNIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXJnb0JveCB9IGZyb20gJ2VyZ28tbGliLXdhc20tbm9kZWpzJztcbmltcG9ydCB7IFNlbWFwaG9yZSB9IGZyb20gJ2F3YWl0LXNlbWFwaG9yZSc7XG5pbXBvcnQge1xuICBFUkdPX0NIQUlOLFxuICBFUkdPX1NJREVfVE9LRU5fSURfS0VZLFxuICBOQVRJVkVfUkVTSURFTkNZLFxuICBSRVFVSVJFRF9GSUVMRFMsXG59IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7XG4gIENvcnJ1cHRlZENvbmZpZ0Vycm9yLFxuICBFeHRyYWN0ZWRDb25maWcsXG4gIFJvc2VuQW1vdW50LFxuICBSb3NlbkNoYWluVG9rZW4sXG4gIFJvc2VuVG9rZW5zLFxufSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBUb2tlbk1hcCBjbGFzcyBzZWFyY2hlcyBmb3IgZGlmZmVyZW50IGFzc2V0cyBwcm9wZXJ0aWVzIGluIGRpZmZlcmVudCBjaGFpbnNcbiAqL1xuZXhwb3J0IGNsYXNzIFRva2VuTWFwIHtcbiAgcHJvdGVjdGVkIHRva2Vuc0NvbmZpZzogUm9zZW5Ub2tlbnM7XG4gIHByb3RlY3RlZCB1cGRhdGVTZW1hcGhvcmU6IFNlbWFwaG9yZTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnRva2Vuc0NvbmZpZyA9IFtdO1xuICAgIHRoaXMudXBkYXRlU2VtYXBob3JlID0gbmV3IFNlbWFwaG9yZSgxKTtcbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm5zIHRva2VucyBjb25maWdcbiAgICovXG4gIGdldENvbmZpZyA9ICgpID0+IHtcbiAgICByZXR1cm4gc3RydWN0dXJlZENsb25lKHRoaXMudG9rZW5zQ29uZmlnKTtcbiAgfTtcblxuICAvKipcbiAgICogc2V0IHRva2VucyBjb25maWcgYnkgdG9rZW4gbWFwIGJveGVzXG4gICAqIEBwYXJhbSBzZXJpYWxpemVkQm94ZXMgbGlzdCBvZiBzaWdtYSBzZXJpYWxpemVkIGJ5dGVzIG9mIHRva2VuIG1hcCBjb25maWcgYm94ZXNcbiAgICovXG4gIHVwZGF0ZUNvbmZpZ0J5Qm94ZXMgPSBhc3luYyAoc2VyaWFsaXplZEJveGVzOiBzdHJpbmdbXSkgPT4ge1xuICAgIGNvbnN0IHRva2VuczogUm9zZW5Ub2tlbnMgPSBbXTtcbiAgICBjb25zdCBlcmdvQ29uZmlnczogRXh0cmFjdGVkQ29uZmlnW10gPSBbXTtcbiAgICBjb25zdCBub25FcmdvQ29uZmlnczogRXh0cmFjdGVkQ29uZmlnW10gPSBbXTtcblxuICAgIHNlcmlhbGl6ZWRCb3hlcy5mb3JFYWNoKChzZXJpYWxpemVkQm94KSA9PiB7XG4gICAgICBjb25zdCBib3ggPSBFcmdvQm94LnNpZ21hX3BhcnNlX2J5dGVzKFxuICAgICAgICBVaW50OEFycmF5LmZyb20oQnVmZmVyLmZyb20oc2VyaWFsaXplZEJveCwgJ2hleCcpKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGJveElkID0gYm94LmJveF9pZCgpLnRvX3N0cigpO1xuXG4gICAgICBjb25zdCBjaGFpbiA9IEJ1ZmZlci5mcm9tKFxuICAgICAgICBib3gucmVnaXN0ZXJfdmFsdWUoNCk/LnRvX2J5dGVfYXJyYXkoKSA/PyBbXVxuICAgICAgKS50b1N0cmluZygpO1xuICAgICAgY29uc3QgaGVhZGVyczogc3RyaW5nW10gPSAoXG4gICAgICAgIGJveC5yZWdpc3Rlcl92YWx1ZSg1KT8udG9fY29sbF9jb2xsX2J5dGUoKSA/PyBbXVxuICAgICAgKS5tYXAoKGhlYWRlcikgPT4gQnVmZmVyLmZyb20oaGVhZGVyKS50b1N0cmluZygpKTtcbiAgICAgIGNvbnN0IHZhbHVlczogc3RyaW5nW11bXSA9IGJveFxuICAgICAgICAucmVnaXN0ZXJfdmFsdWUoNilcbiAgICAgICAgPy50b19qcygpXG4gICAgICAgIC5tYXAoKGFycjogVWludDhBcnJheVtdKSA9PlxuICAgICAgICAgIGFyci5tYXAoKHZhbHVlKSA9PiBCdWZmZXIuZnJvbSh2YWx1ZSkudG9TdHJpbmcoKSlcbiAgICAgICAgKTtcblxuICAgICAgaWYgKCFSRVFVSVJFRF9GSUVMRFMuZXZlcnkoKGZpZWxkKSA9PiBoZWFkZXJzLmluY2x1ZGVzKGZpZWxkKSkpXG4gICAgICAgIHRocm93IG5ldyBDb3JydXB0ZWRDb25maWdFcnJvcihcbiAgICAgICAgICBib3hJZCxcbiAgICAgICAgICBgSGVhZGVycyBkb2VzIG5vdCBjb250YWluIGFsbCByZXF1aXJlZCBmaWVsZHMuIEZvdW5kIFske2hlYWRlcnMuam9pbihcbiAgICAgICAgICAgICcsJ1xuICAgICAgICAgICl9XWBcbiAgICAgICAgKTtcbiAgICAgIGlmIChoZWFkZXJzWzBdICE9PSBFUkdPX1NJREVfVE9LRU5fSURfS0VZKVxuICAgICAgICB0aHJvdyBuZXcgQ29ycnVwdGVkQ29uZmlnRXJyb3IoXG4gICAgICAgICAgYm94SWQsXG4gICAgICAgICAgYEV4cGVjdGVkIGZpcnN0IGhlYWRlciB0byBiZSBbJHtFUkdPX1NJREVfVE9LRU5fSURfS0VZfV0gYnV0IGZvdW5kIFske2hlYWRlcnMuam9pbihcbiAgICAgICAgICAgICcsJ1xuICAgICAgICAgICl9XWBcbiAgICAgICAgKTtcblxuICAgICAgKGNoYWluID09PSBFUkdPX0NIQUlOID8gZXJnb0NvbmZpZ3MgOiBub25FcmdvQ29uZmlncykucHVzaCh7XG4gICAgICAgIGJveElkLFxuICAgICAgICBjaGFpbixcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgdmFsdWVzLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBlcmdvQ29uZmlncy5mb3JFYWNoKChjb25maWcpID0+IHtcbiAgICAgIGNvbnN0IGJveElkID0gY29uZmlnLmJveElkO1xuICAgICAgY29uc3QgaGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzO1xuICAgICAgY29uc3QgdmFsdWVzID0gY29uZmlnLnZhbHVlcztcblxuICAgICAgdmFsdWVzLmZvckVhY2goKGRhdGEpID0+IHtcbiAgICAgICAgaWYgKGRhdGEubGVuZ3RoICE9PSBoZWFkZXJzLmxlbmd0aClcbiAgICAgICAgICB0aHJvdyBuZXcgQ29ycnVwdGVkQ29uZmlnRXJyb3IoXG4gICAgICAgICAgICBib3hJZCxcbiAgICAgICAgICAgIGBNaXNtYXRjaCBiZXR3ZWVuIGhlYWRlcnMgYW5kIGRhdGEgYXQgWyR7dmFsdWVzLmluZGV4T2YoXG4gICAgICAgICAgICAgIGRhdGFcbiAgICAgICAgICAgICl9XTogRXhwZWN0ZWQgbGVuZ3RoIFske2hlYWRlcnMubGVuZ3RofV0gZm91bmQgWyR7ZGF0YS5sZW5ndGh9XWBcbiAgICAgICAgICApO1xuICAgICAgICBpZiAodG9rZW5zLmZpbmQoKHRva2VuKSA9PiB0b2tlbi5lcmdvLnRva2VuSWQgPT09IGRhdGFbMF0pKVxuICAgICAgICAgIHRocm93IG5ldyBDb3JydXB0ZWRDb25maWdFcnJvcihcbiAgICAgICAgICAgIGJveElkLFxuICAgICAgICAgICAgYER1cGxpY2F0ZSBlcmdvIHRva2VuIFske2RhdGFbMF19XSBpcyBmb3VuZGBcbiAgICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGNoYWluVG9rZW46IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgIGNoYWluVG9rZW5baGVhZGVyc1tpXV0gPSBkYXRhW2ldO1xuICAgICAgICBjaGFpblRva2VuLmRlY2ltYWxzID0gTnVtYmVyKGNoYWluVG9rZW4uZGVjaW1hbHMpO1xuICAgICAgICB0b2tlbnMucHVzaCh7IFtFUkdPX0NIQUlOXTogY2hhaW5Ub2tlbiBhcyBSb3NlbkNoYWluVG9rZW4gfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIG5vbkVyZ29Db25maWdzLmZvckVhY2goKGNvbmZpZykgPT4ge1xuICAgICAgY29uc3QgYm94SWQgPSBjb25maWcuYm94SWQ7XG4gICAgICBjb25zdCBjaGFpbiA9IGNvbmZpZy5jaGFpbjtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSBjb25maWcuaGVhZGVycztcbiAgICAgIGNvbnN0IHZhbHVlcyA9IGNvbmZpZy52YWx1ZXM7XG5cbiAgICAgIHZhbHVlcy5mb3JFYWNoKChkYXRhKSA9PiB7XG4gICAgICAgIGlmIChkYXRhLmxlbmd0aCAhPT0gaGVhZGVycy5sZW5ndGgpXG4gICAgICAgICAgdGhyb3cgbmV3IENvcnJ1cHRlZENvbmZpZ0Vycm9yKFxuICAgICAgICAgICAgYm94SWQsXG4gICAgICAgICAgICBgTWlzbWF0Y2ggYmV0d2VlbiBoZWFkZXJzIGFuZCBkYXRhIGF0IFske3ZhbHVlcy5pbmRleE9mKFxuICAgICAgICAgICAgICBkYXRhXG4gICAgICAgICAgICApfV06IEV4cGVjdGVkIGxlbmd0aCBbJHtoZWFkZXJzLmxlbmd0aH1dIGZvdW5kIFske2RhdGEubGVuZ3RofV1gXG4gICAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0b2tlbnMuZmluZEluZGV4KFxuICAgICAgICAgICh0b2tlbikgPT4gdG9rZW4uZXJnby50b2tlbklkID09PSBkYXRhWzBdXG4gICAgICAgICk7XG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpXG4gICAgICAgICAgdGhyb3cgbmV3IENvcnJ1cHRlZENvbmZpZ0Vycm9yKFxuICAgICAgICAgICAgYm94SWQsXG4gICAgICAgICAgICBgRXJnbyB0b2tlbiBbJHtkYXRhWzBdfV0gaXMgbm90IGZvdW5kYFxuICAgICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgY2hhaW5Ub2tlbjogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgY2hhaW5Ub2tlbltoZWFkZXJzW2ldXSA9IGRhdGFbaV07XG4gICAgICAgIGNoYWluVG9rZW4uZGVjaW1hbHMgPSBOdW1iZXIoY2hhaW5Ub2tlbi5kZWNpbWFscyk7XG5cbiAgICAgICAgaWYgKE9iamVjdC5oYXNPd24odG9rZW5zW2luZGV4XSwgY2hhaW4pKVxuICAgICAgICAgIHRocm93IG5ldyBDb3JydXB0ZWRDb25maWdFcnJvcihcbiAgICAgICAgICAgIGJveElkLFxuICAgICAgICAgICAgYER1cGxpY2F0ZSB0b2tlbiBmb3IgZXJnbyB0b2tlbiBbJHtkYXRhWzBdfV0gb24gY2hhaW4gWyR7Y2hhaW59XSBpcyBmb3VuZDogSGF2ZSBbJHt0b2tlbnNbaW5kZXhdW2NoYWluXS50b2tlbklkfV0gZm91bmQgWyR7Y2hhaW5Ub2tlbi50b2tlbklkfV1gXG4gICAgICAgICAgKTtcbiAgICAgICAgdG9rZW5zW2luZGV4XVtjaGFpbl0gPSBjaGFpblRva2VuIGFzIFJvc2VuQ2hhaW5Ub2tlbjtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgYXdhaXQgdGhpcy51cGRhdGVDb25maWdCeUpzb24odG9rZW5zKTtcbiAgfTtcblxuICAvKipcbiAgICogc2V0IHRva2VucyBjb25maWcgYnkganNvblxuICAgKiBAcGFyYW0gdG9rZW5zXG4gICAqL1xuICB1cGRhdGVDb25maWdCeUpzb24gPSBhc3luYyAodG9rZW5zOiBSb3NlblRva2VucykgPT4ge1xuICAgIGF3YWl0IHRoaXMudXBkYXRlU2VtYXBob3JlLmFjcXVpcmUoKS50aGVuKGFzeW5jIChyZWxlYXNlKSA9PiB7XG4gICAgICB0aGlzLnRva2Vuc0NvbmZpZyA9IHRva2VucztcbiAgICAgIHJlbGVhc2UoKTtcbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogR2V0IGEgbGlzdCBvZiB0b2tlbnMgdGhhdCBjYW4gYmUgdHJhbnNmZXJyZWQgYmV0d2VlbiBzcGVjaWZpYyBjaGFpbnNcbiAgICogQHBhcmFtIGZyb21DaGFpblxuICAgKiBAcGFyYW0gdG9DaGFpblxuICAgKi9cbiAgZ2V0VG9rZW5zID0gKGZyb21DaGFpbjogc3RyaW5nLCB0b0NoYWluOiBzdHJpbmcpOiBBcnJheTxSb3NlbkNoYWluVG9rZW4+ID0+IHtcbiAgICByZXR1cm4gdGhpcy50b2tlbnNDb25maWdcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChpdGVtKSA9PiBPYmplY3QuaGFzT3duKGl0ZW0sIGZyb21DaGFpbikgJiYgT2JqZWN0Lmhhc093bihpdGVtLCB0b0NoYWluKVxuICAgICAgKVxuICAgICAgLm1hcCgoaXRlbSkgPT4gaXRlbVtmcm9tQ2hhaW5dKTtcbiAgfTtcblxuICAvKipcbiAgICogZ2V0IGEgbGlzdCBvZiBhbGwgc3VwcG9ydGVkIG5ldHdvcmsgbmFtZXNcbiAgICovXG4gIGdldEFsbENoYWlucyA9ICgpOiBBcnJheTxzdHJpbmc+ID0+IHtcbiAgICByZXR1cm4gdGhpcy50b2tlbnNDb25maWdcbiAgICAgIC5tYXAoKGl0ZW0pID0+IE9iamVjdC5rZXlzKGl0ZW0pKVxuICAgICAgLnJlZHVjZShcbiAgICAgICAgKGFsbFVuaXFDaGFpbnMsIHRva2VuQ2hhaW5zKSA9PiBbXG4gICAgICAgICAgLi4ubmV3IFNldChbLi4uYWxsVW5pcUNoYWlucywgLi4udG9rZW5DaGFpbnNdKSxcbiAgICAgICAgXSxcbiAgICAgICAgW11cbiAgICAgICk7XG4gIH07XG5cbiAgLyoqXG4gICAqIGdldCBsaXN0IG9mIGFsbCBzdXBwb3J0ZWQgY2hhaW5zIGZvciBzcGVjaWZpYyBjaGFpblxuICAgKiBAcGFyYW0gc291cmNlQ2hhaW5cbiAgICovXG4gIGdldFN1cHBvcnRlZENoYWlucyA9IChzb3VyY2VDaGFpbjogc3RyaW5nKTogQXJyYXk8c3RyaW5nPiA9PiB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zQ29uZmlnXG4gICAgICAuZmlsdGVyKCh0b2tlbikgPT4gT2JqZWN0Lmhhc093bih0b2tlbiwgc291cmNlQ2hhaW4pKVxuICAgICAgLm1hcCgodG9rZW4pID0+IE9iamVjdC5rZXlzKHRva2VuKSlcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChhbGxDaGFpbnMsIG5ld0NoYWlucykgPT4gWy4uLm5ldyBTZXQoWy4uLmFsbENoYWlucywgLi4ubmV3Q2hhaW5zXSldLFxuICAgICAgICBbXVxuICAgICAgKVxuICAgICAgLmZpbHRlcigoY2hhaW4pID0+IGNoYWluICE9PSBzb3VyY2VDaGFpbik7XG4gIH07XG5cbiAgLyoqXG4gICAqIGl0IHJldHVybnMgc3BlY2lmaWMgdG9rZW4gd2l0aCByZXNwZWN0IHRvIGNvbmRpdGlvbiBvbiB0aGUgc3BlY2lmaWMgY2hhaW5cbiAgICogQHBhcmFtIGNoYWluXG4gICAqICBleGFtcGxlOiBcImVyZ29cIlxuICAgKiBAcGFyYW0gY29uZGl0aW9uXG4gICAqICBleGFtcGxlOiB7dG9rZW5JZDpcInRva2VuSWRcIn1cbiAgICovXG4gIHNlYXJjaCA9IChjaGFpbjogc3RyaW5nLCBjb25kaXRpb246IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pID0+IHtcbiAgICByZXR1cm4gdGhpcy50b2tlbnNDb25maWcuZmlsdGVyKCh0b2tlbikgPT4ge1xuICAgICAgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRva2VuLCBjaGFpbikpIHtcbiAgICAgICAgY29uc3QgcmVzVG9rZW4gPSB0b2tlbltjaGFpbl07XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhjb25kaXRpb24pKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIU9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlc1Rva2VuLCBrZXkpIHx8XG4gICAgICAgICAgICByZXNUb2tlbltrZXldICE9PSB2YWxcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIHJldHVybnMgdG9rZW5JZCBpbiBzcGVjaWZpYyBjaGFpbiB3aXRoIHJlc3BlY3QgdG8gaWRLZXlzIGluIHRoZSB0b2tlbnNDb25maWdcbiAgICogQHBhcmFtIHRva2VuXG4gICAqICBleGFtcGxlOiB7XG4gICAqICAgICAgIFwiZXJnb1wiOiB7XG4gICAqICAgICAgICAgXCJ0b2tlbklkXCI6IFwidG9rZW5JZFwiLFxuICAgKiAgICAgICAgIFwidG9rZW5OYW1lXCI6IFwidG9rZW4xXCJcbiAgICogICAgICAgfSxcbiAgICogICAgICAgXCJjYXJkYW5vXCI6IHtcbiAgICogICAgICAgICBcInRva2VuSWRcIjogXCIuLi5cIixcbiAgICogICAgICAgICBcInBvbGljeUlkXCI6IFwicG9saWN5XCIsXG4gICAqICAgICAgICAgXCJhc3NldE5hbWVcIjogXCJpZFwiXG4gICAqICAgICAgIH1cbiAgICogICAgIH1cbiAgICogQHBhcmFtIGNoYWluXG4gICAqICBleGFtcGxlOiBcImNhcmRhbm9cIlxuICAgKi9cbiAgZ2V0SUQgPSAoXG4gICAgdG9rZW46IHsgW2tleTogc3RyaW5nXTogUm9zZW5DaGFpblRva2VuIH0sXG4gICAgY2hhaW46IHN0cmluZ1xuICApOiBzdHJpbmcgPT4ge1xuICAgIHJldHVybiB0b2tlbltjaGFpbl0udG9rZW5JZDtcbiAgfTtcblxuICAvKipcbiAgICogcmV0dXJuIGFsbCBuYXRpdmUgdG9rZW5zIGZvciBhIHNwZWNpZmljIGNoYWluLlxuICAgKiBAcGFyYW0gY2hhaW46IG9uZSBvZiBzdXBwb3J0ZWQgY2hhaW5zXG4gICAqL1xuICBnZXRBbGxOYXRpdmVUb2tlbnMgPSAoY2hhaW46IHN0cmluZyk6IFJvc2VuQ2hhaW5Ub2tlbltdID0+IHtcbiAgICByZXR1cm4gdGhpcy50b2tlbnNDb25maWdcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgICh0b2tlbikgPT5cbiAgICAgICAgICBPYmplY3QuaGFzT3duKHRva2VuLCBjaGFpbikgJiZcbiAgICAgICAgICB0b2tlbltjaGFpbl0ucmVzaWRlbmN5ID09IE5BVElWRV9SRVNJREVOQ1lcbiAgICAgIClcbiAgICAgIC5tYXAoKHRva2VuKSA9PiB0b2tlbltjaGFpbl0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBnZXQgYSB0b2tlbiBzZXQgYnkgdGhlIGlkIG9mIG9uZSBvZiB0aGVtXG4gICAqIEBwYXJhbSB0b2tlbklkXG4gICAqL1xuICBnZXRUb2tlblNldCA9IChcbiAgICB0b2tlbklkOiBzdHJpbmdcbiAgKTogUmVjb3JkPHN0cmluZywgUm9zZW5DaGFpblRva2VuPiB8IHVuZGVmaW5lZCA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy50b2tlbnNDb25maWcuZmlsdGVyKFxuICAgICAgKHRva2VuU2V0KSA9PlxuICAgICAgICBPYmplY3Qua2V5cyh0b2tlblNldCkuZmlsdGVyKFxuICAgICAgICAgIChjaGFpbikgPT4gdG9rZW5TZXRbY2hhaW5dLnRva2VuSWQgPT09IHRva2VuSWRcbiAgICAgICAgKS5sZW5ndGhcbiAgICApO1xuICAgIGlmIChyZXN1bHQubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXN1bHRbMF07XG4gIH07XG5cbiAgLyoqXG4gICAqIHdyYXBzIGFtb3VudCBvZiBhIHRva2VuIG9uIHRoZSBnaXZlbiBjaGFpblxuICAgKiBAcGFyYW0gdG9rZW5JZFxuICAgKiBAcGFyYW0gYW1vdW50XG4gICAqIEBwYXJhbSBjaGFpblxuICAgKi9cbiAgd3JhcEFtb3VudCA9IChcbiAgICB0b2tlbklkOiBzdHJpbmcsXG4gICAgYW1vdW50OiBiaWdpbnQsXG4gICAgY2hhaW46IHN0cmluZ1xuICApOiBSb3NlbkFtb3VudCA9PiB7XG4gICAgY29uc3QgdG9rZW5zID0gdGhpcy5nZXRUb2tlblNldCh0b2tlbklkKTtcblxuICAgIGlmICh0b2tlbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gdG9rZW4gaXMgbm90IHN1cHBvcnRlZCwgbm8gZGVjaW1hbHMgZHJvcFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYW1vdW50OiBhbW91bnQsXG4gICAgICAgIGRlY2ltYWxzOiAwLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2lnbmlmaWNhbnREZWNpbWFscyA9IE1hdGgubWluKFxuICAgICAgICAuLi5PYmplY3Qua2V5cyh0b2tlbnMpLm1hcChcbiAgICAgICAgICAoc3VwcG9ydGVkQ2hhaW4pID0+IHRva2Vuc1tzdXBwb3J0ZWRDaGFpbl0uZGVjaW1hbHNcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9XG4gICAgICAgIGFtb3VudCAvIEJpZ0ludCgxMCAqKiAodG9rZW5zW2NoYWluXS5kZWNpbWFscyAtIHNpZ25pZmljYW50RGVjaW1hbHMpKSArXG4gICAgICAgIChhbW91bnQgJSBCaWdJbnQoMTAgKiogKHRva2Vuc1tjaGFpbl0uZGVjaW1hbHMgLSBzaWduaWZpY2FudERlY2ltYWxzKSlcbiAgICAgICAgICA/IDFuXG4gICAgICAgICAgOiAwbik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhbW91bnQ6IHJlc3VsdCxcbiAgICAgICAgZGVjaW1hbHM6IHNpZ25pZmljYW50RGVjaW1hbHMsXG4gICAgICB9O1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogd3JhcHMgYW1vdW50IG9mIGEgdG9rZW4gb24gdGhlIGdpdmVuIGNoYWluXG4gICAqIEBwYXJhbSB0b2tlbklkXG4gICAqIEBwYXJhbSBhbW91bnRcbiAgICogQHBhcmFtIHRvQ2hhaW5cbiAgICovXG4gIHVud3JhcEFtb3VudCA9IChcbiAgICB0b2tlbklkOiBzdHJpbmcsXG4gICAgYW1vdW50OiBiaWdpbnQsXG4gICAgdG9DaGFpbjogc3RyaW5nXG4gICk6IFJvc2VuQW1vdW50ID0+IHtcbiAgICBjb25zdCB0b2tlbnMgPSB0aGlzLmdldFRva2VuU2V0KHRva2VuSWQpO1xuXG4gICAgaWYgKHRva2VucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyB0b2tlbiBpcyBub3Qgc3VwcG9ydGVkLCBubyBkZWNpbWFscyBhZGRlZFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYW1vdW50OiBhbW91bnQsXG4gICAgICAgIGRlY2ltYWxzOiAwLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2lnbmlmaWNhbnREZWNpbWFscyA9IE1hdGgubWluKFxuICAgICAgICAuLi5PYmplY3Qua2V5cyh0b2tlbnMpLm1hcCgoY2hhaW4pID0+IHRva2Vuc1tjaGFpbl0uZGVjaW1hbHMpXG4gICAgICApO1xuICAgICAgY29uc3QgcmVzdWx0ID1cbiAgICAgICAgYW1vdW50ICogQmlnSW50KDEwICoqICh0b2tlbnNbdG9DaGFpbl0uZGVjaW1hbHMgLSBzaWduaWZpY2FudERlY2ltYWxzKSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhbW91bnQ6IHJlc3VsdCxcbiAgICAgICAgZGVjaW1hbHM6IHRva2Vuc1t0b0NoYWluXS5kZWNpbWFscyxcbiAgICAgIH07XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiByZXR1cm5zIHNpZ25pZmljYW50IGRlY2ltYWxzIChkZWNpbWFscyBvZiB0aGUgd3JhcHBlZCB2YWx1ZSkgZm9yIGEgdG9rZW5cbiAgICogQHBhcmFtIHRva2VuSWRcbiAgICovXG4gIGdldFNpZ25pZmljYW50RGVjaW1hbHMgPSAodG9rZW5JZDogc3RyaW5nKTogbnVtYmVyIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCB0b2tlbnMgPSB0aGlzLmdldFRva2VuU2V0KHRva2VuSWQpO1xuICAgIGlmICh0b2tlbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gdG9rZW4gaXMgbm90IHN1cHBvcnRlZCwgbm8gZGVjaW1hbHMgYWRkZWRcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBNYXRoLm1pbihcbiAgICAgIC4uLk9iamVjdC5rZXlzKHRva2VucykubWFwKChjaGFpbikgPT4gdG9rZW5zW2NoYWluXS5kZWNpbWFscylcbiAgICApO1xuICB9O1xufVxuIl19

@@ -1,19 +0,26 @@

export type RosenTokens = {
idKeys: Record<string, string>;
tokens: Array<Record<string, RosenChainToken>>;
};
export type RosenChainToken = {
[key: string]: any;
export type RosenTokens = Array<Record<string, RosenChainToken & Record<string, any>>>;
export interface RosenChainToken {
tokenId: string;
name: string;
decimals: number;
metaData: ChainTokenMetadata;
};
export type ChainTokenMetadata = {
type: string;
residency: string;
};
export type RosenAmount = {
}
export interface CardanoChainToken extends RosenChainToken {
policyId: string;
assetName: string;
}
export interface RosenAmount {
amount: bigint;
decimals: number;
};
}
export interface ExtractedConfig {
boxId: string;
chain: string;
headers: string[];
values: string[][];
}
export declare class CorruptedConfigError extends Error {
constructor(boxId: string, msg: string);
}
//# sourceMappingURL=types.d.ts.map

@@ -1,2 +0,6 @@

export {};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvVG9rZW5NYXAvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIFJvc2VuVG9rZW5zID0ge1xuICBpZEtleXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHRva2VuczogQXJyYXk8UmVjb3JkPHN0cmluZywgUm9zZW5DaGFpblRva2VuPj47XG59O1xuXG5leHBvcnQgdHlwZSBSb3NlbkNoYWluVG9rZW4gPSB7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbiAgbmFtZTogc3RyaW5nO1xuICBkZWNpbWFsczogbnVtYmVyO1xuICBtZXRhRGF0YTogQ2hhaW5Ub2tlbk1ldGFkYXRhO1xufTtcblxuZXhwb3J0IHR5cGUgQ2hhaW5Ub2tlbk1ldGFkYXRhID0ge1xuICB0eXBlOiBzdHJpbmc7XG4gIHJlc2lkZW5jeTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgUm9zZW5BbW91bnQgPSB7XG4gIGFtb3VudDogYmlnaW50O1xuICBkZWNpbWFsczogbnVtYmVyO1xufTtcbiJdfQ==
export class CorruptedConfigError extends Error {
constructor(boxId, msg) {
super(`CorruptedConfigError: Corrupted config in box [${boxId}]: ` + msg);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvVG9rZW5NYXAvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBNkJBLE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxLQUFLO0lBQzdDLFlBQVksS0FBYSxFQUFFLEdBQVc7UUFDcEMsS0FBSyxDQUFDLGtEQUFrRCxLQUFLLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQztJQUM1RSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBSb3NlblRva2VucyA9IEFycmF5PFxuICBSZWNvcmQ8c3RyaW5nLCBSb3NlbkNoYWluVG9rZW4gJiBSZWNvcmQ8c3RyaW5nLCBhbnk+PlxuPjtcblxuZXhwb3J0IGludGVyZmFjZSBSb3NlbkNoYWluVG9rZW4ge1xuICB0b2tlbklkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVjaW1hbHM6IG51bWJlcjtcbiAgdHlwZTogc3RyaW5nO1xuICByZXNpZGVuY3k6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYXJkYW5vQ2hhaW5Ub2tlbiBleHRlbmRzIFJvc2VuQ2hhaW5Ub2tlbiB7XG4gIHBvbGljeUlkOiBzdHJpbmc7XG4gIGFzc2V0TmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJvc2VuQW1vdW50IHtcbiAgYW1vdW50OiBiaWdpbnQ7XG4gIGRlY2ltYWxzOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXh0cmFjdGVkQ29uZmlnIHtcbiAgYm94SWQ6IHN0cmluZztcbiAgY2hhaW46IHN0cmluZztcbiAgaGVhZGVyczogc3RyaW5nW107XG4gIHZhbHVlczogc3RyaW5nW11bXTtcbn1cblxuZXhwb3J0IGNsYXNzIENvcnJ1cHRlZENvbmZpZ0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcihib3hJZDogc3RyaW5nLCBtc2c6IHN0cmluZykge1xuICAgIHN1cGVyKGBDb3JydXB0ZWRDb25maWdFcnJvcjogQ29ycnVwdGVkIGNvbmZpZyBpbiBib3ggWyR7Ym94SWR9XTogYCArIG1zZyk7XG4gIH1cbn1cbiJdfQ==
{
"name": "@rosen-bridge/tokens",
"version": "1.2.1",
"version": "2.0.0",
"description": "this project manage supported tokens",

@@ -13,5 +13,5 @@ "main": "dist/lib/index.js",

"type-check": "tsc --noEmit",
"test": "jest --runInBand",
"coverage": "jest --coverage --runInBand",
"release": "npm run test && npm run build && npm publish --access public"
"test": "vitest",
"coverage": "npm run test -- --run --coverage",
"release": "npm run test -- --run && npm run build && npm publish --access public"
},

@@ -28,6 +28,7 @@ "repository": {

"devDependencies": {
"@types/jest": "^29.1.2",
"@types/node": "^18.0.0",
"@typescript-eslint/eslint-plugin": "^5.30.7",
"@typescript-eslint/parser": "^5.26.0",
"@vitest/coverage-istanbul": "^2.0.5",
"await-semaphore": "^0.1.3",
"eslint": "^8.16.0",

@@ -38,4 +39,7 @@ "eslint-config-prettier": "^8.5.0",

"typescript": "^4.7.4",
"jest": "^29.2.0"
"vitest": "^2.0.5"
},
"dependencies": {
"ergo-lib-wasm-nodejs": "^0.24.1"
},
"directories": {

@@ -42,0 +46,0 @@ "lib": "lib",

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc