@dra2020/dra-analytics 3.3.2 → 3.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dra-analytics.js +14 -2
- package/dist/dra-analytics.js.map +1 -1
- package/dist/lib/partisan/bias.d.ts +1 -0
- package/lib/partisan/bias.ts +16 -1
- package/package.json +10 -10
package/dist/dra-analytics.js
CHANGED
|
@@ -1737,7 +1737,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
1737
1737
|
return result;
|
|
1738
1738
|
};
|
|
1739
1739
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
1740
|
-
exports.rangeUnearnedSeats = exports.estLocalUnearnedSeats = exports.rangeDisproportionalityAlt = exports.estLocalDisproportionalityAlt = exports.rangeDisproportionality = exports.estLocalDisproportionality = exports.rangeAsymmetry = exports.estLocalAsymmetry = exports.calcGamma = exports.calcMinimalInverseResponsiveness = exports.calcBigR = exports.calcDisproportionality = exports.calcGlobalSymmetry = exports.calcLopsidedOutcomes = exports.calcDeclination = exports.radiansToDegrees = exports.isASweep = exports.keyRVpoints = exports.calcMeanMedianDifference = exports.calcEfficiencyGap = exports.invertSVPoints = exports.inferGeometricSeatsBiasPoints = exports.estGeometricSeatsBias = exports.estVotesBias = exports.estSeatBias = exports.estPartisanBias = exports.calcTurnoutBias = exports.estUnearnedSeats = exports.calcDisproportionalityFromBest = exports.estSeatShare = exports.bestSeatShare = exports.bestSeats = void 0;
|
|
1740
|
+
exports.rangeUnearnedSeats = exports.estLocalUnearnedSeats = exports.rangeDisproportionalityAlt = exports.estLocalDisproportionalityAlt = exports.rangeDisproportionality = exports.estLocalDisproportionality = exports.rangeAsymmetry = exports.estLocalAsymmetry = exports.calcGamma = exports.calcMinimalInverseResponsiveness = exports.calcBigR = exports.calcDisproportionality = exports.calcGlobalSymmetry = exports.calcLopsidedOutcomes = exports.calcDeclination = exports.radiansToDegrees = exports.isASweep = exports.keyRVpoints = exports.calcMeanMedianDifference = exports.calcEfficiencyGapPrime = exports.calcEfficiencyGap = exports.invertSVPoints = exports.inferGeometricSeatsBiasPoints = exports.estGeometricSeatsBias = exports.estVotesBias = exports.estSeatBias = exports.estPartisanBias = exports.calcTurnoutBias = exports.estUnearnedSeats = exports.calcDisproportionalityFromBest = exports.estSeatShare = exports.bestSeatShare = exports.bestSeats = void 0;
|
|
1741
1741
|
const U = __importStar(__webpack_require__(/*! ../utils/all */ "./lib/utils/all.ts"));
|
|
1742
1742
|
const C = __importStar(__webpack_require__(/*! ../rate/dra-config */ "./lib/rate/dra-config.ts"));
|
|
1743
1743
|
const method_1 = __webpack_require__(/*! ./method */ "./lib/partisan/method.ts");
|
|
@@ -1925,6 +1925,18 @@ function calcEfficiencyGap(Vf, Sf, shareType = 0 /* Democratic */) {
|
|
|
1925
1925
|
return efficiencyGap;
|
|
1926
1926
|
}
|
|
1927
1927
|
exports.calcEfficiencyGap = calcEfficiencyGap;
|
|
1928
|
+
// For illustration purposes only
|
|
1929
|
+
// Assumes Democratic vote shares
|
|
1930
|
+
// Alternate specification with winner's bonus (R) heuristic built in:
|
|
1931
|
+
// - By convention, '+' = R bias; '-' = D bias
|
|
1932
|
+
// - If 1 <= R <= 2, EG is undefined (no/acceptable bias).
|
|
1933
|
+
function calcEfficiencyGapPrime(Vf, Sf, R) {
|
|
1934
|
+
let EG = undefined;
|
|
1935
|
+
if (R && ((R > 2) || (R < 1)))
|
|
1936
|
+
EG = (2.0 * (Vf - 0.5)) - (Sf - 0.5);
|
|
1937
|
+
return EG;
|
|
1938
|
+
}
|
|
1939
|
+
exports.calcEfficiencyGapPrime = calcEfficiencyGapPrime;
|
|
1928
1940
|
// MEAN–MEDIAN DIFFERENCE
|
|
1929
1941
|
//
|
|
1930
1942
|
// From PlanScore.org: "The mean-median difference is a party’s median vote share
|
|
@@ -2044,7 +2056,7 @@ exports.calcLopsidedOutcomes = calcLopsidedOutcomes;
|
|
|
2044
2056
|
//
|
|
2045
2057
|
// * gSym is the area of asymmetry between the two curves.
|
|
2046
2058
|
// * The choice of what base to normalize it by is somewhat arbitrary.
|
|
2047
|
-
// * We actually only infer the S–V
|
|
2059
|
+
// * We actually only infer the S–V curve over the range [0.25–0.75] <<< 101 points (not 100!)
|
|
2048
2060
|
// * But dividing by 100 normalizes the area of asymmetry to the area of the SxV unit square.
|
|
2049
2061
|
function calcGlobalSymmetry(dSVpoints, rSVpoints, S50V) {
|
|
2050
2062
|
let gSym = 0.0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dra-analytics.js","mappings":"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","sources":["webpack://dra-analytics/webpack/universalModuleDefinition","webpack://dra-analytics/./lib/all/all.ts","webpack://dra-analytics/./lib/all/compactness.ts","webpack://dra-analytics/./lib/all/equal.ts","webpack://dra-analytics/./lib/all/graph.ts","webpack://dra-analytics/./lib/all/minority.ts","webpack://dra-analytics/./lib/all/partisan.ts","webpack://dra-analytics/./lib/all/rate.ts","webpack://dra-analytics/./lib/all/splitting.ts","webpack://dra-analytics/./lib/all/types.ts","webpack://dra-analytics/./lib/all/utils.ts","webpack://dra-analytics/./lib/compactness/all.ts","webpack://dra-analytics/./lib/compactness/compactness.ts","webpack://dra-analytics/./lib/compactness/features.ts","webpack://dra-analytics/./lib/compactness/kiwysi.ts","webpack://dra-analytics/./lib/compactness/matrix.ts","webpack://dra-analytics/./lib/equal/all.ts","webpack://dra-analytics/./lib/equal/population.ts","webpack://dra-analytics/./lib/graph/all.ts","webpack://dra-analytics/./lib/graph/connected.ts","webpack://dra-analytics/./lib/graph/embedded.ts","webpack://dra-analytics/./lib/graph/settings.ts","webpack://dra-analytics/./lib/graph/utils.ts","webpack://dra-analytics/./lib/minority/all.ts","webpack://dra-analytics/./lib/minority/minority.ts","webpack://dra-analytics/./lib/minority/rpv.ts","webpack://dra-analytics/./lib/partisan/all.ts","webpack://dra-analytics/./lib/partisan/bias.ts","webpack://dra-analytics/./lib/partisan/erf.ts","webpack://dra-analytics/./lib/partisan/method.ts","webpack://dra-analytics/./lib/partisan/responsiveness.ts","webpack://dra-analytics/./lib/rate/all.ts","webpack://dra-analytics/./lib/rate/dra-config.ts","webpack://dra-analytics/./lib/rate/dra-ratings.ts","webpack://dra-analytics/./lib/rate/normalize.ts","webpack://dra-analytics/./lib/rate/settings.ts","webpack://dra-analytics/./lib/splitting/all.ts","webpack://dra-analytics/./lib/splitting/coi.ts","webpack://dra-analytics/./lib/splitting/county-district.ts","webpack://dra-analytics/./lib/splitting/utils.ts","webpack://dra-analytics/./lib/utils/all.ts","webpack://dra-analytics/./lib/utils/array.ts","webpack://dra-analytics/./lib/utils/general.ts","webpack://dra-analytics/./lib/utils/settings.ts","webpack://dra-analytics/external commonjs \"@dra2020/baseclient\"","webpack://dra-analytics/webpack/bootstrap","webpack://dra-analytics/webpack/before-startup","webpack://dra-analytics/webpack/startup","webpack://dra-analytics/webpack/after-startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"dra-analytics\"] = factory();\n\telse\n\t\troot[\"dra-analytics\"] = factory();\n})(global, function() {\nreturn ","import * as Compactness from './compactness';\nexport {Compactness};\n\nimport * as Equal from './equal';\nexport {Equal};\n\nimport * as Graph from './graph';\nexport {Graph};\n\nimport * as Minority from './minority';\nexport {Minority};\n\nimport * as Partisan from './partisan';\nexport {Partisan};\n\nimport * as Rate from './rate';\nexport {Rate};\n\nimport * as Splitting from './splitting';\nexport {Splitting};\n\nimport * as Types from './types';\nexport {Types};\n\nimport * as Utils from './utils';\nexport {Utils};","// Restrict package exports\n\nexport\n{\n // For a DRA-style scorecard\n makeCompactnessScorecard,\n // For the CLI & other users\n calcCompactness,\n calcKIWYSICompactness,\n\n // For legacy compactness calculations\n calcXSymmetry,\n calcYSymmetry,\n calcReock,\n calcBoundingBox,\n calcPolsbyPopper,\n calcConvexHullFeature,\n calcSchwartzberg,\n\n // For KIWYSI compactness scores (only)\n featureizePoly,\n kiwysiScoreShape,\n kiwysiScoreShapes\n} from '../compactness/all';\n\n","// Restrict package exports\n\nexport\n{\n makePopulationScorecard\n} from '../equal/all';","// Restrict package exports\n\nexport\n{\n isConnected,\n isEmbedded\n} from '../graph/all';","// Restrict package exports\n\nexport\n{\n makeMinorityScorecard,\n\n // For RPV analysis\n analyzeRacialVoting\n} from '../minority/all';","// Restrict package exports\n\nexport\n{\n // For a DRA-style scorecard\n makePartisanScorecard,\n // For the CLI & other users\n calcPartisanMetrics,\n\n estSeatProbability,\n estDistrictResponsiveness,\n fptpWin,\n\n avgSVError\n} from '../partisan/all';","// Restrict package exports\n\nexport\n{\n // For DRA-specific ratings\n ratePopulationDeviation,\n rateProportionality,\n rateCompetitiveness,\n rateMinorityRepresentation,\n rateCompactness, rateReock, ratePolsby,\n rateSplitting, rateCountySplitting, rateDistrictSplitting,\n // Legacy\n // rateSplittingLegacy, adjustSplittingRating, rateCountySplittingLegacy, rateDistrictSplittingLegacy,\n\n // For use in DRA client UI\n ratePartisanBias,\n isAntimajoritarian,\n\n popdevThreshold\n} from '../rate/all';","// Restrict package exports\n\nexport\n{\n // For a DRA-style scorecard\n makeSplittingScorecard,\n // For the CLI & other users\n calcSplitting, calcCOISplitting,\n\n // For COI splitting analysis\n effectiveSplits, uncertaintyOfMembership\n} from '../splitting/all';","// Restrict package exports\n\nexport\n{\n // Scorecards\n Scorecard,\n PopulationScorecard,\n PartisanScorecard,\n MinorityScorecard,\n CompactnessScorecard,\n SplittingScorecard,\n Dict,\n\n // Subordinate types \n VfArray, SVpoint, rVpoints,\n\n // For legacy KIWYSI compactness calculations\n PCAModel,\n\n // For minority analyis\n MinorityFilter,\n\n // For RPV analysis\n dictPoint, DemographicVotingByFeature, RPVFactor, RPVAnalysis\n} from '../types/all';","// Restrict package exports\n\nexport\n{\n areRoughlyEqual,\n deepCopy\n} from '../utils/all';\n\n","// Export everything here -- restrict package exports in all/compactness.ts\r\nexport * from './compactness';\r\nexport * from './features';\r\nexport * from './kiwysi';","//\n// COMPACTNESS\n//\n\nimport * as GeoJSON from 'geojson';\nimport {Poly} from '@dra2020/baseclient';\n\nimport {featureizePoly} from './features';\nimport {scoreFeatureSet} from './kiwysi';\nimport * as T from '../types/all';\nimport {ratePolsby, rateReock} from '../rate/dra-ratings';\n\n\n// Use this to get average Reock, Polsby-Popper, and KIWYSI compactness and by district for a set of shapes\n// This is used by DRA\nexport function makeCompactnessScorecard(shapes: GeoJSON.FeatureCollection, bLog: boolean = false): T.CompactnessScorecard\n{\n const pca: T.PCAModel = T.PCAModel.Revised;\n const options: Poly.PolyOptions | undefined = undefined;\n\n // For calculating averages of by-district values\n let totReock: number = 0;\n let totPolsby: number = 0;\n let totKIWYSI: number = 0;\n\n // For returning compactness by district to DRA\n // Note, these use the Cartesian (flat earth) measurements\n let byDistrict: T.Compactness[] = [];\n\n for (let i = 0; i < shapes.features.length; i++)\n {\n const features: T.CompactnessFeatures = featureizePoly(shapes.features[i], options);\n\n const reockFlat: number = features.reockFlat;\n const polsbyFlat: number = features.polsbyFlat;\n\n // Note: In order to compute the by-district compactness that DRA needs,\n // you have to normalize Reock & Polsby–Popper here (vs. in DRA proper)\n // like the overall compactness rating.\n const normalizedReock: number = rateReock(reockFlat);\n const normalizedPolsby: number = ratePolsby(polsbyFlat);\n\n let kiwysiRank: number = scoreFeatureSet(features, pca);\n // Constrain values to the range [1–100]\n kiwysiRank = Math.min(Math.max(kiwysiRank, 1), 100);\n // Raw KIWYSI scores (\"ranks\") are 1–100 where smaller is better\n // Round & invert into scores where bigger is better [0–100]\n const kiwysiScore: number = 100 - Math.round(kiwysiRank) + 1\n\n totReock += reockFlat;\n totPolsby += polsbyFlat;\n totKIWYSI += kiwysiScore;\n\n const measures: T.Compactness = {\n rawReock: reockFlat,\n normalizedReock: normalizedReock,\n rawPolsby: polsbyFlat,\n normalizedPolsby: normalizedPolsby,\n kiwysiScore: kiwysiScore\n };\n\n byDistrict.push(measures);\n }\n\n const avgReock: number = totReock / shapes.features.length;\n const avgPolsby: number = totPolsby / shapes.features.length;\n const avgKWIWYSI: number = Math.round(totKIWYSI / shapes.features.length);\n\n const s: T.CompactnessScorecard = {\n avgReock: avgReock,\n avgPolsby: avgPolsby,\n avgKWIWYSI: avgKWIWYSI,\n byDistrict: byDistrict, // Legacy format\n details: {}, // None\n // score?: \n }\n\n return s;\n}\n\n// CLI\n\n// Calculate Reock & Polsby–Popper for a shape using the typical Cartesian (flat earth) calculations.\n// Also calculate the \"know it when you see it\" rank (smaller is better) that models human perceptions of compactness.\nexport function calcCompactness(shapes: GeoJSON.FeatureCollection): T.CompactnessJSONReady\n{\n const pca: T.PCAModel = T.PCAModel.Revised;\n const options: Poly.PolyOptions | undefined = undefined;\n\n // For calculating averages of by-district values\n let totReock: number = 0;\n let totPolsby: number = 0;\n let totKIWYSI: number = 0;\n\n let byDistrict: T.CompactnessAlt[] = [];\n\n for (let i = 0; i < shapes.features.length; i++)\n {\n const features: T.CompactnessFeatures = featureizePoly(shapes.features[i], options);\n\n const reockFlat: number = features.reockFlat;\n const polsbyFlat: number = features.polsbyFlat;\n\n // Raw KIWYSI scores (\"ranks\") are 1–100 where smaller is better\n let kiwysiRank: number = scoreFeatureSet(features, pca);\n // Constrain values to the range [1–100]\n kiwysiRank = Math.min(Math.max(kiwysiRank, 1), 100);\n\n totReock += reockFlat;\n totPolsby += polsbyFlat;\n totKIWYSI += kiwysiRank;\n\n const c: T.CompactnessAlt = {\n reock: reockFlat,\n polsby: polsbyFlat,\n kiwysiRank: kiwysiRank\n };\n\n byDistrict.push(c);\n }\n\n const avgReock: number = totReock / shapes.features.length;\n const avgPolsby: number = totPolsby / shapes.features.length;\n const avgKWIWYSI: number = Math.round(totKIWYSI / shapes.features.length);\n\n const out: T.CompactnessJSONReady = {\n avgReock: avgReock,\n avgPolsby: avgPolsby,\n avgKWIWYSI: avgKWIWYSI,\n byDistrict: byDistrict\n }\n\n return out;\n}\n","//\n// COMPACTNESS \"FEATURES\" (METRICS)\n//\n// Measures of compactness compare district shapes to various ideally compact\n// benchmarks, such as circles. All else equal, more compact districts are better.\n\n\nimport {Util, Poly} from '@dra2020/baseclient';\n\nimport * as T from '../types/all';\n\n\n// FEATURES (FOR AN ML MODEL)\n//\n// The 6 \"smart\" features from Kaufman & King's \"know it when you see it\" (KIWYSI)\n// compactness model plus Schwartzberg:\n//\n// 1 - sym_x (X-SYMMETRY)\n// 2 - sym_y (Y-SYMMETRY)\n// 3 - reock (REOCK)\n// 4 - bbox (BOUNDING-BOX)\n// 5 - polsby (POLSBYPOPPER)\n// 6 - hull (Hull(D))\n// 7 - schwartzberg (SCHWARTZBERG)\n\n// FEATURE 1: X-SYMMETRY - The same as Y-SYMMETRY except reflect the district D\n// around a horizontal line going through the centroid. See below.\n\nexport function calcXSymmetry(poly: any): number\n{\n const [cx,] = meanCentroid(poly);\n const sym_x = calcSymmetry(poly, reflectOverX(cx))\n\n return sym_x;\n}\n\n\n// FEATURE 2: Y-SYMMETRY - The area of a district overlapping with its\n// reflection around a vertical line going through the centroid, divided by\n// the area of the district. Values range [1–2].\n\n// 1. Find the centroid\n// 2. Take the area of the district\n// 3. Flip the shape about its x or y axis, running through the centroid\n// 4. Calculate the union of the original shape and its mirror\n// 5. Take the ratio of the area of that union* and the area of the original shape\n\nexport function calcYSymmetry(poly: any): number\n{\n const [, cy] = meanCentroid(poly);\n const sym_y = calcSymmetry(poly, reflectOverY(cy))\n\n return sym_y;\n}\n\nfunction calcSymmetry(poly: any, transformFn: any): number\n{\n const polyarrPoints = poly.geometry.coordinates;\n\n let transformedPoly = Poly.polyTransform(poly, transformFn);\n transformedPoly = Poly.polyRewindRings(transformedPoly);\n const reflectedarrPoints = Poly.polyUnpack(transformedPoly);\n\n const unionedPoly = Poly.unionPolys([polyarrPoints, reflectedarrPoints]);\n\n const area: number = Poly.polyArea(poly);\n const unionedArea: number = Poly.polyArea(unionedPoly);\n\n return unionedArea / area;\n}\n\nfunction meanCentroid(poly: any): T.arrPoint\n{\n const X = 0, Y = 1;\n\n let n: number = 0;\n let x_tot: number = 0;\n let y_tot: number = 0;\n\n let coords: any = poly.geometry.coordinates;\n if (Util.depthof(coords) == 4) coords = [coords]; // normalize to multipolygon\n\n const nPolys: number = coords.length;\n for (let i = 0; i < nPolys; i++) // for each polygon\n {\n const nRings: number = coords[i].length;\n\n for (let j = 0; j < nRings; j++) // for each ring\n { // do\n if (j > 0) continue; // skip the holes\n\n for (let pt of coords[i][j]) // for each arrPoint\n { // do\n n += 1;\n x_tot += pt[X];\n y_tot += pt[Y];\n }\n }\n }\n\n const centroid: T.arrPoint = [x_tot / n, y_tot / n];\n\n return centroid;\n}\n\nfunction reflectOverX(x0: number): any\n{\n return function (pt: T.arrPoint): T.arrPoint\n {\n const [x, y] = pt;\n\n return [2 * x0 - x, y];\n }\n}\n\nfunction reflectOverY(y0: number): any\n{\n return function (pt: T.arrPoint): T.arrPoint\n {\n const [x, y] = pt;\n\n return [x, 2 * y0 - y];\n }\n}\n\n\n// FEATURE 3: REOCK - Reock is the primary measure of the dispersion of district\n// shapes, calculated as “the area of the distric to the area of the minimum spanning\n// circle that can enclose the district.”\n//\n// R = A / A(Minimum Bounding Circle)\n// R = A / (π * (D / 2)2)\n//\n// R = 4A / πD2\n//\n// where A is the area of the district and D is the diameter of the minimum bounding circle.\n\nexport function calcReock(area: number, diameter: number): number\n{\n return (4 * area) / (Math.PI * diameter ** 2);\n}\n\n\n// FEATURE 4: \"BOUNDING-BOX\" is shorthand here for the ratio of the area of the\n// district to the area of the minimum bounding box of the district. It's not a\n// simple bounding box.\n\nexport function calcBoundingBox(poly: any): number\n{\n const polyArea: number = Poly.polyArea(poly);\n\n const MBR: any = Poly.minimumBoundingRectangle(poly);\n const bboxArea: number = Poly.polyArea(MBR);\n\n return polyArea / bboxArea;\n}\n\n\n// FEATURE 5: POLSBYPOPPER - Polsby-Popper is the primary measure of the indendentation\n// of district shapes, calculated as the “the ratio of the area of the district to \n// the area of a circle whose circumference is equal to the perimeter of the district.”\n//\n// PP = A / A(C)\n//\n// where C is that circle. In other words:\n//\n// P = 2πRc and A(C) = π (P / 2π)2\n//\n// where P is the perimeter of the district and Rc is the radius of the circle.\n//\n// Hence, the measure simplifies to:\n//\n// PP = 4π * (A / P2)\n\nexport function calcPolsbyPopper(area: number, perimeter: number): number\n{\n return (4 * Math.PI) * (area / perimeter ** 2);\n}\n\n\n// FEATURE 6: Hull(D) - Convex Hull is a secondary measure of the dispersion of\n// district shapes, calculated as “the ratio of the district area to the area of\n// the minimum convex bounding polygon(also known as a convex hull) enclosing the\n// district.”\n//\n// CH = A / A(Convex Hull)\n// \n// where a convex hull is the minimum perimeter that encloses all arrPoints in a shape, basically the shortest\n// unstretched rubber band that fits around the shape.\n\n// Note: This is not THE convex hull, but rather a metric based on it.\nexport function calcConvexHullFeature(area: number, chArea: number): number\n{\n return area / chArea;\n}\n\n\n// FEATURE 7: SCHWARTZBERG - Schwartzberg is a secondary measure of the degree of\n// indentation of district shapes, calculated as “the ratio of the perimeter of the\n// district to the circumference of a circle whose area is equal to the area of the\n// district.”\n//\n// https://www.azavea.com/blog/2016/07/11/measuring-district-compactness-postgis/\n// defines Schwartzberg as:\n//\n// S = 1 / (P / C)\n//\n// where P is the perimeter of the district and C is the circumference of the circle. The radius of the circle is:\n//\n// Rc = SQRT(A / π)\n//\n// So, the circumference of the circle is:\n//\n// C = 2πRc or C = 2π * SQRT(A / π)\n//\n// Hence:\n//\n// S = 1 (P / 2π * SQRT(A / π))\n//\n// S = (2π * SQRT(A / π)) / P\n//\n// NOTE - But Aaron Kaufman's KIWYSI feature matches the verbal description of \n// P / C(feature_helpers.R). So, use P/C, not C/P as Azavea describes.\n\nexport function calcSchwartzberg(area: number, perimeter: number): number\n{\n return perimeter / ((2 * Math.PI) * Math.sqrt(area / Math.PI));\n}\n\n\n// CALCULATE THE 7 COMPACTNESS \"FEATURES\" FOR A POLYGON FOR THE KIWYSI COMPACTNESS MODEL\n\nexport function featureizePoly(poly: any, options?: Poly.PolyOptions): T.CompactnessFeatures\n{\n if (options === undefined) options = Poly.DefaultOptions;\n\n const area: number = Poly.polyArea(poly);\n const perimeter: number = Poly.polyPerimeter(poly, options);\n const diameter = Poly.polyDiameter(poly, options);\n\n const areaFlat: number = Poly.polyAreaFlat(poly);\n const perimeterFlat: number = Poly.polyPerimeterFlat(poly);\n const diameterFlat: number = Poly.polyDiameterFlat(poly);\n\n const ch = Poly.polyConvexHull(poly);\n\n const hullArea: number = Poly.polyArea(ch);\n\n const result: T.CompactnessFeatures = {\n // For the \"correct\" geodesic calculations that the KIWYSI AI uses\n sym_x: calcXSymmetry(poly),\n sym_y: calcYSymmetry(poly),\n reock: calcReock(area, diameter),\n bbox: calcBoundingBox(poly),\n polsby: calcPolsbyPopper(area, perimeter),\n hull: calcConvexHullFeature(area, hullArea),\n schwartzberg: calcSchwartzberg(area, perimeter),\n\n // For the Cartesian (flat earth) calculations that are typically done\n reockFlat: calcReock(areaFlat, diameterFlat),\n polsbyFlat: calcPolsbyPopper(areaFlat, perimeterFlat)\n };\n\n return result;\n}\n","//\n// KIWYSI COMPACTNESS - See Aaron Kaufman and Gary King's paper\n//\n\nimport * as GeoJSON from 'geojson';\nimport {Poly} from '@dra2020/baseclient';\n\nimport {featureizePoly} from './features';\nimport * as T from '../types/all';\nimport * as M from './matrix';\n\n\n// For verifying replication w/ Aaron Kaufman & Gary King's results\n// Note: These scores are smaller is better (ranks) and potentially out of range\nexport function kiwysiScoreShapeRAW(poly: any, pca: T.PCAModel, options?: Poly.PolyOptions): number\n{\n // Feature-ize the shape\n const features: T.CompactnessFeatures = featureizePoly(poly, options);\n\n // Score the feature set\n const score: number = scoreFeatureSet(features, pca);\n\n return score;\n}\n\n// Note: These scores are still smaller is better (ranks)\nexport function kiwysiScoreShape(poly: any, pca: T.PCAModel, options?: Poly.PolyOptions): number\n{\n const rawScore = kiwysiScoreShapeRAW(poly, pca, options);\n const rangedScore = Math.min(Math.max(rawScore, 1), 100);\n\n return rangedScore;\n}\n\n// Use this to get KIWYSI compactness scores (\"ranks\") for a set of shapes\nexport function kiwysiScoreShapes(shapes: GeoJSON.FeatureCollection, pca: T.PCAModel, options?: Poly.PolyOptions): number[]\n{\n let scores: number[] = [];\n\n for (let i = 0; i < shapes.features.length; i++)\n {\n const score = kiwysiScoreShape(shapes.features[i], pca, options);\n scores.push(score);\n }\n\n return scores;\n}\n\n// CLI\n\n// Use this to get KIWYSI compactness features and scores (\"ranks\") for a set of shapes\n// Note - These calculations use the geodesic (curved earth) model\nexport function calcKIWYSICompactness(shapes: GeoJSON.FeatureCollection): T.KiwysiJSONReady\n{\n const pca: T.PCAModel = T.PCAModel.Revised;\n const options: Poly.PolyOptions | undefined = undefined;\n\n let totKIWYSI: number = 0;\n let byDistrict: T.KiwysiFeatures[] = [];\n\n for (let i = 0; i < shapes.features.length; i++)\n {\n // Feature-ize the shape\n const features: T.CompactnessFeatures = featureizePoly(shapes.features[i], options);\n\n // Score the feature set\n const rawScore: number = scoreFeatureSet(features, pca);\n const rangedScore = Math.min(Math.max(rawScore, 1), 100);\n\n totKIWYSI += rangedScore;\n\n const entry: T.KiwysiFeatures = {\n sym_x: features.sym_x,\n sym_y: features.sym_y,\n reock: features.reock,\n bbox: features.bbox,\n polsby: features.polsby,\n hull: features.hull,\n schwartzberg: features.schwartzberg,\n kiwysiRank: rangedScore\n };\n\n byDistrict.push(entry);\n }\n\n const avgKWIWYSI: number = Math.round(totKIWYSI / shapes.features.length);\n\n const out: T.KiwysiJSONReady = {\n avgKWIWYSI: avgKWIWYSI,\n byDistrict: byDistrict\n }\n\n return out;\n}\n\n\n// KIWYSI SCORE THE FEATURES FROM A FEATURE-IZED SHAPE\n\nexport function scoreFeatureSet(features: T.CompactnessFeatures, pca: T.PCAModel): number\n{\n if (pca == T.PCAModel.Revised) return applyPCAModel(features);\n else return applyPCAModel_ORIGINAL(features);\n}\n\n// Revised 01/25/21\nfunction applyPCAModel(features: T.CompactnessFeatures): number\n{\n const model: number[] = [\n 3.0428861122, // sym_x\n 4.5060390447, // sym_y\n -22.7768820155, // reock\n -24.1176096770, // bbox\n -107.9434473497, // polsby\n -67.1088897240, // hull\n -1.2981693414 // schwartzberg\n ];\n\n const intercept: number = 145.6420811716;\n\n const v: M.Vector = [\n features.sym_x,\n features.sym_y,\n features.reock,\n features.bbox,\n features.polsby,\n features.hull,\n features.schwartzberg\n ];\n\n const score = M.dotProduct(model, v) + intercept;\n const normalized = score;\n\n return normalized;\n}\n\n// The original, INCORRECT, model\nfunction applyPCAModel_ORIGINAL(features: T.CompactnessFeatures): number\n{\n const model: number[] = [\n 0.317566717356693, // sym_x\n 0.32545234315137, // sym_y\n 0.32799567316863, // reock\n 0.411560782484889, // bbox\n 0.412187169816954, // polsby\n 0.420085928286392, // hull\n 0.412187169816954 // schwartzberg\n ];\n\n const v: M.Vector = [\n features.sym_x,\n features.sym_y,\n features.reock,\n features.bbox,\n features.polsby,\n features.hull,\n features.schwartzberg\n ];\n\n const score = M.dotProduct(model, v);\n const normalized = (score * 11) + 50;\n\n return normalized;\n}\n\n","//\n// dotProduct - cloned from poly/matrix.ts, to avoid needing mathjs\n//\n\nexport type Vector = number[]; // A general vector or a row or a column\n\n\nexport function dotProduct(a: Vector, b: Vector): number\n{\n protect((a.length > 0) && (a.length == b.length), \"In dotProduct, the vectors aren't the same length. \");\n\n return a.map((value, i) => value * b[i]).reduce((acc, val) => acc + val, 0);\n};\n\nfunction protect(condition: boolean, message: string): void\n{\n if (!condition)\n throw new Error(message);\n}\n","// Export everything here -- restrict package exports in all/equal.ts\nexport * from './population';\n","//\n// POPULATION DEVIATION\n//\n\nimport {PopulationScorecard} from '../types/all';\nimport {ratePopulationDeviation} from '../rate/dra-ratings';\nimport * as C from '../rate/dra-config';\nimport * as T from '../types/all';\nimport * as U from '../utils/all';\n\n\nexport function calcPopulationDeviation(max: number, min: number, targetSize: number): number\n{\n return (max - min) / targetSize; // Don't trim the result here!\n}\n\nexport function isRoughlyEqual(devation: number, bLegislative: boolean): boolean\n{\n const threshold = C.popdevThreshold(bLegislative);\n\n return (devation <= threshold) ? true : false;\n}\n\nexport function makePopulationScorecard(totPopByDistrict: number[], targetSize: number, bLegislative: boolean, bLog: boolean = false): PopulationScorecard\n{\n const nonEmptyDistricts = totPopByDistrict.filter(x => x > 0);\n\n let min = 0;\n let max = 0;\n\n if (nonEmptyDistricts.length > 1)\n {\n min = U.minArray(nonEmptyDistricts);\n max = U.maxArray(nonEmptyDistricts);\n }\n\n const deviation = calcPopulationDeviation(max, min, targetSize);\n // const rating = ratePopulationDeviation(deviation, bLegislative);\n const roughlyEqual = ((nonEmptyDistricts.length > 1) && isRoughlyEqual(deviation, bLegislative)) ? true : false;\n\n const threshold = C.popdevThreshold(bLegislative);\n\n const notes: T.Dict = {\n 'maxDeviation': max - min,\n 'threshold': threshold\n };\n\n // Populate the measurement\n const s: PopulationScorecard = {\n deviation: deviation,\n // rating: rating,\n roughlyEqual: roughlyEqual,\n notes: notes\n }\n\n return s;\n}","// Export everything here -- restrict package exports in all/graph.ts\n\nexport * from './connected';\nexport * from './embedded';","//\n// CONTIGUOUS - Is a district in a plan fully connected?\n//\n\nimport * as T from '../types/all'\nimport * as G from './utils';\n\n\nexport function isConnected(featureIDs: T.FeatureGroup, graph: T.ContiguityGraph, bLog: boolean = false): boolean\n{\n let visited = new Set<string>();\n let toProcess: string[] = [];\n\n // Start processing with the first feature in the set\n let iter = featureIDs.values();\n toProcess.push(iter.next().value);\n\n // While there are features in the set that haven't been processed,\n // i.e., stop when you've visited all the features in the set\n while (toProcess.length > 0)\n {\n // Grab a feature and process it\n let node = toProcess.pop() as string;\n visited.add(node);\n\n // Get its actual neighbors in the graph proper, i.e., ignore any virtual \n // out-of-bounds neighbors\n let actualNeighbors = G.neighbors(node, graph).filter(x => (!G.isOutOfBounds(x)));\n\n // Add neighbors to visit, if they're in the same set & haven't already been visited\n let neighborsToVisit = actualNeighbors.filter(x => featureIDs.has(x) && (!visited.has(x)));\n toProcess.push(...neighborsToVisit);\n }\n\n const bConnected = visited.size == featureIDs.size;\n\n if (bLog && !bConnected)\n {\n const difference = new Set([...featureIDs.values()].filter(x => !visited.has(x)));\n console.log(\"Disconnected feature IDs that haven't been visited: \", difference);\n }\n\n return bConnected;\n}\n","//\n// EMBEDDED - Is one district fully embedded w/in another district?\n//\n\nimport * as T from '../types/all';\nimport * as U from '../utils/all';\nimport * as G from './utils';\n\n//\n// A district is NOT a \"donut hole\" district:\n// * If any neighbor is 'OUT_OF_STATE'; or\n// * If there are 2 or more neighboring districts.\n//\n\n\nexport function isEmbedded(districtID: number, featureIDs: T.FeatureGroup, plan: T.PlanByGeoID, graph: T.ContiguityGraph, bLog: boolean = false): boolean\n{\n let neighboringDistricts = new Set();\n let featuresToCheck = Array.from(featureIDs);\n\n if (U.isArrayEmpty(featuresToCheck)) return true;\n\n for (let feature of featuresToCheck)\n {\n // Get its neighbors (including the virtual \"out of bounds\" ones)\n let neighbors = G.neighbors(feature, graph);\n\n for (let neighbor of neighbors)\n {\n if (G.isOutOfBounds(neighbor)) return false;\n\n let neighboringDistrict = G.getDistrict(neighbor, plan);\n\n // Assume that a missing district assignment means that the feature is \n // \"water-only\" AND part of the border (vs.internal) and, therefore,\n // not in the plan / map.\n\n if (neighboringDistrict == undefined) return false;\n\n if (neighboringDistrict != districtID)\n {\n neighboringDistricts.add(neighboringDistrict);\n\n if (neighboringDistricts.size > 1) return false;\n }\n }\n }\n\n return true;\n}\n\n","//\n// GLOBAL CONSTANTS\n//\n\n// The ID for the virtual neighbors outside the nodes in the graph\nexport const OUT_OF_BOUNDS: string = \"OUT_OF_STATE\";\n\n// The dummy district ID for features not assigned districts yet\nexport const NOT_ASSIGNED: number = 0;\n\n","//\n// UTILITIES\n//\n\n\nimport * as T from '../types/all'\nimport * as S from './settings';\nimport * as U from '../utils/all';\n\n\nexport function getDistrict(geoID: string, plan: T.PlanByGeoID): number | undefined\n{\n if (U.keyExists(geoID, plan)) return plan[geoID];\n\n return undefined;\n}\n\nexport function neighbors(node: string, graph: T.ContiguityGraph): string[]\n{\n if (!U.keyExists(node, graph)) return [];\n\n // Handle both unweighted & weighted neighbors\n const n = graph[node];\n const l = (n instanceof Array) ? n : Object.keys(n);\n\n return l;\n}\n\nexport function isOutOfBounds(geoID: string): boolean\n{\n return geoID == S.OUT_OF_BOUNDS;\n}\n\n\n// NOTE - This is only used in the CLI and Jest tests\n// Invert a plan by geoID to sets of geoIDs by districtID\nexport function invertPlan(plan: T.PlanByGeoID): T.PlanByDistrictID\n{\n let invertedPlan = {} as T.PlanByDistrictID;\n\n for (let geoID in plan)\n {\n let districtID = plan[geoID];\n\n if (!(U.keyExists(districtID, invertedPlan))) invertedPlan[districtID] = new Set();\n\n invertedPlan[districtID].add(geoID);\n }\n\n return invertedPlan;\n}\n\n\n","// Export everything here -- restrict package exports in all/\r\n\r\nexport * from './minority'\r\nexport * from './rpv';\r\n","//\n// MINORITY REPRESENTATION\n//\n\nimport * as T from '../types/all'\nimport * as U from '../utils/all';\nimport * as C from '../rate/dra-config';\n\nimport {Normalizer} from '../rate/normalize';\nimport {estSeatProbability} from '../partisan/method';\n\n\n// MINORITY SCORECARD\n\n// makeMinorityScorecard: Pivot the by-district profile into a 2D array:\n// * Demographic dimension\n// * VAP % bucket dimension + statewide VAP % and proportional seats\n// Then convert the 2D array back into a static structure.\n\nconst enum Demographic\n{\n Minority, // 'Minority'\n Black, // 'Black'\n Hispanic, // 'Hispanic'\n Pacific, // 'Pacific'\n Asian, // 'Asian'\n Native // 'Native'\n}\n\n// See bucketVAPPct() for the 6 VAP % buckets.\nconst enum PivotField\n{\n L35_40,\n L40_45,\n L45_50,\n L50_55,\n L55_60,\n L60Plus,\n VAPPct, // Statewide VAP %\n PropSeats // Proportional # of seats for VAP %\n}\n\nconst MINORITY = 1 - 1; // Demographic dimension offset\nconst PROPSEATS = 8 - 1; // Pivot dimension offset\n\nexport function makeMinorityScorecard(statewideDemos: T.Demographics, demosByDistrict: T.Demographics[], bLog: boolean = false): T.MinorityScorecard\n{\n const nDemos = 6; // Profile includes 'White'\n const offset: number = 1; // But don't process 'White'\n const nDistricts = demosByDistrict.length;\n\n // Initialize the demographic buckets\n // Get the statewide minority VAP/CVAP % (ignore 'White')\n const vapPctArray = Object.values(statewideDemos).slice(1);\n\n // Determine proportional minority districts by demographic (ignoring'White')\n const districtsByDemo: number[] = calcDistrictsByDemo(vapPctArray, nDistricts);\n\n let bucketsByDemo = new Array(nDemos);\n let totalProportional: number = 0;\n\n for (let j = 0; j < nDemos; j++)\n {\n const vapPct = vapPctArray[j];\n const prop = districtsByDemo[j];\n\n bucketsByDemo[j] = [0, 0, 0, 0, 0, 0, vapPct, prop];\n\n // Sum the prop for each individual race/ethnicity demographic\n if (j > 0)\n totalProportional += prop;\n }\n\n let opptyByDemo = U.initArray(nDemos, 0.0); // State-level values\n\n // For each district\n for (let i = 0; i < nDistricts; i++)\n {\n const districtDemos = Object.values(demosByDistrict[i]);\n\n // Find the opportunities for minority representation\n for (let j = 0; j < nDemos; j++)\n {\n const Mf = districtDemos[j + offset]; // Skip the 'White' entries\n\n const bucket: number = bucketVAPPct(Mf);\n if (bucket > 0)\n {\n // Bucket opportunity districts for each demographic\n bucketsByDemo[j][bucket - 1] += 1; // Zero-based array\n\n // Accumulate seat probabilities\n opptyByDemo[j] += estMinorityOpportunity(Mf, j);\n }\n }\n }\n\n const table: T.DemographicPivot = convertArrayToTable(bucketsByDemo);\n\n // The # of opportunity districts for each separate demographic and all minorities\n const oD: number = U.sumArray(opptyByDemo.slice(1)); // Sum individual demos, skipping all minorities\n const cD: number = opptyByDemo[MINORITY]; // All minorities\n\n // The # of proportional districts for each separate demographic and all minorities\n const pOd: number = totalProportional;\n const pCd: number = bucketsByDemo[MINORITY][PROPSEATS];\n\n let s: T.MinorityScorecard = {\n pivotByDemographic: table,\n opportunityDistricts: oD,\n proportionalOpportunities: pOd,\n coalitionDistricts: cD,\n proportionalCoalitions: pCd,\n details: {}, // None\n // score?: \n }\n\n return s;\n}\n\n\n// HELPERS\n\n// Convert the 2D working array to a fixed table, so the rows & columns can be\n// addressed logically by name as opposed to using array indices.\nfunction convertArrayToTable(a: number[][]): T.DemographicPivot\n{\n const minority: T.DemoBreakdown = {\n pct35_40: a[Demographic.Minority][PivotField.L35_40],\n pct40_45: a[Demographic.Minority][PivotField.L40_45],\n pct45_50: a[Demographic.Minority][PivotField.L45_50],\n pct50_55: a[Demographic.Minority][PivotField.L50_55],\n pct55_60: a[Demographic.Minority][PivotField.L55_60],\n pct60Plus: a[Demographic.Minority][PivotField.L60Plus],\n vapPct: a[Demographic.Minority][PivotField.VAPPct],\n propSeats: a[Demographic.Minority][PivotField.PropSeats]\n }\n const black: T.DemoBreakdown = {\n pct35_40: a[Demographic.Black][PivotField.L35_40],\n pct40_45: a[Demographic.Black][PivotField.L40_45],\n pct45_50: a[Demographic.Black][PivotField.L45_50],\n pct50_55: a[Demographic.Black][PivotField.L50_55],\n pct55_60: a[Demographic.Black][PivotField.L55_60],\n pct60Plus: a[Demographic.Black][PivotField.L60Plus],\n vapPct: a[Demographic.Black][PivotField.VAPPct],\n propSeats: a[Demographic.Black][PivotField.PropSeats]\n }\n const hispanic: T.DemoBreakdown = {\n pct35_40: a[Demographic.Hispanic][PivotField.L35_40],\n pct40_45: a[Demographic.Hispanic][PivotField.L40_45],\n pct45_50: a[Demographic.Hispanic][PivotField.L45_50],\n pct50_55: a[Demographic.Hispanic][PivotField.L50_55],\n pct55_60: a[Demographic.Hispanic][PivotField.L55_60],\n pct60Plus: a[Demographic.Hispanic][PivotField.L60Plus],\n vapPct: a[Demographic.Hispanic][PivotField.VAPPct],\n propSeats: a[Demographic.Hispanic][PivotField.PropSeats]\n }\n const pacific: T.DemoBreakdown = {\n pct35_40: a[Demographic.Pacific][PivotField.L35_40],\n pct40_45: a[Demographic.Pacific][PivotField.L40_45],\n pct45_50: a[Demographic.Pacific][PivotField.L45_50],\n pct50_55: a[Demographic.Pacific][PivotField.L50_55],\n pct55_60: a[Demographic.Pacific][PivotField.L55_60],\n pct60Plus: a[Demographic.Pacific][PivotField.L60Plus],\n vapPct: a[Demographic.Pacific][PivotField.VAPPct],\n propSeats: a[Demographic.Pacific][PivotField.PropSeats]\n }\n const asian: T.DemoBreakdown = {\n pct35_40: a[Demographic.Asian][PivotField.L35_40],\n pct40_45: a[Demographic.Asian][PivotField.L40_45],\n pct45_50: a[Demographic.Asian][PivotField.L45_50],\n pct50_55: a[Demographic.Asian][PivotField.L50_55],\n pct55_60: a[Demographic.Asian][PivotField.L55_60],\n pct60Plus: a[Demographic.Asian][PivotField.L60Plus],\n vapPct: a[Demographic.Asian][PivotField.VAPPct],\n propSeats: a[Demographic.Asian][PivotField.PropSeats]\n }\n const native: T.DemoBreakdown = {\n pct35_40: a[Demographic.Native][PivotField.L35_40],\n pct40_45: a[Demographic.Native][PivotField.L40_45],\n pct45_50: a[Demographic.Native][PivotField.L45_50],\n pct50_55: a[Demographic.Native][PivotField.L50_55],\n pct55_60: a[Demographic.Native][PivotField.L55_60],\n pct60Plus: a[Demographic.Native][PivotField.L60Plus],\n vapPct: a[Demographic.Native][PivotField.VAPPct],\n propSeats: a[Demographic.Native][PivotField.PropSeats]\n }\n\n const t: T.DemographicPivot = {\n minority: minority,\n black: black,\n hispanic: hispanic,\n pacific: pacific,\n asian: asian,\n native: native\n };\n\n return t;\n}\n\n// Convert the fixed table back to a 2D array, so test results can get compared generically.\nexport function convertTableToArray(t: T.DemographicPivot): number[][]\n{\n const minority: number[] = [\n t.minority.pct35_40,\n t.minority.pct40_45,\n t.minority.pct45_50,\n t.minority.pct50_55,\n t.minority.pct55_60,\n t.minority.pct60Plus,\n t.minority.vapPct,\n t.minority.propSeats\n ];\n const black: number[] = [\n t.black.pct35_40,\n t.black.pct40_45,\n t.black.pct45_50,\n t.black.pct50_55,\n t.black.pct55_60,\n t.black.pct60Plus,\n t.black.vapPct,\n t.black.propSeats\n ];\n const hispanic: number[] = [\n t.hispanic.pct35_40,\n t.hispanic.pct40_45,\n t.hispanic.pct45_50,\n t.hispanic.pct50_55,\n t.hispanic.pct55_60,\n t.hispanic.pct60Plus,\n t.hispanic.vapPct,\n t.hispanic.propSeats\n ];\n const pacific: number[] = [\n t.pacific.pct35_40,\n t.pacific.pct40_45,\n t.pacific.pct45_50,\n t.pacific.pct50_55,\n t.pacific.pct55_60,\n t.pacific.pct60Plus,\n t.pacific.vapPct,\n t.pacific.propSeats\n ];\n const asian: number[] = [\n t.asian.pct35_40,\n t.asian.pct40_45,\n t.asian.pct45_50,\n t.asian.pct50_55,\n t.asian.pct55_60,\n t.asian.pct60Plus,\n t.asian.vapPct,\n t.asian.propSeats\n ];\n const native: number[] = [\n t.native.pct35_40,\n t.native.pct40_45,\n t.native.pct45_50,\n t.native.pct50_55,\n t.native.pct55_60,\n t.native.pct60Plus,\n t.native.vapPct,\n t.native.propSeats\n ];\n\n const a: number[][] = [minority, black, hispanic, pacific, asian, native];\n\n return a;\n}\n\nexport function calcDistrictsByDemo(MfArray: number[], N: number): number[]\n{\n const districtsByDemo = MfArray.map(v => calcProportionalDistricts(v, N));\n\n return districtsByDemo;\n}\n\n// NOTE - Shift minority proportions up, so 37% minority scores like 52% share,\n// but use the uncompressed seat probability distribution. This makes a 37% \n// district have a ~70% chance of winning, and a 50% district have a >99% chance.\n// Below 37 % has no chance.\n// NOTE - Sam Wang suggest 90% probability for a 37% district. That seems a little\n// too abrupt and all or nothing, so I backed off to the ~70%.\n//\nexport function estMinorityOpportunity(Mf: number, demo?: Demographic): number\n{\n // NOTE - Switch to compress the probability distribution\n const bCompress = false;\n const dist = bCompress ? C.minorityOpportunityDistribution() : [0.0, 1.0];\n const range = C.minorityOpportunityRange();\n\n const _normalizer = new Normalizer(Mf);\n\n let shift = C.minorityShift(); // For Black VAP % (and Minority)\n if (demo && (demo > 1)) // For other non-Black demos,\n shift *= C.minorityShiftDilution(); // dilute the Black shift (by half)\n\n _normalizer.wipNum += shift;\n\n _normalizer.clip(dist[C.BEG], dist[C.END]);\n _normalizer.unitize(dist[C.BEG], dist[C.END]);\n\n const oppty = (Mf < range[C.BEG]) ? 0.0 : Math.min(estSeatProbability(_normalizer.wipNum, dist), 1.0);\n\n return oppty;\n}\n\n\n// HELPERS\n\nfunction bucketVAPPct(Mf: number): number\n{\n if (Mf < 0.35)\n return 0;\n else if ((Mf >= 0.35) && (Mf < 0.40))\n return 1;\n else if ((Mf >= 0.40) && (Mf < 0.45))\n return 2;\n else if ((Mf >= 0.45) && (Mf < 0.50))\n return 3;\n else if ((Mf >= 0.50) && (Mf < 0.55))\n return 4;\n else if ((Mf >= 0.55) && (Mf < 0.60))\n return 5;\n else // Mf >= 0.60\n return 6;\n}\n\nexport function calcProportionalDistricts(proportion: number, nDistricts: number): number\n{\n const roundUp = 0.0;\n const fractional = proportion * nDistricts;\n const integral = Math.round(fractional + roundUp);\n\n return integral;\n}\n\n/* Sources for majority-minority info:\n - https://en.wikipedia.org/wiki/List_of_majority-minority_United_States_congressional_districts\n - http://www.ncsl.org/Portals/1/Documents/Redistricting/Redistricting_2010.pdf\n*/\n","//\n// RACIALLY POLARIZED VOTING\n//\n\nimport * as T from '../types/all'\n\n\n// Analyze the degree of racially polarized voting for a district\nexport function analyzeRacialVoting(dictPoints: T.DemographicVotingByFeature /* | undefined */, districtID: number, groups: T.MinorityFilter): T.RPVAnalysis | undefined\n{\n // 12-29-2020 - Moved these guards up into district-analytics\n // Make sure the district is not empty, there are enough dictPoints, & that a minority is specified.\n // if (dictPoints === undefined) return undefined;\n // if (dictPoints.comparison === undefined) return undefined;\n // if (dictPoints.comparison.length <= 10) return undefined;\n // if (!(groups.black || groups.hispanic || groups.pacific || groups.asian || groups.native || groups.minority)) return undefined;\n\n // NOTE - If (groups.invertSelection == true), the comparison dictPoints are everything \n // except the selected minority, i.e., 1 – <selected minority>.\n\n const result: T.RPVAnalysis = {\n ids: dictPoints.ids,\n comparison: characterizeDemographicVoting(dictPoints.comparison),\n hispanic: groups.hispanic ? characterizeDemographicVoting(dictPoints.hispanic) : undefined,\n black: groups.black ? characterizeDemographicVoting(dictPoints.black) : undefined,\n pacific: groups.pacific ? characterizeDemographicVoting(dictPoints.pacific) : undefined,\n asian: groups.asian ? characterizeDemographicVoting(dictPoints.asian) : undefined,\n native: groups.native ? characterizeDemographicVoting(dictPoints.native) : undefined,\n minority: groups.minority ? characterizeDemographicVoting(dictPoints.minority) : undefined\n }\n\n return result;\n}\n\n// https://trentrichardson.com/compute-linear-regressions-in-javascript.html\n// https://www2.isye.gatech.edu/~yxie77/isye2028/lecture12.pdf\nfunction linearRegression(dictPoints: T.dictPoint[]): T.LinearRegression\n{\n // First pass - fit the line\n\n const n: number = dictPoints.length;\n\n let sum_x = 0;\n let sum_y = 0;\n let sum_xy = 0;\n let sum_xx = 0;\n let sum_yy = 0;\n\n for (let i = 0; i < n; i++) \n {\n const pt = dictPoints[i];\n\n sum_x += pt.x;\n sum_y += pt.y;\n sum_xy += (pt.x * pt.y);\n sum_xx += (pt.x * pt.x);\n sum_yy += (pt.y * pt.y);\n }\n\n const slope = (n * sum_xy - sum_x * sum_y) / (n * sum_xx - sum_x * sum_x);\n const intercept = (sum_y - slope * sum_x) / n;\n const r2 = Math.pow((n * sum_xy - sum_x * sum_y) / Math.sqrt((n * sum_xx - sum_x * sum_x) * (n * sum_yy - sum_y * sum_y)), 2);\n\n const xBar = sum_x / n;\n const yBar = sum_y / n;\n\n // Second pass - compute the standard errors\n\n let Sxx: number = 0; // Sum of squared deviations from the mean x\n let Syy: number = 0; // Sum of squared deviations of the residuals\n\n for (let i = 0; i < n; i++) \n {\n const pt = dictPoints[i];\n\n Sxx += Math.pow(pt.x - xBar, 2);\n Syy += Math.pow(pt.y - yOnLine(pt.x, slope, intercept), 2);\n }\n\n const mse = Syy / (n - 2);\n\n const stErrs: any = {\n slope: Math.sqrt(mse / Sxx),\n intercept: Math.sqrt(mse * ((1 / n) + (Math.pow(xBar, 2) / Sxx))),\n regression: Math.sqrt(Syy / n)\n }\n\n // Combine the results\n\n const lr: T.LinearRegression = {\n slope: slope,\n intercept: intercept,\n r2: r2,\n sterrs: stErrs\n }\n\n return lr;\n}\n\nfunction characterizeDemographicVoting(dictPoints: T.dictPoint[]): T.RPVFactor\n{\n const lr: T.LinearRegression = linearRegression(dictPoints);\n const lrPrime: T.LinearRegression = linearRegression(dictPoints.map(invertX));\n\n const result: T.RPVFactor = {\n slope: lr.slope,\n intercept: lr.intercept,\n r2: lr.r2,\n demPct: lrPrime.intercept,\n sterr: lrPrime.sterrs.intercept,\n points: dictPoints\n }\n\n return result;\n}\n\n// For interpolating dictPoints on a line\nconst yOnLine = (x: number, m: number, b: number): number => {return (m * x) + b;}\nconst xOnLine = (y: number, m: number, b: number): number => {return (y - b) / m;}\n\nconst invertX = (pt: T.dictPoint): T.dictPoint => {return {x: 1 - pt.x, y: pt.y}};\n","// Export everything here -- restrict package exports in all/partisan.ts\n\nexport * from './erf';\nexport * from './method';\nexport * from './bias';\nexport * from './responsiveness';\n\n\n// COMBINE EVERYTHING INTO A PARTISAN \"SCORECARD\"\n// * The bias & responsiveness calculations both depend on the same underlying method, and\n// everything is too intertwined to do separate bias & responsiveness passes & scorecards\n\nimport * as T from '../../lib/types/all'\nimport * as U from '../utils/all';\n\nimport\n{\n estSeats,\n estFPTPSeats,\n inferSVpoints\n} from '../../lib/partisan/method'\n\nimport\n{\n estSeatShare,\n bestSeats, bestSeatShare,\n calcDisproportionalityFromBest,\n estUnearnedSeats,\n calcTurnoutBias,\n estVotesBias,\n estPartisanBias,\n calcEfficiencyGap,\n invertSVPoints, keyRVpoints, calcDeclination,\n calcGlobalSymmetry, estGeometricSeatsBias, calcDisproportionality, calcMeanMedianDifference, calcLopsidedOutcomes, calcBigR, calcGamma,\n calcMinimalInverseResponsiveness,\n // EXPERIMENTAL\n estLocalAsymmetry, estLocalDisproportionality, estLocalDisproportionalityAlt, estLocalUnearnedSeats\n} from '../../lib/partisan/bias'\n\nimport\n{\n estResponsiveness, estResponsiveDistricts,\n estResponsiveDistrictsShare,\n countCompetitiveDistricts,\n estCompetitiveDistricts,\n estCompetitiveDistrictsShare\n} from '../../lib/partisan/responsiveness'\nimport {Utils} from '../all/all';\n\n\nexport function makePartisanScorecard(Vf: number, VfArray: T.VfArray, bLog: boolean = false): T.PartisanScorecard\n{\n const shift = T.Shift.Proportional;\n\n const N: number = VfArray.length;\n\n const bestS = bestSeats(N, Vf);\n const bestSf = bestSeatShare(bestS, N);\n\n // DEBUG\n // console.log(\"Best # seats = \", bestS, bestSf);\n\n const fptpS = estFPTPSeats(VfArray);\n\n const estS = estSeats(VfArray);\n const estSf = estSeatShare(estS, N);\n\n const deviation = calcDisproportionalityFromBest(estSf, bestSf); // This is the dis-proportionality\n\n const unearnedS = estUnearnedSeats(bestS, estS);\n\n // Calculate additional alternate metrics for reference\n const dSVpoints: T.SVpoint[] = inferSVpoints(Vf, VfArray, shift);\n const rSVpoints: T.SVpoint[] = invertSVPoints(dSVpoints);\n\n const TOf = calcTurnoutBias(Vf, VfArray);\n\n const Bs50 = estPartisanBias(dSVpoints as T.SVpoint[], N);\n const Bs50f = Bs50 / N;\n const Bv50f = estVotesBias(dSVpoints as T.SVpoint[], N);\n const rvPoints = keyRVpoints(VfArray);\n const decl = calcDeclination(VfArray);\n const gSym = calcGlobalSymmetry(dSVpoints, rSVpoints, Bs50f as number);\n\n const EG = calcEfficiencyGap(Vf, estSf);\n const BsGf = estGeometricSeatsBias(Vf, dSVpoints, rSVpoints);\n const prop = calcDisproportionality(Vf, estSf);\n const mMs = calcMeanMedianDifference(VfArray, Vf);\n const mMd = calcMeanMedianDifference(VfArray);\n const LO = calcLopsidedOutcomes(VfArray);\n\n // Calculate alternate responsiveness metrics for reference\n const bigR = calcBigR(Vf, estSf);\n const littleR = estResponsiveness(Vf, dSVpoints as T.SVpoint[]);\n const MIR = littleR ? calcMinimalInverseResponsiveness(Vf, littleR as number) : undefined;\n const rD = estResponsiveDistricts(VfArray);\n const rDf = estResponsiveDistrictsShare(rD as number, N);\n\n const gamma = littleR ? calcGamma(Vf, estSf, littleR as number) : undefined;\n\n const Cn = countCompetitiveDistricts(VfArray);\n // NOTE - Cd by definition uses a *possibly* different (more narrow) probability\n // distribution than Rd.\n const cD = estCompetitiveDistricts(VfArray);\n const cDf = estCompetitiveDistrictsShare(cD, N);\n\n // EXPERIMENTAL\n\n const lSym = estLocalAsymmetry(Vf, dSVpoints, rSVpoints);\n const lProp = estLocalDisproportionality(Vf, dSVpoints);\n const lPropAlt = estLocalDisproportionalityAlt(Vf, N, dSVpoints);\n const lUE = estLocalUnearnedSeats(Vf, N, dSVpoints);\n\n const biasMeasurements: T.Bias = {\n bestS: bestS,\n bestSf: bestSf,\n estS: estS,\n estSf: estSf,\n deviation: deviation,\n\n tOf: TOf,\n fptpS: fptpS,\n\n bS50: Bs50f,\n bV50: Bv50f,\n decl: decl,\n rvPoints: rvPoints,\n gSym: gSym,\n gamma: gamma,\n\n eG: EG,\n bSV: BsGf,\n prop: prop,\n mMs: mMs,\n mMd: mMd,\n lO: LO\n };\n\n const impactMeasurements: T.Impact = {\n unearnedS: unearnedS\n };\n\n const responsivenessMeasurements: T.Responsiveness = {\n cSimple: Cn,\n cD: cD,\n cDf: cDf,\n bigR: bigR,\n littleR: littleR,\n mIR: MIR,\n rD: rD,\n rDf: rDf\n }\n\n const DWins: T.VfArray = VfArray.filter(x => x > 0.5);\n const RWins: T.VfArray = VfArray.filter(x => x <= 0.5); // Ties credited to R's\n const averageDVf = (DWins.length > 0) ? U.avgArray(DWins) : undefined;\n const averageRVf = (RWins.length > 0) ? U.avgArray(RWins) : undefined;\n\n const experimentalMetrics: T.Experimental = {\n lSym: lSym,\n lProp: lProp,\n lPropAlt: lPropAlt,\n lUE: lUE\n };\n\n const s: T.PartisanScorecard = {\n bias: biasMeasurements,\n impact: impactMeasurements,\n responsiveness: responsivenessMeasurements,\n dSVpoints: dSVpoints,\n rSVpoints: rSVpoints,\n averageDVf: averageDVf,\n averageRVf: averageRVf,\n experimental: experimentalMetrics,\n details: {}\n };\n\n return s;\n}\n\nexport function calcPartisanMetrics(Vf: number, VfArray: T.VfArray): T.PartisanJSONReady\n{\n const s: T.PartisanScorecard = makePartisanScorecard(Vf, VfArray);\n\n let out: any = Utils.deepCopy(s);\n\n delete out.impact;\n delete out.details;\n\n return out as T.PartisanJSONReady;\n}","//\n// BIAS METRICS\n//\n\nimport * as T from '../types/all';\nimport * as U from '../utils/all';\nimport * as C from '../rate/dra-config';\n\nimport\n{\n estSeatProbability, estSeats,\n inferSVpoints,\n findBracketingLowerVf, findBracketingUpperVf,\n findBracketingLowerSf, findBracketingUpperSf,\n estFPTPSeats\n} from './method';\nimport {Utils} from '../all/all';\n\n\n/* Metrics:\n\n* ^S# [bestS] = the Democratic seats closest to proportional\n* ^S% [bestSf] = the corresponding Democratic seat share\n* S! [fptpS] = the estimated number of Democratic seats using first past the post\n* S# [estS] (S_V) = the estimated Democratic seats, using seat probabilities\n* S% [estSf] = the estimated Democratic seat share fraction, calculated as S# / N\n\n* BS_50 [bS50] = Seat bias as a fraction of N\n* BV_50 [bV50] = Votes bias as a fraction\n* decl [decl] = Declination\n* GS [gSym] = Global symmetry\n* ?? [gamma] = \n\n* EG [EG] = Efficiency gap as a fraction\n* BS_V [bSV] = Seats bias @ <V> (geometric)\n* PR [prop] = Disproportionality\n* MM [mMs] = Mean – median difference using statewide Vf\n* TO [tOf] = Turnout bias\n* MM' [mMd] = Mean – median difference using average district v \n* LO [LO] = Lopsided outcomes\n\n* B% [bias] = the bias calculated as S% – ^S%\n\n* LS [lSym] = average local asymmetry\n* LPR [lProp] = average local disproportionality\n\n*/\n\n\n// ESTIMATE BASIC BIAS -- By convention, '+' = R bias; '-' = D bias\n\n// ^S# - The # of Democratic seats closest to proportional @ statewide Vf\n// The \"expected number of seats\" from http://bit.ly/2Fcuf4q\nexport function bestSeats(N: number, Vf: number): number\n{\n return Math.round((N * Vf) - U.EPSILON);\n}\n\n// ^S% - The corresponding Democratic seat share \nexport function bestSeatShare(bestS: number, N: number): number\n{\n return bestS / N;\n}\n\n// S% - The estimated Democratic seat share fraction\nexport function estSeatShare(estS: number, N: number): number\n{\n return estS / N;\n}\n\n// B% - The deviation from proportionality calculated as ^S% — S%\nexport function calcDisproportionalityFromBest(estSf: number, bestSf: number): number\n{\n return bestSf - estSf;\n}\n\n// NOTE - Not used.\n// UE# - The estimated # of unearned seats\n// UE_# from http://bit.ly/2Fcuf4q\nexport function estUnearnedSeats(proportional: number, probable: number): number\n{\n return proportional - probable;\n}\n\n\n// ADVANCED/ALTERNATE METRICS FOR REFERENCE\n\nexport function calcTurnoutBias(statewide: number, VfArray: T.VfArray): number\n{\n const districtAvg = U.avgArray(VfArray);\n const turnoutBias = statewide - districtAvg;\n\n return turnoutBias;\n}\n\n// PARTISAN BIAS - I'm using John Nagle's simple seat bias below, which is what\n// PlanScore is doing:\n//\n// \"Partisan bias is the difference between each party’s seat share and 50 %\n// in a hypothetical, perfectly tied election.For example, if a party would\n// win 55 % of a plan’s districts if it received 50 % of the statewide vote,\n// then the plan would have a bias of 5 % in this party’s favor.To calculate\n// partisan bias, the observed vote share in each district is shifted by the\n// amount necessary to simulate a tied statewide election.Each party’s seat\n// share in this hypothetical election is then determined. The difference\n// between each party’s seat share and 50 % is partisan bias.\"\n// \n// This is *not* King's & others' geometric partisan bias metric per se.\n// That is below.\nexport function estPartisanBias(inferredSVpoints: T.SVpoint[], nDistricts: number): number\n{\n return estSeatBias(inferredSVpoints, nDistricts);\n}\n\n// SEATS BIAS -- John Nagle's simple seat bias @ 50% (alpha), a fractional # of seats.\nexport function estSeatBias(inferredSVpoints: T.SVpoint[], nDistricts: number): number\n{\n const half: number = 0.5;\n const tolerance: number = 0.001;\n\n let dSeats: number = 0;\n\n for (let pt of inferredSVpoints)\n {\n if (U.areRoughlyEqual(pt.v, half, tolerance))\n {\n dSeats = pt.s * nDistricts;\n\n break;\n }\n }\n\n const rSeats: number = nDistricts - dSeats;\n\n const Bs = (rSeats - dSeats) / 2.0;\n\n // NOTE - That is the same as (N/2) - S(0.5).\n // const BsAlt = (nDistricts / 2.0) - dSeats;\n\n return Bs;\n}\n\n// VOTES BIAS -- John Nagle's simple vote bias @ 50% (alpha2), a percentage.\nexport function estVotesBias(inferredSVpoints: T.SVpoint[], nDistricts: number): number | undefined\n{\n let extraVf: number | undefined = undefined;\n\n // Interpolate the extra Vf required @ Sf = 0.5\n const lowerPt = findBracketingLowerSf(0.5, inferredSVpoints);\n const upperPt = findBracketingUpperSf(0.5, inferredSVpoints);\n\n if (lowerPt && upperPt)\n {\n extraVf = 0.0;\n\n if ((upperPt.s - lowerPt.s) != 0)\n {\n const ratio = (upperPt.v - lowerPt.v) / (upperPt.s - lowerPt.s);\n const deltaS = 0.5 - lowerPt.s;\n\n extraVf = lowerPt.v + (ratio * deltaS) - 0.5;\n }\n }\n\n return extraVf;\n}\n\n// GEOMETRIC SEATS BIAS (@ V = statewide vote share)\nexport function estGeometricSeatsBias(Vf: number, dSVpoints: T.SVpoint[], rSVpoints: T.SVpoint[]): number | undefined\n{\n let BsGf: number | undefined = undefined;\n\n const bgsSVpoints: T.SVpoint[] = inferGeometricSeatsBiasPoints(dSVpoints, rSVpoints);\n\n // Interpolate the seat fraction @ Vf\n const lowerPt = findBracketingLowerVf(Vf, bgsSVpoints);\n const upperPt = findBracketingUpperVf(Vf, bgsSVpoints);\n\n if (lowerPt && upperPt)\n {\n const ratio = (upperPt.s - lowerPt.s) / (upperPt.v - lowerPt.v);\n const deltaV = Vf - lowerPt.v;\n const deltaS = ratio * deltaV;\n\n BsGf = lowerPt.s + deltaS;\n }\n\n return BsGf;\n}\n\n// The actual formula\nfunction calcGeometricSeatsBias(sD: number, sR: number): number\n{\n const BsGf = 0.5 * (sR - sD);\n\n return BsGf;\n}\n\nexport function inferGeometricSeatsBiasPoints(dSVpoints: T.SVpoint[], rSVpoints: T.SVpoint[]): T.SVpoint[]\n{\n const nPoints = dSVpoints.length;\n\n let bgsSVpoints: T.SVpoint[] = [];\n\n for (let i = 0; i < nPoints; i++)\n {\n const Vf = dSVpoints[i].v;\n const BsGf = calcGeometricSeatsBias(dSVpoints[i].s, rSVpoints[i].s);\n\n bgsSVpoints.push({v: Vf, s: BsGf});\n }\n\n return bgsSVpoints;\n}\n\nexport function invertSVPoints(inferredSVpoints: T.SVpoint[]): T.SVpoint[]\n{\n let invertedSVpoints: T.SVpoint[] = [];\n\n for (let pt of inferredSVpoints)\n {\n const Vd: number = pt.v;\n const Sd: number = pt.s;\n const Vr: number = 1.0 - Vd;\n const Sr: number = 1.0 - Sd;\n\n invertedSVpoints.push({v: Vr, s: Sr});\n }\n\n invertedSVpoints.sort(function (a, b)\n {\n return a.v - b.v;\n });\n\n return invertedSVpoints;\n}\n\n// EFFICIENCY GAP -- note the formulation used. Also, to accommodate turnout bias,\n// we would need to have D & R votes, not just shares.\nexport function calcEfficiencyGap(Vf: number, Sf: number, shareType = T.Party.Democratic): number\n{\n let efficiencyGap: number;\n\n if (shareType == T.Party.Republican)\n {\n // NOTE - This is the common formulation:\n //\n // EG = (Sf – 0.5) – (2 × (Vf – 0.5))\n //\n // in which it is implied that '-' = R bias; '+' = D bias.\n\n efficiencyGap = (Sf - 0.5) - (2.0 * (Vf - 0.5));\n }\n else\n {\n // NOTE - This is the alternate formulation in which '+' = R bias; '-' = D bias,\n // which is consistent with all our other metrics.\n\n efficiencyGap = (2.0 * (Vf - 0.5)) - (Sf - 0.5);\n }\n\n return efficiencyGap;\n}\n\n// MEAN–MEDIAN DIFFERENCE\n// \n// From PlanScore.org: \"The mean-median difference is a party’s median vote share\n// minus its mean vote share, across all of a plan’s districts. For example, if\n// a party has a median vote share of 45 % and a mean vote share of 50 %, then\n// the plan has a mean - median difference of 5 % against this party. When the\n// mean and the median diverge significantly, the district distribution is skewed\n// in favor of one party and against its opponent. Conversely, when the mean and\n// the median are close, the district distribution is more symmetric.\"\n//\n// From Princeton Gerrymandering Project: \"The mean-median difference is calculated\n// by subtracting the average vote share of either party across all districts from\n// the median vote share of the same party across all districts. A negative mean - \n// median difference indicates that the examined party has an advantage; a positive\n// difference indicates that the examined party is disadvantaged.\"\n//\n// So:\n// * With D VPI, '+' = R bias; '-' = D bias <<< We're using this convention.\n// * With R VPI, '-' = R bias; '+' = D bias.\nexport function calcMeanMedianDifference(VfArray: T.VfArray, Vf?: number): number\n{\n const meanVf = Vf ? Vf : U.avgArray(VfArray);\n const medianVf: number = U.medianArray(VfArray);\n\n // NOTE - Switched order to get the signs correct\n const difference: number = meanVf - medianVf;\n // const difference: number = medianVf - meanVf;\n\n return difference;\n}\n\n// HELPERS FOR DECLINATION & LOPSIDED OUTCOMES\n\n// Key r(v) points, defined in Fig. 16:\n// * VfArray are Democratic seat shares (by convention).\n// * But the x-axis of r(v) graphs is Republican seat share.\n// * So, you have to invert the D/R axis for Vb; and\n// * Invert the D/R probabilities for Va.\nexport function keyRVpoints(VfArray: T.VfArray): T.rVpoints\n{\n const nDistricts = VfArray.length;\n const estS = estSeats(VfArray);\n\n const Sb = estSeatShare(estS, nDistricts);\n\n const Rb = Sb / 2;\n const Ra = (1 + Sb) / 2;\n\n let Vb = 1.0 - (U.sumArray(VfArray.map(v => estSeatProbability(v) * v))) / estS;\n let Va = (U.sumArray(VfArray.map(v => estSeatProbability(1 - v) * (1 - v)))) / (nDistricts - estS);\n\n // 06-24-21 - Make sure the results are in range (no floating point errors)\n Vb = Math.min(Vb, 0.50);\n Va = Math.max(Va, 0.50);\n\n const keyPoints: T.rVpoints = {\n Sb: Sb,\n Ra: Ra,\n Rb: Rb,\n Va: Va,\n Vb: Vb\n };\n\n return keyPoints;\n}\n\nexport function isASweep(Sf: number, nDistricts: number): boolean\n{\n const oneDistrict: number = 1 / nDistricts;\n const bSweep: boolean = ((Sf > (1 - oneDistrict)) || (Sf < oneDistrict)) ? true : false;\n\n return bSweep;\n}\n\nexport function radiansToDegrees(radians: number): number\n{\n const degrees: number = radians * (180 / Math.PI);\n\n return degrees;\n}\n\n// DECLINATION\n// \n// Declination is calculated using the key r(v) points, defined in Fig. 16.\n// Note that district vote shares are D shares, so party A = Rep & B = Dem.\nexport function calcDeclination(VfArray: T.VfArray): number | undefined\n{\n const {Sb, Ra, Rb, Va, Vb} = keyRVpoints(VfArray);\n const bSweep: boolean = isASweep(Sb, VfArray.length);\n const bTooFewDistricts: boolean = (VfArray.length < 5) ? true : false;\n const bVaAt50: boolean = (U.areRoughlyEqual((Va - 0.5), 0.0, U.EPSILON)) ? true : false;\n const bVbAt50: boolean = (U.areRoughlyEqual((0.5 - Vb), 0.0, U.EPSILON)) ? true : false;\n\n let decl: number | undefined;\n\n if (bSweep || bTooFewDistricts || bVaAt50 || bVbAt50)\n {\n decl = undefined;\n }\n else\n {\n const lTan = (Sb - Rb) / (0.5 - Vb);\n const rTan = (Ra - Sb) / (Va - 0.5);\n\n const lAngle = radiansToDegrees(Math.atan(lTan));\n const rAngle = radiansToDegrees(Math.atan(rTan));\n decl = rAngle - lAngle;\n decl = decl;\n }\n\n return decl;\n}\n\n// LOPSIDED OUTCOMES\n//\n// This is a measure of packing bias is:\n//\n// LO = (1⁄2 - vB) - (vA – 1⁄2) Eq. 5.4.1 on P. 26\n//\n// \"The ideal for this measure is that the excess vote share for districts\n// won by party A averaged over those districts equals the excess vote share\n// for districts won by party B averaged over those districts.\n// A positive value of LO indicates greater packing of party B voters and,\n// therefore, indicates a bias in favor of party A.\"\nexport function calcLopsidedOutcomes(VfArray: T.VfArray): number | undefined\n{\n const {Sb, Ra, Rb, Va, Vb} = keyRVpoints(VfArray);\n const bSweep: boolean = isASweep(Sb, VfArray.length);\n\n let LO: number | undefined;\n if (bSweep)\n {\n LO = undefined;\n }\n else\n {\n LO = (0.5 - Vb) - (Va - 0.5);\n }\n\n return LO;\n}\n\n\n// GLOBAL SYMMETRY - Fig. 17 in Section 5.1\n//\n// * gSym is the area of asymmetry between the two curves.\n// * The choice of what base to normalize it by is somewhat arbitrary.\n// * We actually only infer the S–V curver over the range [0.25–0.75] <<< 101 points (not 100!)\n// * But dividing by 100 normalizes the area of asymmetry to the area of the SxV unit square.\nexport function calcGlobalSymmetry(dSVpoints: T.SVpoint[], rSVpoints: T.SVpoint[], S50V: number): number\n{\n let gSym: number = 0.0;\n\n for (let i in dSVpoints)\n {\n gSym += Math.abs(dSVpoints[i].s - rSVpoints[i].s) / 2;\n }\n\n const sign = (S50V < 0) ? -1 : 1;\n gSym *= sign;\n\n return gSym / 100;\n}\n\n\n// RAW DISPROPORTIONALITY\n//\n// PR = Sf – Vf : Eq.C.1.1 on P. 42\nexport function calcDisproportionality(Vf: number, Sf: number): number\n{\n const disProp = calcProp(Vf, Sf);\n\n return disProp;\n}\n\n// The actual formula\nfunction calcProp(Vf: number, Sf: number): number\n{\n const prop = Vf - Sf;\n\n return prop;\n}\n\n\n// BIG 'R': Defined in Footnote 22 on P. 10\nexport function calcBigR(Vf: number, Sf: number): number | undefined\n{\n let bigR: number | undefined = undefined;\n\n if (!(U.areRoughlyEqual(Vf, 0.5, U.EPSILON)))\n {\n bigR = (Sf - 0.5) / (Vf - 0.5);\n }\n\n return bigR;\n}\n\n// MINIMAL INVERSE RESPONSIVENESS\n//\n// zeta = (1 / r) - (1 / r_sub_max) : Eq. 5.2.1\n//\n// where r_sub_max = 10 or 20 for balanced and unbalanced states, respectively.\nexport function calcMinimalInverseResponsiveness(Vf: number, r: number): number | undefined\n{\n let MIR: number | undefined = undefined;\n\n if (!(U.areRoughlyEqual(r, 0, U.EPSILON)))\n {\n const bBalanced = isBalanced(Vf);\n const ideal = bBalanced ? 0.1 : 0.2;\n\n MIR = (1 / r) - ideal;\n\n MIR = Math.max(MIR, 0.0);\n }\n\n return MIR;\n}\n\nfunction isBalanced(Vf: number): boolean\n{\n const [lower, upper] = C.competitiveRange();\n const bBalanced = ((Vf > upper) || (Vf < lower)) ? false : true;\n\n return bBalanced;\n}\n\n// GAMMA (NEW)\n// g = 50 + r<V>(<V>-50) – S(<V>)\n// def calc_gamma(plan):\n// return (0.5 + plan.responsiveness * (plan.statewide_vote_share - 0.5) \\\n// - (plan.predicted_D_seats / plan.districts)) \\\n// * 100\nexport function calcGamma(Vf: number, Sf: number, r: number): number\n{\n const g = 0.5 + (r * (Vf - 0.5)) - Sf;\n\n return g;\n}\n\n\n// EXPERIMENTAL\n\nconst pctWidth = 5; // The size in % points of the 'local' window to bracket <V>\n\n// Average local asymmetry\nexport function estLocalAsymmetry(Vf: number, dSVpoints: T.SVpoint[], rSVpoints: T.SVpoint[]): number | undefined\n{\n try\n {\n const dPts = svPointRange(Vf, dSVpoints);\n const rPts = svPointRange(Vf, rSVpoints);\n\n if (!dPts || !rPts) return undefined;\n\n const lSym: number = rangeAsymmetry(dPts, rPts);\n\n return lSym;\n }\n catch (err)\n {\n console.log(\"Exception in estLocalAsymmetry ...\");\n return undefined;\n }\n}\n\nexport function rangeAsymmetry(dSVpoints: T.SVpoint[], rSVpoints: T.SVpoint[]): number\n{\n const ndPts: number = dSVpoints.length;\n const nrPts: number = rSVpoints.length;\n\n console.assert(ndPts == nrPts, \"# of D & R points don't match: \", ndPts, nrPts);\n\n let tot: number = 0.0;\n\n for (let i in dSVpoints)\n {\n tot += calcGeometricSeatsBias(dSVpoints[i].s, rSVpoints[i].s);\n }\n\n return tot / ndPts;\n}\n\n// Average local disproportionality\nexport function estLocalDisproportionality(Vf: number, dSVpoints: T.SVpoint[]): number | undefined\n{\n try\n {\n const dPts = svPointRange(Vf, dSVpoints);\n\n if (!dPts) return undefined;\n\n const lProp: number = rangeDisproportionality(dPts);\n\n return lProp;\n }\n catch (err)\n {\n console.log(\"Exception in estLocalDisproportionality ...\");\n return undefined;\n }\n}\n\nexport function rangeDisproportionality(dSVpoints: T.SVpoint[]): number\n{\n const ndPts: number = dSVpoints.length;\n\n let tot: number = 0.0;\n\n for (let i in dSVpoints)\n {\n tot += calcProp(dSVpoints[i].v, dSVpoints[i].s);\n }\n\n return tot / ndPts;\n}\n\n// Average local disproportionality from the best # of seats (closest to proportional)\nexport function estLocalDisproportionalityAlt(Vf: number, N: number, dSVpoints: T.SVpoint[]): number | undefined\n{\n const dPts = svPointRange(Vf, dSVpoints);\n\n if (!dPts) return undefined;\n\n const lPropAlt: number = rangeDisproportionalityAlt(N, dPts);\n\n return lPropAlt;\n}\n\n// Dynamically calculate the best # seats, so this is a step function\nexport function rangeDisproportionalityAlt(N: number, dSVpoints: T.SVpoint[]): number\n{\n const ndPts: number = dSVpoints.length;\n\n let tot: number = 0.0;\n\n for (let i in dSVpoints)\n {\n const bestS = bestSeats(N, dSVpoints[i].v);\n const bestSf = bestSeatShare(bestS, N);\n\n tot += calcDisproportionalityFromBest(dSVpoints[i].s, bestSf);\n }\n\n return tot / ndPts;\n}\n\n// Average local unearned seats from the best # of seats (closest to proportional)\nexport function estLocalUnearnedSeats(Vf: number, N: number, dSVpoints: T.SVpoint[]): number | undefined\n{\n const dPts = svPointRange(Vf, dSVpoints);\n\n if (!dPts) return undefined;\n\n const lUE: number = rangeUnearnedSeats(N, dPts);\n\n return lUE;\n}\n\nexport function rangeUnearnedSeats(N: number, dSVpoints: T.SVpoint[]): number\n{\n const ndPts: number = dSVpoints.length;\n\n let tot: number = 0.0;\n\n for (let i in dSVpoints)\n {\n const estS: number = dSVpoints[i].s * N;\n const bestS = bestSeats(N, dSVpoints[i].v);\n\n tot += estUnearnedSeats(bestS, estS);\n }\n\n return tot / ndPts;\n}\n\n// Filter the full [0.25–0.75] range of S–V points down to the 'local' range.\n// Make sure that range is w/in the full range.\nfunction svPointRange(Vf: number, svPoints: T.SVpoint[]): T.SVpoint[] | undefined\n{\n const svRange: number[] = [0.25, 0.75]; // The range over which we infer the S–V curve points\n const halfStep: number = (1 / 100) / 2; // The V point increments, i.e., every half a percent\n const localWindow: number = pctWidth / 100; // # of % points wide as a fraction\n const plusMinus: number = localWindow / 2; // +/– % as a fraction\n const delta: number = plusMinus + (halfStep / 2); // +/– % plus half a half step to deal w/ floating point precision\n\n if ((Vf < svRange[0]) || (Vf > svRange[1])) return undefined;\n\n const bracketingVs: number[] = [\n findBracketingLowerVf(Vf, svPoints).v,\n findBracketingUpperVf(Vf, svPoints).v\n ];\n\n const localRange: number[] = [bracketingVs[0] - delta, bracketingVs[1] + delta];\n\n const subsetPts: T.SVpoint[] = svPoints.filter(x => inRange(x, localRange));\n\n return subsetPts;\n}\n\nconst inRange = (pt: T.SVpoint, range: number[]): boolean => {return (pt.v >= range[0]) && (pt.v <= range[1]);}","//\n// Approximate ERF - https://en.wikipedia.org/wiki/Error_function#Numerical_approximations\n//\n\nexport function approximateERF(x: number): number\n{\n const n = Math.abs(x);\n\n const p = 0.3275911;\n const a1 = 0.254829592;\n const a2 = 0.284496736 * -1;\n const a3 = 1.421413741;\n const a4 = 1.453152027 * -1;\n const a5 = 1.061405429;\n const t = 1 / (1 + (p * n));\n\n const erf = 1 - ((a1 * t) + (a2 * t ** 2) + (a3 * t ** 3) + (a4 * t ** 4) + (a5 * t ** 5)) * Math.E ** (-1 * n ** 2);\n\n return (x < 0) ? -erf : erf;\n}\n\n/* To validate this, you need to import mathjs.erf into a Jest test file and run these:\n\nconst {erf} = require('mathjs');\n\ndescribe('mathjs.erf', () =>\n{\n test('Probabilities', () =>\n {\n const places = 15;\n\n expect(erf(0.2)).toBeCloseTo(0.22270258921047847, places);\n expect(erf(-0.5)).toBeCloseTo(-0.5204998778130465, places);\n expect(erf(4)).toBeCloseTo(0.9999999845827421, places);\n });\n});\n\ndescribe('erf approximation', () =>\n{\n test('Probabilities', () =>\n {\n const places = 6;\n\n expect(U.approximateERF(0.2)).toBeCloseTo(erf(0.2), places);\n expect(U.approximateERF(-0.5)).toBeCloseTo(erf(-0.5), places);\n expect(U.approximateERF(4)).toBeCloseTo(erf(4), places);\n });\n});\n\n*/\n","//\n// METHODOLOGY SUPPORT\n//\n\nimport {approximateERF} from './erf';\nimport {Normalizer} from '../rate/normalize';\nimport * as T from '../types/all';\nimport * as U from '../utils/all';\n\n\n// CORE CAPABILITIES FROM JOHN NAGLE'S METHOD\n\n// Estimate the probability of a seat win for district, given a Vf\nexport function estSeatProbability(Vf: number, range?: number[]): number\n{\n if (range)\n {\n // If a range is provided, it defines end points of a compressed probability\n // distribution. These *aren't* the points where races start or stop being\n // contested, just the end points of a distribution that yields the desired\n // probabilities in the typical competitive range [45-55%].\n\n const _normalizer = new Normalizer(Vf);\n\n const distBeg = range[0];\n const distEnd = range[1];\n\n _normalizer.clip(distBeg, distEnd);\n _normalizer.unitize(distBeg, distEnd);\n\n return seatProbabilityFn(_normalizer.wipNum);\n }\n else\n {\n // Otherwise, use the full probability distribution.\n\n return seatProbabilityFn(Vf);\n }\n}\n\n// const {erf} = require('mathjs');\n// console.log(\"erf(0.2) =\", erf(0.2)); // returns 0.22270258921047847\n// console.log(\"erf(-0.5) =\", erf(-0.5)); // returns -0.5204998778130465\n// console.log(\"erf(4) =\", erf(4)); // returns 0.9999999845827421\n\nfunction seatProbabilityFn(Vf: number): number\n{\n // Python: 0.5 * (1 + erf((vpi - 0.50) / (0.02 * sqrt(8))))\n return 0.5 * (1.0 + approximateERF((Vf - 0.50) / (0.02 * Math.sqrt(8))));\n}\n\n// The estimated # of Democratic seats, using seat probabilities\nexport function estSeats(VfArray: T.VfArray, range?: number[]): number\n{\n // Python: sum([est_seat_probability(vpi) for vpi in vpi_by_district])\n return U.sumArray(VfArray.map(v => estSeatProbability(v, range)));\n}\n\n// Estimate the number of responsive districts [R(d)], given a set of Vf's\nexport function estDistrictResponsiveness(Vf: number): number\n{\n // Python: 1 - 4 * (est_seat_probability(vpi) - 0.5)**2\n return 1.0 - 4.0 * (estSeatProbability(Vf) - 0.5) ** 2;\n}\n\nexport const avgSVError = 0.02;\nexport function inferSVpoints(Vf: number, VfArray: T.VfArray, shift: T.Shift, range?: number[]): T.SVpoint[]\n{\n const nDistricts = VfArray.length;\n let SVpoints: T.SVpoint[] = [];\n\n for (let shiftedVf of shiftRange())\n {\n const shiftedVPI: T.VfArray = shiftDistricts(Vf, VfArray, shiftedVf, shift);\n const shiftedSf = estSeats(shiftedVPI, range) / nDistricts;\n SVpoints.push({v: shiftedVf, s: shiftedSf});\n }\n\n return SVpoints;\n}\n\nfunction shiftDistricts(Vf: number, VfArray: T.VfArray, shiftedVf: number, shift: T.Shift): T.VfArray\n{\n if (shift == T.Shift.Proportional)\n return shiftProportionally(Vf, VfArray, shiftedVf);\n else\n return shiftUniformly(Vf, VfArray, shiftedVf);\n}\n\n// Shift districts proportionally\nfunction shiftProportionally(Vf: number, VfArray: T.VfArray, shiftedVf: number): T.VfArray\n{\n let shiftedVfArray: T.VfArray;\n\n if (shiftedVf < Vf)\n {\n // Shift down: D's to R's\n const proportion = shiftedVf / Vf;\n shiftedVfArray = VfArray.map((v => v * proportion));\n }\n else if (shiftedVf > Vf)\n {\n // Shift up: R's to D's\n const proportion = (1.0 - shiftedVf) / (1.0 - Vf);\n shiftedVfArray = VfArray.map((v => (1.0 - (1.0 - v) * proportion)));\n }\n else\n {\n // No shift: shift = actual\n shiftedVfArray = VfArray;\n }\n\n return shiftedVfArray;\n}\n\n// Shift districts uniformly\nfunction shiftUniformly(Vf: number, VfArray: T.VfArray, shiftedVf: number): T.VfArray\n{\n const shift = shiftedVf - Vf;\n\n const shiftedVfArray: T.VfArray = VfArray.map((v => v + shift));\n\n return shiftedVfArray;\n}\n\n// Generate a range of v's in 1/2% increments\nfunction shiftRange(): number[]\n{\n const range: number[] = [0.25, 0.75];\n const axisRange: number[] = [];\n const step = (1 / 100) / 2;\n\n for (let v = range[0]; v <= range[1] + U.EPSILON; v += step)\n {\n axisRange.push(v);\n }\n\n return axisRange;\n}\n\n// Find the S(V) point that brackets a Vf value on the lower end\nexport function findBracketingLowerVf(Vf: number, inferredSVpoints: T.SVpoint[]): T.SVpoint\n{\n let lowerPt: T.SVpoint = inferredSVpoints[0];\n let smallerPoints: T.SVpoint[] = [];\n\n for (let pt of inferredSVpoints)\n {\n if (pt.v <= Vf)\n {\n smallerPoints.push(pt);\n }\n else\n {\n break;\n }\n }\n // The last smaller point\n lowerPt = smallerPoints.slice(-1)[0];\n\n return lowerPt;\n}\n\n// Find the S(V) point that brackets a Vf value on the upper end\nexport function findBracketingUpperVf(Vf: number, inferredSVpoints: T.SVpoint[]): T.SVpoint\n{\n let upperPt: T.SVpoint = inferredSVpoints[-1];\n\n for (let pt of inferredSVpoints)\n {\n if (pt.v >= Vf)\n {\n // The first bigger point\n upperPt = {v: pt.v, s: pt.s};\n break;\n }\n }\n\n return upperPt;\n}\n\n// The corresponding functions via the Sf y-axis (vs. Vf x-axis)\n// Find the S(V) point that brackets a Sf value on the lower end\nexport function findBracketingLowerSf(Sf: number, inferredSVpoints: T.SVpoint[]): T.SVpoint\n{\n let lowerPt: T.SVpoint = inferredSVpoints[0];\n let smallerPoints: T.SVpoint[] = [];\n\n for (let pt of inferredSVpoints)\n {\n if (pt.s <= Sf)\n {\n smallerPoints.push(pt);\n }\n else\n {\n break;\n }\n }\n // The last smaller point\n lowerPt = smallerPoints.slice(-1)[0];\n\n return lowerPt;\n}\n\n// Find the S(V) point that brackets a Sf value on the upper end\nexport function findBracketingUpperSf(Sf: number, inferredSVpoints: T.SVpoint[]): T.SVpoint\n{\n let upperPt: T.SVpoint = inferredSVpoints[-1];\n\n for (let pt of inferredSVpoints)\n {\n if (pt.s >= Sf)\n {\n // The first bigger point\n upperPt = {v: pt.v, s: pt.s};\n break;\n }\n }\n\n return upperPt;\n}\n\n\n// HELPERS\n\n// The estimated number of Democratic seats using first past the post\nexport function estFPTPSeats(VfArray: T.VfArray): number\n{\n\n // Python: sum([1.0 for vpi in vpi_by_district if (vpi > 0.5)])\n return U.sumArray(VfArray.map(v => fptpWin(v)));\n}\n\nexport function fptpWin(demPct: number): number\n{\n // Vote shares should be fractions in the range [0.0 – 1.0]\n //assert((demPct <= 1.0) && (demPct >= 0.0));\n\n return ((demPct > 0.5) ? 1 : 0);\n}","//\n// RESPONSIVENESS METRICS -- includes \"competitiveness\" metrics\n//\n\nimport {Normalizer} from '../rate/normalize';\nimport * as T from '../types/all';\nimport * as U from '../utils/all';\nimport * as C from '../rate/dra-config';\n\nimport {estDistrictResponsiveness, estFPTPSeats, findBracketingLowerVf, findBracketingUpperVf} from './method';\nimport {bestSeats} from './bias';\n\n\n/* Metrics:\n\n* R [bigR] = Overall responsiveness or winner’s bonus \n* r [littleR] = The point responsiveness at V% (the slope of the S(V) curve at <V>)\n* MIR [MIR] = Minimal inverse responsiveness \n* rD [rD] = the estimated # of responsive districts (using probabilities)\n* rD% [rDf] = the estimated # of responsive districts, as a fraction of N\n\n* C [c] = the number of districts that fall into the range [45–55%]\n* cD [cD] = the estimated # of competitive districts, using probabilities & a narrower [0.25–0.75] range\n* cD% [cDf] = the estimated # of competitive districts, as a fraction of N\n* beg/end [mRange] = the 1–N indices for the first and last district that separate the likely result and the proportional result\n* Md [mD] = the competitiveness of the marginal districts\n* Md% [mDf] = the probability that the marginal seats will flip, so S% => ^S%\n\n*/\n\n// RESPONSIVENESS\n\n// R# - Estimate responsiveness at the statewide vote share\nexport function estResponsiveness(Vf: number, inferredSVpoints: T.SVpoint[]): number | undefined\n{\n let r: number | undefined = undefined;\n\n // NOTE - Seat values are already fractions [0.0–1.0] here.\n const lowerPt = findBracketingLowerVf(Vf, inferredSVpoints);\n const upperPt = findBracketingUpperVf(Vf, inferredSVpoints);\n\n if (lowerPt && upperPt)\n {\n if (!(U.areRoughlyEqual((upperPt.v - lowerPt.v), 0, U.EPSILON)))\n {\n r = ((upperPt.s - lowerPt.s) / (upperPt.v - lowerPt.v));\n }\n }\n\n return r;\n}\n\n// rD - Estimate the number of responsive districts, given a set of Vf's\nexport function estResponsiveDistricts(VfArray: T.VfArray): number\n{\n // Python: sum([est_district_responsiveness(vpi) for vpi in vpi_by_district])\n return U.sumArray(VfArray.map(v => estDistrictResponsiveness(v)));\n}\n\n// rD% - The estimated # of responsive districts, as a fraction of N\nexport function estResponsiveDistrictsShare(rD: number, N: number): number\n{\n return rD / N;\n}\n\n\n// ESTIMATE COMPETITIVENESS (ENHANCED)\n\n// C - Count the # of competitive districts, defined as v in [45–55%]\nexport function countCompetitiveDistricts(VfArray: T.VfArray): number\n{\n return U.sumArray(VfArray.map(v => isCompetitive(v)));\n}\nfunction isCompetitive(v: number): number\n{\n return ((v >= C.competitiveRange()[C.BEG]) && (v <= C.competitiveRange()[C.END])) ? 1 : 0;\n}\n\n// cD - The estimated # of competitive districts\nexport function estCompetitiveDistricts(VfArray: T.VfArray, bCompress: boolean = false): number\n{\n return U.sumArray(VfArray.map(v => estDistrictCompetitiveness(v, bCompress)));\n}\n\nexport function estDistrictCompetitiveness(Vf: number, bCompress: boolean = false): number\n{\n const _normalizer = new Normalizer(Vf);\n\n // The end points of the probability distribution\n // NOTE - These aren't the points where races start or stop being contested,\n // just the end points of a distribution that yields the desired behavior\n // in the typical competitive range [45-55%].\n const distBeg = bCompress ? C.competitiveDistribution()[C.BEG] : 0.0;\n const distEnd = bCompress ? C.competitiveDistribution()[C.END] : 1.0;\n\n _normalizer.clip(distBeg, distEnd);\n _normalizer.unitize(distBeg, distEnd);\n\n const dC = estDistrictResponsiveness(_normalizer.wipNum);\n\n return dC;\n}\n\n// cD% - The estimated # of competitive districts, as a fraction of N\nexport function estCompetitiveDistrictsShare(cD: number, N: number): number\n{\n return cD / N;\n}\n\n// Md - The estimated # of \"marginal\" districts in and around the likely FPTP\n// seats & the best seat split that are competitive.\nexport function estMarginalCompetitiveDistricts(Mrange: number[], VfArray: T.VfArray, bCompress: boolean = false): number\n{\n const minId = Mrange[C.BEG];\n const maxId = Mrange[C.END];\n\n // Sort the array values, and subset it to those districts\n // NOTE - I'm *not* keeping track of the district indexes right now\n let subsetVfArray = U.deepCopy(VfArray).sort().slice(minId - 1, maxId);\n\n // Est. competitive districts on that array\n const Md = U.sumArray(subsetVfArray.map((v: number) => estDistrictCompetitiveness(v, bCompress)));\n\n return Md;\n}\n\n// Md% - The estimated competitiveness of the \"marginal\" districts in and around\n// the likely FPTP seats & the best seat split as a fraction\nexport function estMarginalCompetitiveShare(Md: number, Mrange: number[]): number\n{\n const minId = Mrange[C.BEG];\n const maxId = Mrange[C.END];\n\n // Est. competitive district share on that result\n const MdShare = estCompetitiveDistrictsShare(Md, maxId - minId + 1);\n\n return MdShare;\n}\n\nexport function findMarginalDistricts(Vf: number, VfArray: T.VfArray, N: number): number[]\n{\n const bestS = bestSeats(N, Vf);\n const fptpS = estFPTPSeats(VfArray);\n\n // Find the marginal districts IDs (indexed 1–N)\n let minId: number;\n let maxId: number;\n\n // Bracket the marginal districts\n if (bestS > fptpS)\n {\n minId = Math.max((N - bestS) - 1, 1);\n maxId = Math.min((N - fptpS) + 1, N);\n }\n else if (fptpS > bestS)\n {\n minId = Math.max((N - fptpS) - 1, 1);\n maxId = Math.min((N - bestS) + 1, N);\n }\n else\n {\n minId = Math.max((N - bestS) - 1, 1);\n maxId = Math.min((N - bestS) + 1, N);\n }\n\n return [minId, maxId];\n}\n","export * from './dra-ratings';\nexport * from './dra-config';\nexport * from './normalize';\nexport * from './settings';\n","//\n// DRA-SPECIFIC THRESHOLDS, SCALES, AND WEIGHTS\n//\n// * A layer of functions over config.json, so that they could be overridden dynamically.\n// That is not implemented yet.\n//\n\nimport * as T from '../types/all'\nconst config = require('./dra-config.json');\n\nexport const BEG = 0;\nexport const END = 1;\n\n\n// PARTISAN\n\nexport function biasRange(overridesJSON?: any): number[]\n{\n const range = config.partisan.bias.range;\n\n return range;\n}\n\nexport function winnerBonus(overridesJSON?: any): number\n{\n const bonus = config.partisan.bonus;\n\n return bonus;\n}\n\n// The simple user-facing range, i.e., 45–55%.\n\nexport function competitiveRange(overridesJSON?: any): number[]\n{\n const range = config.partisan.competitiveness.simpleRange;\n\n return range;\n}\n\nexport function competitiveDistribution(overridesJSON?: any): number[]\n{\n const dist = config.partisan.competitiveness.distribution;\n\n return dist;\n}\n\n// The more complex internal range for normalizing Cdf.\n// * 06/23/2020 - As part of relaxing the competitive range, I changed this max\n// from 0.67 to 0.75.\nexport function overallCompetitivenessRange(overridesJSON?: any): number[]\n{\n const range = config.partisan.competitiveness.range;\n\n return range;\n}\n\n// export function marginalCompetitivenessRange(overridesJSON?: any): number[]\n// {\n// const range = config.partisan.responsiveness.marginal.range;\n\n// return range;\n// }\n\n// export function marginalCompetitivenessWeight(overridesJSON?: any): number\n// {\n// const mcW = config.partisan.responsiveness.marginal.weight;\n\n// return mcW;\n// }\n\n// export function overallCompetitivenessWeight(overridesJSON?: any): number\n// {\n// const ocW = config.partisan.responsiveness.overall.weight;\n\n// return ocW;\n// }\n\n\n// MINORITY\n\nexport function minorityOpportunityRange(overridesJSON?: any): number[]\n{\n const range = config.minority.range;\n\n return range;\n}\n\nexport function minorityOpportunityDistribution(overridesJSON?: any): number[]\n{\n const dist = config.minority.distribution;\n\n return dist;\n}\n\n// For Black VAP %\nexport function minorityShift(overridesJSON?: any): number\n{\n const BLACK = 0;\n const shift = config.minority.shift[BLACK];\n\n return shift;\n}\n\n// Dilution for other demos\nexport function minorityShiftDilution(overridesJSON?: any): number\n{\n const DILUTION = 1;\n const shift = config.minority.shift[DILUTION];\n\n return shift;\n}\n\nexport function coalitionDistrictWeight(overridesJSON?: any): number\n{\n const weight = config.minority.coalition.weight;\n\n return weight;\n}\n\n\n// COMPACTNESS\n\nexport function reockWeight(overridesJSON?: any): number\n{\n const rW = config.compactness.reock.weight;\n\n return rW;\n}\n\nexport function reockRange(overridesJSON?: any): number[]\n{\n const range = config.compactness.reock.range;\n\n return range;\n}\n\nexport function polsbyWeight(overridesJSON?: any): number\n{\n const ppW = config.compactness.polsby.weight;\n\n return ppW;\n}\n\nexport function polsbyRange(overridesJSON?: any): number[]\n{\n const range = config.compactness.polsby.range;\n\n return range;\n}\n\n\n// SPLITTING\n\nexport function countySplittingWeight(overridesJSON?: any): number\n{\n const csW = config.splitting.county.weight;\n\n return csW;\n}\n\nexport function countySplittingRange(d: T.DistrictType, overridesJSON?: any): number[]\n{\n const range = config.splitting.county.range[d];\n\n return range;\n}\n\nexport function districtSplittingWeight(overridesJSON?: any): number\n{\n const dsW = config.splitting.district.weight;\n\n return dsW;\n}\n\nexport function districtSplittingRange(d: T.DistrictType, overridesJSON?: any): number[]\n{\n const range = config.splitting.district.range[d];\n\n return range;\n}\n\n\n// NOTE - Raw ranges, not inverted (i.e., smaller is better)\n// NOTE - This could be optimized to not calc LD values for CD's (or do it once)\nexport function popdevRange(bLegislative: boolean, overridesJSON?: any): number[]\n{\n const cdRange = config.popdev.range[T.DistrictType.Congressional];\n const worstCD = cdRange[BEG];\n const bestCD = cdRange[END];\n const ldRange = config.popdev.range[T.DistrictType.StateLegislative];\n const iRange = bLegislative ? ldRange : cdRange;\n\n const worst = iRange[BEG];\n const best = bLegislative ? (bestCD / worstCD) * iRange[BEG] : iRange[END];\n\n // Invert the range, so bigger is better.\n return [worst, best];\n}\n\n// NOTE - Raw threshold, not inverted (i.e., smaller is better)\nexport function popdevThreshold(bLegislative: boolean, overridesJSON?: any): number\n{\n const threshold = popdevRange(bLegislative)[BEG];\n\n return threshold;\n}\n\n\n","//\n// DRA-SPECIFIC RATINGS (\"SCORES\")\n//\n\nimport * as C from './dra-config';\nimport {Normalizer} from '../rate/normalize';\nimport {avgSVError} from '../partisan/method';\nimport * as T from '../types/all'\n\n\n// RATE POPULATION DEVIATION\n\nexport function ratePopulationDeviation(rawDeviation: number, bLegislative: boolean): number\n{\n const _normalizer = new Normalizer(rawDeviation);\n\n // Raw range in not inverted (i.e., smaller is better)\n const range = C.popdevRange(bLegislative);\n\n _normalizer.clip(0.0, 1.0); // Handle deviations bigger than a whole district\n _normalizer.invert();\n _normalizer.clip(1.0 - range[C.BEG], 1.0 - range[C.END]);\n _normalizer.unitize(1.0 - range[C.BEG], 1.0 - range[C.END]);\n _normalizer.rescale();\n\n return _normalizer.normalizedNum as number;\n}\n\n\n// RATE PROPORTIONALITY\n\nexport function rateProportionality(rawDisproportionality: number, Vf: number, Sf: number): number\n{\n if (isAntimajoritarian(Vf, Sf))\n {\n return 0;\n }\n else\n {\n // Adjust bias to incorporate an acceptable winner's bonus based on Vf\n const extra = extraBonus(Vf);\n const adjusted = adjustDeviation(Vf, rawDisproportionality, extra);\n\n // Then normalize\n const _normalizer = new Normalizer(adjusted);\n\n const worst = C.biasRange()[C.BEG];\n const best = C.biasRange()[C.END];\n\n _normalizer.positive();\n _normalizer.clip(worst, best);\n _normalizer.unitize(worst, best);\n _normalizer.invert();\n _normalizer.rescale();\n\n const rating = _normalizer.normalizedNum as number;\n\n return rating;\n }\n}\n\nexport function extraBonus(Vf: number): number\n{\n const over50Pct = (Vf > 0.5) ? (Vf - 0.5) : (0.5 - Vf);\n const okExtra: number = over50Pct * (C.winnerBonus() - 1.0);\n\n return okExtra; // No longer trimming the result here\n}\n\n// Adjust deviation from proportionality to account for a winner's bonus\n// * If the bias is in the *same* direction as the statewide vote %, then\n// discount the bias by the winner's bonus (extra).\n// * But if the bias and statewide vote % go in opposite directions, leave the\n// bias unadjusted.\nexport function adjustDeviation(Vf: number, disproportionality: number, extra: number): number\n{\n let adjusted: number = disproportionality;\n\n if ((Vf > 0.5) && (disproportionality < 0))\n {\n adjusted = Math.min(disproportionality + extra, 0);\n }\n else if ((Vf < 0.5) && (disproportionality > 0))\n {\n adjusted = Math.max(disproportionality - extra, 0);\n }\n\n return adjusted;\n}\n\nexport function isAntimajoritarian(Vf: number, Sf: number): boolean\n{\n const bDem = ((Vf < (0.5 - avgSVError)) && (Sf > 0.5)) ? true : false;\n const bRep = (((1 - Vf) < (0.5 - avgSVError)) && ((1 - Sf) > 0.5)) ? true : false;\n\n return bDem || bRep;\n}\n\n\n// RATE Impact == \"unearned seats\" <<< DEPRECATED\n/* \nexport function scoreImpact(rawUE: number, Vf: number, Sf: number, N: number): number\n{\n if (isAntimajoritarian(Vf, Sf))\n {\n return 0;\n }\n else\n {\n // Adjust impact to incorporate an acceptable winner's bonus based on Vf\n const extra = extraBonus(Vf);\n const adjustedBias = adjustDeviation(Vf, rawUE / N, extra);\n const adjustedImpact = adjustedBias * N;\n\n // Then normalize\n const _normalizer = new Normalizer(adjustedImpact);\n\n const worst = C.unearnedThreshold();\n const best = 0.0;\n\n _normalizer.positive();\n _normalizer.clip(worst, best);\n _normalizer.unitize(worst, best);\n _normalizer.invert();\n _normalizer.rescale();\n\n const score = _normalizer.normalizedNum as number;\n\n return score;\n }\n}\n*/\n\n\n// RATE Partisan Bias -- an ancillary rating\n\nexport function ratePartisanBias(rawSeatsBias: number, rawVotesBias: number): number\n{\n // NOTE - John Nagle specified these thresholds\n const seatsBiasRating = normalizePartisanBias(rawSeatsBias, 0.06);\n const votesBiasRating = normalizePartisanBias(rawVotesBias, 0.02);\n\n const partisanBiasRating = Math.round((seatsBiasRating + votesBiasRating) / 2);\n\n return partisanBiasRating;\n}\n\n// NOTE - John Nagle specified this function vs. simple linear normalization\nfunction normalizePartisanBias(biasPct: number, pctAt50: number): number \n{\n const b: number = pctAt50 / Math.log(1 / 2);\n const rating: number = 100 * Math.exp(-Math.abs(biasPct / b));\n\n return Math.round(rating);\n}\n\n\n// RATE COMPETITIVENESS\n\n// Normalize overall competitiveness - Raw values are in the range [0.0–1.0]. \n// But the practical max is more like 3/4's, so unitize that range to [0.0–1.0].\n// Then scale the values to [0–100].\nexport function rateCompetitiveness(rawCdf: number): number\n{\n const _normalizer = new Normalizer(rawCdf);\n\n let worst = C.overallCompetitivenessRange()[C.BEG];\n let best = C.overallCompetitivenessRange()[C.END];\n\n _normalizer.clip(worst, best);\n _normalizer.unitize(worst, best);\n _normalizer.rescale();\n\n const rating = _normalizer.normalizedNum as number;\n\n return rating;\n}\n\n\n// RATE MINORITY REPRESENTATION\n\n// NOTE - The probable # of opportunity & coalition districts can be *larger* than\n// what would be a proportional # based on the statewide percentage, because of\n// how minority opportunities are estimated (so that 37% minority shares score\n// like 52% share).\nexport function rateMinorityRepresentation(rawOd: number, pOd: number, rawCd: number, pCd: number): number\n{\n // Score minority opportunity [0–100]\n const cDWeight = C.coalitionDistrictWeight();\n\n // Cap opportunity & coalition districts\n const oDCapped = Math.min(rawOd, pOd);\n const cdCapped = Math.min(rawCd, pCd);\n\n const opportunityScore = (pOd > 0) ? Math.round((oDCapped / pOd) * 100) : 0;\n const coalitionScore = (pCd > 0) ? Math.round((cdCapped / pCd) * 100) : 0;\n\n const rating = Math.round(Math.min(opportunityScore + cDWeight * Math.max(coalitionScore - opportunityScore, 0), 100));\n\n return rating;\n}\n\n\n// RATE COMPACTNESS\n\nexport function rateReock(rawValue: number): number\n{\n const _normalizer = new Normalizer(rawValue);\n\n const worst = C.reockRange()[C.BEG];\n const best = C.reockRange()[C.END];\n\n _normalizer.clip(worst, best);\n _normalizer.unitize(worst, best);\n _normalizer.rescale();\n\n return _normalizer.normalizedNum as number;\n}\n\nexport function ratePolsby(rawValue: number): number\n{\n const _normalizer = new Normalizer(rawValue);\n\n const worst = C.polsbyRange()[C.BEG];\n const best = C.polsbyRange()[C.END];\n\n _normalizer.clip(worst, best);\n _normalizer.unitize(worst, best);\n _normalizer.rescale();\n\n return _normalizer.normalizedNum as number;\n}\n\nexport function rateCompactness(rS: number, ppS: number): number\n{\n const rW = C.reockWeight();\n const ppW = C.polsbyWeight();\n\n const rating = Math.round(((rS * rW) + (ppS * ppW)) / (rW + ppW));\n\n return rating;\n}\n\n\n// RATE SPLITTING\n\nexport const maxSplitting: number = 1.20; // 90–10 => 95–5 splits\nexport const minSplitting: number = 1.00; // No splits still vs. 97–03 splits\nexport const worstMultiplier: number = 1.33; // 1/3 bigger\n\n// =LAMBDA(n, m, most, least, (((MIN(n, m) - 1) / MAX(n, m)) * most) + ((1 - ((MIN(n, m) - 1) / MAX(n, m))) * least))\nexport function bestTarget(n: number, m: number): number \n{\n const more: number = Math.max(n, m);\n const less: number = Math.min(n, m);\n\n const w1: number = ((less - 1) / more);\n const w2: number = 1 - w1;\n\n const target: number = (w1 * maxSplitting) + (w2 * minSplitting);\n\n return target;\n}\n\n// Rating county- & district-splitting are inverses of each other.\n// Sometimes counties >> districts; sometimes counties << districts.\n\nexport function rateCountySplitting(rawCountySplitting: number, nCounties: number, nDistricts: number): number\n{\n const _normalizer = new Normalizer(rawCountySplitting);\n\n // The practical ideal raw measurement depends on the # of counties & districts\n const best = (nCounties > nDistricts) ? bestTarget(nCounties, nDistricts) : maxSplitting;\n const worst = best * worstMultiplier;\n\n _normalizer.clip(best, worst);\n _normalizer.unitize(best, worst);\n _normalizer.invert();\n _normalizer.rescale();\n\n // 09-07-21 - Preserve max value (100) for only when no counties are split\n let rating = _normalizer.normalizedNum as number;\n if ((rating == 100) && (rawCountySplitting > 1.0)) rating = 100 - 1;\n\n return rating;\n}\n\nexport function rateDistrictSplitting(rawDistrictSplitting: number, nCounties: number, nDistricts: number): number\n{\n const _normalizer = new Normalizer(rawDistrictSplitting);\n\n // The practical ideal raw measurement depends on the # of counties & districts\n const best = (nCounties > nDistricts) ? maxSplitting : bestTarget(nCounties, nDistricts);\n const worst = best * worstMultiplier;\n\n _normalizer.clip(best, worst);\n _normalizer.unitize(best, worst);\n _normalizer.invert();\n _normalizer.rescale();\n\n // 09-07-21 - Preserve max value (100) for only when no districts are split\n let rating = _normalizer.normalizedNum as number;\n if ((rating == 100) && (rawDistrictSplitting > 1.0)) rating = 100 - 1;\n\n return rating;\n}\n\nexport function rateSplitting(csS: number, dsS: number): number\n{\n const csW = C.countySplittingWeight();\n const dsW = C.districtSplittingWeight();\n\n let rating = Math.round(((csS * csW) + (dsS * dsW)) / (csW + dsW));\n\n // Preserve max value (100) for only when no districts are split.\n // The max county- or district-splitting rating is 99 when there are splits.\n if ((rating == 100) && ((csS < 100) || (dsS < 100))) rating = 100 - 1;\n\n return rating;\n}\n\n// RATE SPLITTING - Legacy routines for original splitting ratings that didn't handle state legislative maps properly\n\nexport function rateCountySplittingLegacy(rawCountySplitting: number, nCounties: number, nDistricts: number, bLD: boolean = false): number\n{\n const _normalizer = new Normalizer(rawCountySplitting);\n\n // The practical ideal rating depends on the # of counties & districts\n const avgBest = countySplitBest(nCounties, nDistricts, bLD);\n const avgWorst = countySplitWorst(avgBest, bLD);\n\n _normalizer.clip(avgBest, avgWorst);\n _normalizer.unitize(avgBest, avgWorst);\n _normalizer.invert();\n _normalizer.rescale();\n\n // 09-07-21 - Preserve max value (100) for only when no counties are split\n let rating = _normalizer.normalizedNum as number;\n if ((rating == 100) && (rawCountySplitting > 1.0)) rating = 100 - 1;\n\n return rating;\n}\n\nexport function countySplitBest(nCounties: number, nDistricts: number, bLD: boolean = false): number\n{\n const districtType = (bLD) ? T.DistrictType.StateLegislative : T.DistrictType.Congressional;\n\n const practicalBest = C.countySplittingRange(districtType)[C.BEG];\n const nAllowableSplits = Math.min(nDistricts - 1, nCounties);\n const threshold = ((nAllowableSplits * practicalBest) + ((nCounties - nAllowableSplits) * 1.0)) / nCounties;\n\n return threshold;\n}\nexport function countySplitWorst(avgBest: number, bLD: boolean = false): number\n{\n const districtType = (bLD) ? T.DistrictType.StateLegislative : T.DistrictType.Congressional;\n\n const singleBest = C.countySplittingRange(districtType)[C.BEG];\n const singleWorst = C.countySplittingRange(districtType)[C.END];\n\n // The practical ideal score depends on the # of counties & districts\n const avgWorst = avgBest * (singleWorst / singleBest);\n\n return avgWorst;\n}\n\nexport function rateDistrictSplittingLegacy(rawDistrictSplitting: number, bLD: boolean = false): number\n{\n const districtType = (bLD) ? T.DistrictType.StateLegislative : T.DistrictType.Congressional;\n\n const _normalizer = new Normalizer(rawDistrictSplitting);\n\n const best = C.districtSplittingRange(districtType)[C.BEG];\n const worst = C.districtSplittingRange(districtType)[C.END];\n\n _normalizer.clip(best, worst);\n _normalizer.unitize(best, worst);\n _normalizer.invert();\n _normalizer.rescale();\n\n // 09-07-21 - Preserve max value (100) for only when no districts are split\n let rating = _normalizer.normalizedNum as number;\n if ((rating == 100) && (rawDistrictSplitting > 1.0)) rating = 100 - 1;\n\n return rating;\n}\n\nexport function rateSplittingLegacy(csS: number, dsS: number): number\n{\n const csW = C.countySplittingWeight();\n const dsW = C.districtSplittingWeight();\n\n const rating = Math.round(((csS * csW) + (dsS * dsW)) / (csW + dsW));\n\n return rating;\n}\n\nexport function adjustSplittingRating(rating: number, rawCountySplitting: number, rawDistrictSplitting: number): number\n{\n // 09-07-21 - Preserve max value (100) for only when no districts are split\n if ((rating == 100) && ((rawCountySplitting > 1.0) || (rawDistrictSplitting > 1.0))) rating = 100 - 1;\n\n return rating;\n}\n\n// END\n","//\n// NORMALIZATION UTILITIES\n//\n\nimport * as S from './settings';\n\nexport const enum DecayFn\n{\n Gravity // Decay as the square of distance\n}\n\nexport class Normalizer\n{\n rawNum: number;\n wipNum: number;\n normalizedNum?: number;\n\n constructor(rawValue: number)\n {\n this.rawNum = rawValue;\n this.wipNum = this.rawNum;\n }\n\n // *Don't* transform the input.\n identity(): number\n {\n return this.wipNum;\n }\n positive(): number\n {\n this.wipNum = Math.abs(this.wipNum);\n\n return this.wipNum;\n }\n // Invert a value in the unit range [0.0–1.0] (so that bigger is better).\n invert(): number\n {\n console.assert(((this.wipNum >= 0.0) && (this.wipNum <= 1.0)), \"Inverting: \" + S.OUT_OF_RANGE_MSG, this.wipNum);\n\n this.wipNum = 1.0 - this.wipNum;\n\n return this.wipNum;\n }\n // Constrain the value to be within a specified range.\n clip(begin_range: number, end_range: number): number\n {\n // Handle the ends of the range being given either order\n const min_range = Math.min(begin_range, end_range);\n const max_range = Math.max(begin_range, end_range);\n\n this.wipNum = Math.max(Math.min(this.wipNum, max_range), min_range);\n\n return this.wipNum;\n }\n // Recast the value as the delta from a baseline value. NOOP if it is zero.\n // NOTE - Values can be + or -.\n rebase(base: number): number\n {\n this.wipNum = this.wipNum - base;\n\n return this.wipNum;\n }\n // Re-scale a value into the [0.0 – 1.0] range, using a given range.\n // NOTE - This assumes that values have alrady been clipped into the range.\n unitize(begin_range: number, end_range: number): number\n {\n const min_range = Math.min(begin_range, end_range);\n const max_range = Math.max(begin_range, end_range)\n\n console.assert(((this.wipNum >= min_range) && (this.wipNum <= max_range)), \"Unitizing: \" + S.OUT_OF_RANGE_MSG, this.wipNum);\n\n const ranged = this.wipNum - min_range;\n this.wipNum = Math.abs(ranged / (end_range - begin_range));\n\n return this.wipNum;\n }\n // Decay a value in the unit range [0.0–1.0] by its distance from zero.\n // NOTE - If the range is already such that \"bigger is better,\" then the closer\n // the value is to 1.0 (the best) the *less* it will decay.\n decay(fn: DecayFn = DecayFn.Gravity): number\n {\n console.assert(((this.wipNum >= 0.0) && (this.wipNum <= 1.0)), \"Decaying: \" + S.OUT_OF_RANGE_MSG, this.wipNum);\n\n switch (fn)\n {\n case DecayFn.Gravity: {\n this.wipNum = Math.pow(this.wipNum, S.DISTANCE_WEIGHT);\n\n return this.wipNum;\n }\n default: {\n throw new Error(\"Decay function not recognized.\");\n }\n }\n }\n // Translate a value in the unit range to the user-friendly range [0 – 100].\n rescale(): number\n {\n console.assert(((this.wipNum >= 0.0) && (this.wipNum <= 1.0)), \"Rescaling: \" + S.OUT_OF_RANGE_MSG, this.wipNum);\n\n this.normalizedNum = Math.round(this.wipNum * S.NORMALIZED_RANGE);\n\n return this.normalizedNum;\n }\n}\n","//\n// CONSTANTS - related to rating\n//\n\n\n// Normalized scores [0-100]\nexport const NORMALIZED_RANGE: number = 100;\n\n// Square deviations from the ideal\nexport const DISTANCE_WEIGHT: number = 2;\n\n// Out of range message\nexport const OUT_OF_RANGE_MSG: string = \"%f out of range\";\n\n","// Export everything here -- restrict package exports in all/splitting.ts\n\nexport * from './county-district';\nexport * from './coi';\nexport * from './utils';","//\n// COI SPLITTING -- using Sam Wang's metrics\n//\n\nimport * as T from '../types/all';\nimport * as U from './utils';\n\n\nexport function uncertaintyOfMembership(splits: number[]): number \n{\n // 07-29-21 -- Filter out 0% splits\n const intermediate: number[] = splits.filter(x => x > 0).map(x => x * Math.log2(x));\n let result: number = -1 * intermediate.reduce((accumulator, currentValue) => accumulator + currentValue);\n if (U.isMinusZero(result)) result = 0;\n return result;\n}\n\nexport function effectiveSplits(splits: number[]): number \n{\n // 07-29-21 -- Filter out 0% splits\n const intermediate: number[] = splits.filter(x => x > 0).map(x => x ** 2);\n let result: number = (1 / intermediate.reduce((accumulator, currentValue) => accumulator + currentValue)) - 1;\n if (U.isMinusZero(result)) result = 0;\n return result;\n}\n\n\n// CLI & OTHER USERS \n\nexport function calcCOISplitting(communities: T.COISplits[]): T.COISplittingJSONReady\n{\n let byCOI: T.COISplitting[] = [];\n\n for (let coi of communities)\n {\n const es: number = effectiveSplits(coi.splits);\n const u: number = uncertaintyOfMembership(coi.splits);\n\n const entry: T.COISplitting = {\n name: coi.name,\n effectiveSplits: es,\n uncertainty: u\n }\n\n byCOI.push(entry);\n }\n\n const analysis: T.COISplittingJSONReady = {\n byCOI: byCOI\n }\n\n return analysis;\n}","//\n// COUNTY-DISTRICT SPLITTING -- building on Moon Duchin's work\n//\n\nimport * as T from '../types/all';\nimport * as U from '../utils/all';\n\n\nexport function makeSplittingScorecard(CxD: T.CountyProfile, bLog: boolean = false): T.SplittingScorecard\n{\n const dT = totalDistricts(CxD);\n const cT = totalCounties(CxD);\n const county: number = _calcCountySplittingReduced(CxD, dT, cT);\n const district: number = _calcDistrictSplittingReduced(CxD, dT, cT);\n\n const s: T.SplittingScorecard = {\n county: county,\n district: district,\n details: {} // None\n // score?: \n }\n\n return s;\n}\n\n\n// CALCULATE ENHANCED SQRT ENTROPY METRIC -- INTERNAL FUNCTIONS\n\nexport function _calcCountySplittingReduced(CxD: T.CxD, districtTotals: number[], countyTotals: number[], bLD: boolean = false): number\n{\n const rC = reduceCSplits(CxD, districtTotals);\n const f = calcCountyFractions(rC, countyTotals);\n const w = calcCountyWeights(countyTotals);\n\n const rawSqEnt_DC = countySplitting(f, w);\n\n return rawSqEnt_DC;\n}\n\nexport function _calcCountySplitting(CxD: T.CxD, countyTotals: number[], bLog: boolean = false): number\n{\n const f = calcCountyFractions(CxD, countyTotals);\n const w = calcCountyWeights(countyTotals);\n const SqEnt_DC = countySplitting(f, w, bLog);\n\n return SqEnt_DC;\n}\n\nexport function _calcDistrictSplittingReduced(CxD: T.CxD, districtTotals: number[], countyTotals: number[], bLD: boolean = false): number\n{\n const rD = reduceDSplits(CxD, countyTotals)\n const g = calcDistrictFractions(rD, districtTotals);\n const x = calcDistrictWeights(districtTotals);\n\n const rawSqEnt_CD = districtSplitting(g, x);\n\n return rawSqEnt_CD;\n}\n\nexport function _calcDistrictSplitting(CxD: T.CxD, districtTotals: number[], bLog: boolean = false): number\n{\n const g = calcDistrictFractions(CxD, districtTotals);\n const x = calcDistrictWeights(districtTotals);\n const SqEnt_CD = districtSplitting(g, x, bLog);\n\n return SqEnt_CD;\n}\n\n\n// HELPERS\n\nexport function totalCounties(CxD: T.CxD): number[]\n{\n const nC = CxD[0].length;\n const nD = CxD.length;\n let cT: number[] = U.initArray(nC, 0);\n\n for (let j = 0; j < nC; j++)\n {\n for (let i = 0; i < nD; i++)\n {\n cT[j] += CxD[i][j];\n }\n }\n\n return cT;\n}\n\nexport function totalDistricts(CxD: T.CxD): number[]\n{\n const nC = CxD[0].length;\n const nD = CxD.length;\n let dT: number[] = U.initArray(nD, 0);\n\n for (let i = 0; i < nD; i++)\n {\n for (let j = 0; j < nC; j++)\n {\n dT[i] += CxD[i][j];\n }\n }\n\n return dT;\n}\n\n// NOTE - The county-district splits and the county & district totals may all,\n// in general, be fractional/decimal numbers as opposed to integers, due to\n// dissaggregation & re-aggregation. Hence, comparisons need to approximate\n// equality.\n\n// Consolidate *whole districts* (w/in one county) UP into dummy district 0,\n// county by county.\nexport function reduceCSplits(CxD: T.CxD, districtTotals: number[]): number[][]\n{\n // Create the reduced template\n let CxDreducedC: number[][] = U.deepCopy(CxD);\n const nC = CxDreducedC[0].length;\n const vRow: number[] = U.initArray(nC, 0);\n CxDreducedC.unshift(vRow);\n const nD = CxDreducedC.length;\n\n for (let j = 0; j < nC; j++)\n {\n // Skip the virtual district 0\n for (let i = 1; i < nD; i++)\n {\n let split_total = CxDreducedC[i][j];\n\n if (split_total > 0)\n {\n if (U.areRoughlyEqual(split_total, districtTotals[i - 1], U.EQUAL_TOLERANCE))\n {\n CxDreducedC[0][j] += split_total;\n CxDreducedC[i][j] = 0;\n }\n }\n }\n }\n\n return CxDreducedC;\n}\n\n// Consolidate *whole counties* (w/in one district) LEFT into the dummy county 0,\n// district by district.\nexport function reduceDSplits(CxD: T.CxD, countyTotals: number[]): number[][]\n{\n // Create the reduced template\n let CxDreducedD: number[][] = U.deepCopy(CxD);\n CxDreducedD.map(row => row.unshift(0));\n const nC = CxDreducedD[0].length;\n const nD = CxDreducedD.length;\n\n for (let i = 0; i < nD; i++)\n {\n // Skip the virtual county 0\n for (let j = 1; j < nC; j++)\n {\n let split_total = CxDreducedD[i][j];\n\n if (split_total > 0)\n {\n if (U.areRoughlyEqual(split_total, countyTotals[j - 1], U.EQUAL_TOLERANCE))\n {\n CxDreducedD[i][0] += split_total;\n CxDreducedD[i][j] = 0;\n }\n }\n }\n }\n\n return CxDreducedD;\n}\n\nexport function calcCountyWeights(countyTotals: number[]): number[]\n{\n let nC: number = countyTotals.length;\n let cTotal: number = U.sumArray(countyTotals);\n\n let w: number[] = U.initArray(nC, 0.0);\n\n for (let j = 0; j < nC; j++)\n {\n w[j] = countyTotals[j] / cTotal;\n }\n\n return w;\n}\n\nexport function calcDistrictWeights(districtTotals: number[]): number[]\n{\n let nD = districtTotals.length;\n let dTotal: number = U.sumArray(districtTotals);\n\n let x: number[] = U.initArray(nD, 0.0);\n\n for (let i = 0; i < nD; i++)\n {\n x[i] = districtTotals[i] / dTotal;\n }\n\n return x;\n}\n\nexport function calcCountyFractions(CxD: T.CxD, countyTotals: number[]): number[][]\n{\n let nD = CxD.length;\n let nC = CxD[0].length;\n\n let f: number[][] = new Array(nD).fill(0.0).map(() => new Array(nC).fill(0.0));\n\n for (let j = 0; j < nC; j++)\n {\n for (let i = 0; i < nD; i++)\n {\n if (countyTotals[j] > 0)\n {\n f[i][j] = CxD[i][j] / countyTotals[j];\n }\n else\n {\n f[i][j] = 0.0;\n }\n }\n }\n\n return f;\n}\n\nexport function calcDistrictFractions(CxD: T.CxD, districtTotals: number[]): number[][]\n{\n let nD = CxD.length;\n let nC = CxD[0].length;\n\n let g: number[][] = new Array(nD).fill(0.0).map(() => new Array(nC).fill(0.0));\n\n for (let j = 0; j < nC; j++)\n {\n for (let i = 0; i < nD; i++)\n {\n if (districtTotals[i] > 0)\n {\n g[i][j] = CxD[i][j] / districtTotals[i];\n }\n else\n {\n g[i][j] = 0.0;\n }\n }\n }\n\n return g;\n}\n\nexport function splitScore(splits: number[]): number\n{\n let e: number;\n\n if (splits.length > 0)\n {\n e = U.sumArray(splits.map(Math.sqrt))\n }\n else\n {\n e = 1.0;\n }\n\n return e;\n}\n\n// For all districts in a county, sum the split score.\nexport function countySplitScore(j: number, f: number[][], bLog: boolean = false): number\n{\n const numD = f.length;\n let splits: number[] = [];\n\n for (let i = 0; i < numD; i++)\n {\n splits.push(f[i][j]);\n }\n\n const score = splitScore(splits);\n\n return score;\n}\n\n// For all counties, sum the weighted county splits.\nexport function countySplitting(f: number[][], w: number[], bLog: boolean = false): number\n{\n const numC = f[0].length;\n\n let e = 0.0;\n\n for (let j = 0; j < numC; j++)\n {\n let splitScore = countySplitScore(j, f, bLog);\n e += w[j] * splitScore;\n\n if (bLog) console.log(\"County splitting =\", j, w[j], splitScore, e);\n }\n\n return e;\n}\n\n// For all counties in a district, sum the split score.\nexport function districtSplitScore(i: number, g: number[][], bLog: boolean = false): number\n{\n const numC = g[0].length;\n let splits: number[] = [];\n\n for (let j = 0; j < numC; j++)\n {\n splits.push(g[i][j]);\n }\n\n const score = splitScore(splits);\n\n return score;\n}\n\n// For all districts, sum the weighted district splits.\nexport function districtSplitting(g: number[][], x: number[], bLog: boolean = false): number\n{\n const numD = g.length;\n\n let e = 0.0;\n\n for (let i = 0; i < numD; i++)\n {\n let splitScore = districtSplitScore(i, g, bLog);\n e += x[i] * splitScore;\n\n if (bLog) console.log(\"District split score =\", i, x[i], splitScore, e);\n }\n\n return e;\n}\n\n\n// CLI & OTHER USERS\n\nexport function calcSplitting(CxD: T.CxD): T.SplittingJSONReady\n{\n const dT = totalDistricts(CxD);\n const cT = totalCounties(CxD);\n const county: number = _calcCountySplittingReduced(CxD, dT, cT);\n const district: number = _calcDistrictSplittingReduced(CxD, dT, cT);\n\n const out: T.SplittingJSONReady = {\n county: county,\n district: district,\n }\n\n return out;\n}\n\n","export function isMinusZero(value: number)\n{\n return 1 / value === -Infinity;\n}","export * from './array';\nexport * from './general';\nexport * from './settings';","//\n// ARRAY UTILITIES\n//\n\nimport * as U from './general';\n\nexport function sumArray(arr: number[]): number\n{\n return arr.reduce((a, b) => a + b, 0);\n}\n\nexport function avgArray(arr: number[]): number\n{\n return (arr.reduce((a, b) => a + b, 0)) / arr.length;\n}\n\nexport function minArray(arr: number[]): number\n{\n return Math.min(...arr);\n}\n\nexport function maxArray(arr: number[]): number\n{\n return Math.max(...arr);\n}\n\n// Modified from https://jsfiddle.net/Lucky500/3sy5au0c/\n// NOTE - Copy the array, because arr.sort() sorts in place!\nexport function medianArray(arr: number[]): number\n{\n if (arr.length === 0) return 0;\n\n let copyArr = U.deepCopy(arr);\n\n copyArr.sort(function (a: number, b: number)\n {\n return a - b;\n });\n\n var half = Math.floor(copyArr.length / 2);\n\n if (copyArr.length % 2)\n return copyArr[half];\n\n return (copyArr[half - 1] + copyArr[half]) / 2.0;\n}\n\nexport function initArray(n: number, value: any): any[]\n{\n return Array.from(Array(n), () => value);\n}\n\nexport function isArrayEmpty(a: any[]): boolean\n{\n if (a === undefined || a.length == 0) return true;\n\n return false;\n}\n\nexport function keyExists(k: any, o: object): boolean\n{\n return k in o;\n}\n\nexport function isObjectEmpty(o: object): boolean\n{\n return Object.keys(o).length === 0;\n}","//\n// GENERAL UTILITIES\n//\n\n// Deal with decimal census \"counts\" due to disagg/re-agg\nexport function areRoughlyEqual(x: number, y: number, tolerance: number): boolean\n{\n let delta = Math.abs(x - y);\n let result = (delta < tolerance) ? true : false;\n\n return result;\n}\n\nexport function deepCopy(src: any): any\n{\n if (Array.isArray(src))\n {\n let dst: any[] = [];\n\n for (let i: number = 0; i < src.length; i++)\n dst.push(deepCopy(src[i]));\n return dst;\n }\n else if (typeof src === 'object')\n {\n let dst: any = {};\n for (var p in src) if (src.hasOwnProperty(p))\n dst[p] = deepCopy(src[p]);\n return dst;\n }\n else\n return src;\n}","//\n// GLOBAL CONSTANTS\n//\n\n// A small delta to use when testing ranges of values\nexport const EPSILON = 1 / Math.pow(10, 6);\n\n// \"Roughly equal\" = average census block size / 2\nexport const AVERAGE_BLOCK_SIZE = 30;\nexport const EQUAL_TOLERANCE: number = AVERAGE_BLOCK_SIZE / 2;","module.exports = require(\"@dra2020/baseclient\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(\"./lib/all/all.ts\");\n",""],"names":[],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"dra-analytics.js","mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACVA,uGAA6C;AACrC,kCAAW;AAEnB,qFAAiC;AACzB,sBAAK;AAEb,qFAAiC;AACzB,sBAAK;AAEb,8FAAuC;AAC/B,4BAAQ;AAEhB,8FAAuC;AAC/B,4BAAQ;AAEhB,kFAA+B;AACvB,oBAAI;AAEZ,iGAAyC;AACjC,8BAAS;AAEjB,qFAAiC;AACzB,sBAAK;AAEb,qFAAiC;AACzB,sBAAK;;;;;;;;;;;;ACzBb,2BAA2B;;;AAE3B,sFAqB4B;AAnB1B,4BAA4B;AAC5B,wIAAwB;AACxB,4BAA4B;AAC5B,sHAAe;AACf,kIAAqB;AAErB,sCAAsC;AACtC,kHAAa;AACb,kHAAa;AACb,0GAAS;AACT,sHAAe;AACf,wHAAgB;AAChB,kIAAqB;AACrB,wHAAgB;AAEhB,uCAAuC;AACvC,oHAAc;AACd,wHAAgB;AAChB,0HAAiB;;;;;;;;;;;;ACtBnB,2BAA2B;;;AAE3B,0EAGsB;AADpB,sIAAuB;;;;;;;;;;;;ACJzB,2BAA2B;;;AAE3B,0EAIsB;AAFpB,8GAAW;AACX,4GAAU;;;;;;;;;;;;ACLZ,2BAA2B;;;AAE3B,gFAMyB;AAJvB,kIAAqB;AAErB,mBAAmB;AACnB,8HAAmB;;;;;;;;;;;;ACPrB,2BAA2B;;;AAE3B,gFAYyB;AAVvB,4BAA4B;AAC5B,kIAAqB;AACrB,4BAA4B;AAC5B,8HAAmB;AAEnB,4HAAkB;AAClB,0IAAyB;AACzB,sGAAO;AAEP,4GAAU;;;;;;;;;;;;ACbZ,2BAA2B;;;AAE3B,wEAiBqB;AAfnB,2BAA2B;AAC3B,sIAAuB;AACvB,8HAAmB;AACnB,8HAAmB;AACnB,4IAA0B;AAC1B,sHAAe;AAAE,0GAAS;AAAE,4GAAU;AACtC,kHAAa;AAAE,8HAAmB;AAAE,kIAAqB;AACzD,SAAS;AACT,sGAAsG;AAEtG,2BAA2B;AAC3B,wHAAgB;AAChB,4HAAkB;AAElB,sHAAe;;;;;;;;;;;;AClBjB,2BAA2B;;;AAE3B,kFAS0B;AAPxB,4BAA4B;AAC5B,oIAAsB;AACtB,4BAA4B;AAC5B,kHAAa;AAAE,wHAAgB;AAE/B,6BAA6B;AAC7B,sHAAe;AAAE,sIAAuB;;;;;;;;;;;;ACV1C,2BAA2B;;;;;;;;;;;;;ACA3B,2BAA2B;;;AAE3B,0EAIsB;AAFpB,sHAAe;AACf,wGAAQ;;;;;;;;;;;;;;;;;;;;;;;ACLV,2EAA2E;AAC3E,oGAA8B;AAC9B,8FAA2B;AAC3B,0FAAyB;;;;;;;;;;;;ACHzB,EAAE;AACF,cAAc;AACd,EAAE;;;AAKF,0FAA0C;AAC1C,oFAAyC;AAEzC,kGAA0D;AAG1D,2GAA2G;AAC3G,sBAAsB;AACtB,SAAgB,wBAAwB,CAAC,MAAiC,EAAE,OAAgB,KAAK;IAE/F,MAAM,GAAG,kBAAiC,CAAC;IAC3C,MAAM,OAAO,GAAiC,SAAS,CAAC;IAExD,iDAAiD;IACjD,IAAI,QAAQ,GAAW,CAAC,CAAC;IACzB,IAAI,SAAS,GAAW,CAAC,CAAC;IAC1B,IAAI,SAAS,GAAW,CAAC,CAAC;IAE1B,+CAA+C;IAC/C,0DAA0D;IAC1D,IAAI,UAAU,GAAoB,EAAE,CAAC;IAErC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAC/C;QACE,MAAM,QAAQ,GAA0B,6BAAc,EAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAEpF,MAAM,SAAS,GAAW,QAAQ,CAAC,SAAS,CAAC;QAC7C,MAAM,UAAU,GAAW,QAAQ,CAAC,UAAU,CAAC;QAE/C,wEAAwE;QACxE,uEAAuE;QACvE,uCAAuC;QACvC,MAAM,eAAe,GAAW,2BAAS,EAAC,SAAS,CAAC,CAAC;QACrD,MAAM,gBAAgB,GAAW,4BAAU,EAAC,UAAU,CAAC,CAAC;QAExD,IAAI,UAAU,GAAW,4BAAe,EAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACxD,wCAAwC;QACxC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACpD,gEAAgE;QAChE,4DAA4D;QAC5D,MAAM,WAAW,GAAW,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;QAE5D,QAAQ,IAAI,SAAS,CAAC;QACtB,SAAS,IAAI,UAAU,CAAC;QACxB,SAAS,IAAI,WAAW,CAAC;QAEzB,MAAM,QAAQ,GAAkB;YAC9B,QAAQ,EAAE,SAAS;YACnB,eAAe,EAAE,eAAe;YAChC,SAAS,EAAE,UAAU;YACrB,gBAAgB,EAAE,gBAAgB;YAClC,WAAW,EAAE,WAAW;SACzB,CAAC;QAEF,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC3B;IAED,MAAM,QAAQ,GAAW,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC3D,MAAM,SAAS,GAAW,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC7D,MAAM,UAAU,GAAW,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAE1E,MAAM,CAAC,GAA2B;QAChC,QAAQ,EAAE,QAAQ;QAClB,SAAS,EAAE,SAAS;QACpB,UAAU,EAAE,UAAU;QACtB,UAAU,EAAE,UAAU;QACtB,OAAO,EAAE,EAAE,EAAc,OAAO;QAChC,WAAW;KACZ;IAED,OAAO,CAAC,CAAC;AACX,CAAC;AA/DD,4DA+DC;AAED,MAAM;AAEN,qGAAqG;AACrG,sHAAsH;AACtH,SAAgB,eAAe,CAAC,MAAiC;IAE/D,MAAM,GAAG,kBAAiC,CAAC;IAC3C,MAAM,OAAO,GAAiC,SAAS,CAAC;IAExD,iDAAiD;IACjD,IAAI,QAAQ,GAAW,CAAC,CAAC;IACzB,IAAI,SAAS,GAAW,CAAC,CAAC;IAC1B,IAAI,SAAS,GAAW,CAAC,CAAC;IAE1B,IAAI,UAAU,GAAuB,EAAE,CAAC;IAExC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAC/C;QACE,MAAM,QAAQ,GAA0B,6BAAc,EAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAEpF,MAAM,SAAS,GAAW,QAAQ,CAAC,SAAS,CAAC;QAC7C,MAAM,UAAU,GAAW,QAAQ,CAAC,UAAU,CAAC;QAE/C,gEAAgE;QAChE,IAAI,UAAU,GAAW,4BAAe,EAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACxD,wCAAwC;QACxC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAEpD,QAAQ,IAAI,SAAS,CAAC;QACtB,SAAS,IAAI,UAAU,CAAC;QACxB,SAAS,IAAI,UAAU,CAAC;QAExB,MAAM,CAAC,GAAqB;YAC1B,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,UAAU;YAClB,UAAU,EAAE,UAAU;SACvB,CAAC;QAEF,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACpB;IAED,MAAM,QAAQ,GAAW,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC3D,MAAM,SAAS,GAAW,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC7D,MAAM,UAAU,GAAW,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAE1E,MAAM,GAAG,GAA2B;QAClC,QAAQ,EAAE,QAAQ;QAClB,SAAS,EAAE,SAAS;QACpB,UAAU,EAAE,UAAU;QACtB,UAAU,EAAE,UAAU;KACvB;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAjDD,0CAiDC;;;;;;;;;;;;ACrID,EAAE;AACF,mCAAmC;AACnC,EAAE;AACF,6EAA6E;AAC7E,kFAAkF;;;AAGlF,2FAA+C;AAK/C,6BAA6B;AAC7B,EAAE;AACF,kFAAkF;AAClF,uCAAuC;AACvC,EAAE;AACF,yBAAyB;AACzB,yBAAyB;AACzB,oBAAoB;AACpB,0BAA0B;AAC1B,4BAA4B;AAC5B,qBAAqB;AACrB,kCAAkC;AAElC,+EAA+E;AAC/E,kEAAkE;AAElE,SAAgB,aAAa,CAAC,IAAS;IAErC,MAAM,CAAC,EAAE,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;IAElD,OAAO,KAAK,CAAC;AACf,CAAC;AAND,sCAMC;AAGD,sEAAsE;AACtE,2EAA2E;AAC3E,gDAAgD;AAEhD,uBAAuB;AACvB,mCAAmC;AACnC,wEAAwE;AACxE,8DAA8D;AAC9D,kFAAkF;AAElF,SAAgB,aAAa,CAAC,IAAS;IAErC,MAAM,CAAC,EAAE,EAAE,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;IAElD,OAAO,KAAK,CAAC;AACf,CAAC;AAND,sCAMC;AAED,SAAS,YAAY,CAAC,IAAS,EAAE,WAAgB;IAE/C,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;IAEhD,IAAI,eAAe,GAAG,iBAAI,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC5D,eAAe,GAAG,iBAAI,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;IACxD,MAAM,kBAAkB,GAAG,iBAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;IAE5D,MAAM,WAAW,GAAG,iBAAI,CAAC,UAAU,CAAC,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAEzE,MAAM,IAAI,GAAW,iBAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,WAAW,GAAW,iBAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAEvD,OAAO,WAAW,GAAG,IAAI,CAAC;AAC5B,CAAC;AAED,SAAS,YAAY,CAAC,IAAS;IAE7B,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAEnB,IAAI,CAAC,GAAW,CAAC,CAAC;IAClB,IAAI,KAAK,GAAW,CAAC,CAAC;IACtB,IAAI,KAAK,GAAW,CAAC,CAAC;IAEtB,IAAI,MAAM,GAAQ,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;IAC5C,IAAI,iBAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;QAAE,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAE,4BAA4B;IAE/E,MAAM,MAAM,GAAW,MAAM,CAAC,MAAM,CAAC;IACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAsB,mBAAmB;KACxE;QACE,MAAM,MAAM,GAAW,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAExC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAoB,gBAAgB;SACnE,EAAmD,KAAK;YACtD,IAAI,CAAC,GAAG,CAAC;gBAAE,SAAS,CAA6B,iBAAiB;YAElE,KAAK,IAAI,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAsB,oBAAoB;aACrE,EAAiD,KAAK;gBACpD,CAAC,IAAI,CAAC,CAAC;gBACP,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBACf,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;aAChB;SACF;KACF;IAED,MAAM,QAAQ,GAAe,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IAEpD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,YAAY,CAAC,EAAU;IAE9B,OAAO,UAAU,EAAc;QAE7B,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;QAElB,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACzB,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,EAAU;IAE9B,OAAO,UAAU,EAAc;QAE7B,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;QAElB,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACzB,CAAC;AACH,CAAC;AAGD,gFAAgF;AAChF,qFAAqF;AACrF,yCAAyC;AACzC,EAAE;AACF,wCAAwC;AACxC,4BAA4B;AAC5B,EAAE;AACF,kBAAkB;AAClB,EAAE;AACF,4FAA4F;AAE5F,SAAgB,SAAS,CAAC,IAAY,EAAE,QAAgB;IAEtD,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,iBAAQ,EAAI,CAAC,EAAC,CAAC;AAChD,CAAC;AAHD,8BAGC;AAGD,+EAA+E;AAC/E,+EAA+E;AAC/E,uBAAuB;AAEvB,SAAgB,eAAe,CAAC,IAAS;IAEvC,MAAM,QAAQ,GAAW,iBAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE7C,MAAM,GAAG,GAAQ,iBAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAW,iBAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAE5C,OAAO,QAAQ,GAAG,QAAQ,CAAC;AAC7B,CAAC;AARD,0CAQC;AAGD,uFAAuF;AACvF,mFAAmF;AACnF,uFAAuF;AACvF,EAAE;AACF,mBAAmB;AACnB,EAAE;AACF,0CAA0C;AAC1C,EAAE;AACF,qCAAqC;AACrC,EAAE;AACF,+EAA+E;AAC/E,EAAE;AACF,oCAAoC;AACpC,EAAE;AACF,wBAAwB;AAExB,SAAgB,gBAAgB,CAAC,IAAY,EAAE,SAAiB;IAE9D,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,kBAAS,EAAI,CAAC,EAAC,CAAC;AACjD,CAAC;AAHD,4CAGC;AAGD,+EAA+E;AAC/E,gFAAgF;AAChF,iFAAiF;AACjF,aAAa;AACb,EAAE;AACF,6BAA6B;AAC7B,GAAG;AACH,8GAA8G;AAC9G,sDAAsD;AAEtD,sEAAsE;AACtE,SAAgB,qBAAqB,CAAC,IAAY,EAAE,MAAc;IAEhE,OAAO,IAAI,GAAG,MAAM,CAAC;AACvB,CAAC;AAHD,sDAGC;AAGD,iFAAiF;AACjF,mFAAmF;AACnF,mFAAmF;AACnF,aAAa;AACb,EAAE;AACF,iFAAiF;AACjF,2BAA2B;AAC3B,EAAE;AACF,qBAAqB;AACrB,EAAE;AACF,kHAAkH;AAClH,EAAE;AACF,sBAAsB;AACtB,EAAE;AACF,0CAA0C;AAC1C,EAAE;AACF,sCAAsC;AACtC,EAAE;AACF,SAAS;AACT,EAAE;AACF,kCAAkC;AAClC,EAAE;AACF,gCAAgC;AAChC,EAAE;AACF,+EAA+E;AAC/E,sEAAsE;AAEtE,SAAgB,gBAAgB,CAAC,IAAY,EAAE,SAAiB;IAE9D,OAAO,SAAS,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACjE,CAAC;AAHD,4CAGC;AAGD,wFAAwF;AAExF,SAAgB,cAAc,CAAC,IAAS,EAAE,OAA0B;IAElE,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,GAAG,iBAAI,CAAC,cAAc,CAAC;IAEzD,MAAM,IAAI,GAAW,iBAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,SAAS,GAAW,iBAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,iBAAI,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAElD,MAAM,QAAQ,GAAW,iBAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,aAAa,GAAW,iBAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC3D,MAAM,YAAY,GAAW,iBAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAEzD,MAAM,EAAE,GAAG,iBAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAErC,MAAM,QAAQ,GAAW,iBAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAE3C,MAAM,MAAM,GAA0B;QACpC,kEAAkE;QAClE,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC;QAC1B,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC;QAC1B,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC;QAChC,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC;QAC3B,MAAM,EAAE,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC;QACzC,IAAI,EAAE,qBAAqB,CAAC,IAAI,EAAE,QAAQ,CAAC;QAC3C,YAAY,EAAE,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC;QAE/C,sEAAsE;QACtE,SAAS,EAAE,SAAS,CAAC,QAAQ,EAAE,YAAY,CAAC;QAC5C,UAAU,EAAE,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC;KACtD,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAhCD,wCAgCC;;;;;;;;;;;;ACxQD,EAAE;AACF,+DAA+D;AAC/D,EAAE;;;;;;;;;;;;;;;;;;;;;;AAKF,0FAA0C;AAE1C,2FAA8B;AAG9B,mEAAmE;AACnE,gFAAgF;AAChF,SAAgB,mBAAmB,CAAC,IAAS,EAAE,GAAe,EAAE,OAA0B;IAExF,wBAAwB;IACxB,MAAM,QAAQ,GAA0B,6BAAc,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAEtE,wBAAwB;IACxB,MAAM,KAAK,GAAW,eAAe,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAErD,OAAO,KAAK,CAAC;AACf,CAAC;AATD,kDASC;AAED,yDAAyD;AACzD,SAAgB,gBAAgB,CAAC,IAAS,EAAE,GAAe,EAAE,OAA0B;IAErF,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IACzD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAEzD,OAAO,WAAW,CAAC;AACrB,CAAC;AAND,4CAMC;AAED,0EAA0E;AAC1E,SAAgB,iBAAiB,CAAC,MAAiC,EAAE,GAAe,EAAE,OAA0B;IAE9G,IAAI,MAAM,GAAa,EAAE,CAAC;IAE1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAC/C;QACE,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QACjE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACpB;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAXD,8CAWC;AAED,MAAM;AAEN,uFAAuF;AACvF,kEAAkE;AAClE,SAAgB,qBAAqB,CAAC,MAAiC;IAErE,MAAM,GAAG,kBAAiC,CAAC;IAC3C,MAAM,OAAO,GAAiC,SAAS,CAAC;IAExD,IAAI,SAAS,GAAW,CAAC,CAAC;IAC1B,IAAI,UAAU,GAAuB,EAAE,CAAC;IAExC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAC/C;QACE,wBAAwB;QACxB,MAAM,QAAQ,GAA0B,6BAAc,EAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAEpF,wBAAwB;QACxB,MAAM,QAAQ,GAAW,eAAe,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACxD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAEzD,SAAS,IAAI,WAAW,CAAC;QAEzB,MAAM,KAAK,GAAqB;YAC9B,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,YAAY,EAAE,QAAQ,CAAC,YAAY;YACnC,UAAU,EAAE,WAAW;SACxB,CAAC;QAEF,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACxB;IAED,MAAM,UAAU,GAAW,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAE1E,MAAM,GAAG,GAAsB;QAC7B,UAAU,EAAE,UAAU;QACtB,UAAU,EAAE,UAAU;KACvB;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAzCD,sDAyCC;AAGD,sDAAsD;AAEtD,SAAgB,eAAe,CAAC,QAA+B,EAAE,GAAe;IAE9E,IAAI,GAAG,mBAAsB;QAAE,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC;;QACzD,OAAO,sBAAsB,CAAC,QAAQ,CAAC,CAAC;AAC/C,CAAC;AAJD,0CAIC;AAED,mBAAmB;AACnB,SAAS,aAAa,CAAC,QAA+B;IAEpD,MAAM,KAAK,GAAa;QACtB,YAAY;QACZ,YAAY;QACZ,CAAC,aAAa;QACd,CAAC,aAAa;QACd,CAAC,cAAc;QACf,CAAC,aAAa;QACd,CAAC,YAAY,CAAO,eAAe;KACpC,CAAC;IAEF,MAAM,SAAS,GAAW,cAAc,CAAC;IAEzC,MAAM,CAAC,GAAa;QAClB,QAAQ,CAAC,KAAK;QACd,QAAQ,CAAC,KAAK;QACd,QAAQ,CAAC,KAAK;QACd,QAAQ,CAAC,IAAI;QACb,QAAQ,CAAC,MAAM;QACf,QAAQ,CAAC,IAAI;QACb,QAAQ,CAAC,YAAY;KACtB,CAAC;IAEF,MAAM,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC;IACjD,MAAM,UAAU,GAAG,KAAK,CAAC;IAEzB,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,iCAAiC;AACjC,SAAS,sBAAsB,CAAC,QAA+B;IAE7D,MAAM,KAAK,GAAa;QACtB,iBAAiB;QACjB,gBAAgB;QAChB,gBAAgB;QAChB,iBAAiB;QACjB,iBAAiB;QACjB,iBAAiB;QACjB,iBAAiB,CAAG,eAAe;KACpC,CAAC;IAEF,MAAM,CAAC,GAAa;QAClB,QAAQ,CAAC,KAAK;QACd,QAAQ,CAAC,KAAK;QACd,QAAQ,CAAC,KAAK;QACd,QAAQ,CAAC,IAAI;QACb,QAAQ,CAAC,MAAM;QACf,QAAQ,CAAC,IAAI;QACb,QAAQ,CAAC,YAAY;KACtB,CAAC;IAEF,MAAM,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACrC,MAAM,UAAU,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;IAErC,OAAO,UAAU,CAAC;AACpB,CAAC;;;;;;;;;;;;AClKD,EAAE;AACF,mEAAmE;AACnE,EAAE;;;AAKF,SAAgB,UAAU,CAAC,CAAS,EAAE,CAAS;IAE7C,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,qDAAqD,CAAC,CAAC;IAEzG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;AAC9E,CAAC;AALD,gCAKC;AAAA,CAAC;AAEF,SAAS,OAAO,CAAC,SAAkB,EAAE,OAAe;IAElD,IAAI,CAAC,SAAS;QACZ,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC;;;;;;;;;;;;;;;;;;;;;;;AClBD,qEAAqE;AACrE,4FAA6B;;;;;;;;;;;;ACD7B,EAAE;AACF,uBAAuB;AACvB,EAAE;;;;;;;;;;;;;;;;;;;;;;AAIF,kGAAwC;AAExC,sFAAkC;AAGlC,SAAgB,uBAAuB,CAAC,GAAW,EAAE,GAAW,EAAE,UAAkB;IAElF,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,UAAU,CAAC,CAAE,8BAA8B;AAClE,CAAC;AAHD,0DAGC;AAED,SAAgB,cAAc,CAAC,QAAgB,EAAE,YAAqB;IAEpE,MAAM,SAAS,GAAG,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;IAElD,OAAO,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;AAChD,CAAC;AALD,wCAKC;AAED,SAAgB,uBAAuB,CAAC,gBAA0B,EAAE,UAAkB,EAAE,YAAqB,EAAE,OAAgB,KAAK;IAElI,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAE9D,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,GAAG,GAAG,CAAC,CAAC;IAEZ,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAChC;QACE,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QACpC,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;KACrC;IAED,MAAM,SAAS,GAAG,uBAAuB,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;IAChE,mEAAmE;IACnE,MAAM,YAAY,GAAG,CAAC,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,cAAc,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IAEhH,MAAM,SAAS,GAAG,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;IAElD,MAAM,KAAK,GAAW;QACpB,cAAc,EAAE,GAAG,GAAG,GAAG;QACzB,WAAW,EAAE,SAAS;KACvB,CAAC;IAEF,2BAA2B;IAC3B,MAAM,CAAC,GAAwB;QAC7B,SAAS,EAAE,SAAS;QACpB,kBAAkB;QAClB,YAAY,EAAE,YAAY;QAC1B,KAAK,EAAE,KAAK;KACb;IAED,OAAO,CAAC,CAAC;AACX,CAAC;AAjCD,0DAiCC;;;;;;;;;;;;ACxDD,qEAAqE;;;;;;;;;;;;AAErE,0FAA4B;AAC5B,wFAA2B;;;;;;;;;;;;ACH3B,EAAE;AACF,wDAAwD;AACxD,EAAE;;;;;;;;;;;;;;;;;;;;;;AAGF,mFAA6B;AAG7B,SAAgB,WAAW,CAAC,UAA0B,EAAE,KAAwB,EAAE,OAAgB,KAAK;IAErG,IAAI,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,IAAI,SAAS,GAAa,EAAE,CAAC;IAE7B,qDAAqD;IACrD,IAAI,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;IAC/B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;IAElC,mEAAmE;IACnE,6DAA6D;IAC7D,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,EAC3B;QACE,gCAAgC;QAChC,IAAI,IAAI,GAAG,SAAS,CAAC,GAAG,EAAY,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAElB,0EAA0E;QAC1E,0BAA0B;QAC1B,IAAI,eAAe,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAElF,oFAAoF;QACpF,IAAI,gBAAgB,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3F,SAAS,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,CAAC;KACrC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC;IAEnD,IAAI,IAAI,IAAI,CAAC,UAAU,EACvB;QACE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClF,OAAO,CAAC,GAAG,CAAC,sDAAsD,EAAE,UAAU,CAAC,CAAC;KACjF;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAnCD,kCAmCC;;;;;;;;;;;;AC3CD,EAAE;AACF,mEAAmE;AACnE,EAAE;;;;;;;;;;;;;;;;;;;;;;AAGF,sFAAkC;AAClC,mFAA6B;AAE7B,EAAE;AACF,6CAA6C;AAC7C,0CAA0C;AAC1C,kDAAkD;AAClD,EAAE;AAGF,SAAgB,UAAU,CAAC,UAAkB,EAAE,UAA0B,EAAE,IAAmB,EAAE,KAAwB,EAAE,OAAgB,KAAK;IAE7I,IAAI,oBAAoB,GAAG,IAAI,GAAG,EAAE,CAAC;IACrC,IAAI,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAE7C,IAAI,CAAC,CAAC,YAAY,CAAC,eAAe,CAAC;QAAE,OAAO,IAAI,CAAC;IAEjD,KAAK,IAAI,OAAO,IAAI,eAAe,EACnC;QACE,iEAAiE;QACjE,IAAI,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAE5C,KAAK,IAAI,QAAQ,IAAI,SAAS,EAC9B;YACE,IAAI,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC;gBAAE,OAAO,KAAK,CAAC;YAE5C,IAAI,mBAAmB,GAAG,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAExD,uEAAuE;YACvE,oEAAoE;YACpE,yBAAyB;YAEzB,IAAI,mBAAmB,IAAI,SAAS;gBAAE,OAAO,KAAK,CAAC;YAEnD,IAAI,mBAAmB,IAAI,UAAU,EACrC;gBACE,oBAAoB,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;gBAE9C,IAAI,oBAAoB,CAAC,IAAI,GAAG,CAAC;oBAAE,OAAO,KAAK,CAAC;aACjD;SACF;KACF;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAlCD,gCAkCC;;;;;;;;;;;;ACjDD,EAAE;AACF,mBAAmB;AACnB,EAAE;;;AAEF,kEAAkE;AACrD,qBAAa,GAAW,cAAc,CAAC;AAEpD,gEAAgE;AACnD,oBAAY,GAAW,CAAC,CAAC;;;;;;;;;;;;ACRtC,EAAE;AACF,YAAY;AACZ,EAAE;;;;;;;;;;;;;;;;;;;;;;AAIF,yFAAgC;AAChC,sFAAkC;AAGlC,SAAgB,WAAW,CAAC,KAAa,EAAE,IAAmB;IAE5D,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;IAEjD,OAAO,SAAS,CAAC;AACnB,CAAC;AALD,kCAKC;AAED,SAAgB,SAAS,CAAC,IAAY,EAAE,KAAwB;IAE9D,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEzC,8CAA8C;IAC9C,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IACtB,MAAM,CAAC,GAAG,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEpD,OAAO,CAAC,CAAC;AACX,CAAC;AATD,8BASC;AAED,SAAgB,aAAa,CAAC,KAAa;IAEzC,OAAO,KAAK,IAAI,CAAC,CAAC,aAAa,CAAC;AAClC,CAAC;AAHD,sCAGC;AAGD,qDAAqD;AACrD,yDAAyD;AACzD,SAAgB,UAAU,CAAC,IAAmB;IAE5C,IAAI,YAAY,GAAG,EAAwB,CAAC;IAE5C,KAAK,IAAI,KAAK,IAAI,IAAI,EACtB;QACE,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAE7B,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;YAAE,YAAY,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;QAEnF,YAAY,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KACrC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAdD,gCAcC;;;;;;;;;;;;AClDD,6DAA6D;;;;;;;;;;;;AAE7D,2FAA0B;AAC1B,iFAAsB;;;;;;;;;;;;ACHtB,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;;;;;;;;;;;;;;;;;;;;AAGF,sFAAkC;AAClC,kGAAwC;AAExC,4FAA6C;AAC7C,2FAAsD;AAiCtD,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAgB,+BAA+B;AACtE,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC,CAAe,yBAAyB;AAEhE,SAAgB,qBAAqB,CAAC,cAA8B,EAAE,eAAiC,EAAE,OAAgB,KAAK;IAE5H,MAAM,MAAM,GAAG,CAAC,CAAC,CAAU,2BAA2B;IACtD,MAAM,MAAM,GAAW,CAAC,CAAC,CAAE,4BAA4B;IACvD,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC;IAE1C,qCAAqC;IACrC,yDAAyD;IACzD,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE3D,6EAA6E;IAC7E,MAAM,eAAe,GAAa,mBAAmB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAE/E,IAAI,aAAa,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,iBAAiB,GAAW,CAAC,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAC/B;QACE,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;QAEhC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAEpD,8DAA8D;QAC9D,IAAI,CAAC,GAAG,CAAC;YACP,iBAAiB,IAAI,IAAI,CAAC;KAC7B;IAED,IAAI,WAAW,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAG,qBAAqB;IAEnE,oBAAoB;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EACnC;QACE,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;QAExD,qDAAqD;QACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAC/B;YACE,MAAM,EAAE,GAAG,aAAa,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAE,2BAA2B;YAElE,MAAM,MAAM,GAAW,YAAY,CAAC,EAAE,CAAC,CAAC;YACxC,IAAI,MAAM,GAAG,CAAC,EACd;gBACE,oDAAoD;gBACpD,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAE,mBAAmB;gBAEvD,gCAAgC;gBAChC,WAAW,CAAC,CAAC,CAAC,IAAI,sBAAsB,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;aACjD;SACF;KACF;IAED,MAAM,KAAK,GAAuB,mBAAmB,CAAC,aAAa,CAAC,CAAC;IAErE,kFAAkF;IAClF,MAAM,EAAE,GAAW,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAK,gDAAgD;IACzG,MAAM,EAAE,GAAW,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAE,iBAAiB;IAE5D,mFAAmF;IACnF,MAAM,GAAG,GAAW,iBAAiB,CAAC;IACtC,MAAM,GAAG,GAAW,aAAa,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC;IAEvD,IAAI,CAAC,GAAwB;QAC3B,kBAAkB,EAAE,KAAK;QACzB,oBAAoB,EAAE,EAAE;QACxB,yBAAyB,EAAE,GAAG;QAC9B,kBAAkB,EAAE,EAAE;QACtB,sBAAsB,EAAE,GAAG;QAC3B,OAAO,EAAE,EAAE,EAAc,OAAO;QAChC,WAAW;KACZ;IAED,OAAO,CAAC,CAAC;AACX,CAAC;AAzED,sDAyEC;AAGD,UAAU;AAEV,8EAA8E;AAC9E,iEAAiE;AACjE,SAAS,mBAAmB,CAAC,CAAa;IAExC,MAAM,QAAQ,GAAoB;QAChC,QAAQ,EAAE,CAAC,kBAAsB,gBAAmB;QACpD,QAAQ,EAAE,CAAC,kBAAsB,gBAAmB;QACpD,QAAQ,EAAE,CAAC,kBAAsB,gBAAmB;QACpD,QAAQ,EAAE,CAAC,kBAAsB,gBAAmB;QACpD,QAAQ,EAAE,CAAC,kBAAsB,gBAAmB;QACpD,SAAS,EAAE,CAAC,kBAAsB,iBAAoB;QACtD,MAAM,EAAE,CAAC,kBAAsB,gBAAmB;QAClD,SAAS,EAAE,CAAC,kBAAsB,mBAAsB;KACzD;IACD,MAAM,KAAK,GAAoB;QAC7B,QAAQ,EAAE,CAAC,eAAmB,gBAAmB;QACjD,QAAQ,EAAE,CAAC,eAAmB,gBAAmB;QACjD,QAAQ,EAAE,CAAC,eAAmB,gBAAmB;QACjD,QAAQ,EAAE,CAAC,eAAmB,gBAAmB;QACjD,QAAQ,EAAE,CAAC,eAAmB,gBAAmB;QACjD,SAAS,EAAE,CAAC,eAAmB,iBAAoB;QACnD,MAAM,EAAE,CAAC,eAAmB,gBAAmB;QAC/C,SAAS,EAAE,CAAC,eAAmB,mBAAsB;KACtD;IACD,MAAM,QAAQ,GAAoB;QAChC,QAAQ,EAAE,CAAC,kBAAsB,gBAAmB;QACpD,QAAQ,EAAE,CAAC,kBAAsB,gBAAmB;QACpD,QAAQ,EAAE,CAAC,kBAAsB,gBAAmB;QACpD,QAAQ,EAAE,CAAC,kBAAsB,gBAAmB;QACpD,QAAQ,EAAE,CAAC,kBAAsB,gBAAmB;QACpD,SAAS,EAAE,CAAC,kBAAsB,iBAAoB;QACtD,MAAM,EAAE,CAAC,kBAAsB,gBAAmB;QAClD,SAAS,EAAE,CAAC,kBAAsB,mBAAsB;KACzD;IACD,MAAM,OAAO,GAAoB;QAC/B,QAAQ,EAAE,CAAC,iBAAqB,gBAAmB;QACnD,QAAQ,EAAE,CAAC,iBAAqB,gBAAmB;QACnD,QAAQ,EAAE,CAAC,iBAAqB,gBAAmB;QACnD,QAAQ,EAAE,CAAC,iBAAqB,gBAAmB;QACnD,QAAQ,EAAE,CAAC,iBAAqB,gBAAmB;QACnD,SAAS,EAAE,CAAC,iBAAqB,iBAAoB;QACrD,MAAM,EAAE,CAAC,iBAAqB,gBAAmB;QACjD,SAAS,EAAE,CAAC,iBAAqB,mBAAsB;KACxD;IACD,MAAM,KAAK,GAAoB;QAC7B,QAAQ,EAAE,CAAC,eAAmB,gBAAmB;QACjD,QAAQ,EAAE,CAAC,eAAmB,gBAAmB;QACjD,QAAQ,EAAE,CAAC,eAAmB,gBAAmB;QACjD,QAAQ,EAAE,CAAC,eAAmB,gBAAmB;QACjD,QAAQ,EAAE,CAAC,eAAmB,gBAAmB;QACjD,SAAS,EAAE,CAAC,eAAmB,iBAAoB;QACnD,MAAM,EAAE,CAAC,eAAmB,gBAAmB;QAC/C,SAAS,EAAE,CAAC,eAAmB,mBAAsB;KACtD;IACD,MAAM,MAAM,GAAoB;QAC9B,QAAQ,EAAE,CAAC,gBAAoB,gBAAmB;QAClD,QAAQ,EAAE,CAAC,gBAAoB,gBAAmB;QAClD,QAAQ,EAAE,CAAC,gBAAoB,gBAAmB;QAClD,QAAQ,EAAE,CAAC,gBAAoB,gBAAmB;QAClD,QAAQ,EAAE,CAAC,gBAAoB,gBAAmB;QAClD,SAAS,EAAE,CAAC,gBAAoB,iBAAoB;QACpD,MAAM,EAAE,CAAC,gBAAoB,gBAAmB;QAChD,SAAS,EAAE,CAAC,gBAAoB,mBAAsB;KACvD;IAED,MAAM,CAAC,GAAuB;QAC5B,QAAQ,EAAE,QAAQ;QAClB,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,OAAO;QAChB,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,MAAM;KACf,CAAC;IAEF,OAAO,CAAC,CAAC;AACX,CAAC;AAED,4FAA4F;AAC5F,SAAgB,mBAAmB,CAAC,CAAqB;IAEvD,MAAM,QAAQ,GAAa;QACzB,CAAC,CAAC,QAAQ,CAAC,QAAQ;QACnB,CAAC,CAAC,QAAQ,CAAC,QAAQ;QACnB,CAAC,CAAC,QAAQ,CAAC,QAAQ;QACnB,CAAC,CAAC,QAAQ,CAAC,QAAQ;QACnB,CAAC,CAAC,QAAQ,CAAC,QAAQ;QACnB,CAAC,CAAC,QAAQ,CAAC,SAAS;QACpB,CAAC,CAAC,QAAQ,CAAC,MAAM;QACjB,CAAC,CAAC,QAAQ,CAAC,SAAS;KACrB,CAAC;IACF,MAAM,KAAK,GAAa;QACtB,CAAC,CAAC,KAAK,CAAC,QAAQ;QAChB,CAAC,CAAC,KAAK,CAAC,QAAQ;QAChB,CAAC,CAAC,KAAK,CAAC,QAAQ;QAChB,CAAC,CAAC,KAAK,CAAC,QAAQ;QAChB,CAAC,CAAC,KAAK,CAAC,QAAQ;QAChB,CAAC,CAAC,KAAK,CAAC,SAAS;QACjB,CAAC,CAAC,KAAK,CAAC,MAAM;QACd,CAAC,CAAC,KAAK,CAAC,SAAS;KAClB,CAAC;IACF,MAAM,QAAQ,GAAa;QACzB,CAAC,CAAC,QAAQ,CAAC,QAAQ;QACnB,CAAC,CAAC,QAAQ,CAAC,QAAQ;QACnB,CAAC,CAAC,QAAQ,CAAC,QAAQ;QACnB,CAAC,CAAC,QAAQ,CAAC,QAAQ;QACnB,CAAC,CAAC,QAAQ,CAAC,QAAQ;QACnB,CAAC,CAAC,QAAQ,CAAC,SAAS;QACpB,CAAC,CAAC,QAAQ,CAAC,MAAM;QACjB,CAAC,CAAC,QAAQ,CAAC,SAAS;KACrB,CAAC;IACF,MAAM,OAAO,GAAa;QACxB,CAAC,CAAC,OAAO,CAAC,QAAQ;QAClB,CAAC,CAAC,OAAO,CAAC,QAAQ;QAClB,CAAC,CAAC,OAAO,CAAC,QAAQ;QAClB,CAAC,CAAC,OAAO,CAAC,QAAQ;QAClB,CAAC,CAAC,OAAO,CAAC,QAAQ;QAClB,CAAC,CAAC,OAAO,CAAC,SAAS;QACnB,CAAC,CAAC,OAAO,CAAC,MAAM;QAChB,CAAC,CAAC,OAAO,CAAC,SAAS;KACpB,CAAC;IACF,MAAM,KAAK,GAAa;QACtB,CAAC,CAAC,KAAK,CAAC,QAAQ;QAChB,CAAC,CAAC,KAAK,CAAC,QAAQ;QAChB,CAAC,CAAC,KAAK,CAAC,QAAQ;QAChB,CAAC,CAAC,KAAK,CAAC,QAAQ;QAChB,CAAC,CAAC,KAAK,CAAC,QAAQ;QAChB,CAAC,CAAC,KAAK,CAAC,SAAS;QACjB,CAAC,CAAC,KAAK,CAAC,MAAM;QACd,CAAC,CAAC,KAAK,CAAC,SAAS;KAClB,CAAC;IACF,MAAM,MAAM,GAAa;QACvB,CAAC,CAAC,MAAM,CAAC,QAAQ;QACjB,CAAC,CAAC,MAAM,CAAC,QAAQ;QACjB,CAAC,CAAC,MAAM,CAAC,QAAQ;QACjB,CAAC,CAAC,MAAM,CAAC,QAAQ;QACjB,CAAC,CAAC,MAAM,CAAC,QAAQ;QACjB,CAAC,CAAC,MAAM,CAAC,SAAS;QAClB,CAAC,CAAC,MAAM,CAAC,MAAM;QACf,CAAC,CAAC,MAAM,CAAC,SAAS;KACnB,CAAC;IAEF,MAAM,CAAC,GAAe,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAE1E,OAAO,CAAC,CAAC;AACX,CAAC;AAlED,kDAkEC;AAED,SAAgB,mBAAmB,CAAC,OAAiB,EAAE,CAAS;IAE9D,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,yBAAyB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAE1E,OAAO,eAAe,CAAC;AACzB,CAAC;AALD,kDAKC;AAED,+EAA+E;AAC/E,8EAA8E;AAC9E,mFAAmF;AACnF,8BAA8B;AAC9B,kFAAkF;AAClF,gEAAgE;AAChE,EAAE;AACF,SAAgB,sBAAsB,CAAC,EAAU,EAAE,IAAkB;IAEnE,yDAAyD;IACzD,MAAM,SAAS,GAAG,KAAK,CAAC;IACxB,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,+BAA+B,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC1E,MAAM,KAAK,GAAG,CAAC,CAAC,wBAAwB,EAAE,CAAC;IAE3C,MAAM,WAAW,GAAG,IAAI,sBAAU,CAAC,EAAE,CAAC,CAAC;IAEvC,IAAI,KAAK,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC,CAAS,iCAAiC;IACxE,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,EAAiB,6BAA6B;QAClE,KAAK,IAAI,CAAC,CAAC,qBAAqB,EAAE,CAAC,CAAE,qCAAqC;IAE5E,WAAW,CAAC,MAAM,IAAI,KAAK,CAAC;IAE5B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3C,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAE9C,MAAM,KAAK,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,+BAAkB,EAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IAEtG,OAAO,KAAK,CAAC;AACf,CAAC;AArBD,wDAqBC;AAGD,UAAU;AAEV,SAAS,YAAY,CAAC,EAAU;IAE9B,IAAI,EAAE,GAAG,IAAI;QACX,OAAO,CAAC,CAAC;SACN,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;QAClC,OAAO,CAAC,CAAC;SACN,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;QAClC,OAAO,CAAC,CAAC;SACN,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;QAClC,OAAO,CAAC,CAAC;SACN,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;QAClC,OAAO,CAAC,CAAC;SACN,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;QAClC,OAAO,CAAC,CAAC;SACN,aAAa;QAChB,OAAO,CAAC,CAAC;AACb,CAAC;AAED,SAAgB,yBAAyB,CAAC,UAAkB,EAAE,UAAkB;IAE9E,MAAM,OAAO,GAAG,GAAG,CAAC;IACpB,MAAM,UAAU,GAAG,UAAU,GAAG,UAAU,CAAC;IAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,OAAO,CAAC,CAAC;IAElD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAPD,8DAOC;AAED;;;EAGE;;;;;;;;;;;;ACnVF,EAAE;AACF,4BAA4B;AAC5B,EAAE;;;AAKF,iEAAiE;AACjE,SAAgB,mBAAmB,CAAC,UAAwC,CAAC,iBAAiB,EAAE,UAAkB,EAAE,MAAwB;IAE1I,6DAA6D;IAC7D,oGAAoG;IACpG,kDAAkD;IAClD,6DAA6D;IAC7D,4DAA4D;IAC5D,kIAAkI;IAElI,wFAAwF;IACxF,iEAAiE;IAEjE,MAAM,MAAM,GAAkB;QAC5B,GAAG,EAAE,UAAU,CAAC,GAAG;QACnB,UAAU,EAAE,6BAA6B,CAAC,UAAU,CAAC,UAAU,CAAC;QAChE,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,6BAA6B,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;QAC1F,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,6BAA6B,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;QACjF,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,6BAA6B,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;QACvF,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,6BAA6B,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;QACjF,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,6BAA6B,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;QACpF,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,6BAA6B,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;KAC3F;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAxBD,kDAwBC;AAED,4EAA4E;AAC5E,8DAA8D;AAC9D,SAAS,gBAAgB,CAAC,UAAyB;IAEjD,4BAA4B;IAE5B,MAAM,CAAC,GAAW,UAAU,CAAC,MAAM,CAAC;IAEpC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAC1B;QACE,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAEzB,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;QACd,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;QACd,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;KACzB;IAED,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC;IAC1E,MAAM,SAAS,GAAG,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9C,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE9H,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC;IACvB,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC;IAEvB,4CAA4C;IAE5C,IAAI,GAAG,GAAW,CAAC,CAAC,CAAc,4CAA4C;IAC9E,IAAI,GAAG,GAAW,CAAC,CAAC,CAAc,6CAA6C;IAE/E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAC1B;QACE,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAEzB,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;QAChC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;KAC5D;IAED,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAE1B,MAAM,MAAM,GAAQ;QAClB,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QAC3B,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACjE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;KAC/B;IAED,sBAAsB;IAEtB,MAAM,EAAE,GAAuB;QAC7B,KAAK,EAAE,KAAK;QACZ,SAAS,EAAE,SAAS;QACpB,EAAE,EAAE,EAAE;QACN,MAAM,EAAE,MAAM;KACf;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,6BAA6B,CAAC,UAAyB;IAE9D,MAAM,EAAE,GAAuB,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAuB,gBAAgB,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAE9E,MAAM,MAAM,GAAgB;QAC1B,KAAK,EAAE,EAAE,CAAC,KAAK;QACf,SAAS,EAAE,EAAE,CAAC,SAAS;QACvB,EAAE,EAAE,EAAE,CAAC,EAAE;QACT,MAAM,EAAE,OAAO,CAAC,SAAS;QACzB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS;QAC/B,MAAM,EAAE,UAAU;KACnB;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,yCAAyC;AACzC,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAU,EAAE,GAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAC;AAClF,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAU,EAAE,GAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAC;AAElF,MAAM,OAAO,GAAG,CAAC,EAAe,EAAe,EAAE,GAAE,OAAO,EAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAC,GAAC,CAAC;;;;;;;;;;;;ACxHlF,wEAAwE;;;;;;;;;;;;;;;;;;;;;;;;;AAExE,iFAAsB;AACtB,uFAAyB;AACzB,mFAAuB;AACvB,uGAAiC;AAQjC,sFAAkC;AAElC,kGAKkC;AAElC,4FAegC;AAEhC,0HAO0C;AAC1C,wEAAiC;AAGjC,SAAgB,qBAAqB,CAAC,EAAU,EAAE,OAAkB,EAAE,OAAgB,KAAK;IAEzF,MAAM,KAAK,uBAAuB,CAAC;IAEnC,MAAM,CAAC,GAAW,OAAO,CAAC,MAAM,CAAC;IAEjC,MAAM,KAAK,GAAG,oBAAS,EAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,wBAAa,EAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAEvC,QAAQ;IACR,iDAAiD;IAEjD,MAAM,KAAK,GAAG,yBAAY,EAAC,OAAO,CAAC,CAAC;IAEpC,MAAM,IAAI,GAAG,qBAAQ,EAAC,OAAO,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,uBAAY,EAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAEpC,MAAM,SAAS,GAAG,yCAA8B,EAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAE,kCAAkC;IAEpG,MAAM,SAAS,GAAG,2BAAgB,EAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAEhD,uDAAuD;IACvD,MAAM,SAAS,GAAgB,0BAAa,EAAC,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IACjE,MAAM,SAAS,GAAgB,yBAAc,EAAC,SAAS,CAAC,CAAC;IAEzD,MAAM,GAAG,GAAG,0BAAe,EAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAEzC,MAAM,IAAI,GAAG,0BAAe,EAAC,SAAwB,EAAE,CAAC,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC;IACvB,MAAM,KAAK,GAAG,uBAAY,EAAC,SAAwB,EAAE,CAAC,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,sBAAW,EAAC,OAAO,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,0BAAe,EAAC,OAAO,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,6BAAkB,EAAC,SAAS,EAAE,SAAS,EAAE,KAAe,CAAC,CAAC;IAEvE,MAAM,EAAE,GAAG,4BAAiB,EAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,gCAAqB,EAAC,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,iCAAsB,EAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,mCAAwB,EAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAClD,MAAM,GAAG,GAAG,mCAAwB,EAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,EAAE,GAAG,+BAAoB,EAAC,OAAO,CAAC,CAAC;IAEzC,2DAA2D;IAC3D,MAAM,IAAI,GAAG,mBAAQ,EAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,sCAAiB,EAAC,EAAE,EAAE,SAAwB,CAAC,CAAC;IAChE,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,2CAAgC,EAAC,EAAE,EAAE,OAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1F,MAAM,EAAE,GAAG,2CAAsB,EAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,gDAA2B,EAAC,EAAY,EAAE,CAAC,CAAC,CAAC;IAEzD,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,oBAAS,EAAC,EAAE,EAAE,KAAK,EAAE,OAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE5E,MAAM,EAAE,GAAG,8CAAyB,EAAC,OAAO,CAAC,CAAC;IAC9C,gFAAgF;IAChF,0BAA0B;IAC1B,MAAM,EAAE,GAAG,4CAAuB,EAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,GAAG,GAAG,iDAA4B,EAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAEhD,eAAe;IAEf,MAAM,IAAI,GAAG,4BAAiB,EAAC,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,qCAA0B,EAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,wCAA6B,EAAC,EAAE,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;IACjE,MAAM,GAAG,GAAG,gCAAqB,EAAC,EAAE,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;IAEpD,MAAM,gBAAgB,GAAW;QAC/B,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,KAAK;QACZ,SAAS,EAAE,SAAS;QAEpB,GAAG,EAAE,GAAG;QACR,KAAK,EAAE,KAAK;QAEZ,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,IAAI;QACV,QAAQ,EAAE,QAAQ;QAClB,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,KAAK;QAEZ,EAAE,EAAE,EAAE;QACN,GAAG,EAAE,IAAI;QACT,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,EAAE,EAAE,EAAE;KACP,CAAC;IAEF,MAAM,kBAAkB,GAAa;QACnC,SAAS,EAAE,SAAS;KACrB,CAAC;IAEF,MAAM,0BAA0B,GAAqB;QACnD,OAAO,EAAE,EAAE;QACX,EAAE,EAAE,EAAE;QACN,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,OAAO;QAChB,GAAG,EAAE,GAAG;QACR,EAAE,EAAE,EAAE;QACN,GAAG,EAAE,GAAG;KACT;IAED,MAAM,KAAK,GAAc,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IACtD,MAAM,KAAK,GAAc,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAE,uBAAuB;IAChF,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACtE,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEtE,MAAM,mBAAmB,GAAmB;QAC1C,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,QAAQ;QAClB,GAAG,EAAE,GAAG;KACT,CAAC;IAEF,MAAM,CAAC,GAAwB;QAC7B,IAAI,EAAE,gBAAgB;QACtB,MAAM,EAAE,kBAAkB;QAC1B,cAAc,EAAE,0BAA0B;QAC1C,SAAS,EAAE,SAAS;QACpB,SAAS,EAAE,SAAS;QACpB,UAAU,EAAE,UAAU;QACtB,UAAU,EAAE,UAAU;QACtB,YAAY,EAAE,mBAAmB;QACjC,OAAO,EAAE,EAAE;KACZ,CAAC;IAEF,OAAO,CAAC,CAAC;AACX,CAAC;AAhID,sDAgIC;AAED,SAAgB,mBAAmB,CAAC,EAAU,EAAE,OAAkB;IAEhE,MAAM,CAAC,GAAwB,qBAAqB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAElE,IAAI,GAAG,GAAQ,WAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEjC,OAAO,GAAG,CAAC,MAAM,CAAC;IAClB,OAAO,GAAG,CAAC,OAAO,CAAC;IAEnB,OAAO,GAA0B,CAAC;AACpC,CAAC;AAVD,kDAUC;;;;;;;;;;;;AC9LD,EAAE;AACF,eAAe;AACf,EAAE;;;;;;;;;;;;;;;;;;;;;;AAGF,sFAAkC;AAClC,kGAAwC;AAExC,iFAOkB;AAIlB;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2BE;AAGF,mEAAmE;AAEnE,yEAAyE;AACzE,4DAA4D;AAC5D,SAAgB,SAAS,CAAC,CAAS,EAAE,EAAU;IAE7C,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;AAC1C,CAAC;AAHD,8BAGC;AAED,iDAAiD;AACjD,SAAgB,aAAa,CAAC,KAAa,EAAE,CAAS;IAEpD,OAAO,KAAK,GAAG,CAAC,CAAC;AACnB,CAAC;AAHD,sCAGC;AAED,oDAAoD;AACpD,SAAgB,YAAY,CAAC,IAAY,EAAE,CAAS;IAElD,OAAO,IAAI,GAAG,CAAC,CAAC;AAClB,CAAC;AAHD,oCAGC;AAED,iEAAiE;AACjE,SAAgB,8BAA8B,CAAC,KAAa,EAAE,MAAc;IAE1E,OAAO,MAAM,GAAG,KAAK,CAAC;AACxB,CAAC;AAHD,wEAGC;AAED,mBAAmB;AACnB,0CAA0C;AAC1C,kCAAkC;AAClC,SAAgB,gBAAgB,CAAC,YAAoB,EAAE,QAAgB;IAErE,OAAO,YAAY,GAAG,QAAQ,CAAC;AACjC,CAAC;AAHD,4CAGC;AAGD,2CAA2C;AAE3C,SAAgB,eAAe,CAAC,SAAiB,EAAE,OAAkB;IAEnE,MAAM,WAAW,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,WAAW,GAAG,SAAS,GAAG,WAAW,CAAC;IAE5C,OAAO,WAAW,CAAC;AACrB,CAAC;AAND,0CAMC;AAED,+EAA+E;AAC/E,yBAAyB;AACzB,EAAE;AACF,8EAA8E;AAC9E,8EAA8E;AAC9E,+EAA+E;AAC/E,+EAA+E;AAC/E,+EAA+E;AAC/E,8EAA8E;AAC9E,4EAA4E;AAC5E,iEAAiE;AACjE,GAAG;AACH,2EAA2E;AAC3E,oBAAoB;AACpB,SAAgB,eAAe,CAAC,gBAA6B,EAAE,UAAkB;IAE/E,OAAO,WAAW,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;AACnD,CAAC;AAHD,0CAGC;AAED,sFAAsF;AACtF,SAAgB,WAAW,CAAC,gBAA6B,EAAE,UAAkB;IAE3E,MAAM,IAAI,GAAW,GAAG,CAAC;IACzB,MAAM,SAAS,GAAW,KAAK,CAAC;IAEhC,IAAI,MAAM,GAAW,CAAC,CAAC;IAEvB,KAAK,IAAI,EAAE,IAAI,gBAAgB,EAC/B;QACE,IAAI,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,EAC5C;YACE,MAAM,GAAG,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC;YAE3B,MAAM;SACP;KACF;IAED,MAAM,MAAM,GAAW,UAAU,GAAG,MAAM,CAAC;IAE3C,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC;IAEnC,6CAA6C;IAC7C,6CAA6C;IAE7C,OAAO,EAAE,CAAC;AACZ,CAAC;AAzBD,kCAyBC;AAED,4EAA4E;AAC5E,SAAgB,YAAY,CAAC,gBAA6B,EAAE,UAAkB;IAE5E,IAAI,OAAO,GAAuB,SAAS,CAAC;IAE5C,+CAA+C;IAC/C,MAAM,OAAO,GAAG,kCAAqB,EAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,kCAAqB,EAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IAE7D,IAAI,OAAO,IAAI,OAAO,EACtB;QACE,OAAO,GAAG,GAAG,CAAC;QAEd,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAChC;YACE,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAChE,MAAM,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;YAE/B,OAAO,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC;SAC9C;KACF;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAtBD,oCAsBC;AAED,oDAAoD;AACpD,SAAgB,qBAAqB,CAAC,EAAU,EAAE,SAAsB,EAAE,SAAsB;IAE9F,IAAI,IAAI,GAAuB,SAAS,CAAC;IAEzC,MAAM,WAAW,GAAgB,6BAA6B,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAErF,qCAAqC;IACrC,MAAM,OAAO,GAAG,kCAAqB,EAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,kCAAqB,EAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IAEvD,IAAI,OAAO,IAAI,OAAO,EACtB;QACE,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;QAC9B,MAAM,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;QAE9B,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC;KAC3B;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AApBD,sDAoBC;AAED,qBAAqB;AACrB,SAAS,sBAAsB,CAAC,EAAU,EAAE,EAAU;IAEpD,MAAM,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IAE7B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,6BAA6B,CAAC,SAAsB,EAAE,SAAsB;IAE1F,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC;IAEjC,IAAI,WAAW,GAAgB,EAAE,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAChC;QACE,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,IAAI,GAAG,sBAAsB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpE,WAAW,CAAC,IAAI,CAAC,EAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAC,CAAC,CAAC;KACpC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAfD,sEAeC;AAED,SAAgB,cAAc,CAAC,gBAA6B;IAE1D,IAAI,gBAAgB,GAAgB,EAAE,CAAC;IAEvC,KAAK,IAAI,EAAE,IAAI,gBAAgB,EAC/B;QACE,MAAM,EAAE,GAAW,EAAE,CAAC,CAAC,CAAC;QACxB,MAAM,EAAE,GAAW,EAAE,CAAC,CAAC,CAAC;QACxB,MAAM,EAAE,GAAW,GAAG,GAAG,EAAE,CAAC;QAC5B,MAAM,EAAE,GAAW,GAAG,GAAG,EAAE,CAAC;QAE5B,gBAAgB,CAAC,IAAI,CAAC,EAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAC,CAAC,CAAC;KACvC;IAED,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAElC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AApBD,wCAoBC;AAED,kFAAkF;AAClF,wDAAwD;AACxD,SAAgB,iBAAiB,CAAC,EAAU,EAAE,EAAU,EAAE,SAAS,qBAAqB;IAEtF,IAAI,aAAqB,CAAC;IAE1B,IAAI,SAAS,sBAAsB,EACnC;QACE,0CAA0C;QAC1C,EAAE;QACF,wCAAwC;QACxC,EAAE;QACF,4DAA4D;QAE5D,aAAa,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;KACjD;SAED;QACE,gFAAgF;QAChF,oDAAoD;QAEpD,aAAa,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;KACjD;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;AAvBD,8CAuBC;AAED,iCAAiC;AACjC,iCAAiC;AACjC,sEAAsE;AACtE,8CAA8C;AAC9C,2DAA2D;AAC3D,SAAgB,sBAAsB,CAAC,EAAU,EAAE,EAAU,EAAE,CAAqB;IAElF,IAAI,EAAE,GAAG,SAAS,CAAC;IAEnB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3B,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;IAEvC,OAAO,EAAE,CAAC;AACZ,CAAC;AARD,wDAQC;AAED,yBAAyB;AACzB,GAAG;AACH,iFAAiF;AACjF,iFAAiF;AACjF,gFAAgF;AAChF,gFAAgF;AAChF,mFAAmF;AACnF,kFAAkF;AAClF,wEAAwE;AACxE,EAAE;AACF,mFAAmF;AACnF,oFAAoF;AACpF,qFAAqF;AACrF,qFAAqF;AACrF,oEAAoE;AACpE,EAAE;AACF,MAAM;AACN,4EAA4E;AAC5E,4CAA4C;AAC5C,SAAgB,wBAAwB,CAAC,OAAkB,EAAE,EAAW;IAEtE,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAW,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAEhD,iDAAiD;IACjD,MAAM,UAAU,GAAW,MAAM,GAAG,QAAQ,CAAC;IAC7C,gDAAgD;IAEhD,OAAO,UAAU,CAAC;AACpB,CAAC;AAVD,4DAUC;AAED,8CAA8C;AAE9C,uCAAuC;AACvC,wDAAwD;AACxD,4DAA4D;AAC5D,oDAAoD;AACpD,yCAAyC;AACzC,SAAgB,WAAW,CAAC,OAAkB;IAE5C,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAClC,MAAM,IAAI,GAAG,qBAAQ,EAAC,OAAO,CAAC,CAAC;IAE/B,MAAM,EAAE,GAAG,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAE1C,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAClB,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IAExB,IAAI,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,+BAAkB,EAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAChF,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,+BAAkB,EAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAEnG,2EAA2E;IAC3E,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACxB,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAExB,MAAM,SAAS,GAAe;QAC5B,EAAE,EAAE,EAAE;QACN,EAAE,EAAE,EAAE;QACN,EAAE,EAAE,EAAE;QACN,EAAE,EAAE,EAAE;QACN,EAAE,EAAE,EAAE;KACP,CAAC;IAEF,OAAO,SAAS,CAAC;AACnB,CAAC;AA1BD,kCA0BC;AAED,SAAgB,QAAQ,CAAC,EAAU,EAAE,UAAkB;IAErD,MAAM,WAAW,GAAW,CAAC,GAAG,UAAU,CAAC;IAC3C,MAAM,MAAM,GAAY,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IAExF,OAAO,MAAM,CAAC;AAChB,CAAC;AAND,4BAMC;AAED,SAAgB,gBAAgB,CAAC,OAAe;IAE9C,MAAM,OAAO,GAAW,OAAO,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IAElD,OAAO,OAAO,CAAC;AACjB,CAAC;AALD,4CAKC;AAED,cAAc;AACd,GAAG;AACH,2EAA2E;AAC3E,2EAA2E;AAC3E,SAAgB,eAAe,CAAC,OAAkB;IAEhD,MAAM,EAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAC,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,MAAM,GAAY,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,MAAM,gBAAgB,GAAY,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IACtE,MAAM,OAAO,GAAY,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IACxF,MAAM,OAAO,GAAY,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IAExF,IAAI,IAAwB,CAAC;IAE7B,IAAI,MAAM,IAAI,gBAAgB,IAAI,OAAO,IAAI,OAAO,EACpD;QACE,IAAI,GAAG,SAAS,CAAC;KAClB;SAED;QACE,MAAM,IAAI,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;QAEpC,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACjD,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;QACvB,IAAI,GAAG,IAAI,CAAC;KACb;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AA1BD,0CA0BC;AAED,oBAAoB;AACpB,EAAE;AACF,wCAAwC;AACxC,EAAE;AACF,wDAAwD;AACxD,EAAE;AACF,0EAA0E;AAC1E,6EAA6E;AAC7E,+DAA+D;AAC/D,2EAA2E;AAC3E,qDAAqD;AACrD,SAAgB,oBAAoB,CAAC,OAAkB;IAErD,MAAM,EAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAC,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,MAAM,GAAY,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAErD,IAAI,EAAsB,CAAC;IAC3B,IAAI,MAAM,EACV;QACE,EAAE,GAAG,SAAS,CAAC;KAChB;SAED;QACE,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;KAC9B;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAhBD,oDAgBC;AAGD,2CAA2C;AAC3C,EAAE;AACF,0DAA0D;AAC1D,sEAAsE;AACtE,8FAA8F;AAC9F,6FAA6F;AAC7F,SAAgB,kBAAkB,CAAC,SAAsB,EAAE,SAAsB,EAAE,IAAY;IAE7F,IAAI,IAAI,GAAW,GAAG,CAAC;IAEvB,KAAK,IAAI,CAAC,IAAI,SAAS,EACvB;QACE,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;KACvD;IAED,MAAM,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,IAAI,IAAI,CAAC;IAEb,OAAO,IAAI,GAAG,GAAG,CAAC;AACpB,CAAC;AAbD,gDAaC;AAGD,yBAAyB;AACzB,EAAE;AACF,uCAAuC;AACvC,SAAgB,sBAAsB,CAAC,EAAU,EAAE,EAAU;IAE3D,MAAM,OAAO,GAAG,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAEjC,OAAO,OAAO,CAAC;AACjB,CAAC;AALD,wDAKC;AAED,qBAAqB;AACrB,SAAS,QAAQ,CAAC,EAAU,EAAE,EAAU;IAEtC,MAAM,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC;IAErB,OAAO,IAAI,CAAC;AACd,CAAC;AAGD,2CAA2C;AAC3C,SAAgB,QAAQ,CAAC,EAAU,EAAE,EAAU;IAE7C,IAAI,IAAI,GAAuB,SAAS,CAAC;IAEzC,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,EAC5C;QACE,IAAI,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;KAChC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAVD,4BAUC;AAED,iCAAiC;AACjC,EAAE;AACF,mDAAmD;AACnD,EAAE;AACF,+EAA+E;AAC/E,SAAgB,gCAAgC,CAAC,EAAU,EAAE,CAAS;IAEpE,IAAI,GAAG,GAAuB,SAAS,CAAC;IAExC,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,EACzC;QACE,MAAM,SAAS,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAEpC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;QAEtB,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;KAC1B;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAfD,4EAeC;AAED,SAAS,UAAU,CAAC,EAAU;IAE5B,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC5C,MAAM,SAAS,GAAG,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAEhE,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,cAAc;AACd,iCAAiC;AACjC,wBAAwB;AACxB,8EAA8E;AAC9E,uDAAuD;AACvD,gBAAgB;AAChB,SAAgB,SAAS,CAAC,EAAU,EAAE,EAAU,EAAE,CAAS;IAEzD,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IAEtC,OAAO,CAAC,CAAC;AACX,CAAC;AALD,8BAKC;AAGD,eAAe;AAEf,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAE,4DAA4D;AAEjF,0BAA0B;AAC1B,SAAgB,iBAAiB,CAAC,EAAU,EAAE,SAAsB,EAAE,SAAsB;IAE1F,IACA;QACE,MAAM,IAAI,GAAG,YAAY,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,YAAY,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QAEzC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAErC,MAAM,IAAI,GAAW,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAEhD,OAAO,IAAI,CAAC;KACb;IACD,OAAO,GAAG,EACV;QACE,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAClD,OAAO,SAAS,CAAC;KAClB;AACH,CAAC;AAlBD,8CAkBC;AAED,SAAgB,cAAc,CAAC,SAAsB,EAAE,SAAsB;IAE3E,MAAM,KAAK,GAAW,SAAS,CAAC,MAAM,CAAC;IACvC,MAAM,KAAK,GAAW,SAAS,CAAC,MAAM,CAAC;IAEvC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,EAAE,iCAAiC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAEhF,IAAI,GAAG,GAAW,GAAG,CAAC;IAEtB,KAAK,IAAI,CAAC,IAAI,SAAS,EACvB;QACE,GAAG,IAAI,sBAAsB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAC/D;IAED,OAAO,GAAG,GAAG,KAAK,CAAC;AACrB,CAAC;AAfD,wCAeC;AAED,mCAAmC;AACnC,SAAgB,0BAA0B,CAAC,EAAU,EAAE,SAAsB;IAE3E,IACA;QACE,MAAM,IAAI,GAAG,YAAY,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QAEzC,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAE5B,MAAM,KAAK,GAAW,uBAAuB,CAAC,IAAI,CAAC,CAAC;QAEpD,OAAO,KAAK,CAAC;KACd;IACD,OAAO,GAAG,EACV;QACE,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;QAC3D,OAAO,SAAS,CAAC;KAClB;AACH,CAAC;AAjBD,gEAiBC;AAED,SAAgB,uBAAuB,CAAC,SAAsB;IAE5D,MAAM,KAAK,GAAW,SAAS,CAAC,MAAM,CAAC;IAEvC,IAAI,GAAG,GAAW,GAAG,CAAC;IAEtB,KAAK,IAAI,CAAC,IAAI,SAAS,EACvB;QACE,GAAG,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACjD;IAED,OAAO,GAAG,GAAG,KAAK,CAAC;AACrB,CAAC;AAZD,0DAYC;AAED,sFAAsF;AACtF,SAAgB,6BAA6B,CAAC,EAAU,EAAE,CAAS,EAAE,SAAsB;IAEzF,MAAM,IAAI,GAAG,YAAY,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IAEzC,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAE5B,MAAM,QAAQ,GAAW,0BAA0B,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAE7D,OAAO,QAAQ,CAAC;AAClB,CAAC;AATD,sEASC;AAED,qEAAqE;AACrE,SAAgB,0BAA0B,CAAC,CAAS,EAAE,SAAsB;IAE1E,MAAM,KAAK,GAAW,SAAS,CAAC,MAAM,CAAC;IAEvC,IAAI,GAAG,GAAW,GAAG,CAAC;IAEtB,KAAK,IAAI,CAAC,IAAI,SAAS,EACvB;QACE,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAEvC,GAAG,IAAI,8BAA8B,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;KAC/D;IAED,OAAO,GAAG,GAAG,KAAK,CAAC;AACrB,CAAC;AAfD,gEAeC;AAED,kFAAkF;AAClF,SAAgB,qBAAqB,CAAC,EAAU,EAAE,CAAS,EAAE,SAAsB;IAEjF,MAAM,IAAI,GAAG,YAAY,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IAEzC,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAE5B,MAAM,GAAG,GAAW,kBAAkB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAEhD,OAAO,GAAG,CAAC;AACb,CAAC;AATD,sDASC;AAED,SAAgB,kBAAkB,CAAC,CAAS,EAAE,SAAsB;IAElE,MAAM,KAAK,GAAW,SAAS,CAAC,MAAM,CAAC;IAEvC,IAAI,GAAG,GAAW,GAAG,CAAC;IAEtB,KAAK,IAAI,CAAC,IAAI,SAAS,EACvB;QACE,MAAM,IAAI,GAAW,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE3C,GAAG,IAAI,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;KACtC;IAED,OAAO,GAAG,GAAG,KAAK,CAAC;AACrB,CAAC;AAfD,gDAeC;AAED,6EAA6E;AAC7E,+CAA+C;AAC/C,SAAS,YAAY,CAAC,EAAU,EAAE,QAAqB;IAErD,MAAM,OAAO,GAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAY,qDAAqD;IACxG,MAAM,QAAQ,GAAW,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAY,qDAAqD;IACxG,MAAM,WAAW,GAAW,QAAQ,GAAG,GAAG,CAAC,CAAQ,mCAAmC;IACtF,MAAM,SAAS,GAAW,WAAW,GAAG,CAAC,CAAC,CAAS,sBAAsB;IACzE,MAAM,KAAK,GAAW,SAAS,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAE,kEAAkE;IAErH,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IAE7D,MAAM,YAAY,GAAa;QAC7B,kCAAqB,EAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;QACrC,kCAAqB,EAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;KACtC,CAAC;IAEF,MAAM,UAAU,GAAa,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IAEhF,MAAM,SAAS,GAAgB,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IAE5E,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,OAAO,GAAG,CAAC,EAAa,EAAE,KAAe,EAAW,EAAE,GAAE,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC;;;;;;;;;;;;ACvqB/G,EAAE;AACF,0FAA0F;AAC1F,EAAE;;;AAEF,SAAgB,cAAc,CAAC,CAAS;IAEtC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAEtB,MAAM,CAAC,GAAG,SAAS,CAAC;IACpB,MAAM,EAAE,GAAG,WAAW,CAAC;IACvB,MAAM,EAAE,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC;IAC5B,MAAM,EAAE,GAAG,WAAW,CAAC;IACvB,MAAM,EAAE,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC;IAC5B,MAAM,EAAE,GAAG,WAAW,CAAC;IACvB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAE5B,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,UAAC,EAAI,CAAC,EAAC,GAAG,CAAC,EAAE,GAAG,UAAC,EAAI,CAAC,EAAC,GAAG,CAAC,EAAE,GAAG,UAAC,EAAI,CAAC,EAAC,GAAG,CAAC,EAAE,GAAG,UAAC,EAAI,CAAC,EAAC,CAAC,GAAG,aAAI,CAAC,CAAC,EAAI,CAAC,CAAC,CAAC,GAAG,UAAC,EAAI,CAAC,EAAC,EAAC;IAErH,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AAC9B,CAAC;AAfD,wCAeC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4BE;;;;;;;;;;;;ACjDF,EAAE;AACF,sBAAsB;AACtB,EAAE;;;;;;;;;;;;;;;;;;;;;;AAEF,wEAAqC;AACrC,4FAA6C;AAE7C,sFAAkC;AAGlC,6CAA6C;AAE7C,kEAAkE;AAClE,SAAgB,kBAAkB,CAAC,EAAU,EAAE,KAAgB;IAE7D,IAAI,KAAK,EACT;QACE,4EAA4E;QAC5E,0EAA0E;QAC1E,2EAA2E;QAC3E,2DAA2D;QAE3D,MAAM,WAAW,GAAG,IAAI,sBAAU,CAAC,EAAE,CAAC,CAAC;QAEvC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAEzB,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACnC,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAEtC,OAAO,iBAAiB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;KAC9C;SAED;QACE,oDAAoD;QAEpD,OAAO,iBAAiB,CAAC,EAAE,CAAC,CAAC;KAC9B;AACH,CAAC;AAzBD,gDAyBC;AAED,mCAAmC;AACnC,yEAAyE;AACzE,yEAAyE;AACzE,wEAAwE;AAExE,SAAS,iBAAiB,CAAC,EAAU;IAEnC,2DAA2D;IAC3D,OAAO,GAAG,GAAG,CAAC,GAAG,GAAG,wBAAc,EAAC,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,gEAAgE;AAChE,SAAgB,QAAQ,CAAC,OAAkB,EAAE,KAAgB;IAE3D,sEAAsE;IACtE,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACpE,CAAC;AAJD,4BAIC;AAED,0EAA0E;AAC1E,SAAgB,yBAAyB,CAAC,EAAU;IAElD,uDAAuD;IACvD,OAAO,GAAG,GAAG,GAAG,GAAG,UAAC,kBAAkB,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,EAAI,CAAC,EAAC;AACzD,CAAC;AAJD,8DAIC;AAEY,kBAAU,GAAG,IAAI,CAAC;AAC/B,SAAgB,aAAa,CAAC,EAAU,EAAE,OAAkB,EAAE,KAAc,EAAE,KAAgB;IAE5F,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAClC,IAAI,QAAQ,GAAgB,EAAE,CAAC;IAE/B,KAAK,IAAI,SAAS,IAAI,UAAU,EAAE,EAClC;QACE,MAAM,UAAU,GAAc,cAAc,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAC5E,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,UAAU,CAAC;QAC3D,QAAQ,CAAC,IAAI,CAAC,EAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAC,CAAC,CAAC;KAC7C;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAbD,sCAaC;AAED,SAAS,cAAc,CAAC,EAAU,EAAE,OAAkB,EAAE,SAAiB,EAAE,KAAc;IAEvF,IAAI,KAAK,wBAAwB;QAC/B,OAAO,mBAAmB,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;;QAEnD,OAAO,cAAc,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AAClD,CAAC;AAED,iCAAiC;AACjC,SAAS,mBAAmB,CAAC,EAAU,EAAE,OAAkB,EAAE,SAAiB;IAE5E,IAAI,cAAyB,CAAC;IAE9B,IAAI,SAAS,GAAG,EAAE,EAClB;QACE,yBAAyB;QACzB,MAAM,UAAU,GAAG,SAAS,GAAG,EAAE,CAAC;QAClC,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;KACrD;SACI,IAAI,SAAS,GAAG,EAAE,EACvB;QACE,uBAAuB;QACvB,MAAM,UAAU,GAAG,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;QAClD,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;KACrE;SAED;QACE,2BAA2B;QAC3B,cAAc,GAAG,OAAO,CAAC;KAC1B;IAED,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,4BAA4B;AAC5B,SAAS,cAAc,CAAC,EAAU,EAAE,OAAkB,EAAE,SAAiB;IAEvE,MAAM,KAAK,GAAG,SAAS,GAAG,EAAE,CAAC;IAE7B,MAAM,cAAc,GAAc,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAEhE,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,6CAA6C;AAC7C,SAAS,UAAU;IAEjB,MAAM,KAAK,GAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACrC,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAE3B,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,IAAI,EAC3D;QACE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACnB;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,gEAAgE;AAChE,SAAgB,qBAAqB,CAAC,EAAU,EAAE,gBAA6B;IAE7E,IAAI,OAAO,GAAc,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC7C,IAAI,aAAa,GAAgB,EAAE,CAAC;IAEpC,KAAK,IAAI,EAAE,IAAI,gBAAgB,EAC/B;QACE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EACd;YACE,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SACxB;aAED;YACE,MAAM;SACP;KACF;IACD,yBAAyB;IACzB,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAErC,OAAO,OAAO,CAAC;AACjB,CAAC;AApBD,sDAoBC;AAED,gEAAgE;AAChE,SAAgB,qBAAqB,CAAC,EAAU,EAAE,gBAA6B;IAE7E,IAAI,OAAO,GAAc,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9C,KAAK,IAAI,EAAE,IAAI,gBAAgB,EAC/B;QACE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EACd;YACE,yBAAyB;YACzB,OAAO,GAAG,EAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAC,CAAC;YAC7B,MAAM;SACP;KACF;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAfD,sDAeC;AAED,gEAAgE;AAChE,gEAAgE;AAChE,SAAgB,qBAAqB,CAAC,EAAU,EAAE,gBAA6B;IAE7E,IAAI,OAAO,GAAc,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC7C,IAAI,aAAa,GAAgB,EAAE,CAAC;IAEpC,KAAK,IAAI,EAAE,IAAI,gBAAgB,EAC/B;QACE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EACd;YACE,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SACxB;aAED;YACE,MAAM;SACP;KACF;IACD,yBAAyB;IACzB,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAErC,OAAO,OAAO,CAAC;AACjB,CAAC;AApBD,sDAoBC;AAED,gEAAgE;AAChE,SAAgB,qBAAqB,CAAC,EAAU,EAAE,gBAA6B;IAE7E,IAAI,OAAO,GAAc,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9C,KAAK,IAAI,EAAE,IAAI,gBAAgB,EAC/B;QACE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EACd;YACE,yBAAyB;YACzB,OAAO,GAAG,EAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAC,CAAC;YAC7B,MAAM;SACP;KACF;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAfD,sDAeC;AAGD,UAAU;AAEV,qEAAqE;AACrE,SAAgB,YAAY,CAAC,OAAkB;IAG7C,+DAA+D;IAC/D,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC;AALD,oCAKC;AAED,SAAgB,OAAO,CAAC,MAAc;IAEpC,2DAA2D;IAC3D,6CAA6C;IAE7C,OAAO,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC;AAND,0BAMC;;;;;;;;;;;;AChPD,EAAE;AACF,+DAA+D;AAC/D,EAAE;;;;;;;;;;;;;;;;;;;;;;AAEF,4FAA6C;AAE7C,sFAAkC;AAClC,kGAAwC;AAExC,iFAA+G;AAC/G,2EAAiC;AAGjC;;;;;;;;;;;;;;;EAeE;AAEF,iBAAiB;AAEjB,2DAA2D;AAC3D,SAAgB,iBAAiB,CAAC,EAAU,EAAE,gBAA6B;IAEzE,IAAI,CAAC,GAAuB,SAAS,CAAC;IAEtC,2DAA2D;IAC3D,MAAM,OAAO,GAAG,kCAAqB,EAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,kCAAqB,EAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAE5D,IAAI,OAAO,IAAI,OAAO,EACtB;QACE,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,EAC/D;YACE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;SACzD;KACF;IAED,OAAO,CAAC,CAAC;AACX,CAAC;AAjBD,8CAiBC;AAED,yEAAyE;AACzE,SAAgB,sBAAsB,CAAC,OAAkB;IAEvD,6EAA6E;IAC7E,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,sCAAyB,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpE,CAAC;AAJD,wDAIC;AAED,oEAAoE;AACpE,SAAgB,2BAA2B,CAAC,EAAU,EAAE,CAAS;IAE/D,OAAO,EAAE,GAAG,CAAC,CAAC;AAChB,CAAC;AAHD,kEAGC;AAGD,sCAAsC;AAEtC,qEAAqE;AACrE,SAAgB,yBAAyB,CAAC,OAAkB;IAE1D,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC;AAHD,8DAGC;AACD,SAAS,aAAa,CAAC,CAAS;IAE9B,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5F,CAAC;AAED,gDAAgD;AAChD,SAAgB,uBAAuB,CAAC,OAAkB,EAAE,YAAqB,KAAK;IAEpF,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,0BAA0B,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AAChF,CAAC;AAHD,0DAGC;AAED,SAAgB,0BAA0B,CAAC,EAAU,EAAE,YAAqB,KAAK;IAE/E,MAAM,WAAW,GAAG,IAAI,sBAAU,CAAC,EAAE,CAAC,CAAC;IAEvC,iDAAiD;IACjD,4EAA4E;IAC5E,2EAA2E;IAC3E,+CAA+C;IAC/C,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACrE,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAErE,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACnC,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAEtC,MAAM,EAAE,GAAG,sCAAyB,EAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAEzD,OAAO,EAAE,CAAC;AACZ,CAAC;AAjBD,gEAiBC;AAED,qEAAqE;AACrE,SAAgB,4BAA4B,CAAC,EAAU,EAAE,CAAS;IAEhE,OAAO,EAAE,GAAG,CAAC,CAAC;AAChB,CAAC;AAHD,oEAGC;AAED,6EAA6E;AAC7E,sDAAsD;AACtD,SAAgB,+BAA+B,CAAC,MAAgB,EAAE,OAAkB,EAAE,YAAqB,KAAK;IAE9G,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAE5B,0DAA0D;IAC1D,mEAAmE;IACnE,IAAI,aAAa,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;IAEvE,2CAA2C;IAC3C,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,0BAA0B,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IAElG,OAAO,EAAE,CAAC;AACZ,CAAC;AAbD,0EAaC;AAED,gFAAgF;AAChF,8DAA8D;AAC9D,SAAgB,2BAA2B,CAAC,EAAU,EAAE,MAAgB;IAEtE,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAE5B,iDAAiD;IACjD,MAAM,OAAO,GAAG,4BAA4B,CAAC,EAAE,EAAE,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;IAEpE,OAAO,OAAO,CAAC;AACjB,CAAC;AATD,kEASC;AAED,SAAgB,qBAAqB,CAAC,EAAU,EAAE,OAAkB,EAAE,CAAS;IAE7E,MAAM,KAAK,GAAG,oBAAS,EAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,yBAAY,EAAC,OAAO,CAAC,CAAC;IAEpC,gDAAgD;IAChD,IAAI,KAAa,CAAC;IAClB,IAAI,KAAa,CAAC;IAElB,iCAAiC;IACjC,IAAI,KAAK,GAAG,KAAK,EACjB;QACE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;KACtC;SACI,IAAI,KAAK,GAAG,KAAK,EACtB;QACE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;KACtC;SAED;QACE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;KACtC;IAED,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACxB,CAAC;AA3BD,sDA2BC;;;;;;;;;;;;;;;;;;;;;;;ACtKD,6FAA8B;AAC9B,2FAA6B;AAC7B,yFAA4B;AAC5B,uFAA2B;;;;;;;;;;;;ACH3B,EAAE;AACF,+CAA+C;AAC/C,EAAE;AACF,yFAAyF;AACzF,iCAAiC;AACjC,EAAE;;;AAGF,MAAM,MAAM,GAAG,mBAAO,CAAC,qDAAmB,CAAC,CAAC;AAE/B,WAAG,GAAG,CAAC,CAAC;AACR,WAAG,GAAG,CAAC,CAAC;AAGrB,WAAW;AAEX,SAAgB,SAAS,CAAC,aAAmB;IAE3C,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;IAEzC,OAAO,KAAK,CAAC;AACf,CAAC;AALD,8BAKC;AAED,SAAgB,WAAW,CAAC,aAAmB;IAE7C,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;IAEpC,OAAO,KAAK,CAAC;AACf,CAAC;AALD,kCAKC;AAED,8CAA8C;AAE9C,SAAgB,gBAAgB,CAAC,aAAmB;IAElD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,WAAW,CAAC;IAE1D,OAAO,KAAK,CAAC;AACf,CAAC;AALD,4CAKC;AAED,SAAgB,uBAAuB,CAAC,aAAmB;IAEzD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC;IAE1D,OAAO,IAAI,CAAC;AACd,CAAC;AALD,0DAKC;AAED,uDAAuD;AACvD,+EAA+E;AAC/E,uBAAuB;AACvB,SAAgB,2BAA2B,CAAC,aAAmB;IAE7D,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC;IAEpD,OAAO,KAAK,CAAC;AACf,CAAC;AALD,kEAKC;AAED,8EAA8E;AAC9E,IAAI;AACJ,iEAAiE;AAEjE,kBAAkB;AAClB,IAAI;AAEJ,6EAA6E;AAC7E,IAAI;AACJ,gEAAgE;AAEhE,gBAAgB;AAChB,IAAI;AAEJ,4EAA4E;AAC5E,IAAI;AACJ,+DAA+D;AAE/D,gBAAgB;AAChB,IAAI;AAGJ,WAAW;AAEX,SAAgB,wBAAwB,CAAC,aAAmB;IAE1D,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;IAEpC,OAAO,KAAK,CAAC;AACf,CAAC;AALD,4DAKC;AAED,SAAgB,+BAA+B,CAAC,aAAmB;IAEjE,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC;IAE1C,OAAO,IAAI,CAAC;AACd,CAAC;AALD,0EAKC;AAED,kBAAkB;AAClB,SAAgB,aAAa,CAAC,aAAmB;IAE/C,MAAM,KAAK,GAAG,CAAC,CAAC;IAChB,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAE3C,OAAO,KAAK,CAAC;AACf,CAAC;AAND,sCAMC;AAED,2BAA2B;AAC3B,SAAgB,qBAAqB,CAAC,aAAmB;IAEvD,MAAM,QAAQ,GAAG,CAAC,CAAC;IACnB,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAE9C,OAAO,KAAK,CAAC;AACf,CAAC;AAND,sDAMC;AAED,SAAgB,uBAAuB,CAAC,aAAmB;IAEzD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC;IAEhD,OAAO,MAAM,CAAC;AAChB,CAAC;AALD,0DAKC;AAGD,cAAc;AAEd,SAAgB,WAAW,CAAC,aAAmB;IAE7C,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC;IAE3C,OAAO,EAAE,CAAC;AACZ,CAAC;AALD,kCAKC;AAED,SAAgB,UAAU,CAAC,aAAmB;IAE5C,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC;IAE7C,OAAO,KAAK,CAAC;AACf,CAAC;AALD,gCAKC;AAED,SAAgB,YAAY,CAAC,aAAmB;IAE9C,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;IAE7C,OAAO,GAAG,CAAC;AACb,CAAC;AALD,oCAKC;AAED,SAAgB,WAAW,CAAC,aAAmB;IAE7C,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;IAE9C,OAAO,KAAK,CAAC;AACf,CAAC;AALD,kCAKC;AAGD,YAAY;AAEZ,SAAgB,qBAAqB,CAAC,aAAmB;IAEvD,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;IAE3C,OAAO,GAAG,CAAC;AACb,CAAC;AALD,sDAKC;AAED,SAAgB,oBAAoB,CAAC,CAAiB,EAAE,aAAmB;IAEzE,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE/C,OAAO,KAAK,CAAC;AACf,CAAC;AALD,oDAKC;AAED,SAAgB,uBAAuB,CAAC,aAAmB;IAEzD,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;IAE7C,OAAO,GAAG,CAAC;AACb,CAAC;AALD,0DAKC;AAED,SAAgB,sBAAsB,CAAC,CAAiB,EAAE,aAAmB;IAE3E,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEjD,OAAO,KAAK,CAAC;AACf,CAAC;AALD,wDAKC;AAGD,4DAA4D;AAC5D,gFAAgF;AAChF,SAAgB,WAAW,CAAC,YAAqB,EAAE,aAAmB;IAEpE,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,uBAA8B,CAAC;IAClE,MAAM,OAAO,GAAG,OAAO,CAAC,WAAG,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,WAAG,CAAC,CAAC;IAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,0BAAiC,CAAC;IACrE,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IAEhD,MAAM,KAAK,GAAG,MAAM,CAAC,WAAG,CAAC,CAAC;IAC1B,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,MAAM,CAAC,WAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAG,CAAC,CAAC;IAE3E,yCAAyC;IACzC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACvB,CAAC;AAbD,kCAaC;AAED,+DAA+D;AAC/D,SAAgB,eAAe,CAAC,YAAqB,EAAE,aAAmB;IAExE,MAAM,SAAS,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC,WAAG,CAAC,CAAC;IAEjD,OAAO,SAAS,CAAC;AACnB,CAAC;AALD,0CAKC;;;;;;;;;;;;AC7MD,EAAE;AACF,kCAAkC;AAClC,EAAE;;;;;;;;;;;;;;;;;;;;;;AAEF,4FAAkC;AAClC,4FAA6C;AAC7C,2FAA8C;AAI9C,4BAA4B;AAE5B,SAAgB,uBAAuB,CAAC,YAAoB,EAAE,YAAqB;IAEjF,MAAM,WAAW,GAAG,IAAI,sBAAU,CAAC,YAAY,CAAC,CAAC;IAEjD,sDAAsD;IACtD,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IAE1C,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAE,iDAAiD;IAC9E,WAAW,CAAC,MAAM,EAAE,CAAC;IACrB,WAAW,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACzD,WAAW,CAAC,OAAO,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5D,WAAW,CAAC,OAAO,EAAE,CAAC;IAEtB,OAAO,WAAW,CAAC,aAAuB,CAAC;AAC7C,CAAC;AAdD,0DAcC;AAGD,uBAAuB;AAEvB,SAAgB,mBAAmB,CAAC,qBAA6B,EAAE,EAAU,EAAE,EAAU;IAEvF,IAAI,kBAAkB,CAAC,EAAE,EAAE,EAAE,CAAC,EAC9B;QACE,OAAO,CAAC,CAAC;KACV;SAED;QACE,sEAAsE;QACtE,MAAM,KAAK,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;QAC7B,MAAM,QAAQ,GAAG,eAAe,CAAC,EAAE,EAAE,qBAAqB,EAAE,KAAK,CAAC,CAAC;QAEnE,iBAAiB;QACjB,MAAM,WAAW,GAAG,IAAI,sBAAU,CAAC,QAAQ,CAAC,CAAC;QAE7C,MAAM,KAAK,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAElC,WAAW,CAAC,QAAQ,EAAE,CAAC;QACvB,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC9B,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACjC,WAAW,CAAC,MAAM,EAAE,CAAC;QACrB,WAAW,CAAC,OAAO,EAAE,CAAC;QAEtB,MAAM,MAAM,GAAG,WAAW,CAAC,aAAuB,CAAC;QAEnD,OAAO,MAAM,CAAC;KACf;AACH,CAAC;AA5BD,kDA4BC;AAED,SAAgB,UAAU,CAAC,EAAU;IAEnC,MAAM,SAAS,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;IACvD,MAAM,OAAO,GAAW,SAAS,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,CAAC;IAE5D,OAAO,OAAO,CAAC,CAAE,qCAAqC;AACxD,CAAC;AAND,gCAMC;AAED,wEAAwE;AACxE,yEAAyE;AACzE,qDAAqD;AACrD,8EAA8E;AAC9E,qBAAqB;AACrB,SAAgB,eAAe,CAAC,EAAU,EAAE,kBAA0B,EAAE,KAAa;IAEnF,IAAI,QAAQ,GAAW,kBAAkB,CAAC;IAE1C,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,EAC1C;QACE,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,kBAAkB,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;KACpD;SACI,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,EAC/C;QACE,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,kBAAkB,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;KACpD;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAdD,0CAcC;AAED,SAAgB,kBAAkB,CAAC,EAAU,EAAE,EAAU;IAEvD,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,mBAAU,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IACtE,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,mBAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IAElF,OAAO,IAAI,IAAI,IAAI,CAAC;AACtB,CAAC;AAND,gDAMC;AAGD,iDAAiD;AACjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+BE;AAGF,4CAA4C;AAE5C,SAAgB,gBAAgB,CAAC,YAAoB,EAAE,YAAoB;IAEzE,+CAA+C;IAC/C,MAAM,eAAe,GAAG,qBAAqB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAClE,MAAM,eAAe,GAAG,qBAAqB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAElE,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,eAAe,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;IAE/E,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AATD,4CASC;AAED,4EAA4E;AAC5E,SAAS,qBAAqB,CAAC,OAAe,EAAE,OAAe;IAE7D,MAAM,CAAC,GAAW,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAW,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;IAE9D,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAGD,uBAAuB;AAEvB,8EAA8E;AAC9E,gFAAgF;AAChF,oCAAoC;AACpC,SAAgB,mBAAmB,CAAC,MAAc;IAEhD,MAAM,WAAW,GAAG,IAAI,sBAAU,CAAC,MAAM,CAAC,CAAC;IAE3C,IAAI,KAAK,GAAG,CAAC,CAAC,2BAA2B,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACnD,IAAI,IAAI,GAAG,CAAC,CAAC,2BAA2B,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAElD,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC9B,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACjC,WAAW,CAAC,OAAO,EAAE,CAAC;IAEtB,MAAM,MAAM,GAAG,WAAW,CAAC,aAAuB,CAAC;IAEnD,OAAO,MAAM,CAAC;AAChB,CAAC;AAdD,kDAcC;AAGD,+BAA+B;AAE/B,kFAAkF;AAClF,iFAAiF;AACjF,gFAAgF;AAChF,qBAAqB;AACrB,SAAgB,0BAA0B,CAAC,KAAa,EAAE,GAAW,EAAE,KAAa,EAAE,GAAW;IAE/F,qCAAqC;IACrC,MAAM,QAAQ,GAAG,CAAC,CAAC,uBAAuB,EAAE,CAAC;IAE7C,wCAAwC;IACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAEtC,MAAM,gBAAgB,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,MAAM,cAAc,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE1E,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,gBAAgB,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAEvH,OAAO,MAAM,CAAC;AAChB,CAAC;AAfD,gEAeC;AAGD,mBAAmB;AAEnB,SAAgB,SAAS,CAAC,QAAgB;IAExC,MAAM,WAAW,GAAG,IAAI,sBAAU,CAAC,QAAQ,CAAC,CAAC;IAE7C,MAAM,KAAK,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAEnC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC9B,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACjC,WAAW,CAAC,OAAO,EAAE,CAAC;IAEtB,OAAO,WAAW,CAAC,aAAuB,CAAC;AAC7C,CAAC;AAZD,8BAYC;AAED,SAAgB,UAAU,CAAC,QAAgB;IAEzC,MAAM,WAAW,GAAG,IAAI,sBAAU,CAAC,QAAQ,CAAC,CAAC;IAE7C,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAEpC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC9B,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACjC,WAAW,CAAC,OAAO,EAAE,CAAC;IAEtB,OAAO,WAAW,CAAC,aAAuB,CAAC;AAC7C,CAAC;AAZD,gCAYC;AAED,SAAgB,eAAe,CAAC,EAAU,EAAE,GAAW;IAErD,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC3B,MAAM,GAAG,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC;IAE7B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;IAElE,OAAO,MAAM,CAAC;AAChB,CAAC;AARD,0CAQC;AAGD,iBAAiB;AAEJ,oBAAY,GAAW,IAAI,CAAC,CAAK,uBAAuB;AACxD,oBAAY,GAAW,IAAI,CAAC,CAAK,mCAAmC;AACpE,uBAAe,GAAW,IAAI,CAAC,CAAE,aAAa;AAE3D,qHAAqH;AACrH,SAAgB,UAAU,CAAC,CAAS,EAAE,CAAS;IAE7C,MAAM,IAAI,GAAW,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpC,MAAM,IAAI,GAAW,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEpC,MAAM,EAAE,GAAW,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACvC,MAAM,EAAE,GAAW,CAAC,GAAG,EAAE,CAAC;IAE1B,MAAM,MAAM,GAAW,CAAC,EAAE,GAAG,oBAAY,CAAC,GAAG,CAAC,EAAE,GAAG,oBAAY,CAAC,CAAC;IAEjE,OAAO,MAAM,CAAC;AAChB,CAAC;AAXD,gCAWC;AAED,kEAAkE;AAClE,oEAAoE;AAEpE,SAAgB,mBAAmB,CAAC,kBAA0B,EAAE,SAAiB,EAAE,UAAkB;IAEnG,MAAM,WAAW,GAAG,IAAI,sBAAU,CAAC,kBAAkB,CAAC,CAAC;IAEvD,+EAA+E;IAC/E,MAAM,IAAI,GAAG,CAAC,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,oBAAY,CAAC;IACzF,MAAM,KAAK,GAAG,IAAI,GAAG,uBAAe,CAAC;IAErC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC9B,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACjC,WAAW,CAAC,MAAM,EAAE,CAAC;IACrB,WAAW,CAAC,OAAO,EAAE,CAAC;IAEtB,0EAA0E;IAC1E,IAAI,MAAM,GAAG,WAAW,CAAC,aAAuB,CAAC;IACjD,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,kBAAkB,GAAG,GAAG,CAAC;QAAE,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC;IAEpE,OAAO,MAAM,CAAC;AAChB,CAAC;AAlBD,kDAkBC;AAED,SAAgB,qBAAqB,CAAC,oBAA4B,EAAE,SAAiB,EAAE,UAAkB;IAEvG,MAAM,WAAW,GAAG,IAAI,sBAAU,CAAC,oBAAoB,CAAC,CAAC;IAEzD,+EAA+E;IAC/E,MAAM,IAAI,GAAG,CAAC,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,oBAAY,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACzF,MAAM,KAAK,GAAG,IAAI,GAAG,uBAAe,CAAC;IAErC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC9B,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACjC,WAAW,CAAC,MAAM,EAAE,CAAC;IACrB,WAAW,CAAC,OAAO,EAAE,CAAC;IAEtB,2EAA2E;IAC3E,IAAI,MAAM,GAAG,WAAW,CAAC,aAAuB,CAAC;IACjD,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,oBAAoB,GAAG,GAAG,CAAC;QAAE,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC;IAEtE,OAAO,MAAM,CAAC;AAChB,CAAC;AAlBD,sDAkBC;AAED,SAAgB,aAAa,CAAC,GAAW,EAAE,GAAW;IAEpD,MAAM,GAAG,GAAG,CAAC,CAAC,qBAAqB,EAAE,CAAC;IACtC,MAAM,GAAG,GAAG,CAAC,CAAC,uBAAuB,EAAE,CAAC;IAExC,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;IAEnE,iEAAiE;IACjE,4EAA4E;IAC5E,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QAAE,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC;IAEtE,OAAO,MAAM,CAAC;AAChB,CAAC;AAZD,sCAYC;AAED,qHAAqH;AAErH,SAAgB,yBAAyB,CAAC,kBAA0B,EAAE,SAAiB,EAAE,UAAkB,EAAE,MAAe,KAAK;IAE/H,MAAM,WAAW,GAAG,IAAI,sBAAU,CAAC,kBAAkB,CAAC,CAAC;IAEvD,sEAAsE;IACtE,MAAM,OAAO,GAAG,eAAe,CAAC,SAAS,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAEhD,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACpC,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACvC,WAAW,CAAC,MAAM,EAAE,CAAC;IACrB,WAAW,CAAC,OAAO,EAAE,CAAC;IAEtB,0EAA0E;IAC1E,IAAI,MAAM,GAAG,WAAW,CAAC,aAAuB,CAAC;IACjD,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,kBAAkB,GAAG,GAAG,CAAC;QAAE,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC;IAEpE,OAAO,MAAM,CAAC;AAChB,CAAC;AAlBD,8DAkBC;AAED,SAAgB,eAAe,CAAC,SAAiB,EAAE,UAAkB,EAAE,MAAe,KAAK;IAEzF,MAAM,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,0BAAiC,CAAC,sBAA6B,CAAC;IAE5F,MAAM,aAAa,GAAG,CAAC,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAClE,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,CAAC,CAAC,gBAAgB,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,SAAS,GAAG,gBAAgB,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC;IAE5G,OAAO,SAAS,CAAC;AACnB,CAAC;AATD,0CASC;AACD,SAAgB,gBAAgB,CAAC,OAAe,EAAE,MAAe,KAAK;IAEpE,MAAM,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,0BAAiC,CAAC,sBAA6B,CAAC;IAE5F,MAAM,UAAU,GAAG,CAAC,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/D,MAAM,WAAW,GAAG,CAAC,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAEhE,qEAAqE;IACrE,MAAM,QAAQ,GAAG,OAAO,GAAG,CAAC,WAAW,GAAG,UAAU,CAAC,CAAC;IAEtD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAXD,4CAWC;AAED,SAAgB,2BAA2B,CAAC,oBAA4B,EAAE,MAAe,KAAK;IAE5F,MAAM,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,0BAAiC,CAAC,sBAA6B,CAAC;IAE5F,MAAM,WAAW,GAAG,IAAI,sBAAU,CAAC,oBAAoB,CAAC,CAAC;IAEzD,MAAM,IAAI,GAAG,CAAC,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,CAAC,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAE5D,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC9B,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACjC,WAAW,CAAC,MAAM,EAAE,CAAC;IACrB,WAAW,CAAC,OAAO,EAAE,CAAC;IAEtB,2EAA2E;IAC3E,IAAI,MAAM,GAAG,WAAW,CAAC,aAAuB,CAAC;IACjD,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,oBAAoB,GAAG,GAAG,CAAC;QAAE,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC;IAEtE,OAAO,MAAM,CAAC;AAChB,CAAC;AAnBD,kEAmBC;AAED,SAAgB,mBAAmB,CAAC,GAAW,EAAE,GAAW;IAE1D,MAAM,GAAG,GAAG,CAAC,CAAC,qBAAqB,EAAE,CAAC;IACtC,MAAM,GAAG,GAAG,CAAC,CAAC,uBAAuB,EAAE,CAAC;IAExC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;IAErE,OAAO,MAAM,CAAC;AAChB,CAAC;AARD,kDAQC;AAED,SAAgB,qBAAqB,CAAC,MAAc,EAAE,kBAA0B,EAAE,oBAA4B;IAE5G,2EAA2E;IAC3E,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,kBAAkB,GAAG,GAAG,CAAC,IAAI,CAAC,oBAAoB,GAAG,GAAG,CAAC,CAAC;QAAE,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC;IAEtG,OAAO,MAAM,CAAC;AAChB,CAAC;AAND,sDAMC;AAED,MAAM;;;;;;;;;;;;ACrZN,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;;;;;;;;;;;;;;;;;;;;AAEF,wFAAgC;AAOhC,MAAa,UAAU;IAMrB,YAAY,QAAgB;QAE1B,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC5B,CAAC;IAED,+BAA+B;IAC/B,QAAQ;QAEN,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IACD,QAAQ;QAEN,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEpC,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IACD,yEAAyE;IACzE,MAAM;QAEJ,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,aAAa,GAAG,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAEhH,IAAI,CAAC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QAEhC,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IACD,sDAAsD;IACtD,IAAI,CAAC,WAAmB,EAAE,SAAiB;QAEzC,wDAAwD;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAEnD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;QAEpE,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IACD,2EAA2E;IAC3E,+BAA+B;IAC/B,MAAM,CAAC,IAAY;QAEjB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QAEjC,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IACD,oEAAoE;IACpE,2EAA2E;IAC3E,OAAO,CAAC,WAAmB,EAAE,SAAiB;QAE5C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC;QAElD,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC,EAAE,aAAa,GAAG,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAE5H,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACvC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC;QAE3D,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IACD,uEAAuE;IACvE,+EAA+E;IAC/E,6DAA6D;IAC7D,KAAK,CAAC,oBAA6B;QAEjC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAE/G,QAAQ,EAAE,EACV;YACE,oBAAoB,CAAC,CAAC;gBACpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC;gBAEvD,OAAO,IAAI,CAAC,MAAM,CAAC;aACpB;YACD,OAAO,CAAC,CAAC;gBACP,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;aACnD;SACF;IACH,CAAC;IACD,4EAA4E;IAC5E,OAAO;QAEL,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,aAAa,GAAG,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAEhH,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,gBAAgB,CAAC,CAAC;QAElE,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;CACF;AA7FD,gCA6FC;;;;;;;;;;;;ACxGD,EAAE;AACF,gCAAgC;AAChC,EAAE;;;AAGF,4BAA4B;AACf,wBAAgB,GAAW,GAAG,CAAC;AAE5C,mCAAmC;AACtB,uBAAe,GAAW,CAAC,CAAC;AAEzC,uBAAuB;AACV,wBAAgB,GAAW,iBAAiB,CAAC;;;;;;;;;;;;ACZ1D,yEAAyE;;;;;;;;;;;;AAEzE,0GAAkC;AAClC,kFAAsB;AACtB,sFAAwB;;;;;;;;;;;;ACJxB,EAAE;AACF,4CAA4C;AAC5C,EAAE;;;;;;;;;;;;;;;;;;;;;;AAGF,uFAA6B;AAG7B,SAAgB,uBAAuB,CAAC,MAAgB;IAEtD,mCAAmC;IACnC,MAAM,YAAY,GAAa,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACpF,IAAI,MAAM,GAAW,CAAC,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,EAAE,CAAC,WAAW,GAAG,YAAY,CAAC,CAAC;IACzG,IAAI,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC;QAAE,MAAM,GAAG,CAAC,CAAC;IACtC,OAAO,MAAM,CAAC;AAChB,CAAC;AAPD,0DAOC;AAED,SAAgB,eAAe,CAAC,MAAgB;IAE9C,mCAAmC;IACnC,MAAM,YAAY,GAAa,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,UAAC,EAAI,CAAC,EAAC,CAAC;IAC1E,IAAI,MAAM,GAAW,CAAC,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,EAAE,CAAC,WAAW,GAAG,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC;IAC9G,IAAI,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC;QAAE,MAAM,GAAG,CAAC,CAAC;IACtC,OAAO,MAAM,CAAC;AAChB,CAAC;AAPD,0CAOC;AAGD,sBAAsB;AAEtB,SAAgB,gBAAgB,CAAC,WAA0B;IAEzD,IAAI,KAAK,GAAqB,EAAE,CAAC;IAEjC,KAAK,IAAI,GAAG,IAAI,WAAW,EAC3B;QACE,MAAM,EAAE,GAAW,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,CAAC,GAAW,uBAAuB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEtD,MAAM,KAAK,GAAmB;YAC5B,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,eAAe,EAAE,EAAE;YACnB,WAAW,EAAE,CAAC;SACf;QAED,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACnB;IAED,MAAM,QAAQ,GAA4B;QACxC,KAAK,EAAE,KAAK;KACb;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAvBD,4CAuBC;;;;;;;;;;;;ACpDD,EAAE;AACF,8DAA8D;AAC9D,EAAE;;;;;;;;;;;;;;;;;;;;;;AAGF,sFAAkC;AAGlC,SAAgB,sBAAsB,CAAC,GAAoB,EAAE,OAAgB,KAAK;IAEhF,MAAM,EAAE,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAW,2BAA2B,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAW,6BAA6B,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAEpE,MAAM,CAAC,GAAyB;QAC9B,MAAM,EAAE,MAAM;QACd,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,EAAE,CAAU,OAAO;QAC5B,WAAW;KACZ;IAED,OAAO,CAAC,CAAC;AACX,CAAC;AAfD,wDAeC;AAGD,+DAA+D;AAE/D,SAAgB,2BAA2B,CAAC,GAAU,EAAE,cAAwB,EAAE,YAAsB,EAAE,MAAe,KAAK;IAE5H,MAAM,EAAE,GAAG,aAAa,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC9C,MAAM,CAAC,GAAG,mBAAmB,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;IAChD,MAAM,CAAC,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAE1C,MAAM,WAAW,GAAG,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE1C,OAAO,WAAW,CAAC;AACrB,CAAC;AATD,kEASC;AAED,SAAgB,oBAAoB,CAAC,GAAU,EAAE,YAAsB,EAAE,OAAgB,KAAK;IAE5F,MAAM,CAAC,GAAG,mBAAmB,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACjD,MAAM,CAAC,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAE7C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAPD,oDAOC;AAED,SAAgB,6BAA6B,CAAC,GAAU,EAAE,cAAwB,EAAE,YAAsB,EAAE,MAAe,KAAK;IAE9H,MAAM,EAAE,GAAG,aAAa,CAAC,GAAG,EAAE,YAAY,CAAC;IAC3C,MAAM,CAAC,GAAG,qBAAqB,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;IACpD,MAAM,CAAC,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC;IAE9C,MAAM,WAAW,GAAG,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5C,OAAO,WAAW,CAAC;AACrB,CAAC;AATD,sEASC;AAED,SAAgB,sBAAsB,CAAC,GAAU,EAAE,cAAwB,EAAE,OAAgB,KAAK;IAEhG,MAAM,CAAC,GAAG,qBAAqB,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IACrD,MAAM,CAAC,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAE/C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAPD,wDAOC;AAGD,UAAU;AAEV,SAAgB,aAAa,CAAC,GAAU;IAEtC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACzB,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;IACtB,IAAI,EAAE,GAAa,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAEtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAC3B;QACE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAC3B;YACE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACpB;KACF;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAfD,sCAeC;AAED,SAAgB,cAAc,CAAC,GAAU;IAEvC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACzB,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;IACtB,IAAI,EAAE,GAAa,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAEtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAC3B;QACE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAC3B;YACE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACpB;KACF;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAfD,wCAeC;AAED,8EAA8E;AAC9E,6EAA6E;AAC7E,6EAA6E;AAC7E,cAAc;AAEd,4EAA4E;AAC5E,sBAAsB;AACtB,SAAgB,aAAa,CAAC,GAAU,EAAE,cAAwB;IAEhE,8BAA8B;IAC9B,IAAI,WAAW,GAAe,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC9C,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACjC,MAAM,IAAI,GAAa,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1C,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC;IAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAC3B;QACE,8BAA8B;QAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAC3B;YACE,IAAI,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAEpC,IAAI,WAAW,GAAG,CAAC,EACnB;gBACE,IAAI,CAAC,CAAC,eAAe,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,eAAe,CAAC,EAC5E;oBACE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC;oBACjC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;iBACvB;aACF;SACF;KACF;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AA5BD,sCA4BC;AAED,iFAAiF;AACjF,0BAA0B;AAC1B,SAAgB,aAAa,CAAC,GAAU,EAAE,YAAsB;IAE9D,8BAA8B;IAC9B,IAAI,WAAW,GAAe,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC9C,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACjC,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC;IAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAC3B;QACE,4BAA4B;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAC3B;YACE,IAAI,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAEpC,IAAI,WAAW,GAAG,CAAC,EACnB;gBACE,IAAI,CAAC,CAAC,eAAe,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,eAAe,CAAC,EAC1E;oBACE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC;oBACjC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;iBACvB;aACF;SACF;KACF;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AA3BD,sCA2BC;AAED,SAAgB,iBAAiB,CAAC,YAAsB;IAEtD,IAAI,EAAE,GAAW,YAAY,CAAC,MAAM,CAAC;IACrC,IAAI,MAAM,GAAW,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAE9C,IAAI,CAAC,GAAa,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAEvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAC3B;QACE,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;KACjC;IAED,OAAO,CAAC,CAAC;AACX,CAAC;AAbD,8CAaC;AAED,SAAgB,mBAAmB,CAAC,cAAwB;IAE1D,IAAI,EAAE,GAAG,cAAc,CAAC,MAAM,CAAC;IAC/B,IAAI,MAAM,GAAW,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IAEhD,IAAI,CAAC,GAAa,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAEvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAC3B;QACE,CAAC,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;KACnC;IAED,OAAO,CAAC,CAAC;AACX,CAAC;AAbD,kDAaC;AAED,SAAgB,mBAAmB,CAAC,GAAU,EAAE,YAAsB;IAEpE,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;IACpB,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAEvB,IAAI,CAAC,GAAe,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAE/E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAC3B;QACE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAC3B;YACE,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,EACvB;gBACE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;aACvC;iBAED;gBACE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;aACf;SACF;KACF;IAED,OAAO,CAAC,CAAC;AACX,CAAC;AAvBD,kDAuBC;AAED,SAAgB,qBAAqB,CAAC,GAAU,EAAE,cAAwB;IAExE,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;IACpB,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAEvB,IAAI,CAAC,GAAe,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAE/E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAC3B;QACE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAC3B;YACE,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,EACzB;gBACE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;aACzC;iBAED;gBACE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;aACf;SACF;KACF;IAED,OAAO,CAAC,CAAC;AACX,CAAC;AAvBD,sDAuBC;AAED,SAAgB,UAAU,CAAC,MAAgB;IAEzC,IAAI,CAAS,CAAC;IAEd,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EACrB;QACE,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACtC;SAED;QACE,CAAC,GAAG,GAAG,CAAC;KACT;IAED,OAAO,CAAC,CAAC;AACX,CAAC;AAdD,gCAcC;AAED,sDAAsD;AACtD,SAAgB,gBAAgB,CAAC,CAAS,EAAE,CAAa,EAAE,OAAgB,KAAK;IAE9E,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC;IACtB,IAAI,MAAM,GAAa,EAAE,CAAC;IAE1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAC7B;QACE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACtB;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAEjC,OAAO,KAAK,CAAC;AACf,CAAC;AAbD,4CAaC;AAED,oDAAoD;AACpD,SAAgB,eAAe,CAAC,CAAa,EAAE,CAAW,EAAE,OAAgB,KAAK;IAE/E,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAEzB,IAAI,CAAC,GAAG,GAAG,CAAC;IAEZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAC7B;QACE,IAAI,UAAU,GAAG,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAC9C,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;QAEvB,IAAI,IAAI;YAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;KACrE;IAED,OAAO,CAAC,CAAC;AACX,CAAC;AAfD,0CAeC;AAED,uDAAuD;AACvD,SAAgB,kBAAkB,CAAC,CAAS,EAAE,CAAa,EAAE,OAAgB,KAAK;IAEhF,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACzB,IAAI,MAAM,GAAa,EAAE,CAAC;IAE1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAC7B;QACE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACtB;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAEjC,OAAO,KAAK,CAAC;AACf,CAAC;AAbD,gDAaC;AAED,uDAAuD;AACvD,SAAgB,iBAAiB,CAAC,CAAa,EAAE,CAAW,EAAE,OAAgB,KAAK;IAEjF,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC;IAEtB,IAAI,CAAC,GAAG,GAAG,CAAC;IAEZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAC7B;QACE,IAAI,UAAU,GAAG,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAChD,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;QAEvB,IAAI,IAAI;YAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;KACzE;IAED,OAAO,CAAC,CAAC;AACX,CAAC;AAfD,8CAeC;AAGD,oBAAoB;AAEpB,SAAgB,aAAa,CAAC,GAAU;IAEtC,MAAM,EAAE,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAW,2BAA2B,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAW,6BAA6B,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAEpE,MAAM,GAAG,GAAyB;QAChC,MAAM,EAAE,MAAM;QACd,QAAQ,EAAE,QAAQ;KACnB;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAbD,sCAaC;;;;;;;;;;;;;;ACjWD,SAAgB,WAAW,CAAC,KAAa;IAEvC,OAAO,CAAC,GAAG,KAAK,KAAK,CAAC,QAAQ,CAAC;AACjC,CAAC;AAHD,kCAGC;;;;;;;;;;;;;;;;;;;;;;;ACHD,kFAAwB;AACxB,sFAA0B;AAC1B,wFAA2B;;;;;;;;;;;;ACF3B,EAAE;AACF,kBAAkB;AAClB,EAAE;;;;;;;;;;;;;;;;;;;;;;AAEF,uFAA+B;AAE/B,SAAgB,QAAQ,CAAC,GAAa;IAEpC,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACxC,CAAC;AAHD,4BAGC;AAED,SAAgB,QAAQ,CAAC,GAAa;IAEpC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;AACvD,CAAC;AAHD,4BAGC;AAED,SAAgB,QAAQ,CAAC,GAAa;IAEpC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAC1B,CAAC;AAHD,4BAGC;AAED,SAAgB,QAAQ,CAAC,GAAa;IAEpC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAC1B,CAAC;AAHD,4BAGC;AAED,wDAAwD;AACxD,4DAA4D;AAC5D,SAAgB,WAAW,CAAC,GAAa;IAEvC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAE/B,IAAI,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAE9B,OAAO,CAAC,IAAI,CAAC,UAAU,CAAS,EAAE,CAAS;QAEzC,OAAO,CAAC,GAAG,CAAC,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE1C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QACpB,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB,OAAO,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;AACnD,CAAC;AAjBD,kCAiBC;AAED,SAAgB,SAAS,CAAC,CAAS,EAAE,KAAU;IAE7C,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AAC3C,CAAC;AAHD,8BAGC;AAED,SAAgB,YAAY,CAAC,CAAQ;IAEnC,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAElD,OAAO,KAAK,CAAC;AACf,CAAC;AALD,oCAKC;AAED,SAAgB,SAAS,CAAC,CAAM,EAAE,CAAS;IAEzC,OAAO,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAHD,8BAGC;AAED,SAAgB,aAAa,CAAC,CAAS;IAErC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;AACrC,CAAC;AAHD,sCAGC;;;;;;;;;;;;ACnED,EAAE;AACF,oBAAoB;AACpB,EAAE;;;AAEF,yDAAyD;AACzD,SAAgB,eAAe,CAAC,CAAS,EAAE,CAAS,EAAE,SAAiB;IAErE,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,IAAI,MAAM,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IAEhD,OAAO,MAAM,CAAC;AAChB,CAAC;AAND,0CAMC;AAED,SAAgB,QAAQ,CAAC,GAAQ;IAE/B,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EACtB;QACE,IAAI,GAAG,GAAU,EAAE,CAAC;QAEpB,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE;YACzC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,OAAO,GAAG,CAAC;KACZ;SACI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAChC;QACE,IAAI,GAAG,GAAQ,EAAE,CAAC;QAClB,KAAK,IAAI,CAAC,IAAI,GAAG;YAAE,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;gBAC1C,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5B,OAAO,GAAG,CAAC;KACZ;;QAEC,OAAO,GAAG,CAAC;AACf,CAAC;AAnBD,4BAmBC;;;;;;;;;;;;AChCD,EAAE;AACF,mBAAmB;AACnB,EAAE;;;AAEF,qDAAqD;AACxC,eAAO,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAE3C,kDAAkD;AACrC,0BAAkB,GAAG,EAAE,CAAC;AACxB,uBAAe,GAAW,0BAAkB,GAAG,CAAC,CAAC;;;;;;;;;;;ACT9D;;;;;;;;;;;;;;;;UCAA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;UEtBA;UACA;UACA;UACA","sources":["webpack://dra-analytics/webpack/universalModuleDefinition","webpack://dra-analytics/./lib/all/all.ts","webpack://dra-analytics/./lib/all/compactness.ts","webpack://dra-analytics/./lib/all/equal.ts","webpack://dra-analytics/./lib/all/graph.ts","webpack://dra-analytics/./lib/all/minority.ts","webpack://dra-analytics/./lib/all/partisan.ts","webpack://dra-analytics/./lib/all/rate.ts","webpack://dra-analytics/./lib/all/splitting.ts","webpack://dra-analytics/./lib/all/types.ts","webpack://dra-analytics/./lib/all/utils.ts","webpack://dra-analytics/./lib/compactness/all.ts","webpack://dra-analytics/./lib/compactness/compactness.ts","webpack://dra-analytics/./lib/compactness/features.ts","webpack://dra-analytics/./lib/compactness/kiwysi.ts","webpack://dra-analytics/./lib/compactness/matrix.ts","webpack://dra-analytics/./lib/equal/all.ts","webpack://dra-analytics/./lib/equal/population.ts","webpack://dra-analytics/./lib/graph/all.ts","webpack://dra-analytics/./lib/graph/connected.ts","webpack://dra-analytics/./lib/graph/embedded.ts","webpack://dra-analytics/./lib/graph/settings.ts","webpack://dra-analytics/./lib/graph/utils.ts","webpack://dra-analytics/./lib/minority/all.ts","webpack://dra-analytics/./lib/minority/minority.ts","webpack://dra-analytics/./lib/minority/rpv.ts","webpack://dra-analytics/./lib/partisan/all.ts","webpack://dra-analytics/./lib/partisan/bias.ts","webpack://dra-analytics/./lib/partisan/erf.ts","webpack://dra-analytics/./lib/partisan/method.ts","webpack://dra-analytics/./lib/partisan/responsiveness.ts","webpack://dra-analytics/./lib/rate/all.ts","webpack://dra-analytics/./lib/rate/dra-config.ts","webpack://dra-analytics/./lib/rate/dra-ratings.ts","webpack://dra-analytics/./lib/rate/normalize.ts","webpack://dra-analytics/./lib/rate/settings.ts","webpack://dra-analytics/./lib/splitting/all.ts","webpack://dra-analytics/./lib/splitting/coi.ts","webpack://dra-analytics/./lib/splitting/county-district.ts","webpack://dra-analytics/./lib/splitting/utils.ts","webpack://dra-analytics/./lib/utils/all.ts","webpack://dra-analytics/./lib/utils/array.ts","webpack://dra-analytics/./lib/utils/general.ts","webpack://dra-analytics/./lib/utils/settings.ts","webpack://dra-analytics/external commonjs \"@dra2020/baseclient\"","webpack://dra-analytics/webpack/bootstrap","webpack://dra-analytics/webpack/before-startup","webpack://dra-analytics/webpack/startup","webpack://dra-analytics/webpack/after-startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"dra-analytics\"] = factory();\n\telse\n\t\troot[\"dra-analytics\"] = factory();\n})(global, function() {\nreturn ","import * as Compactness from './compactness';\nexport {Compactness};\n\nimport * as Equal from './equal';\nexport {Equal};\n\nimport * as Graph from './graph';\nexport {Graph};\n\nimport * as Minority from './minority';\nexport {Minority};\n\nimport * as Partisan from './partisan';\nexport {Partisan};\n\nimport * as Rate from './rate';\nexport {Rate};\n\nimport * as Splitting from './splitting';\nexport {Splitting};\n\nimport * as Types from './types';\nexport {Types};\n\nimport * as Utils from './utils';\nexport {Utils};","// Restrict package exports\n\nexport\n{\n // For a DRA-style scorecard\n makeCompactnessScorecard,\n // For the CLI & other users\n calcCompactness,\n calcKIWYSICompactness,\n\n // For legacy compactness calculations\n calcXSymmetry,\n calcYSymmetry,\n calcReock,\n calcBoundingBox,\n calcPolsbyPopper,\n calcConvexHullFeature,\n calcSchwartzberg,\n\n // For KIWYSI compactness scores (only)\n featureizePoly,\n kiwysiScoreShape,\n kiwysiScoreShapes\n} from '../compactness/all';\n\n","// Restrict package exports\n\nexport\n{\n makePopulationScorecard\n} from '../equal/all';","// Restrict package exports\n\nexport\n{\n isConnected,\n isEmbedded\n} from '../graph/all';","// Restrict package exports\n\nexport\n{\n makeMinorityScorecard,\n\n // For RPV analysis\n analyzeRacialVoting\n} from '../minority/all';","// Restrict package exports\n\nexport\n{\n // For a DRA-style scorecard\n makePartisanScorecard,\n // For the CLI & other users\n calcPartisanMetrics,\n\n estSeatProbability,\n estDistrictResponsiveness,\n fptpWin,\n\n avgSVError\n} from '../partisan/all';","// Restrict package exports\n\nexport\n{\n // For DRA-specific ratings\n ratePopulationDeviation,\n rateProportionality,\n rateCompetitiveness,\n rateMinorityRepresentation,\n rateCompactness, rateReock, ratePolsby,\n rateSplitting, rateCountySplitting, rateDistrictSplitting,\n // Legacy\n // rateSplittingLegacy, adjustSplittingRating, rateCountySplittingLegacy, rateDistrictSplittingLegacy,\n\n // For use in DRA client UI\n ratePartisanBias,\n isAntimajoritarian,\n\n popdevThreshold\n} from '../rate/all';","// Restrict package exports\n\nexport\n{\n // For a DRA-style scorecard\n makeSplittingScorecard,\n // For the CLI & other users\n calcSplitting, calcCOISplitting,\n\n // For COI splitting analysis\n effectiveSplits, uncertaintyOfMembership\n} from '../splitting/all';","// Restrict package exports\n\nexport\n{\n // Scorecards\n Scorecard,\n PopulationScorecard,\n PartisanScorecard,\n MinorityScorecard,\n CompactnessScorecard,\n SplittingScorecard,\n Dict,\n\n // Subordinate types \n VfArray, SVpoint, rVpoints,\n\n // For legacy KIWYSI compactness calculations\n PCAModel,\n\n // For minority analyis\n MinorityFilter,\n\n // For RPV analysis\n dictPoint, DemographicVotingByFeature, RPVFactor, RPVAnalysis\n} from '../types/all';","// Restrict package exports\n\nexport\n{\n areRoughlyEqual,\n deepCopy\n} from '../utils/all';\n\n","// Export everything here -- restrict package exports in all/compactness.ts\r\nexport * from './compactness';\r\nexport * from './features';\r\nexport * from './kiwysi';","//\n// COMPACTNESS\n//\n\nimport * as GeoJSON from 'geojson';\nimport {Poly} from '@dra2020/baseclient';\n\nimport {featureizePoly} from './features';\nimport {scoreFeatureSet} from './kiwysi';\nimport * as T from '../types/all';\nimport {ratePolsby, rateReock} from '../rate/dra-ratings';\n\n\n// Use this to get average Reock, Polsby-Popper, and KIWYSI compactness and by district for a set of shapes\n// This is used by DRA\nexport function makeCompactnessScorecard(shapes: GeoJSON.FeatureCollection, bLog: boolean = false): T.CompactnessScorecard\n{\n const pca: T.PCAModel = T.PCAModel.Revised;\n const options: Poly.PolyOptions | undefined = undefined;\n\n // For calculating averages of by-district values\n let totReock: number = 0;\n let totPolsby: number = 0;\n let totKIWYSI: number = 0;\n\n // For returning compactness by district to DRA\n // Note, these use the Cartesian (flat earth) measurements\n let byDistrict: T.Compactness[] = [];\n\n for (let i = 0; i < shapes.features.length; i++)\n {\n const features: T.CompactnessFeatures = featureizePoly(shapes.features[i], options);\n\n const reockFlat: number = features.reockFlat;\n const polsbyFlat: number = features.polsbyFlat;\n\n // Note: In order to compute the by-district compactness that DRA needs,\n // you have to normalize Reock & Polsby–Popper here (vs. in DRA proper)\n // like the overall compactness rating.\n const normalizedReock: number = rateReock(reockFlat);\n const normalizedPolsby: number = ratePolsby(polsbyFlat);\n\n let kiwysiRank: number = scoreFeatureSet(features, pca);\n // Constrain values to the range [1–100]\n kiwysiRank = Math.min(Math.max(kiwysiRank, 1), 100);\n // Raw KIWYSI scores (\"ranks\") are 1–100 where smaller is better\n // Round & invert into scores where bigger is better [0–100]\n const kiwysiScore: number = 100 - Math.round(kiwysiRank) + 1\n\n totReock += reockFlat;\n totPolsby += polsbyFlat;\n totKIWYSI += kiwysiScore;\n\n const measures: T.Compactness = {\n rawReock: reockFlat,\n normalizedReock: normalizedReock,\n rawPolsby: polsbyFlat,\n normalizedPolsby: normalizedPolsby,\n kiwysiScore: kiwysiScore\n };\n\n byDistrict.push(measures);\n }\n\n const avgReock: number = totReock / shapes.features.length;\n const avgPolsby: number = totPolsby / shapes.features.length;\n const avgKWIWYSI: number = Math.round(totKIWYSI / shapes.features.length);\n\n const s: T.CompactnessScorecard = {\n avgReock: avgReock,\n avgPolsby: avgPolsby,\n avgKWIWYSI: avgKWIWYSI,\n byDistrict: byDistrict, // Legacy format\n details: {}, // None\n // score?: \n }\n\n return s;\n}\n\n// CLI\n\n// Calculate Reock & Polsby–Popper for a shape using the typical Cartesian (flat earth) calculations.\n// Also calculate the \"know it when you see it\" rank (smaller is better) that models human perceptions of compactness.\nexport function calcCompactness(shapes: GeoJSON.FeatureCollection): T.CompactnessJSONReady\n{\n const pca: T.PCAModel = T.PCAModel.Revised;\n const options: Poly.PolyOptions | undefined = undefined;\n\n // For calculating averages of by-district values\n let totReock: number = 0;\n let totPolsby: number = 0;\n let totKIWYSI: number = 0;\n\n let byDistrict: T.CompactnessAlt[] = [];\n\n for (let i = 0; i < shapes.features.length; i++)\n {\n const features: T.CompactnessFeatures = featureizePoly(shapes.features[i], options);\n\n const reockFlat: number = features.reockFlat;\n const polsbyFlat: number = features.polsbyFlat;\n\n // Raw KIWYSI scores (\"ranks\") are 1–100 where smaller is better\n let kiwysiRank: number = scoreFeatureSet(features, pca);\n // Constrain values to the range [1–100]\n kiwysiRank = Math.min(Math.max(kiwysiRank, 1), 100);\n\n totReock += reockFlat;\n totPolsby += polsbyFlat;\n totKIWYSI += kiwysiRank;\n\n const c: T.CompactnessAlt = {\n reock: reockFlat,\n polsby: polsbyFlat,\n kiwysiRank: kiwysiRank\n };\n\n byDistrict.push(c);\n }\n\n const avgReock: number = totReock / shapes.features.length;\n const avgPolsby: number = totPolsby / shapes.features.length;\n const avgKWIWYSI: number = Math.round(totKIWYSI / shapes.features.length);\n\n const out: T.CompactnessJSONReady = {\n avgReock: avgReock,\n avgPolsby: avgPolsby,\n avgKWIWYSI: avgKWIWYSI,\n byDistrict: byDistrict\n }\n\n return out;\n}\n","//\n// COMPACTNESS \"FEATURES\" (METRICS)\n//\n// Measures of compactness compare district shapes to various ideally compact\n// benchmarks, such as circles. All else equal, more compact districts are better.\n\n\nimport {Util, Poly} from '@dra2020/baseclient';\n\nimport * as T from '../types/all';\n\n\n// FEATURES (FOR AN ML MODEL)\n//\n// The 6 \"smart\" features from Kaufman & King's \"know it when you see it\" (KIWYSI)\n// compactness model plus Schwartzberg:\n//\n// 1 - sym_x (X-SYMMETRY)\n// 2 - sym_y (Y-SYMMETRY)\n// 3 - reock (REOCK)\n// 4 - bbox (BOUNDING-BOX)\n// 5 - polsby (POLSBYPOPPER)\n// 6 - hull (Hull(D))\n// 7 - schwartzberg (SCHWARTZBERG)\n\n// FEATURE 1: X-SYMMETRY - The same as Y-SYMMETRY except reflect the district D\n// around a horizontal line going through the centroid. See below.\n\nexport function calcXSymmetry(poly: any): number\n{\n const [cx,] = meanCentroid(poly);\n const sym_x = calcSymmetry(poly, reflectOverX(cx))\n\n return sym_x;\n}\n\n\n// FEATURE 2: Y-SYMMETRY - The area of a district overlapping with its\n// reflection around a vertical line going through the centroid, divided by\n// the area of the district. Values range [1–2].\n\n// 1. Find the centroid\n// 2. Take the area of the district\n// 3. Flip the shape about its x or y axis, running through the centroid\n// 4. Calculate the union of the original shape and its mirror\n// 5. Take the ratio of the area of that union* and the area of the original shape\n\nexport function calcYSymmetry(poly: any): number\n{\n const [, cy] = meanCentroid(poly);\n const sym_y = calcSymmetry(poly, reflectOverY(cy))\n\n return sym_y;\n}\n\nfunction calcSymmetry(poly: any, transformFn: any): number\n{\n const polyarrPoints = poly.geometry.coordinates;\n\n let transformedPoly = Poly.polyTransform(poly, transformFn);\n transformedPoly = Poly.polyRewindRings(transformedPoly);\n const reflectedarrPoints = Poly.polyUnpack(transformedPoly);\n\n const unionedPoly = Poly.unionPolys([polyarrPoints, reflectedarrPoints]);\n\n const area: number = Poly.polyArea(poly);\n const unionedArea: number = Poly.polyArea(unionedPoly);\n\n return unionedArea / area;\n}\n\nfunction meanCentroid(poly: any): T.arrPoint\n{\n const X = 0, Y = 1;\n\n let n: number = 0;\n let x_tot: number = 0;\n let y_tot: number = 0;\n\n let coords: any = poly.geometry.coordinates;\n if (Util.depthof(coords) == 4) coords = [coords]; // normalize to multipolygon\n\n const nPolys: number = coords.length;\n for (let i = 0; i < nPolys; i++) // for each polygon\n {\n const nRings: number = coords[i].length;\n\n for (let j = 0; j < nRings; j++) // for each ring\n { // do\n if (j > 0) continue; // skip the holes\n\n for (let pt of coords[i][j]) // for each arrPoint\n { // do\n n += 1;\n x_tot += pt[X];\n y_tot += pt[Y];\n }\n }\n }\n\n const centroid: T.arrPoint = [x_tot / n, y_tot / n];\n\n return centroid;\n}\n\nfunction reflectOverX(x0: number): any\n{\n return function (pt: T.arrPoint): T.arrPoint\n {\n const [x, y] = pt;\n\n return [2 * x0 - x, y];\n }\n}\n\nfunction reflectOverY(y0: number): any\n{\n return function (pt: T.arrPoint): T.arrPoint\n {\n const [x, y] = pt;\n\n return [x, 2 * y0 - y];\n }\n}\n\n\n// FEATURE 3: REOCK - Reock is the primary measure of the dispersion of district\n// shapes, calculated as “the area of the distric to the area of the minimum spanning\n// circle that can enclose the district.”\n//\n// R = A / A(Minimum Bounding Circle)\n// R = A / (π * (D / 2)2)\n//\n// R = 4A / πD2\n//\n// where A is the area of the district and D is the diameter of the minimum bounding circle.\n\nexport function calcReock(area: number, diameter: number): number\n{\n return (4 * area) / (Math.PI * diameter ** 2);\n}\n\n\n// FEATURE 4: \"BOUNDING-BOX\" is shorthand here for the ratio of the area of the\n// district to the area of the minimum bounding box of the district. It's not a\n// simple bounding box.\n\nexport function calcBoundingBox(poly: any): number\n{\n const polyArea: number = Poly.polyArea(poly);\n\n const MBR: any = Poly.minimumBoundingRectangle(poly);\n const bboxArea: number = Poly.polyArea(MBR);\n\n return polyArea / bboxArea;\n}\n\n\n// FEATURE 5: POLSBYPOPPER - Polsby-Popper is the primary measure of the indendentation\n// of district shapes, calculated as the “the ratio of the area of the district to \n// the area of a circle whose circumference is equal to the perimeter of the district.”\n//\n// PP = A / A(C)\n//\n// where C is that circle. In other words:\n//\n// P = 2πRc and A(C) = π (P / 2π)2\n//\n// where P is the perimeter of the district and Rc is the radius of the circle.\n//\n// Hence, the measure simplifies to:\n//\n// PP = 4π * (A / P2)\n\nexport function calcPolsbyPopper(area: number, perimeter: number): number\n{\n return (4 * Math.PI) * (area / perimeter ** 2);\n}\n\n\n// FEATURE 6: Hull(D) - Convex Hull is a secondary measure of the dispersion of\n// district shapes, calculated as “the ratio of the district area to the area of\n// the minimum convex bounding polygon(also known as a convex hull) enclosing the\n// district.”\n//\n// CH = A / A(Convex Hull)\n// \n// where a convex hull is the minimum perimeter that encloses all arrPoints in a shape, basically the shortest\n// unstretched rubber band that fits around the shape.\n\n// Note: This is not THE convex hull, but rather a metric based on it.\nexport function calcConvexHullFeature(area: number, chArea: number): number\n{\n return area / chArea;\n}\n\n\n// FEATURE 7: SCHWARTZBERG - Schwartzberg is a secondary measure of the degree of\n// indentation of district shapes, calculated as “the ratio of the perimeter of the\n// district to the circumference of a circle whose area is equal to the area of the\n// district.”\n//\n// https://www.azavea.com/blog/2016/07/11/measuring-district-compactness-postgis/\n// defines Schwartzberg as:\n//\n// S = 1 / (P / C)\n//\n// where P is the perimeter of the district and C is the circumference of the circle. The radius of the circle is:\n//\n// Rc = SQRT(A / π)\n//\n// So, the circumference of the circle is:\n//\n// C = 2πRc or C = 2π * SQRT(A / π)\n//\n// Hence:\n//\n// S = 1 (P / 2π * SQRT(A / π))\n//\n// S = (2π * SQRT(A / π)) / P\n//\n// NOTE - But Aaron Kaufman's KIWYSI feature matches the verbal description of \n// P / C(feature_helpers.R). So, use P/C, not C/P as Azavea describes.\n\nexport function calcSchwartzberg(area: number, perimeter: number): number\n{\n return perimeter / ((2 * Math.PI) * Math.sqrt(area / Math.PI));\n}\n\n\n// CALCULATE THE 7 COMPACTNESS \"FEATURES\" FOR A POLYGON FOR THE KIWYSI COMPACTNESS MODEL\n\nexport function featureizePoly(poly: any, options?: Poly.PolyOptions): T.CompactnessFeatures\n{\n if (options === undefined) options = Poly.DefaultOptions;\n\n const area: number = Poly.polyArea(poly);\n const perimeter: number = Poly.polyPerimeter(poly, options);\n const diameter = Poly.polyDiameter(poly, options);\n\n const areaFlat: number = Poly.polyAreaFlat(poly);\n const perimeterFlat: number = Poly.polyPerimeterFlat(poly);\n const diameterFlat: number = Poly.polyDiameterFlat(poly);\n\n const ch = Poly.polyConvexHull(poly);\n\n const hullArea: number = Poly.polyArea(ch);\n\n const result: T.CompactnessFeatures = {\n // For the \"correct\" geodesic calculations that the KIWYSI AI uses\n sym_x: calcXSymmetry(poly),\n sym_y: calcYSymmetry(poly),\n reock: calcReock(area, diameter),\n bbox: calcBoundingBox(poly),\n polsby: calcPolsbyPopper(area, perimeter),\n hull: calcConvexHullFeature(area, hullArea),\n schwartzberg: calcSchwartzberg(area, perimeter),\n\n // For the Cartesian (flat earth) calculations that are typically done\n reockFlat: calcReock(areaFlat, diameterFlat),\n polsbyFlat: calcPolsbyPopper(areaFlat, perimeterFlat)\n };\n\n return result;\n}\n","//\n// KIWYSI COMPACTNESS - See Aaron Kaufman and Gary King's paper\n//\n\nimport * as GeoJSON from 'geojson';\nimport {Poly} from '@dra2020/baseclient';\n\nimport {featureizePoly} from './features';\nimport * as T from '../types/all';\nimport * as M from './matrix';\n\n\n// For verifying replication w/ Aaron Kaufman & Gary King's results\n// Note: These scores are smaller is better (ranks) and potentially out of range\nexport function kiwysiScoreShapeRAW(poly: any, pca: T.PCAModel, options?: Poly.PolyOptions): number\n{\n // Feature-ize the shape\n const features: T.CompactnessFeatures = featureizePoly(poly, options);\n\n // Score the feature set\n const score: number = scoreFeatureSet(features, pca);\n\n return score;\n}\n\n// Note: These scores are still smaller is better (ranks)\nexport function kiwysiScoreShape(poly: any, pca: T.PCAModel, options?: Poly.PolyOptions): number\n{\n const rawScore = kiwysiScoreShapeRAW(poly, pca, options);\n const rangedScore = Math.min(Math.max(rawScore, 1), 100);\n\n return rangedScore;\n}\n\n// Use this to get KIWYSI compactness scores (\"ranks\") for a set of shapes\nexport function kiwysiScoreShapes(shapes: GeoJSON.FeatureCollection, pca: T.PCAModel, options?: Poly.PolyOptions): number[]\n{\n let scores: number[] = [];\n\n for (let i = 0; i < shapes.features.length; i++)\n {\n const score = kiwysiScoreShape(shapes.features[i], pca, options);\n scores.push(score);\n }\n\n return scores;\n}\n\n// CLI\n\n// Use this to get KIWYSI compactness features and scores (\"ranks\") for a set of shapes\n// Note - These calculations use the geodesic (curved earth) model\nexport function calcKIWYSICompactness(shapes: GeoJSON.FeatureCollection): T.KiwysiJSONReady\n{\n const pca: T.PCAModel = T.PCAModel.Revised;\n const options: Poly.PolyOptions | undefined = undefined;\n\n let totKIWYSI: number = 0;\n let byDistrict: T.KiwysiFeatures[] = [];\n\n for (let i = 0; i < shapes.features.length; i++)\n {\n // Feature-ize the shape\n const features: T.CompactnessFeatures = featureizePoly(shapes.features[i], options);\n\n // Score the feature set\n const rawScore: number = scoreFeatureSet(features, pca);\n const rangedScore = Math.min(Math.max(rawScore, 1), 100);\n\n totKIWYSI += rangedScore;\n\n const entry: T.KiwysiFeatures = {\n sym_x: features.sym_x,\n sym_y: features.sym_y,\n reock: features.reock,\n bbox: features.bbox,\n polsby: features.polsby,\n hull: features.hull,\n schwartzberg: features.schwartzberg,\n kiwysiRank: rangedScore\n };\n\n byDistrict.push(entry);\n }\n\n const avgKWIWYSI: number = Math.round(totKIWYSI / shapes.features.length);\n\n const out: T.KiwysiJSONReady = {\n avgKWIWYSI: avgKWIWYSI,\n byDistrict: byDistrict\n }\n\n return out;\n}\n\n\n// KIWYSI SCORE THE FEATURES FROM A FEATURE-IZED SHAPE\n\nexport function scoreFeatureSet(features: T.CompactnessFeatures, pca: T.PCAModel): number\n{\n if (pca == T.PCAModel.Revised) return applyPCAModel(features);\n else return applyPCAModel_ORIGINAL(features);\n}\n\n// Revised 01/25/21\nfunction applyPCAModel(features: T.CompactnessFeatures): number\n{\n const model: number[] = [\n 3.0428861122, // sym_x\n 4.5060390447, // sym_y\n -22.7768820155, // reock\n -24.1176096770, // bbox\n -107.9434473497, // polsby\n -67.1088897240, // hull\n -1.2981693414 // schwartzberg\n ];\n\n const intercept: number = 145.6420811716;\n\n const v: M.Vector = [\n features.sym_x,\n features.sym_y,\n features.reock,\n features.bbox,\n features.polsby,\n features.hull,\n features.schwartzberg\n ];\n\n const score = M.dotProduct(model, v) + intercept;\n const normalized = score;\n\n return normalized;\n}\n\n// The original, INCORRECT, model\nfunction applyPCAModel_ORIGINAL(features: T.CompactnessFeatures): number\n{\n const model: number[] = [\n 0.317566717356693, // sym_x\n 0.32545234315137, // sym_y\n 0.32799567316863, // reock\n 0.411560782484889, // bbox\n 0.412187169816954, // polsby\n 0.420085928286392, // hull\n 0.412187169816954 // schwartzberg\n ];\n\n const v: M.Vector = [\n features.sym_x,\n features.sym_y,\n features.reock,\n features.bbox,\n features.polsby,\n features.hull,\n features.schwartzberg\n ];\n\n const score = M.dotProduct(model, v);\n const normalized = (score * 11) + 50;\n\n return normalized;\n}\n\n","//\n// dotProduct - cloned from poly/matrix.ts, to avoid needing mathjs\n//\n\nexport type Vector = number[]; // A general vector or a row or a column\n\n\nexport function dotProduct(a: Vector, b: Vector): number\n{\n protect((a.length > 0) && (a.length == b.length), \"In dotProduct, the vectors aren't the same length. \");\n\n return a.map((value, i) => value * b[i]).reduce((acc, val) => acc + val, 0);\n};\n\nfunction protect(condition: boolean, message: string): void\n{\n if (!condition)\n throw new Error(message);\n}\n","// Export everything here -- restrict package exports in all/equal.ts\nexport * from './population';\n","//\n// POPULATION DEVIATION\n//\n\nimport {PopulationScorecard} from '../types/all';\nimport {ratePopulationDeviation} from '../rate/dra-ratings';\nimport * as C from '../rate/dra-config';\nimport * as T from '../types/all';\nimport * as U from '../utils/all';\n\n\nexport function calcPopulationDeviation(max: number, min: number, targetSize: number): number\n{\n return (max - min) / targetSize; // Don't trim the result here!\n}\n\nexport function isRoughlyEqual(devation: number, bLegislative: boolean): boolean\n{\n const threshold = C.popdevThreshold(bLegislative);\n\n return (devation <= threshold) ? true : false;\n}\n\nexport function makePopulationScorecard(totPopByDistrict: number[], targetSize: number, bLegislative: boolean, bLog: boolean = false): PopulationScorecard\n{\n const nonEmptyDistricts = totPopByDistrict.filter(x => x > 0);\n\n let min = 0;\n let max = 0;\n\n if (nonEmptyDistricts.length > 1)\n {\n min = U.minArray(nonEmptyDistricts);\n max = U.maxArray(nonEmptyDistricts);\n }\n\n const deviation = calcPopulationDeviation(max, min, targetSize);\n // const rating = ratePopulationDeviation(deviation, bLegislative);\n const roughlyEqual = ((nonEmptyDistricts.length > 1) && isRoughlyEqual(deviation, bLegislative)) ? true : false;\n\n const threshold = C.popdevThreshold(bLegislative);\n\n const notes: T.Dict = {\n 'maxDeviation': max - min,\n 'threshold': threshold\n };\n\n // Populate the measurement\n const s: PopulationScorecard = {\n deviation: deviation,\n // rating: rating,\n roughlyEqual: roughlyEqual,\n notes: notes\n }\n\n return s;\n}","// Export everything here -- restrict package exports in all/graph.ts\n\nexport * from './connected';\nexport * from './embedded';","//\n// CONTIGUOUS - Is a district in a plan fully connected?\n//\n\nimport * as T from '../types/all'\nimport * as G from './utils';\n\n\nexport function isConnected(featureIDs: T.FeatureGroup, graph: T.ContiguityGraph, bLog: boolean = false): boolean\n{\n let visited = new Set<string>();\n let toProcess: string[] = [];\n\n // Start processing with the first feature in the set\n let iter = featureIDs.values();\n toProcess.push(iter.next().value);\n\n // While there are features in the set that haven't been processed,\n // i.e., stop when you've visited all the features in the set\n while (toProcess.length > 0)\n {\n // Grab a feature and process it\n let node = toProcess.pop() as string;\n visited.add(node);\n\n // Get its actual neighbors in the graph proper, i.e., ignore any virtual \n // out-of-bounds neighbors\n let actualNeighbors = G.neighbors(node, graph).filter(x => (!G.isOutOfBounds(x)));\n\n // Add neighbors to visit, if they're in the same set & haven't already been visited\n let neighborsToVisit = actualNeighbors.filter(x => featureIDs.has(x) && (!visited.has(x)));\n toProcess.push(...neighborsToVisit);\n }\n\n const bConnected = visited.size == featureIDs.size;\n\n if (bLog && !bConnected)\n {\n const difference = new Set([...featureIDs.values()].filter(x => !visited.has(x)));\n console.log(\"Disconnected feature IDs that haven't been visited: \", difference);\n }\n\n return bConnected;\n}\n","//\n// EMBEDDED - Is one district fully embedded w/in another district?\n//\n\nimport * as T from '../types/all';\nimport * as U from '../utils/all';\nimport * as G from './utils';\n\n//\n// A district is NOT a \"donut hole\" district:\n// * If any neighbor is 'OUT_OF_STATE'; or\n// * If there are 2 or more neighboring districts.\n//\n\n\nexport function isEmbedded(districtID: number, featureIDs: T.FeatureGroup, plan: T.PlanByGeoID, graph: T.ContiguityGraph, bLog: boolean = false): boolean\n{\n let neighboringDistricts = new Set();\n let featuresToCheck = Array.from(featureIDs);\n\n if (U.isArrayEmpty(featuresToCheck)) return true;\n\n for (let feature of featuresToCheck)\n {\n // Get its neighbors (including the virtual \"out of bounds\" ones)\n let neighbors = G.neighbors(feature, graph);\n\n for (let neighbor of neighbors)\n {\n if (G.isOutOfBounds(neighbor)) return false;\n\n let neighboringDistrict = G.getDistrict(neighbor, plan);\n\n // Assume that a missing district assignment means that the feature is \n // \"water-only\" AND part of the border (vs.internal) and, therefore,\n // not in the plan / map.\n\n if (neighboringDistrict == undefined) return false;\n\n if (neighboringDistrict != districtID)\n {\n neighboringDistricts.add(neighboringDistrict);\n\n if (neighboringDistricts.size > 1) return false;\n }\n }\n }\n\n return true;\n}\n\n","//\n// GLOBAL CONSTANTS\n//\n\n// The ID for the virtual neighbors outside the nodes in the graph\nexport const OUT_OF_BOUNDS: string = \"OUT_OF_STATE\";\n\n// The dummy district ID for features not assigned districts yet\nexport const NOT_ASSIGNED: number = 0;\n\n","//\n// UTILITIES\n//\n\n\nimport * as T from '../types/all'\nimport * as S from './settings';\nimport * as U from '../utils/all';\n\n\nexport function getDistrict(geoID: string, plan: T.PlanByGeoID): number | undefined\n{\n if (U.keyExists(geoID, plan)) return plan[geoID];\n\n return undefined;\n}\n\nexport function neighbors(node: string, graph: T.ContiguityGraph): string[]\n{\n if (!U.keyExists(node, graph)) return [];\n\n // Handle both unweighted & weighted neighbors\n const n = graph[node];\n const l = (n instanceof Array) ? n : Object.keys(n);\n\n return l;\n}\n\nexport function isOutOfBounds(geoID: string): boolean\n{\n return geoID == S.OUT_OF_BOUNDS;\n}\n\n\n// NOTE - This is only used in the CLI and Jest tests\n// Invert a plan by geoID to sets of geoIDs by districtID\nexport function invertPlan(plan: T.PlanByGeoID): T.PlanByDistrictID\n{\n let invertedPlan = {} as T.PlanByDistrictID;\n\n for (let geoID in plan)\n {\n let districtID = plan[geoID];\n\n if (!(U.keyExists(districtID, invertedPlan))) invertedPlan[districtID] = new Set();\n\n invertedPlan[districtID].add(geoID);\n }\n\n return invertedPlan;\n}\n\n\n","// Export everything here -- restrict package exports in all/\r\n\r\nexport * from './minority'\r\nexport * from './rpv';\r\n","//\n// MINORITY REPRESENTATION\n//\n\nimport * as T from '../types/all'\nimport * as U from '../utils/all';\nimport * as C from '../rate/dra-config';\n\nimport {Normalizer} from '../rate/normalize';\nimport {estSeatProbability} from '../partisan/method';\n\n\n// MINORITY SCORECARD\n\n// makeMinorityScorecard: Pivot the by-district profile into a 2D array:\n// * Demographic dimension\n// * VAP % bucket dimension + statewide VAP % and proportional seats\n// Then convert the 2D array back into a static structure.\n\nconst enum Demographic\n{\n Minority, // 'Minority'\n Black, // 'Black'\n Hispanic, // 'Hispanic'\n Pacific, // 'Pacific'\n Asian, // 'Asian'\n Native // 'Native'\n}\n\n// See bucketVAPPct() for the 6 VAP % buckets.\nconst enum PivotField\n{\n L35_40,\n L40_45,\n L45_50,\n L50_55,\n L55_60,\n L60Plus,\n VAPPct, // Statewide VAP %\n PropSeats // Proportional # of seats for VAP %\n}\n\nconst MINORITY = 1 - 1; // Demographic dimension offset\nconst PROPSEATS = 8 - 1; // Pivot dimension offset\n\nexport function makeMinorityScorecard(statewideDemos: T.Demographics, demosByDistrict: T.Demographics[], bLog: boolean = false): T.MinorityScorecard\n{\n const nDemos = 6; // Profile includes 'White'\n const offset: number = 1; // But don't process 'White'\n const nDistricts = demosByDistrict.length;\n\n // Initialize the demographic buckets\n // Get the statewide minority VAP/CVAP % (ignore 'White')\n const vapPctArray = Object.values(statewideDemos).slice(1);\n\n // Determine proportional minority districts by demographic (ignoring'White')\n const districtsByDemo: number[] = calcDistrictsByDemo(vapPctArray, nDistricts);\n\n let bucketsByDemo = new Array(nDemos);\n let totalProportional: number = 0;\n\n for (let j = 0; j < nDemos; j++)\n {\n const vapPct = vapPctArray[j];\n const prop = districtsByDemo[j];\n\n bucketsByDemo[j] = [0, 0, 0, 0, 0, 0, vapPct, prop];\n\n // Sum the prop for each individual race/ethnicity demographic\n if (j > 0)\n totalProportional += prop;\n }\n\n let opptyByDemo = U.initArray(nDemos, 0.0); // State-level values\n\n // For each district\n for (let i = 0; i < nDistricts; i++)\n {\n const districtDemos = Object.values(demosByDistrict[i]);\n\n // Find the opportunities for minority representation\n for (let j = 0; j < nDemos; j++)\n {\n const Mf = districtDemos[j + offset]; // Skip the 'White' entries\n\n const bucket: number = bucketVAPPct(Mf);\n if (bucket > 0)\n {\n // Bucket opportunity districts for each demographic\n bucketsByDemo[j][bucket - 1] += 1; // Zero-based array\n\n // Accumulate seat probabilities\n opptyByDemo[j] += estMinorityOpportunity(Mf, j);\n }\n }\n }\n\n const table: T.DemographicPivot = convertArrayToTable(bucketsByDemo);\n\n // The # of opportunity districts for each separate demographic and all minorities\n const oD: number = U.sumArray(opptyByDemo.slice(1)); // Sum individual demos, skipping all minorities\n const cD: number = opptyByDemo[MINORITY]; // All minorities\n\n // The # of proportional districts for each separate demographic and all minorities\n const pOd: number = totalProportional;\n const pCd: number = bucketsByDemo[MINORITY][PROPSEATS];\n\n let s: T.MinorityScorecard = {\n pivotByDemographic: table,\n opportunityDistricts: oD,\n proportionalOpportunities: pOd,\n coalitionDistricts: cD,\n proportionalCoalitions: pCd,\n details: {}, // None\n // score?: \n }\n\n return s;\n}\n\n\n// HELPERS\n\n// Convert the 2D working array to a fixed table, so the rows & columns can be\n// addressed logically by name as opposed to using array indices.\nfunction convertArrayToTable(a: number[][]): T.DemographicPivot\n{\n const minority: T.DemoBreakdown = {\n pct35_40: a[Demographic.Minority][PivotField.L35_40],\n pct40_45: a[Demographic.Minority][PivotField.L40_45],\n pct45_50: a[Demographic.Minority][PivotField.L45_50],\n pct50_55: a[Demographic.Minority][PivotField.L50_55],\n pct55_60: a[Demographic.Minority][PivotField.L55_60],\n pct60Plus: a[Demographic.Minority][PivotField.L60Plus],\n vapPct: a[Demographic.Minority][PivotField.VAPPct],\n propSeats: a[Demographic.Minority][PivotField.PropSeats]\n }\n const black: T.DemoBreakdown = {\n pct35_40: a[Demographic.Black][PivotField.L35_40],\n pct40_45: a[Demographic.Black][PivotField.L40_45],\n pct45_50: a[Demographic.Black][PivotField.L45_50],\n pct50_55: a[Demographic.Black][PivotField.L50_55],\n pct55_60: a[Demographic.Black][PivotField.L55_60],\n pct60Plus: a[Demographic.Black][PivotField.L60Plus],\n vapPct: a[Demographic.Black][PivotField.VAPPct],\n propSeats: a[Demographic.Black][PivotField.PropSeats]\n }\n const hispanic: T.DemoBreakdown = {\n pct35_40: a[Demographic.Hispanic][PivotField.L35_40],\n pct40_45: a[Demographic.Hispanic][PivotField.L40_45],\n pct45_50: a[Demographic.Hispanic][PivotField.L45_50],\n pct50_55: a[Demographic.Hispanic][PivotField.L50_55],\n pct55_60: a[Demographic.Hispanic][PivotField.L55_60],\n pct60Plus: a[Demographic.Hispanic][PivotField.L60Plus],\n vapPct: a[Demographic.Hispanic][PivotField.VAPPct],\n propSeats: a[Demographic.Hispanic][PivotField.PropSeats]\n }\n const pacific: T.DemoBreakdown = {\n pct35_40: a[Demographic.Pacific][PivotField.L35_40],\n pct40_45: a[Demographic.Pacific][PivotField.L40_45],\n pct45_50: a[Demographic.Pacific][PivotField.L45_50],\n pct50_55: a[Demographic.Pacific][PivotField.L50_55],\n pct55_60: a[Demographic.Pacific][PivotField.L55_60],\n pct60Plus: a[Demographic.Pacific][PivotField.L60Plus],\n vapPct: a[Demographic.Pacific][PivotField.VAPPct],\n propSeats: a[Demographic.Pacific][PivotField.PropSeats]\n }\n const asian: T.DemoBreakdown = {\n pct35_40: a[Demographic.Asian][PivotField.L35_40],\n pct40_45: a[Demographic.Asian][PivotField.L40_45],\n pct45_50: a[Demographic.Asian][PivotField.L45_50],\n pct50_55: a[Demographic.Asian][PivotField.L50_55],\n pct55_60: a[Demographic.Asian][PivotField.L55_60],\n pct60Plus: a[Demographic.Asian][PivotField.L60Plus],\n vapPct: a[Demographic.Asian][PivotField.VAPPct],\n propSeats: a[Demographic.Asian][PivotField.PropSeats]\n }\n const native: T.DemoBreakdown = {\n pct35_40: a[Demographic.Native][PivotField.L35_40],\n pct40_45: a[Demographic.Native][PivotField.L40_45],\n pct45_50: a[Demographic.Native][PivotField.L45_50],\n pct50_55: a[Demographic.Native][PivotField.L50_55],\n pct55_60: a[Demographic.Native][PivotField.L55_60],\n pct60Plus: a[Demographic.Native][PivotField.L60Plus],\n vapPct: a[Demographic.Native][PivotField.VAPPct],\n propSeats: a[Demographic.Native][PivotField.PropSeats]\n }\n\n const t: T.DemographicPivot = {\n minority: minority,\n black: black,\n hispanic: hispanic,\n pacific: pacific,\n asian: asian,\n native: native\n };\n\n return t;\n}\n\n// Convert the fixed table back to a 2D array, so test results can get compared generically.\nexport function convertTableToArray(t: T.DemographicPivot): number[][]\n{\n const minority: number[] = [\n t.minority.pct35_40,\n t.minority.pct40_45,\n t.minority.pct45_50,\n t.minority.pct50_55,\n t.minority.pct55_60,\n t.minority.pct60Plus,\n t.minority.vapPct,\n t.minority.propSeats\n ];\n const black: number[] = [\n t.black.pct35_40,\n t.black.pct40_45,\n t.black.pct45_50,\n t.black.pct50_55,\n t.black.pct55_60,\n t.black.pct60Plus,\n t.black.vapPct,\n t.black.propSeats\n ];\n const hispanic: number[] = [\n t.hispanic.pct35_40,\n t.hispanic.pct40_45,\n t.hispanic.pct45_50,\n t.hispanic.pct50_55,\n t.hispanic.pct55_60,\n t.hispanic.pct60Plus,\n t.hispanic.vapPct,\n t.hispanic.propSeats\n ];\n const pacific: number[] = [\n t.pacific.pct35_40,\n t.pacific.pct40_45,\n t.pacific.pct45_50,\n t.pacific.pct50_55,\n t.pacific.pct55_60,\n t.pacific.pct60Plus,\n t.pacific.vapPct,\n t.pacific.propSeats\n ];\n const asian: number[] = [\n t.asian.pct35_40,\n t.asian.pct40_45,\n t.asian.pct45_50,\n t.asian.pct50_55,\n t.asian.pct55_60,\n t.asian.pct60Plus,\n t.asian.vapPct,\n t.asian.propSeats\n ];\n const native: number[] = [\n t.native.pct35_40,\n t.native.pct40_45,\n t.native.pct45_50,\n t.native.pct50_55,\n t.native.pct55_60,\n t.native.pct60Plus,\n t.native.vapPct,\n t.native.propSeats\n ];\n\n const a: number[][] = [minority, black, hispanic, pacific, asian, native];\n\n return a;\n}\n\nexport function calcDistrictsByDemo(MfArray: number[], N: number): number[]\n{\n const districtsByDemo = MfArray.map(v => calcProportionalDistricts(v, N));\n\n return districtsByDemo;\n}\n\n// NOTE - Shift minority proportions up, so 37% minority scores like 52% share,\n// but use the uncompressed seat probability distribution. This makes a 37% \n// district have a ~70% chance of winning, and a 50% district have a >99% chance.\n// Below 37 % has no chance.\n// NOTE - Sam Wang suggest 90% probability for a 37% district. That seems a little\n// too abrupt and all or nothing, so I backed off to the ~70%.\n//\nexport function estMinorityOpportunity(Mf: number, demo?: Demographic): number\n{\n // NOTE - Switch to compress the probability distribution\n const bCompress = false;\n const dist = bCompress ? C.minorityOpportunityDistribution() : [0.0, 1.0];\n const range = C.minorityOpportunityRange();\n\n const _normalizer = new Normalizer(Mf);\n\n let shift = C.minorityShift(); // For Black VAP % (and Minority)\n if (demo && (demo > 1)) // For other non-Black demos,\n shift *= C.minorityShiftDilution(); // dilute the Black shift (by half)\n\n _normalizer.wipNum += shift;\n\n _normalizer.clip(dist[C.BEG], dist[C.END]);\n _normalizer.unitize(dist[C.BEG], dist[C.END]);\n\n const oppty = (Mf < range[C.BEG]) ? 0.0 : Math.min(estSeatProbability(_normalizer.wipNum, dist), 1.0);\n\n return oppty;\n}\n\n\n// HELPERS\n\nfunction bucketVAPPct(Mf: number): number\n{\n if (Mf < 0.35)\n return 0;\n else if ((Mf >= 0.35) && (Mf < 0.40))\n return 1;\n else if ((Mf >= 0.40) && (Mf < 0.45))\n return 2;\n else if ((Mf >= 0.45) && (Mf < 0.50))\n return 3;\n else if ((Mf >= 0.50) && (Mf < 0.55))\n return 4;\n else if ((Mf >= 0.55) && (Mf < 0.60))\n return 5;\n else // Mf >= 0.60\n return 6;\n}\n\nexport function calcProportionalDistricts(proportion: number, nDistricts: number): number\n{\n const roundUp = 0.0;\n const fractional = proportion * nDistricts;\n const integral = Math.round(fractional + roundUp);\n\n return integral;\n}\n\n/* Sources for majority-minority info:\n - https://en.wikipedia.org/wiki/List_of_majority-minority_United_States_congressional_districts\n - http://www.ncsl.org/Portals/1/Documents/Redistricting/Redistricting_2010.pdf\n*/\n","//\n// RACIALLY POLARIZED VOTING\n//\n\nimport * as T from '../types/all'\n\n\n// Analyze the degree of racially polarized voting for a district\nexport function analyzeRacialVoting(dictPoints: T.DemographicVotingByFeature /* | undefined */, districtID: number, groups: T.MinorityFilter): T.RPVAnalysis | undefined\n{\n // 12-29-2020 - Moved these guards up into district-analytics\n // Make sure the district is not empty, there are enough dictPoints, & that a minority is specified.\n // if (dictPoints === undefined) return undefined;\n // if (dictPoints.comparison === undefined) return undefined;\n // if (dictPoints.comparison.length <= 10) return undefined;\n // if (!(groups.black || groups.hispanic || groups.pacific || groups.asian || groups.native || groups.minority)) return undefined;\n\n // NOTE - If (groups.invertSelection == true), the comparison dictPoints are everything \n // except the selected minority, i.e., 1 – <selected minority>.\n\n const result: T.RPVAnalysis = {\n ids: dictPoints.ids,\n comparison: characterizeDemographicVoting(dictPoints.comparison),\n hispanic: groups.hispanic ? characterizeDemographicVoting(dictPoints.hispanic) : undefined,\n black: groups.black ? characterizeDemographicVoting(dictPoints.black) : undefined,\n pacific: groups.pacific ? characterizeDemographicVoting(dictPoints.pacific) : undefined,\n asian: groups.asian ? characterizeDemographicVoting(dictPoints.asian) : undefined,\n native: groups.native ? characterizeDemographicVoting(dictPoints.native) : undefined,\n minority: groups.minority ? characterizeDemographicVoting(dictPoints.minority) : undefined\n }\n\n return result;\n}\n\n// https://trentrichardson.com/compute-linear-regressions-in-javascript.html\n// https://www2.isye.gatech.edu/~yxie77/isye2028/lecture12.pdf\nfunction linearRegression(dictPoints: T.dictPoint[]): T.LinearRegression\n{\n // First pass - fit the line\n\n const n: number = dictPoints.length;\n\n let sum_x = 0;\n let sum_y = 0;\n let sum_xy = 0;\n let sum_xx = 0;\n let sum_yy = 0;\n\n for (let i = 0; i < n; i++) \n {\n const pt = dictPoints[i];\n\n sum_x += pt.x;\n sum_y += pt.y;\n sum_xy += (pt.x * pt.y);\n sum_xx += (pt.x * pt.x);\n sum_yy += (pt.y * pt.y);\n }\n\n const slope = (n * sum_xy - sum_x * sum_y) / (n * sum_xx - sum_x * sum_x);\n const intercept = (sum_y - slope * sum_x) / n;\n const r2 = Math.pow((n * sum_xy - sum_x * sum_y) / Math.sqrt((n * sum_xx - sum_x * sum_x) * (n * sum_yy - sum_y * sum_y)), 2);\n\n const xBar = sum_x / n;\n const yBar = sum_y / n;\n\n // Second pass - compute the standard errors\n\n let Sxx: number = 0; // Sum of squared deviations from the mean x\n let Syy: number = 0; // Sum of squared deviations of the residuals\n\n for (let i = 0; i < n; i++) \n {\n const pt = dictPoints[i];\n\n Sxx += Math.pow(pt.x - xBar, 2);\n Syy += Math.pow(pt.y - yOnLine(pt.x, slope, intercept), 2);\n }\n\n const mse = Syy / (n - 2);\n\n const stErrs: any = {\n slope: Math.sqrt(mse / Sxx),\n intercept: Math.sqrt(mse * ((1 / n) + (Math.pow(xBar, 2) / Sxx))),\n regression: Math.sqrt(Syy / n)\n }\n\n // Combine the results\n\n const lr: T.LinearRegression = {\n slope: slope,\n intercept: intercept,\n r2: r2,\n sterrs: stErrs\n }\n\n return lr;\n}\n\nfunction characterizeDemographicVoting(dictPoints: T.dictPoint[]): T.RPVFactor\n{\n const lr: T.LinearRegression = linearRegression(dictPoints);\n const lrPrime: T.LinearRegression = linearRegression(dictPoints.map(invertX));\n\n const result: T.RPVFactor = {\n slope: lr.slope,\n intercept: lr.intercept,\n r2: lr.r2,\n demPct: lrPrime.intercept,\n sterr: lrPrime.sterrs.intercept,\n points: dictPoints\n }\n\n return result;\n}\n\n// For interpolating dictPoints on a line\nconst yOnLine = (x: number, m: number, b: number): number => {return (m * x) + b;}\nconst xOnLine = (y: number, m: number, b: number): number => {return (y - b) / m;}\n\nconst invertX = (pt: T.dictPoint): T.dictPoint => {return {x: 1 - pt.x, y: pt.y}};\n","// Export everything here -- restrict package exports in all/partisan.ts\n\nexport * from './erf';\nexport * from './method';\nexport * from './bias';\nexport * from './responsiveness';\n\n\n// COMBINE EVERYTHING INTO A PARTISAN \"SCORECARD\"\n// * The bias & responsiveness calculations both depend on the same underlying method, and\n// everything is too intertwined to do separate bias & responsiveness passes & scorecards\n\nimport * as T from '../../lib/types/all'\nimport * as U from '../utils/all';\n\nimport\n{\n estSeats,\n estFPTPSeats,\n inferSVpoints\n} from '../../lib/partisan/method'\n\nimport\n{\n estSeatShare,\n bestSeats, bestSeatShare,\n calcDisproportionalityFromBest,\n estUnearnedSeats,\n calcTurnoutBias,\n estVotesBias,\n estPartisanBias,\n calcEfficiencyGap,\n invertSVPoints, keyRVpoints, calcDeclination,\n calcGlobalSymmetry, estGeometricSeatsBias, calcDisproportionality, calcMeanMedianDifference, calcLopsidedOutcomes, calcBigR, calcGamma,\n calcMinimalInverseResponsiveness,\n // EXPERIMENTAL\n estLocalAsymmetry, estLocalDisproportionality, estLocalDisproportionalityAlt, estLocalUnearnedSeats\n} from '../../lib/partisan/bias'\n\nimport\n{\n estResponsiveness, estResponsiveDistricts,\n estResponsiveDistrictsShare,\n countCompetitiveDistricts,\n estCompetitiveDistricts,\n estCompetitiveDistrictsShare\n} from '../../lib/partisan/responsiveness'\nimport {Utils} from '../all/all';\n\n\nexport function makePartisanScorecard(Vf: number, VfArray: T.VfArray, bLog: boolean = false): T.PartisanScorecard\n{\n const shift = T.Shift.Proportional;\n\n const N: number = VfArray.length;\n\n const bestS = bestSeats(N, Vf);\n const bestSf = bestSeatShare(bestS, N);\n\n // DEBUG\n // console.log(\"Best # seats = \", bestS, bestSf);\n\n const fptpS = estFPTPSeats(VfArray);\n\n const estS = estSeats(VfArray);\n const estSf = estSeatShare(estS, N);\n\n const deviation = calcDisproportionalityFromBest(estSf, bestSf); // This is the dis-proportionality\n\n const unearnedS = estUnearnedSeats(bestS, estS);\n\n // Calculate additional alternate metrics for reference\n const dSVpoints: T.SVpoint[] = inferSVpoints(Vf, VfArray, shift);\n const rSVpoints: T.SVpoint[] = invertSVPoints(dSVpoints);\n\n const TOf = calcTurnoutBias(Vf, VfArray);\n\n const Bs50 = estPartisanBias(dSVpoints as T.SVpoint[], N);\n const Bs50f = Bs50 / N;\n const Bv50f = estVotesBias(dSVpoints as T.SVpoint[], N);\n const rvPoints = keyRVpoints(VfArray);\n const decl = calcDeclination(VfArray);\n const gSym = calcGlobalSymmetry(dSVpoints, rSVpoints, Bs50f as number);\n\n const EG = calcEfficiencyGap(Vf, estSf);\n const BsGf = estGeometricSeatsBias(Vf, dSVpoints, rSVpoints);\n const prop = calcDisproportionality(Vf, estSf);\n const mMs = calcMeanMedianDifference(VfArray, Vf);\n const mMd = calcMeanMedianDifference(VfArray);\n const LO = calcLopsidedOutcomes(VfArray);\n\n // Calculate alternate responsiveness metrics for reference\n const bigR = calcBigR(Vf, estSf);\n const littleR = estResponsiveness(Vf, dSVpoints as T.SVpoint[]);\n const MIR = littleR ? calcMinimalInverseResponsiveness(Vf, littleR as number) : undefined;\n const rD = estResponsiveDistricts(VfArray);\n const rDf = estResponsiveDistrictsShare(rD as number, N);\n\n const gamma = littleR ? calcGamma(Vf, estSf, littleR as number) : undefined;\n\n const Cn = countCompetitiveDistricts(VfArray);\n // NOTE - Cd by definition uses a *possibly* different (more narrow) probability\n // distribution than Rd.\n const cD = estCompetitiveDistricts(VfArray);\n const cDf = estCompetitiveDistrictsShare(cD, N);\n\n // EXPERIMENTAL\n\n const lSym = estLocalAsymmetry(Vf, dSVpoints, rSVpoints);\n const lProp = estLocalDisproportionality(Vf, dSVpoints);\n const lPropAlt = estLocalDisproportionalityAlt(Vf, N, dSVpoints);\n const lUE = estLocalUnearnedSeats(Vf, N, dSVpoints);\n\n const biasMeasurements: T.Bias = {\n bestS: bestS,\n bestSf: bestSf,\n estS: estS,\n estSf: estSf,\n deviation: deviation,\n\n tOf: TOf,\n fptpS: fptpS,\n\n bS50: Bs50f,\n bV50: Bv50f,\n decl: decl,\n rvPoints: rvPoints,\n gSym: gSym,\n gamma: gamma,\n\n eG: EG,\n bSV: BsGf,\n prop: prop,\n mMs: mMs,\n mMd: mMd,\n lO: LO\n };\n\n const impactMeasurements: T.Impact = {\n unearnedS: unearnedS\n };\n\n const responsivenessMeasurements: T.Responsiveness = {\n cSimple: Cn,\n cD: cD,\n cDf: cDf,\n bigR: bigR,\n littleR: littleR,\n mIR: MIR,\n rD: rD,\n rDf: rDf\n }\n\n const DWins: T.VfArray = VfArray.filter(x => x > 0.5);\n const RWins: T.VfArray = VfArray.filter(x => x <= 0.5); // Ties credited to R's\n const averageDVf = (DWins.length > 0) ? U.avgArray(DWins) : undefined;\n const averageRVf = (RWins.length > 0) ? U.avgArray(RWins) : undefined;\n\n const experimentalMetrics: T.Experimental = {\n lSym: lSym,\n lProp: lProp,\n lPropAlt: lPropAlt,\n lUE: lUE\n };\n\n const s: T.PartisanScorecard = {\n bias: biasMeasurements,\n impact: impactMeasurements,\n responsiveness: responsivenessMeasurements,\n dSVpoints: dSVpoints,\n rSVpoints: rSVpoints,\n averageDVf: averageDVf,\n averageRVf: averageRVf,\n experimental: experimentalMetrics,\n details: {}\n };\n\n return s;\n}\n\nexport function calcPartisanMetrics(Vf: number, VfArray: T.VfArray): T.PartisanJSONReady\n{\n const s: T.PartisanScorecard = makePartisanScorecard(Vf, VfArray);\n\n let out: any = Utils.deepCopy(s);\n\n delete out.impact;\n delete out.details;\n\n return out as T.PartisanJSONReady;\n}","//\n// BIAS METRICS\n//\n\nimport * as T from '../types/all';\nimport * as U from '../utils/all';\nimport * as C from '../rate/dra-config';\n\nimport\n{\n estSeatProbability, estSeats,\n inferSVpoints,\n findBracketingLowerVf, findBracketingUpperVf,\n findBracketingLowerSf, findBracketingUpperSf,\n estFPTPSeats\n} from './method';\nimport {Utils} from '../all/all';\n\n\n/* Metrics:\n\n* ^S# [bestS] = the Democratic seats closest to proportional\n* ^S% [bestSf] = the corresponding Democratic seat share\n* S! [fptpS] = the estimated number of Democratic seats using first past the post\n* S# [estS] (S_V) = the estimated Democratic seats, using seat probabilities\n* S% [estSf] = the estimated Democratic seat share fraction, calculated as S# / N\n\n* BS_50 [bS50] = Seat bias as a fraction of N\n* BV_50 [bV50] = Votes bias as a fraction\n* decl [decl] = Declination\n* GS [gSym] = Global symmetry\n* ?? [gamma] = \n\n* EG [EG] = Efficiency gap as a fraction\n* BS_V [bSV] = Seats bias @ <V> (geometric)\n* PR [prop] = Disproportionality\n* MM [mMs] = Mean – median difference using statewide Vf\n* TO [tOf] = Turnout bias\n* MM' [mMd] = Mean – median difference using average district v \n* LO [LO] = Lopsided outcomes\n\n* B% [bias] = the bias calculated as S% – ^S%\n\n* LS [lSym] = average local asymmetry\n* LPR [lProp] = average local disproportionality\n\n*/\n\n\n// ESTIMATE BASIC BIAS -- By convention, '+' = R bias; '-' = D bias\n\n// ^S# - The # of Democratic seats closest to proportional @ statewide Vf\n// The \"expected number of seats\" from http://bit.ly/2Fcuf4q\nexport function bestSeats(N: number, Vf: number): number\n{\n return Math.round((N * Vf) - U.EPSILON);\n}\n\n// ^S% - The corresponding Democratic seat share \nexport function bestSeatShare(bestS: number, N: number): number\n{\n return bestS / N;\n}\n\n// S% - The estimated Democratic seat share fraction\nexport function estSeatShare(estS: number, N: number): number\n{\n return estS / N;\n}\n\n// B% - The deviation from proportionality calculated as ^S% — S%\nexport function calcDisproportionalityFromBest(estSf: number, bestSf: number): number\n{\n return bestSf - estSf;\n}\n\n// NOTE - Not used.\n// UE# - The estimated # of unearned seats\n// UE_# from http://bit.ly/2Fcuf4q\nexport function estUnearnedSeats(proportional: number, probable: number): number\n{\n return proportional - probable;\n}\n\n\n// ADVANCED/ALTERNATE METRICS FOR REFERENCE\n\nexport function calcTurnoutBias(statewide: number, VfArray: T.VfArray): number\n{\n const districtAvg = U.avgArray(VfArray);\n const turnoutBias = statewide - districtAvg;\n\n return turnoutBias;\n}\n\n// PARTISAN BIAS - I'm using John Nagle's simple seat bias below, which is what\n// PlanScore is doing:\n//\n// \"Partisan bias is the difference between each party’s seat share and 50 %\n// in a hypothetical, perfectly tied election.For example, if a party would\n// win 55 % of a plan’s districts if it received 50 % of the statewide vote,\n// then the plan would have a bias of 5 % in this party’s favor.To calculate\n// partisan bias, the observed vote share in each district is shifted by the\n// amount necessary to simulate a tied statewide election.Each party’s seat\n// share in this hypothetical election is then determined. The difference\n// between each party’s seat share and 50 % is partisan bias.\"\n// \n// This is *not* King's & others' geometric partisan bias metric per se.\n// That is below.\nexport function estPartisanBias(inferredSVpoints: T.SVpoint[], nDistricts: number): number\n{\n return estSeatBias(inferredSVpoints, nDistricts);\n}\n\n// SEATS BIAS -- John Nagle's simple seat bias @ 50% (alpha), a fractional # of seats.\nexport function estSeatBias(inferredSVpoints: T.SVpoint[], nDistricts: number): number\n{\n const half: number = 0.5;\n const tolerance: number = 0.001;\n\n let dSeats: number = 0;\n\n for (let pt of inferredSVpoints)\n {\n if (U.areRoughlyEqual(pt.v, half, tolerance))\n {\n dSeats = pt.s * nDistricts;\n\n break;\n }\n }\n\n const rSeats: number = nDistricts - dSeats;\n\n const Bs = (rSeats - dSeats) / 2.0;\n\n // NOTE - That is the same as (N/2) - S(0.5).\n // const BsAlt = (nDistricts / 2.0) - dSeats;\n\n return Bs;\n}\n\n// VOTES BIAS -- John Nagle's simple vote bias @ 50% (alpha2), a percentage.\nexport function estVotesBias(inferredSVpoints: T.SVpoint[], nDistricts: number): number | undefined\n{\n let extraVf: number | undefined = undefined;\n\n // Interpolate the extra Vf required @ Sf = 0.5\n const lowerPt = findBracketingLowerSf(0.5, inferredSVpoints);\n const upperPt = findBracketingUpperSf(0.5, inferredSVpoints);\n\n if (lowerPt && upperPt)\n {\n extraVf = 0.0;\n\n if ((upperPt.s - lowerPt.s) != 0)\n {\n const ratio = (upperPt.v - lowerPt.v) / (upperPt.s - lowerPt.s);\n const deltaS = 0.5 - lowerPt.s;\n\n extraVf = lowerPt.v + (ratio * deltaS) - 0.5;\n }\n }\n\n return extraVf;\n}\n\n// GEOMETRIC SEATS BIAS (@ V = statewide vote share)\nexport function estGeometricSeatsBias(Vf: number, dSVpoints: T.SVpoint[], rSVpoints: T.SVpoint[]): number | undefined\n{\n let BsGf: number | undefined = undefined;\n\n const bgsSVpoints: T.SVpoint[] = inferGeometricSeatsBiasPoints(dSVpoints, rSVpoints);\n\n // Interpolate the seat fraction @ Vf\n const lowerPt = findBracketingLowerVf(Vf, bgsSVpoints);\n const upperPt = findBracketingUpperVf(Vf, bgsSVpoints);\n\n if (lowerPt && upperPt)\n {\n const ratio = (upperPt.s - lowerPt.s) / (upperPt.v - lowerPt.v);\n const deltaV = Vf - lowerPt.v;\n const deltaS = ratio * deltaV;\n\n BsGf = lowerPt.s + deltaS;\n }\n\n return BsGf;\n}\n\n// The actual formula\nfunction calcGeometricSeatsBias(sD: number, sR: number): number\n{\n const BsGf = 0.5 * (sR - sD);\n\n return BsGf;\n}\n\nexport function inferGeometricSeatsBiasPoints(dSVpoints: T.SVpoint[], rSVpoints: T.SVpoint[]): T.SVpoint[]\n{\n const nPoints = dSVpoints.length;\n\n let bgsSVpoints: T.SVpoint[] = [];\n\n for (let i = 0; i < nPoints; i++)\n {\n const Vf = dSVpoints[i].v;\n const BsGf = calcGeometricSeatsBias(dSVpoints[i].s, rSVpoints[i].s);\n\n bgsSVpoints.push({v: Vf, s: BsGf});\n }\n\n return bgsSVpoints;\n}\n\nexport function invertSVPoints(inferredSVpoints: T.SVpoint[]): T.SVpoint[]\n{\n let invertedSVpoints: T.SVpoint[] = [];\n\n for (let pt of inferredSVpoints)\n {\n const Vd: number = pt.v;\n const Sd: number = pt.s;\n const Vr: number = 1.0 - Vd;\n const Sr: number = 1.0 - Sd;\n\n invertedSVpoints.push({v: Vr, s: Sr});\n }\n\n invertedSVpoints.sort(function (a, b)\n {\n return a.v - b.v;\n });\n\n return invertedSVpoints;\n}\n\n// EFFICIENCY GAP -- note the formulation used. Also, to accommodate turnout bias,\n// we would need to have D & R votes, not just shares.\nexport function calcEfficiencyGap(Vf: number, Sf: number, shareType = T.Party.Democratic): number\n{\n let efficiencyGap: number;\n\n if (shareType == T.Party.Republican)\n {\n // NOTE - This is the common formulation:\n //\n // EG = (Sf – 0.5) – (2 × (Vf – 0.5))\n //\n // in which it is implied that '-' = R bias; '+' = D bias.\n\n efficiencyGap = (Sf - 0.5) - (2.0 * (Vf - 0.5));\n }\n else\n {\n // NOTE - This is the alternate formulation in which '+' = R bias; '-' = D bias,\n // which is consistent with all our other metrics.\n\n efficiencyGap = (2.0 * (Vf - 0.5)) - (Sf - 0.5);\n }\n\n return efficiencyGap;\n}\n\n// For illustration purposes only\n// Assumes Democratic vote shares\n// Alternate specification with winner's bonus (R) heuristic built in:\n// - By convention, '+' = R bias; '-' = D bias\n// - If 1 <= R <= 2, EG is undefined (no/acceptable bias). \nexport function calcEfficiencyGapPrime(Vf: number, Sf: number, R: number | undefined): number | undefined\n{\n let EG = undefined;\n\n if (R && ((R > 2) || (R < 1)))\n EG = (2.0 * (Vf - 0.5)) - (Sf - 0.5);\n\n return EG;\n}\n\n// MEAN–MEDIAN DIFFERENCE\n// \n// From PlanScore.org: \"The mean-median difference is a party’s median vote share\n// minus its mean vote share, across all of a plan’s districts. For example, if\n// a party has a median vote share of 45 % and a mean vote share of 50 %, then\n// the plan has a mean - median difference of 5 % against this party. When the\n// mean and the median diverge significantly, the district distribution is skewed\n// in favor of one party and against its opponent. Conversely, when the mean and\n// the median are close, the district distribution is more symmetric.\"\n//\n// From Princeton Gerrymandering Project: \"The mean-median difference is calculated\n// by subtracting the average vote share of either party across all districts from\n// the median vote share of the same party across all districts. A negative mean - \n// median difference indicates that the examined party has an advantage; a positive\n// difference indicates that the examined party is disadvantaged.\"\n//\n// So:\n// * With D VPI, '+' = R bias; '-' = D bias <<< We're using this convention.\n// * With R VPI, '-' = R bias; '+' = D bias.\nexport function calcMeanMedianDifference(VfArray: T.VfArray, Vf?: number): number\n{\n const meanVf = Vf ? Vf : U.avgArray(VfArray);\n const medianVf: number = U.medianArray(VfArray);\n\n // NOTE - Switched order to get the signs correct\n const difference: number = meanVf - medianVf;\n // const difference: number = medianVf - meanVf;\n\n return difference;\n}\n\n// HELPERS FOR DECLINATION & LOPSIDED OUTCOMES\n\n// Key r(v) points, defined in Fig. 16:\n// * VfArray are Democratic seat shares (by convention).\n// * But the x-axis of r(v) graphs is Republican seat share.\n// * So, you have to invert the D/R axis for Vb; and\n// * Invert the D/R probabilities for Va.\nexport function keyRVpoints(VfArray: T.VfArray): T.rVpoints\n{\n const nDistricts = VfArray.length;\n const estS = estSeats(VfArray);\n\n const Sb = estSeatShare(estS, nDistricts);\n\n const Rb = Sb / 2;\n const Ra = (1 + Sb) / 2;\n\n let Vb = 1.0 - (U.sumArray(VfArray.map(v => estSeatProbability(v) * v))) / estS;\n let Va = (U.sumArray(VfArray.map(v => estSeatProbability(1 - v) * (1 - v)))) / (nDistricts - estS);\n\n // 06-24-21 - Make sure the results are in range (no floating point errors)\n Vb = Math.min(Vb, 0.50);\n Va = Math.max(Va, 0.50);\n\n const keyPoints: T.rVpoints = {\n Sb: Sb,\n Ra: Ra,\n Rb: Rb,\n Va: Va,\n Vb: Vb\n };\n\n return keyPoints;\n}\n\nexport function isASweep(Sf: number, nDistricts: number): boolean\n{\n const oneDistrict: number = 1 / nDistricts;\n const bSweep: boolean = ((Sf > (1 - oneDistrict)) || (Sf < oneDistrict)) ? true : false;\n\n return bSweep;\n}\n\nexport function radiansToDegrees(radians: number): number\n{\n const degrees: number = radians * (180 / Math.PI);\n\n return degrees;\n}\n\n// DECLINATION\n// \n// Declination is calculated using the key r(v) points, defined in Fig. 16.\n// Note that district vote shares are D shares, so party A = Rep & B = Dem.\nexport function calcDeclination(VfArray: T.VfArray): number | undefined\n{\n const {Sb, Ra, Rb, Va, Vb} = keyRVpoints(VfArray);\n const bSweep: boolean = isASweep(Sb, VfArray.length);\n const bTooFewDistricts: boolean = (VfArray.length < 5) ? true : false;\n const bVaAt50: boolean = (U.areRoughlyEqual((Va - 0.5), 0.0, U.EPSILON)) ? true : false;\n const bVbAt50: boolean = (U.areRoughlyEqual((0.5 - Vb), 0.0, U.EPSILON)) ? true : false;\n\n let decl: number | undefined;\n\n if (bSweep || bTooFewDistricts || bVaAt50 || bVbAt50)\n {\n decl = undefined;\n }\n else\n {\n const lTan = (Sb - Rb) / (0.5 - Vb);\n const rTan = (Ra - Sb) / (Va - 0.5);\n\n const lAngle = radiansToDegrees(Math.atan(lTan));\n const rAngle = radiansToDegrees(Math.atan(rTan));\n decl = rAngle - lAngle;\n decl = decl;\n }\n\n return decl;\n}\n\n// LOPSIDED OUTCOMES\n//\n// This is a measure of packing bias is:\n//\n// LO = (1⁄2 - vB) - (vA – 1⁄2) Eq. 5.4.1 on P. 26\n//\n// \"The ideal for this measure is that the excess vote share for districts\n// won by party A averaged over those districts equals the excess vote share\n// for districts won by party B averaged over those districts.\n// A positive value of LO indicates greater packing of party B voters and,\n// therefore, indicates a bias in favor of party A.\"\nexport function calcLopsidedOutcomes(VfArray: T.VfArray): number | undefined\n{\n const {Sb, Ra, Rb, Va, Vb} = keyRVpoints(VfArray);\n const bSweep: boolean = isASweep(Sb, VfArray.length);\n\n let LO: number | undefined;\n if (bSweep)\n {\n LO = undefined;\n }\n else\n {\n LO = (0.5 - Vb) - (Va - 0.5);\n }\n\n return LO;\n}\n\n\n// GLOBAL SYMMETRY - Fig. 17 in Section 5.1\n//\n// * gSym is the area of asymmetry between the two curves.\n// * The choice of what base to normalize it by is somewhat arbitrary.\n// * We actually only infer the S–V curve over the range [0.25–0.75] <<< 101 points (not 100!)\n// * But dividing by 100 normalizes the area of asymmetry to the area of the SxV unit square.\nexport function calcGlobalSymmetry(dSVpoints: T.SVpoint[], rSVpoints: T.SVpoint[], S50V: number): number\n{\n let gSym: number = 0.0;\n\n for (let i in dSVpoints)\n {\n gSym += Math.abs(dSVpoints[i].s - rSVpoints[i].s) / 2;\n }\n\n const sign = (S50V < 0) ? -1 : 1;\n gSym *= sign;\n\n return gSym / 100;\n}\n\n\n// RAW DISPROPORTIONALITY\n//\n// PR = Sf – Vf : Eq.C.1.1 on P. 42\nexport function calcDisproportionality(Vf: number, Sf: number): number\n{\n const disProp = calcProp(Vf, Sf);\n\n return disProp;\n}\n\n// The actual formula\nfunction calcProp(Vf: number, Sf: number): number\n{\n const prop = Vf - Sf;\n\n return prop;\n}\n\n\n// BIG 'R': Defined in Footnote 22 on P. 10\nexport function calcBigR(Vf: number, Sf: number): number | undefined\n{\n let bigR: number | undefined = undefined;\n\n if (!(U.areRoughlyEqual(Vf, 0.5, U.EPSILON)))\n {\n bigR = (Sf - 0.5) / (Vf - 0.5);\n }\n\n return bigR;\n}\n\n// MINIMAL INVERSE RESPONSIVENESS\n//\n// zeta = (1 / r) - (1 / r_sub_max) : Eq. 5.2.1\n//\n// where r_sub_max = 10 or 20 for balanced and unbalanced states, respectively.\nexport function calcMinimalInverseResponsiveness(Vf: number, r: number): number | undefined\n{\n let MIR: number | undefined = undefined;\n\n if (!(U.areRoughlyEqual(r, 0, U.EPSILON)))\n {\n const bBalanced = isBalanced(Vf);\n const ideal = bBalanced ? 0.1 : 0.2;\n\n MIR = (1 / r) - ideal;\n\n MIR = Math.max(MIR, 0.0);\n }\n\n return MIR;\n}\n\nfunction isBalanced(Vf: number): boolean\n{\n const [lower, upper] = C.competitiveRange();\n const bBalanced = ((Vf > upper) || (Vf < lower)) ? false : true;\n\n return bBalanced;\n}\n\n// GAMMA (NEW)\n// g = 50 + r<V>(<V>-50) – S(<V>)\n// def calc_gamma(plan):\n// return (0.5 + plan.responsiveness * (plan.statewide_vote_share - 0.5) \\\n// - (plan.predicted_D_seats / plan.districts)) \\\n// * 100\nexport function calcGamma(Vf: number, Sf: number, r: number): number\n{\n const g = 0.5 + (r * (Vf - 0.5)) - Sf;\n\n return g;\n}\n\n\n// EXPERIMENTAL\n\nconst pctWidth = 5; // The size in % points of the 'local' window to bracket <V>\n\n// Average local asymmetry\nexport function estLocalAsymmetry(Vf: number, dSVpoints: T.SVpoint[], rSVpoints: T.SVpoint[]): number | undefined\n{\n try\n {\n const dPts = svPointRange(Vf, dSVpoints);\n const rPts = svPointRange(Vf, rSVpoints);\n\n if (!dPts || !rPts) return undefined;\n\n const lSym: number = rangeAsymmetry(dPts, rPts);\n\n return lSym;\n }\n catch (err)\n {\n console.log(\"Exception in estLocalAsymmetry ...\");\n return undefined;\n }\n}\n\nexport function rangeAsymmetry(dSVpoints: T.SVpoint[], rSVpoints: T.SVpoint[]): number\n{\n const ndPts: number = dSVpoints.length;\n const nrPts: number = rSVpoints.length;\n\n console.assert(ndPts == nrPts, \"# of D & R points don't match: \", ndPts, nrPts);\n\n let tot: number = 0.0;\n\n for (let i in dSVpoints)\n {\n tot += calcGeometricSeatsBias(dSVpoints[i].s, rSVpoints[i].s);\n }\n\n return tot / ndPts;\n}\n\n// Average local disproportionality\nexport function estLocalDisproportionality(Vf: number, dSVpoints: T.SVpoint[]): number | undefined\n{\n try\n {\n const dPts = svPointRange(Vf, dSVpoints);\n\n if (!dPts) return undefined;\n\n const lProp: number = rangeDisproportionality(dPts);\n\n return lProp;\n }\n catch (err)\n {\n console.log(\"Exception in estLocalDisproportionality ...\");\n return undefined;\n }\n}\n\nexport function rangeDisproportionality(dSVpoints: T.SVpoint[]): number\n{\n const ndPts: number = dSVpoints.length;\n\n let tot: number = 0.0;\n\n for (let i in dSVpoints)\n {\n tot += calcProp(dSVpoints[i].v, dSVpoints[i].s);\n }\n\n return tot / ndPts;\n}\n\n// Average local disproportionality from the best # of seats (closest to proportional)\nexport function estLocalDisproportionalityAlt(Vf: number, N: number, dSVpoints: T.SVpoint[]): number | undefined\n{\n const dPts = svPointRange(Vf, dSVpoints);\n\n if (!dPts) return undefined;\n\n const lPropAlt: number = rangeDisproportionalityAlt(N, dPts);\n\n return lPropAlt;\n}\n\n// Dynamically calculate the best # seats, so this is a step function\nexport function rangeDisproportionalityAlt(N: number, dSVpoints: T.SVpoint[]): number\n{\n const ndPts: number = dSVpoints.length;\n\n let tot: number = 0.0;\n\n for (let i in dSVpoints)\n {\n const bestS = bestSeats(N, dSVpoints[i].v);\n const bestSf = bestSeatShare(bestS, N);\n\n tot += calcDisproportionalityFromBest(dSVpoints[i].s, bestSf);\n }\n\n return tot / ndPts;\n}\n\n// Average local unearned seats from the best # of seats (closest to proportional)\nexport function estLocalUnearnedSeats(Vf: number, N: number, dSVpoints: T.SVpoint[]): number | undefined\n{\n const dPts = svPointRange(Vf, dSVpoints);\n\n if (!dPts) return undefined;\n\n const lUE: number = rangeUnearnedSeats(N, dPts);\n\n return lUE;\n}\n\nexport function rangeUnearnedSeats(N: number, dSVpoints: T.SVpoint[]): number\n{\n const ndPts: number = dSVpoints.length;\n\n let tot: number = 0.0;\n\n for (let i in dSVpoints)\n {\n const estS: number = dSVpoints[i].s * N;\n const bestS = bestSeats(N, dSVpoints[i].v);\n\n tot += estUnearnedSeats(bestS, estS);\n }\n\n return tot / ndPts;\n}\n\n// Filter the full [0.25–0.75] range of S–V points down to the 'local' range.\n// Make sure that range is w/in the full range.\nfunction svPointRange(Vf: number, svPoints: T.SVpoint[]): T.SVpoint[] | undefined\n{\n const svRange: number[] = [0.25, 0.75]; // The range over which we infer the S–V curve points\n const halfStep: number = (1 / 100) / 2; // The V point increments, i.e., every half a percent\n const localWindow: number = pctWidth / 100; // # of % points wide as a fraction\n const plusMinus: number = localWindow / 2; // +/– % as a fraction\n const delta: number = plusMinus + (halfStep / 2); // +/– % plus half a half step to deal w/ floating point precision\n\n if ((Vf < svRange[0]) || (Vf > svRange[1])) return undefined;\n\n const bracketingVs: number[] = [\n findBracketingLowerVf(Vf, svPoints).v,\n findBracketingUpperVf(Vf, svPoints).v\n ];\n\n const localRange: number[] = [bracketingVs[0] - delta, bracketingVs[1] + delta];\n\n const subsetPts: T.SVpoint[] = svPoints.filter(x => inRange(x, localRange));\n\n return subsetPts;\n}\n\nconst inRange = (pt: T.SVpoint, range: number[]): boolean => {return (pt.v >= range[0]) && (pt.v <= range[1]);}","//\n// Approximate ERF - https://en.wikipedia.org/wiki/Error_function#Numerical_approximations\n//\n\nexport function approximateERF(x: number): number\n{\n const n = Math.abs(x);\n\n const p = 0.3275911;\n const a1 = 0.254829592;\n const a2 = 0.284496736 * -1;\n const a3 = 1.421413741;\n const a4 = 1.453152027 * -1;\n const a5 = 1.061405429;\n const t = 1 / (1 + (p * n));\n\n const erf = 1 - ((a1 * t) + (a2 * t ** 2) + (a3 * t ** 3) + (a4 * t ** 4) + (a5 * t ** 5)) * Math.E ** (-1 * n ** 2);\n\n return (x < 0) ? -erf : erf;\n}\n\n/* To validate this, you need to import mathjs.erf into a Jest test file and run these:\n\nconst {erf} = require('mathjs');\n\ndescribe('mathjs.erf', () =>\n{\n test('Probabilities', () =>\n {\n const places = 15;\n\n expect(erf(0.2)).toBeCloseTo(0.22270258921047847, places);\n expect(erf(-0.5)).toBeCloseTo(-0.5204998778130465, places);\n expect(erf(4)).toBeCloseTo(0.9999999845827421, places);\n });\n});\n\ndescribe('erf approximation', () =>\n{\n test('Probabilities', () =>\n {\n const places = 6;\n\n expect(U.approximateERF(0.2)).toBeCloseTo(erf(0.2), places);\n expect(U.approximateERF(-0.5)).toBeCloseTo(erf(-0.5), places);\n expect(U.approximateERF(4)).toBeCloseTo(erf(4), places);\n });\n});\n\n*/\n","//\n// METHODOLOGY SUPPORT\n//\n\nimport {approximateERF} from './erf';\nimport {Normalizer} from '../rate/normalize';\nimport * as T from '../types/all';\nimport * as U from '../utils/all';\n\n\n// CORE CAPABILITIES FROM JOHN NAGLE'S METHOD\n\n// Estimate the probability of a seat win for district, given a Vf\nexport function estSeatProbability(Vf: number, range?: number[]): number\n{\n if (range)\n {\n // If a range is provided, it defines end points of a compressed probability\n // distribution. These *aren't* the points where races start or stop being\n // contested, just the end points of a distribution that yields the desired\n // probabilities in the typical competitive range [45-55%].\n\n const _normalizer = new Normalizer(Vf);\n\n const distBeg = range[0];\n const distEnd = range[1];\n\n _normalizer.clip(distBeg, distEnd);\n _normalizer.unitize(distBeg, distEnd);\n\n return seatProbabilityFn(_normalizer.wipNum);\n }\n else\n {\n // Otherwise, use the full probability distribution.\n\n return seatProbabilityFn(Vf);\n }\n}\n\n// const {erf} = require('mathjs');\n// console.log(\"erf(0.2) =\", erf(0.2)); // returns 0.22270258921047847\n// console.log(\"erf(-0.5) =\", erf(-0.5)); // returns -0.5204998778130465\n// console.log(\"erf(4) =\", erf(4)); // returns 0.9999999845827421\n\nfunction seatProbabilityFn(Vf: number): number\n{\n // Python: 0.5 * (1 + erf((vpi - 0.50) / (0.02 * sqrt(8))))\n return 0.5 * (1.0 + approximateERF((Vf - 0.50) / (0.02 * Math.sqrt(8))));\n}\n\n// The estimated # of Democratic seats, using seat probabilities\nexport function estSeats(VfArray: T.VfArray, range?: number[]): number\n{\n // Python: sum([est_seat_probability(vpi) for vpi in vpi_by_district])\n return U.sumArray(VfArray.map(v => estSeatProbability(v, range)));\n}\n\n// Estimate the number of responsive districts [R(d)], given a set of Vf's\nexport function estDistrictResponsiveness(Vf: number): number\n{\n // Python: 1 - 4 * (est_seat_probability(vpi) - 0.5)**2\n return 1.0 - 4.0 * (estSeatProbability(Vf) - 0.5) ** 2;\n}\n\nexport const avgSVError = 0.02;\nexport function inferSVpoints(Vf: number, VfArray: T.VfArray, shift: T.Shift, range?: number[]): T.SVpoint[]\n{\n const nDistricts = VfArray.length;\n let SVpoints: T.SVpoint[] = [];\n\n for (let shiftedVf of shiftRange())\n {\n const shiftedVPI: T.VfArray = shiftDistricts(Vf, VfArray, shiftedVf, shift);\n const shiftedSf = estSeats(shiftedVPI, range) / nDistricts;\n SVpoints.push({v: shiftedVf, s: shiftedSf});\n }\n\n return SVpoints;\n}\n\nfunction shiftDistricts(Vf: number, VfArray: T.VfArray, shiftedVf: number, shift: T.Shift): T.VfArray\n{\n if (shift == T.Shift.Proportional)\n return shiftProportionally(Vf, VfArray, shiftedVf);\n else\n return shiftUniformly(Vf, VfArray, shiftedVf);\n}\n\n// Shift districts proportionally\nfunction shiftProportionally(Vf: number, VfArray: T.VfArray, shiftedVf: number): T.VfArray\n{\n let shiftedVfArray: T.VfArray;\n\n if (shiftedVf < Vf)\n {\n // Shift down: D's to R's\n const proportion = shiftedVf / Vf;\n shiftedVfArray = VfArray.map((v => v * proportion));\n }\n else if (shiftedVf > Vf)\n {\n // Shift up: R's to D's\n const proportion = (1.0 - shiftedVf) / (1.0 - Vf);\n shiftedVfArray = VfArray.map((v => (1.0 - (1.0 - v) * proportion)));\n }\n else\n {\n // No shift: shift = actual\n shiftedVfArray = VfArray;\n }\n\n return shiftedVfArray;\n}\n\n// Shift districts uniformly\nfunction shiftUniformly(Vf: number, VfArray: T.VfArray, shiftedVf: number): T.VfArray\n{\n const shift = shiftedVf - Vf;\n\n const shiftedVfArray: T.VfArray = VfArray.map((v => v + shift));\n\n return shiftedVfArray;\n}\n\n// Generate a range of v's in 1/2% increments\nfunction shiftRange(): number[]\n{\n const range: number[] = [0.25, 0.75];\n const axisRange: number[] = [];\n const step = (1 / 100) / 2;\n\n for (let v = range[0]; v <= range[1] + U.EPSILON; v += step)\n {\n axisRange.push(v);\n }\n\n return axisRange;\n}\n\n// Find the S(V) point that brackets a Vf value on the lower end\nexport function findBracketingLowerVf(Vf: number, inferredSVpoints: T.SVpoint[]): T.SVpoint\n{\n let lowerPt: T.SVpoint = inferredSVpoints[0];\n let smallerPoints: T.SVpoint[] = [];\n\n for (let pt of inferredSVpoints)\n {\n if (pt.v <= Vf)\n {\n smallerPoints.push(pt);\n }\n else\n {\n break;\n }\n }\n // The last smaller point\n lowerPt = smallerPoints.slice(-1)[0];\n\n return lowerPt;\n}\n\n// Find the S(V) point that brackets a Vf value on the upper end\nexport function findBracketingUpperVf(Vf: number, inferredSVpoints: T.SVpoint[]): T.SVpoint\n{\n let upperPt: T.SVpoint = inferredSVpoints[-1];\n\n for (let pt of inferredSVpoints)\n {\n if (pt.v >= Vf)\n {\n // The first bigger point\n upperPt = {v: pt.v, s: pt.s};\n break;\n }\n }\n\n return upperPt;\n}\n\n// The corresponding functions via the Sf y-axis (vs. Vf x-axis)\n// Find the S(V) point that brackets a Sf value on the lower end\nexport function findBracketingLowerSf(Sf: number, inferredSVpoints: T.SVpoint[]): T.SVpoint\n{\n let lowerPt: T.SVpoint = inferredSVpoints[0];\n let smallerPoints: T.SVpoint[] = [];\n\n for (let pt of inferredSVpoints)\n {\n if (pt.s <= Sf)\n {\n smallerPoints.push(pt);\n }\n else\n {\n break;\n }\n }\n // The last smaller point\n lowerPt = smallerPoints.slice(-1)[0];\n\n return lowerPt;\n}\n\n// Find the S(V) point that brackets a Sf value on the upper end\nexport function findBracketingUpperSf(Sf: number, inferredSVpoints: T.SVpoint[]): T.SVpoint\n{\n let upperPt: T.SVpoint = inferredSVpoints[-1];\n\n for (let pt of inferredSVpoints)\n {\n if (pt.s >= Sf)\n {\n // The first bigger point\n upperPt = {v: pt.v, s: pt.s};\n break;\n }\n }\n\n return upperPt;\n}\n\n\n// HELPERS\n\n// The estimated number of Democratic seats using first past the post\nexport function estFPTPSeats(VfArray: T.VfArray): number\n{\n\n // Python: sum([1.0 for vpi in vpi_by_district if (vpi > 0.5)])\n return U.sumArray(VfArray.map(v => fptpWin(v)));\n}\n\nexport function fptpWin(demPct: number): number\n{\n // Vote shares should be fractions in the range [0.0 – 1.0]\n //assert((demPct <= 1.0) && (demPct >= 0.0));\n\n return ((demPct > 0.5) ? 1 : 0);\n}","//\n// RESPONSIVENESS METRICS -- includes \"competitiveness\" metrics\n//\n\nimport {Normalizer} from '../rate/normalize';\nimport * as T from '../types/all';\nimport * as U from '../utils/all';\nimport * as C from '../rate/dra-config';\n\nimport {estDistrictResponsiveness, estFPTPSeats, findBracketingLowerVf, findBracketingUpperVf} from './method';\nimport {bestSeats} from './bias';\n\n\n/* Metrics:\n\n* R [bigR] = Overall responsiveness or winner’s bonus \n* r [littleR] = The point responsiveness at V% (the slope of the S(V) curve at <V>)\n* MIR [MIR] = Minimal inverse responsiveness \n* rD [rD] = the estimated # of responsive districts (using probabilities)\n* rD% [rDf] = the estimated # of responsive districts, as a fraction of N\n\n* C [c] = the number of districts that fall into the range [45–55%]\n* cD [cD] = the estimated # of competitive districts, using probabilities & a narrower [0.25–0.75] range\n* cD% [cDf] = the estimated # of competitive districts, as a fraction of N\n* beg/end [mRange] = the 1–N indices for the first and last district that separate the likely result and the proportional result\n* Md [mD] = the competitiveness of the marginal districts\n* Md% [mDf] = the probability that the marginal seats will flip, so S% => ^S%\n\n*/\n\n// RESPONSIVENESS\n\n// R# - Estimate responsiveness at the statewide vote share\nexport function estResponsiveness(Vf: number, inferredSVpoints: T.SVpoint[]): number | undefined\n{\n let r: number | undefined = undefined;\n\n // NOTE - Seat values are already fractions [0.0–1.0] here.\n const lowerPt = findBracketingLowerVf(Vf, inferredSVpoints);\n const upperPt = findBracketingUpperVf(Vf, inferredSVpoints);\n\n if (lowerPt && upperPt)\n {\n if (!(U.areRoughlyEqual((upperPt.v - lowerPt.v), 0, U.EPSILON)))\n {\n r = ((upperPt.s - lowerPt.s) / (upperPt.v - lowerPt.v));\n }\n }\n\n return r;\n}\n\n// rD - Estimate the number of responsive districts, given a set of Vf's\nexport function estResponsiveDistricts(VfArray: T.VfArray): number\n{\n // Python: sum([est_district_responsiveness(vpi) for vpi in vpi_by_district])\n return U.sumArray(VfArray.map(v => estDistrictResponsiveness(v)));\n}\n\n// rD% - The estimated # of responsive districts, as a fraction of N\nexport function estResponsiveDistrictsShare(rD: number, N: number): number\n{\n return rD / N;\n}\n\n\n// ESTIMATE COMPETITIVENESS (ENHANCED)\n\n// C - Count the # of competitive districts, defined as v in [45–55%]\nexport function countCompetitiveDistricts(VfArray: T.VfArray): number\n{\n return U.sumArray(VfArray.map(v => isCompetitive(v)));\n}\nfunction isCompetitive(v: number): number\n{\n return ((v >= C.competitiveRange()[C.BEG]) && (v <= C.competitiveRange()[C.END])) ? 1 : 0;\n}\n\n// cD - The estimated # of competitive districts\nexport function estCompetitiveDistricts(VfArray: T.VfArray, bCompress: boolean = false): number\n{\n return U.sumArray(VfArray.map(v => estDistrictCompetitiveness(v, bCompress)));\n}\n\nexport function estDistrictCompetitiveness(Vf: number, bCompress: boolean = false): number\n{\n const _normalizer = new Normalizer(Vf);\n\n // The end points of the probability distribution\n // NOTE - These aren't the points where races start or stop being contested,\n // just the end points of a distribution that yields the desired behavior\n // in the typical competitive range [45-55%].\n const distBeg = bCompress ? C.competitiveDistribution()[C.BEG] : 0.0;\n const distEnd = bCompress ? C.competitiveDistribution()[C.END] : 1.0;\n\n _normalizer.clip(distBeg, distEnd);\n _normalizer.unitize(distBeg, distEnd);\n\n const dC = estDistrictResponsiveness(_normalizer.wipNum);\n\n return dC;\n}\n\n// cD% - The estimated # of competitive districts, as a fraction of N\nexport function estCompetitiveDistrictsShare(cD: number, N: number): number\n{\n return cD / N;\n}\n\n// Md - The estimated # of \"marginal\" districts in and around the likely FPTP\n// seats & the best seat split that are competitive.\nexport function estMarginalCompetitiveDistricts(Mrange: number[], VfArray: T.VfArray, bCompress: boolean = false): number\n{\n const minId = Mrange[C.BEG];\n const maxId = Mrange[C.END];\n\n // Sort the array values, and subset it to those districts\n // NOTE - I'm *not* keeping track of the district indexes right now\n let subsetVfArray = U.deepCopy(VfArray).sort().slice(minId - 1, maxId);\n\n // Est. competitive districts on that array\n const Md = U.sumArray(subsetVfArray.map((v: number) => estDistrictCompetitiveness(v, bCompress)));\n\n return Md;\n}\n\n// Md% - The estimated competitiveness of the \"marginal\" districts in and around\n// the likely FPTP seats & the best seat split as a fraction\nexport function estMarginalCompetitiveShare(Md: number, Mrange: number[]): number\n{\n const minId = Mrange[C.BEG];\n const maxId = Mrange[C.END];\n\n // Est. competitive district share on that result\n const MdShare = estCompetitiveDistrictsShare(Md, maxId - minId + 1);\n\n return MdShare;\n}\n\nexport function findMarginalDistricts(Vf: number, VfArray: T.VfArray, N: number): number[]\n{\n const bestS = bestSeats(N, Vf);\n const fptpS = estFPTPSeats(VfArray);\n\n // Find the marginal districts IDs (indexed 1–N)\n let minId: number;\n let maxId: number;\n\n // Bracket the marginal districts\n if (bestS > fptpS)\n {\n minId = Math.max((N - bestS) - 1, 1);\n maxId = Math.min((N - fptpS) + 1, N);\n }\n else if (fptpS > bestS)\n {\n minId = Math.max((N - fptpS) - 1, 1);\n maxId = Math.min((N - bestS) + 1, N);\n }\n else\n {\n minId = Math.max((N - bestS) - 1, 1);\n maxId = Math.min((N - bestS) + 1, N);\n }\n\n return [minId, maxId];\n}\n","export * from './dra-ratings';\nexport * from './dra-config';\nexport * from './normalize';\nexport * from './settings';\n","//\n// DRA-SPECIFIC THRESHOLDS, SCALES, AND WEIGHTS\n//\n// * A layer of functions over config.json, so that they could be overridden dynamically.\n// That is not implemented yet.\n//\n\nimport * as T from '../types/all'\nconst config = require('./dra-config.json');\n\nexport const BEG = 0;\nexport const END = 1;\n\n\n// PARTISAN\n\nexport function biasRange(overridesJSON?: any): number[]\n{\n const range = config.partisan.bias.range;\n\n return range;\n}\n\nexport function winnerBonus(overridesJSON?: any): number\n{\n const bonus = config.partisan.bonus;\n\n return bonus;\n}\n\n// The simple user-facing range, i.e., 45–55%.\n\nexport function competitiveRange(overridesJSON?: any): number[]\n{\n const range = config.partisan.competitiveness.simpleRange;\n\n return range;\n}\n\nexport function competitiveDistribution(overridesJSON?: any): number[]\n{\n const dist = config.partisan.competitiveness.distribution;\n\n return dist;\n}\n\n// The more complex internal range for normalizing Cdf.\n// * 06/23/2020 - As part of relaxing the competitive range, I changed this max\n// from 0.67 to 0.75.\nexport function overallCompetitivenessRange(overridesJSON?: any): number[]\n{\n const range = config.partisan.competitiveness.range;\n\n return range;\n}\n\n// export function marginalCompetitivenessRange(overridesJSON?: any): number[]\n// {\n// const range = config.partisan.responsiveness.marginal.range;\n\n// return range;\n// }\n\n// export function marginalCompetitivenessWeight(overridesJSON?: any): number\n// {\n// const mcW = config.partisan.responsiveness.marginal.weight;\n\n// return mcW;\n// }\n\n// export function overallCompetitivenessWeight(overridesJSON?: any): number\n// {\n// const ocW = config.partisan.responsiveness.overall.weight;\n\n// return ocW;\n// }\n\n\n// MINORITY\n\nexport function minorityOpportunityRange(overridesJSON?: any): number[]\n{\n const range = config.minority.range;\n\n return range;\n}\n\nexport function minorityOpportunityDistribution(overridesJSON?: any): number[]\n{\n const dist = config.minority.distribution;\n\n return dist;\n}\n\n// For Black VAP %\nexport function minorityShift(overridesJSON?: any): number\n{\n const BLACK = 0;\n const shift = config.minority.shift[BLACK];\n\n return shift;\n}\n\n// Dilution for other demos\nexport function minorityShiftDilution(overridesJSON?: any): number\n{\n const DILUTION = 1;\n const shift = config.minority.shift[DILUTION];\n\n return shift;\n}\n\nexport function coalitionDistrictWeight(overridesJSON?: any): number\n{\n const weight = config.minority.coalition.weight;\n\n return weight;\n}\n\n\n// COMPACTNESS\n\nexport function reockWeight(overridesJSON?: any): number\n{\n const rW = config.compactness.reock.weight;\n\n return rW;\n}\n\nexport function reockRange(overridesJSON?: any): number[]\n{\n const range = config.compactness.reock.range;\n\n return range;\n}\n\nexport function polsbyWeight(overridesJSON?: any): number\n{\n const ppW = config.compactness.polsby.weight;\n\n return ppW;\n}\n\nexport function polsbyRange(overridesJSON?: any): number[]\n{\n const range = config.compactness.polsby.range;\n\n return range;\n}\n\n\n// SPLITTING\n\nexport function countySplittingWeight(overridesJSON?: any): number\n{\n const csW = config.splitting.county.weight;\n\n return csW;\n}\n\nexport function countySplittingRange(d: T.DistrictType, overridesJSON?: any): number[]\n{\n const range = config.splitting.county.range[d];\n\n return range;\n}\n\nexport function districtSplittingWeight(overridesJSON?: any): number\n{\n const dsW = config.splitting.district.weight;\n\n return dsW;\n}\n\nexport function districtSplittingRange(d: T.DistrictType, overridesJSON?: any): number[]\n{\n const range = config.splitting.district.range[d];\n\n return range;\n}\n\n\n// NOTE - Raw ranges, not inverted (i.e., smaller is better)\n// NOTE - This could be optimized to not calc LD values for CD's (or do it once)\nexport function popdevRange(bLegislative: boolean, overridesJSON?: any): number[]\n{\n const cdRange = config.popdev.range[T.DistrictType.Congressional];\n const worstCD = cdRange[BEG];\n const bestCD = cdRange[END];\n const ldRange = config.popdev.range[T.DistrictType.StateLegislative];\n const iRange = bLegislative ? ldRange : cdRange;\n\n const worst = iRange[BEG];\n const best = bLegislative ? (bestCD / worstCD) * iRange[BEG] : iRange[END];\n\n // Invert the range, so bigger is better.\n return [worst, best];\n}\n\n// NOTE - Raw threshold, not inverted (i.e., smaller is better)\nexport function popdevThreshold(bLegislative: boolean, overridesJSON?: any): number\n{\n const threshold = popdevRange(bLegislative)[BEG];\n\n return threshold;\n}\n\n\n","//\n// DRA-SPECIFIC RATINGS (\"SCORES\")\n//\n\nimport * as C from './dra-config';\nimport {Normalizer} from '../rate/normalize';\nimport {avgSVError} from '../partisan/method';\nimport * as T from '../types/all'\n\n\n// RATE POPULATION DEVIATION\n\nexport function ratePopulationDeviation(rawDeviation: number, bLegislative: boolean): number\n{\n const _normalizer = new Normalizer(rawDeviation);\n\n // Raw range in not inverted (i.e., smaller is better)\n const range = C.popdevRange(bLegislative);\n\n _normalizer.clip(0.0, 1.0); // Handle deviations bigger than a whole district\n _normalizer.invert();\n _normalizer.clip(1.0 - range[C.BEG], 1.0 - range[C.END]);\n _normalizer.unitize(1.0 - range[C.BEG], 1.0 - range[C.END]);\n _normalizer.rescale();\n\n return _normalizer.normalizedNum as number;\n}\n\n\n// RATE PROPORTIONALITY\n\nexport function rateProportionality(rawDisproportionality: number, Vf: number, Sf: number): number\n{\n if (isAntimajoritarian(Vf, Sf))\n {\n return 0;\n }\n else\n {\n // Adjust bias to incorporate an acceptable winner's bonus based on Vf\n const extra = extraBonus(Vf);\n const adjusted = adjustDeviation(Vf, rawDisproportionality, extra);\n\n // Then normalize\n const _normalizer = new Normalizer(adjusted);\n\n const worst = C.biasRange()[C.BEG];\n const best = C.biasRange()[C.END];\n\n _normalizer.positive();\n _normalizer.clip(worst, best);\n _normalizer.unitize(worst, best);\n _normalizer.invert();\n _normalizer.rescale();\n\n const rating = _normalizer.normalizedNum as number;\n\n return rating;\n }\n}\n\nexport function extraBonus(Vf: number): number\n{\n const over50Pct = (Vf > 0.5) ? (Vf - 0.5) : (0.5 - Vf);\n const okExtra: number = over50Pct * (C.winnerBonus() - 1.0);\n\n return okExtra; // No longer trimming the result here\n}\n\n// Adjust deviation from proportionality to account for a winner's bonus\n// * If the bias is in the *same* direction as the statewide vote %, then\n// discount the bias by the winner's bonus (extra).\n// * But if the bias and statewide vote % go in opposite directions, leave the\n// bias unadjusted.\nexport function adjustDeviation(Vf: number, disproportionality: number, extra: number): number\n{\n let adjusted: number = disproportionality;\n\n if ((Vf > 0.5) && (disproportionality < 0))\n {\n adjusted = Math.min(disproportionality + extra, 0);\n }\n else if ((Vf < 0.5) && (disproportionality > 0))\n {\n adjusted = Math.max(disproportionality - extra, 0);\n }\n\n return adjusted;\n}\n\nexport function isAntimajoritarian(Vf: number, Sf: number): boolean\n{\n const bDem = ((Vf < (0.5 - avgSVError)) && (Sf > 0.5)) ? true : false;\n const bRep = (((1 - Vf) < (0.5 - avgSVError)) && ((1 - Sf) > 0.5)) ? true : false;\n\n return bDem || bRep;\n}\n\n\n// RATE Impact == \"unearned seats\" <<< DEPRECATED\n/* \nexport function scoreImpact(rawUE: number, Vf: number, Sf: number, N: number): number\n{\n if (isAntimajoritarian(Vf, Sf))\n {\n return 0;\n }\n else\n {\n // Adjust impact to incorporate an acceptable winner's bonus based on Vf\n const extra = extraBonus(Vf);\n const adjustedBias = adjustDeviation(Vf, rawUE / N, extra);\n const adjustedImpact = adjustedBias * N;\n\n // Then normalize\n const _normalizer = new Normalizer(adjustedImpact);\n\n const worst = C.unearnedThreshold();\n const best = 0.0;\n\n _normalizer.positive();\n _normalizer.clip(worst, best);\n _normalizer.unitize(worst, best);\n _normalizer.invert();\n _normalizer.rescale();\n\n const score = _normalizer.normalizedNum as number;\n\n return score;\n }\n}\n*/\n\n\n// RATE Partisan Bias -- an ancillary rating\n\nexport function ratePartisanBias(rawSeatsBias: number, rawVotesBias: number): number\n{\n // NOTE - John Nagle specified these thresholds\n const seatsBiasRating = normalizePartisanBias(rawSeatsBias, 0.06);\n const votesBiasRating = normalizePartisanBias(rawVotesBias, 0.02);\n\n const partisanBiasRating = Math.round((seatsBiasRating + votesBiasRating) / 2);\n\n return partisanBiasRating;\n}\n\n// NOTE - John Nagle specified this function vs. simple linear normalization\nfunction normalizePartisanBias(biasPct: number, pctAt50: number): number \n{\n const b: number = pctAt50 / Math.log(1 / 2);\n const rating: number = 100 * Math.exp(-Math.abs(biasPct / b));\n\n return Math.round(rating);\n}\n\n\n// RATE COMPETITIVENESS\n\n// Normalize overall competitiveness - Raw values are in the range [0.0–1.0]. \n// But the practical max is more like 3/4's, so unitize that range to [0.0–1.0].\n// Then scale the values to [0–100].\nexport function rateCompetitiveness(rawCdf: number): number\n{\n const _normalizer = new Normalizer(rawCdf);\n\n let worst = C.overallCompetitivenessRange()[C.BEG];\n let best = C.overallCompetitivenessRange()[C.END];\n\n _normalizer.clip(worst, best);\n _normalizer.unitize(worst, best);\n _normalizer.rescale();\n\n const rating = _normalizer.normalizedNum as number;\n\n return rating;\n}\n\n\n// RATE MINORITY REPRESENTATION\n\n// NOTE - The probable # of opportunity & coalition districts can be *larger* than\n// what would be a proportional # based on the statewide percentage, because of\n// how minority opportunities are estimated (so that 37% minority shares score\n// like 52% share).\nexport function rateMinorityRepresentation(rawOd: number, pOd: number, rawCd: number, pCd: number): number\n{\n // Score minority opportunity [0–100]\n const cDWeight = C.coalitionDistrictWeight();\n\n // Cap opportunity & coalition districts\n const oDCapped = Math.min(rawOd, pOd);\n const cdCapped = Math.min(rawCd, pCd);\n\n const opportunityScore = (pOd > 0) ? Math.round((oDCapped / pOd) * 100) : 0;\n const coalitionScore = (pCd > 0) ? Math.round((cdCapped / pCd) * 100) : 0;\n\n const rating = Math.round(Math.min(opportunityScore + cDWeight * Math.max(coalitionScore - opportunityScore, 0), 100));\n\n return rating;\n}\n\n\n// RATE COMPACTNESS\n\nexport function rateReock(rawValue: number): number\n{\n const _normalizer = new Normalizer(rawValue);\n\n const worst = C.reockRange()[C.BEG];\n const best = C.reockRange()[C.END];\n\n _normalizer.clip(worst, best);\n _normalizer.unitize(worst, best);\n _normalizer.rescale();\n\n return _normalizer.normalizedNum as number;\n}\n\nexport function ratePolsby(rawValue: number): number\n{\n const _normalizer = new Normalizer(rawValue);\n\n const worst = C.polsbyRange()[C.BEG];\n const best = C.polsbyRange()[C.END];\n\n _normalizer.clip(worst, best);\n _normalizer.unitize(worst, best);\n _normalizer.rescale();\n\n return _normalizer.normalizedNum as number;\n}\n\nexport function rateCompactness(rS: number, ppS: number): number\n{\n const rW = C.reockWeight();\n const ppW = C.polsbyWeight();\n\n const rating = Math.round(((rS * rW) + (ppS * ppW)) / (rW + ppW));\n\n return rating;\n}\n\n\n// RATE SPLITTING\n\nexport const maxSplitting: number = 1.20; // 90–10 => 95–5 splits\nexport const minSplitting: number = 1.00; // No splits still vs. 97–03 splits\nexport const worstMultiplier: number = 1.33; // 1/3 bigger\n\n// =LAMBDA(n, m, most, least, (((MIN(n, m) - 1) / MAX(n, m)) * most) + ((1 - ((MIN(n, m) - 1) / MAX(n, m))) * least))\nexport function bestTarget(n: number, m: number): number \n{\n const more: number = Math.max(n, m);\n const less: number = Math.min(n, m);\n\n const w1: number = ((less - 1) / more);\n const w2: number = 1 - w1;\n\n const target: number = (w1 * maxSplitting) + (w2 * minSplitting);\n\n return target;\n}\n\n// Rating county- & district-splitting are inverses of each other.\n// Sometimes counties >> districts; sometimes counties << districts.\n\nexport function rateCountySplitting(rawCountySplitting: number, nCounties: number, nDistricts: number): number\n{\n const _normalizer = new Normalizer(rawCountySplitting);\n\n // The practical ideal raw measurement depends on the # of counties & districts\n const best = (nCounties > nDistricts) ? bestTarget(nCounties, nDistricts) : maxSplitting;\n const worst = best * worstMultiplier;\n\n _normalizer.clip(best, worst);\n _normalizer.unitize(best, worst);\n _normalizer.invert();\n _normalizer.rescale();\n\n // 09-07-21 - Preserve max value (100) for only when no counties are split\n let rating = _normalizer.normalizedNum as number;\n if ((rating == 100) && (rawCountySplitting > 1.0)) rating = 100 - 1;\n\n return rating;\n}\n\nexport function rateDistrictSplitting(rawDistrictSplitting: number, nCounties: number, nDistricts: number): number\n{\n const _normalizer = new Normalizer(rawDistrictSplitting);\n\n // The practical ideal raw measurement depends on the # of counties & districts\n const best = (nCounties > nDistricts) ? maxSplitting : bestTarget(nCounties, nDistricts);\n const worst = best * worstMultiplier;\n\n _normalizer.clip(best, worst);\n _normalizer.unitize(best, worst);\n _normalizer.invert();\n _normalizer.rescale();\n\n // 09-07-21 - Preserve max value (100) for only when no districts are split\n let rating = _normalizer.normalizedNum as number;\n if ((rating == 100) && (rawDistrictSplitting > 1.0)) rating = 100 - 1;\n\n return rating;\n}\n\nexport function rateSplitting(csS: number, dsS: number): number\n{\n const csW = C.countySplittingWeight();\n const dsW = C.districtSplittingWeight();\n\n let rating = Math.round(((csS * csW) + (dsS * dsW)) / (csW + dsW));\n\n // Preserve max value (100) for only when no districts are split.\n // The max county- or district-splitting rating is 99 when there are splits.\n if ((rating == 100) && ((csS < 100) || (dsS < 100))) rating = 100 - 1;\n\n return rating;\n}\n\n// RATE SPLITTING - Legacy routines for original splitting ratings that didn't handle state legislative maps properly\n\nexport function rateCountySplittingLegacy(rawCountySplitting: number, nCounties: number, nDistricts: number, bLD: boolean = false): number\n{\n const _normalizer = new Normalizer(rawCountySplitting);\n\n // The practical ideal rating depends on the # of counties & districts\n const avgBest = countySplitBest(nCounties, nDistricts, bLD);\n const avgWorst = countySplitWorst(avgBest, bLD);\n\n _normalizer.clip(avgBest, avgWorst);\n _normalizer.unitize(avgBest, avgWorst);\n _normalizer.invert();\n _normalizer.rescale();\n\n // 09-07-21 - Preserve max value (100) for only when no counties are split\n let rating = _normalizer.normalizedNum as number;\n if ((rating == 100) && (rawCountySplitting > 1.0)) rating = 100 - 1;\n\n return rating;\n}\n\nexport function countySplitBest(nCounties: number, nDistricts: number, bLD: boolean = false): number\n{\n const districtType = (bLD) ? T.DistrictType.StateLegislative : T.DistrictType.Congressional;\n\n const practicalBest = C.countySplittingRange(districtType)[C.BEG];\n const nAllowableSplits = Math.min(nDistricts - 1, nCounties);\n const threshold = ((nAllowableSplits * practicalBest) + ((nCounties - nAllowableSplits) * 1.0)) / nCounties;\n\n return threshold;\n}\nexport function countySplitWorst(avgBest: number, bLD: boolean = false): number\n{\n const districtType = (bLD) ? T.DistrictType.StateLegislative : T.DistrictType.Congressional;\n\n const singleBest = C.countySplittingRange(districtType)[C.BEG];\n const singleWorst = C.countySplittingRange(districtType)[C.END];\n\n // The practical ideal score depends on the # of counties & districts\n const avgWorst = avgBest * (singleWorst / singleBest);\n\n return avgWorst;\n}\n\nexport function rateDistrictSplittingLegacy(rawDistrictSplitting: number, bLD: boolean = false): number\n{\n const districtType = (bLD) ? T.DistrictType.StateLegislative : T.DistrictType.Congressional;\n\n const _normalizer = new Normalizer(rawDistrictSplitting);\n\n const best = C.districtSplittingRange(districtType)[C.BEG];\n const worst = C.districtSplittingRange(districtType)[C.END];\n\n _normalizer.clip(best, worst);\n _normalizer.unitize(best, worst);\n _normalizer.invert();\n _normalizer.rescale();\n\n // 09-07-21 - Preserve max value (100) for only when no districts are split\n let rating = _normalizer.normalizedNum as number;\n if ((rating == 100) && (rawDistrictSplitting > 1.0)) rating = 100 - 1;\n\n return rating;\n}\n\nexport function rateSplittingLegacy(csS: number, dsS: number): number\n{\n const csW = C.countySplittingWeight();\n const dsW = C.districtSplittingWeight();\n\n const rating = Math.round(((csS * csW) + (dsS * dsW)) / (csW + dsW));\n\n return rating;\n}\n\nexport function adjustSplittingRating(rating: number, rawCountySplitting: number, rawDistrictSplitting: number): number\n{\n // 09-07-21 - Preserve max value (100) for only when no districts are split\n if ((rating == 100) && ((rawCountySplitting > 1.0) || (rawDistrictSplitting > 1.0))) rating = 100 - 1;\n\n return rating;\n}\n\n// END\n","//\n// NORMALIZATION UTILITIES\n//\n\nimport * as S from './settings';\n\nexport const enum DecayFn\n{\n Gravity // Decay as the square of distance\n}\n\nexport class Normalizer\n{\n rawNum: number;\n wipNum: number;\n normalizedNum?: number;\n\n constructor(rawValue: number)\n {\n this.rawNum = rawValue;\n this.wipNum = this.rawNum;\n }\n\n // *Don't* transform the input.\n identity(): number\n {\n return this.wipNum;\n }\n positive(): number\n {\n this.wipNum = Math.abs(this.wipNum);\n\n return this.wipNum;\n }\n // Invert a value in the unit range [0.0–1.0] (so that bigger is better).\n invert(): number\n {\n console.assert(((this.wipNum >= 0.0) && (this.wipNum <= 1.0)), \"Inverting: \" + S.OUT_OF_RANGE_MSG, this.wipNum);\n\n this.wipNum = 1.0 - this.wipNum;\n\n return this.wipNum;\n }\n // Constrain the value to be within a specified range.\n clip(begin_range: number, end_range: number): number\n {\n // Handle the ends of the range being given either order\n const min_range = Math.min(begin_range, end_range);\n const max_range = Math.max(begin_range, end_range);\n\n this.wipNum = Math.max(Math.min(this.wipNum, max_range), min_range);\n\n return this.wipNum;\n }\n // Recast the value as the delta from a baseline value. NOOP if it is zero.\n // NOTE - Values can be + or -.\n rebase(base: number): number\n {\n this.wipNum = this.wipNum - base;\n\n return this.wipNum;\n }\n // Re-scale a value into the [0.0 – 1.0] range, using a given range.\n // NOTE - This assumes that values have alrady been clipped into the range.\n unitize(begin_range: number, end_range: number): number\n {\n const min_range = Math.min(begin_range, end_range);\n const max_range = Math.max(begin_range, end_range)\n\n console.assert(((this.wipNum >= min_range) && (this.wipNum <= max_range)), \"Unitizing: \" + S.OUT_OF_RANGE_MSG, this.wipNum);\n\n const ranged = this.wipNum - min_range;\n this.wipNum = Math.abs(ranged / (end_range - begin_range));\n\n return this.wipNum;\n }\n // Decay a value in the unit range [0.0–1.0] by its distance from zero.\n // NOTE - If the range is already such that \"bigger is better,\" then the closer\n // the value is to 1.0 (the best) the *less* it will decay.\n decay(fn: DecayFn = DecayFn.Gravity): number\n {\n console.assert(((this.wipNum >= 0.0) && (this.wipNum <= 1.0)), \"Decaying: \" + S.OUT_OF_RANGE_MSG, this.wipNum);\n\n switch (fn)\n {\n case DecayFn.Gravity: {\n this.wipNum = Math.pow(this.wipNum, S.DISTANCE_WEIGHT);\n\n return this.wipNum;\n }\n default: {\n throw new Error(\"Decay function not recognized.\");\n }\n }\n }\n // Translate a value in the unit range to the user-friendly range [0 – 100].\n rescale(): number\n {\n console.assert(((this.wipNum >= 0.0) && (this.wipNum <= 1.0)), \"Rescaling: \" + S.OUT_OF_RANGE_MSG, this.wipNum);\n\n this.normalizedNum = Math.round(this.wipNum * S.NORMALIZED_RANGE);\n\n return this.normalizedNum;\n }\n}\n","//\n// CONSTANTS - related to rating\n//\n\n\n// Normalized scores [0-100]\nexport const NORMALIZED_RANGE: number = 100;\n\n// Square deviations from the ideal\nexport const DISTANCE_WEIGHT: number = 2;\n\n// Out of range message\nexport const OUT_OF_RANGE_MSG: string = \"%f out of range\";\n\n","// Export everything here -- restrict package exports in all/splitting.ts\n\nexport * from './county-district';\nexport * from './coi';\nexport * from './utils';","//\n// COI SPLITTING -- using Sam Wang's metrics\n//\n\nimport * as T from '../types/all';\nimport * as U from './utils';\n\n\nexport function uncertaintyOfMembership(splits: number[]): number \n{\n // 07-29-21 -- Filter out 0% splits\n const intermediate: number[] = splits.filter(x => x > 0).map(x => x * Math.log2(x));\n let result: number = -1 * intermediate.reduce((accumulator, currentValue) => accumulator + currentValue);\n if (U.isMinusZero(result)) result = 0;\n return result;\n}\n\nexport function effectiveSplits(splits: number[]): number \n{\n // 07-29-21 -- Filter out 0% splits\n const intermediate: number[] = splits.filter(x => x > 0).map(x => x ** 2);\n let result: number = (1 / intermediate.reduce((accumulator, currentValue) => accumulator + currentValue)) - 1;\n if (U.isMinusZero(result)) result = 0;\n return result;\n}\n\n\n// CLI & OTHER USERS \n\nexport function calcCOISplitting(communities: T.COISplits[]): T.COISplittingJSONReady\n{\n let byCOI: T.COISplitting[] = [];\n\n for (let coi of communities)\n {\n const es: number = effectiveSplits(coi.splits);\n const u: number = uncertaintyOfMembership(coi.splits);\n\n const entry: T.COISplitting = {\n name: coi.name,\n effectiveSplits: es,\n uncertainty: u\n }\n\n byCOI.push(entry);\n }\n\n const analysis: T.COISplittingJSONReady = {\n byCOI: byCOI\n }\n\n return analysis;\n}","//\n// COUNTY-DISTRICT SPLITTING -- building on Moon Duchin's work\n//\n\nimport * as T from '../types/all';\nimport * as U from '../utils/all';\n\n\nexport function makeSplittingScorecard(CxD: T.CountyProfile, bLog: boolean = false): T.SplittingScorecard\n{\n const dT = totalDistricts(CxD);\n const cT = totalCounties(CxD);\n const county: number = _calcCountySplittingReduced(CxD, dT, cT);\n const district: number = _calcDistrictSplittingReduced(CxD, dT, cT);\n\n const s: T.SplittingScorecard = {\n county: county,\n district: district,\n details: {} // None\n // score?: \n }\n\n return s;\n}\n\n\n// CALCULATE ENHANCED SQRT ENTROPY METRIC -- INTERNAL FUNCTIONS\n\nexport function _calcCountySplittingReduced(CxD: T.CxD, districtTotals: number[], countyTotals: number[], bLD: boolean = false): number\n{\n const rC = reduceCSplits(CxD, districtTotals);\n const f = calcCountyFractions(rC, countyTotals);\n const w = calcCountyWeights(countyTotals);\n\n const rawSqEnt_DC = countySplitting(f, w);\n\n return rawSqEnt_DC;\n}\n\nexport function _calcCountySplitting(CxD: T.CxD, countyTotals: number[], bLog: boolean = false): number\n{\n const f = calcCountyFractions(CxD, countyTotals);\n const w = calcCountyWeights(countyTotals);\n const SqEnt_DC = countySplitting(f, w, bLog);\n\n return SqEnt_DC;\n}\n\nexport function _calcDistrictSplittingReduced(CxD: T.CxD, districtTotals: number[], countyTotals: number[], bLD: boolean = false): number\n{\n const rD = reduceDSplits(CxD, countyTotals)\n const g = calcDistrictFractions(rD, districtTotals);\n const x = calcDistrictWeights(districtTotals);\n\n const rawSqEnt_CD = districtSplitting(g, x);\n\n return rawSqEnt_CD;\n}\n\nexport function _calcDistrictSplitting(CxD: T.CxD, districtTotals: number[], bLog: boolean = false): number\n{\n const g = calcDistrictFractions(CxD, districtTotals);\n const x = calcDistrictWeights(districtTotals);\n const SqEnt_CD = districtSplitting(g, x, bLog);\n\n return SqEnt_CD;\n}\n\n\n// HELPERS\n\nexport function totalCounties(CxD: T.CxD): number[]\n{\n const nC = CxD[0].length;\n const nD = CxD.length;\n let cT: number[] = U.initArray(nC, 0);\n\n for (let j = 0; j < nC; j++)\n {\n for (let i = 0; i < nD; i++)\n {\n cT[j] += CxD[i][j];\n }\n }\n\n return cT;\n}\n\nexport function totalDistricts(CxD: T.CxD): number[]\n{\n const nC = CxD[0].length;\n const nD = CxD.length;\n let dT: number[] = U.initArray(nD, 0);\n\n for (let i = 0; i < nD; i++)\n {\n for (let j = 0; j < nC; j++)\n {\n dT[i] += CxD[i][j];\n }\n }\n\n return dT;\n}\n\n// NOTE - The county-district splits and the county & district totals may all,\n// in general, be fractional/decimal numbers as opposed to integers, due to\n// dissaggregation & re-aggregation. Hence, comparisons need to approximate\n// equality.\n\n// Consolidate *whole districts* (w/in one county) UP into dummy district 0,\n// county by county.\nexport function reduceCSplits(CxD: T.CxD, districtTotals: number[]): number[][]\n{\n // Create the reduced template\n let CxDreducedC: number[][] = U.deepCopy(CxD);\n const nC = CxDreducedC[0].length;\n const vRow: number[] = U.initArray(nC, 0);\n CxDreducedC.unshift(vRow);\n const nD = CxDreducedC.length;\n\n for (let j = 0; j < nC; j++)\n {\n // Skip the virtual district 0\n for (let i = 1; i < nD; i++)\n {\n let split_total = CxDreducedC[i][j];\n\n if (split_total > 0)\n {\n if (U.areRoughlyEqual(split_total, districtTotals[i - 1], U.EQUAL_TOLERANCE))\n {\n CxDreducedC[0][j] += split_total;\n CxDreducedC[i][j] = 0;\n }\n }\n }\n }\n\n return CxDreducedC;\n}\n\n// Consolidate *whole counties* (w/in one district) LEFT into the dummy county 0,\n// district by district.\nexport function reduceDSplits(CxD: T.CxD, countyTotals: number[]): number[][]\n{\n // Create the reduced template\n let CxDreducedD: number[][] = U.deepCopy(CxD);\n CxDreducedD.map(row => row.unshift(0));\n const nC = CxDreducedD[0].length;\n const nD = CxDreducedD.length;\n\n for (let i = 0; i < nD; i++)\n {\n // Skip the virtual county 0\n for (let j = 1; j < nC; j++)\n {\n let split_total = CxDreducedD[i][j];\n\n if (split_total > 0)\n {\n if (U.areRoughlyEqual(split_total, countyTotals[j - 1], U.EQUAL_TOLERANCE))\n {\n CxDreducedD[i][0] += split_total;\n CxDreducedD[i][j] = 0;\n }\n }\n }\n }\n\n return CxDreducedD;\n}\n\nexport function calcCountyWeights(countyTotals: number[]): number[]\n{\n let nC: number = countyTotals.length;\n let cTotal: number = U.sumArray(countyTotals);\n\n let w: number[] = U.initArray(nC, 0.0);\n\n for (let j = 0; j < nC; j++)\n {\n w[j] = countyTotals[j] / cTotal;\n }\n\n return w;\n}\n\nexport function calcDistrictWeights(districtTotals: number[]): number[]\n{\n let nD = districtTotals.length;\n let dTotal: number = U.sumArray(districtTotals);\n\n let x: number[] = U.initArray(nD, 0.0);\n\n for (let i = 0; i < nD; i++)\n {\n x[i] = districtTotals[i] / dTotal;\n }\n\n return x;\n}\n\nexport function calcCountyFractions(CxD: T.CxD, countyTotals: number[]): number[][]\n{\n let nD = CxD.length;\n let nC = CxD[0].length;\n\n let f: number[][] = new Array(nD).fill(0.0).map(() => new Array(nC).fill(0.0));\n\n for (let j = 0; j < nC; j++)\n {\n for (let i = 0; i < nD; i++)\n {\n if (countyTotals[j] > 0)\n {\n f[i][j] = CxD[i][j] / countyTotals[j];\n }\n else\n {\n f[i][j] = 0.0;\n }\n }\n }\n\n return f;\n}\n\nexport function calcDistrictFractions(CxD: T.CxD, districtTotals: number[]): number[][]\n{\n let nD = CxD.length;\n let nC = CxD[0].length;\n\n let g: number[][] = new Array(nD).fill(0.0).map(() => new Array(nC).fill(0.0));\n\n for (let j = 0; j < nC; j++)\n {\n for (let i = 0; i < nD; i++)\n {\n if (districtTotals[i] > 0)\n {\n g[i][j] = CxD[i][j] / districtTotals[i];\n }\n else\n {\n g[i][j] = 0.0;\n }\n }\n }\n\n return g;\n}\n\nexport function splitScore(splits: number[]): number\n{\n let e: number;\n\n if (splits.length > 0)\n {\n e = U.sumArray(splits.map(Math.sqrt))\n }\n else\n {\n e = 1.0;\n }\n\n return e;\n}\n\n// For all districts in a county, sum the split score.\nexport function countySplitScore(j: number, f: number[][], bLog: boolean = false): number\n{\n const numD = f.length;\n let splits: number[] = [];\n\n for (let i = 0; i < numD; i++)\n {\n splits.push(f[i][j]);\n }\n\n const score = splitScore(splits);\n\n return score;\n}\n\n// For all counties, sum the weighted county splits.\nexport function countySplitting(f: number[][], w: number[], bLog: boolean = false): number\n{\n const numC = f[0].length;\n\n let e = 0.0;\n\n for (let j = 0; j < numC; j++)\n {\n let splitScore = countySplitScore(j, f, bLog);\n e += w[j] * splitScore;\n\n if (bLog) console.log(\"County splitting =\", j, w[j], splitScore, e);\n }\n\n return e;\n}\n\n// For all counties in a district, sum the split score.\nexport function districtSplitScore(i: number, g: number[][], bLog: boolean = false): number\n{\n const numC = g[0].length;\n let splits: number[] = [];\n\n for (let j = 0; j < numC; j++)\n {\n splits.push(g[i][j]);\n }\n\n const score = splitScore(splits);\n\n return score;\n}\n\n// For all districts, sum the weighted district splits.\nexport function districtSplitting(g: number[][], x: number[], bLog: boolean = false): number\n{\n const numD = g.length;\n\n let e = 0.0;\n\n for (let i = 0; i < numD; i++)\n {\n let splitScore = districtSplitScore(i, g, bLog);\n e += x[i] * splitScore;\n\n if (bLog) console.log(\"District split score =\", i, x[i], splitScore, e);\n }\n\n return e;\n}\n\n\n// CLI & OTHER USERS\n\nexport function calcSplitting(CxD: T.CxD): T.SplittingJSONReady\n{\n const dT = totalDistricts(CxD);\n const cT = totalCounties(CxD);\n const county: number = _calcCountySplittingReduced(CxD, dT, cT);\n const district: number = _calcDistrictSplittingReduced(CxD, dT, cT);\n\n const out: T.SplittingJSONReady = {\n county: county,\n district: district,\n }\n\n return out;\n}\n\n","export function isMinusZero(value: number)\n{\n return 1 / value === -Infinity;\n}","export * from './array';\nexport * from './general';\nexport * from './settings';","//\n// ARRAY UTILITIES\n//\n\nimport * as U from './general';\n\nexport function sumArray(arr: number[]): number\n{\n return arr.reduce((a, b) => a + b, 0);\n}\n\nexport function avgArray(arr: number[]): number\n{\n return (arr.reduce((a, b) => a + b, 0)) / arr.length;\n}\n\nexport function minArray(arr: number[]): number\n{\n return Math.min(...arr);\n}\n\nexport function maxArray(arr: number[]): number\n{\n return Math.max(...arr);\n}\n\n// Modified from https://jsfiddle.net/Lucky500/3sy5au0c/\n// NOTE - Copy the array, because arr.sort() sorts in place!\nexport function medianArray(arr: number[]): number\n{\n if (arr.length === 0) return 0;\n\n let copyArr = U.deepCopy(arr);\n\n copyArr.sort(function (a: number, b: number)\n {\n return a - b;\n });\n\n var half = Math.floor(copyArr.length / 2);\n\n if (copyArr.length % 2)\n return copyArr[half];\n\n return (copyArr[half - 1] + copyArr[half]) / 2.0;\n}\n\nexport function initArray(n: number, value: any): any[]\n{\n return Array.from(Array(n), () => value);\n}\n\nexport function isArrayEmpty(a: any[]): boolean\n{\n if (a === undefined || a.length == 0) return true;\n\n return false;\n}\n\nexport function keyExists(k: any, o: object): boolean\n{\n return k in o;\n}\n\nexport function isObjectEmpty(o: object): boolean\n{\n return Object.keys(o).length === 0;\n}","//\n// GENERAL UTILITIES\n//\n\n// Deal with decimal census \"counts\" due to disagg/re-agg\nexport function areRoughlyEqual(x: number, y: number, tolerance: number): boolean\n{\n let delta = Math.abs(x - y);\n let result = (delta < tolerance) ? true : false;\n\n return result;\n}\n\nexport function deepCopy(src: any): any\n{\n if (Array.isArray(src))\n {\n let dst: any[] = [];\n\n for (let i: number = 0; i < src.length; i++)\n dst.push(deepCopy(src[i]));\n return dst;\n }\n else if (typeof src === 'object')\n {\n let dst: any = {};\n for (var p in src) if (src.hasOwnProperty(p))\n dst[p] = deepCopy(src[p]);\n return dst;\n }\n else\n return src;\n}","//\n// GLOBAL CONSTANTS\n//\n\n// A small delta to use when testing ranges of values\nexport const EPSILON = 1 / Math.pow(10, 6);\n\n// \"Roughly equal\" = average census block size / 2\nexport const AVERAGE_BLOCK_SIZE = 30;\nexport const EQUAL_TOLERANCE: number = AVERAGE_BLOCK_SIZE / 2;","module.exports = require(\"@dra2020/baseclient\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(\"./lib/all/all.ts\");\n",""],"names":[],"sourceRoot":""}
|
|
@@ -12,6 +12,7 @@ export declare function estGeometricSeatsBias(Vf: number, dSVpoints: T.SVpoint[]
|
|
|
12
12
|
export declare function inferGeometricSeatsBiasPoints(dSVpoints: T.SVpoint[], rSVpoints: T.SVpoint[]): T.SVpoint[];
|
|
13
13
|
export declare function invertSVPoints(inferredSVpoints: T.SVpoint[]): T.SVpoint[];
|
|
14
14
|
export declare function calcEfficiencyGap(Vf: number, Sf: number, shareType?: T.Party): number;
|
|
15
|
+
export declare function calcEfficiencyGapPrime(Vf: number, Sf: number, R: number | undefined): number | undefined;
|
|
15
16
|
export declare function calcMeanMedianDifference(VfArray: T.VfArray, Vf?: number): number;
|
|
16
17
|
export declare function keyRVpoints(VfArray: T.VfArray): T.rVpoints;
|
|
17
18
|
export declare function isASweep(Sf: number, nDistricts: number): boolean;
|
package/lib/partisan/bias.ts
CHANGED
|
@@ -262,6 +262,21 @@ export function calcEfficiencyGap(Vf: number, Sf: number, shareType = T.Party.De
|
|
|
262
262
|
return efficiencyGap;
|
|
263
263
|
}
|
|
264
264
|
|
|
265
|
+
// For illustration purposes only
|
|
266
|
+
// Assumes Democratic vote shares
|
|
267
|
+
// Alternate specification with winner's bonus (R) heuristic built in:
|
|
268
|
+
// - By convention, '+' = R bias; '-' = D bias
|
|
269
|
+
// - If 1 <= R <= 2, EG is undefined (no/acceptable bias).
|
|
270
|
+
export function calcEfficiencyGapPrime(Vf: number, Sf: number, R: number | undefined): number | undefined
|
|
271
|
+
{
|
|
272
|
+
let EG = undefined;
|
|
273
|
+
|
|
274
|
+
if (R && ((R > 2) || (R < 1)))
|
|
275
|
+
EG = (2.0 * (Vf - 0.5)) - (Sf - 0.5);
|
|
276
|
+
|
|
277
|
+
return EG;
|
|
278
|
+
}
|
|
279
|
+
|
|
265
280
|
// MEAN–MEDIAN DIFFERENCE
|
|
266
281
|
//
|
|
267
282
|
// From PlanScore.org: "The mean-median difference is a party’s median vote share
|
|
@@ -409,7 +424,7 @@ export function calcLopsidedOutcomes(VfArray: T.VfArray): number | undefined
|
|
|
409
424
|
//
|
|
410
425
|
// * gSym is the area of asymmetry between the two curves.
|
|
411
426
|
// * The choice of what base to normalize it by is somewhat arbitrary.
|
|
412
|
-
// * We actually only infer the S–V
|
|
427
|
+
// * We actually only infer the S–V curve over the range [0.25–0.75] <<< 101 points (not 100!)
|
|
413
428
|
// * But dividing by 100 normalizes the area of asymmetry to the area of the SxV unit square.
|
|
414
429
|
export function calcGlobalSymmetry(dSVpoints: T.SVpoint[], rSVpoints: T.SVpoint[], S50V: number): number
|
|
415
430
|
{
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dra2020/dra-analytics",
|
|
3
|
-
"version": "3.3.
|
|
3
|
+
"version": "3.3.3",
|
|
4
4
|
"description": "DRA analytics",
|
|
5
5
|
"main": "dist/dra-analytics.js",
|
|
6
6
|
"types": "./dist/lib/all/all.d.ts",
|
|
@@ -43,27 +43,27 @@
|
|
|
43
43
|
"homepage": "https://github.com/dra2020/dra-analytics#readme",
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"@types/geojson": "^7946.0.8",
|
|
46
|
-
"@types/jest": "^27.0.
|
|
46
|
+
"@types/jest": "^27.0.3",
|
|
47
47
|
"@types/node": "^12.20.20",
|
|
48
48
|
"@types/yargs": "^16.0.4",
|
|
49
49
|
"csv-parse": "^4.16.0",
|
|
50
|
-
"jest": "^27.
|
|
50
|
+
"jest": "^27.4.3",
|
|
51
51
|
"json-loader": "^0.5.7",
|
|
52
52
|
"prettier": "^2.3.2",
|
|
53
53
|
"shapefile": "^0.6.6",
|
|
54
54
|
"source-map-loader": "^3.0.0",
|
|
55
|
-
"ts-jest": "^27.
|
|
56
|
-
"ts-loader": "^9.2.
|
|
55
|
+
"ts-jest": "^27.1.1",
|
|
56
|
+
"ts-loader": "^9.2.6",
|
|
57
57
|
"tsify": "^5.0.4",
|
|
58
58
|
"tslint": "^6.1.3",
|
|
59
59
|
"tslint-config-prettier": "^1.18.0",
|
|
60
|
-
"typescript": "^4.
|
|
61
|
-
"webpack": "^5.
|
|
62
|
-
"webpack-cli": "^4.
|
|
60
|
+
"typescript": "^4.5.2",
|
|
61
|
+
"webpack": "^5.65.0",
|
|
62
|
+
"webpack-cli": "^4.9.1",
|
|
63
63
|
"yargs": "^17.1.1"
|
|
64
64
|
},
|
|
65
65
|
"dependencies": {
|
|
66
|
-
"@dra2020/baseclient": "^1.0.
|
|
66
|
+
"@dra2020/baseclient": "^1.0.67",
|
|
67
67
|
"geojson": "^0.5.0"
|
|
68
68
|
}
|
|
69
|
-
}
|
|
69
|
+
}
|