daviddao commited on
Commit
c62379b
Β·
1 Parent(s): b65a84e

updatable script

Browse files
Files changed (5) hide show
  1. redis2sheets_img.py +8 -2
  2. redisList.py +28 -0
  3. sql2predict.py +96 -0
  4. sql2redis.py +70 -39
  5. uuids.json +1 -0
redis2sheets_img.py CHANGED
@@ -18,8 +18,14 @@ for i_key in redis_keys:
18
  image_id = i_key.decode().split(':')[-2]
19
  raw_image_data_bytes = r.hgetall(f'image:{image_id}'.encode('utf-8'))
20
  raw_image_data = {k.decode('utf-8'): v.decode('utf-8') for k, v in raw_image_data_bytes.items()}
21
- path = f'https://gainforest-transparency-dashboard.s3.amazonaws.com/{raw_image_data["awsCID"]}'
22
- dashboard_url = f'https://gainforest.app/observations/{raw_image_data["uuid"]}'
 
 
 
 
 
 
23
  row = [image_id, i_key.decode().split(':')[-1], image_data['author'], image_data['author_id'], image_data['role'], image_data['timestamp'], image_data['label'], image_data['confidence'], path, dashboard_url,'=IMAGE("{}", 2)'.format(path)]
24
  rows.append(row)
25
 
 
18
  image_id = i_key.decode().split(':')[-2]
19
  raw_image_data_bytes = r.hgetall(f'image:{image_id}'.encode('utf-8'))
20
  raw_image_data = {k.decode('utf-8'): v.decode('utf-8') for k, v in raw_image_data_bytes.items()}
21
+ try:
22
+ path = f'https://gainforest-transparency-dashboard.s3.amazonaws.com/{raw_image_data["awsCID"]}'
23
+ except:
24
+ path = f'https://twitter.com/GainForestNow/photo.jpg'
25
+ try:
26
+ dashboard_url = f'https://gainforest.app/observations/{raw_image_data["uuid"]}'
27
+ except:
28
+ dashboard_url = f'no'
29
  row = [image_id, i_key.decode().split(':')[-1], image_data['author'], image_data['author_id'], image_data['role'], image_data['timestamp'], image_data['label'], image_data['confidence'], path, dashboard_url,'=IMAGE("{}", 2)'.format(path)]
30
  rows.append(row)
31
 
redisList.py ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import redis
2
+ import json
3
+
4
+ redis_url = 'redis://default:[email protected]:7369'
5
+ r = redis.from_url(redis_url)
6
+ uuids = []
7
+
8
+ redis_keys = r.keys('image:*')
9
+ for i_key in redis_keys:
10
+ image_data_bytes = r.hgetall(i_key)
11
+ image_data = {k.decode('utf-8'): v.decode('utf-8') for k, v in image_data_bytes.items()}
12
+ try:
13
+ uuids.append(image_data['uuid'])
14
+ except:
15
+ print(i_key)
16
+
17
+ # Save the UUIDs to a file
18
+ with open('uuids.json', 'w') as file:
19
+ json.dump(uuids, file)
20
+
21
+ print('UUIDs saved to uuids.json')
22
+
23
+ # # Read the JSON file
24
+ # with open('./uuids.json', 'r') as file:
25
+ # uuid_list = json.load(file)
26
+
27
+ # # Access the list
28
+ # print(uuid_list == uuids)
sql2predict.py ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import redis
2
+ import psycopg2
3
+ from gradio_client import Client
4
+ import json
5
+ from datetime import datetime
6
+
7
+ redis_url = 'redis://default:[email protected]:7369'
8
+ r = redis.from_url(redis_url)
9
+ # run josh's algorithm
10
+ client = Client("https://diverseco-metaformer.hf.space/")
11
+
12
+ # Postgres database get the observations
13
+ def connect():
14
+ conn = None
15
+ try:
16
+ # Connecting to your PostgreSQL server
17
+ print('Connecting to the PostgreSQL database...')
18
+ conn = psycopg2.connect('postgresql://postgres:[email protected]:7297/railway')
19
+ # conn = psycopg2.connect('postgresql://postgres:[email protected]:6771/railway') #staging
20
+ # conn = psycopg2.connect('postgresql://postgres:[email protected]:5772/railway') #development
21
+
22
+ except (Exception, psycopg2.DatabaseError) as error:
23
+ print(error)
24
+
25
+ print("Connection successful")
26
+ return conn
27
+
28
+ def predict_images():
29
+ query = """SELECT "id", "awsCID", "name" FROM "Asset" WHERE "projectId" = 37 AND "classification" = 'Camera Traps'"""
30
+ conn = connect()
31
+ cur = conn.cursor()
32
+
33
+ try:
34
+ # Execute a simple SQL command
35
+ cur.execute(query)
36
+
37
+ # Fetch all the data returned by the database
38
+ rows = cur.fetchall()
39
+ for row in rows:
40
+ image_cnt = generate_id('cnt:predict:image')
41
+ # Set multiple field-value pairs using HMSET
42
+ # Convert the date string to a datetime object
43
+ # date_obj = datetime.strptime(row[2].split('_')[1], "%Y%m%d%H%M%S")
44
+
45
+ # # Format the datetime object to the desired format
46
+ # formatted_date = date_obj.strftime("%d/%m/%Y %H:%M")
47
+ # fields_values = {
48
+ # 'uuid': row[0],
49
+ # 'awsCID': row[1],
50
+ # 'name': row[2],
51
+ # 'sensor': 'M300/RGB',
52
+ # 'label': '❓',
53
+ # 'author': '❓',
54
+ # 'timestamp': formatted_date
55
+ # }
56
+ # r.hmset(f'image:{image_cnt}', fields_values)
57
+
58
+ image_url = f'https://gainforest-transparency-dashboard.s3.amazonaws.com/{row[1]}'
59
+ print(f'predicting {image_url}')
60
+
61
+ result = client.predict(
62
+ image_url,
63
+ api_name="/predict"
64
+ )
65
+
66
+ with open(result, 'r') as file:
67
+ json_data = json.load(file)
68
+
69
+ # Extract labels and confidences from JSON data
70
+ labels = [data['label'] for data in json_data['confidences']]
71
+ confidences = [data['confidence'] for data in json_data['confidences']]
72
+
73
+ # Store labels and confidences in Redis using HMSET
74
+ for label, confidence in zip(labels, confidences):
75
+ pred_cnt = generate_id(f'cnt:prediction:{image_cnt}')
76
+ fields_values = {
77
+ 'label': label,
78
+ 'confidence': confidence,
79
+ }
80
+ r.hmset(f'prediction:{image_cnt}:{pred_cnt}', fields_values)
81
+
82
+
83
+ except (Exception, psycopg2.DatabaseError) as error:
84
+ print(error)
85
+
86
+ finally:
87
+ # Close the cursor and connection
88
+ cur.close()
89
+ conn.close()
90
+ r.close()
91
+
92
+ # Function to generate auto-incremented IDs
93
+ def generate_id(key):
94
+ return r.incr(key)
95
+
96
+ predict_images()
sql2redis.py CHANGED
@@ -2,6 +2,13 @@ import redis
2
  import psycopg2
3
  from gradio_client import Client
4
  import json
 
 
 
 
 
 
 
5
 
6
  redis_url = 'redis://default:[email protected]:7369'
7
  r = redis.from_url(redis_url)
@@ -25,7 +32,7 @@ def connect():
25
  return conn
26
 
27
  def get_all_images():
28
- query = """SELECT "id", "awsCID" FROM "Asset" WHERE "projectId" = 37 AND "classification" = 'Camera Traps'"""
29
  conn = connect()
30
  cur = conn.cursor()
31
 
@@ -36,41 +43,65 @@ def get_all_images():
36
  # Fetch all the data returned by the database
37
  rows = cur.fetchall()
38
  for row in rows:
39
- image_cnt = generate_id('cnt:image')
40
  # Set multiple field-value pairs using HMSET
41
- fields_values = {
42
- 'uuid': row[0],
43
- 'awsCID': row[1],
44
- 'sensor': 'Rover/RGB',
45
- 'label': '❓',
46
- 'author': '❓',
47
- 'timestamp': '❓'
48
- }
49
- r.hmset(f'image:{image_cnt}', fields_values)
50
-
51
- image_url = f'https://gainforest-transparency-dashboard.s3.amazonaws.com/{row[1]}'
52
- print(f'predicting {image_url}')
53
-
54
- result = client.predict(
55
- image_url,
56
- api_name="/predict"
57
- )
58
-
59
- with open(result, 'r') as file:
60
- json_data = json.load(file)
61
-
62
- # Extract labels and confidences from JSON data
63
- labels = [data['label'] for data in json_data['confidences']]
64
- confidences = [data['confidence'] for data in json_data['confidences']]
65
-
66
- # Store labels and confidences in Redis using HMSET
67
- for label, confidence in zip(labels, confidences):
68
- pred_cnt = generate_id(f'cnt:prediction:{image_cnt}')
69
- fields_values = {
70
- 'label': label,
71
- 'confidence': confidence,
72
- }
73
- r.hmset(f'prediction:{image_cnt}:{pred_cnt}', fields_values)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
74
 
75
 
76
  except (Exception, psycopg2.DatabaseError) as error:
@@ -99,11 +130,11 @@ def get_all_sounds():
99
  fields_values = {
100
  'uuid': row[0],
101
  'awsCID': row[1],
102
- 'sensor': 'Speedybee/Acoustic',
103
  'label': '❓',
104
  'author': '❓',
105
  'label_at': '❓',
106
- 'timestamp': '❓'
107
  }
108
  r.hmset(f'sound:{sound_cnt}', fields_values)
109
 
@@ -120,6 +151,6 @@ def get_all_sounds():
120
  def generate_id(key):
121
  return r.incr(key)
122
 
123
- r.flushdb()
124
  get_all_images()
125
- get_all_sounds()
 
2
  import psycopg2
3
  from gradio_client import Client
4
  import json
5
+ from datetime import datetime
6
+ import json
7
+
8
+ # Read the JSON file
9
+ # Read the JSON file
10
+ with open('./uuids.json', 'r') as file:
11
+ uuid_list = json.load(file)
12
 
13
  redis_url = 'redis://default:[email protected]:7369'
14
  r = redis.from_url(redis_url)
 
32
  return conn
33
 
34
  def get_all_images():
35
+ query = """SELECT "id", "awsCID", "name" FROM "Asset" WHERE "projectId" = 37 AND "classification" = 'Camera Traps'"""
36
  conn = connect()
37
  cur = conn.cursor()
38
 
 
43
  # Fetch all the data returned by the database
44
  rows = cur.fetchall()
45
  for row in rows:
 
46
  # Set multiple field-value pairs using HMSET
47
+ # Convert the date string to a datetime object
48
+ if row[0] not in uuid_list:
49
+ print(row[0])
50
+ image_cnt = generate_id('cnt:image')
51
+ if row[2].split('_')[0] == 'DJI':
52
+ print(f'adding DJI M300: {row[2]}')
53
+ date_obj = datetime.strptime(row[2].split('_')[1], "%Y%m%d%H%M%S")
54
+
55
+ # Format the datetime object to the desired format
56
+ formatted_date = date_obj.strftime("%d/%m/%Y %H:%M")
57
+ fields_values = {
58
+ 'uuid': row[0],
59
+ 'awsCID': row[1],
60
+ 'name': row[2],
61
+ 'sensor': 'M300/RGB',
62
+ 'label': '❓',
63
+ 'author': '❓',
64
+ 'timestamp': formatted_date
65
+ }
66
+ r.hmset(f'image:{image_cnt}', fields_values)
67
+
68
+ else:
69
+ print(f'adding Rover: {row[2]}')
70
+ # Format the datetime object to the desired format
71
+ fields_values = {
72
+ 'uuid': row[0],
73
+ 'awsCID': row[1],
74
+ 'name': row[2],
75
+ 'sensor': 'Rover/RGB',
76
+ 'label': '❓',
77
+ 'author': '❓',
78
+ 'timestamp': row[2].split('_')[0]
79
+ }
80
+ r.hmset(f'image:{image_cnt}', fields_values)
81
+
82
+ # image_url = f'https://gainforest-transparency-dashboard.s3.amazonaws.com/{row[1]}'
83
+ # print(f'predicting {image_url}')
84
+
85
+ # result = client.predict(
86
+ # image_url,
87
+ # api_name="/predict"
88
+ # )
89
+
90
+ # with open(result, 'r') as file:
91
+ # json_data = json.load(file)
92
+
93
+ # # Extract labels and confidences from JSON data
94
+ # labels = [data['label'] for data in json_data['confidences']]
95
+ # confidences = [data['confidence'] for data in json_data['confidences']]
96
+
97
+ # # Store labels and confidences in Redis using HMSET
98
+ # for label, confidence in zip(labels, confidences):
99
+ # pred_cnt = generate_id(f'cnt:prediction:{image_cnt}')
100
+ # fields_values = {
101
+ # 'label': label,
102
+ # 'confidence': confidence,
103
+ # }
104
+ # r.hmset(f'prediction:{image_cnt}:{pred_cnt}', fields_values)
105
 
106
 
107
  except (Exception, psycopg2.DatabaseError) as error:
 
130
  fields_values = {
131
  'uuid': row[0],
132
  'awsCID': row[1],
133
+ 'sensor': 'Rover/Acoustic',
134
  'label': '❓',
135
  'author': '❓',
136
  'label_at': '❓',
137
+ 'timestamp': '6th June 2023, 6 am'
138
  }
139
  r.hmset(f'sound:{sound_cnt}', fields_values)
140
 
 
151
  def generate_id(key):
152
  return r.incr(key)
153
 
154
+ # r.flushdb()
155
  get_all_images()
156
+ # get_all_sounds()
uuids.json ADDED
@@ -0,0 +1 @@
 
 
1
+ ["aa709960-e359-479b-ab8d-2105666d58ff", "fcc5073d-09bc-4c84-b686-411d80aea2bd", "87add743-271e-4cbc-8334-ca607bb216e3", "934d6ade-0c41-4c91-8591-dfa42205665e", "6ebac702-a0dc-491f-8b36-fd112f1da5ef", "6d6250be-c6ff-4a7a-b7be-8d92c203cab8", "a07914c3-9838-4af2-a2d5-4d25102a8a06", "1e0fe1ae-0d5c-4230-9b95-b7c77e9e69ce", "afef5dcc-e92c-4bc2-8d43-91f8e32a5d74", "fa0063d8-d5e7-4088-9016-59168e6aecc9", "6723af5a-a6f4-4445-b8de-746a4d7e5708", "bd64d819-5669-404b-bbe6-eeee2b99fc20", "ff081add-043a-4df6-baa3-21a36d3bc097", "a6b95e99-abbd-4e73-8ce6-e449cf981753", "f717ef3a-45af-4208-8f75-b28dd5c72855", "150f89b5-09cf-4411-a254-ca7a8255e612", "8fea38b1-5425-4dd1-824b-edead56a58fb", "2209d127-e94c-477f-87b7-f18d170622dc", "956e01f5-2a27-4aa5-8bff-d8b95c25983c", "47060014-bf76-4d6b-bfe7-9cd6a4324e69", "b8fe4567-c309-4fc0-8ada-26c43c4afb6a", "c22ed793-df3b-47f1-94ef-923a7eaf7454", "6b4df3b2-5f7e-4940-9e53-9a0e16f891ea", "7821dd0d-6dd2-473c-ac5a-1fe595f88f50", "5409728a-925b-4bdc-b250-6640ca82b4e9", "7aceb2f3-be7a-4450-99db-f88a01cf9797", "a8eb6198-5640-4f6d-a10f-ec496f4b3df0", "628da910-b568-4b80-ae06-a087240bbb98", "076e5ccf-e7ef-484e-8c96-617733d06f09", "29bc7bb2-0bb0-4d1e-986a-b9b65cb3dc4e", "b3d165c5-4f53-4a1e-9de0-609ec1514a04", "bcc4bb84-a21f-4683-abc8-e43139d184c8", "a61651f9-e01a-407e-a0a1-00b789df588e", "a49df16f-d848-4d82-840f-c1cb5b115c0a", "6e44ab58-d735-4244-b751-6f95687e09d9", "8dbc69b8-6f80-4c27-b99e-147586e3aef7", "686eeeaf-963c-4306-9977-ef6f4825526d", "a6744dbd-9f3e-402f-ba14-d26bf2b1ee9f", "b1482bc1-0b05-414d-af8c-919a786e6e24", "73748a5d-9d32-4648-80ae-d746435c1d25", "4a6a63b9-acfc-4527-b8a1-b6d978da43fd", "fc9deccf-6306-4661-8a75-3be23ff54170", "4be9688b-e756-479b-89f1-754ac02060f2", "7bfc4329-3ac5-4015-8e0c-351360c3de12", "0e1a7e7a-d4c7-4c9d-ba82-7ff12682ee97", "653d8796-7096-4ff0-8a34-ba9da853c3d6", "fabc1b56-30bb-468b-874d-e4bcece0800d", "1dc3d9c8-3899-4f7e-9e21-5306cf2b0785", "82e86018-1e25-482d-9e93-954512b5a65b", "8bc25292-030e-42f2-94e0-7ebe2ede87a1", "51039d31-661c-4e9f-b5bf-c3e674b04dfe", "726c7cae-1980-4cc7-95b1-16a19805a4d2", "9b67e7df-5c9d-4e41-adf2-7c351748b6c5", "95368698-9c17-4960-b386-2ce0f667620d", "8c04c37c-bf42-446c-94a3-b4c0ea1b66b6", "2e6506a5-9175-4cf0-9000-57915e520d8d", "2c1bb8f3-b57b-417b-b7eb-f08dd790bd5b", "c5ba33a5-cbf6-44aa-a8a6-16e21d56a381", "d67ad26c-10fc-410d-b98e-067e137508dc", "880e30ee-f480-43f0-8d78-024bf576a1b4", "8575a0ff-218a-45a1-8c63-62eb6aef146e", "a4cd5139-ccf6-4c4f-9084-78d1f768559e", "845e44a5-0e8a-444e-b78b-ec5e70fdf7a0", "aafe2dd4-b102-41a9-b194-744057939d60", "b56fae77-1a2f-4e7b-8214-fdca11be487d", "6270f852-647e-4728-8b49-2086532f6e1d", "ccb62204-6463-43f3-bb80-b680a5edbd7a", "c29de73f-4b49-4d4d-bcea-8942d36854dc", "19c99e46-a966-4c92-957d-76b71f1bb957", "9e116f4a-8e92-4711-a211-b92d34439d33", "94b5475e-8ee0-4733-892d-5ad38fc1aa4b", "4184339b-6cd0-4a80-9c1e-0289a43d30a0", "4f72b8bb-5d2e-4dbc-8873-f353f6dd9046", "89f6b1ea-514e-4462-9f39-edc6a85e5683", "ecb9303e-fc29-40e7-8783-ec01c5b7bcdb", "ca3eb53a-56ea-4393-9d81-7a45eb9f1ae8", "afc351e6-0bc9-42a5-94b4-7d032100dd36", "9909b01f-695a-4dd4-84e9-4416d54323e6", "4438c48c-18b2-466a-ad4f-78086202c0c0", "e3c350ff-7875-4913-98af-70511284ac7b", "559532f3-6bce-4d5c-ba0c-aba73b2811c6", "b77672fe-1660-4272-9987-edb47182bb73", "b655b8fe-bc24-4e09-b83f-8dbd58f23754", "5fb6c6b2-c8c6-4879-8caf-ec79181779a7", "1625e7ec-3c40-48e2-85e4-5d11376b6516", "cfedcd5e-e329-430d-9c54-8a99de7ec935", "c2806299-af52-417f-98c8-8b6173ce6d61", "e2f8fd69-0574-4836-a553-78f678571d0a", "f28cf2a0-4f4d-4485-a25c-11fe41b1a42b", "cc974958-8ab9-42eb-887d-510882b163c3", "1570b375-6033-4d5e-bba7-2698848f5fc4", "1d9af947-e0f1-4cf6-9ff5-e3e827bb1712", "9229175b-71e2-4fc9-9373-7a4d87266844", "6dc676f1-7055-4087-9ebb-11734692da04", "db258f25-0826-4aea-9671-86328a39a919", "3d4b603e-70fc-43d6-93d3-ccfe190e0483", "0d3f4fd9-6c4a-4cd0-b065-e8e7b6ae8d47", "fcc24225-6bd1-4216-b801-96ee43722f38", "0c8dccbc-a84e-48db-bd90-da47bcab54a8", "db9cb210-58ba-476f-a06a-4530a893e24c", "1c3ece80-a3bb-48de-8b69-9427e92030a1", "cf76ec81-f8c1-4c3e-a5d3-dc8a7e9d69ab", "d5a0407b-56ac-4f43-9603-1a65a10864bd", "9f62f5d9-cbab-4207-b7e4-b0cb88a90e2b", "019ad7ca-f167-4e17-88c4-06f9fe6777b9", "5340cdc5-de27-40fe-8635-ebebac905b5e", "0707b952-0673-4a81-9096-07587563e603", "9cdbcc54-3476-490b-97ce-67dd43b92620", "b365acfe-96d2-4d92-8a35-a4fef2032940", "f95ea71f-ab67-4327-8f34-795fc0303343", "5c56fc30-542c-4c8c-8891-4b0ee967509f", "b465c3cb-ab12-4b70-9798-2b1b194e3c4d", "c1c8dfea-fb5c-4e04-8e39-483c423a3146", "da26ee9a-e298-49f2-a3c3-70625071393b", "045540b7-0437-43cf-b84d-854c50c5c2dc", "4cabbb5a-b053-4a90-b384-06a30fea9816", "b70eb392-7e4d-4c5d-b2df-8385f2535eb8", "4811756d-65fc-469e-b588-12e975dbbbfc", "7c1bbe10-03e3-4203-8a61-1a8f045a597e", "9f025942-d4cd-4950-bee6-588156845e75", "357593ed-6755-4bba-8c8e-9344ec406a01", "de7ff933-699b-45f4-b2e0-4dcd5d2c957b", "b01983b0-d7a3-4182-88a5-30b79645bcc1", "2ab93f66-7f6d-4c19-a5e7-dd55f3e6b189", "f6ab7d4f-5067-467e-ba68-bd730f813f9f", "c815e5c2-3a3a-43c7-9137-a345a7c8f0f3", "65d2ce7c-1f06-42cb-81f8-1327609d8cc7", "613a4a61-e842-49d4-8572-fa202fe836b1", "325eba9b-b48e-4ce1-850b-0026f60f2b3d", "aa0a048c-5e8e-4765-ac88-8b6ebe0ba36d", "5e674a5f-985c-40ab-8e27-ba650ed6bc6e", "1dc80155-3f2a-4b16-af2f-7ef68d5fb225", "fc7be854-d2c2-4d4b-8ab1-5aa558e220e6", "e4a4c41f-6f31-4b46-b01a-77451e430b0b", "ca68e797-f61e-43f1-927a-4ff2c06d3fc0", "2988cc69-1f19-4641-ac82-a454da6f32ae", "36c7dac7-e948-4eb3-9af5-99a43736e98c", "8912321f-88f4-481a-a297-cfcbb079c967", "588fe5c6-1636-40f0-9156-299a5a401bd7", "f7ad6082-1ccd-47ff-aee0-5e7ae784170e", "97f98648-436c-4e8f-be60-5a359082529c", "9be38534-86e0-4af1-a8e9-0bc3974e95f4", "2ae7301c-e796-4e54-a164-5b21c5dde292", "e772a52d-b8f3-4855-a7d5-48458636232b", "b9801201-bb73-4935-9e30-c871c44f9e6f", "2aab4bd8-5d7c-4fe2-ba97-787ba35c6231", "500bd426-bc16-44aa-96c0-c2e981599554", "fe2c9bc3-1f16-4fb5-abf9-4cdd51906faa", "ca9599e7-9ccc-47f8-a6b9-198daad0a368", "3a08bb49-c375-448b-80d4-784fa68e0a89", "066b7e68-9d46-4853-b0ee-3f20a5b7cb8f", "92bb9a32-883a-4000-a03f-f1e294c098a9", "595dc8e0-b780-4fcf-8693-8df34d03b3ae", "18b084d1-0061-4731-b96e-72a69de95974", "61b81a1d-d1e1-4d6e-bf54-ece4f8488da2", "568cf381-26e5-459a-a3ef-aca67f981762", "39272bd7-7a5f-4934-831b-df955f36f9f9", "d227655e-0f4f-4337-80e2-ce4a90ed7412", "3960b026-dff4-4eea-ab45-dee397c0f135", "55478ad6-7d54-4108-a8d9-0051e464eb83", "0117efe1-a962-4480-9cfd-5f7df7eb2d7a", "4f283534-4bd9-4778-80e8-c09bb63a9e20", "effc9941-d351-4118-a84c-5d2363f8e550", "f40a26fe-b564-4a07-a729-49a34ad4f126", "eb5a7a98-0950-4a56-a9e8-552834170206", "71f6084d-0e68-4132-b973-8f4c17c300ed", "2be74743-3f14-45ea-8442-f1ca231d8dc9", "31f2bbc3-fd41-4cc5-a8e2-bc755bf5a9fd", "33b8a1e4-6030-48b9-8056-3e5c5738e62a", "b529171b-8f66-4eb9-b2eb-94973337aa57", "b52d6b3e-de60-4299-ac44-6e00533c397b", "186b97e0-b84f-4385-b6cc-9dfab8be8b1e", "2bc10daa-b91a-4c89-a2cc-b22c2cc1077d", "b3cdaf2c-1ddf-4f57-926c-d1d1d092f965", "1509ecd7-4fbc-4664-ba2a-10f16bc8ef68", "2bf74645-c649-46db-a105-7778d3e8bd97", "656dc57c-43cf-405d-a8bb-662d6ad2fa96", "75161fac-8762-43dd-8ca4-823108b70ab6", "cbe32737-fb2e-43e5-a67c-c1471f07fc85", "e693a5a2-bde8-446e-83a2-352d50c486ea", "337000f1-0518-47a6-8eab-6e3ae14e399a", "a07cae79-fbc4-437b-82bb-86422852a4ab", "5043214f-a722-4909-aab0-9c451de1570c", "c0216181-73f5-412f-9ead-c6a037bc1e42", "66de8ffe-86df-49d8-9aa8-2216b9d9651d", "bb3209c3-ec72-462d-b219-5ec404e1d85a", "c7c7d7f2-6b39-443f-a193-225350de17f6", "759352a3-65a4-44e8-b54f-c63ddb142dbe", "80824c78-069c-4394-8d81-4d5994ac3924", "2a2bd813-8fb2-4335-a587-1f0449105398", "d9c1b9eb-210c-4acf-b737-f4d9172a9774", "1eeb58a4-ef02-4f01-bfa5-a760fd27ed6e", "15e727cb-67ca-4f82-ba5f-e9b132d0fb4b", "1f701553-409b-4d98-b428-73fd07098b07", "01382e96-7863-49aa-a96c-9494f06e70ec", "5b70783f-f6ff-4ce6-98e3-b4390cc16d94", "6801d7e4-659b-47f0-b989-1f31fbbe6fd4", "e01bc42c-b85f-4edb-ae6f-bbd6bdd334a5", "02ace1b9-9277-40a2-868c-d1baf53f3f6d", "3d105ed4-f430-4819-bb53-3b3ec2faad50", "4fb1d73f-620e-4264-a635-5a563628800b", "55313112-ea0b-4cf7-a0d9-610e474f5252", "2d265a11-9525-4714-838d-a8cb90702f20", "6efbca6a-b91d-4671-bab8-2c1a2c881ffe", "e4d8ede3-b5fe-4bb9-8eb5-0ae87c777c40", "b69913dc-666d-4492-beae-c69bdabba82e", "7a760214-5fe9-4f12-9f01-137e66f11743", "adfc699d-8a20-46df-a8cf-a83f47f50011", "8517ef9f-a3f2-47df-b21a-6687dba408e4", "a435d19a-fd1e-4fbf-bbfc-074f7fb2490b", "fff35167-a0f0-4251-bbb9-a7cd5554b25e", "5fd05168-eea3-464e-acc8-9e79fd39952a", "0e757a36-5185-47b0-bde8-b34f4e107186", "79fefc65-1055-4f20-87bf-55b37eb79c65", "b7150f7a-feff-4090-93dd-2115475a72ec", "a7b3e935-5252-40f1-85a3-0dfa258ca31c", "0ab872eb-788b-43f8-96f8-cecd15066e38", "8be8a070-9875-42a6-b0cc-d6742da9f673", "ee58aa5d-fed9-471c-893b-1c91fd4ed112", "b284b9ac-a55d-4e41-8316-be8992ba01a3", "724abec7-312a-45ad-b6fd-fc41c74044b6", "128aae9d-2dec-4350-bec0-19ed01efe965", "a95fc180-6d6d-484d-9495-90db927f9821", "4f4d2d1f-a746-4765-be12-0f74caac4563", "af7717fd-1dbc-4864-9df1-b4417d700a42", "5aa29411-2a58-4d13-98c2-518481b41a86", "290a9e93-4d79-4f77-8194-d3a9f8806d4f", "29dbd5b3-f746-4fc2-b760-b48fe7f8dd6a", "09a26bdd-c402-40b6-a43c-5b5998da74fc", "ab12fe87-9828-422c-bea0-259234bdcb43", "26c72826-8965-41a1-a2a2-639786096e8d", "bb493b71-17cd-41a9-8c69-89010c7c9f7d", "7a655904-be32-46d5-8993-3cd18a047bb4", "924d14f7-59bc-4887-ba5f-0918d93a9d88", "0a77ed83-04c5-4ce0-8623-3491f737be64", "b34c22b0-7af4-4e38-87a4-857cd1237cb5", "ea0ae019-70d7-4017-85f1-a8e5d2eccc3c", "97870cad-9747-4cd4-9686-40493163a7dc", "35f58b57-10d1-4cdf-bca2-7263b954d4dc", "800e03b0-5e08-4913-8836-c8d2baf1b096", "089b7ea5-7728-4482-a5bf-6ebb664e9c17", "c73c99f1-e1bd-4c82-8378-abe5c27133ce", "ab080403-702e-4ba9-abb2-e670f0ad6d38", "f5a2b061-b4a5-4400-a59f-d875fcf57dfc", "c1741277-c231-4030-ab86-ac057ada1f4d", "48412f3a-a2fd-46ed-8bf2-15038ca4cf07", "814cab1f-0fde-4b96-8b4d-c6ab64a32635", "a756c221-9768-4c0c-91a7-c43285827162", "95abec5a-6672-4693-98fb-5f9c3f83a397", "df3ae1fd-eeb6-48f9-917b-9351c838fc69", "ed2edfd0-9fbb-4a37-b0b8-f0d3acd7670f", "d5713a79-f206-4b14-ae0b-34730d1d607f", "c4072925-469a-4497-bedb-2b89ec0ee279", "8765e552-3d5d-4799-9097-cf95bbfc4146", "1a622906-7125-4201-836d-f7862284edf6", "9e0d9c70-7388-47af-ba60-c89ec16b010a", "1c993659-a24b-4b5d-8251-5c1803c82862", "5c988aaa-4a07-4e9c-b828-d353090e426f"]