PHP WebShell
Текущая директория: /usr/lib/node_modules/bitgo/node_modules/@bitgo/utxo-lib/dist/src/bitgo/zcash
Просмотр файла: ZcashTransactionBuilder.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ZcashTransactionBuilder = void 0;
const types = require("bitcoinjs-lib/src/types");
const typeforce = require('typeforce');
const ZcashTransaction_1 = require("./ZcashTransaction");
const UtxoTransactionBuilder_1 = require("../UtxoTransactionBuilder");
const address_1 = require("./address");
class ZcashTransactionBuilder extends UtxoTransactionBuilder_1.UtxoTransactionBuilder {
constructor(network) {
super(network);
}
createInitialTransaction(network) {
return new ZcashTransaction_1.ZcashTransaction(network);
}
static fromTransaction(transaction, network, prevOutput) {
const txb = new ZcashTransactionBuilder(transaction.network);
// Copy transaction fields
txb.setVersion(transaction.version, !!transaction.overwintered);
txb.setLockTime(transaction.locktime);
// Copy Zcash overwinter fields. Omitted if the transaction builder is not for Zcash.
if (txb.tx.isOverwinterCompatible()) {
txb.setVersionGroupId(transaction.versionGroupId);
txb.setExpiryHeight(transaction.expiryHeight);
}
txb.setConsensusBranchId(transaction.consensusBranchId);
// Copy outputs (done first to avoid signature invalidation)
transaction.outs.forEach(function (txOut) {
txb.addOutput(txOut.script, txOut.value);
});
// Copy inputs
transaction.ins.forEach(function (txIn) {
txb.__addInputUnsafe(txIn.hash, txIn.index, {
sequence: txIn.sequence,
script: txIn.script,
witness: txIn.witness,
value: txIn.value,
});
});
return txb;
}
setVersion(version, overwinter = true) {
typeforce(types.UInt32, version);
this.tx.overwintered = overwinter ? 1 : 0;
this.tx.version = version;
}
setDefaultsForVersion(network, version) {
switch (version) {
case 4:
case ZcashTransaction_1.ZcashTransaction.VERSION4_BRANCH_CANOPY:
case ZcashTransaction_1.ZcashTransaction.VERSION4_BRANCH_NU5:
case ZcashTransaction_1.ZcashTransaction.VERSION4_BRANCH_NU6:
case ZcashTransaction_1.ZcashTransaction.VERSION4_BRANCH_NU6_1:
this.setVersion(4);
break;
case 5:
case ZcashTransaction_1.ZcashTransaction.VERSION5_BRANCH_NU5:
case ZcashTransaction_1.ZcashTransaction.VERSION5_BRANCH_NU6:
case ZcashTransaction_1.ZcashTransaction.VERSION5_BRANCH_NU6_1:
this.setVersion(5);
break;
default:
throw new Error(`invalid version ${version}`);
}
this.tx.versionGroupId = (0, ZcashTransaction_1.getDefaultVersionGroupIdForVersion)(version);
this.tx.consensusBranchId = (0, ZcashTransaction_1.getDefaultConsensusBranchIdForVersion)(network, version);
}
hasSignatures() {
return this.__INPUTS.some(function (input) {
return input.signatures !== undefined;
});
}
setPropertyCheckSignatures(propName, value) {
if (this.tx[propName] === value) {
return;
}
if (this.hasSignatures()) {
throw new Error(`Changing property ${propName} for a partially signed transaction would invalidate signatures`);
}
this.tx[propName] = value;
}
setConsensusBranchId(consensusBranchId) {
typeforce(types.UInt32, consensusBranchId);
this.setPropertyCheckSignatures('consensusBranchId', consensusBranchId);
}
setVersionGroupId(versionGroupId) {
typeforce(types.UInt32, versionGroupId);
this.setPropertyCheckSignatures('versionGroupId', versionGroupId);
}
setExpiryHeight(expiryHeight) {
typeforce(types.UInt32, expiryHeight);
this.setPropertyCheckSignatures('expiryHeight', expiryHeight);
}
build() {
return super.build();
}
buildIncomplete() {
return super.buildIncomplete();
}
addOutput(scriptPubKey, value) {
// Attempt to get a script if it's a base58 or bech32 address string
if (typeof scriptPubKey === 'string') {
scriptPubKey = (0, address_1.toOutputScript)(scriptPubKey, this.network);
}
return super.addOutput(scriptPubKey, value);
}
}
exports.ZcashTransactionBuilder = ZcashTransactionBuilder;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWmNhc2hUcmFuc2FjdGlvbkJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vemNhc2gvWmNhc2hUcmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsaURBQWlEO0FBQ2pELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUd2Qyx5REFLNEI7QUFDNUIsc0VBQW1FO0FBQ25FLHVDQUEyQztBQUUzQyxNQUFhLHVCQUFrRSxTQUFRLCtDQUd0RjtJQUNDLFlBQVksT0FBcUI7UUFDL0IsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pCLENBQUM7SUFFUyx3QkFBd0IsQ0FBQyxPQUFnQjtRQUNqRCxPQUFPLElBQUksbUNBQWdCLENBQVUsT0FBdUIsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxNQUFNLENBQUMsZUFBZSxDQUNwQixXQUFzQyxFQUN0QyxPQUFpQixFQUNqQixVQUEwQztRQUUxQyxNQUFNLEdBQUcsR0FBRyxJQUFJLHVCQUF1QixDQUFVLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV0RSwwQkFBMEI7UUFDMUIsR0FBRyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDaEUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFdEMscUZBQXFGO1FBQ3JGLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLENBQUM7WUFDcEMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNsRCxHQUFHLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBRUQsR0FBRyxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRXhELDREQUE0RDtRQUM1RCxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEtBQUs7WUFDdEMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztRQUVILGNBQWM7UUFDZCxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUk7WUFDbkMsR0FBVyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDbkQsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN2QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ25CLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztnQkFDckIsS0FBSyxFQUFHLElBQVksQ0FBQyxLQUFLO2FBQzNCLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsVUFBVSxDQUFDLE9BQWUsRUFBRSxVQUFVLEdBQUcsSUFBSTtRQUMzQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUM1QixDQUFDO0lBRUQscUJBQXFCLENBQUMsT0FBZ0IsRUFBRSxPQUFlO1FBQ3JELFFBQVEsT0FBTyxFQUFFLENBQUM7WUFDaEIsS0FBSyxDQUFDLENBQUM7WUFDUCxLQUFLLG1DQUFnQixDQUFDLHNCQUFzQixDQUFDO1lBQzdDLEtBQUssbUNBQWdCLENBQUMsbUJBQW1CLENBQUM7WUFDMUMsS0FBSyxtQ0FBZ0IsQ0FBQyxtQkFBbUIsQ0FBQztZQUMxQyxLQUFLLG1DQUFnQixDQUFDLHFCQUFxQjtnQkFDekMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbkIsTUFBTTtZQUNSLEtBQUssQ0FBQyxDQUFDO1lBQ1AsS0FBSyxtQ0FBZ0IsQ0FBQyxtQkFBbUIsQ0FBQztZQUMxQyxLQUFLLG1DQUFnQixDQUFDLG1CQUFtQixDQUFDO1lBQzFDLEtBQUssbUNBQWdCLENBQUMscUJBQXFCO2dCQUN6QyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNuQixNQUFNO1lBQ1I7Z0JBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBRUQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLEdBQUcsSUFBQSxxREFBa0MsRUFBQyxPQUFPLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsRUFBRSxDQUFDLGlCQUFpQixHQUFHLElBQUEsd0RBQXFDLEVBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFTyxhQUFhO1FBQ25CLE9BQVEsSUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUE4QjtZQUN6RSxPQUFPLEtBQUssQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLDBCQUEwQixDQUFDLFFBQXlDLEVBQUUsS0FBYztRQUMxRixJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDaEMsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLFFBQVEsaUVBQWlFLENBQUMsQ0FBQztRQUNsSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxLQUFZLENBQUM7SUFDbkMsQ0FBQztJQUVELG9CQUFvQixDQUFDLGlCQUF5QjtRQUM1QyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxtQkFBbUIsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxjQUFzQjtRQUN0QyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsMEJBQTBCLENBQUMsZ0JBQWdCLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELGVBQWUsQ0FBQyxZQUFvQjtRQUNsQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsMEJBQTBCLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxLQUFLO1FBQ0gsT0FBTyxLQUFLLENBQUMsS0FBSyxFQUErQixDQUFDO0lBQ3BELENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxLQUFLLENBQUMsZUFBZSxFQUErQixDQUFDO0lBQzlELENBQUM7SUFFRCxTQUFTLENBQUMsWUFBNkIsRUFBRSxLQUFjO1FBQ3JELG9FQUFvRTtRQUNwRSxJQUFJLE9BQU8sWUFBWSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3JDLFlBQVksR0FBRyxJQUFBLHdCQUFjLEVBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFrQixDQUFDLENBQUM7UUFDdkUsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDOUMsQ0FBQztDQUNGO0FBN0hELDBEQTZIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGJpdGNvaW5qcyBmcm9tICdiaXRjb2luanMtbGliJztcbmltcG9ydCAqIGFzIHR5cGVzIGZyb20gJ2JpdGNvaW5qcy1saWIvc3JjL3R5cGVzJztcbmNvbnN0IHR5cGVmb3JjZSA9IHJlcXVpcmUoJ3R5cGVmb3JjZScpO1xuXG5pbXBvcnQgeyBOZXR3b3JrIH0gZnJvbSAnLi4vLi4nO1xuaW1wb3J0IHtcbiAgZ2V0RGVmYXVsdENvbnNlbnN1c0JyYW5jaElkRm9yVmVyc2lvbixcbiAgZ2V0RGVmYXVsdFZlcnNpb25Hcm91cElkRm9yVmVyc2lvbixcbiAgWmNhc2hOZXR3b3JrLFxuICBaY2FzaFRyYW5zYWN0aW9uLFxufSBmcm9tICcuL1pjYXNoVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVXR4b1RyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4uL1V0eG9UcmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgdG9PdXRwdXRTY3JpcHQgfSBmcm9tICcuL2FkZHJlc3MnO1xuXG5leHBvcnQgY2xhc3MgWmNhc2hUcmFuc2FjdGlvbkJ1aWxkZXI8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gZXh0ZW5kcyBVdHhvVHJhbnNhY3Rpb25CdWlsZGVyPFxuICBUTnVtYmVyLFxuICBaY2FzaFRyYW5zYWN0aW9uPFROdW1iZXI+XG4+IHtcbiAgY29uc3RydWN0b3IobmV0d29yazogWmNhc2hOZXR3b3JrKSB7XG4gICAgc3VwZXIobmV0d29yayk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlSW5pdGlhbFRyYW5zYWN0aW9uKG5ldHdvcms6IE5ldHdvcmspOiBaY2FzaFRyYW5zYWN0aW9uPFROdW1iZXI+IHtcbiAgICByZXR1cm4gbmV3IFpjYXNoVHJhbnNhY3Rpb248VE51bWJlcj4obmV0d29yayBhcyBaY2FzaE5ldHdvcmspO1xuICB9XG5cbiAgc3RhdGljIGZyb21UcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgICB0cmFuc2FjdGlvbjogWmNhc2hUcmFuc2FjdGlvbjxUTnVtYmVyPixcbiAgICBuZXR3b3JrPzogTmV0d29yayxcbiAgICBwcmV2T3V0cHV0PzogYml0Y29pbmpzLlR4T3V0cHV0PFROdW1iZXI+W11cbiAgKTogWmNhc2hUcmFuc2FjdGlvbkJ1aWxkZXI8VE51bWJlcj4ge1xuICAgIGNvbnN0IHR4YiA9IG5ldyBaY2FzaFRyYW5zYWN0aW9uQnVpbGRlcjxUTnVtYmVyPih0cmFuc2FjdGlvbi5uZXR3b3JrKTtcblxuICAgIC8vIENvcHkgdHJhbnNhY3Rpb24gZmllbGRzXG4gICAgdHhiLnNldFZlcnNpb24odHJhbnNhY3Rpb24udmVyc2lvbiwgISF0cmFuc2FjdGlvbi5vdmVyd2ludGVyZWQpO1xuICAgIHR4Yi5zZXRMb2NrVGltZSh0cmFuc2FjdGlvbi5sb2NrdGltZSk7XG5cbiAgICAvLyBDb3B5IFpjYXNoIG92ZXJ3aW50ZXIgZmllbGRzLiBPbWl0dGVkIGlmIHRoZSB0cmFuc2FjdGlvbiBidWlsZGVyIGlzIG5vdCBmb3IgWmNhc2guXG4gICAgaWYgKHR4Yi50eC5pc092ZXJ3aW50ZXJDb21wYXRpYmxlKCkpIHtcbiAgICAgIHR4Yi5zZXRWZXJzaW9uR3JvdXBJZCh0cmFuc2FjdGlvbi52ZXJzaW9uR3JvdXBJZCk7XG4gICAgICB0eGIuc2V0RXhwaXJ5SGVpZ2h0KHRyYW5zYWN0aW9uLmV4cGlyeUhlaWdodCk7XG4gICAgfVxuXG4gICAgdHhiLnNldENvbnNlbnN1c0JyYW5jaElkKHRyYW5zYWN0aW9uLmNvbnNlbnN1c0JyYW5jaElkKTtcblxuICAgIC8vIENvcHkgb3V0cHV0cyAoZG9uZSBmaXJzdCB0byBhdm9pZCBzaWduYXR1cmUgaW52YWxpZGF0aW9uKVxuICAgIHRyYW5zYWN0aW9uLm91dHMuZm9yRWFjaChmdW5jdGlvbiAodHhPdXQpIHtcbiAgICAgIHR4Yi5hZGRPdXRwdXQodHhPdXQuc2NyaXB0LCB0eE91dC52YWx1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBDb3B5IGlucHV0c1xuICAgIHRyYW5zYWN0aW9uLmlucy5mb3JFYWNoKGZ1bmN0aW9uICh0eEluKSB7XG4gICAgICAodHhiIGFzIGFueSkuX19hZGRJbnB1dFVuc2FmZSh0eEluLmhhc2gsIHR4SW4uaW5kZXgsIHtcbiAgICAgICAgc2VxdWVuY2U6IHR4SW4uc2VxdWVuY2UsXG4gICAgICAgIHNjcmlwdDogdHhJbi5zY3JpcHQsXG4gICAgICAgIHdpdG5lc3M6IHR4SW4ud2l0bmVzcyxcbiAgICAgICAgdmFsdWU6ICh0eEluIGFzIGFueSkudmFsdWUsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0eGI7XG4gIH1cblxuICBzZXRWZXJzaW9uKHZlcnNpb246IG51bWJlciwgb3ZlcndpbnRlciA9IHRydWUpOiB2b2lkIHtcbiAgICB0eXBlZm9yY2UodHlwZXMuVUludDMyLCB2ZXJzaW9uKTtcbiAgICB0aGlzLnR4Lm92ZXJ3aW50ZXJlZCA9IG92ZXJ3aW50ZXIgPyAxIDogMDtcbiAgICB0aGlzLnR4LnZlcnNpb24gPSB2ZXJzaW9uO1xuICB9XG5cbiAgc2V0RGVmYXVsdHNGb3JWZXJzaW9uKG5ldHdvcms6IE5ldHdvcmssIHZlcnNpb246IG51bWJlcik6IHZvaWQge1xuICAgIHN3aXRjaCAodmVyc2lvbikge1xuICAgICAgY2FzZSA0OlxuICAgICAgY2FzZSBaY2FzaFRyYW5zYWN0aW9uLlZFUlNJT040X0JSQU5DSF9DQU5PUFk6XG4gICAgICBjYXNlIFpjYXNoVHJhbnNhY3Rpb24uVkVSU0lPTjRfQlJBTkNIX05VNTpcbiAgICAgIGNhc2UgWmNhc2hUcmFuc2FjdGlvbi5WRVJTSU9ONF9CUkFOQ0hfTlU2OlxuICAgICAgY2FzZSBaY2FzaFRyYW5zYWN0aW9uLlZFUlNJT040X0JSQU5DSF9OVTZfMTpcbiAgICAgICAgdGhpcy5zZXRWZXJzaW9uKDQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgNTpcbiAgICAgIGNhc2UgWmNhc2hUcmFuc2FjdGlvbi5WRVJTSU9ONV9CUkFOQ0hfTlU1OlxuICAgICAgY2FzZSBaY2FzaFRyYW5zYWN0aW9uLlZFUlNJT041X0JSQU5DSF9OVTY6XG4gICAgICBjYXNlIFpjYXNoVHJhbnNhY3Rpb24uVkVSU0lPTjVfQlJBTkNIX05VNl8xOlxuICAgICAgICB0aGlzLnNldFZlcnNpb24oNSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHZlcnNpb24gJHt2ZXJzaW9ufWApO1xuICAgIH1cblxuICAgIHRoaXMudHgudmVyc2lvbkdyb3VwSWQgPSBnZXREZWZhdWx0VmVyc2lvbkdyb3VwSWRGb3JWZXJzaW9uKHZlcnNpb24pO1xuICAgIHRoaXMudHguY29uc2Vuc3VzQnJhbmNoSWQgPSBnZXREZWZhdWx0Q29uc2Vuc3VzQnJhbmNoSWRGb3JWZXJzaW9uKG5ldHdvcmssIHZlcnNpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNTaWduYXR1cmVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcyBhcyBhbnkpLl9fSU5QVVRTLnNvbWUoZnVuY3Rpb24gKGlucHV0OiB7IHNpZ25hdHVyZXM6IHVua25vd24gfSkge1xuICAgICAgcmV0dXJuIGlucHV0LnNpZ25hdHVyZXMgIT09IHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UHJvcGVydHlDaGVja1NpZ25hdHVyZXMocHJvcE5hbWU6IGtleW9mIFpjYXNoVHJhbnNhY3Rpb248VE51bWJlcj4sIHZhbHVlOiB1bmtub3duKSB7XG4gICAgaWYgKHRoaXMudHhbcHJvcE5hbWVdID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYXNTaWduYXR1cmVzKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2hhbmdpbmcgcHJvcGVydHkgJHtwcm9wTmFtZX0gZm9yIGEgcGFydGlhbGx5IHNpZ25lZCB0cmFuc2FjdGlvbiB3b3VsZCBpbnZhbGlkYXRlIHNpZ25hdHVyZXNgKTtcbiAgICB9XG4gICAgdGhpcy50eFtwcm9wTmFtZV0gPSB2YWx1ZSBhcyBhbnk7XG4gIH1cblxuICBzZXRDb25zZW5zdXNCcmFuY2hJZChjb25zZW5zdXNCcmFuY2hJZDogbnVtYmVyKTogdm9pZCB7XG4gICAgdHlwZWZvcmNlKHR5cGVzLlVJbnQzMiwgY29uc2Vuc3VzQnJhbmNoSWQpO1xuICAgIHRoaXMuc2V0UHJvcGVydHlDaGVja1NpZ25hdHVyZXMoJ2NvbnNlbnN1c0JyYW5jaElkJywgY29uc2Vuc3VzQnJhbmNoSWQpO1xuICB9XG5cbiAgc2V0VmVyc2lvbkdyb3VwSWQodmVyc2lvbkdyb3VwSWQ6IG51bWJlcik6IHZvaWQge1xuICAgIHR5cGVmb3JjZSh0eXBlcy5VSW50MzIsIHZlcnNpb25Hcm91cElkKTtcbiAgICB0aGlzLnNldFByb3BlcnR5Q2hlY2tTaWduYXR1cmVzKCd2ZXJzaW9uR3JvdXBJZCcsIHZlcnNpb25Hcm91cElkKTtcbiAgfVxuXG4gIHNldEV4cGlyeUhlaWdodChleHBpcnlIZWlnaHQ6IG51bWJlcik6IHZvaWQge1xuICAgIHR5cGVmb3JjZSh0eXBlcy5VSW50MzIsIGV4cGlyeUhlaWdodCk7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eUNoZWNrU2lnbmF0dXJlcygnZXhwaXJ5SGVpZ2h0JywgZXhwaXJ5SGVpZ2h0KTtcbiAgfVxuXG4gIGJ1aWxkKCk6IFpjYXNoVHJhbnNhY3Rpb248VE51bWJlcj4ge1xuICAgIHJldHVybiBzdXBlci5idWlsZCgpIGFzIFpjYXNoVHJhbnNhY3Rpb248VE51bWJlcj47XG4gIH1cblxuICBidWlsZEluY29tcGxldGUoKTogWmNhc2hUcmFuc2FjdGlvbjxUTnVtYmVyPiB7XG4gICAgcmV0dXJuIHN1cGVyLmJ1aWxkSW5jb21wbGV0ZSgpIGFzIFpjYXNoVHJhbnNhY3Rpb248VE51bWJlcj47XG4gIH1cblxuICBhZGRPdXRwdXQoc2NyaXB0UHViS2V5OiBzdHJpbmcgfCBCdWZmZXIsIHZhbHVlOiBUTnVtYmVyKTogbnVtYmVyIHtcbiAgICAvLyBBdHRlbXB0IHRvIGdldCBhIHNjcmlwdCBpZiBpdCdzIGEgYmFzZTU4IG9yIGJlY2gzMiBhZGRyZXNzIHN0cmluZ1xuICAgIGlmICh0eXBlb2Ygc2NyaXB0UHViS2V5ID09PSAnc3RyaW5nJykge1xuICAgICAgc2NyaXB0UHViS2V5ID0gdG9PdXRwdXRTY3JpcHQoc2NyaXB0UHViS2V5LCB0aGlzLm5ldHdvcmsgYXMgTmV0d29yayk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLmFkZE91dHB1dChzY3JpcHRQdWJLZXksIHZhbHVlKTtcbiAgfVxufVxuIl19Выполнить команду
Для локальной разработки. Не используйте в интернете!