BCD

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