;; bitcoin-monkeys-eggs

(impl-trait 'SP2PABAF9FTAJYNFZH93XENAJ8FVY99RRM50D2JG9.nft-trait.nft-trait)

(define-non-fungible-token bitcoin-monkeys-eggs uint)

;; Constants
(define-constant DEPLOYER tx-sender)
(define-constant COMM u500)
(define-constant COMM-ADDR 'SPNWZ5V2TPWGQGVDR6T7B6RQ4XMGZ4PXTEE0VQ0S)

(define-constant ERR-NO-MORE-NFTS u100)
(define-constant ERR-NOT-ENOUGH-PASSES u101)
(define-constant ERR-PUBLIC-SALE-DISABLED u102)
(define-constant ERR-CONTRACT-INITIALIZED u103)
(define-constant ERR-NOT-AUTHORIZED u104)
(define-constant ERR-INVALID-USER u105)
(define-constant ERR-LISTING u106)
(define-constant ERR-WRONG-COMMISSION u107)
(define-constant ERR-NOT-FOUND u108)
(define-constant ERR-PAUSED u109)
(define-constant ERR-MINT-LIMIT u110)
(define-constant ERR-METADATA-FROZEN u111)
(define-constant ERR-AIRDROP-CALLED u112)
(define-constant ERR-NO-MORE-MINTS u113)
(define-constant ERR-INVALID-PERCENTAGE u114)

;; Internal variables
(define-data-var mint-limit uint u1500)
(define-data-var last-id uint u1)
(define-data-var total-price uint u100000000)
(define-data-var artist-address principal 'SP3KH8WMAGQX0AMQ0J5JY50S2350RD8V3H61VYP0G)
(define-data-var ipfs-root (string-ascii 80) "ipfs://ipfs/QmYjCAdtgUWBhTCym5GHRgiKUpFshZp7ueppPJDZbACQnW/")
(define-data-var mint-paused bool false)
(define-data-var premint-enabled bool false)
(define-data-var sale-enabled bool false)
(define-data-var metadata-frozen bool false)
(define-data-var airdrop-called bool false)
(define-data-var mint-cap uint u0)

(define-map mints-per-user principal uint)
(define-map mint-passes principal uint)

(define-public (claim) 
  (mint (list true)))

;; Mintpass Minting
(define-private (mint (orders (list 25 bool)))
  (let 
    (
      (passes (get-passes tx-sender))
    )
    (if (var-get premint-enabled)
      (begin
        (asserts! (>= passes (len orders)) (err ERR-NOT-ENOUGH-PASSES))
        (map-set mint-passes tx-sender (- passes (len orders)))
        (mint-many orders)
      )
      (begin
        (asserts! (var-get sale-enabled) (err ERR-PUBLIC-SALE-DISABLED))
        (mint-many orders)
      )
    )))

(define-private (mint-many (orders (list 25 bool )))  
  (let 
    (
      (last-nft-id (var-get last-id))
      (enabled (asserts! (<= last-nft-id (var-get mint-limit)) (err ERR-NO-MORE-NFTS)))
      (art-addr (var-get artist-address))
      (id-reached (fold mint-many-iter orders last-nft-id))
      (price (* (var-get total-price) (- id-reached last-nft-id)))
      (total-commission (/ (* price COMM) u10000))
      (current-balance (get-balance tx-sender))
      (total-artist (- price total-commission))
      (capped (> (var-get mint-cap) u0))
      (user-mints (get-mints tx-sender))
    )
    (asserts! (or (is-eq false (var-get mint-paused)) (is-eq tx-sender DEPLOYER)) (err ERR-PAUSED))
    (asserts! (or (not capped) (is-eq tx-sender DEPLOYER) (is-eq tx-sender art-addr) (>= (var-get mint-cap) (+ (len orders) user-mints))) (err ERR-NO-MORE-MINTS))
    (map-set mints-per-user tx-sender (+ (len orders) user-mints))
    (if (or (is-eq tx-sender art-addr) (is-eq tx-sender DEPLOYER) (is-eq (var-get total-price) u0000000))
      (begin
        (var-set last-id id-reached)
        (map-set token-count tx-sender (+ current-balance (- id-reached last-nft-id)))
      )
      (begin
        (var-set last-id id-reached)
        (map-set token-count tx-sender (+ current-balance (- id-reached last-nft-id)))
        (try! (stx-transfer? total-artist tx-sender (var-get artist-address)))
        (try! (stx-transfer? total-commission tx-sender COMM-ADDR))
      )    
    )
    (ok id-reached)))

(define-private (mint-many-iter (ignore bool) (next-id uint))
  (if (<= next-id (var-get mint-limit))
    (begin
      (unwrap! (nft-mint? bitcoin-monkeys-eggs next-id tx-sender) next-id)
      (+ next-id u1)    
    )
    next-id))

(define-public (set-artist-address (address principal))
  (begin
    (asserts! (or (is-eq tx-sender (var-get artist-address)) (is-eq tx-sender DEPLOYER)) (err ERR-INVALID-USER))
    (ok (var-set artist-address address))))

(define-public (set-price (price uint))
  (begin
    (asserts! (or (is-eq tx-sender (var-get artist-address)) (is-eq tx-sender DEPLOYER)) (err ERR-INVALID-USER))
    (ok (var-set total-price price))))

(define-public (toggle-pause)
  (begin
    (asserts! (or (is-eq tx-sender (var-get artist-address)) (is-eq tx-sender DEPLOYER)) (err ERR-INVALID-USER))
    (ok (var-set mint-paused (not (var-get mint-paused))))))

(define-public (set-mint-limit (limit uint))
  (begin
    (asserts! (or (is-eq tx-sender (var-get artist-address)) (is-eq tx-sender DEPLOYER)) (err ERR-INVALID-USER))
    (asserts! (< limit (var-get mint-limit)) (err ERR-MINT-LIMIT))
    (ok (var-set mint-limit limit))))

(define-public (burn (token-id uint))
  (begin 
    (asserts! (is-owner token-id tx-sender) (err ERR-NOT-AUTHORIZED))
    (nft-burn? bitcoin-monkeys-eggs token-id tx-sender)))

(define-private (is-owner (token-id uint) (user principal))
    (is-eq user (unwrap! (nft-get-owner? bitcoin-monkeys-eggs token-id) false)))

(define-public (set-base-uri (new-base-uri (string-ascii 80)))
  (begin
    (asserts! (or (is-eq tx-sender (var-get artist-address)) (is-eq tx-sender DEPLOYER)) (err ERR-NOT-AUTHORIZED))
    (asserts! (not (var-get metadata-frozen)) (err ERR-METADATA-FROZEN))
    (var-set ipfs-root new-base-uri)
    (ok true)))

(define-public (freeze-metadata)
  (begin
    (asserts! (or (is-eq tx-sender (var-get artist-address)) (is-eq tx-sender DEPLOYER)) (err ERR-NOT-AUTHORIZED))
    (var-set metadata-frozen true)
    (ok true)))

;; Non-custodial SIP-009 transfer function
(define-public (transfer (id uint) (sender principal) (recipient principal))
  (begin
    (asserts! (is-eq tx-sender sender) (err ERR-NOT-AUTHORIZED))
    (asserts! (is-none (map-get? market id)) (err ERR-LISTING))
    (trnsfr id sender recipient)))

;; read-only functions
(define-read-only (get-owner (token-id uint))
  (ok (nft-get-owner? bitcoin-monkeys-eggs token-id)))

(define-read-only (get-last-token-id)
  (ok (- (var-get last-id) u1)))

(define-read-only (get-token-uri (token-id uint))
  (ok (some (concat (concat (var-get ipfs-root) "{id}") ".json"))))

(define-read-only (get-paused)
  (ok (var-get mint-paused)))

(define-read-only (get-price)
  (ok (var-get total-price)))

(define-read-only (get-mints (caller principal))
  (default-to u0 (map-get? mints-per-user caller)))

(define-read-only (get-mint-limit)
  (ok (var-get mint-limit)))

;; Non-custodial marketplace extras
(use-trait commission-trait 'SP3D6PV2ACBPEKYJTCMH7HEN02KP87QSP8KTEH335.commission-trait.commission)

(define-map token-count principal uint)
(define-map market uint {price: uint, commission: principal})

(define-read-only (get-balance (account principal))
  (default-to u0
    (map-get? token-count account)))

(define-private (trnsfr (id uint) (sender principal) (recipient principal))
  (match (nft-transfer? bitcoin-monkeys-eggs id sender recipient)
    success
      (let
        ((sender-balance (get-balance sender))
        (recipient-balance (get-balance recipient)))
          (map-set token-count
            sender
            (- sender-balance u1))
          (map-set token-count
            recipient
            (+ recipient-balance u1))
          (ok success))
    error (err error)))

(define-private (is-sender-owner (id uint))
  (let ((owner (unwrap! (nft-get-owner? bitcoin-monkeys-eggs id) false)))
    (or (is-eq tx-sender owner) (is-eq contract-caller owner))))

(define-read-only (get-listing-in-ustx (id uint))
  (map-get? market id))

(define-public (list-in-ustx (id uint) (price uint) (comm-trait <commission-trait>))
  (let ((listing  {price: price, commission: (contract-of comm-trait)}))
    (asserts! (is-sender-owner id) (err ERR-NOT-AUTHORIZED))
    (map-set market id listing)
    (print (merge listing {a: "list-in-ustx", id: id}))
    (ok true)))

(define-public (unlist-in-ustx (id uint))
  (begin
    (asserts! (is-sender-owner id) (err ERR-NOT-AUTHORIZED))
    (map-delete market id)
    (print {a: "unlist-in-ustx", id: id})
    (ok true)))

(define-public (buy-in-ustx (id uint) (comm-trait <commission-trait>))
  (let ((owner (unwrap! (nft-get-owner? bitcoin-monkeys-eggs id) (err ERR-NOT-FOUND)))
      (listing (unwrap! (map-get? market id) (err ERR-LISTING)))
      (price (get price listing)))
    (asserts! (is-eq (contract-of comm-trait) (get commission listing)) (err ERR-WRONG-COMMISSION))
    (try! (stx-transfer? price tx-sender owner))
    (try! (pay-royalty price))
    (try! (contract-call? comm-trait pay id price))
    (try! (trnsfr id owner tx-sender))
    (map-delete market id)
    (print {a: "buy-in-ustx", id: id})
    (ok true)))
    
    (define-data-var royalty-percent uint u500)

(define-read-only (get-royalty-percent)
  (ok (var-get royalty-percent)))

(define-public (set-royalty-percent (royalty uint))
  (begin
    (asserts! (or (is-eq tx-sender (var-get artist-address)) (is-eq tx-sender DEPLOYER)) (err ERR-INVALID-USER))
    (asserts! (and (>= royalty u0) (<= royalty u1000)) (err ERR-INVALID-PERCENTAGE))
    (ok (var-set royalty-percent royalty))))

(define-private (pay-royalty (price uint))
  (let (
    (royalty (/ (* price (var-get royalty-percent)) u10000))
  )
  (if (> (var-get royalty-percent) u0)
    (try! (stx-transfer? royalty tx-sender (var-get artist-address)))
    (print false)
  )
  (ok true)))

;; Extra functionality required for mintpass
(define-public (toggle-sale-state)
  (let 
    (
      ;; (premint (not (var-get premint-enabled)))
      (sale (not (var-get sale-enabled)))
    )
    (asserts! (or (is-eq tx-sender (var-get artist-address)) (is-eq tx-sender DEPLOYER)) (err ERR-NOT-AUTHORIZED))
    (var-set premint-enabled false)
    (var-set sale-enabled sale)
    (print { sale: sale })
    (ok true)))

(define-public (enable-premint)
  (begin
    (asserts! (or (is-eq tx-sender (var-get artist-address)) (is-eq tx-sender DEPLOYER)) (err ERR-NOT-AUTHORIZED))
    (ok (var-set premint-enabled true))))

(define-public (disable-premint)
  (begin
    (asserts! (or (is-eq tx-sender (var-get artist-address)) (is-eq tx-sender DEPLOYER)) (err ERR-NOT-AUTHORIZED))
    (ok (var-set premint-enabled false))))

(define-read-only (get-passes (caller principal))
  (default-to u0 (map-get? mint-passes caller)))

(define-read-only (get-premint-enabled)
  (ok (var-get premint-enabled)))

(define-read-only (get-sale-enabled)
  (ok (var-get sale-enabled)))  

(map-set mint-passes 'SP0EV7XBYZBK5T7WBFV14Y7827WTT8EP8F2M6QVC u10)
(map-set mint-passes 'SP103ZFPKEB5B61ZEV7DW95XTBEWRP2NFE3YX2EFF u3)
(map-set mint-passes 'SP10Z6DJGS4M0KR0B736A8ZGSH5R88PZRX27CWK0S u1)
(map-set mint-passes 'SP110TAR7RZE8ZTHMTMZYN76KT4440CS1KADFCG2B u2)
(map-set mint-passes 'SP12BEEDG31J0AH68DFDJJYZ36D002PKDZCP1DZQE u8)
(map-set mint-passes 'SP12E5REG9ZPB91V61A8V4P8XJ63EK3VT058YWZAS u2)
(map-set mint-passes 'SP12YGGACNA4R43DB1HAQ3AE03PKPJGXZ1BX96CYB u13)
(map-set mint-passes 'SP13473ZZ772R27F6MK7B8MZ92P3G1PP239RTPA4K u5)
(map-set mint-passes 'SP14A1M48DDCMFM8BQRDNB5MYZCF3JTHYP31BWC93 u6)
(map-set mint-passes 'SP14DXPAQB3E841SE031QFTCB31R54A34X47QYTDM u2)
(map-set mint-passes 'SP14K6PZW8B7Z7G07B798H7V2Q8WWCM04H4PZP153 u2)
(map-set mint-passes 'SP14TGZ8M5YVC0SM6NMF01D9JJ21T16A684NGSJ97 u1)
(map-set mint-passes 'SP158378PVRA077MC9851WTVSF7G3MES99HPJ26DW u2)
(map-set mint-passes 'SP16AZ9829ABNJ8TXV57DCDP6Q67VBSA43RYXC1F0 u15)
(map-set mint-passes 'SP16PRV5FEZRH1KNFWNJTZ9HHZGWMPFB6G1QKE607 u13)
(map-set mint-passes 'SP17FSET7PKJVD1VD3J74PM2R6XRQ9TE9ECTWCG7H u1)
(map-set mint-passes 'SP17K66V0V1ZRBFEQCNW4FEXXV4RJCVTTCP2RHXTT u1)
(map-set mint-passes 'SP17YYQFGN8M6G8HD96TW6BAT8VNNRKG2WSENF2AS u2)
(map-set mint-passes 'SP188DKZHXVMNGF1XGKDQ6YHBKJSMKHZVZQ1JW7BB u5)
(map-set mint-passes 'SP18K5B9EN9039K6EBH8R2MB6QE0M8MNQVK6T9XTK u10)
(map-set mint-passes 'SP18QG8A8943KY9S15M08AMAWWF58W9X1M90BRCSJ u1)
(map-set mint-passes 'SP18SQ92V4C8HG48CPZ32MK3V4PNJGK25EAGH75KT u14)
(map-set mint-passes 'SP18WRH4SF7F1M5QZZ2BQDZZYBCJWT9VWQMDSTFY5 u1)
(map-set mint-passes 'SP18Y0P28W6PBSCM7Y1DS3FW6W7DHJMR34GJYDG4D u1)
(map-set mint-passes 'SP193B6A8GMXNFEH3WWCQC22QYYNSPHJTSGM80ZWY u2)
(map-set mint-passes 'SP19KPWZDPBD13N07C7Q1BENQMEPRTNA6J6ACBJB3 u10)
(map-set mint-passes 'SP19P1R0N3AANXX1FWZHT1T100SN6AJDSDVS5PRWW u4)
(map-set mint-passes 'SP1AJXNMBSMK42DPNB2K1V4FADAEGDA28VQPDM8WM u2)
(map-set mint-passes 'SP1AM4QJ7Q9CG4KXZ8PEEN320FRCYR4R1QZJ2SVER u2)
(map-set mint-passes 'SP1ANNSCKV17N2E4FJQY2MN1SNJDRK45QKDV4NTDD u1)
(map-set mint-passes 'SP1AV1T403Y7ZB5V7XCZK460G8515PVK6NGJFR7KD u3)
(map-set mint-passes 'SP1BG6DCTVGXP19WY2FZ3GBXGRHK822PGJMEESAJW u2)
(map-set mint-passes 'SP1CA9W3C35F6WH2MH1D5Z1XQG9595Q1C3P7Z2NYY u2)
(map-set mint-passes 'SP1CSWBBEXKF4GH170P90FXJS100KXW9YK42K5EB4 u1)
(map-set mint-passes 'SP1DF9EE0PT0MSW7G8DXX066WK3862N36ZGECK5N9 u2)
(map-set mint-passes 'SP1DRW8GY74R0SAZ82HGFJJMT4CX0ZX6P309AR8ND u2)
(map-set mint-passes 'SP1DXRA36MATCTFXSQDRW9G0Q8HY2ZT0HMM9ZQKWR u2)
(map-set mint-passes 'SP1EF64D5ZWF4HEBHSPJPX68M9DA5XYH6V97RBXCH u2)
(map-set mint-passes 'SP1F7JGXJFJCBVST3GWNN0W5KCRC2W4K9S9N1Y4B7 u1)
(map-set mint-passes 'SP1FR2M102H4DE4DH96R4D29RC8AGQZG5D5Y4S7CH u3)
(map-set mint-passes 'SP1GJK5XZ0RP9WBHN18CNTBAXMB7WEV3H0C2NN1N3 u6)
(map-set mint-passes 'SP1H45JS07GWQWMT57JE20X17AQCNVYAS7NHW2HVR u9)
(map-set mint-passes 'SP1JF9VSNJBP4YZVC7AJ9CE6CXBD2ZV0W67T0E4T0 u3)
(map-set mint-passes 'SP1JQCYDVHKE8RWBJ9JSX8ZH6TVTX0TH2F7D3A8YJ u8)
(map-set mint-passes 'SP1JY766Q0PM5R5MC3J603NTK27SW7Y7GKXM2T946 u8)
(map-set mint-passes 'SP1KYADNQFZBR5FNPN0PQV85TN54577MZX84B971W u4)
(map-set mint-passes 'SP1M5FWRSV7RNXPYA1QVH6S7XTTY0AEVR93S69KJ4 u1)
(map-set mint-passes 'SP1MFKQM507CF8JT5SHYX992BHXC4Y5XY4WK3ZCMC u2)
(map-set mint-passes 'SP1PCEAP62X5BZSMH257ZHAPGAPSX3BDT3TDVCN4M u2)
(map-set mint-passes 'SP1QJDCZ0J9NRPPPZ9186GGBFQZEZM86VKCE19D4T u2)
(map-set mint-passes 'SP1QY7NXWJJAH5R8WQ50A8WAKCTSFH7HQPPQNV7D6 u2)
(map-set mint-passes 'SP1S2KYD0CEJR99A10SBQRFD668SSKK072PBPT42E u3)
(map-set mint-passes 'SP1SJFW3TTRJ9QZM2J53GSNV7C6SDJKCSE32HT9XK u1)
(map-set mint-passes 'SP1ST9NA85RZQX2D3P5VEXDKE9WXDZRGKHB88A5CF u27)
(map-set mint-passes 'SP1T07GK9H4M0WP4N1DSSA7NJ7GNTQZ0GBZM0GAR2 u2)
(map-set mint-passes 'SP1V50HFY8CRC7N65HFH6S778CJEW5GQRBH3YW7BK u1)
(map-set mint-passes 'SP1VWZ87JH5QVYB1FZ9274Q597XR1ZAQ99KGCTEFS u4)
(map-set mint-passes 'SP1XHX4584AM7KARG7MTVBW6CN8JQ8Q97DMFZJ8W u1)
(map-set mint-passes 'SP1XPG9QFX5M95G36SGN9R8YJ4KJ0JB7ZXNH892N6 u2)
(map-set mint-passes 'SP1XVBC50K7GSHNWJD0J65KN5N6RY1978C8GTP7EP u6)
(map-set mint-passes 'SP1YBP35K01SG2G8NG7NHSDXFSVEAKWKFEHF09PMG u6)
(map-set mint-passes 'SP1YRFYPSPTPQJFDE07CNHQQ998QMAHG4K39HG71A u5)
(map-set mint-passes 'SP1ZHVKGVT1KZETT4J9CGYXZE9D20N375V4M323SQ u1)
(map-set mint-passes 'SP1ZSB0S8M8F4G71BNXQEMXP3BBQGPNE08S0E89MQ u5)
(map-set mint-passes 'SP1ZVX0C3PEHFV1GBYXSH1S6N8XVS6GKS14R9N0QK u2)
(map-set mint-passes 'SP203QSHAPGY2WBXT0MRJJZF6CZ88A8ETRVK0MDK8 u3)
(map-set mint-passes 'SP2088FC9NCVVYAPT8D1XJC8QPSGTREFBHYPDZAWV u3)
(map-set mint-passes 'SP20E0RC1NWFVD6A2QC8Z4CTWK7X5FKFCB6M6P6W4 u1)
(map-set mint-passes 'SP21QFR1A49TGX8Z8X0ZVPPM5A1CN2CPMCE71NQ3A u4)
(map-set mint-passes 'SP226P4V1G7T6KVD39VMAGQV6HXKDM97T009AV579 u2)
(map-set mint-passes 'SP22ZMWMT7NGSQ9B2B0QTXJ9FFDWA6NXFHV9XJ294 u10)
(map-set mint-passes 'SP235K55AAYBERTEV43W219KESGPBFND8CQTNFH4G u1)
(map-set mint-passes 'SP23FMJXH1MBKW7H4GTZZTPWHZR21NZACYQE5DEN1 u1)
(map-set mint-passes 'SP23H2CGE75B251C6BR28FS5K5Z57HR0EPRKHBTXV u3)
(map-set mint-passes 'SP23NXVJWQARSPF1K3TD73MHVJE4EFV9V58GXHT73 u2)
(map-set mint-passes 'SP23X8JVMHN2A9N1PWSGNW83Q0VV5T7NF2N6PJW9J u1)
(map-set mint-passes 'SP24GRMRYV61X68KZWP2EVEH5X632GSF6WV9MSR1E u8)
(map-set mint-passes 'SP24RE2HVY7R0P7KDRX623EZ89Q2KV8JKJQ5MJ9JX u2)
(map-set mint-passes 'SP24TD9G7JBNMGT3S3AJWBF1YS3E6A03D2ZT154J5 u6)
(map-set mint-passes 'SP257J9EWA0JT9EYA49ZA8QH0W85W664523D8WDEX u2)
(map-set mint-passes 'SP25A4G4V7W3XQVCAQW2SJG1END8F1AS6CNTR25Q1 u22)
(map-set mint-passes 'SP267TMY9MTMP98AW05X8RFQ43JRMTPGDWFKFCPTH u9)
(map-set mint-passes 'SP26ZXHQ28WTZG3GKR5AZN2PHTR7S9G1YD555BE4P u11)
(map-set mint-passes 'SP271CPRFRDSX26GZND9YDD3FSE0JK2B61SBJRAG2 u7)
(map-set mint-passes 'SP2791RKSYJJ39MVHC09J8NARWBMK5G9C79EJB0RV u1)
(map-set mint-passes 'SP27KMHY8KCB5R3BJ1WPE1ZKBQA4N3SRJAWTCB45J u2)
(map-set mint-passes 'SP27TH9JWQ1EJR8A1JGV9AAJQAFDP49Z6573X7551 u2)
(map-set mint-passes 'SP28B4BFZ2AQJ527SGYW91A53HBSM43D8CET3XR9R u4)
(map-set mint-passes 'SP28RZ1QXMXJXVKRRCR3D7GR5D48XY0NNA9MZWHJB u2)
(map-set mint-passes 'SP2A4R43TCNHZ19AKK44WEBP4R16X7DV4093GQ0X4 u10)
(map-set mint-passes 'SP2AEY9QJD5MGDEEYYTNYBVVS7S97W2S0302HQ7S1 u8)
(map-set mint-passes 'SP2B76R0S2BKJE1RFES2WKX1HSGR70M5VW7GJ5TPR u1)
(map-set mint-passes 'SP2C1NCMMHFJXXTCAK3KYYJVY9VV0XH62RMEJNX92 u4)
(map-set mint-passes 'SP2D7VMJ193TJKY3ECZ9KQ0EPMHPVF3047CXH2N6Z u1)
(map-set mint-passes 'SP2DFX28F1S3CB46B5XH9M5JQ7N4SMCE7CQY1TNYS u1)
(map-set mint-passes 'SP2DTQW6VP43HXZ43X7196KF4KVZYEYRA8YJYVQFQ u1)
(map-set mint-passes 'SP2E852RZJ5QX4ASNGT1N1Q1A7Z3Y1MZWSHQK0MEB u3)
(map-set mint-passes 'SP2F18PH7FP22EHS0J0X3A6EFZ9PAW0EZJRET0GXZ u2)
(map-set mint-passes 'SP2FHRXHTZBFGPFKSNWFGYPNBQXKSXC2JFJZ7BY7D u2)
(map-set mint-passes 'SP2FSBC7GAWR623XQ3QMA9VCFVS4AYTXTZTRWZAJG u2)
(map-set mint-passes 'SP2FZ154ESZ8NB34RZ3RS147GD6DSEYNE8DQD0XDM u10)
(map-set mint-passes 'SP2G96DATE4CHFF5SY88TWYRKVFAA0FCBVHYN9RCR u2)
(map-set mint-passes 'SP2GHPX871GG50BE72CNFZZ0FJM5JQ5GPDKM4T2RC u1)
(map-set mint-passes 'SP2H667JRMBHX0NRJ3ZMPPDR4R9TH6NM1ZFYW07S6 u1)
(map-set mint-passes 'SP2H94BXVGSH92VD407JX18VZ7S2ZFW2CFT5TJKKZ u2)
(map-set mint-passes 'SP2JCF3ME5QC779DQ2X1CM9S62VNJF44GC23MKQXK u5)
(map-set mint-passes 'SP2M5HY1A1RMV2P35GSBW1A4J686X34QXS0AWT626 u5)
(map-set mint-passes 'SP2MBP1G8G58475ZAMAE838DAXX4NY1YKX1B47AWP u1)
(map-set mint-passes 'SP2MC6PBPNPSEHA6G87DDMN6WX3HGMTANXZBYKCNF u5)
(map-set mint-passes 'SP2MCPE4ACC1W9FY1JC3BK2FMYSNWYDEADFEJH2MY u2)
(map-set mint-passes 'SP2MMF30WNFRQRB3H6PKZR07BA5W4YQ6XY2JF8X5R u2)
(map-set mint-passes 'SP2NHZDAMMEEASE4DKHYYCVAG8RF8PA7YHPPW40BX u2)
(map-set mint-passes 'SP2NK7DRRGAE9ZZ38NFPBGMK39XEA5CWKKKDW03BJ u1)
(map-set mint-passes 'SP2PB256RZFVNS3H5NBNE28CGBSQBAHS5BF1EANK8 u1)
(map-set mint-passes 'SP2PBW5WPNJ88BZVNDVP4KCTN9HJGNNR1BQA6G1W6 u33)
(map-set mint-passes 'SP2PCVPHM1MPKPZ2XSPXQYNKCHAX4XPQ542YVM20D u1)
(map-set mint-passes 'SP2Q1SZSETS27AZ9FE0BH6C6B7MVC25E4N6C2VE7D u2)
(map-set mint-passes 'SP2QDMH88MEZ8FFAYHW4B0BTXJRTHX8XBD54FE7HJ u5)
(map-set mint-passes 'SP2QMRMRT8NFEY6HEW0CE4DXJ7GFF8YV2TQ701P0K u2)
(map-set mint-passes 'SP2RH3J2MJ4E5RQ4MNQSBCEQMGVS9XCTNCCP2DN2W u3)
(map-set mint-passes 'SP2RS0YJZ2QH5VYXQ91X06B9QYR90BNGJETWP0V69 u2)
(map-set mint-passes 'SP2RSAVZ21HNNY3S95HJG58VCZTB837A2728EYXX u85)
(map-set mint-passes 'SP2RTTZSAT92NNPSDF2V94XF8MXDTQKTK12JK5SM0 u3)
(map-set mint-passes 'SP2SFZX1WJSKT1GA2STDT6E5NWDX44GW4BB8DW4DJ u1)
(map-set mint-passes 'SP2SSHDSGHHEQN1A7Z0RP0YJ6QECE8TGQTYN594PM u1)
(map-set mint-passes 'SP2T7BZRB3ACRATVVNGCHFXZRXA513Q2SZ0N34786 u1)
(map-set mint-passes 'SP2TGN9DJWTV02B9HRGX6Z43Y7052DTZW6FZVZH0S u10)
(map-set mint-passes 'SP2TW1D8YF5CE0NDP5VCR5NMTPHQ4PQR1KBB4NQ5Q u3)
(map-set mint-passes 'SP2VNTSYGBS0WHPWSWQRD3W0D56ZYPY75S70ADMEN u1)
(map-set mint-passes 'SP2VS41C9A89KXKS23J7B3SZ46H8SY1595KJHS6W3 u12)
(map-set mint-passes 'SP2XJCFE0MZB33AAP91ZY8TXJ03HMXCJPJD71AJCM u13)
(map-set mint-passes 'SP2XMCX1AST1PM21CWDHW5YBSSKXG0TXAB45JCS6 u1)
(map-set mint-passes 'SP2YJYXP3FPQK0J4J8GNFVJH75HAEGFX4MJKSSYRJ u1)
(map-set mint-passes 'SP2YQCF4DMRWRPKD0EVNDY3AJ0BBS9FQH548GCHND u2)
(map-set mint-passes 'SP2Z2AQM22D9AZ5YZKZPWYBFWKJ7YGVVWT1C5M66P u1)
(map-set mint-passes 'SP2Z4MCB2488PSASQHWDA2J3G2CG7TDETT8TK5QA0 u6)
(map-set mint-passes 'SP2ZGVSV6JDJ6SCGJETE3ZT0PNRSB90FM01P830D4 u1)
(map-set mint-passes 'SP309519DMY535JX2K0MN2WRC14AVDS0HC5CMFX0E u1)
(map-set mint-passes 'SP30GWW7TZQHB0C6WYXH36MB6GTYWNTAXPWW96NW7 u10)
(map-set mint-passes 'SP30WDR90F6CYE8826JQ9STMNAAFVWZ7N1SXAZRXP u3)
(map-set mint-passes 'SP30Z954NBY6E3BGMMCM87VAFHJVZQE29HT3VZ6PJ u9)
(map-set mint-passes 'SP314E6K9TJK511VW56X8ZDGSPFZ7HHA9HJYJQA6J u2)
(map-set mint-passes 'SP31SJ2X5683KDX8P58HWRA2DXY3ED4WZ6Z3DM0A9 u2)
(map-set mint-passes 'SP31WTJ415SNJM9H6202S3WK9AFQXQZMT48PESBQE u5)
(map-set mint-passes 'SP31ZXFAT2XCVC1R071A1NMRH1Q3BT816DH0QWSZQ u1)
(map-set mint-passes 'SP32728WFVK74FQXC0BD48QD6BNW5A3MJ8HB5YADR u8)
(map-set mint-passes 'SP329G766AV8Z01X9EEAHPDQ4WDJXT2A0XB383MGP u1)
(map-set mint-passes 'SP32QTYYGG6SWTP198FST4SPM85J0A3JPNB9S2BEA u1)
(map-set mint-passes 'SP32V5EAKRWZ66VVA67XGDK18VYMZM5NT7NP98M9 u1)
(map-set mint-passes 'SP334WZ0PF1XYZEBK6GTXW3J80GJJ1D92M4JNN0H u9)
(map-set mint-passes 'SP3356JJ54Q0YB2Q7EN3ZPV7DAY8E2NAS9P8E2WZ0 u7)
(map-set mint-passes 'SP337WP7AQSX8Q9H0TGY8K3RVQBBF82MTZMRE7JDB u3)
(map-set mint-passes 'SP33BS1408BBKEHY0RF4KQ0J7SCBARY7HT86C6062 u4)
(map-set mint-passes 'SP33DREDP20WJXRF8VFZEAZP0HHK5MQ60TZ0W4K3 u1)
(map-set mint-passes 'SP33NGNPHCB6WSRHFDQ5TPTKDNQRAQ5SZ7J3CJK65 u1)
(map-set mint-passes 'SP340MZNAAV5Z50YGKRJ6FWJ839CE6WYRY84P21VM u2)
(map-set mint-passes 'SP344786XCNQAHSHVFY9ZDYQ6W3GKNG8SWTSG65FH u4)
(map-set mint-passes 'SP356400A5XM1ZKNXCQ7BJRE8PXXG1EJHV3954Z27 u7)
(map-set mint-passes 'SP35W8KKX2DY6RXT7VKBEPFE77XSV4EFHHRE6BGDN u2)
(map-set mint-passes 'SP35ZBWA4XY2RRPDXVB36CQ5KEXZD2QN8K05B3WFN u3)
(map-set mint-passes 'SP364F8277B87WPMTA1ZQE7A7PN1238E5PYBE3Y41 u1)
(map-set mint-passes 'SP364J7EDJXRE1FPDZDABP9M58HPY4G88BFCP2HD0 u1)
(map-set mint-passes 'SP36KY6SG05FK21AZGTNNY7HD5CPH5MQT8Q85HPD8 u2)
(map-set mint-passes 'SP36NC0KX6RZGPQXR73AMW8R0CXXHS06DRM487A5G u3)
(map-set mint-passes 'SP37EP66M18KKNY56T39V6VWCM8XK5JEBTNNHYP6K u1)
(map-set mint-passes 'SP38AJ28GP1Q3E40QD8K3WA7JR315794Y29YWKAP1 u31)
(map-set mint-passes 'SP38MA900CFX8J4NQJCCFJGDQGJD2KR8H2CQSB5P0 u8)
(map-set mint-passes 'SP3950ZX51YWKXBHW5SJGYE9CJ0WTY9FW4VYYJC5R u10)
(map-set mint-passes 'SP398XE371G08T84A99TCBD8XKWY3S7VVX6JKJWKY u1)
(map-set mint-passes 'SP39C3KQ6M679DHGD434ZMTKWDNZXD43KCZC71GXW u2)
(map-set mint-passes 'SP39XMB07QV4KN4PB6X3KHNQKWARB0F9AXY6K41E0 u4)
(map-set mint-passes 'SP3A11ABJTF6PXA5BDKES4KHCVJ9X3WG82ARXAFJJ u3)
(map-set mint-passes 'SP3A5VJWA3CH4BM7W08APVJKJ8MQ7PXXFACWAYA2J u1)
(map-set mint-passes 'SP3AARS5TBY5X7ZS7JJHBKNND3EJME7AD2BRX1V4A u2)
(map-set mint-passes 'SP3AEDNY49C70TWRV6G01PJBGYTW4AJ38Y2N5F1YH u5)
(map-set mint-passes 'SP3AFTJ38PSZQBXZGNCDGM05GR0SFY7HBPZD2ACR2 u14)
(map-set mint-passes 'SP3AQSW210PFW6K3FB1JW62ZHTH11FSVR0SH5AZ6P u1)
(map-set mint-passes 'SP3BCKC9STZKCVBJRB3EFK86JEWVEJWYH7JRXG9Q u29)
(map-set mint-passes 'SP3BTCK8ES8KD53Y08W5E3YHS9B48EDWS551XH2NN u1)
(map-set mint-passes 'SP3C5W9RSSYG3SVP192DCQY4Z2WQWPJ9YEERKTPSY u24)
(map-set mint-passes 'SP3C9JPPGYZV04QF3J0N3ME7KN5NDVF79AZ96HR1 u2)
(map-set mint-passes 'SP3CBV5HH30Y38MWFKHWRJPQ2K1R2BF11BVVP663P u1)
(map-set mint-passes 'SP3CRGM0QHHD36B57FXZW60EQS7NM6XJK8WC7T34S u2)
(map-set mint-passes 'SP3CV98G6W9B2NPDX3XT7V96BBYKKJ004GYSJAFY0 u1)
(map-set mint-passes 'SP3DAXCD5NBSBT9WAG6FMA230FS9DDNZ1TP0QYX1A u12)
(map-set mint-passes 'SP3E0ZRGHZM3R5VAFR41A5HD147T2T1TDTH5ZSKKF u2)
(map-set mint-passes 'SP3E39MKXYNNHN557YXT5JXGBTFPHYYBFJCSFF481 u10)
(map-set mint-passes 'SP3E545ADCKY56EVCXZPA87525VM0ZA8DQQAEP77Z u4)
(map-set mint-passes 'SP3EPS563XJNK170J902C78ZPDPNXVZFWWCN7DGWH u4)
(map-set mint-passes 'SP3ERB3CKV60Z4SW5R2RZGF6Z0A93AJTN1ATJ3T7P u1)
(map-set mint-passes 'SP3EYT7KF5ERWQFTWW3SWHS8QRYBNSMRZ7JW73YXR u7)
(map-set mint-passes 'SP3F50PNGA4PY5PVB590SKY4WE8NHZEYQKRDBSJX8 u1)
(map-set mint-passes 'SP3FVPWJ1ZZYRWCQYCSBFMSHSFA7NCP9P1QNQZ7BS u14)
(map-set mint-passes 'SP3GARS14D25RNGWRS85V5VZWJ6TKNFY8Y2TPZV3K u2)
(map-set mint-passes 'SP3GD9W8CX9V7CVY01WNTHT94H6K07EDFHRC89QP u3)
(map-set mint-passes 'SP3HD6JF8N5214S5Q7GHXBQGKY6XJNTRH0DS6P6KY u1)
(map-set mint-passes 'SP3J7Y4C6XGJ5DAWMAKVDT4YTSH5FJP1THCZ2NYY4 u4)
(map-set mint-passes 'SP3JCN7W79KNRJBBPBRPKJZ7TRCVAK1NGV2FX4ZH u3)
(map-set mint-passes 'SP3JPZ24AT6QHPY40Z1V9P4HYH1PNHBWKGJMKG6F1 u1)
(map-set mint-passes 'SP3K22XKPT9WJFCE957J94J6XXVZHP7747YNPDTFD u2)
(map-set mint-passes 'SP3K56FKA65F4AVTA69N02M02B9N1M8AARJMS49N2 u1)
(map-set mint-passes 'SP3KY9D092ZVXYSQ2Z43XH8DGK319PWBX848XWM4P u5)
(map-set mint-passes 'SP3KZ1XDJT57BK81JWX1VFT3V70DYSZA8SQYQPAK u4)
(map-set mint-passes 'SP3M1X036A4KCD49JZC4M941S4ZDH140ZDVZEHVBA u5)
(map-set mint-passes 'SP3M6D6M2BS7FNEFV111ZF6WQYATNJZ89Q7MXSPAE u2)
(map-set mint-passes 'SP3MMG05H6T48W5NJEEST0RR3FTPGKPM7C19X5M16 u4)
(map-set mint-passes 'SP3MNGV7PCMQT1T24P3THMXJZHC54HTJ0Q499EF1G u1)
(map-set mint-passes 'SP3P8M5J25457Q73MKS8EGD5Z19Z57RKYSPNEAK85 u2)
(map-set mint-passes 'SP3P8QGR2V6TA8WC7703DFEEZEVBKJSB8CQMFZR84 u1)
(map-set mint-passes 'SP3PZGB6ZXH1G9K158H56A6TF26X7K1GGMAGMW0M3 u4)
(map-set mint-passes 'SP3QBRHQF4BN8HNNGFHCJMQZDB8V20BMGF2VS3MJ2 u2)
(map-set mint-passes 'SP3QC4R6M7M0DAZBXSZCW4FWGDCNDD05FV8Y0AY8C u10)
(map-set mint-passes 'SP3QD9EVZB3E7E7Z3FWH7KBDH5RZWA4PYHSQ0FGTQ u3)
(map-set mint-passes 'SP3QEHWDWT8NM3CJDV6SQBH3A5HMQJH7V2JMTS4AR u2)
(map-set mint-passes 'SP3QQMF5JEQTNW2HFAQ52JGH7BHDKKP25PSHXJBG9 u1)
(map-set mint-passes 'SP3R04S6DNK9GPETVWT954KZVJXGKGNJ2A5XRNQQY u2)
(map-set mint-passes 'SP3R4NKXMGW6YXA44X2ESZPKJNV25X4ZN7DPW0RXR u5)
(map-set mint-passes 'SP3R5TCK97NMBS1V1MARCK0YTDFWG1FKJ94EFQTF4 u2)
(map-set mint-passes 'SP3RBMGTRD92F0S8DTDJ4FVP3D76SM4A27EV93106 u2)
(map-set mint-passes 'SP3RK38ETGT4N4K28SJSVM8ZPVMRHY8Z2E1FGA46 u2)
(map-set mint-passes 'SP3RQVBVZQ9WC6M4NM68QR0W9G8YV8N2P323Y389D u2)
(map-set mint-passes 'SP3SGTV57D501YP1ESVY1G4F7Z5M3G6GJM58N572G u1)
(map-set mint-passes 'SP3SKH6YB515J76KVDHDHBTE2GQ4CV6QJHC5GJKRF u20)
(map-set mint-passes 'SP3T7WAB5DMJ3JSRMCQF6SC7CG50DYYJVS4C303CN u20)
(map-set mint-passes 'SP3TMGZ7WTT658PA632A3BA4B1GRXBNNEN8XPZQ5X u1)
(map-set mint-passes 'SP3TR9H98GTF9TY11RGY16VGRFGMQ2J655RVKJZ76 u4)
(map-set mint-passes 'SP3TZ3BCB16A0W0PPFYMGTTWTT3DVWTQEP8DFRAG1 u6)
(map-set mint-passes 'SP3VJCMXAGTVF4BJ81JGTYVEBCXWZARFN60D8VSKG u22)
(map-set mint-passes 'SP3VMNHZRPSXM8ANWBMGZ8FN17SNVT1MXXNY0SCFR u2)
(map-set mint-passes 'SP3X0N9RZRQWFZX85SRN69TVF863D4J661JT0BXAM u2)
(map-set mint-passes 'SP3XMYSS7VHPQV9YP2083D3VN8VDH8ZYZYD7XAR6E u1)
(map-set mint-passes 'SP3Z0BHS0SVP5733GDZ2RWJV1G2EW04PFN2NSX3PK u6)
(map-set mint-passes 'SP3Z5H5KFMGBTYB37DYTGEA14VZG8AT32EPDEAKQH u1)
(map-set mint-passes 'SP3Z7511VWR5WG9J3MAKER3NRZYKWT83K2XTP36EV u60)
(map-set mint-passes 'SP3ZKT9BM0VKAAR92YZRJVGWS1G193PX33VVQ5MRN u1)
(map-set mint-passes 'SP3ZQ324JA8CPZ5X38S7Q7ZCC0MM9F3PKRDJA0PC3 u5)
(map-set mint-passes 'SP48N9CPE2KQZQYH64GZ4FPJWJMGTRPJQWMC5RH7 u4)
(map-set mint-passes 'SP4E0PT5BGEFDW2XHMGTF9069EQW1F1FNH5QFS9Z u3)
(map-set mint-passes 'SP4F062WCN1G45W5C3AS019YV5XRSGE2Z242S9RJ u2)
(map-set mint-passes 'SP4RPAM72DWTCXFQXTQ35PTSEC0CDAW4QB5Z5QZR u5)
(map-set mint-passes 'SP5GX6PQVGYQKBFA3E9EWWVPM65SN5Z0XDDX3YW7 u5)
(map-set mint-passes 'SP5QB32W2AQFPDJ822AM87DGYRQ6D68JDVQZKMM9 u4)
(map-set mint-passes 'SP5Z5AS3VXZ8RFAZV6RB0EQ01JH2N9WTX1X58YTZ u3)
(map-set mint-passes 'SP69W4H8QQ3FRV7H8H1SXRQY3D47NKD0TP4MKD9S u1)
(map-set mint-passes 'SP6HYDNWHSSTZFS0HAR4FDRPXK3EK603S0BYJHFJ u6)
(map-set mint-passes 'SP6RWVMKSBEY0JKTP0JBTTX5AP2MTK5MG23A9DRF u1)
(map-set mint-passes 'SP6Y9FQ6HE0HZ4G5XVT9PG0XZJJM2WWN0SXCY8YV u2)
(map-set mint-passes 'SP79JMAGQVWMVWRXG2AE5GF8Z27VF1W4KZ3J03WG u1)
(map-set mint-passes 'SP7VCY0S1WZF3XDGSMPQ67SDQQ4DCW1DWBR29G19 u6)
(map-set mint-passes 'SP81XFF1BYX12QC5BZCK1ERBSS37DXGNQ0Z3JSNK u2)
(map-set mint-passes 'SP8J08AXNGX8XX6JVVY6JFT7RR7FGDTVFRQ6G8WQ u2)
(map-set mint-passes 'SP8MN3F37B45F68S9D0GFHMPYP1VXZHC38VB8ATM u1)
(map-set mint-passes 'SP8NK41E0EB80BNAQ2GH9GHQXEJHF3N5020Y2XRS u1)
(map-set mint-passes 'SP9D6VCZVVWFQMQ6JKMJKV7X6SHXP8NB1F2YPX10 u2)
(map-set mint-passes 'SP9MANP57C4QHVMNHR9HEAX6D5BAA4JN9KC8N4J8 u7)
(map-set mint-passes 'SP9R1DTP15B10S5WFPZVM8W2FDS6VXP27VA96CEZ u16)
(map-set mint-passes 'SPA0SZQ6KCCYMJV5XVKSNM7Y1DGDXH39A11ZX2Y8 u3)
(map-set mint-passes 'SPAD6SHQNFD8JV1X9SZ3B8D1S9E09T0TB2CMAE8W u3)
(map-set mint-passes 'SPAFJKGDVS11C9P9DY0ZTNFQ9774R568W9XYZDJV u2)
(map-set mint-passes 'SPAFPBD7M89973WDEN68FKYW761RQVYNHSEFQZB9 u41)
(map-set mint-passes 'SPAMKYYBRH59SNG3Q8X9KMWT0VSKXR1KMDQZQCTG u2)
(map-set mint-passes 'SPAX2SZCDFTVV76SR4JY4RYEPC5PBH2QAHEJXHTF u17)
(map-set mint-passes 'SPBK7YEVECRN3G4J3P49773MN5ZJQ9VR8PF9G2Y4 u3)
(map-set mint-passes 'SPBN3J1JST1K4MEZXZMV95ZXNBGMMKFZGJKY7VVC u8)
(map-set mint-passes 'SPBQNXCXEFFQDDQSXD0RD93AHSVCQ76QJ3QFRFZ7 u5)
(map-set mint-passes 'SPBVSBQH7KG7ZBY4MKKE4FM6YTBS2HQXC2WM2GQ5 u1)
(map-set mint-passes 'SPC84CF05VYMWX8AP05PYKPHH2FF2A8XMNVCAHVH u1)
(map-set mint-passes 'SPDAV1G8FQ0TMEWKVE0A9WS8RNDJ7K808X2MY22E u1)
(map-set mint-passes 'SPDBS5QFW2QHZ06FYG7CP30SC6BYAPCS6XHPZFW9 u4)
(map-set mint-passes 'SPDD8CSXGYV1FK98ZXW5Z1BQF8R2DR12H9HMATJQ u3)
(map-set mint-passes 'SPDK6XQJT6621GA7KWD3GM06AA8NHG0T3G380RAA u2)
(map-set mint-passes 'SPEAXKHJME2RR5M09XSQGGHNKYJB8FG2YZWKCF8B u2)
(map-set mint-passes 'SPEFCW4DY382E1YGJFZD4DQARNWASE5CT9P3V6YV u1)
(map-set mint-passes 'SPF4FR0X9Q4PAF6KENDD3NVAGQTM8A830A4F96YG u2)
(map-set mint-passes 'SPFERFF3QKF0Q6WBC4Y2Y6RQWEGN3DTDD5Y7S0NY u18)
(map-set mint-passes 'SPFZJAWND9GDB2QC54524J73DGBQ07XJ6JM1E3GN u4)
(map-set mint-passes 'SPGCBABRBWZ3EQNXP94VBNQMJYW1QN0RN0054VKF u2)
(map-set mint-passes 'SPHD4XDKT644J5ZQ9C96A4741752GTQ5184MT5HJ u2)
(map-set mint-passes 'SPHK8A7P61C6ASWKYDX1PCDX9YA54DKVJN49EXGJ u4)
(map-set mint-passes 'SPHTDTCRQ5FKJ63ZF0R2PH72XGD56T3RKSK5YZBB u1)
(map-set mint-passes 'SPJ52DQFJVJACKHY0QX5DRE559MBCXWTSGNBN76V u4)
(map-set mint-passes 'SPJ81C2WPQHFB6XTG518JKPABWM639R2X0B331XE u1)
(map-set mint-passes 'SPJKE9ENFNTW8QPYP8XTGYGW9VB29HM2W5570HCG u2)
(map-set mint-passes 'SPK03A217BWRJBWKQ4EKNGAAK92PNN1NGJY6YGNA u3)
(map-set mint-passes 'SPK70AN512VN2VRD52D0928MA05JVJ7DY2H5F3CF u2)
(map-set mint-passes 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T u1)
(map-set mint-passes 'SPKSG77V3EGXED5RJ4H7P6G2H24TAWFJFR083A9B u2)
(map-set mint-passes 'SPM1Q7YG18378H6W254YN8PABEVRPT38ZCY01SJD u1)
(map-set mint-passes 'SPM3GE47QTMMVBT6DH0XFBXYS1AJHSSAQMYSB4J8 u2)
(map-set mint-passes 'SPMSJDTTJ4W91KE70CFZXS17BHGT19W1ZJWAR0YK u1)
(map-set mint-passes 'SPN4Y5QPGQA8882ZXW90ADC2DHYXMSTN8VAR8C3X u2)
(map-set mint-passes 'SPNJVD5G70BKJ01YM32T1YDVWESJKEBX1WFG0JG7 u1)
(map-set mint-passes 'SPQ2HN9TYF8ZYY9D3G45NGYA9GHA6QZHQ8AXF5QM u18)
(map-set mint-passes 'SPQY88E87FNMP1NTY2YQ7X5DPTVY810PS8T6D2Y3 u2)
(map-set mint-passes 'SPR6RNTSP1TRMNXG17DHN7S2EVQ4AVDK9Y38MK88 u4)
(map-set mint-passes 'SPRADAE89F2YM9J9QZANK903SS63BY9XDK0HHHNV u2)
(map-set mint-passes 'SPS46Q8P75FGWDX11JNVER71R90VD5MV45XA5X1B u10)
(map-set mint-passes 'SPSH3T8W16Q86TS1Y4BMXW0Q348RMK5SXKGSP2F1 u2)
(map-set mint-passes 'SPSS7WAYA17Y8Z5Q6GJTMH4FH4MRJ7HZZ6JPGAGR u5)
(map-set mint-passes 'SPT1BS3PV5Z16S3V6ZEVWHVQS4RTJXS849R19KVC u3)
(map-set mint-passes 'SPV00QHST52GD7D0SEWV3R5N04RD4Q1PMA3TE2MP u1)
(map-set mint-passes 'SPV4GYHQ2B7R831M3F7ZNN22RDDHEKQ52ZN50CDE u4)
(map-set mint-passes 'SPVCMKZTGYMKYJEHFN4FABNFBBYMM02HNF66A6N6 u10)
(map-set mint-passes 'SPVM12QZD5GG98SAZQAWJVB0AZRF8QK86WHPTKR2 u5)
(map-set mint-passes 'SPWCTKQB60XYAR723K6NGQXSNNCQMQKR93HQBPK3 u16)
(map-set mint-passes 'SPWHKXYPYR63QE2ZCGB8SPMZ8DTD0Y5KBG1VWFBH u1)
(map-set mint-passes 'SPWQQVGCW8Q7AC1MF1WWA4T0GGQPWQXMHWTQ31KS u1)
(map-set mint-passes 'SPXCGBNAVPK7ZJNC0YBXS3QT7CX7NSF0QBSK5MHE u2)
(map-set mint-passes 'SPXE4CC9QNP0VVVMWHQDAQ3DZ8WCFTV5J2RZWRM0 u3)
(map-set mint-passes 'SPY914WERKVS8B46P6BDKY1V0J1HTKH8EPWETJSE u1)
(map-set mint-passes 'SPYJFEV30CH19QN4KJ5X5S5FV4NQNFFDK2N4F5WP u3)
(map-set mint-passes 'SPYQZBR1RKVCPXAF2AYECPETEV9X6R91ZS4HH8CH u1)
(map-set mint-passes 'SPZ0FZ0162H8YH2535YJF6WHYMDENAS0FHXDGGR4 u4)
(map-set mint-passes 'SPZKBCMMR5EZ66V8P2V8TTP6QHKC8MXF6CNRE8TH u1)
(map-set mint-passes 'SPZKV81EDASW9CQ6G33PNQSC0P532WK3FJ515WNJ u2)
(map-set mint-passes 'SP125J1ADVYWGWB9NQRCVGKYAG73R17ZNMV17XEJ7 u50)