PHP WebShell
Текущая директория: /opt/BitGoJS/modules/statics/dist/src
Просмотр файла: tokenConfig.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.testnetTokens = exports.mainnetTokens = exports.formattedAlgoTokens = exports.tokens = exports.getFormattedTokens = exports.getFormattedAlgoTokens = exports.ethGasConfigs = void 0;
const account_1 = require("./account");
const base_1 = require("./base");
const coins_1 = require("./coins");
const networks_1 = require("./networks");
const ofc_1 = require("./ofc");
// Get the list of ERC-20 tokens from statics and format it properly
const getFormattedErc20Tokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
if (coin instanceof account_1.Erc20Coin) {
let baseCoin;
switch (coin.network.name) {
case networks_1.Networks.main.ethereum.name:
baseCoin = 'eth';
break;
case networks_1.Networks.test.kovan.name:
baseCoin = 'teth';
break;
case networks_1.Networks.test.goerli.name:
baseCoin = 'gteth';
break;
case networks_1.Networks.test.holesky.name:
baseCoin = 'hteth';
break;
default:
throw new Error(`Erc20 token ${coin.name} has an unsupported network`);
}
acc.push({
type: coin.name,
coin: baseCoin,
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
name: coin.fullName,
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
decimalPlaces: coin.decimalPlaces,
});
}
return acc;
}, []);
exports.ethGasConfigs = {
minimumGasPrice: 1000000000, // minimum gas price a user can provide (1 Gwei)
defaultGasPrice: 20000000000, // default gas price if estimation fails (20 Gwei)
maximumGasPrice: 2500000000000, // minimum gas price a user can provide (2500 Gwei)
defaultGasLimit: 500000, // Default gas limit we set for contract send
defaultGasLimitTokenSend: 1000000, // Default gas limit we set for token send
minimumGasLimit: 30000, // minimum gas limit a user can set for a send
maximumGasLimit: 20000000, // Customers cannot set gas limits beyond this amount
newEthLikeCoinsMinGasLimit: 400000, // minimum gas limit a user can set for a send for eth like coins like arbitrum, optimism, etc
opethGasL1Fees: 1000000000000000, // Buffer for opeth L1 gas fees
};
// Get the list of Stellar tokens from statics and format it properly
const getFormattedStellarTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
if (coin instanceof account_1.StellarCoin) {
acc.push({
type: coin.name,
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'xlm' : 'txlm',
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
name: coin.fullName,
decimalPlaces: coin.decimalPlaces,
});
}
return acc;
}, []);
// Get the list of OFC tokens from statics and format it properly
const getFormattedOfcCoins = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
if (coin instanceof ofc_1.OfcCoin) {
acc.push({
type: coin.name,
coin: 'ofc',
backingCoin: coin.asset,
name: coin.fullName,
decimalPlaces: coin.decimalPlaces,
isFiat: coin.kind === base_1.CoinKind.FIAT,
});
}
return acc;
}, []);
const getFormattedCeloTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
if (coin instanceof account_1.CeloCoin) {
acc.push({
type: coin.name,
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'celo' : 'tcelo',
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
name: coin.fullName,
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
decimalPlaces: coin.decimalPlaces,
});
}
return acc;
}, []);
const getFormattedBscTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
if (coin instanceof account_1.BscCoin) {
acc.push({
type: coin.name,
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'bsc' : 'tbsc',
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
name: coin.fullName,
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
decimalPlaces: coin.decimalPlaces,
});
}
return acc;
}, []);
const getFormattedEosTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
if (coin instanceof account_1.EosCoin) {
acc.push({
type: coin.name,
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'eos' : 'teos',
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
name: coin.fullName,
tokenContractAddress: coin.contractName.toString().toLowerCase(),
decimalPlaces: coin.decimalPlaces,
contractName: coin.contractName,
contractAddress: coin.contractAddress,
});
}
return acc;
}, []);
const getFormattedAvaxCTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
if (coin instanceof account_1.AvaxERC20Token) {
acc.push({
type: coin.name,
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'avaxc' : 'tavaxc',
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
name: coin.fullName,
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
decimalPlaces: coin.decimalPlaces,
});
}
return acc;
}, []);
const getFormattedPolygonTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
if (coin instanceof account_1.PolygonERC20Token ||
((coin instanceof account_1.Erc721Coin || coin instanceof account_1.Erc1155Coin) && coin.family === base_1.CoinFamily.POLYGON)) {
acc.push({
type: coin.name,
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'polygon' : 'tpolygon',
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
name: coin.fullName,
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
decimalPlaces: coin.decimalPlaces,
});
}
return acc;
}, []);
const getFormattedArbethTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
if (coin instanceof account_1.ArbethERC20Token) {
acc.push({
type: coin.name,
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'arbeth' : 'tarbeth',
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
name: coin.fullName,
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
decimalPlaces: coin.decimalPlaces,
});
}
return acc;
}, []);
const getFormattedOpethTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
if (coin instanceof account_1.OpethERC20Token) {
acc.push({
type: coin.name,
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'opeth' : 'topeth',
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
name: coin.fullName,
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
decimalPlaces: coin.decimalPlaces,
});
}
return acc;
}, []);
const getFormattedZkethTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
if (coin instanceof account_1.ZkethERC20Token) {
acc.push({
type: coin.name,
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'zketh' : 'tzketh',
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
name: coin.fullName,
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
decimalPlaces: coin.decimalPlaces,
});
}
return acc;
}, []);
const getFormattedBeraTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
if (coin instanceof account_1.BeraERC20Token) {
acc.push({
type: coin.name,
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'bera' : 'tbera',
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
name: coin.fullName,
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
decimalPlaces: coin.decimalPlaces,
});
}
return acc;
}, []);
const getFormattedSolTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
if (coin instanceof account_1.SolCoin) {
acc.push({
type: coin.name,
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'sol' : 'tsol',
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
name: coin.fullName,
tokenAddress: coin.tokenAddress,
decimalPlaces: coin.decimalPlaces,
contractAddress: coin.contractAddress,
});
}
return acc;
}, []);
const getFormattedAlgoTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
if (coin instanceof account_1.AlgoCoin) {
acc.push({
type: coin.name,
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'algo' : 'talgo',
alias: coin.alias,
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
name: coin.fullName,
decimalPlaces: coin.decimalPlaces,
});
}
return acc;
}, []);
exports.getFormattedAlgoTokens = getFormattedAlgoTokens;
const getFormattedHbarTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
if (coin instanceof account_1.HederaToken) {
acc.push({
type: coin.name,
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'hbar' : 'thbar',
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
name: coin.fullName,
decimalPlaces: coin.decimalPlaces,
nodeAccountId: coin.nodeAccountId,
tokenId: coin.tokenId,
contractAddress: coin.contractAddress,
});
}
return acc;
}, []);
const getFormattedAdaTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
if (coin instanceof account_1.AdaCoin) {
acc.push({
type: coin.name,
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'ada' : 'tada',
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
name: coin.fullName,
policyId: coin.policyId,
assetName: coin.assetName,
decimalPlaces: coin.decimalPlaces,
});
}
return acc;
}, []);
const getFormattedTrxTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
if (coin instanceof account_1.TronErc20Coin) {
acc.push({
type: coin.name,
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'trx' : 'ttrx',
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
name: coin.fullName,
tokenContractAddress: coin.contractAddress.toString().toLowerCase(),
decimalPlaces: coin.decimalPlaces,
});
}
return acc;
}, []);
const getFormattedXrpTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
if (coin instanceof account_1.XrpCoin) {
acc.push({
type: coin.name,
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'xrp' : 'txrp',
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
name: coin.fullName,
decimalPlaces: coin.decimalPlaces,
issuerAddress: coin.issuerAddress,
currencyCode: coin.currencyCode,
domain: coin.domain,
contractAddress: coin.contractAddress,
});
}
return acc;
}, []);
const getFormattedSuiTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
if (coin instanceof account_1.SuiCoin) {
acc.push({
type: coin.name,
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'sui' : 'tsui',
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
name: coin.fullName,
decimalPlaces: coin.decimalPlaces,
packageId: coin.packageId,
module: coin.module,
symbol: coin.symbol,
contractAddress: coin.contractAddress,
});
}
return acc;
}, []);
const getFormattedAptTokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
if (coin instanceof account_1.AptCoin) {
acc.push({
type: coin.name,
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'apt' : 'tapt',
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
name: coin.fullName,
assetId: coin.assetId,
decimalPlaces: coin.decimalPlaces,
});
}
return acc;
}, []);
const getFormattedSip10Tokens = (customCoinMap = coins_1.coins) => customCoinMap.reduce((acc, coin) => {
if (coin instanceof account_1.Sip10Token) {
acc.push({
type: coin.name,
coin: coin.network.type === networks_1.NetworkType.MAINNET ? 'stx' : 'tstx',
network: coin.network.type === networks_1.NetworkType.MAINNET ? 'Mainnet' : 'Testnet',
name: coin.fullName,
assetId: coin.assetId,
decimalPlaces: coin.decimalPlaces,
});
}
return acc;
}, []);
const getFormattedTokens = (coinMap = coins_1.coins) => {
return {
bitcoin: {
eth: {
tokens: getFormattedErc20Tokens(coinMap).filter((token) => token.network === 'Mainnet'),
},
xlm: {
tokens: getFormattedStellarTokens(coinMap).filter((token) => token.network === 'Mainnet'),
},
algo: {
tokens: (0, exports.getFormattedAlgoTokens)(coinMap).filter((token) => token.network === 'Mainnet'),
},
ofc: {
tokens: getFormattedOfcCoins(coinMap).filter((token) => coinMap.get(token.type).network.type === networks_1.NetworkType.MAINNET),
},
celo: {
tokens: getFormattedCeloTokens(coinMap).filter((token) => token.network === 'Mainnet'),
},
bsc: {
tokens: getFormattedBscTokens(coinMap).filter((token) => token.network === 'Mainnet'),
},
eos: {
tokens: getFormattedEosTokens(coinMap).filter((token) => token.network === 'Mainnet'),
},
avaxc: {
tokens: getFormattedAvaxCTokens(coinMap).filter((token) => token.network === 'Mainnet'),
},
polygon: {
tokens: getFormattedPolygonTokens(coinMap).filter((token) => token.network === 'Mainnet'),
},
arbeth: {
tokens: getFormattedArbethTokens(coinMap).filter((token) => token.network === 'Mainnet'),
},
opeth: {
tokens: getFormattedOpethTokens(coinMap).filter((token) => token.network === 'Mainnet'),
},
zketh: {
tokens: getFormattedZkethTokens(coinMap).filter((token) => token.network === 'Mainnet'),
},
sol: {
tokens: getFormattedSolTokens(coinMap).filter((token) => token.network === 'Mainnet'),
},
hbar: {
tokens: getFormattedHbarTokens(coinMap).filter((token) => token.network === 'Mainnet'),
},
ada: {
tokens: getFormattedAdaTokens(coinMap).filter((token) => token.network === 'Mainnet'),
},
trx: {
tokens: getFormattedTrxTokens(coinMap).filter((token) => token.network === 'Mainnet'),
},
xrp: {
tokens: getFormattedXrpTokens(coinMap).filter((token) => token.network === 'Mainnet'),
},
sui: {
tokens: getFormattedSuiTokens(coinMap).filter((token) => token.network === 'Mainnet'),
},
bera: {
tokens: getFormattedBeraTokens(coinMap).filter((token) => token.network === 'Mainnet'),
},
apt: {
tokens: getFormattedAptTokens(coinMap).filter((token) => token.network === 'Mainnet'),
},
stx: {
tokens: getFormattedSip10Tokens(coinMap).filter((token) => token.network === 'Mainnet'),
},
},
testnet: {
eth: {
tokens: getFormattedErc20Tokens(coinMap).filter((token) => token.network === 'Testnet'),
},
xlm: {
tokens: getFormattedStellarTokens(coinMap).filter((token) => token.network === 'Testnet'),
},
algo: {
tokens: (0, exports.getFormattedAlgoTokens)(coinMap).filter((token) => token.network === 'Testnet'),
},
ofc: {
tokens: getFormattedOfcCoins(coinMap).filter((token) => coinMap.get(token.type).network.type === networks_1.NetworkType.TESTNET),
},
celo: {
tokens: getFormattedCeloTokens(coinMap).filter((token) => token.network === 'Testnet'),
},
bsc: {
tokens: getFormattedBscTokens(coinMap).filter((token) => token.network === 'Testnet'),
},
eos: {
tokens: getFormattedEosTokens(coinMap).filter((token) => token.network === 'Testnet'),
},
avaxc: {
tokens: getFormattedAvaxCTokens(coinMap).filter((token) => token.network === 'Testnet'),
},
polygon: {
tokens: getFormattedPolygonTokens(coinMap).filter((token) => token.network === 'Testnet'),
},
arbeth: {
tokens: getFormattedArbethTokens(coinMap).filter((token) => token.network === 'Testnet'),
},
opeth: {
tokens: getFormattedOpethTokens(coinMap).filter((token) => token.network === 'Testnet'),
},
zketh: {
tokens: getFormattedZkethTokens(coinMap).filter((token) => token.network === 'Testnet'),
},
sol: {
tokens: getFormattedSolTokens(coinMap).filter((token) => token.network === 'Testnet'),
},
hbar: {
tokens: getFormattedHbarTokens(coinMap).filter((token) => token.network === 'Testnet'),
},
ada: {
tokens: getFormattedAdaTokens(coinMap).filter((token) => token.network === 'Testnet'),
},
trx: {
tokens: getFormattedTrxTokens(coinMap).filter((token) => token.network === 'Testnet'),
},
xrp: {
tokens: getFormattedXrpTokens(coinMap).filter((token) => token.network === 'Testnet'),
},
sui: {
tokens: getFormattedSuiTokens(coinMap).filter((token) => token.network === 'Testnet'),
},
bera: {
tokens: getFormattedBeraTokens(coinMap).filter((token) => token.network === 'Testnet'),
},
apt: {
tokens: getFormattedAptTokens(coinMap).filter((token) => token.network === 'Testnet'),
},
stx: {
tokens: getFormattedSip10Tokens(coinMap).filter((token) => token.network === 'Testnet'),
},
},
};
};
exports.getFormattedTokens = getFormattedTokens;
/**
* Verify mainnet or testnet tokens
* @param tokens
*/
const verifyTokens = function (tokens) {
const verifiedTokens = {};
tokens.forEach((token) => {
if (verifiedTokens[token.type]) {
throw new Error('token : ' + token.type + ' duplicated.');
}
verifiedTokens[token.type] = true;
if (token.tokenContractAddress &&
token.tokenContractAddress !==
token.tokenContractAddress.toLocaleLowerCase()) {
throw new Error('token contract: ' + token.type + ' is not all lower case: ' + token);
}
});
return verifiedTokens;
};
exports.tokens = (0, exports.getFormattedTokens)();
exports.formattedAlgoTokens = (0, exports.getFormattedAlgoTokens)();
const mainnetErc20Tokens = verifyTokens(exports.tokens.bitcoin.eth.tokens);
const mainnetStellarTokens = verifyTokens(exports.tokens.bitcoin.xlm.tokens);
exports.mainnetTokens = { ...mainnetErc20Tokens, ...mainnetStellarTokens };
const testnetErc20Tokens = verifyTokens(exports.tokens.testnet.eth.tokens);
const testnetStellarTokens = verifyTokens(exports.tokens.testnet.xlm.tokens);
exports.testnetTokens = { ...testnetErc20Tokens, ...testnetStellarTokens };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5Db25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9rZW5Db25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdUNBdUJtQjtBQUNuQixpQ0FBOEM7QUFDOUMsbUNBQWdDO0FBQ2hDLHlDQUFtRDtBQUNuRCwrQkFBZ0M7QUFxUGhDLG9FQUFvRTtBQUNwRSxNQUFNLHVCQUF1QixHQUFHLENBQUMsYUFBYSxHQUFHLGFBQUssRUFBRSxFQUFFLENBQ3hELGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUF1QixFQUFFLElBQUksRUFBRSxFQUFFO0lBQ3JELElBQUksSUFBSSxZQUFZLG1CQUFTLEVBQUUsQ0FBQztRQUM5QixJQUFJLFFBQWdCLENBQUM7UUFDckIsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzFCLEtBQUssbUJBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUk7Z0JBQzlCLFFBQVEsR0FBRyxLQUFLLENBQUM7Z0JBQ2pCLE1BQU07WUFDUixLQUFLLG1CQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJO2dCQUMzQixRQUFRLEdBQUcsTUFBTSxDQUFDO2dCQUNsQixNQUFNO1lBQ1IsS0FBSyxtQkFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSTtnQkFDNUIsUUFBUSxHQUFHLE9BQU8sQ0FBQztnQkFDbkIsTUFBTTtZQUNSLEtBQUssbUJBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUk7Z0JBQzdCLFFBQVEsR0FBRyxPQUFPLENBQUM7Z0JBQ25CLE1BQU07WUFDUjtnQkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsSUFBSSxDQUFDLElBQUksNkJBQTZCLENBQUMsQ0FBQztRQUMzRSxDQUFDO1FBRUQsR0FBRyxDQUFDLElBQUksQ0FBQztZQUNQLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLElBQUksRUFB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Q0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO2FBQ3ZGO1lBQ0QsR0FBRyxFQUFFO2dCQUNILE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO2FBQ3RGO1lBQ0QsR0FBRyxFQUFFO2dCQUNILE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO2FBQ3RGO1lBQ0QsS0FBSyxFQUFFO2dCQUNMLE1BQU0sRUFBRSx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO2FBQ3hGO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLE1BQU0sRUFBRSx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO2FBQzFGO1lBQ0QsTUFBTSxFQUFFO2dCQUNOLE1BQU0sRUFBRSx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO2FBQ3pGO1lBQ0QsS0FBSyxFQUFFO2dCQUNMLE1BQU0sRUFBRSx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO2FBQ3hGO1lBQ0QsS0FBSyxFQUFFO2dCQUNMLE1BQU0sRUFBRSx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO2FBQ3hGO1lBQ0QsR0FBRyxFQUFFO2dCQUNILE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO2FBQ3RGO1lBQ0QsSUFBSSxFQUFFO2dCQUNKLE1BQU0sRUFBRSxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO2FBQ3ZGO1lBQ0QsR0FBRyxFQUFFO2dCQUNILE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO2FBQ3RGO1lBQ0QsR0FBRyxFQUFFO2dCQUNILE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO2FBQ3RGO1lBQ0QsR0FBRyxFQUFFO2dCQUNILE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO2FBQ3RGO1lBQ0QsR0FBRyxFQUFFO2dCQUNILE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO2FBQ3RGO1lBQ0QsSUFBSSxFQUFFO2dCQUNKLE1BQU0sRUFBRSxz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S0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUN4RjtZQUNELEtBQUssRUFBRTtnQkFDTCxNQUFNLEVBQUUsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUN4RjtZQUNELEdBQUcsRUFBRTtnQkFDSCxNQUFNLEVBQUUscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUN0RjtZQUNELElBQUksRUFBRTtnQkFDSixNQUFNLEVBQUUsc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUN2RjtZQUNELEdBQUcsRUFBRTtnQkFDSCxNQUFNLEVBQUUscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUN0RjtZQUNELEdBQUcsRUFBRTtnQkFDSCxNQUFNLEVBQUUscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUN0RjtZQUNELEdBQUcsRUFBRTtnQkFDSCxNQUFNLEVBQUUscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUN0RjtZQUNELEdBQUcsRUFBRTtnQkFDSCxNQUFNLEVBQUUscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUN0RjtZQUNELElBQUksRUFBRTtnQkFDSixNQUFNLEVBQUUsc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUN2RjtZQUNELEdBQUcsRUFBRTtnQkFDSCxNQUFNLEVBQUUscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUN0RjtZQUNELEdBQUcsRUFBRTtnQkFDSCxNQUFNLEVBQUUsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQzthQUN4RjtTQUNGO0tBQ0YsQ0FBQztBQUNKLENBQUMsQ0FBQztBQXpJVyxRQUFBLGtCQUFrQixzQkF5STdCO0FBRUY7OztHQUdHO0FBQ0gsTUFBTSxZQUFZLEdBQUcsVUFBVSxNQUF5QjtJQUN0RCxNQUFNLGNBQWMsR0FBNEIsRUFBRSxDQUFDO0lBQ25ELE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUN2QixJQUFJLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQyxDQUFDO1FBQzVELENBQUM7UUFDRCxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztRQUVsQyxJQUNHLEtBQW1DLENBQUMsb0JBQW9CO1lBQ3hELEtBQW1DLENBQUMsb0JBQW9CO2dCQUN0RCxLQUFtQyxDQUFDLG9CQUFvQixDQUFDLGlCQUFpQixFQUFFLEVBQy9FLENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUNiLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxJQUFJLEdBQUcsMEJBQTBCLEdBQUksS0FBbUMsQ0FDcEcsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sY0FBYyxDQUFDO0FBQ3hCLENBQUMsQ0FBQztBQUVXLFFBQUEsTUFBTSxHQUFHLElBQUEsMEJBQWtCLEdBQUUsQ0FBQztBQUU5QixRQUFBLG1CQUFtQixHQUFHLElBQUEsOEJBQXNCLEdBQUUsQ0FBQztBQUU1RCxNQUFNLGtCQUFrQixHQUFHLFlBQVksQ0FBQyxjQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNuRSxNQUFNLG9CQUFvQixHQUFHLFlBQVksQ0FBQyxjQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN4RCxRQUFBLGFBQWEsR0FBRyxFQUFFLEdBQUcsa0JBQWtCLEVBQUUsR0FBRyxvQkFBb0IsRUFBRSxDQUFDO0FBRWhGLE1BQU0sa0JBQWtCLEdBQUcsWUFBWSxDQUFDLGNBQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ25FLE1BQU0sb0JBQW9CLEdBQUcsWUFBWSxDQUFDLGNBQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hELFFBQUEsYUFBYSxHQUFHLEVBQUUsR0FBRyxrQkFBa0IsRUFBRSxHQUFHLG9CQUFvQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZGFDb2luLFxuICBBbGdvQ29pbixcbiAgQXB0Q29pbixcbiAgQXJiZXRoRVJDMjBUb2tlbixcbiAgQXZheEVSQzIwVG9rZW4sXG4gIEJlcmFFUkMyMFRva2VuLFxuICBCc2NDb2luLFxuICBDZWxvQ29pbixcbiAgRW9zQ29pbixcbiAgRXJjMTE1NUNvaW4sXG4gIEVyYzIwQ29pbixcbiAgRXJjNzIxQ29pbixcbiAgSGVkZXJhVG9rZW4sXG4gIE9wZXRoRVJDMjBUb2tlbixcbiAgUG9seWdvbkVSQzIwVG9rZW4sXG4gIFNpcDEwVG9rZW4sXG4gIFNvbENvaW4sXG4gIFN0ZWxsYXJDb2luLFxuICBTdWlDb2luLFxuICBUcm9uRXJjMjBDb2luLFxuICBYcnBDb2luLFxuICBaa2V0aEVSQzIwVG9rZW4sXG59IGZyb20gJy4vYWNjb3VudCc7XG5pbXBvcnQgeyBDb2luRmFtaWx5LCBDb2luS2luZCB9IGZyb20gJy4vYmFzZSc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJy4vY29pbnMnO1xuaW1wb3J0IHsgTmV0d29ya3MsIE5ldHdvcmtUeXBlIH0gZnJvbSAnLi9uZXR3b3Jrcyc7XG5pbXBvcnQgeyBPZmNDb2luIH0gZnJvbSAnLi9vZmMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VUb2tlbkNvbmZpZyB7XG4gIGNvaW46IHN0cmluZztcbiAgZGVjaW1hbFBsYWNlczogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXNlTmV0d29ya0NvbmZpZyBleHRlbmRzIEJhc2VUb2tlbkNvbmZpZyB7XG4gIG5ldHdvcms6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXNlQ29udHJhY3RBZGRyZXNzQ29uZmlnIGV4dGVuZHMgQmFzZU5ldHdvcmtDb25maWcge1xuICB0b2tlbkNvbnRyYWN0QWRkcmVzczogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBBdmF4Y1Rva2VuQ29uZmlnID0gQmFzZUNvbnRyYWN0QWRkcmVzc0NvbmZpZztcbmV4cG9ydCB0eXBlIENlbG9Ub2tlbkNvbmZpZyA9IEJhc2VDb250cmFjdEFkZHJlc3NDb25maWc7XG5leHBvcnQgdHlwZSBFdGhMaWtlVG9rZW5Db25maWcgPSBCYXNlQ29udHJhY3RBZGRyZXNzQ29uZmlnO1xuZXhwb3J0IHR5cGUgRW9zVG9rZW5Db25maWcgPSBCYXNlQ29udHJhY3RBZGRyZXNzQ29uZmlnICYge1xuICBjb250cmFjdE5hbWU6IHN0cmluZztcbiAgY29udHJhY3RBZGRyZXNzOiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgRXJjMjBUb2tlbkNvbmZpZyA9IEJhc2VDb250cmFjdEFkZHJlc3NDb25maWc7XG5leHBvcnQgdHlwZSBUcnhUb2tlbkNvbmZpZyA9IEJhc2VDb250cmFjdEFkZHJlc3NDb25maWc7XG5leHBvcnQgdHlwZSBTdGVsbGFyVG9rZW5Db25maWcgPSBCYXNlTmV0d29ya0NvbmZpZztcblxuZXhwb3J0IHR5cGUgU29sVG9rZW5Db25maWcgPSBCYXNlTmV0d29ya0NvbmZpZyAmIHtcbiAgdG9rZW5BZGRyZXNzOiBzdHJpbmc7XG4gIGNvbnRyYWN0QWRkcmVzczogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQWRhVG9rZW5Db25maWcgPSBCYXNlTmV0d29ya0NvbmZpZyAmIHtcbiAgcG9saWN5SWQ6IHN0cmluZztcbiAgYXNzZXROYW1lOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBBbGdvVG9rZW5Db25maWcgPSBCYXNlTmV0d29ya0NvbmZpZyAmIHtcbiAgYWxpYXM/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBPZmNUb2tlbkNvbmZpZyA9IEJhc2VUb2tlbkNvbmZpZyAmIHtcbiAgYmFja2luZ0NvaW46IHN0cmluZztcbiAgaXNGaWF0OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgSGJhclRva2VuQ29uZmlnID0gQmFzZU5ldHdvcmtDb25maWcgJiB7XG4gIG5vZGVBY2NvdW50SWQ6IHN0cmluZztcbiAgdG9rZW5JZDogc3RyaW5nO1xuICBjb250cmFjdEFkZHJlc3M6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFhycFRva2VuQ29uZmlnID0gQmFzZU5ldHdvcmtDb25maWcgJiB7XG4gIGlzc3VlckFkZHJlc3M6IHN0cmluZztcbiAgY3VycmVuY3lDb2RlOiBzdHJpbmc7XG4gIGRvbWFpbj86IHN0cmluZztcbiAgY29udHJhY3RBZGRyZXNzOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTdWlUb2tlbkNvbmZpZyA9IEJhc2VOZXR3b3JrQ29uZmlnICYge1xuICBwYWNrYWdlSWQ6IHN0cmluZztcbiAgbW9kdWxlOiBzdHJpbmc7XG4gIHN5bWJvbDogc3RyaW5nO1xuICBjb250cmFjdEFkZHJlc3M6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEFwdFRva2VuQ29uZmlnID0gQmFzZU5ldHdvcmtDb25maWcgJiB7XG4gIGFzc2V0SWQ6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFNpcDEwVG9rZW5Db25maWcgPSBCYXNlTmV0d29ya0NvbmZpZyAmIHtcbiAgYXNzZXRJZDogc3RyaW5nO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBUb2tlbnMge1xuICBiaXRjb2luOiB7XG4gICAgZXRoOiB7XG4gICAgICB0b2tlbnM6IEVyYzIwVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIHhsbToge1xuICAgICAgdG9rZW5zOiBTdGVsbGFyVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIGFsZ286IHtcbiAgICAgIHRva2VuczogQWxnb1Rva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBvZmM6IHtcbiAgICAgIHRva2VuczogT2ZjVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIGNlbG86IHtcbiAgICAgIHRva2VuczogQ2Vsb1Rva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBlb3M6IHtcbiAgICAgIHRva2VuczogRW9zVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIGF2YXhjOiB7XG4gICAgICB0b2tlbnM6IEF2YXhjVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIHBvbHlnb246IHtcbiAgICAgIHRva2VuczogRXRoTGlrZVRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBic2M6IHtcbiAgICAgIHRva2VuczogRXRoTGlrZVRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBhcmJldGg6IHtcbiAgICAgIHRva2VuczogRXRoTGlrZVRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBvcGV0aDoge1xuICAgICAgdG9rZW5zOiBFdGhMaWtlVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIHNvbDoge1xuICAgICAgdG9rZW5zOiBTb2xUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgaGJhcjoge1xuICAgICAgdG9rZW5zOiBIYmFyVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIGFkYToge1xuICAgICAgdG9rZW5zOiBBZGFUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgdHJ4OiB7XG4gICAgICB0b2tlbnM6IFRyeFRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICB4cnA6IHtcbiAgICAgIHRva2VuczogWHJwVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIHprZXRoOiB7XG4gICAgICB0b2tlbnM6IEV0aExpa2VUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgc3VpOiB7XG4gICAgICB0b2tlbnM6IFN1aVRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBiZXJhOiB7XG4gICAgICB0b2tlbnM6IEV0aExpa2VUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgYXB0OiB7XG4gICAgICB0b2tlbnM6IEFwdFRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBzdHg6IHtcbiAgICAgIHRva2VuczogU2lwMTBUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gIH07XG4gIHRlc3RuZXQ6IHtcbiAgICBldGg6IHtcbiAgICAgIHRva2VuczogRXJjMjBUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgeGxtOiB7XG4gICAgICB0b2tlbnM6IFN0ZWxsYXJUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgYWxnbzoge1xuICAgICAgdG9rZW5zOiBBbGdvVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIG9mYzoge1xuICAgICAgdG9rZW5zOiBPZmNUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgY2Vsbzoge1xuICAgICAgdG9rZW5zOiBDZWxvVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIGJzYzoge1xuICAgICAgdG9rZW5zOiBFdGhMaWtlVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIGVvczoge1xuICAgICAgdG9rZW5zOiBFb3NUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgYXZheGM6IHtcbiAgICAgIHRva2VuczogQXZheGNUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgcG9seWdvbjoge1xuICAgICAgdG9rZW5zOiBFdGhMaWtlVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIGFyYmV0aDoge1xuICAgICAgdG9rZW5zOiBFdGhMaWtlVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIG9wZXRoOiB7XG4gICAgICB0b2tlbnM6IEV0aExpa2VUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgc29sOiB7XG4gICAgICB0b2tlbnM6IFNvbFRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBoYmFyOiB7XG4gICAgICB0b2tlbnM6IEhiYXJUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgYWRhOiB7XG4gICAgICB0b2tlbnM6IEFkYVRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICB0cng6IHtcbiAgICAgIHRva2VuczogVHJ4VG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIHhycDoge1xuICAgICAgdG9rZW5zOiBYcnBUb2tlbkNvbmZpZ1tdO1xuICAgIH07XG4gICAgemtldGg6IHtcbiAgICAgIHRva2VuczogRXRoTGlrZVRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBzdWk6IHtcbiAgICAgIHRva2VuczogU3VpVG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIGJlcmE6IHtcbiAgICAgIHRva2VuczogRXRoTGlrZVRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgICBhcHQ6IHtcbiAgICAgIHRva2VuczogQXB0VG9rZW5Db25maWdbXTtcbiAgICB9O1xuICAgIHN0eDoge1xuICAgICAgdG9rZW5zOiBTaXAxMFRva2VuQ29uZmlnW107XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBbXNUb2tlbkNvbmZpZyB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgZnVsbE5hbWU6IHN0cmluZztcbiAgZmFtaWx5OiBzdHJpbmc7XG4gIGRlY2ltYWxQbGFjZXM6IG51bWJlcjtcbiAgYXNzZXQ6IHN0cmluZztcbiAgZmVhdHVyZXM/OiBzdHJpbmdbXTtcbiAgcHJlZml4Pzogc3RyaW5nO1xuICBzdWZmaXg/OiBzdHJpbmc7XG4gIG5ldHdvcms/OiB1bmtub3duO1xuICBwcmltYXJ5S2V5Q3VydmU/OiBzdHJpbmc7XG4gIGNvbnRyYWN0QWRkcmVzcz86IHN0cmluZztcbiAgdG9rZW5BZGRyZXNzPzogc3RyaW5nO1xuICBuZnRDb2xsZWN0aW9uSWQ/OiBzdHJpbmc7XG4gIGFsaWFzPzogc3RyaW5nO1xuICBjb250cmFjdE5hbWU/OiBzdHJpbmc7XG4gIHRva2VuSWQ/OiBzdHJpbmc7XG4gIHBhY2thZ2VJZD86IHN0cmluZztcbiAgbW9kdWxlPzogc3RyaW5nO1xuICBzeW1ib2w/OiBzdHJpbmc7XG4gIGlzc3VlckFkZHJlc3M/OiBzdHJpbmc7XG4gIGN1cnJlY255Y29kZT86IHN0cmluZztcbiAgZG9tYWluPzogc3RyaW5nO1xuICBhc3NldElkPzogc3RyaW5nO1xuICBpc1Rva2VuOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyaW1tZWRBbXNOZXR3b3JrQ29uZmlnIHtcbiAgbmFtZTogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBUcmltbWVkQW1zVG9rZW5Db25maWcgZXh0ZW5kcyBPbWl0PEFtc1Rva2VuQ29uZmlnLCAnZmVhdHVyZXMnIHwgJ25ldHdvcmsnPiB7XG4gIG5ldHdvcms6IFRyaW1tZWRBbXNOZXR3b3JrQ29uZmlnO1xuICBleGNsdWRlZEZlYXR1cmVzPzogc3RyaW5nW107XG4gIGFkZGl0aW9uYWxGZWF0dXJlcz86IHN0cmluZ1tdO1xufVxuXG4vLyBHZXQgdGhlIGxpc3Qgb2YgRVJDLTIwIHRva2VucyBmcm9tIHN0YXRpY3MgYW5kIGZvcm1hdCBpdCBwcm9wZXJseVxuY29uc3QgZ2V0Rm9ybWF0dGVkRXJjMjBUb2tlbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBFcmMyMFRva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgICBpZiAoY29pbiBpbnN0YW5jZW9mIEVyYzIwQ29pbikge1xuICAgICAgbGV0IGJhc2VDb2luOiBzdHJpbmc7XG4gICAgICBzd2l0Y2ggKGNvaW4ubmV0d29yay5uYW1lKSB7XG4gICAgICAgIGNhc2UgTmV0d29ya3MubWFpbi5ldGhlcmV1bS5uYW1lOlxuICAgICAgICAgIGJhc2VDb2luID0gJ2V0aCc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgTmV0d29ya3MudGVzdC5rb3Zhbi5uYW1lOlxuICAgICAgICAgIGJhc2VDb2luID0gJ3RldGgnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE5ldHdvcmtzLnRlc3QuZ29lcmxpLm5hbWU6XG4gICAgICAgICAgYmFzZUNvaW4gPSAnZ3RldGgnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE5ldHdvcmtzLnRlc3QuaG9sZXNreS5uYW1lOlxuICAgICAgICAgIGJhc2VDb2luID0gJ2h0ZXRoJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVyYzIwIHRva2VuICR7Y29pbi5uYW1lfSBoYXMgYW4gdW5zdXBwb3J0ZWQgbmV0d29ya2ApO1xuICAgICAgfVxuXG4gICAgICBhY2MucHVzaCh7XG4gICAgICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICAgICAgY29pbjogYmFzZUNvaW4sXG4gICAgICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgICAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogY29pbi5jb250cmFjdEFkZHJlc3MudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xuXG5leHBvcnQgY29uc3QgZXRoR2FzQ29uZmlncyA9IHtcbiAgbWluaW11bUdhc1ByaWNlOiAxMDAwMDAwMDAwLCAvLyBtaW5pbXVtIGdhcyBwcmljZSBhIHVzZXIgY2FuIHByb3ZpZGUgKDEgR3dlaSlcbiAgZGVmYXVsdEdhc1ByaWNlOiAyMDAwMDAwMDAwMCwgLy8gZGVmYXVsdCBnYXMgcHJpY2UgaWYgZXN0aW1hdGlvbiBmYWlscyAoMjAgR3dlaSlcbiAgbWF4aW11bUdhc1ByaWNlOiAyNTAwMDAwMDAwMDAwLCAvLyBtaW5pbXVtIGdhcyBwcmljZSBhIHVzZXIgY2FuIHByb3ZpZGUgKDI1MDAgR3dlaSlcbiAgZGVmYXVsdEdhc0xpbWl0OiA1MDAwMDAsIC8vIERlZmF1bHQgZ2FzIGxpbWl0IHdlIHNldCBmb3IgY29udHJhY3Qgc2VuZFxuICBkZWZhdWx0R2FzTGltaXRUb2tlblNlbmQ6IDEwMDAwMDAsIC8vIERlZmF1bHQgZ2FzIGxpbWl0IHdlIHNldCBmb3IgdG9rZW4gc2VuZFxuICBtaW5pbXVtR2FzTGltaXQ6IDMwMDAwLCAvLyBtaW5pbXVtIGdhcyBsaW1pdCBhIHVzZXIgY2FuIHNldCBmb3IgYSBzZW5kXG4gIG1heGltdW1HYXNMaW1pdDogMjAwMDAwMDAsIC8vIEN1c3RvbWVycyBjYW5ub3Qgc2V0IGdhcyBsaW1pdHMgYmV5b25kIHRoaXMgYW1vdW50XG4gIG5ld0V0aExpa2VDb2luc01pbkdhc0xpbWl0OiA0MDAwMDAsIC8vIG1pbmltdW0gZ2FzIGxpbWl0IGEgdXNlciBjYW4gc2V0IGZvciBhIHNlbmQgZm9yIGV0aCBsaWtlIGNvaW5zIGxpa2UgYXJiaXRydW0sIG9wdGltaXNtLCBldGNcbiAgb3BldGhHYXNMMUZlZXM6IDEwMDAwMDAwMDAwMDAwMDAsIC8vIEJ1ZmZlciBmb3Igb3BldGggTDEgZ2FzIGZlZXNcbn07XG4vLyBHZXQgdGhlIGxpc3Qgb2YgU3RlbGxhciB0b2tlbnMgZnJvbSBzdGF0aWNzIGFuZCBmb3JtYXQgaXQgcHJvcGVybHlcbmNvbnN0IGdldEZvcm1hdHRlZFN0ZWxsYXJUb2tlbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBTdGVsbGFyVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICAgIGlmIChjb2luIGluc3RhbmNlb2YgU3RlbGxhckNvaW4pIHtcbiAgICAgIGFjYy5wdXNoKHtcbiAgICAgICAgdHlwZTogY29pbi5uYW1lLFxuICAgICAgICBjb2luOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICd4bG0nIDogJ3R4bG0nLFxuICAgICAgICBuZXR3b3JrOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdNYWlubmV0JyA6ICdUZXN0bmV0JyxcbiAgICAgICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICAgICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxuLy8gR2V0IHRoZSBsaXN0IG9mIE9GQyB0b2tlbnMgZnJvbSBzdGF0aWNzIGFuZCBmb3JtYXQgaXQgcHJvcGVybHlcbmNvbnN0IGdldEZvcm1hdHRlZE9mY0NvaW5zID0gKGN1c3RvbUNvaW5NYXAgPSBjb2lucykgPT5cbiAgY3VzdG9tQ29pbk1hcC5yZWR1Y2UoKGFjYzogT2ZjVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICAgIGlmIChjb2luIGluc3RhbmNlb2YgT2ZjQ29pbikge1xuICAgICAgYWNjLnB1c2goe1xuICAgICAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgICAgIGNvaW46ICdvZmMnLFxuICAgICAgICBiYWNraW5nQ29pbjogY29pbi5hc3NldCxcbiAgICAgICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICAgICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICAgICAgICBpc0ZpYXQ6IGNvaW4ua2luZCA9PT0gQ29pbktpbmQuRklBVCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG5cbmNvbnN0IGdldEZvcm1hdHRlZENlbG9Ub2tlbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBDZWxvVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICAgIGlmIChjb2luIGluc3RhbmNlb2YgQ2Vsb0NvaW4pIHtcbiAgICAgIGFjYy5wdXNoKHtcbiAgICAgICAgdHlwZTogY29pbi5uYW1lLFxuICAgICAgICBjb2luOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdjZWxvJyA6ICd0Y2VsbycsXG4gICAgICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgICAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogY29pbi5jb250cmFjdEFkZHJlc3MudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xuXG5jb25zdCBnZXRGb3JtYXR0ZWRCc2NUb2tlbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBFdGhMaWtlVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICAgIGlmIChjb2luIGluc3RhbmNlb2YgQnNjQ29pbikge1xuICAgICAgYWNjLnB1c2goe1xuICAgICAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ2JzYycgOiAndGJzYycsXG4gICAgICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgICAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogY29pbi5jb250cmFjdEFkZHJlc3MudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xuXG5jb25zdCBnZXRGb3JtYXR0ZWRFb3NUb2tlbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBFb3NUb2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gICAgaWYgKGNvaW4gaW5zdGFuY2VvZiBFb3NDb2luKSB7XG4gICAgICBhY2MucHVzaCh7XG4gICAgICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICAgICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnZW9zJyA6ICd0ZW9zJyxcbiAgICAgICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBjb2luLmNvbnRyYWN0TmFtZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgICAgICAgY29udHJhY3ROYW1lOiBjb2luLmNvbnRyYWN0TmFtZSxcbiAgICAgICAgY29udHJhY3RBZGRyZXNzOiBjb2luLmNvbnRyYWN0QWRkcmVzcyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG5cbmNvbnN0IGdldEZvcm1hdHRlZEF2YXhDVG9rZW5zID0gKGN1c3RvbUNvaW5NYXAgPSBjb2lucykgPT5cbiAgY3VzdG9tQ29pbk1hcC5yZWR1Y2UoKGFjYzogQXZheGNUb2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gICAgaWYgKGNvaW4gaW5zdGFuY2VvZiBBdmF4RVJDMjBUb2tlbikge1xuICAgICAgYWNjLnB1c2goe1xuICAgICAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ2F2YXhjJyA6ICd0YXZheGMnLFxuICAgICAgICBuZXR3b3JrOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdNYWlubmV0JyA6ICdUZXN0bmV0JyxcbiAgICAgICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3M6IGNvaW4uY29udHJhY3RBZGRyZXNzLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxuY29uc3QgZ2V0Rm9ybWF0dGVkUG9seWdvblRva2VucyA9IChjdXN0b21Db2luTWFwID0gY29pbnMpID0+XG4gIGN1c3RvbUNvaW5NYXAucmVkdWNlKChhY2M6IEV0aExpa2VUb2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gICAgaWYgKFxuICAgICAgY29pbiBpbnN0YW5jZW9mIFBvbHlnb25FUkMyMFRva2VuIHx8XG4gICAgICAoKGNvaW4gaW5zdGFuY2VvZiBFcmM3MjFDb2luIHx8IGNvaW4gaW5zdGFuY2VvZiBFcmMxMTU1Q29pbikgJiYgY29pbi5mYW1pbHkgPT09IENvaW5GYW1pbHkuUE9MWUdPTilcbiAgICApIHtcbiAgICAgIGFjYy5wdXNoKHtcbiAgICAgICAgdHlwZTogY29pbi5uYW1lLFxuICAgICAgICBjb2luOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdwb2x5Z29uJyA6ICd0cG9seWdvbicsXG4gICAgICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgICAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogY29pbi5jb250cmFjdEFkZHJlc3MudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xuXG5jb25zdCBnZXRGb3JtYXR0ZWRBcmJldGhUb2tlbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBFdGhMaWtlVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICAgIGlmIChjb2luIGluc3RhbmNlb2YgQXJiZXRoRVJDMjBUb2tlbikge1xuICAgICAgYWNjLnB1c2goe1xuICAgICAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ2FyYmV0aCcgOiAndGFyYmV0aCcsXG4gICAgICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgICAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgICAgICB0b2tlbkNvbnRyYWN0QWRkcmVzczogY29pbi5jb250cmFjdEFkZHJlc3MudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xuXG5jb25zdCBnZXRGb3JtYXR0ZWRPcGV0aFRva2VucyA9IChjdXN0b21Db2luTWFwID0gY29pbnMpID0+XG4gIGN1c3RvbUNvaW5NYXAucmVkdWNlKChhY2M6IEV0aExpa2VUb2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gICAgaWYgKGNvaW4gaW5zdGFuY2VvZiBPcGV0aEVSQzIwVG9rZW4pIHtcbiAgICAgIGFjYy5wdXNoKHtcbiAgICAgICAgdHlwZTogY29pbi5uYW1lLFxuICAgICAgICBjb2luOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdvcGV0aCcgOiAndG9wZXRoJyxcbiAgICAgICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBjb2luLmNvbnRyYWN0QWRkcmVzcy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG5cbmNvbnN0IGdldEZvcm1hdHRlZFprZXRoVG9rZW5zID0gKGN1c3RvbUNvaW5NYXAgPSBjb2lucykgPT5cbiAgY3VzdG9tQ29pbk1hcC5yZWR1Y2UoKGFjYzogRXRoTGlrZVRva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgICBpZiAoY29pbiBpbnN0YW5jZW9mIFprZXRoRVJDMjBUb2tlbikge1xuICAgICAgYWNjLnB1c2goe1xuICAgICAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ3prZXRoJyA6ICd0emtldGgnLFxuICAgICAgICBuZXR3b3JrOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdNYWlubmV0JyA6ICdUZXN0bmV0JyxcbiAgICAgICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3M6IGNvaW4uY29udHJhY3RBZGRyZXNzLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxuY29uc3QgZ2V0Rm9ybWF0dGVkQmVyYVRva2VucyA9IChjdXN0b21Db2luTWFwID0gY29pbnMpID0+XG4gIGN1c3RvbUNvaW5NYXAucmVkdWNlKChhY2M6IEV0aExpa2VUb2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gICAgaWYgKGNvaW4gaW5zdGFuY2VvZiBCZXJhRVJDMjBUb2tlbikge1xuICAgICAgYWNjLnB1c2goe1xuICAgICAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ2JlcmEnIDogJ3RiZXJhJyxcbiAgICAgICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBjb2luLmNvbnRyYWN0QWRkcmVzcy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG5cbmNvbnN0IGdldEZvcm1hdHRlZFNvbFRva2VucyA9IChjdXN0b21Db2luTWFwID0gY29pbnMpID0+XG4gIGN1c3RvbUNvaW5NYXAucmVkdWNlKChhY2M6IFNvbFRva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgICBpZiAoY29pbiBpbnN0YW5jZW9mIFNvbENvaW4pIHtcbiAgICAgIGFjYy5wdXNoKHtcbiAgICAgICAgdHlwZTogY29pbi5uYW1lLFxuICAgICAgICBjb2luOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdzb2wnIDogJ3Rzb2wnLFxuICAgICAgICBuZXR3b3JrOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdNYWlubmV0JyA6ICdUZXN0bmV0JyxcbiAgICAgICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICAgICAgdG9rZW5BZGRyZXNzOiBjb2luLnRva2VuQWRkcmVzcyxcbiAgICAgICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICAgICAgICBjb250cmFjdEFkZHJlc3M6IGNvaW4uY29udHJhY3RBZGRyZXNzLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxuZXhwb3J0IGNvbnN0IGdldEZvcm1hdHRlZEFsZ29Ub2tlbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBBbGdvVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICAgIGlmIChjb2luIGluc3RhbmNlb2YgQWxnb0NvaW4pIHtcbiAgICAgIGFjYy5wdXNoKHtcbiAgICAgICAgdHlwZTogY29pbi5uYW1lLFxuICAgICAgICBjb2luOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdhbGdvJyA6ICd0YWxnbycsXG4gICAgICAgIGFsaWFzOiBjb2luLmFsaWFzLFxuICAgICAgICBuZXR3b3JrOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdNYWlubmV0JyA6ICdUZXN0bmV0JyxcbiAgICAgICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICAgICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxuY29uc3QgZ2V0Rm9ybWF0dGVkSGJhclRva2VucyA9IChjdXN0b21Db2luTWFwID0gY29pbnMpID0+XG4gIGN1c3RvbUNvaW5NYXAucmVkdWNlKChhY2M6IEhiYXJUb2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gICAgaWYgKGNvaW4gaW5zdGFuY2VvZiBIZWRlcmFUb2tlbikge1xuICAgICAgYWNjLnB1c2goe1xuICAgICAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ2hiYXInIDogJ3RoYmFyJyxcbiAgICAgICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgICAgICAgbm9kZUFjY291bnRJZDogY29pbi5ub2RlQWNjb3VudElkLFxuICAgICAgICB0b2tlbklkOiBjb2luLnRva2VuSWQsXG4gICAgICAgIGNvbnRyYWN0QWRkcmVzczogY29pbi5jb250cmFjdEFkZHJlc3MsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xuXG5jb25zdCBnZXRGb3JtYXR0ZWRBZGFUb2tlbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBBZGFUb2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gICAgaWYgKGNvaW4gaW5zdGFuY2VvZiBBZGFDb2luKSB7XG4gICAgICBhY2MucHVzaCh7XG4gICAgICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICAgICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnYWRhJyA6ICd0YWRhJyxcbiAgICAgICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgICAgIHBvbGljeUlkOiBjb2luLnBvbGljeUlkLFxuICAgICAgICBhc3NldE5hbWU6IGNvaW4uYXNzZXROYW1lLFxuICAgICAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xuXG5jb25zdCBnZXRGb3JtYXR0ZWRUcnhUb2tlbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBUcnhUb2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gICAgaWYgKGNvaW4gaW5zdGFuY2VvZiBUcm9uRXJjMjBDb2luKSB7XG4gICAgICBhY2MucHVzaCh7XG4gICAgICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICAgICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAndHJ4JyA6ICd0dHJ4JyxcbiAgICAgICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBjb2luLmNvbnRyYWN0QWRkcmVzcy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG5cbmNvbnN0IGdldEZvcm1hdHRlZFhycFRva2VucyA9IChjdXN0b21Db2luTWFwID0gY29pbnMpID0+XG4gIGN1c3RvbUNvaW5NYXAucmVkdWNlKChhY2M6IFhycFRva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgICBpZiAoY29pbiBpbnN0YW5jZW9mIFhycENvaW4pIHtcbiAgICAgIGFjYy5wdXNoKHtcbiAgICAgICAgdHlwZTogY29pbi5uYW1lLFxuICAgICAgICBjb2luOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICd4cnAnIDogJ3R4cnAnLFxuICAgICAgICBuZXR3b3JrOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdNYWlubmV0JyA6ICdUZXN0bmV0JyxcbiAgICAgICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICAgICAgZGVjaW1hbFBsYWNlczogY29pbi5kZWNpbWFsUGxhY2VzLFxuICAgICAgICBpc3N1ZXJBZGRyZXNzOiBjb2luLmlzc3VlckFkZHJlc3MsXG4gICAgICAgIGN1cnJlbmN5Q29kZTogY29pbi5jdXJyZW5jeUNvZGUsXG4gICAgICAgIGRvbWFpbjogY29pbi5kb21haW4sXG4gICAgICAgIGNvbnRyYWN0QWRkcmVzczogY29pbi5jb250cmFjdEFkZHJlc3MsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xuXG5jb25zdCBnZXRGb3JtYXR0ZWRTdWlUb2tlbnMgPSAoY3VzdG9tQ29pbk1hcCA9IGNvaW5zKSA9PlxuICBjdXN0b21Db2luTWFwLnJlZHVjZSgoYWNjOiBTdWlUb2tlbkNvbmZpZ1tdLCBjb2luKSA9PiB7XG4gICAgaWYgKGNvaW4gaW5zdGFuY2VvZiBTdWlDb2luKSB7XG4gICAgICBhY2MucHVzaCh7XG4gICAgICAgIHR5cGU6IGNvaW4ubmFtZSxcbiAgICAgICAgY29pbjogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnc3VpJyA6ICd0c3VpJyxcbiAgICAgICAgbmV0d29yazogY29pbi5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyAnTWFpbm5ldCcgOiAnVGVzdG5ldCcsXG4gICAgICAgIG5hbWU6IGNvaW4uZnVsbE5hbWUsXG4gICAgICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgICAgICAgcGFja2FnZUlkOiBjb2luLnBhY2thZ2VJZCxcbiAgICAgICAgbW9kdWxlOiBjb2luLm1vZHVsZSxcbiAgICAgICAgc3ltYm9sOiBjb2luLnN5bWJvbCxcbiAgICAgICAgY29udHJhY3RBZGRyZXNzOiBjb2luLmNvbnRyYWN0QWRkcmVzcyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG5cbmNvbnN0IGdldEZvcm1hdHRlZEFwdFRva2VucyA9IChjdXN0b21Db2luTWFwID0gY29pbnMpID0+XG4gIGN1c3RvbUNvaW5NYXAucmVkdWNlKChhY2M6IEFwdFRva2VuQ29uZmlnW10sIGNvaW4pID0+IHtcbiAgICBpZiAoY29pbiBpbnN0YW5jZW9mIEFwdENvaW4pIHtcbiAgICAgIGFjYy5wdXNoKHtcbiAgICAgICAgdHlwZTogY29pbi5uYW1lLFxuICAgICAgICBjb2luOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdhcHQnIDogJ3RhcHQnLFxuICAgICAgICBuZXR3b3JrOiBjb2luLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVCA/ICdNYWlubmV0JyA6ICdUZXN0bmV0JyxcbiAgICAgICAgbmFtZTogY29pbi5mdWxsTmFtZSxcbiAgICAgICAgYXNzZXRJZDogY29pbi5hc3NldElkLFxuICAgICAgICBkZWNpbWFsUGxhY2VzOiBjb2luLmRlY2ltYWxQbGFjZXMsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xuXG5jb25zdCBnZXRGb3JtYXR0ZWRTaXAxMFRva2VucyA9IChjdXN0b21Db2luTWFwID0gY29pbnMpID0+XG4gIGN1c3RvbUNvaW5NYXAucmVkdWNlKChhY2M6IFNpcDEwVG9rZW5Db25maWdbXSwgY29pbikgPT4ge1xuICAgIGlmIChjb2luIGluc3RhbmNlb2YgU2lwMTBUb2tlbikge1xuICAgICAgYWNjLnB1c2goe1xuICAgICAgICB0eXBlOiBjb2luLm5hbWUsXG4gICAgICAgIGNvaW46IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ3N0eCcgOiAndHN0eCcsXG4gICAgICAgIG5ldHdvcms6IGNvaW4ubmV0d29yay50eXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gJ01haW5uZXQnIDogJ1Rlc3RuZXQnLFxuICAgICAgICBuYW1lOiBjb2luLmZ1bGxOYW1lLFxuICAgICAgICBhc3NldElkOiBjb2luLmFzc2V0SWQsXG4gICAgICAgIGRlY2ltYWxQbGFjZXM6IGNvaW4uZGVjaW1hbFBsYWNlcyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSk7XG5cbmV4cG9ydCBjb25zdCBnZXRGb3JtYXR0ZWRUb2tlbnMgPSAoY29pbk1hcCA9IGNvaW5zKTogVG9rZW5zID0+IHtcbiAgcmV0dXJuIHtcbiAgICBiaXRjb2luOiB7XG4gICAgICBldGg6IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRFcmMyMFRva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnTWFpbm5ldCcpLFxuICAgICAgfSxcbiAgICAgIHhsbToge1xuICAgICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZFN0ZWxsYXJUb2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ01haW5uZXQnKSxcbiAgICAgIH0sXG4gICAgICBhbGdvOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkQWxnb1Rva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnTWFpbm5ldCcpLFxuICAgICAgfSxcbiAgICAgIG9mYzoge1xuICAgICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZE9mY0NvaW5zKGNvaW5NYXApLmZpbHRlcihcbiAgICAgICAgICAodG9rZW4pID0+IGNvaW5NYXAuZ2V0KHRva2VuLnR5cGUpLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuTUFJTk5FVFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICAgIGNlbG86IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRDZWxvVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdNYWlubmV0JyksXG4gICAgICB9LFxuICAgICAgYnNjOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkQnNjVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdNYWlubmV0JyksXG4gICAgICB9LFxuICAgICAgZW9zOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkRW9zVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdNYWlubmV0JyksXG4gICAgICB9LFxuICAgICAgYXZheGM6IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRBdmF4Q1Rva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnTWFpbm5ldCcpLFxuICAgICAgfSxcbiAgICAgIHBvbHlnb246IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRQb2x5Z29uVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdNYWlubmV0JyksXG4gICAgICB9LFxuICAgICAgYXJiZXRoOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkQXJiZXRoVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdNYWlubmV0JyksXG4gICAgICB9LFxuICAgICAgb3BldGg6IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRPcGV0aFRva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnTWFpbm5ldCcpLFxuICAgICAgfSxcbiAgICAgIHprZXRoOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkWmtldGhUb2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ01haW5uZXQnKSxcbiAgICAgIH0sXG4gICAgICBzb2w6IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRTb2xUb2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ01haW5uZXQnKSxcbiAgICAgIH0sXG4gICAgICBoYmFyOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkSGJhclRva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnTWFpbm5ldCcpLFxuICAgICAgfSxcbiAgICAgIGFkYToge1xuICAgICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZEFkYVRva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnTWFpbm5ldCcpLFxuICAgICAgfSxcbiAgICAgIHRyeDoge1xuICAgICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZFRyeFRva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnTWFpbm5ldCcpLFxuICAgICAgfSxcbiAgICAgIHhycDoge1xuICAgICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZFhycFRva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnTWFpbm5ldCcpLFxuICAgICAgfSxcbiAgICAgIHN1aToge1xuICAgICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZFN1aVRva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnTWFpbm5ldCcpLFxuICAgICAgfSxcbiAgICAgIGJlcmE6IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRCZXJhVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdNYWlubmV0JyksXG4gICAgICB9LFxuICAgICAgYXB0OiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkQXB0VG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdNYWlubmV0JyksXG4gICAgICB9LFxuICAgICAgc3R4OiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkU2lwMTBUb2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ01haW5uZXQnKSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB0ZXN0bmV0OiB7XG4gICAgICBldGg6IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRFcmMyMFRva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnVGVzdG5ldCcpLFxuICAgICAgfSxcbiAgICAgIHhsbToge1xuICAgICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZFN0ZWxsYXJUb2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ1Rlc3RuZXQnKSxcbiAgICAgIH0sXG4gICAgICBhbGdvOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkQWxnb1Rva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnVGVzdG5ldCcpLFxuICAgICAgfSxcbiAgICAgIG9mYzoge1xuICAgICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZE9mY0NvaW5zKGNvaW5NYXApLmZpbHRlcihcbiAgICAgICAgICAodG9rZW4pID0+IGNvaW5NYXAuZ2V0KHRva2VuLnR5cGUpLm5ldHdvcmsudHlwZSA9PT0gTmV0d29ya1R5cGUuVEVTVE5FVFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICAgIGNlbG86IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRDZWxvVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdUZXN0bmV0JyksXG4gICAgICB9LFxuICAgICAgYnNjOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkQnNjVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdUZXN0bmV0JyksXG4gICAgICB9LFxuICAgICAgZW9zOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkRW9zVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdUZXN0bmV0JyksXG4gICAgICB9LFxuICAgICAgYXZheGM6IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRBdmF4Q1Rva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnVGVzdG5ldCcpLFxuICAgICAgfSxcbiAgICAgIHBvbHlnb246IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRQb2x5Z29uVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdUZXN0bmV0JyksXG4gICAgICB9LFxuICAgICAgYXJiZXRoOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkQXJiZXRoVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdUZXN0bmV0JyksXG4gICAgICB9LFxuICAgICAgb3BldGg6IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRPcGV0aFRva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnVGVzdG5ldCcpLFxuICAgICAgfSxcbiAgICAgIHprZXRoOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkWmtldGhUb2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ1Rlc3RuZXQnKSxcbiAgICAgIH0sXG4gICAgICBzb2w6IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRTb2xUb2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ1Rlc3RuZXQnKSxcbiAgICAgIH0sXG4gICAgICBoYmFyOiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkSGJhclRva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnVGVzdG5ldCcpLFxuICAgICAgfSxcbiAgICAgIGFkYToge1xuICAgICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZEFkYVRva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnVGVzdG5ldCcpLFxuICAgICAgfSxcbiAgICAgIHRyeDoge1xuICAgICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZFRyeFRva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnVGVzdG5ldCcpLFxuICAgICAgfSxcbiAgICAgIHhycDoge1xuICAgICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZFhycFRva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnVGVzdG5ldCcpLFxuICAgICAgfSxcbiAgICAgIHN1aToge1xuICAgICAgICB0b2tlbnM6IGdldEZvcm1hdHRlZFN1aVRva2Vucyhjb2luTWFwKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uZXR3b3JrID09PSAnVGVzdG5ldCcpLFxuICAgICAgfSxcbiAgICAgIGJlcmE6IHtcbiAgICAgICAgdG9rZW5zOiBnZXRGb3JtYXR0ZWRCZXJhVG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdUZXN0bmV0JyksXG4gICAgICB9LFxuICAgICAgYXB0OiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkQXB0VG9rZW5zKGNvaW5NYXApLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5ldHdvcmsgPT09ICdUZXN0bmV0JyksXG4gICAgICB9LFxuICAgICAgc3R4OiB7XG4gICAgICAgIHRva2VuczogZ2V0Rm9ybWF0dGVkU2lwMTBUb2tlbnMoY29pbk1hcCkuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmV0d29yayA9PT0gJ1Rlc3RuZXQnKSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn07XG5cbi8qKlxuICogVmVyaWZ5IG1haW5uZXQgb3IgdGVzdG5ldCB0b2tlbnNcbiAqIEBwYXJhbSB0b2tlbnNcbiAqL1xuY29uc3QgdmVyaWZ5VG9rZW5zID0gZnVuY3Rpb24gKHRva2VuczogQmFzZVRva2VuQ29uZmlnW10pIHtcbiAgY29uc3QgdmVyaWZpZWRUb2tlbnM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG4gIHRva2Vucy5mb3JFYWNoKCh0b2tlbikgPT4ge1xuICAgIGlmICh2ZXJpZmllZFRva2Vuc1t0b2tlbi50eXBlXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0b2tlbiA6ICcgKyB0b2tlbi50eXBlICsgJyBkdXBsaWNhdGVkLicpO1xuICAgIH1cbiAgICB2ZXJpZmllZFRva2Vuc1t0b2tlbi50eXBlXSA9IHRydWU7XG5cbiAgICBpZiAoXG4gICAgICAodG9rZW4gYXMgQmFzZUNvbnRyYWN0QWRkcmVzc0NvbmZpZykudG9rZW5Db250cmFjdEFkZHJlc3MgJiZcbiAgICAgICh0b2tlbiBhcyBCYXNlQ29udHJhY3RBZGRyZXNzQ29uZmlnKS50b2tlbkNvbnRyYWN0QWRkcmVzcyAhPT1cbiAgICAgICAgKHRva2VuIGFzIEJhc2VDb250cmFjdEFkZHJlc3NDb25maWcpLnRva2VuQ29udHJhY3RBZGRyZXNzLnRvTG9jYWxlTG93ZXJDYXNlKClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ3Rva2VuIGNvbnRyYWN0OiAnICsgdG9rZW4udHlwZSArICcgaXMgbm90IGFsbCBsb3dlciBjYXNlOiAnICsgKHRva2VuIGFzIEJhc2VDb250cmFjdEFkZHJlc3NDb25maWcpXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHZlcmlmaWVkVG9rZW5zO1xufTtcblxuZXhwb3J0IGNvbnN0IHRva2VucyA9IGdldEZvcm1hdHRlZFRva2VucygpO1xuXG5leHBvcnQgY29uc3QgZm9ybWF0dGVkQWxnb1Rva2VucyA9IGdldEZvcm1hdHRlZEFsZ29Ub2tlbnMoKTtcblxuY29uc3QgbWFpbm5ldEVyYzIwVG9rZW5zID0gdmVyaWZ5VG9rZW5zKHRva2Vucy5iaXRjb2luLmV0aC50b2tlbnMpO1xuY29uc3QgbWFpbm5ldFN0ZWxsYXJUb2tlbnMgPSB2ZXJpZnlUb2tlbnModG9rZW5zLmJpdGNvaW4ueGxtLnRva2Vucyk7XG5leHBvcnQgY29uc3QgbWFpbm5ldFRva2VucyA9IHsgLi4ubWFpbm5ldEVyYzIwVG9rZW5zLCAuLi5tYWlubmV0U3RlbGxhclRva2VucyB9O1xuXG5jb25zdCB0ZXN0bmV0RXJjMjBUb2tlbnMgPSB2ZXJpZnlUb2tlbnModG9rZW5zLnRlc3RuZXQuZXRoLnRva2Vucyk7XG5jb25zdCB0ZXN0bmV0U3RlbGxhclRva2VucyA9IHZlcmlmeVRva2Vucyh0b2tlbnMudGVzdG5ldC54bG0udG9rZW5zKTtcbmV4cG9ydCBjb25zdCB0ZXN0bmV0VG9rZW5zID0geyAuLi50ZXN0bmV0RXJjMjBUb2tlbnMsIC4uLnRlc3RuZXRTdGVsbGFyVG9rZW5zIH07XG4iXX0=Выполнить команду
Для локальной разработки. Не используйте в интернете!