@serve.zone/dcrouter 17.2.4 → 17.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/deno.json +1 -1
  2. package/dist_serve/bundle.js +2024 -1758
  3. package/dist_ts/00_commitinfo_data.js +1 -1
  4. package/dist_ts/classes.dcrouter.d.ts +11 -1
  5. package/dist_ts/classes.dcrouter.js +63 -3
  6. package/dist_ts/config/classes.api-token-manager.d.ts +20 -2
  7. package/dist_ts/config/classes.api-token-manager.js +201 -6
  8. package/dist_ts/config/classes.gateway-client-manager.d.ts +36 -2
  9. package/dist_ts/config/classes.gateway-client-manager.js +391 -27
  10. package/dist_ts/db/documents/classes.api-token.doc.d.ts +2 -1
  11. package/dist_ts/db/documents/classes.api-token.doc.js +8 -2
  12. package/dist_ts/db/documents/classes.cached.email.d.ts +10 -1
  13. package/dist_ts/db/documents/classes.cached.email.js +27 -2
  14. package/dist_ts/db/documents/classes.gateway-client.doc.d.ts +25 -0
  15. package/dist_ts/db/documents/classes.gateway-client.doc.js +73 -2
  16. package/dist_ts/db/documents/classes.ops-config-event.doc.d.ts +55 -0
  17. package/dist_ts/db/documents/classes.ops-config-event.doc.js +296 -0
  18. package/dist_ts/db/documents/index.d.ts +1 -0
  19. package/dist_ts/db/documents/index.js +2 -1
  20. package/dist_ts/dns/classes.gateway-route-dns-reconciler.d.ts +52 -0
  21. package/dist_ts/dns/classes.gateway-route-dns-reconciler.js +609 -0
  22. package/dist_ts/dns/index.d.ts +1 -0
  23. package/dist_ts/dns/index.js +2 -1
  24. package/dist_ts/dns/manager.dns.d.ts +19 -0
  25. package/dist_ts/dns/manager.dns.js +25 -1
  26. package/dist_ts/email/classes.accepted-email-spool.d.ts +8 -1
  27. package/dist_ts/email/classes.accepted-email-spool.js +93 -1
  28. package/dist_ts/email/classes.smartmta-storage-manager.d.ts +7 -1
  29. package/dist_ts/email/classes.smartmta-storage-manager.js +46 -1
  30. package/dist_ts/email/smartmta-storage-policy.js +3 -1
  31. package/dist_ts/monitoring/classes.ops-event-manager.d.ts +32 -0
  32. package/dist_ts/monitoring/classes.ops-event-manager.js +71 -0
  33. package/dist_ts/monitoring/index.d.ts +1 -0
  34. package/dist_ts/monitoring/index.js +2 -1
  35. package/dist_ts/opsserver/classes.opsserver.d.ts +1 -0
  36. package/dist_ts/opsserver/classes.opsserver.js +3 -1
  37. package/dist_ts/opsserver/handlers/certificate.handler.d.ts +1 -0
  38. package/dist_ts/opsserver/handlers/certificate.handler.js +35 -5
  39. package/dist_ts/opsserver/handlers/config-event.handler.d.ts +12 -0
  40. package/dist_ts/opsserver/handlers/config-event.handler.js +47 -0
  41. package/dist_ts/opsserver/handlers/dns-record.handler.d.ts +1 -0
  42. package/dist_ts/opsserver/handlers/dns-record.handler.js +82 -3
  43. package/dist_ts/opsserver/handlers/email-ops.handler.d.ts +6 -0
  44. package/dist_ts/opsserver/handlers/email-ops.handler.js +40 -9
  45. package/dist_ts/opsserver/handlers/gatewayclient.handler.d.ts +9 -1
  46. package/dist_ts/opsserver/handlers/gatewayclient.handler.js +714 -162
  47. package/dist_ts/opsserver/handlers/index.d.ts +1 -0
  48. package/dist_ts/opsserver/handlers/index.js +2 -1
  49. package/dist_ts/opsserver/helpers/gateway-client-auth.d.ts +25 -0
  50. package/dist_ts/opsserver/helpers/gateway-client-auth.js +168 -0
  51. package/dist_ts/plugins.d.ts +2 -1
  52. package/dist_ts/plugins.js +3 -2
  53. package/dist_ts_apiclient/classes.gatewayclient.d.ts +13 -1
  54. package/dist_ts_apiclient/classes.gatewayclient.js +18 -2
  55. package/dist_ts_interfaces/data/config-events.d.ts +34 -0
  56. package/dist_ts_interfaces/data/config-events.js +8 -0
  57. package/dist_ts_interfaces/data/index.d.ts +1 -0
  58. package/dist_ts_interfaces/data/index.js +2 -1
  59. package/dist_ts_interfaces/data/route-management.d.ts +28 -1
  60. package/dist_ts_interfaces/data/route-management.js +3 -1
  61. package/dist_ts_interfaces/data/workhoster.d.ts +1 -0
  62. package/dist_ts_interfaces/requests/config-events.d.ts +35 -0
  63. package/dist_ts_interfaces/requests/config-events.js +4 -0
  64. package/dist_ts_interfaces/requests/index.d.ts +1 -0
  65. package/dist_ts_interfaces/requests/index.js +2 -1
  66. package/dist_ts_interfaces/requests/realtime.d.ts +1 -1
  67. package/dist_ts_interfaces/requests/realtime.js +2 -1
  68. package/dist_ts_migrations/index.js +148 -9
  69. package/dist_ts_web/00_commitinfo_data.js +1 -1
  70. package/dist_ts_web/appstate/config-events.d.ts +19 -0
  71. package/dist_ts_web/appstate/config-events.js +68 -0
  72. package/dist_ts_web/appstate/runtime.js +7 -1
  73. package/dist_ts_web/appstate.d.ts +1 -0
  74. package/dist_ts_web/appstate.js +2 -1
  75. package/dist_ts_web/elements/ops-platform-events.d.ts +21 -0
  76. package/dist_ts_web/elements/ops-platform-events.js +361 -0
  77. package/dist_ts_web/elements/ops-view-logs.d.ts +4 -0
  78. package/dist_ts_web/elements/ops-view-logs.js +96 -9
  79. package/package.json +4 -4
  80. package/readme.plan.md +22 -0
  81. package/ts/00_commitinfo_data.ts +1 -1
  82. package/ts/classes.dcrouter.ts +72 -2
  83. package/ts/config/classes.api-token-manager.ts +237 -4
  84. package/ts/config/classes.gateway-client-manager.ts +463 -19
  85. package/ts/db/documents/classes.api-token.doc.ts +8 -1
  86. package/ts/db/documents/classes.cached.email.ts +21 -1
  87. package/ts/db/documents/classes.gateway-client.doc.ts +86 -0
  88. package/ts/db/documents/classes.ops-config-event.doc.ts +257 -0
  89. package/ts/db/documents/index.ts +1 -0
  90. package/ts/dns/classes.gateway-route-dns-reconciler.ts +801 -0
  91. package/ts/dns/index.ts +1 -0
  92. package/ts/dns/manager.dns.ts +36 -0
  93. package/ts/email/classes.accepted-email-spool.ts +111 -0
  94. package/ts/email/classes.smartmta-storage-manager.ts +57 -1
  95. package/ts/email/smartmta-storage-policy.ts +2 -0
  96. package/ts/monitoring/classes.ops-event-manager.ts +99 -0
  97. package/ts/monitoring/index.ts +2 -1
  98. package/ts/opsserver/classes.opsserver.ts +2 -0
  99. package/ts/opsserver/handlers/certificate.handler.ts +51 -4
  100. package/ts/opsserver/handlers/config-event.handler.ts +62 -0
  101. package/ts/opsserver/handlers/dns-record.handler.ts +101 -2
  102. package/ts/opsserver/handlers/email-ops.handler.ts +42 -8
  103. package/ts/opsserver/handlers/gatewayclient.handler.ts +804 -136
  104. package/ts/opsserver/handlers/index.ts +1 -0
  105. package/ts/opsserver/helpers/gateway-client-auth.ts +198 -0
  106. package/ts/plugins.ts +2 -0
  107. package/ts_apiclient/classes.gatewayclient.ts +45 -0
  108. package/ts_web/00_commitinfo_data.ts +1 -1
  109. package/ts_web/appstate/config-events.ts +98 -0
  110. package/ts_web/appstate/runtime.ts +8 -1
  111. package/ts_web/appstate.ts +1 -0
  112. package/ts_web/elements/ops-platform-events.ts +315 -0
  113. package/ts_web/elements/ops-view-logs.ts +84 -7
@@ -1,20 +1,20 @@
1
1
  import * as plugins from '../../plugins.js';
2
2
  import * as interfaces from '../../../dist_ts_interfaces/index.js';
3
3
  import { requireOpsAuth } from '../helpers/auth.js';
4
+ import { CachedEmail } from '../../db/index.js';
5
+ import { getGatewayCredentialState, matchesGatewayHostnamePatterns, normalizeGatewayHostname, normalizeGatewayTargetHost, requireGatewayMachineAuth, } from '../helpers/gateway-client-auth.js';
4
6
  export class GatewayClientHandler {
5
7
  opsServerRef;
6
8
  typedrouter = new plugins.typedrequest.TypedRouter();
9
+ routeSyncChains = new Map();
10
+ gatewayClientCredentialChains = new Map();
7
11
  constructor(opsServerRef) {
8
12
  this.opsServerRef = opsServerRef;
9
13
  this.opsServerRef.typedrouter.addTypedRouter(this.typedrouter);
10
14
  this.registerHandlers();
11
15
  }
12
- async requireAuth(request, requiredScope) {
13
- const auth = await requireOpsAuth(this.opsServerRef, request, {
14
- scope: requiredScope,
15
- requireAdminIdentity: requiredScope?.endsWith(':write'),
16
- });
17
- return { userId: auth.userId, isAdmin: auth.isAdmin, token: auth.token };
16
+ async requireAuth(request, requiredScope, options = {}) {
17
+ return await requireGatewayMachineAuth(this.opsServerRef, request, requiredScope === 'gateway-clients:write' ? 'gateway-clients:write' : 'gateway-clients:read', options);
18
18
  }
19
19
  async requireAdmin(request, scope = 'gateway-clients:write') {
20
20
  const auth = await requireOpsAuth(this.opsServerRef, request, {
@@ -29,8 +29,104 @@ export class GatewayClientHandler {
29
29
  await this.requireAuth(dataArg, 'gateway-clients:read');
30
30
  return { capabilities: this.getGatewayCapabilities() };
31
31
  }));
32
+ this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('provisionGatewayClientCredential', async (dataArg) => {
33
+ try {
34
+ const userId = await this.requireAdmin(dataArg, 'tokens:manage');
35
+ const clientManager = this.opsServerRef.dcRouterRef.gatewayClientManager;
36
+ const tokenManager = this.opsServerRef.dcRouterRef.apiTokenManager;
37
+ if (!clientManager || !tokenManager) {
38
+ return { success: false, message: 'Gateway client or token management not initialized' };
39
+ }
40
+ const lockKey = this.normalizeGatewayClientLockKey(dataArg.provisioning.id);
41
+ return await this.withGatewayClientCredentialLock(lockKey, async () => {
42
+ if (dataArg.provisioning.enabled === false) {
43
+ return { success: false, message: 'Cannot provision a credential for a disabled gateway client' };
44
+ }
45
+ const provisioned = await clientManager.stageClientProvisioning(dataArg.provisioning, userId);
46
+ if (!provisioned.gatewayClient.enabled) {
47
+ return { success: false, message: 'Cannot provision a credential for a disabled gateway client' };
48
+ }
49
+ const policy = this.buildGatewayClientTokenPolicy(provisioned.gatewayClient);
50
+ const issuedAt = Date.now();
51
+ const credential = await tokenManager.createProvisionedGatewayCredentialCandidate(dataArg.credentialName?.trim() || `${provisioned.gatewayClient.name} Credential`, ['gateway-clients:read', 'gateway-clients:write'], dataArg.expiresInDays ?? null, userId, policy, provisioned.credentialSequence, provisioned.policyDigest);
52
+ return {
53
+ success: true,
54
+ action: provisioned.action,
55
+ gatewayClient: provisioned.gatewayClient,
56
+ credential: {
57
+ tokenId: credential.id,
58
+ tokenValue: credential.rawToken,
59
+ issuedAt,
60
+ state: 'candidate',
61
+ finalizationRequired: true,
62
+ },
63
+ };
64
+ });
65
+ }
66
+ catch (error) {
67
+ return { success: false, message: error.message };
68
+ }
69
+ }));
70
+ this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('finalizeGatewayClientCredential', async (dataArg) => {
71
+ try {
72
+ if ('identity' in dataArg) {
73
+ return { success: false, message: 'Identity authentication cannot finalize gateway credentials' };
74
+ }
75
+ const tokenManager = this.opsServerRef.dcRouterRef.apiTokenManager;
76
+ const clientManager = this.opsServerRef.dcRouterRef.gatewayClientManager;
77
+ if (!tokenManager || !clientManager) {
78
+ return { success: false, message: 'Gateway client or token management not initialized' };
79
+ }
80
+ const initialToken = await tokenManager.validateToken(dataArg.apiToken);
81
+ if (!initialToken) {
82
+ return { success: false, message: 'Candidate gateway credential is invalid or revoked' };
83
+ }
84
+ const gatewayClientId = this.requireFinalizableGatewayCredential(initialToken, dataArg.tokenId);
85
+ return await this.withGatewayClientCredentialLock(gatewayClientId, async () => {
86
+ const lockedToken = await tokenManager.validateToken(dataArg.apiToken);
87
+ if (!lockedToken) {
88
+ return { success: false, message: 'Candidate gateway credential is invalid or revoked' };
89
+ }
90
+ const lockedGatewayClientId = this.requireFinalizableGatewayCredential(lockedToken, dataArg.tokenId);
91
+ if (lockedGatewayClientId !== gatewayClientId) {
92
+ return { success: false, message: 'Gateway credential ownership changed during finalization' };
93
+ }
94
+ const lifecycle = lockedToken.gatewayCredentialLifecycle;
95
+ if (lifecycle.cleanupCompletedAt !== null) {
96
+ return {
97
+ success: true,
98
+ gatewayClientId,
99
+ tokenId: dataArg.tokenId,
100
+ revokedCredentialCount: lifecycle.revokedCredentialCount,
101
+ finalizedAt: lifecycle.finalizedAt,
102
+ };
103
+ }
104
+ const tokenBinding = lockedToken.policy.gatewayClient;
105
+ if (lifecycle.state === 'candidate') {
106
+ const stagedClient = await clientManager.getClientForProvisionedCredential(gatewayClientId, tokenBinding.type, lifecycle);
107
+ if (!stagedClient) {
108
+ return { success: false, message: 'Gateway credential policy was superseded before finalization' };
109
+ }
110
+ }
111
+ const activation = await tokenManager.activateProvisionedGatewayCredential(dataArg.tokenId, gatewayClientId);
112
+ await clientManager.promoteProvisionedPolicy(gatewayClientId, tokenBinding.type, activation.lifecycle);
113
+ const revokedCredentialCount = await tokenManager.revokeOlderProvisionedGatewayCredentials(gatewayClientId, activation.lifecycle.sequence, dataArg.tokenId);
114
+ const completed = await tokenManager.completeProvisionedGatewayCredentialHandover(dataArg.tokenId, gatewayClientId, revokedCredentialCount);
115
+ return {
116
+ success: true,
117
+ gatewayClientId,
118
+ tokenId: dataArg.tokenId,
119
+ revokedCredentialCount: completed.revokedCredentialCount,
120
+ finalizedAt: completed.finalizedAt,
121
+ };
122
+ });
123
+ }
124
+ catch (error) {
125
+ return { success: false, message: error.message };
126
+ }
127
+ }));
32
128
  this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('getGatewayClientContext', async (dataArg) => {
33
- const auth = await this.requireAuth(dataArg, 'gateway-clients:read');
129
+ const auth = await this.requireAuth(dataArg, 'gateway-clients:read', { allowCandidate: true });
34
130
  return {
35
131
  context: this.getGatewayClientContext(auth),
36
132
  capabilities: this.getGatewayCapabilities(),
@@ -46,17 +142,22 @@ export class GatewayClientHandler {
46
142
  if (!manager)
47
143
  return { success: false, message: 'Gateway client management not initialized' };
48
144
  try {
49
- const gatewayClient = await manager.createClient({
50
- id: dataArg.id,
51
- type: dataArg.type,
52
- name: dataArg.name,
53
- description: dataArg.description,
54
- hostnamePatterns: dataArg.hostnamePatterns,
55
- allowedRouteTargets: dataArg.allowedRouteTargets,
56
- capabilities: dataArg.capabilities,
57
- createdBy: userId,
58
- });
59
- return { success: true, gatewayClient };
145
+ const create = async () => {
146
+ const gatewayClient = await manager.createClient({
147
+ id: dataArg.id,
148
+ type: dataArg.type,
149
+ name: dataArg.name,
150
+ description: dataArg.description,
151
+ hostnamePatterns: dataArg.hostnamePatterns,
152
+ allowedRouteTargets: dataArg.allowedRouteTargets,
153
+ capabilities: dataArg.capabilities,
154
+ createdBy: userId,
155
+ });
156
+ return { success: true, gatewayClient };
157
+ };
158
+ return dataArg.id
159
+ ? await this.withGatewayClientCredentialLock(this.normalizeGatewayClientLockKey(dataArg.id), create)
160
+ : await create();
60
161
  }
61
162
  catch (error) {
62
163
  return { success: false, message: error.message };
@@ -67,45 +168,69 @@ export class GatewayClientHandler {
67
168
  const manager = this.opsServerRef.dcRouterRef.gatewayClientManager;
68
169
  if (!manager)
69
170
  return { success: false, message: 'Gateway client management not initialized' };
70
- const gatewayClient = await manager.updateClient(dataArg.id, {
71
- name: dataArg.name,
72
- description: dataArg.description,
73
- hostnamePatterns: dataArg.hostnamePatterns,
74
- allowedRouteTargets: dataArg.allowedRouteTargets,
75
- capabilities: dataArg.capabilities,
76
- enabled: dataArg.enabled,
77
- });
78
- return gatewayClient
79
- ? { success: true, gatewayClient }
80
- : { success: false, message: 'Gateway client not found' };
171
+ try {
172
+ return await this.withGatewayClientCredentialLock(this.normalizeGatewayClientLockKey(dataArg.id), async () => {
173
+ const gatewayClient = await manager.updateClient(dataArg.id, {
174
+ name: dataArg.name,
175
+ description: dataArg.description,
176
+ hostnamePatterns: dataArg.hostnamePatterns,
177
+ allowedRouteTargets: dataArg.allowedRouteTargets,
178
+ capabilities: dataArg.capabilities,
179
+ enabled: dataArg.enabled,
180
+ });
181
+ return gatewayClient
182
+ ? { success: true, gatewayClient }
183
+ : { success: false, message: 'Gateway client not found' };
184
+ });
185
+ }
186
+ catch (error) {
187
+ return { success: false, message: error.message };
188
+ }
81
189
  }));
82
190
  this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('deleteGatewayClient', async (dataArg) => {
83
191
  await this.requireAdmin(dataArg);
84
192
  const manager = this.opsServerRef.dcRouterRef.gatewayClientManager;
85
- if (!manager)
86
- return { success: false, message: 'Gateway client management not initialized' };
87
- const success = await manager.deleteClient(dataArg.id);
88
- return { success, message: success ? undefined : 'Gateway client not found' };
193
+ const tokenManager = this.opsServerRef.dcRouterRef.apiTokenManager;
194
+ if (!manager || !tokenManager)
195
+ return { success: false, message: 'Gateway client or token management not initialized' };
196
+ try {
197
+ return await this.withGatewayClientCredentialLock(this.normalizeGatewayClientLockKey(dataArg.id), async () => {
198
+ const existing = await manager.getClient(dataArg.id);
199
+ if (!existing)
200
+ return { success: false, message: 'Gateway client not found' };
201
+ await tokenManager.revokeGatewayClientCredentials(dataArg.id);
202
+ const success = await manager.deleteClient(dataArg.id);
203
+ return {
204
+ success,
205
+ message: success
206
+ ? undefined
207
+ : 'Gateway client changed during credential cleanup; retry deletion',
208
+ };
209
+ });
210
+ }
211
+ catch (error) {
212
+ return { success: false, message: error.message };
213
+ }
89
214
  }));
90
215
  this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('createGatewayClientToken', async (dataArg) => {
91
216
  const userId = await this.requireAdmin(dataArg, 'tokens:manage');
92
- const gatewayClient = await this.opsServerRef.dcRouterRef.gatewayClientManager?.getClient(dataArg.gatewayClientId);
217
+ const manager = this.opsServerRef.dcRouterRef.gatewayClientManager;
93
218
  const tokenManager = this.opsServerRef.dcRouterRef.apiTokenManager;
94
- if (!gatewayClient || !gatewayClient.enabled) {
95
- return { success: false, message: 'Gateway client not found or disabled' };
96
- }
97
- if (!tokenManager) {
98
- return { success: false, message: 'Token management not initialized' };
99
- }
100
- const result = await tokenManager.createToken(dataArg.name?.trim() || `${gatewayClient.name} Token`, ['gateway-clients:read', 'gateway-clients:write'], dataArg.expiresInDays ?? null, userId, {
101
- role: 'gatewayClient',
102
- scopes: ['gateway-clients:read', 'gateway-clients:write'],
103
- gatewayClient: { type: gatewayClient.type, id: gatewayClient.id },
104
- hostnamePatterns: gatewayClient.hostnamePatterns,
105
- allowedRouteTargets: gatewayClient.allowedRouteTargets,
106
- capabilities: gatewayClient.capabilities,
219
+ if (!manager || !tokenManager)
220
+ return { success: false, message: 'Gateway client or token management not initialized' };
221
+ return await this.withGatewayClientCredentialLock(this.normalizeGatewayClientLockKey(dataArg.gatewayClientId), async () => {
222
+ const gatewayClient = await manager.getClient(dataArg.gatewayClientId);
223
+ if (!gatewayClient || !gatewayClient.enabled) {
224
+ return { success: false, message: 'Gateway client not found or disabled' };
225
+ }
226
+ const result = await tokenManager.createToken(dataArg.name?.trim() || `${gatewayClient.name} Token`, ['gateway-clients:read', 'gateway-clients:write'], dataArg.expiresInDays ?? null, userId, this.buildGatewayClientTokenPolicy(gatewayClient));
227
+ return { success: true, tokenId: result.id, tokenValue: result.rawToken };
107
228
  });
108
- return { success: true, tokenId: result.id, tokenValue: result.rawToken };
229
+ }));
230
+ this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('getGatewayClientMailOverview', async (dataArg) => {
231
+ const auth = await this.requireAuth(dataArg, 'gateway-clients:read');
232
+ this.assertCapability(auth, 'readMail');
233
+ return await this.getGatewayClientMailOverview(auth, dataArg.limit);
109
234
  }));
110
235
  this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('getGatewayClientDomains', async (dataArg) => {
111
236
  const auth = await this.requireAuth(dataArg, 'gateway-clients:read');
@@ -119,16 +244,17 @@ export class GatewayClientHandler {
119
244
  }));
120
245
  this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('getGatewayClientRoutes', async (dataArg) => {
121
246
  const auth = await this.requireAuth(dataArg, 'gateway-clients:read');
122
- this.assertCapability(auth, 'readDnsRecords');
247
+ this.assertCapability(auth, 'readRoutes');
123
248
  return { routes: this.listGatewayClientRoutes(auth, dataArg.gatewayClientId) };
124
249
  }));
125
250
  this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('syncGatewayClientRoute', async (dataArg) => {
126
251
  const auth = await this.requireAuth(dataArg, 'gateway-clients:write');
127
252
  this.assertCapability(auth, 'syncRoutes');
128
- return await this.syncGatewayClientRoute(auth, dataArg.ownership, dataArg.route, dataArg.enabled, dataArg.delete, dataArg.sourceProfileRef);
253
+ return await this.syncGatewayClientRoute(auth, dataArg.ownership, dataArg.route, dataArg.enabled, dataArg.delete, dataArg.sourceProfileRef, dataArg.dnsMode);
129
254
  }));
130
255
  this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('listMailAddressBindings', async (dataArg) => {
131
256
  const auth = await this.requireAuth(dataArg.auth || {}, 'gateway-clients:read');
257
+ this.assertCapability(auth, 'readMail');
132
258
  const manager = this.opsServerRef.dcRouterRef.workAppMailManager;
133
259
  if (!manager)
134
260
  return { bindings: [] };
@@ -143,7 +269,7 @@ export class GatewayClientHandler {
143
269
  }));
144
270
  this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('syncMailAddressBinding', async (dataArg) => {
145
271
  const auth = await this.requireAuth(dataArg.auth || {}, 'gateway-clients:write');
146
- this.assertCapability(auth, 'syncRoutes');
272
+ this.assertCapability(auth, 'manageMail');
147
273
  const manager = this.opsServerRef.dcRouterRef.workAppMailManager;
148
274
  if (!manager) {
149
275
  return { success: false, message: 'WorkApp mail manager not initialized' };
@@ -163,12 +289,12 @@ export class GatewayClientHandler {
163
289
  }));
164
290
  this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('deleteMailAddressBinding', async (dataArg) => {
165
291
  const auth = await this.requireAuth(dataArg.auth || {}, 'gateway-clients:write');
166
- this.assertCapability(auth, 'syncRoutes');
292
+ this.assertCapability(auth, 'manageMail');
167
293
  const manager = this.opsServerRef.dcRouterRef.workAppMailManager;
168
294
  if (!manager) {
169
295
  return { success: false, message: 'WorkApp mail manager not initialized' };
170
296
  }
171
- if (auth.token?.policy?.role === 'gatewayClient') {
297
+ if (auth.policy?.role === 'gatewayClient') {
172
298
  const bindings = this.filterMailBindingsAllowed(auth, await manager.listMailAddressBindings({
173
299
  owner: this.resolveMailOwnerFilter(auth),
174
300
  }));
@@ -181,6 +307,7 @@ export class GatewayClientHandler {
181
307
  }));
182
308
  this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('listWorkAppMailBindings', async (dataArg) => {
183
309
  const auth = await this.requireAuth(dataArg.auth || {}, 'gateway-clients:read');
310
+ this.assertCapability(auth, 'readMail');
184
311
  const manager = this.opsServerRef.dcRouterRef.workAppMailManager;
185
312
  if (!manager)
186
313
  return { bindings: [] };
@@ -190,13 +317,13 @@ export class GatewayClientHandler {
190
317
  }));
191
318
  this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('rotateMailCredential', async (dataArg) => {
192
319
  const auth = await this.requireAuth(dataArg.auth || {}, 'gateway-clients:write');
193
- this.assertCapability(auth, 'syncRoutes');
320
+ this.assertCapability(auth, 'manageMail');
194
321
  const manager = this.opsServerRef.dcRouterRef.workAppMailManager;
195
322
  if (!manager) {
196
323
  return { success: false, message: 'WorkApp mail manager not initialized' };
197
324
  }
198
325
  const owner = this.resolveMailOwnerFilter(auth);
199
- if (auth.token?.policy?.role === 'gatewayClient') {
326
+ if (auth.policy?.role === 'gatewayClient') {
200
327
  const credentialId = dataArg.credentialId?.trim();
201
328
  const bindings = this.filterMailBindingsAllowed(auth, await manager.listMailAddressBindings({ owner }));
202
329
  const binding = bindings.find((bindingArg) => bindingArg.outboundIdentityId === credentialId
@@ -226,6 +353,7 @@ export class GatewayClientHandler {
226
353
  return await manager.getMailDeliveryStatusForCredential(mailSubmissionAuth, dataArg.spoolItemId);
227
354
  }
228
355
  const auth = await this.requireAuth(authData, 'gateway-clients:read');
356
+ this.assertCapability(auth, 'readMail');
229
357
  const status = await manager.getMailDeliveryStatus(dataArg.spoolItemId);
230
358
  if (!this.isMailDeliveryStatusAllowed(auth, status)) {
231
359
  return { attempts: [] };
@@ -276,17 +404,104 @@ export class GatewayClientHandler {
276
404
  };
277
405
  }
278
406
  getGatewayClientContext(auth) {
279
- const policy = auth.token?.policy;
280
- const role = auth.isAdmin ? 'admin' : policy?.role || 'operator';
407
+ const policy = auth.policy;
408
+ if (auth.gatewayClient && auth.credentialId) {
409
+ return {
410
+ role: 'gatewayClient',
411
+ credentialState: getGatewayCredentialState(auth.token),
412
+ credentialId: auth.credentialId,
413
+ scopes: auth.token?.scopes || [],
414
+ gatewayClient: {
415
+ type: auth.gatewayClient.type,
416
+ id: auth.gatewayClient.id,
417
+ policyGeneration: auth.gatewayClient.policyGeneration,
418
+ },
419
+ hostnamePatterns: policy?.hostnamePatterns || [],
420
+ allowedRouteTargets: policy?.allowedRouteTargets || [],
421
+ capabilities: policy?.capabilities || {},
422
+ };
423
+ }
281
424
  return {
282
- role,
425
+ role: 'admin',
283
426
  scopes: auth.token?.scopes || ['*'],
284
- gatewayClient: policy?.gatewayClient,
285
- hostnamePatterns: policy?.hostnamePatterns || [],
286
- allowedRouteTargets: policy?.allowedRouteTargets || [],
287
- capabilities: policy?.capabilities || {},
427
+ hostnamePatterns: [],
428
+ allowedRouteTargets: [],
429
+ capabilities: {},
288
430
  };
289
431
  }
432
+ buildGatewayClientTokenPolicy(gatewayClientArg) {
433
+ return {
434
+ role: 'gatewayClient',
435
+ scopes: ['gateway-clients:read', 'gateway-clients:write'],
436
+ gatewayClient: {
437
+ type: gatewayClientArg.type,
438
+ id: gatewayClientArg.id,
439
+ policyGeneration: gatewayClientArg.policyGeneration,
440
+ },
441
+ hostnamePatterns: gatewayClientArg.hostnamePatterns,
442
+ allowedRouteTargets: gatewayClientArg.allowedRouteTargets,
443
+ capabilities: gatewayClientArg.capabilities,
444
+ };
445
+ }
446
+ requireFinalizableGatewayCredential(tokenArg, expectedTokenIdArg) {
447
+ if (tokenArg.id !== expectedTokenIdArg) {
448
+ throw new Error('tokenId does not match the authenticating gateway credential');
449
+ }
450
+ if (tokenArg.policy?.role !== 'gatewayClient' || !tokenArg.policy.gatewayClient?.id) {
451
+ throw new Error('A bound gateway-client credential is required for finalization');
452
+ }
453
+ const lifecycle = tokenArg.gatewayCredentialLifecycle;
454
+ const validCandidate = lifecycle?.source === 'provisioned'
455
+ && lifecycle.state === 'candidate'
456
+ && lifecycle.finalizedAt === null;
457
+ const validActive = lifecycle?.source === 'provisioned'
458
+ && lifecycle.state === 'active'
459
+ && Number.isSafeInteger(lifecycle.finalizedAt)
460
+ && Number(lifecycle.finalizedAt) > 0;
461
+ if (!validCandidate && !validActive) {
462
+ throw new Error('Only provisioned candidate or active gateway credentials can be finalized');
463
+ }
464
+ return this.normalizeGatewayClientLockKey(tokenArg.policy.gatewayClient.id);
465
+ }
466
+ async getGatewayClientMailOverview(auth, limitArg) {
467
+ const manager = this.opsServerRef.dcRouterRef.workAppMailManager;
468
+ if (!manager)
469
+ return { domains: [], emails: [] };
470
+ const owner = this.resolveMailOwnerFilter(auth);
471
+ const bindings = this.filterMailBindingsAllowed(auth, await manager.listMailAddressBindings({ owner }));
472
+ const ownedAddresses = new Set(bindings.map((bindingArg) => bindingArg.address.toLowerCase()));
473
+ const ownedDomains = Array.from(new Set(bindings.map((bindingArg) => bindingArg.domain)))
474
+ .sort((left, right) => left.localeCompare(right));
475
+ const domains = await Promise.all(ownedDomains.map(async (domainArg) => {
476
+ const configured = await this.opsServerRef.dcRouterRef.emailDomainManager?.getByDomain(domainArg);
477
+ return {
478
+ domain: domainArg,
479
+ dnsMode: configured ? 'managed' : undefined,
480
+ status: configured?.reconciliation?.lifecycleStatus,
481
+ };
482
+ }));
483
+ const limit = Math.min(Math.max(Math.floor(limitArg ?? 100), 1), 500);
484
+ const recent = this.opsServerRef.dcRouterRef.dcRouterDb?.isReady()
485
+ ? await CachedEmail.findRecent(Math.max(limit * 5, 100))
486
+ : [];
487
+ const emails = recent
488
+ .filter((emailArg) => {
489
+ const from = String(emailArg.from || '').trim().toLowerCase();
490
+ const recipients = (emailArg.to || []).map((addressArg) => addressArg.trim().toLowerCase());
491
+ return ownedAddresses.has(from) || recipients.some((addressArg) => ownedAddresses.has(addressArg));
492
+ })
493
+ .slice(0, limit)
494
+ .map((emailArg) => ({
495
+ id: emailArg.id,
496
+ direction: emailArg.direction,
497
+ from: emailArg.from,
498
+ to: emailArg.to?.[0],
499
+ subject: emailArg.subject,
500
+ status: emailArg.status,
501
+ timestamp: emailArg.acceptedAt,
502
+ }));
503
+ return { domains, emails };
504
+ }
290
505
  async listManagedGatewayClients() {
291
506
  const manager = this.opsServerRef.dcRouterRef.gatewayClientManager;
292
507
  if (!manager)
@@ -301,15 +516,16 @@ export class GatewayClientHandler {
301
516
  assertCapability(auth, capability) {
302
517
  if (auth.isAdmin)
303
518
  return;
304
- const policy = auth.token?.policy;
305
- if (!policy || policy.role !== 'gatewayClient')
306
- return;
519
+ const policy = auth.policy;
520
+ if (!policy || policy.role !== 'gatewayClient') {
521
+ throw new plugins.typedrequest.TypedResponseError('gateway-client credential required');
522
+ }
307
523
  if (policy.capabilities?.[capability] === true)
308
524
  return;
309
525
  throw new plugins.typedrequest.TypedResponseError(`token capability missing: ${String(capability)}`);
310
526
  }
311
527
  resolveGatewayClientRouteFilter(auth, requestedId) {
312
- const policy = auth.token?.policy;
528
+ const policy = auth.policy;
313
529
  if (policy?.role !== 'gatewayClient')
314
530
  return { gatewayClientId: requestedId };
315
531
  const policyClient = policy.gatewayClient;
@@ -325,7 +541,7 @@ export class GatewayClientHandler {
325
541
  };
326
542
  }
327
543
  resolveGatewayClientOwnership(auth, ownership) {
328
- const policy = auth.token?.policy;
544
+ const policy = auth.policy;
329
545
  if (!ownership.appId?.trim()) {
330
546
  throw new plugins.typedrequest.TypedResponseError('gateway client ownership is missing appId');
331
547
  }
@@ -346,7 +562,7 @@ export class GatewayClientHandler {
346
562
  gatewayClientType: policy.gatewayClient.type,
347
563
  gatewayClientId: policy.gatewayClient.id,
348
564
  appId: ownership.appId,
349
- hostname: ownership.hostname,
565
+ hostname: ownership.hostname ? normalizeGatewayHostname(ownership.hostname) : undefined,
350
566
  routeRef: ownership.routeRef,
351
567
  };
352
568
  }
@@ -356,7 +572,7 @@ export class GatewayClientHandler {
356
572
  return ownership;
357
573
  }
358
574
  resolveMailOwnerFilter(auth, owner) {
359
- const policy = auth.token?.policy;
575
+ const policy = auth.policy;
360
576
  if (policy?.role !== 'gatewayClient')
361
577
  return owner;
362
578
  if (!policy.gatewayClient) {
@@ -382,29 +598,33 @@ export class GatewayClientHandler {
382
598
  return resolvedOwner;
383
599
  }
384
600
  assertGatewayClientOwnership(auth, ownership) {
385
- const policy = auth.token?.policy;
601
+ const policy = auth.policy;
386
602
  if (!policy || policy.role !== 'gatewayClient')
387
603
  return;
388
604
  if (!ownership.hostname)
389
605
  return;
390
- if (!this.matchesHostnamePatterns(ownership.hostname, policy.hostnamePatterns || [])) {
606
+ if (!matchesGatewayHostnamePatterns(ownership.hostname, policy.hostnamePatterns || [], auth.managedZoneNames)) {
391
607
  throw new plugins.typedrequest.TypedResponseError('hostname is outside token policy');
392
608
  }
393
609
  }
394
610
  assertRouteTargetsAllowed(auth, route) {
395
- const policy = auth.token?.policy;
611
+ const policy = auth.policy;
396
612
  if (!policy || policy.role !== 'gatewayClient' || !route)
397
613
  return;
398
614
  const allowedTargets = policy.allowedRouteTargets || [];
399
615
  if (allowedTargets.length === 0) {
400
616
  throw new plugins.typedrequest.TypedResponseError('gateway client token has no allowed route targets');
401
617
  }
402
- const targets = (route.action?.targets || []);
618
+ const targets = route.action.targets;
403
619
  for (const target of targets) {
404
- const host = String(target.host || '').trim().toLowerCase();
620
+ if (typeof target.host !== 'string') {
621
+ throw new plugins.typedrequest.TypedResponseError('gateway route target host must be a string');
622
+ }
623
+ const host = normalizeGatewayTargetHost(target.host);
405
624
  const port = Number(target.port);
406
625
  const allowed = allowedTargets.some((allowedTarget) => {
407
- return allowedTarget.host.trim().toLowerCase() === host && allowedTarget.ports.includes(port);
626
+ return normalizeGatewayTargetHost(allowedTarget.host) === host
627
+ && (allowedTarget.allowAnyPort === true || allowedTarget.ports.includes(port));
408
628
  });
409
629
  if (!allowed) {
410
630
  throw new plugins.typedrequest.TypedResponseError(`route target is outside token policy: ${host}:${port}`);
@@ -417,22 +637,23 @@ export class GatewayClientHandler {
417
637
  const targetDescription = target?.smtpForward
418
638
  ? `${target.smtpForward.host.trim().toLowerCase()}:${Number(target.smtpForward.port)}`
419
639
  : 'unknown';
420
- if ((auth.token?.policy?.allowedRouteTargets || []).length === 0) {
640
+ if ((auth.policy?.allowedRouteTargets || []).length === 0) {
421
641
  throw new plugins.typedrequest.TypedResponseError('gateway client token has no allowed route targets');
422
642
  }
423
643
  throw new plugins.typedrequest.TypedResponseError(`mail target is outside token policy: ${targetDescription}`);
424
644
  }
425
645
  isMailForwardTargetAllowed(auth, target) {
426
- const policy = auth.token?.policy;
646
+ const policy = auth.policy;
427
647
  if (!policy || policy.role !== 'gatewayClient' || !target?.smtpForward)
428
648
  return true;
429
649
  const allowedTargets = policy.allowedRouteTargets || [];
430
650
  if (allowedTargets.length === 0)
431
651
  return false;
432
- const host = target.smtpForward.host.trim().toLowerCase();
652
+ const host = normalizeGatewayTargetHost(target.smtpForward.host);
433
653
  const port = Number(target.smtpForward.port);
434
654
  return allowedTargets.some((allowedTarget) => {
435
- return allowedTarget.host.trim().toLowerCase() === host && allowedTarget.ports.includes(port);
655
+ return normalizeGatewayTargetHost(allowedTarget.host) === host
656
+ && (allowedTarget.allowAnyPort === true || allowedTarget.ports.includes(port));
436
657
  });
437
658
  }
438
659
  assertMailAddressAllowed(auth, addressArg, domainArg) {
@@ -452,7 +673,7 @@ export class GatewayClientHandler {
452
673
  });
453
674
  }
454
675
  isMailDeliveryStatusAllowed(auth, statusArg) {
455
- const policy = auth.token?.policy;
676
+ const policy = auth.policy;
456
677
  if (!policy || policy.role !== 'gatewayClient') {
457
678
  return true;
458
679
  }
@@ -464,7 +685,7 @@ export class GatewayClientHandler {
464
685
  && owner.gatewayClientId === policy.gatewayClient.id;
465
686
  }
466
687
  async filterWorkAppMailBindingsAllowed(auth, managerArg, ownerArg, bindingsArg) {
467
- if (auth.token?.policy?.role !== 'gatewayClient')
688
+ if (auth.policy?.role !== 'gatewayClient')
468
689
  return bindingsArg;
469
690
  const allowedAddressBindings = this.filterMailBindingsAllowed(auth, await managerArg.listMailAddressBindings({ owner: ownerArg }));
470
691
  const allowedAddressIds = new Set(allowedAddressBindings.map((bindingArg) => bindingArg.id));
@@ -488,46 +709,24 @@ export class GatewayClientHandler {
488
709
  .filter((bindingArg) => (bindingArg.addressBindingIds || []).length > 0);
489
710
  }
490
711
  isMailAddressAllowed(auth, addressArg, domainArg) {
491
- const policy = auth.token?.policy;
712
+ const policy = auth.policy;
492
713
  if (!policy || policy.role !== 'gatewayClient')
493
714
  return true;
494
- const normalizedDomain = domainArg.trim().toLowerCase();
715
+ const normalizedDomain = normalizeGatewayHostname(domainArg);
495
716
  const normalizedAddress = addressArg.trim().toLowerCase();
496
717
  if (!normalizedAddress.endsWith(`@${normalizedDomain}`)) {
497
718
  throw new plugins.typedrequest.TypedResponseError('mail address does not match domain');
498
719
  }
499
720
  const patterns = policy.hostnamePatterns || [];
500
- return this.matchesHostnamePatterns(normalizedDomain, patterns)
501
- || patterns.some((patternArg) => patternArg.trim().toLowerCase() === `*.${normalizedDomain}`);
502
- }
503
- matchesHostnamePatterns(hostname, patterns) {
504
- const normalizedHostname = hostname.trim().toLowerCase();
505
- if (!normalizedHostname)
506
- return false;
507
- for (const pattern of patterns) {
508
- const normalizedPattern = pattern.trim().toLowerCase();
509
- if (!normalizedPattern)
510
- continue;
511
- if (normalizedPattern === normalizedHostname)
512
- return true;
513
- if (normalizedPattern.startsWith('*.')) {
514
- const suffix = normalizedPattern.slice(2);
515
- if (!normalizedHostname.endsWith(`.${suffix}`))
516
- continue;
517
- const prefix = normalizedHostname.slice(0, -(suffix.length + 1));
518
- if (prefix && !prefix.includes('.'))
519
- return true;
520
- }
521
- }
522
- return false;
721
+ return matchesGatewayHostnamePatterns(normalizedDomain, patterns, auth.managedZoneNames);
523
722
  }
524
723
  getRouteHostnames(route) {
525
724
  const domains = route.match?.domains;
526
725
  if (Array.isArray(domains)) {
527
- return domains.map((domain) => String(domain).trim().toLowerCase()).filter(Boolean);
726
+ return domains.map((domain) => normalizeGatewayHostname(String(domain)));
528
727
  }
529
728
  if (typeof domains === 'string') {
530
- return domains.split(',').map((domain) => domain.trim().toLowerCase()).filter(Boolean);
729
+ return domains.split(',').map((domain) => normalizeGatewayHostname(domain));
531
730
  }
532
731
  return [];
533
732
  }
@@ -555,10 +754,10 @@ export class GatewayClientHandler {
555
754
  .filter((routeArg) => {
556
755
  if (!routeArg)
557
756
  return false;
558
- if (auth.token?.policy?.role !== 'gatewayClient')
757
+ if (auth.policy?.role !== 'gatewayClient')
559
758
  return true;
560
759
  return !routeArg.ownership.hostname
561
- || this.matchesHostnamePatterns(routeArg.ownership.hostname, auth.token.policy.hostnamePatterns || []);
760
+ || matchesGatewayHostnamePatterns(routeArg.ownership.hostname, auth.policy.hostnamePatterns || [], auth.managedZoneNames);
562
761
  });
563
762
  }
564
763
  toGatewayClientRoute(routeArg) {
@@ -621,7 +820,7 @@ export class GatewayClientHandler {
621
820
  const docs = await dnsManager.listDomains();
622
821
  return docs
623
822
  .filter((domainDoc) => {
624
- if (!auth.token?.policy || auth.token.policy.role !== 'gatewayClient')
823
+ if (!auth.policy || auth.policy.role !== 'gatewayClient')
625
824
  return true;
626
825
  return routeHostnames.some((hostname) => this.isHostnameInDomain(hostname, domainDoc.name));
627
826
  })
@@ -658,12 +857,19 @@ export class GatewayClientHandler {
658
857
  const routeGatewayClientId = metadata.gatewayClientId || '';
659
858
  const appId = metadata.gatewayClientAppId || '';
660
859
  for (const hostname of this.getRouteHostnames(route.route)) {
661
- if (auth.token?.policy?.role === 'gatewayClient' && !this.matchesHostnamePatterns(hostname, auth.token.policy.hostnamePatterns || [])) {
860
+ if (auth.policy?.role === 'gatewayClient' && !matchesGatewayHostnamePatterns(hostname, auth.policy.hostnamePatterns || [], auth.managedZoneNames)) {
662
861
  continue;
663
862
  }
664
863
  const domainDoc = domains.find((domain) => this.isHostnameInDomain(hostname, domain.name));
665
864
  const domainRecords = domainDoc ? await dnsManager.listRecordsForDomain(domainDoc.id) : [];
666
- const matchingRecords = domainRecords.filter((record) => record.name === hostname);
865
+ const matchingRecords = domainRecords.filter((record) => {
866
+ try {
867
+ return normalizeGatewayHostname(record.name) === hostname;
868
+ }
869
+ catch {
870
+ return false;
871
+ }
872
+ });
667
873
  if (matchingRecords.length === 0) {
668
874
  records.push({
669
875
  id: `missing:${hostname}`,
@@ -706,69 +912,261 @@ export class GatewayClientHandler {
706
912
  return records;
707
913
  }
708
914
  isHostnameInDomain(hostname, domainName) {
709
- const normalizedHostname = hostname.trim().toLowerCase();
710
- const normalizedDomainName = domainName.trim().toLowerCase();
915
+ const normalizedHostname = normalizeGatewayHostname(hostname);
916
+ const normalizedDomainName = normalizeGatewayHostname(domainName);
711
917
  return normalizedHostname === normalizedDomainName || normalizedHostname.endsWith(`.${normalizedDomainName}`);
712
918
  }
713
- async syncGatewayClientRoute(auth, ownership, route, enabled, deleteRoute, sourceProfileRef) {
919
+ async syncGatewayClientRoute(auth, ownership, route, enabled, deleteRoute, sourceProfileRef, dnsModeArg) {
920
+ const validatedRoute = route === undefined ? undefined : this.validateGatewayRouteConfig(route);
714
921
  const resolvedOwnership = this.resolveGatewayClientOwnership(auth, ownership);
715
922
  this.assertGatewayClientOwnership(auth, resolvedOwnership);
716
- this.assertGatewayClientRouteOwnership(resolvedOwnership, route);
717
- this.assertRouteTargetsAllowed(auth, route);
923
+ this.assertGatewayClientRouteOwnership(resolvedOwnership, validatedRoute);
924
+ this.assertRouteTargetsAllowed(auth, validatedRoute);
925
+ if (dnsModeArg === 'observe')
926
+ this.assertCapability(auth, 'readDnsRecords');
927
+ if (dnsModeArg === 'reconcile')
928
+ this.assertCapability(auth, 'syncDnsRecords');
718
929
  const manager = this.opsServerRef.dcRouterRef.routeConfigManager;
719
930
  if (!manager) {
720
931
  return { success: false, message: 'Route management not initialized' };
721
932
  }
722
933
  const externalKey = this.buildGatewayClientExternalKey(resolvedOwnership);
723
- const existingRoute = manager.findApiRouteByExternalKey(externalKey);
724
- if (deleteRoute) {
725
- if (!existingRoute) {
726
- return { success: true, action: 'unchanged' };
934
+ return await this.withRouteSyncLock(externalKey, async () => {
935
+ const existingRoute = manager.findApiRouteByExternalKey(externalKey);
936
+ const dnsMode = dnsModeArg || existingRoute?.metadata?.gatewayDnsMode || 'skip';
937
+ const includeDns = dnsModeArg !== undefined || dnsMode !== 'skip';
938
+ if (dnsMode === 'observe')
939
+ this.assertCapability(auth, 'readDnsRecords');
940
+ if (dnsMode === 'reconcile')
941
+ this.assertCapability(auth, 'syncDnsRecords');
942
+ const reconcileDnsFor = async (hostnameArg, gatewayClientIdArg, externalKeyArg, deleteArg = false, effectiveModeArg = dnsMode) => {
943
+ const reconciler = this.opsServerRef.dcRouterRef.gatewayRouteDnsReconciler;
944
+ if (!reconciler) {
945
+ return {
946
+ success: effectiveModeArg === 'skip',
947
+ retryable: effectiveModeArg !== 'skip',
948
+ mode: effectiveModeArg,
949
+ status: effectiveModeArg === 'skip' ? 'skipped' : 'zone-unavailable',
950
+ hostname: hostnameArg,
951
+ checkedAt: Date.now(),
952
+ message: effectiveModeArg === 'skip' ? undefined : 'Gateway route DNS reconciliation is not initialized',
953
+ };
954
+ }
955
+ try {
956
+ return await reconciler.reconcileRoute({
957
+ externalKey: externalKeyArg,
958
+ hostname: hostnameArg,
959
+ mode: effectiveModeArg,
960
+ gatewayClientId: gatewayClientIdArg,
961
+ delete: deleteArg,
962
+ });
963
+ }
964
+ catch (error) {
965
+ return {
966
+ success: false,
967
+ retryable: true,
968
+ mode: effectiveModeArg,
969
+ status: 'mutation-failed',
970
+ hostname: hostnameArg,
971
+ checkedAt: Date.now(),
972
+ message: `Gateway route DNS reconciliation failed: ${error.message}`,
973
+ };
974
+ }
975
+ };
976
+ const reconcileDns = async (deleteArg = false, effectiveModeArg = dnsMode) => {
977
+ return await reconcileDnsFor(resolvedOwnership.hostname, resolvedOwnership.gatewayClientId, externalKey, deleteArg, effectiveModeArg);
978
+ };
979
+ if (deleteRoute) {
980
+ if (!existingRoute) {
981
+ const dns = await reconcileDns(true, dnsMode);
982
+ return dns.success
983
+ ? { success: true, action: 'unchanged', ...(includeDns ? { dns } : {}) }
984
+ : { success: false, dns, message: dns.message };
985
+ }
986
+ const snapshot = structuredClone(existingRoute);
987
+ const existingDnsMode = snapshot.metadata?.gatewayDnsMode || dnsMode;
988
+ const disableResult = await manager.updateManagedRoute(existingRoute.id, {
989
+ enabled: false,
990
+ });
991
+ if (!disableResult.success) {
992
+ return { success: false, routeId: existingRoute.id, message: disableResult.message };
993
+ }
994
+ const dns = await reconcileDnsFor(this.getRouteHostnames(snapshot.route)[0] || resolvedOwnership.hostname, snapshot.metadata?.gatewayClientId || resolvedOwnership.gatewayClientId, snapshot.metadata?.externalKey || externalKey, true, existingDnsMode);
995
+ if (!dns.success) {
996
+ const rollback = await manager.updateManagedRoute(existingRoute.id, {
997
+ route: snapshot.route,
998
+ enabled: snapshot.enabled,
999
+ metadata: snapshot.metadata,
1000
+ }, { replaceMetadata: true, replaceRoute: true });
1001
+ if (!rollback.success) {
1002
+ dns.status = 'compensation-failed';
1003
+ dns.message = `${dns.message || 'DNS cleanup failed'}; route rollback failed: ${rollback.message || 'unknown error'}`;
1004
+ }
1005
+ return { success: false, routeId: existingRoute.id, dns, message: dns.message };
1006
+ }
1007
+ const result = await manager.deleteManagedRoute(existingRoute.id);
1008
+ if (result.success) {
1009
+ return { success: true, action: 'deleted', routeId: existingRoute.id, ...(includeDns ? { dns } : {}) };
1010
+ }
1011
+ const rollback = await manager.updateManagedRoute(existingRoute.id, {
1012
+ route: snapshot.route,
1013
+ enabled: snapshot.enabled,
1014
+ metadata: snapshot.metadata,
1015
+ }, { replaceMetadata: true, replaceRoute: true });
1016
+ let restoredDns = dns;
1017
+ if (rollback.success && snapshot.enabled && existingDnsMode === 'reconcile') {
1018
+ restoredDns = await reconcileDnsFor(this.getRouteHostnames(snapshot.route)[0] || resolvedOwnership.hostname, snapshot.metadata?.gatewayClientId || resolvedOwnership.gatewayClientId, snapshot.metadata?.externalKey || externalKey, false, 'reconcile');
1019
+ }
1020
+ return {
1021
+ success: false,
1022
+ dns: rollback.success && restoredDns.success ? dns : {
1023
+ ...restoredDns,
1024
+ status: 'compensation-failed',
1025
+ message: !rollback.success
1026
+ ? `${result.message || 'Route deletion failed'}; route rollback failed: ${rollback.message || 'unknown error'}`
1027
+ : `${result.message || 'Route deletion failed'}; DNS restore failed: ${restoredDns.message || 'unknown error'}`,
1028
+ },
1029
+ message: result.message,
1030
+ };
1031
+ }
1032
+ if (!validatedRoute) {
1033
+ return { success: false, message: 'route is required unless delete=true' };
1034
+ }
1035
+ const sourceBindings = this.getManagedRouteSourceBindings(sourceProfileRef);
1036
+ if (!sourceBindings) {
1037
+ return {
1038
+ success: false,
1039
+ message: sourceProfileRef
1040
+ ? `source profile '${sourceProfileRef}' not found`
1041
+ : 'PUBLIC source profile not found',
1042
+ };
1043
+ }
1044
+ const metadata = {
1045
+ sourceBindings,
1046
+ ownerType: 'gatewayClient',
1047
+ gatewayClientType: resolvedOwnership.gatewayClientType,
1048
+ gatewayClientId: resolvedOwnership.gatewayClientId,
1049
+ gatewayClientAppId: resolvedOwnership.appId,
1050
+ externalKey,
1051
+ gatewayDnsMode: dnsMode,
1052
+ };
1053
+ const normalizedRoute = this.normalizeGatewayClientRoute(validatedRoute, resolvedOwnership, externalKey);
1054
+ if (existingRoute) {
1055
+ const snapshot = structuredClone(existingRoute);
1056
+ const snapshotHostname = this.getRouteHostnames(snapshot.route)[0];
1057
+ const snapshotDnsMode = snapshot.metadata?.gatewayDnsMode || 'skip';
1058
+ const snapshotGatewayClientId = snapshot.metadata?.gatewayClientId || resolvedOwnership.gatewayClientId;
1059
+ const snapshotExternalKey = snapshot.metadata?.externalKey || externalKey;
1060
+ const shouldCleanPreviousDns = snapshotDnsMode === 'reconcile'
1061
+ && Boolean(snapshotHostname)
1062
+ && (snapshotHostname !== resolvedOwnership.hostname
1063
+ || dnsMode !== 'reconcile');
1064
+ const result = await manager.updateManagedRoute(existingRoute.id, {
1065
+ route: normalizedRoute,
1066
+ enabled: enabled ?? true,
1067
+ metadata,
1068
+ }, {
1069
+ replaceMetadata: true,
1070
+ replaceRoute: true,
1071
+ });
1072
+ if (!result.success)
1073
+ return { success: false, message: result.message };
1074
+ if (shouldCleanPreviousDns) {
1075
+ const cleanupDns = await reconcileDnsFor(snapshotHostname, snapshotGatewayClientId, snapshotExternalKey, true, 'reconcile');
1076
+ if (!cleanupDns.success) {
1077
+ const compensation = await manager.updateManagedRoute(existingRoute.id, {
1078
+ route: snapshot.route,
1079
+ enabled: snapshot.enabled,
1080
+ metadata: snapshot.metadata,
1081
+ }, { replaceMetadata: true, replaceRoute: true });
1082
+ if (compensation.success && snapshot.enabled) {
1083
+ const restoredDns = await reconcileDnsFor(snapshotHostname, snapshotGatewayClientId, snapshotExternalKey, false, 'reconcile');
1084
+ if (!restoredDns.success) {
1085
+ cleanupDns.status = 'compensation-failed';
1086
+ cleanupDns.message = `${cleanupDns.message || 'DNS cleanup failed'}; DNS restore failed: ${restoredDns.message || 'unknown error'}`;
1087
+ }
1088
+ }
1089
+ else if (!compensation.success) {
1090
+ cleanupDns.status = 'compensation-failed';
1091
+ cleanupDns.message = `${cleanupDns.message || 'DNS cleanup failed'}; route rollback failed: ${compensation.message || 'unknown error'}`;
1092
+ }
1093
+ return { success: false, routeId: existingRoute.id, dns: cleanupDns, message: cleanupDns.message };
1094
+ }
1095
+ }
1096
+ const dns = await reconcileDns((enabled ?? true) === false);
1097
+ if (dns.success)
1098
+ return { success: true, action: 'updated', routeId: existingRoute.id, ...(includeDns ? { dns } : {}) };
1099
+ const compensation = await manager.updateManagedRoute(existingRoute.id, {
1100
+ route: snapshot.route,
1101
+ enabled: snapshot.enabled,
1102
+ metadata: snapshot.metadata,
1103
+ }, { replaceMetadata: true, replaceRoute: true });
1104
+ if (compensation.success && shouldCleanPreviousDns && snapshot.enabled) {
1105
+ const restoredDns = await reconcileDnsFor(snapshotHostname, snapshotGatewayClientId, snapshotExternalKey, false, 'reconcile');
1106
+ if (!restoredDns.success) {
1107
+ dns.status = 'compensation-failed';
1108
+ dns.message = `${dns.message || 'DNS reconciliation failed'}; DNS restore failed: ${restoredDns.message || 'unknown error'}`;
1109
+ }
1110
+ }
1111
+ else if (!compensation.success) {
1112
+ dns.status = 'compensation-failed';
1113
+ dns.message = `${dns.message || 'DNS reconciliation failed'}; route rollback failed: ${compensation.message || 'unknown error'}`;
1114
+ }
1115
+ return { success: false, routeId: existingRoute.id, dns, message: dns.message };
727
1116
  }
728
- const result = await manager.deleteManagedRoute(existingRoute.id);
729
- return result.success
730
- ? { success: true, action: 'deleted', routeId: existingRoute.id }
731
- : { success: false, message: result.message };
1117
+ const routeId = await manager.createManagedRoute(normalizedRoute, auth.userId, enabled ?? true, metadata);
1118
+ const dns = await reconcileDns((enabled ?? true) === false);
1119
+ if (dns.success)
1120
+ return { success: true, action: 'created', routeId, ...(includeDns ? { dns } : {}) };
1121
+ const compensation = await manager.deleteManagedRoute(routeId);
1122
+ if (!compensation.success) {
1123
+ dns.status = 'compensation-failed';
1124
+ dns.message = `${dns.message || 'DNS reconciliation failed'}; route rollback failed: ${compensation.message || 'unknown error'}`;
1125
+ }
1126
+ return { success: false, routeId, dns, message: dns.message };
1127
+ });
1128
+ }
1129
+ normalizeGatewayClientLockKey(idArg) {
1130
+ const normalized = idArg.trim().toLowerCase()
1131
+ .replace(/[^a-z0-9._-]/g, '-')
1132
+ .replace(/-+/g, '-')
1133
+ .replace(/^-|-$/g, '');
1134
+ if (!normalized)
1135
+ throw new Error('gateway client id is required');
1136
+ return normalized;
1137
+ }
1138
+ async withGatewayClientCredentialLock(keyArg, taskArg) {
1139
+ const previous = this.gatewayClientCredentialChains.get(keyArg) || Promise.resolve();
1140
+ const run = previous.catch(() => undefined).then(taskArg);
1141
+ const settled = run.then(() => undefined, () => undefined);
1142
+ this.gatewayClientCredentialChains.set(keyArg, settled);
1143
+ try {
1144
+ return await run;
732
1145
  }
733
- if (!route) {
734
- return { success: false, message: 'route is required unless delete=true' };
1146
+ finally {
1147
+ if (this.gatewayClientCredentialChains.get(keyArg) === settled) {
1148
+ this.gatewayClientCredentialChains.delete(keyArg);
1149
+ }
735
1150
  }
736
- const sourceBindings = this.getManagedRouteSourceBindings(sourceProfileRef);
737
- if (!sourceBindings) {
738
- return {
739
- success: false,
740
- message: sourceProfileRef
741
- ? `source profile '${sourceProfileRef}' not found`
742
- : 'PUBLIC source profile not found',
743
- };
1151
+ }
1152
+ async withRouteSyncLock(keyArg, taskArg) {
1153
+ const previous = this.routeSyncChains.get(keyArg) || Promise.resolve();
1154
+ const run = previous
1155
+ .catch(() => undefined)
1156
+ .then(taskArg);
1157
+ const settled = run.then(() => undefined, () => undefined);
1158
+ this.routeSyncChains.set(keyArg, settled);
1159
+ try {
1160
+ return await run;
744
1161
  }
745
- const metadata = {
746
- sourceBindings,
747
- ownerType: 'gatewayClient',
748
- gatewayClientType: resolvedOwnership.gatewayClientType,
749
- gatewayClientId: resolvedOwnership.gatewayClientId,
750
- gatewayClientAppId: resolvedOwnership.appId,
751
- externalKey,
752
- };
753
- const normalizedRoute = this.normalizeGatewayClientRoute(route, resolvedOwnership, externalKey);
754
- if (existingRoute) {
755
- const result = await manager.updateManagedRoute(existingRoute.id, {
756
- route: normalizedRoute,
757
- enabled: enabled ?? true,
758
- metadata,
759
- }, {
760
- replaceMetadata: true,
761
- replaceRoute: true,
762
- });
763
- return result.success
764
- ? { success: true, action: 'updated', routeId: existingRoute.id }
765
- : { success: false, message: result.message };
1162
+ finally {
1163
+ if (this.routeSyncChains.get(keyArg) === settled) {
1164
+ this.routeSyncChains.delete(keyArg);
1165
+ }
766
1166
  }
767
- const routeId = await manager.createManagedRoute(normalizedRoute, auth.userId, enabled ?? true, metadata);
768
- return { success: true, action: 'created', routeId };
769
1167
  }
770
1168
  buildGatewayClientExternalKey(ownership) {
771
- const hostname = ownership.hostname?.trim().toLowerCase();
1169
+ const hostname = ownership.hostname ? normalizeGatewayHostname(ownership.hostname) : undefined;
772
1170
  const routeRef = ownership.routeRef?.trim();
773
1171
  let routeKey;
774
1172
  if (hostname && routeRef) {
@@ -784,7 +1182,7 @@ export class GatewayClientHandler {
784
1182
  return [
785
1183
  ownership.gatewayClientType,
786
1184
  ownership.gatewayClientId,
787
- ownership.appId,
1185
+ ownership.appId.trim(),
788
1186
  routeKey,
789
1187
  ].map((part) => part.trim()).join(':');
790
1188
  }
@@ -813,9 +1211,160 @@ export class GatewayClientHandler {
813
1211
  return undefined;
814
1212
  }
815
1213
  }
1214
+ validateGatewayRouteConfig(routeArg) {
1215
+ const fail = (messageArg) => {
1216
+ throw new plugins.typedrequest.TypedResponseError(`invalid gateway route: ${messageArg}`);
1217
+ };
1218
+ const requireObject = (valueArg, labelArg) => {
1219
+ if (!valueArg || typeof valueArg !== 'object' || Array.isArray(valueArg)) {
1220
+ return fail(`${labelArg} must be an object`);
1221
+ }
1222
+ const prototype = Object.getPrototypeOf(valueArg);
1223
+ if (prototype !== Object.prototype && prototype !== null) {
1224
+ return fail(`${labelArg} must be a plain object`);
1225
+ }
1226
+ return valueArg;
1227
+ };
1228
+ const requireOnlyKeys = (valueArg, allowedArg, labelArg) => {
1229
+ const unknownKeys = Object.keys(valueArg).filter((keyArg) => !allowedArg.includes(keyArg));
1230
+ if (unknownKeys.length > 0)
1231
+ fail(`${labelArg} contains unsupported field(s): ${unknownKeys.join(', ')}`);
1232
+ };
1233
+ const requireString = (valueArg, labelArg) => {
1234
+ if (typeof valueArg !== 'string' || !valueArg.trim())
1235
+ return fail(`${labelArg} must be a non-empty string`);
1236
+ return valueArg.trim();
1237
+ };
1238
+ const requireBoolean = (valueArg, labelArg) => {
1239
+ if (typeof valueArg !== 'boolean')
1240
+ return fail(`${labelArg} must be a boolean`);
1241
+ return valueArg;
1242
+ };
1243
+ const requirePort = (valueArg, labelArg) => {
1244
+ if (!Number.isSafeInteger(valueArg) || Number(valueArg) < 1 || Number(valueArg) > 65535) {
1245
+ return fail(`${labelArg} must be an integer from 1 through 65535`);
1246
+ }
1247
+ return Number(valueArg);
1248
+ };
1249
+ const route = requireObject(routeArg, 'route');
1250
+ requireOnlyKeys(route, ['name', 'match', 'action', 'priority', 'managedRouteKind', 'remoteIngress'], 'route');
1251
+ const name = requireString(route.name, 'route.name');
1252
+ const match = requireObject(route.match, 'route.match');
1253
+ requireOnlyKeys(match, ['ports', 'domains', 'transport', 'path'], 'route.match');
1254
+ const portValues = match.ports;
1255
+ if (!Array.isArray(portValues) || portValues.length === 0) {
1256
+ fail('route.match.ports must be a non-empty array');
1257
+ }
1258
+ const ports = portValues.map((portArg, indexArg) => requirePort(portArg, `route.match.ports[${indexArg}]`));
1259
+ let domains;
1260
+ if (match.domains !== undefined) {
1261
+ const domainValues = match.domains;
1262
+ if (!Array.isArray(domainValues) || domainValues.length === 0) {
1263
+ fail('route.match.domains must be a non-empty array when present');
1264
+ }
1265
+ domains = domainValues.map((domainArg, indexArg) => {
1266
+ return normalizeGatewayHostname(requireString(domainArg, `route.match.domains[${indexArg}]`));
1267
+ });
1268
+ }
1269
+ let transport;
1270
+ if (match.transport !== undefined) {
1271
+ if (match.transport !== 'tcp' && match.transport !== 'udp' && match.transport !== 'all') {
1272
+ fail('route.match.transport is unsupported');
1273
+ }
1274
+ transport = match.transport;
1275
+ }
1276
+ const path = match.path === undefined ? undefined : requireString(match.path, 'route.match.path');
1277
+ const action = requireObject(route.action, 'route.action');
1278
+ requireOnlyKeys(action, ['type', 'targets', 'tls', 'websocket'], 'route.action');
1279
+ if (action.type !== 'forward')
1280
+ fail('route.action.type must be forward');
1281
+ const targetValues = action.targets;
1282
+ if (!Array.isArray(targetValues) || targetValues.length === 0) {
1283
+ fail('route.action.targets must be a non-empty array');
1284
+ }
1285
+ const targets = targetValues.map((targetArg, indexArg) => {
1286
+ const target = requireObject(targetArg, `route.action.targets[${indexArg}]`);
1287
+ requireOnlyKeys(target, ['host', 'port'], `route.action.targets[${indexArg}]`);
1288
+ return {
1289
+ host: normalizeGatewayTargetHost(requireString(target.host, `route.action.targets[${indexArg}].host`)),
1290
+ port: requirePort(target.port, `route.action.targets[${indexArg}].port`),
1291
+ };
1292
+ });
1293
+ let tls;
1294
+ if (action.tls !== undefined) {
1295
+ const tlsValue = requireObject(action.tls, 'route.action.tls');
1296
+ requireOnlyKeys(tlsValue, ['mode', 'certificate'], 'route.action.tls');
1297
+ if (tlsValue.mode !== 'terminate' && tlsValue.mode !== 'passthrough'
1298
+ && tlsValue.mode !== 'terminate-and-reencrypt')
1299
+ fail('route.action.tls.mode is unsupported');
1300
+ if (tlsValue.certificate !== undefined && tlsValue.certificate !== 'auto') {
1301
+ fail('route.action.tls.certificate must be auto when present');
1302
+ }
1303
+ tls = {
1304
+ mode: tlsValue.mode,
1305
+ ...(tlsValue.certificate === 'auto' ? { certificate: 'auto' } : {}),
1306
+ };
1307
+ }
1308
+ let websocket;
1309
+ if (action.websocket !== undefined) {
1310
+ const websocketValue = requireObject(action.websocket, 'route.action.websocket');
1311
+ requireOnlyKeys(websocketValue, ['enabled'], 'route.action.websocket');
1312
+ websocket = { enabled: requireBoolean(websocketValue.enabled, 'route.action.websocket.enabled') };
1313
+ }
1314
+ let priority;
1315
+ if (route.priority !== undefined) {
1316
+ if (!Number.isSafeInteger(route.priority))
1317
+ fail('route.priority must be a safe integer');
1318
+ priority = Number(route.priority);
1319
+ }
1320
+ let managedRouteKind;
1321
+ if (route.managedRouteKind !== undefined) {
1322
+ if (route.managedRouteKind !== 'letsencrypt-http01-forward')
1323
+ fail('route.managedRouteKind is unsupported');
1324
+ managedRouteKind = route.managedRouteKind;
1325
+ }
1326
+ let remoteIngress;
1327
+ if (route.remoteIngress !== undefined) {
1328
+ const remoteValue = requireObject(route.remoteIngress, 'route.remoteIngress');
1329
+ requireOnlyKeys(remoteValue, ['enabled', 'edgeFilter'], 'route.remoteIngress');
1330
+ let edgeFilter;
1331
+ if (remoteValue.edgeFilter !== undefined) {
1332
+ const edgeFilterValues = remoteValue.edgeFilter;
1333
+ if (!Array.isArray(edgeFilterValues))
1334
+ fail('route.remoteIngress.edgeFilter must be an array');
1335
+ edgeFilter = edgeFilterValues.map((entryArg, indexArg) => {
1336
+ return requireString(entryArg, `route.remoteIngress.edgeFilter[${indexArg}]`);
1337
+ });
1338
+ }
1339
+ remoteIngress = {
1340
+ enabled: requireBoolean(remoteValue.enabled, 'route.remoteIngress.enabled'),
1341
+ ...(edgeFilter ? { edgeFilter } : {}),
1342
+ };
1343
+ }
1344
+ return {
1345
+ name,
1346
+ match: { ports, ...(domains ? { domains } : {}), ...(transport ? { transport } : {}), ...(path ? { path } : {}) },
1347
+ action: { type: 'forward', targets, ...(tls ? { tls } : {}), ...(websocket ? { websocket } : {}) },
1348
+ ...(priority !== undefined ? { priority } : {}),
1349
+ ...(managedRouteKind ? { managedRouteKind } : {}),
1350
+ ...(remoteIngress ? { remoteIngress } : {}),
1351
+ };
1352
+ }
816
1353
  normalizeGatewayClientRoute(route, ownership, externalKey) {
817
1354
  const normalizedRoute = structuredClone(route);
818
1355
  delete normalizedRoute.security;
1356
+ normalizedRoute.match = {
1357
+ ...normalizedRoute.match,
1358
+ ...(this.getRouteHostnames(normalizedRoute).length
1359
+ ? { domains: this.getRouteHostnames(normalizedRoute) }
1360
+ : {}),
1361
+ };
1362
+ if (normalizedRoute.action?.targets) {
1363
+ normalizedRoute.action.targets = normalizedRoute.action.targets.map((targetArg) => ({
1364
+ ...targetArg,
1365
+ host: normalizeGatewayTargetHost(targetArg.host),
1366
+ }));
1367
+ }
819
1368
  if (ownership.hostname && this.getRouteHostnames(normalizedRoute).length === 0) {
820
1369
  normalizedRoute.match = {
821
1370
  ...normalizedRoute.match,
@@ -837,6 +1386,9 @@ export class GatewayClientHandler {
837
1386
  throw new plugins.typedrequest.TypedResponseError('routeRef ownership cannot include domains');
838
1387
  }
839
1388
  const ownedHostname = ownership.hostname.trim().toLowerCase();
1389
+ if (routeDomains.length !== 1) {
1390
+ throw new plugins.typedrequest.TypedResponseError('hostname ownership requires exactly one route domain');
1391
+ }
840
1392
  if (routeDomains.some((domainArg) => domainArg.toLowerCase() !== ownedHostname)) {
841
1393
  throw new plugins.typedrequest.TypedResponseError('route domains must match ownership hostname');
842
1394
  }
@@ -859,4 +1411,4 @@ export class GatewayClientHandler {
859
1411
  }];
860
1412
  }
861
1413
  }
862
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2F0ZXdheWNsaWVudC5oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHMvb3Bzc2VydmVyL2hhbmRsZXJzL2dhdGV3YXljbGllbnQuaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBRTVDLE9BQU8sS0FBSyxVQUFVLE1BQU0saUNBQWlDLENBQUM7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBZXBELE1BQU0sT0FBTyxvQkFBb0I7SUFHWDtJQUZiLFdBQVcsR0FBRyxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7SUFFNUQsWUFBb0IsWUFBdUI7UUFBdkIsaUJBQVksR0FBWixZQUFZLENBQVc7UUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU8sS0FBSyxDQUFDLFdBQVcsQ0FDdkIsT0FBb0UsRUFDcEUsYUFBOEM7UUFFOUMsTUFBTSxJQUFJLEdBQUcsTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUU7WUFDNUQsS0FBSyxFQUFFLGFBQWE7WUFDcEIsb0JBQW9CLEVBQUUsYUFBYSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUM7U0FDeEQsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0UsQ0FBQztJQUVPLEtBQUssQ0FBQyxZQUFZLENBQ3hCLE9BQW9FLEVBQ3BFLFFBQXdDLHVCQUF1QjtRQUUvRCxNQUFNLElBQUksR0FBRyxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRTtZQUM1RCxLQUFLO1lBQ0wsb0JBQW9CLEVBQUUsSUFBSTtZQUMxQixpQkFBaUIsRUFBRSxJQUFJO1NBQ3hCLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUM5QixJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUNuQyx3QkFBd0IsRUFDeEIsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ2hCLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztZQUN4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLENBQUM7UUFDekQsQ0FBQyxDQUNGLENBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUM5QixJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUNuQyx5QkFBeUIsRUFDekIsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ2hCLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztZQUNyRSxPQUFPO2dCQUNMLE9BQU8sRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDO2dCQUMzQyxZQUFZLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixFQUFFO2FBQzVDLENBQUM7UUFDSixDQUFDLENBQ0YsQ0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQzlCLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQ25DLG9CQUFvQixFQUNwQixLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDaEIsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1lBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxJQUFJLENBQUMseUJBQXlCLEVBQUUsRUFBRSxDQUFDO1FBQ3BFLENBQUMsQ0FDRixDQUNGLENBQUM7UUFFRixJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FDOUIsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FDbkMscUJBQXFCLEVBQ3JCLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUNoQixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDaEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUM7WUFDbkUsSUFBSSxDQUFDLE9BQU87Z0JBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLDJDQUEyQyxFQUFFLENBQUM7WUFDOUYsSUFBSSxDQUFDO2dCQUNILE1BQU0sYUFBYSxHQUFHLE1BQU0sT0FBTyxDQUFDLFlBQVksQ0FBQztvQkFDL0MsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFO29CQUNkLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtvQkFDbEIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO29CQUNsQixXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7b0JBQ2hDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxnQkFBZ0I7b0JBQzFDLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxtQkFBbUI7b0JBQ2hELFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtvQkFDbEMsU0FBUyxFQUFFLE1BQU07aUJBQ2xCLENBQUMsQ0FBQztnQkFDSCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsQ0FBQztZQUMxQyxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUcsS0FBZSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQy9ELENBQUM7UUFDSCxDQUFDLENBQ0YsQ0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQzlCLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQ25DLHFCQUFxQixFQUNyQixLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDaEIsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDO1lBQ25FLElBQUksQ0FBQyxPQUFPO2dCQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSwyQ0FBMkMsRUFBRSxDQUFDO1lBQzlGLE1BQU0sYUFBYSxHQUFHLE1BQU0sT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFO2dCQUMzRCxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7Z0JBQ2xCLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztnQkFDaEMsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLGdCQUFnQjtnQkFDMUMsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLG1CQUFtQjtnQkFDaEQsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZO2dCQUNsQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87YUFDekIsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxhQUFhO2dCQUNsQixDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRTtnQkFDbEMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsQ0FBQztRQUM5RCxDQUFDLENBQ0YsQ0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQzlCLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQ25DLHFCQUFxQixFQUNyQixLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDaEIsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDO1lBQ25FLElBQUksQ0FBQyxPQUFPO2dCQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSwyQ0FBMkMsRUFBRSxDQUFDO1lBQzlGLE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDaEYsQ0FBQyxDQUNGLENBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUM5QixJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUNuQywwQkFBMEIsRUFDMUIsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ2hCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFDakUsTUFBTSxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ25ILE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQztZQUNuRSxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUM3QyxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsQ0FBQztZQUM3RSxDQUFDO1lBQ0QsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUNsQixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsQ0FBQztZQUN6RSxDQUFDO1lBQ0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxZQUFZLENBQUMsV0FBVyxDQUMzQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEdBQUcsYUFBYSxDQUFDLElBQUksUUFBUSxFQUNyRCxDQUFDLHNCQUFzQixFQUFFLHVCQUF1QixDQUFDLEVBQ2pELE9BQU8sQ0FBQyxhQUFhLElBQUksSUFBSSxFQUM3QixNQUFNLEVBQ047Z0JBQ0UsSUFBSSxFQUFFLGVBQWU7Z0JBQ3JCLE1BQU0sRUFBRSxDQUFDLHNCQUFzQixFQUFFLHVCQUF1QixDQUFDO2dCQUN6RCxhQUFhLEVBQUUsRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsYUFBYSxDQUFDLEVBQUUsRUFBRTtnQkFDakUsZ0JBQWdCLEVBQUUsYUFBYSxDQUFDLGdCQUFnQjtnQkFDaEQsbUJBQW1CLEVBQUUsYUFBYSxDQUFDLG1CQUFtQjtnQkFDdEQsWUFBWSxFQUFFLGFBQWEsQ0FBQyxZQUFZO2FBQ3pDLENBQ0YsQ0FBQztZQUNGLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUUsQ0FBQyxDQUNGLENBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUM5QixJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUNuQyx5QkFBeUIsRUFDekIsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ2hCLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztZQUNyRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO1FBQ3pGLENBQUMsQ0FDRixDQUNGLENBQUM7UUFFRixJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FDOUIsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FDbkMsNEJBQTRCLEVBQzVCLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUNoQixNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLHNCQUFzQixDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzlDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO1FBQzVGLENBQUMsQ0FDRixDQUNGLENBQUM7UUFFRixJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FDOUIsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FDbkMsd0JBQXdCLEVBQ3hCLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUNoQixNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLHNCQUFzQixDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzlDLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztRQUNqRixDQUFDLENBQ0YsQ0FDRixDQUFDO1FBR0YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQzlCLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQ25DLHdCQUF3QixFQUN4QixLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDaEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1lBQ3RFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDMUMsT0FBTyxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM5SSxDQUFDLENBQ0YsQ0FDRixDQUFDO1FBS0YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQzlCLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQ25DLHlCQUF5QixFQUN6QixLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDaEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLHNCQUFzQixDQUFDLENBQUM7WUFDaEYsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUM7WUFDakUsSUFBSSxDQUFDLE9BQU87Z0JBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUN0QyxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQztnQkFDckQsS0FBSyxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQztnQkFDdkQsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO2dCQUN0QixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87YUFDekIsQ0FBQyxDQUFDO1lBQ0gsT0FBTztnQkFDTCxRQUFRLEVBQUUsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksRUFBRSxRQUFRLENBQUM7YUFDekQsQ0FBQztRQUNKLENBQUMsQ0FDRixDQUNGLENBQUM7UUFFRixJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FDOUIsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FDbkMsd0JBQXdCLEVBQ3hCLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUNoQixNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztZQUNqRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzFDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDO1lBQ2pFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDYixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsQ0FBQztZQUM3RSxDQUFDO1lBQ0QsSUFBSSxDQUFDO2dCQUNILE1BQU0sT0FBTyxHQUFHO29CQUNkLEdBQUcsT0FBTyxDQUFDLE9BQU87b0JBQ2xCLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO2lCQUMxRCxDQUFDO2dCQUNGLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3JFLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNqRSxPQUFPLE1BQU0sT0FBTyxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDcEUsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFHLEtBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMvRCxDQUFDO1FBQ0gsQ0FBQyxDQUNGLENBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUM5QixJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUNuQywwQkFBMEIsRUFDMUIsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ2hCLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1lBQ2pGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDMUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUM7WUFDakUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNiLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxDQUFDO1lBQzdFLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksS0FBSyxlQUFlLEVBQUUsQ0FBQztnQkFDakQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksRUFBRSxNQUFNLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQztvQkFDMUYsS0FBSyxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUM7aUJBQ3pDLENBQUMsQ0FBQyxDQUFDO2dCQUNKLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUMxRSxJQUFJLENBQUMsT0FBTztvQkFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO2dCQUN2QyxPQUFPLE1BQU0sT0FBTyxDQUFDLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3pFLENBQUM7WUFDRCxPQUFPLE1BQU0sT0FBTyxDQUFDLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pFLENBQUMsQ0FDRixDQUNGLENBQUM7UUFFRixJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FDOUIsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FDbkMseUJBQXlCLEVBQ3pCLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUNoQixNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztZQUNoRixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQztZQUNqRSxJQUFJLENBQUMsT0FBTztnQkFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9ELE1BQU0sUUFBUSxHQUFHLE1BQU0sT0FBTyxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxJQUFJLENBQUMsZ0NBQWdDLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNuRyxDQUFDLENBQ0YsQ0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQzlCLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQ25DLHNCQUFzQixFQUN0QixLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDaEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLHVCQUF1QixDQUFDLENBQUM7WUFDakYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztZQUMxQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQztZQUNqRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2IsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLHNDQUFzQyxFQUFFLENBQUM7WUFDN0UsQ0FBQztZQUNELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoRCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksS0FBSyxlQUFlLEVBQUUsQ0FBQztnQkFDakQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQztnQkFDbEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksRUFBRSxNQUFNLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDeEcsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLGtCQUFrQixLQUFLLFlBQVk7dUJBQ3ZGLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLEtBQUssWUFBWTt1QkFDbEQsVUFBVSxDQUFDLGtCQUFrQixFQUFFLFFBQVEsS0FBSyxZQUFZLENBQUMsQ0FBQztnQkFDL0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNiLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxDQUFDO2dCQUNsRSxDQUFDO1lBQ0gsQ0FBQztZQUNELE9BQU8sTUFBTSxPQUFPLENBQUMsb0JBQW9CLENBQ3ZDLE9BQU8sQ0FBQyxZQUFZLEVBQ3BCLElBQUksQ0FBQyxNQUFNLEVBQ1gsS0FBSyxDQUNOLENBQUM7UUFDSixDQUFDLENBQ0YsQ0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQzlCLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQ25DLGFBQWEsRUFDYixLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDaEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUM7WUFDakUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNiLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxDQUFDO1lBQzlFLENBQUM7WUFDRCxPQUFPLE1BQU0sT0FBTyxDQUFDLFdBQVcsQ0FDOUIsT0FBTyxDQUFDLElBQUksSUFBSSxFQUFFLEVBQ2xCLE9BQU8sQ0FBQyxPQUFPLEVBQ2YsT0FBTyxDQUFDLGtCQUFrQixDQUMzQixDQUFDO1FBQ0osQ0FBQyxDQUNGLENBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUM5QixJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUNuQyx1QkFBdUIsRUFDdkIsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ2hCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDO1lBQ2pFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDYixPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQzFCLENBQUM7WUFFRCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNwQyxNQUFNLGtCQUFrQixHQUFHLFFBQWdGLENBQUM7WUFDNUcsSUFBSSxrQkFBa0IsQ0FBQyxZQUFZLElBQUksa0JBQWtCLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDM0UsT0FBTyxNQUFNLE9BQU8sQ0FBQyxrQ0FBa0MsQ0FDckQsa0JBQWtCLEVBQ2xCLE9BQU8sQ0FBQyxXQUFXLENBQ3BCLENBQUM7WUFDSixDQUFDO1lBRUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1lBQ3RFLE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN4RSxJQUFJLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUNwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQzFCLENBQUM7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQ0YsQ0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQzlCLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQ25DLDZCQUE2QixFQUM3QixLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFO1lBQzFCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDO1lBQ2pFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDYixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsQ0FBQztZQUM3RSxDQUFDO1lBQ0QsTUFBTSxJQUFJLEdBQUcsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUEwQyxDQUFDO1lBQzdFLE9BQU8sTUFBTSxPQUFPLENBQUMsMkJBQTJCLENBQzlDLE9BQU8sQ0FBQyxJQUFJLElBQUksRUFBRSxFQUNsQixJQUE4QixFQUM5QixPQUFPLENBQUMsU0FBUyxDQUNsQixDQUFDO1FBQ0osQ0FBQyxDQUNGLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTyxzQkFBc0I7UUFDNUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUM7UUFDL0MsT0FBTztZQUNMLE1BQU0sRUFBRTtnQkFDTixJQUFJLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQztnQkFDMUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUM7Z0JBQzNDLGNBQWMsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDO2FBQ3JEO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLElBQUksRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztnQkFDbEMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO2FBQ3BDO1lBQ0QsWUFBWSxFQUFFO2dCQUNaLElBQUksRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztnQkFDbEMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO2dCQUNwQyxVQUFVLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7YUFDekM7WUFDRCxLQUFLLEVBQUU7Z0JBQ0wsT0FBTyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUM7Z0JBQzdDLE9BQU8sRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztnQkFDdEMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO2FBQ3hDO1lBQ0QsYUFBYSxFQUFFO2dCQUNiLE9BQU8sRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLG9CQUFvQixFQUFFLGNBQWMsRUFBRSxDQUFDLE9BQU8sQ0FBQzthQUMxRTtZQUNELEdBQUcsRUFBRTtnQkFDSCxhQUFhLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQztnQkFDMUQsZUFBZSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO2FBQzlDO1lBQ0QsS0FBSyxFQUFFO2dCQUNMLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLEtBQUssS0FBSzthQUNuRDtTQUNGLENBQUM7SUFDSixDQUFDO0lBRU8sdUJBQXVCLENBQUMsSUFBa0I7UUFDaEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUM7UUFDbEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxJQUFJLFVBQVUsQ0FBQztRQUNqRSxPQUFPO1lBQ0wsSUFBSTtZQUNKLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUNuQyxhQUFhLEVBQUUsTUFBTSxFQUFFLGFBQWE7WUFDcEMsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixJQUFJLEVBQUU7WUFDaEQsbUJBQW1CLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixJQUFJLEVBQUU7WUFDdEQsWUFBWSxFQUFFLE1BQU0sRUFBRSxZQUFZLElBQUksRUFBRTtTQUN6QyxDQUFDO0lBQ0osQ0FBQztJQUVPLEtBQUssQ0FBQyx5QkFBeUI7UUFDckMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUM7UUFDbkUsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN4QixNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM1QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ2pGLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM5QixHQUFHLE1BQU07WUFDVCxVQUFVLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsRUFBRSxLQUFLLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNO1NBQzNGLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUdPLGdCQUFnQixDQUN0QixJQUFrQixFQUNsQixVQUE4RTtRQUU5RSxJQUFJLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUN6QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQztRQUNsQyxJQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssZUFBZTtZQUFFLE9BQU87UUFDdkQsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSTtZQUFFLE9BQU87UUFDdkQsTUFBTSxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsNkJBQTZCLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkcsQ0FBQztJQUVPLCtCQUErQixDQUNyQyxJQUFrQixFQUNsQixXQUFvQjtRQUVwQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQztRQUNsQyxJQUFJLE1BQU0sRUFBRSxJQUFJLEtBQUssZUFBZTtZQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDOUUsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQztRQUMxQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsdURBQXVELENBQUMsQ0FBQztRQUM3RyxDQUFDO1FBQ0QsSUFBSSxXQUFXLElBQUksV0FBVyxLQUFLLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNuRCxNQUFNLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQywyREFBMkQsQ0FBQyxDQUFDO1FBQ2pILENBQUM7UUFDRCxPQUFPO1lBQ0wsZUFBZSxFQUFFLFlBQVksQ0FBQyxFQUFFO1lBQ2hDLGlCQUFpQixFQUFFLFlBQVksQ0FBQyxJQUFJO1NBQ3JDLENBQUM7SUFDSixDQUFDO0lBRU8sNkJBQTZCLENBQ25DLElBQWtCLEVBQ2xCLFNBQW1FO1FBRW5FLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7WUFDN0IsTUFBTSxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsMkNBQTJDLENBQUMsQ0FBQztRQUNqRyxDQUFDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7WUFDL0QsTUFBTSxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsd0RBQXdELENBQUMsQ0FBQztRQUM5RyxDQUFDO1FBQ0QsSUFBSSxNQUFNLEVBQUUsSUFBSSxLQUFLLGVBQWUsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQzFCLE1BQU0sSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLHVEQUF1RCxDQUFDLENBQUM7WUFDN0csQ0FBQztZQUNELElBQUksU0FBUyxDQUFDLGlCQUFpQixJQUFJLFNBQVMsQ0FBQyxpQkFBaUIsS0FBSyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUM3RixNQUFNLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1lBQzFHLENBQUM7WUFDRCxJQUFJLFNBQVMsQ0FBQyxlQUFlLElBQUksU0FBUyxDQUFDLGVBQWUsS0FBSyxNQUFNLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUN2RixNQUFNLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1lBQzFHLENBQUM7WUFDRCxPQUFPO2dCQUNMLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSTtnQkFDNUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRTtnQkFDeEMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxLQUFLO2dCQUN0QixRQUFRLEVBQUUsU0FBUyxDQUFDLFFBQVE7Z0JBQzVCLFFBQVEsRUFBRSxTQUFTLENBQUMsUUFBUTthQUM3QixDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDL0QsTUFBTSxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsZ0RBQWdELENBQUMsQ0FBQztRQUN0RyxDQUFDO1FBQ0QsT0FBTyxTQUE0QyxDQUFDO0lBQ3RELENBQUM7SUFFTyxzQkFBc0IsQ0FDNUIsSUFBa0IsRUFDbEIsS0FBb0U7UUFFcEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUM7UUFDbEMsSUFBSSxNQUFNLEVBQUUsSUFBSSxLQUFLLGVBQWU7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNuRCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzFCLE1BQU0sSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLHVEQUF1RCxDQUFDLENBQUM7UUFDN0csQ0FBQztRQUNELElBQUksS0FBSyxFQUFFLGlCQUFpQixJQUFJLEtBQUssQ0FBQyxpQkFBaUIsS0FBSyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RGLE1BQU0sSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLG9EQUFvRCxDQUFDLENBQUM7UUFDMUcsQ0FBQztRQUNELElBQUksS0FBSyxFQUFFLGVBQWUsSUFBSSxLQUFLLENBQUMsZUFBZSxLQUFLLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDaEYsTUFBTSxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsb0RBQW9ELENBQUMsQ0FBQztRQUMxRyxDQUFDO1FBQ0QsT0FBTztZQUNMLEdBQUcsS0FBSztZQUNSLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSTtZQUM1QyxlQUFlLEVBQUUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1NBQ3pDLENBQUM7SUFDSixDQUFDO0lBRU8sZ0JBQWdCLENBQ3RCLElBQWtCLEVBQ2xCLEtBQTBEO1FBRTFELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLGFBQWEsRUFBRSxpQkFBaUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN4RSxNQUFNLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO1FBQ3ZHLENBQUM7UUFDRCxPQUFPLGFBQW9FLENBQUM7SUFDOUUsQ0FBQztJQUVPLDRCQUE0QixDQUFDLElBQWtCLEVBQUUsU0FBMEM7UUFDakcsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUM7UUFDbEMsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGVBQWU7WUFBRSxPQUFPO1FBQ3ZELElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUTtZQUFFLE9BQU87UUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3JGLE1BQU0sSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFDeEYsQ0FBQztJQUNILENBQUM7SUFFTyx5QkFBeUIsQ0FBQyxJQUFrQixFQUFFLEtBQTRDO1FBQ2hHLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxlQUFlLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTztRQUNqRSxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsbUJBQW1CLElBQUksRUFBRSxDQUFDO1FBQ3hELElBQUksY0FBYyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxNQUFNLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO1FBQ3pHLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxDQUFFLEtBQUssQ0FBQyxNQUFjLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBNEMsQ0FBQztRQUNsRyxLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzdCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzVELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFO2dCQUNwRCxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxJQUFJLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hHLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNiLE1BQU0sSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLHlDQUF5QyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztZQUM3RyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyw4QkFBOEIsQ0FDcEMsSUFBa0IsRUFDbEIsTUFBNEQ7UUFFNUQsSUFBSSxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztZQUFFLE9BQU87UUFDMUQsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLEVBQUUsV0FBVztZQUMzQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN0RixDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqRSxNQUFNLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO1FBQ3pHLENBQUM7UUFDRCxNQUFNLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyx3Q0FBd0MsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO0lBQ2pILENBQUM7SUFFTywwQkFBMEIsQ0FDaEMsSUFBa0IsRUFDbEIsTUFBNEQ7UUFFNUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUM7UUFDbEMsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGVBQWUsSUFBSSxDQUFDLE1BQU0sRUFBRSxXQUFXO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDcEYsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixJQUFJLEVBQUUsQ0FBQztRQUN4RCxJQUFJLGNBQWMsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzlDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzFELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdDLE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFO1lBQzNDLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxJQUFJLElBQUksYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEcsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sd0JBQXdCLENBQzlCLElBQWtCLEVBQ2xCLFVBQWtCLEVBQ2xCLFNBQWlCO1FBRWpCLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDO1lBQUUsT0FBTztRQUNuRSxNQUFNLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO0lBQzNGLENBQUM7SUFFTyx5QkFBeUIsQ0FDL0IsSUFBa0IsRUFDbEIsV0FBbUU7UUFFbkUsT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDdkMsSUFBSSxDQUFDO2dCQUNILE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUM7dUJBQ3hFLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3ZFLENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1AsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sMkJBQTJCLENBQ2pDLElBQWtCLEVBQ2xCLFNBQStEO1FBRS9ELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxlQUFlLEVBQUUsQ0FBQztZQUMvQyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQztRQUN6QyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3BDLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDLGlCQUFpQixLQUFLLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSTtlQUN2RCxLQUFLLENBQUMsZUFBZSxLQUFLLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO0lBQ3pELENBQUM7SUFFTyxLQUFLLENBQUMsZ0NBQWdDLENBQzVDLElBQWtCLEVBQ2xCLFVBQWUsRUFDZixRQUFrRixFQUNsRixXQUFtRTtRQUVuRSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksS0FBSyxlQUFlO1lBQUUsT0FBTyxXQUFXLENBQUM7UUFDckUsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQzNELElBQUksRUFDSixNQUFNLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUM5RCxDQUFDO1FBQ0YsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzdGLE9BQU8sV0FBVzthQUNmLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ2xCLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUMvRyxNQUFNLGlCQUFpQixHQUFHLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNqSSxNQUFNLGtCQUFrQixHQUFHLElBQUksR0FBRyxDQUFDLGlCQUFpQjtpQkFDakQsR0FBRyxDQUFDLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDO2lCQUNoRSxNQUFNLENBQUMsQ0FBQyxhQUFhLEVBQTJCLEVBQUUsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9FLE1BQU0sV0FBVyxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPO21CQUN6SSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUM7WUFDbkMsT0FBTztnQkFDTCxHQUFHLFVBQVU7Z0JBQ2IsaUJBQWlCO2dCQUNqQixtQkFBbUIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDNUcsV0FBVztnQkFDWCxhQUFhLEVBQUUsU0FBUzthQUN6QixDQUFDO1FBQ0osQ0FBQyxDQUFDO2FBQ0QsTUFBTSxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVPLG9CQUFvQixDQUMxQixJQUFrQixFQUNsQixVQUFrQixFQUNsQixTQUFpQjtRQUVqQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQztRQUNsQyxJQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssZUFBZTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQzVELE1BQU0sZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3hELE1BQU0saUJBQWlCLEdBQUcsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzFELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUN4RCxNQUFNLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1FBQzFGLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDO1FBQy9DLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDLGdCQUFnQixFQUFFLFFBQVEsQ0FBQztlQUMxRCxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssS0FBSyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7SUFDbEcsQ0FBQztJQUVPLHVCQUF1QixDQUFDLFFBQWdCLEVBQUUsUUFBa0I7UUFDbEUsTUFBTSxrQkFBa0IsR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDekQsSUFBSSxDQUFDLGtCQUFrQjtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3RDLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7WUFDL0IsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdkQsSUFBSSxDQUFDLGlCQUFpQjtnQkFBRSxTQUFTO1lBQ2pDLElBQUksaUJBQWlCLEtBQUssa0JBQWtCO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQzFELElBQUksaUJBQWlCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZDLE1BQU0sTUFBTSxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxJQUFJLE1BQU0sRUFBRSxDQUFDO29CQUFFLFNBQVM7Z0JBQ3pELE1BQU0sTUFBTSxHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDakUsSUFBSSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztvQkFBRSxPQUFPLElBQUksQ0FBQztZQUNuRCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLGlCQUFpQixDQUFDLEtBQTJDO1FBQ25FLE1BQU0sT0FBTyxHQUFJLEtBQUssQ0FBQyxLQUFhLEVBQUUsT0FBTyxDQUFDO1FBQzlDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzNCLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RGLENBQUM7UUFDRCxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2hDLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6RixDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRU8sY0FBYyxDQUFDLFdBQXFFO1FBQzFGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDO1FBQ2pFLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDeEIsT0FBTyxPQUFPLENBQUMsZUFBZSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3ZELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7WUFDaEMsSUFBSSxDQUFDLFFBQVE7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDNUIsSUFBSSxRQUFRLENBQUMsU0FBUyxLQUFLLGVBQWU7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDekQsSUFBSSxXQUFXLENBQUMsZUFBZSxJQUFJLFFBQVEsQ0FBQyxlQUFlLEtBQUssV0FBVyxDQUFDLGVBQWU7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDMUcsSUFBSSxXQUFXLENBQUMsaUJBQWlCLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLElBQUksUUFBUSxDQUFDLEtBQUssV0FBVyxDQUFDLGlCQUFpQjtnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUM5SCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLHVCQUF1QixDQUM3QixJQUFrQixFQUNsQix3QkFBaUM7UUFFakMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLCtCQUErQixDQUFDLElBQUksRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO1FBQ3pGLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUM7YUFDcEMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDdEQsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFvRSxFQUFFO1lBQ3JGLElBQUksQ0FBQyxRQUFRO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBQzVCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxLQUFLLGVBQWU7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDOUQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsUUFBUTttQkFDOUIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzNHLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLG9CQUFvQixDQUMxQixRQUFzQztRQUV0QyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQ25DLElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLFNBQVMsS0FBSyxlQUFlO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDckUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVE7WUFBRSxPQUFPLElBQUksQ0FBQztRQUM1RCxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBUSxDQUFDO1FBQ3JELE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUN0QixPQUFPO1lBQ0wsRUFBRSxFQUFFLFFBQVEsQ0FBQyxFQUFFO1lBQ2YsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLEVBQUU7WUFDL0IsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPO1lBQ3pCLFNBQVM7WUFDVCxLQUFLO1lBQ0wsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLGdCQUFnQjtZQUM5RyxVQUFVLEVBQUUsV0FBVyxRQUFRLENBQUMsRUFBRSxFQUFFO1NBQ3JDLENBQUM7SUFDSixDQUFDO0lBRU8sd0JBQXdCLENBQzlCLFFBQXNDO1FBRXRDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFTLENBQUM7UUFDcEMsTUFBTSxTQUFTLEdBQTZEO1lBQzFFLGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxpQkFBaUIsSUFBSSxRQUFRO1lBQ3pELGVBQWUsRUFBRSxRQUFRLENBQUMsZUFBZSxJQUFJLEVBQUU7WUFDL0MsS0FBSyxFQUFFLFFBQVEsQ0FBQyxrQkFBa0IsSUFBSSxFQUFFO1NBQ3pDLENBQUM7UUFDRixNQUFNLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxpQkFBaUIsSUFBSSxTQUFTLENBQUMsZUFBZSxJQUFJLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQztRQUNqRyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDdkQsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDM0MsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNQLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLGtDQUFrQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVFLElBQUksaUJBQWlCLEVBQUUsQ0FBQztZQUN0QixTQUFTLENBQUMsUUFBUSxHQUFHLGlCQUFpQixDQUFDLFFBQVEsQ0FBQztZQUNoRCxTQUFTLENBQUMsUUFBUSxHQUFHLGlCQUFpQixDQUFDLFFBQVEsQ0FBQztRQUNsRCxDQUFDO2FBQU0sSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztZQUNqRCwrREFBK0Q7WUFDL0QsU0FBUyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7YUFBTSxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUN6QyxTQUFTLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZELENBQUM7YUFBTSxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ3BCLFNBQVMsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ2hDLENBQUM7YUFBTSxDQUFDO1lBQ04sU0FBUyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRU8sS0FBSyxDQUFDLHdCQUF3QixDQUNwQyxJQUFrQixFQUNsQix3QkFBaUM7UUFFakMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO1FBQzVELElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDM0IsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLCtCQUErQixDQUFDLElBQUksRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO1FBQ3pGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDckQsTUFBTSxjQUFjLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzNGLE1BQU0sSUFBSSxHQUFHLE1BQU0sVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRTVDLE9BQU8sSUFBSTthQUNSLE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssZUFBZTtnQkFBRSxPQUFPLElBQUksQ0FBQztZQUNuRixPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDOUYsQ0FBQyxDQUFDO2FBQ0QsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDakIsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNwRCxNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxNQUFNLEtBQUssVUFBVSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDdkYsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDaEgsT0FBTztnQkFDTCxHQUFHLE1BQU07Z0JBQ1QsWUFBWTtnQkFDWixVQUFVLEVBQUUsWUFBWSxNQUFNLENBQUMsRUFBRSxFQUFFO2dCQUNuQyxZQUFZLEVBQUU7b0JBQ1osbUJBQW1CLEVBQUUsbUJBQW1CO29CQUN4QyxtQkFBbUI7b0JBQ25CLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUM7b0JBQ3ZFLFlBQVksRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUM7aUJBQ3hFO2FBQ3dELENBQUM7UUFDOUQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sS0FBSyxDQUFDLDJCQUEyQixDQUN2QyxJQUFrQixFQUNsQix3QkFBaUM7UUFFakMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO1FBQzVELElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDM0IsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLCtCQUErQixDQUFDLElBQUksRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO1FBQ3pGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDckQsTUFBTSxPQUFPLEdBQUcsTUFBTSxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDL0MsTUFBTSxPQUFPLEdBQXlELEVBQUUsQ0FBQztRQUV6RSxLQUFLLE1BQU0sS0FBSyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7WUFDaEMsSUFBSSxDQUFDLFFBQVE7Z0JBQUUsU0FBUztZQUN4QixNQUFNLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsSUFBSSxRQUFRLENBQUM7WUFDakUsTUFBTSxvQkFBb0IsR0FBRyxRQUFRLENBQUMsZUFBZSxJQUFJLEVBQUUsQ0FBQztZQUM1RCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsa0JBQWtCLElBQUksRUFBRSxDQUFDO1lBRWhELEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUMzRCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksS0FBSyxlQUFlLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQ3RJLFNBQVM7Z0JBQ1gsQ0FBQztnQkFDRCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUMzRixNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sVUFBVSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUMzRixNQUFNLGVBQWUsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDO2dCQUNuRixJQUFJLGVBQWUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ2pDLE9BQU8sQ0FBQyxJQUFJLENBQUM7d0JBQ1gsRUFBRSxFQUFFLFdBQVcsUUFBUSxFQUFFO3dCQUN6QixRQUFRLEVBQUUsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFO3dCQUM3QixVQUFVLEVBQUUsU0FBUyxFQUFFLElBQUk7d0JBQzNCLElBQUksRUFBRSxRQUFRO3dCQUNkLElBQUksRUFBRSxTQUFTO3dCQUNmLEtBQUssRUFBRSxFQUFFO3dCQUNULEdBQUcsRUFBRSxDQUFDO3dCQUNOLE1BQU0sRUFBRSxPQUFPO3dCQUNmLE1BQU0sRUFBRSxTQUFTO3dCQUNqQixpQkFBaUI7d0JBQ2pCLGVBQWUsRUFBRSxvQkFBb0I7d0JBQ3JDLEtBQUs7d0JBQ0wsUUFBUTt3QkFDUixPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUU7d0JBQ2pCLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLFlBQVksU0FBUyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVO3dCQUNuRSxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsSUFBSSxDQUFDO3dCQUMvQixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsSUFBSSxDQUFDO3dCQUMvQixTQUFTLEVBQUUsRUFBRTtxQkFDZCxDQUFDLENBQUM7b0JBQ0gsU0FBUztnQkFDWCxDQUFDO2dCQUNELEtBQUssTUFBTSxTQUFTLElBQUksZUFBZSxFQUFFLENBQUM7b0JBQ3hDLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQ3BELE9BQU8sQ0FBQyxJQUFJLENBQUM7d0JBQ1gsR0FBRyxNQUFNO3dCQUNULFVBQVUsRUFBRSxTQUFTLEVBQUUsSUFBSTt3QkFDM0IsTUFBTSxFQUFFLFFBQVE7d0JBQ2hCLGlCQUFpQjt3QkFDakIsZUFBZSxFQUFFLG9CQUFvQjt3QkFDckMsS0FBSzt3QkFDTCxRQUFRO3dCQUNSLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRTt3QkFDakIsVUFBVSxFQUFFLGdCQUFnQixNQUFNLENBQUMsRUFBRSxFQUFFO3FCQUN4QyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVPLGtCQUFrQixDQUFDLFFBQWdCLEVBQUUsVUFBa0I7UUFDN0QsTUFBTSxrQkFBa0IsR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDekQsTUFBTSxvQkFBb0IsR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDN0QsT0FBTyxrQkFBa0IsS0FBSyxvQkFBb0IsSUFBSSxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxvQkFBb0IsRUFBRSxDQUFDLENBQUM7SUFDaEgsQ0FBQztJQUVPLEtBQUssQ0FBQyxzQkFBc0IsQ0FDbEMsSUFBa0IsRUFDbEIsU0FBbUUsRUFDbkUsS0FBNEQsRUFDNUQsT0FBaUIsRUFDakIsV0FBcUIsRUFDckIsZ0JBQXlCO1FBRXpCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM5RSxJQUFJLENBQUMsNEJBQTRCLENBQUMsSUFBSSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFNUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUM7UUFDakUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLENBQUM7UUFDekUsQ0FBQztRQUVELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzFFLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVyRSxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDbkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxDQUFDO1lBQ2hELENBQUM7WUFDRCxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEUsT0FBTyxNQUFNLENBQUMsT0FBTztnQkFDbkIsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsRUFBRSxFQUFFO2dCQUNqRSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEQsQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxDQUFDO1FBQzdFLENBQUM7UUFFRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsNkJBQTZCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDcEIsT0FBTztnQkFDTCxPQUFPLEVBQUUsS0FBSztnQkFDZCxPQUFPLEVBQUUsZ0JBQWdCO29CQUN2QixDQUFDLENBQUMsbUJBQW1CLGdCQUFnQixhQUFhO29CQUNsRCxDQUFDLENBQUMsaUNBQWlDO2FBQ3RDLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQW1DO1lBQy9DLGNBQWM7WUFDZCxTQUFTLEVBQUUsZUFBZTtZQUMxQixpQkFBaUIsRUFBRSxpQkFBaUIsQ0FBQyxpQkFBaUI7WUFDdEQsZUFBZSxFQUFFLGlCQUFpQixDQUFDLGVBQWU7WUFDbEQsa0JBQWtCLEVBQUUsaUJBQWlCLENBQUMsS0FBSztZQUMzQyxXQUFXO1NBQ1osQ0FBQztRQUNGLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFaEcsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQixNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFO2dCQUNoRSxLQUFLLEVBQUUsZUFBZTtnQkFDdEIsT0FBTyxFQUFFLE9BQU8sSUFBSSxJQUFJO2dCQUN4QixRQUFRO2FBQ1QsRUFBRTtnQkFDRCxlQUFlLEVBQUUsSUFBSTtnQkFDckIsWUFBWSxFQUFFLElBQUk7YUFDbkIsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxNQUFNLENBQUMsT0FBTztnQkFDbkIsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsRUFBRSxFQUFFO2dCQUNqRSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEQsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLGtCQUFrQixDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sSUFBSSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDMUcsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUN2RCxDQUFDO0lBRU8sNkJBQTZCLENBQUMsU0FBMEM7UUFDOUUsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMxRCxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO1FBQzVDLElBQUksUUFBZ0IsQ0FBQztRQUNyQixJQUFJLFFBQVEsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUN6QixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDaEcsUUFBUSxHQUFHLGlCQUFpQixPQUFPLEVBQUUsQ0FBQztRQUN4QyxDQUFDO2FBQU0sSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNwQixRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3RCLENBQUM7YUFBTSxDQUFDO1lBQ04sUUFBUSxHQUFHLFNBQVMsUUFBUSxFQUFFLENBQUM7UUFDakMsQ0FBQztRQUNELE9BQU87WUFDTCxTQUFTLENBQUMsaUJBQWlCO1lBQzNCLFNBQVMsQ0FBQyxlQUFlO1lBQ3pCLFNBQVMsQ0FBQyxLQUFLO1lBQ2YsUUFBUTtTQUNULENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVPLGtDQUFrQyxDQUN4QyxXQUFtQjtRQUVuQixNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQztRQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDbEQsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUNELElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDOUUsSUFDRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO21CQUNuQixNQUFNLENBQUMsTUFBTSxLQUFLLENBQUM7bUJBQ25CLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUNyRSxDQUFDO2dCQUNELE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7WUFDRCxPQUFPO2dCQUNMLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2dCQUN4QyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRTthQUMzQixDQUFDO1FBQ0osQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7SUFDSCxDQUFDO0lBR08sMkJBQTJCLENBQ2pDLEtBQTJDLEVBQzNDLFNBQTBDLEVBQzFDLFdBQW1CO1FBRW5CLE1BQU0sZUFBZSxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQyxPQUFPLGVBQWUsQ0FBQyxRQUFRLENBQUM7UUFDaEMsSUFBSSxTQUFTLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0UsZUFBZSxDQUFDLEtBQUssR0FBRztnQkFDdEIsR0FBRyxlQUFlLENBQUMsS0FBSztnQkFDeEIsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQzthQUN2QixDQUFDO1FBQ1gsQ0FBQztRQUNELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDMUIsZUFBZSxDQUFDLElBQUksR0FBRyxrQkFBa0IsV0FBVyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDdEcsQ0FBQztRQUNELE9BQU8sZUFBZSxDQUFDO0lBQ3pCLENBQUM7SUFFTyxpQ0FBaUMsQ0FDdkMsU0FBMEMsRUFDMUMsS0FBNEM7UUFFNUMsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPO1FBQ25CLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBQ2pDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDeEIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsMkNBQTJDLENBQUMsQ0FBQztRQUNqRyxDQUFDO1FBQ0QsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM5RCxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ2hGLE1BQU0sSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLDZDQUE2QyxDQUFDLENBQUM7UUFDbkcsQ0FBQztJQUNILENBQUM7SUFFTyw2QkFBNkIsQ0FDbkMsc0JBQStCO1FBRS9CLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDO1FBQ2pFLE1BQU0sUUFBUSxHQUFHLFFBQVEsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDaEQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxzQkFBc0IsSUFBSSxRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM1RSxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBMEMsRUFBRSxFQUFFO1lBQzNFLE9BQU8sVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxTQUFTLENBQUM7UUFDMUQsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQTBDLEVBQUUsRUFBRTtZQUNqRSxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssU0FBUyxDQUFDO1FBQzVELENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUNELE9BQU8sQ0FBQztnQkFDTixnQkFBZ0IsRUFBRSxPQUFPLENBQUMsRUFBRTtnQkFDNUIsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLElBQUk7YUFDaEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIn0=
1414
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2F0ZXdheWNsaWVudC5oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHMvb3Bzc2VydmVyL2hhbmRsZXJzL2dhdGV3YXljbGllbnQuaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBRTVDLE9BQU8sS0FBSyxVQUFVLE1BQU0saUNBQWlDLENBQUM7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxPQUFPLEVBRUwseUJBQXlCLEVBQ3pCLDhCQUE4QixFQUM5Qix3QkFBd0IsRUFDeEIsMEJBQTBCLEVBQzFCLHlCQUF5QixHQUMxQixNQUFNLG1DQUFtQyxDQUFDO0FBUzNDLE1BQU0sT0FBTyxvQkFBb0I7SUFLWDtJQUpiLFdBQVcsR0FBRyxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDcEQsZUFBZSxHQUFHLElBQUksR0FBRyxFQUF5QixDQUFDO0lBQ25ELDZCQUE2QixHQUFHLElBQUksR0FBRyxFQUF5QixDQUFDO0lBRXpFLFlBQW9CLFlBQXVCO1FBQXZCLGlCQUFZLEdBQVosWUFBWSxDQUFXO1FBQ3pDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVPLEtBQUssQ0FBQyxXQUFXLENBQ3ZCLE9BQW9FLEVBQ3BFLGFBQThDLEVBQzlDLFVBQXdDLEVBQUU7UUFFMUMsT0FBTyxNQUFNLHlCQUF5QixDQUNwQyxJQUFJLENBQUMsWUFBWSxFQUNqQixPQUFPLEVBQ1AsYUFBYSxLQUFLLHVCQUF1QixDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FB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