BCD

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