@1upmonster/duel 0.2.1 → 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 +120 -59
- package/dist/admin.d.ts +8 -1
- package/dist/admin.js +52 -9
- package/dist/generated/duel/errors/duel.d.ts +1 -3
- package/dist/generated/duel/errors/duel.js +2 -4
- package/dist/generated/duel/instructions/index.d.ts +2 -0
- package/dist/generated/duel/instructions/index.js +3 -1
- package/dist/generated/duel/instructions/joinQueue.d.ts +1 -1
- package/dist/generated/duel/instructions/joinQueue.js +3 -3
- package/dist/generated/duel/instructions/setupQueuePermission.d.ts +51 -0
- package/dist/generated/duel/instructions/setupQueuePermission.js +63 -0
- package/dist/generated/duel/instructions/setupTicketPermission.d.ts +54 -0
- package/dist/generated/duel/instructions/setupTicketPermission.js +63 -0
- package/dist/generated/duel/programs/duel.d.ts +11 -3
- package/dist/generated/duel/programs/duel.js +19 -3
- package/dist/player.d.ts +8 -1
- package/dist/player.js +56 -5
- 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 +67 -7
- package/src/duel.json +57 -5
- package/src/generated/duel/errors/duel.ts +2 -4
- package/src/generated/duel/instructions/index.ts +3 -1
- package/src/generated/duel/instructions/joinQueue.ts +3 -3
- package/src/generated/duel/instructions/setupQueuePermission.ts +112 -0
- package/src/generated/duel/instructions/setupTicketPermission.ts +115 -0
- package/src/generated/duel/programs/duel.ts +12 -4
- package/src/player.ts +72 -1
- package/src/tee.ts +18 -22
- package/src/transaction.ts +33 -18
- package/src/utils.ts +34 -0
- package/src/encryption.ts +0 -154
- package/src/idl/private_matchmaking.json +0 -1027
- package/src/idl/private_matchmaking.ts +0 -1033
package/README.md
CHANGED
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
# @1upmonster/duel
|
|
2
2
|
|
|
3
|
-
TypeScript SDK for **Duel**
|
|
3
|
+
TypeScript SDK for **Duel** — a privacy-preserving matchmaking protocol on Solana using MagicBlock Ephemeral Rollups (TEE).
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
- **Privacy-First**: Player ELO and queue status hidden in TEE
|
|
8
|
-
- **Client-Side**: Players join queues directly from their wallets (no CPI required)
|
|
9
|
-
- **Automatic Matching**: TEE processes matches based on ELO windows
|
|
10
|
-
- **Easy Integration**: Simple SDK for both game owners and players
|
|
5
|
+
Built on [`@solana/kit`](https://github.com/anza-xyz/kit). No `@coral-xyz/anchor` or legacy `web3.js` dependency.
|
|
11
6
|
|
|
12
7
|
## Installation
|
|
13
8
|
|
|
@@ -17,85 +12,151 @@ npm install @1upmonster/duel
|
|
|
17
12
|
|
|
18
13
|
## Quick Start
|
|
19
14
|
|
|
20
|
-
### For Game Owners
|
|
21
|
-
|
|
22
|
-
Initialize matchmaking infrastructure for your game:
|
|
15
|
+
### For Game Owners (`MatchmakingAdmin`)
|
|
23
16
|
|
|
24
17
|
```typescript
|
|
25
18
|
import { MatchmakingAdmin } from "@1upmonster/duel";
|
|
26
|
-
import {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
19
|
+
import { createSolanaRpc, createKeyPairSignerFromBytes } from "@solana/kit";
|
|
20
|
+
import * as crypto from "crypto";
|
|
21
|
+
|
|
22
|
+
const rpc = createSolanaRpc("https://api.devnet.solana.com");
|
|
23
|
+
const signer = await createKeyPairSignerFromBytes(/* your keypair bytes */);
|
|
24
|
+
const admin = new MatchmakingAdmin(rpc, signer);
|
|
25
|
+
|
|
26
|
+
// 1. Initialize Tenant — stores callback config on L1
|
|
27
|
+
const callbackDiscriminator = Array.from(
|
|
28
|
+
crypto.createHash("sha256").update("global:on_match_found").digest().slice(0, 8)
|
|
29
|
+
);
|
|
30
|
+
await admin.initializeTenant(YOUR_GAME_PROGRAM_ID, {
|
|
31
|
+
eloWindow: 100n, // max ELO diff for a match
|
|
32
|
+
eloOffset: 40, // byte offset of ELO in player account
|
|
33
|
+
eloDataType: "u64", // u8 | u16 | u32 | u64
|
|
34
|
+
callbackProgramId: YOUR_GAME_PROGRAM_ID,
|
|
35
|
+
callbackDiscriminator,
|
|
36
36
|
});
|
|
37
37
|
|
|
38
|
-
// 2.
|
|
39
|
-
const
|
|
38
|
+
// 2. Create and delegate queue to TEE (automatically sets up permission PDA)
|
|
39
|
+
const authority = signer.address;
|
|
40
40
|
await admin.initializeQueue(authority, tenantPda);
|
|
41
|
-
|
|
42
|
-
// 3. Delegate to TEE Validator
|
|
43
41
|
await admin.delegateQueue(authority, validatorPubkey);
|
|
44
|
-
|
|
42
|
+
// Queue is now a dark pool: only the queue authority's TEE token can read it
|
|
45
43
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
- `'u8'`: 0-255 (1 byte)
|
|
50
|
-
- `'u16'`: 0-65,535 (2 bytes) **[DEFAULT]**
|
|
51
|
-
- `'u32'`: 0-4,294,967,295 (4 bytes)
|
|
52
|
-
- `'u64'`: 0-18,446,744,073,709,551,615 (8 bytes)
|
|
53
|
-
|
|
54
|
-
### For Players
|
|
44
|
+
// 3. After players have matched, flush opponent tickets + commit all to L1
|
|
45
|
+
await admin.resolveMatches(queuePda, tenantPda, [p1TicketPda, p2TicketPda]);
|
|
46
|
+
```
|
|
55
47
|
|
|
56
|
-
|
|
48
|
+
### For Players (`MatchmakingPlayer`)
|
|
57
49
|
|
|
58
50
|
```typescript
|
|
59
51
|
import { MatchmakingPlayer } from "@1upmonster/duel";
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
52
|
+
import { getAuthToken } from "@1upmonster/duel";
|
|
53
|
+
import { createSolanaRpc } from "@solana/kit";
|
|
54
|
+
|
|
55
|
+
const l1Rpc = createSolanaRpc("https://api.devnet.solana.com");
|
|
56
|
+
const player = new MatchmakingPlayer(l1Rpc, signer);
|
|
57
|
+
|
|
58
|
+
// High-level: creates ticket on L1, delegates to TEE, joins queue in one call
|
|
59
|
+
const { token } = await getAuthToken("https://tee.magicblock.app", signer);
|
|
60
|
+
const teeRpc = createSolanaRpc(`https://tee.magicblock.app?token=${token}`);
|
|
61
|
+
|
|
62
|
+
const ticketPda = await player.enterQueue(
|
|
63
|
+
tenantPda,
|
|
64
|
+
queuePda,
|
|
65
|
+
playerProfilePda,
|
|
66
|
+
teeRpc,
|
|
67
|
+
`https://tee.magicblock.app?token=${token}`,
|
|
68
|
+
validatorPubkey, // optional TEE validator
|
|
69
|
+
YOUR_GAME_PROGRAM_ID, // optional: callback fires via Tenant PDA when matched
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
// Poll L1 until the ticket shows Matched status
|
|
73
|
+
const match = await player.pollForMatch(ticketPda);
|
|
74
|
+
// match = { opponent: Address, matchId: bigint }
|
|
65
75
|
```
|
|
66
76
|
|
|
67
77
|
## API Reference
|
|
68
78
|
|
|
69
79
|
### `MatchmakingAdmin`
|
|
70
80
|
|
|
71
|
-
**Constructor
|
|
72
|
-
- `new MatchmakingAdmin(provider: AnchorProvider, programId?: PublicKey)`
|
|
81
|
+
**Constructor:** `new MatchmakingAdmin(rpc, signer, programId?)`
|
|
73
82
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
83
|
+
| Method | Description |
|
|
84
|
+
|---|---|
|
|
85
|
+
| `initializeTenant(tenantProgramId, options?)` | Create Tenant PDA with ELO config and optional callback |
|
|
86
|
+
| `initializeQueue(authority, tenant)` | Create Queue PDA linked to tenant |
|
|
87
|
+
| `delegateQueue(authority, validator?)` | Delegate queue to TEE + set up Permission PDA (only authority can read via TEE RPC) |
|
|
88
|
+
| `flushMatches(queue, tenant, ticketPdas)` | Update opponent tickets from pending matches |
|
|
89
|
+
| `commitTickets(tenant, ticketPdas)` | Push matched ticket state back to L1 |
|
|
90
|
+
| `resolveMatches(queue, tenant, ticketPdas, settlementDelayMs?)` | High-level: flush + wait + commit |
|
|
91
|
+
| `getQueue(queuePda)` | Fetch queue account |
|
|
92
|
+
| `getQueuePda(authority)` | Derive queue PDA |
|
|
93
|
+
| `getTenantPda(authority)` | Derive tenant PDA |
|
|
80
94
|
|
|
81
95
|
### `MatchmakingPlayer`
|
|
82
96
|
|
|
83
|
-
**Constructor
|
|
84
|
-
|
|
97
|
+
**Constructor:** `new MatchmakingPlayer(rpc, signer, programId?)`
|
|
98
|
+
|
|
99
|
+
| Method | Description |
|
|
100
|
+
|---|---|
|
|
101
|
+
| `enterQueue(tenant, queue, playerData, teeRpc, teeUrlWithToken, validator?, callbackProgram?)` | High-level: create ticket → set up Permission PDA → delegate → join queue |
|
|
102
|
+
| `createTicket(tenant)` | Create MatchTicket PDA on L1 |
|
|
103
|
+
| `delegateTicket(player, tenant, validator?)` | Delegate ticket to TEE |
|
|
104
|
+
| `joinQueue(queue, tenant, playerData, callbackProgram?)` | Join queue in TEE; callback fires via Tenant PDA on match |
|
|
105
|
+
| `cancelTicket(tenant)` | Cancel search (sets ticket to Cancelled) |
|
|
106
|
+
| `closeTicket(tenant)` | Reclaim rent after match or cancel |
|
|
107
|
+
| `pollForMatch(ticketPda, maxAttempts?, pollInterval?)` | Poll L1 until ticket is Matched |
|
|
108
|
+
| `getTicket(ticketPda)` | Fetch ticket account |
|
|
109
|
+
| `withRpc(teeUrl)` | Return a new client pointing at a different RPC |
|
|
85
110
|
|
|
86
|
-
|
|
87
|
-
- `joinQueue(queue, tenant, playerData)` - Join matchmaking queue
|
|
111
|
+
### `getAuthToken(rpcUrl, signer)`
|
|
88
112
|
|
|
89
|
-
|
|
113
|
+
Authenticate with the MagicBlock TEE. Returns `{ token, expiresAt }`. The token is passed as `?token=<jwt>` in the TEE RPC URL.
|
|
114
|
+
|
|
115
|
+
### `waitForPermission(teeUrlWithToken, accountAddress, timeoutMs?)`
|
|
116
|
+
|
|
117
|
+
Poll the TEE until the Permission PDA for `accountAddress` is active (i.e. TEE has picked up the delegated ACL). Returns `true` if confirmed within `timeoutMs` (default 10s), `false` on timeout. Useful after `delegateQueue` if you want to confirm the dark pool is enforced before sending players in.
|
|
118
|
+
|
|
119
|
+
## Privacy Model
|
|
120
|
+
|
|
121
|
+
Queue and ticket state is enforced at the **TEE RPC layer** by Permission PDAs:
|
|
122
|
+
|
|
123
|
+
- **Queue** — only the queue authority's auth token can call `getAccountInfo` on the queue. Other authenticated wallets receive `null` (account not found).
|
|
124
|
+
- **Tickets** — only the ticket owner and queue authority can read a ticket on TEE. Third parties read the committed L1 ticket after `resolveMatches`.
|
|
125
|
+
|
|
126
|
+
This is enforced by the `ACLseo` permission program (`ACLseoPoyC3cBqoUtkbjZ4aDrkurZW86v19pXz2XQnp1`). Both `delegateQueue` and `enterQueue` set up these Permission PDAs automatically before delegating to TEE.
|
|
127
|
+
|
|
128
|
+
## How the Callback Works
|
|
129
|
+
|
|
130
|
+
When a match is found during `join_queue`, the duel program fires a CPI callback **signed by the Tenant PDA** via `invoke_signed`. This is cryptographically unforgeable — game programs can verify the signer is the Tenant PDA without any additional access control:
|
|
131
|
+
|
|
132
|
+
```rust
|
|
133
|
+
pub fn on_match_found(
|
|
134
|
+
ctx: Context<OnMatchFound>,
|
|
135
|
+
player1: Pubkey,
|
|
136
|
+
player2: Pubkey,
|
|
137
|
+
match_id: u64,
|
|
138
|
+
) -> Result<()> {
|
|
139
|
+
// ctx.accounts.signer.key() == Tenant PDA — verified by the runtime
|
|
140
|
+
// Only the duel program can produce this signer
|
|
141
|
+
Ok(())
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
#[derive(Accounts)]
|
|
145
|
+
pub struct OnMatchFound<'info> {
|
|
146
|
+
pub signer: Signer<'info>, // will be the Tenant PDA
|
|
147
|
+
}
|
|
148
|
+
```
|
|
90
149
|
|
|
91
|
-
|
|
92
|
-
2. **Matching**: TEE automatically processes matches based on ELO windows
|
|
93
|
-
3. **Privacy**: Queue state is only visible within the TEE, not on L1
|
|
150
|
+
Pass the callback program as `remaining_accounts` in `joinQueue` (or via `callbackProgram` param in the SDK) for the callback to fire.
|
|
94
151
|
|
|
95
|
-
##
|
|
152
|
+
## ELO Data Types
|
|
96
153
|
|
|
97
|
-
|
|
98
|
-
|
|
154
|
+
| Type | Bytes | Range |
|
|
155
|
+
|---|---|---|
|
|
156
|
+
| `"u8"` | 1 | 0–255 |
|
|
157
|
+
| `"u16"` | 2 | 0–65,535 |
|
|
158
|
+
| `"u32"` | 4 | 0–4,294,967,295 |
|
|
159
|
+
| `"u64"` | 8 | 0–18,446,744,073,709,551,615 |
|
|
99
160
|
|
|
100
161
|
## License
|
|
101
162
|
|
package/dist/admin.d.ts
CHANGED
|
@@ -20,8 +20,15 @@ export declare class MatchmakingAdmin {
|
|
|
20
20
|
initializeTenant(tenantProgramId: Address, options?: InitializeTenantOptions): Promise<string>;
|
|
21
21
|
initializeQueue(_authority: Address, tenant: Address): Promise<string>;
|
|
22
22
|
delegateQueue(authority: Address, validator?: Address): Promise<string>;
|
|
23
|
-
flushMatches(queue: Address, tenant: Address, ticketPdas: Address[]
|
|
23
|
+
flushMatches(queue: Address, tenant: Address, ticketPdas: Address[]): Promise<string>;
|
|
24
24
|
commitTickets(tenant: Address, ticketPdas: Address[]): Promise<string>;
|
|
25
|
+
/**
|
|
26
|
+
* High-level: full match resolution flow (runs on TEE).
|
|
27
|
+
* Reads the queue's pending matches, flushes them (updating opponent tickets),
|
|
28
|
+
* waits for TEE settlement, then commits all tickets back to L1.
|
|
29
|
+
* Use individual methods (flushMatches, commitTickets) as escape hatches if needed.
|
|
30
|
+
*/
|
|
31
|
+
resolveMatches(queue: Address, tenant: Address, ticketPdas: Address[], settlementDelayMs?: number): Promise<void>;
|
|
25
32
|
/** Create a new MatchmakingAdmin pointing at a TEE RPC endpoint. */
|
|
26
33
|
withRpc(teeUrl: string): MatchmakingAdmin;
|
|
27
34
|
}
|
package/dist/admin.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { createSolanaRpc, } from "@solana/kit";
|
|
2
|
-
import { getInitializeTenantInstructionAsync, getInitializeQueueInstructionAsync, getDelegateQueueInstructionAsync, getFlushMatchesInstruction, getCommitTicketsInstruction, fetchQueue, accountType, } from "./generated/duel/index.js";
|
|
1
|
+
import { createSolanaRpc, AccountRole, } from "@solana/kit";
|
|
2
|
+
import { getInitializeTenantInstructionAsync, getInitializeQueueInstructionAsync, getDelegateQueueInstructionAsync, getSetupQueuePermissionInstructionAsync, getFlushMatchesInstruction, getCommitTicketsInstruction, fetchQueue, accountType, } from "./generated/duel/index.js";
|
|
3
3
|
import { sendInstruction } from "./transaction.js";
|
|
4
4
|
import * as utils from "./utils.js";
|
|
5
5
|
function getEloSize(dataType) {
|
|
@@ -54,6 +54,35 @@ export class MatchmakingAdmin {
|
|
|
54
54
|
}
|
|
55
55
|
async delegateQueue(authority, validator) {
|
|
56
56
|
const queuePda = await this.getQueuePda(authority);
|
|
57
|
+
// 1. Create Permission PDA for the queue (CPI from duel program with invoke_signed)
|
|
58
|
+
const permissionPda = await utils.derivePermissionPda(queuePda);
|
|
59
|
+
const setupIx = await getSetupQueuePermissionInstructionAsync({
|
|
60
|
+
authority: this.signer,
|
|
61
|
+
permission: permissionPda,
|
|
62
|
+
permissionProgram: utils.PERMISSION_PROGRAM,
|
|
63
|
+
}, { programAddress: this.programId });
|
|
64
|
+
await sendInstruction(this.rpc, setupIx, this.signer);
|
|
65
|
+
// 2. Delegate Permission PDA to TEE (called on permission program, authority signs)
|
|
66
|
+
const { delegationBuffer, delegationRecord, delegationMetadata } = await utils.derivePermissionDelegationPdas(permissionPda);
|
|
67
|
+
const delegatePermIx = {
|
|
68
|
+
programAddress: utils.PERMISSION_PROGRAM,
|
|
69
|
+
data: new Uint8Array([3, 0, 0, 0, 0, 0, 0, 0]), // discriminator = 3 (DelegatePermission)
|
|
70
|
+
accounts: [
|
|
71
|
+
{ address: this.signer.address, role: AccountRole.WRITABLE_SIGNER }, // payer
|
|
72
|
+
{ address: this.signer.address, role: AccountRole.READONLY_SIGNER }, // authority
|
|
73
|
+
{ address: queuePda, role: AccountRole.READONLY }, // permissionedAccount (not signer)
|
|
74
|
+
{ address: permissionPda, role: AccountRole.WRITABLE }, // permission PDA
|
|
75
|
+
{ address: "11111111111111111111111111111111", role: AccountRole.READONLY }, // system_program
|
|
76
|
+
{ address: utils.PERMISSION_PROGRAM, role: AccountRole.READONLY }, // owner_program
|
|
77
|
+
{ address: delegationBuffer, role: AccountRole.WRITABLE },
|
|
78
|
+
{ address: delegationRecord, role: AccountRole.WRITABLE },
|
|
79
|
+
{ address: delegationMetadata, role: AccountRole.WRITABLE },
|
|
80
|
+
{ address: utils.DELEGATION_PROGRAM, role: AccountRole.READONLY },
|
|
81
|
+
...(validator ? [{ address: validator, role: AccountRole.READONLY }] : []),
|
|
82
|
+
],
|
|
83
|
+
};
|
|
84
|
+
await sendInstruction(this.rpc, delegatePermIx, this.signer);
|
|
85
|
+
// 3. Delegate queue PDA to TEE (existing DELeGG flow)
|
|
57
86
|
const ix = await getDelegateQueueInstructionAsync({
|
|
58
87
|
pda: queuePda,
|
|
59
88
|
payer: this.signer,
|
|
@@ -62,19 +91,18 @@ export class MatchmakingAdmin {
|
|
|
62
91
|
}, { programAddress: this.programId });
|
|
63
92
|
return sendInstruction(this.rpc, ix, this.signer);
|
|
64
93
|
}
|
|
65
|
-
async flushMatches(queue, tenant, ticketPdas
|
|
94
|
+
async flushMatches(queue, tenant, ticketPdas) {
|
|
66
95
|
const ix = getFlushMatchesInstruction({
|
|
67
96
|
queue,
|
|
68
97
|
tenant,
|
|
69
98
|
signer: this.signer,
|
|
70
99
|
}, { programAddress: this.programId });
|
|
71
|
-
const remainingAccounts = [
|
|
72
|
-
...ticketPdas.map((address) => ({ address, role: 1 })),
|
|
73
|
-
...(callbackProgram ? [{ address: callbackProgram, role: 0 }] : []),
|
|
74
|
-
];
|
|
75
100
|
const ixWithRemaining = {
|
|
76
101
|
...ix,
|
|
77
|
-
accounts: [
|
|
102
|
+
accounts: [
|
|
103
|
+
...ix.accounts,
|
|
104
|
+
...ticketPdas.map((address) => ({ address, role: 1 })),
|
|
105
|
+
],
|
|
78
106
|
};
|
|
79
107
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
80
108
|
return sendInstruction(this.rpc, ixWithRemaining, this.signer);
|
|
@@ -94,9 +122,24 @@ export class MatchmakingAdmin {
|
|
|
94
122
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
95
123
|
return sendInstruction(this.rpc, ixWithRemaining, this.signer);
|
|
96
124
|
}
|
|
125
|
+
/**
|
|
126
|
+
* High-level: full match resolution flow (runs on TEE).
|
|
127
|
+
* Reads the queue's pending matches, flushes them (updating opponent tickets),
|
|
128
|
+
* waits for TEE settlement, then commits all tickets back to L1.
|
|
129
|
+
* Use individual methods (flushMatches, commitTickets) as escape hatches if needed.
|
|
130
|
+
*/
|
|
131
|
+
async resolveMatches(queue, tenant, ticketPdas, settlementDelayMs = 3000) {
|
|
132
|
+
const queueData = await this.getQueue(queue);
|
|
133
|
+
const pendingTicketPdas = await Promise.all(queueData.data.pendingMatches.map((pm) => utils.deriveTicketPda(this.programId, pm.player, tenant)));
|
|
134
|
+
if (pendingTicketPdas.length > 0) {
|
|
135
|
+
await this.flushMatches(queue, tenant, pendingTicketPdas);
|
|
136
|
+
await new Promise((r) => setTimeout(r, settlementDelayMs));
|
|
137
|
+
}
|
|
138
|
+
await this.commitTickets(tenant, ticketPdas);
|
|
139
|
+
}
|
|
97
140
|
/** Create a new MatchmakingAdmin pointing at a TEE RPC endpoint. */
|
|
98
141
|
withRpc(teeUrl) {
|
|
99
142
|
return new MatchmakingAdmin(createSolanaRpc(teeUrl), this.signer, this.programId);
|
|
100
143
|
}
|
|
101
144
|
}
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYWRtaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGVBQWUsR0FLaEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUNMLG1DQUFtQyxFQUNuQyxrQ0FBa0MsRUFDbEMsZ0NBQWdDLEVBQ2hDLDBCQUEwQixFQUMxQiwyQkFBMkIsRUFDM0IsVUFBVSxFQUNWLFdBQVcsR0FDWixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRCxPQUFPLEtBQUssS0FBSyxNQUFNLFlBQVksQ0FBQztBQWFwQyxTQUFTLFVBQVUsQ0FBQyxRQUFxQjtJQUN2QyxRQUFRLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLEtBQUssSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEIsS0FBSyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQixLQUFLLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JCLEtBQUssS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkIsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLGVBQWUsR0FBRyw4Q0FBeUQsQ0FBQztBQUVsRixNQUFNLE9BQU8sZ0JBQWdCO0lBSzNCLFlBQ0UsR0FBc0IsRUFDdEIsTUFBeUIsRUFDekIsWUFBcUIsZUFBZTtRQUVwQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzdCLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLFNBQWtCO1FBQ2xDLE9BQU8sS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3pELENB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QUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQVUsRUFBRSxDQUFDLENBQUM7YUFDaEU7U0FDRixDQUFDO1FBRUYsOERBQThEO1FBQzlELE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsZUFBc0IsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELG9FQUFvRTtJQUNwRSxPQUFPLENBQUMsTUFBYztRQUNwQixPQUFPLElBQUksZ0JBQWdCLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNyZWF0ZVNvbGFuYVJwYyxcbiAgdHlwZSBBZGRyZXNzLFxuICB0eXBlIFRyYW5zYWN0aW9uU2lnbmVyLFxuICB0eXBlIFJwYyxcbiAgdHlwZSBTb2xhbmFScGNBcGksXG59IGZyb20gXCJAc29sYW5hL2tpdFwiO1xuaW1wb3J0IHtcbiAgZ2V0SW5pdGlhbGl6ZVRlbmFudEluc3RydWN0aW9uQXN5bmMsXG4gIGdldEluaXRpYWxpemVRdWV1ZUluc3RydWN0aW9uQXN5bmMsXG4gIGdldERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbkFzeW5jLFxuICBnZXRGbHVzaE1hdGNoZXNJbnN0cnVjdGlvbixcbiAgZ2V0Q29tbWl0VGlja2V0c0luc3RydWN0aW9uLFxuICBmZXRjaFF1ZXVlLFxuICBhY2NvdW50VHlwZSxcbn0gZnJvbSBcIi4vZ2VuZXJhdGVkL2R1ZWwvaW5kZXguanNcIjtcbmltcG9ydCB7IHNlbmRJbnN0cnVjdGlvbiB9IGZyb20gXCIuL3RyYW5zYWN0aW9uLmpzXCI7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tIFwiLi91dGlscy5qc1wiO1xuXG5leHBvcnQgdHlwZSBFbG9EYXRhVHlwZSA9IFwidThcIiB8IFwidTE2XCIgfCBcInUzMlwiIHwgXCJ1NjRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJbml0aWFsaXplVGVuYW50T3B0aW9ucyB7XG4gIGF1dGhvcml0eT86IEFkZHJlc3M7XG4gIGVsb1dpbmRvdz86IGJpZ2ludDtcbiAgZWxvT2Zmc2V0PzogbnVtYmVyO1xuICBlbG9EYXRhVHlwZT86IEVsb0RhdGFUeXBlO1xuICBjYWxsYmFja1Byb2dyYW1JZD86IEFkZHJlc3MgfCBudWxsO1xuICBjYWxsYmFja0Rpc2NyaW1pbmF0b3I/OiBudW1iZXJbXSB8IG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldEVsb1NpemUoZGF0YVR5cGU6IEVsb0RhdGFUeXBlKTogbnVtYmVyIHtcbiAgc3dpdGNoIChkYXRhVHlwZSkge1xuICAgIGNhc2UgXCJ1OFwiOiByZXR1cm4gMTtcbiAgICBjYXNlIFwidTE2XCI6IHJldHVybiAyO1xuICAgIGNhc2UgXCJ1MzJcIjogcmV0dXJuIDQ7XG4gICAgY2FzZSBcInU2NFwiOiByZXR1cm4gODtcbiAgfVxufVxuXG5jb25zdCBEVUVMX1BST0dSQU1fSUQgPSBcIkVkWnpVd0tkMVgyWldqeExQcHoxY3BFek1GN1JVWkM0M1BxNjR2MVZjSzVYXCIgYXMgQWRkcmVzcztcblxuZXhwb3J0IGNsYXNzIE1hdGNobWFraW5nQWRtaW4ge1xuICBwdWJsaWMgcnBjOiBScGM8U29sYW5hUnBjQXBpPjtcbiAgcHVibGljIHNpZ25lcjogVHJhbnNhY3Rpb25TaWduZXI7XG4gIHB1YmxpYyBwcm9ncmFtSWQ6IEFkZHJlc3M7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcnBjOiBScGM8U29sYW5hUnBjQXBpPixcbiAgICBzaWduZXI6IFRyYW5zYWN0aW9uU2lnbmVyLFxuICAgIHByb2dyYW1JZDogQWRkcmVzcyA9IERVRUxfUFJPR1JBTV9JRCxcbiAgKSB7XG4gICAgdGhpcy5ycGMgPSBycGM7XG4gICAgdGhpcy5zaWduZXIgPSBzaWduZXI7XG4gICAgdGhpcy5wcm9ncmFtSWQgPSBwcm9ncmFtSWQ7XG4gIH1cblxuICBhc3luYyBnZXRRdWV1ZVBkYShhdXRob3JpdHk6IEFkZHJlc3MpOiBQcm9taXNlPEFkZHJlc3M+IHtcbiAgICByZXR1cm4gdXRpbHMuZGVyaXZlUXVldWVQZGEodGhpcy5wcm9ncmFtSWQsIGF1dGhvcml0eSk7XG4gIH1cblxuICBhc3luYyBnZXRUZW5hbnRQZGEoYXV0aG9yaXR5OiBBZGRyZXNzKTogUHJvbWlzZTxBZGRyZXNzPiB7XG4gICAgcmV0dXJuIHV0aWxzLmRlcml2ZVRlbmFudFBkYSh0aGlzLnByb2dyYW1JZCwgYXV0aG9yaXR5KTtcbiAgfVxuXG4gIGFzeW5jIGdldFRpY2tldFBkYShwbGF5ZXI6IEFkZHJlc3MsIHRlbmFudDogQWRkcmVzcyk6IFByb21pc2U8QWRkcmVzcz4ge1xuICAgIHJldHVybiB1dGlscy5kZXJpdmVUaWNrZXRQZGEodGhpcy5wcm9ncmFtSWQsIHBsYXllciwgdGVuYW50KTtcbiAgfVxuXG4gIGFzeW5jIGdldFF1ZXVlKHF1ZXVlUGRhOiBBZGRyZXNzKSB7XG4gICAgcmV0dXJuIGZldGNoUXVldWUodGhpcy5ycGMsIHF1ZXVlUGRhKTtcbiAgfVxuXG4gIGFzeW5jIGluaXRpYWxpemVUZW5hbnQoXG4gICAgdGVuYW50UHJvZ3JhbUlkOiBBZGRyZXNzLFxuICAgIG9wdGlvbnM/OiBJbml0aWFsaXplVGVuYW50T3B0aW9ucyxcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB7XG4gICAgICBlbG9XaW5kb3cgPSAxMDBuLFxuICAgICAgZWxvT2Zmc2V0ID0gNDAsXG4gICAgICBlbG9EYXRhVHlwZSA9IFwidTE2XCIsXG4gICAgICBjYWxsYmFja1Byb2dyYW1JZCA9IG51bGwsXG4gICAgICBjYWxsYmFja0Rpc2NyaW1pbmF0b3IgPSBudWxsLFxuICAgIH0gPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgY29uc3QgZWxvU2l6ZSA9IGdldEVsb1NpemUoZWxvRGF0YVR5cGUpO1xuICAgIGNvbnN0IGl4ID0gYXdhaXQgZ2V0SW5pdGlhbGl6ZVRlbmFudEluc3RydWN0aW9uQXN5bmMoe1xuICAgICAgYXV0aG9yaXR5OiB0aGlzLnNpZ25lcixcbiAgICAgIHRlbmFudFByb2dyYW1JZCxcbiAgICAgIGVsb09mZnNldCxcbiAgICAgIGVsb1NpemUsXG4gICAgICBlbG9XaW5kb3csXG4gICAgICBjYWxsYmFja1Byb2dyYW1JZDogY2FsbGJhY2tQcm9ncmFtSWQgPyB7IF9fb3B0aW9uOiBcIlNvbWVcIiwgdmFsdWU6IGNhbGxiYWNrUHJvZ3JhbUlkIH0gOiB7IF9fb3B0aW9uOiBcIk5vbmVcIiB9LFxuICAgICAgY2FsbGJhY2tEaXNjcmltaW5hdG9yOiBjYWxsYmFja0Rpc2NyaW1pbmF0b3JcbiAgICAgICAgPyB7IF9fb3B0aW9uOiBcIlNvbWVcIiwgdmFsdWU6IG5ldyBVaW50OEFycmF5KGNhbGxiYWNrRGlzY3JpbWluYXRvcikgfVxuICAgICAgICA6IHsgX19vcHRpb246IFwiTm9uZVwiIH0sXG4gICAgfSwgeyBwcm9ncmFtQWRkcmVzczogdGhpcy5wcm9ncmFtSWQgfSk7XG5cbiAgICByZXR1cm4gc2VuZEluc3RydWN0aW9uKHRoaXMucnBjLCBpeCwgdGhpcy5zaWduZXIpO1xuICB9XG5cbiAgYXN5bmMgaW5pdGlhbGl6ZVF1ZXVlKFxuICAgIF9hdXRob3JpdHk6IEFkZHJlc3MsXG4gICAgdGVuYW50OiBBZGRyZXNzLFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGl4ID0gYXdhaXQgZ2V0SW5pdGlhbGl6ZVF1ZXVlSW5zdHJ1Y3Rpb25Bc3luYyh7XG4gICAgICBhdXRob3JpdHk6IHRoaXMuc2lnbmVyLFxuICAgICAgdGVuYW50LFxuICAgIH0sIHsgcHJvZ3JhbUFkZHJlc3M6IHRoaXMucHJvZ3JhbUlkIH0pO1xuICAgIHJldHVybiBzZW5kSW5zdHJ1Y3Rpb24odGhpcy5ycGMsIGl4LCB0aGlzLnNpZ25lcik7XG4gIH1cblxuICBhc3luYyBkZWxlZ2F0ZVF1ZXVlKFxuICAgIGF1dGhvcml0eTogQWRkcmVzcyxcbiAgICB2YWxpZGF0b3I/OiBBZGRyZXNzLFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHF1ZXVlUGRhID0gYXdhaXQgdGhpcy5nZXRRdWV1ZVBkYShhdXRob3JpdHkpO1xuICAgIGNvbnN0IGl4ID0gYXdhaXQgZ2V0RGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uQXN5bmMoe1xuICAgICAgcGRhOiBxdWV1ZVBkYSxcbiAgICAgIHBheWVyOiB0aGlzLnNpZ25lcixcbiAgICAgIHZhbGlkYXRvcixcbiAgICAgIGFjY291bnRUeXBlOiBhY2NvdW50VHlwZShcIlF1ZXVlXCIsIHsgYXV0aG9yaXR5IH0pLFxuICAgIH0sIHsgcHJvZ3JhbUFkZHJlc3M6IHRoaXMucHJvZ3JhbUlkIH0pO1xuICAgIHJldHVybiBzZW5kSW5zdHJ1Y3Rpb24odGhpcy5ycGMsIGl4LCB0aGlzLnNpZ25lcik7XG4gIH1cblxuICBhc3luYyBmbHVzaE1hdGNoZXMoXG4gICAgcXVldWU6IEFkZHJlc3MsXG4gICAgdGVuYW50OiBBZGRyZXNzLFxuICAgIHRpY2tldFBkYXM6IEFkZHJlc3NbXSxcbiAgICBjYWxsYmFja1Byb2dyYW0/OiBBZGRyZXNzLFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGl4ID0gZ2V0Rmx1c2hNYXRjaGVzSW5zdHJ1Y3Rpb24oe1xuICAgICAgcXVldWUsXG4gICAgICB0ZW5hbnQsXG4gICAgICBzaWduZXI6IHRoaXMuc2lnbmVyLFxuICAgIH0sIHsgcHJvZ3JhbUFkZHJlc3M6IHRoaXMucHJvZ3JhbUlkIH0pO1xuXG4gICAgY29uc3QgcmVtYWluaW5nQWNjb3VudHMgPSBbXG4gICAgICAuLi50aWNrZXRQZGFzLm1hcCgoYWRkcmVzcykgPT4gKHsgYWRkcmVzcywgcm9sZTogMSBhcyBjb25zdCB9KSksXG4gICAgICAuLi4oY2FsbGJhY2tQcm9ncmFtID8gW3sgYWRkcmVzczogY2FsbGJhY2tQcm9ncmFtLCByb2xlOiAwIGFzIGNvbnN0IH1dIDogW10pLFxuICAgIF07XG5cbiAgICBjb25zdCBpeFdpdGhSZW1haW5pbmcgPSB7XG4gICAgICAuLi5peCxcbiAgICAgIGFjY291bnRzOiBbLi4uaXguYWNjb3VudHMsIC4uLnJlbWFpbmluZ0FjY291bnRzXSxcbiAgICB9O1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICByZXR1cm4gc2VuZEluc3RydWN0aW9uKHRoaXMucnBjLCBpeFdpdGhSZW1haW5pbmcgYXMgYW55LCB0aGlzLnNpZ25lcik7XG4gIH1cblxuICBhc3luYyBjb21taXRUaWNrZXRzKFxuICAgIHRlbmFudDogQWRkcmVzcyxcbiAgICB0aWNrZXRQZGFzOiBBZGRyZXNzW10sXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgaXggPSBnZXRDb21taXRUaWNrZXRzSW5zdHJ1Y3Rpb24oe1xuICAgICAgdGVuYW50LFxuICAgICAgcGF5ZXI6IHRoaXMuc2lnbmVyLFxuICAgIH0sIHsgcHJvZ3JhbUFkZHJlc3M6IHRoaXMucHJvZ3JhbUlkIH0pO1xuXG4gICAgY29uc3QgaXhXaXRoUmVtYWluaW5nID0ge1xuICAgICAgLi4uaXgsXG4gICAgICBhY2NvdW50czogW1xuICAgICAgICAuLi5peC5hY2NvdW50cyxcbiAgICAgICAgLi4udGlja2V0UGRhcy5tYXAoKGFkZHJlc3MpID0+ICh7IGFkZHJlc3MsIHJvbGU6IDEgYXMgY29uc3QgfSkpLFxuICAgICAgXSxcbiAgICB9O1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICByZXR1cm4gc2VuZEluc3RydWN0aW9uKHRoaXMucnBjLCBpeFdpdGhSZW1haW5pbmcgYXMgYW55LCB0aGlzLnNpZ25lcik7XG4gIH1cblxuICAvKiogQ3JlYXRlIGEgbmV3IE1hdGNobWFraW5nQWRtaW4gcG9pbnRpbmcgYXQgYSBURUUgUlBDIGVuZHBvaW50LiAqL1xuICB3aXRoUnBjKHRlZVVybDogc3RyaW5nKTogTWF0Y2htYWtpbmdBZG1pbiB7XG4gICAgcmV0dXJuIG5ldyBNYXRjaG1ha2luZ0FkbWluKGNyZWF0ZVNvbGFuYVJwYyh0ZWVVcmwpLCB0aGlzLnNpZ25lciwgdGhpcy5wcm9ncmFtSWQpO1xuICB9XG59XG4iXX0=
|
|
145
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYWRtaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGVBQWUsRUFDZixXQUFXLEdBTVosTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUNMLG1DQUFtQyxFQUNuQyxrQ0FBa0MsRUFDbEMsZ0NBQWdDLEVBQ2hDLHVDQUF1QyxFQUN2QywwQkFBMEIsRUFDMUIsMkJBQTJCLEVBQzNCLFVBQVUsRUFDVixXQUFXLEdBQ1osTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbkQsT0FBTyxLQUFLLEtBQUssTUFBTSxZQUFZLENBQUM7QUFhcEMsU0FBUyxVQUFVLENBQUMsUUFBcUI7SUFDdkMsUUFBUSxRQUFRLEVBQUUsQ0FBQztRQUNqQixLQUFLLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BCLEtBQUssS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckIsS0FBSyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQixLQUFLLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxlQUFlLEdBQUcsOENBQXlELENBQUM7QUFFbEYsTUFBTSxPQUFPLGdCQUFnQjtJQUszQixZQUNFLEdBQXNCLEVBQ3RCLE1BQXlCLEVBQ3pCLFlBQXFCLGVBQWU7UUFFcEMsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUM3QixDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUFrQjtRQUNsQyxPQUFPLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxT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TSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdDLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUN6QyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUN2QyxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FDekQsQ0FDRixDQUFDO1FBRUYsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDakMsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztZQUMxRCxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQztRQUM3RCxDQUFDO1FBRUQsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsb0VBQW9FO0lBQ3BFLE9BQU8sQ0FBQyxNQUFjO1FBQ3BCLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEYsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgY3JlYXRlU29sYW5hUnBjLFxuICBBY2NvdW50Um9sZSxcbiAgdHlwZSBBZGRyZXNzLFxuICB0eXBlIFRyYW5zYWN0aW9uU2lnbmVyLFxuICB0eXBlIFJwYyxcbiAgdHlwZSBTb2xhbmFScGNBcGksXG4gIHR5cGUgSW5zdHJ1Y3Rpb24sXG59IGZyb20gXCJAc29sYW5hL2tpdFwiO1xuaW1wb3J0IHtcbiAgZ2V0SW5pdGlhbGl6ZVRlbmFudEluc3RydWN0aW9uQXN5bmMsXG4gIGdldEluaXRpYWxpemVRdWV1ZUluc3RydWN0aW9uQXN5bmMsXG4gIGdldERlbGVnYXRlUXVldWVJbnN0cnVjdGlvbkFzeW5jLFxuICBnZXRTZXR1cFF1ZXVlUGVybWlzc2lvbkluc3RydWN0aW9uQXN5bmMsXG4gIGdldEZsdXNoTWF0Y2hlc0luc3RydWN0aW9uLFxuICBnZXRDb21taXRUaWNrZXRzSW5zdHJ1Y3Rpb24sXG4gIGZldGNoUXVldWUsXG4gIGFjY291bnRUeXBlLFxufSBmcm9tIFwiLi9nZW5lcmF0ZWQvZHVlbC9pbmRleC5qc1wiO1xuaW1wb3J0IHsgc2VuZEluc3RydWN0aW9uIH0gZnJvbSBcIi4vdHJhbnNhY3Rpb24uanNcIjtcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gXCIuL3V0aWxzLmpzXCI7XG5cbmV4cG9ydCB0eXBlIEVsb0RhdGFUeXBlID0gXCJ1OFwiIHwgXCJ1MTZcIiB8IFwidTMyXCIgfCBcInU2NFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEluaXRpYWxpemVUZW5hbnRPcHRpb25zIHtcbiAgYXV0aG9yaXR5PzogQWRkcmVzcztcbiAgZWxvV2luZG93PzogYmlnaW50O1xuICBlbG9PZmZzZXQ/OiBudW1iZXI7XG4gIGVsb0RhdGFUeXBlPzogRWxvRGF0YVR5cGU7XG4gIGNhbGxiYWNrUHJvZ3JhbUlkPzogQWRkcmVzcyB8IG51bGw7XG4gIGNhbGxiYWNrRGlzY3JpbWluYXRvcj86IG51bWJlcltdIHwgbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0RWxvU2l6ZShkYXRhVHlwZTogRWxvRGF0YVR5cGUpOiBudW1iZXIge1xuICBzd2l0Y2ggKGRhdGFUeXBlKSB7XG4gICAgY2FzZSBcInU4XCI6IHJldHVybiAxO1xuICAgIGNhc2UgXCJ1MTZcIjogcmV0dXJuIDI7XG4gICAgY2FzZSBcInUzMlwiOiByZXR1cm4gNDtcbiAgICBjYXNlIFwidTY0XCI6IHJldHVybiA4O1xuICB9XG59XG5cbmNvbnN0IERVRUxfUFJPR1JBTV9JRCA9IFwiRWRaelV3S2QxWDJaV2p4TFBwejFjcEV6TUY3UlVaQzQzUHE2NHYxVmNLNVhcIiBhcyBBZGRyZXNzO1xuXG5leHBvcnQgY2xhc3MgTWF0Y2htYWtpbmdBZG1pbiB7XG4gIHB1YmxpYyBycGM6IFJwYzxTb2xhbmFScGNBcGk+O1xuICBwdWJsaWMgc2lnbmVyOiBUcmFuc2FjdGlvblNpZ25lcjtcbiAgcHVibGljIHByb2dyYW1JZDogQWRkcmVzcztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBycGM6IFJwYzxTb2xhbmFScGNBcGk+LFxuICAgIHNpZ25lcjogVHJhbnNhY3Rpb25TaWduZXIsXG4gICAgcHJvZ3JhbUlkOiBBZGRyZXNzID0gRFVFTF9QUk9HUkFNX0lELFxuICApIHtcbiAgICB0aGlzLnJwYyA9IHJwYztcbiAgICB0aGlzLnNpZ25lciA9IHNpZ25lcjtcbiAgICB0aGlzLnByb2dyYW1JZCA9IHByb2dyYW1JZDtcbiAgfVxuXG4gIGFzeW5jIGdldFF1ZXVlUGRhKGF1dGhvcml0eTogQWRkcmVzcyk6IFByb21pc2U8QWRkcmVzcz4ge1xuICAgIHJldHVybiB1dGlscy5kZXJpdmVRdWV1ZVBkYSh0aGlzLnByb2dyYW1JZCwgYXV0aG9yaXR5KTtcbiAgfVxuXG4gIGFzeW5jIGdldFRlbmFudFBkYShhdXRob3JpdHk6IEFkZHJlc3MpOiBQcm9taXNlPEFkZHJlc3M+IHtcbiAgICByZXR1cm4gdXRpbHMuZGVyaXZlVGVuYW50UGRhKHRoaXMucHJvZ3JhbUlkLCBhdXRob3JpdHkpO1xuICB9XG5cbiAgYXN5bmMgZ2V0VGlja2V0UGRhKHBsYXllcjogQWRkcmVzcywgdGVuYW50OiBBZGRyZXNzKTogUHJvbWlzZTxBZGRyZXNzPiB7XG4gICAgcmV0dXJuIHV0aWxzLmRlcml2ZVRpY2tldFBkYSh0aGlzLnByb2dyYW1JZCwgcGxheWVyLCB0ZW5hbnQpO1xuICB9XG5cbiAgYXN5bmMgZ2V0UXVldWUocXVldWVQZGE6IEFkZHJlc3MpIHtcbiAgICByZXR1cm4gZmV0Y2hRdWV1ZSh0aGlzLnJwYywgcXVldWVQZGEpO1xuICB9XG5cbiAgYXN5bmMgaW5pdGlhbGl6ZVRlbmFudChcbiAgICB0ZW5hbnRQcm9ncmFtSWQ6IEFkZHJlc3MsXG4gICAgb3B0aW9ucz86IEluaXRpYWxpemVUZW5hbnRPcHRpb25zLFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGVsb1dpbmRvdyA9IDEwMG4sXG4gICAgICBlbG9PZmZzZXQgPSA0MCxcbiAgICAgIGVsb0RhdGFUeXBlID0gXCJ1MTZcIixcbiAgICAgIGNhbGxiYWNrUHJvZ3JhbUlkID0gbnVsbCxcbiAgICAgIGNhbGxiYWNrRGlzY3JpbWluYXRvciA9IG51bGwsXG4gICAgfSA9IG9wdGlvbnMgfHwge307XG5cbiAgICBjb25zdCBlbG9TaXplID0gZ2V0RWxvU2l6ZShlbG9EYXRhVHlwZSk7XG4gICAgY29uc3QgaXggPSBhd2FpdCBnZXRJbml0aWFsaXplVGVuYW50SW5zdHJ1Y3Rpb25Bc3luYyh7XG4gICAgICBhdXRob3JpdHk6IHRoaXMuc2lnbmVyLFxuICAgICAgdGVuYW50UHJvZ3JhbUlkLFxuICAgICAgZWxvT2Zmc2V0LFxuICAgICAgZWxvU2l6ZSxcbiAgICAgIGVsb1dpbmRvdyxcbiAgICAgIGNhbGxiYWNrUHJvZ3JhbUlkOiBjYWxsYmFja1Byb2dyYW1JZCA/IHsgX19vcHRpb246IFwiU29tZVwiLCB2YWx1ZTogY2FsbGJhY2tQcm9ncmFtSWQgfSA6IHsgX19vcHRpb246IFwiTm9uZVwiIH0sXG4gICAgICBjYWxsYmFja0Rpc2NyaW1pbmF0b3I6IGNhbGxiYWNrRGlzY3JpbWluYXRvclxuICAgICAgICA/IHsgX19vcHRpb246IFwiU29tZVwiLCB2YWx1ZTogbmV3IFVpbnQ4QXJyYXkoY2FsbGJhY2tEaXNjcmltaW5hdG9yKSB9XG4gICAgICAgIDogeyBfX29wdGlvbjogXCJOb25lXCIgfSxcbiAgICB9LCB7IHByb2dyYW1BZGRyZXNzOiB0aGlzLnByb2dyYW1JZCB9KTtcblxuICAgIHJldHVybiBzZW5kSW5zdHJ1Y3Rpb24odGhpcy5ycGMsIGl4LCB0aGlzLnNpZ25lcik7XG4gIH1cblxuICBhc3luYyBpbml0aWFsaXplUXVldWUoXG4gICAgX2F1dGhvcml0eTogQWRkcmVzcyxcbiAgICB0ZW5hbnQ6IEFkZHJlc3MsXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgaXggPSBhd2FpdCBnZXRJbml0aWFsaXplUXVldWVJbnN0cnVjdGlvbkFzeW5jKHtcbiAgICAgIGF1dGhvcml0eTogdGhpcy5zaWduZXIsXG4gICAgICB0ZW5hbnQsXG4gICAgfSwgeyBwcm9ncmFtQWRkcmVzczogdGhpcy5wcm9ncmFtSWQgfSk7XG4gICAgcmV0dXJuIHNlbmRJbnN0cnVjdGlvbih0aGlzLnJwYywgaXgsIHRoaXMuc2lnbmVyKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGVnYXRlUXVldWUoXG4gICAgYXV0aG9yaXR5OiBBZGRyZXNzLFxuICAgIHZhbGlkYXRvcj86IEFkZHJlc3MsXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgcXVldWVQZGEgPSBhd2FpdCB0aGlzLmdldFF1ZXVlUGRhKGF1dGhvcml0eSk7XG5cbiAgICAvLyAxLiBDcmVhdGUgUGVybWlzc2lvbiBQREEgZm9yIHRoZSBxdWV1ZSAoQ1BJIGZyb20gZHVlbCBwcm9ncmFtIHdpdGggaW52b2tlX3NpZ25lZClcbiAgICBjb25zdCBwZXJtaXNzaW9uUGRhID0gYXdhaXQgdXRpbHMuZGVyaXZlUGVybWlzc2lvblBkYShxdWV1ZVBkYSk7XG4gICAgY29uc3Qgc2V0dXBJeCA9IGF3YWl0IGdldFNldHVwUXVldWVQZXJtaXNzaW9uSW5zdHJ1Y3Rpb25Bc3luYyh7XG4gICAgICBhdXRob3JpdHk6IHRoaXMuc2lnbmVyLFxuICAgICAgcGVybWlzc2lvbjogcGVybWlzc2lvblBkYSxcbiAgICAgIHBlcm1pc3Npb25Qcm9ncmFtOiB1dGlscy5QRVJNSVNTSU9OX1BST0dSQU0sXG4gICAgfSwgeyBwcm9ncmFtQWRkcmVzczogdGhpcy5wcm9ncmFtSWQgfSk7XG4gICAgYXdhaXQgc2VuZEluc3RydWN0aW9uKHRoaXMucnBjLCBzZXR1cEl4LCB0aGlzLnNpZ25lcik7XG5cbiAgICAvLyAyLiBEZWxlZ2F0ZSBQZXJtaXNzaW9uIFBEQSB0byBURUUgKGNhbGxlZCBvbiBwZXJtaXNzaW9uIHByb2dyYW0sIGF1dGhvcml0eSBzaWducylcbiAgICBjb25zdCB7IGRlbGVnYXRpb25CdWZmZXIsIGRlbGVnYXRpb25SZWNvcmQsIGRlbGVnYXRpb25NZXRhZGF0YSB9ID1cbiAgICAgIGF3YWl0IHV0aWxzLmRlcml2ZVBlcm1pc3Npb25EZWxlZ2F0aW9uUGRhcyhwZXJtaXNzaW9uUGRhKTtcbiAgICBjb25zdCBkZWxlZ2F0ZVBlcm1JeDogSW5zdHJ1Y3Rpb24gPSB7XG4gICAgICBwcm9ncmFtQWRkcmVzczogdXRpbHMuUEVSTUlTU0lPTl9QUk9HUkFNLFxuICAgICAgZGF0YTogbmV3IFVpbnQ4QXJyYXkoWzMsIDAsIDAsIDAsIDAsIDAsIDAsIDBdKSwgLy8gZGlzY3JpbWluYXRvciA9IDMgKERlbGVnYXRlUGVybWlzc2lvbilcbiAgICAgIGFjY291bnRzOiBbXG4gICAgICAgIHsgYWRkcmVzczogdGhpcy5zaWduZXIuYWRkcmVzcywgcm9sZTogQWNjb3VudFJvbGUuV1JJVEFCTEVfU0lHTkVSIH0sICAgICAgICAgICAvLyBwYXllclxuICAgICAgICB7IGFkZHJlc3M6IHRoaXMuc2lnbmVyLmFkZHJlc3MsIHJvbGU6IEFjY291bnRSb2xlLlJFQURPTkxZX1NJR05FUiB9LCAgICAgICAgICAgIC8vIGF1dGhvcml0eVxuICAgICAgICB7IGFkZHJlc3M6IHF1ZXVlUGRhLCByb2xlOiBBY2NvdW50Um9sZS5SRUFET05MWSB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBlcm1pc3Npb25lZEFjY291bnQgKG5vdCBzaWduZXIpXG4gICAgICAgIHsgYWRkcmVzczogcGVybWlzc2lvblBkYSwgcm9sZTogQWNjb3VudFJvbGUuV1JJVEFCTEUgfSwgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGVybWlzc2lvbiBQREFcbiAgICAgICAgeyBhZGRyZXNzOiBcIjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExXCIgYXMgQWRkcmVzcywgcm9sZTogQWNjb3VudFJvbGUuUkVBRE9OTFkgfSwgLy8gc3lzdGVtX3Byb2dyYW1cbiAgICAgICAgeyBhZGRyZXNzOiB1dGlscy5QRVJNSVNTSU9OX1BST0dSQU0sIHJvbGU6IEFjY291bnRSb2xlLlJFQURPTkxZIH0sICAgICAgICAgICAgICAvLyBvd25lcl9wcm9ncmFtXG4gICAgICAgIHsgYWRkcmVzczogZGVsZWdhdGlvbkJ1ZmZlciwgcm9sZTogQWNjb3VudFJvbGUuV1JJVEFCTEUgfSxcbiAgICAgICAgeyBhZGRyZXNzOiBkZWxlZ2F0aW9uUmVjb3JkLCByb2xlOiBBY2NvdW50Um9sZS5XUklUQUJMRSB9LFxuICAgICAgICB7IGFkZHJlc3M6IGRlbGVnYXRpb25NZXRhZGF0YSwgcm9sZTogQWNjb3VudFJvbGUuV1JJVEFCTEUgfSxcbiAgICAgICAgeyBhZGRyZXNzOiB1dGlscy5ERUxFR0FUSU9OX1BST0dSQU0sIHJvbGU6IEFjY291bnRSb2xlLlJFQURPTkxZIH0sXG4gICAgICAgIC4uLih2YWxpZGF0b3IgPyBbeyBhZGRyZXNzOiB2YWxpZGF0b3IsIHJvbGU6IEFjY291bnRSb2xlLlJFQURPTkxZIH1dIDogW10pLFxuICAgICAgXSxcbiAgICB9O1xuICAgIGF3YWl0IHNlbmRJbnN0cnVjdGlvbih0aGlzLnJwYywgZGVsZWdhdGVQZXJtSXgsIHRoaXMuc2lnbmVyKTtcblxuICAgIC8vIDMuIERlbGVnYXRlIHF1ZXVlIFBEQSB0byBURUUgKGV4aXN0aW5nIERFTGVHRyBmbG93KVxuICAgIGNvbnN0IGl4ID0gYXdhaXQgZ2V0RGVsZWdhdGVRdWV1ZUluc3RydWN0aW9uQXN5bmMoe1xuICAgICAgcGRhOiBxdWV1ZVBkYSxcbiAgICAgIHBheWVyOiB0aGlzLnNpZ25lcixcbiAgICAgIHZhbGlkYXRvcixcbiAgICAgIGFjY291bnRUeXBlOiBhY2NvdW50VHlwZShcIlF1ZXVlXCIsIHsgYXV0aG9yaXR5IH0pLFxuICAgIH0sIHsgcHJvZ3JhbUFkZHJlc3M6IHRoaXMucHJvZ3JhbUlkIH0pO1xuICAgIHJldHVybiBzZW5kSW5zdHJ1Y3Rpb24odGhpcy5ycGMsIGl4LCB0aGlzLnNpZ25lcik7XG4gIH1cblxuICBhc3luYyBmbHVzaE1hdGNoZXMoXG4gICAgcXVldWU6IEFkZHJlc3MsXG4gICAgdGVuYW50OiBBZGRyZXNzLFxuICAgIHRpY2tldFBkYXM6IEFkZHJlc3NbXSxcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBpeCA9IGdldEZsdXNoTWF0Y2hlc0luc3RydWN0aW9uKHtcbiAgICAgIHF1ZXVlLFxuICAgICAgdGVuYW50LFxuICAgICAgc2lnbmVyOiB0aGlzLnNpZ25lcixcbiAgICB9LCB7IHByb2dyYW1BZGRyZXNzOiB0aGlzLnByb2dyYW1JZCB9KTtcblxuICAgIGNvbnN0IGl4V2l0aFJlbWFpbmluZyA9IHtcbiAgICAgIC4uLml4LFxuICAgICAgYWNjb3VudHM6IFtcbiAgICAgICAgLi4uaXguYWNjb3VudHMsXG4gICAgICAgIC4uLnRpY2tldFBkYXMubWFwKChhZGRyZXNzKSA9PiAoeyBhZGRyZXNzLCByb2xlOiAxIGFzIGNvbnN0IH0pKSxcbiAgICAgIF0sXG4gICAgfTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcmV0dXJuIHNlbmRJbnN0cnVjdGlvbih0aGlzLnJwYywgaXhXaXRoUmVtYWluaW5nIGFzIGFueSwgdGhpcy5zaWduZXIpO1xuICB9XG5cbiAgYXN5bmMgY29tbWl0VGlja2V0cyhcbiAgICB0ZW5hbnQ6IEFkZHJlc3MsXG4gICAgdGlja2V0UGRhczogQWRkcmVzc1tdLFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGl4ID0gZ2V0Q29tbWl0VGlja2V0c0luc3RydWN0aW9uKHtcbiAgICAgIHRlbmFudCxcbiAgICAgIHBheWVyOiB0aGlzLnNpZ25lcixcbiAgICB9LCB7IHByb2dyYW1BZGRyZXNzOiB0aGlzLnByb2dyYW1JZCB9KTtcblxuICAgIGNvbnN0IGl4V2l0aFJlbWFpbmluZyA9IHtcbiAgICAgIC4uLml4LFxuICAgICAgYWNjb3VudHM6IFtcbiAgICAgICAgLi4uaXguYWNjb3VudHMsXG4gICAgICAgIC4uLnRpY2tldFBkYXMubWFwKChhZGRyZXNzKSA9PiAoeyBhZGRyZXNzLCByb2xlOiAxIGFzIGNvbnN0IH0pKSxcbiAgICAgIF0sXG4gICAgfTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcmV0dXJuIHNlbmRJbnN0cnVjdGlvbih0aGlzLnJwYywgaXhXaXRoUmVtYWluaW5nIGFzIGFueSwgdGhpcy5zaWduZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhpZ2gtbGV2ZWw6IGZ1bGwgbWF0Y2ggcmVzb2x1dGlvbiBmbG93IChydW5zIG9uIFRFRSkuXG4gICAqIFJlYWRzIHRoZSBxdWV1ZSdzIHBlbmRpbmcgbWF0Y2hlcywgZmx1c2hlcyB0aGVtICh1cGRhdGluZyBvcHBvbmVudCB0aWNrZXRzKSxcbiAgICogd2FpdHMgZm9yIFRFRSBzZXR0bGVtZW50LCB0aGVuIGNvbW1pdHMgYWxsIHRpY2tldHMgYmFjayB0byBMMS5cbiAgICogVXNlIGluZGl2aWR1YWwgbWV0aG9kcyAoZmx1c2hNYXRjaGVzLCBjb21taXRUaWNrZXRzKSBhcyBlc2NhcGUgaGF0Y2hlcyBpZiBuZWVkZWQuXG4gICAqL1xuICBhc3luYyByZXNvbHZlTWF0Y2hlcyhcbiAgICBxdWV1ZTogQWRkcmVzcyxcbiAgICB0ZW5hbnQ6IEFkZHJlc3MsXG4gICAgdGlja2V0UGRhczogQWRkcmVzc1tdLFxuICAgIHNldHRsZW1lbnREZWxheU1zID0gMzAwMCxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcXVldWVEYXRhID0gYXdhaXQgdGhpcy5nZXRRdWV1ZShxdWV1ZSk7XG4gICAgY29uc3QgcGVuZGluZ1RpY2tldFBkYXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHF1ZXVlRGF0YS5kYXRhLnBlbmRpbmdNYXRjaGVzLm1hcCgocG0pID0+XG4gICAgICAgIHV0aWxzLmRlcml2ZVRpY2tldFBkYSh0aGlzLnByb2dyYW1JZCwgcG0ucGxheWVyLCB0ZW5hbnQpLFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgaWYgKHBlbmRpbmdUaWNrZXRQZGFzLmxlbmd0aCA+IDApIHtcbiAgICAgIGF3YWl0IHRoaXMuZmx1c2hNYXRjaGVzKHF1ZXVlLCB0ZW5hbnQsIHBlbmRpbmdUaWNrZXRQZGFzKTtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIHNldHRsZW1lbnREZWxheU1zKSk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5jb21taXRUaWNrZXRzKHRlbmFudCwgdGlja2V0UGRhcyk7XG4gIH1cblxuICAvKiogQ3JlYXRlIGEgbmV3IE1hdGNobWFraW5nQWRtaW4gcG9pbnRpbmcgYXQgYSBURUUgUlBDIGVuZHBvaW50LiAqL1xuICB3aXRoUnBjKHRlZVVybDogc3RyaW5nKTogTWF0Y2htYWtpbmdBZG1pbiB7XG4gICAgcmV0dXJuIG5ldyBNYXRjaG1ha2luZ0FkbWluKGNyZWF0ZVNvbGFuYVJwYyh0ZWVVcmwpLCB0aGlzLnNpZ25lciwgdGhpcy5wcm9ncmFtSWQpO1xuICB9XG59XG4iXX0=
|
|
@@ -18,9 +18,7 @@ export declare const DUEL_ERROR__INVALID_ELO_SIZE = 6003;
|
|
|
18
18
|
export declare const DUEL_ERROR__INVALID_TICKET_STATUS = 6004;
|
|
19
19
|
/** InvalidTicketAccount: Invalid ticket account */
|
|
20
20
|
export declare const DUEL_ERROR__INVALID_TICKET_ACCOUNT = 6005;
|
|
21
|
-
|
|
22
|
-
export declare const DUEL_ERROR__MISSING_CALLBACK_PROGRAM = 6006;
|
|
23
|
-
export type DuelError = typeof DUEL_ERROR__DATA_TOO_SMALL | typeof DUEL_ERROR__INVALID_ELO_SIZE | typeof DUEL_ERROR__INVALID_TENANT | typeof DUEL_ERROR__INVALID_TICKET_ACCOUNT | typeof DUEL_ERROR__INVALID_TICKET_STATUS | typeof DUEL_ERROR__MISSING_CALLBACK_PROGRAM | typeof DUEL_ERROR__UNAUTHORIZED;
|
|
21
|
+
export type DuelError = typeof DUEL_ERROR__DATA_TOO_SMALL | typeof DUEL_ERROR__INVALID_ELO_SIZE | typeof DUEL_ERROR__INVALID_TENANT | typeof DUEL_ERROR__INVALID_TICKET_ACCOUNT | typeof DUEL_ERROR__INVALID_TICKET_STATUS | typeof DUEL_ERROR__UNAUTHORIZED;
|
|
24
22
|
export declare function getDuelErrorMessage(code: DuelError): string;
|
|
25
23
|
export declare function isDuelError<TProgramErrorCode extends DuelError>(error: unknown, transactionMessage: {
|
|
26
24
|
instructions: Record<number, {
|
|
@@ -19,11 +19,9 @@ export const DUEL_ERROR__INVALID_ELO_SIZE = 0x1773; // 6003
|
|
|
19
19
|
export const DUEL_ERROR__INVALID_TICKET_STATUS = 0x1774; // 6004
|
|
20
20
|
/** InvalidTicketAccount: Invalid ticket account */
|
|
21
21
|
export const DUEL_ERROR__INVALID_TICKET_ACCOUNT = 0x1775; // 6005
|
|
22
|
-
/** MissingCallbackProgram: Missing or invalid callback program in remaining accounts */
|
|
23
|
-
export const DUEL_ERROR__MISSING_CALLBACK_PROGRAM = 0x1776; // 6006
|
|
24
22
|
let duelErrorMessages;
|
|
25
23
|
if (process.env.NODE_ENV !== 'production') {
|
|
26
|
-
duelErrorMessages = { [DUEL_ERROR__DATA_TOO_SMALL]: `Account data too small for ELO read`, [DUEL_ERROR__INVALID_ELO_SIZE]: `Invalid ELO size (must be 1, 2, 4, or 8 bytes)`, [DUEL_ERROR__INVALID_TENANT]: `Account does not belong to the specified Tenant Program`, [DUEL_ERROR__INVALID_TICKET_ACCOUNT]: `Invalid ticket account`, [DUEL_ERROR__INVALID_TICKET_STATUS]: `Invalid ticket status for this operation`, [
|
|
24
|
+
duelErrorMessages = { [DUEL_ERROR__DATA_TOO_SMALL]: `Account data too small for ELO read`, [DUEL_ERROR__INVALID_ELO_SIZE]: `Invalid ELO size (must be 1, 2, 4, or 8 bytes)`, [DUEL_ERROR__INVALID_TENANT]: `Account does not belong to the specified Tenant Program`, [DUEL_ERROR__INVALID_TICKET_ACCOUNT]: `Invalid ticket account`, [DUEL_ERROR__INVALID_TICKET_STATUS]: `Invalid ticket status for this operation`, [DUEL_ERROR__UNAUTHORIZED]: `Unauthorized access` };
|
|
27
25
|
}
|
|
28
26
|
export function getDuelErrorMessage(code) {
|
|
29
27
|
if (process.env.NODE_ENV !== 'production') {
|
|
@@ -34,4 +32,4 @@ export function getDuelErrorMessage(code) {
|
|
|
34
32
|
export function isDuelError(error, transactionMessage, code) {
|
|
35
33
|
return isProgramError(error, transactionMessage, DUEL_PROGRAM_ADDRESS, code);
|
|
36
34
|
}
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9nZW5lcmF0ZWQvZHVlbC9lcnJvcnMvZHVlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsY0FBYyxFQUFnRixNQUFNLGFBQWEsQ0FBQztBQUMzSCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFbkQsNkVBQTZFO0FBQzdFLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU87QUFDekQsd0RBQXdEO0FBQ3hELE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU87QUFDekQsd0NBQXdDO0FBQ3hDLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU87QUFDdkQscUVBQXFFO0FBQ3JFLE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU87QUFDM0Qsb0VBQW9FO0FBQ3BFLE1BQU0sQ0FBQyxNQUFNLGlDQUFpQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU87QUFDaEUsbURBQW1EO0FBQ25ELE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU87QUFJakUsSUFBSSxpQkFBd0QsQ0FBQztBQUM3RCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLFlBQVksRUFBRSxDQUFDO0lBQzFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLHFDQUFxQyxFQUFFLENBQUMsNEJBQTRCLENBQUMsRUFBRSxnREFBZ0QsRUFBRSxDQUFDLDBCQUEwQixDQUFDLEVBQUUseURBQXlELEVBQUUsQ0FBQyxrQ0FBa0MsQ0FBQyxFQUFFLHdCQUF3QixFQUFFLENBQUMsaUNBQWlDLENBQUMsRUFBRSwwQ0FBMEMsRUFBRSxDQUFDLHdCQUF3QixDQUFDLEVBQUUscUJBQXFCLEVBQUUsQ0FBQztBQUM3YyxDQUFDO0FBRUQsTUFBTSxVQUFVLG1CQUFtQixDQUFDLElBQWU7SUFDakQsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxZQUFZLEVBQUUsQ0FBQztRQUMxQyxPQUFRLGlCQUErQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxPQUFPLG9EQUFvRCxDQUFDO0FBQzlELENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUN2QixLQUFjLEVBQ2Qsa0JBQWlGLEVBQ2pGLElBQXdCO0lBRTFCLE9BQU8sY0FBYyxDQUFvQixLQUFLLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbEcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpcyBjb2RlIHdhcyBBVVRPR0VORVJBVEVEIHVzaW5nIHRoZSBDb2RhbWEgbGlicmFyeS5cbiAqIFBsZWFzZSBETyBOT1QgRURJVCBUSElTIEZJTEUsIGluc3RlYWQgdXNlIHZpc2l0b3JzXG4gKiB0byBhZGQgZmVhdHVyZXMsIHRoZW4gcmVydW4gQ29kYW1hIHRvIHVwZGF0ZSBpdC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jb2RhbWEtaWRsL2NvZGFtYVxuICovXG5cbmltcG9ydCB7IGlzUHJvZ3JhbUVycm9yLCB0eXBlIEFkZHJlc3MsIHR5cGUgU09MQU5BX0VSUk9SX19JTlNUUlVDVElPTl9FUlJPUl9fQ1VTVE9NLCB0eXBlIFNvbGFuYUVycm9yIH0gZnJvbSAnQHNvbGFuYS9raXQnO1xuaW1wb3J0IHsgRFVFTF9QUk9HUkFNX0FERFJFU1MgfSBmcm9tICcuLi9wcm9ncmFtcyc7XG5cbi8qKiBJbnZhbGlkVGVuYW50OiBBY2NvdW50IGRvZXMgbm90IGJlbG9uZyB0byB0aGUgc3BlY2lmaWVkIFRlbmFudCBQcm9ncmFtICovXG5leHBvcnQgY29uc3QgRFVFTF9FUlJPUl9fSU5WQUxJRF9URU5BTlQgPSAweDE3NzA7IC8vIDYwMDBcbi8qKiBEYXRhVG9vU21hbGw6IEFjY291bnQgZGF0YSB0b28gc21hbGwgZm9yIEVMTyByZWFkICovXG5leHBvcnQgY29uc3QgRFVFTF9FUlJPUl9fREFUQV9UT09fU01BTEwgPSAweDE3NzE7IC8vIDYwMDFcbi8qKiBVbmF1dGhvcml6ZWQ6IFVuYXV0aG9yaXplZCBhY2Nlc3MgKi9cbmV4cG9ydCBjb25zdCBEVUVMX0VSUk9SX19VTkFVVEhPUklaRUQgPSAweDE3NzI7IC8vIDYwMDJcbi8qKiBJbnZhbGlkRWxvU2l6ZTogSW52YWxpZCBFTE8gc2l6ZSAobXVzdCBiZSAxLCAyLCA0LCBvciA4IGJ5dGVzKSAqL1xuZXhwb3J0IGNvbnN0IERVRUxfRVJST1JfX0lOVkFMSURfRUxPX1NJWkUgPSAweDE3NzM7IC8vIDYwMDNcbi8qKiBJbnZhbGlkVGlja2V0U3RhdHVzOiBJbnZhbGlkIHRpY2tldCBzdGF0dXMgZm9yIHRoaXMgb3BlcmF0aW9uICovXG5leHBvcnQgY29uc3QgRFVFTF9FUlJPUl9fSU5WQUxJRF9USUNLRVRfU1RBVFVTID0gMHgxNzc0OyAvLyA2MDA0XG4vKiogSW52YWxpZFRpY2tldEFjY291bnQ6IEludmFsaWQgdGlja2V0IGFjY291bnQgKi9cbmV4cG9ydCBjb25zdCBEVUVMX0VSUk9SX19JTlZBTElEX1RJQ0tFVF9BQ0NPVU5UID0gMHgxNzc1OyAvLyA2MDA1XG5cbmV4cG9ydCB0eXBlIER1ZWxFcnJvciA9IHR5cGVvZiBEVUVMX0VSUk9SX19EQVRBX1RPT19TTUFMTCB8IHR5cGVvZiBEVUVMX0VSUk9SX19JTlZBTElEX0VMT19TSVpFIHwgdHlwZW9mIERVRUxfRVJST1JfX0lOVkFMSURfVEVOQU5UIHwgdHlwZW9mIERVRUxfRVJST1JfX0lOVkFMSURfVElDS0VUX0FDQ09VTlQgfCB0eXBlb2YgRFVFTF9FUlJPUl9fSU5WQUxJRF9USUNLRVRfU1RBVFVTIHwgdHlwZW9mIERVRUxfRVJST1JfX1VOQVVUSE9SSVpFRDtcblxubGV0IGR1ZWxFcnJvck1lc3NhZ2VzOiBSZWNvcmQ8RHVlbEVycm9yLCBzdHJpbmc+IHwgdW5kZWZpbmVkO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgZHVlbEVycm9yTWVzc2FnZXMgPSB7IFtEVUVMX0VSUk9SX19EQVRBX1RPT19TTUFMTF06IGBBY2NvdW50IGRhdGEgdG9vIHNtYWxsIGZvciBFTE8gcmVhZGAsIFtEVUVMX0VSUk9SX19JTlZBTElEX0VMT19TSVpFXTogYEludmFsaWQgRUxPIHNpemUgKG11c3QgYmUgMSwgMiwgNCwgb3IgOCBieXRlcylgLCBbRFVFTF9FUlJPUl9fSU5WQUxJRF9URU5BTlRdOiBgQWNjb3VudCBkb2VzIG5vdCBiZWxvbmcgdG8gdGhlIHNwZWNpZmllZCBUZW5hbnQgUHJvZ3JhbWAsIFtEVUVMX0VSUk9SX19JTlZBTElEX1RJQ0tFVF9BQ0NPVU5UXTogYEludmFsaWQgdGlja2V0IGFjY291bnRgLCBbRFVFTF9FUlJPUl9fSU5WQUxJRF9USUNLRVRfU1RBVFVTXTogYEludmFsaWQgdGlja2V0IHN0YXR1cyBmb3IgdGhpcyBvcGVyYXRpb25gLCBbRFVFTF9FUlJPUl9fVU5BVVRIT1JJWkVEXTogYFVuYXV0aG9yaXplZCBhY2Nlc3NgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREdWVsRXJyb3JNZXNzYWdlKGNvZGU6IER1ZWxFcnJvcik6IHN0cmluZyB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgcmV0dXJuIChkdWVsRXJyb3JNZXNzYWdlcyBhcyBSZWNvcmQ8RHVlbEVycm9yLCBzdHJpbmc+KVtjb2RlXTtcbiAgfVxuXG4gIHJldHVybiAnRXJyb3IgbWVzc2FnZSBub3QgYXZhaWxhYmxlIGluIHByb2R1Y3Rpb24gYnVuZGxlcy4nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEdWVsRXJyb3I8VFByb2dyYW1FcnJvckNvZGUgZXh0ZW5kcyBEdWVsRXJyb3I+KFxuICAgIGVycm9yOiB1bmtub3duLFxuICAgIHRyYW5zYWN0aW9uTWVzc2FnZTogeyBpbnN0cnVjdGlvbnM6IFJlY29yZDxudW1iZXIsIHsgcHJvZ3JhbUFkZHJlc3M6IEFkZHJlc3MgfT4gfSxcbiAgICBjb2RlPzogVFByb2dyYW1FcnJvckNvZGUsXG4pOiBlcnJvciBpcyBTb2xhbmFFcnJvcjx0eXBlb2YgU09MQU5BX0VSUk9SX19JTlNUUlVDVElPTl9FUlJPUl9fQ1VTVE9NPiAmIFJlYWRvbmx5PHsgY29udGV4dDogUmVhZG9ubHk8eyBjb2RlOiBUUHJvZ3JhbUVycm9yQ29kZSB9PiB9PiB7XG4gIHJldHVybiBpc1Byb2dyYW1FcnJvcjxUUHJvZ3JhbUVycm9yQ29kZT4oZXJyb3IsIHRyYW5zYWN0aW9uTWVzc2FnZSwgRFVFTF9QUk9HUkFNX0FERFJFU1MsIGNvZGUpO1xufSJdfQ==
|
|
@@ -16,4 +16,6 @@ export * from './initializeQueue';
|
|
|
16
16
|
export * from './initializeTenant';
|
|
17
17
|
export * from './joinQueue';
|
|
18
18
|
export * from './processUndelegation';
|
|
19
|
-
|
|
19
|
+
export * from './setupQueuePermission';
|
|
20
|
+
export * from './setupTicketPermission';
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ2VuZXJhdGVkL2R1ZWwvaW5zdHJ1Y3Rpb25zL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx5QkFBeUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpcyBjb2RlIHdhcyBBVVRPR0VORVJBVEVEIHVzaW5nIHRoZSBDb2RhbWEgbGlicmFyeS5cbiAqIFBsZWFzZSBETyBOT1QgRURJVCBUSElTIEZJTEUsIGluc3RlYWQgdXNlIHZpc2l0b3JzXG4gKiB0byBhZGQgZmVhdHVyZXMsIHRoZW4gcmVydW4gQ29kYW1hIHRvIHVwZGF0ZSBpdC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jb2RhbWEtaWRsL2NvZGFtYVxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vY2FuY2VsVGlja2V0JztcbmV4cG9ydCAqIGZyb20gJy4vY2xvc2VUaWNrZXQnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21taXRUaWNrZXRzJztcbmV4cG9ydCAqIGZyb20gJy4vY3JlYXRlVGlja2V0JztcbmV4cG9ydCAqIGZyb20gJy4vZGVsZWdhdGVRdWV1ZSc7XG5leHBvcnQgKiBmcm9tICcuL2RlbGVnYXRlVGlja2V0JztcbmV4cG9ydCAqIGZyb20gJy4vZmx1c2hNYXRjaGVzJztcbmV4cG9ydCAqIGZyb20gJy4vaW5pdGlhbGl6ZVF1ZXVlJztcbmV4cG9ydCAqIGZyb20gJy4vaW5pdGlhbGl6ZVRlbmFudCc7XG5leHBvcnQgKiBmcm9tICcuL2pvaW5RdWV1ZSc7XG5leHBvcnQgKiBmcm9tICcuL3Byb2Nlc3NVbmRlbGVnYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9zZXR1cFF1ZXVlUGVybWlzc2lvbic7XG5leHBvcnQgKiBmcm9tICcuL3NldHVwVGlja2V0UGVybWlzc2lvbic7Il19
|
|
@@ -9,7 +9,7 @@ import { type AccountMeta, type AccountSignerMeta, type Address, type FixedSizeC
|
|
|
9
9
|
import { DUEL_PROGRAM_ADDRESS } from '../programs';
|
|
10
10
|
export declare const JOIN_QUEUE_DISCRIMINATOR: Uint8Array<ArrayBuffer>;
|
|
11
11
|
export declare function getJoinQueueDiscriminatorBytes(): ReadonlyUint8Array<ArrayBuffer>;
|
|
12
|
-
export type JoinQueueInstruction<TProgram extends string = typeof DUEL_PROGRAM_ADDRESS, TAccountQueue extends string | AccountMeta<string> = string, TAccountTenant extends string | AccountMeta<string> = string, TAccountPlayerData extends string | AccountMeta<string> = string, TAccountPlayerTicket extends string | AccountMeta<string> = string, TAccountSigner extends string | AccountMeta<string> = string, TRemainingAccounts extends readonly AccountMeta<string>[] = []> = Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array> & InstructionWithAccounts<[TAccountQueue extends string ? WritableAccount<TAccountQueue> : TAccountQueue, TAccountTenant extends string ? ReadonlyAccount<TAccountTenant> : TAccountTenant, TAccountPlayerData extends string ?
|
|
12
|
+
export type JoinQueueInstruction<TProgram extends string = typeof DUEL_PROGRAM_ADDRESS, TAccountQueue extends string | AccountMeta<string> = string, TAccountTenant extends string | AccountMeta<string> = string, TAccountPlayerData extends string | AccountMeta<string> = string, TAccountPlayerTicket extends string | AccountMeta<string> = string, TAccountSigner extends string | AccountMeta<string> = string, TRemainingAccounts extends readonly AccountMeta<string>[] = []> = Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array> & InstructionWithAccounts<[TAccountQueue extends string ? WritableAccount<TAccountQueue> : TAccountQueue, TAccountTenant extends string ? ReadonlyAccount<TAccountTenant> : TAccountTenant, TAccountPlayerData extends string ? ReadonlyAccount<TAccountPlayerData> : TAccountPlayerData, TAccountPlayerTicket extends string ? WritableAccount<TAccountPlayerTicket> : TAccountPlayerTicket, TAccountSigner extends string ? ReadonlySignerAccount<TAccountSigner> & AccountSignerMeta<TAccountSigner> : TAccountSigner, ...TRemainingAccounts]>;
|
|
13
13
|
export type JoinQueueInstructionData = {
|
|
14
14
|
discriminator: ReadonlyUint8Array;
|
|
15
15
|
};
|
|
@@ -23,7 +23,7 @@ export async function getJoinQueueInstructionAsync(input, config) {
|
|
|
23
23
|
// Program address.
|
|
24
24
|
const programAddress = config?.programAddress ?? DUEL_PROGRAM_ADDRESS;
|
|
25
25
|
// Original accounts.
|
|
26
|
-
const originalAccounts = { queue: { value: input.queue ?? null, isWritable: true }, tenant: { value: input.tenant ?? null, isWritable: false }, playerData: { value: input.playerData ?? null, isWritable:
|
|
26
|
+
const originalAccounts = { queue: { value: input.queue ?? null, isWritable: true }, tenant: { value: input.tenant ?? null, isWritable: false }, playerData: { value: input.playerData ?? null, isWritable: false }, playerTicket: { value: input.playerTicket ?? null, isWritable: true }, signer: { value: input.signer ?? null, isWritable: false } };
|
|
27
27
|
const accounts = originalAccounts;
|
|
28
28
|
// Resolve default values.
|
|
29
29
|
if (!accounts.playerTicket.value) {
|
|
@@ -36,7 +36,7 @@ export function getJoinQueueInstruction(input, config) {
|
|
|
36
36
|
// Program address.
|
|
37
37
|
const programAddress = config?.programAddress ?? DUEL_PROGRAM_ADDRESS;
|
|
38
38
|
// Original accounts.
|
|
39
|
-
const originalAccounts = { queue: { value: input.queue ?? null, isWritable: true }, tenant: { value: input.tenant ?? null, isWritable: false }, playerData: { value: input.playerData ?? null, isWritable:
|
|
39
|
+
const originalAccounts = { queue: { value: input.queue ?? null, isWritable: true }, tenant: { value: input.tenant ?? null, isWritable: false }, playerData: { value: input.playerData ?? null, isWritable: false }, playerTicket: { value: input.playerTicket ?? null, isWritable: true }, signer: { value: input.signer ?? null, isWritable: false } };
|
|
40
40
|
const accounts = originalAccounts;
|
|
41
41
|
const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');
|
|
42
42
|
return Object.freeze({ accounts: [getAccountMeta("queue", accounts.queue), getAccountMeta("tenant", accounts.tenant), getAccountMeta("playerData", accounts.playerData), getAccountMeta("playerTicket", accounts.playerTicket), getAccountMeta("signer", accounts.signer)], data: getJoinQueueInstructionDataEncoder().encode({}), programAddress });
|
|
@@ -53,4 +53,4 @@ export function parseJoinQueueInstruction(instruction) {
|
|
|
53
53
|
};
|
|
54
54
|
return { programAddress: instruction.programAddress, accounts: { queue: getNextAccount(), tenant: getNextAccount(), playerData: getNextAccount(), playerTicket: getNextAccount(), signer: getNextAccount() }, data: getJoinQueueInstructionDataDecoder().decode(instruction.data) };
|
|
55
55
|
}
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9pblF1ZXVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2dlbmVyYXRlZC9kdWVsL2luc3RydWN0aW9ucy9qb2luUXVldWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsd0JBQXdCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUseURBQXlELEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFnVSxNQUFNLGFBQWEsQ0FBQztBQUN0bEIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLHdDQUF3QyxFQUFtQyxNQUFNLDZCQUE2QixDQUFDO0FBQy9JLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVuRCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBRTlGLE1BQU0sVUFBVSw4QkFBOEIsS0FBSyxPQUFPLGNBQWMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFTbEksTUFBTSxVQUFVLGtDQUFrQztJQUM5QyxPQUFPLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxlQUFlLEVBQUUsY0FBYyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsYUFBYSxFQUFFLHdCQUF3QixFQUFFLENBQUMsQ0FBQyxDQUFDO0FB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QyxFQUFFLGNBQWMsRUFBb0ksQ0FBQyxDQUFDO0FBQ3ZkLENBQUM7QUFZRCxNQUFNLFVBQVUseUJBQXlCLENBQXdFLFdBQXFIO0lBQ3BPLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDdEMsTUFBTSxJQUFJLFdBQVcsQ0FBQyx5REFBeUQsRUFBRSxFQUFFLGtCQUFrQixFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLG9CQUFvQixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakssQ0FBQztJQUNELElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztJQUNyQixNQUFNLGNBQWMsR0FBRyxHQUFHLEVBQUU7UUFDMUIsTUFBTSxXQUFXLEdBQUksV0FBVyxDQUFDLFFBQTBCLENBQUMsWUFBWSxDQUFFLENBQUM7UUFDM0UsWUFBWSxJQUFJLENBQUMsQ0FBQztRQUNsQixPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDLENBQUE7SUFDQyxPQUFPLEVBQUUsY0FBYyxFQUFFLFdBQVcsQ0FBQyxjQUFjLEVBQUUsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxrQ0FBa0MsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUN0UixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlzIGNvZGUgd2FzIEFVVE9HRU5FUkFURUQgdXNpbmcgdGhlIENvZGFtYSBsaWJyYXJ5LlxuICogUGxlYXNlIERPIE5PVCBFRElUIFRISVMgRklMRSwgaW5zdGVhZCB1c2UgdmlzaXRvcnNcbiAqIHRvIGFkZCBmZWF0dXJlcywgdGhlbiByZXJ1biBDb2RhbWEgdG8gdXBkYXRlIGl0LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2NvZGFtYS1pZGwvY29kYW1hXG4gKi9cblxuaW1wb3J0IHsgY29tYmluZUNvZGVjLCBmaXhEZWNvZGVyU2l6ZSwgZml4RW5jb2RlclNpemUsIGdldEFkZHJlc3NFbmNvZGVyLCBnZXRCeXRlc0RlY29kZXIsIGdldEJ5dGVzRW5jb2RlciwgZ2V0UHJvZ3JhbURlcml2ZWRBZGRyZXNzLCBnZXRTdHJ1Y3REZWNvZGVyLCBnZXRTdHJ1Y3RFbmNvZGVyLCBTT0xBTkFfRVJST1JfX1BST0dSQU1fQ0xJRU5UU19fSU5TVUZGSUNJRU5UX0FDQ09VTlRfTUVUQVMsIFNvbGFuYUVycm9yLCB0cmFuc2Zvcm1FbmNvZGVyLCB0eXBlIEFjY291bnRNZXRhLCB0eXBlIEFjY291bnRTaWduZXJNZXRhLCB0eXBlIEFkZHJlc3MsIHR5cGUgRml4ZWRTaXplQ29kZWMsIHR5cGUgRml4ZWRTaXplRGVjb2RlciwgdHlwZSBGaXhlZFNpemVFbmNvZGVyLCB0eXBlIEluc3RydWN0aW9uLCB0eXBlIEluc3RydWN0aW9uV2l0aEFjY291bnRzLCB0eXBlIEluc3RydWN0aW9uV2l0aERhdGEsIHR5cGUgUmVhZG9ubHlBY2NvdW50LCB0eXBlIFJlYWRvbmx5U2lnbmVyQWNjb3VudCwgdHlwZSBSZWFkb25seVVpbnQ4QXJyYXksIHR5cGUgVHJhbnNhY3Rpb25TaWduZXIsIHR5cGUgV3JpdGFibGVBY2NvdW50IH0gZnJvbSAnQHNvbGFuYS9raXQnO1xuaW1wb3J0IHsgZ2V0QWNjb3VudE1ldGFGYWN0b3J5LCBnZXRBZGRyZXNzRnJvbVJlc29sdmVkSW5zdHJ1Y3Rpb25BY2NvdW50LCB0eXBlIFJlc29sdmVkSW5zdHJ1Y3Rpb25BY2NvdW50IH0gZnJvbSAnQHNvbGFuYS9wcm9ncmFtLWNsaWVudC1jb3JlJztcbmltcG9ydCB7IERVRUxfUFJPR1JBTV9BRERSRVNTIH0gZnJvbSAnLi4vcHJvZ3JhbXMnO1xuXG5leHBvcnQgY29uc3QgSk9JTl9RVUVVRV9ESVNDUklNSU5BVE9SID0gbmV3IFVpbnQ4QXJyYXkoWzE1NywgMTE1LCA0OCwgMTA5LCA2NSwgODYsIDIwMywgMjM4XSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRKb2luUXVldWVEaXNjcmltaW5hdG9yQnl0ZXMoKSB7IHJldHVybiBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKEpPSU5fUVVFVUVfRElTQ1JJTUlOQVRPUik7IH1cblxuZXhwb3J0IHR5cGUgSm9pblF1ZXVlSW5zdHJ1Y3Rpb248VFByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPSB0eXBlb2YgRFVFTF9QUk9HUkFNX0FERFJFU1MsIFRBY2NvdW50UXVldWUgZXh0ZW5kcyBzdHJpbmcgfCBBY2NvdW50TWV0YTxzdHJpbmc+ID0gc3RyaW5nLCBUQWNjb3VudFRlbmFudCBleHRlbmRzIHN0cmluZyB8IEFjY291bnRNZXRhPHN0cmluZz4gPSBzdHJpbmcsIFRBY2NvdW50UGxheWVyRGF0YSBleHRlbmRzIHN0cmluZyB8IEFjY291bnRNZXRhPHN0cmluZz4gPSBzdHJpbmcsIFRBY2NvdW50UGxheWVyVGlja2V0IGV4dGVuZHMgc3RyaW5nIHwgQWNjb3VudE1ldGE8c3RyaW5nPiA9IHN0cmluZywgVEFjY291bnRTaWduZXIgZXh0ZW5kcyBzdHJpbmcgfCBBY2NvdW50TWV0YTxzdHJpbmc+ID0gc3RyaW5nLCBUUmVtYWluaW5nQWNjb3VudHMgZXh0ZW5kcyByZWFkb25seSBBY2NvdW50TWV0YTxzdHJpbmc+W10gPSBbXT4gPVxuSW5zdHJ1Y3Rpb248VFByb2dyYW0+ICYgSW5zdHJ1Y3Rpb25XaXRoRGF0YTxSZWFkb25seVVpbnQ4QXJyYXk+ICYgSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHM8W1RBY2NvdW50UXVldWUgZXh0ZW5kcyBzdHJpbmcgPyBXcml0YWJsZUFjY291bnQ8VEFjY291bnRRdWV1ZT4gOiBUQWNjb3VudFF1ZXVlLCBUQWNjb3VudFRlbmFudCBleHRlbmRzIHN0cmluZyA/IFJlYWRvbmx5QWNjb3VudDxUQWNjb3VudFRlbmFudD4gOiBUQWNjb3VudFRlbmFudCwgVEFjY291bnRQbGF5ZXJEYXRhIGV4dGVuZHMgc3RyaW5nID8gV3JpdGFibGVBY2NvdW50PFRBY2NvdW50UGxheWVyRGF0YT4gOiBUQWNjb3VudFBsYXllckRhdGEsIFRBY2NvdW50UGxheWVyVGlja2V0IGV4dGVuZHMgc3RyaW5nID8gV3JpdGFibGVBY2NvdW50PFRBY2NvdW50UGxheWVyVGlja2V0PiA6IFRBY2NvdW50UGxheWVyVGlja2V0LCBUQWNjb3VudFNpZ25lciBleHRlbmRzIHN0cmluZyA/IFJlYWRvbmx5U2lnbmVyQWNjb3VudDxUQWNjb3VudFNpZ25lcj4gJiBBY2NvdW50U2lnbmVyTWV0YTxUQWNjb3VudFNpZ25lcj4gOiBUQWNjb3VudFNpZ25lciwgLi4uVFJlbWFpbmluZ0FjY291bnRzXT47XG5cbmV4cG9ydCB0eXBlIEpvaW5RdWV1ZUluc3RydWN0aW9uRGF0YSA9IHsgZGlzY3JpbWluYXRvcjogUmVhZG9ubHlVaW50OEFycmF5OyAgfTtcblxuZXhwb3J0IHR5cGUgSm9pblF1ZXVlSW5zdHJ1Y3Rpb25EYXRhQXJncyA9IHsgIH07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRKb2luUXVldWVJbnN0cnVjdGlvbkRhdGFFbmNvZGVyKCk6IEZpeGVkU2l6ZUVuY29kZXI8Sm9pblF1ZXVlSW5zdHJ1Y3Rpb25EYXRhQXJncz4ge1xuICAgIHJldHVybiB0cmFuc2Zvcm1FbmNvZGVyKGdldFN0cnVjdEVuY29kZXIoW1snZGlzY3JpbWluYXRvcicsIGZpeEVuY29kZXJTaXplKGdldEJ5dGVzRW5jb2RlcigpLCA4KV1dKSwgKHZhbHVlKSA9PiAoeyAuLi52YWx1ZSwgZGlzY3JpbWluYXRvcjogSk9JTl9RVUVVRV9ESVNDUklNSU5BVE9SIH0pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEpvaW5RdWV1ZUluc3RydWN0aW9uRGF0YURlY29kZXIoKTogRml4ZWRTaXplRGVjb2RlcjxKb2luUXVldWVJbnN0cnVjdGlvbkRhdGE+IHtcbiAgICByZXR1cm4gZ2V0U3RydWN0RGVjb2RlcihbWydkaXNjcmltaW5hdG9yJywgZml4RGVjb2RlclNpemUoZ2V0Qnl0ZXNEZWNvZGVyKCksIDgpXV0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Sm9pblF1ZXVlSW5zdHJ1Y3Rpb25EYXRhQ29kZWMoKTogRml4ZWRTaXplQ29kZWM8Sm9pblF1ZXVlSW5zdHJ1Y3Rpb25EYXRhQXJncywgSm9pblF1ZXVlSW5zdHJ1Y3Rpb25EYXRhPiB7XG4gICAgcmV0dXJuIGNvbWJpbmVDb2RlYyhnZXRKb2luUXVldWVJbnN0cnVjdGlvbkRhdGFFbmNvZGVyKCksIGdldEpvaW5RdWV1ZUluc3RydWN0aW9uRGF0YURlY29kZXIoKSk7XG59XG5cbmV4cG9ydCB0eXBlIEpvaW5RdWV1ZUFzeW5jSW5wdXQ8VEFjY291bnRRdWV1ZSBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnRUZW5hbnQgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50UGxheWVyRGF0YSBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnRQbGF5ZXJUaWNrZXQgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50U2lnbmVyIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiA9ICB7XG4gIHF1ZXVlOiBBZGRyZXNzPFRBY2NvdW50UXVldWU+O1xudGVuYW50OiBBZGRyZXNzPFRBY2NvdW50VGVuYW50PjtcbnBsYXllckRhdGE6IEFkZHJlc3M8VEFjY291bnRQbGF5ZXJEYXRhPjtcbnBsYXllclRpY2tldD86IEFkZHJlc3M8VEFjY291bnRQbGF5ZXJUaWNrZXQ+O1xuc2lnbmVyOiBUcmFuc2FjdGlvblNpZ25lcjxUQWNjb3VudFNpZ25lcj47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRKb2luUXVldWVJbnN0cnVjdGlvbkFzeW5jPFRBY2NvdW50UXVldWUgZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50VGVuYW50IGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudFBsYXllckRhdGEgZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50UGxheWVyVGlja2V0IGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudFNpZ25lciBleHRlbmRzIHN0cmluZywgVFByb2dyYW1BZGRyZXNzIGV4dGVuZHMgQWRkcmVzcyA9IHR5cGVvZiBEVUVMX1BST0dSQU1fQUREUkVTUz4oaW5wdXQ6IEpvaW5RdWV1ZUFzeW5jSW5wdXQ8VEFjY291bnRRdWV1ZSwgVEFjY291bnRUZW5hbnQsIFRBY2NvdW50UGxheWVyRGF0YSwgVEFjY291bnRQbGF5ZXJUaWNrZXQsIFRBY2NvdW50U2lnbmVyPiwgY29uZmlnPzogeyBwcm9ncmFtQWRkcmVzcz86IFRQcm9ncmFtQWRkcmVzcyB9ICk6IFByb21pc2U8Sm9pblF1ZXVlSW5zdHJ1Y3Rpb248VFByb2dyYW1BZGRyZXNzLCBUQWNjb3VudFF1ZXVlLCBUQWNjb3VudFRlbmFudCwgVEFjY291bnRQbGF5ZXJEYXRhLCBUQWNjb3VudFBsYXllclRpY2tldCwgVEFjY291bnRTaWduZXI+PiB7XG4gIC8vIFByb2dyYW0gYWRkcmVzcy5cbmNvbnN0IHByb2dyYW1BZGRyZXNzID0gY29uZmlnPy5wcm9ncmFtQWRkcmVzcyA/PyBEVUVMX1BST0dSQU1fQUREUkVTUztcblxuIC8vIE9yaWdpbmFsIGFjY291bnRzLlxuY29uc3Qgb3JpZ2luYWxBY2NvdW50cyA9IHsgcXVldWU6IHsgdmFsdWU6IGlucHV0LnF1ZXVlID8/IG51bGwsIGlzV3JpdGFibGU6IHRydWUgfSwgdGVuYW50OiB7IHZhbHVlOiBpbnB1dC50ZW5hbnQgPz8gbnVsbCwgaXNXcml0YWJsZTogZmFsc2UgfSwgcGxheWVyRGF0YTogeyB2YWx1ZTogaW5wdXQucGxheWVyRGF0YSA/PyBudWxsLCBpc1dyaXRhYmxlOiB0cnVlIH0sIHBsYXllclRpY2tldDogeyB2YWx1ZTogaW5wdXQucGxheWVyVGlja2V0ID8/IG51bGwsIGlzV3JpdGFibGU6IHRydWUgfSwgc2lnbmVyOiB7IHZhbHVlOiBpbnB1dC5zaWduZXIgPz8gbnVsbCwgaXNXcml0YWJsZTogZmFsc2UgfSB9XG5jb25zdCBhY2NvdW50cyA9IG9yaWdpbmFsQWNjb3VudHMgYXMgUmVjb3JkPGtleW9mIHR5cGVvZiBvcmlnaW5hbEFjY291bnRzLCBSZXNvbHZlZEluc3RydWN0aW9uQWNjb3VudD47XG5cblxuLy8gUmVzb2x2ZSBkZWZhdWx0IHZhbHVlcy5cbmlmICghYWNjb3VudHMucGxheWVyVGlja2V0LnZhbHVlKSB7XG5hY2NvdW50cy5wbGF5ZXJUaWNrZXQudmFsdWUgPSBhd2FpdCBnZXRQcm9ncmFtRGVyaXZlZEFkZHJlc3MoeyBwcm9ncmFtQWRkcmVzcywgc2VlZHM6IFtnZXRCeXRlc0VuY29kZXIoKS5lbmNvZGUobmV3IFVpbnQ4QXJyYXkoWzExNiwgMTA1LCA5OSwgMTA3LCAxMDEsIDExNl0pKSwgZ2V0QWRkcmVzc0VuY29kZXIoKS5lbmNvZGUoZ2V0QWRkcmVzc0Zyb21SZXNvbHZlZEluc3RydWN0aW9uQWNjb3VudChcInNpZ25lclwiLCBhY2NvdW50cy5zaWduZXIudmFsdWUpKSwgZ2V0QWRkcmVzc0VuY29kZXIoKS5lbmNvZGUoZ2V0QWRkcmVzc0Zyb21SZXNvbHZlZEluc3RydWN0aW9uQWNjb3VudChcInRlbmFudFwiLCBhY2NvdW50cy50ZW5hbnQudmFsdWUpKV0gfSk7XG59XG5cbmNvbnN0IGdldEFjY291bnRNZXRhID0gZ2V0QWNjb3VudE1ldGFGYWN0b3J5KHByb2dyYW1BZGRyZXNzLCAncHJvZ3JhbUlkJyk7XG5yZXR1cm4gT2JqZWN0LmZyZWV6ZSh7IGFjY291bnRzOiBbZ2V0QWNjb3VudE1ldGEoXCJxdWV1ZVwiLCBhY2NvdW50cy5xdWV1ZSksIGdldEFjY291bnRNZXRhKFwidGVuYW50XCIsIGFjY291bnRzLnRlbmFudCksIGdldEFjY291bnRNZXRhKFwicGxheWVyRGF0YVwiLCBhY2NvdW50cy5wbGF5ZXJEYXRhKSwgZ2V0QWNjb3VudE1ldGEoXCJwbGF5ZXJUaWNrZXRcIiwgYWNjb3VudHMucGxheWVyVGlja2V0KSwgZ2V0QWNjb3VudE1ldGEoXCJzaWduZXJcIiwgYWNjb3VudHMuc2lnbmVyKV0sIGRhdGE6IGdldEpvaW5RdWV1ZUluc3RydWN0aW9uRGF0YUVuY29kZXIoKS5lbmNvZGUoe30pLCBwcm9ncmFtQWRkcmVzcyB9IGFzIEpvaW5RdWV1ZUluc3RydWN0aW9uPFRQcm9ncmFtQWRkcmVzcywgVEFjY291bnRRdWV1ZSwgVEFjY291bnRUZW5hbnQsIFRBY2NvdW50UGxheWVyRGF0YSwgVEFjY291bnRQbGF5ZXJUaWNrZXQsIFRBY2NvdW50U2lnbmVyPik7XG59XG5cbmV4cG9ydCB0eXBlIEpvaW5RdWV1ZUlucHV0PFRBY2NvdW50UXVldWUgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50VGVuYW50IGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQWNjb3VudFBsYXllckRhdGEgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50UGxheWVyVGlja2V0IGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQWNjb3VudFNpZ25lciBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4gPSAge1xuICBxdWV1ZTogQWRkcmVzczxUQWNjb3VudFF1ZXVlPjtcbnRlbmFudDogQWRkcmVzczxUQWNjb3VudFRlbmFudD47XG5wbGF5ZXJEYXRhOiBBZGRyZXNzPFRBY2NvdW50UGxheWVyRGF0YT47XG5wbGF5ZXJUaWNrZXQ6IEFkZHJlc3M8VEFjY291bnRQbGF5ZXJUaWNrZXQ+O1xuc2lnbmVyOiBUcmFuc2FjdGlvblNpZ25lcjxUQWNjb3VudFNpZ25lcj47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRKb2luUXVldWVJbnN0cnVjdGlvbjxUQWNjb3VudFF1ZXVlIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudFRlbmFudCBleHRlbmRzIHN0cmluZywgVEFjY291bnRQbGF5ZXJEYXRhIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudFBsYXllclRpY2tldCBleHRlbmRzIHN0cmluZywgVEFjY291bnRTaWduZXIgZXh0ZW5kcyBzdHJpbmcsIFRQcm9ncmFtQWRkcmVzcyBleHRlbmRzIEFkZHJlc3MgPSB0eXBlb2YgRFVFTF9QUk9HUkFNX0FERFJFU1M+KGlucHV0OiBKb2luUXVldWVJbnB1dDxUQWNjb3VudFF1ZXVlLCBUQWNjb3VudFRlbmFudCwgVEFjY291bnRQbGF5ZXJEYXRhLCBUQWNjb3VudFBsYXllclRpY2tldCwgVEFjY291bnRTaWduZXI+LCBjb25maWc/OiB7IHByb2dyYW1BZGRyZXNzPzogVFByb2dyYW1BZGRyZXNzIH0gKTogSm9pblF1ZXVlSW5zdHJ1Y3Rpb248VFByb2dyYW1BZGRyZXNzLCBUQWNjb3VudFF1ZXVlLCBUQWNjb3VudFRlbmFudCwgVEFjY291bnRQbGF5ZXJEYXRhLCBUQWNjb3VudFBsYXllclRpY2tldCwgVEFjY291bnRTaWduZXI+IHtcbiAgLy8gUHJvZ3JhbSBhZGRyZXNzLlxuY29uc3QgcHJvZ3JhbUFkZHJlc3MgPSBjb25maWc/LnByb2dyYW1BZGRyZXNzID8/IERVRUxfUFJPR1JBTV9BRERSRVNTO1xuXG4gLy8gT3JpZ2luYWwgYWNjb3VudHMuXG5jb25zdCBvcmlnaW5hbEFjY291bnRzID0geyBxdWV1ZTogeyB2YWx1ZTogaW5wdXQucXVldWUgPz8gbnVsbCwgaXNXcml0YWJsZTogdHJ1ZSB9LCB0ZW5hbnQ6IHsgdmFsdWU6IGlucHV0LnRlbmFudCA/PyBudWxsLCBpc1dyaXRhYmxlOiBmYWxzZSB9LCBwbGF5ZXJEYXRhOiB7IHZhbHVlOiBpbnB1dC5wbGF5ZXJEYXRhID8/IG51bGwsIGlzV3JpdGFibGU6IHRydWUgfSwgcGxheWVyVGlja2V0OiB7IHZhbHVlOiBpbnB1dC5wbGF5ZXJUaWNrZXQgPz8gbnVsbCwgaXNXcml0YWJsZTogdHJ1ZSB9LCBzaWduZXI6IHsgdmFsdWU6IGlucHV0LnNpZ25lciA/PyBudWxsLCBpc1dyaXRhYmxlOiBmYWxzZSB9IH1cbmNvbnN0IGFjY291bnRzID0gb3JpZ2luYWxBY2NvdW50cyBhcyBSZWNvcmQ8a2V5b2YgdHlwZW9mIG9yaWdpbmFsQWNjb3VudHMsIFJlc29sdmVkSW5zdHJ1Y3Rpb25BY2NvdW50PjtcblxuXG5cblxuY29uc3QgZ2V0QWNjb3VudE1ldGEgPSBnZXRBY2NvdW50TWV0YUZhY3RvcnkocHJvZ3JhbUFkZHJlc3MsICdwcm9ncmFtSWQnKTtcbnJldHVybiBPYmplY3QuZnJlZXplKHsgYWNjb3VudHM6IFtnZXRBY2NvdW50TWV0YShcInF1ZXVlXCIsIGFjY291bnRzLnF1ZXVlKSwgZ2V0QWNjb3VudE1ldGEoXCJ0ZW5hbnRcIiwgYWNjb3VudHMudGVuYW50KSwgZ2V0QWNjb3VudE1ldGEoXCJwbGF5ZXJEYXRhXCIsIGFjY291bnRzLnBsYXllckRhdGEpLCBnZXRBY2NvdW50TWV0YShcInBsYXllclRpY2tldFwiLCBhY2NvdW50cy5wbGF5ZXJUaWNrZXQpLCBnZXRBY2NvdW50TWV0YShcInNpZ25lclwiLCBhY2NvdW50cy5zaWduZXIpXSwgZGF0YTogZ2V0Sm9pblF1ZXVlSW5zdHJ1Y3Rpb25EYXRhRW5jb2RlcigpLmVuY29kZSh7fSksIHByb2dyYW1BZGRyZXNzIH0gYXMgSm9pblF1ZXVlSW5zdHJ1Y3Rpb248VFByb2dyYW1BZGRyZXNzLCBUQWNjb3VudFF1ZXVlLCBUQWNjb3VudFRlbmFudCwgVEFjY291bnRQbGF5ZXJEYXRhLCBUQWNjb3VudFBsYXllclRpY2tldCwgVEFjY291bnRTaWduZXI+KTtcbn1cblxuZXhwb3J0IHR5cGUgUGFyc2VkSm9pblF1ZXVlSW5zdHJ1Y3Rpb248VFByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPSB0eXBlb2YgRFVFTF9QUk9HUkFNX0FERFJFU1MsIFRBY2NvdW50TWV0YXMgZXh0ZW5kcyByZWFkb25seSBBY2NvdW50TWV0YVtdID0gcmVhZG9ubHkgQWNjb3VudE1ldGFbXT4gPSB7IHByb2dyYW1BZGRyZXNzOiBBZGRyZXNzPFRQcm9ncmFtPjtcbmFjY291bnRzOiB7XG5xdWV1ZTogVEFjY291bnRNZXRhc1swXTtcbnRlbmFudDogVEFjY291bnRNZXRhc1sxXTtcbnBsYXllckRhdGE6IFRBY2NvdW50TWV0YXNbMl07XG5wbGF5ZXJUaWNrZXQ6IFRBY2NvdW50TWV0YXNbM107XG5zaWduZXI6IFRBY2NvdW50TWV0YXNbNF07XG59O1xuZGF0YTogSm9pblF1ZXVlSW5zdHJ1Y3Rpb25EYXRhOyB9O1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VKb2luUXVldWVJbnN0cnVjdGlvbjxUUHJvZ3JhbSBleHRlbmRzIHN0cmluZywgVEFjY291bnRNZXRhcyBleHRlbmRzIHJlYWRvbmx5IEFjY291bnRNZXRhW10+KGluc3RydWN0aW9uOiBJbnN0cnVjdGlvbjxUUHJvZ3JhbT4gJiBJbnN0cnVjdGlvbldpdGhBY2NvdW50czxUQWNjb3VudE1ldGFzPiAmIEluc3RydWN0aW9uV2l0aERhdGE8UmVhZG9ubHlVaW50OEFycmF5Pik6IFBhcnNlZEpvaW5RdWV1ZUluc3RydWN0aW9uPFRQcm9ncmFtLCBUQWNjb3VudE1ldGFzPiB7XG4gIGlmIChpbnN0cnVjdGlvbi5hY2NvdW50cy5sZW5ndGggPCA1KSB7XG4gIHRocm93IG5ldyBTb2xhbmFFcnJvcihTT0xBTkFfRVJST1JfX1BST0dSQU1fQ0xJRU5UU19fSU5TVUZGSUNJRU5UX0FDQ09VTlRfTUVUQVMsIHsgYWN0dWFsQWNjb3VudE1ldGFzOiBpbnN0cnVjdGlvbi5hY2NvdW50cy5sZW5ndGgsIGV4cGVjdGVkQWNjb3VudE1ldGFzOiA1IH0pO1xufVxubGV0IGFjY291bnRJbmRleCA9IDA7XG5jb25zdCBnZXROZXh0QWNjb3VudCA9ICgpID0+IHtcbiAgY29uc3QgYWNjb3VudE1ldGEgPSAoaW5zdHJ1Y3Rpb24uYWNjb3VudHMgYXMgVEFjY291bnRNZXRhcylbYWNjb3VudEluZGV4XSE7XG4gIGFjY291bnRJbmRleCArPSAxO1xuICByZXR1cm4gYWNjb3VudE1ldGE7XG59XG4gIHJldHVybiB7IHByb2dyYW1BZGRyZXNzOiBpbnN0cnVjdGlvbi5wcm9ncmFtQWRkcmVzcywgYWNjb3VudHM6IHsgcXVldWU6IGdldE5leHRBY2NvdW50KCksIHRlbmFudDogZ2V0TmV4dEFjY291bnQoKSwgcGxheWVyRGF0YTogZ2V0TmV4dEFjY291bnQoKSwgcGxheWVyVGlja2V0OiBnZXROZXh0QWNjb3VudCgpLCBzaWduZXI6IGdldE5leHRBY2NvdW50KCkgfSwgZGF0YTogZ2V0Sm9pblF1ZXVlSW5zdHJ1Y3Rpb25EYXRhRGVjb2RlcigpLmRlY29kZShpbnN0cnVjdGlvbi5kYXRhKSB9O1xufSJdfQ==
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9pblF1ZXVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2dlbmVyYXRlZC9kdWVsL2luc3RydWN0aW9ucy9qb2luUXVldWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsd0JBQXdCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUseURBQXlELEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFnVSxNQUFNLGFBQWEsQ0FBQztBQUN0bEIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLHdDQUF3QyxFQUFtQyxNQUFNLDZCQUE2QixDQUFDO0FBQy9JLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVuRCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBRTlGLE1BQU0sVUFBVSw4QkFBOEIsS0FBSyxPQUFPLGNBQWMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFTbEksTUFBTSxVQUFVLGtDQUFrQztJQUM5QyxPQUFPLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxlQUFlLEVBQUUsY0FBYyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsYUFBYSxFQUFFLHdCQUF3QixFQUFFLENBQUMsQ0FBQyxDQUFDO0FB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QyxFQUFFLGNBQWMsRUFBb0ksQ0FBQyxDQUFDO0FBQ3ZkLENBQUM7QUFZRCxNQUFNLFVBQVUseUJBQXlCLENBQXdFLFdBQXFIO0lBQ3BPLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDdEMsTUFBTSxJQUFJLFdBQVcsQ0FBQyx5REFBeUQsRUFBRSxFQUFFLGtCQUFrQixFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLG9CQUFvQixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakssQ0FBQztJQUNELElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztJQUNyQixNQUFNLGNBQWMsR0FBRyxHQUFHLEVBQUU7UUFDMUIsTUFBTSxXQUFXLEdBQUksV0FBVyxDQUFDLFFBQTBCLENBQUMsWUFBWSxDQUFFLENBQUM7UUFDM0UsWUFBWSxJQUFJLENBQUMsQ0FBQztRQUNsQixPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDLENBQUE7SUFDQyxPQUFPLEVBQUUsY0FBYyxFQUFFLFdBQVcsQ0FBQyxjQUFjLEVBQUUsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxrQ0FBa0MsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUN0UixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlzIGNvZGUgd2FzIEFVVE9HRU5FUkFURUQgdXNpbmcgdGhlIENvZGFtYSBsaWJyYXJ5LlxuICogUGxlYXNlIERPIE5PVCBFRElUIFRISVMgRklMRSwgaW5zdGVhZCB1c2UgdmlzaXRvcnNcbiAqIHRvIGFkZCBmZWF0dXJlcywgdGhlbiByZXJ1biBDb2RhbWEgdG8gdXBkYXRlIGl0LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2NvZGFtYS1pZGwvY29kYW1hXG4gKi9cblxuaW1wb3J0IHsgY29tYmluZUNvZGVjLCBmaXhEZWNvZGVyU2l6ZSwgZml4RW5jb2RlclNpemUsIGdldEFkZHJlc3NFbmNvZGVyLCBnZXRCeXRlc0RlY29kZXIsIGdldEJ5dGVzRW5jb2RlciwgZ2V0UHJvZ3JhbURlcml2ZWRBZGRyZXNzLCBnZXRTdHJ1Y3REZWNvZGVyLCBnZXRTdHJ1Y3RFbmNvZGVyLCBTT0xBTkFfRVJST1JfX1BST0dSQU1fQ0xJRU5UU19fSU5TVUZGSUNJRU5UX0FDQ09VTlRfTUVUQVMsIFNvbGFuYUVycm9yLCB0cmFuc2Zvcm1FbmNvZGVyLCB0eXBlIEFjY291bnRNZXRhLCB0eXBlIEFjY291bnRTaWduZXJNZXRhLCB0eXBlIEFkZHJlc3MsIHR5cGUgRml4ZWRTaXplQ29kZWMsIHR5cGUgRml4ZWRTaXplRGVjb2RlciwgdHlwZSBGaXhlZFNpemVFbmNvZGVyLCB0eXBlIEluc3RydWN0aW9uLCB0eXBlIEluc3RydWN0aW9uV2l0aEFjY291bnRzLCB0eXBlIEluc3RydWN0aW9uV2l0aERhdGEsIHR5cGUgUmVhZG9ubHlBY2NvdW50LCB0eXBlIFJlYWRvbmx5U2lnbmVyQWNjb3VudCwgdHlwZSBSZWFkb25seVVpbnQ4QXJyYXksIHR5cGUgVHJhbnNhY3Rpb25TaWduZXIsIHR5cGUgV3JpdGFibGVBY2NvdW50IH0gZnJvbSAnQHNvbGFuYS9raXQnO1xuaW1wb3J0IHsgZ2V0QWNjb3VudE1ldGFGYWN0b3J5LCBnZXRBZGRyZXNzRnJvbVJlc29sdmVkSW5zdHJ1Y3Rpb25BY2NvdW50LCB0eXBlIFJlc29sdmVkSW5zdHJ1Y3Rpb25BY2NvdW50IH0gZnJvbSAnQHNvbGFuYS9wcm9ncmFtLWNsaWVudC1jb3JlJztcbmltcG9ydCB7IERVRUxfUFJPR1JBTV9BRERSRVNTIH0gZnJvbSAnLi4vcHJvZ3JhbXMnO1xuXG5leHBvcnQgY29uc3QgSk9JTl9RVUVVRV9ESVNDUklNSU5BVE9SID0gbmV3IFVpbnQ4QXJyYXkoWzE1NywgMTE1LCA0OCwgMTA5LCA2NSwgODYsIDIwMywgMjM4XSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRKb2luUXVldWVEaXNjcmltaW5hdG9yQnl0ZXMoKSB7IHJldHVybiBmaXhFbmNvZGVyU2l6ZShnZXRCeXRlc0VuY29kZXIoKSwgOCkuZW5jb2RlKEpPSU5fUVVFVUVfRElTQ1JJTUlOQVRPUik7IH1cblxuZXhwb3J0IHR5cGUgSm9pblF1ZXVlSW5zdHJ1Y3Rpb248VFByb2dyYW0gZXh0ZW5kcyBzdHJpbmcgPSB0eXBlb2YgRFVFTF9QUk9HUkFNX0FERFJFU1MsIFRBY2NvdW50UXVldWUgZXh0ZW5kcyBzdHJpbmcgfCBBY2NvdW50TWV0YTxzdHJpbmc+ID0gc3RyaW5nLCBUQWNjb3VudFRlbmFudCBleHRlbmRzIHN0cmluZyB8IEFjY291bnRNZXRhPHN0cmluZz4gPSBzdHJpbmcsIFRBY2NvdW50UGxheWVyRGF0YSBleHRlbmRzIHN0cmluZyB8IEFjY291bnRNZXRhPHN0cmluZz4gPSBzdHJpbmcsIFRBY2NvdW50UGxheWVyVGlja2V0IGV4dGVuZHMgc3RyaW5nIHwgQWNjb3VudE1ldGE8c3RyaW5nPiA9IHN0cmluZywgVEFjY291bnRTaWduZXIgZXh0ZW5kcyBzdHJpbmcgfCBBY2NvdW50TWV0YTxzdHJpbmc+ID0gc3RyaW5nLCBUUmVtYWluaW5nQWNjb3VudHMgZXh0ZW5kcyByZWFkb25seSBBY2NvdW50TWV0YTxzdHJpbmc+W10gPSBbXT4gPVxuSW5zdHJ1Y3Rpb248VFByb2dyYW0+ICYgSW5zdHJ1Y3Rpb25XaXRoRGF0YTxSZWFkb25seVVpbnQ4QXJyYXk+ICYgSW5zdHJ1Y3Rpb25XaXRoQWNjb3VudHM8W1RBY2NvdW50UXVldWUgZXh0ZW5kcyBzdHJpbmcgPyBXcml0YWJsZUFjY291bnQ8VEFjY291bnRRdWV1ZT4gOiBUQWNjb3VudFF1ZXVlLCBUQWNjb3VudFRlbmFudCBleHRlbmRzIHN0cmluZyA/IFJlYWRvbmx5QWNjb3VudDxUQWNjb3VudFRlbmFudD4gOiBUQWNjb3VudFRlbmFudCwgVEFjY291bnRQbGF5ZXJEYXRhIGV4dGVuZHMgc3RyaW5nID8gUmVhZG9ubHlBY2NvdW50PFRBY2NvdW50UGxheWVyRGF0YT4gOiBUQWNjb3VudFBsYXllckRhdGEsIFRBY2NvdW50UGxheWVyVGlja2V0IGV4dGVuZHMgc3RyaW5nID8gV3JpdGFibGVBY2NvdW50PFRBY2NvdW50UGxheWVyVGlja2V0PiA6IFRBY2NvdW50UGxheWVyVGlja2V0LCBUQWNjb3VudFNpZ25lciBleHRlbmRzIHN0cmluZyA/IFJlYWRvbmx5U2lnbmVyQWNjb3VudDxUQWNjb3VudFNpZ25lcj4gJiBBY2NvdW50U2lnbmVyTWV0YTxUQWNjb3VudFNpZ25lcj4gOiBUQWNjb3VudFNpZ25lciwgLi4uVFJlbWFpbmluZ0FjY291bnRzXT47XG5cbmV4cG9ydCB0eXBlIEpvaW5RdWV1ZUluc3RydWN0aW9uRGF0YSA9IHsgZGlzY3JpbWluYXRvcjogUmVhZG9ubHlVaW50OEFycmF5OyAgfTtcblxuZXhwb3J0IHR5cGUgSm9pblF1ZXVlSW5zdHJ1Y3Rpb25EYXRhQXJncyA9IHsgIH07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRKb2luUXVldWVJbnN0cnVjdGlvbkRhdGFFbmNvZGVyKCk6IEZpeGVkU2l6ZUVuY29kZXI8Sm9pblF1ZXVlSW5zdHJ1Y3Rpb25EYXRhQXJncz4ge1xuICAgIHJldHVybiB0cmFuc2Zvcm1FbmNvZGVyKGdldFN0cnVjdEVuY29kZXIoW1snZGlzY3JpbWluYXRvcicsIGZpeEVuY29kZXJTaXplKGdldEJ5dGVzRW5jb2RlcigpLCA4KV1dKSwgKHZhbHVlKSA9PiAoeyAuLi52YWx1ZSwgZGlzY3JpbWluYXRvcjogSk9JTl9RVUVVRV9ESVNDUklNSU5BVE9SIH0pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEpvaW5RdWV1ZUluc3RydWN0aW9uRGF0YURlY29kZXIoKTogRml4ZWRTaXplRGVjb2RlcjxKb2luUXVldWVJbnN0cnVjdGlvbkRhdGE+IHtcbiAgICByZXR1cm4gZ2V0U3RydWN0RGVjb2RlcihbWydkaXNjcmltaW5hdG9yJywgZml4RGVjb2RlclNpemUoZ2V0Qnl0ZXNEZWNvZGVyKCksIDgpXV0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Sm9pblF1ZXVlSW5zdHJ1Y3Rpb25EYXRhQ29kZWMoKTogRml4ZWRTaXplQ29kZWM8Sm9pblF1ZXVlSW5zdHJ1Y3Rpb25EYXRhQXJncywgSm9pblF1ZXVlSW5zdHJ1Y3Rpb25EYXRhPiB7XG4gICAgcmV0dXJuIGNvbWJpbmVDb2RlYyhnZXRKb2luUXVldWVJbnN0cnVjdGlvbkRhdGFFbmNvZGVyKCksIGdldEpvaW5RdWV1ZUluc3RydWN0aW9uRGF0YURlY29kZXIoKSk7XG59XG5cbmV4cG9ydCB0eXBlIEpvaW5RdWV1ZUFzeW5jSW5wdXQ8VEFjY291bnRRdWV1ZSBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnRUZW5hbnQgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50UGxheWVyRGF0YSBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnRQbGF5ZXJUaWNrZXQgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRBY2NvdW50U2lnbmVyIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiA9ICB7XG4gIHF1ZXVlOiBBZGRyZXNzPFRBY2NvdW50UXVldWU+O1xudGVuYW50OiBBZGRyZXNzPFRBY2NvdW50VGVuYW50PjtcbnBsYXllckRhdGE6IEFkZHJlc3M8VEFjY291bnRQbGF5ZXJEYXRhPjtcbnBsYXllclRpY2tldD86IEFkZHJlc3M8VEFjY291bnRQbGF5ZXJUaWNrZXQ+O1xuc2lnbmVyOiBUcmFuc2FjdGlvblNpZ25lcjxUQWNjb3VudFNpZ25lcj47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRKb2luUXVldWVJbnN0cnVjdGlvbkFzeW5jPFRBY2NvdW50UXVldWUgZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50VGVuYW50IGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudFBsYXllckRhdGEgZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50UGxheWVyVGlja2V0IGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudFNpZ25lciBleHRlbmRzIHN0cmluZywgVFByb2dyYW1BZGRyZXNzIGV4dGVuZHMgQWRkcmVzcyA9IHR5cGVvZiBEVUVMX1BST0dSQU1fQUREUkVTUz4oaW5wdXQ6IEpvaW5RdWV1ZUFzeW5jSW5wdXQ8VEFjY291bnRRdWV1ZSwgVEFjY291bnRUZW5hbnQsIFRBY2NvdW50UGxheWVyRGF0YSwgVEFjY291bnRQbGF5ZXJUaWNrZXQsIFRBY2NvdW50U2lnbmVyPiwgY29uZmlnPzogeyBwcm9ncmFtQWRkcmVzcz86IFRQcm9ncmFtQWRkcmVzcyB9ICk6IFByb21pc2U8Sm9pblF1ZXVlSW5zdHJ1Y3Rpb248VFByb2dyYW1BZGRyZXNzLCBUQWNjb3VudFF1ZXVlLCBUQWNjb3VudFRlbmFudCwgVEFjY291bnRQbGF5ZXJEYXRhLCBUQWNjb3VudFBsYXllclRpY2tldCwgVEFjY291bnRTaWduZXI+PiB7XG4gIC8vIFByb2dyYW0gYWRkcmVzcy5cbmNvbnN0IHByb2dyYW1BZGRyZXNzID0gY29uZmlnPy5wcm9ncmFtQWRkcmVzcyA/PyBEVUVMX1BST0dSQU1fQUREUkVTUztcblxuIC8vIE9yaWdpbmFsIGFjY291bnRzLlxuY29uc3Qgb3JpZ2luYWxBY2NvdW50cyA9IHsgcXVldWU6IHsgdmFsdWU6IGlucHV0LnF1ZXVlID8/IG51bGwsIGlzV3JpdGFibGU6IHRydWUgfSwgdGVuYW50OiB7IHZhbHVlOiBpbnB1dC50ZW5hbnQgPz8gbnVsbCwgaXNXcml0YWJsZTogZmFsc2UgfSwgcGxheWVyRGF0YTogeyB2YWx1ZTogaW5wdXQucGxheWVyRGF0YSA/PyBudWxsLCBpc1dyaXRhYmxlOiBmYWxzZSB9LCBwbGF5ZXJUaWNrZXQ6IHsgdmFsdWU6IGlucHV0LnBsYXllclRpY2tldCA/PyBudWxsLCBpc1dyaXRhYmxlOiB0cnVlIH0sIHNpZ25lcjogeyB2YWx1ZTogaW5wdXQuc2lnbmVyID8/IG51bGwsIGlzV3JpdGFibGU6IGZhbHNlIH0gfVxuY29uc3QgYWNjb3VudHMgPSBvcmlnaW5hbEFjY291bnRzIGFzIFJlY29yZDxrZXlvZiB0eXBlb2Ygb3JpZ2luYWxBY2NvdW50cywgUmVzb2x2ZWRJbnN0cnVjdGlvbkFjY291bnQ+O1xuXG5cbi8vIFJlc29sdmUgZGVmYXVsdCB2YWx1ZXMuXG5pZiAoIWFjY291bnRzLnBsYXllclRpY2tldC52YWx1ZSkge1xuYWNjb3VudHMucGxheWVyVGlja2V0LnZhbHVlID0gYXdhaXQgZ2V0UHJvZ3JhbURlcml2ZWRBZGRyZXNzKHsgcHJvZ3JhbUFkZHJlc3MsIHNlZWRzOiBbZ2V0Qnl0ZXNFbmNvZGVyKCkuZW5jb2RlKG5ldyBVaW50OEFycmF5KFsxMTYsIDEwNSwgOTksIDEwNywgMTAxLCAxMTZdKSksIGdldEFkZHJlc3NFbmNvZGVyKCkuZW5jb2RlKGdldEFkZHJlc3NGcm9tUmVzb2x2ZWRJbnN0cnVjdGlvbkFjY291bnQoXCJzaWduZXJcIiwgYWNjb3VudHMuc2lnbmVyLnZhbHVlKSksIGdldEFkZHJlc3NFbmNvZGVyKCkuZW5jb2RlKGdldEFkZHJlc3NGcm9tUmVzb2x2ZWRJbnN0cnVjdGlvbkFjY291bnQoXCJ0ZW5hbnRcIiwgYWNjb3VudHMudGVuYW50LnZhbHVlKSldIH0pO1xufVxuXG5jb25zdCBnZXRBY2NvdW50TWV0YSA9IGdldEFjY291bnRNZXRhRmFjdG9yeShwcm9ncmFtQWRkcmVzcywgJ3Byb2dyYW1JZCcpO1xucmV0dXJuIE9iamVjdC5mcmVlemUoeyBhY2NvdW50czogW2dldEFjY291bnRNZXRhKFwicXVldWVcIiwgYWNjb3VudHMucXVldWUpLCBnZXRBY2NvdW50TWV0YShcInRlbmFudFwiLCBhY2NvdW50cy50ZW5hbnQpLCBnZXRBY2NvdW50TWV0YShcInBsYXllckRhdGFcIiwgYWNjb3VudHMucGxheWVyRGF0YSksIGdldEFjY291bnRNZXRhKFwicGxheWVyVGlja2V0XCIsIGFjY291bnRzLnBsYXllclRpY2tldCksIGdldEFjY291bnRNZXRhKFwic2lnbmVyXCIsIGFjY291bnRzLnNpZ25lcildLCBkYXRhOiBnZXRKb2luUXVldWVJbnN0cnVjdGlvbkRhdGFFbmNvZGVyKCkuZW5jb2RlKHt9KSwgcHJvZ3JhbUFkZHJlc3MgfSBhcyBKb2luUXVldWVJbnN0cnVjdGlvbjxUUHJvZ3JhbUFkZHJlc3MsIFRBY2NvdW50UXVldWUsIFRBY2NvdW50VGVuYW50LCBUQWNjb3VudFBsYXllckRhdGEsIFRBY2NvdW50UGxheWVyVGlja2V0LCBUQWNjb3VudFNpZ25lcj4pO1xufVxuXG5leHBvcnQgdHlwZSBKb2luUXVldWVJbnB1dDxUQWNjb3VudFF1ZXVlIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQWNjb3VudFRlbmFudCBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnRQbGF5ZXJEYXRhIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQWNjb3VudFBsYXllclRpY2tldCBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEFjY291bnRTaWduZXIgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+ID0gIHtcbiAgcXVldWU6IEFkZHJlc3M8VEFjY291bnRRdWV1ZT47XG50ZW5hbnQ6IEFkZHJlc3M8VEFjY291bnRUZW5hbnQ+O1xucGxheWVyRGF0YTogQWRkcmVzczxUQWNjb3VudFBsYXllckRhdGE+O1xucGxheWVyVGlja2V0OiBBZGRyZXNzPFRBY2NvdW50UGxheWVyVGlja2V0PjtcbnNpZ25lcjogVHJhbnNhY3Rpb25TaWduZXI8VEFjY291bnRTaWduZXI+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Sm9pblF1ZXVlSW5zdHJ1Y3Rpb248VEFjY291bnRRdWV1ZSBleHRlbmRzIHN0cmluZywgVEFjY291bnRUZW5hbnQgZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50UGxheWVyRGF0YSBleHRlbmRzIHN0cmluZywgVEFjY291bnRQbGF5ZXJUaWNrZXQgZXh0ZW5kcyBzdHJpbmcsIFRBY2NvdW50U2lnbmVyIGV4dGVuZHMgc3RyaW5nLCBUUHJvZ3JhbUFkZHJlc3MgZXh0ZW5kcyBBZGRyZXNzID0gdHlwZW9mIERVRUxfUFJPR1JBTV9BRERSRVNTPihpbnB1dDogSm9pblF1ZXVlSW5wdXQ8VEFjY291bnRRdWV1ZSwgVEFjY291bnRUZW5hbnQsIFRBY2NvdW50UGxheWVyRGF0YSwgVEFjY291bnRQbGF5ZXJUaWNrZXQsIFRBY2NvdW50U2lnbmVyPiwgY29uZmlnPzogeyBwcm9ncmFtQWRkcmVzcz86IFRQcm9ncmFtQWRkcmVzcyB9ICk6IEpvaW5RdWV1ZUluc3RydWN0aW9uPFRQcm9ncmFtQWRkcmVzcywgVEFjY291bnRRdWV1ZSwgVEFjY291bnRUZW5hbnQsIFRBY2NvdW50UGxheWVyRGF0YSwgVEFjY291bnRQbGF5ZXJUaWNrZXQsIFRBY2NvdW50U2lnbmVyPiB7XG4gIC8vIFByb2dyYW0gYWRkcmVzcy5cbmNvbnN0IHByb2dyYW1BZGRyZXNzID0gY29uZmlnPy5wcm9ncmFtQWRkcmVzcyA/PyBEVUVMX1BST0dSQU1fQUREUkVTUztcblxuIC8vIE9yaWdpbmFsIGFjY291bnRzLlxuY29uc3Qgb3JpZ2luYWxBY2NvdW50cyA9IHsgcXVldWU6IHsgdmFsdWU6IGlucHV0LnF1ZXVlID8/IG51bGwsIGlzV3JpdGFibGU6IHRydWUgfSwgdGVuYW50OiB7IHZhbHVlOiBpbnB1dC50ZW5hbnQgPz8gbnVsbCwgaXNXcml0YWJsZTogZmFsc2UgfSwgcGxheWVyRGF0YTogeyB2YWx1ZTogaW5wdXQucGxheWVyRGF0YSA/PyBudWxsLCBpc1dyaXRhYmxlOiBmYWxzZSB9LCBwbGF5ZXJUaWNrZXQ6IHsgdmFsdWU6IGlucHV0LnBsYXllclRpY2tldCA/PyBudWxsLCBpc1dyaXRhYmxlOiB0cnVlIH0sIHNpZ25lcjogeyB2YWx1ZTogaW5wdXQuc2lnbmVyID8/IG51bGwsIGlzV3JpdGFibGU6IGZhbHNlIH0gfVxuY29uc3QgYWNjb3VudHMgPSBvcmlnaW5hbEFjY291bnRzIGFzIFJlY29yZDxrZXlvZiB0eXBlb2Ygb3JpZ2luYWxBY2NvdW50cywgUmVzb2x2ZWRJbnN0cnVjdGlvbkFjY291bnQ+O1xuXG5cblxuXG5jb25zdCBnZXRBY2NvdW50TWV0YSA9IGdldEFjY291bnRNZXRhRmFjdG9yeShwcm9ncmFtQWRkcmVzcywgJ3Byb2dyYW1JZCcpO1xucmV0dXJuIE9iamVjdC5mcmVlemUoeyBhY2NvdW50czogW2dldEFjY291bnRNZXRhKFwicXVldWVcIiwgYWNjb3VudHMucXVldWUpLCBnZXRBY2NvdW50TWV0YShcInRlbmFudFwiLCBhY2NvdW50cy50ZW5hbnQpLCBnZXRBY2NvdW50TWV0YShcInBsYXllckRhdGFcIiwgYWNjb3VudHMucGxheWVyRGF0YSksIGdldEFjY291bnRNZXRhKFwicGxheWVyVGlja2V0XCIsIGFjY291bnRzLnBsYXllclRpY2tldCksIGdldEFjY291bnRNZXRhKFwic2lnbmVyXCIsIGFjY291bnRzLnNpZ25lcildLCBkYXRhOiBnZXRKb2luUXVldWVJbnN0cnVjdGlvbkRhdGFFbmNvZGVyKCkuZW5jb2RlKHt9KSwgcHJvZ3JhbUFkZHJlc3MgfSBhcyBKb2luUXVldWVJbnN0cnVjdGlvbjxUUHJvZ3JhbUFkZHJlc3MsIFRBY2NvdW50UXVldWUsIFRBY2NvdW50VGVuYW50LCBUQWNjb3VudFBsYXllckRhdGEsIFRBY2NvdW50UGxheWVyVGlja2V0LCBUQWNjb3VudFNpZ25lcj4pO1xufVxuXG5leHBvcnQgdHlwZSBQYXJzZWRKb2luUXVldWVJbnN0cnVjdGlvbjxUUHJvZ3JhbSBleHRlbmRzIHN0cmluZyA9IHR5cGVvZiBEVUVMX1BST0dSQU1fQUREUkVTUywgVEFjY291bnRNZXRhcyBleHRlbmRzIHJlYWRvbmx5IEFjY291bnRNZXRhW10gPSByZWFkb25seSBBY2NvdW50TWV0YVtdPiA9IHsgcHJvZ3JhbUFkZHJlc3M6IEFkZHJlc3M8VFByb2dyYW0+O1xuYWNjb3VudHM6IHtcbnF1ZXVlOiBUQWNjb3VudE1ldGFzWzBdO1xudGVuYW50OiBUQWNjb3VudE1ldGFzWzFdO1xucGxheWVyRGF0YTogVEFjY291bnRNZXRhc1syXTtcbnBsYXllclRpY2tldDogVEFjY291bnRNZXRhc1szXTtcbnNpZ25lcjogVEFjY291bnRNZXRhc1s0XTtcbn07XG5kYXRhOiBKb2luUXVldWVJbnN0cnVjdGlvbkRhdGE7IH07XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUpvaW5RdWV1ZUluc3RydWN0aW9uPFRQcm9ncmFtIGV4dGVuZHMgc3RyaW5nLCBUQWNjb3VudE1ldGFzIGV4dGVuZHMgcmVhZG9ubHkgQWNjb3VudE1ldGFbXT4oaW5zdHJ1Y3Rpb246IEluc3RydWN0aW9uPFRQcm9ncmFtPiAmIEluc3RydWN0aW9uV2l0aEFjY291bnRzPFRBY2NvdW50TWV0YXM+ICYgSW5zdHJ1Y3Rpb25XaXRoRGF0YTxSZWFkb25seVVpbnQ4QXJyYXk+KTogUGFyc2VkSm9pblF1ZXVlSW5zdHJ1Y3Rpb248VFByb2dyYW0sIFRBY2NvdW50TWV0YXM+IHtcbiAgaWYgKGluc3RydWN0aW9uLmFjY291bnRzLmxlbmd0aCA8IDUpIHtcbiAgdGhyb3cgbmV3IFNvbGFuYUVycm9yKFNPTEFOQV9FUlJPUl9fUFJPR1JBTV9DTElFTlRTX19JTlNVRkZJQ0lFTlRfQUNDT1VOVF9NRVRBUywgeyBhY3R1YWxBY2NvdW50TWV0YXM6IGluc3RydWN0aW9uLmFjY291bnRzLmxlbmd0aCwgZXhwZWN0ZWRBY2NvdW50TWV0YXM6IDUgfSk7XG59XG5sZXQgYWNjb3VudEluZGV4ID0gMDtcbmNvbnN0IGdldE5leHRBY2NvdW50ID0gKCkgPT4ge1xuICBjb25zdCBhY2NvdW50TWV0YSA9IChpbnN0cnVjdGlvbi5hY2NvdW50cyBhcyBUQWNjb3VudE1ldGFzKVthY2NvdW50SW5kZXhdITtcbiAgYWNjb3VudEluZGV4ICs9IDE7XG4gIHJldHVybiBhY2NvdW50TWV0YTtcbn1cbiAgcmV0dXJuIHsgcHJvZ3JhbUFkZHJlc3M6IGluc3RydWN0aW9uLnByb2dyYW1BZGRyZXNzLCBhY2NvdW50czogeyBxdWV1ZTogZ2V0TmV4dEFjY291bnQoKSwgdGVuYW50OiBnZXROZXh0QWNjb3VudCgpLCBwbGF5ZXJEYXRhOiBnZXROZXh0QWNjb3VudCgpLCBwbGF5ZXJUaWNrZXQ6IGdldE5leHRBY2NvdW50KCksIHNpZ25lcjogZ2V0TmV4dEFjY291bnQoKSB9LCBkYXRhOiBnZXRKb2luUXVldWVJbnN0cnVjdGlvbkRhdGFEZWNvZGVyKCkuZGVjb2RlKGluc3RydWN0aW9uLmRhdGEpIH07XG59Il19
|