PHP WebShell
Текущая директория: /usr/lib/node_modules/bitgo/node_modules/avalanche/typings/tests/common
Просмотр файла: payload.test.js
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const buffer_1 = require("buffer/");
const payload_1 = require("../../src/utils/payload");
const bintools_1 = __importDefault(require("../../src/utils/bintools"));
const bn_js_1 = __importDefault(require("bn.js"));
const bech32 = __importStar(require("bech32"));
const payloadTypes = payload_1.PayloadTypes.getInstance();
const bintools = bintools_1.default.getInstance();
describe("Payload", () => {
const hrp = "tests";
const cb58str = "MBcQpm1PsdfBKYscN3AYP56MusRDMZGF9";
const cb58buf = bintools.bufferToB58(bintools.cb58Decode(cb58str));
const bech = bech32.bech32.encode(hrp, bech32.bech32.toWords(bintools.b58ToBuffer(cb58buf)));
const binstr = "Bx4v7ytutz3";
const utf8str = "I am the very model of a modern Major-General.";
const utf8b58 = bintools.bufferToB58(buffer_1.Buffer.from(utf8str));
const utf8hex = buffer_1.Buffer.from(utf8str).toString("hex");
const utf8b64 = buffer_1.Buffer.from(utf8str).toString("base64");
const bnhex = "deadbeef";
const svgstr = "<svg>hi mom</svg>";
const csvstr = "1,2,3,4,5\neverybody,in the,house,come along, let's ride";
const jsonobj = { boom: "goes the dynamite" };
const yamlstr = "---\nrootproperty: blah\nsection:\n one: two\n three: four\n Foo: Bar\n empty: ~";
const emailstr = "example@example.com";
const urlstr = "https://example.com";
const ipfsstr = "QmUy4jh5mGNZvLkjies1RWM4YuvJh5o2FYopNPVYwrRVGV";
const onionstr = "https://el33th4xor.onion";
const magnetstr = "magnet:?xt=urn:btih:c12fe1c06bba254a9dc9f519b335aa7c1367a88a";
test("PayloadTypes", () => {
expect(() => {
payloadTypes.select(867309);
}).toThrow();
expect(payloadTypes.lookupID("BIN")).toBe(0);
const binpayload = payloadTypes.select(0, binstr);
const utf8payload = payloadTypes.select(1, utf8str);
const hexstrpayload = payloadTypes.select(2, bnhex);
const emailpayload = payloadTypes.select(26, emailstr);
expect(payloadTypes.getTypeID(binpayload.toBuffer())).toBe(0);
expect(payloadTypes.getTypeID(utf8payload.toBuffer())).toBe(1);
expect(payloadTypes.getTypeID(hexstrpayload.toBuffer())).toBe(2);
expect(payloadTypes.getTypeID(emailpayload.toBuffer())).toBe(26);
const pp = payloadTypes.getContent(binpayload.toBuffer());
expect(bintools.b58ToBuffer(binstr).toString("hex")).toBe(pp.toString("hex"));
expect(payloadTypes.lookupType(0)).toBe("BIN");
expect(payloadTypes.recast(binpayload).toBuffer().toString("hex")).toBe(binpayload.toBuffer().toString("hex"));
});
const testTable = [
["BIN", binstr, binstr],
["UTF8", utf8str, utf8b58],
["HEXSTR", utf8hex, utf8b58],
["B58STR", utf8b58, utf8b58],
["B64STR", utf8b64, utf8b58],
["BIGNUM", bnhex, bintools.bufferToB58(buffer_1.Buffer.from(bnhex, "hex"))],
["XCHAINADDR", "X-" + bech, cb58buf],
["PCHAINADDR", "P-" + bech, cb58buf],
["CCHAINADDR", "C-" + bech, cb58buf],
["TXID", cb58str, cb58buf],
["ASSETID", cb58str, cb58buf],
["UTXOID", cb58str, cb58buf],
["NFTID", cb58str, cb58buf],
["SUBNETID", cb58str, cb58buf],
["CHAINID", cb58str, cb58buf],
["NODEID", cb58str, cb58buf],
["SECPSIG", cb58str, cb58str],
["SECPENC", cb58str, cb58str],
["JPEG", binstr, binstr],
["PNG", binstr, binstr],
["BMP", binstr, binstr],
["ICO", binstr, binstr],
["SVG", svgstr, bintools.bufferToB58(buffer_1.Buffer.from(svgstr))],
["CSV", csvstr, bintools.bufferToB58(buffer_1.Buffer.from(csvstr))],
[
"JSON",
JSON.stringify(jsonobj),
bintools.bufferToB58(buffer_1.Buffer.from(JSON.stringify(jsonobj)))
],
["YAML", yamlstr, bintools.bufferToB58(buffer_1.Buffer.from(yamlstr))],
["EMAIL", emailstr, bintools.bufferToB58(buffer_1.Buffer.from(emailstr))],
["URL", urlstr, bintools.bufferToB58(buffer_1.Buffer.from(urlstr))],
["IPFS", ipfsstr, ipfsstr],
["ONION", onionstr, bintools.bufferToB58(buffer_1.Buffer.from(onionstr))],
["MAGNET", magnetstr, bintools.bufferToB58(buffer_1.Buffer.from(magnetstr))]
];
test.each(testTable)("Basic Payload Test: typestr %s input %s inputbuff %s", (typestr, inputstr, inputbuff) => {
const buff = bintools.b58ToBuffer(inputbuff);
const typeid = payloadTypes.lookupID(typestr);
const typename = payloadTypes.lookupType(typeid);
expect(typename).toBe(typestr);
const c0 = payloadTypes.select(typeid);
expect(c0.typeID()).toBe(typeid);
expect(c0.typeName()).toBe(typename);
const c1 = payloadTypes.select(typeid, buff);
const c2 = payloadTypes.select(typeid, inputstr, hrp);
const c3 = payloadTypes.select(typeid);
c3.fromBuffer(c1.toBuffer());
const c4 = payloadTypes.select(typeid);
c4.fromBuffer(c2.toBuffer());
const s1 = c1.toBuffer().toString("hex");
const s2 = c2.toBuffer().toString("hex");
const s3 = c3.toBuffer().toString("hex");
const s4 = c4.toBuffer().toString("hex");
expect(s1).toBe(s2);
expect(s2).toBe(s3);
expect(s3).toBe(s4);
});
test("BINPayload special cases", () => {
const pl = payloadTypes.select(0, binstr);
expect(bintools.bufferToB58(pl.returnType())).toBe(binstr);
});
test("UTF8Payload special cases", () => {
const pl = new payload_1.UTF8Payload(utf8str);
expect(pl.returnType()).toBe(utf8str);
});
test("HEXSTRPayload special cases", () => {
const pl = new payload_1.HEXSTRPayload(utf8hex);
expect(pl.returnType()).toBe(utf8hex);
});
test("B58STRPayload special cases", () => {
const pl = new payload_1.B58STRPayload(utf8b58);
expect(pl.returnType()).toBe(utf8b58);
});
test("B64STRPayload special cases", () => {
const pl = new payload_1.B64STRPayload(utf8b64);
expect(pl.returnType()).toBe(utf8b64);
});
test("BIGNUMPayload special cases", () => {
const jenny = new bn_js_1.default(8675309);
const pl = new payload_1.BIGNUMPayload(jenny);
expect(pl.returnType().toString("hex")).toBe(jenny.toString("hex"));
});
test("XCHAINADDRPayload special cases", () => {
const addr = `X-${bech}`;
const pl = new payload_1.XCHAINADDRPayload(addr, hrp);
expect(pl.returnType(hrp)).toBe(addr);
expect(pl.returnChainID()).toBe("X");
});
test("PCHAINADDRPayload special cases", () => {
const addr = `P-${bech}`;
const pl = new payload_1.PCHAINADDRPayload(addr, hrp);
expect(pl.returnType(hrp)).toBe(addr);
expect(pl.returnChainID()).toBe("P");
});
test("CCHAINADDRPayload special cases", () => {
const addr = `C-${bech}`;
const pl = new payload_1.CCHAINADDRPayload(addr, hrp);
expect(pl.returnType(hrp)).toBe(addr);
expect(pl.returnChainID()).toBe("C");
});
// handles all of cb58EncodedPayload
test("TXIDPayload special cases", () => {
const pl = new payload_1.TXIDPayload(cb58str);
expect(pl.returnType()).toBe(cb58str);
});
test("JSONPayload special cases", () => {
const pl = new payload_1.JSONPayload(jsonobj);
expect(JSON.stringify(pl.returnType())).toBe(JSON.stringify(jsonobj));
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bG9hZC50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdHMvY29tbW9uL3BheWxvYWQudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0NBQWdDO0FBQ2hDLHFEQWVnQztBQUNoQyx3RUFBK0M7QUFDL0Msa0RBQXNCO0FBQ3RCLCtDQUFnQztBQUNoQyxNQUFNLFlBQVksR0FBaUIsc0JBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtBQUM3RCxNQUFNLFFBQVEsR0FBYSxrQkFBUSxDQUFDLFdBQVcsRUFBRSxDQUFBO0FBRWpELFFBQVEsQ0FBQyxTQUFTLEVBQUUsR0FBUyxFQUFFO0lBQzdCLE1BQU0sR0FBRyxHQUFXLE9BQU8sQ0FBQTtJQUUzQixNQUFNLE9BQU8sR0FBVyxtQ0FBbUMsQ0FBQTtJQUMzRCxNQUFNLE9BQU8sR0FBVyxRQUFRLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtJQUMxRSxNQUFNLElBQUksR0FBVyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FDdkMsR0FBRyxFQUNILE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FDckQsQ0FBQTtJQUNELE1BQU0sTUFBTSxHQUFXLGFBQWEsQ0FBQTtJQUNwQyxNQUFNLE9BQU8sR0FBVyxnREFBZ0QsQ0FBQTtJQUN4RSxNQUFNLE9BQU8sR0FBVyxRQUFRLENBQUMsV0FBVyxDQUFDLGVBQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtJQUNsRSxNQUFNLE9BQU8sR0FBVyxlQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM1RCxNQUFNLE9BQU8sR0FBVyxlQUFNLENBQUMsSUFBSSxDQUFD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QU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDO1FBQzFCLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUM7UUFDNUIsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQztRQUM1QixDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDO1FBQzVCLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsV0FBVyxDQUFDLGVBQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDbEUsQ0FBQyxZQUFZLEVBQUUsSUFBSSxHQUFHLElBQUksRUFBRSxPQUFPLENBQUM7UUFDcEMsQ0FBQyxZQUFZLEVBQUUsSUFBSSxHQUFHLElBQUksRUFBRSxPQUFPLENBQUM7UUFDcEMsQ0FBQyxZQUFZLEVBQUUsSUFBSSxHQUFHLElBQUksRUFBRSxPQUFPLENBQUM7UUFDcEMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQztRQUMxQixDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDO1FBQzdCLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUM7UUFDNUIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQztRQUMzQixDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDO1FBQzlCLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUM7UUFDN0IsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQztRQUM1QixDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDO1FBQzdCLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUM7UUFDN0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQztRQUN4QixDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDO1FBQ3ZCLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7UUFD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Q0FBQyxDQUFBO1FBQ2hELE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDdkMsQ0FBQyxDQUFDLENBQUE7SUFFRixJQUFJLENBQUMsMkJBQTJCLEVBQUUsR0FBUyxFQUFFO1FBQzNDLE1BQU0sRUFBRSxHQUFnQixJQUFJLHFCQUFXLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDaEQsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO0lBQ3ZFLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCdWZmZXIgfSBmcm9tIFwiYnVmZmVyL1wiXG5pbXBvcnQge1xuICBQYXlsb2FkVHlwZXMsXG4gIEJJTlBheWxvYWQsXG4gIFBheWxvYWRCYXNlLFxuICBVVEY4UGF5bG9hZCxcbiAgSEVYU1RSUGF5bG9hZCxcbiAgQjU4U1RSUGF5bG9hZCxcbiAgQjY0U1RSUGF5bG9hZCxcbiAgQklHTlVNUGF5bG9hZCxcbiAgWENIQUlOQUREUlBheWxvYWQsXG4gIFBDSEFJTkFERFJQYXlsb2FkLFxuICBDQ0hBSU5BRERSUGF5bG9hZCxcbiAgVFhJRFBheWxvYWQsXG4gIEpTT05QYXlsb2FkLFxuICBFTUFJTFBheWxvYWRcbn0gZnJvbSBcIi4uLy4uL3NyYy91dGlscy9wYXlsb2FkXCJcbmltcG9ydCBCaW5Ub29scyBmcm9tIFwiLi4vLi4vc3JjL3V0aWxzL2JpbnRvb2xzXCJcbmltcG9ydCBCTiBmcm9tIFwiYm4uanNcIlxuaW1wb3J0ICogYXMgYmVjaDMyIGZyb20gXCJiZWNoMzJcIlxuY29uc3QgcGF5bG9hZFR5cGVzOiBQYXlsb2FkVHlwZXMgPSBQYXlsb2FkVHlwZXMuZ2V0SW5zdGFuY2UoKVxuY29uc3QgYmludG9vbHM6IEJpblRvb2xzID0gQmluVG9vbHMuZ2V0SW5zdGFuY2UoKVxuXG5kZXNjcmliZShcIlBheWxvYWRcIiwgKCk6IHZvaWQgPT4ge1xuICBjb25zdCBocnA6IHN0cmluZyA9IFwidGVzdHNcIlxuXG4gIGNvbnN0IGNiNThzdHI6IHN0cmluZyA9IFwiTUJjUXBtMVBzZGZCS1lzY04zQVlQNTZNdXNSRE1aR0Y5XCJcbiAgY29uc3QgY2I1OGJ1Zjogc3RyaW5nID0gYmludG9vbHMuYnVmZmVyVG9CNTgoYmludG9vbHMuY2I1OERlY29kZShjYjU4c3RyKSlcbiAgY29uc3QgYmVjaDogc3RyaW5nID0gYmVjaDMyLmJlY2gzMi5lbmNvZGUoXG4gICAgaHJwLFxuICAgIGJlY2gzMi5iZWNoMzIudG9Xb3JkcyhiaW50b29scy5iNThUb0J1ZmZlcihjYjU4YnVmKSlcbiAgKVxuICBjb25zdCBiaW5zdHI6IHN0cmluZyA9IFwiQng0djd5dHV0ejNcIlxuICBjb25zdCB1dGY4c3RyOiBzdHJpbmcgPSBcIkkgYW0gdGhlIHZlcnkgbW9kZWwgb2YgYSBtb2Rlcm4gTWFqb3ItR2VuZXJhbC5cIlxuICBjb25zdCB1dGY4YjU4OiBzdHJpbmcgPSBiaW50b29scy5idWZmZXJUb0I1OChCdWZmZXIuZnJvbSh1dGY4c3RyKSlcbiAgY29uc3QgdXRmOGhleDogc3RyaW5nID0gQnVmZmVyLmZyb20odXRmOHN0cikudG9TdHJpbmcoXCJoZXhcIilcbiAgY29uc3QgdXRmOGI2NDogc3RyaW5nID0gQnVmZmVyLmZyb20odXRmOHN0cikudG9TdHJpbmcoXCJiYXNlNjRcIilcbiAgY29uc3QgYm5oZXg6IHN0cmluZyA9IFwiZGVhZGJlZWZcIlxuICBjb25zdCBzdmdzdHI6IHN0cmluZyA9IFwiPHN2Zz5oaSBtb208L3N2Zz5cIlxuICBjb25zdCBjc3ZzdHI6IHN0cmluZyA9XG4gICAgXCIxLDIsMyw0LDVcXG5ldmVyeWJvZHksaW4gdGhlLGhvdXNlLGNvbWUgYWxvbmcsIGxldCdzIHJpZGVcIlxuICBjb25zdCBqc29ub2JqOiBvYmplY3QgPSB7IGJvb206IFwiZ29lcyB0aGUgZHluYW1pdGVcIiB9XG4gIGNvbnN0IHlhbWxzdHI6IHN0cmluZyA9XG4gICAgXCItLS1cXG5yb290cHJvcGVydHk6IGJsYWhcXG5zZWN0aW9uOlxcbiAgb25lOiB0d29cXG4gIHRocmVlOiBmb3VyXFxuICBGb286IEJhclxcbiAgZW1wdHk6IH5cIlxuICBjb25zdCBlbWFpbHN0cjogc3RyaW5nID0gXCJleGFtcGxlQGV4YW1wbGUuY29tXCJcbiAgY29uc3QgdXJsc3RyOiBzdHJpbmcgPSBcImh0dHBzOi8vZXhhbXBsZS5jb21cIlxuICBjb25zdCBpcGZzc3RyOiBzdHJpbmcgPSBcIlFtVXk0amg1bUdOWnZMa2ppZXMxUldNNFl1dkpoNW8yRllvcE5QVll3clJWR1ZcIlxuICBjb25zdCBvbmlvbnN0cjogc3RyaW5nID0gXCJodHRwczovL2VsMzN0aDR4b3Iub25pb25cIlxuICBjb25zdCBtYWduZXRzdHI6IHN0cmluZyA9XG4gICAgXCJtYWduZXQ6P3h0PXVybjpidGloOmMxMmZlMWMwNmJiYTI1NGE5ZGM5ZjUxOWIzMzVhYTdjMTM2N2E4OGFcIlxuXG4gIHRlc3QoXCJQYXlsb2FkVHlwZXNcIiwgKCk6IHZvaWQgPT4ge1xuICAgIGV4cGVjdCgoKTogdm9pZCA9PiB7XG4gICAgICBwYXlsb2FkVHlwZXMuc2VsZWN0KDg2NzMwOSlcbiAgICB9KS50b1Rocm93KClcblxuICAgIGV4cGVjdChwYXlsb2FkVHlwZXMubG9va3VwSUQoXCJCSU5cIikpLnRvQmUoMClcblxuICAgIGNvbnN0IGJpbnBheWxvYWQgPSBwYXlsb2FkVHlwZXMuc2VsZWN0KDAsIGJpbnN0cikgYXMgQklOUGF5bG9hZFxuICAgIGNvbnN0IHV0ZjhwYXlsb2FkID0gcGF5bG9hZFR5cGVzLnNlbGVjdCgxLCB1dGY4c3RyKSBhcyBVVEY4UGF5bG9hZFxuICAgIGNvbnN0IGhleHN0cnBheWxvYWQgPSBwYXlsb2FkVHlwZXMuc2VsZWN0KDIsIGJuaGV4KSBhcyBIRVhTVFJQYXlsb2FkXG4gICAgY29uc3QgZW1haWxwYXlsb2FkID0gcGF5bG9hZFR5cGVzLnNlbGVjdCgyNiwgZW1haWxzdHIpIGFzIEVNQUlMUGF5bG9hZFxuXG4gICAgZXhwZWN0KHBheWxvYWRUeXBlcy5nZXRUeXBlSUQoYmlucGF5bG9hZC50b0J1ZmZlcigpKSkudG9CZSgwKVxuICAgIGV4cGVjdChwYXlsb2FkVHlwZXMuZ2V0VHlwZUlEKHV0ZjhwYXlsb2FkLnRvQnVmZmVyKCkpKS50b0JlKDEpXG4gICAgZXhwZWN0KHBheWxvYWRUeXBlcy5nZXRUeXBlSUQoaGV4c3RycGF5bG9hZC50b0J1ZmZlcigpKSkudG9CZSgyKVxuICAgIGV4cGVjdChwYXlsb2FkVHlwZXMuZ2V0VHlwZUlEKGVtYWlscGF5bG9hZC50b0J1ZmZlcigpKSkudG9CZSgyNilcblxuICAgIGNvbnN0IHBwOiBCdWZmZXIgPSBwYXlsb2FkVHlwZXMuZ2V0Q29udGVudChiaW5wYXlsb2FkLnRvQnVmZmVyKCkpXG5cbiAgICBleHBlY3QoYmludG9vbHMuYjU4VG9CdWZmZXIoYmluc3RyKS50b1N0cmluZyhcImhleFwiKSkudG9CZShcbiAgICAgIHBwLnRvU3RyaW5nKFwiaGV4XCIpXG4gICAgKVxuICAgIGV4cGVjdChwYXlsb2FkVHlwZXMubG9va3VwVHlwZSgwKSkudG9CZShcIkJJTlwiKVxuICAgIGV4cGVjdChwYXlsb2FkVHlwZXMucmVjYXN0KGJpbnBheWxvYWQpLnRvQnVmZmVyKCkudG9TdHJpbmcoXCJoZXhcIikpLnRvQmUoXG4gICAgICBiaW5wYXlsb2FkLnRvQnVmZmVyKCkudG9TdHJpbmcoXCJoZXhcIilcbiAgICApXG4gIH0pXG5cbiAgY29uc3QgdGVzdFRhYmxlOiBhbnlbXSA9IFtcbiAgICBbXCJCSU5cIiwgYmluc3RyLCBiaW5zdHJdLFxuICAgIFtcIlVURjhcIiwgdXRmOHN0ciwgdXRmOGI1OF0sXG4gICAgW1wiSEVYU1RSXCIsIHV0ZjhoZXgsIHV0ZjhiNThdLFxuICAgIFtcIkI1OFNUUlwiLCB1dGY4YjU4LCB1dGY4YjU4XSxcbiAgICBbXCJCNjRTVFJcIiwgdXRmOGI2NCwgdXRmOGI1OF0sXG4gICAgW1wiQklHTlVNXCIsIGJuaGV4LCBiaW50b29scy5idWZmZXJUb0I1OChCdWZmZXIuZnJvbShibmhleCwgXCJoZXhcIikpXSxcbiAgICBbXCJYQ0hBSU5BRERSXCIsIFwiWC1cIiArIGJlY2gsIGNiNThidWZdLFxuICAgIFtcIlBDSEFJTkFERFJcIiwgXCJQLVwiICsgYmVjaCwgY2I1OGJ1Zl0sXG4gICAgW1wiQ0NIQUlOQUREUlwiLCBcIkMtXCIgKyBiZWNoLCBjYjU4YnVmXSxcbiAgICBbXCJUWElEXCIsIGNiNThzdHIsIGNiNThidWZdLFxuICAgIFtcIkFTU0VUSURcIiwgY2I1OHN0ciwgY2I1OGJ1Zl0sXG4gICAgW1wiVVRYT0lEXCIsIGNiNThzdHIsIGNiNThidWZdLFxuICAgIFtcIk5GVElEXCIsIGNiNThzdHIsIGNiNThidWZdLFxuICAgIFtcIlNVQk5FVElEXCIsIGNiNThzdHIsIGNiNThidWZdLFxuICAgIFtcIkNIQUlOSURcIiwgY2I1OHN0ciwgY2I1OGJ1Zl0sXG4gICAgW1wiTk9ERUlEXCIsIGNiNThzdHIsIGNiNThidWZdLFxuICAgIFtcIlNFQ1BTSUdcIiwgY2I1OHN0ciwgY2I1OHN0cl0sXG4gICAgW1wiU0VDUEVOQ1wiLCBjYjU4c3RyLCBjYjU4c3RyXSxcbiAgICBbXCJKUEVHXCIsIGJpbnN0ciwgYmluc3RyXSxcbiAgICBbXCJQTkdcIiwgYmluc3RyLCBiaW5zdHJdLFxuICAgIFtcIkJNUFwiLCBiaW5zdHIsIGJpbnN0cl0sXG4gICAgW1wiSUNPXCIsIGJpbnN0ciwgYmluc3RyXSxcbiAgICBbXCJTVkdcIiwgc3Znc3RyLCBiaW50b29scy5idWZmZXJUb0I1OChCdWZmZXIuZnJvbShzdmdzdHIpKV0sXG4gICAgW1wiQ1NWXCIsIGNzdnN0ciwgYmludG9vbHMuYnVmZmVyVG9CNTgoQnVmZmVyLmZyb20oY3N2c3RyKSldLFxuICAgIFtcbiAgICAgIFwiSlNPTlwiLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoanNvbm9iaiksXG4gICAgICBiaW50b29scy5idWZmZXJUb0I1OChCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShqc29ub2JqKSkpXG4gICAgXSxcbiAgICBbXCJZQU1MXCIsIHlhbWxzdHIsIGJpbnRvb2xzLmJ1ZmZlclRvQjU4KEJ1ZmZlci5mcm9tKHlhbWxzdHIpKV0sXG4gICAgW1wiRU1BSUxcIiwgZW1haWxzdHIsIGJpbnRvb2xzLmJ1ZmZlclRvQjU4KEJ1ZmZlci5mcm9tKGVtYWlsc3RyKSldLFxuICAgIFtcIlVSTFwiLCB1cmxzdHIsIGJpbnRvb2xzLmJ1ZmZlclRvQjU4KEJ1ZmZlci5mcm9tKHVybHN0cikpXSxcbiAgICBbXCJJUEZTXCIsIGlwZnNzdHIsIGlwZnNzdHJdLFxuICAgIFtcIk9OSU9OXCIsIG9uaW9uc3RyLCBiaW50b29scy5idWZmZXJUb0I1OChCdWZmZXIuZnJvbShvbmlvbnN0cikpXSxcbiAgICBbXCJNQUdORVRcIiwgbWFnbmV0c3RyLCBiaW50b29scy5idWZmZXJUb0I1OChCdWZmZXIuZnJvbShtYWduZXRzdHIpKV1cbiAgXVxuICB0ZXN0LmVhY2godGVzdFRhYmxlKShcbiAgICBcIkJhc2ljIFBheWxvYWQgVGVzdDogdHlwZXN0ciAlcyBpbnB1dCAlcyBpbnB1dGJ1ZmYgJXNcIixcbiAgICAodHlwZXN0cjogc3RyaW5nLCBpbnB1dHN0cjogc3RyaW5nLCBpbnB1dGJ1ZmY6IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgYnVmZjogQnVmZmVyID0gYmludG9vbHMuYjU4VG9CdWZmZXIoaW5wdXRidWZmKVxuICAgICAgY29uc3QgdHlwZWlkOiBudW1iZXIgPSBwYXlsb2FkVHlwZXMubG9va3VwSUQodHlwZXN0cilcbiAgICAgIGNvbnN0IHR5cGVuYW1lOiBzdHJpbmcgPSBwYXlsb2FkVHlwZXMubG9va3VwVHlwZSh0eXBlaWQpXG4gICAgICBleHBlY3QodHlwZW5hbWUpLnRvQmUodHlwZXN0cilcbiAgICAgIGNvbnN0IGMwOiBQYXlsb2FkQmFzZSA9IHBheWxvYWRUeXBlcy5zZWxlY3QodHlwZWlkKVxuICAgICAgZXhwZWN0KGMwLnR5cGVJRCgpKS50b0JlKHR5cGVpZClcbiAgICAgIGV4cGVjdChjMC50eXBlTmFtZSgpKS50b0JlKHR5cGVuYW1lKVxuICAgICAgY29uc3QgYzE6IFBheWxvYWRCYXNlID0gcGF5bG9hZFR5cGVzLnNlbGVjdCh0eXBlaWQsIGJ1ZmYpXG4gICAgICBjb25zdCBjMjogUGF5bG9hZEJhc2UgPSBwYXlsb2FkVHlwZXMuc2VsZWN0KHR5cGVpZCwgaW5wdXRzdHIsIGhycClcbiAgICAgIGNvbnN0IGMzOiBQYXlsb2FkQmFzZSA9IHBheWxvYWRUeXBlcy5zZWxlY3QodHlwZWlkKVxuICAgICAgYzMuZnJvbUJ1ZmZlcihjMS50b0J1ZmZlcigpKVxuICAgICAgY29uc3QgYzQ6IFBheWxvYWRCYXNlID0gcGF5bG9hZFR5cGVzLnNlbGVjdCh0eXBlaWQpXG4gICAgICBjNC5mcm9tQnVmZmVyKGMyLnRvQnVmZmVyKCkpXG5cbiAgICAgIGNvbnN0IHMxOiBzdHJpbmcgPSBjMS50b0J1ZmZlcigpLnRvU3RyaW5nKFwiaGV4XCIpXG4gICAgICBjb25zdCBzMjogc3RyaW5nID0gYzIudG9CdWZmZXIoKS50b1N0cmluZyhcImhleFwiKVxuICAgICAgY29uc3QgczM6IHN0cmluZyA9IGMzLnRvQnVmZmVyKCkudG9TdHJpbmcoXCJoZXhcIilcbiAgICAgIGNvbnN0IHM0OiBzdHJpbmcgPSBjNC50b0J1ZmZlcigpLnRvU3RyaW5nKFwiaGV4XCIpXG5cbiAgICAgIGV4cGVjdChzMSkudG9CZShzMilcbiAgICAgIGV4cGVjdChzMikudG9CZShzMylcbiAgICAgIGV4cGVjdChzMykudG9CZShzNClcbiAgICB9XG4gIClcblxuICB0ZXN0KFwiQklOUGF5bG9hZCBzcGVjaWFsIGNhc2VzXCIsICgpOiB2b2lkID0+IHtcbiAgICBjb25zdCBwbDogQklOUGF5bG9hZCA9IHBheWxvYWRUeXBlcy5zZWxlY3QoMCwgYmluc3RyKSBhcyBCSU5QYXlsb2FkXG4gICAgZXhwZWN0KGJpbnRvb2xzLmJ1ZmZlclRvQjU4KHBsLnJldHVyblR5cGUoKSkpLnRvQmUoYmluc3RyKVxuICB9KVxuXG4gIHRlc3QoXCJVVEY4UGF5bG9hZCBzcGVjaWFsIGNhc2VzXCIsICgpOiB2b2lkID0+IHtcbiAgICBjb25zdCBwbDogVVRGOFBheWxvYWQgPSBuZXcgVVRGOFBheWxvYWQodXRmOHN0cilcbiAgICBleHBlY3QocGwucmV0dXJuVHlwZSgpKS50b0JlKHV0ZjhzdHIpXG4gIH0pXG5cbiAgdGVzdChcIkhFWFNUUlBheWxvYWQgc3BlY2lhbCBjYXNlc1wiLCAoKTogdm9pZCA9PiB7XG4gICAgY29uc3QgcGw6IEhFWFNUUlBheWxvYWQgPSBuZXcgSEVYU1RSUGF5bG9hZCh1dGY4aGV4KVxuICAgIGV4cGVjdChwbC5yZXR1cm5UeXBlKCkpLnRvQmUodXRmOGhleClcbiAgfSlcblxuICB0ZXN0KFwiQjU4U1RSUGF5bG9hZCBzcGVjaWFsIGNhc2VzXCIsICgpOiB2b2lkID0+IHtcbiAgICBjb25zdCBwbDogQjU4U1RSUGF5bG9hZCA9IG5ldyBCNThTVFJQYXlsb2FkKHV0ZjhiNTgpXG4gICAgZXhwZWN0KHBsLnJldHVyblR5cGUoKSkudG9CZSh1dGY4YjU4KVxuICB9KVxuXG4gIHRlc3QoXCJCNjRTVFJQYXlsb2FkIHNwZWNpYWwgY2FzZXNcIiwgKCk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IHBsOiBCNjRTVFJQYXlsb2FkID0gbmV3IEI2NFNUUlBheWxvYWQodXRmOGI2NClcbiAgICBleHBlY3QocGwucmV0dXJuVHlwZSgpKS50b0JlKHV0ZjhiNjQpXG4gIH0pXG5cbiAgdGVzdChcIkJJR05VTVBheWxvYWQgc3BlY2lhbCBjYXNlc1wiLCAoKTogdm9pZCA9PiB7XG4gICAgY29uc3QgamVubnk6IEJOID0gbmV3IEJOKDg2NzUzMDkpXG4gICAgY29uc3QgcGw6IEJJR05VTVBheWxvYWQgPSBuZXcgQklHTlVNUGF5bG9hZChqZW5ueSlcbiAgICBleHBlY3QocGwucmV0dXJuVHlwZSgpLnRvU3RyaW5nKFwiaGV4XCIpKS50b0JlKGplbm55LnRvU3RyaW5nKFwiaGV4XCIpKVxuICB9KVxuXG4gIHRlc3QoXCJYQ0hBSU5BRERSUGF5bG9hZCBzcGVjaWFsIGNhc2VzXCIsICgpOiB2b2lkID0+IHtcbiAgICBjb25zdCBhZGRyOiBzdHJpbmcgPSBgWC0ke2JlY2h9YFxuICAgIGNvbnN0IHBsOiBYQ0hBSU5BRERSUGF5bG9hZCA9IG5ldyBYQ0hBSU5BRERSUGF5bG9hZChhZGRyLCBocnApXG4gICAgZXhwZWN0KHBsLnJldHVyblR5cGUoaHJwKSkudG9CZShhZGRyKVxuICAgIGV4cGVjdChwbC5yZXR1cm5DaGFpbklEKCkpLnRvQmUoXCJYXCIpXG4gIH0pXG5cbiAgdGVzdChcIlBDSEFJTkFERFJQYXlsb2FkIHNwZWNpYWwgY2FzZXNcIiwgKCk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IGFkZHI6IHN0cmluZyA9IGBQLSR7YmVjaH1gXG4gICAgY29uc3QgcGw6IFBDSEFJTkFERFJQYXlsb2FkID0gbmV3IFBDSEFJTkFERFJQYXlsb2FkKGFkZHIsIGhycClcbiAgICBleHBlY3QocGwucmV0dXJuVHlwZShocnApKS50b0JlKGFkZHIpXG4gICAgZXhwZWN0KHBsLnJldHVybkNoYWluSUQoKSkudG9CZShcIlBcIilcbiAgfSlcblxuICB0ZXN0KFwiQ0NIQUlOQUREUlBheWxvYWQgc3BlY2lhbCBjYXNlc1wiLCAoKTogdm9pZCA9PiB7XG4gICAgY29uc3QgYWRkcjogc3RyaW5nID0gYEMtJHtiZWNofWBcbiAgICBjb25zdCBwbDogQ0NIQUlOQUREUlBheWxvYWQgPSBuZXcgQ0NIQUlOQUREUlBheWxvYWQoYWRkciwgaHJwKVxuICAgIGV4cGVjdChwbC5yZXR1cm5UeXBlKGhycCkpLnRvQmUoYWRkcilcbiAgICBleHBlY3QocGwucmV0dXJuQ2hhaW5JRCgpKS50b0JlKFwiQ1wiKVxuICB9KVxuXG4gIC8vIGhhbmRsZXMgYWxsIG9mIGNiNThFbmNvZGVkUGF5bG9hZFxuICB0ZXN0KFwiVFhJRFBheWxvYWQgc3BlY2lhbCBjYXNlc1wiLCAoKTogdm9pZCA9PiB7XG4gICAgY29uc3QgcGw6IFRYSURQYXlsb2FkID0gbmV3IFRYSURQYXlsb2FkKGNiNThzdHIpXG4gICAgZXhwZWN0KHBsLnJldHVyblR5cGUoKSkudG9CZShjYjU4c3RyKVxuICB9KVxuXG4gIHRlc3QoXCJKU09OUGF5bG9hZCBzcGVjaWFsIGNhc2VzXCIsICgpOiB2b2lkID0+IHtcbiAgICBjb25zdCBwbDogSlNPTlBheWxvYWQgPSBuZXcgSlNPTlBheWxvYWQoanNvbm9iailcbiAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkocGwucmV0dXJuVHlwZSgpKSkudG9CZShKU09OLnN0cmluZ2lmeShqc29ub2JqKSlcbiAgfSlcbn0pXG4iXX0=Выполнить команду
Для локальной разработки. Не используйте в интернете!