PHP WebShell

Текущая директория: /opt/BitGoJS/modules/utxo-lib/dist/test

Просмотр файла: classify.spec.js

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const assert = require("assert");
const mocha_1 = require("mocha");
const classify = require("../src/classify");
const src_1 = require("../src/");
const fixtures = require("./fixtures/templates.json");
const multisig = require("../src/templates/multisig");
const nullData = require("../src/templates/nulldata");
const pubKey = require("../src/templates/pubkey");
const pubKeyHash = require("../src/templates/pubkeyhash");
const scriptHash = require("../src/templates/scripthash");
const taproot = require("../src/templates/taproot");
const taprootnofn = require("../src/templates/taprootnofn");
const witnessCommitment = require("../src/templates/witnesscommitment");
const witnessPubKeyHash = require("../src/templates/witnesspubkeyhash");
const witnessScriptHash = require("../src/templates/witnessscripthash");
const tmap = {
    pubKey,
    pubKeyHash,
    scriptHash,
    witnessPubKeyHash,
    witnessScriptHash,
    taproot,
    taprootnofn,
    multisig,
    nullData,
    witnessCommitment,
};
(0, mocha_1.describe)('classify', () => {
    (0, mocha_1.describe)('input', () => {
        fixtures.valid.forEach((f) => {
            if (!f.input)
                return;
            (0, mocha_1.it)('classifies ' + f.input + ' as ' + f.type, () => {
                const input = src_1.script.fromASM(f.input);
                const type = classify.input(input);
                assert.strictEqual(type, f.type);
            });
        });
        fixtures.valid.forEach((f) => {
            if (!f.input)
                return;
            if (!f.typeIncomplete)
                return;
            (0, mocha_1.it)('classifies incomplete ' + f.input + ' as ' + f.typeIncomplete, () => {
                const input = src_1.script.fromASM(f.input);
                const type = classify.input(input, true);
                assert.strictEqual(type, f.typeIncomplete);
            });
        });
    });
    (0, mocha_1.describe)('classifyOutput', () => {
        fixtures.valid.forEach((f) => {
            if (!f.output)
                return;
            (0, mocha_1.it)('classifies ' + f.output + ' as ' + f.type, () => {
                const output = src_1.script.fromASM(f.output);
                const type = classify.output(output);
                assert.strictEqual(type, f.type);
            });
        });
    });
    (0, mocha_1.describe)('classifyWitness', () => {
        fixtures.valid.forEach((f) => {
            if (!f.witnessData)
                return;
            (0, mocha_1.it)('classifies ' + f.witnessData + ' as ' + f.type, () => {
                const chunks = f.witnessData.map((chunkStr) => Buffer.from(chunkStr, 'hex'));
                if (f.witnessScript) {
                    const witnessScript = src_1.script.fromASM(f.witnessScript);
                    chunks.push(witnessScript);
                }
                const type = classify.witness(chunks);
                assert.strictEqual(type, f.type);
            });
        });
    });
    [
        'pubKey',
        'pubKeyHash',
        'scriptHash',
        'witnessPubKeyHash',
        'witnessScriptHash',
        'taproot',
        'taprootnofn',
        'multisig',
        'nullData',
        'witnessCommitment',
    ].forEach((name) => {
        const inputType = tmap[name].input;
        const outputType = tmap[name].output;
        (0, mocha_1.describe)(name + '.input.check', () => {
            fixtures.valid.forEach((f) => {
                if (name.toLowerCase() === classify.types.P2WPKH)
                    return;
                if (name.toLowerCase() === classify.types.P2WSH)
                    return;
                const expected = name.toLowerCase() === f.type.toLowerCase();
                if (inputType && f.input) {
                    const input = src_1.script.fromASM(f.input);
                    (0, mocha_1.it)('returns ' + expected + ' for ' + f.input, () => {
                        assert.strictEqual(inputType.check(input), expected);
                    });
                    if (f.typeIncomplete) {
                        const expectedIncomplete = name.toLowerCase() === f.typeIncomplete;
                        (0, mocha_1.it)('returns ' + expected + ' for ' + f.input, () => {
                            assert.strictEqual(inputType.check(input, true), expectedIncomplete);
                        });
                    }
                }
            });
            if (!fixtures.invalid[name])
                return;
            fixtures.invalid[name].inputs.forEach((f) => {
                if (!f.input && !f.inputHex)
                    return;
                (0, mocha_1.it)('returns false for ' + f.description + ' (' + (f.input || f.inputHex) + ')', () => {
                    let input;
                    if (f.input) {
                        input = src_1.script.fromASM(f.input);
                    }
                    else {
                        input = Buffer.from(f.inputHex, 'hex');
                    }
                    assert.strictEqual(inputType.check(input), false);
                });
            });
        });
        (0, mocha_1.describe)(name + '.output.check', () => {
            fixtures.valid.forEach((f) => {
                const expected = name.toLowerCase() === f.type;
                if (outputType && f.output) {
                    (0, mocha_1.it)('returns ' + expected + ' for ' + f.output, () => {
                        const output = src_1.script.fromASM(f.output);
                        if (name.toLowerCase() === 'nulldata' && f.type === classify.types.WITNESS_COMMITMENT)
                            return;
                        if (name.toLowerCase() === 'witnesscommitment' && f.type === classify.types.NULLDATA)
                            return;
                        assert.strictEqual(outputType.check(output), expected);
                    });
                }
            });
            if (!fixtures.invalid[name])
                return;
            fixtures.invalid[name].outputs.forEach((f) => {
                if (!f.output && !f.outputHex)
                    return;
                (0, mocha_1.it)('returns false for ' + f.description + ' (' + (f.output || f.outputHex) + ')', () => {
                    let output;
                    if (f.output) {
                        output = src_1.script.fromASM(f.output);
                    }
                    else {
                        output = Buffer.from(f.outputHex, 'hex');
                    }
                    assert.strictEqual(outputType.check(output), false);
                });
            });
        });
    });
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3NpZnkuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3Rlc3QvY2xhc3NpZnkuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGlDQUFpQztBQUNqQyxpQ0FBcUM7QUFDckMsNENBQTRDO0FBQzVDLGlDQUE0QztBQUU1QyxzREFBc0Q7QUFFdEQsc0RBQXNEO0FBQ3RELHNEQUFzRDtBQUN0RCxrREFBa0Q7QUFDbEQsMERBQTBEO0FBQzFELDBEQUEwRDtBQUMxRCxvREFBb0Q7QUFDcEQsNERBQTREO0FBQzVELHdFQUF3RTtBQUN4RSx3RUFBd0U7QUFDeEUsd0VBQXdFO0FBRXhFLE1BQU0sSUFBSSxHQUFHO0lBQ1gsTUFBTTtJQUNOLFVBQVU7SUFDVixVQUFVO0lBQ1YsaUJBQWlCO0lBQ2pCLGlCQUFpQjtJQUNqQixPQUFPO0lBQ1AsV0FBVztJQUNYLFFBQVE7SUFDUixRQUFRO0lBQ1IsaUJBQWlCO0NBQ2xCLENBQUM7QUFFRixJQUFBLGdCQUFRLEVBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRTtJQUN4QixJQUFBLGdCQUFRLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtRQUNyQixRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQzNCLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSztnQkFBRSxPQUFPO1lBRXJCLElBQUEsVUFBRSxFQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRTtnQkFDakQsTUFBTSxLQUFLLEdBQUcsWUFBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRW5DLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJ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RUFBRTtnQkFDekQsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUztvQkFBRSxPQUFPO2dCQUV0QyxJQUFBLFVBQUUsRUFBQyxvQkFBb0IsR0FBRyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUU7b0JBQ3JGLElBQUksTUFBTSxDQUFDO29CQUVYLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO3dCQUNiLE1BQU0sR0FBRyxZQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDckMsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQzNDLENBQUM7b0JBRUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN0RCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyBkZXNjcmliZSwgaXQgfSBmcm9tICdtb2NoYSc7XG5pbXBvcnQgKiBhcyBjbGFzc2lmeSBmcm9tICcuLi9zcmMvY2xhc3NpZnknO1xuaW1wb3J0IHsgc2NyaXB0IGFzIGJzY3JpcHQgfSBmcm9tICcuLi9zcmMvJztcblxuaW1wb3J0ICogYXMgZml4dHVyZXMgZnJvbSAnLi9maXh0dXJlcy90ZW1wbGF0ZXMuanNvbic7XG5cbmltcG9ydCAqIGFzIG11bHRpc2lnIGZyb20gJy4uL3NyYy90ZW1wbGF0ZXMvbXVsdGlzaWcnO1xuaW1wb3J0ICogYXMgbnVsbERhdGEgZnJvbSAnLi4vc3JjL3RlbXBsYXRlcy9udWxsZGF0YSc7XG5pbXBvcnQgKiBhcyBwdWJLZXkgZnJvbSAnLi4vc3JjL3RlbXBsYXRlcy9wdWJrZXknO1xuaW1wb3J0ICogYXMgcHViS2V5SGFzaCBmcm9tICcuLi9zcmMvdGVtcGxhdGVzL3B1YmtleWhhc2gnO1xuaW1wb3J0ICogYXMgc2NyaXB0SGFzaCBmcm9tICcuLi9zcmMvdGVtcGxhdGVzL3NjcmlwdGhhc2gnO1xuaW1wb3J0ICogYXMgdGFwcm9vdCBmcm9tICcuLi9zcmMvdGVtcGxhdGVzL3RhcHJvb3QnO1xuaW1wb3J0ICogYXMgdGFwcm9vdG5vZm4gZnJvbSAnLi4vc3JjL3RlbXBsYXRlcy90YXByb290bm9mbic7XG5pbXBvcnQgKiBhcyB3aXRuZXNzQ29tbWl0bWVudCBmcm9tICcuLi9zcmMvdGVtcGxhdGVzL3dpdG5lc3Njb21taXRtZW50JztcbmltcG9ydCAqIGFzIHdpdG5lc3NQdWJLZXlIYXNoIGZyb20gJy4uL3NyYy90ZW1wbGF0ZXMvd2l0bmVzc3B1YmtleWhhc2gnO1xuaW1wb3J0ICogYXMgd2l0bmVzc1NjcmlwdEhhc2ggZnJvbSAnLi4vc3JjL3RlbXBsYXRlcy93aXRuZXNzc2NyaXB0aGFzaCc7XG5cbmNvbnN0IHRtYXAgPSB7XG4gIHB1YktleSxcbiAgcHViS2V5SGFzaCxcbiAgc2NyaXB0SGFzaCxcbiAgd2l0bmVzc1B1YktleUhhc2gsXG4gIHdpdG5lc3NTY3JpcHRIYXNoLFxuICB0YXByb290LFxuICB0YXByb290bm9mbixcbiAgbXVsdGlzaWcsXG4gIG51bGxEYXRhLFxuICB3aXRuZXNzQ29tbWl0bWVudCxcbn07XG5cbmRlc2NyaWJlKCdjbGFzc2lmeScsICgpID0+IHtcbiAgZGVzY3JpYmUoJ2lucHV0JywgKCkgPT4ge1xuICAgIGZpeHR1cmVzLnZhbGlkLmZvckVhY2goKGYpID0+IHtcbiAgICAgIGlmICghZi5pbnB1dCkgcmV0dXJuO1xuXG4gICAgICBpdCgnY2xhc3NpZmllcyAnICsgZi5pbnB1dCArICcgYXMgJyArIGYudHlwZSwgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IGJzY3JpcHQuZnJvbUFTTShmLmlucHV0KTtcbiAgICAgICAgY29uc3QgdHlwZSA9IGNsYXNzaWZ5LmlucHV0KGlucHV0KTtcblxuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZSwgZi50eXBlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZml4dHVyZXMudmFsaWQuZm9yRWFjaCgoZikgPT4ge1xuICAgICAgaWYgKCFmLmlucHV0KSByZXR1cm47XG4gICAgICBpZiAoIWYudHlwZUluY29tcGxldGUpIHJldHVybjtcblxuICAgICAgaXQoJ2NsYXNzaWZpZXMgaW5jb21wbGV0ZSAnICsgZi5pbnB1dCArICcgYXMgJyArIGYudHlwZUluY29tcGxldGUsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBic2NyaXB0LmZyb21BU00oZi5pbnB1dCk7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBjbGFzc2lmeS5pbnB1dChpbnB1dCwgdHJ1ZSk7XG5cbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGUsIGYudHlwZUluY29tcGxldGUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjbGFzc2lmeU91dHB1dCcsICgpID0+IHtcbiAgICBmaXh0dXJlcy52YWxpZC5mb3JFYWNoKChmKSA9PiB7XG4gICAgICBpZiAoIWYub3V0cHV0KSByZXR1cm47XG5cbiAgICAgIGl0KCdjbGFzc2lmaWVzICcgKyBmLm91dHB1dCArICcgYXMgJyArIGYudHlwZSwgKCkgPT4ge1xuICAgICAgICBjb25zdCBvdXRwdXQgPSBic2NyaXB0LmZyb21BU00oZi5vdXRwdXQpO1xuICAgICAgICBjb25zdCB0eXBlID0gY2xhc3NpZnkub3V0cHV0KG91dHB1dCk7XG5cbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGUsIGYudHlwZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2NsYXNzaWZ5V2l0bmVzcycsICgpID0+IHtcbiAgICBmaXh0dXJlcy52YWxpZC5mb3JFYWNoKChmKSA9PiB7XG4gICAgICBpZiAoIWYud2l0bmVzc0RhdGEpIHJldHVybjtcblxuICAgICAgaXQoJ2NsYXNzaWZpZXMgJyArIGYud2l0bmVzc0RhdGEgKyAnIGFzICcgKyBmLnR5cGUsICgpID0+IHtcbiAgICAgICAgY29uc3QgY2h1bmtzID0gZi53aXRuZXNzRGF0YS5tYXAoKGNodW5rU3RyKSA9PiBCdWZmZXIuZnJvbShjaHVua1N0ciwgJ2hleCcpKTtcbiAgICAgICAgaWYgKGYud2l0bmVzc1NjcmlwdCkge1xuICAgICAgICAgIGNvbnN0IHdpdG5lc3NTY3JpcHQgPSBic2NyaXB0LmZyb21BU00oZi53aXRuZXNzU2NyaXB0KTtcbiAgICAgICAgICBjaHVua3MucHVzaCh3aXRuZXNzU2NyaXB0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0eXBlID0gY2xhc3NpZnkud2l0bmVzcyhjaHVua3MpO1xuXG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlLCBmLnR5cGUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIFtcbiAgICAncHViS2V5JyxcbiAgICAncHViS2V5SGFzaCcsXG4gICAgJ3NjcmlwdEhhc2gnLFxuICAgICd3aXRuZXNzUHViS2V5SGFzaCcsXG4gICAgJ3dpdG5lc3NTY3JpcHRIYXNoJyxcbiAgICAndGFwcm9vdCcsXG4gICAgJ3RhcHJvb3Rub2ZuJyxcbiAgICAnbXVsdGlzaWcnLFxuICAgICdudWxsRGF0YScsXG4gICAgJ3dpdG5lc3NDb21taXRtZW50JyxcbiAgXS5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgY29uc3QgaW5wdXRUeXBlID0gKHRtYXAgYXMgYW55KVtuYW1lXS5pbnB1dDtcbiAgICBjb25zdCBvdXRwdXRUeXBlID0gKHRtYXAgYXMgYW55KVtuYW1lXS5vdXRwdXQ7XG5cbiAgICBkZXNjcmliZShuYW1lICsgJy5pbnB1dC5jaGVjaycsICgpID0+IHtcbiAgICAgIGZpeHR1cmVzLnZhbGlkLmZvckVhY2goKGYpID0+IHtcbiAgICAgICAgaWYgKG5hbWUudG9Mb3dlckNhc2UoKSA9PT0gY2xhc3NpZnkudHlwZXMuUDJXUEtIKSByZXR1cm47XG4gICAgICAgIGlmIChuYW1lLnRvTG93ZXJDYXNlKCkgPT09IGNsYXNzaWZ5LnR5cGVzLlAyV1NIKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gbmFtZS50b0xvd2VyQ2FzZSgpID09PSBmLnR5cGUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICBpZiAoaW5wdXRUeXBlICYmIGYuaW5wdXQpIHtcbiAgICAgICAgICBjb25zdCBpbnB1dCA9IGJzY3JpcHQuZnJvbUFTTShmLmlucHV0KTtcblxuICAgICAgICAgIGl0KCdyZXR1cm5zICcgKyBleHBlY3RlZCArICcgZm9yICcgKyBmLmlucHV0LCAoKSA9PiB7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaW5wdXRUeXBlLmNoZWNrKGlucHV0KSwgZXhwZWN0ZWQpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKGYudHlwZUluY29tcGxldGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkSW5jb21wbGV0ZSA9IG5hbWUudG9Mb3dlckNhc2UoKSA9PT0gZi50eXBlSW5jb21wbGV0ZTtcblxuICAgICAgICAgICAgaXQoJ3JldHVybnMgJyArIGV4cGVjdGVkICsgJyBmb3IgJyArIGYuaW5wdXQsICgpID0+IHtcbiAgICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlucHV0VHlwZS5jaGVjayhpbnB1dCwgdHJ1ZSksIGV4cGVjdGVkSW5jb21wbGV0ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIShmaXh0dXJlcy5pbnZhbGlkIGFzIGFueSlbbmFtZV0pIHJldHVybjtcblxuICAgICAgKGZpeHR1cmVzLmludmFsaWQgYXMgYW55KVtuYW1lXS5pbnB1dHMuZm9yRWFjaCgoZjogYW55KSA9PiB7XG4gICAgICAgIGlmICghZi5pbnB1dCAmJiAhZi5pbnB1dEhleCkgcmV0dXJuO1xuXG4gICAgICAgIGl0KCdyZXR1cm5zIGZhbHNlIGZvciAnICsgZi5kZXNjcmlwdGlvbiArICcgKCcgKyAoZi5pbnB1dCB8fCBmLmlucHV0SGV4KSArICcpJywgKCkgPT4ge1xuICAgICAgICAgIGxldCBpbnB1dDtcblxuICAgICAgICAgIGlmIChmLmlucHV0KSB7XG4gICAgICAgICAgICBpbnB1dCA9IGJzY3JpcHQuZnJvbUFTTShmLmlucHV0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5wdXQgPSBCdWZmZXIuZnJvbShmLmlucHV0SGV4LCAnaGV4Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlucHV0VHlwZS5jaGVjayhpbnB1dCksIGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKG5hbWUgKyAnLm91dHB1dC5jaGVjaycsICgpID0+IHtcbiAgICAgIGZpeHR1cmVzLnZhbGlkLmZvckVhY2goKGYpID0+IHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBuYW1lLnRvTG93ZXJDYXNlKCkgPT09IGYudHlwZTtcblxuICAgICAgICBpZiAob3V0cHV0VHlwZSAmJiBmLm91dHB1dCkge1xuICAgICAgICAgIGl0KCdyZXR1cm5zICcgKyBleHBlY3RlZCArICcgZm9yICcgKyBmLm91dHB1dCwgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3V0cHV0ID0gYnNjcmlwdC5mcm9tQVNNKGYub3V0cHV0KTtcblxuICAgICAgICAgICAgaWYgKG5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ251bGxkYXRhJyAmJiBmLnR5cGUgPT09IGNsYXNzaWZ5LnR5cGVzLldJVE5FU1NfQ09NTUlUTUVOVCkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKG5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ3dpdG5lc3Njb21taXRtZW50JyAmJiBmLnR5cGUgPT09IGNsYXNzaWZ5LnR5cGVzLk5VTExEQVRBKSByZXR1cm47XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwob3V0cHV0VHlwZS5jaGVjayhvdXRwdXQpLCBleHBlY3RlZCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIShmaXh0dXJlcy5pbnZhbGlkIGFzIGFueSlbbmFtZV0pIHJldHVybjtcblxuICAgICAgKGZpeHR1cmVzLmludmFsaWQgYXMgYW55KVtuYW1lXS5vdXRwdXRzLmZvckVhY2goKGY6IGFueSkgPT4ge1xuICAgICAgICBpZiAoIWYub3V0cHV0ICYmICFmLm91dHB1dEhleCkgcmV0dXJuO1xuXG4gICAgICAgIGl0KCdyZXR1cm5zIGZhbHNlIGZvciAnICsgZi5kZXNjcmlwdGlvbiArICcgKCcgKyAoZi5vdXRwdXQgfHwgZi5vdXRwdXRIZXgpICsgJyknLCAoKSA9PiB7XG4gICAgICAgICAgbGV0IG91dHB1dDtcblxuICAgICAgICAgIGlmIChmLm91dHB1dCkge1xuICAgICAgICAgICAgb3V0cHV0ID0gYnNjcmlwdC5mcm9tQVNNKGYub3V0cHV0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0cHV0ID0gQnVmZmVyLmZyb20oZi5vdXRwdXRIZXgsICdoZXgnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwob3V0cHV0VHlwZS5jaGVjayhvdXRwdXQpLCBmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=

Выполнить команду


Для локальной разработки. Не используйте в интернете!