@bitgo/sdk-coin-eth 25.7.3 → 25.8.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.
|
@@ -38,6 +38,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
40
40
|
const statics_1 = require("@bitgo/statics");
|
|
41
|
+
const src_1 = require("../../../src");
|
|
41
42
|
const testData = __importStar(require("../../resources/eth"));
|
|
42
43
|
const ethers_1 = require("ethers");
|
|
43
44
|
const should_1 = __importDefault(require("should"));
|
|
@@ -243,8 +244,52 @@ describe('Eth transaction builder sendNFT', () => {
|
|
|
243
244
|
should_1.default.deepEqual(decodedSafeTransferFromCallData.args[3].map((x) => x.toNumber()), values);
|
|
244
245
|
});
|
|
245
246
|
});
|
|
247
|
+
// ABI for transferFrom(address,address,uint256) used by HTS native NFTs on Hedera EVM
|
|
248
|
+
const transferFromABI = [
|
|
249
|
+
{
|
|
250
|
+
inputs: [
|
|
251
|
+
{ internalType: 'address', name: 'from', type: 'address' },
|
|
252
|
+
{ internalType: 'address', name: 'to', type: 'address' },
|
|
253
|
+
{ internalType: 'uint256', name: 'tokenId', type: 'uint256' },
|
|
254
|
+
],
|
|
255
|
+
name: 'transferFrom',
|
|
256
|
+
outputs: [],
|
|
257
|
+
stateMutability: 'nonpayable',
|
|
258
|
+
type: 'function',
|
|
259
|
+
},
|
|
260
|
+
];
|
|
261
|
+
describe('ERC721 HTS native NFT transferFrom', () => {
|
|
262
|
+
const owner = '0x19645032c7f1533395d44a629462e751084d3e4d';
|
|
263
|
+
const recipient = '0x19645032c7f1533395d44a629462e751084d3e4c';
|
|
264
|
+
// HTS native NFT address (long-zero format)
|
|
265
|
+
const htsNftContractAddress = '0x00000000000000000000000000000000007ac203';
|
|
266
|
+
const tokenId = '12';
|
|
267
|
+
it('should build ERC721 transferFrom calldata with correct selector and params', () => {
|
|
268
|
+
const builder = new src_1.ERC721TransferBuilder();
|
|
269
|
+
builder.tokenContractAddress(htsNftContractAddress).to(recipient).from(owner).tokenId(tokenId);
|
|
270
|
+
const calldata = builder.buildTransferFrom();
|
|
271
|
+
// Should use transferFrom selector 0x23b872dd
|
|
272
|
+
calldata.should.startWith('0x23b872dd');
|
|
273
|
+
// Decode and verify parameters
|
|
274
|
+
const decoded = decodeTransaction(JSON.stringify(transferFromABI), calldata);
|
|
275
|
+
should_1.default.equal(decoded.args[0].toLowerCase(), owner.toLowerCase());
|
|
276
|
+
should_1.default.equal(decoded.args[1].toLowerCase(), recipient.toLowerCase());
|
|
277
|
+
should_1.default.equal(decoded.args[2].toString(), tokenId);
|
|
278
|
+
});
|
|
279
|
+
it('should not include bytes data parameter in transferFrom calldata', () => {
|
|
280
|
+
const builder = new src_1.ERC721TransferBuilder();
|
|
281
|
+
builder.tokenContractAddress(htsNftContractAddress).to(recipient).from(owner).tokenId(tokenId);
|
|
282
|
+
const transferFromData = builder.buildTransferFrom();
|
|
283
|
+
const safeTransferData = builder.build();
|
|
284
|
+
// transferFrom has 3 params (from, to, tokenId), safeTransferFrom has 4 (+ bytes data)
|
|
285
|
+
// So transferFrom encoding should be shorter
|
|
286
|
+
transferFromData.length.should.be.lessThan(safeTransferData.length);
|
|
287
|
+
// Verify safeTransferFrom uses 0xb88d4fde
|
|
288
|
+
safeTransferData.should.startWith('0xb88d4fde');
|
|
289
|
+
});
|
|
290
|
+
});
|
|
246
291
|
function decodeTransaction(abi, calldata) {
|
|
247
292
|
const contractInterface = new ethers_1.ethers.utils.Interface(abi);
|
|
248
293
|
return contractInterface.parseTransaction({ data: calldata });
|
|
249
294
|
}
|
|
250
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZE5GVC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbkJ1aWxkZXIvc2VuZE5GVC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhDQUFrRDtBQUNsRCw0Q0FBMEU7QUFFMUUsOERBQWdEO0FBQ2hELG1DQUFnQztBQUNoQyxvREFBNEI7QUFDNUIsMkRBQXdEO0FBQ3hELHFFQUFrRTtBQUNsRSx5REFBc0Q7QUFDdEQsK0RBSXNDO0FBQ3RDLDhDQUEyQztBQUUzQyxRQUFRLENBQUMsaUNBQWlDLEVBQUUsR0FBRyxFQUFFO0lBQy9DLGtCQUFrQjtJQUNsQixNQUFNLEtBQUssR0FBRyw0Q0FBNEMsQ0FBQztJQUMzRCxNQUFNLFNBQVMsR0FBRyw0Q0FBNEMsQ0FBQztJQUMvRCxNQUFNLGVBQWUsR0FBRyw0Q0FBNEMsQ0FBQztJQUVyRSxhQUFhO0lBQ2IsTUFBTSxxQkFBcUIsR0FBRyw0Q0FBNEMsQ0FBQztJQUMzRSxrQkFBa0I7SUFDbEIsTUFBTSxzQkFBc0IsR0FBRyw0Q0FBNEMsQ0FBQztJQUM1RSxNQUFNLElBQUksR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBOEIsQ0FBQztJQUM3RCxJQUFJLEdBQUcsQ0FBQztJQUVSLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxHQUFHLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFhLENBQUM7SUFDckQsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsNkJBQTZCLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDM0MsTUFBTSxTQUFTLEdBQUcsSUFBQSx1QkFBVSxFQUFDLE9BQU8sQ0FBdUIsQ0FBQztRQUM1RCxTQUFTLENBQUMsR0FBRyxDQUFDO1lBQ1osR0FBRyxFQUFFLFlBQVk7WUFDakIsUUFBUSxFQUFFLFVBQVU7U0FDckIs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LGlCQUFpQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQVUsQ0FBQyxFQUFFLHdCQUF3QixDQUFDLENBQUM7UUFFaEgsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsK0JBQStCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3pGLGdCQUFNLENBQUMsS0FBSyxDQUFDLCtCQUErQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUM3RixnQkFBTSxDQUFDLFNBQVMsQ0FDZCwrQkFBK0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsRUFDaEUsUUFBUSxDQUNULENBQUM7UUFDRixnQkFBTSxDQUFDLFNBQVMsQ0FDZCwrQkFBK0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsRUFDaEUsTUFBTSxDQUNQLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsU0FBUyxpQkFBaUIsQ0FBQyxHQUFXLEVBQUUsUUFBZ0I7SUFDdEQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLGVBQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFELE9BQU8saUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUNoRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IGNvaW5zLCBFdGhlcmV1bU5ldHdvcmsgYXMgRXRoTGlrZU5ldHdvcmsgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBFUkMxMTU1VHJhbnNmZXJCdWlsZGVyLCBFUkM3MjFUcmFuc2ZlckJ1aWxkZXIsIFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvZXRoJztcbmltcG9ydCB7IGV0aGVycyB9IGZyb20gJ2V0aGVycyc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBFUkMxMTU1QUJJIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2VyYzExNTVBYmknO1xuaW1wb3J0IHsgd2FsbGV0U2ltcGxlQUJJIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL3dhbGxldFNpbXBsZUFiaSc7XG5pbXBvcnQgeyBlcmM3MjFBQkkgfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvZXJjNzIxQWJpJztcbmltcG9ydCB7XG4gIGVyYzExNTVCYXRjaFRyYW5zZmVyRW5jb2RpbmcsXG4gIGVyYzExNTVTYWZlVHJhbnNmZXJFbmNvZGluZyxcbiAgZXJjNzIxRW5jb2RpbmcsXG59IGZyb20gJy4uLy4uL3Jlc291cmNlcy9uZnRFbmNvZGluZ3MnO1xuaW1wb3J0IHsgZ2V0QnVpbGRlciB9IGZyb20gJy4uL2dldEJ1aWxkZXInO1xuXG5kZXNjcmliZSgnRXRoIHRyYW5zYWN0aW9uIGJ1aWxkZXIgc2VuZE5GVCcsICgpID0+IHtcbiAgLy8gZHVtbXkgYWRkcmVzc2VzXG4gIGNvbnN0IG93bmVyID0gJzB4MTk2NDUwMzJjN2YxNTMzMzk1ZDQ0YTYyOTQ2MmU3NTEwODRkM2U0ZCc7XG4gIGNvbnN0IHJlY2lwaWVudCA9ICcweDE5NjQ1MDMyYzdmMTUzMzM5NWQ0NGE2Mjk0NjJlNzUxMDg0ZDNlNGMnO1xuICBjb25zdCBjb250cmFjdEFkZHJlc3MgPSAnMHg4Zjk3N2U5MTJlZjUwMDU0OGEwYzNiZTZkZGRlOTg5OWYxMTk5YjgxJztcblxuICAvLyBlbnMgZXJjNzIxXG4gIGNvbnN0IGVyYzcyMUNvbnRyYWN0QWRkcmVzcyA9ICcweDU3ZjE4ODdhOGJmMTliMTRmYzBkZjZmZDliMmFjYzlhZjE0N2VhODUnO1xuICAvLyBvcGVuc2VhIGVyYzExNTVcbiAgY29uc3QgZXJjMTE1NUNvbnRyYWN0QWRkcmVzcyA9ICcweDQ5NWY5NDcyNzY3NDljZTY0NmY2OGFjOGMyNDg0MjAwNDVjYjdiNWUnO1xuICBjb25zdCBjb2luID0gY29pbnMuZ2V0KCdodGV0aCcpIGFzIHVua25vd24gYXMgRXRoTGlrZU5ldHdvcms7XG4gIGxldCBrZXk7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAga2V5ID0gdGVzdERhdGEuS0VZUEFJUl9QUlYuZ2V0S2V5cygpLnBydiBhcyBzdHJpbmc7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgc2lnbiBFUkM3MjEgcHJvcGVybHknLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZ2V0QnVpbGRlcignaHRldGgnKSBhcyBUcmFuc2FjdGlvbkJ1aWxkZXI7XG4gICAgdHhCdWlsZGVyLmZlZSh7XG4gICAgICBmZWU6ICcxMDAwMDAwMDAwJyxcbiAgICAgIGdhc0xpbWl0OiAnMTIxMDAwMDAnLFxuICAgIH0pO1xuICAgIHR4QnVpbGRlci5jb3VudGVyKDIpO1xuICAgIHR4QnVpbGRlci5jb250cmFjdChjb250cmFjdEFkZHJlc3MpO1xuICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5TZW5kRVJDNzIxKTtcblxuICAgIC8vIER1bW15IGFkZHJlc3Nlc1xuICAgIGNvbnN0IGV4cGlyZVRpbWUgPSAxNTkwMDY2NzI4O1xuICAgIGNvbnN0IHNlcXVlbmNlSWQgPSA1O1xuICAgIGNvbnN0IHRva2VuSWQgPSAnMSc7XG5cbiAgICBjb25zdCBlcmM3MjFUcmFuc2ZlciA9IHR4QnVpbGRlci50cmFuc2ZlcigpIGFzIEVSQzcyMVRyYW5zZmVyQnVpbGRlcjtcbiAgICBlcmM3MjFUcmFuc2ZlclxuICAgICAgLmZyb20ob3duZXIpXG4gICAgICAudG8ocmVjaXBpZW50KVxuICAgICAgLmV4cGlyYXRpb25UaW1lKGV4cGlyZVRpbWUpXG4gICAgICAudG9rZW5Db250cmFjdEFkZHJlc3MoZXJjNzIxQ29udHJhY3RBZGRyZXNzKVxuICAgICAgLmNvbnRyYWN0U2VxdWVuY2VJZChzZXF1ZW5jZUlkKVxuICAgICAgLnRva2VuSWQodG9rZW5JZClcbiAgICAgIC5rZXkoa2V5KTtcblxuICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5QUklWQVRFX0tFWSB9KTtcbiAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBzaWduIGFuZCBidWlsZCBFUkM3MjEgdHJhbnNmZXIgd2l0aCBCdWlsZGVyIHBhdHRlcm4nLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZ2V0QnVpbGRlcignaHRldGgnKSBhcyBUcmFuc2FjdGlvbkJ1aWxkZXI7XG4gICAgdHhCdWlsZGVyLmZlZSh7XG4gICAgICBmZWU6ICcxMDAwMDAwMDAwJyxcbiAgICAgIGdhc0xpbWl0OiAnMTIxMDAwMDAnLFxuICAgIH0pO1xuICAgIHR4QnVpbGRlci5jb3VudGVyKDIpO1xuICAgIHR4QnVpbGRlci5jb250cmFjdChjb250cmFjdEFkZHJlc3MpO1xuICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5TZW5kRVJDNzIxKTtcblxuICAgIC8vIER1bW15IGFkZHJlc3Nlc1xuICAgIGNvbnN0IGV4cGlyZVRpbWUgPSAxNTkwMDY2NzI4O1xuICAgIGNvbnN0IHNlcXVlbmNlSWQgPSA1O1xuICAgIGNvbnN0IHRva2VuSWQgPSAnMSc7XG5cbiAgICBjb25zdCBlcmM3MjFUcmFuc2ZlciA9IHR4QnVpbGRlci50cmFuc2ZlcigpIGFzIEVSQzcyMVRyYW5zZmVyQnVpbGRlcjtcbiAgICBlcmM3MjFUcmFuc2ZlclxuICAgICAgLmZyb20ob3duZXIpXG4gICAgICAudG8ocmVjaXBpZW50KVxuICAgICAgLmV4cGlyYXRpb25UaW1lKGV4cGlyZVRpbWUpXG4gICAgICAudG9rZW5Db250cmFjdEFkZHJlc3MoZXJjNzIxQ29udHJhY3RBZGRyZXNzKVxuICAgICAgLmNvbnRyYWN0U2VxdWVuY2VJZChzZXF1ZW5jZUlkKVxuICAgICAgLnRva2VuSWQodG9rZW5JZClcbiAgICAgIC5rZXkoa2V5KTtcblxuICAgIGNvbnN0IHNlbmRNdWx0aXNpZ0NhbGxEYXRhID0gZXJjNzIxVHJhbnNmZXIuc2lnbkFuZEJ1aWxkKGAke2NvaW4uY2hhaW5JZH1gKTtcbiAgICBjb25zdCBkZWNvZGVkU2VuZE11bHRpc2lnQ2FsbERhdGEgPSBkZWNvZGVUcmFuc2FjdGlvbihKU09OLnN0cmluZ2lmeSh3YWxsZXRTaW1wbGVBQkkpLCBzZW5kTXVsdGlzaWdDYWxsRGF0YSk7XG5cbiAgICBjb25zdCBzYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEgPSBkZWNvZGVkU2VuZE11bHRpc2lnQ2FsbERhdGEuYXJnc1syXTtcbiAgICBjb25zdCBkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhID0gZGVjb2RlVHJhbnNhY3Rpb24oSlNPTi5zdHJpbmdpZnkoZXJjNzIxQUJJKSwgc2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhKTtcblxuICAgIHNob3VsZC5lcXVhbChkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhLmFyZ3NbMF0udG9Mb3dlckNhc2UoKSwgb3duZXIudG9Mb3dlckNhc2UoKSk7XG4gICAgc2hvdWxkLmVxdWFsKGRlY29kZWRTYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEuYXJnc1sxXS50b0xvd2VyQ2FzZSgpLCByZWNpcGllbnQudG9Mb3dlckNhc2UoKSk7XG4gICAgc2hvdWxkLmVxdWFsKGRlY29kZWRTYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEuYXJnc1syXSwgdG9rZW5JZCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgc2lnbiBhbmQgYnVpbGQgRVJDNzIxIHRyYW5zZmVyIHdpdGggRGVjb2RlciBwYXR0ZXJuJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGdldEJ1aWxkZXIoJ2h0ZXRoJykgYXMgVHJhbnNhY3Rpb25CdWlsZGVyO1xuICAgIHR4QnVpbGRlci5mZWUoe1xuICAgICAgZmVlOiAnMTAwMDAwMDAwMCcsXG4gICAgICBnYXNMaW1pdDogJzEyMTAwMDAwJyxcbiAgICB9KTtcbiAgICB0eEJ1aWxkZXIuY291bnRlcigyKTtcbiAgICB0eEJ1aWxkZXIuY29udHJhY3QoY29udHJhY3RBZGRyZXNzKTtcbiAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuU2VuZEVSQzcyMSk7XG5cbiAgICBjb25zdCB0b2tlbklkID0gJzEnO1xuXG4gICAgY29uc3QgZXJjNzIxVHJhbnNmZXIgPSB0eEJ1aWxkZXIudHJhbnNmZXIoZXJjNzIxRW5jb2RpbmcpIGFzIEVSQzcyMVRyYW5zZmVyQnVpbGRlcjtcbiAgICBjb25zdCBzZW5kTXVsdGlzaWdDYWxsRGF0YSA9IGVyYzcyMVRyYW5zZmVyLnNpZ25BbmRCdWlsZChgJHtjb2luLmNoYWluSWR9YCk7XG4gICAgY29uc3QgZGVjb2RlZFNlbmRNdWx0aXNpZ0NhbGxEYXRhID0gZGVjb2RlVHJhbnNhY3Rpb24oSlNPTi5zdHJpbmdpZnkod2FsbGV0U2ltcGxlQUJJKSwgc2VuZE11bHRpc2lnQ2FsbERhdGEpO1xuXG4gICAgY29uc3Qgc2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhID0gZGVjb2RlZFNlbmRNdWx0aXNpZ0NhbGxEYXRhLmFyZ3NbMl07XG4gICAgY29uc3QgZGVjb2RlZFNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YSA9IGRlY29kZVRyYW5zYWN0aW9uKEpTT04uc3RyaW5naWZ5KGVyYzcyMUFCSSksIHNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YSk7XG5cbiAgICBzaG91bGQuZXF1YWwoZGVjb2RlZFNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YS5hcmdzWzBdLnRvTG93ZXJDYXNlKCksIG93bmVyLnRvTG93ZXJDYXNlKCkpO1xuICAgIHNob3VsZC5lcXVhbChkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhLmFyZ3NbMV0udG9Mb3dlckNhc2UoKSwgcmVjaXBpZW50LnRvTG93ZXJDYXNlKCkpO1xuICAgIHNob3VsZC5lcXVhbChkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhLmFyZ3NbMl0sIHRva2VuSWQpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHNpZ24gYW5kIGJ1aWxkIEVSQzExNTUgc2luZ2xlIHRyYW5zZmVyIHdpdGggQnVpbGRlciBwYXR0ZXJuJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGdldEJ1aWxkZXIoJ2h0ZXRoJykgYXMgVHJhbnNhY3Rpb25CdWlsZGVyO1xuICAgIHR4QnVpbGRlci5mZWUoe1xuICAgICAgZmVlOiAnMTAwMDAwMDAwMCcsXG4gICAgICBnYXNMaW1pdDogJzEyMTAwMDAwJyxcbiAgICB9KTtcbiAgICB0eEJ1aWxkZXIuY291bnRlcigyKTtcbiAgICB0eEJ1aWxkZXIuY29udHJhY3QoY29udHJhY3RBZGRyZXNzKTtcbiAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuU2VuZEVSQzExNTUpO1xuXG4gICAgY29uc3QgZXhwaXJlVGltZSA9IDE1OTAwNjY3Mjg7XG4gICAgY29uc3Qgc2VxdWVuY2VJZCA9IDU7XG4gICAgY29uc3QgdG9rZW5JZCA9IDE7XG4gICAgY29uc3QgdmFsdWUgPSAxMDtcblxuICAgIGNvbnN0IGVyYzExNTVUcmFuc2ZlciA9IHR4QnVpbGRlci50cmFuc2ZlcigpIGFzIEVSQzExNTVUcmFuc2ZlckJ1aWxkZXI7XG4gICAgZXJjMTE1NVRyYW5zZmVyXG4gICAgICAuZnJvbShvd25lcilcbiAgICAgIC50byhyZWNpcGllbnQpXG4gICAgICAuZXhwaXJhdGlvblRpbWUoZXhwaXJlVGltZSlcbiAgICAgIC50b2tlbkNvbnRyYWN0QWRkcmVzcyhlcmMxMTU1Q29udHJhY3RBZGRyZXNzKVxuICAgICAgLmNvbnRyYWN0U2VxdWVuY2VJZChzZXF1ZW5jZUlkKVxuICAgICAgLmVudHJ5KHRva2VuSWQsIHZhbHVlKVxuICAgICAgLmtleShrZXkpO1xuXG4gICAgY29uc3Qgc2VuZE11bHRpc2lnQ2FsbERhdGEgPSBlcmMxMTU1VHJhbnNmZXIuc2lnbkFuZEJ1aWxkKGAke2NvaW4uY2hhaW5JZH1gKTtcbiAgICBjb25zdCBkZWNvZGVkU2VuZE11bHRpc2lnQ2FsbERhdGEgPSBkZWNvZGVUcmFuc2FjdGlvbihKU09OLnN0cmluZ2lmeSh3YWxsZXRTaW1wbGVBQkkpLCBzZW5kTXVsdGlzaWdDYWxsRGF0YSk7XG5cbiAgICBjb25zdCBzYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEgPSBkZWNvZGVkU2VuZE11bHRpc2lnQ2FsbERhdGEuYXJnc1syXTtcbiAgICBjb25zdCBkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhID0gZGVjb2RlVHJhbnNhY3Rpb24oSlNPTi5zdHJpbmdpZnkoRVJDMTE1NUFCSSksIHNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YSk7XG5cbiAgICBzaG91bGQuZXF1YWwoZGVjb2RlZFNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YS5hcmdzWzBdLnRvTG93ZXJDYXNlKCksIG93bmVyLnRvTG93ZXJDYXNlKCkpO1xuICAgIHNob3VsZC5lcXVhbChkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhLmFyZ3NbMV0udG9Mb3dlckNhc2UoKSwgcmVjaXBpZW50LnRvTG93ZXJDYXNlKCkpO1xuICAgIHNob3VsZC5lcXVhbChkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhLmFyZ3NbMl0sIHRva2VuSWQpO1xuICAgIHNob3VsZC5lcXVhbChkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhLmFyZ3NbM10sIHZhbHVlKTtcblxuICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5QUklWQVRFX0tFWSB9KTtcbiAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBzaWduIGFuZCBidWlsZCBFUkMxMTU1IHNpbmdsZSB0cmFuc2ZlciB3aXRoIERlY29kZXIgcGF0dGVybicsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBnZXRCdWlsZGVyKCdodGV0aCcpIGFzIFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgICB0eEJ1aWxkZXIuZmVlKHtcbiAgICAgIGZlZTogJzEwMDAwMDAwMDAnLFxuICAgICAgZ2FzTGltaXQ6ICcxMjEwMDAwMCcsXG4gICAgfSk7XG4gICAgdHhCdWlsZGVyLmNvdW50ZXIoMik7XG4gICAgdHhCdWlsZGVyLmNvbnRyYWN0KGNvbnRyYWN0QWRkcmVzcyk7XG4gICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLlNlbmRFUkMxMTU1KTtcblxuICAgIGNvbnN0IHRva2VuSWQgPSAnMSc7XG4gICAgY29uc3QgdmFsdWUgPSAnMTAnO1xuXG4gICAgY29uc3QgZXJjMTE1NVRyYW5zZmVyID0gdHhCdWlsZGVyLnRyYW5zZmVyKGVyYzExNTVTYWZlVHJhbnNmZXJFbmNvZGluZykgYXMgRVJDMTE1NVRyYW5zZmVyQnVpbGRlcjtcbiAgICBjb25zdCBzZW5kTXVsdGlzaWdDYWxsRGF0YSA9IGVyYzExNTVUcmFuc2Zlci5zaWduQW5kQnVpbGQoYCR7Y29pbi5jaGFpbklkfWApO1xuXG4gICAgY29uc3QgZGVjb2RlZFNlbmRNdWx0aXNpZ0NhbGxEYXRhID0gZGVjb2RlVHJhbnNhY3Rpb24oSlNPTi5zdHJpbmdpZnkod2FsbGV0U2ltcGxlQUJJKSwgc2VuZE11bHRpc2lnQ2FsbERhdGEpO1xuXG4gICAgY29uc3Qgc2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhID0gZGVjb2RlZFNlbmRNdWx0aXNpZ0NhbGxEYXRhLmFyZ3NbMl07XG4gICAgY29uc3QgZGVjb2RlZFNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YSA9IGRlY29kZVRyYW5zYWN0aW9uKEpTT04uc3RyaW5naWZ5KEVSQzExNTVBQkkpLCBzYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEpO1xuXG4gICAgc2hvdWxkLmVxdWFsKGRlY29kZWRTYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEuYXJnc1swXS50b0xvd2VyQ2FzZSgpLCBvd25lci50b0xvd2VyQ2FzZSgpKTtcbiAgICBzaG91bGQuZXF1YWwoZGVjb2RlZFNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YS5hcmdzWzFdLnRvTG93ZXJDYXNlKCksIHJlY2lwaWVudC50b0xvd2VyQ2FzZSgpKTtcbiAgICBzaG91bGQuZXF1YWwoZGVjb2RlZFNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YS5hcmdzWzJdLCB0b2tlbklkKTtcbiAgICBzaG91bGQuZXF1YWwoZGVjb2RlZFNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YS5hcmdzWzNdLCB2YWx1ZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgc2lnbiBhbmQgYnVpbGQgRVJDMTE1NSBiYXRjaCB0cmFuc2ZlciB3aXRoIEJ1aWxkZXIgcGF0dGVybicsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBnZXRCdWlsZGVyKCdodGV0aCcpIGFzIFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgICB0eEJ1aWxkZXIuZmVlKHtcbiAgICAgIGZlZTogJzEwMDAwMDAwMDAnLFxuICAgICAgZ2FzTGltaXQ6ICcxMjEwMDAwMCcsXG4gICAgfSk7XG4gICAgdHhCdWlsZGVyLmNvdW50ZXIoMik7XG4gICAgdHhCdWlsZGVyLmNvbnRyYWN0KGNvbnRyYWN0QWRkcmVzcyk7XG4gICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLlNlbmRFUkMxMTU1KTtcblxuICAgIGNvbnN0IGV4cGlyZVRpbWUgPSAxNTkwMDY2NzI4O1xuICAgIGNvbnN0IHNlcXVlbmNlSWQgPSA1O1xuICAgIGNvbnN0IHRva2VuSWRzID0gWzEsIDIsIDNdO1xuICAgIGNvbnN0IHZhbHVlcyA9IFsxMCwgMTAsIDEwXTtcblxuICAgIGNvbnN0IGVyYzExNTVUcmFuc2ZlciA9IHR4QnVpbGRlci50cmFuc2ZlcigpIGFzIEVSQzExNTVUcmFuc2ZlckJ1aWxkZXI7XG4gICAgZXJjMTE1NVRyYW5zZmVyXG4gICAgICAuZnJvbShvd25lcilcbiAgICAgIC50byhyZWNpcGllbnQpXG4gICAgICAuZXhwaXJhdGlvblRpbWUoZXhwaXJlVGltZSlcbiAgICAgIC50b2tlbkNvbnRyYWN0QWRkcmVzcyhlcmMxMTU1Q29udHJhY3RBZGRyZXNzKVxuICAgICAgLmNvbnRyYWN0U2VxdWVuY2VJZChzZXF1ZW5jZUlkKVxuICAgICAgLmVudHJ5KHRva2VuSWRzWzBdLCB2YWx1ZXNbMF0pXG4gICAgICAuZW50cnkodG9rZW5JZHNbMV0sIHZhbHVlc1sxXSlcbiAgICAgIC5lbnRyeSh0b2tlbklkc1syXSwgdmFsdWVzWzJdKVxuICAgICAgLmtleShrZXkpO1xuXG4gICAgY29uc3Qgc2VuZE11bHRpc2lnQ2FsbERhdGEgPSBlcmMxMTU1VHJhbnNmZXIuc2lnbkFuZEJ1aWxkKGAke2NvaW4uY2hhaW5JZH1gKTtcbiAgICBjb25zdCBkZWNvZGVkU2VuZE11bHRpc2lnQ2FsbERhdGEgPSBkZWNvZGVUcmFuc2FjdGlvbihKU09OLnN0cmluZ2lmeSh3YWxsZXRTaW1wbGVBQkkpLCBzZW5kTXVsdGlzaWdDYWxsRGF0YSk7XG5cbiAgICBjb25zdCBzYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEgPSBkZWNvZGVkU2VuZE11bHRpc2lnQ2FsbERhdGEuYXJnc1syXTtcbiAgICBjb25zdCBkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhID0gZGVjb2RlVHJhbnNhY3Rpb24oSlNPTi5zdHJpbmdpZnkoRVJDMTE1NUFCSSksIHNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YSk7XG5cbiAgICBzaG91bGQuZXF1YWwoZGVjb2RlZFNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YS5hcmdzWzBdLnRvTG93ZXJDYXNlKCksIG93bmVyLnRvTG93ZXJDYXNlKCkpO1xuICAgIHNob3VsZC5lcXVhbChkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhLmFyZ3NbMV0udG9Mb3dlckNhc2UoKSwgcmVjaXBpZW50LnRvTG93ZXJDYXNlKCkpO1xuICAgIHNob3VsZC5kZWVwRXF1YWwoXG4gICAgICBkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhLmFyZ3NbMl0ubWFwKCh4KSA9PiB4LnRvTnVtYmVyKCkpLFxuICAgICAgdG9rZW5JZHNcbiAgICApO1xuICAgIHNob3VsZC5kZWVwRXF1YWwoXG4gICAgICBkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhLmFyZ3NbM10ubWFwKCh4KSA9PiB4LnRvTnVtYmVyKCkpLFxuICAgICAgdmFsdWVzXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBzaWduIGFuZCBidWlsZCBFUkMxMTU1IGJhdGNoIHRyYW5zZmVyIHdpdGggRGVjb2RlciBwYXR0ZXJuJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGdldEJ1aWxkZXIoJ2h0ZXRoJykgYXMgVHJhbnNhY3Rpb25CdWlsZGVyO1xuICAgIHR4QnVpbGRlci5mZWUoe1xuICAgICAgZmVlOiAnMTAwMDAwMDAwMCcsXG4gICAgICBnYXNMaW1pdDogJzEyMTAwMDAwJyxcbiAgICB9KTtcbiAgICB0eEJ1aWxkZXIuY291bnRlcigyKTtcbiAgICB0eEJ1aWxkZXIuY29udHJhY3QoY29udHJhY3RBZGRyZXNzKTtcbiAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuU2VuZEVSQzExNTUpO1xuXG4gICAgY29uc3QgdG9rZW5JZHMgPSBbMSwgMiwgM107XG4gICAgY29uc3QgdmFsdWVzID0gWzEwLCAxMCwgMTBdO1xuXG4gICAgY29uc3QgZXJjMTE1NVRyYW5zZmVyID0gdHhCdWlsZGVyLnRyYW5zZmVyKGVyYzExNTVCYXRjaFRyYW5zZmVyRW5jb2RpbmcpIGFzIEVSQzExNTVUcmFuc2ZlckJ1aWxkZXI7XG5cbiAgICBjb25zdCBzZW5kTXVsdGlzaWdDYWxsRGF0YSA9IGVyYzExNTVUcmFuc2Zlci5zaWduQW5kQnVpbGQoYCR7Y29pbi5jaGFpbklkfWApO1xuICAgIGNvbnN0IGRlY29kZWRTZW5kTXVsdGlzaWdDYWxsRGF0YSA9IGRlY29kZVRyYW5zYWN0aW9uKEpTT04uc3RyaW5naWZ5KHdhbGxldFNpbXBsZUFCSSksIHNlbmRNdWx0aXNpZ0NhbGxEYXRhKTtcblxuICAgIGNvbnN0IHNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YSA9IGRlY29kZWRTZW5kTXVsdGlzaWdDYWxsRGF0YS5hcmdzWzJdO1xuICAgIGNvbnN0IGRlY29kZWRTYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEgPSBkZWNvZGVUcmFuc2FjdGlvbihKU09OLnN0cmluZ2lmeShFUkMxMTU1QUJJKSwgc2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhKTtcblxuICAgIHNob3VsZC5lcXVhbChkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhLmFyZ3NbMF0udG9Mb3dlckNhc2UoKSwgb3duZXIudG9Mb3dlckNhc2UoKSk7XG4gICAgc2hvdWxkLmVxdWFsKGRlY29kZWRTYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEuYXJnc1sxXS50b0xvd2VyQ2FzZSgpLCByZWNpcGllbnQudG9Mb3dlckNhc2UoKSk7XG4gICAgc2hvdWxkLmRlZXBFcXVhbChcbiAgICAgIGRlY29kZWRTYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEuYXJnc1syXS5tYXAoKHgpID0+IHgudG9OdW1iZXIoKSksXG4gICAgICB0b2tlbklkc1xuICAgICk7XG4gICAgc2hvdWxkLmRlZXBFcXVhbChcbiAgICAgIGRlY29kZWRTYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEuYXJnc1szXS5tYXAoKHgpID0+IHgudG9OdW1iZXIoKSksXG4gICAgICB2YWx1ZXNcbiAgICApO1xuICB9KTtcbn0pO1xuXG5mdW5jdGlvbiBkZWNvZGVUcmFuc2FjdGlvbihhYmk6IHN0cmluZywgY2FsbGRhdGE6IHN0cmluZykge1xuICBjb25zdCBjb250cmFjdEludGVyZmFjZSA9IG5ldyBldGhlcnMudXRpbHMuSW50ZXJmYWNlKGFiaSk7XG4gIHJldHVybiBjb250cmFjdEludGVyZmFjZS5wYXJzZVRyYW5zYWN0aW9uKHsgZGF0YTogY2FsbGRhdGEgfSk7XG59XG4iXX0=
|
|
295
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZE5GVC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbkJ1aWxkZXIvc2VuZE5GVC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhDQUFrRDtBQUNsRCw0Q0FBMEU7QUFDMUUsc0NBQWlHO0FBQ2pHLDhEQUFnRDtBQUNoRCxtQ0FBZ0M7QUFDaEMsb0RBQTRCO0FBQzVCLDJEQUF3RDtBQUN4RCxxRUFBa0U7QUFDbEUseURBQXNEO0FBQ3RELCtEQUlzQztBQUN0Qyw4Q0FBMkM7QUFFM0MsUUFBUSxDQUFDLGlDQUFpQyxFQUFFLEdBQUcsRUFBRTtJQUMvQyxrQkFBa0I7SUFDbEIsTUFBTSxLQUFLLEdBQUcsNENBQTRDLENBQUM7SUFDM0QsTUFBTSxTQUFTLEdBQUcsNENBQTRDLENBQUM7SUFDL0QsTUFBTSxlQUFlLEdBQUcsNENBQTRDLENBQUM7SUFFckUsYUFBYTtJQUNiLE1BQU0scUJBQXFCLEdBQUcsNENBQTRDLENBQUM7SUFDM0Usa0JBQWtCO0lBQ2xCLE1BQU0sc0JBQXNCLEdBQUcsNENBQTRDLENBQUM7SUFDNUUsTUFBTSxJQUFJLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQThCLENBQUM7SUFDN0QsSUFBSSxHQUFHLENBQUM7SUFFUixVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsR0FBRyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBYSxDQUFDO0lBQ3JELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDZCQUE2QixFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzNDLE1BQU0sU0FBUyxHQUFHLElBQUEsdUJBQVUsRUFBQyxPQUFPLENBQXVCLENBQUM7UUFDNUQsU0FBUyxDQUFDLEdBQUcsQ0FBQztZQUNaLEdBQUcsRUFBRSxZQUFZO1lBQ2pCLFFBQVEsRUFB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O1FBQ3JFLGdCQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDcEQsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsa0VBQWtFLEVBQUUsR0FBRyxFQUFFO1FBQzFFLE1BQU0sT0FBTyxHQUFHLElBQUksMkJBQXFCLEVBQUUsQ0FBQztRQUM1QyxPQUFPLENBQUMsb0JBQW9CLENBQUMscUJBQXFCLENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUUvRixNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3JELE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRXpDLHVGQUF1RjtRQUN2Riw2Q0FBNkM7UUFDN0MsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXBFLDBDQUEwQztRQUMxQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2xELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCxTQUFTLGlCQUFpQixDQUFDLEdBQVcsRUFBRSxRQUFnQjtJQUN0RCxNQUFNLGlCQUFpQixHQUFHLElBQUksZUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUQsT0FBTyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQ2hFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgY29pbnMsIEV0aGVyZXVtTmV0d29yayBhcyBFdGhMaWtlTmV0d29yayB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IEVSQzExNTVUcmFuc2ZlckJ1aWxkZXIsIEVSQzcyMVRyYW5zZmVyQnVpbGRlciwgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi4vLi4vLi4vc3JjJztcbmltcG9ydCAqIGFzIHRlc3REYXRhIGZyb20gJy4uLy4uL3Jlc291cmNlcy9ldGgnO1xuaW1wb3J0IHsgZXRoZXJzIH0gZnJvbSAnZXRoZXJzJztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IEVSQzExNTVBQkkgfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvZXJjMTE1NUFiaSc7XG5pbXBvcnQgeyB3YWxsZXRTaW1wbGVBQkkgfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvd2FsbGV0U2ltcGxlQWJpJztcbmltcG9ydCB7IGVyYzcyMUFCSSB9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9lcmM3MjFBYmknO1xuaW1wb3J0IHtcbiAgZXJjMTE1NUJhdGNoVHJhbnNmZXJFbmNvZGluZyxcbiAgZXJjMTE1NVNhZmVUcmFuc2ZlckVuY29kaW5nLFxuICBlcmM3MjFFbmNvZGluZyxcbn0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL25mdEVuY29kaW5ncyc7XG5pbXBvcnQgeyBnZXRCdWlsZGVyIH0gZnJvbSAnLi4vZ2V0QnVpbGRlcic7XG5cbmRlc2NyaWJlKCdFdGggdHJhbnNhY3Rpb24gYnVpbGRlciBzZW5kTkZUJywgKCkgPT4ge1xuICAvLyBkdW1teSBhZGRyZXNzZXNcbiAgY29uc3Qgb3duZXIgPSAnMHgxOTY0NTAzMmM3ZjE1MzMzOTVkNDRhNjI5NDYyZTc1MTA4NGQzZTRkJztcbiAgY29uc3QgcmVjaXBpZW50ID0gJzB4MTk2NDUwMzJjN2YxNTMzMzk1ZDQ0YTYyOTQ2MmU3NTEwODRkM2U0Yyc7XG4gIGNvbnN0IGNvbnRyYWN0QWRkcmVzcyA9ICcweDhmOTc3ZTkxMmVmNTAwNTQ4YTBjM2JlNmRkZGU5ODk5ZjExOTliODEnO1xuXG4gIC8vIGVucyBlcmM3MjFcbiAgY29uc3QgZXJjNzIxQ29udHJhY3RBZGRyZXNzID0gJzB4NTdmMTg4N2E4YmYxOWIxNGZjMGRmNmZkOWIyYWNjOWFmMTQ3ZWE4NSc7XG4gIC8vIG9wZW5zZWEgZXJjMTE1NVxuICBjb25zdCBlcmMxMTU1Q29udHJhY3RBZGRyZXNzID0gJzB4NDk1Zjk0NzI3Njc0OWNlNjQ2ZjY4YWM4YzI0ODQyMDA0NWNiN2I1ZSc7XG4gIGNvbnN0IGNvaW4gPSBjb2lucy5nZXQoJ2h0ZXRoJykgYXMgdW5rbm93biBhcyBFdGhMaWtlTmV0d29yaztcbiAgbGV0IGtleTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBrZXkgPSB0ZXN0RGF0YS5LRVlQQUlSX1BSVi5nZXRLZXlzKCkucHJ2IGFzIHN0cmluZztcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBzaWduIEVSQzcyMSBwcm9wZXJseScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBnZXRCdWlsZGVyKCdodGV0aCcpIGFzIFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgICB0eEJ1aWxkZXIuZmVlKHtcbiAgICAgIGZlZTogJzEwMDAwMDAwMDAnLFxuICAgICAgZ2FzTGltaXQ6ICcxMjEwMDAwMCcsXG4gICAgfSk7XG4gICAgdHhCdWlsZGVyLmNvdW50ZXIoMik7XG4gICAgdHhCdWlsZGVyLmNvbnRyYWN0KGNvbnRyYWN0QWRkcmVzcyk7XG4gICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLlNlbmRFUkM3MjEpO1xuXG4gICAgLy8gRHVtbXkgYWRkcmVzc2VzXG4gICAgY29uc3QgZXhwaXJlVGltZSA9IDE1OTAwNjY3Mjg7XG4gICAgY29uc3Qgc2VxdWVuY2VJZCA9IDU7XG4gICAgY29uc3QgdG9rZW5JZCA9ICcxJztcblxuICAgIGNvbnN0IGVyYzcyMVRyYW5zZmVyID0gdHhCdWlsZGVyLnRyYW5zZmVyKCkgYXMgRVJDNzIxVHJhbnNmZXJCdWlsZGVyO1xuICAgIGVyYzcyMVRyYW5zZmVyXG4gICAgICAuZnJvbShvd25lcilcbiAgICAgIC50byhyZWNpcGllbnQpXG4gICAgICAuZXhwaXJhdGlvblRpbWUoZXhwaXJlVGltZSlcbiAgICAgIC50b2tlbkNvbnRyYWN0QWRkcmVzcyhlcmM3MjFDb250cmFjdEFkZHJlc3MpXG4gICAgICAuY29udHJhY3RTZXF1ZW5jZUlkKHNlcXVlbmNlSWQpXG4gICAgICAudG9rZW5JZCh0b2tlbklkKVxuICAgICAgLmtleShrZXkpO1xuXG4gICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLlBSSVZBVEVfS0VZIH0pO1xuICAgIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHNpZ24gYW5kIGJ1aWxkIEVSQzcyMSB0cmFuc2ZlciB3aXRoIEJ1aWxkZXIgcGF0dGVybicsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBnZXRCdWlsZGVyKCdodGV0aCcpIGFzIFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgICB0eEJ1aWxkZXIuZmVlKHtcbiAgICAgIGZlZTogJzEwMDAwMDAwMDAnLFxuICAgICAgZ2FzTGltaXQ6ICcxMjEwMDAwMCcsXG4gICAgfSk7XG4gICAgdHhCdWlsZGVyLmNvdW50ZXIoMik7XG4gICAgdHhCdWlsZGVyLmNvbnRyYWN0KGNvbnRyYWN0QWRkcmVzcyk7XG4gICAgdHhCdWlsZGVyLnR5cGUoVHJhbnNhY3Rpb25UeXBlLlNlbmRFUkM3MjEpO1xuXG4gICAgLy8gRHVtbXkgYWRkcmVzc2VzXG4gICAgY29uc3QgZXhwaXJlVGltZSA9IDE1OTAwNjY3Mjg7XG4gICAgY29uc3Qgc2VxdWVuY2VJZCA9IDU7XG4gICAgY29uc3QgdG9rZW5JZCA9ICcxJztcblxuICAgIGNvbnN0IGVyYzcyMVRyYW5zZmVyID0gdHhCdWlsZGVyLnRyYW5zZmVyKCkgYXMgRVJDNzIxVHJhbnNmZXJCdWlsZGVyO1xuICAgIGVyYzcyMVRyYW5zZmVyXG4gICAgICAuZnJvbShvd25lcilcbiAgICAgIC50byhyZWNpcGllbnQpXG4gICAgICAuZXhwaXJhdGlvblRpbWUoZXhwaXJlVGltZSlcbiAgICAgIC50b2tlbkNvbnRyYWN0QWRkcmVzcyhlcmM3MjFDb250cmFjdEFkZHJlc3MpXG4gICAgICAuY29udHJhY3RTZXF1ZW5jZUlkKHNlcXVlbmNlSWQpXG4gICAgICAudG9rZW5JZCh0b2tlbklkKVxuICAgICAgLmtleShrZXkpO1xuXG4gICAgY29uc3Qgc2VuZE11bHRpc2lnQ2FsbERhdGEgPSBlcmM3MjFUcmFuc2Zlci5zaWduQW5kQnVpbGQoYCR7Y29pbi5jaGFpbklkfWApO1xuICAgIGNvbnN0IGRlY29kZWRTZW5kTXVsdGlzaWdDYWxsRGF0YSA9IGRlY29kZVRyYW5zYWN0aW9uKEpTT04uc3RyaW5naWZ5KHdhbGxldFNpbXBsZUFCSSksIHNlbmRNdWx0aXNpZ0NhbGxEYXRhKTtcblxuICAgIGNvbnN0IHNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YSA9IGRlY29kZWRTZW5kTXVsdGlzaWdDYWxsRGF0YS5hcmdzWzJdO1xuICAgIGNvbnN0IGRlY29kZWRTYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEgPSBkZWNvZGVUcmFuc2FjdGlvbihKU09OLnN0cmluZ2lmeShlcmM3MjFBQkkpLCBzYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEpO1xuXG4gICAgc2hvdWxkLmVxdWFsKGRlY29kZWRTYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEuYXJnc1swXS50b0xvd2VyQ2FzZSgpLCBvd25lci50b0xvd2VyQ2FzZSgpKTtcbiAgICBzaG91bGQuZXF1YWwoZGVjb2RlZFNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YS5hcmdzWzFdLnRvTG93ZXJDYXNlKCksIHJlY2lwaWVudC50b0xvd2VyQ2FzZSgpKTtcbiAgICBzaG91bGQuZXF1YWwoZGVjb2RlZFNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YS5hcmdzWzJdLCB0b2tlbklkKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBzaWduIGFuZCBidWlsZCBFUkM3MjEgdHJhbnNmZXIgd2l0aCBEZWNvZGVyIHBhdHRlcm4nLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZ2V0QnVpbGRlcignaHRldGgnKSBhcyBUcmFuc2FjdGlvbkJ1aWxkZXI7XG4gICAgdHhCdWlsZGVyLmZlZSh7XG4gICAgICBmZWU6ICcxMDAwMDAwMDAwJyxcbiAgICAgIGdhc0xpbWl0OiAnMTIxMDAwMDAnLFxuICAgIH0pO1xuICAgIHR4QnVpbGRlci5jb3VudGVyKDIpO1xuICAgIHR4QnVpbGRlci5jb250cmFjdChjb250cmFjdEFkZHJlc3MpO1xuICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5TZW5kRVJDNzIxKTtcblxuICAgIGNvbnN0IHRva2VuSWQgPSAnMSc7XG5cbiAgICBjb25zdCBlcmM3MjFUcmFuc2ZlciA9IHR4QnVpbGRlci50cmFuc2ZlcihlcmM3MjFFbmNvZGluZykgYXMgRVJDNzIxVHJhbnNmZXJCdWlsZGVyO1xuICAgIGNvbnN0IHNlbmRNdWx0aXNpZ0NhbGxEYXRhID0gZXJjNzIxVHJhbnNmZXIuc2lnbkFuZEJ1aWxkKGAke2NvaW4uY2hhaW5JZH1gKTtcbiAgICBjb25zdCBkZWNvZGVkU2VuZE11bHRpc2lnQ2FsbERhdGEgPSBkZWNvZGVUcmFuc2FjdGlvbihKU09OLnN0cmluZ2lmeSh3YWxsZXRTaW1wbGVBQkkpLCBzZW5kTXVsdGlzaWdDYWxsRGF0YSk7XG5cbiAgICBjb25zdCBzYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEgPSBkZWNvZGVkU2VuZE11bHRpc2lnQ2FsbERhdGEuYXJnc1syXTtcbiAgICBjb25zdCBkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhID0gZGVjb2RlVHJhbnNhY3Rpb24oSlNPTi5zdHJpbmdpZnkoZXJjNzIxQUJJKSwgc2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhKTtcblxuICAgIHNob3VsZC5lcXVhbChkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhLmFyZ3NbMF0udG9Mb3dlckNhc2UoKSwgb3duZXIudG9Mb3dlckNhc2UoKSk7XG4gICAgc2hvdWxkLmVxdWFsKGRlY29kZWRTYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEuYXJnc1sxXS50b0xvd2VyQ2FzZSgpLCByZWNpcGllbnQudG9Mb3dlckNhc2UoKSk7XG4gICAgc2hvdWxkLmVxdWFsKGRlY29kZWRTYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEuYXJnc1syXSwgdG9rZW5JZCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgc2lnbiBhbmQgYnVpbGQgRVJDMTE1NSBzaW5nbGUgdHJhbnNmZXIgd2l0aCBCdWlsZGVyIHBhdHRlcm4nLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZ2V0QnVpbGRlcignaHRldGgnKSBhcyBUcmFuc2FjdGlvbkJ1aWxkZXI7XG4gICAgdHhCdWlsZGVyLmZlZSh7XG4gICAgICBmZWU6ICcxMDAwMDAwMDAwJyxcbiAgICAgIGdhc0xpbWl0OiAnMTIxMDAwMDAnLFxuICAgIH0pO1xuICAgIHR4QnVpbGRlci5jb3VudGVyKDIpO1xuICAgIHR4QnVpbGRlci5jb250cmFjdChjb250cmFjdEFkZHJlc3MpO1xuICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5TZW5kRVJDMTE1NSk7XG5cbiAgICBjb25zdCBleHBpcmVUaW1lID0gMTU5MDA2NjcyODtcbiAgICBjb25zdCBzZXF1ZW5jZUlkID0gNTtcbiAgICBjb25zdCB0b2tlbklkID0gMTtcbiAgICBjb25zdCB2YWx1ZSA9IDEwO1xuXG4gICAgY29uc3QgZXJjMTE1NVRyYW5zZmVyID0gdHhCdWlsZGVyLnRyYW5zZmVyKCkgYXMgRVJDMTE1NVRyYW5zZmVyQnVpbGRlcjtcbiAgICBlcmMxMTU1VHJhbnNmZXJcbiAgICAgIC5mcm9tKG93bmVyKVxuICAgICAgLnRvKHJlY2lwaWVudClcbiAgICAgIC5leHBpcmF0aW9uVGltZShleHBpcmVUaW1lKVxuICAgICAgLnRva2VuQ29udHJhY3RBZGRyZXNzKGVyYzExNTVDb250cmFjdEFkZHJlc3MpXG4gICAgICAuY29udHJhY3RTZXF1ZW5jZUlkKHNlcXVlbmNlSWQpXG4gICAgICAuZW50cnkodG9rZW5JZCwgdmFsdWUpXG4gICAgICAua2V5KGtleSk7XG5cbiAgICBjb25zdCBzZW5kTXVsdGlzaWdDYWxsRGF0YSA9IGVyYzExNTVUcmFuc2Zlci5zaWduQW5kQnVpbGQoYCR7Y29pbi5jaGFpbklkfWApO1xuICAgIGNvbnN0IGRlY29kZWRTZW5kTXVsdGlzaWdDYWxsRGF0YSA9IGRlY29kZVRyYW5zYWN0aW9uKEpTT04uc3RyaW5naWZ5KHdhbGxldFNpbXBsZUFCSSksIHNlbmRNdWx0aXNpZ0NhbGxEYXRhKTtcblxuICAgIGNvbnN0IHNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YSA9IGRlY29kZWRTZW5kTXVsdGlzaWdDYWxsRGF0YS5hcmdzWzJdO1xuICAgIGNvbnN0IGRlY29kZWRTYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEgPSBkZWNvZGVUcmFuc2FjdGlvbihKU09OLnN0cmluZ2lmeShFUkMxMTU1QUJJKSwgc2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhKTtcblxuICAgIHNob3VsZC5lcXVhbChkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhLmFyZ3NbMF0udG9Mb3dlckNhc2UoKSwgb3duZXIudG9Mb3dlckNhc2UoKSk7XG4gICAgc2hvdWxkLmVxdWFsKGRlY29kZWRTYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEuYXJnc1sxXS50b0xvd2VyQ2FzZSgpLCByZWNpcGllbnQudG9Mb3dlckNhc2UoKSk7XG4gICAgc2hvdWxkLmVxdWFsKGRlY29kZWRTYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEuYXJnc1syXSwgdG9rZW5JZCk7XG4gICAgc2hvdWxkLmVxdWFsKGRlY29kZWRTYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEuYXJnc1szXSwgdmFsdWUpO1xuXG4gICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLlBSSVZBVEVfS0VZIH0pO1xuICAgIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHNpZ24gYW5kIGJ1aWxkIEVSQzExNTUgc2luZ2xlIHRyYW5zZmVyIHdpdGggRGVjb2RlciBwYXR0ZXJuJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGdldEJ1aWxkZXIoJ2h0ZXRoJykgYXMgVHJhbnNhY3Rpb25CdWlsZGVyO1xuICAgIHR4QnVpbGRlci5mZWUoe1xuICAgICAgZmVlOiAnMTAwMDAwMDAwMCcsXG4gICAgICBnYXNMaW1pdDogJzEyMTAwMDAwJyxcbiAgICB9KTtcbiAgICB0eEJ1aWxkZXIuY291bnRlcigyKTtcbiAgICB0eEJ1aWxkZXIuY29udHJhY3QoY29udHJhY3RBZGRyZXNzKTtcbiAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuU2VuZEVSQzExNTUpO1xuXG4gICAgY29uc3QgdG9rZW5JZCA9ICcxJztcbiAgICBjb25zdCB2YWx1ZSA9ICcxMCc7XG5cbiAgICBjb25zdCBlcmMxMTU1VHJhbnNmZXIgPSB0eEJ1aWxkZXIudHJhbnNmZXIoZXJjMTE1NVNhZmVUcmFuc2ZlckVuY29kaW5nKSBhcyBFUkMxMTU1VHJhbnNmZXJCdWlsZGVyO1xuICAgIGNvbnN0IHNlbmRNdWx0aXNpZ0NhbGxEYXRhID0gZXJjMTE1NVRyYW5zZmVyLnNpZ25BbmRCdWlsZChgJHtjb2luLmNoYWluSWR9YCk7XG5cbiAgICBjb25zdCBkZWNvZGVkU2VuZE11bHRpc2lnQ2FsbERhdGEgPSBkZWNvZGVUcmFuc2FjdGlvbihKU09OLnN0cmluZ2lmeSh3YWxsZXRTaW1wbGVBQkkpLCBzZW5kTXVsdGlzaWdDYWxsRGF0YSk7XG5cbiAgICBjb25zdCBzYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEgPSBkZWNvZGVkU2VuZE11bHRpc2lnQ2FsbERhdGEuYXJnc1syXTtcbiAgICBjb25zdCBkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhID0gZGVjb2RlVHJhbnNhY3Rpb24oSlNPTi5zdHJpbmdpZnkoRVJDMTE1NUFCSSksIHNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YSk7XG5cbiAgICBzaG91bGQuZXF1YWwoZGVjb2RlZFNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YS5hcmdzWzBdLnRvTG93ZXJDYXNlKCksIG93bmVyLnRvTG93ZXJDYXNlKCkpO1xuICAgIHNob3VsZC5lcXVhbChkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhLmFyZ3NbMV0udG9Mb3dlckNhc2UoKSwgcmVjaXBpZW50LnRvTG93ZXJDYXNlKCkpO1xuICAgIHNob3VsZC5lcXVhbChkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhLmFyZ3NbMl0sIHRva2VuSWQpO1xuICAgIHNob3VsZC5lcXVhbChkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhLmFyZ3NbM10sIHZhbHVlKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBzaWduIGFuZCBidWlsZCBFUkMxMTU1IGJhdGNoIHRyYW5zZmVyIHdpdGggQnVpbGRlciBwYXR0ZXJuJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGdldEJ1aWxkZXIoJ2h0ZXRoJykgYXMgVHJhbnNhY3Rpb25CdWlsZGVyO1xuICAgIHR4QnVpbGRlci5mZWUoe1xuICAgICAgZmVlOiAnMTAwMDAwMDAwMCcsXG4gICAgICBnYXNMaW1pdDogJzEyMTAwMDAwJyxcbiAgICB9KTtcbiAgICB0eEJ1aWxkZXIuY291bnRlcigyKTtcbiAgICB0eEJ1aWxkZXIuY29udHJhY3QoY29udHJhY3RBZGRyZXNzKTtcbiAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuU2VuZEVSQzExNTUpO1xuXG4gICAgY29uc3QgZXhwaXJlVGltZSA9IDE1OTAwNjY3Mjg7XG4gICAgY29uc3Qgc2VxdWVuY2VJZCA9IDU7XG4gICAgY29uc3QgdG9rZW5JZHMgPSBbMSwgMiwgM107XG4gICAgY29uc3QgdmFsdWVzID0gWzEwLCAxMCwgMTBdO1xuXG4gICAgY29uc3QgZXJjMTE1NVRyYW5zZmVyID0gdHhCdWlsZGVyLnRyYW5zZmVyKCkgYXMgRVJDMTE1NVRyYW5zZmVyQnVpbGRlcjtcbiAgICBlcmMxMTU1VHJhbnNmZXJcbiAgICAgIC5mcm9tKG93bmVyKVxuICAgICAgLnRvKHJlY2lwaWVudClcbiAgICAgIC5leHBpcmF0aW9uVGltZShleHBpcmVUaW1lKVxuICAgICAgLnRva2VuQ29udHJhY3RBZGRyZXNzKGVyYzExNTVDb250cmFjdEFkZHJlc3MpXG4gICAgICAuY29udHJhY3RTZXF1ZW5jZUlkKHNlcXVlbmNlSWQpXG4gICAgICAuZW50cnkodG9rZW5JZHNbMF0sIHZhbHVlc1swXSlcbiAgICAgIC5lbnRyeSh0b2tlbklkc1sxXSwgdmFsdWVzWzFdKVxuICAgICAgLmVudHJ5KHRva2VuSWRzWzJdLCB2YWx1ZXNbMl0pXG4gICAgICAua2V5KGtleSk7XG5cbiAgICBjb25zdCBzZW5kTXVsdGlzaWdDYWxsRGF0YSA9IGVyYzExNTVUcmFuc2Zlci5zaWduQW5kQnVpbGQoYCR7Y29pbi5jaGFpbklkfWApO1xuICAgIGNvbnN0IGRlY29kZWRTZW5kTXVsdGlzaWdDYWxsRGF0YSA9IGRlY29kZVRyYW5zYWN0aW9uKEpTT04uc3RyaW5naWZ5KHdhbGxldFNpbXBsZUFCSSksIHNlbmRNdWx0aXNpZ0NhbGxEYXRhKTtcblxuICAgIGNvbnN0IHNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YSA9IGRlY29kZWRTZW5kTXVsdGlzaWdDYWxsRGF0YS5hcmdzWzJdO1xuICAgIGNvbnN0IGRlY29kZWRTYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEgPSBkZWNvZGVUcmFuc2FjdGlvbihKU09OLnN0cmluZ2lmeShFUkMxMTU1QUJJKSwgc2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhKTtcblxuICAgIHNob3VsZC5lcXVhbChkZWNvZGVkU2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhLmFyZ3NbMF0udG9Mb3dlckNhc2UoKSwgb3duZXIudG9Mb3dlckNhc2UoKSk7XG4gICAgc2hvdWxkLmVxdWFsKGRlY29kZWRTYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEuYXJnc1sxXS50b0xvd2VyQ2FzZSgpLCByZWNpcGllbnQudG9Mb3dlckNhc2UoKSk7XG4gICAgc2hvdWxkLmRlZXBFcXVhbChcbiAgICAgIGRlY29kZWRTYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEuYXJnc1syXS5tYXAoKHgpID0+IHgudG9OdW1iZXIoKSksXG4gICAgICB0b2tlbklkc1xuICAgICk7XG4gICAgc2hvdWxkLmRlZXBFcXVhbChcbiAgICAgIGRlY29kZWRTYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEuYXJnc1szXS5tYXAoKHgpID0+IHgudG9OdW1iZXIoKSksXG4gICAgICB2YWx1ZXNcbiAgICApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHNpZ24gYW5kIGJ1aWxkIEVSQzExNTUgYmF0Y2ggdHJhbnNmZXIgd2l0aCBEZWNvZGVyIHBhdHRlcm4nLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZ2V0QnVpbGRlcignaHRldGgnKSBhcyBUcmFuc2FjdGlvbkJ1aWxkZXI7XG4gICAgdHhCdWlsZGVyLmZlZSh7XG4gICAgICBmZWU6ICcxMDAwMDAwMDAwJyxcbiAgICAgIGdhc0xpbWl0OiAnMTIxMDAwMDAnLFxuICAgIH0pO1xuICAgIHR4QnVpbGRlci5jb3VudGVyKDIpO1xuICAgIHR4QnVpbGRlci5jb250cmFjdChjb250cmFjdEFkZHJlc3MpO1xuICAgIHR4QnVpbGRlci50eXBlKFRyYW5zYWN0aW9uVHlwZS5TZW5kRVJDMTE1NSk7XG5cbiAgICBjb25zdCB0b2tlbklkcyA9IFsxLCAyLCAzXTtcbiAgICBjb25zdCB2YWx1ZXMgPSBbMTAsIDEwLCAxMF07XG5cbiAgICBjb25zdCBlcmMxMTU1VHJhbnNmZXIgPSB0eEJ1aWxkZXIudHJhbnNmZXIoZXJjMTE1NUJhdGNoVHJhbnNmZXJFbmNvZGluZykgYXMgRVJDMTE1NVRyYW5zZmVyQnVpbGRlcjtcblxuICAgIGNvbnN0IHNlbmRNdWx0aXNpZ0NhbGxEYXRhID0gZXJjMTE1NVRyYW5zZmVyLnNpZ25BbmRCdWlsZChgJHtjb2luLmNoYWluSWR9YCk7XG4gICAgY29uc3QgZGVjb2RlZFNlbmRNdWx0aXNpZ0NhbGxEYXRhID0gZGVjb2RlVHJhbnNhY3Rpb24oSlNPTi5zdHJpbmdpZnkod2FsbGV0U2ltcGxlQUJJKSwgc2VuZE11bHRpc2lnQ2FsbERhdGEpO1xuXG4gICAgY29uc3Qgc2FmZVRyYW5zZmVyRnJvbUNhbGxEYXRhID0gZGVjb2RlZFNlbmRNdWx0aXNpZ0NhbGxEYXRhLmFyZ3NbMl07XG4gICAgY29uc3QgZGVjb2RlZFNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YSA9IGRlY29kZVRyYW5zYWN0aW9uKEpTT04uc3RyaW5naWZ5KEVSQzExNTVBQkkpLCBzYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEpO1xuXG4gICAgc2hvdWxkLmVxdWFsKGRlY29kZWRTYWZlVHJhbnNmZXJGcm9tQ2FsbERhdGEuYXJnc1swXS50b0xvd2VyQ2FzZSgpLCBvd25lci50b0xvd2VyQ2FzZSgpKTtcbiAgICBzaG91bGQuZXF1YWwoZGVjb2RlZFNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YS5hcmdzWzFdLnRvTG93ZXJDYXNlKCksIHJlY2lwaWVudC50b0xvd2VyQ2FzZSgpKTtcbiAgICBzaG91bGQuZGVlcEVxdWFsKFxuICAgICAgZGVjb2RlZFNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YS5hcmdzWzJdLm1hcCgoeCkgPT4geC50b051bWJlcigpKSxcbiAgICAgIHRva2VuSWRzXG4gICAgKTtcbiAgICBzaG91bGQuZGVlcEVxdWFsKFxuICAgICAgZGVjb2RlZFNhZmVUcmFuc2ZlckZyb21DYWxsRGF0YS5hcmdzWzNdLm1hcCgoeCkgPT4geC50b051bWJlcigpKSxcbiAgICAgIHZhbHVlc1xuICAgICk7XG4gIH0pO1xufSk7XG5cbi8vIEFCSSBmb3IgdHJhbnNmZXJGcm9tKGFkZHJlc3MsYWRkcmVzcyx1aW50MjU2KSB1c2VkIGJ5IEhUUyBuYXRpdmUgTkZUcyBvbiBIZWRlcmEgRVZNXG5jb25zdCB0cmFuc2ZlckZyb21BQkkgPSBbXG4gIHtcbiAgICBpbnB1dHM6IFtcbiAgICAgIHsgaW50ZXJuYWxUeXBlOiAnYWRkcmVzcycsIG5hbWU6ICdmcm9tJywgdHlwZTogJ2FkZHJlc3MnIH0sXG4gICAgICB7IGludGVybmFsVHlwZTogJ2FkZHJlc3MnLCBuYW1lOiAndG8nLCB0eXBlOiAnYWRkcmVzcycgfSxcbiAgICAgIHsgaW50ZXJuYWxUeXBlOiAndWludDI1NicsIG5hbWU6ICd0b2tlbklkJywgdHlwZTogJ3VpbnQyNTYnIH0sXG4gICAgXSxcbiAgICBuYW1lOiAndHJhbnNmZXJGcm9tJyxcbiAgICBvdXRwdXRzOiBbXSxcbiAgICBzdGF0ZU11dGFiaWxpdHk6ICdub25wYXlhYmxlJyxcbiAgICB0eXBlOiAnZnVuY3Rpb24nLFxuICB9LFxuXTtcblxuZGVzY3JpYmUoJ0VSQzcyMSBIVFMgbmF0aXZlIE5GVCB0cmFuc2ZlckZyb20nLCAoKSA9PiB7XG4gIGNvbnN0IG93bmVyID0gJzB4MTk2NDUwMzJjN2YxNTMzMzk1ZDQ0YTYyOTQ2MmU3NTEwODRkM2U0ZCc7XG4gIGNvbnN0IHJlY2lwaWVudCA9ICcweDE5NjQ1MDMyYzdmMTUzMzM5NWQ0NGE2Mjk0NjJlNzUxMDg0ZDNlNGMnO1xuICAvLyBIVFMgbmF0aXZlIE5GVCBhZGRyZXNzIChsb25nLXplcm8gZm9ybWF0KVxuICBjb25zdCBodHNOZnRDb250cmFjdEFkZHJlc3MgPSAnMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN2FjMjAzJztcbiAgY29uc3QgdG9rZW5JZCA9ICcxMic7XG5cbiAgaXQoJ3Nob3VsZCBidWlsZCBFUkM3MjEgdHJhbnNmZXJGcm9tIGNhbGxkYXRhIHdpdGggY29ycmVjdCBzZWxlY3RvciBhbmQgcGFyYW1zJywgKCkgPT4ge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgRVJDNzIxVHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgYnVpbGRlci50b2tlbkNvbnRyYWN0QWRkcmVzcyhodHNOZnRDb250cmFjdEFkZHJlc3MpLnRvKHJlY2lwaWVudCkuZnJvbShvd25lcikudG9rZW5JZCh0b2tlbklkKTtcblxuICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRlci5idWlsZFRyYW5zZmVyRnJvbSgpO1xuXG4gICAgLy8gU2hvdWxkIHVzZSB0cmFuc2ZlckZyb20gc2VsZWN0b3IgMHgyM2I4NzJkZFxuICAgIGNhbGxkYXRhLnNob3VsZC5zdGFydFdpdGgoJzB4MjNiODcyZGQnKTtcblxuICAgIC8vIERlY29kZSBhbmQgdmVyaWZ5IHBhcmFtZXRlcnNcbiAgICBjb25zdCBkZWNvZGVkID0gZGVjb2RlVHJhbnNhY3Rpb24oSlNPTi5zdHJpbmdpZnkodHJhbnNmZXJGcm9tQUJJKSwgY2FsbGRhdGEpO1xuICAgIHNob3VsZC5lcXVhbChkZWNvZGVkLmFyZ3NbMF0udG9Mb3dlckNhc2UoKSwgb3duZXIudG9Mb3dlckNhc2UoKSk7XG4gICAgc2hvdWxkLmVxdWFsKGRlY29kZWQuYXJnc1sxXS50b0xvd2VyQ2FzZSgpLCByZWNpcGllbnQudG9Mb3dlckNhc2UoKSk7XG4gICAgc2hvdWxkLmVxdWFsKGRlY29kZWQuYXJnc1syXS50b1N0cmluZygpLCB0b2tlbklkKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBub3QgaW5jbHVkZSBieXRlcyBkYXRhIHBhcmFtZXRlciBpbiB0cmFuc2ZlckZyb20gY2FsbGRhdGEnLCAoKSA9PiB7XG4gICAgY29uc3QgYnVpbGRlciA9IG5ldyBFUkM3MjFUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICBidWlsZGVyLnRva2VuQ29udHJhY3RBZGRyZXNzKGh0c05mdENvbnRyYWN0QWRkcmVzcykudG8ocmVjaXBpZW50KS5mcm9tKG93bmVyKS50b2tlbklkKHRva2VuSWQpO1xuXG4gICAgY29uc3QgdHJhbnNmZXJGcm9tRGF0YSA9IGJ1aWxkZXIuYnVpbGRUcmFuc2ZlckZyb20oKTtcbiAgICBjb25zdCBzYWZlVHJhbnNmZXJEYXRhID0gYnVpbGRlci5idWlsZCgpO1xuXG4gICAgLy8gdHJhbnNmZXJGcm9tIGhhcyAzIHBhcmFtcyAoZnJvbSwgdG8sIHRva2VuSWQpLCBzYWZlVHJhbnNmZXJGcm9tIGhhcyA0ICgrIGJ5dGVzIGRhdGEpXG4gICAgLy8gU28gdHJhbnNmZXJGcm9tIGVuY29kaW5nIHNob3VsZCBiZSBzaG9ydGVyXG4gICAgdHJhbnNmZXJGcm9tRGF0YS5sZW5ndGguc2hvdWxkLmJlLmxlc3NUaGFuKHNhZmVUcmFuc2ZlckRhdGEubGVuZ3RoKTtcblxuICAgIC8vIFZlcmlmeSBzYWZlVHJhbnNmZXJGcm9tIHVzZXMgMHhiODhkNGZkZVxuICAgIHNhZmVUcmFuc2ZlckRhdGEuc2hvdWxkLnN0YXJ0V2l0aCgnMHhiODhkNGZkZScpO1xuICB9KTtcbn0pO1xuXG5mdW5jdGlvbiBkZWNvZGVUcmFuc2FjdGlvbihhYmk6IHN0cmluZywgY2FsbGRhdGE6IHN0cmluZykge1xuICBjb25zdCBjb250cmFjdEludGVyZmFjZSA9IG5ldyBldGhlcnMudXRpbHMuSW50ZXJmYWNlKGFiaSk7XG4gIHJldHVybiBjb250cmFjdEludGVyZmFjZS5wYXJzZVRyYW5zYWN0aW9uKHsgZGF0YTogY2FsbGRhdGEgfSk7XG59XG4iXX0=
|