BCD

Tezos Contract Explorer
Search Networks Deploy
  • Home
  • /
  • Shadownet
  • /
  • KT1UTXo...JwQx
operations (141)Storage Code Interact Tokens Fork Views Events Statistics Details
Latest
​x
648
1559
 
1
{ parameter (or
2
              (or
3
                (or (or (nat %cleanup) (nat %cleanup_offline))
4
                    (or
5
                      (pair %collect (mutez %amount)
6
                                     (pair (nat %channel_id) (signature %signature)))
7
                      (nat %collect_offline)))
8
                (or
9
                  (or (pair %donate_offline (nat %cid) (bytes %message))
10
                      (pair %extend (nat %channel_id) (timestamp %new_expiration)))
11
                  (or (nat %mark_offline)
12
                      (or
13
                        (pair %open_channel (nat %cid)
14
                                            (pair (timestamp %expiration)
15
                                                  (pair (bytes %offer)
16
                                                        (pair (key %recipient_key)
17
                                                              (key %sender_key)))))
18
                        (pair %post_answer (bytes %answer) (nat %channel_id))))))
19
              (or
20
                (or
21
                  (or (pair %post_offer (nat %channel_id) (bytes %offer))
22
                      (pair %rebind_key (nat %channel_id) (key %new_key)))
23
                  (or (pair %set_block (nat %cid) (pair (bool %on) (address %user)))
24
                      (or (pair %set_mute (nat %cid) (pair (bool %on) (address %user)))
25
                          (pair %set_status (nat %cid) (bool %online)))))
26
                (or
27
                  (or (pair %signal_answer (bytes %answer) (nat %channel_id))
28
                      (pair %signal_offer (nat %channel_id) (bytes %offer)))
29
                  (or (nat %timeout) (or (nat %top_up) (unit %withdraw_fees)))))) ;
30
  storage (pair (big_map %blocked (pair nat address) bool)
31
                (pair
32
                  (big_map %channels nat
33
                                     (pair (bytes %answer)
34
                                           (pair (nat %answer_round)
35
                                                 (pair (nat %cid)
36
                                                       (pair (mutez %deposit)
37
                                                             (pair
38
                                                               (timestamp %expiration)
39
                                                               (pair (bytes %offer)
40
                                                                     (pair
41
                                                                       (nat %offer_round)
42
                                                                       (pair
43
                                                                         (timestamp %offer_ts)
44
                                                                         (pair
45
                                                                           (address %recipient)
46
                                                                           (pair
47
                                                                             (key %recipient_key)
48
                                                                             (pair
49
                                                                               (nat %seen_round)
50
                                                                               (pair
51
                                                                                 (address %sender)
52
                                                                                 (pair
53
                                                                                   (key %sender_key)
54
                                                                                   (mutez %withdrawn)))))))))))))))
55
                  (pair
56
                    (big_map %donations nat
57
                                        (pair (nat %last_week)
58
                                              (pair (mutez %w0)
59
                                                    (pair (mutez %w1)
60
                                                          (pair (mutez %w2) (mutez %w3))))))
61
                    (pair (mutez %fees)
62
                          (pair
63
                            (big_map %mailbox nat
64
                                              (pair (mutez %amount)
65
                                                    (pair (nat %cid)
66
                                                          (pair (bytes %message)
67
                                                                (pair
68
                                                                  (timestamp %posted)
69
                                                                  (pair
70
                                                                    (address %recipient)
71
                                                                    (address %sender)))))))
72
                            (pair (big_map %muted (pair nat address) bool)
73
                                  (pair (nat %next_id)
74
                                        (pair (nat %next_mail_id)
75
                                              (pair (address %owner)
76
                                                    (pair (address %registry)
77
                                                          (big_map %status nat
78
                                                                           (pair
79
                                                                             (bool %online)
80
                                                                             (timestamp %since))))))))))))) ;
81
  code { LAMBDA
82
           (pair (pair nat mutez)
83
                 (pair (big_map (pair nat address) bool)
84
                       (pair
85
                         (big_map nat
86
                                  (pair bytes
87
                                        (pair nat
88
                                              (pair nat
89
                                                    (pair mutez
90
                                                          (pair timestamp
91
                                                                (pair bytes
92
                                                                      (pair nat
93
                                                                            (pair
94
                                                                              timestamp
95
                                                                              (pair
96
                                                                                address
97
                                                                                (pair
98
                                                                                  key
99
                                                                                  (pair
100
                                                                                    nat
101
                                                                                    (pair
102
                                                                                      address
103
                                                                                      (pair
104
                                                                                        key
105
                                                                                        mutez))))))))))))))
106
                         (pair
107
                           (big_map nat
108
                                    (pair nat
109
                                          (pair mutez (pair mutez (pair mutez mutez)))))
110
                           (pair mutez
111
                                 (pair
112
                                   (big_map nat
113
                                            (pair mutez
114
                                                  (pair nat
115
                                                        (pair bytes
116
                                                              (pair timestamp
117
                                                                    (pair address
118
                                                                          address))))))
119
                                   (pair (big_map (pair nat address) bool)
120
                                         (pair nat
121
                                               (pair nat
122
                                                     (pair address
123
                                                           (pair address
124
                                                                 (big_map nat
125
                                                                          (pair bool
126
                                                                                timestamp)))))))))))))
127
           (pair unit
128
                 (pair (big_map (pair nat address) bool)
129
                       (pair
130
                         (big_map nat
131
                                  (pair bytes
132
                                        (pair nat
133
                                              (pair nat
134
                                                    (pair mutez
135
                                                          (pair timestamp
136
                                                                (pair bytes
137
                                                                      (pair nat
138
                                                                            (pair
139
                                                                              timestamp
140
                                                                              (pair
141
                                                                                address
142
                                                                                (pair
143
                                                                                  key
144
                                                                                  (pair
145
                                                                                    nat
146
                                                                                    (pair
147
                                                                                      address
148
                                                                                      (pair
149
                                                                                        key
150
                                                                                        mutez))))))))))))))
151
                         (pair
152
                           (big_map nat
153
                                    (pair nat
154
                                          (pair mutez (pair mutez (pair mutez mutez)))))
155
                           (pair mutez
156
                                 (pair
157
                                   (big_map nat
158
                                            (pair mutez
159
                                                  (pair nat
160
                                                        (pair bytes
161
                                                              (pair timestamp
162
                                                                    (pair address
163
                                                                          address))))))
164
                                   (pair (big_map (pair nat address) bool)
165
                                         (pair nat
166
                                               (pair nat
167
                                                     (pair address
168
                                                           (pair address
169
                                                                 (big_map nat
170
                                                                          (pair bool
171
                                                                                timestamp)))))))))))))
172
           { UNPAIR ;
173
             PUSH timestamp "1970-01-01T00:00:00Z" ;
174
             NOW ;
175
             SUB ;
176
             PUSH nat 604800 ;
177
             PUSH int 259200 ;
178
             DUP 3 ;
179
             ADD ;
180
             EDIV ;
181
             IF_NONE { PUSH string "WEEK" ; FAILWITH } {} ;
182
             CAR ;
183
             ISNAT ;
184
             IF_NONE { PUSH int 177 ; FAILWITH } {} ;
185
             DUP 4 ;
186
             GET 5 ;
187
             DUP 4 ;
188
             CAR ;
189
             MEM ;
190
             IF
191
               { DUP 4 ;
192
                 GET 5 ;
193
                 DUP 4 ;
194
                 CAR ;
195
                 GET ;
196
                 IF_NONE { PUSH int 179 ; FAILWITH } {} ;
197
                 DUP ;
198
                 CAR ;
199
                 DUP 3 ;
200
                 SUB ;
201
                 DUP 5 ;
202
                 CDR ;
203
                 PUSH mutez 0 ;
204
                 PUSH mutez 0 ;
205
                 PUSH mutez 0 ;
206
                 DUP 5 ;
207
                 EQ ;
208
                 IF
209
                   { DIG 3 ; DROP 4 ; DUP 5 ; CDR ; DUP 3 ; GET 3 ; ADD ; DUP 3 ; GET 5 ; DUP 4 ; GET 7 ; DUP 5 ; GET 8 }
210
                   { PUSH int 1 ;
211
                     DUP 6 ;
212
                     COMPARE ;
213
                     EQ ;
214
                     IF
215
                       { DIG 2 ; DROP 3 ; DUP 3 ; GET 3 ; DUP 4 ; GET 5 ; DUP 5 ; GET 7 }
216
                       { PUSH int 2 ;
217
                         DUP 6 ;
218
                         COMPARE ;
219
                         EQ ;
220
                         IF
221
                           { DROP 2 ; DUP 4 ; GET 3 ; DUP 5 ; GET 5 }
222
                           { PUSH int 3 ; DUP 6 ; COMPARE ; EQ ; IF { DROP ; DUP 5 ; GET 3 } {} } } } ;
223
                 DIG 9 ;
224
                 DUP ;
225
                 GET 5 ;
226
                 DUP 3 ;
227
                 DUP 5 ;
228
                 DUP 7 ;
229
                 DUP 9 ;
230
                 DUP 13 ;
231
                 PAIR 5 ;
232
                 DIG 3 ;
233
                 DROP ;
234
                 DIG 3 ;
235
                 DROP ;
236
                 DIG 3 ;
237
                 DROP ;
238
                 DIG 3 ;
239
                 DROP ;
240
                 DIG 3 ;
241
                 DROP ;
242
                 DIG 3 ;
243
                 DROP ;
244
                 DIG 3 ;
245
                 DROP ;
246
                 DIG 3 ;
247
                 DROP ;
248
                 SOME ;
249
                 DIG 3 ;
250
                 CAR ;
251
                 UPDATE ;
252
                 UPDATE 5 }
253
               { DIG 3 ;
254
                 DUP ;
255
                 GET 5 ;
256
                 PUSH mutez 0 ;
257
                 DUP ;
258
                 DUP ;
259
                 DUP 8 ;
260
                 CDR ;
261
                 DUP 7 ;
262
                 PAIR 5 ;
263
                 DIG 3 ;
264
                 DROP ;
265
                 DIG 3 ;
266
                 DROP ;
267
                 SOME ;
268
                 DIG 3 ;
269
                 CAR ;
270
                 UPDATE ;
271
                 UPDATE 5 } ;
272
             UNIT ;
273
             PAIR } ;
274
         SWAP ;
275
         LAMBDA
276
           (pair nat
277
                 (pair (big_map (pair nat address) bool)
278
                       (pair
279
                         (big_map nat
280
                                  (pair bytes
281
                                        (pair nat
282
                                              (pair nat
283
                                                    (pair mutez
284
                                                          (pair timestamp
285
                                                                (pair bytes
286
                                                                      (pair nat
287
                                                                            (pair
288
                                                                              timestamp
289
                                                                              (pair
290
                                                                                address
291
                                                                                (pair
292
                                                                                  key
293
                                                                                  (pair
294
                                                                                    nat
295
                                                                                    (pair
296
                                                                                      address
297
                                                                                      (pair
298
                                                                                        key
299
                                                                                        mutez))))))))))))))
300
                         (pair
301
                           (big_map nat
302
                                    (pair nat
303
                                          (pair mutez (pair mutez (pair mutez mutez)))))
304
                           (pair mutez
305
                                 (pair
306
                                   (big_map nat
307
                                            (pair mutez
308
                                                  (pair nat
309
                                                        (pair bytes
310
                                                              (pair timestamp
311
                                                                    (pair address
312
                                                                          address))))))
313
                                   (pair (big_map (pair nat address) bool)
314
                                         (pair nat
315
                                               (pair nat
316
                                                     (pair address
317
                                                           (pair address
318
                                                                 (big_map nat
319
                                                                          (pair bool
320
                                                                                timestamp)))))))))))))
321
           (pair bool
322
                 (pair (big_map (pair nat address) bool)
323
                       (pair
324
                         (big_map nat
325
                                  (pair bytes
326
                                        (pair nat
327
                                              (pair nat
328
                                                    (pair mutez
329
                                                          (pair timestamp
330
                                                                (pair bytes
331
                                                                      (pair nat
332
                                                                            (pair
333
                                                                              timestamp
334
                                                                              (pair
335
                                                                                address
336
                                                                                (pair
337
                                                                                  key
338
                                                                                  (pair
339
                                                                                    nat
340
                                                                                    (pair
341
                                                                                      address
342
                                                                                      (pair
343
                                                                                        key
344
                                                                                        mutez))))))))))))))
345
                         (pair
346
                           (big_map nat
347
                                    (pair nat
348
                                          (pair mutez (pair mutez (pair mutez mutez)))))
349
                           (pair mutez
350
                                 (pair
351
                                   (big_map nat
352
                                            (pair mutez
353
                                                  (pair nat
354
                                                        (pair bytes
355
                                                              (pair timestamp
356
                                                                    (pair address
357
                                                                          address))))))
358
                                   (pair (big_map (pair nat address) bool)
359
                                         (pair nat
360
                                               (pair nat
361
                                                     (pair address
362
                                                           (pair address
363
                                                                 (big_map nat
364
                                                                          (pair bool
365
                                                                                timestamp)))))))))))))
366
           { UNPAIR ;
367
             SWAP ;
368
             DUP ;
369
             GET 19 ;
370
             DIG 2 ;
371
             VIEW "get_channel"
372
                   (pair (bytes %name_enc)
373
                         (pair (bytes %name_hash)
374
                               (pair (address %owner) (bool %primary)))) ;
375
             IF_NONE { PUSH string "NO_SUCH_CONTENT_CHANNEL" ; FAILWITH } {} ;
376
             GET 5 ;
377
             DUP ;
378
             SENDER ;
379
             COMPARE ;
380
             EQ ;
381
             DUP ;
382
             IF
383
               { SWAP ; DROP }
384
               { DUP 3 ;
385
                 GET 19 ;
386
                 DIG 2 ;
387
                 VIEW "get_burner_key" key ;
388
                 DUP ;
389
                 IF_NONE
390
                   { DROP }
391
                   { DROP ;
392
                     SWAP ;
393
                     DROP ;
394
                     IF_NONE { PUSH int 235 ; FAILWITH } {} ;
395
                     HASH_KEY ;
396
                     IMPLICIT_ACCOUNT ;
397
                     ADDRESS ;
398
                     SENDER ;
399
                     COMPARE ;
400
                     EQ } } ;
401
             PAIR } ;
402
         SWAP ;
403
         LAMBDA
404
           (pair nat
405
                 (pair (big_map (pair nat address) bool)
406
                       (pair
407
                         (big_map nat
408
                                  (pair bytes
409
                                        (pair nat
410
                                              (pair nat
411
                                                    (pair mutez
412
                                                          (pair timestamp
413
                                                                (pair bytes
414
                                                                      (pair nat
415
                                                                            (pair
416
                                                                              timestamp
417
                                                                              (pair
418
                                                                                address
419
                                                                                (pair
420
                                                                                  key
421
                                                                                  (pair
422
                                                                                    nat
423
                                                                                    (pair
424
                                                                                      address
425
                                                                                      (pair
426
                                                                                        key
427
                                                                                        mutez))))))))))))))
428
                         (pair
429
                           (big_map nat
430
                                    (pair nat
431
                                          (pair mutez (pair mutez (pair mutez mutez)))))
432
                           (pair mutez
433
                                 (pair
434
                                   (big_map nat
435
                                            (pair mutez
436
                                                  (pair nat
437
                                                        (pair bytes
438
                                                              (pair timestamp
439
                                                                    (pair address
440
                                                                          address))))))
441
                                   (pair (big_map (pair nat address) bool)
442
                                         (pair nat
443
                                               (pair nat
444
                                                     (pair address
445
                                                           (pair address
446
                                                                 (big_map nat
447
                                                                          (pair bool
448
                                                                                timestamp)))))))))))))
449
           (pair address
450
                 (pair (big_map (pair nat address) bool)
451
                       (pair
452
                         (big_map nat
453
                                  (pair bytes
454
                                        (pair nat
455
                                              (pair nat
456
                                                    (pair mutez
457
                                                          (pair timestamp
458
                                                                (pair bytes
459
                                                                      (pair nat
460
                                                                            (pair
461
                                                                              timestamp
462
                                                                              (pair
463
                                                                                address
464
                                                                                (pair
465
                                                                                  key
466
                                                                                  (pair
467
                                                                                    nat
468
                                                                                    (pair
469
                                                                                      address
470
                                                                                      (pair
471
                                                                                        key
472
                                                                                        mutez))))))))))))))
473
                         (pair
474
                           (big_map nat
475
                                    (pair nat
476
                                          (pair mutez (pair mutez (pair mutez mutez)))))
477
                           (pair mutez
478
                                 (pair
479
                                   (big_map nat
480
                                            (pair mutez
481
                                                  (pair nat
482
                                                        (pair bytes
483
                                                              (pair timestamp
484
                                                                    (pair address
485
                                                                          address))))))
486
                                   (pair (big_map (pair nat address) bool)
487
                                         (pair nat
488
                                               (pair nat
489
                                                     (pair address
490
                                                           (pair address
491
                                                                 (big_map nat
492
                                                                          (pair bool
493
                                                                                timestamp)))))))))))))
494
           { UNPAIR ;
495
             SWAP ;
496
             DUP ;
497
             GET 19 ;
498
             DIG 2 ;
499
             VIEW "get_channel"
500
                   (pair (bytes %name_enc)
501
                         (pair (bytes %name_hash)
502
                               (pair (address %owner) (bool %primary)))) ;
503
             IF_NONE { PUSH string "NO_SUCH_CONTENT_CHANNEL" ; FAILWITH } {} ;
504
             GET 5 ;
505
             PAIR } ;
506
         SWAP ;
507
         UNPAIR ;
508
         IF_LEFT
509
           { IF_LEFT
510
               { IF_LEFT
511
                   { DIG 3 ;
512
                     DROP ;
513
                     DIG 3 ;
514
                     DROP ;
515
                     IF_LEFT
516
                       { DIG 2 ;
517
                         DROP ;
518
                         PUSH mutez 0 ;
519
                         AMOUNT ;
520
                         COMPARE ;
521
                         EQ ;
522
                         IF {} { PUSH string "NO_TEZ_ACCEPTED" ; FAILWITH } ;
523
                         DUP 2 ;
524
                         GET 3 ;
525
                         DUP 2 ;
526
                         MEM ;
527
                         IF {} { PUSH string "NO_SUCH_CHANNEL" ; FAILWITH } ;
528
                         DUP 2 ;
529
                         GET 3 ;
530
                         DUP 2 ;
531
                         GET ;
532
                         IF_NONE { PUSH int 409 ; FAILWITH } {} ;
533
                         PUSH int 2592000 ;
534
                         DUP 2 ;
535
                         GET 9 ;
536
                         ADD ;
537
                         NOW ;
538
                         COMPARE ;
539
                         GT ;
540
                         IF {} { PUSH string "NOT_STALE_YET" ; FAILWITH } ;
541
                         DUP ;
542
                         GET 26 ;
543
                         DUP 2 ;
544
                         GET 7 ;
545
                         SUB_MUTEZ ;
546
                         IF_NONE { PUSH int 412 ; FAILWITH } {} ;
547
                         PUSH mutez 0 ;
548
                         DUP 2 ;
549
                         COMPARE ;
550
                         GT ;
551
                         IF
552
                           { NIL operation ;
553
                             DIG 2 ;
554
                             GET 23 ;
555
                             CONTRACT unit ;
556
                             IF_NONE { PUSH int 414 ; FAILWITH } {} ;
557
                             DIG 2 ;
558
                             UNIT ;
559
                             TRANSFER_TOKENS ;
560
                             CONS }
561
                           { DROP 2 ; NIL operation } ;
562
                         DIG 2 ;
563
                         DUP ;
564
                         GET 3 ;
565
                         NONE (pair bytes
566
                                    (pair nat
567
                                          (pair nat
568
                                                (pair mutez
569
                                                      (pair timestamp
570
                                                            (pair bytes
571
                                                                  (pair nat
572
                                                                        (pair timestamp
573
                                                                              (pair
574
                                                                                address
575
                                                                                (pair
576
                                                                                  key
577
                                                                                  (pair
578
                                                                                    nat
579
                                                                                    (pair
580
                                                                                      address
581
                                                                                      (pair
582
                                                                                        key
583
                                                                                        mutez))))))))))))) ;
584
                         DUP 5 ;
585
                         UPDATE ;
586
                         UPDATE 3 ;
587
                         DUG 2 ;
588
                         SWAP ;
589
                         EMIT %channel_cleaned nat ;
590
                         CONS }
591
                       { DIG 2 ;
592
                         DROP ;
593
                         PUSH mutez 0 ;
594
                         AMOUNT ;
595
                         COMPARE ;
596
                         EQ ;
597
                         IF {} { PUSH string "NO_TEZ_ACCEPTED" ; FAILWITH } ;
598
                         DUP 2 ;
599
                         GET 9 ;
600
                         DUP 2 ;
601
                         MEM ;
602
                         IF {} { PUSH string "NO_SUCH_MAIL" ; FAILWITH } ;
603
                         DUP 2 ;
604
                         GET 9 ;
605
                         DUP 2 ;
606
                         GET ;
607
                         IF_NONE { PUSH int 670 ; FAILWITH } {} ;
608
                         PUSH int 2592000 ;
609
                         DUP 2 ;
610
                         GET 7 ;
611
                         ADD ;
612
                         NOW ;
613
                         COMPARE ;
614
                         GT ;
615
                         IF {} { PUSH string "NOT_STALE_YET" ; FAILWITH } ;
616
                         PUSH mutez 0 ;
617
                         DUP 2 ;
618
                         CAR ;
619
                         COMPARE ;
620
                         GT ;
621
                         IF
622
                           { NIL operation ;
623
                             DUP 2 ;
624
                             GET 10 ;
625
                             CONTRACT unit ;
626
                             IF_NONE { PUSH int 673 ; FAILWITH } {} ;
627
                             DIG 2 ;
628
                             CAR ;
629
                             UNIT ;
630
                             TRANSFER_TOKENS ;
631
                             CONS }
632
                           { DROP ; NIL operation } ;
633
                         DIG 2 ;
634
                         DUP ;
635
                         GET 9 ;
636
                         NONE (pair mutez
637
                                    (pair nat
638
                                          (pair bytes
639
                                                (pair timestamp (pair address address))))) ;
640
                         DUP 5 ;
641
                         UPDATE ;
642
                         UPDATE 9 ;
643
                         DUG 2 ;
644
                         SWAP ;
645
                         EMIT %offline_cleaned nat ;
646
                         CONS } }
647
                   { IF_LEFT
648
                       { PUSH mutez 0 ;
649
                         AMOUNT ;
650
                         COMPARE ;
651
                         EQ ;
652
                         IF {} { PUSH string "NO_TEZ_ACCEPTED" ; FAILWITH } ;
653
                         DUP 2 ;
654
                         GET 3 ;
655
                         DUP 2 ;
656
                         GET 3 ;
657
                         MEM ;
658
                         IF {} { PUSH string "NO_SUCH_CHANNEL" ; FAILWITH } ;
659
                         DUP 2 ;
660
                         GET 3 ;
661
                         DUP 2 ;
662
                         GET 3 ;
663
                         GET ;
664
                         IF_NONE { PUSH int 316 ; FAILWITH } {} ;
665
                         DUP ;
666
                         GET 19 ;
667
                         HASH_KEY ;
668
                         IMPLICIT_ACCOUNT ;
669
                         ADDRESS ;
670
                         DUP 2 ;
671
                         GET 17 ;
672
                         SENDER ;
673
                         COMPARE ;
674
                         EQ ;
675
                         IF { DROP ; PUSH bool True } { SENDER ; COMPARE ; EQ } ;
676
                         IF {} { PUSH string "NOT_RECIPIENT" ; FAILWITH } ;
677
                         DUP ;
678
                         GET 7 ;
679
                         DUP 3 ;
680
                         CAR ;
681
                         COMPARE ;
682
                         LE ;
683
                         IF {} { PUSH string "AMOUNT_EXCEEDS_DEPOSIT" ; FAILWITH } ;
684
                         DUP ;
685
                         GET 26 ;
686
                         DUP 3 ;
687
                         CAR ;
688
                         COMPARE ;
689
                         GT ;
690
                         IF {} { PUSH string "NOTHING_TO_COLLECT" ; FAILWITH } ;
691
                         SELF_ADDRESS ;
692
                         DUP 3 ;
693
                         GET 3 ;
694
                         DUP 4 ;
695
                         CAR ;
696
                         PAIR 3 ;
697
                         PACK ;
698
                         DUP 3 ;
699
                         GET 4 ;
700
                         DUP 3 ;
701
                         GET 25 ;
702
                         CHECK_SIGNATURE ;
703
                         IF {} { PUSH string "BAD_SIGNATURE" ; FAILWITH } ;
704
                         DUP ;
705
                         GET 26 ;
706
                         DUP 3 ;
707
                         CAR ;
708
                         SUB_MUTEZ ;
709
                         IF_NONE { PUSH int 364 ; FAILWITH } {} ;
710
                         PUSH nat 100 ;
711
                         PUSH nat 1 ;
712
                         DUP 3 ;
713
                         MUL ;
714
                         EDIV ;
715
                         IF_NONE { PUSH int 365 ; FAILWITH } {} ;
716
                         CAR ;
717
                         DIG 4 ;
718
                         DUP ;
719
                         GET 7 ;
720
                         DUP 3 ;
721
                         ADD ;
722
                         UPDATE 7 ;
723
                         DUG 4 ;
724
                         NIL operation ;
725
                         DUP 4 ;
726
                         GET 17 ;
727
                         CONTRACT unit ;
728
                         IF_NONE { PUSH int 367 ; FAILWITH } {} ;
729
                         DIG 2 ;
730
                         DUP 4 ;
731
                         SUB_MUTEZ ;
732
                         IF_NONE { PUSH int 367 ; FAILWITH } {} ;
733
                         UNIT ;
734
                         TRANSFER_TOKENS ;
735
                         CONS ;
736
                         DIG 2 ;
737
                         DUP 4 ;
738
                         CAR ;
739
                         UPDATE 26 ;
740
                         DUG 2 ;
741
                         DIG 4 ;
742
                         DUP ;
743
                         GET 3 ;
744
                         DUP 5 ;
745
                         SOME ;
746
                         DUP 7 ;
747
                         GET 3 ;
748
                         UPDATE ;
749
                         UPDATE 3 ;
750
                         DUG 4 ;
751
                         DUP 5 ;
752
                         GET 11 ;
753
                         DUP 4 ;
754
                         GET 23 ;
755
                         DUP 5 ;
756
                         GET 5 ;
757
                         PAIR ;
758
                         GET ;
759
                         IF_NONE { PUSH bool False } {} ;
760
                         IF
761
                           { SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP }
762
                           { DIG 3 ;
763
                             DROP ;
764
                             DIG 4 ;
765
                             DROP ;
766
                             DIG 4 ;
767
                             DROP ;
768
                             DIG 4 ;
769
                             DIG 2 ;
770
                             DIG 3 ;
771
                             GET 5 ;
772
                             PAIR ;
773
                             SWAP ;
774
                             DIG 3 ;
775
                             DIG 2 ;
776
                             PAIR ;
777
                             EXEC ;
778
                             CDR ;
779
                             SWAP } }
780
                       { PUSH mutez 0 ;
781
                         AMOUNT ;
782
                         COMPARE ;
783
                         EQ ;
784
                         IF {} { PUSH string "NO_TEZ_ACCEPTED" ; FAILWITH } ;
785
                         DUP 2 ;
786
                         GET 9 ;
787
                         DUP 2 ;
788
                         MEM ;
789
                         IF {} { PUSH string "NO_SUCH_MAIL" ; FAILWITH } ;
790
                         DUP 2 ;
791
                         GET 9 ;
792
                         DUP 2 ;
793
                         GET ;
794
                         IF_NONE { PUSH int 650 ; FAILWITH } {} ;
795
                         DUP 5 ;
796
                         SWAP ;
797
                         DUP ;
798
                         GET 3 ;
799
                         DIG 2 ;
800
                         DIG 4 ;
801
                         DIG 2 ;
802
                         PAIR ;
803
                         EXEC ;
804
                         UNPAIR ;
805
                         DIG 6 ;
806
                         DIG 6 ;
807
                         DIG 6 ;
808
                         DIG 4 ;
809
                         DIG 6 ;
810
                         DIG 6 ;
811
                         DIG 6 ;
812
                         IF {} { PUSH string "NOT_RECIPIENT" ; FAILWITH } ;
813
                         PUSH nat 100 ;
814
                         PUSH nat 1 ;
815
                         DUP 3 ;
816
                         CAR ;
817
                         MUL ;
818
                         EDIV ;
819
                         IF_NONE { PUSH int 654 ; FAILWITH } {} ;
820
                         CAR ;
821
                         DIG 3 ;
822
                         DUP ;
823
                         GET 7 ;
824
                         DUP 3 ;
825
                         ADD ;
826
                         UPDATE 7 ;
827
                         DUG 3 ;
828
                         NIL operation ;
829
                         DUP 3 ;
830
                         GET 9 ;
831
                         CONTRACT unit ;
832
                         IF_NONE { PUSH int 656 ; FAILWITH } {} ;
833
                         DIG 2 ;
834
                         DUP 4 ;
835
                         CAR ;
836
                         SUB_MUTEZ ;
837
                         IF_NONE { PUSH int 656 ; FAILWITH } {} ;
838
                         UNIT ;
839
                         TRANSFER_TOKENS ;
840
                         CONS ;
841
                         DUP 4 ;
842
                         GET 11 ;
843
                         DUP 3 ;
844
                         GET 10 ;
845
                         DUP 4 ;
846
                         GET 3 ;
847
                         PAIR ;
848
                         GET ;
849
                         IF_NONE { PUSH bool False } {} ;
850
                         IF
851
                           { SWAP ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP }
852
                           { DIG 4 ;
853
                             DROP ;
854
                             DIG 4 ;
855
                             DROP ;
856
                             DIG 4 ;
857
                             DUP 3 ;
858
                             CAR ;
859
                             DIG 3 ;
860
                             GET 3 ;
861
                             PAIR ;
862
                             SWAP ;
863
                             DIG 4 ;
864
                             DIG 2 ;
865
                             PAIR ;
866
                             EXEC ;
867
                             CDR ;
868
                             DUG 2 } ;
869
                         DIG 2 ;
870
                         DUP ;
871
                         GET 9 ;
872
                         NONE (pair mutez
873
                                    (pair nat
874
                                          (pair bytes
875
                                                (pair timestamp (pair address address))))) ;
876
                         DIG 4 ;
877
                         UPDATE ;
878
                         UPDATE 9 ;
879
                         SWAP } } }
880
               { IF_LEFT
881
                   { IF_LEFT
882
                       { PUSH mutez 0 ;
883
                         AMOUNT ;
884
                         COMPARE ;
885
                         GT ;
886
                         IF {} { PUSH string "EMPTY_DONATION" ; FAILWITH } ;
887
                         DUP 3 ;
888
                         SWAP ;
889
                         DUP ;
890
                         CAR ;
891
                         DIG 2 ;
892
                         DIG 3 ;
893
                         DIG 2 ;
894
                         PAIR ;
895
                         EXEC ;
896
                         UNPAIR ;
897
                         DIG 5 ;
898
                         DIG 5 ;
899
                         DIG 5 ;
900
                         DIG 4 ;
901
                         DIG 5 ;
902
                         DIG 5 ;
903
                         PUSH nat 0 ;
904
                         DUP 3 ;
905
                         CDR ;
906
                         SIZE ;
907
                         COMPARE ;
908
                         GT ;
909
                         IF
910
                           { DUP 3 ;
911
                             CAR ;
912
                             SENDER ;
913
                             DUP 4 ;
914
                             CAR ;
915
                             PAIR ;
916
                             GET ;
917
                             IF_NONE { PUSH bool False } {} ;
918
                             IF { PUSH string "BLOCKED" ; FAILWITH } {} ;
919
                             DUP 3 ;
920
                             GET 11 ;
921
                             SENDER ;
922
                             DUP 4 ;
923
                             CAR ;
924
                             PAIR ;
925
                             GET ;
926
                             IF_NONE { PUSH bool False } {} ;
927
                             IF { PUSH string "MUTED" ; FAILWITH } {} }
928
                           {} ;
929
                         DUP 3 ;
930
                         GET 15 ;
931
                         DIG 3 ;
932
                         DUP ;
933
                         GET 9 ;
934
                         SENDER ;
935
                         DUP 5 ;
936
                         NOW ;
937
                         DUP 8 ;
938
                         CDR ;
939
                         DUP 9 ;
940
                         CAR ;
941
                         AMOUNT ;
942
                         PAIR 6 ;
943
                         DIG 6 ;
944
                         DROP ;
945
                         DIG 6 ;
946
                         DROP ;
947
                         DIG 6 ;
948
                         DROP ;
949
                         SOME ;
950
                         DUP 4 ;
951
                         UPDATE ;
952
                         UPDATE 9 ;
953
                         DUP ;
954
                         GET 15 ;
955
                         PUSH nat 1 ;
956
                         ADD ;
957
                         UPDATE 15 ;
958
                         DUG 3 ;
959
                         NIL operation ;
960
                         DUG 2 ;
961
                         DIG 3 ;
962
                         CAR ;
963
                         PAIR 3 ;
964
                         EMIT %offline_donation (pair (nat %cid)
965
                                                      (pair (nat %mail_id)
966
                                                            (address %recipient))) ;
967
                         CONS }
968
                       { DIG 2 ;
969
                         DROP ;
970
                         DIG 2 ;
971
                         DROP ;
972
                         DIG 2 ;
973
                         DROP ;
974
                         PUSH mutez 0 ;
975
                         AMOUNT ;
976
                         COMPARE ;
977
                         EQ ;
978
                         IF {} { PUSH string "NO_TEZ_ACCEPTED" ; FAILWITH } ;
979
                         DUP 2 ;
980
                         GET 3 ;
981
                         DUP 2 ;
982
                         CAR ;
983
                         MEM ;
984
                         IF {} { PUSH string "NO_SUCH_CHANNEL" ; FAILWITH } ;
985
                         DUP 2 ;
986
                         GET 3 ;
987
                         DUP 2 ;
988
                         CAR ;
989
                         GET ;
990
                         IF_NONE { PUSH int 454 ; FAILWITH } {} ;
991
                         DUP ;
992
                         GET 23 ;
993
                         SENDER ;
994
                         COMPARE ;
995
                         EQ ;
996
                         IF {} { PUSH string "NOT_SENDER" ; FAILWITH } ;
997
                         DUP ;
998
                         GET 9 ;
999
                         DUP 3 ;
1000
                         CDR ;
1001
                         COMPARE ;
1002
                         GT ;
1003
                         IF {} { PUSH string "NOT_LATER" ; FAILWITH } ;
1004
                         DUP 2 ;
1005
                         CDR ;
1006
                         UPDATE 9 ;
1007
                         DIG 2 ;
1008
                         DUP ;
1009
                         GET 3 ;
1010
                         DIG 2 ;
1011
                         SOME ;
1012
                         DIG 3 ;
1013
                         CAR ;
1014
                         UPDATE ;
1015
                         UPDATE 3 ;
1016
                         NIL operation } }
1017
                   { IF_LEFT
1018
                       { DIG 2 ;
1019
                         DROP ;
1020
                         DIG 2 ;
1021
                         DROP ;
1022
                         DIG 2 ;
1023
                         DROP ;
1024
                         PUSH mutez 0 ;
1025
                         AMOUNT ;
1026
                         COMPARE ;
1027
                         EQ ;
1028
                         IF {} { PUSH string "NO_TEZ_ACCEPTED" ; FAILWITH } ;
1029
                         DUP 2 ;
1030
                         GET 3 ;
1031
                         DUP 2 ;
1032
                         MEM ;
1033
                         IF {} { PUSH string "NO_SUCH_CHANNEL" ; FAILWITH } ;
1034
                         SWAP ;
1035
                         DUP ;
1036
                         GET 3 ;
1037
                         DIG 2 ;
1038
                         GET ;
1039
                         IF_NONE { PUSH int 699 ; FAILWITH } {} ;
1040
                         DUP ;
1041
                         GET 21 ;
1042
                         DUP 2 ;
1043
                         GET 13 ;
1044
                         COMPARE ;
1045
                         GT ;
1046
                         IF {} { PUSH string "ANSWERED" ; FAILWITH } ;
1047
                         PUSH int 120 ;
1048
                         DUP 2 ;
1049
                         GET 15 ;
1050
                         ADD ;
1051
                         NOW ;
1052
                         COMPARE ;
1053
                         GT ;
1054
                         IF {} { PUSH string "NOT_STALE_YET" ; FAILWITH } ;
1055
                         DUP 2 ;
1056
                         GET 20 ;
1057
                         DUP 2 ;
1058
                         GET 5 ;
1059
                         GET ;
1060
                         IF_NONE
1061
                           { PUSH (pair bool timestamp) (Pair False "1970-01-01T00:00:00Z") }
1062
                           {} ;
1063
                         CDR ;
1064
                         DUP 2 ;
1065
                         GET 15 ;
1066
                         COMPARE ;
1067
                         GT ;
1068
                         IF {} { PUSH string "RECENTLY_ONLINE" ; FAILWITH } ;
1069
                         SWAP ;
1070
                         DUP ;
1071
                         GET 20 ;
1072
                         NOW ;
1073
                         PUSH bool False ;
1074
                         PAIR ;
1075
                         SOME ;
1076
                         DUP 4 ;
1077
                         GET 5 ;
1078
                         UPDATE ;
1079
                         UPDATE 20 ;
1080
                         SWAP ;
1081
                         NIL operation ;
1082
                         PUSH bool False ;
1083
                         DIG 2 ;
1084
                         GET 5 ;
1085
                         PAIR ;
1086
                         EMIT %status_changed (pair (nat %cid) (bool %online)) ;
1087
                         CONS }
1088
                       { IF_LEFT
1089
                           { PUSH mutez 0 ;
1090
                             AMOUNT ;
1091
                             COMPARE ;
1092
                             GT ;
1093
                             IF {} { PUSH string "EMPTY_DEPOSIT" ; FAILWITH } ;
1094
                             NOW ;
1095
                             DUP 2 ;
1096
                             GET 3 ;
1097
                             COMPARE ;
1098
                             GT ;
1099
                             IF {} { PUSH string "EXPIRATION_IN_PAST" ; FAILWITH } ;
1100
                             DUP 3 ;
1101
                             SWAP ;
1102
                             DUP ;
1103
                             CAR ;
1104
                             DIG 2 ;
1105
                             DIG 3 ;
1106
                             DIG 2 ;
1107
                             PAIR ;
1108
                             EXEC ;
1109
                             UNPAIR ;
1110
                             DIG 5 ;
1111
                             DIG 5 ;
1112
                             DIG 5 ;
1113
                             DIG 4 ;
1114
                             DIG 5 ;
1115
                             DIG 5 ;
1116
                             DUP 3 ;
1117
                             CAR ;
1118
                             SENDER ;
1119
                             DUP 4 ;
1120
                             CAR ;
1121
                             PAIR ;
1122
                             GET ;
1123
                             IF_NONE { PUSH bool False } {} ;
1124
                             IF { PUSH string "BLOCKED" ; FAILWITH } {} ;
1125
                             DUP 3 ;
1126
                             GET 13 ;
1127
                             DIG 3 ;
1128
                             DUP ;
1129
                             GET 3 ;
1130
                             PUSH mutez 0 ;
1131
                             DUP 6 ;
1132
                             GET 8 ;
1133
                             SENDER ;
1134
                             PUSH nat 0 ;
1135
                             DUP 9 ;
1136
                             GET 7 ;
1137
                             DUP 9 ;
1138
                             NOW ;
1139
                             PUSH nat 1 ;
1140
                             DUP 13 ;
1141
                             GET 5 ;
1142
                             DUP 14 ;
1143
                             GET 3 ;
1144
                             AMOUNT ;
1145
                             DUP 16 ;
1146
                             CAR ;
1147
                             PUSH nat 0 ;
1148
                             PUSH bytes 0x ;
1149
                             PAIR 14 ;
1150
                             DIG 6 ;
1151
                             DROP ;
1152
                             DIG 6 ;
1153
                             DROP ;
1154
                             DIG 6 ;
1155
                             DROP ;
1156
                             SOME ;
1157
                             DUP 4 ;
1158
                             UPDATE ;
1159
                             UPDATE 3 ;
1160
                             DUP ;
1161
                             GET 13 ;
1162
                             PUSH nat 1 ;
1163
                             ADD ;
1164
                             UPDATE 13 ;
1165
                             DUG 3 ;
1166
                             NIL operation ;
1167
                             DIG 2 ;
1168
                             DIG 3 ;
1169
                             CAR ;
1170
                             DIG 3 ;
1171
                             PAIR 3 ;
1172
                             EMIT %channel_opened (pair (nat %channel_id)
1173
                                                        (pair (nat %cid)
1174
                                                              (address %recipient))) ;
1175
                             CONS }
1176
                           { DIG 2 ;
1177
                             DROP ;
1178
                             DIG 2 ;
1179
                             DROP ;
1180
                             DIG 2 ;
1181
                             DROP ;
1182
                             PUSH mutez 0 ;
1183
                             AMOUNT ;
1184
                             COMPARE ;
1185
                             EQ ;
1186
                             IF {} { PUSH string "NO_TEZ_ACCEPTED" ; FAILWITH } ;
1187
                             DUP 2 ;
1188
                             GET 3 ;
1189
                             DUP 2 ;
1190
                             CDR ;
1191
                             MEM ;
1192
                             IF {} { PUSH string "NO_SUCH_CHANNEL" ; FAILWITH } ;
1193
                             DUP 2 ;
1194
                             GET 3 ;
1195
                             DUP 2 ;
1196
                             CDR ;
1197
                             GET ;
1198
                             IF_NONE { PUSH int 471 ; FAILWITH } {} ;
1199
                             DUP ;
1200
                             GET 19 ;
1201
                             HASH_KEY ;
1202
                             IMPLICIT_ACCOUNT ;
1203
                             ADDRESS ;
1204
                             DUP 2 ;
1205
                             GET 17 ;
1206
                             SENDER ;
1207
                             COMPARE ;
1208
                             EQ ;
1209
                             IF { DROP ; PUSH bool True } { SENDER ; COMPARE ; EQ } ;
1210
                             IF {} { PUSH string "NOT_RECIPIENT" ; FAILWITH } ;
1211
                             DUP 2 ;
1212
                             CAR ;
1213
                             UPDATE 1 ;
1214
                             DUP ;
1215
                             GET 13 ;
1216
                             UPDATE 3 ;
1217
                             DUP ;
1218
                             GET 13 ;
1219
                             UPDATE 21 ;
1220
                             DIG 2 ;
1221
                             DUP ;
1222
                             GET 3 ;
1223
                             DIG 2 ;
1224
                             SOME ;
1225
                             DIG 3 ;
1226
                             CDR ;
1227
                             UPDATE ;
1228
                             UPDATE 3 ;
1229
                             NIL operation } } } } }
1230
           { IF_LEFT
1231
               { IF_LEFT
1232
                   { DIG 2 ;
1233
                     DROP ;
1234
                     DIG 2 ;
1235
                     DROP ;
1236
                     DIG 2 ;
1237
                     DROP ;
1238
                     IF_LEFT
1239
                       { PUSH mutez 0 ;
1240
                         AMOUNT ;
1241
                         COMPARE ;
1242
                         EQ ;
1243
                         IF {} { PUSH string "NO_TEZ_ACCEPTED" ; FAILWITH } ;
1244
                         DUP 2 ;
1245
                         GET 3 ;
1246
                         DUP 2 ;
1247
                         CAR ;
1248
                         MEM ;
1249
                         IF {} { PUSH string "NO_SUCH_CHANNEL" ; FAILWITH } ;
1250
                         DUP 2 ;
1251
                         GET 3 ;
1252
                         DUP 2 ;
1253
                         CAR ;
1254
                         GET ;
1255
                         IF_NONE { PUSH int 505 ; FAILWITH } {} ;
1256
                         DUP ;
1257
                         GET 25 ;
1258
                         HASH_KEY ;
1259
                         IMPLICIT_ACCOUNT ;
1260
                         ADDRESS ;
1261
                         DUP 2 ;
1262
                         GET 23 ;
1263
                         SENDER ;
1264
                         COMPARE ;
1265
                         EQ ;
1266
                         IF { DROP ; PUSH bool True } { SENDER ; COMPARE ; EQ } ;
1267
                         IF {} { PUSH string "NOT_SENDER" ; FAILWITH } ;
1268
                         DUP 3 ;
1269
                         CAR ;
1270
                         DUP 2 ;
1271
                         GET 23 ;
1272
                         DUP 3 ;
1273
                         GET 5 ;
1274
                         PAIR ;
1275
                         GET ;
1276
                         IF_NONE { PUSH bool False } {} ;
1277
                         IF { PUSH string "BLOCKED" ; FAILWITH } {} ;
1278
                         DUP 2 ;
1279
                         CDR ;
1280
                         UPDATE 11 ;
1281
                         DUP ;
1282
                         GET 13 ;
1283
                         PUSH nat 1 ;
1284
                         ADD ;
1285
                         UPDATE 13 ;
1286
                         NOW ;
1287
                         UPDATE 15 ;
1288
                         DIG 2 ;
1289
                         DUP ;
1290
                         GET 3 ;
1291
                         DIG 2 ;
1292
                         SOME ;
1293
                         DIG 3 ;
1294
                         CAR ;
1295
                         UPDATE ;
1296
                         UPDATE 3 }
1297
                       { PUSH mutez 0 ;
1298
                         AMOUNT ;
1299
                         COMPARE ;
1300
                         EQ ;
1301
                         IF {} { PUSH string "NO_TEZ_ACCEPTED" ; FAILWITH } ;
1302
                         DUP 2 ;
1303
                         GET 3 ;
1304
                         DUP 2 ;
1305
                         CAR ;
1306
                         MEM ;
1307
                         IF {} { PUSH string "NO_SUCH_CHANNEL" ; FAILWITH } ;
1308
                         DUP 2 ;
1309
                         GET 3 ;
1310
                         DUP 2 ;
1311
                         CAR ;
1312
                         GET ;
1313
                         IF_NONE { PUSH int 547 ; FAILWITH } {} ;
1314
                         DUP ;
1315
                         GET 23 ;
1316
                         SENDER ;
1317
                         COMPARE ;
1318
                         EQ ;
1319
                         IF
1320
                           { DUP 2 ; CDR ; UPDATE 25 }
1321
                           { DUP ;
1322
                             GET 17 ;
1323
                             SENDER ;
1324
                             COMPARE ;
1325
                             EQ ;
1326
                             IF {} { PUSH string "NOT_PARTY" ; FAILWITH } ;
1327
                             DUP 2 ;
1328
                             CDR ;
1329
                             UPDATE 19 } ;
1330
                         DIG 2 ;
1331
                         DUP ;
1332
                         GET 3 ;
1333
                         DIG 2 ;
1334
                         SOME ;
1335
                         DIG 3 ;
1336
                         CAR ;
1337
                         UPDATE ;
1338
                         UPDATE 3 } ;
1339
                     NIL operation }
1340
                   { IF_LEFT
1341
                       { DIG 2 ;
1342
                         DROP ;
1343
                         DIG 3 ;
1344
                         DROP ;
1345
                         PUSH mutez 0 ;
1346
                         AMOUNT ;
1347
                         COMPARE ;
1348
                         EQ ;
1349
                         IF {} { PUSH string "NO_TEZ_ACCEPTED" ; FAILWITH } ;
1350
                         DIG 2 ;
1351
                         SWAP ;
1352
                         DUP ;
1353
                         CAR ;
1354
                         DIG 2 ;
1355
                         DIG 3 ;
1356
                         DIG 2 ;
1357
                         PAIR ;
1358
                         EXEC ;
1359
                         UNPAIR ;
1360
                         SWAP ;
1361
                         DUG 2 ;
1362
                         IF {} { PUSH string "NOT_AUTHORIZED" ; FAILWITH } ;
1363
                         SWAP ;
1364
                         DUP ;
1365
                         CAR ;
1366
                         DUP 3 ;
1367
                         GET 3 ;
1368
                         SOME ;
1369
                         DIG 3 ;
1370
                         DUP ;
1371
                         GET 4 ;
1372
                         SWAP ;
1373
                         CAR ;
1374
                         PAIR ;
1375
                         UPDATE ;
1376
                         UPDATE 1 ;
1377
                         NIL operation }
1378
                       { IF_LEFT
1379
                           { DIG 2 ;
1380
                             DROP ;
1381
                             DIG 3 ;
1382
                             DROP ;
1383
                             PUSH mutez 0 ;
1384
                             AMOUNT ;
1385
                             COMPARE ;
1386
                             EQ ;
1387
                             IF {} { PUSH string "NO_TEZ_ACCEPTED" ; FAILWITH } ;
1388
                             DIG 2 ;
1389
                             SWAP ;
1390
                             DUP ;
1391
                             CAR ;
1392
                             DIG 2 ;
1393
                             DIG 3 ;
1394
                             DIG 2 ;
1395
                             PAIR ;
1396
                             EXEC ;
1397
                             UNPAIR ;
1398
                             SWAP ;
1399
                             DUG 2 ;
1400
                             IF {} { PUSH string "NOT_AUTHORIZED" ; FAILWITH } ;
1401
                             SWAP ;
1402
                             DUP ;
1403
                             GET 11 ;
1404
                             DUP 3 ;
1405
                             GET 3 ;
1406
                             SOME ;
1407
                             DIG 3 ;
1408
                             DUP ;
1409
                             GET 4 ;
1410
                             SWAP ;
1411
                             CAR ;
1412
                             PAIR ;
1413
                             UPDATE ;
1414
                             UPDATE 11 ;
1415
                             NIL operation }
1416
                           { DIG 2 ;
1417
                             DROP ;
1418
                             DIG 3 ;
1419
                             DROP ;
1420
                             PUSH mutez 0 ;
1421
                             AMOUNT ;
1422
                             COMPARE ;
1423
                             EQ ;
1424
                             IF {} { PUSH string "NO_TEZ_ACCEPTED" ; FAILWITH } ;
1425
                             DIG 2 ;
1426
                             SWAP ;
1427
                             DUP ;
1428
                             CAR ;
1429
                             DIG 2 ;
1430
                             DIG 3 ;
1431
                             DIG 2 ;
1432
                             PAIR ;
1433
                             EXEC ;
1434
                             UNPAIR ;
1435
                             SWAP ;
1436
                             DUG 2 ;
1437
                             IF {} { PUSH string "NOT_AUTHORIZED" ; FAILWITH } ;
1438
                             SWAP ;
1439
                             DUP ;
1440
                             GET 20 ;
1441
                             NOW ;
1442
                             DUP 4 ;
1443
                             CDR ;
1444
                             PAIR ;
1445
                             SOME ;
1446
                             DUP 4 ;
1447
                             CAR ;
1448
                             UPDATE ;
1449
                             UPDATE 20 ;
1450
                             SWAP ;
1451
                             EMIT %status_changed (pair (nat %cid) (bool %online)) ;
1452
                             NIL operation ;
1453
                             SWAP ;
1454
                             CONS } } } }
1455
               { DIG 3 ;
1456
                 DROP ;
1457
                 DIG 3 ;
1458
                 DROP ;
1459
                 IF_LEFT
1460
                   { IF_LEFT
1461
                       { DIG 2 ;
1462
                         DROP ;
1463
                         PUSH mutez 0 ;
1464
                         AMOUNT ;
1465
                         COMPARE ;
1466
                         EQ ;
1467
                         IF {} { PUSH string "NO_TEZ_ACCEPTED" ; FAILWITH } ;
1468
                         DUP 2 ;
1469
                         GET 3 ;
1470
                         DUP 2 ;
1471
                         CDR ;
1472
                         MEM ;
1473
                         IF {} { PUSH string "NO_SUCH_CHANNEL" ; FAILWITH } ;
1474
                         DUP 2 ;
1475
                         GET 3 ;
1476
                         DUP 2 ;
1477
                         CDR ;
1478
                         GET ;
1479
                         IF_NONE { PUSH int 594 ; FAILWITH } {} ;
1480
                         DUP ;
1481
                         GET 19 ;
1482
                         HASH_KEY ;
1483
                         IMPLICIT_ACCOUNT ;
1484
                         ADDRESS ;
1485
                         DUP 2 ;
1486
                         GET 17 ;
1487
                         SENDER ;
1488
                         COMPARE ;
1489
                         EQ ;
1490
                         IF { DROP ; PUSH bool True } { SENDER ; COMPARE ; EQ } ;
1491
                         IF {} { PUSH string "NOT_RECIPIENT" ; FAILWITH } ;
1492
                         DUP ;
1493
                         GET 13 ;
1494
                         UPDATE 21 ;
1495
                         DIG 2 ;
1496
                         DUP ;
1497
                         GET 3 ;
1498
                         DIG 2 ;
1499
                         SOME ;
1500
                         DUP 4 ;
1501
                         CDR ;
1502
                         UPDATE ;
1503
                         UPDATE 3 ;
1504
                         SWAP ;
1505
                         NIL operation ;
1506
                         SWAP ;
1507
                         UNPAIR ;
1508
                         SWAP ;
1509
                         PAIR ;
1510
                         EMIT %answer_signal (pair (nat %channel_id) (bytes %sdp)) ;
1511
                         CONS }
1512
                       { DIG 2 ;
1513
                         DROP ;
1514
                         PUSH mutez 0 ;
1515
                         AMOUNT ;
1516
                         COMPARE ;
1517
                         EQ ;
1518
                         IF {} { PUSH string "NO_TEZ_ACCEPTED" ; FAILWITH } ;
1519
                         DUP 2 ;
1520
                         GET 3 ;
1521
                         DUP 2 ;
1522
                         CAR ;
1523
                         MEM ;
1524
                         IF {} { PUSH string "NO_SUCH_CHANNEL" ; FAILWITH } ;
1525
                         DUP 2 ;
1526
                         GET 3 ;
1527
                         DUP 2 ;
1528
                         CAR ;
1529
                         GET ;
1530
                         IF_NONE { PUSH int 567 ; FAILWITH } {} ;
1531
                         DUP ;
1532
                         GET 25 ;
1533
                         HASH_KEY ;
1534
                         IMPLICIT_ACCOUNT ;
1535
                         ADDRESS ;
1536
                         DUP 2 ;
1537
                         GET 23 ;
1538
                         SENDER ;
1539
                         COMPARE ;
1540
                         EQ ;
1541
                         IF { DROP ; PUSH bool True } { SENDER ; COMPARE ; EQ } ;
1542
                         IF {} { PUSH string "NOT_SENDER" ; FAILWITH } ;
1543
                         DUP 3 ;
1544
                         CAR ;
1545
                         SWAP ;
1546
                         DUP ;
1547
                         GET 23 ;
1548
                         SWAP ;
1549
                         GET 5 ;
1550
                         PAIR ;
1551
                         GET ;
1552
                         IF_NONE { PUSH bool False } {} ;
1553
                         IF { PUSH string "BLOCKED" ; FAILWITH } {} ;
1554
                         EMIT %offer_signal (pair (nat %channel_id) (bytes %sdp)) ;
1555
                         NIL operation ;
1556
                         SWAP ;
1557
                         CONS } }
1558
                   { IF_LEFT
1559
                       { DIG 2 ;
1560
                         DROP ;
1561
                         PUSH mutez 0 ;
1562
                         AMOUNT ;
1563
                         COMPARE ;
1564
                         EQ ;
1565
                         IF {} { PUSH string "NO_TEZ_ACCEPTED" ; FAILWITH } ;
1566
                         DUP 2 ;
1567
                         GET 3 ;
1568
                         DUP 2 ;
1569
                         MEM ;
1570
                         IF {} { PUSH string "NO_SUCH_CHANNEL" ; FAILWITH } ;
1571
                         DUP 2 ;
1572
                         GET 3 ;
1573
                         DUP 2 ;
1574
                         GET ;
1575
                         IF_NONE { PUSH int 384 ; FAILWITH } {} ;
1576
                         DUP ;
1577
                         GET 23 ;
1578
                         SENDER ;
1579
                         COMPARE ;
1580
                         EQ ;
1581
                         IF {} { PUSH string "NOT_SENDER" ; FAILWITH } ;
1582
                         DUP ;
1583
                         GET 9 ;
1584
                         NOW ;
1585
                         COMPARE ;
1586
                         GE ;
1587
                         IF {} { PUSH string "NOT_EXPIRED" ; FAILWITH } ;
1588
                         DUP ;
1589
                         GET 26 ;
1590
                         DUP 2 ;
1591
                         GET 7 ;
1592
                         SUB_MUTEZ ;
1593
                         IF_NONE { PUSH int 389 ; FAILWITH } {} ;
1594
                         PUSH mutez 0 ;
1595
                         DUP 2 ;
1596
                         COMPARE ;
1597
                         GT ;
1598
                         IF
1599
                           { NIL operation ;
1600
                             DIG 2 ;
1601
                             GET 23 ;
1602
                             CONTRACT unit ;
1603
                             IF_NONE { PUSH int 391 ; FAILWITH } {} ;
1604
                             DIG 2 ;
1605
                             UNIT ;
1606
                             TRANSFER_TOKENS ;
1607
                             CONS }
1608
                           { DROP 2 ; NIL operation } ;
1609
                         DIG 2 ;
1610
                         DUP ;
1611
                         GET 3 ;
1612
                         NONE (pair bytes
1613
                                    (pair nat
1614
                                          (pair nat
1615
                                                (pair mutez
1616
                                                      (pair timestamp
1617
                                                            (pair bytes
1618
                                                                  (pair nat
1619
                                                                        (pair timestamp
1620
                                                                              (pair
1621
                                                                                address
1622
                                                                                (pair
1623
                                                                                  key
1624
                                                                                  (pair
1625
                                                                                    nat
1626
                                                                                    (pair
1627
                                                                                      address
1628
                                                                                      (pair
1629
                                                                                        key
1630
                                                                                        mutez))))))))))))) ;
1631
                         DIG 4 ;
1632
                         UPDATE ;
1633
                         UPDATE 3 ;
1634
                         SWAP }
1635
                       { IF_LEFT
1636
                           { DIG 2 ;
1637
                             DROP ;
1638
                             DUP 2 ;
1639
                             GET 3 ;
1640
                             DUP 2 ;
1641
                             MEM ;
1642
                             IF {} { PUSH string "NO_SUCH_CHANNEL" ; FAILWITH } ;
1643
                             DUP 2 ;
1644
                             GET 3 ;
1645
                             DUP 2 ;
1646
                             GET ;
1647
                             IF_NONE { PUSH int 437 ; FAILWITH } {} ;
1648
                             DUP ;
1649
                             GET 23 ;
1650
                             SENDER ;
1651
                             COMPARE ;
1652
                             EQ ;
1653
                             IF {} { PUSH string "NOT_SENDER" ; FAILWITH } ;
1654
                             PUSH mutez 0 ;
1655
                             AMOUNT ;
1656
                             COMPARE ;
1657
                             GT ;
1658
                             IF {} { PUSH string "EMPTY_TOPUP" ; FAILWITH } ;
1659
                             DUP ;
1660
                             GET 7 ;
1661
                             AMOUNT ;
1662
                             ADD ;
1663
                             UPDATE 7 ;
1664
                             DIG 2 ;
1665
                             DUP ;
1666
                             GET 3 ;
1667
                             DIG 2 ;
1668
                             SOME ;
1669
                             DIG 3 ;
1670
                             UPDATE ;
1671
                             UPDATE 3 ;
1672
                             NIL operation }
1673
                           { DROP ;
1674
                             SWAP ;
1675
                             DROP ;
1676
                             PUSH mutez 0 ;
1677
                             AMOUNT ;
1678
                             COMPARE ;
1679
                             EQ ;
1680
                             IF {} { PUSH string "NO_TEZ_ACCEPTED" ; FAILWITH } ;
1681
                             DUP ;
1682
                             GET 17 ;
1683
                             SENDER ;
1684
                             COMPARE ;
1685
                             EQ ;
1686
                             IF {} { PUSH string "NOT_OWNER" ; FAILWITH } ;
1687
                             PUSH mutez 0 ;
1688
                             DUP 2 ;
1689
                             GET 7 ;
1690
                             COMPARE ;
1691
                             GT ;
1692
                             IF {} { PUSH string "NO_FEES" ; FAILWITH } ;
1693
                             DUP ;
1694
                             GET 7 ;
1695
                             SWAP ;
1696
                             PUSH mutez 0 ;
1697
                             UPDATE 7 ;
1698
                             SWAP ;
1699
                             NIL operation ;
1700
                             DUP 3 ;
1701
                             GET 17 ;
1702
                             CONTRACT unit ;
1703
                             IF_NONE { PUSH int 428 ; FAILWITH } {} ;
1704
                             DIG 2 ;
1705
                             UNIT ;
1706
                             TRANSFER_TOKENS ;
1707
                             CONS } } } } } ;
1708
         NIL operation ;
1709
         SWAP ;
1710
         ITER { CONS } ;
1711
         PAIR } ;
1712
  view "get_next_id" unit nat { CDR ; GET 13 } ;
1713
  view "get_channel" nat
1714
        (pair (bytes %answer)
1715
              (pair (nat %answer_round)
1716
                    (pair (nat %cid)
1717
                          (pair (mutez %deposit)
1718
                                (pair (timestamp %expiration)
1719
                                      (pair (bytes %offer)
1720
                                            (pair (nat %offer_round)
1721
                                                  (pair (timestamp %offer_ts)
1722
                                                        (pair (address %recipient)
1723
                                                              (pair (key %recipient_key)
1724
                                                                    (pair
1725
                                                                      (nat %seen_round)
1726
                                                                      (pair
1727
                                                                        (address %sender)
1728
                                                                        (pair
1729
                                                                          (key %sender_key)
1730
                                                                          (mutez %withdrawn))))))))))))))
1731
        { UNPAIR ;
1732
          DUP 2 ;
1733
          GET 3 ;
1734
          DUP 2 ;
1735
          MEM ;
1736
          IF {} { PUSH string "NO_SUCH_CHANNEL" ; FAILWITH } ;
1737
          SWAP ;
1738
          GET 3 ;
1739
          SWAP ;
1740
          GET ;
1741
          IF_NONE { PUSH int 742 ; FAILWITH } {} } ;
1742
  view "get_donations" nat
1743
        (option (pair (nat %last_week)
1744
                     (pair (mutez %w0) (pair (mutez %w1) (pair (mutez %w2) (mutez %w3))))))
1745
        { UNPAIR ; SWAP ; GET 5 ; SWAP ; GET } ;
1746
  view "get_status" nat (option (pair (bool %online) (timestamp %since)))
1747
        { UNPAIR ; SWAP ; GET 20 ; SWAP ; GET } ;
1748
  view "get_mail" nat
1749
        (option (pair (mutez %amount)
1750
                     (pair (nat %cid)
1751
                           (pair (bytes %message)
1752
                                 (pair (timestamp %posted)
1753
                                       (pair (address %recipient) (address %sender)))))))
1754
        { UNPAIR ; SWAP ; GET 9 ; SWAP ; GET } ;
1755
  view "get_next_mail_id" unit nat { CDR ; GET 15 } ;
1756
  view "is_muted" (pair (nat %cid) (address %user)) bool
1757
        { UNPAIR ; SWAP ; GET 11 ; SWAP ; GET ; IF_NONE { PUSH bool False } {} } ;
1758
  view "is_blocked" (pair (nat %cid) (address %user)) bool
1759
        { UNPAIR ; SWAP ; CAR ; SWAP ; GET ; IF_NONE { PUSH bool False } {} } }