From 1751fe5cdbbfd4f2796a6fac5a226aeb265f4dd3 Mon Sep 17 00:00:00 2001 From: ApatheticDELL Date: Mon, 28 Oct 2024 21:49:18 -0400 Subject: [PATCH] QE5, the final public beta --- AIOMG.py | 179 - Audio/Attn1050.wav | Bin 768044 -> 0 bytes QuantumENDEC.py | 3523 ++++--- README.md | 5 +- SAMEmonitor.py | 426 - {Audio => assets}/AttnCAN.wav | Bin {Audio => assets}/AttnEBS.wav | Bin {Audio => assets}/AttnEgg.wav | Bin {Audio => assets}/AttnRumble.wav | Bin GeoToCLC.csv => assets/GeoToCLC.csv | 11784 ++++++++++++------------ {web => assets}/Jstyle.html | 4 +- {web => assets}/alertLog.html | 104 +- {web => assets}/changePass.html | 124 +- {web => assets}/config.html | 827 +- {images => assets}/fallbackImage.png | Bin {web => assets}/fullscreen.html | 0 {web => assets}/fullscreenWimage.html | 6 +- {web => assets}/index.html | 187 +- {web => assets}/login.html | 184 +- {images => assets}/logo.png | Bin {web => assets}/managePrePost.html | 332 +- {web => assets}/scroll.html | 188 +- {web => assets}/sendAlert.html | 228 +- assets/shutconfirm.html | 15 + {web => assets}/status.html | 201 +- {css => assets}/style.css | 222 +- assets/tmp/alertImage.png | Bin 0 -> 9536 bytes {web => assets}/uploadConfig.html | 134 +- css/scrollStyle.css | 29 - logger.py | 178 - requirements.txt | 14 + test.html | 76 + version.txt | 1 - webserver.py | 485 - 34 files changed, 9531 insertions(+), 9925 deletions(-) delete mode 100644 AIOMG.py delete mode 100644 Audio/Attn1050.wav delete mode 100644 SAMEmonitor.py rename {Audio => assets}/AttnCAN.wav (100%) rename {Audio => assets}/AttnEBS.wav (100%) rename {Audio => assets}/AttnEgg.wav (100%) rename {Audio => assets}/AttnRumble.wav (100%) rename GeoToCLC.csv => assets/GeoToCLC.csv (97%) rename {web => assets}/Jstyle.html (97%) rename {web => assets}/alertLog.html (87%) rename {web => assets}/changePass.html (80%) rename {web => assets}/config.html (73%) rename {images => assets}/fallbackImage.png (100%) rename {web => assets}/fullscreen.html (100%) rename {web => assets}/fullscreenWimage.html (96%) rename {web => assets}/index.html (71%) rename {web => assets}/login.html (96%) rename {images => assets}/logo.png (100%) rename {web => assets}/managePrePost.html (94%) rename {web => assets}/scroll.html (75%) rename {web => assets}/sendAlert.html (89%) create mode 100644 assets/shutconfirm.html rename {web => assets}/status.html (83%) rename {css => assets}/style.css (94%) create mode 100644 assets/tmp/alertImage.png rename {web => assets}/uploadConfig.html (89%) delete mode 100644 css/scrollStyle.css delete mode 100644 logger.py create mode 100644 requirements.txt create mode 100644 test.html delete mode 100644 version.txt delete mode 100644 webserver.py diff --git a/AIOMG.py b/AIOMG.py deleted file mode 100644 index a3062ab..0000000 --- a/AIOMG.py +++ /dev/null @@ -1,179 +0,0 @@ -# A.I.O.M.G -# Alert Image Or Map Generator - -# This script will take an image or generate a map from an CAP alert. - -# first, look for an image, it could be encoded in base64 or have a link (i haven't seen an image with a link though...) -# then, if no image could be found, generate a polygon, output image in 1:1 ratio. -# if any of the generation processes fails, just use the fallback image. - -import re, base64, requests, os, subprocess, shutil - -import matplotlib -matplotlib.use('Agg') - -import matplotlib.pyplot as plt -from mpl_toolkits.basemap import Basemap -from matplotlib.patches import Polygon -from matplotlib.lines import Line2D - -# Requirments: matplotlib, basemap - -ImageOutput = "./images/alertImage.png" - -def overlay_polygon(map_object, lats, lons, label='', color='red'): - x, y = map_object(lons, lats) - map_object.plot(x, y, marker=None, color=color, linewidth=2, linestyle='-', label=label) - -def fill_polygon(map_object, lats, lons, color='red', alpha=0.5): - x, y = map_object(lons, lats) - polygon = Polygon(list(zip(x, y)), facecolor=color, alpha=alpha) - map_object.ax.add_patch(polygon) - -def calculate_bounding_box(coordinates): - min_lat = min(lat for lat, _ in coordinates) - max_lat = max(lat for lat, _ in coordinates) - min_lon = min(lon for _, lon in coordinates) - max_lon = max(lon for _, lon in coordinates) - return min_lat, max_lat, min_lon, max_lon - -def GenerateMapImage(InfoXML, PolyColor="#FF0000"): - print("[AIOMG]: Generating map image...") - if "#" not in PolyColor: PolyColor = "#" + PolyColor - if len(PolyColor) > 7: PolyColor = "#FF0000" - for char in PolyColor: - if 'G' <= char <= 'Z' or 'g' <= char <= 'z': PolyColor = "#FF0000" - - - # Get alert title TODO - #HEADLINE = "Test alert" - HEADLINE = re.search(r'\s*(.*?)\s*', InfoXML, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - - # Get all polygons TODO - - #Areas = re.findall(r'\s*(.*?)\s*', InfoXML, re.MULTILINE | re.IGNORECASE | re.DOTALL) - AllCoords = re.findall(r'\s*(.*?)\s*', InfoXML, re.MULTILINE | re.IGNORECASE | re.DOTALL) - - #for SingleArea in Areas: - # Polygon = re.search(r'\s*(.*?)\s*', SingleArea, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - # print(Polygon) - - # Generate map - coordinates_string = "" - for i in AllCoords: - coordinates_string = coordinates_string + f" {i}" - polygon_coordinates = [list(map(float, item.split(','))) for item in coordinates_string.split()] - min_lat, max_lat, min_lon, max_lon = calculate_bounding_box(polygon_coordinates) - lat_center = (min_lat + max_lat) / 2 - lon_center = (min_lon + max_lon) / 2 - lat_range = max_lat - min_lat - lon_range = max_lon - min_lon - - if lat_range > lon_range: lon_range = lat_range - else: lat_range = lon_range - - fig = plt.figure(figsize=(10, 10)) - # For outlined polygon - #world_map = Basemap(projection='mill', lat_1=-60, lat_2=90, lon_0=lon_center, llcrnrlat=lat_center - 1.1 * lat_range, urcrnrlat=lat_center + 1.1 * lat_range, llcrnrlon=lon_center - 1.1 * lon_range, urcrnrlon=lon_center + 1.1 * lon_range, resolution='i') - ax = fig.add_subplot(111) - - #world_map = Basemap(ax=ax, projection='mill', lat_1=-60, lat_2=90, lon_0=lon_center, llcrnrlat=lat_center - 1.1 * lat_range, urcrnrlat=lat_center + 1.1 * lat_range, llcrnrlon=lon_center - 1.1 * lon_range, urcrnrlon=lon_center + 1.1 * lon_range, resolution='i') - - world_map = Basemap( - ax=ax, - projection='cyl', # Using cylindrical projection to minimize distortion - lon_0=lon_center, - llcrnrlat=lat_center - 1.1 * lat_range, - urcrnrlat=lat_center + 1.1 * lat_range, - llcrnrlon=lon_center - 1.1 * lon_range, - urcrnrlon=lon_center + 1.1 * lon_range, - resolution='i' - ) - - world_map.drawcoastlines() - world_map.drawcountries() - world_map.drawcounties() - world_map.drawstates() - world_map.fillcontinents(color='#00AA44', lake_color='#002255') - world_map.drawmapboundary(fill_color='#002255') - for i in AllCoords: - i = [list(map(float, item.split(','))) for item in i.split()] - lats, lons = zip(*i) - fill_polygon(world_map, lats, lons, color=PolyColor, alpha=0.5) - overlay_polygon(world_map, lats, lons, label=HEADLINE, color=PolyColor) # For outlined polygon - - ax.set_aspect('equal') - - legend_patch = Line2D([0], [0], marker='o', color='w', markerfacecolor=PolyColor, markersize=10, label=HEADLINE) - plt.legend(handles=[legend_patch], loc='upper right') - #plt.legend(loc='upper right') # For outlined polygon - #plt.show() #For testing, to show the map in a window - fig.savefig(ImageOutput, bbox_inches='tight', pad_inches=0.0, dpi=70) - -def ConvertImageFormat(inputAudio, outputAudio): - result = subprocess.run(["ffmpeg", "-y", "-i", inputAudio, "-vf", "scale=-1:450", outputAudio], capture_output=True, text=True) - if result.returncode == 0: print(f"[AIOMG]: {inputAudio} --> {outputAudio} ... Conversion successful!") - else: print(f"[AIOMG]: {inputAudio} --> {outputAudio} ... Conversion failed: {result.stderr}") - -# ffmpeg -i input_image.png -vf "scale=-1:600" output_image.png - -def ResizeImage(): - pass - -def GetImage(imagelink, Output, DecodeType): - if DecodeType == 1: - print("Decoding image from BASE64...") - with open(Output, "wb") as fh: fh.write(base64.decodebytes(imagelink)) - elif DecodeType == 0: - print("Downloading image...") - r = requests.get(imagelink) - with open(Output, 'wb') as f: f.write(r.content) - -def GrabImage(InfoXML): - resources = re.findall(r'\s*(.*?)\s*', InfoXML, re.MULTILINE | re.IGNORECASE | re.DOTALL) - if "image/jpeg" in str(resources): pass - elif "image/png" in str(resources): pass - else: return False - print("[AIOMG]: Grabbing image from CAP...") - - try: - for ImageResource in resources: - if "" in ImageResource: - ImageLink = bytes(re.search(r'\s*(.*?)\s*', ImageResource, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1), 'utf-8') - ImageType = re.search(r'\s*(.*?)\s*', ImageResource, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - Decode = 1 - else: - ImageLink = re.search(r'\s*(.*?)\s*', ImageResource, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - ImageType = re.search(r'\s*(.*?)\s*', ImageResource, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - Decode = 0 - - if ImageType == "image/jpeg": - GetImage(ImageLink,"./Audio/tmp/PreImage.jpg",Decode) - ConvertImageFormat("./Audio/tmp/PreImage.jpg", ImageOutput) - os.remove("./Audio/tmp/PreImage.jpg") - elif ImageType == "image/png": - GetImage(ImageLink,ImageOutput,Decode) - - return True - except: return False - -def OutputAlertImage(InfoXML=None, InputColor="#FF0000", Fallback=False): - if Fallback is True: - print("[AIOMG]: Using fallback image...") - shutil.copy("./images/fallbackImage.png", ImageOutput) - else: - try: - if GrabImage(InfoXML) is True: pass - else: GenerateMapImage(InfoXML, InputColor) - print("[AIOMG]: Image generation finished") - except Exception as e: - print("[AIOMG]: Image generation failure: ", e) - print("[AIOMG]: Using fallback image...") - shutil.copy("./images/fallbackImage.png", ImageOutput) - -# for testing... -if __name__ == "__main__": - with open("testerX.xml", "r") as file: XML = file.read() - INFOXML = re.search(r'\s*(.*?)\s*', XML, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - INFOXML = f"{INFOXML}" - OutputAlertImage(INFOXML) # this is the main one to run \ No newline at end of file diff --git a/Audio/Attn1050.wav b/Audio/Attn1050.wav deleted file mode 100644 index cfba0adaca088946e855f496c2cdaa5b08536c95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 768044 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%0A5|C#rv`(Xd*>IgvoAM?i*e{s*>rTY?)qmBpbfds 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%0Dn^R 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 3: pass -else: print("You are not running this program with Python 3, run it with Python 3. (Or update python)"); exit() - -try: - import re, pyttsx3, requests, shutil, time, socket, threading, json, os, argparse, base64, subprocess, importlib - import sounddevice as sd - from scipy.io import wavfile - from datetime import datetime, timezone - from urllib.request import Request, urlopen - from EASGen import EASGen - from EAS2Text import EAS2Text - #from itertools import zip_longest - from pydub import AudioSegment -except Exception as e: print(f"IMPORT FAIL: {e}.\nOne or more modules has failed to import, install the requirements!"); exit() +QuantumStatus = 0 +# 0 = Normal +# 1 = Restart +# 2 = Shutdown + +def QEinterrupt(): + global QuantumStatus + if QuantumStatus != 0: return True + return False try: import pythoncom except: pass -if __name__ == "__main__": +import re +import pyttsx3 +import requests +import shutil +import time +import socket +import threading +import json +import os +import argparse +import base64 +import subprocess +import importlib +import signal + +import sounddevice as sd +from scipy.io import wavfile +from datetime import datetime, timezone, timedelta +from urllib.request import Request, urlopen +from pydub import AudioSegment +from EASGen import EASGen +from EAS2Text import EAS2Text + +import matplotlib +import matplotlib.pyplot as plt +from mpl_toolkits.basemap import Basemap +from matplotlib.patches import Polygon +from matplotlib.lines import Line2D + +import smtplib +from discord_webhook import DiscordWebhook, DiscordEmbed +from datetime import datetime +from email.mime.multipart import MIMEMultipart +from email.mime.text import MIMEText + +import random +import string +import sys +import queue +import wave +import contextlib +import ffmpeg + +import soundfile as sf +from scipy.fft import * +import numpy +assert numpy + +from flask import Flask, request, jsonify, send_from_directory, redirect, url_for, make_response, session +import hashlib, secrets, logging + +CapCatToSameOrg = { "Met": "WXR", "Admin": "EAS", "Other": "CIV", } +SameOrgToCapCat = { "WXR":"Met", "EAS":"Admin", "CIV":"Other" } +CapEventToSameEvent = { + "911Service": "TOE", + "accident": "CDW", + "admin":"ADR", + "aircraftCras":"LAE", + "airportClose":"ADR", + "airQuality":"SPS", + "airspaceClos":"ADR", + "amber":"CAE", + "ambulance":"LAE", + "animalDang":"CDW", + "animalDiseas":"CDW", + "animalFeed":"CEM", + "animalHealth":"CEM", + "arcticOut":"SVS", + "avalanche":"AVW", + "aviation":"LAE", + "biological":"BHW", + "blizzard":"BZW", + "bloodSupply":"LAE", + "blowingSnow":"WSW", + "bridgeClose":"LAE", + "cable":"ADR", + "chemical":"CHW", + "civil":"CEM", + "civilEmerg":"CEM", + "civilEvent":"CEM", + "cold":"SVS", + "coldWave":"SVS", + "crime":"CDW", + "damBreach":"DBW", + "damOverflow":"DBW", + "dangerPerson":"CDW", + "diesel":"LAE", + "drinkingWate":"CWW", + "dustStorm":"DSW", + "earthquake":"EQW", + "electric":"POS", + "emergFacil":"CEM", + "emergSupport":"CEM", + "explosive":"HMW", + "facility":"CEM", + "fallObject":"HMW", + "fire":"FRW", + "flashFlood":"FFW", + "flashFreeze":"FSW", + "flood":"FLW", + "fog":"SPS", + "foodSupply":"LAE", + "forestFire":"WFW", + "freezeDrzl":"WSW", + "freezeRain":"WSW", + "freezngSpray":"WSW", + "frost":"SPS", + "galeWind":"HWW", + "gasoline":"LAE", + "geophyiscal":"CEM", + "hazmat":"BHW", + "health":"BHW", + "heat":"SVS", + "heatHumidity":"SVS", + "heatingOil":"LAE", + "heatWave":"SVS", + "highWater":"SVS", + "homeCrime":"CEM", + "hospital":"LAE", + "hurricane":"HUW", + "hurricFrcWnd":"HUW", + "ice":"SPS", + "iceberg":"IBW", + "icePressure":"SPS", + "industCrime":"CEM", + "industryFire":"IFW", + "infectious":"DEW", + "internet":"ADR", + "lahar":"VOW", + "landslide":"LSW", + "lavaFlow":"VOW", + "magnetStorm":"CDW", + "marine":"SMW", + "marineSecure":"SMW", + "meteor":"CDW", + "missingPer":"MEP", + "missingVPer":"MEP", + "naturalGas":"LAE", + "nautical":"ADR", + "notam":"ADR", + "other":"CEM", + "overflood":"FLW", + "plant":"LAE", + "plantInfect":"LAE", + "product":"LAE", + "publicServic":"LAE", + "pyroclasFlow":"VOW", + "pyroclaSurge":"VOW", + "radiological":"RHW", + "railway":"LAE", + "rainfall":"SPS", + "rdCondition":"LAE", + "reminder":"CEM", + "rescue":"CEM", + "retailCrime":"CEM", + "road":"LAE", + "roadClose":"ADR", + "roadDelay":"ADR", + "roadUsage":"ADR", + "rpdCloseLead":"ADR", + "satellite":"ADR", + "schoolBus":"ADR", + "schoolClose":"ADR", + "schoolLock":"CDW", + "sewer":"LAE", + "silver":"CEM", + "snowfall":"WSW", + "snowSquall":"WSW", + "spclIce":"SPS", + "spclMarine":"SMW", + "squall":"SMW", + "storm":"SVS", + "stormFrcWnd":"SVS", + "stormSurge":"SSW", + "strongWind":"HWW", + "telephone":"LAE", + "temperature":"SPS", + "terrorism":"CDW", + "testMessage":"DMO", + "thunderstorm":"SVR", + "tornado":"TOR", + "traffic":"ADR", + "train":"ADR", + "transit":"ADR", + "tropStorm":"TRW", + "tsunami":"TSW", + "urbanFire":"FRW", + "utility":"ADR", + "vehicleCrime":"CEM", + "volcanicAsh":"VOW", + "volcano":"VOW", + "volunteer":"ADR", + "waste":"ADR", + "water":"ADR", + "waterspout":"SMW", + "weather":"SPS", + "wildFire":"FRW", + "wind":"HWW", + "windchill":"SPS", + "winterStorm":"WSW" +} + +def CheckFolder(dir, Clear=False): + if not os.path.exists(dir): os.makedirs(dir) + else: + if Clear is True: + for f in os.listdir(dir): os.remove(os.path.join(dir, f)) + +def CheckConfigVersion(InputConfig): try: - result = subprocess.run(["ffmpeg", "-version"], capture_output=True, text=True) - if result.returncode == 0: print(f"Congrats, QuantumENDEC was able to detect FFMPEG!") - else: - print(f"QuantumENDEC failed to detect FFMPEG!: {result.stderr}") - print("FFMPEG doesn't appear to be installed on your system, you will need to install it so it can be run on a command line. Some functions of QuantumENDEC depend on FFMPEG") - exit() + if InputConfig['version'] == QuantumENDEC_Version: return True + else: return False + except: return False + +def createDefaultConfig(): + NewConfig = { + "version": QuantumENDEC_Version, + "WebserverHost": "0.0.0.0", + "WebserverPort": "8050", + "PlayoutNoSAME": False, + "relay_en": True, + "relay_fr": False, + "Force120": False, + "AttentionTone": "AttnCAN.wav", + "Attn_BasedOnCountry": False, + "SAME_callsign": "QUANTUM0", + "SAME_ORGallowed": [], + "SAME_EVENTallowed": [], + "SAME_EVENTblocked": [], + "SAME_FIPSfilter": [], + "CGENcolor_warning": "ff2a2a", + "CGENcolor_watch": "ffcc00", + "CGENcolor_advisory": "00aa00", + "CGEN_ClearAfterAlert": False, + "ProduceImages": False, + "enable_discord_webhook": False, + "webhook_author_name": "", + "webhook_author_URL": "", + "webhook_author_iconURL": "", + "webhook_URL": "", + "webhook_sendAudio": False, + "enable_email": False, + "FancyHTML": False, + "email_server": "", + "email_server_port": "587", + "email_user": "", + "email_user_pass": "", + "email_sendto": [], + "enable_LogToTxt": True, + "UseSpecified_AudioOutput": False, + "Specified_AudioOutput": "", + "EnablePassThru": False, + "UseSpecified_Passthrough_AudioInput": False, + "Passthrough_AudioInput": "", + "UseDefaultVoices": True, + "TTS_Service": "pyttsx3", + "VoiceEN": "", + "VoiceFR": "", + "FliteVoice_EN": "", + "FliteVoice_FR": "", + "statusTest": True, + "statusActual": True, + "messagetypeAlert": True, + "messagetypeUpdate": True, + "messagetypeCancel": True, + "messagetypeTest": True, + "severityExtreme": True, + "severitySevere": True, + "severityModerate": True, + "severityMinor": True, + "severityUnknown": True, + "urgencyImmediate": True, + "urgencyExpected": True, + "urgencyFuture": True, + "urgencyPast": True, + "urgencyUnknown": True, + "AllowedLocations_Geocodes": [], + "TCP": False, + "TCP1": "streaming1.naad-adna.pelmorex.com:8080", + "TCP2": "streaming2.naad-adna.pelmorex.com:8080", + "HTTP_CAP": False, + "HTTP_CAP_ADDR": "", + "HTTP_CAP_ADDR1": "", + "HTTP_CAP_ADDR2": "", + "HTTP_CAP_ADDR3": "", + "HTTP_CAP_ADDR4": "", + "Enable_NWSCAP": False, + "NWSCAP_AtomLink": "https://api.weather.gov/alerts/active.atom", + "SAME-AudioDevice-Monitor": False, + "SAME_AudioStream_Monitors": False, + "SAME-AudioStream-Monitor1": "", + "SAME-AudioStream-Monitor2": "", + "SAME-AudioStream-Monitor3": "", + "SAME-AudioStream-Monitor4": "" + } + + try: + with open(Config_File, 'w') as json_file: json.dump(NewConfig, json_file, indent=2) + except: return False + return True + +def DuplicateSAME(ZCZC): + file = f"{Tmp_Folder}/SameHistory.txt" + try: + with open(file, "r") as f: + content = f.read() + if ZCZC in content: return True except: - print("FFMPEG doesn't appear to be installed on your system, you will need to install it so it can be run on a command line. Some functions of QuantumENDEC depend on FFMPEG") - exit() + with open(file, "a") as f: f.write(f"ZXZX-STARTER-\n") + with open(file, "a") as f: f.write(f"{ZCZC}\n") + return False + +def Setup(): + CheckFolder(XMLhistory_Folder, True) + CheckFolder(XMLqueue_Folder, True) + CheckFolder(Assets_Folder, False) + CheckFolder(Tmp_Folder, True) + CheckFolder(f"{Assets_Folder}/stats", True) + UpdateCGEN("000000", "EMERGENCY ALERT DETAILS", "", False) + + if os.path.isfile(f"{Assets_Folder}/alertlog.txt") is True: pass + else: + with open(f"{Assets_Folder}/alertlog.txt", "w", encoding='utf-8') as f: f.write("") + + with open(f"{Tmp_Folder}/SameHistory.txt", "w") as f: f.write(f"ZXZX-STARTER-\n") -def Clear(): os.system('cls' if os.name == 'nt' else 'clear') + if os.path.isfile(Config_File) is True: + with open(Config_File, "r") as JCfile: config = JCfile.read() + ConfigData = json.loads(config) + if CheckConfigVersion(ConfigData) is False: print(f"<> Your configuration file is out of date! Go to the web interface and save (overwrite) a new one, or delete the current configuration file ({Config_File}).") + else: + if createDefaultConfig() is True: pass + else: print("Error, failed to create default config file, QuantumENDEC can't run without a config file!"); exit() + + if os.path.isfile(f"./{Assets_Folder}/GeoToCLC.csv") is True: pass + else: print("The GeoToCLC CSV file is missing, you don't have to worry about this if you're not using Canada's CAP and relaying in S.A.M.E. If you are using Canada's CAP and relaying in S.A.M.E, all CAP-CP alerts will have a 000000 location (FIPS/CLC) code.") def UpdateStatus(service, content): try: - statFolder = "stats" - with open(f"{statFolder}/{service}_status.txt", "w") as f: f.write(content) + with open(f"{Assets_Folder}/stats/{service}_status.txt", "w") as f: f.write(content) except: pass +def DeconstructSAME(SAMEheader): + try: + SAME = SAMEheader.split("+") + Section1 = SAME[0].split("-", 3) + Section2 = SAME[1].split("-") + OrginatorCode = Section1[1] + EventCode = Section1[2] + LocationCodes = Section1[3].split("-") + PurgeTime = Section2[0] + date = Section2[1][:3] + hour = Section2[1][3:5] + minute = Section2[1][5:] + IssueDate = {"date":date, "hour":hour, "minute":minute} + Callsign = Section2[2] + SAMEdata = { + "OrginatorCode":OrginatorCode, + "EventCode":EventCode, + "LocationCodes":LocationCodes, + "PurgeTime":PurgeTime, + "Issue":IssueDate, + "Callsign":Callsign } + return SAMEdata + except: return None + def Plugins_Run(mode=None, ZCZC=None, BROADCASTTEXT=None, XML=None): - # execute plugin with: GeneratedHeader, BroadcastText, InfoXML + """Run modes: startup, beforeRelay, afterRelay""" + # Execute plugin with: GeneratedHeader, BroadcastText, InfoXML pluginFolder = "plugins" ZCZC = str(ZCZC).replace("\n","") BROADCASTTEXT = str(BROADCASTTEXT).replace("\n"," ") XML = str(XML).replace("\n"," ") - if not os.path.exists(pluginFolder): pass - else: + if os.path.exists(pluginFolder) and mode is not None: print("Attempting to run plugins...") pluginList = os.listdir(pluginFolder) - - if mode == "beforeRelay": - for plug in pluginList: - if ".py" in plug: - plug = plug.replace(".py", "") - plug = f"{pluginFolder}.{plug}" - try: - print("importing... ", plug) - module = importlib.import_module(plug) - print("Running plugin: ", plug) - module.ExecutePlugin_BeforeRelay(ZCZC, BROADCASTTEXT, XML) - except Exception as e: print(f"{plug} has failed to run.", e) - - elif mode == "afterRelay": - for plug in pluginList: - if ".py" in plug: - plug = plug.replace(".py", "") - plug = f"{pluginFolder}.{plug}" - try: - print("importing... ", plug) - module = importlib.import_module(plug) - print("Running plugin: ", plug) - module.ExecutePlugin_AfterRelay(ZCZC, BROADCASTTEXT, XML) - except Exception as e: print(f"{plug} has failed to run.", e) - - elif mode == "startup": - for plug in pluginList: - if ".py" in plug: - plug = plug.replace(".py", "") - plug = f"{pluginFolder}.{plug}" - try: - print("importing... ", plug) - module = importlib.import_module(plug) - print("Running plugin: ", plug) - module.ExecutePlugin_OnStart() - except Exception as e: print(f"{plug} has failed to run.", e) - - else: pass - -def GenenerateTTS_UsingAPI(TTSservice=None, VoiceSelection=None, Region=None, APIkey=None, OutputFolder=None, InputTEXT=None, Test=False): - try: - if Test is True: - if OutputFolder is None or OutputFolder == "": TTSoutput = "TestTTS" - else: TTSoutput = f"{OutputFolder}/TestTTS" - else: - if OutputFolder is None or OutputFolder == "": TTSoutput = "GeneratedTTS" - else: TTSoutput = f"{OutputFolder}/GeneratedTTS" - - if "11labs" in TTSservice: - API_URL = "https://api.elevenlabs.io/v1/text-to-speech" - headers = { - "xi-api-key": APIkey, - "Content-Type": "application/json" - } - payload = { - "text": InputTEXT, - "voice_settings": { - "stability": 0.5, - "similarity_boost": 0.5 - } - } - response = requests.post(f"{API_URL}/{VoiceSelection}", json=payload, headers=headers) - if response.status_code == 200: - with open(f"{TTSoutput}.mp3", "wb") as file: - file.write(response.content) - print(f"MP3 file generated successfully: {TTSoutput}.mp3") - else: - raise Exception(f"Error: {response.status_code} - {response.text}") - - elif "IBMwatson" in TTSservice: - pass - - elif "AmazonPolly" in TTSservice: - pass - - else: - raise Exception("Invalid TTS service selection!") - - return 0 - except Exception as e: - return f"Failure: {e}" + for plug in pluginList: + if ".py" in plug: + plug = plug.replace(".py", "") + plug = f"{pluginFolder}.{plug}" + try: + print("Running plugin: ", plug) + module = importlib.import_module(plug) + if mode == "beforeRelay": module.ExecutePlugin_BeforeRelay(ZCZC, BROADCASTTEXT, XML) + elif mode == "afterRelay": module.ExecutePlugin_AfterRelay(ZCZC, BROADCASTTEXT, XML) + elif mode == "startup": module.ExecutePlugin_OnStart() + except Exception as e: print(f"{plug} has failed to run.", e) def GetAlertLevelColor(ConfigData, ZCZC=None): colEvtlist = { @@ -204,350 +476,248 @@ def GetAlertLevelColor(ConfigData, ZCZC=None): try: ZCZC = ZCZC.split("-") evnt = ZCZC[2] - if evnt in colEvtlist: if colEvtlist[evnt] == 0: embed_color = ConfigData["CGENcolor_warning"] elif colEvtlist[evnt] == 1: embed_color = ConfigData["CGENcolor_watch"] - else: - embed_color = ConfigData["CGENcolor_advisory"] - except: - embed_color = ConfigData["CGENcolor_warning"] - else: - embed_color = ConfigData["CGENcolor_warning"] - + else: embed_color = ConfigData["CGENcolor_advisory"] + except: embed_color = ConfigData["CGENcolor_warning"] + else: embed_color = ConfigData["CGENcolor_warning"] return embed_color -class Capture: - def __init__(self, OutputFolder, TCP, name): - # domain, port = url.split(':') - self.NAAD, self.PORT = TCP.split(':') - self.OutputFolder = OutputFolder - self.nom = name - - def receive(self, host, port, buffer, delimiter): - with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: - try: - s.connect((host, int(port))) - s.settimeout(100) - UpdateStatus(self.nom, f"Connected to {host}") - print(f"[TCP Capture]: Connected to {host}") - data_received = "" - try: - while True: - chunk = str(s.recv(buffer), encoding='utf-8', errors='ignore') - data_received += chunk - if delimiter in chunk: - CapturedSent = re.search(r'\s*(.*?)\s*', data_received, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1).replace("-", "_").replace("+", "p").replace(":", "_") - CapturedIdent = re.search(r'\s*(.*?)\s*', data_received, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1).replace("-", "_").replace("+", "p").replace(":", "_") - NAADsFilename = f"{CapturedSent}I{CapturedIdent}.xml" - with open(f"{self.OutputFolder}/{NAADsFilename}", 'w', encoding='utf-8') as file: file.write(data_received) - print(f"[TCP Capture]: I captured an XML, and saved it to: {self.OutputFolder}/{NAADsFilename} | From: {host}") - data_received = "" - except socket.timeout: print(f"[TCP Capture]: Connection timed out for {host}"); return False - except Exception as e: print(f"[TCP Capture]: Something broke when connecting to {host}: {e}"); return False - except: print("[TCP Capture]: General exception occurred!"); return False - - def start(self): - while True: - NAAD = self.receive(self.NAAD, self.PORT, 1024, "") - if NAAD is False: - UpdateStatus(self.nom, f"TCP connection to {self.NAAD} failure") - time.sleep(30) - -class Check: - def __init__(self): - pass +def FilterCheck_CAP(InputConfig, AlertInfo): + # Returns True if passed + Urgency = re.search(r'\s*(.*?)\s*', AlertInfo, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) + Severity = re.search(r'\s*(.*?)\s*', AlertInfo, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) + + try: + current_time = datetime.now(timezone.utc) + Expires = re.search(r'\s*(.*?)\s*', AlertInfo, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) + Expires = datetime.fromisoformat(datetime.fromisoformat(Expires).astimezone(timezone.utc).isoformat()) + if current_time > Expires: Expired = True + else: Expired = False + except: Expired = False + + try: Broadcast_Immediately = re.search(r'layer:SOREM:1.0:Broadcast_Immediately\s*\s*(.*?)\s*', AlertInfo, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) + except: Broadcast_Immediately = "no" + if "yes" in Broadcast_Immediately.lower(): Broadcast_Immediately = True + else: Broadcast_Immediately = False + + # To check the 'CAP-CP Geocodes' - not for FIPS/CLC + if len(InputConfig['AllowedLocations_Geocodes']) == 0: GecodeResult = True + else: + GecodeResult = False + try: + GeocodeList = re.findall(r'\s*profile:CAP-CP:Location:0.3\s*\s*(.*?)\s*', AlertInfo, re.MULTILINE | re.IGNORECASE | re.DOTALL) + for i in GeocodeList: + if i[:2] in InputConfig['AllowedLocations_Geocodes']: GecodeResult = True + if i[:3] in InputConfig['AllowedLocations_Geocodes']: GecodeResult = True + if i[:4] in InputConfig['AllowedLocations_Geocodes']: GecodeResult = True + if i in InputConfig['AllowedLocations_Geocodes']: GecodeResult = True + except: GecodeResult = True - def Config(InfoX, ConfigData, Status, MsgType, Severity, Urgency, BroadcastImmediately): - if ConfigData[f"status{Status}"] is False: return False - if "Yes" in str(BroadcastImmediately): Final = True + try: + Language = re.search(r'\s*(.*?)\s*', AlertInfo, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) + Language = Language.lower() + if "fr-ca" in Language: Language = "fr" + else: Language = "en" + Language_Result = ConfigData[f"relay_{Language}"] + except: + Language_Result = True + + print("<< Filter Check (CAP) >>") + print("Severity: ", InputConfig[f"severity{Severity}"]) + print("Urgency: ", InputConfig[f"urgency{Urgency}"]) + print("Broadcat Immedately (CAP-CP only): ", Broadcast_Immediately) + print("Geocode result (CAP-CP only): ", GecodeResult) + print("Language result: ", Language_Result) + print("Expired: ", Expired) + + if ((InputConfig[f"severity{Severity}"] and InputConfig[f"urgency{Urgency}"]) or Broadcast_Immediately) and GecodeResult and Language_Result and not Expired: print("Final result: Pass") + else: print("Final result: Failed... alert will be skipped.") + + return ((InputConfig[f"severity{Severity}"] and InputConfig[f"urgency{Urgency}"]) or Broadcast_Immediately) and GecodeResult and Language_Result and not Expired + +def FilterCheck_SAME(ConfigData, ZCZC): + # Returns True if passed + SAME_DICT = DeconstructSAME(ZCZC) + EVENT = SAME_DICT['EventCode'] + + if "EAN" in EVENT or "NIC" in EVENT or "NPT" in EVENT or "RMT" in EVENT or "RWT" in EVENT: + EventAllowed = True + EventBlocked = False # EventBlocked will be True if an event is blocked + else: + if len(ConfigData['SAME_EVENTblocked']) == 0: EventBlocked = False else: - try: - var1 = ConfigData[f"severity{Severity}"] - var2 = ConfigData[f"urgency{Urgency}"] - var3 = ConfigData[f"messagetype{MsgType}"] - if var1 is True and var2 is True and var3 is True: Final = True - else: Final = False - except: Final = False - if Final is True: - if len(ConfigData['AllowedLocations_Geocodes']) == 0: pass - else: - try: - GeocodeList = re.findall(r'\s*profile:CAP-CP:Location:0.3\s*\s*(.*?)\s*', InfoX, re.MULTILINE | re.IGNORECASE | re.DOTALL) - for i in GeocodeList: - if i[:2] in ConfigData['AllowedLocations_Geocodes']: return True - if i[:3] in ConfigData['AllowedLocations_Geocodes']: return True - if i[:4] in ConfigData['AllowedLocations_Geocodes']: return True - if i in ConfigData['AllowedLocations_Geocodes']: return True - except: return True - return False - return Final + if EVENT in ConfigData['SAME_EVENTblocked']: EventBlocked = True - def MatchCLC(ConfigData, SAMEheader): - if len(ConfigData['AllowedLocations_CLC']) == 0: return True + if len(ConfigData['SAME_EVENTallowed']) == 0: EventAllowed = True else: - for i in EAS2Text(SAMEheader).FIPS: - # Partial county wildcard filter - partial = "*" + i[1:] - if partial[:2] in ConfigData['AllowedLocations_CLC']: return True - if partial[:3] in ConfigData['AllowedLocations_CLC']: return True - if partial[:4] in ConfigData['AllowedLocations_CLC']: return True - if partial in ConfigData['AllowedLocations_CLC']: return True - - if i[:2] in ConfigData['AllowedLocations_CLC']: return True - if i[:3] in ConfigData['AllowedLocations_CLC']: return True - if i[:4] in ConfigData['AllowedLocations_CLC']: return True - if i in ConfigData['AllowedLocations_CLC']: return True - return False + if EVENT in ConfigData['SAME_EVENTallowed']: EventAllowed = True + else: EventAllowed = False - def DuplicateSAME(GeneratedHeader): - try: - with open("SameHistory.txt", "r") as f: - content = f.read() - if GeneratedHeader in content: return True - except: - with open("SameHistory.txt", "a") as f: f.write(f"ZXZX-STARTER-\n") - with open("SameHistory.txt", "a") as f: f.write(f"{GeneratedHeader}\n") - return False - - def CheckEventCodeSAME(ConfigData, GeneratedHeader): - EVENT = EAS2Text(GeneratedHeader).evnt - EVENT = str(EVENT) - if "EAN" in EVENT or "NIC" in EVENT or "NPT" in EVENT or "RMT" in EVENT or "RWT" in EVENT: return True - - if len(ConfigData['CAP_SAMEevent_Blocklist']) == 0: return True - else: - if EVENT in ConfigData['CAP_SAMEevent_Blocklist']: return False - - if len(ConfigData['CAP_SAMEevent_Whitelist']) == 0: return True - else: - if EVENT in ConfigData['CAP_SAMEevent_Whitelist']: return True - else: return False + if len(ConfigData['SAME_ORGallowed']) == 0: OrgiResult = True + else: + if SAME_DICT['OrginatorCode'] in ConfigData['SAME_ORGallowed']: OrgiResult = True + else: OrgiResult = False - def Heartbeat(References, QueueFolder, HistoryFolder): - print("Downloading alerts from received heartbeat...") - RefList = References.split(" ") - for i in RefList: - j = re.sub(r'^.*?,', '', i) - j = j.split(",") - sent = j[1] - sentDT = sent.split("T", 1)[0] - sent = sent.replace("-","_").replace("+", "p").replace(":","_") - identifier = j[0] - identifier = identifier.replace("-","_").replace("+", "p").replace(":","_") - Dom1 = 'capcp1.naad-adna.pelmorex.com' - Dom2 = 'capcp2.naad-adna.pelmorex.com' - Output = f"{QueueFolder}/{sent}I{identifier}.xml" - if f"{sent}I{identifier}.xml" in os.listdir(f"{HistoryFolder}"): - print("Heartbeat, no download: Files matched.") + if len(ConfigData['SAME_FIPSfilter']) == 0: LocationResult = True + else: + LocationResult = False + for i in SAME_DICT['LocationCodes']: + # Partial county wildcard filter + partial = "*" + i[1:] + if partial[:2] in ConfigData['SAME_FIPSfilter']: LocationResult = True + if partial[:3] in ConfigData['SAME_FIPSfilter']: LocationResult = True + if partial[:4] in ConfigData['SAME_FIPSfilter']: LocationResult = True + if partial in ConfigData['SAME_FIPSfilter']: LocationResult = True + + if i[:2] in ConfigData['SAME_FIPSfilter']: LocationResult = True + if i[:3] in ConfigData['SAME_FIPSfilter']: LocationResult = True + if i[:4] in ConfigData['SAME_FIPSfilter']: LocationResult = True + if i in ConfigData['SAME_FIPSfilter']: LocationResult = True + + print("<< Filter check (S.A.M.E) >>") + print("Originator result: ", OrgiResult) + print("Location code result: ", LocationResult) + print("Event code allowed: ", EventAllowed) + print("Event code blocked: ", EventBlocked) + + if (OrgiResult and LocationResult and EventAllowed) and not EventBlocked: print("Final result: pass") + else: print("Final result: fail... alert will be skipped.") + + return (OrgiResult and LocationResult and EventAllowed) and not EventBlocked + +def WatchNotify(ListenFolder, HistoryFolder): + print(f"Waiting for an alert...") + while QEinterrupt() is False: + ExitTicket = False + QueueList = os.listdir(f"{ListenFolder}") + for file in QueueList: + with open(f"{ListenFolder}/{file}", "r", encoding='UTF-8') as f: RelayXML = f.read() + AlertListXML = re.findall(r'', RelayXML, re.MULTILINE | re.IGNORECASE | re.DOTALL) + if len(AlertListXML) > 1: + print("WHY THE F*** IS THERE 2 ALERT ELEMENTS IN A SINGLE XML FILE?!!?") + AlertCount = 0 + for AlertXML in AlertListXML: + AlertCount = AlertCount + 1 + print("Alert", AlertCount) + Sent = re.search(r'\s*(.*?)\s*', AlertXML, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1).replace("-", "_").replace("+", "p").replace(":", "_").replace("\n", "") + Ident = re.search(r'\s*(.*?)\s*', AlertXML, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1).replace("-", "_").replace("+", "p").replace(":", "_").replace("\n", "") + NAADsFilename = f"{Sent}I{Ident}.xml" + AlertXML = f"" + with open(f"{ListenFolder}/{NAADsFilename}", 'w', encoding='utf-8') as f: f.write(AlertXML) + os.remove(f"{ListenFolder}/{file}") + elif file in os.listdir(f"{HistoryFolder}"): + print("No relay: watch folder files matched.") + os.remove(f"{ListenFolder}/{file}") + ExitTicket = False else: - print( f"Downloading: {sent}I{identifier}.xml...") - req1 = Request(url = f'http://{Dom1}/{sentDT}/{sent}I{identifier}.xml', headers={'User-Agent': 'Mozilla/5.0'}) - req2 = Request(url = f'http://{Dom2}/{sentDT}/{sent}I{identifier}.xml', headers={'User-Agent': 'Mozilla/5.0'}) - try: xml = urlopen(req1).read() - except: - try: xml = urlopen(req2).read() - except: pass - try: - with open(Output, "wb") as f: f.write(xml) - except: print("Heartbeat, download aborted: a general exception occurred, it could be that the URLs are temporarily unavailable.") - - def watchNotify(ListenFolder, HistoryFolder): - print(f"Waiting for an alert...") - while True: - ExitTicket = False - QueueList = os.listdir(f"{ListenFolder}") - for file in QueueList: - with open(f"{ListenFolder}/{file}", "r", encoding='UTF-8') as f: RelayXML = f.read() - AlertListXML = re.findall(r'', RelayXML, re.MULTILINE | re.IGNORECASE | re.DOTALL) - - if len(AlertListXML) > 1: - print("WHY THE F*** IS THERE 2 ALERT ELEMENTS IN A SINGLE XML FILE?!!?") - AlertCount = 0 - for AlertXML in AlertListXML: - AlertCount = AlertCount + 1 - print("Alert", AlertCount) - Sent = re.search(r'\s*(.*?)\s*', AlertXML, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1).replace("-", "_").replace("+", "p").replace(":", "_").replace("\n", "") - Ident = re.search(r'\s*(.*?)\s*', AlertXML, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1).replace("-", "_").replace("+", "p").replace(":", "_").replace("\n", "") - NAADsFilename = f"{Sent}I{Ident}.xml" - AlertXML = f"" - with open(f"{ListenFolder}/{NAADsFilename}", 'w', encoding='utf-8') as f: f.write(AlertXML) - os.remove(f"{ListenFolder}/{file}") - elif file in os.listdir(f"{HistoryFolder}"): - print("No relay: watch folder files matched.") - os.remove(f"{ListenFolder}/{file}") - ExitTicket = False - else: - ExitTicket = True - break - if ExitTicket is True: break - else: time.sleep(1) # Wait a little bit between looking for new files - return file + ExitTicket = True + break + if ExitTicket is True: break + else: time.sleep(1) # Wait a little bit between looking for new files + if QEinterrupt() is False: return file + +def Heartbeat(References, QueueFolder, HistoryFolder): + print("Downloading (Pelmorex NAADs) alerts from received heartbeat...") + RefList = References.split(" ") + for i in RefList: + j = re.sub(r'^.*?,', '', i) + j = j.split(",") + sent = j[1] + sentDT = sent.split("T", 1)[0] + sent = sent.replace("-","_").replace("+", "p").replace(":","_") + identifier = j[0] + identifier = identifier.replace("-","_").replace("+", "p").replace(":","_") + Dom1 = 'capcp1.naad-adna.pelmorex.com' + Dom2 = 'capcp2.naad-adna.pelmorex.com' + Output = f"{QueueFolder}/{sent}I{identifier}.xml" + if f"{sent}I{identifier}.xml" in os.listdir(f"{HistoryFolder}"): + print("Heartbeat, no download: Files matched.") + else: + print(f"Downloading: {sent}I{identifier}.xml...") + req1 = Request(url = f'http://{Dom1}/{sentDT}/{sent}I{identifier}.xml', headers={'User-Agent': 'Mozilla/5.0'}) + req2 = Request(url = f'http://{Dom2}/{sentDT}/{sent}I{identifier}.xml', headers={'User-Agent': 'Mozilla/5.0'}) + try: xml = urlopen(req1).read() + except: + try: xml = urlopen(req2).read() + except: pass + try: + with open(Output, "wb") as f: f.write(xml) + except: print("Heartbeat, download aborted: a general exception occurred, it could be that the URLs are temporarily unavailable.") -class Generate: - def __init__(self, InfoXML, SentDate, MsgType, SAMEcallsign): - self.InfoX = InfoXML - self.MsgType = MsgType - self.Sent = SentDate - self.Callsign = SAMEcallsign - self.CapCatToSameOrg = { - "Met": "WXR", - "Admin": "EAS", - "Other": "CIV", - } - self.CapEventToSameEvent = { - "911Service": "TOE", - "accident": "CDW", - "admin":"ADR", - "aircraftCras":"LAE", - "airportClose":"ADR", - "airQuality":"SPS", - "airspaceClos":"ADR", - "amber":"CAE", - "ambulance":"LAE", - "animalDang":"CDW", - "animalDiseas":"CDW", - "animalFeed":"CEM", - "animalHealth":"CEM", - "arcticOut":"SVS", - "avalanche":"AVW", - "aviation":"LAE", - "biological":"BHW", - "blizzard":"BZW", - "bloodSupply":"LAE", - "blowingSnow":"WSW", - "bridgeClose":"LAE", - "cable":"ADR", - "chemical":"CHW", - "civil":"CEM", - "civilEmerg":"CEM", - "civilEvent":"CEM", - "cold":"SVS", - "coldWave":"SVS", - "crime":"CDW", - "damBreach":"DBW", - "damOverflow":"DBW", - "dangerPerson":"CDW", - "diesel":"LAE", - "drinkingWate":"CWW", - "dustStorm":"DSW", - "earthquake":"EQW", - "electric":"POS", - "emergFacil":"CEM", - "emergSupport":"CEM", - "explosive":"HMW", - "facility":"CEM", - "fallObject":"HMW", - "fire":"FRW", - "flashFlood":"FFW", - "flashFreeze":"FSW", - "flood":"FLW", - "fog":"SPS", - "foodSupply":"LAE", - "forestFire":"WFW", - "freezeDrzl":"WSW", - "freezeRain":"WSW", - "freezngSpray":"WSW", - "frost":"SPS", - "galeWind":"HWW", - "gasoline":"LAE", - "geophyiscal":"CEM", - "hazmat":"BHW", - "health":"BHW", - "heat":"SVS", - "heatHumidity":"SVS", - "heatingOil":"LAE", - "heatWave":"SVS", - "highWater":"SVS", - "homeCrime":"CEM", - "hospital":"LAE", - "hurricane":"HUW", - "hurricFrcWnd":"HUW", - "ice":"SPS", - "iceberg":"IBW", - "icePressure":"SPS", - "industCrime":"CEM", - "industryFire":"IFW", - "infectious":"DEW", - "internet":"ADR", - "lahar":"VOW", - "landslide":"LSW", - "lavaFlow":"VOW", - "magnetStorm":"CDW", - "marine":"SMW", - "marineSecure":"SMW", - "meteor":"CDW", - "missingPer":"MEP", - "missingVPer":"MEP", - "naturalGas":"LAE", - "nautical":"ADR", - "notam":"ADR", - "other":"CEM", - "overflood":"FLW", - "plant":"LAE", - "plantInfect":"LAE", - "product":"LAE", - "publicServic":"LAE", - "pyroclasFlow":"VOW", - "pyroclaSurge":"VOW", - "radiological":"RHW", - "railway":"LAE", - "rainfall":"SPS", - "rdCondition":"LAE", - "reminder":"CEM", - "rescue":"CEM", - "retailCrime":"CEM", - "road":"LAE", - "roadClose":"ADR", - "roadDelay":"ADR", - "roadUsage":"ADR", - "rpdCloseLead":"ADR", - "satellite":"ADR", - "schoolBus":"ADR", - "schoolClose":"ADR", - "schoolLock":"CDW", - "sewer":"LAE", - "silver":"CEM", - "snowfall":"WSW", - "snowSquall":"WSW", - "spclIce":"SPS", - "spclMarine":"SMW", - "squall":"SMW", - "storm":"SVS", - "stormFrcWnd":"SVS", - "stormSurge":"SSW", - "strongWind":"HWW", - "telephone":"LAE", - "temperature":"SPS", - "terrorism":"CDW", - "testMessage":"DMO", - "thunderstorm":"SVR", - "tornado":"TOR", - "traffic":"ADR", - "train":"ADR", - "transit":"ADR", - "tropStorm":"TRW", - "tsunami":"TSW", - "urbanFire":"FRW", - "utility":"ADR", - "vehicleCrime":"CEM", - "volcanicAsh":"VOW", - "volcano":"VOW", - "volunteer":"ADR", - "waste":"ADR", - "water":"ADR", - "waterspout":"SMW", - "weather":"SPS", - "wildFire":"FRW", - "wind":"HWW", - "windchill":"SPS", - "winterStorm":"WSW" - } - - def GeoToCLC(self): - GeocodeList = re.findall(r'\s*profile:CAP-CP:Location:0.3\s*\s*(.*?)\s*', self.InfoX, re.MULTILINE | re.IGNORECASE | re.DOTALL) - filepath = './GeoToCLC.csv' - SameDict = {} +def UpdateCGEN(color="000000", headline="", text="", stat=True): + try: + CGEN_Dict = { "color": color, "headline": headline, "text": text, "alertStat": stat } + with open(f"{Assets_Folder}/AlertText.json", 'w') as json_file: json.dump(CGEN_Dict, json_file, indent=2) + except: pass + +def ConvertAudioFormat(inputAudio, outputAudio): + result = subprocess.run(["ffmpeg", "-y", "-i", inputAudio, outputAudio], capture_output=True, text=True) + if result.returncode == 0: print(f"{inputAudio} --> {outputAudio} ... Conversion successful!") + else: print(f"{inputAudio} --> {outputAudio} ... Conversion failed: {result.stderr}") + +def LoudenAudio(inputAudio, outputAudio): + result = subprocess.run(["ffmpeg", "-y", "-i", inputAudio, "-filter:a", "volume=2.5", outputAudio], capture_output=True, text=True) + if result.returncode == 0: print(f"Filter loudening success.") + else: print(f"Filter loudening failure: {result.stderr}") + +def GenerateTTS(Output, InputConfig=None, InputText=None, Language="EN"): + # This function will generate TTS and output it to an audio file. + try: os.remove(Output) + except: pass + try: pythoncom.CoInitialize() + except: pass + if InputConfig["TTS_Service"] == "pyttsx3": + engine = pyttsx3.init() + if InputConfig["UseDefaultVoices"] is False: + if Language == "FR": ActiveVoice = InputConfig["VoiceFR"] + else: ActiveVoice = InputConfig["VoiceEN"] + voices = engine.getProperty('voices') + ActiveVoice = next((voice for voice in voices if voice.name == ActiveVoice), None) + if ActiveVoice: engine.setProperty('voice', ActiveVoice.id) + engine.save_to_file(str(InputText), Output) + engine.runAndWait() + elif InputConfig["TTS_Service"] == "flite": + InputText = InputText.replace("\n", " ") + if InputConfig["UseDefaultVoices"] is False: + if Language == "FR": ActiveVoice = InputConfig["FliteVoice_FR"] + else: ActiveVoice = InputConfig["FliteVoice_EN"] + subprocess.run(["flite", "-t", InputText, "-voice", ActiveVoice, "-o", Output], capture_output=True, text=True) + else: subprocess.run(["flite", "-t", InputText, "-o", Output], capture_output=True, text=True) + +def EventSuffix(EventIn): + target_words = {"test", "watch", "warning", "alert", "emergency", "notification"} + words = EventIn.split() + if words: + last_word = words[-1].lower() + return last_word in target_words + return False + +def TrimAudio(input_file, max_duration_ms=120000): + # For broadcast audio + output_file = input_file + ".trimmed" + audio = AudioSegment.from_file(input_file) + duration_ms = len(audio) + if duration_ms > max_duration_ms: + trimmed_audio = audio[:max_duration_ms] + trimmed_audio.export(output_file, format="wav") + print(f"Broadcast Audio trimmed to {max_duration_ms / 1000} seconds.") + shutil.move(output_file, input_file) + else: pass + +# Actual, Update, Cancel, Test +MsgTypeConv = { + "EN":{ "Alert":"has issued", "Update":"has updated", "Cancel":"has ended", "Test":"has issued" }, + "FR":{ "Alert":"a émis", "Update":"a mis à jour", "Cancel":"est terminé", "Test":"a émis" } +} + +def GeoToCLC(InfoXML): + GeocodeList = re.findall(r'\s*profile:CAP-CP:Location:0.3\s*\s*(.*?)\s*', InfoXML, re.MULTILINE | re.IGNORECASE | re.DOTALL) + filepath = f"{Assets_Folder}/GeoToCLC.csv" + SameDict = {} + + try: with open(filepath) as fp: line = fp.readline() cnt = 1 @@ -557,1002 +727,1621 @@ def GeoToCLC(self): SameDict[SAMESPLIT[0]] = SAMESPLIT[1] line = fp.readline() cnt += 1 + except: return "000000" + + CLC = "" + for i in GeocodeList: + try: C = SameDict[i] + except: C = "" + if C == "": pass + else: CLC = f"{CLC}" + f"{C}," + + # Aaron i know you're kinda gonna cringe at this, but we need it + CLC = "".join(CLC.rsplit(",",1)) + CLC = CLC.split(",") + CLC = "-".join(CLC) + CLC = CLC.split("-") + CLC = list(set(CLC)) + CLC = "-".join(CLC) + return CLC + +def GetMedia(InputSource, OutputAudio, DecodeType): + if DecodeType == 1: + print("Decoding media from BASE64...") + with open(OutputAudio, "wb") as fh: fh.write(base64.decodebytes(InputSource)) + elif DecodeType == 0: + print("Downloading media...") + r = requests.get(InputSource) + with open(OutputAudio, 'wb') as f: f.write(r.content) + +def GetAlertRegion(XML): + # Get the alert region of CAP XML + try: + CODE = re.findall(r'\s*(.*?)\s*', XML, re.MULTILINE | re.IGNORECASE | re.DOTALL) + if "profile:CAP-CP:0.4" in str(CODE): CODE = "CANADA" + elif "IPAWSv1.0" in str(CODE): CODE = "USA" + else: CODE = None + return CODE + except: return None - CLC = "" - for i in GeocodeList: - try: - C = SameDict[i] - except: - C = "" - if C == "": - pass - else: - CLC = f"{CLC}" + f"{C}," +def CreateSAMEmonitorXML(SAME, audioInput, monitorName): + try: + SAME = SAME.replace("\n", "") + oof = EAS2Text(SAME) - # Aaron i know you're kinda gonna cringe at this, but we need it - CLC = "".join(CLC.rsplit(",",1)) - CLC = CLC.split(",") - CLC = "-".join(CLC) - CLC = CLC.split("-") - CLC = list(set(CLC)) - CLC = "-".join(CLC) - return CLC - - def SAMEheader(self): - Callsign = self.Callsign - if len(Callsign) > 8: Callsign = "QUANTUM0"; print("Your callsign is too long!") - elif len(Callsign) < 8: Callsign = "QUANTUM0"; print("Your callsign is too short!") - elif "-" in Callsign: Callsign = "QUANTUM0"; print("Your callsign contains an invalid symbol!") + sent = datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%S-00:00') + sent_rp = sent.replace("-","").replace(":","") + ident_code = ''.join(random.choices(string.ascii_uppercase + string.digits, k=10)) + ident = f"{sent_rp}{ident_code}" + output = f"{XMLqueue_Folder}/{monitorName}-{sent_rp}I{ident}.xml" + current_time = datetime.strptime(sent, "%Y-%m-%dT%H:%M:%S-00:00") - try: ORG = re.search(r'\s*EAS-ORG\s*\s*(.*?)\s*\s*', self.InfoX, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - except: - try: ORG = self.CapCatToSameOrg[re.search(r'\s*(.*?)\s*', self.InfoX, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1)] - except: ORG = "CIV" + try: hours, minutes = map(int, oof.purge) + except: hours, minutes = map(int, ['01','30']) + expiry_time = current_time + timedelta(hours=hours, minutes=minutes) + expiry_timestamp = expiry_time.strftime("%Y-%m-%dT%H:%M:%S-00:00") - try: - EVE = re.search(r'\s*SAME\s*\s*(.*?)\s*', self.InfoX, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - if EVE is None or EVE == "": EVE = "CEM" - except: - try: - EVE = re.search(r'\s*profile:CAP-CP:Event:0.4\s*\s*(.*?)\s*', self.InfoX, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - EVE = self.CapEventToSameEvent[EVE] - except: EVE = "CEM" + monitorName = monitorName.replace("\n", "") + try: Cate = SameOrgToCapCat[oof.org] + except: Cate = "Other" + FIPs = "-".join(oof.FIPS) - try: Effective = datetime.fromisoformat(datetime.fromisoformat(re.search(r'\s*(.*?)\s*', self.InfoX, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1)).astimezone(timezone.utc).isoformat()).strftime("%j%H%M") - except: Effective = datetime.now().astimezone(timezone.utc).strftime("%j%H%M") - try: - NowTime = datetime.now(timezone.utc) - NowTime = NowTime.replace(microsecond=0).isoformat() - NowTime = NowTime[:-6] - NowTime = datetime.fromisoformat(NowTime) - ExpireTime = re.search(r'\s*(.*?)\s*', self.InfoX, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - ExpireTime = datetime.fromisoformat(ExpireTime).astimezone(timezone.utc) - ExpireTime = ExpireTime.isoformat() - ExpireTime = ExpireTime[:-6] - ExpireTime = datetime.fromisoformat(ExpireTime) - Purge = ExpireTime - NowTime - hours, remainder = divmod(Purge.seconds, 3600) - minutes, _ = divmod(remainder, 60) - Purge = "{:02}{:02}".format(hours, minutes) - except: Purge = "0600" + with open(audioInput, 'rb') as wav_file: wav_data = wav_file.read() + encoded_data = base64.b64encode(wav_data).decode('utf-8') + embedded_audio = f""" + + broadcast audio + audio/wave + {encoded_data} + + """ + except: embedded_audio = "" + + XML = f""" + + {ident} + {monitorName} + {sent} + Actual + Alert + QuantumENDEC Internal Monitor + Public + + en-US + {Cate} + {oof.evntText} + Monitor + Immediate + Extreme + Observed + SAME{oof.evnt} + {sent} + {expiry_timestamp} + {oof.orgText} + {oof.evntText} + From {oof.callsign} + {embedded_audio} + EAS-ORG{oof.org} + {oof.strFIPS}SAME{FIPs} + + + """ + + with open(output, "w") as f: f.write(XML) + except: pass - if "layer:EC-MSC-SMC:1.1:Newly_Active_Areas" in str(self.InfoX): - try: CLC = re.search(r'layer:EC-MSC-SMC:1.1:Newly_Active_Areas\s*\s*(.*?)\s*', self.InfoX, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1).replace(',','-') - except: CLC = self.GeoToCLC() +def GetPlatform(): + if sys.platform == "win32": platform = "win" + else: platform = "other" + return platform + +def get_len(fname): + with contextlib.closing(wave.open(fname,'r')) as f: + frames = f.getnframes() + rate = f.getframerate() + duration = frames / float(rate) + return duration + +def freq(file, start_time, end_time): + sr, data = wavfile.read(file) + if data.ndim > 1: data = data[:, 0] + else: pass + dataToRead = data[int(start_time * sr / 1000) : int(end_time * sr / 1000) + 1] + N = len(dataToRead) + yf = rfft(dataToRead) + xf = rfftfreq(N, 1 / sr) + idx = numpy.argmax(numpy.abs(yf)) # Get the most dominant frequency and return it + freq = xf[idx] + return freq + +def RemoveEOMpATTN(AudioFile): + try: + # Remove END (EOMs) + # audio = AudioSegment.from_file(f"Audio/tmp/{moniName}out.wav") + audio = AudioSegment.from_file(AudioFile) + lengthaudio = len(audio) + start = 0 + threshold = lengthaudio - 1200 + end = 0 + counter = 0 + end += threshold + chunk = audio[start:end] + filename = f"{AudioFile}.rmend" + chunk.export(filename, format="wav") + counter +=1 + start += threshold + except: pass + + try: + # Remove attention tone + timelist = [] + freqlist = [] + ATTNCUT = 0 + file_length = get_len(f"{AudioFile}.rmend") + if file_length < 23: file_length = round(file_length) + else: file_length = 80 + cnt = 0 + for e in range(file_length): + cnt = cnt + 1 + val = 300 + start = e * val + offset = start + val + timelist.append(start) + frequency = freq(f"{AudioFile}.rmend", start, offset) + freqlist.append(frequency) + freqlist = list(freqlist) + mainlen = len(freqlist) + found = False + for e in range(len(freqlist)): + if found == False: + if 810 < round(int(freqlist[e])) < 1070: + if 810 < round(int(freqlist[e + 1])) < 1070 and 810 < round(int(freqlist[e + 2])) < 1070: + found = True + elif found == True: + if freqlist[e] < 810 or freqlist[e] > 1070: + if e + 5 < mainlen: + if freqlist[e + 1] < 810 or freqlist[e + 1] > 1070 and freqlist[e + 2] < 810 or freqlist[e + 2] > 1070 and freqlist[e + 3] < 810 or freqlist[e + 3] > 1070 and freqlist[e + 4] < 810 or freqlist[e + 4] > 1070 and freqlist[e + 5] < 810 or freqlist[e + 5] > 1070: + end_point = e + found = None + os.remove(AudioFile) + if(found == None): pass else: - CLC = re.findall(r'\s*SAME\s*\s*(.*?)\s*\s*', self.InfoX, re.MULTILINE | re.IGNORECASE | re.DOTALL) - CLC = '-'.join(CLC) - if str(CLC) == "": CLC = self.GeoToCLC() - if CLC == "": CLC = "000000" + gl = round(get_len(f"{AudioFile}.rmend")) + if(gl > 4): end_point = 17 #5 seconds + else: end_point = gl // 2 + audio = AudioSegment.from_file(f"{AudioFile}.rmend") + lengthaudio = len(audio) + cut = 300 * end_point + start = cut + threshold = lengthaudio - cut + end = lengthaudio + counter = 0 + while start < len(audio): + end += threshold + chunk = audio[start:end] + chunk.export(AudioFile, format="wav") + counter +=1 + start += threshold + except: pass - GeneratedHeader = f"ZCZC-{ORG}-{EVE}-{CLC}+{Purge}-{Effective}-{Callsign}-" - return GeneratedHeader - - def LastWordThing(self, headline): - target_words = {"test", "watch", "warning", "alert", "emergency"} - words = headline.split() - if words: - last_word = words[-1].lower() - return last_word in target_words - return False - - def BroadcastText(self, lang): - try: BroadcastText = re.search(r'layer:SOREM:1.0:Broadcast_Text\s*\s*(.*?)\s*', self.InfoX, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1).replace('\n',' ').replace(' ',' ') - except: - if lang == "fr": issue = "émis"; update = "mis à jour"; cancel = "annulé" - else: issue = "issued"; update = "updated"; cancel = "cancelled" - - if self.MsgType == "Alert": MsgPrefix = issue - elif self.MsgType == "Update": MsgPrefix = update - elif self.MsgType == "Cancel": MsgPrefix = cancel - else: MsgPrefix = "issued" - - Sent = datetime.fromisoformat(datetime.fromisoformat(self.Sent).astimezone(timezone.utc).isoformat()) - Sent = Sent.astimezone() - if lang == "fr": Sent = Sent.strftime("%Hh%M.") - else: Sent = Sent.strftime("%H:%M %Z, %B %d, %Y.") +def ZCZC_test(inp): + inp = inp.split("-") + num = len(inp) - 6 + if len(inp[num + 3]) != 7: return False + elif len(inp[num + 4]) != 8: return False + elif len(inp[0]) != 4: return False #ZCZC + elif len(inp[1]) != 3: return False #"EAS" + elif len(inp[2]) != 3: return False #"DMO" + if num == 1 and len(inp[3]) == 11: return True + elif num > 1: + for e in range(num): + if (e + 1) == num: + if len(inp[e+3]) == 11: return True + else: return False + elif len(inp[e+3]) != 6: return False + else: return False + +class Webserver: + def __init__(self): + self.QEWEB_flaskapp = Flask(__name__) + self.setup_routes() + self.QEWEB_flaskapp.secret_key = secrets.token_hex(16) + self.PASSWORD_FILE = './password.json' + self.SESSION_COOKIE_NAME = 'session_id' + self.SESSIONS = {} + self.DEFAULT_PASSWORD_HASH = hashlib.sha256('hackme'.encode()).hexdigest() + + def save_password(self, password_hash): + with open(self.PASSWORD_FILE, 'w') as file: json.dump({'password': password_hash}, file) + + def get_audio_devices(self): + devices = sd.query_devices() + output_devices = [device for device in devices if device['max_output_channels'] > 0] + return [f"{device['name']}, {sd.query_hostapis()[device['hostapi']]['name']}" for device in output_devices] + + def get_audio_inputs(self): + devices = sd.query_devices() + input_devices = [device for device in devices if device['max_input_channels'] > 0] + return [f"{device['name']}, {sd.query_hostapis()[device['hostapi']]['name']}" for device in input_devices] + + def list_tts_voices(self): + try: + try: pythoncom.CoInitialize() + except: pass + engine = pyttsx3.init() + voices = engine.getProperty('voices') + return [voice.name for voice in voices] + except Exception as e: print("[Webserver]: Exception getting the list of TTS voices (pyttsx3): ", e) + + def load_config(self): + try: + with open(Config_File, 'r') as file: return json.load(file) + except FileNotFoundError: return {} + + def save_config(self, config): + config['version'] = QuantumENDEC_Version + with open(Config_File, 'w') as file: json.dump(config, file, indent=4) + + # Load the password from a file or use a default + def load_password(self): + try: + with open('password.json', 'r') as file: + data = json.load(file) + return data.get('password', self.DEFAULT_PASSWORD_HASH) + except FileNotFoundError: return self.DEFAULT_PASSWORD_HASH + + # Check if the user is authenticated + def is_authenticated(self): + session_id = request.cookies.get(self.SESSION_COOKIE_NAME) + return session_id in self.SESSIONS + + # Create a new session + def create_session(self): + session_id = ''.join(random.choices(string.ascii_letters + string.digits, k=32)) + self.SESSIONS[session_id] = True + return session_id + + def GetActiveAlerts(self): + try: + with open(Config_File, "r") as JCfile: config = JCfile.read() + ConfigData = json.loads(config) + ActiveAlerts = [] + XMLhistory = os.listdir(XMLhistory_Folder) + current_time = datetime.now(timezone.utc) + for i in XMLhistory: + try: + with open(f"{XMLhistory_Folder}/{i}", "r", encoding='utf-8') as f: XML = f.read() + Sent = re.search(r'\s*(.*?)\s*', XML, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) + MessageType = re.search(r'\s*(.*?)\s*', XML, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) + Status = re.search(r'\s*(.*?)\s*', XML, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) + XML = re.findall(r'\s*(.*?)\s*', XML, re.MULTILINE | re.IGNORECASE | re.DOTALL) + InfoProc = 0 + ExpireProc = 0 + + for InfoEN in XML: + InfoProc = InfoProc + 1 + InfoEN = f"{InfoEN}" + try: + Expires = datetime.fromisoformat(datetime.fromisoformat(re.search(r'\s*(.*?)\s*', InfoEN, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1)).astimezone(timezone.utc).isoformat()) + if current_time > Expires: + ExpireProc = ExpireProc + 1 + continue + except: + ExpireProc = ExpireProc + 1 + continue + + try: + if "fr" in re.search(r'\s*(.*?)\s*', InfoEN, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1): lang = "fr" + elif "es" in re.search(r'\s*(.*?)\s*', InfoEN, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1): lang = "es" + else: lang = "en" + except: lang = "en" + try: + if ConfigData[f'relay_{lang}'] is False: continue + except: continue + + Urgency = re.search(r'\s*(.*?)\s*', InfoEN, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) + Severity = re.search(r'\s*(.*?)\s*', InfoEN, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) + Sent = Sent.replace("T"," ") + expire = re.search(r'\s*(.*?)\s*', InfoEN, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1).replace("T"," ") + senderName = re.search(r'\s*(.*?)\s*', InfoEN, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) + Description = re.search(r'\s*(.*?)\s*', InfoEN, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) + event = re.search(r'\s*(.*?)\s*', InfoEN, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) + if Description == "###": continue + ActiveAlerts.append(f"CAP from {senderName}\n Sent: {Sent}\n Expires: {expire}\n{Status}, {MessageType}\n {Urgency}, {Severity}\n Event: {event}\n\n {Description}") + if InfoProc == ExpireProc: + try: os.remove(f"{XMLhistory_Folder}/{i}") + except: pass + except: continue + return ActiveAlerts + except: return [] + + # ... FLASK THINGS ... + def setup_routes(self): + @self.QEWEB_flaskapp.route('/activeAlerts') + def activeAlerts(): + try: + ActiveAlerts = self.GetActiveAlerts() + if not ActiveAlerts: return jsonify(["No alerts"]) + return jsonify(ActiveAlerts) + except: return jsonify(["Error fetching alerts"]) + + @self.QEWEB_flaskapp.route('/config') + def config_page(): + if not self.is_authenticated(): return redirect(url_for('login_page')) + return send_from_directory(Assets_Folder, 'config.html') + + @self.QEWEB_flaskapp.route('/audio_devices') + def audio_devices(): + if not self.is_authenticated(): return jsonify({'error': 'Unauthorized'}), 401 + devices = self.get_audio_devices() + return jsonify(devices) + + @self.QEWEB_flaskapp.route('/audio_inputs') + def audio_inputs(): + if not self.is_authenticated(): return jsonify({'error': 'Unauthorized'}), 401 + devices = self.get_audio_inputs() + return jsonify(devices) + + @self.QEWEB_flaskapp.route('/tts_voices') + def tts_voices(): + if not self.is_authenticated(): return jsonify({'error': 'Unauthorized'}), 401 + voices = self.list_tts_voices() + return jsonify(voices) + + @self.QEWEB_flaskapp.route('/config_data') + def config_data(): + if not self.is_authenticated(): return jsonify({'error': 'Unauthorized'}), 401 + config = self.load_config() + return jsonify(config) + + @self.QEWEB_flaskapp.route('/save_config', methods=['POST']) + def save_config_data(): + if not self.is_authenticated(): return jsonify({'error': 'Unauthorized'}), 401 + config = request.json + self.save_config(config) + return 'Configuration saved successfully.', 200 + + @self.QEWEB_flaskapp.route('/change_password', methods=['POST']) + def change_password(): + if not self.is_authenticated(): return 'Unauthorized.', 401 + data = request.get_json() + current_password_hash = hashlib.sha256(data['currentPassword'].encode()).hexdigest() + new_password_hash = hashlib.sha256(data['newPassword'].encode()).hexdigest() + if current_password_hash == self.load_password(): + self.save_password(new_password_hash) + self.SESSIONS.clear() # Clear all sessions + return 'Password changed successfully.', 200 + else: return 'Incorrect current password.', 403 + + @self.QEWEB_flaskapp.route('/login', methods=['GET', 'POST']) + def login_page(): + if request.method == 'POST': + data = request.json + password_hash = hashlib.sha256(data['password'].encode()).hexdigest() + if password_hash == self.load_password(): + session_id = self.create_session() + response = make_response('Login successful.') + response.set_cookie(self.SESSION_COOKIE_NAME, session_id, httponly=True, samesite='Lax') + return response + else: return 'Incorrect password.', 403 + return send_from_directory(Assets_Folder, 'login.html') + #return send_from_directory('', 'login.html') + + @self.QEWEB_flaskapp.route('/logout', methods=['POST']) + def logout(): + session.clear() # Clear all session data + response = make_response(redirect('/login.html')) # Create a response object + response.set_cookie(self.SESSION_COOKIE_NAME, '', expires=0) # Remove the session cookie + return response + + @self.QEWEB_flaskapp.route('/clearAlertLogTxt', methods=['POST']) + def clearAlertlogTxt(): + try: + with open(f"{Assets_Folder}/alertlog.txt", "w") as f: f.write("") + except: pass + response = make_response(redirect('/alertLog.html')) + return response + + @self.QEWEB_flaskapp.route('/send_alert', methods=['POST']) + def send_alert(): + data = request.json + nowTime = datetime.now(timezone.utc) + sent = nowTime.strftime('%Y-%m-%dT%H:%M:%S-00:00') + expire = nowTime + timedelta(hours=1) + expire = expire.strftime('%Y-%m-%dT%H:%M:%S-00:00') + sentforres = nowTime.strftime('%Y%m%dT%H%M%S') + res = ''.join(random.choices(string.ascii_uppercase + string.digits, k=10)) + res = f"{res}{sentforres}" + + try: Cate = SameOrgToCapCat[data['ORG']] + except: Cate = "Other" + + EVENT = data['EVE'] + EVENT = EVENT.upper() + EVENT = EVENT[:3] + + if data['SecondaryInfo'] is True: + try: Cate_second = SameOrgToCapCat[data['ORG_second']] + except: Cate_second = "Other" + EVENT_second = data['EVE_second'] + EVENT_second = EVENT_second.upper() + EVENT_second = EVENT_second[:3] + secondInfo = f""" + + {data['LANGUAGE_second']} + {Cate_second} + internal + Unknown + Unknown + Unknown + {sent} + {expire} + SAME{EVENT_second} + QuantumENDEC Internal + {EVENT_second} + {data['broadcastText_second']} + layer:SOREM:1.0:Broadcast_Text{data['broadcastText_second']} + EAS-ORG{data['ORG_second']} + Specified locationsSAME{data['FIPS_second']} + + """ + else: secondInfo = "" + + finalXML = f""" + + {res} + QuantumENDEC Internal + {sent} + Actual + Alert + QuantumENDEC Self Alert Orginator + Public + + {data['LANGUAGE']} + {Cate} + internal + Unknown + Unknown + Unknown + {sent} + {expire} + SAME{EVENT} + QuantumENDEC Internal + {EVENT} + {data['broadcastText']} + layer:SOREM:1.0:Broadcast_Text{data['broadcastText']} + EAS-ORG{data['ORG']} + Specified locationsSAME{data['FIPS']} + + {secondInfo} + + """ + + filenameXML = f"{sent.replace(':', '_')}I{res}.xml" + print(f"Creating alert: {filenameXML}") + with open(f"{XMLqueue_Folder}/{filenameXML}", "w", encoding="utf-8") as file: file.write(finalXML) + return 'Alert XML created successfully.' + + @self.QEWEB_flaskapp.before_request + def require_login(): + public_paths = ['/login', '/login.html', '/scroll.html', '/alertText', '/fullscreen.html', '/Jstyle.html', '/tmp/alertImage.png', '/fullscreenWimage.html'] + if request.path not in public_paths: + if not self.is_authenticated(): return redirect(url_for('login')) + + @self.QEWEB_flaskapp.route('/login', methods=['GET', 'POST']) + def login(): + if request.method == 'POST': + data = request.json + password_hash = hashlib.sha256(data['password'].encode()).hexdigest() + + if password_hash == self.load_password(): + session_id = self.create_session() + response = jsonify(message='Login successful.') + response.set_cookie(self.SESSION_COOKIE_NAME, session_id, httponly=True) + return response + else: return jsonify(message='Incorrect password.'), 403 - try: EventType = re.search(r'layer:EC-MSC-SMC:1.0:Alert_Name\s*\s*(.*?)\s*', self.InfoX, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - except: - if lang == "fr": - EventType = re.search(r'\s*(.*?)\s*', self.InfoX, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - EventType = f"alerte {EventType}" - else: - EventType = re.search(r'\s*(.*?)\s*', self.InfoX, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - if self.LastWordThing(EventType) is True: pass - else: EventType = f"{EventType} alert" + return make_response(open('login.html').read()) # Render login page if GET request + + @self.QEWEB_flaskapp.route('/upload_config', methods=['POST']) + def upload_config(): + if 'file' not in request.files: return jsonify({'error': 'No file part'}), 400 + file = request.files['file'] + if file.filename == '': return jsonify({'error': 'No selected file'}), 400 + if not file.filename.endswith('.json'): return jsonify({'error': 'Only JSON files are accepted'}), 400 + file.save(Config_File) + return jsonify({'success': f'File uploaded and saved as {Config_File}'}), 200 + + @self.QEWEB_flaskapp.route('/upload_leadin', methods=['POST']) + def upload_leadin(): + SAVE_PATH = f'{Assets_Folder}/pre.wav' + if 'file' not in request.files: return jsonify({'error': 'No file part'}), 400 + file = request.files['file'] + if file.filename == '': return jsonify({'error': 'No selected file'}), 400 + if not file.filename.endswith('.wav'): return jsonify({'error': 'Only wav files are accepted'}), 400 + file.save(SAVE_PATH) + return jsonify({'success': 'File uploaded and saved'}), 200 + + @self.QEWEB_flaskapp.route('/upload_leadout', methods=['POST']) + def upload_leadout(): + SAVE_PATH = f'{Assets_Folder}/post.wav' + if 'file' not in request.files: return jsonify({'error': 'No file part'}), 400 + file = request.files['file'] + if file.filename == '': return jsonify({'error': 'No selected file'}), 400 + if not file.filename.endswith('.wav'): return jsonify({'error': 'Only wav files are accepted'}), 400 + file.save(SAVE_PATH) + return jsonify({'success': 'File uploaded and saved'}), 200 + + @self.QEWEB_flaskapp.route('/remove_Leadin', methods=['POST']) + def removeLeadin(): + try: + os.remove(f"{Assets_Folder}/pre.wav") + return jsonify({'success': 'Lead in audio removed'}) + except: return jsonify({'error': 'Failed to remove Lead in audio'}) + @self.QEWEB_flaskapp.route('/remove_Leadout', methods=['POST']) + def removeLeadout(): try: - Coverage = re.search(r'layer:EC-MSC-SMC:1.0:Alert_Coverage\s*\s*(.*?)\s*', self.InfoX, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - if lang == "fr": Coverage = f"en {Coverage} pour:" - else: Coverage = f"in {Coverage} for:" + os.remove(f"{Assets_Folder}/post.wav") + return jsonify({'success': 'Lead out audio removed'}) + except: return jsonify({'error': 'Failed to remove Lead out audio'}) + + @self.QEWEB_flaskapp.route('/alertText') + def GetAlertText(): + try: + with open(f"{Assets_Folder}/AlertText.json", "r") as f: alertText = json.load(f) + return jsonify(alertText) except: - if lang == "fr": Coverage = "pour:" - else: Coverage = "for:" + nothingThing = { "nothing":True } + return jsonify(nothingThing) - AreaDesc = re.findall(r'\s*(.*?)\s*', self.InfoX, re.MULTILINE | re.IGNORECASE | re.DOTALL) - AreaDesc = ', '.join(AreaDesc) + '.' - try: SenderName = re.search(r'\s*(.*?)\s*', self.InfoX, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - except: SenderName = "an alert issuer" - try: Description = re.search(r'\s*(.*?)\s*', self.InfoX, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1).replace('\n', ' ') - except: Description = "" - try: Instruction = re.search(r'\s*(.*?)\s*', self.InfoX, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1).replace('\n', ' ') - except: Instruction = "" + @self.QEWEB_flaskapp.route('/version') + def GetVersion(): + return QuantumENDEC_Version + + @self.QEWEB_flaskapp.route('/restart', methods=['GET']) + def RestartQE(): + global QuantumStatus + if QuantumStatus == 1: + return "QuantumENDEC is already in the process of restarting!" + + if QuantumStatus == 2: + return "QuantumENDEC is already in the process of shutting down!" - if lang == "fr": BroadcastText = f"À {Sent} {SenderName} a {MsgPrefix} une {EventType} {Coverage} {AreaDesc} {Description} {Instruction}".replace('###','').replace(' ',' ') - else: BroadcastText = f"At {Sent} {SenderName} has {MsgPrefix} a {EventType} {Coverage} {AreaDesc} {Description} {Instruction}".replace('###','').replace(' ',' ') + if QuantumStatus == 0: + QuantumStatus = 1 + return "Now restarting QuantumENDEC... Check the status tab for QuantumENDEC's condition. The restart may take a while." - return BroadcastText + @self.QEWEB_flaskapp.route('/shutdown', methods=['GET']) + def ShutdownQE(): + global QuantumStatus + if QuantumStatus == 0: + QuantumStatus = 2 + return """

Now shutting down QuantumENDEC...

""" + + if QuantumStatus == 1: + QuantumStatus = 2 + return """

QuantumENDEC was already restarting, now shutting down...

""" + + if QuantumStatus == 2: + return """

QuantumENDEC is already in the process of shutting down...

""" + + #return """Now shutting down QuantumENDEC...""" - def GetAudio(self, AudioLink, Output, DecodeType): - if DecodeType == 1: - print("Decoding audio from BASE64...") - with open(Output, "wb") as fh: fh.write(base64.decodebytes(AudioLink)) - elif DecodeType == 0: - print("Downloading audio...") - r = requests.get(AudioLink) - with open(Output, 'wb') as f: f.write(r.content) - - def ConvAudioFormat(self, inputAudio, outputAudio): - result = subprocess.run(["ffmpeg", "-y", "-i", inputAudio, outputAudio], capture_output=True, text=True) - if result.returncode == 0: print(f"[RELAY/GENERATE]: {inputAudio} --> {outputAudio} ... Conversion successful!") - else: print(f"[RELAY/GENERATE]: {inputAudio} --> {outputAudio} ... Conversion failed: {result.stderr}") - - def LoudenAudio(self, inputAudio, outputAudio): - result = subprocess.run(["ffmpeg", "-y", "-i", inputAudio, "-filter:a", "volume=2.5", outputAudio], capture_output=True, text=True) - if result.returncode == 0: print(f"[RELAY/GENERATE]: Filter loudening success.") - else: print(f"[RELAY/GENERATE]: Filter loudening failure: {result.stderr}") - - def TrimAudio(self, input_file, output_file, max_duration_ms=120000): - # For broadcast audio - try: - audio = AudioSegment.from_file(input_file) - duration_ms = len(audio) - if duration_ms > max_duration_ms: - trimmed_audio = audio[:max_duration_ms] - trimmed_audio.export(output_file, format="wav") - print(f"Broadcast Audio trimmed to {max_duration_ms / 1000} seconds.") - shutil.move(output_file, input_file) - else: pass - except: print("Failed to trim broadcast audio!") - - def Audio(self, BroadcastText, lang, ConfigData): - try: - resources = re.findall(r'\s*(.*?)\s*', self.InfoX, re.MULTILINE | re.IGNORECASE | re.DOTALL) - if "audio/mpeg" in str(resources): pass - elif "audio/x-ms-wma" in str(resources): pass - elif "audio/wave" in str(resources): pass - elif "audio/wav" in str(resources): pass - elif "audio/x-ipaws-audio-mp3" in str(resources): pass - else: raise Exception("Generate TTS instead") - for BroadcastAudioResource in resources: - if "" in BroadcastAudioResource: - AudioLink = bytes(re.search(r'\s*(.*?)\s*', BroadcastAudioResource, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1), 'utf-8') - AudioType = re.search(r'\s*(.*?)\s*', BroadcastAudioResource, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - Decode = 1 - else: - AudioLink = re.search(r'\s*(.*?)\s*', BroadcastAudioResource, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - AudioType = re.search(r'\s*(.*?)\s*', BroadcastAudioResource, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - Decode = 0 - - if AudioType == "audio/mpeg": - self.GetAudio(AudioLink,"Audio/tmp/PreAudio.mp3",Decode) - self.ConvAudioFormat("Audio/tmp/PreAudio.mp3", "Audio/tmp/PreAudio.wav") - os.remove("Audio/tmp/PreAudio.mp3") - self.LoudenAudio("Audio/tmp/PreAudio.wav", "Audio/audio.wav") - os.remove("Audio/tmp/PreAudio.wav") - - elif AudioType == "audio/x-ms-wma": - self.GetAudio(AudioLink,"Audio/tmp/PreAudio.wma",Decode) - self.ConvAudioFormat("Audio/tmp/PreAudio.wma", "Audio/tmp/PreAudio.wav") - os.remove("Audio/tmp/PreAudio.wma") - self.LoudenAudio("Audio/tmp/PreAudio.wav", "Audio/audio.wav") - os.remove("Audio/tmp/PreAudio.wav") - - elif AudioType == "audio/wave": - self.GetAudio(AudioLink,"Audio/tmp/PreAudio.wav",Decode) - self.LoudenAudio("Audio/tmp/PreAudio.wav", "Audio/audio.wav") - os.remove("Audio/tmp/PreAudio.wav") - - elif AudioType == "audio/wav": - self.GetAudio(AudioLink,"Audio/tmp/PreAudio.wav",Decode) - self.LoudenAudio("Audio/tmp/PreAudio.wav", "Audio/audio.wav") - os.remove("Audio/tmp/PreAudio.wav") - - elif AudioType == "audio/x-ipaws-audio-mp3": - self.GetAudio(AudioLink,"Audio/tmp/PreAudio.mp3",Decode) - self.ConvAudioFormat("Audio/tmp/PreAudio.mp3", "Audio/tmp/PreAudio.wav") - os.remove("Audio/tmp/PreAudio.mp3") - self.LoudenAudio("Audio/tmp/PreAudio.wav", "Audio/audio.wav") - os.remove("Audio/tmp/PreAudio.wav") - else: pass - except: - print("Generating TTS audio...") - try: pythoncom.CoInitialize() - except: pass - - try: os.remove("Audio/audio.wav") - except: pass + @self.QEWEB_flaskapp.route('/') + def home(): return send_from_directory(Assets_Folder, 'index.html') - try: - if ConfigData["TTS_Service"] == "pyttsx3": - engine = pyttsx3.init() - if ConfigData["UseDefaultVoices"] is False: - if lang == "fr": ActiveVoice = ConfigData["VoiceFR"] - else: ActiveVoice = ConfigData["VoiceEN"] - voices = engine.getProperty('voices') - ActiveVoice = next((voice for voice in voices if voice.name == ActiveVoice), None) - if ActiveVoice: engine.setProperty('voice', ActiveVoice.id) - engine.save_to_file(str(BroadcastText), f"Audio/audio.wav") - engine.runAndWait() - elif ConfigData["TTS_Service"] == "flite": - BroadcastText = BroadcastText.replace("\n", " ") - if ConfigData["UseDefaultVoices"] is False: - if lang == "fr": ActiveVoice = ConfigData["FliteVoice_FR"] - else: ActiveVoice = ConfigData["FliteVoice_EN"] - subprocess.run(["flite", "-t", BroadcastText, "-voice", ActiveVoice, "-o", f"Audio/audio.wav"], capture_output=True, text=True) - else: subprocess.run(["flite", "-t", BroadcastText, "-o", f"Audio/audio.wav"], capture_output=True, text=True) - else: - BroadcastText = BroadcastText.replace("\n", " ") - if lang == "fr": ActiveVoice = ConfigData["APIvoice_FR"] - else: ActiveVoice = ConfigData["APIvoice_EN"] - GenenerateTTS_UsingAPI(ConfigData["TTS_Service"], ActiveVoice, ConfigData["APIvoice_Region"], ConfigData["APIvoice_Key"], "Audio/tmp", BroadcastText) - self.ConvAudioFormat("Audio/tmp/GeneratedTTS.mp3", "Audio/PreAudio.wav") - except: - print("TTS generation failure!") - - if ConfigData['Force120'] is True: self.TrimAudio("./Audio/audio.wav", "./Audio/tmp/trimmedAudio.wav") - - def AudioSAME(self, GeneratedHeader): - print("Generating SAME header...") - SAMEheader = EASGen.genEAS(header=GeneratedHeader, attentionTone=False, endOfMessage=False) - SAMEeom = EASGen.genEAS(header="NNNN", attentionTone=False, endOfMessage=False) - EASGen.export_wav("./Audio/same.wav", SAMEheader) - EASGen.export_wav("./Audio/eom.wav", SAMEeom) + @self.QEWEB_flaskapp.after_request + def add_header(response): + response.headers['Cache-Control'] = 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=0' + response.headers['Pragma'] = 'no-cache' + response.headers['Expires'] = '-1' + return response -class Playout: - def __init__(self, InputConfig, CODE): - self.CODE = CODE - self.InputConfig = InputConfig + @self.QEWEB_flaskapp.route('/') + def static_files(path): return send_from_directory(Assets_Folder, path) - def play(self, InputFile): - UseSpecDevice = self.InputConfig['UseSpecified_AudioOutput'] - SpecDevice = self.InputConfig['Specified_AudioOutput'] - time.sleep(0.5) - if UseSpecDevice is True: - sd.default.reset() - sd.default.device = SpecDevice - sampling_rate, audio_data = wavfile.read(InputFile) - sd.play(audio_data, samplerate=sampling_rate) - sd.wait() - else: - sampling_rate, audio_data = wavfile.read(InputFile) - sd.play(audio_data, samplerate=sampling_rate) - sd.wait() + def StartServer(self, HOST="0.0.0.0", PORT="8050"): + print("[Webserver]: Starting webserver... ", f"Port: {PORT}") + logging.getLogger('werkzeug').setLevel(logging.ERROR) + self.QEWEB_flaskapp.run(host=HOST, port=PORT, debug=False) - def AlertIntro(self): - UpdateStatus("Relay", f"Transmitting alert.") - if os.path.exists("./Audio/pre.wav"): - try: self.play("./Audio/pre.wav") - except: pass - - def AlertSAME(self): - try: self.play("./Audio/same.wav") - except: pass - - def AlertAttn(self): - try: - if "CANADA" in str(self.CODE): self.play(f"./Audio/AttnCAN.wav") - elif "USA" in str(self.CODE): self.play(f"./Audio/AttnEBS.wav") - else: self.play(f"./Audio/{self.InputConfig['AttentionTone']}") - except: print("Attention tone error! (Check attention tone audio file)") - def AlertAudio(self): - try: self.play("./Audio/audio.wav") - except: print("Error playing alert audio.") +class Capture: + def SaveCAP(self, OutputFolder, InputXML, Source=None): + CapturedSent = re.search(r'\s*(.*?)\s*', InputXML, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1).replace("-", "_").replace("+", "p").replace(":", "_") + CapturedIdent = re.search(r'\s*(.*?)\s*', InputXML, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1).replace("-", "_").replace("+", "p").replace(":", "_") + filename = f"{CapturedSent}I{CapturedIdent}.xml" + with open(f"{OutputFolder}/{filename}", 'w', encoding='utf-8') as file: file.write(InputXML) + print(f"[Capture]: Captured an XML, and saved it to: {OutputFolder}/{filename} | From: {Source}") + + def realTCPcapture(self, host, port, buffer=1024, delimiter="", StatName=None): + print(f"[TCP Capture]: Connecting to: {host} at {port}") + while QEinterrupt() is False: + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + try: + s.connect((host, int(port))) + s.settimeout(100) + if StatName is not None: UpdateStatus(StatName, f"Connected to {host}") + print(f"[TCP Capture]: Connected to {host}") + data_received = "" + try: + while QEinterrupt() is False: + chunk = str(s.recv(buffer), encoding='utf-8', errors='ignore') + data_received += chunk + if delimiter in chunk: + try: self.SaveCAP(XMLqueue_Folder, data_received, host) + except: print(f"[TCP Capture]: {StatName}, failed to save XML!") + data_received = "" + except socket.timeout: + print(f"[TCP Capture]: Connection timed out for {host}") + if StatName is not None: UpdateStatus(StatName, f"Timed out: {host}") + except Exception as e: + print(f"[TCP Capture]: Something broke when connecting to {host}: {e}") + if StatName is not None: UpdateStatus(StatName, f"Connection error to: {host}") + exit() - def AlertEOM(self): - try: self.play("./Audio/eom.wav") - except: pass + def TCPcapture(self, host, port, buffer=1024, delimiter="", StatName=None): + # i hate this, but it results in quicker shutdowns/restarts + decodeThread = threading.Thread(target=self.realTCPcapture, args=(host, port, buffer, delimiter, StatName)) + decodeThread.daemon = True + decodeThread.start() + while QEinterrupt() is False: time.sleep(1) # keep-alive + exit() - def AlertOutro(self): - if os.path.exists("./Audio/post.wav"): - try: self.play("./Audio/post.wav") - except: pass -def DecodeIntMonitor(inputXML, ConfigData): - try: - SourceHEADER = re.search(r'\s*(.*?)\s*', inputXML, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - BroadcastAudio = re.search(r'\s*(.*?)\s*', inputXML, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - - if len(ConfigData['SAMEmonitor-FIPS-filter']) == 0: pass - else: - try: - SourceFIPS = EAS2Text(SourceHEADER).FIPS - FIPSmatch = False - for i in SourceFIPS: - # Partial county wildcard filter - partial = "*" + i[1:] - if partial[:2] in ConfigData['AllowedLocations_CLC']: return True - if partial[:3] in ConfigData['AllowedLocations_CLC']: return True - if partial[:4] in ConfigData['AllowedLocations_CLC']: return True - if partial in ConfigData['AllowedLocations_CLC']: return True - - if i[:2] in ConfigData['SAMEmonitor-FIPS-filter']: FIPSmatch = True - if i[:3] in ConfigData['SAMEmonitor-FIPS-filter']: FIPSmatch = True - if i[:4] in ConfigData['SAMEmonitor-FIPS-filter']: FIPSmatch = True - if i in ConfigData['SAMEmonitor-FIPS-filter']: FIPSmatch = True - if FIPSmatch is False: return False - except: return False - - if len(ConfigData['SAMEmonitor-EVENT-filter']) == 0: pass + def HTTPcapture(self, CAP_URL, instance=None): + if CAP_URL is None or CAP_URL == "": UpdateStatus(f"HTTPCAPcapture{instance}", f"HTTP CAP capture {instance} disabled.") else: + print(f"[HTTP Capture]: HTTP CAP Capture active! {CAP_URL}") + while QEinterrupt() is False: + try: + UpdateStatus(f"HTTPCAPcapture{instance}", f"HTTP CAP Capture {instance} is active!") + ReqCAP = Request(url = f'{CAP_URL}') + CAP = urlopen(ReqCAP).read() + CAP = CAP.decode('utf-8') + CAP = re.findall(r'', CAP, re.MULTILINE | re.IGNORECASE | re.DOTALL) + for alert in CAP: + alert = f"" + try: self.SaveCAP(XMLqueue_Folder, alert, CAP_URL) + except: print("[Capture]: Failed to save XML!") + time.sleep(30) + except Exception as e: + print("[HTTP Capture] Something went wrong.", e) + UpdateStatus(f"HTTPCAPcapture{instance}", f"HTTP CAP Capture {instance} error.") + time.sleep(30) + + def NWScapture(self, ATOM_LINK): + # Goddamnit americans, you have to have every single alert source in their own goddamn way! + # Why can't you use a centerlized TCP server?!!?! + print("[NWS CAP Capture]: Activating NWS CAP Capture with: ", ATOM_LINK) + while QEinterrupt() is False: + UpdateStatus("NWSCAPcapture", "NWS CAP Capture is active.") try: - EVENT = EAS2Text(SourceHEADER).evnt - if "EAN" in EVENT or "NIC" in EVENT or "NPT" in EVENT or "RMT" in EVENT or "RWT" in EVENT: pass - elif EVENT in ConfigData: pass - else: return False - except: return False + req1 = Request(url = ATOM_LINK) + xml = urlopen(req1).read() + xml = xml.decode('utf-8') + entries = re.findall(r'\s*(.*?)\s*', xml, re.MULTILINE | re.IGNORECASE | re.DOTALL) + current_time = datetime.now(timezone.utc) + for entry in entries: + try: + CAP_LINK = re.search(r'', entry, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) + expires = re.search(r'\s*(.*?)\s*', entry, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) + expires = datetime.fromisoformat(expires).astimezone(timezone.utc).isoformat() + expires = datetime.fromisoformat(expires) + + if current_time > expires: pass #print("expired") + else: + last_slash_index = CAP_LINK.rfind('/') + if last_slash_index != -1: filename = CAP_LINK[last_slash_index + 1:] + else: filename = CAP_LINK + filename = filename.replace("-", "_").replace("+", "p").replace(":", "_").replace("\n", "") + filename = filename + ".xml" + if filename in os.listdir(f"{XMLhistory_Folder}"): pass #print("already downloaded") + elif filename in os.listdir(f"{XMLqueue_Folder}"): pass #print("already downloaded") + else: + # print(filename, expires) + NWSCAP_REQUEST = Request(url = CAP_LINK) + NWSCAP_XML = urlopen(NWSCAP_REQUEST).read() + NWSCAP_XML = NWSCAP_XML.decode('utf-8') + with open(f"{XMLqueue_Folder}/{filename}", "w") as f: f.write(NWSCAP_XML) + except: pass + except Exception as e: + print("[NWS CAP Capture]: An error occured.", e) + UpdateStatus("NWSCAPcapture", "An error occured.") + time.sleep(120) # To put less strain on the network - if len(ConfigData['SAMEmonitor-ORIGINATOR-filter']) == 0: pass - else: - try: - if EAS2Text(SourceHEADER).org in ConfigData['SAMEmonitor-ORIGINATOR-filter']: pass - else: return False - except: return False - - Callsign = ConfigData['SAME_callsign'] - if len(Callsign) > 8: Callsign = "QUANTUM0"; print("Your callsign is too long!") - elif len(Callsign) < 8: Callsign = "QUANTUM0"; print("Your callsign is too short!") - elif "-" in Callsign: Callsign = "QUANTUM0"; print("Your callsign contains an invalid symbol!") - ZCZC = SourceHEADER.split("-") - ZCZClen = len(ZCZC) - 2 - ZCZC[ZCZClen] = Callsign - ZCZC = '-'.join(ZCZC) - print("Generating SAME header...") - SAMEheader = EASGen.genEAS(header=ZCZC, attentionTone=False, endOfMessage=False) - SAMEeom = EASGen.genEAS(header="NNNN", attentionTone=False, endOfMessage=False) - EASGen.export_wav("./Audio/same.wav", SAMEheader) - EASGen.export_wav("./Audio/eom.wav", SAMEeom) - +class Monitor_Stream: + def __init__(self, monitorName, streamURL): + self.monitorName = monitorName + self.streamURL = streamURL + self.record = False + + def is_stream_online(self): try: - oof = EAS2Text(ZCZC) - BroadcastText = oof.EASText - except: BroadcastText = "This is an emergency alert message." - + response = requests.get(self.streamURL, stream=True, timeout=10) + return response.status_code == 200 + except requests.RequestException as e: + print(f"[{self.monitorName}] Error checking stream URL: {e}") + return False + + def RecordIP(self, ZCZC): + output_file = f"{Tmp_Folder}/{self.monitorName}-audio.wav" + try: os.remove(output_file) + except: pass + RecordIP = (ffmpeg .input(self.streamURL) .output(output_file, format='wav', ar='8000') .run_async(pipe_stdout=True, pipe_stderr=True)) + seconds = 0 + while QEinterrupt() is False: + seconds = seconds + 1 + if self.record is False or seconds == 120 or seconds > 120: + RecordIP.terminate() + RecordIP.wait() + print(f"[{self.monitorName}] Stopped Recording Thread") + RemoveEOMpATTN(output_file) + CreateSAMEmonitorXML(ZCZC, output_file, self.monitorName) + UpdateStatus(self.monitorName, f"Alert sent.") + print(f"[{self.monitorName}] Alert Sent!\n\n") + exit() + time.sleep(1) + + def decodeStream(self): try: - AudioLink = bytes(re.search(r'\s*(.*?)\s*', BroadcastAudio, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1), 'utf-8') - #AudioType = re.search(r'\s*(.*?)\s*', BroadcastAudio, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - with open("PreAudio.wav", "wb") as fh: fh.write(base64.decodebytes(AudioLink)) - result = subprocess.run(["ffmpeg", "-y", "-i", "PreAudio.wav", "-filter:a", "volume=2.5", "Audio/audio.wav"], capture_output=True, text=True) - if result.returncode == 0: print(f"[RELAY/GENERATE]: Filter loudening success.") - else: print(f"[RELAY/GENERATE]: Filter loudening failure: {result.stderr}") - os.remove("PreAudio.wav") + # Command to capture audio from IP stream and pipe it to multimon-ng + ffmpeg_command = [ + 'ffmpeg', + '-i', self.streamURL, # Input stream URL + '-f', 'wav', # Output format + '-ac', '1', # Number of audio channels (1 for mono) + '-ar', '22050', # Audio sample rate + '-loglevel', 'quiet', # Suppress ffmpeg output + '-' ] + + platform = GetPlatform() + last = None + self.ffmpeg_process = subprocess.Popen(ffmpeg_command, stdout=subprocess.PIPE) + if platform == "win": self.source_process = subprocess.Popen(['multimon-ng-WIN32/multimon-ng.exe', '-a', 'EAS', '-q', '-t', 'raw', '-'], stdin=self.ffmpeg_process.stdout, stdout=subprocess.PIPE) + else: self.source_process = subprocess.Popen(['multimon-ng', '-a', 'EAS', '-q', '-t', 'raw', '-'], stdin=self.ffmpeg_process.stdout, stdout=subprocess.PIPE) + UpdateStatus(self.monitorName, f"Ready For Alerts, listening to {self.streamURL}") + print(f"[{self.monitorName}] Ready For Alerts, listening to {self.streamURL}\n") + + while QEinterrupt() is False: + line = self.source_process.stdout.readline().decode("utf-8") + if QEinterrupt() is True: break + decode = line.replace("b'EAS: ", "").replace("\n'", "").replace("'bEnabled Demodulators: EAS", "").replace('EAS: ', '').replace('EAS: ', '').replace('Enabled demodulators: EAS', '') + if "ZCZC-" in decode or "NNNN" in decode: print(f"[{self.monitorName}] Decoder: {decode}") + + if 'ZCZC-' in str(line): + if ZCZC_test(decode) == True: + SAME = decode.replace("\n", "") + UpdateStatus(self.monitorName, f"Receiving alert...") + print(f"[{self.monitorName}] ZCZC Check OK") + with open(Config_File, "r") as JCfile: config = JCfile.read() + ConfigData = json.loads(config) + dateNow = datetime.now().strftime("%B %d, %Y at %H:%M:%S") + Logger(ConfigData).SendLog("Emergency Alert Received", f"Receipt: Received on {dateNow} from {self.monitorName}", decode) + self.record = True + RecordThread = threading.Thread(target = self.RecordIP, args=(decode,)) + RecordThread.start() + else: + print(f"[{self.monitorName}] WARNING: ZCZC Check FAILED!") + line = "NNNN" + + elif 'NNNN' not in str(last): + if 'NNNN' in str(line): + time.sleep(0.5) + self.record = False + try: RecordThread.join() + except: pass + UpdateStatus(self.monitorName, f"Ready For Alerts, listening to {self.streamURL}") + last = line except: - print("Generating TTS audio...") - try: pythoncom.CoInitialize() + try: + self.ffmpeg_process.terminate() + self.source_process.terminate() except: pass - engine = pyttsx3.init() - if ConfigData["UseDefaultVoices"] is False: - ActiveVoice = ConfigData["VoiceEN"] - voices = engine.getProperty('voices') - ActiveVoice = next((voice for voice in voices if voice.name == ActiveVoice), None) - if ActiveVoice: engine.setProperty('voice', ActiveVoice.id) - engine.save_to_file(str(BroadcastText), f"Audio/audio.wav") - engine.runAndWait() - return [ZCZC, BroadcastText] - except: return "exception" - -def GetXML_CODE(inputXML): - try: - CODE = re.findall(r'\s*(.*?)\s*', inputXML, re.MULTILINE | re.IGNORECASE | re.DOTALL) - if "profile:CAP-CP:0.4" in str(CODE): CODE = "CANADA" - elif "IPAWSv1.0" in str(CODE): CODE = "USA" - else: CODE = False - return CODE - except: - return False + UpdateStatus(self.monitorName, f"Failure") + print(f"[{self.monitorName}] Monitor failure.") -stopPassthrough = threading.Event() - -def audio_callback(indata, outdata, frames, time, status): - if status: print(status, file=sys.stderr) - outdata[:] = indata + def start(self): + while QEinterrupt() is False: + if self.is_stream_online() is False: + print(f"[{self.monitorName}] Stream URL {self.streamURL} is offline or unreachable.") + UpdateStatus(self.monitorName, f"Stream URL {self.streamURL} is offline or unreachable.") + time.sleep(30) + else: + try: + decodeThread = threading.Thread(target=self.decodeStream) + decodeThread.daemon = True + decodeThread.start() + while QEinterrupt() is False: + time.sleep(30) + if self.is_stream_online() is False: + print(f"[{self.monitorName}] Stream URL {self.streamURL} is offline or unreachable.") + UpdateStatus(self.monitorName, f"Stream URL {self.streamURL} is offline or unreachable.") + time.sleep(30) + break + else: pass + if QEinterrupt() is True: + self.ffmpeg_process.terminate() + self.source_process.terminate() + except: + print(f"[{self.monitorName}] Monitor failure.") + UpdateStatus(self.monitorName, f"Failure.") + exit() -def passthrough(ConfigData): - sd.default.reset() - Nope = False - input_device_name = ConfigData['Passthrough_AudioInput'] - output_device_name = ConfigData['Specified_AudioOutput'] +class Monitor_Local: + def __init__(self, monitorName): + self.monitorName = monitorName + self.record = False - if ConfigData['UseSpecified_Passthrough_AudioInput'] is True and ConfigData['UseSpecified_AudioOutput'] is True: sd.default.device = (input_device_name, output_device_name) - elif ConfigData['UseSpecified_Passthrough_AudioInput'] is True and ConfigData['UseSpecified_AudioOutput'] is False: Nope = True - elif ConfigData['UseSpecified_Passthrough_AudioInput'] is False and ConfigData['UseSpecified_AudioOutput'] is True: Nope = True - elif ConfigData['UseSpecified_Passthrough_AudioInput'] is False and ConfigData['UseSpecified_AudioOutput'] is False: pass - else: pass + def recordAUDIO(self, SAME): + OutputFile = f"{Tmp_Folder}/{self.monitorName}-audio.wav" + try: os.remove(OutputFile) + except: pass + while QEinterrupt() is False: + sd.default.reset() + samplerate = 8000 + q = queue.Queue() + + def callback(indata, frames, time, status): + if status: print(status, file=sys.stderr) + q.put(indata.copy()) + + with sf.SoundFile(OutputFile, mode='x', samplerate=samplerate,channels=2) as file: + with sd.InputStream(samplerate=samplerate,channels=2,callback=callback): + print(f"[{self.monitorName}] Recording!") + last_check_time = time.time() + while QEinterrupt() is False: + file.write(q.get()) + current_time = time.time() + if self.record is False or current_time - last_check_time > 120: + file.close() + print(f"[{self.monitorName}] Stopped Recording Thread") + RemoveEOMpATTN(OutputFile) + CreateSAMEmonitorXML(SAME, OutputFile, self.monitorName) + UpdateStatus(self.monitorName, f"Alert sent.") + print(f"[{self.monitorName}] Alert Sent!") + exit() + exit() - samplerate = 48000 # Sample rate in Hz - blocksize = 1024 # Number of frames per block + def DecodeDev(self): + while QEinterrupt() is False: + try: + platform = GetPlatform() + last = None + if platform == "win": self.source_process = subprocess.Popen(["multimon-ng-WIN32/multimon-ng.exe", "-a", "EAS", "-q"], stdout=subprocess.PIPE) + else: self.source_process = subprocess.Popen(["multimon-ng", "-a", "EAS", "-q"], stdout=subprocess.PIPE) + UpdateStatus(self.monitorName, f"Ready For Alerts.") + print(f"[{self.monitorName}] Ready For Alerts...\n") + + while QEinterrupt() is False: + line = self.source_process.stdout.readline().decode("utf-8") + if QEinterrupt() is True: break + decode = line.replace("b'EAS: ", "").replace("\n'", "").replace("'bEnabled Demodulators: EAS", "").replace('EAS: ', '').replace('EAS: ', '').replace('Enabled demodulators: EAS', '') + if "ZCZC-" in decode or "NNNN" in decode: print(f"[{self.monitorName}] Decoder: {decode}") + + if 'ZCZC-' in str(line): + if ZCZC_test(decode) == True: + SAME = decode.replace("\n", "") + UpdateStatus(self.monitorName, f"Receiving alert...") + print(f"[{self.monitorName}] ZCZC Check OK") + with open(Config_File, "r") as JCfile: config = JCfile.read() + ConfigData = json.loads(config) + dateNow = datetime.now().strftime("%B %d, %Y at %H:%M:%S") + Logger(ConfigData).SendLog("Emergency Alert Received", f"Receipt: Received on {dateNow} from {self.monitorName}", SAME) + self.record = True + RecordThread = threading.Thread(target = self.recordAUDIO, args=(decode,)) + RecordThread.start() + else: + print(f"[{self.monitorName}] WARNING: ZCZC Check FAILED!") + line = "NNNN" + + elif 'NNNN' not in str(last): + if 'NNNN' in str(line): + self.record = False + try: RecordThread.join() + except: pass + UpdateStatus(self.monitorName, f"Ready For Alerts.") + last = line + except Exception as e: + UpdateStatus(self.monitorName, f"Failure") + print(f"[{self.monitorName}] Monitor failure.", e) + time.sleep(5) + exit() - if Nope is True: - print("In order to use pass-through, you can only have both input and output selected, or both input and outputs at default.") - else: - with sd.Stream( - samplerate=samplerate, - blocksize=blocksize, - channels=2, # Stereo - callback=audio_callback - ) as stream: - while not stopPassthrough.is_set(): stopPassthrough.wait(0.1) # Wait for 100 ms - print("Stopping pass-through.") - -def Relay(): - PassthroughThread = None - while True: - with open("config.json", "r") as JCfile: config = JCfile.read() - ConfigData = json.loads(config) + def start(self): + try: + decodeThread = threading.Thread(target=self.DecodeDev) + decodeThread.daemon = True + decodeThread.start() + while QEinterrupt() is False: time.sleep(1) # keep-alive + self.source_process.terminate() + exit() + except: + print(f"[{self.monitorName}] Monitor failure.") + UpdateStatus(self.monitorName, f"Failure.") + +class AIOMG: + # A.I.O.M.G: Alert Image Or Map Generator + def __init__(self) -> None: + self.ImageOutput = f"{Tmp_Folder}/alertImage.png" + + def overlay_polygon(self, map_object, lats, lons, label='', color='red'): + x, y = map_object(lons, lats) + map_object.plot(x, y, marker=None, color=color, linewidth=2, linestyle='-', label=label) + + def fill_polygon(self, map_object, lats, lons, color='red', alpha=0.5): + x, y = map_object(lons, lats) + polygon = Polygon(list(zip(x, y)), facecolor=color, alpha=alpha) + map_object.ax.add_patch(polygon) + + def calculate_bounding_box(self, coordinates): + min_lat = min(lat for lat, _ in coordinates) + max_lat = max(lat for lat, _ in coordinates) + min_lon = min(lon for _, lon in coordinates) + max_lon = max(lon for _, lon in coordinates) + return min_lat, max_lat, min_lon, max_lon + + def GenerateMapImage(self, InfoXML, PolyColor="#FF0000"): + matplotlib.use('Agg') + if "#" not in PolyColor: PolyColor = "#" + PolyColor + if len(PolyColor) > 7: PolyColor = "#FF0000" + for char in PolyColor: + if 'G' <= char <= 'Z' or 'g' <= char <= 'z': PolyColor = "#FF0000" + + try: HEADLINE = re.search(r'\s*(.*?)\s*', InfoXML, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) # Get alert title + except: HEADLINE = "Alert region" + AllCoords = re.findall(r'\s*(.*?)\s*', InfoXML, re.MULTILINE | re.IGNORECASE | re.DOTALL) # Get all polygons - if ConfigData['EnablePassThru'] is True: - if PassthroughThread is None or not PassthroughThread.is_alive(): - stopPassthrough.clear() - PassthroughThread = threading.Thread(target=passthrough, args=(ConfigData,)) - PassthroughThread.start() - - Clear() - print(f"Last refreshed: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") - UpdateStatus("Relay", f"Waiting for alert...") - ResultFileName = Check.watchNotify("./XMLqueue", "./XMLhistory") - print(f"Captured: {ResultFileName}") + # Generate map + coordinates_string = "" + for i in AllCoords: + coordinates_string = coordinates_string + f" {i}" + polygon_coordinates = [list(map(float, item.split(','))) for item in coordinates_string.split()] + min_lat, max_lat, min_lon, max_lon = self.calculate_bounding_box(polygon_coordinates) + lat_center = (min_lat + max_lat) / 2 + lon_center = (min_lon + max_lon) / 2 + lat_range = max_lat - min_lat + lon_range = max_lon - min_lon + + if lat_range > lon_range: lon_range = lat_range + else: lat_range = lon_range + + fig = plt.figure(figsize=(10, 10)) + # For outlined polygon + #world_map = Basemap(projection='mill', lat_1=-60, lat_2=90, lon_0=lon_center, llcrnrlat=lat_center - 1.1 * lat_range, urcrnrlat=lat_center + 1.1 * lat_range, llcrnrlon=lon_center - 1.1 * lon_range, urcrnrlon=lon_center + 1.1 * lon_range, resolution='i') + ax = fig.add_subplot(111) + #world_map = Basemap(ax=ax, projection='mill', lat_1=-60, lat_2=90, lon_0=lon_center, llcrnrlat=lat_center - 1.1 * lat_range, urcrnrlat=lat_center + 1.1 * lat_range, llcrnrlon=lon_center - 1.1 * lon_range, urcrnrlon=lon_center + 1.1 * lon_range, resolution='i') + world_map = Basemap( ax=ax, projection='cyl', lon_0=lon_center, llcrnrlat=lat_center - 1.1 * lat_range, urcrnrlat=lat_center + 1.1 * lat_range, llcrnrlon=lon_center - 1.1 * lon_range, urcrnrlon=lon_center + 1.1 * lon_range, resolution='i' ) + world_map.drawcoastlines() + world_map.drawcountries() + world_map.drawcounties() + world_map.drawstates() + world_map.fillcontinents(color='#00AA44', lake_color='#002255') + world_map.drawmapboundary(fill_color='#002255') + + for i in AllCoords: + i = [list(map(float, item.split(','))) for item in i.split()] + lats, lons = zip(*i) + self.fill_polygon(world_map, lats, lons, color=PolyColor, alpha=0.5) + self.overlay_polygon(world_map, lats, lons, label=HEADLINE, color=PolyColor) # For outlined polygon + ax.set_aspect('equal') + legend_patch = Line2D([0], [0], marker='o', color='w', markerfacecolor=PolyColor, markersize=10, label=HEADLINE) + plt.legend(handles=[legend_patch], loc='upper right') + #plt.legend(loc='upper right') # For outlined polygon + #plt.show() #For testing, to show the map in a window + fig.savefig(self.ImageOutput, bbox_inches='tight', pad_inches=0.0, dpi=70) + + def ConvertImageFormat(self, inputAudio, outputAudio): + result = subprocess.run(["ffmpeg", "-y", "-i", inputAudio, "-vf", "scale=-1:450", outputAudio], capture_output=True, text=True) + if result.returncode == 0: print(f"{inputAudio} --> {outputAudio} ... Conversion successful!") + else: print(f"{inputAudio} --> {outputAudio} ... Conversion failed: {result.stderr}") + + def GrabImage(self, InfoXML): + resources = re.findall(r'\s*(.*?)\s*', InfoXML, re.MULTILINE | re.IGNORECASE | re.DOTALL) + if "image/jpeg" in str(resources): pass + elif "image/png" in str(resources): pass + else: return False + try: - shutil.move(f"./XMLqueue/{ResultFileName}", f"./relay.xml") - file = open("relay.xml", "r", encoding='utf-8') - RelayXML = file.read() - file.close() - - if "NAADS-Heartbeat" in RelayXML: - print("\n\n...HEARTBEAT DETECTED...") - References = re.search(r'\s*(.*?)\s*', RelayXML, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - Check.Heartbeat(References, "XMLqueue", "XMLhistory") - - elif "SAME" in RelayXML: - UpdateStatus("Relay", f"Alert detected.") - print("\n\n...NEW ALERT DETECTED - SAME MONITOR...") - shutil.copy(f"./relay.xml", str(f"./XMLhistory/{ResultFileName}")) - Callsign = ConfigData['SAME_callsign'] - print(f"Hello {Callsign}") - Decoded = DecodeIntMonitor(RelayXML, ConfigData) - if Decoded == "exception": print("No relay: An exception was raised when trying to decode the SAME alert's XML.") + for ImageResource in resources: + if "" in ImageResource: + ImageLink = bytes(re.search(r'\s*(.*?)\s*', ImageResource, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1), 'utf-8') + ImageType = re.search(r'\s*(.*?)\s*', ImageResource, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) + Decode = 1 else: - if Decoded is False: print("No relay: No filter match.") - else: - if Check.DuplicateSAME(Decoded[0]) is True: print("No relay: duplicate SAME header detected from a previous relay."); continue - alertColor = GetAlertLevelColor(ConfigData, Decoded[0]) - Plugins_Run("beforeRelay", Decoded[0], Decoded[1], None) - - if ConfigData["ProduceImages"] is True: AIOMG.OutputAlertImage(Fallback=True) - - try: - CGEN_Dict = { - "color": alertColor, - "headline": "EMERGENCY ALERT SYSTEM", - "text": Decoded[1], - "alertStat": True - } - #with open("./alert.txt", "w") as f: f.write(Decoded[1]) - with open("AlertText.json", 'w') as json_file: json.dump(CGEN_Dict, json_file, indent=2) - except: pass - - try: - logge = Log(ConfigData) - logge.SendLog("Emergency Alert Transmission", Decoded[1], Decoded[0], "TX", alertColor) - except: pass - - PlayAlert = Playout(ConfigData, False) - - try: - stopPassthrough.set() - PassthroughThread.join() - print("Pass-through stopped.") - except: pass - - if ConfigData[f'PlayoutNoSAME'] is True: - PlayAlert.AlertIntro() - PlayAlert.AlertAttn() - PlayAlert.AlertAudio() - PlayAlert.AlertOutro() - else: - PlayAlert.AlertIntro() - PlayAlert.AlertSAME() - PlayAlert.AlertAttn() - PlayAlert.AlertAudio() - PlayAlert.AlertEOM() - PlayAlert.AlertOutro() - - Plugins_Run("afterRelay", Decoded[0], Decoded[1], None) - - try: - if ConfigData["CGEN_ClearAfterAlert"] is True: - CGEN_Dict = { - "color": "000000", - "headline": "Emergency Alert Details", - "text": "" - } - #with open("./alert.txt", "w") as f: f.write(Decoded[1]) - with open("AlertText.json", 'w') as json_file: json.dump(CGEN_Dict, json_file, indent=2) - except: pass - - else: - UpdateStatus("Relay", f"Alert detected.") - print("\n\n...NEW ALERT DETECTED...") - shutil.copy(f"./relay.xml", str(f"./XMLhistory/{ResultFileName}")) - Callsign = ConfigData['SAME_callsign'] - print(f"Hello {Callsign}") - Sent = re.search(r'\s*(.*?)\s*', RelayXML, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - Status = re.search(r'\s*(.*?)\s*', RelayXML, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - MessageType = re.search(r'\s*(.*?)\s*', RelayXML, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) + ImageLink = re.search(r'\s*(.*?)\s*', ImageResource, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) + ImageType = re.search(r'\s*(.*?)\s*', ImageResource, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) + Decode = 0 - if ConfigData['Attn_BasedOnCountry'] is True: CODE = GetXML_CODE(RelayXML) - else: CODE = False - PlayAlert = Playout(ConfigData, CODE) - - RelayXML = re.findall(r'\s*(.*?)\s*', RelayXML, re.MULTILINE | re.IGNORECASE | re.DOTALL) - InfoProc = 0 - - AlertIntro_HasBeenPlayed = False - Alert_Playout = False + if ImageType == "image/jpeg": + GetMedia(ImageLink,f"{Tmp_Folder}/PreImage.jpg",Decode) + self.ConvertImageFormat(f"{Tmp_Folder}/PreImage.jpg", self.ImageOutput) + os.remove(f"{Tmp_Folder}/PreImage.jpg") + ImageGet = True + elif ImageType == "image/png": + GetMedia(ImageLink,self.ImageOutput,Decode) + ImageGet = True + + if ImageGet is True: return True + else: return False + except: return False - for InfoEN in RelayXML: - InfoProc = InfoProc + 1 - print(f"\n...Processing : {InfoProc}...\n") - InfoEN = f"{InfoEN}" + def OutputAlertImage(self, InfoXML=None, InputColor="#FF0000", Fallback=False): + if Fallback is True or InfoXML is None: shutil.copy(f"{Assets_Folder}/fallbackImage.png", self.ImageOutput) + else: + try: + print("[AIOMG]: Generating image...") + if self.GrabImage(InfoXML) is True: pass + else: self.GenerateMapImage(InfoXML, InputColor) + print("[AIOMG]: Image generation finished") + except Exception as e: + print("[AIOMG]: Image generation failure: ", e) + shutil.copy(f"{Assets_Folder}/fallbackImage.png", self.ImageOutput) - try: - if "en" in re.search(r'\s*(.*?)\s*', InfoEN, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1): lang = "en" - elif "fr" in re.search(r'\s*(.*?)\s*', InfoEN, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1): lang = "fr" - elif "es" in re.search(r'\s*(.*?)\s*', InfoEN, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1): lang = "es" - else: - print("Language not supported.") - continue - if ConfigData[f'relay_{lang}'] is False: print("Not relaying:", lang); continue - except: - print("Language check failed.") - continue +class Generate: + def __init__(self, ConfigData, InfoXML, MessageType=None, InputSentISO=None): + self.Config = ConfigData + self.AlertInfo = InfoXML + self.MessageType = MessageType + self.InputSentISO = InputSentISO + Language = re.search(r'\s*(.*?)\s*', self.AlertInfo, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) + if "en-ca" in Language or "en-us" in Language or "en" in Language: self.Language = "EN" + elif "fr-ca" in Language or "fr" in Language: self.Language = "FR" + else: self.Language = "EN" + + def BroadcastText(self): + try: BroadcastText = re.search(r'layer:SOREM:1.0:Broadcast_Text\s*\s*(.*?)\s*', self.AlertInfo, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1).replace('\n',' ').replace(' ',' ') + except: + try: MsgPrefix = MsgTypeConv[self.Language][self.MessageType] + except: MsgPrefix = "has issued" + + if self.InputSentISO is not None: + Sent = datetime.fromisoformat(datetime.fromisoformat(self.InputSentISO).astimezone(timezone.utc).isoformat()) + Sent = Sent.astimezone() + if self.Language == "FR": Sent = Sent.strftime("À %Hh%M. ") + else: Sent = Sent.strftime("At %H:%M %Z, %B %d, %Y. ") + else: Sent = "" + + try: EventType = re.search(r'layer:EC-MSC-SMC:1.0:Alert_Name\s*\s*(.*?)\s*', self.AlertInfo, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) + except: + if self.Language == "FR": + EventType = re.search(r'\s*(.*?)\s*', self.AlertInfo, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) + EventType = f"alerte {EventType}" + else: + EventType = re.search(r'\s*(.*?)\s*', self.AlertInfo, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) + if EventSuffix(EventType) is True: pass + else: EventType = f"{EventType} alert" + + try: + Coverage = re.search(r'layer:EC-MSC-SMC:1.0:Alert_Coverage\s*\s*(.*?)\s*', self.AlertInfo, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) + if self.Language == "FR": Coverage = f"en {Coverage} pour:" + else: Coverage = f"in {Coverage} for:" + except: + if self.Language == "FR": Coverage = "pour:" + else: Coverage = "for:" + + try: + AreaDesc = re.findall(r'\s*(.*?)\s*', self.AlertInfo, re.MULTILINE | re.IGNORECASE | re.DOTALL) + AreaDesc = ', '.join(AreaDesc) + '.' + except: AreaDesc = "." + try: SenderName = re.search(r'\s*(.*?)\s*', self.AlertInfo, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) + except: SenderName = "an alert issuer" + try: Description = re.search(r'\s*(.*?)\s*', self.AlertInfo, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1).replace('\n', ' ') + except: Description = "" + try: Instruction = re.search(r'\s*(.*?)\s*', self.AlertInfo, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1).replace('\n', ' ') + except: Instruction = "" + + if self.Language == "FR": BroadcastText = f"{Sent}{SenderName} {MsgPrefix} une {EventType} {Coverage} {AreaDesc} {Description} {Instruction}".replace('###','').replace(' ',' ').replace('..','.') + else: BroadcastText = f"{Sent}{SenderName} {MsgPrefix} a {EventType} {Coverage} {AreaDesc} {Description} {Instruction}".replace('###','').replace(' ',' ').replace('..','.') + + return BroadcastText - try: - current_time = datetime.now(timezone.utc) - Expires = re.search(r'\s*(.*?)\s*', InfoEN, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - Expires = datetime.fromisoformat(datetime.fromisoformat(Expires).astimezone(timezone.utc).isoformat()) - if current_time > Expires: - print("Alert expired, will not relay.") - continue - except: pass + def BroadcastAudio(self): + resources = re.findall(r'\s*(.*?)\s*', self.AlertInfo, re.MULTILINE | re.IGNORECASE | re.DOTALL) + if "audio/mpeg" in str(resources): pass + elif "audio/x-ms-wma" in str(resources): pass + elif "audio/wave" in str(resources): pass + elif "audio/wav" in str(resources): pass + elif "audio/x-ipaws-audio-mp3" in str(resources): pass + else: raise Exception("Generate TTS instead") + + for BroadcastAudioResource in resources: + if "" in BroadcastAudioResource: + AudioLink = bytes(re.search(r'\s*(.*?)\s*', BroadcastAudioResource, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1), 'utf-8') + AudioType = re.search(r'\s*(.*?)\s*', BroadcastAudioResource, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) + Decode = 1 + else: + AudioLink = re.search(r'\s*(.*?)\s*', BroadcastAudioResource, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) + AudioType = re.search(r'\s*(.*?)\s*', BroadcastAudioResource, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) + Decode = 0 + + AudioGet = False + if AudioType == "audio/mpeg": + GetMedia(AudioLink,f"{Tmp_Folder}/preaudio.mp3",Decode) + ConvertAudioFormat(f"{Tmp_Folder}/preaudio.mp3", f"{Tmp_Folder}/preaudio.wav") + os.remove(f"{Tmp_Folder}/preaudio.mp3") + AudioGet = True + + elif AudioType == "audio/x-ms-wma": + GetMedia(AudioLink,f"{Tmp_Folder}/preaudio.wma",Decode) + ConvertAudioFormat(f"{Tmp_Folder}/preaudio.wma", f"{Tmp_Folder}/preaudio.wav") + os.remove(f"{Tmp_Folder}/preaudio.wma") + AudioGet = True + + elif AudioType == "audio/wave": + GetMedia(AudioLink,f"{Tmp_Folder}/preaudio.wav",Decode) + AudioGet = True + + elif AudioType == "audio/wav": + GetMedia(AudioLink,f"{Tmp_Folder}/preaudio.wav",Decode) + AudioGet = True + + elif AudioType == "audio/x-ipaws-audio-mp3": + GetMedia(AudioLink,f"{Tmp_Folder}/preaudio.mp3",Decode) + ConvertAudioFormat(f"{Tmp_Folder}/preaudio.mp3", f"{Tmp_Folder}/preaudio.wav") + os.remove(f"{Tmp_Folder}/preaudio.mp3") + AudioGet = True + else: AudioGet = False + + if AudioGet is True: + LoudenAudio(f"{Tmp_Folder}/preaudio.wav", "./assets/audio.wav") + os.remove(f"{Tmp_Folder}/preaudio.wav") + + def HeaderSAME(self): + CALLSIGN = self.Config['SAME_callsign'] + if len(CALLSIGN) > 8: CALLSIGN = "QUANTUM0"; print("[GENERATE]: Your callsign is too long!") + elif len(CALLSIGN) < 8: CALLSIGN = "QUANTUM0"; print("[GENERATE]: Your callsign is too short!") + elif "-" in CALLSIGN: CALLSIGN = "QUANTUM0"; print("[GENERATE]: Your callsign contains an invalid symbol!") + + try: ORG = re.search(r'\s*EAS-ORG\s*\s*(.*?)\s*\s*', self.AlertInfo, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) + except: + try: ORG = CapCatToSameOrg[re.search(r'\s*(.*?)\s*', self.AlertInfo, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1)] + except: ORG = "CIV" + + try: + EVE = re.search(r'\s*SAME\s*\s*(.*?)\s*', self.AlertInfo, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) + if EVE is None or EVE == "": EVE = "CEM" + except: + try: + EVE = re.search(r'\s*profile:CAP-CP:Event:0.4\s*\s*(.*?)\s*', self.AlertInfo, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) + EVE = CapEventToSameEvent[EVE] + except: EVE = "CEM" - Urgency = re.search(r'\s*(.*?)\s*', InfoEN, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - Severity = re.search(r'\s*(.*?)\s*', InfoEN, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - try: BroadcastImmediately = re.search(r'layer:SOREM:1.0:Broadcast_Immediately\s*\s*(.*?)\s*', InfoEN, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - except: BroadcastImmediately = "No" + try: Effective = datetime.fromisoformat(datetime.fromisoformat(re.search(r'\s*(.*?)\s*', self.AlertInfo, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1)).astimezone(timezone.utc).isoformat()).strftime("%j%H%M") + except: Effective = datetime.now().astimezone(timezone.utc).strftime("%j%H%M") + + try: + NowTime = datetime.now(timezone.utc) + NowTime = NowTime.replace(microsecond=0).isoformat() + NowTime = NowTime[:-6] + NowTime = datetime.fromisoformat(NowTime) + ExpireTime = re.search(r'\s*(.*?)\s*', self.AlertInfo, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) + ExpireTime = datetime.fromisoformat(ExpireTime).astimezone(timezone.utc) + ExpireTime = ExpireTime.isoformat() + ExpireTime = ExpireTime[:-6] + ExpireTime = datetime.fromisoformat(ExpireTime) + Purge = ExpireTime - NowTime + hours, remainder = divmod(Purge.seconds, 3600) + minutes, _ = divmod(remainder, 60) + Purge = "{:02}{:02}".format(hours, minutes) + except: Purge = "0600" - if Check.Config(InfoEN, ConfigData, Status, MessageType, Severity, Urgency, BroadcastImmediately) is False: print("No relay: Config filters reject.") - else: - print("Generating text products...") - Gen = Generate(InfoEN, Sent, MessageType, Callsign) - GeneratedHeader = Gen.SAMEheader() - print("generated header:", GeneratedHeader) - BroadcastText = Gen.BroadcastText(lang) - if ConfigData[f'PlayoutNoSAME'] is False: - if Check.MatchCLC(ConfigData, GeneratedHeader) is False: print(f"No relay: CLC in generated header ({GeneratedHeader}) did not match config CLC ({ConfigData['AllowedLocations_CLC']})"); continue - if Check.CheckEventCodeSAME(ConfigData, GeneratedHeader) is False: print("No relay: Config data, SAME event code blocked for CAP."); continue - if AlertIntro_HasBeenPlayed is True: - if Check.DuplicateSAME(GeneratedHeader) is True: print("No relay: duplicate SAME header detected from a previous relay."); continue - alertColor = GetAlertLevelColor(ConfigData, GeneratedHeader) - else: - alertColor = GetAlertLevelColor(ConfigData) - - if ConfigData["ProduceImages"] is True: AIOMG.OutputAlertImage(InfoEN, alertColor) + if "layer:EC-MSC-SMC:1.1:Newly_Active_Areas" in str(self.AlertInfo): + try: CLC = re.search(r'layer:EC-MSC-SMC:1.1:Newly_Active_Areas\s*\s*(.*?)\s*', self.AlertInfo, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1).replace(',','-') + except: CLC = GeoToCLC(self.AlertInfo) + else: + CLC = re.findall(r'\s*SAME\s*\s*(.*?)\s*\s*', self.AlertInfo, re.MULTILINE | re.IGNORECASE | re.DOTALL) + CLC = '-'.join(CLC) + if str(CLC) == "": CLC = GeoToCLC(self.AlertInfo) + if CLC == "": CLC = "000000" - print("Generating audio products...") - logge = Log(ConfigData) - Gen.Audio(BroadcastText, lang, ConfigData) - Alert_Playout = True - Plugins_Run("beforeRelay", GeneratedHeader, BroadcastText, InfoEN) - - try: - if lang == "fr": CGEN_headline = "ALERTE D'URGENCE" - else: CGEN_headline = "EMERGENCY ALERT" - CGEN_Dict = { - "color": alertColor, - "headline": CGEN_headline, - "text": BroadcastText, - "alertStat": True - } - #with open("./alert.txt", "w") as f: f.write(Decoded[1]) - with open("AlertText.json", 'w') as json_file: json.dump(CGEN_Dict, json_file, indent=2) - except: pass + GeneratedHeader = f"ZCZC-{ORG}-{EVE}-{CLC}+{Purge}-{Effective}-{CALLSIGN}-" + GeneratedHeader = GeneratedHeader.replace("\n", "") + return GeneratedHeader - if ConfigData[f'PlayoutNoSAME'] is False: - print(f"\n...NEW ALERT TO RELAY...\nSAME: {GeneratedHeader}, \nBroadcast Text: {BroadcastText}\nSending alert...") - Gen.AudioSAME(GeneratedHeader) - try: - if lang == "fr": logge.SendLog("ALERTE D'URGENCE", BroadcastText, GeneratedHeader, "TX", alertColor) - else: logge.SendLog("EMERGENCY ALERT", BroadcastText, GeneratedHeader, "TX", alertColor) - except: pass - try: - stopPassthrough.set() - PassthroughThread.join() - print("Passthrough stopped.") - except: pass - - PlayAlert.AlertIntro() - PlayAlert.AlertSAME() - PlayAlert.AlertAttn() - PlayAlert.AlertAudio() - PlayAlert.AlertEOM() - PlayAlert.AlertOutro() - Plugins_Run("afterRelay", GeneratedHeader, BroadcastText, InfoEN) - else: - print(f"\n...NEW ALERT TO RELAY...\nSAME Header is disabled. \nBroadcast Text: {BroadcastText}\nSending alert...") - try: - if lang == "fr": logge.SendLog("ALERTE D'URGENCE", BroadcastText, "", "TX", alertColor) - else: logge.SendLog("EMERGENCY ALERT", BroadcastText, "", "TX", alertColor) - except: pass - try: - stopPassthrough.set() - PassthroughThread.join() - print("Passthrough stopped.") - except: pass + def GenerateTextContent(self): + BROADCASTTEXT = self.BroadcastText() + if self.Config["PlayoutNoSAME"] is False: SAME = self.HeaderSAME() + else: SAME = None + if self.Language == "FR": HEADLINE = "ALERTE D'URGENCE" + else: HEADLINE = "EMERGENCY ALERT" + return { "SAME":SAME, "HEADLINE":HEADLINE, "TEXT":BROADCASTTEXT} + + def GenerateAudioVisualContent(self, TextContents, AlertColor="#FF0000"): + if self.Config['PlayoutNoSAME'] is False: + print("[GENERATE]: Generating S.A.M.E header...") + SAMEheader = EASGen.genEAS(header=TextContents['SAME'], attentionTone=False, endOfMessage=False) + SAMEeom = EASGen.genEAS(header="NNNN", attentionTone=False, endOfMessage=False) + EASGen.export_wav(f"{Assets_Folder}/same.wav", SAMEheader) + EASGen.export_wav(f"{Assets_Folder}/eom.wav", SAMEeom) + + try: self.BroadcastAudio() + except: GenerateTTS(f"{Assets_Folder}/audio.wav", self.Config, TextContents['TEXT'], self.Language) - if AlertIntro_HasBeenPlayed is False: - PlayAlert.AlertIntro() - PlayAlert.AlertAttn() - AlertIntro_HasBeenPlayed = True + if self.Config['Force120'] is True: + try: TrimAudio(f"{Assets_Folder}/audio.wav") + except: print("[GENERATE]: Failed to trim broadcast audio.") + + if self.Config["ProduceImages"] is True: AIOMG().OutputAlertImage(self.AlertInfo, AlertColor) - PlayAlert.AlertAudio() +class Playout: + def __init__(self, ConfigData, AlertRegion=None): + self.ZCZC_audio = Assets_Folder + "/same.wav" + self.EOM_audio = Assets_Folder + "/eom.wav" + self.broadcast_audio = Assets_Folder + "/audio.wav" + if ConfigData['Attn_BasedOnCountry'] is True: + if AlertRegion == "CANADA": self.attention_audio = f"{Assets_Folder}/AttnCAN.wav" + elif AlertRegion == "USA": self.attention_audio = f"{Assets_Folder}/AttnEBS.wav" + else: self.attention_audio = f"{Assets_Folder}/{ConfigData['AttentionTone']}" + else: self.attention_audio = f"{Assets_Folder}/{ConfigData['AttentionTone']}" + self.ConfigData = ConfigData + print("[Playout]: Ready for playout!") + + def playout(self, inputFile): + UseSpecDevice = self.ConfigData['UseSpecified_AudioOutput'] + SpecDevice = self.ConfigData['Specified_AudioOutput'] + time.sleep(0.5) + if UseSpecDevice is True: + sd.default.reset() + sd.default.device = SpecDevice + sampling_rate, audio_data = wavfile.read(inputFile) + sd.play(audio_data, samplerate=sampling_rate) + sd.wait() + + def SAME(self): + print("[Playout]: Playing S.A.M.E header") + try: self.playout(self.ZCZC_audio) + except Exception as e: print("[Playout]: Can't play SAME header! ", e) + + def EOM(self): + print("[Playout]: Playing EOM header") + try: self.playout(self.EOM_audio) + except Exception as e: print("[Playout]: Can't play EOM! ", e) + + def ATTN(self): + print("[Playout]: Playing attention tone: ", self.attention_audio) + try: self.playout(self.attention_audio) + except Exception as e: print("[Playout]: Can't play attention tone! ", e) + + def AUDIO(self): + print("[Playout]: Playing broadcast audio") + try: self.playout(self.broadcast_audio) + except Exception as e: print("[Playout]: Can't play broadcast audio! ", e) + + def LEAD_IN(self): + try: self.playout(Assets_Folder + "/LeadIn.wav") + except: pass - if Alert_Playout is True: - PlayAlert.AlertOutro() + def LEAD_OUT(self): + try: self.playout(Assets_Folder + "/LeadOut.wav") + except: pass - if ConfigData["PlayoutNoSAME"] is True: - Plugins_Run("afterRelay", GeneratedHeader, BroadcastText, InfoEN) +class Logger: + def __init__(self, ConfigData): + self.ConfigData = ConfigData + + def SendDiscord(self, Title, Description, ZCZC, type="", HookColor=None): + Wauthorname = self.ConfigData['webhook_author_name'] + Wauthorurl = self.ConfigData['webhook_author_URL'] + Wiconurl = self.ConfigData['webhook_author_iconURL'] + Wurl = self.ConfigData['webhook_URL'] + Description = Description.replace("/n", " ") + if len(Description) > 2000: Description = f"{Description[:2000]}..." + if len(ZCZC) > 1000: ZCZC = f"{ZCZC[:1000]}..." + webhook = DiscordWebhook(url=Wurl, rate_limit_retry=True) + + # Send audio and image (if enabled) + if type == "TX": + if self.ConfigData['webhook_sendAudio'] is True: + try: + subprocess.run(["ffmpeg", "-y", "-i", f"{Assets_Folder}/audio.wav", "-map", "0:a:0", "-b:a", "64k", f"{Tmp_Folder}/DiskAudio.mp3"], capture_output=True, text=True) + with open(f"{Tmp_Folder}/DiskAudio.mp3", "rb") as f: webhook.add_file(file=f.read(), filename="audio.mp3") + except: pass - try: - if ConfigData["CGEN_ClearAfterAlert"] is True: - CGEN_Dict = { - "color": "000000", - "headline": "Emergency Alert Details", - "text": "", - "alertStat": False - } - #with open("./alert.txt", "w") as f: f.write(Decoded[1]) - with open("AlertText.json", 'w') as json_file: json.dump(CGEN_Dict, json_file, indent=2) - except: pass + if self.ConfigData["ProduceImages"] is True: + try: + with open(f"{Assets_Folder}/alertImage.png", "rb") as f: webhook.add_file(file=f.read(), filename="image.png") + except: pass - except Exception as e: - UpdateStatus("Relay", f"Relay failure.") - print("[WARNING] Exception in relay! ", e) - time.sleep(5) + if HookColor is None or HookColor == "": Wcolor = "ffffff" + else: Wcolor = HookColor + + embed = DiscordEmbed(title=Title, description=Description, color=Wcolor,) + if ZCZC == "" or ZCZC is None: pass + else: + ZCZC = f"```{ZCZC}```" + embed.add_embed_field(name="", value=ZCZC, inline=False) + embed.set_author(name=Wauthorname, url=Wauthorurl, icon_url=Wiconurl) + embed.set_footer(text="Powered by QuantumENDEC") + embed.set_timestamp() + webhook.add_embed(embed) + webhook.execute() + + def SendEmail(self, Title, Description, ZCZC, HookColor=None): + Description = Description.replace("\n", " ") + ZCZC = ZCZC.replace("\n", "") + if len(ZCZC) > 1: ZCZC = f"S.A.M.E: {ZCZC}" + if HookColor is None or HookColor == "": HookColor = "101010" + date = datetime.now() + date = date.astimezone() + date = date.strftime("Log: %H:%M%z %d/%m/%Y") + + style = """ + + """ + + body = f""" + + + + + + QuantumENDEC Email Log + {style} + + +

QuantumENDEC Email Log

+
+

{Title}

+

{Description}

+

{ZCZC}

+
+

QuantumENDEC - {date}

+ + + """ + + message = MIMEMultipart() + message["From"] = self.ConfigData["email_user"] + message["Subject"] = f"QuantumENDEC: {Title} - {date}" + if(type(self.ConfigData["email_sendto"]) == list): message['To'] = ",".join(self.ConfigData["email_sendto"]) + else: message['To'] = self.ConfigData["email_sendto"] + + if self.ConfigData["FancyHTML"] is True: + thing = MIMEText(body, 'html') + message.attach(thing) + else: + basic_text = f"QuantumENDEC... {Title}\n{Description}\n{ZCZC}\n\n{date}" + thing = MIMEText(basic_text, 'plain') + message.attach(thing) + + mail = smtplib.SMTP(self.ConfigData['email_server'], int(self.ConfigData['email_server_port'])) + mail.ehlo() + mail.starttls() + mail.login(self.ConfigData["email_user"], self.ConfigData["email_user_pass"]) + mail.sendmail(self.ConfigData["email_user"], self.ConfigData["email_sendto"], message.as_string()) + mail.quit() + + def TxtLog(self, Title, Description, ZCZC): + dateNow = datetime.now().strftime("%B %d, %Y %H:%M:%S") + if ZCZC == "": log = f"{Title}\n{Description}" + else: log = f"{Title}\n{Description}\n{ZCZC}" + log = f"\n--- {dateNow} ---\n{log}\n" + try: + with open(f"{Assets_Folder}/alertlog.txt", "a", encoding='utf-8') as f: f.write(log) except: - UpdateStatus("Relay", f"Relay failure.") - print("[WARNING] General exception in relay!") - time.sleep(5) + with open(f"{Assets_Folder}/alertlog.txt", "w", encoding='utf-8') as f: f.write(log) -def HTTP_CAP(outputFolder, CAP_URL, instance): - if CAP_URL is None or CAP_URL == "": UpdateStatus(f"HTTPCAPcapture{instance}", f"HTTP CAP capture {instance} disabled.") - else: - print(f"[HTTP Capture]: HTTP CAP Capture active! {CAP_URL}") - while True: - try: - UpdateStatus(f"HTTPCAPcapture{instance}", f"HTTP CAP Capture {instance} is active!") - ReqCAP = Request(url = f'{CAP_URL}') - CAP = urlopen(ReqCAP).read() - CAP = CAP.decode('utf-8') - CAP = re.findall(r'', CAP, re.MULTILINE | re.IGNORECASE | re.DOTALL) - - for alert in CAP: - alert = f"" - CapturedSent = re.search(r'\s*(.*?)\s*', alert, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1).replace("-", "_").replace("+", "p").replace(":", "_") - CapturedIdent = re.search(r'\s*(.*?)\s*', alert, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1).replace("-", "_").replace("+", "p").replace(":", "_") - filename = f"{CapturedSent}I{CapturedIdent}.xml" - with open(f"{outputFolder}/{filename}", 'w', encoding='utf-8') as file: file.write(alert) - print(f"[HTTP Capture]: I captured an XML, and saved it to: {outputFolder}/{filename} | From: {CAP_URL}") - time.sleep(30) - except Exception as e: - print("[HTTP Capture] Something went wrong.", e) - UpdateStatus(f"HTTPCAPcapture{instance}", f"HTTP CAP Capture {instance} error.") - time.sleep(30) + def SendLog(self, Title, Description, ZCZC, type="", HookColor=None): + if self.ConfigData['enable_discord_webhook'] is True: + print("[Logger]: Sending Discord webhook...") + try: self.SendDiscord(Title, Description, ZCZC, type, HookColor) + except: print("[Logger]: Discord, failed to log.") -def NWS_CAP(ATOM_LINK): - # Goddamnit americans, you have to have every single alert source in their own goddamn way! - # Why can't you use a centerlized TCP server?!!?! - print("[NWS CAP Capture]: Activating NWS CAP Capture with: ", ATOM_LINK) - while True: - UpdateStatus("NWSCAPcapture", "NWS CAP Capture is active.") - try: - HistoryFolder = "XMLhistory" - req1 = Request(url = ATOM_LINK) - xml = urlopen(req1).read() - xml = xml.decode('utf-8') + if self.ConfigData['enable_LogToTxt'] is True: + print(f"[Logger]: Logging to {Assets_Folder}/alertlog.txt...") + try: self.TxtLog(Title, Description, ZCZC) + except: print("[Logger]: Text file, failed to log.") - entries = re.findall(r'\s*(.*?)\s*', xml, re.MULTILINE | re.IGNORECASE | re.DOTALL) - current_time = datetime.now(timezone.utc) + if self.ConfigData['enable_email'] is True: + print("[Logger]: Logging to email...") + try: self.SendEmail(Title, Description, ZCZC, HookColor) + except: print("[Logger]: Email, failed to log,") - for entry in entries: - try: - CAP_LINK = re.search(r'', entry, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - expires = re.search(r'\s*(.*?)\s*', entry, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - expires = datetime.fromisoformat(expires).astimezone(timezone.utc).isoformat() - expires = datetime.fromisoformat(expires) - - if current_time > expires: pass #print("expired") - else: - last_slash_index = CAP_LINK.rfind('/') - if last_slash_index != -1: filename = CAP_LINK[last_slash_index + 1:] - else: filename = CAP_LINK - filename = filename.replace("-", "_").replace("+", "p").replace(":", "_").replace("\n", "") - filename = filename + ".xml" - if filename in os.listdir(f"{HistoryFolder}"): pass #print("already downloaded") - elif filename in os.listdir(f"XMLqueue"): pass #print("already downloaded") - else: - # print(filename, expires) - NWSCAP_REQUEST = Request(url = CAP_LINK) - NWSCAP_XML = urlopen(NWSCAP_REQUEST).read() - NWSCAP_XML = NWSCAP_XML.decode('utf-8') - with open(f"XMLqueue/{filename}", "w") as f: f.write(NWSCAP_XML) - except: pass - except Exception as e: - print("[NWS CAP Capture]: An error occured.", e) - UpdateStatus("NWSCAPcapture", "An error occured.") - # To put less strain on the network: - time.sleep(120) - -def CheckFolder(folder_path, Clear): - def ClearFolder(dir): - for f in os.listdir(dir): os.remove(os.path.join(dir, f)) - if not os.path.exists(folder_path): os.makedirs(folder_path) - else: - if Clear is True: ClearFolder(folder_path) + print("[Logger]: Finished logging.") -def createDefaultConfig(): - NewConfig = { - "WebserverPort": "8050", - "WebserverHost": "0.0.0.0", - "ProduceImages": False, - "SAME_callsign": "QUANTUM0", - "CGENcolor_warning": "ff2a2a", - "CGENcolor_watch": "ffcc00", - "CGENcolor_advisory": "00aa00", - "CGEN_ClearAfterAlert": False, - "UseSpecified_AudioOutput": False, - "Specified_AudioOutput": "", - "EnablePassThru": False, - "UseSpecified_Passthrough_AudioInput": False, - "Passthrough_AudioInput": "", - "AttentionTone": "AttnCAN.wav", - "Attn_BasedOnCountry": False, - "Force120": False, - "PlayoutNoSAME": False, - "relay_en": True, - "relay_fr": False, - "UseDefaultVoices": True, - "TTS_Service": "pyttsx3", - "VoiceEN": "", - "VoiceFR": "", - "FliteVoice_EN": "", - "FliteVoice_FR": "", - "APIvoice_Key": "", - "APIvoice_Region": "", - "APIvoice_EN": "", - "APIvoice_FR": "", - "enable_discord_webhook": False, - "webhook_author_name": "", - "webhook_author_URL": "", - "webhook_author_iconURL": "", - "webhook_URL": "", - "enable_email": False, - "email_server": "", - "email_server_port" : 587, - "email_user": "", - "email_user_pass": "", - "email_sendto": [], - "FancyHTML": True, - "enable_LogToTxt": True, - "statusTest": True, - "statusActual": True, - "messagetypeAlert": True, - "messagetypeUpdate": True, - "messagetypeCancel": True, - "messagetypeTest": True, - "severityExtreme": True, - "severitySevere": True, - "severityModerate": True, - "severityMinor": True, - "severityUnknown": True, - "urgencyImmediate": True, - "urgencyExpected": True, - "urgencyFuture": True, - "urgencyPast": True, - "urgencyUnknown": True, - "AllowedLocations_Geocodes": [], - "AllowedLocations_CLC": [], - "CAP_SAMEevent_Whitelist": [], - "CAP_SAMEevent_Blocklist": [], - "TCP": False, - "TCP1": "streaming1.naad-adna.pelmorex.com:8080", - "TCP2": "streaming2.naad-adna.pelmorex.com:8080", - "HTTP_CAP": False, - "HTTP_CAP_ADDR": "", - "Enable_NWSCAP": False, - "NWSCAP_AtomLink": "https://api.weather.gov/alerts/active.atom", - "SAMEmonitor": False, - "SAMEmonitor-ORIGINATOR-filter": [], - "SAMEmonitor-EVENT-filter": [], - "SAMEmonitor-FIPS-filter": [], - "SAME-AudioDevice-Monitor": False, - "SAME-AudioStream-Monitor1": "", - "SAME-AudioStream-Monitor2": "", - "SAME-AudioStream-Monitor3": "", - "SAME-AudioStream-Monitor4": "" - } - - try: - with open("config.json", 'w') as json_file: json.dump(NewConfig, json_file, indent=2) - except: return False - return True +def RelayLoop(): + while QEinterrupt() is False: + Clear() + with open(Config_File, "r") as JCfile: config = JCfile.read() + ConfigData = json.loads(config) + + print(f"[RELAY]: Last refreshed: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") + UpdateStatus("Relay", f"Waiting for alert...") + ResultFileName = WatchNotify(XMLqueue_Folder, XMLhistory_Folder) + if QEinterrupt() is True: exit() -def setup(): - try: - nothingThing = { - "nothing":True, - "alertStat": False - } - with open("AlertText.json", 'w') as json_file: json.dump(nothingThing, json_file, indent=2) - #with open(f"alert.txt", "w") as f: f.write("") - except: pass - if os.path.isfile("alertlog.txt") is True: pass - else: - with open(f"alertlog.txt", "w", encoding='utf-8') as f: f.write("") - Clear() - print(f"\nQuantumENDEC\nVersion: {QEversion}\n\nDeveloped by:\nDell ... ApatheticDELL\nAaron ... secludedfox.com :3\nBunnyTub ... bunnytub.com\n") - with open("SameHistory.txt", "w") as f: f.write(f"ZXZX-STARTER-\n") - CheckFolder('stats', True) - CheckFolder('XMLqueue', True) - CheckFolder('XMLhistory', True) - CheckFolder('Audio', False) - CheckFolder('Audio/tmp', True) - if os.path.isfile("./config.json") is True: pass - else: - print("Can't find config file, creating a default one!") - if createDefaultConfig() is True: pass - else: print("Error, failed to create default config file, QuantumENDEC can't run without a config file!"); exit() - if os.path.isfile("./GeoToCLC.csv") is True: pass - else: print("GeoToCLC is missing! I can't continue without it."); exit() - time.sleep(1) + print(f"[RELAY]: Captured: {ResultFileName}") + shutil.move(f"{XMLqueue_Folder}/{ResultFileName}", f"./relay.xml") + with open("./relay.xml", "r", encoding='utf-8') as file: RelayXML = file.read() + UpdateStatus("Relay", f"Processing alert...") + + if "NAADS-Heartbeat" in RelayXML: + print("[RELAY]: NAADS HEARTBEAT DETECTED") + References = re.search(r'\s*(.*?)\s*', RelayXML, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) + Heartbeat(References, XMLqueue_Folder, XMLhistory_Folder) + else: + status = re.search(r'\s*(.*?)\s*', RelayXML, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) + msgType = re.search(r'\s*(.*?)\s*', RelayXML, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) + sent = re.search(r'\s*(.*?)\s*', RelayXML, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) + + if ConfigData[f"status{status}"] and ConfigData[f"messagetype{msgType}"]: + IntroPlayed = False + REGION = GetAlertRegion(RelayXML) + RelayINFOS = re.findall(r'\s*(.*?)\s*', RelayXML, re.MULTILINE | re.IGNORECASE | re.DOTALL) + for InfoXML in RelayINFOS: + if FilterCheck_CAP(ConfigData, InfoXML) is True: + Gen = Generate(ConfigData, InfoXML, msgType, sent) + BroadcastContent = Gen.GenerateTextContent() + AlertColor = GetAlertLevelColor(ConfigData, BroadcastContent['SAME']) + + print(f"\n\n[RELAY]: NEW ALERT TO RELAY...\n{BroadcastContent['HEADLINE']}: {BroadcastContent['TEXT']}\n{BroadcastContent['SAME']}\n\n") + if QEinterrupt() is True: break + + Gen.GenerateAudioVisualContent(BroadcastContent, f"#{AlertColor}") + Logger(ConfigData).SendLog(BroadcastContent['HEADLINE'], BroadcastContent['TEXT'], BroadcastContent['SAME'], "TX", AlertColor) + UpdateCGEN(AlertColor, BroadcastContent['HEADLINE'], BroadcastContent['TEXT'], True) + UpdateStatus("Relay", f"Transmitting alert...") + Plugins_Run("beforeRelay", BroadcastContent['SAME'], BroadcastContent['TEXT'], InfoXML) + + global PlayoutAlerts + if PlayoutAlerts: + Play = Playout(ConfigData, REGION) + if ConfigData['PlayoutNoSAME'] is False: + if not FilterCheck_SAME(ConfigData, BroadcastContent['SAME']) and DuplicateSAME(BroadcastContent['SAME']): continue + if IntroPlayed is False: + Play.LEAD_IN() + IntroPlayed = True + Play.SAME() + Play.ATTN() + else: + if IntroPlayed is False: + Play.LEAD_IN() + Play.ATTN() + IntroPlayed = True + Play.AUDIO() + if ConfigData['PlayoutNoSAME'] is False: Play.EOM() + + if IntroPlayed is True: + Play.LEAD_OUT() + if ConfigData['CGEN_ClearAfterAlert'] is True: UpdateCGEN("000000", "EMERGENCY ALERT DETAILS", "", False) + Plugins_Run("afterRelay", BroadcastContent['SAME'], BroadcastContent['TEXT'], InfoXML) + + shutil.move(f"./relay.xml", f"{XMLhistory_Folder}/{ResultFileName}") + exit() +def Clear(): + global clearScreen + if clearScreen is True: os.system('cls' if os.name == 'nt' else 'clear') if __name__ == "__main__": - Plugins_Run("startup") parser = argparse.ArgumentParser(description='QuantumENDEC') parser.add_argument('-v', '--version', action='store_true', help='Displays QuantumENDECs version and exits.') - parser.add_argument('-k', '--keepScreen', action='store_true', help='Prevents the terminal screen from clearing.') parser.add_argument('-H', '--headless', action='store_true', help='Start QuantumENDEC without starting the webserver.') - args = parser.parse_args() - if args.keepScreen is True: - def Clear(): pass - if args.version is True: print(f"{QEversion}"); exit() - setup() - with open("config.json", "r") as JCfile: config = JCfile.read() - ConfigData = json.loads(config) - - if args.headless is False: WebThread = threading.Thread(target=StartWEB, daemon=True, args=(ConfigData['WebserverHost'], ConfigData['WebserverPort'])) - RelayThread = threading.Thread(target=Relay, daemon=True) - - if ConfigData["TCP"] is True: - if ConfigData["TCP1"] == "": UpdateStatus("NAAD1", "TCP CAP Capture is disabled.") - else: - UpdateStatus("NAAD1", "Starting TCP capture...") - TCP1cap = Capture("./XMLqueue", ConfigData["TCP1"], "NAAD1") - TCP1capture_thread = threading.Thread(target=TCP1cap.start, daemon=True) + parser.add_argument('-c', '--clearScreen', action='store_true', help='Will clear the terminal after every alert.') + parser.add_argument('-n', '--noPlayout', action='store_true', help='Alerts will not play, for testing.') + QEARGS = parser.parse_args() - if ConfigData["TCP2"] == "": UpdateStatus("NAAD2", "TCP CAP Capture is disabled.") - else: - UpdateStatus("NAAD2", "Starting TCP capture...") - TCP2cap = Capture("./XMLqueue", ConfigData["TCP2"], "NAAD2") - TCP2capture_thread = threading.Thread(target=TCP2cap.start, daemon=True) - else: - UpdateStatus("NAAD1", "TCP CAP Capture is disabled.") - UpdateStatus("NAAD2", "TCP CAP Capture is disabled.") - print("[TCP Capture]: TCP CAP capture has been disabled!") + if QEARGS.version is True: + print(QuantumENDEC_Version) + exit() - if ConfigData["HTTP_CAP"] is True: - HTTPcaptureThread1 = threading.Thread(target=HTTP_CAP, args=("XMLqueue", ConfigData["HTTP_CAP_ADDR"], "1")) - HTTPcaptureThread2 = threading.Thread(target=HTTP_CAP, args=("XMLqueue", ConfigData["HTTP_CAP_ADDR1"], "2")) - HTTPcaptureThread3 = threading.Thread(target=HTTP_CAP, args=("XMLqueue", ConfigData["HTTP_CAP_ADDR2"], "3")) - HTTPcaptureThread4 = threading.Thread(target=HTTP_CAP, args=("XMLqueue", ConfigData["HTTP_CAP_ADDR3"], "4")) - HTTPcaptureThread5 = threading.Thread(target=HTTP_CAP, args=("XMLqueue", ConfigData["HTTP_CAP_ADDR4"], "5")) + if QEARGS.clearScreen is True: clearScreen = True + else: clearScreen = False - else: - print("[HTTP Capture]: HTTP CAP Capture is disabled.") - UpdateStatus("HTTPCAPcapture", "HTTP CAP Capture is disabled.") - - if ConfigData['Enable_NWSCAP'] is True: NWSCAPthread = threading.Thread(target=NWS_CAP, args=(ConfigData["NWSCAP_AtomLink"],)) - else: UpdateStatus("NWSCAPcapture", "NWS CAP Capture is disabled.") - - if ConfigData[f'SAMEmonitor'] is True: - print("Starting SAME monitors...") - from SAMEmonitor import * - if ConfigData[f'SAME-AudioDevice-Monitor'] is True: SAMEaudiodevMonitorThread = threading.Thread(target=AUDIOmonitor_run, args=("AudioMonitor",)) - if ConfigData[f'SAME-AudioStream-Monitor1'] != "": SAMEaudiostreamThread_Monitor1 = threading.Thread(target=IPmonitor_run, args=("IpMonitor1", ConfigData[f'SAME-AudioStream-Monitor1'])) - if ConfigData[f'SAME-AudioStream-Monitor2'] != "": SAMEaudiostreamThread_Monitor2 = threading.Thread(target=IPmonitor_run, args=("IpMonitor2", ConfigData[f'SAME-AudioStream-Monitor2'])) - if ConfigData[f'SAME-AudioStream-Monitor3'] != "": SAMEaudiostreamThread_Monitor3 = threading.Thread(target=IPmonitor_run, args=("IpMonitor3", ConfigData[f'SAME-AudioStream-Monitor3'])) - if ConfigData[f'SAME-AudioStream-Monitor4'] != "": SAMEaudiostreamThread_Monitor4 = threading.Thread(target=IPmonitor_run, args=("IpMonitor4", ConfigData[f'SAME-AudioStream-Monitor4'])) - - if args.headless is False: WebThread.start() - print("Starting QuantumENDEC...") - RelayThread.start() - - try: TCP1capture_thread.start() - except: pass - try: TCP2capture_thread.start() - except: pass - - try: HTTPcaptureThread1.start() - except: pass - try: HTTPcaptureThread2.start() - except: pass - try: HTTPcaptureThread3.start() - except: pass - try: HTTPcaptureThread4.start() - except: pass - try: HTTPcaptureThread5.start() - except: pass + if QEARGS.noPlayout is True: PlayoutAlerts = False + else: PlayoutAlerts = True - try: NWSCAPthread.start() - except: pass + print(f"-- Welcome to QuantumENDEC --\n{QuantumENDEC_Version}\n\nDevloped by ApatheticDELL alongside Aaron and BunnyTub\n") - try: SAMEaudiodevMonitorThread.start() - except: pass - try: SAMEaudiostreamThread_Monitor1.start() - except: pass - try: SAMEaudiostreamThread_Monitor2.start() - except: pass - try: SAMEaudiostreamThread_Monitor3.start() - except: pass - try: SAMEaudiostreamThread_Monitor4.start() - except: pass + WebserverThread = None - if args.headless is False: WebThread.join() - RelayThread.join() - - try: TCP1capture_thread.join() - except: pass + while True: + print("\n\nStarting QuantumENDEC...") + THREADSLIST = [] + Setup() + time.sleep(1) + with open(Config_File, "r") as JCfile: config = JCfile.read() + ConfigData = json.loads(config) + UpdateStatus("QuantumENDEC", "Starting up...") + Plugins_Run("startup") - try: TCP2capture_thread.join() - except: pass + QuantumStatus = 0 + + RelayThread = threading.Thread(target=RelayLoop) + THREADSLIST.append(RelayThread) + + if QEARGS.headless is False and WebserverThread is None: + WebserverThread = threading.Thread(target=Webserver().StartServer, args=(ConfigData['WebserverHost'], int(ConfigData['WebserverPort']))) + WebserverThread.start() + + # Start CAP monitors + if ConfigData['TCP'] is True: + if ConfigData['TCP1'] != "": + TCPHOST, TCPPORT = ConfigData['TCP1'].split(":") + TCPCAP1Thread = threading.Thread(target=Capture().TCPcapture, args=(TCPHOST, TCPPORT, 1024, "", "TCP1")) + THREADSLIST.append(TCPCAP1Thread) + + if ConfigData['TCP2'] != "": + TCPHOST, TCPPORT = ConfigData['TCP2'].split(":") + TCPCAP2Thread = threading.Thread(target=Capture().TCPcapture, args=(TCPHOST, TCPPORT, 1024, "
", "TCP2")) + THREADSLIST.append(TCPCAP2Thread) + + if ConfigData['Enable_NWSCAP'] is True: + if ConfigData['NWSCAP_AtomLink'] != "": + NWSCAPThread = threading.Thread(target=Capture().NWScapture, args=(ConfigData['NWSCAP_AtomLink'],)) + THREADSLIST.append(NWSCAPThread) + + if ConfigData['HTTP_CAP'] is True: + if ConfigData['HTTP_CAP_ADDR'] != "": + HTTPCAP1Thread = threading.Thread(target=Capture().HTTPcapture, args=(ConfigData['HTTP_CAP_ADDR'], 1)) + THREADSLIST.append(HTTPCAP1Thread) + + if ConfigData['HTTP_CAP_ADDR1'] != "": + HTTPCAP2Thread = threading.Thread(target=Capture().HTTPcapture, args=(ConfigData['HTTP_CAP_ADDR1'], 2)) + THREADSLIST.append(HTTPCAP2Thread) + + if ConfigData['HTTP_CAP_ADDR2'] != "": + HTTPCAP3Thread = threading.Thread(target=Capture().HTTPcapture, args=(ConfigData['HTTP_CAP_ADDR2'], 3)) + THREADSLIST.append(HTTPCAP3Thread) + + if ConfigData['HTTP_CAP_ADDR3'] != "": + HTTPCAP4Thread = threading.Thread(target=Capture().HTTPcapture, args=(ConfigData['HTTP_CAP_ADDR3'], 4)) + THREADSLIST.append(HTTPCAP4Thread) + + if ConfigData['HTTP_CAP_ADDR4'] != "": + HTTPCAP5Thread = threading.Thread(target=Capture().HTTPcapture, args=(ConfigData['HTTP_CAP_ADDR4'], 5)) + THREADSLIST.append(HTTPCAP5Thread) + + # Start audio monitors for S.A.M.E + if ConfigData['SAME-AudioDevice-Monitor'] is True: + DEVmonitorThread = threading.Thread(target=Monitor_Local("LocalMonitor").start) + THREADSLIST.append(DEVmonitorThread) + + if ConfigData['SAME_AudioStream_Monitors'] is True: + if ConfigData['SAME-AudioStream-Monitor1'] != "": + IPmonitor1Thread = threading.Thread(target=Monitor_Stream("IPmonitor1", ConfigData['SAME-AudioStream-Monitor1']).start) + THREADSLIST.append(IPmonitor1Thread) + + if ConfigData['SAME-AudioStream-Monitor2'] != "": + IPmonitor2Thread = threading.Thread(target=Monitor_Stream("IPmonitor2", ConfigData['SAME-AudioStream-Monitor2']).start) + THREADSLIST.append(IPmonitor2Thread) + + if ConfigData['SAME-AudioStream-Monitor3'] != "": + IPmonitor3Thread = threading.Thread(target=Monitor_Stream("IPmonitor3", ConfigData['SAME-AudioStream-Monitor3']).start) + THREADSLIST.append(IPmonitor3Thread) + + if ConfigData['SAME-AudioStream-Monitor4'] != "": + IPmonitor4Thread = threading.Thread(target=Monitor_Stream("IPmonitor4", ConfigData['SAME-AudioStream-Monitor4']).start) + THREADSLIST.append(IPmonitor4Thread) - try: HTTPcaptureThread1.join() - except: pass - try: HTTPcaptureThread2.join() - except: pass - try: HTTPcaptureThread3.join() - except: pass - try: HTTPcaptureThread4.join() - except: pass - try: HTTPcaptureThread5.join() - except: pass + for thread in THREADSLIST: thread.start() + + UpdateStatus("QuantumENDEC", "Ready and Running") - try: NWSCAPthread.join() - except: pass + while QuantumStatus == 0: + try: time.sleep(0.5) # keep-alive + except KeyboardInterrupt: QuantumStatus = 2 - try: SAMEaudiodevMonitorThread.join() - except: pass - try: SAMEaudiostreamThread_Monitor1.join() - except: pass - try: SAMEaudiostreamThread_Monitor2.join() - except: pass - try: SAMEaudiostreamThread_Monitor3.join() - except: pass - try: SAMEaudiostreamThread_Monitor4.join() - except: pass + if QuantumStatus == 1: + print("QuantumENDEC is restarting... (please wait)") + UpdateStatus("QuantumENDEC", "Restarting... (please wait)") + elif QuantumStatus == 2: + print("QuantumENDEC is shutting down... (please wait)") + UpdateStatus("QuantumENDEC", "Shutting down... (please wait)") - print("The end of QuantumENDEC") \ No newline at end of file + for thread in THREADSLIST: thread.join() + + if QuantumStatus == 1: continue + else: + os.kill(os.getpid(), signal.SIGINT) # This is one way to do it + exit() \ No newline at end of file diff --git a/README.md b/README.md index 6274c19..947759e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ ApatheticDELL presents... -# QuantumENDEC (v5 Public Beta 9) +# QuantumENDEC v5 Final Beta (Public Beta 10) ### Credits Developed by... @@ -25,8 +25,7 @@ You will first require the following... - Python (3+) ...to be installed on your System -And then, you need the following required Python modules: EASGen, EAS2Text, discord_webhook, pyttsx3, sounddevice, numpy, scipy, requests, argparse, xmltodict, pydub, ffmpeg-python, flask, soundfile -You may also need: pyaudio +All the required python modules are in the 'requirements.txt' text file. If running on windows: You may also need pythoncom If you are using any of the SAME monitor functions with QuantumENDEC on linux: You need to install multimon-ng. diff --git a/SAMEmonitor.py b/SAMEmonitor.py deleted file mode 100644 index 17ae545..0000000 --- a/SAMEmonitor.py +++ /dev/null @@ -1,426 +0,0 @@ -from EAS2Text import EAS2Text -from datetime import datetime, timezone, timedelta -import random, string, subprocess, sys, threading, queue, os, wave, contextlib, base64, json, time, ffmpeg, requests -import sounddevice as sd -import soundfile as sf -from pydub import AudioSegment -from scipy.fft import * -from scipy.io import wavfile -import numpy -assert numpy -from logger import Log - -def UpdateStatus(service, content): - try: - statFolder = "stats" - with open(f"{statFolder}/{service}_status.txt", "w") as f: f.write(content) - except: pass - -def createXML(SAME, audioInput, XMLfolder, monitorName): - try: - XMLfolder = XMLfolder.replace("/","") - sent = datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%S-00:00') - sent_rp = sent.replace("-","").replace(":","") - ident_code = ''.join(random.choices(string.ascii_uppercase + string.digits, k=10)) - ident = f"{sent_rp}{ident_code}" - output = f"{XMLfolder}/{monitorName}-{sent_rp}I{ident}.xml" - - current_time = datetime.strptime(sent, "%Y-%m-%dT%H:%M:%S-00:00") - try: - oof = EAS2Text(SAME) - hours, minutes = map(int, oof.purge) - except: hours, minutes = map(int, ['01','30']) - expiry_time = current_time + timedelta(hours=hours, minutes=minutes) - expiry_timestamp = expiry_time.strftime("%Y-%m-%dT%H:%M:%S-00:00") - with open(audioInput, 'rb') as wav_file: wav_data = wav_file.read() - encoded_data = base64.b64encode(wav_data).decode('utf-8') - - SAME = SAME.replace("\n", "") - monitorName = monitorName.replace("\n", "") - - XML = f""" - - SAME - {monitorName} - This is QuantumENDEC's AmericanMode alert - {ident} - {sent} - {expiry_timestamp} - {SAME} - - audio/wav - - {encoded_data} - - - - """ - - with open(output, "w") as f: f.write(XML) - print(f"[{monitorName}]: XML creation success") - except: print(f"[{monitorName}]: XML creation failed.") - -def setup(moniName): - print(f"[Setup][{moniName}] Using Default Audio Input...") - print(f"[Setup][{moniName}] Cleaning Up Old Files...") - files = os.listdir('Audio/tmp') - files_to_del = [f"{moniName}-out.wav", f"{moniName}-rmend0.wav", f"{moniName}-alert.wav"] - for name in files: - if name in files_to_del: os.remove(f"Audio/tmp/" + name) - if sys.platform == "win32": platform = "win" - else: platform = "other" - return platform - -def clr_dir(moniName): - files = os.listdir('Audio/tmp') - for name in files: - #Make sure to not delete the output (alert) - if name != f"{moniName}-alert.wav" and moniName in name: os.remove(f"Audio/tmp/" + f"{name}") - print(f"[{moniName}] Cleaned Up tmp Directory") - -def get_len(fname): - with contextlib.closing(wave.open(fname,'r')) as f: - frames = f.getnframes() - rate = f.getframerate() - duration = frames / float(rate) - return duration - -def freq(file, start_time, end_time): - sr, data = wavfile.read(file) - if data.ndim > 1: data = data[:, 0] - else: pass - dataToRead = data[int(start_time * sr / 1000) : int(end_time * sr / 1000) + 1] - N = len(dataToRead) - yf = rfft(dataToRead) - xf = rfftfreq(N, 1 / sr) - # Get the most dominant frequency and return it - idx = numpy.argmax(numpy.abs(yf)) - freq = xf[idx] - return freq - -def RemoveEOMpATTN(moniName): - moniName = f"{moniName}-" - try: - # Remove END (EOMs) - audio = AudioSegment.from_file(f"Audio/tmp/{moniName}out.wav") - lengthaudio = len(audio) - start = 0 - threshold = lengthaudio - 1200 - end = 0 - counter = 0 - end += threshold - chunk = audio[start:end] - filename = f'Audio/tmp/{moniName}rmend{counter}.wav' - chunk.export(filename, format="wav") - counter +=1 - start += threshold - print(f"[{moniName}] Removed Recording EOMs") - except: print(f"[{moniName}] Failed to remove recording EOMs") - - try: - # Remove attention tone - timelist = [] - freqlist = [] - ATTNCUT = 0 - file_length = get_len(f"Audio/tmp/{moniName}rmend0.wav") - if file_length < 23: file_length = round(file_length) - else: file_length = 80 - cnt = 0 - for e in range(file_length): - cnt = cnt + 1 - val = 300 - start = e * val - offset = start + val - timelist.append(start) - frequency = freq(f"Audio/tmp/{moniName}rmend0.wav", start, offset) - freqlist.append(frequency) - freqlist = list(freqlist) - mainlen = len(freqlist) - found = False - for e in range(len(freqlist)): - if found == False: - if 810 < round(int(freqlist[e])) < 1070: - if 810 < round(int(freqlist[e + 1])) < 1070 and 810 < round(int(freqlist[e + 2])) < 1070: - found = True - elif found == True: - if freqlist[e] < 810 or freqlist[e] > 1070: - if e + 5 < mainlen: - if freqlist[e + 1] < 810 or freqlist[e + 1] > 1070 and freqlist[e + 2] < 810 or freqlist[e + 2] > 1070 and freqlist[e + 3] < 810 or freqlist[e + 3] > 1070 and freqlist[e + 4] < 810 or freqlist[e + 4] > 1070 and freqlist[e + 5] < 810 or freqlist[e + 5] > 1070: - end_point = e - found = None - filename = f"Audio/tmp/{moniName}alert.wav" - if(found == None): - audio = AudioSegment.from_file(f"Audio/tmp/{moniName}rmend0.wav") - lengthaudio = len(audio) - cut = 300 * end_point - start = cut - threshold = lengthaudio - cut - end = lengthaudio - counter = 0 - while start < len(audio): - end += threshold - chunk = audio[start:end] - chunk.export(filename, format="wav") - counter +=1 - start += threshold - else: - gl = round(get_len(f"Audio/tmp/{moniName}rmend0.wav")) - if(gl > 4): end_point = 17 #5 seconds - else: end_point = gl // 2 - audio = AudioSegment.from_file(f"Audio/tmp/{moniName}rmend0.wav") - lengthaudio = len(audio) - cut = 300 * end_point - start = cut - threshold = lengthaudio - cut - end = lengthaudio - counter = 0 - while start < len(audio): - end += threshold - chunk = audio[start:end] - chunk.export(filename, format="wav") - counter +=1 - start += threshold - print(f"[{moniName}] Removed ATTN Tone") - except: print(f"[{moniName}] Failed to remove ATTN Tone") - -def ZCZC_test(inp): - inp = inp.split("-") - num = len(inp) - 6 - if len(inp[num + 3]) != 7: return False - elif len(inp[num + 4]) != 8: return False - elif len(inp[0]) != 4: return False #ZCZC - elif len(inp[1]) != 3: return False #"EAS" - elif len(inp[2]) != 3: return False #"DMO" - if num == 1 and len(inp[3]) == 11: return True - elif num > 1: - for e in range(num): - if (e + 1) == num: - if len(inp[e+3]) == 11: return True - else: return False - elif len(inp[e+3]) != 6: return False - else: return False - -class AUDIODEVmonitor: - def __init__(self, monitorName): - self.monitorName = monitorName - self.record = False - - def recordAUDIO(self, SAME): - while True: - sd.default.reset() - samplerate = 8000 - file = f"Audio/tmp/{self.monitorName}-out.wav" - q = queue.Queue() - - def callback(indata, frames, time, status): - if status: print(status, file=sys.stderr) - q.put(indata.copy()) - - with sf.SoundFile(file, mode='x', samplerate=samplerate,channels=2) as file: - with sd.InputStream(samplerate=samplerate,channels=2,callback=callback): - print(f"[{self.monitorName}] Recording!") - last_check_time = time.time() - while True: - file.write(q.get()) - current_time = time.time() - if self.record is False or current_time - last_check_time > 120: - file.close() - print(f"[{self.monitorName}] Stopped Recording Thread") - RemoveEOMpATTN(self.monitorName) - clr_dir(self.monitorName) - createXML(SAME, f"Audio/tmp/{self.monitorName}-alert.wav", "XMLqueue", self.monitorName) - UpdateStatus(self.monitorName, f"Alert sent.") - print(f"[{self.monitorName}] Alert Sent!\n\n") - exit() - - def start(self): - while True: - try: - platform = setup(self.monitorName) - last = None - if platform == "win": source_process = subprocess.Popen(["multimon-ng-WIN32/multimon-ng.exe", "-a", "EAS", "-q"], stdout=subprocess.PIPE) - else: source_process = subprocess.Popen(["multimon-ng", "-a", "EAS", "-q"], stdout=subprocess.PIPE) - UpdateStatus(self.monitorName, f"Ready For Alerts.") - print(f"[{self.monitorName}] Ready For Alerts...\n") - - while True: - line = source_process.stdout.readline().decode("utf-8") - decode = line.replace("b'EAS: ", "").replace("\n'", "").replace("'bEnabled Demodulators: EAS", "").replace('EAS: ', '').replace('EAS: ', '').replace('Enabled demodulators: EAS', '') - if "ZCZC-" in decode or "NNNN" in decode: print(f"[{self.monitorName}] Decoder: {decode}") - - if 'ZCZC-' in str(line): - if ZCZC_test(decode) == True: - SAME = decode.replace("\n", "") - UpdateStatus(self.monitorName, f"Receiving alert...") - print(f"[{self.monitorName}] ZCZC Check OK") - with open("config.json", "r") as JCfile: config = JCfile.read() - ConfigData = json.loads(config) - logge = Log(ConfigData) - dateNow = datetime.now().strftime("%B %d, %Y at %H:%M:%S") - logge.SendLog("Emergency Alert Received", f"Receipt: Received on {dateNow} from {self.monitorName}", SAME) - self.record = True - RecordThread = threading.Thread(target = self.recordAUDIO, args=(decode,)) - RecordThread.start() - else: - print(f"[{self.monitorName}] WARNING: ZCZC Check FAILED!") - line = "NNNN" - - elif 'NNNN' not in str(last): - if 'NNNN' in str(line): - self.record = False - try: RecordThread.join() - except: pass - UpdateStatus(self.monitorName, f"Ready For Alerts.") - last = line - except Exception as e: - UpdateStatus(self.monitorName, f"Failure") - print(f"[{self.monitorName}] Monitor failure.", e) - time.sleep(20) - - -class IPmonitor: - def __init__(self, monitorName, streamURL): - self.monitorName = monitorName - self.streamURL = streamURL - self.record = False - - def is_stream_online(self): - try: - response = requests.get(self.streamURL, stream=True, timeout=10) - return response.status_code == 200 - except requests.RequestException as e: - print(f"[{self.monitorName}] Error checking stream URL: {e}") - return False - - def RecordIP(self, ZCZC): - output_file = f"Audio/tmp/{self.monitorName}-out.wav" - RecordIP = (ffmpeg .input(self.streamURL) .output(output_file, format='wav', ar='8000') .run_async(pipe_stdout=True, pipe_stderr=True)) - seconds = 0 - while True: - seconds = seconds + 1 - if self.record is False or seconds == 120 or seconds > 120: - RecordIP.terminate() - RecordIP.wait() - # try: shutil.copy(f"Audio/tmp/{self.monitorName}-out.wav", f"{self.monitorName}_alertFullish.wav") - # except: pass - print(f"[{self.monitorName}] Stopped Recording Thread") - RemoveEOMpATTN(self.monitorName) - clr_dir(self.monitorName) - createXML(ZCZC, f"Audio/tmp/{self.monitorName}-alert.wav", "XMLqueue", self.monitorName) - UpdateStatus(self.monitorName, f"Alert sent.") - print(f"[{self.monitorName}] Alert Sent!\n\n") - exit() - time.sleep(1) - - def decodeStream(self): - try: - # Command to capture audio from IP stream and pipe it to multimon-ng - ffmpeg_command = [ - 'ffmpeg', - '-i', self.streamURL, # Input stream URL - '-f', 'wav', # Output format - '-ac', '1', # Number of audio channels (1 for mono) - '-ar', '22050', # Audio sample rate - '-loglevel', 'quiet', # Suppress ffmpeg output - '-' ] - - platform = setup(self.monitorName) - last = None - ffmpeg_process = subprocess.Popen(ffmpeg_command, stdout=subprocess.PIPE) - if platform == "win": source_process = subprocess.Popen(['multimon-ng-WIN32/multimon-ng.exe', '-a', 'EAS', '-q', '-t', 'raw', '-'], stdin=ffmpeg_process.stdout, stdout=subprocess.PIPE) - else: source_process = subprocess.Popen(['multimon-ng', '-a', 'EAS', '-q', '-t', 'raw', '-'], stdin=ffmpeg_process.stdout, stdout=subprocess.PIPE) - UpdateStatus(self.monitorName, f"Ready For Alerts, listening to {self.streamURL}") - print(f"[{self.monitorName}] Ready For Alerts, listening to {self.streamURL}\n") - - while True: - line = source_process.stdout.readline().decode("utf-8") - decode = line.replace("b'EAS: ", "").replace("\n'", "").replace("'bEnabled Demodulators: EAS", "").replace('EAS: ', '').replace('EAS: ', '').replace('Enabled demodulators: EAS', '') - if "ZCZC-" in decode or "NNNN" in decode: print(f"[{self.monitorName}] Decoder: {decode}") - - if 'ZCZC-' in str(line): - if ZCZC_test(decode) == True: - SAME = decode.replace("\n", "") - UpdateStatus(self.monitorName, f"Receiving alert...") - print(f"[{self.monitorName}] ZCZC Check OK") - with open("config.json", "r") as JCfile: config = JCfile.read() - ConfigData = json.loads(config) - logge = Log(ConfigData) - dateNow = datetime.now().strftime("%B %d, %Y at %H:%M:%S") - logge.SendLog("Emergency Alert Received", f"Receipt: Received on {dateNow} from {self.monitorName}", decode) - self.record = True - RecordThread = threading.Thread(target = self.RecordIP, args=(decode,)) - RecordThread.start() - else: - print(f"[{self.monitorName}] WARNING: ZCZC Check FAILED!") - line = "NNNN" - - elif 'NNNN' not in str(last): - if 'NNNN' in str(line): - time.sleep(0.5) - self.record = False - try: RecordThread.join() - except: pass - UpdateStatus(self.monitorName, f"Ready For Alerts, listening to {self.streamURL}") - last = line - except: - try: - ffmpeg_process.terminate() - source_process.terminate() - except: pass - UpdateStatus(self.monitorName, f"Failure") - print(f"[{self.monitorName}] Monitor failure.") - - def start(self): - while True: - if self.is_stream_online() is False: - print(f"[{self.monitorName}] Stream URL {self.streamURL} is offline or unreachable.") - UpdateStatus(self.monitorName, f"Stream URL {self.streamURL} is offline or unreachable.") - time.sleep(30) - else: - try: - decodeThread = threading.Thread(target=self.decodeStream) - decodeThread.daemon = True - decodeThread.start() - while True: - time.sleep(30) - if self.is_stream_online() is False: - print(f"[{self.monitorName}] Stream URL {self.streamURL} is offline or unreachable.") - UpdateStatus(self.monitorName, f"Stream URL {self.streamURL} is offline or unreachable.") - time.sleep(30) - break - else: pass - except: - print(f"[{self.monitorName}] Monitor failure.") - UpdateStatus(self.monitorName, f"Failure.") - time.sleep(30) - -def IPmonitor_run(name, url): - i = IPmonitor(name, url) - i.start() - -def AUDIOmonitor_run(name): - i = AUDIODEVmonitor(name) - i.start() - -if __name__ == "__main__": - - - exit() - result = IPmonitor("test", "https://icecast.kodicable.net:8443/wcrf").is_stream_online() - print(result) - - print("testing only") - moni = "Test" - - #AudioMonitor = AUDIODEVmonitor(moni).start() - #AudioMonitor - - # Replace with your IP stream URL - # self.streamURL = "https://archive.secludedfox.com/comcast/getfile.php?v=3zE6dEocEe-_fbwkEa-VhA==" - # self.streamURL = 'https://icecast.wxstream.org/IP/CWXV' - streamURL = "http://192.168.2.36:8000/TEST" - monitorName = "TestMonitorIP" - - IPmonitor(monitorName, streamURL).start() - #StreamMonitor = - #StreamMonitor.start() \ No newline at end of file diff --git a/Audio/AttnCAN.wav b/assets/AttnCAN.wav similarity index 100% rename from Audio/AttnCAN.wav rename to assets/AttnCAN.wav diff --git a/Audio/AttnEBS.wav b/assets/AttnEBS.wav similarity index 100% rename from Audio/AttnEBS.wav rename to assets/AttnEBS.wav diff --git a/Audio/AttnEgg.wav b/assets/AttnEgg.wav similarity index 100% rename from Audio/AttnEgg.wav rename to assets/AttnEgg.wav diff --git a/Audio/AttnRumble.wav b/assets/AttnRumble.wav similarity index 100% rename from Audio/AttnRumble.wav rename to assets/AttnRumble.wav diff --git a/GeoToCLC.csv b/assets/GeoToCLC.csv similarity index 97% rename from GeoToCLC.csv rename to assets/GeoToCLC.csv index 9c3b347..e149d83 100644 --- a/GeoToCLC.csv +++ b/assets/GeoToCLC.csv @@ -1,5893 +1,5893 @@ -CAPCP Geocodes,EC CLC,UU Scale,UU Name,don't touch this tab -0,000000,N,All of Canada,(ignore it) -00,000000,N,All of Canada, -001,001100,WB,Pacific Waters, -00111,001110,WBD,Juan de Fuca Strait, -00112,001120,WBD,Haro Strait, -00113,001130,WBD,Strait of Georgia, -00114,001140,WBD,Howe Sound, -00115,001150,WBD,Johnstone Strait, -00116,001160,WBD,Queen Charlotte Strait, -00117,001170,WBD,West Coast Vancouver Island North, -00118,001180,WBD,West Coast Vancouver Island South, -00121,001210,WBD,Queen Charlotte Sound, -00122,001220,WBD,Central Coast from McInnes Island to Pine Island, -00123,001230,WBD,Douglas Channel, -00124,001240,WBD,Hecate Strait, -00125,001250,WBD,Dixon Entrance East, -00126,001260,WBD,Dixon Entrance West, -00127,001270,WBD,West Coast Haida Gwaii, -00128,001280,WBD,North Coast Channels, -00131,001310,WBD,Bowie, -00132,001320,WBD,Explorer, -002,002200,WB,Great Lakes, -00221,002210,WBD,Lake Erie, -00231,002310,WBD,Lake St. Clair, -00241,002410,WBD,Lake Huron, -00251,002510,WBD,Georgian Bay, -00261,002610,WBD,North Channel, -00271,002710,WBD,Whitefish Bay, -00281,002810,WBD,Lake Superior, -00291,002910,WBD,Lake Ontario, -003,003000,WB,Atlantic Waters, -00311,003110,WBD,Tadoussac to Pointe-des-Monts, -00312,003120,WBD,Pointe-des-Monts to Anticosti, -00314,003140,WBD,Anticosti, -00315,003150,WBD,Chaleur - Miscou, -00316,003160,WBD,Gulf - Magdalen, -00317,003170,WBD,Northumberland Strait, -00321,003210,WBD,Fundy, -00322,003220,WBD,Grand Manan, -00323,003230,WBD,Lurcher, -00324,003240,WBD,Browns Bank, -00325,003250,WBD,Georges Bank, -00326,003260,WBD,Southwestern Shore, -00327,003270,WBD,LaHave Bank, -00328,003280,WBD,West Scotian Slope, -00329,003290,WBD,Halifax Harbour and Approaches, -00331,003310,WBD,Cabot Strait, -00332,003320,WBD,Fourchu, -00333,003330,WBD,Eastern Shore, -00334,003340,WBD,Sable, -00335,003350,WBD,East Scotian Slope, -00336,003360,WBD,Southwest Coast, -00337,003370,WBD,Banquereau, -00338,003380,WBD,Laurentian Fan, -00341,003410,WBD,Strait of Belle Isle, -00342,003420,WBD,Northeast Gulf, -00343,003430,WBD,Gulf - Port au Port, -00344,003440,WBD,Northeast Coast, -00345,003450,WBD,East Coast, -00346,003460,WBD,South Coast, -00347,003470,WBD,Southwestern Grand Banks, -00351,003510,WBD,South Labrador Coast, -00352,003520,WBD,Belle Isle Bank, -00353,003530,WBD,Funk Island Bank, -00354,003540,WBD,Northern Grand Banks, -00355,003550,WBD,Southeastern Grand Banks, -00356,003560,WBD,Southeast Labrador Sea, -00357,003570,WBD,Flemish, -00358,003580,WBD,Tail of the Grand Banks, -00361,003610,WBD,North Labrador Coast, -00362,003620,WBD,Mid Labrador Coast, -00363,003630,WBD,Northwest Labrador Sea, -00364,003640,WBD,South Labrador Sea, -00365,003650,WBD,East Labrador Sea, -00364,003640,WBD,South Labrador Sea, -004,004000,WB,Inland Waters (Eastern Canada), -00411,004110,WBD,Lake Melville, -00421,004210,WBD,Bras d'Or Lakes, -00431,004310,WBD,Saguenay to Tadoussac, -00432,004320,WBD,Lake Saint-Jean, -00441,004410,WBD,L'Isle-aux-Coudres to Tadoussac, -00442,004420,WBD,St. Lawrence River - Donnacona to L'Isle-aux-Coudres, -00443,004430,WBD,St. Lawrence River - Trois-Rivières to Donnacona, -00444,004440,WBD,St. Lawrence River - Montréal to Trois-Rivières, -00445,004450,WBD,St. Lawrence River - Cornwall to Montréal, -00446,004460,WBD,St. Lawrence River - Prescott to Cornwall, -00447,004470,WBD,St. Lawrence River - Kingston to Prescott, -00471,004710,WBD,Lake Simcoe, -00472,004720,WBD,Lake Nipissing, -00481,004810,WBD,Lake Nipigon, -00483,004830,WBD,Albany River, -00484,004840,WBD,Big Trout Lake, -00485,004850,WBD,Severn River, -00473,004730,WBD,Lake Abitibi, -00484,004840,WBD,Big Trout Lake, -00412,004120,WBD,Meelpaeg Lake, -00433,004330,WBD,La Grande River, -00436,004360,WBD,Robert-Bourassa Reservoir, -00435,004350,WBD,La Grande 3 Reservoir, -00486,004860,WBD,Seul Lake, -00413,004130,WBD,Smallwood Reservoir, -00434,004340,WBD,Caniapiscau Reservoir, -00437,004370,WBD,Mistassini Lake, -005,005000,WB,Hudson Bay and Baffin Island Waters, -00511,005110,WBD,Prince Charles, -00512,005120,WBD,East Foxe, -00513,005130,WBD,West Foxe, -00514,005140,WBD,Igloolik, -00521,005210,WBD,Nottingham, -00522,005220,WBD,Resolution, -00523,005230,WBD,Ungava, -00531,005310,WBD,Puvirnituq, -00532,005320,WBD,Belcher, -00533,005330,WBD,James Bay, -00541,005410,WBD,South-central Hudson, -00542,005420,WBD,South Hudson, -00543,005430,WBD,York, -00551,005510,WBD,Arviat, -00552,005520,WBD,Churchill, -00553,005530,WBD,Central, -00554,005540,WBD,Coats, -00561,005610,WBD,Roes Welcome, -00562,005620,WBD,Rankin, -00563,005630,WBD,Chesterfield Inlet, -006,006000,WB,Northeastern Arctic Waters, -00611,006110,WBD,Robeson, -00612,006120,WBD,Kane, -00613,006130,WBD,Clarence, -00614,006140,WBD,East Baffin, -00615,006150,WBD,East Clyde, -00616,006160,WBD,West Clyde, -00617,006170,WBD,West Baffin, -00618,006180,WBD,Pond, -00621,006210,WBD,East Davis, -00622,006220,WBD,East Brevoort, -00623,006230,WBD,Central Brevoort, -00624,006240,WBD,West Brevoort, -00625,006250,WBD,Frobisher Bay, -00626,006260,WBD,Cumberland, -00627,006270,WBD,West Davis, -00631,006310,WBD,Lancaster, -00632,006320,WBD,Navy Board, -00633,006330,WBD,Admiralty, -00634,006340,WBD,Committee, -00635,006350,WBD,Boothia, -00636,006360,WBD,Regent, -00641,006410,WBD,Barrow, -00642,006420,WBD,Peel, -00643,006430,WBD,St. Roch, -00644,006440,WBD,Maud, -00645,006450,WBD,Larsen, -00646,006460,WBD,McClintock, -00651,006510,WBD,Dease, -00652,006520,WBD,Bathurst, -00653,006530,WBD,Coronation, -00654,006540,WBD,Dolphin, -00655,006550,WBD,Amundsen, -00656,006560,WBD,Holman, -00657,006570,WBD,Prince of Wales, -00661,006610,WBD,Rae, -00662,006620,WBD,Melville, -00663,006630,WBD,McClure, -00664,006640,WBD,Liddon, -00665,006650,WBD,Fitzwilliam, -00666,006660,WBD,Griper, -00667,006670,WBD,Ballantyne, -00668,006680,WBD,Wilkins, -00671,006710,WBD,Peary, -00672,006720,WBD,Hassel, -00673,006730,WBD,Maclean, -00674,006740,WBD,Queens, -00675,006750,WBD,Byam, -00676,006760,WBD,Hazen, -00677,006770,WBD,Gustaf, -00681,006810,WBD,Greely, -00682,006820,WBD,Eureka, -00683,006830,WBD,Jones, -00684,006840,WBD,Norwegian, -00685,006850,WBD,Massey, -00686,006860,WBD,South Sverdrup, -00687,006870,WBD,North Sverdrup, -00688,006880,WBD,Nansen, -007,007000,WB,Western Arctic Waters, -00711,007110,WBD,CZ1, -00712,007120,WBD,CY3, -00713,007130,WBD,CX5, -00714,007140,WBD,CX4, -00715,007150,WBD,CX3, -00716,007160,WBD,CX2, -00717,007170,WBD,CX1, -00718,007180,WBD,CY1, -00719,007190,WBD,CY2, -00721,007210,WBD,CW6, -00722,007220,WBD,CV7, -00723,007230,WBD,CV6, -00731,007310,WBD,CW5, -00732,007320,WBD,Alert, -00733,007330,WBD,Bartlett, -00734,007340,WBD,Ward Hunt, -00735,007350,WBD,Ellesmere, -00736,007360,WBD,South Axel Heiberg, -00737,007370,WBD,Axel Heiberg, -00738,007380,WBD,CW4, -00741,007410,WBD,Prince Patrick, -00742,007420,WBD,Brock, -00743,007430,WBD,South Prince Patrick, -00744,007440,WBD,CT4, -00745,007450,WBD,CU4, -00746,007460,WBD,CU3, -00751,007510,WBD,CW3, -00752,007520,WBD,CV5, -00753,007530,WBD,Ellef Ringnes, -00754,007540,WBD,South Ellef Ringnes, -00755,007550,WBD,Borden, -00756,007560,WBD,North Prince Patrick, -00757,007570,WBD,CV4, -00758,007580,WBD,CV3, -00759,007590,WBD,CW2, -00761,007610,WBD,CW1, -00762,007620,WBD,CV2, -00763,007630,WBD,CU2, -00764,007640,WBD,CT3, -00765,007650,WBD,CT2, -00766,007660,WBD,CT1, -00767,007670,WBD,CU1, -00768,007680,WBD,CV1, -00771,007710,WBD,Prince Alfred, -00772,007720,WBD,Banks, -00773,007730,WBD,Baillie, -00781,007810,WBD,West Prince Alfred, -00782,007820,WBD,North Tuktoyaktuk, -00783,007830,WBD,Tuktoyaktuk, -00784,007840,WBD,Yukon Coast, -00785,007850,WBD,Mackenzie, -00786,007860,WBD,North Mackenzie, -00787,007870,WBD,Northwest Beaufort, -008,008000,WB,Inland Waters (Western Canada), -00811,008110,WBD,Mackenzie River, -00821,008210,WBD,Great Bear Lake, -00822,008220,WBD,Eskimo Lakes, -00831,008310,WBD,Great Slave Lake, -00832,008320,WBD,Baker, -00841,008410,WBD,Lake Athabasca, -00851,008510,WBD,Reindeer Lake, -00861,008610,WBD,Cedar Lake, -00862,008620,WBD,Lake Winnipegosis, -00863,008630,WBD,Lake Winnipeg, -00864,008640,WBD,Lake Manitoba, -00871,008710,WBD,Fraser River Waterways, -00812,008120,WBD,Anderson River, -00813,008130,WBD,Horton River, -00814,008140,WBD,Liard River, -00815,008150,WBD,Pelly River, -00816,008160,WBD,Yukon River, -00842,008420,WBD,Athabasca River, -00843,008430,WBD,North Saskatchewan River, -00844,008440,WBD,Peace River, -00845,008450,WBD,South Saskatchewan River, -00846,008460,WBD,Old Wives Lake, -00847,008470,WBD,Big Quill Lake, -00848,008480,WBD,Lesser Slave Lake, -00849,008490,WBD,Utikuma Lake, -00852,008520,WBD,Churchill River, -00853,008530,WBD,Nelson River, -00854,008540,WBD,Red River, -00855,008550,WBD,Saskatchewan River, -00856,008560,WBD,Lac la Ronge, -00865,008650,WBD,Dauphin Lake, -00866,008660,WBD,Swan Lake, -00867,008670,WBD,Lake St. Martin, -00868,008680,WBD,Red Deer Lake, -00872,008720,WBD,Columbia Riverr, -00873,008730,WBD,Fraser River, -00874,008740,WBD,Kootenay River, -00833,008330,WBD,Slave River, -00881,008810,WBD,Gods Lake, -00886,008860,WBD,Island Lake, -00834,008340,WBD,Dubawnt Lake, -00857,008570,WBD,Wollaston Lake, -00883,008830,WBD,North Moose Lake, -00885,008850,WBD,South Moose Lake, -00869,008690,WBD,Playgreen Lake, -00882,008820,WBD,Little Playgreen Lake, -00884,008840,WBD,Pipestone Lake, -00887,008870,WBD,Cross Lake, -00888,008880,WBD,Kiskittogisu Lake, -00889,008890,WBD,Kiskitto Lake, -59,080000,PT,British Columbia, -5901,084300-084400-084500-085600,CD,East Kootenay, -5901022,084510,CSD,Cranbrook, -5901805,080000,CSD,Cassimayooks (Mayook) 5, -5901012,080000,CSD,Fernie, -5901040,080000,CSD,Radium Hot Springs, -5901006,080000,CSD,Sparwood, -5901801,080000,CSD,Tobacco Plains 2, -5901804,085200-085400-085500,CSD,Columbia Lake 3, -5901039,084520,CSD,Invermere, -5901003,080000,CSD,Elkford, -5901028,080000,CSD,Kimberley, -5901043,080000,CSD,Canal Flats, -5901037,084300-084400-084500-085600,CSD,East Kootenay E, -5901035,084300-084400-084500-085600,CSD,East Kootenay C, -5901019,084300-084400-084500-085600,CSD,East Kootenay B, -5901048,084300-084400-084500-085600,CSD,East Kootenay G, -5901046,084300-084400-084500-085600,CSD,East Kootenay F, -5901803,084300-084400-084500-085600,CSD,Kootenay 1, -5901802,080000,CSD,Isidore's Ranch 4, -5901806,083600,CSD,Shuswap, -5901017,084300-084400-084500-085600,CSD,East Kootenay A, -5903,084300-084400-084500-085600,CD,Central Kootenay, -5903019,080000,CSD,Slocan, -5903010,084300-084400-084500-085600,CSD,Central Kootenay A, -5903011,080000,CSD,Salmo, -5903017,084300-084400-084500-085600,CSD,Central Kootenay C, -5903052,084300-084400-084500-085600,CSD,Central Kootenay H, -5903032,080000,CSD,New Denver, -5903015,080000,CSD,Nelson, -5903013,084300-084400-084500-085600,CSD,Central Kootenay B, -5903058,084300-084400-084500-085600,CSD,Central Kootenay J, -5903004,080000,CSD,Creston, -5903047,084300-084400-084500-085600,CSD,Central Kootenay G, -5903023,080000,CSD,Kaslo, -5903041,084300-084400-084500-085600,CSD,Central Kootenay E, -5903056,084300-084400-084500-085600,CSD,Central Kootenay I, -5903039,084300-084400-084500-085600,CSD,Central Kootenay D, -5903050,080000,CSD,Nakusp, -5903027,080000,CSD,Silverton, -5903045,080000,CSD,Castlegar, -5903807,080000,CSD,Creston 1, -5903060,084300-084400-084500-085600,CSD,Central Kootenay K, -5903043,084300-084400-084500-085600,CSD,Central Kootenay F, -5905,084200-084300-084400-084500-085600,CD,Kootenay Boundary, -5905037,080000,CSD,Midway, -5905042,080000,CSD,Greenwood, -5905018,080000,CSD,Warfield, -5905052,084200-084300-084400-084500-085600,CSD,Kootenay Boundary D, -5905050,084200-084300-084400-084500-085600,CSD,Kootenay Boundary C, -5905023,080000,CSD,Rossland, -5905030,084200-084300-084400-084500-085600,CSD,Kootenay Boundary B, -5905014,080000,CSD,Trail, -5905026,084200-084300-084400-084500-085600,CSD,Kootenay Boundary A, -5905054,084200-084300-084400-084500-085600,CSD,Kootenay Boundary E, -5905005,080000,CSD,Fruitvale, -5905009,080000,CSD,Montrose, -5905032,080000,CSD,Grand Forks, -5907,083400-083500,CD,Okanagan-Similkameen, -5907807,080000,CSD,Chuchuwayha 2, -5907041,083530,CSD,Penticton, -5907049,083400-083500,CSD,Okanagan-Similkameen E, -5907809,080000,CSD,Ashnola 10, -5907028,083400-083500,CSD,Okanagan-Similkameen C, -5907802,080000,CSD,Osoyoos 1, -5907053,083400-083500,CSD,Okanagan-Similkameen G, -5907024,080000,CSD,Princeton, -5907805,080000,CSD,Chopaka 7 & 8, -5907035,080000,CSD,Summerland, -5907801,083400,CSD,Lower Similkameen 2, -5907803,083530,CSD,Penticton 1, -5907047,083400-083500,CSD,Okanagan-Similkameen D, -5907806,080000,CSD,Blind Creek 6, -5907051,083400-083500,CSD,Okanagan-Similkameen F, -5907009,080000,CSD,Keremeos, -5907808,080000,CSD,Alexis 9, -5907026,083400-083500,CSD,Okanagan-Similkameen B, -5907014,080000,CSD,Oliver, -5907055,083400-083500,CSD,Okanagan-Similkameen H, -5907022,083400-083500,CSD,Okanagan-Similkameen A, -5907005,080000,CSD,Osoyoos, -5909,082710-082720,CD,Fraser Valley, -5909804,080000,CSD,Chawathil 4, -5909814,080000,CSD,Skawahlook 1, -5909834,080000,CSD,Tseatah 2, -5909823,080000,CSD,Skowkale 11, -5909848,080000,CSD,Tipella 7, -5909852,080000,CSD,Baptiste Smith 1A, -5909855,080000,CSD,Sachteen 2, -5909817,080000,CSD,Tuckkwiowhum 1, -5909833,080000,CSD,Scowlitz 1, -5909832,080000,CSD,Seabird Island, -5909837,080000,CSD,Cheam 1, -5909881,080000,CSD,Skweahm 10, -5909843,080000,CSD,Peters 1, -5909826,080000,CSD,Skway 5, -5909877,080000,CSD,Upper Sumas 6, -5909822,080000,CSD,Skowkale 10, -5909831,080000,CSD,Yakweakwioose 12, -5909860,080000,CSD,Sachteen 2A, -5909805,080000,CSD,Inkahtsaph 6, -5909836,080000,CSD,Boston Bar 1A, -5909809,080000,CSD,Saddle Rock 9, -5909062,082710-082720,CSD,Fraser Valley G, -5909879,080000,CSD,Holachten 8, -5909064,082710-082720,CSD,Fraser Valley H, -5909821,080000,CSD,Kwawkwawapilt 6, -5909875,080000,CSD,Baptiste Smith 1B, -5909815,080000,CSD,Speyum 3, -5909806,080000,CSD,Kopchitchin 2, -5909812,080000,CSD,Schkam 2, -5909828,080000,CSD,Squiaala 7, -5909827,080000,CSD,Soowahlie 14, -5909048,082710-082720,CSD,Fraser Valley C, -5909845,080000,CSD,Skookumchuck 4, -5909847,080000,CSD,Bucktum 4, -5909056,080000,CSD,Mission, -5909818,080000,CSD,Yale Town 1, -5909876,080000,CSD,Albert Flat 5, -5909808,080000,CSD,Puckatholetchin 11, -5909009,080000,CSD,Hope, -5909810,080000,CSD,Lukseetsissum 9, -5909880,080000,CSD,Lakahahmen 11, -5909016,082710-082720,CSD,Fraser Valley B, -5909825,080000,CSD,Skwali 3, -5909824,080000,CSD,Skwah 4, -5909849,080000,CSD,Skwahla 2, -5909807,080000,CSD,Ohamil 1, -5909841,080000,CSD,Stullawheets 8, -5909842,080000,CSD,Douglas 8, -5909819,080000,CSD,Kahmoose 4, -5909839,080000,CSD,Chehalis 5, -5909882,080000,CSD,Squawkum Creek 3, -5909027,080000,CSD,Harrison Hot Springs, -5909844,080000,CSD,Popkum 1, -5909830,080000,CSD,Tzeachten 13, -5909036,082710-082720,CSD,Fraser Valley E, -5909838,080000,CSD,Schelowat 1, -5909034,082710-082720,CSD,Fraser Valley D, -5909835,080000,CSD,Aitchelitch 9, -5909014,082710-082720,CSD,Fraser Valley A, -5909816,080000,CSD,Spuzzum 1, -5909020,082720,CSD,Chilliwack, -5909032,080000,CSD,Kent, -5909878,080000,CSD,Matsqui Main 2, -5909829,080000,CSD,Squiaala 8, -5909060,082710-082720,CSD,Fraser Valley F, -5909052,082710,CSD,Abbotsford, -5915,081200-081300-081400-081500-082600,CD,Greater Vancouver, -5915051,081200,CSD,North Vancouver, -5915816,080000,CSD,McMillan Island 6, -5915811,080000,CSD,Seymour Creek 2, -5915034,080000,CSD,Coquitlam, -5915809,080000,CSD,Barnston Island 3, -5915840,080000,CSD,Whonnock 1, -5915825,080000,CSD,Matsqui 4, -5915029,080000,CSD,New Westminster, -5915039,080000,CSD,Port Coquitlam, -5915055,081400,CSD,West Vancouver, -5915808,080000,CSD,Capilano 5, -5915807,080000,CSD,Mission 1, -5915803,080000,CSD,Musqueam 2, -5915810,080000,CSD,Musqueam 4, -5915802,080000,CSD,Tsawwassen, -5915002,080000,CSD,Langley, -5915801,080000,CSD,Semiahmoo, -5915025,080000,CSD,Burnaby, -5915004,080000,CSD,Surrey, -5915015,080000,CSD,Richmond, -5915043,080000,CSD,Port Moody, -5915075,080000,CSD,Maple Ridge, -5915804,080000,CSD,Coquitlam 2, -5915835,080000,CSD,Langley 5, -5915036,080000,CSD,Belcarra, -5915830,080000,CSD,Katzie 1, -5915020,080000,CSD,Greater Vancouver A, -5915070,080000,CSD,Pitt Meadows, -5915805,080000,CSD,Coquitlam 1, -5915001,080000,CSD,Langley, -5915007,080000,CSD,White Rock, -5915011,080000,CSD,Delta, -5915046,081200,CSD,North Vancouver, -5915022,082600,CSD,Vancouver, -5915038,080000,CSD,Anmore, -5915806,080000,CSD,Burrard Inlet 3, -5915813,080000,CSD,Katzie 2, -5915065,080000,CSD,Lions Bay, -5915062,080000,CSD,Bowen Island, -5917,080000,CD,Capital, -5917817,080000,CSD,T'Sou-ke 1 (Sooke 1), -5917815,080000,CSD,Gordon River 2, -5917010,080000,CSD,Sidney, -5917015,080000,CSD,Central Saanich, -5917040,080000,CSD,Esquimalt, -5917005,080000,CSD,North Saanich, -5917042,080000,CSD,Metchosin, -5917809,080000,CSD,Becher Bay 1, -5917041,080000,CSD,Colwood, -5917056,080000,CSD,Capital H (Part 2), -5917803,080000,CSD,East Saanich 2, -5917044,080000,CSD,Langford, -5917818,080000,CSD,T'Sou-ke 2 (Sooke 2), -5917805,080000,CSD,Galiano Island 9, -5917029,080000,CSD,Capital G, -5917021,080000,CSD,Saanich, -5917811,080000,CSD,Esquimalt, -5917027,080000,CSD,Capital F, -5917804,080000,CSD,South Saanich 1, -5917052,080000,CSD,Sooke, -5917049,080000,CSD,Highlands, -5917812,080000,CSD,New Songhees 1A, -5917054,080000,CSD,Capital H (Part 1), -5917034,081600,CSD,Victoria, -5917802,080000,CSD,Union Bay 4, -5917801,080000,CSD,Cole Bay 3, -5917047,080000,CSD,View Royal, -5917030,080000,CSD,Oak Bay, -5919,080000,CD,Cowichan Valley, -5919814,080000,CSD,Malachan 11, -5919807,080000,CSD,Cowichan 1, -5919809,080000,CSD,Kuper Island 7, -5919051,080000,CSD,Cowichan Valley E, -5919820,080000,CSD,Est-Patrolas 4, -5919043,080000,CSD,Cowichan Valley A, -5919815,080000,CSD,Malahat 11, -5919033,080000,CSD,Cowichan Valley F, -5919804,080000,CSD,Chemainus 13, -5919812,080000,CSD,Cowichan Lake, -5919035,080000,CSD,Cowichan Valley I, -5919015,080000,CSD,Cowichan Valley G, -5919802,080000,CSD,Squaw-hay-one 11, -5919803,080000,CSD,Tsussie 6, -5919816,080000,CSD,Oyster Bay 12, -5919801,080000,CSD,Halalt 2, -5919021,080000,CSD,Ladysmith, -5919811,080000,CSD,Shingle Point 4, -5919817,080000,CSD,Portier Pass 5, -5919013,080000,CSD,Cowichan Valley D, -5919046,080000,CSD,Cowichan Valley B, -5919818,080000,CSD,Theik 2, -5919808,080000,CSD,Kil-pah-las 3, -5919049,080000,CSD,Cowichan Valley C, -5919016,080000,CSD,Lake Cowichan, -5919017,080000,CSD,Cowichan Valley H, -5919806,080000,CSD,Cowichan 9, -5919821,080000,CSD,Tzart-Lam 5, -5919012,080000,CSD,Duncan, -5919008,080000,CSD,North Cowichan, -5921,080000,CD,Nanaimo, -5921014,080000,CSD,Nanaimo B, -5921806,080000,CSD,Qualicum, -5921032,080000,CSD,Nanaimo F, -5921007,080000,CSD,Nanaimo, -5921010,080000,CSD,Nanaimo A, -5921016,080000,CSD,Nanaimo C, -5921018,080000,CSD,Parksville, -5921805,080000,CSD,Nanoose, -5921804,080000,CSD,Nanaimo Town 1, -5921801,080000,CSD,Nanaimo River 3, -5921023,080000,CSD,Qualicum Beach, -5921034,080000,CSD,Nanaimo G, -5921036,080000,CSD,Nanaimo H, -5921030,080000,CSD,Nanaimo E, -5921802,080000,CSD,Nanaimo River 2, -5921803,080000,CSD,Nanaimo River 4, -5921008,080000,CSD,Lantzville, -5923,080000,CD,Alberni-Clayoquot, -5923049,080000,CSD,Alberni-Clayoquot C, -5923806,080000,CSD,Hesquiat 1, -5923808,080000,CSD,Marktosis 15, -5923824,080000,CSD,Refuge Cove 6, -5923825,080000,CSD,Tin Wis 11, -5923822,080000,CSD,Klehkoot 2, -5923810,080000,CSD,Macoah 1, -5923816,080000,CSD,Tsahaheh 1, -5923047,080000,CSD,Alberni-Clayoquot A, -5923813,080000,CSD,Opitsat 1, -5923025,080000,CSD,Tofino, -5923033,080000,CSD,Alberni-Clayoquot B, -5923019,080000,CSD,Ucluelet, -5923802,080000,CSD,Alberni 2, -5923801,080000,CSD,Ahahswinis 1, -5923804,080000,CSD,Clakamucus 2, -5923803,080000,CSD,Anacla 12, -5923809,080000,CSD,Numukamis 1, -5923805,080000,CSD,Elhlateese 2, -5923008,080000,CSD,Port Alberni, -5923814,080000,CSD,Sachsa 4, -5923035,080000,CSD,Alberni-Clayoquot D, -5923823,080000,CSD,Esowista 3, -5923037,080000,CSD,Alberni-Clayoquot E, -5923039,080000,CSD,Alberni-Clayoquot F, -5923807,080000,CSD,Ittatsoo 1, -5924,080000,CD,Strathcona, -5924806,080000,CSD,Houpsitas 6, -5924805,080000,CSD,Chenahkint 12, -5924052,080000,CSD,Strathcona B, -5924025,080000,CSD,Gold River, -5924812,080000,CSD,Quinsam 12, -5924813,080000,CSD,Village Island 1, -5924835,080000,CSD,Tsa Xana 18, -5924804,080000,CSD,Campbell River 11, -5924034,080000,CSD,Campbell River, -5924048,080000,CSD,Strathcona A, -5924042,080000,CSD,Strathcona D (Oyster Bay - Buttle Lake), -5924840,080000,CSD,Homalco 9, -5924814,080000,CSD,Yuquot 1, -5924817,080000,CSD,Cape Mudge 10, -5924030,080000,CSD,Tahsis, -5924803,080000,CSD,Ahaminaquus 12, -5924054,080000,CSD,Strathcona C, -5924833,080000,CSD,Oclucje 7, -5924039,080000,CSD,Sayward, -5924836,080000,CSD,Ehatis 11, -5924029,080000,CSD,Zeballos, -5924818,080000,CSD,Squirrel Cove 8, -5924820,080000,CSD,Tork 7, -5926,080000,CD,Comox Valley, -5926022,080000,CSD,Comox Valley B (Lazo North), -5926801,080000,CSD,Comox 1, -5926014,080000,CSD,Cumberland, -5926021,080000,CSD,Comox Valley A, -5926024,080000,CSD,Comox Valley C (Puntledge - Black Creek), -5926010,080000,CSD,Courtenay, -5926802,080000,CSD,Pentledge 2, -5926005,080000,CSD,Comox, -5927,080000,CD,Powell River, -5927018,080000,CSD,Powell River D, -5927806,080000,CSD,Sechelt (Part), -5927012,080000,CSD,Powell River B, -5927020,080000,CSD,Powell River E, -5927008,080000,CSD,Powell River, -5927016,080000,CSD,Powell River C, -5927802,080000,CSD,Sliammon 1, -5927010,080000,CSD,Powell River A, -5929,082300,CD,Sunshine Coast, -5929005,080000,CSD,Gibsons, -5929801,080000,CSD,Chekwelp 26, -5929011,080000,CSD,Sechelt, -5929803,080000,CSD,Sechelt (Part), -5929018,082300,CSD,Sunshine Coast A, -5929028,082300,CSD,Sunshine Coast F, -5929026,082300,CSD,Sunshine Coast E, -5929022,082300,CSD,Sunshine Coast B, -5929024,082300,CSD,Sunshine Coast D, -5931,080000,CD,Squamish-Lillooet, -5931826,080000,CSD,Necait 6, -5931026,080000,CSD,Lillooet, -5931823,080000,CSD,McCartney's Flat 4, -5931832,080000,CSD,Towinock 2, -5931806,080000,CSD,Seaichem 16, -5931807,080000,CSD,Stawamus 24, -5931816,080000,CSD,Fountain 1, -5931840,080000,CSD,Nequatque 2, -5931034,080000,CSD,Squamish-Lillooet B, -5931837,080000,CSD,Mount Currie 8, -5931813,080000,CSD,Bridge River 1, -5931817,080000,CSD,Fountain 3, -5931809,080000,CSD,Yekwaupsum 18, -5931842,080000,CSD,Fountain 1B, -5931811,080000,CSD,Mount Currie 2, -5931021,080000,CSD,Squamish-Lillooet D, -5931829,080000,CSD,Pavilion 1, -5931818,080000,CSD,Fountain 10, -5931827,080000,CSD,Nesikep 6, -5931801,080000,CSD,Cheakamus 11, -5931006,080000,CSD,Squamish, -5931824,080000,CSD,Seton Lake 5, -5931032,080000,CSD,Squamish-Lillooet A, -5931821,080000,CSD,Lillooet 1, -5931810,080000,CSD,Nequatque 3A, -5931822,080000,CSD,Fountain Creek 8, -5931804,080000,CSD,Mount Currie 10, -5931017,080000,CSD,Squamish-Lillooet C, -5931805,080000,CSD,Nequatque 1, -5931820,080000,CSD,Fountain 12, -5931812,080000,CSD,Nesuch 3, -5931020,082400,CSD,Whistler, -5931808,080000,CSD,Waiwakum 14, -5931802,080000,CSD,Kowtain 17, -5931819,080000,CSD,Fountain 11, -5931815,080000,CSD,Chilhil 6, -5931838,080000,CSD,Mount Currie 6, -5931012,080000,CSD,Pemberton, -5931803,080000,CSD,Mount Currie 1, -5931831,080000,CSD,Slosh 1, -5931833,080000,CSD,Mission 5, -5931814,080000,CSD,Cayoosh Creek 1, -5931828,080000,CSD,Pashilqua 2, -5933,083200-085100-083300,CD,Thompson-Nicola, -5933836,080000,CSD,Lower Hat Creek 2, -5933042,080000,CSD,Kamloops, -5933822,080000,CSD,Chuchhriaschin 5A, -5933894,080000,CSD,Inkluckcheen 21B, -5933879,080000,CSD,Zacht 5, -5933817,080000,CSD,Skeetchestn, -5933068,083200-085100-083300,CSD,Thompson-Nicola A (Wells Gray Country), -5933819,080000,CSD,High Bar 1, -5933845,080000,CSD,105 Mile Post 2, -5933037,083200-085100-083300,CSD,Thompson-Nicola I (Blue Sky Country), -5933880,080000,CSD,Kamloops 1, -5933842,080000,CSD,Lytton 9B, -5933852,080000,CSD,Nohomeen 23, -5933896,080000,CSD,Nekliptum 1, -5933897,080000,CSD,Boothroyd 8A (Part), -5933805,080000,CSD,Joeyaska 2, -5933809,080000,CSD,Paul's Basin 2, -5933015,080000,CSD,Lytton, -5933865,080000,CSD,Skuppah 4, -5933814,080000,CSD,Canoe Creek 1, -5933821,080000,CSD,Canoe Creek 2, -5933887,083200-085100-083300,CSD,North Thompson 1, -5933812,080000,CSD,Bonaparte 3, -5933876,080000,CSD,Upper Nepa 6, -5933840,080000,CSD,Lytton 4E, -5933861,080000,CSD,Kloklowuck 7, -5933060,083200-085100-083300,CSD,Thompson-Nicola L, -5933883,080000,CSD,Neskonlith 1 (Neskainlith 1), -5933864,080000,CSD,Siska Flat 8, -5933802,080000,CSD,Douglas Lake 3, -5933072,083200-085100-083300,CSD,Thompson-Nicola O (Lower North Thompson), -5933860,080000,CSD,Siska Flat 3, -5933878,080000,CSD,Yawaucht 11, -5933070,083200-085100-083300,CSD,Thompson-Nicola B (Thompson Headwaters), -5933889,080000,CSD,Squaam 2, -5933054,080000,CSD,Chase, -5933870,080000,CSD,Nkaih 10, -5933895,080000,CSD,Shawniken 4B, -5933820,080000,CSD,Inkluckcheen 21, -5933853,080000,CSD,Nuuautin 2, -5933855,080000,CSD,Papyum 27, -5933006,080000,CSD,Merritt, -5933806,080000,CSD,Nicola Lake 1, -5933801,080000,CSD,Coldwater 1, -5933867,080000,CSD,Spences Bridge 4, -5933829,080000,CSD,Klahkamich 17, -5933872,080000,CSD,Marble Canyon 3, -5933886,080000,CSD,Nekalliston 2, -5933858,080000,CSD,Seah 5, -5933848,080000,CSD,Nickel Palm 4, -5933839,080000,CSD,Lytton 4A, -5933874,080000,CSD,Tsaukan 12, -5933868,080000,CSD,Spintlum Flat 3, -5933826,080000,CSD,Kanaka Bar 1A, -5933808,080000,CSD,Nooaitch 10, -5933008,083200-085100-083300,CSD,Thompson-Nicola M, -5933039,083200-085100-083300,CSD,Thompson-Nicola J (Copper Desert Country), -5933024,080000,CSD,Cache Creek, -5933844,080000,CSD,Ashcroft 4, -5933877,080000,CSD,Whispering Pines 4, -5933828,080000,CSD,Basque 18, -5933837,080000,CSD,Peq-Paq 22, -5933834,080000,CSD,Kumcheen 1, -5933841,080000,CSD,Lytton 9A, -5933873,080000,CSD,Stryen 9, -5933815,080000,CSD,Halhalaeden 14A, -5933832,080000,CSD,Klickkumcheen 18, -5933850,080000,CSD,Nickeyeah 25, -5933824,080000,CSD,Skuppah 2A, -5933825,080000,CSD,Inklyuhkinatko 2, -5933827,080000,CSD,Kanaka Bar 2, -5933019,080000,CSD,Ashcroft, -5933032,083200-085100-083300,CSD,Thompson-Nicola E (Bonaparte Plateau), -5933067,080000,CSD,Clearwater, -5933028,080000,CSD,Clinton, -5933875,080000,CSD,Upper Hat Creek 1, -5933044,083200-085100-083300,CSD,Thompson-Nicola P (Rivers and the Peaks), -5933888,080000,CSD,Louis Creek 4, -5933854,080000,CSD,Paska Island 3, -5933857,080000,CSD,Pemynoos 9, -5933871,080000,CSD,Spences Bridge 4C, -5933818,080000,CSD,Halhalaeden 14, -5933884,080000,CSD,Sahhaltkum 4, -5933823,080000,CSD,Kitzowit 20, -5933803,080000,CSD,Hamilton Creek 2, -5933012,083200-085100-083300,CSD,Thompson-Nicola N, -5933811,080000,CSD,Zoht 4, -5933830,080000,CSD,Klahkowit 5, -5933035,080000,CSD,Logan Lake, -5933816,080000,CSD,Chuchhriaschin 5, -5933831,080000,CSD,Kleetlekut 22, -5933851,080000,CSD,Nicomen 1, -5933859,080000,CSD,Shackan 11, -5933885,080000,CSD,Neskonlith 2, -5933866,080000,CSD,Skwayaynope 26, -5933807,080000,CSD,Nicola Mameet 1, -5933846,080000,CSD,Oregon Jack Creek 5, -5933074,080000,CSD,Barriere, -5935,083520,CD,Central Okanagan, -5935016,080000,CSD,Lake Country, -5935802,080000,CSD,Tsinstikeptum 9, -5935010,083520,CSD,Kelowna, -5935803,080000,CSD,Tsinstikeptum 10, -5935029,083520,CSD,West Kelowna, -5935020,083520,CSD,Central Okanagan J, -5935018,080000,CSD,Peachland, -5935012,083520,CSD,Central Okanagan, -5935801,080000,CSD,Duck Lake 7, -5937,083510,CD,North Okanagan, -5937802,080000,CSD,Enderby 2, -5937805,080000,CSD,Harris 3, -5937014,083510,CSD,Vernon, -5937005,080000,CSD,Lumby, -5937801,083500,CSD,Okanagan (Part) 1, -5937024,080000,CSD,Spallumcheen, -5937017,083510,CSD,North Okanagan B, -5937033,080000,CSD,Enderby, -5937010,080000,CSD,Coldstream, -5937022,083510,CSD,North Okanagan D, -5937028,080000,CSD,Armstrong, -5937803,080000,CSD,Priest's Valley 6, -5937041,083510,CSD,North Okanagan F, -5937021,083510,CSD,North Okanagan C, -5937023,083510,CSD,North Okanagan E, -5939,083600-085200-085400-085500,CD,Columbia-Shuswap, -5939804,083500,CSD,Okanagan (Part) 1, -5939809,080000,CSD,Switsemalph 6, -5939019,080000,CSD,Revelstoke, -5939023,083600-085200-085400-085500,CSD,Columbia-Shuswap B, -5939807,080000,CSD,Scotch Creek 4, -5939801,080000,CSD,Chum Creek 2, -5939803,080000,CSD,North Bay 5, -5939007,080000,CSD,Golden, -5939044,083600-085200-085400-085500,CSD,Columbia-Shuswap F, -5939037,083600-085200-085400-085500,CSD,Columbia-Shuswap C, -5939032,080000,CSD,Salmon Arm, -5939808,080000,CSD,Switsemalph 3, -5939011,083600-085200-085400-085500,CSD,Columbia-Shuswap A, -5939802,080000,CSD,Hustalen 1, -5939805,080000,CSD,Quaaout 1, -5939806,080000,CSD,Salmon River 1, -5939810,080000,CSD,Switsemalph 7, -5939043,083600-085200-085400-085500,CSD,Columbia-Shuswap E, -5939039,083600-085200-085400-085500,CSD,Columbia-Shuswap D, -5939045,080000,CSD,Sicamous, -5941,086210-086220,CD,Cariboo, -5941835,080000,CSD,Coglistiko River 29, -5941881,080000,CSD,Baezaeko River 27, -5941871,080000,CSD,Fishtrap 19, -5941827,080000,CSD,Charley Boy's Meadow 3, -5941818,080000,CSD,Alexis Creek 16, -5941822,080000,CSD,Anahim's Meadow 2, -5941810,080000,CSD,Soda Creek 1, -5941831,080000,CSD,Tanakut 4, -5941872,080000,CSD,Swan Lake 3, -5941807,080000,CSD,Dog Creek 2, -5941864,080000,CSD,Sundayman's Meadow 3, -5941010,086210-086220,CSD,Cariboo D, -5941834,080000,CSD,Louis Squinas Ranch 14, -5941852,080000,CSD,Trout Lake Alec 16, -5941837,080000,CSD,Nazco 20, -5941821,080000,CSD,Anahim's Flat 1, -5941841,080000,CSD,Stone 1, -5941832,080000,CSD,Garden 2A, -5941808,080000,CSD,Lohbiee 3, -5941850,080000,CSD,Toosey 1, -5941868,080000,CSD,Sandy Harry 4, -5941803,080000,CSD,Canim Lake 4, -5941861,080000,CSD,Betty Creek 18, -5941801,080000,CSD,Alkali Lake 1, -5941858,080000,CSD,Cahoose 10, -5941854,080000,CSD,Ulkatcho 13, -5941846,080000,CSD,Toby's Meadow 4, -5941014,086210-086220,CSD,Cariboo F, -5941815,080000,CSD,Alexandria 1, -5941849,080000,CSD,Baptiste Meadow 2, -5941813,080000,CSD,Canim Lake 2, -5941005,080000,CSD,One Hundred Mile House, -5941880,080000,CSD,Ulkatcho 14A, -5941811,080000,CSD,Johny Sticks 2, -5941865,080000,CSD,Tatelkus Lake 28, -5941866,080000,CSD,Euchinico Creek 17, -5941856,080000,CSD,Alexis Creek 34, -5941019,086210-086220,CSD,Cariboo A, -5941820,080000,CSD,Alexis Creek 25, -5941819,080000,CSD,Alexis Creek 24, -5941009,086220,CSD,Williams Lake, -5941812,086220,CSD,Williams Lake 1, -5941874,080000,CSD,Little Springs 8, -5941855,080000,CSD,Windy Mouth 7, -5941806,080000,CSD,Dog Creek 1, -5941017,086210-086220,CSD,Cariboo L, -5941860,080000,CSD,Cahoose 12, -5941840,080000,CSD,Squinas 2, -5941026,086210-086220,CSD,Cariboo C, -5941870,080000,CSD,Alexandria 1A, -5941823,080000,CSD,Anahim's Meadow 2A, -5941876,080000,CSD,Lezbye 6, -5941804,080000,CSD,Canoe Creek 3, -5941802,080000,CSD,Canim Lake 1, -5941027,086210-086220,CSD,Cariboo I, -5941859,080000,CSD,Blackwater Meadow 11, -5941845,080000,CSD,Thomas Squinas Ranch 2A, -5941851,080000,CSD,Towdystan Lake 3, -5941843,080000,CSD,Seymour Meadows 19, -5941844,080000,CSD,Agats Meadow 8, -5941012,086210-086220,CSD,Cariboo E, -5941830,080000,CSD,Garden 2, -5941015,086210-086220,CSD,Cariboo G, -5941875,080000,CSD,Little Springs 18, -5941809,086210,CSD,Quesnel 1, -5941863,080000,CSD,Tzetzi Lake 11, -5941833,080000,CSD,Kluskus 1, -5941847,080000,CSD,Alexis Creek 6, -5941879,080000,CSD,Michel Gardens 36, -5941816,080000,CSD,Alexandria 3, -5941873,080000,CSD,Alkali Lake 4A, -5941039,086210-086220,CSD,Cariboo J, -5941862,080000,CSD,Salmon River Meadow 7, -5941021,086210-086220,CSD,Cariboo B, -5941013,086210,CSD,Quesnel, -5941041,086210-086220,CSD,Cariboo K, -5941817,080000,CSD,Alexis Creek 14, -5941838,080000,CSD,Puntzi Lake 2, -5941839,080000,CSD,Redstone Flat 1, -5941805,080000,CSD,Deep Creek 2, -5941829,080000,CSD,Chilco Lake 1A, -5941016,086210-086220,CSD,Cariboo H, -5941025,080000,CSD,Wells, -5941814,080000,CSD,Alexandria 3A, -5941828,080000,CSD,Chilco Lake 1, -5941842,080000,CSD,Alexis Creek 17, -5941848,080000,CSD,Alexis Creek 21, -5943,080000,CD,Mount Waddington, -5943023,080000,CSD,Port Hardy, -5943017,080000,CSD,Port Alice, -5943801,080000,CSD,Alert Bay 1, -5943008,080000,CSD,Alert Bay, -5943807,080000,CSD,Dead Point 5, -5943836,080000,CSD,Hope Island 1, -5943809,080000,CSD,Hopetown 10A, -5943802,080000,CSD,Alert Bay 1A, -5943817,080000,CSD,Thomas Point 5, -5943012,080000,CSD,Port McNeill, -5943033,080000,CSD,Mount Waddington D, -5943031,080000,CSD,Mount Waddington C, -5943808,080000,CSD,Gwayasdums 1, -5943806,080000,CSD,Tsulquate 4, -5943813,080000,CSD,Quaee 7, -5943037,080000,CSD,Mount Waddington A, -5943027,080000,CSD,Mount Waddington B, -5943804,080000,CSD,Fort Rupert 1, -5943815,080000,CSD,Kippase 2, -5943816,080000,CSD,Quatsino Subdivision 18, -5945,082100-082200,CD,Central Coast, -5945012,082100-082200,CSD,Central Coast D, -5945006,082100-082200,CSD,Central Coast A, -5945802,080000,CSD,Bella Coola 1, -5945801,080000,CSD,Bella Bella 1, -5945014,082100-082200,CSD,Central Coast E, -5945803,080000,CSD,Katit 1, -5945010,082100-082200,CSD,Central Coast C, -5947,080000,CD,Skeena-Queen Charlotte, -5947809,080000,CSD,Lax Kw'alaams 1, -5947810,080000,CSD,S1/2 Tsimpsean 2, -5947021,080000,CSD,Skeena-Queen Charlotte C, -5947030,080000,CSD,Port Clements, -5947027,080000,CSD,Skeena-Queen Charlotte D, -5947007,080000,CSD,Port Edward, -5947807,080000,CSD,Dolphin Island 1, -5947023,080000,CSD,Masset, -5947012,080000,CSD,Prince Rupert, -5947026,080000,CSD,Queen Charlotte, -5947032,080000,CSD,Skeena-Queen Charlotte E, -5947806,080000,CSD,Kulkayu (Hartley Bay) 4, -5947016,080000,CSD,Skeena-Queen Charlotte A, -5947803,080000,CSD,Masset 1, -5947804,080000,CSD,Skidegate 1, -5949,080000,CD,Kitimat-Stikine, -5949845,089300,CSD,Dease Lake 9, -5949840,080000,CSD,Laxgalts'ap, -5949024,080000,CSD,New Hazelton, -5949804,080000,CSD,Kitsumkaylum 1, -5949020,080000,CSD,Kitimat-Stikine C (Part 2), -5949830,080000,CSD,Kluachon Lake 1, -5949032,080000,CSD,Stewart, -5949844,080000,CSD,Kitselas 1, -5949842,080000,CSD,Gingolx, -5949838,080000,CSD,Gitwinksihlkw, -5949811,080000,CSD,Hagwilget 1, -5949807,080000,CSD,Kulspai 6, -5949826,080000,CSD,Telegraph Creek 6, -5949846,080000,CSD,Tahltan 1, -5949013,080000,CSD,Kitimat-Stikine C (Part 1), -5949812,080000,CSD,Gitanmaax 1, -5949028,080000,CSD,Kitimat-Stikine B, -5949041,080000,CSD,Kitimat-Stikine D, -5949832,080000,CSD,Iskut 6, -5949022,080000,CSD,Hazelton, -5949817,080000,CSD,Moricetown 1, -5949816,080000,CSD,Gitwangak 1, -5949802,080000,CSD,Kitasoo 1, -5949843,080000,CSD,Guhthe Tah 12, -5949815,080000,CSD,Gitanyow 1, -5949820,087110-087120,CSD,Bulkley River 19, -5949805,080000,CSD,Kshish 4, -5949039,080000,CSD,Kitimat-Stikine A, -5949035,080000,CSD,Nisga'a, -5949818,080000,CSD,Sik-e-dakh 2, -5949810,080000,CSD,Coryatsaqua (Moricetown) 2, -5949005,080000,CSD,Kitimat, -5949018,080000,CSD,Kitimat-Stikine E, -5949011,080000,CSD,Terrace, -5949803,080000,CSD,Kitamaat 2, -5949038,080000,CSD,Kitimat-Stikine F, -5949827,080000,CSD,Telegraph Creek 6A, -5949836,080000,CSD,Aiyansh (Kitladamas) 1, -5949834,080000,CSD,New Aiyansh, -5949814,080000,CSD,Gitsegukla 1, -5949819,080000,CSD,Babine 17, -5949813,080000,CSD,Kispiox 1, -5951,087110-087120,CD,Bulkley-Nechako, -5951053,087110-087120,CSD,Bulkley-Nechako G, -5951051,087110-087120,CSD,Bulkley-Nechako A, -5951845,080000,CSD,Tadinlay 15, -5951034,080000,CSD,Houston, -5951805,080000,CSD,Binche 2 (Pinchie 2), -5951013,080000,CSD,Fort St. James, -5951009,080000,CSD,Fraser Lake, -5951032,080000,CSD,Granisle, -5951043,087110,CSD,Smithers, -5951801,080000,CSD,Ye Koo Che 3, -5951815,087120,CSD,Burns Lake 18, -5951818,080000,CSD,Cheslatta 1, -5951804,080000,CSD,Sowchea 3, -5951007,080000,CSD,Vanderhoof, -5951015,087110-087120,CSD,Bulkley-Nechako C, -5951830,080000,CSD,Jean Baptiste 28, -5951031,087110-087120,CSD,Bulkley-Nechako E, -5951812,080000,CSD,North Tacla Lake 7, -5951846,080000,CSD,Nedoats 11, -5951814,080000,CSD,Dzitline Lee 9, -5951824,080000,CSD,Skins Lake 16B, -5951019,087110-087120,CSD,Bulkley-Nechako F, -5951822,080000,CSD,Francois Lake 7, -5951823,080000,CSD,Skins Lake 16A, -5951819,080000,CSD,Omineca 1, -5951840,080000,CSD,Williams Prairie Meadow 1A, -5951833,080000,CSD,Tatla't East 2, -5951803,080000,CSD,Nak'azdli (Necoslie 1), -5951841,080000,CSD,North Tacla Lake 7A, -5951811,080000,CSD,Tacla Lake (Ferry Landing) 9, -5951821,080000,CSD,Duncan Lake 2, -5951847,080000,CSD,Babine Lake 21B, -5951810,080000,CSD,Tache 1, -5951825,080000,CSD,Tatla West 11, -5951022,087120,CSD,Burns Lake, -5951826,080000,CSD,Uncha Lake 13A, -5951813,080000,CSD,Laketown 3, -5951038,080000,CSD,Telkwa, -5951844,080000,CSD,Poison Creek 17A, -5951809,080000,CSD,Stony Creek 1, -5951828,080000,CSD,Babine 6, -5951820,080000,CSD,Palling 1, -5951827,080000,CSD,Woyenne 27, -5951829,080000,CSD,Babine 25, -5951028,087110-087120,CSD,Bulkley-Nechako B, -5951017,087110-087120,CSD,Bulkley-Nechako D, -5951806,080000,CSD,Seaspunkut 4, -5951802,080000,CSD,Nautley (Fort Fraser) 1, -5951807,080000,CSD,Stellaquo (Stella) 1, -5953,080000,CD,Fraser-Fort George, -5953044,080000,CSD,Fraser-Fort George D, -5953019,080000,CSD,Fraser-Fort George H, -5953042,080000,CSD,Fraser-Fort George C, -5953007,080000,CSD,Valemount, -5953023,087400,CSD,Prince George, -5953012,080000,CSD,McBride, -5953050,080000,CSD,Fraser-Fort George G, -5953033,080000,CSD,Mackenzie, -5953048,080000,CSD,Fraser-Fort George F, -5953801,080000,CSD,Fort George (Shelley) 2, -5953046,080000,CSD,Fraser-Fort George E, -5953038,080000,CSD,Fraser-Fort George A, -5953802,080000,CSD,McLeod Lake 1, -5955,087310-087320,CD,Peace River, -5955034,080000,CSD,Fort St. John, -5955812,080000,CSD,Ingenika Point, -5955005,080000,CSD,Pouce Coupe, -5955040,087310-087320,CSD,Peace River B, -5955807,080000,CSD,Fort Ware 1, -5955808,080000,CSD,Halfway River 168, -5955010,080000,CSD,Chetwynd, -5955014,080000,CSD,Dawson Creek, -5955042,087310-087320,CSD,Peace River C, -5955802,080000,CSD,West Moberly Lake 168A, -5955803,080000,CSD,Blueberry River 205, -5955804,080000,CSD,Doig River 206, -5955003,080000,CSD,Tumbler Ridge, -5955023,087310-087320,CSD,Peace River E, -5955025,080000,CSD,Hudson's Hope, -5955021,087310-087320,CSD,Peace River D, -5955801,080000,CSD,East Moberly Lake 169, -5955030,080000,CSD,Taylor, -5957,080000,CD,Stikine, -5957814,080000,CSD,Liard River 3, -5957022,080000,CSD,Stikine Region, -5957802,080000,CSD,Unnamed 10, -5957813,080000,CSD,Lower Post, -5957804,080000,CSD,Good Hope Lake, -5957803,080000,CSD,Five Mile Point 3, -5959,080000,CD,Northern Rockies, -5959810,080000,CSD,Prophet River 4, -5959805,080000,CSD,Fontas 1, -5959806,088100,CSD,Fort Nelson 2, -5959809,080000,CSD,Kahntah 3, -5959007,080000,CSD,Northern Rockies, -48,070000,PT,Alberta, -4801,074200,CD,Division No. 1, -4801018,074242,CSD,Redcliff, -4801009,074310,CSD,Foremost, -4801003,074211-074212-074241-074242-074251-074252-074253-074261-074262-074340-074360,CSD,Cypress County, -4801008,073350-074280-074310-074320-074330-074350,CSD,Forty Mile County No. 8, -4801006,074270,CSD,Medicine Hat, -4801014,074280,CSD,Bow Island, -4802,073300,CD,Division No. 2, -4802032,074232,CSD,Tilley, -4802011,073311-073312-073313,CSD,Lethbridge County, -4802008,070000,CSD,Raymond, -4802016,073311,CSD,Barons, -4802018,073312,CSD,Picture Butte, -4802006,073341,CSD,Warner, -4802002,073342,CSD,Coutts, -4802036,072653,CSD,Duchess, -4802034,072600,CSD,Brooks, -4802012,073314,CSD,Lethbridge, -4802014,073311,CSD,Nobleford, -4802013,073311,CSD,Coalhurst, -4802001,073331-073332-073341-073342-073343,CSD,Warner County No. 5, -4802029,073321,CSD,Vauxhall, -4802031,072651-072652-072653-072654-074231-074232,CSD,Newell County No. 4, -4802004,073342,CSD,Milk River, -4802038,072653,CSD,Rosemary, -4802023,073322,CSD,Barnwell, -4802022,073321-073322-073323,CSD,Taber, -4802039,072651,CSD,Bassano, -4802009,072240,CSD,Stirling, -4802019,073313,CSD,Coaldale, -4802021,073321-073322-073323,CSD,Taber, -4803,072500,CD,Division No. 3, -4803011,073150-073160,CSD,Pincher Creek No. 9, -4803003,073170,CSD,Improvement District No. 4 Waterton, -4803801,073130,CSD,Piikani 147, -4803022,072542,CSD,Claresholm, -4803004,073242,CSD,Cardston, -4803021,073211,CSD,Granum, -4803019,073212,CSD,Fort Macleod, -4803026,072541,CSD,Nanton, -4803803,073170-073221,CSD,Blood 148A, -4803024,072542,CSD,Stavely, -4803008,073222,CSD,Hill Spring, -4803002,073222,CSD,Magrath, -4803006,073222,CSD,Glenwood, -4803014,073160,CSD,Pincher Creek, -4803001,073222-073231-073232-073241-073242,CSD,Cardston County, -4803016,073120,CSD,Cowley, -4803802,073170-073221,CSD,Blood 148, -4803018,072541-072542-073211-073212,CSD,Willow Creek No. 26, -4804,074100,CD,Division No. 4, -4804014,074144,CSD,Oyen, -4804001,074160,CSD,Acadia No. 34, -4804006,074224,CSD,Empress, -4804016,074144,CSD,Cereal, -4804020,070000,CSD,Special Area No. 4, -4804021,074131,CSD,Veteran, -4804011,074122,CSD,Hanna, -4804022,074131,CSD,Consort, -4804012,070000,CSD,Special Area No. 3, -4804019,074141,CSD,Youngstown, -4804004,070000,CSD,Special Area No. 2, -4805,072600,CD,Division No. 5, -4805021,072632,CSD,Standard, -4805004,072643,CSD,Champion, -4805009,072645,CSD,Milo, -4805802,072633,CSD,Siksika 146, -4805042,072322,CSD,Carbon, -4805022,072341,CSD,Rockyford, -4805012,072341-072342-072631-072632-072634,CSD,Wheatland County, -4805044,072321,CSD,Acme, -4805026,072350,CSD,Drumheller, -4805001,072641-072642-072643-072644-072645,CSD,Vulcan County, -4805006,072642,CSD,Vulcan, -4805011,072641,CSD,Arrowwood, -4805002,072643,CSD,Carmangay, -4805008,072644,CSD,Lomond, -4805019,072634,CSD,Hussar, -4805018,072631,CSD,Strathmore, -4805046,072321,CSD,Linden, -4805048,072313,CSD,Three Hills, -4805036,072332,CSD,Munson, -4805049,070000,CSD,Trochu, -4805034,072333,CSD,Delia, -4805038,072332,CSD,Morrin, -4805041,072311-072312-072313-072321-072322,CSD,Kneehill County, -4805031,072331-072332-072333,CSD,Starland County, -4806,072400,CD,Division No. 6, -4806014,072250-072260-072270-072360-072510-072610,CSD,Rocky View County, -4806804,072510,CSD,Tsuu T'ina Nation 145 (Sarcee 145), -4806019,072270,CSD,Cochrane, -4806017,072610,CSD,Chestermere, -4806803,072523,CSD,Eden Valley 216, -4806006,072532,CSD,High River, -4806001,072521-072522-072523-072531-072532-072533-072620,CSD,Foothills No. 31, -4806011,072522,CSD,Black Diamond, -4806021,072250,CSD,Airdrie, -4806012,072531,CSD,Okotoks, -4806009,072522,CSD,Turner Valley, -4806022,072360,CSD,Irricana, -4806026,072250,CSD,Crossfield, -4806008,072523,CSD,Longview, -4806016,072400,CSD,Calgary, -4806024,072360,CSD,Beiseker, -4806031,072230,CSD,Cremona, -4806036,072210,CSD,Sundre, -4806034,072220,CSD,Olds, -4806029,072240,CSD,Carstairs, -4806032,072220,CSD,Didsbury, -4806028,072210-072220-072230-072240,CSD,Mountain View County, -4807,075200,CD,Division No. 7, -4807006,075281,CSD,Hughenden, -4807052,075273,CSD,Edgerton, -4807048,075242,CSD,Hardisty, -4807044,075241,CSD,Sedgewick, -4807038,076660,CSD,Heisler, -4807036,072160,CSD,Forestburg, -4807001,075281-075282-075283,CSD,Provost No. 52, -4807008,075281,CSD,Amisk, -4807046,075242,CSD,Lougheed, -4807034,072160,CSD,Galahad, -4807012,074113,CSD,Coronation, -4807026,072131-072132-072133-072134-072135,CSD,Stettler, -4807004,075282,CSD,Czar, -4807042,075241,CSD,Killam, -4807032,075243,CSD,Alliance, -4807029,072133,CSD,Donalda, -4807022,072134,CSD,Gadsby, -4807014,074111,CSD,Castor, -4807011,074111-074112-074113,CSD,Paintearth County No. 18, -4807021,072132,CSD,Big Valley, -4807051,075274,CSD,Chauvin, -4807039,076660,CSD,Daysland, -4807027,070000,CSD,White Sands, -4807041,076660,CSD,Strome, -4807054,075272,CSD,Wainwright, -4807002,075283,CSD,Provost, -4807016,072150,CSD,Halkirk, -4807028,072131,CSD,Rochon Sands, -4807024,072134,CSD,Botha, -4807031,072160-075241-075242-075243-076660,CSD,Flagstaff County, -4807019,072131-072132-072133-072134-072135,CSD,Stettler County No. 6, -4807056,075271,CSD,Irma, -4807049,075271-075272-075273-075274,CSD,Wainwright No. 61, -4808,072100,CD,Division No. 8, -4808042,072541,CSD,Parkland Beach, -4808012,072121,CSD,Sylvan Lake, -4808004,072125,CSD,Delburne, -4808032,072113,CSD,Clive, -4808013,070000,CSD,Norglenwold, -4808008,072100,CSD,Innisfail, -4808026,072112,CSD,Bentley, -4808023,070000,CSD,Birchcliff, -4808028,070000,CSD,Gull Lake, -4808029,072112,CSD,Blackfalds, -4808027,070000,CSD,Sunbreaker Cove, -4808024,072111,CSD,Eckville, -4808031,072111-072112-072113,CSD,Lacombe, -4808011,072140,CSD,Red Deer, -4808034,070000,CSD,Alix, -4808038,072180-076560-076570,CSD,Ponoka County, -4808813,070000,CSD,Montana 139, -4808001,072121-072122-072123-072124-072125,CSD,Red Deer County, -4808022,072111-072112-072113,CSD,Lacombe County, -4808812,070000,CSD,Samson 137A, -4808006,072123,CSD,Bowden, -4808811,070000,CSD,Samson 137, -4808039,072180,CSD,Ponoka, -4808025,070000,CSD,Half Moon Bay, -4808005,070000,CSD,Jarvis Bay, -4808002,072125,CSD,Elnora, -4808044,076560,CSD,Rimbey, -4808009,072123,CSD,Penhold, -4809,071300,CD,Division No. 9, -4809809,071330,CSD,Sunchild 202, -4809005,070000,CSD,Burnstick Lake, -4809010,071360,CSD,Caroline, -4809015,071350,CSD,Rocky Mountain House, -4809806,071330,CSD,O'Chiese 203, -4809810,071230,CSD,Big Horn 144A, -4809002,071220-071230-071240-071330-071350-071360-071410,CSD,Clearwater County, -4810,075200,CD,Division No. 10, -4810021,076642,CSD,Holden, -4810031,075221,CSD,Innisfree, -4810016,075230-076641-076642,CSD,Beaver County, -4810038,070000,CSD,Paradise Valley, -4810002,072170,CSD,Bashaw, -4810034,075222,CSD,Mannville, -4810003,076654,CSD,Rosalind, -4810018,076641,CSD,Tofield, -4810061,076333,CSD,Mundare, -4810011,072170-076652,CSD,Camrose, -4810059,076332,CSD,Andrew, -4810056,076350,CSD,Willingdon, -4810012,076652,CSD,Bittern Lake, -4810001,072170-076651-076652-076653-076654,CSD,Camrose County, -4810004,076653,CSD,Ferintosh, -4810051,075212,CSD,Myrnam, -4810041,075255,CSD,Kitscoty, -4810046,075253,CSD,Dewberry, -4810028,076380,CSD,Vegreville, -4810039,075260,CSD,Lloydminster (Part), -4810019,076642,CSD,Ryley, -4810032,075222,CSD,Minburn, -4810036,075251-075252-075253-075254-075255-075256,CSD,Vermilion River County, -4810042,075251,CSD,Vermilion, -4810062,076333,CSD,Chipman, -4810044,075255,CSD,Marwayne, -4810058,076331-076332-076333,CSD,Lamont County, -4810006,076653,CSD,Edberg, -4810008,076653,CSD,New Norway, -4810048,075211-075212-076350,CSD,Two Hills County No. 21, -4810066,076331,CSD,Bruderheim, -4810805,070000,CSD,Makaoo (Part) 120, -4810052,075211,CSD,Two Hills, -4810026,075221-075222-076380,CSD,Minburn County No. 27, -4810022,075230,CSD,Viking, -4810014,076651,CSD,Hay Lakes, -4810064,076331,CSD,Lamont, -4810068,076370,CSD,Improvement District No. 13 Elk Island, -4810009,076654,CSD,Bawlf, -4811,076400,CD,Division No. 11, -4811052,076400,CSD,Sherwood Park, -4811023,070000,CSD,Golden Days, -4811042,070000,CSD,Lakeview, -4811056,076360,CSD,Fort Saskatchewan, -4811002,076620,CSD,Wetaskiwin, -4811059,076241-076242-076243-076321-076322,CSD,Sturgeon County, -4811024,076510,CSD,Warburg, -4811803,070000,CSD,Louis Bull 138B, -4811805,070000,CSD,Alexander 134, -4811048,076233,CSD,Stony Plain, -4811011,076620,CSD,Millet, -4811804,076233,CSD,Stony Plain 135, -4811013,076611,CSD,Beaumont, -4811032,071310-071340-076530,CSD,Brazeau County, -4811065,076321,CSD,Redwater, -4811018,076520,CSD,Devon, -4811068,076243,CSD,Morinville, -4811066,076321,CSD,Bon Accord, -4811016,076611,CSD,Leduc, -4811034,072541-076231-076232-076233,CSD,Parkland County, -4811039,070000,CSD,Betula Beach, -4811031,076530,CSD,Drayton Valley, -4811806,076232,CSD,Wabamun 133A, -4811026,076530,CSD,Breton, -4811003,070000,CSD,Argentia Beach, -4811007,070000,CSD,Norris Beach, -4811001,076540-076550-076620,CSD,Wetaskiwin County No. 10, -4811006,070000,CSD,Crystal Springs, -4811064,076321,CSD,Gibbons, -4811009,070000,CSD,Silver Beach, -4811061,076400,CSD,Edmonton, -4811008,070000,CSD,Ma-Me-O Beach, -4811022,070000,CSD,Itaska Beach, -4811045,076232,CSD,Wabamun, -4811044,070000,CSD,Kapasiwin, -4811019,076520,CSD,Calmar, -4811801,070000,CSD,Ermineskin 138, -4811046,070000,CSD,Spring Lake, -4811004,070000,CSD,Grandview, -4811052,076360-076630,CSD,Strathcona County, -4811038,070000,CSD,Seba Beach, -4811041,070000,CSD,Point Alison, -4811062,076400,CSD,St. Albert, -4811020,070000,CSD,Sundance Beach, -4811005,070000,CSD,Poplar Bay, -4811802,076510-076540,CSD,Pigeon Lake 138A, -4811021,076510,CSD,Thorsby, -4811069,076242,CSD,Legal, -4811012,076510-076520-076611-076612,CSD,Leduc County, -4811049,076233,CSD,Spruce Grove, -4811807,076232,CSD,Wabamun 133B, -4812,075100,CD,Division No. 12, -4812020,070000,CSD,Horseshoe Bay, -4812806,070000,CSD,Saddle Lake 125, -4812016,075133,CSD,Elk Point, -4812815,075116-075144,CSD,Cold Lake 149B, -4812004,075141-075142-075143-075144-075145-075146,CSD,Bonnyville No. 87, -4812024,075122,CSD,Vilna, -4812009,075143,CSD,Bonnyville, -4812012,075142,CSD,Glendon, -4812810,075116-075144,CSD,Cold Lake 149, -4812811,075143,CSD,Kehewin 123, -4812813,075116-075144,CSD,Cold Lake 149A, -4812011,075141-075142-075143-075144-075145-075146,CSD,Bonnyville Beach, -4812840,075112,CSD,Heart Lake 167, -4812026,076340,CSD,Waskatenau, -4812018,075132,CSD,St. Paul, -4812014,075131-075132-075133-075134,CSD,St. Paul County No. 19, -4812804,070000,CSD,Puskiakiwenin 122, -4812029,076340,CSD,Smoky Lake, -4812037,075111-075112-075113-075114-075115-075116-079241,CSD,Lac la Biche County, -4812037,070000,CSD,Improvement District No. 349, -4812828,070000,CSD,Beaver Lake 131, -4812802,070000,CSD,Unipouheos 121, -4812808,070000,CSD,White Fish Lake 128, -4812022,075121-075122-076340,CSD,Smoky Lake County, -4812002,075116-075144,CSD,Cold Lake, -4812013,070000,CSD,Pelican Narrows, -4812022,075121,CSD,Buffalo Lake Metis Settlement, -4812022,075121,CSD,Kikino Metis Settlement, -4812004,070000,CSD,Elizabeth Metis Settlement, -4812004,075146,CSD,Fishing Lake Metis Settlement, -4813,077400,CD,Division No. 13, -4813047,070000,CSD,Sunset Beach, -4813005,070000,CSD,Val Quentin, -4813036,076160-076310,CSD,Thorhild County No. 7, -4813019,076123,CSD,Barrhead, -4813002,076221,CSD,Mayerthorpe, -4813030,077434,CSD,Whitecourt, -4813044,076151-076152-076153-076154-077340,CSD,Athabasca County, -4813008,070000,CSD,Ross Haven, -4813031,076142,CSD,Westlock, -4813051,070000,CSD,Island Lake South, -4813028,076141-076142,CSD,Westlock County, -4813009,070000,CSD,Castle Island, -4813015,070000,CSD,South View, -4813016,070000,CSD,Sandy Beach, -4813013,070000,CSD,Birch Cove, -4813014,076223,CSD,Onoway, -4813006,070000,CSD,West Cove, -4813029,076110-077431-077432-077433-077434,CSD,Woodlands County, -4813055,070000,CSD,South Baptiste, -4813011,070000,CSD,Sunset Point, -4813046,076154,CSD,Boyle, -4813018,076121-076122-076123,CSD,Barrhead County No. 11, -4813061,070000,CSD,Whispering Hills, -4813811,070000,CSD,Alexis 133, -4813001,076221-076222-076223,CSD,Lac Ste. Anne County, -4813045,070000,CSD,Mewatha Beach, -4813003,070000,CSD,Nakamun Park, -4813048,076151,CSD,Athabasca, -4813032,076142,CSD,Clyde, -4813033,070000,CSD,Larkspur, -4813017,070000,CSD,Sunrise Beach, -4813057,070000,CSD,West Baptiste, -4813012,070000,CSD,Alberta Beach, -4813010,070000,CSD,Silver Sands, -4813049,076151,CSD,Island Lake, -4813007,070000,CSD,Yellowstone, -4813053,070000,CSD,Bondiss, -4814,077200,CD,Division No. 14, -4814028,077250,CSD,Improvement District No. 25 Willmore Wilderness, -4814024,077421,CSD,Edson, -4814003,071210-071320-076210-077230-077240-077260-077421-077422,CSD,Yellowhead County, -4814019,077260,CSD,Hinton, -4815,071500,CD,Division No. 15, -4815027,071520,CSD,Ghost Lake, -4815007,073140,CSD,Crowsnest Pass, -4815045,073110,CSD,Ranchland No. 66, -4815035,071400-071420-071430-071440,CSD,Banff, -4815802,070000,CSD,"Stoney 142, 143, 144", -4815013,071530-071540,CSD,Kananaskis, -4815023,071520,CSD,Canmore, -4815030,070000,CSD,Waiparous, -4815033,071100,CSD,Jasper, -4815037,071100,CSD,Improvement District No. 12 Jasper Park, -4815032,071400-071420-071430-071440,CSD,Improvement District No. 9 Banff, -4815015,071510-071520,CSD,Bighorn No. 8, -4816,079200,CD,Division No. 16, -4816037,079221,CSD,Fort McMurray, -4816856,079210,CSD,Fort Mackay, -4816857,079121,CSD,Namur River 174A, -4816821,070000,CSD,Gregoire Lake 176, -4816831,079133,CSD,Chipewyan 201A, -4816051,079121-079122-079123-079131-079132-079133-079210-079221-079222-079223-079231-079232-079242-079243,CSD,Improvement District No. 24 Wood Buffalo, -4816849,070000,CSD,Old Fort 217, -4816037,079111-079112-079113-079114,CSD,Wood Buffalo, -4816817,079243,CSD,Janvier 194, -4816822,070000,CSD,Gregoire Lake 176A, -4816860,070000,CSD,Thebathi 196, -4816858,079121,CSD,Namur Lake 174B, -4816856,070000,CSD,Fort McKay 174, -4816850,070000,CSD,Allison Bay 219, -4816855,070000,CSD,Charles Lake 225, -4816852,070000,CSD,Dog Head 218, -4816861,070000,CSD,Thabacha Náre 196A, -4817,077300,CD,Division No. 17, -4817027,076243-077311-077312-077313-077440-078280-078320,CSD,Big Lakes, -4817031,077330-078331-078332-078333-078334,CSD,Opportunity No. 17, -4817833,070000,CSD,Sawridge 150H, -4817856,070000,CSD,Woodland Cree 226, -4817860,078332,CSD,Loon Lake 235, -4817039,078262,CSD,Nampa, -4817838,070000,CSD,Tall Cree 173, -4817033,076130-077321-077322-077323,CSD,Lesser Slave River No.124, -4817855,078333,CSD,Desmarais, -4817817,070000,CSD,Jean Baptiste Gambler 183, -4817848,078116,CSD,Bushe River 207, -4817830,070000,CSD,Kapawe'no First Nation (Pakashan 150D), -4817078,078241,CSD,Manning, -4817858,070000,CSD,Kapawe'no First Nation (Grouard 230), -4817841,070000,CSD,Beaver Ranch 163, -4817076,078241-078242,CSD,Northern Lights County, -4817821,078333,CSD,Wabasca 166B, -4817842,070000,CSD,Boyer 164, -4817840,070000,CSD,Tall Cree 173A, -4817062,078211-078212-078213,CSD,Clear Hills, -4817093,078116,CSD,High Level, -4817029,077321,CSD,Slave Lake, -4817823,078333,CSD,Wabasca 166D, -4817843,070000,CSD,Child Lake 164A, -4817824,078313,CSD,Utikoomak Lake 155, -4817835,078133,CSD,Fox Lake 162, -4817828,077313,CSD,Drift Pile River 150, -4817837,078133,CSD,John d'Or Prairie 215, -4817857,070000,CSD,Woodland Cree 228, -4817097,078112,CSD,Rainbow Lake, -4817064,078213,CSD,Hines Creek, -4817832,070000,CSD,Sawridge 150G, -4817849,070000,CSD,Upper Hay River 212, -4817845,070000,CSD,Hay Lake 209, -4817021,078280,CSD,High Prairie, -4817026,078261-078262-078311-078312-078313,CSD,Northern Sunrise County, -4817829,070000,CSD,Sucker Creek 150A, -4817825,078211-078212-078213,CSD,Clear Hills 152C, -4817852,070000,CSD,Kapawe'no First Nation (Halcro 150C), -4817836,070000,CSD,Kapawe'no First Nation (Freeman 150B), -4817819,078333,CSD,Wabasca 166A, -4817853,070000,CSD,Little Buffalo, -4817024,077440,CSD,Swan Hills, -4817095,078111-078112-078113-078114-078115-078116-078131-078132-078133-078134-078135,CSD,Mackenzie County, -4817827,078313,CSD,Utikoomak Lake 155A, -4817831,077440,CSD,Swan River 150E, -4817818,078333,CSD,Wabasca 166, -4817822,078333,CSD,Wabasca 166C, -4817859,078132,CSD,Fort Vermilion 173B, -4817854,070000,CSD,Carcajou 187, -4817027,078320,CSD,Peavine Metis Settlement, -4817027,078320,CSD,Gift Lake Metis Settlement, -4817076,078120,CSD,Paddle Prairie Metis Settlement, -4817027,070000,CSD,East Prairie Metis Settlement, -4818,077200,CD,Division No. 18, -4818002,077410,CSD,Fox Creek, -4818015,077121-077122-077123-077124-077125-077126-077210-077220-077410,CSD,Greenview No. 16, -4818005,077210,CSD,Grande Cache, -4818818,077125,CSD,Sturgeon Lake 154A, -4818816,077125,CSD,Sturgeon Lake 154, -4818018,077126,CSD,Valleyview, -4819,077100,CD,Division No. 19, -4819826,070000,CSD,Duncan's 151A, -4819066,078232,CSD,Fairview No. 136, -4819038,078210-078220-078262,CSD,Peace River, -4819042,078270,CSD,McLennan, -4819044,070000,CSD,Donnelly, -4819071,078233,CSD,Peace No. 135, -4819058,078231,CSD,Spirit River, -4819068,078232,CSD,Fairview, -4819012,077113,CSD,Grande Prairie, -4819072,070000,CSD,Berwyn, -4819054,078231,CSD,Spirit River No. 133, -4819059,078221-078222-078223,CSD,Saddle Hills County, -4819046,078270,CSD,Falher, -4819008,077111,CSD,Hythe, -4819009,077111,CSD,Beaverlodge, -4819014,077112,CSD,Sexsmith, -4819048,070000,CSD,Girouxville, -4819011,077113,CSD,Wembley, -4819074,078233,CSD,Grimshaw, -4819815,070000,CSD,Horse Lakes 152B, -4819041,078270,CSD,Smoky River No. 130, -4819056,078231,CSD,Rycroft, -4819049,078251-078252,CSD,Birch Hills County, -4819006,077111-077112-077113,CSD,Grande Prairie County No. 1, -47,060000,PT,Saskatchewan, -4701,060000,CD,Division No. 1, -4701811,060000,CSD,Ocean Man 69B, -4701816,060000,CSD,Ocean Man 69I, -4701814,060000,CSD,Ocean Man 69F, -4701067,060000,CSD,Heward, -4701072,060000,CSD,Hazelwood No. 94, -4701808,060000,CSD,White Bear 70, -4701054,060000,CSD,Manor, -4701036,060000,CSD,Moose Creek No. 33, -4701006,060000,CSD,Mount Pleasant No. 2, -4701817,060000,CSD,Ocean Man 69H, -4701053,060000,CSD,Moose Mountain No. 63, -4701094,060000,CSD,Maryfield No. 91, -4701809,060000,CSD,Ocean Man 69, -4701058,060000,CSD,Brock No. 64, -4701044,060000,CSD,Storthoaks, -4701016,060000,CSD,Coalfields No. 4, -4701014,060000,CSD,Oxbow, -4701001,060000,CSD,Argyle No. 1, -4701018,060000,CSD,North Portal, -4701079,060000,CSD,Kenosee Lake, -4701078,060000,CSD,Wawota, -4701048,060000,CSD,Antler, -4701032,060000,CSD,Lampman, -4701037,060000,CSD,Alameda, -4701063,060000,CSD,Tecumseh No. 65, -4701091,060000,CSD,Walpole No. 92, -4701011,060000,CSD,Enniskillen No. 3, -4701818,060000,CSD,Ocean Man 69D, -4701819,060000,CSD,Pheasant Rump 68, -4701069,060000,CSD,Golden West No. 95, -4701098,060000,CSD,Fairlight, -4701043,060000,CSD,Storthoaks No. 31, -4701004,060000,CSD,Carievale, -4701076,060000,CSD,Wawken No. 93, -4701077,060000,CSD,Kennedy, -4701066,060000,CSD,Stoughton, -4701019,060000,CSD,Roche Percee, -4701041,060000,CSD,Alida, -4701810,060000,CSD,Ocean Man 69A, -4701815,060000,CSD,Ocean Man 69G, -4701096,060000,CSD,Maryfield, -4701047,060000,CSD,Antler No. 61, -4701049,060000,CSD,Redvers, -4701021,060000,CSD,Bienfait, -4701012,060000,CSD,Glen Ewen, -4701008,060000,CSD,Carnduff, -4701812,060000,CSD,Ocean Man 69C, -4701813,060000,CSD,Ocean Man 69E, -4701064,060000,CSD,Forget, -4701061,060000,CSD,Kisbey, -4701059,060000,CSD,Arcola, -4701056,060000,CSD,Carlyle, -4701027,060000,CSD,Benson No. 35, -4701031,060000,CSD,Browning No. 34, -4701039,060000,CSD,Reciprocity No. 32, -4701022,060000,CSD,Estevan No. 5, -4701024,060000,CSD,Estevan, -4701017,060000,CSD,Frobisher, -4701002,060000,CSD,Gainsborough, -4702,060000,CD,Division No. 2, -4702069,060000,CSD,Scott No. 98, -4702052,060000,CSD,Norton No. 69, -4702048,060000,CSD,McTaggart, -4702058,060000,CSD,Ogema, -4702026,060000,CSD,The Gap No. 39, -4702011,060000,CSD,Lake Alma No. 8, -4702016,060000,CSD,Minton, -4702078,060000,CSD,Fillmore, -4702051,060000,CSD,Brokenshell No. 68, -4702024,060000,CSD,Bengough No. 40, -4702028,060000,CSD,Ceylon, -4702038,060000,CSD,Halbrite, -4702039,060000,CSD,Midale, -4702800,060000,CSD,Piapot Cree First Nation 75H, -4702057,060000,CSD,Key West No. 70, -4702054,060000,CSD,Pangman, -4702031,060000,CSD,Radville, -4702036,060000,CSD,Goodwater, -4702041,060000,CSD,Macoun, -4702072,060000,CSD,Yellow Grass, -4702062,060000,CSD,Avonlea, -4702073,060000,CSD,Wellington No. 97, -4702042,060000,CSD,Griffin No. 66, -4702047,060000,CSD,Weyburn, -4702029,060000,CSD,Laurier No. 38, -4702012,060000,CSD,Lake Alma, -4702076,060000,CSD,Fillmore No. 96, -4702023,060000,CSD,Bengough, -4702018,060000,CSD,Happy Valley No. 10, -4702014,060000,CSD,Surprise Valley No. 9, -4702015,060000,CSD,Gladmar, -4702066,060000,CSD,Caledonia No. 99, -4702061,060000,CSD,Elmsthorpe No. 100, -4702071,060000,CSD,Lang, -4702067,060000,CSD,Milestone, -4702077,060000,CSD,Osage, -4702044,060000,CSD,Weyburn No. 67, -4702079,060000,CSD,Creelman, -4702033,060000,CSD,Lomond No. 37, -4702006,060000,CSD,Souris Valley No. 7, -4702001,060000,CSD,Cambria No. 6, -4702037,060000,CSD,Cymri No. 36, -4702008,060000,CSD,Tribune, -4702002,060000,CSD,Torquay, -4703,060000,CD,Division No. 3, -4703052,060000,CSD,Hazenmore, -4703011,060000,CSD,Old Post No. 43, -4703028,060000,CSD,Willow Bunch, -4703036,060000,CSD,Assiniboia, -4703009,060000,CSD,Rockglen, -4703064,060000,CSD,Glen Bain No. 105, -4703074,060000,CSD,Sutton No. 103, -4703048,060000,CSD,Pinto Creek No. 75, -4703026,060000,CSD,Willow Bunch No. 42, -4703068,060000,CSD,Gravelbourg No. 104, -4703061,060000,CSD,Neville, -4703092,060000,CSD,Mossbank, -4703042,060000,CSD,Wood River No. 74, -4703034,060000,CSD,Lake of the Rivers No. 72, -4703016,060000,CSD,Glen McPherson No. 46, -4703018,060000,CSD,Mankota No. 45, -4703019,060000,CSD,Mankota, -4703001,060000,CSD,Hart Butte No. 11, -4703059,060000,CSD,Whiska Creek No. 106, -4703071,060000,CSD,Gravelbourg, -4703029,060000,CSD,Excel No. 71, -4703006,060000,CSD,Poplar Valley No. 12, -4703004,060000,CSD,Coronach, -4703058,060000,CSD,Ponteix, -4703038,060000,CSD,Stonehenge No. 73, -4703051,060000,CSD,Kincaid, -4703044,060000,CSD,Lafleche, -4703801,060000,CSD,Wood Mountain 160, -4703062,060000,CSD,Vanguard, -4703093,060000,CSD,Lake Johnston No. 102, -4703054,060000,CSD,Auvergne No. 76, -4703096,060000,CSD,Terrell No. 101, -4703041,060000,CSD,Limerick, -4703022,060000,CSD,Waverley No. 44, -4703012,060000,CSD,Wood Mountain, -4704,060000,CD,Division No. 4, -4704048,060000,CSD,Maple Creek, -4704058,060000,CSD,Bone Creek No. 108, -4704003,060000,CSD,Val Marie No. 17, -4704050,060000,CSD,Piapot No. 110, -4704038,060000,CSD,Arlington No. 79, -4704028,060000,CSD,Wise Creek No. 77, -4704006,060000,CSD,Lone Tree No. 18, -4704026,060000,CSD,Eastend, -4704011,060000,CSD,Frontier No. 19, -4704061,060000,CSD,Lac Pelletier No. 107, -4704019,060000,CSD,Reno No. 51, -4704021,060000,CSD,Consul, -4704002,060000,CSD,Val Marie, -4704045,060000,CSD,Maple Creek No. 111, -4704056,060000,CSD,Carmichael, -4704024,060000,CSD,White Valley No. 49, -4704036,060000,CSD,Shaunavon, -4704012,060000,CSD,Frontier, -4704802,060000,CSD,Nekaneet Cree Nation, -4704034,060000,CSD,Grassy Creek No. 78, -4704054,060000,CSD,Carmichael No. 109, -4704008,060000,CSD,Bracken, -4704009,060000,CSD,Climax, -4704029,060000,CSD,Cadillac, -4705,060000,CD,Division No. 5, -4705093,060000,CSD,Churchbridge No. 211, -4705094,060000,CSD,Churchbridge, -4705803,060000,CSD,Cowessess 73, -4705052,060000,CSD,Esterhazy, -4705037,060000,CSD,Rocanville No. 151, -4705042,060000,CSD,Tantallon, -4705021,060000,CSD,Glenavon, -4705009,060000,CSD,Wapella, -4705804,060000,CSD,Kahkewistahaw 72, -4705808,060000,CSD,Little Bone 74B, -4705068,060000,CSD,Duff, -4705061,060000,CSD,Waldron, -4705044,060000,CSD,Gerald, -4705050,060000,CSD,West End, -4705806,060000,CSD,Ochapowace 71, -4705024,060000,CSD,Wolseley, -4705029,060000,CSD,Grenfell, -4705014,060000,CSD,Kingsley No. 124, -4705011,060000,CSD,Silverwood No. 123, -4705016,060000,CSD,Kipling, -4705825,060000,CSD,Ochapowace 71-51, -4705027,060000,CSD,Wolseley No. 155, -4705060,060000,CSD,Melville Beach, -4705033,060000,CSD,Willowdale No. 153, -4705031,060000,CSD,Broadview, -4705059,060000,CSD,Grayson, -4705028,060000,CSD,Elcapo No. 154, -4705814,060000,CSD,Ochapowace 71-10, -4705038,060000,CSD,Rocanville, -4705006,060000,CSD,Welwyn, -4705821,060000,CSD,Ochapowace 71-26, -4705822,060000,CSD,Ochapowace 71-70, -4705019,060000,CSD,Windthorst, -4705004,060000,CSD,Moosomin, -4705043,060000,CSD,Spy Hill, -4705077,060000,CSD,Saltcoats No. 213, -4705071,060000,CSD,Fenwood, -4705063,060000,CSD,McLeod No. 185, -4705823,060000,CSD,Ochapowace 71-7, -4705818,060000,CSD,Ochapowace 71-54, -4705066,060000,CSD,Lemberg, -4705067,060000,CSD,Stanley No. 215, -4705073,060000,CSD,Cana No. 214, -4705078,060000,CSD,Saltcoats, -4705079,060000,CSD,Bredenbury, -4705051,060000,CSD,Fertile Belt No. 183, -4705062,060000,CSD,Killaly, -4705826,060000,CSD,Ochapowace 71-44, -4705041,060000,CSD,Spy Hill No. 152, -4705002,060000,CSD,Fleming, -4705057,060000,CSD,Grayson No. 184, -4705054,060000,CSD,Bangor, -4705058,060000,CSD,Dubuc, -4705805,060000,CSD,Sakimay 74, -4705055,060000,CSD,Bird's Point, -4705069,060000,CSD,Goodeve, -4705096,060000,CSD,MacNutt, -4705047,060000,CSD,Langenburg No. 181, -4705824,060000,CSD,Ochapowace 71-18, -4705064,060000,CSD,Neudorf, -4705048,060000,CSD,Langenburg, -4705053,060000,CSD,Atwater, -4705807,060000,CSD,Shesheep 74A, -4705049,060000,CSD,Yarbo, -4705018,060000,CSD,Chester No. 125, -4705034,060000,CSD,Whitewood, -4705007,060000,CSD,Martin No. 122, -4705074,060000,CSD,Melville, -4705056,060000,CSD,Stockholm, -4705001,060000,CSD,Moosomin No. 121, -4706,060000,CD,Division No. 6, -4706070,060000,CSD,Longlaketon No. 219, -4706096,060000,CSD,Lipton No. 217, -4706828,060000,CSD,Star Blanket 83C, -4706042,060000,CSD,Abernethy No. 186, -4706820,060000,CSD,Wa-Pii Moos-Toosis (White Calf) 83A, -4706030,060000,CSD,White City, -4706014,060000,CSD,Wilcox, -4706060,060000,CSD,Wee Too Beach, -4706048,060000,CSD,North Qu'Appelle No. 187, -4706056,062313,CSD,Lumsden, -4706034,060000,CSD,South Qu'Appelle No. 157, -4706026,060000,CSD,Sherwood No. 159, -4706032,060000,CSD,Balgonie, -4706016,060000,CSD,Redburn No. 130, -4706007,060000,CSD,Vibank, -4706017,060000,CSD,Rouleau, -4706080,060000,CSD,Glen Harbour, -4706023,060000,CSD,Pense, -4706073,060000,CSD,Bulyea, -4706076,060000,CSD,Sunset Cove, -4706091,060000,CSD,Cupar No. 218, -4706065,060000,CSD,Alice Beach, -4706815,060000,CSD,Okanese 82, -4706811,060000,CSD,Standing Buffalo 78, -4706047,060000,CSD,Balcarres, -4706049,060000,CSD,Lebret, -4706004,060000,CSD,Francis No. 127, -4706039,060000,CSD,Indian Head, -4706067,060000,CSD,Holdfast, -4706021,060000,CSD,Pense No. 160, -4706027,062100,CSD,Regina, -4706003,060000,CSD,Kendal, -4706009,060000,CSD,Francis, -4706081,060000,CSD,North Grove, -4706054,060000,CSD,Disley, -4706074,060000,CSD,Strasbourg, -4706059,060000,CSD,Dufferin No. 190, -4706068,060000,CSD,Dilke, -4706055,060000,CSD,Buena Vista, -4706098,060000,CSD,Lipton, -4706057,060000,CSD,Lumsden Beach, -4706813,060000,CSD,Muscowpetung 80, -4706812,060000,CSD,Pasqua 79, -4706045,060000,CSD,Fort San, -4706022,060000,CSD,Belle Plaine, -4706031,060000,CSD,Pilot Butte, -4706013,060000,CSD,Bratt's Lake No. 129, -4706011,060000,CSD,Lajord No. 128, -4706001,060000,CSD,Montmartre No. 126, -4706810,060000,CSD,Assiniboine 76, -4706018,060000,CSD,Briercrest, -4706002,060000,CSD,Montmartre, -4706046,060000,CSD,Abernethy, -4706079,060000,CSD,Earl Grey, -4706063,060000,CSD,Sarnia No. 221, -4706085,060000,CSD,Island View, -4706099,060000,CSD,Tullymet No. 216, -4706093,060000,CSD,Markinch, -4706072,060000,CSD,Saskatchewan Beach, -4706809,060000,CSD,Piapot 75, -4706829,060000,CSD,Treaty Four Reserve Grounds 77, -4706033,060000,CSD,Edenwold, -4706036,060000,CSD,Qu'Appelle, -4706028,060000,CSD,Grand Coulee, -4706019,060000,CSD,Drinkwater, -4706041,060000,CSD,Sintaluta, -4706064,060000,CSD,Chamberlain, -4706094,060000,CSD,Cupar, -4706814,060000,CSD,Little Black Bear 84, -4706097,060000,CSD,Dysart, -4706053,062313,CSD,Lumsden No. 189, -4706077,060000,CSD,Silton, -4706058,062313,CSD,Regina Beach, -4706075,060000,CSD,Kannata Valley, -4706051,060000,CSD,Fort Qu'Appelle, -4706050,060000,CSD,Katepwa, -4706038,060000,CSD,Indian Head No. 156, -4706008,060000,CSD,Sedley, -4706029,060000,CSD,Edenwold No. 158, -4706082,060000,CSD,Pelican Pointe, -4706061,060000,CSD,Bethune, -4706071,060000,CSD,McKillop No. 220, -4706069,060000,CSD,Grandview Beach, -4706092,060000,CSD,Southey, -4706818,060000,CSD,Star Blanket 83, -4706078,062313,CSD,Craven, -4706052,060000,CSD,B-Say-Tah, -4706037,060000,CSD,McLean, -4706006,060000,CSD,Odessa, -4706816,060000,CSD,Peepeekisis 81, -4706062,060000,CSD,Findlater, -4707,060000,CD,Division No. 7, -4707093,060000,CSD,Aylesbury, -4707045,060000,CSD,Sun Valley, -4707028,060000,CSD,Ernfold, -4707016,060000,CSD,Hodgeville, -4707012,060000,CSD,Shamrock, -4707036,060000,CSD,Caron No. 162, -4707021,060000,CSD,Excelsior No. 166, -4707077,060000,CSD,Tugaske, -4707020,060000,CSD,Beaver Flat, -4707044,060000,CSD,Marquis, -4707043,060000,CSD,Tuxford, -4707014,060000,CSD,Lawtonia No. 135, -4707066,060000,CSD,King George No. 256, -4707091,060000,CSD,Craik No. 222, -4707031,060000,CSD,Chaplin, -4707034,060000,CSD,Mortlach, -4707037,060000,CSD,Caronport, -4707011,060000,CSD,Shamrock No. 134, -4707006,060000,CSD,Rodgers No. 133, -4707071,060000,CSD,Maple Bush No. 224, -4707076,060000,CSD,Huron No. 223, -4707053,060000,CSD,Enfield No. 194, -4707029,060000,CSD,Chaplin No. 164, -4707046,060000,CSD,Keeler, -4707026,060000,CSD,Herbert, -4707039,060000,CSD,Moose Jaw, -4707054,060000,CSD,Central Butte, -4707049,060000,CSD,Eyebrow, -4707022,060000,CSD,Waldeck, -4707027,060000,CSD,Morse, -4707008,060000,CSD,Coderre, -4707004,060000,CSD,Hillsborough No. 132, -4707068,060000,CSD,Coteau Beach, -4707063,060000,CSD,Victory No. 226, -4707059,060000,CSD,Lucky Lake, -4707074,060000,CSD,Mistusinne, -4707048,060000,CSD,Brownlee, -4707051,060000,CSD,South Lake, -4707038,060000,CSD,Moose Jaw No. 161, -4707058,060000,CSD,Canaan No. 225, -4707092,060000,CSD,Craik, -4707024,060000,CSD,Morse No. 165, -4707023,060000,CSD,Rush Lake, -4707018,060000,CSD,Coulee No. 136, -4707067,060000,CSD,Coteau No. 255, -4707062,060000,CSD,Beechy, -4707072,060000,CSD,Riverhurst, -4707047,060000,CSD,Eyebrow No. 193, -4707042,060000,CSD,Marquis No. 191, -4707032,060000,CSD,Wheatlands No. 163, -4707001,060000,CSD,Baildon No. 131, -4708,060000,CD,Division No. 8, -4708076,060000,CSD,Eston, -4708034,060000,CSD,Pennant, -4708042,060000,CSD,Lacadena No. 228, -4708071,060000,CSD,Newcombe No. 260, -4708068,060000,CSD,Eatonia, -4708046,060000,CSD,Miry Creek No. 229, -4708057,060000,CSD,Prelate, -4708059,060000,CSD,Mendham, -4708021,060000,CSD,Enterprise No. 142, -4708038,060000,CSD,Saskatchewan Landing No. 167, -4708008,060000,CSD,Webb, -4708053,060000,CSD,Clinworth No. 230, -4708058,060000,CSD,Leader, -4708054,060000,CSD,Sceptre, -4708039,060000,CSD,Stewart Valley, -4708018,060000,CSD,Golden Prairie, -4708006,060000,CSD,Webb No. 138, -4708032,060000,CSD,Cabri, -4708009,060000,CSD,Gull Lake No. 139, -4708001,060000,CSD,Swift Current No. 137, -4708065,060000,CSD,Chesterfield No. 261, -4708092,060000,CSD,Monet No. 257, -4708049,060000,CSD,Lancer, -4708028,060000,CSD,Pittville No. 169, -4708029,060000,CSD,Hazlet, -4708036,060000,CSD,Success, -4708004,060000,CSD,Swift Current, -4708094,060000,CSD,Elrose, -4708024,060000,CSD,Fox Valley No. 171, -4708047,060000,CSD,Shackleton, -4708061,060000,CSD,Deer Forks No. 232, -4708062,060000,CSD,Burstall, -4708012,060000,CSD,Tompkins, -4708031,060000,CSD,Riverside No. 168, -4708048,060000,CSD,Abbey, -4708044,060000,CSD,Kyle, -4708022,060000,CSD,Richmound, -4708026,060000,CSD,Fox Valley, -4708016,060000,CSD,Big Stick No. 141, -4708011,060000,CSD,Gull Lake, -4708074,060000,CSD,Snipe Lake No. 259, -4708056,060000,CSD,Happyland No. 231, -4709,060000,CD,Division No. 9, -4709062,060000,CSD,Preeceville No. 334, -4709065,060000,CSD,Endeavour, -4709056,060000,CSD,Rama, -4709076,060000,CSD,Arran, -4709029,060000,CSD,Good Lake No. 274, -4709039,060000,CSD,Kamsack, -4709824,060000,CSD,Keeseekoose 66-CA-04, -4709060,060000,CSD,Hazel Dell No. 335, -4709049,060000,CSD,Buchanan No. 304, -4709067,060000,CSD,Clayton No. 333, -4709023,060000,CSD,Insinger No. 275, -4709006,060000,CSD,Wallace No. 243, -4709032,060000,CSD,Canora, -4709071,060000,CSD,Hyas, -4709024,060000,CSD,Sheho, -4709012,060000,CSD,Yorkton, -4709002,060000,CSD,Calder, -4709075,060000,CSD,Livingston No. 331, -4709058,060000,CSD,Invermay, -4709072,060000,CSD,Norquay, -4709042,060000,CSD,St. Philips No. 301, -4709820,060000,CSD,Keeseekoose 66, -4709001,060000,CSD,Calder No. 241, -4709054,060000,CSD,Invermay No. 305, -4709066,060000,CSD,Sturgis, -4709028,060000,CSD,Theodore, -4709016,060000,CSD,Springside, -4709828,060000,CSD,Keeseekoose 66-CA-06, -4709011,060000,CSD,Orkney No. 244, -4709009,060000,CSD,Rhein, -4709061,060000,CSD,Lintlaw, -4709046,060000,CSD,Keys No. 303, -4709044,060000,CSD,Pelly, -4709819,060000,CSD,Cote 64, -4709019,060000,CSD,Garry No. 245, -4709038,060000,CSD,Togo, -4709826,060000,CSD,Keeseekoose 66-CA-05, -4709037,060000,CSD,Cote No. 271, -4709064,060000,CSD,Preeceville, -4709821,060000,CSD,The Key 65, -4709832,060000,CSD,Keeseekoose 66-KE-05, -4709822,060000,CSD,Keeseekoose 66A, -4709033,060000,CSD,Sliding Hills No. 273, -4709069,060000,CSD,Stenen, -4709830,060000,CSD,Keeseekoose 66-KE-04, -4709014,060000,CSD,Ebenezer, -4709053,060000,CSD,Buchanan, -4710,060000,CD,Division No. 10, -4710826,060000,CSD,Fishing Lake 89, -4710847,060000,CSD,Muskowekwan 85-10, -4710848,060000,CSD,Muskowekwan 85-1, -4710047,060000,CSD,Wynyard, -4710043,060000,CSD,Elfros, -4710031,060000,CSD,Emerald No. 277, -4710825,060000,CSD,Poorman 88, -4710008,060000,CSD,Kellross No. 247, -4710849,060000,CSD,Muskowekwan 85-8, -4710014,060000,CSD,Touchwood No. 248, -4710011,060000,CSD,Leross, -4710846,060000,CSD,Muskowekwan 85-27, -4710056,060000,CSD,Leroy No. 339, -4710054,060000,CSD,Jansen, -4710051,060000,CSD,Dafoe, -4710036,060000,CSD,Foam Lake No. 276, -4710828,060000,CSD,Beardy's and Okemasis 96 and 97A, -4710012,060000,CSD,Lestock, -4710842,060000,CSD,Muskowekwan 85-23, -4710035,060000,CSD,Leslie Beach, -4710824,060000,CSD,Day Star 87, -4710061,060000,CSD,Lakeside No. 338, -4710071,060000,CSD,Sasman No. 336, -4710854,060000,CSD,Fishing Lake 89A, -4710852,060000,CSD,Muskowekwan 85-31, -4710823,060000,CSD,Gordon 86, -4710845,060000,CSD,Muskowekwan 85-22, -4710844,060000,CSD,Muskowekwan 85-24, -4710836,060000,CSD,Muskowekwan 85-33, -4710003,060000,CSD,Ituna Bon Accord No. 246, -4710834,060000,CSD,Muskowekwan 85-26, -4710840,060000,CSD,Muskowekwan 85-29, -4710068,060000,CSD,Wadena, -4710027,060000,CSD,Raymore, -4710028,060000,CSD,Quinton, -4710850,060000,CSD,Muskowekwan 85-15, -4710066,060000,CSD,Lakeview No. 337, -4710072,060000,CSD,Margo, -4710024,060000,CSD,Mount Hope No. 279, -4710029,060000,CSD,Punnichy, -4710838,060000,CSD,Muskowekwan 85-28, -4710832,060000,CSD,Muskowekwan 85-17, -4710004,060000,CSD,Ituna, -4710052,060000,CSD,Prairie Rose No. 309, -4710062,060000,CSD,Watson, -4710058,060000,CSD,Leroy, -4710843,060000,CSD,Muskowekwan 85-12, -4710009,060000,CSD,Kelliher, -4710002,060000,CSD,Hubbard, -4710022,060000,CSD,Semans, -4710064,060000,CSD,Quill Lake, -4710041,060000,CSD,Elfros No. 307, -4710034,060000,CSD,Chorney Beach, -4710046,060000,CSD,Big Quill No. 308, -4710038,060000,CSD,Foam Lake, -4710822,060000,CSD,Muskowekwan 85, -4710851,060000,CSD,Muskowekwan 85-2A, -4711,060000,CD,Division No. 11, -4711061,065521,CSD,Dundurn No. 314, -4711039,060000,CSD,Wood Creek No. 281, -4711022,060000,CSD,Strongfield, -4711016,065542,CSD,Willner No. 253, -4711008,065543,CSD,Imperial, -4711014,065541,CSD,Davidson, -4711065,065432,CSD,Corman Park No. 344, -4711066,065100,CSD,Saskatoon, -4711069,065453,CSD,Blucher No. 343, -4711079,065451,CSD,Colonsay, -4711041,060000,CSD,Simpson, -4711021,065524,CSD,Loreburn, -4711067,065432,CSD,Langham, -4711068,065432,CSD,Warman, -4711076,065451,CSD,Colonsay No. 342, -4711074,065453,CSD,Elstow, -4711046,060000,CSD,Usborne No. 310, -4711027,060000,CSD,Outlook, -4711054,060000,CSD,Manitou Beach, -4711029,060000,CSD,Glenside, -4711003,060000,CSD,Last Mountain Valley No. 250, -4711009,060000,CSD,Liberty, -4711073,060000,CSD,Dalmeny, -4711070,065432,CSD,Martensville, -4711091,060000,CSD,Viscount No. 341, -4711072,065453,CSD,Allan, -4711048,060000,CSD,Drake, -4711036,060000,CSD,Kenaston, -4711031,060000,CSD,Rosedale No. 283, -4711028,060000,CSD,Broderick, -4711024,065524,CSD,Hawarden, -4711002,060000,CSD,Duval, -4711092,060000,CSD,Viscount, -4711078,060000,CSD,Meacham, -4711064,060000,CSD,Shields, -4711063,060000,CSD,Dundurn, -4711060,060000,CSD,Thode, -4711018,065524,CSD,Loreburn No. 254, -4711042,060000,CSD,Wreford No. 280, -4711019,065524,CSD,Elbow, -4711004,060000,CSD,Govan, -4711007,060000,CSD,Etters Beach, -4711044,060000,CSD,Nokomis, -4711096,060000,CSD,Wolverine No. 340, -4711077,065453,CSD,Clavet, -4711828,060000,CSD,Whitecap, -4711071,065453,CSD,Bradwell, -4711058,060000,CSD,Zelma, -4711032,060000,CSD,Hanley, -4711034,060000,CSD,McCraney No. 282, -4711006,060000,CSD,Big Arm No. 251, -4711053,060000,CSD,Watrous, -4711075,060000,CSD,Osler, -4711059,060000,CSD,Lost River No. 313, -4711052,060000,CSD,Morris No. 312, -4711094,060000,CSD,Plunkett, -4711026,060000,CSD,Rudy No. 284, -4711056,060000,CSD,Young, -4711049,060000,CSD,Lanigan, -4711038,060000,CSD,Bladworth, -4711011,060000,CSD,Arm River No. 252, -4712,060000,CD,Division No. 12, -4712833,060000,CSD,Sweet Grass 113, -4712050,060000,CSD,Perdue No. 346, -4712059,065434,CSD,Asquith, -4712072,060000,CSD,Rosemount No. 378, -4712031,060000,CSD,Tessier, -4712032,060000,CSD,Harris, -4712006,066364,CSD,Rosetown, -4712079,066260,CSD,Battleford, -4712034,060000,CSD,Marriott No. 317, -4712056,065434,CSD,Delisle, -4712020,060000,CSD,Fertile Valley No. 285, -4712014,060000,CSD,Wiseton, -4712001,060000,CSD,Pleasant Valley No. 288, -4712830,060000,CSD,Mosquito 109, -4712058,065434,CSD,Vanscoy, -4712008,060000,CSD,Zealandia, -4712042,060000,CSD,Biggar No. 347, -4712837,060000,CSD,Sweet Grass 113-M16, -4712829,060000,CSD,Red Pheasant 108, -4712054,060000,CSD,Vanscoy No. 345, -4712051,060000,CSD,Perdue, -4712011,060000,CSD,Milden No. 286, -4712012,060000,CSD,Milden, -4712022,060000,CSD,Conquest, -4712016,060000,CSD,Dinsmore, -4712078,060000,CSD,Battle River No. 438, -4712832,060000,CSD,Grizzly Bear's Head 110 and Lean Man 111, -4712046,060000,CSD,Biggar, -4712029,060000,CSD,Harris No. 316, -4712026,060000,CSD,Montrose No. 315, -4712019,060000,CSD,Macrorie, -4712064,060000,CSD,Eagle Creek No. 376, -4712038,060000,CSD,Mountain View No. 318, -4712004,060000,CSD,St. Andrews No. 287, -4712069,060000,CSD,Glenside No. 377, -4712052,060000,CSD,Kinley, -4713,060000,CD,Division No. 13, -4713079,060000,CSD,Manitou Lake No. 442, -4713096,060000,CSD,Cut Knife No. 439, -4713049,060000,CSD,Eye Hill No. 382, -4713038,060000,CSD,Mariposa No. 350, -4713011,060000,CSD,Milton No. 292, -4713004,060000,CSD,Netherhill, -4713835,060000,CSD,Poundmaker 114, -4713069,060000,CSD,Wilkie, -4713028,060000,CSD,Winslow No. 319, -4713006,060000,CSD,Kindersley No. 290, -4713836,060000,CSD,Little Pine 116, -4713044,060000,CSD,Luseland, -4713021,060000,CSD,Major, -4713042,060000,CSD,Kerrobert, -4713002,060000,CSD,Brock, -4713091,060000,CSD,Marsden, -4713098,060000,CSD,Cut Knife, -4713059,060000,CSD,Tramping Lake No. 380, -4713062,060000,CSD,Scott, -4713054,060000,CSD,Denzil, -4713009,060000,CSD,Flaxcombe, -4713051,060000,CSD,Macklin, -4713056,060000,CSD,Grass Lake No. 381, -4713074,060000,CSD,Unity, -4713033,060000,CSD,Ruthilda, -4713041,060000,CSD,Progress No. 351, -4713064,060000,CSD,Reford No. 379, -4713046,060000,CSD,Heart's Hill No. 352, -4713032,060000,CSD,Grandview No. 349, -4713019,060000,CSD,Prairiedale No. 321, -4713029,060000,CSD,Dodsland, -4713022,060000,CSD,Smiley, -4713008,060000,CSD,Kindersley, -4713026,060000,CSD,Coleville, -4713094,060000,CSD,Neilburg, -4713068,060000,CSD,Buffalo No. 409, -4713078,060000,CSD,Senlac, -4713014,060000,CSD,Marengo, -4713039,060000,CSD,Tramping Lake, -4713076,060000,CSD,Senlac No. 411, -4713072,060000,CSD,Round Valley No. 410, -4713053,060000,CSD,Primate, -4713067,060000,CSD,Landis, -4713016,060000,CSD,Antelope Park No. 322, -4713031,060000,CSD,Plenty, -4713092,060000,CSD,Hillsdale No. 440, -4713024,060000,CSD,Oakdale No. 320, -4714,060000,CD,Division No. 14, -4714068,060000,CSD,Tobin Lake, -4714043,060000,CSD,Tisdale No. 427, -4714030,060000,CSD,Pleasantdale, -4714007,060000,CSD,Porcupine Plain, -4714026,060000,CSD,Spalding No. 368, -4714036,060000,CSD,Archerwill, -4714092,060000,CSD,Choiceland, -4714839,060000,CSD,Shoal Lake 28A, -4714056,060000,CSD,Connaught No. 457, -4714041,060000,CSD,Bjorkdale, -4714023,060000,CSD,Ponass Lake No. 367, -4714840,060000,CSD,Red Earth 29, -4714077,060000,CSD,Torch River No. 488, -4714001,060000,CSD,Hudson Bay No. 394, -4714079,060000,CSD,White Fox, -4714076,060000,CSD,Nipawin, -4714074,060000,CSD,Codette, -4714053,060000,CSD,Willow Creek No. 458, -4714062,060000,CSD,Arborfield, -4714038,060000,CSD,Bjorkdale No. 426, -4714842,060000,CSD,Kinistin 91, -4714047,060000,CSD,Star City No. 428, -4714039,060000,CSD,Mistatim, -4714032,060000,CSD,Naicam, -4714021,060000,CSD,Kelvington No. 366, -4714067,060000,CSD,Moose Range No. 486, -4714846,060000,CSD,Opaskwayak Cree Nation 27A (Carrot River), -4714069,060000,CSD,Carrot River, -4714049,060000,CSD,Star City, -4714004,060000,CSD,Hudson Bay, -4714072,060000,CSD,Nipawin No. 487, -4714073,060000,CSD,Aylsham, -4714841,060000,CSD,Yellowquill 90, -4714022,060000,CSD,Kelvington, -4714059,060000,CSD,Arborfield No. 456, -4714058,060000,CSD,Ridgedale, -4714061,060000,CSD,Zenon Park, -4714048,060000,CSD,Valparaiso, -4714006,060000,CSD,Porcupine No. 395, -4714028,060000,CSD,Spalding, -4714025,060000,CSD,Fosston, -4714009,060000,CSD,Weekes, -4714093,060000,CSD,Smeaton, -4714091,060000,CSD,Love, -4714845,060000,CSD,Carrot River 29A, -4714051,060000,CSD,Melfort, -4714044,060000,CSD,Tisdale, -4714034,060000,CSD,Barrier Valley No. 397, -4714024,060000,CSD,Rose Valley, -4714035,060000,CSD,Pleasantdale No. 398, -4715,060000,CD,Division No. 15, -4715099,060000,CSD,Paddockwood No. 520, -4715847,060000,CSD,Muskoday First Nation, -4715845,060000,CSD,Beardy's 97 and Okemasis 96, -4715861,060000,CSD,One Arrow 95-1D, -4715018,065441,CSD,Aberdeen No. 373, -4715041,060000,CSD,Cudworth, -4715006,060000,CSD,Lake Lenore, -4715012,060000,CSD,Bruno, -4715085,060000,CSD,Albertville, -4715092,060000,CSD,Meath Park, -4715064,060000,CSD,Prince Albert No. 461, -4715071,060000,CSD,Kinistino No. 459, -4715067,060000,CSD,Birch Hills No. 460, -4715029,060000,CSD,Laird, -4715038,060000,CSD,Alvena, -4715002,060000,CSD,Englefeld, -4715859,060000,CSD,Beardy's and Okemasis 96 and 97B, -4715036,060000,CSD,Fish Creek No. 402, -4715072,060000,CSD,Weldon, -4715052,060000,CSD,Beatty, -4715848,060000,CSD,Wahpaton 94A, -4715057,060000,CSD,St. Louis No. 431, -4715039,060000,CSD,Hoodoo No. 401, -4715028,060000,CSD,Waldheim, -4715048,060000,CSD,Lake Lenore No. 399, -4715017,060000,CSD,Vonda, -4715045,060000,CSD,Pilger, -4715004,060000,CSD,Muenster, -4715862,060000,CSD,One Arrow 95-1A, -4715850,060000,CSD,Cumberland 100A, -4715849,060000,CSD,James Smith 100, -4715091,060000,CSD,Weirdale, -4715066,060000,CSD,Prince Albert, -4715068,060000,CSD,Birch Hills, -4715042,060000,CSD,Wakaw, -4715003,060000,CSD,St. Gregor, -4715070,060000,CSD,Candle Lake, -4715853,060000,CSD,Montreal Lake 106B, -4715076,060000,CSD,Christopher Lake, -4715846,060000,CSD,Opawakoscikan, -4715061,060000,CSD,Duck Lake No. 463, -4715026,060000,CSD,Laird No. 404, -4715043,060000,CSD,Wakaw Lake, -4715857,060000,CSD,One Arrow 95-1C, -4715047,060000,CSD,Middle Lake, -4715007,060000,CSD,Humboldt No. 370, -4715005,060000,CSD,Annaheim, -4715098,060000,CSD,Paddockwood, -4715075,060000,CSD,Lakeland No. 521, -4715054,060000,CSD,Invergordon No. 430, -4715062,060000,CSD,Duck Lake, -4715034,060000,CSD,Hague, -4715014,060000,CSD,Grant No. 372, -4715049,060000,CSD,St. Brieux, -4715008,060000,CSD,Humboldt, -4715079,060000,CSD,Garden River No. 490, -4715031,060000,CSD,Rosthern No. 403, -4715051,060000,CSD,Flett's Springs No. 429, -4715844,060000,CSD,One Arrow 95, -4715001,060000,CSD,St. Peter No. 369, -4715094,060000,CSD,Buckland No. 491, -4715059,060000,CSD,St. Louis, -4715074,060000,CSD,Kinistino, -4715032,060000,CSD,Rosthern, -4715027,060000,CSD,Hepburn, -4715044,060000,CSD,Three Lakes No. 400, -4715046,060000,CSD,St. Benedict, -4715019,065441,CSD,Aberdeen, -4715016,060000,CSD,Prud'Homme, -4715851,060000,CSD,Little Red River 106C, -4715011,060000,CSD,Bayne No. 371, -4716,060000,CD,Division No. 16, -4716863,060000,CSD,Chitek Lake 191, -4716894,060000,CSD,Pelican Lake 191A, -4716856,060000,CSD,Sturgeon Lake 101, -4716047,060000,CSD,Shellbrook, -4716023,060000,CSD,Douglas No. 436, -4716891,060000,CSD,Muskeg Lake 102D, -4716016,060000,CSD,Blaine Lake, -4716003,060000,CSD,Ruddell, -4716008,060000,CSD,Great Bend No. 405, -4716880,060000,CSD,Pelican Lake 191B, -4716063,060000,CSD,Medstead, -4716002,060000,CSD,Denholm, -4716855,060000,CSD,Mistawasis 103, -4716890,060000,CSD,Muskeg Lake 102G, -4716029,066260,CSD,North Battleford, -4716005,060000,CSD,Mayfield No. 406, -4716053,060000,CSD,Prince Albert National Park, -4716077,060000,CSD,Chitek Lake, -4716056,060000,CSD,Spiritwood No. 496, -4716862,060000,CSD,Witchekan Lake 117, -4716860,060000,CSD,Ahtahkakoop 104, -4716051,060000,CSD,Canwood No. 494, -4716043,060000,CSD,Pebble Baye, -4716870,060000,CSD,Lucky Man, -4716886,060000,CSD,Muskeg Lake 102E, -4716042,060000,CSD,Leask, -4716024,060000,CSD,Speers, -4716857,060000,CSD,Little Red River 106D, -4716057,060000,CSD,Shell Lake, -4716041,060000,CSD,Leask No. 464, -4716027,066260,CSD,North Battleford, -4716026,060000,CSD,Richard, -4716892,060000,CSD,Sweet Grass 113-L6, -4716011,060000,CSD,Borden, -4716061,060000,CSD,Leoville, -4716054,060000,CSD,Debden, -4716034,060000,CSD,Rabbit Lake, -4716059,060000,CSD,Big Shell, -4716044,060000,CSD,Parkside, -4716854,060000,CSD,Muskeg Lake Cree Nation 102, -4716013,060000,CSD,Blaine Lake No. 434, -4716022,060000,CSD,Hafford, -4716072,060000,CSD,Big River, -4716882,060000,CSD,Witchekan Lake 117D, -4716058,060000,CSD,Spiritwood, -4716038,060000,CSD,Meeting Lake No. 466, -4716052,060000,CSD,Canwood, -4716075,060000,CSD,Big River No. 555, -4716858,060000,CSD,Big River 118, -4716861,060000,CSD,Saulteaux 159A, -4716046,060000,CSD,Shellbrook No. 493, -4716033,060000,CSD,Round Hill No. 467, -4716028,066271,CSD,North Battleford No. 437, -4716872,060000,CSD,Muskeg Lake 102B, -4716018,060000,CSD,Redberry No. 435, -4716014,060000,CSD,Marcelin, -4716004,060000,CSD,Maymont, -4716062,060000,CSD,Medstead No. 497, -4716888,060000,CSD,Muskeg Lake 102F, -4716019,060000,CSD,Krydor, -4716009,060000,CSD,Radisson, -4716060,060000,CSD,Echo Bay, -4717,060000,CD,Division No. 17, -4717062,060000,CSD,Beaver River No. 622, -4717810,060000,CSD,Ministikwan 161A, -4717808,060000,CSD,Makwa Lake 129, -4717819,060000,CSD,Meadow Lake 105A, -4717801,060000,CSD,Seekaskootch 119, -4717022,060000,CSD,Wilton No. 472, -4717048,060000,CSD,Glaslyn, -4717018,060000,CSD,Maidstone, -4717813,060000,CSD,Saulteaux 159, -4717004,060000,CSD,Metinota, -4717039,060000,CSD,Mervin, -4717809,060000,CSD,Ministikwan 161, -4717805,060000,CSD,Flying Dust First Nation 105 (Meadow Lake 105), -4717052,060000,CSD,Meadow Lake, -4717028,060000,CSD,Britannia No. 502, -4717011,060000,CSD,Edam, -4717008,060000,CSD,Turtle River No. 469, -4717811,060000,CSD,Big Island Lake Cree Territory, -4717055,060000,CSD,Dorintosh, -4717820,060000,CSD,Onion Lake 119-1, -4717058,060000,CSD,Loon Lake, -4717013,060000,CSD,Paynton No. 470, -4717024,060000,CSD,Lashburn, -4717067,060000,CSD,Pierceland, -4717032,060000,CSD,Frenchman Butte No. 501, -4717045,060000,CSD,Mervin No. 499, -4717006,060000,CSD,Meota, -4717825,060000,CSD,Min-A-He-Quo-Sis 116C, -4717054,060000,CSD,Meadow Lake No. 588, -4717066,060000,CSD,Goodsoil, -4717057,060000,CSD,Makwa, -4717802,060000,CSD,Makaoo (Part) 120, -4717036,060000,CSD,St. Walburg, -4717047,060000,CSD,Parkdale No. 498, -4717005,060000,CSD,Aquadeo, -4717019,060000,CSD,Waseca, -4717053,060000,CSD,Greig Lake, -4717807,060000,CSD,Makwa Lake 129B, -4717815,060000,CSD,Makwa Lake 129C, -4717042,060000,CSD,Kivimaa-Moonlight Bay, -4717803,060000,CSD,Thunderchild First Nation 115B, -4717029,060000,CSD,Lloydminster (Part), -4717816,060000,CSD,Eagles Lake 165C, -4717034,060000,CSD,Paradise Hill, -4717804,060000,CSD,Thunderchild First Nation 115C, -4717041,060000,CSD,Turtleford, -4717001,060000,CSD,Meota No. 468, -4717056,060000,CSD,Loon Lake No. 561, -4717806,060000,CSD,Waterhen 130, -4717017,060000,CSD,Eldon No. 471, -4717026,060000,CSD,Marshall, -4717812,060000,CSD,Moosomin 112B, -4717002,060000,CSD,Cochin, -4717014,060000,CSD,Paynton, -4718,060000,CD,Division No. 18, -4718824,060000,CSD,Fond du Lac 227, -4718846,060000,CSD,Fond du Lac 232, -4718072,060000,CSD,Michel Village, -4718822,060000,CSD,Southend 200, -4718033,060000,CSD,Beauval, -4718844,060000,CSD,Little Hills 158, -4718849,060000,CSD,Little Hills 158B, -4718055,060000,CSD,Pelican Narrows, -4718051,060000,CSD,Creighton, -4718828,060000,CSD,Chicken 224, -4718854,060000,CSD,Kinoosao-Thomas Clark 204, -4718817,060000,CSD,Canoe Lake 165, -4718823,060000,CSD,Chicken 225, -4718100,060000,CSD,Stony Rapids, -4718818,060000,CSD,Buffalo River Dene Nation 193 (Peter Pond Lake 193), -4718030,060000,CSD,Jans Bay, -4718808,060000,CSD,Morin Lake 217, -4718069,060000,CSD,Patuanak, -4718807,060000,CSD,La Plonge 192, -4718062,060000,CSD,Missinipe, -4718813,060000,CSD,Four Portages 157C, -4718812,060000,CSD,Kitsakie 156B, -4718023,060000,CSD,Dore Lake, -4718021,060000,CSD,Green Lake, -4718802,060000,CSD,Montreal Lake 106, -4718067,060000,CSD,Île-à-la-Crosse, -4718832,060000,CSD,Lac La Hache 220, -4718090,060000,CSD,"Division No. 18, Unorganized", -4718819,060000,CSD,Turnor Lake 193B, -4718829,060000,CSD,Clearwater River Dene Band 223, -4718028,060000,CSD,Cole Bay, -4718809,060000,CSD,Lac La Ronge 156, -4718074,060000,CSD,La Loche, -4718070,060000,CSD,Buffalo Narrows, -4718058,060000,CSD,Sandy Bay, -4718015,060000,CSD,Weyakwin, -4718049,060000,CSD,Denare Beach, -4718821,060000,CSD,Sturgeon Weir 184F, -4718065,060000,CSD,Pinehouse, -4718075,060000,CSD,Turnor Lake, -4718071,060000,CSD,St. George's Hill, -4718803,060000,CSD,Stanley 157, -4718041,060000,CSD,La Ronge, -4718052,060000,CSD,Flin Flon (Part), -4718801,060000,CSD,Cumberland House Cree Nation 20, -4718839,060000,CSD,Clearwater River Dene 222, -4718833,060000,CSD,Fond du Lac 229, -4718847,060000,CSD,Fond du Lac 231, -4718814,060000,CSD,Wapachewunak 192D, -4718825,060000,CSD,Brabant Lake, -4718831,060000,CSD,Grandmother's Bay 219, -4718811,060000,CSD,Sucker River 156C (Nemebien River 156C), -4718042,060000,CSD,Air Ronge, -4718810,060000,CSD,Potato River 156A, -4718820,060000,CSD,Pelican Narrows 184B, -4718852,060000,CSD,Kimosom Pwatinahk 203 (Deschambault Lake), -4718012,060000,CSD,Timber Bay, -4718005,060000,CSD,Cumberland House, -46,050000,PT,Manitoba, -4601,052600-053300-053200-053100,CD,Division No. 1, -4601057,053211,CSD,Lac du Bonnet, -4601051,053221,CSD,Pinawa, -4601035,052652,CSD,Stuartburn, -4601075,053140,CSD,Powerview-Pine Falls, -4601078,052432,CSD,Victoria Beach, -4601039,053320-053330,CSD,Piney, -4601043,053212-053241-053242,CSD,Reynolds, -4601079,053243-055241,CSD,Shoal Lake (Part) 40, -4601060,053211,CSD,Lac du Bonnet, -4601082,053243-055241,CSD,Shoal Lake (Part) 39A, -4601094,052600-053300-053200-053100,CSD,"Division No. 1, Unorganized", -4601046,053222,CSD,Whitemouth, -4601071,051140-052411-053140-053150,CSD,Alexander, -4601070,053310,CSD,Buffalo Point 36, -4602,052500-052300-052200-052400,CD,Division No. 2, -4602044,052630,CSD,Steinbach, -4602057,052641,CSD,Ste. Anne, -4602053,052642,CSD,La Broquerie, -4602061,052641,CSD,Ste. Anne, -4602037,052620,CSD,St-Pierre-Jolys, -4602027,052651,CSD,Roseau River 2, -4602041,052630,CSD,Hanover, -4602075,052611,CSD,Ritchot, -4602046,052630,CSD,Niverville, -4602032,052620,CSD,De Salaberry, -4602069,052612,CSD,Taché, -4602025,052651,CSD,Franklin, -4602026,050000,CSD,Roseau Rapids 2A, -4603,052500-052300,CD,Division No. 3, -4603072,052332,CSD,Dufferin, -4603047,052560,CSD,Stanley, -4603050,052560,CSD,Winkler, -4603065,052510,CSD,Morris, -4603058,052520,CSD,Thompson, -4603040,052550,CSD,Altona, -4603033,050000,CSD,Emerson, -4603067,052510,CSD,Morris, -4603062,052530,CSD,Roland, -4603030,052540,CSD,Montcalm, -4603038,052550,CSD,Gretna, -4603053,052560,CSD,Morden, -4603074,052332,CSD,Carman, -4603042,052550,CSD,Plum Coulee, -4603036,052550,CSD,Rhineland, -4604,051400-052500,CD,Division No. 4, -4604039,051432,CSD,Louise, -4604053,051431,CSD,Cartwright, -4604046,051432,CSD,Crystal City, -4604035,051442,CSD,Manitou, -4604044,051432,CSD,Pilot Mound, -4604063,051441,CSD,Lorne, -4604068,051441,CSD,Swan Lake 7, -4604066,051441,CSD,Somerset, -4604057,051422,CSD,Argyle, -4604033,051442,CSD,Pembina, -4604051,051431,CSD,Roblin, -4605,051300-051400,CD,Division No. 5, -4605063,051312,CSD,Hartney, -4605033,051340,CSD,Boissevain, -4605047,051331,CSD,Waskada, -4605070,051411-052252,CSD,Riverside, -4605061,051312,CSD,Cameron, -4605058,051311,CSD,Albert, -4605050,051322,CSD,Arthur, -4605037,051332,CSD,Winchester, -4605031,051340,CSD,Morton, -4605055,051321,CSD,Edward, -4605043,051331,CSD,Brenda, -4605025,051412,CSD,Killarney - Turtle Mountain, -4605067,051313,CSD,Whitewater, -4605076,051421,CSD,Strathcona, -4605052,051322,CSD,Melita, -4605039,051332,CSD,Deloraine, -4606,051100,CD,Division No. 6, -4606023,051160,CSD,Pipestone, -4606028,051110,CSD,Wallace, -4606040,051120,CSD,Sioux Valley Dakota Nation, -4606034,051110,CSD,Virden, -4606037,051120,CSD,Woodworth, -4606018,051150,CSD,Oak Lake, -4606030,051110,CSD,Elkhorn, -4606029,051160,CSD,Canupawakpa Dakota First Nation (Oak Lake 59), -4606015,051150-055121,CSD,Sifton, -4607,051100-051200,CD,Division No. 7, -4607062,051220,CSD,Brandon, -4607041,051232,CSD,Glenboro, -4607077,051130,CSD,Rivers, -4607057,051140,CSD,Whitehead, -4607071,051211,CSD,Elton, -4607065,051231,CSD,North Cypress, -4607075,051130,CSD,Daly, -4607045,051213,CSD,Oakland, -4607068,051231,CSD,Carberry, -4607051,051170,CSD,Glenwood, -4607053,051170,CSD,Souris, -4607047,051213,CSD,Wawanesa, -4607060,051212,CSD,Cornwallis, -4607038,051232,CSD,South Cypress, -4608,051200,CD,Division No. 8, -4608054,055351,CSD,Lansdowne, -4608031,051242,CSD,South Norfolk, -4608061,055352,CSD,Gladstone, -4608045,051241,CSD,North Norfolk, -4608038,051242,CSD,Treherne, -4608033,051242,CSD,Notre Dame de Lourdes, -4608059,055352,CSD,Westbourne, -4608069,055332,CSD,Sandy Bay 5, -4608066,055353,CSD,Lakeview, -4608042,051243,CSD,Victoria, -4608048,051241,CSD,MacGregor, -4608072,055340,CSD,Glenella, -4609,052300,CD,Division No. 9, -4609026,050000,CSD,Dakota Plains 6A, -4609029,052311-052312,CSD,Portage la Prairie, -4609024,052311-052312,CSD,Portage la Prairie, -4609020,050000,CSD,St. Claude, -4609025,050000,CSD,Long Plain (Part) 6, -4609027,050000,CSD,Dakota Tipi 1, -4609017,052331,CSD,Grey, -4610,052200-053200-052400,CD,Division No. 10, -4610052,052321,CSD,St. François Xavier, -4610035,052340,CSD,Macdonald, -4610043,052322,CSD,Cartier, -4611,052100,CD,Division No. 11, -4611042,052323,CSD,Headingley, -4611040,052100,CSD,Winnipeg, -4612,050000,CD,Division No. 12, -4612054,052412-052422,CSD,Brokenhead, -4612047,052431,CSD,Springfield, -4612056,050000,CSD,Beausejour, -4613,050000,CD,Division No. 13, -4613062,052412-052422,CSD,Brokenhead 4, -4613056,052412-052421,CSD,St. Clements, -4613043,052242-052244,CSD,St. Andrews, -4613032,052433,CSD,East St. Paul, -4613037,052252,CSD,West St. Paul, -4613049,050000,CSD,Dunnottar, -4613047,052244,CSD,Selkirk, -4614,052200,CD,Division No. 14, -4614042,052241,CSD,Teulon, -4614015,052251,CSD,Rosser, -4614036,052241-052243,CSD,Rockwood, -4614031,052232,CSD,Woodlands, -4614039,052243,CSD,Stonewall, -4615,055200,CD,Division No. 15, -4615095,055111-055223,CSD,Park (South), -4615071,050000,CSD,Rolling River 67, -4615046,055233,CSD,Archie, -4615041,055234,CSD,Miniota, -4615038,055243,CSD,Hamiota, -4615020,055261,CSD,Neepawa, -4615078,055262,CSD,Rosedale, -4615075,055254,CSD,Minnedosa, -4615049,055211,CSD,Gambler 63 (Part), -4615091,055253-055254,CSD,Clanwilliam, -4615093,055253,CSD,Erickson, -4615042,055234,CSD,Birdtail Creek 57, -4615060,053243-055241,CSD,Shoal Lake, -4615067,050000,CSD,Keeseekoowenin 61, -4615057,055232,CSD,Birtle, -4615033,055244,CSD,Blanshard, -4615069,055251,CSD,Harrison, -4615072,050000,CSD,Rolling River 67B, -4615064,055242,CSD,Strathclair, -4615023,055255,CSD,Odanah, -4615029,055252,CSD,Rapid City, -4615073,051313-055254,CSD,Minto, -4615051,055231,CSD,St-Lazare, -4615062,053243-055241,CSD,Shoal Lake, -4615036,055243,CSD,Hamiota, -4615018,055261,CSD,Langford, -4615048,055231,CSD,Ellice, -4615055,055232,CSD,Birtle, -4615027,055252,CSD,Saskatchewan, -4616,055100,CD,Division No. 16, -4616046,055121-055132,CSD,Valley River 63A, -4616019,055212,CSD,Silver Creek, -4616025,055211,CSD,Gambler 63 (Part), -4616049,055112,CSD,Shell River, -4616052,055112,CSD,Roblin, -4616017,055221,CSD,Waywayseecappo First Nation, -4616032,055211,CSD,Russell, -4616045,055113,CSD,Hillsburg, -4616038,055114,CSD,Shellmouth-Boulton, -4616024,055211,CSD,Russell, -4616029,050000,CSD,Binscarth, -4616002,055221,CSD,Rossburn, -4616007,055221,CSD,Rossburn, -4617,055100,CD,Division No. 17, -4617050,055121,CSD,Dauphin, -4617048,055121,CSD,Dauphin, -4617076,055311,CSD,Lawrence, -4617092,055100,CSD,"Division No. 17, Unorganized", -4617067,055122,CSD,Ethelbert, -4617057,055132,CSD,Grandview, -4617053,055123,CSD,Gilbert Plains, -4617071,055131,CSD,Mossey River, -4617060,055132,CSD,Grandview, -4617029,055322,CSD,Ebb and Flow 52, -4617042,055321,CSD,Ste. Rose du Lac, -4617073,055131,CSD,Winnipegosis, -4617045,055133,CSD,Ochre River, -4617040,055321,CSD,Ste. Rose, -4617036,055331,CSD,McCreary, -4617063,055122,CSD,Ethelbert, -4617026,055312-055322-055332,CSD,Alonsa, -4617034,055331,CSD,McCreary, -4617055,055123,CSD,Gilbert Plains, -4618,052200,CD,Division No. 18, -4618077,054242,CSD,Riverton, -4618068,054222-054241,CSD,Fisher, -4618091,052200,CSD,"Division No. 18, Unorganized, East Part", -4618074,054242,CSD,Arborg, -4618067,054211,CSD,Fairford (Part) 50, -4618057,054231,CSD,Siglunes, -4618034,052223,CSD,Winnipeg Beach, -4618071,054242,CSD,Bifrost, -4618044,052212,CSD,Coldwell, -4618060,054211-054212-054232,CSD,Grahamdale, -4618063,050000,CSD,Little Saskatchewan 48, -4618093,052200,CSD,"Division No. 18, Unorganized, West Part", -4618052,052211,CSD,Eriksdale, -4618037,052221-052222,CSD,Armstrong, -4618031,052223,CSD,Gimli, -4618055,052211,CSD,Dog Creek 46, -4618040,052231,CSD,St. Laurent, -4619,056100,CD,Division No. 19, -4619072,056222,CSD,Shoal River Indian Reserve 65A, -4619079,050000,CSD,Pauingassi First Nation, -4619060,054211,CSD,Fairford (Part) 50, -4619077,057310,CSD,Berens River 13, -4619062,055121,CSD,Dauphin River 48A, -4619052,057330,CSD,Bloodvein 12, -4619068,055312,CSD,Crane River 51, -4619056,050000,CSD,Fisher River 44, -4619050,050000,CSD,Fort Alexander 3, -4619082,050000,CSD,Chemawawin 3, -4619059,054222,CSD,Peguis 1B, -4619045,056100,CSD,"Division No. 19, Unorganized", -4619070,050000,CSD,Pine Creek 66A, -4619069,054120,CSD,Waterhen 45, -4619051,054110-057320,CSD,Little Grand Rapids 14, -4619058,050000,CSD,Fisher River 44A, -4619054,050000,CSD,Black River 9, -4619075,057200,CSD,Poplar River 16, -4619065,050000,CSD,The Narrows 49, -4619071,050000,CSD,Swan Lake 65C, -4619061,054221,CSD,Jackhead 43, -4619053,050000,CSD,Hole or Hollow Water 10, -4620,056200,CD,Division No. 20, -4620032,056221-056242,CSD,Mountain (South), -4620048,056231,CSD,Swan River, -4620039,056232,CSD,Minitonas, -4620055,056221-056242,CSD,Mountain (North), -4620069,056200,CSD,"Division No. 20, Unorganized, North Part", -4620052,056231,CSD,Bowsman, -4620066,056200,CSD,"Division No. 20, Unorganized, South Part", -4620043,056231,CSD,Benito, -4620041,056231,CSD,Swan River, -4620037,056232,CSD,Minitonas, -4621,056100,CD,Division No. 21, -4621071,058510,CSD,Snow Lake, -4621043,050000,CSD,Opaskwayak Cree Nation 21E, -4621027,054110,CSD,Grand Rapids 33, -4621078,056100,CSD,"Division No. 21, Unorganized", -4621034,050000,CSD,Opaskwayak Cree Nation 21B, -4621025,054110,CSD,Grand Rapids, -4621052,050000,CSD,Kelsey, -4621033,050000,CSD,Opaskwayak Cree Nation 21A, -4621040,050000,CSD,Opaskwayak Cree Nation 21I, -4621058,056120,CSD,Moose Lake 31A, -4621029,050000,CSD,Chemawawin 2, -4621035,050000,CSD,Opaskwayak Cree Nation 21C, -4621064,058520,CSD,Flin Flon (Part), -4621045,056110,CSD,The Pas, -4622,058400,CD,Division No. 22, -4622050,059510,CSD,Oxford House 24, -4622055,050000,CSD,God's River 86A, -4622064,050000,CSD,Ilford, -4622801,050000,CSD,St. Theresa Point, -4622051,057120,CSD,Cross Lake 19, -4622800,050000,CSD,Wasagamack, -4622065,058420,CSD,York Landing, -4622067,057120,CSD,Cross Lake 19E, -4622046,058400,CSD,"Division No. 22, Unorganized", -4622063,058420,CSD,Split Lake (Part) 171, -4622017,050000,CSD,Mystery Lake, -4622049,059510,CSD,God's Lake 23, -4622026,052520,CSD,Thompson, -4622058,057150,CSD,Norway House 17, -4622048,050000,CSD,Garden Hill First Nation, -4622059,058440,CSD,Nelson House 170, -4622052,057120,CSD,Cross Lake 19A, -4622056,059510,CSD,Red Sucker Lake 1976, -4623,059300,CD,Division No. 23, -4623056,059100,CSD,Churchill, -4623039,050000,CSD,Granville Lake, -4623064,058330,CSD,Pukatawagan 198, -4623022,059300,CSD,Gillam, -4623060,058420,CSD,Split Lake (Part) 171, -4623071,059400,CSD,Shamattawa 1, -4623058,059100,CSD,Churchill 1, -4623062,059300,CSD,"Division No. 23, Unorganized", -4623025,059300,CSD,Gillam, -4623034,058320,CSD,Leaf Rapids, -4623027,050000,CSD,Fox Lake 2, -4623047,058310,CSD,Lynn Lake, -4623067,058100,CSD,Lac Brochet 197A, -4623037,058410,CSD,South Indian Lake, -4623065,058100,CSD,Brochet 197, -35,040000,PT,Ontario, -3501,043710-043720-043730-043740,CD,"Stormont, Dundas and Glengarry", -3501050,043710-043720-043730-043740,CSD,North Glengarry, -3501042,043710-043720-043730-043740,CSD,North Stormont, -3501005,043710-043720-043730-043740,CSD,South Glengarry, -3501011,043710-043720-043730-043740,CSD,South Stormont, -3501007,043710-043720-043730-043740,CSD,Akwesasne (Part) 59, -3501012,043720,CSD,Cornwall, -3501020,043710-043720-043730-043740,CSD,South Dundas, -3501030,043710-043720-043730-043740,CSD,North Dundas, -3502,045100,CD,Prescott and Russell, -3502001,045100,CSD,East Hawkesbury, -3502048,045100,CSD,Russell, -3502010,045100,CSD,Champlain, -3502044,045100,CSD,Casselman, -3502008,045100,CSD,Hawkesbury, -3502023,045100,CSD,Alfred and Plantagenet, -3502036,045100,CSD,Clarence-Rockland, -3502025,045100,CSD,The Nation / La Nation, -3506,045410-045420,CD,Ottawa, -3506008,045410-045420,CSD,Ottawa, -3507,043610-043620-043630-043640,CD,Leeds and Grenville, -3507065,043610,CSD,North Grenville, -3507014,043630,CSD,Elizabethtown-Kitley, -3507015,043630,CSD,Brockville, -3507017,043640,CSD,Front of Yonge, -3507033,043620,CSD,Westport, -3507042,043640,CSD,Athens, -3507004,043640,CSD,Edwardsburgh/Cardinal, -3507052,043610,CSD,Merrickville-Wolford, -3507021,043640,CSD,Leeds and the Thousand Islands, -3507040,043620,CSD,Rideau Lakes, -3507008,043630,CSD,Prescott, -3507024,043640,CSD,Gananoque, -3507006,043630,CSD,Augusta, -3509,045310-045320,CD,Lanark, -3509001,045310-045320,CSD,Montague, -3509004,045310,CSD,Smiths Falls, -3509015,045310-045320,CSD,Tay Valley, -3509028,045310-045320,CSD,Carleton Place, -3509010,045310-045320,CSD,Drummond/North Elmsley, -3509024,045310-045320,CSD,Beckwith, -3509030,045310-045320,CSD,Mississippi Mills, -3509039,045310-045320,CSD,Lanark Highlands, -3509021,045310,CSD,Perth, -3510,043410-043420,CD,Frontenac, -3510045,043410-043420,CSD,North Frontenac, -3510020,043410-043420,CSD,South Frontenac, -3510035,043410-043420,CSD,Central Frontenac, -3510010,043510,CSD,Kingston, -3510005,043510,CSD,Frontenac Islands, -3511,043510-043520-043410-043420-044610-046620,CD,Lennox and Addington, -3511030,040000,CSD,Stone Mills, -3511005,040000,CSD,Loyalist, -3511015,043520,CSD,Greater Napanee, -3511035,040000,CSD,Addington Highlands, -3512,044610,CD,Hastings, -3512065,040000,CSD,Carlow/Mayo, -3512030,043420,CSD,Tweed, -3512020,043420,CSD,Stirling-Rawdon, -3512001,040000,CSD,Tyendinaga, -3512002,040000,CSD,Deseronto, -3512076,040000,CSD,Hastings Highlands, -3512048,040000,CSD,Tudor and Cashel, -3512054,040000,CSD,Wollaston, -3512036,040000,CSD,Madoc, -3512026,040000,CSD,Centre Hastings, -3512061,040000,CSD,Bancroft, -3512046,040000,CSD,Marmora and Lake, -3512005,040000,CSD,Belleville, -3512004,040000,CSD,Tyendinaga Mohawk Territory, -3512051,040000,CSD,Limerick, -3512015,043310,CSD,Quinte West, -3512058,040000,CSD,Faraday, -3513,043510-043520-043530,CD,Prince Edward, -3513020,043510-043520-043530,CSD,Prince Edward, -3514,043300-043310-043320,CD,Northumberland, -3514014,043310-043320,CSD,Cramahe, -3514020,043310-043320,CSD,Port Hope, -3514004,043310-043320,CSD,Brighton, -3514027,043310-043320,CSD,Alderville First Nation, -3514019,043310-043320,CSD,Hamilton, -3514021,043310-043320,CSD,Cobourg, -3514024,043310-043320,CSD,Alnwick/Haldimand, -3514045,043310-043320,CSD,Trent Hills, -3515,044740,CD,Peterborough, -3515015,040000,CSD,Smith-Ennismore-Lakefield, -3515037,040000,CSD,North Kawartha, -3515019,040000,CSD,Curve Lake First Nation 35, -3515003,040000,CSD,Asphodel-Norwood, -3515008,040000,CSD,Hiawatha First Nation, -3515005,040000,CSD,Otonabee-South Monaghan, -3515030,040000,CSD,Havelock-Belmont-Methuen, -3515023,040000,CSD,Douro-Dummer, -3515014,044740,CSD,Peterborough, -3515013,040000,CSD,Cavan Monaghan, -3515044,040000,CSD,Galway-Cavendish and Harvey, -3516,044710-044730,CD,Kawartha Lakes, -3516010,044710-044730,CSD,Kawartha Lakes, -3518,043200-043210-043230,CD,Durham, -3518005,043230,CSD,Ajax, -3518001,043230,CSD,Pickering, -3518017,043230,CSD,Clarington, -3518020,044730,CSD,Scugog, -3518029,043210,CSD,Uxbridge, -3518022,044730,CSD,Mississaugas of Scugog Island, -3518009,043230,CSD,Whitby, -3518013,043230,CSD,Oshawa, -3518039,043210,CSD,Brock, -3519,043200,CD,York, -3519049,043240,CSD,King, -3519046,040000,CSD,Aurora, -3519036,043240,CSD,Markham, -3519038,043240,CSD,Richmond Hill, -3519028,043240,CSD,Vaughan, -3519070,043220,CSD,Georgina, -3519054,040000,CSD,East Gwillimbury, -3519044,040000,CSD,Whitchurch-Stouffville, -3519048,043220,CSD,Newmarket, -3519076,040000,CSD,Chippewas of Georgina Island First Nation, -3520,043100,CD,Toronto, -3520005,043100,CSD,Toronto, -3521,046600,CD,Peel, -3521010,046620,CSD,Brampton, -3521005,046620,CSD,Mississauga, -3521024,046610,CSD,Caledon, -3522,046500-046510-046520-046530,CD,Dufferin, -3522012,040000,CSD,Mono, -3522021,040000,CSD,Shelburne, -3522016,040000,CSD,Mulmur, -3522019,040000,CSD,Melancthon, -3522014,040000,CSD,Orangeville, -3522001,040000,CSD,East Garafraxa, -3522010,040000,CSD,East Luther Grand Valley, -3522008,040000,CSD,Amaranth, -3523,046410-046420,CD,Wellington, -3523009,046420,CSD,Guelph/Eramosa, -3523043,040000,CSD,Minto, -3523033,040000,CSD,Mapleton, -3523008,046420,CSD,Guelph, -3523017,046420,CSD,Erin, -3523025,046410-046420,CSD,Centre Wellington, -3523001,040000,CSD,Puslinch, -3523050,040000,CSD,Wellington North, -3524,046600,CD,Halton, -3524015,046630,CSD,Halton Hills, -3524001,046640,CSD,Oakville, -3524009,046630,CSD,Milton, -3524002,046640,CSD,Burlington, -0,046100,CD,Hamilton, -3525005,046100,CSD,Hamilton, -3526,046700-046710-046720,CD,Niagara, -3526028,040000,CSD,Pelham, -3526011,040000,CSD,Port Colborne, -3526037,040000,CSD,Thorold, -3526057,040000,CSD,Lincoln, -3526032,046720,CSD,Welland, -3526053,046710,CSD,St. Catharines, -3526003,040000,CSD,Fort Erie, -3526021,040000,CSD,West Lincoln, -3526047,040000,CSD,Niagara-on-the-Lake, -3526065,046710,CSD,Grimsby, -3526043,046720,CSD,Niagara Falls, -3526014,040000,CSD,Wainfleet, -3528,041100-041200,CD,Haldimand-Norfolk, -3528018,041200,CSD,Haldimand County, -3528037,040000,CSD,Six Nations (Part) 40, -3528035,040000,CSD,New Credit (Part) 40A, -3528052,041100,CSD,Norfolk County, -3529,041720,CD,Brant, -3529021,041720,CSD,New Credit (Part) 40A, -3529005,041720,CSD,Brant, -3529006,041720,CSD,Brantford, -3529020,041720,CSD,Six Nations (Part) 40, -3530,046400-046430,CD,Waterloo, -3530035,046430,CSD,Woolwich, -3530027,046430,CSD,Wellesley, -3530013,046430,CSD,Kitchener, -3530020,046430,CSD,Wilmot, -3530016,046430,CSD,Waterloo, -3530004,046430,CSD,North Dumfries, -3530010,046430,CSD,Cambridge, -3531,046300,CD,Perth, -3531016,046340,CSD,St. Marys, -3531013,046340,CSD,Perth South, -3531030,046320,CSD,Perth East, -3531040,046320,CSD,North Perth, -3531011,046340,CSD,Stratford, -3531025,046340,CSD,West Perth, -3532,041710,CD,Oxford, -3532002,040000,CSD,Norwich, -3532012,041710,CSD,South-West Oxford, -3532004,041710,CSD,Tillsonburg, -3532045,040000,CSD,Blandford-Blenheim, -3532027,040000,CSD,Zorra, -3532042,041710,CSD,Woodstock, -3532038,040000,CSD,East Zorra-Tavistock, -3532018,040000,CSD,Ingersoll, -3534,041600,CD,Elgin, -3534010,040000,CSD,Malahide, -3534011,041610,CSD,Aylmer, -3534042,041620,CSD,West Elgin, -3534005,040000,CSD,Bayham, -3534021,041610,CSD,St. Thomas, -3534024,040000,CSD,Southwold, -3534020,041610-041620,CSD,Central Elgin, -3534030,040000,CSD,Dutton/Dunwich, -3536,041410,CD,Chatham-Kent, -3536020,041410,CSD,Chatham-Kent, -3536029,040000,CSD,Moravian 47, -3537,041420,CD,Essex, -3537003,041420,CSD,Leamington, -3537016,041420,CSD,Essex, -3537048,040000,CSD,Tecumseh, -3537034,040000,CSD,LaSalle, -3537013,040000,CSD,Kingsville, -3537001,040000,CSD,Pelee, -3537064,040000,CSD,Lakeshore, -3537039,041420,CSD,Windsor, -3537028,040000,CSD,Amherstburg, -3538,041310-041320,CD,Lambton, -3538016,040000,CSD,Enniskillen, -3538003,040000,CSD,St. Clair, -3538007,040000,CSD,Dawn-Euphemia, -3538031,040000,CSD,Point Edward, -3538015,040000,CSD,Brooke-Alvinston, -3538030,041320,CSD,Sarnia, -3538040,041310-041320,CSD,Lambton Shores, -3538043,040000,CSD,Warwick, -3538056,040000,CSD,Kettle Point 44, -3538025,041320,CSD,Sarnia 45, -3538019,041320,CSD,Petrolia, -3538018,040000,CSD,Oil Springs, -3538035,040000,CSD,Plympton-Wyoming, -3538004,040000,CSD,Walpole Island 46, -3539,041510-041520,CD,Middlesex, -3539018,040000,CSD,Munsee-Delaware Nation 1, -3539015,041520,CSD,Strathroy-Caradoc, -3539005,041520,CSD,Southwest Middlesex, -3539021,040000,CSD,Oneida 41, -3539036,041510,CSD,London, -3539027,040000,CSD,Thames Centre, -3539033,041510-041520,CSD,Middlesex Centre, -3539047,040000,CSD,Adelaide Metcalfe, -3539017,040000,CSD,Chippewas of the Thames First Nation 42, -3539060,040000,CSD,Lucan Biddulph, -3539002,040000,CSD,Newbury, -3539041,041510-041520,CSD,North Middlesex, -3540,046310-046330,CD,Huron, -3540028,046330,CSD,Goderich, -3540010,046330,CSD,Bluewater, -3540025,046310-046330,CSD,Central Huron, -3540055,046310,CSD,North Huron, -3540063,040000,CSD,Ashfield-Colborne-Wawanosh, -3540046,040000,CSD,Howick, -3540050,040000,CSD,Morris-Turnberry, -3540040,046310-046330,CSD,Huron East, -3540005,046330,CSD,South Huron, -3541,046210,CD,Bruce, -3541069,046210,CSD,Northern Bruce Peninsula, -3541032,040000,CSD,Brockton, -3541045,046230,CSD,Saugeen Shores, -3541055,046230,CSD,South Bruce Peninsula, -3541057,046230,CSD,Saugeen 29, -3541060,040000,CSD,Neyaashiinigmiing 27, -3541043,040000,CSD,Arran-Elderslie, -3541024,046230,CSD,Kincardine, -3541004,046230,CSD,South Bruce, -3541015,040000,CSD,Huron-Kinloss, -3542,046200-046220-046240,CD,Grey, -3542029,040000,CSD,Hanover, -3542004,046220-046240,CSD,West Grey, -3542037,040000,CSD,Chatsworth, -3542045,046220,CSD,Blue Mountains, -3542059,040000,CSD,Owen Sound, -3542047,040000,CSD,Meaford, -3542053,040000,CSD,Georgian Bluffs, -3542015,046220-046240,CSD,Grey Highlands, -3542005,040000,CSD,Southgate, -3543,041100,CD,Simcoe, -3543064,040000,CSD,Wasaga Beach, -3543014,040000,CSD,Bradford West Gwillimbury, -3543007,040000,CSD,New Tecumseth, -3543050,040000,CSD,Mnjikaning First Nation 32 (Rama First Nation 32), -3543015,040000,CSD,Severn, -3543019,040000,CSD,Ramara, -3543072,040000,CSD,Penetanguishene, -3543052,044120,CSD,Orillia, -3543069,040000,CSD,Christian Island 30, -3543017,046510,CSD,Innisfil, -3543005,040000,CSD,Clearview, -3543074,044110,CSD,Midland, -3543070,040000,CSD,Christian Island 30A, -3543023,040000,CSD,Oro-Medonte, -3543031,044130,CSD,Collingwood, -3543042,044130,CSD,Barrie, -3543021,040000,CSD,Essa, -3543003,040000,CSD,Adjala-Tosorontio, -3543071,040000,CSD,Tay, -3543009,040000,CSD,Springwater, -3543068,040000,CSD,Tiny, -3544,044410-044420-044430-044440,CD,Muskoka, -3544042,044410,CSD,Huntsville, -3544071,040000,CSD,Wahta Mohawk Territory, -3544073,040000,CSD,Moose Point 79, -3544018,044440,CSD,Bracebridge, -3544027,040000,CSD,Lake of Bays, -3544053,044410-044420-044430-044440,CSD,Muskoka Lakes, -3544065,040000,CSD,Georgian Bay, -3544002,044440,CSD,Gravenhurst, -3546,044500-044510-044520,CD,Haliburton, -3546024,040000,CSD,Dysart and Others, -3546005,040000,CSD,Highlands East, -3546015,040000,CSD,Minden Hills, -3546018,040000,CSD,Algonquin Highlands, -3547,045230,CD,Renfrew, -3547037,040000,CSD,Pikwakanagan (Golden Lake 39), -3547046,040000,CSD,Horton, -3547002,040000,CSD,Arnprior, -3547020,040000,CSD,"Brudenell, Lyndoch and Raglan", -3547030,040000,CSD,Madawaska Valley, -3547008,040000,CSD,Greater Madawaska, -3547075,040000,CSD,Laurentian Valley, -3547003,040000,CSD,McNab/Braeside, -3547048,045230,CSD,Renfrew, -3547035,040000,CSD,Bonnechere Valley, -3547076,045210,CSD,Petawawa, -3547098,040000,CSD,"Head, Clara and Maria", -3547064,045210,CSD,Pembroke, -3547090,040000,CSD,Laurentian Hills, -3547096,040000,CSD,Deep River, -3547070,040000,CSD,North Algona Wilberforce, -3547043,040000,CSD,Admaston/Bromley, -3547033,040000,CSD,"Killaloe, Hagarty and Richards", -3547056,040000,CSD,Whitewater Region, -3548,049810,CD,Nipissing, -3548022,040000,CSD,Calvin, -3548027,040000,CSD,Bonfield, -3548019,049820,CSD,Mattawan, -3548055,049810,CSD,West Nipissing / Nipissing Ouest, -3548072,040000,CSD,Bear Island 1, -3548044,049820,CSD,North Bay, -3548094,049810-049820,CSD,"Nipissing, Unorganized, North Part", -3548034,040000,CSD,East Ferris, -3548091,049810-049820,CSD,"Nipissing, Unorganized, South Part", -3548069,040000,CSD,Temagami, -3548073,049810-049820,CSD,Nipissing 10, -3548031,040000,CSD,Chisholm, -3548013,040000,CSD,Papineau-Cameron, -3548021,049820,CSD,Mattawa, -3548001,040000,CSD,South Algonquin, -3549,044420,CD,Parry Sound, -3549077,040000,CSD,Dokis 9, -3549018,040000,CSD,Kearney, -3549003,040000,CSD,Seguin, -3549036,044430,CSD,Carling, -3549056,040000,CSD,South River, -3549076,040000,CSD,French River 13, -3549031,040000,CSD,McDougall, -3549032,044420,CSD,Parry Sound, -3549066,040000,CSD,Callander, -3549096,044420,CSD,"Parry Sound, Unorganized, Centre Part", -3549039,040000,CSD,Whitestone, -3549024,040000,CSD,Ryerson, -3549014,040000,CSD,Perry, -3549095,044420,CSD,"Parry Sound, Unorganized, North East Part", -3549071,040000,CSD,Nipissing, -3549046,040000,CSD,Strong, -3549022,040000,CSD,Burk's Falls, -3549072,040000,CSD,Shawanaga 17, -3549043,040000,CSD,Magnetawan, -3549078,040000,CSD,Magnetewan 1, -3549005,040000,CSD,The Archipelago, -3549028,040000,CSD,McKellar, -3549051,040000,CSD,Joly, -3549019,040000,CSD,Armour, -3549012,040000,CSD,McMurrich/Monteith, -3549060,040000,CSD,Powassan, -3549048,040000,CSD,Sundridge, -3549075,040000,CSD,Henvey Inlet 2, -3549073,040000,CSD,Parry Island First Nation, -3549054,040000,CSD,Machar, -3551,049910-049920-049930,CD,Manitoulin, -3551094,049910-049920-049930,CSD,"Manitoulin, Unorganized, West Part", -3551045,040000,CSD,M'Chigeeng 22 (West Bay 22), -3551091,049910-049920-049930,CSD,"Manitoulin, Unorganized, Mainland", -3551040,040000,CSD,Whitefish River (Part) 4, -3551021,040000,CSD,Billings, -3551041,040000,CSD,Sucker Creek 23, -3551034,040000,CSD,Cockburn Island, -3551028,040000,CSD,Burpee and Mills, -3551027,040000,CSD,Gordon/Barrie Island, -3551100,040000,CSD,Zhiibaahaasing 19A (Cockburn Island 19A), -3551011,040000,CSD,Assiginack, -3551017,040000,CSD,Northeastern Manitoulin and the Islands, -3551043,040000,CSD,Wikwemikong Unceded, -3551042,040000,CSD,Sheguiandah 24, -3551044,040000,CSD,Sheshegwaning 20, -3551001,040000,CSD,Tehkummah, -3551036,040000,CSD,Killarney, -3551026,040000,CSD,Gore Bay, -3551006,040000,CSD,Central Manitoulin, -3552,049100,CD,Sudbury, -3552013,049100,CSD,Markstay-Warren, -3552054,049100,CSD,Duck Lake 76B, -3552028,049100,CSD,Baldwin, -3552023,049100,CSD,Sables-Spanish Rivers, -3552052,049100,CSD,Mattagami 71, -3552092,049100,CSD,Chapleau, -3552051,049100,CSD,Whitefish Lake 6, -3552031,049100,CSD,Nairn and Hyman, -3552093,049100,CSD,"Sudbury, Unorganized, North Part", -3552053,049100,CSD,Chapleau 74A, -3552026,049100,CSD,Espanola, -3552058,049100,CSD,Chapleau 75, -3552004,049100,CSD,St.-Charles, -3552001,049100,CSD,French River / Rivière des Français, -3553,049100,CD,Greater Sudbury / Grand Sudbury, -3553005,049100,CSD,Greater Sudbury / Grand Sudbury, -3553040,049100,CSD,Wahnapitei 11, -3554,040000,CD,Timiskaming, -3554094,040000,CSD,"Timiskaming, Unorganized, West Part", -3554042,040000,CSD,James, -3554044,040000,CSD,Charlton and Dack, -3554038,040000,CSD,Thornloe, -3554057,040000,CSD,Matachewan 72, -3554029,040000,CSD,Casey, -3554014,040000,CSD,Harris, -3554036,040000,CSD,Armstrong, -3554068,040000,CSD,Kirkland Lake, -3554034,040000,CSD,Hilliard, -3554052,040000,CSD,Englehart, -3554021,040000,CSD,Hudson, -3554006,040000,CSD,Latchford, -3554091,040000,CSD,"Timiskaming, Unorganized, East Part", -3554026,040000,CSD,Harley, -3554058,040000,CSD,McGarry, -3554049,040000,CSD,Evanturel, -3554054,040000,CSD,Chamberlain, -3554056,040000,CSD,Matachewan, -3554024,040000,CSD,Kerns, -3554008,040000,CSD,Cobalt, -3554066,040000,CSD,Gauthier, -3554062,040000,CSD,Larder Lake, -3554032,040000,CSD,Brethour, -3554020,040000,CSD,Temiskaming Shores, -3554001,040000,CSD,Coleman, -3556,049520,CD,Cochrane, -3556093,049310,CSD,Fort Albany (Part) 67, -3556095,040000,CSD,Constance Lake 92, -3556077,040000,CSD,Mattice-Val Côté, -3556073,040000,CSD,Opasatika, -3556056,040000,CSD,Moonbeam, -3556048,040000,CSD,Smooth Rock Falls, -3556098,049520,CSD,"Cochrane, Unorganized, South East Part", -3556070,040000,CSD,Val Rita-Harty, -3556102,040000,CSD,New Post 69A, -3556014,040000,CSD,Black River-Matheson, -3556076,040000,CSD,Hearst, -3556092,040000,CSD,"Cochrane, Unorganized, North Part", -3556027,049520,CSD,Timmins, -3556100,040000,CSD,Flying Post 73, -3556042,049520,CSD,Cochrane, -3556106,049320,CSD,Moosonee, -3556094,040000,CSD,Factory Island 1, -3556052,040000,CSD,Fauquier-Strickland, -3556066,040000,CSD,Kapuskasing, -3556031,040000,CSD,Iroquois Falls, -3556033,049510,CSD,Abitibi 70, -3556096,040000,CSD,Moose Factory 68, -3556091,049520,CSD,"Cochrane, Unorganized, South West Part", -3557,040000,CD,Algoma, -3557039,040000,CSD,Spanish, -3557001,040000,CSD,Jocelyn, -3557066,040000,CSD,Prince, -3557011,040000,CSD,Laird, -3557040,040000,CSD,North Shore, -3557026,040000,CSD,Thessalon 12, -3557004,040000,CSD,Hilton, -3557095,040000,CSD,"Algoma, Unorganized, North Part", -3557076,040000,CSD,Wawa, -3557075,040000,CSD,Rankin Location 15D, -3557016,040000,CSD,Johnson, -3557021,040000,CSD,Bruce Mines, -3557073,040000,CSD,Mississagi River 8, -3557028,040000,CSD,Thessalon, -3557041,040000,CSD,Elliot Lake, -3557074,040000,CSD,Garden River 14, -3557079,040000,CSD,Dubreuilville, -3557014,040000,CSD,Tarbutt and Tarbutt Additional, -3557091,040000,CSD,White River, -3557078,040000,CSD,Gros Cap 49, -3557038,040000,CSD,Blind River, -3557035,040000,CSD,Huron Shores, -3557072,040000,CSD,Serpent River 7, -3557094,040000,CSD,"Algoma, Unorganized, South East Part", -3557008,040000,CSD,St. Joseph, -3557096,040000,CSD,Hornepayne, -3557071,040000,CSD,Sagamok, -3557006,040000,CSD,Hilton Beach, -3557061,040000,CSD,Sault Ste. Marie, -3557051,040000,CSD,"Macdonald, Meredith and Aberdeen Additional", -3557019,040000,CSD,Plummer Additional, -3557077,040000,CSD,Goulais Bay 15A, -3558,048100,CD,Thunder Bay, -3558097,040000,CSD,Whitesand, -3558064,040000,CSD,Lake Helen 53A, -3558075,040000,CSD,Greenstone, -3558080,040000,CSD,Ojibway Nation of Saugeen (Savant Lake), -3558076,040000,CSD,Aroland 83, -3558077,040000,CSD,Lake Nipigon, -3558063,040000,CSD,Pays Plat 51, -3558051,040000,CSD,Schreiber, -3558028,040000,CSD,Shuniah, -3558085,040000,CSD,Osnaburgh 63A, -3558044,040000,CSD,Nipigon, -3558041,040000,CSD,Red Rock, -3558059,040000,CSD,Marathon, -3558019,040000,CSD,Conmee, -3558004,048100,CSD,Thunder Bay, -3558060,040000,CSD,Pic Mobert North, -3558016,040000,CSD,O'Connor, -3558069,040000,CSD,Rocky Bay 1, -3558011,040000,CSD,Oliver Paipoonge, -3558090,048100,CSD,"Thunder Bay, Unorganized", -3558068,040000,CSD,Long Lake 58, -3558065,040000,CSD,Gull River 55, -3558062,040000,CSD,Pic River 50, -3558067,040000,CSD,Ginoogaming First Nation, -3558066,040000,CSD,Manitouwadge, -3558034,040000,CSD,Dorion, -3558012,040000,CSD,Gillies, -3558061,040000,CSD,Pic Mobert South, -3558095,040000,CSD,Seine River 22A2, -3558054,040000,CSD,Terrace Bay, -3558100,040000,CSD,Lac des Mille Lacs 22A1, -3558001,040000,CSD,Neebing, -3558003,040000,CSD,Fort William 52, -3559,047510,CD,Rainy River, -3559031,040000,CSD,Morley, -3559068,047510-047520,CSD,Rainy Lake 17A, -3559001,040000,CSD,Atikokan, -3559026,040000,CSD,Manitou Rapids 11, -3559011,040000,CSD,Alberton, -3559090,047510,CSD,"Rainy River, Unorganized", -3559024,040000,CSD,Chapple, -3559065,040000,CSD,Seine River 23B, -3559062,040000,CSD,Agency 1, -3559048,040000,CSD,Sabaskong Bay (Part) 35C, -3559051,040000,CSD,Big Grassy River 35G, -3559063,040000,CSD,Couchiching 16A, -3559092,040000,CSD,Long Sault 12, -3559060,040000,CSD,Neguaguon Lake 25D, -3559069,047510-047520,CSD,Rainy Lake 17B, -3559066,040000,CSD,Seine River 23A, -3559012,047510,CSD,Fort Frances, -3559047,040000,CSD,Lake of the Woods, -3559064,040000,CSD,Rainy Lake 26A, -3559016,040000,CSD,La Vallee, -3559052,040000,CSD,Big Island Mainland 93, -3559053,040000,CSD,Saug-a-Gaw-Sing 1, -3559040,040000,CSD,Dawson, -3559042,040000,CSD,Rainy River, -3559019,047510,CSD,Emo, -3559061,047510-047520,CSD,Rainy Lake 18C, -3560,047310,CD,Kenora, -3560100,040000,CSD,Wawakapewin (Long Dog Lake), -3560071,040000,CSD,Sandy Lake 88, -3560059,040000,CSD,Weagamow Lake 87, -3560085,040000,CSD,Wunnumin 1, -3560053,042720,CSD,Fort Hope 64, -3560084,040000,CSD,Wabauskang 21, -3560082,040000,CSD,Shoal Lake (Part) 40, -3560067,040000,CSD,Poplar Hill, -3560005,040000,CSD,Whitefish Bay 33A, -3560097,040000,CSD,Muskrat Dam Lake, -3560051,042100,CSD,Attawapiskat 91A, -3560050,049310,CSD,Fort Albany (Part) 67, -3560061,040000,CSD,Wabaseemoong, -3560027,040000,CSD,Dryden, -3560075,040000,CSD,Kitchenuhmaykoosib Aaki 84 (Big Trout Lake), -3560104,040000,CSD,Kee-Way-Win, -3560093,040000,CSD,Neskantaga, -3560021,040000,CSD,Machin, -3560068,040000,CSD,Shoal Lake (Part) 39A, -3560064,040000,CSD,Shoal Lake 34B2, -3560032,040000,CSD,Ear Falls, -3560090,047310,CSD,"Kenora, Unorganized", -3560078,042200,CSD,Fort Severn 89, -3560076,040000,CSD,Sachigo Lake 1, -3560088,040000,CSD,Wapekeka 2, -3560086,040000,CSD,Summer Beaver, -3560070,040000,CSD,Deer Lake, -3560052,040000,CSD,Marten Falls 65, -3560055,040000,CSD,Osnaburgh 63B, -3560034,047220,CSD,Sioux Lookout, -3560024,040000,CSD,Eagle Lake 27, -3560083,040000,CSD,Whitefish Bay 34A, -3560081,040000,CSD,Lansdowne House, -3560095,040000,CSD,Bearskin Lake, -3560054,040000,CSD,Cat Lake 63C, -3560046,040000,CSD,Slate Falls, -3560004,040000,CSD,Whitefish Bay 32A, -3560063,040000,CSD,Sabaskong Bay 35D, -3560079,042710,CSD,Webequie, -3560080,040000,CSD,North Spirit Lake, -3560042,040000,CSD,Red Lake, -3560010,047310,CSD,Kenora, -3560008,047320,CSD,Sioux Narrows - Nestor Falls, -3560060,040000,CSD,Northwest Angle 33B, -3560096,040000,CSD,Kasabonika Lake, -3560102,040000,CSD,MacDowell Lake, -3560058,040000,CSD,English River 21, -3560089,040000,CSD,The Dalles 38C, -3560007,040000,CSD,Sabaskong Bay (Part) 35C, -3560091,042300,CSD,Peawanuck, -3560098,040000,CSD,Kingfisher Lake 1, -3560077,040000,CSD,Pikangikum 14, -3560049,040000,CSD,Pickle Lake, -3560056,040000,CSD,Lac Seul 28, -3560069,040000,CSD,Rat Portage 38A, -3560057,040000,CSD,Wabigoon Lake 27, -3560001,040000,CSD,Ignace, -3560065,040000,CSD,Lake Of The Woods 37, -3560066,047310,CSD,Kenora 38B, -24,030000,PT,Québec, -2401,036800,CD,, -2401023,036800,CSD,Les Îles-de-la-Madeleine, -2401042,030000,CSD,Grosse-Île, -2402,035800-035820,CD,, -2402005,035800-035820,CSD,Percé, -2402010,030000,CSD,Sainte-Thérèse-de-Gaspé, -2402015,033100,CSD,Grande-Rivière, -2402028,030000,CSD,Chandler, -2402047,030000,CSD,Port-Daniel - Gascons, -2402902,030000,CSD,Mont-Alexandre, -2403,035800-035810,CD,, -2403005,035800-035810,CSD,Gaspé, -2403010,030000,CSD,Cloridorme, -2403015,030000,CSD,Petite-Vallée, -2403020,030000,CSD,Grande-Vallée, -2403025,030000,CSD,Murdochville, -2403902,030000,CSD,Rivière-Saint-Jean, -2403904,030000,CSD,Collines-du-Basque, -2404,030000,CD,, -2404005,030000,CSD,Sainte-Madeleine-de-la-Rivière-Madeleine, -2404010,030000,CSD,Saint-Maxime-du-Mont-Louis, -2404015,030000,CSD,Mont-Saint-Pierre, -2404020,030000,CSD,Rivière-à-Claude, -2404025,030000,CSD,Marsoui, -2404030,030000,CSD,La Martre, -2404037,030000,CSD,Sainte-Anne-des-Monts, -2404047,030000,CSD,Cap-Chat, -2404902,030000,CSD,Mont-Albert, -2404904,030000,CSD,Coulée-des-Adolphe, -2405,030000,CD,, -2405010,030000,CSD,Shigawake, -2405015,030000,CSD,Saint-Godefroi, -2405020,030000,CSD,Hope Town, -2405025,030000,CSD,Hope, -2405032,030000,CSD,Paspébiac, -2405040,030000,CSD,New Carlisle, -2405045,030000,CSD,Bonaventure, -2405050,030000,CSD,Saint-Elzéar, -2405055,030000,CSD,Saint-Siméon, -2405060,030000,CSD,Caplan, -2405065,030000,CSD,Saint-Alphonse, -2405070,030000,CSD,New Richmond, -2405077,030000,CSD,Cascapédia - Saint-Jules, -2405902,030000,CSD,Rivière-Bonaventure, -2406,030000,CD,, -2406005,030000,CSD,Maria, -2406013,030000,CSD,Carleton-sur-Mer, -2406020,030000,CSD,Nouvelle, -2406025,030000,CSD,Escuminac, -2406030,030000,CSD,Pointe-à-la-Croix, -2406035,030000,CSD,Ristigouche-Partie-Sud-Est, -2406040,030000,CSD,Saint-André-de-Restigouche, -2406045,030000,CSD,Matapédia, -2406050,030000,CSD,Saint-Alexis-de-Matapédia, -2406055,030000,CSD,Saint-François-d'Assise, -2406060,030000,CSD,L'Ascension-de-Patapédia, -2406802,030000,CSD,Gesgapegiag, -2406804,030000,CSD,Listuguj, -2406902,030000,CSD,Rivière-Nouvelle, -2406904,030000,CSD,Ruisseau-Ferguson, -2407,030000,CD,, -2407005,030000,CSD,Sainte-Marguerite-Marie, -2407010,030000,CSD,Sainte-Florence, -2407018,030000,CSD,Causapscal, -2407025,030000,CSD,Albertville, -2407030,030000,CSD,Saint-Léon-le-Grand, -2407035,030000,CSD,Saint-Zénon-du-Lac-Humqui, -2407040,030000,CSD,Sainte-Irène, -2407047,030000,CSD,Amqui, -2407057,030000,CSD,Lac-au-Saumon, -2407065,030000,CSD,Saint-Alexandre-des-Lacs, -2407070,030000,CSD,Saint-Tharcisius, -2407075,030000,CSD,Saint-Vianney, -2407080,030000,CSD,Val-Brillant, -2407085,030000,CSD,Sayabec, -2407090,030000,CSD,Saint-Cléophas, -2407095,030000,CSD,Saint-Moïse, -2407100,030000,CSD,Saint-Noël, -2407105,030000,CSD,Saint-Damase, -2407902,030000,CSD,Routhierville, -2407904,030000,CSD,Rivière-Vaseuse, -2407906,030000,CSD,Rivière-Patapédia-Est, -2407908,030000,CSD,Lac-Casault, -2407910,030000,CSD,Ruisseau-des-Mineurs, -2407912,030000,CSD,Lac-Alfred, -2407914,030000,CSD,Lac-Matapédia, -2408,030000,CD,, -2408005,030000,CSD,Les Méchins, -2408010,030000,CSD,Saint-Jean-de-Cherbourg, -2408015,030000,CSD,Grosses-Roches, -2408023,030000,CSD,Sainte-Félicité, -2408030,030000,CSD,Saint-Adelme, -2408035,030000,CSD,Saint-René-de-Matane, -2408040,030000,CSD,Sainte-Paule, -2408053,030000,CSD,Matane, -2408065,030000,CSD,Saint-Léandre, -2408073,030000,CSD,Saint-Ulric, -2408080,030000,CSD,Baie-des-Sables, -2408902,030000,CSD,Rivière-Bonjour, -2409,030000,CD,, -2409005,030000,CSD,La Rédemption, -2409010,030000,CSD,Saint-Charles-Garnier, -2409015,030000,CSD,Les Hauteurs, -2409020,030000,CSD,Sainte-Jeanne-d'Arc, -2409025,030000,CSD,Saint-Gabriel-de-Rimouski, -2409030,032120,CSD,Saint-Donat, -2409035,030000,CSD,Sainte-Angèle-de-Mérici, -2409040,030000,CSD,Padoue, -2409048,030000,CSD,Métis-sur-Mer, -2409055,030000,CSD,Saint-Octave-de-Métis, -2409060,030000,CSD,Grand-Métis, -2409065,030000,CSD,Price, -2409070,030000,CSD,Saint-Joseph-de-Lepage, -2409077,030000,CSD,Mont-Joli, -2409085,030000,CSD,Sainte-Flavie, -2409092,030000,CSD,Sainte-Luce, -2409902,030000,CSD,Lac-des-Eaux-Mortes, -2409904,030000,CSD,Lac-à-la-Croix, -2410,030000,CD,, -2410005,030000,CSD,Esprit-Saint, -2410010,030000,CSD,La Trinité-des-Monts, -2410015,030000,CSD,Saint-Narcisse-de-Rimouski, -2410025,030000,CSD,Saint-Marcellin, -2410030,030000,CSD,Saint-Anaclet-de-Lessard, -2410043,030000,CSD,Rimouski, -2410060,030000,CSD,Saint-Valérien, -2410070,030000,CSD,Saint-Fabien, -2410075,030000,CSD,Saint-Eugène-de-Ladrière, -2410902,030000,CSD,Lac-Huron, -2411,030000,CD,, -2411005,030000,CSD,Saint-Clément, -2411010,030000,CSD,Saint-Jean-de-Dieu, -2411015,030000,CSD,Sainte-Rita, -2411020,030000,CSD,Saint-Guy, -2411025,030000,CSD,Saint-Médard, -2411030,030000,CSD,Sainte-Françoise, -2411035,030000,CSD,Saint-Éloi, -2411040,030000,CSD,Trois-Pistoles, -2411045,030000,CSD,Notre-Dame-des-Neiges, -2411050,030000,CSD,Saint-Mathieu-de-Rioux, -2411055,030000,CSD,Saint-Simon, -2411902,030000,CSD,Lac-Boisbouscache, -2412,030000,CD,, -2412005,030000,CSD,Saint-Cyprien, -2412010,030000,CSD,Saint-Hubert-de-Rivière-du-Loup, -2412015,030000,CSD,Saint-Antonin, -2412020,030000,CSD,Saint-Modeste, -2412025,030000,CSD,Saint-François-Xavier-de-Viger, -2412030,030000,CSD,Saint-Épiphane, -2412035,030000,CSD,Saint-Paul-de-la-Croix, -2412043,030000,CSD,L'Isle-Verte, -2412045,030000,CSD,Notre-Dame-des-Sept-Douleurs, -2412057,030000,CSD,Cacouna, -2412065,030000,CSD,Saint-Arsène, -2412072,030000,CSD,Rivière-du-Loup, -2412080,030000,CSD,Notre-Dame-du-Portage, -2412802,030000,CSD,Whitworth, -2412804,030000,CSD,Cacouna, -2413,030000,CD,, -2413005,030000,CSD,Dégelis, -2413010,030000,CSD,Saint-Jean-de-la-Lande, -2413015,030000,CSD,Packington, -2413020,030000,CSD,Saint-Marc-du-Lac-Long, -2413025,030000,CSD,Rivière-Bleue, -2413030,030000,CSD,Saint-Eusèbe, -2413040,030000,CSD,Saint-Juste-du-Lac, -2413045,030000,CSD,Auclair, -2413050,030000,CSD,Lejeune, -2413055,030000,CSD,Biencourt, -2413060,030000,CSD,Lac-des-Aigles, -2413065,030000,CSD,Saint-Michel-du-Squatec, -2413073,030000,CSD,Témiscouata-sur-le-Lac, -2413075,030000,CSD,Saint-Pierre-de-Lamy, -2413080,030000,CSD,Saint-Louis-du-Ha! Ha!, -2413085,030000,CSD,Saint-Elzéar-de-Témiscouata, -2413090,030000,CSD,Saint-Honoré-de-Témiscouata, -2413095,030000,CSD,Pohénégamook, -2413100,030000,CSD,Saint-Athanase, -2414,030000,CD,, -2414005,030000,CSD,Mont-Carmel, -2414010,030000,CSD,Saint-Bruno-de-Kamouraska, -2414018,030000,CSD,Saint-Pascal, -2414025,030000,CSD,Sainte-Hélène, -2414030,030000,CSD,Saint-Joseph-de-Kamouraska, -2414035,030000,CSD,Saint-Alexandre-de-Kamouraska, -2414040,030000,CSD,Saint-André, -2414045,030000,CSD,Saint-Germain, -2414050,030000,CSD,Kamouraska, -2414055,030000,CSD,Saint-Denis-De La Bouteillerie, -2414060,030000,CSD,Saint-Philippe-de-Néri, -2414065,030000,CSD,Rivière-Ouelle, -2414070,030000,CSD,Saint-Pacôme, -2414075,030000,CSD,Saint-Gabriel-Lalemant, -2414080,030000,CSD,Saint-Onésime-d'Ixworth, -2414085,030000,CSD,La Pocatière, -2414090,030000,CSD,Sainte-Anne-de-la-Pocatière, -2414902,030000,CSD,Picard, -2414904,030000,CSD,Petit-Lac-Sainte-Anne, -2415,030000,CD,, -2415005,030000,CSD,Saint-Irénée, -2415013,030000,CSD,La Malbaie, -2415025,030000,CSD,Notre-Dame-des-Monts, -2415030,030000,CSD,Saint-Aimé-des-Lacs, -2415035,030000,CSD,Clermont, -2415058,030000,CSD,Saint-Siméon, -2415065,030000,CSD,Baie-Sainte-Catherine, -2415902,030000,CSD,Mont-Élie, -2415904,030000,CSD,Sagard, -2416,030000,CD,, -2416005,030000,CSD,Petite-Rivière-Saint-François, -2416013,030000,CSD,Baie-Saint-Paul, -2416023,030000,CSD,L'Isle-aux-Coudres, -2416048,030000,CSD,Les Éboulements, -2416050,030000,CSD,Saint-Hilarion, -2416055,030000,CSD,Saint-Urbain, -2416902,030000,CSD,Lac-Pikauba, -2417,030000,CD,, -2417005,030000,CSD,Saint-Omer, -2417010,030000,CSD,Saint-Pamphile, -2417015,030000,CSD,Saint-Adalbert, -2417020,030000,CSD,Saint-Marcel, -2417025,030000,CSD,Sainte-Félicité, -2417030,030000,CSD,Sainte-Perpétue, -2417035,030000,CSD,Tourville, -2417040,030000,CSD,Saint-Damase-de-L'Islet, -2417045,030000,CSD,Saint-Cyrille-de-Lessard, -2417055,030000,CSD,Saint-Aubert, -2417060,030000,CSD,Sainte-Louise, -2417065,030000,CSD,Saint-Roch-des-Aulnaies, -2417070,030000,CSD,Saint-Jean-Port-Joli, -2417078,030000,CSD,L'Islet, -2418,030000,CD,, -2418005,030000,CSD,Saint-Just-de-Bretenières, -2418010,030000,CSD,Lac-Frontière, -2418015,030000,CSD,Saint-Fabien-de-Panet, -2418020,030000,CSD,Sainte-Lucie-de-Beauregard, -2418025,030000,CSD,Sainte-Apolline-de-Patton, -2418030,030000,CSD,Saint-Paul-de-Montminy, -2418035,030000,CSD,Sainte-Euphémie-sur-Rivière-du-Sud, -2418040,030000,CSD,Notre-Dame-du-Rosaire, -2418045,030000,CSD,Cap-Saint-Ignace, -2418050,030000,CSD,Montmagny, -2418055,030000,CSD,Saint-Pierre-de-la-Rivière-du-Sud, -2418060,030000,CSD,Saint-François-de-la-Rivière-du-Sud, -2418065,030000,CSD,Berthier-sur-Mer, -2418070,030000,CSD,Saint-Antoine-de-l'Isle-aux-Grues, -2419,030000,CD,, -2419005,030000,CSD,Saint-Philémon, -2419010,030000,CSD,Notre-Dame-Auxiliatrice-de-Buckland, -2419015,030000,CSD,Saint-Nazaire-de-Dorchester, -2419020,030000,CSD,Saint-Léon-de-Standon, -2419025,030000,CSD,Saint-Malachie, -2419030,030000,CSD,Saint-Damien-de-Buckland, -2419037,030000,CSD,Armagh, -2419045,032821,CSD,Saint-Nérée-de-Bellechasse, -2419050,032821,CSD,Saint-Lazare-de-Bellechasse, -2419055,030000,CSD,Sainte-Claire, -2419062,030000,CSD,Saint-Anselme, -2419068,030000,CSD,Saint-Henri, -2419070,030000,CSD,Honfleur, -2419075,030000,CSD,Saint-Gervais, -2419082,030000,CSD,Saint-Raphaël, -2419090,030000,CSD,La Durantaye, -2419097,032821,CSD,Saint-Charles-de-Bellechasse, -2419105,030000,CSD,Beaumont, -2419110,032821,CSD,Saint-Michel-de-Bellechasse, -2419117,030000,CSD,Saint-Vallier, -2420,030000,CD,, -2420005,032814,CSD,Saint-François-de-l'Île-d'Orléans, -2420010,030000,CSD,Sainte-Famille, -2420015,032814,CSD,Saint-Jean-de-l'Île-d'Orléans, -2420020,032814,CSD,Saint-Laurent-de-l'Île-d'Orléans, -2420025,032814,CSD,Saint-Pierre-de-l'Île-d'Orléans, -2420030,030000,CSD,Sainte-Pétronille, -2421,030000,CD,, -2421005,030000,CSD,Saint-Tite-des-Caps, -2421010,030000,CSD,Saint-Ferréol-les-Neiges, -2421015,030000,CSD,Saint-Louis-de-Gonzague-du-Cap-Tourmente, -2421020,030000,CSD,Saint-Joachim, -2421025,032814,CSD,Beaupré, -2421030,032814,CSD,Sainte-Anne-de-Beaupré, -2421035,030000,CSD,Château-Richer, -2421040,030000,CSD,L'Ange-Gardien, -2421045,030000,CSD,Boischatel, -2421902,030000,CSD,Sault-au-Cochon, -2421904,030000,CSD,Lac-Jacques-Cartier, -2422,030000,CD,, -2422005,030000,CSD,Sainte-Catherine-de-la-Jacques-Cartier, -2422010,030000,CSD,Fossambault-sur-le-Lac, -2422015,030000,CSD,Lac-Saint-Joseph, -2422020,030000,CSD,Shannon, -2422025,032812,CSD,Saint-Gabriel-de-Valcartier, -2422030,030000,CSD,Lac-Delage, -2422035,032812,CSD,Stoneham-et-Tewkesbury, -2422040,030000,CSD,Lac-Beauport, -2422045,030000,CSD,Sainte-Brigitte-de-Laval, -2422902,030000,CSD,Lac-Croche, -2423,032800,CD,, -2423015,030000,CSD,Notre-Dame-des-Anges, -2423027,032813,CSD,Québec, -2423057,030000,CSD,L'Ancienne-Lorette, -2423072,030000,CSD,Saint-Augustin-de-Desmaures, -2423802,030000,CSD,Wendake, -2425,032822,CD,, -2425213,032822,CSD,Lévis, -2426,030000,CD,, -2426005,030000,CSD,Frampton, -2426010,030000,CSD,Saints-Anges, -2426015,030000,CSD,Vallée-Jonction, -2426022,030000,CSD,Saint-Elzéar, -2426030,030000,CSD,Sainte-Marie, -2426035,030000,CSD,Sainte-Marguerite, -2426040,030000,CSD,Sainte-Hénédine, -2426048,030000,CSD,Scott, -2426055,030000,CSD,Saint-Bernard, -2426063,030000,CSD,Saint-Isidore, -2426070,030000,CSD,Saint-Lambert-de-Lauzon, -2427,030000,CD,, -2427008,030000,CSD,Saint-Victor, -2427015,030000,CSD,Saint-Alfred, -2427028,030000,CSD,Beauceville, -2427035,030000,CSD,Saint-Odilon-de-Cranbourne, -2427043,030000,CSD,Saint-Joseph-de-Beauce, -2427050,030000,CSD,Saint-Joseph-des-Érables, -2427055,030000,CSD,Saint-Jules, -2427060,030000,CSD,Tring-Jonction, -2427065,030000,CSD,Saint-Frédéric, -2427070,030000,CSD,Saint-Séverin, -2428,030000,CD,, -2428005,030000,CSD,Saint-Zacharie, -2428015,030000,CSD,Sainte-Aurélie, -2428020,030000,CSD,Saint-Prosper, -2428025,030000,CSD,Saint-Benjamin, -2428030,030000,CSD,Sainte-Rose-de-Watford, -2428035,030000,CSD,Saint-Louis-de-Gonzague, -2428040,030000,CSD,Saint-Cyprien, -2428045,030000,CSD,Sainte-Justine, -2428053,030000,CSD,Lac-Etchemin, -2428060,032821,CSD,Saint-Luc-de-Bellechasse, -2428065,030000,CSD,Sainte-Sabine, -2428070,030000,CSD,Saint-Camille-de-Lellis, -2428075,030000,CSD,Saint-Magloire, -2429,030000,CD,, -2429005,030000,CSD,Saint-Théophile, -2429013,030000,CSD,Saint-Gédéon-de-Beauce, -2429020,030000,CSD,Saint-Hilaire-de-Dorset, -2429025,030000,CSD,Saint-Évariste-de-Forsyth, -2429030,030000,CSD,La Guadeloupe, -2429038,030000,CSD,Saint-Honoré-de-Shenley, -2429045,030000,CSD,Saint-Martin, -2429050,030000,CSD,Saint-René, -2429057,030000,CSD,Saint-Côme - Linière, -2429065,030000,CSD,Saint-Philibert, -2429073,030000,CSD,Saint-Georges, -2429095,030000,CSD,Lac-Poulin, -2429100,030000,CSD,Saint-Benoît-Labre, -2429112,030000,CSD,Saint-Éphrem-de-Beauce, -2429120,030000,CSD,Notre-Dame-des-Pins, -2429125,030000,CSD,Saint-Simon-les-Mines, -2430,030000,CD,, -2430005,030000,CSD,Saint-Augustin-de-Woburn, -2430010,030000,CSD,Notre-Dame-des-Bois, -2430015,030000,CSD,Val-Racine, -2430020,030000,CSD,Piopolis, -2430025,030000,CSD,Frontenac, -2430030,030000,CSD,Lac-Mégantic, -2430035,030000,CSD,Marston, -2430040,030000,CSD,Milan, -2430045,030000,CSD,Nantes, -2430050,030000,CSD,Sainte-Cécile-de-Whitton, -2430055,030000,CSD,Audet, -2430070,030000,CSD,Saint-Robert-Bellarmin, -2430072,030000,CSD,Saint-Ludger, -2430080,030000,CSD,Lac-Drolet, -2430085,030000,CSD,Saint-Sébastien, -2430090,030000,CSD,Courcelles, -2430095,030000,CSD,Lambton, -2430100,030000,CSD,Saint-Romain, -2430105,030000,CSD,Stornoway, -2430110,030000,CSD,Stratford, -2431,030000,CD,, -2431008,030000,CSD,Beaulac-Garthby, -2431015,030000,CSD,Disraeli, -2431020,030000,CSD,Disraeli, -2431025,030000,CSD,Saint-Jacques-le-Majeur-de-Wolfestown, -2431030,030000,CSD,Saint-Fortunat, -2431035,030000,CSD,Saint-Julien, -2431040,030000,CSD,Irlande, -2431045,030000,CSD,Saint-Joseph-de-Coleraine, -2431050,030000,CSD,Sainte-Praxède, -2431056,030000,CSD,Adstock, -2431060,030000,CSD,Sainte-Clotilde-de-Beauce, -2431084,030000,CSD,Thetford Mines, -2431095,030000,CSD,Saint-Adrien-d'Irlande, -2431100,030000,CSD,Saint-Jean-de-Brébeuf, -2431105,030000,CSD,Kinnear's Mills, -2431122,030000,CSD,East Broughton, -2431130,030000,CSD,Sacré-Coeur-de-Jésus, -2431135,030000,CSD,Saint-Pierre-de-Broughton, -2431140,030000,CSD,Saint-Jacques-de-Leeds, -2432,030000,CD,, -2432013,030000,CSD,Saint-Ferdinand, -2432023,030000,CSD,Sainte-Sophie-d'Halifax, -2432033,030000,CSD,Princeville, -2432040,030000,CSD,Plessisville, -2432045,030000,CSD,Plessisville, -2432050,030000,CSD,Saint-Pierre-Baptiste, -2432058,030000,CSD,Inverness, -2432065,030000,CSD,Lyster, -2432072,030000,CSD,Laurierville, -2432080,030000,CSD,Notre-Dame-de-Lourdes, -2432085,030000,CSD,Villeroy, -2433,030000,CD,, -2433007,030000,CSD,Saint-Sylvestre, -2433017,032210,CSD,Sainte-Agathe-de-Lotbinière, -2433025,030000,CSD,Saint-Patrice-de-Beaurivage, -2433030,030000,CSD,Saint-Narcisse-de-Beaurivage, -2433035,030000,CSD,Saint-Gilles, -2433040,030000,CSD,Dosquet, -2433045,030000,CSD,Saint-Agapit, -2433052,030000,CSD,Saint-Flavien, -2433060,030000,CSD,Laurier-Station, -2433065,030000,CSD,Saint-Janvier-de-Joly, -2433070,030000,CSD,Val-Alain, -2433080,032824,CSD,Saint-Édouard-de-Lotbinière, -2433085,030000,CSD,Notre-Dame-du-Sacré-Coeur-d'Issoudun, -2433090,030000,CSD,Saint-Apollinaire, -2433095,030000,CSD,Saint-Antoine-de-Tilly, -2433102,030000,CSD,Sainte-Croix, -2433115,032824,CSD,Lotbinière, -2433123,030000,CSD,Leclercville, -2434,030000,CD,, -2434007,030000,CSD,Neuville, -2434017,030000,CSD,Pont-Rouge, -2434025,030000,CSD,Donnacona, -2434030,030000,CSD,Cap-Santé, -2434038,030000,CSD,Saint-Basile, -2434048,032811,CSD,Portneuf, -2434058,030000,CSD,Deschambault-Grondines, -2434060,030000,CSD,Saint-Gilbert, -2434065,030000,CSD,Saint-Marc-des-Carrières, -2434078,030000,CSD,Saint-Casimir, -2434085,030000,CSD,Saint-Thuribe, -2434090,030000,CSD,Saint-Ubalde, -2434097,030000,CSD,Saint-Alban, -2434105,030000,CSD,Sainte-Christine-d'Auvergne, -2434115,032811,CSD,Saint-Léonard-de-Portneuf, -2434120,030000,CSD,Lac-Sergent, -2434128,030000,CSD,Saint-Raymond, -2434135,030000,CSD,Rivière-à-Pierre, -2434902,030000,CSD,Lac-Blanc, -2434904,030000,CSD,Linton, -2434906,030000,CSD,Lac-Lapeyrère, -2435,030000,CD,, -2435005,030000,CSD,Notre-Dame-de-Montauban, -2435010,032730,CSD,Lac-aux-Sables, -2435015,030000,CSD,Saint-Adelphe, -2435020,030000,CSD,Saint-Séverin, -2435027,030000,CSD,Saint-Tite, -2435035,030000,CSD,Hérouxville, -2435040,030000,CSD,Grandes-Piles, -2435045,030000,CSD,Saint-Roch-de-Mékinac, -2435050,030000,CSD,Sainte-Thècle, -2435055,030000,CSD,Trois-Rives, -2435902,030000,CSD,Lac-Masketsi, -2435904,030000,CSD,Lac-Normand, -2435906,030000,CSD,Rivière-de-la-Savane, -2435908,030000,CSD,Lac-Boulé, -2436,030000,CD,, -2436033,032740,CSD,Shawinigan, -2437,030000,CD,, -2437067,032760,CSD,Trois-Rivières, -2437205,032750,CSD,Sainte-Anne-de-la-Pérade, -2437210,030000,CSD,Batiscan, -2437215,030000,CSD,Sainte-Geneviève-de-Batiscan, -2437220,030000,CSD,Champlain, -2437225,030000,CSD,Saint-Luc-de-Vincennes, -2437230,030000,CSD,Saint-Maurice, -2437235,030000,CSD,Notre-Dame-du-Mont-Carmel, -2437240,030000,CSD,Saint-Narcisse, -2437245,030000,CSD,Saint-Stanislas, -2437250,030000,CSD,Saint-Prosper-de-Champlain, -2438,030000,CD,, -2438005,030000,CSD,Saint-Sylvère, -2438010,030000,CSD,Bécancour, -2438015,030000,CSD,Sainte-Marie-de-Blandford, -2438020,030000,CSD,Lemieux, -2438028,030000,CSD,Manseau, -2438035,030000,CSD,Sainte-Françoise, -2438040,030000,CSD,Sainte-Sophie-de-Lévrard, -2438047,030000,CSD,Fortierville, -2438055,030000,CSD,Parisville, -2438060,030000,CSD,Sainte-Cécile-de-Lévrard, -2438065,030000,CSD,Saint-Pierre-les-Becquets, -2438070,030000,CSD,Deschaillons-sur-Saint-Laurent, -2438802,030000,CSD,Wôlinak, -2439,030000,CD,, -2439005,030000,CSD,Saints-Martyrs-Canadiens, -2439010,030000,CSD,Ham-Nord, -2439015,030000,CSD,Notre-Dame-de-Ham, -2439020,032530,CSD,Saint-Rémi-de-Tingwick, -2439025,030000,CSD,Tingwick, -2439030,030000,CSD,Chesterville, -2439035,030000,CSD,Sainte-Hélène-de-Chester, -2439043,030000,CSD,Saint-Norbert-d'Arthabaska, -2439060,030000,CSD,Saint-Christophe-d'Arthabaska, -2439062,030000,CSD,Victoriaville, -2439077,030000,CSD,Warwick, -2439085,030000,CSD,Saint-Albert, -2439090,030000,CSD,Sainte-Élizabeth-de-Warwick, -2439097,030000,CSD,Kingsey Falls, -2439105,030000,CSD,Sainte-Séraphine, -2439117,030000,CSD,Sainte-Clotilde-de-Horton, -2439130,030000,CSD,Saint-Samuel, -2439135,030000,CSD,Saint-Valère, -2439145,030000,CSD,Saint-Rosaire, -2439150,030000,CSD,Sainte-Anne-du-Sault, -2439155,030000,CSD,Daveluyville, -2439165,030000,CSD,Maddington, -2439170,030000,CSD,Saint-Louis-de-Blandford, -2440,030000,CD,, -2440005,030000,CSD,Ham-Sud, -2440010,030000,CSD,Saint-Adrien, -2440017,030000,CSD,Wotton, -2440025,030000,CSD,Saint-Camille, -2440032,030000,CSD,Saint-Georges-de-Windsor, -2440043,030000,CSD,Asbestos, -2440047,030000,CSD,Danville, -2441,030000,CD,, -2441012,030000,CSD,Saint-Isidore-de-Clifton, -2441020,030000,CSD,Chartierville, -2441027,030000,CSD,La Patrie, -2441037,030000,CSD,Newport, -2441038,030000,CSD,Cookshire-Eaton, -2441055,030000,CSD,Ascot Corner, -2441060,030000,CSD,East Angus, -2441065,030000,CSD,Westbury, -2441070,030000,CSD,Bury, -2441075,030000,CSD,Hampden, -2441080,030000,CSD,Scotstown, -2441085,030000,CSD,Lingwick, -2441098,030000,CSD,Weedon, -2441117,030000,CSD,Dudswell, -2442,030000,CD,, -2442005,030000,CSD,Stoke, -2442020,030000,CSD,Saint-François-Xavier-de-Brompton, -2442025,030000,CSD,Saint-Denis-de-Brompton, -2442032,030000,CSD,Racine, -2442040,030000,CSD,Bonsecours, -2442045,030000,CSD,Lawrenceville, -2442050,030000,CSD,Sainte-Anne-de-la-Rochelle, -2442055,030000,CSD,Valcourt, -2442060,030000,CSD,Valcourt, -2442065,030000,CSD,Maricourt, -2442070,030000,CSD,Kingsbury, -2442075,030000,CSD,Melbourne, -2442078,030000,CSD,Ulverton, -2442088,030000,CSD,Windsor, -2442095,030000,CSD,Val-Joli, -2442098,030000,CSD,Richmond, -2442100,030000,CSD,Saint-Claude, -2442110,030000,CSD,Cleveland, -2443,030000,CD,, -2443027,030000,CSD,Sherbrooke, -2444,030000,CD,, -2444003,030000,CSD,Saint-Malo, -2444005,030000,CSD,Saint-Venant-de-Paquette, -2444010,030000,CSD,East Hereford, -2444015,030000,CSD,Saint-Herménégilde, -2444023,030000,CSD,Dixville, -2444037,030000,CSD,Coaticook, -2444045,030000,CSD,Barnston-Ouest, -2444050,030000,CSD,Stanstead-Est, -2444055,030000,CSD,Sainte-Edwidge-de-Clifton, -2444060,030000,CSD,Martinville, -2444071,030000,CSD,Compton, -2444080,030000,CSD,Waterville, -2445,030000,CD,, -2445008,030000,CSD,Stanstead, -2445020,030000,CSD,Ogden, -2445025,030000,CSD,Stanstead, -2445030,030000,CSD,Potton, -2445035,030000,CSD,Ayer's Cliff, -2445043,030000,CSD,Hatley, -2445050,030000,CSD,North Hatley, -2445055,030000,CSD,Hatley, -2445060,030000,CSD,Sainte-Catherine-de-Hatley, -2445072,030000,CSD,Magog, -2445080,030000,CSD,Saint-Benoît-du-Lac, -2445085,030000,CSD,Austin, -2445093,030000,CSD,Eastman, -2445095,030000,CSD,Bolton-Est, -2445100,030000,CSD,Saint-Étienne-de-Bolton, -2445105,030000,CSD,Stukely-Sud, -2445115,030000,CSD,Orford, -2446,030000,CD,, -2446005,030000,CSD,Abercorn, -2446010,030000,CSD,Frelighsburg, -2446017,030000,CSD,Saint-Armand, -2446025,030000,CSD,Pike River, -2446030,030000,CSD,Stanbridge Station, -2446035,030000,CSD,Bedford, -2446040,030000,CSD,Bedford, -2446045,030000,CSD,Stanbridge East, -2446050,030000,CSD,Dunham, -2446058,030000,CSD,Sutton, -2446065,030000,CSD,Bolton-Ouest, -2446070,030000,CSD,Brome, -2446075,030000,CSD,Lac-Brome, -2446080,030000,CSD,Cowansville, -2446085,030000,CSD,East Farnham, -2446090,030000,CSD,Brigham, -2446095,030000,CSD,Saint-Ignace-de-Stanbridge, -2446100,030000,CSD,Notre-Dame-de-Stanbridge, -2446105,030000,CSD,Sainte-Sabine, -2446112,030000,CSD,Farnham, -2447,030000,CD,, -2446078,030000,CSD,Bromont, -2447010,030000,CSD,Saint-Alphonse-de-Granby, -2447017,030000,CSD,Granby, -2447025,030000,CSD,Waterloo, -2447030,030000,CSD,Warden, -2447035,030000,CSD,Shefford, -2447040,030000,CSD,Saint-Joachim-de-Shefford, -2447047,030000,CSD,Roxton Pond, -2447055,030000,CSD,Sainte-Cécile-de-Milton, -2448,030000,CD,, -2448005,030000,CSD,Béthanie, -2448010,030000,CSD,Roxton Falls, -2448015,030000,CSD,Roxton, -2448020,030000,CSD,Sainte-Christine, -2448028,030000,CSD,Acton Vale, -2448038,030000,CSD,Upton, -2448045,030000,CSD,Saint-Théodore-d'Acton, -2448050,030000,CSD,Saint-Nazaire-d'Acton, -2449,030000,CD,, -2449005,030000,CSD,Saint-Félix-de-Kingsey, -2449015,030000,CSD,Durham-Sud, -2449020,030000,CSD,Lefebvre, -2449025,030000,CSD,L'Avenir, -2449030,030000,CSD,Saint-Lucien, -2449040,030000,CSD,Wickham, -2449048,030000,CSD,Saint-Germain-de-Grantham, -2449058,030000,CSD,Drummondville, -2449070,030000,CSD,Saint-Cyrille-de-Wendover, -2449075,030000,CSD,Notre-Dame-du-Bon-Conseil, -2449080,030000,CSD,Notre-Dame-du-Bon-Conseil, -2449085,030000,CSD,Sainte-Brigitte-des-Saults, -2449095,030000,CSD,Saint-Majorique-de-Grantham, -2449100,030000,CSD,Saint-Edmond-de-Grantham, -2449105,030000,CSD,Saint-Eugène, -2449113,030000,CSD,Saint-Guillaume, -2449125,030000,CSD,Saint-Bonaventure, -2449130,030000,CSD,Saint-Pie-de-Guire, -2450,030000,CD,, -2450005,030000,CSD,Sainte-Eulalie, -2450013,030000,CSD,Aston-Jonction, -2450023,030000,CSD,Saint-Wenceslas, -2450030,030000,CSD,Saint-Célestin, -2450035,030000,CSD,Saint-Célestin, -2450042,030000,CSD,Saint-Léonard-d'Aston, -2450050,030000,CSD,Sainte-Perpétue, -2450057,030000,CSD,Sainte-Monique, -2450065,030000,CSD,Grand-Saint-Esprit, -2450072,030000,CSD,Nicolet, -2450085,030000,CSD,La Visitation-de-Yamaska, -2450090,030000,CSD,Saint-Zéphirin-de-Courval, -2450095,030000,CSD,Saint-Elphège, -2450100,030000,CSD,Baie-du-Febvre, -2450113,030000,CSD,Pierreville, -2450128,030000,CSD,Saint-François-du-Lac, -2450802,030000,CSD,Odanak, -2451,030000,CD,, -2451008,030000,CSD,Maskinongé, -2451015,032710,CSD,Louiseville, -2451020,030000,CSD,Yamachiche, -2451025,030000,CSD,Saint-Barnabé, -2451030,030000,CSD,Saint-Sévère, -2451035,030000,CSD,Saint-Léon-le-Grand, -2451040,030000,CSD,Sainte-Ursule, -2451045,030000,CSD,Saint-Justin, -2451050,030000,CSD,Saint-Édouard-de-Maskinongé, -2451055,030000,CSD,Sainte-Angèle-de-Prémont, -2451060,030000,CSD,Saint-Paulin, -2451065,030000,CSD,Saint-Alexis-des-Monts, -2451070,030000,CSD,Saint-Mathieu-du-Parc, -2451075,030000,CSD,Saint-Élie-de-Caxton, -2451080,030000,CSD,Charette, -2451085,030000,CSD,Saint-Boniface, -2451090,030000,CSD,Saint-Étienne-des-Grès, -2452,030000,CD,, -2452007,030000,CSD,Lavaltrie, -2452017,030000,CSD,Lanoraie, -2452030,030000,CSD,Sainte-Élisabeth, -2452035,032610,CSD,Berthierville, -2452040,030000,CSD,Sainte-Geneviève-de-Berthier, -2452045,030000,CSD,Saint-Ignace-de-Loyola, -2452050,030000,CSD,La Visitation-de-l'Île-Dupas, -2452055,030000,CSD,Saint-Barthélemy, -2452062,030000,CSD,Saint-Cuthbert, -2452070,030000,CSD,Saint-Norbert, -2452075,030000,CSD,Saint-Cléophas-de-Brandon, -2452080,032610,CSD,Saint-Gabriel, -2452085,030000,CSD,Saint-Gabriel-de-Brandon, -2452090,030000,CSD,Saint-Didace, -2452095,030000,CSD,Mandeville, -2453,030000,CD,, -2453005,030000,CSD,Saint-David, -2453010,030000,CSD,Massueville, -2453015,030000,CSD,Saint-Aimé, -2453020,030000,CSD,Saint-Robert, -2453025,030000,CSD,Sainte-Victoire-de-Sorel, -2453032,030000,CSD,Saint-Ours, -2453040,030000,CSD,Saint-Roch-de-Richelieu, -2453050,030000,CSD,Saint-Joseph-de-Sorel, -2453052,030000,CSD,Sorel-Tracy, -2453065,030000,CSD,Sainte-Anne-de-Sorel, -2453072,030000,CSD,Yamaska, -2453085,030000,CSD,Saint-Gérard-Majella, -2454,030000,CD,, -2454008,030000,CSD,Saint-Pie, -2454017,030000,CSD,Saint-Damase, -2454025,030000,CSD,Sainte-Madeleine, -2454030,030000,CSD,Sainte-Marie-Madeleine, -2454035,030000,CSD,La Présentation, -2454048,030000,CSD,Saint-Hyacinthe, -2454060,030000,CSD,Saint-Dominique, -2454065,030000,CSD,Saint-Valérien-de-Milton, -2454072,030000,CSD,Saint-Liboire, -2454090,030000,CSD,Saint-Simon, -2454095,030000,CSD,Sainte-Hélène-de-Bagot, -2454100,030000,CSD,Saint-Hugues, -2454105,030000,CSD,Saint-Barnabé-Sud, -2454110,030000,CSD,Saint-Jude, -2454115,030000,CSD,Saint-Bernard-de-Michaudville, -2454120,030000,CSD,Saint-Louis, -2454125,030000,CSD,Saint-Marcel-de-Richelieu, -2455,030000,CD,, -2455008,030000,CSD,Ange-Gardien, -2455015,030000,CSD,Saint-Paul-d'Abbotsford, -2455023,030000,CSD,Saint-Césaire, -2455030,030000,CSD,Sainte-Angèle-de-Monnoir, -2455037,030000,CSD,Rougemont, -2455048,030000,CSD,Marieville, -2455057,030000,CSD,Richelieu, -2455065,030000,CSD,Saint-Mathias-sur-Richelieu, -2456,030000,CD,, -2456005,030000,CSD,Venise-en-Québec, -2456010,030000,CSD,Saint-Georges-de-Clarenceville, -2456015,030000,CSD,Noyan, -2456023,030000,CSD,Lacolle, -2456030,030000,CSD,Saint-Valentin, -2456035,030000,CSD,Saint-Paul-de-l'Île-aux-Noix, -2456042,030000,CSD,Henryville, -2456050,030000,CSD,Saint-Sébastien, -2456055,030000,CSD,Saint-Alexandre, -2456060,030000,CSD,Sainte-Anne-de-Sabrevois, -2456065,030000,CSD,Saint-Blaise-sur-Richelieu, -2456083,030000,CSD,Saint-Jean-sur-Richelieu, -2456097,030000,CSD,Mont-Saint-Grégoire, -2456105,030000,CSD,Sainte-Brigide-d'Iberville, -2457,030000,CD,, -2457005,030000,CSD,Chambly, -2457010,030000,CSD,Carignan, -2457020,030000,CSD,Saint-Basile-le-Grand, -2457025,030000,CSD,McMasterville, -2457030,030000,CSD,Otterburn Park, -2457033,030000,CSD,Saint-Jean-Baptiste, -2457035,030000,CSD,Mont-Saint-Hilaire, -2457040,030000,CSD,Beloeil, -2457045,030000,CSD,Saint-Mathieu-de-Beloeil, -2457050,030000,CSD,Saint-Marc-sur-Richelieu, -2457057,030000,CSD,Saint-Charles-sur-Richelieu, -2457068,030000,CSD,Saint-Denis-sur-Richelieu, -2457075,030000,CSD,Saint-Antoine-sur-Richelieu, -2458,030000,CD,, -2458007,030000,CSD,Brossard, -2458012,032823,CSD,Saint-Lambert, -2458033,030000,CSD,Boucherville, -2458037,030000,CSD,Saint-Bruno-de-Montarville, -2458227,032410,CSD,Longueuil, -2459,030000,CD,, -2459010,030000,CSD,Sainte-Julie, -2459015,030000,CSD,Saint-Amable, -2459020,032410,CSD,Varennes, -2459025,030000,CSD,Verchères, -2459030,030000,CSD,Calixa-Lavallée, -2459035,030000,CSD,Contrecoeur, -2460,030000,CD,, -2460005,030000,CSD,Charlemagne, -2460013,030000,CSD,Repentigny, -2460020,030000,CSD,Saint-Sulpice, -2460028,030000,CSD,L'Assomption, -2460035,030000,CSD,L'Épiphanie, -2460040,030000,CSD,L'Épiphanie, -2461,030000,CD,, -2461005,030000,CSD,Saint-Paul, -2461013,030000,CSD,Crabtree, -2461020,030000,CSD,Saint-Pierre, -2461025,032620,CSD,Joliette, -2461027,030000,CSD,Saint-Thomas, -2461030,030000,CSD,Notre-Dame-des-Prairies, -2461035,030000,CSD,Saint-Charles-Borromée, -2461040,030000,CSD,Saint-Ambroise-de-Kildare, -2461045,030000,CSD,Notre-Dame-de-Lourdes, -2461050,030000,CSD,Sainte-Mélanie, -2462,030000,CD,, -2462007,030000,CSD,Saint-Félix-de-Valois, -2462015,030000,CSD,Saint-Jean-de-Matha, -2462020,030000,CSD,Sainte-Béatrix, -2462025,030000,CSD,Saint-Alphonse-Rodriguez, -2462030,030000,CSD,Sainte-Marcelline-de-Kildare, -2462037,032620,CSD,Rawdon, -2462047,030000,CSD,Chertsey, -2462053,030000,CSD,Entrelacs, -2462055,030000,CSD,Notre-Dame-de-la-Merci, -2462060,032120,CSD,Saint-Donat, -2462065,030000,CSD,Saint-Côme, -2462070,030000,CSD,Sainte-Émélie-de-l'Énergie, -2462075,030000,CSD,Saint-Damien, -2462080,030000,CSD,Saint-Zénon, -2462085,032110,CSD,Saint-Michel-des-Saints, -2462802,030000,CSD,Manawan, -2462902,030000,CSD,Lac-Minaki, -2462904,030000,CSD,Lac-Devenyns, -2462906,030000,CSD,Baie-de-la-Bouteille, -2462908,032720,CSD,Lac-Matawin, -2462910,030000,CSD,Lac-Legendre, -2462912,030000,CSD,Saint-Guillaume-Nord, -2462914,030000,CSD,Lac-des-Dix-Milles, -2462916,030000,CSD,Lac-Santé, -2462918,030000,CSD,Baie-Obaoca, -2462919,030000,CSD,Lac-Cabasta, -2462920,030000,CSD,Baie-Atibenne, -2462922,030000,CSD,Lac-du-Taureau, -2463,030000,CD,, -2463005,030000,CSD,Sainte-Marie-Salomé, -2463013,030000,CSD,Saint-Jacques, -2463023,030000,CSD,Saint-Alexis, -2463030,030000,CSD,Saint-Esprit, -2463035,030000,CSD,Saint-Roch-de-l'Achigan, -2463040,030000,CSD,Saint-Roch-Ouest, -2463048,030000,CSD,Saint-Lin - Laurentides, -2463055,030000,CSD,Saint-Calixte, -2463060,030000,CSD,Sainte-Julienne, -2463065,030000,CSD,Saint-Liguori, -2464,030000,CD,, -2464008,030000,CSD,Terrebonne, -2464015,032630,CSD,Mascouche, -2465,030000,CD,, -2465005,032420,CSD,Laval, -2466,032400-032410-032420-032430-032440,CD,, -2466007,032400,CSD,Montréal-Est, -2466023,032400,CSD,Montréal, -2466032,030000,CSD,Westmount, -2466047,032400,CSD,Montréal-Ouest, -2466058,030000,CSD,Côte-Saint-Luc, -2466062,030000,CSD,Hampstead, -2466072,030000,CSD,Mont-Royal, -2466087,031610,CSD,Dorval, -2466092,031610,CSD,L'Île-Dorval, -2466097,030000,CSD,Pointe-Claire, -2466102,030000,CSD,Kirkland, -2466107,030000,CSD,Beaconsfield, -2466112,030000,CSD,Baie-D'Urfé, -2466117,030000,CSD,Sainte-Anne-de-Bellevue, -2466127,030000,CSD,Senneville, -2466142,030000,CSD,Dollard-Des Ormeaux, -2466940,032400,CSD,TNO terrestre du TE de Montréal, -2467,030000,CD,, -2467005,030000,CSD,Saint-Mathieu, -2467010,030000,CSD,Saint-Philippe, -2467015,032440,CSD,La Prairie, -2467020,030000,CSD,Candiac, -2467025,030000,CSD,Delson, -2467030,030000,CSD,Sainte-Catherine, -2467035,030000,CSD,Saint-Constant, -2467040,030000,CSD,Saint-Isidore, -2467045,030000,CSD,Mercier, -2467050,032440,CSD,Châteauguay, -2467055,030000,CSD,Léry, -2467802,030000,CSD,Kahnawake, -2467940,030000,CSD,TNO terrestre de la MRC de Roussillon, -2468,030000,CD,, -2468005,030000,CSD,Saint-Bernard-de-Lacolle, -2468010,032550,CSD,Hemmingford, -2468015,032550,CSD,Hemmingford, -2468020,030000,CSD,Sainte-Clotilde, -2468025,030000,CSD,Saint-Patrice-de-Sherrington, -2468030,030000,CSD,Napierville, -2468035,030000,CSD,Saint-Cyprien-de-Napierville, -2468040,030000,CSD,Saint-Jacques-le-Mineur, -2468045,030000,CSD,Saint-Édouard, -2468050,032110,CSD,Saint-Michel, -2468055,032530,CSD,Saint-Rémi, -2469,030000,CD,, -2469005,030000,CSD,Havelock, -2469010,030000,CSD,Franklin, -2469017,030000,CSD,Saint-Chrysostome, -2469025,030000,CSD,Howick, -2469030,030000,CSD,Très-Saint-Sacrement, -2469037,030000,CSD,Ormstown, -2469045,030000,CSD,Hinchinbrooke, -2469050,030000,CSD,Elgin, -2469055,032560,CSD,Huntingdon, -2469060,030000,CSD,Godmanchester, -2469065,030000,CSD,Sainte-Barbe, -2469070,030000,CSD,Saint-Anicet, -2469075,030000,CSD,Dundee, -2469802,030000,CSD,Akwesasne, -2470,030000,CD,, -2470005,030000,CSD,Saint-Urbain-Premier, -2470012,030000,CSD,Sainte-Martine, -2470022,032540,CSD,Beauharnois, -2470030,030000,CSD,Saint-Étienne-de-Beauharnois, -2470035,030000,CSD,Saint-Louis-de-Gonzague, -2470040,030000,CSD,Saint-Stanislas-de-Kostka, -2470052,032540,CSD,Salaberry-de-Valleyfield, -2471,030000,CD,, -2471005,030000,CSD,Rivière-Beaudette, -2471015,030000,CSD,Saint-Télesphore, -2471020,030000,CSD,Saint-Polycarpe, -2471025,030000,CSD,Saint-Zotique, -2471033,030000,CSD,Les Coteaux, -2471040,030000,CSD,Coteau-du-Lac, -2471045,030000,CSD,Saint-Clet, -2471050,030000,CSD,Les Cèdres, -2471055,030000,CSD,Pointe-des-Cascades, -2471060,030000,CSD,L'Île-Perrot, -2471065,030000,CSD,Notre-Dame-de-l'Île-Perrot, -2471070,030000,CSD,Pincourt, -2471075,032520,CSD,Terrasse-Vaudreuil, -2471083,032520,CSD,Vaudreuil-Dorion, -2471090,032520,CSD,Vaudreuil-sur-le-Lac, -2471095,030000,CSD,L'Île-Cadieux, -2471100,030000,CSD,Hudson, -2471105,030000,CSD,Saint-Lazare, -2471110,030000,CSD,Sainte-Marthe, -2471115,030000,CSD,Sainte-Justine-de-Newton, -2471125,030000,CSD,Très-Saint-Rédempteur, -2471133,030000,CSD,Rigaud, -2471140,030000,CSD,Pointe-Fortune, -2472,030000,CD,, -2472005,032330,CSD,Saint-Eustache, -2472010,030000,CSD,Deux-Montagnes, -2472015,030000,CSD,Sainte-Marthe-sur-le-Lac, -2472020,030000,CSD,Pointe-Calumet, -2472025,030000,CSD,Saint-Joseph-du-Lac, -2472032,030000,CSD,Oka, -2472043,030000,CSD,Saint-Placide, -2472802,030000,CSD,Kanesatake, -2473005,030000,CSD,Boisbriand, -2473,030000,CD,, -2473010,030000,CSD,Sainte-Thérèse, -2473015,030000,CSD,Blainville, -2473020,030000,CSD,Rosemère, -2473025,030000,CSD,Lorraine, -2473030,030000,CSD,Bois-des-Filion, -2473035,030000,CSD,Sainte-Anne-des-Plaines, -2474,030000,CD,, -2474005,030000,CSD,Mirabel, -2475,030000,CD,, -2475005,030000,CSD,Saint-Colomban, -2475017,032310,CSD,Saint-Jérôme, -2475028,030000,CSD,Sainte-Sophie, -2475040,030000,CSD,Prévost, -2475045,030000,CSD,Saint-Hippolyte, -2476,030000,CD,, -2476008,030000,CSD,Saint-André-d'Argenteuil, -2476020,032320,CSD,Lachute, -2476025,030000,CSD,Gore, -2476030,030000,CSD,Mille-Isles, -2476035,030000,CSD,Wentworth, -2476043,030000,CSD,Brownsburg-Chatham, -2476052,030000,CSD,Grenville-sur-la-Rouge, -2476055,030000,CSD,Grenville, -2476065,030000,CSD,Harrington, -2477,030000,CD,, -2477011,030000,CSD,Estérel, -2477012,030000,CSD,Sainte-Marguerite-du-Lac-Masson, -2477022,032220,CSD,Sainte-Adèle, -2477030,030000,CSD,Piedmont, -2477035,030000,CSD,Sainte-Anne-des-Lacs, -2477043,032220,CSD,Saint-Sauveur, -2477050,030000,CSD,Morin-Heights, -2477055,030000,CSD,Lac-des-Seize-Îles, -2477060,030000,CSD,Wentworth-Nord, -2477065,030000,CSD,Saint-Adolphe-d'Howard, -2478,030000,CD,, -2478005,030000,CSD,Val-Morin, -2478010,030000,CSD,Val-David, -2478015,030000,CSD,Lantier, -2478020,030000,CSD,Sainte-Lucie-des-Laurentides, -2478032,032210,CSD,Sainte-Agathe-des-Monts, -2478042,030000,CSD,Ivry-sur-le-Lac, -2478047,030000,CSD,Saint-Faustin - Lac-Carré, -2478050,030000,CSD,Barkmere, -2478055,030000,CSD,Montcalm, -2478060,030000,CSD,Arundel, -2478065,030000,CSD,Huberdeau, -2478070,030000,CSD,Amherst, -2478075,030000,CSD,Brébeuf, -2478095,030000,CSD,Lac-Supérieur, -2478100,030000,CSD,Val-des-Lacs, -2478102,032120-032210,CSD,Mont-Tremblant, -2478115,030000,CSD,La Conception, -2478120,030000,CSD,Labelle, -2478127,030000,CSD,Lac-Tremblant-Nord, -2478130,031820,CSD,La Minerve, -2478802,030000,CSD,Doncaster, -2479,030000,CD,, -2479005,030000,CSD,Notre-Dame-du-Laus, -2479010,030000,CSD,Notre-Dame-de-Pontmain, -2479015,030000,CSD,Lac-du-Cerf, -2479022,030000,CSD,Saint-Aimé-du-Lac-des-Îles, -2479025,030000,CSD,Kiamika, -2479030,030000,CSD,Nominingue, -2479037,031820,CSD,Rivière-Rouge, -2479047,030000,CSD,La Macaza, -2479050,030000,CSD,L'Ascension, -2479060,030000,CSD,Lac-Saguay, -2479065,030000,CSD,Chute-Saint-Philippe, -2479078,030000,CSD,Lac-des-Écorces, -2479088,031800-031810,CSD,Mont-Laurier, -2479097,030000,CSD,Ferme-Neuve, -2479105,030000,CSD,Lac-Saint-Paul, -2479110,030000,CSD,Mont-Saint-Michel, -2479115,030000,CSD,Sainte-Anne-du-Lac, -2479902,030000,CSD,Lac-de-la-Pomme, -2479904,030000,CSD,Lac-Akonapwehikan, -2479906,030000,CSD,Lac-Wagwabika, -2479910,030000,CSD,Lac-Bazinet, -2479912,030000,CSD,Lac-De La Bidière, -2479914,030000,CSD,Lac-Oscar, -2479916,030000,CSD,Lac-de-la-Maison-de-Pierre, -2479920,030000,CSD,Baie-des-Chaloupes, -2479922,030000,CSD,Lac-Douaire, -2479924,030000,CSD,Lac-Ernest, -2479926,030000,CSD,Lac-Marguerite, -2480,030000,CD,, -2480005,030000,CSD,Fassett, -2480010,030000,CSD,Montebello, -2480015,030000,CSD,Notre-Dame-de-Bonsecours, -2480020,030000,CSD,Notre-Dame-de-la-Paix, -2480027,030000,CSD,Saint-André-Avellin, -2480037,031930,CSD,Papineauville, -2480045,030000,CSD,Plaisance, -2480050,030000,CSD,Thurso, -2480055,030000,CSD,Lochaber, -2480060,030000,CSD,Lochaber-Partie-Ouest, -2480065,030000,CSD,Mayo, -2480070,030000,CSD,Saint-Sixte, -2480078,030000,CSD,Ripon, -2480085,030000,CSD,Mulgrave-et-Derry, -2480090,030000,CSD,Montpellier, -2480095,030000,CSD,Lac-Simon, -2480103,031930,CSD,Chénéville, -2480110,030000,CSD,Namur, -2480115,030000,CSD,Boileau, -2480125,030000,CSD,Saint-Émile-de-Suffolk, -2480130,030000,CSD,Lac-des-Plages, -2480135,030000,CSD,Duhamel, -2480140,030000,CSD,Val-des-Bois, -2480145,030000,CSD,Bowman, -2481,030000,CD,, -2481017,031100,CSD,Gatineau, -2482,030000,CD,, -2482005,030000,CSD,L'Ange-Gardien, -2482010,030000,CSD,Notre-Dame-de-la-Salette, -2482015,030000,CSD,Val-des-Monts, -2482020,030000,CSD,Cantley, -2482025,030000,CSD,Chelsea, -2482030,031700,CSD,Pontiac, -2482035,030000,CSD,La Pêche, -2483,030000,CD,, -2483005,030000,CSD,Denholm, -2483010,031910,CSD,Low, -2483015,030000,CSD,Kazabazua, -2483020,030000,CSD,Lac-Sainte-Marie, -2483032,031920,CSD,Gracefield, -2483040,030000,CSD,Cayamant, -2483045,030000,CSD,Blue Sea, -2483050,030000,CSD,Bouchette, -2483055,031100,CSD,Sainte-Thérèse-de-la-Gatineau, -2483060,030000,CSD,Messines, -2483065,031920,CSD,Maniwaki, -2483070,030000,CSD,Déléage, -2483075,030000,CSD,Egan-Sud, -2483085,030000,CSD,Bois-Franc, -2483088,030000,CSD,Montcerf-Lytton, -2483090,030000,CSD,Aumond, -2483095,030000,CSD,Grand-Remous, -2483802,030000,CSD,Kitigan Zibi, -2483804,030000,CSD,Lac-Rapide, -2483902,030000,CSD,Lac-Pythonga, -2483904,030000,CSD,Cascades-Malignes, -2483906,030000,CSD,Lac-Lenôtre, -2483908,030000,CSD,Lac-Moselle, -2483912,030000,CSD,Dépôt-Échouani, -2484,030000,CD,, -2484005,030000,CSD,Bristol, -2484010,031720,CSD,Shawville, -2484015,030000,CSD,Clarendon, -2484020,030000,CSD,Portage-du-Fort, -2484025,030000,CSD,Bryson, -2484030,030000,CSD,Campbell's Bay, -2484035,030000,CSD,L'Île-du-Grand-Calumet, -2484040,030000,CSD,Litchfield, -2484045,030000,CSD,Thorne, -2484050,030000,CSD,Alleyn-et-Cawood, -2484055,030000,CSD,Otter Lake, -2484060,030000,CSD,Fort-Coulonge, -2484065,030000,CSD,Mansfield-et-Pontefract, -2484070,030000,CSD,Waltham, -2484082,030000,CSD,L'Isle-aux-Allumettes, -2484090,030000,CSD,Chichester, -2484095,030000,CSD,Sheenboro, -2484100,031710,CSD,Rapides-des-Joachims, -2484902,030000,CSD,Lac-Nilgaut, -2485,030000,CD,, -2485005,031520,CSD,Témiscaming, -2485010,030000,CSD,Kipawa, -2485015,030000,CSD,Saint-Édouard-de-Fabre, -2485020,030000,CSD,Béarn, -2485025,031510,CSD,Ville-Marie, -2485030,030000,CSD,Duhamel-Ouest, -2485037,030000,CSD,Lorrainville, -2485045,030000,CSD,Saint-Bruno-de-Guigues, -2485050,030000,CSD,Laverlochère, -2485055,030000,CSD,Fugèreville, -2485060,030000,CSD,Latulipe-et-Gaboury, -2485065,030000,CSD,Belleterre, -2485070,030000,CSD,Laforce, -2485075,030000,CSD,Moffet, -2485080,030000,CSD,Angliers, -2485085,030000,CSD,Saint-Eugène-de-Guigues, -2485090,030000,CSD,Notre-Dame-du-Nord, -2485095,030000,CSD,Guérin, -2485100,030000,CSD,Nédélec, -2485105,030000,CSD,Rémigny, -2485802,030000,CSD,Kebaowek, -2485803,030000,CSD,Hunter's Point, -2485804,030000,CSD,Winneway, -2485806,030000,CSD,Timiskaming, -2485905,030000,CSD,Laniel, -2485907,031500,CSD,Les Lacs-du-Témiscamingue, -2486,030000,CD,, -2486042,031450,CSD,Rouyn-Noranda, -2487,030000,CD,, -2487005,030000,CSD,Duparquet, -2487010,030000,CSD,Rapide-Danseur, -2487015,030000,CSD,Roquemaure, -2487020,030000,CSD,Gallichan, -2487025,030000,CSD,Palmarolle, -2487030,030000,CSD,Sainte-Germaine-Boulé, -2487035,030000,CSD,Poularies, -2487042,030000,CSD,Taschereau, -2487050,030000,CSD,Authier, -2487058,030000,CSD,Macamic, -2487070,030000,CSD,Sainte-Hélène-de-Mancebourg, -2487075,030000,CSD,Clerval, -2487080,030000,CSD,La Reine, -2487085,030000,CSD,Dupuy, -2487090,031410,CSD,La Sarre, -2487095,030000,CSD,Chazel, -2487100,030000,CSD,Authier-Nord, -2487105,030000,CSD,Val-Saint-Gilles, -2487110,030000,CSD,Clermont, -2487115,030000,CSD,Normétal, -2487120,032823,CSD,Saint-Lambert, -2487902,030000,CSD,Lac-Duparquet, -2487904,030000,CSD,Rivière-Ojima, -2488,030000,CD,, -2488005,030000,CSD,Champneuf, -2488010,030000,CSD,Rochebaucourt, -2488015,030000,CSD,La Morandière, -2488022,030000,CSD,Barraute, -2488030,030000,CSD,La Corne, -2488035,030000,CSD,Landrienne, -2488040,030000,CSD,Saint-Marc-de-Figuery, -2488045,030000,CSD,La Motte, -2488050,030000,CSD,Saint-Mathieu-d'Harricana, -2488055,031420,CSD,Amos, -2488060,030000,CSD,Saint-Félix-de-Dalquier, -2488065,030000,CSD,Saint-Dominique-du-Rosaire, -2488070,030000,CSD,Berry, -2488075,030000,CSD,Trécesson, -2488080,030000,CSD,Launay, -2488085,030000,CSD,Sainte-Gertrude-Manneville, -2488090,030000,CSD,Preissac, -2488802,030000,CSD,Pikogan, -2488902,030000,CSD,Lac-Despinassy, -2488904,030000,CSD,Lac-Chicobi, -2489,030000,CD,, -2489008,031470,CSD,Val-d'Or, -2489010,030000,CSD,Rivière-Héva, -2489015,031460,CSD,Malartic, -2489040,031440,CSD,Senneterre, -2489045,031440,CSD,Senneterre, -2489050,030000,CSD,Belcourt, -2489802,030000,CSD,Kitcisakik, -2489804,030000,CSD,Lac-Simon, -2489902,030000,CSD,Matchi-Manitou, -2489908,030000,CSD,Lac-Metei, -2489910,030000,CSD,Réservoir-Dozois, -2489912,030000,CSD,Lac-Granet, -2490,030000,CD,, -2490012,030000,CSD,La Tuque, -2490017,030000,CSD,La Bostonnais, -2490027,030000,CSD,Lac-Édouard, -2490801,030000,CSD,Coucoucache, -2490802,030000,CSD,Wemotaci, -2490804,030000,CSD,Obedjiwan, -2491,030000,CD,, -2491005,030000,CSD,Lac-Bouchette, -2491010,030000,CSD,Saint-André-du-Lac-Saint-Jean, -2491015,030000,CSD,Saint-François-de-Sales, -2491020,030000,CSD,Chambord, -2491025,034340,CSD,Roberval, -2491030,030000,CSD,Sainte-Hedwidge, -2491035,030000,CSD,Saint-Prime, -2491042,034340,CSD,Saint-Félicien, -2491050,030000,CSD,La Doré, -2491802,030000,CSD,Mashteuiatsh, -2491902,034310,CSD,Lac-Ashuapmushuan, -2492,030000,CD,, -2492005,030000,CSD,Saint-Augustin, -2492010,034320,CSD,Péribonka, -2492015,030000,CSD,Sainte-Jeanne-d'Arc, -2492022,030000,CSD,Dolbeau-Mistassini, -2492030,030000,CSD,Albanel, -2492040,034320,CSD,Normandin, -2492045,030000,CSD,Saint-Thomas-Didyme, -2492050,030000,CSD,Saint-Edmond-les-Plaines, -2492055,030000,CSD,Girardville, -2492060,030000,CSD,Notre-Dame-de-Lorette, -2492065,030000,CSD,Saint-Eugène-d'Argentenay, -2492070,030000,CSD,Saint-Stanislas, -2492902,030000,CSD,Passes-Dangereuses, -2492904,030000,CSD,Rivière-Mistassini, -2493,030000,CD,, -2493005,034330,CSD,Desbiens, -2493012,030000,CSD,Métabetchouan - Lac-à-la-Croix, -2493020,030000,CSD,Hébertville, -2493025,030000,CSD,Hébertville-Station, -2493030,030000,CSD,Saint-Bruno, -2493035,030000,CSD,Saint-Gédéon, -2493042,034330,CSD,Alma, -2493045,030000,CSD,Saint-Nazaire, -2493055,030000,CSD,Labrecque, -2493060,030000,CSD,Lamarche, -2493065,030000,CSD,L'Ascension-de-Notre-Seigneur, -2493070,030000,CSD,Saint-Henri-de-Taillon, -2493075,030000,CSD,Sainte-Monique, -2493080,030000,CSD,Saint-Ludger-de-Milot, -2493902,030000,CSD,Mont-Apica, -2493904,030000,CSD,Lac-Moncouche, -2493906,030000,CSD,Lac-Achouakan, -2493908,030000,CSD,Belle-Rivière, -2494,030000,CD,, -2494068,030000,CSD,Saguenay, -2494205,030000,CSD,Petit-Saguenay, -2494210,030000,CSD,L'Anse-Saint-Jean, -2494215,030000,CSD,Rivière-Éternité, -2494220,030000,CSD,Ferland-et-Boilleau, -2494225,030000,CSD,Saint-Félix-d'Otis, -2494230,030000,CSD,Sainte-Rose-du-Nord, -2494235,030000,CSD,Saint-Fulgence, -2494240,030000,CSD,Saint-Honoré, -2494245,030000,CSD,Saint-David-de-Falardeau, -2494250,030000,CSD,Bégin, -2494255,030000,CSD,Saint-Ambroise, -2494260,030000,CSD,Saint-Charles-de-Bourget, -2494265,030000,CSD,Larouche, -2494926,030000,CSD,Lalemant, -2494928,030000,CSD,Lac-Ministuk, -2494930,030000,CSD,Mont-Valin, -2495,030000,CD,, -2495005,030000,CSD,Tadoussac, -2495010,030000,CSD,Sacré-Coeur, -2495018,030000,CSD,Les Bergeronnes, -2495025,030000,CSD,Les Escoumins, -2495032,030000,CSD,Longue-Rive, -2495040,032811,CSD,Portneuf-sur-Mer, -2495045,030000,CSD,Forestville, -2495050,030000,CSD,Colombier, -2495902,030000,CSD,Lac-au-Brochet, -2496,030000,CD,, -2496005,030000,CSD,Baie-Trinité, -2496010,030000,CSD,Godbout, -2496015,030000,CSD,Franquelin, -2496020,030000,CSD,Baie-Comeau, -2496025,030000,CSD,Pointe-Lebel, -2496030,030000,CSD,Pointe-aux-Outardes, -2496035,030000,CSD,Chute-aux-Outardes, -2496040,030000,CSD,Ragueneau, -2496802,030000,CSD,Pessamit, -2496902,030000,CSD,Rivière-aux-Outardes, -2497,030000,CD,, -2497007,030000,CSD,Sept-Îles, -2497022,030000,CSD,Port-Cartier, -2497035,033400,CSD,Fermont, -2497040,033300,CSD,Schefferville, -does not exist ,030000,CSD,, -2497804,030000,CSD,Maliotenam, -2497806,030000,CSD,Kawawachikamach, -2497808,030000,CSD,Matimekosh, -2497810,030000,CSD,Lac-John, -2497902,030000,CSD,Rivière-Nipissis, -2497904,030000,CSD,Lac-Walker, -2497906,030000,CSD,Rivière-Mouchalagane, -2497908,030000,CSD,Caniapiscau, -2497912,030000,CSD,Lac-Juillet, -2497914,030000,CSD,Lac-Vacher, -2498,036600,CD,, -2498005,036600,CSD,Blanc-Sablon, -2498010,030000,CSD,Bonne-Espérance, -2498012,030000,CSD,Saint-Augustin, -2498014,030000,CSD,Gros-Mécatina, -2498015,030000,CSD,Côte-Nord-du-Golfe-du-Saint-Laurent, -2498020,036700,CSD,L'Île-d'Anticosti, -2498025,036400,CSD,Natashquan, -2498030,030000,CSD,Aguanish, -2498035,030000,CSD,Baie-Johan-Beetz, -2498040,030000,CSD,Havre-Saint-Pierre, -2498045,030000,CSD,Longue-Pointe-de-Mingan, -2498050,030000,CSD,Rivière-Saint-Jean, -2498055,030000,CSD,Rivière-au-Tonnerre, -2498802,030000,CSD,Pakuashipi, -2498804,030000,CSD,La Romaine, -2498808,030000,CSD,Mingan, -2498904,030000,CSD,Lac-Jérôme, -2498912,030000,CSD,Petit-Mécatina, -2499,030000,CD,, -2499005,031430,CSD,Lebel-sur-Quévillon, -2499010,030000,CSD,Waswanipi, -2499015,031300,CSD,Matagami, -2499020,030000,CSD,Chapais, -2499025,034100,CSD,Chibougamau, -2499030,030000,CSD,Mistissini, -2499035,031200,CSD,Waskaganish, -2499040,030000,CSD,Nemaska, -2499045,030000,CSD,Eastmain, -2499050,030000,CSD,Wemindji, -2499055,030000,CSD,Chisasibi, -2499060,033100,CSD,Baie-James, -2499065,030000,CSD,Kawawachikamach, -2499070,030000,CSD,Whapmagoostui, -2499075,038600,CSD,Kuujjuarapik, -2499080,038500,CSD,Umiujaq, -2499085,038400,CSD,Inukjuak, -2499090,039800,CSD,Kangiqsualujjuaq, -2499095,030000,CSD,Kuujjuaq, -2499100,039600,CSD,Tasiujaq, -2499105,039500,CSD,Aupaluk, -2499110,039400,CSD,Kangirsuk, -2499115,039300,CSD,Quaqtaq, -2499120,038300,CSD,Puvirnituq, -2499125,038200,CSD,Akulivik, -2499130,039200,CSD,Kangiqsujuaq, -2499135,039100,CSD,Salluit, -2499140,038100,CSD,Ivujivik, -2499802,030000,CSD,Waswanipi, -2499804,030000,CSD,Mistissini, -2499806,031200,CSD,Waskaganish, -2499808,030000,CSD,Nemaska, -2499810,030000,CSD,Eastmain, -2499812,030000,CSD,Wemindji, -2499814,030000,CSD,Chisasibi, -2499816,030000,CSD,Whapmagoostui, -2499818,030000,CSD,Oujé-Bougoumou, -2499875,030000,CSD,Kiggaluk, -2499877,038600,CSD,Kuujjuarapik, -2499878,038500,CSD,Umiujaq, -2499879,038400,CSD,Inukjuak, -2499883,038200,CSD,Akulivik, -2499887,039100,CSD,Salluit, -2499888,039200,CSD,Kangiqsujuaq, -2499891,039500,CSD,Aupaluk, -2499892,039600,CSD,Tasiujaq, -2499893,039700,CSD,Kuujjuaq, -2499894,039800,CSD,Kangiqsualujjuaq, -2499896,030000,CSD,Killiniq, -2499902,030000,CSD,Rivière-Koksoak, -2499904,030000,CSD,Baie-d'Hudson, -13,010000,PT,New Brunswick, -1301,015500,CD,Saint John, -1301002,010000,CSD,St. Martins, -1301006,015500,CSD,Saint John, -1301016,010000,CSD,Musquash, -1301001,010000,CSD,Saint Martins, -1301004,010000,CSD,Simonds, -1302,015600-015700,CD,Charlotte, -1302044,010000,CSD,Dumbarton, -1302012,010000,CSD,Blacks Harbour, -1302006,010000,CSD,West Isles, -1302008,010000,CSD,Lepreau, -1302039,010000,CSD,Saint James, -1302042,010000,CSD,Saint David, -1302028,010000,CSD,Saint Croix, -1302034,015600,CSD,Saint Stephen, -1302024,010000,CSD,Saint Andrews, -1302031,010000,CSD,Dufferin, -1302001,015700,CSD,Grand Manan, -1302016,010000,CSD,Saint George, -1302021,010000,CSD,Saint Patrick, -1302004,010000,CSD,Campobello, -1302052,015700,CSD,Grand Manan, -1302014,010000,CSD,Clarendon, -1302037,015600,CSD,St. Stephen, -1302026,010000,CSD,Saint Andrews, -1302018,010000,CSD,St. George, -1302011,010000,CSD,Pennfield, -1303,015200,CD,Sunbury, -1303001,010000,CSD,Blissville, -1303006,010000,CSD,Fredericton Junction, -1303016,010000,CSD,Maugerville, -1303008,010000,CSD,Lincoln, -1303018,010000,CSD,Northfield, -1303012,015200,CSD,Oromocto, -1303004,010000,CSD,Gladstone, -1303014,010000,CSD,Sheffield, -1303013,015200,CSD,Oromocto 26, -1303011,010000,CSD,Burton, -1303005,010000,CSD,Tracy, -1304,010000,,CD, -1304018,010000,CSD,Waterborough, -1304011,010000,CSD,Cambridge, -1304022,010000,CSD,Minto, -1304013,010000,CSD,Cambridge-Narrows, -1304021,010000,CSD,Canning, -1304025,010000,CSD,Chipman, -1304014,010000,CSD,Johnston, -1304004,010000,CSD,Gagetown, -1304016,010000,CSD,Brunswick, -1304008,010000,CSD,Wickham, -1304005,010000,CSD,Gagetown, -1304006,010000,CSD,Hampstead, -1304024,010000,CSD,Chipman, -1305,015400,CD,Kings, -1304001,010000,CSD,Petersville, -1305034,010000,CSD,Springfield, -1305004,010000,CSD,Upham, -1305024,010000,CSD,Waterford, -1305023,015400,CSD,Sussex Corner, -1305018,010000,CSD,Norton, -1305057,010000,CSD,Quispamsis, -1305008,010000,CSD,Rothesay, -1305011,010000,CSD,Westfield, -1305015,010000,CSD,Grand Bay-Westfield, -1305028,010000,CSD,Havelock, -1305021,015400,CSD,Sussex, -1305045,010000,CSD,Rothesay, -1305031,010000,CSD,Studholm, -1305036,010000,CSD,Kars, -1305038,010000,CSD,Greenwich, -1305014,010000,CSD,Kingston, -1305007,010000,CSD,Hampton, -1305001,010000,CSD,Hammond, -1305006,010000,CSD,Hampton, -1305026,010000,CSD,Cardwell, -1305022,015400,CSD,Sussex, -1305016,010000,CSD,Norton, -1306,010000,CD,Albert, -1306008,010000,CSD,Elgin, -1306020,010000,CSD,Riverview, -1306004,010000,CSD,Harvey, -1306006,010000,CSD,Alma, -1306007,010000,CSD,Alma, -1306014,010000,CSD,Coverdale, -1306011,010000,CSD,Hillsborough, -1306025,010000,CSD,Hillsborough, -1306003,010000,CSD,Riverside-Albert, -1306001,010000,CSD,Hopewell, -1307,010000,CD,Westmorland, -1307016,010000,CSD,Shediac, -1307008,010000,CSD,Sackville, -1307022,016400,CSD,Moncton, -1307013,010000,CSD,Memramcook, -1307019,016400,CSD,Moncton, -1307009,010000,CSD,Sackville, -1307007,010000,CSD,Cap-Pelé, -1307001,010000,CSD,Westmorland, -1307045,010000,CSD,Dieppe, -1307011,010000,CSD,Dorchester, -1307029,010000,CSD,Petitcodiac, -1307014,010000,CSD,Fort Folly 1, -1307005,010000,CSD,Beaubassin East / Beaubassin-est, -1307024,010000,CSD,Salisbury, -1307002,010000,CSD,Port Elgin, -1307052,010000,CSD,Shediac, -1307012,010000,CSD,Dorchester, -1307004,010000,CSD,Botsford, -1307028,010000,CSD,Salisbury, -1308,016300,CD,Kent, -1308017,010000,CSD,Rexton, -1308012,010000,CSD,Huskisson, -1308008,010000,CSD,Saint-Paul, -1308021,010000,CSD,Saint-Louis, -1308020,010000,CSD,Indian Island 28, -1308003,010000,CSD,Buctouche 16, -1308014,010000,CSD,Weldford, -1308007,010000,CSD,Saint-Antoine, -1308026,016100,CSD,Carleton, -1308016,010000,CSD,Richibucto, -1308024,010000,CSD,Acadieville, -1308022,010000,CSD,Saint-Louis de Kent, -1308001,010000,CSD,Dundas, -1308015,010000,CSD,Richibucto 15, -1308010,010000,CSD,Harcourt, -1308019,010000,CSD,Saint-Charles, -1308006,010000,CSD,Saint Mary, -1308018,010000,CSD,Richibucto, -1308004,010000,CSD,Wellington, -1308005,010000,CSD,Bouctouche, -1309,010000,CD,Northumberland, -1309044,010000,CSD,Burnt Church 14, -1309031,010000,CSD,Newcastle, -1309021,010000,CSD,Blissfield, -1309006,010000,CSD,Chatham, -1309018,016200,CSD,Blackville, -1309011,010000,CSD,Derby, -1309027,017600,CSD,Upper Miramichi, -1309022,016200,CSD,Doaktown, -1309036,010000,CSD,Alnwick, -1309026,010000,CSD,Southesk, -1309023,010000,CSD,Red Bank 4, -1309017,010000,CSD,Rogersville, -1309019,016200,CSD,Blackville, -1309001,010000,CSD,Hardwicke, -1309004,010000,CSD,Glenelg, -1309034,010000,CSD,Big Hole Tract 8 (South Half), -1309047,010000,CSD,Tabusintac 9, -1309014,010000,CSD,Nelson, -1309038,010000,CSD,Neguac, -1309028,010000,CSD,Northesk, -1309050,017600,CSD,Miramichi, -1309035,010000,CSD,Eel Ground 2, -1309016,010000,CSD,Rogersville, -1310,015100,CD,York, -1310005,010000,CSD,Harvey, -1310006,010000,CSD,McAdam, -1310013,010000,CSD,Meductic, -1310011,010000,CSD,Canterbury, -1310036,016200,CSD,Stanley, -1310024,010000,CSD,Southampton, -1310032,015100,CSD,Fredericton, -1310021,010000,CSD,Queensbury, -1310034,010000,CSD,Devon 30, -1310001,010000,CSD,New Maryland, -1310031,010000,CSD,Saint Marys, -1310037,016200,CSD,Stanley, -1310012,010000,CSD,Canterbury, -1310025,010000,CSD,Millville, -1310026,010000,CSD,Bright, -1310018,010000,CSD,Kingsclear, -1310002,010000,CSD,New Maryland, -1310016,010000,CSD,Prince William, -1310007,010000,CSD,McAdam, -1310014,010000,CSD,Dumfries, -1310054,010000,CSD,Nackawic, -1310028,010000,CSD,Douglas, -1310019,010000,CSD,Kingsclear 6, -1310004,010000,CSD,Manners Sutton, -1310008,010000,CSD,North Lake, -1311,016100,CD,Carleton, -1311018,010000,CSD,Wilmot, -1311019,010000,CSD,Centreville, -1311005,016100,CSD,Woodstock 23, -1311024,010000,CSD,Peel, -1311012,010000,CSD,Hartland, -1311008,010000,CSD,Northampton, -1311026,010000,CSD,Aberdeen, -1311004,016100,CSD,Woodstock, -1311001,010000,CSD,Richmond, -1311028,016300,CSD,Kent, -1311011,010000,CSD,Brighton, -1311031,010000,CSD,Wicklow, -1311027,010000,CSD,Florenceville-Bristol, -1311014,010000,CSD,Wakefield, -1311030,010000,CSD,Bath, -1311021,010000,CSD,Simonds, -1311006,016100,CSD,Woodstock, -1312,017300,CD,Victoria, -1312002,010000,CSD,Aroostook, -1312023,010000,CSD,Drummond, -1312019,017300,CSD,Grand Falls / Grand-Sault, -1312008,010000,CSD,Gordon, -1312006,010000,CSD,Perth-Andover, -1312016,017300,CSD,Grand Falls, -1312021,010000,CSD,Drummond, -1312011,010000,CSD,Lorne, -1312001,010000,CSD,Andover, -1312014,010000,CSD,Denmark, -1312009,010000,CSD,Plaster Rock, -1312007,010000,CSD,Tobique 20, -1312004,010000,CSD,Perth, -1313,017100,CD,Madawaska, -1313022,010000,CSD,Saint-Joseph, -1313004,010000,CSD,Saint-Léonard, -1313012,010000,CSD,Sainte-Anne-de-Madawaska, -1313039,010000,CSD,Clair, -1313024,010000,CSD,Saint-Jacques, -1313028,017100,CSD,Madawaska, -1313027,017100,CSD,Edmundston, -1313033,010000,CSD,St. Hilaire, -1313038,010000,CSD,Clair, -1313042,010000,CSD,Saint-François de Madawaska, -1313036,010000,CSD,Lac-Baker, -1313020,010000,CSD,St. Basile 10, -1313032,010000,CSD,Saint-Hilaire, -1313008,010000,CSD,Notre-Dame-de-Lourdes, -1313006,010000,CSD,St. Leonard, -1313041,010000,CSD,Saint-François, -1313001,010000,CSD,Saint-André, -1313011,010000,CSD,Sainte-Anne, -1313034,010000,CSD,Baker Brook, -1313002,010000,CSD,Saint-André, -1313037,010000,CSD,Lac Baker, -1313015,010000,CSD,Rivière-Verte, -1313035,010000,CSD,Baker-Brook, -1313018,010000,CSD,Saint-Basile, -1313014,010000,CSD,Rivière-Verte, -1314,017210-017220,CD,Restigouche, -1314015,010000,CSD,Tide Head, -1314017,010000,CSD,Dalhousie, -1314021,010000,CSD,Saint-Quentin, -1314001,010000,CSD,Durham, -1314004,010000,CSD,Charlo, -1314012,010000,CSD,Addington, -1314019,010000,CSD,Kedgwick, -1314014,017200-017220,CSD,Campbellton, -1314025,010000,CSD,Belledune, -1314016,010000,CSD,Eldon, -1314010,010000,CSD,Eel River 3, -1314005,010000,CSD,Balmoral, -1314008,010000,CSD,Dalhousie, -1314011,010000,CSD,Eel River Crossing, -1314022,010000,CSD,Saint-Quentin, -1314006,010000,CSD,Balmoral, -1314026,010000,CSD,Indian Ranch, -1314013,010000,CSD,Atholville, -1314003,010000,CSD,Colborne, -1314018,010000,CSD,Grimmer, -1315,010000,CD,Gloucester, -1315029,010000,CSD,Shippagan, -1315026,010000,CSD,Caraquet, -1315038,010000,CSD,Grande-Anse, -1315008,017500,CSD,Bathurst, -1315006,010000,CSD,Allardville, -1315013,010000,CSD,Pointe-Verte, -1315032,010000,CSD,Lamèque, -1315012,010000,CSD,Beresford, -1315036,010000,CSD,Bertrand, -1315022,010000,CSD,Saint-Isidore, -1315033,010000,CSD,Sainte-Marie - Saint-Raphaël, -1315028,010000,CSD,Caraquet, -1315024,010000,CSD,Inkerman, -1315037,010000,CSD,Nigadoo, -1315011,017500,CSD,Bathurst, -1315027,010000,CSD,Bas-Caraquet, -1315001,010000,CSD,Saumarez, -1315014,010000,CSD,Petit-Rocher, -1315010,010000,CSD,Pabineau 11, -1315040,010000,CSD,Maisonnette, -1315017,010000,CSD,Saint-Léolin, -1315021,010000,CSD,Saint-Isidore, -1315015,010000,CSD,Beresford, -1315016,010000,CSD,New Bandon, -1315030,010000,CSD,Le Goulet, -1315019,010000,CSD,Paquetville, -1315020,010000,CSD,Paquetville, -1315003,010000,CSD,Tracadie-Sheila, -1315031,010000,CSD,Shippagan, -12,010000,PT,Nova Scotia, -1201,011600,CD,Shelburne, -1201009,010000,CSD,Lockeport, -1201006,011600,CSD,Shelburne, -1201004,010000,CSD,Clark's Harbour, -1201001,010000,CSD,Barrington, -1201008,011600,CSD,Shelburne, -1202,011700,CD,Yarmouth, -1202006,011700,CSD,Yarmouth, -1202001,010000,CSD,Argyle, -1202004,011700,CSD,Yarmouth, -1202040,011700,CSD,Yarmouth 33, -1203,011300,CD,Digby, -1203006,011300,CSD,Digby, -1203009,010000,CSD,Bear River (Part) 6, -1203004,011300,CSD,Digby, -1203001,010000,CSD,Clare, -1204,011500,CD,Queens, -1204010,011500,CSD,Queens, -1204009,010000,CSD,Ponhook Lake 10, -1204015,010000,CSD,Wildcat 12, -1205,011200,CD,Annapolis, -1205009,011200,CSD,"Annapolis, Subd. B", -1205002,010000,CSD,Bear River (Part) 6, -1205006,010000,CSD,Bear River 6B, -1205014,011200,CSD,"Annapolis, Subd. C", -1205016,010000,CSD,Middleton, -1205004,011200,CSD,"Annapolis, Subd. A", -1205012,010000,CSD,Bridgetown, -1205008,011200,CSD,Annapolis Royal, -1205001,011200,CSD,"Annapolis, Subd. D", -1206,011400,CD,Lunenburg, -1206016,010000,CSD,New Ross 20, -1206004,010000,CSD,Bridgewater, -1206008,010000,CSD,Mahone Bay, -1206014,010000,CSD,Pennal 19, -1206009,010000,CSD,Chester, -1206001,011400,CSD,Lunenburg, -1206006,011400,CSD,Lunenburg, -1206011,010000,CSD,Gold River 21, -1207,011100,CD,Kings, -1207012,010000,CSD,Kentville, -1207024,010000,CSD,Wolfville, -1207021,011100,CSD,"Kings, Subd. D", -1207027,010000,CSD,Glooscap 35, -1207001,011100,CSD,"Kings, Subd. A", -1207016,011100,CSD,"Kings, Subd. B", -1207002,010000,CSD,Cambridge 32, -1207004,010000,CSD,Berwick, -1207011,011100,CSD,"Kings, Subd. C", -1208,012500,CD,Hants, -1208001,012500,CSD,West Hants, -1208008,012500,CSD,East Hants, -1208014,010000,CSD,Indian Brook 14, -1208002,010000,CSD,Windsor, -1208004,010000,CSD,Hantsport, -1209,012700-012800,CD,Halifax, -1209038,010000,CSD,Sheet Harbour 36, -1209029,010000,CSD,Shubenacadie 13, -1209037,010000,CSD,Beaver Lake 17, -1209019,010000,CSD,Cole Harbour 30, -1209034,012700-012800,CSD,Halifax, -1210,012300-012400-012600,CD,Colchester, -1210006,010000,CSD,Truro, -1210003,010000,CSD,Millbrook 27, -1210002,010000,CSD,Stewiacke, -1210008,012300-012400-012600,CSD,"Colchester, Subd. B", -1210001,012300-012400-012600,CSD,"Colchester, Subd. C", -1210012,012300-012400-012600,CSD,"Colchester, Subd. A", -1211,012100-012200,CD,Cumberland, -1211009,012100-012200,CSD,"Cumberland, Subd. C", -1211006,012100-012200,CSD,"Cumberland, Subd. B", -1211014,012100-012200,CSD,"Cumberland, Subd. D", -1211011,010000,CSD,Amherst, -1211002,010000,CSD,Parrsboro, -1211012,010000,CSD,Oxford, -1211001,012100-012200,CSD,"Cumberland, Subd. A", -1211008,010000,CSD,Springhill, -1212,013100,CD,Pictou, -1212023,010000,CSD,Merigomish Harbour 31, -1212016,010000,CSD,Trenton, -1212001,013100,CSD,"Pictou, Subd. A", -1212009,010000,CSD,Stellarton, -1212019,010000,CSD,Fisher's Grant 24, -1212006,013100,CSD,"Pictou, Subd. B", -1212014,010000,CSD,New Glasgow, -1212011,013100,CSD,"Pictou, Subd. C", -1212008,010000,CSD,Westville, -1212004,013100,CSD,Pictou, -1213,013200,CD,Guysborough, -1213004,013200,CSD,Guysborough, -1213008,010000,CSD,Mulgrave, -1213001,010000,CSD,St. Mary's, -1213006,010000,CSD,Canso, -1214,013300,CD,Antigonish, -1214001,013300,CSD,"Antigonish, Subd. A", -1214006,013300,CSD,"Antigonish, Subd. B", -1214002,013300,CSD,Antigonish, -1214010,010000,CSD,Pomquet And Afton 23, -1215,014200-014300,CD,Inverness, -1215002,010000,CSD,Port Hawkesbury, -1215001,014200-014300,CSD,"Inverness, Subd. C", -1215006,014200-014300,CSD,"Inverness, Subd. B", -1215011,014200-014300,CSD,"Inverness, Subd. A", -1215008,010000,CSD,Whycocomagh 2, -1216,014100,CD,Richmond, -1216011,014100,CSD,"Richmond, Subd. B", -1216014,010000,CSD,Chapel Island 5, -1216001,014100,CSD,"Richmond, Subd. C", -1216006,014100,CSD,"Richmond, Subd. A", -1217,014500,CD,Cape Breton, -1217020,010000,CSD,Eskasoni 3, -1217008,010000,CSD,Membertou 28B, -1217030,014500,CSD,Cape Breton, -1218,014400,CD,Victoria, -1218003,010000,CSD,Wagmatcook 1, -1218006,014400,CSD,"Victoria, Subd. A", -1218001,014400,CSD,"Victoria, Subd. B", -11,010000,PT,Prince Edward Island, -1101,018100,CD,Kings, -1101032,018100,CSD,Lot 44, -1101031,018100,CSD,Lot 43, -1101019,018100,CSD,Lot 53, -1101038,018100,CSD,Lot 46, -1101016,018100,CSD,Lot 52, -1101011,018100,CSD,Lot 66, -1101024,018100,CSD,Georgetown, -1101051,018100,CSD,Lot 38, -1101039,018100,CSD,Lot 47, -1101041,018100,CSD,Lot 42, -1101022,018100,CSD,"Kings, Royalty", -1101006,018100,CSD,Lot 63, -1101021,018100,CSD,Cardigan, -1101048,018100,CSD,Morell, -1101029,018100,CSD,Lot 56, -1101046,018100,CSD,Lot 40, -1101028,018100,CSD,Lot 55, -1101014,018100,CSD,Lot 51, -1101008,018100,CSD,Lot 61, -1101004,018100,CSD,Murray River, -1101036,018100,CSD,Souris, -1101044,018100,CSD,St. Peters Bay, -1101049,018100,CSD,Lot 39, -1101050,018100,CSD,Morell 2, -1101034,018100,CSD,Lot 45, -1101009,018100,CSD,Lot 59, -1101018,018100,CSD,Montague, -1101002,018100,CSD,Murray Harbour, -1101042,018100,CSD,Lot 41, -1101026,018100,CSD,Lot 54, -1101001,018100,CSD,Lot 64, -1102,018300,CD,Queens, -1102044,018300,CSD,Lot 24, -1102008,018300,CSD,Lot 57, -1102057,018300,CSD,Scotchfort 4, -1102040,018300,CSD,Miltonvale Park, -1102031,018300,CSD,Lot 29, -1102030,018300,CSD,Rocky Point 3, -1102043,018300,CSD,Hunter River, -1102049,018300,CSD,Lot 33, -1102050,018300,CSD,Union Road, -1102058,018300,CSD,Lot 37, -1102042,018300,CSD,Lot 23, -1102009,018300,CSD,Lot 50, -1102065,018300,CSD,Winsloe South, -1102080,018300,CSD,Stratford, -1102006,018300,CSD,Lot 58, -1102001,018300,CSD,Lot 62, -1102034,018300,CSD,Crapaud, -1102032,018300,CSD,Victoria, -1102039,018300,CSD,Lot 21, -1102059,018300,CSD,Mount Stewart, -1102052,018300,CSD,Lot 34, -1102012,018300,CSD,Lot 49, -1102041,018300,CSD,Lot 22, -1102014,018300,CSD,Lot 48, -1102004,018300,CSD,Lot 60, -1102037,018300,CSD,Clyde River, -1102048,018300,CSD,Brackley, -1102051,018300,CSD,Breadalbane, -1102045,018300,CSD,Resort Mun. Stan.B.-Hope R.-Bayv.-Cavend.-N.Rust., -1102038,018300,CSD,Lot 20, -1102085,018300,CSD,Cornwall, -1102029,018300,CSD,Lot 30, -1102054,018300,CSD,Lot 35, -1102046,018300,CSD,North Rustico, -1102075,018300,CSD,Charlottetown, -1102036,018300,CSD,Lot 67, -1102028,018300,CSD,Lot 65, -1102033,018300,CSD,Meadowbank, -1102056,018300,CSD,Lot 36, -1102026,018300,CSD,Lot 31, -1102070,018300,CSD,Warren Grove, -1103,018200,CD,Prince, -1103054,018200,CSD,Lot 3, -1103049,018200,CSD,Lot 5, -1103008,018200,CSD,Kinkora, -1103010,018200,CSD,Central Bedeque, -1103052,018200,CSD,Alberton, -1103016,018200,CSD,Lot 18, -1103033,018200,CSD,Tyne Valley, -1103013,018200,CSD,Bedeque, -1103056,018200,CSD,Lot 2, -1103041,018200,CSD,Lot 6, -1103028,018200,CSD,Lot 16, -1103011,018200,CSD,Lot 25, -1103023,018200,CSD,Linkletter, -1103038,018200,CSD,Lot 10, -1103046,018200,CSD,Lot 8, -1103012,018200,CSD,Lot 19, -1103024,018200,CSD,Miscouche, -1103029,018200,CSD,Wellington, -1103031,018200,CSD,Lot 14, -1103034,018200,CSD,Lot 12, -1103014,018200,CSD,Kensington, -1103058,018200,CSD,Lot 1, -1103044,018200,CSD,Lot 9, -1103009,018200,CSD,Lot 26, -1103006,018200,CSD,Lot 27, -1103059,018200,CSD,Tignish, -1103051,018200,CSD,Lot 4, -1103036,018200,CSD,Lot 11, -1103032,018200,CSD,Lot 13, -1103027,018200,CSD,Abrams Village, -1103005,018200,CSD,Borden-Carleton, -1103035,018200,CSD,Lennox Island 1, -1103062,018200,CSD,Miminegash, -1103048,018200,CSD,Lot 7, -1103042,018200,CSD,O'Leary, -1103018,018200,CSD,Sherbrooke, -1103026,018200,CSD,Lot 15, -1103025,018200,CSD,Summerside, -1103019,018200,CSD,Lot 17, -1103057,018200,CSD,St. Louis, -1103001,018200,CSD,Lot 28, -10,020000,PT,Newfoundland and Labrador, -1001,021100-021200-021400,CD,Division No. 1, -1001343,020000,CSD,Old Perlican, -1001505,020000,CSD,Pouch Cove, -1001511,020000,CSD,Logy Bay-Middle Cove-Outer Cove, -1001509,020000,CSD,Torbay, -1001519,021300-021310-021320,CSD,St. John's, -1001149,020000,CSD,Ferryland, -1001113,020000,CSD,Trepassey, -1001379,020000,CSD,Harbour Grace, -1001259,021100-021200-021400,CSD,"Division No. 1, Subd. A", -1001203,021100-021200-021400,CSD,"Division No. 1, Subd. X", -1001321,021100-021200-021400,CSD,"Division No. 1, Subd. F", -1001357,021100-021200-021400,CSD,"Division No. 1, Subd. H", -1001328,020000,CSD,New Perlican, -1001490,021100-021200-021400,CSD,"Division No. 1, Subd. R", -1001494,020000,CSD,Wabana, -1001485,020000,CSD,Conception Bay South, -1001415,021100-021200-021400,CSD,"Division No. 1, Subd. L", -1001267,020000,CSD,Southern Harbour, -1001263,020000,CSD,Long Harbour-Mount Arlington Heights, -1001131,020000,CSD,Renews-Cappahayden, -1001101,021100-021200-021400,CSD,"Division No. 1, Subd. V", -1001405,021100-021200-021400,CSD,"Division No. 1, Subd. K", -1001352,020000,CSD,Small Point-Adam's Cove-Blackhead-Broad Cove, -1001517,020000,CSD,Paradise, -1001316,020000,CSD,Heart's Desire, -1001312,020000,CSD,Heart's Delight-Islington, -1001396,020000,CSD,Spaniard's Bay, -1001421,021100-021200-021400,CSD,"Division No. 1, Subd. M", -1001289,020000,CSD,Chapel Arm, -1001181,020000,CSD,Riverhead, -1001186,020000,CSD,Admirals Beach, -1001174,020000,CSD,Gaskiers-Point La Haye, -1001219,020000,CSD,Branch, -1001434,020000,CSD,South River, -1001565,021100-021200-021400,CSD,"Division No. 1, Subd. D", -1001361,020000,CSD,Salmon Cove, -1001374,021100-021200-021400,CSD,"Division No. 1, Subd. I", -1001308,020000,CSD,Whiteway, -1001557,020000,CSD,Bay Bulls, -1001429,020000,CSD,Clarke's Beach, -1001472,020000,CSD,Holyrood, -1001285,020000,CSD,Norman's Cove-Long Cove, -1001234,021100-021200-021400,CSD,"Division No. 1, Subd. B", -1001207,020000,CSD,Colinet, -1001178,020000,CSD,St. Mary's, -1001228,020000,CSD,St. Bride's, -1001120,020000,CSD,St. Shott's, -1001225,020000,CSD,Point Lance, -1001512,020000,CSD,Bauline, -1001469,020000,CSD,Harbour Main-Chapel's Cove-Lakeview, -1001298,020000,CSD,Whitbourne, -1001332,020000,CSD,Winterton, -1001551,020000,CSD,Petty Harbour-Maddox Cove, -1001385,020000,CSD,Upper Island Cove, -1001456,020000,CSD,Colliers, -1001559,020000,CSD,Witless Bay, -1001240,020000,CSD,Placentia, -1001169,020000,CSD,St. Vincent's-St. Stephen's-Peter's River, -1001339,021100-021200-021400,CSD,"Division No. 1, Subd. G", -1001347,020000,CSD,Bay de Verde, -1001335,020000,CSD,Hant's Harbour, -1001504,020000,CSD,Portugal Cove-St. Philip's, -1001365,020000,CSD,Victoria, -1001304,021100-021200-021400,CSD,"Division No. 1, Subd. E", -1001409,020000,CSD,Bay Roberts, -1001446,020000,CSD,Brigus, -1001441,021100-021200-021400,CSD,"Division No. 1, Subd. N", -1001426,020000,CSD,North River, -1001124,021100-021200-021400,CSD,"Division No. 1, Subd. U", -1001270,020000,CSD,Arnold's Cove, -1001281,020000,CSD,Chance Cove, -1001197,020000,CSD,Mount Carmel-Mitchells Brook-St. Catherines, -1001144,020000,CSD,Aquaforte, -1001140,020000,CSD,Port Kirwan, -1001461,020000,CSD,Conception Harbour, -1001437,020000,CSD,Cupids, -1001391,021100-021200-021400,CSD,"Division No. 1, Subd. J", -1001277,020000,CSD,Sunnyside, -1001293,021100-021200-021400,CSD,"Division No. 1, Subd. Y", -1001464,020000,CSD,Avondale, -1001126,020000,CSD,Cape Broyle, -1001254,020000,CSD,Fox Harbour, -1001370,020000,CSD,Carbonear, -1001105,020000,CSD,Portugal Cove South, -1001325,020000,CSD,Heart's Content, -1001542,020000,CSD,Mount Pearl, -1001394,020000,CSD,Bishop's Cove, -1001274,020000,CSD,Come By Chance, -1001452,021100-021200-021400,CSD,"Division No. 1, Subd. O", -1001155,021100-021200-021400,CSD,"Division No. 1, Subd. W", -1001136,020000,CSD,Fermeuse, -1001192,020000,CSD,St. Joseph's, -1001214,021100-021200-021400,CSD,"Division No. 1, Subd. C", -1001507,020000,CSD,Flatrock, -1001375,020000,CSD,Bryant's Cove, -1002,022100,CD,Division No. 2, -1002023,020000,CSD,Winterland, -1002011,020000,CSD,Lawn, -1002029,022100,CSD,"Division No. 2, Subd. J", -1002039,020000,CSD,English Harbour East, -1002055,020000,CSD,Little Bay East, -1002025,020000,CSD,Fox Cove-Mortier, -1002002,020000,CSD,Lewin's Cove, -1002026,022100,CSD,"Division No. 2, Subd. I", -1002014,020000,CSD,Point May, -1002027,020000,CSD,Bay L'Argent, -1002041,020000,CSD,St. Bernard's-Jacques Fontaine, -1002001,022100,CSD,"Division No. 2, Subd. E", -1002009,022100,CSD,"Division No. 2, Subd. G", -1002018,020000,CSD,Fortune, -1002013,020000,CSD,Lord's Cove, -1002034,020000,CSD,Parkers Cove, -1002033,020000,CSD,Rushoon, -1002016,022100,CSD,"Division No. 2, Subd. H", -1002021,020000,CSD,Garnish, -1002015,020000,CSD,Point au Gaul, -1002040,020000,CSD,Baine Harbour, -1002044,022100,CSD,"Division No. 2, Subd. L", -1002012,020000,CSD,Lamaline, -1002030,020000,CSD,Grand le Pierre, -1002048,022100,CSD,"Division No. 2, Subd. K", -1002022,022100,CSD,"Division No. 2, Subd. D", -1002037,020000,CSD,Red Harbour, -1002005,022100,CSD,Burin, -1002019,020000,CSD,Grand Bank, -1002031,022100,CSD,"Division No. 2, Subd. C", -1002036,020000,CSD,Terrenceville, -1002008,020000,CSD,St. Lawrence, -1002006,022100,CSD,"Division No. 2, Subd. F", -1002024,020000,CSD,Marystown, -1002017,020000,CSD,Frenchman's Cove, -1003,022400,CD,Division No. 3, -1003001,022400,CSD,"Division No. 3, Subd. A", -1003020,020000,CSD,Morrisville, -1003003,020000,CSD,St. Jacques-Coomb's Cove, -1003042,022400,CSD,"Division No. 3, Subd. J", -1003032,020000,CSD,Isle aux Morts, -1003801,020000,CSD,Samiajij Miawpukek, -1003034,022400-022410-022420,CSD,Channel-Port aux Basques, -1003010,020000,CSD,Seal Cove (Fortune Bay), -1003005,020000,CSD,Pool's Cove, -1003011,020000,CSD,Hermitage-Sandyville, -1003038,022400,CSD,"Division No. 3, Subd. I", -1003021,022400,CSD,"Division No. 3, Subd. E", -1003008,020000,CSD,Harbour Breton, -1003031,022400,CSD,"Division No. 3, Subd. H", -1003024,022400,CSD,"Division No. 3, Subd. F", -1003045,020000,CSD,Rose Blanche-Harbour le Cou, -1003014,022400,CSD,"Division No. 3, Subd. D", -1003019,020000,CSD,St. Alban's, -1003012,020000,CSD,Gaultois, -1003028,022300,CSD,Burgeo, -1003009,022400,CSD,"Division No. 3, Subd. C", -1003004,020000,CSD,Belleoram, -1003018,020000,CSD,Milltown-Head of Bay d'Espoir, -1003002,020000,CSD,Rencontre East, -1003006,022400,CSD,"Division No. 3, Subd. B", -1003033,020000,CSD,Burnt Islands, -1003026,022300,CSD,Ramea, -1004,023400,CD,Division No. 4, -1004019,020000,CSD,Stephenville, -1004020,020000,CSD,Kippens, -1004042,020000,CSD,Port au Port West-Aguathuna-Felix Cove, -1004011,023400,CSD,"Division No. 4, Subd. C", -1004006,023400,CSD,"Division No. 4, Subd. B", -1004017,020000,CSD,Gallants, -1004021,020000,CSD,Port au Port East, -1004033,020000,CSD,Cape St. George, -1004001,023400,CSD,"Division No. 4, Subd. A", -1004022,023400,CSD,"Division No. 4, Subd. E", -1004016,023400,CSD,"Division No. 4, Subd. D", -1004018,020000,CSD,Stephenville Crossing, -1004013,020000,CSD,St. George's, -1004037,020000,CSD,Lourdes, -1005,023100,CD,Division No. 5, -1005016,023100,CSD,"Division No. 5, Subd. C", -1005019,023100,CSD,"Division No. 5, Subd. D", -1005025,020000,CSD,Meadows, -1005024,020000,CSD,Lark Harbour, -1005035,020000,CSD,York Harbour, -1005003,023100,CSD,"Division No. 5, Subd. G", -1005017,020000,CSD,Massey Drive, -1005033,020000,CSD,Mount Moriah, -1005022,020000,CSD,McIvers, -1005004,023200,CSD,Deer Lake, -1005011,020000,CSD,Steady Brook, -1005006,020000,CSD,Howley, -1005005,020000,CSD,Jackson's Arm, -1005008,020000,CSD,Hampden, -1005009,020000,CSD,Reidville, -1005023,020000,CSD,Cox's Cove, -1005028,020000,CSD,Hughes Brook, -1005020,020000,CSD,Humber Arm South, -1005018,023100,CSD,Corner Brook, -1005012,020000,CSD,Pasadena, -1005007,023100,CSD,"Division No. 5, Subd. E", -1005014,020000,CSD,Cormack, -1005010,023100,CSD,"Division No. 5, Subd. F", -1005030,020000,CSD,Irishtown-Summerside, -1005015,020000,CSD,Gillams, -1005001,023100,CSD,"Division No. 5, Subd. A", -1006,024200,CD,Division No. 6, -1006014,024200,CSD,"Division No. 6, Subd. C", -1006008,024200,CSD,"Division No. 6, Subd. E", -1006017,024200,CSD,Grand Falls-Windsor, -1006015,020000,CSD,Northern Arm, -1006029,024200,CSD,"Division No. 6, Subd. A", -1006001,024200,CSD,"Division No. 6, Subd. D", -1006011,020000,CSD,Appleton, -1006003,020000,CSD,Norris Arm, -1006021,020000,CSD,Peterview, -1006009,025500,CSD,Gander, -1006031,024100,CSD,Buchans, -1006012,020000,CSD,Glenwood, -1006022,020000,CSD,Botwood, -1006019,020000,CSD,Bishop's Falls, -1006026,020000,CSD,Badger, -1006028,020000,CSD,Millertown, -1007,025200-025300-025400,CD,Division No. 7, -1007056,025200-025300-025400,CSD,"Division No. 7, Subd. A", -1007017,020000,CSD,Little Catalina, -1007046,020000,CSD,Salvage, -1007047,020000,CSD,Gambo, -1007039,020000,CSD,Savage Cove-Sandy Cove, -1007031,025200-025300-025400,CSD,"Division No. 7, Subd. E", -1007032,020000,CSD,Musgravetown, -1007048,020000,CSD,St. Brendan's, -1007054,020000,CSD,Greenspond, -1007038,025200-025300-025400,CSD,"Division No. 7, Subd. D", -1007057,020000,CSD,Dover, -1007041,020000,CSD,Happy Adventure, -1007040,025700,CSD,Terra Nova, -1007013,025400,CSD,Clarenville, -1007028,025200-025300-025400,CSD,"Division No. 7, Subd. F", -1007014,025200-025300-025400,CSD,"Division No. 7, Subd. J", -1007023,025200-025300,CSD,Bonavista, -1007042,020000,CSD,Eastport, -1007006,025200-025300-025400,CSD,"Division No. 7, Subd. L", -1007022,020000,CSD,Trinity Bay North, -1007044,020000,CSD,Glovertown, -1007015,020000,CSD,Trinity (Trinity Bay), -1007001,025200-025300-025400,CSD,"Division No. 7, Subd. M", -1007036,020000,CSD,Port Blandford, -1007018,025200-025300-025400,CSD,"Division No. 7, Subd. I", -1007050,020000,CSD,Centreville-Wareham-Trinity, -1007025,020000,CSD,Keels, -1007049,020000,CSD,Hare Bay, -1007027,020000,CSD,King's Cove, -1007045,025200-025300-025400,CSD,"Division No. 7, Subd. N", -1007016,020000,CSD,Port Rexton, -1007009,025200-025300-025400,CSD,"Division No. 7, Subd. K", -1007020,020000,CSD,Elliston, -1007037,020000,CSD,Traytown, -1007060,020000,CSD,New-Wes-Valley, -1007026,020000,CSD,Duntara, -1007067,020000,CSD,Indian Bay, -1007043,020000,CSD,Sandringham, -1007051,025200-025300-025400,CSD,"Division No. 7, Subd. B", -1007024,025200-025300-025400,CSD,"Division No. 7, Subd. G", -1008,020000,CD,Division No. 8, -1008004,020000,CSD,Lumsden, -1008052,020000,CSD,"Division No. 8, Subd. D", -1008075,020000,CSD,Fleur de Lys, -1008045,020000,CSD,Little Burnt Bay, -1008093,020000,CSD,Westport, -1008069,020000,CSD,King's Point, -1008070,020000,CSD,Nippers Harbour, -1008032,020000,CSD,Cottlesville, -1008022,020000,CSD,Joe Batt's Arm-Barr'd Islands-Shoal Bay, -1008025,020000,CSD,Seldom-Little Seldom, -1008036,020000,CSD,"Division No. 8, Subd. G", -1008073,020000,CSD,Tilt Cove, -1008096,020000,CSD,Woodstock, -1008072,020000,CSD,Middle Arm, -1008008,020000,CSD,"Division No. 8, Subd. L", -1008076,020000,CSD,LaScie, -1008062,020000,CSD,Port Anson, -1008001,020000,CSD,"Division No. 8, Subd. M", -1008031,020000,CSD,"Division No. 8, Subd. H", -1008067,020000,CSD,"Division No. 8, Subd. O", -1008046,020000,CSD,"Division No. 8, Subd. E", -1008079,020000,CSD,Baie Verte, -1008038,020000,CSD,Birchy Bay, -1008039,020000,CSD,Comfort Cove-Newstead, -1008098,020000,CSD,Miles Cove, -1008049,020000,CSD,Point Leamington, -1008059,020000,CSD,South Brook, -1008021,020000,CSD,Fogo, -1008040,020000,CSD,Baytona, -1008048,020000,CSD,Leading Tickles, -1008060,020000,CSD,Robert's Arm, -1008074,020000,CSD,"Division No. 8, Subd. A", -1008006,020000,CSD,Musgrave Harbour, -1008026,020000,CSD,"Division No. 8, Subd. I", -1008077,020000,CSD,Brent's Cove, -1008065,020000,CSD,"Division No. 8, Subd. P", -1008037,020000,CSD,Campbellton, -1008043,020000,CSD,Embree, -1008035,020000,CSD,Twillingate, -1008078,020000,CSD,Pacquet, -1008020,020000,CSD,Fogo Island Region (Part), -1008011,020000,CSD,Carmanville, -1008092,020000,CSD,Coachman's Cove, -1008058,020000,CSD,"Division No. 8, Subd. C", -1008056,020000,CSD,Lushes Bight-Beaumont-Beaumont North, -1008044,020000,CSD,Lewisporte, -1008053,020000,CSD,Pilley's Island, -1008054,020000,CSD,Triton, -1008063,020000,CSD,Little Bay, -1008024,020000,CSD,Change Islands, -1008091,025600,CSD,Seal Cove (White Bay), -1008042,020000,CSD,"Division No. 8, Subd. F", -1008071,020000,CSD,Burlington, -1008029,020000,CSD,Crow Head, -1008047,020000,CSD,Point of Bay, -1008033,020000,CSD,Summerford, -1008095,020000,CSD,Ming's Bight, -1008064,020000,CSD,Little Bay Islands, -1008055,020000,CSD,Brighton, -1008066,020000,CSD,Beachside, -1008061,020000,CSD,Springdale, -1008023,020000,CSD,Tilting, -1009,026100,CD,Division No. 9, -1009032,020000,CSD,St. Lunaire-Griquet, -1009029,020000,CSD,St. Anthony, -1009019,026300,CSD,Port Saunders, -1009018,026200,CSD,Hawke's Bay, -1009048,020000,CSD,River of Ponds, -1009037,020000,CSD,Sally's Cove, -1009009,026100,CSD,"Division No. 9, Subd. A", -1009022,020000,CSD,Port au Choix, -1009021,026100,CSD,"Division No. 9, Subd. C", -1009030,020000,CSD,Glenburnie-Birchy Head-Shoal Brook, -1009020,020000,CSD,St. Pauls, -1009034,020000,CSD,Cook's Harbour, -1009031,026100,CSD,"Division No. 9, Subd. D", -1009013,020000,CSD,Rocky Harbour, -1009008,020000,CSD,Conche, -1009007,020000,CSD,Roddickton-Bide Arm, -1009042,020000,CSD,Bellburns, -1009016,020000,CSD,Cow Head, -1009024,020000,CSD,Flower's Cove, -1009026,020000,CSD,Bird Cove, -1009041,026100,CSD,"Division No. 9, Subd. H", -1009017,020000,CSD,Parson's Pond, -1009012,020000,CSD,Norris Point, -1009001,026100,CSD,"Division No. 9, Subd. F", -1009035,020000,CSD,Raleigh, -1009039,020000,CSD,Goose Cove East, -1009028,020000,CSD,Main Brook, -1009004,020000,CSD,Englee, -1009047,026100,CSD,"Division No. 9, Subd. G", -1009015,020000,CSD,Daniel's Harbour, -1009011,020000,CSD,"Woody Point, Bonne Bay", -1009023,020000,CSD,Anchor Point, -1009010,020000,CSD,Trout River, -1010,020000,CD,Division No. 10, -1010020,020000,CSD,"Division No. 10, Subd. C", -1010012,027300,CSD,"Cartwright, Labrador", -1010034,029200,CSD,Wabush, -1010008,020000,CSD,"Division No. 10, Subd. B", -1010013,020000,CSD,Charlottetown (Labrador), -1010001,020000,CSD,"Division No. 10, Subd. A", -1010032,029200,CSD,Labrador City, -1010042,020000,CSD,"Division No. 10, Subd. E", -1010802,020000,CSD,Sheshatshiu 3, -1010005,020000,CSD,Forteau, -1010006,020000,CSD,West St. Modeste, -1010025,020000,CSD,Happy Valley-Goose Bay, -1010007,020000,CSD,Pinware, -1010011,020000,CSD,Mary's Harbour, -1010029,020000,CSD,"Division No. 10, Subd. D", -1010002,020000,CSD,L'Anse-au-Loup, -1010009,020000,CSD,Port Hope Simpson, -1010004,027100,CSD,L'Anse-au-Clair, -1010801,020000,CSD,Natuashish 2, -1010003,027100,CSD,Red Bay, -1010010,020000,CSD,St. Lewis, -1010022,020000,CSD,North West River, -1011,020000,CD,Division No. 11, -1011030,027600,CSD,Hopedale, -1011005,020000,CSD,"Division No. 11, Subd. C", -1011040,020000,CSD,"Division No. 11, Subd. E", -1011015,027500,CSD,Postville, -1011035,027700,CSD,Nain, -1011020,027500,CSD,Makkovik, -1011010,027400,CSD,Rigolet, -60,090000,PT,Yukon, -6001,090000,CD,Yukon, -6001003,092300,CSD,Watson Lake, -6001004,092400,CSD,Faro, -6001006,092100,CSD,Teslin, -6001007,092100,CSD,Teslin Post 13, -6001008,090000,CSD,Carcross 4, -6001009,091700,CSD,Whitehorse, -6001010,090000,CSD,Lake Laberge 1, -6001012,091400,CSD,Carmacks, -6001016,090000,CSD,Klukshu, -6001018,091600,CSD,Haines Junction, -6001019,090000,CSD,Kloo Lake, -6001022,091200,CSD,Mayo, -6001029,091100,CSD,Dawson, -6001031,090000,CSD,Moosehide Creek 2, -6001032,090000,CSD,Upper Liard, -6001033,090000,CSD,Two Mile Village, -6001034,090000,CSD,Two and One-Half Mile Village, -6001036,090000,CSD,Tagish, -6001037,092400,CSD,Ross River, -6001038,090000,CSD,Champagne Landing 10, -6001039,090000,CSD,Burwash Landing, -6001041,091400,CSD,Pelly Crossing, -6001042,091300,CSD,Beaver Creek, -6001043,093200,CSD,Old Crow, -6001044,090000,CSD,Mt. Lorne, -6001045,090000,CSD,"Yukon, Unorganized", -6001046,090000,CSD,Swift River, -6001047,090000,CSD,Johnsons Crossing, -6001048,090000,CSD,Carcross, -6001049,090000,CSD,Destruction Bay, -6001050,090000,CSD,Stewart Crossing, -6001052,090000,CSD,Keno Hill, -6001055,090000,CSD,Ibex Valley, -6001057,092100,CSD,Teslin, -6001058,090000,CSD,Marsh Lake, -6001059,090000,CSD,Macpherson-Grizzly Valley, -6001060,091700,CSD,"Whitehorse, Unorganized", -61,090000,PT,Northwest Territories, -6101,096540,CD,Region 1, -6101007,094500,CSD,Norman Wells, -6101003,094710,CSD,Déline, -6101012,094720,CSD,Colville Lake, -6101009,094600,CSD,Fort Good Hope, -6101005,094500,CSD,Tulita, -6102,094500,CD,Region 2, -6102034,095320,CSD,Whatì, -6102052,095320,CSD,Wekweètì, -6102049,090000,CSD,Gamètì, -6102031,095320,CSD,Behchokò, -6103,095320,CD,Region 3, -6103016,095400,CSD,Hay River, -6103018,095600,CSD,Fort Resolution, -6103003,095400,CSD,Enterprise, -6103001,095500,CSD,Fort Smith, -6103020,095700,CSD,Lutselk'e, -6104,094300,CD,Region 4, -6104023,095310,CSD,Yellowknife, -6104021,090000,CSD,Detah, -6106,095500,CD,Region 6 (5?), -6106097,095500,CSD,"Fort Smith, Unorganized", -6106013,094300,CSD,Jean Marie River, -6106014,095200,CSD,Fort Providence, -6106038,094300,CSD,Fort Simpson, -6106017,095400,CSD,Hay River Dene 1, -6106044,094400,CSD,Wrigley, -6106010,090000,CSD,Nahanni Butte, -6106005,090000,CSD,Kakisa, -6106026,090000,CSD,Reliance, -6106006,094200,CSD,Trout Lake, -6106004,090000,CSD,Salt Plains 195, -6106009,094200,CSD,Fort Liard, -6107,095310,CD,Region 7 (6?), -6107025,096530,CSD,Aklavik, -6107010,096550,CSD,Tsiigehtchic, -6107017,096540,CSD,Inuvik, -6107015,096550,CSD,Fort McPherson, -6107095,096310,CSD,Ulukhaktok, -6107014,096420,CSD,Paulatuk, -6107063,096540,CSD,"Inuvik, Unorganized", -6107041,096210,CSD,Sachs Harbour, -6107036,096520,CSD,Tuktoyaktuk, -62,090000,PT,Nunavut, -6204,090000,CD,Baffin, -6204019,090000,CSD,Nanisivik, -6204009,098220,CSD,Pangnirtung, -6204025,099210,CSD,Grise Fiord, -6204018,098110,CSD,Arctic Bay, -6204003,098230,CSD,Iqaluit, -6204005,098240,CSD,Kimmirut, -6204030,090000,CSD,"Baffin, Unorganized", -6204022,099110,CSD,Resolute, -6204010,098210,CSD,Qikiqtarjuaq, -6204020,098120,CSD,Pond Inlet, -6204015,098130,CSD,Clyde River, -6204012,097720,CSD,Igloolik, -6204011,097710,CSD,Hall Beach, -6204001,097910,CSD,Sanikiluaq, -6204007,098250,CSD,Cape Dorset, -6205,090000,CD,Keewatin, -6205027,097730,CSD,Repulse Bay, -6205017,097620,CSD,Rankin Inlet, -6205016,090000,CSD,Whale Cove, -6205014,097810,CSD,Coral Harbour, -6205033,090000,CSD,"Keewatin, Unorganized", -6205015,097610,CSD,Arviat, -6205019,097630,CSD,Chesterfield Inlet, -6205023,097510,CSD,Baker Lake, -6208,090000,CD,Kitikmeot, -6208098,090000,CSD,"Kitikmeot, Unorganized", -6208068,090000,CSD,Umingmaktok, -6208047,097420,CSD,Kugaaruk, -6208073,097110,CSD,Cambridge Bay, -6208059,097210,CSD,Kugluktuk, -6208081,097410,CSD,Gjoa Haven, -6208087,097310,CSD,Taloyoak, +CAPCP Geocodes,EC CLC,UU Scale,UU Name,don't touch this tab +0,000000,N,All of Canada,(ignore it) +00,000000,N,All of Canada, +001,001100,WB,Pacific Waters, +00111,001110,WBD,Juan de Fuca Strait, +00112,001120,WBD,Haro Strait, +00113,001130,WBD,Strait of Georgia, +00114,001140,WBD,Howe Sound, +00115,001150,WBD,Johnstone Strait, +00116,001160,WBD,Queen Charlotte Strait, +00117,001170,WBD,West Coast Vancouver Island North, +00118,001180,WBD,West Coast Vancouver Island South, +00121,001210,WBD,Queen Charlotte Sound, +00122,001220,WBD,Central Coast from McInnes Island to Pine Island, +00123,001230,WBD,Douglas Channel, +00124,001240,WBD,Hecate Strait, +00125,001250,WBD,Dixon Entrance East, +00126,001260,WBD,Dixon Entrance West, +00127,001270,WBD,West Coast Haida Gwaii, +00128,001280,WBD,North Coast Channels, +00131,001310,WBD,Bowie, +00132,001320,WBD,Explorer, +002,002200,WB,Great Lakes, +00221,002210,WBD,Lake Erie, +00231,002310,WBD,Lake St. Clair, +00241,002410,WBD,Lake Huron, +00251,002510,WBD,Georgian Bay, +00261,002610,WBD,North Channel, +00271,002710,WBD,Whitefish Bay, +00281,002810,WBD,Lake Superior, +00291,002910,WBD,Lake Ontario, +003,003000,WB,Atlantic Waters, +00311,003110,WBD,Tadoussac to Pointe-des-Monts, +00312,003120,WBD,Pointe-des-Monts to Anticosti, +00314,003140,WBD,Anticosti, +00315,003150,WBD,Chaleur - Miscou, +00316,003160,WBD,Gulf - Magdalen, +00317,003170,WBD,Northumberland Strait, +00321,003210,WBD,Fundy, +00322,003220,WBD,Grand Manan, +00323,003230,WBD,Lurcher, +00324,003240,WBD,Browns Bank, +00325,003250,WBD,Georges Bank, +00326,003260,WBD,Southwestern Shore, +00327,003270,WBD,LaHave Bank, +00328,003280,WBD,West Scotian Slope, +00329,003290,WBD,Halifax Harbour and Approaches, +00331,003310,WBD,Cabot Strait, +00332,003320,WBD,Fourchu, +00333,003330,WBD,Eastern Shore, +00334,003340,WBD,Sable, +00335,003350,WBD,East Scotian Slope, +00336,003360,WBD,Southwest Coast, +00337,003370,WBD,Banquereau, +00338,003380,WBD,Laurentian Fan, +00341,003410,WBD,Strait of Belle Isle, +00342,003420,WBD,Northeast Gulf, +00343,003430,WBD,Gulf - Port au Port, +00344,003440,WBD,Northeast Coast, +00345,003450,WBD,East Coast, +00346,003460,WBD,South Coast, +00347,003470,WBD,Southwestern Grand Banks, +00351,003510,WBD,South Labrador Coast, +00352,003520,WBD,Belle Isle Bank, +00353,003530,WBD,Funk Island Bank, +00354,003540,WBD,Northern Grand Banks, +00355,003550,WBD,Southeastern Grand Banks, +00356,003560,WBD,Southeast Labrador Sea, +00357,003570,WBD,Flemish, +00358,003580,WBD,Tail of the Grand Banks, +00361,003610,WBD,North Labrador Coast, +00362,003620,WBD,Mid Labrador Coast, +00363,003630,WBD,Northwest Labrador Sea, +00364,003640,WBD,South Labrador Sea, +00365,003650,WBD,East Labrador Sea, +00364,003640,WBD,South Labrador Sea, +004,004000,WB,Inland Waters (Eastern Canada), +00411,004110,WBD,Lake Melville, +00421,004210,WBD,Bras d'Or Lakes, +00431,004310,WBD,Saguenay to Tadoussac, +00432,004320,WBD,Lake Saint-Jean, +00441,004410,WBD,L'Isle-aux-Coudres to Tadoussac, +00442,004420,WBD,St. Lawrence River - Donnacona to L'Isle-aux-Coudres, +00443,004430,WBD,St. Lawrence River - Trois-Rivières to Donnacona, +00444,004440,WBD,St. Lawrence River - Montréal to Trois-Rivières, +00445,004450,WBD,St. Lawrence River - Cornwall to Montréal, +00446,004460,WBD,St. Lawrence River - Prescott to Cornwall, +00447,004470,WBD,St. Lawrence River - Kingston to Prescott, +00471,004710,WBD,Lake Simcoe, +00472,004720,WBD,Lake Nipissing, +00481,004810,WBD,Lake Nipigon, +00483,004830,WBD,Albany River, +00484,004840,WBD,Big Trout Lake, +00485,004850,WBD,Severn River, +00473,004730,WBD,Lake Abitibi, +00484,004840,WBD,Big Trout Lake, +00412,004120,WBD,Meelpaeg Lake, +00433,004330,WBD,La Grande River, +00436,004360,WBD,Robert-Bourassa Reservoir, +00435,004350,WBD,La Grande 3 Reservoir, +00486,004860,WBD,Seul Lake, +00413,004130,WBD,Smallwood Reservoir, +00434,004340,WBD,Caniapiscau Reservoir, +00437,004370,WBD,Mistassini Lake, +005,005000,WB,Hudson Bay and Baffin Island Waters, +00511,005110,WBD,Prince Charles, +00512,005120,WBD,East Foxe, +00513,005130,WBD,West Foxe, +00514,005140,WBD,Igloolik, +00521,005210,WBD,Nottingham, +00522,005220,WBD,Resolution, +00523,005230,WBD,Ungava, +00531,005310,WBD,Puvirnituq, +00532,005320,WBD,Belcher, +00533,005330,WBD,James Bay, +00541,005410,WBD,South-central Hudson, +00542,005420,WBD,South Hudson, +00543,005430,WBD,York, +00551,005510,WBD,Arviat, +00552,005520,WBD,Churchill, +00553,005530,WBD,Central, +00554,005540,WBD,Coats, +00561,005610,WBD,Roes Welcome, +00562,005620,WBD,Rankin, +00563,005630,WBD,Chesterfield Inlet, +006,006000,WB,Northeastern Arctic Waters, +00611,006110,WBD,Robeson, +00612,006120,WBD,Kane, +00613,006130,WBD,Clarence, +00614,006140,WBD,East Baffin, +00615,006150,WBD,East Clyde, +00616,006160,WBD,West Clyde, +00617,006170,WBD,West Baffin, +00618,006180,WBD,Pond, +00621,006210,WBD,East Davis, +00622,006220,WBD,East Brevoort, +00623,006230,WBD,Central Brevoort, +00624,006240,WBD,West Brevoort, +00625,006250,WBD,Frobisher Bay, +00626,006260,WBD,Cumberland, +00627,006270,WBD,West Davis, +00631,006310,WBD,Lancaster, +00632,006320,WBD,Navy Board, +00633,006330,WBD,Admiralty, +00634,006340,WBD,Committee, +00635,006350,WBD,Boothia, +00636,006360,WBD,Regent, +00641,006410,WBD,Barrow, +00642,006420,WBD,Peel, +00643,006430,WBD,St. Roch, +00644,006440,WBD,Maud, +00645,006450,WBD,Larsen, +00646,006460,WBD,McClintock, +00651,006510,WBD,Dease, +00652,006520,WBD,Bathurst, +00653,006530,WBD,Coronation, +00654,006540,WBD,Dolphin, +00655,006550,WBD,Amundsen, +00656,006560,WBD,Holman, +00657,006570,WBD,Prince of Wales, +00661,006610,WBD,Rae, +00662,006620,WBD,Melville, +00663,006630,WBD,McClure, +00664,006640,WBD,Liddon, +00665,006650,WBD,Fitzwilliam, +00666,006660,WBD,Griper, +00667,006670,WBD,Ballantyne, +00668,006680,WBD,Wilkins, +00671,006710,WBD,Peary, +00672,006720,WBD,Hassel, +00673,006730,WBD,Maclean, +00674,006740,WBD,Queens, +00675,006750,WBD,Byam, +00676,006760,WBD,Hazen, +00677,006770,WBD,Gustaf, +00681,006810,WBD,Greely, +00682,006820,WBD,Eureka, +00683,006830,WBD,Jones, +00684,006840,WBD,Norwegian, +00685,006850,WBD,Massey, +00686,006860,WBD,South Sverdrup, +00687,006870,WBD,North Sverdrup, +00688,006880,WBD,Nansen, +007,007000,WB,Western Arctic Waters, +00711,007110,WBD,CZ1, +00712,007120,WBD,CY3, +00713,007130,WBD,CX5, +00714,007140,WBD,CX4, +00715,007150,WBD,CX3, +00716,007160,WBD,CX2, +00717,007170,WBD,CX1, +00718,007180,WBD,CY1, +00719,007190,WBD,CY2, +00721,007210,WBD,CW6, +00722,007220,WBD,CV7, +00723,007230,WBD,CV6, +00731,007310,WBD,CW5, +00732,007320,WBD,Alert, +00733,007330,WBD,Bartlett, +00734,007340,WBD,Ward Hunt, +00735,007350,WBD,Ellesmere, +00736,007360,WBD,South Axel Heiberg, +00737,007370,WBD,Axel Heiberg, +00738,007380,WBD,CW4, +00741,007410,WBD,Prince Patrick, +00742,007420,WBD,Brock, +00743,007430,WBD,South Prince Patrick, +00744,007440,WBD,CT4, +00745,007450,WBD,CU4, +00746,007460,WBD,CU3, +00751,007510,WBD,CW3, +00752,007520,WBD,CV5, +00753,007530,WBD,Ellef Ringnes, +00754,007540,WBD,South Ellef Ringnes, +00755,007550,WBD,Borden, +00756,007560,WBD,North Prince Patrick, +00757,007570,WBD,CV4, +00758,007580,WBD,CV3, +00759,007590,WBD,CW2, +00761,007610,WBD,CW1, +00762,007620,WBD,CV2, +00763,007630,WBD,CU2, +00764,007640,WBD,CT3, +00765,007650,WBD,CT2, +00766,007660,WBD,CT1, +00767,007670,WBD,CU1, +00768,007680,WBD,CV1, +00771,007710,WBD,Prince Alfred, +00772,007720,WBD,Banks, +00773,007730,WBD,Baillie, +00781,007810,WBD,West Prince Alfred, +00782,007820,WBD,North Tuktoyaktuk, +00783,007830,WBD,Tuktoyaktuk, +00784,007840,WBD,Yukon Coast, +00785,007850,WBD,Mackenzie, +00786,007860,WBD,North Mackenzie, +00787,007870,WBD,Northwest Beaufort, +008,008000,WB,Inland Waters (Western Canada), +00811,008110,WBD,Mackenzie River, +00821,008210,WBD,Great Bear Lake, +00822,008220,WBD,Eskimo Lakes, +00831,008310,WBD,Great Slave Lake, +00832,008320,WBD,Baker, +00841,008410,WBD,Lake Athabasca, +00851,008510,WBD,Reindeer Lake, +00861,008610,WBD,Cedar Lake, +00862,008620,WBD,Lake Winnipegosis, +00863,008630,WBD,Lake Winnipeg, +00864,008640,WBD,Lake Manitoba, +00871,008710,WBD,Fraser River Waterways, +00812,008120,WBD,Anderson River, +00813,008130,WBD,Horton River, +00814,008140,WBD,Liard River, +00815,008150,WBD,Pelly River, +00816,008160,WBD,Yukon River, +00842,008420,WBD,Athabasca River, +00843,008430,WBD,North Saskatchewan River, +00844,008440,WBD,Peace River, +00845,008450,WBD,South Saskatchewan River, +00846,008460,WBD,Old Wives Lake, +00847,008470,WBD,Big Quill Lake, +00848,008480,WBD,Lesser Slave Lake, +00849,008490,WBD,Utikuma Lake, +00852,008520,WBD,Churchill River, +00853,008530,WBD,Nelson River, +00854,008540,WBD,Red River, +00855,008550,WBD,Saskatchewan River, +00856,008560,WBD,Lac la Ronge, +00865,008650,WBD,Dauphin Lake, +00866,008660,WBD,Swan Lake, +00867,008670,WBD,Lake St. Martin, +00868,008680,WBD,Red Deer Lake, +00872,008720,WBD,Columbia Riverr, +00873,008730,WBD,Fraser River, +00874,008740,WBD,Kootenay River, +00833,008330,WBD,Slave River, +00881,008810,WBD,Gods Lake, +00886,008860,WBD,Island Lake, +00834,008340,WBD,Dubawnt Lake, +00857,008570,WBD,Wollaston Lake, +00883,008830,WBD,North Moose Lake, +00885,008850,WBD,South Moose Lake, +00869,008690,WBD,Playgreen Lake, +00882,008820,WBD,Little Playgreen Lake, +00884,008840,WBD,Pipestone Lake, +00887,008870,WBD,Cross Lake, +00888,008880,WBD,Kiskittogisu Lake, +00889,008890,WBD,Kiskitto Lake, +59,080000,PT,British Columbia, +5901,084300-084400-084500-085600,CD,East Kootenay, +5901022,084510,CSD,Cranbrook, +5901805,080000,CSD,Cassimayooks (Mayook) 5, +5901012,080000,CSD,Fernie, +5901040,080000,CSD,Radium Hot Springs, +5901006,080000,CSD,Sparwood, +5901801,080000,CSD,Tobacco Plains 2, +5901804,085200-085400-085500,CSD,Columbia Lake 3, +5901039,084520,CSD,Invermere, +5901003,080000,CSD,Elkford, +5901028,080000,CSD,Kimberley, +5901043,080000,CSD,Canal Flats, +5901037,084300-084400-084500-085600,CSD,East Kootenay E, +5901035,084300-084400-084500-085600,CSD,East Kootenay C, +5901019,084300-084400-084500-085600,CSD,East Kootenay B, +5901048,084300-084400-084500-085600,CSD,East Kootenay G, +5901046,084300-084400-084500-085600,CSD,East Kootenay F, +5901803,084300-084400-084500-085600,CSD,Kootenay 1, +5901802,080000,CSD,Isidore's Ranch 4, +5901806,083600,CSD,Shuswap, +5901017,084300-084400-084500-085600,CSD,East Kootenay A, +5903,084300-084400-084500-085600,CD,Central Kootenay, +5903019,080000,CSD,Slocan, +5903010,084300-084400-084500-085600,CSD,Central Kootenay A, +5903011,080000,CSD,Salmo, +5903017,084300-084400-084500-085600,CSD,Central Kootenay C, +5903052,084300-084400-084500-085600,CSD,Central Kootenay H, +5903032,080000,CSD,New Denver, +5903015,080000,CSD,Nelson, +5903013,084300-084400-084500-085600,CSD,Central Kootenay B, +5903058,084300-084400-084500-085600,CSD,Central Kootenay J, +5903004,080000,CSD,Creston, +5903047,084300-084400-084500-085600,CSD,Central Kootenay G, +5903023,080000,CSD,Kaslo, +5903041,084300-084400-084500-085600,CSD,Central Kootenay E, +5903056,084300-084400-084500-085600,CSD,Central Kootenay I, +5903039,084300-084400-084500-085600,CSD,Central Kootenay D, +5903050,080000,CSD,Nakusp, +5903027,080000,CSD,Silverton, +5903045,080000,CSD,Castlegar, +5903807,080000,CSD,Creston 1, +5903060,084300-084400-084500-085600,CSD,Central Kootenay K, +5903043,084300-084400-084500-085600,CSD,Central Kootenay F, +5905,084200-084300-084400-084500-085600,CD,Kootenay Boundary, +5905037,080000,CSD,Midway, +5905042,080000,CSD,Greenwood, +5905018,080000,CSD,Warfield, +5905052,084200-084300-084400-084500-085600,CSD,Kootenay Boundary D, +5905050,084200-084300-084400-084500-085600,CSD,Kootenay Boundary C, +5905023,080000,CSD,Rossland, +5905030,084200-084300-084400-084500-085600,CSD,Kootenay Boundary B, +5905014,080000,CSD,Trail, +5905026,084200-084300-084400-084500-085600,CSD,Kootenay Boundary A, +5905054,084200-084300-084400-084500-085600,CSD,Kootenay Boundary E, +5905005,080000,CSD,Fruitvale, +5905009,080000,CSD,Montrose, +5905032,080000,CSD,Grand Forks, +5907,083400-083500,CD,Okanagan-Similkameen, +5907807,080000,CSD,Chuchuwayha 2, +5907041,083530,CSD,Penticton, +5907049,083400-083500,CSD,Okanagan-Similkameen E, +5907809,080000,CSD,Ashnola 10, +5907028,083400-083500,CSD,Okanagan-Similkameen C, +5907802,080000,CSD,Osoyoos 1, +5907053,083400-083500,CSD,Okanagan-Similkameen G, +5907024,080000,CSD,Princeton, +5907805,080000,CSD,Chopaka 7 & 8, +5907035,080000,CSD,Summerland, +5907801,083400,CSD,Lower Similkameen 2, +5907803,083530,CSD,Penticton 1, +5907047,083400-083500,CSD,Okanagan-Similkameen D, +5907806,080000,CSD,Blind Creek 6, +5907051,083400-083500,CSD,Okanagan-Similkameen F, +5907009,080000,CSD,Keremeos, +5907808,080000,CSD,Alexis 9, +5907026,083400-083500,CSD,Okanagan-Similkameen B, +5907014,080000,CSD,Oliver, +5907055,083400-083500,CSD,Okanagan-Similkameen H, +5907022,083400-083500,CSD,Okanagan-Similkameen A, +5907005,080000,CSD,Osoyoos, +5909,082710-082720,CD,Fraser Valley, +5909804,080000,CSD,Chawathil 4, +5909814,080000,CSD,Skawahlook 1, +5909834,080000,CSD,Tseatah 2, +5909823,080000,CSD,Skowkale 11, +5909848,080000,CSD,Tipella 7, +5909852,080000,CSD,Baptiste Smith 1A, +5909855,080000,CSD,Sachteen 2, +5909817,080000,CSD,Tuckkwiowhum 1, +5909833,080000,CSD,Scowlitz 1, +5909832,080000,CSD,Seabird Island, +5909837,080000,CSD,Cheam 1, +5909881,080000,CSD,Skweahm 10, +5909843,080000,CSD,Peters 1, +5909826,080000,CSD,Skway 5, +5909877,080000,CSD,Upper Sumas 6, +5909822,080000,CSD,Skowkale 10, +5909831,080000,CSD,Yakweakwioose 12, +5909860,080000,CSD,Sachteen 2A, +5909805,080000,CSD,Inkahtsaph 6, +5909836,080000,CSD,Boston Bar 1A, +5909809,080000,CSD,Saddle Rock 9, +5909062,082710-082720,CSD,Fraser Valley G, +5909879,080000,CSD,Holachten 8, +5909064,082710-082720,CSD,Fraser Valley H, +5909821,080000,CSD,Kwawkwawapilt 6, +5909875,080000,CSD,Baptiste Smith 1B, +5909815,080000,CSD,Speyum 3, +5909806,080000,CSD,Kopchitchin 2, +5909812,080000,CSD,Schkam 2, +5909828,080000,CSD,Squiaala 7, +5909827,080000,CSD,Soowahlie 14, +5909048,082710-082720,CSD,Fraser Valley C, +5909845,080000,CSD,Skookumchuck 4, +5909847,080000,CSD,Bucktum 4, +5909056,080000,CSD,Mission, +5909818,080000,CSD,Yale Town 1, +5909876,080000,CSD,Albert Flat 5, +5909808,080000,CSD,Puckatholetchin 11, +5909009,080000,CSD,Hope, +5909810,080000,CSD,Lukseetsissum 9, +5909880,080000,CSD,Lakahahmen 11, +5909016,082710-082720,CSD,Fraser Valley B, +5909825,080000,CSD,Skwali 3, +5909824,080000,CSD,Skwah 4, +5909849,080000,CSD,Skwahla 2, +5909807,080000,CSD,Ohamil 1, +5909841,080000,CSD,Stullawheets 8, +5909842,080000,CSD,Douglas 8, +5909819,080000,CSD,Kahmoose 4, +5909839,080000,CSD,Chehalis 5, +5909882,080000,CSD,Squawkum Creek 3, +5909027,080000,CSD,Harrison Hot Springs, +5909844,080000,CSD,Popkum 1, +5909830,080000,CSD,Tzeachten 13, +5909036,082710-082720,CSD,Fraser Valley E, +5909838,080000,CSD,Schelowat 1, +5909034,082710-082720,CSD,Fraser Valley D, +5909835,080000,CSD,Aitchelitch 9, +5909014,082710-082720,CSD,Fraser Valley A, +5909816,080000,CSD,Spuzzum 1, +5909020,082720,CSD,Chilliwack, +5909032,080000,CSD,Kent, +5909878,080000,CSD,Matsqui Main 2, +5909829,080000,CSD,Squiaala 8, +5909060,082710-082720,CSD,Fraser Valley F, +5909052,082710,CSD,Abbotsford, +5915,081200-081300-081400-081500-082600,CD,Greater Vancouver, +5915051,081200,CSD,North Vancouver, +5915816,080000,CSD,McMillan Island 6, +5915811,080000,CSD,Seymour Creek 2, +5915034,080000,CSD,Coquitlam, +5915809,080000,CSD,Barnston Island 3, +5915840,080000,CSD,Whonnock 1, +5915825,080000,CSD,Matsqui 4, +5915029,080000,CSD,New Westminster, +5915039,080000,CSD,Port Coquitlam, +5915055,081400,CSD,West Vancouver, +5915808,080000,CSD,Capilano 5, +5915807,080000,CSD,Mission 1, +5915803,080000,CSD,Musqueam 2, +5915810,080000,CSD,Musqueam 4, +5915802,080000,CSD,Tsawwassen, +5915002,080000,CSD,Langley, +5915801,080000,CSD,Semiahmoo, +5915025,080000,CSD,Burnaby, +5915004,080000,CSD,Surrey, +5915015,080000,CSD,Richmond, +5915043,080000,CSD,Port Moody, +5915075,080000,CSD,Maple Ridge, +5915804,080000,CSD,Coquitlam 2, +5915835,080000,CSD,Langley 5, +5915036,080000,CSD,Belcarra, +5915830,080000,CSD,Katzie 1, +5915020,080000,CSD,Greater Vancouver A, +5915070,080000,CSD,Pitt Meadows, +5915805,080000,CSD,Coquitlam 1, +5915001,080000,CSD,Langley, +5915007,080000,CSD,White Rock, +5915011,080000,CSD,Delta, +5915046,081200,CSD,North Vancouver, +5915022,082600,CSD,Vancouver, +5915038,080000,CSD,Anmore, +5915806,080000,CSD,Burrard Inlet 3, +5915813,080000,CSD,Katzie 2, +5915065,080000,CSD,Lions Bay, +5915062,080000,CSD,Bowen Island, +5917,080000,CD,Capital, +5917817,080000,CSD,T'Sou-ke 1 (Sooke 1), +5917815,080000,CSD,Gordon River 2, +5917010,080000,CSD,Sidney, +5917015,080000,CSD,Central Saanich, +5917040,080000,CSD,Esquimalt, +5917005,080000,CSD,North Saanich, +5917042,080000,CSD,Metchosin, +5917809,080000,CSD,Becher Bay 1, +5917041,080000,CSD,Colwood, +5917056,080000,CSD,Capital H (Part 2), +5917803,080000,CSD,East Saanich 2, +5917044,080000,CSD,Langford, +5917818,080000,CSD,T'Sou-ke 2 (Sooke 2), +5917805,080000,CSD,Galiano Island 9, +5917029,080000,CSD,Capital G, +5917021,080000,CSD,Saanich, +5917811,080000,CSD,Esquimalt, +5917027,080000,CSD,Capital F, +5917804,080000,CSD,South Saanich 1, +5917052,080000,CSD,Sooke, +5917049,080000,CSD,Highlands, +5917812,080000,CSD,New Songhees 1A, +5917054,080000,CSD,Capital H (Part 1), +5917034,081600,CSD,Victoria, +5917802,080000,CSD,Union Bay 4, +5917801,080000,CSD,Cole Bay 3, +5917047,080000,CSD,View Royal, +5917030,080000,CSD,Oak Bay, +5919,080000,CD,Cowichan Valley, +5919814,080000,CSD,Malachan 11, +5919807,080000,CSD,Cowichan 1, +5919809,080000,CSD,Kuper Island 7, +5919051,080000,CSD,Cowichan Valley E, +5919820,080000,CSD,Est-Patrolas 4, +5919043,080000,CSD,Cowichan Valley A, +5919815,080000,CSD,Malahat 11, +5919033,080000,CSD,Cowichan Valley F, +5919804,080000,CSD,Chemainus 13, +5919812,080000,CSD,Cowichan Lake, +5919035,080000,CSD,Cowichan Valley I, +5919015,080000,CSD,Cowichan Valley G, +5919802,080000,CSD,Squaw-hay-one 11, +5919803,080000,CSD,Tsussie 6, +5919816,080000,CSD,Oyster Bay 12, +5919801,080000,CSD,Halalt 2, +5919021,080000,CSD,Ladysmith, +5919811,080000,CSD,Shingle Point 4, +5919817,080000,CSD,Portier Pass 5, +5919013,080000,CSD,Cowichan Valley D, +5919046,080000,CSD,Cowichan Valley B, +5919818,080000,CSD,Theik 2, +5919808,080000,CSD,Kil-pah-las 3, +5919049,080000,CSD,Cowichan Valley C, +5919016,080000,CSD,Lake Cowichan, +5919017,080000,CSD,Cowichan Valley H, +5919806,080000,CSD,Cowichan 9, +5919821,080000,CSD,Tzart-Lam 5, +5919012,080000,CSD,Duncan, +5919008,080000,CSD,North Cowichan, +5921,080000,CD,Nanaimo, +5921014,080000,CSD,Nanaimo B, +5921806,080000,CSD,Qualicum, +5921032,080000,CSD,Nanaimo F, +5921007,080000,CSD,Nanaimo, +5921010,080000,CSD,Nanaimo A, +5921016,080000,CSD,Nanaimo C, +5921018,080000,CSD,Parksville, +5921805,080000,CSD,Nanoose, +5921804,080000,CSD,Nanaimo Town 1, +5921801,080000,CSD,Nanaimo River 3, +5921023,080000,CSD,Qualicum Beach, +5921034,080000,CSD,Nanaimo G, +5921036,080000,CSD,Nanaimo H, +5921030,080000,CSD,Nanaimo E, +5921802,080000,CSD,Nanaimo River 2, +5921803,080000,CSD,Nanaimo River 4, +5921008,080000,CSD,Lantzville, +5923,080000,CD,Alberni-Clayoquot, +5923049,080000,CSD,Alberni-Clayoquot C, +5923806,080000,CSD,Hesquiat 1, +5923808,080000,CSD,Marktosis 15, +5923824,080000,CSD,Refuge Cove 6, +5923825,080000,CSD,Tin Wis 11, +5923822,080000,CSD,Klehkoot 2, +5923810,080000,CSD,Macoah 1, +5923816,080000,CSD,Tsahaheh 1, +5923047,080000,CSD,Alberni-Clayoquot A, +5923813,080000,CSD,Opitsat 1, +5923025,080000,CSD,Tofino, +5923033,080000,CSD,Alberni-Clayoquot B, +5923019,080000,CSD,Ucluelet, +5923802,080000,CSD,Alberni 2, +5923801,080000,CSD,Ahahswinis 1, +5923804,080000,CSD,Clakamucus 2, +5923803,080000,CSD,Anacla 12, +5923809,080000,CSD,Numukamis 1, +5923805,080000,CSD,Elhlateese 2, +5923008,080000,CSD,Port Alberni, +5923814,080000,CSD,Sachsa 4, +5923035,080000,CSD,Alberni-Clayoquot D, +5923823,080000,CSD,Esowista 3, +5923037,080000,CSD,Alberni-Clayoquot E, +5923039,080000,CSD,Alberni-Clayoquot F, +5923807,080000,CSD,Ittatsoo 1, +5924,080000,CD,Strathcona, +5924806,080000,CSD,Houpsitas 6, +5924805,080000,CSD,Chenahkint 12, +5924052,080000,CSD,Strathcona B, +5924025,080000,CSD,Gold River, +5924812,080000,CSD,Quinsam 12, +5924813,080000,CSD,Village Island 1, +5924835,080000,CSD,Tsa Xana 18, +5924804,080000,CSD,Campbell River 11, +5924034,080000,CSD,Campbell River, +5924048,080000,CSD,Strathcona A, +5924042,080000,CSD,Strathcona D (Oyster Bay - Buttle Lake), +5924840,080000,CSD,Homalco 9, +5924814,080000,CSD,Yuquot 1, +5924817,080000,CSD,Cape Mudge 10, +5924030,080000,CSD,Tahsis, +5924803,080000,CSD,Ahaminaquus 12, +5924054,080000,CSD,Strathcona C, +5924833,080000,CSD,Oclucje 7, +5924039,080000,CSD,Sayward, +5924836,080000,CSD,Ehatis 11, +5924029,080000,CSD,Zeballos, +5924818,080000,CSD,Squirrel Cove 8, +5924820,080000,CSD,Tork 7, +5926,080000,CD,Comox Valley, +5926022,080000,CSD,Comox Valley B (Lazo North), +5926801,080000,CSD,Comox 1, +5926014,080000,CSD,Cumberland, +5926021,080000,CSD,Comox Valley A, +5926024,080000,CSD,Comox Valley C (Puntledge - Black Creek), +5926010,080000,CSD,Courtenay, +5926802,080000,CSD,Pentledge 2, +5926005,080000,CSD,Comox, +5927,080000,CD,Powell River, +5927018,080000,CSD,Powell River D, +5927806,080000,CSD,Sechelt (Part), +5927012,080000,CSD,Powell River B, +5927020,080000,CSD,Powell River E, +5927008,080000,CSD,Powell River, +5927016,080000,CSD,Powell River C, +5927802,080000,CSD,Sliammon 1, +5927010,080000,CSD,Powell River A, +5929,082300,CD,Sunshine Coast, +5929005,080000,CSD,Gibsons, +5929801,080000,CSD,Chekwelp 26, +5929011,080000,CSD,Sechelt, +5929803,080000,CSD,Sechelt (Part), +5929018,082300,CSD,Sunshine Coast A, +5929028,082300,CSD,Sunshine Coast F, +5929026,082300,CSD,Sunshine Coast E, +5929022,082300,CSD,Sunshine Coast B, +5929024,082300,CSD,Sunshine Coast D, +5931,080000,CD,Squamish-Lillooet, +5931826,080000,CSD,Necait 6, +5931026,080000,CSD,Lillooet, +5931823,080000,CSD,McCartney's Flat 4, +5931832,080000,CSD,Towinock 2, +5931806,080000,CSD,Seaichem 16, +5931807,080000,CSD,Stawamus 24, +5931816,080000,CSD,Fountain 1, +5931840,080000,CSD,Nequatque 2, +5931034,080000,CSD,Squamish-Lillooet B, +5931837,080000,CSD,Mount Currie 8, +5931813,080000,CSD,Bridge River 1, +5931817,080000,CSD,Fountain 3, +5931809,080000,CSD,Yekwaupsum 18, +5931842,080000,CSD,Fountain 1B, +5931811,080000,CSD,Mount Currie 2, +5931021,080000,CSD,Squamish-Lillooet D, +5931829,080000,CSD,Pavilion 1, +5931818,080000,CSD,Fountain 10, +5931827,080000,CSD,Nesikep 6, +5931801,080000,CSD,Cheakamus 11, +5931006,080000,CSD,Squamish, +5931824,080000,CSD,Seton Lake 5, +5931032,080000,CSD,Squamish-Lillooet A, +5931821,080000,CSD,Lillooet 1, +5931810,080000,CSD,Nequatque 3A, +5931822,080000,CSD,Fountain Creek 8, +5931804,080000,CSD,Mount Currie 10, +5931017,080000,CSD,Squamish-Lillooet C, +5931805,080000,CSD,Nequatque 1, +5931820,080000,CSD,Fountain 12, +5931812,080000,CSD,Nesuch 3, +5931020,082400,CSD,Whistler, +5931808,080000,CSD,Waiwakum 14, +5931802,080000,CSD,Kowtain 17, +5931819,080000,CSD,Fountain 11, +5931815,080000,CSD,Chilhil 6, +5931838,080000,CSD,Mount Currie 6, +5931012,080000,CSD,Pemberton, +5931803,080000,CSD,Mount Currie 1, +5931831,080000,CSD,Slosh 1, +5931833,080000,CSD,Mission 5, +5931814,080000,CSD,Cayoosh Creek 1, +5931828,080000,CSD,Pashilqua 2, +5933,083200-085100-083300,CD,Thompson-Nicola, +5933836,080000,CSD,Lower Hat Creek 2, +5933042,080000,CSD,Kamloops, +5933822,080000,CSD,Chuchhriaschin 5A, +5933894,080000,CSD,Inkluckcheen 21B, +5933879,080000,CSD,Zacht 5, +5933817,080000,CSD,Skeetchestn, +5933068,083200-085100-083300,CSD,Thompson-Nicola A (Wells Gray Country), +5933819,080000,CSD,High Bar 1, +5933845,080000,CSD,105 Mile Post 2, +5933037,083200-085100-083300,CSD,Thompson-Nicola I (Blue Sky Country), +5933880,080000,CSD,Kamloops 1, +5933842,080000,CSD,Lytton 9B, +5933852,080000,CSD,Nohomeen 23, +5933896,080000,CSD,Nekliptum 1, +5933897,080000,CSD,Boothroyd 8A (Part), +5933805,080000,CSD,Joeyaska 2, +5933809,080000,CSD,Paul's Basin 2, +5933015,080000,CSD,Lytton, +5933865,080000,CSD,Skuppah 4, +5933814,080000,CSD,Canoe Creek 1, +5933821,080000,CSD,Canoe Creek 2, +5933887,083200-085100-083300,CSD,North Thompson 1, +5933812,080000,CSD,Bonaparte 3, +5933876,080000,CSD,Upper Nepa 6, +5933840,080000,CSD,Lytton 4E, +5933861,080000,CSD,Kloklowuck 7, +5933060,083200-085100-083300,CSD,Thompson-Nicola L, +5933883,080000,CSD,Neskonlith 1 (Neskainlith 1), +5933864,080000,CSD,Siska Flat 8, +5933802,080000,CSD,Douglas Lake 3, +5933072,083200-085100-083300,CSD,Thompson-Nicola O (Lower North Thompson), +5933860,080000,CSD,Siska Flat 3, +5933878,080000,CSD,Yawaucht 11, +5933070,083200-085100-083300,CSD,Thompson-Nicola B (Thompson Headwaters), +5933889,080000,CSD,Squaam 2, +5933054,080000,CSD,Chase, +5933870,080000,CSD,Nkaih 10, +5933895,080000,CSD,Shawniken 4B, +5933820,080000,CSD,Inkluckcheen 21, +5933853,080000,CSD,Nuuautin 2, +5933855,080000,CSD,Papyum 27, +5933006,080000,CSD,Merritt, +5933806,080000,CSD,Nicola Lake 1, +5933801,080000,CSD,Coldwater 1, +5933867,080000,CSD,Spences Bridge 4, +5933829,080000,CSD,Klahkamich 17, +5933872,080000,CSD,Marble Canyon 3, +5933886,080000,CSD,Nekalliston 2, +5933858,080000,CSD,Seah 5, +5933848,080000,CSD,Nickel Palm 4, +5933839,080000,CSD,Lytton 4A, +5933874,080000,CSD,Tsaukan 12, +5933868,080000,CSD,Spintlum Flat 3, +5933826,080000,CSD,Kanaka Bar 1A, +5933808,080000,CSD,Nooaitch 10, +5933008,083200-085100-083300,CSD,Thompson-Nicola M, +5933039,083200-085100-083300,CSD,Thompson-Nicola J (Copper Desert Country), +5933024,080000,CSD,Cache Creek, +5933844,080000,CSD,Ashcroft 4, +5933877,080000,CSD,Whispering Pines 4, +5933828,080000,CSD,Basque 18, +5933837,080000,CSD,Peq-Paq 22, +5933834,080000,CSD,Kumcheen 1, +5933841,080000,CSD,Lytton 9A, +5933873,080000,CSD,Stryen 9, +5933815,080000,CSD,Halhalaeden 14A, +5933832,080000,CSD,Klickkumcheen 18, +5933850,080000,CSD,Nickeyeah 25, +5933824,080000,CSD,Skuppah 2A, +5933825,080000,CSD,Inklyuhkinatko 2, +5933827,080000,CSD,Kanaka Bar 2, +5933019,080000,CSD,Ashcroft, +5933032,083200-085100-083300,CSD,Thompson-Nicola E (Bonaparte Plateau), +5933067,080000,CSD,Clearwater, +5933028,080000,CSD,Clinton, +5933875,080000,CSD,Upper Hat Creek 1, +5933044,083200-085100-083300,CSD,Thompson-Nicola P (Rivers and the Peaks), +5933888,080000,CSD,Louis Creek 4, +5933854,080000,CSD,Paska Island 3, +5933857,080000,CSD,Pemynoos 9, +5933871,080000,CSD,Spences Bridge 4C, +5933818,080000,CSD,Halhalaeden 14, +5933884,080000,CSD,Sahhaltkum 4, +5933823,080000,CSD,Kitzowit 20, +5933803,080000,CSD,Hamilton Creek 2, +5933012,083200-085100-083300,CSD,Thompson-Nicola N, +5933811,080000,CSD,Zoht 4, +5933830,080000,CSD,Klahkowit 5, +5933035,080000,CSD,Logan Lake, +5933816,080000,CSD,Chuchhriaschin 5, +5933831,080000,CSD,Kleetlekut 22, +5933851,080000,CSD,Nicomen 1, +5933859,080000,CSD,Shackan 11, +5933885,080000,CSD,Neskonlith 2, +5933866,080000,CSD,Skwayaynope 26, +5933807,080000,CSD,Nicola Mameet 1, +5933846,080000,CSD,Oregon Jack Creek 5, +5933074,080000,CSD,Barriere, +5935,083520,CD,Central Okanagan, +5935016,080000,CSD,Lake Country, +5935802,080000,CSD,Tsinstikeptum 9, +5935010,083520,CSD,Kelowna, +5935803,080000,CSD,Tsinstikeptum 10, +5935029,083520,CSD,West Kelowna, +5935020,083520,CSD,Central Okanagan J, +5935018,080000,CSD,Peachland, +5935012,083520,CSD,Central Okanagan, +5935801,080000,CSD,Duck Lake 7, +5937,083510,CD,North Okanagan, +5937802,080000,CSD,Enderby 2, +5937805,080000,CSD,Harris 3, +5937014,083510,CSD,Vernon, +5937005,080000,CSD,Lumby, +5937801,083500,CSD,Okanagan (Part) 1, +5937024,080000,CSD,Spallumcheen, +5937017,083510,CSD,North Okanagan B, +5937033,080000,CSD,Enderby, +5937010,080000,CSD,Coldstream, +5937022,083510,CSD,North Okanagan D, +5937028,080000,CSD,Armstrong, +5937803,080000,CSD,Priest's Valley 6, +5937041,083510,CSD,North Okanagan F, +5937021,083510,CSD,North Okanagan C, +5937023,083510,CSD,North Okanagan E, +5939,083600-085200-085400-085500,CD,Columbia-Shuswap, +5939804,083500,CSD,Okanagan (Part) 1, +5939809,080000,CSD,Switsemalph 6, +5939019,080000,CSD,Revelstoke, +5939023,083600-085200-085400-085500,CSD,Columbia-Shuswap B, +5939807,080000,CSD,Scotch Creek 4, +5939801,080000,CSD,Chum Creek 2, +5939803,080000,CSD,North Bay 5, +5939007,080000,CSD,Golden, +5939044,083600-085200-085400-085500,CSD,Columbia-Shuswap F, +5939037,083600-085200-085400-085500,CSD,Columbia-Shuswap C, +5939032,080000,CSD,Salmon Arm, +5939808,080000,CSD,Switsemalph 3, +5939011,083600-085200-085400-085500,CSD,Columbia-Shuswap A, +5939802,080000,CSD,Hustalen 1, +5939805,080000,CSD,Quaaout 1, +5939806,080000,CSD,Salmon River 1, +5939810,080000,CSD,Switsemalph 7, +5939043,083600-085200-085400-085500,CSD,Columbia-Shuswap E, +5939039,083600-085200-085400-085500,CSD,Columbia-Shuswap D, +5939045,080000,CSD,Sicamous, +5941,086210-086220,CD,Cariboo, +5941835,080000,CSD,Coglistiko River 29, +5941881,080000,CSD,Baezaeko River 27, +5941871,080000,CSD,Fishtrap 19, +5941827,080000,CSD,Charley Boy's Meadow 3, +5941818,080000,CSD,Alexis Creek 16, +5941822,080000,CSD,Anahim's Meadow 2, +5941810,080000,CSD,Soda Creek 1, +5941831,080000,CSD,Tanakut 4, +5941872,080000,CSD,Swan Lake 3, +5941807,080000,CSD,Dog Creek 2, +5941864,080000,CSD,Sundayman's Meadow 3, +5941010,086210-086220,CSD,Cariboo D, +5941834,080000,CSD,Louis Squinas Ranch 14, +5941852,080000,CSD,Trout Lake Alec 16, +5941837,080000,CSD,Nazco 20, +5941821,080000,CSD,Anahim's Flat 1, +5941841,080000,CSD,Stone 1, +5941832,080000,CSD,Garden 2A, +5941808,080000,CSD,Lohbiee 3, +5941850,080000,CSD,Toosey 1, +5941868,080000,CSD,Sandy Harry 4, +5941803,080000,CSD,Canim Lake 4, +5941861,080000,CSD,Betty Creek 18, +5941801,080000,CSD,Alkali Lake 1, +5941858,080000,CSD,Cahoose 10, +5941854,080000,CSD,Ulkatcho 13, +5941846,080000,CSD,Toby's Meadow 4, +5941014,086210-086220,CSD,Cariboo F, +5941815,080000,CSD,Alexandria 1, +5941849,080000,CSD,Baptiste Meadow 2, +5941813,080000,CSD,Canim Lake 2, +5941005,080000,CSD,One Hundred Mile House, +5941880,080000,CSD,Ulkatcho 14A, +5941811,080000,CSD,Johny Sticks 2, +5941865,080000,CSD,Tatelkus Lake 28, +5941866,080000,CSD,Euchinico Creek 17, +5941856,080000,CSD,Alexis Creek 34, +5941019,086210-086220,CSD,Cariboo A, +5941820,080000,CSD,Alexis Creek 25, +5941819,080000,CSD,Alexis Creek 24, +5941009,086220,CSD,Williams Lake, +5941812,086220,CSD,Williams Lake 1, +5941874,080000,CSD,Little Springs 8, +5941855,080000,CSD,Windy Mouth 7, +5941806,080000,CSD,Dog Creek 1, +5941017,086210-086220,CSD,Cariboo L, +5941860,080000,CSD,Cahoose 12, +5941840,080000,CSD,Squinas 2, +5941026,086210-086220,CSD,Cariboo C, +5941870,080000,CSD,Alexandria 1A, +5941823,080000,CSD,Anahim's Meadow 2A, +5941876,080000,CSD,Lezbye 6, +5941804,080000,CSD,Canoe Creek 3, +5941802,080000,CSD,Canim Lake 1, +5941027,086210-086220,CSD,Cariboo I, +5941859,080000,CSD,Blackwater Meadow 11, +5941845,080000,CSD,Thomas Squinas Ranch 2A, +5941851,080000,CSD,Towdystan Lake 3, +5941843,080000,CSD,Seymour Meadows 19, +5941844,080000,CSD,Agats Meadow 8, +5941012,086210-086220,CSD,Cariboo E, +5941830,080000,CSD,Garden 2, +5941015,086210-086220,CSD,Cariboo G, +5941875,080000,CSD,Little Springs 18, +5941809,086210,CSD,Quesnel 1, +5941863,080000,CSD,Tzetzi Lake 11, +5941833,080000,CSD,Kluskus 1, +5941847,080000,CSD,Alexis Creek 6, +5941879,080000,CSD,Michel Gardens 36, +5941816,080000,CSD,Alexandria 3, +5941873,080000,CSD,Alkali Lake 4A, +5941039,086210-086220,CSD,Cariboo J, +5941862,080000,CSD,Salmon River Meadow 7, +5941021,086210-086220,CSD,Cariboo B, +5941013,086210,CSD,Quesnel, +5941041,086210-086220,CSD,Cariboo K, +5941817,080000,CSD,Alexis Creek 14, +5941838,080000,CSD,Puntzi Lake 2, +5941839,080000,CSD,Redstone Flat 1, +5941805,080000,CSD,Deep Creek 2, +5941829,080000,CSD,Chilco Lake 1A, +5941016,086210-086220,CSD,Cariboo H, +5941025,080000,CSD,Wells, +5941814,080000,CSD,Alexandria 3A, +5941828,080000,CSD,Chilco Lake 1, +5941842,080000,CSD,Alexis Creek 17, +5941848,080000,CSD,Alexis Creek 21, +5943,080000,CD,Mount Waddington, +5943023,080000,CSD,Port Hardy, +5943017,080000,CSD,Port Alice, +5943801,080000,CSD,Alert Bay 1, +5943008,080000,CSD,Alert Bay, +5943807,080000,CSD,Dead Point 5, +5943836,080000,CSD,Hope Island 1, +5943809,080000,CSD,Hopetown 10A, +5943802,080000,CSD,Alert Bay 1A, +5943817,080000,CSD,Thomas Point 5, +5943012,080000,CSD,Port McNeill, +5943033,080000,CSD,Mount Waddington D, +5943031,080000,CSD,Mount Waddington C, +5943808,080000,CSD,Gwayasdums 1, +5943806,080000,CSD,Tsulquate 4, +5943813,080000,CSD,Quaee 7, +5943037,080000,CSD,Mount Waddington A, +5943027,080000,CSD,Mount Waddington B, +5943804,080000,CSD,Fort Rupert 1, +5943815,080000,CSD,Kippase 2, +5943816,080000,CSD,Quatsino Subdivision 18, +5945,082100-082200,CD,Central Coast, +5945012,082100-082200,CSD,Central Coast D, +5945006,082100-082200,CSD,Central Coast A, +5945802,080000,CSD,Bella Coola 1, +5945801,080000,CSD,Bella Bella 1, +5945014,082100-082200,CSD,Central Coast E, +5945803,080000,CSD,Katit 1, +5945010,082100-082200,CSD,Central Coast C, +5947,080000,CD,Skeena-Queen Charlotte, +5947809,080000,CSD,Lax Kw'alaams 1, +5947810,080000,CSD,S1/2 Tsimpsean 2, +5947021,080000,CSD,Skeena-Queen Charlotte C, +5947030,080000,CSD,Port Clements, +5947027,080000,CSD,Skeena-Queen Charlotte D, +5947007,080000,CSD,Port Edward, +5947807,080000,CSD,Dolphin Island 1, +5947023,080000,CSD,Masset, +5947012,080000,CSD,Prince Rupert, +5947026,080000,CSD,Queen Charlotte, +5947032,080000,CSD,Skeena-Queen Charlotte E, +5947806,080000,CSD,Kulkayu (Hartley Bay) 4, +5947016,080000,CSD,Skeena-Queen Charlotte A, +5947803,080000,CSD,Masset 1, +5947804,080000,CSD,Skidegate 1, +5949,080000,CD,Kitimat-Stikine, +5949845,089300,CSD,Dease Lake 9, +5949840,080000,CSD,Laxgalts'ap, +5949024,080000,CSD,New Hazelton, +5949804,080000,CSD,Kitsumkaylum 1, +5949020,080000,CSD,Kitimat-Stikine C (Part 2), +5949830,080000,CSD,Kluachon Lake 1, +5949032,080000,CSD,Stewart, +5949844,080000,CSD,Kitselas 1, +5949842,080000,CSD,Gingolx, +5949838,080000,CSD,Gitwinksihlkw, +5949811,080000,CSD,Hagwilget 1, +5949807,080000,CSD,Kulspai 6, +5949826,080000,CSD,Telegraph Creek 6, +5949846,080000,CSD,Tahltan 1, +5949013,080000,CSD,Kitimat-Stikine C (Part 1), +5949812,080000,CSD,Gitanmaax 1, +5949028,080000,CSD,Kitimat-Stikine B, +5949041,080000,CSD,Kitimat-Stikine D, +5949832,080000,CSD,Iskut 6, +5949022,080000,CSD,Hazelton, +5949817,080000,CSD,Moricetown 1, +5949816,080000,CSD,Gitwangak 1, +5949802,080000,CSD,Kitasoo 1, +5949843,080000,CSD,Guhthe Tah 12, +5949815,080000,CSD,Gitanyow 1, +5949820,087110-087120,CSD,Bulkley River 19, +5949805,080000,CSD,Kshish 4, +5949039,080000,CSD,Kitimat-Stikine A, +5949035,080000,CSD,Nisga'a, +5949818,080000,CSD,Sik-e-dakh 2, +5949810,080000,CSD,Coryatsaqua (Moricetown) 2, +5949005,080000,CSD,Kitimat, +5949018,080000,CSD,Kitimat-Stikine E, +5949011,080000,CSD,Terrace, +5949803,080000,CSD,Kitamaat 2, +5949038,080000,CSD,Kitimat-Stikine F, +5949827,080000,CSD,Telegraph Creek 6A, +5949836,080000,CSD,Aiyansh (Kitladamas) 1, +5949834,080000,CSD,New Aiyansh, +5949814,080000,CSD,Gitsegukla 1, +5949819,080000,CSD,Babine 17, +5949813,080000,CSD,Kispiox 1, +5951,087110-087120,CD,Bulkley-Nechako, +5951053,087110-087120,CSD,Bulkley-Nechako G, +5951051,087110-087120,CSD,Bulkley-Nechako A, +5951845,080000,CSD,Tadinlay 15, +5951034,080000,CSD,Houston, +5951805,080000,CSD,Binche 2 (Pinchie 2), +5951013,080000,CSD,Fort St. James, +5951009,080000,CSD,Fraser Lake, +5951032,080000,CSD,Granisle, +5951043,087110,CSD,Smithers, +5951801,080000,CSD,Ye Koo Che 3, +5951815,087120,CSD,Burns Lake 18, +5951818,080000,CSD,Cheslatta 1, +5951804,080000,CSD,Sowchea 3, +5951007,080000,CSD,Vanderhoof, +5951015,087110-087120,CSD,Bulkley-Nechako C, +5951830,080000,CSD,Jean Baptiste 28, +5951031,087110-087120,CSD,Bulkley-Nechako E, +5951812,080000,CSD,North Tacla Lake 7, +5951846,080000,CSD,Nedoats 11, +5951814,080000,CSD,Dzitline Lee 9, +5951824,080000,CSD,Skins Lake 16B, +5951019,087110-087120,CSD,Bulkley-Nechako F, +5951822,080000,CSD,Francois Lake 7, +5951823,080000,CSD,Skins Lake 16A, +5951819,080000,CSD,Omineca 1, +5951840,080000,CSD,Williams Prairie Meadow 1A, +5951833,080000,CSD,Tatla't East 2, +5951803,080000,CSD,Nak'azdli (Necoslie 1), +5951841,080000,CSD,North Tacla Lake 7A, +5951811,080000,CSD,Tacla Lake (Ferry Landing) 9, +5951821,080000,CSD,Duncan Lake 2, +5951847,080000,CSD,Babine Lake 21B, +5951810,080000,CSD,Tache 1, +5951825,080000,CSD,Tatla West 11, +5951022,087120,CSD,Burns Lake, +5951826,080000,CSD,Uncha Lake 13A, +5951813,080000,CSD,Laketown 3, +5951038,080000,CSD,Telkwa, +5951844,080000,CSD,Poison Creek 17A, +5951809,080000,CSD,Stony Creek 1, +5951828,080000,CSD,Babine 6, +5951820,080000,CSD,Palling 1, +5951827,080000,CSD,Woyenne 27, +5951829,080000,CSD,Babine 25, +5951028,087110-087120,CSD,Bulkley-Nechako B, +5951017,087110-087120,CSD,Bulkley-Nechako D, +5951806,080000,CSD,Seaspunkut 4, +5951802,080000,CSD,Nautley (Fort Fraser) 1, +5951807,080000,CSD,Stellaquo (Stella) 1, +5953,080000,CD,Fraser-Fort George, +5953044,080000,CSD,Fraser-Fort George D, +5953019,080000,CSD,Fraser-Fort George H, +5953042,080000,CSD,Fraser-Fort George C, +5953007,080000,CSD,Valemount, +5953023,087400,CSD,Prince George, +5953012,080000,CSD,McBride, +5953050,080000,CSD,Fraser-Fort George G, +5953033,080000,CSD,Mackenzie, +5953048,080000,CSD,Fraser-Fort George F, +5953801,080000,CSD,Fort George (Shelley) 2, +5953046,080000,CSD,Fraser-Fort George E, +5953038,080000,CSD,Fraser-Fort George A, +5953802,080000,CSD,McLeod Lake 1, +5955,087310-087320,CD,Peace River, +5955034,080000,CSD,Fort St. John, +5955812,080000,CSD,Ingenika Point, +5955005,080000,CSD,Pouce Coupe, +5955040,087310-087320,CSD,Peace River B, +5955807,080000,CSD,Fort Ware 1, +5955808,080000,CSD,Halfway River 168, +5955010,080000,CSD,Chetwynd, +5955014,080000,CSD,Dawson Creek, +5955042,087310-087320,CSD,Peace River C, +5955802,080000,CSD,West Moberly Lake 168A, +5955803,080000,CSD,Blueberry River 205, +5955804,080000,CSD,Doig River 206, +5955003,080000,CSD,Tumbler Ridge, +5955023,087310-087320,CSD,Peace River E, +5955025,080000,CSD,Hudson's Hope, +5955021,087310-087320,CSD,Peace River D, +5955801,080000,CSD,East Moberly Lake 169, +5955030,080000,CSD,Taylor, +5957,080000,CD,Stikine, +5957814,080000,CSD,Liard River 3, +5957022,080000,CSD,Stikine Region, +5957802,080000,CSD,Unnamed 10, +5957813,080000,CSD,Lower Post, +5957804,080000,CSD,Good Hope Lake, +5957803,080000,CSD,Five Mile Point 3, +5959,080000,CD,Northern Rockies, +5959810,080000,CSD,Prophet River 4, +5959805,080000,CSD,Fontas 1, +5959806,088100,CSD,Fort Nelson 2, +5959809,080000,CSD,Kahntah 3, +5959007,080000,CSD,Northern Rockies, +48,070000,PT,Alberta, +4801,074200,CD,Division No. 1, +4801018,074242,CSD,Redcliff, +4801009,074310,CSD,Foremost, +4801003,074211-074212-074241-074242-074251-074252-074253-074261-074262-074340-074360,CSD,Cypress County, +4801008,073350-074280-074310-074320-074330-074350,CSD,Forty Mile County No. 8, +4801006,074270,CSD,Medicine Hat, +4801014,074280,CSD,Bow Island, +4802,073300,CD,Division No. 2, +4802032,074232,CSD,Tilley, +4802011,073311-073312-073313,CSD,Lethbridge County, +4802008,070000,CSD,Raymond, +4802016,073311,CSD,Barons, +4802018,073312,CSD,Picture Butte, +4802006,073341,CSD,Warner, +4802002,073342,CSD,Coutts, +4802036,072653,CSD,Duchess, +4802034,072600,CSD,Brooks, +4802012,073314,CSD,Lethbridge, +4802014,073311,CSD,Nobleford, +4802013,073311,CSD,Coalhurst, +4802001,073331-073332-073341-073342-073343,CSD,Warner County No. 5, +4802029,073321,CSD,Vauxhall, +4802031,072651-072652-072653-072654-074231-074232,CSD,Newell County No. 4, +4802004,073342,CSD,Milk River, +4802038,072653,CSD,Rosemary, +4802023,073322,CSD,Barnwell, +4802022,073321-073322-073323,CSD,Taber, +4802039,072651,CSD,Bassano, +4802009,072240,CSD,Stirling, +4802019,073313,CSD,Coaldale, +4802021,073321-073322-073323,CSD,Taber, +4803,072500,CD,Division No. 3, +4803011,073150-073160,CSD,Pincher Creek No. 9, +4803003,073170,CSD,Improvement District No. 4 Waterton, +4803801,073130,CSD,Piikani 147, +4803022,072542,CSD,Claresholm, +4803004,073242,CSD,Cardston, +4803021,073211,CSD,Granum, +4803019,073212,CSD,Fort Macleod, +4803026,072541,CSD,Nanton, +4803803,073170-073221,CSD,Blood 148A, +4803024,072542,CSD,Stavely, +4803008,073222,CSD,Hill Spring, +4803002,073222,CSD,Magrath, +4803006,073222,CSD,Glenwood, +4803014,073160,CSD,Pincher Creek, +4803001,073222-073231-073232-073241-073242,CSD,Cardston County, +4803016,073120,CSD,Cowley, +4803802,073170-073221,CSD,Blood 148, +4803018,072541-072542-073211-073212,CSD,Willow Creek No. 26, +4804,074100,CD,Division No. 4, +4804014,074144,CSD,Oyen, +4804001,074160,CSD,Acadia No. 34, +4804006,074224,CSD,Empress, +4804016,074144,CSD,Cereal, +4804020,070000,CSD,Special Area No. 4, +4804021,074131,CSD,Veteran, +4804011,074122,CSD,Hanna, +4804022,074131,CSD,Consort, +4804012,070000,CSD,Special Area No. 3, +4804019,074141,CSD,Youngstown, +4804004,070000,CSD,Special Area No. 2, +4805,072600,CD,Division No. 5, +4805021,072632,CSD,Standard, +4805004,072643,CSD,Champion, +4805009,072645,CSD,Milo, +4805802,072633,CSD,Siksika 146, +4805042,072322,CSD,Carbon, +4805022,072341,CSD,Rockyford, +4805012,072341-072342-072631-072632-072634,CSD,Wheatland County, +4805044,072321,CSD,Acme, +4805026,072350,CSD,Drumheller, +4805001,072641-072642-072643-072644-072645,CSD,Vulcan County, +4805006,072642,CSD,Vulcan, +4805011,072641,CSD,Arrowwood, +4805002,072643,CSD,Carmangay, +4805008,072644,CSD,Lomond, +4805019,072634,CSD,Hussar, +4805018,072631,CSD,Strathmore, +4805046,072321,CSD,Linden, +4805048,072313,CSD,Three Hills, +4805036,072332,CSD,Munson, +4805049,070000,CSD,Trochu, +4805034,072333,CSD,Delia, +4805038,072332,CSD,Morrin, +4805041,072311-072312-072313-072321-072322,CSD,Kneehill County, +4805031,072331-072332-072333,CSD,Starland County, +4806,072400,CD,Division No. 6, +4806014,072250-072260-072270-072360-072510-072610,CSD,Rocky View County, +4806804,072510,CSD,Tsuu T'ina Nation 145 (Sarcee 145), +4806019,072270,CSD,Cochrane, +4806017,072610,CSD,Chestermere, +4806803,072523,CSD,Eden Valley 216, +4806006,072532,CSD,High River, +4806001,072521-072522-072523-072531-072532-072533-072620,CSD,Foothills No. 31, +4806011,072522,CSD,Black Diamond, +4806021,072250,CSD,Airdrie, +4806012,072531,CSD,Okotoks, +4806009,072522,CSD,Turner Valley, +4806022,072360,CSD,Irricana, +4806026,072250,CSD,Crossfield, +4806008,072523,CSD,Longview, +4806016,072400,CSD,Calgary, +4806024,072360,CSD,Beiseker, +4806031,072230,CSD,Cremona, +4806036,072210,CSD,Sundre, +4806034,072220,CSD,Olds, +4806029,072240,CSD,Carstairs, +4806032,072220,CSD,Didsbury, +4806028,072210-072220-072230-072240,CSD,Mountain View County, +4807,075200,CD,Division No. 7, +4807006,075281,CSD,Hughenden, +4807052,075273,CSD,Edgerton, +4807048,075242,CSD,Hardisty, +4807044,075241,CSD,Sedgewick, +4807038,076660,CSD,Heisler, +4807036,072160,CSD,Forestburg, +4807001,075281-075282-075283,CSD,Provost No. 52, +4807008,075281,CSD,Amisk, +4807046,075242,CSD,Lougheed, +4807034,072160,CSD,Galahad, +4807012,074113,CSD,Coronation, +4807026,072131-072132-072133-072134-072135,CSD,Stettler, +4807004,075282,CSD,Czar, +4807042,075241,CSD,Killam, +4807032,075243,CSD,Alliance, +4807029,072133,CSD,Donalda, +4807022,072134,CSD,Gadsby, +4807014,074111,CSD,Castor, +4807011,074111-074112-074113,CSD,Paintearth County No. 18, +4807021,072132,CSD,Big Valley, +4807051,075274,CSD,Chauvin, +4807039,076660,CSD,Daysland, +4807027,070000,CSD,White Sands, +4807041,076660,CSD,Strome, +4807054,075272,CSD,Wainwright, +4807002,075283,CSD,Provost, +4807016,072150,CSD,Halkirk, +4807028,072131,CSD,Rochon Sands, +4807024,072134,CSD,Botha, +4807031,072160-075241-075242-075243-076660,CSD,Flagstaff County, +4807019,072131-072132-072133-072134-072135,CSD,Stettler County No. 6, +4807056,075271,CSD,Irma, +4807049,075271-075272-075273-075274,CSD,Wainwright No. 61, +4808,072100,CD,Division No. 8, +4808042,072541,CSD,Parkland Beach, +4808012,072121,CSD,Sylvan Lake, +4808004,072125,CSD,Delburne, +4808032,072113,CSD,Clive, +4808013,070000,CSD,Norglenwold, +4808008,072100,CSD,Innisfail, +4808026,072112,CSD,Bentley, +4808023,070000,CSD,Birchcliff, +4808028,070000,CSD,Gull Lake, +4808029,072112,CSD,Blackfalds, +4808027,070000,CSD,Sunbreaker Cove, +4808024,072111,CSD,Eckville, +4808031,072111-072112-072113,CSD,Lacombe, +4808011,072140,CSD,Red Deer, +4808034,070000,CSD,Alix, +4808038,072180-076560-076570,CSD,Ponoka County, +4808813,070000,CSD,Montana 139, +4808001,072121-072122-072123-072124-072125,CSD,Red Deer County, +4808022,072111-072112-072113,CSD,Lacombe County, +4808812,070000,CSD,Samson 137A, +4808006,072123,CSD,Bowden, +4808811,070000,CSD,Samson 137, +4808039,072180,CSD,Ponoka, +4808025,070000,CSD,Half Moon Bay, +4808005,070000,CSD,Jarvis Bay, +4808002,072125,CSD,Elnora, +4808044,076560,CSD,Rimbey, +4808009,072123,CSD,Penhold, +4809,071300,CD,Division No. 9, +4809809,071330,CSD,Sunchild 202, +4809005,070000,CSD,Burnstick Lake, +4809010,071360,CSD,Caroline, +4809015,071350,CSD,Rocky Mountain House, +4809806,071330,CSD,O'Chiese 203, +4809810,071230,CSD,Big Horn 144A, +4809002,071220-071230-071240-071330-071350-071360-071410,CSD,Clearwater County, +4810,075200,CD,Division No. 10, +4810021,076642,CSD,Holden, +4810031,075221,CSD,Innisfree, +4810016,075230-076641-076642,CSD,Beaver County, +4810038,070000,CSD,Paradise Valley, +4810002,072170,CSD,Bashaw, +4810034,075222,CSD,Mannville, +4810003,076654,CSD,Rosalind, +4810018,076641,CSD,Tofield, +4810061,076333,CSD,Mundare, +4810011,072170-076652,CSD,Camrose, +4810059,076332,CSD,Andrew, +4810056,076350,CSD,Willingdon, +4810012,076652,CSD,Bittern Lake, +4810001,072170-076651-076652-076653-076654,CSD,Camrose County, +4810004,076653,CSD,Ferintosh, +4810051,075212,CSD,Myrnam, +4810041,075255,CSD,Kitscoty, +4810046,075253,CSD,Dewberry, +4810028,076380,CSD,Vegreville, +4810039,075260,CSD,Lloydminster (Part), +4810019,076642,CSD,Ryley, +4810032,075222,CSD,Minburn, +4810036,075251-075252-075253-075254-075255-075256,CSD,Vermilion River County, +4810042,075251,CSD,Vermilion, +4810062,076333,CSD,Chipman, +4810044,075255,CSD,Marwayne, +4810058,076331-076332-076333,CSD,Lamont County, +4810006,076653,CSD,Edberg, +4810008,076653,CSD,New Norway, +4810048,075211-075212-076350,CSD,Two Hills County No. 21, +4810066,076331,CSD,Bruderheim, +4810805,070000,CSD,Makaoo (Part) 120, +4810052,075211,CSD,Two Hills, +4810026,075221-075222-076380,CSD,Minburn County No. 27, +4810022,075230,CSD,Viking, +4810014,076651,CSD,Hay Lakes, +4810064,076331,CSD,Lamont, +4810068,076370,CSD,Improvement District No. 13 Elk Island, +4810009,076654,CSD,Bawlf, +4811,076400,CD,Division No. 11, +4811052,076400,CSD,Sherwood Park, +4811023,070000,CSD,Golden Days, +4811042,070000,CSD,Lakeview, +4811056,076360,CSD,Fort Saskatchewan, +4811002,076620,CSD,Wetaskiwin, +4811059,076241-076242-076243-076321-076322,CSD,Sturgeon County, +4811024,076510,CSD,Warburg, +4811803,070000,CSD,Louis Bull 138B, +4811805,070000,CSD,Alexander 134, +4811048,076233,CSD,Stony Plain, +4811011,076620,CSD,Millet, +4811804,076233,CSD,Stony Plain 135, +4811013,076611,CSD,Beaumont, +4811032,071310-071340-076530,CSD,Brazeau County, +4811065,076321,CSD,Redwater, +4811018,076520,CSD,Devon, +4811068,076243,CSD,Morinville, +4811066,076321,CSD,Bon Accord, +4811016,076611,CSD,Leduc, +4811034,072541-076231-076232-076233,CSD,Parkland County, +4811039,070000,CSD,Betula Beach, +4811031,076530,CSD,Drayton Valley, +4811806,076232,CSD,Wabamun 133A, +4811026,076530,CSD,Breton, +4811003,070000,CSD,Argentia Beach, +4811007,070000,CSD,Norris Beach, +4811001,076540-076550-076620,CSD,Wetaskiwin County No. 10, +4811006,070000,CSD,Crystal Springs, +4811064,076321,CSD,Gibbons, +4811009,070000,CSD,Silver Beach, +4811061,076400,CSD,Edmonton, +4811008,070000,CSD,Ma-Me-O Beach, +4811022,070000,CSD,Itaska Beach, +4811045,076232,CSD,Wabamun, +4811044,070000,CSD,Kapasiwin, +4811019,076520,CSD,Calmar, +4811801,070000,CSD,Ermineskin 138, +4811046,070000,CSD,Spring Lake, +4811004,070000,CSD,Grandview, +4811052,076360-076630,CSD,Strathcona County, +4811038,070000,CSD,Seba Beach, +4811041,070000,CSD,Point Alison, +4811062,076400,CSD,St. Albert, +4811020,070000,CSD,Sundance Beach, +4811005,070000,CSD,Poplar Bay, +4811802,076510-076540,CSD,Pigeon Lake 138A, +4811021,076510,CSD,Thorsby, +4811069,076242,CSD,Legal, +4811012,076510-076520-076611-076612,CSD,Leduc County, +4811049,076233,CSD,Spruce Grove, +4811807,076232,CSD,Wabamun 133B, +4812,075100,CD,Division No. 12, +4812020,070000,CSD,Horseshoe Bay, +4812806,070000,CSD,Saddle Lake 125, +4812016,075133,CSD,Elk Point, +4812815,075116-075144,CSD,Cold Lake 149B, +4812004,075141-075142-075143-075144-075145-075146,CSD,Bonnyville No. 87, +4812024,075122,CSD,Vilna, +4812009,075143,CSD,Bonnyville, +4812012,075142,CSD,Glendon, +4812810,075116-075144,CSD,Cold Lake 149, +4812811,075143,CSD,Kehewin 123, +4812813,075116-075144,CSD,Cold Lake 149A, +4812011,075141-075142-075143-075144-075145-075146,CSD,Bonnyville Beach, +4812840,075112,CSD,Heart Lake 167, +4812026,076340,CSD,Waskatenau, +4812018,075132,CSD,St. Paul, +4812014,075131-075132-075133-075134,CSD,St. Paul County No. 19, +4812804,070000,CSD,Puskiakiwenin 122, +4812029,076340,CSD,Smoky Lake, +4812037,075111-075112-075113-075114-075115-075116-079241,CSD,Lac la Biche County, +4812037,070000,CSD,Improvement District No. 349, +4812828,070000,CSD,Beaver Lake 131, +4812802,070000,CSD,Unipouheos 121, +4812808,070000,CSD,White Fish Lake 128, +4812022,075121-075122-076340,CSD,Smoky Lake County, +4812002,075116-075144,CSD,Cold Lake, +4812013,070000,CSD,Pelican Narrows, +4812022,075121,CSD,Buffalo Lake Metis Settlement, +4812022,075121,CSD,Kikino Metis Settlement, +4812004,070000,CSD,Elizabeth Metis Settlement, +4812004,075146,CSD,Fishing Lake Metis Settlement, +4813,077400,CD,Division No. 13, +4813047,070000,CSD,Sunset Beach, +4813005,070000,CSD,Val Quentin, +4813036,076160-076310,CSD,Thorhild County No. 7, +4813019,076123,CSD,Barrhead, +4813002,076221,CSD,Mayerthorpe, +4813030,077434,CSD,Whitecourt, +4813044,076151-076152-076153-076154-077340,CSD,Athabasca County, +4813008,070000,CSD,Ross Haven, +4813031,076142,CSD,Westlock, +4813051,070000,CSD,Island Lake South, +4813028,076141-076142,CSD,Westlock County, +4813009,070000,CSD,Castle Island, +4813015,070000,CSD,South View, +4813016,070000,CSD,Sandy Beach, +4813013,070000,CSD,Birch Cove, +4813014,076223,CSD,Onoway, +4813006,070000,CSD,West Cove, +4813029,076110-077431-077432-077433-077434,CSD,Woodlands County, +4813055,070000,CSD,South Baptiste, +4813011,070000,CSD,Sunset Point, +4813046,076154,CSD,Boyle, +4813018,076121-076122-076123,CSD,Barrhead County No. 11, +4813061,070000,CSD,Whispering Hills, +4813811,070000,CSD,Alexis 133, +4813001,076221-076222-076223,CSD,Lac Ste. Anne County, +4813045,070000,CSD,Mewatha Beach, +4813003,070000,CSD,Nakamun Park, +4813048,076151,CSD,Athabasca, +4813032,076142,CSD,Clyde, +4813033,070000,CSD,Larkspur, +4813017,070000,CSD,Sunrise Beach, +4813057,070000,CSD,West Baptiste, +4813012,070000,CSD,Alberta Beach, +4813010,070000,CSD,Silver Sands, +4813049,076151,CSD,Island Lake, +4813007,070000,CSD,Yellowstone, +4813053,070000,CSD,Bondiss, +4814,077200,CD,Division No. 14, +4814028,077250,CSD,Improvement District No. 25 Willmore Wilderness, +4814024,077421,CSD,Edson, +4814003,071210-071320-076210-077230-077240-077260-077421-077422,CSD,Yellowhead County, +4814019,077260,CSD,Hinton, +4815,071500,CD,Division No. 15, +4815027,071520,CSD,Ghost Lake, +4815007,073140,CSD,Crowsnest Pass, +4815045,073110,CSD,Ranchland No. 66, +4815035,071400-071420-071430-071440,CSD,Banff, +4815802,070000,CSD,"Stoney 142, 143, 144", +4815013,071530-071540,CSD,Kananaskis, +4815023,071520,CSD,Canmore, +4815030,070000,CSD,Waiparous, +4815033,071100,CSD,Jasper, +4815037,071100,CSD,Improvement District No. 12 Jasper Park, +4815032,071400-071420-071430-071440,CSD,Improvement District No. 9 Banff, +4815015,071510-071520,CSD,Bighorn No. 8, +4816,079200,CD,Division No. 16, +4816037,079221,CSD,Fort McMurray, +4816856,079210,CSD,Fort Mackay, +4816857,079121,CSD,Namur River 174A, +4816821,070000,CSD,Gregoire Lake 176, +4816831,079133,CSD,Chipewyan 201A, +4816051,079121-079122-079123-079131-079132-079133-079210-079221-079222-079223-079231-079232-079242-079243,CSD,Improvement District No. 24 Wood Buffalo, +4816849,070000,CSD,Old Fort 217, +4816037,079111-079112-079113-079114,CSD,Wood Buffalo, +4816817,079243,CSD,Janvier 194, +4816822,070000,CSD,Gregoire Lake 176A, +4816860,070000,CSD,Thebathi 196, +4816858,079121,CSD,Namur Lake 174B, +4816856,070000,CSD,Fort McKay 174, +4816850,070000,CSD,Allison Bay 219, +4816855,070000,CSD,Charles Lake 225, +4816852,070000,CSD,Dog Head 218, +4816861,070000,CSD,Thabacha Náre 196A, +4817,077300,CD,Division No. 17, +4817027,076243-077311-077312-077313-077440-078280-078320,CSD,Big Lakes, +4817031,077330-078331-078332-078333-078334,CSD,Opportunity No. 17, +4817833,070000,CSD,Sawridge 150H, +4817856,070000,CSD,Woodland Cree 226, +4817860,078332,CSD,Loon Lake 235, +4817039,078262,CSD,Nampa, +4817838,070000,CSD,Tall Cree 173, +4817033,076130-077321-077322-077323,CSD,Lesser Slave River No.124, +4817855,078333,CSD,Desmarais, +4817817,070000,CSD,Jean Baptiste Gambler 183, +4817848,078116,CSD,Bushe River 207, +4817830,070000,CSD,Kapawe'no First Nation (Pakashan 150D), +4817078,078241,CSD,Manning, +4817858,070000,CSD,Kapawe'no First Nation (Grouard 230), +4817841,070000,CSD,Beaver Ranch 163, +4817076,078241-078242,CSD,Northern Lights County, +4817821,078333,CSD,Wabasca 166B, +4817842,070000,CSD,Boyer 164, +4817840,070000,CSD,Tall Cree 173A, +4817062,078211-078212-078213,CSD,Clear Hills, +4817093,078116,CSD,High Level, +4817029,077321,CSD,Slave Lake, +4817823,078333,CSD,Wabasca 166D, +4817843,070000,CSD,Child Lake 164A, +4817824,078313,CSD,Utikoomak Lake 155, +4817835,078133,CSD,Fox Lake 162, +4817828,077313,CSD,Drift Pile River 150, +4817837,078133,CSD,John d'Or Prairie 215, +4817857,070000,CSD,Woodland Cree 228, +4817097,078112,CSD,Rainbow Lake, +4817064,078213,CSD,Hines Creek, +4817832,070000,CSD,Sawridge 150G, +4817849,070000,CSD,Upper Hay River 212, +4817845,070000,CSD,Hay Lake 209, +4817021,078280,CSD,High Prairie, +4817026,078261-078262-078311-078312-078313,CSD,Northern Sunrise County, +4817829,070000,CSD,Sucker Creek 150A, +4817825,078211-078212-078213,CSD,Clear Hills 152C, +4817852,070000,CSD,Kapawe'no First Nation (Halcro 150C), +4817836,070000,CSD,Kapawe'no First Nation (Freeman 150B), +4817819,078333,CSD,Wabasca 166A, +4817853,070000,CSD,Little Buffalo, +4817024,077440,CSD,Swan Hills, +4817095,078111-078112-078113-078114-078115-078116-078131-078132-078133-078134-078135,CSD,Mackenzie County, +4817827,078313,CSD,Utikoomak Lake 155A, +4817831,077440,CSD,Swan River 150E, +4817818,078333,CSD,Wabasca 166, +4817822,078333,CSD,Wabasca 166C, +4817859,078132,CSD,Fort Vermilion 173B, +4817854,070000,CSD,Carcajou 187, +4817027,078320,CSD,Peavine Metis Settlement, +4817027,078320,CSD,Gift Lake Metis Settlement, +4817076,078120,CSD,Paddle Prairie Metis Settlement, +4817027,070000,CSD,East Prairie Metis Settlement, +4818,077200,CD,Division No. 18, +4818002,077410,CSD,Fox Creek, +4818015,077121-077122-077123-077124-077125-077126-077210-077220-077410,CSD,Greenview No. 16, +4818005,077210,CSD,Grande Cache, +4818818,077125,CSD,Sturgeon Lake 154A, +4818816,077125,CSD,Sturgeon Lake 154, +4818018,077126,CSD,Valleyview, +4819,077100,CD,Division No. 19, +4819826,070000,CSD,Duncan's 151A, +4819066,078232,CSD,Fairview No. 136, +4819038,078210-078220-078262,CSD,Peace River, +4819042,078270,CSD,McLennan, +4819044,070000,CSD,Donnelly, +4819071,078233,CSD,Peace No. 135, +4819058,078231,CSD,Spirit River, +4819068,078232,CSD,Fairview, +4819012,077113,CSD,Grande Prairie, +4819072,070000,CSD,Berwyn, +4819054,078231,CSD,Spirit River No. 133, +4819059,078221-078222-078223,CSD,Saddle Hills County, +4819046,078270,CSD,Falher, +4819008,077111,CSD,Hythe, +4819009,077111,CSD,Beaverlodge, +4819014,077112,CSD,Sexsmith, +4819048,070000,CSD,Girouxville, +4819011,077113,CSD,Wembley, +4819074,078233,CSD,Grimshaw, +4819815,070000,CSD,Horse Lakes 152B, +4819041,078270,CSD,Smoky River No. 130, +4819056,078231,CSD,Rycroft, +4819049,078251-078252,CSD,Birch Hills County, +4819006,077111-077112-077113,CSD,Grande Prairie County No. 1, +47,060000,PT,Saskatchewan, +4701,060000,CD,Division No. 1, +4701811,060000,CSD,Ocean Man 69B, +4701816,060000,CSD,Ocean Man 69I, +4701814,060000,CSD,Ocean Man 69F, +4701067,060000,CSD,Heward, +4701072,060000,CSD,Hazelwood No. 94, +4701808,060000,CSD,White Bear 70, +4701054,060000,CSD,Manor, +4701036,060000,CSD,Moose Creek No. 33, +4701006,060000,CSD,Mount Pleasant No. 2, +4701817,060000,CSD,Ocean Man 69H, +4701053,060000,CSD,Moose Mountain No. 63, +4701094,060000,CSD,Maryfield No. 91, +4701809,060000,CSD,Ocean Man 69, +4701058,060000,CSD,Brock No. 64, +4701044,060000,CSD,Storthoaks, +4701016,060000,CSD,Coalfields No. 4, +4701014,060000,CSD,Oxbow, +4701001,060000,CSD,Argyle No. 1, +4701018,060000,CSD,North Portal, +4701079,060000,CSD,Kenosee Lake, +4701078,060000,CSD,Wawota, +4701048,060000,CSD,Antler, +4701032,060000,CSD,Lampman, +4701037,060000,CSD,Alameda, +4701063,060000,CSD,Tecumseh No. 65, +4701091,060000,CSD,Walpole No. 92, +4701011,060000,CSD,Enniskillen No. 3, +4701818,060000,CSD,Ocean Man 69D, +4701819,060000,CSD,Pheasant Rump 68, +4701069,060000,CSD,Golden West No. 95, +4701098,060000,CSD,Fairlight, +4701043,060000,CSD,Storthoaks No. 31, +4701004,060000,CSD,Carievale, +4701076,060000,CSD,Wawken No. 93, +4701077,060000,CSD,Kennedy, +4701066,060000,CSD,Stoughton, +4701019,060000,CSD,Roche Percee, +4701041,060000,CSD,Alida, +4701810,060000,CSD,Ocean Man 69A, +4701815,060000,CSD,Ocean Man 69G, +4701096,060000,CSD,Maryfield, +4701047,060000,CSD,Antler No. 61, +4701049,060000,CSD,Redvers, +4701021,060000,CSD,Bienfait, +4701012,060000,CSD,Glen Ewen, +4701008,060000,CSD,Carnduff, +4701812,060000,CSD,Ocean Man 69C, +4701813,060000,CSD,Ocean Man 69E, +4701064,060000,CSD,Forget, +4701061,060000,CSD,Kisbey, +4701059,060000,CSD,Arcola, +4701056,060000,CSD,Carlyle, +4701027,060000,CSD,Benson No. 35, +4701031,060000,CSD,Browning No. 34, +4701039,060000,CSD,Reciprocity No. 32, +4701022,060000,CSD,Estevan No. 5, +4701024,060000,CSD,Estevan, +4701017,060000,CSD,Frobisher, +4701002,060000,CSD,Gainsborough, +4702,060000,CD,Division No. 2, +4702069,060000,CSD,Scott No. 98, +4702052,060000,CSD,Norton No. 69, +4702048,060000,CSD,McTaggart, +4702058,060000,CSD,Ogema, +4702026,060000,CSD,The Gap No. 39, +4702011,060000,CSD,Lake Alma No. 8, +4702016,060000,CSD,Minton, +4702078,060000,CSD,Fillmore, +4702051,060000,CSD,Brokenshell No. 68, +4702024,060000,CSD,Bengough No. 40, +4702028,060000,CSD,Ceylon, +4702038,060000,CSD,Halbrite, +4702039,060000,CSD,Midale, +4702800,060000,CSD,Piapot Cree First Nation 75H, +4702057,060000,CSD,Key West No. 70, +4702054,060000,CSD,Pangman, +4702031,060000,CSD,Radville, +4702036,060000,CSD,Goodwater, +4702041,060000,CSD,Macoun, +4702072,060000,CSD,Yellow Grass, +4702062,060000,CSD,Avonlea, +4702073,060000,CSD,Wellington No. 97, +4702042,060000,CSD,Griffin No. 66, +4702047,060000,CSD,Weyburn, +4702029,060000,CSD,Laurier No. 38, +4702012,060000,CSD,Lake Alma, +4702076,060000,CSD,Fillmore No. 96, +4702023,060000,CSD,Bengough, +4702018,060000,CSD,Happy Valley No. 10, +4702014,060000,CSD,Surprise Valley No. 9, +4702015,060000,CSD,Gladmar, +4702066,060000,CSD,Caledonia No. 99, +4702061,060000,CSD,Elmsthorpe No. 100, +4702071,060000,CSD,Lang, +4702067,060000,CSD,Milestone, +4702077,060000,CSD,Osage, +4702044,060000,CSD,Weyburn No. 67, +4702079,060000,CSD,Creelman, +4702033,060000,CSD,Lomond No. 37, +4702006,060000,CSD,Souris Valley No. 7, +4702001,060000,CSD,Cambria No. 6, +4702037,060000,CSD,Cymri No. 36, +4702008,060000,CSD,Tribune, +4702002,060000,CSD,Torquay, +4703,060000,CD,Division No. 3, +4703052,060000,CSD,Hazenmore, +4703011,060000,CSD,Old Post No. 43, +4703028,060000,CSD,Willow Bunch, +4703036,060000,CSD,Assiniboia, +4703009,060000,CSD,Rockglen, +4703064,060000,CSD,Glen Bain No. 105, +4703074,060000,CSD,Sutton No. 103, +4703048,060000,CSD,Pinto Creek No. 75, +4703026,060000,CSD,Willow Bunch No. 42, +4703068,060000,CSD,Gravelbourg No. 104, +4703061,060000,CSD,Neville, +4703092,060000,CSD,Mossbank, +4703042,060000,CSD,Wood River No. 74, +4703034,060000,CSD,Lake of the Rivers No. 72, +4703016,060000,CSD,Glen McPherson No. 46, +4703018,060000,CSD,Mankota No. 45, +4703019,060000,CSD,Mankota, +4703001,060000,CSD,Hart Butte No. 11, +4703059,060000,CSD,Whiska Creek No. 106, +4703071,060000,CSD,Gravelbourg, +4703029,060000,CSD,Excel No. 71, +4703006,060000,CSD,Poplar Valley No. 12, +4703004,060000,CSD,Coronach, +4703058,060000,CSD,Ponteix, +4703038,060000,CSD,Stonehenge No. 73, +4703051,060000,CSD,Kincaid, +4703044,060000,CSD,Lafleche, +4703801,060000,CSD,Wood Mountain 160, +4703062,060000,CSD,Vanguard, +4703093,060000,CSD,Lake Johnston No. 102, +4703054,060000,CSD,Auvergne No. 76, +4703096,060000,CSD,Terrell No. 101, +4703041,060000,CSD,Limerick, +4703022,060000,CSD,Waverley No. 44, +4703012,060000,CSD,Wood Mountain, +4704,060000,CD,Division No. 4, +4704048,060000,CSD,Maple Creek, +4704058,060000,CSD,Bone Creek No. 108, +4704003,060000,CSD,Val Marie No. 17, +4704050,060000,CSD,Piapot No. 110, +4704038,060000,CSD,Arlington No. 79, +4704028,060000,CSD,Wise Creek No. 77, +4704006,060000,CSD,Lone Tree No. 18, +4704026,060000,CSD,Eastend, +4704011,060000,CSD,Frontier No. 19, +4704061,060000,CSD,Lac Pelletier No. 107, +4704019,060000,CSD,Reno No. 51, +4704021,060000,CSD,Consul, +4704002,060000,CSD,Val Marie, +4704045,060000,CSD,Maple Creek No. 111, +4704056,060000,CSD,Carmichael, +4704024,060000,CSD,White Valley No. 49, +4704036,060000,CSD,Shaunavon, +4704012,060000,CSD,Frontier, +4704802,060000,CSD,Nekaneet Cree Nation, +4704034,060000,CSD,Grassy Creek No. 78, +4704054,060000,CSD,Carmichael No. 109, +4704008,060000,CSD,Bracken, +4704009,060000,CSD,Climax, +4704029,060000,CSD,Cadillac, +4705,060000,CD,Division No. 5, +4705093,060000,CSD,Churchbridge No. 211, +4705094,060000,CSD,Churchbridge, +4705803,060000,CSD,Cowessess 73, +4705052,060000,CSD,Esterhazy, +4705037,060000,CSD,Rocanville No. 151, +4705042,060000,CSD,Tantallon, +4705021,060000,CSD,Glenavon, +4705009,060000,CSD,Wapella, +4705804,060000,CSD,Kahkewistahaw 72, +4705808,060000,CSD,Little Bone 74B, +4705068,060000,CSD,Duff, +4705061,060000,CSD,Waldron, +4705044,060000,CSD,Gerald, +4705050,060000,CSD,West End, +4705806,060000,CSD,Ochapowace 71, +4705024,060000,CSD,Wolseley, +4705029,060000,CSD,Grenfell, +4705014,060000,CSD,Kingsley No. 124, +4705011,060000,CSD,Silverwood No. 123, +4705016,060000,CSD,Kipling, +4705825,060000,CSD,Ochapowace 71-51, +4705027,060000,CSD,Wolseley No. 155, +4705060,060000,CSD,Melville Beach, +4705033,060000,CSD,Willowdale No. 153, +4705031,060000,CSD,Broadview, +4705059,060000,CSD,Grayson, +4705028,060000,CSD,Elcapo No. 154, +4705814,060000,CSD,Ochapowace 71-10, +4705038,060000,CSD,Rocanville, +4705006,060000,CSD,Welwyn, +4705821,060000,CSD,Ochapowace 71-26, +4705822,060000,CSD,Ochapowace 71-70, +4705019,060000,CSD,Windthorst, +4705004,060000,CSD,Moosomin, +4705043,060000,CSD,Spy Hill, +4705077,060000,CSD,Saltcoats No. 213, +4705071,060000,CSD,Fenwood, +4705063,060000,CSD,McLeod No. 185, +4705823,060000,CSD,Ochapowace 71-7, +4705818,060000,CSD,Ochapowace 71-54, +4705066,060000,CSD,Lemberg, +4705067,060000,CSD,Stanley No. 215, +4705073,060000,CSD,Cana No. 214, +4705078,060000,CSD,Saltcoats, +4705079,060000,CSD,Bredenbury, +4705051,060000,CSD,Fertile Belt No. 183, +4705062,060000,CSD,Killaly, +4705826,060000,CSD,Ochapowace 71-44, +4705041,060000,CSD,Spy Hill No. 152, +4705002,060000,CSD,Fleming, +4705057,060000,CSD,Grayson No. 184, +4705054,060000,CSD,Bangor, +4705058,060000,CSD,Dubuc, +4705805,060000,CSD,Sakimay 74, +4705055,060000,CSD,Bird's Point, +4705069,060000,CSD,Goodeve, +4705096,060000,CSD,MacNutt, +4705047,060000,CSD,Langenburg No. 181, +4705824,060000,CSD,Ochapowace 71-18, +4705064,060000,CSD,Neudorf, +4705048,060000,CSD,Langenburg, +4705053,060000,CSD,Atwater, +4705807,060000,CSD,Shesheep 74A, +4705049,060000,CSD,Yarbo, +4705018,060000,CSD,Chester No. 125, +4705034,060000,CSD,Whitewood, +4705007,060000,CSD,Martin No. 122, +4705074,060000,CSD,Melville, +4705056,060000,CSD,Stockholm, +4705001,060000,CSD,Moosomin No. 121, +4706,060000,CD,Division No. 6, +4706070,060000,CSD,Longlaketon No. 219, +4706096,060000,CSD,Lipton No. 217, +4706828,060000,CSD,Star Blanket 83C, +4706042,060000,CSD,Abernethy No. 186, +4706820,060000,CSD,Wa-Pii Moos-Toosis (White Calf) 83A, +4706030,060000,CSD,White City, +4706014,060000,CSD,Wilcox, +4706060,060000,CSD,Wee Too Beach, +4706048,060000,CSD,North Qu'Appelle No. 187, +4706056,062313,CSD,Lumsden, +4706034,060000,CSD,South Qu'Appelle No. 157, +4706026,060000,CSD,Sherwood No. 159, +4706032,060000,CSD,Balgonie, +4706016,060000,CSD,Redburn No. 130, +4706007,060000,CSD,Vibank, +4706017,060000,CSD,Rouleau, +4706080,060000,CSD,Glen Harbour, +4706023,060000,CSD,Pense, +4706073,060000,CSD,Bulyea, +4706076,060000,CSD,Sunset Cove, +4706091,060000,CSD,Cupar No. 218, +4706065,060000,CSD,Alice Beach, +4706815,060000,CSD,Okanese 82, +4706811,060000,CSD,Standing Buffalo 78, +4706047,060000,CSD,Balcarres, +4706049,060000,CSD,Lebret, +4706004,060000,CSD,Francis No. 127, +4706039,060000,CSD,Indian Head, +4706067,060000,CSD,Holdfast, +4706021,060000,CSD,Pense No. 160, +4706027,062100,CSD,Regina, +4706003,060000,CSD,Kendal, +4706009,060000,CSD,Francis, +4706081,060000,CSD,North Grove, +4706054,060000,CSD,Disley, +4706074,060000,CSD,Strasbourg, +4706059,060000,CSD,Dufferin No. 190, +4706068,060000,CSD,Dilke, +4706055,060000,CSD,Buena Vista, +4706098,060000,CSD,Lipton, +4706057,060000,CSD,Lumsden Beach, +4706813,060000,CSD,Muscowpetung 80, +4706812,060000,CSD,Pasqua 79, +4706045,060000,CSD,Fort San, +4706022,060000,CSD,Belle Plaine, +4706031,060000,CSD,Pilot Butte, +4706013,060000,CSD,Bratt's Lake No. 129, +4706011,060000,CSD,Lajord No. 128, +4706001,060000,CSD,Montmartre No. 126, +4706810,060000,CSD,Assiniboine 76, +4706018,060000,CSD,Briercrest, +4706002,060000,CSD,Montmartre, +4706046,060000,CSD,Abernethy, +4706079,060000,CSD,Earl Grey, +4706063,060000,CSD,Sarnia No. 221, +4706085,060000,CSD,Island View, +4706099,060000,CSD,Tullymet No. 216, +4706093,060000,CSD,Markinch, +4706072,060000,CSD,Saskatchewan Beach, +4706809,060000,CSD,Piapot 75, +4706829,060000,CSD,Treaty Four Reserve Grounds 77, +4706033,060000,CSD,Edenwold, +4706036,060000,CSD,Qu'Appelle, +4706028,060000,CSD,Grand Coulee, +4706019,060000,CSD,Drinkwater, +4706041,060000,CSD,Sintaluta, +4706064,060000,CSD,Chamberlain, +4706094,060000,CSD,Cupar, +4706814,060000,CSD,Little Black Bear 84, +4706097,060000,CSD,Dysart, +4706053,062313,CSD,Lumsden No. 189, +4706077,060000,CSD,Silton, +4706058,062313,CSD,Regina Beach, +4706075,060000,CSD,Kannata Valley, +4706051,060000,CSD,Fort Qu'Appelle, +4706050,060000,CSD,Katepwa, +4706038,060000,CSD,Indian Head No. 156, +4706008,060000,CSD,Sedley, +4706029,060000,CSD,Edenwold No. 158, +4706082,060000,CSD,Pelican Pointe, +4706061,060000,CSD,Bethune, +4706071,060000,CSD,McKillop No. 220, +4706069,060000,CSD,Grandview Beach, +4706092,060000,CSD,Southey, +4706818,060000,CSD,Star Blanket 83, +4706078,062313,CSD,Craven, +4706052,060000,CSD,B-Say-Tah, +4706037,060000,CSD,McLean, +4706006,060000,CSD,Odessa, +4706816,060000,CSD,Peepeekisis 81, +4706062,060000,CSD,Findlater, +4707,060000,CD,Division No. 7, +4707093,060000,CSD,Aylesbury, +4707045,060000,CSD,Sun Valley, +4707028,060000,CSD,Ernfold, +4707016,060000,CSD,Hodgeville, +4707012,060000,CSD,Shamrock, +4707036,060000,CSD,Caron No. 162, +4707021,060000,CSD,Excelsior No. 166, +4707077,060000,CSD,Tugaske, +4707020,060000,CSD,Beaver Flat, +4707044,060000,CSD,Marquis, +4707043,060000,CSD,Tuxford, +4707014,060000,CSD,Lawtonia No. 135, +4707066,060000,CSD,King George No. 256, +4707091,060000,CSD,Craik No. 222, +4707031,060000,CSD,Chaplin, +4707034,060000,CSD,Mortlach, +4707037,060000,CSD,Caronport, +4707011,060000,CSD,Shamrock No. 134, +4707006,060000,CSD,Rodgers No. 133, +4707071,060000,CSD,Maple Bush No. 224, +4707076,060000,CSD,Huron No. 223, +4707053,060000,CSD,Enfield No. 194, +4707029,060000,CSD,Chaplin No. 164, +4707046,060000,CSD,Keeler, +4707026,060000,CSD,Herbert, +4707039,060000,CSD,Moose Jaw, +4707054,060000,CSD,Central Butte, +4707049,060000,CSD,Eyebrow, +4707022,060000,CSD,Waldeck, +4707027,060000,CSD,Morse, +4707008,060000,CSD,Coderre, +4707004,060000,CSD,Hillsborough No. 132, +4707068,060000,CSD,Coteau Beach, +4707063,060000,CSD,Victory No. 226, +4707059,060000,CSD,Lucky Lake, +4707074,060000,CSD,Mistusinne, +4707048,060000,CSD,Brownlee, +4707051,060000,CSD,South Lake, +4707038,060000,CSD,Moose Jaw No. 161, +4707058,060000,CSD,Canaan No. 225, +4707092,060000,CSD,Craik, +4707024,060000,CSD,Morse No. 165, +4707023,060000,CSD,Rush Lake, +4707018,060000,CSD,Coulee No. 136, +4707067,060000,CSD,Coteau No. 255, +4707062,060000,CSD,Beechy, +4707072,060000,CSD,Riverhurst, +4707047,060000,CSD,Eyebrow No. 193, +4707042,060000,CSD,Marquis No. 191, +4707032,060000,CSD,Wheatlands No. 163, +4707001,060000,CSD,Baildon No. 131, +4708,060000,CD,Division No. 8, +4708076,060000,CSD,Eston, +4708034,060000,CSD,Pennant, +4708042,060000,CSD,Lacadena No. 228, +4708071,060000,CSD,Newcombe No. 260, +4708068,060000,CSD,Eatonia, +4708046,060000,CSD,Miry Creek No. 229, +4708057,060000,CSD,Prelate, +4708059,060000,CSD,Mendham, +4708021,060000,CSD,Enterprise No. 142, +4708038,060000,CSD,Saskatchewan Landing No. 167, +4708008,060000,CSD,Webb, +4708053,060000,CSD,Clinworth No. 230, +4708058,060000,CSD,Leader, +4708054,060000,CSD,Sceptre, +4708039,060000,CSD,Stewart Valley, +4708018,060000,CSD,Golden Prairie, +4708006,060000,CSD,Webb No. 138, +4708032,060000,CSD,Cabri, +4708009,060000,CSD,Gull Lake No. 139, +4708001,060000,CSD,Swift Current No. 137, +4708065,060000,CSD,Chesterfield No. 261, +4708092,060000,CSD,Monet No. 257, +4708049,060000,CSD,Lancer, +4708028,060000,CSD,Pittville No. 169, +4708029,060000,CSD,Hazlet, +4708036,060000,CSD,Success, +4708004,060000,CSD,Swift Current, +4708094,060000,CSD,Elrose, +4708024,060000,CSD,Fox Valley No. 171, +4708047,060000,CSD,Shackleton, +4708061,060000,CSD,Deer Forks No. 232, +4708062,060000,CSD,Burstall, +4708012,060000,CSD,Tompkins, +4708031,060000,CSD,Riverside No. 168, +4708048,060000,CSD,Abbey, +4708044,060000,CSD,Kyle, +4708022,060000,CSD,Richmound, +4708026,060000,CSD,Fox Valley, +4708016,060000,CSD,Big Stick No. 141, +4708011,060000,CSD,Gull Lake, +4708074,060000,CSD,Snipe Lake No. 259, +4708056,060000,CSD,Happyland No. 231, +4709,060000,CD,Division No. 9, +4709062,060000,CSD,Preeceville No. 334, +4709065,060000,CSD,Endeavour, +4709056,060000,CSD,Rama, +4709076,060000,CSD,Arran, +4709029,060000,CSD,Good Lake No. 274, +4709039,060000,CSD,Kamsack, +4709824,060000,CSD,Keeseekoose 66-CA-04, +4709060,060000,CSD,Hazel Dell No. 335, +4709049,060000,CSD,Buchanan No. 304, +4709067,060000,CSD,Clayton No. 333, +4709023,060000,CSD,Insinger No. 275, +4709006,060000,CSD,Wallace No. 243, +4709032,060000,CSD,Canora, +4709071,060000,CSD,Hyas, +4709024,060000,CSD,Sheho, +4709012,060000,CSD,Yorkton, +4709002,060000,CSD,Calder, +4709075,060000,CSD,Livingston No. 331, +4709058,060000,CSD,Invermay, +4709072,060000,CSD,Norquay, +4709042,060000,CSD,St. Philips No. 301, +4709820,060000,CSD,Keeseekoose 66, +4709001,060000,CSD,Calder No. 241, +4709054,060000,CSD,Invermay No. 305, +4709066,060000,CSD,Sturgis, +4709028,060000,CSD,Theodore, +4709016,060000,CSD,Springside, +4709828,060000,CSD,Keeseekoose 66-CA-06, +4709011,060000,CSD,Orkney No. 244, +4709009,060000,CSD,Rhein, +4709061,060000,CSD,Lintlaw, +4709046,060000,CSD,Keys No. 303, +4709044,060000,CSD,Pelly, +4709819,060000,CSD,Cote 64, +4709019,060000,CSD,Garry No. 245, +4709038,060000,CSD,Togo, +4709826,060000,CSD,Keeseekoose 66-CA-05, +4709037,060000,CSD,Cote No. 271, +4709064,060000,CSD,Preeceville, +4709821,060000,CSD,The Key 65, +4709832,060000,CSD,Keeseekoose 66-KE-05, +4709822,060000,CSD,Keeseekoose 66A, +4709033,060000,CSD,Sliding Hills No. 273, +4709069,060000,CSD,Stenen, +4709830,060000,CSD,Keeseekoose 66-KE-04, +4709014,060000,CSD,Ebenezer, +4709053,060000,CSD,Buchanan, +4710,060000,CD,Division No. 10, +4710826,060000,CSD,Fishing Lake 89, +4710847,060000,CSD,Muskowekwan 85-10, +4710848,060000,CSD,Muskowekwan 85-1, +4710047,060000,CSD,Wynyard, +4710043,060000,CSD,Elfros, +4710031,060000,CSD,Emerald No. 277, +4710825,060000,CSD,Poorman 88, +4710008,060000,CSD,Kellross No. 247, +4710849,060000,CSD,Muskowekwan 85-8, +4710014,060000,CSD,Touchwood No. 248, +4710011,060000,CSD,Leross, +4710846,060000,CSD,Muskowekwan 85-27, +4710056,060000,CSD,Leroy No. 339, +4710054,060000,CSD,Jansen, +4710051,060000,CSD,Dafoe, +4710036,060000,CSD,Foam Lake No. 276, +4710828,060000,CSD,Beardy's and Okemasis 96 and 97A, +4710012,060000,CSD,Lestock, +4710842,060000,CSD,Muskowekwan 85-23, +4710035,060000,CSD,Leslie Beach, +4710824,060000,CSD,Day Star 87, +4710061,060000,CSD,Lakeside No. 338, +4710071,060000,CSD,Sasman No. 336, +4710854,060000,CSD,Fishing Lake 89A, +4710852,060000,CSD,Muskowekwan 85-31, +4710823,060000,CSD,Gordon 86, +4710845,060000,CSD,Muskowekwan 85-22, +4710844,060000,CSD,Muskowekwan 85-24, +4710836,060000,CSD,Muskowekwan 85-33, +4710003,060000,CSD,Ituna Bon Accord No. 246, +4710834,060000,CSD,Muskowekwan 85-26, +4710840,060000,CSD,Muskowekwan 85-29, +4710068,060000,CSD,Wadena, +4710027,060000,CSD,Raymore, +4710028,060000,CSD,Quinton, +4710850,060000,CSD,Muskowekwan 85-15, +4710066,060000,CSD,Lakeview No. 337, +4710072,060000,CSD,Margo, +4710024,060000,CSD,Mount Hope No. 279, +4710029,060000,CSD,Punnichy, +4710838,060000,CSD,Muskowekwan 85-28, +4710832,060000,CSD,Muskowekwan 85-17, +4710004,060000,CSD,Ituna, +4710052,060000,CSD,Prairie Rose No. 309, +4710062,060000,CSD,Watson, +4710058,060000,CSD,Leroy, +4710843,060000,CSD,Muskowekwan 85-12, +4710009,060000,CSD,Kelliher, +4710002,060000,CSD,Hubbard, +4710022,060000,CSD,Semans, +4710064,060000,CSD,Quill Lake, +4710041,060000,CSD,Elfros No. 307, +4710034,060000,CSD,Chorney Beach, +4710046,060000,CSD,Big Quill No. 308, +4710038,060000,CSD,Foam Lake, +4710822,060000,CSD,Muskowekwan 85, +4710851,060000,CSD,Muskowekwan 85-2A, +4711,060000,CD,Division No. 11, +4711061,065521,CSD,Dundurn No. 314, +4711039,060000,CSD,Wood Creek No. 281, +4711022,060000,CSD,Strongfield, +4711016,065542,CSD,Willner No. 253, +4711008,065543,CSD,Imperial, +4711014,065541,CSD,Davidson, +4711065,065432,CSD,Corman Park No. 344, +4711066,065100,CSD,Saskatoon, +4711069,065453,CSD,Blucher No. 343, +4711079,065451,CSD,Colonsay, +4711041,060000,CSD,Simpson, +4711021,065524,CSD,Loreburn, +4711067,065432,CSD,Langham, +4711068,065432,CSD,Warman, +4711076,065451,CSD,Colonsay No. 342, +4711074,065453,CSD,Elstow, +4711046,060000,CSD,Usborne No. 310, +4711027,060000,CSD,Outlook, +4711054,060000,CSD,Manitou Beach, +4711029,060000,CSD,Glenside, +4711003,060000,CSD,Last Mountain Valley No. 250, +4711009,060000,CSD,Liberty, +4711073,060000,CSD,Dalmeny, +4711070,065432,CSD,Martensville, +4711091,060000,CSD,Viscount No. 341, +4711072,065453,CSD,Allan, +4711048,060000,CSD,Drake, +4711036,060000,CSD,Kenaston, +4711031,060000,CSD,Rosedale No. 283, +4711028,060000,CSD,Broderick, +4711024,065524,CSD,Hawarden, +4711002,060000,CSD,Duval, +4711092,060000,CSD,Viscount, +4711078,060000,CSD,Meacham, +4711064,060000,CSD,Shields, +4711063,060000,CSD,Dundurn, +4711060,060000,CSD,Thode, +4711018,065524,CSD,Loreburn No. 254, +4711042,060000,CSD,Wreford No. 280, +4711019,065524,CSD,Elbow, +4711004,060000,CSD,Govan, +4711007,060000,CSD,Etters Beach, +4711044,060000,CSD,Nokomis, +4711096,060000,CSD,Wolverine No. 340, +4711077,065453,CSD,Clavet, +4711828,060000,CSD,Whitecap, +4711071,065453,CSD,Bradwell, +4711058,060000,CSD,Zelma, +4711032,060000,CSD,Hanley, +4711034,060000,CSD,McCraney No. 282, +4711006,060000,CSD,Big Arm No. 251, +4711053,060000,CSD,Watrous, +4711075,060000,CSD,Osler, +4711059,060000,CSD,Lost River No. 313, +4711052,060000,CSD,Morris No. 312, +4711094,060000,CSD,Plunkett, +4711026,060000,CSD,Rudy No. 284, +4711056,060000,CSD,Young, +4711049,060000,CSD,Lanigan, +4711038,060000,CSD,Bladworth, +4711011,060000,CSD,Arm River No. 252, +4712,060000,CD,Division No. 12, +4712833,060000,CSD,Sweet Grass 113, +4712050,060000,CSD,Perdue No. 346, +4712059,065434,CSD,Asquith, +4712072,060000,CSD,Rosemount No. 378, +4712031,060000,CSD,Tessier, +4712032,060000,CSD,Harris, +4712006,066364,CSD,Rosetown, +4712079,066260,CSD,Battleford, +4712034,060000,CSD,Marriott No. 317, +4712056,065434,CSD,Delisle, +4712020,060000,CSD,Fertile Valley No. 285, +4712014,060000,CSD,Wiseton, +4712001,060000,CSD,Pleasant Valley No. 288, +4712830,060000,CSD,Mosquito 109, +4712058,065434,CSD,Vanscoy, +4712008,060000,CSD,Zealandia, +4712042,060000,CSD,Biggar No. 347, +4712837,060000,CSD,Sweet Grass 113-M16, +4712829,060000,CSD,Red Pheasant 108, +4712054,060000,CSD,Vanscoy No. 345, +4712051,060000,CSD,Perdue, +4712011,060000,CSD,Milden No. 286, +4712012,060000,CSD,Milden, +4712022,060000,CSD,Conquest, +4712016,060000,CSD,Dinsmore, +4712078,060000,CSD,Battle River No. 438, +4712832,060000,CSD,Grizzly Bear's Head 110 and Lean Man 111, +4712046,060000,CSD,Biggar, +4712029,060000,CSD,Harris No. 316, +4712026,060000,CSD,Montrose No. 315, +4712019,060000,CSD,Macrorie, +4712064,060000,CSD,Eagle Creek No. 376, +4712038,060000,CSD,Mountain View No. 318, +4712004,060000,CSD,St. Andrews No. 287, +4712069,060000,CSD,Glenside No. 377, +4712052,060000,CSD,Kinley, +4713,060000,CD,Division No. 13, +4713079,060000,CSD,Manitou Lake No. 442, +4713096,060000,CSD,Cut Knife No. 439, +4713049,060000,CSD,Eye Hill No. 382, +4713038,060000,CSD,Mariposa No. 350, +4713011,060000,CSD,Milton No. 292, +4713004,060000,CSD,Netherhill, +4713835,060000,CSD,Poundmaker 114, +4713069,060000,CSD,Wilkie, +4713028,060000,CSD,Winslow No. 319, +4713006,060000,CSD,Kindersley No. 290, +4713836,060000,CSD,Little Pine 116, +4713044,060000,CSD,Luseland, +4713021,060000,CSD,Major, +4713042,060000,CSD,Kerrobert, +4713002,060000,CSD,Brock, +4713091,060000,CSD,Marsden, +4713098,060000,CSD,Cut Knife, +4713059,060000,CSD,Tramping Lake No. 380, +4713062,060000,CSD,Scott, +4713054,060000,CSD,Denzil, +4713009,060000,CSD,Flaxcombe, +4713051,060000,CSD,Macklin, +4713056,060000,CSD,Grass Lake No. 381, +4713074,060000,CSD,Unity, +4713033,060000,CSD,Ruthilda, +4713041,060000,CSD,Progress No. 351, +4713064,060000,CSD,Reford No. 379, +4713046,060000,CSD,Heart's Hill No. 352, +4713032,060000,CSD,Grandview No. 349, +4713019,060000,CSD,Prairiedale No. 321, +4713029,060000,CSD,Dodsland, +4713022,060000,CSD,Smiley, +4713008,060000,CSD,Kindersley, +4713026,060000,CSD,Coleville, +4713094,060000,CSD,Neilburg, +4713068,060000,CSD,Buffalo No. 409, +4713078,060000,CSD,Senlac, +4713014,060000,CSD,Marengo, +4713039,060000,CSD,Tramping Lake, +4713076,060000,CSD,Senlac No. 411, +4713072,060000,CSD,Round Valley No. 410, +4713053,060000,CSD,Primate, +4713067,060000,CSD,Landis, +4713016,060000,CSD,Antelope Park No. 322, +4713031,060000,CSD,Plenty, +4713092,060000,CSD,Hillsdale No. 440, +4713024,060000,CSD,Oakdale No. 320, +4714,060000,CD,Division No. 14, +4714068,060000,CSD,Tobin Lake, +4714043,060000,CSD,Tisdale No. 427, +4714030,060000,CSD,Pleasantdale, +4714007,060000,CSD,Porcupine Plain, +4714026,060000,CSD,Spalding No. 368, +4714036,060000,CSD,Archerwill, +4714092,060000,CSD,Choiceland, +4714839,060000,CSD,Shoal Lake 28A, +4714056,060000,CSD,Connaught No. 457, +4714041,060000,CSD,Bjorkdale, +4714023,060000,CSD,Ponass Lake No. 367, +4714840,060000,CSD,Red Earth 29, +4714077,060000,CSD,Torch River No. 488, +4714001,060000,CSD,Hudson Bay No. 394, +4714079,060000,CSD,White Fox, +4714076,060000,CSD,Nipawin, +4714074,060000,CSD,Codette, +4714053,060000,CSD,Willow Creek No. 458, +4714062,060000,CSD,Arborfield, +4714038,060000,CSD,Bjorkdale No. 426, +4714842,060000,CSD,Kinistin 91, +4714047,060000,CSD,Star City No. 428, +4714039,060000,CSD,Mistatim, +4714032,060000,CSD,Naicam, +4714021,060000,CSD,Kelvington No. 366, +4714067,060000,CSD,Moose Range No. 486, +4714846,060000,CSD,Opaskwayak Cree Nation 27A (Carrot River), +4714069,060000,CSD,Carrot River, +4714049,060000,CSD,Star City, +4714004,060000,CSD,Hudson Bay, +4714072,060000,CSD,Nipawin No. 487, +4714073,060000,CSD,Aylsham, +4714841,060000,CSD,Yellowquill 90, +4714022,060000,CSD,Kelvington, +4714059,060000,CSD,Arborfield No. 456, +4714058,060000,CSD,Ridgedale, +4714061,060000,CSD,Zenon Park, +4714048,060000,CSD,Valparaiso, +4714006,060000,CSD,Porcupine No. 395, +4714028,060000,CSD,Spalding, +4714025,060000,CSD,Fosston, +4714009,060000,CSD,Weekes, +4714093,060000,CSD,Smeaton, +4714091,060000,CSD,Love, +4714845,060000,CSD,Carrot River 29A, +4714051,060000,CSD,Melfort, +4714044,060000,CSD,Tisdale, +4714034,060000,CSD,Barrier Valley No. 397, +4714024,060000,CSD,Rose Valley, +4714035,060000,CSD,Pleasantdale No. 398, +4715,060000,CD,Division No. 15, +4715099,060000,CSD,Paddockwood No. 520, +4715847,060000,CSD,Muskoday First Nation, +4715845,060000,CSD,Beardy's 97 and Okemasis 96, +4715861,060000,CSD,One Arrow 95-1D, +4715018,065441,CSD,Aberdeen No. 373, +4715041,060000,CSD,Cudworth, +4715006,060000,CSD,Lake Lenore, +4715012,060000,CSD,Bruno, +4715085,060000,CSD,Albertville, +4715092,060000,CSD,Meath Park, +4715064,060000,CSD,Prince Albert No. 461, +4715071,060000,CSD,Kinistino No. 459, +4715067,060000,CSD,Birch Hills No. 460, +4715029,060000,CSD,Laird, +4715038,060000,CSD,Alvena, +4715002,060000,CSD,Englefeld, +4715859,060000,CSD,Beardy's and Okemasis 96 and 97B, +4715036,060000,CSD,Fish Creek No. 402, +4715072,060000,CSD,Weldon, +4715052,060000,CSD,Beatty, +4715848,060000,CSD,Wahpaton 94A, +4715057,060000,CSD,St. Louis No. 431, +4715039,060000,CSD,Hoodoo No. 401, +4715028,060000,CSD,Waldheim, +4715048,060000,CSD,Lake Lenore No. 399, +4715017,060000,CSD,Vonda, +4715045,060000,CSD,Pilger, +4715004,060000,CSD,Muenster, +4715862,060000,CSD,One Arrow 95-1A, +4715850,060000,CSD,Cumberland 100A, +4715849,060000,CSD,James Smith 100, +4715091,060000,CSD,Weirdale, +4715066,060000,CSD,Prince Albert, +4715068,060000,CSD,Birch Hills, +4715042,060000,CSD,Wakaw, +4715003,060000,CSD,St. Gregor, +4715070,060000,CSD,Candle Lake, +4715853,060000,CSD,Montreal Lake 106B, +4715076,060000,CSD,Christopher Lake, +4715846,060000,CSD,Opawakoscikan, +4715061,060000,CSD,Duck Lake No. 463, +4715026,060000,CSD,Laird No. 404, +4715043,060000,CSD,Wakaw Lake, +4715857,060000,CSD,One Arrow 95-1C, +4715047,060000,CSD,Middle Lake, +4715007,060000,CSD,Humboldt No. 370, +4715005,060000,CSD,Annaheim, +4715098,060000,CSD,Paddockwood, +4715075,060000,CSD,Lakeland No. 521, +4715054,060000,CSD,Invergordon No. 430, +4715062,060000,CSD,Duck Lake, +4715034,060000,CSD,Hague, +4715014,060000,CSD,Grant No. 372, +4715049,060000,CSD,St. Brieux, +4715008,060000,CSD,Humboldt, +4715079,060000,CSD,Garden River No. 490, +4715031,060000,CSD,Rosthern No. 403, +4715051,060000,CSD,Flett's Springs No. 429, +4715844,060000,CSD,One Arrow 95, +4715001,060000,CSD,St. Peter No. 369, +4715094,060000,CSD,Buckland No. 491, +4715059,060000,CSD,St. Louis, +4715074,060000,CSD,Kinistino, +4715032,060000,CSD,Rosthern, +4715027,060000,CSD,Hepburn, +4715044,060000,CSD,Three Lakes No. 400, +4715046,060000,CSD,St. Benedict, +4715019,065441,CSD,Aberdeen, +4715016,060000,CSD,Prud'Homme, +4715851,060000,CSD,Little Red River 106C, +4715011,060000,CSD,Bayne No. 371, +4716,060000,CD,Division No. 16, +4716863,060000,CSD,Chitek Lake 191, +4716894,060000,CSD,Pelican Lake 191A, +4716856,060000,CSD,Sturgeon Lake 101, +4716047,060000,CSD,Shellbrook, +4716023,060000,CSD,Douglas No. 436, +4716891,060000,CSD,Muskeg Lake 102D, +4716016,060000,CSD,Blaine Lake, +4716003,060000,CSD,Ruddell, +4716008,060000,CSD,Great Bend No. 405, +4716880,060000,CSD,Pelican Lake 191B, +4716063,060000,CSD,Medstead, +4716002,060000,CSD,Denholm, +4716855,060000,CSD,Mistawasis 103, +4716890,060000,CSD,Muskeg Lake 102G, +4716029,066260,CSD,North Battleford, +4716005,060000,CSD,Mayfield No. 406, +4716053,060000,CSD,Prince Albert National Park, +4716077,060000,CSD,Chitek Lake, +4716056,060000,CSD,Spiritwood No. 496, +4716862,060000,CSD,Witchekan Lake 117, +4716860,060000,CSD,Ahtahkakoop 104, +4716051,060000,CSD,Canwood No. 494, +4716043,060000,CSD,Pebble Baye, +4716870,060000,CSD,Lucky Man, +4716886,060000,CSD,Muskeg Lake 102E, +4716042,060000,CSD,Leask, +4716024,060000,CSD,Speers, +4716857,060000,CSD,Little Red River 106D, +4716057,060000,CSD,Shell Lake, +4716041,060000,CSD,Leask No. 464, +4716027,066260,CSD,North Battleford, +4716026,060000,CSD,Richard, +4716892,060000,CSD,Sweet Grass 113-L6, +4716011,060000,CSD,Borden, +4716061,060000,CSD,Leoville, +4716054,060000,CSD,Debden, +4716034,060000,CSD,Rabbit Lake, +4716059,060000,CSD,Big Shell, +4716044,060000,CSD,Parkside, +4716854,060000,CSD,Muskeg Lake Cree Nation 102, +4716013,060000,CSD,Blaine Lake No. 434, +4716022,060000,CSD,Hafford, +4716072,060000,CSD,Big River, +4716882,060000,CSD,Witchekan Lake 117D, +4716058,060000,CSD,Spiritwood, +4716038,060000,CSD,Meeting Lake No. 466, +4716052,060000,CSD,Canwood, +4716075,060000,CSD,Big River No. 555, +4716858,060000,CSD,Big River 118, +4716861,060000,CSD,Saulteaux 159A, +4716046,060000,CSD,Shellbrook No. 493, +4716033,060000,CSD,Round Hill No. 467, +4716028,066271,CSD,North Battleford No. 437, +4716872,060000,CSD,Muskeg Lake 102B, +4716018,060000,CSD,Redberry No. 435, +4716014,060000,CSD,Marcelin, +4716004,060000,CSD,Maymont, +4716062,060000,CSD,Medstead No. 497, +4716888,060000,CSD,Muskeg Lake 102F, +4716019,060000,CSD,Krydor, +4716009,060000,CSD,Radisson, +4716060,060000,CSD,Echo Bay, +4717,060000,CD,Division No. 17, +4717062,060000,CSD,Beaver River No. 622, +4717810,060000,CSD,Ministikwan 161A, +4717808,060000,CSD,Makwa Lake 129, +4717819,060000,CSD,Meadow Lake 105A, +4717801,060000,CSD,Seekaskootch 119, +4717022,060000,CSD,Wilton No. 472, +4717048,060000,CSD,Glaslyn, +4717018,060000,CSD,Maidstone, +4717813,060000,CSD,Saulteaux 159, +4717004,060000,CSD,Metinota, +4717039,060000,CSD,Mervin, +4717809,060000,CSD,Ministikwan 161, +4717805,060000,CSD,Flying Dust First Nation 105 (Meadow Lake 105), +4717052,060000,CSD,Meadow Lake, +4717028,060000,CSD,Britannia No. 502, +4717011,060000,CSD,Edam, +4717008,060000,CSD,Turtle River No. 469, +4717811,060000,CSD,Big Island Lake Cree Territory, +4717055,060000,CSD,Dorintosh, +4717820,060000,CSD,Onion Lake 119-1, +4717058,060000,CSD,Loon Lake, +4717013,060000,CSD,Paynton No. 470, +4717024,060000,CSD,Lashburn, +4717067,060000,CSD,Pierceland, +4717032,060000,CSD,Frenchman Butte No. 501, +4717045,060000,CSD,Mervin No. 499, +4717006,060000,CSD,Meota, +4717825,060000,CSD,Min-A-He-Quo-Sis 116C, +4717054,060000,CSD,Meadow Lake No. 588, +4717066,060000,CSD,Goodsoil, +4717057,060000,CSD,Makwa, +4717802,060000,CSD,Makaoo (Part) 120, +4717036,060000,CSD,St. Walburg, +4717047,060000,CSD,Parkdale No. 498, +4717005,060000,CSD,Aquadeo, +4717019,060000,CSD,Waseca, +4717053,060000,CSD,Greig Lake, +4717807,060000,CSD,Makwa Lake 129B, +4717815,060000,CSD,Makwa Lake 129C, +4717042,060000,CSD,Kivimaa-Moonlight Bay, +4717803,060000,CSD,Thunderchild First Nation 115B, +4717029,060000,CSD,Lloydminster (Part), +4717816,060000,CSD,Eagles Lake 165C, +4717034,060000,CSD,Paradise Hill, +4717804,060000,CSD,Thunderchild First Nation 115C, +4717041,060000,CSD,Turtleford, +4717001,060000,CSD,Meota No. 468, +4717056,060000,CSD,Loon Lake No. 561, +4717806,060000,CSD,Waterhen 130, +4717017,060000,CSD,Eldon No. 471, +4717026,060000,CSD,Marshall, +4717812,060000,CSD,Moosomin 112B, +4717002,060000,CSD,Cochin, +4717014,060000,CSD,Paynton, +4718,060000,CD,Division No. 18, +4718824,060000,CSD,Fond du Lac 227, +4718846,060000,CSD,Fond du Lac 232, +4718072,060000,CSD,Michel Village, +4718822,060000,CSD,Southend 200, +4718033,060000,CSD,Beauval, +4718844,060000,CSD,Little Hills 158, +4718849,060000,CSD,Little Hills 158B, +4718055,060000,CSD,Pelican Narrows, +4718051,060000,CSD,Creighton, +4718828,060000,CSD,Chicken 224, +4718854,060000,CSD,Kinoosao-Thomas Clark 204, +4718817,060000,CSD,Canoe Lake 165, +4718823,060000,CSD,Chicken 225, +4718100,060000,CSD,Stony Rapids, +4718818,060000,CSD,Buffalo River Dene Nation 193 (Peter Pond Lake 193), +4718030,060000,CSD,Jans Bay, +4718808,060000,CSD,Morin Lake 217, +4718069,060000,CSD,Patuanak, +4718807,060000,CSD,La Plonge 192, +4718062,060000,CSD,Missinipe, +4718813,060000,CSD,Four Portages 157C, +4718812,060000,CSD,Kitsakie 156B, +4718023,060000,CSD,Dore Lake, +4718021,060000,CSD,Green Lake, +4718802,060000,CSD,Montreal Lake 106, +4718067,060000,CSD,Île-à-la-Crosse, +4718832,060000,CSD,Lac La Hache 220, +4718090,060000,CSD,"Division No. 18, Unorganized", +4718819,060000,CSD,Turnor Lake 193B, +4718829,060000,CSD,Clearwater River Dene Band 223, +4718028,060000,CSD,Cole Bay, +4718809,060000,CSD,Lac La Ronge 156, +4718074,060000,CSD,La Loche, +4718070,060000,CSD,Buffalo Narrows, +4718058,060000,CSD,Sandy Bay, +4718015,060000,CSD,Weyakwin, +4718049,060000,CSD,Denare Beach, +4718821,060000,CSD,Sturgeon Weir 184F, +4718065,060000,CSD,Pinehouse, +4718075,060000,CSD,Turnor Lake, +4718071,060000,CSD,St. George's Hill, +4718803,060000,CSD,Stanley 157, +4718041,060000,CSD,La Ronge, +4718052,060000,CSD,Flin Flon (Part), +4718801,060000,CSD,Cumberland House Cree Nation 20, +4718839,060000,CSD,Clearwater River Dene 222, +4718833,060000,CSD,Fond du Lac 229, +4718847,060000,CSD,Fond du Lac 231, +4718814,060000,CSD,Wapachewunak 192D, +4718825,060000,CSD,Brabant Lake, +4718831,060000,CSD,Grandmother's Bay 219, +4718811,060000,CSD,Sucker River 156C (Nemebien River 156C), +4718042,060000,CSD,Air Ronge, +4718810,060000,CSD,Potato River 156A, +4718820,060000,CSD,Pelican Narrows 184B, +4718852,060000,CSD,Kimosom Pwatinahk 203 (Deschambault Lake), +4718012,060000,CSD,Timber Bay, +4718005,060000,CSD,Cumberland House, +46,050000,PT,Manitoba, +4601,052600-053300-053200-053100,CD,Division No. 1, +4601057,053211,CSD,Lac du Bonnet, +4601051,053221,CSD,Pinawa, +4601035,052652,CSD,Stuartburn, +4601075,053140,CSD,Powerview-Pine Falls, +4601078,052432,CSD,Victoria Beach, +4601039,053320-053330,CSD,Piney, +4601043,053212-053241-053242,CSD,Reynolds, +4601079,053243-055241,CSD,Shoal Lake (Part) 40, +4601060,053211,CSD,Lac du Bonnet, +4601082,053243-055241,CSD,Shoal Lake (Part) 39A, +4601094,052600-053300-053200-053100,CSD,"Division No. 1, Unorganized", +4601046,053222,CSD,Whitemouth, +4601071,051140-052411-053140-053150,CSD,Alexander, +4601070,053310,CSD,Buffalo Point 36, +4602,052500-052300-052200-052400,CD,Division No. 2, +4602044,052630,CSD,Steinbach, +4602057,052641,CSD,Ste. Anne, +4602053,052642,CSD,La Broquerie, +4602061,052641,CSD,Ste. Anne, +4602037,052620,CSD,St-Pierre-Jolys, +4602027,052651,CSD,Roseau River 2, +4602041,052630,CSD,Hanover, +4602075,052611,CSD,Ritchot, +4602046,052630,CSD,Niverville, +4602032,052620,CSD,De Salaberry, +4602069,052612,CSD,Taché, +4602025,052651,CSD,Franklin, +4602026,050000,CSD,Roseau Rapids 2A, +4603,052500-052300,CD,Division No. 3, +4603072,052332,CSD,Dufferin, +4603047,052560,CSD,Stanley, +4603050,052560,CSD,Winkler, +4603065,052510,CSD,Morris, +4603058,052520,CSD,Thompson, +4603040,052550,CSD,Altona, +4603033,050000,CSD,Emerson, +4603067,052510,CSD,Morris, +4603062,052530,CSD,Roland, +4603030,052540,CSD,Montcalm, +4603038,052550,CSD,Gretna, +4603053,052560,CSD,Morden, +4603074,052332,CSD,Carman, +4603042,052550,CSD,Plum Coulee, +4603036,052550,CSD,Rhineland, +4604,051400-052500,CD,Division No. 4, +4604039,051432,CSD,Louise, +4604053,051431,CSD,Cartwright, +4604046,051432,CSD,Crystal City, +4604035,051442,CSD,Manitou, +4604044,051432,CSD,Pilot Mound, +4604063,051441,CSD,Lorne, +4604068,051441,CSD,Swan Lake 7, +4604066,051441,CSD,Somerset, +4604057,051422,CSD,Argyle, +4604033,051442,CSD,Pembina, +4604051,051431,CSD,Roblin, +4605,051300-051400,CD,Division No. 5, +4605063,051312,CSD,Hartney, +4605033,051340,CSD,Boissevain, +4605047,051331,CSD,Waskada, +4605070,051411-052252,CSD,Riverside, +4605061,051312,CSD,Cameron, +4605058,051311,CSD,Albert, +4605050,051322,CSD,Arthur, +4605037,051332,CSD,Winchester, +4605031,051340,CSD,Morton, +4605055,051321,CSD,Edward, +4605043,051331,CSD,Brenda, +4605025,051412,CSD,Killarney - Turtle Mountain, +4605067,051313,CSD,Whitewater, +4605076,051421,CSD,Strathcona, +4605052,051322,CSD,Melita, +4605039,051332,CSD,Deloraine, +4606,051100,CD,Division No. 6, +4606023,051160,CSD,Pipestone, +4606028,051110,CSD,Wallace, +4606040,051120,CSD,Sioux Valley Dakota Nation, +4606034,051110,CSD,Virden, +4606037,051120,CSD,Woodworth, +4606018,051150,CSD,Oak Lake, +4606030,051110,CSD,Elkhorn, +4606029,051160,CSD,Canupawakpa Dakota First Nation (Oak Lake 59), +4606015,051150-055121,CSD,Sifton, +4607,051100-051200,CD,Division No. 7, +4607062,051220,CSD,Brandon, +4607041,051232,CSD,Glenboro, +4607077,051130,CSD,Rivers, +4607057,051140,CSD,Whitehead, +4607071,051211,CSD,Elton, +4607065,051231,CSD,North Cypress, +4607075,051130,CSD,Daly, +4607045,051213,CSD,Oakland, +4607068,051231,CSD,Carberry, +4607051,051170,CSD,Glenwood, +4607053,051170,CSD,Souris, +4607047,051213,CSD,Wawanesa, +4607060,051212,CSD,Cornwallis, +4607038,051232,CSD,South Cypress, +4608,051200,CD,Division No. 8, +4608054,055351,CSD,Lansdowne, +4608031,051242,CSD,South Norfolk, +4608061,055352,CSD,Gladstone, +4608045,051241,CSD,North Norfolk, +4608038,051242,CSD,Treherne, +4608033,051242,CSD,Notre Dame de Lourdes, +4608059,055352,CSD,Westbourne, +4608069,055332,CSD,Sandy Bay 5, +4608066,055353,CSD,Lakeview, +4608042,051243,CSD,Victoria, +4608048,051241,CSD,MacGregor, +4608072,055340,CSD,Glenella, +4609,052300,CD,Division No. 9, +4609026,050000,CSD,Dakota Plains 6A, +4609029,052311-052312,CSD,Portage la Prairie, +4609024,052311-052312,CSD,Portage la Prairie, +4609020,050000,CSD,St. Claude, +4609025,050000,CSD,Long Plain (Part) 6, +4609027,050000,CSD,Dakota Tipi 1, +4609017,052331,CSD,Grey, +4610,052200-053200-052400,CD,Division No. 10, +4610052,052321,CSD,St. François Xavier, +4610035,052340,CSD,Macdonald, +4610043,052322,CSD,Cartier, +4611,052100,CD,Division No. 11, +4611042,052323,CSD,Headingley, +4611040,052100,CSD,Winnipeg, +4612,050000,CD,Division No. 12, +4612054,052412-052422,CSD,Brokenhead, +4612047,052431,CSD,Springfield, +4612056,050000,CSD,Beausejour, +4613,050000,CD,Division No. 13, +4613062,052412-052422,CSD,Brokenhead 4, +4613056,052412-052421,CSD,St. Clements, +4613043,052242-052244,CSD,St. Andrews, +4613032,052433,CSD,East St. Paul, +4613037,052252,CSD,West St. Paul, +4613049,050000,CSD,Dunnottar, +4613047,052244,CSD,Selkirk, +4614,052200,CD,Division No. 14, +4614042,052241,CSD,Teulon, +4614015,052251,CSD,Rosser, +4614036,052241-052243,CSD,Rockwood, +4614031,052232,CSD,Woodlands, +4614039,052243,CSD,Stonewall, +4615,055200,CD,Division No. 15, +4615095,055111-055223,CSD,Park (South), +4615071,050000,CSD,Rolling River 67, +4615046,055233,CSD,Archie, +4615041,055234,CSD,Miniota, +4615038,055243,CSD,Hamiota, +4615020,055261,CSD,Neepawa, +4615078,055262,CSD,Rosedale, +4615075,055254,CSD,Minnedosa, +4615049,055211,CSD,Gambler 63 (Part), +4615091,055253-055254,CSD,Clanwilliam, +4615093,055253,CSD,Erickson, +4615042,055234,CSD,Birdtail Creek 57, +4615060,053243-055241,CSD,Shoal Lake, +4615067,050000,CSD,Keeseekoowenin 61, +4615057,055232,CSD,Birtle, +4615033,055244,CSD,Blanshard, +4615069,055251,CSD,Harrison, +4615072,050000,CSD,Rolling River 67B, +4615064,055242,CSD,Strathclair, +4615023,055255,CSD,Odanah, +4615029,055252,CSD,Rapid City, +4615073,051313-055254,CSD,Minto, +4615051,055231,CSD,St-Lazare, +4615062,053243-055241,CSD,Shoal Lake, +4615036,055243,CSD,Hamiota, +4615018,055261,CSD,Langford, +4615048,055231,CSD,Ellice, +4615055,055232,CSD,Birtle, +4615027,055252,CSD,Saskatchewan, +4616,055100,CD,Division No. 16, +4616046,055121-055132,CSD,Valley River 63A, +4616019,055212,CSD,Silver Creek, +4616025,055211,CSD,Gambler 63 (Part), +4616049,055112,CSD,Shell River, +4616052,055112,CSD,Roblin, +4616017,055221,CSD,Waywayseecappo First Nation, +4616032,055211,CSD,Russell, +4616045,055113,CSD,Hillsburg, +4616038,055114,CSD,Shellmouth-Boulton, +4616024,055211,CSD,Russell, +4616029,050000,CSD,Binscarth, +4616002,055221,CSD,Rossburn, +4616007,055221,CSD,Rossburn, +4617,055100,CD,Division No. 17, +4617050,055121,CSD,Dauphin, +4617048,055121,CSD,Dauphin, +4617076,055311,CSD,Lawrence, +4617092,055100,CSD,"Division No. 17, Unorganized", +4617067,055122,CSD,Ethelbert, +4617057,055132,CSD,Grandview, +4617053,055123,CSD,Gilbert Plains, +4617071,055131,CSD,Mossey River, +4617060,055132,CSD,Grandview, +4617029,055322,CSD,Ebb and Flow 52, +4617042,055321,CSD,Ste. Rose du Lac, +4617073,055131,CSD,Winnipegosis, +4617045,055133,CSD,Ochre River, +4617040,055321,CSD,Ste. Rose, +4617036,055331,CSD,McCreary, +4617063,055122,CSD,Ethelbert, +4617026,055312-055322-055332,CSD,Alonsa, +4617034,055331,CSD,McCreary, +4617055,055123,CSD,Gilbert Plains, +4618,052200,CD,Division No. 18, +4618077,054242,CSD,Riverton, +4618068,054222-054241,CSD,Fisher, +4618091,052200,CSD,"Division No. 18, Unorganized, East Part", +4618074,054242,CSD,Arborg, +4618067,054211,CSD,Fairford (Part) 50, +4618057,054231,CSD,Siglunes, +4618034,052223,CSD,Winnipeg Beach, +4618071,054242,CSD,Bifrost, +4618044,052212,CSD,Coldwell, +4618060,054211-054212-054232,CSD,Grahamdale, +4618063,050000,CSD,Little Saskatchewan 48, +4618093,052200,CSD,"Division No. 18, Unorganized, West Part", +4618052,052211,CSD,Eriksdale, +4618037,052221-052222,CSD,Armstrong, +4618031,052223,CSD,Gimli, +4618055,052211,CSD,Dog Creek 46, +4618040,052231,CSD,St. Laurent, +4619,056100,CD,Division No. 19, +4619072,056222,CSD,Shoal River Indian Reserve 65A, +4619079,050000,CSD,Pauingassi First Nation, +4619060,054211,CSD,Fairford (Part) 50, +4619077,057310,CSD,Berens River 13, +4619062,055121,CSD,Dauphin River 48A, +4619052,057330,CSD,Bloodvein 12, +4619068,055312,CSD,Crane River 51, +4619056,050000,CSD,Fisher River 44, +4619050,050000,CSD,Fort Alexander 3, +4619082,050000,CSD,Chemawawin 3, +4619059,054222,CSD,Peguis 1B, +4619045,056100,CSD,"Division No. 19, Unorganized", +4619070,050000,CSD,Pine Creek 66A, +4619069,054120,CSD,Waterhen 45, +4619051,054110-057320,CSD,Little Grand Rapids 14, +4619058,050000,CSD,Fisher River 44A, +4619054,050000,CSD,Black River 9, +4619075,057200,CSD,Poplar River 16, +4619065,050000,CSD,The Narrows 49, +4619071,050000,CSD,Swan Lake 65C, +4619061,054221,CSD,Jackhead 43, +4619053,050000,CSD,Hole or Hollow Water 10, +4620,056200,CD,Division No. 20, +4620032,056221-056242,CSD,Mountain (South), +4620048,056231,CSD,Swan River, +4620039,056232,CSD,Minitonas, +4620055,056221-056242,CSD,Mountain (North), +4620069,056200,CSD,"Division No. 20, Unorganized, North Part", +4620052,056231,CSD,Bowsman, +4620066,056200,CSD,"Division No. 20, Unorganized, South Part", +4620043,056231,CSD,Benito, +4620041,056231,CSD,Swan River, +4620037,056232,CSD,Minitonas, +4621,056100,CD,Division No. 21, +4621071,058510,CSD,Snow Lake, +4621043,050000,CSD,Opaskwayak Cree Nation 21E, +4621027,054110,CSD,Grand Rapids 33, +4621078,056100,CSD,"Division No. 21, Unorganized", +4621034,050000,CSD,Opaskwayak Cree Nation 21B, +4621025,054110,CSD,Grand Rapids, +4621052,050000,CSD,Kelsey, +4621033,050000,CSD,Opaskwayak Cree Nation 21A, +4621040,050000,CSD,Opaskwayak Cree Nation 21I, +4621058,056120,CSD,Moose Lake 31A, +4621029,050000,CSD,Chemawawin 2, +4621035,050000,CSD,Opaskwayak Cree Nation 21C, +4621064,058520,CSD,Flin Flon (Part), +4621045,056110,CSD,The Pas, +4622,058400,CD,Division No. 22, +4622050,059510,CSD,Oxford House 24, +4622055,050000,CSD,God's River 86A, +4622064,050000,CSD,Ilford, +4622801,050000,CSD,St. Theresa Point, +4622051,057120,CSD,Cross Lake 19, +4622800,050000,CSD,Wasagamack, +4622065,058420,CSD,York Landing, +4622067,057120,CSD,Cross Lake 19E, +4622046,058400,CSD,"Division No. 22, Unorganized", +4622063,058420,CSD,Split Lake (Part) 171, +4622017,050000,CSD,Mystery Lake, +4622049,059510,CSD,God's Lake 23, +4622026,052520,CSD,Thompson, +4622058,057150,CSD,Norway House 17, +4622048,050000,CSD,Garden Hill First Nation, +4622059,058440,CSD,Nelson House 170, +4622052,057120,CSD,Cross Lake 19A, +4622056,059510,CSD,Red Sucker Lake 1976, +4623,059300,CD,Division No. 23, +4623056,059100,CSD,Churchill, +4623039,050000,CSD,Granville Lake, +4623064,058330,CSD,Pukatawagan 198, +4623022,059300,CSD,Gillam, +4623060,058420,CSD,Split Lake (Part) 171, +4623071,059400,CSD,Shamattawa 1, +4623058,059100,CSD,Churchill 1, +4623062,059300,CSD,"Division No. 23, Unorganized", +4623025,059300,CSD,Gillam, +4623034,058320,CSD,Leaf Rapids, +4623027,050000,CSD,Fox Lake 2, +4623047,058310,CSD,Lynn Lake, +4623067,058100,CSD,Lac Brochet 197A, +4623037,058410,CSD,South Indian Lake, +4623065,058100,CSD,Brochet 197, +35,040000,PT,Ontario, +3501,043710-043720-043730-043740,CD,"Stormont, Dundas and Glengarry", +3501050,043710-043720-043730-043740,CSD,North Glengarry, +3501042,043710-043720-043730-043740,CSD,North Stormont, +3501005,043710-043720-043730-043740,CSD,South Glengarry, +3501011,043710-043720-043730-043740,CSD,South Stormont, +3501007,043710-043720-043730-043740,CSD,Akwesasne (Part) 59, +3501012,043720,CSD,Cornwall, +3501020,043710-043720-043730-043740,CSD,South Dundas, +3501030,043710-043720-043730-043740,CSD,North Dundas, +3502,045100,CD,Prescott and Russell, +3502001,045100,CSD,East Hawkesbury, +3502048,045100,CSD,Russell, +3502010,045100,CSD,Champlain, +3502044,045100,CSD,Casselman, +3502008,045100,CSD,Hawkesbury, +3502023,045100,CSD,Alfred and Plantagenet, +3502036,045100,CSD,Clarence-Rockland, +3502025,045100,CSD,The Nation / La Nation, +3506,045410-045420,CD,Ottawa, +3506008,045410-045420,CSD,Ottawa, +3507,043610-043620-043630-043640,CD,Leeds and Grenville, +3507065,043610,CSD,North Grenville, +3507014,043630,CSD,Elizabethtown-Kitley, +3507015,043630,CSD,Brockville, +3507017,043640,CSD,Front of Yonge, +3507033,043620,CSD,Westport, +3507042,043640,CSD,Athens, +3507004,043640,CSD,Edwardsburgh/Cardinal, +3507052,043610,CSD,Merrickville-Wolford, +3507021,043640,CSD,Leeds and the Thousand Islands, +3507040,043620,CSD,Rideau Lakes, +3507008,043630,CSD,Prescott, +3507024,043640,CSD,Gananoque, +3507006,043630,CSD,Augusta, +3509,045310-045320,CD,Lanark, +3509001,045310-045320,CSD,Montague, +3509004,045310,CSD,Smiths Falls, +3509015,045310-045320,CSD,Tay Valley, +3509028,045310-045320,CSD,Carleton Place, +3509010,045310-045320,CSD,Drummond/North Elmsley, +3509024,045310-045320,CSD,Beckwith, +3509030,045310-045320,CSD,Mississippi Mills, +3509039,045310-045320,CSD,Lanark Highlands, +3509021,045310,CSD,Perth, +3510,043410-043420,CD,Frontenac, +3510045,043410-043420,CSD,North Frontenac, +3510020,043410-043420,CSD,South Frontenac, +3510035,043410-043420,CSD,Central Frontenac, +3510010,043510,CSD,Kingston, +3510005,043510,CSD,Frontenac Islands, +3511,043510-043520-043410-043420-044610-046620,CD,Lennox and Addington, +3511030,040000,CSD,Stone Mills, +3511005,040000,CSD,Loyalist, +3511015,043520,CSD,Greater Napanee, +3511035,040000,CSD,Addington Highlands, +3512,044610,CD,Hastings, +3512065,040000,CSD,Carlow/Mayo, +3512030,043420,CSD,Tweed, +3512020,043420,CSD,Stirling-Rawdon, +3512001,040000,CSD,Tyendinaga, +3512002,040000,CSD,Deseronto, +3512076,040000,CSD,Hastings Highlands, +3512048,040000,CSD,Tudor and Cashel, +3512054,040000,CSD,Wollaston, +3512036,040000,CSD,Madoc, +3512026,040000,CSD,Centre Hastings, +3512061,040000,CSD,Bancroft, +3512046,040000,CSD,Marmora and Lake, +3512005,040000,CSD,Belleville, +3512004,040000,CSD,Tyendinaga Mohawk Territory, +3512051,040000,CSD,Limerick, +3512015,043310,CSD,Quinte West, +3512058,040000,CSD,Faraday, +3513,043510-043520-043530,CD,Prince Edward, +3513020,043510-043520-043530,CSD,Prince Edward, +3514,043300-043310-043320,CD,Northumberland, +3514014,043310-043320,CSD,Cramahe, +3514020,043310-043320,CSD,Port Hope, +3514004,043310-043320,CSD,Brighton, +3514027,043310-043320,CSD,Alderville First Nation, +3514019,043310-043320,CSD,Hamilton, +3514021,043310-043320,CSD,Cobourg, +3514024,043310-043320,CSD,Alnwick/Haldimand, +3514045,043310-043320,CSD,Trent Hills, +3515,044740,CD,Peterborough, +3515015,040000,CSD,Smith-Ennismore-Lakefield, +3515037,040000,CSD,North Kawartha, +3515019,040000,CSD,Curve Lake First Nation 35, +3515003,040000,CSD,Asphodel-Norwood, +3515008,040000,CSD,Hiawatha First Nation, +3515005,040000,CSD,Otonabee-South Monaghan, +3515030,040000,CSD,Havelock-Belmont-Methuen, +3515023,040000,CSD,Douro-Dummer, +3515014,044740,CSD,Peterborough, +3515013,040000,CSD,Cavan Monaghan, +3515044,040000,CSD,Galway-Cavendish and Harvey, +3516,044710-044730,CD,Kawartha Lakes, +3516010,044710-044730,CSD,Kawartha Lakes, +3518,043200-043210-043230,CD,Durham, +3518005,043230,CSD,Ajax, +3518001,043230,CSD,Pickering, +3518017,043230,CSD,Clarington, +3518020,044730,CSD,Scugog, +3518029,043210,CSD,Uxbridge, +3518022,044730,CSD,Mississaugas of Scugog Island, +3518009,043230,CSD,Whitby, +3518013,043230,CSD,Oshawa, +3518039,043210,CSD,Brock, +3519,043200,CD,York, +3519049,043240,CSD,King, +3519046,040000,CSD,Aurora, +3519036,043240,CSD,Markham, +3519038,043240,CSD,Richmond Hill, +3519028,043240,CSD,Vaughan, +3519070,043220,CSD,Georgina, +3519054,040000,CSD,East Gwillimbury, +3519044,040000,CSD,Whitchurch-Stouffville, +3519048,043220,CSD,Newmarket, +3519076,040000,CSD,Chippewas of Georgina Island First Nation, +3520,043100,CD,Toronto, +3520005,043100,CSD,Toronto, +3521,046600,CD,Peel, +3521010,046620,CSD,Brampton, +3521005,046620,CSD,Mississauga, +3521024,046610,CSD,Caledon, +3522,046500-046510-046520-046530,CD,Dufferin, +3522012,040000,CSD,Mono, +3522021,040000,CSD,Shelburne, +3522016,040000,CSD,Mulmur, +3522019,040000,CSD,Melancthon, +3522014,040000,CSD,Orangeville, +3522001,040000,CSD,East Garafraxa, +3522010,040000,CSD,East Luther Grand Valley, +3522008,040000,CSD,Amaranth, +3523,046410-046420,CD,Wellington, +3523009,046420,CSD,Guelph/Eramosa, +3523043,040000,CSD,Minto, +3523033,040000,CSD,Mapleton, +3523008,046420,CSD,Guelph, +3523017,046420,CSD,Erin, +3523025,046410-046420,CSD,Centre Wellington, +3523001,040000,CSD,Puslinch, +3523050,040000,CSD,Wellington North, +3524,046600,CD,Halton, +3524015,046630,CSD,Halton Hills, +3524001,046640,CSD,Oakville, +3524009,046630,CSD,Milton, +3524002,046640,CSD,Burlington, +0,046100,CD,Hamilton, +3525005,046100,CSD,Hamilton, +3526,046700-046710-046720,CD,Niagara, +3526028,040000,CSD,Pelham, +3526011,040000,CSD,Port Colborne, +3526037,040000,CSD,Thorold, +3526057,040000,CSD,Lincoln, +3526032,046720,CSD,Welland, +3526053,046710,CSD,St. Catharines, +3526003,040000,CSD,Fort Erie, +3526021,040000,CSD,West Lincoln, +3526047,040000,CSD,Niagara-on-the-Lake, +3526065,046710,CSD,Grimsby, +3526043,046720,CSD,Niagara Falls, +3526014,040000,CSD,Wainfleet, +3528,041100-041200,CD,Haldimand-Norfolk, +3528018,041200,CSD,Haldimand County, +3528037,040000,CSD,Six Nations (Part) 40, +3528035,040000,CSD,New Credit (Part) 40A, +3528052,041100,CSD,Norfolk County, +3529,041720,CD,Brant, +3529021,041720,CSD,New Credit (Part) 40A, +3529005,041720,CSD,Brant, +3529006,041720,CSD,Brantford, +3529020,041720,CSD,Six Nations (Part) 40, +3530,046400-046430,CD,Waterloo, +3530035,046430,CSD,Woolwich, +3530027,046430,CSD,Wellesley, +3530013,046430,CSD,Kitchener, +3530020,046430,CSD,Wilmot, +3530016,046430,CSD,Waterloo, +3530004,046430,CSD,North Dumfries, +3530010,046430,CSD,Cambridge, +3531,046300,CD,Perth, +3531016,046340,CSD,St. Marys, +3531013,046340,CSD,Perth South, +3531030,046320,CSD,Perth East, +3531040,046320,CSD,North Perth, +3531011,046340,CSD,Stratford, +3531025,046340,CSD,West Perth, +3532,041710,CD,Oxford, +3532002,040000,CSD,Norwich, +3532012,041710,CSD,South-West Oxford, +3532004,041710,CSD,Tillsonburg, +3532045,040000,CSD,Blandford-Blenheim, +3532027,040000,CSD,Zorra, +3532042,041710,CSD,Woodstock, +3532038,040000,CSD,East Zorra-Tavistock, +3532018,040000,CSD,Ingersoll, +3534,041600,CD,Elgin, +3534010,040000,CSD,Malahide, +3534011,041610,CSD,Aylmer, +3534042,041620,CSD,West Elgin, +3534005,040000,CSD,Bayham, +3534021,041610,CSD,St. Thomas, +3534024,040000,CSD,Southwold, +3534020,041610-041620,CSD,Central Elgin, +3534030,040000,CSD,Dutton/Dunwich, +3536,041410,CD,Chatham-Kent, +3536020,041410,CSD,Chatham-Kent, +3536029,040000,CSD,Moravian 47, +3537,041420,CD,Essex, +3537003,041420,CSD,Leamington, +3537016,041420,CSD,Essex, +3537048,040000,CSD,Tecumseh, +3537034,040000,CSD,LaSalle, +3537013,040000,CSD,Kingsville, +3537001,040000,CSD,Pelee, +3537064,040000,CSD,Lakeshore, +3537039,041420,CSD,Windsor, +3537028,040000,CSD,Amherstburg, +3538,041310-041320,CD,Lambton, +3538016,040000,CSD,Enniskillen, +3538003,040000,CSD,St. Clair, +3538007,040000,CSD,Dawn-Euphemia, +3538031,040000,CSD,Point Edward, +3538015,040000,CSD,Brooke-Alvinston, +3538030,041320,CSD,Sarnia, +3538040,041310-041320,CSD,Lambton Shores, +3538043,040000,CSD,Warwick, +3538056,040000,CSD,Kettle Point 44, +3538025,041320,CSD,Sarnia 45, +3538019,041320,CSD,Petrolia, +3538018,040000,CSD,Oil Springs, +3538035,040000,CSD,Plympton-Wyoming, +3538004,040000,CSD,Walpole Island 46, +3539,041510-041520,CD,Middlesex, +3539018,040000,CSD,Munsee-Delaware Nation 1, +3539015,041520,CSD,Strathroy-Caradoc, +3539005,041520,CSD,Southwest Middlesex, +3539021,040000,CSD,Oneida 41, +3539036,041510,CSD,London, +3539027,040000,CSD,Thames Centre, +3539033,041510-041520,CSD,Middlesex Centre, +3539047,040000,CSD,Adelaide Metcalfe, +3539017,040000,CSD,Chippewas of the Thames First Nation 42, +3539060,040000,CSD,Lucan Biddulph, +3539002,040000,CSD,Newbury, +3539041,041510-041520,CSD,North Middlesex, +3540,046310-046330,CD,Huron, +3540028,046330,CSD,Goderich, +3540010,046330,CSD,Bluewater, +3540025,046310-046330,CSD,Central Huron, +3540055,046310,CSD,North Huron, +3540063,040000,CSD,Ashfield-Colborne-Wawanosh, +3540046,040000,CSD,Howick, +3540050,040000,CSD,Morris-Turnberry, +3540040,046310-046330,CSD,Huron East, +3540005,046330,CSD,South Huron, +3541,046210,CD,Bruce, +3541069,046210,CSD,Northern Bruce Peninsula, +3541032,040000,CSD,Brockton, +3541045,046230,CSD,Saugeen Shores, +3541055,046230,CSD,South Bruce Peninsula, +3541057,046230,CSD,Saugeen 29, +3541060,040000,CSD,Neyaashiinigmiing 27, +3541043,040000,CSD,Arran-Elderslie, +3541024,046230,CSD,Kincardine, +3541004,046230,CSD,South Bruce, +3541015,040000,CSD,Huron-Kinloss, +3542,046200-046220-046240,CD,Grey, +3542029,040000,CSD,Hanover, +3542004,046220-046240,CSD,West Grey, +3542037,040000,CSD,Chatsworth, +3542045,046220,CSD,Blue Mountains, +3542059,040000,CSD,Owen Sound, +3542047,040000,CSD,Meaford, +3542053,040000,CSD,Georgian Bluffs, +3542015,046220-046240,CSD,Grey Highlands, +3542005,040000,CSD,Southgate, +3543,041100,CD,Simcoe, +3543064,040000,CSD,Wasaga Beach, +3543014,040000,CSD,Bradford West Gwillimbury, +3543007,040000,CSD,New Tecumseth, +3543050,040000,CSD,Mnjikaning First Nation 32 (Rama First Nation 32), +3543015,040000,CSD,Severn, +3543019,040000,CSD,Ramara, +3543072,040000,CSD,Penetanguishene, +3543052,044120,CSD,Orillia, +3543069,040000,CSD,Christian Island 30, +3543017,046510,CSD,Innisfil, +3543005,040000,CSD,Clearview, +3543074,044110,CSD,Midland, +3543070,040000,CSD,Christian Island 30A, +3543023,040000,CSD,Oro-Medonte, +3543031,044130,CSD,Collingwood, +3543042,044130,CSD,Barrie, +3543021,040000,CSD,Essa, +3543003,040000,CSD,Adjala-Tosorontio, +3543071,040000,CSD,Tay, +3543009,040000,CSD,Springwater, +3543068,040000,CSD,Tiny, +3544,044410-044420-044430-044440,CD,Muskoka, +3544042,044410,CSD,Huntsville, +3544071,040000,CSD,Wahta Mohawk Territory, +3544073,040000,CSD,Moose Point 79, +3544018,044440,CSD,Bracebridge, +3544027,040000,CSD,Lake of Bays, +3544053,044410-044420-044430-044440,CSD,Muskoka Lakes, +3544065,040000,CSD,Georgian Bay, +3544002,044440,CSD,Gravenhurst, +3546,044500-044510-044520,CD,Haliburton, +3546024,040000,CSD,Dysart and Others, +3546005,040000,CSD,Highlands East, +3546015,040000,CSD,Minden Hills, +3546018,040000,CSD,Algonquin Highlands, +3547,045230,CD,Renfrew, +3547037,040000,CSD,Pikwakanagan (Golden Lake 39), +3547046,040000,CSD,Horton, +3547002,040000,CSD,Arnprior, +3547020,040000,CSD,"Brudenell, Lyndoch and Raglan", +3547030,040000,CSD,Madawaska Valley, +3547008,040000,CSD,Greater Madawaska, +3547075,040000,CSD,Laurentian Valley, +3547003,040000,CSD,McNab/Braeside, +3547048,045230,CSD,Renfrew, +3547035,040000,CSD,Bonnechere Valley, +3547076,045210,CSD,Petawawa, +3547098,040000,CSD,"Head, Clara and Maria", +3547064,045210,CSD,Pembroke, +3547090,040000,CSD,Laurentian Hills, +3547096,040000,CSD,Deep River, +3547070,040000,CSD,North Algona Wilberforce, +3547043,040000,CSD,Admaston/Bromley, +3547033,040000,CSD,"Killaloe, Hagarty and Richards", +3547056,040000,CSD,Whitewater Region, +3548,049810,CD,Nipissing, +3548022,040000,CSD,Calvin, +3548027,040000,CSD,Bonfield, +3548019,049820,CSD,Mattawan, +3548055,049810,CSD,West Nipissing / Nipissing Ouest, +3548072,040000,CSD,Bear Island 1, +3548044,049820,CSD,North Bay, +3548094,049810-049820,CSD,"Nipissing, Unorganized, North Part", +3548034,040000,CSD,East Ferris, +3548091,049810-049820,CSD,"Nipissing, Unorganized, South Part", +3548069,040000,CSD,Temagami, +3548073,049810-049820,CSD,Nipissing 10, +3548031,040000,CSD,Chisholm, +3548013,040000,CSD,Papineau-Cameron, +3548021,049820,CSD,Mattawa, +3548001,040000,CSD,South Algonquin, +3549,044420,CD,Parry Sound, +3549077,040000,CSD,Dokis 9, +3549018,040000,CSD,Kearney, +3549003,040000,CSD,Seguin, +3549036,044430,CSD,Carling, +3549056,040000,CSD,South River, +3549076,040000,CSD,French River 13, +3549031,040000,CSD,McDougall, +3549032,044420,CSD,Parry Sound, +3549066,040000,CSD,Callander, +3549096,044420,CSD,"Parry Sound, Unorganized, Centre Part", +3549039,040000,CSD,Whitestone, +3549024,040000,CSD,Ryerson, +3549014,040000,CSD,Perry, +3549095,044420,CSD,"Parry Sound, Unorganized, North East Part", +3549071,040000,CSD,Nipissing, +3549046,040000,CSD,Strong, +3549022,040000,CSD,Burk's Falls, +3549072,040000,CSD,Shawanaga 17, +3549043,040000,CSD,Magnetawan, +3549078,040000,CSD,Magnetewan 1, +3549005,040000,CSD,The Archipelago, +3549028,040000,CSD,McKellar, +3549051,040000,CSD,Joly, +3549019,040000,CSD,Armour, +3549012,040000,CSD,McMurrich/Monteith, +3549060,040000,CSD,Powassan, +3549048,040000,CSD,Sundridge, +3549075,040000,CSD,Henvey Inlet 2, +3549073,040000,CSD,Parry Island First Nation, +3549054,040000,CSD,Machar, +3551,049910-049920-049930,CD,Manitoulin, +3551094,049910-049920-049930,CSD,"Manitoulin, Unorganized, West Part", +3551045,040000,CSD,M'Chigeeng 22 (West Bay 22), +3551091,049910-049920-049930,CSD,"Manitoulin, Unorganized, Mainland", +3551040,040000,CSD,Whitefish River (Part) 4, +3551021,040000,CSD,Billings, +3551041,040000,CSD,Sucker Creek 23, +3551034,040000,CSD,Cockburn Island, +3551028,040000,CSD,Burpee and Mills, +3551027,040000,CSD,Gordon/Barrie Island, +3551100,040000,CSD,Zhiibaahaasing 19A (Cockburn Island 19A), +3551011,040000,CSD,Assiginack, +3551017,040000,CSD,Northeastern Manitoulin and the Islands, +3551043,040000,CSD,Wikwemikong Unceded, +3551042,040000,CSD,Sheguiandah 24, +3551044,040000,CSD,Sheshegwaning 20, +3551001,040000,CSD,Tehkummah, +3551036,040000,CSD,Killarney, +3551026,040000,CSD,Gore Bay, +3551006,040000,CSD,Central Manitoulin, +3552,049100,CD,Sudbury, +3552013,049100,CSD,Markstay-Warren, +3552054,049100,CSD,Duck Lake 76B, +3552028,049100,CSD,Baldwin, +3552023,049100,CSD,Sables-Spanish Rivers, +3552052,049100,CSD,Mattagami 71, +3552092,049100,CSD,Chapleau, +3552051,049100,CSD,Whitefish Lake 6, +3552031,049100,CSD,Nairn and Hyman, +3552093,049100,CSD,"Sudbury, Unorganized, North Part", +3552053,049100,CSD,Chapleau 74A, +3552026,049100,CSD,Espanola, +3552058,049100,CSD,Chapleau 75, +3552004,049100,CSD,St.-Charles, +3552001,049100,CSD,French River / Rivière des Français, +3553,049100,CD,Greater Sudbury / Grand Sudbury, +3553005,049100,CSD,Greater Sudbury / Grand Sudbury, +3553040,049100,CSD,Wahnapitei 11, +3554,040000,CD,Timiskaming, +3554094,040000,CSD,"Timiskaming, Unorganized, West Part", +3554042,040000,CSD,James, +3554044,040000,CSD,Charlton and Dack, +3554038,040000,CSD,Thornloe, +3554057,040000,CSD,Matachewan 72, +3554029,040000,CSD,Casey, +3554014,040000,CSD,Harris, +3554036,040000,CSD,Armstrong, +3554068,040000,CSD,Kirkland Lake, +3554034,040000,CSD,Hilliard, +3554052,040000,CSD,Englehart, +3554021,040000,CSD,Hudson, +3554006,040000,CSD,Latchford, +3554091,040000,CSD,"Timiskaming, Unorganized, East Part", +3554026,040000,CSD,Harley, +3554058,040000,CSD,McGarry, +3554049,040000,CSD,Evanturel, +3554054,040000,CSD,Chamberlain, +3554056,040000,CSD,Matachewan, +3554024,040000,CSD,Kerns, +3554008,040000,CSD,Cobalt, +3554066,040000,CSD,Gauthier, +3554062,040000,CSD,Larder Lake, +3554032,040000,CSD,Brethour, +3554020,040000,CSD,Temiskaming Shores, +3554001,040000,CSD,Coleman, +3556,049520,CD,Cochrane, +3556093,049310,CSD,Fort Albany (Part) 67, +3556095,040000,CSD,Constance Lake 92, +3556077,040000,CSD,Mattice-Val Côté, +3556073,040000,CSD,Opasatika, +3556056,040000,CSD,Moonbeam, +3556048,040000,CSD,Smooth Rock Falls, +3556098,049520,CSD,"Cochrane, Unorganized, South East Part", +3556070,040000,CSD,Val Rita-Harty, +3556102,040000,CSD,New Post 69A, +3556014,040000,CSD,Black River-Matheson, +3556076,040000,CSD,Hearst, +3556092,040000,CSD,"Cochrane, Unorganized, North Part", +3556027,049520,CSD,Timmins, +3556100,040000,CSD,Flying Post 73, +3556042,049520,CSD,Cochrane, +3556106,049320,CSD,Moosonee, +3556094,040000,CSD,Factory Island 1, +3556052,040000,CSD,Fauquier-Strickland, +3556066,040000,CSD,Kapuskasing, +3556031,040000,CSD,Iroquois Falls, +3556033,049510,CSD,Abitibi 70, +3556096,040000,CSD,Moose Factory 68, +3556091,049520,CSD,"Cochrane, Unorganized, South West Part", +3557,040000,CD,Algoma, +3557039,040000,CSD,Spanish, +3557001,040000,CSD,Jocelyn, +3557066,040000,CSD,Prince, +3557011,040000,CSD,Laird, +3557040,040000,CSD,North Shore, +3557026,040000,CSD,Thessalon 12, +3557004,040000,CSD,Hilton, +3557095,040000,CSD,"Algoma, Unorganized, North Part", +3557076,040000,CSD,Wawa, +3557075,040000,CSD,Rankin Location 15D, +3557016,040000,CSD,Johnson, +3557021,040000,CSD,Bruce Mines, +3557073,040000,CSD,Mississagi River 8, +3557028,040000,CSD,Thessalon, +3557041,040000,CSD,Elliot Lake, +3557074,040000,CSD,Garden River 14, +3557079,040000,CSD,Dubreuilville, +3557014,040000,CSD,Tarbutt and Tarbutt Additional, +3557091,040000,CSD,White River, +3557078,040000,CSD,Gros Cap 49, +3557038,040000,CSD,Blind River, +3557035,040000,CSD,Huron Shores, +3557072,040000,CSD,Serpent River 7, +3557094,040000,CSD,"Algoma, Unorganized, South East Part", +3557008,040000,CSD,St. Joseph, +3557096,040000,CSD,Hornepayne, +3557071,040000,CSD,Sagamok, +3557006,040000,CSD,Hilton Beach, +3557061,040000,CSD,Sault Ste. Marie, +3557051,040000,CSD,"Macdonald, Meredith and Aberdeen Additional", +3557019,040000,CSD,Plummer Additional, +3557077,040000,CSD,Goulais Bay 15A, +3558,048100,CD,Thunder Bay, +3558097,040000,CSD,Whitesand, +3558064,040000,CSD,Lake Helen 53A, +3558075,040000,CSD,Greenstone, +3558080,040000,CSD,Ojibway Nation of Saugeen (Savant Lake), +3558076,040000,CSD,Aroland 83, +3558077,040000,CSD,Lake Nipigon, +3558063,040000,CSD,Pays Plat 51, +3558051,040000,CSD,Schreiber, +3558028,040000,CSD,Shuniah, +3558085,040000,CSD,Osnaburgh 63A, +3558044,040000,CSD,Nipigon, +3558041,040000,CSD,Red Rock, +3558059,040000,CSD,Marathon, +3558019,040000,CSD,Conmee, +3558004,048100,CSD,Thunder Bay, +3558060,040000,CSD,Pic Mobert North, +3558016,040000,CSD,O'Connor, +3558069,040000,CSD,Rocky Bay 1, +3558011,040000,CSD,Oliver Paipoonge, +3558090,048100,CSD,"Thunder Bay, Unorganized", +3558068,040000,CSD,Long Lake 58, +3558065,040000,CSD,Gull River 55, +3558062,040000,CSD,Pic River 50, +3558067,040000,CSD,Ginoogaming First Nation, +3558066,040000,CSD,Manitouwadge, +3558034,040000,CSD,Dorion, +3558012,040000,CSD,Gillies, +3558061,040000,CSD,Pic Mobert South, +3558095,040000,CSD,Seine River 22A2, +3558054,040000,CSD,Terrace Bay, +3558100,040000,CSD,Lac des Mille Lacs 22A1, +3558001,040000,CSD,Neebing, +3558003,040000,CSD,Fort William 52, +3559,047510,CD,Rainy River, +3559031,040000,CSD,Morley, +3559068,047510-047520,CSD,Rainy Lake 17A, +3559001,040000,CSD,Atikokan, +3559026,040000,CSD,Manitou Rapids 11, +3559011,040000,CSD,Alberton, +3559090,047510,CSD,"Rainy River, Unorganized", +3559024,040000,CSD,Chapple, +3559065,040000,CSD,Seine River 23B, +3559062,040000,CSD,Agency 1, +3559048,040000,CSD,Sabaskong Bay (Part) 35C, +3559051,040000,CSD,Big Grassy River 35G, +3559063,040000,CSD,Couchiching 16A, +3559092,040000,CSD,Long Sault 12, +3559060,040000,CSD,Neguaguon Lake 25D, +3559069,047510-047520,CSD,Rainy Lake 17B, +3559066,040000,CSD,Seine River 23A, +3559012,047510,CSD,Fort Frances, +3559047,040000,CSD,Lake of the Woods, +3559064,040000,CSD,Rainy Lake 26A, +3559016,040000,CSD,La Vallee, +3559052,040000,CSD,Big Island Mainland 93, +3559053,040000,CSD,Saug-a-Gaw-Sing 1, +3559040,040000,CSD,Dawson, +3559042,040000,CSD,Rainy River, +3559019,047510,CSD,Emo, +3559061,047510-047520,CSD,Rainy Lake 18C, +3560,047310,CD,Kenora, +3560100,040000,CSD,Wawakapewin (Long Dog Lake), +3560071,040000,CSD,Sandy Lake 88, +3560059,040000,CSD,Weagamow Lake 87, +3560085,040000,CSD,Wunnumin 1, +3560053,042720,CSD,Fort Hope 64, +3560084,040000,CSD,Wabauskang 21, +3560082,040000,CSD,Shoal Lake (Part) 40, +3560067,040000,CSD,Poplar Hill, +3560005,040000,CSD,Whitefish Bay 33A, +3560097,040000,CSD,Muskrat Dam Lake, +3560051,042100,CSD,Attawapiskat 91A, +3560050,049310,CSD,Fort Albany (Part) 67, +3560061,040000,CSD,Wabaseemoong, +3560027,040000,CSD,Dryden, +3560075,040000,CSD,Kitchenuhmaykoosib Aaki 84 (Big Trout Lake), +3560104,040000,CSD,Kee-Way-Win, +3560093,040000,CSD,Neskantaga, +3560021,040000,CSD,Machin, +3560068,040000,CSD,Shoal Lake (Part) 39A, +3560064,040000,CSD,Shoal Lake 34B2, +3560032,040000,CSD,Ear Falls, +3560090,047310,CSD,"Kenora, Unorganized", +3560078,042200,CSD,Fort Severn 89, +3560076,040000,CSD,Sachigo Lake 1, +3560088,040000,CSD,Wapekeka 2, +3560086,040000,CSD,Summer Beaver, +3560070,040000,CSD,Deer Lake, +3560052,040000,CSD,Marten Falls 65, +3560055,040000,CSD,Osnaburgh 63B, +3560034,047220,CSD,Sioux Lookout, +3560024,040000,CSD,Eagle Lake 27, +3560083,040000,CSD,Whitefish Bay 34A, +3560081,040000,CSD,Lansdowne House, +3560095,040000,CSD,Bearskin Lake, +3560054,040000,CSD,Cat Lake 63C, +3560046,040000,CSD,Slate Falls, +3560004,040000,CSD,Whitefish Bay 32A, +3560063,040000,CSD,Sabaskong Bay 35D, +3560079,042710,CSD,Webequie, +3560080,040000,CSD,North Spirit Lake, +3560042,040000,CSD,Red Lake, +3560010,047310,CSD,Kenora, +3560008,047320,CSD,Sioux Narrows - Nestor Falls, +3560060,040000,CSD,Northwest Angle 33B, +3560096,040000,CSD,Kasabonika Lake, +3560102,040000,CSD,MacDowell Lake, +3560058,040000,CSD,English River 21, +3560089,040000,CSD,The Dalles 38C, +3560007,040000,CSD,Sabaskong Bay (Part) 35C, +3560091,042300,CSD,Peawanuck, +3560098,040000,CSD,Kingfisher Lake 1, +3560077,040000,CSD,Pikangikum 14, +3560049,040000,CSD,Pickle Lake, +3560056,040000,CSD,Lac Seul 28, +3560069,040000,CSD,Rat Portage 38A, +3560057,040000,CSD,Wabigoon Lake 27, +3560001,040000,CSD,Ignace, +3560065,040000,CSD,Lake Of The Woods 37, +3560066,047310,CSD,Kenora 38B, +24,030000,PT,Québec, +2401,036800,CD,, +2401023,036800,CSD,Les Îles-de-la-Madeleine, +2401042,030000,CSD,Grosse-Île, +2402,035800-035820,CD,, +2402005,035800-035820,CSD,Percé, +2402010,030000,CSD,Sainte-Thérèse-de-Gaspé, +2402015,033100,CSD,Grande-Rivière, +2402028,030000,CSD,Chandler, +2402047,030000,CSD,Port-Daniel - Gascons, +2402902,030000,CSD,Mont-Alexandre, +2403,035800-035810,CD,, +2403005,035800-035810,CSD,Gaspé, +2403010,030000,CSD,Cloridorme, +2403015,030000,CSD,Petite-Vallée, +2403020,030000,CSD,Grande-Vallée, +2403025,030000,CSD,Murdochville, +2403902,030000,CSD,Rivière-Saint-Jean, +2403904,030000,CSD,Collines-du-Basque, +2404,030000,CD,, +2404005,030000,CSD,Sainte-Madeleine-de-la-Rivière-Madeleine, +2404010,030000,CSD,Saint-Maxime-du-Mont-Louis, +2404015,030000,CSD,Mont-Saint-Pierre, +2404020,030000,CSD,Rivière-à-Claude, +2404025,030000,CSD,Marsoui, +2404030,030000,CSD,La Martre, +2404037,030000,CSD,Sainte-Anne-des-Monts, +2404047,030000,CSD,Cap-Chat, +2404902,030000,CSD,Mont-Albert, +2404904,030000,CSD,Coulée-des-Adolphe, +2405,030000,CD,, +2405010,030000,CSD,Shigawake, +2405015,030000,CSD,Saint-Godefroi, +2405020,030000,CSD,Hope Town, +2405025,030000,CSD,Hope, +2405032,030000,CSD,Paspébiac, +2405040,030000,CSD,New Carlisle, +2405045,030000,CSD,Bonaventure, +2405050,030000,CSD,Saint-Elzéar, +2405055,030000,CSD,Saint-Siméon, +2405060,030000,CSD,Caplan, +2405065,030000,CSD,Saint-Alphonse, +2405070,030000,CSD,New Richmond, +2405077,030000,CSD,Cascapédia - Saint-Jules, +2405902,030000,CSD,Rivière-Bonaventure, +2406,030000,CD,, +2406005,030000,CSD,Maria, +2406013,030000,CSD,Carleton-sur-Mer, +2406020,030000,CSD,Nouvelle, +2406025,030000,CSD,Escuminac, +2406030,030000,CSD,Pointe-à-la-Croix, +2406035,030000,CSD,Ristigouche-Partie-Sud-Est, +2406040,030000,CSD,Saint-André-de-Restigouche, +2406045,030000,CSD,Matapédia, +2406050,030000,CSD,Saint-Alexis-de-Matapédia, +2406055,030000,CSD,Saint-François-d'Assise, +2406060,030000,CSD,L'Ascension-de-Patapédia, +2406802,030000,CSD,Gesgapegiag, +2406804,030000,CSD,Listuguj, +2406902,030000,CSD,Rivière-Nouvelle, +2406904,030000,CSD,Ruisseau-Ferguson, +2407,030000,CD,, +2407005,030000,CSD,Sainte-Marguerite-Marie, +2407010,030000,CSD,Sainte-Florence, +2407018,030000,CSD,Causapscal, +2407025,030000,CSD,Albertville, +2407030,030000,CSD,Saint-Léon-le-Grand, +2407035,030000,CSD,Saint-Zénon-du-Lac-Humqui, +2407040,030000,CSD,Sainte-Irène, +2407047,030000,CSD,Amqui, +2407057,030000,CSD,Lac-au-Saumon, +2407065,030000,CSD,Saint-Alexandre-des-Lacs, +2407070,030000,CSD,Saint-Tharcisius, +2407075,030000,CSD,Saint-Vianney, +2407080,030000,CSD,Val-Brillant, +2407085,030000,CSD,Sayabec, +2407090,030000,CSD,Saint-Cléophas, +2407095,030000,CSD,Saint-Moïse, +2407100,030000,CSD,Saint-Noël, +2407105,030000,CSD,Saint-Damase, +2407902,030000,CSD,Routhierville, +2407904,030000,CSD,Rivière-Vaseuse, +2407906,030000,CSD,Rivière-Patapédia-Est, +2407908,030000,CSD,Lac-Casault, +2407910,030000,CSD,Ruisseau-des-Mineurs, +2407912,030000,CSD,Lac-Alfred, +2407914,030000,CSD,Lac-Matapédia, +2408,030000,CD,, +2408005,030000,CSD,Les Méchins, +2408010,030000,CSD,Saint-Jean-de-Cherbourg, +2408015,030000,CSD,Grosses-Roches, +2408023,030000,CSD,Sainte-Félicité, +2408030,030000,CSD,Saint-Adelme, +2408035,030000,CSD,Saint-René-de-Matane, +2408040,030000,CSD,Sainte-Paule, +2408053,030000,CSD,Matane, +2408065,030000,CSD,Saint-Léandre, +2408073,030000,CSD,Saint-Ulric, +2408080,030000,CSD,Baie-des-Sables, +2408902,030000,CSD,Rivière-Bonjour, +2409,030000,CD,, +2409005,030000,CSD,La Rédemption, +2409010,030000,CSD,Saint-Charles-Garnier, +2409015,030000,CSD,Les Hauteurs, +2409020,030000,CSD,Sainte-Jeanne-d'Arc, +2409025,030000,CSD,Saint-Gabriel-de-Rimouski, +2409030,032120,CSD,Saint-Donat, +2409035,030000,CSD,Sainte-Angèle-de-Mérici, +2409040,030000,CSD,Padoue, +2409048,030000,CSD,Métis-sur-Mer, +2409055,030000,CSD,Saint-Octave-de-Métis, +2409060,030000,CSD,Grand-Métis, +2409065,030000,CSD,Price, +2409070,030000,CSD,Saint-Joseph-de-Lepage, +2409077,030000,CSD,Mont-Joli, +2409085,030000,CSD,Sainte-Flavie, +2409092,030000,CSD,Sainte-Luce, +2409902,030000,CSD,Lac-des-Eaux-Mortes, +2409904,030000,CSD,Lac-à-la-Croix, +2410,030000,CD,, +2410005,030000,CSD,Esprit-Saint, +2410010,030000,CSD,La Trinité-des-Monts, +2410015,030000,CSD,Saint-Narcisse-de-Rimouski, +2410025,030000,CSD,Saint-Marcellin, +2410030,030000,CSD,Saint-Anaclet-de-Lessard, +2410043,030000,CSD,Rimouski, +2410060,030000,CSD,Saint-Valérien, +2410070,030000,CSD,Saint-Fabien, +2410075,030000,CSD,Saint-Eugène-de-Ladrière, +2410902,030000,CSD,Lac-Huron, +2411,030000,CD,, +2411005,030000,CSD,Saint-Clément, +2411010,030000,CSD,Saint-Jean-de-Dieu, +2411015,030000,CSD,Sainte-Rita, +2411020,030000,CSD,Saint-Guy, +2411025,030000,CSD,Saint-Médard, +2411030,030000,CSD,Sainte-Françoise, +2411035,030000,CSD,Saint-Éloi, +2411040,030000,CSD,Trois-Pistoles, +2411045,030000,CSD,Notre-Dame-des-Neiges, +2411050,030000,CSD,Saint-Mathieu-de-Rioux, +2411055,030000,CSD,Saint-Simon, +2411902,030000,CSD,Lac-Boisbouscache, +2412,030000,CD,, +2412005,030000,CSD,Saint-Cyprien, +2412010,030000,CSD,Saint-Hubert-de-Rivière-du-Loup, +2412015,030000,CSD,Saint-Antonin, +2412020,030000,CSD,Saint-Modeste, +2412025,030000,CSD,Saint-François-Xavier-de-Viger, +2412030,030000,CSD,Saint-Épiphane, +2412035,030000,CSD,Saint-Paul-de-la-Croix, +2412043,030000,CSD,L'Isle-Verte, +2412045,030000,CSD,Notre-Dame-des-Sept-Douleurs, +2412057,030000,CSD,Cacouna, +2412065,030000,CSD,Saint-Arsène, +2412072,030000,CSD,Rivière-du-Loup, +2412080,030000,CSD,Notre-Dame-du-Portage, +2412802,030000,CSD,Whitworth, +2412804,030000,CSD,Cacouna, +2413,030000,CD,, +2413005,030000,CSD,Dégelis, +2413010,030000,CSD,Saint-Jean-de-la-Lande, +2413015,030000,CSD,Packington, +2413020,030000,CSD,Saint-Marc-du-Lac-Long, +2413025,030000,CSD,Rivière-Bleue, +2413030,030000,CSD,Saint-Eusèbe, +2413040,030000,CSD,Saint-Juste-du-Lac, +2413045,030000,CSD,Auclair, +2413050,030000,CSD,Lejeune, +2413055,030000,CSD,Biencourt, +2413060,030000,CSD,Lac-des-Aigles, +2413065,030000,CSD,Saint-Michel-du-Squatec, +2413073,030000,CSD,Témiscouata-sur-le-Lac, +2413075,030000,CSD,Saint-Pierre-de-Lamy, +2413080,030000,CSD,Saint-Louis-du-Ha! Ha!, +2413085,030000,CSD,Saint-Elzéar-de-Témiscouata, +2413090,030000,CSD,Saint-Honoré-de-Témiscouata, +2413095,030000,CSD,Pohénégamook, +2413100,030000,CSD,Saint-Athanase, +2414,030000,CD,, +2414005,030000,CSD,Mont-Carmel, +2414010,030000,CSD,Saint-Bruno-de-Kamouraska, +2414018,030000,CSD,Saint-Pascal, +2414025,030000,CSD,Sainte-Hélène, +2414030,030000,CSD,Saint-Joseph-de-Kamouraska, +2414035,030000,CSD,Saint-Alexandre-de-Kamouraska, +2414040,030000,CSD,Saint-André, +2414045,030000,CSD,Saint-Germain, +2414050,030000,CSD,Kamouraska, +2414055,030000,CSD,Saint-Denis-De La Bouteillerie, +2414060,030000,CSD,Saint-Philippe-de-Néri, +2414065,030000,CSD,Rivière-Ouelle, +2414070,030000,CSD,Saint-Pacôme, +2414075,030000,CSD,Saint-Gabriel-Lalemant, +2414080,030000,CSD,Saint-Onésime-d'Ixworth, +2414085,030000,CSD,La Pocatière, +2414090,030000,CSD,Sainte-Anne-de-la-Pocatière, +2414902,030000,CSD,Picard, +2414904,030000,CSD,Petit-Lac-Sainte-Anne, +2415,030000,CD,, +2415005,030000,CSD,Saint-Irénée, +2415013,030000,CSD,La Malbaie, +2415025,030000,CSD,Notre-Dame-des-Monts, +2415030,030000,CSD,Saint-Aimé-des-Lacs, +2415035,030000,CSD,Clermont, +2415058,030000,CSD,Saint-Siméon, +2415065,030000,CSD,Baie-Sainte-Catherine, +2415902,030000,CSD,Mont-Élie, +2415904,030000,CSD,Sagard, +2416,030000,CD,, +2416005,030000,CSD,Petite-Rivière-Saint-François, +2416013,030000,CSD,Baie-Saint-Paul, +2416023,030000,CSD,L'Isle-aux-Coudres, +2416048,030000,CSD,Les Éboulements, +2416050,030000,CSD,Saint-Hilarion, +2416055,030000,CSD,Saint-Urbain, +2416902,030000,CSD,Lac-Pikauba, +2417,030000,CD,, +2417005,030000,CSD,Saint-Omer, +2417010,030000,CSD,Saint-Pamphile, +2417015,030000,CSD,Saint-Adalbert, +2417020,030000,CSD,Saint-Marcel, +2417025,030000,CSD,Sainte-Félicité, +2417030,030000,CSD,Sainte-Perpétue, +2417035,030000,CSD,Tourville, +2417040,030000,CSD,Saint-Damase-de-L'Islet, +2417045,030000,CSD,Saint-Cyrille-de-Lessard, +2417055,030000,CSD,Saint-Aubert, +2417060,030000,CSD,Sainte-Louise, +2417065,030000,CSD,Saint-Roch-des-Aulnaies, +2417070,030000,CSD,Saint-Jean-Port-Joli, +2417078,030000,CSD,L'Islet, +2418,030000,CD,, +2418005,030000,CSD,Saint-Just-de-Bretenières, +2418010,030000,CSD,Lac-Frontière, +2418015,030000,CSD,Saint-Fabien-de-Panet, +2418020,030000,CSD,Sainte-Lucie-de-Beauregard, +2418025,030000,CSD,Sainte-Apolline-de-Patton, +2418030,030000,CSD,Saint-Paul-de-Montminy, +2418035,030000,CSD,Sainte-Euphémie-sur-Rivière-du-Sud, +2418040,030000,CSD,Notre-Dame-du-Rosaire, +2418045,030000,CSD,Cap-Saint-Ignace, +2418050,030000,CSD,Montmagny, +2418055,030000,CSD,Saint-Pierre-de-la-Rivière-du-Sud, +2418060,030000,CSD,Saint-François-de-la-Rivière-du-Sud, +2418065,030000,CSD,Berthier-sur-Mer, +2418070,030000,CSD,Saint-Antoine-de-l'Isle-aux-Grues, +2419,030000,CD,, +2419005,030000,CSD,Saint-Philémon, +2419010,030000,CSD,Notre-Dame-Auxiliatrice-de-Buckland, +2419015,030000,CSD,Saint-Nazaire-de-Dorchester, +2419020,030000,CSD,Saint-Léon-de-Standon, +2419025,030000,CSD,Saint-Malachie, +2419030,030000,CSD,Saint-Damien-de-Buckland, +2419037,030000,CSD,Armagh, +2419045,032821,CSD,Saint-Nérée-de-Bellechasse, +2419050,032821,CSD,Saint-Lazare-de-Bellechasse, +2419055,030000,CSD,Sainte-Claire, +2419062,030000,CSD,Saint-Anselme, +2419068,030000,CSD,Saint-Henri, +2419070,030000,CSD,Honfleur, +2419075,030000,CSD,Saint-Gervais, +2419082,030000,CSD,Saint-Raphaël, +2419090,030000,CSD,La Durantaye, +2419097,032821,CSD,Saint-Charles-de-Bellechasse, +2419105,030000,CSD,Beaumont, +2419110,032821,CSD,Saint-Michel-de-Bellechasse, +2419117,030000,CSD,Saint-Vallier, +2420,030000,CD,, +2420005,032814,CSD,Saint-François-de-l'Île-d'Orléans, +2420010,030000,CSD,Sainte-Famille, +2420015,032814,CSD,Saint-Jean-de-l'Île-d'Orléans, +2420020,032814,CSD,Saint-Laurent-de-l'Île-d'Orléans, +2420025,032814,CSD,Saint-Pierre-de-l'Île-d'Orléans, +2420030,030000,CSD,Sainte-Pétronille, +2421,030000,CD,, +2421005,030000,CSD,Saint-Tite-des-Caps, +2421010,030000,CSD,Saint-Ferréol-les-Neiges, +2421015,030000,CSD,Saint-Louis-de-Gonzague-du-Cap-Tourmente, +2421020,030000,CSD,Saint-Joachim, +2421025,032814,CSD,Beaupré, +2421030,032814,CSD,Sainte-Anne-de-Beaupré, +2421035,030000,CSD,Château-Richer, +2421040,030000,CSD,L'Ange-Gardien, +2421045,030000,CSD,Boischatel, +2421902,030000,CSD,Sault-au-Cochon, +2421904,030000,CSD,Lac-Jacques-Cartier, +2422,030000,CD,, +2422005,030000,CSD,Sainte-Catherine-de-la-Jacques-Cartier, +2422010,030000,CSD,Fossambault-sur-le-Lac, +2422015,030000,CSD,Lac-Saint-Joseph, +2422020,030000,CSD,Shannon, +2422025,032812,CSD,Saint-Gabriel-de-Valcartier, +2422030,030000,CSD,Lac-Delage, +2422035,032812,CSD,Stoneham-et-Tewkesbury, +2422040,030000,CSD,Lac-Beauport, +2422045,030000,CSD,Sainte-Brigitte-de-Laval, +2422902,030000,CSD,Lac-Croche, +2423,032800,CD,, +2423015,030000,CSD,Notre-Dame-des-Anges, +2423027,032813,CSD,Québec, +2423057,030000,CSD,L'Ancienne-Lorette, +2423072,030000,CSD,Saint-Augustin-de-Desmaures, +2423802,030000,CSD,Wendake, +2425,032822,CD,, +2425213,032822,CSD,Lévis, +2426,030000,CD,, +2426005,030000,CSD,Frampton, +2426010,030000,CSD,Saints-Anges, +2426015,030000,CSD,Vallée-Jonction, +2426022,030000,CSD,Saint-Elzéar, +2426030,030000,CSD,Sainte-Marie, +2426035,030000,CSD,Sainte-Marguerite, +2426040,030000,CSD,Sainte-Hénédine, +2426048,030000,CSD,Scott, +2426055,030000,CSD,Saint-Bernard, +2426063,030000,CSD,Saint-Isidore, +2426070,030000,CSD,Saint-Lambert-de-Lauzon, +2427,030000,CD,, +2427008,030000,CSD,Saint-Victor, +2427015,030000,CSD,Saint-Alfred, +2427028,030000,CSD,Beauceville, +2427035,030000,CSD,Saint-Odilon-de-Cranbourne, +2427043,030000,CSD,Saint-Joseph-de-Beauce, +2427050,030000,CSD,Saint-Joseph-des-Érables, +2427055,030000,CSD,Saint-Jules, +2427060,030000,CSD,Tring-Jonction, +2427065,030000,CSD,Saint-Frédéric, +2427070,030000,CSD,Saint-Séverin, +2428,030000,CD,, +2428005,030000,CSD,Saint-Zacharie, +2428015,030000,CSD,Sainte-Aurélie, +2428020,030000,CSD,Saint-Prosper, +2428025,030000,CSD,Saint-Benjamin, +2428030,030000,CSD,Sainte-Rose-de-Watford, +2428035,030000,CSD,Saint-Louis-de-Gonzague, +2428040,030000,CSD,Saint-Cyprien, +2428045,030000,CSD,Sainte-Justine, +2428053,030000,CSD,Lac-Etchemin, +2428060,032821,CSD,Saint-Luc-de-Bellechasse, +2428065,030000,CSD,Sainte-Sabine, +2428070,030000,CSD,Saint-Camille-de-Lellis, +2428075,030000,CSD,Saint-Magloire, +2429,030000,CD,, +2429005,030000,CSD,Saint-Théophile, +2429013,030000,CSD,Saint-Gédéon-de-Beauce, +2429020,030000,CSD,Saint-Hilaire-de-Dorset, +2429025,030000,CSD,Saint-Évariste-de-Forsyth, +2429030,030000,CSD,La Guadeloupe, +2429038,030000,CSD,Saint-Honoré-de-Shenley, +2429045,030000,CSD,Saint-Martin, +2429050,030000,CSD,Saint-René, +2429057,030000,CSD,Saint-Côme - Linière, +2429065,030000,CSD,Saint-Philibert, +2429073,030000,CSD,Saint-Georges, +2429095,030000,CSD,Lac-Poulin, +2429100,030000,CSD,Saint-Benoît-Labre, +2429112,030000,CSD,Saint-Éphrem-de-Beauce, +2429120,030000,CSD,Notre-Dame-des-Pins, +2429125,030000,CSD,Saint-Simon-les-Mines, +2430,030000,CD,, +2430005,030000,CSD,Saint-Augustin-de-Woburn, +2430010,030000,CSD,Notre-Dame-des-Bois, +2430015,030000,CSD,Val-Racine, +2430020,030000,CSD,Piopolis, +2430025,030000,CSD,Frontenac, +2430030,030000,CSD,Lac-Mégantic, +2430035,030000,CSD,Marston, +2430040,030000,CSD,Milan, +2430045,030000,CSD,Nantes, +2430050,030000,CSD,Sainte-Cécile-de-Whitton, +2430055,030000,CSD,Audet, +2430070,030000,CSD,Saint-Robert-Bellarmin, +2430072,030000,CSD,Saint-Ludger, +2430080,030000,CSD,Lac-Drolet, +2430085,030000,CSD,Saint-Sébastien, +2430090,030000,CSD,Courcelles, +2430095,030000,CSD,Lambton, +2430100,030000,CSD,Saint-Romain, +2430105,030000,CSD,Stornoway, +2430110,030000,CSD,Stratford, +2431,030000,CD,, +2431008,030000,CSD,Beaulac-Garthby, +2431015,030000,CSD,Disraeli, +2431020,030000,CSD,Disraeli, +2431025,030000,CSD,Saint-Jacques-le-Majeur-de-Wolfestown, +2431030,030000,CSD,Saint-Fortunat, +2431035,030000,CSD,Saint-Julien, +2431040,030000,CSD,Irlande, +2431045,030000,CSD,Saint-Joseph-de-Coleraine, +2431050,030000,CSD,Sainte-Praxède, +2431056,030000,CSD,Adstock, +2431060,030000,CSD,Sainte-Clotilde-de-Beauce, +2431084,030000,CSD,Thetford Mines, +2431095,030000,CSD,Saint-Adrien-d'Irlande, +2431100,030000,CSD,Saint-Jean-de-Brébeuf, +2431105,030000,CSD,Kinnear's Mills, +2431122,030000,CSD,East Broughton, +2431130,030000,CSD,Sacré-Coeur-de-Jésus, +2431135,030000,CSD,Saint-Pierre-de-Broughton, +2431140,030000,CSD,Saint-Jacques-de-Leeds, +2432,030000,CD,, +2432013,030000,CSD,Saint-Ferdinand, +2432023,030000,CSD,Sainte-Sophie-d'Halifax, +2432033,030000,CSD,Princeville, +2432040,030000,CSD,Plessisville, +2432045,030000,CSD,Plessisville, +2432050,030000,CSD,Saint-Pierre-Baptiste, +2432058,030000,CSD,Inverness, +2432065,030000,CSD,Lyster, +2432072,030000,CSD,Laurierville, +2432080,030000,CSD,Notre-Dame-de-Lourdes, +2432085,030000,CSD,Villeroy, +2433,030000,CD,, +2433007,030000,CSD,Saint-Sylvestre, +2433017,032210,CSD,Sainte-Agathe-de-Lotbinière, +2433025,030000,CSD,Saint-Patrice-de-Beaurivage, +2433030,030000,CSD,Saint-Narcisse-de-Beaurivage, +2433035,030000,CSD,Saint-Gilles, +2433040,030000,CSD,Dosquet, +2433045,030000,CSD,Saint-Agapit, +2433052,030000,CSD,Saint-Flavien, +2433060,030000,CSD,Laurier-Station, +2433065,030000,CSD,Saint-Janvier-de-Joly, +2433070,030000,CSD,Val-Alain, +2433080,032824,CSD,Saint-Édouard-de-Lotbinière, +2433085,030000,CSD,Notre-Dame-du-Sacré-Coeur-d'Issoudun, +2433090,030000,CSD,Saint-Apollinaire, +2433095,030000,CSD,Saint-Antoine-de-Tilly, +2433102,030000,CSD,Sainte-Croix, +2433115,032824,CSD,Lotbinière, +2433123,030000,CSD,Leclercville, +2434,030000,CD,, +2434007,030000,CSD,Neuville, +2434017,030000,CSD,Pont-Rouge, +2434025,030000,CSD,Donnacona, +2434030,030000,CSD,Cap-Santé, +2434038,030000,CSD,Saint-Basile, +2434048,032811,CSD,Portneuf, +2434058,030000,CSD,Deschambault-Grondines, +2434060,030000,CSD,Saint-Gilbert, +2434065,030000,CSD,Saint-Marc-des-Carrières, +2434078,030000,CSD,Saint-Casimir, +2434085,030000,CSD,Saint-Thuribe, +2434090,030000,CSD,Saint-Ubalde, +2434097,030000,CSD,Saint-Alban, +2434105,030000,CSD,Sainte-Christine-d'Auvergne, +2434115,032811,CSD,Saint-Léonard-de-Portneuf, +2434120,030000,CSD,Lac-Sergent, +2434128,030000,CSD,Saint-Raymond, +2434135,030000,CSD,Rivière-à-Pierre, +2434902,030000,CSD,Lac-Blanc, +2434904,030000,CSD,Linton, +2434906,030000,CSD,Lac-Lapeyrère, +2435,030000,CD,, +2435005,030000,CSD,Notre-Dame-de-Montauban, +2435010,032730,CSD,Lac-aux-Sables, +2435015,030000,CSD,Saint-Adelphe, +2435020,030000,CSD,Saint-Séverin, +2435027,030000,CSD,Saint-Tite, +2435035,030000,CSD,Hérouxville, +2435040,030000,CSD,Grandes-Piles, +2435045,030000,CSD,Saint-Roch-de-Mékinac, +2435050,030000,CSD,Sainte-Thècle, +2435055,030000,CSD,Trois-Rives, +2435902,030000,CSD,Lac-Masketsi, +2435904,030000,CSD,Lac-Normand, +2435906,030000,CSD,Rivière-de-la-Savane, +2435908,030000,CSD,Lac-Boulé, +2436,030000,CD,, +2436033,032740,CSD,Shawinigan, +2437,030000,CD,, +2437067,032760,CSD,Trois-Rivières, +2437205,032750,CSD,Sainte-Anne-de-la-Pérade, +2437210,030000,CSD,Batiscan, +2437215,030000,CSD,Sainte-Geneviève-de-Batiscan, +2437220,030000,CSD,Champlain, +2437225,030000,CSD,Saint-Luc-de-Vincennes, +2437230,030000,CSD,Saint-Maurice, +2437235,030000,CSD,Notre-Dame-du-Mont-Carmel, +2437240,030000,CSD,Saint-Narcisse, +2437245,030000,CSD,Saint-Stanislas, +2437250,030000,CSD,Saint-Prosper-de-Champlain, +2438,030000,CD,, +2438005,030000,CSD,Saint-Sylvère, +2438010,030000,CSD,Bécancour, +2438015,030000,CSD,Sainte-Marie-de-Blandford, +2438020,030000,CSD,Lemieux, +2438028,030000,CSD,Manseau, +2438035,030000,CSD,Sainte-Françoise, +2438040,030000,CSD,Sainte-Sophie-de-Lévrard, +2438047,030000,CSD,Fortierville, +2438055,030000,CSD,Parisville, +2438060,030000,CSD,Sainte-Cécile-de-Lévrard, +2438065,030000,CSD,Saint-Pierre-les-Becquets, +2438070,030000,CSD,Deschaillons-sur-Saint-Laurent, +2438802,030000,CSD,Wôlinak, +2439,030000,CD,, +2439005,030000,CSD,Saints-Martyrs-Canadiens, +2439010,030000,CSD,Ham-Nord, +2439015,030000,CSD,Notre-Dame-de-Ham, +2439020,032530,CSD,Saint-Rémi-de-Tingwick, +2439025,030000,CSD,Tingwick, +2439030,030000,CSD,Chesterville, +2439035,030000,CSD,Sainte-Hélène-de-Chester, +2439043,030000,CSD,Saint-Norbert-d'Arthabaska, +2439060,030000,CSD,Saint-Christophe-d'Arthabaska, +2439062,030000,CSD,Victoriaville, +2439077,030000,CSD,Warwick, +2439085,030000,CSD,Saint-Albert, +2439090,030000,CSD,Sainte-Élizabeth-de-Warwick, +2439097,030000,CSD,Kingsey Falls, +2439105,030000,CSD,Sainte-Séraphine, +2439117,030000,CSD,Sainte-Clotilde-de-Horton, +2439130,030000,CSD,Saint-Samuel, +2439135,030000,CSD,Saint-Valère, +2439145,030000,CSD,Saint-Rosaire, +2439150,030000,CSD,Sainte-Anne-du-Sault, +2439155,030000,CSD,Daveluyville, +2439165,030000,CSD,Maddington, +2439170,030000,CSD,Saint-Louis-de-Blandford, +2440,030000,CD,, +2440005,030000,CSD,Ham-Sud, +2440010,030000,CSD,Saint-Adrien, +2440017,030000,CSD,Wotton, +2440025,030000,CSD,Saint-Camille, +2440032,030000,CSD,Saint-Georges-de-Windsor, +2440043,030000,CSD,Asbestos, +2440047,030000,CSD,Danville, +2441,030000,CD,, +2441012,030000,CSD,Saint-Isidore-de-Clifton, +2441020,030000,CSD,Chartierville, +2441027,030000,CSD,La Patrie, +2441037,030000,CSD,Newport, +2441038,030000,CSD,Cookshire-Eaton, +2441055,030000,CSD,Ascot Corner, +2441060,030000,CSD,East Angus, +2441065,030000,CSD,Westbury, +2441070,030000,CSD,Bury, +2441075,030000,CSD,Hampden, +2441080,030000,CSD,Scotstown, +2441085,030000,CSD,Lingwick, +2441098,030000,CSD,Weedon, +2441117,030000,CSD,Dudswell, +2442,030000,CD,, +2442005,030000,CSD,Stoke, +2442020,030000,CSD,Saint-François-Xavier-de-Brompton, +2442025,030000,CSD,Saint-Denis-de-Brompton, +2442032,030000,CSD,Racine, +2442040,030000,CSD,Bonsecours, +2442045,030000,CSD,Lawrenceville, +2442050,030000,CSD,Sainte-Anne-de-la-Rochelle, +2442055,030000,CSD,Valcourt, +2442060,030000,CSD,Valcourt, +2442065,030000,CSD,Maricourt, +2442070,030000,CSD,Kingsbury, +2442075,030000,CSD,Melbourne, +2442078,030000,CSD,Ulverton, +2442088,030000,CSD,Windsor, +2442095,030000,CSD,Val-Joli, +2442098,030000,CSD,Richmond, +2442100,030000,CSD,Saint-Claude, +2442110,030000,CSD,Cleveland, +2443,030000,CD,, +2443027,030000,CSD,Sherbrooke, +2444,030000,CD,, +2444003,030000,CSD,Saint-Malo, +2444005,030000,CSD,Saint-Venant-de-Paquette, +2444010,030000,CSD,East Hereford, +2444015,030000,CSD,Saint-Herménégilde, +2444023,030000,CSD,Dixville, +2444037,030000,CSD,Coaticook, +2444045,030000,CSD,Barnston-Ouest, +2444050,030000,CSD,Stanstead-Est, +2444055,030000,CSD,Sainte-Edwidge-de-Clifton, +2444060,030000,CSD,Martinville, +2444071,030000,CSD,Compton, +2444080,030000,CSD,Waterville, +2445,030000,CD,, +2445008,030000,CSD,Stanstead, +2445020,030000,CSD,Ogden, +2445025,030000,CSD,Stanstead, +2445030,030000,CSD,Potton, +2445035,030000,CSD,Ayer's Cliff, +2445043,030000,CSD,Hatley, +2445050,030000,CSD,North Hatley, +2445055,030000,CSD,Hatley, +2445060,030000,CSD,Sainte-Catherine-de-Hatley, +2445072,030000,CSD,Magog, +2445080,030000,CSD,Saint-Benoît-du-Lac, +2445085,030000,CSD,Austin, +2445093,030000,CSD,Eastman, +2445095,030000,CSD,Bolton-Est, +2445100,030000,CSD,Saint-Étienne-de-Bolton, +2445105,030000,CSD,Stukely-Sud, +2445115,030000,CSD,Orford, +2446,030000,CD,, +2446005,030000,CSD,Abercorn, +2446010,030000,CSD,Frelighsburg, +2446017,030000,CSD,Saint-Armand, +2446025,030000,CSD,Pike River, +2446030,030000,CSD,Stanbridge Station, +2446035,030000,CSD,Bedford, +2446040,030000,CSD,Bedford, +2446045,030000,CSD,Stanbridge East, +2446050,030000,CSD,Dunham, +2446058,030000,CSD,Sutton, +2446065,030000,CSD,Bolton-Ouest, +2446070,030000,CSD,Brome, +2446075,030000,CSD,Lac-Brome, +2446080,030000,CSD,Cowansville, +2446085,030000,CSD,East Farnham, +2446090,030000,CSD,Brigham, +2446095,030000,CSD,Saint-Ignace-de-Stanbridge, +2446100,030000,CSD,Notre-Dame-de-Stanbridge, +2446105,030000,CSD,Sainte-Sabine, +2446112,030000,CSD,Farnham, +2447,030000,CD,, +2446078,030000,CSD,Bromont, +2447010,030000,CSD,Saint-Alphonse-de-Granby, +2447017,030000,CSD,Granby, +2447025,030000,CSD,Waterloo, +2447030,030000,CSD,Warden, +2447035,030000,CSD,Shefford, +2447040,030000,CSD,Saint-Joachim-de-Shefford, +2447047,030000,CSD,Roxton Pond, +2447055,030000,CSD,Sainte-Cécile-de-Milton, +2448,030000,CD,, +2448005,030000,CSD,Béthanie, +2448010,030000,CSD,Roxton Falls, +2448015,030000,CSD,Roxton, +2448020,030000,CSD,Sainte-Christine, +2448028,030000,CSD,Acton Vale, +2448038,030000,CSD,Upton, +2448045,030000,CSD,Saint-Théodore-d'Acton, +2448050,030000,CSD,Saint-Nazaire-d'Acton, +2449,030000,CD,, +2449005,030000,CSD,Saint-Félix-de-Kingsey, +2449015,030000,CSD,Durham-Sud, +2449020,030000,CSD,Lefebvre, +2449025,030000,CSD,L'Avenir, +2449030,030000,CSD,Saint-Lucien, +2449040,030000,CSD,Wickham, +2449048,030000,CSD,Saint-Germain-de-Grantham, +2449058,030000,CSD,Drummondville, +2449070,030000,CSD,Saint-Cyrille-de-Wendover, +2449075,030000,CSD,Notre-Dame-du-Bon-Conseil, +2449080,030000,CSD,Notre-Dame-du-Bon-Conseil, +2449085,030000,CSD,Sainte-Brigitte-des-Saults, +2449095,030000,CSD,Saint-Majorique-de-Grantham, +2449100,030000,CSD,Saint-Edmond-de-Grantham, +2449105,030000,CSD,Saint-Eugène, +2449113,030000,CSD,Saint-Guillaume, +2449125,030000,CSD,Saint-Bonaventure, +2449130,030000,CSD,Saint-Pie-de-Guire, +2450,030000,CD,, +2450005,030000,CSD,Sainte-Eulalie, +2450013,030000,CSD,Aston-Jonction, +2450023,030000,CSD,Saint-Wenceslas, +2450030,030000,CSD,Saint-Célestin, +2450035,030000,CSD,Saint-Célestin, +2450042,030000,CSD,Saint-Léonard-d'Aston, +2450050,030000,CSD,Sainte-Perpétue, +2450057,030000,CSD,Sainte-Monique, +2450065,030000,CSD,Grand-Saint-Esprit, +2450072,030000,CSD,Nicolet, +2450085,030000,CSD,La Visitation-de-Yamaska, +2450090,030000,CSD,Saint-Zéphirin-de-Courval, +2450095,030000,CSD,Saint-Elphège, +2450100,030000,CSD,Baie-du-Febvre, +2450113,030000,CSD,Pierreville, +2450128,030000,CSD,Saint-François-du-Lac, +2450802,030000,CSD,Odanak, +2451,030000,CD,, +2451008,030000,CSD,Maskinongé, +2451015,032710,CSD,Louiseville, +2451020,030000,CSD,Yamachiche, +2451025,030000,CSD,Saint-Barnabé, +2451030,030000,CSD,Saint-Sévère, +2451035,030000,CSD,Saint-Léon-le-Grand, +2451040,030000,CSD,Sainte-Ursule, +2451045,030000,CSD,Saint-Justin, +2451050,030000,CSD,Saint-Édouard-de-Maskinongé, +2451055,030000,CSD,Sainte-Angèle-de-Prémont, +2451060,030000,CSD,Saint-Paulin, +2451065,030000,CSD,Saint-Alexis-des-Monts, +2451070,030000,CSD,Saint-Mathieu-du-Parc, +2451075,030000,CSD,Saint-Élie-de-Caxton, +2451080,030000,CSD,Charette, +2451085,030000,CSD,Saint-Boniface, +2451090,030000,CSD,Saint-Étienne-des-Grès, +2452,030000,CD,, +2452007,030000,CSD,Lavaltrie, +2452017,030000,CSD,Lanoraie, +2452030,030000,CSD,Sainte-Élisabeth, +2452035,032610,CSD,Berthierville, +2452040,030000,CSD,Sainte-Geneviève-de-Berthier, +2452045,030000,CSD,Saint-Ignace-de-Loyola, +2452050,030000,CSD,La Visitation-de-l'Île-Dupas, +2452055,030000,CSD,Saint-Barthélemy, +2452062,030000,CSD,Saint-Cuthbert, +2452070,030000,CSD,Saint-Norbert, +2452075,030000,CSD,Saint-Cléophas-de-Brandon, +2452080,032610,CSD,Saint-Gabriel, +2452085,030000,CSD,Saint-Gabriel-de-Brandon, +2452090,030000,CSD,Saint-Didace, +2452095,030000,CSD,Mandeville, +2453,030000,CD,, +2453005,030000,CSD,Saint-David, +2453010,030000,CSD,Massueville, +2453015,030000,CSD,Saint-Aimé, +2453020,030000,CSD,Saint-Robert, +2453025,030000,CSD,Sainte-Victoire-de-Sorel, +2453032,030000,CSD,Saint-Ours, +2453040,030000,CSD,Saint-Roch-de-Richelieu, +2453050,030000,CSD,Saint-Joseph-de-Sorel, +2453052,030000,CSD,Sorel-Tracy, +2453065,030000,CSD,Sainte-Anne-de-Sorel, +2453072,030000,CSD,Yamaska, +2453085,030000,CSD,Saint-Gérard-Majella, +2454,030000,CD,, +2454008,030000,CSD,Saint-Pie, +2454017,030000,CSD,Saint-Damase, +2454025,030000,CSD,Sainte-Madeleine, +2454030,030000,CSD,Sainte-Marie-Madeleine, +2454035,030000,CSD,La Présentation, +2454048,030000,CSD,Saint-Hyacinthe, +2454060,030000,CSD,Saint-Dominique, +2454065,030000,CSD,Saint-Valérien-de-Milton, +2454072,030000,CSD,Saint-Liboire, +2454090,030000,CSD,Saint-Simon, +2454095,030000,CSD,Sainte-Hélène-de-Bagot, +2454100,030000,CSD,Saint-Hugues, +2454105,030000,CSD,Saint-Barnabé-Sud, +2454110,030000,CSD,Saint-Jude, +2454115,030000,CSD,Saint-Bernard-de-Michaudville, +2454120,030000,CSD,Saint-Louis, +2454125,030000,CSD,Saint-Marcel-de-Richelieu, +2455,030000,CD,, +2455008,030000,CSD,Ange-Gardien, +2455015,030000,CSD,Saint-Paul-d'Abbotsford, +2455023,030000,CSD,Saint-Césaire, +2455030,030000,CSD,Sainte-Angèle-de-Monnoir, +2455037,030000,CSD,Rougemont, +2455048,030000,CSD,Marieville, +2455057,030000,CSD,Richelieu, +2455065,030000,CSD,Saint-Mathias-sur-Richelieu, +2456,030000,CD,, +2456005,030000,CSD,Venise-en-Québec, +2456010,030000,CSD,Saint-Georges-de-Clarenceville, +2456015,030000,CSD,Noyan, +2456023,030000,CSD,Lacolle, +2456030,030000,CSD,Saint-Valentin, +2456035,030000,CSD,Saint-Paul-de-l'Île-aux-Noix, +2456042,030000,CSD,Henryville, +2456050,030000,CSD,Saint-Sébastien, +2456055,030000,CSD,Saint-Alexandre, +2456060,030000,CSD,Sainte-Anne-de-Sabrevois, +2456065,030000,CSD,Saint-Blaise-sur-Richelieu, +2456083,030000,CSD,Saint-Jean-sur-Richelieu, +2456097,030000,CSD,Mont-Saint-Grégoire, +2456105,030000,CSD,Sainte-Brigide-d'Iberville, +2457,030000,CD,, +2457005,030000,CSD,Chambly, +2457010,030000,CSD,Carignan, +2457020,030000,CSD,Saint-Basile-le-Grand, +2457025,030000,CSD,McMasterville, +2457030,030000,CSD,Otterburn Park, +2457033,030000,CSD,Saint-Jean-Baptiste, +2457035,030000,CSD,Mont-Saint-Hilaire, +2457040,030000,CSD,Beloeil, +2457045,030000,CSD,Saint-Mathieu-de-Beloeil, +2457050,030000,CSD,Saint-Marc-sur-Richelieu, +2457057,030000,CSD,Saint-Charles-sur-Richelieu, +2457068,030000,CSD,Saint-Denis-sur-Richelieu, +2457075,030000,CSD,Saint-Antoine-sur-Richelieu, +2458,030000,CD,, +2458007,030000,CSD,Brossard, +2458012,032823,CSD,Saint-Lambert, +2458033,030000,CSD,Boucherville, +2458037,030000,CSD,Saint-Bruno-de-Montarville, +2458227,032410,CSD,Longueuil, +2459,030000,CD,, +2459010,030000,CSD,Sainte-Julie, +2459015,030000,CSD,Saint-Amable, +2459020,032410,CSD,Varennes, +2459025,030000,CSD,Verchères, +2459030,030000,CSD,Calixa-Lavallée, +2459035,030000,CSD,Contrecoeur, +2460,030000,CD,, +2460005,030000,CSD,Charlemagne, +2460013,030000,CSD,Repentigny, +2460020,030000,CSD,Saint-Sulpice, +2460028,030000,CSD,L'Assomption, +2460035,030000,CSD,L'Épiphanie, +2460040,030000,CSD,L'Épiphanie, +2461,030000,CD,, +2461005,030000,CSD,Saint-Paul, +2461013,030000,CSD,Crabtree, +2461020,030000,CSD,Saint-Pierre, +2461025,032620,CSD,Joliette, +2461027,030000,CSD,Saint-Thomas, +2461030,030000,CSD,Notre-Dame-des-Prairies, +2461035,030000,CSD,Saint-Charles-Borromée, +2461040,030000,CSD,Saint-Ambroise-de-Kildare, +2461045,030000,CSD,Notre-Dame-de-Lourdes, +2461050,030000,CSD,Sainte-Mélanie, +2462,030000,CD,, +2462007,030000,CSD,Saint-Félix-de-Valois, +2462015,030000,CSD,Saint-Jean-de-Matha, +2462020,030000,CSD,Sainte-Béatrix, +2462025,030000,CSD,Saint-Alphonse-Rodriguez, +2462030,030000,CSD,Sainte-Marcelline-de-Kildare, +2462037,032620,CSD,Rawdon, +2462047,030000,CSD,Chertsey, +2462053,030000,CSD,Entrelacs, +2462055,030000,CSD,Notre-Dame-de-la-Merci, +2462060,032120,CSD,Saint-Donat, +2462065,030000,CSD,Saint-Côme, +2462070,030000,CSD,Sainte-Émélie-de-l'Énergie, +2462075,030000,CSD,Saint-Damien, +2462080,030000,CSD,Saint-Zénon, +2462085,032110,CSD,Saint-Michel-des-Saints, +2462802,030000,CSD,Manawan, +2462902,030000,CSD,Lac-Minaki, +2462904,030000,CSD,Lac-Devenyns, +2462906,030000,CSD,Baie-de-la-Bouteille, +2462908,032720,CSD,Lac-Matawin, +2462910,030000,CSD,Lac-Legendre, +2462912,030000,CSD,Saint-Guillaume-Nord, +2462914,030000,CSD,Lac-des-Dix-Milles, +2462916,030000,CSD,Lac-Santé, +2462918,030000,CSD,Baie-Obaoca, +2462919,030000,CSD,Lac-Cabasta, +2462920,030000,CSD,Baie-Atibenne, +2462922,030000,CSD,Lac-du-Taureau, +2463,030000,CD,, +2463005,030000,CSD,Sainte-Marie-Salomé, +2463013,030000,CSD,Saint-Jacques, +2463023,030000,CSD,Saint-Alexis, +2463030,030000,CSD,Saint-Esprit, +2463035,030000,CSD,Saint-Roch-de-l'Achigan, +2463040,030000,CSD,Saint-Roch-Ouest, +2463048,030000,CSD,Saint-Lin - Laurentides, +2463055,030000,CSD,Saint-Calixte, +2463060,030000,CSD,Sainte-Julienne, +2463065,030000,CSD,Saint-Liguori, +2464,030000,CD,, +2464008,030000,CSD,Terrebonne, +2464015,032630,CSD,Mascouche, +2465,030000,CD,, +2465005,032420,CSD,Laval, +2466,032400-032410-032420-032430-032440,CD,, +2466007,032400,CSD,Montréal-Est, +2466023,032400,CSD,Montréal, +2466032,030000,CSD,Westmount, +2466047,032400,CSD,Montréal-Ouest, +2466058,030000,CSD,Côte-Saint-Luc, +2466062,030000,CSD,Hampstead, +2466072,030000,CSD,Mont-Royal, +2466087,031610,CSD,Dorval, +2466092,031610,CSD,L'Île-Dorval, +2466097,030000,CSD,Pointe-Claire, +2466102,030000,CSD,Kirkland, +2466107,030000,CSD,Beaconsfield, +2466112,030000,CSD,Baie-D'Urfé, +2466117,030000,CSD,Sainte-Anne-de-Bellevue, +2466127,030000,CSD,Senneville, +2466142,030000,CSD,Dollard-Des Ormeaux, +2466940,032400,CSD,TNO terrestre du TE de Montréal, +2467,030000,CD,, +2467005,030000,CSD,Saint-Mathieu, +2467010,030000,CSD,Saint-Philippe, +2467015,032440,CSD,La Prairie, +2467020,030000,CSD,Candiac, +2467025,030000,CSD,Delson, +2467030,030000,CSD,Sainte-Catherine, +2467035,030000,CSD,Saint-Constant, +2467040,030000,CSD,Saint-Isidore, +2467045,030000,CSD,Mercier, +2467050,032440,CSD,Châteauguay, +2467055,030000,CSD,Léry, +2467802,030000,CSD,Kahnawake, +2467940,030000,CSD,TNO terrestre de la MRC de Roussillon, +2468,030000,CD,, +2468005,030000,CSD,Saint-Bernard-de-Lacolle, +2468010,032550,CSD,Hemmingford, +2468015,032550,CSD,Hemmingford, +2468020,030000,CSD,Sainte-Clotilde, +2468025,030000,CSD,Saint-Patrice-de-Sherrington, +2468030,030000,CSD,Napierville, +2468035,030000,CSD,Saint-Cyprien-de-Napierville, +2468040,030000,CSD,Saint-Jacques-le-Mineur, +2468045,030000,CSD,Saint-Édouard, +2468050,032110,CSD,Saint-Michel, +2468055,032530,CSD,Saint-Rémi, +2469,030000,CD,, +2469005,030000,CSD,Havelock, +2469010,030000,CSD,Franklin, +2469017,030000,CSD,Saint-Chrysostome, +2469025,030000,CSD,Howick, +2469030,030000,CSD,Très-Saint-Sacrement, +2469037,030000,CSD,Ormstown, +2469045,030000,CSD,Hinchinbrooke, +2469050,030000,CSD,Elgin, +2469055,032560,CSD,Huntingdon, +2469060,030000,CSD,Godmanchester, +2469065,030000,CSD,Sainte-Barbe, +2469070,030000,CSD,Saint-Anicet, +2469075,030000,CSD,Dundee, +2469802,030000,CSD,Akwesasne, +2470,030000,CD,, +2470005,030000,CSD,Saint-Urbain-Premier, +2470012,030000,CSD,Sainte-Martine, +2470022,032540,CSD,Beauharnois, +2470030,030000,CSD,Saint-Étienne-de-Beauharnois, +2470035,030000,CSD,Saint-Louis-de-Gonzague, +2470040,030000,CSD,Saint-Stanislas-de-Kostka, +2470052,032540,CSD,Salaberry-de-Valleyfield, +2471,030000,CD,, +2471005,030000,CSD,Rivière-Beaudette, +2471015,030000,CSD,Saint-Télesphore, +2471020,030000,CSD,Saint-Polycarpe, +2471025,030000,CSD,Saint-Zotique, +2471033,030000,CSD,Les Coteaux, +2471040,030000,CSD,Coteau-du-Lac, +2471045,030000,CSD,Saint-Clet, +2471050,030000,CSD,Les Cèdres, +2471055,030000,CSD,Pointe-des-Cascades, +2471060,030000,CSD,L'Île-Perrot, +2471065,030000,CSD,Notre-Dame-de-l'Île-Perrot, +2471070,030000,CSD,Pincourt, +2471075,032520,CSD,Terrasse-Vaudreuil, +2471083,032520,CSD,Vaudreuil-Dorion, +2471090,032520,CSD,Vaudreuil-sur-le-Lac, +2471095,030000,CSD,L'Île-Cadieux, +2471100,030000,CSD,Hudson, +2471105,030000,CSD,Saint-Lazare, +2471110,030000,CSD,Sainte-Marthe, +2471115,030000,CSD,Sainte-Justine-de-Newton, +2471125,030000,CSD,Très-Saint-Rédempteur, +2471133,030000,CSD,Rigaud, +2471140,030000,CSD,Pointe-Fortune, +2472,030000,CD,, +2472005,032330,CSD,Saint-Eustache, +2472010,030000,CSD,Deux-Montagnes, +2472015,030000,CSD,Sainte-Marthe-sur-le-Lac, +2472020,030000,CSD,Pointe-Calumet, +2472025,030000,CSD,Saint-Joseph-du-Lac, +2472032,030000,CSD,Oka, +2472043,030000,CSD,Saint-Placide, +2472802,030000,CSD,Kanesatake, +2473005,030000,CSD,Boisbriand, +2473,030000,CD,, +2473010,030000,CSD,Sainte-Thérèse, +2473015,030000,CSD,Blainville, +2473020,030000,CSD,Rosemère, +2473025,030000,CSD,Lorraine, +2473030,030000,CSD,Bois-des-Filion, +2473035,030000,CSD,Sainte-Anne-des-Plaines, +2474,030000,CD,, +2474005,030000,CSD,Mirabel, +2475,030000,CD,, +2475005,030000,CSD,Saint-Colomban, +2475017,032310,CSD,Saint-Jérôme, +2475028,030000,CSD,Sainte-Sophie, +2475040,030000,CSD,Prévost, +2475045,030000,CSD,Saint-Hippolyte, +2476,030000,CD,, +2476008,030000,CSD,Saint-André-d'Argenteuil, +2476020,032320,CSD,Lachute, +2476025,030000,CSD,Gore, +2476030,030000,CSD,Mille-Isles, +2476035,030000,CSD,Wentworth, +2476043,030000,CSD,Brownsburg-Chatham, +2476052,030000,CSD,Grenville-sur-la-Rouge, +2476055,030000,CSD,Grenville, +2476065,030000,CSD,Harrington, +2477,030000,CD,, +2477011,030000,CSD,Estérel, +2477012,030000,CSD,Sainte-Marguerite-du-Lac-Masson, +2477022,032220,CSD,Sainte-Adèle, +2477030,030000,CSD,Piedmont, +2477035,030000,CSD,Sainte-Anne-des-Lacs, +2477043,032220,CSD,Saint-Sauveur, +2477050,030000,CSD,Morin-Heights, +2477055,030000,CSD,Lac-des-Seize-Îles, +2477060,030000,CSD,Wentworth-Nord, +2477065,030000,CSD,Saint-Adolphe-d'Howard, +2478,030000,CD,, +2478005,030000,CSD,Val-Morin, +2478010,030000,CSD,Val-David, +2478015,030000,CSD,Lantier, +2478020,030000,CSD,Sainte-Lucie-des-Laurentides, +2478032,032210,CSD,Sainte-Agathe-des-Monts, +2478042,030000,CSD,Ivry-sur-le-Lac, +2478047,030000,CSD,Saint-Faustin - Lac-Carré, +2478050,030000,CSD,Barkmere, +2478055,030000,CSD,Montcalm, +2478060,030000,CSD,Arundel, +2478065,030000,CSD,Huberdeau, +2478070,030000,CSD,Amherst, +2478075,030000,CSD,Brébeuf, +2478095,030000,CSD,Lac-Supérieur, +2478100,030000,CSD,Val-des-Lacs, +2478102,032120-032210,CSD,Mont-Tremblant, +2478115,030000,CSD,La Conception, +2478120,030000,CSD,Labelle, +2478127,030000,CSD,Lac-Tremblant-Nord, +2478130,031820,CSD,La Minerve, +2478802,030000,CSD,Doncaster, +2479,030000,CD,, +2479005,030000,CSD,Notre-Dame-du-Laus, +2479010,030000,CSD,Notre-Dame-de-Pontmain, +2479015,030000,CSD,Lac-du-Cerf, +2479022,030000,CSD,Saint-Aimé-du-Lac-des-Îles, +2479025,030000,CSD,Kiamika, +2479030,030000,CSD,Nominingue, +2479037,031820,CSD,Rivière-Rouge, +2479047,030000,CSD,La Macaza, +2479050,030000,CSD,L'Ascension, +2479060,030000,CSD,Lac-Saguay, +2479065,030000,CSD,Chute-Saint-Philippe, +2479078,030000,CSD,Lac-des-Écorces, +2479088,031800-031810,CSD,Mont-Laurier, +2479097,030000,CSD,Ferme-Neuve, +2479105,030000,CSD,Lac-Saint-Paul, +2479110,030000,CSD,Mont-Saint-Michel, +2479115,030000,CSD,Sainte-Anne-du-Lac, +2479902,030000,CSD,Lac-de-la-Pomme, +2479904,030000,CSD,Lac-Akonapwehikan, +2479906,030000,CSD,Lac-Wagwabika, +2479910,030000,CSD,Lac-Bazinet, +2479912,030000,CSD,Lac-De La Bidière, +2479914,030000,CSD,Lac-Oscar, +2479916,030000,CSD,Lac-de-la-Maison-de-Pierre, +2479920,030000,CSD,Baie-des-Chaloupes, +2479922,030000,CSD,Lac-Douaire, +2479924,030000,CSD,Lac-Ernest, +2479926,030000,CSD,Lac-Marguerite, +2480,030000,CD,, +2480005,030000,CSD,Fassett, +2480010,030000,CSD,Montebello, +2480015,030000,CSD,Notre-Dame-de-Bonsecours, +2480020,030000,CSD,Notre-Dame-de-la-Paix, +2480027,030000,CSD,Saint-André-Avellin, +2480037,031930,CSD,Papineauville, +2480045,030000,CSD,Plaisance, +2480050,030000,CSD,Thurso, +2480055,030000,CSD,Lochaber, +2480060,030000,CSD,Lochaber-Partie-Ouest, +2480065,030000,CSD,Mayo, +2480070,030000,CSD,Saint-Sixte, +2480078,030000,CSD,Ripon, +2480085,030000,CSD,Mulgrave-et-Derry, +2480090,030000,CSD,Montpellier, +2480095,030000,CSD,Lac-Simon, +2480103,031930,CSD,Chénéville, +2480110,030000,CSD,Namur, +2480115,030000,CSD,Boileau, +2480125,030000,CSD,Saint-Émile-de-Suffolk, +2480130,030000,CSD,Lac-des-Plages, +2480135,030000,CSD,Duhamel, +2480140,030000,CSD,Val-des-Bois, +2480145,030000,CSD,Bowman, +2481,030000,CD,, +2481017,031100,CSD,Gatineau, +2482,030000,CD,, +2482005,030000,CSD,L'Ange-Gardien, +2482010,030000,CSD,Notre-Dame-de-la-Salette, +2482015,030000,CSD,Val-des-Monts, +2482020,030000,CSD,Cantley, +2482025,030000,CSD,Chelsea, +2482030,031700,CSD,Pontiac, +2482035,030000,CSD,La Pêche, +2483,030000,CD,, +2483005,030000,CSD,Denholm, +2483010,031910,CSD,Low, +2483015,030000,CSD,Kazabazua, +2483020,030000,CSD,Lac-Sainte-Marie, +2483032,031920,CSD,Gracefield, +2483040,030000,CSD,Cayamant, +2483045,030000,CSD,Blue Sea, +2483050,030000,CSD,Bouchette, +2483055,031100,CSD,Sainte-Thérèse-de-la-Gatineau, +2483060,030000,CSD,Messines, +2483065,031920,CSD,Maniwaki, +2483070,030000,CSD,Déléage, +2483075,030000,CSD,Egan-Sud, +2483085,030000,CSD,Bois-Franc, +2483088,030000,CSD,Montcerf-Lytton, +2483090,030000,CSD,Aumond, +2483095,030000,CSD,Grand-Remous, +2483802,030000,CSD,Kitigan Zibi, +2483804,030000,CSD,Lac-Rapide, +2483902,030000,CSD,Lac-Pythonga, +2483904,030000,CSD,Cascades-Malignes, +2483906,030000,CSD,Lac-Lenôtre, +2483908,030000,CSD,Lac-Moselle, +2483912,030000,CSD,Dépôt-Échouani, +2484,030000,CD,, +2484005,030000,CSD,Bristol, +2484010,031720,CSD,Shawville, +2484015,030000,CSD,Clarendon, +2484020,030000,CSD,Portage-du-Fort, +2484025,030000,CSD,Bryson, +2484030,030000,CSD,Campbell's Bay, +2484035,030000,CSD,L'Île-du-Grand-Calumet, +2484040,030000,CSD,Litchfield, +2484045,030000,CSD,Thorne, +2484050,030000,CSD,Alleyn-et-Cawood, +2484055,030000,CSD,Otter Lake, +2484060,030000,CSD,Fort-Coulonge, +2484065,030000,CSD,Mansfield-et-Pontefract, +2484070,030000,CSD,Waltham, +2484082,030000,CSD,L'Isle-aux-Allumettes, +2484090,030000,CSD,Chichester, +2484095,030000,CSD,Sheenboro, +2484100,031710,CSD,Rapides-des-Joachims, +2484902,030000,CSD,Lac-Nilgaut, +2485,030000,CD,, +2485005,031520,CSD,Témiscaming, +2485010,030000,CSD,Kipawa, +2485015,030000,CSD,Saint-Édouard-de-Fabre, +2485020,030000,CSD,Béarn, +2485025,031510,CSD,Ville-Marie, +2485030,030000,CSD,Duhamel-Ouest, +2485037,030000,CSD,Lorrainville, +2485045,030000,CSD,Saint-Bruno-de-Guigues, +2485050,030000,CSD,Laverlochère, +2485055,030000,CSD,Fugèreville, +2485060,030000,CSD,Latulipe-et-Gaboury, +2485065,030000,CSD,Belleterre, +2485070,030000,CSD,Laforce, +2485075,030000,CSD,Moffet, +2485080,030000,CSD,Angliers, +2485085,030000,CSD,Saint-Eugène-de-Guigues, +2485090,030000,CSD,Notre-Dame-du-Nord, +2485095,030000,CSD,Guérin, +2485100,030000,CSD,Nédélec, +2485105,030000,CSD,Rémigny, +2485802,030000,CSD,Kebaowek, +2485803,030000,CSD,Hunter's Point, +2485804,030000,CSD,Winneway, +2485806,030000,CSD,Timiskaming, +2485905,030000,CSD,Laniel, +2485907,031500,CSD,Les Lacs-du-Témiscamingue, +2486,030000,CD,, +2486042,031450,CSD,Rouyn-Noranda, +2487,030000,CD,, +2487005,030000,CSD,Duparquet, +2487010,030000,CSD,Rapide-Danseur, +2487015,030000,CSD,Roquemaure, +2487020,030000,CSD,Gallichan, +2487025,030000,CSD,Palmarolle, +2487030,030000,CSD,Sainte-Germaine-Boulé, +2487035,030000,CSD,Poularies, +2487042,030000,CSD,Taschereau, +2487050,030000,CSD,Authier, +2487058,030000,CSD,Macamic, +2487070,030000,CSD,Sainte-Hélène-de-Mancebourg, +2487075,030000,CSD,Clerval, +2487080,030000,CSD,La Reine, +2487085,030000,CSD,Dupuy, +2487090,031410,CSD,La Sarre, +2487095,030000,CSD,Chazel, +2487100,030000,CSD,Authier-Nord, +2487105,030000,CSD,Val-Saint-Gilles, +2487110,030000,CSD,Clermont, +2487115,030000,CSD,Normétal, +2487120,032823,CSD,Saint-Lambert, +2487902,030000,CSD,Lac-Duparquet, +2487904,030000,CSD,Rivière-Ojima, +2488,030000,CD,, +2488005,030000,CSD,Champneuf, +2488010,030000,CSD,Rochebaucourt, +2488015,030000,CSD,La Morandière, +2488022,030000,CSD,Barraute, +2488030,030000,CSD,La Corne, +2488035,030000,CSD,Landrienne, +2488040,030000,CSD,Saint-Marc-de-Figuery, +2488045,030000,CSD,La Motte, +2488050,030000,CSD,Saint-Mathieu-d'Harricana, +2488055,031420,CSD,Amos, +2488060,030000,CSD,Saint-Félix-de-Dalquier, +2488065,030000,CSD,Saint-Dominique-du-Rosaire, +2488070,030000,CSD,Berry, +2488075,030000,CSD,Trécesson, +2488080,030000,CSD,Launay, +2488085,030000,CSD,Sainte-Gertrude-Manneville, +2488090,030000,CSD,Preissac, +2488802,030000,CSD,Pikogan, +2488902,030000,CSD,Lac-Despinassy, +2488904,030000,CSD,Lac-Chicobi, +2489,030000,CD,, +2489008,031470,CSD,Val-d'Or, +2489010,030000,CSD,Rivière-Héva, +2489015,031460,CSD,Malartic, +2489040,031440,CSD,Senneterre, +2489045,031440,CSD,Senneterre, +2489050,030000,CSD,Belcourt, +2489802,030000,CSD,Kitcisakik, +2489804,030000,CSD,Lac-Simon, +2489902,030000,CSD,Matchi-Manitou, +2489908,030000,CSD,Lac-Metei, +2489910,030000,CSD,Réservoir-Dozois, +2489912,030000,CSD,Lac-Granet, +2490,030000,CD,, +2490012,030000,CSD,La Tuque, +2490017,030000,CSD,La Bostonnais, +2490027,030000,CSD,Lac-Édouard, +2490801,030000,CSD,Coucoucache, +2490802,030000,CSD,Wemotaci, +2490804,030000,CSD,Obedjiwan, +2491,030000,CD,, +2491005,030000,CSD,Lac-Bouchette, +2491010,030000,CSD,Saint-André-du-Lac-Saint-Jean, +2491015,030000,CSD,Saint-François-de-Sales, +2491020,030000,CSD,Chambord, +2491025,034340,CSD,Roberval, +2491030,030000,CSD,Sainte-Hedwidge, +2491035,030000,CSD,Saint-Prime, +2491042,034340,CSD,Saint-Félicien, +2491050,030000,CSD,La Doré, +2491802,030000,CSD,Mashteuiatsh, +2491902,034310,CSD,Lac-Ashuapmushuan, +2492,030000,CD,, +2492005,030000,CSD,Saint-Augustin, +2492010,034320,CSD,Péribonka, +2492015,030000,CSD,Sainte-Jeanne-d'Arc, +2492022,030000,CSD,Dolbeau-Mistassini, +2492030,030000,CSD,Albanel, +2492040,034320,CSD,Normandin, +2492045,030000,CSD,Saint-Thomas-Didyme, +2492050,030000,CSD,Saint-Edmond-les-Plaines, +2492055,030000,CSD,Girardville, +2492060,030000,CSD,Notre-Dame-de-Lorette, +2492065,030000,CSD,Saint-Eugène-d'Argentenay, +2492070,030000,CSD,Saint-Stanislas, +2492902,030000,CSD,Passes-Dangereuses, +2492904,030000,CSD,Rivière-Mistassini, +2493,030000,CD,, +2493005,034330,CSD,Desbiens, +2493012,030000,CSD,Métabetchouan - Lac-à-la-Croix, +2493020,030000,CSD,Hébertville, +2493025,030000,CSD,Hébertville-Station, +2493030,030000,CSD,Saint-Bruno, +2493035,030000,CSD,Saint-Gédéon, +2493042,034330,CSD,Alma, +2493045,030000,CSD,Saint-Nazaire, +2493055,030000,CSD,Labrecque, +2493060,030000,CSD,Lamarche, +2493065,030000,CSD,L'Ascension-de-Notre-Seigneur, +2493070,030000,CSD,Saint-Henri-de-Taillon, +2493075,030000,CSD,Sainte-Monique, +2493080,030000,CSD,Saint-Ludger-de-Milot, +2493902,030000,CSD,Mont-Apica, +2493904,030000,CSD,Lac-Moncouche, +2493906,030000,CSD,Lac-Achouakan, +2493908,030000,CSD,Belle-Rivière, +2494,030000,CD,, +2494068,030000,CSD,Saguenay, +2494205,030000,CSD,Petit-Saguenay, +2494210,030000,CSD,L'Anse-Saint-Jean, +2494215,030000,CSD,Rivière-Éternité, +2494220,030000,CSD,Ferland-et-Boilleau, +2494225,030000,CSD,Saint-Félix-d'Otis, +2494230,030000,CSD,Sainte-Rose-du-Nord, +2494235,030000,CSD,Saint-Fulgence, +2494240,030000,CSD,Saint-Honoré, +2494245,030000,CSD,Saint-David-de-Falardeau, +2494250,030000,CSD,Bégin, +2494255,030000,CSD,Saint-Ambroise, +2494260,030000,CSD,Saint-Charles-de-Bourget, +2494265,030000,CSD,Larouche, +2494926,030000,CSD,Lalemant, +2494928,030000,CSD,Lac-Ministuk, +2494930,030000,CSD,Mont-Valin, +2495,030000,CD,, +2495005,030000,CSD,Tadoussac, +2495010,030000,CSD,Sacré-Coeur, +2495018,030000,CSD,Les Bergeronnes, +2495025,030000,CSD,Les Escoumins, +2495032,030000,CSD,Longue-Rive, +2495040,032811,CSD,Portneuf-sur-Mer, +2495045,030000,CSD,Forestville, +2495050,030000,CSD,Colombier, +2495902,030000,CSD,Lac-au-Brochet, +2496,030000,CD,, +2496005,030000,CSD,Baie-Trinité, +2496010,030000,CSD,Godbout, +2496015,030000,CSD,Franquelin, +2496020,030000,CSD,Baie-Comeau, +2496025,030000,CSD,Pointe-Lebel, +2496030,030000,CSD,Pointe-aux-Outardes, +2496035,030000,CSD,Chute-aux-Outardes, +2496040,030000,CSD,Ragueneau, +2496802,030000,CSD,Pessamit, +2496902,030000,CSD,Rivière-aux-Outardes, +2497,030000,CD,, +2497007,030000,CSD,Sept-Îles, +2497022,030000,CSD,Port-Cartier, +2497035,033400,CSD,Fermont, +2497040,033300,CSD,Schefferville, +does not exist ,030000,CSD,, +2497804,030000,CSD,Maliotenam, +2497806,030000,CSD,Kawawachikamach, +2497808,030000,CSD,Matimekosh, +2497810,030000,CSD,Lac-John, +2497902,030000,CSD,Rivière-Nipissis, +2497904,030000,CSD,Lac-Walker, +2497906,030000,CSD,Rivière-Mouchalagane, +2497908,030000,CSD,Caniapiscau, +2497912,030000,CSD,Lac-Juillet, +2497914,030000,CSD,Lac-Vacher, +2498,036600,CD,, +2498005,036600,CSD,Blanc-Sablon, +2498010,030000,CSD,Bonne-Espérance, +2498012,030000,CSD,Saint-Augustin, +2498014,030000,CSD,Gros-Mécatina, +2498015,030000,CSD,Côte-Nord-du-Golfe-du-Saint-Laurent, +2498020,036700,CSD,L'Île-d'Anticosti, +2498025,036400,CSD,Natashquan, +2498030,030000,CSD,Aguanish, +2498035,030000,CSD,Baie-Johan-Beetz, +2498040,030000,CSD,Havre-Saint-Pierre, +2498045,030000,CSD,Longue-Pointe-de-Mingan, +2498050,030000,CSD,Rivière-Saint-Jean, +2498055,030000,CSD,Rivière-au-Tonnerre, +2498802,030000,CSD,Pakuashipi, +2498804,030000,CSD,La Romaine, +2498808,030000,CSD,Mingan, +2498904,030000,CSD,Lac-Jérôme, +2498912,030000,CSD,Petit-Mécatina, +2499,030000,CD,, +2499005,031430,CSD,Lebel-sur-Quévillon, +2499010,030000,CSD,Waswanipi, +2499015,031300,CSD,Matagami, +2499020,030000,CSD,Chapais, +2499025,034100,CSD,Chibougamau, +2499030,030000,CSD,Mistissini, +2499035,031200,CSD,Waskaganish, +2499040,030000,CSD,Nemaska, +2499045,030000,CSD,Eastmain, +2499050,030000,CSD,Wemindji, +2499055,030000,CSD,Chisasibi, +2499060,033100,CSD,Baie-James, +2499065,030000,CSD,Kawawachikamach, +2499070,030000,CSD,Whapmagoostui, +2499075,038600,CSD,Kuujjuarapik, +2499080,038500,CSD,Umiujaq, +2499085,038400,CSD,Inukjuak, +2499090,039800,CSD,Kangiqsualujjuaq, +2499095,030000,CSD,Kuujjuaq, +2499100,039600,CSD,Tasiujaq, +2499105,039500,CSD,Aupaluk, +2499110,039400,CSD,Kangirsuk, +2499115,039300,CSD,Quaqtaq, +2499120,038300,CSD,Puvirnituq, +2499125,038200,CSD,Akulivik, +2499130,039200,CSD,Kangiqsujuaq, +2499135,039100,CSD,Salluit, +2499140,038100,CSD,Ivujivik, +2499802,030000,CSD,Waswanipi, +2499804,030000,CSD,Mistissini, +2499806,031200,CSD,Waskaganish, +2499808,030000,CSD,Nemaska, +2499810,030000,CSD,Eastmain, +2499812,030000,CSD,Wemindji, +2499814,030000,CSD,Chisasibi, +2499816,030000,CSD,Whapmagoostui, +2499818,030000,CSD,Oujé-Bougoumou, +2499875,030000,CSD,Kiggaluk, +2499877,038600,CSD,Kuujjuarapik, +2499878,038500,CSD,Umiujaq, +2499879,038400,CSD,Inukjuak, +2499883,038200,CSD,Akulivik, +2499887,039100,CSD,Salluit, +2499888,039200,CSD,Kangiqsujuaq, +2499891,039500,CSD,Aupaluk, +2499892,039600,CSD,Tasiujaq, +2499893,039700,CSD,Kuujjuaq, +2499894,039800,CSD,Kangiqsualujjuaq, +2499896,030000,CSD,Killiniq, +2499902,030000,CSD,Rivière-Koksoak, +2499904,030000,CSD,Baie-d'Hudson, +13,010000,PT,New Brunswick, +1301,015500,CD,Saint John, +1301002,010000,CSD,St. Martins, +1301006,015500,CSD,Saint John, +1301016,010000,CSD,Musquash, +1301001,010000,CSD,Saint Martins, +1301004,010000,CSD,Simonds, +1302,015600-015700,CD,Charlotte, +1302044,010000,CSD,Dumbarton, +1302012,010000,CSD,Blacks Harbour, +1302006,010000,CSD,West Isles, +1302008,010000,CSD,Lepreau, +1302039,010000,CSD,Saint James, +1302042,010000,CSD,Saint David, +1302028,010000,CSD,Saint Croix, +1302034,015600,CSD,Saint Stephen, +1302024,010000,CSD,Saint Andrews, +1302031,010000,CSD,Dufferin, +1302001,015700,CSD,Grand Manan, +1302016,010000,CSD,Saint George, +1302021,010000,CSD,Saint Patrick, +1302004,010000,CSD,Campobello, +1302052,015700,CSD,Grand Manan, +1302014,010000,CSD,Clarendon, +1302037,015600,CSD,St. Stephen, +1302026,010000,CSD,Saint Andrews, +1302018,010000,CSD,St. George, +1302011,010000,CSD,Pennfield, +1303,015200,CD,Sunbury, +1303001,010000,CSD,Blissville, +1303006,010000,CSD,Fredericton Junction, +1303016,010000,CSD,Maugerville, +1303008,010000,CSD,Lincoln, +1303018,010000,CSD,Northfield, +1303012,015200,CSD,Oromocto, +1303004,010000,CSD,Gladstone, +1303014,010000,CSD,Sheffield, +1303013,015200,CSD,Oromocto 26, +1303011,010000,CSD,Burton, +1303005,010000,CSD,Tracy, +1304,010000,,CD, +1304018,010000,CSD,Waterborough, +1304011,010000,CSD,Cambridge, +1304022,010000,CSD,Minto, +1304013,010000,CSD,Cambridge-Narrows, +1304021,010000,CSD,Canning, +1304025,010000,CSD,Chipman, +1304014,010000,CSD,Johnston, +1304004,010000,CSD,Gagetown, +1304016,010000,CSD,Brunswick, +1304008,010000,CSD,Wickham, +1304005,010000,CSD,Gagetown, +1304006,010000,CSD,Hampstead, +1304024,010000,CSD,Chipman, +1305,015400,CD,Kings, +1304001,010000,CSD,Petersville, +1305034,010000,CSD,Springfield, +1305004,010000,CSD,Upham, +1305024,010000,CSD,Waterford, +1305023,015400,CSD,Sussex Corner, +1305018,010000,CSD,Norton, +1305057,010000,CSD,Quispamsis, +1305008,010000,CSD,Rothesay, +1305011,010000,CSD,Westfield, +1305015,010000,CSD,Grand Bay-Westfield, +1305028,010000,CSD,Havelock, +1305021,015400,CSD,Sussex, +1305045,010000,CSD,Rothesay, +1305031,010000,CSD,Studholm, +1305036,010000,CSD,Kars, +1305038,010000,CSD,Greenwich, +1305014,010000,CSD,Kingston, +1305007,010000,CSD,Hampton, +1305001,010000,CSD,Hammond, +1305006,010000,CSD,Hampton, +1305026,010000,CSD,Cardwell, +1305022,015400,CSD,Sussex, +1305016,010000,CSD,Norton, +1306,010000,CD,Albert, +1306008,010000,CSD,Elgin, +1306020,010000,CSD,Riverview, +1306004,010000,CSD,Harvey, +1306006,010000,CSD,Alma, +1306007,010000,CSD,Alma, +1306014,010000,CSD,Coverdale, +1306011,010000,CSD,Hillsborough, +1306025,010000,CSD,Hillsborough, +1306003,010000,CSD,Riverside-Albert, +1306001,010000,CSD,Hopewell, +1307,010000,CD,Westmorland, +1307016,010000,CSD,Shediac, +1307008,010000,CSD,Sackville, +1307022,016400,CSD,Moncton, +1307013,010000,CSD,Memramcook, +1307019,016400,CSD,Moncton, +1307009,010000,CSD,Sackville, +1307007,010000,CSD,Cap-Pelé, +1307001,010000,CSD,Westmorland, +1307045,010000,CSD,Dieppe, +1307011,010000,CSD,Dorchester, +1307029,010000,CSD,Petitcodiac, +1307014,010000,CSD,Fort Folly 1, +1307005,010000,CSD,Beaubassin East / Beaubassin-est, +1307024,010000,CSD,Salisbury, +1307002,010000,CSD,Port Elgin, +1307052,010000,CSD,Shediac, +1307012,010000,CSD,Dorchester, +1307004,010000,CSD,Botsford, +1307028,010000,CSD,Salisbury, +1308,016300,CD,Kent, +1308017,010000,CSD,Rexton, +1308012,010000,CSD,Huskisson, +1308008,010000,CSD,Saint-Paul, +1308021,010000,CSD,Saint-Louis, +1308020,010000,CSD,Indian Island 28, +1308003,010000,CSD,Buctouche 16, +1308014,010000,CSD,Weldford, +1308007,010000,CSD,Saint-Antoine, +1308026,016100,CSD,Carleton, +1308016,010000,CSD,Richibucto, +1308024,010000,CSD,Acadieville, +1308022,010000,CSD,Saint-Louis de Kent, +1308001,010000,CSD,Dundas, +1308015,010000,CSD,Richibucto 15, +1308010,010000,CSD,Harcourt, +1308019,010000,CSD,Saint-Charles, +1308006,010000,CSD,Saint Mary, +1308018,010000,CSD,Richibucto, +1308004,010000,CSD,Wellington, +1308005,010000,CSD,Bouctouche, +1309,010000,CD,Northumberland, +1309044,010000,CSD,Burnt Church 14, +1309031,010000,CSD,Newcastle, +1309021,010000,CSD,Blissfield, +1309006,010000,CSD,Chatham, +1309018,016200,CSD,Blackville, +1309011,010000,CSD,Derby, +1309027,017600,CSD,Upper Miramichi, +1309022,016200,CSD,Doaktown, +1309036,010000,CSD,Alnwick, +1309026,010000,CSD,Southesk, +1309023,010000,CSD,Red Bank 4, +1309017,010000,CSD,Rogersville, +1309019,016200,CSD,Blackville, +1309001,010000,CSD,Hardwicke, +1309004,010000,CSD,Glenelg, +1309034,010000,CSD,Big Hole Tract 8 (South Half), +1309047,010000,CSD,Tabusintac 9, +1309014,010000,CSD,Nelson, +1309038,010000,CSD,Neguac, +1309028,010000,CSD,Northesk, +1309050,017600,CSD,Miramichi, +1309035,010000,CSD,Eel Ground 2, +1309016,010000,CSD,Rogersville, +1310,015100,CD,York, +1310005,010000,CSD,Harvey, +1310006,010000,CSD,McAdam, +1310013,010000,CSD,Meductic, +1310011,010000,CSD,Canterbury, +1310036,016200,CSD,Stanley, +1310024,010000,CSD,Southampton, +1310032,015100,CSD,Fredericton, +1310021,010000,CSD,Queensbury, +1310034,010000,CSD,Devon 30, +1310001,010000,CSD,New Maryland, +1310031,010000,CSD,Saint Marys, +1310037,016200,CSD,Stanley, +1310012,010000,CSD,Canterbury, +1310025,010000,CSD,Millville, +1310026,010000,CSD,Bright, +1310018,010000,CSD,Kingsclear, +1310002,010000,CSD,New Maryland, +1310016,010000,CSD,Prince William, +1310007,010000,CSD,McAdam, +1310014,010000,CSD,Dumfries, +1310054,010000,CSD,Nackawic, +1310028,010000,CSD,Douglas, +1310019,010000,CSD,Kingsclear 6, +1310004,010000,CSD,Manners Sutton, +1310008,010000,CSD,North Lake, +1311,016100,CD,Carleton, +1311018,010000,CSD,Wilmot, +1311019,010000,CSD,Centreville, +1311005,016100,CSD,Woodstock 23, +1311024,010000,CSD,Peel, +1311012,010000,CSD,Hartland, +1311008,010000,CSD,Northampton, +1311026,010000,CSD,Aberdeen, +1311004,016100,CSD,Woodstock, +1311001,010000,CSD,Richmond, +1311028,016300,CSD,Kent, +1311011,010000,CSD,Brighton, +1311031,010000,CSD,Wicklow, +1311027,010000,CSD,Florenceville-Bristol, +1311014,010000,CSD,Wakefield, +1311030,010000,CSD,Bath, +1311021,010000,CSD,Simonds, +1311006,016100,CSD,Woodstock, +1312,017300,CD,Victoria, +1312002,010000,CSD,Aroostook, +1312023,010000,CSD,Drummond, +1312019,017300,CSD,Grand Falls / Grand-Sault, +1312008,010000,CSD,Gordon, +1312006,010000,CSD,Perth-Andover, +1312016,017300,CSD,Grand Falls, +1312021,010000,CSD,Drummond, +1312011,010000,CSD,Lorne, +1312001,010000,CSD,Andover, +1312014,010000,CSD,Denmark, +1312009,010000,CSD,Plaster Rock, +1312007,010000,CSD,Tobique 20, +1312004,010000,CSD,Perth, +1313,017100,CD,Madawaska, +1313022,010000,CSD,Saint-Joseph, +1313004,010000,CSD,Saint-Léonard, +1313012,010000,CSD,Sainte-Anne-de-Madawaska, +1313039,010000,CSD,Clair, +1313024,010000,CSD,Saint-Jacques, +1313028,017100,CSD,Madawaska, +1313027,017100,CSD,Edmundston, +1313033,010000,CSD,St. Hilaire, +1313038,010000,CSD,Clair, +1313042,010000,CSD,Saint-François de Madawaska, +1313036,010000,CSD,Lac-Baker, +1313020,010000,CSD,St. Basile 10, +1313032,010000,CSD,Saint-Hilaire, +1313008,010000,CSD,Notre-Dame-de-Lourdes, +1313006,010000,CSD,St. Leonard, +1313041,010000,CSD,Saint-François, +1313001,010000,CSD,Saint-André, +1313011,010000,CSD,Sainte-Anne, +1313034,010000,CSD,Baker Brook, +1313002,010000,CSD,Saint-André, +1313037,010000,CSD,Lac Baker, +1313015,010000,CSD,Rivière-Verte, +1313035,010000,CSD,Baker-Brook, +1313018,010000,CSD,Saint-Basile, +1313014,010000,CSD,Rivière-Verte, +1314,017210-017220,CD,Restigouche, +1314015,010000,CSD,Tide Head, +1314017,010000,CSD,Dalhousie, +1314021,010000,CSD,Saint-Quentin, +1314001,010000,CSD,Durham, +1314004,010000,CSD,Charlo, +1314012,010000,CSD,Addington, +1314019,010000,CSD,Kedgwick, +1314014,017200-017220,CSD,Campbellton, +1314025,010000,CSD,Belledune, +1314016,010000,CSD,Eldon, +1314010,010000,CSD,Eel River 3, +1314005,010000,CSD,Balmoral, +1314008,010000,CSD,Dalhousie, +1314011,010000,CSD,Eel River Crossing, +1314022,010000,CSD,Saint-Quentin, +1314006,010000,CSD,Balmoral, +1314026,010000,CSD,Indian Ranch, +1314013,010000,CSD,Atholville, +1314003,010000,CSD,Colborne, +1314018,010000,CSD,Grimmer, +1315,010000,CD,Gloucester, +1315029,010000,CSD,Shippagan, +1315026,010000,CSD,Caraquet, +1315038,010000,CSD,Grande-Anse, +1315008,017500,CSD,Bathurst, +1315006,010000,CSD,Allardville, +1315013,010000,CSD,Pointe-Verte, +1315032,010000,CSD,Lamèque, +1315012,010000,CSD,Beresford, +1315036,010000,CSD,Bertrand, +1315022,010000,CSD,Saint-Isidore, +1315033,010000,CSD,Sainte-Marie - Saint-Raphaël, +1315028,010000,CSD,Caraquet, +1315024,010000,CSD,Inkerman, +1315037,010000,CSD,Nigadoo, +1315011,017500,CSD,Bathurst, +1315027,010000,CSD,Bas-Caraquet, +1315001,010000,CSD,Saumarez, +1315014,010000,CSD,Petit-Rocher, +1315010,010000,CSD,Pabineau 11, +1315040,010000,CSD,Maisonnette, +1315017,010000,CSD,Saint-Léolin, +1315021,010000,CSD,Saint-Isidore, +1315015,010000,CSD,Beresford, +1315016,010000,CSD,New Bandon, +1315030,010000,CSD,Le Goulet, +1315019,010000,CSD,Paquetville, +1315020,010000,CSD,Paquetville, +1315003,010000,CSD,Tracadie-Sheila, +1315031,010000,CSD,Shippagan, +12,010000,PT,Nova Scotia, +1201,011600,CD,Shelburne, +1201009,010000,CSD,Lockeport, +1201006,011600,CSD,Shelburne, +1201004,010000,CSD,Clark's Harbour, +1201001,010000,CSD,Barrington, +1201008,011600,CSD,Shelburne, +1202,011700,CD,Yarmouth, +1202006,011700,CSD,Yarmouth, +1202001,010000,CSD,Argyle, +1202004,011700,CSD,Yarmouth, +1202040,011700,CSD,Yarmouth 33, +1203,011300,CD,Digby, +1203006,011300,CSD,Digby, +1203009,010000,CSD,Bear River (Part) 6, +1203004,011300,CSD,Digby, +1203001,010000,CSD,Clare, +1204,011500,CD,Queens, +1204010,011500,CSD,Queens, +1204009,010000,CSD,Ponhook Lake 10, +1204015,010000,CSD,Wildcat 12, +1205,011200,CD,Annapolis, +1205009,011200,CSD,"Annapolis, Subd. B", +1205002,010000,CSD,Bear River (Part) 6, +1205006,010000,CSD,Bear River 6B, +1205014,011200,CSD,"Annapolis, Subd. C", +1205016,010000,CSD,Middleton, +1205004,011200,CSD,"Annapolis, Subd. A", +1205012,010000,CSD,Bridgetown, +1205008,011200,CSD,Annapolis Royal, +1205001,011200,CSD,"Annapolis, Subd. D", +1206,011400,CD,Lunenburg, +1206016,010000,CSD,New Ross 20, +1206004,010000,CSD,Bridgewater, +1206008,010000,CSD,Mahone Bay, +1206014,010000,CSD,Pennal 19, +1206009,010000,CSD,Chester, +1206001,011400,CSD,Lunenburg, +1206006,011400,CSD,Lunenburg, +1206011,010000,CSD,Gold River 21, +1207,011100,CD,Kings, +1207012,010000,CSD,Kentville, +1207024,010000,CSD,Wolfville, +1207021,011100,CSD,"Kings, Subd. D", +1207027,010000,CSD,Glooscap 35, +1207001,011100,CSD,"Kings, Subd. A", +1207016,011100,CSD,"Kings, Subd. B", +1207002,010000,CSD,Cambridge 32, +1207004,010000,CSD,Berwick, +1207011,011100,CSD,"Kings, Subd. C", +1208,012500,CD,Hants, +1208001,012500,CSD,West Hants, +1208008,012500,CSD,East Hants, +1208014,010000,CSD,Indian Brook 14, +1208002,010000,CSD,Windsor, +1208004,010000,CSD,Hantsport, +1209,012700-012800,CD,Halifax, +1209038,010000,CSD,Sheet Harbour 36, +1209029,010000,CSD,Shubenacadie 13, +1209037,010000,CSD,Beaver Lake 17, +1209019,010000,CSD,Cole Harbour 30, +1209034,012700-012800,CSD,Halifax, +1210,012300-012400-012600,CD,Colchester, +1210006,010000,CSD,Truro, +1210003,010000,CSD,Millbrook 27, +1210002,010000,CSD,Stewiacke, +1210008,012300-012400-012600,CSD,"Colchester, Subd. B", +1210001,012300-012400-012600,CSD,"Colchester, Subd. C", +1210012,012300-012400-012600,CSD,"Colchester, Subd. A", +1211,012100-012200,CD,Cumberland, +1211009,012100-012200,CSD,"Cumberland, Subd. C", +1211006,012100-012200,CSD,"Cumberland, Subd. B", +1211014,012100-012200,CSD,"Cumberland, Subd. D", +1211011,010000,CSD,Amherst, +1211002,010000,CSD,Parrsboro, +1211012,010000,CSD,Oxford, +1211001,012100-012200,CSD,"Cumberland, Subd. A", +1211008,010000,CSD,Springhill, +1212,013100,CD,Pictou, +1212023,010000,CSD,Merigomish Harbour 31, +1212016,010000,CSD,Trenton, +1212001,013100,CSD,"Pictou, Subd. A", +1212009,010000,CSD,Stellarton, +1212019,010000,CSD,Fisher's Grant 24, +1212006,013100,CSD,"Pictou, Subd. B", +1212014,010000,CSD,New Glasgow, +1212011,013100,CSD,"Pictou, Subd. C", +1212008,010000,CSD,Westville, +1212004,013100,CSD,Pictou, +1213,013200,CD,Guysborough, +1213004,013200,CSD,Guysborough, +1213008,010000,CSD,Mulgrave, +1213001,010000,CSD,St. Mary's, +1213006,010000,CSD,Canso, +1214,013300,CD,Antigonish, +1214001,013300,CSD,"Antigonish, Subd. A", +1214006,013300,CSD,"Antigonish, Subd. B", +1214002,013300,CSD,Antigonish, +1214010,010000,CSD,Pomquet And Afton 23, +1215,014200-014300,CD,Inverness, +1215002,010000,CSD,Port Hawkesbury, +1215001,014200-014300,CSD,"Inverness, Subd. C", +1215006,014200-014300,CSD,"Inverness, Subd. B", +1215011,014200-014300,CSD,"Inverness, Subd. A", +1215008,010000,CSD,Whycocomagh 2, +1216,014100,CD,Richmond, +1216011,014100,CSD,"Richmond, Subd. B", +1216014,010000,CSD,Chapel Island 5, +1216001,014100,CSD,"Richmond, Subd. C", +1216006,014100,CSD,"Richmond, Subd. A", +1217,014500,CD,Cape Breton, +1217020,010000,CSD,Eskasoni 3, +1217008,010000,CSD,Membertou 28B, +1217030,014500,CSD,Cape Breton, +1218,014400,CD,Victoria, +1218003,010000,CSD,Wagmatcook 1, +1218006,014400,CSD,"Victoria, Subd. A", +1218001,014400,CSD,"Victoria, Subd. B", +11,010000,PT,Prince Edward Island, +1101,018100,CD,Kings, +1101032,018100,CSD,Lot 44, +1101031,018100,CSD,Lot 43, +1101019,018100,CSD,Lot 53, +1101038,018100,CSD,Lot 46, +1101016,018100,CSD,Lot 52, +1101011,018100,CSD,Lot 66, +1101024,018100,CSD,Georgetown, +1101051,018100,CSD,Lot 38, +1101039,018100,CSD,Lot 47, +1101041,018100,CSD,Lot 42, +1101022,018100,CSD,"Kings, Royalty", +1101006,018100,CSD,Lot 63, +1101021,018100,CSD,Cardigan, +1101048,018100,CSD,Morell, +1101029,018100,CSD,Lot 56, +1101046,018100,CSD,Lot 40, +1101028,018100,CSD,Lot 55, +1101014,018100,CSD,Lot 51, +1101008,018100,CSD,Lot 61, +1101004,018100,CSD,Murray River, +1101036,018100,CSD,Souris, +1101044,018100,CSD,St. Peters Bay, +1101049,018100,CSD,Lot 39, +1101050,018100,CSD,Morell 2, +1101034,018100,CSD,Lot 45, +1101009,018100,CSD,Lot 59, +1101018,018100,CSD,Montague, +1101002,018100,CSD,Murray Harbour, +1101042,018100,CSD,Lot 41, +1101026,018100,CSD,Lot 54, +1101001,018100,CSD,Lot 64, +1102,018300,CD,Queens, +1102044,018300,CSD,Lot 24, +1102008,018300,CSD,Lot 57, +1102057,018300,CSD,Scotchfort 4, +1102040,018300,CSD,Miltonvale Park, +1102031,018300,CSD,Lot 29, +1102030,018300,CSD,Rocky Point 3, +1102043,018300,CSD,Hunter River, +1102049,018300,CSD,Lot 33, +1102050,018300,CSD,Union Road, +1102058,018300,CSD,Lot 37, +1102042,018300,CSD,Lot 23, +1102009,018300,CSD,Lot 50, +1102065,018300,CSD,Winsloe South, +1102080,018300,CSD,Stratford, +1102006,018300,CSD,Lot 58, +1102001,018300,CSD,Lot 62, +1102034,018300,CSD,Crapaud, +1102032,018300,CSD,Victoria, +1102039,018300,CSD,Lot 21, +1102059,018300,CSD,Mount Stewart, +1102052,018300,CSD,Lot 34, +1102012,018300,CSD,Lot 49, +1102041,018300,CSD,Lot 22, +1102014,018300,CSD,Lot 48, +1102004,018300,CSD,Lot 60, +1102037,018300,CSD,Clyde River, +1102048,018300,CSD,Brackley, +1102051,018300,CSD,Breadalbane, +1102045,018300,CSD,Resort Mun. Stan.B.-Hope R.-Bayv.-Cavend.-N.Rust., +1102038,018300,CSD,Lot 20, +1102085,018300,CSD,Cornwall, +1102029,018300,CSD,Lot 30, +1102054,018300,CSD,Lot 35, +1102046,018300,CSD,North Rustico, +1102075,018300,CSD,Charlottetown, +1102036,018300,CSD,Lot 67, +1102028,018300,CSD,Lot 65, +1102033,018300,CSD,Meadowbank, +1102056,018300,CSD,Lot 36, +1102026,018300,CSD,Lot 31, +1102070,018300,CSD,Warren Grove, +1103,018200,CD,Prince, +1103054,018200,CSD,Lot 3, +1103049,018200,CSD,Lot 5, +1103008,018200,CSD,Kinkora, +1103010,018200,CSD,Central Bedeque, +1103052,018200,CSD,Alberton, +1103016,018200,CSD,Lot 18, +1103033,018200,CSD,Tyne Valley, +1103013,018200,CSD,Bedeque, +1103056,018200,CSD,Lot 2, +1103041,018200,CSD,Lot 6, +1103028,018200,CSD,Lot 16, +1103011,018200,CSD,Lot 25, +1103023,018200,CSD,Linkletter, +1103038,018200,CSD,Lot 10, +1103046,018200,CSD,Lot 8, +1103012,018200,CSD,Lot 19, +1103024,018200,CSD,Miscouche, +1103029,018200,CSD,Wellington, +1103031,018200,CSD,Lot 14, +1103034,018200,CSD,Lot 12, +1103014,018200,CSD,Kensington, +1103058,018200,CSD,Lot 1, +1103044,018200,CSD,Lot 9, +1103009,018200,CSD,Lot 26, +1103006,018200,CSD,Lot 27, +1103059,018200,CSD,Tignish, +1103051,018200,CSD,Lot 4, +1103036,018200,CSD,Lot 11, +1103032,018200,CSD,Lot 13, +1103027,018200,CSD,Abrams Village, +1103005,018200,CSD,Borden-Carleton, +1103035,018200,CSD,Lennox Island 1, +1103062,018200,CSD,Miminegash, +1103048,018200,CSD,Lot 7, +1103042,018200,CSD,O'Leary, +1103018,018200,CSD,Sherbrooke, +1103026,018200,CSD,Lot 15, +1103025,018200,CSD,Summerside, +1103019,018200,CSD,Lot 17, +1103057,018200,CSD,St. Louis, +1103001,018200,CSD,Lot 28, +10,020000,PT,Newfoundland and Labrador, +1001,021100-021200-021400,CD,Division No. 1, +1001343,020000,CSD,Old Perlican, +1001505,020000,CSD,Pouch Cove, +1001511,020000,CSD,Logy Bay-Middle Cove-Outer Cove, +1001509,020000,CSD,Torbay, +1001519,021300-021310-021320,CSD,St. John's, +1001149,020000,CSD,Ferryland, +1001113,020000,CSD,Trepassey, +1001379,020000,CSD,Harbour Grace, +1001259,021100-021200-021400,CSD,"Division No. 1, Subd. A", +1001203,021100-021200-021400,CSD,"Division No. 1, Subd. X", +1001321,021100-021200-021400,CSD,"Division No. 1, Subd. F", +1001357,021100-021200-021400,CSD,"Division No. 1, Subd. H", +1001328,020000,CSD,New Perlican, +1001490,021100-021200-021400,CSD,"Division No. 1, Subd. R", +1001494,020000,CSD,Wabana, +1001485,020000,CSD,Conception Bay South, +1001415,021100-021200-021400,CSD,"Division No. 1, Subd. L", +1001267,020000,CSD,Southern Harbour, +1001263,020000,CSD,Long Harbour-Mount Arlington Heights, +1001131,020000,CSD,Renews-Cappahayden, +1001101,021100-021200-021400,CSD,"Division No. 1, Subd. V", +1001405,021100-021200-021400,CSD,"Division No. 1, Subd. K", +1001352,020000,CSD,Small Point-Adam's Cove-Blackhead-Broad Cove, +1001517,020000,CSD,Paradise, +1001316,020000,CSD,Heart's Desire, +1001312,020000,CSD,Heart's Delight-Islington, +1001396,020000,CSD,Spaniard's Bay, +1001421,021100-021200-021400,CSD,"Division No. 1, Subd. M", +1001289,020000,CSD,Chapel Arm, +1001181,020000,CSD,Riverhead, +1001186,020000,CSD,Admirals Beach, +1001174,020000,CSD,Gaskiers-Point La Haye, +1001219,020000,CSD,Branch, +1001434,020000,CSD,South River, +1001565,021100-021200-021400,CSD,"Division No. 1, Subd. D", +1001361,020000,CSD,Salmon Cove, +1001374,021100-021200-021400,CSD,"Division No. 1, Subd. I", +1001308,020000,CSD,Whiteway, +1001557,020000,CSD,Bay Bulls, +1001429,020000,CSD,Clarke's Beach, +1001472,020000,CSD,Holyrood, +1001285,020000,CSD,Norman's Cove-Long Cove, +1001234,021100-021200-021400,CSD,"Division No. 1, Subd. B", +1001207,020000,CSD,Colinet, +1001178,020000,CSD,St. Mary's, +1001228,020000,CSD,St. Bride's, +1001120,020000,CSD,St. Shott's, +1001225,020000,CSD,Point Lance, +1001512,020000,CSD,Bauline, +1001469,020000,CSD,Harbour Main-Chapel's Cove-Lakeview, +1001298,020000,CSD,Whitbourne, +1001332,020000,CSD,Winterton, +1001551,020000,CSD,Petty Harbour-Maddox Cove, +1001385,020000,CSD,Upper Island Cove, +1001456,020000,CSD,Colliers, +1001559,020000,CSD,Witless Bay, +1001240,020000,CSD,Placentia, +1001169,020000,CSD,St. Vincent's-St. Stephen's-Peter's River, +1001339,021100-021200-021400,CSD,"Division No. 1, Subd. G", +1001347,020000,CSD,Bay de Verde, +1001335,020000,CSD,Hant's Harbour, +1001504,020000,CSD,Portugal Cove-St. Philip's, +1001365,020000,CSD,Victoria, +1001304,021100-021200-021400,CSD,"Division No. 1, Subd. E", +1001409,020000,CSD,Bay Roberts, +1001446,020000,CSD,Brigus, +1001441,021100-021200-021400,CSD,"Division No. 1, Subd. N", +1001426,020000,CSD,North River, +1001124,021100-021200-021400,CSD,"Division No. 1, Subd. U", +1001270,020000,CSD,Arnold's Cove, +1001281,020000,CSD,Chance Cove, +1001197,020000,CSD,Mount Carmel-Mitchells Brook-St. Catherines, +1001144,020000,CSD,Aquaforte, +1001140,020000,CSD,Port Kirwan, +1001461,020000,CSD,Conception Harbour, +1001437,020000,CSD,Cupids, +1001391,021100-021200-021400,CSD,"Division No. 1, Subd. J", +1001277,020000,CSD,Sunnyside, +1001293,021100-021200-021400,CSD,"Division No. 1, Subd. Y", +1001464,020000,CSD,Avondale, +1001126,020000,CSD,Cape Broyle, +1001254,020000,CSD,Fox Harbour, +1001370,020000,CSD,Carbonear, +1001105,020000,CSD,Portugal Cove South, +1001325,020000,CSD,Heart's Content, +1001542,020000,CSD,Mount Pearl, +1001394,020000,CSD,Bishop's Cove, +1001274,020000,CSD,Come By Chance, +1001452,021100-021200-021400,CSD,"Division No. 1, Subd. O", +1001155,021100-021200-021400,CSD,"Division No. 1, Subd. W", +1001136,020000,CSD,Fermeuse, +1001192,020000,CSD,St. Joseph's, +1001214,021100-021200-021400,CSD,"Division No. 1, Subd. C", +1001507,020000,CSD,Flatrock, +1001375,020000,CSD,Bryant's Cove, +1002,022100,CD,Division No. 2, +1002023,020000,CSD,Winterland, +1002011,020000,CSD,Lawn, +1002029,022100,CSD,"Division No. 2, Subd. J", +1002039,020000,CSD,English Harbour East, +1002055,020000,CSD,Little Bay East, +1002025,020000,CSD,Fox Cove-Mortier, +1002002,020000,CSD,Lewin's Cove, +1002026,022100,CSD,"Division No. 2, Subd. I", +1002014,020000,CSD,Point May, +1002027,020000,CSD,Bay L'Argent, +1002041,020000,CSD,St. Bernard's-Jacques Fontaine, +1002001,022100,CSD,"Division No. 2, Subd. E", +1002009,022100,CSD,"Division No. 2, Subd. G", +1002018,020000,CSD,Fortune, +1002013,020000,CSD,Lord's Cove, +1002034,020000,CSD,Parkers Cove, +1002033,020000,CSD,Rushoon, +1002016,022100,CSD,"Division No. 2, Subd. H", +1002021,020000,CSD,Garnish, +1002015,020000,CSD,Point au Gaul, +1002040,020000,CSD,Baine Harbour, +1002044,022100,CSD,"Division No. 2, Subd. L", +1002012,020000,CSD,Lamaline, +1002030,020000,CSD,Grand le Pierre, +1002048,022100,CSD,"Division No. 2, Subd. K", +1002022,022100,CSD,"Division No. 2, Subd. D", +1002037,020000,CSD,Red Harbour, +1002005,022100,CSD,Burin, +1002019,020000,CSD,Grand Bank, +1002031,022100,CSD,"Division No. 2, Subd. C", +1002036,020000,CSD,Terrenceville, +1002008,020000,CSD,St. Lawrence, +1002006,022100,CSD,"Division No. 2, Subd. F", +1002024,020000,CSD,Marystown, +1002017,020000,CSD,Frenchman's Cove, +1003,022400,CD,Division No. 3, +1003001,022400,CSD,"Division No. 3, Subd. A", +1003020,020000,CSD,Morrisville, +1003003,020000,CSD,St. Jacques-Coomb's Cove, +1003042,022400,CSD,"Division No. 3, Subd. J", +1003032,020000,CSD,Isle aux Morts, +1003801,020000,CSD,Samiajij Miawpukek, +1003034,022400-022410-022420,CSD,Channel-Port aux Basques, +1003010,020000,CSD,Seal Cove (Fortune Bay), +1003005,020000,CSD,Pool's Cove, +1003011,020000,CSD,Hermitage-Sandyville, +1003038,022400,CSD,"Division No. 3, Subd. I", +1003021,022400,CSD,"Division No. 3, Subd. E", +1003008,020000,CSD,Harbour Breton, +1003031,022400,CSD,"Division No. 3, Subd. H", +1003024,022400,CSD,"Division No. 3, Subd. F", +1003045,020000,CSD,Rose Blanche-Harbour le Cou, +1003014,022400,CSD,"Division No. 3, Subd. D", +1003019,020000,CSD,St. Alban's, +1003012,020000,CSD,Gaultois, +1003028,022300,CSD,Burgeo, +1003009,022400,CSD,"Division No. 3, Subd. C", +1003004,020000,CSD,Belleoram, +1003018,020000,CSD,Milltown-Head of Bay d'Espoir, +1003002,020000,CSD,Rencontre East, +1003006,022400,CSD,"Division No. 3, Subd. B", +1003033,020000,CSD,Burnt Islands, +1003026,022300,CSD,Ramea, +1004,023400,CD,Division No. 4, +1004019,020000,CSD,Stephenville, +1004020,020000,CSD,Kippens, +1004042,020000,CSD,Port au Port West-Aguathuna-Felix Cove, +1004011,023400,CSD,"Division No. 4, Subd. C", +1004006,023400,CSD,"Division No. 4, Subd. B", +1004017,020000,CSD,Gallants, +1004021,020000,CSD,Port au Port East, +1004033,020000,CSD,Cape St. George, +1004001,023400,CSD,"Division No. 4, Subd. A", +1004022,023400,CSD,"Division No. 4, Subd. E", +1004016,023400,CSD,"Division No. 4, Subd. D", +1004018,020000,CSD,Stephenville Crossing, +1004013,020000,CSD,St. George's, +1004037,020000,CSD,Lourdes, +1005,023100,CD,Division No. 5, +1005016,023100,CSD,"Division No. 5, Subd. C", +1005019,023100,CSD,"Division No. 5, Subd. D", +1005025,020000,CSD,Meadows, +1005024,020000,CSD,Lark Harbour, +1005035,020000,CSD,York Harbour, +1005003,023100,CSD,"Division No. 5, Subd. G", +1005017,020000,CSD,Massey Drive, +1005033,020000,CSD,Mount Moriah, +1005022,020000,CSD,McIvers, +1005004,023200,CSD,Deer Lake, +1005011,020000,CSD,Steady Brook, +1005006,020000,CSD,Howley, +1005005,020000,CSD,Jackson's Arm, +1005008,020000,CSD,Hampden, +1005009,020000,CSD,Reidville, +1005023,020000,CSD,Cox's Cove, +1005028,020000,CSD,Hughes Brook, +1005020,020000,CSD,Humber Arm South, +1005018,023100,CSD,Corner Brook, +1005012,020000,CSD,Pasadena, +1005007,023100,CSD,"Division No. 5, Subd. E", +1005014,020000,CSD,Cormack, +1005010,023100,CSD,"Division No. 5, Subd. F", +1005030,020000,CSD,Irishtown-Summerside, +1005015,020000,CSD,Gillams, +1005001,023100,CSD,"Division No. 5, Subd. A", +1006,024200,CD,Division No. 6, +1006014,024200,CSD,"Division No. 6, Subd. C", +1006008,024200,CSD,"Division No. 6, Subd. E", +1006017,024200,CSD,Grand Falls-Windsor, +1006015,020000,CSD,Northern Arm, +1006029,024200,CSD,"Division No. 6, Subd. A", +1006001,024200,CSD,"Division No. 6, Subd. D", +1006011,020000,CSD,Appleton, +1006003,020000,CSD,Norris Arm, +1006021,020000,CSD,Peterview, +1006009,025500,CSD,Gander, +1006031,024100,CSD,Buchans, +1006012,020000,CSD,Glenwood, +1006022,020000,CSD,Botwood, +1006019,020000,CSD,Bishop's Falls, +1006026,020000,CSD,Badger, +1006028,020000,CSD,Millertown, +1007,025200-025300-025400,CD,Division No. 7, +1007056,025200-025300-025400,CSD,"Division No. 7, Subd. A", +1007017,020000,CSD,Little Catalina, +1007046,020000,CSD,Salvage, +1007047,020000,CSD,Gambo, +1007039,020000,CSD,Savage Cove-Sandy Cove, +1007031,025200-025300-025400,CSD,"Division No. 7, Subd. E", +1007032,020000,CSD,Musgravetown, +1007048,020000,CSD,St. Brendan's, +1007054,020000,CSD,Greenspond, +1007038,025200-025300-025400,CSD,"Division No. 7, Subd. D", +1007057,020000,CSD,Dover, +1007041,020000,CSD,Happy Adventure, +1007040,025700,CSD,Terra Nova, +1007013,025400,CSD,Clarenville, +1007028,025200-025300-025400,CSD,"Division No. 7, Subd. F", +1007014,025200-025300-025400,CSD,"Division No. 7, Subd. J", +1007023,025200-025300,CSD,Bonavista, +1007042,020000,CSD,Eastport, +1007006,025200-025300-025400,CSD,"Division No. 7, Subd. L", +1007022,020000,CSD,Trinity Bay North, +1007044,020000,CSD,Glovertown, +1007015,020000,CSD,Trinity (Trinity Bay), +1007001,025200-025300-025400,CSD,"Division No. 7, Subd. M", +1007036,020000,CSD,Port Blandford, +1007018,025200-025300-025400,CSD,"Division No. 7, Subd. I", +1007050,020000,CSD,Centreville-Wareham-Trinity, +1007025,020000,CSD,Keels, +1007049,020000,CSD,Hare Bay, +1007027,020000,CSD,King's Cove, +1007045,025200-025300-025400,CSD,"Division No. 7, Subd. N", +1007016,020000,CSD,Port Rexton, +1007009,025200-025300-025400,CSD,"Division No. 7, Subd. K", +1007020,020000,CSD,Elliston, +1007037,020000,CSD,Traytown, +1007060,020000,CSD,New-Wes-Valley, +1007026,020000,CSD,Duntara, +1007067,020000,CSD,Indian Bay, +1007043,020000,CSD,Sandringham, +1007051,025200-025300-025400,CSD,"Division No. 7, Subd. B", +1007024,025200-025300-025400,CSD,"Division No. 7, Subd. G", +1008,020000,CD,Division No. 8, +1008004,020000,CSD,Lumsden, +1008052,020000,CSD,"Division No. 8, Subd. D", +1008075,020000,CSD,Fleur de Lys, +1008045,020000,CSD,Little Burnt Bay, +1008093,020000,CSD,Westport, +1008069,020000,CSD,King's Point, +1008070,020000,CSD,Nippers Harbour, +1008032,020000,CSD,Cottlesville, +1008022,020000,CSD,Joe Batt's Arm-Barr'd Islands-Shoal Bay, +1008025,020000,CSD,Seldom-Little Seldom, +1008036,020000,CSD,"Division No. 8, Subd. G", +1008073,020000,CSD,Tilt Cove, +1008096,020000,CSD,Woodstock, +1008072,020000,CSD,Middle Arm, +1008008,020000,CSD,"Division No. 8, Subd. L", +1008076,020000,CSD,LaScie, +1008062,020000,CSD,Port Anson, +1008001,020000,CSD,"Division No. 8, Subd. M", +1008031,020000,CSD,"Division No. 8, Subd. H", +1008067,020000,CSD,"Division No. 8, Subd. O", +1008046,020000,CSD,"Division No. 8, Subd. E", +1008079,020000,CSD,Baie Verte, +1008038,020000,CSD,Birchy Bay, +1008039,020000,CSD,Comfort Cove-Newstead, +1008098,020000,CSD,Miles Cove, +1008049,020000,CSD,Point Leamington, +1008059,020000,CSD,South Brook, +1008021,020000,CSD,Fogo, +1008040,020000,CSD,Baytona, +1008048,020000,CSD,Leading Tickles, +1008060,020000,CSD,Robert's Arm, +1008074,020000,CSD,"Division No. 8, Subd. A", +1008006,020000,CSD,Musgrave Harbour, +1008026,020000,CSD,"Division No. 8, Subd. I", +1008077,020000,CSD,Brent's Cove, +1008065,020000,CSD,"Division No. 8, Subd. P", +1008037,020000,CSD,Campbellton, +1008043,020000,CSD,Embree, +1008035,020000,CSD,Twillingate, +1008078,020000,CSD,Pacquet, +1008020,020000,CSD,Fogo Island Region (Part), +1008011,020000,CSD,Carmanville, +1008092,020000,CSD,Coachman's Cove, +1008058,020000,CSD,"Division No. 8, Subd. C", +1008056,020000,CSD,Lushes Bight-Beaumont-Beaumont North, +1008044,020000,CSD,Lewisporte, +1008053,020000,CSD,Pilley's Island, +1008054,020000,CSD,Triton, +1008063,020000,CSD,Little Bay, +1008024,020000,CSD,Change Islands, +1008091,025600,CSD,Seal Cove (White Bay), +1008042,020000,CSD,"Division No. 8, Subd. F", +1008071,020000,CSD,Burlington, +1008029,020000,CSD,Crow Head, +1008047,020000,CSD,Point of Bay, +1008033,020000,CSD,Summerford, +1008095,020000,CSD,Ming's Bight, +1008064,020000,CSD,Little Bay Islands, +1008055,020000,CSD,Brighton, +1008066,020000,CSD,Beachside, +1008061,020000,CSD,Springdale, +1008023,020000,CSD,Tilting, +1009,026100,CD,Division No. 9, +1009032,020000,CSD,St. Lunaire-Griquet, +1009029,020000,CSD,St. Anthony, +1009019,026300,CSD,Port Saunders, +1009018,026200,CSD,Hawke's Bay, +1009048,020000,CSD,River of Ponds, +1009037,020000,CSD,Sally's Cove, +1009009,026100,CSD,"Division No. 9, Subd. A", +1009022,020000,CSD,Port au Choix, +1009021,026100,CSD,"Division No. 9, Subd. C", +1009030,020000,CSD,Glenburnie-Birchy Head-Shoal Brook, +1009020,020000,CSD,St. Pauls, +1009034,020000,CSD,Cook's Harbour, +1009031,026100,CSD,"Division No. 9, Subd. D", +1009013,020000,CSD,Rocky Harbour, +1009008,020000,CSD,Conche, +1009007,020000,CSD,Roddickton-Bide Arm, +1009042,020000,CSD,Bellburns, +1009016,020000,CSD,Cow Head, +1009024,020000,CSD,Flower's Cove, +1009026,020000,CSD,Bird Cove, +1009041,026100,CSD,"Division No. 9, Subd. H", +1009017,020000,CSD,Parson's Pond, +1009012,020000,CSD,Norris Point, +1009001,026100,CSD,"Division No. 9, Subd. F", +1009035,020000,CSD,Raleigh, +1009039,020000,CSD,Goose Cove East, +1009028,020000,CSD,Main Brook, +1009004,020000,CSD,Englee, +1009047,026100,CSD,"Division No. 9, Subd. G", +1009015,020000,CSD,Daniel's Harbour, +1009011,020000,CSD,"Woody Point, Bonne Bay", +1009023,020000,CSD,Anchor Point, +1009010,020000,CSD,Trout River, +1010,020000,CD,Division No. 10, +1010020,020000,CSD,"Division No. 10, Subd. C", +1010012,027300,CSD,"Cartwright, Labrador", +1010034,029200,CSD,Wabush, +1010008,020000,CSD,"Division No. 10, Subd. B", +1010013,020000,CSD,Charlottetown (Labrador), +1010001,020000,CSD,"Division No. 10, Subd. A", +1010032,029200,CSD,Labrador City, +1010042,020000,CSD,"Division No. 10, Subd. E", +1010802,020000,CSD,Sheshatshiu 3, +1010005,020000,CSD,Forteau, +1010006,020000,CSD,West St. Modeste, +1010025,020000,CSD,Happy Valley-Goose Bay, +1010007,020000,CSD,Pinware, +1010011,020000,CSD,Mary's Harbour, +1010029,020000,CSD,"Division No. 10, Subd. D", +1010002,020000,CSD,L'Anse-au-Loup, +1010009,020000,CSD,Port Hope Simpson, +1010004,027100,CSD,L'Anse-au-Clair, +1010801,020000,CSD,Natuashish 2, +1010003,027100,CSD,Red Bay, +1010010,020000,CSD,St. Lewis, +1010022,020000,CSD,North West River, +1011,020000,CD,Division No. 11, +1011030,027600,CSD,Hopedale, +1011005,020000,CSD,"Division No. 11, Subd. C", +1011040,020000,CSD,"Division No. 11, Subd. E", +1011015,027500,CSD,Postville, +1011035,027700,CSD,Nain, +1011020,027500,CSD,Makkovik, +1011010,027400,CSD,Rigolet, +60,090000,PT,Yukon, +6001,090000,CD,Yukon, +6001003,092300,CSD,Watson Lake, +6001004,092400,CSD,Faro, +6001006,092100,CSD,Teslin, +6001007,092100,CSD,Teslin Post 13, +6001008,090000,CSD,Carcross 4, +6001009,091700,CSD,Whitehorse, +6001010,090000,CSD,Lake Laberge 1, +6001012,091400,CSD,Carmacks, +6001016,090000,CSD,Klukshu, +6001018,091600,CSD,Haines Junction, +6001019,090000,CSD,Kloo Lake, +6001022,091200,CSD,Mayo, +6001029,091100,CSD,Dawson, +6001031,090000,CSD,Moosehide Creek 2, +6001032,090000,CSD,Upper Liard, +6001033,090000,CSD,Two Mile Village, +6001034,090000,CSD,Two and One-Half Mile Village, +6001036,090000,CSD,Tagish, +6001037,092400,CSD,Ross River, +6001038,090000,CSD,Champagne Landing 10, +6001039,090000,CSD,Burwash Landing, +6001041,091400,CSD,Pelly Crossing, +6001042,091300,CSD,Beaver Creek, +6001043,093200,CSD,Old Crow, +6001044,090000,CSD,Mt. Lorne, +6001045,090000,CSD,"Yukon, Unorganized", +6001046,090000,CSD,Swift River, +6001047,090000,CSD,Johnsons Crossing, +6001048,090000,CSD,Carcross, +6001049,090000,CSD,Destruction Bay, +6001050,090000,CSD,Stewart Crossing, +6001052,090000,CSD,Keno Hill, +6001055,090000,CSD,Ibex Valley, +6001057,092100,CSD,Teslin, +6001058,090000,CSD,Marsh Lake, +6001059,090000,CSD,Macpherson-Grizzly Valley, +6001060,091700,CSD,"Whitehorse, Unorganized", +61,090000,PT,Northwest Territories, +6101,096540,CD,Region 1, +6101007,094500,CSD,Norman Wells, +6101003,094710,CSD,Déline, +6101012,094720,CSD,Colville Lake, +6101009,094600,CSD,Fort Good Hope, +6101005,094500,CSD,Tulita, +6102,094500,CD,Region 2, +6102034,095320,CSD,Whatì, +6102052,095320,CSD,Wekweètì, +6102049,090000,CSD,Gamètì, +6102031,095320,CSD,Behchokò, +6103,095320,CD,Region 3, +6103016,095400,CSD,Hay River, +6103018,095600,CSD,Fort Resolution, +6103003,095400,CSD,Enterprise, +6103001,095500,CSD,Fort Smith, +6103020,095700,CSD,Lutselk'e, +6104,094300,CD,Region 4, +6104023,095310,CSD,Yellowknife, +6104021,090000,CSD,Detah, +6106,095500,CD,Region 6 (5?), +6106097,095500,CSD,"Fort Smith, Unorganized", +6106013,094300,CSD,Jean Marie River, +6106014,095200,CSD,Fort Providence, +6106038,094300,CSD,Fort Simpson, +6106017,095400,CSD,Hay River Dene 1, +6106044,094400,CSD,Wrigley, +6106010,090000,CSD,Nahanni Butte, +6106005,090000,CSD,Kakisa, +6106026,090000,CSD,Reliance, +6106006,094200,CSD,Trout Lake, +6106004,090000,CSD,Salt Plains 195, +6106009,094200,CSD,Fort Liard, +6107,095310,CD,Region 7 (6?), +6107025,096530,CSD,Aklavik, +6107010,096550,CSD,Tsiigehtchic, +6107017,096540,CSD,Inuvik, +6107015,096550,CSD,Fort McPherson, +6107095,096310,CSD,Ulukhaktok, +6107014,096420,CSD,Paulatuk, +6107063,096540,CSD,"Inuvik, Unorganized", +6107041,096210,CSD,Sachs Harbour, +6107036,096520,CSD,Tuktoyaktuk, +62,090000,PT,Nunavut, +6204,090000,CD,Baffin, +6204019,090000,CSD,Nanisivik, +6204009,098220,CSD,Pangnirtung, +6204025,099210,CSD,Grise Fiord, +6204018,098110,CSD,Arctic Bay, +6204003,098230,CSD,Iqaluit, +6204005,098240,CSD,Kimmirut, +6204030,090000,CSD,"Baffin, Unorganized", +6204022,099110,CSD,Resolute, +6204010,098210,CSD,Qikiqtarjuaq, +6204020,098120,CSD,Pond Inlet, +6204015,098130,CSD,Clyde River, +6204012,097720,CSD,Igloolik, +6204011,097710,CSD,Hall Beach, +6204001,097910,CSD,Sanikiluaq, +6204007,098250,CSD,Cape Dorset, +6205,090000,CD,Keewatin, +6205027,097730,CSD,Repulse Bay, +6205017,097620,CSD,Rankin Inlet, +6205016,090000,CSD,Whale Cove, +6205014,097810,CSD,Coral Harbour, +6205033,090000,CSD,"Keewatin, Unorganized", +6205015,097610,CSD,Arviat, +6205019,097630,CSD,Chesterfield Inlet, +6205023,097510,CSD,Baker Lake, +6208,090000,CD,Kitikmeot, +6208098,090000,CSD,"Kitikmeot, Unorganized", +6208068,090000,CSD,Umingmaktok, +6208047,097420,CSD,Kugaaruk, +6208073,097110,CSD,Cambridge Bay, +6208059,097210,CSD,Kugluktuk, +6208081,097410,CSD,Gjoa Haven, +6208087,097310,CSD,Taloyoak, 6208065,090000,CSD,Bathurst Inlet, \ No newline at end of file diff --git a/web/Jstyle.html b/assets/Jstyle.html similarity index 97% rename from web/Jstyle.html rename to assets/Jstyle.html index c485193..22a2bfd 100644 --- a/web/Jstyle.html +++ b/assets/Jstyle.html @@ -94,7 +94,7 @@
EMERGENCY ALERT

-
+
- - + + + + + + QuantumENDEC Web Interface + + + + +

QuantumENDEC logo QuantumENDEC Web Interface

+
+ +

Alert Log

+

You can disable alert logging to the text file in Configuration.

+
+
+

+
+ + + + diff --git a/web/changePass.html b/assets/changePass.html similarity index 80% rename from web/changePass.html rename to assets/changePass.html index 6e967ec..6d1031b 100644 --- a/web/changePass.html +++ b/assets/changePass.html @@ -1,62 +1,62 @@ - - - - - - Change Password - - - - - -

QuantumENDEC logo QuantumENDEC Web Interface

- - -

Change web interface password

-
- -

- - -

- - -

- - -
-

-

QuantumENDEC ?

Copyright ApatheticDELL 2024

- - + + + + + + Change Password + + + + + +

QuantumENDEC logo QuantumENDEC Web Interface

+ + +

Change web interface password

+
+ +

+ + +

+ + +

+ + +
+

+

QuantumENDEC ?

Copyright ApatheticDELL 2024

+ + diff --git a/web/config.html b/assets/config.html similarity index 73% rename from web/config.html rename to assets/config.html index e86d501..a93b4cf 100644 --- a/web/config.html +++ b/assets/config.html @@ -1,434 +1,393 @@ - - - - QuantumENDEC Web Interface - - - -

QuantumENDEC logo QuantumENDEC Web Interface

- - -

Configuration

-

Configure QuantumENDEC on this page. Some settings require a restart of QuantumENDEC to take effect.

-
-
-

Webserver configuration

-
-
-

These changes will take effect the next time QuantumENDEC starts. (Or restart QuantumENDEC for these changes to take effect)

-

- -

SAME configuration

-
-

Your SAME callsign must be 8 characters, no more, no less. There also cannot be any dashes (-). If you put an invalid SAME callsign, code will use a default SAME callsign.

-

- -

Alert Presentation

-

HTTP CGEN settings

-

In this section, you can set up colors for different alert levels. This will affect the scroll bar and discord webhook. Dynamic alert level color will only work with S.A.M.E... if not relaying with S.A.M.E, the warning color will be used.

- -
-

- -
-

- -
-

- -
-
-

- -

Discord webhook configuration

-
-

The fields below will not have any effect if the box is not selected.

-
-
-
-
-

-

- -

Email configuration

-
-
-
-
-
-
-
-
-

Separate multiple recipients with a comma, no spaces!

-
-

- -

Alert logging to text file

-

QuantumENDEC will log alerts to a text file called 'alertlog.txt', this allows you to view the log on the Alert Log tab on this web interface.

-
-

- -

Audio configuration

-
-

The field below will not have any effect if the box is not selected.

- - -
- -
- -

Passthrough switching

-
-
-
- -
- -
-

Watch out! If you are using Passthrough switching, you can only have both specified audio input and output selected and active, or have both use the default audio device selected by the OS. You can't have one default and the other specified.

-
- -

Attention tone flavour

- -
- -

- -
-

If it can't detect what attention tone to use, it will revert to the one selected in Attention tone flavour.

-
- -

Force 120 seconds of broadcast audio

-
-

For broadcast audio that happens to be over the 120 second limit, you can enable this option to cut the audio down to 120 seconds.

-
- -

Playout configuration

-
-
-
-

- -

TTS voice configuration

-
- -

TTS Service Selection

- -
- -
- -

PYTTSX3 Settings

-

The fields below will not have any effect when using default voices.

-
-
-
-
-
-
- -

FLITE Settings

-

Note: Flite must be installed on your system in order for it to work!

-

The fields below will not have any effect when using default voices.

-
-
-
- -

TTS API Settings

-

Will be used when a API TTS service is selected under the TTS service dropdown.


-
-
-
-
-

- -

CAP Alert Filtering

- -

CAP Filter: Status

-
- Actual
-
- -

CAP Filter: Message Type

-
-
-
-
-
- -

CAP Filter: Severity

-
-
-
-
-
-
- -

CAP Filter: Urgency

-
-
-
-
-
- - -

- -

Location code filters for CAP

-

No spaces, seprate the codes by a comma (,).

-

(Won't work on American CAP.)

-
-
-

You can wildcard partial counties. Example(s): *04,*04123

-
- -

SAME event code filters for CAP

-

If SAME relay is disabled, these settings will be ignored. No spaces, seprate the codes by a comma (,).

- -
- -


- -

CAP Monitor Sources

- -

TCP Streams

-

Set up TCP streams for alert reception, normally you'd want to keep the NAADs TCP addresses. If you have an alternate source or a satellite receiver, you'd want to change this. You'd want to use TCP stream address that sends out XML, it's explained in the Pelmorex LMD Guide linked in the readme file. When setting the stream address, ensure that you input a [host]:[port] format, or things will break.

-
-
-
-

- -

HTTP CAP Capture

-

Set up HTTP CAP capture for CAP streams via HTTP. You may leave any text box blank if you have no source.

-
-
-
-
-
-
-

- -

NWS CAP Capture

-

NWS CAP has a different way of getting alerts, you can set that up here. QuantumENDEC is programmed to grab from the api.weather.gov ATOM feed. You should research the NWS CAP ATOM API to narrow down to your area.

-
-
-

- -

S.A.M.E Monitor Settings

-

QuantumENDEC can now monitor SAME alerts from a physical audio source or from an IP audio stream.

-

Set up the SAME monitor filters, no spaces, seprate the values (FIPS, Event codes, Originator codes) by a comma (,).

-
-
-
-
- -

You can wildcard partial counties. Example(s): *04,*04123

-

-

SAME Audio Device Monitor

-

The SAME audio device monitor will only listen to the default audio input device set by the operating system.

- -

-

SAME IP Monitors

-
-
-
-
-

- - - -

-
-

QuantumENDEC ?

Copyright ApatheticDELL 2024

- - - - + + + + QuantumENDEC Web Interface + + + +

QuantumENDEC logo QuantumENDEC Web Interface

+ + +

Configuration

+

Configure QuantumENDEC on this page. Some settings will require a restart of QuantumENDEC to take effect.

+
+ +
+

Webserver configuration

+ +

+ +

These changes will take effect the next time QuantumENDEC starts. (Or restart QuantumENDEC for these changes to take effect)

+
+ +

Playout configuration

+

+
+
+ +

Force 120 seconds of broadcast audio

+ +

For broadcast audio that happens to be over the 120 second limit, you can enable this option to cut the audio down to 120 seconds.

+
+ +

Attention tone flavour

+ +
+

+ +

If QuantumENDEC can't detect what attention tone to use, it will revert to the one selected in Attention tone flavour.

+
+ +

S.A.M.E configuration

+

Your SAME callsign must be 8 characters, no more, no less. There also cannot be any dashes (-). If you put an invalid SAME callsign, QuantumENDEC will use a default SAME callsign. If relaying with S.A.M.E is disabled, these settings will be ignored. This config section will affect both S.A.M.E audio monitors and CAP monitors.

+

+

No spaces, for multiple codes, seprate the codes by a comma (,). This applies to setting the event codes, originator codes and FIPS/CLC. Simply leave the box blank to not use the filter!

+

+

+

+

You can wildcard partial counties. Example(s): *04,*04123

+

+ +

Alert Presentation

+

In this section, you can set up colors for different alert levels. This will affect the HTML CGENs and discord webhook. Dynamic alert level color will only work with S.A.M.E... if not relaying with S.A.M.E, the warning color will be used.

+ +
+ +

+
+ +

+
+ +

+

+

+ +

Discord webhook configuration

+ +

The fields below will not have any effect if the box is not selected.

+
+
+
+

+

+ +

Email configuration

+
+

+
+
+
+
+ +

Separate multiple recipients with a comma, no spaces!

+

+ +

Alert logging to text file

+

QuantumENDEC will log alerts to a text file called 'alertlog.txt' in the assets folder, this allows you to view the log on the Alert Log tab on this web interface.

+

+ +

Audio configuration

+ +

The field below will not have any effect if the box is not selected.

+ +
+ +

+ +

Passthrough switching

+
+

+
+
+

Watch out! If you are using Passthrough switching, you can only have both specified audio input and output selected and active, or have both use the default audio device selected by the OS. You can't have one default and the other specified.

+
+ +

TTS voice configuration

+ +
+ +

TTS Service Selection

+ +
+ +

+ +

PYTTSX3 Settings

+

The fields below will not have any effect when using default voices.

+
+

+
+

+ +

FLITE Settings

+

Flite must be installed on your system in order for it to work!

+

The fields below will not have any effect when using default voices.

+
+

+ +

CAP Alert Filtering

+ +

CAP Filter: Status

+
+
+ +

CAP Filter: Message Type

+
+
+
+
+ +

CAP Filter: Severity

+
+
+
+
+
+ +

CAP Filter: Urgency

+
+
+
+
+
+
+ +

Location code filters for CAP

+

No spaces, seprate the codes by a comma (,).

+

(Won't work on American CAP.)

+
+ +

CAP Monitor Sources

+ +

TCP Streams

+

Set up TCP streams for alert reception, normally you'd want to keep the NAADs TCP addresses. If you have an alternate source that uses TCP, you'd want to change this. You'd want to use TCP stream address that sends out XML, (For Canada CAP) it's explained in the Pelmorex LMD Guide linked in the readme file. When setting the stream address, ensure that you input a typical [host]:[port] format, or things will break.

+

+
+
+
+ +

HTTP CAP Capture

+

Set up HTTP CAP capture for CAP streams via HTTP. You may leave any text box blank if you have no source.

+

+
+
+
+
+
+
+ +

NWS CAP Capture

+

NWS CAP has a different way of getting alerts, you can set that up here. QuantumENDEC is programmed to grab from the api.weather.gov ATOM feed. You should research the NWS CAP ATOM API to narrow down to your area.

+

+

+ +

S.A.M.E Monitor Settings

+

QuantumENDEC can now monitor SAME alerts from a physical audio source or from an IP audio stream.

+ +

SAME Audio Device Monitor

+

The SAME audio device monitor will only listen to the default audio input device set by the operating system.

+ +

+ +

SAME IP Monitors

+

+
+
+
+
+
+ + + + +
+

QuantumENDEC ?

Copyright ApatheticDELL 2024

+ + + + diff --git a/images/fallbackImage.png b/assets/fallbackImage.png similarity index 100% rename from images/fallbackImage.png rename to assets/fallbackImage.png diff --git a/web/fullscreen.html b/assets/fullscreen.html similarity index 100% rename from web/fullscreen.html rename to assets/fullscreen.html diff --git a/web/fullscreenWimage.html b/assets/fullscreenWimage.html similarity index 96% rename from web/fullscreenWimage.html rename to assets/fullscreenWimage.html index 73f43d2..9531bae 100644 --- a/web/fullscreenWimage.html +++ b/assets/fullscreenWimage.html @@ -41,7 +41,7 @@ .gridImage { grid-column: 1; grid-row: 1 / span 3; - background-color: #002255ff; + background-color: #00000000; overflow: show; display: flex; @@ -104,7 +104,7 @@

-
+
- - - + + + + QuantumENDEC Web Interface + + + +

QuantumENDEC logo QuantumENDEC Web Interface

+ + +

Home

+

Watch out! QuantumENDEC version 5 is still in beta! Things could break at any moment! Please give feedback! Open up an issue on the GitHub page if you find any bugs/issues!

+

+

QuantumENDEC Quick Actions

+ + + + +

+
+
+ +

+ +

+ + +

Active Alerts

+
    +

    + +

    QuantumENDEC ?

    Copyright ApatheticDELL 2024

    + + + \ No newline at end of file diff --git a/web/login.html b/assets/login.html similarity index 96% rename from web/login.html rename to assets/login.html index c5d0d6e..7b6828c 100644 --- a/web/login.html +++ b/assets/login.html @@ -1,92 +1,92 @@ - - - - - - Login - - - -

    Login

    -

    Log in to QuantumENDEC

    -

    -
    - - -

    - -
    -
    -

    - - - - + + + + + + Login + + + +

    Login

    +

    Log in to QuantumENDEC

    +

    +
    + + +

    + +
    +
    +

    + + + + diff --git a/images/logo.png b/assets/logo.png similarity index 100% rename from images/logo.png rename to assets/logo.png diff --git a/web/managePrePost.html b/assets/managePrePost.html similarity index 94% rename from web/managePrePost.html rename to assets/managePrePost.html index f36da8f..fd5dda5 100644 --- a/web/managePrePost.html +++ b/assets/managePrePost.html @@ -1,166 +1,166 @@ - - - - QuantumENDEC Web Interface - - - -

    QuantumENDEC logo QuantumENDEC Web Interface

    - - -

    Manage alert lead in and lead out

    -

    Lead ins and lead outs are audio clips that play before (lead in) and/or after (lead out) an alert. Lead ins are also called pre-rolls. Upload and manage lead in/lead out wav files here. Ensure your lead ins/outs are breif.

    -

    - -
    - - -
    -

    -
    - - -
    - -

    - - -

    -

    Download lead in/out

    - - -


    -

    Remove lead in/out

    -

    Watch out, you can remove alert lead in/out audio here.

    -
    - - -

    - - - + + + + QuantumENDEC Web Interface + + + +

    QuantumENDEC logo QuantumENDEC Web Interface

    + + +

    Manage alert lead in and lead out

    +

    Lead ins and lead outs are audio clips that play before (lead in) and/or after (lead out) an alert. Lead ins are also called pre-rolls. Upload and manage lead in/lead out wav files here. Ensure your lead ins/outs are breif.

    +

    + +
    + + +
    +

    +
    + + +
    + +

    + + +

    +

    Download lead in/out

    + + +


    +

    Remove lead in/out

    +

    Watch out, you can remove alert lead in/out audio here.

    +
    + + +

    + + + diff --git a/web/scroll.html b/assets/scroll.html similarity index 75% rename from web/scroll.html rename to assets/scroll.html index 5a1393b..770f2c2 100644 --- a/web/scroll.html +++ b/assets/scroll.html @@ -1,79 +1,109 @@ - - - - - - QE CGEN - Scroll - - - - - - -

    - - + + + + + + QE CGEN - Scroll + + + + + + +

    + + diff --git a/web/sendAlert.html b/assets/sendAlert.html similarity index 89% rename from web/sendAlert.html rename to assets/sendAlert.html index 641575c..b577f0b 100644 --- a/web/sendAlert.html +++ b/assets/sendAlert.html @@ -1,114 +1,114 @@ - - - - QuantumENDEC Web Interface - - - -

    QuantumENDEC logo QuantumENDEC Web Interface

    - - -

    Send Alert

    -

    Originate an alert from this page. If you're not using S.A.M.E, you don't need to select Originator, Event, or CLC/FIPS code; they will be ignored if S.A.M.E is disabled in QuantumENDEC.

    -

    This function internally injects a CAP alert within QuantumENDEC for relay, this does NOT send an actual alert out to connected CAP sources. (Broadcasters/Cable operators in the United States use this type of feature for RWT/RMTs)

    -
    -
    -

    Primary Info block

    - - -

    - - - -

    -
    -

    - -
    -

    No spaces, use CLC/FIPS, separate the codes by a dash (-). If you don't, things will break.

    -

    - -
    - -

    - -

    Secondary Info block

    -

    - - -

    - - - -

    -
    -

    - -
    -

    No spaces, use CLC/FIPS, separate the codes by a dash (-). If you don't, things will break.

    -

    - -
    - -

    - - -

    -
    -

    QuantumENDEC ?

    Copyright ApatheticDELL 2024

    - - - - + + + + QuantumENDEC Web Interface + + + +

    QuantumENDEC logo QuantumENDEC Web Interface

    + + +

    Send Alert

    +

    Originate an alert from this page. If you're not using S.A.M.E, you don't need to select Originator, Event, or CLC/FIPS code; they will be ignored if S.A.M.E is disabled in QuantumENDEC.

    +

    This function internally injects a CAP alert within QuantumENDEC for relay, this does NOT send an actual alert out to connected CAP sources. (Broadcasters/Cable operators in the United States use this type of feature for RWT/RMTs)

    +
    +
    +

    Primary Info block

    + + +

    + + + +

    +
    +

    + +
    +

    No spaces, use CLC/FIPS, separate the codes by a dash (-). If you don't, things will break.

    +

    + +
    + +

    + +

    Secondary Info block

    +

    + + +

    + + + +

    +
    +

    + +
    +

    No spaces, use CLC/FIPS, separate the codes by a dash (-). If you don't, things will break.

    +

    + +
    + +

    + + +

    +
    +

    QuantumENDEC ?

    Copyright ApatheticDELL 2024

    + + + + diff --git a/assets/shutconfirm.html b/assets/shutconfirm.html new file mode 100644 index 0000000..798896f --- /dev/null +++ b/assets/shutconfirm.html @@ -0,0 +1,15 @@ + + + + QuantumENDEC Web Interface + + + +

    QuantumENDEC logo QuantumENDEC Web Interface

    +

    You're about to shutdown QuantumENDEC

    +

    Are you sure you want to initiate shutdown? This will stop everything and end QuantumENDEC. Note, it may take a while to complete the shutdown.

    +
    + + + + \ No newline at end of file diff --git a/web/status.html b/assets/status.html similarity index 83% rename from web/status.html rename to assets/status.html index edb4e32..f999376 100644 --- a/web/status.html +++ b/assets/status.html @@ -1,99 +1,102 @@ - - - - - - QuantumENDEC Web Interface - - - - -

    QuantumENDEC logo QuantumENDEC Web Interface

    - - -

    Status

    -

    Here you can view the status of each service thats running in QuantumENDEC.

    - -

    Relay

    -
    Loading...
    -

    TCP CAP Capture

    -
    Loading...
    -
    Loading...
    -

    HTTP CAP Capture

    -
    Loading...
    -
    Loading...
    -
    Loading...
    -
    Loading...
    -
    Loading...
    -

    NWS CAP Capture

    -
    Loading...
    -

    Audio Monitor

    -
    Loading...
    -

    IP Audio Stream Monitors

    -
    Loading...
    -
    Loading...
    -
    Loading...
    -
    Loading...
    - - - - + + + + + + QuantumENDEC Web Interface + + + + +

    QuantumENDEC logo QuantumENDEC Web Interface

    + + +

    Status

    +

    Here you can view the status of each service thats running in QuantumENDEC.

    + +

    QuantumENDEC

    +
    Loading...
    +

    Relay

    +
    Loading...
    +

    TCP CAP Capture

    +
    Loading...
    +
    Loading...
    +

    HTTP CAP Capture

    +
    Loading...
    +
    Loading...
    +
    Loading...
    +
    Loading...
    +
    Loading...
    +

    NWS CAP Capture

    +
    Loading...
    +

    Local Audio Monitor

    +
    Loading...
    +

    IP Audio Stream Monitors

    +
    Loading...
    +
    Loading...
    +
    Loading...
    +
    Loading...
    + + + + diff --git a/css/style.css b/assets/style.css similarity index 94% rename from css/style.css rename to assets/style.css index a59510d..0c085d1 100644 --- a/css/style.css +++ b/assets/style.css @@ -1,112 +1,112 @@ -body { - font-family: sans-serif; - color:white; - background-color: #161616; - margin-left: auto; - margin-right: auto; - max-width: 1024px; - min-width: 256px; - padding-top: 8px; - padding-bottom: 24px; - padding-left: 24px; - padding-right: 24px; -} - -nav ul { - list-style-type: none; - background-color: #6d1f1f; - border: 4px solid #ffffff; - border-radius: 20px; - font-family: sans-serif; - font-weight: bold; - padding: 16px; -} - -nav ul li { - display: inline; - border-right: 2px solid #ffffff; - padding-right: 8px; - padding-left: 8px; -} - -nav ul li:last-child { - border-right: none; -} - -nav ul li a { - text-decoration: none; - color: #ffffff; -} - -nav a:link, a:visited { - color: white; - text-decoration: none; -} - -nav .selected { - color:rgb(255, 216, 216); -} - -nav a:hover, a:active { - color: rgb(175, 175, 175); -} - -table { - font-size: 70%; - border-collapse: collapse; - width: 100%; -} - -th, td { - border: 1px solid #ffffff; - padding: 8px; - text-align: left; -} - -th { - background-color: #6d1f1f; -} - -td { - background-color: #00000000; -} - -.button { - display: inline-block; - padding: 10px 10px; - font-size: 15px; - cursor: pointer; - text-align: center; - text-decoration: none; - outline: none; - color: #fff; - background-color: #b93434; - border: none; - border-radius: 15px; - } - -.button:hover {background-color: #922727} - -.button:active {background-color: #db5d5d;} - -.button a:link, a:visited { - text-decoration: none; - color: white;} - -.activeAlerts-container { - font-family: sans-serif; -} -.activeAlerts-list { - list-style-type: none; - padding: 0; -} -.activeAlert-item { - margin: 5px 0; - padding: 10px; - background-color: #2f4158; - border-radius: 5px; -} - -input[type="text"] { - width: 300px; /* Set the width to 300 pixels */ +body { + font-family: sans-serif; + color:white; + background-color: #161616; + margin-left: auto; + margin-right: auto; + max-width: 1024px; + min-width: 256px; + padding-top: 8px; + padding-bottom: 24px; + padding-left: 24px; + padding-right: 24px; +} + +nav ul { + list-style-type: none; + background-color: #6d1f1f; + border: 4px solid #ffffff; + border-radius: 20px; + font-family: sans-serif; + font-weight: bold; + padding: 16px; +} + +nav ul li { + display: inline; + border-right: 2px solid #ffffff; + padding-right: 8px; + padding-left: 8px; +} + +nav ul li:last-child { + border-right: none; +} + +nav ul li a { + text-decoration: none; + color: #ffffff; +} + +nav a:link, a:visited { + color: white; + text-decoration: none; +} + +nav .selected { + color:rgb(255, 216, 216); +} + +nav a:hover, a:active { + color: rgb(175, 175, 175); +} + +table { + font-size: 70%; + border-collapse: collapse; + width: 100%; +} + +th, td { + border: 1px solid #ffffff; + padding: 8px; + text-align: left; +} + +th { + background-color: #6d1f1f; +} + +td { + background-color: #00000000; +} + +.button { + display: inline-block; + padding: 10px 10px; + font-size: 15px; + cursor: pointer; + text-align: center; + text-decoration: none; + outline: none; + color: #fff; + background-color: #b93434; + border: none; + border-radius: 15px; + } + +.button:hover {background-color: #922727} + +.button:active {background-color: #db5d5d;} + +.button a:link, a:visited { + text-decoration: none; + color: white;} + +.activeAlerts-container { + font-family: sans-serif; +} +.activeAlerts-list { + list-style-type: none; + padding: 0; +} +.activeAlert-item { + margin: 5px 0; + padding: 10px; + background-color: #2f4158; + border-radius: 5px; +} + +input[type="text"] { + width: 300px; /* Set the width to 300 pixels */ } \ No newline at end of file diff --git a/assets/tmp/alertImage.png b/assets/tmp/alertImage.png new file mode 100644 index 0000000000000000000000000000000000000000..f39420ba428885d94103a61aadd6ec04995b00a8 GIT binary patch literal 9536 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 Rf-j>WmoHp3DKH}Z_CHFPEt>!U literal 0 HcmV?d00001 diff --git a/web/uploadConfig.html b/assets/uploadConfig.html similarity index 89% rename from web/uploadConfig.html rename to assets/uploadConfig.html index 59f8e5b..a1ffef9 100644 --- a/web/uploadConfig.html +++ b/assets/uploadConfig.html @@ -1,67 +1,67 @@ - - - - QuantumENDEC Web Interface - - - -

    QuantumENDEC logo QuantumENDEC Web Interface

    - - -

    Upload configuration file

    -
    - - -
    - -

    - - - - - + + + + QuantumENDEC Web Interface + + + +

    QuantumENDEC logo QuantumENDEC Web Interface

    + + +

    Upload configuration file

    +
    + + +
    + +

    + + + + + diff --git a/css/scrollStyle.css b/css/scrollStyle.css deleted file mode 100644 index 645838d..0000000 --- a/css/scrollStyle.css +++ /dev/null @@ -1,29 +0,0 @@ -body { - background-color: #353535; - overflow: hidden; - box-sizing: border-box; - font-family: sans-serif; - padding: 0; - margin: 0; -} - -.scroll-container { - background-color: #ff2a2a; - font-size: large; - width: 100%; - height: 100px; - display: flex; /* Use flexbox */ - justify-content: center; /* Center horizontally */ - align-items: center; /* Center vertically */ - display: none; /* Hide by default */ - overflow: hidden; /* Hide scroll bars */ -} - -.scroll-text { - color: white; - text-shadow: 2.5px 1.5px 5px rgb(0, 0, 0); - font-size: 60px; - line-height: 0; /* Match the font size for vertical centering */ - text-align: center; - white-space: nowrap; /* Ensure text stays in a single line */ -} diff --git a/logger.py b/logger.py deleted file mode 100644 index e73c7e2..0000000 --- a/logger.py +++ /dev/null @@ -1,178 +0,0 @@ -import subprocess, smtplib -from discord_webhook import DiscordWebhook, DiscordEmbed -from datetime import datetime -from email.mime.multipart import MIMEMultipart -from email.mime.text import MIMEText - -class Log: - def __init__(self, ConfigData): - self.ConfigData = ConfigData - - def SendDiscord(self, Title, Description, ZCZC, type="", HookColor=None): - Wauthorname = self.ConfigData['webhook_author_name'] - Wauthorurl = self.ConfigData['webhook_author_URL'] - Wiconurl = self.ConfigData['webhook_author_iconURL'] - Wurl = self.ConfigData['webhook_URL'] - Description = Description.replace("/n", " ") - if len(Description) > 2000: Description = f"{Description[:2000]}..." - if len(ZCZC) > 1000: ZCZC = f"{ZCZC[:1000]}..." - webhook = DiscordWebhook(url=Wurl, rate_limit_retry=True) - - # Send audio - if type == "TX": - if self.ConfigData['webhook_sendAudio'] is True: - try: - subprocess.run(["ffmpeg", "-y", "-i", "Audio/audio.wav", "-map", "0:a:0", "-b:a", "64k", "Audio/tmp/DiskAudio.mp3"], capture_output=True, text=True) - with open("Audio/tmp/DiskAudio.mp3", "rb") as f: webhook.add_file(file=f.read(), filename="audio.mp3") - - if self.ConfigData["ProduceImages"] is True: - with open("images/alertImage.png", "rb") as f: webhook.add_file(file=f.read(), filename="image.png") - - except: pass - - if HookColor is None or HookColor == "": Wcolor = "ffffff" - else: Wcolor = HookColor - - embed = DiscordEmbed(title=Title, description=Description, color=Wcolor,) - if ZCZC == "": pass - else: - ZCZC = f"```{ZCZC}```" - embed.add_embed_field(name="", value=ZCZC, inline=False) - embed.set_author(name=Wauthorname, url=Wauthorurl, icon_url=Wiconurl) - embed.set_footer(text="Powered by QuantumENDEC") - embed.set_timestamp() - webhook.add_embed(embed) - webhook.execute() - - def SendEmail(self, Title, Description, ZCZC, HookColor=None): - Description = Description.replace("\n", " ") - ZCZC = ZCZC.replace("\n", "") - if len(ZCZC) > 1: ZCZC = f"S.A.M.E: {ZCZC}" - if HookColor is None or HookColor == "": HookColor = "101010" - - date = datetime.now() - date = date.astimezone() - date = date.strftime("Log: %H:%M%z %d/%m/%Y") - - style = """ - - """ - - body = f""" - - - - - - QuantumENDEC Email Log - {style} - - -
    -

    QuantumENDEC Email Log

    -
    - -
    -

    {Title}

    -

    {Description}

    -

    {ZCZC}

    -
    - -
    -

    QuantumENDEC - {date}

    -
    - - - """ - - message = MIMEMultipart() - message["From"] = self.ConfigData["email_user"] - message["Subject"] = f"QuantumENDEC: {Title} - {date}" - if(type(self.ConfigData["email_sendto"]) == list): message['To'] = ",".join(self.ConfigData["email_sendto"]) - else: message['To'] = self.ConfigData["email_sendto"] - - if self.ConfigData["FancyHTML"] is True: - thing = MIMEText(body, 'html') - message.attach(thing) - else: - basic_text = f"QuantumENDEC... {Title}\n{Description}\n{ZCZC}" - thing = MIMEText(basic_text, 'plain') - message.attach(thing) - - mail = smtplib.SMTP(self.ConfigData['email_server'], int(self.ConfigData['email_server_port'])) - mail.ehlo() - mail.starttls() - mail.login(self.ConfigData["email_user"], self.ConfigData["email_user_pass"]) - mail.sendmail(self.ConfigData["email_user"], self.ConfigData["email_sendto"], message.as_string()) - mail.quit() - - def TxtLog(self, Title, Description, ZCZC): - dateNow = datetime.now().strftime("%B %d, %Y %H:%M:%S") - if ZCZC == "": log = f"{Title}\n{Description}" - else: log = f"{Title}\n{Description}\n{ZCZC}" - log = f"\n--- {dateNow} ---\n{log}\n" - try: - with open("alertlog.txt", "a", encoding='utf-8') as f: f.write(log) - except: - with open("alertlog.txt", "w", encoding='utf-8') as f: f.write(log) - - def SendLog(self, Title, Description, ZCZC, type="", HookColor=None): - if self.ConfigData['enable_discord_webhook'] is True: - print("Sending Discord webhook...") - try: self.SendDiscord(Title, Description, ZCZC, type, HookColor) - except: print("Discord, failed to log.") - - if self.ConfigData['enable_LogToTxt'] is True: - print("Logging to alertlog.txt...") - try: self.TxtLog(Title, Description, ZCZC) - except: print("Text file, failed to log.") - - if self.ConfigData['enable_email'] is True: - print("Logging to email...") - try: self.SendEmail(Title, Description, ZCZC, HookColor) - except: print("Email, failed to log,") - - print("Finished logging.") - - -# Typical recv log: -# Title: Emergency Alert Received -# Headline: Receipt: -# Description: Received at {date} from {monitorName} -# ZCZC: {SAMEheaderSource} - -# Typical send log: -# Title: Emergency Alert Transmission -# Headline: EMERGENCY ALERT // ALERT'D URGE FRENCH -# Description: {BroadcastText} -# ZCZC: {SAMEheaderOutput} - -# Standard Canada EAS message can be max 1800 chars. \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..a440b8d --- /dev/null +++ b/requirements.txt @@ -0,0 +1,14 @@ +pyttsx3 +requests +sounddevice +scipy +pydub +EASGen +EAS2Text +matplotlib +basemap +discord_webhook +ffmpeg-python +soundfile +numpy +flask \ No newline at end of file diff --git a/test.html b/test.html new file mode 100644 index 0000000..8b1c13d --- /dev/null +++ b/test.html @@ -0,0 +1,76 @@ + + + + + +Code Input + + + + +
    + +
    + + + + + + + diff --git a/version.txt b/version.txt deleted file mode 100644 index ec201ee..0000000 --- a/version.txt +++ /dev/null @@ -1 +0,0 @@ -QuantumENDEC v5 Public Beta 9 \ No newline at end of file diff --git a/webserver.py b/webserver.py deleted file mode 100644 index b867c1e..0000000 --- a/webserver.py +++ /dev/null @@ -1,485 +0,0 @@ -orgSAMEtoCAP = {"WXR": "Met", "EAS": "Admin", "CIV": "Other"} - -from flask import Flask, request, jsonify, send_from_directory, redirect, url_for, make_response, session -import os, json, hashlib, random, string, secrets, re, pyttsx3 -import sounddevice as sd -from datetime import datetime, timezone, timedelta -from EAS2Text import EAS2Text - -try: import pythoncom -except: pass - -app = Flask(__name__) -#app = Flask(__name__, static_folder='web', static_url_path='') - -#app.secret_key = 'your_secret_key' # Set this to a random, secure value -app.secret_key = secrets.token_hex(16) - -CONFIG_FILE = "config.json" -PASSWORD_FILE = 'password.json' -SESSION_COOKIE_NAME = 'session_id' -SESSIONS = {} -DEFAULT_PASSWORD_HASH = hashlib.sha256('hackme'.encode()).hexdigest() - -def save_password(password_hash): - with open(PASSWORD_FILE, 'w') as file: json.dump({'password': password_hash}, file) - -def get_audio_devices(): - devices = sd.query_devices() - output_devices = [device for device in devices if device['max_output_channels'] > 0] - return [f"{device['name']}, {sd.query_hostapis()[device['hostapi']]['name']}" for device in output_devices] - -def get_audio_inputs(): - devices = sd.query_devices() - input_devices = [device for device in devices if device['max_input_channels'] > 0] - return [f"{device['name']}, {sd.query_hostapis()[device['hostapi']]['name']}" for device in input_devices] - -def list_tts_voices(): - try: - try: pythoncom.CoInitialize() - except: pass - engine = pyttsx3.init() - voices = engine.getProperty('voices') - return [voice.name for voice in voices] - except Exception as e: print("[WEBSERVER]", e) - -def load_config(): - try: - with open(CONFIG_FILE, 'r') as file: return json.load(file) - except FileNotFoundError: return {} - -def save_config(config): - with open(CONFIG_FILE, 'w') as file: json.dump(config, file, indent=4) - -# Load the password from a file or use a default -def load_password(): - try: - with open('password.json', 'r') as file: - data = json.load(file) - return data.get('password', DEFAULT_PASSWORD_HASH) - except FileNotFoundError: return DEFAULT_PASSWORD_HASH - -# Check if the user is authenticated -def is_authenticated(): - session_id = request.cookies.get(SESSION_COOKIE_NAME) - return session_id in SESSIONS - -# Create a new session -def create_session(): - session_id = ''.join(random.choices(string.ascii_letters + string.digits, k=32)) - SESSIONS[session_id] = True - return session_id - -def GetActiveAlerts(): - try: - with open("config.json", "r") as JCfile: config = JCfile.read() - ConfigData = json.loads(config) - ActiveAlerts = [] - HistoryFolder = "XMLhistory" - XMLhistory = os.listdir(HistoryFolder) - current_time = datetime.now(timezone.utc) - for i in XMLhistory: - try: - with open(f"{HistoryFolder}/{i}", "r", encoding='utf-8') as f: XML = f.read() - if "SAME" in XML: - Expires = datetime.fromisoformat(datetime.fromisoformat(re.search(r'\s*(.*?)\s*', XML, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1)).astimezone(timezone.utc).isoformat()) - if current_time > Expires: - try: os.remove(f"{HistoryFolder}/{i}") - except: pass - continue - - SourceHEADER = re.search(r'\s*(.*?)\s*', XML, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - Sent = re.search(r'\s*(.*?)\s*', XML, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - MonitorName = re.search(r'\s*(.*?)\s*', XML, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - Sent = Sent.replace("T"," ") - expire = re.search(r'\s*(.*?)\s*', XML, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1).replace("T"," ") - txt = EAS2Text(SourceHEADER).EASText - ActiveAlerts.append(f"SAME from {MonitorName}\n Sent: {Sent}\n Expires: {expire}\n [{SourceHEADER}]\n\n {txt}") - else: - Sent = re.search(r'\s*(.*?)\s*', XML, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - MessageType = re.search(r'\s*(.*?)\s*', XML, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - Status = re.search(r'\s*(.*?)\s*', XML, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - - XML = re.findall(r'\s*(.*?)\s*', XML, re.MULTILINE | re.IGNORECASE | re.DOTALL) - InfoProc = 0 - ExpireProc = 0 - for InfoEN in XML: - InfoProc = InfoProc + 1 - InfoEN = f"{InfoEN}" - try: - Expires = datetime.fromisoformat(datetime.fromisoformat(re.search(r'\s*(.*?)\s*', InfoEN, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1)).astimezone(timezone.utc).isoformat()) - if current_time > Expires: - ExpireProc = ExpireProc + 1 - continue - except: - ExpireProc = ExpireProc + 1 - continue - - try: - if "fr" in re.search(r'\s*(.*?)\s*', InfoEN, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1): lang = "fr" - elif "es" in re.search(r'\s*(.*?)\s*', InfoEN, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1): lang = "es" - else: lang = "en" - except: lang = "en" - try: - if ConfigData[f'relay_{lang}'] is False: continue - except: continue - - Urgency = re.search(r'\s*(.*?)\s*', InfoEN, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - Severity = re.search(r'\s*(.*?)\s*', InfoEN, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - Sent = Sent.replace("T"," ") - expire = re.search(r'\s*(.*?)\s*', InfoEN, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1).replace("T"," ") - senderName = re.search(r'\s*(.*?)\s*', InfoEN, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - #ActiveAlerts.append(f"[CAP from {senderName}] [Sent: {Sent}] [Expires: {expire}] [{GeneratedHeader}]: {BroadcastText}") - Description = re.search(r'\s*(.*?)\s*', InfoEN, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - event = re.search(r'\s*(.*?)\s*', InfoEN, re.MULTILINE | re.IGNORECASE | re.DOTALL).group(1) - if Description == "###": continue - ActiveAlerts.append(f"CAP from {senderName}\n Sent: {Sent}\n Expires: {expire}\n{Status}, {MessageType}\n {Urgency}, {Severity}\n Event: {event}\n\n {Description}") - if InfoProc == ExpireProc: - try: os.remove(f"{HistoryFolder}/{i}") - except: pass - except: continue - return ActiveAlerts - except: return [] - -# ... FLASK THINGS ... - -@app.route('/activeAlerts') -def activeAlerts(): - try: - ActiveAlerts = GetActiveAlerts() - if not ActiveAlerts: return jsonify(["No alerts"]) - return jsonify(ActiveAlerts) - except: return jsonify(["Error fetching alerts"]) - -@app.route('/config') -def config_page(): - if not is_authenticated(): return redirect(url_for('login_page')) - - return send_from_directory('web', 'config.html') - #return send_from_directory('', 'config.html') - -@app.route('/audio_devices') -def audio_devices(): - if not is_authenticated(): return jsonify({'error': 'Unauthorized'}), 401 - devices = get_audio_devices() - return jsonify(devices) - -@app.route('/audio_inputs') -def audio_inputs(): - if not is_authenticated(): return jsonify({'error': 'Unauthorized'}), 401 - devices = get_audio_inputs() - return jsonify(devices) - -@app.route('/tts_voices') -def tts_voices(): - if not is_authenticated(): return jsonify({'error': 'Unauthorized'}), 401 - voices = list_tts_voices() - return jsonify(voices) - -@app.route('/config_data') -def config_data(): - if not is_authenticated(): return jsonify({'error': 'Unauthorized'}), 401 - config = load_config() - return jsonify(config) - -@app.route('/save_config', methods=['POST']) -def save_config_data(): - if not is_authenticated(): return jsonify({'error': 'Unauthorized'}), 401 - config = request.json - save_config(config) - return 'Configuration saved successfully.', 200 - -@app.route('/change_password', methods=['POST']) -def change_password(): - if not is_authenticated(): return 'Unauthorized.', 401 - data = request.get_json() - current_password_hash = hashlib.sha256(data['currentPassword'].encode()).hexdigest() - new_password_hash = hashlib.sha256(data['newPassword'].encode()).hexdigest() - if current_password_hash == load_password(): - save_password(new_password_hash) - SESSIONS.clear() # Clear all sessions - return 'Password changed successfully.', 200 - else: return 'Incorrect current password.', 403 - -@app.route('/login', methods=['GET', 'POST']) -def login_page(): - if request.method == 'POST': - data = request.json - password_hash = hashlib.sha256(data['password'].encode()).hexdigest() - if password_hash == load_password(): - session_id = create_session() - response = make_response('Login successful.') - response.set_cookie(SESSION_COOKIE_NAME, session_id, httponly=True, samesite='Lax') - return response - else: return 'Incorrect password.', 403 - return send_from_directory('web', 'login.html') - #return send_from_directory('', 'login.html') - -@app.route('/logout', methods=['POST']) -def logout(): - session.clear() # Clear all session data - response = make_response(redirect('/login.html')) # Create a response object - response.set_cookie(SESSION_COOKIE_NAME, '', expires=0) # Remove the session cookie - return response - -@app.route('/clearAlertLogTxt', methods=['POST']) -def clearAlertlogTxt(): - try: - with open("alertlog.txt", "w") as f: f.write("") - except: pass - response = make_response(redirect('/alertLog.html')) - return response - -# Example mappings, replace with your actual mappings -#orgSAMEtoCAP = {'ORG1': 'Category1'} -#eventSAMEtoCAP = {'EVE1': 'Event1'} - -@app.route('/send_alert', methods=['POST']) -def send_alert(): - data = request.json - nowTime = datetime.now(timezone.utc) - sent = nowTime.strftime('%Y-%m-%dT%H:%M:%S-00:00') - expire = nowTime + timedelta(hours=1) - expire = expire.strftime('%Y-%m-%dT%H:%M:%S-00:00') - sentforres = nowTime.strftime('%Y%m%dT%H%M%S') - res = ''.join(random.choices(string.ascii_uppercase + string.digits, k=10)) - res = f"{res}{sentforres}" - - try: Cate = orgSAMEtoCAP[data['ORG']] - except: Cate = "Other" - - EVENT = data['EVE'] - EVENT = EVENT.upper() - EVENT = EVENT[:3] - - if data['SecondaryInfo'] is True: - try: Cate_second = orgSAMEtoCAP[data['ORG_second']] - except: Cate_second = "Other" - EVENT_second = data['EVE_second'] - EVENT_second = EVENT_second.upper() - EVENT_second = EVENT_second[:3] - secondInfo = f""" - - {data['LANGUAGE_second']} - {Cate_second} - internal - Unknown - Unknown - Unknown - {expire} - - - SAME - {EVENT_second} - - - QuantumENDEC Internal - {EVENT_second} - {data['broadcastText_second']} - - - layer:SOREM:1.0:Broadcast_Text - {data['broadcastText_second']} - - - - EAS-ORG - {data['ORG_second']} - - - - Specified Locations - - SAME - {data['FIPS_second']} - - - - """ - else: secondInfo = "" - - finalXML = f""" - - QuantumENDECinternal - {res} - {sent} - Actual - Alert - This file is NOT supposed to find its way to the Pelmorex NAADs system, it's impossibe for it to be there... if it's there, it's not supposed to be there. - This is an QuantumENDEC internal alert - - - {data['LANGUAGE']} - {Cate} - internal - Unknown - Unknown - Unknown - {expire} - - - SAME - {EVENT} - - - QuantumENDEC Internal - {EVENT} - {data['broadcastText']} - - - layer:SOREM:1.0:Broadcast_Text - {data['broadcastText']} - - - - EAS-ORG - {data['ORG']} - - - - Specified Locations - - SAME - {data['FIPS']} - - - - {secondInfo} - - """ - filenameXML = f"{sent.replace(':', '_')}I{res}.xml" - print(f"Creating alert: {filenameXML}") - with open(f"XMLqueue/{filenameXML}", "w", encoding="utf-8") as file: file.write(finalXML) - return 'Alert XML created successfully.' - -@app.before_request -def require_login(): - if request.path not in ['/login', '/login.html', '/scroll.html', '/alertText', '/css/scrollStyle.css', '/fullscreen.html', '/Jstyle.html', '/images/alertImage.png', '/fullscreenWimage.html']: - if not is_authenticated(): - return redirect(url_for('login')) - -@app.route('/login', methods=['GET', 'POST']) -def login(): - if request.method == 'POST': - data = request.json - password_hash = hashlib.sha256(data['password'].encode()).hexdigest() - - if password_hash == load_password(): - session_id = create_session() - response = jsonify(message='Login successful.') - response.set_cookie(SESSION_COOKIE_NAME, session_id, httponly=True) - return response - else: - return jsonify(message='Incorrect password.'), 403 - - # Render login page if GET request - return make_response(open('login.html').read()) - -@app.route('/upload_config', methods=['POST']) -def upload_config(): - SAVE_PATH = 'config.json' - if 'file' not in request.files: - return jsonify({'error': 'No file part'}), 400 - - file = request.files['file'] - if file.filename == '': - return jsonify({'error': 'No selected file'}), 400 - - if not file.filename.endswith('.json'): - return jsonify({'error': 'Only JSON files are accepted'}), 400 - - file.save(SAVE_PATH) - return jsonify({'success': 'File uploaded and saved as config.json'}), 200 - -@app.route('/upload_leadin', methods=['POST']) -def upload_leadin(): - SAVE_PATH = 'Audio/pre.wav' - if 'file' not in request.files: - return jsonify({'error': 'No file part'}), 400 - - file = request.files['file'] - if file.filename == '': - return jsonify({'error': 'No selected file'}), 400 - - if not file.filename.endswith('.wav'): - return jsonify({'error': 'Only wav files are accepted'}), 400 - - file.save(SAVE_PATH) - return jsonify({'success': 'File uploaded and saved'}), 200 - -@app.route('/upload_leadout', methods=['POST']) -def upload_leadout(): - SAVE_PATH = 'Audio/post.wav' - if 'file' not in request.files: - return jsonify({'error': 'No file part'}), 400 - - file = request.files['file'] - if file.filename == '': - return jsonify({'error': 'No selected file'}), 400 - - if not file.filename.endswith('.wav'): - return jsonify({'error': 'Only wav files are accepted'}), 400 - - file.save(SAVE_PATH) - return jsonify({'success': 'File uploaded and saved'}), 200 - -@app.route('/remove_Leadin', methods=['POST']) -def removeLeadin(): - try: - os.remove("Audio/pre.wav") - return jsonify({'success': 'Lead in audio removed'}) - except: - return jsonify({'error': 'Failed to remove Lead in audio'}) - -@app.route('/remove_Leadout', methods=['POST']) -def removeLeadout(): - try: - os.remove("Audio/post.wav") - return jsonify({'success': 'Lead out audio removed'}) - except: - return jsonify({'error': 'Failed to remove Lead out audio'}) - -@app.route('/alertText') -def GetAlertText(): - #with open("alert.txt", "r") as f: alertText = f.read() - #return alertText - try: - with open("AlertText.json", "r") as f: alertText = json.load(f) - return jsonify(alertText) - except: - nothingThing = { - "nothing":True - } - return jsonify(nothingThing) - -@app.route('/') -def home(): - return send_from_directory('web', 'index.html') - #return make_response(open('index.html').read()) - -@app.after_request -def add_header(response): - response.headers['Cache-Control'] = 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=0' - response.headers['Pragma'] = 'no-cache' - response.headers['Expires'] = '-1' - return response - -@app.route('/') -def static_files(path): - # Serve HTML files from the 'web' folder - if path.endswith('.html'): - return send_from_directory('web', path) - # Serve static files (CSS, JS, images) from the same directory as the Flask script - return send_from_directory('', path) - #return send_from_directory('', path) - - -import logging - -def StartWEB(HOST, PORT): - logging.getLogger('werkzeug').setLevel(logging.ERROR) - app.run(host=HOST, port=PORT, debug=False) - -if __name__ == '__main__': - PORT = 8050 - StartWEB("0.0.0.0", PORT)