triangle-utils 1.0.4 → 1.0.7

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/clients.js ADDED
@@ -0,0 +1,23 @@
1
+
2
+ import nodemailer from "nodemailer"
3
+ import { DynamoDB } from "@aws-sdk/client-dynamodb"
4
+
5
+ export default function get_clients(config) {
6
+ const clients = {}
7
+ if (config.region !== undefined) {
8
+ clients.dynamodb = new DynamoDB({ region : config.region })
9
+ }
10
+ if (config.google_email !== undefined && config.google_app_password) {
11
+ clients.transporter = nodemailer.createTransport({
12
+ service: "Gmail",
13
+ host: "smtp.gmail.com",
14
+ port: 465,
15
+ secure: true,
16
+ auth: {
17
+ user: config.google_email,
18
+ pass: config.google_app_password,
19
+ }
20
+ })
21
+ }
22
+ return clients
23
+ }
package/index.js CHANGED
@@ -1,12 +1,16 @@
1
- import * as utils_dynamodb from "./dynamodb.js"
2
1
 
3
- import { DynamoDB } from "@aws-sdk/client-dynamodb"
2
+
3
+ import * as utils_dynamodb from "./utils/dynamodb.js"
4
+ import * as utils_misc from "./misc.js"
5
+ import get_clients from "./clients.js"
4
6
 
5
7
  export default function get_utils(config) {
8
+ const clients = get_clients(config)
6
9
  const utils = {}
7
- const dynamodb = new DynamoDB({ region : config.region })
8
- for (const [util_name, util] of Object.entries(utils_dynamodb)) {
9
- utils[util_name] = async (...args) => await util(dynamodb, ...args)
10
+ for (const utils_list of [utils_misc, utils_dynamodb]) {
11
+ for (const [util_name, util] of Object.entries(utils_list)) {
12
+ utils[util_name] = async (...args) => await util(clients, ...args)
13
+ }
10
14
  }
11
15
  return utils
12
16
  }
package/misc.js ADDED
@@ -0,0 +1,95 @@
1
+ import election_ids from "./utils/election_ids.js"
2
+ import crypto from "crypto"
3
+
4
+ export async function wait(clients, duration) {
5
+ return new Promise(resolve => setTimeout(resolve, duration))
6
+ }
7
+
8
+ export function get_current_time(clients, milliseconds = false) {
9
+ if (milliseconds) {
10
+ return (new Date()).getTime()
11
+ }
12
+ return (new Date()).toISOString()
13
+ }
14
+
15
+ export async function send_email(clients, recipient, subject, text) {
16
+ for (let i = 0; i < 3; i++) {
17
+ try {
18
+ await clients.transporter.sendMail({
19
+ from: config.alerts_email,
20
+ to: recipient,
21
+ subject: subject,
22
+ text: text
23
+ })
24
+ return
25
+ } catch (error) {
26
+ console.log("EMAIL ERROR", error)
27
+ }
28
+ }
29
+ }
30
+
31
+ export async function admin_alert(clients, text) {
32
+ console.log("ADMIN ALERT:", text)
33
+ await send_email(config.google_email, "ADMIN ALERT", text)
34
+ }
35
+
36
+ export async function safe_run(clients, f) {
37
+ try {
38
+ await f()
39
+ } catch (error) {
40
+ if (error.stack !== undefined) {
41
+ await admin_alert(error.stack.toString())
42
+ } else {
43
+ await admin_alert(error.toString())
44
+ }
45
+
46
+ }
47
+ }
48
+
49
+ export async function iterate(clients, inputs, f, concurrency = 1, print_indices = false) {
50
+ let index = 0
51
+ let iterators = []
52
+ for (let i = 0; i < concurrency; i++) {
53
+ iterators.push((async () => {
54
+ while (index < inputs.length) {
55
+ index += 1
56
+ if (print_indices) {
57
+ console.log(i + ":" + (index - 1) + "/" + inputs.length)
58
+ }
59
+ await safe_run(clients, () => f(inputs[index - 1]))
60
+ }
61
+ })())
62
+ }
63
+ await Promise.all(iterators)
64
+ }
65
+
66
+ const text_encoder = new TextEncoder()
67
+
68
+ export async function sha256(clients, input) {
69
+ const input_buffer = text_encoder.encode(input);
70
+
71
+ const hash_buffer = await crypto.subtle.digest("SHA-256", input_buffer)
72
+
73
+ const hash_array = Array.from(new Uint8Array(hash_buffer))
74
+
75
+ const hash = hash_array.map(b => b.toString(16).padStart(2, "0")).join("")
76
+ return hash;
77
+ }
78
+
79
+ export function get_election_id(clients, year, office, state, district) {
80
+ if (year === undefined || office === undefined || state === undefined || office === "P") {
81
+ return undefined
82
+ }
83
+ if (office === "H" && (district === undefined || district.length !== 2)) {
84
+ return undefined
85
+ }
86
+ if (year.length !== 4 || office.length !== 1 || state.length !== 2) {
87
+ return undefined
88
+ }
89
+ const office_name = { "H" : "house", "S" : "sen", "P" : "pres" }[office]
90
+ const election_id = year + "-" + office_name + "-" + state.toLowerCase() + (office === "H" ? ("-" + district.toLowerCase()) : "") + "-election"
91
+ if (!election_ids.has(election_id)) {
92
+ return undefined
93
+ }
94
+ return election_id
95
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "triangle-utils",
3
- "version": "1.0.4",
3
+ "version": "1.0.7",
4
4
  "main": "index.js",
5
5
  "author": "",
6
6
  "license": "ISC",
package/states.js ADDED
@@ -0,0 +1,256 @@
1
+ const states = {
2
+ "al": {
3
+ "name": "Alabama",
4
+ "party": "REP",
5
+ "shape": "M799.6,566.8l-1.6-15.2l-2.7-18.8l0.2-14.1l0.8-31l-0.2-16.7l0.2-6.4l7.8-0.4l27.8-2.6l8.9-0.7 l-0.1,2.2l0.2,2.1l0.6,3.4l3.4,7.9l2.4,9.9l1.5,6.1l1.6,4.8l1.5,7l2.1,6.3l2.6,3.4l0.5,3.4l1.9,0.8l0.2,2.1l-1.8,4.8l-0.5,3.2 l-0.2,1.9l1.6,4.4l0.3,5.3l-0.8,2.4l0.6,0.8l1.5,0.8l1,2.5h-6.3l-6.8,0.6l-25.5,2.9l-10.4,1.4l-0.1,3.8l1.8,1.8l2.6,1.9l0.6,7.9 l-5.5,2.6l-2.7-0.3l2.7-1.9v-1l-3.1-6l-2.3-0.6l-1.5,4.4l-1.3,2.7l-0.6-0.2H799.6z"
6
+ },
7
+ "ak": {
8
+ "name": "Alaska",
9
+ "party": "REP",
10
+ "shape": "M332.1,553.7l-0.3,85.4l1.6,1l3.1,0.2l1.5-1.1h2.6l0.2,2.9l7,6.8l0.5,2.6l3.4-1.9l0.6-0.2l0.3-3.1 l1.5-1.6l1.1-0.2l1.9-1.5l3.1,2.1l0.6,2.9l1.9,1.1l1.1,2.4l3.9,1.8l3.4,6l2.7,3.9l2.3,2.7l1.5,3.7l5,1.8l5.2,2.1l1,4.4l0.5,3.1 l-1,3.4l-1.8,2.3l-1.6-0.8l-1.5-3.1l-2.7-1.5l-1.8-1.1l-0.8,0.8l1.5,2.7l0.2,3.7l-1.1,0.5l-1.9-1.9l-2.1-1.3l0.5,1.6l1.3,1.8 l-0.8,0.8c0,0-0.8-0.3-1.3-1c-0.5-0.6-2.1-3.4-2.1-3.4l-1-2.3c0,0-0.3,1.3-1,1c-0.6-0.3-1.3-1.5-1.3-1.5l1.8-1.9l-1.5-1.5v-5h-0.8 l-0.8,3.4l-1.1,0.5l-1-3.7l-0.6-3.7l-0.8-0.5l0.3,5.7v1.1l-1.5-1.3l-3.6-6l-2.1-0.5l-0.6-3.7l-1.6-2.9l-1.6-1.1v-2.3l2.1-1.3 l-0.5-0.3l-2.6,0.6l-3.4-2.4l-2.6-2.9l-4.8-2.6l-4-2.6l1.3-3.2v-1.6l-1.8,1.6l-2.9,1.1l-3.7-1.1l-5.7-2.4h-5.5l-0.6,0.5l-6.5-3.9 l-2.1-0.3l-2.7-5.8l-3.6,0.3l-3.6,1.5l0.5,4.5l1.1-2.9l1,0.3l-1.5,4.4l3.2-2.7l0.6,1.6l-3.9,4.4l-1.3-0.3l-0.5-1.9l-1.3-0.8 l-1.3,1.1l-2.7-1.8l-3.1,2.1l-1.8,2.1l-3.4,2.1l-4.7-0.2l-0.5-2.1l3.7-0.6v-1.3l-2.3-0.6l1-2.4l2.3-3.9v-1.8l0.2-0.8l4.4-2.3l1,1.3 h2.7l-1.3-2.6l-3.7-0.3l-5,2.7l-2.4,3.4l-1.8,2.6l-1.1,2.3l-4.2,1.5l-3.1,2.6l-0.3,1.6l2.3,1l0.8,2.1l-2.7,3.2l-6.5,4.2l-7.8,4.2 l-2.1,1.1l-5.3,1.1l-5.3,2.3l1.8,1.3l-1.5,1.5l-0.5,1.1l-2.7-1l-3.2,0.2l-0.8,2.3h-1l0.3-2.4l-3.6,1.3l-2.9,1l-3.4-1.3l-2.9,1.9 h-3.2l-2.1,1.3l-1.6,0.8l-2.1-0.3l-2.6-1.1l-2.3,0.6l-1,1l-1.6-1.1v-1.9l3.1-1.3l6.3,0.6l4.4-1.6l2.1-2.1l2.9-0.6l1.8-0.8l2.7,0.2 l1.6,1.3l1-0.3l2.3-2.7l3.1-1l3.4-0.6l1.3-0.3l0.6,0.5h0.8l1.3-3.7l4-1.5l1.9-3.7l2.3-4.5l1.6-1.5l0.3-2.6l-1.6,1.3l-3.4,0.6 l-0.6-2.4l-1.3-0.3l-1,1l-0.2,2.9l-1.5-0.2l-1.5-5.8l-1.3,1.3l-1.1-0.5l-0.3-1.9l-4,0.2l-2.1,1.1l-2.6-0.3l1.5-1.5l0.5-2.6 l-0.6-1.9l1.5-1l1.3-0.2l-0.6-1.8v-4.4l-1-1l-0.8,1.5h-6.1l-1.5-1.3l-0.6-3.9l-2.1-3.6v-1l2.1-0.8l0.2-2.1l1.1-1.1l-0.8-0.5 l-1.3,0.5l-1.1-2.7l1-5l4.5-3.2l2.6-1.6l1.9-3.7l2.7-1.3l2.6,1.1l0.3,2.4l2.4-0.3l3.2-2.4l1.6,0.6l1,0.6h1.6l2.3-1.3l0.8-4.4 c0,0,0.3-2.9,1-3.4c0.6-0.5,1-1,1-1l-1.1-1.9l-2.6,0.8l-3.2,0.8l-1.9-0.5l-3.6-1.8l-5-0.2l-3.6-3.7l0.5-3.9l0.6-2.4l-2.1-1.8 l-1.9-3.7l0.5-0.8l6.8-0.5h2.1l1,1h0.6l-0.2-1.6l3.9-0.6l2.6,0.3l1.5,1.1l-1.5,2.1l-0.5,1.5l2.7,1.6l5,1.8l1.8-1l-2.3-4.4l-1-3.2 l1-0.8l-3.4-1.9l-0.5-1.1l0.5-1.6l-0.8-3.9l-2.9-4.7l-2.4-4.2l2.9-1.9h3.2l1.8,0.6l4.2-0.2l3.7-3.6l1.1-3.1l3.7-2.4l1.6,1l2.7-0.6 l3.7-2.1l1.1-0.2l1,0.8l4.5-0.2l2.7-3.1h1.1l3.6,2.4l1.9,2.1l-0.5,1.1l0.6,1.1l1.6-1.6l3.9,0.3l0.3,3.7l1.9,1.5l7.1,0.6l6.3,4.2 l1.5-1l5.2,2.6l2.1-0.6l1.9-0.8l4.8,1.9L332.1,553.7z M217,582.6l2.1,5.3l-0.2,1l-2.9-0.3l-1.8-4l-1.8-1.5H210l-0.2-2.6l1.8-2.4 l1.1,2.4l1.5,1.5L217,582.6z M214.4,616.1l3.7,0.8l3.7,1l0.8,1l-1.6,3.7l-3.1-0.2l-3.4-3.6L214.4,616.1z M193.7,602l1.1,2.6 l1.1,1.6l-1.1,0.8l-2.1-3.1V602H193.7z M180,675.1l3.4-2.3l3.4-1l2.6,0.3l0.5,1.6l1.9,0.5l1.9-1.9l-0.3-1.6l2.7-0.6l2.9,2.6 l-1.1,1.8l-4.4,1.1l-2.7-0.5l-3.7-1.1l-4.4,1.5l-1.6,0.3L180,675.1z M228.9,670.6l1.6,1.9l2.1-1.6l-1.5-1.3L228.9,670.6z M231.8,673.6l1.1-2.3l2.1,0.3l-0.8,1.9H231.8z M255.4,671.7l1.5,1.8l1-1.1l-0.8-1.9L255.4,671.7z M264.2,659.2l1.1,5.8l2.9,0.8 l5-2.9l4.4-2.6l-1.6-2.4l0.5-2.4l-2.1,1.3l-2.9-0.8l1.6-1.1l1.9,0.8l3.9-1.8l0.5-1.5l-2.4-0.8l0.8-1.9l-2.7,1.9l-4.7,3.6l-4.8,2.9 L264.2,659.2z M306.5,639.4l2.4-1.5l-1-1.8l-1.8,1L306.5,639.4z"
11
+ },
12
+ "az": {
13
+ "name": "Arizona",
14
+ "party": "NON",
15
+ "shape": "M311.7,487.5l-2.6,2.2l-0.3,1.5l0.5,1l18.9,10.7l12.1,7.6l14.7,8.6l16.8,10l12.3,2.4l25.1,2.7 l2.5-12.5l3.8-27.2l7-52.9l4.3-31l-24.6-3.7l-27.2-4.6l-33.4-6.3l-2.9,18.1l-0.5,0.5l-1.7,2.6l-2.5-0.1l-1.3-2.7l-2.7-0.3l-0.9-1.1 h-0.9l-0.9,0.6l-1.9,1l-0.1,7l-0.2,1.7l-0.6,12.6l-1.5,2.2l-0.6,3.3l2.7,4.9l1.3,5.8l0.8,1l1,0.6l-0.1,2.3l-1.6,1.4l-3.4,1.7 l-1.9,1.9l-1.5,3.7l-0.6,4.9l-2.9,2.7l-2.1,0.7l-0.1,5.8l-0.5,1.7l0.5,0.8l3.7,0.6l-0.6,2.7l-1.5,2.2L311.7,487.5z"
16
+ },
17
+ "ar": {
18
+ "name": "Arkansas",
19
+ "party": "REP",
20
+ "shape": "M765,445l-3.8,0.9l-6.2-0.5l0.7-3l3.2-2.7l0.5-2.3l-1.8-3l-11,0.5l-20.8,0.9l-23.3,0.7L679,437 l1.6,6.9v8.2l1.4,11l0.2,37.8l2.3,1.9l3-1.4l2.7,1.1l0.4,10.3l22.9-0.1l18.9-0.8l10.1-0.2l1.1-2.1l-0.3-3.5l-1.8-3l1.6-1.5 l-1.6-2.5l0.7-2.5l1.4-5.6l2.5-2.1l-0.7-2.3l3.7-5.4l2.7-1.4l-0.1-1.5l-0.3-1.8l2.9-5.6l2.4-1.3l0.4-3.4l1.8-1.2l0.9-4.2l-1.3-4 l4-2.4l0.6-2l1.2-4.3L765,445z"
21
+ },
22
+ "ca": {
23
+ "name": "California",
24
+ "party": "DEM",
25
+ "shape": "M310.7,486.8l3.8-0.5l1.5-2l0.7-1.9l-3.2-0.1l-1.1-1.8l0.8-1.7l0-6.2l2.2-1.3l2.7-2.6l0.4-4.9 l1.6-3.5l1.9-2.1l3.3-1.7l1.3-0.7l0.8-1.5l-0.9-0.9l-1-1.5l-0.9-5.3l-2.9-5.2l0.1-2.8l-2.2-3.2l-15-23.2l-19.4-28.7l-22.4-33 l-12.7-19.5l1.8-7.2l6.8-25.9l8.1-31.4l-12.4-3.3l-13.5-3.4l-12.6-4.1l-7.5-2.1l-11.4-3l-7.1-2.4l-1.6,4.7l-0.2,7.4l-5.2,11.8 l-3.1,2.6l-0.3,1.1l-1.8,0.8l-1.5,4.2l-0.8,3.2l2.7,4.2l1.6,4.2l1.1,3.6l-0.3,6.5l-1.8,3.1l-0.6,5.8l-1,3.7l1.8,3.9l2.7,4.5 l2.3,4.8l1.3,4l-0.3,3.2l-0.3,0.5v2.1l5.7,6.3l-0.5,2.4l-0.6,2.3l-0.6,1.9l0.2,8.2l2.1,3.7l1.9,2.6l2.7,0.5l1,2.7l-1.1,3.6 l-2.1,1.6h-1.1l-0.8,3.9l0.5,2.9l3.2,4.4l1.6,5.3l1.5,4.7l1.3,3.1l3.4,5.8l1.5,2.6l0.5,2.9l1.6,1v2.4l-0.8,1.9l-1.8,7.1l-0.5,1.9 l2.4,2.7l4.2,0.5l4.5,1.8l3.9,2.1h2.9l2.9,3.1l2.6,4.8l1.1,2.3l3.9,2.1l4.8,0.8l1.5,2.1l0.6,3.2l-1.5,0.6l0.3,1l3.2,0.8l2.7,0.2 l2.9,4.7l3.9,4.2l0.8,2.3l2.6,4.2l0.3,3.2v9.4l0.5,1.8l10,1.5l19.7,2.7L310.7,486.8z M222.8,437l1.3,1.5l-0.2,1.3l-3.2-0.1 l-0.6-1.2l-0.6-1.5L222.8,437z M224.7,437l1.2-0.6l3.6,2.1l3.1,1.2l-0.9,0.6l-4.5-0.2l-1.6-1.6L224.7,437z M245.4,456.8l1.8,2.3 l0.8,1l1.5,0.6l0.6-1.5l-1-1.8l-2.7-2l-1.1,0.2V456.8z M244,465.5l1.8,3.2l1.2,1.9l-1.5,0.2l-1.3-1.2c0,0-0.7-1.5-0.7-1.9 s0-2.2,0-2.2L244,465.5z"
26
+ },
27
+ "co": {
28
+ "name": "Colorado",
29
+ "party": "DEM",
30
+ "shape": "M552.6,356.8l1.4-21.3l-32.1-3.1l-24.5-2.7l-37.3-4.1l-20.7-2.5l-2.6,22.2l-3.2,22.4l-3.8,28 l-1.5,11.1l-0.3,2.8l33.9,3.8l37.7,4.3l32,3.2l16.6,0.8"
31
+ },
32
+ "ct": {
33
+ "name": "Connecticut",
34
+ "party": "DEM",
35
+ "shape": "M1047.2,280.1l-0.6-4.2l-0.8-4.4l-1.6-6l-4.2,0.9l-21.8,4.8l0.6,3.3l1.5,7.3v8.1l-1.1,2.3l1.8,2.1 l5-3.4l3.6-3.2l1.9-2.1l0.8,0.6l2.7-1.5l5.2-1.1L1047.2,280.1z"
36
+ },
37
+ "de": {
38
+ "name": "Delaware",
39
+ "party": "DEM",
40
+ "shape": "M996.4,330.4l0.6-2.1l0-1.2l-1.3-0.1l-2.1,1.6l-1.5,1.5l1.5,4.2l2.3,5.7l2.1,9.7l1.6,6.3l5-0.2 l6.1-1.2l-2.3-7.4l-1,0.5l-3.6-2.4l-1.8-4.7l-1.9-3.6l-2.3-1l-2.1-3.6L996.4,330.4z"
41
+ },
42
+ "fl": {
43
+ "name": "Florida",
44
+ "party": "REP",
45
+ "shape": "M929.4,545.5l2.3,7.3l3.7,9.7l5.3,9.4l3.7,6.3l4.8,5.5l4,3.7l1.6,2.9l-1.1,1.3L953,593l2.9,7.4 l2.9,2.9l2.6,5.3l3.6,5.8l4.5,8.2l1.3,7.6l0.5,12l0.6,1.8l-0.3,3.4l-2.4,1.3l0.3,1.9l-0.6,1.9l0.3,2.4l0.5,1.9l-2.7,3.2l-3.1,1.5 l-3.9,0.2l-1.5,1.6l-2.4,1l-1.3-0.5l-1.1-1l-0.3-2.9l-0.8-3.4l-3.4-5.2l-3.6-2.3l-3.9-0.3l-0.8,1.3l-3.1-4.4l-0.6-3.6l-2.6-4 l-1.8-1.1l-1.6,2.1l-1.8-0.3l-2.1-5l-2.9-3.9l-2.9-5.3l-2.6-3.1l-3.6-3.7l2.1-2.4l3.2-5.5l-0.2-1.6l-4.5-1l-1.6,0.6l0.3,0.6l2.6,1 l-1.5,4.5l-0.8,0.5l-1.8-4l-1.3-4.8l-0.3-2.7l1.5-4.7v-9.5L910,585l-1.3-3.1l-5.2-1.3l-1.9-0.6l-1.6-2.6l-3.4-1.6l-1.1-3.4l-2.7-1 l-2.4-3.7l-4.2-1.5l-2.9-1.5h-2.6l-4,0.8l-0.2,1.9l0.8,1l-0.5,1.1l-3.1-0.2l-3.7,3.6l-3.6,1.9h-3.9l-3.2,1.3l-0.3-2.7l-1.6-1.9 l-2.9-1.1l-1.6-1.5l-8.1-3.9l-7.6-1.8l-4.4,0.6l-6,0.5l-6,2.1l-3.5,0.6l-0.2-8l-2.6-1.9l-1.8-1.8l0.3-3.1l10.2-1.3l25.5-2.9 l6.8-0.6l5.4,0.3l2.6,3.9l1.5,1.5l8.1,0.5l10.8-0.6l21.5-1.3l5.4-0.7l4.6,0l0.2,2.9l3.8,0.8l0.3-4.8l-1.6-4.5l1-0.7l5.1,0.5 L929.4,545.5z M941.9,677.9l2.4-0.6l1.3-0.2l1.5-2.3l2.3-1.6l1.3,0.5l1.7,0.3l0.4,1.1l-3.5,1.2l-4.2,1.5l-2.3,1.2L941.9,677.9z M955.4,672.9l1.2,1.1l2.7-2.1l5.3-4.2l3.7-3.9l2.5-6.6l1-1.7l0.2-3.4l-0.7,0.5l-1,2.8l-1.5,4.6l-3.2,5.3l-4.4,4.2l-3.4,1.9 L955.4,672.9z"
46
+ },
47
+ "ga": {
48
+ "name": "Georgia",
49
+ "party": "NON",
50
+ "shape": "M863.6,458l-4.8,0.8l-8.4,1.1l-8.6,0.9v2.2l0.2,2.1l0.6,3.4l3.4,7.9l2.4,9.9l1.5,6.1l1.6,4.8l1.5,7 l2.1,6.3l2.6,3.4l0.5,3.4l1.9,0.8l0.2,2.1l-1.8,4.8l-0.5,3.2l-0.2,1.9l1.6,4.4l0.3,5.3l-0.8,2.4l0.6,0.8l1.5,0.8l0.6,3.4l2.6,3.9 l1.5,1.5l7.9,0.2l10.8-0.6l21.5-1.3l5.4-0.7l4.6,0l0.2,2.9l2.6,0.8l0.3-4.4l-1.6-4.5l1.1-1.6l5.8,0.8l5,0.3l-0.8-6.3l2.3-10 l1.5-4.2l-0.5-2.6l3.3-6.2l-0.5-1.4l-1.9,0.7l-2.6-1.3l-0.6-2.1l-1.3-3.6l-2.3-2.1l-2.6-0.6l-1.6-4.8l-2.9-6.3l-4.2-1.9l-2.1-1.9 l-1.3-2.6l-2.1-1.9l-2.3-1.3l-2.3-2.9l-3.1-2.3l-4.5-1.8l-0.5-1.5l-2.4-2.9l-0.5-1.5l-3.4-4.9l-3.4,0.2l-4.1-3l-1.3-1.3l-0.3-1.8 l0.8-1.9l2.4-1.2l-1.1-1.2l0.1-0.3l-5.8,1l-7,0.8L863.6,458z"
51
+ },
52
+ "hi": {
53
+ "name": "Hawaii",
54
+ "party": "DEM",
55
+ "shape": "M407.1,619.3l1.9-3.6l2.3-0.3l0.3,0.8l-2.1,3.1H407.1z M417.3,615.6l6.1,2.6l2.1-0.3l1.6-3.9 l-0.6-3.4l-4.2-0.5l-4,1.8L417.3,615.6z M448,625.6l3.7,5.5l2.4-0.3l1.1-0.5l1.5,1.3l3.7-0.2l1-1.5l-2.9-1.8l-1.9-3.7l-2.1-3.6 l-5.8,2.9L448,625.6z M468.2,634.5l1.3-1.9l4.7,1l0.6-0.5l6.1,0.6l-0.3,1.3l-2.6,1.5l-4.4-0.3L468.2,634.5z M473.5,639.7l1.9,3.9 l3.1-1.1l0.3-1.6l-1.6-2.1l-3.7-0.3V639.7z M480.5,638.5l2.3-2.9l4.7,2.4l4.4,1.1l4.4,2.7v1.9l-3.6,1.8l-4.8,1l-2.4-1.5 L480.5,638.5z M497.1,654.1l1.6-1.3l3.4,1.6l7.6,3.6l3.4,2.1l1.6,2.4l1.9,4.4l4,2.6l-0.3,1.3l-3.9,3.2l-4.2,1.5l-1.5-0.6l-3.1,1.8 l-2.4,3.2l-2.3,2.9l-1.8-0.2l-3.6-2.6l-0.3-4.5l0.6-2.4l-1.6-5.7l-2.1-1.8l-0.2-2.6l2.3-1l2.1-3.1l0.5-1l-1.6-1.8L497.1,654.1z"
56
+ },
57
+ "id": {
58
+ "name": "Idaho",
59
+ "party": "REP",
60
+ "shape": "M336.1,281c-22.6-4.3-14.1-2.8-21.1-4.4l4.4-17.5l4.3-17.7l1.4-4.2l2.5-5.9l-1.3-2.3l-2.5,0.1 l-0.8-1l0.5-1.1l0.3-3.1l4.5-5.5l1.8-0.5l1.1-1.1l0.6-3.2l0.9-0.7l3.9-5.8l3.9-4.3l0.2-3.8l-3.4-2.6l-1.3-4.4l0.4-9.7l3.7-16.5 l4.5-20.8l3.8-13.5l0.8-3.8l13,2.5l-4.2,21.5l2.9,7.7l-1.1,4.6l2,4.6l3.2,1.7l4.5,9.8l2.7,3.8l0.6,1.1l3.4,1.1l0.5,2.5l-6.9,16.8 l0.3,3.3l2.7,2.9l1.9,0.5l4.8-3.6l0.4-0.5l0.2,0.8l0.3,4.1l2.6,12.9l3.5,2.7l0.4,0.8l2.1,2.4l-0.8,2.8l0.7,3.8l1.9,0.9l2.1-1.6 l2.6-0.5l3.4,1.6l2.5-0.6l3.8-0.2l4,1.6l2.7-0.3l0.9-2.3l2.5-1.6l0.7,1.7l0.6,2.2l2.3,2.5l-3.8,24l-5.1,29l-4.2-0.3l-8.2-1.5 l-9.8-1.8l-12.2-2.4l-12.5-2.5l-8.5-1.8l-9.3-1.7L336.1,281z"
61
+ },
62
+ "il": {
63
+ "name": "Illinois",
64
+ "party": "DEM",
65
+ "shape": "M791.8,401.6V398l0.3-4.9l2.4-3.1l1.8-3.8l2.6-3.9l-0.4-5.3l-2-3.5l-0.1-3.3l0.7-5.3l-0.8-7.2 l-1.1-15.8l-1.3-15l-0.9-11.6l-0.3-0.9l-0.8-2.6l-1.3-3.7l-1.6-1.8l-1.5-2.6l-0.2-5.5l-9.9,1.3l-27.2,1.7l-8.7-0.4l0.2,2.4l2.3,0.7 l0.9,1.1l0.5,1.8l3.9,3.4l0.7,2.3l-0.7,3.4l-1.8,3.7l-0.7,2.5l-2.3,1.8l-1.8,0.7l-5.3,1.4l-0.7,1.8L736,330l0.7,1.4l1.8,1.6 l-0.2,4.1l-1.8,1.6l-0.7,1.6v2.7l-1.8,0.5l-1.6,1.1l-0.2,1.4l0.2,2.1l-1.7,1.3l-1,2.8l0.5,3.7l2.3,7.3l7.3,7.5l5.5,3.7l-0.2,4.3 l0.9,1.4l6.4,0.5l2.7,1.4l-0.7,3.7l-2.3,5.9l-0.7,3.2l2.3,3.9l6.4,5.3l4.6,0.7l2.1,5l2.1,3.2l-0.9,3l1.6,4.1l1.8,2.1l1.9-0.8 l0.7-2.2l2-1.4l3.2-1.1l3.1,1.2l2.9,1.1l0.8-0.2l-0.1-1.2l-1.1-2.8l0.4-2.4l2.3-1.6l2.4-1l1.2-0.4l-0.6-1.3l-0.8-2.2l1.2-1.3 L791.8,401.6z"
66
+ },
67
+ "in": {
68
+ "name": "Indiana",
69
+ "party": "REP",
70
+ "shape": "M792.4,400.9l0.1-2.9l0.5-4.5l2.3-2.9l1.8-3.9l2.6-4.2l-0.5-5.8l-1.8-2.7l-0.3-3.2l0.8-5.5l-0.5-7 l-1.3-16l-1.3-15.4l-1-11.7l3.1,0.9l1.5,1l1.1-0.3l2.1-1.9l2.8-1.6l5.1-0.2l22-2.3l5.6-0.5l1.5,16l4.3,36.8l0.6,5.8L843,371 l1.2,1.8l0.1,1.4l-2.5,1.6l-3.5,1.6l-3.2,0.6l-0.6,4.9l-4.6,3.3l-2.8,4l0.3,2.4l-0.6,1.5h-3.3l-1.6-1.6l-2.5,1.3l-2.7,1.5l0.2,3.1 l-1.2,0.3l-0.5-1l-2.2-1.5l-3.3,1.3l-1.6,3l-1.4-0.8l-1.5-1.6l-4.5,0.5l-5.6,1L792.4,400.9z"
71
+ },
72
+ "ia": {
73
+ "name": "Iowa",
74
+ "party": "REP",
75
+ "shape": "M740.6,301.6l0.2,1.9l2.3,1.1l1.1,1.3l0.3,1.3l3.9,3.2l0.7,2.2l-0.8,2.9l-1.5,3.5l-0.8,2.7 l-2.2,1.6l-1.7,0.6l-5.5,1.5l-0.7,2.3l-0.8,2.3l0.6,1.4l1.7,1.7l0,3.7l-2.2,1.6l-0.5,1.5v2.5l-1.5,0.5l-1.7,1.4l-0.5,1.5l0.5,1.7 l-1.4,1.2l-2.3-2.7l-1.5-2.6l-8.3,0.8l-10.2,0.6l-25,0.7l-13,0.2l-9.4,0.2l-1.3,0.1l-1.7-4.5l-0.2-6.6l-1.6-4.1l-0.7-5.3l-2.3-3.7 l-0.9-4.8l-2.7-7.5l-1.1-5.4l-1.4-2.2l-1.6-2.7l1.8-4.3l1.4-5.7l-2.7-2.1l-0.5-2.7l0.9-2.5h1.7h11.5l49.6-0.7l19.9-0.7l1.9,2.7 l1.8,2.6l0.5,0.8l-1.8,2.7l0.5,4.2l2.5,3.9l3,1.8l2.4,0.2L740.6,301.6z"
76
+ },
77
+ "ks": {
78
+ "name": "Kansas",
79
+ "party": "REP",
80
+ "shape": "M677.4,425.1l-12.6,0.2l-46.1-0.5l-44.6-2.1l-24.6-1.3l4.1-64.7l21.8,0.8l40.5,1.4l44.1,0.5h5.1 l3.2,3.2l2.8,0.2l0.9,1.1v2l-1.8,1.6l-0.5,2.6l2.2,3.6l2.5,3.1l2.5,2l1.1,11.2L677.4,425.1z"
81
+ },
82
+ "ky": {
83
+ "name": "Kentucky",
84
+ "party": "REP",
85
+ "shape": "M895.8,397.8l-2.3,2.7l-4.2,3.6L885,410l-1.8,1.8v2.1l-3.9,2.1l-5.7,3.4l-3.5,0.4l-51.9,4.9 l-15.8,1.8l-4.6,0.5l-3.9,0l-0.2,4.2l-8.2,0.1l-7,0.6l-10.4,0.2l1.9-0.2l2.2-1.8l2.1-1.1l0.2-3.2l0.9-1.8l-1.6-2.5l0.8-1.9l2.3-1.8 l2.1-0.6l2.7,1.3l3.6,1.3l1.1-0.3l0.2-2.3l-1.3-2.4l0.3-2.3l1.9-1.5l2.6-0.6l1.6-0.6l-0.8-1.8l-0.6-1.9l1.1-0.8l1.1-3.3l3-1.7 l5.8-1l3.6-0.5l1.5,1.9l1.8,0.8l1.8-3.2l2.9-1.5l1.9,1.6l0.8,1.1l2.1-0.5l-0.2-3.4l2.9-1.6l1.1-0.8l1.1,1.6h4.7l0.8-2.1l-0.3-2.3 l2.9-3.6l4.7-3.9l0.5-4.5l2.7-0.3l3.9-1.8l2.7-1.9l-0.3-1.9l-1.5-1.5l0.6-2.2l4.1-0.2l2.4-0.8l2.9,1.6l1.6,4.4l5.8,0.3l1.8,1.8 l2.1,0.2l2.4-1.5l3.1,0.5l1.3,1.5l2.7-2.6l1.8-1.3h1.6l0.6,2.7l1.8,1l2.4,2.2l0.2,5.5l0.8,1.6l2.6,1.5l0.6,2.3l2.9,3.7l2.6,2.7 L895.8,397.8z"
86
+ },
87
+ "la": {
88
+ "name": "Louisiana",
89
+ "party": "REP",
90
+ "shape": "M776.2,573l-1-2.6l-1.1-3.1l-3.3-3.5l0.9-6.8l-0.1-1.1l-1.3,0.3l-8.2,0.9l-25,0.5l-0.7-2.4l0.9-8.5 l3.3-5.9l5-8.7l-0.6-2.4l1.3-0.7l0.5-2l-2.3-2.1l-0.1-1.9l-1.8-4.3l-0.5-5.9l-9.7,0.1l-19.2,0.9l-22.2,0l0,9.6l0.7,9.4l0.7,3.9 l2.5,4.1l0.9,5l4.3,5.5l0.2,3.2l0.7,0.7l-0.7,8.5l-3,5l1.6,2.1l-0.7,2.5l-0.7,7.3l-1.4,3.2l0.1,3.6l4.7-1.5l8.1-0.3l10.3,3.6 l6.5,1.1l3.7-1.5l3.2,1.1l3.2,1l0.8-2.1l-3.2-1.1l-2.6,0.5l-2.7-1.6c0,0,0.2-1.3,0.8-1.5c0.6-0.2,3.1-1,3.1-1l1.8,1.5l1.8-1 l3.2,0.6l1.5,2.4l0.3,2.3l4.5,0.3l1.8,1.8l-0.8,1.6l-1.3,0.8l1.6,1.6l8.4,3.6l3.6-1.3l1-2.4l2.6-0.6l1.8-1.5l1.3,1l0.8,2.9 l-2.3,0.8l0.6,0.6l3.4-1.3l2.3-3.4l0.8-0.5l-2.1-0.3l0.8-1.6l-0.2-1.5l2.1-0.5l1.1-1.3l0.6,0.8c0,0-0.2,3.1,0.6,3.1 c0.8,0,4.2,0.6,4.2,0.6l4,1.9l1,1.5h2.9l1.1,1l2.3-3.1v-1.5h-1.3l-3.4-2.7l-5.8-0.8l-3.2-2.3l1.1-2.7l2.3,0.3l0.2-0.6l-1.8-1v-0.5 h3.2l1.8-3.1l-1.3-1.9l-0.3-2.7l-1.5,0.2l-1.9,2.1l-0.6,2.6l-3.1-0.6l-1-1.8l1.8-1.9l2-1.8L776.2,573z"
91
+ },
92
+ "me": {
93
+ "name": "Maine",
94
+ "party": "DEM",
95
+ "shape": "M1097.2,177.3l1.9,2.1l2.3,3.7v1.9l-2.1,4.7l-1.9,0.6l-3.4,3.1l-4.8,5.5c0,0-0.6,0-1.3,0 c-0.6,0-1-2.1-1-2.1l-1.8,0.2l-1,1.5l-2.4,1.5l-1,1.5l1.6,1.5l-0.5,0.6l-0.5,2.7l-1.9-0.2v-1.6l-0.3-1.3l-1.5,0.3l-1.8-3.2 l-2.1,1.3l1.3,1.5l0.3,1.1l-0.8,1.3l0.3,3.1l0.2,1.6l-1.6,2.6l-2.9,0.5l-0.3,2.9l-5.3,3.1l-1.3,0.5l-1.6-1.5l-3.1,3.6l1,3.2 l-1.5,1.3l-0.2,4.4l-1.1,6.3l-2.5-1.2l-0.5-3.1l-3.9-1.1l-0.3-2.7l-7.3-23.4l-4.2-13.6l1.4-0.1l1.5,0.4v-2.6l0.8-5.5l2.6-4.7l1.5-4 l-1.9-2.4v-6l0.8-1l0.8-2.7l-0.2-1.5l-0.2-4.8l1.8-4.8l2.9-8.9l2.1-4.2h1.3l1.3,0.2v1.1l1.3,2.3l2.7,0.6l0.8-0.8v-1l4-2.9l1.8-1.8 l1.5,0.2l6,2.4l1.9,1l9.1,29.9h6l0.8,1.9l0.2,4.8l2.9,2.3h0.8l0.2-0.5l-0.5-1.1L1097.2,177.3z M1076.3,207.5l1.5-1.5l1.4,1.1 l0.6,2.4l-1.7,0.9L1076.3,207.5z M1083,201.6l1.8,1.9c0,0,1.3,0.1,1.3-0.2s0.2-2,0.2-2l0.9-0.8l-0.8-1.8l-2,0.7L1083,201.6z"
96
+ },
97
+ "md": {
98
+ "name": "Maryland",
99
+ "party": "DEM",
100
+ "shape": "M1011,355.3l-6.1,1.3l-5.8,0.2l-1.8-7.1l-2.1-9.7l-2.3-5.7l-1.3-4.4l-7.5,1.6l-14.9,2.8l-37.5,7.6 l1.1,5l1,5.7l0.3-0.3l2.1-2.4l2.3-2.6l2.4-0.6l1.5-1.5l1.8-2.6l1.3,0.6l2.9-0.3l2.6-2.1l2-1.5l1.8-0.5l1.6,1.1l2.9,1.5l1.9,1.8 l1.2,1.5l4.1,1.7v2.9l5.5,1.3l1.1,0.5l1.4-2l2.9,2l-1.3,2.5l-0.8,4l-1.8,2.6v2.1l0.6,1.8l5.1,1.4l4.3-0.1l3.1,1l2.1,0.3l1-2.1 l-1.5-2.1v-1.8l-2.4-2.1l-2.1-5.5l1.3-5.3l-0.2-2.1l-1.3-1.3c0,0,1.5-1.6,1.5-2.3c0-0.6,0.5-2.1,0.5-2.1l1.9-1.3l1.9-1.6l0.5,1 l-1.5,1.6l-1.3,3.7l0.3,1.1l1.8,0.3l0.5,5.5l-2.1,1l0.3,3.6l0.5-0.2l1.1-1.9l1.6,1.8l-1.6,1.3l-0.3,3.4l2.6,3.4l3.9,0.5l1.6-0.8 l3.2,4.2l1.4,0.5l6.7-2.8l2-4L1011,355.3z M994.3,364.3l1.1,2.5l0.2,1.8l1.1,1.9c0,0,0.9-0.9,0.9-1.2c0-0.3-0.7-3.1-0.7-3.1 l-0.7-2.3L994.3,364.3z"
101
+ },
102
+ "ma": {
103
+ "name": "Massachusetts",
104
+ "party": "DEM",
105
+ "shape": "M1074,273.9l2.2-0.7l0.5-1.7l1,0.1l1,2.3l-1.3,0.5l-3.9,0.1L1074,273.9z M1064.6,274.7l2.3-2.6h1.6 l1.8,1.5l-2.4,1l-2.2,1L1064.6,274.7z M1029.8,252.7l17.5-4.2l2.3-0.6l2.1-3.2l3.7-1.7l2.9,4.4l-2.4,5.2l-0.3,1.5l1.9,2.6l1.1-0.8 h1.8l2.3,2.6l3.9,6l3.6,0.5l2.3-1l1.8-1.8l-0.8-2.7l-2.1-1.6l-1.5,0.8l-1-1.3l0.5-0.5l2.1-0.2l1.8,0.8l1.9,2.4l1,2.9l0.3,2.4 l-4.2,1.5l-3.9,1.9l-3.9,4.5l-1.9,1.5v-1l2.4-1.5l0.5-1.8l-0.8-3.1l-2.9,1.5l-0.8,1.5l0.5,2.3l-2.1,1l-2.7-4.5l-3.4-4.4l-2.1-1.8 l-6.5,1.9l-5.1,1.1l-21.8,4.8l-0.4-4.9l0.6-10.6l5.2-0.9L1029.8,252.7z"
106
+ },
107
+ "mi": {
108
+ "name": "Michigan",
109
+ "party": "NON",
110
+ "shape": "M755.6,182.1l1.8-2.1l2.2-0.8l5.4-3.9l2.3-0.6l0.5,0.5l-5.1,5.1l-3.3,1.9l-2.1,0.9L755.6,182.1z M841.8,214.2l0.6,2.5l3.2,0.2l1.3-1.2c0,0-0.1-1.5-0.4-1.6c-0.3-0.2-1.6-1.9-1.6-1.9l-2.2,0.2l-1.6,0.2l-0.3,1.1L841.8,214.2z M871.9,277.2l-3.2-8.2l-2.3-9.1l-2.4-3.2l-2.6-1.8l-1.6,1.1l-3.9,1.8l-1.9,5l-2.7,3.7l-1.1,0.6l-1.5-0.6c0,0-2.6-1.5-2.4-2.1 c0.2-0.6,0.5-5,0.5-5l3.4-1.3l0.8-3.4l0.6-2.6l2.4-1.6l-0.3-10l-1.6-2.3l-1.3-0.8l-0.8-2.1l0.8-0.8l1.6,0.3l0.2-1.6L850,231 l-1.3-2.6h-2.6l-4.5-1.5l-5.5-3.4h-2.7l-0.6,0.6l-1-0.5l-3.1-2.3l-2.9,1.8l-2.9,2.3l0.3,3.6l1,0.3l2.1,0.5l0.5,0.8l-2.6,0.8 l-2.6,0.3l-1.5,1.8l-0.3,2.1l0.3,1.6l0.3,5.5l-3.6,2.1l-0.6-0.2v-4.2l1.3-2.4l0.6-2.4l-0.8-0.8l-1.9,0.8l-1,4.2l-2.7,1.1l-1.8,1.9 l-0.2,1l0.6,0.8l-0.6,2.6l-2.3,0.5v1.1l0.8,2.4l-1.1,6.1l-1.6,4l0.6,4.7l0.5,1.1l-0.8,2.4l-0.3,0.8l-0.3,2.7l3.6,6l2.9,6.5l1.5,4.8 l-0.8,4.7l-1,6l-2.4,5.2l-0.3,2.7l-3.3,3.1l4.4-0.2l21.4-2.3l7.3-1l0.1,1.7l6.9-1.2l10.3-1.5l3.9-0.5l0.1-0.6l0.2-1.5l2.1-3.7 l2-1.7l-0.2-5.1l1.6-1.6l1.1-0.3l0.2-3.6l1.5-3l1.1,0.6l0.2,0.6l0.8,0.2l1.9-1L871.9,277.2z M741.5,211.2l0.7-0.6l2.7-0.8l3.6-2.3 v-1l0.6-0.6l6-1l2.4-1.9l4.4-2.1l0.2-1.3l1.9-2.9l1.8-0.8l1.3-1.8l2.3-2.3l4.4-2.4l4.7-0.5l1.1,1.1l-0.3,1l-3.7,1l-1.5,3.1 l-2.3,0.8l-0.5,2.4l-2.4,3.2l-0.3,2.6l0.8,0.5l1-1.1l3.6-2.9l1.3,1.3h2.3l3.2,1l1.5,1.1l1.5,3.1l2.7,2.7l3.9-0.2l1.5-1l1.6,1.3 l1.6,0.5l1.3-0.8h1.1l1.6-1l4-3.6l3.4-1.1l6.6-0.3l4.5-1.9l2.6-1.3l1.5,0.2v5.7l0.5,0.3l2.9,0.8l1.9-0.5l6.1-1.6l1.1-1.1l1.5,0.5v7 l3.2,3.1l1.3,0.6l1.3,1l-1.3,0.3l-0.8-0.3l-3.7-0.5l-2.1,0.6l-2.3-0.2l-3.2,1.5h-1.8l-5.8-1.3l-5.2,0.2l-1.9,2.6l-7,0.6l-2.4,0.8 l-1.1,3.1l-1.3,1.1l-0.5-0.2l-1.5-1.6l-4.5,2.4h-0.6l-1.1-1.6l-0.8,0.2l-1.9,4.4l-1,4l-3.2,7l-1.2-1l-1.4-1l-1.9-10.3l-3.5-1.4 l-2.1-2.3l-12.1-2.7l-2.9-1l-8.2-2.2l-7.9-1.1L741.5,211.2z"
111
+ },
112
+ "mn": {
113
+ "name": "Minnesota",
114
+ "party": "DEM",
115
+ "shape": "M645.9,228.5l-0.5-8.5l-1.8-7.3l-1.8-13.5l-0.5-9.8l-1.8-3.4l-1.6-5v-10.3l0.7-3.9l-1.8-5.5l30.1,0 l0.3-8.2l0.6-0.2l2.3,0.5l1.9,0.8l0.8,5.5l1.5,6.1l1.6,1.6h4.8l0.3,1.5l6.3,0.3v2.1h4.8l0.3-1.3l1.1-1.1l2.3-0.6l1.3,1h2.9l3.9,2.6 l5.3,2.4l2.4,0.5l0.5-1l1.5-0.5l0.5,2.9l2.6,1.3l0.5-0.5l1.3,0.2v2.1l2.6,1h3.1l1.6-0.8l3.2-3.2l2.6-0.5l0.8,1.8l0.5,1.3h1l1-0.8 l8.9-0.3l1.8,3.1h0.6l0.7-1.1l4.4-0.4l-0.6,2.3l-3.9,1.8l-9.2,4.1l-4.8,2l-3.1,2.6l-2.4,3.6l-2.3,3.9l-1.8,0.8l-4.5,5l-1.3,0.2 l-3.8,2.9l-2.8,3.2l-0.2,3l0.2,7.8l-1.6,1.6L704,228l-1.8,5.7l2.5,3.6l0.5,2.5l-1.1,3l-0.2,3.7l0.5,7.1l3.4,4.1h3l2.5,2.3l3.2,1.4 l3.7,5l7.1,5l1.8,2.1l0.2,5.5l-20.6,0.7l-60.2,0.5l-0.3-35.7l-0.5-3l-4.1-3.4l-1.1-1.8v-1.6l2.1-1.6l1.4-1.4L645.9,228.5z"
116
+ },
117
+ "ms": {
118
+ "name": "Mississippi",
119
+ "party": "REP",
120
+ "shape": "M798.6,567l-0.3,1.3h-5.2l-1.5-0.8l-2.1-0.3l-6.8,1.9l-1.8-0.8l-2.6,4.2l-1.1,0.8l-1.1-2.5 l-1.1-3.9l-3.4-3.2l1.1-7.5l-0.7-0.9l-1.8,0.2l-8.2,0.7l-24.2,0.7l-0.5-1.6l0.7-8l3.4-6.2l5.3-9.1l-0.9-2.1h1.1l0.7-3.2l-2.3-1.8 l0.2-1.8l-2.1-4.6l-0.3-5.3l1.4-2.7l-0.4-4.3l-1.4-3l1.4-1.4l-1.4-2.1l0.5-1.8l0.9-6.2l3-2.7l-0.7-2.1l3.7-5.3l2.7-0.9v-2.5 l-0.7-1.4l2.7-5.3l2.7-1.1l0.1-3.4l8.7-0.1l24.1-1.9l4.6-0.2l0,6.4l0.2,16.7l-0.8,31l-0.2,14.1l2.7,18.8L798.6,567z"
121
+ },
122
+ "mo": {
123
+ "name": "Missouri",
124
+ "party": "REP",
125
+ "shape": "M729.8,349.5l-2.5-3.1l-1.1-2.3l-7.8,0.7l-9.8,0.5l-25.4,0.9l-13.5,0.2l-7.9,0.1l-2.3,0.1l1.3,2.5 l-0.2,2.3l2.5,3.9l3.1,4.1l3.1,2.7l2.3,0.2l1.4,0.9v3l-1.8,1.6l-0.5,2.3l2.1,3.4l2.5,3l2.5,1.8l1.4,11.7l-0.7,35.3l0.2,4.7l0.5,5.4 l23.4-0.1l23.2-0.7l20.8-0.8l11.7-0.2l2.2,3.4l-0.7,3.3l-3.1,2.4l-0.6,1.8l5.4,0.5l3.9-0.7l1.7-5.5l0.7-5.9l2.3-2l1.7-1.5l2.1-1 l0.1-2.9l0.6-1.7l-1-1.7l-2.7,0.1l-2.2-2.6l-1.4-4.2l0.8-2.5l-1.9-3.4l-1.8-4.6l-4.8-0.8l-7-5.6l-1.7-4.1l0.8-3.2l2.1-6.1l0.5-2.9 l-1.9-1l-6.9-0.8l-1-1.7l-0.1-4.2l-5.5-3.4l-7-7.8l-2.3-7.3l-0.2-4.2L729.8,349.5z"
126
+ },
127
+ "mt": {
128
+ "name": "Montana",
129
+ "party": "REP",
130
+ "shape": "M530.7,222.3l0.6-11.2l2.3-24.8c0.5-5,1.1-8.5,1.4-15.4l0.9-14.6l-30.7-2.8L476,150l-29.3-4 l-32.3-5.3l-18.4-3.4l-32.7-6.9l-4.5,21.3l3.4,7.5l-1.4,4.6l1.8,4.6l3.2,1.4l4.6,10.8l2.7,3.2l0.5,1.1l3.4,1.1l0.5,2.1l-7.1,17.6 v2.5l2.5,3.2h0.9l4.8-3l0.7-1.1l1.6,0.7l-0.2,5.3l2.7,12.6l3,2.5l0.9,0.7l1.8,2.3l-0.5,3.4l0.7,3.4l1.1,0.9l2.3-2.3h2.7l3.2,1.6 l2.5-0.9h4.1l3.7,1.6l2.7-0.5l0.5-3l3-0.7l1.4,1.4l0.5,3.2l1.8,1.4l1.5-11.6l20.7,3l28.2,4l16.6,1.9l31.4,3.5l11,1.5l1.1-15.4 L530.7,222.3z"
131
+ },
132
+ "ne": {
133
+ "name": "Nebraska",
134
+ "party": "REP",
135
+ "shape": "M658.2,347l1.4,2.7l0.1,2.1l2.4,3.7l2.7,3.2h-5l-43.5-0.9l-40.8-0.9l-21.2-1l1.1-21.3l-33.4-2.7 l4.3-44l15.5,1L562,290l17.8,1.1l23.8,1.1l10.7-0.5l2.1,2.3l4.8,3l1.1,0.9l4.3-1.4l3.9-0.5l2.7-0.2l1.8,1.4l5,1.6l3,1.6l0.5,1.6 l0.9,2.1h1.8l0.8,0l1,5.2l2.7,8l1.2,4.6l2.1,3.8l0.5,4.9l1.4,4.3l0.5,6.5"
136
+ },
137
+ "nv": {
138
+ "name": "Nevada",
139
+ "party": "NON",
140
+ "shape": "M314.7,277.6l21,4.5l9.7,1.9l9.3,1.8l6.6,1.6l-0.6,5.9l-3.5,17.3l-4.1,20l-1.9,9.7l-2.2,13.3 l-3.2,16.4l-3.5,15.7l-2,10.2l-2.5,16.8l-0.5,1.1l-1.1,2.5l-1.9-0.1l-1.1-2.7l-2.7-0.5l-1.4-1l-2,0.3l-0.9,0.7l-1.3,1.3l-0.4,7 l-0.5,1.7l-0.4,12.1l-1.3,1.7l-1.9-2.3l-14.5-22.7l-19.4-29L263.6,349l-12.4-18.6l1.6-6.6l7-25.9l7.9-31.3l33.6,8.1l13.7,3"
141
+ },
142
+ "nh": {
143
+ "name": "New Hampshire",
144
+ "party": "DEM",
145
+ "shape": "M1054.8,242.4l0.9-1.1l1.1-3.3l-2.5-0.9l-0.5-3.1l-3.9-1.1l-0.3-2.7l-7.3-23.4l-4.6-14.5l-0.9,0 l-0.6,1.6l-0.6-0.5l-1-1l-1.5,1.9l0,5l0.3,5.7l1.9,2.7v4l-3.7,5.1l-2.6,1.1v1.1l1.1,1.8v8.6l-0.8,9.2l-0.2,4.8l1,1.3l-0.2,4.5 l-0.5,1.8l1.5,0.9l16.4-4.7l2.3-0.6l1.5-2.6L1054.8,242.4z"
146
+ },
147
+ "nj": {
148
+ "name": "New Jersey",
149
+ "party": "DEM",
150
+ "shape": "M1002.2,290.3l-2.1,2.4v3.1l-1.9,3.1l-0.2,1.6l1.3,1.3l-0.2,2.4l-2.3,1.1l0.8,2.7l0.2,1.1l2.7,0.3 l1,2.6l3.6,2.4l2.4,1.6v0.8l-3.2,3.1l-1.6,2.3l-1.5,2.7l-2.3,1.3l-1.2,0.7l-0.2,1.2l-0.6,2.6l1.1,2.2l3.2,2.9l4.8,2.3l4,0.6 l0.2,1.5l-0.8,1l0.3,2.7h0.8l2.1-2.4l0.8-4.8l2.7-4l3.1-6.5l1.1-5.5l-0.6-1.1l-0.2-9.4l-1.6-3.4l-1.1,0.8l-2.7,0.3l-0.5-0.5l1.1-1 l2.1-1.9l0.1-1.1l-0.4-3.4l0.5-2.7l-0.2-2.1l-2.6-1.1l-4.5-1l-3.9-1.1L1002.2,290.3z"
151
+ },
152
+ "nm": {
153
+ "name": "New Mexico",
154
+ "party": "DEM",
155
+ "shape": "M456.7,531l-0.7-6.1l8.6,0.5l29.5,3.1l28.4,1.4l2-22.3l3.7-55.9l1.1-19.4l2,0.3l0-11.1l-32.2-2.4 l-36.9-4.4l-34.5-4.1l-4.2,30.8l-7,53.2l-3.8,26.9l-2,13.3l15.5,2l1.3-10l16.7,2.6L456.7,531z"
156
+ },
157
+ "ny": {
158
+ "name": "New York",
159
+ "party": "DEM",
160
+ "shape": "M1002.6,289.4l-1.1-1l-2.6-0.2l-2.3-1.9l-1.6-6.1l-3.5,0.1l-2.4-2.7l-19.4,4.4l-43,8.7l-7.5,1.2 l-0.7-6.5l1.4-1.1l1.3-1.1l1-1.6l1.8-1.1l1.9-1.8l0.5-1.6l2.1-2.7l1.1-1l-0.2-1l-1.3-3.1l-1.8-0.2l-1.9-6.1l2.9-1.8l4.4-1.5l4-1.3 l3.2-0.5l6.3-0.2l1.9,1.3l1.6,0.2l2.1-1.3l2.6-1.1l5.2-0.5l2.1-1.8l1.8-3.2l1.6-1.9h2.1l1.9-1.1l0.2-2.3l-1.5-2.1l-0.3-1.5l1.1-2.1 v-1.5h-1.8l-1.8-0.8l-0.8-1.1l-0.2-2.6l5.8-5.5l0.6-0.8l1.5-2.9l2.9-4.5l2.7-3.7l2.1-2.4l2.4-1.8l3.1-1.2l5.5-1.3l3.2,0.2l4.5-1.5 l7.6-2.1l0.5,5l2.4,6.5l0.8,5.2l-1,3.9l2.6,4.5l0.8,2.1l-0.8,2.9l2.9,1.3l0.6,0.3l3.1,11l-0.5,5.1l-0.5,10.8l0.8,5.5l0.8,3.6 l1.5,7.3v8.1l-1.1,2.3l1.8,2l0.8,1.7l-1.9,1.8l0.3,1.3l1.3-0.3l1.5-1.3l2.3-2.6l1.1-0.6l1.6,0.6l2.3,0.2l7.9-3.9l2.9-2.7l1.3-1.5 l4.2,1.6l-3.4,3.6l-3.9,2.9l-7.1,5.3l-2.6,1l-5.8,1.9l-4,1.1l-1.2-0.5l-0.2-3.7l0.5-2.7l-0.2-2.1l-2.8-1.7l-4.5-1l-3.9-1.1 L1002.6,289.4z"
161
+ },
162
+ "nc": {
163
+ "name": "North Carolina",
164
+ "party": "NON",
165
+ "shape": "M1006.1,398.5l1.7,4.7l3.6,6.5l2.4,2.4l0.6,2.3l-2.4,0.2l0.8,0.6l-0.3,4.2l-2.6,1.3l-0.6,2.1 l-1.3,2.9l-3.7,1.6l-2.4-0.3l-1.5-0.2l-1.6-1.3l0.3,1.3v1h1.9l0.8,1.3l-1.9,6.3h4.2l0.6,1.6l2.3-2.3l1.3-0.5l-1.9,3.6l-3.1,4.8 h-1.3l-1.1-0.5l-2.7,0.6l-5.2,2.4l-6.5,5.3l-3.4,4.7l-1.9,6.5l-0.5,2.4l-4.7,0.5l-5.5,1.3l-9.9-8.2l-12.6-7.6l-2.9-0.8l-12.6,1.5 l-4.3,0.8l-1.6-3.2l-3-2.1l-16.5,0.5l-7.3,0.8l-9.1,4.5l-6.1,2.6l-1.6,0.3l-5.8,1l-7,0.8l-6.8,0.5l0.5-4.1l1.8-1.5l2.7-0.6l0.6-3.7 l4.2-2.7l3.9-1.5l4.2-3.6l4.4-2.1l0.6-3.1l3.9-3.9l0.6-0.2c0,0,0,1.1,0.8,1.1c0.8,0,1.9,0.3,1.9,0.3l2.3-3.6l2.1-0.6l2.3,0.3 l1.6-3.6l2.9-2.6l0.5-2.1v-4l4.5,0.7l7.1-1.3l15.8-1.9l17.1-2.6l19.9-4l19.7-4.2l11.4-2.8L1006.1,398.5z M1010,431.5l2.6-2.5 l3.2-2.6l1.5-0.6l0.2-2l-0.6-6.1l-1.5-2.3l-0.6-1.9l0.7-0.2l2.7,5.5l0.4,4.4l-0.2,3.4l-3.4,1.5l-2.8,2.4l-1.1,1.2L1010,431.5z"
166
+ },
167
+ "nd": {
168
+ "name": "North Dakota",
169
+ "party": "REP",
170
+ "shape": "M645.3,227.7l-0.4-7.5l-2-7.3l-1.8-13.6l-0.5-9.8l-2-3.1l-1.6-5.4v-10.3l0.7-3.9l-2.1-5.5 l-28.4-0.6l-18.6-0.6l-26.5-1.3l-24.9-1.9l-1.3,14.2l-1.4,15.1l-2.3,24.9l-0.5,11l56.8,3.8L645.3,227.7z"
171
+ },
172
+ "oh": {
173
+ "name": "Ohio",
174
+ "party": "REP",
175
+ "shape": "M905.4,295l-6.1,4.1l-3.9,2.3l-3.4,3.7l-4,3.9l-3.2,0.8l-2.9,0.5l-5.5,2.6l-2.1,0.2l-3.4-3.1 l-5.2,0.6l-2.6-1.5l-2.4-1.4l-4.9,0.7l-10.2,1.6l-7.8,1.2l1.3,14.6l1.8,13.7l2.6,23.4l0.6,4.8l4.1-0.1l2.4-0.8l3.4,1.5l2.1,4.4 l5.1,0l1.9,2.1l1.8-0.1l2.5-1.3l2.5,0.4l2,1.5l1.7-2.1l2.3-1.3l2.1-0.7l0.6,2.7l1.8,1l3.5,2.3l2.2-0.1l1.1-1.1l-0.1-1.4l1.6-1.5 l0.2-5l1-3.9l1.5-1.4l1.5,0.9l0.8,1.2l1.2-0.2l-0.4-2.4l-0.6-0.6v-2.4l1-1.3l2.3-3.4l1.3-1.5l2.1,0.5l2.3-1.6l3.1-3.4l2.3-3.9 l0.2-5.4l0.5-5v-4.7l-1.1-3.1l1-1.5l0.9-1l-1.4-9.8L905.4,295z"
176
+ },
177
+ "ok": {
178
+ "name": "Oklahoma",
179
+ "party": "REP",
180
+ "shape": "M549.3,422.6l-10.7-0.5l-6.4-0.5l0.3,0.2l-0.7,10.4l22,1.4l32.1,1.3l-2.3,24.4l-0.5,17.8l0.2,1.6 l4.3,3.7l2.1,1.1l0.7-0.2l0.7-2.1l1.4,1.8h2.1v-1.4l2.7,1.4l-0.5,3.9l4.1,0.2l2.5,1.1l4.1,0.7l2.5,1.8l2.3-2.1l3.4,0.7l2.5,3.4h0.9 v2.3l2.3,0.7l2.3-2.3l1.8,0.7h2.5l0.9,2.5l4.8,1.8l1.4-0.7l1.8-4.1h1.1l1.1,2.1l4.1,0.7l3.7,1.4l3,0.9l1.8-0.9l0.7-2.5h4.3l2.1,0.9 l2.7-2.1h1.1l0.7,1.6h4.1l1.6-2.1l1.8,0.5l2.1,2.5l3.2,1.8l3.2,0.9l1.9,1.1l-0.4-37.2l-1.4-11l-0.2-8.9l-1.4-6.5l-0.8-7.2l-0.1-3.8 l-12.1,0.3l-46.4-0.5l-45-2.1L549.3,422.6z"
181
+ },
182
+ "or": {
183
+ "name": "Oregon",
184
+ "party": "DEM",
185
+ "shape": "M314.3,276.7l4.3-17.9l4.7-17.9l1.1-4.2l2.4-5.6l-0.6-1.2l-2.5,0l-1.3-1.7l0.5-1.5l0.5-3.2l4.5-5.5 l1.8-1.1l1.1-1.1l1.5-3.6l4-5.7l3.6-3.9l0.2-3.5l-3.3-2.5l-1.2-4.5l-13.2-3.7l-15.1-3.5l-15.4,0.1l-0.5-1.4l-5.5,2.1l-4.5-0.6 l-2.4-1.6l-1.3,0.7L273,184l-1.7-1.4l-5.3-2.1l-0.8,0.1l-4.3-1.5l-1.9,1.8l-6.2-0.3l-5.9-4.1l0.7-0.8l0.2-7.8l-2.3-3.9l-4.1-0.6 l-0.7-2.5l-2.4-0.5l-5.8,2.1l-2.3,6.5l-3.2,10l-3.2,6.5l-5,14.1l-6.5,13.6l-8.1,12.6l-1.9,2.9l-0.8,8.6l-1.3,6l2.7,3.5l6.7,2.3 l11.6,3.3l7.9,2.5l12.4,3.6l13.3,3.6l13.2,3.6"
186
+ },
187
+ "pa": {
188
+ "name": "Pennsylvania",
189
+ "party": "NON",
190
+ "shape": "M996.2,326.5l1.1-0.6l2.3-0.6l1.5-2.7l1.6-2.3l3.2-3.1v-0.8l-2.4-1.6l-3.6-2.4l-1-2.6l-2.7-0.3 l-0.2-1.1l-0.8-2.7l2.3-1.1l0.2-2.4l-1.3-1.3l0.2-1.6l1.9-3.1v-3.1l2.3-2.4l0.2-1.1l-2.6-0.2l-2.3-1.9l-2.4-5.3l-3-0.9l-2.3-2.1 l-18.6,4l-43,8.7l-8.9,1.5l-0.5-7.1l-5.5,5.6l-1.3,0.5l-4.2,3l2.9,19.1l2.5,9.7l3.6,19.3l3.3-0.6l11.9-1.5l37.9-7.7l14.9-2.8 l8.3-1.6l0.3-0.2l2.1-1.6L996.2,326.5z"
191
+ },
192
+ "ri": {
193
+ "name": "Rhode Island",
194
+ "party": "DEM",
195
+ "shape": "M1048.1,279.8l-0.5-4.2l-0.8-4.4l-1.7-5.9l5.7-1.5l1.6,1.1l3.4,4.4l2.9,4.4l-2.9,1.5l-1.3-0.2 l-1.1,1.8l-2.4,1.9L1048.1,279.8z"
196
+ },
197
+ "sc": {
198
+ "name": "South Carolina",
199
+ "party": "REP",
200
+ "shape": "M935.2,512.9l-1.8,1l-2.6-1.3l-0.6-2.1l-1.3-3.6l-2.3-2.1l-2.6-0.6l-1.6-4.8l-2.7-6l-4.2-1.9 l-2.1-1.9l-1.3-2.6L910,485l-2.3-1.3l-2.3-2.9l-3.1-2.3l-4.5-1.8l-0.5-1.5l-2.4-2.9l-0.5-1.5l-3.4-5.2l-3.4,0.2l-4-2.4l-1.3-1.3 l-0.3-1.8l0.8-1.9l2.3-1l-0.3-2.1l6.1-2.6l9.1-4.5l7.3-0.8l16.5-0.5l2.3,1.9l1.6,3.2l4.4-0.5l12.6-1.5l2.9,0.8l12.6,7.6l10.1,8.1 l-5.4,5.5l-2.6,6.1l-0.5,6.3l-1.6,0.8l-1.1,2.7l-2.4,0.6l-2.1,3.6l-2.7,2.7l-2.3,3.4l-1.6,0.8l-3.6,3.4l-2.9,0.2l1,3.2l-5,5.5 L935.2,512.9z"
201
+ },
202
+ "sd": {
203
+ "name": "South Dakota",
204
+ "party": "REP",
205
+ "shape": "M646.8,303.2l-1-1.1l-1.5-3.6l1.8-3.7l1.1-5.6l-2.6-2.1l-0.3-2.7l0.6-3l2.2-0.8l0.3-5.7l-0.1-30.1 l-0.6-3l-4.1-3.6l-1-2v-1.9l1.9-1.3l1.5-1.9l0.2-2.7l-57.4-1.6l-56.2-3.9l-0.8,5.3l-1.6,15.9l-1.3,17.9l-1.6,24.6l16,1l19.6,1.1 l18,1.3l23.8,1.3l10.7-0.8l2.9,2.3l4.3,3l1,0.8l3.5-0.9l4-0.3l2.7-0.1l3.1,1.2l4.5,1.4l3.1,1.8l0.6,1.9l0.9,1.9l0.7-0.5 L646.8,303.2z"
206
+ },
207
+ "tn": {
208
+ "name": "Tennessee",
209
+ "party": "REP",
210
+ "shape": "M871.1,420.6l-51.9,5l-15.8,1.8l-4.6,0.5l-3.9,0v3.9l-8.4,0.5l-7,0.6l-11.1,0.1l-0.3,5.8l-2.1,6.3 l-1,3l-1.3,4.4l-0.3,2.6l-4,2.3l1.5,3.6l-1,4.4l-1,0.8l7.3-0.2l24.1-1.9l5.3-0.2l8.1-0.5l27.8-2.6l10.2-0.8l8.4-1l8.4-1.1l4.8-0.8 l-0.1-4.5l1.8-1.5l2.7-0.6l0.6-3.7l4.2-2.7l3.9-1.5l4.2-3.6l4.4-2.1l0.9-3.5l4.3-3.9l0.6-0.2c0,0,0,1.1,0.8,1.1s1.9,0.3,1.9,0.3 l2.3-3.6l2.1-0.6l2.3,0.3l1.6-3.6l2.1-2.2l0.6-1l0.2-3.9l-1.5-0.3l-2.4,1.9l-7.9,0.2l-12,1.9L871.1,420.6z"
211
+ },
212
+ "tx": {
213
+ "name": "Texas",
214
+ "party": "REP",
215
+ "shape": "M531.1,433.4l22.7,1.1l31.1,1.1l-2.3,23.5l-0.3,18.2l0.1,2.1l4.3,3.8l1.7,0.8l1.8,0.3l0.7-1.3 l0.9,0.9l1.7,0.5l1.6-0.7l1.1,0.4l-0.3,3.4l4.3,1l2.7,0.8l4,0.5l2.2,1.8l3.2-1.6l2.8,0.4l2,2.8l1.1,0.3l-0.2,2l3.1,1.2l2.8-1.8 l1.5,0.4l2.4,0.2l0.4,1.9l4.6,2l2.7-0.2l2-4.1h0.3l1.1,1.9l4.4,1l3.3,1.2l3.3,0.8l2.1-0.8l0.8-2.5h3.7l1.9,0.8l3.1-1.6h0.7l0.4,1.1 h4.3l2.4-1.3l1.7,0.3l1.4,1.9l2.9,1.7l3.5,1.1l2.7,1.4l2.4,1.6l3.3-0.9l1.9,1l0.5,10.1l0.3,9.7l0.7,9.5l0.5,4l2.7,4.6l1.1,4.1 l3.9,6.3l0.5,2.9l0.5,1l-0.7,7.5l-2.7,4.4l1,2.9l-0.4,2.5l-0.8,7.3l-1.4,2.7l0.6,4.4l-5.7,1.6l-9.9,4.5l-1,1.9l-2.6,1.9l-2.1,1.5 l-1.3,0.8l-5.7,5.3l-2.7,2.1l-5.3,3.2l-5.7,2.4l-6.3,3.4l-1.8,1.5l-5.8,3.6l-3.4,0.6l-3.9,5.5l-4,0.3l-1,1.9l2.3,1.9l-1.5,5.5 l-1.3,4.5l-1.1,3.9l-0.8,4.5l0.8,2.4l1.8,7l1,6.1l1.8,2.7l-1,1.5l-3.1,1.9l-5.7-3.9l-5.5-1.1l-1.3,0.5l-3.2-0.6l-4.2-3.1l-5.2-1.1 l-7.6-3.4l-2.1-3.9l-1.3-6.5l-3.2-1.9l-0.6-2.3l0.6-0.6l0.3-3.4l-1.3-0.6l-0.6-1l1.3-4.4l-1.6-2.3l-3.2-1.3l-3.4-4.4l-3.6-6.6 l-4.2-2.6l0.2-1.9l-5.3-12.3l-0.8-4.2l-1.8-1.9l-0.2-1.5l-6-5.3l-2.6-3.1v-1.1l-2.6-2.1l-6.8-1.1l-7.4-0.6l-3.1-2.3l-4.5,1.8 l-3.6,1.5l-2.3,3.2l-1,3.7l-4.4,6.1l-2.4,2.4l-2.6-1l-1.8-1.1l-1.9-0.6l-3.9-2.3v-0.6l-1.8-1.9l-5.2-2.1l-7.4-7.8l-2.3-4.7v-8.1 l-3.2-6.5l-0.5-2.7l-1.6-1l-1.1-2.1l-5-2.1l-1.3-1.6l-7.1-7.9l-1.3-3.2l-4.7-2.3l-1.5-4.4l-2.6-2.9l-1.9-0.5l-0.6-4.7l8,0.7l29,2.7 l29,1.6l2.3-23.8l3.9-55.6l1.6-18.7l1.4,0 M631.2,667.3l-0.6-7.1l-2.7-7.2l-0.6-7l1.5-8.2l3.3-6.9l3.5-5.4l3.2-3.6l0.6,0.2 l-4.8,6.6l-4.4,6.5l-2,6.6l-0.3,5.2l0.9,6.1l2.6,7.2l0.5,5.2l0.2,1.5L631.2,667.3z"
216
+ },
217
+ "ut": {
218
+ "name": "Utah",
219
+ "party": "REP",
220
+ "shape": "M427,409.3l-24.6-3.5l-26.6-4.9l-33.8-6l1.6-9.2l3.2-15.2L350,354l2.2-13.6l1.9-8.9l3.8-20.5 l3.5-17.5l1.1-5.6l12.7,2.3l12,2.1l10.3,1.8l8.3,1.4l3.7,0.5l-1.5,10.6l-2.3,13.2l7.8,0.9l16.4,1.8l8.2,0.9l-2.1,22l-3.2,22.6 l-3.8,27.8l-1.7,11.1L427,409.3z"
221
+ },
222
+ "vt": {
223
+ "name": "Vermont",
224
+ "party": "DEM",
225
+ "shape": "M1018.3,253.7l-0.8-5.7l-2.4-10l-0.6-0.3l-2.9-1.3l0.8-2.9l-0.8-2.1l-2.7-4.6l1-3.9l-0.8-5.2 l-2.4-6.5l-0.8-4.9l26.2-6.7l0.3,5.8l1.9,2.7v4l-3.7,4l-2.6,1.1v1.1l1.1,1.8v8.6l-0.8,9.2l-0.2,4.8l1,1.3l-0.2,4.5l-0.5,1.8 l0.7,1.6l-7,1.4L1018.3,253.7z"
226
+ },
227
+ "va": {
228
+ "name": "Virginia",
229
+ "party": "DEM",
230
+ "shape": "M1002.9,369.2l-0.1-1.9l6.5-2.5l-0.8,3.2l-2.9,3.8l-0.4,4.6l0.5,3.4l-1.8,5l-2.2,1.9l-1.5-4.6 l0.4-5.4l1.6-4.2L1002.9,369.2z M1005.2,397.5L947,410.1l-37.4,5.3l-6.7-0.4l-2.6,1.9l-7.3,0.2l-8.4,1l-8.9,1l8.5-4.9l0-2.1 l1.5-2.1l10.6-11.5l3.9,4.5l3.8,1l2.5-1.1l2.2-1.3l2.5,1.3l3.9-1.4l1.9-4.6l2.6,0.5l2.9-2.1l1.8,0.5l2.8-3.7l0.3-2.1l-1-1.3l1-1.9 l5.3-12.3l0.6-5.7l1.2-0.5l2.2,2.4l3.9-0.3l1.9-7.6l2.8-0.6l1-2.7l2.6-2.3l1.3-2.3l1.5-3.4l0.1-5.1l9.8,3.8 c0.7,0.3,0.7-4.8,0.7-4.8l4.1,1.4l-0.5,2.6l8.2,2.9l1.3,1.8l-0.9,3.7l-1.3,1.3l-0.5,1.7l0.5,2.4l2,1.3l3.9,1.4l2.9,1l4.9,0.9 l2.2,2.1l3.2,0.4l0.9,1.2l-0.4,4.7l1.4,1.1l-0.5,1.9l1.2,0.8l-0.2,1.4l-2.7-0.1l0.1,1.6l2.3,1.5l0.1,1.4l1.8,1.8l0.5,2.5l-2.6,1.4 l1.6,1.5l5.8-1.7L1005.2,397.5z"
231
+ },
232
+ "wa": {
233
+ "name": "Washington",
234
+ "party": "DEM",
235
+ "shape": "M267.6,106.4l4.4,1.5l9.7,2.7l8.6,1.9l20,5.7l23,5.7l15.2,3.4l-1,3.9l-4.1,13.8l-4.5,20.8 l-3.2,16.1l-0.4,9.4l-13.2-3.9l-15.6-3.4l-13.7,0.6l-1.6-1.5l-5.3,1.9l-4-0.3l-2.7-1.8l-1.6,0.5l-4.2-0.2l-1.9-1.4l-4.8-1.7 l-1.4-0.2l-5-1.3l-1.8,1.5l-5.7-0.3l-4.8-3.8l0.2-0.8l0.1-7.9l-2.1-3.9l-4.1-0.7l-0.4-2.4l-2.5-0.6l-2.9-0.5l-1.8,1l-2.3-2.9 l0.3-2.9l2.7-0.3l1.6-4l-2.6-1.1l0.2-3.7l4.4-0.6l-2.7-2.7l-1.5-7.1l0.6-2.9v-7.9l-1.8-3.2l2.3-9.4l2.1,0.5l2.4,2.9l2.7,2.6 l3.2,1.9l4.5,2.1l3.1,0.6l2.9,1.5l3.4,1l2.3-0.2v-2.4l1.3-1.1l2.1-1.3l0.3,1.1l0.3,1.8l-2.3,0.5l-0.3,2.1l1.8,1.5l1.1,2.4l0.6,1.9 l1.5-0.2l0.2-1.3l-1-1.3l-0.5-3.2l0.8-1.8l-0.6-1.5V119l1.8-3.6l-1.1-2.6l-2.4-4.8l0.3-0.8L267.6,106.4z M258.1,112.3l2-0.2 l0.5,1.4l1.5-1.6h2.3l0.8,1.5l-1.5,1.7l0.6,0.8l-0.7,2l-1.4,0.4c0,0-0.9,0.1-0.9-0.2s1.5-2.6,1.5-2.6l-1.7-0.6l-0.3,1.5l-0.7,0.6 l-1.5-2.3L258.1,112.3z"
236
+ },
237
+ "wv": {
238
+ "name": "West Virginia",
239
+ "party": "REP",
240
+ "shape": "M930.6,342l1.1,4.9l1.1,6.9l3.6-2.7l2.3-3.1l2.5-0.6l1.5-1.5l1.8-2.6l1.2,0.6l2.9-0.3l2.6-2.1 l2-1.5l1.8-0.5l1.3,1l2.2,1.1l1.9,1.8l1.4,1.3l-0.1,4.7l-5.7-3.1l-4.5-1.8l-0.2,5.3l-0.5,2.1l-1.6,2.7l-0.6,1.6l-3.1,2.4l-0.5,2.3 l-3.4,0.3l-0.3,3.1l-1.1,5.5h-2.6l-1.3-0.8l-1.6-2.7l-1.8,0.2l-0.3,4.4l-2.1,6.6l-5,10.8l0.8,1.3l-0.2,2.7l-2.1,1.9l-1.5-0.3 l-3.2,2.4l-2.6-1l-1.8,4.7c0,0-3.7,0.8-4.4,1c-0.6,0.2-2.4-1.3-2.4-1.3l-2.4,2.3l-2.6,0.6l-2.9-0.8l-1.3-1.3l-2.2-3l-3.1-2 l-2.6-2.7l-2.9-3.7l-0.6-2.3l-2.6-1.5l-0.8-1.6l-0.2-5.3l2.2-0.1l1.9-0.8l0.2-2.7l1.6-1.5l0.2-5l1-3.9l1.3-0.6l1.3,1.1l0.5,1.8 l1.8-1l0.5-1.6l-1.1-1.8v-2.4l1-1.3l2.3-3.4l1.3-1.5l2.1,0.5l2.3-1.6l3.1-3.4l2.3-3.9l0.3-5.7l0.5-5v-4.7l-1.1-3.1l1-1.5l1.3-1.3 l3.5,19.8l4.6-0.8L930.6,342z"
241
+ },
242
+ "wi": {
243
+ "name": "Wisconsin",
244
+ "party": "NON",
245
+ "shape": "M786.9,297.2l0.4-3l-1.6-4.5l-0.6-6.1l-1.1-2.4l1-3.1l0.8-2.9l1.5-2.6l-0.6-3.4l-0.6-3.6l0.5-1.8 l1.9-2.4l0.2-2.7l-0.8-1.3l0.6-2.6l0.5-3.2l2.7-5.7l2.9-6.8l0.2-2.3l-0.3-1l-0.8,0.5l-4.2,6.3l-2.7,4l-1.9,1.8l-0.8,2.3l-1.5,0.8 l-1.1,1.9l-1.5-0.3l-0.2-1.8l1.3-2.4l2.1-4.7l1.8-1.6l1.1-2.3l-1.6-0.9l-1.4-1.4l-1.6-10.3l-3.7-1.1l-1.4-2.3l-12.6-2.7l-2.5-1.1 l-8.2-2.3l-8.2-1.1l-4.2-5.4l-0.5,1.3l-1.1-0.2l-0.6-1.1l-2.7-0.8l-1.1,0.2l-1.8,1l-1-0.6l0.6-1.9l1.9-3.1l1.1-1.1l-1.9-1.5 l-2.1,0.8l-2.9,1.9l-7.4,3.2l-2.9,0.6l-2.9-0.5l-1-0.9l-2.1,2.8l-0.2,2.7v8.5l-1.1,1.6l-5.3,3.9l-2.3,5.9l0.5,0.2l2.5,2.1l0.7,3.2 l-1.8,3.2v3.9l0.5,6.6l3,3h3.4l1.8,3.2l3.4,0.5l3.9,5.7l7.1,4.1l2.1,2.7l0.9,7.4l0.7,3.3l2.3,1.6l0.2,1.4l-2.1,3.4l0.2,3.2l2.5,3.9 l2.5,1.1l3,0.5l1.3,1.4l9.2,0l26.1-1.5L786.9,297.2z"
246
+ },
247
+ "wy": {
248
+ "name": "Wyoming",
249
+ "party": "REP",
250
+ "shape": "M528.3,243.8l-10.5-0.8l-32.1-3.3l-16.2-2.1l-28.3-4.1l-19.9-3l-1.4,11.2l-3.8,24.3l-5.3,30.4 l-1.5,10.5l-1.7,11.9l6.5,0.9l25.9,2.5l20.6,2.3l36.8,4.1l23.8,2.9l4.5-44.2l1.4-25.4L528.3,243.8z"
251
+ }
252
+ }
253
+
254
+
255
+
256
+ export default states
@@ -54,7 +54,7 @@ async function paginate(request, f) {
54
54
  }
55
55
  }
56
56
 
57
- export async function dynamodb_scan(dynamodb, table, attribute_names = [], filters = {}) {
57
+ export async function dynamodb_scan(clients, table, attribute_names = [], filters = {}) {
58
58
  const request = Object.fromEntries(Object.entries({
59
59
  TableName : table,
60
60
  ExpressionAttributeNames : Object.fromEntries((Object.keys(filters).concat(attribute_names)).map(attribute_name => ["#" + attribute_name, attribute_name])),
@@ -62,11 +62,11 @@ export async function dynamodb_scan(dynamodb, table, attribute_names = [], filte
62
62
  FilterExpression : Object.keys(filters).map(attribute_name => "#" + attribute_name + " = :" + attribute_name).join(","),
63
63
  ProjectionExpression : attribute_names.map(attribute_name => "#" + attribute_name).join(", ")
64
64
  }).filter(([field, value]) => value !== undefined && Object.keys(value).length !== 0))
65
- return await paginate(request, (request) => dynamodb.scan(request))
65
+ return await paginate(request, (request) => clients.dynamodb.scan(request))
66
66
  }
67
67
 
68
- export async function dynamodb_get(dynamodb, table, key, consistent=false) {
69
- const item = await dynamodb.getItem({
68
+ export async function dynamodb_get(clients, table, key, consistent=false) {
69
+ const item = await clients.dynamodb.getItem({
70
70
  ConsistentRead : consistent,
71
71
  TableName : table,
72
72
  Key : convert_input(key).M
@@ -78,7 +78,7 @@ export async function dynamodb_get(dynamodb, table, key, consistent=false) {
78
78
  return convert_output({ M : item })
79
79
  }
80
80
 
81
- export async function dynamodb_get_max(dynamodb, table, primary_key) {
81
+ export async function dynamodb_get_max(clients, table, primary_key) {
82
82
  if (Object.keys(primary_key).length !== 1) {
83
83
  return undefined
84
84
  }
@@ -94,7 +94,7 @@ export async function dynamodb_get_max(dynamodb, table, primary_key) {
94
94
  Limit : 1,
95
95
  ScanIndexForward : false
96
96
  }
97
- const items = await dynamodb.query(request)
97
+ const items = await clients.dynamodb.query(request)
98
98
  .then(response => response.Items)
99
99
  if (items[0] === undefined) {
100
100
  return undefined
@@ -104,7 +104,7 @@ export async function dynamodb_get_max(dynamodb, table, primary_key) {
104
104
 
105
105
 
106
106
 
107
- export async function dynamodb_query(dynamodb, table, primary_key, reverse=false) {
107
+ export async function dynamodb_query(clients, table, primary_key, reverse=false) {
108
108
  if (Object.keys(primary_key).length !== 1) {
109
109
  return undefined
110
110
  }
@@ -119,10 +119,10 @@ export async function dynamodb_query(dynamodb, table, primary_key, reverse=false
119
119
  KeyConditionExpression: "#a = :a",
120
120
  ScanIndexForward : !reverse
121
121
  }
122
- return await paginate(request, (request) => dynamodb.query(request))
122
+ return await paginate(request, (request) => clients.dynamodb.query(request))
123
123
  }
124
124
 
125
- export async function dynamodb_query_prefix(dynamodb, table, primary_key, secondary_key_prefix, reverse=false) {
125
+ export async function dynamodb_query_prefix(clients, table, primary_key, secondary_key_prefix, reverse=false) {
126
126
  if (Object.keys(primary_key).length !== 1 || Object.keys(secondary_key_prefix).length !== 1) {
127
127
  return undefined
128
128
  }
@@ -139,10 +139,10 @@ export async function dynamodb_query_prefix(dynamodb, table, primary_key, second
139
139
  KeyConditionExpression: "#a = :a AND begins_with(#b, :b)",
140
140
  ScanIndexForward : !reverse
141
141
  }
142
- return await paginate(request, (request) => dynamodb.query(request))
142
+ return await paginate(request, (request) => clients.dynamodb.query(request))
143
143
  }
144
144
 
145
- export async function dynamodb_query_range(dynamodb, table, primary_key, secondary_key_range, reverse=false) {
145
+ export async function dynamodb_query_range(clients, table, primary_key, secondary_key_range, reverse=false) {
146
146
  if (Object.keys(primary_key).length !== 1 || Object.keys(secondary_key_range).length !== 1 || Object.values(secondary_key_range)[0].length !== 2) {
147
147
  return undefined
148
148
  }
@@ -160,11 +160,11 @@ export async function dynamodb_query_range(dynamodb, table, primary_key, seconda
160
160
  KeyConditionExpression: "#a = :a AND (#b BETWEEN :b1 AND :b2)",
161
161
  ScanIndexForward : !reverse
162
162
  }
163
- return await paginate(request, (request) => dynamodb.query(request))
163
+ return await paginate(request, (request) => clients.dynamodb.query(request))
164
164
  }
165
165
 
166
- export async function dynamodb_set(dynamodb, table, key, attributes) {
167
- return await dynamodb.updateItem({
166
+ export async function dynamodb_set(clients, table, key, attributes) {
167
+ return await clients.dynamodb.updateItem({
168
168
  TableName : table,
169
169
  Key : convert_input(key).M,
170
170
  UpdateExpression: "set " + Object.keys(attributes)
@@ -185,8 +185,8 @@ export async function dynamodb_set(dynamodb, table, key, attributes) {
185
185
  })
186
186
  }
187
187
 
188
- export async function dynamodb_append(dynamodb, table, key, attributes) {
189
- return await dynamodb.updateItem({
188
+ export async function dynamodb_append(clients, table, key, attributes) {
189
+ return await clients.dynamodb.updateItem({
190
190
  TableName : table,
191
191
  Key : convert_input(key).M,
192
192
  UpdateExpression: "set " + Object.keys(attributes)
@@ -203,7 +203,7 @@ export async function dynamodb_append(dynamodb, table, key, attributes) {
203
203
  })
204
204
  }
205
205
 
206
- export async function dynamodb_add(dynamodb, table, key, attributes) {
206
+ export async function dynamodb_add(clients, table, key, attributes) {
207
207
  const item = await get(table, key, true)
208
208
  const new_attributes = {}
209
209
  for (const [attribute, values] of Object.entries(attributes)) {
@@ -221,8 +221,8 @@ export async function dynamodb_add(dynamodb, table, key, attributes) {
221
221
  return await append(table, key, attributes)
222
222
  }
223
223
 
224
- export async function dynamodb_remove(dynamodb, table, key, attributes) {
225
- return await dynamodb.updateItem({
224
+ export async function dynamodb_remove(clients, table, key, attributes) {
225
+ return await clients.dynamodb.updateItem({
226
226
  TableName : table,
227
227
  Key : convert_input(key).M,
228
228
  UpdateExpression: "remove " + attributes
@@ -233,26 +233,26 @@ export async function dynamodb_remove(dynamodb, table, key, attributes) {
233
233
  })
234
234
  }
235
235
 
236
- export async function dynamodb_create(dynamodb, table, key, attributes = {}) {
236
+ export async function dynamodb_create(clients, table, key, attributes = {}) {
237
237
  const item = await get(table, key)
238
238
  if (item !== undefined) {
239
239
  return undefined
240
240
  }
241
- return await dynamodb.putItem({
241
+ return await clients.dynamodb.putItem({
242
242
  TableName : table,
243
243
  Item : { ...convert_input(key).M, ...convert_input(attributes).M }
244
244
  })
245
245
  }
246
246
 
247
- export async function dynamodb_delete(dynamodb, table, key) {
248
- return await dynamodb.deleteItem({
247
+ export async function dynamodb_delete(clients, table, key) {
248
+ return await clients.dynamodb.deleteItem({
249
249
  TableName: table,
250
250
  Key: Object.fromEntries(Object.keys(key).map(key_name => [key_name, convert_input(key[key_name])]))
251
251
  })
252
252
  }
253
253
 
254
- export async function dynamodb_duplicate_attribute(dynamodb, table, attribute_name, new_attribute_name) {
255
- const table_key_names = await dynamodb.describeTable({
254
+ export async function dynamodb_duplicate_attribute(clients, table, attribute_name, new_attribute_name) {
255
+ const table_key_names = await clients.dynamodb.describeTable({
256
256
  TableName : table
257
257
  }).then(metadata => metadata.Table.KeySchema.map(key => key.AttributeName))
258
258
  const items = await scan(table, table_key_names.concat([attribute_name, new_attribute_name]))
@@ -269,8 +269,8 @@ export async function dynamodb_duplicate_attribute(dynamodb, table, attribute_na
269
269
  }
270
270
  }
271
271
 
272
- export async function dynamodb_remove_attribute(dynamodb, table, attribute_name) {
273
- const table_key_names = await dynamodb.describeTable({
272
+ export async function dynamodb_remove_attribute(clients, table, attribute_name) {
273
+ const table_key_names = await clients.dynamodb.describeTable({
274
274
  TableName : table
275
275
  }).then(metadata => metadata.Table.KeySchema.map(key => key.AttributeName))
276
276
  const items = await scan(table)
@@ -0,0 +1,474 @@
1
+ const election_ids = new Set([
2
+ "2026-house-nc-11-election",
3
+ "2026-house-co-05-election",
4
+ "2026-house-il-01-election",
5
+ "2026-house-co-03-election",
6
+ "2026-house-pa-12-election",
7
+ "2026-house-nc-10-election",
8
+ "2026-house-fl-22-election",
9
+ "2026-house-fl-19-election",
10
+ "2026-house-ny-04-election",
11
+ "2026-house-tx-38-election",
12
+ "2026-house-pa-07-election",
13
+ "2026-house-ct-02-election",
14
+ "2026-house-tx-20-election",
15
+ "2026-house-or-01-election",
16
+ "2026-house-ca-42-election",
17
+ "2026-house-mi-05-election",
18
+ "2026-house-ne-01-election",
19
+ "2026-sen-ne-election",
20
+ "2026-house-nj-09-election",
21
+ "2026-house-nc-12-election",
22
+ "2026-house-nh-01-election",
23
+ "2026-house-ny-14-election",
24
+ "2026-house-ny-22-election",
25
+ "2026-sen-de-election",
26
+ "2026-house-nc-06-election",
27
+ "2026-house-fl-26-election",
28
+ "2026-house-az-04-election",
29
+ "2026-house-az-07-election",
30
+ "2026-house-nc-02-election",
31
+ "2026-house-vt-al-election",
32
+ "2026-house-in-06-election",
33
+ "2026-house-ca-19-election",
34
+ "2026-house-va-07-election",
35
+ "2026-house-ok-03-election",
36
+ "2026-house-ma-07-election",
37
+ "2026-house-fl-15-election",
38
+ "2026-sen-nh-election",
39
+ "2026-house-ks-03-election",
40
+ "2026-house-ga-02-election",
41
+ "2026-house-tx-09-election",
42
+ "2026-house-pa-08-election",
43
+ "2026-house-in-09-election",
44
+ "2026-house-la-05-election",
45
+ "2026-house-nj-10-election",
46
+ "2026-house-tx-36-election",
47
+ "2026-house-ky-04-election",
48
+ "2026-house-mo-01-election",
49
+ "2026-house-mn-07-election",
50
+ "2026-house-ri-01-election",
51
+ "2026-house-ny-01-election",
52
+ "2026-house-tx-23-election",
53
+ "2026-house-mt-01-election",
54
+ "2026-house-nv-01-election",
55
+ "2026-house-mn-01-election",
56
+ "2026-house-wa-10-election",
57
+ "2026-house-fl-18-election",
58
+ "2026-house-ky-01-election",
59
+ "2026-house-ga-06-election",
60
+ "2026-house-ny-10-election",
61
+ "2026-house-nj-05-election",
62
+ "2026-house-al-03-election",
63
+ "2026-house-mn-02-election",
64
+ "2026-house-sc-04-election",
65
+ "2026-house-tx-11-election",
66
+ "2026-house-mo-06-election",
67
+ "2026-house-tn-09-election",
68
+ "2026-house-il-04-election",
69
+ "2026-house-ca-40-election",
70
+ "2026-house-fl-27-election",
71
+ "2026-house-ok-01-election",
72
+ "2026-house-tx-07-election",
73
+ "2026-house-pa-15-election",
74
+ "2026-house-nm-01-election",
75
+ "2026-house-tx-04-election",
76
+ "2026-house-fl-13-election",
77
+ "2026-house-ny-11-election",
78
+ "2026-house-ga-09-election",
79
+ "2026-house-ca-37-election",
80
+ "2026-house-ca-43-election",
81
+ "2026-house-ca-39-election",
82
+ "2026-house-ca-38-election",
83
+ "2026-house-ga-03-election",
84
+ "2026-house-in-07-election",
85
+ "2026-house-ca-30-election",
86
+ "2026-house-il-08-election",
87
+ "2026-house-fl-14-election",
88
+ "2026-house-tx-13-election",
89
+ "2026-house-il-07-election",
90
+ "2026-sen-sc-election",
91
+ "2026-house-wy-al-election",
92
+ "2026-house-hi-02-election",
93
+ "2026-house-il-02-election",
94
+ "2026-house-fl-11-election",
95
+ "2026-house-az-02-election",
96
+ "2026-house-ca-02-election",
97
+ "2026-house-fl-12-election",
98
+ "2026-sen-ma-election",
99
+ "2026-sen-la-election",
100
+ "2026-house-va-09-election",
101
+ "2026-house-ms-02-election",
102
+ "2026-house-ca-08-election",
103
+ "2026-house-id-02-election",
104
+ "2026-house-tn-02-election",
105
+ "2026-sen-ri-election",
106
+ "2026-house-ia-04-election",
107
+ "2026-house-il-11-election",
108
+ "2026-sen-al-election",
109
+ "2026-house-ca-27-election",
110
+ "2026-house-sc-03-election",
111
+ "2026-sen-nc-election",
112
+ "2026-house-ar-01-election",
113
+ "2026-house-oh-02-election",
114
+ "2026-house-fl-04-election",
115
+ "2026-house-oh-08-election",
116
+ "2026-house-me-01-election",
117
+ "2026-house-ca-31-election",
118
+ "2026-house-nc-08-election",
119
+ "2026-house-tx-34-election",
120
+ "2026-house-oh-12-election",
121
+ "2026-house-tn-06-election",
122
+ "2026-house-oh-09-election",
123
+ "2026-house-ca-03-election",
124
+ "2026-house-nc-07-election",
125
+ "2026-house-ca-13-election",
126
+ "2026-house-ar-03-election",
127
+ "2026-house-ny-13-election",
128
+ "2026-house-ga-12-election",
129
+ "2026-sen-id-election",
130
+ "2026-house-nj-07-election",
131
+ "2026-sen-ga-election",
132
+ "2026-house-ny-05-election",
133
+ "2026-sen-mi-election",
134
+ "2026-house-ca-25-election",
135
+ "2026-house-va-03-election",
136
+ "2026-sen-ar-election",
137
+ "2026-sen-tx-election",
138
+ "2026-house-ca-09-election",
139
+ "2026-house-wa-08-election",
140
+ "2026-sen-tn-election",
141
+ "2026-house-ca-33-election",
142
+ "2026-house-ga-14-election",
143
+ "2026-house-ok-02-election",
144
+ "2026-house-fl-03-election",
145
+ "2026-house-id-01-election",
146
+ "2026-house-ca-16-election",
147
+ "2026-house-nc-13-election",
148
+ "2026-house-ms-01-election",
149
+ "2026-sen-mt-election",
150
+ "2026-house-nv-02-election",
151
+ "2026-house-ga-01-election",
152
+ "2026-house-mn-06-election",
153
+ "2026-house-ga-10-election",
154
+ "2026-house-or-05-election",
155
+ "2026-house-wi-04-election",
156
+ "2026-house-wi-07-election",
157
+ "2026-house-ks-04-election",
158
+ "2026-house-al-05-election",
159
+ "2026-house-oh-01-election",
160
+ "2026-house-al-07-election",
161
+ "2026-house-ne-02-election",
162
+ "2026-house-ca-18-election",
163
+ "2026-house-tx-32-election",
164
+ "2026-house-ca-44-election",
165
+ "2026-house-az-05-election",
166
+ "2026-house-al-01-election",
167
+ "2026-house-fl-20-election",
168
+ "2026-house-ma-05-election",
169
+ "2026-house-ca-34-election",
170
+ "2026-house-md-05-election",
171
+ "2026-house-ca-49-election",
172
+ "2026-house-ca-41-election",
173
+ "2026-house-tn-04-election",
174
+ "2026-house-tx-35-election",
175
+ "2026-house-co-07-election",
176
+ "2026-house-oh-13-election",
177
+ "2026-house-ny-24-election",
178
+ "2026-house-ca-36-election",
179
+ "2026-house-ga-11-election",
180
+ "2026-house-sc-01-election",
181
+ "2026-house-ca-20-election",
182
+ "2026-house-nj-12-election",
183
+ "2026-house-mi-13-election",
184
+ "2026-house-ca-29-election",
185
+ "2026-house-ma-03-election",
186
+ "2026-house-md-08-election",
187
+ "2026-house-md-06-election",
188
+ "2026-house-mi-01-election",
189
+ "2026-house-oh-11-election",
190
+ "2026-house-nv-03-election",
191
+ "2026-house-tx-01-election",
192
+ "2026-house-in-05-election",
193
+ "2026-house-ny-23-election",
194
+ "2026-house-co-01-election",
195
+ "2026-house-mi-12-election",
196
+ "2026-house-ia-02-election",
197
+ "2026-house-or-03-election",
198
+ "2026-house-ut-04-election",
199
+ "2026-house-ny-07-election",
200
+ "2026-house-ar-04-election",
201
+ "2026-sen-nm-election",
202
+ "2026-house-hi-01-election",
203
+ "2026-house-tx-15-election",
204
+ "2026-house-md-02-election",
205
+ "2026-house-mi-11-election",
206
+ "2026-house-ca-28-election",
207
+ "2026-house-oh-15-election",
208
+ "2026-house-mo-03-election",
209
+ "2026-house-ga-05-election",
210
+ "2026-house-mo-05-election",
211
+ "2026-house-tn-07-election",
212
+ "2026-house-in-01-election",
213
+ "2026-house-de-al-election",
214
+ "2026-house-wv-01-election",
215
+ "2026-house-co-04-election",
216
+ "2026-house-tx-10-election",
217
+ "2026-house-fl-17-election",
218
+ "2026-house-nd-al-election",
219
+ "2026-house-ny-21-election",
220
+ "2026-house-ky-05-election",
221
+ "2026-house-md-04-election",
222
+ "2026-house-oh-03-election",
223
+ "2026-house-sc-02-election",
224
+ "2026-house-ma-02-election",
225
+ "2026-house-fl-01-election",
226
+ "2026-house-ny-06-election",
227
+ "2026-house-il-12-election",
228
+ "2026-house-va-06-election",
229
+ "2026-house-tx-06-election",
230
+ "2026-house-ca-51-election",
231
+ "2026-house-ok-05-election",
232
+ "2026-house-va-08-election",
233
+ "2026-house-wv-02-election",
234
+ "2026-house-ca-32-election",
235
+ "2026-house-pa-11-election",
236
+ "2026-house-mn-05-election",
237
+ "2026-house-mn-04-election",
238
+ "2026-house-ca-26-election",
239
+ "2026-house-ca-10-election",
240
+ "2026-house-fl-23-election",
241
+ "2026-house-ca-04-election",
242
+ "2026-house-nc-01-election",
243
+ "2026-house-mn-08-election",
244
+ "2026-house-ny-12-election",
245
+ "2026-house-mn-03-election",
246
+ "2026-house-ms-04-election",
247
+ "2026-house-oh-06-election",
248
+ "2026-house-il-03-election",
249
+ "2026-house-mi-09-election",
250
+ "2026-house-tx-27-election",
251
+ "2026-house-ri-02-election",
252
+ "2026-house-co-06-election",
253
+ "2026-house-tx-21-election",
254
+ "2026-house-mt-02-election",
255
+ "2026-sen-or-election",
256
+ "2026-house-tn-01-election",
257
+ "2026-house-mi-10-election",
258
+ "2026-sen-ak-election",
259
+ "2026-house-ky-03-election",
260
+ "2026-house-ca-48-election",
261
+ "2026-house-tx-05-election",
262
+ "2026-house-il-05-election",
263
+ "2026-house-il-10-election",
264
+ "2026-house-ca-21-election",
265
+ "2026-house-tx-28-election",
266
+ "2026-house-pa-09-election",
267
+ "2026-sen-wv-election",
268
+ "2026-house-nh-02-election",
269
+ "2026-house-sc-07-election",
270
+ "2026-house-nj-04-election",
271
+ "2026-house-mi-08-election",
272
+ "2026-house-wa-09-election",
273
+ "2026-house-il-13-election",
274
+ "2026-house-ma-01-election",
275
+ "2026-house-tx-26-election",
276
+ "2026-house-mo-04-election",
277
+ "2026-house-ma-08-election",
278
+ "2026-house-tx-08-election",
279
+ "2026-house-la-01-election",
280
+ "2026-house-ny-09-election",
281
+ "2026-house-wa-01-election",
282
+ "2026-house-il-14-election",
283
+ "2026-house-ca-17-election",
284
+ "2026-house-wi-06-election",
285
+ "2026-house-tx-12-election",
286
+ "2026-house-fl-05-election",
287
+ "2026-house-oh-04-election",
288
+ "2026-sen-me-election",
289
+ "2026-house-ne-03-election",
290
+ "2026-sen-va-election",
291
+ "2026-house-ct-01-election",
292
+ "2026-house-tx-16-election",
293
+ "2026-house-il-06-election",
294
+ "2026-house-wa-02-election",
295
+ "2026-house-nc-09-election",
296
+ "2026-house-sc-06-election",
297
+ "2026-house-ut-01-election",
298
+ "2026-house-ca-15-election",
299
+ "2026-house-ky-06-election",
300
+ "2026-house-ca-14-election",
301
+ "2026-sen-wy-election",
302
+ "2026-sen-ks-election",
303
+ "2026-house-co-02-election",
304
+ "2026-house-az-09-election",
305
+ "2026-house-mi-07-election",
306
+ "2026-house-ny-08-election",
307
+ "2026-house-ga-04-election",
308
+ "2026-house-md-01-election",
309
+ "2026-house-or-02-election",
310
+ "2026-house-ca-22-election",
311
+ "2026-sen-fl-election",
312
+ "2026-sen-oh-election",
313
+ "2026-house-in-02-election",
314
+ "2026-house-fl-10-election",
315
+ "2026-house-az-06-election",
316
+ "2026-house-tx-14-election",
317
+ "2026-house-wi-01-election",
318
+ "2026-house-va-01-election",
319
+ "2026-house-in-03-election",
320
+ "2026-house-md-03-election",
321
+ "2026-house-ks-02-election",
322
+ "2026-house-ga-13-election",
323
+ "2026-house-fl-07-election",
324
+ "2026-house-tx-17-election",
325
+ "2026-house-va-04-election",
326
+ "2026-house-mi-03-election",
327
+ "2026-sen-ok-election",
328
+ "2026-house-nv-04-election",
329
+ "2026-house-sc-05-election",
330
+ "2026-house-pa-04-election",
331
+ "2026-house-ny-25-election",
332
+ "2026-house-il-16-election",
333
+ "2026-house-la-02-election",
334
+ "2026-house-fl-09-election",
335
+ "2026-house-in-04-election",
336
+ "2026-house-ca-45-election",
337
+ "2026-house-tx-33-election",
338
+ "2026-sen-ms-election",
339
+ "2026-house-al-06-election",
340
+ "2026-house-tx-19-election",
341
+ "2026-house-pa-05-election",
342
+ "2026-house-ny-16-election",
343
+ "2026-house-in-08-election",
344
+ "2026-house-nc-04-election",
345
+ "2026-house-or-06-election",
346
+ "2026-house-tx-02-election",
347
+ "2026-house-nc-14-election",
348
+ "2026-house-pa-14-election",
349
+ "2026-house-nm-03-election",
350
+ "2026-house-ct-05-election",
351
+ "2026-house-il-09-election",
352
+ "2026-house-va-10-election",
353
+ "2026-house-ca-06-election",
354
+ "2026-house-ms-03-election",
355
+ "2026-house-fl-08-election",
356
+ "2026-house-ga-07-election",
357
+ "2026-house-tx-03-election",
358
+ "2026-house-ca-46-election",
359
+ "2026-house-pa-06-election",
360
+ "2026-house-oh-05-election",
361
+ "2026-house-va-11-election",
362
+ "2026-house-tx-22-election",
363
+ "2026-house-nj-06-election",
364
+ "2026-house-tn-05-election",
365
+ "2026-house-ny-20-election",
366
+ "2026-house-oh-14-election",
367
+ "2026-house-ia-01-election",
368
+ "2026-house-fl-02-election",
369
+ "2026-house-al-02-election",
370
+ "2026-house-ia-03-election",
371
+ "2026-house-me-02-election",
372
+ "2026-house-va-02-election",
373
+ "2026-house-nj-02-election",
374
+ "2026-house-wi-05-election",
375
+ "2026-house-ar-02-election",
376
+ "2026-house-tn-08-election",
377
+ "2026-house-ca-52-election",
378
+ "2026-house-ok-04-election",
379
+ "2026-sen-mn-election",
380
+ "2026-sen-sd-election",
381
+ "2026-house-ca-47-election",
382
+ "2026-house-ca-50-election",
383
+ "2026-house-ny-26-election",
384
+ "2026-house-la-03-election",
385
+ "2026-house-mo-07-election",
386
+ "2026-house-la-06-election",
387
+ "2026-house-pa-17-election",
388
+ "2026-house-wa-04-election",
389
+ "2026-house-tn-03-election",
390
+ "2026-house-nj-01-election",
391
+ "2026-sen-ky-election",
392
+ "2026-house-tx-29-election",
393
+ "2026-house-fl-25-election",
394
+ "2026-house-ny-19-election",
395
+ "2026-house-nc-03-election",
396
+ "2026-house-ak-al-election",
397
+ "2026-house-or-04-election",
398
+ "2026-sen-nj-election",
399
+ "2026-house-mi-02-election",
400
+ "2026-house-ny-18-election",
401
+ "2026-house-ny-17-election",
402
+ "2026-house-ca-07-election",
403
+ "2026-house-tx-30-election",
404
+ "2026-house-pa-01-election",
405
+ "2026-house-nm-02-election",
406
+ "2026-house-wa-07-election",
407
+ "2026-house-ca-11-election",
408
+ "2026-house-tx-37-election",
409
+ "2026-house-il-17-election",
410
+ "2026-house-tx-31-election",
411
+ "2026-house-fl-16-election",
412
+ "2026-house-nc-05-election",
413
+ "2026-house-mo-08-election",
414
+ "2026-house-fl-24-election",
415
+ "2026-house-oh-07-election",
416
+ "2026-sen-il-election",
417
+ "2026-house-ky-02-election",
418
+ "2026-house-pa-13-election",
419
+ "2026-house-pa-16-election",
420
+ "2026-house-mo-02-election",
421
+ "2026-house-mi-06-election",
422
+ "2026-house-ct-03-election",
423
+ "2026-house-ut-02-election",
424
+ "2026-house-tx-25-election",
425
+ "2026-house-pa-03-election",
426
+ "2026-house-fl-21-election",
427
+ "2026-house-ca-05-election",
428
+ "2026-house-ma-09-election",
429
+ "2026-house-wa-03-election",
430
+ "2026-house-nj-03-election",
431
+ "2026-house-wa-05-election",
432
+ "2026-house-az-01-election",
433
+ "2026-house-fl-06-election",
434
+ "2026-house-az-03-election",
435
+ "2026-house-pa-02-election",
436
+ "2026-house-la-04-election",
437
+ "2026-house-tx-24-election",
438
+ "2026-house-wi-03-election",
439
+ "2026-house-nj-08-election",
440
+ "2026-house-wi-08-election",
441
+ "2026-house-ny-15-election",
442
+ "2026-house-sd-al-election",
443
+ "2026-house-ca-12-election",
444
+ "2026-house-wa-06-election",
445
+ "2026-house-ks-01-election",
446
+ "2026-sen-co-election",
447
+ "2026-house-ca-35-election",
448
+ "2026-house-ny-02-election",
449
+ "2026-house-nj-11-election",
450
+ "2026-house-tx-18-election",
451
+ "2026-house-md-07-election",
452
+ "2026-house-ma-04-election",
453
+ "2026-house-ca-24-election",
454
+ "2026-house-pa-10-election",
455
+ "2026-house-il-15-election",
456
+ "2026-house-mi-04-election",
457
+ "2026-house-wi-02-election",
458
+ "2026-house-fl-28-election",
459
+ "2026-house-ct-04-election",
460
+ "2026-house-ca-23-election",
461
+ "2026-house-va-05-election",
462
+ "2026-sen-ia-election",
463
+ "2026-house-al-04-election",
464
+ "2026-house-oh-10-election",
465
+ "2026-house-ma-06-election",
466
+ "2026-house-ga-08-election",
467
+ "2026-house-ca-01-election",
468
+ "2026-house-az-08-election",
469
+ "2026-house-ny-03-election",
470
+ "2026-house-co-08-election",
471
+ "2026-house-ut-03-election"
472
+ ])
473
+
474
+ export default election_ids
package/Config.ts DELETED
File without changes
package/config.js DELETED
File without changes