@voyantjs/legal 0.2.0 → 0.3.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/dist/contracts/routes.d.ts +1 -1
- package/dist/contracts/service-contracts.d.ts +1234 -0
- package/dist/contracts/service-contracts.d.ts.map +1 -0
- package/dist/contracts/service-contracts.js +233 -0
- package/dist/contracts/service-series.d.ts +68 -0
- package/dist/contracts/service-series.d.ts.map +1 -0
- package/dist/contracts/service-series.js +34 -0
- package/dist/contracts/service-shared.d.ts +32 -0
- package/dist/contracts/service-shared.d.ts.map +1 -0
- package/dist/contracts/service-shared.js +142 -0
- package/dist/contracts/service-templates.d.ts +415 -0
- package/dist/contracts/service-templates.d.ts.map +1 -0
- package/dist/contracts/service-templates.js +108 -0
- package/dist/contracts/service.d.ts +790 -836
- package/dist/contracts/service.d.ts.map +1 -1
- package/dist/contracts/service.js +8 -568
- package/dist/policies/routes.d.ts +2 -2
- package/dist/policies/service-core.d.ts +1336 -0
- package/dist/policies/service-core.d.ts.map +1 -0
- package/dist/policies/service-core.js +357 -0
- package/dist/policies/service-shared.d.ts +43 -0
- package/dist/policies/service-shared.d.ts.map +1 -0
- package/dist/policies/service-shared.js +30 -0
- package/dist/policies/service.d.ts +28 -76
- package/dist/policies/service.d.ts.map +1 -1
- package/dist/policies/service.js +4 -436
- package/package.json +6 -6
|
@@ -1,44 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
import type { z } from "zod";
|
|
4
|
-
import type { evaluateCancellationInputSchema, insertPolicyAcceptanceSchema, insertPolicyAssignmentSchema, insertPolicyRuleSchema, insertPolicySchema, insertPolicyVersionSchema, policyAcceptanceListQuerySchema, policyAssignmentListQuerySchema, policyListQuerySchema, resolvePolicyInputSchema, updatePolicyAssignmentSchema, updatePolicyRuleSchema, updatePolicySchema, updatePolicyVersionSchema } from "./validation.js";
|
|
5
|
-
type PolicyListQuery = z.infer<typeof policyListQuerySchema>;
|
|
6
|
-
type CreatePolicyInput = z.infer<typeof insertPolicySchema>;
|
|
7
|
-
type UpdatePolicyInput = z.infer<typeof updatePolicySchema>;
|
|
8
|
-
type CreatePolicyVersionInput = z.infer<typeof insertPolicyVersionSchema>;
|
|
9
|
-
type UpdatePolicyVersionInput = z.infer<typeof updatePolicyVersionSchema>;
|
|
10
|
-
type CreatePolicyRuleInput = z.infer<typeof insertPolicyRuleSchema>;
|
|
11
|
-
type UpdatePolicyRuleInput = z.infer<typeof updatePolicyRuleSchema>;
|
|
12
|
-
type CreatePolicyAssignmentInput = z.infer<typeof insertPolicyAssignmentSchema>;
|
|
13
|
-
type UpdatePolicyAssignmentInput = z.infer<typeof updatePolicyAssignmentSchema>;
|
|
14
|
-
type PolicyAssignmentListQuery = z.infer<typeof policyAssignmentListQuerySchema>;
|
|
15
|
-
type CreatePolicyAcceptanceInput = z.infer<typeof insertPolicyAcceptanceSchema>;
|
|
16
|
-
type PolicyAcceptanceListQuery = z.infer<typeof policyAcceptanceListQuerySchema>;
|
|
17
|
-
type EvaluateCancellationInput = z.infer<typeof evaluateCancellationInputSchema>;
|
|
18
|
-
type ResolvePolicyInput = z.infer<typeof resolvePolicyInputSchema>;
|
|
19
|
-
export type CancellationRule = {
|
|
20
|
-
id?: string;
|
|
21
|
-
daysBeforeDeparture: number | null;
|
|
22
|
-
refundPercent: number | null;
|
|
23
|
-
refundType: "cash" | "credit" | "cash_or_credit" | "none" | null;
|
|
24
|
-
flatAmountCents: number | null;
|
|
25
|
-
label: string | null;
|
|
26
|
-
};
|
|
27
|
-
export type CancellationResult = {
|
|
28
|
-
refundPercent: number;
|
|
29
|
-
refundCents: number;
|
|
30
|
-
refundType: "cash" | "credit" | "cash_or_credit" | "none";
|
|
31
|
-
appliedRule: CancellationRule | null;
|
|
32
|
-
};
|
|
33
|
-
/**
|
|
34
|
-
* Evaluate a cancellation policy against a context. Rules are sorted descending
|
|
35
|
-
* by `daysBeforeDeparture`; the first rule whose threshold is satisfied by the
|
|
36
|
-
* input's `daysBeforeDeparture` is applied. `refundPercent` is expressed in
|
|
37
|
-
* basis points (0-10000 where 10000 = 100%).
|
|
38
|
-
*/
|
|
39
|
-
export declare function evaluateCancellationPolicy(rules: CancellationRule[], input: EvaluateCancellationInput): CancellationResult;
|
|
1
|
+
import { _unused, type CancellationResult, type CancellationRule, evaluateCancellationPolicy } from "./service-shared.js";
|
|
2
|
+
export { _unused, type CancellationResult, type CancellationRule, evaluateCancellationPolicy };
|
|
40
3
|
export declare const policiesService: {
|
|
41
|
-
listPolicies(db: PostgresJsDatabase, query: PolicyListQuery): Promise<{
|
|
4
|
+
listPolicies(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, query: import("./service-shared.js").PolicyListQuery): Promise<{
|
|
42
5
|
data: {
|
|
43
6
|
id: string;
|
|
44
7
|
kind: "other" | "cancellation" | "payment" | "terms_and_conditions" | "privacy" | "refund" | "commission" | "guarantee";
|
|
@@ -55,7 +18,7 @@ export declare const policiesService: {
|
|
|
55
18
|
limit: number;
|
|
56
19
|
offset: number;
|
|
57
20
|
}>;
|
|
58
|
-
getPolicyById(db: PostgresJsDatabase, id: string): Promise<{
|
|
21
|
+
getPolicyById(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, id: string): Promise<{
|
|
59
22
|
id: string;
|
|
60
23
|
kind: "other" | "cancellation" | "payment" | "terms_and_conditions" | "privacy" | "refund" | "commission" | "guarantee";
|
|
61
24
|
name: string;
|
|
@@ -67,7 +30,7 @@ export declare const policiesService: {
|
|
|
67
30
|
createdAt: Date;
|
|
68
31
|
updatedAt: Date;
|
|
69
32
|
} | null>;
|
|
70
|
-
getPolicyBySlug(db: PostgresJsDatabase, slug: string): Promise<{
|
|
33
|
+
getPolicyBySlug(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, slug: string): Promise<{
|
|
71
34
|
id: string;
|
|
72
35
|
kind: "other" | "cancellation" | "payment" | "terms_and_conditions" | "privacy" | "refund" | "commission" | "guarantee";
|
|
73
36
|
name: string;
|
|
@@ -79,7 +42,7 @@ export declare const policiesService: {
|
|
|
79
42
|
createdAt: Date;
|
|
80
43
|
updatedAt: Date;
|
|
81
44
|
} | null>;
|
|
82
|
-
createPolicy(db: PostgresJsDatabase, data: CreatePolicyInput): Promise<{
|
|
45
|
+
createPolicy(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, data: import("./service-shared.js").CreatePolicyInput): Promise<{
|
|
83
46
|
id: string;
|
|
84
47
|
name: string;
|
|
85
48
|
createdAt: Date;
|
|
@@ -91,7 +54,7 @@ export declare const policiesService: {
|
|
|
91
54
|
language: string;
|
|
92
55
|
currentVersionId: string | null;
|
|
93
56
|
} | null>;
|
|
94
|
-
updatePolicy(db: PostgresJsDatabase, id: string, data: UpdatePolicyInput): Promise<{
|
|
57
|
+
updatePolicy(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, id: string, data: import("./service-shared.js").UpdatePolicyInput): Promise<{
|
|
95
58
|
id: string;
|
|
96
59
|
kind: "other" | "cancellation" | "payment" | "terms_and_conditions" | "privacy" | "refund" | "commission" | "guarantee";
|
|
97
60
|
name: string;
|
|
@@ -103,10 +66,10 @@ export declare const policiesService: {
|
|
|
103
66
|
createdAt: Date;
|
|
104
67
|
updatedAt: Date;
|
|
105
68
|
} | null>;
|
|
106
|
-
deletePolicy(db: PostgresJsDatabase, id: string): Promise<{
|
|
69
|
+
deletePolicy(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, id: string): Promise<{
|
|
107
70
|
id: string;
|
|
108
71
|
} | null>;
|
|
109
|
-
listPolicyVersions(db: PostgresJsDatabase, policyId: string): Omit<import("drizzle-orm/pg-core").PgSelectBase<"policy_versions", {
|
|
72
|
+
listPolicyVersions(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, policyId: string): Omit<import("drizzle-orm/pg-core").PgSelectBase<"policy_versions", {
|
|
110
73
|
id: import("drizzle-orm/pg-core").PgColumn<{
|
|
111
74
|
name: string;
|
|
112
75
|
tableName: "policy_versions";
|
|
@@ -565,7 +528,7 @@ export declare const policiesService: {
|
|
|
565
528
|
generated: undefined;
|
|
566
529
|
}, {}, {}>;
|
|
567
530
|
}>, "where" | "orderBy">;
|
|
568
|
-
getPolicyVersionById(db: PostgresJsDatabase, id: string): Promise<{
|
|
531
|
+
getPolicyVersionById(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, id: string): Promise<{
|
|
569
532
|
id: string;
|
|
570
533
|
policyId: string;
|
|
571
534
|
version: number;
|
|
@@ -580,7 +543,7 @@ export declare const policiesService: {
|
|
|
580
543
|
createdAt: Date;
|
|
581
544
|
updatedAt: Date;
|
|
582
545
|
} | null>;
|
|
583
|
-
createPolicyVersion(db: PostgresJsDatabase, policyId: string, data: CreatePolicyVersionInput): Promise<{
|
|
546
|
+
createPolicyVersion(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, policyId: string, data: import("./service-shared.js").CreatePolicyVersionInput): Promise<{
|
|
584
547
|
id: string;
|
|
585
548
|
status: "draft" | "published" | "retired";
|
|
586
549
|
createdAt: Date;
|
|
@@ -595,7 +558,7 @@ export declare const policiesService: {
|
|
|
595
558
|
publishedBy: string | null;
|
|
596
559
|
retiredAt: Date | null;
|
|
597
560
|
} | null>;
|
|
598
|
-
updatePolicyVersion(db: PostgresJsDatabase, versionId: string, data: UpdatePolicyVersionInput): Promise<{
|
|
561
|
+
updatePolicyVersion(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, versionId: string, data: import("./service-shared.js").UpdatePolicyVersionInput): Promise<{
|
|
599
562
|
id: string;
|
|
600
563
|
policyId: string;
|
|
601
564
|
version: number;
|
|
@@ -610,11 +573,7 @@ export declare const policiesService: {
|
|
|
610
573
|
createdAt: Date;
|
|
611
574
|
updatedAt: Date;
|
|
612
575
|
} | null>;
|
|
613
|
-
|
|
614
|
-
* Publish a draft version: retires any currently-published version of the
|
|
615
|
-
* same policy, marks the target as published, updates `policies.currentVersionId`.
|
|
616
|
-
*/
|
|
617
|
-
publishPolicyVersion(db: PostgresJsDatabase, versionId: string): Promise<{
|
|
576
|
+
publishPolicyVersion(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, versionId: string): Promise<{
|
|
618
577
|
status: "not_found";
|
|
619
578
|
version?: undefined;
|
|
620
579
|
} | {
|
|
@@ -638,7 +597,7 @@ export declare const policiesService: {
|
|
|
638
597
|
updatedAt: Date;
|
|
639
598
|
} | null;
|
|
640
599
|
}>;
|
|
641
|
-
retirePolicyVersion(db: PostgresJsDatabase, versionId: string): Promise<{
|
|
600
|
+
retirePolicyVersion(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, versionId: string): Promise<{
|
|
642
601
|
id: string;
|
|
643
602
|
policyId: string;
|
|
644
603
|
version: number;
|
|
@@ -653,7 +612,7 @@ export declare const policiesService: {
|
|
|
653
612
|
createdAt: Date;
|
|
654
613
|
updatedAt: Date;
|
|
655
614
|
} | null>;
|
|
656
|
-
listPolicyRules(db: PostgresJsDatabase, versionId: string): Omit<import("drizzle-orm/pg-core").PgSelectBase<"policy_rules", {
|
|
615
|
+
listPolicyRules(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, versionId: string): Omit<import("drizzle-orm/pg-core").PgSelectBase<"policy_rules", {
|
|
657
616
|
id: import("drizzle-orm/pg-core").PgColumn<{
|
|
658
617
|
name: string;
|
|
659
618
|
tableName: "policy_rules";
|
|
@@ -1182,14 +1141,14 @@ export declare const policiesService: {
|
|
|
1182
1141
|
generated: undefined;
|
|
1183
1142
|
}, {}, {}>;
|
|
1184
1143
|
}>, "where" | "orderBy">;
|
|
1185
|
-
createPolicyRule(db: PostgresJsDatabase, versionId: string, data: CreatePolicyRuleInput): Promise<{
|
|
1144
|
+
createPolicyRule(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, versionId: string, data: import("./service-shared.js").CreatePolicyRuleInput): Promise<{
|
|
1186
1145
|
id: string;
|
|
1187
1146
|
createdAt: Date;
|
|
1188
1147
|
updatedAt: Date;
|
|
1148
|
+
conditions: unknown;
|
|
1149
|
+
label: string | null;
|
|
1189
1150
|
sortOrder: number;
|
|
1190
1151
|
currency: string | null;
|
|
1191
|
-
label: string | null;
|
|
1192
|
-
conditions: unknown;
|
|
1193
1152
|
validFrom: string | null;
|
|
1194
1153
|
validTo: string | null;
|
|
1195
1154
|
policyVersionId: string;
|
|
@@ -1199,7 +1158,7 @@ export declare const policiesService: {
|
|
|
1199
1158
|
refundType: "cash" | "credit" | "cash_or_credit" | "none" | null;
|
|
1200
1159
|
flatAmountCents: number | null;
|
|
1201
1160
|
} | null>;
|
|
1202
|
-
updatePolicyRule(db: PostgresJsDatabase, ruleId: string, data: UpdatePolicyRuleInput): Promise<{
|
|
1161
|
+
updatePolicyRule(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, ruleId: string, data: import("./service-shared.js").UpdatePolicyRuleInput): Promise<{
|
|
1203
1162
|
id: string;
|
|
1204
1163
|
policyVersionId: string;
|
|
1205
1164
|
ruleType: "custom" | "window" | "percentage" | "flat_amount" | "date_range";
|
|
@@ -1216,10 +1175,10 @@ export declare const policiesService: {
|
|
|
1216
1175
|
createdAt: Date;
|
|
1217
1176
|
updatedAt: Date;
|
|
1218
1177
|
} | null>;
|
|
1219
|
-
deletePolicyRule(db: PostgresJsDatabase, ruleId: string): Promise<{
|
|
1178
|
+
deletePolicyRule(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, ruleId: string): Promise<{
|
|
1220
1179
|
id: string;
|
|
1221
1180
|
} | null>;
|
|
1222
|
-
listPolicyAssignments(db: PostgresJsDatabase, query: PolicyAssignmentListQuery): Promise<{
|
|
1181
|
+
listPolicyAssignments(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, query: import("./service-shared.js").PolicyAssignmentListQuery): Promise<{
|
|
1223
1182
|
data: {
|
|
1224
1183
|
id: string;
|
|
1225
1184
|
policyId: string;
|
|
@@ -1240,7 +1199,7 @@ export declare const policiesService: {
|
|
|
1240
1199
|
limit: number;
|
|
1241
1200
|
offset: number;
|
|
1242
1201
|
}>;
|
|
1243
|
-
createPolicyAssignment(db: PostgresJsDatabase, data: CreatePolicyAssignmentInput): Promise<{
|
|
1202
|
+
createPolicyAssignment(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, data: import("./service-shared.js").CreatePolicyAssignmentInput): Promise<{
|
|
1244
1203
|
id: string;
|
|
1245
1204
|
createdAt: Date;
|
|
1246
1205
|
updatedAt: Date;
|
|
@@ -1256,7 +1215,7 @@ export declare const policiesService: {
|
|
|
1256
1215
|
marketId: string | null;
|
|
1257
1216
|
priority: number;
|
|
1258
1217
|
} | null>;
|
|
1259
|
-
updatePolicyAssignment(db: PostgresJsDatabase, id: string, data: UpdatePolicyAssignmentInput): Promise<{
|
|
1218
|
+
updatePolicyAssignment(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, id: string, data: import("./service-shared.js").UpdatePolicyAssignmentInput): Promise<{
|
|
1260
1219
|
id: string;
|
|
1261
1220
|
policyId: string;
|
|
1262
1221
|
scope: "supplier" | "organization" | "channel" | "product" | "market" | "global";
|
|
@@ -1272,15 +1231,10 @@ export declare const policiesService: {
|
|
|
1272
1231
|
createdAt: Date;
|
|
1273
1232
|
updatedAt: Date;
|
|
1274
1233
|
} | null>;
|
|
1275
|
-
deletePolicyAssignment(db: PostgresJsDatabase, id: string): Promise<{
|
|
1234
|
+
deletePolicyAssignment(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, id: string): Promise<{
|
|
1276
1235
|
id: string;
|
|
1277
1236
|
} | null>;
|
|
1278
|
-
|
|
1279
|
-
* Resolve the best-matching policy for a context. Matches candidate
|
|
1280
|
-
* assignments on scope column values and (optional) validity window, then
|
|
1281
|
-
* picks the highest-priority one for the requested policy kind.
|
|
1282
|
-
*/
|
|
1283
|
-
resolvePolicy(db: PostgresJsDatabase, input: ResolvePolicyInput): Promise<{
|
|
1237
|
+
resolvePolicy(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, input: import("./service-shared.js").ResolvePolicyInput): Promise<{
|
|
1284
1238
|
policy: {
|
|
1285
1239
|
id: string;
|
|
1286
1240
|
kind: "other" | "cancellation" | "payment" | "terms_and_conditions" | "privacy" | "refund" | "commission" | "guarantee";
|
|
@@ -1342,8 +1296,8 @@ export declare const policiesService: {
|
|
|
1342
1296
|
updatedAt: Date;
|
|
1343
1297
|
}[];
|
|
1344
1298
|
} | null>;
|
|
1345
|
-
evaluateCancellation(db: PostgresJsDatabase, policyId: string, input: EvaluateCancellationInput): Promise<CancellationResult | null>;
|
|
1346
|
-
listPolicyAcceptances(db: PostgresJsDatabase, query: PolicyAcceptanceListQuery): Promise<{
|
|
1299
|
+
evaluateCancellation(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, policyId: string, input: import("./service-shared.js").EvaluateCancellationInput): Promise<CancellationResult | null>;
|
|
1300
|
+
listPolicyAcceptances(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, query: import("./service-shared.js").PolicyAcceptanceListQuery): Promise<{
|
|
1347
1301
|
data: {
|
|
1348
1302
|
id: string;
|
|
1349
1303
|
policyVersionId: string;
|
|
@@ -1363,7 +1317,7 @@ export declare const policiesService: {
|
|
|
1363
1317
|
limit: number;
|
|
1364
1318
|
offset: number;
|
|
1365
1319
|
}>;
|
|
1366
|
-
recordPolicyAcceptance(db: PostgresJsDatabase, data: CreatePolicyAcceptanceInput): Promise<{
|
|
1320
|
+
recordPolicyAcceptance(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, data: import("./service-shared.js").CreatePolicyAcceptanceInput): Promise<{
|
|
1367
1321
|
id: string;
|
|
1368
1322
|
createdAt: Date;
|
|
1369
1323
|
personId: string | null;
|
|
@@ -1379,6 +1333,4 @@ export declare const policiesService: {
|
|
|
1379
1333
|
acceptedBy: string | null;
|
|
1380
1334
|
} | null>;
|
|
1381
1335
|
};
|
|
1382
|
-
export declare const _unused: typeof inArray;
|
|
1383
|
-
export {};
|
|
1384
1336
|
//# sourceMappingURL=service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/policies/service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/policies/service.ts"],"names":[],"mappings":"AACA,OAAO,EACL,OAAO,EACP,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,0BAA0B,EAC3B,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAAE,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,0BAA0B,EAAE,CAAA;AAE9F,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAE3B,CAAA"}
|