@bitgo-beta/sdk-coin-flrp 1.0.0 → 1.0.1-beta.0

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.
@@ -0,0 +1,41 @@
1
+ import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
2
+ import { TransactionType } from '@bitgo-beta/sdk-core';
3
+ /**
4
+ * Minimal placeholder for Flare P-chain atomic transaction building.
5
+ * This will be expanded with proper Flare P-chain logic (inputs/outputs/credentials, UTXO handling, fees, etc.).
6
+ */
7
+ export declare abstract class AtomicTransactionBuilder {
8
+ protected readonly _coinConfig: Readonly<CoinConfig>;
9
+ protected _externalChainId: Buffer | undefined;
10
+ protected transaction: {
11
+ _network: Record<string, unknown>;
12
+ _networkID: number;
13
+ _blockchainID: Buffer;
14
+ _assetId: Buffer;
15
+ _fromAddresses: string[];
16
+ _locktime: bigint;
17
+ _threshold: number;
18
+ fee: {
19
+ fee: string;
20
+ };
21
+ hasCredentials: boolean;
22
+ _tx?: unknown;
23
+ setTransaction: (tx: unknown) => void;
24
+ };
25
+ constructor(coinConfig: Readonly<CoinConfig>);
26
+ protected abstract get transactionType(): TransactionType;
27
+ validateAmount(amount: bigint): void;
28
+ /**
29
+ * Placeholder that should assemble inputs/outputs and credentials once UTXO + key logic is implemented.
30
+ */
31
+ protected createInputOutput(_total: bigint): {
32
+ inputs: unknown[];
33
+ outputs: unknown[];
34
+ credentials: unknown[];
35
+ };
36
+ /**
37
+ * Base initBuilder used by concrete builders. For now just returns this so fluent API works.
38
+ */
39
+ initBuilder(_tx: unknown): this;
40
+ }
41
+ //# sourceMappingURL=atomicTransactionBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atomicTransactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/atomicTransactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAyB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE9E;;;GAGG;AACH,8BAAsB,wBAAwB;IAC5C,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;IAErD,SAAS,CAAC,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;IAI/C,SAAS,CAAC,WAAW,EAAE;QACrB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,EAAE,MAAM,CAAC;QACtB,QAAQ,EAAE,MAAM,CAAC;QACjB,cAAc,EAAE,MAAM,EAAE,CAAC;QACzB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,GAAG,EAAE;YAAE,GAAG,EAAE,MAAM,CAAA;SAAE,CAAC;QACrB,cAAc,EAAE,OAAO,CAAC;QACxB,GAAG,CAAC,EAAE,OAAO,CAAC;QACd,cAAc,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,IAAI,CAAC;KACvC,CAaC;gBAEU,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI5C,SAAS,CAAC,QAAQ,KAAK,eAAe,IAAI,eAAe,CAAC;IAE1D,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAMpC;;OAEG;IACH,SAAS,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QAAC,OAAO,EAAE,OAAO,EAAE,CAAC;QAAC,WAAW,EAAE,OAAO,EAAE,CAAA;KAAE;IAI9G;;OAEG;IACH,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;CAGhC"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AtomicTransactionBuilder = void 0;
4
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
5
+ /**
6
+ * Minimal placeholder for Flare P-chain atomic transaction building.
7
+ * This will be expanded with proper Flare P-chain logic (inputs/outputs/credentials, UTXO handling, fees, etc.).
8
+ */
9
+ class AtomicTransactionBuilder {
10
+ constructor(coinConfig) {
11
+ // Simplified internal transaction state (mirrors shape expected by existing builders)
12
+ // Simplified internal transaction state
13
+ this.transaction = {
14
+ _network: {},
15
+ _networkID: 0,
16
+ _blockchainID: Buffer.alloc(0),
17
+ _assetId: Buffer.alloc(0),
18
+ _fromAddresses: [],
19
+ _locktime: 0n,
20
+ _threshold: 1,
21
+ fee: { fee: '0' },
22
+ hasCredentials: false,
23
+ setTransaction: function (_tx) {
24
+ this._tx = _tx;
25
+ },
26
+ };
27
+ this._coinConfig = coinConfig;
28
+ }
29
+ validateAmount(amount) {
30
+ if (amount <= 0n) {
31
+ throw new sdk_core_1.BuildTransactionError('Amount must be positive');
32
+ }
33
+ }
34
+ /**
35
+ * Placeholder that should assemble inputs/outputs and credentials once UTXO + key logic is implemented.
36
+ */
37
+ createInputOutput(_total) {
38
+ return { inputs: [], outputs: [], credentials: [] };
39
+ }
40
+ /**
41
+ * Base initBuilder used by concrete builders. For now just returns this so fluent API works.
42
+ */
43
+ initBuilder(_tx) {
44
+ return this;
45
+ }
46
+ }
47
+ exports.AtomicTransactionBuilder = AtomicTransactionBuilder;
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9hdG9taWNUcmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsbURBQThFO0FBRTlFOzs7R0FHRztBQUNILE1BQXNCLHdCQUF3QjtJQWtDNUMsWUFBWSxVQUFnQztRQTdCNUMsc0ZBQXNGO1FBQ3RGLHdDQUF3QztRQUM5QixnQkFBVyxHQVlqQjtZQUNGLFFBQVEsRUFBRSxFQUFFO1lBQ1osVUFBVSxFQUFFLENBQUM7WUFDYixhQUFhLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDOUIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3pCLGNBQWMsRUFBRSxFQUFFO1lBQ2xCLFNBQVMsRUFBRSxFQUFFO1lBQ2IsVUFBVSxFQUFFLENBQUM7WUFDYixHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO1lBQ2pCLGNBQWMsRUFBRSxLQUFLO1lBQ3JCLGNBQWMsRUFBRSxVQUFVLEdBQVk7Z0JBQ3BDLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1lBQ2pCLENBQUM7U0FDRixDQUFDO1FBR0EsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7SUFDaEMsQ0FBQztJQUlELGNBQWMsQ0FBQyxNQUFjO1FBQzNCLElBQUksTUFBTSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzdELENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDTyxpQkFBaUIsQ0FBQyxNQUFjO1FBQ3hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3RELENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVcsQ0FBQyxHQUFZO1FBQ3RCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztDQUNGO0FBM0RELDREQTJEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IEJ1aWxkVHJhbnNhY3Rpb25FcnJvciwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuXG4vKipcbiAqIE1pbmltYWwgcGxhY2Vob2xkZXIgZm9yIEZsYXJlIFAtY2hhaW4gYXRvbWljIHRyYW5zYWN0aW9uIGJ1aWxkaW5nLlxuICogVGhpcyB3aWxsIGJlIGV4cGFuZGVkIHdpdGggcHJvcGVyIEZsYXJlIFAtY2hhaW4gbG9naWMgKGlucHV0cy9vdXRwdXRzL2NyZWRlbnRpYWxzLCBVVFhPIGhhbmRsaW5nLCBmZWVzLCBldGMuKS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEF0b21pY1RyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByb3RlY3RlZCByZWFkb25seSBfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz47XG4gIC8vIEV4dGVybmFsIGNoYWluIGlkIChkZXN0aW5hdGlvbikgZm9yIGV4cG9ydCB0cmFuc2FjdGlvbnNcbiAgcHJvdGVjdGVkIF9leHRlcm5hbENoYWluSWQ6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcblxuICAvLyBTaW1wbGlmaWVkIGludGVybmFsIHRyYW5zYWN0aW9uIHN0YXRlIChtaXJyb3JzIHNoYXBlIGV4cGVjdGVkIGJ5IGV4aXN0aW5nIGJ1aWxkZXJzKVxuICAvLyBTaW1wbGlmaWVkIGludGVybmFsIHRyYW5zYWN0aW9uIHN0YXRlXG4gIHByb3RlY3RlZCB0cmFuc2FjdGlvbjoge1xuICAgIF9uZXR3b3JrOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBfbmV0d29ya0lEOiBudW1iZXI7XG4gICAgX2Jsb2NrY2hhaW5JRDogQnVmZmVyO1xuICAgIF9hc3NldElkOiBCdWZmZXI7XG4gICAgX2Zyb21BZGRyZXNzZXM6IHN0cmluZ1tdO1xuICAgIF9sb2NrdGltZTogYmlnaW50O1xuICAgIF90aHJlc2hvbGQ6IG51bWJlcjtcbiAgICBmZWU6IHsgZmVlOiBzdHJpbmcgfTtcbiAgICBoYXNDcmVkZW50aWFsczogYm9vbGVhbjtcbiAgICBfdHg/OiB1bmtub3duO1xuICAgIHNldFRyYW5zYWN0aW9uOiAodHg6IHVua25vd24pID0+IHZvaWQ7XG4gIH0gPSB7XG4gICAgX25ldHdvcms6IHt9LFxuICAgIF9uZXR3b3JrSUQ6IDAsXG4gICAgX2Jsb2NrY2hhaW5JRDogQnVmZmVyLmFsbG9jKDApLFxuICAgIF9hc3NldElkOiBCdWZmZXIuYWxsb2MoMCksXG4gICAgX2Zyb21BZGRyZXNzZXM6IFtdLFxuICAgIF9sb2NrdGltZTogMG4sXG4gICAgX3RocmVzaG9sZDogMSxcbiAgICBmZWU6IHsgZmVlOiAnMCcgfSxcbiAgICBoYXNDcmVkZW50aWFsczogZmFsc2UsXG4gICAgc2V0VHJhbnNhY3Rpb246IGZ1bmN0aW9uIChfdHg6IHVua25vd24pIHtcbiAgICAgIHRoaXMuX3R4ID0gX3R4O1xuICAgIH0sXG4gIH07XG5cbiAgY29uc3RydWN0b3IoY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICB0aGlzLl9jb2luQ29uZmlnID0gY29pbkNvbmZpZztcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZTtcblxuICB2YWxpZGF0ZUFtb3VudChhbW91bnQ6IGJpZ2ludCk6IHZvaWQge1xuICAgIGlmIChhbW91bnQgPD0gMG4pIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0Ftb3VudCBtdXN0IGJlIHBvc2l0aXZlJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBsYWNlaG9sZGVyIHRoYXQgc2hvdWxkIGFzc2VtYmxlIGlucHV0cy9vdXRwdXRzIGFuZCBjcmVkZW50aWFscyBvbmNlIFVUWE8gKyBrZXkgbG9naWMgaXMgaW1wbGVtZW50ZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgY3JlYXRlSW5wdXRPdXRwdXQoX3RvdGFsOiBiaWdpbnQpOiB7IGlucHV0czogdW5rbm93bltdOyBvdXRwdXRzOiB1bmtub3duW107IGNyZWRlbnRpYWxzOiB1bmtub3duW10gfSB7XG4gICAgcmV0dXJuIHsgaW5wdXRzOiBbXSwgb3V0cHV0czogW10sIGNyZWRlbnRpYWxzOiBbXSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEJhc2UgaW5pdEJ1aWxkZXIgdXNlZCBieSBjb25jcmV0ZSBidWlsZGVycy4gRm9yIG5vdyBqdXN0IHJldHVybnMgdGhpcyBzbyBmbHVlbnQgQVBJIHdvcmtzLlxuICAgKi9cbiAgaW5pdEJ1aWxkZXIoX3R4OiB1bmtub3duKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,30 @@
1
+ import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
2
+ import { TransactionType } from '@bitgo-beta/sdk-core';
3
+ import { AtomicTransactionBuilder } from './atomicTransactionBuilder';
4
+ export declare class ExportTxBuilder extends AtomicTransactionBuilder {
5
+ private _amount;
6
+ constructor(_coinConfig: Readonly<CoinConfig>);
7
+ protected get transactionType(): TransactionType;
8
+ /**
9
+ * Amount is a long that specifies the quantity of the asset that this output owns. Must be positive.
10
+ *
11
+ * @param {BN | string} amount The withdrawal amount
12
+ */
13
+ amount(value: bigint | string | number): this;
14
+ /** @inheritdoc */
15
+ initBuilder(_tx: unknown): this;
16
+ static verifyTxType(_baseTx: unknown): boolean;
17
+ verifyTxType(_baseTx: unknown): boolean;
18
+ /**
19
+ * Create the internal transaction.
20
+ * @protected
21
+ */
22
+ protected buildFlareTransaction(): void;
23
+ /**
24
+ * Create the ExportedOut where the recipient address are the sender.
25
+ * Later a importTx should complete the operations signing with the same keys.
26
+ * @protected
27
+ */
28
+ protected exportedOutputs(): unknown[];
29
+ }
30
+ //# sourceMappingURL=exportTxBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exportTxBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/exportTxBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,qBAAa,eAAgB,SAAQ,wBAAwB;IAC3D,OAAO,CAAC,OAAO,CAAM;gBAET,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI;IAO7C,kBAAkB;IAElB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAM/B,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAI9C,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAIvC;;;OAGG;IAEH,SAAS,CAAC,qBAAqB,IAAI,IAAI;IAIvC;;;;OAIG;IACH,SAAS,CAAC,eAAe,IAAI,OAAO,EAAE;CAGvC"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExportTxBuilder = void 0;
4
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
5
+ const atomicTransactionBuilder_1 = require("./atomicTransactionBuilder");
6
+ class ExportTxBuilder extends atomicTransactionBuilder_1.AtomicTransactionBuilder {
7
+ constructor(_coinConfig) {
8
+ super(_coinConfig);
9
+ this._amount = 0n;
10
+ }
11
+ get transactionType() {
12
+ return sdk_core_1.TransactionType.Export;
13
+ }
14
+ /**
15
+ * Amount is a long that specifies the quantity of the asset that this output owns. Must be positive.
16
+ *
17
+ * @param {BN | string} amount The withdrawal amount
18
+ */
19
+ amount(value) {
20
+ const v = typeof value === 'bigint' ? value : BigInt(value);
21
+ this.validateAmount(v);
22
+ this._amount = v;
23
+ return this;
24
+ }
25
+ /** @inheritdoc */
26
+ // Placeholder: parsing existing ExportTx not yet supported on Flare P-chain
27
+ initBuilder(_tx) {
28
+ super.initBuilder(_tx);
29
+ return this;
30
+ }
31
+ // Type verification not yet implemented for Flare P-chain
32
+ static verifyTxType(_baseTx) {
33
+ return false;
34
+ }
35
+ verifyTxType(_baseTx) {
36
+ return ExportTxBuilder.verifyTxType(_baseTx);
37
+ }
38
+ /**
39
+ * Create the internal transaction.
40
+ * @protected
41
+ */
42
+ // Build not implemented yet
43
+ buildFlareTransaction() {
44
+ throw new Error('Flare P-chain export transaction build not implemented');
45
+ }
46
+ /**
47
+ * Create the ExportedOut where the recipient address are the sender.
48
+ * Later a importTx should complete the operations signing with the same keys.
49
+ * @protected
50
+ */
51
+ exportedOutputs() {
52
+ return [];
53
+ }
54
+ }
55
+ exports.ExportTxBuilder = ExportTxBuilder;
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0VHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9leHBvcnRUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsbURBQXVEO0FBQ3ZELHlFQUFzRTtBQUV0RSxNQUFhLGVBQWdCLFNBQVEsbURBQXdCO0lBRzNELFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBSGIsWUFBTyxHQUFHLEVBQUUsQ0FBQztJQUlyQixDQUFDO0lBRUQsSUFBYyxlQUFlO1FBQzNCLE9BQU8sMEJBQWUsQ0FBQyxNQUFNLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsS0FBK0I7UUFDcEMsTUFBTSxDQUFDLEdBQUcsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGtCQUFrQjtJQUNsQiw0RUFBNEU7SUFDNUUsV0FBVyxDQUFDLEdBQVk7UUFDdEIsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCwwREFBMEQ7SUFDMUQsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFnQjtRQUNsQyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxZQUFZLENBQUMsT0FBZ0I7UUFDM0IsT0FBTyxlQUFlLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7O09BR0c7SUFDSCw0QkFBNEI7SUFDbEIscUJBQXFCO1FBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsd0RBQXdELENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNPLGVBQWU7UUFDdkIsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0NBQ0Y7QUF4REQsMENBd0RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi9hdG9taWNUcmFuc2FjdGlvbkJ1aWxkZXInO1xuXG5leHBvcnQgY2xhc3MgRXhwb3J0VHhCdWlsZGVyIGV4dGVuZHMgQXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJpdmF0ZSBfYW1vdW50ID0gMG47XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLkV4cG9ydDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbW91bnQgaXMgYSBsb25nIHRoYXQgc3BlY2lmaWVzIHRoZSBxdWFudGl0eSBvZiB0aGUgYXNzZXQgdGhhdCB0aGlzIG91dHB1dCBvd25zLiBNdXN0IGJlIHBvc2l0aXZlLlxuICAgKlxuICAgKiBAcGFyYW0ge0JOIHwgc3RyaW5nfSBhbW91bnQgVGhlIHdpdGhkcmF3YWwgYW1vdW50XG4gICAqL1xuICBhbW91bnQodmFsdWU6IGJpZ2ludCB8IHN0cmluZyB8IG51bWJlcik6IHRoaXMge1xuICAgIGNvbnN0IHYgPSB0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnID8gdmFsdWUgOiBCaWdJbnQodmFsdWUpO1xuICAgIHRoaXMudmFsaWRhdGVBbW91bnQodik7XG4gICAgdGhpcy5fYW1vdW50ID0gdjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICAvLyBQbGFjZWhvbGRlcjogcGFyc2luZyBleGlzdGluZyBFeHBvcnRUeCBub3QgeWV0IHN1cHBvcnRlZCBvbiBGbGFyZSBQLWNoYWluXG4gIGluaXRCdWlsZGVyKF90eDogdW5rbm93bik6IHRoaXMge1xuICAgIHN1cGVyLmluaXRCdWlsZGVyKF90eCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBUeXBlIHZlcmlmaWNhdGlvbiBub3QgeWV0IGltcGxlbWVudGVkIGZvciBGbGFyZSBQLWNoYWluXG4gIHN0YXRpYyB2ZXJpZnlUeFR5cGUoX2Jhc2VUeDogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZlcmlmeVR4VHlwZShfYmFzZVR4OiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEV4cG9ydFR4QnVpbGRlci52ZXJpZnlUeFR5cGUoX2Jhc2VUeCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBpbnRlcm5hbCB0cmFuc2FjdGlvbi5cbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgLy8gQnVpbGQgbm90IGltcGxlbWVudGVkIHlldFxuICBwcm90ZWN0ZWQgYnVpbGRGbGFyZVRyYW5zYWN0aW9uKCk6IHZvaWQge1xuICAgIHRocm93IG5ldyBFcnJvcignRmxhcmUgUC1jaGFpbiBleHBvcnQgdHJhbnNhY3Rpb24gYnVpbGQgbm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBFeHBvcnRlZE91dCB3aGVyZSB0aGUgcmVjaXBpZW50IGFkZHJlc3MgYXJlIHRoZSBzZW5kZXIuXG4gICAqIExhdGVyIGEgaW1wb3J0VHggc2hvdWxkIGNvbXBsZXRlIHRoZSBvcGVyYXRpb25zIHNpZ25pbmcgd2l0aCB0aGUgc2FtZSBrZXlzLlxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgZXhwb3J0ZWRPdXRwdXRzKCk6IHVua25vd25bXSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59XG4iXX0=