PHP WebShell

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

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

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
/* eslint-disable @typescript-eslint/ban-ts-comment */
const should_1 = __importDefault(require("should"));
const src_1 = require("../src");
describe('chain codes', function () {
    const externalList = [src_1.Codes.external.p2sh, src_1.Codes.external.p2shP2wsh, src_1.Codes.external.p2wsh, src_1.Codes.external.p2tr];
    const internalList = [src_1.Codes.internal.p2sh, src_1.Codes.internal.p2shP2wsh, src_1.Codes.internal.p2wsh, src_1.Codes.internal.p2tr];
    const purposeByScriptTypeList = [src_1.Codes.p2sh, src_1.Codes.p2shP2wsh, src_1.Codes.p2wsh, src_1.Codes.p2tr];
    const supportedUnspentTypeList = [
        src_1.CodesTypes.UnspentType.p2sh,
        src_1.CodesTypes.UnspentType.p2shP2wsh,
        src_1.CodesTypes.UnspentType.p2wsh,
        src_1.CodesTypes.UnspentType.p2tr,
    ];
    const unsupportedUnspentTypeList = [src_1.CodesTypes.UnspentType.p2pkh, src_1.CodesTypes.UnspentType.p2wpkh];
    it(`is immutable`, function () {
        const p2sh = src_1.Codes.internal.p2sh;
        should_1.default.throws(() => {
            // @ts-ignore
            src_1.Codes.internal.p2sh = -1;
        }, TypeError);
        src_1.Codes.internal.p2sh.should.eql(p2sh);
        should_1.default.throws(() => {
            // @ts-ignore
            src_1.Codes.internal.values.push(-1);
        }, TypeError);
        should_1.default.throws(() => {
            // @ts-ignore
            src_1.Codes.internal.values = [];
        }, TypeError);
        src_1.Codes.internal.values.should.eql([1, 11, 21, 31]);
        should_1.default.throws(() => {
            // @ts-ignore
            src_1.Codes.all = [];
        });
        src_1.Codes.all.should.not.be.empty();
    });
    it('matches expected values', function () {
        externalList.should.eql([src_1.Codes.p2sh.external, src_1.Codes.p2shP2wsh.external, src_1.Codes.p2wsh.external, src_1.Codes.p2tr.external]);
        externalList.should.eql([0, 10, 20, 30]);
        externalList.should.eql([...src_1.Codes.external.values]);
        src_1.Codes.all.should.eql([...externalList, ...internalList]);
        internalList.should.eql([src_1.Codes.p2sh.internal, src_1.Codes.p2shP2wsh.internal, src_1.Codes.p2wsh.internal, src_1.Codes.p2tr.internal]);
        internalList.should.eql([1, 11, 21, 31]);
        internalList.should.eql([...src_1.Codes.internal.values]);
    });
    it('are grouped correctly', function () {
        internalList.should.matchEach(src_1.Codes.isInternal);
        externalList.should.matchEach(src_1.Codes.isExternal);
        // all are either internal or external, never none or both
        src_1.Codes.all.should.matchEach((code) => !!(src_1.Codes.isExternal(code) !== src_1.Codes.isInternal(code)));
        src_1.Codes.p2sh.values.should.matchEach(src_1.Codes.isP2sh);
        src_1.Codes.p2shP2wsh.values.should.matchEach(src_1.Codes.isP2shP2wsh);
        src_1.Codes.p2wsh.values.should.matchEach(src_1.Codes.isP2wsh);
        src_1.Codes.p2tr.values.should.matchEach(src_1.Codes.isP2tr);
        // every code has exactly one address type
        src_1.Codes.all.should.matchEach((code) => 1 ===
            [src_1.Codes.isP2sh(code), src_1.Codes.isP2wsh(code), src_1.Codes.isP2shP2wsh(code), src_1.Codes.isP2tr(code)].reduce((sum, v) => sum + Number(v), 0));
        src_1.Codes.all.should.matchEach(src_1.Codes.isValid);
    });
    const invalidInputs = [undefined, null, 'lol', -1, 42];
    it('throws correct error for invalid input', function () {
        [
            src_1.Codes.isInternal,
            src_1.Codes.isExternal,
            src_1.Codes.isP2sh,
            src_1.Codes.isP2shP2wsh,
            src_1.Codes.isP2wsh,
            src_1.Codes.isP2tr,
            src_1.Codes.typeForCode,
        ].forEach((func) => 
        // @ts-ignore
        invalidInputs.forEach((input) => should_1.default.throws(() => func(input), src_1.Codes.ErrorInvalidCode)));
        invalidInputs.should.matchEach((input) => !src_1.Codes.isValid(input));
    });
    it('map to unspent types', function () {
        [...externalList, ...internalList].forEach((code, index) => src_1.Codes.typeForCode(code).should.equal([...supportedUnspentTypeList, ...supportedUnspentTypeList][index]));
    });
    it('map from unspent types', function () {
        supportedUnspentTypeList.forEach((type, index) => src_1.Codes.forType(type).should.eql(purposeByScriptTypeList[index]));
        unsupportedUnspentTypeList.forEach((type) => should_1.default.throws(() => src_1.Codes.forType(type)));
    });
    it(`has chain type`, function () {
        src_1.Codes.all.should.matchEach((code) => src_1.Codes.ChainCodeTcomb(code) === code && src_1.Codes.ChainCodeTcomb.is(code));
        invalidInputs.forEach((code) => should_1.default.throws(() => src_1.Codes.ChainCodeTcomb(code)));
    });
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90ZXN0L2NoYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsc0RBQXNEO0FBQ3RELG9EQUE0QjtBQUM1QixnQ0FBMkM7QUFFM0MsUUFBUSxDQUFDLGFBQWEsRUFBRTtJQUN0QixNQUFNLFlBQVksR0FBRyxDQUFDLFdBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFdBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLFdBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFdBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFaEgsTUFBTSxZQUFZLEdBQUcsQ0FBQyxXQUFLLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxXQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxXQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxXQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRWhILE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxXQUFLLENBQUMsSUFBSSxFQUFFLFdBQUssQ0FBQyxTQUFTLEVBQUUsV0FBSyxDQUFDLEtBQUssRUFBRSxXQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFdkYsTUFBTSx3QkFBd0IsR0FBRztRQUMvQixnQkFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJO1FBQzNCLGdCQUFVLENBQUMsV0FBVyxDQUFDLFNBQVM7UUFDaEMsZ0JBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSztRQUM1QixnQkFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJO0tBQzVCLENBQUM7SUFFRixNQUFNLDBCQUEwQixHQUFHLENBQUMsZ0JBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLGdCQUFVLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRWpHLEVBQUUsQ0FBQyxjQUFjLEVBQUU7UUFDakIsTUFBTSxJQUFJLEdBQUcsV0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDakMsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ2pCLGFBQWE7WUFDYixXQUFLLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMzQixDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDZCxXQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXJDLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNqQixhQUFhO1lBQ2IsV0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRWQsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ2pCLGFBQWE7WUFDYixXQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDN0IsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2QsV0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFbEQsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ2pCLGFBQWE7WUFDYixXQUFLLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztRQUNILFdBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDbEMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMseUJBQXlCLEVBQUU7UUFDNUIsWUFBWSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxXQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxXQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDcEgsWUFBWSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxXQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFFcEQsV0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxZQUFZLEVBQUUsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQ3pELFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsV0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsV0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3BILFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN6QyxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsV0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3RELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHVCQUF1QixFQUFFO1FBQzFCLFlBQVksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoRCxZQUFZLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxXQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFaEQsMERBQTBEO1FBQzFELFdBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxXQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU1RixXQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqRCxXQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzRCxXQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuRCxXQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVqRCwwQ0FBMEM7UUFDMUMsV0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUN4QixDQUFDLElBQUksRUFBRSxFQUFFLENBQ1AsQ0FBQztZQUNELENBQUMsV0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxXQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLFdBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsV0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FDM0YsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUMzQixDQUFDLENBQ0YsQ0FDSixDQUFDO1FBRUYsV0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QyxDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sYUFBYSxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFdkQsRUFBRSxDQUFDLHdDQUF3QyxFQUFFO1FBQzNDO1lBQ0UsV0FBSyxDQUFDLFVBQVU7WUFDaEIsV0FBSyxDQUFDLFVBQVU7WUFDaEIsV0FBSyxDQUFDLE1BQU07WUFDWixXQUFLLENBQUMsV0FBVztZQUNqQixXQUFLLENBQUMsT0FBTztZQUNiLFdBQUssQ0FBQyxNQUFNO1lBQ1osV0FBSyxDQUFDLFdBQVc7U0FDbEIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUNqQixhQUFhO1FBQ2IsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLFdBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQzNGLENBQUM7UUFFRixhQUFhLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbkUsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsc0JBQXNCLEVBQUU7UUFDekIsQ0FBQyxHQUFHLFlBQVksRUFBRSxHQUFHLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUN6RCxXQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLHdCQUF3QixFQUFFLEdBQUcsd0JBQXdCLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUN4RyxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsd0JBQXdCLEVBQUU7UUFDM0Isd0JBQXdCLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsV0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVsSCwwQkFBMEIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pGLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLGdCQUFnQixFQUFFO1FBQ25CLFdBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsV0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksV0FBSyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMzRyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFLLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50ICovXG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBDb2RlcywgQ29kZXNUeXBlcyB9IGZyb20gJy4uL3NyYyc7XG5cbmRlc2NyaWJlKCdjaGFpbiBjb2RlcycsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgZXh0ZXJuYWxMaXN0ID0gW0NvZGVzLmV4dGVybmFsLnAyc2gsIENvZGVzLmV4dGVybmFsLnAyc2hQMndzaCwgQ29kZXMuZXh0ZXJuYWwucDJ3c2gsIENvZGVzLmV4dGVybmFsLnAydHJdO1xuXG4gIGNvbnN0IGludGVybmFsTGlzdCA9IFtDb2Rlcy5pbnRlcm5hbC5wMnNoLCBDb2Rlcy5pbnRlcm5hbC5wMnNoUDJ3c2gsIENvZGVzLmludGVybmFsLnAyd3NoLCBDb2Rlcy5pbnRlcm5hbC5wMnRyXTtcblxuICBjb25zdCBwdXJwb3NlQnlTY3JpcHRUeXBlTGlzdCA9IFtDb2Rlcy5wMnNoLCBDb2Rlcy5wMnNoUDJ3c2gsIENvZGVzLnAyd3NoLCBDb2Rlcy5wMnRyXTtcblxuICBjb25zdCBzdXBwb3J0ZWRVbnNwZW50VHlwZUxpc3QgPSBbXG4gICAgQ29kZXNUeXBlcy5VbnNwZW50VHlwZS5wMnNoLFxuICAgIENvZGVzVHlwZXMuVW5zcGVudFR5cGUucDJzaFAyd3NoLFxuICAgIENvZGVzVHlwZXMuVW5zcGVudFR5cGUucDJ3c2gsXG4gICAgQ29kZXNUeXBlcy5VbnNwZW50VHlwZS5wMnRyLFxuICBdO1xuXG4gIGNvbnN0IHVuc3VwcG9ydGVkVW5zcGVudFR5cGVMaXN0ID0gW0NvZGVzVHlwZXMuVW5zcGVudFR5cGUucDJwa2gsIENvZGVzVHlwZXMuVW5zcGVudFR5cGUucDJ3cGtoXTtcblxuICBpdChgaXMgaW1tdXRhYmxlYCwgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHAyc2ggPSBDb2Rlcy5pbnRlcm5hbC5wMnNoO1xuICAgIHNob3VsZC50aHJvd3MoKCkgPT4ge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgQ29kZXMuaW50ZXJuYWwucDJzaCA9IC0xO1xuICAgIH0sIFR5cGVFcnJvcik7XG4gICAgQ29kZXMuaW50ZXJuYWwucDJzaC5zaG91bGQuZXFsKHAyc2gpO1xuXG4gICAgc2hvdWxkLnRocm93cygoKSA9PiB7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBDb2Rlcy5pbnRlcm5hbC52YWx1ZXMucHVzaCgtMSk7XG4gICAgfSwgVHlwZUVycm9yKTtcblxuICAgIHNob3VsZC50aHJvd3MoKCkgPT4ge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgQ29kZXMuaW50ZXJuYWwudmFsdWVzID0gW107XG4gICAgfSwgVHlwZUVycm9yKTtcbiAgICBDb2Rlcy5pbnRlcm5hbC52YWx1ZXMuc2hvdWxkLmVxbChbMSwgMTEsIDIxLCAzMV0pO1xuXG4gICAgc2hvdWxkLnRocm93cygoKSA9PiB7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBDb2Rlcy5hbGwgPSBbXTtcbiAgICB9KTtcbiAgICBDb2Rlcy5hbGwuc2hvdWxkLm5vdC5iZS5lbXB0eSgpO1xuICB9KTtcblxuICBpdCgnbWF0Y2hlcyBleHBlY3RlZCB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgZXh0ZXJuYWxMaXN0LnNob3VsZC5lcWwoW0NvZGVzLnAyc2guZXh0ZXJuYWwsIENvZGVzLnAyc2hQMndzaC5leHRlcm5hbCwgQ29kZXMucDJ3c2guZXh0ZXJuYWwsIENvZGVzLnAydHIuZXh0ZXJuYWxdKTtcbiAgICBleHRlcm5hbExpc3Quc2hvdWxkLmVxbChbMCwgMTAsIDIwLCAzMF0pO1xuICAgIGV4dGVybmFsTGlzdC5zaG91bGQuZXFsKFsuLi5Db2Rlcy5leHRlcm5hbC52YWx1ZXNdKTtcblxuICAgIENvZGVzLmFsbC5zaG91bGQuZXFsKFsuLi5leHRlcm5hbExpc3QsIC4uLmludGVybmFsTGlzdF0pO1xuICAgIGludGVybmFsTGlzdC5zaG91bGQuZXFsKFtDb2Rlcy5wMnNoLmludGVybmFsLCBDb2Rlcy5wMnNoUDJ3c2guaW50ZXJuYWwsIENvZGVzLnAyd3NoLmludGVybmFsLCBDb2Rlcy5wMnRyLmludGVybmFsXSk7XG4gICAgaW50ZXJuYWxMaXN0LnNob3VsZC5lcWwoWzEsIDExLCAyMSwgMzFdKTtcbiAgICBpbnRlcm5hbExpc3Quc2hvdWxkLmVxbChbLi4uQ29kZXMuaW50ZXJuYWwudmFsdWVzXSk7XG4gIH0pO1xuXG4gIGl0KCdhcmUgZ3JvdXBlZCBjb3JyZWN0bHknLCBmdW5jdGlvbiAoKSB7XG4gICAgaW50ZXJuYWxMaXN0LnNob3VsZC5tYXRjaEVhY2goQ29kZXMuaXNJbnRlcm5hbCk7XG4gICAgZXh0ZXJuYWxMaXN0LnNob3VsZC5tYXRjaEVhY2goQ29kZXMuaXNFeHRlcm5hbCk7XG5cbiAgICAvLyBhbGwgYXJlIGVpdGhlciBpbnRlcm5hbCBvciBleHRlcm5hbCwgbmV2ZXIgbm9uZSBvciBib3RoXG4gICAgQ29kZXMuYWxsLnNob3VsZC5tYXRjaEVhY2goKGNvZGUpID0+ICEhKENvZGVzLmlzRXh0ZXJuYWwoY29kZSkgIT09IENvZGVzLmlzSW50ZXJuYWwoY29kZSkpKTtcblxuICAgIENvZGVzLnAyc2gudmFsdWVzLnNob3VsZC5tYXRjaEVhY2goQ29kZXMuaXNQMnNoKTtcbiAgICBDb2Rlcy5wMnNoUDJ3c2gudmFsdWVzLnNob3VsZC5tYXRjaEVhY2goQ29kZXMuaXNQMnNoUDJ3c2gpO1xuICAgIENvZGVzLnAyd3NoLnZhbHVlcy5zaG91bGQubWF0Y2hFYWNoKENvZGVzLmlzUDJ3c2gpO1xuICAgIENvZGVzLnAydHIudmFsdWVzLnNob3VsZC5tYXRjaEVhY2goQ29kZXMuaXNQMnRyKTtcblxuICAgIC8vIGV2ZXJ5IGNvZGUgaGFzIGV4YWN0bHkgb25lIGFkZHJlc3MgdHlwZVxuICAgIENvZGVzLmFsbC5zaG91bGQubWF0Y2hFYWNoKFxuICAgICAgKGNvZGUpID0+XG4gICAgICAgIDEgPT09XG4gICAgICAgIFtDb2Rlcy5pc1Ayc2goY29kZSksIENvZGVzLmlzUDJ3c2goY29kZSksIENvZGVzLmlzUDJzaFAyd3NoKGNvZGUpLCBDb2Rlcy5pc1AydHIoY29kZSldLnJlZHVjZShcbiAgICAgICAgICAoc3VtLCB2KSA9PiBzdW0gKyBOdW1iZXIodiksXG4gICAgICAgICAgMFxuICAgICAgICApXG4gICAgKTtcblxuICAgIENvZGVzLmFsbC5zaG91bGQubWF0Y2hFYWNoKENvZGVzLmlzVmFsaWQpO1xuICB9KTtcblxuICBjb25zdCBpbnZhbGlkSW5wdXRzID0gW3VuZGVmaW5lZCwgbnVsbCwgJ2xvbCcsIC0xLCA0Ml07XG5cbiAgaXQoJ3Rocm93cyBjb3JyZWN0IGVycm9yIGZvciBpbnZhbGlkIGlucHV0JywgZnVuY3Rpb24gKCkge1xuICAgIFtcbiAgICAgIENvZGVzLmlzSW50ZXJuYWwsXG4gICAgICBDb2Rlcy5pc0V4dGVybmFsLFxuICAgICAgQ29kZXMuaXNQMnNoLFxuICAgICAgQ29kZXMuaXNQMnNoUDJ3c2gsXG4gICAgICBDb2Rlcy5pc1Ayd3NoLFxuICAgICAgQ29kZXMuaXNQMnRyLFxuICAgICAgQ29kZXMudHlwZUZvckNvZGUsXG4gICAgXS5mb3JFYWNoKChmdW5jKSA9PlxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgaW52YWxpZElucHV0cy5mb3JFYWNoKChpbnB1dCkgPT4gc2hvdWxkLnRocm93cygoKSA9PiBmdW5jKGlucHV0KSwgQ29kZXMuRXJyb3JJbnZhbGlkQ29kZSkpXG4gICAgKTtcblxuICAgIGludmFsaWRJbnB1dHMuc2hvdWxkLm1hdGNoRWFjaCgoaW5wdXQpID0+ICFDb2Rlcy5pc1ZhbGlkKGlucHV0KSk7XG4gIH0pO1xuXG4gIGl0KCdtYXAgdG8gdW5zcGVudCB0eXBlcycsIGZ1bmN0aW9uICgpIHtcbiAgICBbLi4uZXh0ZXJuYWxMaXN0LCAuLi5pbnRlcm5hbExpc3RdLmZvckVhY2goKGNvZGUsIGluZGV4KSA9PlxuICAgICAgQ29kZXMudHlwZUZvckNvZGUoY29kZSkuc2hvdWxkLmVxdWFsKFsuLi5zdXBwb3J0ZWRVbnNwZW50VHlwZUxpc3QsIC4uLnN1cHBvcnRlZFVuc3BlbnRUeXBlTGlzdF1baW5kZXhdKVxuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdtYXAgZnJvbSB1bnNwZW50IHR5cGVzJywgZnVuY3Rpb24gKCkge1xuICAgIHN1cHBvcnRlZFVuc3BlbnRUeXBlTGlzdC5mb3JFYWNoKCh0eXBlLCBpbmRleCkgPT4gQ29kZXMuZm9yVHlwZSh0eXBlKS5zaG91bGQuZXFsKHB1cnBvc2VCeVNjcmlwdFR5cGVMaXN0W2luZGV4XSkpO1xuXG4gICAgdW5zdXBwb3J0ZWRVbnNwZW50VHlwZUxpc3QuZm9yRWFjaCgodHlwZSkgPT4gc2hvdWxkLnRocm93cygoKSA9PiBDb2Rlcy5mb3JUeXBlKHR5cGUpKSk7XG4gIH0pO1xuXG4gIGl0KGBoYXMgY2hhaW4gdHlwZWAsIGZ1bmN0aW9uICgpIHtcbiAgICBDb2Rlcy5hbGwuc2hvdWxkLm1hdGNoRWFjaCgoY29kZSkgPT4gQ29kZXMuQ2hhaW5Db2RlVGNvbWIoY29kZSkgPT09IGNvZGUgJiYgQ29kZXMuQ2hhaW5Db2RlVGNvbWIuaXMoY29kZSkpO1xuICAgIGludmFsaWRJbnB1dHMuZm9yRWFjaCgoY29kZTogYW55KSA9PiBzaG91bGQudGhyb3dzKCgpID0+IENvZGVzLkNoYWluQ29kZVRjb21iKGNvZGUpKSk7XG4gIH0pO1xufSk7XG4iXX0=

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


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