UNPKG

bitgo

Version:
841 lines • 137 kB
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.GlobalCoinFactory = void 0;
exports.registerCoinConstructors = registerCoinConstructors;
exports.getCoinConstructor = getCoinConstructor;
exports.getTokenConstructor = getTokenConstructor;
/**
 * @prettier
 */
const sdk_coin_ada_1 = require("@bitgo/sdk-coin-ada");
const sdk_coin_algo_1 = require("@bitgo/sdk-coin-algo");
const sdk_coin_canton_1 = require("@bitgo/sdk-coin-canton");
const sdk_coin_bcha_1 = require("@bitgo/sdk-coin-bcha");
const sdk_coin_pearl_1 = require("@bitgo/sdk-coin-pearl");
const sdk_coin_hbar_1 = require("@bitgo/sdk-coin-hbar");
const sdk_coin_near_1 = require("@bitgo/sdk-coin-near");
const sdk_coin_sol_1 = require("@bitgo/sdk-coin-sol");
const sdk_coin_trx_1 = require("@bitgo/sdk-coin-trx");
const sdk_core_1 = require("@bitgo/sdk-core");
const sdk_coin_evm_1 = require("@bitgo/sdk-coin-evm");
const statics_1 = require("@bitgo/statics");
const coins_1 = require("./coins");
function registerCoinConstructors(coinFactory, coinMap = statics_1.coins) {
    coinFactory.register('ada', coins_1.Ada.createInstance);
    coinFactory.register('algo', coins_1.Algo.createInstance);
    coinFactory.register('apechain', coins_1.Apechain.createInstance);
    coinFactory.register('apt', coins_1.Apt.createInstance);
    coinFactory.register('arbeth', coins_1.Arbeth.createInstance);
    coinFactory.register('asi', coins_1.Asi.createInstance);
    coinFactory.register('atom', coins_1.Atom.createInstance);
    coinFactory.register('avaxc', coins_1.AvaxC.createInstance);
    coinFactory.register('avaxp', coins_1.AvaxP.createInstance);
    coinFactory.register('baby', coins_1.Baby.createInstance);
    coinFactory.register('bch', coins_1.Bch.createInstance);
    coinFactory.register('bcha', sdk_coin_bcha_1.Bcha.createInstance);
    coinFactory.register('bera', coins_1.Bera.createInstance);
    coinFactory.register('bld', coins_1.Bld.createInstance);
    coinFactory.register('bsc', coins_1.Bsc.createInstance);
    coinFactory.register('bsv', coins_1.Bsv.createInstance);
    coinFactory.register('btc', coins_1.Btc.createInstance);
    coinFactory.register('btg', coins_1.Btg.createInstance);
    coinFactory.register('canton', coins_1.Canton.createInstance);
    coinFactory.register('celo', coins_1.Celo.createInstance);
    coinFactory.register('coredao', coins_1.Coredao.createInstance);
    coinFactory.register('coreum', coins_1.Coreum.createInstance);
    coinFactory.register('cronos', coins_1.Cronos.createInstance);
    coinFactory.register('cspr', coins_1.Cspr.createInstance);
    coinFactory.register('dash', coins_1.Dash.createInstance);
    coinFactory.register('doge', coins_1.Doge.createInstance);
    coinFactory.register('dot', coins_1.Dot.createInstance);
    coinFactory.register('eos', coins_1.Eos.createInstance);
    coinFactory.register('etc', coins_1.Etc.createInstance);
    coinFactory.register('eth', coins_1.Eth.createInstance);
    coinFactory.register('ethw', coins_1.Ethw.createInstance);
    coinFactory.register('baseeth', coins_1.EthLikeCoin.createInstance);
    coinFactory.register('opbnb', coins_1.EthLikeCoin.createInstance);
    coinFactory.register('fantom', coins_1.EthLikeCoin.createInstance);
    coinFactory.register('cotieth', coins_1.EthLikeCoin.createInstance);
    coinFactory.register('og', coins_1.EthLikeCoin.createInstance);
    coinFactory.register('tog', coins_1.EthLikeCoin.createInstance);
    coinFactory.register('topbnb', coins_1.TethLikeCoin.createInstance);
    coinFactory.register('tfantom', coins_1.TethLikeCoin.createInstance);
    coinFactory.register('tcotieth', coins_1.TethLikeCoin.createInstance);
    coinFactory.register('tbaseeth', coins_1.TethLikeCoin.createInstance);
    for (const fiatCoin of coins_1.allFiatCoins) {
        coinFactory.register(fiatCoin.chain, coins_1.Fiat.createConstructor(fiatCoin));
    }
    coinFactory.register('flr', coins_1.Flr.createInstance);
    coinFactory.register('flrp', coins_1.Flrp.createInstance);
    coinFactory.register('gteth', coins_1.Gteth.createInstance);
    coinFactory.register('hash', coins_1.Hash.createInstance);
    coinFactory.register('hbar', coins_1.Hbar.createInstance);
    coinFactory.register('hteth', coins_1.Hteth.createInstance);
    coinFactory.register('lnbtc', coins_1.Lnbtc.createInstance);
    coinFactory.register('ltc', coins_1.Ltc.createInstance);
    coinFactory.register('mon', coins_1.Mon.createInstance);
    coinFactory.register('icp', coins_1.Icp.createInstance);
    coinFactory.register('initia', coins_1.Initia.createInstance);
    coinFactory.register('injective', coins_1.Injective.createInstance);
    coinFactory.register('iota', coins_1.Iota.createInstance);
    coinFactory.register('islm', coins_1.Islm.createInstance);
    coinFactory.register('kaspa', coins_1.Kaspa.createInstance);
    coinFactory.register('near', sdk_coin_near_1.Near.createInstance);
    coinFactory.register('oas', coins_1.Oas.createInstance);
    coinFactory.register('ofc', coins_1.Ofc.createInstance);
    coinFactory.register('opeth', coins_1.Opeth.createInstance);
    coinFactory.register('osmo', coins_1.Osmo.createInstance);
    coinFactory.register('pearl', sdk_coin_pearl_1.Pearl.createInstance);
    coinFactory.register('polygon', coins_1.Polygon.createInstance);
    coinFactory.register('polyx', coins_1.Polyx.createInstance);
    coinFactory.register('rbtc', coins_1.Rbtc.createInstance);
    coinFactory.register('thorchain:rune', coins_1.Rune.createInstance);
    coinFactory.register('sei', coins_1.Sei.createInstance);
    coinFactory.register('sepeth', coins_1.Sepeth.createInstance);
    coinFactory.register('sgb', coins_1.Sgb.createInstance);
    coinFactory.register('sol', coins_1.Sol.createInstance);
    coinFactory.register('soneium', coins_1.Soneium.createInstance);
    coinFactory.register('starknet', coins_1.Starknet.createInstance);
    coinFactory.register('stx', coins_1.Stx.createInstance);
    coinFactory.register('sui', coins_1.Sui.createInstance);
    coinFactory.register('susd', coins_1.Susd.createInstance);
    coinFactory.register('tao', coins_1.Tao.createInstance);
    coinFactory.register('tempo', coins_1.Tempo.createInstance);
    coinFactory.register('tia', coins_1.Tia.createInstance);
    coinFactory.register('ton', coins_1.Ton.createInstance);
    coinFactory.register('talgo', coins_1.Talgo.createInstance);
    coinFactory.register('tapechain', coins_1.Tapechain.createInstance);
    coinFactory.register('tapt', coins_1.Tapt.createInstance);
    coinFactory.register('tarbeth', coins_1.Tarbeth.createInstance);
    coinFactory.register('tada', coins_1.Tada.createInstance);
    coinFactory.register('tasi', coins_1.Tasi.createInstance);
    coinFactory.register('tatom', coins_1.Tatom.createInstance);
    coinFactory.register('tavaxc', coins_1.TavaxC.createInstance);
    coinFactory.register('tavaxp', coins_1.TavaxP.createInstance);
    coinFactory.register('tbaby', coins_1.Tbaby.createInstance);
    coinFactory.register('tbch', coins_1.Tbch.createInstance);
    coinFactory.register('tbcha', sdk_coin_bcha_1.Tbcha.createInstance);
    coinFactory.register('tbera', coins_1.Tbera.createInstance);
    coinFactory.register('tbld', coins_1.Tbld.createInstance);
    coinFactory.register('tbsc', coins_1.Tbsc.createInstance);
    coinFactory.register('tbsv', coins_1.Tbsv.createInstance);
    coinFactory.register('tbtc', coins_1.Tbtc.createInstance);
    coinFactory.register('tbtcsig', coins_1.Tbtcsig.createInstance);
    coinFactory.register('tbtc4', coins_1.Tbtc4.createInstance);
    coinFactory.register('tbtcbgsig', coins_1.Tbtcbgsig.createInstance);
    coinFactory.register('tbtcstx', coins_1.Tbtcstx.createInstance);
    coinFactory.register('tbtcstxprivate1', coins_1.Tbtcstxprivate1.createInstance);
    coinFactory.register('tcanton', coins_1.Tcanton.createInstance);
    coinFactory.register('tcelo', coins_1.Tcelo.createInstance);
    coinFactory.register('tcoredao', coins_1.Tcoredao.createInstance);
    coinFactory.register('tcoreum', coins_1.Tcoreum.createInstance);
    coinFactory.register('tcronos', coins_1.Tcronos.createInstance);
    coinFactory.register('tcspr', coins_1.Tcspr.createInstance);
    coinFactory.register('tdash', coins_1.Tdash.createInstance);
    coinFactory.register('tdoge', coins_1.Tdoge.createInstance);
    coinFactory.register('tdot', coins_1.Tdot.createInstance);
    coinFactory.register('teos', coins_1.Teos.createInstance);
    coinFactory.register('tetc', coins_1.Tetc.createInstance);
    coinFactory.register('teth', coins_1.Teth.createInstance);
    coinFactory.register('tflr', coins_1.Tflr.createInstance);
    coinFactory.register('tflrp', coins_1.Flrp.createInstance);
    coinFactory.register('tmon', coins_1.Tmon.createInstance);
    coinFactory.register('thash', coins_1.Thash.createInstance);
    coinFactory.register('thbar', coins_1.Thbar.createInstance);
    coinFactory.register('ticp', coins_1.Ticp.createInstance);
    coinFactory.register('tinitia', coins_1.Tinitia.createInstance);
    coinFactory.register('tinjective', coins_1.Tinjective.createInstance);
    coinFactory.register('tiota', coins_1.Iota.createInstance);
    coinFactory.register('tislm', coins_1.Tislm.createInstance);
    coinFactory.register('tkaspa', coins_1.Kaspa.createInstance);
    coinFactory.register('tlnbtc', coins_1.Tlnbtc.createInstance);
    coinFactory.register('tltc', coins_1.Tltc.createInstance);
    coinFactory.register('tnear', sdk_coin_near_1.TNear.createInstance);
    coinFactory.register('toas', coins_1.Toas.createInstance);
    coinFactory.register('topeth', coins_1.Topeth.createInstance);
    coinFactory.register('tosmo', coins_1.Tosmo.createInstance);
    coinFactory.register('tpearl', sdk_coin_pearl_1.Tpearl.createInstance);
    coinFactory.register('tpolygon', coins_1.Tpolygon.createInstance);
    coinFactory.register('tpolyx', coins_1.Tpolyx.createInstance);
    coinFactory.register('trbtc', coins_1.Trbtc.createInstance);
    coinFactory.register('tsgb', coins_1.Tsgb.createInstance);
    coinFactory.register('tthorchain:rune', coins_1.Trune.createInstance);
    coinFactory.register('trx', coins_1.Trx.createInstance);
    coinFactory.register('tsei', coins_1.Tsei.createInstance);
    coinFactory.register('tsol', coins_1.Tsol.createInstance);
    coinFactory.register('tsoneium', coins_1.Tsoneium.createInstance);
    coinFactory.register('tstarknet', coins_1.Starknet.createInstance);
    coinFactory.register('tstx', coins_1.Tstx.createInstance);
    coinFactory.register('tstt', coins_1.Tstt.createInstance);
    coinFactory.register('tsui', coins_1.Tsui.createInstance);
    coinFactory.register('tsusd', coins_1.Tsusd.createInstance);
    coinFactory.register('ttao', coins_1.Ttao.createInstance);
    coinFactory.register('ttempo', coins_1.Ttempo.createInstance);
    coinFactory.register('ttia', coins_1.Ttia.createInstance);
    coinFactory.register('tton', coins_1.Tton.createInstance);
    coinFactory.register('ttrx', coins_1.Ttrx.createInstance);
    coinFactory.register('tvet', coins_1.Tvet.createInstance);
    coinFactory.register('txdc', coins_1.Txdc.createInstance);
    coinFactory.register('txlm', coins_1.Txlm.createInstance);
    coinFactory.register('txrp', coins_1.Txrp.createInstance);
    coinFactory.register('txtz', coins_1.Txtz.createInstance);
    coinFactory.register('tzec', coins_1.Tzec.createInstance);
    coinFactory.register('tzeta', coins_1.Tzeta.createInstance);
    coinFactory.register('tzketh', coins_1.Tzketh.createInstance);
    coinFactory.register('twemix', coins_1.Twemix.createInstance);
    coinFactory.register('tworld', coins_1.Tworld.createInstance);
    coinFactory.register('vet', coins_1.Vet.createInstance);
    coinFactory.register('xdc', coins_1.Xdc.createInstance);
    coinFactory.register('xlm', coins_1.Xlm.createInstance);
    coinFactory.register('xrp', coins_1.Xrp.createInstance);
    coinFactory.register('xtz', coins_1.Xtz.createInstance);
    coinFactory.register('wemix', coins_1.Wemix.createInstance);
    coinFactory.register('world', coins_1.World.createInstance);
    coinFactory.register('zec', coins_1.Zec.createInstance);
    coinFactory.register('zeta', coins_1.Zeta.createInstance);
    coinFactory.register('zketh', coins_1.Zketh.createInstance);
    statics_1.coins
        .filter((coin) => coin.features.includes(statics_1.CoinFeature.SHARED_EVM_SDK))
        .forEach((coin) => {
        coinFactory.register(coin.name, coins_1.EvmCoin.createInstance);
    });
    statics_1.coins
        .filter((coin) => coin.features.includes(statics_1.CoinFeature.SHARED_COSMOS_SDK))
        .forEach((coin) => {
        coinFactory.register(coin.name, coins_1.CosmosSharedCoin.createInstance);
    });
    const tokens = (0, statics_1.getFormattedTokens)(coinMap);
    coins_1.Erc20Token.createTokenConstructors([...tokens.bitcoin.eth.tokens, ...tokens.testnet.eth.tokens]).forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    coins_1.Erc721Token.createTokenConstructors([...tokens.bitcoin.eth.nfts, ...tokens.testnet.eth.nfts]).forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    coins_1.Erc7984Token.createTokenConstructors([
        ...tokens.bitcoin.eth.confidentialTokens,
        ...tokens.testnet.eth.confidentialTokens,
    ]).forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    coins_1.StellarToken.createTokenConstructors([...tokens.bitcoin.xlm.tokens, ...tokens.testnet.xlm.tokens]).forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    for (const ofcToken of [...tokens.bitcoin.ofc.tokens, ...tokens.testnet.ofc.tokens]) {
        const tokenConstructor = coins_1.OfcToken.createTokenConstructor(ofcToken);
        coinFactory.register(ofcToken.type, tokenConstructor);
    }
    coins_1.CeloToken.createTokenConstructors([...tokens.bitcoin.celo.tokens, ...tokens.testnet.celo.tokens]).forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    coins_1.BscToken.createTokenConstructors().forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    coins_1.EosToken.createTokenConstructors([...tokens.bitcoin.eos.tokens, ...tokens.testnet.eos.tokens]).forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    sdk_coin_algo_1.AlgoToken.createTokenConstructors([...tokens.bitcoin.algo.tokens, ...tokens.testnet.algo.tokens]).forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    coins_1.AvaxCToken.createTokenConstructors().forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    coins_1.PolygonToken.createTokenConstructors().forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    coins_1.SoneiumToken.createTokenConstructors().forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    coins_1.ArbethToken.createTokenConstructors().forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    coins_1.OpethToken.createTokenConstructors().forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    coins_1.ZkethToken.createTokenConstructors().forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    coins_1.BeraToken.createTokenConstructors().forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    coins_1.CoredaoToken.createTokenConstructors().forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    coins_1.WorldToken.createTokenConstructors().forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    sdk_coin_sol_1.SolToken.createTokenConstructors([...tokens.bitcoin.sol.tokens, ...tokens.testnet.sol.tokens]).forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    sdk_coin_canton_1.CantonToken.createTokenConstructors([...tokens.bitcoin.canton.tokens, ...tokens.testnet.canton.tokens]).forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    sdk_coin_hbar_1.HbarToken.createTokenConstructors([...tokens.bitcoin.hbar.tokens, ...tokens.testnet.hbar.tokens]).forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    sdk_coin_trx_1.TrxToken.createTokenConstructors([...tokens.bitcoin.trx.tokens, ...tokens.testnet.trx.tokens]).forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    sdk_coin_ada_1.AdaToken.createTokenConstructors([...tokens.bitcoin.ada.tokens, ...tokens.testnet.ada.tokens]).forEach(({ name, coinConstructor }) => coinFactory.register(name, coinConstructor));
    coins_1.SuiToken.createTokenConstructors([...tokens.bitcoin.sui.tokens, ...tokens.testnet.sui.tokens]).forEach(({ name, coinConstructor }) => coinFactory.register(name, coinConstructor));
    coins_1.TaoToken.createTokenConstructors([...tokens.bitcoin.tao.tokens, ...tokens.testnet.tao.tokens]).forEach(({ name, coinConstructor }) => coinFactory.register(name, coinConstructor));
    coins_1.Tip20Token.createTokenConstructors([...tokens.bitcoin.tempo.tokens, ...tokens.testnet.tempo.tokens]).forEach(({ name, coinConstructor }) => coinFactory.register(name, coinConstructor));
    coins_1.PolyxToken.createTokenConstructors([...tokens.bitcoin.polyx.tokens, ...tokens.testnet.polyx.tokens]).forEach(({ name, coinConstructor }) => coinFactory.register(name, coinConstructor));
    coins_1.XrpToken.createTokenConstructors([...tokens.bitcoin.xrp.tokens, ...tokens.testnet.xrp.tokens]).forEach(({ name, coinConstructor }) => coinFactory.register(name, coinConstructor));
    coins_1.XrpMptToken.createTokenConstructors([...tokens.bitcoin.xrp.mptTokens, ...tokens.testnet.xrp.mptTokens]).forEach(({ name, coinConstructor }) => coinFactory.register(name, coinConstructor));
    coins_1.AptToken.createTokenConstructors([...tokens.bitcoin.apt.tokens, ...tokens.testnet.apt.tokens]).forEach(({ name, coinConstructor }) => coinFactory.register(name, coinConstructor));
    coins_1.Sip10Token.createTokenConstructors([...tokens.bitcoin.stx.tokens, ...tokens.testnet.stx.tokens]).forEach(({ name, coinConstructor }) => coinFactory.register(name, coinConstructor));
    sdk_coin_near_1.Nep141Token.createTokenConstructors([...tokens.bitcoin.near.tokens, ...tokens.testnet.near.tokens]).forEach(({ name, coinConstructor }) => coinFactory.register(name, coinConstructor));
    coins_1.HashToken.createTokenConstructors([...tokens.bitcoin.cosmos.tokens, ...tokens.testnet.cosmos.tokens]).forEach(({ name, coinConstructor }) => coinFactory.register(name, coinConstructor));
    coins_1.JettonToken.createTokenConstructors([...tokens.bitcoin.ton.tokens, ...tokens.testnet.ton.tokens]).forEach(({ name, coinConstructor }) => coinFactory.register(name, coinConstructor));
    coins_1.VetToken.createTokenConstructors().forEach(({ name, coinConstructor }) => coinFactory.register(name, coinConstructor));
    coins_1.FlrToken.createTokenConstructors().forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    coins_1.MonToken.createTokenConstructors().forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    coins_1.XdcToken.createTokenConstructors().forEach(({ name, coinConstructor }) => {
        coinFactory.register(name, coinConstructor);
    });
    // Generic ERC20 token registration for coins with SUPPORTS_ERC20 feature
    statics_1.coins
        .filter((coin) => coin.features.includes(statics_1.CoinFeature.SUPPORTS_ERC20) && !coin.isToken)
        .forEach((coin) => {
        const coinNames = {
            Mainnet: `${coin.name}`,
            Testnet: `t${coin.name}`,
        };
        sdk_coin_evm_1.EthLikeErc20Token.createTokenConstructors(coinNames).forEach(({ name, coinConstructor }) => {
            coinFactory.register(name, coinConstructor);
        });
    });
    // Generic ERC721 token registration for coins with SUPPORTS_ERC721 feature
    statics_1.coins
        .filter((coin) => coin.features.includes(statics_1.CoinFeature.SUPPORTS_ERC721) && !coin.isToken)
        .forEach((coin) => {
        const coinNames = {
            Mainnet: `${coin.name}`,
            Testnet: `t${coin.name}`,
        };
        sdk_coin_evm_1.EthLikeErc721Token.createTokenConstructors(coinNames).forEach(({ name, coinConstructor }) => {
            coinFactory.register(name, coinConstructor);
        });
    });
}
function getCoinConstructor(coinName) {
    const evmCoins = statics_1.coins.filter((coin) => coin.features.includes(statics_1.CoinFeature.SHARED_EVM_SDK));
    const cosmosSharedCoins = statics_1.coins.filter((coin) => coin.features.includes(statics_1.CoinFeature.SHARED_COSMOS_SDK));
    if (evmCoins.has(coinName)) {
        return coins_1.EvmCoin.createInstance;
    }
    if (cosmosSharedCoins.has(coinName)) {
        return coins_1.CosmosSharedCoin.createInstance;
    }
    switch (coinName) {
        case 'ada':
            return coins_1.Ada.createInstance;
        case 'algo':
            return coins_1.Algo.createInstance;
        case 'apechain':
            return coins_1.Apechain.createInstance;
        case 'apt':
            return coins_1.Apt.createInstance;
        case 'arbeth':
            return coins_1.Arbeth.createInstance;
        case 'asi':
            return coins_1.Asi.createInstance;
        case 'atom':
            return coins_1.Atom.createInstance;
        case 'avaxc':
            return coins_1.AvaxC.createInstance;
        case 'avaxp':
            return coins_1.AvaxP.createInstance;
        case 'baby':
            return coins_1.Baby.createInstance;
        case 'bch':
            return coins_1.Bch.createInstance;
        case 'bcha':
            return sdk_coin_bcha_1.Bcha.createInstance;
        case 'bera':
            return coins_1.Bera.createInstance;
        case 'bld':
            return coins_1.Bld.createInstance;
        case 'bsc':
            return coins_1.Bsc.createInstance;
        case 'bsv':
            return coins_1.Bsv.createInstance;
        case 'btc':
            return coins_1.Btc.createInstance;
        case 'btg':
            return coins_1.Btg.createInstance;
        case 'canton':
            return coins_1.Canton.createInstance;
        case 'celo':
            return coins_1.Celo.createInstance;
        case 'coredao':
            return coins_1.Coredao.createInstance;
        case 'coreum':
            return coins_1.Coreum.createInstance;
        case 'cronos':
            return coins_1.Cronos.createInstance;
        case 'cspr':
            return coins_1.Cspr.createInstance;
        case 'dash':
            return coins_1.Dash.createInstance;
        case 'doge':
            return coins_1.Doge.createInstance;
        case 'dot':
            return coins_1.Dot.createInstance;
        case 'eos':
            return coins_1.Eos.createInstance;
        case 'etc':
            return coins_1.Etc.createInstance;
        case 'eth':
            return coins_1.Eth.createInstance;
        case 'ethw':
            return coins_1.Ethw.createInstance;
        case 'baseeth':
            return coins_1.EthLikeCoin.createInstance;
        case 'opbnb':
            return coins_1.EthLikeCoin.createInstance;
        case 'fantom':
            return coins_1.EthLikeCoin.createInstance;
        case 'cotieth':
            return coins_1.EthLikeCoin.createInstance;
        case 'tbaseeth':
            return coins_1.TethLikeCoin.createInstance;
        case 'topbnb':
            return coins_1.TethLikeCoin.createInstance;
        case 'tfantom':
            return coins_1.TethLikeCoin.createInstance;
        case 'tcotieth':
            return coins_1.TethLikeCoin.createInstance;
        case 'flr':
            return coins_1.Flr.createInstance;
        case 'flrp':
            return coins_1.Flrp.createInstance;
        case 'gteth':
            return coins_1.Gteth.createInstance;
        case 'hash':
            return coins_1.Hash.createInstance;
        case 'hbar':
            return coins_1.Hbar.createInstance;
        case 'hteth':
            return coins_1.Hteth.createInstance;
        case 'lnbtc':
            return coins_1.Lnbtc.createInstance;
        case 'ltc':
            return coins_1.Ltc.createInstance;
        case 'mon':
            return coins_1.Mon.createInstance;
        case 'icp':
            return coins_1.Icp.createInstance;
        case 'initia':
            return coins_1.Initia.createInstance;
        case 'injective':
            return coins_1.Injective.createInstance;
        case 'iota':
            return coins_1.Iota.createInstance;
        case 'islm':
            return coins_1.Islm.createInstance;
        case 'kaspa':
            return coins_1.Kaspa.createInstance;
        case 'near':
            return sdk_coin_near_1.Near.createInstance;
        case 'oas':
            return coins_1.Oas.createInstance;
        case 'ofc':
            return coins_1.Ofc.createInstance;
        case 'opeth':
            return coins_1.Opeth.createInstance;
        case 'osmo':
            return coins_1.Osmo.createInstance;
        case 'pearl':
            return sdk_coin_pearl_1.Pearl.createInstance;
        case 'polygon':
            return coins_1.Polygon.createInstance;
        case 'polyx':
            return coins_1.Polyx.createInstance;
        case 'rbtc':
            return coins_1.Rbtc.createInstance;
        case 'thorchain:rune':
            return coins_1.Rune.createInstance;
        case 'sei':
            return coins_1.Sei.createInstance;
        case 'sepeth':
            return coins_1.Sepeth.createInstance;
        case 'sgb':
            return coins_1.Sgb.createInstance;
        case 'sol':
            return coins_1.Sol.createInstance;
        case 'soneium':
            return coins_1.Soneium.createInstance;
        case 'starknet':
            return coins_1.Starknet.createInstance;
        case 'stx':
            return coins_1.Stx.createInstance;
        case 'sui':
            return coins_1.Sui.createInstance;
        case 'susd':
            return coins_1.Susd.createInstance;
        case 'tao':
            return coins_1.Tao.createInstance;
        case 'tempo':
            return coins_1.Tempo.createInstance;
        case 'tia':
            return coins_1.Tia.createInstance;
        case 'ton':
            return coins_1.Ton.createInstance;
        case 'talgo':
            return coins_1.Talgo.createInstance;
        case 'tapechain':
            return coins_1.Tapechain.createInstance;
        case 'tapt':
            return coins_1.Tapt.createInstance;
        case 'tarbeth':
            return coins_1.Tarbeth.createInstance;
        case 'tada':
            return coins_1.Tada.createInstance;
        case 'tasi':
            return coins_1.Tasi.createInstance;
        case 'tatom':
            return coins_1.Tatom.createInstance;
        case 'tavaxc':
            return coins_1.TavaxC.createInstance;
        case 'tavaxp':
            return coins_1.TavaxP.createInstance;
        case 'tbaby':
            return coins_1.Tbaby.createInstance;
        case 'tbch':
            return coins_1.Tbch.createInstance;
        case 'tbcha':
            return sdk_coin_bcha_1.Tbcha.createInstance;
        case 'tbera':
            return coins_1.Tbera.createInstance;
        case 'tbld':
            return coins_1.Tbld.createInstance;
        case 'tbsc':
            return coins_1.Tbsc.createInstance;
        case 'tbsv':
            return coins_1.Tbsv.createInstance;
        case 'tbtc':
            return coins_1.Tbtc.createInstance;
        case 'tbtcsig':
            return coins_1.Tbtcsig.createInstance;
        case 'tbtc4':
            return coins_1.Tbtc4.createInstance;
        case 'tbtcbgsig':
            return coins_1.Tbtcbgsig.createInstance;
        case 'tcanton':
            return coins_1.Tcanton.createInstance;
        case 'tcelo':
            return coins_1.Tcelo.createInstance;
        case 'tcoredao':
            return coins_1.Tcoredao.createInstance;
        case 'tcoreum':
            return coins_1.Tcoreum.createInstance;
        case 'tcronos':
            return coins_1.Tcronos.createInstance;
        case 'tcspr':
            return coins_1.Tcspr.createInstance;
        case 'tdash':
            return coins_1.Tdash.createInstance;
        case 'tdoge':
            return coins_1.Tdoge.createInstance;
        case 'tdot':
            return coins_1.Tdot.createInstance;
        case 'teos':
            return coins_1.Teos.createInstance;
        case 'tetc':
            return coins_1.Tetc.createInstance;
        case 'teth':
            return coins_1.Teth.createInstance;
        case 'tflr':
            return coins_1.Tflr.createInstance;
        case 'tflrp':
            return coins_1.Flrp.createInstance;
        case 'tmon':
            return coins_1.Tmon.createInstance;
        case 'thash':
            return coins_1.Thash.createInstance;
        case 'thbar':
            return coins_1.Thbar.createInstance;
        case 'ticp':
            return coins_1.Ticp.createInstance;
        case 'tinitia':
            return coins_1.Tinitia.createInstance;
        case 'tinjective':
            return coins_1.Tinjective.createInstance;
        case 'tiota':
            return coins_1.Iota.createInstance;
        case 'tislm':
            return coins_1.Tislm.createInstance;
        case 'tkaspa':
            return coins_1.Kaspa.createInstance;
        case 'tlnbtc':
            return coins_1.Tlnbtc.createInstance;
        case 'tltc':
            return coins_1.Tltc.createInstance;
        case 'tnear':
            return sdk_coin_near_1.TNear.createInstance;
        case 'toas':
            return coins_1.Toas.createInstance;
        case 'topeth':
            return coins_1.Topeth.createInstance;
        case 'tosmo':
            return coins_1.Tosmo.createInstance;
        case 'tpearl':
            return sdk_coin_pearl_1.Tpearl.createInstance;
        case 'tpolygon':
            return coins_1.Tpolygon.createInstance;
        case 'tpolyx':
            return coins_1.Tpolyx.createInstance;
        case 'trbtc':
            return coins_1.Trbtc.createInstance;
        case 'tsgb':
            return coins_1.Tsgb.createInstance;
        case 'tthorchain:rune':
            return coins_1.Trune.createInstance;
        case 'trx':
            return coins_1.Trx.createInstance;
        case 'tsei':
            return coins_1.Tsei.createInstance;
        case 'tsol':
            return coins_1.Tsol.createInstance;
        case 'tsoneium':
            return coins_1.Tsoneium.createInstance;
        case 'tstarknet':
            return coins_1.Starknet.createInstance;
        case 'tstx':
            return coins_1.Tstx.createInstance;
        case 'tstt':
            return coins_1.Tstt.createInstance;
        case 'tsui':
            return coins_1.Tsui.createInstance;
        case 'tsusd':
            return coins_1.Tsusd.createInstance;
        case 'ttao':
            return coins_1.Ttao.createInstance;
        case 'ttempo':
            return coins_1.Ttempo.createInstance;
        case 'ttia':
            return coins_1.Ttia.createInstance;
        case 'tton':
            return coins_1.Tton.createInstance;
        case 'ttrx':
            return coins_1.Ttrx.createInstance;
        case 'tvet':
            return coins_1.Tvet.createInstance;
        case 'txdc':
            return coins_1.Txdc.createInstance;
        case 'txlm':
            return coins_1.Txlm.createInstance;
        case 'txrp':
            return coins_1.Txrp.createInstance;
        case 'txtz':
            return coins_1.Txtz.createInstance;
        case 'tzec':
            return coins_1.Tzec.createInstance;
        case 'tzeta':
            return coins_1.Tzeta.createInstance;
        case 'tzketh':
            return coins_1.Tzketh.createInstance;
        case 'twemix':
            return coins_1.Twemix.createInstance;
        case 'tworld':
            return coins_1.Tworld.createInstance;
        case 'vet':
            return coins_1.Vet.createInstance;
        case 'xdc':
            return coins_1.Xdc.createInstance;
        case 'xlm':
            return coins_1.Xlm.createInstance;
        case 'xrp':
            return coins_1.Xrp.createInstance;
        case 'xtz':
            return coins_1.Xtz.createInstance;
        case 'wemix':
            return coins_1.Wemix.createInstance;
        case 'world':
            return coins_1.World.createInstance;
        case 'zec':
            return coins_1.Zec.createInstance;
        case 'zeta':
            return coins_1.Zeta.createInstance;
        case 'zketh':
            return coins_1.Zketh.createInstance;
        default: {
            const fiatConfig = coins_1.allFiatCoins.find((c) => c.chain === coinName);
            if (fiatConfig) {
                return coins_1.Fiat.createConstructor(fiatConfig);
            }
            return undefined;
        }
    }
}
function getTokenConstructor(tokenConfig) {
    const coin = statics_1.coins.get(tokenConfig.coin);
    if ('network' in tokenConfig &&
        tokenConfig.network === 'Mainnet' &&
        coin?.features.includes(statics_1.CoinFeature.SUPPORTS_ERC20)) {
        return sdk_coin_evm_1.EthLikeErc20Token.createTokenConstructor(tokenConfig, {
            Mainnet: tokenConfig.coin,
            Testnet: `t${tokenConfig.coin}`,
        });
    }
    if ('network' in tokenConfig &&
        tokenConfig.network === 'Mainnet' &&
        coin?.features.includes(statics_1.CoinFeature.SUPPORTS_ERC721)) {
        return sdk_coin_evm_1.EthLikeErc721Token.createTokenConstructor(tokenConfig, {
            Mainnet: tokenConfig.coin,
            Testnet: `t${tokenConfig.coin}`,
        });
    }
    switch (tokenConfig.coin) {
        case 'eth':
        case 'hteth': {
            const staticCoin = statics_1.coins.get(tokenConfig.type);
            if (staticCoin instanceof statics_1.Erc7984Coin) {
                return coins_1.Erc7984Token.createTokenConstructor(tokenConfig);
            }
            else if (tokenConfig.type.includes('erc721')) {
                return coins_1.Erc721Token.createTokenConstructor(tokenConfig);
            }
            else {
                return coins_1.Erc20Token.createTokenConstructor(tokenConfig);
            }
        }
        case 'xlm':
        case 'txlm':
            return coins_1.StellarToken.createTokenConstructor(tokenConfig);
        case 'ofc':
            return coins_1.OfcToken.createTokenConstructor(tokenConfig);
        case 'celo':
        case 'tcelo':
            return coins_1.CeloToken.createTokenConstructor(tokenConfig);
        case 'bsc':
        case 'tbsc':
            return coins_1.BscToken.createTokenConstructor(tokenConfig);
        case 'eos':
        case 'teos':
            return coins_1.EosToken.createTokenConstructor(tokenConfig);
        case 'algo':
        case 'talgo':
            return sdk_coin_algo_1.AlgoToken.createTokenConstructor(tokenConfig);
        case 'avaxc':
        case 'tavaxc':
            return coins_1.AvaxCToken.createTokenConstructor(tokenConfig);
        case 'polygon':
        case 'tpolygon':
            return coins_1.PolygonToken.createTokenConstructor(tokenConfig);
        case 'soneium':
        case 'tsoneium':
            return coins_1.SoneiumToken.createTokenConstructor(tokenConfig);
        case 'arbeth':
        case 'tarbeth':
            return coins_1.ArbethToken.createTokenConstructor(tokenConfig);
        case 'opeth':
        case 'topeth':
            return coins_1.OpethToken.createTokenConstructor(tokenConfig);
        case 'zketh':
        case 'tzketh':
            return coins_1.ZkethToken.createTokenConstructor(tokenConfig);
        case 'bera':
        case 'tbera':
            return coins_1.BeraToken.createTokenConstructor(tokenConfig);
        case 'baseeth':
        case 'tbaseeth':
            const coinNames = { Mainnet: 'baseeth', Testnet: 'tbaseeth' };
            return sdk_coin_evm_1.EthLikeErc20Token.createTokenConstructor(tokenConfig, coinNames);
        case 'opbnb':
        case 'topbnb':
            const opbnbCoinNames = { Mainnet: 'opbnb', Testnet: 'topbnb' };
            return sdk_coin_evm_1.EthLikeErc20Token.createTokenConstructor(tokenConfig, opbnbCoinNames);
        case 'coredao':
        case 'tcoredao':
            return coins_1.CoredaoToken.createTokenConstructor(tokenConfig);
        case 'world':
        case 'tworld':
            return coins_1.WorldToken.createTokenConstructor(tokenConfig);
        case 'sol':
        case 'tsol':
            return sdk_coin_sol_1.SolToken.createTokenConstructor(tokenConfig);
        case 'hbar':
        case 'thbar':
            return sdk_coin_hbar_1.HbarToken.createTokenConstructor(tokenConfig);
        case 'trx':
        case 'ttrx':
            return sdk_coin_trx_1.TrxToken.createTokenConstructor(tokenConfig);
        case 'ada':
        case 'tada':
            return sdk_coin_ada_1.AdaToken.createTokenConstructor(tokenConfig);
        case 'sui':
        case 'tsui':
            return coins_1.SuiToken.createTokenConstructor(tokenConfig);
        case 'tao':
        case 'ttao':
            return coins_1.TaoToken.createTokenConstructor(tokenConfig);
        case 'tempo':
        case 'ttempo':
            return coins_1.Tip20Token.createTokenConstructor(tokenConfig);
        case 'polyx':
        case 'tpolyx':
            return coins_1.PolyxToken.createTokenConstructor(tokenConfig);
        case 'xrp':
        case 'txrp':
            if ('canTransfer' in tokenConfig) {
                return coins_1.XrpMptToken.createTokenConstructor(tokenConfig);
            }
            return coins_1.XrpToken.createTokenConstructor(tokenConfig);
        case 'apt':
        case 'tapt':
            return coins_1.AptToken.createTokenConstructor(tokenConfig);
        case 'flow':
        case 'tflow': {
            const coinNames = { Mainnet: 'flow', Testnet: 'tflow' };
            return sdk_coin_evm_1.EthLikeErc20Token.createTokenConstructor(tokenConfig, coinNames);
        }
        case 'seievm':
        case 'tseievm': {
            const coinNames = { Mainnet: 'seievm', Testnet: 'tseievm' };
            return sdk_coin_evm_1.EthLikeErc20Token.createTokenConstructor(tokenConfig, coinNames);
        }
        case 'lineaeth':
        case 'tlineaeth': {
            const coinNames = { Mainnet: 'lineaeth', Testnet: 'tlineaeth' };
            return sdk_coin_evm_1.EthLikeErc20Token.createTokenConstructor(tokenConfig, coinNames);
        }
        case 'stx':
        case 'tstx':
            return coins_1.Sip10Token.createTokenConstructor(tokenConfig);
        case 'near':
        case 'tnear':
            return sdk_coin_near_1.Nep141Token.createTokenConstructor(tokenConfig);
        case 'vet':
        case 'tvet':
            return coins_1.VetToken.createTokenConstructor(tokenConfig);
        case 'hash':
        case 'thash':
            return coins_1.HashToken.createTokenConstructor(tokenConfig);
        case 'flr':
        case 'tflr':
            return coins_1.FlrToken.createTokenConstructor(tokenConfig);
        case 'ton':
        case 'tton':
            return coins_1.JettonToken.createTokenConstructor(tokenConfig);
        case 'mon':
        case 'tmon':
            return coins_1.MonToken.createTokenConstructor(tokenConfig);
        case 'xdc':
        case 'txdc':
            return coins_1.XdcToken.createTokenConstructor(tokenConfig);
        case 'canton':
        case 'tcanton':
            return sdk_coin_canton_1.CantonToken.createTokenConstructor(tokenConfig);
        default:
            return undefined;
    }
}
exports.GlobalCoinFactory = new sdk_core_1.CoinFactory();
registerCoinConstructors(exports.GlobalCoinFactory);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29pbkZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdjIvY29pbkZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBK09BLDREQXdZQztBQUVELGdEQThWQztBQUVELGtEQXVLQztBQWhvQ0Q7O0dBRUc7QUFDSCxzREFBK0M7QUFDL0Msd0RBQWlEO0FBQ2pELDREQUFxRDtBQUNyRCx3REFBbUQ7QUFDbkQsMERBQXNEO0FBQ3RELHdEQUFpRDtBQUNqRCx3REFBZ0U7QUFDaEUsc0RBQStDO0FBQy9DLHNEQUErQztBQUMvQyw4Q0FBK0Q7QUFDL0Qsc0RBQTRFO0FBRTVFLDRDQWlDd0I7QUFDeEIsbUNBNExpQjtBQUVqQixTQUFnQix3QkFBd0IsQ0FBQyxXQUF3QixFQUFFLFVBQW1CLGVBQUs7SUFDekYsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsV0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2hELFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFlBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNsRCxXQUFXLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxnQkFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzFELFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNoRCxXQUFXLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxjQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDdEQsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsV0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2hELFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFlBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNsRCxXQUFXLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxhQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDcEQsV0FBVyxDQUFDLFFBQVEs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Q0FBQyxNQUFNLEVBQUUsWUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2xELFdBQVcsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLGdCQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDMUQsV0FBVyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsZ0JBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMzRCxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxZQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDbEQsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsWUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2xELFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFlBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNsRCxXQUFXLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxhQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDcEQsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsWUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2xELFdBQVcsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLGNBQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN0RCxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxZQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDbEQsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsWUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2xELFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFlBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNsRCxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxZQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDbEQsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsWUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2xELFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFlBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNsRCxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxZQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDbEQsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsWUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2xELFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFlBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNsRCxXQUFXLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxhQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDcEQsV0FBVyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsY0FBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3RELFdBQVcsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLGNBQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN0RCxXQUFXLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxjQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDdEQsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsV0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2hELFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNoRCxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxXQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDaEQsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsV0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2hELFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNoRCxXQUFXLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxhQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDcEQsV0FBVyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsYUFBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3BELFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNoRCxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxZQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDbEQsV0FBVyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsYUFBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRXBELGVBQUs7U0FDRixNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLHFCQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDcEUsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDaEIsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGVBQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMxRCxDQUFDLENBQUMsQ0FBQztJQUVMLGVBQUs7U0FDRixNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLHFCQUFXLENBQUMsaUJBQWlCLENBQUMsQ0FBQztTQUN2RSxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUNoQixXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsd0JBQWdCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDbkUsQ0FBQyxDQUFDLENBQUM7SUFFTCxNQUFNLE1BQU0sR0FBRyxJQUFBLDRCQUFrQixFQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRTNDLGtCQUFVLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUN0RyxDQUFDLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUU7UUFDNUIsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDOUMsQ0FBQyxDQUNGLENBQUM7SUFFRixtQkFBVyxDQUFDLHVCQUF1QixDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FDbkcsQ0FBQyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFO1FBQzVCLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzlDLENBQUMsQ0FDRixDQUFDO0lBRUYsb0JBQVksQ0FBQyx1QkFBdUIsQ0FBQztRQUNuQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQjtRQUN4QyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQjtLQUN6QyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRTtRQUN2QyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztJQUM5QyxDQUFDLENBQUMsQ0FBQztJQUVILG9CQUFZLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUN4RyxDQUFDLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUU7UUFDNUIsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDOUMsQ0FBQyxDQUNGLENBQUM7SUFFRixLQUFLLE1BQU0sUUFBUSxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ3BGLE1BQU0sZ0JBQWdCLEdBQUcsZ0JBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuRSxXQUFXLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsaUJBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQ3ZHLENBQUMsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRTtRQUM1QixXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztJQUM5QyxDQUFDLENBQ0YsQ0FBQztJQUVGLGdCQUFRLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFO1FBQ3ZFLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzlDLENBQUMsQ0FBQyxDQUFDO0lBRUgsZ0JBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQ3BHLENBQUMsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRTtRQUM1QixXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztJQUM5QyxDQUFDLENBQ0YsQ0FBQztJQUVGLHlCQUFTLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUN2RyxDQUFDLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUU7UUFDNUIsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDOUMsQ0FBQyxDQUNGLENBQUM7SUFFRixrQkFBVSxDQUFDLHVCQUF1QixFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRTtRQUN6RSxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztJQUM5QyxDQUFDLENBQUMsQ0FBQztJQUVILG9CQUFZLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFO1FBQzNFLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzlDLENBQUMsQ0FBQyxDQUFDO0lBRUgsb0JBQVksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUU7UUFDM0UsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDOUMsQ0FBQyxDQUFDLENBQUM7SUFFSCxtQkFBVyxDQUFDLHVCQUF1QixFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRTtRQUMxRSxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztJQUM5QyxDQUFDLENBQUMsQ0FBQztJQUVILGtCQUFVLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFO1FBQ3pFLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzlDLENBQUMsQ0FBQyxDQUFDO0lBRUgsa0JBQVUsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUU7UUFDekUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDOUMsQ0FBQyxDQUFDLENBQUM7SUFFSCxpQkFBUyxDQUFDLHVCQUF1QixFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRTtRQUN4RSxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztJQUM5QyxDQUFDLENBQUMsQ0FBQztJQUVILG9CQUFZLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFO1FBQzNFLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzlDLENBQUMsQ0FBQyxDQUFDO0lBRUgsa0JBQVUsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUU7UUFDekUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDOUMsQ0FBQyxDQUFDLENBQUM7SUFFSCx1QkFBUSxDQUFDLHVCQUF1QixDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FDcEcsQ0FBQyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFO1FBQzVCLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzlDLENBQUMsQ0FDRixDQUFDO0lBRUYsNkJBQVcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQzdHLENBQUMsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRTtRQUM1QixXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztJQUM5QyxDQUFDLENBQ0YsQ0FBQztJQUVGLHlCQUFTLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUN2RyxDQUFDLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUU7UUFDNUIsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDOUMsQ0FBQyxDQUNGLENBQUM7SUFFRix1QkFBUSxDQUFDLHVCQUF1QixDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FDcEcsQ0FBQyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFO1FBQzVCLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzlDLENBQUMsQ0FDRixDQUFDO0lBRUYsdUJBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQ3BHLENBQUMsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUMzRSxDQUFDO0lBRUYsZ0JBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQ3BHLENBQUMsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUMzRSxDQUFDO0lBRUYsZ0JBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQ3BHLENBQUMsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUMzRSxDQUFDO0lBRUYsa0JBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQzFHLENBQUMsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUMzRSxDQUFDO0lBRUYsa0JBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQzFHLENBQUMsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUMzRSxDQUFDO0lBRUYsZ0JBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQ3BHLENBQUMsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUMzRSxDQUFDO0lBRUYsbUJBQVcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQzdHLENBQUMsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUMzRSxDQUFDO0lBRUYsZ0JBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQ3BHLENBQUMsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUMzRSxDQUFDO0lBRUYsa0JBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQ3RHLENBQUMsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUMzRSxDQUFDO0lBRUYsMkJBQVcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQ3pHLENBQUMsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUMzRSxDQUFDO0lBRUYsaUJBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQzNHLENBQUMsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUMzRSxDQUFDO0lBRUYsbUJBQVcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQ3ZHLENBQUMsRUFBRSxJQUFJLEVBQUUs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WUFDVixPQUFPLDJCQUFXLENBQUMsc0JBQXNCLENBQUMsV0FBZ0MsQ0FBQyxDQUFDO1FBQzlFLEtBQUssS0FBSyxDQUFDO1FBQ1gsS0FBSyxNQUFNO1lBQ1QsT0FBTyxnQkFBUSxDQUFDLHNCQUFzQixDQUFDLFdBQTZCLENBQUMsQ0FBQztRQUN4RSxLQUFLLE1BQU0sQ0FBQztRQUNaLEtBQUssT0FBTztZQUNWLE9BQU8saUJBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxXQUFnQyxDQUFDLENBQUM7UUFDNUUsS0FBSyxLQUFLLENBQUM7UUFDWCxLQUFLLE1BQU07WUFDVCxPQUFPLGdCQUFRLENBQUMsc0JBQXNCLENBQUMsV0FBaUMsQ0FBQyxDQUFDO1FBQzVFLEtBQUssS0FBSyxDQUFDO1FBQ1gsS0FBSyxNQUFNO1lBQ1QsT0FBTyxtQkFBVyxDQUFDLHNCQUFzQixDQUFDLFdBQWdDLENBQUMsQ0FBQztRQUM5RSxLQUFLLEtBQUssQ0FBQztRQUNYLEtBQUssTUFBTTtZQUNULE9BQU8sZ0JBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxXQUFpQyxDQUFDLENBQUM7UUFDNUUsS0FBSyxLQUFLLENBQUM7UUFDWCxLQUFLLE1BQU07WUFDVCxPQUFPLGdCQUFRLENBQUMsc0JBQXNCLENBQUMsV0FBaUMsQ0FBQyxDQUFDO1FBQzVFLEtBQUssUUFBUSxDQUFDO1FBQ2QsS0FBSyxTQUFTO1lBQ1osT0FBTyw2QkFBVyxDQUFDLHNCQUFzQixDQUFDLFdBQWdDLENBQUMsQ0FBQztRQUM5RTtZQUNFLE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7QUFDSCxDQUFDO0FBRVksUUFBQSxpQkFBaUIsR0FBZ0IsSUFBSSxzQkFBVyxFQUFFLENBQUM7QUFFaEUsd0JBQXdCLENBQUMseUJBQWlCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cbmltcG9ydCB7IEFkYVRva2VuIH0gZnJvbSAnQGJpdGdvL3Nkay1jb2luLWFkYSc7XG5pbXBvcnQgeyBBbGdvVG9rZW4gfSBmcm9tICdAYml0Z28vc2RrLWNvaW4tYWxnbyc7XG5pbXBvcnQgeyBDYW50b25Ub2tlbiB9IGZyb20gJ0BiaXRnby9zZGstY29pbi1jYW50b24nO1xuaW1wb3J0IHsgQmNoYSwgVGJjaGEgfSBmcm9tICdAYml0Z28vc2RrLWNvaW4tYmNoYSc7XG5pbXBvcnQgeyBQZWFybCwgVHBlYXJsIH0gZnJvbSAnQGJpdGdvL3Nkay1jb2luLXBlYXJsJztcbmltcG9ydCB7IEhiYXJUb2tlbiB9IGZyb20gJ0BiaXRnby9zZGstY29pbi1oYmFyJztcbmltcG9ydCB7IE5lYXIsIFROZWFyLCBOZXAxNDFUb2tlbiB9IGZyb20gJ0BiaXRnby9zZGstY29pbi1uZWFyJztcbmltcG9ydCB7IFNvbFRva2VuIH0gZnJvbSAnQGJpdGdvL3Nkay1jb2luLXNvbCc7XG5pbXBvcnQgeyBUcnhUb2tlbiB9IGZyb20gJ0BiaXRnby9zZGstY29pbi10cngnO1xuaW1wb3J0IHsgQ29pbkZhY3RvcnksIENvaW5Db25zdHJ1Y3RvciB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBFdGhMaWtlRXJjMjBUb2tlbiwgRXRoTGlrZUVyYzcyMVRva2VuIH0gZnJvbSAnQGJpdGdvL3Nkay1jb2luLWV2bSc7XG5cbmltcG9ydCB7XG4gIENvaW5NYXAsXG4gIGNvaW5zLFxuICBnZXRGb3JtYXR0ZWRUb2tlbnMsXG4gIFRva2VuQ29uZmlnLFxuICBFcmMyMFRva2VuQ29uZmlnLFxuICBTdGVsbGFyVG9rZW5Db25maWcsXG4gIE9mY1Rva2VuQ29uZmlnLFxuICBDZWxvVG9rZW5Db25maWcsXG4gIEV0aExpa2VUb2tlbkNvbmZpZyxcbiAgRW9zVG9rZW5Db25maWcsXG4gIEF2YXhjVG9rZW5Db25maWcsXG4gIFNvbFRva2VuQ29uZmlnLFxuICBIYmFyVG9rZW5Db25maWcsXG4gIEFkYVRva2VuQ29uZmlnLFxuICBBbGdvVG9rZW5Db25maWcsXG4gIFRyeFRva2VuQ29uZmlnLFxuICBYcnBNcHRUb2tlbkNvbmZpZyxcbiAgWHJwVG9rZW5Db25maWcsXG4gIFN1aVRva2VuQ29uZmlnLFxuICBBcHRUb2tlbkNvbmZpZyxcbiAgU2lwMTBUb2tlbkNvbmZpZyxcbiAgQ29pbkZlYXR1cmUsXG4gIE5lcDE0MVRva2VuQ29uZmlnLFxuICBDb3Ntb3NUb2tlbkNvbmZpZyxcbiAgVmV0VG9rZW5Db25maWcsXG4gIFRhb1Rva2VuQ29uZmlnLFxuICBUaXAyMFRva2VuQ29uZmlnLFxuICBQb2x5eFRva2VuQ29uZmlnLFxuICBKZXR0b25Ub2tlbkNvbmZpZyxcbiAgQ2FudG9uVG9rZW5Db25maWcsXG4gIEVyYzc5ODRUb2tlbkNvbmZpZyxcbiAgRXJjNzk4NENvaW4sXG59IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7XG4gIEFkYSxcbiAgQWxnbyxcbiAgQXBlY2hhaW4sXG4gIEFwdCxcbiAgQXB0VG9rZW4sXG4gIEFyYmV0aCxcbiAgQXJiZXRoVG9rZW4sXG4gIEFzaSxcbiAgQXRvbSxcbiAgQXZheEMsXG4gIEF2YXhDVG9rZW4sXG4gIEF2YXhQLFxuICBCYWJ5LFxuICBCY2gsXG4gIEJlcmEsXG4gIEJlcmFUb2tlbixcbiAgQmxkLFxuICBCc2MsXG4gIEJzY1Rva2VuLFxuICBCc3YsXG4gIEJ0YyxcbiAgQnRnLFxuICBDYW50b24sXG4gIENlbG8sXG4gIENlbG9Ub2tlbixcbiAgQ29yZWRhbyxcbiAgQ29yZWRhb1Rva2VuLFxuICBDb3Ntb3NTaGFyZWRDb2luLFxuICBDb3JldW0sXG4gIENyb25vcyxcbiAgQ3NwcixcbiAgRGFzaCxcbiAgRG9nZSxcbiAgRG90LFxuICBFb3MsXG4gIEVvc1Rva2VuLFxuICBFcmMyMFRva2VuLFxuICBFcmM3MjFUb2tlbixcbiAgRXJjNzk4NFRva2VuLFxuICBFdGMsXG4gIEV0aCxcbiAgRXRodyxcbiAgRXRoTGlrZUNvaW4sXG4gIEV2bUNvaW4sXG4gIEZscixcbiAgRmxycCxcbiAgRmxyVG9rZW4sXG4gIEhhc2hUb2tlbixcbiAgTW9uVG9rZW4sXG4gIFRldGhMaWtlQ29pbixcbiAgRmlhdCxcbiAgYWxsRmlhdENvaW5zLFxuICBHdGV0aCxcbiAgSGFzaCxcbiAgSGJhcixcbiAgSHRldGgsXG4gIEljcCxcbiAgSW5pdGlhLFxuICBJbmplY3RpdmUsXG4gIElvdGEsXG4gIElzbG0sXG4gIEpldHRvblRva2VuLFxuICBLYXNwYSxcbiAgTG5idGMsXG4gIEx0YyxcbiAgTW9uLFxuICBPZmMsXG4gIE9hcyxcbiAgT2ZjVG9rZW4sXG4gIE9wZXRoLFxuICBPcGV0aFRva2VuLFxuICBPc21vLFxuICBQb2x5Z29uLFxuICBQb2x5Z29uVG9rZW4sXG4gIFBvbHl4LFxuICBQb2x5eFRva2VuLFxuICBSdW5lLFxuICBSYnRjLFxuICBTZWksXG4gIFNlcGV0aCxcbiAgU2diLFxuICBTaXAxMFRva2VuLFxuICBTb2wsXG4gIFNvbmVpdW0sXG4gIFNvbmVpdW1Ub2tlbixcbiAgU3RhcmtuZXQsXG4gIFN0ZWxsYXJUb2tlbixcbiAgU3R4LFxuICBTdWksXG4gIFN1aVRva2VuLFxuICBTdXNkLFxuICBUYW8sXG4gIFRhb1Rva2VuLFxuICBUZW1wbyxcbiAgVGlwMjBUb2tlbixcbiAgVG9uLFxuICBUYWRhLFxuICBUYWxnbyxcbiAgVGFwZWNoYWluLFxuICBUYXB0LFxuICBUYXJiZXRoLFxuICBUYXNpLFxuICBUYXRvbSxcbiAgVGF2YXhDLFxuICBUYXZheFAsXG4gIFRiYWJ5LFxuICBUYmNoLFxuICBUYmVyYSxcbiAgVGJsZCxcbiAgVGJzYyxcbiAgVGJzdixcbiAgVGJ0YyxcbiAgVGJ0Y3NpZyxcbiAgVGJ0YzQsXG4gIFRidGNiZ3NpZyxcbiAgVGJ0Y3N0eCxcbiAgVGJ0Y3N0eHByaXZhdGUxLFxuICBUY2FudG9uLFxuICBUY2VsbyxcbiAgVGNvcmVkYW8sXG4gIFRjb3JldW0sXG4gIFRjcm9ub3MsXG4gIFRjc3ByLFxuICBUZGFzaCxcbiAgVGRvZ2UsXG4gIFRkb3QsXG4gIFRlb3MsXG4gIFRldGMsXG4gIFRldGgsXG4gIFRmbHIsXG4gIFRtb24sXG4gIFRoYXNoLFxuICBUaGJhcixcbiAgVGlhLFxuICBUaWNwLFxuICBUaW5pdGlhLFxuICBUaW5qZWN0aXZlLFxuICBUaXNsbSxcbiAgVGxuYnRjLFxuICBUbHRjLFxuICBUb2FzLFxuICBUb3NtbyxcbiAgVG9wZXRoLFxuICBUcG9seWdvbixcbiAgVHBvbHl4LFxuICBUcmJ0YyxcbiAgVHJ1bmUsXG4gIFRyeCxcbiAgVHNnYixcbiAgVHNlaSxcbiAgVHNvbCxcbiAgVHNvbmVpdW0sXG4gIFRzdHgsXG4gIFRzdHQsXG4gIFRzdWksXG4gIFRzdXNkLFxuICBUd2VtaXgsXG4gIFR3b3JsZCxcbiAgVHRhbyxcbiAgVHRlbXBvLFxuICBUdGlhLFxuICBUdG9uLFxuICBUdHJ4LFxuICBUdmV0LFxuICBUeGxtLFxuICBUeGRjLFxuICBUeHJwLFxuICBUeHR6LFxuICBUemVjLFxuICBUemV0YSxcbiAgVHprZXRoLFxuICBWZXQsXG4gIFdlbWl4LFxuICBXb3JsZCxcbiAgV29ybGRUb2tlbixcbiAgWGRjLFxuICBYZGNUb2tlbixcbiAgWGxtLFxuICBYcnAsXG4gIFhycE1wdFRva2VuLFxuICBYcnBUb2tlbixcbiAgWHR6LFxuICBaZWMsXG4gIFpldGEsXG4gIFprZXRoLFxuICBaa2V0aFRva2VuLFxuICBWZXRUb2tlbixcbn0gZnJvbSAnLi9jb2lucyc7XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckNvaW5Db25zdHJ1Y3RvcnMoY29pbkZhY3Rvcnk6IENvaW5GYWN0b3J5LCBjb2luTWFwOiBDb2luTWFwID0gY29pbnMpOiB2b2lkIHtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ2FkYScsIEFkYS5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdhbGdvJywgQWxnby5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdhcGVjaGFpbicsIEFwZWNoYWluLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ2FwdCcsIEFwdC5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdhcmJldGgnLCBBcmJldGguY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcignYXNpJywgQXNpLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ2F0b20nLCBBdG9tLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ2F2YXhjJywgQXZheEMuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcignYXZheHAnLCBBdmF4UC5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdiYWJ5JywgQmFieS5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdiY2gnLCBCY2guY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcignYmNoYScsIEJjaGEuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcignYmVyYScsIEJlcmEuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcignYmxkJywgQmxkLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ2JzYycsIEJzYy5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdic3YnLCBCc3YuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcignYnRjJywgQnRjLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ2J0ZycsIEJ0Zy5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdjYW50b24nLCBDYW50b24uY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcignY2VsbycsIENlbG8uY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcignY29yZWRhbycsIENvcmVkYW8uY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcignY29yZXVtJywgQ29yZXVtLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ2Nyb25vcycsIENyb25vcy5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdjc3ByJywgQ3Nwci5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdkYXNoJywgRGFzaC5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdkb2dlJywgRG9nZS5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdkb3QnLCBEb3QuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcignZW9zJywgRW9zLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ2V0YycsIEV0Yy5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdldGgnLCBFdGguY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcignZXRodycsIEV0aHcuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcignYmFzZWV0aCcsIEV0aExpa2VDb2luLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ29wYm5iJywgRXRoTGlrZUNvaW4uY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcignZmFudG9tJywgRXRoTGlrZUNvaW4uY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcignY290aWV0aCcsIEV0aExpa2VDb2luLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ29nJywgRXRoTGlrZUNvaW4uY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndG9nJywgRXRoTGlrZUNvaW4uY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndG9wYm5iJywgVGV0aExpa2VDb2luLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RmYW50b20nLCBUZXRoTGlrZUNvaW4uY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndGNvdGlldGgnLCBUZXRoTGlrZUNvaW4uY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndGJhc2VldGgnLCBUZXRoTGlrZUNvaW4uY3JlYXRlSW5zdGFuY2UpO1xuICBmb3IgKGNvbnN0IGZpYXRDb2luIG9mIGFsbEZpYXRDb2lucykge1xuICAgIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKGZpYXRDb2luLmNoYWluLCBGaWF0LmNyZWF0ZUNvbnN0cnVjdG9yKGZpYXRDb2luKSk7XG4gIH1cbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ2ZscicsIEZsci5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdmbHJwJywgRmxycC5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdndGV0aCcsIEd0ZXRoLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ2hhc2gnLCBIYXNoLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ2hiYXInLCBIYmFyLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ2h0ZXRoJywgSHRldGguY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcignbG5idGMnLCBMbmJ0Yy5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdsdGMnLCBMdGMuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcignbW9uJywgTW9uLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ2ljcCcsIEljcC5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdpbml0aWEnLCBJbml0aWEuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcignaW5qZWN0aXZlJywgSW5qZWN0aXZlLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ2lvdGEnLCBJb3RhLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ2lzbG0nLCBJc2xtLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ2thc3BhJywgS2FzcGEuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcignbmVhcicsIE5lYXIuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3Rlcignb2FzJywgT2FzLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ29mYycsIE9mYy5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdvcGV0aCcsIE9wZXRoLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ29zbW8nLCBPc21vLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3BlYXJsJywgUGVhcmwuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigncG9seWdvbicsIFBvbHlnb24uY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigncG9seXgnLCBQb2x5eC5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdyYnRjJywgUmJ0Yy5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0aG9yY2hhaW46cnVuZScsIFJ1bmUuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3Rlcignc2VpJywgU2VpLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3NlcGV0aCcsIFNlcGV0aC5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdzZ2InLCBTZ2IuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3Rlcignc29sJywgU29sLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3NvbmVpdW0nLCBTb25laXVtLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3N0YXJrbmV0JywgU3RhcmtuZXQuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3Rlcignc3R4JywgU3R4LmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3N1aScsIFN1aS5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCdzdXNkJywgU3VzZC5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0YW8nLCBUYW8uY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndGVtcG8nLCBUZW1wby5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0aWEnLCBUaWEuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndG9uJywgVG9uLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RhbGdvJywgVGFsZ28uY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndGFwZWNoYWluJywgVGFwZWNoYWluLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RhcHQnLCBUYXB0LmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RhcmJldGgnLCBUYXJiZXRoLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RhZGEnLCBUYWRhLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3Rhc2knLCBUYXNpLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RhdG9tJywgVGF0b20uY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndGF2YXhjJywgVGF2YXhDLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RhdmF4cCcsIFRhdmF4UC5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0YmFieScsIFRiYWJ5LmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RiY2gnLCBUYmNoLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RiY2hhJywgVGJjaGEuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndGJlcmEnLCBUYmVyYS5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0YmxkJywgVGJsZC5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0YnNjJywgVGJzYy5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0YnN2JywgVGJzdi5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0YnRjJywgVGJ0Yy5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0YnRjc2lnJywgVGJ0Y3NpZy5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0YnRjNCcsIFRidGM0LmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RidGNiZ3NpZycsIFRidGNiZ3NpZy5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0YnRjc3R4JywgVGJ0Y3N0eC5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0YnRjc3R4cHJpdmF0ZTEnLCBUYnRjc3R4cHJpdmF0ZTEuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndGNhbnRvbicsIFRjYW50b24uY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndGNlbG8nLCBUY2Vsby5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0Y29yZWRhbycsIFRjb3JlZGFvLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3Rjb3JldW0nLCBUY29yZXVtLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3Rjcm9ub3MnLCBUY3Jvbm9zLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3Rjc3ByJywgVGNzcHIuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndGRhc2gnLCBUZGFzaC5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0ZG9nZScsIFRkb2dlLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3Rkb3QnLCBUZG90LmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3Rlb3MnLCBUZW9zLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RldGMnLCBUZXRjLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RldGgnLCBUZXRoLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RmbHInLCBUZmxyLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RmbHJwJywgRmxycC5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0bW9uJywgVG1vbi5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0aGFzaCcsIFRoYXNoLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RoYmFyJywgVGhiYXIuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndGljcCcsIFRpY3AuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndGluaXRpYScsIFRpbml0aWEuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndGluamVjdGl2ZScsIFRpbmplY3RpdmUuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndGlvdGEnLCBJb3RhLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3Rpc2xtJywgVGlzbG0uY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndGthc3BhJywgS2FzcGEuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndGxuYnRjJywgVGxuYnRjLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RsdGMnLCBUbHRjLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RuZWFyJywgVE5lYXIuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndG9hcycsIFRvYXMuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndG9wZXRoJywgVG9wZXRoLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3Rvc21vJywgVG9zbW8uY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndHBlYXJsJywgVHBlYXJsLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3Rwb2x5Z29uJywgVHBvbHlnb24uY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndHBvbHl4JywgVHBvbHl4LmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RyYnRjJywgVHJidGMuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndHNnYicsIFRzZ2IuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndHRob3JjaGFpbjpydW5lJywgVHJ1bmUuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndHJ4JywgVHJ4LmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3RzZWknLCBUc2VpLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3Rzb2wnLCBUc29sLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3Rzb25laXVtJywgVHNvbmVpdW0uY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndHN0YXJrbmV0JywgU3RhcmtuZXQuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndHN0eCcsIFRzdHguY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndHN0dCcsIFRzdHQuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndHN1aScsIFRzdWkuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndHN1c2QnLCBUc3VzZC5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0dGFvJywgVHRhby5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0dGVtcG8nLCBUdGVtcG8uY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndHRpYScsIFR0aWEuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndHRvbicsIFR0b24uY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndHRyeCcsIFR0cnguY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndHZldCcsIFR2ZXQuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndHhkYycsIFR4ZGMuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndHhsbScsIFR4bG0uY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndHhycCcsIFR4cnAuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndHh0eicsIFR4dHouY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndHplYycsIFR6ZWMuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndHpldGEnLCBUemV0YS5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd0emtldGgnLCBUemtldGguY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigndHdlbWl4JywgVHdlbWl4LmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3R3b3JsZCcsIFR3b3JsZC5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd2ZXQnLCBWZXQuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigneGRjJywgWGRjLmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3hsbScsIFhsbS5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd4cnAnLCBYcnAuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcigneHR6JywgWHR6LmNyZWF0ZUluc3RhbmNlKTtcbiAgY29pbkZhY3RvcnkucmVnaXN0ZXIoJ3dlbWl4JywgV2VtaXguY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3Rlcignd29ybGQnLCBXb3JsZC5jcmVhdGVJbnN0YW5jZSk7XG4gIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKCd6ZWMnLCBaZWMuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcignemV0YScsIFpldGEuY3JlYXRlSW5zdGFuY2UpO1xuICBjb2luRmFjdG9yeS5yZWdpc3RlcignemtldGgnLCBaa2V0aC5jcmVhdGVJbnN0YW5jZSk7XG5cbiAgY29pbnNcbiAgICAuZmlsdGVyKChjb2luKSA9PiBjb2luLmZlYXR1cmVzLmluY2x1ZGVzKENvaW5GZWF0dXJlLlNIQVJFRF9FVk1fU0RLKSlcbiAgICAuZm9yRWFjaCgoY29pbikgPT4ge1xuICAgICAgY29pbkZhY3RvcnkucmVnaXN0ZXIoY29pbi5uYW1lLCBFdm1Db2luLmNyZWF0ZUluc3RhbmNlKTtcbiAgICB9KTtcblxuICBjb2luc1xuICAgIC5maWx0ZXIoKGNvaW4pID0+IGNvaW4uZmVhdHVyZXMuaW5jbHVkZXMoQ29pbkZlYXR1cmUuU0hBUkVEX0NPU01PU19TREspKVxuICAgIC5mb3JFYWNoKChjb2luKSA9PiB7XG4gICAgICBjb2luRmFjdG9yeS5yZWdpc3Rlcihjb2luLm5hbWUsIENvc21vc1NoYXJlZENvaW4uY3JlYXRlSW5zdGFuY2UpO1xuICAgIH0pO1xuXG4gIGNvbnN0IHRva2VucyA9IGdldEZvcm1hdHRlZFRva2Vucyhjb2luTWFwKTtcblxuICBFcmMyMFRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3JzKFsuLi50b2tlbnMuYml0Y29pbi5ldGgudG9rZW5zLCAuLi50b2tlbnMudGVzdG5ldC5ldGgudG9rZW5zXSkuZm9yRWFjaChcbiAgICAoeyBuYW1lLCBjb2luQ29uc3RydWN0b3IgfSkgPT4ge1xuICAgICAgY29pbkZhY3RvcnkucmVnaXN0ZXIobmFtZSwgY29pbkNvbnN0cnVjdG9yKTtcbiAgICB9XG4gICk7XG5cbiAgRXJjNzIxVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoWy4uLnRva2Vucy5iaXRjb2luLmV0aC5uZnRzLCAuLi50b2tlbnMudGVzdG5ldC5ldGgubmZ0c10pLmZvckVhY2goXG4gICAgKHsgbmFtZSwgY29pbkNvbnN0cnVjdG9yIH0pID0+IHtcbiAgICAgIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKG5hbWUsIGNvaW5Db25zdHJ1Y3Rvcik7XG4gICAgfVxuICApO1xuXG4gIEVyYzc5ODRUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9ycyhbXG4gICAgLi4udG9rZW5zLmJpdGNvaW4uZXRoLmNvbmZpZGVudGlhbFRva2VucyxcbiAgICAuLi50b2tlbnMudGVzdG5ldC5ldGguY29uZmlkZW50aWFsVG9rZW5zLFxuICBdKS5mb3JFYWNoKCh7IG5hbWUsIGNvaW5Db25zdHJ1Y3RvciB9KSA9PiB7XG4gICAgY29pbkZhY3RvcnkucmVnaXN0ZXIobmFtZSwgY29pbkNvbnN0cnVjdG9yKTtcbiAgfSk7XG5cbiAgU3RlbGxhclRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3JzKFsuLi50b2tlbnMuYml0Y29pbi54bG0udG9rZW5zLCAuLi50b2tlbnMudGVzdG5ldC54bG0udG9rZW5zXSkuZm9yRWFjaChcbiAgICAoeyBuYW1lLCBjb2luQ29uc3RydWN0b3IgfSkgPT4ge1xuICAgICAgY29pbkZhY3RvcnkucmVnaXN0ZXIobmFtZSwgY29pbkNvbnN0cnVjdG9yKTtcbiAgICB9XG4gICk7XG5cbiAgZm9yIChjb25zdCBvZmNUb2tlbiBvZiBbLi4udG9rZW5zLmJpdGNvaW4ub2ZjLnRva2VucywgLi4udG9rZW5zLnRlc3RuZXQub2ZjLnRva2Vuc10pIHtcbiAgICBjb25zdCB0b2tlbkNvbnN0cnVjdG9yID0gT2ZjVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcihvZmNUb2tlbik7XG4gICAgY29pbkZhY3RvcnkucmVnaXN0ZXIob2ZjVG9rZW4udHlwZSwgdG9rZW5Db25zdHJ1Y3Rvcik7XG4gIH1cblxuICBDZWxvVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoWy4uLnRva2Vucy5iaXRjb2luLmNlbG8udG9rZW5zLCAuLi50b2tlbnMudGVzdG5ldC5jZWxvLnRva2Vuc10pLmZvckVhY2goXG4gICAgKHsgbmFtZSwgY29pbkNvbnN0cnVjdG9yIH0pID0+IHtcbiAgICAgIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKG5hbWUsIGNvaW5Db25zdHJ1Y3Rvcik7XG4gICAgfVxuICApO1xuXG4gIEJzY1Rva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3JzKCkuZm9yRWFjaCgoeyBuYW1lLCBjb2luQ29uc3RydWN0b3IgfSkgPT4ge1xuICAgIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKG5hbWUsIGNvaW5Db25zdHJ1Y3Rvcik7XG4gIH0pO1xuXG4gIEVvc1Rva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3JzKFsuLi50b2tlbnMuYml0Y29pbi5lb3MudG9rZW5zLCAuLi50b2tlbnMudGVzdG5ldC5lb3MudG9rZW5zXSkuZm9yRWFjaChcbiAgICAoeyBuYW1lLCBjb2luQ29uc3RydWN0b3IgfSkgPT4ge1xuICAgICAgY29pbkZhY3RvcnkucmVnaXN0ZXIobmFtZSwgY29pbkNvbnN0cnVjdG9yKTtcbiAgICB9XG4gICk7XG5cbiAgQWxnb1Rva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3JzKFsuLi50b2tlbnMuYml0Y29pbi5hbGdvLnRva2VucywgLi4udG9rZW5zLnRlc3RuZXQuYWxnby50b2tlbnNdKS5mb3JFYWNoKFxuICAgICh7IG5hbWUsIGNvaW5Db25zdHJ1Y3RvciB9KSA9PiB7XG4gICAgICBjb2luRmFjdG9yeS5yZWdpc3RlcihuYW1lLCBjb2luQ29uc3RydWN0b3IpO1xuICAgIH1cbiAgKTtcblxuICBBdmF4Q1Rva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3JzKCkuZm9yRWFjaCgoeyBuYW1lLCBjb2luQ29uc3RydWN0b3IgfSkgPT4ge1xuICAgIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKG5hbWUsIGNvaW5Db25zdHJ1Y3Rvcik7XG4gIH0pO1xuXG4gIFBvbHlnb25Ub2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9ycygpLmZvckVhY2goKHsgbmFtZSwgY29pbkNvbnN0cnVjdG9yIH0pID0+IHtcbiAgICBjb2luRmFjdG9yeS5yZWdpc3RlcihuYW1lLCBjb2luQ29uc3RydWN0b3IpO1xuICB9KTtcblxuICBTb25laXVtVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoKS5mb3JFYWNoKCh7IG5hbWUsIGNvaW5Db25zdHJ1Y3RvciB9KSA9PiB7XG4gICAgY29pbkZhY3RvcnkucmVnaXN0ZXIobmFtZSwgY29pbkNvbnN0cnVjdG9yKTtcbiAgfSk7XG5cbiAgQXJiZXRoVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoKS5mb3JFYWNoKCh7IG5hbWUsIGNvaW5Db25zdHJ1Y3RvciB9KSA9PiB7XG4gICAgY29pbkZhY3RvcnkucmVnaXN0ZXIobmFtZSwgY29pbkNvbnN0cnVjdG9yKTtcbiAgfSk7XG5cbiAgT3BldGhUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9ycygpLmZvckVhY2goKHsgbmFtZSwgY29pbkNvbnN0cnVjdG9yIH0pID0+IHtcbiAgICBjb2luRmFjdG9yeS5yZWdpc3RlcihuYW1lLCBjb2luQ29uc3RydWN0b3IpO1xuICB9KTtcblxuICBaa2V0aFRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3JzKCkuZm9yRWFjaCgoeyBuYW1lLCBjb2luQ29uc3RydWN0b3IgfSkgPT4ge1xuICAgIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKG5hbWUsIGNvaW5Db25zdHJ1Y3Rvcik7XG4gIH0pO1xuXG4gIEJlcmFUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9ycygpLmZvckVhY2goKHsgbmFtZSwgY29pbkNvbnN0cnVjdG9yIH0pID0+IHtcbiAgICBjb2luRmFjdG9yeS5yZWdpc3RlcihuYW1lLCBjb2luQ29uc3RydWN0b3IpO1xuICB9KTtcblxuICBDb3JlZGFvVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoKS5mb3JFYWNoKCh7IG5hbWUsIGNvaW5Db25zdHJ1Y3RvciB9KSA9PiB7XG4gICAgY29pbkZhY3RvcnkucmVnaXN0ZXIobmFtZSwgY29pbkNvbnN0cnVjdG9yKTtcbiAgfSk7XG5cbiAgV29ybGRUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9ycygpLmZvckVhY2goKHsgbmFtZSwgY29pbkNvbnN0cnVjdG9yIH0pID0+IHtcbiAgICBjb2luRmFjdG9yeS5yZWdpc3RlcihuYW1lLCBjb2luQ29uc3RydWN0b3IpO1xuICB9KTtcblxuICBTb2xUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9ycyhbLi4udG9rZW5zLmJpdGNvaW4uc29sLnRva2VucywgLi4udG9rZW5zLnRlc3RuZXQuc29sLnRva2Vuc10pLmZvckVhY2goXG4gICAgKHsgbmFtZSwgY29pbkNvbnN0cnVjdG9yIH0pID0+IHtcbiAgICAgIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKG5hbWUsIGNvaW5Db25zdHJ1Y3Rvcik7XG4gICAgfVxuICApO1xuXG4gIENhbnRvblRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3JzKFsuLi50b2tlbnMuYml0Y29pbi5jYW50b24udG9rZW5zLCAuLi50b2tlbnMudGVzdG5ldC5jYW50b24udG9rZW5zXSkuZm9yRWFjaChcbiAgICAoeyBuYW1lLCBjb2luQ29uc3RydWN0b3IgfSkgPT4ge1xuICAgICAgY29pbkZhY3RvcnkucmVnaXN0ZXIobmFtZSwgY29pbkNvbnN0cnVjdG9yKTtcbiAgICB9XG4gICk7XG5cbiAgSGJhclRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3JzKFsuLi50b2tlbnMuYml0Y29pbi5oYmFyLnRva2VucywgLi4udG9rZW5zLnRlc3RuZXQuaGJhci50b2tlbnNdKS5mb3JFYWNoKFxuICAgICh7IG5hbWUsIGNvaW5Db25zdHJ1Y3RvciB9KSA9PiB7XG4gICAgICBjb2luRmFjdG9yeS5yZWdpc3RlcihuYW1lLCBjb2luQ29uc3RydWN0b3IpO1xuICAgIH1cbiAgKTtcblxuICBUcnhUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9ycyhbLi4udG9rZW5zLmJpdGNvaW4udHJ4LnRva2VucywgLi4udG9rZW5zLnRlc3RuZXQudHJ4LnRva2Vuc10pLmZvckVhY2goXG4gICAgKHsgbmFtZSwgY29pbkNvbnN0cnVjdG9yIH0pID0+IHtcbiAgICAgIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKG5hbWUsIGNvaW5Db25zdHJ1Y3Rvcik7XG4gICAgfVxuICApO1xuXG4gIEFkYVRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3JzKFsuLi50b2tlbnMuYml0Y29pbi5hZGEudG9rZW5zLCAuLi50b2tlbnMudGVzdG5ldC5hZGEudG9rZW5zXSkuZm9yRWFjaChcbiAgICAoeyBuYW1lLCBjb2luQ29uc3RydWN0b3IgfSkgPT4gY29pbkZhY3RvcnkucmVnaXN0ZXIobmFtZSwgY29pbkNvbnN0cnVjdG9yKVxuICApO1xuXG4gIFN1aVRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3JzKFsuLi50b2tlbnMuYml0Y29pbi5zdWkudG9rZW5zLCAuLi50b2tlbnMudGVzdG5ldC5zdWkudG9rZW5zXSkuZm9yRWFjaChcbiAgICAoeyBuYW1lLCBjb2luQ29uc3RydWN0b3IgfSkgPT4gY29pbkZhY3RvcnkucmVnaXN0ZXIobmFtZSwgY29pbkNvbnN0cnVjdG9yKVxuICApO1xuXG4gIFRhb1Rva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3JzKFsuLi50b2tlbnMuYml0Y29pbi50YW8udG9rZW5zLCAuLi50b2tlbnMudGVzdG5ldC50YW8udG9rZW5zXSkuZm9yRWFjaChcbiAgICAoeyBuYW1lLCBjb2luQ29uc3RydWN0b3IgfSkgPT4gY29pbkZhY3RvcnkucmVnaXN0ZXIobmFtZSwgY29pbkNvbnN0cnVjdG9yKVxuICApO1xuXG4gIFRpcDIwVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoWy4uLnRva2Vucy5iaXRjb2luLnRlbXBvLnRva2VucywgLi4udG9rZW5zLnRlc3RuZXQudGVtcG8udG9rZW5zXSkuZm9yRWFjaChcbiAgICAoeyBuYW1lLCBjb2luQ29uc3RydWN0b3IgfSkgPT4gY29pbkZhY3RvcnkucmVnaXN0ZXIobmFtZSwgY29pbkNvbnN0cnVjdG9yKVxuICApO1xuXG4gIFBvbHl4VG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoWy4uLnRva2Vucy5iaXRjb2luLnBvbHl4LnRva2VucywgLi4udG9rZW5zLnRlc3RuZXQucG9seXgudG9rZW5zXSkuZm9yRWFjaChcbiAgICAoeyBuYW1lLCBjb2luQ29uc3RydWN0b3IgfSkgPT4gY29pbkZhY3RvcnkucmVnaXN0ZXIobmFtZSwgY29pbkNvbnN0cnVjdG9yKVxuICApO1xuXG4gIFhycFRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3JzKFsuLi50b2tlbnMuYml0Y29pbi54cnAudG9rZW5zLCAuLi50b2tlbnMudGVzdG5ldC54cnAudG9rZW5zXSkuZm9yRWFjaChcbiAgICAoeyBuYW1lLCBjb2luQ29uc3RydWN0b3IgfSkgPT4gY29pbkZhY3RvcnkucmVnaXN0ZXIobmFtZSwgY29pbkNvbnN0cnVjdG9yKVxuICApO1xuXG4gIFhycE1wdFRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3JzKFsuLi50b2tlbnMuYml0Y29pbi54cnAubXB0VG9rZW5zLCAuLi50b2tlbnMudGVzdG5ldC54cnAubXB0VG9rZW5zXSkuZm9yRWFjaChcbiAgICAoeyBuYW1lLCBjb2luQ29uc3RydWN0b3IgfSkgPT4gY29pbkZhY3RvcnkucmVnaXN0ZXIobmFtZSwgY29pbkNvbnN0cnVjdG9yKVxuICApO1xuXG4gIEFwdFRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3JzKFsuLi50b2tlbnMuYml0Y29pbi5hcHQudG9rZW5zLCAuLi50b2tlbnMudGVzdG5ldC5hcHQudG9rZW5zXSkuZm9yRWFjaChcbiAgICAoeyBuYW1lLCBjb2luQ29uc3RydWN0b3IgfSkgPT4gY29pbkZhY3RvcnkucmVnaXN0ZXIobmFtZSwgY29pbkNvbnN0cnVjdG9yKVxuICApO1xuXG4gIFNpcDEwVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoWy4uLnRva2Vucy5iaXRjb2luLnN0eC50b2tlbnMsIC4uLnRva2Vucy50ZXN0bmV0LnN0eC50b2tlbnNdKS5mb3JFYWNoKFxuICAgICh7IG5hbWUsIGNvaW5Db25zdHJ1Y3RvciB9KSA9PiBjb2luRmFjdG9yeS5yZWdpc3RlcihuYW1lLCBjb2luQ29uc3RydWN0b3IpXG4gICk7XG5cbiAgTmVwMTQxVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoWy4uLnRva2Vucy5iaXRjb2luLm5lYXIudG9rZW5zLCAuLi50b2tlbnMudGVzdG5ldC5uZWFyLnRva2Vuc10pLmZvckVhY2goXG4gICAgKHsgbmFtZSwgY29pbkNvbnN0cnVjdG9yIH0pID0+IGNvaW5GYWN0b3J5LnJlZ2lzdGVyKG5hbWUsIGNvaW5Db25zdHJ1Y3RvcilcbiAgKTtcblxuICBIYXNoVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoWy4uLnRva2Vucy5iaXRjb2luLmNvc21vcy50b2tlbnMsIC4uLnRva2Vucy50ZXN0bmV0LmNvc21vcy50b2tlbnNdKS5mb3JFYWNoKFxuICAgICh7IG5hbWUsIGNvaW5Db25zdHJ1Y3RvciB9KSA9PiBjb2luRmFjdG9yeS5yZWdpc3RlcihuYW1lLCBjb2luQ29uc3RydWN0b3IpXG4gICk7XG5cbiAgSmV0dG9uVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoWy4uLnRva2Vucy5iaXRjb2luLnRvbi50b2tlbnMsIC4uLnRva2Vucy50ZXN0bmV0LnRvbi50b2tlbnNdKS5mb3JFYWNoKFxuICAgICh7IG5hbWUsIGNvaW5Db25zdHJ1Y3RvciB9KSA9PiBjb2luRmFjdG9yeS5yZWdpc3RlcihuYW1lLCBjb2luQ29uc3RydWN0b3IpXG4gICk7XG5cbiAgVmV0VG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoKS5mb3JFYWNoKCh7IG5hbWUsIGNvaW5Db25zdHJ1Y3RvciB9KSA9PlxuICAgIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKG5hbWUsIGNvaW5Db25zdHJ1Y3RvcilcbiAgKTtcblxuICBGbHJUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9ycygpLmZvckVhY2goKHsgbmFtZSwgY29pbkNvbnN0cnVjdG9yIH0pID0+IHtcbiAgICBjb2luRmFjdG9yeS5yZWdpc3RlcihuYW1lLCBjb2luQ29uc3RydWN0b3IpO1xuICB9KTtcblxuICBNb25Ub2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9ycygpLmZvckVhY2goKHsgbmFtZSwgY29pbkNvbnN0cnVjdG9yIH0pID0+IHtcbiAgICBjb2luRmFjdG9yeS5yZWdpc3RlcihuYW1lLCBjb2luQ29uc3RydWN0b3IpO1xuICB9KTtcblxuICBYZGNUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9ycygpLmZvckVhY2goKHsgbmFtZSwgY29pbkNvbnN0cnVjdG9yIH0pID0+IHtcbiAgICBjb2luRmFjdG9yeS5yZWdpc3RlcihuYW1lLCBjb2luQ29uc3RydWN0b3IpO1xuICB9KTtcblxuICAvLyBHZW5lcmljIEVSQzIwIHRva2VuIHJlZ2lzdHJhdGlvbiBmb3IgY29pbnMgd2l0aCBTVVBQT1JUU19FUkMyMCBmZWF0dXJlXG4gIGNvaW5zXG4gICAgLmZpbHRlcigoY29pbikgPT4gY29pbi5mZWF0dXJlcy5pbmNsdWRlcyhDb2luRmVhdHVyZS5TVVBQT1JUU19FUkMyMCkgJiYgIWNvaW4uaXNUb2tlbilcbiAgICAuZm9yRWFjaCgoY29pbikgPT4ge1xuICAgICAgY29uc3QgY29pbk5hbWVzID0ge1xuICAgICAgICBNYWlubmV0OiBgJHtjb2luLm5hbWV9YCxcbiAgICAgICAgVGVzdG5ldDogYHQke2NvaW4ubmFtZX1gLFxuICAgICAgfTtcblxuICAgICAgRXRoTGlrZUVyYzIwVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoY29pbk5hbWVzKS5mb3JFYWNoKCh7IG5hbWUsIGNvaW5Db25zdHJ1Y3RvciB9KSA9PiB7XG4gICAgICAgIGNvaW5GYWN0b3J5LnJlZ2lzdGVyKG5hbWUsIGNvaW5Db25zdHJ1Y3Rvcik7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAvLyBHZW5lcmljIEVSQzcyMSB0b2tlbiByZWdpc3RyYXRpb24gZm9yIGNvaW5zIHdpdGggU1VQUE9SVFNfRVJDNzIxIGZlYXR1cmVcbiAgY29pbnNcbiAgICAuZmlsdGVyKChjb2luKSA9PiBjb2luLmZlYXR1cmVzLmluY2x1ZGVzKENvaW5GZWF0dXJlLlNVUFBPUlRTX0VSQzcyMSkgJiYgIWNvaW4uaXNUb2tlbilcbiAgICAuZm9yRWFjaCgoY29pbikgPT4ge1xuICAgICAgY29uc3QgY29pbk5hbWVzID0ge1xuICAgICAgICBNYWlubmV0OiBgJHtjb2luLm5hbWV9YCxcbiAgICAgICAgVGVzdG5ldDogYHQke2NvaW4ubmFtZX1gLFxuICAgICAgfTtcblxuICAgICAgRXRoTGlrZUVyYzcyMVRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3JzKGNvaW5OYW1lcykuZm9yRWFjaCgoeyBuYW1lLCBjb2luQ29uc3RydWN0b3IgfSkgPT4ge1xuICAgICAgICBjb2luRmFjdG9yeS5yZWdpc3RlcihuYW1lLCBjb2luQ29uc3RydWN0b3IpO1xuICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2luQ29uc3RydWN0b3IoY29pbk5hbWU6IHN0cmluZyk6IENvaW5Db25zdHJ1Y3RvciB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGV2bUNvaW5zID0gY29pbnMuZmlsdGVyKChjb2luKSA9PiBjb2luLmZlYXR1cmVzLmluY2x1ZGVzKENvaW5GZWF0dXJlLlNIQVJFRF9FVk1fU0RLKSk7XG4gIGNvbnN0IGNvc21vc1NoYXJlZENvaW5zID0gY29pbnMuZmlsdGVyKChjb2luKSA9PiBjb2luLmZlYXR1cmVzLmluY2x1ZGVzKENvaW5GZWF0dXJlLlNIQVJFRF9DT1NNT1NfU0RLKSk7XG4gIGlmIChldm1Db2lucy5oYXMoY29pbk5hbWUpKSB7XG4gICAgcmV0dXJuIEV2bUNvaW4uY3JlYXRlSW5zdGFuY2U7XG4gIH1cbiAgaWYgKGNvc21vc1NoYXJlZENvaW5zLmhhcyhjb2luTmFtZSkpIHtcbiAgICByZXR1cm4gQ29zbW9zU2hhcmVkQ29pbi5jcmVhdGVJbnN0YW5jZTtcbiAgfVxuICBzd2l0Y2ggKGNvaW5OYW1lKSB7XG4gICAgY2FzZSAnYWRhJzpcbiAgICAgIHJldHVybiBBZGEuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnYWxnbyc6XG4gICAgICByZXR1cm4gQWxnby5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdhcGVjaGFpbic6XG4gICAgICByZXR1cm4gQXBlY2hhaW4uY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnYXB0JzpcbiAgICAgIHJldHVybiBBcHQuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnYXJiZXRoJzpcbiAgICAgIHJldHVybiBBcmJldGguY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnYXNpJzpcbiAgICAgIHJldHVybiBBc2kuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnYXRvbSc6XG4gICAgICByZXR1cm4gQXRvbS5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdhdmF4Yyc6XG4gICAgICByZXR1cm4gQXZheEMuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnYXZheHAnOlxuICAgICAgcmV0dXJuIEF2YXhQLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ2JhYnknOlxuICAgICAgcmV0dXJuIEJhYnkuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnYmNoJzpcbiAgICAgIHJldHVybiBCY2guY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnYmNoYSc6XG4gICAgICByZXR1cm4gQmNoYS5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdiZXJhJzpcbiAgICAgIHJldHVybiBCZXJhLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ2JsZCc6XG4gICAgICByZXR1cm4gQmxkLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ2JzYyc6XG4gICAgICByZXR1cm4gQnNjLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ2Jzdic6XG4gICAgICByZXR1cm4gQnN2LmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ2J0Yyc6XG4gICAgICByZXR1cm4gQnRjLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ2J0Zyc6XG4gICAgICByZXR1cm4gQnRnLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ2NhbnRvbic6XG4gICAgICByZXR1cm4gQ2FudG9uLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ2NlbG8nOlxuICAgICAgcmV0dXJuIENlbG8uY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnY29yZWRhbyc6XG4gICAgICByZXR1cm4gQ29yZWRhby5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdjb3JldW0nOlxuICAgICAgcmV0dXJuIENvcmV1bS5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdjcm9ub3MnOlxuICAgICAgcmV0dXJuIENyb25vcy5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdjc3ByJzpcbiAgICAgIHJldHVybiBDc3ByLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ2Rhc2gnOlxuICAgICAgcmV0dXJuIERhc2guY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnZG9nZSc6XG4gICAgICByZXR1cm4gRG9nZS5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdkb3QnOlxuICAgICAgcmV0dXJuIERvdC5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdlb3MnOlxuICAgICAgcmV0dXJuIEVvcy5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdldGMnOlxuICAgICAgcmV0dXJuIEV0Yy5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdldGgnOlxuICAgICAgcmV0dXJuIEV0aC5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdldGh3JzpcbiAgICAgIHJldHVybiBFdGh3LmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ2Jhc2VldGgnOlxuICAgICAgcmV0dXJuIEV0aExpa2VDb2luLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ29wYm5iJzpcbiAgICAgIHJldHVybiBFdGhMaWtlQ29pbi5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdmYW50b20nOlxuICAgICAgcmV0dXJuIEV0aExpa2VDb2luLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ2NvdGlldGgnOlxuICAgICAgcmV0dXJuIEV0aExpa2VDb2luLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3RiYXNlZXRoJzpcbiAgICAgIHJldHVybiBUZXRoTGlrZUNvaW4uY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndG9wYm5iJzpcbiAgICAgIHJldHVybiBUZXRoTGlrZUNvaW4uY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndGZhbnRvbSc6XG4gICAgICByZXR1cm4gVGV0aExpa2VDb2luLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3Rjb3RpZXRoJzpcbiAgICAgIHJldHVybiBUZXRoTGlrZUNvaW4uY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnZmxyJzpcbiAgICAgIHJldHVybiBGbHIuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnZmxycCc6XG4gICAgICByZXR1cm4gRmxycC5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdndGV0aCc6XG4gICAgICByZXR1cm4gR3RldGguY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnaGFzaCc6XG4gICAgICByZXR1cm4gSGFzaC5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdoYmFyJzpcbiAgICAgIHJldHVybiBIYmFyLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ2h0ZXRoJzpcbiAgICAgIHJldHVybiBIdGV0aC5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdsbmJ0Yyc6XG4gICAgICByZXR1cm4gTG5idGMuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnbHRjJzpcbiAgICAgIHJldHVybiBMdGMuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnbW9uJzpcbiAgICAgIHJldHVybiBNb24uY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnaWNwJzpcbiAgICAgIHJldHVybiBJY3AuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnaW5pdGlhJzpcbiAgICAgIHJldHVybiBJbml0aWEuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnaW5qZWN0aXZlJzpcbiAgICAgIHJldHVybiBJbmplY3RpdmUuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnaW90YSc6XG4gICAgICByZXR1cm4gSW90YS5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdpc2xtJzpcbiAgICAgIHJldHVybiBJc2xtLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ2thc3BhJzpcbiAgICAgIHJldHVybiBLYXNwYS5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICduZWFyJzpcbiAgICAgIHJldHVybiBOZWFyLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ29hcyc6XG4gICAgICByZXR1cm4gT2FzLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ29mYyc6XG4gICAgICByZXR1cm4gT2ZjLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ29wZXRoJzpcbiAgICAgIHJldHVybiBPcGV0aC5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdvc21vJzpcbiAgICAgIHJldHVybiBPc21vLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3BlYXJsJzpcbiAgICAgIHJldHVybiBQZWFybC5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdwb2x5Z29uJzpcbiAgICAgIHJldHVybiBQb2x5Z29uLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3BvbHl4JzpcbiAgICAgIHJldHVybiBQb2x5eC5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICdyYnRjJzpcbiAgICAgIHJldHVybiBSYnRjLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3Rob3JjaGFpbjpydW5lJzpcbiAgICAgIHJldHVybiBSdW5lLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3NlaSc6XG4gICAgICByZXR1cm4gU2VpLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3NlcGV0aCc6XG4gICAgICByZXR1cm4gU2VwZXRoLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3NnYic6XG4gICAgICByZXR1cm4gU2diLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3NvbCc6XG4gICAgICByZXR1cm4gU29sLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3NvbmVpdW0nOlxuICAgICAgcmV0dXJuIFNvbmVpdW0uY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnc3RhcmtuZXQnOlxuICAgICAgcmV0dXJuIFN0YXJrbmV0LmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3N0eCc6XG4gICAgICByZXR1cm4gU3R4LmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3N1aSc6XG4gICAgICByZXR1cm4gU3VpLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3N1c2QnOlxuICAgICAgcmV0dXJuIFN1c2QuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndGFvJzpcbiAgICAgIHJldHVybiBUYW8uY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndGVtcG8nOlxuICAgICAgcmV0dXJuIFRlbXBvLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3RpYSc6XG4gICAgICByZXR1cm4gVGlhLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3Rvbic6XG4gICAgICByZXR1cm4gVG9uLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3RhbGdvJzpcbiAgICAgIHJldHVybiBUYWxnby5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0YXBlY2hhaW4nOlxuICAgICAgcmV0dXJuIFRhcGVjaGFpbi5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0YXB0JzpcbiAgICAgIHJldHVybiBUYXB0LmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3RhcmJldGgnOlxuICAgICAgcmV0dXJuIFRhcmJldGguY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndGFkYSc6XG4gICAgICByZXR1cm4gVGFkYS5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0YXNpJzpcbiAgICAgIHJldHVybiBUYXNpLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3RhdG9tJzpcbiAgICAgIHJldHVybiBUYXRvbS5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0YXZheGMnOlxuICAgICAgcmV0dXJuIFRhdmF4Qy5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0YXZheHAnOlxuICAgICAgcmV0dXJuIFRhdmF4UC5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0YmFieSc6XG4gICAgICByZXR1cm4gVGJhYnkuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndGJjaCc6XG4gICAgICByZXR1cm4gVGJjaC5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0YmNoYSc6XG4gICAgICByZXR1cm4gVGJjaGEuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndGJlcmEnOlxuICAgICAgcmV0dXJuIFRiZXJhLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3RibGQnOlxuICAgICAgcmV0dXJuIFRibGQuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndGJzYyc6XG4gICAgICByZXR1cm4gVGJzYy5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0YnN2JzpcbiAgICAgIHJldHVybiBUYnN2LmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3RidGMnOlxuICAgICAgcmV0dXJuIFRidGMuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndGJ0Y3NpZyc6XG4gICAgICByZXR1cm4gVGJ0Y3NpZy5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0YnRjNCc6XG4gICAgICByZXR1cm4gVGJ0YzQuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndGJ0Y2Jnc2lnJzpcbiAgICAgIHJldHVybiBUYnRjYmdzaWcuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndGNhbnRvbic6XG4gICAgICByZXR1cm4gVGNhbnRvbi5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0Y2Vsbyc6XG4gICAgICByZXR1cm4gVGNlbG8uY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndGNvcmVkYW8nOlxuICAgICAgcmV0dXJuIFRjb3JlZGFvLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3Rjb3JldW0nOlxuICAgICAgcmV0dXJuIFRjb3JldW0uY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndGNyb25vcyc6XG4gICAgICByZXR1cm4gVGNyb25vcy5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0Y3Nwcic6XG4gICAgICByZXR1cm4gVGNzcHIuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndGRhc2gnOlxuICAgICAgcmV0dXJuIFRkYXNoLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3Rkb2dlJzpcbiAgICAgIHJldHVybiBUZG9nZS5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0ZG90JzpcbiAgICAgIHJldHVybiBUZG90LmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3Rlb3MnOlxuICAgICAgcmV0dXJuIFRlb3MuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndGV0Yyc6XG4gICAgICByZXR1cm4gVGV0Yy5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0ZXRoJzpcbiAgICAgIHJldHVybiBUZXRoLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3RmbHInOlxuICAgICAgcmV0dXJuIFRmbHIuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndGZscnAnOlxuICAgICAgcmV0dXJuIEZscnAuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndG1vbic6XG4gICAgICByZXR1cm4gVG1vbi5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0aGFzaCc6XG4gICAgICByZXR1cm4gVGhhc2guY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndGhiYXInOlxuICAgICAgcmV0dXJuIFRoYmFyLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3RpY3AnOlxuICAgICAgcmV0dXJuIFRpY3AuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndGluaXRpYSc6XG4gICAgICByZXR1cm4gVGluaXRpYS5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0aW5qZWN0aXZlJzpcbiAgICAgIHJldHVybiBUaW5qZWN0aXZlLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3Rpb3RhJzpcbiAgICAgIHJldHVybiBJb3RhLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3Rpc2xtJzpcbiAgICAgIHJldHVybiBUaXNsbS5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0a2FzcGEnOlxuICAgICAgcmV0dXJuIEthc3BhLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3RsbmJ0Yyc6XG4gICAgICByZXR1cm4gVGxuYnRjLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3RsdGMnOlxuICAgICAgcmV0dXJuIFRsdGMuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndG5lYXInOlxuICAgICAgcmV0dXJuIFROZWFyLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3RvYXMnOlxuICAgICAgcmV0dXJuIFRvYXMuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndG9wZXRoJzpcbiAgICAgIHJldHVybiBUb3BldGguY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndG9zbW8nOlxuICAgICAgcmV0dXJuIFRvc21vLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3RwZWFybCc6XG4gICAgICByZXR1cm4gVHBlYXJsLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3Rwb2x5Z29uJzpcbiAgICAgIHJldHVybiBUcG9seWdvbi5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0cG9seXgnOlxuICAgICAgcmV0dXJuIFRwb2x5eC5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0cmJ0Yyc6XG4gICAgICByZXR1cm4gVHJidGMuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndHNnYic6XG4gICAgICByZXR1cm4gVHNnYi5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0dGhvcmNoYWluOnJ1bmUnOlxuICAgICAgcmV0dXJuIFRydW5lLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3RyeCc6XG4gICAgICByZXR1cm4gVHJ4LmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3RzZWknOlxuICAgICAgcmV0dXJuIFRzZWkuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndHNvbCc6XG4gICAgICByZXR1cm4gVHNvbC5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0c29uZWl1bSc6XG4gICAgICByZXR1cm4gVHNvbmVpdW0uY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndHN0YXJrbmV0JzpcbiAgICAgIHJldHVybiBTdGFya25ldC5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0c3R4JzpcbiAgICAgIHJldHVybiBUc3R4LmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3RzdHQnOlxuICAgICAgcmV0dXJuIFRzdHQuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndHN1aSc6XG4gICAgICByZXR1cm4gVHN1aS5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0c3VzZCc6XG4gICAgICByZXR1cm4gVHN1c2QuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndHRhbyc6XG4gICAgICByZXR1cm4gVHRhby5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0dGVtcG8nOlxuICAgICAgcmV0dXJuIFR0ZW1wby5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0dGlhJzpcbiAgICAgIHJldHVybiBUdGlhLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3R0b24nOlxuICAgICAgcmV0dXJuIFR0b24uY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndHRyeCc6XG4gICAgICByZXR1cm4gVHRyeC5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0dmV0JzpcbiAgICAgIHJldHVybiBUdmV0LmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3R4ZGMnOlxuICAgICAgcmV0dXJuIFR4ZGMuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndHhsbSc6XG4gICAgICByZXR1cm4gVHhsbS5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0eHJwJzpcbiAgICAgIHJldHVybiBUeHJwLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3R4dHonOlxuICAgICAgcmV0dXJuIFR4dHouY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndHplYyc6XG4gICAgICByZXR1cm4gVHplYy5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd0emV0YSc6XG4gICAgICByZXR1cm4gVHpldGEuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndHprZXRoJzpcbiAgICAgIHJldHVybiBUemtldGguY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndHdlbWl4JzpcbiAgICAgIHJldHVybiBUd2VtaXguY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndHdvcmxkJzpcbiAgICAgIHJldHVybiBUd29ybGQuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAndmV0JzpcbiAgICAgIHJldHVybiBWZXQuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAneGRjJzpcbiAgICAgIHJldHVybiBYZGMuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAneGxtJzpcbiAgICAgIHJldHVybiBYbG0uY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAneHJwJzpcbiAgICAgIHJldHVybiBYcnAuY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAneHR6JzpcbiAgICAgIHJldHVybiBYdHouY3JlYXRlSW5zdGFuY2U7XG4gICAgY2FzZSAnd2VtaXgnOlxuICAgICAgcmV0dXJuIFdlbWl4LmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3dvcmxkJzpcbiAgICAgIHJldHVybiBXb3JsZC5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd6ZWMnOlxuICAgICAgcmV0dXJuIFplYy5jcmVhdGVJbnN0YW5jZTtcbiAgICBjYXNlICd6ZXRhJzpcbiAgICAgIHJldHVybiBaZXRhLmNyZWF0ZUluc3RhbmNlO1xuICAgIGNhc2UgJ3prZXRoJzpcbiAgICAgIHJldHVybiBaa2V0aC5jcmVhdGVJbnN0YW5jZTtcbiAgICBkZWZhdWx0OiB7XG4gICAgICBjb25zdCBmaWF0Q29uZmlnID0gYWxsRmlhdENvaW5zLmZpbmQoKGMpID0+IGMuY2hhaW4gPT09IGNvaW5OYW1lKTtcbiAgICAgIGlmIChmaWF0Q29uZmlnKSB7XG4gICAgICAgIHJldHVybiBGaWF0LmNyZWF0ZUNvbnN0cnVjdG9yKGZpYXRDb25maWcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWc6IFRva2VuQ29uZmlnKTogQ29pbkNvbnN0cnVjdG9yIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgY29pbiA9IGNvaW5zLmdldCh0b2tlbkNvbmZpZy5jb2luKTtcblxuICBpZiAoXG4gICAgJ25ldHdvcmsnIGluIHRva2VuQ29uZmlnICYmXG4gICAgdG9rZW5Db25maWcubmV0d29yayA9PT0gJ01haW5uZXQnICYmXG4gICAgY29pbj8uZmVhdHVyZXMuaW5jbHVkZXMoQ29pbkZlYXR1cmUuU1VQUE9SVFNfRVJDMjApXG4gICkge1xuICAgIHJldHVybiBFdGhMaWtlRXJjMjBUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9yKHRva2VuQ29uZmlnIGFzIEV0aExpa2VUb2tlbkNvbmZpZywge1xuICAgICAgTWFpbm5ldDogdG9rZW5Db25maWcuY29pbixcbiAgICAgIFRlc3RuZXQ6IGB0JHt0b2tlbkNvbmZpZy5jb2lufWAsXG4gICAgfSk7XG4gIH1cblxuICBpZiAoXG4gICAgJ25ldHdvcmsnIGluIHRva2VuQ29uZmlnICYmXG4gICAgdG9rZW5Db25maWcubmV0d29yayA9PT0gJ01haW5uZXQnICYmXG4gICAgY29pbj8uZmVhdHVyZXMuaW5jbHVkZXMoQ29pbkZlYXR1cmUuU1VQUE9SVFNfRVJDNzIxKVxuICApIHtcbiAgICByZXR1cm4gRXRoTGlrZUVyYzcyMVRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgRXRoTGlrZVRva2VuQ29uZmlnLCB7XG4gICAgICBNYWlubmV0OiB0b2tlbkNvbmZpZy5jb2luLFxuICAgICAgVGVzdG5ldDogYHQke3Rva2VuQ29uZmlnLmNvaW59YCxcbiAgICB9KTtcbiAgfVxuXG4gIHN3aXRjaCAodG9rZW5Db25maWcuY29pbikge1xuICAgIGNhc2UgJ2V0aCc6XG4gICAgY2FzZSAnaHRldGgnOiB7XG4gICAgICBjb25zdCBzdGF0aWNDb2luID0gY29pbnMuZ2V0KHRva2VuQ29uZmlnLnR5cGUpO1xuICAgICAgaWYgKHN0YXRpY0NvaW4gaW5zdGFuY2VvZiBFcmM3OTg0Q29pbikge1xuICAgICAgICByZXR1cm4gRXJjNzk4NFRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgRXJjNzk4NFRva2VuQ29uZmlnKTtcbiAgICAgIH0gZWxzZSBpZiAodG9rZW5Db25maWcudHlwZS5pbmNsdWRlcygnZXJjNzIxJykpIHtcbiAgICAgICAgcmV0dXJuIEVyYzcyMVRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgRXRoTGlrZVRva2VuQ29uZmlnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBFcmMyMFRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgRXJjMjBUb2tlbkNvbmZpZyk7XG4gICAgICB9XG4gICAgfVxuICAgIGNhc2UgJ3hsbSc6XG4gICAgY2FzZSAndHhsbSc6XG4gICAgICByZXR1cm4gU3RlbGxhclRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgU3RlbGxhclRva2VuQ29uZmlnKTtcbiAgICBjYXNlICdvZmMnOlxuICAgICAgcmV0dXJuIE9mY1Rva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgT2ZjVG9rZW5Db25maWcpO1xuICAgIGNhc2UgJ2NlbG8nOlxuICAgIGNhc2UgJ3RjZWxvJzpcbiAgICAgIHJldHVybiBDZWxvVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3Rvcih0b2tlbkNvbmZpZyBhcyBDZWxvVG9rZW5Db25maWcpO1xuICAgIGNhc2UgJ2JzYyc6XG4gICAgY2FzZSAndGJzYyc6XG4gICAgICByZXR1cm4gQnNjVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3Rvcih0b2tlbkNvbmZpZyBhcyBFcmMyMFRva2VuQ29uZmlnKTtcbiAgICBjYXNlICdlb3MnOlxuICAgIGNhc2UgJ3Rlb3MnOlxuICAgICAgcmV0dXJuIEVvc1Rva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgRW9zVG9rZW5Db25maWcpO1xuICAgIGNhc2UgJ2FsZ28nOlxuICAgIGNhc2UgJ3RhbGdvJzpcbiAgICAgIHJldHVybiBBbGdvVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3Rvcih0b2tlbkNvbmZpZyBhcyBBbGdvVG9rZW5Db25maWcpO1xuICAgIGNhc2UgJ2F2YXhjJzpcbiAgICBjYXNlICd0YXZheGMnOlxuICAgICAgcmV0dXJuIEF2YXhDVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3Rvcih0b2tlbkNvbmZpZyBhcyBBdmF4Y1Rva2VuQ29uZmlnKTtcbiAgICBjYXNlICdwb2x5Z29uJzpcbiAgICBjYXNlICd0cG9seWdvbic6XG4gICAgICByZXR1cm4gUG9seWdvblRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgRXRoTGlrZVRva2VuQ29uZmlnKTtcbiAgICBjYXNlICdzb25laXVtJzpcbiAgICBjYXNlICd0c29uZWl1bSc6XG4gICAgICByZXR1cm4gU29uZWl1bVRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgRXRoTGlrZVRva2VuQ29uZmlnKTtcbiAgICBjYXNlICdhcmJldGgnOlxuICAgIGNhc2UgJ3RhcmJldGgnOlxuICAgICAgcmV0dXJuIEFyYmV0aFRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgRXRoTGlrZVRva2VuQ29uZmlnKTtcbiAgICBjYXNlICdvcGV0aCc6XG4gICAgY2FzZSAndG9wZXRoJzpcbiAgICAgIHJldHVybiBPcGV0aFRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgRXRoTGlrZVRva2VuQ29uZmlnKTtcbiAgICBjYXNlICd6a2V0aCc6XG4gICAgY2FzZSAndHprZXRoJzpcbiAgICAgIHJldHVybiBaa2V0aFRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgRXRoTGlrZVRva2VuQ29uZmlnKTtcbiAgICBjYXNlICdiZXJhJzpcbiAgICBjYXNlICd0YmVyYSc6XG4gICAgICByZXR1cm4gQmVyYVRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgRXRoTGlrZVRva2VuQ29uZmlnKTtcbiAgICBjYXNlICdiYXNlZXRoJzpcbiAgICBjYXNlICd0YmFzZWV0aCc6XG4gICAgICBjb25zdCBjb2luTmFtZXMgPSB7IE1haW5uZXQ6ICdiYXNlZXRoJywgVGVzdG5ldDogJ3RiYXNlZXRoJyB9O1xuICAgICAgcmV0dXJuIEV0aExpa2VFcmMyMFRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgRXRoTGlrZVRva2VuQ29uZmlnLCBjb2luTmFtZXMpO1xuICAgIGNhc2UgJ29wYm5iJzpcbiAgICBjYXNlICd0b3BibmInOlxuICAgICAgY29uc3Qgb3BibmJDb2luTmFtZXMgPSB7IE1haW5uZXQ6ICdvcGJuYicsIFRlc3RuZXQ6ICd0b3BibmInIH07XG4gICAgICByZXR1cm4gRXRoTGlrZUVyYzIwVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3Rvcih0b2tlbkNvbmZpZyBhcyBFdGhMaWtlVG9rZW5Db25maWcsIG9wYm5iQ29pbk5hbWVzKTtcbiAgICBjYXNlICdjb3JlZGFvJzpcbiAgICBjYXNlICd0Y29yZWRhbyc6XG4gICAgICByZXR1cm4gQ29yZWRhb1Rva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgRXRoTGlrZVRva2VuQ29uZmlnKTtcbiAgICBjYXNlICd3b3JsZCc6XG4gICAgY2FzZSAndHdvcmxkJzpcbiAgICAgIHJldHVybiBXb3JsZFRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgRXRoTGlrZVRva2VuQ29uZmlnKTtcbiAgICBjYXNlICdzb2wnOlxuICAgIGNhc2UgJ3Rzb2wnOlxuICAgICAgcmV0dXJuIFNvbFRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgU29sVG9rZW5Db25maWcpO1xuICAgIGNhc2UgJ2hiYXInOlxuICAgIGNhc2UgJ3RoYmFyJzpcbiAgICAgIHJldHVybiBIYmFyVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3Rvcih0b2tlbkNvbmZpZyBhcyBIYmFyVG9rZW5Db25maWcpO1xuICAgIGNhc2UgJ3RyeCc6XG4gICAgY2FzZSAndHRyeCc6XG4gICAgICByZXR1cm4gVHJ4VG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3Rvcih0b2tlbkNvbmZpZyBhcyBUcnhUb2tlbkNvbmZpZyk7XG4gICAgY2FzZSAnYWRhJzpcbiAgICBjYXNlICd0YWRhJzpcbiAgICAgIHJldHVybiBBZGFUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9yKHRva2VuQ29uZmlnIGFzIEFkYVRva2VuQ29uZmlnKTtcbiAgICBjYXNlICdzdWknOlxuICAgIGNhc2UgJ3RzdWknOlxuICAgICAgcmV0dXJuIFN1aVRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgU3VpVG9rZW5Db25maWcpO1xuICAgIGNhc2UgJ3Rhbyc6XG4gICAgY2FzZSAndHRhbyc6XG4gICAgICByZXR1cm4gVGFvVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3Rvcih0b2tlbkNvbmZpZyBhcyBUYW9Ub2tlbkNvbmZpZyk7XG4gICAgY2FzZSAndGVtcG8nOlxuICAgIGNhc2UgJ3R0ZW1wbyc6XG4gICAgICByZXR1cm4gVGlwMjBUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9yKHRva2VuQ29uZmlnIGFzIFRpcDIwVG9rZW5Db25maWcpO1xuICAgIGNhc2UgJ3BvbHl4JzpcbiAgICBjYXNlICd0cG9seXgnOlxuICAgICAgcmV0dXJuIFBvbHl4VG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3Rvcih0b2tlbkNvbmZpZyBhcyBQb2x5eFRva2VuQ29uZmlnKTtcbiAgICBjYXNlICd4cnAnOlxuICAgIGNhc2UgJ3R4cnAnOlxuICAgICAgaWYgKCdjYW5UcmFuc2ZlcicgaW4gdG9rZW5Db25maWcpIHtcbiAgICAgICAgcmV0dXJuIFhycE1wdFRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgWHJwTXB0VG9rZW5Db25maWcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFhycFRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgWHJwVG9rZW5Db25maWcpO1xuICAgIGNhc2UgJ2FwdCc6XG4gICAgY2FzZSAndGFwdCc6XG4gICAgICByZXR1cm4gQXB0VG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3Rvcih0b2tlbkNvbmZpZyBhcyBBcHRUb2tlbkNvbmZpZyk7XG4gICAgY2FzZSAnZmxvdyc6XG4gICAgY2FzZSAndGZsb3cnOiB7XG4gICAgICBjb25zdCBjb2luTmFtZXMgPSB7IE1haW5uZXQ6ICdmbG93JywgVGVzdG5ldDogJ3RmbG93JyB9O1xuICAgICAgcmV0dXJuIEV0aExpa2VFcmMyMFRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgRXRoTGlrZVRva2VuQ29uZmlnLCBjb2luTmFtZXMpO1xuICAgIH1cbiAgICBjYXNlICdzZWlldm0nOlxuICAgIGNhc2UgJ3RzZWlldm0nOiB7XG4gICAgICBjb25zdCBjb2luTmFtZXMgPSB7IE1haW5uZXQ6ICdzZWlldm0nLCBUZXN0bmV0OiAndHNlaWV2bScgfTtcbiAgICAgIHJldHVybiBFdGhMaWtlRXJjMjBUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9yKHRva2VuQ29uZmlnIGFzIEV0aExpa2VUb2tlbkNvbmZpZywgY29pbk5hbWVzKTtcbiAgICB9XG4gICAgY2FzZSAnbGluZWFldGgnOlxuICAgIGNhc2UgJ3RsaW5lYWV0aCc6IHtcbiAgICAgIGNvbnN0IGNvaW5OYW1lcyA9IHsgTWFpbm5ldDogJ2xpbmVhZXRoJywgVGVzdG5ldDogJ3RsaW5lYWV0aCcgfTtcbiAgICAgIHJldHVybiBFdGhMaWtlRXJjMjBUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9yKHRva2VuQ29uZmlnIGFzIEV0aExpa2VUb2tlbkNvbmZpZywgY29pbk5hbWVzKTtcbiAgICB9XG4gICAgY2FzZSAnc3R4JzpcbiAgICBjYXNlICd0c3R4JzpcbiAgICAgIHJldHVybiBTaXAxMFRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgU2lwMTBUb2tlbkNvbmZpZyk7XG4gICAgY2FzZSAnbmVhcic6XG4gICAgY2FzZSAndG5lYXInOlxuICAgICAgcmV0dXJuIE5lcDE0MVRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgTmVwMTQxVG9rZW5Db25maWcpO1xuICAgIGNhc2UgJ3ZldCc6XG4gICAgY2FzZSAndHZldCc6XG4gICAgICByZXR1cm4gVmV0VG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3Rvcih0b2tlbkNvbmZpZyBhcyBWZXRUb2tlbkNvbmZpZyk7XG4gICAgY2FzZSAnaGFzaCc6XG4gICAgY2FzZSAndGhhc2gnOlxuICAgICAgcmV0dXJuIEhhc2hUb2tlbi5jcmVhdGVUb2tlbkNvbnN0cnVjdG9yKHRva2VuQ29uZmlnIGFzIENvc21vc1Rva2VuQ29uZmlnKTtcbiAgICBjYXNlICdmbHInOlxuICAgIGNhc2UgJ3RmbHInOlxuICAgICAgcmV0dXJuIEZsclRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgRXRoTGlrZVRva2VuQ29uZmlnKTtcbiAgICBjYXNlICd0b24nOlxuICAgIGNhc2UgJ3R0b24nOlxuICAgICAgcmV0dXJuIEpldHRvblRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW5Db25maWcgYXMgSmV0dG9uVG9rZW5Db25maWcpO1xuICAgIGNhc2UgJ21vbic6XG4gICAgY2FzZSAndG1vbic6XG4gICAgICByZXR1cm4gTW9uVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3Rvcih0b2tlbkNvbmZpZyBhcyBFdGhMaWtlVG9rZW5Db25maWcpO1xuICAgIGNhc2UgJ3hkYyc6XG4gICAgY2FzZSAndHhkYyc6XG4gICAgICByZXR1cm4gWGRjVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3Rvcih0b2tlbkNvbmZpZyBhcyBFdGhMaWtlVG9rZW5Db25maWcpO1xuICAgIGNhc2UgJ2NhbnRvbic6XG4gICAgY2FzZSAndGNhbnRvbic6XG4gICAgICByZXR1cm4gQ2FudG9uVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3Rvcih0b2tlbkNvbmZpZyBhcyBDYW50b25Ub2tlbkNvbmZpZyk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IEdsb2JhbENvaW5GYWN0b3J5OiBDb2luRmFjdG9yeSA9IG5ldyBDb2luRmFjdG9yeSgpO1xuXG5yZWdpc3RlckNvaW5Db25zdHJ1Y3RvcnMoR2xvYmFsQ29pbkZhY3RvcnkpO1xuIl19