@1upmonster/duel 0.2.2 → 0.2.3
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/README.md +15 -5
- package/dist/admin.js +32 -3
- package/dist/generated/duel/instructions/delegateQueue.js +3 -3
- package/dist/generated/duel/instructions/delegateTicket.js +3 -3
- package/dist/generated/duel/instructions/index.d.ts +1 -0
- package/dist/generated/duel/instructions/index.js +2 -1
- package/dist/generated/duel/instructions/setupQueuePermission.d.ts +51 -0
- package/dist/generated/duel/instructions/setupQueuePermission.js +63 -0
- package/dist/generated/duel/programs/duel.d.ts +6 -2
- package/dist/generated/duel/programs/duel.js +12 -4
- package/dist/player.d.ts +2 -1
- package/dist/player.js +37 -6
- package/dist/tee.d.ts +4 -3
- package/dist/tee.js +17 -23
- package/dist/transaction.d.ts +2 -0
- package/dist/transaction.js +30 -19
- package/dist/utils.d.ts +10 -0
- package/dist/utils.js +28 -1
- package/package.json +1 -1
- package/src/admin.ts +36 -0
- package/src/duel.json +57 -0
- package/src/generated/duel/instructions/delegateQueue.ts +2 -2
- package/src/generated/duel/instructions/delegateTicket.ts +2 -2
- package/src/generated/duel/instructions/index.ts +1 -0
- package/src/generated/duel/instructions/setupQueuePermission.ts +112 -0
- package/src/generated/duel/programs/duel.ts +8 -4
- package/src/player.ts +41 -3
- package/src/tee.ts +18 -22
- package/src/transaction.ts +33 -18
- package/src/utils.ts +34 -0
- package/src/encryption.ts +0 -154
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This code was AUTOGENERATED using the Codama library.
|
|
3
|
+
* Please DO NOT EDIT THIS FILE, instead use visitors
|
|
4
|
+
* to add features, then rerun Codama to update it.
|
|
5
|
+
*
|
|
6
|
+
* @see https://github.com/codama-idl/codama
|
|
7
|
+
*/
|
|
8
|
+
import { combineCodec, fixDecoderSize, fixEncoderSize, getAddressEncoder, getBytesDecoder, getBytesEncoder, getProgramDerivedAddress, getStructDecoder, getStructEncoder, SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, SolanaError, transformEncoder } from '@solana/kit';
|
|
9
|
+
import { getAccountMetaFactory, getAddressFromResolvedInstructionAccount } from '@solana/program-client-core';
|
|
10
|
+
import { DUEL_PROGRAM_ADDRESS } from '../programs';
|
|
11
|
+
export const SETUP_QUEUE_PERMISSION_DISCRIMINATOR = new Uint8Array([223, 132, 77, 15, 224, 155, 125, 224]);
|
|
12
|
+
export function getSetupQueuePermissionDiscriminatorBytes() { return fixEncoderSize(getBytesEncoder(), 8).encode(SETUP_QUEUE_PERMISSION_DISCRIMINATOR); }
|
|
13
|
+
export function getSetupQueuePermissionInstructionDataEncoder() {
|
|
14
|
+
return transformEncoder(getStructEncoder([['discriminator', fixEncoderSize(getBytesEncoder(), 8)]]), (value) => ({ ...value, discriminator: SETUP_QUEUE_PERMISSION_DISCRIMINATOR }));
|
|
15
|
+
}
|
|
16
|
+
export function getSetupQueuePermissionInstructionDataDecoder() {
|
|
17
|
+
return getStructDecoder([['discriminator', fixDecoderSize(getBytesDecoder(), 8)]]);
|
|
18
|
+
}
|
|
19
|
+
export function getSetupQueuePermissionInstructionDataCodec() {
|
|
20
|
+
return combineCodec(getSetupQueuePermissionInstructionDataEncoder(), getSetupQueuePermissionInstructionDataDecoder());
|
|
21
|
+
}
|
|
22
|
+
export async function getSetupQueuePermissionInstructionAsync(input, config) {
|
|
23
|
+
// Program address.
|
|
24
|
+
const programAddress = config?.programAddress ?? DUEL_PROGRAM_ADDRESS;
|
|
25
|
+
// Original accounts.
|
|
26
|
+
const originalAccounts = { queue: { value: input.queue ?? null, isWritable: false }, authority: { value: input.authority ?? null, isWritable: true }, permission: { value: input.permission ?? null, isWritable: true }, permissionProgram: { value: input.permissionProgram ?? null, isWritable: false }, systemProgram: { value: input.systemProgram ?? null, isWritable: false } };
|
|
27
|
+
const accounts = originalAccounts;
|
|
28
|
+
// Resolve default values.
|
|
29
|
+
if (!accounts.queue.value) {
|
|
30
|
+
accounts.queue.value = await getProgramDerivedAddress({ programAddress, seeds: [getBytesEncoder().encode(new Uint8Array([113, 117, 101, 117, 101])), getAddressEncoder().encode(getAddressFromResolvedInstructionAccount("authority", accounts.authority.value))] });
|
|
31
|
+
}
|
|
32
|
+
if (!accounts.systemProgram.value) {
|
|
33
|
+
accounts.systemProgram.value = '11111111111111111111111111111111';
|
|
34
|
+
}
|
|
35
|
+
const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');
|
|
36
|
+
return Object.freeze({ accounts: [getAccountMeta("queue", accounts.queue), getAccountMeta("authority", accounts.authority), getAccountMeta("permission", accounts.permission), getAccountMeta("permissionProgram", accounts.permissionProgram), getAccountMeta("systemProgram", accounts.systemProgram)], data: getSetupQueuePermissionInstructionDataEncoder().encode({}), programAddress });
|
|
37
|
+
}
|
|
38
|
+
export function getSetupQueuePermissionInstruction(input, config) {
|
|
39
|
+
// Program address.
|
|
40
|
+
const programAddress = config?.programAddress ?? DUEL_PROGRAM_ADDRESS;
|
|
41
|
+
// Original accounts.
|
|
42
|
+
const originalAccounts = { queue: { value: input.queue ?? null, isWritable: false }, authority: { value: input.authority ?? null, isWritable: true }, permission: { value: input.permission ?? null, isWritable: true }, permissionProgram: { value: input.permissionProgram ?? null, isWritable: false }, systemProgram: { value: input.systemProgram ?? null, isWritable: false } };
|
|
43
|
+
const accounts = originalAccounts;
|
|
44
|
+
// Resolve default values.
|
|
45
|
+
if (!accounts.systemProgram.value) {
|
|
46
|
+
accounts.systemProgram.value = '11111111111111111111111111111111';
|
|
47
|
+
}
|
|
48
|
+
const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');
|
|
49
|
+
return Object.freeze({ accounts: [getAccountMeta("queue", accounts.queue), getAccountMeta("authority", accounts.authority), getAccountMeta("permission", accounts.permission), getAccountMeta("permissionProgram", accounts.permissionProgram), getAccountMeta("systemProgram", accounts.systemProgram)], data: getSetupQueuePermissionInstructionDataEncoder().encode({}), programAddress });
|
|
50
|
+
}
|
|
51
|
+
export function parseSetupQueuePermissionInstruction(instruction) {
|
|
52
|
+
if (instruction.accounts.length < 5) {
|
|
53
|
+
throw new SolanaError(SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, { actualAccountMetas: instruction.accounts.length, expectedAccountMetas: 5 });
|
|
54
|
+
}
|
|
55
|
+
let accountIndex = 0;
|
|
56
|
+
const getNextAccount = () => {
|
|
57
|
+
const accountMeta = instruction.accounts[accountIndex];
|
|
58
|
+
accountIndex += 1;
|
|
59
|
+
return accountMeta;
|
|
60
|
+
};
|
|
61
|
+
return { programAddress: instruction.programAddress, accounts: { queue: getNextAccount(), authority: getNextAccount(), permission: getNextAccount(), permissionProgram: getNextAccount(), systemProgram: getNextAccount() }, data: getSetupQueuePermissionInstructionDataDecoder().decode(instruction.data) };
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXBRdWV1ZVBlcm1pc3Npb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ2VuZXJhdGVkL2R1ZWwvaW5zdHJ1Y3Rpb25zL3NldHVwUXVldWVQZXJtaXNzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLHdCQUF3QixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLHlEQUF5RCxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBZ1UsTUFBTSxhQUFhLENBQUM7QUFDdGxCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSx3Q0FBd0MsRUFBbUMsTUFBTSw2QkFBNkIsQ0FBQztBQUMvSSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFbkQsTUFBTSxDQUFDLE1BQU0sb0NBQW9DLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUUzRyxNQUFNLFVBQVUseUNBQXlDLEtBQUssT0FBTyxjQUFjLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLG9DQUFvQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBU3pKLE1BQU0sVUFBVSw2Q0FBNkM7SUFDekQsT0FBTyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLGNBQWMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLGFBQWEsRUFBRSxvQ0FBb0Ms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LyoqXG4gKiBUaGlzIGNvZGUgd2FzIEFVVE9HRU5FUkFURUQgdXNpbmcgdGhlIENvZGFtYSBsaWJyYXJ5LlxuICogUGxlYXNlIERPIE5PVCBFRElUIFRISVMgRklMRSwgaW5zdGVhZCB1c2UgdmlzaXRvcnNcbiAqIHRvIGFkZCBmZWF0dXJlcywgdGhlbiByZXJ1biBDb2RhbWEgdG8gdXBkYXRlIGl0LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2NvZGFtYS1pZGwvY29kYW1hXG4gKi9cblxuaW1wb3J0IHsgY29tYmluZUNvZGVjLCBmaXhEZWNvZGVyU2l6ZSwgZml4RW5jb2RlclNpemUsIGdldEFkZHJlc3NFbmNvZGVyLCBnZXRCeXRlc0RlY29kZXIsIGdldEJ5dGVzRW5jb2RlciwgZ2V0UHJvZ3JhbURlcml2ZWRBZGRyZXNzLCBnZXRTdHJ1Y3REZWNvZGVyLCBnZXRTdHJ1Y3RFbmNvZGVyLCBTT0xBTkFfRVJST1JfX1BST0dSQU1fQ0xJRU5UU19fSU5TVUZGSUNJRU5UX0FDQ09VTlRfTUVUQVMsIFNvbGFuYUVycm9yLCB0cmFuc2Zvcm1FbmNvZGVyLCB0eXBlIEFjY291bnRNZXRhLCB0eXBlIEFjY291bnRTaWduZXJNZXRhLCB0eXBlIEFkZHJlc3MsIHR5cGUgRml4ZWRTaXplQ29kZWMsIHR5cGUgRml4ZWRTaXplRGVjb2RlciwgdHlwZSBGaXhlZFNpemVFbmNvZGVyLCB0eXBlIEluc3RydWN0aW9uLCB0eXBlIEluc3RydWN0aW9uV2l0aEFjY291bnRzLCB0eXBlIEluc3RydWN0aW9uV2l0aERhdGEsIHR5cGUgUmVhZG9ubHlBY2NvdW50LCB0eXBlIFJlYWRvbmx5VWludDhBcnJheSwgdHlwZSBUcmFuc2FjdGlvblNpZ25lciwgdHlwZSBXcml0YWJsZUFjY291bnQsIHR5cGUgV3JpdGFibGVTaWduZXJBY2NvdW50IH0gZnJvbSAnQHNvbGFuYS9raXQnO1xuaW1wb3J0IHsgZ2V0QWNjb3VudE1ldGFGYWN0b3J5LCBnZXRBZGRyZXNzRnJvbVJlc29sdmVkSW5zdHJ1Y3Rpb25BY2NvdW50LCB0eXBlIFJlc29sdmVkSW5zdHJ1Y3Rpb25BY2NvdW50IH0gZnJvbSAnQHNvbGFuYS9wcm9ncmFtLWNsaWVudC1jb3JlJztcbmltcG9ydCB7IERVRUxfUFJPR1JBTV9BRERSRVNTIH0gZnJvbSAnLi4vcHJvZ3JhbXMnO1xuXG5leHBvcnQgY29uc3QgU0VUVVBfUVVFVUVfUEVSTUlTU0lPTl9ESVNDUklNSU5BVE9SID0gbmV3IFVpbnQ4QXJyYXkoWzIyMywgMTMyLCA3NywgMTUsIDIyNCwgMTU1LCAxMjUsIDIyNF0pO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2V0dXBRdWV1ZVBlcm1pc3Npb25EaXNjcmltaW5hdG9yQnl0ZXMoKSB7IHJldHVybiBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKFNFVFVQX1FVRVVFX1BFUk1JU1NJT05fRElTQ1JJTUlOQVRPUik7IH1cblxuZXhwb3J0IHR5cGUgU2V0dXBRdWV1ZVBlcm1pc3Npb25JbnN0cnVjdGlvbjxUUHJvZ3JhbSBleHRlbmRzIHN0cmluZyA9IHR5cGVvZiBEVUVMX1BST0dSQU1fQUREUkVTUywgVEFjY291bnRRdWV1ZSBleHRlbmRzIHN0cmluZyB8IEFjY291bnRNZXRhPHN0cmluZz4gPSBzdHJpbmcsIFRBY2NvdW50QXV0aG9yaXR5IGV4dGVuZHMgc3RyaW5nIHwgQWNjb3VudE1ldGE8c3RyaW5nPiA9IHN0cmluZywgVEFjY291bnRQZXJtaXNzaW9uIGV4dGVuZHMgc3RyaW5nIHwgQWNjb3VudE1ldGE8c3RyaW5nPiA9IHN0cmluZywgVEFjY291bnRQZXJtaXNzaW9uUHJvZ3JhbSBleHRlbmRzIHN0cmluZyB8IEFjY291bnRNZXRhPHN0cmluZz4gPSBzdHJpbmcsIFRBY2NvdW50U3lzdGVtUHJvZ3JhbSBleHRlbmRzIHN0cmluZyB8IEFjY291bnRNZXRhPHN0cmluZz4gPSBcIjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExXCIsIFRSZW1haW5pbmdBY2NvdW50cyBleHRlbmRzIHJlYWRvbmx5IEFjY291bnRNZXRhPHN0cmluZz5bXSA9IFtdPiA9XG5JbnN0cnVjdGlvbjxUUHJvZ3JhbT4gJiBJbnN0cnVjdGlvbldpdGhEYXRhPFJlYWRvbmx5VWludDhBcnJheT4gJiBJbnN0cnVjdGlvbldpdGhBY2NvdW50czxbVEFjY291bnRRdWV1ZSBleHRlbmRzIHN0cmluZyA/IFJlYWRvbmx5QWNjb3VudDxUQWNjb3VudFF1ZXVlPiA6IFRBY2NvdW50UXVldWUsIFRBY2NvdW50QXV0aG9yaXR5IGV4dGVuZHMgc3RyaW5nID8gV3JpdGFibGVTaWduZXJBY2NvdW50PFRBY2NvdW50QXV0aG9yaXR5PiAmIEFjY291bnRTaWduZXJNZXRhPFRBY2NvdW50QXV0aG9yaXR5PiA6IFRBY2NvdW50QXV0aG9yaXR5LCBUQWNjb3VudFBlcm1pc3Npb24gZXh0ZW5kcyBzdHJpbmcgPyBXcml0YWJsZUFjY291bnQ8VEFjY291bnRQZXJtaXNzaW9uPiA6IFRBY2NvdW50UGVybWlzc2lvbiwgVEFjY291bnRQZXJtaXNzaW9uUHJvZ3JhbSBleHRlbmRzIHN0cmluZyA/IFJlYWRvbmx5QWNjb3VudDxUQWNjb3VudFBlcm1pc3Npb25Qcm9ncmFtPiA6IFRBY2NvdW50UGVybWlzc2lvblByb2dyYW0sIFRBY2NvdW50U3lzdGVtUHJvZ3JhbSBleHRlbmRzIHN0cmluZyA/IFJlYWRvbmx5QWNjb3VudDxUQWNjb3VudFN5c3RlbVByb2dyYW0+IDogVEFjY291bnRTeXN0ZW1Qcm9ncmFtLCAuLi5UUmVtYWluaW5nQWNjb3VudHNdPjtcblxuZXhwb3J0IHR5cGUgU2V0dXBRdWV1ZVBlcm1pc3Npb25JbnN0cnVjdGlvbkRhdGEgPSB7IGRpc2NyaW1pbmF0b3I6IFJlYWRvbmx5VWludDhBcnJheTsgIH07XG5cbmV4cG9ydCB0eXBlIFNldHVwUXVldWVQZXJtaXNzaW9uSW5zdHJ1Y3Rpb25EYXRhQXJncyA9IHsgIH07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXR1cFF1ZXVlUGVybWlzc2lvbkluc3RydWN0aW9uRGF0YUVuY29kZXIoKTogRml4ZWRTaXplRW5jb2RlcjxTZXR1cFF1ZXVlUGVybWlzc2lvbkluc3RydWN0aW9uRGF0YUFyZ3M+IHtcbiAgICByZXR1cm4gdHJhbnNmb3JtRW5jb2RlcihnZXRTdHJ1Y3RFbmNvZGVyKFtbJ2Rpc2NyaW1pbmF0b3InLCBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCldXSksICh2YWx1ZSkgPT4gKHsgLi4udmFsdWUsIGRpc2NyaW1pbmF0b3I6IFNFVFVQX1FVRVVFX1BFUk1JU1NJT05fRElTQ1JJTUlOQVRPUiB9KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXR1cFF1ZXVlUGVybWlzc2lvbkluc3RydWN0aW9uRGF0YURlY29kZXIoKTogRml4ZWRTaXplRGVjb2RlcjxTZXR1cFF1ZXVlUGVybWlzc2lvbkluc3RydWN0aW9uRGF0YT4ge1xuICAgIHJldHVybiBnZXRTdHJ1Y3REZWNvZGVyKFtbJ2Rpc2NyaW1pbmF0b3InLCBmaXhEZWNvZGVyU2l6ZShnZXRCeXRlc0RlY29kZXIoKSwgOCldXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXR1cFF1ZXVlUGVybWlzc2lvbkluc3RydWN0aW9uRGF0YUNvZGVjKCk6IEZpeGVkU2l6ZUNvZGVjPFNldHVwUXVldWVQZXJtaXNzaW9uSW5zdHJ1Y3Rpb25EYXRhQXJncywgU2V0dXBRdWV1ZVBlcm1pc3Npb25JbnN0cnVjdGlvbkRhdGE+IHtcbiAgICByZXR1cm4gY29tYmluZUNvZGVjKGdldFNldHVwUXVldWVQZXJtaXNzaW9uSW5zdHJ1Y3Rpb25EYXRhRW5jb2RlcigpLCBnZXRTZXR1cFF1ZXVlUGVybWlzc2lvbkluc3RydWN0aW9uRGF0YURlY29kZXIoKSk7XG59XG5cbmV4cG9ydCB0eXBlIFNldHVwUXVldWVQZXJtaXNzaW9uQXN5bmNJbnB1dDxUQWNjb3VudFF1ZXVlIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQWNjb3VudEF1dGhvcml0eSBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnRQZXJtaXNzaW9uIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQWNjb3VudFBlcm1pc3Npb25Qcm9ncmFtIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQWNjb3VudFN5c3RlbVByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+ID0gIHtcbiAgcXVldWU/OiBBZGRyZXNzPFRBY2NvdW50UXVldWU+O1xuYXV0aG9yaXR5OiBUcmFuc2FjdGlvblNpZ25lcjxUQWNjb3VudEF1dGhvcml0eT47XG5wZXJtaXNzaW9uOiBBZGRyZXNzPFRBY2NvdW50UGVybWlzc2lvbj47XG5wZXJtaXNzaW9uUHJvZ3JhbTogQWRkcmVzczxUQWNjb3VudFBlcm1pc3Npb25Qcm9ncmFtPjtcbnN5c3RlbVByb2dyYW0/OiBBZGRyZXNzPFRBY2NvdW50U3lzdGVtUHJvZ3JhbT47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRTZXR1cFF1ZXVlUGVybWlzc2lvbkluc3RydWN0aW9uQXN5bmM8VEFjY291bnRRdWV1ZSBleHRlbmRzIHN0cmluZywgVEFjY291bnRBdXRob3JpdHkgZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50UGVybWlzc2lvbiBleHRlbmRzIHN0cmluZywgVEFjY291bnRQZXJtaXNzaW9uUHJvZ3JhbSBleHRlbmRzIHN0cmluZywgVEFjY291bnRTeXN0ZW1Qcm9ncmFtIGV4dGVuZHMgc3RyaW5nLCBUUHJvZ3JhbUFkZHJlc3MgZXh0ZW5kcyBBZGRyZXNzID0gdHlwZW9mIERVRUxfUFJPR1JBTV9BRERSRVNTPihpbnB1dDogU2V0dXBRdWV1ZVBlcm1pc3Npb25Bc3luY0lucHV0PFRBY2NvdW50UXVldWUsIFRBY2NvdW50QXV0aG9yaXR5LCBUQWNjb3VudFBlcm1pc3Npb24sIFRBY2NvdW50UGVybWlzc2lvblByb2dyYW0sIFRBY2NvdW50U3lzdGVtUHJvZ3JhbT4sIGNvbmZpZz86IHsgcHJvZ3JhbUFkZHJlc3M/OiBUUHJvZ3JhbUFkZHJlc3MgfSApOiBQcm9taXNlPFNldHVwUXVldWVQZXJtaXNzaW9uSW5zdHJ1Y3Rpb248VFByb2dyYW1BZGRyZXNzLCBUQWNjb3VudFF1ZXVlLCBUQWNjb3VudEF1dGhvcml0eSwgVEFjY291bnRQZXJtaXNzaW9uLCBUQWNjb3VudFBlcm1pc3Npb25Qcm9ncmFtLCBUQWNjb3VudFN5c3RlbVByb2dyYW0+PiB7XG4gIC8vIFByb2dyYW0gYWRkcmVzcy5cbmNvbnN0IHByb2dyYW1BZGRyZXNzID0gY29uZmlnPy5wcm9ncmFtQWRkcmVzcyA/PyBEVUVMX1BST0dSQU1fQUREUkVTUztcblxuIC8vIE9yaWdpbmFsIGFjY291bnRzLlxuY29uc3Qgb3JpZ2luYWxBY2NvdW50cyA9IHsgcXVldWU6IHsgdmFsdWU6IGlucHV0LnF1ZXVlID8/IG51bGwsIGlzV3JpdGFibGU6IGZhbHNlIH0sIGF1dGhvcml0eTogeyB2YWx1ZTogaW5wdXQuYXV0aG9yaXR5ID8/IG51bGwsIGlzV3JpdGFibGU6IHRydWUgfSwgcGVybWlzc2lvbjogeyB2YWx1ZTogaW5wdXQucGVybWlzc2lvbiA/PyBudWxsLCBpc1dyaXRhYmxlOiB0cnVlIH0sIHBlcm1pc3Npb25Qcm9ncmFtOiB7IHZhbHVlOiBpbnB1dC5wZXJtaXNzaW9uUHJvZ3JhbSA/PyBudWxsLCBpc1dyaXRhYmxlOiBmYWxzZSB9LCBzeXN0ZW1Qcm9ncmFtOiB7IHZhbHVlOiBpbnB1dC5zeXN0ZW1Qcm9ncmFtID8/IG51bGwsIGlzV3JpdGFibGU6IGZhbHNlIH0gfVxuY29uc3QgYWNjb3VudHMgPSBvcmlnaW5hbEFjY291bnRzIGFzIFJlY29yZDxrZXlvZiB0eXBlb2Ygb3JpZ2luYWxBY2NvdW50cywgUmVzb2x2ZWRJbnN0cnVjdGlvbkFjY291bnQ+O1xuXG5cbi8vIFJlc29sdmUgZGVmYXVsdCB2YWx1ZXMuXG5pZiAoIWFjY291bnRzLnF1ZXVlLnZhbHVlKSB7XG5hY2NvdW50cy5xdWV1ZS52YWx1ZSA9IGF3YWl0IGdldFByb2dyYW1EZXJpdmVkQWRkcmVzcyh7IHByb2dyYW1BZGRyZXNzLCBzZWVkczogW2dldEJ5dGVzRW5jb2RlcigpLmVuY29kZShuZXcgVWludDhBcnJheShbMTEzLCAxMTcsIDEwMSwgMTE3LCAxMDFdKSksIGdldEFkZHJlc3NFbmNvZGVyKCkuZW5jb2RlKGdldEFkZHJlc3NGcm9tUmVzb2x2ZWRJbnN0cnVjdGlvbkFjY291bnQoXCJhdXRob3JpdHlcIiwgYWNjb3VudHMuYXV0aG9yaXR5LnZhbHVlKSldIH0pO1xufVxuaWYgKCFhY2NvdW50cy5zeXN0ZW1Qcm9ncmFtLnZhbHVlKSB7XG5hY2NvdW50cy5zeXN0ZW1Qcm9ncmFtLnZhbHVlID0gJzExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExJyBhcyBBZGRyZXNzPCcxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSc+O1xufVxuXG5jb25zdCBnZXRBY2NvdW50TWV0YSA9IGdldEFjY291bnRNZXRhRmFjdG9yeShwcm9ncmFtQWRkcmVzcywgJ3Byb2dyYW1JZCcpO1xucmV0dXJuIE9iamVjdC5mcmVlemUoeyBhY2NvdW50czogW2dldEFjY291bnRNZXRhKFwicXVldWVcIiwgYWNjb3VudHMucXVldWUpLCBnZXRBY2NvdW50TWV0YShcImF1dGhvcml0eVwiLCBhY2NvdW50cy5hdXRob3JpdHkpLCBnZXRBY2NvdW50TWV0YShcInBlcm1pc3Npb25cIiwgYWNjb3VudHMucGVybWlzc2lvbiksIGdldEFjY291bnRNZXRhKFwicGVybWlzc2lvblByb2dyYW1cIiwgYWNjb3VudHMucGVybWlzc2lvblByb2dyYW0pLCBnZXRBY2NvdW50TWV0YShcInN5c3RlbVByb2dyYW1cIiwgYWNjb3VudHMuc3lzdGVtUHJvZ3JhbSldLCBkYXRhOiBnZXRTZXR1cFF1ZXVlUGVybWlzc2lvbkluc3RydWN0aW9uRGF0YUVuY29kZXIoKS5lbmNvZGUoe30pLCBwcm9ncmFtQWRkcmVzcyB9IGFzIFNldHVwUXVldWVQZXJtaXNzaW9uSW5zdHJ1Y3Rpb248VFByb2dyYW1BZGRyZXNzLCBUQWNjb3VudFF1ZXVlLCBUQWNjb3VudEF1dGhvcml0eSwgVEFjY291bnRQZXJtaXNzaW9uLCBUQWNjb3VudFBlcm1pc3Npb25Qcm9ncmFtLCBUQWNjb3VudFN5c3RlbVByb2dyYW0+KTtcbn1cblxuZXhwb3J0IHR5cGUgU2V0dXBRdWV1ZVBlcm1pc3Npb25JbnB1dDxUQWNjb3VudFF1ZXVlIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQWNjb3VudEF1dGhvcml0eSBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnRQZXJtaXNzaW9uIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQWNjb3VudFBlcm1pc3Npb25Qcm9ncmFtIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQWNjb3VudFN5c3RlbVByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+ID0gIHtcbiAgcXVldWU6IEFkZHJlc3M8VEFjY291bnRRdWV1ZT47XG5hdXRob3JpdHk6IFRyYW5zYWN0aW9uU2lnbmVyPFRBY2NvdW50QXV0aG9yaXR5PjtcbnBlcm1pc3Npb246IEFkZHJlc3M8VEFjY291bnRQZXJtaXNzaW9uPjtcbnBlcm1pc3Npb25Qcm9ncmFtOiBBZGRyZXNzPFRBY2NvdW50UGVybWlzc2lvblByb2dyYW0+O1xuc3lzdGVtUHJvZ3JhbT86IEFkZHJlc3M8VEFjY291bnRTeXN0ZW1Qcm9ncmFtPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNldHVwUXVldWVQZXJtaXNzaW9uSW5zdHJ1Y3Rpb248VEFjY291bnRRdWV1ZSBleHRlbmRzIHN0cmluZywgVEFjY291bnRBdXRob3JpdHkgZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50UGVybWlzc2lvbiBleHRlbmRzIHN0cmluZywgVEFjY291bnRQZXJtaXNzaW9uUHJvZ3JhbSBleHRlbmRzIHN0cmluZywgVEFjY291bnRTeXN0ZW1Qcm9ncmFtIGV4dGVuZHMgc3RyaW5nLCBUUHJvZ3JhbUFkZHJlc3MgZXh0ZW5kcyBBZGRyZXNzID0gdHlwZW9mIERVRUxfUFJPR1JBTV9BRERSRVNTPihpbnB1dDogU2V0dXBRdWV1ZVBlcm1pc3Npb25JbnB1dDxUQWNjb3VudFF1ZXVlLCBUQWNjb3VudEF1dGhvcml0eSwgVEFjY291bnRQZXJtaXNzaW9uLCBUQWNjb3VudFBlcm1pc3Npb25Qcm9ncmFtLCBUQWNjb3VudFN5c3RlbVByb2dyYW0+LCBjb25maWc/OiB7IHByb2dyYW1BZGRyZXNzPzogVFByb2dyYW1BZGRyZXNzIH0gKTogU2V0dXBRdWV1ZVBlcm1pc3Npb25JbnN0cnVjdGlvbjxUUHJvZ3JhbUFkZHJlc3MsIFRBY2NvdW50UXVldWUsIFRBY2NvdW50QXV0aG9yaXR5LCBUQWNjb3VudFBlcm1pc3Npb24sIFRBY2NvdW50UGVybWlzc2lvblByb2dyYW0sIFRBY2NvdW50U3lzdGVtUHJvZ3JhbT4ge1xuICAvLyBQcm9ncmFtIGFkZHJlc3MuXG5jb25zdCBwcm9ncmFtQWRkcmVzcyA9IGNvbmZpZz8ucHJvZ3JhbUFkZHJlc3MgPz8gRFVFTF9QUk9HUkFNX0FERFJFU1M7XG5cbiAvLyBPcmlnaW5hbCBhY2NvdW50cy5cbmNvbnN0IG9yaWdpbmFsQWNjb3VudHMgPSB7IHF1ZXVlOiB7IHZhbHVlOiBpbnB1dC5xdWV1ZSA/PyBudWxsLCBpc1dyaXRhYmxlOiBmYWxzZSB9LCBhdXRob3JpdHk6IHsgdmFsdWU6IGlucHV0LmF1dGhvcml0eSA/PyBudWxsLCBpc1dyaXRhYmxlOiB0cnVlIH0sIHBlcm1pc3Npb246IHsgdmFsdWU6IGlucHV0LnBlcm1pc3Npb24gPz8gbnVsbCwgaXNXcml0YWJsZTogdHJ1ZSB9LCBwZXJtaXNzaW9uUHJvZ3JhbTogeyB2YWx1ZTogaW5wdXQucGVybWlzc2lvblByb2dyYW0gPz8gbnVsbCwgaXNXcml0YWJsZTogZmFsc2UgfSwgc3lzdGVtUHJvZ3JhbTogeyB2YWx1ZTogaW5wdXQuc3lzdGVtUHJvZ3JhbSA/PyBudWxsLCBpc1dyaXRhYmxlOiBmYWxzZSB9IH1cbmNvbnN0IGFjY291bnRzID0gb3JpZ2luYWxBY2NvdW50cyBhcyBSZWNvcmQ8a2V5b2YgdHlwZW9mIG9yaWdpbmFsQWNjb3VudHMsIFJlc29sdmVkSW5zdHJ1Y3Rpb25BY2NvdW50PjtcblxuXG4vLyBSZXNvbHZlIGRlZmF1bHQgdmFsdWVzLlxuaWYgKCFhY2NvdW50cy5zeXN0ZW1Qcm9ncmFtLnZhbHVlKSB7XG5hY2NvdW50cy5zeXN0ZW1Qcm9ncmFtLnZhbHVlID0gJzExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExJyBhcyBBZGRyZXNzPCcxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSc+O1xufVxuXG5jb25zdCBnZXRBY2NvdW50TWV0YSA9IGdldEFjY291bnRNZXRhRmFjdG9yeShwcm9ncmFtQWRkcmVzcywgJ3Byb2dyYW1JZCcpO1xucmV0dXJuIE9iamVjdC5mcmVlemUoeyBhY2NvdW50czogW2dldEFjY291bnRNZXRhKFwicXVldWVcIiwgYWNjb3VudHMucXVldWUpLCBnZXRBY2NvdW50TWV0YShcImF1dGhvcml0eVwiLCBhY2NvdW50cy5hdXRob3JpdHkpLCBnZXRBY2NvdW50TWV0YShcInBlcm1pc3Npb25cIiwgYWNjb3VudHMucGVybWlzc2lvbiksIGdldEFjY291bnRNZXRhKFwicGVybWlzc2lvblByb2dyYW1cIiwgYWNjb3VudHMucGVybWlzc2lvblByb2dyYW0pLCBnZXRBY2NvdW50TWV0YShcInN5c3RlbVByb2dyYW1cIiwgYWNjb3VudHMuc3lzdGVtUHJvZ3JhbSldLCBkYXRhOiBnZXRTZXR1cFF1ZXVlUGVybWlzc2lvbkluc3RydWN0aW9uRGF0YUVuY29kZXIoKS5lbmNvZGUoe30pLCBwcm9ncmFtQWRkcmVzcyB9IGFzIFNldHVwUXVldWVQZXJtaXNzaW9uSW5zdHJ1Y3Rpb248VFByb2dyYW1BZGRyZXNzLCBUQWNjb3VudFF1ZXVlLCBUQWNjb3VudEF1dGhvcml0eSwgVEFjY291bnRQZXJtaXNzaW9uLCBUQWNjb3VudFBlcm1pc3Npb25Qcm9ncmFtLCBUQWNjb3VudFN5c3RlbVByb2dyYW0+KTtcbn1cblxuZXhwb3J0IHR5cGUgUGFyc2VkU2V0dXBRdWV1ZVBlcm1pc3Npb25JbnN0cnVjdGlvbjxUUHJvZ3JhbSBleHRlbmRzIHN0cmluZyA9IHR5cGVvZiBEVUVMX1BST0dSQU1fQUREUkVTUywgVEFjY291bnRNZXRhcyBleHRlbmRzIHJlYWRvbmx5IEFjY291bnRNZXRhW10gPSByZWFkb25seSBBY2NvdW50TWV0YVtdPiA9IHsgcHJvZ3JhbUFkZHJlc3M6IEFkZHJlc3M8VFByb2dyYW0+O1xuYWNjb3VudHM6IHtcbnF1ZXVlOiBUQWNjb3VudE1ldGFzWzBdO1xuYXV0aG9yaXR5OiBUQWNjb3VudE1ldGFzWzFdO1xucGVybWlzc2lvbjogVEFjY291bnRNZXRhc1syXTtcbnBlcm1pc3Npb25Qcm9ncmFtOiBUQWNjb3VudE1ldGFzWzNdO1xuc3lzdGVtUHJvZ3JhbTogVEFjY291bnRNZXRhc1s0XTtcbn07XG5kYXRhOiBTZXR1cFF1ZXVlUGVybWlzc2lvbkluc3RydWN0aW9uRGF0YTsgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU2V0dXBRdWV1ZVBlcm1pc3Npb25JbnN0cnVjdGlvbjxUUHJvZ3JhbSBleHRlbmRzIHN0cmluZywgVEFjY291bnRNZXRhcyBleHRlbmRzIHJlYWRvbmx5IEFjY291bnRNZXRhW10+KGluc3RydWN0aW9uOiBJbnN0cnVjdGlvbjxUUHJvZ3JhbT4gJiBJbnN0cnVjdGlvbldpdGhBY2NvdW50czxUQWNjb3VudE1ldGFzPiAmIEluc3RydWN0aW9uV2l0aERhdGE8UmVhZG9ubHlVaW50OEFycmF5Pik6IFBhcnNlZFNldHVwUXVldWVQZXJtaXNzaW9uSW5zdHJ1Y3Rpb248VFByb2dyYW0sIFRBY2NvdW50TWV0YXM+IHtcbiAgaWYgKGluc3RydWN0aW9uLmFjY291bnRzLmxlbmd0aCA8IDUpIHtcbiAgdGhyb3cgbmV3IFNvbGFuYUVycm9yKFNPTEFOQV9FUlJPUl9fUFJPR1JBTV9DTElFTlRTX19JTlNVRkZJQ0lFTlRfQUNDT1VOVF9NRVRBUywgeyBhY3R1YWxBY2NvdW50TWV0YXM6IGluc3RydWN0aW9uLmFjY291bnRzLmxlbmd0aCwgZXhwZWN0ZWRBY2NvdW50TWV0YXM6IDUgfSk7XG59XG5sZXQgYWNjb3VudEluZGV4ID0gMDtcbmNvbnN0IGdldE5leHRBY2NvdW50ID0gKCkgPT4ge1xuICBjb25zdCBhY2NvdW50TWV0YSA9IChpbnN0cnVjdGlvbi5hY2NvdW50cyBhcyBUQWNjb3VudE1ldGFzKVthY2NvdW50SW5kZXhdITtcbiAgYWNjb3VudEluZGV4ICs9IDE7XG4gIHJldHVybiBhY2NvdW50TWV0YTtcbn1cbiAgcmV0dXJuIHsgcHJvZ3JhbUFkZHJlc3M6IGluc3RydWN0aW9uLnByb2dyYW1BZGRyZXNzLCBhY2NvdW50czogeyBxdWV1ZTogZ2V0TmV4dEFjY291bnQoKSwgYXV0aG9yaXR5OiBnZXROZXh0QWNjb3VudCgpLCBwZXJtaXNzaW9uOiBnZXROZXh0QWNjb3VudCgpLCBwZXJtaXNzaW9uUHJvZ3JhbTogZ2V0TmV4dEFjY291bnQoKSwgc3lzdGVtUHJvZ3JhbTogZ2V0TmV4dEFjY291bnQoKSB9LCBkYXRhOiBnZXRTZXR1cFF1ZXVlUGVybWlzc2lvbkluc3RydWN0aW9uRGF0YURlY29kZXIoKS5kZWNvZGUoaW5zdHJ1Y3Rpb24uZGF0YSkgfTtcbn0iXX0=
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import { type Address, type ClientWithPayer, type ClientWithRpc, type ClientWithTransactionPlanning, type ClientWithTransactionSending, type GetAccountInfoApi, type GetMultipleAccountsApi, type Instruction, type InstructionWithData, type ReadonlyUint8Array } from '@solana/kit';
|
|
9
9
|
import { type SelfFetchFunctions, type SelfPlanAndSendFunctions } from '@solana/program-client-core';
|
|
10
10
|
import { getMatchTicketCodec, getQueueCodec, getTenantCodec, type MatchTicket, type MatchTicketArgs, type Queue, type QueueArgs, type Tenant, type TenantArgs } from '../accounts';
|
|
11
|
-
import { getCancelTicketInstructionAsync, getCloseTicketInstructionAsync, getCommitTicketsInstruction, getCreateTicketInstructionAsync, getDelegateQueueInstructionAsync, getDelegateTicketInstructionAsync, getFlushMatchesInstruction, getInitializeQueueInstructionAsync, getInitializeTenantInstructionAsync, getJoinQueueInstructionAsync, getProcessUndelegationInstruction, getSetupTicketPermissionInstructionAsync, type CancelTicketAsyncInput, type CloseTicketAsyncInput, type CommitTicketsInput, type CreateTicketAsyncInput, type DelegateQueueAsyncInput, type DelegateTicketAsyncInput, type FlushMatchesInput, type InitializeQueueAsyncInput, type InitializeTenantAsyncInput, type JoinQueueAsyncInput, type ParsedCancelTicketInstruction, type ParsedCloseTicketInstruction, type ParsedCommitTicketsInstruction, type ParsedCreateTicketInstruction, type ParsedDelegateQueueInstruction, type ParsedDelegateTicketInstruction, type ParsedFlushMatchesInstruction, type ParsedInitializeQueueInstruction, type ParsedInitializeTenantInstruction, type ParsedJoinQueueInstruction, type ParsedProcessUndelegationInstruction, type ParsedSetupTicketPermissionInstruction, type ProcessUndelegationInput, type SetupTicketPermissionAsyncInput } from '../instructions';
|
|
11
|
+
import { getCancelTicketInstructionAsync, getCloseTicketInstructionAsync, getCommitTicketsInstruction, getCreateTicketInstructionAsync, getDelegateQueueInstructionAsync, getDelegateTicketInstructionAsync, getFlushMatchesInstruction, getInitializeQueueInstructionAsync, getInitializeTenantInstructionAsync, getJoinQueueInstructionAsync, getProcessUndelegationInstruction, getSetupQueuePermissionInstructionAsync, getSetupTicketPermissionInstructionAsync, type CancelTicketAsyncInput, type CloseTicketAsyncInput, type CommitTicketsInput, type CreateTicketAsyncInput, type DelegateQueueAsyncInput, type DelegateTicketAsyncInput, type FlushMatchesInput, type InitializeQueueAsyncInput, type InitializeTenantAsyncInput, type JoinQueueAsyncInput, type ParsedCancelTicketInstruction, type ParsedCloseTicketInstruction, type ParsedCommitTicketsInstruction, type ParsedCreateTicketInstruction, type ParsedDelegateQueueInstruction, type ParsedDelegateTicketInstruction, type ParsedFlushMatchesInstruction, type ParsedInitializeQueueInstruction, type ParsedInitializeTenantInstruction, type ParsedJoinQueueInstruction, type ParsedProcessUndelegationInstruction, type ParsedSetupQueuePermissionInstruction, type ParsedSetupTicketPermissionInstruction, type ProcessUndelegationInput, type SetupQueuePermissionAsyncInput, type SetupTicketPermissionAsyncInput } from '../instructions';
|
|
12
12
|
export declare const DUEL_PROGRAM_ADDRESS: Address<"EdZzUwKd1X2ZWjxLPpz1cpEzMF7RUZC43Pq64v1VcK5X">;
|
|
13
13
|
export declare enum DuelAccount {
|
|
14
14
|
MatchTicket = 0,
|
|
@@ -30,7 +30,8 @@ export declare enum DuelInstruction {
|
|
|
30
30
|
InitializeTenant = 8,
|
|
31
31
|
JoinQueue = 9,
|
|
32
32
|
ProcessUndelegation = 10,
|
|
33
|
-
|
|
33
|
+
SetupQueuePermission = 11,
|
|
34
|
+
SetupTicketPermission = 12
|
|
34
35
|
}
|
|
35
36
|
export declare function identifyDuelInstruction(instruction: {
|
|
36
37
|
data: ReadonlyUint8Array;
|
|
@@ -58,6 +59,8 @@ export type ParsedDuelInstruction<TProgram extends string = 'EdZzUwKd1X2ZWjxLPpz
|
|
|
58
59
|
} & ParsedJoinQueueInstruction<TProgram> | {
|
|
59
60
|
instructionType: DuelInstruction.ProcessUndelegation;
|
|
60
61
|
} & ParsedProcessUndelegationInstruction<TProgram> | {
|
|
62
|
+
instructionType: DuelInstruction.SetupQueuePermission;
|
|
63
|
+
} & ParsedSetupQueuePermissionInstruction<TProgram> | {
|
|
61
64
|
instructionType: DuelInstruction.SetupTicketPermission;
|
|
62
65
|
} & ParsedSetupTicketPermissionInstruction<TProgram>;
|
|
63
66
|
export declare function parseDuelInstruction<TProgram extends string>(instruction: Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array>): ParsedDuelInstruction<TProgram>;
|
|
@@ -82,6 +85,7 @@ export type DuelPluginInstructions = {
|
|
|
82
85
|
initializeTenant: (input: InitializeTenantAsyncInput) => ReturnType<typeof getInitializeTenantInstructionAsync> & SelfPlanAndSendFunctions;
|
|
83
86
|
joinQueue: (input: JoinQueueAsyncInput) => ReturnType<typeof getJoinQueueInstructionAsync> & SelfPlanAndSendFunctions;
|
|
84
87
|
processUndelegation: (input: MakeOptional<ProcessUndelegationInput, "payer">) => ReturnType<typeof getProcessUndelegationInstruction> & SelfPlanAndSendFunctions;
|
|
88
|
+
setupQueuePermission: (input: SetupQueuePermissionAsyncInput) => ReturnType<typeof getSetupQueuePermissionInstructionAsync> & SelfPlanAndSendFunctions;
|
|
85
89
|
setupTicketPermission: (input: SetupTicketPermissionAsyncInput) => ReturnType<typeof getSetupTicketPermissionInstructionAsync> & SelfPlanAndSendFunctions;
|
|
86
90
|
};
|
|
87
91
|
export type DuelPluginRequirements = ClientWithRpc<GetAccountInfoApi & GetMultipleAccountsApi> & ClientWithPayer & ClientWithTransactionPlanning & ClientWithTransactionSending;
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import { assertIsInstructionWithAccounts, containsBytes, fixEncoderSize, getBytesEncoder, SOLANA_ERROR__PROGRAM_CLIENTS__FAILED_TO_IDENTIFY_ACCOUNT, SOLANA_ERROR__PROGRAM_CLIENTS__FAILED_TO_IDENTIFY_INSTRUCTION, SOLANA_ERROR__PROGRAM_CLIENTS__UNRECOGNIZED_INSTRUCTION_TYPE, SolanaError } from '@solana/kit';
|
|
9
9
|
import { addSelfFetchFunctions, addSelfPlanAndSendFunctions } from '@solana/program-client-core';
|
|
10
10
|
import { getMatchTicketCodec, getQueueCodec, getTenantCodec } from '../accounts';
|
|
11
|
-
import { getCancelTicketInstructionAsync, getCloseTicketInstructionAsync, getCommitTicketsInstruction, getCreateTicketInstructionAsync, getDelegateQueueInstructionAsync, getDelegateTicketInstructionAsync, getFlushMatchesInstruction, getInitializeQueueInstructionAsync, getInitializeTenantInstructionAsync, getJoinQueueInstructionAsync, getProcessUndelegationInstruction, getSetupTicketPermissionInstructionAsync, parseCancelTicketInstruction, parseCloseTicketInstruction, parseCommitTicketsInstruction, parseCreateTicketInstruction, parseDelegateQueueInstruction, parseDelegateTicketInstruction, parseFlushMatchesInstruction, parseInitializeQueueInstruction, parseInitializeTenantInstruction, parseJoinQueueInstruction, parseProcessUndelegationInstruction, parseSetupTicketPermissionInstruction } from '../instructions';
|
|
11
|
+
import { getCancelTicketInstructionAsync, getCloseTicketInstructionAsync, getCommitTicketsInstruction, getCreateTicketInstructionAsync, getDelegateQueueInstructionAsync, getDelegateTicketInstructionAsync, getFlushMatchesInstruction, getInitializeQueueInstructionAsync, getInitializeTenantInstructionAsync, getJoinQueueInstructionAsync, getProcessUndelegationInstruction, getSetupQueuePermissionInstructionAsync, getSetupTicketPermissionInstructionAsync, parseCancelTicketInstruction, parseCloseTicketInstruction, parseCommitTicketsInstruction, parseCreateTicketInstruction, parseDelegateQueueInstruction, parseDelegateTicketInstruction, parseFlushMatchesInstruction, parseInitializeQueueInstruction, parseInitializeTenantInstruction, parseJoinQueueInstruction, parseProcessUndelegationInstruction, parseSetupQueuePermissionInstruction, parseSetupTicketPermissionInstruction } from '../instructions';
|
|
12
12
|
export const DUEL_PROGRAM_ADDRESS = 'EdZzUwKd1X2ZWjxLPpz1cpEzMF7RUZC43Pq64v1VcK5X';
|
|
13
13
|
export var DuelAccount;
|
|
14
14
|
(function (DuelAccount) {
|
|
@@ -42,7 +42,8 @@ export var DuelInstruction;
|
|
|
42
42
|
DuelInstruction[DuelInstruction["InitializeTenant"] = 8] = "InitializeTenant";
|
|
43
43
|
DuelInstruction[DuelInstruction["JoinQueue"] = 9] = "JoinQueue";
|
|
44
44
|
DuelInstruction[DuelInstruction["ProcessUndelegation"] = 10] = "ProcessUndelegation";
|
|
45
|
-
DuelInstruction[DuelInstruction["
|
|
45
|
+
DuelInstruction[DuelInstruction["SetupQueuePermission"] = 11] = "SetupQueuePermission";
|
|
46
|
+
DuelInstruction[DuelInstruction["SetupTicketPermission"] = 12] = "SetupTicketPermission";
|
|
46
47
|
})(DuelInstruction || (DuelInstruction = {}));
|
|
47
48
|
export function identifyDuelInstruction(instruction) {
|
|
48
49
|
const data = 'data' in instruction ? instruction.data : instruction;
|
|
@@ -79,6 +80,9 @@ export function identifyDuelInstruction(instruction) {
|
|
|
79
80
|
if (containsBytes(data, fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([196, 28, 41, 206, 48, 37, 51, 167])), 0)) {
|
|
80
81
|
return DuelInstruction.ProcessUndelegation;
|
|
81
82
|
}
|
|
83
|
+
if (containsBytes(data, fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([223, 132, 77, 15, 224, 155, 125, 224])), 0)) {
|
|
84
|
+
return DuelInstruction.SetupQueuePermission;
|
|
85
|
+
}
|
|
82
86
|
if (containsBytes(data, fixEncoderSize(getBytesEncoder(), 8).encode(new Uint8Array([164, 29, 7, 235, 183, 223, 11, 85])), 0)) {
|
|
83
87
|
return DuelInstruction.SetupTicketPermission;
|
|
84
88
|
}
|
|
@@ -131,6 +135,10 @@ export function parseDuelInstruction(instruction) {
|
|
|
131
135
|
assertIsInstructionWithAccounts(instruction);
|
|
132
136
|
return { instructionType: DuelInstruction.ProcessUndelegation, ...parseProcessUndelegationInstruction(instruction) };
|
|
133
137
|
}
|
|
138
|
+
case DuelInstruction.SetupQueuePermission: {
|
|
139
|
+
assertIsInstructionWithAccounts(instruction);
|
|
140
|
+
return { instructionType: DuelInstruction.SetupQueuePermission, ...parseSetupQueuePermissionInstruction(instruction) };
|
|
141
|
+
}
|
|
134
142
|
case DuelInstruction.SetupTicketPermission: {
|
|
135
143
|
assertIsInstructionWithAccounts(instruction);
|
|
136
144
|
return { instructionType: DuelInstruction.SetupTicketPermission, ...parseSetupTicketPermissionInstruction(instruction) };
|
|
@@ -140,7 +148,7 @@ export function parseDuelInstruction(instruction) {
|
|
|
140
148
|
}
|
|
141
149
|
export function duelProgram() {
|
|
142
150
|
return (client) => {
|
|
143
|
-
return { ...client, duel: { accounts: { matchTicket: addSelfFetchFunctions(client, getMatchTicketCodec()), queue: addSelfFetchFunctions(client, getQueueCodec()), tenant: addSelfFetchFunctions(client, getTenantCodec()) }, instructions: { cancelTicket: input => addSelfPlanAndSendFunctions(client, getCancelTicketInstructionAsync(input)), closeTicket: input => addSelfPlanAndSendFunctions(client, getCloseTicketInstructionAsync(input)), commitTickets: input => addSelfPlanAndSendFunctions(client, getCommitTicketsInstruction({ ...input, payer: input.payer ?? client.payer })), createTicket: input => addSelfPlanAndSendFunctions(client, getCreateTicketInstructionAsync(input)), delegateQueue: input => addSelfPlanAndSendFunctions(client, getDelegateQueueInstructionAsync({ ...input, payer: input.payer ?? client.payer })), delegateTicket: input => addSelfPlanAndSendFunctions(client, getDelegateTicketInstructionAsync({ ...input, payer: input.payer ?? client.payer })), flushMatches: input => addSelfPlanAndSendFunctions(client, getFlushMatchesInstruction(input)), initializeQueue: input => addSelfPlanAndSendFunctions(client, getInitializeQueueInstructionAsync(input)), initializeTenant: input => addSelfPlanAndSendFunctions(client, getInitializeTenantInstructionAsync(input)), joinQueue: input => addSelfPlanAndSendFunctions(client, getJoinQueueInstructionAsync(input)), processUndelegation: input => addSelfPlanAndSendFunctions(client, getProcessUndelegationInstruction({ ...input, payer: input.payer ?? client.payer.address })), setupTicketPermission: input => addSelfPlanAndSendFunctions(client, getSetupTicketPermissionInstructionAsync(input)) } } };
|
|
151
|
+
return { ...client, duel: { accounts: { matchTicket: addSelfFetchFunctions(client, getMatchTicketCodec()), queue: addSelfFetchFunctions(client, getQueueCodec()), tenant: addSelfFetchFunctions(client, getTenantCodec()) }, instructions: { cancelTicket: input => addSelfPlanAndSendFunctions(client, getCancelTicketInstructionAsync(input)), closeTicket: input => addSelfPlanAndSendFunctions(client, getCloseTicketInstructionAsync(input)), commitTickets: input => addSelfPlanAndSendFunctions(client, getCommitTicketsInstruction({ ...input, payer: input.payer ?? client.payer })), createTicket: input => addSelfPlanAndSendFunctions(client, getCreateTicketInstructionAsync(input)), delegateQueue: input => addSelfPlanAndSendFunctions(client, getDelegateQueueInstructionAsync({ ...input, payer: input.payer ?? client.payer })), delegateTicket: input => addSelfPlanAndSendFunctions(client, getDelegateTicketInstructionAsync({ ...input, payer: input.payer ?? client.payer })), flushMatches: input => addSelfPlanAndSendFunctions(client, getFlushMatchesInstruction(input)), initializeQueue: input => addSelfPlanAndSendFunctions(client, getInitializeQueueInstructionAsync(input)), initializeTenant: input => addSelfPlanAndSendFunctions(client, getInitializeTenantInstructionAsync(input)), joinQueue: input => addSelfPlanAndSendFunctions(client, getJoinQueueInstructionAsync(input)), processUndelegation: input => addSelfPlanAndSendFunctions(client, getProcessUndelegationInstruction({ ...input, payer: input.payer ?? client.payer.address })), setupQueuePermission: input => addSelfPlanAndSendFunctions(client, getSetupQueuePermissionInstructionAsync(input)), setupTicketPermission: input => addSelfPlanAndSendFunctions(client, getSetupTicketPermissionInstructionAsync(input)) } } };
|
|
144
152
|
};
|
|
145
153
|
}
|
|
146
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9nZW5lcmF0ZWQvZHVlbC9wcm9ncmFtcy9kdWVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSx5REFBeUQsRUFBRSw2REFBNkQsRUFBRSw0REFBNEQsRUFBRSxXQUFXLEVBQTJQLE1BQU0sYUFBYSxDQUFDO0FBQzVpQixPQUFPLEVBQUUscUJBQXFCLEVBQUUsMkJBQTJCLEVBQTBELE1BQU0sNkJBQTZCLENBQUM7QUFDekosT0FBTyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQW9HLE1BQU0sYUFBYSxDQUFDO0FBQ25MLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSw4QkFBOEIsRUFBRSwyQkFBMkIsRUFBRSwrQkFBK0IsRUFBRSxnQ0FBZ0MsRUFBRSxpQ0FBaUMsRUFBRSwwQkFBMEIsRUFBRSxrQ0FBa0MsRUFBRSxtQ0FBbUMsRUFBRSw0QkFBNEIsRUFBRSxpQ0FBaUMsRUFBRSx3Q0FBd0MsRUFBRSw0QkFBNEIsRUFBRSwyQkFBMkIsRUFBRSw2QkFBNkIsRUFBRSw0QkFBNEIsRUFBRSw2QkFBNkIsRUFBRSw4QkFBOEIsRUFBRSw0QkFBNEIsRUFBRSwrQkFBK0IsRUFBRSxnQ0FBZ0MsRUFBRSx5QkFBeUIsRUFBRSxtQ0FBbUMsRUFBRSxxQ0FBcUMsRUFBNnlCLE1BQU0saUJBQWlCLENBQUM7QUFFL2xELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLDhDQUF5RyxDQUFDO0FBRTlJLE1BQU0sQ0FBTixJQUFZLFdBQTBDO0FBQXRELFdBQVksV0FBVztJQUFHLDJEQUFXLENBQUE7SUFBRSwrQ0FBSyxDQUFBO0lBQUUsaURBQU0sQ0FBQTtBQUFDLENBQUMsRUFBMUMsV0FBVyxLQUFYLFdBQVcsUUFBK0I7QUFFdEQsTUFBTSxVQUFV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QyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFBQyxPQUFPLGVBQWUsQ0FBQyxjQUFjLENBQUM7SUFBQyxDQUFDO0lBQ3pLLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQUMsT0FBTyxlQUFlLENBQUMsWUFBWSxDQUFDO0lBQUMsQ0FBQztJQUN0SyxJQUFJLGFBQWEsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUFDLE9BQU8sZUFBZSxDQUFDLGVBQWUsQ0FBQztJQUFDLENBQUM7SUFDM0ssSUFBSSxhQUFhLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUs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RSw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsMkJBQTJCLENBQUMsTUFBTSxFQUFFLGlDQUFpQyxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUscUJBQXFCLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLEVBQUUsd0NBQXdDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNyb0QsQ0FBQyxDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpcyBjb2RlIHdhcyBBVVRPR0VORVJBVEVEIHVzaW5nIHRoZSBDb2RhbWEgbGlicmFyeS5cbiAqIFBsZWFzZSBETyBOT1QgRURJVCBUSElTIEZJTEUsIGluc3RlYWQgdXNlIHZpc2l0b3JzXG4gKiB0byBhZGQgZmVhdHVyZXMsIHRoZW4gcmVydW4gQ29kYW1hIHRvIHVwZGF0ZSBpdC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jb2RhbWEtaWRsL2NvZGFtYVxuICovXG5cbmltcG9ydCB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMsIGNvbnRhaW5zQnl0ZXMsIGZpeEVuY29kZXJTaXplLCBnZXRCeXRlc0VuY29kZXIsIFNPTEFOQV9FUlJPUl9fUFJPR1JBTV9DTElFTlRTX19GQUlMRURfVE9fSURFTlRJRllfQUNDT1VOVCwgU09MQU5BX0VSUk9SX19QUk9HUkFNX0NMSUVOVFNfX0ZBSUxFRF9UT19JREVOVElGWV9JTlNUUlVDVElPTiwgU09MQU5BX0VSUk9SX19QUk9HUkFNX0NMSUVOVFNfX1VOUkVDT0dOSVpFRF9JTlNUUlVDVElPTl9UWVBFLCBTb2xhbmFFcnJvciwgdHlwZSBBZGRyZXNzLCB0eXBlIENsaWVudFdpdGhQYXllciwgdHlwZSBDbGllbnRXaXRoUnBjLCB0eXBlIENsaWVudFdpdGhUcmFuc2FjdGlvblBsYW5uaW5nLCB0eXBlIENsaWVudFdpdGhUcmFuc2FjdGlvblNlbmRpbmcsIHR5cGUgR2V0QWNjb3VudEluZm9BcGksIHR5cGUgR2V0TXVsdGlwbGVBY2NvdW50c0FwaSwgdHlwZSBJbnN0cnVjdGlvbiwgdHlwZSBJbnN0cnVjdGlvbldpdGhEYXRhLCB0eXBlIFJlYWRvbmx5VWludDhBcnJheSB9IGZyb20gJ0Bzb2xhbmEva2l0JztcbmltcG9ydCB7IGFkZFNlbGZGZXRjaEZ1bmN0aW9ucywgYWRkU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zLCB0eXBlIFNlbGZGZXRjaEZ1bmN0aW9ucywgdHlwZSBTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnMgfSBmcm9tICdAc29sYW5hL3Byb2dyYW0tY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgZ2V0TWF0Y2hUaWNrZXRDb2RlYywgZ2V0UXVldWVDb2RlYywgZ2V0VGVuYW50Q29kZWMsIHR5cGUgTWF0Y2hUaWNrZXQsIHR5cGUgTWF0Y2hUaWNrZXRBcmdzLCB0eXBlIFF1ZXVlLCB0eXBlIFF1ZXVlQXJncywgdHlwZSBUZW5hbnQsIHR5cGUgVGVuYW50QXJncyB9IGZyb20gJy4uL2FjY291bnRzJztcbmltcG9ydCB7IGdldENhbmNlbFRpY2tldEluc3RydWN0aW9uQXN5bmMsIGdldENsb3NlVGlja2V0SW5zdHJ1Y3Rpb25Bc3luYywgZ2V0Q29tbWl0VGlja2V0c0luc3RydWN0aW9uLCBnZXRDcmVhdGVUaWNrZXRJbnN0cnVjdGlvbkFzeW5jLCBnZXREZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25Bc3luYywgZ2V0RGVsZWdhdGVUaWNrZXRJbnN0cnVjdGlvbkFzeW5jLCBnZXRGbHVzaE1hdGNoZXNJbnN0cnVjdGlvbiwgZ2V0SW5pdGlhbGl6ZVF1ZXVlSW5zdHJ1Y3Rpb25Bc3luYywgZ2V0SW5pdGlhbGl6ZVRlbmFudEluc3RydWN0aW9uQXN5bmMsIGdldEpvaW5RdWV1ZUluc3RydWN0aW9uQXN5bmMsIGdldFByb2Nlc3NVbmRlbGVnYXRpb25JbnN0cnVjdGlvbiwgZ2V0U2V0dXBUaWNrZXRQZXJtaXNzaW9uSW5zdHJ1Y3Rpb25Bc3luYywgcGFyc2VDYW5jZWxUaWNrZXRJbnN0cnVjdGlvbiwgcGFyc2VDbG9zZVRpY2tldEluc3RydWN0aW9uLCBwYXJzZUNvbW1pdFRpY2tldHNJbnN0cnVjdGlvbiwgcGFyc2VDcmVhdGVUaWNrZXRJbnN0cnVjdGlvbiwgcGFyc2VEZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb24sIHBhcnNlRGVsZWdhdGVUaWNrZXRJbnN0cnVjdGlvbiwgcGFyc2VGbHVzaE1hdGNoZXNJbnN0cnVjdGlvbiwgcGFyc2VJbml0aWFsaXplUXVldWVJbnN0cnVjdGlvbiwgcGFyc2VJbml0aWFsaXplVGVuYW50SW5zdHJ1Y3Rpb24sIHBhcnNlSm9pblF1ZXVlSW5zdHJ1Y3Rpb24sIHBhcnNlUHJvY2Vzc1VuZGVsZWdhdGlvbkluc3RydWN0aW9uLCBwYXJzZVNldHVwVGlja2V0UGVybWlzc2lvbkluc3RydWN0aW9uLCB0eXBlIENhbmNlbFRpY2tldEFzeW5jSW5wdXQsIHR5cGUgQ2xvc2VUaWNrZXRBc3luY0lucHV0LCB0eXBlIENvbW1pdFRpY2tldHNJbnB1dCwgdHlwZSBDcmVhdGVUaWNrZXRBc3luY0lucHV0LCB0eXBlIERlbGVnYXRlUXVldWVBc3luY0lucHV0LCB0eXBlIERlbGVnYXRlVGlja2V0QXN5bmNJbnB1dCwgdHlwZSBGbHVzaE1hdGNoZXNJbnB1dCwgdHlwZSBJbml0aWFsaXplUXVldWVBc3luY0lucHV0LCB0eXBlIEluaXRpYWxpemVUZW5hbnRBc3luY0lucHV0LCB0eXBlIEpvaW5RdWV1ZUFzeW5jSW5wdXQsIHR5cGUgUGFyc2VkQ2FuY2VsVGlja2V0SW5zdHJ1Y3Rpb24sIHR5cGUgUGFyc2VkQ2xvc2VUaWNrZXRJbnN0cnVjdGlvbiwgdHlwZSBQYXJzZWRDb21taXRUaWNrZXRzSW5zdHJ1Y3Rpb24sIHR5cGUgUGFyc2VkQ3JlYXRlVGlja2V0SW5zdHJ1Y3Rpb24sIHR5cGUgUGFyc2VkRGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uLCB0eXBlIFBhcnNlZERlbGVnYXRlVGlja2V0SW5zdHJ1Y3Rpb24sIHR5cGUgUGFyc2VkRmx1c2hNYXRjaGVzSW5zdHJ1Y3Rpb24sIHR5cGUgUGFyc2VkSW5pdGlhbGl6ZVF1ZXVlSW5zdHJ1Y3Rpb24sIHR5cGUgUGFyc2VkSW5pdGlhbGl6ZVRlbmFudEluc3RydWN0aW9uLCB0eXBlIFBhcnNlZEpvaW5RdWV1ZUluc3RydWN0aW9uLCB0eXBlIFBhcnNlZFByb2Nlc3NVbmRlbGVnYXRpb25JbnN0cnVjdGlvbiwgdHlwZSBQYXJzZWRTZXR1cFRpY2tldFBlcm1pc3Npb25JbnN0cnVjdGlvbiwgdHlwZSBQcm9jZXNzVW5kZWxlZ2F0aW9uSW5wdXQsIHR5cGUgU2V0dXBUaWNrZXRQZXJtaXNzaW9uQXN5bmNJbnB1dCB9IGZyb20gJy4uL2luc3RydWN0aW9ucyc7XG5cbmV4cG9ydCBjb25zdCBEVUVMX1BST0dSQU1fQUREUkVTUyA9ICdFZFp6VXdLZDFYMlpXanhMUHB6MWNwRXpNRjdSVVpDNDNQcTY0djFWY0s1WCcgYXMgQWRkcmVzczwnRWRaelV3S2QxWDJaV2p4TFBwejFjcEV6TUY3UlVaQzQzUHE2NHYxVmNLNVgnPjtcblxuZXhwb3J0IGVudW0gRHVlbEFjY291bnQgeyBNYXRjaFRpY2tldCwgUXVldWUsIFRlbmFudCB9XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmeUR1ZWxBY2NvdW50KGFjY291bnQ6IHsgZGF0YTogUmVhZG9ubHlVaW50OEFycmF5IH0gfCBSZWFkb25seVVpbnQ4QXJyYXkpOiBEdWVsQWNjb3VudCB7XG4gICAgY29uc3QgZGF0YSA9ICdkYXRhJyBpbiBhY2NvdW50ID8gYWNjb3VudC5kYXRhIDogYWNjb3VudDtcbiAgICBpZiAoY29udGFpbnNCeXRlcyhkYXRhLCBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKG5ldyBVaW50OEFycmF5KFsxMSwgMTMxLCA0LCAxNTcsIDIwNywgNzksIDEyNiwgNV0pKSwgMCkpIHsgcmV0dXJuIER1ZWxBY2NvdW50Lk1hdGNoVGlja2V0OyB9XG5pZiAoY29udGFpbnNCeXRlcyhkYXRhLCBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKG5ldyBVaW50OEFycmF5KFsyMDQsIDE2NywgNiwgMjQ3LCAyMCwgMzMsIDIsIDE4OF0pKSwgMCkpIHsgcmV0dXJuIER1ZWxBY2NvdW50LlF1ZXVlOyB9XG5pZiAoY29udGFpbnNCeXRlcyhkYXRhLCBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKG5ldyBVaW50OEFycmF5KFs2MSwgNDMsIDIxNSwgNTEsIDIzMiwgMjQyLCAyMDksIDE3MF0pKSwgMCkpIHsgcmV0dXJuIER1ZWxBY2NvdW50LlRlbmFudDsgfVxuICAgIHRocm93IG5ldyBTb2xhbmFFcnJvcihTT0xBTkFfRVJST1JfX1BST0dSQU1fQ0xJRU5UU19fRkFJTEVEX1RPX0lERU5USUZZX0FDQ09VTlQsIHsgYWNjb3VudERhdGE6IGRhdGEsIHByb2dyYW1OYW1lOiBcImR1ZWxcIiB9KTtcbn1cblxuZXhwb3J0IGVudW0gRHVlbEluc3RydWN0aW9uIHsgQ2FuY2VsVGlja2V0LCBDbG9zZVRpY2tldCwgQ29tbWl0VGlja2V0cywgQ3JlYXRlVGlja2V0LCBEZWxlZ2F0ZVF1ZXVlLCBEZWxlZ2F0ZVRpY2tldCwgRmx1c2hNYXRjaGVzLCBJbml0aWFsaXplUXVldWUsIEluaXRpYWxpemVUZW5hbnQsIEpvaW5RdWV1ZSwgUHJvY2Vzc1VuZGVsZWdhdGlvbiwgU2V0dXBUaWNrZXRQZXJtaXNzaW9uIH1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZ5RHVlbEluc3RydWN0aW9uKGluc3RydWN0aW9uOiB7IGRhdGE6IFJlYWRvbmx5VWludDhBcnJheSB9IHwgUmVhZG9ubHlVaW50OEFycmF5KTogRHVlbEluc3RydWN0aW9uIHtcbiAgICBjb25zdCBkYXRhID0gJ2RhdGEnIGluIGluc3RydWN0aW9uID8gaW5zdHJ1Y3Rpb24uZGF0YSA6IGluc3RydWN0aW9uO1xuICAgIGlmIChjb250YWluc0J5dGVzKGRhdGEsIGZpeEVuY29kZXJTaXplKGdldEJ5dGVzRW5jb2RlcigpLCA4KS5lbmNvZGUobmV3IFVpbnQ4QXJyYXkoWzIxNiwgMjgsIDI0NywgMjA2LCAxOTUsIDE3MSwgMTAwLCAxNDNdKSksIDApKSB7IHJldHVybiBEdWVsSW5zdHJ1Y3Rpb24uQ2FuY2VsVGlja2V0OyB9XG5pZiAoY29udGFpbnNCeXRlcyhkYXRhLCBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKG5ldyBVaW50OEFycmF5KFs2NiwgMjA5LCAxMTQsIDE5NywgNzUsIDI3LCAxODIsIDExN10pKSwgMCkpIHsgcmV0dXJuIER1ZWxJbnN0cnVjdGlvbi5DbG9zZVRpY2tldDsgfVxuaWYgKGNvbnRhaW5zQnl0ZXMoZGF0YSwgZml4RW5jb2RlclNpemUoZ2V0Qnl0ZXNFbmNvZGVyKCksIDgpLmVuY29kZShuZXcgVWludDhBcnJheShbMjQ1LCAxOTksIDgxLCAwLCA2MiwgMTMzLCAxOCwgMjJdKSksIDApKSB7IHJldHVybiBEdWVsSW5zdHJ1Y3Rpb24uQ29tbWl0VGlja2V0czsgfVxuaWYgKGNvbnRhaW5zQnl0ZXMoZGF0YSwgZml4RW5jb2RlclNpemUoZ2V0Qnl0ZXNFbmNvZGVyKCksIDgpLmVuY29kZShuZXcgVWludDhBcnJheShbMTYsIDE3OCwgMTIyLCAyNSwgMjEzLCA4NSwgOTYsIDEyOV0pKSwgMCkpIHsgcmV0dXJuIER1ZWxJbnN0cnVjdGlvbi5DcmVhdGVUaWNrZXQ7IH1cbmlmIChjb250YWluc0J5dGVzKGRhdGEsIGZpeEVuY29kZXJTaXplKGdldEJ5dGVzRW5jb2RlcigpLCA4KS5lbmNvZGUobmV3IFVpbnQ4QXJyYXkoWzMxLCAyMDAsIDEzOSwgMTI1LCA5MywgMjM5LCA4MywgODddKSksIDApKSB7IHJldHVybiBEdWVsSW5zdHJ1Y3Rpb24uRGVsZWdhdGVRdWV1ZTsgfVxuaWYgKGNvbnRhaW5zQnl0ZXMoZGF0YSwgZml4RW5jb2RlclNpemUoZ2V0Qnl0ZXNFbmNvZGVyKCksIDgpLmVuY29kZShuZXcgVWludDhBcnJheShbMTk1LCAzLCA3OCwgNjQsIDEyOCwgMjM1LCAyMDksIDE3MV0pKSwgMCkpIHsgcmV0dXJuIER1ZWxJbnN0cnVjdGlvbi5EZWxlZ2F0ZVRpY2tldDsgfVxuaWYgKGNvbnRhaW5zQnl0ZXMoZGF0YSwgZml4RW5jb2RlclNpemUoZ2V0Qnl0ZXNFbmNvZGVyKCksIDgpLmVuY29kZShuZXcgVWludDhBcnJheShbNDksIDE0OCwgMTYzLCA3MSwgNzcsIDYzLCAxOTcsIDc2XSkpLCAwKSkgeyByZXR1cm4gRHVlbEluc3RydWN0aW9uLkZsdXNoTWF0Y2hlczsgfVxuaWYgKGNvbnRhaW5zQnl0ZXMoZGF0YSwgZml4RW5jb2RlclNpemUoZ2V0Qnl0ZXNFbmNvZGVyKCksIDgpLmVuY29kZShuZXcgVWludDhBcnJheShbMTc0LCAxMDIsIDEzMiwgMjMyLCA5MCwgMjAyLCAyNywgMjBdKSksIDApKSB7IHJldHVybiBEdWVsSW5zdHJ1Y3Rpb24uSW5pdGlhbGl6ZVF1ZXVlOyB9XG5pZiAoY29udGFpbnNCeXRlcyhkYXRhLCBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKG5ldyBVaW50OEFycmF5KFs5NCwgMTIwLCAzNCwgMTg2LCA1NywgMTY3LCAyNDEsIDIwNl0pKSwgMCkpIHsgcmV0dXJuIER1ZWxJbnN0cnVjdGlvbi5Jbml0aWFsaXplVGVuYW50OyB9XG5pZiAoY29udGFpbnNCeXRlcyhkYXRhLCBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKG5ldyBVaW50OEFycmF5KFsxNTcsIDExNSwgNDgsIDEwOSwgNjUsIDg2LCAyMDMsIDIzOF0pKSwgMCkpIHsgcmV0dXJuIER1ZWxJbnN0cnVjdGlvbi5Kb2luUXVldWU7IH1cbmlmIChjb250YWluc0J5dGVzKGRhdGEsIGZpeEVuY29kZXJTaXplKGdldEJ5dGVzRW5jb2RlcigpLCA4KS5lbmNvZGUobmV3IFVpbnQ4QXJyYXkoWzE5NiwgMjgsIDQxLCAyMDYsIDQ4LCAzNywgNTEsIDE2N10pKSwgMCkpIHsgcmV0dXJuIER1ZWxJbnN0cnVjdGlvbi5Qcm9jZXNzVW5kZWxlZ2F0aW9uOyB9XG5pZiAoY29udGFpbnNCeXRlcyhkYXRhLCBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKG5ldyBVaW50OEFycmF5KFsxNjQsIDI5LCA3LCAyMzUsIDE4MywgMjIzLCAxMSwgODVdKSksIDApKSB7IHJldHVybiBEdWVsSW5zdHJ1Y3Rpb24uU2V0dXBUaWNrZXRQZXJtaXNzaW9uOyB9XG4gICAgdGhyb3cgbmV3IFNvbGFuYUVycm9yKFNPTEFOQV9FUlJPUl9fUFJPR1JBTV9DTElFTlRTX19GQUlMRURfVE9fSURFTlRJRllfSU5TVFJVQ1RJT04sIHsgaW5zdHJ1Y3Rpb25EYXRhOiBkYXRhLCBwcm9ncmFtTmFtZTogXCJkdWVsXCIgfSk7XG59XG5cbmV4cG9ydCB0eXBlIFBhcnNlZER1ZWxJbnN0cnVjdGlvbjxUUHJvZ3JhbSBleHRlbmRzIHN0cmluZyA9ICdFZFp6VXdLZDFYMlpXanhMUHB6MWNwRXpNRjdSVVpDNDNQcTY0djFWY0s1WCc+ID1cbnwgeyBpbnN0cnVjdGlvblR5cGU6IER1ZWxJbnN0cnVjdGlvbi5DYW5jZWxUaWNrZXQgfSAmIFBhcnNlZENhbmNlbFRpY2tldEluc3RydWN0aW9uPFRQcm9ncmFtPlxufCB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLkNsb3NlVGlja2V0IH0gJiBQYXJzZWRDbG9zZVRpY2tldEluc3RydWN0aW9uPFRQcm9ncmFtPlxufCB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLkNvbW1pdFRpY2tldHMgfSAmIFBhcnNlZENvbW1pdFRpY2tldHNJbnN0cnVjdGlvbjxUUHJvZ3JhbT5cbnwgeyBpbnN0cnVjdGlvblR5cGU6IER1ZWxJbnN0cnVjdGlvbi5DcmVhdGVUaWNrZXQgfSAmIFBhcnNlZENyZWF0ZVRpY2tldEluc3RydWN0aW9uPFRQcm9ncmFtPlxufCB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLkRlbGVnYXRlUXVldWUgfSAmIFBhcnNlZERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbjxUUHJvZ3JhbT5cbnwgeyBpbnN0cnVjdGlvblR5cGU6IER1ZWxJbnN0cnVjdGlvbi5EZWxlZ2F0ZVRpY2tldCB9ICYgUGFyc2VkRGVsZWdhdGVUaWNrZXRJbnN0cnVjdGlvbjxUUHJvZ3JhbT5cbnwgeyBpbnN0cnVjdGlvblR5cGU6IER1ZWxJbnN0cnVjdGlvbi5GbHVzaE1hdGNoZXMgfSAmIFBhcnNlZEZsdXNoTWF0Y2hlc0luc3RydWN0aW9uPFRQcm9ncmFtPlxufCB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLkluaXRpYWxpemVRdWV1ZSB9ICYgUGFyc2VkSW5pdGlhbGl6ZVF1ZXVlSW5zdHJ1Y3Rpb248VFByb2dyYW0+XG58IHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uSW5pdGlhbGl6ZVRlbmFudCB9ICYgUGFyc2VkSW5pdGlhbGl6ZVRlbmFudEluc3RydWN0aW9uPFRQcm9ncmFtPlxufCB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLkpvaW5RdWV1ZSB9ICYgUGFyc2VkSm9pblF1ZXVlSW5zdHJ1Y3Rpb248VFByb2dyYW0+XG58IHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uUHJvY2Vzc1VuZGVsZWdhdGlvbiB9ICYgUGFyc2VkUHJvY2Vzc1VuZGVsZWdhdGlvbkluc3RydWN0aW9uPFRQcm9ncmFtPlxufCB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLlNldHVwVGlja2V0UGVybWlzc2lvbiB9ICYgUGFyc2VkU2V0dXBUaWNrZXRQZXJtaXNzaW9uSW5zdHJ1Y3Rpb248VFByb2dyYW0+XG5cblxuICAgICAgICBleHBvcnQgZnVuY3Rpb24gcGFyc2VEdWVsSW5zdHJ1Y3Rpb248VFByb2dyYW0gZXh0ZW5kcyBzdHJpbmc+KFxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb246IEluc3RydWN0aW9uPFRQcm9ncmFtPiBcbiAgICAgICAgICAgICAgICAmIEluc3RydWN0aW9uV2l0aERhdGE8UmVhZG9ubHlVaW50OEFycmF5PlxuICAgICAgICApOiBQYXJzZWREdWVsSW5zdHJ1Y3Rpb248VFByb2dyYW0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RydWN0aW9uVHlwZSA9IGlkZW50aWZ5RHVlbEluc3RydWN0aW9uKGluc3RydWN0aW9uKTtcbiAgICAgICAgICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb25UeXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBEdWVsSW5zdHJ1Y3Rpb24uQ2FuY2VsVGlja2V0OiB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMoaW5zdHJ1Y3Rpb24pO1xucmV0dXJuIHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uQ2FuY2VsVGlja2V0LCAuLi5wYXJzZUNhbmNlbFRpY2tldEluc3RydWN0aW9uKGluc3RydWN0aW9uKSB9OyB9XG5jYXNlIER1ZWxJbnN0cnVjdGlvbi5DbG9zZVRpY2tldDogeyBhc3NlcnRJc0luc3RydWN0aW9uV2l0aEFjY291bnRzKGluc3RydWN0aW9uKTtcbnJldHVybiB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLkNsb3NlVGlja2V0LCAuLi5wYXJzZUNsb3NlVGlja2V0SW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pIH07IH1cbmNhc2UgRHVlbEluc3RydWN0aW9uLkNvbW1pdFRpY2tldHM6IHsgYXNzZXJ0SXNJbnN0cnVjdGlvbldpdGhBY2NvdW50cyhpbnN0cnVjdGlvbik7XG5yZXR1cm4geyBpbnN0cnVjdGlvblR5cGU6IER1ZWxJbnN0cnVjdGlvbi5Db21taXRUaWNrZXRzLCAuLi5wYXJzZUNvbW1pdFRpY2tldHNJbnN0cnVjdGlvbihpbnN0cnVjdGlvbikgfTsgfVxuY2FzZSBEdWVsSW5zdHJ1Y3Rpb24uQ3JlYXRlVGlja2V0OiB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMoaW5zdHJ1Y3Rpb24pO1xucmV0dXJuIHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uQ3JlYXRlVGlja2V0LCAuLi5wYXJzZUNyZWF0ZVRpY2tldEluc3RydWN0aW9uKGluc3RydWN0aW9uKSB9OyB9XG5jYXNlIER1ZWxJbnN0cnVjdGlvbi5EZWxlZ2F0ZVF1ZXVlOiB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMoaW5zdHJ1Y3Rpb24pO1xucmV0dXJuIHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uRGVsZWdhdGVRdWV1ZSwgLi4ucGFyc2VEZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pIH07IH1cbmNhc2UgRHVlbEluc3RydWN0aW9uLkRlbGVnYXRlVGlja2V0OiB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMoaW5zdHJ1Y3Rpb24pO1xucmV0dXJuIHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uRGVsZWdhdGVUaWNrZXQsIC4uLnBhcnNlRGVsZWdhdGVUaWNrZXRJbnN0cnVjdGlvbihpbnN0cnVjdGlvbikgfTsgfVxuY2FzZSBEdWVsSW5zdHJ1Y3Rpb24uRmx1c2hNYXRjaGVzOiB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMoaW5zdHJ1Y3Rpb24pO1xucmV0dXJuIHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uRmx1c2hNYXRjaGVzLCAuLi5wYXJzZUZsdXNoTWF0Y2hlc0luc3RydWN0aW9uKGluc3RydWN0aW9uKSB9OyB9XG5jYXNlIER1ZWxJbnN0cnVjdGlvbi5Jbml0aWFsaXplUXVldWU6IHsgYXNzZXJ0SXNJbnN0cnVjdGlvbldpdGhBY2NvdW50cyhpbnN0cnVjdGlvbik7XG5yZXR1cm4geyBpbnN0cnVjdGlvblR5cGU6IER1ZWxJbnN0cnVjdGlvbi5Jbml0aWFsaXplUXVldWUsIC4uLnBhcnNlSW5pdGlhbGl6ZVF1ZXVlSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pIH07IH1cbmNhc2UgRHVlbEluc3RydWN0aW9uLkluaXRpYWxpemVUZW5hbnQ6IHsgYXNzZXJ0SXNJbnN0cnVjdGlvbldpdGhBY2NvdW50cyhpbnN0cnVjdGlvbik7XG5yZXR1cm4geyBpbnN0cnVjdGlvblR5cGU6IER1ZWxJbnN0cnVjdGlvbi5Jbml0aWFsaXplVGVuYW50LCAuLi5wYXJzZUluaXRpYWxpemVUZW5hbnRJbnN0cnVjdGlvbihpbnN0cnVjdGlvbikgfTsgfVxuY2FzZSBEdWVsSW5zdHJ1Y3Rpb24uSm9pblF1ZXVlOiB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMoaW5zdHJ1Y3Rpb24pO1xucmV0dXJuIHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uSm9pblF1ZXVlLCAuLi5wYXJzZUpvaW5RdWV1ZUluc3RydWN0aW9uKGluc3RydWN0aW9uKSB9OyB9XG5jYXNlIER1ZWxJbnN0cnVjdGlvbi5Qcm9jZXNzVW5kZWxlZ2F0aW9uOiB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMoaW5zdHJ1Y3Rpb24pO1xucmV0dXJuIHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uUHJvY2Vzc1VuZGVsZWdhdGlvbiwgLi4ucGFyc2VQcm9jZXNzVW5kZWxlZ2F0aW9uSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pIH07IH1cbmNhc2UgRHVlbEluc3RydWN0aW9uLlNldHVwVGlja2V0UGVybWlzc2lvbjogeyBhc3NlcnRJc0luc3RydWN0aW9uV2l0aEFjY291bnRzKGluc3RydWN0aW9uKTtcbnJldHVybiB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLlNldHVwVGlja2V0UGVybWlzc2lvbiwgLi4ucGFyc2VTZXR1cFRpY2tldFBlcm1pc3Npb25JbnN0cnVjdGlvbihpbnN0cnVjdGlvbikgfTsgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBTb2xhbmFFcnJvcihTT0xBTkFfRVJST1JfX1BST0dSQU1fQ0xJRU5UU19fVU5SRUNPR05JWkVEX0lOU1RSVUNUSU9OX1RZUEUsIHsgaW5zdHJ1Y3Rpb25UeXBlOiBpbnN0cnVjdGlvblR5cGUgYXMgc3RyaW5nLCBwcm9ncmFtTmFtZTogXCJkdWVsXCIgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuZXhwb3J0IHR5cGUgRHVlbFBsdWdpbiA9IHsgYWNjb3VudHM6IER1ZWxQbHVnaW5BY2NvdW50czsgaW5zdHJ1Y3Rpb25zOiBEdWVsUGx1Z2luSW5zdHJ1Y3Rpb25zOyB9XG5cbmV4cG9ydCB0eXBlIER1ZWxQbHVnaW5BY2NvdW50cyA9IHsgbWF0Y2hUaWNrZXQ6IFJldHVyblR5cGU8dHlwZW9mIGdldE1hdGNoVGlja2V0Q29kZWM+ICYgU2VsZkZldGNoRnVuY3Rpb25zPE1hdGNoVGlja2V0QXJncywgTWF0Y2hUaWNrZXQ+OyBxdWV1ZTogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0UXVldWVDb2RlYz4gJiBTZWxmRmV0Y2hGdW5jdGlvbnM8UXVldWVBcmdzLCBRdWV1ZT47IHRlbmFudDogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0VGVuYW50Q29kZWM+ICYgU2VsZkZldGNoRnVuY3Rpb25zPFRlbmFudEFyZ3MsIFRlbmFudD47IH1cblxuZXhwb3J0IHR5cGUgRHVlbFBsdWdpbkluc3RydWN0aW9ucyA9IHsgY2FuY2VsVGlja2V0OiAoaW5wdXQ6IENhbmNlbFRpY2tldEFzeW5jSW5wdXQpID0+IFJldHVyblR5cGU8dHlwZW9mIGdldENhbmNlbFRpY2tldEluc3RydWN0aW9uQXN5bmM+ICYgU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zOyBjbG9zZVRpY2tldDogKGlucHV0OiBDbG9zZVRpY2tldEFzeW5jSW5wdXQpID0+IFJldHVyblR5cGU8dHlwZW9mIGdldENsb3NlVGlja2V0SW5zdHJ1Y3Rpb25Bc3luYz4gJiBTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnM7IGNvbW1pdFRpY2tldHM6IChpbnB1dDogTWFrZU9wdGlvbmFsPENvbW1pdFRpY2tldHNJbnB1dCwgXCJwYXllclwiPikgPT4gUmV0dXJuVHlwZTx0eXBlb2YgZ2V0Q29tbWl0VGlja2V0c0luc3RydWN0aW9uPiAmIFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9uczsgY3JlYXRlVGlja2V0OiAoaW5wdXQ6IENyZWF0ZVRpY2tldEFzeW5jSW5wdXQpID0+IFJldHVyblR5cGU8dHlwZW9mIGdldENyZWF0ZVRpY2tldEluc3RydWN0aW9uQXN5bmM+ICYgU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zOyBkZWxlZ2F0ZVF1ZXVlOiAoaW5wdXQ6IE1ha2VPcHRpb25hbDxEZWxlZ2F0ZVF1ZXVlQXN5bmNJbnB1dCwgXCJwYXllclwiPikgPT4gUmV0dXJuVHlwZTx0eXBlb2YgZ2V0RGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uQXN5bmM+ICYgU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zOyBkZWxlZ2F0ZVRpY2tldDogKGlucHV0OiBNYWtlT3B0aW9uYWw8RGVsZWdhdGVUaWNrZXRBc3luY0lucHV0LCBcInBheWVyXCI+KSA9PiBSZXR1cm5UeXBlPHR5cGVvZiBnZXREZWxlZ2F0ZVRpY2tldEluc3RydWN0aW9uQXN5bmM+ICYgU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zOyBmbHVzaE1hdGNoZXM6IChpbnB1dDogRmx1c2hNYXRjaGVzSW5wdXQpID0+IFJldHVyblR5cGU8dHlwZW9mIGdldEZsdXNoTWF0Y2hlc0luc3RydWN0aW9uPiAmIFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9uczsgaW5pdGlhbGl6ZVF1ZXVlOiAoaW5wdXQ6IEluaXRpYWxpemVRdWV1ZUFzeW5jSW5wdXQpID0+IFJldHVyblR5cGU8dHlwZW9mIGdldEluaXRpYWxpemVRdWV1ZUluc3RydWN0aW9uQXN5bmM+ICYgU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zOyBpbml0aWFsaXplVGVuYW50OiAoaW5wdXQ6IEluaXRpYWxpemVUZW5hbnRBc3luY0lucHV0KSA9PiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRJbml0aWFsaXplVGVuYW50SW5zdHJ1Y3Rpb25Bc3luYz4gJiBTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnM7IGpvaW5RdWV1ZTogKGlucHV0OiBKb2luUXVldWVBc3luY0lucHV0KSA9PiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRKb2luUXVldWVJbnN0cnVjdGlvbkFzeW5jPiAmIFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9uczsgcHJvY2Vzc1VuZGVsZWdhdGlvbjogKGlucHV0OiBNYWtlT3B0aW9uYWw8UHJvY2Vzc1VuZGVsZWdhdGlvbklucHV0LCBcInBheWVyXCI+KSA9PiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRQcm9jZXNzVW5kZWxlZ2F0aW9uSW5zdHJ1Y3Rpb24+ICYgU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zOyBzZXR1cFRpY2tldFBlcm1pc3Npb246IChpbnB1dDogU2V0dXBUaWNrZXRQZXJtaXNzaW9uQXN5bmNJbnB1dCkgPT4gUmV0dXJuVHlwZTx0eXBlb2YgZ2V0U2V0dXBUaWNrZXRQZXJtaXNzaW9uSW5zdHJ1Y3Rpb25Bc3luYz4gJiBTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnM7IH1cblxuZXhwb3J0IHR5cGUgRHVlbFBsdWdpblJlcXVpcmVtZW50cyA9IENsaWVudFdpdGhScGM8R2V0QWNjb3VudEluZm9BcGkgJiBHZXRNdWx0aXBsZUFjY291bnRzQXBpPiAmIENsaWVudFdpdGhQYXllciAmIENsaWVudFdpdGhUcmFuc2FjdGlvblBsYW5uaW5nICYgQ2xpZW50V2l0aFRyYW5zYWN0aW9uU2VuZGluZ1xuXG5leHBvcnQgZnVuY3Rpb24gZHVlbFByb2dyYW0oKSB7XG4gICAgcmV0dXJuIDxUIGV4dGVuZHMgRHVlbFBsdWdpblJlcXVpcmVtZW50cz4oY2xpZW50OiBUKSA9PiB7XG4gICAgICAgIHJldHVybiB7IC4uLmNsaWVudCwgZHVlbDogPER1ZWxQbHVnaW4+eyBhY2NvdW50czogeyBtYXRjaFRpY2tldDogYWRkU2VsZkZldGNoRnVuY3Rpb25zKGNsaWVudCwgZ2V0TWF0Y2hUaWNrZXRDb2RlYygpKSwgcXVldWU6IGFkZFNlbGZGZXRjaEZ1bmN0aW9ucyhjbGllbnQsIGdldFF1ZXVlQ29kZWMoKSksIHRlbmFudDogYWRkU2VsZkZldGNoRnVuY3Rpb25zKGNsaWVudCwgZ2V0VGVuYW50Q29kZWMoKSkgfSwgaW5zdHJ1Y3Rpb25zOiB7IGNhbmNlbFRpY2tldDogaW5wdXQgPT4gYWRkU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zKGNsaWVudCwgZ2V0Q2FuY2VsVGlja2V0SW5zdHJ1Y3Rpb25Bc3luYyhpbnB1dCkpLCBjbG9zZVRpY2tldDogaW5wdXQgPT4gYWRkU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zKGNsaWVudCwgZ2V0Q2xvc2VUaWNrZXRJbnN0cnVjdGlvbkFzeW5jKGlucHV0KSksIGNvbW1pdFRpY2tldHM6IGlucHV0ID0+IGFkZFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9ucyhjbGllbnQsIGdldENvbW1pdFRpY2tldHNJbnN0cnVjdGlvbih7IC4uLmlucHV0LCBwYXllcjogaW5wdXQucGF5ZXIgPz8gY2xpZW50LnBheWVyIH0pKSwgY3JlYXRlVGlja2V0OiBpbnB1dCA9PiBhZGRTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnMoY2xpZW50LCBnZXRDcmVhdGVUaWNrZXRJbnN0cnVjdGlvbkFzeW5jKGlucHV0KSksIGRlbGVnYXRlUXVldWU6IGlucHV0ID0+IGFkZFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9ucyhjbGllbnQsIGdldERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbkFzeW5jKHsgLi4uaW5wdXQsIHBheWVyOiBpbnB1dC5wYXllciA/PyBjbGllbnQucGF5ZXIgfSkpLCBkZWxlZ2F0ZVRpY2tldDogaW5wdXQgPT4gYWRkU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zKGNsaWVudCwgZ2V0RGVsZWdhdGVUaWNrZXRJbnN0cnVjdGlvbkFzeW5jKHsgLi4uaW5wdXQsIHBheWVyOiBpbnB1dC5wYXllciA/PyBjbGllbnQucGF5ZXIgfSkpLCBmbHVzaE1hdGNoZXM6IGlucHV0ID0+IGFkZFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9ucyhjbGllbnQsIGdldEZsdXNoTWF0Y2hlc0luc3RydWN0aW9uKGlucHV0KSksIGluaXRpYWxpemVRdWV1ZTogaW5wdXQgPT4gYWRkU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zKGNsaWVudCwgZ2V0SW5pdGlhbGl6ZVF1ZXVlSW5zdHJ1Y3Rpb25Bc3luYyhpbnB1dCkpLCBpbml0aWFsaXplVGVuYW50OiBpbnB1dCA9PiBhZGRTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnMoY2xpZW50LCBnZXRJbml0aWFsaXplVGVuYW50SW5zdHJ1Y3Rpb25Bc3luYyhpbnB1dCkpLCBqb2luUXVldWU6IGlucHV0ID0+IGFkZFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9ucyhjbGllbnQsIGdldEpvaW5RdWV1ZUluc3RydWN0aW9uQXN5bmMoaW5wdXQpKSwgcHJvY2Vzc1VuZGVsZWdhdGlvbjogaW5wdXQgPT4gYWRkU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zKGNsaWVudCwgZ2V0UHJvY2Vzc1VuZGVsZWdhdGlvbkluc3RydWN0aW9uKHsgLi4uaW5wdXQsIHBheWVyOiBpbnB1dC5wYXllciA/PyBjbGllbnQucGF5ZXIuYWRkcmVzcyB9KSksIHNldHVwVGlja2V0UGVybWlzc2lvbjogaW5wdXQgPT4gYWRkU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zKGNsaWVudCwgZ2V0U2V0dXBUaWNrZXRQZXJtaXNzaW9uSW5zdHJ1Y3Rpb25Bc3luYyhpbnB1dCkpIH0gfSB9O1xuICAgIH07XG59XG5cbnR5cGUgTWFrZU9wdGlvbmFsPFQsIEsgZXh0ZW5kcyBrZXlvZiBUPiA9IE9taXQ8VCwgSz4gJiBQYXJ0aWFsPFBpY2s8VCwgSz4+OyJdfQ==
|
|
154
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9nZW5lcmF0ZWQvZHVlbC9wcm9ncmFtcy9kdWVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSx5REFBeUQsRUFBRSw2REFBNkQsRUFBRSw0REFBNEQsRUFBRSxXQUFXLEVBQTJQLE1BQU0sYUFBYSxDQUFDO0FBQzVpQixPQUFPLEVBQUUscUJBQXFCLEVBQUUsMkJBQTJCLEVBQTBELE1BQU0sNkJBQTZCLENBQUM7QUFDekosT0FBTyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQW9HLE1BQU0sYUFBYSxDQUFDO0FBQ25MLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSw4QkFBOEIsRUFBRSwyQkFBMkIsRUFBRSwrQkFBK0IsRUFBRSxnQ0FBZ0MsRUFBRSxpQ0FBaUMsRUFBRSwwQkFBMEIsRUFBRSxrQ0FBa0MsRUFBRSxtQ0FBbUMsRUFBRSw0QkFBNEIsRUFBRSxpQ0FBaUMsRUFBRSx1Q0FBdUMsRUFBRSx3Q0FBd0MsRUFBRSw0QkFBNEIsRUFBRSwyQkFBMkIsRUFBRSw2QkFBNkIsRUFBRSw0QkFBNEIsRUFBRSw2QkFBNkIsRUFBRSw4QkFBOEIsRUFBRSw0QkFBNEIsRUFBRSwrQkFBK0IsRUFBRSxnQ0FBZ0MsRUFBRSx5QkFBeUIsRUFBRSxtQ0FBbUMsRUFBRSxvQ0FBb0MsRUFBRSxxQ0FBcUMsRUFBODNCLE1BQU0saUJBQWlCLENBQUM7QUFFL3ZELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLDhDQUF5RyxDQUFDO0FBRTlJLE1BQU0sQ0FBTixJQUFZLFdBQTBDO0FBQXRELFdBQVksV0FBVztJQUFHLDJEQUFXLENBQUE7SUFBRSwrQ0FBSyxDQUFBO0lBQUUsaURBQU0sQ0FBQTtBQUFDLENBQUMsRUFBMUMsV0FBVyxLQUFYLFdB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QUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQUMsT0FBTyxlQUFlLENBQUMsV0FBVyxDQUFDO0lBQUMsQ0FBQztJQUN2SyxJQUFJLGFBQWEsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUFDLE9BQU8sZUFBZSxDQUFDLGFBQWEsQ0FBQztJQUFDLENBQUM7SUFDdEssSUFBSSxhQUFhLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFBQyxPQUFPLGVBQWUsQ0FBQyxZQUFZLENBQUM7SUFBQyxDQUFDO0lBQ3ZLLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQUMsT0FBTyxlQUFlLENBQUMsYUFBYSxDQUFDO0lBQUMsQ0FB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KlxuICogVGhpcyBjb2RlIHdhcyBBVVRPR0VORVJBVEVEIHVzaW5nIHRoZSBDb2RhbWEgbGlicmFyeS5cbiAqIFBsZWFzZSBETyBOT1QgRURJVCBUSElTIEZJTEUsIGluc3RlYWQgdXNlIHZpc2l0b3JzXG4gKiB0byBhZGQgZmVhdHVyZXMsIHRoZW4gcmVydW4gQ29kYW1hIHRvIHVwZGF0ZSBpdC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jb2RhbWEtaWRsL2NvZGFtYVxuICovXG5cbmltcG9ydCB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMsIGNvbnRhaW5zQnl0ZXMsIGZpeEVuY29kZXJTaXplLCBnZXRCeXRlc0VuY29kZXIsIFNPTEFOQV9FUlJPUl9fUFJPR1JBTV9DTElFTlRTX19GQUlMRURfVE9fSURFTlRJRllfQUNDT1VOVCwgU09MQU5BX0VSUk9SX19QUk9HUkFNX0NMSUVOVFNfX0ZBSUxFRF9UT19JREVOVElGWV9JTlNUUlVDVElPTiwgU09MQU5BX0VSUk9SX19QUk9HUkFNX0NMSUVOVFNfX1VOUkVDT0dOSVpFRF9JTlNUUlVDVElPTl9UWVBFLCBTb2xhbmFFcnJvciwgdHlwZSBBZGRyZXNzLCB0eXBlIENsaWVudFdpdGhQYXllciwgdHlwZSBDbGllbnRXaXRoUnBjLCB0eXBlIENsaWVudFdpdGhUcmFuc2FjdGlvblBsYW5uaW5nLCB0eXBlIENsaWVudFdpdGhUcmFuc2FjdGlvblNlbmRpbmcsIHR5cGUgR2V0QWNjb3VudEluZm9BcGksIHR5cGUgR2V0TXVsdGlwbGVBY2NvdW50c0FwaSwgdHlwZSBJbnN0cnVjdGlvbiwgdHlwZSBJbnN0cnVjdGlvbldpdGhEYXRhLCB0eXBlIFJlYWRvbmx5VWludDhBcnJheSB9IGZyb20gJ0Bzb2xhbmEva2l0JztcbmltcG9ydCB7IGFkZFNlbGZGZXRjaEZ1bmN0aW9ucywgYWRkU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zLCB0eXBlIFNlbGZGZXRjaEZ1bmN0aW9ucywgdHlwZSBTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnMgfSBmcm9tICdAc29sYW5hL3Byb2dyYW0tY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgZ2V0TWF0Y2hUaWNrZXRDb2RlYywgZ2V0UXVldWVDb2RlYywgZ2V0VGVuYW50Q29kZWMsIHR5cGUgTWF0Y2hUaWNrZXQsIHR5cGUgTWF0Y2hUaWNrZXRBcmdzLCB0eXBlIFF1ZXVlLCB0eXBlIFF1ZXVlQXJncywgdHlwZSBUZW5hbnQsIHR5cGUgVGVuYW50QXJncyB9IGZyb20gJy4uL2FjY291bnRzJztcbmltcG9ydCB7IGdldENhbmNlbFRpY2tldEluc3RydWN0aW9uQXN5bmMsIGdldENsb3NlVGlja2V0SW5zdHJ1Y3Rpb25Bc3luYywgZ2V0Q29tbWl0VGlja2V0c0luc3RydWN0aW9uLCBnZXRDcmVhdGVUaWNrZXRJbnN0cnVjdGlvbkFzeW5jLCBnZXREZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb25Bc3luYywgZ2V0RGVsZWdhdGVUaWNrZXRJbnN0cnVjdGlvbkFzeW5jLCBnZXRGbHVzaE1hdGNoZXNJbnN0cnVjdGlvbiwgZ2V0SW5pdGlhbGl6ZVF1ZXVlSW5zdHJ1Y3Rpb25Bc3luYywgZ2V0SW5pdGlhbGl6ZVRlbmFudEluc3RydWN0aW9uQXN5bmMsIGdldEpvaW5RdWV1ZUluc3RydWN0aW9uQXN5bmMsIGdldFByb2Nlc3NVbmRlbGVnYXRpb25JbnN0cnVjdGlvbiwgZ2V0U2V0dXBRdWV1ZVBlcm1pc3Npb25JbnN0cnVjdGlvbkFzeW5jLCBnZXRTZXR1cFRpY2tldFBlcm1pc3Npb25JbnN0cnVjdGlvbkFzeW5jLCBwYXJzZUNhbmNlbFRpY2tldEluc3RydWN0aW9uLCBwYXJzZUNsb3NlVGlja2V0SW5zdHJ1Y3Rpb24sIHBhcnNlQ29tbWl0VGlja2V0c0luc3RydWN0aW9uLCBwYXJzZUNyZWF0ZVRpY2tldEluc3RydWN0aW9uLCBwYXJzZURlbGVnYXRlUXVldWVJbnN0cnVjdGlvbiwgcGFyc2VEZWxlZ2F0ZVRpY2tldEluc3RydWN0aW9uLCBwYXJzZUZsdXNoTWF0Y2hlc0luc3RydWN0aW9uLCBwYXJzZUluaXRpYWxpemVRdWV1ZUluc3RydWN0aW9uLCBwYXJzZUluaXRpYWxpemVUZW5hbnRJbnN0cnVjdGlvbiwgcGFyc2VKb2luUXVldWVJbnN0cnVjdGlvbiwgcGFyc2VQcm9jZXNzVW5kZWxlZ2F0aW9uSW5zdHJ1Y3Rpb24sIHBhcnNlU2V0dXBRdWV1ZVBlcm1pc3Npb25JbnN0cnVjdGlvbiwgcGFyc2VTZXR1cFRpY2tldFBlcm1pc3Npb25JbnN0cnVjdGlvbiwgdHlwZSBDYW5jZWxUaWNrZXRBc3luY0lucHV0LCB0eXBlIENsb3NlVGlja2V0QXN5bmNJbnB1dCwgdHlwZSBDb21taXRUaWNrZXRzSW5wdXQsIHR5cGUgQ3JlYXRlVGlja2V0QXN5bmNJbnB1dCwgdHlwZSBEZWxlZ2F0ZVF1ZXVlQXN5bmNJbnB1dCwgdHlwZSBEZWxlZ2F0ZVRpY2tldEFzeW5jSW5wdXQsIHR5cGUgRmx1c2hNYXRjaGVzSW5wdXQsIHR5cGUgSW5pdGlhbGl6ZVF1ZXVlQXN5bmNJbnB1dCwgdHlwZSBJbml0aWFsaXplVGVuYW50QXN5bmNJbnB1dCwgdHlwZSBKb2luUXVldWVBc3luY0lucHV0LCB0eXBlIFBhcnNlZENhbmNlbFRpY2tldEluc3RydWN0aW9uLCB0eXBlIFBhcnNlZENsb3NlVGlja2V0SW5zdHJ1Y3Rpb24sIHR5cGUgUGFyc2VkQ29tbWl0VGlja2V0c0luc3RydWN0aW9uLCB0eXBlIFBhcnNlZENyZWF0ZVRpY2tldEluc3RydWN0aW9uLCB0eXBlIFBhcnNlZERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbiwgdHlwZSBQYXJzZWREZWxlZ2F0ZVRpY2tldEluc3RydWN0aW9uLCB0eXBlIFBhcnNlZEZsdXNoTWF0Y2hlc0luc3RydWN0aW9uLCB0eXBlIFBhcnNlZEluaXRpYWxpemVRdWV1ZUluc3RydWN0aW9uLCB0eXBlIFBhcnNlZEluaXRpYWxpemVUZW5hbnRJbnN0cnVjdGlvbiwgdHlwZSBQYXJzZWRKb2luUXVldWVJbnN0cnVjdGlvbiwgdHlwZSBQYXJzZWRQcm9jZXNzVW5kZWxlZ2F0aW9uSW5zdHJ1Y3Rpb24sIHR5cGUgUGFyc2VkU2V0dXBRdWV1ZVBlcm1pc3Npb25JbnN0cnVjdGlvbiwgdHlwZSBQYXJzZWRTZXR1cFRpY2tldFBlcm1pc3Npb25JbnN0cnVjdGlvbiwgdHlwZSBQcm9jZXNzVW5kZWxlZ2F0aW9uSW5wdXQsIHR5cGUgU2V0dXBRdWV1ZVBlcm1pc3Npb25Bc3luY0lucHV0LCB0eXBlIFNldHVwVGlja2V0UGVybWlzc2lvbkFzeW5jSW5wdXQgfSBmcm9tICcuLi9pbnN0cnVjdGlvbnMnO1xuXG5leHBvcnQgY29uc3QgRFVFTF9QUk9HUkFNX0FERFJFU1MgPSAnRWRaelV3S2QxWDJaV2p4TFBwejFjcEV6TUY3UlVaQzQzUHE2NHYxVmNLNVgnIGFzIEFkZHJlc3M8J0VkWnpVd0tkMVgyWldqeExQcHoxY3BFek1GN1JVWkM0M1BxNjR2MVZjSzVYJz47XG5cbmV4cG9ydCBlbnVtIER1ZWxBY2NvdW50IHsgTWF0Y2hUaWNrZXQsIFF1ZXVlLCBUZW5hbnQgfVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZnlEdWVsQWNjb3VudChhY2NvdW50OiB7IGRhdGE6IFJlYWRvbmx5VWludDhBcnJheSB9IHwgUmVhZG9ubHlVaW50OEFycmF5KTogRHVlbEFjY291bnQge1xuICAgIGNvbnN0IGRhdGEgPSAnZGF0YScgaW4gYWNjb3VudCA/IGFjY291bnQuZGF0YSA6IGFjY291bnQ7XG4gICAgaWYgKGNvbnRhaW5zQnl0ZXMoZGF0YSwgZml4RW5jb2RlclNpemUoZ2V0Qnl0ZXNFbmNvZGVyKCksIDgpLmVuY29kZShuZXcgVWludDhBcnJheShbMTEsIDEzMSwgNCwgMTU3LCAyMDcsIDc5LCAxMjYsIDVdKSksIDApKSB7IHJldHVybiBEdWVsQWNjb3VudC5NYXRjaFRpY2tldDsgfVxuaWYgKGNvbnRhaW5zQnl0ZXMoZGF0YSwgZml4RW5jb2RlclNpemUoZ2V0Qnl0ZXNFbmNvZGVyKCksIDgpLmVuY29kZShuZXcgVWludDhBcnJheShbMjA0LCAxNjcsIDYsIDI0NywgMjAsIDMzLCAyLCAxODhdKSksIDApKSB7IHJldHVybiBEdWVsQWNjb3VudC5RdWV1ZTsgfVxuaWYgKGNvbnRhaW5zQnl0ZXMoZGF0YSwgZml4RW5jb2RlclNpemUoZ2V0Qnl0ZXNFbmNvZGVyKCksIDgpLmVuY29kZShuZXcgVWludDhBcnJheShbNjEsIDQzLCAyMTUsIDUxLCAyMzIsIDI0MiwgMjA5LCAxNzBdKSksIDApKSB7IHJldHVybiBEdWVsQWNjb3VudC5UZW5hbnQ7IH1cbiAgICB0aHJvdyBuZXcgU29sYW5hRXJyb3IoU09MQU5BX0VSUk9SX19QUk9HUkFNX0NMSUVOVFNfX0ZBSUxFRF9UT19JREVOVElGWV9BQ0NPVU5ULCB7IGFjY291bnREYXRhOiBkYXRhLCBwcm9ncmFtTmFtZTogXCJkdWVsXCIgfSk7XG59XG5cbmV4cG9ydCBlbnVtIER1ZWxJbnN0cnVjdGlvbiB7IENhbmNlbFRpY2tldCwgQ2xvc2VUaWNrZXQsIENvbW1pdFRpY2tldHMsIENyZWF0ZVRpY2tldCwgRGVsZWdhdGVRdWV1ZSwgRGVsZWdhdGVUaWNrZXQsIEZsdXNoTWF0Y2hlcywgSW5pdGlhbGl6ZVF1ZXVlLCBJbml0aWFsaXplVGVuYW50LCBKb2luUXVldWUsIFByb2Nlc3NVbmRlbGVnYXRpb24sIFNldHVwUXVldWVQZXJtaXNzaW9uLCBTZXR1cFRpY2tldFBlcm1pc3Npb24gfVxuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZnlEdWVsSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb246IHsgZGF0YTogUmVhZG9ubHlVaW50OEFycmF5IH0gfCBSZWFkb25seVVpbnQ4QXJyYXkpOiBEdWVsSW5zdHJ1Y3Rpb24ge1xuICAgIGNvbnN0IGRhdGEgPSAnZGF0YScgaW4gaW5zdHJ1Y3Rpb24gPyBpbnN0cnVjdGlvbi5kYXRhIDogaW5zdHJ1Y3Rpb247XG4gICAgaWYgKGNvbnRhaW5zQnl0ZXMoZGF0YSwgZml4RW5jb2RlclNpemUoZ2V0Qnl0ZXNFbmNvZGVyKCksIDgpLmVuY29kZShuZXcgVWludDhBcnJheShbMjE2LCAyOCwgMjQ3LCAyMDYsIDE5NSwgMTcxLCAxMDAsIDE0M10pKSwgMCkpIHsgcmV0dXJuIER1ZWxJbnN0cnVjdGlvbi5DYW5jZWxUaWNrZXQ7IH1cbmlmIChjb250YWluc0J5dGVzKGRhdGEsIGZpeEVuY29kZXJTaXplKGdldEJ5dGVzRW5jb2RlcigpLCA4KS5lbmNvZGUobmV3IFVpbnQ4QXJyYXkoWzY2LCAyMDksIDExNCwgMTk3LCA3NSwgMjcsIDE4MiwgMTE3XSkpLCAwKSkgeyByZXR1cm4gRHVlbEluc3RydWN0aW9uLkNsb3NlVGlja2V0OyB9XG5pZiAoY29udGFpbnNCeXRlcyhkYXRhLCBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKG5ldyBVaW50OEFycmF5KFsyNDUsIDE5OSwgODEsIDAsIDYyLCAxMzMsIDE4LCAyMl0pKSwgMCkpIHsgcmV0dXJuIER1ZWxJbnN0cnVjdGlvbi5Db21taXRUaWNrZXRzOyB9XG5pZiAoY29udGFpbnNCeXRlcyhkYXRhLCBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKG5ldyBVaW50OEFycmF5KFsxNiwgMTc4LCAxMjIsIDI1LCAyMTMsIDg1LCA5NiwgMTI5XSkpLCAwKSkgeyByZXR1cm4gRHVlbEluc3RydWN0aW9uLkNyZWF0ZVRpY2tldDsgfVxuaWYgKGNvbnRhaW5zQnl0ZXMoZGF0YSwgZml4RW5jb2RlclNpemUoZ2V0Qnl0ZXNFbmNvZGVyKCksIDgpLmVuY29kZShuZXcgVWludDhBcnJheShbMzEsIDIwMCwgMTM5LCAxMjUsIDkzLCAyMzksIDgzLCA4N10pKSwgMCkpIHsgcmV0dXJuIER1ZWxJbnN0cnVjdGlvbi5EZWxlZ2F0ZVF1ZXVlOyB9XG5pZiAoY29udGFpbnNCeXRlcyhkYXRhLCBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKG5ldyBVaW50OEFycmF5KFsxOTUsIDMsIDc4LCA2NCwgMTI4LCAyMzUsIDIwOSwgMTcxXSkpLCAwKSkgeyByZXR1cm4gRHVlbEluc3RydWN0aW9uLkRlbGVnYXRlVGlja2V0OyB9XG5pZiAoY29udGFpbnNCeXRlcyhkYXRhLCBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKG5ldyBVaW50OEFycmF5KFs0OSwgMTQ4LCAxNjMsIDcxLCA3NywgNjMsIDE5NywgNzZdKSksIDApKSB7IHJldHVybiBEdWVsSW5zdHJ1Y3Rpb24uRmx1c2hNYXRjaGVzOyB9XG5pZiAoY29udGFpbnNCeXRlcyhkYXRhLCBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKG5ldyBVaW50OEFycmF5KFsxNzQsIDEwMiwgMTMyLCAyMzIsIDkwLCAyMDIsIDI3LCAyMF0pKSwgMCkpIHsgcmV0dXJuIER1ZWxJbnN0cnVjdGlvbi5Jbml0aWFsaXplUXVldWU7IH1cbmlmIChjb250YWluc0J5dGVzKGRhdGEsIGZpeEVuY29kZXJTaXplKGdldEJ5dGVzRW5jb2RlcigpLCA4KS5lbmNvZGUobmV3IFVpbnQ4QXJyYXkoWzk0LCAxMjAsIDM0LCAxODYsIDU3LCAxNjcsIDI0MSwgMjA2XSkpLCAwKSkgeyByZXR1cm4gRHVlbEluc3RydWN0aW9uLkluaXRpYWxpemVUZW5hbnQ7IH1cbmlmIChjb250YWluc0J5dGVzKGRhdGEsIGZpeEVuY29kZXJTaXplKGdldEJ5dGVzRW5jb2RlcigpLCA4KS5lbmNvZGUobmV3IFVpbnQ4QXJyYXkoWzE1NywgMTE1LCA0OCwgMTA5LCA2NSwgODYsIDIwMywgMjM4XSkpLCAwKSkgeyByZXR1cm4gRHVlbEluc3RydWN0aW9uLkpvaW5RdWV1ZTsgfVxuaWYgKGNvbnRhaW5zQnl0ZXMoZGF0YSwgZml4RW5jb2RlclNpemUoZ2V0Qnl0ZXNFbmNvZGVyKCksIDgpLmVuY29kZShuZXcgVWludDhBcnJheShbMTk2LCAyOCwgNDEsIDIwNiwgNDgsIDM3LCA1MSwgMTY3XSkpLCAwKSkgeyByZXR1cm4gRHVlbEluc3RydWN0aW9uLlByb2Nlc3NVbmRlbGVnYXRpb247IH1cbmlmIChjb250YWluc0J5dGVzKGRhdGEsIGZpeEVuY29kZXJTaXplKGdldEJ5dGVzRW5jb2RlcigpLCA4KS5lbmNvZGUobmV3IFVpbnQ4QXJyYXkoWzIyMywgMTMyLCA3NywgMTUsIDIyNCwgMTU1LCAxMjUsIDIyNF0pKSwgMCkpIHsgcmV0dXJuIER1ZWxJbnN0cnVjdGlvbi5TZXR1cFF1ZXVlUGVybWlzc2lvbjsgfVxuaWYgKGNvbnRhaW5zQnl0ZXMoZGF0YSwgZml4RW5jb2RlclNpemUoZ2V0Qnl0ZXNFbmNvZGVyKCksIDgpLmVuY29kZShuZXcgVWludDhBcnJheShbMTY0LCAyOSwgNywgMjM1LCAxODMsIDIyMywgMTEsIDg1XSkpLCAwKSkgeyByZXR1cm4gRHVlbEluc3RydWN0aW9uLlNldHVwVGlja2V0UGVybWlzc2lvbjsgfVxuICAgIHRocm93IG5ldyBTb2xhbmFFcnJvcihTT0xBTkFfRVJST1JfX1BST0dSQU1fQ0xJRU5UU19fRkFJTEVEX1RPX0lERU5USUZZX0lOU1RSVUNUSU9OLCB7IGluc3RydWN0aW9uRGF0YTogZGF0YSwgcHJvZ3JhbU5hbWU6IFwiZHVlbFwiIH0pO1xufVxuXG5leHBvcnQgdHlwZSBQYXJzZWREdWVsSW5zdHJ1Y3Rpb248VFByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPSAnRWRaelV3S2QxWDJaV2p4TFBwejFjcEV6TUY3UlVaQzQzUHE2NHYxVmNLNVgnPiA9XG58IHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uQ2FuY2VsVGlja2V0IH0gJiBQYXJzZWRDYW5jZWxUaWNrZXRJbnN0cnVjdGlvbjxUUHJvZ3JhbT5cbnwgeyBpbnN0cnVjdGlvblR5cGU6IER1ZWxJbnN0cnVjdGlvbi5DbG9zZVRpY2tldCB9ICYgUGFyc2VkQ2xvc2VUaWNrZXRJbnN0cnVjdGlvbjxUUHJvZ3JhbT5cbnwgeyBpbnN0cnVjdGlvblR5cGU6IER1ZWxJbnN0cnVjdGlvbi5Db21taXRUaWNrZXRzIH0gJiBQYXJzZWRDb21taXRUaWNrZXRzSW5zdHJ1Y3Rpb248VFByb2dyYW0+XG58IHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uQ3JlYXRlVGlja2V0IH0gJiBQYXJzZWRDcmVhdGVUaWNrZXRJbnN0cnVjdGlvbjxUUHJvZ3JhbT5cbnwgeyBpbnN0cnVjdGlvblR5cGU6IER1ZWxJbnN0cnVjdGlvbi5EZWxlZ2F0ZVF1ZXVlIH0gJiBQYXJzZWREZWxlZ2F0ZVF1ZXVlSW5zdHJ1Y3Rpb248VFByb2dyYW0+XG58IHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uRGVsZWdhdGVUaWNrZXQgfSAmIFBhcnNlZERlbGVnYXRlVGlja2V0SW5zdHJ1Y3Rpb248VFByb2dyYW0+XG58IHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uRmx1c2hNYXRjaGVzIH0gJiBQYXJzZWRGbHVzaE1hdGNoZXNJbnN0cnVjdGlvbjxUUHJvZ3JhbT5cbnwgeyBpbnN0cnVjdGlvblR5cGU6IER1ZWxJbnN0cnVjdGlvbi5Jbml0aWFsaXplUXVldWUgfSAmIFBhcnNlZEluaXRpYWxpemVRdWV1ZUluc3RydWN0aW9uPFRQcm9ncmFtPlxufCB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLkluaXRpYWxpemVUZW5hbnQgfSAmIFBhcnNlZEluaXRpYWxpemVUZW5hbnRJbnN0cnVjdGlvbjxUUHJvZ3JhbT5cbnwgeyBpbnN0cnVjdGlvblR5cGU6IER1ZWxJbnN0cnVjdGlvbi5Kb2luUXVldWUgfSAmIFBhcnNlZEpvaW5RdWV1ZUluc3RydWN0aW9uPFRQcm9ncmFtPlxufCB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLlByb2Nlc3NVbmRlbGVnYXRpb24gfSAmIFBhcnNlZFByb2Nlc3NVbmRlbGVnYXRpb25JbnN0cnVjdGlvbjxUUHJvZ3JhbT5cbnwgeyBpbnN0cnVjdGlvblR5cGU6IER1ZWxJbnN0cnVjdGlvbi5TZXR1cFF1ZXVlUGVybWlzc2lvbiB9ICYgUGFyc2VkU2V0dXBRdWV1ZVBlcm1pc3Npb25JbnN0cnVjdGlvbjxUUHJvZ3JhbT5cbnwgeyBpbnN0cnVjdGlvblR5cGU6IER1ZWxJbnN0cnVjdGlvbi5TZXR1cFRpY2tldFBlcm1pc3Npb24gfSAmIFBhcnNlZFNldHVwVGlja2V0UGVybWlzc2lvbkluc3RydWN0aW9uPFRQcm9ncmFtPlxuXG5cbiAgICAgICAgZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRHVlbEluc3RydWN0aW9uPFRQcm9ncmFtIGV4dGVuZHMgc3RyaW5nPihcbiAgICAgICAgICAgIGluc3RydWN0aW9uOiBJbnN0cnVjdGlvbjxUUHJvZ3JhbT4gXG4gICAgICAgICAgICAgICAgJiBJbnN0cnVjdGlvbldpdGhEYXRhPFJlYWRvbmx5VWludDhBcnJheT5cbiAgICAgICAgKTogUGFyc2VkRHVlbEluc3RydWN0aW9uPFRQcm9ncmFtPiB7XG4gICAgICAgICAgICBjb25zdCBpbnN0cnVjdGlvblR5cGUgPSBpZGVudGlmeUR1ZWxJbnN0cnVjdGlvbihpbnN0cnVjdGlvbik7XG4gICAgICAgICAgICBzd2l0Y2ggKGluc3RydWN0aW9uVHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgRHVlbEluc3RydWN0aW9uLkNhbmNlbFRpY2tldDogeyBhc3NlcnRJc0luc3RydWN0aW9uV2l0aEFjY291bnRzKGluc3RydWN0aW9uKTtcbnJldHVybiB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLkNhbmNlbFRpY2tldCwgLi4ucGFyc2VDYW5jZWxUaWNrZXRJbnN0cnVjdGlvbihpbnN0cnVjdGlvbikgfTsgfVxuY2FzZSBEdWVsSW5zdHJ1Y3Rpb24uQ2xvc2VUaWNrZXQ6IHsgYXNzZXJ0SXNJbnN0cnVjdGlvbldpdGhBY2NvdW50cyhpbnN0cnVjdGlvbik7XG5yZXR1cm4geyBpbnN0cnVjdGlvblR5cGU6IER1ZWxJbnN0cnVjdGlvbi5DbG9zZVRpY2tldCwgLi4ucGFyc2VDbG9zZVRpY2tldEluc3RydWN0aW9uKGluc3RydWN0aW9uKSB9OyB9XG5jYXNlIER1ZWxJbnN0cnVjdGlvbi5Db21taXRUaWNrZXRzOiB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMoaW5zdHJ1Y3Rpb24pO1xucmV0dXJuIHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uQ29tbWl0VGlja2V0cywgLi4ucGFyc2VDb21taXRUaWNrZXRzSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pIH07IH1cbmNhc2UgRHVlbEluc3RydWN0aW9uLkNyZWF0ZVRpY2tldDogeyBhc3NlcnRJc0luc3RydWN0aW9uV2l0aEFjY291bnRzKGluc3RydWN0aW9uKTtcbnJldHVybiB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLkNyZWF0ZVRpY2tldCwgLi4ucGFyc2VDcmVhdGVUaWNrZXRJbnN0cnVjdGlvbihpbnN0cnVjdGlvbikgfTsgfVxuY2FzZSBEdWVsSW5zdHJ1Y3Rpb24uRGVsZWdhdGVRdWV1ZTogeyBhc3NlcnRJc0luc3RydWN0aW9uV2l0aEFjY291bnRzKGluc3RydWN0aW9uKTtcbnJldHVybiB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLkRlbGVnYXRlUXVldWUsIC4uLnBhcnNlRGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uKGluc3RydWN0aW9uKSB9OyB9XG5jYXNlIER1ZWxJbnN0cnVjdGlvbi5EZWxlZ2F0ZVRpY2tldDogeyBhc3NlcnRJc0luc3RydWN0aW9uV2l0aEFjY291bnRzKGluc3RydWN0aW9uKTtcbnJldHVybiB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLkRlbGVnYXRlVGlja2V0LCAuLi5wYXJzZURlbGVnYXRlVGlja2V0SW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pIH07IH1cbmNhc2UgRHVlbEluc3RydWN0aW9uLkZsdXNoTWF0Y2hlczogeyBhc3NlcnRJc0luc3RydWN0aW9uV2l0aEFjY291bnRzKGluc3RydWN0aW9uKTtcbnJldHVybiB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLkZsdXNoTWF0Y2hlcywgLi4ucGFyc2VGbHVzaE1hdGNoZXNJbnN0cnVjdGlvbihpbnN0cnVjdGlvbikgfTsgfVxuY2FzZSBEdWVsSW5zdHJ1Y3Rpb24uSW5pdGlhbGl6ZVF1ZXVlOiB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMoaW5zdHJ1Y3Rpb24pO1xucmV0dXJuIHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uSW5pdGlhbGl6ZVF1ZXVlLCAuLi5wYXJzZUluaXRpYWxpemVRdWV1ZUluc3RydWN0aW9uKGluc3RydWN0aW9uKSB9OyB9XG5jYXNlIER1ZWxJbnN0cnVjdGlvbi5Jbml0aWFsaXplVGVuYW50OiB7IGFzc2VydElzSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHMoaW5zdHJ1Y3Rpb24pO1xucmV0dXJuIHsgaW5zdHJ1Y3Rpb25UeXBlOiBEdWVsSW5zdHJ1Y3Rpb24uSW5pdGlhbGl6ZVRlbmFudCwgLi4ucGFyc2VJbml0aWFsaXplVGVuYW50SW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pIH07IH1cbmNhc2UgRHVlbEluc3RydWN0aW9uLkpvaW5RdWV1ZTogeyBhc3NlcnRJc0luc3RydWN0aW9uV2l0aEFjY291bnRzKGluc3RydWN0aW9uKTtcbnJldHVybiB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLkpvaW5RdWV1ZSwgLi4ucGFyc2VKb2luUXVldWVJbnN0cnVjdGlvbihpbnN0cnVjdGlvbikgfTsgfVxuY2FzZSBEdWVsSW5zdHJ1Y3Rpb24uUHJvY2Vzc1VuZGVsZWdhdGlvbjogeyBhc3NlcnRJc0luc3RydWN0aW9uV2l0aEFjY291bnRzKGluc3RydWN0aW9uKTtcbnJldHVybiB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLlByb2Nlc3NVbmRlbGVnYXRpb24sIC4uLnBhcnNlUHJvY2Vzc1VuZGVsZWdhdGlvbkluc3RydWN0aW9uKGluc3RydWN0aW9uKSB9OyB9XG5jYXNlIER1ZWxJbnN0cnVjdGlvbi5TZXR1cFF1ZXVlUGVybWlzc2lvbjogeyBhc3NlcnRJc0luc3RydWN0aW9uV2l0aEFjY291bnRzKGluc3RydWN0aW9uKTtcbnJldHVybiB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLlNldHVwUXVldWVQZXJtaXNzaW9uLCAuLi5wYXJzZVNldHVwUXVldWVQZXJtaXNzaW9uSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pIH07IH1cbmNhc2UgRHVlbEluc3RydWN0aW9uLlNldHVwVGlja2V0UGVybWlzc2lvbjogeyBhc3NlcnRJc0luc3RydWN0aW9uV2l0aEFjY291bnRzKGluc3RydWN0aW9uKTtcbnJldHVybiB7IGluc3RydWN0aW9uVHlwZTogRHVlbEluc3RydWN0aW9uLlNldHVwVGlja2V0UGVybWlzc2lvbiwgLi4ucGFyc2VTZXR1cFRpY2tldFBlcm1pc3Npb25JbnN0cnVjdGlvbihpbnN0cnVjdGlvbikgfTsgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBTb2xhbmFFcnJvcihTT0xBTkFfRVJST1JfX1BST0dSQU1fQ0xJRU5UU19fVU5SRUNPR05JWkVEX0lOU1RSVUNUSU9OX1RZUEUsIHsgaW5zdHJ1Y3Rpb25UeXBlOiBpbnN0cnVjdGlvblR5cGUgYXMgc3RyaW5nLCBwcm9ncmFtTmFtZTogXCJkdWVsXCIgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuZXhwb3J0IHR5cGUgRHVlbFBsdWdpbiA9IHsgYWNjb3VudHM6IER1ZWxQbHVnaW5BY2NvdW50czsgaW5zdHJ1Y3Rpb25zOiBEdWVsUGx1Z2luSW5zdHJ1Y3Rpb25zOyB9XG5cbmV4cG9ydCB0eXBlIER1ZWxQbHVnaW5BY2NvdW50cyA9IHsgbWF0Y2hUaWNrZXQ6IFJldHVyblR5cGU8dHlwZW9mIGdldE1hdGNoVGlja2V0Q29kZWM+ICYgU2VsZkZldGNoRnVuY3Rpb25zPE1hdGNoVGlja2V0QXJncywgTWF0Y2hUaWNrZXQ+OyBxdWV1ZTogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0UXVldWVDb2RlYz4gJiBTZWxmRmV0Y2hGdW5jdGlvbnM8UXVldWVBcmdzLCBRdWV1ZT47IHRlbmFudDogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0VGVuYW50Q29kZWM+ICYgU2VsZkZldGNoRnVuY3Rpb25zPFRlbmFudEFyZ3MsIFRlbmFudD47IH1cblxuZXhwb3J0IHR5cGUgRHVlbFBsdWdpbkluc3RydWN0aW9ucyA9IHsgY2FuY2VsVGlja2V0OiAoaW5wdXQ6IENhbmNlbFRpY2tldEFzeW5jSW5wdXQpID0+IFJldHVyblR5cGU8dHlwZW9mIGdldENhbmNlbFRpY2tldEluc3RydWN0aW9uQXN5bmM+ICYgU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zOyBjbG9zZVRpY2tldDogKGlucHV0OiBDbG9zZVRpY2tldEFzeW5jSW5wdXQpID0+IFJldHVyblR5cGU8dHlwZW9mIGdldENsb3NlVGlja2V0SW5zdHJ1Y3Rpb25Bc3luYz4gJiBTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnM7IGNvbW1pdFRpY2tldHM6IChpbnB1dDogTWFrZU9wdGlvbmFsPENvbW1pdFRpY2tldHNJbnB1dCwgXCJwYXllclwiPikgPT4gUmV0dXJuVHlwZTx0eXBlb2YgZ2V0Q29tbWl0VGlja2V0c0luc3RydWN0aW9uPiAmIFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9uczsgY3JlYXRlVGlja2V0OiAoaW5wdXQ6IENyZWF0ZVRpY2tldEFzeW5jSW5wdXQpID0+IFJldHVyblR5cGU8dHlwZW9mIGdldENyZWF0ZVRpY2tldEluc3RydWN0aW9uQXN5bmM+ICYgU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zOyBkZWxlZ2F0ZVF1ZXVlOiAoaW5wdXQ6IE1ha2VPcHRpb25hbDxEZWxlZ2F0ZVF1ZXVlQXN5bmNJbnB1dCwgXCJwYXllclwiPikgPT4gUmV0dXJuVHlwZTx0eXBlb2YgZ2V0RGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uQXN5bmM+ICYgU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zOyBkZWxlZ2F0ZVRpY2tldDogKGlucHV0OiBNYWtlT3B0aW9uYWw8RGVsZWdhdGVUaWNrZXRBc3luY0lucHV0LCBcInBheWVyXCI+KSA9PiBSZXR1cm5UeXBlPHR5cGVvZiBnZXREZWxlZ2F0ZVRpY2tldEluc3RydWN0aW9uQXN5bmM+ICYgU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zOyBmbHVzaE1hdGNoZXM6IChpbnB1dDogRmx1c2hNYXRjaGVzSW5wdXQpID0+IFJldHVyblR5cGU8dHlwZW9mIGdldEZsdXNoTWF0Y2hlc0luc3RydWN0aW9uPiAmIFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9uczsgaW5pdGlhbGl6ZVF1ZXVlOiAoaW5wdXQ6IEluaXRpYWxpemVRdWV1ZUFzeW5jSW5wdXQpID0+IFJldHVyblR5cGU8dHlwZW9mIGdldEluaXRpYWxpemVRdWV1ZUluc3RydWN0aW9uQXN5bmM+ICYgU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zOyBpbml0aWFsaXplVGVuYW50OiAoaW5wdXQ6IEluaXRpYWxpemVUZW5hbnRBc3luY0lucHV0KSA9PiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRJbml0aWFsaXplVGVuYW50SW5zdHJ1Y3Rpb25Bc3luYz4gJiBTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnM7IGpvaW5RdWV1ZTogKGlucHV0OiBKb2luUXVldWVBc3luY0lucHV0KSA9PiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRKb2luUXVldWVJbnN0cnVjdGlvbkFzeW5jPiAmIFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9uczsgcHJvY2Vzc1VuZGVsZWdhdGlvbjogKGlucHV0OiBNYWtlT3B0aW9uYWw8UHJvY2Vzc1VuZGVsZWdhdGlvbklucHV0LCBcInBheWVyXCI+KSA9PiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRQcm9jZXNzVW5kZWxlZ2F0aW9uSW5zdHJ1Y3Rpb24+ICYgU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zOyBzZXR1cFF1ZXVlUGVybWlzc2lvbjogKGlucHV0OiBTZXR1cFF1ZXVlUGVybWlzc2lvbkFzeW5jSW5wdXQpID0+IFJldHVyblR5cGU8dHlwZW9mIGdldFNldHVwUXVldWVQZXJtaXNzaW9uSW5zdHJ1Y3Rpb25Bc3luYz4gJiBTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnM7IHNldHVwVGlja2V0UGVybWlzc2lvbjogKGlucHV0OiBTZXR1cFRpY2tldFBlcm1pc3Npb25Bc3luY0lucHV0KSA9PiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRTZXR1cFRpY2tldFBlcm1pc3Npb25JbnN0cnVjdGlvbkFzeW5jPiAmIFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9uczsgfVxuXG5leHBvcnQgdHlwZSBEdWVsUGx1Z2luUmVxdWlyZW1lbnRzID0gQ2xpZW50V2l0aFJwYzxHZXRBY2NvdW50SW5mb0FwaSAmIEdldE11bHRpcGxlQWNjb3VudHNBcGk+ICYgQ2xpZW50V2l0aFBheWVyICYgQ2xpZW50V2l0aFRyYW5zYWN0aW9uUGxhbm5pbmcgJiBDbGllbnRXaXRoVHJhbnNhY3Rpb25TZW5kaW5nXG5cbmV4cG9ydCBmdW5jdGlvbiBkdWVsUHJvZ3JhbSgpIHtcbiAgICByZXR1cm4gPFQgZXh0ZW5kcyBEdWVsUGx1Z2luUmVxdWlyZW1lbnRzPihjbGllbnQ6IFQpID0+IHtcbiAgICAgICAgcmV0dXJuIHsgLi4uY2xpZW50LCBkdWVsOiA8RHVlbFBsdWdpbj57IGFjY291bnRzOiB7IG1hdGNoVGlja2V0OiBhZGRTZWxmRmV0Y2hGdW5jdGlvbnMoY2xpZW50LCBnZXRNYXRjaFRpY2tldENvZGVjKCkpLCBxdWV1ZTogYWRkU2VsZkZldGNoRnVuY3Rpb25zKGNsaWVudCwgZ2V0UXVldWVDb2RlYygpKSwgdGVuYW50OiBhZGRTZWxmRmV0Y2hGdW5jdGlvbnMoY2xpZW50LCBnZXRUZW5hbnRDb2RlYygpKSB9LCBpbnN0cnVjdGlvbnM6IHsgY2FuY2VsVGlja2V0OiBpbnB1dCA9PiBhZGRTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnMoY2xpZW50LCBnZXRDYW5jZWxUaWNrZXRJbnN0cnVjdGlvbkFzeW5jKGlucHV0KSksIGNsb3NlVGlja2V0OiBpbnB1dCA9PiBhZGRTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnMoY2xpZW50LCBnZXRDbG9zZVRpY2tldEluc3RydWN0aW9uQXN5bmMoaW5wdXQpKSwgY29tbWl0VGlja2V0czogaW5wdXQgPT4gYWRkU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zKGNsaWVudCwgZ2V0Q29tbWl0VGlja2V0c0luc3RydWN0aW9uKHsgLi4uaW5wdXQsIHBheWVyOiBpbnB1dC5wYXllciA/PyBjbGllbnQucGF5ZXIgfSkpLCBjcmVhdGVUaWNrZXQ6IGlucHV0ID0+IGFkZFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9ucyhjbGllbnQsIGdldENyZWF0ZVRpY2tldEluc3RydWN0aW9uQXN5bmMoaW5wdXQpKSwgZGVsZWdhdGVRdWV1ZTogaW5wdXQgPT4gYWRkU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zKGNsaWVudCwgZ2V0RGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uQXN5bmMoeyAuLi5pbnB1dCwgcGF5ZXI6IGlucHV0LnBheWVyID8/IGNsaWVudC5wYXllciB9KSksIGRlbGVnYXRlVGlja2V0OiBpbnB1dCA9PiBhZGRTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnMoY2xpZW50LCBnZXREZWxlZ2F0ZVRpY2tldEluc3RydWN0aW9uQXN5bmMoeyAuLi5pbnB1dCwgcGF5ZXI6IGlucHV0LnBheWVyID8/IGNsaWVudC5wYXllciB9KSksIGZsdXNoTWF0Y2hlczogaW5wdXQgPT4gYWRkU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zKGNsaWVudCwgZ2V0Rmx1c2hNYXRjaGVzSW5zdHJ1Y3Rpb24oaW5wdXQpKSwgaW5pdGlhbGl6ZVF1ZXVlOiBpbnB1dCA9PiBhZGRTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnMoY2xpZW50LCBnZXRJbml0aWFsaXplUXVldWVJbnN0cnVjdGlvbkFzeW5jKGlucHV0KSksIGluaXRpYWxpemVUZW5hbnQ6IGlucHV0ID0+IGFkZFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9ucyhjbGllbnQsIGdldEluaXRpYWxpemVUZW5hbnRJbnN0cnVjdGlvbkFzeW5jKGlucHV0KSksIGpvaW5RdWV1ZTogaW5wdXQgPT4gYWRkU2VsZlBsYW5BbmRTZW5kRnVuY3Rpb25zKGNsaWVudCwgZ2V0Sm9pblF1ZXVlSW5zdHJ1Y3Rpb25Bc3luYyhpbnB1dCkpLCBwcm9jZXNzVW5kZWxlZ2F0aW9uOiBpbnB1dCA9PiBhZGRTZWxmUGxhbkFuZFNlbmRGdW5jdGlvbnMoY2xpZW50LCBnZXRQcm9jZXNzVW5kZWxlZ2F0aW9uSW5zdHJ1Y3Rpb24oeyAuLi5pbnB1dCwgcGF5ZXI6IGlucHV0LnBheWVyID8/IGNsaWVudC5wYXllci5hZGRyZXNzIH0pKSwgc2V0dXBRdWV1ZVBlcm1pc3Npb246IGlucHV0ID0+IGFkZFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9ucyhjbGllbnQsIGdldFNldHVwUXVldWVQZXJtaXNzaW9uSW5zdHJ1Y3Rpb25Bc3luYyhpbnB1dCkpLCBzZXR1cFRpY2tldFBlcm1pc3Npb246IGlucHV0ID0+IGFkZFNlbGZQbGFuQW5kU2VuZEZ1bmN0aW9ucyhjbGllbnQsIGdldFNldHVwVGlja2V0UGVybWlzc2lvbkluc3RydWN0aW9uQXN5bmMoaW5wdXQpKSB9IH0gfTtcbiAgICB9O1xufVxuXG50eXBlIE1ha2VPcHRpb25hbDxULCBLIGV4dGVuZHMga2V5b2YgVD4gPSBPbWl0PFQsIEs+ICYgUGFydGlhbDxQaWNrPFQsIEs+PjsiXX0=
|
package/dist/player.d.ts
CHANGED
|
@@ -21,7 +21,8 @@ export declare class MatchmakingPlayer {
|
|
|
21
21
|
} | null>;
|
|
22
22
|
/**
|
|
23
23
|
* High-level: full matchmaking TEE entry flow.
|
|
24
|
-
* Creates ticket on L1,
|
|
24
|
+
* Creates ticket on L1, sets up permission PDA (so only player + queue authority can read it),
|
|
25
|
+
* delegates the permission PDA and ticket to TEE, then joins the queue.
|
|
25
26
|
* Use individual methods (createTicket, delegateTicket, joinQueue) as escape hatches if needed.
|
|
26
27
|
*/
|
|
27
28
|
enterQueue(tenant: Address, queue: Address, playerData: Address, teeRpc: Rpc<SolanaRpcApi>, teeUrlWithToken: string, validator?: Address, callbackProgram?: Address): Promise<Address>;
|
package/dist/player.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { createSolanaRpc, } from "@solana/kit";
|
|
2
|
-
import { getCreateTicketInstructionAsync, getDelegateTicketInstructionAsync, getJoinQueueInstructionAsync, getCancelTicketInstructionAsync, getCloseTicketInstructionAsync, fetchMaybeMatchTicket, accountType, } from "./generated/duel/index.js";
|
|
1
|
+
import { createSolanaRpc, AccountRole, } from "@solana/kit";
|
|
2
|
+
import { getCreateTicketInstructionAsync, getDelegateTicketInstructionAsync, getSetupTicketPermissionInstructionAsync, getJoinQueueInstructionAsync, getCancelTicketInstructionAsync, getCloseTicketInstructionAsync, fetchMaybeMatchTicket, accountType, } from "./generated/duel/index.js";
|
|
3
3
|
import { sendInstruction } from "./transaction.js";
|
|
4
|
-
import { waitUntilPermissionActive } from "./tee.js";
|
|
5
4
|
import * as utils from "./utils.js";
|
|
6
5
|
const DUEL_PROGRAM_ID = "EdZzUwKd1X2ZWjxLPpz1cpEzMF7RUZC43Pq64v1VcK5X";
|
|
7
6
|
export class MatchmakingPlayer {
|
|
@@ -86,15 +85,47 @@ export class MatchmakingPlayer {
|
|
|
86
85
|
}
|
|
87
86
|
/**
|
|
88
87
|
* High-level: full matchmaking TEE entry flow.
|
|
89
|
-
* Creates ticket on L1,
|
|
88
|
+
* Creates ticket on L1, sets up permission PDA (so only player + queue authority can read it),
|
|
89
|
+
* delegates the permission PDA and ticket to TEE, then joins the queue.
|
|
90
90
|
* Use individual methods (createTicket, delegateTicket, joinQueue) as escape hatches if needed.
|
|
91
91
|
*/
|
|
92
92
|
async enterQueue(tenant, queue, playerData, teeRpc, teeUrlWithToken, validator, callbackProgram) {
|
|
93
93
|
const player = this.signer.address;
|
|
94
94
|
const ticketPda = await this.getTicketPda(player, tenant);
|
|
95
|
+
// 1. Create ticket on L1
|
|
95
96
|
await this.createTicket(tenant);
|
|
97
|
+
// 2. Create Permission PDA for the ticket (CPI from duel program with invoke_signed)
|
|
98
|
+
const permissionPda = await utils.derivePermissionPda(ticketPda);
|
|
99
|
+
const setupIx = await getSetupTicketPermissionInstructionAsync({
|
|
100
|
+
player: this.signer,
|
|
101
|
+
tenant,
|
|
102
|
+
permission: permissionPda,
|
|
103
|
+
permissionProgram: utils.PERMISSION_PROGRAM,
|
|
104
|
+
}, { programAddress: this.programId });
|
|
105
|
+
await sendInstruction(this.rpc, setupIx, this.signer);
|
|
106
|
+
// 3. Delegate Permission PDA to TEE (called on permission program, player signs)
|
|
107
|
+
const { delegationBuffer, delegationRecord, delegationMetadata } = await utils.derivePermissionDelegationPdas(permissionPda);
|
|
108
|
+
const delegatePermIx = {
|
|
109
|
+
programAddress: utils.PERMISSION_PROGRAM,
|
|
110
|
+
data: new Uint8Array([3, 0, 0, 0, 0, 0, 0, 0]),
|
|
111
|
+
accounts: [
|
|
112
|
+
{ address: this.signer.address, role: AccountRole.WRITABLE_SIGNER },
|
|
113
|
+
{ address: this.signer.address, role: AccountRole.READONLY_SIGNER },
|
|
114
|
+
{ address: ticketPda, role: AccountRole.READONLY },
|
|
115
|
+
{ address: permissionPda, role: AccountRole.WRITABLE },
|
|
116
|
+
{ address: "11111111111111111111111111111111", role: AccountRole.READONLY },
|
|
117
|
+
{ address: utils.PERMISSION_PROGRAM, role: AccountRole.READONLY },
|
|
118
|
+
{ address: delegationBuffer, role: AccountRole.WRITABLE },
|
|
119
|
+
{ address: delegationRecord, role: AccountRole.WRITABLE },
|
|
120
|
+
{ address: delegationMetadata, role: AccountRole.WRITABLE },
|
|
121
|
+
{ address: utils.DELEGATION_PROGRAM, role: AccountRole.READONLY },
|
|
122
|
+
...(validator ? [{ address: validator, role: AccountRole.READONLY }] : []),
|
|
123
|
+
],
|
|
124
|
+
};
|
|
125
|
+
await sendInstruction(this.rpc, delegatePermIx, this.signer);
|
|
126
|
+
// 4. Delegate ticket to TEE
|
|
96
127
|
await this.delegateTicket(player, tenant, validator);
|
|
97
|
-
|
|
128
|
+
// 5. Join the queue on TEE
|
|
98
129
|
const teeClient = new MatchmakingPlayer(teeRpc, this.signer, this.programId);
|
|
99
130
|
await teeClient.joinQueue(queue, tenant, playerData, callbackProgram);
|
|
100
131
|
return ticketPda;
|
|
@@ -104,4 +135,4 @@ export class MatchmakingPlayer {
|
|
|
104
135
|
return new MatchmakingPlayer(createSolanaRpc(teeUrl), this.signer, this.programId);
|
|
105
136
|
}
|
|
106
137
|
}
|
|
107
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxheWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3BsYXllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZUFBZSxHQUtoQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQ0wsK0JBQStCLEVBQy9CLGlDQUFpQyxFQUNqQyw0QkFBNEIsRUFDNUIsK0JBQStCLEVBQy9CLDhCQUE4QixFQUM5QixxQkFBcUIsRUFDckIsV0FBVyxHQUNaLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ25ELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNyRCxPQUFPLEtBQUssS0FBSyxNQUFNLFlBQVksQ0FBQztBQUVwQyxNQUFNLGVBQWUsR0FBRyw4Q0FBeUQsQ0FBQztBQUVsRixNQUFNLE9BQU8saUJBQWlCO0lBSzVCLFlBQ0UsR0FBc0IsRUFDdEIsTUFBeUIsRUFDekIsWUFBcUIsZUFBZTtRQUVwQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzdCLENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQWUsRUFBRSxNQUFlO1FBQ2pELE9BQU8sS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFrQjtRQUNoQyxPQUFPLHFCQUFxQixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBZTtRQUNoQyxNQUFNLEVBQUUsR0FBRyxNQUFNLCtCQUErQixDQUFD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QUFNLHlCQUF5QixDQUFDLGVBQWUsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUU1RCxNQUFNLFNBQVMsR0FBRyxJQUFJLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3RSxNQUFNLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFFdEUsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELHFFQUFxRTtJQUNyRSxPQUFPLENBQUMsTUFBYztRQUNwQixPQUFPLElBQUksaUJBQWlCLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNyZWF0ZVNvbGFuYVJwYyxcbiAgdHlwZSBBZGRyZXNzLFxuICB0eXBlIFRyYW5zYWN0aW9uU2lnbmVyLFxuICB0eXBlIFJwYyxcbiAgdHlwZSBTb2xhbmFScGNBcGksXG59IGZyb20gXCJAc29sYW5hL2tpdFwiO1xuaW1wb3J0IHtcbiAgZ2V0Q3JlYXRlVGlja2V0SW5zdHJ1Y3Rpb25Bc3luYyxcbiAgZ2V0RGVsZWdhdGVUaWNrZXRJbnN0cnVjdGlvbkFzeW5jLFxuICBnZXRKb2luUXVldWVJbnN0cnVjdGlvbkFzeW5jLFxuICBnZXRDYW5jZWxUaWNrZXRJbnN0cnVjdGlvbkFzeW5jLFxuICBnZXRDbG9zZVRpY2tldEluc3RydWN0aW9uQXN5bmMsXG4gIGZldGNoTWF5YmVNYXRjaFRpY2tldCxcbiAgYWNjb3VudFR5cGUsXG59IGZyb20gXCIuL2dlbmVyYXRlZC9kdWVsL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBzZW5kSW5zdHJ1Y3Rpb24gfSBmcm9tIFwiLi90cmFuc2FjdGlvbi5qc1wiO1xuaW1wb3J0IHsgd2FpdFVudGlsUGVybWlzc2lvbkFjdGl2ZSB9IGZyb20gXCIuL3RlZS5qc1wiO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSBcIi4vdXRpbHMuanNcIjtcblxuY29uc3QgRFVFTF9QUk9HUkFNX0lEID0gXCJFZFp6VXdLZDFYMlpXanhMUHB6MWNwRXpNRjdSVVpDNDNQcTY0djFWY0s1WFwiIGFzIEFkZHJlc3M7XG5cbmV4cG9ydCBjbGFzcyBNYXRjaG1ha2luZ1BsYXllciB7XG4gIHB1YmxpYyBycGM6IFJwYzxTb2xhbmFScGNBcGk+O1xuICBwdWJsaWMgc2lnbmVyOiBUcmFuc2FjdGlvblNpZ25lcjtcbiAgcHVibGljIHByb2dyYW1JZDogQWRkcmVzcztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBycGM6IFJwYzxTb2xhbmFScGNBcGk+LFxuICAgIHNpZ25lcjogVHJhbnNhY3Rpb25TaWduZXIsXG4gICAgcHJvZ3JhbUlkOiBBZGRyZXNzID0gRFVFTF9QUk9HUkFNX0lELFxuICApIHtcbiAgICB0aGlzLnJwYyA9IHJwYztcbiAgICB0aGlzLnNpZ25lciA9IHNpZ25lcjtcbiAgICB0aGlzLnByb2dyYW1JZCA9IHByb2dyYW1JZDtcbiAgfVxuXG4gIGFzeW5jIGdldFRpY2tldFBkYShwbGF5ZXI6IEFkZHJlc3MsIHRlbmFudDogQWRkcmVzcyk6IFByb21pc2U8QWRkcmVzcz4ge1xuICAgIHJldHVybiB1dGlscy5kZXJpdmVUaWNrZXRQZGEodGhpcy5wcm9ncmFtSWQsIHBsYXllciwgdGVuYW50KTtcbiAgfVxuXG4gIGFzeW5jIGdldFRpY2tldCh0aWNrZXRQZGE6IEFkZHJlc3MpIHtcbiAgICByZXR1cm4gZmV0Y2hNYXliZU1hdGNoVGlja2V0KHRoaXMucnBjLCB0aWNrZXRQZGEpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlVGlja2V0KHRlbmFudDogQWRkcmVzcyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgaXggPSBhd2FpdCBnZXRDcmVhdGVUaWNrZXRJbnN0cnVjdGlvbkFzeW5jKHtcbiAgICAgIHBsYXllcjogdGhpcy5zaWduZXIsXG4gICAgICB0ZW5hbnQsXG4gICAgfSwgeyBwcm9ncmFtQWRkcmVzczogdGhpcy5wcm9ncmFtSWQgfSk7XG4gICAgcmV0dXJuIHNlbmRJbnN0cnVjdGlvbih0aGlzLnJwYywgaXgsIHRoaXMuc2lnbmVyKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGVnYXRlVGlja2V0KFxuICAgIHBsYXllcjogQWRkcmVzcyxcbiAgICB0ZW5hbnQ6IEFkZHJlc3MsXG4gICAgdmFsaWRhdG9yPzogQWRkcmVzcyxcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB0aWNrZXRQZGEgPSBhd2FpdCB0aGlzLmdldFRpY2tldFBkYShwbGF5ZXIsIHRlbmFudCk7XG4gICAgY29uc3QgaXggPSBhd2FpdCBnZXREZWxlZ2F0ZVRpY2tldEluc3RydWN0aW9uQXN5bmMoe1xuICAgICAgcGRhOiB0aWNrZXRQZGEsXG4gICAgICBwYXllcjogdGhpcy5zaWduZXIsXG4gICAgICB2YWxpZGF0b3IsXG4gICAgICBhY2NvdW50VHlwZTogYWNjb3VudFR5cGUoXCJUaWNrZXRcIiwgeyBwbGF5ZXIsIHRlbmFudCB9KSxcbiAgICB9LCB7IHByb2dyYW1BZGRyZXNzOiB0aGlzLnByb2dyYW1JZCB9KTtcbiAgICByZXR1cm4gc2VuZEluc3RydWN0aW9uKHRoaXMucnBjLCBpeCwgdGhpcy5zaWduZXIpO1xuICB9XG5cbiAgYXN5bmMgam9pblF1ZXVlKFxuICAgIHF1ZXVlOiBBZGRyZXNzLFxuICAgIHRlbmFudDogQWRkcmVzcyxcbiAgICBwbGF5ZXJEYXRhOiBBZGRyZXNzLFxuICAgIGNhbGxiYWNrUHJvZ3JhbT86IEFkZHJlc3MsXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgaXggPSBhd2FpdCBnZXRKb2luUXVldWVJbnN0cnVjdGlvbkFzeW5jKHtcbiAgICAgIHF1ZXVlLFxuICAgICAgdGVuYW50LFxuICAgICAgcGxheWVyRGF0YSxcbiAgICAgIHNpZ25lcjogdGhpcy5zaWduZXIsXG4gICAgfSwgeyBwcm9ncmFtQWRkcmVzczogdGhpcy5wcm9ncmFtSWQgfSk7XG4gICAgY29uc3QgaXhGaW5hbCA9IGNhbGxiYWNrUHJvZ3JhbVxuICAgICAgPyB7IC4uLml4LCBhY2NvdW50czogWy4uLml4LmFjY291bnRzLCB7IGFkZHJlc3M6IGNhbGxiYWNrUHJvZ3JhbSwgcm9sZTogMCBhcyBjb25zdCB9XSB9XG4gICAgICA6IGl4O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcmV0dXJuIHNlbmRJbnN0cnVjdGlvbih0aGlzLnJwYywgaXhGaW5hbCBhcyBhbnksIHRoaXMuc2lnbmVyKTtcbiAgfVxuXG4gIGFzeW5jIGNhbmNlbFRpY2tldCh0ZW5hbnQ6IEFkZHJlc3MpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGl4ID0gYXdhaXQgZ2V0Q2FuY2VsVGlja2V0SW5zdHJ1Y3Rpb25Bc3luYyh7XG4gICAgICBwbGF5ZXI6IHRoaXMuc2lnbmVyLFxuICAgICAgdGVuYW50LFxuICAgIH0sIHsgcHJvZ3JhbUFkZHJlc3M6IHRoaXMucHJvZ3JhbUlkIH0pO1xuICAgIHJldHVybiBzZW5kSW5zdHJ1Y3Rpb24odGhpcy5ycGMsIGl4LCB0aGlzLnNpZ25lcik7XG4gIH1cblxuICBhc3luYyBjbG9zZVRpY2tldCh0ZW5hbnQ6IEFkZHJlc3MpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGl4ID0gYXdhaXQgZ2V0Q2xvc2VUaWNrZXRJbnN0cnVjdGlvbkFzeW5jKHtcbiAgICAgIHBsYXllcjogdGhpcy5zaWduZXIsXG4gICAgICB0ZW5hbnQsXG4gICAgfSwgeyBwcm9ncmFtQWRkcmVzczogdGhpcy5wcm9ncmFtSWQgfSk7XG4gICAgcmV0dXJuIHNlbmRJbnN0cnVjdGlvbih0aGlzLnJwYywgaXgsIHRoaXMuc2lnbmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQb2xsIEwxIGZvciB0aWNrZXQgc3RhdHVzLlxuICAgKiBSZXR1cm5zIG1hdGNoIGluZm8gd2hlbiBzdGF0dXMgYmVjb21lcyBNYXRjaGVkLlxuICAgKi9cbiAgYXN5bmMgcG9sbEZvck1hdGNoKFxuICAgIHRpY2tldFBkYTogQWRkcmVzcyxcbiAgICBtYXhBdHRlbXB0cyA9IDYwLFxuICAgIHBvbGxJbnRlcnZhbCA9IDIwMDAsXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4gICk6IFByb21pc2U8eyBvcHBvbmVudDogQWRkcmVzczsgbWF0Y2hJZDogYmlnaW50IH0gfCBudWxsPiB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhBdHRlbXB0czsgaSsrKSB7XG4gICAgICBpZiAoc2lnbmFsPy5hYm9ydGVkKSByZXR1cm4gbnVsbDtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIHBvbGxJbnRlcnZhbCkpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbWF5YmVUaWNrZXQgPSBhd2FpdCBmZXRjaE1heWJlTWF0Y2hUaWNrZXQodGhpcy5ycGMsIHRpY2tldFBkYSk7XG4gICAgICAgIGlmICghbWF5YmVUaWNrZXQuZXhpc3RzKSBjb250aW51ZTtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gbWF5YmVUaWNrZXQuZGF0YS5zdGF0dXM7XG4gICAgICAgIGlmIChzdGF0dXMuX19raW5kID09PSBcIk1hdGNoZWRcIikge1xuICAgICAgICAgIHJldHVybiB7IG9wcG9uZW50OiBzdGF0dXMub3Bwb25lbnQsIG1hdGNoSWQ6IHN0YXR1cy5tYXRjaElkIH07XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBJZ25vcmUgZGVjb2RlIGVycm9ycyBkdXJpbmcgdHJhbnNpdGlvblxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBIaWdoLWxldmVsOiBmdWxsIG1hdGNobWFraW5nIFRFRSBlbnRyeSBmbG93LlxuICAgKiBDcmVhdGVzIHRpY2tldCBvbiBMMSwgZGVsZWdhdGVzIGl0IHRvIFRFRSwgd2FpdHMgZm9yIGFjdGl2YXRpb24sIHRoZW4gam9pbnMgdGhlIHF1ZXVlLlxuICAgKiBVc2UgaW5kaXZpZHVhbCBtZXRob2RzIChjcmVhdGVUaWNrZXQsIGRlbGVnYXRlVGlja2V0LCBqb2luUXVldWUpIGFzIGVzY2FwZSBoYXRjaGVzIGlmIG5lZWRlZC5cbiAgICovXG4gIGFzeW5jIGVudGVyUXVldWUoXG4gICAgdGVuYW50OiBBZGRyZXNzLFxuICAgIHF1ZXVlOiBBZGRyZXNzLFxuICAgIHBsYXllckRhdGE6IEFkZHJlc3MsXG4gICAgdGVlUnBjOiBScGM8U29sYW5hUnBjQXBpPixcbiAgICB0ZWVVcmxXaXRoVG9rZW46IHN0cmluZyxcbiAgICB2YWxpZGF0b3I/OiBBZGRyZXNzLFxuICAgIGNhbGxiYWNrUHJvZ3JhbT86IEFkZHJlc3MsXG4gICk6IFByb21pc2U8QWRkcmVzcz4ge1xuICAgIGNvbnN0IHBsYXllciA9IHRoaXMuc2lnbmVyLmFkZHJlc3MgYXMgQWRkcmVzcztcbiAgICBjb25zdCB0aWNrZXRQZGEgPSBhd2FpdCB0aGlzLmdldFRpY2tldFBkYShwbGF5ZXIsIHRlbmFudCk7XG5cbiAgICBhd2FpdCB0aGlzLmNyZWF0ZVRpY2tldCh0ZW5hbnQpO1xuICAgIGF3YWl0IHRoaXMuZGVsZWdhdGVUaWNrZXQocGxheWVyLCB0ZW5hbnQsIHZhbGlkYXRvcik7XG4gICAgYXdhaXQgd2FpdFVudGlsUGVybWlzc2lvbkFjdGl2ZSh0ZWVVcmxXaXRoVG9rZW4sIHRpY2tldFBkYSk7XG5cbiAgICBjb25zdCB0ZWVDbGllbnQgPSBuZXcgTWF0Y2htYWtpbmdQbGF5ZXIodGVlUnBjLCB0aGlzLnNpZ25lciwgdGhpcy5wcm9ncmFtSWQpO1xuICAgIGF3YWl0IHRlZUNsaWVudC5qb2luUXVldWUocXVldWUsIHRlbmFudCwgcGxheWVyRGF0YSwgY2FsbGJhY2tQcm9ncmFtKTtcblxuICAgIHJldHVybiB0aWNrZXRQZGE7XG4gIH1cblxuICAvKiogQ3JlYXRlIGEgbmV3IE1hdGNobWFraW5nUGxheWVyIHBvaW50aW5nIGF0IGEgVEVFIFJQQyBlbmRwb2ludC4gKi9cbiAgd2l0aFJwYyh0ZWVVcmw6IHN0cmluZyk6IE1hdGNobWFraW5nUGxheWVyIHtcbiAgICByZXR1cm4gbmV3IE1hdGNobWFraW5nUGxheWVyKGNyZWF0ZVNvbGFuYVJwYyh0ZWVVcmwpLCB0aGlzLnNpZ25lciwgdGhpcy5wcm9ncmFtSWQpO1xuICB9XG59XG4iXX0=
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxheWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3BsYXllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZUFBZSxFQUNmLFdBQVcsR0FNWixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQ0wsK0JBQStCLEVBQy9CLGlDQUFpQyxFQUNqQyx3Q0FBd0MsRUFDeEMsNEJBQTRCLEVBQzVCLCtCQUErQixFQUMvQiw4QkFBOEIsRUFDOUIscUJBQXFCLEVBQ3JCLFdBQVcsR0FDWixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRCxPQUFPLEtBQUssS0FBSyxNQUFNLFlBQVksQ0FBQztBQUVwQyxNQUFNLGVBQWUsR0FBRyw4Q0FBeUQsQ0FBQztBQUVsRixNQUFNLE9BQU8saUJBQWlCO0lBSzVCLFlBQ0UsR0FBc0IsRUFDdEIsTUFBeUIsRUFDekIsWUFBcUIsZUFBZTtRQUVwQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzdCLENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQWUsRUFBRSxNQUFlO1FBQ2pELE9BQU8sS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFrQjtRQUNoQyxPQUFPLHFCQUFxQixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBZTtRQUNoQyxNQUFNLEVBQUUsR0FBRyxNQUFNLCtCQUErQixDQUFDO1lBQy9DLE1BQU0sRUFBRSxJQUFJ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QWM7UUFDcEIsT0FBTyxJQUFJLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNyRixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBjcmVhdGVTb2xhbmFScGMsXG4gIEFjY291bnRSb2xlLFxuICB0eXBlIEFkZHJlc3MsXG4gIHR5cGUgVHJhbnNhY3Rpb25TaWduZXIsXG4gIHR5cGUgUnBjLFxuICB0eXBlIFNvbGFuYVJwY0FwaSxcbiAgdHlwZSBJbnN0cnVjdGlvbixcbn0gZnJvbSBcIkBzb2xhbmEva2l0XCI7XG5pbXBvcnQge1xuICBnZXRDcmVhdGVUaWNrZXRJbnN0cnVjdGlvbkFzeW5jLFxuICBnZXREZWxlZ2F0ZVRpY2tldEluc3RydWN0aW9uQXN5bmMsXG4gIGdldFNldHVwVGlja2V0UGVybWlzc2lvbkluc3RydWN0aW9uQXN5bmMsXG4gIGdldEpvaW5RdWV1ZUluc3RydWN0aW9uQXN5bmMsXG4gIGdldENhbmNlbFRpY2tldEluc3RydWN0aW9uQXN5bmMsXG4gIGdldENsb3NlVGlja2V0SW5zdHJ1Y3Rpb25Bc3luYyxcbiAgZmV0Y2hNYXliZU1hdGNoVGlja2V0LFxuICBhY2NvdW50VHlwZSxcbn0gZnJvbSBcIi4vZ2VuZXJhdGVkL2R1ZWwvaW5kZXguanNcIjtcbmltcG9ydCB7IHNlbmRJbnN0cnVjdGlvbiB9IGZyb20gXCIuL3RyYW5zYWN0aW9uLmpzXCI7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tIFwiLi91dGlscy5qc1wiO1xuXG5jb25zdCBEVUVMX1BST0dSQU1fSUQgPSBcIkVkWnpVd0tkMVgyWldqeExQcHoxY3BFek1GN1JVWkM0M1BxNjR2MVZjSzVYXCIgYXMgQWRkcmVzcztcblxuZXhwb3J0IGNsYXNzIE1hdGNobWFraW5nUGxheWVyIHtcbiAgcHVibGljIHJwYzogUnBjPFNvbGFuYVJwY0FwaT47XG4gIHB1YmxpYyBzaWduZXI6IFRyYW5zYWN0aW9uU2lnbmVyO1xuICBwdWJsaWMgcHJvZ3JhbUlkOiBBZGRyZXNzO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJwYzogUnBjPFNvbGFuYVJwY0FwaT4sXG4gICAgc2lnbmVyOiBUcmFuc2FjdGlvblNpZ25lcixcbiAgICBwcm9ncmFtSWQ6IEFkZHJlc3MgPSBEVUVMX1BST0dSQU1fSUQsXG4gICkge1xuICAgIHRoaXMucnBjID0gcnBjO1xuICAgIHRoaXMuc2lnbmVyID0gc2lnbmVyO1xuICAgIHRoaXMucHJvZ3JhbUlkID0gcHJvZ3JhbUlkO1xuICB9XG5cbiAgYXN5bmMgZ2V0VGlja2V0UGRhKHBsYXllcjogQWRkcmVzcywgdGVuYW50OiBBZGRyZXNzKTogUHJvbWlzZTxBZGRyZXNzPiB7XG4gICAgcmV0dXJuIHV0aWxzLmRlcml2ZVRpY2tldFBkYSh0aGlzLnByb2dyYW1JZCwgcGxheWVyLCB0ZW5hbnQpO1xuICB9XG5cbiAgYXN5bmMgZ2V0VGlja2V0KHRpY2tldFBkYTogQWRkcmVzcykge1xuICAgIHJldHVybiBmZXRjaE1heWJlTWF0Y2hUaWNrZXQodGhpcy5ycGMsIHRpY2tldFBkYSk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVUaWNrZXQodGVuYW50OiBBZGRyZXNzKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBpeCA9IGF3YWl0IGdldENyZWF0ZVRpY2tldEluc3RydWN0aW9uQXN5bmMoe1xuICAgICAgcGxheWVyOiB0aGlzLnNpZ25lcixcbiAgICAgIHRlbmFudCxcbiAgICB9LCB7IHByb2dyYW1BZGRyZXNzOiB0aGlzLnByb2dyYW1JZCB9KTtcbiAgICByZXR1cm4gc2VuZEluc3RydWN0aW9uKHRoaXMucnBjLCBpeCwgdGhpcy5zaWduZXIpO1xuICB9XG5cbiAgYXN5bmMgZGVsZWdhdGVUaWNrZXQoXG4gICAgcGxheWVyOiBBZGRyZXNzLFxuICAgIHRlbmFudDogQWRkcmVzcyxcbiAgICB2YWxpZGF0b3I/OiBBZGRyZXNzLFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHRpY2tldFBkYSA9IGF3YWl0IHRoaXMuZ2V0VGlja2V0UGRhKHBsYXllciwgdGVuYW50KTtcbiAgICBjb25zdCBpeCA9IGF3YWl0IGdldERlbGVnYXRlVGlja2V0SW5zdHJ1Y3Rpb25Bc3luYyh7XG4gICAgICBwZGE6IHRpY2tldFBkYSxcbiAgICAgIHBheWVyOiB0aGlzLnNpZ25lcixcbiAgICAgIHZhbGlkYXRvcixcbiAgICAgIGFjY291bnRUeXBlOiBhY2NvdW50VHlwZShcIlRpY2tldFwiLCB7IHBsYXllciwgdGVuYW50IH0pLFxuICAgIH0sIHsgcHJvZ3JhbUFkZHJlc3M6IHRoaXMucHJvZ3JhbUlkIH0pO1xuICAgIHJldHVybiBzZW5kSW5zdHJ1Y3Rpb24odGhpcy5ycGMsIGl4LCB0aGlzLnNpZ25lcik7XG4gIH1cblxuICBhc3luYyBqb2luUXVldWUoXG4gICAgcXVldWU6IEFkZHJlc3MsXG4gICAgdGVuYW50OiBBZGRyZXNzLFxuICAgIHBsYXllckRhdGE6IEFkZHJlc3MsXG4gICAgY2FsbGJhY2tQcm9ncmFtPzogQWRkcmVzcyxcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBpeCA9IGF3YWl0IGdldEpvaW5RdWV1ZUluc3RydWN0aW9uQXN5bmMoe1xuICAgICAgcXVldWUsXG4gICAgICB0ZW5hbnQsXG4gICAgICBwbGF5ZXJEYXRhLFxuICAgICAgc2lnbmVyOiB0aGlzLnNpZ25lcixcbiAgICB9LCB7IHByb2dyYW1BZGRyZXNzOiB0aGlzLnByb2dyYW1JZCB9KTtcbiAgICBjb25zdCBpeEZpbmFsID0gY2FsbGJhY2tQcm9ncmFtXG4gICAgICA/IHsgLi4uaXgsIGFjY291bnRzOiBbLi4uaXguYWNjb3VudHMsIHsgYWRkcmVzczogY2FsbGJhY2tQcm9ncmFtLCByb2xlOiAwIGFzIGNvbnN0IH1dIH1cbiAgICAgIDogaXg7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICByZXR1cm4gc2VuZEluc3RydWN0aW9uKHRoaXMucnBjLCBpeEZpbmFsIGFzIGFueSwgdGhpcy5zaWduZXIpO1xuICB9XG5cbiAgYXN5bmMgY2FuY2VsVGlja2V0KHRlbmFudDogQWRkcmVzcyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgaXggPSBhd2FpdCBnZXRDYW5jZWxUaWNrZXRJbnN0cnVjdGlvbkFzeW5jKHtcbiAgICAgIHBsYXllcjogdGhpcy5zaWduZXIsXG4gICAgICB0ZW5hbnQsXG4gICAgfSwgeyBwcm9ncmFtQWRkcmVzczogdGhpcy5wcm9ncmFtSWQgfSk7XG4gICAgcmV0dXJuIHNlbmRJbnN0cnVjdGlvbih0aGlzLnJwYywgaXgsIHRoaXMuc2lnbmVyKTtcbiAgfVxuXG4gIGFzeW5jIGNsb3NlVGlja2V0KHRlbmFudDogQWRkcmVzcyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgaXggPSBhd2FpdCBnZXRDbG9zZVRpY2tldEluc3RydWN0aW9uQXN5bmMoe1xuICAgICAgcGxheWVyOiB0aGlzLnNpZ25lcixcbiAgICAgIHRlbmFudCxcbiAgICB9LCB7IHByb2dyYW1BZGRyZXNzOiB0aGlzLnByb2dyYW1JZCB9KTtcbiAgICByZXR1cm4gc2VuZEluc3RydWN0aW9uKHRoaXMucnBjLCBpeCwgdGhpcy5zaWduZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBvbGwgTDEgZm9yIHRpY2tldCBzdGF0dXMuXG4gICAqIFJldHVybnMgbWF0Y2ggaW5mbyB3aGVuIHN0YXR1cyBiZWNvbWVzIE1hdGNoZWQuXG4gICAqL1xuICBhc3luYyBwb2xsRm9yTWF0Y2goXG4gICAgdGlja2V0UGRhOiBBZGRyZXNzLFxuICAgIG1heEF0dGVtcHRzID0gNjAsXG4gICAgcG9sbEludGVydmFsID0gMjAwMCxcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgKTogUHJvbWlzZTx7IG9wcG9uZW50OiBBZGRyZXNzOyBtYXRjaElkOiBiaWdpbnQgfSB8IG51bGw+IHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1heEF0dGVtcHRzOyBpKyspIHtcbiAgICAgIGlmIChzaWduYWw/LmFib3J0ZWQpIHJldHVybiBudWxsO1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgcG9sbEludGVydmFsKSk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBtYXliZVRpY2tldCA9IGF3YWl0IGZldGNoTWF5YmVNYXRjaFRpY2tldCh0aGlzLnJwYywgdGlja2V0UGRhKTtcbiAgICAgICAgaWYgKCFtYXliZVRpY2tldC5leGlzdHMpIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBzdGF0dXMgPSBtYXliZVRpY2tldC5kYXRhLnN0YXR1cztcbiAgICAgICAgaWYgKHN0YXR1cy5fX2tpbmQgPT09IFwiTWF0Y2hlZFwiKSB7XG4gICAgICAgICAgcmV0dXJuIHsgb3Bwb25lbnQ6IHN0YXR1cy5vcHBvbmVudCwgbWF0Y2hJZDogc3RhdHVzLm1hdGNoSWQgfTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIElnbm9yZSBkZWNvZGUgZXJyb3JzIGR1cmluZyB0cmFuc2l0aW9uXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEhpZ2gtbGV2ZWw6IGZ1bGwgbWF0Y2htYWtpbmcgVEVFIGVudHJ5IGZsb3cuXG4gICAqIENyZWF0ZXMgdGlja2V0IG9uIEwxLCBzZXRzIHVwIHBlcm1pc3Npb24gUERBIChzbyBvbmx5IHBsYXllciArIHF1ZXVlIGF1dGhvcml0eSBjYW4gcmVhZCBpdCksXG4gICAqIGRlbGVnYXRlcyB0aGUgcGVybWlzc2lvbiBQREEgYW5kIHRpY2tldCB0byBURUUsIHRoZW4gam9pbnMgdGhlIHF1ZXVlLlxuICAgKiBVc2UgaW5kaXZpZHVhbCBtZXRob2RzIChjcmVhdGVUaWNrZXQsIGRlbGVnYXRlVGlja2V0LCBqb2luUXVldWUpIGFzIGVzY2FwZSBoYXRjaGVzIGlmIG5lZWRlZC5cbiAgICovXG4gIGFzeW5jIGVudGVyUXVldWUoXG4gICAgdGVuYW50OiBBZGRyZXNzLFxuICAgIHF1ZXVlOiBBZGRyZXNzLFxuICAgIHBsYXllckRhdGE6IEFkZHJlc3MsXG4gICAgdGVlUnBjOiBScGM8U29sYW5hUnBjQXBpPixcbiAgICB0ZWVVcmxXaXRoVG9rZW46IHN0cmluZyxcbiAgICB2YWxpZGF0b3I/OiBBZGRyZXNzLFxuICAgIGNhbGxiYWNrUHJvZ3JhbT86IEFkZHJlc3MsXG4gICk6IFByb21pc2U8QWRkcmVzcz4ge1xuICAgIGNvbnN0IHBsYXllciA9IHRoaXMuc2lnbmVyLmFkZHJlc3MgYXMgQWRkcmVzcztcbiAgICBjb25zdCB0aWNrZXRQZGEgPSBhd2FpdCB0aGlzLmdldFRpY2tldFBkYShwbGF5ZXIsIHRlbmFudCk7XG5cbiAgICAvLyAxLiBDcmVhdGUgdGlja2V0IG9uIEwxXG4gICAgYXdhaXQgdGhpcy5jcmVhdGVUaWNrZXQodGVuYW50KTtcblxuICAgIC8vIDIuIENyZWF0ZSBQZXJtaXNzaW9uIFBEQSBmb3IgdGhlIHRpY2tldCAoQ1BJIGZyb20gZHVlbCBwcm9ncmFtIHdpdGggaW52b2tlX3NpZ25lZClcbiAgICBjb25zdCBwZXJtaXNzaW9uUGRhID0gYXdhaXQgdXRpbHMuZGVyaXZlUGVybWlzc2lvblBkYSh0aWNrZXRQZGEpO1xuICAgIGNvbnN0IHNldHVwSXggPSBhd2FpdCBnZXRTZXR1cFRpY2tldFBlcm1pc3Npb25JbnN0cnVjdGlvbkFzeW5jKHtcbiAgICAgIHBsYXllcjogdGhpcy5zaWduZXIsXG4gICAgICB0ZW5hbnQsXG4gICAgICBwZXJtaXNzaW9uOiBwZXJtaXNzaW9uUGRhLFxuICAgICAgcGVybWlzc2lvblByb2dyYW06IHV0aWxzLlBFUk1JU1NJT05fUFJPR1JBTSxcbiAgICB9LCB7IHByb2dyYW1BZGRyZXNzOiB0aGlzLnByb2dyYW1JZCB9KTtcbiAgICBhd2FpdCBzZW5kSW5zdHJ1Y3Rpb24odGhpcy5ycGMsIHNldHVwSXgsIHRoaXMuc2lnbmVyKTtcblxuICAgIC8vIDMuIERlbGVnYXRlIFBlcm1pc3Npb24gUERBIHRvIFRFRSAoY2FsbGVkIG9uIHBlcm1pc3Npb24gcHJvZ3JhbSwgcGxheWVyIHNpZ25zKVxuICAgIGNvbnN0IHsgZGVsZWdhdGlvbkJ1ZmZlciwgZGVsZWdhdGlvblJlY29yZCwgZGVsZWdhdGlvbk1ldGFkYXRhIH0gPVxuICAgICAgYXdhaXQgdXRpbHMuZGVyaXZlUGVybWlzc2lvbkRlbGVnYXRpb25QZGFzKHBlcm1pc3Npb25QZGEpO1xuICAgIGNvbnN0IGRlbGVnYXRlUGVybUl4OiBJbnN0cnVjdGlvbiA9IHtcbiAgICAgIHByb2dyYW1BZGRyZXNzOiB1dGlscy5QRVJNSVNTSU9OX1BST0dSQU0sXG4gICAgICBkYXRhOiBuZXcgVWludDhBcnJheShbMywgMCwgMCwgMCwgMCwgMCwgMCwgMF0pLFxuICAgICAgYWNjb3VudHM6IFtcbiAgICAgICAgeyBhZGRyZXNzOiB0aGlzLnNpZ25lci5hZGRyZXNzLCByb2xlOiBBY2NvdW50Um9sZS5XUklUQUJMRV9TSUdORVIgfSxcbiAgICAgICAgeyBhZGRyZXNzOiB0aGlzLnNpZ25lci5hZGRyZXNzLCByb2xlOiBBY2NvdW50Um9sZS5SRUFET05MWV9TSUdORVIgfSxcbiAgICAgICAgeyBhZGRyZXNzOiB0aWNrZXRQZGEsIHJvbGU6IEFjY291bnRSb2xlLlJFQURPTkxZIH0sXG4gICAgICAgIHsgYWRkcmVzczogcGVybWlzc2lvblBkYSwgcm9sZTogQWNjb3VudFJvbGUuV1JJVEFCTEUgfSxcbiAgICAgICAgeyBhZGRyZXNzOiBcIjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExXCIgYXMgQWRkcmVzcywgcm9sZTogQWNjb3VudFJvbGUuUkVBRE9OTFkgfSxcbiAgICAgICAgeyBhZGRyZXNzOiB1dGlscy5QRVJNSVNTSU9OX1BST0dSQU0sIHJvbGU6IEFjY291bnRSb2xlLlJFQURPTkxZIH0sXG4gICAgICAgIHsgYWRkcmVzczogZGVsZWdhdGlvbkJ1ZmZlciwgcm9sZTogQWNjb3VudFJvbGUuV1JJVEFCTEUgfSxcbiAgICAgICAgeyBhZGRyZXNzOiBkZWxlZ2F0aW9uUmVjb3JkLCByb2xlOiBBY2NvdW50Um9sZS5XUklUQUJMRSB9LFxuICAgICAgICB7IGFkZHJlc3M6IGRlbGVnYXRpb25NZXRhZGF0YSwgcm9sZTogQWNjb3VudFJvbGUuV1JJVEFCTEUgfSxcbiAgICAgICAgeyBhZGRyZXNzOiB1dGlscy5ERUxFR0FUSU9OX1BST0dSQU0sIHJvbGU6IEFjY291bnRSb2xlLlJFQURPTkxZIH0sXG4gICAgICAgIC4uLih2YWxpZGF0b3IgPyBbeyBhZGRyZXNzOiB2YWxpZGF0b3IsIHJvbGU6IEFjY291bnRSb2xlLlJFQURPTkxZIH1dIDogW10pLFxuICAgICAgXSxcbiAgICB9O1xuICAgIGF3YWl0IHNlbmRJbnN0cnVjdGlvbih0aGlzLnJwYywgZGVsZWdhdGVQZXJtSXgsIHRoaXMuc2lnbmVyKTtcblxuICAgIC8vIDQuIERlbGVnYXRlIHRpY2tldCB0byBURUVcbiAgICBhd2FpdCB0aGlzLmRlbGVnYXRlVGlja2V0KHBsYXllciwgdGVuYW50LCB2YWxpZGF0b3IpO1xuXG4gICAgLy8gNS4gSm9pbiB0aGUgcXVldWUgb24gVEVFXG4gICAgY29uc3QgdGVlQ2xpZW50ID0gbmV3IE1hdGNobWFraW5nUGxheWVyKHRlZVJwYywgdGhpcy5zaWduZXIsIHRoaXMucHJvZ3JhbUlkKTtcbiAgICBhd2FpdCB0ZWVDbGllbnQuam9pblF1ZXVlKHF1ZXVlLCB0ZW5hbnQsIHBsYXllckRhdGEsIGNhbGxiYWNrUHJvZ3JhbSk7XG5cbiAgICByZXR1cm4gdGlja2V0UGRhO1xuICB9XG5cbiAgLyoqIENyZWF0ZSBhIG5ldyBNYXRjaG1ha2luZ1BsYXllciBwb2ludGluZyBhdCBhIFRFRSBSUEMgZW5kcG9pbnQuICovXG4gIHdpdGhScGModGVlVXJsOiBzdHJpbmcpOiBNYXRjaG1ha2luZ1BsYXllciB7XG4gICAgcmV0dXJuIG5ldyBNYXRjaG1ha2luZ1BsYXllcihjcmVhdGVTb2xhbmFScGModGVlVXJsKSwgdGhpcy5zaWduZXIsIHRoaXMucHJvZ3JhbUlkKTtcbiAgfVxufVxuIl19
|
package/dist/tee.d.ts
CHANGED
|
@@ -8,7 +8,8 @@ export declare function getAuthToken(rpcUrl: string, signer: MessagePartialSigne
|
|
|
8
8
|
expiresAt: number;
|
|
9
9
|
}>;
|
|
10
10
|
/**
|
|
11
|
-
* Poll the TEE
|
|
12
|
-
*
|
|
11
|
+
* Poll the TEE until the Permission PDA for the given account is active (authorizedUsers non-empty).
|
|
12
|
+
* This confirms the TEE has picked up the delegated Permission PDA and is enforcing access control.
|
|
13
|
+
* Returns true if active before timeout, false otherwise.
|
|
13
14
|
*/
|
|
14
|
-
export declare function
|
|
15
|
+
export declare function waitForPermission(teeUrlWithToken: string, accountAddress: Address, timeoutMs?: number): Promise<boolean>;
|
package/dist/tee.js
CHANGED
|
@@ -29,34 +29,28 @@ export async function getAuthToken(rpcUrl, signer) {
|
|
|
29
29
|
return { token: authJson.token, expiresAt };
|
|
30
30
|
}
|
|
31
31
|
/**
|
|
32
|
-
* Poll the TEE
|
|
33
|
-
*
|
|
32
|
+
* Poll the TEE until the Permission PDA for the given account is active (authorizedUsers non-empty).
|
|
33
|
+
* This confirms the TEE has picked up the delegated Permission PDA and is enforcing access control.
|
|
34
|
+
* Returns true if active before timeout, false otherwise.
|
|
34
35
|
*/
|
|
35
|
-
export async function
|
|
36
|
-
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
else {
|
|
43
|
-
permissionUrl = `${baseUrl}/permission?pubkey=${pda}`;
|
|
44
|
-
}
|
|
45
|
-
const start = Date.now();
|
|
46
|
-
while (Date.now() - start < timeoutMs) {
|
|
36
|
+
export async function waitForPermission(teeUrlWithToken, accountAddress, timeoutMs = 10000) {
|
|
37
|
+
const [baseUrl, token] = teeUrlWithToken.replace("/?", "?").split("?");
|
|
38
|
+
const permUrl = token
|
|
39
|
+
? `${baseUrl}/permission?${token}&pubkey=${accountAddress}`
|
|
40
|
+
: `${baseUrl}/permission?pubkey=${accountAddress}`;
|
|
41
|
+
const deadline = Date.now() + timeoutMs;
|
|
42
|
+
while (Date.now() < deadline) {
|
|
47
43
|
try {
|
|
48
|
-
const res = await fetch(
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
return true;
|
|
53
|
-
}
|
|
44
|
+
const res = await fetch(permUrl);
|
|
45
|
+
const json = (await res.json());
|
|
46
|
+
if (json.authorizedUsers && json.authorizedUsers.length > 0)
|
|
47
|
+
return true;
|
|
54
48
|
}
|
|
55
49
|
catch {
|
|
56
|
-
// ignore transient errors
|
|
50
|
+
// ignore transient errors
|
|
57
51
|
}
|
|
58
|
-
await new Promise((r) => setTimeout(r,
|
|
52
|
+
await new Promise((r) => setTimeout(r, 500));
|
|
59
53
|
}
|
|
60
54
|
return false;
|
|
61
55
|
}
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RlZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLHFCQUFxQixHQUd0QixNQUFNLGFBQWEsQ0FBQztBQUlyQjs7R0FFRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsWUFBWSxDQUNoQyxNQUFjLEVBQ2QsTUFBNEI7SUFFNUIsTUFBTSxZQUFZLEdBQUcsTUFBTSxLQUFLLENBQzlCLEdBQUcsTUFBTSwwQkFBMEIsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUNwRCxDQUFDO0lBQ0YsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixZQUFZLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBQ0QsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsTUFBTSxZQUFZLENBQUMsSUFBSSxFQUFFLENBQTBCLENBQUM7SUFFM0UsTUFBTSxjQUFjLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDM0QsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLHFCQUFxQixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQWtCLENBQUMsQ0FBQztJQUNyRCxNQUFNLGVBQWUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUU3RCxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLE1BQU0sYUFBYSxFQUFFO1FBQ25ELE1BQU0sRUFBRSxNQUFNO1FBQ2QsT0FBTyxFQUFFLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFO1FBQy9DLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ25CLE1BQU0sRUFBRSxNQUFNLENBQUMsT0FBTztZQUN0QixTQUFTO1lBQ1QsU0FBUyxFQUFFLGVBQWU7U0FDM0IsQ0FBQztLQUNILENBQUMsQ0FBQztJQUNILE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQTBELENBQUM7SUFDbEcsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFDRCxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzlFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQztBQUM5QyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsaUJBQWlCLENBQ3JDLGVBQXVCLEVBQ3ZCLGNBQXVCLEVBQ3ZCLFNBQVMsR0FBRyxLQUFLO0lBRWpCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZFLE1BQU0sT0FBTyxHQUFHLEtBQUs7UUFDbkIsQ0FBQyxDQUFDLEdBQUcsT0FBTyxlQUFlLEtBQUssV0FBVyxjQUFjLEVBQUU7UUFDM0QsQ0FBQyxDQUFDLEdBQUcsT0FBTyxzQkFBc0IsY0FBYyxFQUFFLENBQUM7SUFFckQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQztJQUN4QyxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUM7WUFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNqQyxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRSxDQUEyQyxDQUFDO1lBQzFFLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1FBQzNFLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCwwQkFBMEI7UUFDNUIsQ0FBQztRQUNELE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgZ2V0QmFzZTU4RGVjb2RlcixcbiAgY3JlYXRlU2lnbmFibGVNZXNzYWdlLFxuICB0eXBlIEFkZHJlc3MsXG4gIHR5cGUgTWVzc2FnZVBhcnRpYWxTaWduZXIsXG59IGZyb20gXCJAc29sYW5hL2tpdFwiO1xuXG5leHBvcnQgdHlwZSB7IE1lc3NhZ2VQYXJ0aWFsU2lnbmVyIGFzIE1lc3NhZ2VTaWduZXIgfTtcblxuLyoqXG4gKiBBdXRoZW50aWNhdGUgd2l0aCB0aGUgTWFnaWNCbG9jayBURUUgdmlhIGNoYWxsZW5nZS1zaWduIGZsb3cuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBdXRoVG9rZW4oXG4gIHJwY1VybDogc3RyaW5nLFxuICBzaWduZXI6IE1lc3NhZ2VQYXJ0aWFsU2lnbmVyLFxuKTogUHJvbWlzZTx7IHRva2VuOiBzdHJpbmc7IGV4cGlyZXNBdDogbnVtYmVyIH0+IHtcbiAgY29uc3QgY2hhbGxlbmdlUmVzID0gYXdhaXQgZmV0Y2goXG4gICAgYCR7cnBjVXJsfS9hdXRoL2NoYWxsZW5nZT9wdWJrZXk9JHtzaWduZXIuYWRkcmVzc31gXG4gICk7XG4gIGlmICghY2hhbGxlbmdlUmVzLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBURUUgY2hhbGxlbmdlIGZhaWxlZDogJHtjaGFsbGVuZ2VSZXMuc3RhdHVzVGV4dH1gKTtcbiAgfVxuICBjb25zdCB7IGNoYWxsZW5nZSB9ID0gKGF3YWl0IGNoYWxsZW5nZVJlcy5qc29uKCkpIGFzIHsgY2hhbGxlbmdlOiBzdHJpbmcgfTtcblxuICBjb25zdCBjaGFsbGVuZ2VCeXRlcyA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShjaGFsbGVuZ2UpO1xuICBjb25zdCBbc2lnRGljdF0gPSBhd2FpdCBzaWduZXIuc2lnbk1lc3NhZ2VzKFtjcmVhdGVTaWduYWJsZU1lc3NhZ2UoY2hhbGxlbmdlQnl0ZXMpXSk7XG4gIGNvbnN0IHNpZ25hdHVyZSA9IHNpZ0RpY3Rbc2lnbmVyLmFkZHJlc3MgYXMgQWRkcmVzc107XG4gIGNvbnN0IHNpZ25hdHVyZVN0cmluZyA9IGdldEJhc2U1OERlY29kZXIoKS5kZWNvZGUoc2lnbmF0dXJlKTtcblxuICBjb25zdCB0b2tlblJlcyA9IGF3YWl0IGZldGNoKGAke3JwY1VybH0vYXV0aC9sb2dpbmAsIHtcbiAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgIGhlYWRlcnM6IHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBwdWJrZXk6IHNpZ25lci5hZGRyZXNzLFxuICAgICAgY2hhbGxlbmdlLFxuICAgICAgc2lnbmF0dXJlOiBzaWduYXR1cmVTdHJpbmcsXG4gICAgfSksXG4gIH0pO1xuICBjb25zdCBhdXRoSnNvbiA9IChhd2FpdCB0b2tlblJlcy5qc29uKCkpIGFzIHsgdG9rZW46IHN0cmluZzsgZXhwaXJlc0F0PzogbnVtYmVyOyBlcnJvcj86IHN0cmluZyB9O1xuICBpZiAodG9rZW5SZXMuc3RhdHVzICE9PSAyMDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBhdXRoZW50aWNhdGU6ICR7YXV0aEpzb24uZXJyb3J9YCk7XG4gIH1cbiAgY29uc3QgZXhwaXJlc0F0ID0gYXV0aEpzb24uZXhwaXJlc0F0ID8/IERhdGUubm93KCkgKyAxMDAwICogNjAgKiA2MCAqIDI0ICogMzA7XG4gIHJldHVybiB7IHRva2VuOiBhdXRoSnNvbi50b2tlbiwgZXhwaXJlc0F0IH07XG59XG5cbi8qKlxuICogUG9sbCB0aGUgVEVFIHVudGlsIHRoZSBQZXJtaXNzaW9uIFBEQSBmb3IgdGhlIGdpdmVuIGFjY291bnQgaXMgYWN0aXZlIChhdXRob3JpemVkVXNlcnMgbm9uLWVtcHR5KS5cbiAqIFRoaXMgY29uZmlybXMgdGhlIFRFRSBoYXMgcGlja2VkIHVwIHRoZSBkZWxlZ2F0ZWQgUGVybWlzc2lvbiBQREEgYW5kIGlzIGVuZm9yY2luZyBhY2Nlc3MgY29udHJvbC5cbiAqIFJldHVybnMgdHJ1ZSBpZiBhY3RpdmUgYmVmb3JlIHRpbWVvdXQsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JQZXJtaXNzaW9uKFxuICB0ZWVVcmxXaXRoVG9rZW46IHN0cmluZyxcbiAgYWNjb3VudEFkZHJlc3M6IEFkZHJlc3MsXG4gIHRpbWVvdXRNcyA9IDEwMDAwLFxuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IFtiYXNlVXJsLCB0b2tlbl0gPSB0ZWVVcmxXaXRoVG9rZW4ucmVwbGFjZShcIi8/XCIsIFwiP1wiKS5zcGxpdChcIj9cIik7XG4gIGNvbnN0IHBlcm1VcmwgPSB0b2tlblxuICAgID8gYCR7YmFzZVVybH0vcGVybWlzc2lvbj8ke3Rva2VufSZwdWJrZXk9JHthY2NvdW50QWRkcmVzc31gXG4gICAgOiBgJHtiYXNlVXJsfS9wZXJtaXNzaW9uP3B1YmtleT0ke2FjY291bnRBZGRyZXNzfWA7XG5cbiAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgdGltZW91dE1zO1xuICB3aGlsZSAoRGF0ZS5ub3coKSA8IGRlYWRsaW5lKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKHBlcm1VcmwpO1xuICAgICAgY29uc3QganNvbiA9IChhd2FpdCByZXMuanNvbigpKSBhcyB7IGF1dGhvcml6ZWRVc2Vycz86IHVua25vd25bXSB8IG51bGwgfTtcbiAgICAgIGlmIChqc29uLmF1dGhvcml6ZWRVc2VycyAmJiBqc29uLmF1dGhvcml6ZWRVc2Vycy5sZW5ndGggPiAwKSByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGlnbm9yZSB0cmFuc2llbnQgZXJyb3JzXG4gICAgfVxuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIDUwMCkpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuIl19
|