jcbowyer commited on
Commit
403acdf
·
verified ·
1 Parent(s): bd7ca0d

Deploy: Consolidated gold tables, fixed nginx docs routing

Browse files
api/routes/bills_neon.py CHANGED
@@ -100,7 +100,8 @@ async def fetch_bills_from_parquet(
100
  limit: int = 50,
101
  offset: int = 0
102
  ) -> Dict[str, Any]:
103
- """Fetch bills from parquet files using DuckDB (detailed drill-down). Supports multi-select filters.\"\"\"\n try:
 
104
  # Use flat file structure (all states in one file)
105
  bills_file = GOLD_DIR / "bills_bills.parquet"
106
 
@@ -141,34 +142,44 @@ async def fetch_bills_from_parquet(
141
  pattern = f'%{q}%'
142
  params.extend([pattern, pattern])
143
 
144
- if session:
145
- where_clauses.append("session = ?")
146
- params.append(session)
147
-
148
- # Chamber filter (based on bill number prefix)
149
- if chamber:
150
- if chamber.lower() == 'house':
151
- where_clauses.append("(bill_number LIKE 'HB%' OR bill_number LIKE 'HR%' OR bill_number LIKE 'HJR%' OR bill_number LIKE 'HCR%' OR bill_number LIKE 'HJM%' OR bill_number LIKE 'H %')")
152
- elif chamber.lower() == 'senate':
153
- where_clauses.append("(bill_number LIKE 'SB%' OR bill_number LIKE 'SR%' OR bill_number LIKE 'SJR%' OR bill_number LIKE 'SCR%' OR bill_number LIKE 'SJM%' OR bill_number LIKE 'S %')")
154
- elif chamber.lower() == 'joint':
155
- where_clauses.append("(bill_number LIKE '%JR%' OR bill_number LIKE '%JM%')")
156
-
157
- # Bill type filter (based on bill number pattern)
158
- if bill_type:
159
- if bill_type == 'bill':
160
- where_clauses.append("(bill_number LIKE 'HB%' OR bill_number LIKE 'SB%' OR bill_number LIKE 'AB%')")
161
- elif bill_type == 'resolution':
162
- where_clauses.append("(bill_number LIKE 'HR%' OR bill_number LIKE 'SR%' OR bill_number LIKE 'AR%')")
163
- elif bill_type == 'joint_resolution':
164
- where_clauses.append("(bill_number LIKE 'HJR%' OR bill_number LIKE 'SJR%' OR bill_number LIKE 'AJR%')")
165
- elif bill_type == 'concurrent_resolution':
166
- where_clauses.append("(bill_number LIKE 'HCR%' OR bill_number LIKE 'SCR%')")
167
- elif bill_type == 'memorial':
168
- where_clauses.append("(bill_number LIKE 'HJM%' OR bill_number LIKE 'SJM%')")
169
-
170
- # Status filter (based on latest_action_description)
171
- if status:
 
 
 
 
 
 
 
 
 
 
172
  status_keywords = {
173
  'enacted': 'Enacted',
174
  'passed': 'passed|Passed',
@@ -178,16 +189,22 @@ async def fetch_bills_from_parquet(
178
  'referred': 'referred|Referred',
179
  'reported': 'reported|Reported'
180
  }
181
- keyword = status_keywords.get(status.lower(), status)
182
 
183
- if '|' in keyword:
184
- keyword_parts = keyword.split('|')
185
- keyword_clauses = ["LOWER(latest_action_description) LIKE LOWER(?)"] * len(keyword_parts)
186
- where_clauses.append(f"({' OR '.join(keyword_clauses)})")
187
- params.extend([f'%{kw}%' for kw in keyword_parts])
188
- else:
189
- where_clauses.append("LOWER(latest_action_description) LIKE LOWER(?)")
190
- params.append(f'%{keyword}%')
 
 
 
 
 
 
 
191
 
192
  where_clause = " AND ".join(where_clauses)
193
 
@@ -262,12 +279,12 @@ async def fetch_bills_from_parquet(
262
  async def fetch_sessions_from_parquet(
263
  state: str,
264
  topic: Optional[str] = None,
265
- chamber: Optional[str] = None,
266
- bill_type: Optional[str] = None,
267
- status: Optional[str] = None,
268
  q: Optional[str] = None
269
  ) -> Dict[str, Any]:
270
- """Fetch sessions from parquet files using DuckDB, filtered by active filters."""
271
  try:
272
  # Use flat file structure (all states in one file)
273
  bills_file = GOLD_DIR / "bills_bills.parquet"
@@ -296,17 +313,21 @@ async def fetch_sessions_from_parquet(
296
  where_conditions.append(f"REGEXP_MATCHES(LOWER(title), LOWER(?))")
297
  params.append(keyword)
298
 
299
- # Chamber filter
300
- if chamber:
301
- if chamber.lower() == 'house':
302
- where_conditions.append("(bill_number LIKE 'HB%' OR bill_number LIKE 'HR%' OR bill_number LIKE 'HJR%' OR bill_number LIKE 'HCR%' OR bill_number LIKE 'HJM%')")
303
- elif chamber.lower() == 'senate':
304
- where_conditions.append("(bill_number LIKE 'SB%' OR bill_number LIKE 'SR%' OR bill_number LIKE 'SJR%' OR bill_number LIKE 'SCR%' OR bill_number LIKE 'SJM%')")
305
- elif chamber.lower() == 'joint':
306
- where_conditions.append("(bill_number LIKE '%JR%' OR bill_number LIKE '%JM%')")
307
-
308
- # Bill type filter
309
- if bill_type:
 
 
 
 
310
  type_patterns = {
311
  'bill': "(bill_number LIKE 'HB%' OR bill_number LIKE 'SB%' OR bill_number LIKE 'AB%')",
312
  'resolution': "(bill_number LIKE 'HR%' OR bill_number LIKE 'SR%' OR bill_number LIKE 'AR%')",
@@ -314,11 +335,15 @@ async def fetch_sessions_from_parquet(
314
  'concurrent_resolution': "(bill_number LIKE 'HCR%' OR bill_number LIKE 'SCR%')",
315
  'memorial': "(bill_number LIKE 'HJM%' OR bill_number LIKE 'SJM%')"
316
  }
317
- if bill_type.lower() in type_patterns:
318
- where_conditions.append(type_patterns[bill_type.lower()])
319
-
320
- # Status filter
321
- if status:
 
 
 
 
322
  status_keywords = {
323
  'enacted': 'Enacted',
324
  'passed': 'passed|Passed',
@@ -328,9 +353,13 @@ async def fetch_sessions_from_parquet(
328
  'referred': 'referred|Referred',
329
  'reported': 'reported|Reported'
330
  }
331
- keyword = status_keywords.get(status.lower(), status)
332
- where_conditions.append(f"REGEXP_MATCHES(COALESCE(latest_action_description, ''), ?)")
333
- params.append(keyword)
 
 
 
 
334
 
335
  # Search query
336
  if q:
 
100
  limit: int = 50,
101
  offset: int = 0
102
  ) -> Dict[str, Any]:
103
+ """Fetch bills from parquet files using DuckDB (detailed drill-down). Supports multi-select filters."""
104
+ try:
105
  # Use flat file structure (all states in one file)
106
  bills_file = GOLD_DIR / "bills_bills.parquet"
107
 
 
142
  pattern = f'%{q}%'
143
  params.extend([pattern, pattern])
144
 
145
+ # Sessions filter (multi-select)
146
+ if sessions and len(sessions) > 0:
147
+ session_placeholders = ','.join(['?'] * len(sessions))
148
+ where_clauses.append(f"session IN ({session_placeholders})")
149
+ params.extend(sessions)
150
+
151
+ # Chamber filter (multi-select - based on bill number prefix)
152
+ if chambers and len(chambers) > 0:
153
+ chamber_conditions = []
154
+ for chamber in chambers:
155
+ if chamber.lower() == 'house':
156
+ chamber_conditions.append("(bill_number LIKE 'HB%' OR bill_number LIKE 'HR%' OR bill_number LIKE 'HJR%' OR bill_number LIKE 'HCR%' OR bill_number LIKE 'HJM%' OR bill_number LIKE 'H %')")
157
+ elif chamber.lower() == 'senate':
158
+ chamber_conditions.append("(bill_number LIKE 'SB%' OR bill_number LIKE 'SR%' OR bill_number LIKE 'SJR%' OR bill_number LIKE 'SCR%' OR bill_number LIKE 'SJM%' OR bill_number LIKE 'S %')")
159
+ elif chamber.lower() == 'joint':
160
+ chamber_conditions.append("(bill_number LIKE '%JR%' OR bill_number LIKE '%JM%')")
161
+ if chamber_conditions:
162
+ where_clauses.append(f"({' OR '.join(chamber_conditions)})")
163
+
164
+ # Bill type filter (multi-select - based on bill number pattern)
165
+ if bill_types and len(bill_types) > 0:
166
+ type_conditions = []
167
+ for bill_type in bill_types:
168
+ if bill_type == 'bill':
169
+ type_conditions.append("(bill_number LIKE 'HB%' OR bill_number LIKE 'SB%' OR bill_number LIKE 'AB%')")
170
+ elif bill_type == 'resolution':
171
+ type_conditions.append("(bill_number LIKE 'HR%' OR bill_number LIKE 'SR%' OR bill_number LIKE 'AR%')")
172
+ elif bill_type == 'joint_resolution':
173
+ type_conditions.append("(bill_number LIKE 'HJR%' OR bill_number LIKE 'SJR%' OR bill_number LIKE 'AJR%')")
174
+ elif bill_type == 'concurrent_resolution':
175
+ type_conditions.append("(bill_number LIKE 'HCR%' OR bill_number LIKE 'SCR%')")
176
+ elif bill_type == 'memorial':
177
+ type_conditions.append("(bill_number LIKE 'HJM%' OR bill_number LIKE 'SJM%')")
178
+ if type_conditions:
179
+ where_clauses.append(f"({' OR '.join(type_conditions)})")
180
+
181
+ # Status filter (multi-select - based on latest_action_description)
182
+ if statuses and len(statuses) > 0:
183
  status_keywords = {
184
  'enacted': 'Enacted',
185
  'passed': 'passed|Passed',
 
189
  'referred': 'referred|Referred',
190
  'reported': 'reported|Reported'
191
  }
 
192
 
193
+ status_conditions = []
194
+ for status in statuses:
195
+ keyword = status_keywords.get(status.lower(), status)
196
+
197
+ if '|' in keyword:
198
+ keyword_parts = keyword.split('|')
199
+ keyword_clauses = ["LOWER(latest_action_description) LIKE LOWER(?)"] * len(keyword_parts)
200
+ status_conditions.append(f"({' OR '.join(keyword_clauses)})")
201
+ params.extend([f'%{kw}%' for kw in keyword_parts])
202
+ else:
203
+ status_conditions.append("LOWER(latest_action_description) LIKE LOWER(?)")
204
+ params.append(f'%{keyword}%')
205
+
206
+ if status_conditions:
207
+ where_clauses.append(f"({' OR '.join(status_conditions)})")
208
 
209
  where_clause = " AND ".join(where_clauses)
210
 
 
279
  async def fetch_sessions_from_parquet(
280
  state: str,
281
  topic: Optional[str] = None,
282
+ chambers: Optional[List[str]] = None,
283
+ bill_types: Optional[List[str]] = None,
284
+ statuses: Optional[List[str]] = None,
285
  q: Optional[str] = None
286
  ) -> Dict[str, Any]:
287
+ """Fetch sessions from parquet files using DuckDB, filtered by active filters. Supports multi-select."""
288
  try:
289
  # Use flat file structure (all states in one file)
290
  bills_file = GOLD_DIR / "bills_bills.parquet"
 
313
  where_conditions.append(f"REGEXP_MATCHES(LOWER(title), LOWER(?))")
314
  params.append(keyword)
315
 
316
+ # Chamber filter (multi-select)
317
+ if chambers and len(chambers) > 0:
318
+ chamber_conditions = []
319
+ for chamber in chambers:
320
+ if chamber.lower() == 'house':
321
+ chamber_conditions.append("(bill_number LIKE 'HB%' OR bill_number LIKE 'HR%' OR bill_number LIKE 'HJR%' OR bill_number LIKE 'HCR%' OR bill_number LIKE 'HJM%')")
322
+ elif chamber.lower() == 'senate':
323
+ chamber_conditions.append("(bill_number LIKE 'SB%' OR bill_number LIKE 'SR%' OR bill_number LIKE 'SJR%' OR bill_number LIKE 'SCR%' OR bill_number LIKE 'SJM%')")
324
+ elif chamber.lower() == 'joint':
325
+ chamber_conditions.append("(bill_number LIKE '%JR%' OR bill_number LIKE '%JM%')")
326
+ if chamber_conditions:
327
+ where_conditions.append(f"({' OR '.join(chamber_conditions)})")
328
+
329
+ # Bill type filter (multi-select)
330
+ if bill_types and len(bill_types) > 0:
331
  type_patterns = {
332
  'bill': "(bill_number LIKE 'HB%' OR bill_number LIKE 'SB%' OR bill_number LIKE 'AB%')",
333
  'resolution': "(bill_number LIKE 'HR%' OR bill_number LIKE 'SR%' OR bill_number LIKE 'AR%')",
 
335
  'concurrent_resolution': "(bill_number LIKE 'HCR%' OR bill_number LIKE 'SCR%')",
336
  'memorial': "(bill_number LIKE 'HJM%' OR bill_number LIKE 'SJM%')"
337
  }
338
+ type_conditions = []
339
+ for bill_type in bill_types:
340
+ if bill_type.lower() in type_patterns:
341
+ type_conditions.append(type_patterns[bill_type.lower()])
342
+ if type_conditions:
343
+ where_conditions.append(f"({' OR '.join(type_conditions)})")
344
+
345
+ # Status filter (multi-select)
346
+ if statuses and len(statuses) > 0:
347
  status_keywords = {
348
  'enacted': 'Enacted',
349
  'passed': 'passed|Passed',
 
353
  'referred': 'referred|Referred',
354
  'reported': 'reported|Reported'
355
  }
356
+ status_conditions = []
357
+ for status in statuses:
358
+ keyword = status_keywords.get(status.lower(), status)
359
+ status_conditions.append(f"REGEXP_MATCHES(COALESCE(latest_action_description, ''), ?)")
360
+ params.append(keyword)
361
+ if status_conditions:
362
+ where_conditions.append(f"({' OR '.join(status_conditions)})")
363
 
364
  # Search query
365
  if q:
website/.docusaurus/client-manifest.json CHANGED
@@ -284,529 +284,529 @@
284
  "89278839": [
285
  "1552"
286
  ],
287
- "8646f863": [
288
- "6081"
289
- ],
290
- "86c803b8": [
291
- "4994"
292
  ],
293
- "874722f4": [
294
- "5714"
 
 
295
  ],
296
- "8d6b8d90": [
297
- "4193"
298
  ],
299
- "90aab45b": [
300
- "4346"
301
  ],
302
- "91cf3552": [
303
- "8104"
304
  ],
305
- "9278cb53": [
306
- "861"
 
307
  ],
308
- "938cd79c": [
309
- "2636"
310
  ],
311
- "959981b8": [
312
- "6113"
313
  ],
314
- "95baff2c": [
315
- "8120"
316
  ],
317
- "9b5c4037": [
318
- "81"
319
  ],
320
- "9e4087bc": [
321
- "9660"
322
  ],
323
- "a17490c4": [
324
- "5379"
325
  ],
326
- "a3c378d6": [
327
- "9899"
328
  ],
329
- "a57422ce": [
330
- "225"
331
  ],
332
- "a6aa9e1f": [
333
- "4014",
334
- "6726",
335
- "8237",
336
- "7496"
337
  ],
338
- "a6ededbc": [
339
- "2964"
340
  ],
341
- "a7456010": [
342
- "3056"
343
  ],
344
- "a7bd4aaa": [
345
- "5575"
346
  ],
347
- "a854d728": [
348
- "7063"
349
  ],
350
- "a94703ab": [
351
  "4014",
352
- "6785"
353
- ],
354
- "a95a2470": [
355
- "773"
356
- ],
357
- "aba21aa0": [
358
- "3747"
359
- ],
360
- "acecf23e": [
361
- "3220"
362
  ],
363
- "af8066c0": [
364
- "3992"
 
 
365
  ],
366
- "b1377ae2": [
367
- "3240"
368
  ],
369
- "b2eec267": [
370
- "7328"
371
  ],
372
- "b3111c4a": [
373
- "350"
374
  ],
375
- "b6c46527": [
376
- "9729"
377
  ],
378
- "bffe1e68": [
379
- "493"
380
  ],
381
- "c15d9823": [
382
- "6431"
383
  ],
384
- "c1a5f889": [
385
- "5135"
386
  ],
387
- "c2e51a2e": [
388
- "1236"
389
  ],
390
- "c63cd60d": [
391
- "3665"
392
  ],
393
- "c6b4dc09": [
394
- "9793"
395
  ],
396
- "c958f839": [
397
- "4231"
398
  ],
399
- "c994a3bf": [
400
- "8181"
401
  ],
402
- "ca57b454": [
403
- "1783"
404
  ],
405
- "cb2c33b2": [
406
- "6116"
407
  ],
408
- "cc4c6cba": [
409
- "7005"
410
  ],
411
- "cc57af1c": [
412
- "7421"
413
  ],
414
- "ccc49370": [
415
  "4014",
416
  "6726",
417
  "8237",
418
- "6074"
419
  ],
420
- "d0f06ba7": [
421
- "6466"
422
  ],
423
- "d1184b64": [
424
- "5026"
425
  ],
426
- "d3c0d0ad": [
427
- "3243"
428
  ],
429
- "d4d6021b": [
430
- "2219"
431
  ],
432
- "d7a6080c": [
433
- "4535"
434
  ],
435
- "d7bd94f3": [
436
- "5721"
437
  ],
438
- "main": [
439
- "4014",
440
- "9783",
441
- "1889"
442
  ],
443
- "da51c82f": [
444
- "5446"
445
  ],
446
- "dbd2c8cf": [
447
- "7554"
448
  ],
449
- "dc8e8e39": [
450
- "9009"
451
  ],
452
- "dd55db81": [
453
- "7935"
454
  ],
455
- "deb90a5a": [
456
- "4307"
457
  ],
458
- "df7eb2d3": [
459
- "7335"
460
  ],
461
- "e1948f67": [
462
- "2282"
463
  ],
464
- "e1a4af30": [
465
- "1824"
466
  ],
467
- "e28298d1": [
468
- "4163"
469
  ],
470
- "e48def05": [
471
- "2029"
472
  ],
473
- "e7565c19": [
474
- "6505"
475
  ],
476
- "ea52ce0e": [
477
- "5082"
478
  ],
479
- "eaaf1723": [
480
- "8906"
481
  ],
482
- "ec048c45": [
483
- "9310"
 
 
484
  ],
485
- "ee0f2835": [
486
- "8046"
487
  ],
488
- "ef8b811a": [
489
- "8416"
 
 
 
490
  ],
491
- "ef8dafab": [
492
- "495"
493
  ],
494
- "f2edc127": [
495
- "8898"
496
  ],
497
- "f3587bcb": [
498
- "7138"
499
  ],
500
- "f4773002": [
501
- "7353"
502
  ],
503
- "f554a53f": [
504
- "8259"
505
  ],
506
- "f65f870b": [
507
- "5936"
508
  ],
509
- "f81c1134": [
510
- "6607"
511
  ],
512
- "f89dab05": [
513
- "4014",
514
- "7477",
515
- "8831"
516
  ],
517
- "f9cc9c69": [
518
- "878"
519
  ],
520
- "fbb106eb": [
521
- "4444"
522
  ],
523
- "fc11b217": [
524
- "901"
525
  ],
526
- "fd1c29a0": [
527
- "9574"
528
  ],
529
- "fdc15dc7": [
530
- "2545"
531
  ],
532
- "ff07523c": [
533
- "1932"
534
  ],
535
- "styles": [
536
- "106",
537
- "1221",
538
- "1889",
539
- "48",
540
- "6074",
541
- "6726",
542
- "6785",
543
- "7182",
544
- "7477",
545
- "7496",
546
- "766",
547
- "8237",
548
- "8831",
549
- "9452",
550
- "9783",
551
- "9786",
552
- "4014"
553
  ],
554
- "runtime~main": [
555
- "1889",
556
- "4014",
557
- "9783"
558
  ],
559
- "0058b4c6": [
560
- "266"
561
  ],
562
- "00ee7c5d": [
563
- "5801"
564
  ],
565
- "011569de": [
566
- "9467"
567
  ],
568
- "01a85c17": [
569
- "4014",
570
- "9786"
571
  ],
572
- "020ab42c": [
573
- "4256"
574
  ],
575
- "035e6482": [
576
- "8063"
577
  ],
578
- "05dd1d8d": [
579
- "7766"
580
  ],
581
- "06fec20e": [
582
- "6937"
583
  ],
584
- "071ce53f": [
585
- "6106"
586
  ],
587
- "0af73ac6": [
588
- "6301"
589
  ],
590
- "0e384e19": [
591
- "5217"
592
  ],
593
- "0f8348c9": [
594
- "8055"
595
  ],
596
- "122286dc": [
597
- "9888"
598
  ],
599
- "16ee712e": [
600
- "4264"
601
  ],
602
- "1701597a": [
603
- "9077"
604
  ],
605
- "184fdeb8": [
606
- "2942"
607
  ],
608
- "1857e65d": [
609
- "3991"
610
  ],
611
- "1df93b7f": [
612
- "4014",
613
- "9452"
614
  ],
615
- "1f391b9e": [
 
 
 
 
 
 
616
  "4014",
 
617
  "8237",
618
- "7182"
619
  ],
620
- "20f3ce0e": [
621
- "274"
622
  ],
623
- "215821a5": [
624
- "5931"
625
  ],
626
- "224f762a": [
627
- "8298"
628
  ],
629
- "22d74879": [
630
- "3709"
631
  ],
632
- "22dbb513": [
633
- "5143"
 
634
  ],
635
- "23ac305d": [
636
- "4229"
637
  ],
638
- "249ac11a": [
639
- "5842"
640
  ],
641
- "24e5de49": [
642
- "1216"
643
  ],
644
- "27d6fb54": [
645
- "2672"
646
  ],
647
- "297bc4f0": [
648
- "1225"
649
  ],
650
- "2a86608d": [
651
- "6021"
652
  ],
653
- "2ac6a958": [
654
- "7743"
655
  ],
656
- "2d004e28": [
657
- "235"
658
  ],
659
- "2dcffdcf": [
660
- "7540"
661
  ],
662
- "2df74038": [
663
- "8926"
664
  ],
665
- "2f594f76": [
666
- "6033"
667
  ],
668
- "33fc5bb8": [
669
- "4014",
670
- "6726",
671
- "8237",
672
- "48"
673
  ],
674
- "3596a262": [
675
- "9072"
676
  ],
677
- "36994c47": [
678
- "191"
679
  ],
680
- "371baba0": [
681
- "6419"
682
  ],
683
- "3a2db09e": [
684
- "3186"
685
  ],
686
- "3d7971ff": [
687
- "9279"
688
  ],
689
- "3dfafb05": [
690
- "589"
691
  ],
692
- "41ded513": [
693
- "4955"
694
  ],
695
- "42b80eee": [
696
- "2025"
697
  ],
698
- "43ba02d6": [
699
- "1948"
 
 
 
700
  ],
701
- "46d8d6fc": [
702
- "2779"
703
  ],
704
- "47d496d4": [
705
- "5122"
706
  ],
707
- "48160a85": [
708
- "5791"
709
  ],
710
- "4c678320": [
711
- "1209"
712
  ],
713
- "4ddfc27f": [
714
- "762"
715
  ],
716
- "4f1578d6": [
717
- "1941"
718
  ],
719
- "5281b7a2": [
720
- "3320"
721
  ],
722
- "52c68f1c": [
723
- "868"
724
  ],
725
- "53008bd0": [
726
- "966"
727
  ],
728
- "5e95c892": [
729
- "1668"
730
  ],
731
- "608f8f4c": [
732
- "211"
733
  ],
734
- "621db11d": [
735
- "4014",
736
- "6726",
737
- "1221"
738
  ],
739
- "67035fb1": [
740
- "4260"
741
  ],
742
- "6875c492": [
743
- "4014",
744
- "6726",
745
- "8237",
746
- "766"
747
  ],
748
- "69224f44": [
749
- "7891"
750
  ],
751
- "698cef23": [
752
- "5159"
753
  ],
754
- "6bd96ecd": [
755
- "8445"
756
  ],
757
- "6c022c79": [
758
- "4426"
759
  ],
760
- "6c862ec2": [
761
- "8129"
762
  ],
763
- "6db2cc7b": [
764
- "4477"
765
  ],
766
- "6f29455b": [
767
- "1845"
768
  ],
769
- "6fadd3e1": [
770
- "6442"
771
  ],
772
- "70e89930": [
773
- "6259"
774
  ],
775
- "72a86031": [
776
- "4098"
777
  ],
778
- "73ebe191": [
779
- "6829"
780
  ],
781
- "74e0a9ef": [
782
- "6299"
783
  ],
784
- "77a3964f": [
785
- "9635"
786
  ],
787
- "7b6313aa": [
788
- "7332"
789
  ],
790
- "7bd65a14": [
791
- "96"
792
  ],
793
- "7cc5d0e6": [
794
- "6433"
 
 
795
  ],
796
- "7cec0ac4": [
797
- "5450"
798
  ],
799
- "7df5fd2d": [
800
- "4234"
801
  ],
802
- "8070e160": [
803
- "6499"
804
  ],
805
- "814f3328": [
806
- "1833"
807
  ],
808
- "8286586d": [
809
- "2383"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
810
  ]
811
  },
812
  "assets": {
 
284
  "89278839": [
285
  "1552"
286
  ],
287
+ "main": [
288
+ "4014",
289
+ "9783",
290
+ "1889"
 
291
  ],
292
+ "runtime~main": [
293
+ "1889",
294
+ "4014",
295
+ "9783"
296
  ],
297
+ "0058b4c6": [
298
+ "266"
299
  ],
300
+ "00ee7c5d": [
301
+ "5801"
302
  ],
303
+ "011569de": [
304
+ "9467"
305
  ],
306
+ "01a85c17": [
307
+ "4014",
308
+ "9786"
309
  ],
310
+ "020ab42c": [
311
+ "4256"
312
  ],
313
+ "035e6482": [
314
+ "8063"
315
  ],
316
+ "05dd1d8d": [
317
+ "7766"
318
  ],
319
+ "06fec20e": [
320
+ "6937"
321
  ],
322
+ "071ce53f": [
323
+ "6106"
324
  ],
325
+ "0af73ac6": [
326
+ "6301"
327
  ],
328
+ "0e384e19": [
329
+ "5217"
330
  ],
331
+ "0f8348c9": [
332
+ "8055"
333
  ],
334
+ "122286dc": [
335
+ "9888"
 
 
 
336
  ],
337
+ "16ee712e": [
338
+ "4264"
339
  ],
340
+ "1701597a": [
341
+ "9077"
342
  ],
343
+ "184fdeb8": [
344
+ "2942"
345
  ],
346
+ "1857e65d": [
347
+ "3991"
348
  ],
349
+ "1df93b7f": [
350
  "4014",
351
+ "9452"
 
 
 
 
 
 
 
 
 
352
  ],
353
+ "1f391b9e": [
354
+ "4014",
355
+ "8237",
356
+ "7182"
357
  ],
358
+ "20f3ce0e": [
359
+ "274"
360
  ],
361
+ "215821a5": [
362
+ "5931"
363
  ],
364
+ "224f762a": [
365
+ "8298"
366
  ],
367
+ "22d74879": [
368
+ "3709"
369
  ],
370
+ "22dbb513": [
371
+ "5143"
372
  ],
373
+ "23ac305d": [
374
+ "4229"
375
  ],
376
+ "249ac11a": [
377
+ "5842"
378
  ],
379
+ "24e5de49": [
380
+ "1216"
381
  ],
382
+ "27d6fb54": [
383
+ "2672"
384
  ],
385
+ "297bc4f0": [
386
+ "1225"
387
  ],
388
+ "2a86608d": [
389
+ "6021"
390
  ],
391
+ "2ac6a958": [
392
+ "7743"
393
  ],
394
+ "2d004e28": [
395
+ "235"
396
  ],
397
+ "2dcffdcf": [
398
+ "7540"
399
  ],
400
+ "2df74038": [
401
+ "8926"
402
  ],
403
+ "2f594f76": [
404
+ "6033"
405
  ],
406
+ "33fc5bb8": [
407
  "4014",
408
  "6726",
409
  "8237",
410
+ "48"
411
  ],
412
+ "3596a262": [
413
+ "9072"
414
  ],
415
+ "36994c47": [
416
+ "191"
417
  ],
418
+ "371baba0": [
419
+ "6419"
420
  ],
421
+ "3a2db09e": [
422
+ "3186"
423
  ],
424
+ "3d7971ff": [
425
+ "9279"
426
  ],
427
+ "3dfafb05": [
428
+ "589"
429
  ],
430
+ "41ded513": [
431
+ "4955"
 
 
432
  ],
433
+ "42b80eee": [
434
+ "2025"
435
  ],
436
+ "43ba02d6": [
437
+ "1948"
438
  ],
439
+ "46d8d6fc": [
440
+ "2779"
441
  ],
442
+ "47d496d4": [
443
+ "5122"
444
  ],
445
+ "48160a85": [
446
+ "5791"
447
  ],
448
+ "4c678320": [
449
+ "1209"
450
  ],
451
+ "4ddfc27f": [
452
+ "762"
453
  ],
454
+ "4f1578d6": [
455
+ "1941"
456
  ],
457
+ "5281b7a2": [
458
+ "3320"
459
  ],
460
+ "52c68f1c": [
461
+ "868"
462
  ],
463
+ "53008bd0": [
464
+ "966"
465
  ],
466
+ "5e95c892": [
467
+ "1668"
468
  ],
469
+ "608f8f4c": [
470
+ "211"
471
  ],
472
+ "621db11d": [
473
+ "4014",
474
+ "6726",
475
+ "1221"
476
  ],
477
+ "67035fb1": [
478
+ "4260"
479
  ],
480
+ "6875c492": [
481
+ "4014",
482
+ "6726",
483
+ "8237",
484
+ "766"
485
  ],
486
+ "69224f44": [
487
+ "7891"
488
  ],
489
+ "698cef23": [
490
+ "5159"
491
  ],
492
+ "6bd96ecd": [
493
+ "8445"
494
  ],
495
+ "6c022c79": [
496
+ "4426"
497
  ],
498
+ "6c862ec2": [
499
+ "8129"
500
  ],
501
+ "6db2cc7b": [
502
+ "4477"
503
  ],
504
+ "6f29455b": [
505
+ "1845"
506
  ],
507
+ "6fadd3e1": [
508
+ "6442"
 
 
509
  ],
510
+ "70e89930": [
511
+ "6259"
512
  ],
513
+ "72a86031": [
514
+ "4098"
515
  ],
516
+ "73ebe191": [
517
+ "6829"
518
  ],
519
+ "74e0a9ef": [
520
+ "6299"
521
  ],
522
+ "77a3964f": [
523
+ "9635"
524
  ],
525
+ "7b6313aa": [
526
+ "7332"
527
  ],
528
+ "7bd65a14": [
529
+ "96"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
530
  ],
531
+ "7cc5d0e6": [
532
+ "6433"
 
 
533
  ],
534
+ "7cec0ac4": [
535
+ "5450"
536
  ],
537
+ "7df5fd2d": [
538
+ "4234"
539
  ],
540
+ "8070e160": [
541
+ "6499"
542
  ],
543
+ "814f3328": [
544
+ "1833"
 
545
  ],
546
+ "8286586d": [
547
+ "2383"
548
  ],
549
+ "8646f863": [
550
+ "6081"
551
  ],
552
+ "86c803b8": [
553
+ "4994"
554
  ],
555
+ "874722f4": [
556
+ "5714"
557
  ],
558
+ "8d6b8d90": [
559
+ "4193"
560
  ],
561
+ "90aab45b": [
562
+ "4346"
563
  ],
564
+ "91cf3552": [
565
+ "8104"
566
  ],
567
+ "9278cb53": [
568
+ "861"
569
  ],
570
+ "938cd79c": [
571
+ "2636"
572
  ],
573
+ "959981b8": [
574
+ "6113"
575
  ],
576
+ "95baff2c": [
577
+ "8120"
578
  ],
579
+ "9b5c4037": [
580
+ "81"
581
  ],
582
+ "9e4087bc": [
583
+ "9660"
584
  ],
585
+ "a17490c4": [
586
+ "5379"
 
587
  ],
588
+ "a3c378d6": [
589
+ "9899"
590
+ ],
591
+ "a57422ce": [
592
+ "225"
593
+ ],
594
+ "a6aa9e1f": [
595
  "4014",
596
+ "6726",
597
  "8237",
598
+ "7496"
599
  ],
600
+ "a6ededbc": [
601
+ "2964"
602
  ],
603
+ "a7456010": [
604
+ "3056"
605
  ],
606
+ "a7bd4aaa": [
607
+ "5575"
608
  ],
609
+ "a854d728": [
610
+ "7063"
611
  ],
612
+ "a94703ab": [
613
+ "4014",
614
+ "6785"
615
  ],
616
+ "a95a2470": [
617
+ "773"
618
  ],
619
+ "aba21aa0": [
620
+ "3747"
621
  ],
622
+ "acecf23e": [
623
+ "3220"
624
  ],
625
+ "af8066c0": [
626
+ "3992"
627
  ],
628
+ "b1377ae2": [
629
+ "3240"
630
  ],
631
+ "b2eec267": [
632
+ "7328"
633
  ],
634
+ "b3111c4a": [
635
+ "350"
636
  ],
637
+ "b6c46527": [
638
+ "9729"
639
  ],
640
+ "bffe1e68": [
641
+ "493"
642
  ],
643
+ "c15d9823": [
644
+ "6431"
645
  ],
646
+ "c1a5f889": [
647
+ "5135"
648
  ],
649
+ "c2e51a2e": [
650
+ "1236"
 
 
 
651
  ],
652
+ "c63cd60d": [
653
+ "3665"
654
  ],
655
+ "c6b4dc09": [
656
+ "9793"
657
  ],
658
+ "c958f839": [
659
+ "4231"
660
  ],
661
+ "c994a3bf": [
662
+ "8181"
663
  ],
664
+ "ca57b454": [
665
+ "1783"
666
  ],
667
+ "cb2c33b2": [
668
+ "6116"
669
  ],
670
+ "cc4c6cba": [
671
+ "7005"
672
  ],
673
+ "cc57af1c": [
674
+ "7421"
675
  ],
676
+ "ccc49370": [
677
+ "4014",
678
+ "6726",
679
+ "8237",
680
+ "6074"
681
  ],
682
+ "d0f06ba7": [
683
+ "6466"
684
  ],
685
+ "d1184b64": [
686
+ "5026"
687
  ],
688
+ "d3c0d0ad": [
689
+ "3243"
690
  ],
691
+ "d4d6021b": [
692
+ "2219"
693
  ],
694
+ "d7a6080c": [
695
+ "4535"
696
  ],
697
+ "d7bd94f3": [
698
+ "5721"
699
  ],
700
+ "da51c82f": [
701
+ "5446"
702
  ],
703
+ "dbd2c8cf": [
704
+ "7554"
705
  ],
706
+ "dc8e8e39": [
707
+ "9009"
708
  ],
709
+ "dd55db81": [
710
+ "7935"
711
  ],
712
+ "deb90a5a": [
713
+ "4307"
714
  ],
715
+ "df7eb2d3": [
716
+ "7335"
 
 
717
  ],
718
+ "e1948f67": [
719
+ "2282"
720
  ],
721
+ "e1a4af30": [
722
+ "1824"
 
 
 
723
  ],
724
+ "e28298d1": [
725
+ "4163"
726
  ],
727
+ "e48def05": [
728
+ "2029"
729
  ],
730
+ "e7565c19": [
731
+ "6505"
732
  ],
733
+ "ea52ce0e": [
734
+ "5082"
735
  ],
736
+ "eaaf1723": [
737
+ "8906"
738
  ],
739
+ "ec048c45": [
740
+ "9310"
741
  ],
742
+ "ee0f2835": [
743
+ "8046"
744
  ],
745
+ "ef8b811a": [
746
+ "8416"
747
  ],
748
+ "ef8dafab": [
749
+ "495"
750
  ],
751
+ "f2edc127": [
752
+ "8898"
753
  ],
754
+ "f3587bcb": [
755
+ "7138"
756
  ],
757
+ "f4773002": [
758
+ "7353"
759
  ],
760
+ "f554a53f": [
761
+ "8259"
762
  ],
763
+ "f65f870b": [
764
+ "5936"
765
  ],
766
+ "f81c1134": [
767
+ "6607"
768
  ],
769
+ "f89dab05": [
770
+ "4014",
771
+ "7477",
772
+ "8831"
773
  ],
774
+ "f9cc9c69": [
775
+ "878"
776
  ],
777
+ "fbb106eb": [
778
+ "4444"
779
  ],
780
+ "fc11b217": [
781
+ "901"
782
  ],
783
+ "fd1c29a0": [
784
+ "9574"
785
  ],
786
+ "fdc15dc7": [
787
+ "2545"
788
+ ],
789
+ "ff07523c": [
790
+ "1932"
791
+ ],
792
+ "styles": [
793
+ "106",
794
+ "1221",
795
+ "1889",
796
+ "48",
797
+ "6074",
798
+ "6726",
799
+ "6785",
800
+ "7182",
801
+ "7477",
802
+ "7496",
803
+ "766",
804
+ "8237",
805
+ "8831",
806
+ "9452",
807
+ "9783",
808
+ "9786",
809
+ "4014"
810
  ]
811
  },
812
  "assets": {