franibm commited on
Commit
ca545ef
·
verified ·
1 Parent(s): 5e99ff5

Upload folder using huggingface_hub

Browse files
README.md ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ ---
3
+ tags:
4
+ - autotrain
5
+ - image-classification
6
+ base_model: Organika/sdxl-detector
7
+ widget:
8
+ - src: https://huggingface.co/datasets/mishig/sample_images/resolve/main/tiger.jpg
9
+ example_title: Tiger
10
+ - src: https://huggingface.co/datasets/mishig/sample_images/resolve/main/teapot.jpg
11
+ example_title: Teapot
12
+ - src: https://huggingface.co/datasets/mishig/sample_images/resolve/main/palace.jpg
13
+ example_title: Palace
14
+ ---
15
+
16
+ # Model Trained Using AutoTrain
17
+
18
+ - Problem type: Image Classification
19
+
20
+ ## Validation Metrics
21
+ loss: 0.6958691477775574
22
+
23
+ f1: 0.6666666666666666
24
+
25
+ precision: 0.5
26
+
27
+ recall: 1.0
28
+
29
+ auc: 0.4496
30
+
31
+ accuracy: 0.5
checkpoint-75/config.json ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_name_or_path": "Organika/sdxl-detector",
3
+ "_num_labels": 2,
4
+ "architectures": [
5
+ "SwinForImageClassification"
6
+ ],
7
+ "attention_probs_dropout_prob": 0.0,
8
+ "depths": [
9
+ 2,
10
+ 2,
11
+ 18,
12
+ 2
13
+ ],
14
+ "drop_path_rate": 0.1,
15
+ "embed_dim": 128,
16
+ "encoder_stride": 32,
17
+ "hidden_act": "gelu",
18
+ "hidden_dropout_prob": 0.0,
19
+ "hidden_size": 1024,
20
+ "id2label": {
21
+ "0": "manipulated-Images",
22
+ "1": "non-manipulated-Images"
23
+ },
24
+ "image_size": 224,
25
+ "initializer_range": 0.02,
26
+ "label2id": {
27
+ "manipulated-Images": 0,
28
+ "non-manipulated-Images": 1
29
+ },
30
+ "layer_norm_eps": 1e-05,
31
+ "max_length": 128,
32
+ "mlp_ratio": 4.0,
33
+ "model_type": "swin",
34
+ "num_channels": 3,
35
+ "num_heads": [
36
+ 4,
37
+ 8,
38
+ 16,
39
+ 32
40
+ ],
41
+ "num_layers": 4,
42
+ "out_features": [
43
+ "stage4"
44
+ ],
45
+ "out_indices": [
46
+ 4
47
+ ],
48
+ "padding": "max_length",
49
+ "patch_size": 4,
50
+ "path_norm": true,
51
+ "problem_type": "single_label_classification",
52
+ "qkv_bias": true,
53
+ "stage_names": [
54
+ "stem",
55
+ "stage1",
56
+ "stage2",
57
+ "stage3",
58
+ "stage4"
59
+ ],
60
+ "torch_dtype": "float32",
61
+ "transformers_version": "4.44.2",
62
+ "use_absolute_embeddings": false,
63
+ "window_size": 7
64
+ }
checkpoint-75/model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:33e9260058efdacca05bf763cec9f031fe6e2f9e597a0e58de6b8c67a38b5954
3
+ size 347498816
checkpoint-75/optimizer.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:145a168382fbf1b037f80d47634c9dfac1b7922b23ddca70a812021d04bda159
3
+ size 694305741
checkpoint-75/rng_state.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:fd07875961a6b7c071a123da0d7e1e69349379bf51aa9ebd9355ad646424fcd3
3
+ size 13990
checkpoint-75/scheduler.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1fc0de0c8c057985608ecfd1be061e1100f79c8067d5730be9f7d2b70f81c23b
3
+ size 1064
checkpoint-75/trainer_state.json ADDED
@@ -0,0 +1,340 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "best_metric": 0.6958691477775574,
3
+ "best_model_checkpoint": "autotrain-Chiara3/checkpoint-75",
4
+ "epoch": 3.0,
5
+ "eval_steps": 500,
6
+ "global_step": 75,
7
+ "is_hyper_param_search": false,
8
+ "is_local_process_zero": true,
9
+ "is_world_process_zero": true,
10
+ "log_history": [
11
+ {
12
+ "epoch": 0.08,
13
+ "grad_norm": 167.64414978027344,
14
+ "learning_rate": 0.000125,
15
+ "loss": 1.9005,
16
+ "step": 2
17
+ },
18
+ {
19
+ "epoch": 0.16,
20
+ "grad_norm": 62.30736541748047,
21
+ "learning_rate": 0.00025,
22
+ "loss": 2.4393,
23
+ "step": 4
24
+ },
25
+ {
26
+ "epoch": 0.24,
27
+ "grad_norm": 72.72631072998047,
28
+ "learning_rate": 0.000375,
29
+ "loss": 2.1431,
30
+ "step": 6
31
+ },
32
+ {
33
+ "epoch": 0.32,
34
+ "grad_norm": 8.840033531188965,
35
+ "learning_rate": 0.0005,
36
+ "loss": 0.7339,
37
+ "step": 8
38
+ },
39
+ {
40
+ "epoch": 0.4,
41
+ "grad_norm": 23.04970932006836,
42
+ "learning_rate": 0.0004850746268656717,
43
+ "loss": 0.6963,
44
+ "step": 10
45
+ },
46
+ {
47
+ "epoch": 0.48,
48
+ "grad_norm": 0.584241509437561,
49
+ "learning_rate": 0.00047014925373134334,
50
+ "loss": 0.8053,
51
+ "step": 12
52
+ },
53
+ {
54
+ "epoch": 0.56,
55
+ "grad_norm": 2.514742851257324,
56
+ "learning_rate": 0.0004552238805970149,
57
+ "loss": 0.994,
58
+ "step": 14
59
+ },
60
+ {
61
+ "epoch": 0.64,
62
+ "grad_norm": 0.5322573781013489,
63
+ "learning_rate": 0.00044029850746268656,
64
+ "loss": 0.8039,
65
+ "step": 16
66
+ },
67
+ {
68
+ "epoch": 0.72,
69
+ "grad_norm": 1.0426534414291382,
70
+ "learning_rate": 0.0004253731343283582,
71
+ "loss": 0.7135,
72
+ "step": 18
73
+ },
74
+ {
75
+ "epoch": 0.8,
76
+ "grad_norm": 5.410072326660156,
77
+ "learning_rate": 0.0004104477611940299,
78
+ "loss": 0.9043,
79
+ "step": 20
80
+ },
81
+ {
82
+ "epoch": 0.88,
83
+ "grad_norm": 5.602731704711914,
84
+ "learning_rate": 0.0003955223880597015,
85
+ "loss": 0.7978,
86
+ "step": 22
87
+ },
88
+ {
89
+ "epoch": 0.96,
90
+ "grad_norm": 4.097716331481934,
91
+ "learning_rate": 0.00038059701492537315,
92
+ "loss": 0.9165,
93
+ "step": 24
94
+ },
95
+ {
96
+ "epoch": 1.0,
97
+ "eval_accuracy": 0.5,
98
+ "eval_auc": 0.6416,
99
+ "eval_f1": 0.0,
100
+ "eval_loss": 0.7698660492897034,
101
+ "eval_precision": 0.0,
102
+ "eval_recall": 0.0,
103
+ "eval_runtime": 37.3901,
104
+ "eval_samples_per_second": 2.675,
105
+ "eval_steps_per_second": 0.187,
106
+ "step": 25
107
+ },
108
+ {
109
+ "epoch": 1.04,
110
+ "grad_norm": 2.180790662765503,
111
+ "learning_rate": 0.00036567164179104476,
112
+ "loss": 0.7109,
113
+ "step": 26
114
+ },
115
+ {
116
+ "epoch": 1.12,
117
+ "grad_norm": 4.641411781311035,
118
+ "learning_rate": 0.0003507462686567164,
119
+ "loss": 0.8409,
120
+ "step": 28
121
+ },
122
+ {
123
+ "epoch": 1.2,
124
+ "grad_norm": 0.6502405405044556,
125
+ "learning_rate": 0.0003358208955223881,
126
+ "loss": 0.7036,
127
+ "step": 30
128
+ },
129
+ {
130
+ "epoch": 1.28,
131
+ "grad_norm": 4.176632881164551,
132
+ "learning_rate": 0.0003208955223880597,
133
+ "loss": 0.7583,
134
+ "step": 32
135
+ },
136
+ {
137
+ "epoch": 1.3599999999999999,
138
+ "grad_norm": 0.49444127082824707,
139
+ "learning_rate": 0.00030597014925373136,
140
+ "loss": 0.6758,
141
+ "step": 34
142
+ },
143
+ {
144
+ "epoch": 1.44,
145
+ "grad_norm": 2.05049467086792,
146
+ "learning_rate": 0.00029104477611940297,
147
+ "loss": 0.7084,
148
+ "step": 36
149
+ },
150
+ {
151
+ "epoch": 1.52,
152
+ "grad_norm": 2.7700016498565674,
153
+ "learning_rate": 0.00027611940298507464,
154
+ "loss": 0.616,
155
+ "step": 38
156
+ },
157
+ {
158
+ "epoch": 1.6,
159
+ "grad_norm": 1.5521405935287476,
160
+ "learning_rate": 0.00026119402985074624,
161
+ "loss": 0.813,
162
+ "step": 40
163
+ },
164
+ {
165
+ "epoch": 1.6800000000000002,
166
+ "grad_norm": 0.4340336322784424,
167
+ "learning_rate": 0.0002462686567164179,
168
+ "loss": 0.7778,
169
+ "step": 42
170
+ },
171
+ {
172
+ "epoch": 1.76,
173
+ "grad_norm": 0.7285627722740173,
174
+ "learning_rate": 0.00023134328358208957,
175
+ "loss": 0.6695,
176
+ "step": 44
177
+ },
178
+ {
179
+ "epoch": 1.8399999999999999,
180
+ "grad_norm": 1.4994882345199585,
181
+ "learning_rate": 0.00021641791044776118,
182
+ "loss": 0.7365,
183
+ "step": 46
184
+ },
185
+ {
186
+ "epoch": 1.92,
187
+ "grad_norm": 1.4485021829605103,
188
+ "learning_rate": 0.00020149253731343284,
189
+ "loss": 0.6662,
190
+ "step": 48
191
+ },
192
+ {
193
+ "epoch": 2.0,
194
+ "grad_norm": 5.671040058135986,
195
+ "learning_rate": 0.00018656716417910448,
196
+ "loss": 0.7295,
197
+ "step": 50
198
+ },
199
+ {
200
+ "epoch": 2.0,
201
+ "eval_accuracy": 0.5,
202
+ "eval_auc": 0.32399999999999995,
203
+ "eval_f1": 0.0,
204
+ "eval_loss": 0.6971563100814819,
205
+ "eval_precision": 0.0,
206
+ "eval_recall": 0.0,
207
+ "eval_runtime": 40.2697,
208
+ "eval_samples_per_second": 2.483,
209
+ "eval_steps_per_second": 0.174,
210
+ "step": 50
211
+ },
212
+ {
213
+ "epoch": 2.08,
214
+ "grad_norm": 1.1593971252441406,
215
+ "learning_rate": 0.00017164179104477612,
216
+ "loss": 0.6822,
217
+ "step": 52
218
+ },
219
+ {
220
+ "epoch": 2.16,
221
+ "grad_norm": 3.358516216278076,
222
+ "learning_rate": 0.00015671641791044778,
223
+ "loss": 0.6739,
224
+ "step": 54
225
+ },
226
+ {
227
+ "epoch": 2.24,
228
+ "grad_norm": 0.9491177797317505,
229
+ "learning_rate": 0.0001417910447761194,
230
+ "loss": 0.7174,
231
+ "step": 56
232
+ },
233
+ {
234
+ "epoch": 2.32,
235
+ "grad_norm": 0.7585409283638,
236
+ "learning_rate": 0.00012686567164179105,
237
+ "loss": 0.6744,
238
+ "step": 58
239
+ },
240
+ {
241
+ "epoch": 2.4,
242
+ "grad_norm": 2.0192337036132812,
243
+ "learning_rate": 0.00011194029850746269,
244
+ "loss": 0.7595,
245
+ "step": 60
246
+ },
247
+ {
248
+ "epoch": 2.48,
249
+ "grad_norm": 1.410166621208191,
250
+ "learning_rate": 9.701492537313434e-05,
251
+ "loss": 0.6727,
252
+ "step": 62
253
+ },
254
+ {
255
+ "epoch": 2.56,
256
+ "grad_norm": 1.6663695573806763,
257
+ "learning_rate": 8.208955223880597e-05,
258
+ "loss": 0.6944,
259
+ "step": 64
260
+ },
261
+ {
262
+ "epoch": 2.64,
263
+ "grad_norm": 0.7142327427864075,
264
+ "learning_rate": 6.716417910447761e-05,
265
+ "loss": 0.7013,
266
+ "step": 66
267
+ },
268
+ {
269
+ "epoch": 2.7199999999999998,
270
+ "grad_norm": 2.891697645187378,
271
+ "learning_rate": 5.223880597014925e-05,
272
+ "loss": 0.7996,
273
+ "step": 68
274
+ },
275
+ {
276
+ "epoch": 2.8,
277
+ "grad_norm": 0.5801800489425659,
278
+ "learning_rate": 3.7313432835820896e-05,
279
+ "loss": 0.7071,
280
+ "step": 70
281
+ },
282
+ {
283
+ "epoch": 2.88,
284
+ "grad_norm": 0.8264374136924744,
285
+ "learning_rate": 2.2388059701492536e-05,
286
+ "loss": 0.6739,
287
+ "step": 72
288
+ },
289
+ {
290
+ "epoch": 2.96,
291
+ "grad_norm": 0.47696346044540405,
292
+ "learning_rate": 7.462686567164179e-06,
293
+ "loss": 0.6581,
294
+ "step": 74
295
+ },
296
+ {
297
+ "epoch": 3.0,
298
+ "eval_accuracy": 0.5,
299
+ "eval_auc": 0.4496,
300
+ "eval_f1": 0.6666666666666666,
301
+ "eval_loss": 0.6958691477775574,
302
+ "eval_precision": 0.5,
303
+ "eval_recall": 1.0,
304
+ "eval_runtime": 35.376,
305
+ "eval_samples_per_second": 2.827,
306
+ "eval_steps_per_second": 0.198,
307
+ "step": 75
308
+ }
309
+ ],
310
+ "logging_steps": 2,
311
+ "max_steps": 75,
312
+ "num_input_tokens_seen": 0,
313
+ "num_train_epochs": 3,
314
+ "save_steps": 500,
315
+ "stateful_callbacks": {
316
+ "EarlyStoppingCallback": {
317
+ "args": {
318
+ "early_stopping_patience": 5,
319
+ "early_stopping_threshold": 0.01
320
+ },
321
+ "attributes": {
322
+ "early_stopping_patience_counter": 0
323
+ }
324
+ },
325
+ "TrainerControl": {
326
+ "args": {
327
+ "should_epoch_stop": false,
328
+ "should_evaluate": false,
329
+ "should_log": false,
330
+ "should_save": true,
331
+ "should_training_stop": true
332
+ },
333
+ "attributes": {}
334
+ }
335
+ },
336
+ "total_flos": 4.606718670928282e+16,
337
+ "train_batch_size": 8,
338
+ "trial_name": null,
339
+ "trial_params": null
340
+ }
checkpoint-75/training_args.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8f1aea10f293c83d27e28dd70adaa5a933dd5ddb1d36524d9e2278d06c33fb8b
3
+ size 5240
config.json ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_name_or_path": "Organika/sdxl-detector",
3
+ "_num_labels": 2,
4
+ "architectures": [
5
+ "SwinForImageClassification"
6
+ ],
7
+ "attention_probs_dropout_prob": 0.0,
8
+ "depths": [
9
+ 2,
10
+ 2,
11
+ 18,
12
+ 2
13
+ ],
14
+ "drop_path_rate": 0.1,
15
+ "embed_dim": 128,
16
+ "encoder_stride": 32,
17
+ "hidden_act": "gelu",
18
+ "hidden_dropout_prob": 0.0,
19
+ "hidden_size": 1024,
20
+ "id2label": {
21
+ "0": "manipulated-Images",
22
+ "1": "non-manipulated-Images"
23
+ },
24
+ "image_size": 224,
25
+ "initializer_range": 0.02,
26
+ "label2id": {
27
+ "manipulated-Images": 0,
28
+ "non-manipulated-Images": 1
29
+ },
30
+ "layer_norm_eps": 1e-05,
31
+ "max_length": 128,
32
+ "mlp_ratio": 4.0,
33
+ "model_type": "swin",
34
+ "num_channels": 3,
35
+ "num_heads": [
36
+ 4,
37
+ 8,
38
+ 16,
39
+ 32
40
+ ],
41
+ "num_layers": 4,
42
+ "out_features": [
43
+ "stage4"
44
+ ],
45
+ "out_indices": [
46
+ 4
47
+ ],
48
+ "padding": "max_length",
49
+ "patch_size": 4,
50
+ "path_norm": true,
51
+ "problem_type": "single_label_classification",
52
+ "qkv_bias": true,
53
+ "stage_names": [
54
+ "stem",
55
+ "stage1",
56
+ "stage2",
57
+ "stage3",
58
+ "stage4"
59
+ ],
60
+ "torch_dtype": "float32",
61
+ "transformers_version": "4.44.2",
62
+ "use_absolute_embeddings": false,
63
+ "window_size": 7
64
+ }
model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:33e9260058efdacca05bf763cec9f031fe6e2f9e597a0e58de6b8c67a38b5954
3
+ size 347498816
preprocessor_config.json ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "do_normalize": true,
3
+ "do_rescale": true,
4
+ "do_resize": true,
5
+ "image_mean": [
6
+ 0.485,
7
+ 0.456,
8
+ 0.406
9
+ ],
10
+ "image_processor_type": "ViTImageProcessor",
11
+ "image_std": [
12
+ 0.229,
13
+ 0.224,
14
+ 0.225
15
+ ],
16
+ "resample": 3,
17
+ "rescale_factor": 0.00392156862745098,
18
+ "size": {
19
+ "height": 224,
20
+ "width": 224
21
+ }
22
+ }
runs/Sep10_08-52-30_r-franibm-fraud-detection-pjuekihu-dee1b-70ou3/events.out.tfevents.1725958352.r-franibm-fraud-detection-pjuekihu-dee1b-70ou3.282.0 CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:d58bf8d755724179827b63f6b3a54c653241cb9c0e2d1515c22a0d8296914a92
3
- size 12902
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:54c44363bcf92d19221a241946fbb4b8c26f1e6bf490ae52c7fe6faed888d4da
3
+ size 15001
runs/Sep10_08-52-30_r-franibm-fraud-detection-pjuekihu-dee1b-70ou3/events.out.tfevents.1725959137.r-franibm-fraud-detection-pjuekihu-dee1b-70ou3.282.1 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:00e72166c2c828148292a11415c149d8cb36aaef765ee09715fa751b1ac4dfb2
3
+ size 597
training_args.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8f1aea10f293c83d27e28dd70adaa5a933dd5ddb1d36524d9e2278d06c33fb8b
3
+ size 5240
training_params.json ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "data_path": "autotrain-Chiara3/autotrain-data",
3
+ "model": "Organika/sdxl-detector",
4
+ "username": "franibm",
5
+ "lr": 0.0005,
6
+ "epochs": 3,
7
+ "batch_size": 8,
8
+ "warmup_ratio": 0.1,
9
+ "gradient_accumulation": 1,
10
+ "optimizer": "adamw_torch",
11
+ "scheduler": "linear",
12
+ "weight_decay": 0.0,
13
+ "max_grad_norm": 1.0,
14
+ "seed": 42,
15
+ "train_split": "train",
16
+ "valid_split": "validation",
17
+ "logging_steps": -1,
18
+ "project_name": "autotrain-Chiara3",
19
+ "auto_find_batch_size": false,
20
+ "mixed_precision": "fp16",
21
+ "save_total_limit": 1,
22
+ "push_to_hub": true,
23
+ "eval_strategy": "epoch",
24
+ "image_column": "autotrain_image",
25
+ "target_column": "autotrain_label",
26
+ "log": "tensorboard",
27
+ "early_stopping_patience": 5,
28
+ "early_stopping_threshold": 0.01
29
+ }