Strudelify
Sunshine Reggae cover art

Keep Smiling

Sunshine Reggae

Laid Back

KeyA♭ majorTempo116 bpm
0:00/0:00
// Sunshine Reggae — Laid Back
// 116 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 89 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(116/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once · [...]/2 spreads a riff over 2 bars.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@8 A B C D E F G D H B I J K L M N K L M N K L M N K L M N E F G D H B I J K L M N K L M N K L M N K L M N K L M N K
  L M N K L M N K L M N K L M N K@7 O@2
>`.pickRestart({
  A: "ab1@2 ~@2 ab1@3 ~ ab1!2 f1 ~ ab1@2 ~ f1", B: "c2@2 ~@2 c2@2 ~ c2 c2@2 ~@2 c2@4",
  C: "f1@2 ~@2 f1 ~ f1!2 f1@2 ~@2 f1 f1@2 f1", D: "bb1@3 ~ bb1@3 ~ bb1!2 f1!2 bb1!2 f1!2",
  E: "ab1@2 ~@2 ab1@3 ~ ab1 ab1@3 ab1@4", F: "c2@2 ~@2 c2@2 ~@2 c2!2 g1@2 c2@2 g1@2",
  G: "f1@2 ~ f1 f1@2 ~@2 f1@2 ~@2 f1 f1@2 f1", H: "ab1@2 ~@2 ab1@2 ~ ab1 ab1@2 ~@2 ab1@3 ~",
  I: "f1@2 ~@2 f1 ~@3 f1@2 ~@2 f1@2 ~ f1", J: "bb1@3 ~ bb1@3 bb1 b1 c2 db2@2 db2 c2 bb1@2",
  K: "ab1@2 ~@2 ab1@2 ~@2 ab1 ab1@2 ~ ab1@4", L: "c2@3 ~ c2@3 ~ c2!2 g1@2 c2@2 g1 ~",
  M: "f1@2 ~ f1 f1@3 ~ f1@2 ~ f1 f1@3 ~", N: "bb1@3 ~ bb1@2 ~ bb1!2 bb1@2 ~ bb1@3 ~", O: "[ab1@3 ~]/2",
})).s("gm_electric_bass_finger").gain(0.38)

// chords · reed organ
const reed_organ = note(`<
  A B C D E F G H ~@12 I J K L I J K L I J K L I J K L ~@8 I J K L I J K L I J K L I J K L I J K L I J K L I J K L I J K
  L I J K L M N O N O N P Q ~
>`.pickRestart({
  A: "~@9 ab4!2 ~ ab4 ~ ab4 ~", B: "ab4 ~ f4 ab4 ~@4 f4 ~ ab4@2 bb4@2 g4 ~", C: "~@12 bb4 c5!3",
  D: "c5 ~ bb4!3 ~ ab4 ~ ab4 ~@3 ab4 ~ ab4 ~", E: "ab4 ~ f4 ~ ab4@3 ~@7 c5!2",
  F: "c5 ~ bb4 bb4@2 ~ ab4 ~ ab4 ~ f4 ~ ab4 ~ g4@2", G: "~@14 c5!2", H: "c5 ~ bb4 bb4@2 ~ ab4 ~ ab4 ~ f4 ~ ab4 ~@3",
  I: "[ab3,c4,eb4]", J: "[g3,c4,eb4]", K: "[ab3,c4,f4]", L: "[bb3,db4,f4]@15 ~", M: "~@12 c6@2 c5 ~, [ab3,c4,eb4]",
  N: "ab5 ab4 ~@6, [ab3,c4,eb4]", O: "~@10 c5 ~ c6@2 c5 ~, [ab3,c4,eb4]", P: "~@6 c6 c5, [ab3,c4,eb4]",
  Q: "[ab3,c4], ab5@7 ~", // Ab
})).s("gm_reed_organ").gain(0.15).pan(0.7)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  A@2 B@3 C D E ~@12 F G H I F G H I F G H I F G H I ~@8 F G H I F G H I F G H I F G H I F G H I F G H I F G H I F G H I
  F G H I F@7 ~@2
>`.pickRestart({
  A: "[~@8 [eb3,ab3,c4]@4 ~@2 [eb3,ab3,c4]@3 ~ [eb3,ab3,c4]@3 ~ [eb3,ab3,c4]@3 ~ [eb3,ab3,c4]@2 ~@2 [g3,bb3,eb4]@2, ~@3 ab2@3 ~@2]/2", // Ab Eb
  B: "[~@2 [bb3,eb4,g4]@2 ~@2 [bb3,eb4,g4]@2 ~@2 [bb3,eb4,g4] ~@3 [ab3,c4,f4]@2 ~@2 [ab3,c4,f4]@2 ~@2 [ab3,c4,f4]@2 ~@2 [ab3,c4,f4]@2 ~@2 [db4,f4,ab4]@2 ~@2 [ab3,db4,f4]@2 ~@2 [ab3,db4,f4] ~@3 [ab3,db4,f4] ~ [ab2,eb3,ab3,c4]@2 [c4,eb4] ~, ~@11 [bb3,eb4]@3 ~@34, ~@3 f2@3 ~ bb2@3 ~@2]/3", // Eb Fm Db Ab Cm Eb5
  C: "~@2 [ab3,c4,eb4] ~@3 [ab3,c4,eb4] ~@3 [ab3,c4,eb4] ~@3 [c4,eb4,g4] ~", // Ab Cm
  D: "~@2 [c4,eb4,g4] ~@3 [c4,eb4,g4] ~@3 [c4,eb4,g4] ~@3 [ab3,c4,f4] ~", // Cm Fm
  E: "~@2 [ab3,c4,f4] ~@3 [ab3,c4,f4] ~@3 [ab3,c4,f4] ~@3 [bb3,db4,f4] ~", // Fm Bbm
  F: "~@2 [ab3,c4,eb4] ~@3 [ab3,c4,eb4] ~@3 [ab3,c4,eb4] ~@3 [ab3,c4,eb4] ~", // Ab
  G: "~@2 [g3,c4,eb4] ~@3 [g3,c4,eb4] ~@3 [g3,c4,eb4] ~@3 [g3,c4,eb4] ~", // Cm
  H: "~@2 [ab3,c4,f4] ~@3 [ab3,c4,f4] ~@3 [ab3,c4,f4] ~@3 [ab3,c4,f4] ~", // Fm
  I: "~@2 [bb3,db4,f4] ~@3 [bb3,db4,f4] ~@3 [bb3,db4,f4] ~@3 [bb3,db4,f4] ~", // Bbm
})).s("gm_electric_guitar_clean").gain(0.25).pan(0.8)

// chords · accordion
const accordion = note(`<
  ~ A@2 B C D@3 E F G H I J K L M J N ~ O@2 P Q O@2 P Q M J K R S J K T I J K L M J U V W X J Y J X Y Z AA AB@2 AC AA
  AD@2 AE AF@2 AG AH AF@2 AG AH AA AB@2 AC AA AD@2 AE AF@2 AG AH AI AJ Y AJ Y AJ Y AK@2
>`.pickRestart({
  A: "[~@6 eb5@3 eb5@2 db5!2 c5!2 ~]/2", B: "~@3 bb4 ab4 f4 bb4@2", C: "ab4@4 c5@4 ~@6 [eb4,ab4,c5] ~",
  D: "[[eb4,ab4,c5] ~ ab4@2 eb5@2 c5@4 eb5@2 f5@22 ab5@8 f5@2 ab5@4]/3", E: "ab5@3 f5", F: "eb5", G: "c5@3 bb4",
  H: "ab4@15 ~", I: "c5@3 ab4", J: "c5", K: "f5", L: "bb4@15 ~", M: "ab4@3 ab4",
  N: "~@2 f5 ~ f5@2 f5 ~ f5@2 ab5 ~ ab5 ~ f5 ~", O: "~@2 [c4,eb4]!2 ~@2 [c4,eb4] ~@3 [c4,eb4]!2 ~@2 [c4,eb4] ~",
  P: "~@2 [c4,f4]!2 ~@2 [c4,f4] ~@3 [c4,f4]!2 ~@2 [c4,f4] ~", // F5
  Q: "~@2 [db4,f4]!2 ~@2 [db4,f4] ~@3 [db4,f4]!2 ~@2 [db4,f4] ~", R: "[f4,bb4]", S: "ab4@3 bb4", T: "bb4@3 c5",
  U: "f5@3 ab5", V: "f5 eb5 c5 ~", W: "c5@14 bb4 ab4", X: "bb4", Y: "ab4", Z: "bb4@2 c5 bb4",
  AA: "~@2 [ab4,c5]!2 ~@2 [ab4,c5] ~@3 [ab4,c5]!2 ~@2 [ab4,c5] ~", // Ab
  AB: "~@2 [c5,eb5]!2 ~@2 [bb4,db5]!2 ~@2 [ab4,c5] [ab4,c5]@3 [bb4,db5] ~", // Cm Bbm Ab Bbm
  AC: "~@2 [bb4,db5]!2 ~@2 [bb4,db5]!2 ~ bb4 [bb4,db5]!2 ~@2 [bb4,db5]!2", // Bbm
  AD: "~@2 [c5,eb5]!2 ~@2 [bb4,db5]!2 ~@2 [ab4,c5] [ab4,c5]@2 ~ [bb4,db5] ~", // Cm Bbm Ab Bbm
  AE: "~@2 [c5,eb5]!2 ~@2 [bb4,db5]!2 ~ bb4 [bb4,db5]!2 ~@2 [bb4,db5]!2", // Cm Bbm
  AF: "~@2 [c5,eb5]!2 ~@2 [c5,eb5] ~@3 [c5,eb5]!2 ~@2 [c5,eb5] ~", // Cm
  AG: "~@2 [c5,f5]!2 ~@2 [c5,f5] ~@3 [c5,f5]!2 ~@2 [c5,f5] ~", // F5
  AH: "~@2 [db5,f5]!2 ~@2 [db5,f5] ~@3 [db5,f5]!2 ~@2 [db5,f5] ~", AI: "ab4@3 ab3", AJ: "ab4@6 c5 bb4",
  AK: "[[ab3,c4,eb4]@5 [ab3,c4,eb4] ~@2 [ab3,c4,eb4]@16 ~@8]/2", // Ab
})).s("gm_accordion").gain(0.2).pan(0.3)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note("<~@4 A B C D E F G H E F G H E F G H ~@16 E F G H E F G H ~@45>".pickRestart({
  A: "~@3 [eb3,ab3,c4]", B: "[eb3,ab3,c4]!3 [c3,eb3,g3]", C: "[c3,eb3,g3]!3 [f3,ab3,c4]",
  D: "[f3,ab3,c4]!3 [f3,bb3,db4]", E: "~@2 [ab3,c4,eb4] ~@3 [ab3,c4,eb4] ~@3 [ab3,c4,eb4] ~@3 [ab3,c4,eb4] ~",
  F: "~@2 [g3,c4,eb4] ~@3 [g3,c4,eb4] ~@3 [g3,c4,eb4] ~@3 [g3,c4,eb4] ~", // Cm
  G: "~@2 [ab3,c4,f4] ~@3 [ab3,c4,f4] ~@3 [ab3,c4,f4] ~@3 [ab3,c4,f4] ~", // Fm
  H: "~@2 [f3,bb3,db4] ~@3 [f3,bb3,db4] ~@3 [f3,bb3,db4] ~@3 [f3,bb3,db4] ~", // Bbm
})).s("gm_acoustic_guitar_steel").gain(0.17).pan(0.3)

// other · steel drums · "STEELDRUMS"
const steel_drums = note(`<
  ~@8 A B C D A B C E F G H I J ~@2 K L ~@3 M N ~ O P Q R ~ A S T U V G H W J ~@2 X Y ~@2 Z AA N ~ AB P Q R ~@4 X Y ~@2
  Z AA N ~ AB P Q R ~@5 AC ~@8
>`.pickRestart({
  A: "[eb4,c5]!7 eb4!5 [eb4,ab4] ab4!2 [eb4,ab4]", B: "[eb4,bb4]!6 eb4!6 [eb4,ab4] ab4!3", C: "bb4!8 ~@4 c5!3 ab4",
  D: "bb3!8 ab4@4 eb4@4", E: "bb3!8 ~@4 eb4!4", F: "[eb4,c5]!12 [eb4,ab4,c5] ab4!2 [eb4,ab4]", G: "eb4!13 ~@3",
  H: "ab4!13 ~@2 ab4", I: "bb4!8 c5!4 f4!4", J: "eb4!4 ~@12", K: "~@7 eb4", L: "f4 ~@3", M: "c5@4 ~@8 ab4 ~@3",
  N: "~@6 bb4!2 ~@2 g4!2 ~@2 ab4!2", O: "~@12 bb4 ~@2 eb5", P: "[ab4,c5] ~@3", Q: "~@6 c5!2 ~@5 c5 bb4!2",
  R: "~@2 ab4 ~@13", S: "[eb4,bb4]!6 eb4!7 ~@3", T: "~@10 ab4!3 eb4 ~@2", U: "f4 ~@15",
  V: "[eb4,eb5] eb4 [eb4,ab4] eb4!9 [eb4,c5] c5!2 [eb4,c5]", W: "db5!8 c5!4 f4!4", X: "~@8 c5@3 ab4@3 bb4@2",
  Y: "eb4 ~@3", Z: "~@3 c5", AA: "eb4@2 ab4@3 ~@7 ab4 ~@3", AB: "~@12 bb4@3 eb5", AC: "ab4!8 ~@8",
})).s("gm_steel_drums").gain(0.25).pan(0.7)

// other · steel drums · "STEELDRUMS" · soft notes
const steel_drums_soft = note("<~@8 A ~@3 A ~@3 A ~ B ~@17 A ~@3 A ~ B ~@46>".pickRestart({
  A: "~@13 eb4!2 ~", B: "~@13 ab4!2 ~",
})).s("gm_steel_drums").gain(0.12).pan(0.7)

// other · piano · "A.PIANO 1"
const piano = note(`<
  ~@8 A B C D A E F G A B C D H I J K L M N O ~@2 P@2 ~ Q R S A E F G A B C D H T U V W X Y Z ~@2 P@2 ~ Q R S H T U V W
  X Y Z ~@2 P@2 ~ Q R S H T U V AA@7 ~@2
>`.pickRestart({
  A: "eb4@13 ~@3", B: "eb4@7 ~@3 g4@3 ~ eb4 g4, ~@8 d4@2 ~@3 d4@2 ~, ~@9 eb4@3 ~@4", C: "c4@2 f4 ab4", D: "db4@3 ~",
  E: "eb4@7 ~ eb4@8", F: "c4@10 f4 g4@4 f4", G: "bb3@3 ~", H: "eb4@6 c4 eb4", I: "c4@11 d4 eb4@2 c4 g4", J: "ab4@7 ~@9",
  K: "~@4 db4@3 ~", L: "ab3@12 ab3 ~ c4@2", M: "eb4@10 d4 ~@2 c4@2 g4, ~@11 eb4@5", N: "ab4@9 ~@3 ab4@2 f4@2",
  O: "db4@3 ~@3 db6@2, ~@11 [db5,f5,ab5]@5", // Db
  P: "[f4@12 ~@4 db4@9 ~ f3 ab3 bb3@2 ~@2, ~@12 ab4@13 ~@7, ~@15 f4@10 ~@7]/2",
  Q: "~@11 g4@2 d4 eb4 g4, ~@8 d4@5 ~@3, ~@9 eb4@5 ~@2", R: "eb4@6 ~ ab4", S: "bb3@9 ~ db4 db4@2 c4@3",
  T: "c4@10 d4 eb4@2 d4 eb4@2", U: "f4@15 ~", V: "db4@7 ~", W: "ab3@7 ~@5 bb3@2 eb4@2", X: "g4@9 ~@7", Y: "~@6 ab4 f4",
  Z: "db4@3 ~ f6@2 ~@2, ~@6 db5@5 ~@5, ~@7 [ab5,db6]@4 ~@5", AA: "ab3@7 ~@5 bb3@4",
})).s("gm_piano").gain(0.35).pan(0.4)

// other · whistle
const whistle = note("<~@2 A B ~@2 C D E@12 ~@28 F@4 G H I J K ~@23 G H I J G H I ~@2>".pickRestart({
  A: "~@8 a4 ~ g4 ~ f5 ~ c7 ~", B: "~@8 c7 ~ f7 ~ f5 ~ f5 ~", C: "eb6 ~@3 gb6 ~@3 ab6 ~ ab7 ~ ab7 ~@3",
  D: "~@6 eb6 ~@3 ab5 ~@3 f6 ~", E: "~@6 c8 bb7 ab7 ~ f7 ~@5", F: "~@10 c8 bb7 ab7 ~ f7 ~",
  G: "~@6 c8 bb8 ab7 ~ f7 ~ gb8 ~ b8 ~", H: "~@6 ab8 gb8 bb8 ~ f7 ~@3 f8 ~", I: "~@6 bb8 f8 ab8 ~ f7 ~@5",
  J: "~@6 e8 a8 ab7 ~ f7 ~@5", K: "~@6 g8 b8 ab7 ~ f7 ~@5",
})).s("gm_whistle").gain(0.1).pan(0.6)

// other · synth drum · "+808 TOM"
const synth_drum = note(`<
  ~@2 A B C D E F G H I J G H I J G H I J G H I J G H I J G H I J G H I J G H I J G H I J G H I J G H I J G H I J G H I
  J G H I J G H I J G H I J G H I J G H I J G@7 ~@2
>`.pickRestart({
  A: "g6 ~ b4!3 ~ b4 ~ f6 ~ g6 ~ a6 ~ g6 ~", B: "g6 ~ b4!3 ~ b4 ~ d7 ~ c7 ~ a6 ~ f6 ~",
  C: "c6 ~ ab7!3 ~ ab7 ~ d7 ~ e7 [e7,f7] a7 ~ b7 ~", D: "d8 ~ e8!2 d8 ~ a7 ~ e7 ~ c7 b6 a6 ~ g4!2",
  E: "a6 ~ a4!2 c7 ~ c5!2 g6 ~ c7 ~ f7 ~ g7 ~", F: "f7 ~ e5 ~ d5 ~ c5 a6!2 ~ c7 ~ bb5 ~ a5 g5",
  G: "~@3 bb4!2 ~ bb4 ~@3 bb4!2 ~@2 bb4 ~", H: "~@2 bb4!2 ~@2 bb4 ~@3 bb4!2 ~@2 bb4 ~",
  I: "~@2 bb4!2 ~@2 bb4 ~@3 c5!2 ~@2 c5 ~", J: "~@2 bb4!2 ~@2 c5 ~@3 c5!2 ~@2 c5 ~",
})).s("gm_synth_drum").gain(0.25).pan(0.4)

// drums · kick
const kick = s("bd").struct("<~@8 [x!4]!79 x ~>").gain(0.8)

// drums · rim
const rim = s("rim").struct(`<
  ~@20 A@3 B A@3 C A@3 C A@3 D A@7 E A@3 B A@3 C A@3 F G A@2 H A@3 B A@3 C A@3 ~ G A@2 E I A@2 J B K L K M L N ~@2
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x ~ x!2", C: "~@4 x ~@4 x ~@2 x ~ x!2", D: "~ x ~@2 x ~ x ~@2 x ~@2 x ~@3",
  E: "~ x ~@2 x ~ x ~@2 x ~@6", F: "~ x ~@2 x ~@4 x ~@6", G: "~@4 x ~ x!2 ~@4 x ~@3", H: "~ x ~@2",
  I: "~@8 x ~@2 x ~@2 x ~", J: "~ x ~@2 x!2 ~ x ~@4 x ~ x!2", K: "~@4 x ~ x ~@5 x ~ x!2",
  L: "~@4 x ~ x ~@2 x ~@2 x ~ x!2", M: "~@4 x ~ x!2 ~@4 x ~ x!2", N: "~@4 x ~ x ~@2 x ~@6",
})).gain(0.64)

// drums · snare
const snare = s("sd").struct("<~@19 A ~@23 B ~@11 C ~@3 D ~@11 E ~@3 F G ~@9 C ~@2>".pickRestart({
  A: "~@2 x ~@2 x ~ x!2 ~@2 x ~ x!2 ~", B: "~@7 x ~@8", C: "~@12 x!4", D: "~@9 x!2 ~@2 x!2 ~",
  E: "x!3 ~@3 x!2 ~ x!2 ~ x ~ x!2", F: "~@14 x!2", G: "~ x ~@6",
})).gain(0.48)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@4 A B@2 C D E F G D E F G D E F H I J K L I J K L M J M N I J K O D E F G D E F P Q J K L I J K L I J K R Q J K L Q
  J K L I J K L I J K R Q J K R Q J S T U I@5 V ~@2
>`.pickRestart({
  A: "~@14 x!2", B: "~@6 x!2 ~@6 x!2", C: "~@6 x!2 ~@8", D: "x ~ x ~ x ~ x ~ x ~ x ~ x!3 ~",
  E: "x ~ x ~ x ~ x ~ x ~ x!3 ~ x ~", F: "x ~ x ~ x!3 ~ x ~ x ~ x ~ x!2", G: "x ~ x ~ x ~ x ~ x!3 ~ x!3 ~",
  H: "x ~ x ~ x ~ x ~ x!3 ~ x!2 ~@2", I: "x ~ x!3 ~ x ~ x ~ x ~ x ~ x ~", J: "x ~ x ~ x ~ x!3 ~ x ~ x ~ x!2", K: "x!8",
  L: "x ~ x ~ x ~ x ~ x ~ x!5 ~", M: "x ~ x!3 ~ x ~ x ~ x!3 ~ x ~", N: "x ~ x!3 ~ x ~ x ~ x!5 ~",
  O: "x ~ x ~ x ~ x ~ x ~ x!4 ~@2", P: "x ~ x ~ x ~ x ~ x!2 ~@2 x!3 ~", Q: "x ~ x!6", R: "x!5 ~@3",
  S: "x ~ x!3 ~ x!3 ~ x!3 ~ x!2", T: "x ~ x!3 ~ x!3 ~ x!5 ~", U: "x ~ x!2 ~@2 x ~ x ~ x ~ x ~ x ~",
  V: "x ~ x!3 ~ x ~ x ~@7",
})).gain(0.48)

// drums · open hat
const open_hat = s("oh").struct("<~@19 A ~@23 B C ~@10 B C ~@3 C ~@10 D C ~@2 B ~@10 B ~@2>".pickRestart({
  A: "~@7 x", B: "~@5 x ~@2", C: "~ x ~@6", D: "~@5 x!2 ~",
})).gain(0.56)

// drums · crash
const crash = s("cr").struct("<~@35 A ~@40 B ~@3 C ~@6 D ~>".pickRestart({
  A: "~@7 x", B: "~ x ~@6", C: "~ x ~@2", D: "x",
})).gain(0.64)

// drums · ht
const ht = s("ht").struct("<A ~@2 B C ~@14 D ~@23 E ~@11 F ~@3 G ~@11 F ~@3 H ~@10 F ~@2>".pickRestart({
  A: "~@3 x!5 ~@8", B: "~@7 x", C: "~ x ~@5 x!2 ~ x ~@5", D: "~@2 x ~@2 x ~@2 x ~@2 x ~ x!2 ~", E: "~@13 x!3",
  F: "~@14 x!2", G: "~@9 x!2 ~@2 x!2 ~", H: "~@9 x!2 ~@3 x!2",
})).gain(0.4)

// drums · shaker
const shaker = s("sh").struct(`<
  [x!3 ~@7 x!2 ~@2 x ~]
  [~@2 x!2 ~@2 x!3 ~ x!2 ~@2 x ~]
  [~@2 x!2 ~@2 x!7 ~ x!2]
  [x ~ x!2 ~@2 x ~@3 x!2 ~@2 x ~]
  [~@2 x!3 ~ x ~@3 x!2 ~@2 x ~]
  [~@2 x!2 ~@2 x ~@3 x!2 ~@2 x ~]!3
  ~@81
>`).gain(0.32)

// … 4 more lines