aws-sdk-braket 1.56.0 → 1.57.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/VERSION +1 -1
- data/lib/aws-sdk-braket/client.rb +248 -229
- data/lib/aws-sdk-braket/client_api.rb +101 -77
- data/lib/aws-sdk-braket/errors.rb +10 -0
- data/lib/aws-sdk-braket/types.rb +580 -477
- data/lib/aws-sdk-braket.rb +1 -1
- data/sig/client.rbs +88 -86
- data/sig/errors.rbs +2 -0
- data/sig/types.rbs +91 -73
- metadata +3 -3
data/sig/types.rbs
CHANGED
@@ -13,9 +13,16 @@ module Aws::Braket
|
|
13
13
|
SENSITIVE: []
|
14
14
|
end
|
15
15
|
|
16
|
+
class ActionMetadata
|
17
|
+
attr_accessor action_type: ::String
|
18
|
+
attr_accessor program_count: ::Integer
|
19
|
+
attr_accessor executable_count: ::Integer
|
20
|
+
SENSITIVE: []
|
21
|
+
end
|
22
|
+
|
16
23
|
class AlgorithmSpecification
|
17
|
-
attr_accessor container_image: Types::ContainerImage
|
18
24
|
attr_accessor script_mode_config: Types::ScriptModeConfig
|
25
|
+
attr_accessor container_image: Types::ContainerImage
|
19
26
|
SENSITIVE: []
|
20
27
|
end
|
21
28
|
|
@@ -31,20 +38,20 @@ module Aws::Braket
|
|
31
38
|
end
|
32
39
|
|
33
40
|
class CancelJobResponse
|
34
|
-
attr_accessor cancellation_status: ("CANCELLING" | "CANCELLED")
|
35
41
|
attr_accessor job_arn: ::String
|
42
|
+
attr_accessor cancellation_status: ("CANCELLING" | "CANCELLED")
|
36
43
|
SENSITIVE: []
|
37
44
|
end
|
38
45
|
|
39
46
|
class CancelQuantumTaskRequest
|
40
|
-
attr_accessor client_token: ::String
|
41
47
|
attr_accessor quantum_task_arn: ::String
|
48
|
+
attr_accessor client_token: ::String
|
42
49
|
SENSITIVE: []
|
43
50
|
end
|
44
51
|
|
45
52
|
class CancelQuantumTaskResponse
|
46
|
-
attr_accessor cancellation_status: ("CANCELLING" | "CANCELLED")
|
47
53
|
attr_accessor quantum_task_arn: ::String
|
54
|
+
attr_accessor cancellation_status: ("CANCELLING" | "CANCELLED")
|
48
55
|
SENSITIVE: []
|
49
56
|
end
|
50
57
|
|
@@ -59,19 +66,19 @@ module Aws::Braket
|
|
59
66
|
end
|
60
67
|
|
61
68
|
class CreateJobRequest
|
62
|
-
attr_accessor algorithm_specification: Types::AlgorithmSpecification
|
63
|
-
attr_accessor associations: ::Array[Types::Association]
|
64
|
-
attr_accessor checkpoint_config: Types::JobCheckpointConfig
|
65
69
|
attr_accessor client_token: ::String
|
66
|
-
attr_accessor
|
67
|
-
attr_accessor hyper_parameters: ::Hash[::String, ::String]
|
70
|
+
attr_accessor algorithm_specification: Types::AlgorithmSpecification
|
68
71
|
attr_accessor input_data_config: ::Array[Types::InputFileConfig]
|
69
|
-
attr_accessor instance_config: Types::InstanceConfig
|
70
|
-
attr_accessor job_name: ::String
|
71
72
|
attr_accessor output_data_config: Types::JobOutputDataConfig
|
73
|
+
attr_accessor checkpoint_config: Types::JobCheckpointConfig
|
74
|
+
attr_accessor job_name: ::String
|
72
75
|
attr_accessor role_arn: ::String
|
73
76
|
attr_accessor stopping_condition: Types::JobStoppingCondition
|
77
|
+
attr_accessor instance_config: Types::InstanceConfig
|
78
|
+
attr_accessor hyper_parameters: ::Hash[::String, ::String]
|
79
|
+
attr_accessor device_config: Types::DeviceConfig
|
74
80
|
attr_accessor tags: ::Hash[::String, ::String]
|
81
|
+
attr_accessor associations: ::Array[Types::Association]
|
75
82
|
SENSITIVE: []
|
76
83
|
end
|
77
84
|
|
@@ -81,16 +88,16 @@ module Aws::Braket
|
|
81
88
|
end
|
82
89
|
|
83
90
|
class CreateQuantumTaskRequest
|
84
|
-
attr_accessor action: ::String
|
85
|
-
attr_accessor associations: ::Array[Types::Association]
|
86
91
|
attr_accessor client_token: ::String
|
87
92
|
attr_accessor device_arn: ::String
|
88
93
|
attr_accessor device_parameters: ::String
|
89
|
-
attr_accessor
|
94
|
+
attr_accessor shots: ::Integer
|
90
95
|
attr_accessor output_s3_bucket: ::String
|
91
96
|
attr_accessor output_s3_key_prefix: ::String
|
92
|
-
attr_accessor
|
97
|
+
attr_accessor action: ::String
|
93
98
|
attr_accessor tags: ::Hash[::String, ::String]
|
99
|
+
attr_accessor job_token: ::String
|
100
|
+
attr_accessor associations: ::Array[Types::Association]
|
94
101
|
SENSITIVE: []
|
95
102
|
end
|
96
103
|
|
@@ -116,8 +123,8 @@ module Aws::Braket
|
|
116
123
|
|
117
124
|
class DeviceQueueInfo
|
118
125
|
attr_accessor queue: ("QUANTUM_TASKS_QUEUE" | "JOBS_QUEUE")
|
119
|
-
attr_accessor queue_priority: ("Normal" | "Priority")
|
120
126
|
attr_accessor queue_size: ::String
|
127
|
+
attr_accessor queue_priority: ("Normal" | "Priority")
|
121
128
|
SENSITIVE: []
|
122
129
|
end
|
123
130
|
|
@@ -129,9 +136,9 @@ module Aws::Braket
|
|
129
136
|
class DeviceSummary
|
130
137
|
attr_accessor device_arn: ::String
|
131
138
|
attr_accessor device_name: ::String
|
132
|
-
attr_accessor device_status: ("ONLINE" | "OFFLINE" | "RETIRED")
|
133
|
-
attr_accessor device_type: ("QPU" | "SIMULATOR")
|
134
139
|
attr_accessor provider_name: ::String
|
140
|
+
attr_accessor device_type: ("QPU" | "SIMULATOR")
|
141
|
+
attr_accessor device_status: ("ONLINE" | "OFFLINE" | "RETIRED")
|
135
142
|
SENSITIVE: []
|
136
143
|
end
|
137
144
|
|
@@ -142,74 +149,76 @@ module Aws::Braket
|
|
142
149
|
|
143
150
|
class GetDeviceResponse
|
144
151
|
attr_accessor device_arn: ::String
|
145
|
-
attr_accessor device_capabilities: ::String
|
146
152
|
attr_accessor device_name: ::String
|
147
|
-
attr_accessor device_queue_info: ::Array[Types::DeviceQueueInfo]
|
148
|
-
attr_accessor device_status: ("ONLINE" | "OFFLINE" | "RETIRED")
|
149
|
-
attr_accessor device_type: ("QPU" | "SIMULATOR")
|
150
153
|
attr_accessor provider_name: ::String
|
154
|
+
attr_accessor device_type: ("QPU" | "SIMULATOR")
|
155
|
+
attr_accessor device_status: ("ONLINE" | "OFFLINE" | "RETIRED")
|
156
|
+
attr_accessor device_capabilities: ::String
|
157
|
+
attr_accessor device_queue_info: ::Array[Types::DeviceQueueInfo]
|
151
158
|
SENSITIVE: []
|
152
159
|
end
|
153
160
|
|
154
161
|
class GetJobRequest
|
155
|
-
attr_accessor additional_attribute_names: ::Array[("QueueInfo")]
|
156
162
|
attr_accessor job_arn: ::String
|
163
|
+
attr_accessor additional_attribute_names: ::Array[("QueueInfo")]
|
157
164
|
SENSITIVE: []
|
158
165
|
end
|
159
166
|
|
160
167
|
class GetJobResponse
|
161
|
-
attr_accessor
|
162
|
-
attr_accessor
|
163
|
-
attr_accessor
|
164
|
-
attr_accessor checkpoint_config: Types::JobCheckpointConfig
|
165
|
-
attr_accessor created_at: ::Time
|
166
|
-
attr_accessor device_config: Types::DeviceConfig
|
167
|
-
attr_accessor ended_at: ::Time
|
168
|
-
attr_accessor events: ::Array[Types::JobEventDetails]
|
168
|
+
attr_accessor status: ("QUEUED" | "RUNNING" | "COMPLETED" | "FAILED" | "CANCELLING" | "CANCELLED")
|
169
|
+
attr_accessor job_arn: ::String
|
170
|
+
attr_accessor role_arn: ::String
|
169
171
|
attr_accessor failure_reason: ::String
|
172
|
+
attr_accessor job_name: ::String
|
170
173
|
attr_accessor hyper_parameters: ::Hash[::String, ::String]
|
171
174
|
attr_accessor input_data_config: ::Array[Types::InputFileConfig]
|
172
|
-
attr_accessor instance_config: Types::InstanceConfig
|
173
|
-
attr_accessor job_arn: ::String
|
174
|
-
attr_accessor job_name: ::String
|
175
175
|
attr_accessor output_data_config: Types::JobOutputDataConfig
|
176
|
-
attr_accessor queue_info: Types::HybridJobQueueInfo
|
177
|
-
attr_accessor role_arn: ::String
|
178
|
-
attr_accessor started_at: ::Time
|
179
|
-
attr_accessor status: ("QUEUED" | "RUNNING" | "COMPLETED" | "FAILED" | "CANCELLING" | "CANCELLED")
|
180
176
|
attr_accessor stopping_condition: Types::JobStoppingCondition
|
177
|
+
attr_accessor checkpoint_config: Types::JobCheckpointConfig
|
178
|
+
attr_accessor algorithm_specification: Types::AlgorithmSpecification
|
179
|
+
attr_accessor instance_config: Types::InstanceConfig
|
180
|
+
attr_accessor created_at: ::Time
|
181
|
+
attr_accessor started_at: ::Time
|
182
|
+
attr_accessor ended_at: ::Time
|
183
|
+
attr_accessor billable_duration: ::Integer
|
184
|
+
attr_accessor device_config: Types::DeviceConfig
|
185
|
+
attr_accessor events: ::Array[Types::JobEventDetails]
|
181
186
|
attr_accessor tags: ::Hash[::String, ::String]
|
187
|
+
attr_accessor queue_info: Types::HybridJobQueueInfo
|
188
|
+
attr_accessor associations: ::Array[Types::Association]
|
182
189
|
SENSITIVE: []
|
183
190
|
end
|
184
191
|
|
185
192
|
class GetQuantumTaskRequest
|
186
|
-
attr_accessor additional_attribute_names: ::Array[("QueueInfo")]
|
187
193
|
attr_accessor quantum_task_arn: ::String
|
194
|
+
attr_accessor additional_attribute_names: ::Array[("QueueInfo")]
|
188
195
|
SENSITIVE: []
|
189
196
|
end
|
190
197
|
|
191
198
|
class GetQuantumTaskResponse
|
192
|
-
attr_accessor
|
193
|
-
attr_accessor
|
199
|
+
attr_accessor quantum_task_arn: ::String
|
200
|
+
attr_accessor status: ("CREATED" | "QUEUED" | "RUNNING" | "COMPLETED" | "FAILED" | "CANCELLING" | "CANCELLED")
|
201
|
+
attr_accessor failure_reason: ::String
|
194
202
|
attr_accessor device_arn: ::String
|
195
203
|
attr_accessor device_parameters: ::String
|
196
|
-
attr_accessor
|
197
|
-
attr_accessor failure_reason: ::String
|
198
|
-
attr_accessor job_arn: ::String
|
204
|
+
attr_accessor shots: ::Integer
|
199
205
|
attr_accessor output_s3_bucket: ::String
|
200
206
|
attr_accessor output_s3_directory: ::String
|
201
|
-
attr_accessor
|
202
|
-
attr_accessor
|
203
|
-
attr_accessor shots: ::Integer
|
204
|
-
attr_accessor status: ("CREATED" | "QUEUED" | "RUNNING" | "COMPLETED" | "FAILED" | "CANCELLING" | "CANCELLED")
|
207
|
+
attr_accessor created_at: ::Time
|
208
|
+
attr_accessor ended_at: ::Time
|
205
209
|
attr_accessor tags: ::Hash[::String, ::String]
|
210
|
+
attr_accessor job_arn: ::String
|
211
|
+
attr_accessor queue_info: Types::QuantumTaskQueueInfo
|
212
|
+
attr_accessor associations: ::Array[Types::Association]
|
213
|
+
attr_accessor num_successful_shots: ::Integer
|
214
|
+
attr_accessor action_metadata: Types::ActionMetadata
|
206
215
|
SENSITIVE: []
|
207
216
|
end
|
208
217
|
|
209
218
|
class HybridJobQueueInfo
|
210
|
-
attr_accessor message: ::String
|
211
|
-
attr_accessor position: ::String
|
212
219
|
attr_accessor queue: ("QUANTUM_TASKS_QUEUE" | "JOBS_QUEUE")
|
220
|
+
attr_accessor position: ::String
|
221
|
+
attr_accessor message: ::String
|
213
222
|
SENSITIVE: []
|
214
223
|
end
|
215
224
|
|
@@ -221,9 +230,9 @@ module Aws::Braket
|
|
221
230
|
end
|
222
231
|
|
223
232
|
class InstanceConfig
|
224
|
-
attr_accessor instance_count: ::Integer
|
225
233
|
attr_accessor instance_type: ("ml.m4.xlarge" | "ml.m4.2xlarge" | "ml.m4.4xlarge" | "ml.m4.10xlarge" | "ml.m4.16xlarge" | "ml.g4dn.xlarge" | "ml.g4dn.2xlarge" | "ml.g4dn.4xlarge" | "ml.g4dn.8xlarge" | "ml.g4dn.12xlarge" | "ml.g4dn.16xlarge" | "ml.m5.large" | "ml.m5.xlarge" | "ml.m5.2xlarge" | "ml.m5.4xlarge" | "ml.m5.12xlarge" | "ml.m5.24xlarge" | "ml.c4.xlarge" | "ml.c4.2xlarge" | "ml.c4.4xlarge" | "ml.c4.8xlarge" | "ml.p2.xlarge" | "ml.p2.8xlarge" | "ml.p2.16xlarge" | "ml.p3.2xlarge" | "ml.p3.8xlarge" | "ml.p3.16xlarge" | "ml.p3dn.24xlarge" | "ml.p4d.24xlarge" | "ml.c5.xlarge" | "ml.c5.2xlarge" | "ml.c5.4xlarge" | "ml.c5.9xlarge" | "ml.c5.18xlarge" | "ml.c5n.xlarge" | "ml.c5n.2xlarge" | "ml.c5n.4xlarge" | "ml.c5n.9xlarge" | "ml.c5n.18xlarge")
|
226
234
|
attr_accessor volume_size_in_gb: ::Integer
|
235
|
+
attr_accessor instance_count: ::Integer
|
227
236
|
SENSITIVE: []
|
228
237
|
end
|
229
238
|
|
@@ -240,8 +249,8 @@ module Aws::Braket
|
|
240
249
|
|
241
250
|
class JobEventDetails
|
242
251
|
attr_accessor event_type: ("WAITING_FOR_PRIORITY" | "QUEUED_FOR_EXECUTION" | "STARTING_INSTANCE" | "DOWNLOADING_DATA" | "RUNNING" | "DEPRIORITIZED_DUE_TO_INACTIVITY" | "UPLOADING_RESULTS" | "COMPLETED" | "FAILED" | "MAX_RUNTIME_EXCEEDED" | "CANCELLED")
|
243
|
-
attr_accessor message: ::String
|
244
252
|
attr_accessor time_of_event: ::Time
|
253
|
+
attr_accessor message: ::String
|
245
254
|
SENSITIVE: []
|
246
255
|
end
|
247
256
|
|
@@ -257,13 +266,13 @@ module Aws::Braket
|
|
257
266
|
end
|
258
267
|
|
259
268
|
class JobSummary
|
260
|
-
attr_accessor
|
261
|
-
attr_accessor device: ::String
|
262
|
-
attr_accessor ended_at: ::Time
|
269
|
+
attr_accessor status: ("QUEUED" | "RUNNING" | "COMPLETED" | "FAILED" | "CANCELLING" | "CANCELLED")
|
263
270
|
attr_accessor job_arn: ::String
|
264
271
|
attr_accessor job_name: ::String
|
272
|
+
attr_accessor device: ::String
|
273
|
+
attr_accessor created_at: ::Time
|
265
274
|
attr_accessor started_at: ::Time
|
266
|
-
attr_accessor
|
275
|
+
attr_accessor ended_at: ::Time
|
267
276
|
attr_accessor tags: ::Hash[::String, ::String]
|
268
277
|
SENSITIVE: []
|
269
278
|
end
|
@@ -278,23 +287,30 @@ module Aws::Braket
|
|
278
287
|
SENSITIVE: []
|
279
288
|
end
|
280
289
|
|
290
|
+
class ProgramSetValidationFailure
|
291
|
+
attr_accessor program_index: ::Integer
|
292
|
+
attr_accessor inputs_index: ::Integer
|
293
|
+
attr_accessor errors: ::Array[::String]
|
294
|
+
SENSITIVE: []
|
295
|
+
end
|
296
|
+
|
281
297
|
class QuantumTaskQueueInfo
|
282
|
-
attr_accessor message: ::String
|
283
|
-
attr_accessor position: ::String
|
284
298
|
attr_accessor queue: ("QUANTUM_TASKS_QUEUE" | "JOBS_QUEUE")
|
299
|
+
attr_accessor position: ::String
|
285
300
|
attr_accessor queue_priority: ("Normal" | "Priority")
|
301
|
+
attr_accessor message: ::String
|
286
302
|
SENSITIVE: []
|
287
303
|
end
|
288
304
|
|
289
305
|
class QuantumTaskSummary
|
290
|
-
attr_accessor
|
306
|
+
attr_accessor quantum_task_arn: ::String
|
307
|
+
attr_accessor status: ("CREATED" | "QUEUED" | "RUNNING" | "COMPLETED" | "FAILED" | "CANCELLING" | "CANCELLED")
|
291
308
|
attr_accessor device_arn: ::String
|
292
|
-
attr_accessor
|
309
|
+
attr_accessor shots: ::Integer
|
293
310
|
attr_accessor output_s3_bucket: ::String
|
294
311
|
attr_accessor output_s3_directory: ::String
|
295
|
-
attr_accessor
|
296
|
-
attr_accessor
|
297
|
-
attr_accessor status: ("CREATED" | "QUEUED" | "RUNNING" | "COMPLETED" | "FAILED" | "CANCELLING" | "CANCELLED")
|
312
|
+
attr_accessor created_at: ::Time
|
313
|
+
attr_accessor ended_at: ::Time
|
298
314
|
attr_accessor tags: ::Hash[::String, ::String]
|
299
315
|
SENSITIVE: []
|
300
316
|
end
|
@@ -310,9 +326,9 @@ module Aws::Braket
|
|
310
326
|
end
|
311
327
|
|
312
328
|
class ScriptModeConfig
|
313
|
-
attr_accessor compression_type: ("NONE" | "GZIP")
|
314
329
|
attr_accessor entry_point: ::String
|
315
330
|
attr_accessor s3_uri: ::String
|
331
|
+
attr_accessor compression_type: ("NONE" | "GZIP")
|
316
332
|
SENSITIVE: []
|
317
333
|
end
|
318
334
|
|
@@ -323,9 +339,9 @@ module Aws::Braket
|
|
323
339
|
end
|
324
340
|
|
325
341
|
class SearchDevicesRequest
|
326
|
-
attr_accessor filters: ::Array[Types::SearchDevicesFilter]
|
327
|
-
attr_accessor max_results: ::Integer
|
328
342
|
attr_accessor next_token: ::String
|
343
|
+
attr_accessor max_results: ::Integer
|
344
|
+
attr_accessor filters: ::Array[Types::SearchDevicesFilter]
|
329
345
|
SENSITIVE: []
|
330
346
|
end
|
331
347
|
|
@@ -337,15 +353,15 @@ module Aws::Braket
|
|
337
353
|
|
338
354
|
class SearchJobsFilter
|
339
355
|
attr_accessor name: ::String
|
340
|
-
attr_accessor operator: ("LT" | "LTE" | "EQUAL" | "GT" | "GTE" | "BETWEEN" | "CONTAINS")
|
341
356
|
attr_accessor values: ::Array[::String]
|
357
|
+
attr_accessor operator: ("LT" | "LTE" | "EQUAL" | "GT" | "GTE" | "BETWEEN" | "CONTAINS")
|
342
358
|
SENSITIVE: []
|
343
359
|
end
|
344
360
|
|
345
361
|
class SearchJobsRequest
|
346
|
-
attr_accessor filters: ::Array[Types::SearchJobsFilter]
|
347
|
-
attr_accessor max_results: ::Integer
|
348
362
|
attr_accessor next_token: ::String
|
363
|
+
attr_accessor max_results: ::Integer
|
364
|
+
attr_accessor filters: ::Array[Types::SearchJobsFilter]
|
349
365
|
SENSITIVE: []
|
350
366
|
end
|
351
367
|
|
@@ -357,21 +373,21 @@ module Aws::Braket
|
|
357
373
|
|
358
374
|
class SearchQuantumTasksFilter
|
359
375
|
attr_accessor name: ::String
|
360
|
-
attr_accessor operator: ("LT" | "LTE" | "EQUAL" | "GT" | "GTE" | "BETWEEN")
|
361
376
|
attr_accessor values: ::Array[::String]
|
377
|
+
attr_accessor operator: ("LT" | "LTE" | "EQUAL" | "GT" | "GTE" | "BETWEEN")
|
362
378
|
SENSITIVE: []
|
363
379
|
end
|
364
380
|
|
365
381
|
class SearchQuantumTasksRequest
|
366
|
-
attr_accessor filters: ::Array[Types::SearchQuantumTasksFilter]
|
367
|
-
attr_accessor max_results: ::Integer
|
368
382
|
attr_accessor next_token: ::String
|
383
|
+
attr_accessor max_results: ::Integer
|
384
|
+
attr_accessor filters: ::Array[Types::SearchQuantumTasksFilter]
|
369
385
|
SENSITIVE: []
|
370
386
|
end
|
371
387
|
|
372
388
|
class SearchQuantumTasksResponse
|
373
|
-
attr_accessor next_token: ::String
|
374
389
|
attr_accessor quantum_tasks: ::Array[Types::QuantumTaskSummary]
|
390
|
+
attr_accessor next_token: ::String
|
375
391
|
SENSITIVE: []
|
376
392
|
end
|
377
393
|
|
@@ -405,6 +421,8 @@ module Aws::Braket
|
|
405
421
|
|
406
422
|
class ValidationException
|
407
423
|
attr_accessor message: ::String
|
424
|
+
attr_accessor reason: ("ProgramSetValidationFailed")
|
425
|
+
attr_accessor program_set_validation_failures: ::Array[Types::ProgramSetValidationFailure]
|
408
426
|
SENSITIVE: []
|
409
427
|
end
|
410
428
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aws-sdk-braket
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.57.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Amazon Web Services
|
@@ -35,14 +35,14 @@ dependencies:
|
|
35
35
|
requirements:
|
36
36
|
- - "~>"
|
37
37
|
- !ruby/object:Gem::Version
|
38
|
-
version: '1.
|
38
|
+
version: '1.5'
|
39
39
|
type: :runtime
|
40
40
|
prerelease: false
|
41
41
|
version_requirements: !ruby/object:Gem::Requirement
|
42
42
|
requirements:
|
43
43
|
- - "~>"
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version: '1.
|
45
|
+
version: '1.5'
|
46
46
|
description: Official AWS Ruby gem for Braket. This gem is part of the AWS SDK for
|
47
47
|
Ruby.
|
48
48
|
email:
|