BCD

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