@bitgo-beta/sdk-coin-ton 1.0.1-beta.99 → 1.0.1-beta.991
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.mocharc.yml +1 -1
- package/CHANGELOG.md +585 -0
- package/dist/src/index.js +6 -2
- package/dist/src/lib/iface.d.ts +5 -0
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +1 -1
- package/dist/src/lib/index.js +23 -9
- package/dist/src/lib/keyPair.js +24 -10
- package/dist/src/lib/singleNominatorWithdrawBuilder.d.ts +11 -0
- package/dist/src/lib/singleNominatorWithdrawBuilder.d.ts.map +1 -0
- package/dist/src/lib/singleNominatorWithdrawBuilder.js +26 -0
- package/dist/src/lib/transaction.d.ts +13 -5
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +63 -26
- package/dist/src/lib/transactionBuilder.d.ts +23 -1
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +43 -2
- package/dist/src/lib/transactionBuilderFactory.d.ts +5 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +29 -4
- package/dist/src/lib/transactionExplanation.d.ts +14 -0
- package/dist/src/lib/transactionExplanation.d.ts.map +1 -0
- package/dist/src/lib/transactionExplanation.js +3 -0
- package/dist/src/lib/utils.d.ts +13 -1
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +51 -4
- package/dist/src/ton.d.ts +24 -2
- package/dist/src/ton.d.ts.map +1 -1
- package/dist/src/ton.js +281 -16
- package/dist/src/tton.js +1 -1
- package/package.json +8 -8
package/dist/src/lib/index.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -11,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
11
15
|
}) : function(o, v) {
|
|
12
16
|
o["default"] = v;
|
|
13
17
|
});
|
|
14
|
-
var __importStar = (this && this.__importStar) || function (
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
};
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
21
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
36
|
exports.Utils = exports.Interface = exports.TransactionBuilderFactory = exports.TransferBuilder = exports.TransactionBuilder = exports.Transaction = exports.KeyPair = void 0;
|
|
23
37
|
const Utils = __importStar(require("./utils"));
|
|
@@ -34,4 +48,4 @@ var transferBuilder_1 = require("./transferBuilder");
|
|
|
34
48
|
Object.defineProperty(exports, "TransferBuilder", { enumerable: true, get: function () { return transferBuilder_1.TransferBuilder; } });
|
|
35
49
|
var transactionBuilderFactory_1 = require("./transactionBuilderFactory");
|
|
36
50
|
Object.defineProperty(exports, "TransactionBuilderFactory", { enumerable: true, get: function () { return transactionBuilderFactory_1.TransactionBuilderFactory; } });
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQVFiLHNCQUFLO0FBUHpCLG1EQUFxQztBQU81Qiw4QkFBUztBQUxsQixxQ0FBb0M7QUFBM0Isa0dBQUEsT0FBTyxPQUFBO0FBQ2hCLDZDQUE0QztBQUFuQywwR0FBQSxXQUFXLE9BQUE7QUFDcEIsMkRBQTBEO0FBQWpELHdIQUFBLGtCQUFrQixPQUFBO0FBQzNCLHFEQUFvRDtBQUEzQyxrSEFBQSxlQUFlLE9BQUE7QUFDeEIseUVBQXdFO0FBQS9ELHNJQUFBLHlCQUF5QixPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgKiBhcyBJbnRlcmZhY2UgZnJvbSAnLi9pZmFjZSc7XG5cbmV4cG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuZXhwb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmV4cG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmV4cG9ydCB7IFRyYW5zZmVyQnVpbGRlciB9IGZyb20gJy4vdHJhbnNmZXJCdWlsZGVyJztcbmV4cG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnknO1xuZXhwb3J0IHsgSW50ZXJmYWNlLCBVdGlscyB9O1xuIl19
|
package/dist/src/lib/keyPair.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -11,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
11
15
|
}) : function(o, v) {
|
|
12
16
|
o["default"] = v;
|
|
13
17
|
});
|
|
14
|
-
var __importStar = (this && this.__importStar) || function (
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
};
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
21
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
22
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
37
|
};
|
|
@@ -82,8 +96,8 @@ class KeyPair extends sdk_core_1.Ed25519KeyPair {
|
|
|
82
96
|
if (!prv) {
|
|
83
97
|
throw new Error('Missing private key');
|
|
84
98
|
}
|
|
85
|
-
return nacl.sign.detached(message, nacl.sign.keyPair.fromSeed(sdk_core_1.toUint8Array(prv)).secretKey);
|
|
99
|
+
return nacl.sign.detached(message, nacl.sign.keyPair.fromSeed((0, sdk_core_1.toUint8Array)(prv)).secretKey);
|
|
86
100
|
}
|
|
87
101
|
}
|
|
88
102
|
exports.KeyPair = KeyPair;
|
|
89
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIva2V5UGFpci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtREFBaUc7QUFDakcsb0RBQTRCO0FBQzVCLGdEQUFrQztBQUVsQyxNQUFhLE9BQVEsU0FBUSx5QkFBYztJQUN6Qzs7OztPQUlHO0lBQ0gsWUFBWSxNQUF1QjtRQUNqQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixPQUFPO1FBQ0wsTUFBTSxNQUFNLEdBQWdCLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdEQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7UUFDaEMsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsd0NBQXdDLENBQUMsR0FBVztRQUNsRCxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELGtCQUFrQjtJQUNsQix1Q0FBdUMsQ0FBQyxHQUFXO1FBQ2pELElBQUksQ0FBQyxlQUFLLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFFRCxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixVQUFVO1FBQ1IsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBRTNDLGdFQUFnRTtRQUNoRSxzRkFBc0Y7UUFDdEY7Ozs7Ozs7Ozs7VUFVRTtJQUNKLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHVCQUF1QixDQUFDLE9BQW1CO1FBQ3pDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzdCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNULE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUEsdUJBQVksRUFBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzlGLENBQUM7Q0FDRjtBQWpFRCwwQkFpRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZWZhdWx0S2V5cywgRWQyNTUxOUtleVBhaXIsIEtleVBhaXJPcHRpb25zLCB0b1VpbnQ4QXJyYXkgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgKiBhcyBuYWNsIGZyb20gJ3R3ZWV0bmFjbCc7XG5cbmV4cG9ydCBjbGFzcyBLZXlQYWlyIGV4dGVuZHMgRWQyNTUxOUtleVBhaXIge1xuICAvKipcbiAgICogUHVibGljIGNvbnN0cnVjdG9yLiBCeSBkZWZhdWx0LCBjcmVhdGVzIGEga2V5IHBhaXIgd2l0aCBhIHJhbmRvbSBtYXN0ZXIgc2VlZC5cbiAgICpcbiAgICogQHBhcmFtIHsgS2V5UGFpck9wdGlvbnMgfSBzb3VyY2UgRWl0aGVyIGEgbWFzdGVyIHNlZWQsIGEgcHJpdmF0ZSBrZXksIG9yIGEgcHVibGljIGtleVxuICAgKi9cbiAgY29uc3RydWN0b3Ioc291cmNlPzogS2V5UGFpck9wdGlvbnMpIHtcbiAgICBzdXBlcihzb3VyY2UpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldEtleXMoKTogRGVmYXVsdEtleXMge1xuICAgIGNvbnN0IHJlc3VsdDogRGVmYXVsdEtleXMgPSB7IHB1YjogdGhpcy5rZXlQYWlyLnB1YiB9O1xuICAgIGlmICh0aGlzLmtleVBhaXIucHJ2KSB7XG4gICAgICByZXN1bHQucHJ2ID0gdGhpcy5rZXlQYWlyLnBydjtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICByZWNvcmRLZXlzRnJvbVByaXZhdGVLZXlJblByb3RvY29sRm9ybWF0KHBydjogc3RyaW5nKTogRGVmYXVsdEtleXMge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICByZWNvcmRLZXlzRnJvbVB1YmxpY0tleUluUHJvdG9jb2xGb3JtYXQocHViOiBzdHJpbmcpOiBEZWZhdWx0S2V5cyB7XG4gICAgaWYgKCF1dGlscy5pc1ZhbGlkUHVibGljS2V5KHB1YikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBQdWJsaWMgS2V5ICR7cHVifWApO1xuICAgIH1cblxuICAgIHJldHVybiB7IHB1YiB9O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldEFkZHJlc3MoKTogc3RyaW5nIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG5cbiAgICAvLyB0aGlzIGlzIHRoZSBhc3luYyB3YXkgdG8gZ2V0IHRoZSBhZGRyZXNzIHVzaW5nIHRvbndlYiBsaWJyYXJ5XG4gICAgLy8gYnV0IHdlIGNhbm5vdCB1c2UgaXQgYXMgaXQgaXMgYXlzbmMsIHRoZXJlIGlzIGEgZ2V0QWRkcmVzc2Zyb21QdWJsaWNLZXkgaW4gdXRsaXMudHNcbiAgICAvKlxuICAgIGNvbnN0IHRvbndlYiA9IG5ldyBUb25XZWIobmV3IFRvbldlYi5IdHRwUHJvdmlkZXIoJycpKTtcblxuICAgIGNvbnN0IFdhbGxldENsYXNzID0gdG9ud2ViLndhbGxldC5hbGxbJ3Y0UjInXTtcbiAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0Q2xhc3ModG9ud2ViLnByb3ZpZGVyLCB7XG4gICAgICBwdWJsaWNLZXk6IEJ1ZmZlci5mcm9tKHRoaXMua2V5UGFpci5wdWIpLFxuICAgICAgd2M6IDBcbiAgICB9KTtcbiAgICBjb25zdCBhZGRyZXNzID0gYXdhaXQgd2FsbGV0LmdldEFkZHJlc3MoKTtcbiAgICByZXR1cm4gYWRkcmVzcy50b1N0cmluZyh0cnVlLCB0cnVlLCB0cnVlKTtcbiAgICAqL1xuICB9XG5cbiAgLyoqXG4gICAqICBTaWduIHRoZSBtZXNzYWdlIGluIFVpbnQ4QXJyYXlcbiAgICpcbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBtZXNzYWdlIHRvIGJlIHNpZ25lZFxuICAgKiBAcmV0dXJucyB7VWludDhBcnJheX0gc2lnbmVkIG1lc3NhZ2VcbiAgICovXG4gIHNpZ25NZXNzYWdlaW5VaW50OEFycmF5KG1lc3NhZ2U6IFVpbnQ4QXJyYXkpOiBVaW50OEFycmF5IHtcbiAgICBjb25zdCB7IHBydiB9ID0gdGhpcy5rZXlQYWlyO1xuICAgIGlmICghcHJ2KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcHJpdmF0ZSBrZXknKTtcbiAgICB9XG4gICAgcmV0dXJuIG5hY2wuc2lnbi5kZXRhY2hlZChtZXNzYWdlLCBuYWNsLnNpZ24ua2V5UGFpci5mcm9tU2VlZCh0b1VpbnQ4QXJyYXkocHJ2KSkuc2VjcmV0S2V5KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { TransactionBuilder } from './transactionBuilder';
|
|
2
|
+
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
3
|
+
import { Recipient, TransactionType } from '@bitgo-beta/sdk-core';
|
|
4
|
+
export declare class SingleNominatorWithdrawBuilder extends TransactionBuilder {
|
|
5
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
6
|
+
protected get transactionType(): TransactionType;
|
|
7
|
+
setWithdrawAmount(amount: string): SingleNominatorWithdrawBuilder;
|
|
8
|
+
send(recipient: Recipient): SingleNominatorWithdrawBuilder;
|
|
9
|
+
setMessage(msg: string): SingleNominatorWithdrawBuilder;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=singleNominatorWithdrawBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"singleNominatorWithdrawBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/singleNominatorWithdrawBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAElE,qBAAa,8BAA+B,SAAQ,kBAAkB;gBACxD,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,8BAA8B;IAKjE,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,8BAA8B;IAK1D,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,8BAA8B;CAGxD"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SingleNominatorWithdrawBuilder = void 0;
|
|
4
|
+
const transactionBuilder_1 = require("./transactionBuilder");
|
|
5
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
6
|
+
class SingleNominatorWithdrawBuilder extends transactionBuilder_1.TransactionBuilder {
|
|
7
|
+
constructor(_coinConfig) {
|
|
8
|
+
super(_coinConfig);
|
|
9
|
+
}
|
|
10
|
+
get transactionType() {
|
|
11
|
+
return sdk_core_1.TransactionType.SingleNominatorWithdraw;
|
|
12
|
+
}
|
|
13
|
+
setWithdrawAmount(amount) {
|
|
14
|
+
this.transaction.withdrawAmount = amount;
|
|
15
|
+
return this;
|
|
16
|
+
}
|
|
17
|
+
send(recipient) {
|
|
18
|
+
this.transaction.recipient = recipient;
|
|
19
|
+
return this;
|
|
20
|
+
}
|
|
21
|
+
setMessage(msg) {
|
|
22
|
+
throw new Error('Method not implemented.');
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.SingleNominatorWithdrawBuilder = SingleNominatorWithdrawBuilder;
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xlTm9taW5hdG9yV2l0aGRyYXdCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9zaW5nbGVOb21pbmF0b3JXaXRoZHJhd0J1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkRBQTBEO0FBRTFELG1EQUFrRTtBQUVsRSxNQUFhLDhCQUErQixTQUFRLHVDQUFrQjtJQUNwRSxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBYyxlQUFlO1FBQzNCLE9BQU8sMEJBQWUsQ0FBQyx1QkFBdUIsQ0FBQztJQUNqRCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsTUFBYztRQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUM7UUFDekMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsSUFBSSxDQUFDLFNBQW9CO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUN2QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxVQUFVLENBQUMsR0FBVztRQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQztDQUNGO0FBdEJELHdFQXNCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFJlY2lwaWVudCwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuXG5leHBvcnQgY2xhc3MgU2luZ2xlTm9taW5hdG9yV2l0aGRyYXdCdWlsZGVyIGV4dGVuZHMgVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLlNpbmdsZU5vbWluYXRvcldpdGhkcmF3O1xuICB9XG5cbiAgc2V0V2l0aGRyYXdBbW91bnQoYW1vdW50OiBzdHJpbmcpOiBTaW5nbGVOb21pbmF0b3JXaXRoZHJhd0J1aWxkZXIge1xuICAgIHRoaXMudHJhbnNhY3Rpb24ud2l0aGRyYXdBbW91bnQgPSBhbW91bnQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZW5kKHJlY2lwaWVudDogUmVjaXBpZW50KTogU2luZ2xlTm9taW5hdG9yV2l0aGRyYXdCdWlsZGVyIHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLnJlY2lwaWVudCA9IHJlY2lwaWVudDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNldE1lc3NhZ2UobXNnOiBzdHJpbmcpOiBTaW5nbGVOb21pbmF0b3JXaXRoZHJhd0J1aWxkZXIge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxufVxuIl19
|
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import { TxData } from './iface';
|
|
1
|
+
import { BaseKey, BaseTransaction, Recipient, TransactionType } from '@bitgo-beta/sdk-core';
|
|
2
|
+
import { TxData, TransactionExplanation } from './iface';
|
|
4
3
|
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
5
4
|
import { Cell } from 'tonweb/dist/types/boc/cell';
|
|
6
5
|
export declare class Transaction extends BaseTransaction {
|
|
7
6
|
recipient: Recipient;
|
|
7
|
+
bounceable: boolean;
|
|
8
|
+
fromAddressBounceable: boolean;
|
|
9
|
+
toAddressBounceable: boolean;
|
|
8
10
|
message: string;
|
|
11
|
+
withdrawAmount: string;
|
|
9
12
|
seqno: number;
|
|
10
13
|
expireTime: number;
|
|
11
14
|
sender: string;
|
|
@@ -17,6 +20,11 @@ export declare class Transaction extends BaseTransaction {
|
|
|
17
20
|
toBroadcastFormat(): string;
|
|
18
21
|
toJson(): TxData;
|
|
19
22
|
get signablePayload(): Buffer;
|
|
23
|
+
/**
|
|
24
|
+
* Set the transaction type.
|
|
25
|
+
* @param {TransactionType} transactionType The transaction type to be set.
|
|
26
|
+
*/
|
|
27
|
+
set transactionType(transactionType: TransactionType);
|
|
20
28
|
build(): Promise<void>;
|
|
21
29
|
private createSigningMessage;
|
|
22
30
|
private createOutMsg;
|
|
@@ -25,8 +33,8 @@ export declare class Transaction extends BaseTransaction {
|
|
|
25
33
|
fromRawTransaction(rawTransaction: string): void;
|
|
26
34
|
/** @inheritDoc */
|
|
27
35
|
explainTransaction(): TransactionExplanation;
|
|
28
|
-
private
|
|
29
|
-
private
|
|
36
|
+
private parseTransaction;
|
|
37
|
+
private parseTransactionBody;
|
|
30
38
|
private parseTransferStateInit;
|
|
31
39
|
}
|
|
32
40
|
//# sourceMappingURL=transaction.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transaction.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,eAAe,EAAS,SAAS,EAAwB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACzH,OAAO,EAAE,MAAM,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AACzD,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAG7D,OAAO,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAKlD,qBAAa,WAAY,SAAQ,eAAe;IACvC,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,YAAY,CAAS;gBAEjB,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAO5C,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAI9B,iBAAiB,IAAI,MAAM;IAI3B,MAAM,IAAI,MAAM;IAqBhB,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED;;;OAGG;IACH,IAAI,eAAe,CAAC,eAAe,EAAE,eAAe,EAEnD;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB5B,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,YAAY;IAoCd,qBAAqB,CAAC,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBlG,oBAAoB,IAAI,IAAI;IAiB5B,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAsBhD,kBAAkB;IAClB,kBAAkB,IAAI,sBAAsB;IAkB5C,OAAO,CAAC,gBAAgB;IA6CxB,OAAO,CAAC,oBAAoB;IAgF5B,OAAO,CAAC,sBAAsB;CAgB/B"}
|
|
@@ -7,10 +7,14 @@ exports.Transaction = void 0;
|
|
|
7
7
|
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
8
8
|
const tonweb_1 = __importDefault(require("tonweb"));
|
|
9
9
|
const bn_js_1 = require("bn.js");
|
|
10
|
+
const transactionBuilder_1 = require("./transactionBuilder");
|
|
10
11
|
const WALLET_ID = 698983191;
|
|
11
12
|
class Transaction extends sdk_core_1.BaseTransaction {
|
|
12
13
|
constructor(coinConfig) {
|
|
13
14
|
super(coinConfig);
|
|
15
|
+
this.bounceable = false;
|
|
16
|
+
this.fromAddressBounceable = true;
|
|
17
|
+
this.toAddressBounceable = true;
|
|
14
18
|
}
|
|
15
19
|
canSign(key) {
|
|
16
20
|
return false;
|
|
@@ -19,24 +23,32 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
19
23
|
return this.finalMessage;
|
|
20
24
|
}
|
|
21
25
|
toJson() {
|
|
22
|
-
const
|
|
26
|
+
const otherFormat = new tonweb_1.default.Address(this.recipient.address).toString(true, true, !new tonweb_1.default.Address(this.recipient.address).isBounceable);
|
|
23
27
|
return {
|
|
24
28
|
id: this._id,
|
|
25
29
|
sender: this.sender,
|
|
26
30
|
destination: this.recipient.address,
|
|
27
|
-
destinationAlias:
|
|
31
|
+
destinationAlias: otherFormat,
|
|
28
32
|
amount: this.recipient.amount,
|
|
33
|
+
withdrawAmount: this.withdrawAmount,
|
|
29
34
|
seqno: this.seqno,
|
|
30
35
|
expirationTime: this.expireTime,
|
|
31
36
|
publicKey: this.publicKey,
|
|
32
37
|
signature: this._signatures[0],
|
|
38
|
+
bounceable: this.bounceable,
|
|
33
39
|
};
|
|
34
40
|
}
|
|
35
41
|
get signablePayload() {
|
|
36
42
|
return Buffer.from(this.unsignedMessage, 'hex');
|
|
37
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Set the transaction type.
|
|
46
|
+
* @param {TransactionType} transactionType The transaction type to be set.
|
|
47
|
+
*/
|
|
48
|
+
set transactionType(transactionType) {
|
|
49
|
+
this._type = transactionType;
|
|
50
|
+
}
|
|
38
51
|
async build() {
|
|
39
|
-
this._type = sdk_core_1.TransactionType.Send;
|
|
40
52
|
const signingMessage = this.createSigningMessage(WALLET_ID, this.seqno, this.expireTime);
|
|
41
53
|
const sendMode = 3;
|
|
42
54
|
signingMessage.bits.writeUint8(sendMode);
|
|
@@ -46,19 +58,14 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
46
58
|
const signature = this._signatures.length > 0 ? this._signatures[0] : Buffer.from(new Uint8Array(64)).toString('hex');
|
|
47
59
|
const finalMessage = await this.createExternalMessage(signingMessage, this.seqno, signature);
|
|
48
60
|
this.finalMessage = tonweb_1.default.utils.bytesToBase64(await finalMessage.toBoc(false));
|
|
49
|
-
|
|
61
|
+
const originalTxId = tonweb_1.default.utils.bytesToBase64(await finalMessage.hash());
|
|
62
|
+
this._id = originalTxId.replace(/\//g, '_').replace(/\+/g, '-');
|
|
50
63
|
}
|
|
51
64
|
createSigningMessage(walletId, seqno, expireAt) {
|
|
52
65
|
const message = new tonweb_1.default.boc.Cell();
|
|
53
66
|
message.bits.writeUint(walletId, 32);
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
message.bits.writeBit(1);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
message.bits.writeUint(expireAt, 32);
|
|
61
|
-
}
|
|
67
|
+
// expireAt should be set as per the provided arg value, regardless of the seqno
|
|
68
|
+
message.bits.writeUint(expireAt, 32);
|
|
62
69
|
message.bits.writeUint(seqno, 32);
|
|
63
70
|
message.bits.writeUint(0, 8); // op
|
|
64
71
|
return message;
|
|
@@ -72,15 +79,27 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
72
79
|
}
|
|
73
80
|
else if (typeof payload === 'string') {
|
|
74
81
|
if (payload.length > 0) {
|
|
75
|
-
|
|
76
|
-
|
|
82
|
+
if (payload.length > 24 && payload.substring(0, 8) === transactionBuilder_1.WITHDRAW_OPCODE) {
|
|
83
|
+
// payload is a withdraw txn message
|
|
84
|
+
const queryId = payload.substring(8, 24);
|
|
85
|
+
const withdrawAmount = payload.substring(24);
|
|
86
|
+
/* eslint-disable-next-line no-console */
|
|
87
|
+
console.log(`payload: ${payload}, queryId: ${queryId}, withdrawAmount: ${withdrawAmount}`);
|
|
88
|
+
payloadCell.bits.writeUint(parseInt(transactionBuilder_1.WITHDRAW_OPCODE, 16), 32);
|
|
89
|
+
payloadCell.bits.writeUint(parseInt(queryId, 16), 64);
|
|
90
|
+
payloadCell.bits.writeCoins(new bn_js_1.BN(withdrawAmount));
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
payloadCell.bits.writeUint(0, 32);
|
|
94
|
+
payloadCell.bits.writeString(payload);
|
|
95
|
+
}
|
|
77
96
|
}
|
|
78
97
|
}
|
|
79
98
|
else {
|
|
80
99
|
payloadCell.bits.writeBytes(payload);
|
|
81
100
|
}
|
|
82
101
|
}
|
|
83
|
-
const orderHeader = tonweb_1.default.Contract.createInternalMessageHeader(new tonweb_1.default.Address(address), new bn_js_1.BN(amount), true,
|
|
102
|
+
const orderHeader = tonweb_1.default.Contract.createInternalMessageHeader(new tonweb_1.default.Address(address), new bn_js_1.BN(amount), true, this.bounceable);
|
|
84
103
|
return tonweb_1.default.Contract.createCommonMsgInfo(orderHeader, undefined, payloadCell);
|
|
85
104
|
}
|
|
86
105
|
async createExternalMessage(signingMessage, seqno, signature) {
|
|
@@ -120,17 +139,19 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
120
139
|
fromRawTransaction(rawTransaction) {
|
|
121
140
|
try {
|
|
122
141
|
const cell = tonweb_1.default.boc.Cell.oneFromBoc(tonweb_1.default.utils.base64ToBytes(rawTransaction));
|
|
123
|
-
const parsed = this.
|
|
142
|
+
const parsed = this.parseTransaction(cell);
|
|
124
143
|
parsed.value = parsed.value.toString();
|
|
125
|
-
parsed.fromAddress = parsed.fromAddress.toString(true, true,
|
|
126
|
-
parsed.toAddress = parsed.toAddress.toString(true, true,
|
|
144
|
+
parsed.fromAddress = parsed.fromAddress.toString(true, true, this.fromAddressBounceable);
|
|
145
|
+
parsed.toAddress = parsed.toAddress.toString(true, true, this.toAddressBounceable);
|
|
127
146
|
this.sender = parsed.fromAddress;
|
|
128
147
|
this.recipient = { address: parsed.toAddress, amount: parsed.value };
|
|
148
|
+
this.withdrawAmount = parsed.withdrawAmount;
|
|
129
149
|
this.seqno = parsed.seqno;
|
|
130
150
|
this.publicKey = parsed.publicKey;
|
|
131
151
|
this.expireTime = parsed.expireAt;
|
|
132
152
|
this.message = parsed.payload;
|
|
133
153
|
this._signatures.push(parsed.signature);
|
|
154
|
+
this.bounceable = parsed.bounce;
|
|
134
155
|
}
|
|
135
156
|
catch (e) {
|
|
136
157
|
throw new Error('invalid raw transaction');
|
|
@@ -138,9 +159,10 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
138
159
|
}
|
|
139
160
|
/** @inheritDoc */
|
|
140
161
|
explainTransaction() {
|
|
141
|
-
const displayOrder = ['id', 'outputs', 'outputAmount', 'changeOutputs', 'changeAmount', 'fee'];
|
|
162
|
+
const displayOrder = ['id', 'outputs', 'outputAmount', 'changeOutputs', 'changeAmount', 'fee', 'withdrawAmount'];
|
|
142
163
|
const outputs = [this.recipient];
|
|
143
164
|
const outputAmount = this.recipient.amount;
|
|
165
|
+
const withdrawAmount = this.withdrawAmount;
|
|
144
166
|
return {
|
|
145
167
|
displayOrder,
|
|
146
168
|
id: this.id,
|
|
@@ -149,9 +171,10 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
149
171
|
changeOutputs: [],
|
|
150
172
|
changeAmount: '0',
|
|
151
173
|
fee: { fee: 'UNKNOWN' },
|
|
174
|
+
withdrawAmount,
|
|
152
175
|
};
|
|
153
176
|
}
|
|
154
|
-
|
|
177
|
+
parseTransaction(cell) {
|
|
155
178
|
const slice = cell.beginParse();
|
|
156
179
|
// header
|
|
157
180
|
if (slice.loadUint(2).toNumber() !== 2)
|
|
@@ -188,10 +211,10 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
188
211
|
return {
|
|
189
212
|
fromAddress: externalDestAddress,
|
|
190
213
|
publicKey,
|
|
191
|
-
...this.
|
|
214
|
+
...this.parseTransactionBody(bodySlice),
|
|
192
215
|
};
|
|
193
216
|
}
|
|
194
|
-
|
|
217
|
+
parseTransactionBody(slice) {
|
|
195
218
|
const signature = Buffer.from(slice.loadBits(512)).toString('hex');
|
|
196
219
|
// signing message
|
|
197
220
|
const walletId = slice.loadUint(32).toNumber();
|
|
@@ -238,14 +261,27 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
238
261
|
}
|
|
239
262
|
// order body
|
|
240
263
|
let payload;
|
|
264
|
+
let withdrawAmount;
|
|
265
|
+
this.transactionType = sdk_core_1.TransactionType.Send;
|
|
241
266
|
if (order.getFreeBits() > 0) {
|
|
242
267
|
if (order.loadBit()) {
|
|
243
268
|
order = order.loadRef();
|
|
244
269
|
}
|
|
245
270
|
if (order.getFreeBits() > 32) {
|
|
246
|
-
const
|
|
247
|
-
|
|
248
|
-
|
|
271
|
+
const opcode = order.loadUint(32).toNumber();
|
|
272
|
+
if (opcode === 0) {
|
|
273
|
+
const payloadBytes = order.loadBits(order.getFreeBits());
|
|
274
|
+
payload = new TextDecoder().decode(payloadBytes);
|
|
275
|
+
}
|
|
276
|
+
else if (opcode === 4096) {
|
|
277
|
+
const queryId = order.loadUint(64).toNumber();
|
|
278
|
+
withdrawAmount = order.loadCoins().toNumber().toString();
|
|
279
|
+
payload = transactionBuilder_1.WITHDRAW_OPCODE + queryId.toString(16).padStart(16, '0') + withdrawAmount;
|
|
280
|
+
this.transactionType = sdk_core_1.TransactionType.SingleNominatorWithdraw;
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
payload = '';
|
|
284
|
+
}
|
|
249
285
|
}
|
|
250
286
|
}
|
|
251
287
|
return {
|
|
@@ -253,6 +289,7 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
253
289
|
value,
|
|
254
290
|
bounce,
|
|
255
291
|
seqno,
|
|
292
|
+
withdrawAmount,
|
|
256
293
|
expireAt,
|
|
257
294
|
payload,
|
|
258
295
|
signature,
|
|
@@ -280,4 +317,4 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
280
317
|
}
|
|
281
318
|
}
|
|
282
319
|
exports.Transaction = Transaction;
|
|
283
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1EQVE4QjtBQUc5QixvREFBNEI7QUFDNUIsaUNBQTJCO0FBRzNCLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQztBQUU1QixNQUFhLFdBQVksU0FBUSwwQkFBZTtJQVU5QyxZQUFZLFVBQWdDO1FBQzFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBRUQsT0FBTyxDQUFDLEdBQVk7UUFDbEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxNQUFNO1FBQ0osTUFBTSxhQUFhLEdBQUcsSUFBSSxnQkFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzdGLE9BQU87WUFDTCxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQWE7WUFDdEIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU87WUFDbkMsZ0JBQWdCLEVBQUUsYUFBYTtZQUMvQixNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNO1lBQzdCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNqQixjQUFjLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDL0IsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztTQUMvQixDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksZUFBZTtRQUNqQixPQUFPLE1BQU0sQ0FBQyxJQUFJ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LFxuICBSZWNpcGllbnQsXG4gIFRyYW5zYWN0aW9uUmVjaXBpZW50LFxuICBUcmFuc2FjdGlvblR5cGUsXG4gIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24sXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IFR4RGF0YSB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IFRvbldlYiBmcm9tICd0b253ZWInO1xuaW1wb3J0IHsgQk4gfSBmcm9tICdibi5qcyc7XG5pbXBvcnQgeyBDZWxsIH0gZnJvbSAndG9ud2ViL2Rpc3QvdHlwZXMvYm9jL2NlbGwnO1xuXG5jb25zdCBXQUxMRVRfSUQgPSA2OTg5ODMxOTE7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbiBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbiB7XG4gIHB1YmxpYyByZWNpcGllbnQ6IFJlY2lwaWVudDtcbiAgcHVibGljIG1lc3NhZ2U6IHN0cmluZztcbiAgc2Vxbm86IG51bWJlcjtcbiAgZXhwaXJlVGltZTogbnVtYmVyO1xuICBzZW5kZXI6IHN0cmluZztcbiAgcHVibGljS2V5OiBzdHJpbmc7XG4gIHByaXZhdGUgdW5zaWduZWRNZXNzYWdlOiBzdHJpbmc7XG4gIHByaXZhdGUgZmluYWxNZXNzYWdlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihjb2luQ29uZmlnKTtcbiAgfVxuXG4gIGNhblNpZ24oa2V5OiBCYXNlS2V5KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdG9Ccm9hZGNhc3RGb3JtYXQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5maW5hbE1lc3NhZ2U7XG4gIH1cblxuICB0b0pzb24oKTogVHhEYXRhIHtcbiAgICBjb25zdCBub25fYm91bmNhYmxlID0gbmV3IFRvbldlYi5BZGRyZXNzKHRoaXMucmVjaXBpZW50LmFkZHJlc3MpLnRvU3RyaW5nKHRydWUsIHRydWUsIGZhbHNlKTtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHRoaXMuX2lkIGFzIHN0cmluZyxcbiAgICAgIHNlbmRlcjogdGhpcy5zZW5kZXIsXG4gICAgICBkZXN0aW5hdGlvbjogdGhpcy5yZWNpcGllbnQuYWRkcmVzcyxcbiAgICAgIGRlc3RpbmF0aW9uQWxpYXM6IG5vbl9ib3VuY2FibGUsXG4gICAgICBhbW91bnQ6IHRoaXMucmVjaXBpZW50LmFtb3VudCxcbiAgICAgIHNlcW5vOiB0aGlzLnNlcW5vLFxuICAgICAgZXhwaXJhdGlvblRpbWU6IHRoaXMuZXhwaXJlVGltZSxcbiAgICAgIHB1YmxpY0tleTogdGhpcy5wdWJsaWNLZXksXG4gICAgICBzaWduYXR1cmU6IHRoaXMuX3NpZ25hdHVyZXNbMF0sXG4gICAgfTtcbiAgfVxuXG4gIGdldCBzaWduYWJsZVBheWxvYWQoKTogQnVmZmVyIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odGhpcy51bnNpZ25lZE1lc3NhZ2UsICdoZXgnKTtcbiAgfVxuXG4gIGFzeW5jIGJ1aWxkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuU2VuZDtcbiAgICBjb25zdCBzaWduaW5nTWVzc2FnZSA9IHRoaXMuY3JlYXRlU2lnbmluZ01lc3NhZ2UoV0FMTEVUX0lELCB0aGlzLnNlcW5vLCB0aGlzLmV4cGlyZVRpbWUpO1xuICAgIGNvbnN0IHNlbmRNb2RlID0gMztcbiAgICBzaWduaW5nTWVzc2FnZS5iaXRzLndyaXRlVWludDgoc2VuZE1vZGUpO1xuICAgIGNvbnN0IG91dE1zZyA9IHRoaXMuY3JlYXRlT3V0TXNnKHRoaXMucmVjaXBpZW50LmFkZHJlc3MsIHRoaXMucmVjaXBpZW50LmFtb3VudCwgdGhpcy5tZXNzYWdlKTtcbiAgICBzaWduaW5nTWVzc2FnZS5yZWZzLnB1c2gob3V0TXNnKTtcbiAgICB0aGlzLnVuc2lnbmVkTWVzc2FnZSA9IEJ1ZmZlci5mcm9tKGF3YWl0IHNpZ25pbmdNZXNzYWdlLmhhc2goKSkudG9TdHJpbmcoJ2hleCcpO1xuXG4gICAgY29uc3Qgc2lnbmF0dXJlID1cbiAgICAgIHRoaXMuX3NpZ25hdHVyZXMubGVuZ3RoID4gMCA/IHRoaXMuX3NpZ25hdHVyZXNbMF0gOiBCdWZmZXIuZnJvbShuZXcgVWludDhBcnJheSg2NCkpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICBjb25zdCBmaW5hbE1lc3NhZ2UgPSBhd2FpdCB0aGlzLmNyZWF0ZUV4dGVybmFsTWVzc2FnZShzaWduaW5nTWVzc2FnZSwgdGhpcy5zZXFubywgc2lnbmF0dXJlKTtcblxuICAgIHRoaXMuZmluYWxNZXNzYWdlID0gVG9uV2ViLnV0aWxzLmJ5dGVzVG9CYXNlNjQoYXdhaXQgZmluYWxNZXNzYWdlLnRvQm9jKGZhbHNlKSk7XG5cbiAgICB0aGlzLl9pZCA9IFRvbldlYi51dGlscy5ieXRlc1RvQmFzZTY0KGF3YWl0IGZpbmFsTWVzc2FnZS5oYXNoKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTaWduaW5nTWVzc2FnZSh3YWxsZXRJZCwgc2Vxbm8sIGV4cGlyZUF0KSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IG5ldyBUb25XZWIuYm9jLkNlbGwoKTtcbiAgICBtZXNzYWdlLmJpdHMud3JpdGVVaW50KHdhbGxldElkLCAzMik7XG4gICAgaWYgKHNlcW5vID09PSAwKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDMyOyBpKyspIHtcbiAgICAgICAgbWVzc2FnZS5iaXRzLndyaXRlQml0KDEpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBtZXNzYWdlLmJpdHMud3JpdGVVaW50KGV4cGlyZUF0LCAzMik7XG4gICAgfVxuICAgIG1lc3NhZ2UuYml0cy53cml0ZVVpbnQoc2Vxbm8sIDMyKTtcbiAgICBtZXNzYWdlLmJpdHMud3JpdGVVaW50KDAsIDgpOyAvLyBvcFxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVPdXRNc2coYWRkcmVzcywgYW1vdW50LCBwYXlsb2FkKSB7XG4gICAgbGV0IHBheWxvYWRDZWxsID0gbmV3IFRvbldlYi5ib2MuQ2VsbCgpO1xuICAgIGlmIChwYXlsb2FkKSB7XG4gICAgICBpZiAocGF5bG9hZC5yZWZzKSB7XG4gICAgICAgIC8vIGlzIENlbGxcbiAgICAgICAgcGF5bG9hZENlbGwgPSBwYXlsb2FkO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcGF5bG9hZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHBheWxvYWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHBheWxvYWRDZWxsLmJpdHMud3JpdGVVaW50KDAsIDMyKTtcbiAgICAgICAgICBwYXlsb2FkQ2VsbC5iaXRzLndyaXRlU3RyaW5nKHBheWxvYWQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXlsb2FkQ2VsbC5iaXRzLndyaXRlQnl0ZXMocGF5bG9hZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb3JkZXJIZWFkZXIgPSBUb25XZWIuQ29udHJhY3QuY3JlYXRlSW50ZXJuYWxNZXNzYWdlSGVhZGVyKFxuICAgICAgbmV3IFRvbldlYi5BZGRyZXNzKGFkZHJlc3MpLFxuICAgICAgbmV3IEJOKGFtb3VudCksXG4gICAgICB0cnVlLFxuICAgICAgZmFsc2VcbiAgICApO1xuICAgIHJldHVybiBUb25XZWIuQ29udHJhY3QuY3JlYXRlQ29tbW9uTXNnSW5mbyhvcmRlckhlYWRlciwgdW5kZWZpbmVkLCBwYXlsb2FkQ2VsbCk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVFeHRlcm5hbE1lc3NhZ2Uoc2lnbmluZ01lc3NhZ2U6IENlbGwsIHNlcW5vOiBudW1iZXIsIHNpZ25hdHVyZTogc3RyaW5nKTogUHJvbWlzZTxDZWxsPiB7XG4gICAgY29uc3QgYm9keSA9IG5ldyBUb25XZWIuYm9jLkNlbGwoKTtcblxuICAgIGJvZHkuYml0cy53cml0ZUJ5dGVzKEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSwgJ2hleCcpKTtcbiAgICBib2R5LndyaXRlQ2VsbChzaWduaW5nTWVzc2FnZSk7XG5cbiAgICBsZXQgc3RhdGVJbml0O1xuICAgIGlmIChzZXFubyA9PT0gMCkge1xuICAgICAgY29uc3QgV2FsbGV0Q2xhc3MgPSBUb25XZWIuV2FsbGV0cy5hbGxbJ3Y0UjInXTtcbiAgICAgIGNvbnN0IHdhbGxldCA9IG5ldyBXYWxsZXRDbGFzcyhuZXcgVG9uV2ViLkh0dHBQcm92aWRlcigpLCB7XG4gICAgICAgIHB1YmxpY0tleTogVG9uV2ViLnV0aWxzLmhleFRvQnl0ZXModGhpcy5wdWJsaWNLZXkpLFxuICAgICAgICB3YzogMCxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGVwbG95ID0gYXdhaXQgd2FsbGV0LmNyZWF0ZVN0YXRlSW5pdCgpO1xuICAgICAgc3RhdGVJbml0ID0gZGVwbG95LnN0YXRlSW5pdDtcbiAgICB9XG5cbiAgICBjb25zdCBoZWFkZXIgPSBUb25XZWIuQ29udHJhY3QuY3JlYXRlRXh0ZXJuYWxNZXNzYWdlSGVhZGVyKHRoaXMuc2VuZGVyKTtcbiAgICBjb25zdCByZXN1bHRNZXNzYWdlID0gVG9uV2ViLkNvbnRyYWN0LmNyZWF0ZUNvbW1vbk1zZ0luZm8oaGVhZGVyLCBzdGF0ZUluaXQsIGJvZHkpO1xuICAgIHJldHVybiByZXN1bHRNZXNzYWdlO1xuICB9XG5cbiAgbG9hZElucHV0c0FuZE91dHB1dHMoKTogdm9pZCB7XG4gICAgY29uc3Qgb3V0cHV0czogRW50cnlbXSA9IFtdO1xuICAgIGNvbnN0IGlucHV0czogRW50cnlbXSA9IFtdO1xuICAgIGlucHV0cy5wdXNoKHtcbiAgICAgIGFkZHJlc3M6IHRoaXMuc2VuZGVyLFxuICAgICAgdmFsdWU6IHRoaXMucmVjaXBpZW50LmFtb3VudCxcbiAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICB9KTtcbiAgICBvdXRwdXRzLnB1c2goe1xuICAgICAgYWRkcmVzczogdGhpcy5yZWNpcGllbnQuYWRkcmVzcyxcbiAgICAgIHZhbHVlOiB0aGlzLnJlY2lwaWVudC5hbW91bnQsXG4gICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgfSk7XG4gICAgdGhpcy5fb3V0cHV0cyA9IG91dHB1dHM7XG4gICAgdGhpcy5faW5wdXRzID0gaW5wdXRzO1xuICB9XG5cbiAgZnJvbVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY2VsbCA9IFRvbldlYi5ib2MuQ2VsbC5vbmVGcm9tQm9jKFRvbldlYi51dGlscy5iYXNlNjRUb0J5dGVzKHJhd1RyYW5zYWN0aW9uKSk7XG5cbiAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMucGFyc2VUcmFuc2ZlcihjZWxsKTtcbiAgICAgIHBhcnNlZC52YWx1ZSA9IHBhcnNlZC52YWx1ZS50b1N0cmluZygpO1xuICAgICAgcGFyc2VkLmZyb21BZGRyZXNzID0gcGFyc2VkLmZyb21BZGRyZXNzLnRvU3RyaW5nKHRydWUsIHRydWUsIHRydWUpO1xuICAgICAgcGFyc2VkLnRvQWRkcmVzcyA9IHBhcnNlZC50b0FkZHJlc3MudG9TdHJpbmcodHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICB0aGlzLnNlbmRlciA9IHBhcnNlZC5mcm9tQWRkcmVzcztcbiAgICAgIHRoaXMucmVjaXBpZW50ID0geyBhZGRyZXNzOiBwYXJzZWQudG9BZGRyZXNzLCBhbW91bnQ6IHBhcnNlZC52YWx1ZSB9O1xuICAgICAgdGhpcy5zZXFubyA9IHBhcnNlZC5zZXFubztcbiAgICAgIHRoaXMucHVibGljS2V5ID0gcGFyc2VkLnB1YmxpY0tleSBhcyBzdHJpbmc7XG4gICAgICB0aGlzLmV4cGlyZVRpbWUgPSBwYXJzZWQuZXhwaXJlQXQ7XG4gICAgICB0aGlzLm1lc3NhZ2UgPSBwYXJzZWQucGF5bG9hZDtcbiAgICAgIHRoaXMuX3NpZ25hdHVyZXMucHVzaChwYXJzZWQuc2lnbmF0dXJlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcmF3IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGV4cGxhaW5UcmFuc2FjdGlvbigpOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIHtcbiAgICBjb25zdCBkaXNwbGF5T3JkZXIgPSBbJ2lkJywgJ291dHB1dHMnLCAnb3V0cHV0QW1vdW50JywgJ2NoYW5nZU91dHB1dHMnLCAnY2hhbmdlQW1vdW50JywgJ2ZlZSddO1xuXG4gICAgY29uc3Qgb3V0cHV0czogVHJhbnNhY3Rpb25SZWNpcGllbnRbXSA9IFt0aGlzLnJlY2lwaWVudF07XG4gICAgY29uc3Qgb3V0cHV0QW1vdW50ID0gdGhpcy5yZWNpcGllbnQuYW1vdW50O1xuICAgIHJldHVybiB7XG4gICAgICBkaXNwbGF5T3JkZXIsXG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIG91dHB1dHMsXG4gICAgICBvdXRwdXRBbW91bnQsXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgZmVlOiB7IGZlZTogJ1VOS05PV04nIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VUcmFuc2ZlcihjZWxsOiBDZWxsKTogYW55IHtcbiAgICBjb25zdCBzbGljZSA9IChjZWxsIGFzIGFueSkuYmVnaW5QYXJzZSgpO1xuXG4gICAgLy8gaGVhZGVyXG5cbiAgICBpZiAoc2xpY2UubG9hZFVpbnQoMikudG9OdW1iZXIoKSAhPT0gMikgdGhyb3cgRXJyb3IoJ2ludmFsaWQgaGVhZGVyJyk7XG5cbiAgICBjb25zdCBleHRlcm5hbFNvdXJjZUFkZHJlc3MgPSBzbGljZS5sb2FkQWRkcmVzcygpO1xuICAgIGlmIChleHRlcm5hbFNvdXJjZUFkZHJlc3MgIT09IG51bGwpIHRocm93IEVycm9yKCdpbnZhbGlkIGV4dGVybmFsU291cmNlQWRkcmVzcycpO1xuXG4gICAgY29uc3QgZXh0ZXJuYWxEZXN0QWRkcmVzcyA9IHNsaWNlLmxvYWRBZGRyZXNzKCk7XG5cbiAgICBjb25zdCBleHRlcm5hbEltcG9ydEZlZSA9IHNsaWNlLmxvYWRDb2lucygpO1xuICAgIGlmICghZXh0ZXJuYWxJbXBvcnRGZWUuZXEobmV3IEJOKDApKSkgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGV4dGVybmFsSW1wb3J0RmVlJyk7XG5cbiAgICAvLyBzdGF0ZUluaXRcblxuICAgIGxldCBwdWJsaWNLZXk7XG4gICAgaWYgKHNsaWNlLmxvYWRCaXQoKSkge1xuICAgICAgaWYgKHNsaWNlLmxvYWRCaXQoKSkge1xuICAgICAgICBjb25zdCBzdGF0ZUluaXQgPSBzbGljZS5sb2FkUmVmKCk7XG4gICAgICAgIHN0YXRlSW5pdC5sb2FkUmVmKCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBzdGF0ZUluaXQubG9hZFJlZigpO1xuICAgICAgICBjb25zdCBzZXFubyA9IGRhdGEubG9hZFVpbnQoMzIpLnRvTnVtYmVyKCk7XG4gICAgICAgIGlmIChzZXFubyAhPT0gMCkgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHNlcW5vJyk7XG4gICAgICAgIGNvbnN0IHdhbGxldElkID0gZGF0YS5sb2FkVWludCgzMikudG9OdW1iZXIoKTtcbiAgICAgICAgaWYgKHdhbGxldElkICE9PSBXQUxMRVRfSUQpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB3YWxsZXQgaWQnKTtcbiAgICAgICAgY29uc3QgcHVibGljS2V5QnVmID0gbmV3IFVpbnQ4QXJyYXkoMzIpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHB1YmxpY0tleUJ1Zi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHB1YmxpY0tleUJ1ZltpXSA9IGRhdGEubG9hZFVpbnQoOCk7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljS2V5ID0gQnVmZmVyLmZyb20ocHVibGljS2V5QnVmKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYm9keVxuICAgIGNvbnN0IGJvZHlTbGljZSA9IHNsaWNlLmxvYWRCaXQoKSA/IHNsaWNlLmxvYWRSZWYoKSA6IHNsaWNlO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZyb21BZGRyZXNzOiBleHRlcm5hbERlc3RBZGRyZXNzLFxuICAgICAgcHVibGljS2V5LFxuICAgICAgLi4udGhpcy5wYXJzZVRyYW5zZmVyQm9keShib2R5U2xpY2UpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHBhcnNlVHJhbnNmZXJCb2R5KHNsaWNlOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IEJ1ZmZlci5mcm9tKHNsaWNlLmxvYWRCaXRzKDUxMikpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAvLyBzaWduaW5nIG1lc3NhZ2VcblxuICAgIGNvbnN0IHdhbGxldElkID0gc2xpY2UubG9hZFVpbnQoMzIpLnRvTnVtYmVyKCk7XG4gICAgaWYgKHdhbGxldElkICE9PSBXQUxMRVRfSUQpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB3YWxsZXRJZCcpO1xuXG4gICAgY29uc3QgZXhwaXJlQXQgPSBzbGljZS5sb2FkVWludCgzMikudG9OdW1iZXIoKTtcblxuICAgIGNvbnN0IHNlcW5vID0gc2xpY2UubG9hZFVpbnQoMzIpLnRvTnVtYmVyKCk7XG5cbiAgICBjb25zdCBvcCA9IHNsaWNlLmxvYWRVaW50KDgpLnRvTnVtYmVyKCk7XG4gICAgaWYgKG9wICE9PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgb3AnKTtcblxuICAgIGNvbnN0IHNlbmRNb2RlID0gc2xpY2UubG9hZFVpbnQoOCkudG9OdW1iZXIoKTtcbiAgICBpZiAoc2VuZE1vZGUgIT09IDMpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzZW5kTW9kZScpO1xuXG4gICAgbGV0IG9yZGVyID0gc2xpY2UubG9hZFJlZigpO1xuXG4gICAgaWYgKG9yZGVyLmxvYWRCaXQoKSkgdGhyb3cgRXJyb3IoJ2ludmFsaWQgaW50ZXJuYWwgaGVhZGVyJyk7XG4gICAgaWYgKCFvcmRlci5sb2FkQml0KCkpIHRocm93IEVycm9yKCdpbnZhbGlkIGlockRpc2FibGVkJyk7XG4gICAgY29uc3QgYm91bmNlID0gb3JkZXIubG9hZEJpdCgpO1xuICAgIGlmIChvcmRlci5sb2FkQml0KCkpIHRocm93IEVycm9yKCdpbnZhbGlkIGJvdW5jZWQnKTtcbiAgICBjb25zdCBzb3VyY2VBZGRyZXNzID0gb3JkZXIubG9hZEFkZHJlc3MoKTtcbiAgICBpZiAoc291cmNlQWRkcmVzcyAhPT0gbnVsbCkgdGhyb3cgRXJyb3IoJ2ludmFsaWQgZXh0ZXJuYWxTb3VyY2VBZGRyZXNzJyk7XG4gICAgY29uc3QgZGVzdEFkZHJlc3MgPSBvcmRlci5sb2FkQWRkcmVzcygpO1xuICAgIGNvbnN0IHZhbHVlID0gb3JkZXIubG9hZENvaW5zKCk7XG5cbiAgICBpZiAob3JkZXIubG9hZEJpdCgpKSB0aHJvdyBFcnJvcignaW52YWxpZCBjdXJyZW5jeUNvbGxlY3Rpb24nKTtcbiAgICBjb25zdCBpaHJGZWVzID0gb3JkZXIubG9hZENvaW5zKCk7XG4gICAgaWYgKCFpaHJGZWVzLmVxKG5ldyBCTigwKSkpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBpaHJGZWVzJyk7XG4gICAgY29uc3QgZndkRmVlcyA9IG9yZGVyLmxvYWRDb2lucygpO1xuICAgIGlmICghZndkRmVlcy5lcShuZXcgQk4oMCkpKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgZndkRmVlcycpO1xuICAgIGNvbnN0IGNyZWF0ZWRMdCA9IG9yZGVyLmxvYWRVaW50KDY0KTtcbiAgICBpZiAoIWNyZWF0ZWRMdC5lcShuZXcgQk4oMCkpKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgY3JlYXRlZEx0Jyk7XG4gICAgY29uc3QgY3JlYXRlZEF0ID0gb3JkZXIubG9hZFVpbnQoMzIpO1xuICAgIGlmICghY3JlYXRlZEF0LmVxKG5ldyBCTigwKSkpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBjcmVhdGVkQXQnKTtcblxuICAgIC8vIG9yZGVyIHN0YXRlSW5pdFxuICAgIGlmIChvcmRlci5sb2FkQml0KCkpIHtcbiAgICAgIG9yZGVyLmxvYWRSZWYoKTsgLy8gZG9uJ3QgcGFyc2Ugc3RhdGVJbml0XG4gICAgfVxuXG4gICAgLy8gb3JkZXIgYm9keVxuICAgIGxldCBwYXlsb2FkO1xuXG4gICAgaWYgKG9yZGVyLmdldEZyZWVCaXRzKCkgPiAwKSB7XG4gICAgICBpZiAob3JkZXIubG9hZEJpdCgpKSB7XG4gICAgICAgIG9yZGVyID0gb3JkZXIubG9hZFJlZigpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3JkZXIuZ2V0RnJlZUJpdHMoKSA+IDMyKSB7XG4gICAgICAgIGNvbnN0IG9wID0gb3JkZXIubG9hZFVpbnQoMzIpO1xuICAgICAgICBjb25zdCBwYXlsb2FkQnl0ZXMgPSBvcmRlci5sb2FkQml0cyhvcmRlci5nZXRGcmVlQml0cygpKTtcbiAgICAgICAgcGF5bG9hZCA9IG9wLmVxKG5ldyBCTigwKSkgPyBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUocGF5bG9hZEJ5dGVzKSA6ICcnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdG9BZGRyZXNzOiBkZXN0QWRkcmVzcyxcbiAgICAgIHZhbHVlLFxuICAgICAgYm91bmNlLFxuICAgICAgc2Vxbm8sXG4gICAgICBleHBpcmVBdCxcbiAgICAgIHBheWxvYWQsXG4gICAgICBzaWduYXR1cmUsXG4gICAgICB3YWxsZXRJZCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVRyYW5zZmVyU3RhdGVJbml0KHNsaWNlOiBhbnkpOiBhbnkge1xuICAgIGlmIChzbGljZSA9PT0gbnVsbCkgcmV0dXJuIHt9O1xuICAgIHNsaWNlLmxvYWRSZWYoKTtcbiAgICBjb25zdCBkYXRhID0gc2xpY2UubG9hZFJlZigpO1xuICAgIGNvbnN0IHNlcW5vID0gZGF0YS5sb2FkVWludCgzMikudG9OdW1iZXIoKTtcbiAgICBpZiAoc2Vxbm8gIT09IDApIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzZXFubycpO1xuICAgIGNvbnN0IHdhbGxldElkID0gZGF0YS5sb2FkVWludCgzMikudG9OdW1iZXIoKTtcbiAgICBpZiAod2FsbGV0SWQgIT09IFdBTExFVF9JRCkgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHdhbGxldCBpZCcpO1xuICAgIGNvbnN0IHB1YmxpY0tleSA9IG5ldyBVaW50OEFycmF5KDMyKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHB1YmxpY0tleS5sZW5ndGg7IGkrKykge1xuICAgICAgcHVibGljS2V5W2ldID0gZGF0YS5sb2FkVWludCg4KTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHB1YmxpY0tleTogQnVmZmVyLmZyb20ocHVibGljS2V5KS50b1N0cmluZygnaGV4JyksXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
320
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1EQUF5SDtBQUd6SCxvREFBNEI7QUFDNUIsaUNBQTJCO0FBRTNCLDZEQUF1RDtBQUV2RCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFFNUIsTUFBYSxXQUFZLFNBQVEsMEJBQWU7SUFjOUMsWUFBWSxVQUFnQztRQUMxQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUNsQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxPQUFPLENBQUMsR0FBWTtRQUNsQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVELE1BQU07UUFDSixNQUFNLFdBQVcsR0FBRyxJQUFJLGdCQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUNyRSxJQUFJLEVBQ0osSUFBSSxFQUNKLENBQUMsSUFBSSxnQkFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FDekQsQ0FBQztRQUNGLE9BQU87WUFDTCxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQWE7WUFDdEIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU87WUFDbkMsZ0JBQWdCLEVBQUUsV0FBVztZQUM3QixNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNO1lBQzdCLGNB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QixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDaEIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzdCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDM0MsSUFBSSxLQUFLLEtBQUssQ0FBQztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDbEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM5QyxJQUFJLFFBQVEsS0FBSyxTQUFTO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sU0FBUyxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDMUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUNELE9BQU87WUFDTCxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1NBQ2xELENBQUM7SUFDSixDQUFDO0NBQ0Y7QUEzVkQsa0NBMlZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUtleSwgQmFzZVRyYW5zYWN0aW9uLCBFbnRyeSwgUmVjaXBpZW50LCBUcmFuc2FjdGlvblJlY2lwaWVudCwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgVHhEYXRhLCBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgVG9uV2ViIGZyb20gJ3RvbndlYic7XG5pbXBvcnQgeyBCTiB9IGZyb20gJ2JuLmpzJztcbmltcG9ydCB7IENlbGwgfSBmcm9tICd0b253ZWIvZGlzdC90eXBlcy9ib2MvY2VsbCc7XG5pbXBvcnQgeyBXSVRIRFJBV19PUENPREUgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5cbmNvbnN0IFdBTExFVF9JRCA9IDY5ODk4MzE5MTtcblxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uIHtcbiAgcHVibGljIHJlY2lwaWVudDogUmVjaXBpZW50O1xuICBwdWJsaWMgYm91bmNlYWJsZTogYm9vbGVhbjtcbiAgcHVibGljIGZyb21BZGRyZXNzQm91bmNlYWJsZTogYm9vbGVhbjtcbiAgcHVibGljIHRvQWRkcmVzc0JvdW5jZWFibGU6IGJvb2xlYW47XG4gIHB1YmxpYyBtZXNzYWdlOiBzdHJpbmc7XG4gIHB1YmxpYyB3aXRoZHJhd0Ftb3VudDogc3RyaW5nO1xuICBzZXFubzogbnVtYmVyO1xuICBleHBpcmVUaW1lOiBudW1iZXI7XG4gIHNlbmRlcjogc3RyaW5nO1xuICBwdWJsaWNLZXk6IHN0cmluZztcbiAgcHJpdmF0ZSB1bnNpZ25lZE1lc3NhZ2U6IHN0cmluZztcbiAgcHJpdmF0ZSBmaW5hbE1lc3NhZ2U6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihjb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKGNvaW5Db25maWcpO1xuICAgIHRoaXMuYm91bmNlYWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuZnJvbUFkZHJlc3NCb3VuY2VhYmxlID0gdHJ1ZTtcbiAgICB0aGlzLnRvQWRkcmVzc0JvdW5jZWFibGUgPSB0cnVlO1xuICB9XG5cbiAgY2FuU2lnbihrZXk6IEJhc2VLZXkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB0b0Jyb2FkY2FzdEZvcm1hdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmZpbmFsTWVzc2FnZTtcbiAgfVxuXG4gIHRvSnNvbigpOiBUeERhdGEge1xuICAgIGNvbnN0IG90aGVyRm9ybWF0ID0gbmV3IFRvbldlYi5BZGRyZXNzKHRoaXMucmVjaXBpZW50LmFkZHJlc3MpLnRvU3RyaW5nKFxuICAgICAgdHJ1ZSxcbiAgICAgIHRydWUsXG4gICAgICAhbmV3IFRvbldlYi5BZGRyZXNzKHRoaXMucmVjaXBpZW50LmFkZHJlc3MpLmlzQm91bmNlYWJsZVxuICAgICk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0aGlzLl9pZCBhcyBzdHJpbmcsXG4gICAgICBzZW5kZXI6IHRoaXMuc2VuZGVyLFxuICAgICAgZGVzdGluYXRpb246IHRoaXMucmVjaXBpZW50LmFkZHJlc3MsXG4gICAgICBkZXN0aW5hdGlvbkFsaWFzOiBvdGhlckZvcm1hdCxcbiAgICAgIGFtb3VudDogdGhpcy5yZWNpcGllbnQuYW1vdW50LFxuICAgICAgd2l0aGRyYXdBbW91bnQ6IHRoaXMud2l0aGRyYXdBbW91bnQsXG4gICAgICBzZXFubzogdGhpcy5zZXFubyxcbiAgICAgIGV4cGlyYXRpb25UaW1lOiB0aGlzLmV4cGlyZVRpbWUsXG4gICAgICBwdWJsaWNLZXk6IHRoaXMucHVibGljS2V5LFxuICAgICAgc2lnbmF0dXJlOiB0aGlzLl9zaWduYXR1cmVzWzBdLFxuICAgICAgYm91bmNlYWJsZTogdGhpcy5ib3VuY2VhYmxlLFxuICAgIH07XG4gIH1cblxuICBnZXQgc2lnbmFibGVQYXlsb2FkKCk6IEJ1ZmZlciB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHRoaXMudW5zaWduZWRNZXNzYWdlLCAnaGV4Jyk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB0cmFuc2FjdGlvbiB0eXBlLlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uVHlwZX0gdHJhbnNhY3Rpb25UeXBlIFRoZSB0cmFuc2FjdGlvbiB0eXBlIHRvIGJlIHNldC5cbiAgICovXG4gIHNldCB0cmFuc2FjdGlvblR5cGUodHJhbnNhY3Rpb25UeXBlOiBUcmFuc2FjdGlvblR5cGUpIHtcbiAgICB0aGlzLl90eXBlID0gdHJhbnNhY3Rpb25UeXBlO1xuICB9XG5cbiAgYXN5bmMgYnVpbGQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc2lnbmluZ01lc3NhZ2UgPSB0aGlzLmNyZWF0ZVNpZ25pbmdNZXNzYWdlKFdBTExFVF9JRCwgdGhpcy5zZXFubywgdGhpcy5leHBpcmVUaW1lKTtcbiAgICBjb25zdCBzZW5kTW9kZSA9IDM7XG4gICAgc2lnbmluZ01lc3NhZ2UuYml0cy53cml0ZVVpbnQ4KHNlbmRNb2RlKTtcbiAgICBjb25zdCBvdXRNc2cgPSB0aGlzLmNyZWF0ZU91dE1zZyh0aGlzLnJlY2lwaWVudC5hZGRyZXNzLCB0aGlzLnJlY2lwaWVudC5hbW91bnQsIHRoaXMubWVzc2FnZSk7XG4gICAgc2lnbmluZ01lc3NhZ2UucmVmcy5wdXNoKG91dE1zZyk7XG4gICAgdGhpcy51bnNpZ25lZE1lc3NhZ2UgPSBCdWZmZXIuZnJvbShhd2FpdCBzaWduaW5nTWVzc2FnZS5oYXNoKCkpLnRvU3RyaW5nKCdoZXgnKTtcblxuICAgIGNvbnN0IHNpZ25hdHVyZSA9XG4gICAgICB0aGlzLl9zaWduYXR1cmVzLmxlbmd0aCA+IDAgPyB0aGlzLl9zaWduYXR1cmVzWzBdIDogQnVmZmVyLmZyb20obmV3IFVpbnQ4QXJyYXkoNjQpKS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3QgZmluYWxNZXNzYWdlID0gYXdhaXQgdGhpcy5jcmVhdGVFeHRlcm5hbE1lc3NhZ2Uoc2lnbmluZ01lc3NhZ2UsIHRoaXMuc2Vxbm8sIHNpZ25hdHVyZSk7XG5cbiAgICB0aGlzLmZpbmFsTWVzc2FnZSA9IFRvbldlYi51dGlscy5ieXRlc1RvQmFzZTY0KGF3YWl0IGZpbmFsTWVzc2FnZS50b0JvYyhmYWxzZSkpO1xuXG4gICAgY29uc3Qgb3JpZ2luYWxUeElkID0gVG9uV2ViLnV0aWxzLmJ5dGVzVG9CYXNlNjQoYXdhaXQgZmluYWxNZXNzYWdlLmhhc2goKSk7XG4gICAgdGhpcy5faWQgPSBvcmlnaW5hbFR4SWQucmVwbGFjZSgvXFwvL2csICdfJykucmVwbGFjZSgvXFwrL2csICctJyk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVNpZ25pbmdNZXNzYWdlKHdhbGxldElkLCBzZXFubywgZXhwaXJlQXQpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gbmV3IFRvbldlYi5ib2MuQ2VsbCgpO1xuICAgIG1lc3NhZ2UuYml0cy53cml0ZVVpbnQod2FsbGV0SWQsIDMyKTtcbiAgICAvLyBleHBpcmVBdCBzaG91bGQgYmUgc2V0IGFzIHBlciB0aGUgcHJvdmlkZWQgYXJnIHZhbHVlLCByZWdhcmRsZXNzIG9mIHRoZSBzZXFub1xuICAgIG1lc3NhZ2UuYml0cy53cml0ZVVpbnQoZXhwaXJlQXQsIDMyKTtcbiAgICBtZXNzYWdlLmJpdHMud3JpdGVVaW50KHNlcW5vLCAzMik7XG4gICAgbWVzc2FnZS5iaXRzLndyaXRlVWludCgwLCA4KTsgLy8gb3BcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlT3V0TXNnKGFkZHJlc3MsIGFtb3VudCwgcGF5bG9hZCkge1xuICAgIGxldCBwYXlsb2FkQ2VsbCA9IG5ldyBUb25XZWIuYm9jLkNlbGwoKTtcbiAgICBpZiAocGF5bG9hZCkge1xuICAgICAgaWYgKHBheWxvYWQucmVmcykge1xuICAgICAgICAvLyBpcyBDZWxsXG4gICAgICAgIHBheWxvYWRDZWxsID0gcGF5bG9hZDtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHBheWxvYWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmIChwYXlsb2FkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpZiAocGF5bG9hZC5sZW5ndGggPiAyNCAmJiBwYXlsb2FkLnN1YnN0cmluZygwLCA4KSA9PT0gV0lUSERSQVdfT1BDT0RFKSB7XG4gICAgICAgICAgICAvLyBwYXlsb2FkIGlzIGEgd2l0aGRyYXcgdHhuIG1lc3NhZ2VcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5SWQgPSBwYXlsb2FkLnN1YnN0cmluZyg4LCAyNCk7XG4gICAgICAgICAgICBjb25zdCB3aXRoZHJhd0Ftb3VudCA9IHBheWxvYWQuc3Vic3RyaW5nKDI0KTtcbiAgICAgICAgICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlICovXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgcGF5bG9hZDogJHtwYXlsb2FkfSwgcXVlcnlJZDogJHtxdWVyeUlkfSwgd2l0aGRyYXdBbW91bnQ6ICR7d2l0aGRyYXdBbW91bnR9YCk7XG4gICAgICAgICAgICBwYXlsb2FkQ2VsbC5iaXRzLndyaXRlVWludChwYXJzZUludChXSVRIRFJBV19PUENPREUsIDE2KSwgMzIpO1xuICAgICAgICAgICAgcGF5bG9hZENlbGwuYml0cy53cml0ZVVpbnQocGFyc2VJbnQocXVlcnlJZCwgMTYpLCA2NCk7XG4gICAgICAgICAgICBwYXlsb2FkQ2VsbC5iaXRzLndyaXRlQ29pbnMobmV3IEJOKHdpdGhkcmF3QW1vdW50KSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBheWxvYWRDZWxsLmJpdHMud3JpdGVVaW50KDAsIDMyKTtcbiAgICAgICAgICAgIHBheWxvYWRDZWxsLmJpdHMud3JpdGVTdHJpbmcocGF5bG9hZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXlsb2FkQ2VsbC5iaXRzLndyaXRlQnl0ZXMocGF5bG9hZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb3JkZXJIZWFkZXIgPSBUb25XZWIuQ29udHJhY3QuY3JlYXRlSW50ZXJuYWxNZXNzYWdlSGVhZGVyKFxuICAgICAgbmV3IFRvbldlYi5BZGRyZXNzKGFkZHJlc3MpLFxuICAgICAgbmV3IEJOKGFtb3VudCksXG4gICAgICB0cnVlLFxuICAgICAgdGhpcy5ib3VuY2VhYmxlXG4gICAgKTtcbiAgICByZXR1cm4gVG9uV2ViLkNvbnRyYWN0LmNyZWF0ZUNvbW1vbk1zZ0luZm8ob3JkZXJIZWFkZXIsIHVuZGVmaW5lZCwgcGF5bG9hZENlbGwpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlRXh0ZXJuYWxNZXNzYWdlKHNpZ25pbmdNZXNzYWdlOiBDZWxsLCBzZXFubzogbnVtYmVyLCBzaWduYXR1cmU6IHN0cmluZyk6IFByb21pc2U8Q2VsbD4ge1xuICAgIGNvbnN0IGJvZHkgPSBuZXcgVG9uV2ViLmJvYy5DZWxsKCk7XG5cbiAgICBib2R5LmJpdHMud3JpdGVCeXRlcyhCdWZmZXIuZnJvbShzaWduYXR1cmUsICdoZXgnKSk7XG4gICAgYm9keS53cml0ZUNlbGwoc2lnbmluZ01lc3NhZ2UpO1xuXG4gICAgbGV0IHN0YXRlSW5pdDtcbiAgICBpZiAoc2Vxbm8gPT09IDApIHtcbiAgICAgIGNvbnN0IFdhbGxldENsYXNzID0gVG9uV2ViLldhbGxldHMuYWxsWyd2NFIyJ107XG4gICAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0Q2xhc3MobmV3IFRvbldlYi5IdHRwUHJvdmlkZXIoKSwge1xuICAgICAgICBwdWJsaWNLZXk6IFRvbldlYi51dGlscy5oZXhUb0J5dGVzKHRoaXMucHVibGljS2V5KSxcbiAgICAgICAgd2M6IDAsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRlcGxveSA9IGF3YWl0IHdhbGxldC5jcmVhdGVTdGF0ZUluaXQoKTtcbiAgICAgIHN0YXRlSW5pdCA9IGRlcGxveS5zdGF0ZUluaXQ7XG4gICAgfVxuXG4gICAgY29uc3QgaGVhZGVyID0gVG9uV2ViLkNvbnRyYWN0LmNyZWF0ZUV4dGVybmFsTWVzc2FnZUhlYWRlcih0aGlzLnNlbmRlcik7XG4gICAgY29uc3QgcmVzdWx0TWVzc2FnZSA9IFRvbldlYi5Db250cmFjdC5jcmVhdGVDb21tb25Nc2dJbmZvKGhlYWRlciwgc3RhdGVJbml0LCBib2R5KTtcbiAgICByZXR1cm4gcmVzdWx0TWVzc2FnZTtcbiAgfVxuXG4gIGxvYWRJbnB1dHNBbmRPdXRwdXRzKCk6IHZvaWQge1xuICAgIGNvbnN0IG91dHB1dHM6IEVudHJ5W10gPSBbXTtcbiAgICBjb25zdCBpbnB1dHM6IEVudHJ5W10gPSBbXTtcbiAgICBpbnB1dHMucHVzaCh7XG4gICAgICBhZGRyZXNzOiB0aGlzLnNlbmRlcixcbiAgICAgIHZhbHVlOiB0aGlzLnJlY2lwaWVudC5hbW91bnQsXG4gICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgfSk7XG4gICAgb3V0cHV0cy5wdXNoKHtcbiAgICAgIGFkZHJlc3M6IHRoaXMucmVjaXBpZW50LmFkZHJlc3MsXG4gICAgICB2YWx1ZTogdGhpcy5yZWNpcGllbnQuYW1vdW50LFxuICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgIH0pO1xuICAgIHRoaXMuX291dHB1dHMgPSBvdXRwdXRzO1xuICAgIHRoaXMuX2lucHV0cyA9IGlucHV0cztcbiAgfVxuXG4gIGZyb21SYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNlbGwgPSBUb25XZWIuYm9jLkNlbGwub25lRnJvbUJvYyhUb25XZWIudXRpbHMuYmFzZTY0VG9CeXRlcyhyYXdUcmFuc2FjdGlvbikpO1xuXG4gICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLnBhcnNlVHJhbnNhY3Rpb24oY2VsbCk7XG4gICAgICBwYXJzZWQudmFsdWUgPSBwYXJzZWQudmFsdWUudG9TdHJpbmcoKTtcbiAgICAgIHBhcnNlZC5mcm9tQWRkcmVzcyA9IHBhcnNlZC5mcm9tQWRkcmVzcy50b1N0cmluZyh0cnVlLCB0cnVlLCB0aGlzLmZyb21BZGRyZXNzQm91bmNlYWJsZSk7XG4gICAgICBwYXJzZWQudG9BZGRyZXNzID0gcGFyc2VkLnRvQWRkcmVzcy50b1N0cmluZyh0cnVlLCB0cnVlLCB0aGlzLnRvQWRkcmVzc0JvdW5jZWFibGUpO1xuICAgICAgdGhpcy5zZW5kZXIgPSBwYXJzZWQuZnJvbUFkZHJlc3M7XG4gICAgICB0aGlzLnJlY2lwaWVudCA9IHsgYWRkcmVzczogcGFyc2VkLnRvQWRkcmVzcywgYW1vdW50OiBwYXJzZWQudmFsdWUgfTtcbiAgICAgIHRoaXMud2l0aGRyYXdBbW91bnQgPSBwYXJzZWQud2l0aGRyYXdBbW91bnQ7XG4gICAgICB0aGlzLnNlcW5vID0gcGFyc2VkLnNlcW5vO1xuICAgICAgdGhpcy5wdWJsaWNLZXkgPSBwYXJzZWQucHVibGljS2V5IGFzIHN0cmluZztcbiAgICAgIHRoaXMuZXhwaXJlVGltZSA9IHBhcnNlZC5leHBpcmVBdDtcbiAgICAgIHRoaXMubWVzc2FnZSA9IHBhcnNlZC5wYXlsb2FkO1xuICAgICAgdGhpcy5fc2lnbmF0dXJlcy5wdXNoKHBhcnNlZC5zaWduYXR1cmUpO1xuICAgICAgdGhpcy5ib3VuY2VhYmxlID0gcGFyc2VkLmJvdW5jZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcmF3IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGV4cGxhaW5UcmFuc2FjdGlvbigpOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIHtcbiAgICBjb25zdCBkaXNwbGF5T3JkZXIgPSBbJ2lkJywgJ291dHB1dHMnLCAnb3V0cHV0QW1vdW50JywgJ2NoYW5nZU91dHB1dHMnLCAnY2hhbmdlQW1vdW50JywgJ2ZlZScsICd3aXRoZHJhd0Ftb3VudCddO1xuXG4gICAgY29uc3Qgb3V0cHV0czogVHJhbnNhY3Rpb25SZWNpcGllbnRbXSA9IFt0aGlzLnJlY2lwaWVudF07XG4gICAgY29uc3Qgb3V0cHV0QW1vdW50ID0gdGhpcy5yZWNpcGllbnQuYW1vdW50O1xuICAgIGNvbnN0IHdpdGhkcmF3QW1vdW50ID0gdGhpcy53aXRoZHJhd0Ftb3VudDtcbiAgICByZXR1cm4ge1xuICAgICAgZGlzcGxheU9yZGVyLFxuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICBvdXRwdXRzLFxuICAgICAgb3V0cHV0QW1vdW50LFxuICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgIGZlZTogeyBmZWU6ICdVTktOT1dOJyB9LFxuICAgICAgd2l0aGRyYXdBbW91bnQsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VUcmFuc2FjdGlvbihjZWxsOiBDZWxsKTogYW55IHtcbiAgICBjb25zdCBzbGljZSA9IChjZWxsIGFzIGFueSkuYmVnaW5QYXJzZSgpO1xuXG4gICAgLy8gaGVhZGVyXG5cbiAgICBpZiAoc2xpY2UubG9hZFVpbnQoMikudG9OdW1iZXIoKSAhPT0gMikgdGhyb3cgRXJyb3IoJ2ludmFsaWQgaGVhZGVyJyk7XG5cbiAgICBjb25zdCBleHRlcm5hbFNvdXJjZUFkZHJlc3MgPSBzbGljZS5sb2FkQWRkcmVzcygpO1xuICAgIGlmIChleHRlcm5hbFNvdXJjZUFkZHJlc3MgIT09IG51bGwpIHRocm93IEVycm9yKCdpbnZhbGlkIGV4dGVybmFsU291cmNlQWRkcmVzcycpO1xuXG4gICAgY29uc3QgZXh0ZXJuYWxEZXN0QWRkcmVzcyA9IHNsaWNlLmxvYWRBZGRyZXNzKCk7XG5cbiAgICBjb25zdCBleHRlcm5hbEltcG9ydEZlZSA9IHNsaWNlLmxvYWRDb2lucygpO1xuICAgIGlmICghZXh0ZXJuYWxJbXBvcnRGZWUuZXEobmV3IEJOKDApKSkgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGV4dGVybmFsSW1wb3J0RmVlJyk7XG5cbiAgICAvLyBzdGF0ZUluaXRcblxuICAgIGxldCBwdWJsaWNLZXk7XG4gICAgaWYgKHNsaWNlLmxvYWRCaXQoKSkge1xuICAgICAgaWYgKHNsaWNlLmxvYWRCaXQoKSkge1xuICAgICAgICBjb25zdCBzdGF0ZUluaXQgPSBzbGljZS5sb2FkUmVmKCk7XG4gICAgICAgIHN0YXRlSW5pdC5sb2FkUmVmKCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBzdGF0ZUluaXQubG9hZFJlZigpO1xuICAgICAgICBjb25zdCBzZXFubyA9IGRhdGEubG9hZFVpbnQoMzIpLnRvTnVtYmVyKCk7XG4gICAgICAgIGlmIChzZXFubyAhPT0gMCkgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHNlcW5vJyk7XG4gICAgICAgIGNvbnN0IHdhbGxldElkID0gZGF0YS5sb2FkVWludCgzMikudG9OdW1iZXIoKTtcbiAgICAgICAgaWYgKHdhbGxldElkICE9PSBXQUxMRVRfSUQpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB3YWxsZXQgaWQnKTtcbiAgICAgICAgY29uc3QgcHVibGljS2V5QnVmID0gbmV3IFVpbnQ4QXJyYXkoMzIpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHB1YmxpY0tleUJ1Zi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHB1YmxpY0tleUJ1ZltpXSA9IGRhdGEubG9hZFVpbnQoOCk7XG4gICAgICAgIH1cbiAgICAgICAgcHVibGljS2V5ID0gQnVmZmVyLmZyb20ocHVibGljS2V5QnVmKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYm9keVxuICAgIGNvbnN0IGJvZHlTbGljZSA9IHNsaWNlLmxvYWRCaXQoKSA/IHNsaWNlLmxvYWRSZWYoKSA6IHNsaWNlO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZyb21BZGRyZXNzOiBleHRlcm5hbERlc3RBZGRyZXNzLFxuICAgICAgcHVibGljS2V5LFxuICAgICAgLi4udGhpcy5wYXJzZVRyYW5zYWN0aW9uQm9keShib2R5U2xpY2UpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHBhcnNlVHJhbnNhY3Rpb25Cb2R5KHNsaWNlOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IEJ1ZmZlci5mcm9tKHNsaWNlLmxvYWRCaXRzKDUxMikpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAvLyBzaWduaW5nIG1lc3NhZ2VcblxuICAgIGNvbnN0IHdhbGxldElkID0gc2xpY2UubG9hZFVpbnQoMzIpLnRvTnVtYmVyKCk7XG4gICAgaWYgKHdhbGxldElkICE9PSBXQUxMRVRfSUQpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB3YWxsZXRJZCcpO1xuXG4gICAgY29uc3QgZXhwaXJlQXQgPSBzbGljZS5sb2FkVWludCgzMikudG9OdW1iZXIoKTtcblxuICAgIGNvbnN0IHNlcW5vID0gc2xpY2UubG9hZFVpbnQoMzIpLnRvTnVtYmVyKCk7XG5cbiAgICBjb25zdCBvcCA9IHNsaWNlLmxvYWRVaW50KDgpLnRvTnVtYmVyKCk7XG4gICAgaWYgKG9wICE9PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgb3AnKTtcblxuICAgIGNvbnN0IHNlbmRNb2RlID0gc2xpY2UubG9hZFVpbnQoOCkudG9OdW1iZXIoKTtcbiAgICBpZiAoc2VuZE1vZGUgIT09IDMpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzZW5kTW9kZScpO1xuXG4gICAgbGV0IG9yZGVyID0gc2xpY2UubG9hZFJlZigpO1xuXG4gICAgaWYgKG9yZGVyLmxvYWRCaXQoKSkgdGhyb3cgRXJyb3IoJ2ludmFsaWQgaW50ZXJuYWwgaGVhZGVyJyk7XG4gICAgaWYgKCFvcmRlci5sb2FkQml0KCkpIHRocm93IEVycm9yKCdpbnZhbGlkIGlockRpc2FibGVkJyk7XG4gICAgY29uc3QgYm91bmNlID0gb3JkZXIubG9hZEJpdCgpO1xuICAgIGlmIChvcmRlci5sb2FkQml0KCkpIHRocm93IEVycm9yKCdpbnZhbGlkIGJvdW5jZWQnKTtcbiAgICBjb25zdCBzb3VyY2VBZGRyZXNzID0gb3JkZXIubG9hZEFkZHJlc3MoKTtcbiAgICBpZiAoc291cmNlQWRkcmVzcyAhPT0gbnVsbCkgdGhyb3cgRXJyb3IoJ2ludmFsaWQgZXh0ZXJuYWxTb3VyY2VBZGRyZXNzJyk7XG4gICAgY29uc3QgZGVzdEFkZHJlc3MgPSBvcmRlci5sb2FkQWRkcmVzcygpO1xuICAgIGNvbnN0IHZhbHVlID0gb3JkZXIubG9hZENvaW5zKCk7XG5cbiAgICBpZiAob3JkZXIubG9hZEJpdCgpKSB0aHJvdyBFcnJvcignaW52YWxpZCBjdXJyZW5jeUNvbGxlY3Rpb24nKTtcbiAgICBjb25zdCBpaHJGZWVzID0gb3JkZXIubG9hZENvaW5zKCk7XG4gICAgaWYgKCFpaHJGZWVzLmVxKG5ldyBCTigwKSkpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBpaHJGZWVzJyk7XG4gICAgY29uc3QgZndkRmVlcyA9IG9yZGVyLmxvYWRDb2lucygpO1xuICAgIGlmICghZndkRmVlcy5lcShuZXcgQk4oMCkpKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgZndkRmVlcycpO1xuICAgIGNvbnN0IGNyZWF0ZWRMdCA9IG9yZGVyLmxvYWRVaW50KDY0KTtcbiAgICBpZiAoIWNyZWF0ZWRMdC5lcShuZXcgQk4oMCkpKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgY3JlYXRlZEx0Jyk7XG4gICAgY29uc3QgY3JlYXRlZEF0ID0gb3JkZXIubG9hZFVpbnQoMzIpO1xuICAgIGlmICghY3JlYXRlZEF0LmVxKG5ldyBCTigwKSkpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBjcmVhdGVkQXQnKTtcblxuICAgIC8vIG9yZGVyIHN0YXRlSW5pdFxuICAgIGlmIChvcmRlci5sb2FkQml0KCkpIHtcbiAgICAgIG9yZGVyLmxvYWRSZWYoKTsgLy8gZG9uJ3QgcGFyc2Ugc3RhdGVJbml0XG4gICAgfVxuXG4gICAgLy8gb3JkZXIgYm9keVxuICAgIGxldCBwYXlsb2FkO1xuICAgIGxldCB3aXRoZHJhd0Ftb3VudDtcbiAgICB0aGlzLnRyYW5zYWN0aW9uVHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5TZW5kO1xuICAgIGlmIChvcmRlci5nZXRGcmVlQml0cygpID4gMCkge1xuICAgICAgaWYgKG9yZGVyLmxvYWRCaXQoKSkge1xuICAgICAgICBvcmRlciA9IG9yZGVyLmxvYWRSZWYoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9yZGVyLmdldEZyZWVCaXRzKCkgPiAzMikge1xuICAgICAgICBjb25zdCBvcGNvZGUgPSBvcmRlci5sb2FkVWludCgzMikudG9OdW1iZXIoKTtcbiAgICAgICAgaWYgKG9wY29kZSA9PT0gMCkge1xuICAgICAgICAgIGNvbnN0IHBheWxvYWRCeXRlcyA9IG9yZGVyLmxvYWRCaXRzKG9yZGVyLmdldEZyZWVCaXRzKCkpO1xuICAgICAgICAgIHBheWxvYWQgPSBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUocGF5bG9hZEJ5dGVzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGNvZGUgPT09IDQwOTYpIHtcbiAgICAgICAgICBjb25zdCBxdWVyeUlkID0gb3JkZXIubG9hZFVpbnQoNjQpLnRvTnVtYmVyKCk7XG4gICAgICAgICAgd2l0aGRyYXdBbW91bnQgPSBvcmRlci5sb2FkQ29pbnMoKS50b051bWJlcigpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgcGF5bG9hZCA9IFdJVEhEUkFXX09QQ09ERSArIHF1ZXJ5SWQudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDE2LCAnMCcpICsgd2l0aGRyYXdBbW91bnQ7XG4gICAgICAgICAgdGhpcy50cmFuc2FjdGlvblR5cGUgPSBUcmFuc2FjdGlvblR5cGUuU2luZ2xlTm9taW5hdG9yV2l0aGRyYXc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGF5bG9hZCA9ICcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB0b0FkZHJlc3M6IGRlc3RBZGRyZXNzLFxuICAgICAgdmFsdWUsXG4gICAgICBib3VuY2UsXG4gICAgICBzZXFubyxcbiAgICAgIHdpdGhkcmF3QW1vdW50LFxuICAgICAgZXhwaXJlQXQsXG4gICAgICBwYXlsb2FkLFxuICAgICAgc2lnbmF0dXJlLFxuICAgICAgd2FsbGV0SWQsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VUcmFuc2ZlclN0YXRlSW5pdChzbGljZTogYW55KTogYW55IHtcbiAgICBpZiAoc2xpY2UgPT09IG51bGwpIHJldHVybiB7fTtcbiAgICBzbGljZS5sb2FkUmVmKCk7XG4gICAgY29uc3QgZGF0YSA9IHNsaWNlLmxvYWRSZWYoKTtcbiAgICBjb25zdCBzZXFubyA9IGRhdGEubG9hZFVpbnQoMzIpLnRvTnVtYmVyKCk7XG4gICAgaWYgKHNlcW5vICE9PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgc2Vxbm8nKTtcbiAgICBjb25zdCB3YWxsZXRJZCA9IGRhdGEubG9hZFVpbnQoMzIpLnRvTnVtYmVyKCk7XG4gICAgaWYgKHdhbGxldElkICE9PSBXQUxMRVRfSUQpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB3YWxsZXQgaWQnKTtcbiAgICBjb25zdCBwdWJsaWNLZXkgPSBuZXcgVWludDhBcnJheSgzMik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwdWJsaWNLZXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIHB1YmxpY0tleVtpXSA9IGRhdGEubG9hZFVpbnQoOCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBwdWJsaWNLZXk6IEJ1ZmZlci5mcm9tKHB1YmxpY0tleSkudG9TdHJpbmcoJ2hleCcpLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
1
|
import { BaseAddress, BaseKey, BaseTransactionBuilder, FeeOptions, PublicKey as BasePublicKey, TransactionType } from '@bitgo-beta/sdk-core';
|
|
3
2
|
import { Transaction } from './transaction';
|
|
4
3
|
import BigNumber from 'bignumber.js';
|
|
5
4
|
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
5
|
+
export declare const WITHDRAW_OPCODE = "00001000";
|
|
6
6
|
export declare abstract class TransactionBuilder extends BaseTransactionBuilder {
|
|
7
7
|
protected _transaction: Transaction;
|
|
8
8
|
private _signatures;
|
|
@@ -27,6 +27,27 @@ export declare abstract class TransactionBuilder extends BaseTransactionBuilder
|
|
|
27
27
|
* @returns {TransactionBuilder} This transaction builder
|
|
28
28
|
*/
|
|
29
29
|
sender(senderAddress: string): this;
|
|
30
|
+
/**
|
|
31
|
+
* Sets the transaction to be bounceable or not.
|
|
32
|
+
*
|
|
33
|
+
* @param {string} bounceable whether the transaction can be bounced
|
|
34
|
+
* @returns {TransactionBuilder} This transaction builder
|
|
35
|
+
*/
|
|
36
|
+
bounceable(bounceable: boolean): this;
|
|
37
|
+
/**
|
|
38
|
+
* Sets the fromAddress to be in bounceable format or not.
|
|
39
|
+
*
|
|
40
|
+
* @param {string} bounceable whether the address format is bounceable
|
|
41
|
+
* @returns {TransactionBuilder} This transaction builder
|
|
42
|
+
*/
|
|
43
|
+
fromAddressBounceable(bounceable: boolean): this;
|
|
44
|
+
/**
|
|
45
|
+
* Sets the toAddress to be in bounceable format or not.
|
|
46
|
+
*
|
|
47
|
+
* @param {string} bounceable whether the address format is bounceable
|
|
48
|
+
* @returns {TransactionBuilder} This transaction builder
|
|
49
|
+
*/
|
|
50
|
+
toAddressBounceable(bounceable: boolean): this;
|
|
30
51
|
fee(feeOptions: FeeOptions): this;
|
|
31
52
|
/** @inheritdoc */
|
|
32
53
|
protected fromImplementation(rawTransaction: string): Transaction;
|
|
@@ -43,6 +64,7 @@ export declare abstract class TransactionBuilder extends BaseTransactionBuilder
|
|
|
43
64
|
/** @inheritdoc */
|
|
44
65
|
validateValue(value: BigNumber): void;
|
|
45
66
|
setMessage(msg: string): TransactionBuilder;
|
|
67
|
+
setWithdrawMessage(): TransactionBuilder;
|
|
46
68
|
sequenceNumber(number: number): TransactionBuilder;
|
|
47
69
|
expireTime(number: number): TransactionBuilder;
|
|
48
70
|
publicKey(key: string): TransactionBuilder;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,OAAO,EACP,sBAAsB,EAEtB,UAAU,EACV,SAAS,IAAI,aAAa,EAE1B,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAG7D,eAAO,MAAM,eAAe,aAAa,CAAC;AAE1C,8BAAsB,kBAAmB,SAAQ,sBAAsB;IACrE,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC;IACpC,OAAO,CAAC,WAAW,CAAmB;gBAE1B,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAM5C;;OAEG;IACH,SAAS,CAAC,QAAQ,KAAK,eAAe,IAAI,eAAe,CAAC;IAE1D,kBAAkB;IAClB,SAAS,KAAK,WAAW,IAAI,WAAW,CAEvC;IAED,kBAAkB;IAClB,SAAS,KAAK,WAAW,CAAC,WAAW,EAAE,WAAW,EAEjD;IAED,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;IAIvD,kBAAkB;IAClB,YAAY,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAI/D;;;;;;OAMG;IACH,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;IAKnC;;;;;OAKG;IACH,UAAU,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI;IAKrC;;;;;OAKG;IACH,qBAAqB,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI;IAMhD;;;;;OAKG;IACH,mBAAmB,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI;IAU9C,GAAG,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAIjC,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW;IAMjE,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAQ3D,kBAAkB;IAClB,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAMnE,kBAAkB;IAClB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAI/B,kBAAkB;IAClB,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAIpD,kBAAkB;IAClB,mBAAmB,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI;IAQpD,kBAAkB;IAClB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAMrC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB;IAK3C,kBAAkB,IAAI,kBAAkB;IAMxC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB;IAKlD,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB;IAK9C,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB;CAI3C"}
|