@bitgo-beta/sdk-coin-starknet 0.0.1-beta.7 → 0.0.1-beta.71
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/dist/src/lib/constants.d.ts +9 -0
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +21 -2
- package/dist/src/lib/iface.d.ts +38 -0
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +1 -1
- package/dist/src/lib/index.d.ts +1 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +4 -2
- package/dist/src/lib/transaction.d.ts +6 -1
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +81 -4
- package/dist/src/lib/transactionBuilder.d.ts +5 -1
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +37 -4
- package/dist/src/lib/transactionBuilderFactory.d.ts +2 -1
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +6 -3
- package/dist/src/lib/transferBuilder.d.ts +2 -0
- package/dist/src/lib/transferBuilder.d.ts.map +1 -1
- package/dist/src/lib/transferBuilder.js +11 -2
- package/dist/src/lib/utils.d.ts +28 -1
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +125 -1
- package/dist/src/lib/walletInitializationBuilder.d.ts +26 -0
- package/dist/src/lib/walletInitializationBuilder.d.ts.map +1 -0
- package/dist/src/lib/walletInitializationBuilder.js +117 -0
- package/dist/src/starknet.d.ts +2 -0
- package/dist/src/starknet.d.ts.map +1 -1
- package/dist/src/starknet.js +10 -3
- package/dist/test/resources/starknet.d.ts +45 -0
- package/dist/test/resources/starknet.d.ts.map +1 -1
- package/dist/test/resources/starknet.js +31 -2
- package/dist/test/unit/starknet.js +39 -1
- package/dist/test/unit/transaction.js +28 -3
- package/dist/test/unit/transferBuilder.d.ts +2 -0
- package/dist/test/unit/transferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transferBuilder.js +229 -0
- package/dist/test/unit/utils.d.ts.map +1 -1
- package/dist/test/unit/utils.js +232 -5
- package/dist/test/unit/walletInitializationBuilder.d.ts +2 -0
- package/dist/test/unit/walletInitializationBuilder.d.ts.map +1 -0
- package/dist/test/unit/walletInitializationBuilder.js +123 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -8
|
@@ -4,6 +4,7 @@ exports.TransactionBuilderFactory = void 0;
|
|
|
4
4
|
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
5
5
|
const transaction_1 = require("./transaction");
|
|
6
6
|
const transferBuilder_1 = require("./transferBuilder");
|
|
7
|
+
const walletInitializationBuilder_1 = require("./walletInitializationBuilder");
|
|
7
8
|
const iface_1 = require("./iface");
|
|
8
9
|
class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory {
|
|
9
10
|
constructor(_coinConfig) {
|
|
@@ -17,6 +18,8 @@ class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory
|
|
|
17
18
|
switch (transaction.starknetTransactionData.transactionType) {
|
|
18
19
|
case iface_1.StarknetTransactionType.INVOKE:
|
|
19
20
|
return this.getTransferBuilder(transaction);
|
|
21
|
+
case iface_1.StarknetTransactionType.DEPLOY_ACCOUNT:
|
|
22
|
+
return this.getWalletInitializationBuilder(transaction);
|
|
20
23
|
default:
|
|
21
24
|
throw new sdk_core_1.InvalidTransactionError('Invalid transaction type');
|
|
22
25
|
}
|
|
@@ -36,9 +39,9 @@ class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory
|
|
|
36
39
|
return TransactionBuilderFactory.initializeBuilder(tx, new transferBuilder_1.TransferBuilder(this._coinConfig));
|
|
37
40
|
}
|
|
38
41
|
/** @inheritdoc */
|
|
39
|
-
getWalletInitializationBuilder() {
|
|
40
|
-
|
|
42
|
+
getWalletInitializationBuilder(tx) {
|
|
43
|
+
return TransactionBuilderFactory.initializeBuilder(tx, new walletInitializationBuilder_1.WalletInitializationBuilder(this._coinConfig));
|
|
41
44
|
}
|
|
42
45
|
}
|
|
43
46
|
exports.TransactionBuilderFactory = TransactionBuilderFactory;
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFBOEY7QUFFOUYsK0NBQTRDO0FBRTVDLHVEQUFvRDtBQUNwRCwrRUFBNEU7QUFDNUUsbUNBQWtEO0FBRWxELE1BQWEseUJBQTBCLFNBQVEsd0NBQTZCO0lBQzFFLFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFzQjtRQUMvQixNQUFNLFdBQVcsR0FBRyxJQUFJLHlCQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sV0FBVyxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQztZQUNILFFBQVEsV0FBVyxDQUFDLHVCQUF1QixDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUM1RCxLQUFLLCtCQUF1QixDQUFDLE1BQU07b0JBQ2pDLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUM5QyxLQUFLLCtCQUF1QixDQUFDLGNBQWM7b0JBQ3pDLE9BQU8sSUFBSSxDQUFDLDhCQUE4QixDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUMxRDtvQkFDRSxNQUFNLElBQUksa0NBQXVCLENBQUMsMEJBQTBCLENBQUMsQ0FBQztZQUNsRSxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxNQUFNLElBQUksa0NBQXVCLENBQUMsdUJBQXVCLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pFLENBQUM7SUFDSCxDQUFDO0lBRU8sTUFBTSxDQUFDLGlCQUFpQixDQUErQixFQUEyQixFQUFFLE9BQVU7UUFDcEcsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUNQLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUIsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsa0JBQWtCLENBQUMsRUFBZ0I7UUFDakMsT0FBTyx5QkFBeUIsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsSUFBSSxpQ0FBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ2hHLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsOEJBQThCLENBQUMsRUFBZ0I7UUFDN0MsT0FBTyx5QkFBeUIsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsSUFBSSx5REFBMkIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUM1RyxDQUFDO0NBQ0Y7QUF2Q0QsOERBdUNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZVRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnksIEludmFsaWRUcmFuc2FjdGlvbkVycm9yIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IFRyYW5zZmVyQnVpbGRlciB9IGZyb20gJy4vdHJhbnNmZXJCdWlsZGVyJztcbmltcG9ydCB7IFdhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlciB9IGZyb20gJy4vd2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyJztcbmltcG9ydCB7IFN0YXJrbmV0VHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnLi9pZmFjZSc7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uQnVpbGRlckZhY3Rvcnkge1xuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgYXN5bmMgZnJvbShyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvbkJ1aWxkZXI+IHtcbiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbih0aGlzLl9jb2luQ29uZmlnKTtcbiAgICBhd2FpdCB0cmFuc2FjdGlvbi5mcm9tUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb24pO1xuICAgIHRyeSB7XG4gICAgICBzd2l0Y2ggKHRyYW5zYWN0aW9uLnN0YXJrbmV0VHJhbnNhY3Rpb25EYXRhLnRyYW5zYWN0aW9uVHlwZSkge1xuICAgICAgICBjYXNlIFN0YXJrbmV0VHJhbnNhY3Rpb25UeXBlLklOVk9LRTpcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2ZlckJ1aWxkZXIodHJhbnNhY3Rpb24pO1xuICAgICAgICBjYXNlIFN0YXJrbmV0VHJhbnNhY3Rpb25UeXBlLkRFUExPWV9BQ0NPVU5UOlxuICAgICAgICAgIHJldHVybiB0aGlzLmdldFdhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlcih0cmFuc2FjdGlvbik7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uIHR5cGUnKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb246ICcgKyBlLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGluaXRpYWxpemVCdWlsZGVyPFQgZXh0ZW5kcyBUcmFuc2FjdGlvbkJ1aWxkZXI+KHR4OiBUcmFuc2FjdGlvbiB8IHVuZGVmaW5lZCwgYnVpbGRlcjogVCk6IFQge1xuICAgIGlmICh0eCkge1xuICAgICAgYnVpbGRlci5pbml0QnVpbGRlcih0eCk7XG4gICAgfVxuICAgIHJldHVybiBidWlsZGVyO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldFRyYW5zZmVyQnVpbGRlcih0eD86IFRyYW5zYWN0aW9uKTogVHJhbnNmZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5pbml0aWFsaXplQnVpbGRlcih0eCwgbmV3IFRyYW5zZmVyQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZ2V0V2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyKHR4PzogVHJhbnNhY3Rpb24pOiBXYWxsZXRJbml0aWFsaXphdGlvbkJ1aWxkZXIge1xuICAgIHJldHVybiBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LmluaXRpYWxpemVCdWlsZGVyKHR4LCBuZXcgV2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpKTtcbiAgfVxufVxuIl19
|
|
@@ -5,10 +5,12 @@ import { StarknetTransactionType } from './iface';
|
|
|
5
5
|
export declare class TransferBuilder extends TransactionBuilder {
|
|
6
6
|
protected _receiverAddress?: string;
|
|
7
7
|
protected _amount?: string;
|
|
8
|
+
protected _tokenContractAddress: string;
|
|
8
9
|
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
9
10
|
protected get transactionType(): StarknetTransactionType;
|
|
10
11
|
receiverId(address: string): this;
|
|
11
12
|
amount(value: string): this;
|
|
13
|
+
tokenContractAddress(address: string): this;
|
|
12
14
|
/** @inheritdoc */
|
|
13
15
|
initBuilder(tx: Transaction): void;
|
|
14
16
|
/** @inheritdoc */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transferBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transferBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAgB,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAIhE,qBAAa,eAAgB,SAAQ,kBAAkB;IACrD,SAAS,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACpC,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"transferBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transferBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAgB,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAIhE,qBAAa,eAAgB,SAAQ,kBAAkB;IACrD,SAAS,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACpC,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,qBAAqB,EAAE,MAAM,CAAuB;gBAElD,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,SAAS,KAAK,eAAe,IAAI,uBAAuB,CAEvD;IAEM,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQjC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAS3B,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQlD,kBAAkB;IAClB,WAAW,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAYlC,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAc3D,OAAO,CAAC,uBAAuB;IAK/B,OAAO,CAAC,gBAAgB;CAiBzB"}
|
|
@@ -12,6 +12,7 @@ const utils_1 = __importDefault(require("./utils"));
|
|
|
12
12
|
class TransferBuilder extends transactionBuilder_1.TransactionBuilder {
|
|
13
13
|
constructor(_coinConfig) {
|
|
14
14
|
super(_coinConfig);
|
|
15
|
+
this._tokenContractAddress = constants_1.STRK_TOKEN_CONTRACT;
|
|
15
16
|
}
|
|
16
17
|
get transactionType() {
|
|
17
18
|
return iface_1.StarknetTransactionType.INVOKE;
|
|
@@ -31,6 +32,13 @@ class TransferBuilder extends transactionBuilder_1.TransactionBuilder {
|
|
|
31
32
|
this._amount = value;
|
|
32
33
|
return this;
|
|
33
34
|
}
|
|
35
|
+
tokenContractAddress(address) {
|
|
36
|
+
if (!address || !utils_1.default.isValidAddress(address)) {
|
|
37
|
+
throw new sdk_core_1.BuildTransactionError('Invalid token contract address, got: ' + address);
|
|
38
|
+
}
|
|
39
|
+
this._tokenContractAddress = address;
|
|
40
|
+
return this;
|
|
41
|
+
}
|
|
34
42
|
/** @inheritdoc */
|
|
35
43
|
initBuilder(tx) {
|
|
36
44
|
super.initBuilder(tx);
|
|
@@ -39,6 +47,7 @@ class TransferBuilder extends transactionBuilder_1.TransactionBuilder {
|
|
|
39
47
|
if (transfer) {
|
|
40
48
|
this._receiverAddress = transfer.recipient;
|
|
41
49
|
this._amount = transfer.amount;
|
|
50
|
+
this._tokenContractAddress = transfer.tokenContract;
|
|
42
51
|
}
|
|
43
52
|
}
|
|
44
53
|
}
|
|
@@ -46,7 +55,7 @@ class TransferBuilder extends transactionBuilder_1.TransactionBuilder {
|
|
|
46
55
|
async buildImplementation() {
|
|
47
56
|
this.validateTransfer();
|
|
48
57
|
const transferCall = {
|
|
49
|
-
contractAddress:
|
|
58
|
+
contractAddress: this._tokenContractAddress,
|
|
50
59
|
entrypoint: 'transfer',
|
|
51
60
|
calldata: this.compileTransferCalldata(this._receiverAddress, this._amount),
|
|
52
61
|
};
|
|
@@ -76,4 +85,4 @@ class TransferBuilder extends transactionBuilder_1.TransactionBuilder {
|
|
|
76
85
|
}
|
|
77
86
|
}
|
|
78
87
|
exports.TransferBuilder = TransferBuilder;
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXJCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2ZlckJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsbURBQTZEO0FBRTdELDZEQUEwRDtBQUUxRCxtQ0FBZ0U7QUFDaEUsMkNBQTREO0FBQzVELG9EQUE0QjtBQUU1QixNQUFhLGVBQWdCLFNBQVEsdUNBQWtCO0lBS3JELFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBSFgsMEJBQXFCLEdBQVcsK0JBQW1CLENBQUM7SUFJOUQsQ0FBQztJQUVELElBQWMsZUFBZTtRQUMzQixPQUFPLCtCQUF1QixDQUFDLE1BQU0sQ0FBQztJQUN4QyxDQUFDO0lBRU0sVUFBVSxDQUFDLE9BQWU7UUFDL0IsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLGVBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMvQyxNQUFNLElBQUksZ0NBQXFCLENBQUMsNENBQTRDLEdBQUcsT0FBTyxDQUFDLENBQUM7UUFDMUYsQ0FBQztRQUNELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUM7UUFDaEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQWE7UUFDekIsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLElBQUksR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQ2IsTUFBTSxJQUFJLGdDQUFxQixDQUFDLG1CQUFtQixLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxvQkFBb0IsQ0FBQyxPQUFlO1FBQ3pDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxlQUFLLENBQUMsY0FB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eyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgU3RhcmtuZXRDYWxsLCBTdGFya25ldFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgU1RSS19UT0tFTl9DT05UUkFDVCwgTUFTS18xMjggfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2ZlckJ1aWxkZXIgZXh0ZW5kcyBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwcm90ZWN0ZWQgX3JlY2VpdmVyQWRkcmVzcz86IHN0cmluZztcbiAgcHJvdGVjdGVkIF9hbW91bnQ/OiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfdG9rZW5Db250cmFjdEFkZHJlc3M6IHN0cmluZyA9IFNUUktfVE9LRU5fQ09OVFJBQ1Q7XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvblR5cGUoKTogU3RhcmtuZXRUcmFuc2FjdGlvblR5cGUge1xuICAgIHJldHVybiBTdGFya25ldFRyYW5zYWN0aW9uVHlwZS5JTlZPS0U7XG4gIH1cblxuICBwdWJsaWMgcmVjZWl2ZXJJZChhZGRyZXNzOiBzdHJpbmcpOiB0aGlzIHtcbiAgICBpZiAoIWFkZHJlc3MgfHwgIXV0aWxzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIG9yIG1pc3NpbmcgcmVjZWl2ZXIgYWRkcmVzcywgZ290OiAnICsgYWRkcmVzcyk7XG4gICAgfVxuICAgIHRoaXMuX3JlY2VpdmVyQWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgYW1vdW50KHZhbHVlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICBjb25zdCB2YWwgPSBCaWdJbnQodmFsdWUpO1xuICAgIGlmICh2YWwgPCAwbikge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihgSW52YWxpZCBhbW91bnQ6ICR7dmFsdWV9YCk7XG4gICAgfVxuICAgIHRoaXMuX2Ftb3VudCA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIHRva2VuQ29udHJhY3RBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IHRoaXMge1xuICAgIGlmICghYWRkcmVzcyB8fCAhdXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdG9rZW4gY29udHJhY3QgYWRkcmVzcywgZ290OiAnICsgYWRkcmVzcyk7XG4gICAgfVxuICAgIHRoaXMuX3Rva2VuQ29udHJhY3RBZGRyZXNzID0gYWRkcmVzcztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpbml0QnVpbGRlcih0eDogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICBzdXBlci5pbml0QnVpbGRlcih0eCk7XG4gICAgaWYgKHRoaXMuX2NhbGxzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHRyYW5zZmVyID0gdXRpbHMucGFyc2VUcmFuc2ZlckNhbGwodGhpcy5fY2FsbHNbMF0pO1xuICAgICAgaWYgKHRyYW5zZmVyKSB7XG4gICAgICAgIHRoaXMuX3JlY2VpdmVyQWRkcmVzcyA9IHRyYW5zZmVyLnJlY2lwaWVudDtcbiAgICAgICAgdGhpcy5fYW1vdW50ID0gdHJhbnNmZXIuYW1vdW50O1xuICAgICAgICB0aGlzLl90b2tlbkNvbnRyYWN0QWRkcmVzcyA9IHRyYW5zZmVyLnRva2VuQ29udHJhY3Q7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEltcGxlbWVudGF0aW9uKCk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICB0aGlzLnZhbGlkYXRlVHJhbnNmZXIoKTtcblxuICAgIGNvbnN0IHRyYW5zZmVyQ2FsbDogU3RhcmtuZXRDYWxsID0ge1xuICAgICAgY29udHJhY3RBZGRyZXNzOiB0aGlzLl90b2tlbkNvbnRyYWN0QWRkcmVzcyxcbiAgICAgIGVudHJ5cG9pbnQ6ICd0cmFuc2ZlcicsXG4gICAgICBjYWxsZGF0YTogdGhpcy5jb21waWxlVHJhbnNmZXJDYWxsZGF0YSh0aGlzLl9yZWNlaXZlckFkZHJlc3MgYXMgc3RyaW5nLCB0aGlzLl9hbW91bnQgYXMgc3RyaW5nKSxcbiAgICB9O1xuXG4gICAgdGhpcy5fY2FsbHMgPSBbdHJhbnNmZXJDYWxsXTtcblxuICAgIHJldHVybiBzdXBlci5idWlsZEltcGxlbWVudGF0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIGNvbXBpbGVUcmFuc2ZlckNhbGxkYXRhKHJlY2lwaWVudDogc3RyaW5nLCBhbW91bnQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBhbW91bnRCaWcgPSBCaWdJbnQoYW1vdW50KTtcbiAgICByZXR1cm4gW3JlY2lwaWVudCwgJzB4JyArIChhbW91bnRCaWcgJiBNQVNLXzEyOCkudG9TdHJpbmcoMTYpLCAnMHgnICsgKGFtb3VudEJpZyA+PiAxMjhuKS50b1N0cmluZygxNildO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVRyYW5zZmVyKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fc2VuZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdTZW5kZXIgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9yZWNlaXZlckFkZHJlc3MpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1JlY2VpdmVyIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fYW1vdW50KSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdBbW91bnQgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgaWYgKCF1dGlscy5pc1ZhbGlkQWRkcmVzcyh0aGlzLl9zZW5kZXIpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBJbnZhbGlkIHNlbmRlciBhZGRyZXNzOiAke3RoaXMuX3NlbmRlcn1gKTtcbiAgICB9XG4gICAgaWYgKCF1dGlscy5pc1ZhbGlkQWRkcmVzcyh0aGlzLl9yZWNlaXZlckFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBJbnZhbGlkIHJlY2VpdmVyIGFkZHJlc3M6ICR7dGhpcy5fcmVjZWl2ZXJBZGRyZXNzfWApO1xuICAgIH1cbiAgfVxufVxuIl19
|
package/dist/src/lib/utils.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { StarknetTransactionData, StarknetCall, ParsedTransferData } from './iface';
|
|
1
|
+
import { StarknetTransactionData, StarknetCall, ParsedTransferData, InvokeTransactionHashParams, DeployAccountTransactionHashParams } from './iface';
|
|
2
2
|
/**
|
|
3
3
|
* Normalize a Starknet address to canonical form: 0x + 64 hex chars, zero-padded.
|
|
4
4
|
*/
|
|
@@ -63,6 +63,28 @@ export declare function generateKeyPair(seed?: Buffer): {
|
|
|
63
63
|
* Validate raw transaction data has required fields.
|
|
64
64
|
*/
|
|
65
65
|
export declare function validateRawTransaction(tx: StarknetTransactionData): void;
|
|
66
|
+
/**
|
|
67
|
+
* Encode an ASCII string (max 31 chars) as a felt252.
|
|
68
|
+
*/
|
|
69
|
+
export declare function encodeShortString(str: string): bigint;
|
|
70
|
+
/**
|
|
71
|
+
* Compute the Starknet function selector: keccak256(name) masked to 250 bits.
|
|
72
|
+
* @scure/starknet's keccak() already applies the 250-bit mask.
|
|
73
|
+
*/
|
|
74
|
+
export declare function getSelectorFromName(name: string): bigint;
|
|
75
|
+
/**
|
|
76
|
+
* Compile calls into the Cairo 1 multicall __execute__ calldata format.
|
|
77
|
+
* Format: [num_calls, to_0, selector_0, data_len_0, ...data_0, to_1, ...]
|
|
78
|
+
*/
|
|
79
|
+
export declare function compileExecuteCalldata(calls: StarknetCall[]): string[];
|
|
80
|
+
/**
|
|
81
|
+
* Compute the Poseidon V3 INVOKE transaction hash per SNIP-8.
|
|
82
|
+
*/
|
|
83
|
+
export declare function calculateInvokeTransactionHash(params: InvokeTransactionHashParams): string;
|
|
84
|
+
/**
|
|
85
|
+
* Compute the Poseidon V3 DEPLOY_ACCOUNT transaction hash per SNIP-8 (starknet.js v3).
|
|
86
|
+
*/
|
|
87
|
+
export declare function calculateDeployAccountTransactionHash(params: DeployAccountTransactionHashParams): string;
|
|
66
88
|
declare const _default: {
|
|
67
89
|
isValidAddress: typeof isValidAddress;
|
|
68
90
|
isValidPublicKey: typeof isValidPublicKey;
|
|
@@ -77,6 +99,11 @@ declare const _default: {
|
|
|
77
99
|
parseTransferCall: typeof parseTransferCall;
|
|
78
100
|
generateKeyPair: typeof generateKeyPair;
|
|
79
101
|
validateRawTransaction: typeof validateRawTransaction;
|
|
102
|
+
encodeShortString: typeof encodeShortString;
|
|
103
|
+
getSelectorFromName: typeof getSelectorFromName;
|
|
104
|
+
compileExecuteCalldata: typeof compileExecuteCalldata;
|
|
105
|
+
calculateInvokeTransactionHash: typeof calculateInvokeTransactionHash;
|
|
106
|
+
calculateDeployAccountTransactionHash: typeof calculateDeployAccountTransactionHash;
|
|
80
107
|
};
|
|
81
108
|
export default _default;
|
|
82
109
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAcA,OAAO,EACL,uBAAuB,EAEvB,YAAY,EACZ,kBAAkB,EAClB,2BAA2B,EAC3B,kCAAkC,EACnC,MAAM,SAAS,CAAC;AAGjB;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGxD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CASvD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAgBrD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGtD;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAatE;AAED;;;GAGG;AACH,wBAAgB,oCAAoC,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,CAUpF;AAED;;;GAGG;AACH,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,mBAAmB,EAAE,MAAM,EAAE,EAC7B,eAAe,EAAE,MAAM,GAAG,MAAM,GAC/B,MAAM,CAUR;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,aAAa,EAAE,MAAM,GAAG;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;CACd,CASA;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,mBAAmB,EAAE,MAAM,GAAG,MAAM,CAI3E;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAYvF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,kBAAkB,GAAG,SAAS,CAYpF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAQ3E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,uBAAuB,GAAG,IAAI,CAkBxE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAerD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,EAAE,CAUtE;AAMD;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,2BAA2B,GAAG,MAAM,CA+C1F;AAED;;GAEG;AACH,wBAAgB,qCAAqC,CAAC,MAAM,EAAE,kCAAkC,GAAG,MAAM,CA4CxG;;;;;;;;;;;;;;;;;;;;;AAED,wBAmBE"}
|
package/dist/src/lib/utils.js
CHANGED
|
@@ -13,8 +13,14 @@ exports.formatEthAccountSignature = formatEthAccountSignature;
|
|
|
13
13
|
exports.parseTransferCall = parseTransferCall;
|
|
14
14
|
exports.generateKeyPair = generateKeyPair;
|
|
15
15
|
exports.validateRawTransaction = validateRawTransaction;
|
|
16
|
+
exports.encodeShortString = encodeShortString;
|
|
17
|
+
exports.getSelectorFromName = getSelectorFromName;
|
|
18
|
+
exports.compileExecuteCalldata = compileExecuteCalldata;
|
|
19
|
+
exports.calculateInvokeTransactionHash = calculateInvokeTransactionHash;
|
|
20
|
+
exports.calculateDeployAccountTransactionHash = calculateDeployAccountTransactionHash;
|
|
16
21
|
const starknet_1 = require("@scure/starknet");
|
|
17
22
|
const constants_1 = require("./constants");
|
|
23
|
+
const iface_1 = require("./iface");
|
|
18
24
|
const secp256k1_1 = require("@bitgo-beta/secp256k1");
|
|
19
25
|
/**
|
|
20
26
|
* Normalize a Starknet address to canonical form: 0x + 64 hex chars, zero-padded.
|
|
@@ -189,6 +195,119 @@ function validateRawTransaction(tx) {
|
|
|
189
195
|
if (!isValidAddress(tx.senderAddress)) {
|
|
190
196
|
throw new Error(`Invalid sender address: ${tx.senderAddress}`);
|
|
191
197
|
}
|
|
198
|
+
if (tx.transactionType === iface_1.StarknetTransactionType.DEPLOY_ACCOUNT) {
|
|
199
|
+
if (!tx.classHash) {
|
|
200
|
+
throw new Error('Missing class hash for deploy account transaction');
|
|
201
|
+
}
|
|
202
|
+
if (!tx.constructorCalldata || tx.constructorCalldata.length === 0) {
|
|
203
|
+
throw new Error('Missing constructor calldata for deploy account transaction');
|
|
204
|
+
}
|
|
205
|
+
if (!tx.contractAddressSalt) {
|
|
206
|
+
throw new Error('Missing contract address salt for deploy account transaction');
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Encode an ASCII string (max 31 chars) as a felt252.
|
|
212
|
+
*/
|
|
213
|
+
function encodeShortString(str) {
|
|
214
|
+
if (str.length > 31) {
|
|
215
|
+
throw new Error(`Short string too long: ${str.length} > 31`);
|
|
216
|
+
}
|
|
217
|
+
for (let i = 0; i < str.length; i++) {
|
|
218
|
+
const code = str.charCodeAt(i);
|
|
219
|
+
if (code > 127) {
|
|
220
|
+
throw new Error(`Non-ASCII character at index ${i}: code ${code}`);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
let result = 0n;
|
|
224
|
+
for (let i = 0; i < str.length; i++) {
|
|
225
|
+
result = (result << 8n) | BigInt(str.charCodeAt(i));
|
|
226
|
+
}
|
|
227
|
+
return result;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Compute the Starknet function selector: keccak256(name) masked to 250 bits.
|
|
231
|
+
* @scure/starknet's keccak() already applies the 250-bit mask.
|
|
232
|
+
*/
|
|
233
|
+
function getSelectorFromName(name) {
|
|
234
|
+
return (0, starknet_1.keccak)(Buffer.from(name, 'ascii'));
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Compile calls into the Cairo 1 multicall __execute__ calldata format.
|
|
238
|
+
* Format: [num_calls, to_0, selector_0, data_len_0, ...data_0, to_1, ...]
|
|
239
|
+
*/
|
|
240
|
+
function compileExecuteCalldata(calls) {
|
|
241
|
+
const result = [];
|
|
242
|
+
result.push('0x' + BigInt(calls.length).toString(16));
|
|
243
|
+
for (const call of calls) {
|
|
244
|
+
result.push(call.contractAddress);
|
|
245
|
+
result.push('0x' + getSelectorFromName(call.entrypoint).toString(16));
|
|
246
|
+
result.push('0x' + BigInt(call.calldata.length).toString(16));
|
|
247
|
+
result.push(...call.calldata);
|
|
248
|
+
}
|
|
249
|
+
return result;
|
|
250
|
+
}
|
|
251
|
+
function encodeResourceBound(typeName, maxAmount, maxPricePerUnit) {
|
|
252
|
+
return (typeName << 192n) | (BigInt(maxAmount) << 128n) | BigInt(maxPricePerUnit);
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Compute the Poseidon V3 INVOKE transaction hash per SNIP-8.
|
|
256
|
+
*/
|
|
257
|
+
function calculateInvokeTransactionHash(params) {
|
|
258
|
+
const { senderAddress, compiledCalldata, chainId, nonce, resourceBounds, tip = '0x0', nonceDataAvailabilityMode = 0, feeDataAvailabilityMode = 0, paymasterData = [], accountDeploymentData = [], proofFacts, } = params;
|
|
259
|
+
const feeFieldHash = (0, starknet_1.poseidonHashMany)([
|
|
260
|
+
BigInt(tip),
|
|
261
|
+
encodeResourceBound(constants_1.L1_GAS_NAME, resourceBounds.l1_gas.max_amount, resourceBounds.l1_gas.max_price_per_unit),
|
|
262
|
+
encodeResourceBound(constants_1.L2_GAS_NAME, resourceBounds.l2_gas.max_amount, resourceBounds.l2_gas.max_price_per_unit),
|
|
263
|
+
encodeResourceBound(constants_1.L1_DATA_GAS_NAME, resourceBounds.l1_data_gas.max_amount, resourceBounds.l1_data_gas.max_price_per_unit),
|
|
264
|
+
]);
|
|
265
|
+
const daMode = (BigInt(nonceDataAvailabilityMode) << 32n) | BigInt(feeDataAvailabilityMode);
|
|
266
|
+
const hashFields = [
|
|
267
|
+
constants_1.INVOKE_TX_PREFIX,
|
|
268
|
+
constants_1.TRANSACTION_VERSION_3,
|
|
269
|
+
BigInt(senderAddress),
|
|
270
|
+
feeFieldHash,
|
|
271
|
+
(0, starknet_1.poseidonHashMany)(paymasterData.map(BigInt)),
|
|
272
|
+
BigInt(chainId),
|
|
273
|
+
BigInt(nonce),
|
|
274
|
+
daMode,
|
|
275
|
+
(0, starknet_1.poseidonHashMany)(accountDeploymentData.map(BigInt)),
|
|
276
|
+
(0, starknet_1.poseidonHashMany)(compiledCalldata.map(BigInt)),
|
|
277
|
+
];
|
|
278
|
+
if (proofFacts && proofFacts.length > 0) {
|
|
279
|
+
hashFields.push((0, starknet_1.poseidonHashMany)(proofFacts.map(BigInt)));
|
|
280
|
+
}
|
|
281
|
+
const hash = (0, starknet_1.poseidonHashMany)(hashFields);
|
|
282
|
+
return '0x' + hash.toString(16);
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Compute the Poseidon V3 DEPLOY_ACCOUNT transaction hash per SNIP-8 (starknet.js v3).
|
|
286
|
+
*/
|
|
287
|
+
function calculateDeployAccountTransactionHash(params) {
|
|
288
|
+
const { contractAddress, classHash, constructorCalldata, contractAddressSalt, chainId, nonce, resourceBounds, tip = '0x0', nonceDataAvailabilityMode = 0, feeDataAvailabilityMode = 0, paymasterData = [], } = params;
|
|
289
|
+
const feeFieldHash = (0, starknet_1.poseidonHashMany)([
|
|
290
|
+
BigInt(tip),
|
|
291
|
+
encodeResourceBound(constants_1.L1_GAS_NAME, resourceBounds.l1_gas.max_amount, resourceBounds.l1_gas.max_price_per_unit),
|
|
292
|
+
encodeResourceBound(constants_1.L2_GAS_NAME, resourceBounds.l2_gas.max_amount, resourceBounds.l2_gas.max_price_per_unit),
|
|
293
|
+
encodeResourceBound(constants_1.L1_DATA_GAS_NAME, resourceBounds.l1_data_gas.max_amount, resourceBounds.l1_data_gas.max_price_per_unit),
|
|
294
|
+
]);
|
|
295
|
+
const daMode = (BigInt(nonceDataAvailabilityMode) << 32n) | BigInt(feeDataAvailabilityMode);
|
|
296
|
+
const hashFields = [
|
|
297
|
+
constants_1.DEPLOY_ACCOUNT_TX_PREFIX,
|
|
298
|
+
constants_1.TRANSACTION_VERSION_3,
|
|
299
|
+
BigInt(contractAddress),
|
|
300
|
+
feeFieldHash,
|
|
301
|
+
(0, starknet_1.poseidonHashMany)(paymasterData.map(BigInt)),
|
|
302
|
+
BigInt(chainId),
|
|
303
|
+
BigInt(nonce),
|
|
304
|
+
daMode,
|
|
305
|
+
(0, starknet_1.poseidonHashMany)(constructorCalldata.map(BigInt)),
|
|
306
|
+
BigInt(classHash),
|
|
307
|
+
BigInt(contractAddressSalt),
|
|
308
|
+
];
|
|
309
|
+
const hash = (0, starknet_1.poseidonHashMany)(hashFields);
|
|
310
|
+
return '0x' + hash.toString(16);
|
|
192
311
|
}
|
|
193
312
|
exports.default = {
|
|
194
313
|
isValidAddress,
|
|
@@ -204,5 +323,10 @@ exports.default = {
|
|
|
204
323
|
parseTransferCall,
|
|
205
324
|
generateKeyPair,
|
|
206
325
|
validateRawTransaction,
|
|
326
|
+
encodeShortString,
|
|
327
|
+
getSelectorFromName,
|
|
328
|
+
compileExecuteCalldata,
|
|
329
|
+
calculateInvokeTransactionHash,
|
|
330
|
+
calculateDeployAccountTransactionHash,
|
|
207
331
|
};
|
|
208
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBUUEsNENBR0M7QUFNRCx3Q0FTQztBQUtELDRDQWdCQztBQUtELDhDQUdDO0FBS0QsNERBYUM7QUFNRCxvRkFVQztBQU1ELDRFQWVDO0FBS0Qsd0RBYUM7QUFLRCwwREFJQztBQU1ELDhEQVlDO0FBTUQsOENBWUM7QUFLRCwwQ0FRQztBQUtELHdEQU9DO0FBdE1ELDhDQUF3RDtBQUN4RCwyQ0FBaUg7QUFFakgscURBQTRDO0FBRTVDOztHQUVHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQUMsT0FBZTtJQUM5QyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDbEUsT0FBTyxJQUFJLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDcEQsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLGNBQWMsQ0FBQyxPQUFlO0lBQzVDLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQzlDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDMUQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVCLE9BQU8sR0FBRyxHQUFHLEVBQUUsSUFBSSxHQUFHLEdBQUcsb0JBQVEsQ0FBQztJQUNwQyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gs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QixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixzQkFBc0IsQ0FBQyxFQUEyQjtJQUNoRSxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztRQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixFQUFFLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztJQUNqRSxDQUFDO0FBQ0gsQ0FBQztBQUVELGtCQUFlO0lBQ2IsY0FBYztJQUNkLGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsd0JBQXdCO0lBQ3hCLG9DQUFvQztJQUNwQyxnQ0FBZ0M7SUFDaEMsc0JBQXNCO0lBQ3RCLHVCQUF1QjtJQUN2QixnQkFBZ0I7SUFDaEIseUJBQXlCO0lBQ3pCLGlCQUFpQjtJQUNqQixlQUFlO0lBQ2Ysc0JBQXNCO0NBQ3ZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlSGFzaE9uRWxlbWVudHMgfSBmcm9tICdAc2N1cmUvc3RhcmtuZXQnO1xuaW1wb3J0IHsgRkVMVF9NQVgsIE1BU0tfMTI4LCBPWl9FVEhfQUNDT1VOVF9DTEFTU19IQVNILCBBRERSX0JPVU5ELCBDT05UUkFDVF9BRERSRVNTX1BSRUZJWCB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IFN0YXJrbmV0VHJhbnNhY3Rpb25EYXRhLCBTdGFya25ldENhbGwsIFBhcnNlZFRyYW5zZmVyRGF0YSB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgZWNjIH0gZnJvbSAnQGJpdGdvLWJldGEvc2VjcDI1NmsxJztcblxuLyoqXG4gKiBOb3JtYWxpemUgYSBTdGFya25ldCBhZGRyZXNzIHRvIGNhbm9uaWNhbCBmb3JtOiAweCArIDY0IGhleCBjaGFycywgemVyby1wYWRkZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGhleCA9IGFkZHJlc3Muc3RhcnRzV2l0aCgnMHgnKSA/IGFkZHJlc3Muc2xpY2UoMikgOiBhZGRyZXNzO1xuICByZXR1cm4gJzB4JyArIGhleC5wYWRTdGFydCg2NCwgJzAnKS50b0xvd2VyQ2FzZSgpO1xufVxuXG4vKipcbiAqIFN0YXJrbmV0IGFkZHJlc3NlcyBhcmUgZmVsdDI1MiB2YWx1ZXMgcmVwcmVzZW50ZWQgYXMgMHgtcHJlZml4ZWQgaGV4LlxuICogVmFsaWQgcmFuZ2U6IDAgPCBhZGRyZXNzIDwgRkVMVF9NQVgsIHdpdGggMHggcHJlZml4IGFuZCBoZXggY2hhcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiBhZGRyZXNzICE9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlO1xuICBpZiAoIWFkZHJlc3MubWF0Y2goL14weFswLTlhLWZBLUZdezEsNjR9JC8pKSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3QgdmFsID0gQmlnSW50KGFkZHJlc3MpO1xuICAgIHJldHVybiB2YWwgPiAwbiAmJiB2YWwgPCBGRUxUX01BWDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYSBzZWNwMjU2azEgcHVibGljIGtleSAoY29tcHJlc3NlZCAzMyBieXRlcyBvciB1bmNvbXByZXNzZWQgNjUgYnl0ZXMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFB1YmxpY0tleShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdCBidWYgPSBCdWZmZXIuZnJvbShrZXksICdoZXgnKTtcbiAgICBpZiAoYnVmLmxlbmd0aCA9PT0gMzMgJiYgKGJ1ZlswXSA9PT0gMHgwMiB8fCBidWZbMF0gPT09IDB4MDMpKSB7XG4gICAgICBlY2MucG9pbnRDb21wcmVzcyhidWYsIHRydWUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChidWYubGVuZ3RoID09PSA2NSAmJiBidWZbMF0gPT09IDB4MDQpIHtcbiAgICAgIGVjYy5wb2ludENvbXByZXNzKGJ1ZiwgdHJ1ZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhIHNlY3AyNTZrMSBwcml2YXRlIGtleSAoMzIgYnl0ZXMgaGV4KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRQcml2YXRlS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmICh0eXBlb2Yga2V5ICE9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gL15bMC05YS1mQS1GXXs2NH0kLy50ZXN0KGtleSk7XG59XG5cbi8qKlxuICogR2V0IHVuY29tcHJlc3NlZCBwdWJsaWMga2V5ICh4IHx8IHksIDEyOCBoZXggY2hhcnMsIG5vIDA0IHByZWZpeCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRVbmNvbXByZXNzZWRQdWJsaWNLZXkoY29tcHJlc3NlZEhleDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgYnVmID0gQnVmZmVyLmZyb20oY29tcHJlc3NlZEhleCwgJ2hleCcpO1xuICBpZiAoYnVmLmxlbmd0aCA9PT0gNjUgJiYgYnVmWzBdID09PSAweDA0KSB7XG4gICAgcmV0dXJuIGNvbXByZXNzZWRIZXguc2xpY2UoMik7XG4gIH1cbiAgaWYgKGJ1Zi5sZW5ndGggPT09IDMzICYmIChidWZbMF0gPT09IDB4MDIgfHwgYnVmWzBdID09PSAweDAzKSkge1xuICAgIGNvbnN0IHVuY29tcHJlc3NlZCA9IEJ1ZmZlci5mcm9tKGVjYy5wb2ludENvbXByZXNzKGJ1ZiwgZmFsc2UpKTtcbiAgICByZXR1cm4gdW5jb21wcmVzc2VkLnRvU3RyaW5nKCdoZXgnKS5zbGljZSgyKTtcbiAgfVxuICBpZiAoYnVmLmxlbmd0aCA9PT0gNjQpIHtcbiAgICByZXR1cm4gY29tcHJlc3NlZEhleDtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcHVibGljIGtleSBmb3JtYXQ6ICR7Y29tcHJlc3NlZEhleC5zdWJzdHJpbmcoMCwgMTApfS4uLmApO1xufVxuXG4vKipcbiAqIENvbXBpbGUgRXRoQWNjb3VudCBjb25zdHJ1Y3RvciBjYWxsZGF0YSBmcm9tIGZ1bGwgc2VjcDI1NmsxIHB1YmxpYyBrZXkuXG4gKiBSZXR1cm5zIFt4X2xvdywgeF9oaWdoLCB5X2xvdywgeV9oaWdoXSBhcyBmZWx0MjUyIHN0cmluZ3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlRXRoQWNjb3VudENvbnN0cnVjdG9yQ2FsbGRhdGEoZnVsbFB1YmxpY0tleTogc3RyaW5nKTogc3RyaW5nW10ge1xuICBjb25zdCBwdWJYID0gQmlnSW50KCcweCcgKyBmdWxsUHVibGljS2V5LnNsaWNlKDAsIDY0KSk7XG4gIGNvbnN0IHB1YlkgPSBCaWdJbnQoJzB4JyArIGZ1bGxQdWJsaWNLZXkuc2xpY2UoNjQpKTtcblxuICByZXR1cm4gW1xuICAgICcweCcgKyAocHViWCAmIE1BU0tfMTI4KS50b1N0cmluZygxNiksXG4gICAgJzB4JyArIChwdWJYID4+IDEyOG4pLnRvU3RyaW5nKDE2KSxcbiAgICAnMHgnICsgKHB1YlkgJiBNQVNLXzEyOCkudG9TdHJpbmcoMTYpLFxuICAgICcweCcgKyAocHViWSA+PiAxMjhuKS50b1N0cmluZygxNiksXG4gIF07XG59XG5cbi8qKlxuICogQ29tcHV0ZSBTdGFya25ldCBjb250cmFjdCBhZGRyZXNzIGZyb20gaGFzaCBjb21wb25lbnRzLlxuICogUmVwbGljYXRlcyBzdGFya25ldC5qcyBjYWxjdWxhdGVDb250cmFjdEFkZHJlc3NGcm9tSGFzaCB1c2luZyBAc2N1cmUvc3RhcmtuZXQgcGVkZXJzZW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVDb250cmFjdEFkZHJlc3NGcm9tSGFzaChcbiAgc2FsdDogc3RyaW5nLFxuICBjbGFzc0hhc2g6IHN0cmluZyxcbiAgY29uc3RydWN0b3JDYWxsZGF0YTogc3RyaW5nW10sXG4gIGRlcGxveWVyQWRkcmVzczogbnVtYmVyIHwgYmlnaW50XG4pOiBzdHJpbmcge1xuICBjb25zdCBjYWxsZGF0YUhhc2ggPSBjb21wdXRlSGFzaE9uRWxlbWVudHMoY29uc3RydWN0b3JDYWxsZGF0YS5tYXAoQmlnSW50KSkgYXMgc3RyaW5nO1xuICBjb25zdCByYXdIYXNoID0gY29tcHV0ZUhhc2hPbkVsZW1lbnRzKFtcbiAgICBDT05UUkFDVF9BRERSRVNTX1BSRUZJWCxcbiAgICBCaWdJbnQoZGVwbG95ZXJBZGRyZXNzKSxcbiAgICBCaWdJbnQoc2FsdCksXG4gICAgQmlnSW50KGNsYXNzSGFzaCksXG4gICAgQmlnSW50KGNhbGxkYXRhSGFzaCksXG4gIF0pIGFzIHN0cmluZztcbiAgcmV0dXJuIG5vcm1hbGl6ZUFkZHJlc3MoJzB4JyArIChCaWdJbnQocmF3SGFzaCkgJSBBRERSX0JPVU5EKS50b1N0cmluZygxNikpO1xufVxuXG4vKipcbiAqIENvbXB1dGUgU3RhcmtuZXQgRXRoQWNjb3VudCBjb3VudGVyZmFjdHVhbCBhZGRyZXNzIGZyb20gcHVibGljIGtleS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVTdGFya25ldEFkZHJlc3MoZnVsbFB1YmxpY0tleTogc3RyaW5nKToge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGNvbnN0cnVjdG9yQ2FsbGRhdGE6IHN0cmluZ1tdO1xuICBzYWx0OiBzdHJpbmc7XG59IHtcbiAgY29uc3QgY29uc3RydWN0b3JDYWxsZGF0YSA9IGNvbXBpbGVFdGhBY2NvdW50Q29uc3RydWN0b3JDYWxsZGF0YShmdWxsUHVibGljS2V5KTtcblxuICBjb25zdCBwdWJYID0gQmlnSW50KCcweCcgKyBmdWxsUHVibGljS2V5LnNsaWNlKDAsIDY0KSk7XG4gIGNvbnN0IHNhbHQgPSAnMHgnICsgKHB1YlggJSBGRUxUX01BWCkudG9TdHJpbmcoMTYpO1xuXG4gIGNvbnN0IGFkZHJlc3MgPSBjYWxjdWxhdGVDb250cmFjdEFkZHJlc3NGcm9tSGFzaChzYWx0LCBPWl9FVEhfQUNDT1VOVF9DTEFTU19IQVNILCBjb25zdHJ1Y3RvckNhbGxkYXRhLCAwKTtcblxuICByZXR1cm4geyBhZGRyZXNzLCBjb25zdHJ1Y3RvckNhbGxkYXRhLCBzYWx0IH07XG59XG5cbi8qKlxuICogRGVyaXZlIFN0YXJrbmV0IEV0aEFjY291bnQgYWRkcmVzcyBmcm9tIGNvbXByZXNzZWQgc2VjcDI1NmsxIHB1YmxpYyBrZXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBZGRyZXNzRnJvbVB1YmxpY0tleShjb21wcmVzc2VkUHVibGljS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBmdWxsUHVibGljS2V5ID0gZ2V0VW5jb21wcmVzc2VkUHVibGljS2V5KGNvbXByZXNzZWRQdWJsaWNLZXkpO1xuICBjb25zdCB7IGFkZHJlc3MgfSA9IGNvbXB1dGVTdGFya25ldEFkZHJlc3MoZnVsbFB1YmxpY0tleSk7XG4gIHJldHVybiBhZGRyZXNzO1xufVxuXG4vKipcbiAqIEZvcm1hdCBFQ0RTQSBzaWduYXR1cmUgZm9yIFN0YXJrbmV0IEV0aEFjY291bnQuXG4gKiBSZXR1cm5zIFtyX2xvdywgcl9oaWdoLCBzX2xvdywgc19oaWdoLCB2XS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEV0aEFjY291bnRTaWduYXR1cmUocjogc3RyaW5nLCBzOiBzdHJpbmcsIHJlY2lkOiBudW1iZXIpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHJCaWcgPSBCaWdJbnQoJzB4JyArIHIpO1xuICBjb25zdCBzQmlnID0gQmlnSW50KCcweCcgKyBzKTtcbiAgY29uc3QgdiA9IEJpZ0ludChyZWNpZCk7XG5cbiAgcmV0dXJuIFtcbiAgICAnMHgnICsgKHJCaWcgJiBNQVNLXzEyOCkudG9TdHJpbmcoMTYpLFxuICAgICcweCcgKyAockJpZyA+PiAxMjhuKS50b1N0cmluZygxNiksXG4gICAgJzB4JyArIChzQmlnICYgTUFTS18xMjgpLnRvU3RyaW5nKDE2KSxcbiAgICAnMHgnICsgKHNCaWcgPj4gMTI4bikudG9TdHJpbmcoMTYpLFxuICAgICcweCcgKyB2LnRvU3RyaW5nKDE2KSxcbiAgXTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IHJlY2lwaWVudCwgYW1vdW50LCBhbmQgdG9rZW4gY29udHJhY3QgZnJvbSBhIHRyYW5zZmVyIGNhbGwuXG4gKiBSZXZlcnNlIG9mIFRyYW5zZmVyQnVpbGRlci5jb21waWxlVHJhbnNmZXJDYWxsZGF0YTogY2FsbGRhdGEgPSBbcmVjaXBpZW50LCBhbW91bnRfbG93LCBhbW91bnRfaGlnaF0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVRyYW5zZmVyQ2FsbChjYWxsOiBTdGFya25ldENhbGwpOiBQYXJzZWRUcmFuc2ZlckRhdGEgfCB1bmRlZmluZWQge1xuICBpZiAoY2FsbC5lbnRyeXBvaW50ICE9PSAndHJhbnNmZXInIHx8IGNhbGwuY2FsbGRhdGEubGVuZ3RoIDwgMykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgYW1vdW50TG93ID0gQmlnSW50KGNhbGwuY2FsbGRhdGFbMV0pO1xuICBjb25zdCBhbW91bnRIaWdoID0gQmlnSW50KGNhbGwuY2FsbGRhdGFbMl0pO1xuICBjb25zdCBhbW91bnQgPSAoKGFtb3VudEhpZ2ggPDwgMTI4bikgfCBhbW91bnRMb3cpLnRvU3RyaW5nKCk7XG4gIHJldHVybiB7XG4gICAgcmVjaXBpZW50OiBjYWxsLmNhbGxkYXRhWzBdLFxuICAgIGFtb3VudCxcbiAgICB0b2tlbkNvbnRyYWN0OiBjYWxsLmNvbnRyYWN0QWRkcmVzcyxcbiAgfTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIG5ldyBzZWNwMjU2azEga2V5IHBhaXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUtleVBhaXIoc2VlZD86IEJ1ZmZlcik6IHsgcHViOiBzdHJpbmc7IHBydjogc3RyaW5nIH0ge1xuICBjb25zdCB7IEtleVBhaXI6IFN0YXJrbmV0S2V5UGFpciB9ID0gcmVxdWlyZSgnLi9rZXlQYWlyJyk7XG4gIGNvbnN0IGtleVBhaXIgPSBzZWVkID8gbmV3IFN0YXJrbmV0S2V5UGFpcih7IHNlZWQgfSkgOiBuZXcgU3RhcmtuZXRLZXlQYWlyKCk7XG4gIGNvbnN0IHsgcHViLCBwcnYgfSA9IGtleVBhaXIuZ2V0S2V5cygpO1xuICBpZiAoIXBydikge1xuICAgIHRocm93IG5ldyBFcnJvcignUHJpdmF0ZSBrZXkgaXMgbWlzc2luZyBpbiB0aGUgZ2VuZXJhdGVkIGtleSBwYWlyLicpO1xuICB9XG4gIHJldHVybiB7IHB1YiwgcHJ2IH07XG59XG5cbi8qKlxuICogVmFsaWRhdGUgcmF3IHRyYW5zYWN0aW9uIGRhdGEgaGFzIHJlcXVpcmVkIGZpZWxkcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUmF3VHJhbnNhY3Rpb24odHg6IFN0YXJrbmV0VHJhbnNhY3Rpb25EYXRhKTogdm9pZCB7XG4gIGlmICghdHguc2VuZGVyQWRkcmVzcykge1xuICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBzZW5kZXIgYWRkcmVzcycpO1xuICB9XG4gIGlmICghaXNWYWxpZEFkZHJlc3ModHguc2VuZGVyQWRkcmVzcykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc2VuZGVyIGFkZHJlc3M6ICR7dHguc2VuZGVyQWRkcmVzc31gKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlzVmFsaWRBZGRyZXNzLFxuICBpc1ZhbGlkUHVibGljS2V5LFxuICBpc1ZhbGlkUHJpdmF0ZUtleSxcbiAgZ2V0VW5jb21wcmVzc2VkUHVibGljS2V5LFxuICBjb21waWxlRXRoQWNjb3VudENvbnN0cnVjdG9yQ2FsbGRhdGEsXG4gIGNhbGN1bGF0ZUNvbnRyYWN0QWRkcmVzc0Zyb21IYXNoLFxuICBjb21wdXRlU3RhcmtuZXRBZGRyZXNzLFxuICBnZXRBZGRyZXNzRnJvbVB1YmxpY0tleSxcbiAgbm9ybWFsaXplQWRkcmVzcyxcbiAgZm9ybWF0RXRoQWNjb3VudFNpZ25hdHVyZSxcbiAgcGFyc2VUcmFuc2ZlckNhbGwsXG4gIGdlbmVyYXRlS2V5UGFpcixcbiAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbixcbn07XG4iXX0=
|
|
332
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBMkJBLDRDQUdDO0FBTUQsd0NBU0M7QUFLRCw0Q0FnQkM7QUFLRCw4Q0FHQztBQUtELDREQWFDO0FBTUQsb0ZBVUM7QUFNRCw0RUFlQztBQUtELHdEQWFDO0FBS0QsMERBSUM7QUFNRCw4REFZQztBQU1ELDhDQVlDO0FBS0QsMENBUUM7QUFLRCx3REFrQkM7QUFLRCw4Q0FlQztBQU1ELGtEQUVDO0FBTUQsd0RBVUM7QUFTRCx3RUErQ0M7QUFLRCxzRkE0Q0M7QUF6WEQsOENBQWtGO0FBQ2xGLDJDQVlxQjtBQUNyQixtQ0FPaUI7QUFDakIscURBQTRDO0FBRTVDOztHQUVHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQUMsT0FBZTtJQUM5QyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDbEUsT0FBTyxJQUFJLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDcEQsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLGNBQWMsQ0FBQyxPQUFlO0lBQzVDLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQzlDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDMUQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVCLE9BQU8sR0FBRyxHQUFHLEVBQUUsSUFBSSxHQUFHLEdBQUcsb0JBQVEsQ0FBQztJQUNwQyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQUMsR0FBVztJQUMxQyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVE7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUMxQyxJQUFJLENBQUM7UUFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM5RCxlQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM3QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN6QyxlQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM3QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixpQkFBaUIsQ0FBQyxHQUFXO0lBQzNDLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQzFDLE9BQU8sbUJBQW1CLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLHdCQUF3QixDQUFDLGFBQXFCO0lBQzVELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzlDLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ3pDLE9BQU8sYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBQ0QsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDOUQsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLE9BQU8sWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUNELElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUN0QixPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JGLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixvQ0FBb0MsQ0FBQyxhQUFxQjtJQUN4RSxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFcEQsT0FBTztRQUNMLElBQUksR0FBRyxDQUFDLElBQUksR0FBRyxvQkFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNyQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNsQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEdBQUcsb0JBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDckMsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7S0FDbkMsQ0FBQztBQUNKLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixnQ0FBZ0MsQ0FDOUMsSUFBWSxFQUNaLFNBQWlCLEVBQ2pCLG1CQUE2QixFQUM3QixlQUFnQztJQUVoQyxNQUFNLFlBQVksR0FBRyxJQUFBLGdDQUFxQixFQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBVyxDQUFDO0lBQ3RGLE1BQU0sT0FBTyxHQUFHLElBQUEsZ0NBQXFCLEVBQUM7UUFDcEMsbUNBQXVCO1FBQ3ZCLE1BQU0sQ0FBQyxlQUFlLENBQUM7UUFDdkIsTUFBTSxDQUFDLElBQUksQ0FBQztRQUNaLE1BQU0sQ0FBQyxTQUFTLENBQUM7UUFDakIsTUFBTSxDQUFDLFlBQVksQ0FBQztLQUNyQixDQUFXLENBQUM7SUFDYixPQUFPLGdCQUFnQixDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxzQkFBVSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUUsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0Isc0JBQXNCLENBQUMsYUFBcUI7SUFLMUQsTUFBTSxtQkFBbUIsR0FBRyxvQ0FBb0MsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUVoRixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkQsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxHQUFHLG9CQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFbkQsTUFBTSxPQUFPLEdBQUcsZ0NBQWdDLENBQUMsSUFBSSxFQUFFLHFDQUF5QixFQUFFLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRTFHLE9BQU8sRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDaEQsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsdUJBQXVCLENBQUMsbUJBQTJCO0lBQ2pFLE1BQU0sYUFBYSxHQUFHLHdCQUF3QixDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDcEUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzFELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQix5QkFBeUIsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLEtBQWE7SUFDM0UsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5QixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzlCLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV4QixPQUFPO1FBQ0wsSUFBSSxHQUFHLENBQUMsSUFBSSxHQUFHLG9CQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ3JDLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ2xDLElBQUksR0FBRyxDQUFDLElBQUksR0FBRyxvQkFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNyQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNsQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7S0FDdEIsQ0FBQztBQUNKLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixpQkFBaUIsQ0FBQyxJQUFrQjtJQUNsRCxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssVUFBVSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQy9ELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM3RCxPQUFPO1FBQ0wsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQzNCLE1BQU07UUFDTixhQUFhLEVBQUUsSUFBSSxDQUFDLGVBQWU7S0FDcEMsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxJQUFhO0lBQzNDLE1BQU0sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzFELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxlQUFlLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLGVBQWUsRUFBRSxDQUFDO0lBQzdFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3ZDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNULE1BQU0sSUFBSSxLQUFLLENBQUMsbURBQW1ELENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBQ0QsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN0QixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixzQkFBc0IsQ0FBQyxFQUEyQjtJQUNoRSxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztRQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixFQUFFLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBQ0QsSUFBSSxFQUFFLENBQUMsZUFBZSxLQUFLLCtCQUF1QixDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2xFLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7UUFDRCxJQUFJLENBQUMsRUFBRSxDQUFDLG1CQUFtQixJQUFJLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkUsTUFBTSxJQUFJLEtBQUssQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO1FBQ2pGLENBQUM7UUFDRCxJQUFJLENBQUMsRUFBRSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4REFBOEQsQ0FBQyxDQUFDO1FBQ2xGLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQUMsR0FBVztJQUMzQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsR0FBRyxDQUFDLE1BQU0sT0FBTyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDcEMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQixJQUFJLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7SUFDSCxDQUFDO0lBQ0QsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDcEMsTUFBTSxHQUFHLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixtQkFBbUIsQ0FBQyxJQUFZO0lBQzlDLE9BQU8sSUFBQSxpQkFBTSxFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDNUMsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLHNCQUFzQixDQUFDLEtBQXFCO0lBQzFELE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQztJQUM1QixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RELEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7UUFDekIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDbEMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzlELE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUFDLFFBQWdCLEVBQUUsU0FBaUIsRUFBRSxlQUF1QjtJQUN2RixPQUFPLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUNwRixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQiw4QkFBOEIsQ0FBQyxNQUFtQztJQUNoRixNQUFNLEVBQ0osYUFBYSxFQUNiLGdCQUFnQixFQUNoQixPQUFPLEVBQ1AsS0FBSyxFQUNMLGNBQWMsRUFDZCxHQUFHLEdBQUcsS0FBSyxFQUNYLHlCQUF5QixHQUFHLENBQUMsRUFDN0IsdUJBQXVCLEdBQUcsQ0FBQyxFQUMzQixhQUFhLEdBQUcsRUFBRSxFQUNsQixxQkFBcUIsR0FBRyxFQUFFLEVBQzFCLFVBQVUsR0FDWCxHQUFHLE1BQU0sQ0FBQztJQUVYLE1BQU0sWUFBWSxHQUFHLElBQUEsMkJBQWdCLEVBQUM7UUFDcEMsTUFBTSxDQUFDLEdBQUcsQ0FBQztRQUNYLG1CQUFtQixDQUFDLHVCQUFXLEVBQUUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztRQUM1RyxtQkFBbUIsQ0FBQyx1QkFBVyxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUM7UUFDNUcsbUJBQW1CLENBQ2pCLDRCQUFnQixFQUNoQixjQUFjLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFDckMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FDOUM7S0FDRixDQUFDLENBQUM7SUFFSCxNQUFNLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBRTVGLE1BQU0sVUFBVSxHQUFhO1FBQzNCLDRCQUFnQjtRQUNoQixpQ0FBcUI7UUFDckIsTUFBTSxDQUFDLGFBQWEsQ0FBQztRQUNyQixZQUFZO1FBQ1osSUFBQSwyQkFBZ0IsRUFBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNDLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDZixNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ2IsTUFBTTtRQUNOLElBQUEsMkJBQWdCLEVBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25ELElBQUEsMkJBQWdCLEVBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQy9DLENBQUM7SUFFRixJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3hDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBQSwyQkFBZ0IsRUFBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcsSUFBQSwyQkFBZ0IsRUFBQyxVQUFVLENBQUMsQ0FBQztJQUMxQyxPQUFPLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xDLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLHFDQUFxQyxDQUFDLE1BQTBDO0lBQzlGLE1BQU0sRUFDSixlQUFlLEVBQ2YsU0FBUyxFQUNULG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsT0FBTyxFQUNQLEtBQUssRUFDTCxjQUFjLEVBQ2QsR0FBRyxHQUFHLEtBQUssRUFDWCx5QkFBeUIsR0FBRyxDQUFDLEVBQzdCLHVCQUF1QixHQUFHLENBQUMsRUFDM0IsYUFBYSxHQUFHLEVBQUUsR0FDbkIsR0FBRyxNQUFNLENBQUM7SUFFWCxNQUFNLFlBQVksR0FBRyxJQUFBLDJCQUFnQixFQUFDO1FBQ3BDLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDWCxtQkFBbUIsQ0FBQyx1QkFBVyxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUM7UUFDNUcsbUJBQW1CLENBQUMsdUJBQVcsRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDO1FBQzVHLG1CQUFtQixDQUNqQiw0QkFBZ0IsRUFDaEIsY0FBYyxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQ3JDLGNBQWMsQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQzlDO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsTUFBTSxNQUFNLEdBQUcsQ0FBQyxNQUFNLENBQUMseUJBQXlCLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUU1RixNQUFNLFVBQVUsR0FBYTtRQUMzQixvQ0FBd0I7UUFDeEIsaUNBQXFCO1FBQ3JCLE1BQU0sQ0FBQyxlQUFlLENBQUM7UUFDdkIsWUFBWTtRQUNaLElBQUEsMkJBQWdCLEVBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQ2YsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNiLE1BQU07UUFDTixJQUFBLDJCQUFnQixFQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqRCxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQ2pCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQztLQUM1QixDQUFDO0lBRUYsTUFBTSxJQUFJLEdBQUcsSUFBQSwyQkFBZ0IsRUFBQyxVQUFVLENBQUMsQ0FBQztJQUMxQyxPQUFPLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xDLENBQUM7QUFFRCxrQkFBZTtJQUNiLGNBQWM7SUFDZCxnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLHdCQUF3QjtJQUN4QixvQ0FBb0M7SUFDcEMsZ0NBQWdDO0lBQ2hDLHNCQUFzQjtJQUN0Qix1QkFBdUI7SUFDdkIsZ0JBQWdCO0lBQ2hCLHlCQUF5QjtJQUN6QixpQkFBaUI7SUFDakIsZUFBZTtJQUNmLHNCQUFzQjtJQUN0QixpQkFBaUI7SUFDakIsbUJBQW1CO0lBQ25CLHNCQUFzQjtJQUN0Qiw4QkFBOEI7SUFDOUIscUNBQXFDO0NBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlSGFzaE9uRWxlbWVudHMsIHBvc2VpZG9uSGFzaE1hbnksIGtlY2NhayB9IGZyb20gJ0BzY3VyZS9zdGFya25ldCc7XG5pbXBvcnQge1xuICBGRUxUX01BWCxcbiAgTUFTS18xMjgsXG4gIE9aX0VUSF9BQ0NPVU5UX0NMQVNTX0hBU0gsXG4gIEFERFJfQk9VTkQsXG4gIENPTlRSQUNUX0FERFJFU1NfUFJFRklYLFxuICBJTlZPS0VfVFhfUFJFRklYLFxuICBERVBMT1lfQUNDT1VOVF9UWF9QUkVGSVgsXG4gIFRSQU5TQUNUSU9OX1ZFUlNJT05fMyxcbiAgTDFfR0FTX05BTUUsXG4gIEwyX0dBU19OQU1FLFxuICBMMV9EQVRBX0dBU19OQU1FLFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBTdGFya25ldFRyYW5zYWN0aW9uRGF0YSxcbiAgU3RhcmtuZXRUcmFuc2FjdGlvblR5cGUsXG4gIFN0YXJrbmV0Q2FsbCxcbiAgUGFyc2VkVHJhbnNmZXJEYXRhLFxuICBJbnZva2VUcmFuc2FjdGlvbkhhc2hQYXJhbXMsXG4gIERlcGxveUFjY291bnRUcmFuc2FjdGlvbkhhc2hQYXJhbXMsXG59IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgZWNjIH0gZnJvbSAnQGJpdGdvLWJldGEvc2VjcDI1NmsxJztcblxuLyoqXG4gKiBOb3JtYWxpemUgYSBTdGFya25ldCBhZGRyZXNzIHRvIGNhbm9uaWNhbCBmb3JtOiAweCArIDY0IGhleCBjaGFycywgemVyby1wYWRkZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGhleCA9IGFkZHJlc3Muc3RhcnRzV2l0aCgnMHgnKSA/IGFkZHJlc3Muc2xpY2UoMikgOiBhZGRyZXNzO1xuICByZXR1cm4gJzB4JyArIGhleC5wYWRTdGFydCg2NCwgJzAnKS50b0xvd2VyQ2FzZSgpO1xufVxuXG4vKipcbiAqIFN0YXJrbmV0IGFkZHJlc3NlcyBhcmUgZmVsdDI1MiB2YWx1ZXMgcmVwcmVzZW50ZWQgYXMgMHgtcHJlZml4ZWQgaGV4LlxuICogVmFsaWQgcmFuZ2U6IDAgPCBhZGRyZXNzIDwgRkVMVF9NQVgsIHdpdGggMHggcHJlZml4IGFuZCBoZXggY2hhcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiBhZGRyZXNzICE9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlO1xuICBpZiAoIWFkZHJlc3MubWF0Y2goL14weFswLTlhLWZBLUZdezEsNjR9JC8pKSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3QgdmFsID0gQmlnSW50KGFkZHJlc3MpO1xuICAgIHJldHVybiB2YWwgPiAwbiAmJiB2YWwgPCBGRUxUX01BWDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYSBzZWNwMjU2azEgcHVibGljIGtleSAoY29tcHJlc3NlZCAzMyBieXRlcyBvciB1bmNvbXByZXNzZWQgNjUgYnl0ZXMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFB1YmxpY0tleShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdCBidWYgPSBCdWZmZXIuZnJvbShrZXksICdoZXgnKTtcbiAgICBpZiAoYnVmLmxlbmd0aCA9PT0gMzMgJiYgKGJ1ZlswXSA9PT0gMHgwMiB8fCBidWZbMF0gPT09IDB4MDMpKSB7XG4gICAgICBlY2MucG9pbnRDb21wcmVzcyhidWYsIHRydWUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChidWYubGVuZ3RoID09PSA2NSAmJiBidWZbMF0gPT09IDB4MDQpIHtcbiAgICAgIGVjYy5wb2ludENvbXByZXNzKGJ1ZiwgdHJ1ZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhIHNlY3AyNTZrMSBwcml2YXRlIGtleSAoMzIgYnl0ZXMgaGV4KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRQcml2YXRlS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmICh0eXBlb2Yga2V5ICE9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gL15bMC05YS1mQS1GXXs2NH0kLy50ZXN0KGtleSk7XG59XG5cbi8qKlxuICogR2V0IHVuY29tcHJlc3NlZCBwdWJsaWMga2V5ICh4IHx8IHksIDEyOCBoZXggY2hhcnMsIG5vIDA0IHByZWZpeCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRVbmNvbXByZXNzZWRQdWJsaWNLZXkoY29tcHJlc3NlZEhleDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgYnVmID0gQnVmZmVyLmZyb20oY29tcHJlc3NlZEhleCwgJ2hleCcpO1xuICBpZiAoYnVmLmxlbmd0aCA9PT0gNjUgJiYgYnVmWzBdID09PSAweDA0KSB7XG4gICAgcmV0dXJuIGNvbXByZXNzZWRIZXguc2xpY2UoMik7XG4gIH1cbiAgaWYgKGJ1Zi5sZW5ndGggPT09IDMzICYmIChidWZbMF0gPT09IDB4MDIgfHwgYnVmWzBdID09PSAweDAzKSkge1xuICAgIGNvbnN0IHVuY29tcHJlc3NlZCA9IEJ1ZmZlci5mcm9tKGVjYy5wb2ludENvbXByZXNzKGJ1ZiwgZmFsc2UpKTtcbiAgICByZXR1cm4gdW5jb21wcmVzc2VkLnRvU3RyaW5nKCdoZXgnKS5zbGljZSgyKTtcbiAgfVxuICBpZiAoYnVmLmxlbmd0aCA9PT0gNjQpIHtcbiAgICByZXR1cm4gY29tcHJlc3NlZEhleDtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcHVibGljIGtleSBmb3JtYXQ6ICR7Y29tcHJlc3NlZEhleC5zdWJzdHJpbmcoMCwgMTApfS4uLmApO1xufVxuXG4vKipcbiAqIENvbXBpbGUgRXRoQWNjb3VudCBjb25zdHJ1Y3RvciBjYWxsZGF0YSBmcm9tIGZ1bGwgc2VjcDI1NmsxIHB1YmxpYyBrZXkuXG4gKiBSZXR1cm5zIFt4X2xvdywgeF9oaWdoLCB5X2xvdywgeV9oaWdoXSBhcyBmZWx0MjUyIHN0cmluZ3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlRXRoQWNjb3VudENvbnN0cnVjdG9yQ2FsbGRhdGEoZnVsbFB1YmxpY0tleTogc3RyaW5nKTogc3RyaW5nW10ge1xuICBjb25zdCBwdWJYID0gQmlnSW50KCcweCcgKyBmdWxsUHVibGljS2V5LnNsaWNlKDAsIDY0KSk7XG4gIGNvbnN0IHB1YlkgPSBCaWdJbnQoJzB4JyArIGZ1bGxQdWJsaWNLZXkuc2xpY2UoNjQpKTtcblxuICByZXR1cm4gW1xuICAgICcweCcgKyAocHViWCAmIE1BU0tfMTI4KS50b1N0cmluZygxNiksXG4gICAgJzB4JyArIChwdWJYID4+IDEyOG4pLnRvU3RyaW5nKDE2KSxcbiAgICAnMHgnICsgKHB1YlkgJiBNQVNLXzEyOCkudG9TdHJpbmcoMTYpLFxuICAgICcweCcgKyAocHViWSA+PiAxMjhuKS50b1N0cmluZygxNiksXG4gIF07XG59XG5cbi8qKlxuICogQ29tcHV0ZSBTdGFya25ldCBjb250cmFjdCBhZGRyZXNzIGZyb20gaGFzaCBjb21wb25lbnRzLlxuICogUmVwbGljYXRlcyBzdGFya25ldC5qcyBjYWxjdWxhdGVDb250cmFjdEFkZHJlc3NGcm9tSGFzaCB1c2luZyBAc2N1cmUvc3RhcmtuZXQgcGVkZXJzZW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVDb250cmFjdEFkZHJlc3NGcm9tSGFzaChcbiAgc2FsdDogc3RyaW5nLFxuICBjbGFzc0hhc2g6IHN0cmluZyxcbiAgY29uc3RydWN0b3JDYWxsZGF0YTogc3RyaW5nW10sXG4gIGRlcGxveWVyQWRkcmVzczogbnVtYmVyIHwgYmlnaW50XG4pOiBzdHJpbmcge1xuICBjb25zdCBjYWxsZGF0YUhhc2ggPSBjb21wdXRlSGFzaE9uRWxlbWVudHMoY29uc3RydWN0b3JDYWxsZGF0YS5tYXAoQmlnSW50KSkgYXMgc3RyaW5nO1xuICBjb25zdCByYXdIYXNoID0gY29tcHV0ZUhhc2hPbkVsZW1lbnRzKFtcbiAgICBDT05UUkFDVF9BRERSRVNTX1BSRUZJWCxcbiAgICBCaWdJbnQoZGVwbG95ZXJBZGRyZXNzKSxcbiAgICBCaWdJbnQoc2FsdCksXG4gICAgQmlnSW50KGNsYXNzSGFzaCksXG4gICAgQmlnSW50KGNhbGxkYXRhSGFzaCksXG4gIF0pIGFzIHN0cmluZztcbiAgcmV0dXJuIG5vcm1hbGl6ZUFkZHJlc3MoJzB4JyArIChCaWdJbnQocmF3SGFzaCkgJSBBRERSX0JPVU5EKS50b1N0cmluZygxNikpO1xufVxuXG4vKipcbiAqIENvbXB1dGUgU3RhcmtuZXQgRXRoQWNjb3VudCBjb3VudGVyZmFjdHVhbCBhZGRyZXNzIGZyb20gcHVibGljIGtleS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVTdGFya25ldEFkZHJlc3MoZnVsbFB1YmxpY0tleTogc3RyaW5nKToge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGNvbnN0cnVjdG9yQ2FsbGRhdGE6IHN0cmluZ1tdO1xuICBzYWx0OiBzdHJpbmc7XG59IHtcbiAgY29uc3QgY29uc3RydWN0b3JDYWxsZGF0YSA9IGNvbXBpbGVFdGhBY2NvdW50Q29uc3RydWN0b3JDYWxsZGF0YShmdWxsUHVibGljS2V5KTtcblxuICBjb25zdCBwdWJYID0gQmlnSW50KCcweCcgKyBmdWxsUHVibGljS2V5LnNsaWNlKDAsIDY0KSk7XG4gIGNvbnN0IHNhbHQgPSAnMHgnICsgKHB1YlggJSBGRUxUX01BWCkudG9TdHJpbmcoMTYpO1xuXG4gIGNvbnN0IGFkZHJlc3MgPSBjYWxjdWxhdGVDb250cmFjdEFkZHJlc3NGcm9tSGFzaChzYWx0LCBPWl9FVEhfQUNDT1VOVF9DTEFTU19IQVNILCBjb25zdHJ1Y3RvckNhbGxkYXRhLCAwKTtcblxuICByZXR1cm4geyBhZGRyZXNzLCBjb25zdHJ1Y3RvckNhbGxkYXRhLCBzYWx0IH07XG59XG5cbi8qKlxuICogRGVyaXZlIFN0YXJrbmV0IEV0aEFjY291bnQgYWRkcmVzcyBmcm9tIGNvbXByZXNzZWQgc2VjcDI1NmsxIHB1YmxpYyBrZXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBZGRyZXNzRnJvbVB1YmxpY0tleShjb21wcmVzc2VkUHVibGljS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBmdWxsUHVibGljS2V5ID0gZ2V0VW5jb21wcmVzc2VkUHVibGljS2V5KGNvbXByZXNzZWRQdWJsaWNLZXkpO1xuICBjb25zdCB7IGFkZHJlc3MgfSA9IGNvbXB1dGVTdGFya25ldEFkZHJlc3MoZnVsbFB1YmxpY0tleSk7XG4gIHJldHVybiBhZGRyZXNzO1xufVxuXG4vKipcbiAqIEZvcm1hdCBFQ0RTQSBzaWduYXR1cmUgZm9yIFN0YXJrbmV0IEV0aEFjY291bnQuXG4gKiBSZXR1cm5zIFtyX2xvdywgcl9oaWdoLCBzX2xvdywgc19oaWdoLCB2XS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEV0aEFjY291bnRTaWduYXR1cmUocjogc3RyaW5nLCBzOiBzdHJpbmcsIHJlY2lkOiBudW1iZXIpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHJCaWcgPSBCaWdJbnQoJzB4JyArIHIpO1xuICBjb25zdCBzQmlnID0gQmlnSW50KCcweCcgKyBzKTtcbiAgY29uc3QgdiA9IEJpZ0ludChyZWNpZCk7XG5cbiAgcmV0dXJuIFtcbiAgICAnMHgnICsgKHJCaWcgJiBNQVNLXzEyOCkudG9TdHJpbmcoMTYpLFxuICAgICcweCcgKyAockJpZyA+PiAxMjhuKS50b1N0cmluZygxNiksXG4gICAgJzB4JyArIChzQmlnICYgTUFTS18xMjgpLnRvU3RyaW5nKDE2KSxcbiAgICAnMHgnICsgKHNCaWcgPj4gMTI4bikudG9TdHJpbmcoMTYpLFxuICAgICcweCcgKyB2LnRvU3RyaW5nKDE2KSxcbiAgXTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IHJlY2lwaWVudCwgYW1vdW50LCBhbmQgdG9rZW4gY29udHJhY3QgZnJvbSBhIHRyYW5zZmVyIGNhbGwuXG4gKiBSZXZlcnNlIG9mIFRyYW5zZmVyQnVpbGRlci5jb21waWxlVHJhbnNmZXJDYWxsZGF0YTogY2FsbGRhdGEgPSBbcmVjaXBpZW50LCBhbW91bnRfbG93LCBhbW91bnRfaGlnaF0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVRyYW5zZmVyQ2FsbChjYWxsOiBTdGFya25ldENhbGwpOiBQYXJzZWRUcmFuc2ZlckRhdGEgfCB1bmRlZmluZWQge1xuICBpZiAoY2FsbC5lbnRyeXBvaW50ICE9PSAndHJhbnNmZXInIHx8IGNhbGwuY2FsbGRhdGEubGVuZ3RoIDwgMykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgYW1vdW50TG93ID0gQmlnSW50KGNhbGwuY2FsbGRhdGFbMV0pO1xuICBjb25zdCBhbW91bnRIaWdoID0gQmlnSW50KGNhbGwuY2FsbGRhdGFbMl0pO1xuICBjb25zdCBhbW91bnQgPSAoKGFtb3VudEhpZ2ggPDwgMTI4bikgfCBhbW91bnRMb3cpLnRvU3RyaW5nKCk7XG4gIHJldHVybiB7XG4gICAgcmVjaXBpZW50OiBjYWxsLmNhbGxkYXRhWzBdLFxuICAgIGFtb3VudCxcbiAgICB0b2tlbkNvbnRyYWN0OiBjYWxsLmNvbnRyYWN0QWRkcmVzcyxcbiAgfTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIG5ldyBzZWNwMjU2azEga2V5IHBhaXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUtleVBhaXIoc2VlZD86IEJ1ZmZlcik6IHsgcHViOiBzdHJpbmc7IHBydjogc3RyaW5nIH0ge1xuICBjb25zdCB7IEtleVBhaXI6IFN0YXJrbmV0S2V5UGFpciB9ID0gcmVxdWlyZSgnLi9rZXlQYWlyJyk7XG4gIGNvbnN0IGtleVBhaXIgPSBzZWVkID8gbmV3IFN0YXJrbmV0S2V5UGFpcih7IHNlZWQgfSkgOiBuZXcgU3RhcmtuZXRLZXlQYWlyKCk7XG4gIGNvbnN0IHsgcHViLCBwcnYgfSA9IGtleVBhaXIuZ2V0S2V5cygpO1xuICBpZiAoIXBydikge1xuICAgIHRocm93IG5ldyBFcnJvcignUHJpdmF0ZSBrZXkgaXMgbWlzc2luZyBpbiB0aGUgZ2VuZXJhdGVkIGtleSBwYWlyLicpO1xuICB9XG4gIHJldHVybiB7IHB1YiwgcHJ2IH07XG59XG5cbi8qKlxuICogVmFsaWRhdGUgcmF3IHRyYW5zYWN0aW9uIGRhdGEgaGFzIHJlcXVpcmVkIGZpZWxkcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUmF3VHJhbnNhY3Rpb24odHg6IFN0YXJrbmV0VHJhbnNhY3Rpb25EYXRhKTogdm9pZCB7XG4gIGlmICghdHguc2VuZGVyQWRkcmVzcykge1xuICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBzZW5kZXIgYWRkcmVzcycpO1xuICB9XG4gIGlmICghaXNWYWxpZEFkZHJlc3ModHguc2VuZGVyQWRkcmVzcykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc2VuZGVyIGFkZHJlc3M6ICR7dHguc2VuZGVyQWRkcmVzc31gKTtcbiAgfVxuICBpZiAodHgudHJhbnNhY3Rpb25UeXBlID09PSBTdGFya25ldFRyYW5zYWN0aW9uVHlwZS5ERVBMT1lfQUNDT1VOVCkge1xuICAgIGlmICghdHguY2xhc3NIYXNoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgY2xhc3MgaGFzaCBmb3IgZGVwbG95IGFjY291bnQgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgaWYgKCF0eC5jb25zdHJ1Y3RvckNhbGxkYXRhIHx8IHR4LmNvbnN0cnVjdG9yQ2FsbGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgY29uc3RydWN0b3IgY2FsbGRhdGEgZm9yIGRlcGxveSBhY2NvdW50IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIGlmICghdHguY29udHJhY3RBZGRyZXNzU2FsdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGNvbnRyYWN0IGFkZHJlc3Mgc2FsdCBmb3IgZGVwbG95IGFjY291bnQgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBFbmNvZGUgYW4gQVNDSUkgc3RyaW5nIChtYXggMzEgY2hhcnMpIGFzIGEgZmVsdDI1Mi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZVNob3J0U3RyaW5nKHN0cjogc3RyaW5nKTogYmlnaW50IHtcbiAgaWYgKHN0ci5sZW5ndGggPiAzMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU2hvcnQgc3RyaW5nIHRvbyBsb25nOiAke3N0ci5sZW5ndGh9ID4gMzFgKTtcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNvZGUgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICBpZiAoY29kZSA+IDEyNykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBOb24tQVNDSUkgY2hhcmFjdGVyIGF0IGluZGV4ICR7aX06IGNvZGUgJHtjb2RlfWApO1xuICAgIH1cbiAgfVxuICBsZXQgcmVzdWx0ID0gMG47XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgcmVzdWx0ID0gKHJlc3VsdCA8PCA4bikgfCBCaWdJbnQoc3RyLmNoYXJDb2RlQXQoaSkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ29tcHV0ZSB0aGUgU3RhcmtuZXQgZnVuY3Rpb24gc2VsZWN0b3I6IGtlY2NhazI1NihuYW1lKSBtYXNrZWQgdG8gMjUwIGJpdHMuXG4gKiBAc2N1cmUvc3RhcmtuZXQncyBrZWNjYWsoKSBhbHJlYWR5IGFwcGxpZXMgdGhlIDI1MC1iaXQgbWFzay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdG9yRnJvbU5hbWUobmFtZTogc3RyaW5nKTogYmlnaW50IHtcbiAgcmV0dXJuIGtlY2NhayhCdWZmZXIuZnJvbShuYW1lLCAnYXNjaWknKSk7XG59XG5cbi8qKlxuICogQ29tcGlsZSBjYWxscyBpbnRvIHRoZSBDYWlybyAxIG11bHRpY2FsbCBfX2V4ZWN1dGVfXyBjYWxsZGF0YSBmb3JtYXQuXG4gKiBGb3JtYXQ6IFtudW1fY2FsbHMsIHRvXzAsIHNlbGVjdG9yXzAsIGRhdGFfbGVuXzAsIC4uLmRhdGFfMCwgdG9fMSwgLi4uXVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZUV4ZWN1dGVDYWxsZGF0YShjYWxsczogU3RhcmtuZXRDYWxsW10pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXTtcbiAgcmVzdWx0LnB1c2goJzB4JyArIEJpZ0ludChjYWxscy5sZW5ndGgpLnRvU3RyaW5nKDE2KSk7XG4gIGZvciAoY29uc3QgY2FsbCBvZiBjYWxscykge1xuICAgIHJlc3VsdC5wdXNoKGNhbGwuY29udHJhY3RBZGRyZXNzKTtcbiAgICByZXN1bHQucHVzaCgnMHgnICsgZ2V0U2VsZWN0b3JGcm9tTmFtZShjYWxsLmVudHJ5cG9pbnQpLnRvU3RyaW5nKDE2KSk7XG4gICAgcmVzdWx0LnB1c2goJzB4JyArIEJpZ0ludChjYWxsLmNhbGxkYXRhLmxlbmd0aCkudG9TdHJpbmcoMTYpKTtcbiAgICByZXN1bHQucHVzaCguLi5jYWxsLmNhbGxkYXRhKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBlbmNvZGVSZXNvdXJjZUJvdW5kKHR5cGVOYW1lOiBiaWdpbnQsIG1heEFtb3VudDogc3RyaW5nLCBtYXhQcmljZVBlclVuaXQ6IHN0cmluZyk6IGJpZ2ludCB7XG4gIHJldHVybiAodHlwZU5hbWUgPDwgMTkybikgfCAoQmlnSW50KG1heEFtb3VudCkgPDwgMTI4bikgfCBCaWdJbnQobWF4UHJpY2VQZXJVbml0KTtcbn1cblxuLyoqXG4gKiBDb21wdXRlIHRoZSBQb3NlaWRvbiBWMyBJTlZPS0UgdHJhbnNhY3Rpb24gaGFzaCBwZXIgU05JUC04LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlSW52b2tlVHJhbnNhY3Rpb25IYXNoKHBhcmFtczogSW52b2tlVHJhbnNhY3Rpb25IYXNoUGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3Qge1xuICAgIHNlbmRlckFkZHJlc3MsXG4gICAgY29tcGlsZWRDYWxsZGF0YSxcbiAgICBjaGFpbklkLFxuICAgIG5vbmNlLFxuICAgIHJlc291cmNlQm91bmRzLFxuICAgIHRpcCA9ICcweDAnLFxuICAgIG5vbmNlRGF0YUF2YWlsYWJpbGl0eU1vZGUgPSAwLFxuICAgIGZlZURhdGFBdmFpbGFiaWxpdHlNb2RlID0gMCxcbiAgICBwYXltYXN0ZXJEYXRhID0gW10sXG4gICAgYWNjb3VudERlcGxveW1lbnREYXRhID0gW10sXG4gICAgcHJvb2ZGYWN0cyxcbiAgfSA9IHBhcmFtcztcblxuICBjb25zdCBmZWVGaWVsZEhhc2ggPSBwb3NlaWRvbkhhc2hNYW55KFtcbiAgICBCaWdJbnQodGlwKSxcbiAgICBlbmNvZGVSZXNvdXJjZUJvdW5kKEwxX0dBU19OQU1FLCByZXNvdXJjZUJvdW5kcy5sMV9nYXMubWF4X2Ftb3VudCwgcmVzb3VyY2VCb3VuZHMubDFfZ2FzLm1heF9wcmljZV9wZXJfdW5pdCksXG4gICAgZW5jb2RlUmVzb3VyY2VCb3VuZChMMl9HQVNfTkFNRSwgcmVzb3VyY2VCb3VuZHMubDJfZ2FzLm1heF9hbW91bnQsIHJlc291cmNlQm91bmRzLmwyX2dhcy5tYXhfcHJpY2VfcGVyX3VuaXQpLFxuICAgIGVuY29kZVJlc291cmNlQm91bmQoXG4gICAgICBMMV9EQVRBX0dBU19OQU1FLFxuICAgICAgcmVzb3VyY2VCb3VuZHMubDFfZGF0YV9nYXMubWF4X2Ftb3VudCxcbiAgICAgIHJlc291cmNlQm91bmRzLmwxX2RhdGFfZ2FzLm1heF9wcmljZV9wZXJfdW5pdFxuICAgICksXG4gIF0pO1xuXG4gIGNvbnN0IGRhTW9kZSA9IChCaWdJbnQobm9uY2VEYXRhQXZhaWxhYmlsaXR5TW9kZSkgPDwgMzJuKSB8IEJpZ0ludChmZWVEYXRhQXZhaWxhYmlsaXR5TW9kZSk7XG5cbiAgY29uc3QgaGFzaEZpZWxkczogYmlnaW50W10gPSBbXG4gICAgSU5WT0tFX1RYX1BSRUZJWCxcbiAgICBUUkFOU0FDVElPTl9WRVJTSU9OXzMsXG4gICAgQmlnSW50KHNlbmRlckFkZHJlc3MpLFxuICAgIGZlZUZpZWxkSGFzaCxcbiAgICBwb3NlaWRvbkhhc2hNYW55KHBheW1hc3RlckRhdGEubWFwKEJpZ0ludCkpLFxuICAgIEJpZ0ludChjaGFpbklkKSxcbiAgICBCaWdJbnQobm9uY2UpLFxuICAgIGRhTW9kZSxcbiAgICBwb3NlaWRvbkhhc2hNYW55KGFjY291bnREZXBsb3ltZW50RGF0YS5tYXAoQmlnSW50KSksXG4gICAgcG9zZWlkb25IYXNoTWFueShjb21waWxlZENhbGxkYXRhLm1hcChCaWdJbnQpKSxcbiAgXTtcblxuICBpZiAocHJvb2ZGYWN0cyAmJiBwcm9vZkZhY3RzLmxlbmd0aCA+IDApIHtcbiAgICBoYXNoRmllbGRzLnB1c2gocG9zZWlkb25IYXNoTWFueShwcm9vZkZhY3RzLm1hcChCaWdJbnQpKSk7XG4gIH1cblxuICBjb25zdCBoYXNoID0gcG9zZWlkb25IYXNoTWFueShoYXNoRmllbGRzKTtcbiAgcmV0dXJuICcweCcgKyBoYXNoLnRvU3RyaW5nKDE2KTtcbn1cblxuLyoqXG4gKiBDb21wdXRlIHRoZSBQb3NlaWRvbiBWMyBERVBMT1lfQUNDT1VOVCB0cmFuc2FjdGlvbiBoYXNoIHBlciBTTklQLTggKHN0YXJrbmV0LmpzIHYzKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZURlcGxveUFjY291bnRUcmFuc2FjdGlvbkhhc2gocGFyYW1zOiBEZXBsb3lBY2NvdW50VHJhbnNhY3Rpb25IYXNoUGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3Qge1xuICAgIGNvbnRyYWN0QWRkcmVzcyxcbiAgICBjbGFzc0hhc2gsXG4gICAgY29uc3RydWN0b3JDYWxsZGF0YSxcbiAgICBjb250cmFjdEFkZHJlc3NTYWx0LFxuICAgIGNoYWluSWQsXG4gICAgbm9uY2UsXG4gICAgcmVzb3VyY2VCb3VuZHMsXG4gICAgdGlwID0gJzB4MCcsXG4gICAgbm9uY2VEYXRhQXZhaWxhYmlsaXR5TW9kZSA9IDAsXG4gICAgZmVlRGF0YUF2YWlsYWJpbGl0eU1vZGUgPSAwLFxuICAgIHBheW1hc3RlckRhdGEgPSBbXSxcbiAgfSA9IHBhcmFtcztcblxuICBjb25zdCBmZWVGaWVsZEhhc2ggPSBwb3NlaWRvbkhhc2hNYW55KFtcbiAgICBCaWdJbnQodGlwKSxcbiAgICBlbmNvZGVSZXNvdXJjZUJvdW5kKEwxX0dBU19OQU1FLCByZXNvdXJjZUJvdW5kcy5sMV9nYXMubWF4X2Ftb3VudCwgcmVzb3VyY2VCb3VuZHMubDFfZ2FzLm1heF9wcmljZV9wZXJfdW5pdCksXG4gICAgZW5jb2RlUmVzb3VyY2VCb3VuZChMMl9HQVNfTkFNRSwgcmVzb3VyY2VCb3VuZHMubDJfZ2FzLm1heF9hbW91bnQsIHJlc291cmNlQm91bmRzLmwyX2dhcy5tYXhfcHJpY2VfcGVyX3VuaXQpLFxuICAgIGVuY29kZVJlc291cmNlQm91bmQoXG4gICAgICBMMV9EQVRBX0dBU19OQU1FLFxuICAgICAgcmVzb3VyY2VCb3VuZHMubDFfZGF0YV9nYXMubWF4X2Ftb3VudCxcbiAgICAgIHJlc291cmNlQm91bmRzLmwxX2RhdGFfZ2FzLm1heF9wcmljZV9wZXJfdW5pdFxuICAgICksXG4gIF0pO1xuXG4gIGNvbnN0IGRhTW9kZSA9IChCaWdJbnQobm9uY2VEYXRhQXZhaWxhYmlsaXR5TW9kZSkgPDwgMzJuKSB8IEJpZ0ludChmZWVEYXRhQXZhaWxhYmlsaXR5TW9kZSk7XG5cbiAgY29uc3QgaGFzaEZpZWxkczogYmlnaW50W10gPSBbXG4gICAgREVQTE9ZX0FDQ09VTlRfVFhfUFJFRklYLFxuICAgIFRSQU5TQUNUSU9OX1ZFUlNJT05fMyxcbiAgICBCaWdJbnQoY29udHJhY3RBZGRyZXNzKSxcbiAgICBmZWVGaWVsZEhhc2gsXG4gICAgcG9zZWlkb25IYXNoTWFueShwYXltYXN0ZXJEYXRhLm1hcChCaWdJbnQpKSxcbiAgICBCaWdJbnQoY2hhaW5JZCksXG4gICAgQmlnSW50KG5vbmNlKSxcbiAgICBkYU1vZGUsXG4gICAgcG9zZWlkb25IYXNoTWFueShjb25zdHJ1Y3RvckNhbGxkYXRhLm1hcChCaWdJbnQpKSxcbiAgICBCaWdJbnQoY2xhc3NIYXNoKSxcbiAgICBCaWdJbnQoY29udHJhY3RBZGRyZXNzU2FsdCksXG4gIF07XG5cbiAgY29uc3QgaGFzaCA9IHBvc2VpZG9uSGFzaE1hbnkoaGFzaEZpZWxkcyk7XG4gIHJldHVybiAnMHgnICsgaGFzaC50b1N0cmluZygxNik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaXNWYWxpZEFkZHJlc3MsXG4gIGlzVmFsaWRQdWJsaWNLZXksXG4gIGlzVmFsaWRQcml2YXRlS2V5LFxuICBnZXRVbmNvbXByZXNzZWRQdWJsaWNLZXksXG4gIGNvbXBpbGVFdGhBY2NvdW50Q29uc3RydWN0b3JDYWxsZGF0YSxcbiAgY2FsY3VsYXRlQ29udHJhY3RBZGRyZXNzRnJvbUhhc2gsXG4gIGNvbXB1dGVTdGFya25ldEFkZHJlc3MsXG4gIGdldEFkZHJlc3NGcm9tUHVibGljS2V5LFxuICBub3JtYWxpemVBZGRyZXNzLFxuICBmb3JtYXRFdGhBY2NvdW50U2lnbmF0dXJlLFxuICBwYXJzZVRyYW5zZmVyQ2FsbCxcbiAgZ2VuZXJhdGVLZXlQYWlyLFxuICB2YWxpZGF0ZVJhd1RyYW5zYWN0aW9uLFxuICBlbmNvZGVTaG9ydFN0cmluZyxcbiAgZ2V0U2VsZWN0b3JGcm9tTmFtZSxcbiAgY29tcGlsZUV4ZWN1dGVDYWxsZGF0YSxcbiAgY2FsY3VsYXRlSW52b2tlVHJhbnNhY3Rpb25IYXNoLFxuICBjYWxjdWxhdGVEZXBsb3lBY2NvdW50VHJhbnNhY3Rpb25IYXNoLFxufTtcbiJdfQ==
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
2
|
+
import { TransactionBuilder } from './transactionBuilder';
|
|
3
|
+
import { Transaction } from './transaction';
|
|
4
|
+
import { StarknetTransactionType } from './iface';
|
|
5
|
+
/**
|
|
6
|
+
* Builds DEPLOY_ACCOUNT v3 transactions for counterfactual EthAccount activation.
|
|
7
|
+
*/
|
|
8
|
+
export declare class WalletInitializationBuilder extends TransactionBuilder {
|
|
9
|
+
protected _classHash: string;
|
|
10
|
+
protected _constructorCalldata?: string[];
|
|
11
|
+
protected _contractAddressSalt?: string;
|
|
12
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
13
|
+
protected get transactionType(): StarknetTransactionType;
|
|
14
|
+
/**
|
|
15
|
+
* Set deploy parameters from a secp256k1 public key (compressed or uncompressed).
|
|
16
|
+
* Derives counterfactual address, constructor calldata, and salt.
|
|
17
|
+
*/
|
|
18
|
+
fromPublicKey(pubKey: string): this;
|
|
19
|
+
classHash(classHash: string): this;
|
|
20
|
+
/** @inheritdoc */
|
|
21
|
+
initBuilder(tx: Transaction): void;
|
|
22
|
+
/** @inheritdoc */
|
|
23
|
+
protected buildImplementation(): Promise<Transaction>;
|
|
24
|
+
private ensureDeployFields;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=walletInitializationBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walletInitializationBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/walletInitializationBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAA2B,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAI3E;;GAEG;AACH,qBAAa,2BAA4B,SAAQ,kBAAkB;IACjE,SAAS,CAAC,UAAU,EAAE,MAAM,CAA6B;IACzD,SAAS,CAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1C,SAAS,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;gBAE5B,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,SAAS,KAAK,eAAe,IAAI,uBAAuB,CAEvD;IAED;;;OAGG;IACI,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAWnC,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAQzC,kBAAkB;IAClB,WAAW,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAclC,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAuC3D,OAAO,CAAC,kBAAkB;CA4B3B"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.WalletInitializationBuilder = void 0;
|
|
7
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
8
|
+
const transactionBuilder_1 = require("./transactionBuilder");
|
|
9
|
+
const iface_1 = require("./iface");
|
|
10
|
+
const constants_1 = require("./constants");
|
|
11
|
+
const utils_1 = __importDefault(require("./utils"));
|
|
12
|
+
/**
|
|
13
|
+
* Builds DEPLOY_ACCOUNT v3 transactions for counterfactual EthAccount activation.
|
|
14
|
+
*/
|
|
15
|
+
class WalletInitializationBuilder extends transactionBuilder_1.TransactionBuilder {
|
|
16
|
+
constructor(_coinConfig) {
|
|
17
|
+
super(_coinConfig);
|
|
18
|
+
this._classHash = constants_1.OZ_ETH_ACCOUNT_CLASS_HASH;
|
|
19
|
+
}
|
|
20
|
+
get transactionType() {
|
|
21
|
+
return iface_1.StarknetTransactionType.DEPLOY_ACCOUNT;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Set deploy parameters from a secp256k1 public key (compressed or uncompressed).
|
|
25
|
+
* Derives counterfactual address, constructor calldata, and salt.
|
|
26
|
+
*/
|
|
27
|
+
fromPublicKey(pubKey) {
|
|
28
|
+
if (!utils_1.default.isValidPublicKey(pubKey)) {
|
|
29
|
+
throw new sdk_core_1.BuildTransactionError('Invalid pubKey, got: ' + pubKey);
|
|
30
|
+
}
|
|
31
|
+
const fullPublicKey = utils_1.default.getUncompressedPublicKey(pubKey);
|
|
32
|
+
const { address, constructorCalldata, salt } = utils_1.default.computeStarknetAddress(fullPublicKey);
|
|
33
|
+
this._constructorCalldata = constructorCalldata;
|
|
34
|
+
this._contractAddressSalt = salt;
|
|
35
|
+
return this.sender(address, pubKey);
|
|
36
|
+
}
|
|
37
|
+
classHash(classHash) {
|
|
38
|
+
if (!classHash || !utils_1.default.isValidAddress(classHash)) {
|
|
39
|
+
throw new sdk_core_1.BuildTransactionError('Invalid class hash, got: ' + classHash);
|
|
40
|
+
}
|
|
41
|
+
this._classHash = classHash;
|
|
42
|
+
return this;
|
|
43
|
+
}
|
|
44
|
+
/** @inheritdoc */
|
|
45
|
+
initBuilder(tx) {
|
|
46
|
+
super.initBuilder(tx);
|
|
47
|
+
const data = tx.starknetTransactionData;
|
|
48
|
+
if (data.classHash) {
|
|
49
|
+
this._classHash = data.classHash;
|
|
50
|
+
}
|
|
51
|
+
if (data.constructorCalldata) {
|
|
52
|
+
this._constructorCalldata = data.constructorCalldata;
|
|
53
|
+
}
|
|
54
|
+
if (data.contractAddressSalt) {
|
|
55
|
+
this._contractAddressSalt = data.contractAddressSalt;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/** @inheritdoc */
|
|
59
|
+
async buildImplementation() {
|
|
60
|
+
this.ensureDeployFields();
|
|
61
|
+
const contractAddress = this._sender;
|
|
62
|
+
const chainId = this._chainId;
|
|
63
|
+
const nonce = this._nonce;
|
|
64
|
+
const constructorCalldata = this._constructorCalldata;
|
|
65
|
+
const contractAddressSalt = this._contractAddressSalt;
|
|
66
|
+
const transactionHash = utils_1.default.calculateDeployAccountTransactionHash({
|
|
67
|
+
contractAddress,
|
|
68
|
+
classHash: this._classHash,
|
|
69
|
+
constructorCalldata,
|
|
70
|
+
contractAddressSalt,
|
|
71
|
+
chainId,
|
|
72
|
+
nonce,
|
|
73
|
+
resourceBounds: this._resourceBounds,
|
|
74
|
+
tip: this._tip,
|
|
75
|
+
});
|
|
76
|
+
const data = {
|
|
77
|
+
senderAddress: contractAddress,
|
|
78
|
+
contractAddress,
|
|
79
|
+
calls: [],
|
|
80
|
+
nonce,
|
|
81
|
+
chainId,
|
|
82
|
+
transactionType: iface_1.StarknetTransactionType.DEPLOY_ACCOUNT,
|
|
83
|
+
resourceBounds: this._resourceBounds,
|
|
84
|
+
tip: this._tip,
|
|
85
|
+
transactionHash,
|
|
86
|
+
classHash: this._classHash,
|
|
87
|
+
constructorCalldata,
|
|
88
|
+
contractAddressSalt,
|
|
89
|
+
};
|
|
90
|
+
this._transaction.starknetTransactionData = data;
|
|
91
|
+
return this._transaction;
|
|
92
|
+
}
|
|
93
|
+
ensureDeployFields() {
|
|
94
|
+
if (!this._sender) {
|
|
95
|
+
throw new sdk_core_1.BuildTransactionError('Sender (counterfactual address) is required');
|
|
96
|
+
}
|
|
97
|
+
if (this._publicKey && (!this._constructorCalldata || !this._contractAddressSalt)) {
|
|
98
|
+
this.fromPublicKey(this._publicKey);
|
|
99
|
+
}
|
|
100
|
+
if (!this._constructorCalldata || !this._contractAddressSalt) {
|
|
101
|
+
throw new sdk_core_1.BuildTransactionError('Deploy account requires public key (fromPublicKey) or explicit constructor calldata and salt');
|
|
102
|
+
}
|
|
103
|
+
const fullPublicKey = this._publicKey ? utils_1.default.getUncompressedPublicKey(this._publicKey) : undefined;
|
|
104
|
+
if (fullPublicKey) {
|
|
105
|
+
const derived = utils_1.default.computeStarknetAddress(fullPublicKey);
|
|
106
|
+
if (utils_1.default.normalizeAddress(derived.address) !== utils_1.default.normalizeAddress(this._sender)) {
|
|
107
|
+
throw new sdk_core_1.BuildTransactionError(`Address does not match public key. Expected ${derived.address}, got ${this._sender}`);
|
|
108
|
+
}
|
|
109
|
+
if (derived.constructorCalldata.join(',') !== this._constructorCalldata.join(',') ||
|
|
110
|
+
derived.salt !== this._contractAddressSalt) {
|
|
111
|
+
throw new sdk_core_1.BuildTransactionError('Constructor calldata or salt does not match public key');
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
exports.WalletInitializationBuilder = WalletInitializationBuilder;
|
|
117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi93YWxsZXRJbml0aWFsaXphdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsbURBQTZEO0FBRTdELDZEQUEwRDtBQUUxRCxtQ0FBMkU7QUFDM0UsMkNBQXdEO0FBQ3hELG9EQUE0QjtBQUU1Qjs7R0FFRztBQUNILE1BQWEsMkJBQTRCLFNBQVEsdUNBQWtCO0lBS2pFLFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBTFgsZUFBVSxHQUFXLHFDQUF5QixDQUFDO0lBTXpELENBQUM7SUFFRCxJQUFjLGVBQWU7UUFDM0IsT0FBTywrQkFBdUIsQ0FBQyxjQUFjLENBQUM7SUFDaEQsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGFBQWEsQ0FBQyxNQUFjO1FBQ2pDLElBQUksQ0FBQyxlQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNwQyxNQUFNLElBQUksZ0NBQXFCLENBQUMsdUJBQXVCLEdBQUcsTUFBTSxDQUFDLENBQUM7UUFDcEUsQ0FBQztRQUNELE1BQU0sYUFBYSxHQUFHLGVBQUssQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3RCxNQUFNLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRSxHQUFHLGVBQUssQ0FBQyxzQkFBc0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMzRixJQUFJLENBQUMsb0JBQW9CLEdBQUcsbUJBQW1CLENBQUM7UUFDaEQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztRQUNqQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFTSxTQUFTLENBQUMsU0FBaUI7UUFDaEMsSUFBSSxDQUFDLFNBQVMs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cUIsQ0FDN0IsOEZBQThGLENBQy9GLENBQUM7UUFDSixDQUFDO1FBQ0QsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsZUFBSyxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ3BHLElBQUksYUFBYSxFQUFFLENBQUM7WUFDbEIsTUFBTSxPQUFPLEdBQUcsZUFBSyxDQUFDLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzVELElBQUksZUFBSyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxlQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ3JGLE1BQU0sSUFBSSxnQ0FBcUIsQ0FDN0IsK0NBQStDLE9BQU8sQ0FBQyxPQUFPLFNBQVMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUN0RixDQUFDO1lBQ0osQ0FBQztZQUNELElBQ0UsT0FBTyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztnQkFDN0UsT0FBTyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsb0JBQW9CLEVBQzFDLENBQUM7Z0JBQ0QsTUFBTSxJQUFJLGdDQUFxQixDQUFDLHdEQUF3RCxDQUFDLENBQUM7WUFDNUYsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUF2SEQsa0VBdUhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnVpbGRUcmFuc2FjdGlvbkVycm9yIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IFN0YXJrbmV0VHJhbnNhY3Rpb25EYXRhLCBTdGFya25ldFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgT1pfRVRIX0FDQ09VTlRfQ0xBU1NfSEFTSCB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcblxuLyoqXG4gKiBCdWlsZHMgREVQTE9ZX0FDQ09VTlQgdjMgdHJhbnNhY3Rpb25zIGZvciBjb3VudGVyZmFjdHVhbCBFdGhBY2NvdW50IGFjdGl2YXRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBXYWxsZXRJbml0aWFsaXphdGlvbkJ1aWxkZXIgZXh0ZW5kcyBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwcm90ZWN0ZWQgX2NsYXNzSGFzaDogc3RyaW5nID0gT1pfRVRIX0FDQ09VTlRfQ0xBU1NfSEFTSDtcbiAgcHJvdGVjdGVkIF9jb25zdHJ1Y3RvckNhbGxkYXRhPzogc3RyaW5nW107XG4gIHByb3RlY3RlZCBfY29udHJhY3RBZGRyZXNzU2FsdD86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uVHlwZSgpOiBTdGFya25ldFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFN0YXJrbmV0VHJhbnNhY3Rpb25UeXBlLkRFUExPWV9BQ0NPVU5UO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBkZXBsb3kgcGFyYW1ldGVycyBmcm9tIGEgc2VjcDI1NmsxIHB1YmxpYyBrZXkgKGNvbXByZXNzZWQgb3IgdW5jb21wcmVzc2VkKS5cbiAgICogRGVyaXZlcyBjb3VudGVyZmFjdHVhbCBhZGRyZXNzLCBjb25zdHJ1Y3RvciBjYWxsZGF0YSwgYW5kIHNhbHQuXG4gICAqL1xuICBwdWJsaWMgZnJvbVB1YmxpY0tleShwdWJLZXk6IHN0cmluZyk6IHRoaXMge1xuICAgIGlmICghdXRpbHMuaXNWYWxpZFB1YmxpY0tleShwdWJLZXkpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHB1YktleSwgZ290OiAnICsgcHViS2V5KTtcbiAgICB9XG4gICAgY29uc3QgZnVsbFB1YmxpY0tleSA9IHV0aWxzLmdldFVuY29tcHJlc3NlZFB1YmxpY0tleShwdWJLZXkpO1xuICAgIGNvbnN0IHsgYWRkcmVzcywgY29uc3RydWN0b3JDYWxsZGF0YSwgc2FsdCB9ID0gdXRpbHMuY29tcHV0ZVN0YXJrbmV0QWRkcmVzcyhmdWxsUHVibGljS2V5KTtcbiAgICB0aGlzLl9jb25zdHJ1Y3RvckNhbGxkYXRhID0gY29uc3RydWN0b3JDYWxsZGF0YTtcbiAgICB0aGlzLl9jb250cmFjdEFkZHJlc3NTYWx0ID0gc2FsdDtcbiAgICByZXR1cm4gdGhpcy5zZW5kZXIoYWRkcmVzcywgcHViS2V5KTtcbiAgfVxuXG4gIHB1YmxpYyBjbGFzc0hhc2goY2xhc3NIYXNoOiBzdHJpbmcpOiB0aGlzIHtcbiAgICBpZiAoIWNsYXNzSGFzaCB8fCAhdXRpbHMuaXNWYWxpZEFkZHJlc3MoY2xhc3NIYXNoKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBjbGFzcyBoYXNoLCBnb3Q6ICcgKyBjbGFzc0hhc2gpO1xuICAgIH1cbiAgICB0aGlzLl9jbGFzc0hhc2ggPSBjbGFzc0hhc2g7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaW5pdEJ1aWxkZXIodHg6IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgc3VwZXIuaW5pdEJ1aWxkZXIodHgpO1xuICAgIGNvbnN0IGRhdGEgPSB0eC5zdGFya25ldFRyYW5zYWN0aW9uRGF0YTtcbiAgICBpZiAoZGF0YS5jbGFzc0hhc2gpIHtcbiAgICAgIHRoaXMuX2NsYXNzSGFzaCA9IGRhdGEuY2xhc3NIYXNoO1xuICAgIH1cbiAgICBpZiAoZGF0YS5jb25zdHJ1Y3RvckNhbGxkYXRhKSB7XG4gICAgICB0aGlzLl9jb25zdHJ1Y3RvckNhbGxkYXRhID0gZGF0YS5jb25zdHJ1Y3RvckNhbGxkYXRhO1xuICAgIH1cbiAgICBpZiAoZGF0YS5jb250cmFjdEFkZHJlc3NTYWx0KSB7XG4gICAgICB0aGlzLl9jb250cmFjdEFkZHJlc3NTYWx0ID0gZGF0YS5jb250cmFjdEFkZHJlc3NTYWx0O1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRJbXBsZW1lbnRhdGlvbigpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgdGhpcy5lbnN1cmVEZXBsb3lGaWVsZHMoKTtcblxuICAgIGNvbnN0IGNvbnRyYWN0QWRkcmVzcyA9IHRoaXMuX3NlbmRlciBhcyBzdHJpbmc7XG4gICAgY29uc3QgY2hhaW5JZCA9IHRoaXMuX2NoYWluSWQgYXMgc3RyaW5nO1xuICAgIGNvbnN0IG5vbmNlID0gdGhpcy5fbm9uY2UgYXMgc3RyaW5nO1xuICAgIGNvbnN0IGNvbnN0cnVjdG9yQ2FsbGRhdGEgPSB0aGlzLl9jb25zdHJ1Y3RvckNhbGxkYXRhIGFzIHN0cmluZ1tdO1xuICAgIGNvbnN0IGNvbnRyYWN0QWRkcmVzc1NhbHQgPSB0aGlzLl9jb250cmFjdEFkZHJlc3NTYWx0IGFzIHN0cmluZztcblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uSGFzaCA9IHV0aWxzLmNhbGN1bGF0ZURlcGxveUFjY291bnRUcmFuc2FjdGlvbkhhc2goe1xuICAgICAgY29udHJhY3RBZGRyZXNzLFxuICAgICAgY2xhc3NIYXNoOiB0aGlzLl9jbGFzc0hhc2gsXG4gICAgICBjb25zdHJ1Y3RvckNhbGxkYXRhLFxuICAgICAgY29udHJhY3RBZGRyZXNzU2FsdCxcbiAgICAgIGNoYWluSWQsXG4gICAgICBub25jZSxcbiAgICAgIHJlc291cmNlQm91bmRzOiB0aGlzLl9yZXNvdXJjZUJvdW5kcyxcbiAgICAgIHRpcDogdGhpcy5fdGlwLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGF0YTogU3RhcmtuZXRUcmFuc2FjdGlvbkRhdGEgPSB7XG4gICAgICBzZW5kZXJBZGRyZXNzOiBjb250cmFjdEFkZHJlc3MsXG4gICAgICBjb250cmFjdEFkZHJlc3MsXG4gICAgICBjYWxsczogW10sXG4gICAgICBub25jZSxcbiAgICAgIGNoYWluSWQsXG4gICAgICB0cmFuc2FjdGlvblR5cGU6IFN0YXJrbmV0VHJhbnNhY3Rpb25UeXBlLkRFUExPWV9BQ0NPVU5ULFxuICAgICAgcmVzb3VyY2VCb3VuZHM6IHRoaXMuX3Jlc291cmNlQm91bmRzLFxuICAgICAgdGlwOiB0aGlzLl90aXAsXG4gICAgICB0cmFuc2FjdGlvbkhhc2gsXG4gICAgICBjbGFzc0hhc2g6IHRoaXMuX2NsYXNzSGFzaCxcbiAgICAgIGNvbnN0cnVjdG9yQ2FsbGRhdGEsXG4gICAgICBjb250cmFjdEFkZHJlc3NTYWx0LFxuICAgIH07XG5cbiAgICB0aGlzLl90cmFuc2FjdGlvbi5zdGFya25ldFRyYW5zYWN0aW9uRGF0YSA9IGRhdGE7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBlbnN1cmVEZXBsb3lGaWVsZHMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9zZW5kZXIpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1NlbmRlciAoY291bnRlcmZhY3R1YWwgYWRkcmVzcykgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3B1YmxpY0tleSAmJiAoIXRoaXMuX2NvbnN0cnVjdG9yQ2FsbGRhdGEgfHwgIXRoaXMuX2NvbnRyYWN0QWRkcmVzc1NhbHQpKSB7XG4gICAgICB0aGlzLmZyb21QdWJsaWNLZXkodGhpcy5fcHVibGljS2V5KTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9jb25zdHJ1Y3RvckNhbGxkYXRhIHx8ICF0aGlzLl9jb250cmFjdEFkZHJlc3NTYWx0KSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKFxuICAgICAgICAnRGVwbG95IGFjY291bnQgcmVxdWlyZXMgcHVibGljIGtleSAoZnJvbVB1YmxpY0tleSkgb3IgZXhwbGljaXQgY29uc3RydWN0b3IgY2FsbGRhdGEgYW5kIHNhbHQnXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBmdWxsUHVibGljS2V5ID0gdGhpcy5fcHVibGljS2V5ID8gdXRpbHMuZ2V0VW5jb21wcmVzc2VkUHVibGljS2V5KHRoaXMuX3B1YmxpY0tleSkgOiB1bmRlZmluZWQ7XG4gICAgaWYgKGZ1bGxQdWJsaWNLZXkpIHtcbiAgICAgIGNvbnN0IGRlcml2ZWQgPSB1dGlscy5jb21wdXRlU3RhcmtuZXRBZGRyZXNzKGZ1bGxQdWJsaWNLZXkpO1xuICAgICAgaWYgKHV0aWxzLm5vcm1hbGl6ZUFkZHJlc3MoZGVyaXZlZC5hZGRyZXNzKSAhPT0gdXRpbHMubm9ybWFsaXplQWRkcmVzcyh0aGlzLl9zZW5kZXIpKSB7XG4gICAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAgICAgYEFkZHJlc3MgZG9lcyBub3QgbWF0Y2ggcHVibGljIGtleS4gRXhwZWN0ZWQgJHtkZXJpdmVkLmFkZHJlc3N9LCBnb3QgJHt0aGlzLl9zZW5kZXJ9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBkZXJpdmVkLmNvbnN0cnVjdG9yQ2FsbGRhdGEuam9pbignLCcpICE9PSB0aGlzLl9jb25zdHJ1Y3RvckNhbGxkYXRhLmpvaW4oJywnKSB8fFxuICAgICAgICBkZXJpdmVkLnNhbHQgIT09IHRoaXMuX2NvbnRyYWN0QWRkcmVzc1NhbHRcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdDb25zdHJ1Y3RvciBjYWxsZGF0YSBvciBzYWx0IGRvZXMgbm90IG1hdGNoIHB1YmxpYyBrZXknKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|