agl 40.5.0 → 40.6.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.
- package/changelog.md +16 -0
- package/dist_serve/bundle.js +598 -598
- package/dist_serve/bundle.js.map +2 -2
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/aglapi/aglapisurface.document.js +2 -2
- package/dist_ts/classes.aglhome.d.ts +5 -0
- package/dist_ts/classes.aglhome.js +2 -1
- package/dist_ts/classes.authstore.js +5 -1
- package/dist_ts/classes.controller.js +11 -2
- package/dist_ts/classes.inferencegateway.d.ts +35 -1
- package/dist_ts/classes.inferencegateway.js +86 -26
- package/dist_ts/classes.inferenceservice.d.ts +4 -2
- package/dist_ts/classes.inferenceservice.js +5 -4
- package/dist_ts/classes.proxycontrol.d.ts +58 -4
- package/dist_ts/classes.proxycontrol.js +23 -44
- package/dist_ts/classes.proxycontrolclient.d.ts +15 -5
- package/dist_ts/classes.proxycontrolclient.js +67 -17
- package/dist_ts/classes.proxydaemon.d.ts +22 -3
- package/dist_ts/classes.proxydaemon.js +73 -12
- package/dist_ts/classes.proxyleaseholder.d.ts +43 -14
- package/dist_ts/classes.proxyleaseholder.js +66 -22
- package/dist_ts/classes.proxystore.d.ts +9 -0
- package/dist_ts/classes.proxystore.js +15 -7
- package/dist_ts/classes.workercallerbindings.d.ts +66 -0
- package/dist_ts/classes.workercallerbindings.js +211 -0
- package/dist_ts/classes.workercallers.d.ts +63 -2
- package/dist_ts/classes.workercallers.js +430 -65
- package/dist_ts/fleet/classes.workerlaunches.d.ts +12 -5
- package/dist_ts/fleet/classes.workerlaunches.js +25 -19
- package/dist_ts/fleet/classes.workers.d.ts +17 -0
- package/dist_ts/fleet/classes.workers.js +74 -1
- package/dist_ts/functions.inferencecli.d.ts +3 -2
- package/dist_ts/functions.inferencecli.js +67 -5
- package/dist_ts/functions.inferencecliarguments.d.ts +6 -2
- package/dist_ts/functions.inferencecliarguments.js +29 -2
- package/dist_ts/functions.inferencelaunch.d.ts +24 -0
- package/dist_ts/functions.inferencelaunch.js +42 -2
- package/dist_ts/functions.proxycontract.d.ts +11 -0
- package/dist_ts/functions.proxycontract.js +12 -1
- package/dist_ts/functions.proxysocket.d.ts +6 -0
- package/dist_ts/functions.proxysocket.js +46 -0
- package/dist_ts/functions.workerprocessproof.d.ts +6 -0
- package/dist_ts/functions.workerprocessproof.js +28 -4
- package/dist_ts_authswitch/authority-contract.d.ts +30 -5
- package/dist_ts_authswitch/authority-contract.js +7 -1
- package/dist_ts_authswitch/classes.authoritycli.js +6 -2
- package/dist_ts_authswitch/classes.authorityclient.js +15 -5
- package/dist_ts_authswitch/classes.claudenative.d.ts +7 -1
- package/dist_ts_authswitch/classes.claudenative.js +21 -6
- package/dist_ts_authswitch/classes.claudesignin.d.ts +14 -2
- package/dist_ts_authswitch/classes.claudesignin.js +68 -22
- package/dist_ts_authswitch/classes.codexmanaged.d.ts +8 -0
- package/dist_ts_authswitch/classes.codexmanaged.js +33 -18
- package/dist_ts_authswitch/classes.harnessprocesses.d.ts +8 -0
- package/dist_ts_authswitch/classes.harnessprocesses.js +41 -9
- package/dist_ts_interfaces/interfaces.d.ts +1 -1
- package/dist_ts_interfaces/interfaces.js +1 -1
- package/dist_ts_interfaces/workercallers.d.ts +43 -4
- package/package.json +1 -1
- package/readme.md +103 -14
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/aglapi/aglapisurface.document.ts +2 -2
- package/ts/classes.aglhome.ts +6 -0
- package/ts/classes.authstore.ts +4 -0
- package/ts/classes.controller.ts +10 -1
- package/ts/classes.inferencegateway.ts +104 -23
- package/ts/classes.inferenceservice.ts +6 -3
- package/ts/classes.proxycontrol.ts +76 -39
- package/ts/classes.proxycontrolclient.ts +72 -20
- package/ts/classes.proxydaemon.ts +85 -15
- package/ts/classes.proxyleaseholder.ts +84 -28
- package/ts/classes.proxystore.ts +16 -5
- package/ts/classes.workercallerbindings.ts +147 -0
- package/ts/classes.workercallers.ts +410 -59
- package/ts/fleet/classes.workerlaunches.ts +23 -15
- package/ts/fleet/classes.workers.ts +51 -1
- package/ts/functions.inferencecli.ts +61 -7
- package/ts/functions.inferencecliarguments.ts +32 -1
- package/ts/functions.inferencelaunch.ts +49 -2
- package/ts/functions.proxycontract.ts +12 -0
- package/ts/functions.proxysocket.ts +39 -0
- package/ts/functions.workerprocessproof.ts +27 -4
- package/ts_authswitch/authority-contract.ts +34 -5
- package/ts_authswitch/classes.authoritycli.ts +5 -1
- package/ts_authswitch/classes.authorityclient.ts +25 -9
- package/ts_authswitch/classes.claudenative.ts +23 -7
- package/ts_authswitch/classes.claudesignin.ts +70 -23
- package/ts_authswitch/classes.codexmanaged.ts +30 -16
- package/ts_authswitch/classes.harnessprocesses.ts +39 -8
- package/ts_authswitch/native-contracts.md +1 -1
- package/ts_interfaces/interfaces.ts +1 -1
- package/ts_interfaces/workercallers.ts +32 -4
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/accounts.plugins.ts +5 -1
- package/ts_web/classes.accountsreadmodel.ts +4 -1
|
@@ -40,7 +40,7 @@ import { InferencePlacementModel, InferencePlacementStore } from './classes.infe
|
|
|
40
40
|
import { InferenceUsageModel, InferenceUsageStore } from './classes.inferenceusage.js';
|
|
41
41
|
import { InferenceSpendModel, InferenceSpendStore } from './classes.inferencespend.js';
|
|
42
42
|
import { assertInferenceRoutingPolicy } from './classes.inferencegateway.js';
|
|
43
|
-
import { defaultProxyClientProvider, defaultProxyClients, inferenceProviders, proxyClientNamePattern, proxyCredentialDeliveries, } from './functions.proxycontract.js';
|
|
43
|
+
import { aglProxyConfinedClient, defaultProxyClientProvider, defaultProxyClients, inferenceProviders, proxyClientNamePattern, proxyCredentialDeliveries, } from './functions.proxycontract.js';
|
|
44
44
|
const maximumProxyClients = 32;
|
|
45
45
|
/** The gateway admits 128 credentials in all; no more leases than that are ever kept. */
|
|
46
46
|
const maximumProxyLeases = 128;
|
|
@@ -231,10 +231,12 @@ const assertLeasePolicy = (valueArg) => {
|
|
|
231
231
|
const assertLease = (valueArg) => {
|
|
232
232
|
const value = valueArg;
|
|
233
233
|
if (!value || typeof value !== 'object'
|
|
234
|
-
|| Object.keys(value).length !== (Object.hasOwn(value, 'orphanedAt')
|
|
234
|
+
|| Object.keys(value).length !== 4 + Number(Object.hasOwn(value, 'orphanedAt')) + Number(Object.hasOwn(value, 'route'))
|
|
235
235
|
|| typeof value.id !== 'string' || !/^[a-f0-9]{64}$/.test(value.id)
|
|
236
236
|
|| typeof value.client !== 'string' || !proxyClientNamePattern.test(value.client)
|
|
237
|
-
|| !isDate(value.createdAt) || (Object.hasOwn(value, 'orphanedAt') && !isDate(value.orphanedAt))
|
|
237
|
+
|| !isDate(value.createdAt) || (Object.hasOwn(value, 'orphanedAt') && !isDate(value.orphanedAt))
|
|
238
|
+
|| (Object.hasOwn(value, 'route') && (value.route !== 'confined' || value.client !== aglProxyConfinedClient
|
|
239
|
+
|| JSON.stringify(value.policy) !== JSON.stringify({ provider: 'anthropic' })))) {
|
|
238
240
|
throw new Error('Invalid proxy lease.');
|
|
239
241
|
}
|
|
240
242
|
assertLeasePolicy(value.policy);
|
|
@@ -260,6 +262,9 @@ let ProxyLeaseModel = (() => {
|
|
|
260
262
|
let _orphanedAt_decorators;
|
|
261
263
|
let _orphanedAt_initializers = [];
|
|
262
264
|
let _orphanedAt_extraInitializers = [];
|
|
265
|
+
let _route_decorators;
|
|
266
|
+
let _route_initializers = [];
|
|
267
|
+
let _route_extraInitializers = [];
|
|
263
268
|
var ProxyLeaseModel = class extends _classSuper {
|
|
264
269
|
static { _classThis = this; }
|
|
265
270
|
static {
|
|
@@ -269,11 +274,13 @@ let ProxyLeaseModel = (() => {
|
|
|
269
274
|
_policy_decorators = [plugins.nosqldb.svDb()];
|
|
270
275
|
_createdAt_decorators = [plugins.nosqldb.svDb()];
|
|
271
276
|
_orphanedAt_decorators = [plugins.nosqldb.svDb()];
|
|
277
|
+
_route_decorators = [plugins.nosqldb.svDb()];
|
|
272
278
|
__esDecorate(null, null, _id_decorators, { kind: "field", name: "id", static: false, private: false, access: { has: obj => "id" in obj, get: obj => obj.id, set: (obj, value) => { obj.id = value; } }, metadata: _metadata }, _id_initializers, _id_extraInitializers);
|
|
273
279
|
__esDecorate(null, null, _client_decorators, { kind: "field", name: "client", static: false, private: false, access: { has: obj => "client" in obj, get: obj => obj.client, set: (obj, value) => { obj.client = value; } }, metadata: _metadata }, _client_initializers, _client_extraInitializers);
|
|
274
280
|
__esDecorate(null, null, _policy_decorators, { kind: "field", name: "policy", static: false, private: false, access: { has: obj => "policy" in obj, get: obj => obj.policy, set: (obj, value) => { obj.policy = value; } }, metadata: _metadata }, _policy_initializers, _policy_extraInitializers);
|
|
275
281
|
__esDecorate(null, null, _createdAt_decorators, { kind: "field", name: "createdAt", static: false, private: false, access: { has: obj => "createdAt" in obj, get: obj => obj.createdAt, set: (obj, value) => { obj.createdAt = value; } }, metadata: _metadata }, _createdAt_initializers, _createdAt_extraInitializers);
|
|
276
282
|
__esDecorate(null, null, _orphanedAt_decorators, { kind: "field", name: "orphanedAt", static: false, private: false, access: { has: obj => "orphanedAt" in obj, get: obj => obj.orphanedAt, set: (obj, value) => { obj.orphanedAt = value; } }, metadata: _metadata }, _orphanedAt_initializers, _orphanedAt_extraInitializers);
|
|
283
|
+
__esDecorate(null, null, _route_decorators, { kind: "field", name: "route", static: false, private: false, access: { has: obj => "route" in obj, get: obj => obj.route, set: (obj, value) => { obj.route = value; } }, metadata: _metadata }, _route_initializers, _route_extraInitializers);
|
|
277
284
|
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
278
285
|
ProxyLeaseModel = _classThis = _classDescriptor.value;
|
|
279
286
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
@@ -284,9 +291,10 @@ let ProxyLeaseModel = (() => {
|
|
|
284
291
|
policy = (__runInitializers(this, _client_extraInitializers), __runInitializers(this, _policy_initializers, void 0));
|
|
285
292
|
createdAt = (__runInitializers(this, _policy_extraInitializers), __runInitializers(this, _createdAt_initializers, void 0));
|
|
286
293
|
orphanedAt = (__runInitializers(this, _createdAt_extraInitializers), __runInitializers(this, _orphanedAt_initializers, void 0));
|
|
294
|
+
route = (__runInitializers(this, _orphanedAt_extraInitializers), __runInitializers(this, _route_initializers, void 0));
|
|
287
295
|
constructor() {
|
|
288
296
|
super(...arguments);
|
|
289
|
-
__runInitializers(this,
|
|
297
|
+
__runInitializers(this, _route_extraInitializers);
|
|
290
298
|
}
|
|
291
299
|
};
|
|
292
300
|
return ProxyLeaseModel = _classThis;
|
|
@@ -458,7 +466,7 @@ export class ProxyStore {
|
|
|
458
466
|
if (await ProxyLeaseModel.exact.count({}) >= maximumProxyLeases)
|
|
459
467
|
throw new Error('The proxy keeps at most 128 leases.');
|
|
460
468
|
const inserted = await ProxyLeaseModel.exact.insert({ id: leaseArg.digest, client: leaseArg.client, policy,
|
|
461
|
-
createdAt: new Date(leaseArg.createdAt.getTime()) });
|
|
469
|
+
createdAt: new Date(leaseArg.createdAt.getTime()), ...(leaseArg.route === 'confined' ? { route: 'confined' } : {}) });
|
|
462
470
|
if (inserted.status !== 'inserted' && inserted.status !== 'already_committed')
|
|
463
471
|
throw new Error('The proxy lease could not be recorded.');
|
|
464
472
|
}
|
|
@@ -468,7 +476,7 @@ export class ProxyStore {
|
|
|
468
476
|
return stored.map((entryArg) => {
|
|
469
477
|
const lease = ProxyLeaseModel.exact.toPersisted(entryArg);
|
|
470
478
|
return { digest: lease.id, client: lease.client, policy: lease.policy, createdAt: lease.createdAt,
|
|
471
|
-
...(lease.orphanedAt === undefined ? {} : { orphanedAt: lease.orphanedAt }) };
|
|
479
|
+
route: lease.route ?? 'loopback', ...(lease.orphanedAt === undefined ? {} : { orphanedAt: lease.orphanedAt }) };
|
|
472
480
|
});
|
|
473
481
|
}
|
|
474
482
|
/** Starts a kept lease's reclaim window at `atArg`; the window then holds across restarts (see `orphanedAt`). */
|
|
@@ -610,4 +618,4 @@ const assertClientName = (nameArg) => {
|
|
|
610
618
|
throw new Error('A proxy client name is 1 to 32 lowercase letters, digits or hyphens.');
|
|
611
619
|
};
|
|
612
620
|
const newCredential = () => plugins.crypto.randomBytes(32).toString('base64url');
|
|
613
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5wcm94eXN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvY2xhc3Nlcy5wcm94eXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN2RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN2RixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUU3RSxPQUFPLEVBQ0wsMEJBQTBCLEVBQzFCLG1CQUFtQixFQUNuQixrQkFBa0IsRUFDbEIsc0JBQXNCLEVBQ3RCLHlCQUF5QixHQUkxQixNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxDQUFDO0FBQy9CLHlGQUF5RjtBQUN6RixNQUFNLGtCQUFrQixHQUFHLEdBQUcsQ0FBQztBQVEvQiw0RUFBNEU7QUFDNUUsTUFBTSxPQUFPLG1CQUFtQjtJQUN2QixLQUFLLENBQUMsSUFBSSxDQUFDLE9BQWUsRUFBRSxZQUF3QjtRQUN6RCxNQUFNLFVBQVUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxXQUFXLENBQUMsNkJBQTZCLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ2xHLElBQUksQ0FBQztZQUFDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7UUFBQyxDQUFDO2dCQUNyRCxDQUFDO1lBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUFDLENBQUM7SUFDakMsQ0FBQztJQUVNLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBZSxFQUFFLGFBQXFCO1FBQ3hELElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBQzFHLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQztZQUFDLE9BQU8sTUFBTSxPQUFPLENBQUMsV0FBVyxDQUFDLCtCQUErQixDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUFDLENBQUM7Z0JBQ2pGLENBQUM7WUFBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQUMsQ0FBQztJQUM1QixDQUFDO0NBQ0Y7QUFVRCxNQUFNLGNBQWMsR0FBc0UsQ0FBQyxRQUFRLEVBQUUsRUFBRTtJQUNyRyxNQUFNLEtBQUssR0FBRyxRQUFrRCxDQUFDO0lBQ2pFLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRSxLQUFLLE9BQU87V0FDN0YsT0FBTyxLQUFLLENBQUMsY0FBYyxLQUFLLFFBQVEsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO1dBQzdGLE9BQU8sS0FBSyxDQUFDLHNCQUFzQixLQUFLLFFBQVEsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUFDO1FBQ3pILE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0lBSVcsa0JBQWtCOzRCQUY5QixPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLEVBQ2pFLE9BQU8sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLENBQUM7Ozs7c0JBQzdCLE9BQU8sQ0FBQyxPQUFPLENBQUMsY0FBYzs7Ozs7Ozs7OztrQ0FBdEMsU0FBUSxXQUEwRTs7Ozs4QkFFL0csT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUU7MENBQ3JCLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO2tEQUN0QixPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTtZQUZBLHdKQUFPLEVBQUUsNkJBQUYsRUFBRSwrRUFBVTtZQUNsQiw0TEFBTyxjQUFjLDZCQUFkLGNBQWMsdUdBQVU7WUFDL0Isb05BQU8sc0JBQXNCLDZCQUF0QixzQkFBc0IsdUhBQVU7WUFKakUsNktBS0M7OztZQUxZLHVEQUFrQjs7UUFFQyxFQUFFLHFEQUFVO1FBQ1gsY0FBYyxtSEFBVTtRQUN4QixzQkFBc0IsdUlBQVU7Ozs7Ozs7O1NBSnBELGtCQUFrQjtBQWtCL0IsTUFBTSxZQUFZLEdBQW9FLENBQUMsUUFBUSxFQUFFLEVBQUU7SUFDakcsTUFBTSxLQUFLLEdBQUcsUUFBZ0QsQ0FBQztJQUMvRCxJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDO1dBQ3JFLE9BQU8sS0FBSyxDQUFDLEVBQUUsS0FBSyxRQUFRLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztXQUN0RSxPQUFPLEtBQUssQ0FBQyxVQUFVLEtBQUssUUFBUSxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7V0FDM0YsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLENBQUMsVUFBVyxHQUFHLENBQUM7V0FDaEUsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVMsQ0FBQyxFQUFFLENBQUM7UUFDbkQsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQzNDLENBQUM7QUFDSCxDQUFDLENBQUM7SUFJVyxnQkFBZ0I7NEJBRjVCLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixFQUFFLENBQUMsRUFDaEUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsQ0FBQzs7OztzQkFDN0IsT0FBTyxDQUFDLE9BQU8sQ0FBQyxjQUFjOzs7Ozs7Ozs7Ozs7O2dDQUF0QyxTQUFRLFdBQXNFOzs7OzhCQUV6RyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRTtzQ0FDckIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7c0NBQ3RCLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO29DQUN0QixPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTtZQUhBLHdKQUFPLEVBQUUsNkJBQUYsRUFBRSwrRUFBVTtZQUNsQixnTEFBTyxVQUFVLDZCQUFWLFVBQVUsK0ZBQVU7WUFDM0IsZ0xBQU8sVUFBVSw2QkFBVixVQUFVLCtGQUFVO1lBQzNCLDBLQUFPLFFBQVEsNkJBQVIsUUFBUSwyRkFBc0I7WUFML0QsNktBTUM7OztZQU5ZLHVEQUFnQjs7UUFFRyxFQUFFLHFEQUFVO1FBQ1gsVUFBVSwrR0FBVTtRQUNwQixVQUFVLHVIQUFVO1FBQ3BCLFFBQVEscUhBQXNCOzs7Ozs7OztTQUxsRCxnQkFBZ0I7QUFlN0IsTUFBTSxjQUFjLEdBQXNFLENBQUMsUUFBUSxFQUFFLEVBQUU7SUFDckcsTUFBTSxLQUFLLEdBQUcsUUFBa0QsQ0FBQztJQUNqRSxJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDO1dBQ3JFLE9BQU8sS0FBSyxDQUFDLEVBQUUsS0FBSyxRQUFRLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDckcsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO0lBQ3hELENBQUM7QUFDSCxDQUFDLENBQUM7SUFJVyxrQkFBa0I7NEJBRjlCLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsY0FBYyxFQUFFLHNCQUFzQixFQUFFLENBQUMsRUFDbkUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsQ0FBQzs7OztzQkFDN0IsT0FBTyxDQUFDLE9BQU8sQ0FBQyxjQUFjOzs7Ozs7O2tDQUF0QyxTQUFRLFdBQTBFOzs7OzhCQUUvRyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRTtnQ0FDckIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7WUFEQSx3SkFBTyxFQUFFLDZCQUFGLEVBQUUsK0VBQVU7WUFDbEIsOEpBQU8sSUFBSSw2QkFBSixJQUFJLG1GQUFVO1lBSC9DLDZLQUlDOzs7WUFKWSx1REFBa0I7O1FBRUMsRUFBRSxxREFBVTtRQUNYLElBQUkseUdBQVU7Ozs7Ozs7O1NBSGxDLGtCQUFrQjtBQWlDL0IsTUFBTSxNQUFNLEdBQUcsQ0FBQyxRQUFpQixFQUFvQixFQUFFLENBQUMsUUFBUSxZQUFZLElBQUksSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBRXhILE1BQU0sWUFBWSxHQUFHLENBQUMsUUFBaUIsRUFBd0IsRUFBRSxDQUMvRCxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDO0FBRXhGLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxRQUFpQixFQUE2QixFQUFFO0lBQ3pFLE1BQU0sS0FBSyxHQUFHLFFBQXFELENBQUM7SUFDcEUsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7V0FDMUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxRQUFRLEtBQUssU0FBUyxDQUFDO1dBQ2pKLENBQUMsS0FBSyxDQUFDLFVBQVUsS0FBSyxTQUFTLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1dBQ25FLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMvRCxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFDakQsQ0FBQztJQUNELDRCQUE0QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyxDQUFDO0FBRUYsTUFBTSxXQUFXLEdBQW1FLENBQUMsUUFBUSxFQUFFLEVBQUU7SUFDL0YsTUFBTSxLQUFLLEdBQUcsUUFBK0MsQ0FBQztJQUM5RCxJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7V0FDbEMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7V0FDMUUsT0FBTyxLQUFLLENBQUMsRUFBRSxLQUFLLFFBQVEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1dBQ2hFLE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxRQUFRLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztXQUM5RSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ25HLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQ0QsaUJBQWlCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2xDLENBQUMsQ0FBQztJQUlXLGVBQWU7NEJBRjNCLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFLENBQUMsRUFDL0QsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsQ0FBQzs7OztzQkFDN0IsT0FBTyxDQUFDLE9BQU8sQ0FBQyxjQUFjOzs7Ozs7Ozs7Ozs7Ozs7OytCQUF0QyxTQUFRLFdBQW9FOzs7OzhCQUV0RyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRTtrQ0FDckIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7a0NBQ3RCLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO3FDQUN0QixPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTtzQ0FDdEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7WUFKQSx3SkFBTyxFQUFFLDZCQUFGLEVBQUUsK0VBQVU7WUFDbEIsb0tBQU8sTUFBTSw2QkFBTixNQUFNLHVGQUFVO1lBQ3ZCLG9LQUFPLE1BQU0sNkJBQU4sTUFBTSx1RkFBNkI7WUFDMUMsNktBQU8sU0FBUyw2QkFBVCxTQUFTLDZGQUFRO1lBQ3hCLGdMQUFPLFVBQVUsNkJBQVYsVUFBVSwrRkFBUTtZQU5uRCw2S0FPQzs7O1lBUFksdURBQWU7O1FBRUksRUFBRSxxREFBVTtRQUNYLE1BQU0sMkdBQVU7UUFDaEIsTUFBTSwrR0FBNkI7UUFDbkMsU0FBUyxrSEFBUTtRQUNqQixVQUFVLHNIQUFROzs7Ozs7OztTQU50QyxlQUFlO0FBUzVCLE1BQU0sV0FBVyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLHNCQUFzQjtJQUNwSCxxQkFBcUIsRUFBRSx1QkFBdUIsRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0FBQzVGLE1BQU0sZUFBZSxHQUFHO0lBQ3RCLElBQUksRUFBRSxLQUFrQyxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQzNGLENBQUM7QUFDRixJQUFJLFdBQStCLENBQUM7QUFnQ3BDOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sVUFBVTtJQU9RLE9BQU87SUFObkIsS0FBSyxDQUFvQjtJQUN6QixLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ3BCLFFBQVEsQ0FBOEI7SUFDdEMsUUFBUSxDQUErQjtJQUN2QyxhQUFhLENBQWtCO0lBRXZDLFlBQTZCLE9BQTJCO3VCQUEzQixPQUFPO1FBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1FBQ25ILElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSSxJQUFJLG1CQUFtQixFQUFFLENBQUM7SUFDMUQsQ0FBQztJQUVNLEtBQUssQ0FBQyxJQUFJO1FBQ2YsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBQ3hGLElBQUksV0FBVztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztRQUNqRixXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBRyxJQUFJLDBCQUEwQixDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUMvRixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztZQUN6QixNQUFNLEdBQUcsR0FBRyxNQUFNLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLHNGQUFzRixDQUFDLENBQUM7WUFDMUcsQ0FBQztZQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDL0YsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzNCLE1BQU0sT0FBTyxHQUFHLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN0QyxLQUFLLE1BQU0sS0FBSyxJQUFJLFdBQVc7Z0JBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDekYsS0FBSyxNQUFNLEtBQUssSUFBSSxXQUFXO2dCQUFFLE1BQU0sS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3BELElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDL0MsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDekIsQ0FBQztRQUFDLE9BQU8sUUFBUSxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzFDLE1BQU0sUUFBUSxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0lBRU0sUUFBUTtRQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUN6RSxPQUFPLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxFQUFFLFlBQVksRUFBRSxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7SUFDOUgsQ0FBQztJQUVNLFFBQVE7UUFDYixPQUFPLElBQUksc0JBQXNCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCw2R0FBNkc7SUFDdEcsVUFBVTtRQUNmLE9BQU8sSUFBSSx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELHlHQUF5RztJQUNsRyxLQUFLO1FBQ1YsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sSUFBSSxtQkFBbUIsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFRDs7O09BR0c7SUFDSSxLQUFLO1FBQ1YsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sSUFBSSxtQkFBbUIsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFRCw0RUFBNEU7SUFDckUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQXNCLG1CQUFtQjtRQUN6RSxLQUFLLE1BQU0sSUFBSSxJQUFJLFNBQVM7WUFBRSxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxtQkFBbUIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVHLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxtQkFBbUI7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7UUFDekcsTUFBTSxNQUFNLEdBQTZCLEVBQUUsQ0FBQztRQUM1QyxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQzNCLE1BQU0sTUFBTSxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekQsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3BJLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQseUdBQXlHO0lBQ2xHLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBZTtRQUNqQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQixNQUFNLE1BQU0sR0FBRyxNQUFNLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUMzRSxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQyxNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNELE1BQU0sVUFBVSxHQUFHLGFBQWEsRUFBRSxDQUFDO1FBQ25DLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sTUFBTSxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQzdGLFFBQVEsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO2dCQUNqQyxRQUFRLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztZQUNuQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ0wsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLGNBQWM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7UUFDaEcsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQy9FLENBQUM7SUFFRCw4R0FBOEc7SUFDdkcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFlLEVBQUUsV0FBK0I7UUFDdkUsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDakcsTUFBTSxNQUFNLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzVELE1BQU0sT0FBTyxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0QsSUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sTUFBTSxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUU7b0JBQzdGLFFBQVEsQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDO2dCQUNsQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ0wsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLGNBQWM7Z0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1FBQ2xHLENBQUM7UUFDRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUMxSCxDQUFDO0lBRUQsc0RBQXNEO0lBQy9DLEtBQUssQ0FBQyxjQUFjO1FBQ3pCLE1BQU0sTUFBTSxHQUFHLE1BQU0sa0JBQWtCLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsbUJBQW1CLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5RyxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELHdFQUF3RTtJQUNqRSxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQWUsRUFBRSxXQUFxQztRQUM3RSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMseUJBQXlCLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsMkNBQTJDLENBQUMsQ0FBQztRQUNuSCxNQUFNLE1BQU0sR0FBRyxNQUFNLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUM3RSxJQUFJLFdBQVcsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUMzQixJQUFJLE1BQU07Z0JBQUUsT0FBTztZQUNuQixNQUFNLFFBQVEsR0FBRyxNQUFNLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ3RGLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxVQUFVLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxtQkFBbUI7bUJBQ3hFLENBQUMsQ0FBQyxNQUFNLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RFLE1BQU0sSUFBSSxLQUFLLENBQUMsc0RBQXNELENBQUMsQ0FBQztZQUMxRSxDQUFDO1lBQ0QsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU87UUFDcEIsTUFBTSxPQUFPLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDM0UsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxNQUFNLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ2xHLE1BQU0sSUFBSSxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQztRQUN6RSxDQUFDO0lBQ0gsQ0FBQztJQUVELG9GQUFvRjtJQUM3RSxLQUFLLENBQUMsV0FBVyxDQUFDLFFBQXlDO1FBQ2hFLE1BQU0sTUFBTSxHQUE4QjtZQUN4QyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDekYsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQy9GLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNwRyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7U0FDdEYsQ0FBQztRQUNGLElBQUksTUFBTSxlQUFlLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxrQkFBa0I7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7UUFDeEgsTUFBTSxRQUFRLEdBQUcsTUFBTSxlQUFlLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU07WUFDeEcsU0FBUyxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkQsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLFVBQVUsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLG1CQUFtQjtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQztJQUMzSSxDQUFDO0lBRUQscUNBQXFDO0lBQzlCLEtBQUssQ0FBQyxNQUFNO1FBQ2pCLE1BQU0sTUFBTSxHQUFHLE1BQU0sZUFBZSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBQ3BILE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQzdCLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzFELE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7Z0JBQy9GLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ2xGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGlIQUFpSDtJQUMxRyxLQUFLLENBQUMsbUJBQW1CLENBQUMsU0FBaUIsRUFBRSxLQUFXO1FBQzdELE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxVQUFVLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RyxDQUFDO0lBRUQsK0dBQStHO0lBQ3hHLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxTQUFpQjtRQUNqRCxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsR0FBRyxPQUFPLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQsNERBQTREO0lBQ3JELEtBQUssQ0FBQyxXQUFXLENBQUMsU0FBaUI7UUFDeEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxlQUFlLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUNwQixNQUFNLE9BQU8sR0FBRyxNQUFNLGVBQWUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDeEUsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxNQUFNLGVBQWUsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNqRyxNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7UUFDM0QsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsZUFBZSxDQUFDLFNBQWlCLEVBQUUsU0FBOEM7UUFDN0YsTUFBTSxNQUFNLEdBQUcsTUFBTSxlQUFlLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxNQUFNO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sTUFBTSxHQUFHLE1BQU0sZUFBZSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQzlGLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxjQUFjO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7SUFFTSxLQUFLLENBQUMsS0FBSztRQUNoQixNQUFNLE1BQU0sR0FBYyxFQUFFLENBQUM7UUFDN0IsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDO2dCQUFDLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUFDLENBQUM7WUFBQyxPQUFPLFFBQVEsRUFBRSxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFBQyxDQUFDO1lBQ2hGLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO1FBQzVCLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUM7Z0JBQUMsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQUMsQ0FBQztZQUFDLE9BQU8sUUFBUSxFQUFFLENBQUM7Z0JBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUFDLENBQUM7WUFDL0UsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7UUFDNUIsQ0FBQztRQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO1FBQy9CLElBQUksV0FBVyxLQUFLLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMvQixLQUFLLE1BQU0sS0FBSyxJQUFJLFdBQVc7Z0JBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDakcsV0FBVyxHQUFHLFNBQVMsQ0FBQztRQUMxQixDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsTUFBTTtZQUFFLE1BQU0sSUFBSSxjQUFjLENBQUMsTUFBTSxFQUFFLHdDQUF3QyxDQUFDLENBQUM7SUFDaEcsQ0FBQztJQUVPLEtBQUssQ0FBQyxZQUFZO1FBQ3hCLE1BQU0sTUFBTSxHQUFHLEtBQUssRUFBRSxXQUFtQyxFQUEyQixFQUFFO1lBQ3BGLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBQ3pILElBQUksR0FBRyxDQUFDLFVBQVUsS0FBSyxFQUFFO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztZQUN6RixPQUFPLEVBQUUsY0FBYyxFQUFFLFdBQVcsQ0FBQyxjQUFjLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQzNFLENBQUMsQ0FBQztRQUNGLE1BQU0sUUFBUSxHQUFHLE1BQU0sa0JBQWtCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQy9FLElBQUksUUFBUTtZQUFFLE9BQU8sTUFBTSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUM1RSxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDNUUsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDM0MsSUFBSSxzQkFBOEIsQ0FBQztRQUNuQyxJQUFJLENBQUM7WUFBQyxzQkFBc0IsR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQUMsQ0FBQztnQkFDekYsQ0FBQztZQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQyxDQUFDO1FBQ3hCLE1BQU0sUUFBUSxHQUFHLE1BQU0sa0JBQWtCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLHNCQUFzQixFQUFFLENBQUMsQ0FBQztRQUNoSCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDbkMsTUFBTSxLQUFLLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDNUUsSUFBSSxDQUFDLEtBQUs7Z0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO1lBQ3hFLE9BQU8sTUFBTSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM3RCxDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDN0UsSUFBSSxDQUFDLE1BQU07WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7UUFDM0UsT0FBTyxNQUFNLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFTyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQWUsRUFBRSxXQUFXLEdBQUcsMEJBQTBCLENBQUMsT0FBTyxDQUFDO1FBQzNGLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFCLE1BQU0sUUFBUSxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzdFLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzVELE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM1SCxDQUFDO1FBQ0QsSUFBSSxNQUFNLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksbUJBQW1CO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1FBQzNILE1BQU0sVUFBVSxHQUFHLGFBQWEsRUFBRSxDQUFDO1FBQ25DLE1BQU0sUUFBUSxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQztZQUNySCxVQUFVLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNuQyxNQUFNLEtBQUssR0FBRyxNQUFNLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUMxRSxJQUFJLENBQUMsS0FBSztnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7WUFDdEUsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUgsQ0FBQztRQUNELE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUM3RSxDQUFDO0lBRUQscUdBQXFHO0lBQzdGLFVBQVUsQ0FBQyxPQUFlLEVBQUUsYUFBcUI7UUFDdkQsT0FBTyxhQUFhLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxPQUFPLElBQUksYUFBYSxFQUFFLENBQUM7SUFDaEcsQ0FBQztJQUVPLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBZSxFQUFFLGFBQXFCLEVBQUUsYUFBcUI7UUFDOUUsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDO1lBQUMsT0FBTyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQUMsQ0FBQztnQkFDN0UsQ0FBQztZQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQyxDQUFDO0lBQzVCLENBQUM7SUFFTyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQStCO1FBQ2xELE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRSxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakgsSUFBSSxDQUFDO1lBQ0gsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdkQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7Z0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1lBQ3hHLE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUM7Z0JBQVMsQ0FBQztZQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFBQyxDQUFDO0lBQzlCLENBQUM7Q0FDRjtBQUVELE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxpQkFBeUIsRUFBVSxFQUFFLENBQUMsYUFBYSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztBQUUvSCxNQUFNLGdCQUFnQixHQUFHLENBQUMsT0FBZSxFQUFRLEVBQUU7SUFDakQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHNFQUFzRSxDQUFDLENBQUM7QUFDckksQ0FBQyxDQUFDO0FBRUYsTUFBTSxhQUFhLEdBQUcsR0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDIn0=
|
|
621
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5wcm94eXN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvY2xhc3Nlcy5wcm94eXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN2RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN2RixPQUFPLEVBQUUsNEJBQTRCLEVBQStCLE1BQU0sK0JBQStCLENBQUM7QUFFMUcsT0FBTyxFQUNMLHNCQUFzQixFQUN0QiwwQkFBMEIsRUFDMUIsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUNsQixzQkFBc0IsRUFDdEIseUJBQXlCLEdBSTFCLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsTUFBTSxtQkFBbUIsR0FBRyxFQUFFLENBQUM7QUFDL0IseUZBQXlGO0FBQ3pGLE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxDQUFDO0FBUS9CLDRFQUE0RTtBQUM1RSxNQUFNLE9BQU8sbUJBQW1CO0lBQ3ZCLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBZSxFQUFFLFlBQXdCO1FBQ3pELE1BQU0sVUFBVSxHQUFHLE1BQU0sT0FBTyxDQUFDLFdBQVcsQ0FBQyw2QkFBNkIsQ0FBQyxPQUFPLEVBQUUsWUFB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
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
import type { IWorkerBridgeCommand, IWorkerProcessSnapshot } from './functions.workerprocessproof.js';
|
|
3
|
+
/** The Claude process a kept binding was last proved against: its PID, start and the digest of its whole snapshot. */
|
|
4
|
+
export interface IWorkerCallerBindingProcess {
|
|
5
|
+
pid: number;
|
|
6
|
+
startTicks: string;
|
|
7
|
+
snapshotDigest: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* What the controller keeps of a fleet Claude worker's current caller launch, so a restarted controller proves the
|
|
11
|
+
* worker's bridge again instead of forgetting it. Never a credential, never the launch id or generation themselves:
|
|
12
|
+
* the overlay holds those, and a bridge presents them; the record keeps their digests to find and check the launch.
|
|
13
|
+
*/
|
|
14
|
+
export interface IWorkerCallerBindingDocument {
|
|
15
|
+
/** The fleet worker's id: a worker keeps one binding, its current launch's. */
|
|
16
|
+
id: string;
|
|
17
|
+
projectId: string;
|
|
18
|
+
harnessId: 'claude';
|
|
19
|
+
/** SHA-256 digests (base64url) of the launch id and of its generation. */
|
|
20
|
+
launchDigest: string;
|
|
21
|
+
generationDigest: string;
|
|
22
|
+
/** The bridge command approved when the launch was prepared, and the Claude Code executable it was proved against. */
|
|
23
|
+
command: IWorkerBridgeCommand;
|
|
24
|
+
claudeExecutable: string;
|
|
25
|
+
revision: number;
|
|
26
|
+
/** Once bound: the background job, its session, and the job's process when one was proved. */
|
|
27
|
+
binding?: {
|
|
28
|
+
nativeSessionId: string;
|
|
29
|
+
jobId: string;
|
|
30
|
+
process?: IWorkerCallerBindingProcess;
|
|
31
|
+
};
|
|
32
|
+
updateId: string;
|
|
33
|
+
}
|
|
34
|
+
export type TWorkerCallerBindingRecord = Omit<IWorkerCallerBindingDocument, 'updateId'>;
|
|
35
|
+
/** Where the controller keeps the bindings of fleet Claude launches. */
|
|
36
|
+
export interface IWorkerCallerBindingStore {
|
|
37
|
+
/** The binding kept for the launch whose id has the digest `launchDigestArg`. */
|
|
38
|
+
find(launchDigestArg: string): Promise<TWorkerCallerBindingRecord | undefined>;
|
|
39
|
+
/** Keeps `recordArg` as its worker's binding; another launch's binding of the worker is replaced. */
|
|
40
|
+
save(recordArg: TWorkerCallerBindingRecord): Promise<void>;
|
|
41
|
+
/** Deletes the worker's binding; with `launchDigestArg`, only while it is that launch's. */
|
|
42
|
+
delete(workerIdArg: string, launchDigestArg?: string): Promise<void>;
|
|
43
|
+
}
|
|
44
|
+
export declare const workerCallerDigest: (valueArg: string) => string;
|
|
45
|
+
export declare const workerProcessSnapshotDigest: (snapshotArg: IWorkerProcessSnapshot) => string;
|
|
46
|
+
export declare class WorkerCallerBindingModel extends plugins.nosqldb.SmartDataDbDoc<WorkerCallerBindingModel, IWorkerCallerBindingDocument> {
|
|
47
|
+
static exact: plugins.nosqldb.TExact<WorkerCallerBindingModel>;
|
|
48
|
+
id: string;
|
|
49
|
+
projectId: string;
|
|
50
|
+
harnessId: 'claude';
|
|
51
|
+
launchDigest: string;
|
|
52
|
+
generationDigest: string;
|
|
53
|
+
command: IWorkerBridgeCommand;
|
|
54
|
+
claudeExecutable: string;
|
|
55
|
+
revision: number;
|
|
56
|
+
binding?: IWorkerCallerBindingDocument['binding'];
|
|
57
|
+
updateId: string;
|
|
58
|
+
}
|
|
59
|
+
/** The kept bindings in the controller's store; the auth store owns the model manager and database. Writes run one at a time. */
|
|
60
|
+
export declare class WorkerCallerBindingStore implements IWorkerCallerBindingStore {
|
|
61
|
+
private mutationTail;
|
|
62
|
+
find(launchDigestArg: string): Promise<TWorkerCallerBindingRecord | undefined>;
|
|
63
|
+
save(recordArg: TWorkerCallerBindingRecord): Promise<void>;
|
|
64
|
+
delete(workerIdArg: string, launchDigestArg?: string): Promise<void>;
|
|
65
|
+
private mutate;
|
|
66
|
+
}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
2
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
3
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
4
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
5
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
6
|
+
var _, done = false;
|
|
7
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
8
|
+
var context = {};
|
|
9
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
10
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
11
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
12
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
13
|
+
if (kind === "accessor") {
|
|
14
|
+
if (result === void 0) continue;
|
|
15
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
16
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
17
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
18
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
19
|
+
}
|
|
20
|
+
else if (_ = accept(result)) {
|
|
21
|
+
if (kind === "field") initializers.unshift(_);
|
|
22
|
+
else descriptor[key] = _;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
26
|
+
done = true;
|
|
27
|
+
};
|
|
28
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
29
|
+
var useValue = arguments.length > 2;
|
|
30
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
31
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
32
|
+
}
|
|
33
|
+
return useValue ? value : void 0;
|
|
34
|
+
};
|
|
35
|
+
import * as plugins from './plugins.js';
|
|
36
|
+
export const workerCallerDigest = (valueArg) => plugins.crypto.createHash('sha256').update(valueArg).digest('base64url');
|
|
37
|
+
export const workerProcessSnapshotDigest = (snapshotArg) => workerCallerDigest(JSON.stringify([
|
|
38
|
+
snapshotArg.pid, snapshotArg.parentPid, snapshotArg.startTicks, snapshotArg.executable, snapshotArg.arguments
|
|
39
|
+
]));
|
|
40
|
+
const digest = plugins.z.string().regex(/^[A-Za-z0-9_-]{43}$/u);
|
|
41
|
+
const absolutePath = plugins.z.string().min(2).max(4096).refine((valueArg) => plugins.path.isAbsolute(valueArg) && !valueArg.includes('\0'));
|
|
42
|
+
const documentSchema = plugins.z.object({
|
|
43
|
+
id: plugins.z.string().min(3).max(1024), projectId: plugins.z.string().regex(/^[A-Za-z0-9_.:-]{1,256}$/u),
|
|
44
|
+
harnessId: plugins.z.literal('claude'), launchDigest: digest, generationDigest: digest,
|
|
45
|
+
command: plugins.z.object({ executable: absolutePath, entry: absolutePath,
|
|
46
|
+
arguments: plugins.z.array(plugins.z.string().max(4096)).max(64) }).strict(),
|
|
47
|
+
claudeExecutable: absolutePath, revision: plugins.z.number().int().min(0).max(Number.MAX_SAFE_INTEGER),
|
|
48
|
+
binding: plugins.z.object({ nativeSessionId: plugins.z.string().uuid(), jobId: plugins.z.string().regex(/^[A-Za-z0-9_.:-]{1,256}$/u),
|
|
49
|
+
process: plugins.z.object({ pid: plugins.z.number().int().min(2), startTicks: plugins.z.string().regex(/^\d{1,32}$/u),
|
|
50
|
+
snapshotDigest: digest }).strict().optional() }).strict().optional(),
|
|
51
|
+
updateId: plugins.z.string().uuid(),
|
|
52
|
+
}).strict();
|
|
53
|
+
let WorkerCallerBindingModel = (() => {
|
|
54
|
+
let _classDecorators = [plugins.nosqldb.namedIndex({ name: 'worker_caller_launch', key: { launchDigest: 1 }, options: { unique: true } }), plugins.nosqldb.managed({ collectionName: 'agl_worker_caller_bindings' }), plugins.nosqldb.exactPersistence({ assertDocument: (input) => {
|
|
55
|
+
const doc = documentSchema.parse(input);
|
|
56
|
+
if (!doc.id.startsWith(`${doc.projectId}:`))
|
|
57
|
+
throw new Error('Worker caller binding identity mismatch.');
|
|
58
|
+
if (doc.binding && doc.revision < 1)
|
|
59
|
+
throw new Error('Worker caller binding revision mismatch.');
|
|
60
|
+
} })];
|
|
61
|
+
let _classDescriptor;
|
|
62
|
+
let _classExtraInitializers = [];
|
|
63
|
+
let _classThis;
|
|
64
|
+
let _classSuper = plugins.nosqldb.SmartDataDbDoc;
|
|
65
|
+
let _id_decorators;
|
|
66
|
+
let _id_initializers = [];
|
|
67
|
+
let _id_extraInitializers = [];
|
|
68
|
+
let _projectId_decorators;
|
|
69
|
+
let _projectId_initializers = [];
|
|
70
|
+
let _projectId_extraInitializers = [];
|
|
71
|
+
let _harnessId_decorators;
|
|
72
|
+
let _harnessId_initializers = [];
|
|
73
|
+
let _harnessId_extraInitializers = [];
|
|
74
|
+
let _launchDigest_decorators;
|
|
75
|
+
let _launchDigest_initializers = [];
|
|
76
|
+
let _launchDigest_extraInitializers = [];
|
|
77
|
+
let _generationDigest_decorators;
|
|
78
|
+
let _generationDigest_initializers = [];
|
|
79
|
+
let _generationDigest_extraInitializers = [];
|
|
80
|
+
let _command_decorators;
|
|
81
|
+
let _command_initializers = [];
|
|
82
|
+
let _command_extraInitializers = [];
|
|
83
|
+
let _claudeExecutable_decorators;
|
|
84
|
+
let _claudeExecutable_initializers = [];
|
|
85
|
+
let _claudeExecutable_extraInitializers = [];
|
|
86
|
+
let _revision_decorators;
|
|
87
|
+
let _revision_initializers = [];
|
|
88
|
+
let _revision_extraInitializers = [];
|
|
89
|
+
let _binding_decorators;
|
|
90
|
+
let _binding_initializers = [];
|
|
91
|
+
let _binding_extraInitializers = [];
|
|
92
|
+
let _updateId_decorators;
|
|
93
|
+
let _updateId_initializers = [];
|
|
94
|
+
let _updateId_extraInitializers = [];
|
|
95
|
+
var WorkerCallerBindingModel = class extends _classSuper {
|
|
96
|
+
static { _classThis = this; }
|
|
97
|
+
static {
|
|
98
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
99
|
+
_id_decorators = [plugins.nosqldb.unI()];
|
|
100
|
+
_projectId_decorators = [plugins.nosqldb.svDb()];
|
|
101
|
+
_harnessId_decorators = [plugins.nosqldb.svDb()];
|
|
102
|
+
_launchDigest_decorators = [plugins.nosqldb.svDb()];
|
|
103
|
+
_generationDigest_decorators = [plugins.nosqldb.svDb()];
|
|
104
|
+
_command_decorators = [plugins.nosqldb.svDb()];
|
|
105
|
+
_claudeExecutable_decorators = [plugins.nosqldb.svDb()];
|
|
106
|
+
_revision_decorators = [plugins.nosqldb.svDb()];
|
|
107
|
+
_binding_decorators = [plugins.nosqldb.svDb()];
|
|
108
|
+
_updateId_decorators = [plugins.nosqldb.svDb()];
|
|
109
|
+
__esDecorate(null, null, _id_decorators, { kind: "field", name: "id", static: false, private: false, access: { has: obj => "id" in obj, get: obj => obj.id, set: (obj, value) => { obj.id = value; } }, metadata: _metadata }, _id_initializers, _id_extraInitializers);
|
|
110
|
+
__esDecorate(null, null, _projectId_decorators, { kind: "field", name: "projectId", static: false, private: false, access: { has: obj => "projectId" in obj, get: obj => obj.projectId, set: (obj, value) => { obj.projectId = value; } }, metadata: _metadata }, _projectId_initializers, _projectId_extraInitializers);
|
|
111
|
+
__esDecorate(null, null, _harnessId_decorators, { kind: "field", name: "harnessId", static: false, private: false, access: { has: obj => "harnessId" in obj, get: obj => obj.harnessId, set: (obj, value) => { obj.harnessId = value; } }, metadata: _metadata }, _harnessId_initializers, _harnessId_extraInitializers);
|
|
112
|
+
__esDecorate(null, null, _launchDigest_decorators, { kind: "field", name: "launchDigest", static: false, private: false, access: { has: obj => "launchDigest" in obj, get: obj => obj.launchDigest, set: (obj, value) => { obj.launchDigest = value; } }, metadata: _metadata }, _launchDigest_initializers, _launchDigest_extraInitializers);
|
|
113
|
+
__esDecorate(null, null, _generationDigest_decorators, { kind: "field", name: "generationDigest", static: false, private: false, access: { has: obj => "generationDigest" in obj, get: obj => obj.generationDigest, set: (obj, value) => { obj.generationDigest = value; } }, metadata: _metadata }, _generationDigest_initializers, _generationDigest_extraInitializers);
|
|
114
|
+
__esDecorate(null, null, _command_decorators, { kind: "field", name: "command", static: false, private: false, access: { has: obj => "command" in obj, get: obj => obj.command, set: (obj, value) => { obj.command = value; } }, metadata: _metadata }, _command_initializers, _command_extraInitializers);
|
|
115
|
+
__esDecorate(null, null, _claudeExecutable_decorators, { kind: "field", name: "claudeExecutable", static: false, private: false, access: { has: obj => "claudeExecutable" in obj, get: obj => obj.claudeExecutable, set: (obj, value) => { obj.claudeExecutable = value; } }, metadata: _metadata }, _claudeExecutable_initializers, _claudeExecutable_extraInitializers);
|
|
116
|
+
__esDecorate(null, null, _revision_decorators, { kind: "field", name: "revision", static: false, private: false, access: { has: obj => "revision" in obj, get: obj => obj.revision, set: (obj, value) => { obj.revision = value; } }, metadata: _metadata }, _revision_initializers, _revision_extraInitializers);
|
|
117
|
+
__esDecorate(null, null, _binding_decorators, { kind: "field", name: "binding", static: false, private: false, access: { has: obj => "binding" in obj, get: obj => obj.binding, set: (obj, value) => { obj.binding = value; } }, metadata: _metadata }, _binding_initializers, _binding_extraInitializers);
|
|
118
|
+
__esDecorate(null, null, _updateId_decorators, { kind: "field", name: "updateId", static: false, private: false, access: { has: obj => "updateId" in obj, get: obj => obj.updateId, set: (obj, value) => { obj.updateId = value; } }, metadata: _metadata }, _updateId_initializers, _updateId_extraInitializers);
|
|
119
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
120
|
+
WorkerCallerBindingModel = _classThis = _classDescriptor.value;
|
|
121
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
122
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
123
|
+
}
|
|
124
|
+
id = __runInitializers(this, _id_initializers, void 0);
|
|
125
|
+
projectId = (__runInitializers(this, _id_extraInitializers), __runInitializers(this, _projectId_initializers, void 0));
|
|
126
|
+
harnessId = (__runInitializers(this, _projectId_extraInitializers), __runInitializers(this, _harnessId_initializers, void 0));
|
|
127
|
+
launchDigest = (__runInitializers(this, _harnessId_extraInitializers), __runInitializers(this, _launchDigest_initializers, void 0));
|
|
128
|
+
generationDigest = (__runInitializers(this, _launchDigest_extraInitializers), __runInitializers(this, _generationDigest_initializers, void 0));
|
|
129
|
+
command = (__runInitializers(this, _generationDigest_extraInitializers), __runInitializers(this, _command_initializers, void 0));
|
|
130
|
+
claudeExecutable = (__runInitializers(this, _command_extraInitializers), __runInitializers(this, _claudeExecutable_initializers, void 0));
|
|
131
|
+
revision = (__runInitializers(this, _claudeExecutable_extraInitializers), __runInitializers(this, _revision_initializers, void 0));
|
|
132
|
+
binding = (__runInitializers(this, _revision_extraInitializers), __runInitializers(this, _binding_initializers, void 0));
|
|
133
|
+
updateId = (__runInitializers(this, _binding_extraInitializers), __runInitializers(this, _updateId_initializers, void 0));
|
|
134
|
+
constructor() {
|
|
135
|
+
super(...arguments);
|
|
136
|
+
__runInitializers(this, _updateId_extraInitializers);
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
return WorkerCallerBindingModel = _classThis;
|
|
140
|
+
})();
|
|
141
|
+
export { WorkerCallerBindingModel };
|
|
142
|
+
const ambiguous = (errorArg) => errorArg instanceof plugins.nosqldb.SmartdataExactPersistenceError && errorArg.code === 'ambiguous_write';
|
|
143
|
+
const record = (documentArg) => {
|
|
144
|
+
const { updateId: _updateId, ...rest } = structuredClone(documentArg);
|
|
145
|
+
return rest;
|
|
146
|
+
};
|
|
147
|
+
/** The kept bindings in the controller's store; the auth store owns the model manager and database. Writes run one at a time. */
|
|
148
|
+
export class WorkerCallerBindingStore {
|
|
149
|
+
mutationTail = Promise.resolve();
|
|
150
|
+
async find(launchDigestArg) {
|
|
151
|
+
const stored = await WorkerCallerBindingModel.exact.findStoredOne({ launchDigest: launchDigestArg });
|
|
152
|
+
return stored ? record(WorkerCallerBindingModel.exact.toPersisted(stored)) : undefined;
|
|
153
|
+
}
|
|
154
|
+
save(recordArg) {
|
|
155
|
+
return this.mutate(async () => {
|
|
156
|
+
const candidate = { ...structuredClone(recordArg), updateId: plugins.crypto.randomUUID() };
|
|
157
|
+
const stored = await WorkerCallerBindingModel.exact.findStoredOne({ id: candidate.id });
|
|
158
|
+
try {
|
|
159
|
+
if (stored) {
|
|
160
|
+
const current = WorkerCallerBindingModel.exact.toPersisted(stored);
|
|
161
|
+
if (current.launchDigest === candidate.launchDigest) {
|
|
162
|
+
// A launch's binding only gains or renews its job; it is never unbound again.
|
|
163
|
+
if (current.binding && !candidate.binding)
|
|
164
|
+
throw new Error('A kept worker caller binding cannot lose its job.');
|
|
165
|
+
const result = await WorkerCallerBindingModel.exact.transition({ current: stored, change: (model) => { Object.assign(model, candidate); } });
|
|
166
|
+
if (result.status !== 'transitioned')
|
|
167
|
+
throw new Error('The kept worker caller binding changed concurrently.');
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
const deleted = await WorkerCallerBindingModel.exact.delete({ current: stored });
|
|
171
|
+
if (deleted.status !== 'deleted')
|
|
172
|
+
throw new Error('The kept worker caller binding changed concurrently.');
|
|
173
|
+
}
|
|
174
|
+
const inserted = await WorkerCallerBindingModel.exact.insert(candidate);
|
|
175
|
+
if (WorkerCallerBindingModel.exact.toPersisted(inserted.document).updateId !== candidate.updateId) {
|
|
176
|
+
throw new Error('Another worker caller binding holds this launch.');
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
if (!ambiguous(error))
|
|
181
|
+
throw error;
|
|
182
|
+
const after = await WorkerCallerBindingModel.exact.findStoredOne({ id: candidate.id });
|
|
183
|
+
if (!after || WorkerCallerBindingModel.exact.toPersisted(after).updateId !== candidate.updateId) {
|
|
184
|
+
throw new Error('Keeping the worker caller binding has an uncertain outcome.', { cause: error });
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
delete(workerIdArg, launchDigestArg) {
|
|
190
|
+
return this.mutate(async () => {
|
|
191
|
+
const stored = await WorkerCallerBindingModel.exact.findStoredOne({ id: workerIdArg });
|
|
192
|
+
if (!stored || launchDigestArg !== undefined && WorkerCallerBindingModel.exact.toPersisted(stored).launchDigest !== launchDigestArg)
|
|
193
|
+
return;
|
|
194
|
+
try {
|
|
195
|
+
const result = await WorkerCallerBindingModel.exact.delete({ current: stored });
|
|
196
|
+
if (result.status !== 'deleted')
|
|
197
|
+
throw new Error('The kept worker caller binding changed concurrently.');
|
|
198
|
+
}
|
|
199
|
+
catch (error) {
|
|
200
|
+
if (!ambiguous(error) || await WorkerCallerBindingModel.exact.findStoredOne({ id: workerIdArg }))
|
|
201
|
+
throw error;
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
mutate(operationArg) {
|
|
206
|
+
const task = this.mutationTail.then(operationArg);
|
|
207
|
+
this.mutationTail = task.then(() => undefined, () => undefined);
|
|
208
|
+
return task;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy53b3JrZXJjYWxsZXJiaW5kaW5ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2NsYXNzZXMud29ya2VyY2FsbGVyYmluZGluZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBMkN4QyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLFFBQWdCLEVBQVUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDekksTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyxXQUFtQyxFQUFVLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzVILFdBQVcsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLFNBQVM7Q0FBQyxDQUFDLENBQUMsQ0FBQztBQUVuSCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0FBQ2hFLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FB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
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { type IFleetWorkerCallerHooks, type TFleetWorkerCallerLaunch, type TFleetWorkerCallerBinding, type IWorkerCallerReadiness, type TWorkerCallerEnrollment, type IWorkerCallerEnrollmentResponse, type IConfigurationMaster, type IControllerMcpCaller, type IControllerMcpWireCaller } from '../dist_ts_interfaces/index.js';
|
|
1
|
+
import { type IFleetWorkerCallerHooks, type TFleetWorkerCallerLaunch, type TFleetWorkerCallerBinding, type IWorkerCallerReadiness, type TWorkerCallerEnrollment, type IWorkerCallerEnrollmentResponse, type IConfigurationMaster, type IControllerMcpCaller, type IControllerMcpWireCaller, type IWorkerClaudeJobRequest, type TWorkerClaudeJobObservation } from '../dist_ts_interfaces/index.js';
|
|
2
2
|
import { ControllerMcpCallerRegistry } from './classes.mcpcallerregistry.js';
|
|
3
|
-
import { resolveWorkerBridgeCommand, resolveClaudeWorkerExecutable, verifyClaudeWorkerProcess, verifyWorkerBridge, type IWorkerCallerConnection, type IWorkerProcessSnapshot } from './functions.workerprocessproof.js';
|
|
3
|
+
import { resolveWorkerBridgeCommand, resolveClaudeWorkerExecutable, verifyClaudeWorkerProcess, readWorkerBridge, verifyWorkerBridge, type IWorkerCallerConnection, type IWorkerProcessSnapshot } from './functions.workerprocessproof.js';
|
|
4
|
+
import { type IWorkerCallerBindingStore } from './classes.workercallerbindings.js';
|
|
4
5
|
export interface IWorkerCodexCallerOrigin {
|
|
5
6
|
parent: IWorkerProcessSnapshot;
|
|
6
7
|
isCurrent(): Promise<boolean>;
|
|
@@ -18,11 +19,21 @@ export interface IControllerWorkerCallerOptions {
|
|
|
18
19
|
harnessId: 'codex';
|
|
19
20
|
}>): Promise<IWorkerCodexCallerOrigin>;
|
|
20
21
|
processProof?: IWorkerCallerProcessProof;
|
|
22
|
+
/** Keeps the bindings of fleet Claude launches, so a restarted controller proves their bridges again; absent keeps them in memory. */
|
|
23
|
+
bindings?: IWorkerCallerBindingStore;
|
|
24
|
+
/**
|
|
25
|
+
* A fresh read of the Claude background job a launch is bound to, from the fleet's own inventory, one read at a time.
|
|
26
|
+
* Without it a bridge of a process that replaced the bound one stays pending.
|
|
27
|
+
*/
|
|
28
|
+
observeClaudeJob?(request: IWorkerClaudeJobRequest): Promise<TWorkerClaudeJobObservation>;
|
|
29
|
+
/** Where the reason a worker enrollment stays pending is written once; the controller log by default. */
|
|
30
|
+
log?(line: string): void;
|
|
21
31
|
}
|
|
22
32
|
export interface IWorkerCallerProcessProof {
|
|
23
33
|
resolveCommand: typeof resolveWorkerBridgeCommand;
|
|
24
34
|
resolveClaude: typeof resolveClaudeWorkerExecutable;
|
|
25
35
|
verifyClaude: typeof verifyClaudeWorkerProcess;
|
|
36
|
+
readBridge: typeof readWorkerBridge;
|
|
26
37
|
verifyBridge: typeof verifyWorkerBridge;
|
|
27
38
|
}
|
|
28
39
|
export declare class ControllerWorkerCallers implements IFleetWorkerCallerHooks {
|
|
@@ -30,8 +41,15 @@ export declare class ControllerWorkerCallers implements IFleetWorkerCallerHooks
|
|
|
30
41
|
private readonly launches;
|
|
31
42
|
private readonly sessions;
|
|
32
43
|
private readonly challenges;
|
|
44
|
+
/** Each worker's current launch, prepared by this controller or kept from before its restart. */
|
|
45
|
+
private readonly workers;
|
|
46
|
+
/** Per worker, the chain its kept binding's writes, deletion and restoration run on, one at a time. */
|
|
47
|
+
private readonly workerTails;
|
|
48
|
+
/** Pending reasons logged for launches this controller does not hold, by launch digest and reason. */
|
|
49
|
+
private readonly loggedUnknown;
|
|
33
50
|
private closed;
|
|
34
51
|
private readonly proof;
|
|
52
|
+
private readonly log;
|
|
35
53
|
constructor(options: IControllerWorkerCallerOptions);
|
|
36
54
|
prepareWorkerCaller(launchArg: TFleetWorkerCallerLaunch): ReturnType<IFleetWorkerCallerHooks['prepareWorkerCaller']>;
|
|
37
55
|
bindWorkerCaller(bindingArg: TFleetWorkerCallerBinding): ReturnType<IFleetWorkerCallerHooks['bindWorkerCaller']>;
|
|
@@ -40,6 +58,49 @@ export declare class ControllerWorkerCallers implements IFleetWorkerCallerHooks
|
|
|
40
58
|
enroll(requestArg: TWorkerCallerEnrollment, connectionArg?: IWorkerCallerConnection): Promise<IWorkerCallerEnrollmentResponse>;
|
|
41
59
|
admit(wireArg: IControllerMcpWireCaller | undefined, connectionArg?: IWorkerCallerConnection): Promise<IWorkerCallerLease>;
|
|
42
60
|
close(): Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* Binds `recordArg` to `bindingArg`, inside its serial chain: a Claude launch to its background job and, when it has
|
|
63
|
+
* one, the job's process; a Codex launch to its thread on the proved origin. The kept binding is written first.
|
|
64
|
+
*/
|
|
65
|
+
private bind;
|
|
66
|
+
/**
|
|
67
|
+
* Enrolls the bridge of a Claude launch: against the process the launch is bound to, or, when that process is gone or
|
|
68
|
+
* replaced, after the fleet proved the bridge's process to be the next process of the same job.
|
|
69
|
+
*/
|
|
70
|
+
private enrollClaude;
|
|
71
|
+
/**
|
|
72
|
+
* Proves the bridge's process to be the current process of the job the launch is bound to, from a fresh inventory the
|
|
73
|
+
* fleet reads, and binds the launch to it at the current revision. A bridge refused for good is remembered for its
|
|
74
|
+
* process's life, one refused for a reason that may pass for a short while; neither is proved again at every call.
|
|
75
|
+
*/
|
|
76
|
+
private reprove;
|
|
77
|
+
/** Whether the Claude process `processArg` the launch was proved against still runs, unchanged. */
|
|
78
|
+
private processStands;
|
|
79
|
+
/**
|
|
80
|
+
* The launch a restarted controller kept for a bridge that presents it, as it was bound: found by its id's digest,
|
|
81
|
+
* checked against its generation's, and only while it is still its worker's current launch. It is restored
|
|
82
|
+
* unverified: its bridge enrolls only after a fresh inventory shows the job still the worker's, in the kept process
|
|
83
|
+
* when that still runs unchanged, or in the bridge's process, which then proves itself as the job's next process.
|
|
84
|
+
*/
|
|
85
|
+
private restore;
|
|
86
|
+
/** The kept process of a restored launch while it still runs as it was proved: the same PID, start and snapshot. */
|
|
87
|
+
private keptProcess;
|
|
88
|
+
/** Keeps the binding of a Claude launch at `revisionArg`: prepared, or bound to `bindingArg`. Refused once the launch is revoked. */
|
|
89
|
+
private keep;
|
|
90
|
+
/** The one non-secret stdio `agl` MCP server the Configuration master defines for `harnessArg`. */
|
|
91
|
+
private approvedServer;
|
|
92
|
+
/** The bridge command this controller approves now for Claude launches, resolved from its own configured `agl` entry. */
|
|
93
|
+
private currentCommand;
|
|
94
|
+
/** Runs `operationArg` on the worker's chain: kept-binding writes, deletion and restoration of one worker never interleave. */
|
|
95
|
+
private withWorker;
|
|
96
|
+
/** Whether the launch was revoked, also by this controller closing; a method, so a check after an await reads the state again. */
|
|
97
|
+
private revoked;
|
|
98
|
+
private markRevoked;
|
|
99
|
+
private settleRevocation;
|
|
100
|
+
/** Writes once per launch and reason why its bridge's enrollment stays pending; never a credential or the launch id. */
|
|
101
|
+
private logPending;
|
|
102
|
+
/** As `logPending`, for a launch this controller does not hold. */
|
|
103
|
+
private logUnknown;
|
|
43
104
|
private enrollCredential;
|
|
44
105
|
private challenge;
|
|
45
106
|
private runChallenge;
|