authorgravatar for git@paperclover.netclover caruso <git@paperclover.net> 2026-07-05 13:22:48-07:00
committergravatar for git@paperclover.netclover caruso <git@paperclover.net> 2026-07-12 17:29:19-07:00
logeb97c459390bdb39eb6ecf071fd0932a8386edac
treeab8d9cc369a5c4248236460f0e27ef8c913728e0
parent05c31a411efd9c3268d7056a40c3314e00a0bc7c
signaturebadge-check Signed by SSH key SHA256:xbd+BjjhyBfwk7GVoURf9Yx0gzDerHbvYv7SddNWmAs

feat: yay


29 files changed, 13909 insertions(+), 262 deletions(-)

pitch/Package.swift created+13
...@@ -0,0 +1,13 @@
1// swift-tools-version:5.10
2import PackageDescription
3
4let package = Package(
5 name: "Pitch",
6 platforms: [.macOS(.v14)],
7 targets: [
8 .executableTarget(
9 name: "Pitch",
10 path: "Sources/Pitch"
11 )
12 ]
13)
pitch/Sources/Pitch/App.swift created+25
...@@ -0,0 +1,25 @@
1import SwiftUI
2import AppKit
3
4@main
5struct PitchApp: App {
6 @NSApplicationDelegateAdaptor(AppDelegate.self) private var delegate
7
8 var body: some Scene {
9 WindowGroup("Clover Pitch") {
10 ContentView()
11 .frame(minWidth: 300, minHeight: 340)
12 .navigationTitle("Clover Pitch")
13 }
14 .windowResizability(.contentMinSize)
15 .commands { CommandGroup(replacing: .newItem) {} }
16 }
17}
18
19final class AppDelegate: NSObject, NSApplicationDelegate {
20 func applicationDidFinishLaunching(_ notification: Notification) {
21 NSApp.setActivationPolicy(.regular)
22 NSApp.activate(ignoringOtherApps: true)
23 }
24 func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { true }
25}
pitch/Sources/Pitch/AudioEngine.swift created+289
...@@ -0,0 +1,289 @@
1import AVFoundation
2import AudioToolbox
3import CoreAudio
4import QuartzCore
5import Combine
6
7/// One detected pitch point on the timeline.
8struct PitchSample {
9 let time: Double // seconds on the CACurrentMediaTime clock
10 let midi: Double // fractional MIDI note
11 let clarity: Double
12}
13
14/// The most recent live reading, for the big note readout / tuner.
15struct LivePitch {
16 let frequency: Double
17 let midi: Double
18 let clarity: Double
19 let level: Double
20}
21
22enum MicPermission {
23 case unknown, granted, denied
24}
25
26/// Captures microphone audio, runs the YIN detector at a fixed hop, and
27/// exposes both a rolling history (for the graph) and the latest reading.
28final class AudioEngine: ObservableObject, @unchecked Sendable {
29
30 // Published UI state (mutated on the main thread only). Deliberately
31 // low-frequency — the live pitch is NOT published, so per-frame detection
32 // never invalidates the SwiftUI tree. The graph reads it via currentLive().
33 @Published var devices: [AudioInputDevice] = []
34 @Published var selectedDeviceID: AudioDeviceID?
35 @Published var isRunning = false
36 @Published var permission: MicPermission = .unknown
37 @Published var statusMessage: String?
38
39 private let engine = AVAudioEngine()
40 // Sensitive settings: low RMS gate so quiet singing registers, and a
41 // slightly looser YIN threshold so less-perfectly-periodic tones are kept.
42 // Very low level gate so quiet singing registers; the clarity gate (not the
43 // level gate) is what rejects room noise, so lowering this is safe.
44 private var detector = YINDetector(sampleRate: 48000, windowSize: 2048,
45 threshold: 0.22, rmsGate: 0.0005, minClarity: 0.5)
46
47 private let windowSize = 2048
48 private let hop = 256 // ~5.3 ms between points at 48 kHz → dense, smooth trace
49
50 // Detection ring state (audio thread).
51 private var accumulator = [Float]()
52 private var framesProcessed: Int = 0
53 private var startHostTime: Double = 0
54 private var haveStart = false
55
56 // Small median window to reject single-frame octave/spike errors.
57 private var recentMidi = [Double]()
58
59 // History shared with the UI thread.
60 private let historyLock = NSLock()
61 private var history = [PitchSample]()
62 private let historyWindow: Double = 30 // seconds retained
63
64 // Latest reading, read lock-free-ish by the graph each display frame.
65 private let liveLock = NSLock()
66 private var latestLive: LivePitch?
67 private var latestLiveTime: Double = 0
68 private let liveHold: Double = 0.3 // keep showing the last note this long after silence
69
70 // MARK: - Lifecycle
71
72 func start() {
73 refreshDevices()
74 requestPermission { [weak self] granted in
75 guard let self else { return }
76 if granted {
77 self.selectedDeviceID = CoreAudioDevices.defaultInputDevice()
78 self.beginCapture()
79 }
80 }
81 }
82
83 func requestPermission(_ completion: @escaping (Bool) -> Void) {
84 switch AVCaptureDevice.authorizationStatus(for: .audio) {
85 case .authorized:
86 permission = .granted
87 completion(true)
88 case .notDetermined:
89 AVCaptureDevice.requestAccess(for: .audio) { [weak self] granted in
90 DispatchQueue.main.async {
91 self?.permission = granted ? .granted : .denied
92 completion(granted)
93 }
94 }
95 default:
96 permission = .denied
97 statusMessage = "Microphone access denied — enable it in System Settings ▸ Privacy & Security ▸ Microphone."
98 completion(false)
99 }
100 }
101
102 func refreshDevices() {
103 let list = CoreAudioDevices.inputDevices()
104 DispatchQueue.main.async {
105 self.devices = list
106 if let sel = self.selectedDeviceID, !list.contains(where: { $0.id == sel }) {
107 self.selectedDeviceID = list.first?.id
108 }
109 }
110 }
111
112 // MARK: - Device selection
113
114 func selectDevice(_ id: AudioDeviceID) {
115 selectedDeviceID = id
116 let wasRunning = isRunning
117 if wasRunning { stopCapture() }
118 applyDevice(id)
119 if wasRunning { beginCapture() }
120 }
121
122 private func applyDevice(_ id: AudioDeviceID) {
123 guard let unit = engine.inputNode.audioUnit else { return }
124 var dev = id
125 let status = AudioUnitSetProperty(
126 unit,
127 kAudioOutputUnitProperty_CurrentDevice,
128 kAudioUnitScope_Global,
129 0,
130 &dev,
131 UInt32(MemoryLayout<AudioDeviceID>.size))
132 if status != noErr {
133 DispatchQueue.main.async { self.statusMessage = "Couldn't switch input device (\(status))." }
134 }
135 }
136
137 // MARK: - Capture
138
139 private func beginCapture() {
140 if let id = selectedDeviceID { applyDevice(id) }
141
142 let input = engine.inputNode
143 let format = input.inputFormat(forBus: 0)
144 guard format.sampleRate > 0, format.channelCount > 0 else {
145 DispatchQueue.main.async { self.statusMessage = "No usable audio input." }
146 return
147 }
148
149 detector.sampleRate = format.sampleRate
150 resetDetectionState()
151
152 input.removeTap(onBus: 0)
153 input.installTap(onBus: 0, bufferSize: 1024, format: format) { [weak self] buffer, _ in
154 self?.process(buffer)
155 }
156
157 engine.prepare()
158 do {
159 try engine.start()
160 DispatchQueue.main.async {
161 self.isRunning = true
162 self.statusMessage = nil
163 }
164 } catch {
165 DispatchQueue.main.async {
166 self.statusMessage = "Audio engine failed to start: \(error.localizedDescription)"
167 }
168 }
169 }
170
171 private func stopCapture() {
172 engine.inputNode.removeTap(onBus: 0)
173 if engine.isRunning { engine.stop() }
174 DispatchQueue.main.async { self.isRunning = false }
175 }
176
177 private func resetDetectionState() {
178 accumulator.removeAll(keepingCapacity: true)
179 recentMidi.removeAll(keepingCapacity: true)
180 framesProcessed = 0
181 haveStart = false
182 }
183
184 // MARK: - Audio-thread processing
185
186 private func process(_ buffer: AVAudioPCMBuffer) {
187 guard let channelData = buffer.floatChannelData else { return }
188 let frames = Int(buffer.frameLength)
189 if frames == 0 { return }
190 let channels = Int(buffer.format.channelCount)
191
192 if !haveStart {
193 haveStart = true
194 startHostTime = CACurrentMediaTime()
195 framesProcessed = 0
196 }
197
198 // Down-mix to mono.
199 accumulator.reserveCapacity(accumulator.count + frames)
200 if channels == 1 {
201 let p = channelData[0]
202 for i in 0..<frames { accumulator.append(p[i]) }
203 } else {
204 for i in 0..<frames {
205 var sum: Float = 0
206 for c in 0..<channels { sum += channelData[c][i] }
207 accumulator.append(sum / Float(channels))
208 }
209 }
210
211 let sr = detector.sampleRate
212 var newSamples = [PitchSample]()
213
214 while accumulator.count >= windowSize {
215 var result: YINDetector.Result?
216 accumulator.withUnsafeBufferPointer { buf in
217 result = detector.detect(buf.baseAddress!, count: windowSize)
218 }
219 let windowStartTime = startHostTime + Double(framesProcessed) / sr
220
221 if let r = result {
222 let raw = Music.midi(fromFrequency: r.frequency)
223 let midi = smoothedMidi(raw)
224 let freq = Music.frequency(fromMidi: midi)
225 newSamples.append(PitchSample(time: windowStartTime, midi: midi, clarity: r.clarity))
226 setLive(LivePitch(frequency: freq, midi: midi, clarity: r.clarity, level: r.level),
227 at: windowStartTime)
228 } else {
229 recentMidi.removeAll(keepingCapacity: true)
230 }
231
232 accumulator.removeFirst(hop)
233 framesProcessed += hop
234 }
235
236 if !newSamples.isEmpty { appendHistory(newSamples) }
237 }
238
239 /// Median-of-3 over consecutive detections — removes lone octave/spike
240 /// errors while preserving vibrato and fast slides.
241 private func smoothedMidi(_ raw: Double) -> Double {
242 recentMidi.append(raw)
243 if recentMidi.count > 3 { recentMidi.removeFirst() }
244 if recentMidi.count < 3 { return raw }
245 return recentMidi.sorted()[1]
246 }
247
248 private func appendHistory(_ samples: [PitchSample]) {
249 historyLock.lock()
250 history.append(contentsOf: samples)
251 let cutoff = (samples.last?.time ?? 0) - historyWindow
252 if let first = history.first, first.time < cutoff {
253 history.removeAll { $0.time < cutoff }
254 }
255 historyLock.unlock()
256 }
257
258 private func setLive(_ value: LivePitch, at time: Double) {
259 liveLock.lock()
260 latestLive = value
261 latestLiveTime = time
262 liveLock.unlock()
263 }
264
265 /// The current reading, or nil once the note has been silent past `liveHold`.
266 /// Read every display frame by the graph — cheap and never touches @Published.
267 func currentLive() -> LivePitch? {
268 liveLock.lock()
269 defer { liveLock.unlock() }
270 guard let v = latestLive else { return nil }
271 if CACurrentMediaTime() - latestLiveTime > liveHold { return nil }
272 return v
273 }
274
275 // MARK: - Read access for the graph
276
277 /// Snapshot of samples with `time >= since`, oldest first.
278 func snapshot(since: Double) -> [PitchSample] {
279 historyLock.lock()
280 defer { historyLock.unlock() }
281 if history.isEmpty { return [] }
282 var start = history.count
283 for i in stride(from: history.count - 1, through: 0, by: -1) {
284 if history[i].time < since { break }
285 start = i
286 }
287 return Array(history[start...])
288 }
289}
pitch/Sources/Pitch/ContentView.swift created+41
...@@ -0,0 +1,41 @@
1import SwiftUI
2
3struct ContentView: View {
4 @StateObject private var engine = AudioEngine()
5 @StateObject private var settings = Settings()
6 @Environment(\.colorScheme) private var scheme
7
8 var body: some View {
9 let palette = Palette.make(scheme)
10 VStack(spacing: 0) {
11 TopBar(engine: engine, settings: settings)
12 ZStack {
13 PitchGraphView(engine: engine, settings: settings, palette: palette)
14 if engine.permission == .denied {
15 PermissionOverlay()
16 }
17 }
18 }
19 .background(palette.background)
20 .onAppear { engine.start() }
21 }
22}
23
24struct PermissionOverlay: View {
25 var body: some View {
26 VStack(spacing: 10) {
27 Image(systemName: "mic.slash.fill")
28 .font(.system(size: 34))
29 .foregroundColor(.secondary)
30 Text("Microphone access needed")
31 .font(.system(size: 15, weight: .semibold))
32 Text("Enable it in System Settings ▸ Privacy & Security ▸ Microphone,\nthen relaunch Clover Pitch.")
33 .font(.system(size: 12))
34 .multilineTextAlignment(.center)
35 .foregroundColor(.secondary)
36 }
37 .padding(28)
38 .frame(maxWidth: .infinity, maxHeight: .infinity)
39 .background(Color(nsColor: .windowBackgroundColor).opacity(0.9))
40 }
41}
pitch/Sources/Pitch/CoreAudioDevices.swift created+88
...@@ -0,0 +1,88 @@
1import Foundation
2import CoreAudio
3
4struct AudioInputDevice: Identifiable, Hashable {
5 let id: AudioDeviceID
6 let name: String
7}
8
9/// Thin wrapper over the CoreAudio HAL for enumerating and identifying
10/// hardware input devices.
11enum CoreAudioDevices {
12
13 static func inputDevices() -> [AudioInputDevice] {
14 var address = AudioObjectPropertyAddress(
15 mSelector: kAudioHardwarePropertyDevices,
16 mScope: kAudioObjectPropertyScopeGlobal,
17 mElement: kAudioObjectPropertyElementMain)
18
19 var dataSize: UInt32 = 0
20 guard AudioObjectGetPropertyDataSize(
21 AudioObjectID(kAudioObjectSystemObject), &address, 0, nil, &dataSize) == noErr
22 else { return [] }
23
24 let count = Int(dataSize) / MemoryLayout<AudioDeviceID>.size
25 var ids = [AudioDeviceID](repeating: 0, count: count)
26 guard AudioObjectGetPropertyData(
27 AudioObjectID(kAudioObjectSystemObject), &address, 0, nil, &dataSize, &ids) == noErr
28 else { return [] }
29
30 return ids.compactMap { id in
31 guard hasInputChannels(id) else { return nil }
32 return AudioInputDevice(id: id, name: name(of: id) ?? "Device \(id)")
33 }
34 }
35
36 static func defaultInputDevice() -> AudioDeviceID? {
37 var address = AudioObjectPropertyAddress(
38 mSelector: kAudioHardwarePropertyDefaultInputDevice,
39 mScope: kAudioObjectPropertyScopeGlobal,
40 mElement: kAudioObjectPropertyElementMain)
41 var deviceID: AudioDeviceID = 0
42 var size = UInt32(MemoryLayout<AudioDeviceID>.size)
43 guard AudioObjectGetPropertyData(
44 AudioObjectID(kAudioObjectSystemObject), &address, 0, nil, &size, &deviceID) == noErr,
45 deviceID != 0
46 else { return nil }
47 return deviceID
48 }
49
50 // MARK: - Helpers
51
52 private static func hasInputChannels(_ id: AudioDeviceID) -> Bool {
53 var address = AudioObjectPropertyAddress(
54 mSelector: kAudioDevicePropertyStreamConfiguration,
55 mScope: kAudioObjectPropertyScopeInput,
56 mElement: kAudioObjectPropertyElementMain)
57
58 var size: UInt32 = 0
59 guard AudioObjectGetPropertyDataSize(id, &address, 0, nil, &size) == noErr, size > 0
60 else { return false }
61
62 let bufferList = UnsafeMutableRawPointer.allocate(
63 byteCount: Int(size), alignment: MemoryLayout<AudioBufferList>.alignment)
64 defer { bufferList.deallocate() }
65
66 guard AudioObjectGetPropertyData(id, &address, 0, nil, &size, bufferList) == noErr
67 else { return false }
68
69 let list = UnsafeMutableAudioBufferListPointer(
70 bufferList.assumingMemoryBound(to: AudioBufferList.self))
71 var channels = 0
72 for buffer in list { channels += Int(buffer.mNumberChannels) }
73 return channels > 0
74 }
75
76 private static func name(of id: AudioDeviceID) -> String? {
77 var address = AudioObjectPropertyAddress(
78 mSelector: kAudioObjectPropertyName,
79 mScope: kAudioObjectPropertyScopeGlobal,
80 mElement: kAudioObjectPropertyElementMain)
81 var name: Unmanaged<CFString>?
82 var size = UInt32(MemoryLayout<Unmanaged<CFString>?>.size)
83 guard AudioObjectGetPropertyData(id, &address, 0, nil, &size, &name) == noErr,
84 let value = name?.takeRetainedValue()
85 else { return nil }
86 return value as String
87 }
88}
pitch/Sources/Pitch/Music.swift created+99
...@@ -0,0 +1,99 @@
1import SwiftUI
2
3// MARK: - Note naming systems
4
5enum NoteNaming: String, CaseIterable, Identifiable {
6 case sharps = "Sharps (C♯ D♯)"
7 case flats = "Flats (D♭ E♭)"
8 case solfege = "Solfège (Do Re)"
9 case german = "German (H / B)"
10
11 var id: String { rawValue }
12
13 var shortLabel: String {
14 switch self {
15 case .sharps: return "Sharps"
16 case .flats: return "Flats"
17 case .solfege: return "Solfège"
18 case .german: return "German"
19 }
20 }
21
22 /// Pitch-class names, index 0 == C.
23 var names: [String] {
24 switch self {
25 case .sharps:
26 return ["C", "C♯", "D", "D♯", "E", "F", "F♯", "G", "G♯", "A", "A♯", "B"]
27 case .flats:
28 return ["C", "D♭", "D", "E♭", "E", "F", "G♭", "G", "A♭", "A", "B♭", "B"]
29 case .solfege:
30 return ["Do", "Di", "Re", "Ri", "Mi", "Fa", "Fi", "Sol", "Si", "La", "Li", "Ti"]
31 case .german:
32 // German convention: A♯/B♭ is written "B", and B natural is "H".
33 return ["C", "C♯", "D", "D♯", "E", "F", "F♯", "G", "G♯", "A", "B", "H"]
34 }
35 }
36}
37
38// MARK: - Musical helpers
39
40enum Music {
41 /// MIDI note number (may be fractional) for a frequency in Hz. A4 (440) == 69.
42 static func midi(fromFrequency f: Double) -> Double {
43 69.0 + 12.0 * log2(f / 440.0)
44 }
45
46 static func frequency(fromMidi m: Double) -> Double {
47 440.0 * pow(2.0, (m - 69.0) / 12.0)
48 }
49
50 /// Pitch class 0–11 for an integer MIDI number.
51 static func pitchClass(_ midi: Int) -> Int {
52 ((midi % 12) + 12) % 12
53 }
54
55 /// True for the "black keys" — C♯ D♯ F♯ G♯ A♯.
56 static func isAccidental(_ midi: Int) -> Bool {
57 [1, 3, 6, 8, 10].contains(pitchClass(midi))
58 }
59
60 /// Scientific-pitch octave (C4 == middle C == MIDI 60).
61 static func octave(_ midi: Int) -> Int {
62 midi / 12 - 1
63 }
64
65 /// Name without octave, e.g. "F♯".
66 static func name(_ midi: Int, naming: NoteNaming) -> String {
67 naming.names[pitchClass(midi)]
68 }
69
70 /// Name with octave, e.g. "F♯4".
71 static func fullName(_ midi: Int, naming: NoteNaming) -> String {
72 "\(name(midi, naming: naming))\(octave(midi))"
73 }
74}
75
76// MARK: - Vocal / instrument ranges
77
78struct PitchRange: Identifiable, Hashable {
79 let name: String
80 let low: Int // MIDI (inclusive)
81 let high: Int // MIDI (inclusive)
82 var id: String { name }
83 var span: Int { high - low }
84}
85
86extension PitchRange {
87 static let presets: [PitchRange] = [
88 PitchRange(name: "Full (C1–C7)", low: 24, high: 96),
89 PitchRange(name: "Bass (E2–E4)", low: 40, high: 64),
90 PitchRange(name: "Baritone (A2–A4)", low: 45, high: 69),
91 PitchRange(name: "Tenor (C3–C5)", low: 48, high: 72),
92 PitchRange(name: "Alto (F3–F5)", low: 53, high: 77),
93 PitchRange(name: "Mezzo (A3–A5)", low: 57, high: 81),
94 PitchRange(name: "Soprano (C4–C6)", low: 60, high: 84),
95 PitchRange(name: "Wide (C2–C6)", low: 36, high: 84),
96 ]
97
98 static let `default` = presets[7] // Wide
99}
pitch/Sources/Pitch/PitchDetector.swift created+102
...@@ -0,0 +1,102 @@
1import Foundation
2
3/// Monophonic fundamental-frequency estimator using the YIN algorithm
4/// (de Cheveigné & Kawahara, 2002) with parabolic interpolation.
5final class YINDetector {
6 var sampleRate: Double
7 let windowSize: Int
8 private let threshold: Float
9 private let rmsGate: Float
10 private let minClarity: Double
11
12 // Scratch buffers reused across calls to avoid per-frame allocation.
13 private var diff: [Float]
14 private var cmnd: [Float]
15
16 init(sampleRate: Double, windowSize: Int = 2048, threshold: Float = 0.15,
17 rmsGate: Float = 0.006, minClarity: Double = 0.5) {
18 self.sampleRate = sampleRate
19 self.windowSize = windowSize
20 self.threshold = threshold
21 self.rmsGate = rmsGate
22 self.minClarity = minClarity
23 self.diff = [Float](repeating: 0, count: windowSize / 2)
24 self.cmnd = [Float](repeating: 1, count: windowSize / 2)
25 }
26
27 struct Result {
28 let frequency: Double
29 let clarity: Double // 0…1, higher == more periodic
30 let level: Double // RMS, 0…1
31 }
32
33 /// Returns a pitch estimate for `samples` (must be `windowSize` long) or nil
34 /// if the signal is too quiet or not periodic enough.
35 func detect(_ samples: UnsafePointer<Float>, count: Int) -> Result? {
36 guard count >= windowSize else { return nil }
37 let half = windowSize / 2
38
39 // --- RMS gate: ignore near-silence ---
40 var sumSq: Float = 0
41 for i in 0..<windowSize { let v = samples[i]; sumSq += v * v }
42 let rms = (sumSq / Float(windowSize)).squareRoot()
43 if rms < rmsGate { return nil }
44 let level = Double(min(1, rms * 6))
45
46 // --- Difference function ---
47 diff[0] = 0
48 for tau in 1..<half {
49 var sum: Float = 0
50 var j = 0
51 while j < half {
52 let d = samples[j] - samples[j + tau]
53 sum += d * d
54 j += 1
55 }
56 diff[tau] = sum
57 }
58
59 // --- Cumulative mean normalized difference ---
60 cmnd[0] = 1
61 var running: Float = 0
62 for tau in 1..<half {
63 running += diff[tau]
64 cmnd[tau] = running > 0 ? diff[tau] * Float(tau) / running : 1
65 }
66
67 // --- Absolute threshold ---
68 var tauEst = -1
69 var tau = 2
70 while tau < half - 1 {
71 if cmnd[tau] < threshold {
72 while tau + 1 < half && cmnd[tau + 1] < cmnd[tau] { tau += 1 }
73 tauEst = tau
74 break
75 }
76 tau += 1
77 }
78 guard tauEst > 0 else { return nil }
79
80 // --- Parabolic interpolation around the dip ---
81 let betterTau = parabolicRefine(tauEst)
82 guard betterTau > 0 else { return nil }
83 let freq = sampleRate / betterTau
84 guard freq >= 40, freq <= 2000 else { return nil }
85
86 let clarity = Double(max(0, min(1, 1 - cmnd[tauEst])))
87 guard clarity >= minClarity else { return nil }
88 return Result(frequency: freq, clarity: clarity, level: level)
89 }
90
91 private func parabolicRefine(_ tau: Int) -> Double {
92 let half = windowSize / 2
93 let x0 = tau > 1 ? tau - 1 : tau
94 let x2 = tau + 1 < half ? tau + 1 : tau
95 if x0 == tau { return Double(cmnd[tau] <= cmnd[x2] ? tau : x2) }
96 if x2 == tau { return Double(cmnd[tau] <= cmnd[x0] ? tau : x0) }
97 let s0 = cmnd[x0], s1 = cmnd[tau], s2 = cmnd[x2]
98 let denom = 2 * (2 * s1 - s2 - s0)
99 if denom == 0 { return Double(tau) }
100 return Double(tau) + Double(s2 - s0) / Double(denom)
101 }
102}
pitch/Sources/Pitch/PitchGraphView.swift created+174
...@@ -0,0 +1,174 @@
1import SwiftUI
2import QuartzCore
3
4/// pitchreader.com-style visualiser. Two layers:
5/// • `GridCanvas` — staff lines + right-hand labels. Redraws only when the
6/// range / naming / transpose / appearance change (never per frame).
7/// • `TraceCanvas` — the active-note band, the scrolling pitch trace, the dot
8/// and the note pill. Driven by `TimelineView(.animation)` so it advances at
9/// the display refresh rate.
10struct PitchGraphView: View {
11 @ObservedObject var engine: AudioEngine
12 @ObservedObject var settings: Settings
13 var palette: Palette
14
15 var body: some View {
16 ZStack {
17 palette.background
18 GridCanvas(settings: settings, palette: palette)
19 TraceCanvas(engine: engine, settings: settings, palette: palette)
20 }
21 }
22}
23
24/// Natural-note staff lines and labels, laid out on the right like pitchreader.
25private struct GridCanvas: View {
26 @ObservedObject var settings: Settings
27 var palette: Palette
28
29 var body: some View {
30 Canvas { ctx, size in
31 let layout = PitchLayout(size: size, range: settings.range)
32 let lineRight = layout.plotWidth - 2
33 let labelX = layout.plotWidth + 7
34
35 for midi in settings.range.low...settings.range.high {
36 let displayed = midi + settings.transpose
37 let accidental = Music.isAccidental(displayed)
38 let isC = Music.pitchClass(displayed) == 0
39 let yy = layout.y(Double(midi))
40
41 // Every semitone gets a line; sharps/flats are drawn fainter.
42 var line = Path()
43 line.move(to: CGPoint(x: 0, y: yy))
44 line.addLine(to: CGPoint(x: lineRight, y: yy))
45 let lineColor = accidental ? palette.accidentalLine : (isC ? palette.cLine : palette.naturalLine)
46 ctx.stroke(line, with: .color(lineColor), lineWidth: isC ? 1.4 : (accidental ? 0.75 : 1))
47
48 // Only naturals are labelled, to keep the gutter readable.
49 guard !accidental else { continue }
50 let color = isC ? palette.cLabel : palette.naturalLabel
51 let label = Text(Music.name(displayed, naming: settings.naming))
52 .font(.system(size: 11.5, weight: isC ? .bold : .semibold, design: .rounded))
53 .foregroundColor(color)
54 + Text(" \(Music.octave(displayed))")
55 .font(.system(size: 9.5, weight: isC ? .semibold : .regular, design: .rounded))
56 .foregroundColor(color.opacity(0.85))
57 ctx.draw(label, at: CGPoint(x: labelX, y: yy), anchor: .leading)
58 }
59 }
60 }
61}
62
63/// The moving parts: active band, pitch trace, current dot, and the note pill.
64private struct TraceCanvas: View {
65 @ObservedObject var engine: AudioEngine
66 @ObservedObject var settings: Settings
67 var palette: Palette
68
69 var body: some View {
70 TimelineView(.animation) { timeline in
71 // Capturing a per-frame value (the frame's timestamp) into the
72 // Canvas closure is what makes SwiftUI invalidate & redraw it every
73 // display frame — without it the Canvas is memoized and only
74 // repaints on geometry changes (e.g. a window resize).
75 let now = timeline.date.timeIntervalSinceReferenceDate + Self.clockOffset
76 Canvas { ctx, size in
77 let layout = PitchLayout(size: size, range: settings.range)
78 let visible = settings.visibleSeconds
79 let live = engine.currentLive()
80
81 drawBand(ctx: &ctx, size: size, layout: layout, live: live)
82 drawTrace(ctx: &ctx, layout: layout, now: now, visible: visible)
83 drawPill(ctx: &ctx, size: size, layout: layout, live: live)
84 }
85 }
86 }
87
88 /// Fixed offset between `Date` (reference-date epoch) and the
89 /// `CACurrentMediaTime` clock that sample timestamps use. Both advance at
90 /// real-time, so this difference is constant for the process lifetime.
91 private static let clockOffset: Double =
92 CACurrentMediaTime() - Date().timeIntervalSinceReferenceDate
93
94 // Thin solid coral line marking the nearest note — a couple of pixels
95 // thicker than a staff line.
96 private func drawBand(ctx: inout GraphicsContext, size: CGSize,
97 layout: PitchLayout, live: LivePitch?) {
98 guard let live else { return }
99 let nearest = Int(live.midi.rounded())
100 guard nearest >= settings.range.low, nearest <= settings.range.high else { return }
101 let yy = layout.y(Double(nearest))
102 let h: CGFloat = 3.5
103 let rect = CGRect(x: 0, y: yy - h / 2, width: size.width, height: h)
104 ctx.fill(Path(roundedRect: rect, cornerRadius: h / 2), with: .color(palette.pill))
105 }
106
107 // Thick, smoothed pitch line. Breaks into a new segment on a silence gap or
108 // an implausible pitch jump, so stray octave errors never draw as long
109 // vertical spikes.
110 private func drawTrace(ctx: inout GraphicsContext, layout: PitchLayout,
111 now: Double, visible: Double) {
112 let samples = engine.snapshot(since: now - visible)
113 guard samples.count > 1 else { return }
114
115 let gapLimit = 0.08 // seconds
116 let maxJump = 4.0 // semitones between adjacent ~5 ms frames
117 var run: [CGPoint] = []
118
119 func stroke() {
120 guard run.count > 1 else { run.removeAll(keepingCapacity: true); return }
121 var path = Path()
122 path.move(to: run[0])
123 // Quadratic smoothing through midpoints for a clean, hand-drawn line.
124 for i in 1..<run.count - 1 {
125 let mid = CGPoint(x: (run[i].x + run[i + 1].x) / 2,
126 y: (run[i].y + run[i + 1].y) / 2)
127 path.addQuadCurve(to: mid, control: run[i])
128 }
129 path.addLine(to: run[run.count - 1])
130 ctx.stroke(path, with: .color(palette.trace),
131 style: StrokeStyle(lineWidth: 4.2, lineCap: .round, lineJoin: .round))
132 run.removeAll(keepingCapacity: true)
133 }
134
135 var prev: PitchSample?
136 for s in samples {
137 if let p = prev, s.time - p.time > gapLimit || abs(s.midi - p.midi) > maxJump {
138 stroke()
139 }
140 run.append(CGPoint(x: layout.x(s.time, now: now, visible: visible), y: layout.y(s.midi)))
141 prev = s
142 }
143 stroke()
144
145 // Current dot at the leading edge (only while actively voiced).
146 if let last = samples.last, engine.currentLive() != nil {
147 let p = CGPoint(x: layout.x(last.time, now: now, visible: visible), y: layout.y(last.midi))
148 ctx.fill(Path(ellipseIn: CGRect(x: p.x - 4, y: p.y - 4, width: 8, height: 8)),
149 with: .color(palette.dot))
150 }
151 }
152
153 // Solid coral pill with the active note name, in the right-hand gutter.
154 private func drawPill(ctx: inout GraphicsContext, size: CGSize,
155 layout: PitchLayout, live: LivePitch?) {
156 guard let live else { return }
157 let nearest = Int(live.midi.rounded())
158 guard nearest >= settings.range.low, nearest <= settings.range.high else { return }
159 let displayed = nearest + settings.transpose
160 let yy = layout.y(Double(nearest))
161
162 let pillRect = CGRect(x: layout.plotWidth + 1, y: yy - 9,
163 width: layout.labelWidth - 3, height: 18)
164 ctx.fill(Path(roundedRect: pillRect, cornerRadius: 9), with: .color(palette.pill))
165
166 let label = Text(Music.name(displayed, naming: settings.naming))
167 .font(.system(size: 11.5, weight: .bold, design: .rounded))
168 .foregroundColor(palette.pillText)
169 + Text(" \(Music.octave(displayed))")
170 .font(.system(size: 9.5, weight: .semibold, design: .rounded))
171 .foregroundColor(palette.pillText.opacity(0.9))
172 ctx.draw(label, at: CGPoint(x: pillRect.minX + 6, y: yy), anchor: .leading)
173 }
174}
pitch/Sources/Pitch/Settings.swift created+18
...@@ -0,0 +1,18 @@
1import SwiftUI
2
3/// UI-side view settings driven by the top-bar dropdowns.
4final class Settings: ObservableObject {
5 @Published var transpose: Int = 0 // semitones added to displayed labels
6 @Published var naming: NoteNaming = .sharps
7 @Published var range: PitchRange = .default
8
9 /// How many seconds of history the graph shows.
10 @Published var visibleSeconds: Double = 6
11
12 static let transposeChoices = Array(-12...12)
13
14 func transposeLabel(_ n: Int) -> String {
15 if n == 0 { return "Transpose 0" }
16 return "Transpose \(n > 0 ? "+" : "")\(n)"
17 }
18}
pitch/Sources/Pitch/Theme.swift created+79
...@@ -0,0 +1,79 @@
1import SwiftUI
2
3/// A fully resolved colour set for one appearance (light or dark), styled after
4/// pitchreader.com: white/near-black staff, blue natural lines, a coral active
5/// band, and a heavy dark (or light) pitch trace.
6struct Palette {
7 var background: Color
8 var cLine: Color
9 var cLabel: Color
10 var naturalLine: Color
11 var naturalLabel: Color
12 var accidentalLine: Color
13 var band: Color
14 var pill: Color
15 var pillText: Color
16 var trace: Color
17 var dot: Color
18
19 static func make(_ scheme: ColorScheme) -> Palette {
20 scheme == .dark ? .dark : .light
21 }
22
23 static let light = Palette(
24 background: Color.white,
25 cLine: Color(red: 0.11, green: 0.12, blue: 0.14).opacity(0.9),
26 cLabel: Color(red: 0.10, green: 0.11, blue: 0.13),
27 naturalLine: Color(red: 0.42, green: 0.58, blue: 0.93).opacity(0.42),
28 naturalLabel: Color(red: 0.33, green: 0.50, blue: 0.90),
29 accidentalLine: Color(red: 0.55, green: 0.58, blue: 0.66).opacity(0.20),
30 band: Color(red: 0.95, green: 0.55, blue: 0.50).opacity(0.50),
31 pill: Color(red: 0.93, green: 0.49, blue: 0.45),
32 pillText: Color.white,
33 trace: Color(red: 0.20, green: 0.24, blue: 0.31),
34 dot: Color(red: 0.20, green: 0.24, blue: 0.31))
35
36 static let dark = Palette(
37 background: Color(red: 0.09, green: 0.10, blue: 0.12),
38 cLine: Color.white.opacity(0.85),
39 cLabel: Color.white.opacity(0.95),
40 naturalLine: Color(red: 0.46, green: 0.61, blue: 0.96).opacity(0.42),
41 naturalLabel: Color(red: 0.56, green: 0.69, blue: 0.99),
42 accidentalLine: Color.white.opacity(0.07),
43 band: Color(red: 0.90, green: 0.46, blue: 0.43).opacity(0.36),
44 pill: Color(red: 0.90, green: 0.47, blue: 0.44),
45 pillText: Color.white,
46 trace: Color(red: 0.93, green: 0.95, blue: 0.99),
47 dot: Color(red: 0.93, green: 0.95, blue: 0.99))
48}
49
50/// Shared plot geometry so the static grid layer and the animated trace layer
51/// map pitch → screen identically. Vertical axis is uniform per semitone —
52/// every semitone (naturals and sharps alike) gets an evenly-spaced row.
53struct PitchLayout {
54 let size: CGSize
55 let top: Double // MIDI at the top edge
56 let bot: Double // MIDI at the bottom edge
57 let labelWidth: CGFloat
58
59 init(size: CGSize, range: PitchRange, labelWidth: CGFloat = 44) {
60 self.size = size
61 self.top = Double(range.high) + 0.7
62 self.bot = Double(range.low) - 0.7
63 self.labelWidth = labelWidth
64 }
65
66 var plotWidth: CGFloat { size.width - labelWidth }
67
68 func y(_ midi: Double) -> CGFloat {
69 CGFloat((top - midi) / (top - bot)) * size.height
70 }
71
72 /// Screen x for a timestamp, with `now` at the right edge of the plot area.
73 func x(_ t: Double, now: Double, visible: Double) -> CGFloat {
74 plotWidth * CGFloat(1 - (now - t) / visible)
75 }
76
77 /// Height of one semitone row, in points.
78 var rowHeight: CGFloat { abs(y(0) - y(1)) }
79}
pitch/Sources/Pitch/TopBar.swift created+122
...@@ -0,0 +1,122 @@
1import SwiftUI
2import CoreAudio
3
4struct TopBar: View {
5 @ObservedObject var engine: AudioEngine
6 @ObservedObject var settings: Settings
7
8 var body: some View {
9 HStack(spacing: 14) {
10 // Microphone
11 Dropdown(icon: "mic.fill") {
12 Picker("", selection: micBinding) {
13 if engine.devices.isEmpty {
14 Text("No inputs").tag(AudioDeviceID?.none)
15 }
16 ForEach(engine.devices) { d in
17 Text(d.name).tag(AudioDeviceID?.some(d.id))
18 }
19 }
20 .labelsHidden()
21 }
22
23 // Transpose
24 Dropdown(icon: "arrow.up.arrow.down") {
25 Picker("", selection: $settings.transpose) {
26 ForEach(Settings.transposeChoices, id: \.self) { n in
27 Text(settings.transposeLabel(n)).tag(n)
28 }
29 }
30 .labelsHidden()
31 }
32
33 // Note labels
34 Dropdown(icon: "textformat") {
35 Picker("", selection: $settings.naming) {
36 ForEach(NoteNaming.allCases) { n in
37 Text(n.rawValue).tag(n)
38 }
39 }
40 .labelsHidden()
41 }
42
43 // Range
44 Dropdown(icon: "arrow.up.and.down") {
45 Picker("", selection: $settings.range) {
46 ForEach(PitchRange.presets) { r in
47 Text(r.name).tag(r)
48 }
49 }
50 .labelsHidden()
51 }
52
53 Spacer(minLength: 8)
54
55 StatusPill(engine: engine)
56 }
57 .padding(.horizontal, 16)
58 .padding(.vertical, 10)
59 .background(.bar)
60 .overlay(Rectangle().frame(height: 1).foregroundColor(Color(nsColor: .separatorColor)), alignment: .bottom)
61 }
62
63 private var micBinding: Binding<AudioDeviceID?> {
64 Binding(
65 get: { engine.selectedDeviceID },
66 set: { if let id = $0 { engine.selectDevice(id) } }
67 )
68 }
69}
70
71/// A pill-shaped container that gives each Picker a leading icon and a
72/// consistent dark style.
73private struct Dropdown<Content: View>: View {
74 let icon: String
75 @ViewBuilder var content: Content
76
77 var body: some View {
78 HStack(spacing: 6) {
79 Image(systemName: icon)
80 .font(.system(size: 11, weight: .semibold))
81 .foregroundColor(.secondary)
82 content
83 .tint(.primary)
84 }
85 .padding(.horizontal, 10)
86 .padding(.vertical, 5)
87 .background(
88 RoundedRectangle(cornerRadius: 8)
89 .fill(Color(nsColor: .controlBackgroundColor))
90 .overlay(RoundedRectangle(cornerRadius: 8).stroke(Color(nsColor: .separatorColor), lineWidth: 1))
91 )
92 }
93}
94
95private struct StatusPill: View {
96 @ObservedObject var engine: AudioEngine
97
98 var body: some View {
99 HStack(spacing: 7) {
100 Circle()
101 .fill(color)
102 .frame(width: 8, height: 8)
103 Text(text)
104 .font(.system(size: 11, weight: .medium))
105 .foregroundColor(.secondary)
106 .lineLimit(1)
107 }
108 .padding(.horizontal, 10)
109 .padding(.vertical, 5)
110 .help(engine.statusMessage ?? text)
111 }
112
113 private var color: Color {
114 if engine.permission == .denied { return .red }
115 return engine.isRunning ? Color(red: 0.3, green: 0.75, blue: 0.5) : .secondary
116 }
117
118 private var text: String {
119 if engine.permission == .denied { return "Mic denied" }
120 return engine.isRunning ? "Listening" : "Idle"
121 }
122}
pitch/build.sh created+103
...@@ -0,0 +1,103 @@
1#!/bin/sh
2set -e
3cd "$(dirname "$0")"
4
5CONFIG=release
6APP=Pitch.app
7BIN=Pitch
8
9# Signing identity. Override with: SIGN_ID="Some Identity" ./build.sh
10SIGN_ID="${SIGN_ID:-Pitch Dev}"
11LOGIN_KEYCHAIN="$HOME/Library/Keychains/login.keychain-db"
12
13# Create a self-signed code-signing identity named "$SIGN_ID" in the login
14# keychain, so codesign works on a machine that has no dev certificate.
15create_cert() {
16 name="$SIGN_ID"
17 echo "Creating self-signed code-signing identity \"$name\"…"
18 tmp=$(mktemp -d)
19 openssl req -x509 -newkey rsa:2048 -sha256 -days 3650 -nodes \
20 -keyout "$tmp/key.pem" -out "$tmp/cert.pem" \
21 -subj "/CN=$name" \
22 -addext "basicConstraints=critical,CA:false" \
23 -addext "keyUsage=critical,digitalSignature" \
24 -addext "extendedKeyUsage=critical,codeSigning" >/dev/null 2>&1
25 openssl pkcs12 -export -legacy -out "$tmp/id.p12" \
26 -inkey "$tmp/key.pem" -in "$tmp/cert.pem" -passout pass: >/dev/null 2>&1 \
27 || openssl pkcs12 -export -out "$tmp/id.p12" \
28 -inkey "$tmp/key.pem" -in "$tmp/cert.pem" -passout pass: >/dev/null 2>&1
29 security import "$tmp/id.p12" -k "$LOGIN_KEYCHAIN" -P "" \
30 -T /usr/bin/codesign -T /usr/bin/security
31 security add-trusted-cert -r trustRoot -p codeSign -k "$LOGIN_KEYCHAIN" \
32 "$tmp/cert.pem" >/dev/null 2>&1 || true
33 security set-key-partition-list -S apple-tool:,apple:,codesign: -s \
34 -k "" "$LOGIN_KEYCHAIN" >/dev/null 2>&1 || true
35 rm -rf "$tmp"
36}
37
38pick_identity() {
39 if security find-identity -v -p codesigning 2>/dev/null | grep -qF "\"$SIGN_ID\""; then
40 printf '%s' "$SIGN_ID"; return
41 fi
42 first=$(security find-identity -v -p codesigning 2>/dev/null \
43 | sed -n 's/^[[:space:]]*[0-9][0-9]*)[[:space:]]*[0-9A-Fa-f]*[[:space:]]*"\(.*\)"$/\1/p' \
44 | head -n1)
45 if [ -n "$first" ]; then
46 echo "Identity \"$SIGN_ID\" not found; using \"$first\"." >&2
47 printf '%s' "$first"; return
48 fi
49 echo "No code-signing identity found — using ad-hoc signing (-)." >&2
50 echo " Run './build.sh --create-cert' to make a reusable self-signed \"$SIGN_ID\"." >&2
51 printf '%s' "-"
52}
53
54if [ "$1" = "--create-cert" ]; then
55 create_cert
56 shift
57fi
58
59swift build -c "$CONFIG"
60
61rm -rf "$APP"
62mkdir -p "$APP/Contents/MacOS" "$APP/Contents/Resources"
63
64cp ".build/$CONFIG/$BIN" "$APP/Contents/MacOS/$BIN"
65
66cat > "$APP/Contents/Info.plist" <<'PLIST'
67<?xml version="1.0" encoding="UTF-8"?>
68<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
69<plist version="1.0">
70<dict>
71 <key>CFBundleName</key>
72 <string>Clover Pitch</string>
73 <key>CFBundleDisplayName</key>
74 <string>Clover Pitch</string>
75 <key>CFBundleExecutable</key>
76 <string>Pitch</string>
77 <key>CFBundleIdentifier</key>
78 <string>com.clover.Pitch</string>
79 <key>CFBundlePackageType</key>
80 <string>APPL</string>
81 <key>CFBundleShortVersionString</key>
82 <string>1.0</string>
83 <key>CFBundleVersion</key>
84 <string>1</string>
85 <key>LSMinimumSystemVersion</key>
86 <string>14.0</string>
87 <key>NSHighResolutionCapable</key>
88 <true/>
89 <key>NSPrincipalClass</key>
90 <string>NSApplication</string>
91 <key>NSMicrophoneUsageDescription</key>
92 <string>Pitch listens to your microphone to detect and visualise the pitch you sing or play. Audio is processed live and never recorded or sent anywhere.</string>
93</dict>
94</plist>
95PLIST
96
97printf 'APPL????' > "$APP/Contents/PkgInfo"
98
99IDENTITY=$(pick_identity)
100echo "Signing with: $IDENTITY"
101codesign --force --deep --sign "$IDENTITY" "$APP"
102
103echo "Built $APP"
pitch/readme.md created+52
...@@ -0,0 +1,52 @@
1# Clover Pitch
2
3A native macOS real-time pitch visualiser — a from-scratch clone of
4[pitchreader.com](https://pitchreader.com). It listens to a microphone, detects
5the fundamental frequency you sing or play, and scrolls it across a piano-roll
6timeline against note gridlines.
7
8Live only — there is no recording mode.
9
10## Features
11
12- **Live pitch-over-time graph** — a scrolling piano-roll where the last few
13 seconds of your pitch are drawn as a glowing trace, weighted by detection
14 confidence. Sharps/flats rows are shaded like piano keys; octave C lines are
15 emphasised and labelled.
16- **Active note readout** — a large current-note display with octave, exact Hz,
17 and a ±50-cent tuner needle ("in tune" when within 5¢).
18- **Top bar**
19 - **Microphone** — pick any CoreAudio input device; switching is live.
20 - **Transpose** — ±12 semitones; shifts every displayed label (like a capo).
21 - **Note labels** — Sharps, Flats, Solfège (fixed Do), or German (H/B).
22 - **Range** — vocal/instrument presets (Bass … Soprano, Wide, Full) that set
23 the visible vertical span.
24
25## How it works
26
27- `AudioEngine` captures mono audio via `AVAudioEngine`, down-mixes, and runs a
28 YIN pitch detector (`PitchDetector.swift`) at a 512-sample hop over a 2048
29 window. Detected samples land in a lock-guarded ring buffer.
30- `PitchGraphView` is a SwiftUI `Canvas` driven by `TimelineView(.animation)`;
31 each frame it snapshots the ring buffer and repaints the trace against the
32 note grid. The clock is `CACurrentMediaTime()` so the trace stays in sync
33 with the audio timeline.
34- Input-device enumeration/selection goes through the CoreAudio HAL
35 (`CoreAudioDevices.swift`), and the selected device is set on the input
36 AudioUnit via `kAudioOutputUnitProperty_CurrentDevice`.
37
38The detector is accurate to a fraction of a cent on synthetic tones across the
39full E2–A5 range (see the note-name test compiled from `PitchDetector.swift`).
40
41## Build & run
42
43```sh
44./run.sh # builds a signed Pitch.app and launches it
45./build.sh # just build Pitch.app
46```
47
48The app must be a signed `.app` bundle (not a bare binary) so the microphone
49TCC prompt appears — `NSMicrophoneUsageDescription` lives in the generated
50`Info.plist`. `build.sh` signs with the first available codesigning identity,
51or run `./build.sh --create-cert` once to mint a reusable self-signed
52`Pitch Dev` identity (same pattern as the Sequencer).
pitch/run.sh created+8
...@@ -0,0 +1,8 @@
1#!/bin/sh
2set -e
3cd "$(dirname "$0")"
4
5# Build a signed .app (needed so the microphone TCC prompt appears) then launch.
6SIGN_ID="${SIGN_ID:-Pitch Dev}" ./build.sh "$@"
7pkill -x Pitch 2>/dev/null || true
8open Pitch.app
readme.md+1
...@@ -7,3 +7,4 @@ The projects are independant, yet related:...@@ -7,3 +7,4 @@ The projects are independant, yet related:
7- [**Clover Control**](./control): Glue external input devices to creative software.7- [**Clover Control**](./control): Glue external input devices to creative software.
8- [**Clover Recorder**](./recorder): Capture multi-screen recordings.8- [**Clover Recorder**](./recorder): Capture multi-screen recordings.
9- [**Clover Sequencer**](./sequencer): Multi-track video synchronization.9- [**Clover Sequencer**](./sequencer): Multi-track video synchronization.
10- [**Clover Pitch**](./pitch): Realtime microphone pitch visualiser.
sequencer/CLAUDE.md+5-3
...@@ -16,10 +16,12 @@ There is no test target in Package.swift. Verification instead happens through t...@@ -16,10 +16,12 @@ There is no test target in Package.swift. Verification instead happens through t
16```sh16```sh
17swift run Sequencer --selftest <mediafile> # headless pipeline check (see Selftest.swift)17swift run Sequencer --selftest <mediafile> # headless pipeline check (see Selftest.swift)
18swift run Sequencer --uitest # offscreen TimelineView harness (see UITest.swift)18swift run Sequencer --uitest # offscreen TimelineView harness (see UITest.swift)
19swift run Sequencer --perftest <file.sq> # offscreen draw-timing harness (see PerfTest.swift)
19```20```
2021
21- `--selftest` exercises the real media pipeline against a file you pass in: ffprobe, filmstrip/waveform generation, chunk-proxy building, AVFoundation playability of the built proxy, and prints sample Fusion Lua output. Useful when touching `MediaPipeline.swift` or `ChunkedProxy.swift`.22- `--selftest` exercises the real media pipeline against a file you pass in: ffprobe, filmstrip/waveform generation, chunk-proxy building, AVFoundation playability of the built proxy, and prints sample Fusion Lua output. Useful when touching `MediaPipeline.swift` or `ChunkedProxy.swift`.
22- `--uitest` hosts the real `TimelineView` in an offscreen window and drives it with synthetic `NSEvent`s (move, trim, slip, stretch, box select, split, links, storyboard split, comp parsing, fades, plus file-format migration/round-trip — ~100 assertions, PASS/FAIL printer). Useful when touching timeline gesture code.23- `--uitest` hosts the real `TimelineView` in an offscreen window and drives it with synthetic `NSEvent`s (move, trim, slip, stretch, box select, split, links, storyboard split, comp parsing, fades, plus file-format migration/round-trip — ~100 assertions, PASS/FAIL printer). Useful when touching timeline gesture code.
24- `--perftest` loads a real `.sq` into an offscreen `TimelineView` and times `draw(_:)` while simulating a horizontal pan, at several zoom levels, in both full-detail and simplified (mid-scroll) modes, printing ms/frame and a per-section breakdown (`DrawProf`). Use it when touching timeline **drawing** — it's how the per-clip draw cost was found. The lesson baked into `TimelineView`: never build/tint an `NSImage(systemSymbolName:)` per clip/element per frame (SF-symbol tinting does a `lockFocus` composite) — bake once via `bakedSymbol(...)`. Clip labels and filmstrips are also gated to at-rest / wide-enough via the `isScrolling` simplified path.
2325
24Requires `ffmpeg`/`ffprobe` on PATH for anything touching media (probing, filmstrips, proxies).26Requires `ffmpeg`/`ffprobe` on PATH for anything touching media (probing, filmstrips, proxies).
2527
...@@ -57,10 +59,10 @@ Each open project is a `ProjectDocument: NSDocument` owning a `DocumentContext`...@@ -57,10 +59,10 @@ Each open project is a `ProjectDocument: NSDocument` owning a `DocumentContext`
57This is the most complex subsystem — a three-stage pipeline. `ChunkManager` and `PlaybackController`/`PlayerManager` are per-document (`ctx.chunks`, `ctx.playback`, `ctx.players`); `MediaPipeline` is the one global (a shared content-addressed cache):59This is the most complex subsystem — a three-stage pipeline. `ChunkManager` and `PlaybackController`/`PlayerManager` are per-document (`ctx.chunks`, `ctx.playback`, `ctx.players`); `MediaPipeline` is the one global (a shared content-addressed cache):
5860
591. **`MediaPipeline`** (`MediaPipeline.swift`) — wraps ffprobe/ffmpeg. Probes media, generates filmstrips (thumbnail strips) and waveforms async, LRU content-addressed cache (default 50GB). Cache key = `SHA256(path|size|mtime)`, so moved/remounted files with identical content still hit cache.611. **`MediaPipeline`** (`MediaPipeline.swift`) — wraps ffprobe/ffmpeg. Probes media, generates filmstrips (thumbnail strips) and waveforms async, LRU content-addressed cache (default 50GB). Cache key = `SHA256(path|size|mtime)`, so moved/remounted files with identical content still hit cache.
602. **`ChunkManager`** (`ChunkedProxy.swift`) — demand-driven **30-second ProRes Proxy chunks** instead of whole-file transcodes. Builds chunks around the playhead and on-timeline clip ranges, three priority queues (urgent/background/failed). Adaptive quality (4 resolution/fps tiers) steps down/up based on measured encode wall-time vs. realtime ratio, and distinguishes network vs. encode bottlenecks. Composes ready chunks + original-file fallback into an `AVComposition`, versioned so playback only swaps when it's a strict upgrade (avoids black-frame flashes).622. **`ChunkManager`** (`ChunkedProxy.swift`) — demand-driven **30-second ProRes Proxy chunks** instead of whole-file transcodes. **Build order is the whole game** (`updateDemand` → `nextJob` → `pump`): every playback tick recomputes a best-first `demand` list from the playhead, playback direction, and visibility — for each video clip in a look-ahead window it scores the proxy chunks its source range needs (coverage before sharpening, visible/focused tracks before hidden, nearer the playhead in the playback direction before farther) so the frame you're about to see is always built first. Chunks outside the window fall to the whole-project background fill (`ensure`). Adaptive quality (4 resolution/fps tiers) steps down/up based on measured encode wall-time vs. realtime ratio and distinguishes network vs. encode bottlenecks; **imminent** coverage (uncovered, just ahead, visible) builds at that adaptive realtime quality so it lands in time, everything else at the full preview-quality target. Composes ready chunks + original-file fallback into a **per-media** `AVComposition` (`composition(for:)`), versioned so playback only swaps on a strict upgrade. Per-media (not per-track) is deliberate: only the clip under the playhead needs building, so the current frame is ready fast — a whole-track composition would have to assemble the entire timeline before it could show anything, which is far too slow for a big multicut project.
613. **`PlaybackController`** + `PlayerManager` (`PlaybackController.swift`) — master clock anchored to `CACurrentMediaTime()`; all players chase this one authoritative time at 60Hz. Supports reverse and J/K/L shuttle speeds (±1/2/4/8/16/32/64). One `AVPlayer` per video track, one per overlapping audio clip (audio gets looser sync tolerance since originals live on NAS). Seeks coalesce while one is in-flight.633. **`PlaybackController`** + `PlayerManager` (`PlaybackController.swift`) — master clock anchored to `CACurrentMediaTime()`; all players chase this one authoritative time at 60Hz. Supports reverse and J/K/L shuttle speeds (±1/2/4/8/16/32/64). Each video track is a **`VideoTrackPlayer`: two `AVPlayer`s (front/back) for gapless cuts.** The front shows the clip under the playhead (`currentTime` == source time, chasing at `rate × clip.speed`); as a cut to a *different media* approaches (~1.5 s out) the back is prerolled to the next clip's first frame — loaded, decoded, parked, muted — and at the cut the roles flip. The viewer's cell holds two `AVPlayerLayer`s (one bound to each sub-player, stable) and just toggles which is visible, so the flip is a layer swap with no `replaceCurrentItem` black-frame gap. Same-media continuations don't buffer (the front keeps its item and seeks). `tick()` runs `sync()` (which does the flip) *before* posting `.playheadChanged`, so the viewer reflects the flip on the same frame. Standalone `.audio` clips get one `AVPlayer` per clip (looser sync tolerance since originals live on NAS); a clip's player is **prerolled ~1 s before its cut and kept running (silent — its fade gain is 0 until reached)**, so crossing an audio cut is a seamless volume handover rather than a cold start — see `audioLookahead`/`audioLinger` in `syncAudio`. Item swaps hold the fresh item silent (`rate = 0`) until the immediately-following `syncTime` seeks it to the live position, so a swap never blips wrong content from t=0. `.projectChanged` forces a hard resync only while **paused** — during playback the 60 Hz tick already tracks, so edits away from the playhead don't stutter. Seeks coalesce while one is in-flight.
6264
63When working on playback bugs, the mental model is: `MediaPipeline` produces cached derived assets → `ChunkManager` decides what to build and assembles compositions → `PlaybackController` drives players against those compositions on a shared clock.65When working on playback bugs, the mental model is: `MediaPipeline` produces cached derived assets → `ChunkManager` decides what to build (playhead/visibility-ordered) and assembles per-media compositions → `PlaybackController` drives the players (a double-buffered pair per video track, one per audio clip) against those compositions on a shared clock. Two levers make cuts gapless: the **build order** gets the next clip's proxy ready ahead of time, and the **double buffer** prerolls it and flips without an item swap.
6466
65### Fusion integration (`FusionExport.swift`, `FusionComps.swift`)67### Fusion integration (`FusionExport.swift`, `FusionComps.swift`)
6668
sequencer/Deltarune Ch5.sq/project.json created+11285
...@@ -0,0 +1,11285 @@
1{
2 "formatVersion" : 2,
3 "project" : {
4 "boardHeight" : 1080,
5 "boardWidth" : 1920,
6 "clips" : [
7 {
8 "duration" : 8.779661016949152,
9 "fadeIn" : 0,
10 "fadeOut" : 0,
11 "id" : "0856AA33-6A7E-4E96-BFB1-7B40DCC5C3E2",
12 "kind" : "video",
13 "linkId" : "E4929B8D-EE5B-4B9D-850D-B43F8A803E7A",
14 "mediaId" : "26CBEF77-6850-4D82-A5BD-A6A37587C040",
15 "muted" : false,
16 "newShot" : false,
17 "speed" : 1,
18 "srcIn" : 0.8026453438086703,
19 "start" : 0,
20 "track" : "v0"
21 },
22 {
23 "duration" : 8.779661016949152,
24 "fadeIn" : 0,
25 "fadeOut" : 0,
26 "id" : "F03A433A-DD0D-43A4-B2E0-77976661B8D5",
27 "kind" : "audio",
28 "linkId" : "E4929B8D-EE5B-4B9D-850D-B43F8A803E7A",
29 "mediaId" : "F676BA7D-A0E0-4603-AE13-B853D2F9F2BB",
30 "muted" : true,
31 "newShot" : false,
32 "speed" : 1,
33 "srcIn" : 0.9509002194553415,
34 "start" : 0,
35 "track" : "v1"
36 },
37 {
38 "duration" : 8.779661016949152,
39 "fadeIn" : 0,
40 "fadeOut" : 0,
41 "id" : "DDC04C1A-94A8-4F4D-9568-73F07B3E0304",
42 "kind" : "audio",
43 "linkId" : "E4929B8D-EE5B-4B9D-850D-B43F8A803E7A",
44 "mediaId" : "6FFA3786-8E51-4E69-A15D-D6A991C0CCAD",
45 "muted" : false,
46 "newShot" : false,
47 "speed" : 1,
48 "srcIn" : 1.2881355932203389,
49 "start" : 0,
50 "track" : "v2"
51 },
52 {
53 "duration" : 8.779661016949152,
54 "fadeIn" : 0,
55 "fadeOut" : 0,
56 "id" : "856D7E40-8EF3-4242-AB37-B26CBFD4B3F7",
57 "kind" : "video",
58 "linkId" : "E4929B8D-EE5B-4B9D-850D-B43F8A803E7A",
59 "mediaId" : "609E978E-5994-4757-A6C7-EAAE72818A49",
60 "muted" : false,
61 "newShot" : false,
62 "speed" : 1,
63 "srcIn" : 0.8603196774655755,
64 "start" : 0,
65 "track" : "v3"
66 },
67 {
68 "duration" : 8.779661016949152,
69 "fadeIn" : 0,
70 "fadeOut" : 0,
71 "id" : "ACBD774E-FC95-41F4-B5FB-037577828AD9",
72 "kind" : "video",
73 "linkId" : "E4929B8D-EE5B-4B9D-850D-B43F8A803E7A",
74 "mediaId" : "C0E05C14-2D32-4A55-9041-7A752A97F6B1",
75 "muted" : false,
76 "newShot" : false,
77 "speed" : 1,
78 "srcIn" : 0.8603078854665893,
79 "start" : 0,
80 "track" : "v4"
81 },
82 {
83 "duration" : 9.288135593220339,
84 "fadeIn" : 0,
85 "fadeOut" : 0,
86 "id" : "21E55168-059F-4CFC-AF14-FF43F7E7A9F8",
87 "kind" : "video",
88 "linkId" : "7ADB32D0-2D02-491A-8BF7-11F6A47A354E",
89 "mediaId" : "26CBEF77-6850-4D82-A5BD-A6A37587C040",
90 "muted" : false,
91 "newShot" : false,
92 "speed" : 1,
93 "srcIn" : 11.582306360757823,
94 "start" : 8.779661016949152,
95 "track" : "v0"
96 },
97 {
98 "duration" : 9.288135593220339,
99 "fadeIn" : 0,
100 "fadeOut" : 0,
101 "id" : "FA932A03-4AEE-428C-9593-EB3CFA09BEBE",
102 "kind" : "audio",
103 "linkId" : "7ADB32D0-2D02-491A-8BF7-11F6A47A354E",
104 "mediaId" : "F676BA7D-A0E0-4603-AE13-B853D2F9F2BB",
105 "muted" : true,
106 "newShot" : false,
107 "speed" : 1,
108 "srcIn" : 11.730561236404494,
109 "start" : 8.779661016949152,
110 "track" : "v1"
111 },
112 {
113 "duration" : 9.288135593220339,
114 "fadeIn" : 0,
115 "fadeOut" : 0,
116 "id" : "BDB5ABE0-71D2-457D-A7D4-21ADCC3B5743",
117 "kind" : "audio",
118 "linkId" : "7ADB32D0-2D02-491A-8BF7-11F6A47A354E",
119 "mediaId" : "6FFA3786-8E51-4E69-A15D-D6A991C0CCAD",
120 "muted" : false,
121 "newShot" : false,
122 "speed" : 1,
123 "srcIn" : 12.067796610169491,
124 "start" : 8.779661016949152,
125 "track" : "v2"
126 },
127 {
128 "duration" : 9.288135593220339,
129 "fadeIn" : 0,
130 "fadeOut" : 0,
131 "id" : "2A859930-C3F8-4E02-BD27-4CF36CF2138E",
132 "kind" : "video",
133 "linkId" : "7ADB32D0-2D02-491A-8BF7-11F6A47A354E",
134 "mediaId" : "609E978E-5994-4757-A6C7-EAAE72818A49",
135 "muted" : false,
136 "newShot" : false,
137 "speed" : 1,
138 "srcIn" : 11.639980694414728,
139 "start" : 8.779661016949152,
140 "track" : "v3"
141 },
142 {
143 "duration" : 9.288135593220339,
144 "fadeIn" : 0,
145 "fadeOut" : 0,
146 "id" : "197B76CD-FB1C-4DB5-BB64-B260CC9CC769",
147 "kind" : "video",
148 "linkId" : "7ADB32D0-2D02-491A-8BF7-11F6A47A354E",
149 "mediaId" : "C0E05C14-2D32-4A55-9041-7A752A97F6B1",
150 "muted" : false,
151 "newShot" : false,
152 "speed" : 1,
153 "srcIn" : 11.639968902415742,
154 "start" : 8.779661016949152,
155 "track" : "v4"
156 },
157 {
158 "duration" : 1.322033898305083,
159 "fadeIn" : 0,
160 "fadeOut" : 0,
161 "id" : "30FF8D20-D84E-4A9C-8303-F75C6D488959",
162 "kind" : "video",
163 "linkId" : "DE8705CE-9B40-487A-A252-50C469C56589",
164 "mediaId" : "26CBEF77-6850-4D82-A5BD-A6A37587C040",
165 "muted" : false,
166 "newShot" : false,
167 "speed" : 1,
168 "srcIn" : 86.02298432685951,
169 "start" : 18.067796610169495,
170 "track" : "v0"
171 },
172 {
173 "duration" : 1.322033898305083,
174 "fadeIn" : 0,
175 "fadeOut" : 0,
176 "id" : "28F8C52E-77E0-4886-9A6F-49E8524EFDB0",
177 "kind" : "audio",
178 "linkId" : "DE8705CE-9B40-487A-A252-50C469C56589",
179 "mediaId" : "F676BA7D-A0E0-4603-AE13-B853D2F9F2BB",
180 "muted" : true,
181 "newShot" : false,
182 "speed" : 1,
183 "srcIn" : 86.17123920250619,
184 "start" : 18.067796610169495,
185 "track" : "v1"
186 },
187 {
188 "duration" : 1.322033898305083,
189 "fadeIn" : 0,
190 "fadeOut" : 0,
191 "id" : "385FB864-B457-4585-A1E2-B07F0B398682",
192 "kind" : "audio",
193 "linkId" : "DE8705CE-9B40-487A-A252-50C469C56589",
194 "mediaId" : "6FFA3786-8E51-4E69-A15D-D6A991C0CCAD",
195 "muted" : false,
196 "newShot" : false,
197 "speed" : 1,
198 "srcIn" : 86.50847457627118,
199 "start" : 18.067796610169495,
200 "track" : "v2"
201 },
202 {
203 "duration" : 1.322033898305083,
204 "fadeIn" : 0,
205 "fadeOut" : 0,
206 "id" : "4703FBC9-8E06-4DE3-A460-19695096A67B",
207 "kind" : "video",
208 "linkId" : "DE8705CE-9B40-487A-A252-50C469C56589",
209 "mediaId" : "609E978E-5994-4757-A6C7-EAAE72818A49",
210 "muted" : false,
211 "newShot" : false,
212 "speed" : 1,
213 "srcIn" : 86.08065866051642,
214 "start" : 18.067796610169495,
215 "track" : "v3"
216 },
217 {
218 "duration" : 1.322033898305083,
219 "fadeIn" : 0,
220 "fadeOut" : 0,
221 "id" : "14297849-4D4F-41D8-A59A-15B5B1D60DF2",
222 "kind" : "video",
223 "linkId" : "DE8705CE-9B40-487A-A252-50C469C56589",
224 "mediaId" : "C0E05C14-2D32-4A55-9041-7A752A97F6B1",
225 "muted" : false,
226 "newShot" : false,
227 "speed" : 1,
228 "srcIn" : 86.08064686851743,
229 "start" : 18.067796610169495,
230 "track" : "v4"
231 },
232 {
233 "duration" : 1.1525423728813529,
234 "fadeIn" : 0,
235 "fadeOut" : 0,
236 "id" : "5EF423FA-AD82-4C89-8385-335325345015",
237 "kind" : "video",
238 "linkId" : "66157B6F-FF8D-490F-B510-26417942AA98",
239 "mediaId" : "26CBEF77-6850-4D82-A5BD-A6A37587C040",
240 "muted" : false,
241 "newShot" : false,
242 "speed" : 1,
243 "srcIn" : 113.98908602177477,
244 "start" : 19.389830508474578,
245 "track" : "v0"
246 },
247 {
248 "duration" : 1.1525423728813529,
249 "fadeIn" : 0,
250 "fadeOut" : 0,
251 "id" : "95F0F7BD-FA8B-48FE-A975-859CBDE2F60A",
252 "kind" : "audio",
253 "linkId" : "66157B6F-FF8D-490F-B510-26417942AA98",
254 "mediaId" : "F676BA7D-A0E0-4603-AE13-B853D2F9F2BB",
255 "muted" : true,
256 "newShot" : false,
257 "speed" : 1,
258 "srcIn" : 114.13734089742144,
259 "start" : 19.389830508474578,
260 "track" : "v1"
261 },
262 {
263 "duration" : 1.1525423728813529,
264 "fadeIn" : 0,
265 "fadeOut" : 0,
266 "id" : "236F5693-66F0-4DF2-9C6B-0FC10DC039A0",
267 "kind" : "audio",
268 "linkId" : "66157B6F-FF8D-490F-B510-26417942AA98",
269 "mediaId" : "6FFA3786-8E51-4E69-A15D-D6A991C0CCAD",
270 "muted" : false,
271 "newShot" : false,
272 "speed" : 1,
273 "srcIn" : 114.47457627118644,
274 "start" : 19.389830508474578,
275 "track" : "v2"
276 },
277 {
278 "duration" : 1.1525423728813529,
279 "fadeIn" : 0,
280 "fadeOut" : 0,
281 "id" : "08DF237F-434A-4ADB-B77C-F165BA3B9BAE",
282 "kind" : "video",
283 "linkId" : "66157B6F-FF8D-490F-B510-26417942AA98",
284 "mediaId" : "609E978E-5994-4757-A6C7-EAAE72818A49",
285 "muted" : false,
286 "newShot" : false,
287 "speed" : 1,
288 "srcIn" : 114.04676035543167,
289 "start" : 19.389830508474578,
290 "track" : "v3"
291 },
292 {
293 "duration" : 1.1525423728813529,
294 "fadeIn" : 0,
295 "fadeOut" : 0,
296 "id" : "6CEFB0C1-9FA6-4727-B291-AE95CBF63C1E",
297 "kind" : "video",
298 "linkId" : "66157B6F-FF8D-490F-B510-26417942AA98",
299 "mediaId" : "C0E05C14-2D32-4A55-9041-7A752A97F6B1",
300 "muted" : false,
301 "newShot" : false,
302 "speed" : 1,
303 "srcIn" : 114.04674856343269,
304 "start" : 19.389830508474578,
305 "track" : "v4"
306 },
307 {
308 "duration" : 5.220338983050851,
309 "fadeIn" : 0,
310 "fadeOut" : 0,
311 "id" : "CBC234E0-371D-4FDA-99B5-0BB7DE1737EB",
312 "kind" : "video",
313 "linkId" : "CEA52F0A-38E4-4F7B-AB96-117218501790",
314 "mediaId" : "26CBEF77-6850-4D82-A5BD-A6A37587C040",
315 "muted" : false,
316 "newShot" : false,
317 "speed" : 1,
318 "srcIn" : 397.9212894116052,
319 "start" : 20.54237288135596,
320 "track" : "v0"
321 },
322 {
323 "duration" : 5.220338983050851,
324 "fadeIn" : 0,
325 "fadeOut" : 0,
326 "id" : "A4F89301-A2DE-4597-AD9E-DC51F3507355",
327 "kind" : "audio",
328 "linkId" : "CEA52F0A-38E4-4F7B-AB96-117218501790",
329 "mediaId" : "F676BA7D-A0E0-4603-AE13-B853D2F9F2BB",
330 "muted" : true,
331 "newShot" : false,
332 "speed" : 1,
333 "srcIn" : 398.06954428725186,
334 "start" : 20.54237288135596,
335 "track" : "v1"
336 },
337 {
338 "duration" : 5.220338983050851,
339 "fadeIn" : 0,
340 "fadeOut" : 0,
341 "id" : "F00A71B2-649B-4BF6-9C0A-80270331C353",
342 "kind" : "audio",
343 "linkId" : "CEA52F0A-38E4-4F7B-AB96-117218501790",
344 "mediaId" : "6FFA3786-8E51-4E69-A15D-D6A991C0CCAD",
345 "muted" : false,
346 "newShot" : false,
347 "speed" : 1,
348 "srcIn" : 398.40677966101686,
349 "start" : 20.54237288135596,
350 "track" : "v2"
351 },
352 {
353 "duration" : 5.220338983050851,
354 "fadeIn" : 0,
355 "fadeOut" : 0,
356 "id" : "31A4F820-D7C2-4CAB-8A20-F52F615C6114",
357 "kind" : "video",
358 "linkId" : "CEA52F0A-38E4-4F7B-AB96-117218501790",
359 "mediaId" : "609E978E-5994-4757-A6C7-EAAE72818A49",
360 "muted" : false,
361 "newShot" : false,
362 "speed" : 1,
363 "srcIn" : 397.9789637452621,
364 "start" : 20.54237288135596,
365 "track" : "v3"
366 },
367 {
368 "duration" : 5.220338983050851,
369 "fadeIn" : 0,
370 "fadeOut" : 0,
371 "id" : "4B6EF408-0BAE-4495-885B-A0281AFD0B46",
372 "kind" : "video",
373 "linkId" : "CEA52F0A-38E4-4F7B-AB96-117218501790",
374 "mediaId" : "C0E05C14-2D32-4A55-9041-7A752A97F6B1",
375 "muted" : false,
376 "newShot" : false,
377 "speed" : 1,
378 "srcIn" : 397.9789519532631,
379 "start" : 20.54237288135596,
380 "track" : "v4"
381 },
382 {
383 "duration" : 14.57627118644065,
384 "fadeIn" : 0,
385 "fadeOut" : 0,
386 "id" : "B386A5EC-7B75-421C-941E-9A2E8FC4C303",
387 "kind" : "video",
388 "linkId" : "3688DE28-A2CB-4ED5-9666-9772A7FAF5FD",
389 "mediaId" : "26CBEF77-6850-4D82-A5BD-A6A37587C040",
390 "muted" : false,
391 "newShot" : false,
392 "speed" : 1,
393 "srcIn" : 422.73484873363907,
394 "start" : 25.76271186440681,
395 "track" : "v0"
396 },
397 {
398 "duration" : 14.57627118644065,
399 "fadeIn" : 0,
400 "fadeOut" : 0,
401 "id" : "78D95643-9E92-4665-A49E-1640916F222F",
402 "kind" : "audio",
403 "linkId" : "3688DE28-A2CB-4ED5-9666-9772A7FAF5FD",
404 "mediaId" : "F676BA7D-A0E0-4603-AE13-B853D2F9F2BB",
405 "muted" : true,
406 "newShot" : false,
407 "speed" : 1,
408 "srcIn" : 422.88310360928574,
409 "start" : 25.76271186440681,
410 "track" : "v1"
411 },
412 {
413 "duration" : 14.57627118644065,
414 "fadeIn" : 0,
415 "fadeOut" : 0,
416 "id" : "3EC46637-04E5-407D-90BD-BB290FB532C6",
417 "kind" : "audio",
418 "linkId" : "3688DE28-A2CB-4ED5-9666-9772A7FAF5FD",
419 "mediaId" : "6FFA3786-8E51-4E69-A15D-D6A991C0CCAD",
420 "muted" : false,
421 "newShot" : false,
422 "speed" : 1,
423 "srcIn" : 423.22033898305074,
424 "start" : 25.76271186440681,
425 "track" : "v2"
426 },
427 {
428 "duration" : 14.57627118644065,
429 "fadeIn" : 0,
430 "fadeOut" : 0,
431 "id" : "54D04272-5607-4E88-BBAB-A50A9FEAA953",
432 "kind" : "video",
433 "linkId" : "3688DE28-A2CB-4ED5-9666-9772A7FAF5FD",
434 "mediaId" : "609E978E-5994-4757-A6C7-EAAE72818A49",
435 "muted" : false,
436 "newShot" : false,
437 "speed" : 1,
438 "srcIn" : 422.792523067296,
439 "start" : 25.76271186440681,
440 "track" : "v3"
441 },
442 {
443 "duration" : 14.57627118644065,
444 "fadeIn" : 0,
445 "fadeOut" : 0,
446 "id" : "7B34B91A-3E53-4B21-A7C7-22172D7442EA",
447 "kind" : "video",
448 "linkId" : "3688DE28-A2CB-4ED5-9666-9772A7FAF5FD",
449 "mediaId" : "C0E05C14-2D32-4A55-9041-7A752A97F6B1",
450 "muted" : false,
451 "newShot" : false,
452 "speed" : 1,
453 "srcIn" : 422.792511275297,
454 "start" : 25.76271186440681,
455 "track" : "v4"
456 },
457 {
458 "duration" : 10.644067796610166,
459 "fadeIn" : 0,
460 "fadeOut" : 0,
461 "id" : "3EDF6E35-1C81-4706-878F-E685962438E7",
462 "kind" : "video",
463 "linkId" : "E6380C0A-8BCB-4E01-A3FF-4B6CE609EBA7",
464 "mediaId" : "26CBEF77-6850-4D82-A5BD-A6A37587C040",
465 "muted" : false,
466 "newShot" : false,
467 "speed" : 1,
468 "srcIn" : 447.0399334794017,
469 "start" : 40.33898305084746,
470 "track" : "v0"
471 },
472 {
473 "duration" : 10.644067796610166,
474 "fadeIn" : 0,
475 "fadeOut" : 0,
476 "id" : "5E3BFA57-DA8E-47B2-969D-026F31AD2A3C",
477 "kind" : "audio",
478 "linkId" : "E6380C0A-8BCB-4E01-A3FF-4B6CE609EBA7",
479 "mediaId" : "F676BA7D-A0E0-4603-AE13-B853D2F9F2BB",
480 "muted" : true,
481 "newShot" : false,
482 "speed" : 1,
483 "srcIn" : 447.1881883550484,
484 "start" : 40.33898305084746,
485 "track" : "v1"
486 },
487 {
488 "duration" : 10.644067796610166,
489 "fadeIn" : 0,
490 "fadeOut" : 0,
491 "id" : "8E2AD73C-7F9E-4F46-8D04-EF9087EE690A",
492 "kind" : "audio",
493 "linkId" : "E6380C0A-8BCB-4E01-A3FF-4B6CE609EBA7",
494 "mediaId" : "6FFA3786-8E51-4E69-A15D-D6A991C0CCAD",
495 "muted" : false,
496 "newShot" : false,
497 "speed" : 1,
498 "srcIn" : 447.5254237288134,
499 "start" : 40.33898305084746,
500 "track" : "v2"
501 },
502 {
503 "duration" : 10.644067796610166,
504 "fadeIn" : 0,
505 "fadeOut" : 0,
506 "id" : "F54DE68B-6E96-4BA9-BEB6-81E4B984892C",
507 "kind" : "video",
508 "linkId" : "E6380C0A-8BCB-4E01-A3FF-4B6CE609EBA7",
509 "mediaId" : "609E978E-5994-4757-A6C7-EAAE72818A49",
510 "muted" : false,
511 "newShot" : false,
512 "speed" : 1,
513 "srcIn" : 447.09760781305863,
514 "start" : 40.33898305084746,
515 "track" : "v3"
516 },
517 {
518 "duration" : 10.644067796610166,
519 "fadeIn" : 0,
520 "fadeOut" : 0,
521 "id" : "C77A294D-6278-4BAD-8BC5-F7BC3C372A00",
522 "kind" : "video",
523 "linkId" : "E6380C0A-8BCB-4E01-A3FF-4B6CE609EBA7",
524 "mediaId" : "C0E05C14-2D32-4A55-9041-7A752A97F6B1",
525 "muted" : false,
526 "newShot" : false,
527 "speed" : 1,
528 "srcIn" : 447.09759602105964,
529 "start" : 40.33898305084746,
530 "track" : "v4"
531 },
532 {
533 "duration" : 9.694915254237287,
534 "fadeIn" : 0,
535 "fadeOut" : 0,
536 "id" : "BA4DCFDD-E47E-4485-86C7-5D2F91DAD82A",
537 "kind" : "video",
538 "linkId" : "6CC9888B-E11F-41E5-BAC2-A15C7D015557",
539 "mediaId" : "26CBEF77-6850-4D82-A5BD-A6A37587C040",
540 "muted" : false,
541 "newShot" : false,
542 "speed" : 1,
543 "srcIn" : 495.4128148353339,
544 "start" : 50.983050847457626,
545 "track" : "v0"
546 },
547 {
548 "duration" : 9.694915254237287,
549 "fadeIn" : 0,
550 "fadeOut" : 0,
551 "id" : "F7D2760F-4578-4319-9C36-40A5E0C0554A",
552 "kind" : "audio",
553 "linkId" : "6CC9888B-E11F-41E5-BAC2-A15C7D015557",
554 "mediaId" : "F676BA7D-A0E0-4603-AE13-B853D2F9F2BB",
555 "muted" : true,
556 "newShot" : false,
557 "speed" : 1,
558 "srcIn" : 495.5610697109806,
559 "start" : 50.983050847457626,
560 "track" : "v1"
561 },
562 {
563 "duration" : 9.694915254237287,
564 "fadeIn" : 0,
565 "fadeOut" : 0,
566 "id" : "344797CD-1399-4A2F-B5D4-ED0DAFF921B2",
567 "kind" : "audio",
568 "linkId" : "6CC9888B-E11F-41E5-BAC2-A15C7D015557",
569 "mediaId" : "6FFA3786-8E51-4E69-A15D-D6A991C0CCAD",
570 "muted" : false,
571 "newShot" : false,
572 "speed" : 1,
573 "srcIn" : 495.8983050847456,
574 "start" : 50.983050847457626,
575 "track" : "v2"
576 },
577 {
578 "duration" : 9.694915254237287,
579 "fadeIn" : 0,
580 "fadeOut" : 0,
581 "id" : "436EE031-3821-460A-B1E6-362C6AC7DD15",
582 "kind" : "video",
583 "linkId" : "6CC9888B-E11F-41E5-BAC2-A15C7D015557",
584 "mediaId" : "609E978E-5994-4757-A6C7-EAAE72818A49",
585 "muted" : false,
586 "newShot" : false,
587 "speed" : 1,
588 "srcIn" : 495.4704891689908,
589 "start" : 50.983050847457626,
590 "track" : "v3"
591 },
592 {
593 "duration" : 9.694915254237287,
594 "fadeIn" : 0,
595 "fadeOut" : 0,
596 "id" : "DA7C94D5-26B6-465A-958E-DA029F1CEC3F",
597 "kind" : "video",
598 "linkId" : "6CC9888B-E11F-41E5-BAC2-A15C7D015557",
599 "mediaId" : "C0E05C14-2D32-4A55-9041-7A752A97F6B1",
600 "muted" : false,
601 "newShot" : false,
602 "speed" : 1,
603 "srcIn" : 495.4704773769918,
604 "start" : 50.983050847457626,
605 "track" : "v4"
606 },
607 {
608 "duration" : 12.440677966101696,
609 "fadeIn" : 0,
610 "fadeOut" : 0,
611 "id" : "EF8B18B2-7BEB-4520-9C17-903C1A223C06",
612 "kind" : "video",
613 "linkId" : "8D7F9D29-68E0-4E62-B7D7-B149575B3269",
614 "mediaId" : "26CBEF77-6850-4D82-A5BD-A6A37587C040",
615 "muted" : false,
616 "newShot" : false,
617 "speed" : 1,
618 "srcIn" : 511.0399334794017,
619 "start" : 60.67796610169491,
620 "track" : "v0"
621 },
622 {
623 "duration" : 12.440677966101696,
624 "fadeIn" : 0,
625 "fadeOut" : 0,
626 "id" : "65C8245D-4AA2-4534-BDAF-3D2841DC3F70",
627 "kind" : "audio",
628 "linkId" : "8D7F9D29-68E0-4E62-B7D7-B149575B3269",
629 "mediaId" : "F676BA7D-A0E0-4603-AE13-B853D2F9F2BB",
630 "muted" : true,
631 "newShot" : false,
632 "speed" : 1,
633 "srcIn" : 511.1881883550484,
634 "start" : 60.67796610169491,
635 "track" : "v1"
636 },
637 {
638 "duration" : 12.440677966101696,
639 "fadeIn" : 0,
640 "fadeOut" : 0,
641 "id" : "8ECF7044-2C74-43E6-9219-036DB453AA8E",
642 "kind" : "audio",
643 "linkId" : "8D7F9D29-68E0-4E62-B7D7-B149575B3269",
644 "mediaId" : "6FFA3786-8E51-4E69-A15D-D6A991C0CCAD",
645 "muted" : false,
646 "newShot" : false,
647 "speed" : 1,
648 "srcIn" : 511.5254237288134,
649 "start" : 60.67796610169491,
650 "track" : "v2"
651 },
652 {
653 "duration" : 12.440677966101696,
654 "fadeIn" : 0,
655 "fadeOut" : 0,
656 "id" : "E0691830-C2E3-4692-A443-C96E79034416",
657 "kind" : "video",
658 "linkId" : "8D7F9D29-68E0-4E62-B7D7-B149575B3269",
659 "mediaId" : "609E978E-5994-4757-A6C7-EAAE72818A49",
660 "muted" : false,
661 "newShot" : false,
662 "speed" : 1,
663 "srcIn" : 511.09760781305863,
664 "start" : 60.67796610169491,
665 "track" : "v3"
666 },
667 {
668 "duration" : 12.440677966101696,
669 "fadeIn" : 0,
670 "fadeOut" : 0,
671 "id" : "1DF28AA1-85FC-4AA6-8BCC-86CF38B06C1B",
672 "kind" : "video",
673 "linkId" : "8D7F9D29-68E0-4E62-B7D7-B149575B3269",
674 "mediaId" : "C0E05C14-2D32-4A55-9041-7A752A97F6B1",
675 "muted" : false,
676 "newShot" : false,
677 "speed" : 1,
678 "srcIn" : 511.09759602105964,
679 "start" : 60.67796610169491,
680 "track" : "v4"
681 },
682 {
683 "duration" : 2.0677966101694807,
684 "fadeIn" : 0,
685 "fadeOut" : 0,
686 "id" : "4937BF52-96D7-4AF0-B222-22E27B797A5C",
687 "kind" : "video",
688 "linkId" : "E5D93442-8B82-4040-8E5F-BD717FD75859",
689 "mediaId" : "26CBEF77-6850-4D82-A5BD-A6A37587C040",
690 "muted" : false,
691 "newShot" : false,
692 "speed" : 1,
693 "srcIn" : 539.9212894116051,
694 "start" : 73.11864406779661,
695 "track" : "v0"
696 },
697 {
698 "duration" : 2.0677966101694807,
699 "fadeIn" : 0,
700 "fadeOut" : 0,
701 "id" : "16FFB49E-AD0E-430F-BC1E-0E649D37B469",
702 "kind" : "audio",
703 "linkId" : "E5D93442-8B82-4040-8E5F-BD717FD75859",
704 "mediaId" : "F676BA7D-A0E0-4603-AE13-B853D2F9F2BB",
705 "muted" : true,
706 "newShot" : false,
707 "speed" : 1,
708 "srcIn" : 540.0695442872518,
709 "start" : 73.11864406779661,
710 "track" : "v1"
711 },
712 {
713 "duration" : 2.0677966101694807,
714 "fadeIn" : 0,
715 "fadeOut" : 0,
716 "id" : "3772DE62-3FC2-491B-9DBC-922F6DDC5BB1",
717 "kind" : "audio",
718 "linkId" : "E5D93442-8B82-4040-8E5F-BD717FD75859",
719 "mediaId" : "6FFA3786-8E51-4E69-A15D-D6A991C0CCAD",
720 "muted" : false,
721 "newShot" : false,
722 "speed" : 1,
723 "srcIn" : 540.4067796610168,
724 "start" : 73.11864406779661,
725 "track" : "v2"
726 },
727 {
728 "duration" : 2.0677966101694807,
729 "fadeIn" : 0,
730 "fadeOut" : 0,
731 "id" : "4A62F7EC-EFF6-4CE8-82FA-024FC1AE5421",
732 "kind" : "video",
733 "linkId" : "E5D93442-8B82-4040-8E5F-BD717FD75859",
734 "mediaId" : "609E978E-5994-4757-A6C7-EAAE72818A49",
735 "muted" : false,
736 "newShot" : false,
737 "speed" : 1,
738 "srcIn" : 539.978963745262,
739 "start" : 73.11864406779661,
740 "track" : "v3"
741 },
742 {
743 "duration" : 2.0677966101694807,
744 "fadeIn" : 0,
745 "fadeOut" : 0,
746 "id" : "7E5889B3-52E4-48AD-8E76-DCAC57E2F26C",
747 "kind" : "video",
748 "linkId" : "E5D93442-8B82-4040-8E5F-BD717FD75859",
749 "mediaId" : "C0E05C14-2D32-4A55-9041-7A752A97F6B1",
750 "muted" : false,
751 "newShot" : false,
752 "speed" : 1,
753 "srcIn" : 539.978951953263,
754 "start" : 73.11864406779661,
755 "track" : "v4"
756 },
757 {
758 "duration" : 4.542372881355931,
759 "fadeIn" : 0,
760 "fadeOut" : 0,
761 "id" : "779C851A-2F3C-4B84-8EDB-99C3D657B311",
762 "kind" : "video",
763 "linkId" : "DCA0DA82-D677-4F94-8ECD-EC2EE408A444",
764 "mediaId" : "26CBEF77-6850-4D82-A5BD-A6A37587C040",
765 "muted" : false,
766 "newShot" : false,
767 "speed" : 1,
768 "srcIn" : 552.0229843268594,
769 "start" : 75.18644067796609,
770 "track" : "v0"
771 },
772 {
773 "duration" : 4.542372881355931,
774 "fadeIn" : 0,
775 "fadeOut" : 0,
776 "id" : "6897606B-DA0A-4825-B6DB-325E170FC9B9",
777 "kind" : "audio",
778 "linkId" : "DCA0DA82-D677-4F94-8ECD-EC2EE408A444",
779 "mediaId" : "F676BA7D-A0E0-4603-AE13-B853D2F9F2BB",
780 "muted" : true,
781 "newShot" : false,
782 "speed" : 1,
783 "srcIn" : 552.1712392025061,
784 "start" : 75.18644067796609,
785 "track" : "v1"
786 },
787 {
788 "duration" : 4.542372881355931,
789 "fadeIn" : 0,
790 "fadeOut" : 0,
791 "id" : "07934764-AD42-4089-80B6-B244015447CF",
792 "kind" : "audio",
793 "linkId" : "DCA0DA82-D677-4F94-8ECD-EC2EE408A444",
794 "mediaId" : "6FFA3786-8E51-4E69-A15D-D6A991C0CCAD",
795 "muted" : false,
796 "newShot" : false,
797 "speed" : 1,
798 "srcIn" : 552.508474576271,
799 "start" : 75.18644067796609,
800 "track" : "v2"
801 },
802 {
803 "duration" : 4.542372881355931,
804 "fadeIn" : 0,
805 "fadeOut" : 0,
806 "id" : "EE2670C2-1AAA-40FC-A411-8CE33185992E",
807 "kind" : "video",
808 "linkId" : "DCA0DA82-D677-4F94-8ECD-EC2EE408A444",
809 "mediaId" : "609E978E-5994-4757-A6C7-EAAE72818A49",
810 "muted" : false,
811 "newShot" : false,
812 "speed" : 1,
813 "srcIn" : 552.0806586605163,
814 "start" : 75.18644067796609,
815 "track" : "v3"
816 },
817 {
818 "duration" : 4.542372881355931,
819 "fadeIn" : 0,
820 "fadeOut" : 0,
821 "id" : "83DC8C97-0117-495D-AB6F-488575028DF6",
822 "kind" : "video",
823 "linkId" : "DCA0DA82-D677-4F94-8ECD-EC2EE408A444",
824 "mediaId" : "C0E05C14-2D32-4A55-9041-7A752A97F6B1",
825 "muted" : false,
826 "newShot" : false,
827 "speed" : 1,
828 "srcIn" : 552.0806468685173,
829 "start" : 75.18644067796609,
830 "track" : "v4"
831 },
832 {
833 "duration" : 2.542372881355945,
834 "fadeIn" : 0,
835 "fadeOut" : 0,
836 "id" : "75DD8465-3E74-4576-A287-6F0B7A25885F",
837 "kind" : "video",
838 "linkId" : "B3514666-D79A-43F4-96AF-77F14857D9AE",
839 "mediaId" : "26CBEF77-6850-4D82-A5BD-A6A37587C040",
840 "muted" : false,
841 "newShot" : false,
842 "speed" : 1,
843 "srcIn" : 565.1077300895713,
844 "start" : 79.76271186440677,
845 "track" : "v0"
846 },
847 {
848 "duration" : 2.542372881355945,
849 "fadeIn" : 0,
850 "fadeOut" : 0,
851 "id" : "B5BC5C0D-5C8F-4616-954E-F0544734C4CC",
852 "kind" : "audio",
853 "linkId" : "B3514666-D79A-43F4-96AF-77F14857D9AE",
854 "mediaId" : "F676BA7D-A0E0-4603-AE13-B853D2F9F2BB",
855 "muted" : true,
856 "newShot" : false,
857 "speed" : 1,
858 "srcIn" : 565.255984965218,
859 "start" : 79.76271186440677,
860 "track" : "v1"
861 },
862 {
863 "duration" : 2.542372881355945,
864 "fadeIn" : 0,
865 "fadeOut" : 0,
866 "id" : "743266F1-8759-428D-8500-328A33B14EE7",
867 "kind" : "audio",
868 "linkId" : "B3514666-D79A-43F4-96AF-77F14857D9AE",
869 "mediaId" : "6FFA3786-8E51-4E69-A15D-D6A991C0CCAD",
870 "muted" : false,
871 "newShot" : false,
872 "speed" : 1,
873 "srcIn" : 565.593220338983,
874 "start" : 79.76271186440677,
875 "track" : "v2"
876 },
877 {
878 "duration" : 2.542372881355945,
879 "fadeIn" : 0,
880 "fadeOut" : 0,
881 "id" : "99C8EB5C-633C-407A-B29D-0F563C4A2A11",
882 "kind" : "video",
883 "linkId" : "B3514666-D79A-43F4-96AF-77F14857D9AE",
884 "mediaId" : "609E978E-5994-4757-A6C7-EAAE72818A49",
885 "muted" : false,
886 "newShot" : false,
887 "speed" : 1,
888 "srcIn" : 565.1654044232282,
889 "start" : 79.76271186440677,
890 "track" : "v3"
891 },
892 {
893 "duration" : 2.542372881355945,
894 "fadeIn" : 0,
895 "fadeOut" : 0,
896 "id" : "F5A5A67A-1C13-4920-94A3-D63379305184",
897 "kind" : "video",
898 "linkId" : "B3514666-D79A-43F4-96AF-77F14857D9AE",
899 "mediaId" : "C0E05C14-2D32-4A55-9041-7A752A97F6B1",
900 "muted" : false,
901 "newShot" : false,
902 "speed" : 1,
903 "srcIn" : 565.1653926312292,
904 "start" : 79.76271186440677,
905 "track" : "v4"
906 },
907 {
908 "duration" : 7.457627118644069,
909 "fadeIn" : 0,
910 "fadeOut" : 0,
911 "id" : "C4F9A637-30B0-4050-B75E-6C87C85699A8",
912 "kind" : "video",
913 "linkId" : "E6C60A60-B509-4E76-A1F1-797378C6C7EF",
914 "mediaId" : "26CBEF77-6850-4D82-A5BD-A6A37587C040",
915 "muted" : false,
916 "newShot" : false,
917 "speed" : 1,
918 "srcIn" : 792.0229843268595,
919 "start" : 82.30508474576271,
920 "track" : "v0"
921 },
922 {
923 "duration" : 7.457627118644069,
924 "fadeIn" : 0,
925 "fadeOut" : 0,
926 "id" : "D0EF66D9-DF73-4099-BAA1-CD7E3DC03441",
927 "kind" : "audio",
928 "linkId" : "E6C60A60-B509-4E76-A1F1-797378C6C7EF",
929 "mediaId" : "F676BA7D-A0E0-4603-AE13-B853D2F9F2BB",
930 "muted" : true,
931 "newShot" : false,
932 "speed" : 1,
933 "srcIn" : 792.1712392025062,
934 "start" : 82.30508474576271,
935 "track" : "v1"
936 },
937 {
938 "duration" : 7.457627118644069,
939 "fadeIn" : 0,
940 "fadeOut" : 0,
941 "id" : "FACBA48B-CB80-4E8C-AAF6-55705F37FDB8",
942 "kind" : "audio",
943 "linkId" : "E6C60A60-B509-4E76-A1F1-797378C6C7EF",
944 "mediaId" : "6FFA3786-8E51-4E69-A15D-D6A991C0CCAD",
945 "muted" : false,
946 "newShot" : false,
947 "speed" : 1,
948 "srcIn" : 792.5084745762712,
949 "start" : 82.30508474576271,
950 "track" : "v2"
951 },
952 {
953 "duration" : 7.457627118644069,
954 "fadeIn" : 0,
955 "fadeOut" : 0,
956 "id" : "24F56A9C-9D34-412D-AAFA-816D98E1BF4C",
957 "kind" : "video",
958 "linkId" : "E6C60A60-B509-4E76-A1F1-797378C6C7EF",
959 "mediaId" : "609E978E-5994-4757-A6C7-EAAE72818A49",
960 "muted" : false,
961 "newShot" : false,
962 "speed" : 1,
963 "srcIn" : 792.0806586605164,
964 "start" : 82.30508474576271,
965 "track" : "v3"
966 },
967 {
968 "duration" : 7.457627118644069,
969 "fadeIn" : 0,
970 "fadeOut" : 0,
971 "id" : "E8BDB4FD-1478-46C9-B2B9-4A995785C804",
972 "kind" : "video",
973 "linkId" : "E6C60A60-B509-4E76-A1F1-797378C6C7EF",
974 "mediaId" : "C0E05C14-2D32-4A55-9041-7A752A97F6B1",
975 "muted" : false,
976 "newShot" : false,
977 "speed" : 1,
978 "srcIn" : 792.0806468685174,
979 "start" : 82.30508474576271,
980 "track" : "v4"
981 },
982 {
983 "duration" : 5.7966101694915295,
984 "fadeIn" : 0,
985 "fadeOut" : 0,
986 "id" : "9F719822-EE9F-4D98-AE6F-95832502501D",
987 "kind" : "video",
988 "linkId" : "33DE57F6-49E9-47DA-971D-A7E3824D9B47",
989 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
990 "muted" : false,
991 "newShot" : false,
992 "speed" : 1,
993 "srcIn" : 6.203389830508485,
994 "start" : 89.76271186440678,
995 "track" : "v0"
996 },
997 {
998 "duration" : 5.7966101694915295,
999 "fadeIn" : 0,
1000 "fadeOut" : 0,
1001 "id" : "4D903E13-8AAE-4EED-9E78-EB2D6201EE84",
1002 "kind" : "audio",
1003 "linkId" : "33DE57F6-49E9-47DA-971D-A7E3824D9B47",
1004 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
1005 "muted" : true,
1006 "newShot" : false,
1007 "speed" : 1,
1008 "srcIn" : 6.1195182891674165,
1009 "start" : 89.76271186440678,
1010 "track" : "v1"
1011 },
1012 {
1013 "duration" : 5.7966101694915295,
1014 "fadeIn" : 0,
1015 "fadeOut" : 0,
1016 "id" : "0A6A0000-76C4-4F4F-A5EC-B9DB5AA10EE5",
1017 "kind" : "audio",
1018 "linkId" : "33DE57F6-49E9-47DA-971D-A7E3824D9B47",
1019 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
1020 "muted" : false,
1021 "newShot" : false,
1022 "speed" : 1,
1023 "srcIn" : 6.166194592398341,
1024 "start" : 89.76271186440678,
1025 "track" : "v2"
1026 },
1027 {
1028 "duration" : 5.7966101694915295,
1029 "fadeIn" : 0,
1030 "fadeOut" : 0,
1031 "id" : "91FC4279-5D23-44A0-BA93-5BC8CFB0775C",
1032 "kind" : "video",
1033 "linkId" : "33DE57F6-49E9-47DA-971D-A7E3824D9B47",
1034 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
1035 "muted" : false,
1036 "newShot" : false,
1037 "speed" : 1,
1038 "srcIn" : 6.029587456170219,
1039 "start" : 89.76271186440678,
1040 "track" : "v3"
1041 },
1042 {
1043 "duration" : 5.7966101694915295,
1044 "fadeIn" : 0,
1045 "fadeOut" : 0,
1046 "id" : "51B251E0-3404-4CAC-B18A-37A29B9BF96B",
1047 "kind" : "video",
1048 "linkId" : "33DE57F6-49E9-47DA-971D-A7E3824D9B47",
1049 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
1050 "muted" : false,
1051 "newShot" : false,
1052 "speed" : 1,
1053 "srcIn" : 6.029582872171403,
1054 "start" : 89.76271186440678,
1055 "track" : "v4"
1056 },
1057 {
1058 "duration" : 18.847457627118715,
1059 "fadeIn" : 0,
1060 "fadeOut" : 0,
1061 "id" : "E8DC76EC-C4D2-46AE-853A-A60F4F0D2E07",
1062 "kind" : "video",
1063 "linkId" : "C5B94050-9128-423F-8A3C-F610A15ECBE8",
1064 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
1065 "muted" : false,
1066 "newShot" : false,
1067 "speed" : 1,
1068 "srcIn" : 153.08474576271186,
1069 "start" : 116.81355932203384,
1070 "track" : "v0"
1071 },
1072 {
1073 "duration" : 18.847457627118715,
1074 "fadeIn" : 0,
1075 "fadeOut" : 0,
1076 "id" : "4440B25F-48FC-49CC-9A78-207D16DDCCB7",
1077 "kind" : "audio",
1078 "linkId" : "C5B94050-9128-423F-8A3C-F610A15ECBE8",
1079 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
1080 "muted" : true,
1081 "newShot" : false,
1082 "speed" : 1,
1083 "srcIn" : 153.0008742213708,
1084 "start" : 116.81355932203384,
1085 "track" : "v1"
1086 },
1087 {
1088 "duration" : 18.847457627118715,
1089 "fadeIn" : 0,
1090 "fadeOut" : 0,
1091 "id" : "6FEFD05B-C857-4EBE-9EE7-F0EAAA08569F",
1092 "kind" : "audio",
1093 "linkId" : "C5B94050-9128-423F-8A3C-F610A15ECBE8",
1094 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
1095 "muted" : false,
1096 "newShot" : false,
1097 "speed" : 1,
1098 "srcIn" : 153.04755052460172,
1099 "start" : 116.81355932203384,
1100 "track" : "v2"
1101 },
1102 {
1103 "duration" : 18.847457627118715,
1104 "fadeIn" : 0,
1105 "fadeOut" : 0,
1106 "id" : "E1C8762B-5477-4769-BD47-2DE3F3E7F08A",
1107 "kind" : "video",
1108 "linkId" : "C5B94050-9128-423F-8A3C-F610A15ECBE8",
1109 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
1110 "muted" : false,
1111 "newShot" : false,
1112 "speed" : 1,
1113 "srcIn" : 152.9109433883736,
1114 "start" : 116.81355932203384,
1115 "track" : "v3"
1116 },
1117 {
1118 "duration" : 18.847457627118715,
1119 "fadeIn" : 0,
1120 "fadeOut" : 0,
1121 "id" : "6C90A7B0-6891-4C26-9ACE-E78062706047",
1122 "kind" : "video",
1123 "linkId" : "C5B94050-9128-423F-8A3C-F610A15ECBE8",
1124 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
1125 "muted" : false,
1126 "newShot" : false,
1127 "speed" : 1,
1128 "srcIn" : 152.91093880437478,
1129 "start" : 116.81355932203384,
1130 "track" : "v4"
1131 },
1132 {
1133 "duration" : 13.220338983050851,
1134 "fadeIn" : 0,
1135 "fadeOut" : 0,
1136 "id" : "BE66E066-F241-46FE-8D9A-606DBA9554B7",
1137 "kind" : "video",
1138 "linkId" : "17FC9151-B113-420C-8754-353E10218637",
1139 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
1140 "muted" : false,
1141 "newShot" : false,
1142 "speed" : 1,
1143 "srcIn" : 81.01694915254235,
1144 "start" : 103.59322033898304,
1145 "track" : "v0"
1146 },
1147 {
1148 "duration" : 13.220338983050851,
1149 "fadeIn" : 0,
1150 "fadeOut" : 0,
1151 "id" : "D10CE445-F3A3-46E4-B38D-B77AAB60F5FB",
1152 "kind" : "audio",
1153 "linkId" : "17FC9151-B113-420C-8754-353E10218637",
1154 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
1155 "muted" : true,
1156 "newShot" : false,
1157 "speed" : 1,
1158 "srcIn" : 80.93307761120128,
1159 "start" : 103.59322033898304,
1160 "track" : "v1"
1161 },
1162 {
1163 "duration" : 13.220338983050851,
1164 "fadeIn" : 0,
1165 "fadeOut" : 0,
1166 "id" : "4F4DB6E2-2CC1-4696-8CE6-9B7119E8F034",
1167 "kind" : "audio",
1168 "linkId" : "17FC9151-B113-420C-8754-353E10218637",
1169 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
1170 "muted" : false,
1171 "newShot" : false,
1172 "speed" : 1,
1173 "srcIn" : 80.97975391443221,
1174 "start" : 103.59322033898304,
1175 "track" : "v2"
1176 },
1177 {
1178 "duration" : 13.220338983050851,
1179 "fadeIn" : 0,
1180 "fadeOut" : 0,
1181 "id" : "27A9D3E7-68B7-40B3-B332-244F8C0C1BF6",
1182 "kind" : "video",
1183 "linkId" : "17FC9151-B113-420C-8754-353E10218637",
1184 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
1185 "muted" : false,
1186 "newShot" : false,
1187 "speed" : 1,
1188 "srcIn" : 80.84314677820409,
1189 "start" : 103.59322033898304,
1190 "track" : "v3"
1191 },
1192 {
1193 "duration" : 13.220338983050851,
1194 "fadeIn" : 0,
1195 "fadeOut" : 0,
1196 "id" : "5DB078BA-6259-4E90-9C12-E9642D920CED",
1197 "kind" : "video",
1198 "linkId" : "17FC9151-B113-420C-8754-353E10218637",
1199 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
1200 "muted" : false,
1201 "newShot" : false,
1202 "speed" : 1,
1203 "srcIn" : 80.84314219420527,
1204 "start" : 103.59322033898304,
1205 "track" : "v4"
1206 },
1207 {
1208 "duration" : 2.6779661016949063,
1209 "fadeIn" : 0,
1210 "fadeOut" : 0,
1211 "id" : "5FE10E54-0DF5-4AE4-BD39-77E27BADC0B3",
1212 "kind" : "video",
1213 "linkId" : "557C472E-4AC3-4428-8BD4-7817D0701CAB",
1214 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
1215 "muted" : false,
1216 "newShot" : false,
1217 "speed" : 1,
1218 "srcIn" : 22.40677966101694,
1219 "start" : 95.55932203389831,
1220 "track" : "v0"
1221 },
1222 {
1223 "duration" : 2.6779661016949063,
1224 "fadeIn" : 0,
1225 "fadeOut" : 0,
1226 "id" : "981061A0-98AF-4B09-9FEF-6DE942F56A18",
1227 "kind" : "audio",
1228 "linkId" : "557C472E-4AC3-4428-8BD4-7817D0701CAB",
1229 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
1230 "muted" : true,
1231 "newShot" : false,
1232 "speed" : 1,
1233 "srcIn" : 22.322908119675873,
1234 "start" : 95.55932203389831,
1235 "track" : "v1"
1236 },
1237 {
1238 "duration" : 2.6779661016949063,
1239 "fadeIn" : 0,
1240 "fadeOut" : 0,
1241 "id" : "AD29D0F7-2863-42EA-BF7F-AB91267B34D1",
1242 "kind" : "audio",
1243 "linkId" : "557C472E-4AC3-4428-8BD4-7817D0701CAB",
1244 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
1245 "muted" : false,
1246 "newShot" : false,
1247 "speed" : 1,
1248 "srcIn" : 22.369584422906797,
1249 "start" : 95.55932203389831,
1250 "track" : "v2"
1251 },
1252 {
1253 "duration" : 2.6779661016949063,
1254 "fadeIn" : 0,
1255 "fadeOut" : 0,
1256 "id" : "665388F4-40AF-450A-9C85-EE082E1EE31F",
1257 "kind" : "video",
1258 "linkId" : "557C472E-4AC3-4428-8BD4-7817D0701CAB",
1259 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
1260 "muted" : false,
1261 "newShot" : false,
1262 "speed" : 1,
1263 "srcIn" : 22.232977286678675,
1264 "start" : 95.55932203389831,
1265 "track" : "v3"
1266 },
1267 {
1268 "duration" : 2.6779661016949063,
1269 "fadeIn" : 0,
1270 "fadeOut" : 0,
1271 "id" : "3A784722-971F-44D4-B835-69C262B69DC7",
1272 "kind" : "video",
1273 "linkId" : "557C472E-4AC3-4428-8BD4-7817D0701CAB",
1274 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
1275 "muted" : false,
1276 "newShot" : false,
1277 "speed" : 1,
1278 "srcIn" : 22.23297270267986,
1279 "start" : 95.55932203389831,
1280 "track" : "v4"
1281 },
1282 {
1283 "duration" : 5.355932203389827,
1284 "fadeIn" : 0,
1285 "fadeOut" : 0,
1286 "id" : "3101D12D-3956-4472-A689-AC25FAF6B2B3",
1287 "kind" : "video",
1288 "linkId" : "DD4C0E3A-C905-48F3-BA08-017781831163",
1289 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
1290 "muted" : false,
1291 "newShot" : false,
1292 "speed" : 1,
1293 "srcIn" : 29.423728813559308,
1294 "start" : 98.23728813559322,
1295 "track" : "v0"
1296 },
1297 {
1298 "duration" : 5.355932203389827,
1299 "fadeIn" : 0,
1300 "fadeOut" : 0,
1301 "id" : "8AE89603-E830-41CB-98AA-FCE4DDB65200",
1302 "kind" : "audio",
1303 "linkId" : "DD4C0E3A-C905-48F3-BA08-017781831163",
1304 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
1305 "muted" : true,
1306 "newShot" : false,
1307 "speed" : 1,
1308 "srcIn" : 29.33985727221824,
1309 "start" : 98.23728813559322,
1310 "track" : "v1"
1311 },
1312 {
1313 "duration" : 5.355932203389827,
1314 "fadeIn" : 0,
1315 "fadeOut" : 0,
1316 "id" : "30FEEB7F-94C6-4D85-98F3-9D56EFDEA6DB",
1317 "kind" : "audio",
1318 "linkId" : "DD4C0E3A-C905-48F3-BA08-017781831163",
1319 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
1320 "muted" : false,
1321 "newShot" : false,
1322 "speed" : 1,
1323 "srcIn" : 29.386533575449164,
1324 "start" : 98.23728813559322,
1325 "track" : "v2"
1326 },
1327 {
1328 "duration" : 5.355932203389827,
1329 "fadeIn" : 0,
1330 "fadeOut" : 0,
1331 "id" : "986FD34B-99B0-48E4-8AA8-EA9747E0F300",
1332 "kind" : "video",
1333 "linkId" : "DD4C0E3A-C905-48F3-BA08-017781831163",
1334 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
1335 "muted" : false,
1336 "newShot" : false,
1337 "speed" : 1,
1338 "srcIn" : 29.249926439221042,
1339 "start" : 98.23728813559322,
1340 "track" : "v3"
1341 },
1342 {
1343 "duration" : 5.355932203389827,
1344 "fadeIn" : 0,
1345 "fadeOut" : 0,
1346 "id" : "847F33A9-CA10-4FA4-95E4-3B250E43146A",
1347 "kind" : "video",
1348 "linkId" : "DD4C0E3A-C905-48F3-BA08-017781831163",
1349 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
1350 "muted" : false,
1351 "newShot" : false,
1352 "speed" : 1,
1353 "srcIn" : 29.249921855222226,
1354 "start" : 98.23728813559322,
1355 "track" : "v4"
1356 },
1357 {
1358 "duration" : 7.423728813559308,
1359 "fadeIn" : 0,
1360 "fadeOut" : 0,
1361 "id" : "11BBE731-6722-4267-9D42-9A793553DE06",
1362 "kind" : "video",
1363 "linkId" : "DA913126-892F-46B7-9A7A-51A2A1951521",
1364 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
1365 "muted" : false,
1366 "newShot" : false,
1367 "speed" : 1,
1368 "srcIn" : 193.55932203389838,
1369 "start" : 135.66101694915255,
1370 "track" : "v0"
1371 },
1372 {
1373 "duration" : 7.423728813559308,
1374 "fadeIn" : 0,
1375 "fadeOut" : 0,
1376 "id" : "22421728-439D-4470-95A1-EC2EF0D21C81",
1377 "kind" : "audio",
1378 "linkId" : "DA913126-892F-46B7-9A7A-51A2A1951521",
1379 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
1380 "muted" : true,
1381 "newShot" : false,
1382 "speed" : 1,
1383 "srcIn" : 193.47545049255731,
1384 "start" : 135.66101694915255,
1385 "track" : "v1"
1386 },
1387 {
1388 "duration" : 7.423728813559308,
1389 "fadeIn" : 0,
1390 "fadeOut" : 0,
1391 "id" : "AE02280F-55B2-4037-9D75-5CC083936FD1",
1392 "kind" : "audio",
1393 "linkId" : "DA913126-892F-46B7-9A7A-51A2A1951521",
1394 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
1395 "muted" : false,
1396 "newShot" : false,
1397 "speed" : 1,
1398 "srcIn" : 193.52212679578824,
1399 "start" : 135.66101694915255,
1400 "track" : "v2"
1401 },
1402 {
1403 "duration" : 7.423728813559308,
1404 "fadeIn" : 0,
1405 "fadeOut" : 0,
1406 "id" : "E2A5436F-D353-42DF-9A48-073C9FE6246F",
1407 "kind" : "video",
1408 "linkId" : "DA913126-892F-46B7-9A7A-51A2A1951521",
1409 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
1410 "muted" : false,
1411 "newShot" : false,
1412 "speed" : 1,
1413 "srcIn" : 193.38551965956012,
1414 "start" : 135.66101694915255,
1415 "track" : "v3"
1416 },
1417 {
1418 "duration" : 7.423728813559308,
1419 "fadeIn" : 0,
1420 "fadeOut" : 0,
1421 "id" : "A1DA8F0A-B592-4DBD-9926-213A33E42749",
1422 "kind" : "video",
1423 "linkId" : "DA913126-892F-46B7-9A7A-51A2A1951521",
1424 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
1425 "muted" : false,
1426 "newShot" : false,
1427 "speed" : 1,
1428 "srcIn" : 193.3855150755613,
1429 "start" : 135.66101694915255,
1430 "track" : "v4"
1431 },
1432 {
1433 "duration" : 2.3389830508474745,
1434 "fadeIn" : 0,
1435 "fadeOut" : 0,
1436 "id" : "0F625D10-4206-4D6D-8623-4F14529073E3",
1437 "kind" : "video",
1438 "linkId" : "E458F570-26D5-47DD-87C2-E11FF928A2CA",
1439 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
1440 "muted" : false,
1441 "newShot" : false,
1442 "speed" : 1,
1443 "srcIn" : 214.9152542372882,
1444 "start" : 143.08474576271186,
1445 "track" : "v0"
1446 },
1447 {
1448 "duration" : 2.3389830508474745,
1449 "fadeIn" : 0,
1450 "fadeOut" : 0,
1451 "id" : "F69F71DF-6EEA-48C1-A1F0-F8EE77EE669C",
1452 "kind" : "audio",
1453 "linkId" : "E458F570-26D5-47DD-87C2-E11FF928A2CA",
1454 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
1455 "muted" : true,
1456 "newShot" : false,
1457 "speed" : 1,
1458 "srcIn" : 214.83138269594713,
1459 "start" : 143.08474576271186,
1460 "track" : "v1"
1461 },
1462 {
1463 "duration" : 2.3389830508474745,
1464 "fadeIn" : 0,
1465 "fadeOut" : 0,
1466 "id" : "63619F12-6728-45D4-9664-77B370607EEB",
1467 "kind" : "audio",
1468 "linkId" : "E458F570-26D5-47DD-87C2-E11FF928A2CA",
1469 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
1470 "muted" : false,
1471 "newShot" : false,
1472 "speed" : 1,
1473 "srcIn" : 214.87805899917805,
1474 "start" : 143.08474576271186,
1475 "track" : "v2"
1476 },
1477 {
1478 "duration" : 2.3389830508474745,
1479 "fadeIn" : 0,
1480 "fadeOut" : 0,
1481 "id" : "4F7963B1-6583-494B-A319-8F2BF093C517",
1482 "kind" : "video",
1483 "linkId" : "E458F570-26D5-47DD-87C2-E11FF928A2CA",
1484 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
1485 "muted" : false,
1486 "newShot" : false,
1487 "speed" : 1,
1488 "srcIn" : 214.74145186294993,
1489 "start" : 143.08474576271186,
1490 "track" : "v3"
1491 },
1492 {
1493 "duration" : 2.3389830508474745,
1494 "fadeIn" : 0,
1495 "fadeOut" : 0,
1496 "id" : "95B72825-D2B7-4D97-8C1F-63E1EB598DF9",
1497 "kind" : "video",
1498 "linkId" : "E458F570-26D5-47DD-87C2-E11FF928A2CA",
1499 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
1500 "muted" : false,
1501 "newShot" : false,
1502 "speed" : 1,
1503 "srcIn" : 214.7414472789511,
1504 "start" : 143.08474576271186,
1505 "track" : "v4"
1506 },
1507 {
1508 "duration" : 6.135593220338961,
1509 "fadeIn" : 0,
1510 "fadeOut" : 0,
1511 "id" : "112CE6B8-BFDF-497C-9C69-CCE7802DB06C",
1512 "kind" : "video",
1513 "linkId" : "A28DCAA3-B061-4E38-8372-878AD7EF2060",
1514 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
1515 "muted" : false,
1516 "newShot" : false,
1517 "speed" : 1,
1518 "srcIn" : 226.33898305084753,
1519 "start" : 145.42372881355934,
1520 "track" : "v0"
1521 },
1522 {
1523 "duration" : 6.135593220338961,
1524 "fadeIn" : 0,
1525 "fadeOut" : 0,
1526 "id" : "4040BC36-A9F4-4ED3-A653-1978DDDAF7C5",
1527 "kind" : "audio",
1528 "linkId" : "A28DCAA3-B061-4E38-8372-878AD7EF2060",
1529 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
1530 "muted" : true,
1531 "newShot" : false,
1532 "speed" : 1,
1533 "srcIn" : 226.25511150950646,
1534 "start" : 145.42372881355934,
1535 "track" : "v1"
1536 },
1537 {
1538 "duration" : 6.135593220338961,
1539 "fadeIn" : 0,
1540 "fadeOut" : 0,
1541 "id" : "EFD116A1-EB5D-4CE3-B95D-14B73ECDE548",
1542 "kind" : "audio",
1543 "linkId" : "A28DCAA3-B061-4E38-8372-878AD7EF2060",
1544 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
1545 "muted" : false,
1546 "newShot" : false,
1547 "speed" : 1,
1548 "srcIn" : 226.3017878127374,
1549 "start" : 145.42372881355934,
1550 "track" : "v2"
1551 },
1552 {
1553 "duration" : 6.135593220338961,
1554 "fadeIn" : 0,
1555 "fadeOut" : 0,
1556 "id" : "0AE31757-C7B4-49BB-AB63-0641A6D83BC3",
1557 "kind" : "video",
1558 "linkId" : "A28DCAA3-B061-4E38-8372-878AD7EF2060",
1559 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
1560 "muted" : false,
1561 "newShot" : false,
1562 "speed" : 1,
1563 "srcIn" : 226.16518067650927,
1564 "start" : 145.42372881355934,
1565 "track" : "v3"
1566 },
1567 {
1568 "duration" : 6.135593220338961,
1569 "fadeIn" : 0,
1570 "fadeOut" : 0,
1571 "id" : "9E1DFB7E-F165-4D38-AC11-812E55244554",
1572 "kind" : "video",
1573 "linkId" : "A28DCAA3-B061-4E38-8372-878AD7EF2060",
1574 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
1575 "muted" : false,
1576 "newShot" : false,
1577 "speed" : 1,
1578 "srcIn" : 226.16517609251045,
1579 "start" : 145.42372881355934,
1580 "track" : "v4"
1581 },
1582 {
1583 "duration" : 8.508474576271198,
1584 "fadeIn" : 0,
1585 "fadeOut" : 0,
1586 "id" : "6C78F572-76AD-4191-822E-E127F9D580E4",
1587 "kind" : "video",
1588 "linkId" : "CBF9981A-DB5A-459B-96C0-CFDCEB644C78",
1589 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
1590 "muted" : false,
1591 "newShot" : false,
1592 "speed" : 1,
1593 "srcIn" : 233.8305084745763,
1594 "start" : 151.5593220338983,
1595 "track" : "v0"
1596 },
1597 {
1598 "duration" : 8.508474576271198,
1599 "fadeIn" : 0,
1600 "fadeOut" : 0,
1601 "id" : "443C9738-2CD2-45FF-89ED-93D209FFBFCA",
1602 "kind" : "audio",
1603 "linkId" : "CBF9981A-DB5A-459B-96C0-CFDCEB644C78",
1604 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
1605 "muted" : true,
1606 "newShot" : false,
1607 "speed" : 1,
1608 "srcIn" : 233.74663693323524,
1609 "start" : 151.5593220338983,
1610 "track" : "v1"
1611 },
1612 {
1613 "duration" : 8.508474576271198,
1614 "fadeIn" : 0,
1615 "fadeOut" : 0,
1616 "id" : "B28457F9-9054-461C-99E1-73E68152E679",
1617 "kind" : "audio",
1618 "linkId" : "CBF9981A-DB5A-459B-96C0-CFDCEB644C78",
1619 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
1620 "muted" : false,
1621 "newShot" : false,
1622 "speed" : 1,
1623 "srcIn" : 233.79331323646616,
1624 "start" : 151.5593220338983,
1625 "track" : "v2"
1626 },
1627 {
1628 "duration" : 8.508474576271198,
1629 "fadeIn" : 0,
1630 "fadeOut" : 0,
1631 "id" : "3D057A10-3381-4125-B50C-BC1998039A9D",
1632 "kind" : "video",
1633 "linkId" : "CBF9981A-DB5A-459B-96C0-CFDCEB644C78",
1634 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
1635 "muted" : false,
1636 "newShot" : false,
1637 "speed" : 1,
1638 "srcIn" : 233.65670610023804,
1639 "start" : 151.5593220338983,
1640 "track" : "v3"
1641 },
1642 {
1643 "duration" : 8.508474576271198,
1644 "fadeIn" : 0,
1645 "fadeOut" : 0,
1646 "id" : "BDECC22C-1053-4191-B2F2-2EDBC4F3B5B5",
1647 "kind" : "video",
1648 "linkId" : "CBF9981A-DB5A-459B-96C0-CFDCEB644C78",
1649 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
1650 "muted" : false,
1651 "newShot" : false,
1652 "speed" : 1,
1653 "srcIn" : 233.65670151623922,
1654 "start" : 151.5593220338983,
1655 "track" : "v4"
1656 },
1657 {
1658 "duration" : 9.050847457627128,
1659 "fadeIn" : 0,
1660 "fadeOut" : 0,
1661 "id" : "62014848-FAC6-4BBC-8E7A-14F0B28CC0E6",
1662 "kind" : "video",
1663 "linkId" : "4288CB77-E89F-42B1-927E-DEADACE56BA4",
1664 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
1665 "muted" : false,
1666 "newShot" : false,
1667 "speed" : 1,
1668 "srcIn" : 279.6271186440679,
1669 "start" : 160.0677966101695,
1670 "track" : "v0"
1671 },
1672 {
1673 "duration" : 9.050847457627128,
1674 "fadeIn" : 0,
1675 "fadeOut" : 0,
1676 "id" : "59D15847-5750-41D0-84C8-63D08E771477",
1677 "kind" : "audio",
1678 "linkId" : "4288CB77-E89F-42B1-927E-DEADACE56BA4",
1679 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
1680 "muted" : true,
1681 "newShot" : false,
1682 "speed" : 1,
1683 "srcIn" : 279.5432471027268,
1684 "start" : 160.0677966101695,
1685 "track" : "v1"
1686 },
1687 {
1688 "duration" : 9.050847457627128,
1689 "fadeIn" : 0,
1690 "fadeOut" : 0,
1691 "id" : "3404389F-7945-4513-A69B-1C428F1D90BE",
1692 "kind" : "audio",
1693 "linkId" : "4288CB77-E89F-42B1-927E-DEADACE56BA4",
1694 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
1695 "muted" : false,
1696 "newShot" : false,
1697 "speed" : 1,
1698 "srcIn" : 279.58992340595773,
1699 "start" : 160.0677966101695,
1700 "track" : "v2"
1701 },
1702 {
1703 "duration" : 9.050847457627128,
1704 "fadeIn" : 0,
1705 "fadeOut" : 0,
1706 "id" : "91B4872C-9861-4274-ADDC-E13CB1843662",
1707 "kind" : "video",
1708 "linkId" : "4288CB77-E89F-42B1-927E-DEADACE56BA4",
1709 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
1710 "muted" : false,
1711 "newShot" : false,
1712 "speed" : 1,
1713 "srcIn" : 279.4533162697296,
1714 "start" : 160.0677966101695,
1715 "track" : "v3"
1716 },
1717 {
1718 "duration" : 9.050847457627128,
1719 "fadeIn" : 0,
1720 "fadeOut" : 0,
1721 "id" : "BA59E5A7-F140-4986-8E5B-E8994D035D5D",
1722 "kind" : "video",
1723 "linkId" : "4288CB77-E89F-42B1-927E-DEADACE56BA4",
1724 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
1725 "muted" : false,
1726 "newShot" : false,
1727 "speed" : 1,
1728 "srcIn" : 279.4533116857308,
1729 "start" : 160.0677966101695,
1730 "track" : "v4"
1731 },
1732 {
1733 "duration" : 20.983050847457605,
1734 "fadeIn" : 0,
1735 "fadeOut" : 0,
1736 "id" : "D9CE7BC0-0A5C-4C90-A15A-7694E9E749B7",
1737 "kind" : "video",
1738 "linkId" : "1B8AA32F-8AAC-4699-91CD-75C5E92F7BA0",
1739 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
1740 "muted" : false,
1741 "newShot" : false,
1742 "speed" : 1,
1743 "srcIn" : 341.42372881355936,
1744 "start" : 169.11864406779662,
1745 "track" : "v0"
1746 },
1747 {
1748 "duration" : 20.983050847457605,
1749 "fadeIn" : 0,
1750 "fadeOut" : 0,
1751 "id" : "6F77C3F0-E5FF-426F-99E1-AA28B988BB0A",
1752 "kind" : "audio",
1753 "linkId" : "1B8AA32F-8AAC-4699-91CD-75C5E92F7BA0",
1754 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
1755 "muted" : true,
1756 "newShot" : false,
1757 "speed" : 1,
1758 "srcIn" : 341.3398572722183,
1759 "start" : 169.11864406779662,
1760 "track" : "v1"
1761 },
1762 {
1763 "duration" : 20.983050847457605,
1764 "fadeIn" : 0,
1765 "fadeOut" : 0,
1766 "id" : "DAF8FD62-8F36-4F73-94EE-5380D1E30401",
1767 "kind" : "audio",
1768 "linkId" : "1B8AA32F-8AAC-4699-91CD-75C5E92F7BA0",
1769 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
1770 "muted" : false,
1771 "newShot" : false,
1772 "speed" : 1,
1773 "srcIn" : 341.3865335754492,
1774 "start" : 169.11864406779662,
1775 "track" : "v2"
1776 },
1777 {
1778 "duration" : 20.983050847457605,
1779 "fadeIn" : 0,
1780 "fadeOut" : 0,
1781 "id" : "74FC2FC5-A8A4-469B-9482-73979D2C373D",
1782 "kind" : "video",
1783 "linkId" : "1B8AA32F-8AAC-4699-91CD-75C5E92F7BA0",
1784 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
1785 "muted" : false,
1786 "newShot" : false,
1787 "speed" : 1,
1788 "srcIn" : 341.2499264392211,
1789 "start" : 169.11864406779662,
1790 "track" : "v3"
1791 },
1792 {
1793 "duration" : 20.983050847457605,
1794 "fadeIn" : 0,
1795 "fadeOut" : 0,
1796 "id" : "FFA5E7DE-E5C3-4ED5-9004-3201CD4A30DA",
1797 "kind" : "video",
1798 "linkId" : "1B8AA32F-8AAC-4699-91CD-75C5E92F7BA0",
1799 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
1800 "muted" : false,
1801 "newShot" : false,
1802 "speed" : 1,
1803 "srcIn" : 341.2499218552223,
1804 "start" : 169.11864406779662,
1805 "track" : "v4"
1806 },
1807 {
1808 "duration" : 3.1525423728813564,
1809 "fadeIn" : 0,
1810 "fadeOut" : 0,
1811 "id" : "F7F6AF02-0DE4-4485-8590-753751DA656D",
1812 "kind" : "video",
1813 "linkId" : "1B2E5F19-8476-4AC4-B136-E5222F541298",
1814 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
1815 "muted" : false,
1816 "newShot" : false,
1817 "speed" : 1,
1818 "srcIn" : 516.9830508474577,
1819 "start" : 190.10169491525423,
1820 "track" : "v0"
1821 },
1822 {
1823 "duration" : 3.1525423728813564,
1824 "fadeIn" : 0,
1825 "fadeOut" : 0,
1826 "id" : "0F29059A-7B58-4133-AA5B-F26BDD11FCEA",
1827 "kind" : "audio",
1828 "linkId" : "1B2E5F19-8476-4AC4-B136-E5222F541298",
1829 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
1830 "muted" : true,
1831 "newShot" : false,
1832 "speed" : 1,
1833 "srcIn" : 516.8991793061166,
1834 "start" : 190.10169491525423,
1835 "track" : "v1"
1836 },
1837 {
1838 "duration" : 3.1525423728813564,
1839 "fadeIn" : 0,
1840 "fadeOut" : 0,
1841 "id" : "67E73C14-2908-4A77-83E5-6A8F38F25BF4",
1842 "kind" : "audio",
1843 "linkId" : "1B2E5F19-8476-4AC4-B136-E5222F541298",
1844 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
1845 "muted" : false,
1846 "newShot" : false,
1847 "speed" : 1,
1848 "srcIn" : 516.9458556093475,
1849 "start" : 190.10169491525423,
1850 "track" : "v2"
1851 },
1852 {
1853 "duration" : 3.1525423728813564,
1854 "fadeIn" : 0,
1855 "fadeOut" : 0,
1856 "id" : "DACD3C89-6F61-4E5A-BFF4-ABCB5013028B",
1857 "kind" : "video",
1858 "linkId" : "1B2E5F19-8476-4AC4-B136-E5222F541298",
1859 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
1860 "muted" : false,
1861 "newShot" : false,
1862 "speed" : 1,
1863 "srcIn" : 516.8092484731194,
1864 "start" : 190.10169491525423,
1865 "track" : "v3"
1866 },
1867 {
1868 "duration" : 3.1525423728813564,
1869 "fadeIn" : 0,
1870 "fadeOut" : 0,
1871 "id" : "D85A8D17-5419-4FE8-A767-7886ACAD06D2",
1872 "kind" : "video",
1873 "linkId" : "1B2E5F19-8476-4AC4-B136-E5222F541298",
1874 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
1875 "muted" : false,
1876 "newShot" : false,
1877 "speed" : 1,
1878 "srcIn" : 516.8092438891206,
1879 "start" : 190.10169491525423,
1880 "track" : "v4"
1881 },
1882 {
1883 "duration" : 3.0508474576271283,
1884 "fadeIn" : 0,
1885 "fadeOut" : 0,
1886 "id" : "22E40845-33D9-4113-9E6A-72ABDBAF556B",
1887 "kind" : "video",
1888 "linkId" : "3CC5F7F4-7A10-4825-BA22-58F0E5FA39EC",
1889 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
1890 "muted" : false,
1891 "newShot" : false,
1892 "speed" : 1,
1893 "srcIn" : 526.0677966101696,
1894 "start" : 193.25423728813558,
1895 "track" : "v0"
1896 },
1897 {
1898 "duration" : 3.0508474576271283,
1899 "fadeIn" : 0,
1900 "fadeOut" : 0,
1901 "id" : "80104D35-A942-4197-BE85-9E999B164BD5",
1902 "kind" : "audio",
1903 "linkId" : "3CC5F7F4-7A10-4825-BA22-58F0E5FA39EC",
1904 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
1905 "muted" : true,
1906 "newShot" : false,
1907 "speed" : 1,
1908 "srcIn" : 525.9839250688285,
1909 "start" : 193.25423728813558,
1910 "track" : "v1"
1911 },
1912 {
1913 "duration" : 3.0508474576271283,
1914 "fadeIn" : 0,
1915 "fadeOut" : 0,
1916 "id" : "98A4488E-8AFB-4DAF-AA4A-B6171B5BE4B0",
1917 "kind" : "audio",
1918 "linkId" : "3CC5F7F4-7A10-4825-BA22-58F0E5FA39EC",
1919 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
1920 "muted" : false,
1921 "newShot" : false,
1922 "speed" : 1,
1923 "srcIn" : 526.0306013720594,
1924 "start" : 193.25423728813558,
1925 "track" : "v2"
1926 },
1927 {
1928 "duration" : 3.0508474576271283,
1929 "fadeIn" : 0,
1930 "fadeOut" : 0,
1931 "id" : "31F9AFDE-F19F-4D52-8468-6E4FD6E73843",
1932 "kind" : "video",
1933 "linkId" : "3CC5F7F4-7A10-4825-BA22-58F0E5FA39EC",
1934 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
1935 "muted" : false,
1936 "newShot" : false,
1937 "speed" : 1,
1938 "srcIn" : 525.8939942358313,
1939 "start" : 193.25423728813558,
1940 "track" : "v3"
1941 },
1942 {
1943 "duration" : 3.0508474576271283,
1944 "fadeIn" : 0,
1945 "fadeOut" : 0,
1946 "id" : "58C86E52-F741-4EAF-93E1-9AD9B238BEBC",
1947 "kind" : "video",
1948 "linkId" : "3CC5F7F4-7A10-4825-BA22-58F0E5FA39EC",
1949 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
1950 "muted" : false,
1951 "newShot" : false,
1952 "speed" : 1,
1953 "srcIn" : 525.8939896518325,
1954 "start" : 193.25423728813558,
1955 "track" : "v4"
1956 },
1957 {
1958 "duration" : 12.101694915254257,
1959 "fadeIn" : 0,
1960 "fadeOut" : 0,
1961 "id" : "729D86A6-9A2B-4F18-97A2-9E4B8842705A",
1962 "kind" : "video",
1963 "linkId" : "96ED86B5-C0C4-427A-AB87-51061D1B6C02",
1964 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
1965 "muted" : false,
1966 "newShot" : false,
1967 "speed" : 1,
1968 "srcIn" : 547.3898305084747,
1969 "start" : 196.3050847457627,
1970 "track" : "v0"
1971 },
1972 {
1973 "duration" : 12.101694915254257,
1974 "fadeIn" : 0,
1975 "fadeOut" : 0,
1976 "id" : "537BA6C3-FE42-41F7-AFD1-CCD1498FD164",
1977 "kind" : "audio",
1978 "linkId" : "96ED86B5-C0C4-427A-AB87-51061D1B6C02",
1979 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
1980 "muted" : true,
1981 "newShot" : false,
1982 "speed" : 1,
1983 "srcIn" : 547.3059589671336,
1984 "start" : 196.3050847457627,
1985 "track" : "v1"
1986 },
1987 {
1988 "duration" : 12.101694915254257,
1989 "fadeIn" : 0,
1990 "fadeOut" : 0,
1991 "id" : "DF50C8A8-7061-47D8-9E3E-F76059F64F17",
1992 "kind" : "audio",
1993 "linkId" : "96ED86B5-C0C4-427A-AB87-51061D1B6C02",
1994 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
1995 "muted" : false,
1996 "newShot" : false,
1997 "speed" : 1,
1998 "srcIn" : 547.3526352703645,
1999 "start" : 196.3050847457627,
2000 "track" : "v2"
2001 },
2002 {
2003 "duration" : 12.101694915254257,
2004 "fadeIn" : 0,
2005 "fadeOut" : 0,
2006 "id" : "396149DF-84B8-447F-8A4F-6BC523F5F5C2",
2007 "kind" : "video",
2008 "linkId" : "96ED86B5-C0C4-427A-AB87-51061D1B6C02",
2009 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
2010 "muted" : false,
2011 "newShot" : false,
2012 "speed" : 1,
2013 "srcIn" : 547.2160281341364,
2014 "start" : 196.3050847457627,
2015 "track" : "v3"
2016 },
2017 {
2018 "duration" : 12.101694915254257,
2019 "fadeIn" : 0,
2020 "fadeOut" : 0,
2021 "id" : "8BAC1614-CB12-4DC2-9F56-99B2DD91B028",
2022 "kind" : "video",
2023 "linkId" : "96ED86B5-C0C4-427A-AB87-51061D1B6C02",
2024 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
2025 "muted" : false,
2026 "newShot" : false,
2027 "speed" : 1,
2028 "srcIn" : 547.2160235501376,
2029 "start" : 196.3050847457627,
2030 "track" : "v4"
2031 },
2032 {
2033 "duration" : 4.203389830508456,
2034 "fadeIn" : 0,
2035 "fadeOut" : 0,
2036 "id" : "C677D610-A145-44E9-A5DF-4F24EF105083",
2037 "kind" : "video",
2038 "linkId" : "61201D64-66C9-4C57-8602-97A96701E0BF",
2039 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
2040 "muted" : false,
2041 "newShot" : false,
2042 "speed" : 1,
2043 "srcIn" : 566.3389830508476,
2044 "start" : 208.40677966101697,
2045 "track" : "v0"
2046 },
2047 {
2048 "duration" : 4.203389830508456,
2049 "fadeIn" : 0,
2050 "fadeOut" : 0,
2051 "id" : "2D9D8A03-3523-4FF8-A897-637F158C3C79",
2052 "kind" : "audio",
2053 "linkId" : "61201D64-66C9-4C57-8602-97A96701E0BF",
2054 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
2055 "muted" : true,
2056 "newShot" : false,
2057 "speed" : 1,
2058 "srcIn" : 566.2551115095065,
2059 "start" : 208.40677966101697,
2060 "track" : "v1"
2061 },
2062 {
2063 "duration" : 4.203389830508456,
2064 "fadeIn" : 0,
2065 "fadeOut" : 0,
2066 "id" : "61480E1E-954B-45A2-9C3A-FF0F0BB690FC",
2067 "kind" : "audio",
2068 "linkId" : "61201D64-66C9-4C57-8602-97A96701E0BF",
2069 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
2070 "muted" : false,
2071 "newShot" : false,
2072 "speed" : 1,
2073 "srcIn" : 566.3017878127374,
2074 "start" : 208.40677966101697,
2075 "track" : "v2"
2076 },
2077 {
2078 "duration" : 4.203389830508456,
2079 "fadeIn" : 0,
2080 "fadeOut" : 0,
2081 "id" : "0501FE38-6C08-467C-9E1C-E41CA0498523",
2082 "kind" : "video",
2083 "linkId" : "61201D64-66C9-4C57-8602-97A96701E0BF",
2084 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
2085 "muted" : false,
2086 "newShot" : false,
2087 "speed" : 1,
2088 "srcIn" : 566.1651806765093,
2089 "start" : 208.40677966101697,
2090 "track" : "v3"
2091 },
2092 {
2093 "duration" : 4.203389830508456,
2094 "fadeIn" : 0,
2095 "fadeOut" : 0,
2096 "id" : "74D8A914-BC66-4C84-BFFA-A0CA6639D704",
2097 "kind" : "video",
2098 "linkId" : "61201D64-66C9-4C57-8602-97A96701E0BF",
2099 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
2100 "muted" : false,
2101 "newShot" : false,
2102 "speed" : 1,
2103 "srcIn" : 566.1651760925105,
2104 "start" : 208.40677966101697,
2105 "track" : "v4"
2106 },
2107 {
2108 "duration" : 6.406779661016941,
2109 "fadeIn" : 0,
2110 "fadeOut" : 0,
2111 "id" : "9B498BC6-78AB-44F5-B23B-25E8F7DDC89B",
2112 "kind" : "video",
2113 "linkId" : "02AB076D-1732-49F9-AA10-410FA9A3E78F",
2114 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
2115 "muted" : false,
2116 "newShot" : false,
2117 "speed" : 1,
2118 "srcIn" : 571.35593220339,
2119 "start" : 212.61016949152543,
2120 "track" : "v0"
2121 },
2122 {
2123 "duration" : 6.406779661016941,
2124 "fadeIn" : 0,
2125 "fadeOut" : 0,
2126 "id" : "8C7D77E2-3FA1-41F1-884C-63C516C4AE33",
2127 "kind" : "audio",
2128 "linkId" : "02AB076D-1732-49F9-AA10-410FA9A3E78F",
2129 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
2130 "muted" : true,
2131 "newShot" : false,
2132 "speed" : 1,
2133 "srcIn" : 571.272060662049,
2134 "start" : 212.61016949152543,
2135 "track" : "v1"
2136 },
2137 {
2138 "duration" : 6.406779661016941,
2139 "fadeIn" : 0,
2140 "fadeOut" : 0,
2141 "id" : "21A1243A-B2AF-4637-B9E4-3BA86980E892",
2142 "kind" : "audio",
2143 "linkId" : "02AB076D-1732-49F9-AA10-410FA9A3E78F",
2144 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
2145 "muted" : false,
2146 "newShot" : false,
2147 "speed" : 1,
2148 "srcIn" : 571.3187369652799,
2149 "start" : 212.61016949152543,
2150 "track" : "v2"
2151 },
2152 {
2153 "duration" : 6.406779661016941,
2154 "fadeIn" : 0,
2155 "fadeOut" : 0,
2156 "id" : "F361620E-6686-4423-BFBD-736FF93CDEC5",
2157 "kind" : "video",
2158 "linkId" : "02AB076D-1732-49F9-AA10-410FA9A3E78F",
2159 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
2160 "muted" : false,
2161 "newShot" : false,
2162 "speed" : 1,
2163 "srcIn" : 571.1821298290517,
2164 "start" : 212.61016949152543,
2165 "track" : "v3"
2166 },
2167 {
2168 "duration" : 6.406779661016941,
2169 "fadeIn" : 0,
2170 "fadeOut" : 0,
2171 "id" : "2A763F6C-BEF9-435E-8F42-C72F8F08381A",
2172 "kind" : "video",
2173 "linkId" : "02AB076D-1732-49F9-AA10-410FA9A3E78F",
2174 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
2175 "muted" : false,
2176 "newShot" : false,
2177 "speed" : 1,
2178 "srcIn" : 571.1821252450529,
2179 "start" : 212.61016949152543,
2180 "track" : "v4"
2181 },
2182 {
2183 "duration" : 4.610169491525454,
2184 "fadeIn" : 0,
2185 "fadeOut" : 0,
2186 "id" : "ADAD35C0-6E8C-4D37-B4E4-D2859B73BE27",
2187 "kind" : "video",
2188 "linkId" : "3473CFA9-BD18-42DA-AD05-6C5914B914B6",
2189 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
2190 "muted" : false,
2191 "newShot" : false,
2192 "speed" : 1,
2193 "srcIn" : 584.813559322034,
2194 "start" : 222.06779661016947,
2195 "track" : "v0"
2196 },
2197 {
2198 "duration" : 4.610169491525454,
2199 "fadeIn" : 0,
2200 "fadeOut" : 0,
2201 "id" : "86415894-FDC6-4F60-A9B8-0954DBA0D01D",
2202 "kind" : "audio",
2203 "linkId" : "3473CFA9-BD18-42DA-AD05-6C5914B914B6",
2204 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
2205 "muted" : true,
2206 "newShot" : false,
2207 "speed" : 1,
2208 "srcIn" : 584.729687780693,
2209 "start" : 222.06779661016947,
2210 "track" : "v1"
2211 },
2212 {
2213 "duration" : 4.610169491525454,
2214 "fadeIn" : 0,
2215 "fadeOut" : 0,
2216 "id" : "48CD7335-7777-4C44-A35A-17CFAA490549",
2217 "kind" : "audio",
2218 "linkId" : "3473CFA9-BD18-42DA-AD05-6C5914B914B6",
2219 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
2220 "muted" : false,
2221 "newShot" : false,
2222 "speed" : 1,
2223 "srcIn" : 584.7763640839239,
2224 "start" : 222.06779661016947,
2225 "track" : "v2"
2226 },
2227 {
2228 "duration" : 4.610169491525454,
2229 "fadeIn" : 0,
2230 "fadeOut" : 0,
2231 "id" : "54BD8C49-005E-4485-9DC1-7F916CF8BDD3",
2232 "kind" : "video",
2233 "linkId" : "3473CFA9-BD18-42DA-AD05-6C5914B914B6",
2234 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
2235 "muted" : false,
2236 "newShot" : false,
2237 "speed" : 1,
2238 "srcIn" : 584.6397569476958,
2239 "start" : 222.06779661016947,
2240 "track" : "v3"
2241 },
2242 {
2243 "duration" : 4.610169491525454,
2244 "fadeIn" : 0,
2245 "fadeOut" : 0,
2246 "id" : "23AEC066-77D9-4BA3-8117-EE7A8161CBBD",
2247 "kind" : "video",
2248 "linkId" : "3473CFA9-BD18-42DA-AD05-6C5914B914B6",
2249 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
2250 "muted" : false,
2251 "newShot" : false,
2252 "speed" : 1,
2253 "srcIn" : 584.639752363697,
2254 "start" : 222.06779661016947,
2255 "track" : "v4"
2256 },
2257 {
2258 "duration" : 2.237288135593218,
2259 "fadeIn" : 0,
2260 "fadeOut" : 0,
2261 "id" : "0991B547-CD7C-4CC3-87EC-AD16FF79CEEC",
2262 "kind" : "video",
2263 "linkId" : "02A86E0B-9E9F-4742-A7B2-44024A6F3E6B",
2264 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
2265 "muted" : false,
2266 "newShot" : false,
2267 "speed" : 1,
2268 "srcIn" : 577.7627118644069,
2269 "start" : 219.01694915254237,
2270 "track" : "v0"
2271 },
2272 {
2273 "duration" : 2.237288135593218,
2274 "fadeIn" : 0,
2275 "fadeOut" : 0,
2276 "id" : "A7485496-22C3-4CB6-8034-93F5ACE90052",
2277 "kind" : "audio",
2278 "linkId" : "02A86E0B-9E9F-4742-A7B2-44024A6F3E6B",
2279 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
2280 "muted" : true,
2281 "newShot" : false,
2282 "speed" : 1,
2283 "srcIn" : 577.6788403230659,
2284 "start" : 219.01694915254237,
2285 "track" : "v1"
2286 },
2287 {
2288 "duration" : 2.237288135593218,
2289 "fadeIn" : 0,
2290 "fadeOut" : 0,
2291 "id" : "A8426C1F-0305-45DF-A0C4-57CB7AD56360",
2292 "kind" : "audio",
2293 "linkId" : "02A86E0B-9E9F-4742-A7B2-44024A6F3E6B",
2294 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
2295 "muted" : false,
2296 "newShot" : false,
2297 "speed" : 1,
2298 "srcIn" : 577.7255166262968,
2299 "start" : 219.01694915254237,
2300 "track" : "v2"
2301 },
2302 {
2303 "duration" : 2.237288135593218,
2304 "fadeIn" : 0,
2305 "fadeOut" : 0,
2306 "id" : "F0053E8C-8FC8-47E2-8431-73026DBACEC8",
2307 "kind" : "video",
2308 "linkId" : "02A86E0B-9E9F-4742-A7B2-44024A6F3E6B",
2309 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
2310 "muted" : false,
2311 "newShot" : false,
2312 "speed" : 1,
2313 "srcIn" : 577.5889094900687,
2314 "start" : 219.01694915254237,
2315 "track" : "v3"
2316 },
2317 {
2318 "duration" : 2.237288135593218,
2319 "fadeIn" : 0,
2320 "fadeOut" : 0,
2321 "id" : "EF04E82D-AA3C-41CA-B856-4A6914526EC1",
2322 "kind" : "video",
2323 "linkId" : "02A86E0B-9E9F-4742-A7B2-44024A6F3E6B",
2324 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
2325 "muted" : false,
2326 "newShot" : false,
2327 "speed" : 1,
2328 "srcIn" : 577.5889049060698,
2329 "start" : 219.01694915254237,
2330 "track" : "v4"
2331 },
2332 {
2333 "duration" : 0.33898305084744607,
2334 "fadeIn" : 0,
2335 "fadeOut" : 0,
2336 "id" : "CABADC3E-FA59-4C65-87F2-13BFBE96E557",
2337 "kind" : "video",
2338 "linkId" : "00C998B7-CF37-4D26-B09F-6C36B9B32D82",
2339 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
2340 "muted" : false,
2341 "newShot" : false,
2342 "speed" : 1,
2343 "srcIn" : 582.4067796610171,
2344 "start" : 221.25423728813558,
2345 "track" : "v0"
2346 },
2347 {
2348 "duration" : 0.33898305084744607,
2349 "fadeIn" : 0,
2350 "fadeOut" : 0,
2351 "id" : "FD19E6CE-504A-42B5-96A0-1CD953096F29",
2352 "kind" : "audio",
2353 "linkId" : "00C998B7-CF37-4D26-B09F-6C36B9B32D82",
2354 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
2355 "muted" : true,
2356 "newShot" : false,
2357 "speed" : 1,
2358 "srcIn" : 582.3229081196761,
2359 "start" : 221.25423728813558,
2360 "track" : "v1"
2361 },
2362 {
2363 "duration" : 0.33898305084744607,
2364 "fadeIn" : 0,
2365 "fadeOut" : 0,
2366 "id" : "A112502F-0EDC-4D49-9AB8-9ACA09DFCDE5",
2367 "kind" : "audio",
2368 "linkId" : "00C998B7-CF37-4D26-B09F-6C36B9B32D82",
2369 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
2370 "muted" : false,
2371 "newShot" : false,
2372 "speed" : 1,
2373 "srcIn" : 582.369584422907,
2374 "start" : 221.25423728813558,
2375 "track" : "v2"
2376 },
2377 {
2378 "duration" : 0.33898305084744607,
2379 "fadeIn" : 0,
2380 "fadeOut" : 0,
2381 "id" : "F01A73DE-9729-484B-89E7-719D0391276E",
2382 "kind" : "video",
2383 "linkId" : "00C998B7-CF37-4D26-B09F-6C36B9B32D82",
2384 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
2385 "muted" : false,
2386 "newShot" : false,
2387 "speed" : 1,
2388 "srcIn" : 582.2329772866789,
2389 "start" : 221.25423728813558,
2390 "track" : "v3"
2391 },
2392 {
2393 "duration" : 0.33898305084744607,
2394 "fadeIn" : 0,
2395 "fadeOut" : 0,
2396 "id" : "627B2BC3-48D0-4F6C-A129-90620B0EB3FD",
2397 "kind" : "video",
2398 "linkId" : "00C998B7-CF37-4D26-B09F-6C36B9B32D82",
2399 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
2400 "muted" : false,
2401 "newShot" : false,
2402 "speed" : 1,
2403 "srcIn" : 582.2329727026801,
2404 "start" : 221.25423728813558,
2405 "track" : "v4"
2406 },
2407 {
2408 "duration" : 0.47457627118643586,
2409 "fadeIn" : 0,
2410 "fadeOut" : 0,
2411 "id" : "DC2DEF3C-5F2B-476E-AF27-8A22D6D9AED7",
2412 "kind" : "video",
2413 "linkId" : "699AF368-3D93-47C1-8338-C3D28F300CB5",
2414 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
2415 "muted" : false,
2416 "newShot" : false,
2417 "speed" : 1,
2418 "srcIn" : 583.1864406779663,
2419 "start" : 221.59322033898303,
2420 "track" : "v0"
2421 },
2422 {
2423 "duration" : 0.47457627118643586,
2424 "fadeIn" : 0,
2425 "fadeOut" : 0,
2426 "id" : "F714792D-CAB4-45F1-9BD8-36A1DF081EB8",
2427 "kind" : "audio",
2428 "linkId" : "699AF368-3D93-47C1-8338-C3D28F300CB5",
2429 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
2430 "muted" : true,
2431 "newShot" : false,
2432 "speed" : 1,
2433 "srcIn" : 583.1025691366252,
2434 "start" : 221.59322033898303,
2435 "track" : "v1"
2436 },
2437 {
2438 "duration" : 0.47457627118643586,
2439 "fadeIn" : 0,
2440 "fadeOut" : 0,
2441 "id" : "BA43BF71-4C54-4370-863D-D0B445C4A4DF",
2442 "kind" : "audio",
2443 "linkId" : "699AF368-3D93-47C1-8338-C3D28F300CB5",
2444 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
2445 "muted" : false,
2446 "newShot" : false,
2447 "speed" : 1,
2448 "srcIn" : 583.1492454398561,
2449 "start" : 221.59322033898303,
2450 "track" : "v2"
2451 },
2452 {
2453 "duration" : 0.47457627118643586,
2454 "fadeIn" : 0,
2455 "fadeOut" : 0,
2456 "id" : "4BAC786B-BDD8-4676-9B29-2A7AC95177F6",
2457 "kind" : "video",
2458 "linkId" : "699AF368-3D93-47C1-8338-C3D28F300CB5",
2459 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
2460 "muted" : false,
2461 "newShot" : false,
2462 "speed" : 1,
2463 "srcIn" : 583.012638303628,
2464 "start" : 221.59322033898303,
2465 "track" : "v3"
2466 },
2467 {
2468 "duration" : 0.47457627118643586,
2469 "fadeIn" : 0,
2470 "fadeOut" : 0,
2471 "id" : "987F92AC-8229-449F-BA8F-BB01CA7CADC3",
2472 "kind" : "video",
2473 "linkId" : "699AF368-3D93-47C1-8338-C3D28F300CB5",
2474 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
2475 "muted" : false,
2476 "newShot" : false,
2477 "speed" : 1,
2478 "srcIn" : 583.0126337196292,
2479 "start" : 221.59322033898303,
2480 "track" : "v4"
2481 },
2482 {
2483 "duration" : 4.813559322033882,
2484 "fadeIn" : 0,
2485 "fadeOut" : 0,
2486 "id" : "8B6B0536-EAC5-4272-9106-03B9E89E36AB",
2487 "kind" : "video",
2488 "linkId" : "0F2B0909-5C81-4A61-BBD8-6CD3ECC9563D",
2489 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
2490 "muted" : false,
2491 "newShot" : false,
2492 "speed" : 1,
2493 "srcIn" : 589.6949152542375,
2494 "start" : 226.67796610169492,
2495 "track" : "v0"
2496 },
2497 {
2498 "duration" : 4.813559322033882,
2499 "fadeIn" : 0,
2500 "fadeOut" : 0,
2501 "id" : "DD50D9F8-4C08-47DA-AB75-382FE215D3C0",
2502 "kind" : "audio",
2503 "linkId" : "0F2B0909-5C81-4A61-BBD8-6CD3ECC9563D",
2504 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
2505 "muted" : true,
2506 "newShot" : false,
2507 "speed" : 1,
2508 "srcIn" : 589.6110437128964,
2509 "start" : 226.67796610169492,
2510 "track" : "v1"
2511 },
2512 {
2513 "duration" : 4.813559322033882,
2514 "fadeIn" : 0,
2515 "fadeOut" : 0,
2516 "id" : "A2113A02-7099-45C4-990B-263F71229BAA",
2517 "kind" : "audio",
2518 "linkId" : "0F2B0909-5C81-4A61-BBD8-6CD3ECC9563D",
2519 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
2520 "muted" : false,
2521 "newShot" : false,
2522 "speed" : 1,
2523 "srcIn" : 589.6577200161273,
2524 "start" : 226.67796610169492,
2525 "track" : "v2"
2526 },
2527 {
2528 "duration" : 4.813559322033882,
2529 "fadeIn" : 0,
2530 "fadeOut" : 0,
2531 "id" : "72B5DADE-2448-445A-A7AB-6BA636E753FD",
2532 "kind" : "video",
2533 "linkId" : "0F2B0909-5C81-4A61-BBD8-6CD3ECC9563D",
2534 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
2535 "muted" : false,
2536 "newShot" : false,
2537 "speed" : 1,
2538 "srcIn" : 589.5211128798992,
2539 "start" : 226.67796610169492,
2540 "track" : "v3"
2541 },
2542 {
2543 "duration" : 4.813559322033882,
2544 "fadeIn" : 0,
2545 "fadeOut" : 0,
2546 "id" : "8CC675CB-9ABE-45FF-B384-C7AC4D78F091",
2547 "kind" : "video",
2548 "linkId" : "0F2B0909-5C81-4A61-BBD8-6CD3ECC9563D",
2549 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
2550 "muted" : false,
2551 "newShot" : false,
2552 "speed" : 1,
2553 "srcIn" : 589.5211082959004,
2554 "start" : 226.67796610169492,
2555 "track" : "v4"
2556 },
2557 {
2558 "duration" : 4.81355932203391,
2559 "fadeIn" : 0,
2560 "fadeOut" : 0,
2561 "id" : "EF0E9A54-F218-4203-8874-E267C94F96ED",
2562 "kind" : "video",
2563 "linkId" : "C9B743A1-0C1E-4522-9FAE-C8D05A31C193",
2564 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
2565 "muted" : false,
2566 "newShot" : false,
2567 "speed" : 1,
2568 "srcIn" : 594.5084745762713,
2569 "start" : 231.4915254237288,
2570 "track" : "v0"
2571 },
2572 {
2573 "duration" : 4.81355932203391,
2574 "fadeIn" : 0,
2575 "fadeOut" : 0,
2576 "id" : "3E1A7EAE-EA47-443C-A5DF-51295361CA28",
2577 "kind" : "audio",
2578 "linkId" : "C9B743A1-0C1E-4522-9FAE-C8D05A31C193",
2579 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
2580 "muted" : true,
2581 "newShot" : false,
2582 "speed" : 1,
2583 "srcIn" : 594.4246030349302,
2584 "start" : 231.4915254237288,
2585 "track" : "v1"
2586 },
2587 {
2588 "duration" : 4.81355932203391,
2589 "fadeIn" : 0,
2590 "fadeOut" : 0,
2591 "id" : "63928E72-332C-4FF0-AB20-7C4D9674F55F",
2592 "kind" : "audio",
2593 "linkId" : "C9B743A1-0C1E-4522-9FAE-C8D05A31C193",
2594 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
2595 "muted" : false,
2596 "newShot" : false,
2597 "speed" : 1,
2598 "srcIn" : 594.4712793381611,
2599 "start" : 231.4915254237288,
2600 "track" : "v2"
2601 },
2602 {
2603 "duration" : 4.81355932203391,
2604 "fadeIn" : 0,
2605 "fadeOut" : 0,
2606 "id" : "AF037655-401A-4032-866C-0E9B1BB6EAC8",
2607 "kind" : "video",
2608 "linkId" : "C9B743A1-0C1E-4522-9FAE-C8D05A31C193",
2609 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
2610 "muted" : false,
2611 "newShot" : false,
2612 "speed" : 1,
2613 "srcIn" : 594.334672201933,
2614 "start" : 231.4915254237288,
2615 "track" : "v3"
2616 },
2617 {
2618 "duration" : 4.81355932203391,
2619 "fadeIn" : 0,
2620 "fadeOut" : 0,
2621 "id" : "AF0F661D-9868-49AB-9276-E20CC57DBC28",
2622 "kind" : "video",
2623 "linkId" : "C9B743A1-0C1E-4522-9FAE-C8D05A31C193",
2624 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
2625 "muted" : false,
2626 "newShot" : false,
2627 "speed" : 1,
2628 "srcIn" : 594.3346676179342,
2629 "start" : 231.4915254237288,
2630 "track" : "v4"
2631 },
2632 {
2633 "duration" : 2.13559322033899,
2634 "fadeIn" : 0,
2635 "fadeOut" : 0,
2636 "id" : "EBA9BB70-0CEA-4170-9DBC-65B5D2FE9AD5",
2637 "kind" : "video",
2638 "linkId" : "4AAA7ABF-1577-4C2E-BF38-8705136C6450",
2639 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
2640 "muted" : false,
2641 "newShot" : false,
2642 "speed" : 1,
2643 "srcIn" : 616.8813559322035,
2644 "start" : 236.3050847457627,
2645 "track" : "v0"
2646 },
2647 {
2648 "duration" : 2.13559322033899,
2649 "fadeIn" : 0,
2650 "fadeOut" : 0,
2651 "id" : "A8D715D7-2371-400B-A53A-90BFA9CA14E1",
2652 "kind" : "audio",
2653 "linkId" : "4AAA7ABF-1577-4C2E-BF38-8705136C6450",
2654 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
2655 "muted" : true,
2656 "newShot" : false,
2657 "speed" : 1,
2658 "srcIn" : 616.7974843908625,
2659 "start" : 236.3050847457627,
2660 "track" : "v1"
2661 },
2662 {
2663 "duration" : 2.13559322033899,
2664 "fadeIn" : 0,
2665 "fadeOut" : 0,
2666 "id" : "1EC0AD88-9036-49C3-99E3-32F0047EB028",
2667 "kind" : "audio",
2668 "linkId" : "4AAA7ABF-1577-4C2E-BF38-8705136C6450",
2669 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
2670 "muted" : false,
2671 "newShot" : false,
2672 "speed" : 1,
2673 "srcIn" : 616.8441606940934,
2674 "start" : 236.3050847457627,
2675 "track" : "v2"
2676 },
2677 {
2678 "duration" : 2.13559322033899,
2679 "fadeIn" : 0,
2680 "fadeOut" : 0,
2681 "id" : "A1C1C0D1-CF81-42A4-8930-B00C4C02387B",
2682 "kind" : "video",
2683 "linkId" : "4AAA7ABF-1577-4C2E-BF38-8705136C6450",
2684 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
2685 "muted" : false,
2686 "newShot" : false,
2687 "speed" : 1,
2688 "srcIn" : 616.7075535578653,
2689 "start" : 236.3050847457627,
2690 "track" : "v3"
2691 },
2692 {
2693 "duration" : 2.13559322033899,
2694 "fadeIn" : 0,
2695 "fadeOut" : 0,
2696 "id" : "9694A094-9FA8-4451-BBC8-3A505816AB5C",
2697 "kind" : "video",
2698 "linkId" : "4AAA7ABF-1577-4C2E-BF38-8705136C6450",
2699 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
2700 "muted" : false,
2701 "newShot" : false,
2702 "speed" : 1,
2703 "srcIn" : 616.7075489738664,
2704 "start" : 236.3050847457627,
2705 "track" : "v4"
2706 },
2707 {
2708 "duration" : 2.2033898305084563,
2709 "fadeIn" : 0,
2710 "fadeOut" : 0,
2711 "id" : "2DFE5FB3-850C-408B-888E-1B117520E619",
2712 "kind" : "video",
2713 "linkId" : "20A4E34D-C55C-439E-9743-C91BA434CB07",
2714 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
2715 "muted" : false,
2716 "newShot" : false,
2717 "speed" : 1,
2718 "srcIn" : 623.1864406779663,
2719 "start" : 238.4406779661017,
2720 "track" : "v0"
2721 },
2722 {
2723 "duration" : 2.2033898305084563,
2724 "fadeIn" : 0,
2725 "fadeOut" : 0,
2726 "id" : "1C5AFA4B-AB07-45EB-9012-D6817BCA669F",
2727 "kind" : "audio",
2728 "linkId" : "20A4E34D-C55C-439E-9743-C91BA434CB07",
2729 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
2730 "muted" : true,
2731 "newShot" : false,
2732 "speed" : 1,
2733 "srcIn" : 623.1025691366252,
2734 "start" : 238.4406779661017,
2735 "track" : "v1"
2736 },
2737 {
2738 "duration" : 2.2033898305084563,
2739 "fadeIn" : 0,
2740 "fadeOut" : 0,
2741 "id" : "FA4004F4-5AA3-4F29-999B-41460017B48F",
2742 "kind" : "audio",
2743 "linkId" : "20A4E34D-C55C-439E-9743-C91BA434CB07",
2744 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
2745 "muted" : false,
2746 "newShot" : false,
2747 "speed" : 1,
2748 "srcIn" : 623.1492454398561,
2749 "start" : 238.4406779661017,
2750 "track" : "v2"
2751 },
2752 {
2753 "duration" : 2.2033898305084563,
2754 "fadeIn" : 0,
2755 "fadeOut" : 0,
2756 "id" : "F4539CE1-8350-4649-A8D5-75DEC9A85285",
2757 "kind" : "video",
2758 "linkId" : "20A4E34D-C55C-439E-9743-C91BA434CB07",
2759 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
2760 "muted" : false,
2761 "newShot" : false,
2762 "speed" : 1,
2763 "srcIn" : 623.012638303628,
2764 "start" : 238.4406779661017,
2765 "track" : "v3"
2766 },
2767 {
2768 "duration" : 2.2033898305084563,
2769 "fadeIn" : 0,
2770 "fadeOut" : 0,
2771 "id" : "B9D12715-E647-49E2-A68A-393FDA9865DF",
2772 "kind" : "video",
2773 "linkId" : "20A4E34D-C55C-439E-9743-C91BA434CB07",
2774 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
2775 "muted" : false,
2776 "newShot" : false,
2777 "speed" : 1,
2778 "srcIn" : 623.0126337196292,
2779 "start" : 238.4406779661017,
2780 "track" : "v4"
2781 },
2782 {
2783 "duration" : 6.27118644067798,
2784 "fadeIn" : 0,
2785 "fadeOut" : 0,
2786 "id" : "92455958-0ACB-484E-B1D9-19C02F73901A",
2787 "kind" : "video",
2788 "linkId" : "FB7680B4-9AF3-40EC-B7FB-010031D66837",
2789 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
2790 "muted" : false,
2791 "newShot" : false,
2792 "speed" : 1,
2793 "srcIn" : 627.491525423729,
2794 "start" : 240.64406779661016,
2795 "track" : "v0"
2796 },
2797 {
2798 "duration" : 6.27118644067798,
2799 "fadeIn" : 0,
2800 "fadeOut" : 0,
2801 "id" : "DB167161-A9FA-4F64-92F8-79A205627364",
2802 "kind" : "audio",
2803 "linkId" : "FB7680B4-9AF3-40EC-B7FB-010031D66837",
2804 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
2805 "muted" : true,
2806 "newShot" : false,
2807 "speed" : 1,
2808 "srcIn" : 627.4076538823879,
2809 "start" : 240.64406779661016,
2810 "track" : "v1"
2811 },
2812 {
2813 "duration" : 6.27118644067798,
2814 "fadeIn" : 0,
2815 "fadeOut" : 0,
2816 "id" : "D53DC51B-6ED3-43B5-90CF-F263E6A8EF0F",
2817 "kind" : "audio",
2818 "linkId" : "FB7680B4-9AF3-40EC-B7FB-010031D66837",
2819 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
2820 "muted" : false,
2821 "newShot" : false,
2822 "speed" : 1,
2823 "srcIn" : 627.4543301856188,
2824 "start" : 240.64406779661016,
2825 "track" : "v2"
2826 },
2827 {
2828 "duration" : 6.27118644067798,
2829 "fadeIn" : 0,
2830 "fadeOut" : 0,
2831 "id" : "0F96EE3E-4FE2-417F-9760-F24B131C949C",
2832 "kind" : "video",
2833 "linkId" : "FB7680B4-9AF3-40EC-B7FB-010031D66837",
2834 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
2835 "muted" : false,
2836 "newShot" : false,
2837 "speed" : 1,
2838 "srcIn" : 627.3177230493907,
2839 "start" : 240.64406779661016,
2840 "track" : "v3"
2841 },
2842 {
2843 "duration" : 6.27118644067798,
2844 "fadeIn" : 0,
2845 "fadeOut" : 0,
2846 "id" : "473DAC6E-6B6F-4395-AA04-1D2A9448459F",
2847 "kind" : "video",
2848 "linkId" : "FB7680B4-9AF3-40EC-B7FB-010031D66837",
2849 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
2850 "muted" : false,
2851 "newShot" : false,
2852 "speed" : 1,
2853 "srcIn" : 627.3177184653919,
2854 "start" : 240.64406779661016,
2855 "track" : "v4"
2856 },
2857 {
2858 "duration" : 5.288135593220346,
2859 "fadeIn" : 0,
2860 "fadeOut" : 0,
2861 "id" : "04295A05-E2E5-4A94-A70F-1C9DCC3ACF86",
2862 "kind" : "video",
2863 "linkId" : "EDE7F931-7884-4F1E-8EFB-E8B00DCB5A07",
2864 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
2865 "muted" : false,
2866 "newShot" : false,
2867 "speed" : 1,
2868 "srcIn" : 641.220338983051,
2869 "start" : 246.91525423728814,
2870 "track" : "v0"
2871 },
2872 {
2873 "duration" : 5.288135593220346,
2874 "fadeIn" : 0,
2875 "fadeOut" : 0,
2876 "id" : "A4446EF1-6B91-4D7B-9285-3C4E42A475ED",
2877 "kind" : "audio",
2878 "linkId" : "EDE7F931-7884-4F1E-8EFB-E8B00DCB5A07",
2879 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
2880 "muted" : true,
2881 "newShot" : false,
2882 "speed" : 1,
2883 "srcIn" : 641.1364674417099,
2884 "start" : 246.91525423728814,
2885 "track" : "v1"
2886 },
2887 {
2888 "duration" : 5.288135593220346,
2889 "fadeIn" : 0,
2890 "fadeOut" : 0,
2891 "id" : "37E22D5C-E179-4CD6-9C69-C6B281846229",
2892 "kind" : "audio",
2893 "linkId" : "EDE7F931-7884-4F1E-8EFB-E8B00DCB5A07",
2894 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
2895 "muted" : false,
2896 "newShot" : false,
2897 "speed" : 1,
2898 "srcIn" : 641.1831437449408,
2899 "start" : 246.91525423728814,
2900 "track" : "v2"
2901 },
2902 {
2903 "duration" : 5.288135593220346,
2904 "fadeIn" : 0,
2905 "fadeOut" : 0,
2906 "id" : "0D2B5334-E420-4746-B09A-110DA7EE6BA5",
2907 "kind" : "video",
2908 "linkId" : "EDE7F931-7884-4F1E-8EFB-E8B00DCB5A07",
2909 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
2910 "muted" : false,
2911 "newShot" : false,
2912 "speed" : 1,
2913 "srcIn" : 641.0465366087127,
2914 "start" : 246.91525423728814,
2915 "track" : "v3"
2916 },
2917 {
2918 "duration" : 5.288135593220346,
2919 "fadeIn" : 0,
2920 "fadeOut" : 0,
2921 "id" : "95AA48BC-4C4B-4F4B-B29F-FB2E01943DE6",
2922 "kind" : "video",
2923 "linkId" : "EDE7F931-7884-4F1E-8EFB-E8B00DCB5A07",
2924 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
2925 "muted" : false,
2926 "newShot" : false,
2927 "speed" : 1,
2928 "srcIn" : 641.0465320247139,
2929 "start" : 246.91525423728814,
2930 "track" : "v4"
2931 },
2932 {
2933 "duration" : 3.3898305084745743,
2934 "fadeIn" : 0,
2935 "fadeOut" : 0,
2936 "id" : "36A8E6B0-4985-4EBD-BD50-2621E6D840E5",
2937 "kind" : "video",
2938 "linkId" : "E1D1EEBE-B0FA-47B6-B02B-0D25E3E7C904",
2939 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
2940 "muted" : false,
2941 "newShot" : false,
2942 "speed" : 1,
2943 "srcIn" : 649.4237288135594,
2944 "start" : 252.20338983050848,
2945 "track" : "v0"
2946 },
2947 {
2948 "duration" : 3.3898305084745743,
2949 "fadeIn" : 0,
2950 "fadeOut" : 0,
2951 "id" : "CDDA95CC-536D-4225-AAC3-470904596C1D",
2952 "kind" : "audio",
2953 "linkId" : "E1D1EEBE-B0FA-47B6-B02B-0D25E3E7C904",
2954 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
2955 "muted" : true,
2956 "newShot" : false,
2957 "speed" : 1,
2958 "srcIn" : 649.3398572722183,
2959 "start" : 252.20338983050848,
2960 "track" : "v1"
2961 },
2962 {
2963 "duration" : 3.3898305084745743,
2964 "fadeIn" : 0,
2965 "fadeOut" : 0,
2966 "id" : "79AC6946-AD60-4D7C-9B74-BAF2C5043ED9",
2967 "kind" : "audio",
2968 "linkId" : "E1D1EEBE-B0FA-47B6-B02B-0D25E3E7C904",
2969 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
2970 "muted" : false,
2971 "newShot" : false,
2972 "speed" : 1,
2973 "srcIn" : 649.3865335754492,
2974 "start" : 252.20338983050848,
2975 "track" : "v2"
2976 },
2977 {
2978 "duration" : 3.3898305084745743,
2979 "fadeIn" : 0,
2980 "fadeOut" : 0,
2981 "id" : "266B1043-1A29-4485-85C8-9921E2D077FE",
2982 "kind" : "video",
2983 "linkId" : "E1D1EEBE-B0FA-47B6-B02B-0D25E3E7C904",
2984 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
2985 "muted" : false,
2986 "newShot" : false,
2987 "speed" : 1,
2988 "srcIn" : 649.2499264392211,
2989 "start" : 252.20338983050848,
2990 "track" : "v3"
2991 },
2992 {
2993 "duration" : 3.3898305084745743,
2994 "fadeIn" : 0,
2995 "fadeOut" : 0,
2996 "id" : "F9D93C0A-48FD-4149-B214-E2648C026BB8",
2997 "kind" : "video",
2998 "linkId" : "E1D1EEBE-B0FA-47B6-B02B-0D25E3E7C904",
2999 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
3000 "muted" : false,
3001 "newShot" : false,
3002 "speed" : 1,
3003 "srcIn" : 649.2499218552223,
3004 "start" : 252.20338983050848,
3005 "track" : "v4"
3006 },
3007 {
3008 "duration" : 8.9491525423729,
3009 "fadeIn" : 0,
3010 "fadeOut" : 0,
3011 "id" : "E13CDB86-D0E7-4219-891E-396AF72F7200",
3012 "kind" : "video",
3013 "linkId" : "E0DD6E6F-D7C7-4743-ADC2-D8787163B0C3",
3014 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
3015 "muted" : false,
3016 "newShot" : false,
3017 "speed" : 1,
3018 "srcIn" : 664.1016949152543,
3019 "start" : 255.59322033898306,
3020 "track" : "v0"
3021 },
3022 {
3023 "duration" : 8.9491525423729,
3024 "fadeIn" : 0,
3025 "fadeOut" : 0,
3026 "id" : "CF093561-83EC-4803-9CD7-E1D07429E06C",
3027 "kind" : "audio",
3028 "linkId" : "E0DD6E6F-D7C7-4743-ADC2-D8787163B0C3",
3029 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
3030 "muted" : true,
3031 "newShot" : false,
3032 "speed" : 1,
3033 "srcIn" : 664.0178233739132,
3034 "start" : 255.59322033898306,
3035 "track" : "v1"
3036 },
3037 {
3038 "duration" : 8.9491525423729,
3039 "fadeIn" : 0,
3040 "fadeOut" : 0,
3041 "id" : "D7A74DDC-3F2A-4E02-B350-45455C959B82",
3042 "kind" : "audio",
3043 "linkId" : "E0DD6E6F-D7C7-4743-ADC2-D8787163B0C3",
3044 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
3045 "muted" : false,
3046 "newShot" : false,
3047 "speed" : 1,
3048 "srcIn" : 664.0644996771441,
3049 "start" : 255.59322033898306,
3050 "track" : "v2"
3051 },
3052 {
3053 "duration" : 8.9491525423729,
3054 "fadeIn" : 0,
3055 "fadeOut" : 0,
3056 "id" : "95E67BFD-C59E-4F99-92B5-027C3BC13CC3",
3057 "kind" : "video",
3058 "linkId" : "E0DD6E6F-D7C7-4743-ADC2-D8787163B0C3",
3059 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
3060 "muted" : false,
3061 "newShot" : false,
3062 "speed" : 1,
3063 "srcIn" : 663.927892540916,
3064 "start" : 255.59322033898306,
3065 "track" : "v3"
3066 },
3067 {
3068 "duration" : 8.9491525423729,
3069 "fadeIn" : 0,
3070 "fadeOut" : 0,
3071 "id" : "AE9DDFED-5BE9-44A5-8349-623A8C1F1587",
3072 "kind" : "video",
3073 "linkId" : "E0DD6E6F-D7C7-4743-ADC2-D8787163B0C3",
3074 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
3075 "muted" : false,
3076 "newShot" : false,
3077 "speed" : 1,
3078 "srcIn" : 663.9278879569172,
3079 "start" : 255.59322033898306,
3080 "track" : "v4"
3081 },
3082 {
3083 "duration" : 2.4067796610169125,
3084 "fadeIn" : 0,
3085 "fadeOut" : 0,
3086 "id" : "6929AB44-D977-4A42-9DD4-69D4E759E4B7",
3087 "kind" : "video",
3088 "linkId" : "B1E3CEAB-46C9-4EF7-8BC4-F413D2FDD063",
3089 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
3090 "muted" : false,
3091 "newShot" : false,
3092 "speed" : 1,
3093 "srcIn" : 676.7796610169491,
3094 "start" : 264.54237288135596,
3095 "track" : "v0"
3096 },
3097 {
3098 "duration" : 2.4067796610169125,
3099 "fadeIn" : 0,
3100 "fadeOut" : 0,
3101 "id" : "F6BA54DA-3AAD-48D5-A132-C946F6FF5BBE",
3102 "kind" : "audio",
3103 "linkId" : "B1E3CEAB-46C9-4EF7-8BC4-F413D2FDD063",
3104 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
3105 "muted" : true,
3106 "newShot" : false,
3107 "speed" : 1,
3108 "srcIn" : 676.6957894756081,
3109 "start" : 264.54237288135596,
3110 "track" : "v1"
3111 },
3112 {
3113 "duration" : 2.4067796610169125,
3114 "fadeIn" : 0,
3115 "fadeOut" : 0,
3116 "id" : "95E0BF0A-76D3-4341-87C0-4C3855C6AD49",
3117 "kind" : "audio",
3118 "linkId" : "B1E3CEAB-46C9-4EF7-8BC4-F413D2FDD063",
3119 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
3120 "muted" : false,
3121 "newShot" : false,
3122 "speed" : 1,
3123 "srcIn" : 676.742465778839,
3124 "start" : 264.54237288135596,
3125 "track" : "v2"
3126 },
3127 {
3128 "duration" : 2.4067796610169125,
3129 "fadeIn" : 0,
3130 "fadeOut" : 0,
3131 "id" : "56B8138F-5F33-4EC1-A202-59403546D6C5",
3132 "kind" : "video",
3133 "linkId" : "B1E3CEAB-46C9-4EF7-8BC4-F413D2FDD063",
3134 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
3135 "muted" : false,
3136 "newShot" : false,
3137 "speed" : 1,
3138 "srcIn" : 676.6058586426109,
3139 "start" : 264.54237288135596,
3140 "track" : "v3"
3141 },
3142 {
3143 "duration" : 2.4067796610169125,
3144 "fadeIn" : 0,
3145 "fadeOut" : 0,
3146 "id" : "7C722B8F-E78E-45E3-8A2E-F30FF2127283",
3147 "kind" : "video",
3148 "linkId" : "B1E3CEAB-46C9-4EF7-8BC4-F413D2FDD063",
3149 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
3150 "muted" : false,
3151 "newShot" : false,
3152 "speed" : 1,
3153 "srcIn" : 676.6058540586121,
3154 "start" : 264.54237288135596,
3155 "track" : "v4"
3156 },
3157 {
3158 "duration" : 4.27118644067798,
3159 "fadeIn" : 0,
3160 "fadeOut" : 0,
3161 "id" : "74A4A856-856E-45BF-BF4B-60A6E5627D38",
3162 "kind" : "video",
3163 "linkId" : "4DA91130-EF31-48CE-9353-1BCA2F4D362F",
3164 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
3165 "muted" : false,
3166 "newShot" : false,
3167 "speed" : 1,
3168 "srcIn" : 680.5084745762712,
3169 "start" : 266.9491525423729,
3170 "track" : "v0"
3171 },
3172 {
3173 "duration" : 4.27118644067798,
3174 "fadeIn" : 0,
3175 "fadeOut" : 0,
3176 "id" : "3DBBE8FE-AD87-457B-8670-E95DE832B26C",
3177 "kind" : "audio",
3178 "linkId" : "4DA91130-EF31-48CE-9353-1BCA2F4D362F",
3179 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
3180 "muted" : true,
3181 "newShot" : false,
3182 "speed" : 1,
3183 "srcIn" : 680.4246030349301,
3184 "start" : 266.9491525423729,
3185 "track" : "v1"
3186 },
3187 {
3188 "duration" : 4.27118644067798,
3189 "fadeIn" : 0,
3190 "fadeOut" : 0,
3191 "id" : "5E2EC015-CDDC-45F6-BEF4-76E842BBC389",
3192 "kind" : "audio",
3193 "linkId" : "4DA91130-EF31-48CE-9353-1BCA2F4D362F",
3194 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
3195 "muted" : false,
3196 "newShot" : false,
3197 "speed" : 1,
3198 "srcIn" : 680.471279338161,
3199 "start" : 266.9491525423729,
3200 "track" : "v2"
3201 },
3202 {
3203 "duration" : 4.27118644067798,
3204 "fadeIn" : 0,
3205 "fadeOut" : 0,
3206 "id" : "1275A44B-DBDA-421C-9443-3923A7274D8D",
3207 "kind" : "video",
3208 "linkId" : "4DA91130-EF31-48CE-9353-1BCA2F4D362F",
3209 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
3210 "muted" : false,
3211 "newShot" : false,
3212 "speed" : 1,
3213 "srcIn" : 680.3346722019329,
3214 "start" : 266.9491525423729,
3215 "track" : "v3"
3216 },
3217 {
3218 "duration" : 4.27118644067798,
3219 "fadeIn" : 0,
3220 "fadeOut" : 0,
3221 "id" : "15AE2513-D3F9-47C3-B4F7-61A351DAB004",
3222 "kind" : "video",
3223 "linkId" : "4DA91130-EF31-48CE-9353-1BCA2F4D362F",
3224 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
3225 "muted" : false,
3226 "newShot" : false,
3227 "speed" : 1,
3228 "srcIn" : 680.3346676179341,
3229 "start" : 266.9491525423729,
3230 "track" : "v4"
3231 },
3232 {
3233 "duration" : 1.1186440677965948,
3234 "fadeIn" : 0,
3235 "fadeOut" : 0,
3236 "id" : "2077C05E-DE10-4841-AB24-8F92DE0579D1",
3237 "kind" : "video",
3238 "linkId" : "870FE72E-0830-4984-8A17-C8265B573862",
3239 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
3240 "muted" : false,
3241 "newShot" : false,
3242 "speed" : 1,
3243 "srcIn" : 698.1016949152543,
3244 "start" : 271.22033898305085,
3245 "track" : "v0"
3246 },
3247 {
3248 "duration" : 1.1186440677965948,
3249 "fadeIn" : 0,
3250 "fadeOut" : 0,
3251 "id" : "1832EFCE-19F8-4EBA-B21A-88826F9AE7BF",
3252 "kind" : "audio",
3253 "linkId" : "870FE72E-0830-4984-8A17-C8265B573862",
3254 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
3255 "muted" : true,
3256 "newShot" : false,
3257 "speed" : 1,
3258 "srcIn" : 698.0178233739132,
3259 "start" : 271.22033898305085,
3260 "track" : "v1"
3261 },
3262 {
3263 "duration" : 1.1186440677965948,
3264 "fadeIn" : 0,
3265 "fadeOut" : 0,
3266 "id" : "4823B8FA-4845-43E7-A4AD-95170EAE1A77",
3267 "kind" : "audio",
3268 "linkId" : "870FE72E-0830-4984-8A17-C8265B573862",
3269 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
3270 "muted" : false,
3271 "newShot" : false,
3272 "speed" : 1,
3273 "srcIn" : 698.0644996771441,
3274 "start" : 271.22033898305085,
3275 "track" : "v2"
3276 },
3277 {
3278 "duration" : 1.1186440677965948,
3279 "fadeIn" : 0,
3280 "fadeOut" : 0,
3281 "id" : "AB47B68B-4217-46FF-A1EA-D21122BC749F",
3282 "kind" : "video",
3283 "linkId" : "870FE72E-0830-4984-8A17-C8265B573862",
3284 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
3285 "muted" : false,
3286 "newShot" : false,
3287 "speed" : 1,
3288 "srcIn" : 697.927892540916,
3289 "start" : 271.22033898305085,
3290 "track" : "v3"
3291 },
3292 {
3293 "duration" : 1.1186440677965948,
3294 "fadeIn" : 0,
3295 "fadeOut" : 0,
3296 "id" : "948310E4-F6E1-4C7B-8DFC-4B1EFE91D9F3",
3297 "kind" : "video",
3298 "linkId" : "870FE72E-0830-4984-8A17-C8265B573862",
3299 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
3300 "muted" : false,
3301 "newShot" : false,
3302 "speed" : 1,
3303 "srcIn" : 697.9278879569172,
3304 "start" : 271.22033898305085,
3305 "track" : "v4"
3306 },
3307 {
3308 "duration" : 3.9661016949152668,
3309 "fadeIn" : 0,
3310 "fadeOut" : 0,
3311 "id" : "1841DCD7-E1AC-46F4-8BA9-65F76CE7F997",
3312 "kind" : "video",
3313 "linkId" : "8E3E2F7E-8CEA-4F62-AC48-EAD5610BBF7A",
3314 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
3315 "muted" : false,
3316 "newShot" : false,
3317 "speed" : 1,
3318 "srcIn" : 706.1016949152543,
3319 "start" : 272.33898305084745,
3320 "track" : "v0"
3321 },
3322 {
3323 "duration" : 3.9661016949152668,
3324 "fadeIn" : 0,
3325 "fadeOut" : 0,
3326 "id" : "9F70CFD3-7AB7-4A6D-87AF-B53BEDECA24A",
3327 "kind" : "audio",
3328 "linkId" : "8E3E2F7E-8CEA-4F62-AC48-EAD5610BBF7A",
3329 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
3330 "muted" : true,
3331 "newShot" : false,
3332 "speed" : 1,
3333 "srcIn" : 706.0178233739132,
3334 "start" : 272.33898305084745,
3335 "track" : "v1"
3336 },
3337 {
3338 "duration" : 3.9661016949152668,
3339 "fadeIn" : 0,
3340 "fadeOut" : 0,
3341 "id" : "6296E4FA-F3A8-4E9F-B5A6-21C104C11316",
3342 "kind" : "audio",
3343 "linkId" : "8E3E2F7E-8CEA-4F62-AC48-EAD5610BBF7A",
3344 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
3345 "muted" : false,
3346 "newShot" : false,
3347 "speed" : 1,
3348 "srcIn" : 706.0644996771441,
3349 "start" : 272.33898305084745,
3350 "track" : "v2"
3351 },
3352 {
3353 "duration" : 3.9661016949152668,
3354 "fadeIn" : 0,
3355 "fadeOut" : 0,
3356 "id" : "7DBC5BCC-4F01-497F-97A9-FD8E5FED80ED",
3357 "kind" : "video",
3358 "linkId" : "8E3E2F7E-8CEA-4F62-AC48-EAD5610BBF7A",
3359 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
3360 "muted" : false,
3361 "newShot" : false,
3362 "speed" : 1,
3363 "srcIn" : 705.927892540916,
3364 "start" : 272.33898305084745,
3365 "track" : "v3"
3366 },
3367 {
3368 "duration" : 3.9661016949152668,
3369 "fadeIn" : 0,
3370 "fadeOut" : 0,
3371 "id" : "D22E7D29-E8F2-49FC-AE39-95140062ED4C",
3372 "kind" : "video",
3373 "linkId" : "8E3E2F7E-8CEA-4F62-AC48-EAD5610BBF7A",
3374 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
3375 "muted" : false,
3376 "newShot" : false,
3377 "speed" : 1,
3378 "srcIn" : 705.9278879569172,
3379 "start" : 272.33898305084745,
3380 "track" : "v4"
3381 },
3382 {
3383 "duration" : 7.2542372881355845,
3384 "fadeIn" : 0,
3385 "fadeOut" : 0,
3386 "id" : "ADE6D5E2-A342-4F16-9FAB-2F40C2D1BCDD",
3387 "kind" : "video",
3388 "linkId" : "7AAFBE23-17BF-4AC0-B4E6-3D003AF75DF9",
3389 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
3390 "muted" : false,
3391 "newShot" : false,
3392 "speed" : 1,
3393 "srcIn" : 710.0677966101696,
3394 "start" : 276.3050847457627,
3395 "track" : "v0"
3396 },
3397 {
3398 "duration" : 7.2542372881355845,
3399 "fadeIn" : 0,
3400 "fadeOut" : 0,
3401 "id" : "BFEEDB13-FCE4-473E-BA8B-BAA795862399",
3402 "kind" : "audio",
3403 "linkId" : "7AAFBE23-17BF-4AC0-B4E6-3D003AF75DF9",
3404 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
3405 "muted" : true,
3406 "newShot" : false,
3407 "speed" : 1,
3408 "srcIn" : 709.9839250688285,
3409 "start" : 276.3050847457627,
3410 "track" : "v1"
3411 },
3412 {
3413 "duration" : 7.2542372881355845,
3414 "fadeIn" : 0,
3415 "fadeOut" : 0,
3416 "id" : "BC83D6FA-84FA-483B-8699-D1219DF29357",
3417 "kind" : "audio",
3418 "linkId" : "7AAFBE23-17BF-4AC0-B4E6-3D003AF75DF9",
3419 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
3420 "muted" : false,
3421 "newShot" : false,
3422 "speed" : 1,
3423 "srcIn" : 710.0306013720594,
3424 "start" : 276.3050847457627,
3425 "track" : "v2"
3426 },
3427 {
3428 "duration" : 7.2542372881355845,
3429 "fadeIn" : 0,
3430 "fadeOut" : 0,
3431 "id" : "58221FDA-00C6-45A1-9267-2AC4500070FE",
3432 "kind" : "video",
3433 "linkId" : "7AAFBE23-17BF-4AC0-B4E6-3D003AF75DF9",
3434 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
3435 "muted" : false,
3436 "newShot" : false,
3437 "speed" : 1,
3438 "srcIn" : 709.8939942358313,
3439 "start" : 276.3050847457627,
3440 "track" : "v3"
3441 },
3442 {
3443 "duration" : 7.2542372881355845,
3444 "fadeIn" : 0,
3445 "fadeOut" : 0,
3446 "id" : "BC23C71D-81CD-40A8-8D4C-5728293351FB",
3447 "kind" : "video",
3448 "linkId" : "7AAFBE23-17BF-4AC0-B4E6-3D003AF75DF9",
3449 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
3450 "muted" : false,
3451 "newShot" : false,
3452 "speed" : 1,
3453 "srcIn" : 709.8939896518325,
3454 "start" : 276.3050847457627,
3455 "track" : "v4"
3456 },
3457 {
3458 "duration" : 7.830508474576277,
3459 "fadeIn" : 0,
3460 "fadeOut" : 0,
3461 "id" : "5B448404-52D6-4D2E-83B3-DDABD2847728",
3462 "kind" : "video",
3463 "linkId" : "B6345D38-3912-4C07-BC43-685A4C767720",
3464 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
3465 "muted" : false,
3466 "newShot" : false,
3467 "speed" : 1,
3468 "srcIn" : 721.6271186440679,
3469 "start" : 283.5593220338983,
3470 "track" : "v0"
3471 },
3472 {
3473 "duration" : 7.830508474576277,
3474 "fadeIn" : 0,
3475 "fadeOut" : 0,
3476 "id" : "EE73D2CB-10F9-47A3-B0A9-B077DC6C6B40",
3477 "kind" : "audio",
3478 "linkId" : "B6345D38-3912-4C07-BC43-685A4C767720",
3479 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
3480 "muted" : true,
3481 "newShot" : false,
3482 "speed" : 1,
3483 "srcIn" : 721.5432471027268,
3484 "start" : 283.5593220338983,
3485 "track" : "v1"
3486 },
3487 {
3488 "duration" : 7.830508474576277,
3489 "fadeIn" : 0,
3490 "fadeOut" : 0,
3491 "id" : "BD06C153-DAD3-449C-B108-1A8130000941",
3492 "kind" : "audio",
3493 "linkId" : "B6345D38-3912-4C07-BC43-685A4C767720",
3494 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
3495 "muted" : false,
3496 "newShot" : false,
3497 "speed" : 1,
3498 "srcIn" : 721.5899234059577,
3499 "start" : 283.5593220338983,
3500 "track" : "v2"
3501 },
3502 {
3503 "duration" : 7.830508474576277,
3504 "fadeIn" : 0,
3505 "fadeOut" : 0,
3506 "id" : "9EFE24ED-F389-4DB3-945B-BF2F18D9915B",
3507 "kind" : "video",
3508 "linkId" : "B6345D38-3912-4C07-BC43-685A4C767720",
3509 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
3510 "muted" : false,
3511 "newShot" : false,
3512 "speed" : 1,
3513 "srcIn" : 721.4533162697296,
3514 "start" : 283.5593220338983,
3515 "track" : "v3"
3516 },
3517 {
3518 "duration" : 7.830508474576277,
3519 "fadeIn" : 0,
3520 "fadeOut" : 0,
3521 "id" : "26D01EC2-D5AF-4693-809B-C57786F0F277",
3522 "kind" : "video",
3523 "linkId" : "B6345D38-3912-4C07-BC43-685A4C767720",
3524 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
3525 "muted" : false,
3526 "newShot" : false,
3527 "speed" : 1,
3528 "srcIn" : 721.4533116857308,
3529 "start" : 283.5593220338983,
3530 "track" : "v4"
3531 },
3532 {
3533 "duration" : 6.27118644067798,
3534 "fadeIn" : 0,
3535 "fadeOut" : 0,
3536 "id" : "6ACBC2E5-88A0-48BD-ABE1-16D4214541B8",
3537 "kind" : "video",
3538 "linkId" : "9DBD3CAA-D3B8-40E4-9DAB-5C8025F8248C",
3539 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
3540 "muted" : false,
3541 "newShot" : false,
3542 "speed" : 1,
3543 "srcIn" : 736.3389830508476,
3544 "start" : 291.3898305084746,
3545 "track" : "v0"
3546 },
3547 {
3548 "duration" : 6.27118644067798,
3549 "fadeIn" : 0,
3550 "fadeOut" : 0,
3551 "id" : "EBF24B46-FE81-45AB-97D4-6FD5E677B893",
3552 "kind" : "audio",
3553 "linkId" : "9DBD3CAA-D3B8-40E4-9DAB-5C8025F8248C",
3554 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
3555 "muted" : true,
3556 "newShot" : false,
3557 "speed" : 1,
3558 "srcIn" : 736.2551115095065,
3559 "start" : 291.3898305084746,
3560 "track" : "v1"
3561 },
3562 {
3563 "duration" : 6.27118644067798,
3564 "fadeIn" : 0,
3565 "fadeOut" : 0,
3566 "id" : "DF4C7EBF-43A7-4CDE-837E-4995C5DE3EE7",
3567 "kind" : "audio",
3568 "linkId" : "9DBD3CAA-D3B8-40E4-9DAB-5C8025F8248C",
3569 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
3570 "muted" : false,
3571 "newShot" : false,
3572 "speed" : 1,
3573 "srcIn" : 736.3017878127374,
3574 "start" : 291.3898305084746,
3575 "track" : "v2"
3576 },
3577 {
3578 "duration" : 6.27118644067798,
3579 "fadeIn" : 0,
3580 "fadeOut" : 0,
3581 "id" : "F39E9B23-7810-4DA0-B17A-6D487A801159",
3582 "kind" : "video",
3583 "linkId" : "9DBD3CAA-D3B8-40E4-9DAB-5C8025F8248C",
3584 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
3585 "muted" : false,
3586 "newShot" : false,
3587 "speed" : 1,
3588 "srcIn" : 736.1651806765093,
3589 "start" : 291.3898305084746,
3590 "track" : "v3"
3591 },
3592 {
3593 "duration" : 6.27118644067798,
3594 "fadeIn" : 0,
3595 "fadeOut" : 0,
3596 "id" : "D58A628D-522C-4267-BA46-9E4D55FE030E",
3597 "kind" : "video",
3598 "linkId" : "9DBD3CAA-D3B8-40E4-9DAB-5C8025F8248C",
3599 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
3600 "muted" : false,
3601 "newShot" : false,
3602 "speed" : 1,
3603 "srcIn" : 736.1651760925105,
3604 "start" : 291.3898305084746,
3605 "track" : "v4"
3606 },
3607 {
3608 "duration" : 9.288135593220318,
3609 "fadeIn" : 0,
3610 "fadeOut" : 0,
3611 "id" : "8A9513E7-2C9C-4EB6-84AE-EDFF80DCF552",
3612 "kind" : "video",
3613 "linkId" : "2D759F83-E902-4851-A3CB-8D0088A77D2D",
3614 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
3615 "muted" : false,
3616 "newShot" : false,
3617 "speed" : 1,
3618 "srcIn" : 747.2881355932204,
3619 "start" : 297.66101694915255,
3620 "track" : "v0"
3621 },
3622 {
3623 "duration" : 9.288135593220318,
3624 "fadeIn" : 0,
3625 "fadeOut" : 0,
3626 "id" : "D7CDE17B-5946-4F71-B09B-6983C216681E",
3627 "kind" : "audio",
3628 "linkId" : "2D759F83-E902-4851-A3CB-8D0088A77D2D",
3629 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
3630 "muted" : true,
3631 "newShot" : false,
3632 "speed" : 1,
3633 "srcIn" : 747.2042640518794,
3634 "start" : 297.66101694915255,
3635 "track" : "v1"
3636 },
3637 {
3638 "duration" : 9.288135593220318,
3639 "fadeIn" : 0,
3640 "fadeOut" : 0,
3641 "id" : "CC586FEC-2BAB-4053-AC79-1FA59BD9BF45",
3642 "kind" : "audio",
3643 "linkId" : "2D759F83-E902-4851-A3CB-8D0088A77D2D",
3644 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
3645 "muted" : false,
3646 "newShot" : false,
3647 "speed" : 1,
3648 "srcIn" : 747.2509403551103,
3649 "start" : 297.66101694915255,
3650 "track" : "v2"
3651 },
3652 {
3653 "duration" : 9.288135593220318,
3654 "fadeIn" : 0,
3655 "fadeOut" : 0,
3656 "id" : "926C01C2-ADAD-4B46-BE04-CD6B4618CCC3",
3657 "kind" : "video",
3658 "linkId" : "2D759F83-E902-4851-A3CB-8D0088A77D2D",
3659 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
3660 "muted" : false,
3661 "newShot" : false,
3662 "speed" : 1,
3663 "srcIn" : 747.1143332188822,
3664 "start" : 297.66101694915255,
3665 "track" : "v3"
3666 },
3667 {
3668 "duration" : 9.288135593220318,
3669 "fadeIn" : 0,
3670 "fadeOut" : 0,
3671 "id" : "0AB6F4F2-89CA-4D4B-A52E-765F89C40923",
3672 "kind" : "video",
3673 "linkId" : "2D759F83-E902-4851-A3CB-8D0088A77D2D",
3674 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
3675 "muted" : false,
3676 "newShot" : false,
3677 "speed" : 1,
3678 "srcIn" : 747.1143286348833,
3679 "start" : 297.66101694915255,
3680 "track" : "v4"
3681 },
3682 {
3683 "duration" : 4.372881355932236,
3684 "fadeIn" : 0,
3685 "fadeOut" : 0,
3686 "id" : "E84D7CB3-1292-4241-AAD4-AA71BA97E643",
3687 "kind" : "video",
3688 "linkId" : "1F9BC1C6-8DE8-4750-ADF1-DBC052261B98",
3689 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
3690 "muted" : false,
3691 "newShot" : false,
3692 "speed" : 1,
3693 "srcIn" : 763.2203389830509,
3694 "start" : 306.9491525423729,
3695 "track" : "v0"
3696 },
3697 {
3698 "duration" : 4.372881355932236,
3699 "fadeIn" : 0,
3700 "fadeOut" : 0,
3701 "id" : "48214E82-E8A7-45D1-A218-C6F71276D005",
3702 "kind" : "audio",
3703 "linkId" : "1F9BC1C6-8DE8-4750-ADF1-DBC052261B98",
3704 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
3705 "muted" : true,
3706 "newShot" : false,
3707 "speed" : 1,
3708 "srcIn" : 763.1364674417098,
3709 "start" : 306.9491525423729,
3710 "track" : "v1"
3711 },
3712 {
3713 "duration" : 4.372881355932236,
3714 "fadeIn" : 0,
3715 "fadeOut" : 0,
3716 "id" : "5D3BAE7E-FE37-43FE-9E8C-945DB4037BD3",
3717 "kind" : "audio",
3718 "linkId" : "1F9BC1C6-8DE8-4750-ADF1-DBC052261B98",
3719 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
3720 "muted" : false,
3721 "newShot" : false,
3722 "speed" : 1,
3723 "srcIn" : 763.1831437449407,
3724 "start" : 306.9491525423729,
3725 "track" : "v2"
3726 },
3727 {
3728 "duration" : 4.372881355932236,
3729 "fadeIn" : 0,
3730 "fadeOut" : 0,
3731 "id" : "6B9196EE-5BAF-4BC6-A372-D785A26AB9B6",
3732 "kind" : "video",
3733 "linkId" : "1F9BC1C6-8DE8-4750-ADF1-DBC052261B98",
3734 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
3735 "muted" : false,
3736 "newShot" : false,
3737 "speed" : 1,
3738 "srcIn" : 763.0465366087126,
3739 "start" : 306.9491525423729,
3740 "track" : "v3"
3741 },
3742 {
3743 "duration" : 4.372881355932236,
3744 "fadeIn" : 0,
3745 "fadeOut" : 0,
3746 "id" : "92FFAC2A-5A18-4CD5-A8E8-38A3237085FB",
3747 "kind" : "video",
3748 "linkId" : "1F9BC1C6-8DE8-4750-ADF1-DBC052261B98",
3749 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
3750 "muted" : false,
3751 "newShot" : false,
3752 "speed" : 1,
3753 "srcIn" : 763.0465320247138,
3754 "start" : 306.9491525423729,
3755 "track" : "v4"
3756 },
3757 {
3758 "duration" : 6.203389830508456,
3759 "fadeIn" : 0,
3760 "fadeOut" : 0,
3761 "id" : "B4E35468-D60F-41C5-9DEB-00DF0D9AB8F0",
3762 "kind" : "video",
3763 "linkId" : "5C054F95-5ECF-452C-8B05-51B9272EC65B",
3764 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
3765 "muted" : false,
3766 "newShot" : false,
3767 "speed" : 1,
3768 "srcIn" : 771.2203389830509,
3769 "start" : 311.3220338983051,
3770 "track" : "v0"
3771 },
3772 {
3773 "duration" : 6.203389830508456,
3774 "fadeIn" : 0,
3775 "fadeOut" : 0,
3776 "id" : "EE8E5E05-B61B-4960-ABF2-9C3490F03B65",
3777 "kind" : "audio",
3778 "linkId" : "5C054F95-5ECF-452C-8B05-51B9272EC65B",
3779 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
3780 "muted" : true,
3781 "newShot" : false,
3782 "speed" : 1,
3783 "srcIn" : 771.1364674417098,
3784 "start" : 311.3220338983051,
3785 "track" : "v1"
3786 },
3787 {
3788 "duration" : 6.203389830508456,
3789 "fadeIn" : 0,
3790 "fadeOut" : 0,
3791 "id" : "41C6BBFA-FF1F-4336-8A02-CC2A7AD8D711",
3792 "kind" : "audio",
3793 "linkId" : "5C054F95-5ECF-452C-8B05-51B9272EC65B",
3794 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
3795 "muted" : false,
3796 "newShot" : false,
3797 "speed" : 1,
3798 "srcIn" : 771.1831437449407,
3799 "start" : 311.3220338983051,
3800 "track" : "v2"
3801 },
3802 {
3803 "duration" : 6.203389830508456,
3804 "fadeIn" : 0,
3805 "fadeOut" : 0,
3806 "id" : "01FAD5BD-4079-4B78-964E-021AB45FD327",
3807 "kind" : "video",
3808 "linkId" : "5C054F95-5ECF-452C-8B05-51B9272EC65B",
3809 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
3810 "muted" : false,
3811 "newShot" : false,
3812 "speed" : 1,
3813 "srcIn" : 771.0465366087126,
3814 "start" : 311.3220338983051,
3815 "track" : "v3"
3816 },
3817 {
3818 "duration" : 6.203389830508456,
3819 "fadeIn" : 0,
3820 "fadeOut" : 0,
3821 "id" : "D05C5F7B-1439-48C3-A549-332D2965E644",
3822 "kind" : "video",
3823 "linkId" : "5C054F95-5ECF-452C-8B05-51B9272EC65B",
3824 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
3825 "muted" : false,
3826 "newShot" : false,
3827 "speed" : 1,
3828 "srcIn" : 771.0465320247138,
3829 "start" : 311.3220338983051,
3830 "track" : "v4"
3831 },
3832 {
3833 "duration" : 4.033898305084733,
3834 "fadeIn" : 0,
3835 "fadeOut" : 0,
3836 "id" : "9ADC6EF4-01E6-44A2-A4E7-CE979C4216A6",
3837 "kind" : "video",
3838 "linkId" : "E7791304-08F7-4757-B49E-97BD758DF635",
3839 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
3840 "muted" : false,
3841 "newShot" : false,
3842 "speed" : 1,
3843 "srcIn" : 780.271186440678,
3844 "start" : 317.52542372881356,
3845 "track" : "v0"
3846 },
3847 {
3848 "duration" : 4.033898305084733,
3849 "fadeIn" : 0,
3850 "fadeOut" : 0,
3851 "id" : "C83F690F-75F2-4F0E-9F44-2B3B64FC4D7D",
3852 "kind" : "audio",
3853 "linkId" : "E7791304-08F7-4757-B49E-97BD758DF635",
3854 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
3855 "muted" : true,
3856 "newShot" : false,
3857 "speed" : 1,
3858 "srcIn" : 780.1873148993369,
3859 "start" : 317.52542372881356,
3860 "track" : "v1"
3861 },
3862 {
3863 "duration" : 4.033898305084733,
3864 "fadeIn" : 0,
3865 "fadeOut" : 0,
3866 "id" : "7F4D1569-EB2B-470A-A39D-4E27BB9631D3",
3867 "kind" : "audio",
3868 "linkId" : "E7791304-08F7-4757-B49E-97BD758DF635",
3869 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
3870 "muted" : false,
3871 "newShot" : false,
3872 "speed" : 1,
3873 "srcIn" : 780.2339912025678,
3874 "start" : 317.52542372881356,
3875 "track" : "v2"
3876 },
3877 {
3878 "duration" : 4.033898305084733,
3879 "fadeIn" : 0,
3880 "fadeOut" : 0,
3881 "id" : "F566D86E-6BCB-450B-B165-E742669968FE",
3882 "kind" : "video",
3883 "linkId" : "E7791304-08F7-4757-B49E-97BD758DF635",
3884 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
3885 "muted" : false,
3886 "newShot" : false,
3887 "speed" : 1,
3888 "srcIn" : 780.0973840663397,
3889 "start" : 317.52542372881356,
3890 "track" : "v3"
3891 },
3892 {
3893 "duration" : 4.033898305084733,
3894 "fadeIn" : 0,
3895 "fadeOut" : 0,
3896 "id" : "397C4077-BE8E-46D8-9A26-4A85FB164ADD",
3897 "kind" : "video",
3898 "linkId" : "E7791304-08F7-4757-B49E-97BD758DF635",
3899 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
3900 "muted" : false,
3901 "newShot" : false,
3902 "speed" : 1,
3903 "srcIn" : 780.0973794823409,
3904 "start" : 317.52542372881356,
3905 "track" : "v4"
3906 },
3907 {
3908 "duration" : 2.474576271186436,
3909 "fadeIn" : 0,
3910 "fadeOut" : 0,
3911 "id" : "3EA1AE5B-B71F-4DD3-BAB2-258343BC38E6",
3912 "kind" : "video",
3913 "linkId" : "9683EB9F-EC01-480F-8BE7-2201B247DE7E",
3914 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
3915 "muted" : false,
3916 "newShot" : false,
3917 "speed" : 1,
3918 "srcIn" : 790.7118644067798,
3919 "start" : 321.5593220338983,
3920 "track" : "v0"
3921 },
3922 {
3923 "duration" : 2.474576271186436,
3924 "fadeIn" : 0,
3925 "fadeOut" : 0,
3926 "id" : "84190D3F-8FAE-46C1-8402-B9BE98C961DD",
3927 "kind" : "audio",
3928 "linkId" : "9683EB9F-EC01-480F-8BE7-2201B247DE7E",
3929 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
3930 "muted" : true,
3931 "newShot" : false,
3932 "speed" : 1,
3933 "srcIn" : 790.6279928654387,
3934 "start" : 321.5593220338983,
3935 "track" : "v1"
3936 },
3937 {
3938 "duration" : 2.474576271186436,
3939 "fadeIn" : 0,
3940 "fadeOut" : 0,
3941 "id" : "BA726F72-FB82-4612-8EBA-361CFF5A177B",
3942 "kind" : "audio",
3943 "linkId" : "9683EB9F-EC01-480F-8BE7-2201B247DE7E",
3944 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
3945 "muted" : false,
3946 "newShot" : false,
3947 "speed" : 1,
3948 "srcIn" : 790.6746691686697,
3949 "start" : 321.5593220338983,
3950 "track" : "v2"
3951 },
3952 {
3953 "duration" : 2.474576271186436,
3954 "fadeIn" : 0,
3955 "fadeOut" : 0,
3956 "id" : "A2BD0CC2-F087-4B62-B210-2422E7CDA62E",
3957 "kind" : "video",
3958 "linkId" : "9683EB9F-EC01-480F-8BE7-2201B247DE7E",
3959 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
3960 "muted" : false,
3961 "newShot" : false,
3962 "speed" : 1,
3963 "srcIn" : 790.5380620324415,
3964 "start" : 321.5593220338983,
3965 "track" : "v3"
3966 },
3967 {
3968 "duration" : 2.474576271186436,
3969 "fadeIn" : 0,
3970 "fadeOut" : 0,
3971 "id" : "CB9AED26-D860-4411-9D20-1B63F56F0BEC",
3972 "kind" : "video",
3973 "linkId" : "9683EB9F-EC01-480F-8BE7-2201B247DE7E",
3974 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
3975 "muted" : false,
3976 "newShot" : false,
3977 "speed" : 1,
3978 "srcIn" : 790.5380574484427,
3979 "start" : 321.5593220338983,
3980 "track" : "v4"
3981 },
3982 {
3983 "duration" : 3.525423728813564,
3984 "fadeIn" : 0,
3985 "fadeOut" : 0,
3986 "id" : "5650BD3B-4BF5-4533-B873-6A89B355DBBD",
3987 "kind" : "video",
3988 "linkId" : "CABF546D-96A6-4629-8BD2-A6CED6EBD7E4",
3989 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
3990 "muted" : false,
3991 "newShot" : false,
3992 "speed" : 1,
3993 "srcIn" : 794.7118644067798,
3994 "start" : 324.03389830508473,
3995 "track" : "v0"
3996 },
3997 {
3998 "duration" : 3.525423728813564,
3999 "fadeIn" : 0,
4000 "fadeOut" : 0,
4001 "id" : "3BA60039-3255-435B-90E4-738D94B13821",
4002 "kind" : "audio",
4003 "linkId" : "CABF546D-96A6-4629-8BD2-A6CED6EBD7E4",
4004 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
4005 "muted" : true,
4006 "newShot" : false,
4007 "speed" : 1,
4008 "srcIn" : 794.6279928654387,
4009 "start" : 324.03389830508473,
4010 "track" : "v1"
4011 },
4012 {
4013 "duration" : 3.525423728813564,
4014 "fadeIn" : 0,
4015 "fadeOut" : 0,
4016 "id" : "1A07AF09-C783-4547-BB45-5671AD0A75E7",
4017 "kind" : "audio",
4018 "linkId" : "CABF546D-96A6-4629-8BD2-A6CED6EBD7E4",
4019 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
4020 "muted" : false,
4021 "newShot" : false,
4022 "speed" : 1,
4023 "srcIn" : 794.6746691686697,
4024 "start" : 324.03389830508473,
4025 "track" : "v2"
4026 },
4027 {
4028 "duration" : 3.525423728813564,
4029 "fadeIn" : 0,
4030 "fadeOut" : 0,
4031 "id" : "A656775F-4507-44FD-ADCB-E23AE9572BD6",
4032 "kind" : "video",
4033 "linkId" : "CABF546D-96A6-4629-8BD2-A6CED6EBD7E4",
4034 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
4035 "muted" : false,
4036 "newShot" : false,
4037 "speed" : 1,
4038 "srcIn" : 794.5380620324415,
4039 "start" : 324.03389830508473,
4040 "track" : "v3"
4041 },
4042 {
4043 "duration" : 3.525423728813564,
4044 "fadeIn" : 0,
4045 "fadeOut" : 0,
4046 "id" : "F287E2E4-9B24-4928-9DF4-BE2A88C6F6E1",
4047 "kind" : "video",
4048 "linkId" : "CABF546D-96A6-4629-8BD2-A6CED6EBD7E4",
4049 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
4050 "muted" : false,
4051 "newShot" : false,
4052 "speed" : 1,
4053 "srcIn" : 794.5380574484427,
4054 "start" : 324.03389830508473,
4055 "track" : "v4"
4056 },
4057 {
4058 "duration" : 11.694915254237287,
4059 "fadeIn" : 0,
4060 "fadeOut" : 0,
4061 "id" : "10BDB7F1-A97E-46B4-AA17-D5AA082F4FE5",
4062 "kind" : "video",
4063 "linkId" : "FE61ADB3-0C95-4A1A-B7F6-D3B4874BD0EA",
4064 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
4065 "muted" : false,
4066 "newShot" : false,
4067 "speed" : 1,
4068 "srcIn" : 812.6440677966104,
4069 "start" : 327.5593220338983,
4070 "track" : "v0"
4071 },
4072 {
4073 "duration" : 11.694915254237287,
4074 "fadeIn" : 0,
4075 "fadeOut" : 0,
4076 "id" : "1A175E00-C9B8-4071-9395-B96E6BBC0766",
4077 "kind" : "audio",
4078 "linkId" : "FE61ADB3-0C95-4A1A-B7F6-D3B4874BD0EA",
4079 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
4080 "muted" : true,
4081 "newShot" : false,
4082 "speed" : 1,
4083 "srcIn" : 812.5601962552694,
4084 "start" : 327.5593220338983,
4085 "track" : "v1"
4086 },
4087 {
4088 "duration" : 11.694915254237287,
4089 "fadeIn" : 0,
4090 "fadeOut" : 0,
4091 "id" : "9CDBFDAC-83C2-4F7B-AC48-618437D267F1",
4092 "kind" : "audio",
4093 "linkId" : "FE61ADB3-0C95-4A1A-B7F6-D3B4874BD0EA",
4094 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
4095 "muted" : false,
4096 "newShot" : false,
4097 "speed" : 1,
4098 "srcIn" : 812.6068725585003,
4099 "start" : 327.5593220338983,
4100 "track" : "v2"
4101 },
4102 {
4103 "duration" : 11.694915254237287,
4104 "fadeIn" : 0,
4105 "fadeOut" : 0,
4106 "id" : "F8DB026C-68E2-4110-8310-A4E77894383C",
4107 "kind" : "video",
4108 "linkId" : "FE61ADB3-0C95-4A1A-B7F6-D3B4874BD0EA",
4109 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
4110 "muted" : false,
4111 "newShot" : false,
4112 "speed" : 1,
4113 "srcIn" : 812.4702654222722,
4114 "start" : 327.5593220338983,
4115 "track" : "v3"
4116 },
4117 {
4118 "duration" : 11.694915254237287,
4119 "fadeIn" : 0,
4120 "fadeOut" : 0,
4121 "id" : "2C6F6969-72A9-49A9-8A8D-A15D2D15A434",
4122 "kind" : "video",
4123 "linkId" : "FE61ADB3-0C95-4A1A-B7F6-D3B4874BD0EA",
4124 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
4125 "muted" : false,
4126 "newShot" : false,
4127 "speed" : 1,
4128 "srcIn" : 812.4702608382734,
4129 "start" : 327.5593220338983,
4130 "track" : "v4"
4131 },
4132 {
4133 "duration" : 1.3898305084745743,
4134 "fadeIn" : 0,
4135 "fadeOut" : 0,
4136 "id" : "5D76FCCF-E20B-4E2B-B2BF-06D04D2EC873",
4137 "kind" : "video",
4138 "linkId" : "5A0236C5-2C98-4C5E-A570-96D211E7B3C6",
4139 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
4140 "muted" : false,
4141 "newShot" : false,
4142 "speed" : 1,
4143 "srcIn" : 980.813559322034,
4144 "start" : 339.2542372881356,
4145 "track" : "v0"
4146 },
4147 {
4148 "duration" : 1.3898305084745743,
4149 "fadeIn" : 0,
4150 "fadeOut" : 0,
4151 "id" : "B834F191-B8D9-4288-A76C-5BC67BBEAA7E",
4152 "kind" : "audio",
4153 "linkId" : "5A0236C5-2C98-4C5E-A570-96D211E7B3C6",
4154 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
4155 "muted" : true,
4156 "newShot" : false,
4157 "speed" : 1,
4158 "srcIn" : 980.729687780693,
4159 "start" : 339.2542372881356,
4160 "track" : "v1"
4161 },
4162 {
4163 "duration" : 1.3898305084745743,
4164 "fadeIn" : 0,
4165 "fadeOut" : 0,
4166 "id" : "EC711F21-C8A3-40C5-B230-A451B6878977",
4167 "kind" : "audio",
4168 "linkId" : "5A0236C5-2C98-4C5E-A570-96D211E7B3C6",
4169 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
4170 "muted" : false,
4171 "newShot" : false,
4172 "speed" : 1,
4173 "srcIn" : 980.7763640839239,
4174 "start" : 339.2542372881356,
4175 "track" : "v2"
4176 },
4177 {
4178 "duration" : 1.3898305084745743,
4179 "fadeIn" : 0,
4180 "fadeOut" : 0,
4181 "id" : "3BFC58C2-D801-45E4-8F01-5F94BDB9ED96",
4182 "kind" : "video",
4183 "linkId" : "5A0236C5-2C98-4C5E-A570-96D211E7B3C6",
4184 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
4185 "muted" : false,
4186 "newShot" : false,
4187 "speed" : 1,
4188 "srcIn" : 980.6397569476958,
4189 "start" : 339.2542372881356,
4190 "track" : "v3"
4191 },
4192 {
4193 "duration" : 1.3898305084745743,
4194 "fadeIn" : 0,
4195 "fadeOut" : 0,
4196 "id" : "28885AEF-445D-47A2-88D3-550BBF692ADE",
4197 "kind" : "video",
4198 "linkId" : "5A0236C5-2C98-4C5E-A570-96D211E7B3C6",
4199 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
4200 "muted" : false,
4201 "newShot" : false,
4202 "speed" : 1,
4203 "srcIn" : 980.639752363697,
4204 "start" : 339.2542372881356,
4205 "track" : "v4"
4206 },
4207 {
4208 "duration" : 0.6440677966101589,
4209 "fadeIn" : 0,
4210 "fadeOut" : 0,
4211 "id" : "EA534368-94B4-475D-8041-45696947070E",
4212 "kind" : "video",
4213 "linkId" : "B31B5062-B2A8-445B-A891-F2D2104E86E3",
4214 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
4215 "muted" : false,
4216 "newShot" : false,
4217 "speed" : 1,
4218 "srcIn" : 983.1186440677968,
4219 "start" : 340.64406779661016,
4220 "track" : "v0"
4221 },
4222 {
4223 "duration" : 0.6440677966101589,
4224 "fadeIn" : 0,
4225 "fadeOut" : 0,
4226 "id" : "F6F6F9A9-8B8B-443A-B401-32205A74C093",
4227 "kind" : "audio",
4228 "linkId" : "B31B5062-B2A8-445B-A891-F2D2104E86E3",
4229 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
4230 "muted" : true,
4231 "newShot" : false,
4232 "speed" : 1,
4233 "srcIn" : 983.0347725264558,
4234 "start" : 340.64406779661016,
4235 "track" : "v1"
4236 },
4237 {
4238 "duration" : 0.6440677966101589,
4239 "fadeIn" : 0,
4240 "fadeOut" : 0,
4241 "id" : "1176FB5D-D780-4273-9FCA-9695A04A100F",
4242 "kind" : "audio",
4243 "linkId" : "B31B5062-B2A8-445B-A891-F2D2104E86E3",
4244 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
4245 "muted" : false,
4246 "newShot" : false,
4247 "speed" : 1,
4248 "srcIn" : 983.0814488296867,
4249 "start" : 340.64406779661016,
4250 "track" : "v2"
4251 },
4252 {
4253 "duration" : 0.6440677966101589,
4254 "fadeIn" : 0,
4255 "fadeOut" : 0,
4256 "id" : "5DA60AD6-AC7E-4579-86CD-50F79A14150D",
4257 "kind" : "video",
4258 "linkId" : "B31B5062-B2A8-445B-A891-F2D2104E86E3",
4259 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
4260 "muted" : false,
4261 "newShot" : false,
4262 "speed" : 1,
4263 "srcIn" : 982.9448416934586,
4264 "start" : 340.64406779661016,
4265 "track" : "v3"
4266 },
4267 {
4268 "duration" : 0.6440677966101589,
4269 "fadeIn" : 0,
4270 "fadeOut" : 0,
4271 "id" : "3DBD1518-ACEA-4CC3-9B85-FB6C1BFDDDE4",
4272 "kind" : "video",
4273 "linkId" : "B31B5062-B2A8-445B-A891-F2D2104E86E3",
4274 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
4275 "muted" : false,
4276 "newShot" : false,
4277 "speed" : 1,
4278 "srcIn" : 982.9448371094597,
4279 "start" : 340.64406779661016,
4280 "track" : "v4"
4281 },
4282 {
4283 "duration" : 3.6271186440678207,
4284 "fadeIn" : 0,
4285 "fadeOut" : 0,
4286 "id" : "832B3ED1-5BC4-43EE-8FE6-717D93008C5A",
4287 "kind" : "video",
4288 "linkId" : "596C8323-127D-44C1-B319-7DF1FB8B1171",
4289 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
4290 "muted" : false,
4291 "newShot" : false,
4292 "speed" : 1,
4293 "srcIn" : 1037.8305084745766,
4294 "start" : 341.2881355932203,
4295 "track" : "v0"
4296 },
4297 {
4298 "duration" : 3.6271186440678207,
4299 "fadeIn" : 0,
4300 "fadeOut" : 0,
4301 "id" : "00209D2F-08A1-4B49-96F2-91A8C5EF454D",
4302 "kind" : "audio",
4303 "linkId" : "596C8323-127D-44C1-B319-7DF1FB8B1171",
4304 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
4305 "muted" : true,
4306 "newShot" : false,
4307 "speed" : 1,
4308 "srcIn" : 1037.7466369332355,
4309 "start" : 341.2881355932203,
4310 "track" : "v1"
4311 },
4312 {
4313 "duration" : 3.6271186440678207,
4314 "fadeIn" : 0,
4315 "fadeOut" : 0,
4316 "id" : "43AEF5F0-29EF-45AD-A7B6-893C574685CB",
4317 "kind" : "audio",
4318 "linkId" : "596C8323-127D-44C1-B319-7DF1FB8B1171",
4319 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
4320 "muted" : false,
4321 "newShot" : false,
4322 "speed" : 1,
4323 "srcIn" : 1037.7933132364665,
4324 "start" : 341.2881355932203,
4325 "track" : "v2"
4326 },
4327 {
4328 "duration" : 3.6271186440678207,
4329 "fadeIn" : 0,
4330 "fadeOut" : 0,
4331 "id" : "32BC4FE2-4816-49E7-80A0-2DA08DCC56A0",
4332 "kind" : "video",
4333 "linkId" : "596C8323-127D-44C1-B319-7DF1FB8B1171",
4334 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
4335 "muted" : false,
4336 "newShot" : false,
4337 "speed" : 1,
4338 "srcIn" : 1037.6567061002384,
4339 "start" : 341.2881355932203,
4340 "track" : "v3"
4341 },
4342 {
4343 "duration" : 3.6271186440678207,
4344 "fadeIn" : 0,
4345 "fadeOut" : 0,
4346 "id" : "7C5CF291-4A7F-4BBD-809E-A9094B0B00E0",
4347 "kind" : "video",
4348 "linkId" : "596C8323-127D-44C1-B319-7DF1FB8B1171",
4349 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
4350 "muted" : false,
4351 "newShot" : false,
4352 "speed" : 1,
4353 "srcIn" : 1037.6567015162395,
4354 "start" : 341.2881355932203,
4355 "track" : "v4"
4356 },
4357 {
4358 "duration" : 1.355932203389841,
4359 "fadeIn" : 0,
4360 "fadeOut" : 0,
4361 "id" : "0905362C-DE86-4A3A-B256-9FD740D3A19D",
4362 "kind" : "video",
4363 "linkId" : "E5D49AA9-6CD5-438D-8B96-6ADA7002033B",
4364 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
4365 "muted" : false,
4366 "newShot" : false,
4367 "speed" : 1,
4368 "srcIn" : 1122.203389830509,
4369 "start" : 344.91525423728814,
4370 "track" : "v0"
4371 },
4372 {
4373 "duration" : 1.355932203389841,
4374 "fadeIn" : 0,
4375 "fadeOut" : 0,
4376 "id" : "48C76EE1-E83E-45E8-A767-47E35F66576F",
4377 "kind" : "audio",
4378 "linkId" : "E5D49AA9-6CD5-438D-8B96-6ADA7002033B",
4379 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
4380 "muted" : true,
4381 "newShot" : false,
4382 "speed" : 1,
4383 "srcIn" : 1122.119518289168,
4384 "start" : 344.91525423728814,
4385 "track" : "v1"
4386 },
4387 {
4388 "duration" : 1.355932203389841,
4389 "fadeIn" : 0,
4390 "fadeOut" : 0,
4391 "id" : "2F82F324-00A9-48EC-BF8C-DAA85B8C9D73",
4392 "kind" : "audio",
4393 "linkId" : "E5D49AA9-6CD5-438D-8B96-6ADA7002033B",
4394 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
4395 "muted" : false,
4396 "newShot" : false,
4397 "speed" : 1,
4398 "srcIn" : 1122.1661945923988,
4399 "start" : 344.91525423728814,
4400 "track" : "v2"
4401 },
4402 {
4403 "duration" : 1.355932203389841,
4404 "fadeIn" : 0,
4405 "fadeOut" : 0,
4406 "id" : "5B27AC9E-88CF-4AB2-927D-A79412E95F09",
4407 "kind" : "video",
4408 "linkId" : "E5D49AA9-6CD5-438D-8B96-6ADA7002033B",
4409 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
4410 "muted" : false,
4411 "newShot" : false,
4412 "speed" : 1,
4413 "srcIn" : 1122.0295874561707,
4414 "start" : 344.91525423728814,
4415 "track" : "v3"
4416 },
4417 {
4418 "duration" : 1.355932203389841,
4419 "fadeIn" : 0,
4420 "fadeOut" : 0,
4421 "id" : "6CC1FC2E-3809-4A37-87B2-3255B1430A3C",
4422 "kind" : "video",
4423 "linkId" : "E5D49AA9-6CD5-438D-8B96-6ADA7002033B",
4424 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
4425 "muted" : false,
4426 "newShot" : false,
4427 "speed" : 1,
4428 "srcIn" : 1122.0295828721719,
4429 "start" : 344.91525423728814,
4430 "track" : "v4"
4431 },
4432 {
4433 "duration" : 5.0847457627118615,
4434 "fadeIn" : 0,
4435 "fadeOut" : 0,
4436 "id" : "F27B9C51-75DE-4E4F-8808-3BA889863CF9",
4437 "kind" : "video",
4438 "linkId" : "81F5C3C3-3A90-4A30-8056-87972464F37F",
4439 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
4440 "muted" : false,
4441 "newShot" : false,
4442 "speed" : 1,
4443 "srcIn" : 1129.254237288136,
4444 "start" : 346.271186440678,
4445 "track" : "v0"
4446 },
4447 {
4448 "duration" : 5.0847457627118615,
4449 "fadeIn" : 0,
4450 "fadeOut" : 0,
4451 "id" : "D6CB9F93-3A96-4AD3-8448-52E45B33A28D",
4452 "kind" : "audio",
4453 "linkId" : "81F5C3C3-3A90-4A30-8056-87972464F37F",
4454 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
4455 "muted" : true,
4456 "newShot" : false,
4457 "speed" : 1,
4458 "srcIn" : 1129.170365746795,
4459 "start" : 346.271186440678,
4460 "track" : "v1"
4461 },
4462 {
4463 "duration" : 5.0847457627118615,
4464 "fadeIn" : 0,
4465 "fadeOut" : 0,
4466 "id" : "34239B0B-3D34-4D29-9C48-D18A775FCDDB",
4467 "kind" : "audio",
4468 "linkId" : "81F5C3C3-3A90-4A30-8056-87972464F37F",
4469 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
4470 "muted" : false,
4471 "newShot" : false,
4472 "speed" : 1,
4473 "srcIn" : 1129.2170420500258,
4474 "start" : 346.271186440678,
4475 "track" : "v2"
4476 },
4477 {
4478 "duration" : 5.0847457627118615,
4479 "fadeIn" : 0,
4480 "fadeOut" : 0,
4481 "id" : "C0EC3471-CC80-448C-BA8B-6F565ED9EE06",
4482 "kind" : "video",
4483 "linkId" : "81F5C3C3-3A90-4A30-8056-87972464F37F",
4484 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
4485 "muted" : false,
4486 "newShot" : false,
4487 "speed" : 1,
4488 "srcIn" : 1129.0804349137977,
4489 "start" : 346.271186440678,
4490 "track" : "v3"
4491 },
4492 {
4493 "duration" : 5.0847457627118615,
4494 "fadeIn" : 0,
4495 "fadeOut" : 0,
4496 "id" : "89A2AE13-B7C0-4138-B475-2D7ED7D1BEEA",
4497 "kind" : "video",
4498 "linkId" : "81F5C3C3-3A90-4A30-8056-87972464F37F",
4499 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
4500 "muted" : false,
4501 "newShot" : false,
4502 "speed" : 1,
4503 "srcIn" : 1129.080430329799,
4504 "start" : 346.271186440678,
4505 "track" : "v4"
4506 },
4507 {
4508 "duration" : 4.711864406779625,
4509 "fadeIn" : 0,
4510 "fadeOut" : 0,
4511 "id" : "2E892202-DFC8-4722-848D-8ED956667E0D",
4512 "kind" : "video",
4513 "linkId" : "CD0169DB-72F4-4E7A-B27D-1D1C0A2437D9",
4514 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
4515 "muted" : false,
4516 "newShot" : false,
4517 "speed" : 1,
4518 "srcIn" : 1278.2372881355936,
4519 "start" : 351.35593220338984,
4520 "track" : "v0"
4521 },
4522 {
4523 "duration" : 4.711864406779625,
4524 "fadeIn" : 0,
4525 "fadeOut" : 0,
4526 "id" : "43D45A86-49A1-449A-9E77-900F5D0ACC61",
4527 "kind" : "audio",
4528 "linkId" : "CD0169DB-72F4-4E7A-B27D-1D1C0A2437D9",
4529 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
4530 "muted" : true,
4531 "newShot" : false,
4532 "speed" : 1,
4533 "srcIn" : 1278.1534165942526,
4534 "start" : 351.35593220338984,
4535 "track" : "v1"
4536 },
4537 {
4538 "duration" : 4.711864406779625,
4539 "fadeIn" : 0,
4540 "fadeOut" : 0,
4541 "id" : "9B4179AA-3FE3-4B93-B578-86F7BDFBAC59",
4542 "kind" : "audio",
4543 "linkId" : "CD0169DB-72F4-4E7A-B27D-1D1C0A2437D9",
4544 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
4545 "muted" : false,
4546 "newShot" : false,
4547 "speed" : 1,
4548 "srcIn" : 1278.2000928974835,
4549 "start" : 351.35593220338984,
4550 "track" : "v2"
4551 },
4552 {
4553 "duration" : 4.711864406779625,
4554 "fadeIn" : 0,
4555 "fadeOut" : 0,
4556 "id" : "84160650-3975-445E-9CCE-FE9A4B354DE4",
4557 "kind" : "video",
4558 "linkId" : "CD0169DB-72F4-4E7A-B27D-1D1C0A2437D9",
4559 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
4560 "muted" : false,
4561 "newShot" : false,
4562 "speed" : 1,
4563 "srcIn" : 1278.0634857612554,
4564 "start" : 351.35593220338984,
4565 "track" : "v3"
4566 },
4567 {
4568 "duration" : 4.711864406779625,
4569 "fadeIn" : 0,
4570 "fadeOut" : 0,
4571 "id" : "EEE0A850-F637-47A2-A351-78A5E35E2E71",
4572 "kind" : "video",
4573 "linkId" : "CD0169DB-72F4-4E7A-B27D-1D1C0A2437D9",
4574 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
4575 "muted" : false,
4576 "newShot" : false,
4577 "speed" : 1,
4578 "srcIn" : 1278.0634811772566,
4579 "start" : 351.35593220338984,
4580 "track" : "v4"
4581 },
4582 {
4583 "duration" : 12.27118644067798,
4584 "fadeIn" : 0,
4585 "fadeOut" : 0,
4586 "id" : "40E92BD1-0CD5-4846-B649-57DEE758C62A",
4587 "kind" : "video",
4588 "linkId" : "7D4C2DFB-52DA-48A5-B7A5-8C50DE99C254",
4589 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
4590 "muted" : false,
4591 "newShot" : false,
4592 "speed" : 1,
4593 "srcIn" : 1283.4237288135596,
4594 "start" : 356.06779661016947,
4595 "track" : "v0"
4596 },
4597 {
4598 "duration" : 12.27118644067798,
4599 "fadeIn" : 0,
4600 "fadeOut" : 0,
4601 "id" : "A9E11104-5BA1-47B5-A29B-0DB9D895655D",
4602 "kind" : "audio",
4603 "linkId" : "7D4C2DFB-52DA-48A5-B7A5-8C50DE99C254",
4604 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
4605 "muted" : true,
4606 "newShot" : false,
4607 "speed" : 1,
4608 "srcIn" : 1283.3398572722185,
4609 "start" : 356.06779661016947,
4610 "track" : "v1"
4611 },
4612 {
4613 "duration" : 12.27118644067798,
4614 "fadeIn" : 0,
4615 "fadeOut" : 0,
4616 "id" : "EB6EE9AD-7386-4D10-BFBF-E253B17F3431",
4617 "kind" : "audio",
4618 "linkId" : "7D4C2DFB-52DA-48A5-B7A5-8C50DE99C254",
4619 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
4620 "muted" : false,
4621 "newShot" : false,
4622 "speed" : 1,
4623 "srcIn" : 1283.3865335754494,
4624 "start" : 356.06779661016947,
4625 "track" : "v2"
4626 },
4627 {
4628 "duration" : 12.27118644067798,
4629 "fadeIn" : 0,
4630 "fadeOut" : 0,
4631 "id" : "438EA227-D2C5-4532-9A3A-252007721608",
4632 "kind" : "video",
4633 "linkId" : "7D4C2DFB-52DA-48A5-B7A5-8C50DE99C254",
4634 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
4635 "muted" : false,
4636 "newShot" : false,
4637 "speed" : 1,
4638 "srcIn" : 1283.2499264392213,
4639 "start" : 356.06779661016947,
4640 "track" : "v3"
4641 },
4642 {
4643 "duration" : 12.27118644067798,
4644 "fadeIn" : 0,
4645 "fadeOut" : 0,
4646 "id" : "E7E7A787-8710-4FC3-8D04-8FB4A9808A63",
4647 "kind" : "video",
4648 "linkId" : "7D4C2DFB-52DA-48A5-B7A5-8C50DE99C254",
4649 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
4650 "muted" : false,
4651 "newShot" : false,
4652 "speed" : 1,
4653 "srcIn" : 1283.2499218552225,
4654 "start" : 356.06779661016947,
4655 "track" : "v4"
4656 },
4657 {
4658 "duration" : 3.0508474576271283,
4659 "fadeIn" : 0,
4660 "fadeOut" : 0,
4661 "id" : "65671782-CE0B-49E2-AF2D-C5D2D41FFA24",
4662 "kind" : "video",
4663 "linkId" : "D50E12ED-A0DF-4078-95DE-6D5332CDFB62",
4664 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
4665 "muted" : false,
4666 "newShot" : false,
4667 "speed" : 1,
4668 "srcIn" : 1304.271186440678,
4669 "start" : 368.33898305084745,
4670 "track" : "v0"
4671 },
4672 {
4673 "duration" : 3.0508474576271283,
4674 "fadeIn" : 0,
4675 "fadeOut" : 0,
4676 "id" : "B250A8E7-5DB5-463B-BC7E-2A985C554A48",
4677 "kind" : "audio",
4678 "linkId" : "D50E12ED-A0DF-4078-95DE-6D5332CDFB62",
4679 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
4680 "muted" : true,
4681 "newShot" : false,
4682 "speed" : 1,
4683 "srcIn" : 1304.187314899337,
4684 "start" : 368.33898305084745,
4685 "track" : "v1"
4686 },
4687 {
4688 "duration" : 3.0508474576271283,
4689 "fadeIn" : 0,
4690 "fadeOut" : 0,
4691 "id" : "538F899C-5E20-49EC-8416-74178778FE07",
4692 "kind" : "audio",
4693 "linkId" : "D50E12ED-A0DF-4078-95DE-6D5332CDFB62",
4694 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
4695 "muted" : false,
4696 "newShot" : false,
4697 "speed" : 1,
4698 "srcIn" : 1304.233991202568,
4699 "start" : 368.33898305084745,
4700 "track" : "v2"
4701 },
4702 {
4703 "duration" : 3.0508474576271283,
4704 "fadeIn" : 0,
4705 "fadeOut" : 0,
4706 "id" : "AB06969E-2217-4DDA-B6A6-0537DB89EDD0",
4707 "kind" : "video",
4708 "linkId" : "D50E12ED-A0DF-4078-95DE-6D5332CDFB62",
4709 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
4710 "muted" : false,
4711 "newShot" : false,
4712 "speed" : 1,
4713 "srcIn" : 1304.0973840663398,
4714 "start" : 368.33898305084745,
4715 "track" : "v3"
4716 },
4717 {
4718 "duration" : 3.0508474576271283,
4719 "fadeIn" : 0,
4720 "fadeOut" : 0,
4721 "id" : "84921634-8C3A-4FDC-9737-68D94154D037",
4722 "kind" : "video",
4723 "linkId" : "D50E12ED-A0DF-4078-95DE-6D5332CDFB62",
4724 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
4725 "muted" : false,
4726 "newShot" : false,
4727 "speed" : 1,
4728 "srcIn" : 1304.097379482341,
4729 "start" : 368.33898305084745,
4730 "track" : "v4"
4731 },
4732 {
4733 "duration" : 6.610169491525426,
4734 "fadeIn" : 0,
4735 "fadeOut" : 0,
4736 "id" : "B2E2127E-A4B7-4682-BC09-FE4FBF53EC66",
4737 "kind" : "video",
4738 "linkId" : "4A3BE2AA-0118-46FB-9311-40602A8063DF",
4739 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
4740 "muted" : false,
4741 "newShot" : false,
4742 "speed" : 1,
4743 "srcIn" : 1309.6610169491526,
4744 "start" : 371.3898305084746,
4745 "track" : "v0"
4746 },
4747 {
4748 "duration" : 6.610169491525426,
4749 "fadeIn" : 0,
4750 "fadeOut" : 0,
4751 "id" : "A2F9926B-983E-4F53-99C7-92BB9B023122",
4752 "kind" : "audio",
4753 "linkId" : "4A3BE2AA-0118-46FB-9311-40602A8063DF",
4754 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
4755 "muted" : true,
4756 "newShot" : false,
4757 "speed" : 1,
4758 "srcIn" : 1309.5771454078115,
4759 "start" : 371.3898305084746,
4760 "track" : "v1"
4761 },
4762 {
4763 "duration" : 6.610169491525426,
4764 "fadeIn" : 0,
4765 "fadeOut" : 0,
4766 "id" : "D13D2198-79F9-4915-A5E0-AC690ADBC371",
4767 "kind" : "audio",
4768 "linkId" : "4A3BE2AA-0118-46FB-9311-40602A8063DF",
4769 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
4770 "muted" : false,
4771 "newShot" : false,
4772 "speed" : 1,
4773 "srcIn" : 1309.6238217110424,
4774 "start" : 371.3898305084746,
4775 "track" : "v2"
4776 },
4777 {
4778 "duration" : 6.610169491525426,
4779 "fadeIn" : 0,
4780 "fadeOut" : 0,
4781 "id" : "53651C3A-4919-49F0-ADED-34CDF520F07E",
4782 "kind" : "video",
4783 "linkId" : "4A3BE2AA-0118-46FB-9311-40602A8063DF",
4784 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
4785 "muted" : false,
4786 "newShot" : false,
4787 "speed" : 1,
4788 "srcIn" : 1309.4872145748143,
4789 "start" : 371.3898305084746,
4790 "track" : "v3"
4791 },
4792 {
4793 "duration" : 6.610169491525426,
4794 "fadeIn" : 0,
4795 "fadeOut" : 0,
4796 "id" : "00F70279-9C4E-40AB-8D35-B686234D9CD2",
4797 "kind" : "video",
4798 "linkId" : "4A3BE2AA-0118-46FB-9311-40602A8063DF",
4799 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
4800 "muted" : false,
4801 "newShot" : false,
4802 "speed" : 1,
4803 "srcIn" : 1309.4872099908155,
4804 "start" : 371.3898305084746,
4805 "track" : "v4"
4806 },
4807 {
4808 "duration" : 6.372881355932179,
4809 "fadeIn" : 0,
4810 "fadeOut" : 0,
4811 "id" : "3EB22ECC-5EAD-4107-9F24-6864C9464EAC",
4812 "kind" : "video",
4813 "linkId" : "346B7025-BD91-4339-98B4-DBE997BC1A27",
4814 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
4815 "muted" : false,
4816 "newShot" : false,
4817 "speed" : 1,
4818 "srcIn" : 1319.1186440677966,
4819 "start" : 378,
4820 "track" : "v0"
4821 },
4822 {
4823 "duration" : 6.372881355932179,
4824 "fadeIn" : 0,
4825 "fadeOut" : 0,
4826 "id" : "2B2021EE-7138-45C6-A0CF-0D8BBAC1116A",
4827 "kind" : "audio",
4828 "linkId" : "346B7025-BD91-4339-98B4-DBE997BC1A27",
4829 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
4830 "muted" : true,
4831 "newShot" : false,
4832 "speed" : 1,
4833 "srcIn" : 1319.0347725264555,
4834 "start" : 378,
4835 "track" : "v1"
4836 },
4837 {
4838 "duration" : 6.372881355932179,
4839 "fadeIn" : 0,
4840 "fadeOut" : 0,
4841 "id" : "4A8A3D03-F2FB-4651-A609-318676737F28",
4842 "kind" : "audio",
4843 "linkId" : "346B7025-BD91-4339-98B4-DBE997BC1A27",
4844 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
4845 "muted" : false,
4846 "newShot" : false,
4847 "speed" : 1,
4848 "srcIn" : 1319.0814488296865,
4849 "start" : 378,
4850 "track" : "v2"
4851 },
4852 {
4853 "duration" : 6.372881355932179,
4854 "fadeIn" : 0,
4855 "fadeOut" : 0,
4856 "id" : "196CB0CE-61ED-4852-A694-AB8B592CF510",
4857 "kind" : "video",
4858 "linkId" : "346B7025-BD91-4339-98B4-DBE997BC1A27",
4859 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
4860 "muted" : false,
4861 "newShot" : false,
4862 "speed" : 1,
4863 "srcIn" : 1318.9448416934583,
4864 "start" : 378,
4865 "track" : "v3"
4866 },
4867 {
4868 "duration" : 6.372881355932179,
4869 "fadeIn" : 0,
4870 "fadeOut" : 0,
4871 "id" : "AB9E730D-3DB3-430E-92B1-8528951D9146",
4872 "kind" : "video",
4873 "linkId" : "346B7025-BD91-4339-98B4-DBE997BC1A27",
4874 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
4875 "muted" : false,
4876 "newShot" : false,
4877 "speed" : 1,
4878 "srcIn" : 1318.9448371094595,
4879 "start" : 378,
4880 "track" : "v4"
4881 },
4882 {
4883 "duration" : 10.983050847457662,
4884 "fadeIn" : 0,
4885 "fadeOut" : 0,
4886 "id" : "59AB16D3-EBCD-438B-8B8C-88413E1E8D67",
4887 "kind" : "video",
4888 "linkId" : "8A7CFF6A-2FE9-4C3F-813E-9DDC903D1C26",
4889 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
4890 "muted" : false,
4891 "newShot" : false,
4892 "speed" : 1,
4893 "srcIn" : 1327.1186440677966,
4894 "start" : 384.3728813559322,
4895 "track" : "v0"
4896 },
4897 {
4898 "duration" : 10.983050847457662,
4899 "fadeIn" : 0,
4900 "fadeOut" : 0,
4901 "id" : "77501D06-4929-403D-8FCB-6E79E9A296A4",
4902 "kind" : "audio",
4903 "linkId" : "8A7CFF6A-2FE9-4C3F-813E-9DDC903D1C26",
4904 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
4905 "muted" : true,
4906 "newShot" : false,
4907 "speed" : 1,
4908 "srcIn" : 1327.0347725264555,
4909 "start" : 384.3728813559322,
4910 "track" : "v1"
4911 },
4912 {
4913 "duration" : 10.983050847457662,
4914 "fadeIn" : 0,
4915 "fadeOut" : 0,
4916 "id" : "A8B5D5C7-311F-4D71-BD19-7B1BAC7B047E",
4917 "kind" : "audio",
4918 "linkId" : "8A7CFF6A-2FE9-4C3F-813E-9DDC903D1C26",
4919 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
4920 "muted" : false,
4921 "newShot" : false,
4922 "speed" : 1,
4923 "srcIn" : 1327.0814488296865,
4924 "start" : 384.3728813559322,
4925 "track" : "v2"
4926 },
4927 {
4928 "duration" : 10.983050847457662,
4929 "fadeIn" : 0,
4930 "fadeOut" : 0,
4931 "id" : "F9DB0D5E-9113-4D5E-81AB-EAE9AF22C7FE",
4932 "kind" : "video",
4933 "linkId" : "8A7CFF6A-2FE9-4C3F-813E-9DDC903D1C26",
4934 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
4935 "muted" : false,
4936 "newShot" : false,
4937 "speed" : 1,
4938 "srcIn" : 1326.9448416934583,
4939 "start" : 384.3728813559322,
4940 "track" : "v3"
4941 },
4942 {
4943 "duration" : 10.983050847457662,
4944 "fadeIn" : 0,
4945 "fadeOut" : 0,
4946 "id" : "D4A49349-31F4-41F7-91B5-682C810269F4",
4947 "kind" : "video",
4948 "linkId" : "8A7CFF6A-2FE9-4C3F-813E-9DDC903D1C26",
4949 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
4950 "muted" : false,
4951 "newShot" : false,
4952 "speed" : 1,
4953 "srcIn" : 1326.9448371094595,
4954 "start" : 384.3728813559322,
4955 "track" : "v4"
4956 },
4957 {
4958 "duration" : 14.169491525423723,
4959 "fadeIn" : 0,
4960 "fadeOut" : 0,
4961 "id" : "3BEF9E6B-7901-407C-BEA3-7AFAB2A27DF5",
4962 "kind" : "video",
4963 "linkId" : "704CF8B0-3041-4053-9080-715DFE6B2D25",
4964 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
4965 "muted" : false,
4966 "newShot" : false,
4967 "speed" : 1,
4968 "srcIn" : 1389.0169491525423,
4969 "start" : 395.35593220338984,
4970 "track" : "v0"
4971 },
4972 {
4973 "duration" : 14.169491525423723,
4974 "fadeIn" : 0,
4975 "fadeOut" : 0,
4976 "id" : "BC1D4D97-B973-4693-9B24-5823A5192FAA",
4977 "kind" : "audio",
4978 "linkId" : "704CF8B0-3041-4053-9080-715DFE6B2D25",
4979 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
4980 "muted" : true,
4981 "newShot" : false,
4982 "speed" : 1,
4983 "srcIn" : 1388.9330776112013,
4984 "start" : 395.35593220338984,
4985 "track" : "v1"
4986 },
4987 {
4988 "duration" : 14.169491525423723,
4989 "fadeIn" : 0,
4990 "fadeOut" : 0,
4991 "id" : "DBBCAF21-55F8-44F0-9F8A-4EA556B8EB57",
4992 "kind" : "audio",
4993 "linkId" : "704CF8B0-3041-4053-9080-715DFE6B2D25",
4994 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
4995 "muted" : false,
4996 "newShot" : false,
4997 "speed" : 1,
4998 "srcIn" : 1388.9797539144322,
4999 "start" : 395.35593220338984,
5000 "track" : "v2"
5001 },
5002 {
5003 "duration" : 14.169491525423723,
5004 "fadeIn" : 0,
5005 "fadeOut" : 0,
5006 "id" : "6C7A0EB2-88FC-4404-B48D-AA7FE6269170",
5007 "kind" : "video",
5008 "linkId" : "704CF8B0-3041-4053-9080-715DFE6B2D25",
5009 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
5010 "muted" : false,
5011 "newShot" : false,
5012 "speed" : 1,
5013 "srcIn" : 1388.843146778204,
5014 "start" : 395.35593220338984,
5015 "track" : "v3"
5016 },
5017 {
5018 "duration" : 14.169491525423723,
5019 "fadeIn" : 0,
5020 "fadeOut" : 0,
5021 "id" : "50068A9B-E7CF-4DD9-9917-7155FEEE9EA2",
5022 "kind" : "video",
5023 "linkId" : "704CF8B0-3041-4053-9080-715DFE6B2D25",
5024 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
5025 "muted" : false,
5026 "newShot" : false,
5027 "speed" : 1,
5028 "srcIn" : 1388.8431421942053,
5029 "start" : 395.35593220338984,
5030 "track" : "v4"
5031 },
5032 {
5033 "duration" : 12.610169491525426,
5034 "fadeIn" : 0,
5035 "fadeOut" : 0,
5036 "id" : "EA7CF47C-E4D3-437C-B0E5-4275167856C5",
5037 "kind" : "video",
5038 "linkId" : "5E30C5A7-ECB1-41A5-9456-2F737C45E0C1",
5039 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
5040 "muted" : false,
5041 "newShot" : false,
5042 "speed" : 1,
5043 "srcIn" : 1406.5762711864404,
5044 "start" : 409.52542372881356,
5045 "track" : "v0"
5046 },
5047 {
5048 "duration" : 12.610169491525426,
5049 "fadeIn" : 0,
5050 "fadeOut" : 0,
5051 "id" : "1E9A4B81-6D6C-4CEF-BCD9-A56D14BC12E5",
5052 "kind" : "audio",
5053 "linkId" : "5E30C5A7-ECB1-41A5-9456-2F737C45E0C1",
5054 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
5055 "muted" : true,
5056 "newShot" : false,
5057 "speed" : 1,
5058 "srcIn" : 1406.4923996450993,
5059 "start" : 409.52542372881356,
5060 "track" : "v1"
5061 },
5062 {
5063 "duration" : 12.610169491525426,
5064 "fadeIn" : 0,
5065 "fadeOut" : 0,
5066 "id" : "1506A648-D35B-4619-A082-06FF4E3CBA5B",
5067 "kind" : "audio",
5068 "linkId" : "5E30C5A7-ECB1-41A5-9456-2F737C45E0C1",
5069 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
5070 "muted" : false,
5071 "newShot" : false,
5072 "speed" : 1,
5073 "srcIn" : 1406.5390759483303,
5074 "start" : 409.52542372881356,
5075 "track" : "v2"
5076 },
5077 {
5078 "duration" : 12.610169491525426,
5079 "fadeIn" : 0,
5080 "fadeOut" : 0,
5081 "id" : "9D08D70B-5627-48C7-873D-A8153FA5DA0E",
5082 "kind" : "video",
5083 "linkId" : "5E30C5A7-ECB1-41A5-9456-2F737C45E0C1",
5084 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
5085 "muted" : false,
5086 "newShot" : false,
5087 "speed" : 1,
5088 "srcIn" : 1406.4024688121021,
5089 "start" : 409.52542372881356,
5090 "track" : "v3"
5091 },
5092 {
5093 "duration" : 12.610169491525426,
5094 "fadeIn" : 0,
5095 "fadeOut" : 0,
5096 "id" : "A6181FAE-7AFB-4D19-B593-91540501DC66",
5097 "kind" : "video",
5098 "linkId" : "5E30C5A7-ECB1-41A5-9456-2F737C45E0C1",
5099 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
5100 "muted" : false,
5101 "newShot" : false,
5102 "speed" : 1,
5103 "srcIn" : 1406.4024642281033,
5104 "start" : 409.52542372881356,
5105 "track" : "v4"
5106 },
5107 {
5108 "duration" : 12.13559322033899,
5109 "fadeIn" : 0,
5110 "fadeOut" : 0,
5111 "id" : "4E3F3515-7F7B-447C-BC9F-E4220A2BA2A2",
5112 "kind" : "video",
5113 "linkId" : "226C31FD-B8DF-4F4A-A67B-DCB285B8B836",
5114 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
5115 "muted" : false,
5116 "newShot" : false,
5117 "speed" : 1,
5118 "srcIn" : 1434.1694915254236,
5119 "start" : 428.271186440678,
5120 "track" : "v0"
5121 },
5122 {
5123 "duration" : 12.13559322033899,
5124 "fadeIn" : 0,
5125 "fadeOut" : 0,
5126 "id" : "635A9B0E-7D5C-4F08-BEB1-0D43CEB95071",
5127 "kind" : "audio",
5128 "linkId" : "226C31FD-B8DF-4F4A-A67B-DCB285B8B836",
5129 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
5130 "muted" : true,
5131 "newShot" : false,
5132 "speed" : 1,
5133 "srcIn" : 1434.0856199840825,
5134 "start" : 428.271186440678,
5135 "track" : "v1"
5136 },
5137 {
5138 "duration" : 12.13559322033899,
5139 "fadeIn" : 0,
5140 "fadeOut" : 0,
5141 "id" : "B26C43CA-9142-4FF8-8DE6-5FB3CF02701F",
5142 "kind" : "audio",
5143 "linkId" : "226C31FD-B8DF-4F4A-A67B-DCB285B8B836",
5144 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
5145 "muted" : false,
5146 "newShot" : false,
5147 "speed" : 1,
5148 "srcIn" : 1434.1322962873135,
5149 "start" : 428.271186440678,
5150 "track" : "v2"
5151 },
5152 {
5153 "duration" : 12.13559322033899,
5154 "fadeIn" : 0,
5155 "fadeOut" : 0,
5156 "id" : "1D681666-828B-4516-905F-70C0B9927714",
5157 "kind" : "video",
5158 "linkId" : "226C31FD-B8DF-4F4A-A67B-DCB285B8B836",
5159 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
5160 "muted" : false,
5161 "newShot" : false,
5162 "speed" : 1,
5163 "srcIn" : 1433.9956891510853,
5164 "start" : 428.271186440678,
5165 "track" : "v3"
5166 },
5167 {
5168 "duration" : 12.13559322033899,
5169 "fadeIn" : 0,
5170 "fadeOut" : 0,
5171 "id" : "14FFF5E0-4F74-4347-AEC2-714B77823B90",
5172 "kind" : "video",
5173 "linkId" : "226C31FD-B8DF-4F4A-A67B-DCB285B8B836",
5174 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
5175 "muted" : false,
5176 "newShot" : false,
5177 "speed" : 1,
5178 "srcIn" : 1433.9956845670865,
5179 "start" : 428.271186440678,
5180 "track" : "v4"
5181 },
5182 {
5183 "duration" : 6.13559322033899,
5184 "fadeIn" : 0,
5185 "fadeOut" : 0,
5186 "id" : "651982BC-F62C-433E-9CA6-7F53FDD18AD2",
5187 "kind" : "video",
5188 "linkId" : "985611EC-FA7E-4535-BFEC-AECD319001B6",
5189 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
5190 "muted" : false,
5191 "newShot" : false,
5192 "speed" : 1,
5193 "srcIn" : 1428.0338983050847,
5194 "start" : 422.135593220339,
5195 "track" : "v0"
5196 },
5197 {
5198 "duration" : 6.13559322033899,
5199 "fadeIn" : 0,
5200 "fadeOut" : 0,
5201 "id" : "011DD52B-7DF9-4AB2-9143-9249F293A98C",
5202 "kind" : "audio",
5203 "linkId" : "985611EC-FA7E-4535-BFEC-AECD319001B6",
5204 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
5205 "muted" : true,
5206 "newShot" : false,
5207 "speed" : 1,
5208 "srcIn" : 1427.9500267637436,
5209 "start" : 422.135593220339,
5210 "track" : "v1"
5211 },
5212 {
5213 "duration" : 6.13559322033899,
5214 "fadeIn" : 0,
5215 "fadeOut" : 0,
5216 "id" : "9C6C77CE-A577-41A8-AF62-5B1AD22511CB",
5217 "kind" : "audio",
5218 "linkId" : "985611EC-FA7E-4535-BFEC-AECD319001B6",
5219 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
5220 "muted" : false,
5221 "newShot" : false,
5222 "speed" : 1,
5223 "srcIn" : 1427.9967030669745,
5224 "start" : 422.135593220339,
5225 "track" : "v2"
5226 },
5227 {
5228 "duration" : 6.13559322033899,
5229 "fadeIn" : 0,
5230 "fadeOut" : 0,
5231 "id" : "81445B0A-E2DC-4623-B61E-F78297F1AF9B",
5232 "kind" : "video",
5233 "linkId" : "985611EC-FA7E-4535-BFEC-AECD319001B6",
5234 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
5235 "muted" : false,
5236 "newShot" : false,
5237 "speed" : 1,
5238 "srcIn" : 1427.8600959307464,
5239 "start" : 422.135593220339,
5240 "track" : "v3"
5241 },
5242 {
5243 "duration" : 6.13559322033899,
5244 "fadeIn" : 0,
5245 "fadeOut" : 0,
5246 "id" : "2FCF79AA-A233-43B0-924A-F22316673337",
5247 "kind" : "video",
5248 "linkId" : "985611EC-FA7E-4535-BFEC-AECD319001B6",
5249 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
5250 "muted" : false,
5251 "newShot" : false,
5252 "speed" : 1,
5253 "srcIn" : 1427.8600913467476,
5254 "start" : 422.135593220339,
5255 "track" : "v4"
5256 },
5257 {
5258 "duration" : 9.45762711864404,
5259 "fadeIn" : 0,
5260 "fadeOut" : 0,
5261 "id" : "3226AEDC-71C8-4045-95AB-2938C4E153FF",
5262 "kind" : "video",
5263 "linkId" : "ABBC461D-6EED-494A-8B1A-7677A2E7D027",
5264 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
5265 "muted" : false,
5266 "newShot" : false,
5267 "speed" : 1,
5268 "srcIn" : 1449.559322033898,
5269 "start" : 440.40677966101697,
5270 "track" : "v0"
5271 },
5272 {
5273 "duration" : 9.45762711864404,
5274 "fadeIn" : 0,
5275 "fadeOut" : 0,
5276 "id" : "FAF956D0-C01F-4926-93F2-49FA34A04E13",
5277 "kind" : "audio",
5278 "linkId" : "ABBC461D-6EED-494A-8B1A-7677A2E7D027",
5279 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
5280 "muted" : true,
5281 "newShot" : false,
5282 "speed" : 1,
5283 "srcIn" : 1449.475450492557,
5284 "start" : 440.40677966101697,
5285 "track" : "v1"
5286 },
5287 {
5288 "duration" : 9.45762711864404,
5289 "fadeIn" : 0,
5290 "fadeOut" : 0,
5291 "id" : "3EB9B48B-CACE-4489-BAFE-59EB0F2E6305",
5292 "kind" : "audio",
5293 "linkId" : "ABBC461D-6EED-494A-8B1A-7677A2E7D027",
5294 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
5295 "muted" : false,
5296 "newShot" : false,
5297 "speed" : 1,
5298 "srcIn" : 1449.522126795788,
5299 "start" : 440.40677966101697,
5300 "track" : "v2"
5301 },
5302 {
5303 "duration" : 9.45762711864404,
5304 "fadeIn" : 0,
5305 "fadeOut" : 0,
5306 "id" : "4406B9FA-D633-49BC-BB25-FA2554A8FA6A",
5307 "kind" : "video",
5308 "linkId" : "ABBC461D-6EED-494A-8B1A-7677A2E7D027",
5309 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
5310 "muted" : false,
5311 "newShot" : false,
5312 "speed" : 1,
5313 "srcIn" : 1449.3855196595598,
5314 "start" : 440.40677966101697,
5315 "track" : "v3"
5316 },
5317 {
5318 "duration" : 9.45762711864404,
5319 "fadeIn" : 0,
5320 "fadeOut" : 0,
5321 "id" : "99E4D7B0-8E74-4871-B79C-5EE9AE03E424",
5322 "kind" : "video",
5323 "linkId" : "ABBC461D-6EED-494A-8B1A-7677A2E7D027",
5324 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
5325 "muted" : false,
5326 "newShot" : false,
5327 "speed" : 1,
5328 "srcIn" : 1449.385515075561,
5329 "start" : 440.40677966101697,
5330 "track" : "v4"
5331 },
5332 {
5333 "duration" : 6.677966101694949,
5334 "fadeIn" : 0,
5335 "fadeOut" : 0,
5336 "id" : "559361D5-9DB2-4B63-8E39-79DEB5DA658A",
5337 "kind" : "video",
5338 "linkId" : "F4E6AD2E-D33A-4B9D-9CC7-E85C4DF5F3C7",
5339 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
5340 "muted" : false,
5341 "newShot" : false,
5342 "speed" : 1,
5343 "srcIn" : 1462.64406779661,
5344 "start" : 449.864406779661,
5345 "track" : "v0"
5346 },
5347 {
5348 "duration" : 6.677966101694949,
5349 "fadeIn" : 0,
5350 "fadeOut" : 0,
5351 "id" : "37884883-822C-45CA-B6E1-133027A1718A",
5352 "kind" : "audio",
5353 "linkId" : "F4E6AD2E-D33A-4B9D-9CC7-E85C4DF5F3C7",
5354 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
5355 "muted" : true,
5356 "newShot" : false,
5357 "speed" : 1,
5358 "srcIn" : 1462.560196255269,
5359 "start" : 449.864406779661,
5360 "track" : "v1"
5361 },
5362 {
5363 "duration" : 6.677966101694949,
5364 "fadeIn" : 0,
5365 "fadeOut" : 0,
5366 "id" : "81675B52-F6A6-4C8A-997F-8AF4803A89E7",
5367 "kind" : "audio",
5368 "linkId" : "F4E6AD2E-D33A-4B9D-9CC7-E85C4DF5F3C7",
5369 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
5370 "muted" : false,
5371 "newShot" : false,
5372 "speed" : 1,
5373 "srcIn" : 1462.6068725584998,
5374 "start" : 449.864406779661,
5375 "track" : "v2"
5376 },
5377 {
5378 "duration" : 6.677966101694949,
5379 "fadeIn" : 0,
5380 "fadeOut" : 0,
5381 "id" : "4787230C-8C29-4CF7-854E-A3AB00759466",
5382 "kind" : "video",
5383 "linkId" : "F4E6AD2E-D33A-4B9D-9CC7-E85C4DF5F3C7",
5384 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
5385 "muted" : false,
5386 "newShot" : false,
5387 "speed" : 1,
5388 "srcIn" : 1462.4702654222717,
5389 "start" : 449.864406779661,
5390 "track" : "v3"
5391 },
5392 {
5393 "duration" : 6.677966101694949,
5394 "fadeIn" : 0,
5395 "fadeOut" : 0,
5396 "id" : "CDA54502-AAC3-496A-B251-B43F1F744E11",
5397 "kind" : "video",
5398 "linkId" : "F4E6AD2E-D33A-4B9D-9CC7-E85C4DF5F3C7",
5399 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
5400 "muted" : false,
5401 "newShot" : false,
5402 "speed" : 1,
5403 "srcIn" : 1462.470260838273,
5404 "start" : 449.864406779661,
5405 "track" : "v4"
5406 },
5407 {
5408 "duration" : 2.1016949152541997,
5409 "fadeIn" : 0,
5410 "fadeOut" : 0,
5411 "id" : "CEDDFF86-9747-4058-98DC-1EB7A4B1F572",
5412 "kind" : "video",
5413 "linkId" : "EDBE29AE-0AD9-452E-A93A-771CE2BE813D",
5414 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
5415 "muted" : false,
5416 "newShot" : false,
5417 "speed" : 1,
5418 "srcIn" : 1471.6610169491523,
5419 "start" : 456.54237288135596,
5420 "track" : "v0"
5421 },
5422 {
5423 "duration" : 2.1016949152541997,
5424 "fadeIn" : 0,
5425 "fadeOut" : 0,
5426 "id" : "65DBD942-E0B7-428A-B955-F7C74957C7E7",
5427 "kind" : "audio",
5428 "linkId" : "EDBE29AE-0AD9-452E-A93A-771CE2BE813D",
5429 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
5430 "muted" : true,
5431 "newShot" : false,
5432 "speed" : 1,
5433 "srcIn" : 1471.5771454078113,
5434 "start" : 456.54237288135596,
5435 "track" : "v1"
5436 },
5437 {
5438 "duration" : 2.1016949152541997,
5439 "fadeIn" : 0,
5440 "fadeOut" : 0,
5441 "id" : "F6898171-8F65-41C6-8518-DFF6DBBABC04",
5442 "kind" : "audio",
5443 "linkId" : "EDBE29AE-0AD9-452E-A93A-771CE2BE813D",
5444 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
5445 "muted" : false,
5446 "newShot" : false,
5447 "speed" : 1,
5448 "srcIn" : 1471.6238217110422,
5449 "start" : 456.54237288135596,
5450 "track" : "v2"
5451 },
5452 {
5453 "duration" : 2.1016949152541997,
5454 "fadeIn" : 0,
5455 "fadeOut" : 0,
5456 "id" : "D865CA10-5853-486F-82AD-02B05EE60EDB",
5457 "kind" : "video",
5458 "linkId" : "EDBE29AE-0AD9-452E-A93A-771CE2BE813D",
5459 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
5460 "muted" : false,
5461 "newShot" : false,
5462 "speed" : 1,
5463 "srcIn" : 1471.487214574814,
5464 "start" : 456.54237288135596,
5465 "track" : "v3"
5466 },
5467 {
5468 "duration" : 2.1016949152541997,
5469 "fadeIn" : 0,
5470 "fadeOut" : 0,
5471 "id" : "0616F857-62D2-44F6-A078-21F47E1CD066",
5472 "kind" : "video",
5473 "linkId" : "EDBE29AE-0AD9-452E-A93A-771CE2BE813D",
5474 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
5475 "muted" : false,
5476 "newShot" : false,
5477 "speed" : 1,
5478 "srcIn" : 1471.4872099908152,
5479 "start" : 456.54237288135596,
5480 "track" : "v4"
5481 },
5482 {
5483 "duration" : 8.101694915254257,
5484 "fadeIn" : 0,
5485 "fadeOut" : 0,
5486 "id" : "A734B468-A8AC-4E1B-BBFF-00BCD0D78390",
5487 "kind" : "video",
5488 "linkId" : "E9457961-D7DC-4D55-8C56-3E6D232AC821",
5489 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
5490 "muted" : false,
5491 "newShot" : false,
5492 "speed" : 1,
5493 "srcIn" : 1478.3389830508472,
5494 "start" : 458.64406779661016,
5495 "track" : "v0"
5496 },
5497 {
5498 "duration" : 8.101694915254257,
5499 "fadeIn" : 0,
5500 "fadeOut" : 0,
5501 "id" : "0B521685-7B77-48BB-B145-8FC0FC1B8D14",
5502 "kind" : "audio",
5503 "linkId" : "E9457961-D7DC-4D55-8C56-3E6D232AC821",
5504 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
5505 "muted" : true,
5506 "newShot" : false,
5507 "speed" : 1,
5508 "srcIn" : 1478.2551115095062,
5509 "start" : 458.64406779661016,
5510 "track" : "v1"
5511 },
5512 {
5513 "duration" : 8.101694915254257,
5514 "fadeIn" : 0,
5515 "fadeOut" : 0,
5516 "id" : "B79DCE82-D278-4E64-BF3E-DD1383DE9320",
5517 "kind" : "audio",
5518 "linkId" : "E9457961-D7DC-4D55-8C56-3E6D232AC821",
5519 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
5520 "muted" : false,
5521 "newShot" : false,
5522 "speed" : 1,
5523 "srcIn" : 1478.301787812737,
5524 "start" : 458.64406779661016,
5525 "track" : "v2"
5526 },
5527 {
5528 "duration" : 8.101694915254257,
5529 "fadeIn" : 0,
5530 "fadeOut" : 0,
5531 "id" : "C1373384-5CBC-48DA-AEEA-B1DC0A1277AB",
5532 "kind" : "video",
5533 "linkId" : "E9457961-D7DC-4D55-8C56-3E6D232AC821",
5534 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
5535 "muted" : false,
5536 "newShot" : false,
5537 "speed" : 1,
5538 "srcIn" : 1478.165180676509,
5539 "start" : 458.64406779661016,
5540 "track" : "v3"
5541 },
5542 {
5543 "duration" : 8.101694915254257,
5544 "fadeIn" : 0,
5545 "fadeOut" : 0,
5546 "id" : "8B3DE2A2-8DE0-408E-96C4-669DAE9AD4A9",
5547 "kind" : "video",
5548 "linkId" : "E9457961-D7DC-4D55-8C56-3E6D232AC821",
5549 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
5550 "muted" : false,
5551 "newShot" : false,
5552 "speed" : 1,
5553 "srcIn" : 1478.1651760925101,
5554 "start" : 458.64406779661016,
5555 "track" : "v4"
5556 },
5557 {
5558 "duration" : 2.13559322033899,
5559 "fadeIn" : 0,
5560 "fadeOut" : 0,
5561 "id" : "EFA97D54-119E-4829-9D03-E931F198D283",
5562 "kind" : "video",
5563 "linkId" : "8FAC32E3-47A3-49EC-A6FC-51E8FD39E2C8",
5564 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
5565 "muted" : false,
5566 "newShot" : false,
5567 "speed" : 1,
5568 "srcIn" : 1491.2203389830506,
5569 "start" : 466.7457627118644,
5570 "track" : "v0"
5571 },
5572 {
5573 "duration" : 2.13559322033899,
5574 "fadeIn" : 0,
5575 "fadeOut" : 0,
5576 "id" : "D10DB1AB-A596-41C4-99D6-2874E01C4666",
5577 "kind" : "audio",
5578 "linkId" : "8FAC32E3-47A3-49EC-A6FC-51E8FD39E2C8",
5579 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
5580 "muted" : true,
5581 "newShot" : false,
5582 "speed" : 1,
5583 "srcIn" : 1491.1364674417096,
5584 "start" : 466.7457627118644,
5585 "track" : "v1"
5586 },
5587 {
5588 "duration" : 2.13559322033899,
5589 "fadeIn" : 0,
5590 "fadeOut" : 0,
5591 "id" : "05FD9DBC-666B-4F86-98C5-B006D88468C8",
5592 "kind" : "audio",
5593 "linkId" : "8FAC32E3-47A3-49EC-A6FC-51E8FD39E2C8",
5594 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
5595 "muted" : false,
5596 "newShot" : false,
5597 "speed" : 1,
5598 "srcIn" : 1491.1831437449405,
5599 "start" : 466.7457627118644,
5600 "track" : "v2"
5601 },
5602 {
5603 "duration" : 2.13559322033899,
5604 "fadeIn" : 0,
5605 "fadeOut" : 0,
5606 "id" : "F8379F4E-716C-4AB7-A712-E90386ACAAF5",
5607 "kind" : "video",
5608 "linkId" : "8FAC32E3-47A3-49EC-A6FC-51E8FD39E2C8",
5609 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
5610 "muted" : false,
5611 "newShot" : false,
5612 "speed" : 1,
5613 "srcIn" : 1491.0465366087124,
5614 "start" : 466.7457627118644,
5615 "track" : "v3"
5616 },
5617 {
5618 "duration" : 2.13559322033899,
5619 "fadeIn" : 0,
5620 "fadeOut" : 0,
5621 "id" : "0AE01210-BDC5-4A27-A1D9-447FB98CBD8C",
5622 "kind" : "video",
5623 "linkId" : "8FAC32E3-47A3-49EC-A6FC-51E8FD39E2C8",
5624 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
5625 "muted" : false,
5626 "newShot" : false,
5627 "speed" : 1,
5628 "srcIn" : 1491.0465320247135,
5629 "start" : 466.7457627118644,
5630 "track" : "v4"
5631 },
5632 {
5633 "duration" : 12.13559322033899,
5634 "fadeIn" : 0,
5635 "fadeOut" : 0,
5636 "id" : "17C94894-CE9A-414A-99D9-983680DBF3C0",
5637 "kind" : "video",
5638 "linkId" : "BD0AA767-5E48-4364-B00E-41745729A942",
5639 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
5640 "muted" : false,
5641 "newShot" : false,
5642 "speed" : 1,
5643 "srcIn" : 1493.3559322033896,
5644 "start" : 468.8813559322034,
5645 "track" : "v0"
5646 },
5647 {
5648 "duration" : 12.13559322033899,
5649 "fadeIn" : 0,
5650 "fadeOut" : 0,
5651 "id" : "517FEEE5-722F-4AF0-9739-D6C4CBFF13F7",
5652 "kind" : "audio",
5653 "linkId" : "BD0AA767-5E48-4364-B00E-41745729A942",
5654 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
5655 "muted" : true,
5656 "newShot" : false,
5657 "speed" : 1,
5658 "srcIn" : 1493.2720606620485,
5659 "start" : 468.8813559322034,
5660 "track" : "v1"
5661 },
5662 {
5663 "duration" : 12.13559322033899,
5664 "fadeIn" : 0,
5665 "fadeOut" : 0,
5666 "id" : "66CDAA10-44F3-4B54-AE2E-76150ACC9CD0",
5667 "kind" : "audio",
5668 "linkId" : "BD0AA767-5E48-4364-B00E-41745729A942",
5669 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
5670 "muted" : false,
5671 "newShot" : false,
5672 "speed" : 1,
5673 "srcIn" : 1493.3187369652794,
5674 "start" : 468.8813559322034,
5675 "track" : "v2"
5676 },
5677 {
5678 "duration" : 12.13559322033899,
5679 "fadeIn" : 0,
5680 "fadeOut" : 0,
5681 "id" : "A6487CCD-4DF5-4DD5-BFE5-2536683FBC19",
5682 "kind" : "video",
5683 "linkId" : "BD0AA767-5E48-4364-B00E-41745729A942",
5684 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
5685 "muted" : false,
5686 "newShot" : false,
5687 "speed" : 1,
5688 "srcIn" : 1493.1821298290513,
5689 "start" : 468.8813559322034,
5690 "track" : "v3"
5691 },
5692 {
5693 "duration" : 12.13559322033899,
5694 "fadeIn" : 0,
5695 "fadeOut" : 0,
5696 "id" : "3E4AB4B8-236F-4408-8452-95DFA2ED6598",
5697 "kind" : "video",
5698 "linkId" : "BD0AA767-5E48-4364-B00E-41745729A942",
5699 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
5700 "muted" : false,
5701 "newShot" : false,
5702 "speed" : 1,
5703 "srcIn" : 1493.1821252450525,
5704 "start" : 468.8813559322034,
5705 "track" : "v4"
5706 },
5707 {
5708 "duration" : 2.7796610169491487,
5709 "fadeIn" : 0,
5710 "fadeOut" : 0,
5711 "id" : "D2B2B51E-C0F9-43FA-A96C-FF04E0956544",
5712 "kind" : "video",
5713 "linkId" : "F6AD378F-5CCF-4E64-988D-88B2876624B9",
5714 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
5715 "muted" : false,
5716 "newShot" : false,
5717 "speed" : 1,
5718 "srcIn" : 1537.8644067796606,
5719 "start" : 481.0169491525424,
5720 "track" : "v0"
5721 },
5722 {
5723 "duration" : 2.7796610169491487,
5724 "fadeIn" : 0,
5725 "fadeOut" : 0,
5726 "id" : "6F365D36-DA75-4DAC-875E-2799D7405B79",
5727 "kind" : "audio",
5728 "linkId" : "F6AD378F-5CCF-4E64-988D-88B2876624B9",
5729 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
5730 "muted" : true,
5731 "newShot" : false,
5732 "speed" : 1,
5733 "srcIn" : 1537.7805352383195,
5734 "start" : 481.0169491525424,
5735 "track" : "v1"
5736 },
5737 {
5738 "duration" : 2.7796610169491487,
5739 "fadeIn" : 0,
5740 "fadeOut" : 0,
5741 "id" : "6086A913-26DD-4E7A-8DA8-5B7FF6C55700",
5742 "kind" : "audio",
5743 "linkId" : "F6AD378F-5CCF-4E64-988D-88B2876624B9",
5744 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
5745 "muted" : false,
5746 "newShot" : false,
5747 "speed" : 1,
5748 "srcIn" : 1537.8272115415505,
5749 "start" : 481.0169491525424,
5750 "track" : "v2"
5751 },
5752 {
5753 "duration" : 2.7796610169491487,
5754 "fadeIn" : 0,
5755 "fadeOut" : 0,
5756 "id" : "2F29A3B0-A10F-4DB4-B9E2-B76DBFA73359",
5757 "kind" : "video",
5758 "linkId" : "F6AD378F-5CCF-4E64-988D-88B2876624B9",
5759 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
5760 "muted" : false,
5761 "newShot" : false,
5762 "speed" : 1,
5763 "srcIn" : 1537.6906044053223,
5764 "start" : 481.0169491525424,
5765 "track" : "v3"
5766 },
5767 {
5768 "duration" : 2.7796610169491487,
5769 "fadeIn" : 0,
5770 "fadeOut" : 0,
5771 "id" : "1684BBB7-47B4-4BFA-B8C1-058C3FAC9CED",
5772 "kind" : "video",
5773 "linkId" : "F6AD378F-5CCF-4E64-988D-88B2876624B9",
5774 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
5775 "muted" : false,
5776 "newShot" : false,
5777 "speed" : 1,
5778 "srcIn" : 1537.6905998213235,
5779 "start" : 481.0169491525424,
5780 "track" : "v4"
5781 },
5782 {
5783 "duration" : 1.0847457627118615,
5784 "fadeIn" : 0,
5785 "fadeOut" : 0,
5786 "id" : "A7680D68-6BCD-4F79-A28F-858D96D4A6E2",
5787 "kind" : "video",
5788 "linkId" : "A3087F67-EF84-47FF-B3BE-7F42F50669A0",
5789 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
5790 "muted" : false,
5791 "newShot" : false,
5792 "speed" : 1,
5793 "srcIn" : 1540.6440677966098,
5794 "start" : 483.79661016949154,
5795 "track" : "v0"
5796 },
5797 {
5798 "duration" : 1.0847457627118615,
5799 "fadeIn" : 0,
5800 "fadeOut" : 0,
5801 "id" : "3854E595-101A-4295-A1B3-5765E651A0AF",
5802 "kind" : "audio",
5803 "linkId" : "A3087F67-EF84-47FF-B3BE-7F42F50669A0",
5804 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
5805 "muted" : true,
5806 "newShot" : false,
5807 "speed" : 1,
5808 "srcIn" : 1540.5601962552687,
5809 "start" : 483.79661016949154,
5810 "track" : "v1"
5811 },
5812 {
5813 "duration" : 1.0847457627118615,
5814 "fadeIn" : 0,
5815 "fadeOut" : 0,
5816 "id" : "D256891E-1C5E-4D56-9CA9-3638EDDF53E4",
5817 "kind" : "audio",
5818 "linkId" : "A3087F67-EF84-47FF-B3BE-7F42F50669A0",
5819 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
5820 "muted" : false,
5821 "newShot" : false,
5822 "speed" : 1,
5823 "srcIn" : 1540.6068725584996,
5824 "start" : 483.79661016949154,
5825 "track" : "v2"
5826 },
5827 {
5828 "duration" : 1.0847457627118615,
5829 "fadeIn" : 0,
5830 "fadeOut" : 0,
5831 "id" : "B12D34EF-C8C7-49A2-8C6F-04B3A3068BC7",
5832 "kind" : "video",
5833 "linkId" : "A3087F67-EF84-47FF-B3BE-7F42F50669A0",
5834 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
5835 "muted" : false,
5836 "newShot" : false,
5837 "speed" : 1,
5838 "srcIn" : 1540.4702654222715,
5839 "start" : 483.79661016949154,
5840 "track" : "v3"
5841 },
5842 {
5843 "duration" : 1.0847457627118615,
5844 "fadeIn" : 0,
5845 "fadeOut" : 0,
5846 "id" : "D07A239B-1D03-40C0-82F5-BF4EE984E137",
5847 "kind" : "video",
5848 "linkId" : "A3087F67-EF84-47FF-B3BE-7F42F50669A0",
5849 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
5850 "muted" : false,
5851 "newShot" : false,
5852 "speed" : 1,
5853 "srcIn" : 1540.4702608382727,
5854 "start" : 483.79661016949154,
5855 "track" : "v4"
5856 },
5857 {
5858 "duration" : 3.5932203389830306,
5859 "fadeIn" : 0,
5860 "fadeOut" : 0,
5861 "id" : "B7BE7F5F-53C9-40B3-9F12-7DF7A2D9685A",
5862 "kind" : "video",
5863 "linkId" : "F9AD2997-81A6-4EF6-BD27-5B43EE87F75A",
5864 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
5865 "muted" : false,
5866 "newShot" : false,
5867 "speed" : 1,
5868 "srcIn" : 1630.745762711864,
5869 "start" : 484.8813559322034,
5870 "track" : "v0"
5871 },
5872 {
5873 "duration" : 3.5932203389830306,
5874 "fadeIn" : 0,
5875 "fadeOut" : 0,
5876 "id" : "B0F7D729-54ED-422A-B202-11DF2760B5F3",
5877 "kind" : "audio",
5878 "linkId" : "F9AD2997-81A6-4EF6-BD27-5B43EE87F75A",
5879 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
5880 "muted" : true,
5881 "newShot" : false,
5882 "speed" : 1,
5883 "srcIn" : 1630.661891170523,
5884 "start" : 484.8813559322034,
5885 "track" : "v1"
5886 },
5887 {
5888 "duration" : 3.5932203389830306,
5889 "fadeIn" : 0,
5890 "fadeOut" : 0,
5891 "id" : "905A3ACC-296C-4843-B9D9-B86F50F5BA5F",
5892 "kind" : "audio",
5893 "linkId" : "F9AD2997-81A6-4EF6-BD27-5B43EE87F75A",
5894 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
5895 "muted" : false,
5896 "newShot" : false,
5897 "speed" : 1,
5898 "srcIn" : 1630.7085674737539,
5899 "start" : 484.8813559322034,
5900 "track" : "v2"
5901 },
5902 {
5903 "duration" : 3.5932203389830306,
5904 "fadeIn" : 0,
5905 "fadeOut" : 0,
5906 "id" : "0B7D26CE-983C-4362-B1CD-AC3A40378E3B",
5907 "kind" : "video",
5908 "linkId" : "F9AD2997-81A6-4EF6-BD27-5B43EE87F75A",
5909 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
5910 "muted" : false,
5911 "newShot" : false,
5912 "speed" : 1,
5913 "srcIn" : 1630.5719603375258,
5914 "start" : 484.8813559322034,
5915 "track" : "v3"
5916 },
5917 {
5918 "duration" : 3.5932203389830306,
5919 "fadeIn" : 0,
5920 "fadeOut" : 0,
5921 "id" : "AFE6D697-39D5-420E-BD1B-A64E0A13DC41",
5922 "kind" : "video",
5923 "linkId" : "F9AD2997-81A6-4EF6-BD27-5B43EE87F75A",
5924 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
5925 "muted" : false,
5926 "newShot" : false,
5927 "speed" : 1,
5928 "srcIn" : 1630.571955753527,
5929 "start" : 484.8813559322034,
5930 "track" : "v4"
5931 },
5932 {
5933 "duration" : 5.525423728813564,
5934 "fadeIn" : 0,
5935 "fadeOut" : 0,
5936 "id" : "FFF0A0F3-132A-4462-A828-0FAEB88BBC4D",
5937 "kind" : "video",
5938 "linkId" : "0DB5CF0D-9192-4B84-94D8-6B5373F51616",
5939 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
5940 "muted" : false,
5941 "newShot" : false,
5942 "speed" : 1,
5943 "srcIn" : 1690.881355932203,
5944 "start" : 488.47457627118644,
5945 "track" : "v0"
5946 },
5947 {
5948 "duration" : 5.525423728813564,
5949 "fadeIn" : 0,
5950 "fadeOut" : 0,
5951 "id" : "8C1B2FDC-C8A5-44ED-9F1E-CA222B045C32",
5952 "kind" : "audio",
5953 "linkId" : "0DB5CF0D-9192-4B84-94D8-6B5373F51616",
5954 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
5955 "muted" : true,
5956 "newShot" : false,
5957 "speed" : 1,
5958 "srcIn" : 1690.7974843908619,
5959 "start" : 488.47457627118644,
5960 "track" : "v1"
5961 },
5962 {
5963 "duration" : 5.525423728813564,
5964 "fadeIn" : 0,
5965 "fadeOut" : 0,
5966 "id" : "630C64EC-19AC-4FC2-B36B-5B8934D80D33",
5967 "kind" : "audio",
5968 "linkId" : "0DB5CF0D-9192-4B84-94D8-6B5373F51616",
5969 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
5970 "muted" : false,
5971 "newShot" : false,
5972 "speed" : 1,
5973 "srcIn" : 1690.8441606940928,
5974 "start" : 488.47457627118644,
5975 "track" : "v2"
5976 },
5977 {
5978 "duration" : 5.525423728813564,
5979 "fadeIn" : 0,
5980 "fadeOut" : 0,
5981 "id" : "234A86B0-ECCC-4314-9B52-A58DB3C619BB",
5982 "kind" : "video",
5983 "linkId" : "0DB5CF0D-9192-4B84-94D8-6B5373F51616",
5984 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
5985 "muted" : false,
5986 "newShot" : false,
5987 "speed" : 1,
5988 "srcIn" : 1690.7075535578647,
5989 "start" : 488.47457627118644,
5990 "track" : "v3"
5991 },
5992 {
5993 "duration" : 5.525423728813564,
5994 "fadeIn" : 0,
5995 "fadeOut" : 0,
5996 "id" : "02321509-9B22-45BA-884A-BFB975074D08",
5997 "kind" : "video",
5998 "linkId" : "0DB5CF0D-9192-4B84-94D8-6B5373F51616",
5999 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
6000 "muted" : false,
6001 "newShot" : false,
6002 "speed" : 1,
6003 "srcIn" : 1690.7075489738659,
6004 "start" : 488.47457627118644,
6005 "track" : "v4"
6006 },
6007 {
6008 "duration" : 3.9661016949152668,
6009 "fadeIn" : 0,
6010 "fadeOut" : 0,
6011 "id" : "A8D392D7-E60E-4189-B7D6-B1C2B5E6927D",
6012 "kind" : "video",
6013 "linkId" : "A50B7D21-1369-498E-A893-10D9266DA682",
6014 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
6015 "muted" : false,
6016 "newShot" : false,
6017 "speed" : 1,
6018 "srcIn" : 1703.5254237288132,
6019 "start" : 494,
6020 "track" : "v0"
6021 },
6022 {
6023 "duration" : 3.9661016949152668,
6024 "fadeIn" : 0,
6025 "fadeOut" : 0,
6026 "id" : "79B92814-E4D4-422A-B414-FEC1D42BABF8",
6027 "kind" : "audio",
6028 "linkId" : "A50B7D21-1369-498E-A893-10D9266DA682",
6029 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
6030 "muted" : true,
6031 "newShot" : false,
6032 "speed" : 1,
6033 "srcIn" : 1703.441552187472,
6034 "start" : 494,
6035 "track" : "v1"
6036 },
6037 {
6038 "duration" : 3.9661016949152668,
6039 "fadeIn" : 0,
6040 "fadeOut" : 0,
6041 "id" : "154F32D0-7DAB-433B-833A-86D9F7B2B99E",
6042 "kind" : "audio",
6043 "linkId" : "A50B7D21-1369-498E-A893-10D9266DA682",
6044 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
6045 "muted" : false,
6046 "newShot" : false,
6047 "speed" : 1,
6048 "srcIn" : 1703.488228490703,
6049 "start" : 494,
6050 "track" : "v2"
6051 },
6052 {
6053 "duration" : 3.9661016949152668,
6054 "fadeIn" : 0,
6055 "fadeOut" : 0,
6056 "id" : "C57B1520-E9CD-43AB-ABB5-AA9F59B97CE5",
6057 "kind" : "video",
6058 "linkId" : "A50B7D21-1369-498E-A893-10D9266DA682",
6059 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
6060 "muted" : false,
6061 "newShot" : false,
6062 "speed" : 1,
6063 "srcIn" : 1703.351621354475,
6064 "start" : 494,
6065 "track" : "v3"
6066 },
6067 {
6068 "duration" : 3.9661016949152668,
6069 "fadeIn" : 0,
6070 "fadeOut" : 0,
6071 "id" : "72ECB107-E625-47A0-91F5-4B07C84F9D01",
6072 "kind" : "video",
6073 "linkId" : "A50B7D21-1369-498E-A893-10D9266DA682",
6074 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
6075 "muted" : false,
6076 "newShot" : false,
6077 "speed" : 1,
6078 "srcIn" : 1703.351616770476,
6079 "start" : 494,
6080 "track" : "v4"
6081 },
6082 {
6083 "duration" : 3.322033898305051,
6084 "fadeIn" : 0,
6085 "fadeOut" : 0,
6086 "id" : "592BF8E8-84BB-4D68-ACAF-C5250A378311",
6087 "kind" : "video",
6088 "linkId" : "2F16524C-A3E5-4EC3-B918-2C0107EB5F71",
6089 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
6090 "muted" : false,
6091 "newShot" : false,
6092 "speed" : 1,
6093 "srcIn" : 1714.4067796610166,
6094 "start" : 497.96610169491527,
6095 "track" : "v0"
6096 },
6097 {
6098 "duration" : 3.322033898305051,
6099 "fadeIn" : 0,
6100 "fadeOut" : 0,
6101 "id" : "6A420F63-349C-490A-AEF2-A9A23B8F5911",
6102 "kind" : "audio",
6103 "linkId" : "2F16524C-A3E5-4EC3-B918-2C0107EB5F71",
6104 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
6105 "muted" : true,
6106 "newShot" : false,
6107 "speed" : 1,
6108 "srcIn" : 1714.3229081196755,
6109 "start" : 497.96610169491527,
6110 "track" : "v1"
6111 },
6112 {
6113 "duration" : 3.322033898305051,
6114 "fadeIn" : 0,
6115 "fadeOut" : 0,
6116 "id" : "9BFFE86E-C803-440C-A23A-27946EB8F38E",
6117 "kind" : "audio",
6118 "linkId" : "2F16524C-A3E5-4EC3-B918-2C0107EB5F71",
6119 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
6120 "muted" : false,
6121 "newShot" : false,
6122 "speed" : 1,
6123 "srcIn" : 1714.3695844229064,
6124 "start" : 497.96610169491527,
6125 "track" : "v2"
6126 },
6127 {
6128 "duration" : 3.322033898305051,
6129 "fadeIn" : 0,
6130 "fadeOut" : 0,
6131 "id" : "507C5A42-E790-48A6-8DE6-F867042AD251",
6132 "kind" : "video",
6133 "linkId" : "2F16524C-A3E5-4EC3-B918-2C0107EB5F71",
6134 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
6135 "muted" : false,
6136 "newShot" : false,
6137 "speed" : 1,
6138 "srcIn" : 1714.2329772866783,
6139 "start" : 497.96610169491527,
6140 "track" : "v3"
6141 },
6142 {
6143 "duration" : 3.322033898305051,
6144 "fadeIn" : 0,
6145 "fadeOut" : 0,
6146 "id" : "1255A12C-C270-451F-B9E7-2C3827620218",
6147 "kind" : "video",
6148 "linkId" : "2F16524C-A3E5-4EC3-B918-2C0107EB5F71",
6149 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
6150 "muted" : false,
6151 "newShot" : false,
6152 "speed" : 1,
6153 "srcIn" : 1714.2329727026795,
6154 "start" : 497.96610169491527,
6155 "track" : "v4"
6156 },
6157 {
6158 "duration" : 5.491525423728831,
6159 "fadeIn" : 0,
6160 "fadeOut" : 0,
6161 "id" : "FAF25F24-F13A-4DE0-9CF8-7D2584531C9E",
6162 "kind" : "video",
6163 "linkId" : "EE183339-F801-4116-A9EF-D64A77C5996D",
6164 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
6165 "muted" : false,
6166 "newShot" : false,
6167 "speed" : 1,
6168 "srcIn" : 1722.372881355932,
6169 "start" : 501.2881355932203,
6170 "track" : "v0"
6171 },
6172 {
6173 "duration" : 5.491525423728831,
6174 "fadeIn" : 0,
6175 "fadeOut" : 0,
6176 "id" : "E764AB44-88DC-41E9-A83E-E32A15AD06C5",
6177 "kind" : "audio",
6178 "linkId" : "EE183339-F801-4116-A9EF-D64A77C5996D",
6179 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
6180 "muted" : true,
6181 "newShot" : false,
6182 "speed" : 1,
6183 "srcIn" : 1722.2890098145908,
6184 "start" : 501.2881355932203,
6185 "track" : "v1"
6186 },
6187 {
6188 "duration" : 5.491525423728831,
6189 "fadeIn" : 0,
6190 "fadeOut" : 0,
6191 "id" : "A156F3B8-0CDE-4ADF-8CA0-BA16EF901769",
6192 "kind" : "audio",
6193 "linkId" : "EE183339-F801-4116-A9EF-D64A77C5996D",
6194 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
6195 "muted" : false,
6196 "newShot" : false,
6197 "speed" : 1,
6198 "srcIn" : 1722.3356861178218,
6199 "start" : 501.2881355932203,
6200 "track" : "v2"
6201 },
6202 {
6203 "duration" : 5.491525423728831,
6204 "fadeIn" : 0,
6205 "fadeOut" : 0,
6206 "id" : "60A808DE-37D0-4C45-925D-276CA1D59EB7",
6207 "kind" : "video",
6208 "linkId" : "EE183339-F801-4116-A9EF-D64A77C5996D",
6209 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
6210 "muted" : false,
6211 "newShot" : false,
6212 "speed" : 1,
6213 "srcIn" : 1722.1990789815936,
6214 "start" : 501.2881355932203,
6215 "track" : "v3"
6216 },
6217 {
6218 "duration" : 5.491525423728831,
6219 "fadeIn" : 0,
6220 "fadeOut" : 0,
6221 "id" : "C8564707-EE02-4CAD-BFA6-0089C454CE2A",
6222 "kind" : "video",
6223 "linkId" : "EE183339-F801-4116-A9EF-D64A77C5996D",
6224 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
6225 "muted" : false,
6226 "newShot" : false,
6227 "speed" : 1,
6228 "srcIn" : 1722.1990743975948,
6229 "start" : 501.2881355932203,
6230 "track" : "v4"
6231 },
6232 {
6233 "duration" : 7.627118644067764,
6234 "fadeIn" : 0,
6235 "fadeOut" : 0,
6236 "id" : "BB4F9A82-C969-4E01-BDBE-E481B17343CF",
6237 "kind" : "video",
6238 "linkId" : "DFDDB477-FE81-42F4-A11E-389F9E0A1439",
6239 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
6240 "muted" : false,
6241 "newShot" : false,
6242 "speed" : 1,
6243 "srcIn" : 1729.050847457627,
6244 "start" : 506.77966101694915,
6245 "track" : "v0"
6246 },
6247 {
6248 "duration" : 7.627118644067764,
6249 "fadeIn" : 0,
6250 "fadeOut" : 0,
6251 "id" : "D539326D-CFC6-4F6B-A59C-770061337CBD",
6252 "kind" : "audio",
6253 "linkId" : "DFDDB477-FE81-42F4-A11E-389F9E0A1439",
6254 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
6255 "muted" : true,
6256 "newShot" : false,
6257 "speed" : 1,
6258 "srcIn" : 1728.966975916286,
6259 "start" : 506.77966101694915,
6260 "track" : "v1"
6261 },
6262 {
6263 "duration" : 7.627118644067764,
6264 "fadeIn" : 0,
6265 "fadeOut" : 0,
6266 "id" : "28F991A4-9D42-4CBC-BE96-E89FEBFAF96C",
6267 "kind" : "audio",
6268 "linkId" : "DFDDB477-FE81-42F4-A11E-389F9E0A1439",
6269 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
6270 "muted" : false,
6271 "newShot" : false,
6272 "speed" : 1,
6273 "srcIn" : 1729.0136522195169,
6274 "start" : 506.77966101694915,
6275 "track" : "v2"
6276 },
6277 {
6278 "duration" : 7.627118644067764,
6279 "fadeIn" : 0,
6280 "fadeOut" : 0,
6281 "id" : "D4D4B878-3981-44A7-9435-B6B607F17D8E",
6282 "kind" : "video",
6283 "linkId" : "DFDDB477-FE81-42F4-A11E-389F9E0A1439",
6284 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
6285 "muted" : false,
6286 "newShot" : false,
6287 "speed" : 1,
6288 "srcIn" : 1728.8770450832887,
6289 "start" : 506.77966101694915,
6290 "track" : "v3"
6291 },
6292 {
6293 "duration" : 7.627118644067764,
6294 "fadeIn" : 0,
6295 "fadeOut" : 0,
6296 "id" : "BFB922A9-8931-4826-A5AE-4A8F51627F00",
6297 "kind" : "video",
6298 "linkId" : "DFDDB477-FE81-42F4-A11E-389F9E0A1439",
6299 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
6300 "muted" : false,
6301 "newShot" : false,
6302 "speed" : 1,
6303 "srcIn" : 1728.87704049929,
6304 "start" : 506.77966101694915,
6305 "track" : "v4"
6306 },
6307 {
6308 "duration" : 7.491525423728831,
6309 "fadeIn" : 0,
6310 "fadeOut" : 0,
6311 "id" : "08360F23-5B06-4769-94DC-42A31CD3BD46",
6312 "kind" : "video",
6313 "linkId" : "2C7554F2-E73F-41CD-85CB-697100DCD6C1",
6314 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
6315 "muted" : false,
6316 "newShot" : false,
6317 "speed" : 1,
6318 "srcIn" : 1747.593220338983,
6319 "start" : 514.4067796610169,
6320 "track" : "v0"
6321 },
6322 {
6323 "duration" : 7.491525423728831,
6324 "fadeIn" : 0,
6325 "fadeOut" : 0,
6326 "id" : "8BCF92B0-D87A-42BB-A168-F889F41CD1AB",
6327 "kind" : "audio",
6328 "linkId" : "2C7554F2-E73F-41CD-85CB-697100DCD6C1",
6329 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
6330 "muted" : true,
6331 "newShot" : false,
6332 "speed" : 1,
6333 "srcIn" : 1747.509348797642,
6334 "start" : 514.4067796610169,
6335 "track" : "v1"
6336 },
6337 {
6338 "duration" : 7.491525423728831,
6339 "fadeIn" : 0,
6340 "fadeOut" : 0,
6341 "id" : "2753AF8E-8B68-4B0D-A289-CCF8ABFA4EA6",
6342 "kind" : "audio",
6343 "linkId" : "2C7554F2-E73F-41CD-85CB-697100DCD6C1",
6344 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
6345 "muted" : false,
6346 "newShot" : false,
6347 "speed" : 1,
6348 "srcIn" : 1747.5560251008728,
6349 "start" : 514.4067796610169,
6350 "track" : "v2"
6351 },
6352 {
6353 "duration" : 7.491525423728831,
6354 "fadeIn" : 0,
6355 "fadeOut" : 0,
6356 "id" : "913D7AB9-49C1-4FEE-B538-D81313C8CDAA",
6357 "kind" : "video",
6358 "linkId" : "2C7554F2-E73F-41CD-85CB-697100DCD6C1",
6359 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
6360 "muted" : false,
6361 "newShot" : false,
6362 "speed" : 1,
6363 "srcIn" : 1747.4194179646447,
6364 "start" : 514.4067796610169,
6365 "track" : "v3"
6366 },
6367 {
6368 "duration" : 7.491525423728831,
6369 "fadeIn" : 0,
6370 "fadeOut" : 0,
6371 "id" : "A4078960-1488-4073-A3C0-10A87E8A55C7",
6372 "kind" : "video",
6373 "linkId" : "2C7554F2-E73F-41CD-85CB-697100DCD6C1",
6374 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
6375 "muted" : false,
6376 "newShot" : false,
6377 "speed" : 1,
6378 "srcIn" : 1747.419413380646,
6379 "start" : 514.4067796610169,
6380 "track" : "v4"
6381 },
6382 {
6383 "duration" : 10.677966101694892,
6384 "fadeIn" : 0,
6385 "fadeOut" : 0,
6386 "id" : "B0A75210-7D43-4E54-906B-32BFB4856787",
6387 "kind" : "video",
6388 "linkId" : "68BA82C2-1D37-4341-BBD5-0BE799A2C6FA",
6389 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
6390 "muted" : false,
6391 "newShot" : false,
6392 "speed" : 1,
6393 "srcIn" : 1755.084745762712,
6394 "start" : 521.8983050847457,
6395 "track" : "v0"
6396 },
6397 {
6398 "duration" : 10.677966101694892,
6399 "fadeIn" : 0,
6400 "fadeOut" : 0,
6401 "id" : "581E6DD4-D543-4188-9C1B-BC9D2F1F908C",
6402 "kind" : "audio",
6403 "linkId" : "68BA82C2-1D37-4341-BBD5-0BE799A2C6FA",
6404 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
6405 "muted" : true,
6406 "newShot" : false,
6407 "speed" : 1,
6408 "srcIn" : 1755.0008742213709,
6409 "start" : 521.8983050847457,
6410 "track" : "v1"
6411 },
6412 {
6413 "duration" : 10.677966101694892,
6414 "fadeIn" : 0,
6415 "fadeOut" : 0,
6416 "id" : "B8BFF2A6-3F9E-4D5E-8DFE-EDF5101E1AE5",
6417 "kind" : "audio",
6418 "linkId" : "68BA82C2-1D37-4341-BBD5-0BE799A2C6FA",
6419 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
6420 "muted" : false,
6421 "newShot" : false,
6422 "speed" : 1,
6423 "srcIn" : 1755.0475505246018,
6424 "start" : 521.8983050847457,
6425 "track" : "v2"
6426 },
6427 {
6428 "duration" : 10.677966101694892,
6429 "fadeIn" : 0,
6430 "fadeOut" : 0,
6431 "id" : "6669C09D-E39D-46DE-A862-6BA3B20F558E",
6432 "kind" : "video",
6433 "linkId" : "68BA82C2-1D37-4341-BBD5-0BE799A2C6FA",
6434 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
6435 "muted" : false,
6436 "newShot" : false,
6437 "speed" : 1,
6438 "srcIn" : 1754.9109433883737,
6439 "start" : 521.8983050847457,
6440 "track" : "v3"
6441 },
6442 {
6443 "duration" : 10.677966101694892,
6444 "fadeIn" : 0,
6445 "fadeOut" : 0,
6446 "id" : "C6619902-8ED4-46F4-907C-4F6DF342850B",
6447 "kind" : "video",
6448 "linkId" : "68BA82C2-1D37-4341-BBD5-0BE799A2C6FA",
6449 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
6450 "muted" : false,
6451 "newShot" : false,
6452 "speed" : 1,
6453 "srcIn" : 1754.9109388043748,
6454 "start" : 521.8983050847457,
6455 "track" : "v4"
6456 },
6457 {
6458 "duration" : 3.152542372881385,
6459 "fadeIn" : 0,
6460 "fadeOut" : 0,
6461 "id" : "1E1F6B29-A2BC-44CA-BC6B-B2DA54F93FE5",
6462 "kind" : "video",
6463 "linkId" : "F2447BC6-DF74-439E-8FD2-0FBAC39A205C",
6464 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
6465 "muted" : false,
6466 "newShot" : false,
6467 "speed" : 1,
6468 "srcIn" : 1766.6101694915255,
6469 "start" : 532.5762711864406,
6470 "track" : "v0"
6471 },
6472 {
6473 "duration" : 3.152542372881385,
6474 "fadeIn" : 0,
6475 "fadeOut" : 0,
6476 "id" : "97A49AEA-492D-4D8E-A171-E4F0831755E7",
6477 "kind" : "audio",
6478 "linkId" : "F2447BC6-DF74-439E-8FD2-0FBAC39A205C",
6479 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
6480 "muted" : true,
6481 "newShot" : false,
6482 "speed" : 1,
6483 "srcIn" : 1766.5262979501845,
6484 "start" : 532.5762711864406,
6485 "track" : "v1"
6486 },
6487 {
6488 "duration" : 3.152542372881385,
6489 "fadeIn" : 0,
6490 "fadeOut" : 0,
6491 "id" : "C0542DA4-D2C3-4854-B510-3701574E9CD1",
6492 "kind" : "audio",
6493 "linkId" : "F2447BC6-DF74-439E-8FD2-0FBAC39A205C",
6494 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
6495 "muted" : false,
6496 "newShot" : false,
6497 "speed" : 1,
6498 "srcIn" : 1766.5729742534154,
6499 "start" : 532.5762711864406,
6500 "track" : "v2"
6501 },
6502 {
6503 "duration" : 3.152542372881385,
6504 "fadeIn" : 0,
6505 "fadeOut" : 0,
6506 "id" : "85D95CB3-B6F4-4DFA-9F00-55E80014D2B2",
6507 "kind" : "video",
6508 "linkId" : "F2447BC6-DF74-439E-8FD2-0FBAC39A205C",
6509 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
6510 "muted" : false,
6511 "newShot" : false,
6512 "speed" : 1,
6513 "srcIn" : 1766.4363671171873,
6514 "start" : 532.5762711864406,
6515 "track" : "v3"
6516 },
6517 {
6518 "duration" : 3.152542372881385,
6519 "fadeIn" : 0,
6520 "fadeOut" : 0,
6521 "id" : "3AD412AE-C961-4FE7-B65F-3266A0980B36",
6522 "kind" : "video",
6523 "linkId" : "F2447BC6-DF74-439E-8FD2-0FBAC39A205C",
6524 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
6525 "muted" : false,
6526 "newShot" : false,
6527 "speed" : 1,
6528 "srcIn" : 1766.4363625331885,
6529 "start" : 532.5762711864406,
6530 "track" : "v4"
6531 },
6532 {
6533 "duration" : 5.491525423728831,
6534 "fadeIn" : 0,
6535 "fadeOut" : 0,
6536 "id" : "1F116DEE-E2FC-4C19-B84E-F62E8C7FB58E",
6537 "kind" : "video",
6538 "linkId" : "CC83DD13-876C-4795-A07C-8A9F20E0FCD4",
6539 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
6540 "muted" : false,
6541 "newShot" : false,
6542 "speed" : 1,
6543 "srcIn" : 1771.898305084746,
6544 "start" : 535.728813559322,
6545 "track" : "v0"
6546 },
6547 {
6548 "duration" : 5.491525423728831,
6549 "fadeIn" : 0,
6550 "fadeOut" : 0,
6551 "id" : "26F01770-1063-4614-838E-9C7408CB8EA7",
6552 "kind" : "audio",
6553 "linkId" : "CC83DD13-876C-4795-A07C-8A9F20E0FCD4",
6554 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
6555 "muted" : true,
6556 "newShot" : false,
6557 "speed" : 1,
6558 "srcIn" : 1771.814433543405,
6559 "start" : 535.728813559322,
6560 "track" : "v1"
6561 },
6562 {
6563 "duration" : 5.491525423728831,
6564 "fadeIn" : 0,
6565 "fadeOut" : 0,
6566 "id" : "E27B6F72-E807-4B80-B045-EF94CBEAE518",
6567 "kind" : "audio",
6568 "linkId" : "CC83DD13-876C-4795-A07C-8A9F20E0FCD4",
6569 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
6570 "muted" : false,
6571 "newShot" : false,
6572 "speed" : 1,
6573 "srcIn" : 1771.8611098466358,
6574 "start" : 535.728813559322,
6575 "track" : "v2"
6576 },
6577 {
6578 "duration" : 5.491525423728831,
6579 "fadeIn" : 0,
6580 "fadeOut" : 0,
6581 "id" : "780E91E1-D956-46CE-AD94-132F9146FF16",
6582 "kind" : "video",
6583 "linkId" : "CC83DD13-876C-4795-A07C-8A9F20E0FCD4",
6584 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
6585 "muted" : false,
6586 "newShot" : false,
6587 "speed" : 1,
6588 "srcIn" : 1771.7245027104077,
6589 "start" : 535.728813559322,
6590 "track" : "v3"
6591 },
6592 {
6593 "duration" : 5.491525423728831,
6594 "fadeIn" : 0,
6595 "fadeOut" : 0,
6596 "id" : "502017FB-B15D-472A-92CD-864B01FA9D5A",
6597 "kind" : "video",
6598 "linkId" : "CC83DD13-876C-4795-A07C-8A9F20E0FCD4",
6599 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
6600 "muted" : false,
6601 "newShot" : false,
6602 "speed" : 1,
6603 "srcIn" : 1771.724498126409,
6604 "start" : 535.728813559322,
6605 "track" : "v4"
6606 },
6607 {
6608 "duration" : 4.0677966101694665,
6609 "fadeIn" : 0,
6610 "fadeOut" : 0,
6611 "id" : "C08F7E72-3AD4-4B1D-8250-1512128E7940",
6612 "kind" : "video",
6613 "linkId" : "A2118321-9E02-4656-BCE9-0E3980E8372E",
6614 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
6615 "muted" : false,
6616 "newShot" : false,
6617 "speed" : 1,
6618 "srcIn" : 1779.5593220338988,
6619 "start" : 541.2203389830509,
6620 "track" : "v0"
6621 },
6622 {
6623 "duration" : 4.0677966101694665,
6624 "fadeIn" : 0,
6625 "fadeOut" : 0,
6626 "id" : "B58ABDEF-6C61-45A8-95FF-6445D0C0EABC",
6627 "kind" : "audio",
6628 "linkId" : "A2118321-9E02-4656-BCE9-0E3980E8372E",
6629 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
6630 "muted" : true,
6631 "newShot" : false,
6632 "speed" : 1,
6633 "srcIn" : 1779.4754504925577,
6634 "start" : 541.2203389830509,
6635 "track" : "v1"
6636 },
6637 {
6638 "duration" : 4.0677966101694665,
6639 "fadeIn" : 0,
6640 "fadeOut" : 0,
6641 "id" : "141D7901-0677-44F5-8296-15BC113C1EBE",
6642 "kind" : "audio",
6643 "linkId" : "A2118321-9E02-4656-BCE9-0E3980E8372E",
6644 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
6645 "muted" : false,
6646 "newShot" : false,
6647 "speed" : 1,
6648 "srcIn" : 1779.5221267957886,
6649 "start" : 541.2203389830509,
6650 "track" : "v2"
6651 },
6652 {
6653 "duration" : 4.0677966101694665,
6654 "fadeIn" : 0,
6655 "fadeOut" : 0,
6656 "id" : "BADB3830-CF8B-4208-A04F-439958ACADDA",
6657 "kind" : "video",
6658 "linkId" : "A2118321-9E02-4656-BCE9-0E3980E8372E",
6659 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
6660 "muted" : false,
6661 "newShot" : false,
6662 "speed" : 1,
6663 "srcIn" : 1779.3855196595605,
6664 "start" : 541.2203389830509,
6665 "track" : "v3"
6666 },
6667 {
6668 "duration" : 4.0677966101694665,
6669 "fadeIn" : 0,
6670 "fadeOut" : 0,
6671 "id" : "83BD9C59-2FC5-4F64-9963-A86B647F6F52",
6672 "kind" : "video",
6673 "linkId" : "A2118321-9E02-4656-BCE9-0E3980E8372E",
6674 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
6675 "muted" : false,
6676 "newShot" : false,
6677 "speed" : 1,
6678 "srcIn" : 1779.3855150755617,
6679 "start" : 541.2203389830509,
6680 "track" : "v4"
6681 },
6682 {
6683 "duration" : 1.661016949152554,
6684 "fadeIn" : 0,
6685 "fadeOut" : 0,
6686 "id" : "81042DC7-94FE-4359-959F-C9E29D4F9461",
6687 "kind" : "video",
6688 "linkId" : "CDF46AA7-2655-4344-81E6-6C7AB4F4B303",
6689 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
6690 "muted" : false,
6691 "newShot" : false,
6692 "speed" : 1,
6693 "srcIn" : 1815.5932203389834,
6694 "start" : 545.2881355932203,
6695 "track" : "v0"
6696 },
6697 {
6698 "duration" : 1.661016949152554,
6699 "fadeIn" : 0,
6700 "fadeOut" : 0,
6701 "id" : "EB5D9E21-E9FF-430D-B90A-143FFFC161D0",
6702 "kind" : "audio",
6703 "linkId" : "CDF46AA7-2655-4344-81E6-6C7AB4F4B303",
6704 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
6705 "muted" : true,
6706 "newShot" : false,
6707 "speed" : 1,
6708 "srcIn" : 1815.5093487976424,
6709 "start" : 545.2881355932203,
6710 "track" : "v1"
6711 },
6712 {
6713 "duration" : 1.661016949152554,
6714 "fadeIn" : 0,
6715 "fadeOut" : 0,
6716 "id" : "E5C8677F-212F-43D4-95D6-F86D218562F5",
6717 "kind" : "audio",
6718 "linkId" : "CDF46AA7-2655-4344-81E6-6C7AB4F4B303",
6719 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
6720 "muted" : false,
6721 "newShot" : false,
6722 "speed" : 1,
6723 "srcIn" : 1815.5560251008733,
6724 "start" : 545.2881355932203,
6725 "track" : "v2"
6726 },
6727 {
6728 "duration" : 1.661016949152554,
6729 "fadeIn" : 0,
6730 "fadeOut" : 0,
6731 "id" : "899CE36B-86FD-4463-ACF9-64EFDF419140",
6732 "kind" : "video",
6733 "linkId" : "CDF46AA7-2655-4344-81E6-6C7AB4F4B303",
6734 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
6735 "muted" : false,
6736 "newShot" : false,
6737 "speed" : 1,
6738 "srcIn" : 1815.4194179646452,
6739 "start" : 545.2881355932203,
6740 "track" : "v3"
6741 },
6742 {
6743 "duration" : 1.661016949152554,
6744 "fadeIn" : 0,
6745 "fadeOut" : 0,
6746 "id" : "B0B393DE-7AAD-46D0-8783-D2E08335DC13",
6747 "kind" : "video",
6748 "linkId" : "CDF46AA7-2655-4344-81E6-6C7AB4F4B303",
6749 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
6750 "muted" : false,
6751 "newShot" : false,
6752 "speed" : 1,
6753 "srcIn" : 1815.4194133806463,
6754 "start" : 545.2881355932203,
6755 "track" : "v4"
6756 },
6757 {
6758 "duration" : 1.1525423728813848,
6759 "fadeIn" : 0,
6760 "fadeOut" : 0,
6761 "id" : "18E9C9F7-AA69-4D86-9DD9-5278392186CD",
6762 "kind" : "video",
6763 "linkId" : "2426D580-BCAA-49B5-BF7C-9DCE2A558605",
6764 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
6765 "muted" : false,
6766 "newShot" : false,
6767 "speed" : 1,
6768 "srcIn" : 1817.5593220338988,
6769 "start" : 546.9491525423729,
6770 "track" : "v0"
6771 },
6772 {
6773 "duration" : 1.1525423728813848,
6774 "fadeIn" : 0,
6775 "fadeOut" : 0,
6776 "id" : "098E9E68-8FCE-4C2E-8A24-81EFEECCD127",
6777 "kind" : "audio",
6778 "linkId" : "2426D580-BCAA-49B5-BF7C-9DCE2A558605",
6779 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
6780 "muted" : true,
6781 "newShot" : false,
6782 "speed" : 1,
6783 "srcIn" : 1817.4754504925577,
6784 "start" : 546.9491525423729,
6785 "track" : "v1"
6786 },
6787 {
6788 "duration" : 1.1525423728813848,
6789 "fadeIn" : 0,
6790 "fadeOut" : 0,
6791 "id" : "3A68B520-1B13-4837-98C7-4715D6250B50",
6792 "kind" : "audio",
6793 "linkId" : "2426D580-BCAA-49B5-BF7C-9DCE2A558605",
6794 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
6795 "muted" : false,
6796 "newShot" : false,
6797 "speed" : 1,
6798 "srcIn" : 1817.5221267957886,
6799 "start" : 546.9491525423729,
6800 "track" : "v2"
6801 },
6802 {
6803 "duration" : 1.1525423728813848,
6804 "fadeIn" : 0,
6805 "fadeOut" : 0,
6806 "id" : "3D51136D-FC09-46D4-A29C-C1E8B7022D04",
6807 "kind" : "video",
6808 "linkId" : "2426D580-BCAA-49B5-BF7C-9DCE2A558605",
6809 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
6810 "muted" : false,
6811 "newShot" : false,
6812 "speed" : 1,
6813 "srcIn" : 1817.3855196595605,
6814 "start" : 546.9491525423729,
6815 "track" : "v3"
6816 },
6817 {
6818 "duration" : 1.1525423728813848,
6819 "fadeIn" : 0,
6820 "fadeOut" : 0,
6821 "id" : "879B5431-78D7-4E34-98CD-811F0D7D8D2B",
6822 "kind" : "video",
6823 "linkId" : "2426D580-BCAA-49B5-BF7C-9DCE2A558605",
6824 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
6825 "muted" : false,
6826 "newShot" : false,
6827 "speed" : 1,
6828 "srcIn" : 1817.3855150755617,
6829 "start" : 546.9491525423729,
6830 "track" : "v4"
6831 },
6832 {
6833 "duration" : 11.525423728813507,
6834 "fadeIn" : 0,
6835 "fadeOut" : 0,
6836 "id" : "B6AD6E92-A164-48D3-962D-8D5472AC5ED8",
6837 "kind" : "video",
6838 "linkId" : "5F7B4F1D-CE0A-49F1-A14C-6C7D1809E682",
6839 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
6840 "muted" : false,
6841 "newShot" : false,
6842 "speed" : 1,
6843 "srcIn" : 1823.5593220338988,
6844 "start" : 548.1016949152543,
6845 "track" : "v0"
6846 },
6847 {
6848 "duration" : 11.525423728813507,
6849 "fadeIn" : 0,
6850 "fadeOut" : 0,
6851 "id" : "15310F42-B66D-4DDB-B571-28824E2AA8F2",
6852 "kind" : "audio",
6853 "linkId" : "5F7B4F1D-CE0A-49F1-A14C-6C7D1809E682",
6854 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
6855 "muted" : true,
6856 "newShot" : false,
6857 "speed" : 1,
6858 "srcIn" : 1823.4754504925577,
6859 "start" : 548.1016949152543,
6860 "track" : "v1"
6861 },
6862 {
6863 "duration" : 11.525423728813507,
6864 "fadeIn" : 0,
6865 "fadeOut" : 0,
6866 "id" : "60DB4DB9-D800-414F-8313-D3C0C9CF620C",
6867 "kind" : "audio",
6868 "linkId" : "5F7B4F1D-CE0A-49F1-A14C-6C7D1809E682",
6869 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
6870 "muted" : false,
6871 "newShot" : false,
6872 "speed" : 1,
6873 "srcIn" : 1823.5221267957886,
6874 "start" : 548.1016949152543,
6875 "track" : "v2"
6876 },
6877 {
6878 "duration" : 11.525423728813507,
6879 "fadeIn" : 0,
6880 "fadeOut" : 0,
6881 "id" : "66EBCF41-7ABC-4B4F-B3D6-670B5DE5FF4B",
6882 "kind" : "video",
6883 "linkId" : "5F7B4F1D-CE0A-49F1-A14C-6C7D1809E682",
6884 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
6885 "muted" : false,
6886 "newShot" : false,
6887 "speed" : 1,
6888 "srcIn" : 1823.3855196595605,
6889 "start" : 548.1016949152543,
6890 "track" : "v3"
6891 },
6892 {
6893 "duration" : 11.525423728813507,
6894 "fadeIn" : 0,
6895 "fadeOut" : 0,
6896 "id" : "74B48312-8BD1-4CF9-967A-E7EED8D50E2A",
6897 "kind" : "video",
6898 "linkId" : "5F7B4F1D-CE0A-49F1-A14C-6C7D1809E682",
6899 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
6900 "muted" : false,
6901 "newShot" : false,
6902 "speed" : 1,
6903 "srcIn" : 1823.3855150755617,
6904 "start" : 548.1016949152543,
6905 "track" : "v4"
6906 },
6907 {
6908 "duration" : 3.6271186440678775,
6909 "fadeIn" : 0,
6910 "fadeOut" : 0,
6911 "id" : "7E495919-B008-4616-BB9C-17E3BDE688A9",
6912 "kind" : "video",
6913 "linkId" : "9769E036-22A2-4F7C-95DD-F0F9F243A183",
6914 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
6915 "muted" : false,
6916 "newShot" : false,
6917 "speed" : 1,
6918 "srcIn" : 1836.474576271187,
6919 "start" : 559.6271186440678,
6920 "track" : "v0"
6921 },
6922 {
6923 "duration" : 3.6271186440678775,
6924 "fadeIn" : 0,
6925 "fadeOut" : 0,
6926 "id" : "7E503A80-A896-4D03-9DC1-896D78C0F03A",
6927 "kind" : "audio",
6928 "linkId" : "9769E036-22A2-4F7C-95DD-F0F9F243A183",
6929 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
6930 "muted" : true,
6931 "newShot" : false,
6932 "speed" : 1,
6933 "srcIn" : 1836.390704729846,
6934 "start" : 559.6271186440678,
6935 "track" : "v1"
6936 },
6937 {
6938 "duration" : 3.6271186440678775,
6939 "fadeIn" : 0,
6940 "fadeOut" : 0,
6941 "id" : "37A7F54D-1185-4016-9C07-149400B154B8",
6942 "kind" : "audio",
6943 "linkId" : "9769E036-22A2-4F7C-95DD-F0F9F243A183",
6944 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
6945 "muted" : false,
6946 "newShot" : false,
6947 "speed" : 1,
6948 "srcIn" : 1836.437381033077,
6949 "start" : 559.6271186440678,
6950 "track" : "v2"
6951 },
6952 {
6953 "duration" : 3.6271186440678775,
6954 "fadeIn" : 0,
6955 "fadeOut" : 0,
6956 "id" : "12B7D82E-9520-4486-82BA-A1EFA3443CC5",
6957 "kind" : "video",
6958 "linkId" : "9769E036-22A2-4F7C-95DD-F0F9F243A183",
6959 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
6960 "muted" : false,
6961 "newShot" : false,
6962 "speed" : 1,
6963 "srcIn" : 1836.3007738968488,
6964 "start" : 559.6271186440678,
6965 "track" : "v3"
6966 },
6967 {
6968 "duration" : 3.6271186440678775,
6969 "fadeIn" : 0,
6970 "fadeOut" : 0,
6971 "id" : "467D66A4-ABC0-4A30-B666-EC09C21670C2",
6972 "kind" : "video",
6973 "linkId" : "9769E036-22A2-4F7C-95DD-F0F9F243A183",
6974 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
6975 "muted" : false,
6976 "newShot" : false,
6977 "speed" : 1,
6978 "srcIn" : 1836.30076931285,
6979 "start" : 559.6271186440678,
6980 "track" : "v4"
6981 },
6982 {
6983 "duration" : 5.118644067796595,
6984 "fadeIn" : 0,
6985 "fadeOut" : 0,
6986 "id" : "F7C9CC46-173D-4CEA-B84A-F83B2D94A2CE",
6987 "kind" : "video",
6988 "linkId" : "B85938EF-37B5-4F22-B0B6-0C3F5749452C",
6989 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
6990 "muted" : false,
6991 "newShot" : false,
6992 "speed" : 1,
6993 "srcIn" : 1849.1186440677973,
6994 "start" : 563.2542372881356,
6995 "track" : "v0"
6996 },
6997 {
6998 "duration" : 5.118644067796595,
6999 "fadeIn" : 0,
7000 "fadeOut" : 0,
7001 "id" : "AA8C606C-3D23-4965-B5D1-E17B4413C421",
7002 "kind" : "audio",
7003 "linkId" : "B85938EF-37B5-4F22-B0B6-0C3F5749452C",
7004 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
7005 "muted" : true,
7006 "newShot" : false,
7007 "speed" : 1,
7008 "srcIn" : 1849.0347725264562,
7009 "start" : 563.2542372881356,
7010 "track" : "v1"
7011 },
7012 {
7013 "duration" : 5.118644067796595,
7014 "fadeIn" : 0,
7015 "fadeOut" : 0,
7016 "id" : "FB4942C0-5842-419B-A4CA-242596D7CF03",
7017 "kind" : "audio",
7018 "linkId" : "B85938EF-37B5-4F22-B0B6-0C3F5749452C",
7019 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
7020 "muted" : false,
7021 "newShot" : false,
7022 "speed" : 1,
7023 "srcIn" : 1849.0814488296871,
7024 "start" : 563.2542372881356,
7025 "track" : "v2"
7026 },
7027 {
7028 "duration" : 5.118644067796595,
7029 "fadeIn" : 0,
7030 "fadeOut" : 0,
7031 "id" : "8D875994-D892-44D9-A74C-9AE0403A1240",
7032 "kind" : "video",
7033 "linkId" : "B85938EF-37B5-4F22-B0B6-0C3F5749452C",
7034 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
7035 "muted" : false,
7036 "newShot" : false,
7037 "speed" : 1,
7038 "srcIn" : 1848.944841693459,
7039 "start" : 563.2542372881356,
7040 "track" : "v3"
7041 },
7042 {
7043 "duration" : 5.118644067796595,
7044 "fadeIn" : 0,
7045 "fadeOut" : 0,
7046 "id" : "D7122A1E-0F1A-4EDA-BA83-5032DCB51740",
7047 "kind" : "video",
7048 "linkId" : "B85938EF-37B5-4F22-B0B6-0C3F5749452C",
7049 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
7050 "muted" : false,
7051 "newShot" : false,
7052 "speed" : 1,
7053 "srcIn" : 1848.9448371094602,
7054 "start" : 563.2542372881356,
7055 "track" : "v4"
7056 },
7057 {
7058 "duration" : 8.2033898305084,
7059 "fadeIn" : 0,
7060 "fadeOut" : 0,
7061 "id" : "54B76DE8-2057-470C-97CB-916B91B32B1C",
7062 "kind" : "video",
7063 "linkId" : "65CA1374-003F-413C-9F77-8A22B7EECDC3",
7064 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
7065 "muted" : false,
7066 "newShot" : false,
7067 "speed" : 1,
7068 "srcIn" : 1854.9830508474583,
7069 "start" : 568.3728813559322,
7070 "track" : "v0"
7071 },
7072 {
7073 "duration" : 8.2033898305084,
7074 "fadeIn" : 0,
7075 "fadeOut" : 0,
7076 "id" : "12851101-B365-4F9E-BFB3-FDEABAE1453A",
7077 "kind" : "audio",
7078 "linkId" : "65CA1374-003F-413C-9F77-8A22B7EECDC3",
7079 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
7080 "muted" : true,
7081 "newShot" : false,
7082 "speed" : 1,
7083 "srcIn" : 1854.8991793061173,
7084 "start" : 568.3728813559322,
7085 "track" : "v1"
7086 },
7087 {
7088 "duration" : 8.2033898305084,
7089 "fadeIn" : 0,
7090 "fadeOut" : 0,
7091 "id" : "38DCBA3E-C18E-447C-B319-9E3A3DE4DC21",
7092 "kind" : "audio",
7093 "linkId" : "65CA1374-003F-413C-9F77-8A22B7EECDC3",
7094 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
7095 "muted" : false,
7096 "newShot" : false,
7097 "speed" : 1,
7098 "srcIn" : 1854.9458556093482,
7099 "start" : 568.3728813559322,
7100 "track" : "v2"
7101 },
7102 {
7103 "duration" : 8.2033898305084,
7104 "fadeIn" : 0,
7105 "fadeOut" : 0,
7106 "id" : "FE05A76D-4FB5-43E6-9960-DE92DC23FD6C",
7107 "kind" : "video",
7108 "linkId" : "65CA1374-003F-413C-9F77-8A22B7EECDC3",
7109 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
7110 "muted" : false,
7111 "newShot" : false,
7112 "speed" : 1,
7113 "srcIn" : 1854.80924847312,
7114 "start" : 568.3728813559322,
7115 "track" : "v3"
7116 },
7117 {
7118 "duration" : 8.2033898305084,
7119 "fadeIn" : 0,
7120 "fadeOut" : 0,
7121 "id" : "35C17BC8-29A1-44B4-A655-A1AF25C6D713",
7122 "kind" : "video",
7123 "linkId" : "65CA1374-003F-413C-9F77-8A22B7EECDC3",
7124 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
7125 "muted" : false,
7126 "newShot" : false,
7127 "speed" : 1,
7128 "srcIn" : 1854.8092438891213,
7129 "start" : 568.3728813559322,
7130 "track" : "v4"
7131 },
7132 {
7133 "duration" : 5.559322033898297,
7134 "fadeIn" : 0,
7135 "fadeOut" : 0,
7136 "id" : "ED705251-681D-4EEE-81C8-D077FBB072B5",
7137 "kind" : "video",
7138 "linkId" : "FD6E0C12-08F2-474C-B889-10F178952804",
7139 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
7140 "muted" : false,
7141 "newShot" : false,
7142 "speed" : 1,
7143 "srcIn" : 1865.525423728814,
7144 "start" : 576.5762711864406,
7145 "track" : "v0"
7146 },
7147 {
7148 "duration" : 5.559322033898297,
7149 "fadeIn" : 0,
7150 "fadeOut" : 0,
7151 "id" : "A57F8B52-605A-4BB2-8B24-0CBC8B78EBAB",
7152 "kind" : "audio",
7153 "linkId" : "FD6E0C12-08F2-474C-B889-10F178952804",
7154 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
7155 "muted" : true,
7156 "newShot" : false,
7157 "speed" : 1,
7158 "srcIn" : 1865.441552187473,
7159 "start" : 576.5762711864406,
7160 "track" : "v1"
7161 },
7162 {
7163 "duration" : 5.559322033898297,
7164 "fadeIn" : 0,
7165 "fadeOut" : 0,
7166 "id" : "93D09BC6-1947-40D5-82BA-E6E1035452E2",
7167 "kind" : "audio",
7168 "linkId" : "FD6E0C12-08F2-474C-B889-10F178952804",
7169 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
7170 "muted" : false,
7171 "newShot" : false,
7172 "speed" : 1,
7173 "srcIn" : 1865.488228490704,
7174 "start" : 576.5762711864406,
7175 "track" : "v2"
7176 },
7177 {
7178 "duration" : 5.559322033898297,
7179 "fadeIn" : 0,
7180 "fadeOut" : 0,
7181 "id" : "48D771B8-EC5B-45CD-842D-CFC4F85FC9D3",
7182 "kind" : "video",
7183 "linkId" : "FD6E0C12-08F2-474C-B889-10F178952804",
7184 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
7185 "muted" : false,
7186 "newShot" : false,
7187 "speed" : 1,
7188 "srcIn" : 1865.3516213544758,
7189 "start" : 576.5762711864406,
7190 "track" : "v3"
7191 },
7192 {
7193 "duration" : 5.559322033898297,
7194 "fadeIn" : 0,
7195 "fadeOut" : 0,
7196 "id" : "6F0B9EDA-F628-4403-9AC9-D23443721AA7",
7197 "kind" : "video",
7198 "linkId" : "FD6E0C12-08F2-474C-B889-10F178952804",
7199 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
7200 "muted" : false,
7201 "newShot" : false,
7202 "speed" : 1,
7203 "srcIn" : 1865.351616770477,
7204 "start" : 576.5762711864406,
7205 "track" : "v4"
7206 },
7207 {
7208 "duration" : 18.881355932203405,
7209 "fadeIn" : 0,
7210 "fadeOut" : 0,
7211 "id" : "B0DF95C7-AB53-4E4B-B365-DA47C88E233F",
7212 "kind" : "video",
7213 "linkId" : "17C6BBA2-9064-425D-8592-73511CF2CF98",
7214 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
7215 "muted" : false,
7216 "newShot" : false,
7217 "speed" : 1,
7218 "srcIn" : 1938.101694915255,
7219 "start" : 582.1355932203389,
7220 "track" : "v0"
7221 },
7222 {
7223 "duration" : 18.881355932203405,
7224 "fadeIn" : 0,
7225 "fadeOut" : 0,
7226 "id" : "10C2DDB7-13BF-4707-A836-146E1C1DF546",
7227 "kind" : "audio",
7228 "linkId" : "17C6BBA2-9064-425D-8592-73511CF2CF98",
7229 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
7230 "muted" : true,
7231 "newShot" : false,
7232 "speed" : 1,
7233 "srcIn" : 1938.0178233739139,
7234 "start" : 582.1355932203389,
7235 "track" : "v1"
7236 },
7237 {
7238 "duration" : 18.881355932203405,
7239 "fadeIn" : 0,
7240 "fadeOut" : 0,
7241 "id" : "D426D540-67E5-4B2C-8355-17C9D9356D6E",
7242 "kind" : "audio",
7243 "linkId" : "17C6BBA2-9064-425D-8592-73511CF2CF98",
7244 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
7245 "muted" : false,
7246 "newShot" : false,
7247 "speed" : 1,
7248 "srcIn" : 1938.0644996771448,
7249 "start" : 582.1355932203389,
7250 "track" : "v2"
7251 },
7252 {
7253 "duration" : 18.881355932203405,
7254 "fadeIn" : 0,
7255 "fadeOut" : 0,
7256 "id" : "4270D3EC-C6D9-44CD-BAEF-E087D96DEE47",
7257 "kind" : "video",
7258 "linkId" : "17C6BBA2-9064-425D-8592-73511CF2CF98",
7259 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
7260 "muted" : false,
7261 "newShot" : false,
7262 "speed" : 1,
7263 "srcIn" : 1937.9278925409167,
7264 "start" : 582.1355932203389,
7265 "track" : "v3"
7266 },
7267 {
7268 "duration" : 18.881355932203405,
7269 "fadeIn" : 0,
7270 "fadeOut" : 0,
7271 "id" : "4D883F8E-FE22-4FD7-80D8-05BB6DF23E69",
7272 "kind" : "video",
7273 "linkId" : "17C6BBA2-9064-425D-8592-73511CF2CF98",
7274 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
7275 "muted" : false,
7276 "newShot" : false,
7277 "speed" : 1,
7278 "srcIn" : 1937.9278879569179,
7279 "start" : 582.1355932203389,
7280 "track" : "v4"
7281 },
7282 {
7283 "duration" : 6.237288135593303,
7284 "fadeIn" : 0,
7285 "fadeOut" : 0,
7286 "id" : "73E5F742-AA2F-4AD8-89B1-D1CD80D854E7",
7287 "kind" : "video",
7288 "linkId" : "338C9A6C-870B-46F8-8240-2067335F8F8A",
7289 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
7290 "muted" : false,
7291 "newShot" : false,
7292 "speed" : 1,
7293 "srcIn" : 1956.9830508474583,
7294 "start" : 601.0169491525423,
7295 "track" : "v0"
7296 },
7297 {
7298 "duration" : 6.237288135593303,
7299 "fadeIn" : 0,
7300 "fadeOut" : 0,
7301 "id" : "01D1EA2C-B8BB-4B95-8C2F-716EE57867DE",
7302 "kind" : "audio",
7303 "linkId" : "338C9A6C-870B-46F8-8240-2067335F8F8A",
7304 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
7305 "muted" : true,
7306 "newShot" : false,
7307 "speed" : 1,
7308 "srcIn" : 1956.8991793061173,
7309 "start" : 601.0169491525423,
7310 "track" : "v1"
7311 },
7312 {
7313 "duration" : 6.237288135593303,
7314 "fadeIn" : 0,
7315 "fadeOut" : 0,
7316 "id" : "588AAA62-D950-4167-88E1-3A7E9016735E",
7317 "kind" : "audio",
7318 "linkId" : "338C9A6C-870B-46F8-8240-2067335F8F8A",
7319 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
7320 "muted" : false,
7321 "newShot" : false,
7322 "speed" : 1,
7323 "srcIn" : 1956.9458556093482,
7324 "start" : 601.0169491525423,
7325 "track" : "v2"
7326 },
7327 {
7328 "duration" : 6.237288135593303,
7329 "fadeIn" : 0,
7330 "fadeOut" : 0,
7331 "id" : "5F41A84E-E3E3-417E-B7E8-82995513D4E2",
7332 "kind" : "video",
7333 "linkId" : "338C9A6C-870B-46F8-8240-2067335F8F8A",
7334 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
7335 "muted" : false,
7336 "newShot" : false,
7337 "speed" : 1,
7338 "srcIn" : 1956.80924847312,
7339 "start" : 601.0169491525423,
7340 "track" : "v3"
7341 },
7342 {
7343 "duration" : 6.237288135593303,
7344 "fadeIn" : 0,
7345 "fadeOut" : 0,
7346 "id" : "06DE79D5-6984-41FF-8120-821047F987C5",
7347 "kind" : "video",
7348 "linkId" : "338C9A6C-870B-46F8-8240-2067335F8F8A",
7349 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
7350 "muted" : false,
7351 "newShot" : false,
7352 "speed" : 1,
7353 "srcIn" : 1956.8092438891213,
7354 "start" : 601.0169491525423,
7355 "track" : "v4"
7356 },
7357 {
7358 "duration" : 10.677966101694892,
7359 "fadeIn" : 0,
7360 "fadeOut" : 0,
7361 "id" : "F7574C8D-473A-44C7-BB33-CA9C31856531",
7362 "kind" : "video",
7363 "linkId" : "5715D6B2-69B7-4806-A021-82A001C82B8D",
7364 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
7365 "muted" : false,
7366 "newShot" : false,
7367 "speed" : 1,
7368 "srcIn" : 2022.8474576271192,
7369 "start" : 607.2542372881356,
7370 "track" : "v0"
7371 },
7372 {
7373 "duration" : 10.677966101694892,
7374 "fadeIn" : 0,
7375 "fadeOut" : 0,
7376 "id" : "6F7C3CE2-9238-415C-A314-90B677ECAE17",
7377 "kind" : "audio",
7378 "linkId" : "5715D6B2-69B7-4806-A021-82A001C82B8D",
7379 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
7380 "muted" : true,
7381 "newShot" : false,
7382 "speed" : 1,
7383 "srcIn" : 2022.7635860857781,
7384 "start" : 607.2542372881356,
7385 "track" : "v1"
7386 },
7387 {
7388 "duration" : 10.677966101694892,
7389 "fadeIn" : 0,
7390 "fadeOut" : 0,
7391 "id" : "BC1D7F8D-872D-4749-97D4-9CBF947EB008",
7392 "kind" : "audio",
7393 "linkId" : "5715D6B2-69B7-4806-A021-82A001C82B8D",
7394 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
7395 "muted" : false,
7396 "newShot" : false,
7397 "speed" : 1,
7398 "srcIn" : 2022.810262389009,
7399 "start" : 607.2542372881356,
7400 "track" : "v2"
7401 },
7402 {
7403 "duration" : 10.677966101694892,
7404 "fadeIn" : 0,
7405 "fadeOut" : 0,
7406 "id" : "5AC16FB7-ABB0-462A-926D-6657645660DB",
7407 "kind" : "video",
7408 "linkId" : "5715D6B2-69B7-4806-A021-82A001C82B8D",
7409 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
7410 "muted" : false,
7411 "newShot" : false,
7412 "speed" : 1,
7413 "srcIn" : 2022.673655252781,
7414 "start" : 607.2542372881356,
7415 "track" : "v3"
7416 },
7417 {
7418 "duration" : 10.677966101694892,
7419 "fadeIn" : 0,
7420 "fadeOut" : 0,
7421 "id" : "7EC1D808-B244-481D-AEED-29FBAD17A539",
7422 "kind" : "video",
7423 "linkId" : "5715D6B2-69B7-4806-A021-82A001C82B8D",
7424 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
7425 "muted" : false,
7426 "newShot" : false,
7427 "speed" : 1,
7428 "srcIn" : 2022.673650668782,
7429 "start" : 607.2542372881356,
7430 "track" : "v4"
7431 },
7432 {
7433 "duration" : 3.627118644067764,
7434 "fadeIn" : 0,
7435 "fadeOut" : 0,
7436 "id" : "60AAA140-4B79-4568-92FB-E8B2070677B4",
7437 "kind" : "video",
7438 "linkId" : "7A62ADBD-0427-472A-880B-89AAE3A2A8F4",
7439 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
7440 "muted" : false,
7441 "newShot" : false,
7442 "speed" : 1,
7443 "srcIn" : 2045.2881355932209,
7444 "start" : 617.9322033898305,
7445 "track" : "v0"
7446 },
7447 {
7448 "duration" : 3.627118644067764,
7449 "fadeIn" : 0,
7450 "fadeOut" : 0,
7451 "id" : "AA1ADCAE-DA36-4FF1-A7CC-6C3B75A693B7",
7452 "kind" : "audio",
7453 "linkId" : "7A62ADBD-0427-472A-880B-89AAE3A2A8F4",
7454 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
7455 "muted" : true,
7456 "newShot" : false,
7457 "speed" : 1,
7458 "srcIn" : 2045.2042640518798,
7459 "start" : 617.9322033898305,
7460 "track" : "v1"
7461 },
7462 {
7463 "duration" : 3.627118644067764,
7464 "fadeIn" : 0,
7465 "fadeOut" : 0,
7466 "id" : "C3588EA8-F756-402E-B6EC-A9C9772EB504",
7467 "kind" : "audio",
7468 "linkId" : "7A62ADBD-0427-472A-880B-89AAE3A2A8F4",
7469 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
7470 "muted" : false,
7471 "newShot" : false,
7472 "speed" : 1,
7473 "srcIn" : 2045.2509403551107,
7474 "start" : 617.9322033898305,
7475 "track" : "v2"
7476 },
7477 {
7478 "duration" : 3.627118644067764,
7479 "fadeIn" : 0,
7480 "fadeOut" : 0,
7481 "id" : "8A86F818-17D6-4DA6-806A-BD6E61EDD16A",
7482 "kind" : "video",
7483 "linkId" : "7A62ADBD-0427-472A-880B-89AAE3A2A8F4",
7484 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
7485 "muted" : false,
7486 "newShot" : false,
7487 "speed" : 1,
7488 "srcIn" : 2045.1143332188826,
7489 "start" : 617.9322033898305,
7490 "track" : "v3"
7491 },
7492 {
7493 "duration" : 3.627118644067764,
7494 "fadeIn" : 0,
7495 "fadeOut" : 0,
7496 "id" : "DF8175BF-3E2D-4B78-8761-2798CBEEB331",
7497 "kind" : "video",
7498 "linkId" : "7A62ADBD-0427-472A-880B-89AAE3A2A8F4",
7499 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
7500 "muted" : false,
7501 "newShot" : false,
7502 "speed" : 1,
7503 "srcIn" : 2045.1143286348838,
7504 "start" : 617.9322033898305,
7505 "track" : "v4"
7506 },
7507 {
7508 "duration" : 2.4067796610169125,
7509 "fadeIn" : 0,
7510 "fadeOut" : 0,
7511 "id" : "0079348D-917B-4B45-A779-BE7BDA967808",
7512 "kind" : "video",
7513 "linkId" : "B5A3F4FE-CCAA-45AE-A6FB-0579F3BF1536",
7514 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
7515 "muted" : false,
7516 "newShot" : false,
7517 "speed" : 1,
7518 "srcIn" : 2050.542372881356,
7519 "start" : 621.5593220338983,
7520 "track" : "v0"
7521 },
7522 {
7523 "duration" : 2.4067796610169125,
7524 "fadeIn" : 0,
7525 "fadeOut" : 0,
7526 "id" : "2D8FE96C-46AE-4C66-B4A5-30D8857C61FB",
7527 "kind" : "audio",
7528 "linkId" : "B5A3F4FE-CCAA-45AE-A6FB-0579F3BF1536",
7529 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
7530 "muted" : true,
7531 "newShot" : false,
7532 "speed" : 1,
7533 "srcIn" : 2050.458501340015,
7534 "start" : 621.5593220338983,
7535 "track" : "v1"
7536 },
7537 {
7538 "duration" : 2.4067796610169125,
7539 "fadeIn" : 0,
7540 "fadeOut" : 0,
7541 "id" : "B675F446-CEBF-4F4A-B344-F62184FADF3B",
7542 "kind" : "audio",
7543 "linkId" : "B5A3F4FE-CCAA-45AE-A6FB-0579F3BF1536",
7544 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
7545 "muted" : false,
7546 "newShot" : false,
7547 "speed" : 1,
7548 "srcIn" : 2050.505177643246,
7549 "start" : 621.5593220338983,
7550 "track" : "v2"
7551 },
7552 {
7553 "duration" : 2.4067796610169125,
7554 "fadeIn" : 0,
7555 "fadeOut" : 0,
7556 "id" : "C21A6286-77CE-4A32-B617-2710BCE8CBD9",
7557 "kind" : "video",
7558 "linkId" : "B5A3F4FE-CCAA-45AE-A6FB-0579F3BF1536",
7559 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
7560 "muted" : false,
7561 "newShot" : false,
7562 "speed" : 1,
7563 "srcIn" : 2050.368570507018,
7564 "start" : 621.5593220338983,
7565 "track" : "v3"
7566 },
7567 {
7568 "duration" : 2.4067796610169125,
7569 "fadeIn" : 0,
7570 "fadeOut" : 0,
7571 "id" : "64279978-B9D7-4E8D-AFED-D7913E1B9532",
7572 "kind" : "video",
7573 "linkId" : "B5A3F4FE-CCAA-45AE-A6FB-0579F3BF1536",
7574 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
7575 "muted" : false,
7576 "newShot" : false,
7577 "speed" : 1,
7578 "srcIn" : 2050.368565923019,
7579 "start" : 621.5593220338983,
7580 "track" : "v4"
7581 },
7582 {
7583 "duration" : 3.4237288135593644,
7584 "fadeIn" : 0,
7585 "fadeOut" : 0,
7586 "id" : "A040FD6A-EC96-415F-8D28-7B4691F99BF3",
7587 "kind" : "video",
7588 "linkId" : "0F6F0554-6C53-4419-B9B3-D9C2EE7D2267",
7589 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
7590 "muted" : false,
7591 "newShot" : false,
7592 "speed" : 1,
7593 "srcIn" : 2052.949152542373,
7594 "start" : 623.9661016949152,
7595 "track" : "v0"
7596 },
7597 {
7598 "duration" : 3.4237288135593644,
7599 "fadeIn" : 0,
7600 "fadeOut" : 0,
7601 "id" : "6AC76567-F75D-4A33-B204-A10F431BBFDD",
7602 "kind" : "audio",
7603 "linkId" : "0F6F0554-6C53-4419-B9B3-D9C2EE7D2267",
7604 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
7605 "muted" : true,
7606 "newShot" : false,
7607 "speed" : 1,
7608 "srcIn" : 2052.865281001032,
7609 "start" : 623.9661016949152,
7610 "track" : "v1"
7611 },
7612 {
7613 "duration" : 3.4237288135593644,
7614 "fadeIn" : 0,
7615 "fadeOut" : 0,
7616 "id" : "FA9C2797-0EB0-4B75-A617-5D4CF590AC43",
7617 "kind" : "audio",
7618 "linkId" : "0F6F0554-6C53-4419-B9B3-D9C2EE7D2267",
7619 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
7620 "muted" : false,
7621 "newShot" : false,
7622 "speed" : 1,
7623 "srcIn" : 2052.911957304263,
7624 "start" : 623.9661016949152,
7625 "track" : "v2"
7626 },
7627 {
7628 "duration" : 3.4237288135593644,
7629 "fadeIn" : 0,
7630 "fadeOut" : 0,
7631 "id" : "429309C1-5820-4F55-97F5-8FBD04302BA5",
7632 "kind" : "video",
7633 "linkId" : "0F6F0554-6C53-4419-B9B3-D9C2EE7D2267",
7634 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
7635 "muted" : false,
7636 "newShot" : false,
7637 "speed" : 1,
7638 "srcIn" : 2052.775350168035,
7639 "start" : 623.9661016949152,
7640 "track" : "v3"
7641 },
7642 {
7643 "duration" : 3.4237288135593644,
7644 "fadeIn" : 0,
7645 "fadeOut" : 0,
7646 "id" : "89C2D014-50A7-43ED-AE56-0AA708FA28ED",
7647 "kind" : "video",
7648 "linkId" : "0F6F0554-6C53-4419-B9B3-D9C2EE7D2267",
7649 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
7650 "muted" : false,
7651 "newShot" : false,
7652 "speed" : 1,
7653 "srcIn" : 2052.775345584036,
7654 "start" : 623.9661016949152,
7655 "track" : "v4"
7656 },
7657 {
7658 "duration" : 5.69491525423723,
7659 "fadeIn" : 0,
7660 "fadeOut" : 0,
7661 "id" : "01E331DE-F3BA-42B2-B95C-4FA7802600C4",
7662 "kind" : "video",
7663 "linkId" : "681599CE-614B-4D54-9956-0A2F59A0C020",
7664 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
7665 "muted" : false,
7666 "newShot" : false,
7667 "speed" : 1,
7668 "srcIn" : 2114.6779661016953,
7669 "start" : 627.3898305084746,
7670 "track" : "v0"
7671 },
7672 {
7673 "duration" : 5.69491525423723,
7674 "fadeIn" : 0,
7675 "fadeOut" : 0,
7676 "id" : "602A3DDB-AB74-45B5-8FAE-A660E6CA2700",
7677 "kind" : "audio",
7678 "linkId" : "681599CE-614B-4D54-9956-0A2F59A0C020",
7679 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
7680 "muted" : true,
7681 "newShot" : false,
7682 "speed" : 1,
7683 "srcIn" : 2114.5940945603543,
7684 "start" : 627.3898305084746,
7685 "track" : "v1"
7686 },
7687 {
7688 "duration" : 5.69491525423723,
7689 "fadeIn" : 0,
7690 "fadeOut" : 0,
7691 "id" : "0BA636D9-34A5-47E7-9BC5-0BDD5579680E",
7692 "kind" : "audio",
7693 "linkId" : "681599CE-614B-4D54-9956-0A2F59A0C020",
7694 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
7695 "muted" : false,
7696 "newShot" : false,
7697 "speed" : 1,
7698 "srcIn" : 2114.640770863585,
7699 "start" : 627.3898305084746,
7700 "track" : "v2"
7701 },
7702 {
7703 "duration" : 5.69491525423723,
7704 "fadeIn" : 0,
7705 "fadeOut" : 0,
7706 "id" : "4E01905E-2230-4C63-9855-875F6C89C92B",
7707 "kind" : "video",
7708 "linkId" : "681599CE-614B-4D54-9956-0A2F59A0C020",
7709 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
7710 "muted" : false,
7711 "newShot" : false,
7712 "speed" : 1,
7713 "srcIn" : 2114.504163727357,
7714 "start" : 627.3898305084746,
7715 "track" : "v3"
7716 },
7717 {
7718 "duration" : 5.69491525423723,
7719 "fadeIn" : 0,
7720 "fadeOut" : 0,
7721 "id" : "78183D76-36AF-4F77-8481-6336BB1F1340",
7722 "kind" : "video",
7723 "linkId" : "681599CE-614B-4D54-9956-0A2F59A0C020",
7724 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
7725 "muted" : false,
7726 "newShot" : false,
7727 "speed" : 1,
7728 "srcIn" : 2114.5041591433583,
7729 "start" : 627.3898305084746,
7730 "track" : "v4"
7731 },
7732 {
7733 "duration" : 15.76271186440681,
7734 "fadeIn" : 0,
7735 "fadeOut" : 0,
7736 "id" : "581AB06A-CA87-43B3-9083-3BF4CA1B488F",
7737 "kind" : "video",
7738 "linkId" : "54C20EBF-C3C2-46DA-929B-9C51CBA0B7D6",
7739 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
7740 "muted" : false,
7741 "newShot" : false,
7742 "speed" : 1,
7743 "srcIn" : 2230.1694915254243,
7744 "start" : 633.0847457627118,
7745 "track" : "v0"
7746 },
7747 {
7748 "duration" : 15.76271186440681,
7749 "fadeIn" : 0,
7750 "fadeOut" : 0,
7751 "id" : "39BA14C0-0C38-4545-B0B0-C33EB72363EF",
7752 "kind" : "audio",
7753 "linkId" : "54C20EBF-C3C2-46DA-929B-9C51CBA0B7D6",
7754 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
7755 "muted" : true,
7756 "newShot" : false,
7757 "speed" : 1,
7758 "srcIn" : 2230.085619984083,
7759 "start" : 633.0847457627118,
7760 "track" : "v1"
7761 },
7762 {
7763 "duration" : 15.76271186440681,
7764 "fadeIn" : 0,
7765 "fadeOut" : 0,
7766 "id" : "2161011F-CC8E-4C61-8661-7A947C751069",
7767 "kind" : "audio",
7768 "linkId" : "54C20EBF-C3C2-46DA-929B-9C51CBA0B7D6",
7769 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
7770 "muted" : false,
7771 "newShot" : false,
7772 "speed" : 1,
7773 "srcIn" : 2230.132296287314,
7774 "start" : 633.0847457627118,
7775 "track" : "v2"
7776 },
7777 {
7778 "duration" : 15.76271186440681,
7779 "fadeIn" : 0,
7780 "fadeOut" : 0,
7781 "id" : "7265B315-57C1-47FB-A27C-3AB7B8CA1004",
7782 "kind" : "video",
7783 "linkId" : "54C20EBF-C3C2-46DA-929B-9C51CBA0B7D6",
7784 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
7785 "muted" : false,
7786 "newShot" : false,
7787 "speed" : 1,
7788 "srcIn" : 2229.995689151086,
7789 "start" : 633.0847457627118,
7790 "track" : "v3"
7791 },
7792 {
7793 "duration" : 15.76271186440681,
7794 "fadeIn" : 0,
7795 "fadeOut" : 0,
7796 "id" : "EFC80E51-0F05-4B16-8596-E78F73CB045F",
7797 "kind" : "video",
7798 "linkId" : "54C20EBF-C3C2-46DA-929B-9C51CBA0B7D6",
7799 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
7800 "muted" : false,
7801 "newShot" : false,
7802 "speed" : 1,
7803 "srcIn" : 2229.995684567087,
7804 "start" : 633.0847457627118,
7805 "track" : "v4"
7806 },
7807 {
7808 "duration" : 3.3898305084745743,
7809 "fadeIn" : 0,
7810 "fadeOut" : 0,
7811 "id" : "8BD87ADB-1AA9-4B14-9370-4DF20E448896",
7812 "kind" : "video",
7813 "linkId" : "C2740056-FAEB-4E91-9E00-112253797C46",
7814 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
7815 "muted" : false,
7816 "newShot" : false,
7817 "speed" : 1,
7818 "srcIn" : 2256.372881355933,
7819 "start" : 648.8474576271186,
7820 "track" : "v0"
7821 },
7822 {
7823 "duration" : 3.3898305084745743,
7824 "fadeIn" : 0,
7825 "fadeOut" : 0,
7826 "id" : "7A48AFF3-E08F-437C-AC57-92133246569E",
7827 "kind" : "audio",
7828 "linkId" : "C2740056-FAEB-4E91-9E00-112253797C46",
7829 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
7830 "muted" : true,
7831 "newShot" : false,
7832 "speed" : 1,
7833 "srcIn" : 2256.2890098145917,
7834 "start" : 648.8474576271186,
7835 "track" : "v1"
7836 },
7837 {
7838 "duration" : 3.3898305084745743,
7839 "fadeIn" : 0,
7840 "fadeOut" : 0,
7841 "id" : "E427E26F-1FDB-4742-A1E4-015E32255D38",
7842 "kind" : "audio",
7843 "linkId" : "C2740056-FAEB-4E91-9E00-112253797C46",
7844 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
7845 "muted" : false,
7846 "newShot" : false,
7847 "speed" : 1,
7848 "srcIn" : 2256.3356861178227,
7849 "start" : 648.8474576271186,
7850 "track" : "v2"
7851 },
7852 {
7853 "duration" : 3.3898305084745743,
7854 "fadeIn" : 0,
7855 "fadeOut" : 0,
7856 "id" : "107EE1C9-66CC-4E8E-9743-C6900E649621",
7857 "kind" : "video",
7858 "linkId" : "C2740056-FAEB-4E91-9E00-112253797C46",
7859 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
7860 "muted" : false,
7861 "newShot" : false,
7862 "speed" : 1,
7863 "srcIn" : 2256.1990789815945,
7864 "start" : 648.8474576271186,
7865 "track" : "v3"
7866 },
7867 {
7868 "duration" : 3.3898305084745743,
7869 "fadeIn" : 0,
7870 "fadeOut" : 0,
7871 "id" : "D7AAC444-EA58-4486-9341-92E3C325D17F",
7872 "kind" : "video",
7873 "linkId" : "C2740056-FAEB-4E91-9E00-112253797C46",
7874 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
7875 "muted" : false,
7876 "newShot" : false,
7877 "speed" : 1,
7878 "srcIn" : 2256.1990743975957,
7879 "start" : 648.8474576271186,
7880 "track" : "v4"
7881 },
7882 {
7883 "duration" : 15.423728813559364,
7884 "fadeIn" : 0,
7885 "fadeOut" : 0,
7886 "id" : "4754E275-63E9-4C43-8DBD-3771650BDEB8",
7887 "kind" : "video",
7888 "linkId" : "FF0D729E-3013-4F28-A488-DBD70296587F",
7889 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
7890 "muted" : false,
7891 "newShot" : false,
7892 "speed" : 1,
7893 "srcIn" : 2280.9491525423737,
7894 "start" : 652.2372881355932,
7895 "track" : "v0"
7896 },
7897 {
7898 "duration" : 15.423728813559364,
7899 "fadeIn" : 0,
7900 "fadeOut" : 0,
7901 "id" : "A8BCA6E8-0804-4D39-8229-30DF2DFBF320",
7902 "kind" : "audio",
7903 "linkId" : "FF0D729E-3013-4F28-A488-DBD70296587F",
7904 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
7905 "muted" : true,
7906 "newShot" : false,
7907 "speed" : 1,
7908 "srcIn" : 2280.8652810010326,
7909 "start" : 652.2372881355932,
7910 "track" : "v1"
7911 },
7912 {
7913 "duration" : 15.423728813559364,
7914 "fadeIn" : 0,
7915 "fadeOut" : 0,
7916 "id" : "2A8D5833-B3BC-4A82-A7E7-6319DFF51DC3",
7917 "kind" : "audio",
7918 "linkId" : "FF0D729E-3013-4F28-A488-DBD70296587F",
7919 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
7920 "muted" : false,
7921 "newShot" : false,
7922 "speed" : 1,
7923 "srcIn" : 2280.9119573042635,
7924 "start" : 652.2372881355932,
7925 "track" : "v2"
7926 },
7927 {
7928 "duration" : 15.423728813559364,
7929 "fadeIn" : 0,
7930 "fadeOut" : 0,
7931 "id" : "B8963AE1-23D3-4C35-B241-00A5396F4DD7",
7932 "kind" : "video",
7933 "linkId" : "FF0D729E-3013-4F28-A488-DBD70296587F",
7934 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
7935 "muted" : false,
7936 "newShot" : false,
7937 "speed" : 1,
7938 "srcIn" : 2280.7753501680354,
7939 "start" : 652.2372881355932,
7940 "track" : "v3"
7941 },
7942 {
7943 "duration" : 15.423728813559364,
7944 "fadeIn" : 0,
7945 "fadeOut" : 0,
7946 "id" : "1FC80A57-7A45-4C7D-9200-0C1A48A3D6F5",
7947 "kind" : "video",
7948 "linkId" : "FF0D729E-3013-4F28-A488-DBD70296587F",
7949 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
7950 "muted" : false,
7951 "newShot" : false,
7952 "speed" : 1,
7953 "srcIn" : 2280.7753455840366,
7954 "start" : 652.2372881355932,
7955 "track" : "v4"
7956 },
7957 {
7958 "duration" : 12.745762711864359,
7959 "fadeIn" : 0,
7960 "fadeOut" : 0,
7961 "id" : "0CA818E8-62B3-474A-8050-49368421A90E",
7962 "kind" : "video",
7963 "linkId" : "C5B9230A-8789-4FD4-B107-6702F012D99A",
7964 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
7965 "muted" : false,
7966 "newShot" : false,
7967 "speed" : 1,
7968 "srcIn" : 2296.372881355933,
7969 "start" : 667.6610169491526,
7970 "track" : "v0"
7971 },
7972 {
7973 "duration" : 12.745762711864359,
7974 "fadeIn" : 0,
7975 "fadeOut" : 0,
7976 "id" : "EB3722EC-6C38-40B2-B519-694180267E3A",
7977 "kind" : "audio",
7978 "linkId" : "C5B9230A-8789-4FD4-B107-6702F012D99A",
7979 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
7980 "muted" : true,
7981 "newShot" : false,
7982 "speed" : 1,
7983 "srcIn" : 2296.2890098145917,
7984 "start" : 667.6610169491526,
7985 "track" : "v1"
7986 },
7987 {
7988 "duration" : 12.745762711864359,
7989 "fadeIn" : 0,
7990 "fadeOut" : 0,
7991 "id" : "A797E488-873A-4FC3-816A-D61A73E2F1D9",
7992 "kind" : "audio",
7993 "linkId" : "C5B9230A-8789-4FD4-B107-6702F012D99A",
7994 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
7995 "muted" : false,
7996 "newShot" : false,
7997 "speed" : 1,
7998 "srcIn" : 2296.3356861178227,
7999 "start" : 667.6610169491526,
8000 "track" : "v2"
8001 },
8002 {
8003 "duration" : 12.745762711864359,
8004 "fadeIn" : 0,
8005 "fadeOut" : 0,
8006 "id" : "75FC92A1-B149-4AB0-A366-35F476711F59",
8007 "kind" : "video",
8008 "linkId" : "C5B9230A-8789-4FD4-B107-6702F012D99A",
8009 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
8010 "muted" : false,
8011 "newShot" : false,
8012 "speed" : 1,
8013 "srcIn" : 2296.1990789815945,
8014 "start" : 667.6610169491526,
8015 "track" : "v3"
8016 },
8017 {
8018 "duration" : 12.745762711864359,
8019 "fadeIn" : 0,
8020 "fadeOut" : 0,
8021 "id" : "5B3388A0-5AC5-481F-8DD8-BED12840C1D9",
8022 "kind" : "video",
8023 "linkId" : "C5B9230A-8789-4FD4-B107-6702F012D99A",
8024 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
8025 "muted" : false,
8026 "newShot" : false,
8027 "speed" : 1,
8028 "srcIn" : 2296.1990743975957,
8029 "start" : 667.6610169491526,
8030 "track" : "v4"
8031 },
8032 {
8033 "duration" : 4.677966101695006,
8034 "fadeIn" : 0,
8035 "fadeOut" : 0,
8036 "id" : "5A8649A2-00AB-447F-BC8C-3085E8695184",
8037 "kind" : "video",
8038 "linkId" : "2782DABC-F157-44FA-B15C-F2D70A28D22C",
8039 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
8040 "muted" : false,
8041 "newShot" : false,
8042 "speed" : 1,
8043 "srcIn" : 2313.254237288136,
8044 "start" : 680.4067796610169,
8045 "track" : "v0"
8046 },
8047 {
8048 "duration" : 4.677966101695006,
8049 "fadeIn" : 0,
8050 "fadeOut" : 0,
8051 "id" : "EAC07860-D644-40FF-9A4D-08BD56F332C4",
8052 "kind" : "audio",
8053 "linkId" : "2782DABC-F157-44FA-B15C-F2D70A28D22C",
8054 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
8055 "muted" : true,
8056 "newShot" : false,
8057 "speed" : 1,
8058 "srcIn" : 2313.170365746795,
8059 "start" : 680.4067796610169,
8060 "track" : "v1"
8061 },
8062 {
8063 "duration" : 4.677966101695006,
8064 "fadeIn" : 0,
8065 "fadeOut" : 0,
8066 "id" : "0950EA6E-C41F-453A-9C62-F24BC14CD76E",
8067 "kind" : "audio",
8068 "linkId" : "2782DABC-F157-44FA-B15C-F2D70A28D22C",
8069 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
8070 "muted" : false,
8071 "newShot" : false,
8072 "speed" : 1,
8073 "srcIn" : 2313.217042050026,
8074 "start" : 680.4067796610169,
8075 "track" : "v2"
8076 },
8077 {
8078 "duration" : 4.677966101695006,
8079 "fadeIn" : 0,
8080 "fadeOut" : 0,
8081 "id" : "C0EBCCE6-06A8-4958-8643-35B908EA7C98",
8082 "kind" : "video",
8083 "linkId" : "2782DABC-F157-44FA-B15C-F2D70A28D22C",
8084 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
8085 "muted" : false,
8086 "newShot" : false,
8087 "speed" : 1,
8088 "srcIn" : 2313.080434913798,
8089 "start" : 680.4067796610169,
8090 "track" : "v3"
8091 },
8092 {
8093 "duration" : 4.677966101695006,
8094 "fadeIn" : 0,
8095 "fadeOut" : 0,
8096 "id" : "7D753BA0-2851-4A2B-B1AB-52234E029F7C",
8097 "kind" : "video",
8098 "linkId" : "2782DABC-F157-44FA-B15C-F2D70A28D22C",
8099 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
8100 "muted" : false,
8101 "newShot" : false,
8102 "speed" : 1,
8103 "srcIn" : 2313.080430329799,
8104 "start" : 680.4067796610169,
8105 "track" : "v4"
8106 },
8107 {
8108 "duration" : 19.186440677966175,
8109 "fadeIn" : 0,
8110 "fadeOut" : 0,
8111 "id" : "B4AB14C4-4491-499A-8505-0934B993F07B",
8112 "kind" : "video",
8113 "linkId" : "028E7FFC-FA84-47CF-8683-266C5E78C890",
8114 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
8115 "muted" : false,
8116 "newShot" : false,
8117 "speed" : 1,
8118 "srcIn" : 2414.6440677966107,
8119 "start" : 685.0847457627119,
8120 "track" : "v0"
8121 },
8122 {
8123 "duration" : 19.186440677966175,
8124 "fadeIn" : 0,
8125 "fadeOut" : 0,
8126 "id" : "36653084-A594-47D9-82C7-05282A42CE6C",
8127 "kind" : "audio",
8128 "linkId" : "028E7FFC-FA84-47CF-8683-266C5E78C890",
8129 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
8130 "muted" : true,
8131 "newShot" : false,
8132 "speed" : 1,
8133 "srcIn" : 2414.5601962552696,
8134 "start" : 685.0847457627119,
8135 "track" : "v1"
8136 },
8137 {
8138 "duration" : 19.186440677966175,
8139 "fadeIn" : 0,
8140 "fadeOut" : 0,
8141 "id" : "5A23146F-8246-498B-AC51-C4FE4B6C4DDA",
8142 "kind" : "audio",
8143 "linkId" : "028E7FFC-FA84-47CF-8683-266C5E78C890",
8144 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
8145 "muted" : false,
8146 "newShot" : false,
8147 "speed" : 1,
8148 "srcIn" : 2414.6068725585005,
8149 "start" : 685.0847457627119,
8150 "track" : "v2"
8151 },
8152 {
8153 "duration" : 19.186440677966175,
8154 "fadeIn" : 0,
8155 "fadeOut" : 0,
8156 "id" : "C7D8CAF3-5789-4F76-924A-24654359FD7F",
8157 "kind" : "video",
8158 "linkId" : "028E7FFC-FA84-47CF-8683-266C5E78C890",
8159 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
8160 "muted" : false,
8161 "newShot" : false,
8162 "speed" : 1,
8163 "srcIn" : 2414.4702654222724,
8164 "start" : 685.0847457627119,
8165 "track" : "v3"
8166 },
8167 {
8168 "duration" : 19.186440677966175,
8169 "fadeIn" : 0,
8170 "fadeOut" : 0,
8171 "id" : "DFB2B3EE-B824-4672-A351-269C20BF2ADE",
8172 "kind" : "video",
8173 "linkId" : "028E7FFC-FA84-47CF-8683-266C5E78C890",
8174 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
8175 "muted" : false,
8176 "newShot" : false,
8177 "speed" : 1,
8178 "srcIn" : 2414.4702608382736,
8179 "start" : 685.0847457627119,
8180 "track" : "v4"
8181 },
8182 {
8183 "duration" : 5.694915254237344,
8184 "fadeIn" : 0,
8185 "fadeOut" : 0,
8186 "id" : "EB2F9D36-DD5F-468C-9DA8-90D56D42E0A9",
8187 "kind" : "video",
8188 "linkId" : "DDA38179-F497-4A55-8BF0-09672B42936C",
8189 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
8190 "muted" : false,
8191 "newShot" : false,
8192 "speed" : 1,
8193 "srcIn" : 2446.1355932203396,
8194 "start" : 704.2711864406781,
8195 "track" : "v0"
8196 },
8197 {
8198 "duration" : 5.694915254237344,
8199 "fadeIn" : 0,
8200 "fadeOut" : 0,
8201 "id" : "D07C45CE-44A0-4FEF-8F34-54E4FD3F7D39",
8202 "kind" : "audio",
8203 "linkId" : "DDA38179-F497-4A55-8BF0-09672B42936C",
8204 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
8205 "muted" : true,
8206 "newShot" : false,
8207 "speed" : 1,
8208 "srcIn" : 2446.0517216789985,
8209 "start" : 704.2711864406781,
8210 "track" : "v1"
8211 },
8212 {
8213 "duration" : 5.694915254237344,
8214 "fadeIn" : 0,
8215 "fadeOut" : 0,
8216 "id" : "A22E3A44-8F76-4713-9D7F-7948A74D9CCC",
8217 "kind" : "audio",
8218 "linkId" : "DDA38179-F497-4A55-8BF0-09672B42936C",
8219 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
8220 "muted" : false,
8221 "newShot" : false,
8222 "speed" : 1,
8223 "srcIn" : 2446.0983979822295,
8224 "start" : 704.2711864406781,
8225 "track" : "v2"
8226 },
8227 {
8228 "duration" : 5.694915254237344,
8229 "fadeIn" : 0,
8230 "fadeOut" : 0,
8231 "id" : "15C53598-6F8F-4C89-B6EE-8BEAEA74F23A",
8232 "kind" : "video",
8233 "linkId" : "DDA38179-F497-4A55-8BF0-09672B42936C",
8234 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
8235 "muted" : false,
8236 "newShot" : false,
8237 "speed" : 1,
8238 "srcIn" : 2445.9617908460013,
8239 "start" : 704.2711864406781,
8240 "track" : "v3"
8241 },
8242 {
8243 "duration" : 5.694915254237344,
8244 "fadeIn" : 0,
8245 "fadeOut" : 0,
8246 "id" : "FB595553-A66D-4B22-8173-3AAE10CB58D0",
8247 "kind" : "video",
8248 "linkId" : "DDA38179-F497-4A55-8BF0-09672B42936C",
8249 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
8250 "muted" : false,
8251 "newShot" : false,
8252 "speed" : 1,
8253 "srcIn" : 2445.9617862620025,
8254 "start" : 704.2711864406781,
8255 "track" : "v4"
8256 },
8257 {
8258 "duration" : 9.59322033898286,
8259 "fadeIn" : 0,
8260 "fadeOut" : 0,
8261 "id" : "815EF8E2-F1E8-4B38-829B-D2C6971FDCD7",
8262 "kind" : "video",
8263 "linkId" : "1D15D7CC-5494-459C-BAF8-DD757B81547D",
8264 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
8265 "muted" : false,
8266 "newShot" : false,
8267 "speed" : 1,
8268 "srcIn" : 2454.1355932203396,
8269 "start" : 709.9661016949154,
8270 "track" : "v0"
8271 },
8272 {
8273 "duration" : 9.59322033898286,
8274 "fadeIn" : 0,
8275 "fadeOut" : 0,
8276 "id" : "6599B7E9-8BC7-4339-8544-580C7E40A6B3",
8277 "kind" : "audio",
8278 "linkId" : "1D15D7CC-5494-459C-BAF8-DD757B81547D",
8279 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
8280 "muted" : true,
8281 "newShot" : false,
8282 "speed" : 1,
8283 "srcIn" : 2454.0517216789985,
8284 "start" : 709.9661016949154,
8285 "track" : "v1"
8286 },
8287 {
8288 "duration" : 9.59322033898286,
8289 "fadeIn" : 0,
8290 "fadeOut" : 0,
8291 "id" : "913AD485-580A-4CF5-832E-3A866323A594",
8292 "kind" : "audio",
8293 "linkId" : "1D15D7CC-5494-459C-BAF8-DD757B81547D",
8294 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
8295 "muted" : false,
8296 "newShot" : false,
8297 "speed" : 1,
8298 "srcIn" : 2454.0983979822295,
8299 "start" : 709.9661016949154,
8300 "track" : "v2"
8301 },
8302 {
8303 "duration" : 9.59322033898286,
8304 "fadeIn" : 0,
8305 "fadeOut" : 0,
8306 "id" : "3F04DEF9-CD7C-486B-913A-989ECE77DE57",
8307 "kind" : "video",
8308 "linkId" : "1D15D7CC-5494-459C-BAF8-DD757B81547D",
8309 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
8310 "muted" : false,
8311 "newShot" : false,
8312 "speed" : 1,
8313 "srcIn" : 2453.9617908460013,
8314 "start" : 709.9661016949154,
8315 "track" : "v3"
8316 },
8317 {
8318 "duration" : 9.59322033898286,
8319 "fadeIn" : 0,
8320 "fadeOut" : 0,
8321 "id" : "715FA793-E1B3-4C26-B441-31D597B1938B",
8322 "kind" : "video",
8323 "linkId" : "1D15D7CC-5494-459C-BAF8-DD757B81547D",
8324 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
8325 "muted" : false,
8326 "newShot" : false,
8327 "speed" : 1,
8328 "srcIn" : 2453.9617862620025,
8329 "start" : 709.9661016949154,
8330 "track" : "v4"
8331 },
8332 {
8333 "duration" : 14.474576271186379,
8334 "fadeIn" : 0,
8335 "fadeOut" : 0,
8336 "id" : "40CCDD9D-5568-40CA-AEF5-90D94B8580BB",
8337 "kind" : "video",
8338 "linkId" : "F3271449-9FF2-4A35-8582-579E52CA2EFC",
8339 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
8340 "muted" : false,
8341 "newShot" : false,
8342 "speed" : 1,
8343 "srcIn" : 2526.6779661016953,
8344 "start" : 723.7627118644068,
8345 "track" : "v0"
8346 },
8347 {
8348 "duration" : 14.474576271186379,
8349 "fadeIn" : 0,
8350 "fadeOut" : 0,
8351 "id" : "C9DD81B8-F688-49A6-8638-2A626AF597C9",
8352 "kind" : "audio",
8353 "linkId" : "F3271449-9FF2-4A35-8582-579E52CA2EFC",
8354 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
8355 "muted" : true,
8356 "newShot" : false,
8357 "speed" : 1,
8358 "srcIn" : 2526.5940945603543,
8359 "start" : 723.7627118644068,
8360 "track" : "v1"
8361 },
8362 {
8363 "duration" : 14.474576271186379,
8364 "fadeIn" : 0,
8365 "fadeOut" : 0,
8366 "id" : "BC7A036D-1FA0-4738-A7F4-AD8EC3488B82",
8367 "kind" : "audio",
8368 "linkId" : "F3271449-9FF2-4A35-8582-579E52CA2EFC",
8369 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
8370 "muted" : false,
8371 "newShot" : false,
8372 "speed" : 1,
8373 "srcIn" : 2526.640770863585,
8374 "start" : 723.7627118644068,
8375 "track" : "v2"
8376 },
8377 {
8378 "duration" : 14.474576271186379,
8379 "fadeIn" : 0,
8380 "fadeOut" : 0,
8381 "id" : "A34F945B-0445-4497-9DD0-1E68E72ADA27",
8382 "kind" : "video",
8383 "linkId" : "F3271449-9FF2-4A35-8582-579E52CA2EFC",
8384 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
8385 "muted" : false,
8386 "newShot" : false,
8387 "speed" : 1,
8388 "srcIn" : 2526.504163727357,
8389 "start" : 723.7627118644068,
8390 "track" : "v3"
8391 },
8392 {
8393 "duration" : 14.474576271186379,
8394 "fadeIn" : 0,
8395 "fadeOut" : 0,
8396 "id" : "E2ECA174-0D6E-4E40-961D-0804BCB7E988",
8397 "kind" : "video",
8398 "linkId" : "F3271449-9FF2-4A35-8582-579E52CA2EFC",
8399 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
8400 "muted" : false,
8401 "newShot" : false,
8402 "speed" : 1,
8403 "srcIn" : 2526.5041591433583,
8404 "start" : 723.7627118644068,
8405 "track" : "v4"
8406 },
8407 {
8408 "duration" : 12.372881355932236,
8409 "fadeIn" : 0,
8410 "fadeOut" : 0,
8411 "id" : "793A00B4-D559-495E-BF6E-23E5FF440C18",
8412 "kind" : "video",
8413 "linkId" : "57734964-46B6-4D2E-8D3E-63DAA6A4B487",
8414 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
8415 "muted" : false,
8416 "newShot" : false,
8417 "speed" : 1,
8418 "srcIn" : 2542.203389830509,
8419 "start" : 738.2372881355932,
8420 "track" : "v0"
8421 },
8422 {
8423 "duration" : 12.372881355932236,
8424 "fadeIn" : 0,
8425 "fadeOut" : 0,
8426 "id" : "C4AC4AF2-ACA7-4B5B-B85A-13CC8E338B0C",
8427 "kind" : "audio",
8428 "linkId" : "57734964-46B6-4D2E-8D3E-63DAA6A4B487",
8429 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
8430 "muted" : true,
8431 "newShot" : false,
8432 "speed" : 1,
8433 "srcIn" : 2542.119518289168,
8434 "start" : 738.2372881355932,
8435 "track" : "v1"
8436 },
8437 {
8438 "duration" : 12.372881355932236,
8439 "fadeIn" : 0,
8440 "fadeOut" : 0,
8441 "id" : "0A904774-EBBE-42E8-BC32-42DDB4E21185",
8442 "kind" : "audio",
8443 "linkId" : "57734964-46B6-4D2E-8D3E-63DAA6A4B487",
8444 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
8445 "muted" : false,
8446 "newShot" : false,
8447 "speed" : 1,
8448 "srcIn" : 2542.166194592399,
8449 "start" : 738.2372881355932,
8450 "track" : "v2"
8451 },
8452 {
8453 "duration" : 12.372881355932236,
8454 "fadeIn" : 0,
8455 "fadeOut" : 0,
8456 "id" : "8CA5857B-2D5B-4E8A-90EB-7BE589C6785D",
8457 "kind" : "video",
8458 "linkId" : "57734964-46B6-4D2E-8D3E-63DAA6A4B487",
8459 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
8460 "muted" : false,
8461 "newShot" : false,
8462 "speed" : 1,
8463 "srcIn" : 2542.0295874561707,
8464 "start" : 738.2372881355932,
8465 "track" : "v3"
8466 },
8467 {
8468 "duration" : 12.372881355932236,
8469 "fadeIn" : 0,
8470 "fadeOut" : 0,
8471 "id" : "A1354766-A4E2-423C-A148-D457C645DEED",
8472 "kind" : "video",
8473 "linkId" : "57734964-46B6-4D2E-8D3E-63DAA6A4B487",
8474 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
8475 "muted" : false,
8476 "newShot" : false,
8477 "speed" : 1,
8478 "srcIn" : 2542.029582872172,
8479 "start" : 738.2372881355932,
8480 "track" : "v4"
8481 },
8482 {
8483 "duration" : 15112.237288,
8484 "fadeIn" : 0,
8485 "fadeOut" : 0,
8486 "id" : "1EDE863A-2897-4FFD-A49E-B943B438866F",
8487 "kind" : "video",
8488 "linkId" : "FD2B233D-ADAA-43D0-86FE-BD93A20C9129",
8489 "mediaId" : "CC300C55-7090-4A6E-81FA-55CB6644FAC9",
8490 "muted" : false,
8491 "newShot" : false,
8492 "speed" : 1,
8493 "srcIn" : 0,
8494 "start" : 4193.627118644067,
8495 "track" : "v0"
8496 },
8497 {
8498 "duration" : 15112.106667,
8499 "fadeIn" : 0,
8500 "fadeOut" : 0,
8501 "id" : "A3D2A572-1789-4532-9D15-1312C8312A41",
8502 "kind" : "audio",
8503 "linkId" : "FD2B233D-ADAA-43D0-86FE-BD93A20C9129",
8504 "mediaId" : "2613683E-12E6-402E-BF4D-6D9ACD7C1491",
8505 "muted" : true,
8506 "newShot" : false,
8507 "speed" : 1,
8508 "srcIn" : 0,
8509 "start" : 4193.710543352058,
8510 "track" : "v1"
8511 },
8512 {
8513 "duration" : 15112.213333,
8514 "fadeIn" : 0,
8515 "fadeOut" : 0,
8516 "id" : "387BD48F-5D42-4795-A2FE-DA7340E094B2",
8517 "kind" : "audio",
8518 "linkId" : "FD2B233D-ADAA-43D0-86FE-BD93A20C9129",
8519 "mediaId" : "7889E9EC-F67A-491B-81C0-0CF8338965A3",
8520 "muted" : false,
8521 "newShot" : false,
8522 "speed" : 1,
8523 "srcIn" : 0,
8524 "start" : 4193.660488258577,
8525 "track" : "v2"
8526 },
8527 {
8528 "duration" : 15112.066667,
8529 "fadeIn" : 0,
8530 "fadeOut" : 0,
8531 "id" : "15742468-AF06-408A-B0E3-DE8D543186D0",
8532 "kind" : "video",
8533 "linkId" : "FD2B233D-ADAA-43D0-86FE-BD93A20C9129",
8534 "mediaId" : "BC4E74C5-4C45-4633-B31A-3CAA58D4B2BF",
8535 "muted" : false,
8536 "newShot" : false,
8537 "speed" : 1,
8538 "srcIn" : 0,
8539 "start" : 4193.796015394061,
8540 "track" : "v3"
8541 },
8542 {
8543 "duration" : 15111.366667,
8544 "fadeIn" : 0,
8545 "fadeOut" : 0,
8546 "id" : "14D49BF0-68EB-4A4B-A627-9A55600AD1C2",
8547 "kind" : "video",
8548 "linkId" : "FD2B233D-ADAA-43D0-86FE-BD93A20C9129",
8549 "mediaId" : "98882264-A2ED-477B-A7B8-B63E54EDEACE",
8550 "muted" : false,
8551 "newShot" : false,
8552 "speed" : 1,
8553 "srcIn" : 0,
8554 "start" : 4193.796020644072,
8555 "track" : "v4"
8556 },
8557 {
8558 "duration" : 10045.254237,
8559 "fadeIn" : 0,
8560 "fadeOut" : 0,
8561 "id" : "82C83010-6BFE-4B26-81BC-CB291FAEB910",
8562 "kind" : "video",
8563 "linkId" : "F0D0664C-0131-446A-9354-CEB5E8E228DE",
8564 "mediaId" : "2D5EED57-87EB-44B4-9623-2CF48314C5F9",
8565 "muted" : false,
8566 "newShot" : false,
8567 "speed" : 1,
8568 "srcIn" : 0,
8569 "start" : 19305.864406779656,
8570 "track" : "v0"
8571 },
8572 {
8573 "duration" : 10045.162667,
8574 "fadeIn" : 0,
8575 "fadeOut" : 0,
8576 "id" : "83C1AFB5-E771-4D3A-8092-30A98A34B026",
8577 "kind" : "audio",
8578 "linkId" : "F0D0664C-0131-446A-9354-CEB5E8E228DE",
8579 "mediaId" : "0ECB1F4F-9065-432F-B0B1-7F47BD31FDCC",
8580 "muted" : false,
8581 "newShot" : false,
8582 "speed" : 1,
8583 "srcIn" : 0,
8584 "start" : 19305.9261039463,
8585 "track" : "v1"
8586 },
8587 {
8588 "duration" : 10045.248,
8589 "fadeIn" : 0,
8590 "fadeOut" : 0,
8591 "id" : "BD5B3686-815E-483F-8CDF-DC040625A81F",
8592 "kind" : "audio",
8593 "linkId" : "F0D0664C-0131-446A-9354-CEB5E8E228DE",
8594 "mediaId" : "02A5DFB3-9348-4102-BD13-F1856B431A70",
8595 "muted" : false,
8596 "newShot" : false,
8597 "speed" : 1,
8598 "srcIn" : 0,
8599 "start" : 19305.87683716514,
8600 "track" : "v2"
8601 },
8602 {
8603 "duration" : 10045.133333,
8604 "fadeIn" : 0,
8605 "fadeOut" : 0,
8606 "id" : "7C227E93-B4B2-44BB-81C4-0621CFA85F4E",
8607 "kind" : "video",
8608 "linkId" : "F0D0664C-0131-446A-9354-CEB5E8E228DE",
8609 "mediaId" : "9CA51332-5865-4C3D-9972-E781BDE75ECD",
8610 "muted" : false,
8611 "newShot" : false,
8612 "speed" : 1,
8613 "srcIn" : 0,
8614 "start" : 19306.0080157373,
8615 "track" : "v3"
8616 },
8617 {
8618 "duration" : 10045.166667,
8619 "fadeIn" : 0,
8620 "fadeOut" : 0,
8621 "id" : "472EB6D0-EF6A-469B-83F3-955C5C672361",
8622 "kind" : "video",
8623 "linkId" : "F0D0664C-0131-446A-9354-CEB5E8E228DE",
8624 "mediaId" : "0DEB0D7E-0C1E-49DA-9911-7773FB2158DE",
8625 "muted" : false,
8626 "newShot" : false,
8627 "speed" : 1,
8628 "srcIn" : 0,
8629 "start" : 19306.00801794631,
8630 "track" : "v4"
8631 },
8632 {
8633 "duration" : 11597.966102,
8634 "fadeIn" : 0,
8635 "fadeOut" : 0,
8636 "id" : "CE776B50-2A67-4285-9707-01DA14BBB04E",
8637 "kind" : "video",
8638 "linkId" : "F27C213D-566E-46A3-AF60-6D581EE67217",
8639 "mediaId" : "F06DF483-F96F-4DD1-8602-53609FA888F1",
8640 "muted" : false,
8641 "newShot" : false,
8642 "speed" : 1,
8643 "srcIn" : 0,
8644 "start" : 29351.18644067796,
8645 "track" : "v0"
8646 },
8647 {
8648 "duration" : 11598.101333,
8649 "fadeIn" : 0,
8650 "fadeOut" : 0,
8651 "id" : "7DB3CB28-8BB6-48ED-9B76-4FC6A5B2A106",
8652 "kind" : "audio",
8653 "linkId" : "F27C213D-566E-46A3-AF60-6D581EE67217",
8654 "mediaId" : "59213540-870A-4795-BD44-B3AFBC9F14E3",
8655 "muted" : false,
8656 "newShot" : false,
8657 "speed" : 1,
8658 "srcIn" : 0,
8659 "start" : 29351.035369510933,
8660 "track" : "v1"
8661 },
8662 {
8663 "duration" : 11598.464,
8664 "fadeIn" : 0,
8665 "fadeOut" : 0,
8666 "id" : "7941E3BC-CC88-41DB-A7BB-7C7519B8B9D6",
8667 "kind" : "audio",
8668 "linkId" : "F27C213D-566E-46A3-AF60-6D581EE67217",
8669 "mediaId" : "F4DB0AF3-2C74-4501-A58A-A519C046E3D6",
8670 "muted" : false,
8671 "newShot" : false,
8672 "speed" : 1,
8673 "srcIn" : 0,
8674 "start" : 29350.707797367297,
8675 "track" : "v2"
8676 },
8677 {
8678 "duration" : 11598.033333,
8679 "fadeIn" : 0,
8680 "fadeOut" : 0,
8681 "id" : "C6613E59-9E23-4934-B5DC-E224214F74D9",
8682 "kind" : "video",
8683 "linkId" : "F27C213D-566E-46A3-AF60-6D581EE67217",
8684 "mediaId" : "9F95D76B-EAB2-49AA-897A-C3C9A265E0CC",
8685 "muted" : false,
8686 "newShot" : false,
8687 "speed" : 1,
8688 "srcIn" : 0,
8689 "start" : 29351.122484093936,
8690 "track" : "v3"
8691 },
8692 {
8693 "duration" : 11598,
8694 "fadeIn" : 0,
8695 "fadeOut" : 0,
8696 "id" : "628E46F4-79BD-44D7-A964-903FBD21DD0F",
8697 "kind" : "video",
8698 "linkId" : "F27C213D-566E-46A3-AF60-6D581EE67217",
8699 "mediaId" : "CC497E03-E3E7-4283-A96C-F076D9F154A1",
8700 "muted" : false,
8701 "newShot" : false,
8702 "speed" : 1,
8703 "srcIn" : 0,
8704 "start" : 29351.12248226092,
8705 "track" : "v4"
8706 },
8707 {
8708 "duration" : 4.203389830508513,
8709 "fadeIn" : 0,
8710 "fadeOut" : 0,
8711 "id" : "5D2DD96A-1D28-4583-A85D-DDD1286F3EC1",
8712 "kind" : "video",
8713 "linkId" : "B7F43758-3B67-4E4D-8D71-152570BCA4AF",
8714 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
8715 "muted" : false,
8716 "newShot" : false,
8717 "speed" : 1,
8718 "srcIn" : 2491.0847457627124,
8719 "start" : 719.5593220338983,
8720 "track" : "v0"
8721 },
8722 {
8723 "duration" : 4.203389830508513,
8724 "fadeIn" : 0,
8725 "fadeOut" : 0,
8726 "id" : "B7181073-3D61-47D2-A83E-A7C19C246D68",
8727 "kind" : "audio",
8728 "linkId" : "B7F43758-3B67-4E4D-8D71-152570BCA4AF",
8729 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
8730 "muted" : true,
8731 "newShot" : false,
8732 "speed" : 1,
8733 "srcIn" : 2491.0008742213713,
8734 "start" : 719.5593220338983,
8735 "track" : "v1"
8736 },
8737 {
8738 "duration" : 4.203389830508513,
8739 "fadeIn" : 0,
8740 "fadeOut" : 0,
8741 "id" : "DF6474FD-D698-4232-9E94-EBE39BBB8545",
8742 "kind" : "audio",
8743 "linkId" : "B7F43758-3B67-4E4D-8D71-152570BCA4AF",
8744 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
8745 "muted" : false,
8746 "newShot" : false,
8747 "speed" : 1,
8748 "srcIn" : 2491.0475505246022,
8749 "start" : 719.5593220338983,
8750 "track" : "v2"
8751 },
8752 {
8753 "duration" : 4.203389830508513,
8754 "fadeIn" : 0,
8755 "fadeOut" : 0,
8756 "id" : "D06A7AA2-0BC5-4031-9EDA-7A81673249DF",
8757 "kind" : "video",
8758 "linkId" : "B7F43758-3B67-4E4D-8D71-152570BCA4AF",
8759 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
8760 "muted" : false,
8761 "newShot" : false,
8762 "speed" : 1,
8763 "srcIn" : 2490.910943388374,
8764 "start" : 719.5593220338983,
8765 "track" : "v3"
8766 },
8767 {
8768 "duration" : 4.203389830508513,
8769 "fadeIn" : 0,
8770 "fadeOut" : 0,
8771 "id" : "39DCC5F4-B663-454C-BD55-6E675B931DBA",
8772 "kind" : "video",
8773 "linkId" : "B7F43758-3B67-4E4D-8D71-152570BCA4AF",
8774 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
8775 "muted" : false,
8776 "newShot" : false,
8777 "speed" : 1,
8778 "srcIn" : 2490.9109388043753,
8779 "start" : 719.5593220338983,
8780 "track" : "v4"
8781 },
8782 {
8783 "duration" : 15.152542372881271,
8784 "fadeIn" : 0,
8785 "fadeOut" : 0,
8786 "id" : "F4373D19-EA06-4C7F-A620-FC8FD1BD6AE3",
8787 "kind" : "video",
8788 "linkId" : "DF0D7986-17C5-4CB7-B683-DD878723E8C7",
8789 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
8790 "muted" : false,
8791 "newShot" : false,
8792 "speed" : 1,
8793 "srcIn" : 2557.3898305084754,
8794 "start" : 750.6101694915254,
8795 "track" : "v0"
8796 },
8797 {
8798 "duration" : 15.152542372881271,
8799 "fadeIn" : 0,
8800 "fadeOut" : 0,
8801 "id" : "84DE87BB-60F8-41DF-933A-3B41704FE3D2",
8802 "kind" : "audio",
8803 "linkId" : "DF0D7986-17C5-4CB7-B683-DD878723E8C7",
8804 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
8805 "muted" : true,
8806 "newShot" : false,
8807 "speed" : 1,
8808 "srcIn" : 2557.3059589671343,
8809 "start" : 750.6101694915254,
8810 "track" : "v1"
8811 },
8812 {
8813 "duration" : 15.152542372881271,
8814 "fadeIn" : 0,
8815 "fadeOut" : 0,
8816 "id" : "F6A29700-D4EE-4106-AA51-21C13AD34CA4",
8817 "kind" : "audio",
8818 "linkId" : "DF0D7986-17C5-4CB7-B683-DD878723E8C7",
8819 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
8820 "muted" : false,
8821 "newShot" : false,
8822 "speed" : 1,
8823 "srcIn" : 2557.352635270365,
8824 "start" : 750.6101694915254,
8825 "track" : "v2"
8826 },
8827 {
8828 "duration" : 15.152542372881271,
8829 "fadeIn" : 0,
8830 "fadeOut" : 0,
8831 "id" : "353D8752-627E-40D9-8D76-BFB4084F392D",
8832 "kind" : "video",
8833 "linkId" : "DF0D7986-17C5-4CB7-B683-DD878723E8C7",
8834 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
8835 "muted" : false,
8836 "newShot" : false,
8837 "speed" : 1,
8838 "srcIn" : 2557.216028134137,
8839 "start" : 750.6101694915254,
8840 "track" : "v3"
8841 },
8842 {
8843 "duration" : 15.152542372881271,
8844 "fadeIn" : 0,
8845 "fadeOut" : 0,
8846 "id" : "901CEC11-981C-4F2C-8857-98E171F95538",
8847 "kind" : "video",
8848 "linkId" : "DF0D7986-17C5-4CB7-B683-DD878723E8C7",
8849 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
8850 "muted" : false,
8851 "newShot" : false,
8852 "speed" : 1,
8853 "srcIn" : 2557.2160235501383,
8854 "start" : 750.6101694915254,
8855 "track" : "v4"
8856 },
8857 {
8858 "duration" : 5.661016949152554,
8859 "fadeIn" : 0,
8860 "fadeOut" : 0,
8861 "id" : "E259582D-FC1C-4FA5-BE66-998C83FEC210",
8862 "kind" : "video",
8863 "linkId" : "9A0BE697-0A09-4342-804A-A10695A5765B",
8864 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
8865 "muted" : false,
8866 "newShot" : false,
8867 "speed" : 1,
8868 "srcIn" : 2575.42372881356,
8869 "start" : 765.7627118644068,
8870 "track" : "v0"
8871 },
8872 {
8873 "duration" : 5.661016949152554,
8874 "fadeIn" : 0,
8875 "fadeOut" : 0,
8876 "id" : "FB4E9075-64CB-4C65-A7BE-659E4788FCF8",
8877 "kind" : "audio",
8878 "linkId" : "9A0BE697-0A09-4342-804A-A10695A5765B",
8879 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
8880 "muted" : true,
8881 "newShot" : false,
8882 "speed" : 1,
8883 "srcIn" : 2575.339857272219,
8884 "start" : 765.7627118644068,
8885 "track" : "v1"
8886 },
8887 {
8888 "duration" : 5.661016949152554,
8889 "fadeIn" : 0,
8890 "fadeOut" : 0,
8891 "id" : "A6714A57-F046-4DE6-805C-A525B611FBD7",
8892 "kind" : "audio",
8893 "linkId" : "9A0BE697-0A09-4342-804A-A10695A5765B",
8894 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
8895 "muted" : false,
8896 "newShot" : false,
8897 "speed" : 1,
8898 "srcIn" : 2575.38653357545,
8899 "start" : 765.7627118644068,
8900 "track" : "v2"
8901 },
8902 {
8903 "duration" : 5.661016949152554,
8904 "fadeIn" : 0,
8905 "fadeOut" : 0,
8906 "id" : "DB4E1C97-4EDB-41E2-966E-057D14890226",
8907 "kind" : "video",
8908 "linkId" : "9A0BE697-0A09-4342-804A-A10695A5765B",
8909 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
8910 "muted" : false,
8911 "newShot" : false,
8912 "speed" : 1,
8913 "srcIn" : 2575.249926439222,
8914 "start" : 765.7627118644068,
8915 "track" : "v3"
8916 },
8917 {
8918 "duration" : 5.661016949152554,
8919 "fadeIn" : 0,
8920 "fadeOut" : 0,
8921 "id" : "E9D9C86D-9ED7-4309-8C45-79EE9034CFD1",
8922 "kind" : "video",
8923 "linkId" : "9A0BE697-0A09-4342-804A-A10695A5765B",
8924 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
8925 "muted" : false,
8926 "newShot" : false,
8927 "speed" : 1,
8928 "srcIn" : 2575.249921855223,
8929 "start" : 765.7627118644068,
8930 "track" : "v4"
8931 },
8932 {
8933 "duration" : 65.15254237288138,
8934 "fadeIn" : 0,
8935 "fadeOut" : 0,
8936 "id" : "864CC0F8-B363-4CE4-B255-61F2E32173FE",
8937 "kind" : "video",
8938 "linkId" : "FAD43732-5E8B-4F4A-AF1A-5F977F88D803",
8939 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
8940 "muted" : false,
8941 "newShot" : false,
8942 "speed" : 1,
8943 "srcIn" : 2581.0847457627124,
8944 "start" : 778.0677966101695,
8945 "track" : "v0"
8946 },
8947 {
8948 "duration" : 65.15254237288138,
8949 "fadeIn" : 0,
8950 "fadeOut" : 0,
8951 "id" : "F19656B8-AD96-45A9-AB45-41E84163B720",
8952 "kind" : "audio",
8953 "linkId" : "FAD43732-5E8B-4F4A-AF1A-5F977F88D803",
8954 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
8955 "muted" : true,
8956 "newShot" : false,
8957 "speed" : 1,
8958 "srcIn" : 2581.0008742213713,
8959 "start" : 778.0677966101695,
8960 "track" : "v1"
8961 },
8962 {
8963 "duration" : 65.15254237288138,
8964 "fadeIn" : 0,
8965 "fadeOut" : 0,
8966 "id" : "D40E7E5C-E58F-4D04-8A61-4C5A0AFE2C2C",
8967 "kind" : "audio",
8968 "linkId" : "FAD43732-5E8B-4F4A-AF1A-5F977F88D803",
8969 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
8970 "muted" : false,
8971 "newShot" : false,
8972 "speed" : 1,
8973 "srcIn" : 2581.0475505246022,
8974 "start" : 778.0677966101695,
8975 "track" : "v2"
8976 },
8977 {
8978 "duration" : 65.15254237288138,
8979 "fadeIn" : 0,
8980 "fadeOut" : 0,
8981 "id" : "0AEACF86-70AC-4999-8D26-F9BDE6003C4F",
8982 "kind" : "video",
8983 "linkId" : "FAD43732-5E8B-4F4A-AF1A-5F977F88D803",
8984 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
8985 "muted" : false,
8986 "newShot" : false,
8987 "speed" : 1,
8988 "srcIn" : 2580.910943388374,
8989 "start" : 778.0677966101695,
8990 "track" : "v3"
8991 },
8992 {
8993 "duration" : 65.15254237288138,
8994 "fadeIn" : 0,
8995 "fadeOut" : 0,
8996 "id" : "8566FA67-6A70-4CFF-9C03-5DED0AE5F620",
8997 "kind" : "video",
8998 "linkId" : "FAD43732-5E8B-4F4A-AF1A-5F977F88D803",
8999 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
9000 "muted" : false,
9001 "newShot" : false,
9002 "speed" : 1,
9003 "srcIn" : 2580.9109388043753,
9004 "start" : 778.0677966101695,
9005 "track" : "v4"
9006 },
9007 {
9008 "duration" : 2.135593220338933,
9009 "fadeIn" : 0,
9010 "fadeOut" : 0,
9011 "id" : "0FAA1CB7-A092-406F-B1FD-828EE4768B07",
9012 "kind" : "video",
9013 "linkId" : "FC57D67A-F7BF-448D-985C-05D71447DD0A",
9014 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
9015 "muted" : false,
9016 "newShot" : false,
9017 "speed" : 1,
9018 "srcIn" : 2646.2372881355936,
9019 "start" : 843.2203389830509,
9020 "track" : "v0"
9021 },
9022 {
9023 "duration" : 2.135593220338933,
9024 "fadeIn" : 0,
9025 "fadeOut" : 0,
9026 "id" : "AC5A9D19-E998-4CC0-B033-5C9AF84326C4",
9027 "kind" : "audio",
9028 "linkId" : "FC57D67A-F7BF-448D-985C-05D71447DD0A",
9029 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
9030 "muted" : true,
9031 "newShot" : false,
9032 "speed" : 1,
9033 "srcIn" : 2646.1534165942526,
9034 "start" : 843.2203389830509,
9035 "track" : "v1"
9036 },
9037 {
9038 "duration" : 2.135593220338933,
9039 "fadeIn" : 0,
9040 "fadeOut" : 0,
9041 "id" : "BF2AE534-1A06-4009-B825-8C1570D790C7",
9042 "kind" : "audio",
9043 "linkId" : "FC57D67A-F7BF-448D-985C-05D71447DD0A",
9044 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
9045 "muted" : false,
9046 "newShot" : false,
9047 "speed" : 1,
9048 "srcIn" : 2646.2000928974835,
9049 "start" : 843.2203389830509,
9050 "track" : "v2"
9051 },
9052 {
9053 "duration" : 2.135593220338933,
9054 "fadeIn" : 0,
9055 "fadeOut" : 0,
9056 "id" : "10E9AD27-80E1-4F3C-BD87-414A1B6617A8",
9057 "kind" : "video",
9058 "linkId" : "FC57D67A-F7BF-448D-985C-05D71447DD0A",
9059 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
9060 "muted" : false,
9061 "newShot" : false,
9062 "speed" : 1,
9063 "srcIn" : 2646.0634857612554,
9064 "start" : 843.2203389830509,
9065 "track" : "v3"
9066 },
9067 {
9068 "duration" : 2.135593220338933,
9069 "fadeIn" : 0,
9070 "fadeOut" : 0,
9071 "id" : "3EE49ACC-C52A-4ADF-86BE-884CE4259D4B",
9072 "kind" : "video",
9073 "linkId" : "FC57D67A-F7BF-448D-985C-05D71447DD0A",
9074 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
9075 "muted" : false,
9076 "newShot" : false,
9077 "speed" : 1,
9078 "srcIn" : 2646.0634811772566,
9079 "start" : 843.2203389830509,
9080 "track" : "v4"
9081 },
9082 {
9083 "duration" : 2.1355932203390466,
9084 "fadeIn" : 0,
9085 "fadeOut" : 0,
9086 "id" : "6F6DB3B3-42CE-4046-9988-087B5847CE7F",
9087 "kind" : "video",
9088 "linkId" : "28EA7312-79F0-4C9C-A37D-04E32716FA29",
9089 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
9090 "muted" : false,
9091 "newShot" : false,
9092 "speed" : 1,
9093 "srcIn" : 2650.203389830509,
9094 "start" : 845.3559322033898,
9095 "track" : "v0"
9096 },
9097 {
9098 "duration" : 2.1355932203390466,
9099 "fadeIn" : 0,
9100 "fadeOut" : 0,
9101 "id" : "96066F14-B10E-4826-890D-95FE249BB166",
9102 "kind" : "audio",
9103 "linkId" : "28EA7312-79F0-4C9C-A37D-04E32716FA29",
9104 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
9105 "muted" : true,
9106 "newShot" : false,
9107 "speed" : 1,
9108 "srcIn" : 2650.119518289168,
9109 "start" : 845.3559322033898,
9110 "track" : "v1"
9111 },
9112 {
9113 "duration" : 2.1355932203390466,
9114 "fadeIn" : 0,
9115 "fadeOut" : 0,
9116 "id" : "B07978FC-00CF-41C2-8657-665D128435D0",
9117 "kind" : "audio",
9118 "linkId" : "28EA7312-79F0-4C9C-A37D-04E32716FA29",
9119 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
9120 "muted" : false,
9121 "newShot" : false,
9122 "speed" : 1,
9123 "srcIn" : 2650.166194592399,
9124 "start" : 845.3559322033898,
9125 "track" : "v2"
9126 },
9127 {
9128 "duration" : 2.1355932203390466,
9129 "fadeIn" : 0,
9130 "fadeOut" : 0,
9131 "id" : "4FAD2B83-A8E8-4692-9360-C2F908C32F76",
9132 "kind" : "video",
9133 "linkId" : "28EA7312-79F0-4C9C-A37D-04E32716FA29",
9134 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
9135 "muted" : false,
9136 "newShot" : false,
9137 "speed" : 1,
9138 "srcIn" : 2650.0295874561707,
9139 "start" : 845.3559322033898,
9140 "track" : "v3"
9141 },
9142 {
9143 "duration" : 2.1355932203390466,
9144 "fadeIn" : 0,
9145 "fadeOut" : 0,
9146 "id" : "DF197166-8983-45B6-A285-54D45DECCFFB",
9147 "kind" : "video",
9148 "linkId" : "28EA7312-79F0-4C9C-A37D-04E32716FA29",
9149 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
9150 "muted" : false,
9151 "newShot" : false,
9152 "speed" : 1,
9153 "srcIn" : 2650.029582872172,
9154 "start" : 845.3559322033898,
9155 "track" : "v4"
9156 },
9157 {
9158 "duration" : 0.7118644067796822,
9159 "fadeIn" : 0,
9160 "fadeOut" : 0,
9161 "id" : "A6D0B507-6A36-4A23-B415-3888A8D66CEE",
9162 "kind" : "video",
9163 "linkId" : "E3D0D877-F5B9-4B99-B94B-44E5E47BEAE8",
9164 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
9165 "muted" : false,
9166 "newShot" : false,
9167 "speed" : 1,
9168 "srcIn" : 2653.118644067797,
9169 "start" : 847.4915254237288,
9170 "track" : "v0"
9171 },
9172 {
9173 "duration" : 0.7118644067796822,
9174 "fadeIn" : 0,
9175 "fadeOut" : 0,
9176 "id" : "AEBE3D73-9EE9-42F3-80FF-AF4E272C5BF5",
9177 "kind" : "audio",
9178 "linkId" : "E3D0D877-F5B9-4B99-B94B-44E5E47BEAE8",
9179 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
9180 "muted" : true,
9181 "newShot" : false,
9182 "speed" : 1,
9183 "srcIn" : 2653.034772526456,
9184 "start" : 847.4915254237288,
9185 "track" : "v1"
9186 },
9187 {
9188 "duration" : 0.7118644067796822,
9189 "fadeIn" : 0,
9190 "fadeOut" : 0,
9191 "id" : "A3B22B00-BA4B-4A40-91A3-F3E3C884C9BA",
9192 "kind" : "audio",
9193 "linkId" : "E3D0D877-F5B9-4B99-B94B-44E5E47BEAE8",
9194 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
9195 "muted" : false,
9196 "newShot" : false,
9197 "speed" : 1,
9198 "srcIn" : 2653.081448829687,
9199 "start" : 847.4915254237288,
9200 "track" : "v2"
9201 },
9202 {
9203 "duration" : 0.7118644067796822,
9204 "fadeIn" : 0,
9205 "fadeOut" : 0,
9206 "id" : "7B3ADFE8-7F47-4800-B8D6-77B5B07AFA99",
9207 "kind" : "video",
9208 "linkId" : "E3D0D877-F5B9-4B99-B94B-44E5E47BEAE8",
9209 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
9210 "muted" : false,
9211 "newShot" : false,
9212 "speed" : 1,
9213 "srcIn" : 2652.944841693459,
9214 "start" : 847.4915254237288,
9215 "track" : "v3"
9216 },
9217 {
9218 "duration" : 0.7118644067796822,
9219 "fadeIn" : 0,
9220 "fadeOut" : 0,
9221 "id" : "BC37902D-B6DE-4EE5-9996-467DEC167330",
9222 "kind" : "video",
9223 "linkId" : "E3D0D877-F5B9-4B99-B94B-44E5E47BEAE8",
9224 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
9225 "muted" : false,
9226 "newShot" : false,
9227 "speed" : 1,
9228 "srcIn" : 2652.94483710946,
9229 "start" : 847.4915254237288,
9230 "track" : "v4"
9231 },
9232 {
9233 "duration" : 0.7796610169491487,
9234 "fadeIn" : 0,
9235 "fadeOut" : 0,
9236 "id" : "8C61A3D8-55F3-4CCD-A02E-859B57EDA9CD",
9237 "kind" : "video",
9238 "linkId" : "86F71C9D-4CC8-49AE-85D6-08C4B076CE87",
9239 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
9240 "muted" : false,
9241 "newShot" : false,
9242 "speed" : 1,
9243 "srcIn" : 2658.71186440678,
9244 "start" : 848.2033898305085,
9245 "track" : "v0"
9246 },
9247 {
9248 "duration" : 0.7796610169491487,
9249 "fadeIn" : 0,
9250 "fadeOut" : 0,
9251 "id" : "25E99D83-FDE9-4E70-BBD3-A76D726F2D15",
9252 "kind" : "audio",
9253 "linkId" : "86F71C9D-4CC8-49AE-85D6-08C4B076CE87",
9254 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
9255 "muted" : true,
9256 "newShot" : false,
9257 "speed" : 1,
9258 "srcIn" : 2658.627992865439,
9259 "start" : 848.2033898305085,
9260 "track" : "v1"
9261 },
9262 {
9263 "duration" : 0.7796610169491487,
9264 "fadeIn" : 0,
9265 "fadeOut" : 0,
9266 "id" : "5FD3B500-E4B2-4AE8-B37D-DE251B465DBD",
9267 "kind" : "audio",
9268 "linkId" : "86F71C9D-4CC8-49AE-85D6-08C4B076CE87",
9269 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
9270 "muted" : false,
9271 "newShot" : false,
9272 "speed" : 1,
9273 "srcIn" : 2658.67466916867,
9274 "start" : 848.2033898305085,
9275 "track" : "v2"
9276 },
9277 {
9278 "duration" : 0.7796610169491487,
9279 "fadeIn" : 0,
9280 "fadeOut" : 0,
9281 "id" : "7BE9FE0B-5C6E-49DC-ACD3-613EE443EF5B",
9282 "kind" : "video",
9283 "linkId" : "86F71C9D-4CC8-49AE-85D6-08C4B076CE87",
9284 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
9285 "muted" : false,
9286 "newShot" : false,
9287 "speed" : 1,
9288 "srcIn" : 2658.5380620324418,
9289 "start" : 848.2033898305085,
9290 "track" : "v3"
9291 },
9292 {
9293 "duration" : 0.7796610169491487,
9294 "fadeIn" : 0,
9295 "fadeOut" : 0,
9296 "id" : "E51F2531-CEDB-4175-A047-516CD3142C93",
9297 "kind" : "video",
9298 "linkId" : "86F71C9D-4CC8-49AE-85D6-08C4B076CE87",
9299 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
9300 "muted" : false,
9301 "newShot" : false,
9302 "speed" : 1,
9303 "srcIn" : 2658.538057448443,
9304 "start" : 848.2033898305085,
9305 "track" : "v4"
9306 },
9307 {
9308 "duration" : 4.881355932203405,
9309 "fadeIn" : 0,
9310 "fadeOut" : 0,
9311 "id" : "352DB16B-39D1-475A-8C95-A0D712C61DA1",
9312 "kind" : "video",
9313 "linkId" : "3EABBA0E-4C24-4221-9E58-79D35BC9B08D",
9314 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
9315 "muted" : false,
9316 "newShot" : false,
9317 "speed" : 1,
9318 "srcIn" : 2672.77966101695,
9319 "start" : 848.9830508474577,
9320 "track" : "v0"
9321 },
9322 {
9323 "duration" : 4.881355932203405,
9324 "fadeIn" : 0,
9325 "fadeOut" : 0,
9326 "id" : "8904F908-4ED1-49D6-A064-B85CD9585F94",
9327 "kind" : "audio",
9328 "linkId" : "3EABBA0E-4C24-4221-9E58-79D35BC9B08D",
9329 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
9330 "muted" : true,
9331 "newShot" : false,
9332 "speed" : 1,
9333 "srcIn" : 2672.6957894756088,
9334 "start" : 848.9830508474577,
9335 "track" : "v1"
9336 },
9337 {
9338 "duration" : 4.881355932203405,
9339 "fadeIn" : 0,
9340 "fadeOut" : 0,
9341 "id" : "F88FC5BF-C07B-4659-96CD-F0C6423F09A3",
9342 "kind" : "audio",
9343 "linkId" : "3EABBA0E-4C24-4221-9E58-79D35BC9B08D",
9344 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
9345 "muted" : false,
9346 "newShot" : false,
9347 "speed" : 1,
9348 "srcIn" : 2672.7424657788397,
9349 "start" : 848.9830508474577,
9350 "track" : "v2"
9351 },
9352 {
9353 "duration" : 4.881355932203405,
9354 "fadeIn" : 0,
9355 "fadeOut" : 0,
9356 "id" : "319CEC14-6215-4445-8F0D-91C308A3420E",
9357 "kind" : "video",
9358 "linkId" : "3EABBA0E-4C24-4221-9E58-79D35BC9B08D",
9359 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
9360 "muted" : false,
9361 "newShot" : false,
9362 "speed" : 1,
9363 "srcIn" : 2672.6058586426116,
9364 "start" : 848.9830508474577,
9365 "track" : "v3"
9366 },
9367 {
9368 "duration" : 4.881355932203405,
9369 "fadeIn" : 0,
9370 "fadeOut" : 0,
9371 "id" : "EE17ADAE-984B-467F-8219-EC6C5F5D962B",
9372 "kind" : "video",
9373 "linkId" : "3EABBA0E-4C24-4221-9E58-79D35BC9B08D",
9374 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
9375 "muted" : false,
9376 "newShot" : false,
9377 "speed" : 1,
9378 "srcIn" : 2672.6058540586127,
9379 "start" : 848.9830508474577,
9380 "track" : "v4"
9381 },
9382 {
9383 "duration" : 4.101694915254257,
9384 "fadeIn" : 0,
9385 "fadeOut" : 0,
9386 "id" : "FCB1D834-DEAA-473C-A554-9F80416158C2",
9387 "kind" : "video",
9388 "linkId" : "3B4E4A04-CB5C-4738-B65E-F7076495C9D8",
9389 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
9390 "muted" : false,
9391 "newShot" : false,
9392 "speed" : 1,
9393 "srcIn" : 2710.7118644067805,
9394 "start" : 853.8644067796611,
9395 "track" : "v0"
9396 },
9397 {
9398 "duration" : 4.101694915254257,
9399 "fadeIn" : 0,
9400 "fadeOut" : 0,
9401 "id" : "881E7DB1-B037-40A9-9296-A99F279D7B54",
9402 "kind" : "audio",
9403 "linkId" : "3B4E4A04-CB5C-4738-B65E-F7076495C9D8",
9404 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
9405 "muted" : true,
9406 "newShot" : false,
9407 "speed" : 1,
9408 "srcIn" : 2710.6279928654394,
9409 "start" : 853.8644067796611,
9410 "track" : "v1"
9411 },
9412 {
9413 "duration" : 4.101694915254257,
9414 "fadeIn" : 0,
9415 "fadeOut" : 0,
9416 "id" : "5D38E6BE-385D-45A3-9AF3-30FF2BB3F39B",
9417 "kind" : "audio",
9418 "linkId" : "3B4E4A04-CB5C-4738-B65E-F7076495C9D8",
9419 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
9420 "muted" : false,
9421 "newShot" : false,
9422 "speed" : 1,
9423 "srcIn" : 2710.6746691686703,
9424 "start" : 853.8644067796611,
9425 "track" : "v2"
9426 },
9427 {
9428 "duration" : 4.101694915254257,
9429 "fadeIn" : 0,
9430 "fadeOut" : 0,
9431 "id" : "7B349858-7AE2-48A3-991E-DB25F74D2807",
9432 "kind" : "video",
9433 "linkId" : "3B4E4A04-CB5C-4738-B65E-F7076495C9D8",
9434 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
9435 "muted" : false,
9436 "newShot" : false,
9437 "speed" : 1,
9438 "srcIn" : 2710.538062032442,
9439 "start" : 853.8644067796611,
9440 "track" : "v3"
9441 },
9442 {
9443 "duration" : 4.101694915254257,
9444 "fadeIn" : 0,
9445 "fadeOut" : 0,
9446 "id" : "58E4F08F-1403-43B7-B93B-C6BFA5127F8D",
9447 "kind" : "video",
9448 "linkId" : "3B4E4A04-CB5C-4738-B65E-F7076495C9D8",
9449 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
9450 "muted" : false,
9451 "newShot" : false,
9452 "speed" : 1,
9453 "srcIn" : 2710.5380574484434,
9454 "start" : 853.8644067796611,
9455 "track" : "v4"
9456 },
9457 {
9458 "duration" : 30.27118644067798,
9459 "fadeIn" : 0,
9460 "fadeOut" : 0,
9461 "id" : "52F2190F-1C89-44EA-94D3-8A7085B8172A",
9462 "kind" : "video",
9463 "linkId" : "AE414DA9-138E-4B31-BCEA-EBD522E81175",
9464 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
9465 "muted" : false,
9466 "newShot" : false,
9467 "speed" : 1,
9468 "srcIn" : 2721.322033898306,
9469 "start" : 857.9661016949152,
9470 "track" : "v0"
9471 },
9472 {
9473 "duration" : 30.27118644067798,
9474 "fadeIn" : 0,
9475 "fadeOut" : 0,
9476 "id" : "369AF7CA-F05E-4BAF-B4DA-92398E680470",
9477 "kind" : "audio",
9478 "linkId" : "AE414DA9-138E-4B31-BCEA-EBD522E81175",
9479 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
9480 "muted" : true,
9481 "newShot" : false,
9482 "speed" : 1,
9483 "srcIn" : 2721.238162356965,
9484 "start" : 857.9661016949152,
9485 "track" : "v1"
9486 },
9487 {
9488 "duration" : 30.27118644067798,
9489 "fadeIn" : 0,
9490 "fadeOut" : 0,
9491 "id" : "E0C2832B-D290-4F69-B311-6CCB13D81611",
9492 "kind" : "audio",
9493 "linkId" : "AE414DA9-138E-4B31-BCEA-EBD522E81175",
9494 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
9495 "muted" : false,
9496 "newShot" : false,
9497 "speed" : 1,
9498 "srcIn" : 2721.284838660196,
9499 "start" : 857.9661016949152,
9500 "track" : "v2"
9501 },
9502 {
9503 "duration" : 30.27118644067798,
9504 "fadeIn" : 0,
9505 "fadeOut" : 0,
9506 "id" : "435A5598-D5FB-4880-AF72-ACF1883BA634",
9507 "kind" : "video",
9508 "linkId" : "AE414DA9-138E-4B31-BCEA-EBD522E81175",
9509 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
9510 "muted" : false,
9511 "newShot" : false,
9512 "speed" : 1,
9513 "srcIn" : 2721.1482315239678,
9514 "start" : 857.9661016949152,
9515 "track" : "v3"
9516 },
9517 {
9518 "duration" : 30.27118644067798,
9519 "fadeIn" : 0,
9520 "fadeOut" : 0,
9521 "id" : "E1A300BD-01C6-44F8-A372-7EDEAAA3407A",
9522 "kind" : "video",
9523 "linkId" : "AE414DA9-138E-4B31-BCEA-EBD522E81175",
9524 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
9525 "muted" : false,
9526 "newShot" : false,
9527 "speed" : 1,
9528 "srcIn" : 2721.148226939969,
9529 "start" : 857.9661016949152,
9530 "track" : "v4"
9531 },
9532 {
9533 "duration" : 2.8135593220339388,
9534 "fadeIn" : 0,
9535 "fadeOut" : 0,
9536 "id" : "F79BA8C9-1EEA-4EAD-9408-BEB36A06F6EC",
9537 "kind" : "video",
9538 "linkId" : "4045FA44-3B4D-4BFC-A67F-515E3C553BA0",
9539 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
9540 "muted" : false,
9541 "newShot" : false,
9542 "speed" : 1,
9543 "srcIn" : 2760.915254237289,
9544 "start" : 888.2372881355932,
9545 "track" : "v0"
9546 },
9547 {
9548 "duration" : 2.8135593220339388,
9549 "fadeIn" : 0,
9550 "fadeOut" : 0,
9551 "id" : "E4CC2092-0AFA-454F-A056-DC1D4B96EAE3",
9552 "kind" : "audio",
9553 "linkId" : "4045FA44-3B4D-4BFC-A67F-515E3C553BA0",
9554 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
9555 "muted" : true,
9556 "newShot" : false,
9557 "speed" : 1,
9558 "srcIn" : 2760.831382695948,
9559 "start" : 888.2372881355932,
9560 "track" : "v1"
9561 },
9562 {
9563 "duration" : 2.8135593220339388,
9564 "fadeIn" : 0,
9565 "fadeOut" : 0,
9566 "id" : "C6569D08-E232-40FD-AD5E-38A850503FDF",
9567 "kind" : "audio",
9568 "linkId" : "4045FA44-3B4D-4BFC-A67F-515E3C553BA0",
9569 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
9570 "muted" : false,
9571 "newShot" : false,
9572 "speed" : 1,
9573 "srcIn" : 2760.878058999179,
9574 "start" : 888.2372881355932,
9575 "track" : "v2"
9576 },
9577 {
9578 "duration" : 2.8135593220339388,
9579 "fadeIn" : 0,
9580 "fadeOut" : 0,
9581 "id" : "5D424C43-D60A-4A52-A33B-BBEB380053F2",
9582 "kind" : "video",
9583 "linkId" : "4045FA44-3B4D-4BFC-A67F-515E3C553BA0",
9584 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
9585 "muted" : false,
9586 "newShot" : false,
9587 "speed" : 1,
9588 "srcIn" : 2760.7414518629507,
9589 "start" : 888.2372881355932,
9590 "track" : "v3"
9591 },
9592 {
9593 "duration" : 2.8135593220339388,
9594 "fadeIn" : 0,
9595 "fadeOut" : 0,
9596 "id" : "C9ECC1B1-1D5A-4D84-9012-9864635A322A",
9597 "kind" : "video",
9598 "linkId" : "4045FA44-3B4D-4BFC-A67F-515E3C553BA0",
9599 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
9600 "muted" : false,
9601 "newShot" : false,
9602 "speed" : 1,
9603 "srcIn" : 2760.741447278952,
9604 "start" : 888.2372881355932,
9605 "track" : "v4"
9606 },
9607 {
9608 "duration" : 5.288135593220318,
9609 "fadeIn" : 0,
9610 "fadeOut" : 0,
9611 "id" : "1B56AEBA-0FE3-40D6-A485-407844047F55",
9612 "kind" : "video",
9613 "linkId" : "F572F9CE-FD52-495A-A477-9D6D62AC1086",
9614 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
9615 "muted" : false,
9616 "newShot" : false,
9617 "speed" : 1,
9618 "srcIn" : 2783.186440677967,
9619 "start" : 891.0508474576271,
9620 "track" : "v0"
9621 },
9622 {
9623 "duration" : 5.288135593220318,
9624 "fadeIn" : 0,
9625 "fadeOut" : 0,
9626 "id" : "47F3B364-BE6C-473E-85C4-AD4A9DADF041",
9627 "kind" : "audio",
9628 "linkId" : "F572F9CE-FD52-495A-A477-9D6D62AC1086",
9629 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
9630 "muted" : true,
9631 "newShot" : false,
9632 "speed" : 1,
9633 "srcIn" : 2783.102569136626,
9634 "start" : 891.0508474576271,
9635 "track" : "v1"
9636 },
9637 {
9638 "duration" : 5.288135593220318,
9639 "fadeIn" : 0,
9640 "fadeOut" : 0,
9641 "id" : "E99A647D-A1D7-4937-883D-517D2AB47C45",
9642 "kind" : "audio",
9643 "linkId" : "F572F9CE-FD52-495A-A477-9D6D62AC1086",
9644 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
9645 "muted" : false,
9646 "newShot" : false,
9647 "speed" : 1,
9648 "srcIn" : 2783.1492454398567,
9649 "start" : 891.0508474576271,
9650 "track" : "v2"
9651 },
9652 {
9653 "duration" : 5.288135593220318,
9654 "fadeIn" : 0,
9655 "fadeOut" : 0,
9656 "id" : "68CBC79C-1130-4411-9396-AF8D0501E229",
9657 "kind" : "video",
9658 "linkId" : "F572F9CE-FD52-495A-A477-9D6D62AC1086",
9659 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
9660 "muted" : false,
9661 "newShot" : false,
9662 "speed" : 1,
9663 "srcIn" : 2783.0126383036286,
9664 "start" : 891.0508474576271,
9665 "track" : "v3"
9666 },
9667 {
9668 "duration" : 5.288135593220318,
9669 "fadeIn" : 0,
9670 "fadeOut" : 0,
9671 "id" : "B4AEE7C6-2A5A-4B03-B760-5FB897266EB9",
9672 "kind" : "video",
9673 "linkId" : "F572F9CE-FD52-495A-A477-9D6D62AC1086",
9674 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
9675 "muted" : false,
9676 "newShot" : false,
9677 "speed" : 1,
9678 "srcIn" : 2783.01263371963,
9679 "start" : 891.0508474576271,
9680 "track" : "v4"
9681 },
9682 {
9683 "duration" : 25.96610169491521,
9684 "fadeIn" : 0,
9685 "fadeOut" : 0,
9686 "id" : "3A767D55-B04B-4029-9717-1C032BD7E834",
9687 "kind" : "video",
9688 "linkId" : "B52B0E53-2FA8-47CD-B126-B2D828808856",
9689 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
9690 "muted" : false,
9691 "newShot" : false,
9692 "speed" : 1,
9693 "srcIn" : 2807.152542372882,
9694 "start" : 896.3389830508474,
9695 "track" : "v0"
9696 },
9697 {
9698 "duration" : 25.96610169491521,
9699 "fadeIn" : 0,
9700 "fadeOut" : 0,
9701 "id" : "CF8D639C-6FA9-4562-BF86-A28192C1D6C3",
9702 "kind" : "audio",
9703 "linkId" : "B52B0E53-2FA8-47CD-B126-B2D828808856",
9704 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
9705 "muted" : true,
9706 "newShot" : false,
9707 "speed" : 1,
9708 "srcIn" : 2807.068670831541,
9709 "start" : 896.3389830508474,
9710 "track" : "v1"
9711 },
9712 {
9713 "duration" : 25.96610169491521,
9714 "fadeIn" : 0,
9715 "fadeOut" : 0,
9716 "id" : "304BEE54-6B93-44B2-BF5C-F5E0F8864DBB",
9717 "kind" : "audio",
9718 "linkId" : "B52B0E53-2FA8-47CD-B126-B2D828808856",
9719 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
9720 "muted" : false,
9721 "newShot" : false,
9722 "speed" : 1,
9723 "srcIn" : 2807.115347134772,
9724 "start" : 896.3389830508474,
9725 "track" : "v2"
9726 },
9727 {
9728 "duration" : 25.96610169491521,
9729 "fadeIn" : 0,
9730 "fadeOut" : 0,
9731 "id" : "7DAAE3B6-0D4A-4029-9891-8A2D9DD41EB6",
9732 "kind" : "video",
9733 "linkId" : "B52B0E53-2FA8-47CD-B126-B2D828808856",
9734 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
9735 "muted" : false,
9736 "newShot" : false,
9737 "speed" : 1,
9738 "srcIn" : 2806.978739998544,
9739 "start" : 896.3389830508474,
9740 "track" : "v3"
9741 },
9742 {
9743 "duration" : 25.96610169491521,
9744 "fadeIn" : 0,
9745 "fadeOut" : 0,
9746 "id" : "A7EC127B-861B-436B-973A-566A7282AB56",
9747 "kind" : "video",
9748 "linkId" : "B52B0E53-2FA8-47CD-B126-B2D828808856",
9749 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
9750 "muted" : false,
9751 "newShot" : false,
9752 "speed" : 1,
9753 "srcIn" : 2806.978735414545,
9754 "start" : 896.3389830508474,
9755 "track" : "v4"
9756 },
9757 {
9758 "duration" : 1.9322033898305335,
9759 "fadeIn" : 0,
9760 "fadeOut" : 0,
9761 "id" : "B9DADEF6-8878-42FB-BD66-05228CB67D3F",
9762 "kind" : "video",
9763 "linkId" : "6C868D02-D8F5-470C-891B-B0D8A8F52B42",
9764 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
9765 "muted" : false,
9766 "newShot" : false,
9767 "speed" : 1,
9768 "srcIn" : 2833.1186440677975,
9769 "start" : 922.3050847457627,
9770 "track" : "v0"
9771 },
9772 {
9773 "duration" : 1.9322033898305335,
9774 "fadeIn" : 0,
9775 "fadeOut" : 0,
9776 "id" : "43CC1239-2AD4-4790-8627-80441483FA43",
9777 "kind" : "audio",
9778 "linkId" : "6C868D02-D8F5-470C-891B-B0D8A8F52B42",
9779 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
9780 "muted" : true,
9781 "newShot" : false,
9782 "speed" : 1,
9783 "srcIn" : 2833.0347725264564,
9784 "start" : 922.3050847457627,
9785 "track" : "v1"
9786 },
9787 {
9788 "duration" : 1.9322033898305335,
9789 "fadeIn" : 0,
9790 "fadeOut" : 0,
9791 "id" : "3E10D3AF-E56C-4B77-B15A-7A6A433E78B5",
9792 "kind" : "audio",
9793 "linkId" : "6C868D02-D8F5-470C-891B-B0D8A8F52B42",
9794 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
9795 "muted" : false,
9796 "newShot" : false,
9797 "speed" : 1,
9798 "srcIn" : 2833.0814488296874,
9799 "start" : 922.3050847457627,
9800 "track" : "v2"
9801 },
9802 {
9803 "duration" : 1.9322033898305335,
9804 "fadeIn" : 0,
9805 "fadeOut" : 0,
9806 "id" : "0AE9423C-B5CA-40D7-A25F-1D5950077D5C",
9807 "kind" : "video",
9808 "linkId" : "6C868D02-D8F5-470C-891B-B0D8A8F52B42",
9809 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
9810 "muted" : false,
9811 "newShot" : false,
9812 "speed" : 1,
9813 "srcIn" : 2832.9448416934592,
9814 "start" : 922.3050847457627,
9815 "track" : "v3"
9816 },
9817 {
9818 "duration" : 1.9322033898305335,
9819 "fadeIn" : 0,
9820 "fadeOut" : 0,
9821 "id" : "FA6C223A-7F5A-4150-A5F4-D2B4B445D9C0",
9822 "kind" : "video",
9823 "linkId" : "6C868D02-D8F5-470C-891B-B0D8A8F52B42",
9824 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
9825 "muted" : false,
9826 "newShot" : false,
9827 "speed" : 1,
9828 "srcIn" : 2832.9448371094604,
9829 "start" : 922.3050847457627,
9830 "track" : "v4"
9831 },
9832 {
9833 "duration" : 7.186440677966175,
9834 "fadeIn" : 0,
9835 "fadeOut" : 0,
9836 "id" : "934F79A8-575E-43F0-AD6C-F24F5199B7CB",
9837 "kind" : "video",
9838 "linkId" : "851CBD5D-70B1-429E-9236-7ECFEDAAA252",
9839 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
9840 "muted" : false,
9841 "newShot" : false,
9842 "speed" : 1,
9843 "srcIn" : 2838.7118644067805,
9844 "start" : 924.2372881355932,
9845 "track" : "v0"
9846 },
9847 {
9848 "duration" : 7.186440677966175,
9849 "fadeIn" : 0,
9850 "fadeOut" : 0,
9851 "id" : "A6FAE2FB-6564-42B5-ACC5-56029B3331BE",
9852 "kind" : "audio",
9853 "linkId" : "851CBD5D-70B1-429E-9236-7ECFEDAAA252",
9854 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
9855 "muted" : true,
9856 "newShot" : false,
9857 "speed" : 1,
9858 "srcIn" : 2838.6279928654394,
9859 "start" : 924.2372881355932,
9860 "track" : "v1"
9861 },
9862 {
9863 "duration" : 7.186440677966175,
9864 "fadeIn" : 0,
9865 "fadeOut" : 0,
9866 "id" : "EE147F25-D8F4-43EB-B6A4-DE05CB21BB12",
9867 "kind" : "audio",
9868 "linkId" : "851CBD5D-70B1-429E-9236-7ECFEDAAA252",
9869 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
9870 "muted" : false,
9871 "newShot" : false,
9872 "speed" : 1,
9873 "srcIn" : 2838.6746691686703,
9874 "start" : 924.2372881355932,
9875 "track" : "v2"
9876 },
9877 {
9878 "duration" : 7.186440677966175,
9879 "fadeIn" : 0,
9880 "fadeOut" : 0,
9881 "id" : "4890D002-161D-4D3E-A662-D441F2232FFF",
9882 "kind" : "video",
9883 "linkId" : "851CBD5D-70B1-429E-9236-7ECFEDAAA252",
9884 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
9885 "muted" : false,
9886 "newShot" : false,
9887 "speed" : 1,
9888 "srcIn" : 2838.538062032442,
9889 "start" : 924.2372881355932,
9890 "track" : "v3"
9891 },
9892 {
9893 "duration" : 7.186440677966175,
9894 "fadeIn" : 0,
9895 "fadeOut" : 0,
9896 "id" : "9BAE233F-FFA4-4044-A029-3B4EC16018C3",
9897 "kind" : "video",
9898 "linkId" : "851CBD5D-70B1-429E-9236-7ECFEDAAA252",
9899 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
9900 "muted" : false,
9901 "newShot" : false,
9902 "speed" : 1,
9903 "srcIn" : 2838.5380574484434,
9904 "start" : 924.2372881355932,
9905 "track" : "v4"
9906 },
9907 {
9908 "duration" : 3.830508474576277,
9909 "fadeIn" : 0,
9910 "fadeOut" : 0,
9911 "id" : "FB84EAA1-5B89-4489-89B4-D080098A1CD8",
9912 "kind" : "video",
9913 "linkId" : "6206B630-2FC1-4084-9937-5E08F99F118D",
9914 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
9915 "muted" : false,
9916 "newShot" : false,
9917 "speed" : 1,
9918 "srcIn" : 2890.5084745762715,
9919 "start" : 931.4237288135594,
9920 "track" : "v0"
9921 },
9922 {
9923 "duration" : 3.830508474576277,
9924 "fadeIn" : 0,
9925 "fadeOut" : 0,
9926 "id" : "EE6692DD-2585-4607-A46A-C6A25FB86B72",
9927 "kind" : "audio",
9928 "linkId" : "6206B630-2FC1-4084-9937-5E08F99F118D",
9929 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
9930 "muted" : true,
9931 "newShot" : false,
9932 "speed" : 1,
9933 "srcIn" : 2890.4246030349304,
9934 "start" : 931.4237288135594,
9935 "track" : "v1"
9936 },
9937 {
9938 "duration" : 3.830508474576277,
9939 "fadeIn" : 0,
9940 "fadeOut" : 0,
9941 "id" : "78A13F6F-DCA5-491A-8B52-0FC2409760AB",
9942 "kind" : "audio",
9943 "linkId" : "6206B630-2FC1-4084-9937-5E08F99F118D",
9944 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
9945 "muted" : false,
9946 "newShot" : false,
9947 "speed" : 1,
9948 "srcIn" : 2890.4712793381614,
9949 "start" : 931.4237288135594,
9950 "track" : "v2"
9951 },
9952 {
9953 "duration" : 3.830508474576277,
9954 "fadeIn" : 0,
9955 "fadeOut" : 0,
9956 "id" : "629569A0-6C4A-466A-AFA1-918C22E2E018",
9957 "kind" : "video",
9958 "linkId" : "6206B630-2FC1-4084-9937-5E08F99F118D",
9959 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
9960 "muted" : false,
9961 "newShot" : false,
9962 "speed" : 1,
9963 "srcIn" : 2890.3346722019332,
9964 "start" : 931.4237288135594,
9965 "track" : "v3"
9966 },
9967 {
9968 "duration" : 3.830508474576277,
9969 "fadeIn" : 0,
9970 "fadeOut" : 0,
9971 "id" : "55E9F328-E350-4B59-ACEA-6C4EF5E5A345",
9972 "kind" : "video",
9973 "linkId" : "6206B630-2FC1-4084-9937-5E08F99F118D",
9974 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
9975 "muted" : false,
9976 "newShot" : false,
9977 "speed" : 1,
9978 "srcIn" : 2890.3346676179344,
9979 "start" : 931.4237288135594,
9980 "track" : "v4"
9981 },
9982 {
9983 "duration" : 3.016949152542338,
9984 "fadeIn" : 0,
9985 "fadeOut" : 0,
9986 "id" : "61D97AD3-FA77-4D5E-85F2-0D8E088424D8",
9987 "kind" : "video",
9988 "linkId" : "03409808-1CF1-4E22-8CFC-D7F337CA20C0",
9989 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
9990 "muted" : false,
9991 "newShot" : false,
9992 "speed" : 1,
9993 "srcIn" : 2897.593220338983,
9994 "start" : 935.2542372881356,
9995 "track" : "v0"
9996 },
9997 {
9998 "duration" : 3.016949152542338,
9999 "fadeIn" : 0,
10000 "fadeOut" : 0,
10001 "id" : "A4B63EE7-142A-4568-B3A3-9BD1DFE06CE5",
10002 "kind" : "audio",
10003 "linkId" : "03409808-1CF1-4E22-8CFC-D7F337CA20C0",
10004 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
10005 "muted" : true,
10006 "newShot" : false,
10007 "speed" : 1,
10008 "srcIn" : 2897.509348797642,
10009 "start" : 935.2542372881356,
10010 "track" : "v1"
10011 },
10012 {
10013 "duration" : 3.016949152542338,
10014 "fadeIn" : 0,
10015 "fadeOut" : 0,
10016 "id" : "2195C3FF-C478-48A3-B480-A8D661ECF7EF",
10017 "kind" : "audio",
10018 "linkId" : "03409808-1CF1-4E22-8CFC-D7F337CA20C0",
10019 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
10020 "muted" : false,
10021 "newShot" : false,
10022 "speed" : 1,
10023 "srcIn" : 2897.556025100873,
10024 "start" : 935.2542372881356,
10025 "track" : "v2"
10026 },
10027 {
10028 "duration" : 3.016949152542338,
10029 "fadeIn" : 0,
10030 "fadeOut" : 0,
10031 "id" : "12215B20-BCE9-4ED2-BEC6-1EF6791F42B1",
10032 "kind" : "video",
10033 "linkId" : "03409808-1CF1-4E22-8CFC-D7F337CA20C0",
10034 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
10035 "muted" : false,
10036 "newShot" : false,
10037 "speed" : 1,
10038 "srcIn" : 2897.4194179646447,
10039 "start" : 935.2542372881356,
10040 "track" : "v3"
10041 },
10042 {
10043 "duration" : 3.016949152542338,
10044 "fadeIn" : 0,
10045 "fadeOut" : 0,
10046 "id" : "416FCED0-3BEE-4052-95C4-0D4395DF944A",
10047 "kind" : "video",
10048 "linkId" : "03409808-1CF1-4E22-8CFC-D7F337CA20C0",
10049 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
10050 "muted" : false,
10051 "newShot" : false,
10052 "speed" : 1,
10053 "srcIn" : 2897.419413380646,
10054 "start" : 935.2542372881356,
10055 "track" : "v4"
10056 },
10057 {
10058 "duration" : 0.8135593220338251,
10059 "fadeIn" : 0,
10060 "fadeOut" : 0,
10061 "id" : "3D695665-26AC-4ECE-B055-5ED89B2AEF2E",
10062 "kind" : "video",
10063 "linkId" : "D7000904-0663-4407-824B-32447EFF33F6",
10064 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
10065 "muted" : false,
10066 "newShot" : false,
10067 "speed" : 1,
10068 "srcIn" : 2904.5423728813553,
10069 "start" : 938.271186440678,
10070 "track" : "v0"
10071 },
10072 {
10073 "duration" : 0.8135593220338251,
10074 "fadeIn" : 0,
10075 "fadeOut" : 0,
10076 "id" : "1895810B-430E-4DE6-8E5B-653139F5FBEE",
10077 "kind" : "audio",
10078 "linkId" : "D7000904-0663-4407-824B-32447EFF33F6",
10079 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
10080 "muted" : true,
10081 "newShot" : false,
10082 "speed" : 1,
10083 "srcIn" : 2904.458501340014,
10084 "start" : 938.271186440678,
10085 "track" : "v1"
10086 },
10087 {
10088 "duration" : 0.8135593220338251,
10089 "fadeIn" : 0,
10090 "fadeOut" : 0,
10091 "id" : "0E102FE5-7926-4A40-9B94-CF405C37EB75",
10092 "kind" : "audio",
10093 "linkId" : "D7000904-0663-4407-824B-32447EFF33F6",
10094 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
10095 "muted" : false,
10096 "newShot" : false,
10097 "speed" : 1,
10098 "srcIn" : 2904.505177643245,
10099 "start" : 938.271186440678,
10100 "track" : "v2"
10101 },
10102 {
10103 "duration" : 0.8135593220338251,
10104 "fadeIn" : 0,
10105 "fadeOut" : 0,
10106 "id" : "222B3055-014A-4379-98CD-69EC43A35470",
10107 "kind" : "video",
10108 "linkId" : "D7000904-0663-4407-824B-32447EFF33F6",
10109 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
10110 "muted" : false,
10111 "newShot" : false,
10112 "speed" : 1,
10113 "srcIn" : 2904.368570507017,
10114 "start" : 938.271186440678,
10115 "track" : "v3"
10116 },
10117 {
10118 "duration" : 0.8135593220338251,
10119 "fadeIn" : 0,
10120 "fadeOut" : 0,
10121 "id" : "28CA102D-CDC8-46C5-988E-86F0EEF5EEDC",
10122 "kind" : "video",
10123 "linkId" : "D7000904-0663-4407-824B-32447EFF33F6",
10124 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
10125 "muted" : false,
10126 "newShot" : false,
10127 "speed" : 1,
10128 "srcIn" : 2904.368565923018,
10129 "start" : 938.271186440678,
10130 "track" : "v4"
10131 },
10132 {
10133 "duration" : 16.169491525423723,
10134 "fadeIn" : 0,
10135 "fadeOut" : 0,
10136 "id" : "1BBD2846-8898-43ED-B9EF-51ABB977D172",
10137 "kind" : "video",
10138 "linkId" : "441E27DB-C392-40BA-85B8-B3F421EF14E8",
10139 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
10140 "muted" : false,
10141 "newShot" : false,
10142 "speed" : 1,
10143 "srcIn" : 2905.3559322033893,
10144 "start" : 939.0847457627119,
10145 "track" : "v0"
10146 },
10147 {
10148 "duration" : 16.169491525423723,
10149 "fadeIn" : 0,
10150 "fadeOut" : 0,
10151 "id" : "0238A063-2A08-4FDB-920C-7372B455BCB8",
10152 "kind" : "audio",
10153 "linkId" : "441E27DB-C392-40BA-85B8-B3F421EF14E8",
10154 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
10155 "muted" : true,
10156 "newShot" : false,
10157 "speed" : 1,
10158 "srcIn" : 2905.2720606620483,
10159 "start" : 939.0847457627119,
10160 "track" : "v1"
10161 },
10162 {
10163 "duration" : 16.169491525423723,
10164 "fadeIn" : 0,
10165 "fadeOut" : 0,
10166 "id" : "CAF3113A-611A-4A6B-9A03-3539D6A0E4B1",
10167 "kind" : "audio",
10168 "linkId" : "441E27DB-C392-40BA-85B8-B3F421EF14E8",
10169 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
10170 "muted" : false,
10171 "newShot" : false,
10172 "speed" : 1,
10173 "srcIn" : 2905.318736965279,
10174 "start" : 939.0847457627119,
10175 "track" : "v2"
10176 },
10177 {
10178 "duration" : 16.169491525423723,
10179 "fadeIn" : 0,
10180 "fadeOut" : 0,
10181 "id" : "19424805-E973-46BC-BD0D-3547754230B4",
10182 "kind" : "video",
10183 "linkId" : "441E27DB-C392-40BA-85B8-B3F421EF14E8",
10184 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
10185 "muted" : false,
10186 "newShot" : false,
10187 "speed" : 1,
10188 "srcIn" : 2905.182129829051,
10189 "start" : 939.0847457627119,
10190 "track" : "v3"
10191 },
10192 {
10193 "duration" : 16.169491525423723,
10194 "fadeIn" : 0,
10195 "fadeOut" : 0,
10196 "id" : "D38B18BD-6C89-4507-A1EF-9B817B8E10CA",
10197 "kind" : "video",
10198 "linkId" : "441E27DB-C392-40BA-85B8-B3F421EF14E8",
10199 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
10200 "muted" : false,
10201 "newShot" : false,
10202 "speed" : 1,
10203 "srcIn" : 2905.1821252450522,
10204 "start" : 939.0847457627119,
10205 "track" : "v4"
10206 },
10207 {
10208 "duration" : 32.4406779661017,
10209 "fadeIn" : 0,
10210 "fadeOut" : 0,
10211 "id" : "92828BED-54D1-43DA-ADCC-A2784A7E60A8",
10212 "kind" : "video",
10213 "linkId" : "C90940D8-882F-4CBD-839A-3F097CE89ED2",
10214 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
10215 "muted" : false,
10216 "newShot" : false,
10217 "speed" : 1,
10218 "srcIn" : 2950.3389830508468,
10219 "start" : 955.2542372881356,
10220 "track" : "v0"
10221 },
10222 {
10223 "duration" : 32.4406779661017,
10224 "fadeIn" : 0,
10225 "fadeOut" : 0,
10226 "id" : "64CCF21E-AA71-4C5F-9CB3-EAE93F031C97",
10227 "kind" : "audio",
10228 "linkId" : "C90940D8-882F-4CBD-839A-3F097CE89ED2",
10229 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
10230 "muted" : true,
10231 "newShot" : false,
10232 "speed" : 1,
10233 "srcIn" : 2950.2551115095057,
10234 "start" : 955.2542372881356,
10235 "track" : "v1"
10236 },
10237 {
10238 "duration" : 32.4406779661017,
10239 "fadeIn" : 0,
10240 "fadeOut" : 0,
10241 "id" : "0EF2F1D8-B27D-425B-A77E-024D9E8ED834",
10242 "kind" : "audio",
10243 "linkId" : "C90940D8-882F-4CBD-839A-3F097CE89ED2",
10244 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
10245 "muted" : false,
10246 "newShot" : false,
10247 "speed" : 1,
10248 "srcIn" : 2950.3017878127366,
10249 "start" : 955.2542372881356,
10250 "track" : "v2"
10251 },
10252 {
10253 "duration" : 32.4406779661017,
10254 "fadeIn" : 0,
10255 "fadeOut" : 0,
10256 "id" : "7F966B3B-7499-46E3-A145-F4F6CB9899E5",
10257 "kind" : "video",
10258 "linkId" : "C90940D8-882F-4CBD-839A-3F097CE89ED2",
10259 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
10260 "muted" : false,
10261 "newShot" : false,
10262 "speed" : 1,
10263 "srcIn" : 2950.1651806765085,
10264 "start" : 955.2542372881356,
10265 "track" : "v3"
10266 },
10267 {
10268 "duration" : 32.4406779661017,
10269 "fadeIn" : 0,
10270 "fadeOut" : 0,
10271 "id" : "869C0AAC-694F-4A83-ACBD-BA02B2F1EBCA",
10272 "kind" : "video",
10273 "linkId" : "C90940D8-882F-4CBD-839A-3F097CE89ED2",
10274 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
10275 "muted" : false,
10276 "newShot" : false,
10277 "speed" : 1,
10278 "srcIn" : 2950.1651760925097,
10279 "start" : 955.2542372881356,
10280 "track" : "v4"
10281 },
10282 {
10283 "duration" : 2.5762711864406356,
10284 "fadeIn" : 0,
10285 "fadeOut" : 0,
10286 "id" : "25EDDE61-86BB-4F70-A496-23BF74AE9006",
10287 "kind" : "video",
10288 "linkId" : "9D7E5089-781D-46B7-83D2-8B95043855FA",
10289 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
10290 "muted" : false,
10291 "newShot" : false,
10292 "speed" : 1,
10293 "srcIn" : 2983.661016949152,
10294 "start" : 987.6949152542373,
10295 "track" : "v0"
10296 },
10297 {
10298 "duration" : 2.5762711864406356,
10299 "fadeIn" : 0,
10300 "fadeOut" : 0,
10301 "id" : "AAAAE9EC-5D0B-4491-B3AE-40D47947A105",
10302 "kind" : "audio",
10303 "linkId" : "9D7E5089-781D-46B7-83D2-8B95043855FA",
10304 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
10305 "muted" : true,
10306 "newShot" : false,
10307 "speed" : 1,
10308 "srcIn" : 2983.577145407811,
10309 "start" : 987.6949152542373,
10310 "track" : "v1"
10311 },
10312 {
10313 "duration" : 2.5762711864406356,
10314 "fadeIn" : 0,
10315 "fadeOut" : 0,
10316 "id" : "A75BBCB8-738D-4750-B235-F5EC59113946",
10317 "kind" : "audio",
10318 "linkId" : "9D7E5089-781D-46B7-83D2-8B95043855FA",
10319 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
10320 "muted" : false,
10321 "newShot" : false,
10322 "speed" : 1,
10323 "srcIn" : 2983.6238217110417,
10324 "start" : 987.6949152542373,
10325 "track" : "v2"
10326 },
10327 {
10328 "duration" : 2.5762711864406356,
10329 "fadeIn" : 0,
10330 "fadeOut" : 0,
10331 "id" : "71F23B1C-6343-4637-9DFC-DF10EEE27AD4",
10332 "kind" : "video",
10333 "linkId" : "9D7E5089-781D-46B7-83D2-8B95043855FA",
10334 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
10335 "muted" : false,
10336 "newShot" : false,
10337 "speed" : 1,
10338 "srcIn" : 2983.4872145748136,
10339 "start" : 987.6949152542373,
10340 "track" : "v3"
10341 },
10342 {
10343 "duration" : 2.5762711864406356,
10344 "fadeIn" : 0,
10345 "fadeOut" : 0,
10346 "id" : "BFF6C236-F0FD-45E2-B714-265E9B8F2102",
10347 "kind" : "video",
10348 "linkId" : "9D7E5089-781D-46B7-83D2-8B95043855FA",
10349 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
10350 "muted" : false,
10351 "newShot" : false,
10352 "speed" : 1,
10353 "srcIn" : 2983.487209990815,
10354 "start" : 987.6949152542373,
10355 "track" : "v4"
10356 },
10357 {
10358 "duration" : 14.101694915254257,
10359 "fadeIn" : 0,
10360 "fadeOut" : 0,
10361 "id" : "2B6D6836-A007-4343-9775-70DD28CB6EB9",
10362 "kind" : "video",
10363 "linkId" : "EFD99B70-8810-42EC-8F2B-5AA76217327E",
10364 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
10365 "muted" : false,
10366 "newShot" : false,
10367 "speed" : 1,
10368 "srcIn" : 2986.542372881355,
10369 "start" : 990.271186440678,
10370 "track" : "v0"
10371 },
10372 {
10373 "duration" : 14.101694915254257,
10374 "fadeIn" : 0,
10375 "fadeOut" : 0,
10376 "id" : "7E48882C-AD53-4651-90D8-9CBDFEF95F0C",
10377 "kind" : "audio",
10378 "linkId" : "EFD99B70-8810-42EC-8F2B-5AA76217327E",
10379 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
10380 "muted" : true,
10381 "newShot" : false,
10382 "speed" : 1,
10383 "srcIn" : 2986.4585013400138,
10384 "start" : 990.271186440678,
10385 "track" : "v1"
10386 },
10387 {
10388 "duration" : 14.101694915254257,
10389 "fadeIn" : 0,
10390 "fadeOut" : 0,
10391 "id" : "BA449FE2-AFB9-4E77-8799-8FE2429251A7",
10392 "kind" : "audio",
10393 "linkId" : "EFD99B70-8810-42EC-8F2B-5AA76217327E",
10394 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
10395 "muted" : false,
10396 "newShot" : false,
10397 "speed" : 1,
10398 "srcIn" : 2986.5051776432447,
10399 "start" : 990.271186440678,
10400 "track" : "v2"
10401 },
10402 {
10403 "duration" : 14.101694915254257,
10404 "fadeIn" : 0,
10405 "fadeOut" : 0,
10406 "id" : "A3C307CE-4B58-4DB3-B763-3452763F1277",
10407 "kind" : "video",
10408 "linkId" : "EFD99B70-8810-42EC-8F2B-5AA76217327E",
10409 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
10410 "muted" : false,
10411 "newShot" : false,
10412 "speed" : 1,
10413 "srcIn" : 2986.3685705070166,
10414 "start" : 990.271186440678,
10415 "track" : "v3"
10416 },
10417 {
10418 "duration" : 14.101694915254257,
10419 "fadeIn" : 0,
10420 "fadeOut" : 0,
10421 "id" : "322BFB74-8CE6-4C2F-950C-898A113AB445",
10422 "kind" : "video",
10423 "linkId" : "EFD99B70-8810-42EC-8F2B-5AA76217327E",
10424 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
10425 "muted" : false,
10426 "newShot" : false,
10427 "speed" : 1,
10428 "srcIn" : 2986.3685659230177,
10429 "start" : 990.271186440678,
10430 "track" : "v4"
10431 },
10432 {
10433 "duration" : 41.18644067796606,
10434 "fadeIn" : 0,
10435 "fadeOut" : 0,
10436 "id" : "1C0BB1B6-1862-4A8E-B78B-26DBECD3F37B",
10437 "kind" : "video",
10438 "linkId" : "9F7D047B-0DE6-4655-9D6E-5B8ADDD0267B",
10439 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
10440 "muted" : false,
10441 "newShot" : false,
10442 "speed" : 1,
10443 "srcIn" : 3016.4745762711855,
10444 "start" : 1004.3728813559322,
10445 "track" : "v0"
10446 },
10447 {
10448 "duration" : 41.18644067796606,
10449 "fadeIn" : 0,
10450 "fadeOut" : 0,
10451 "id" : "3DF07444-8948-4073-A7B7-DCD022163D06",
10452 "kind" : "audio",
10453 "linkId" : "9F7D047B-0DE6-4655-9D6E-5B8ADDD0267B",
10454 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
10455 "muted" : true,
10456 "newShot" : false,
10457 "speed" : 1,
10458 "srcIn" : 3016.3907047298444,
10459 "start" : 1004.3728813559322,
10460 "track" : "v1"
10461 },
10462 {
10463 "duration" : 41.18644067796606,
10464 "fadeIn" : 0,
10465 "fadeOut" : 0,
10466 "id" : "17518456-794B-46AE-8B57-11535384C6DD",
10467 "kind" : "audio",
10468 "linkId" : "9F7D047B-0DE6-4655-9D6E-5B8ADDD0267B",
10469 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
10470 "muted" : false,
10471 "newShot" : false,
10472 "speed" : 1,
10473 "srcIn" : 3016.4373810330753,
10474 "start" : 1004.3728813559322,
10475 "track" : "v2"
10476 },
10477 {
10478 "duration" : 41.18644067796606,
10479 "fadeIn" : 0,
10480 "fadeOut" : 0,
10481 "id" : "D83C6190-0569-4756-B034-B56F5EA95C6A",
10482 "kind" : "video",
10483 "linkId" : "9F7D047B-0DE6-4655-9D6E-5B8ADDD0267B",
10484 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
10485 "muted" : false,
10486 "newShot" : false,
10487 "speed" : 1,
10488 "srcIn" : 3016.300773896847,
10489 "start" : 1004.3728813559322,
10490 "track" : "v3"
10491 },
10492 {
10493 "duration" : 41.18644067796606,
10494 "fadeIn" : 0,
10495 "fadeOut" : 0,
10496 "id" : "04909166-A121-49EA-B441-2498FB853E8E",
10497 "kind" : "video",
10498 "linkId" : "9F7D047B-0DE6-4655-9D6E-5B8ADDD0267B",
10499 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
10500 "muted" : false,
10501 "newShot" : false,
10502 "speed" : 1,
10503 "srcIn" : 3016.3007693128484,
10504 "start" : 1004.3728813559322,
10505 "track" : "v4"
10506 },
10507 {
10508 "duration" : 1.661016949152554,
10509 "fadeIn" : 0,
10510 "fadeOut" : 0,
10511 "id" : "AB7E6E67-21DC-473D-A4F5-32C751A46EE1",
10512 "kind" : "video",
10513 "linkId" : "0B407464-C16F-4EE0-8709-4530856B5481",
10514 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
10515 "muted" : false,
10516 "newShot" : false,
10517 "speed" : 1,
10518 "srcIn" : 3065.593220338982,
10519 "start" : 1045.5593220338983,
10520 "track" : "v0"
10521 },
10522 {
10523 "duration" : 1.661016949152554,
10524 "fadeIn" : 0,
10525 "fadeOut" : 0,
10526 "id" : "3945B5C6-C770-47E5-BF52-BC27D9ABFAE0",
10527 "kind" : "audio",
10528 "linkId" : "0B407464-C16F-4EE0-8709-4530856B5481",
10529 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
10530 "muted" : true,
10531 "newShot" : false,
10532 "speed" : 1,
10533 "srcIn" : 3065.509348797641,
10534 "start" : 1045.5593220338983,
10535 "track" : "v1"
10536 },
10537 {
10538 "duration" : 1.661016949152554,
10539 "fadeIn" : 0,
10540 "fadeOut" : 0,
10541 "id" : "D21DCFAE-885B-46AB-BBCD-46F5F68A4841",
10542 "kind" : "audio",
10543 "linkId" : "0B407464-C16F-4EE0-8709-4530856B5481",
10544 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
10545 "muted" : false,
10546 "newShot" : false,
10547 "speed" : 1,
10548 "srcIn" : 3065.556025100872,
10549 "start" : 1045.5593220338983,
10550 "track" : "v2"
10551 },
10552 {
10553 "duration" : 1.661016949152554,
10554 "fadeIn" : 0,
10555 "fadeOut" : 0,
10556 "id" : "09CE071F-2BC1-44E9-80B4-A3B494754324",
10557 "kind" : "video",
10558 "linkId" : "0B407464-C16F-4EE0-8709-4530856B5481",
10559 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
10560 "muted" : false,
10561 "newShot" : false,
10562 "speed" : 1,
10563 "srcIn" : 3065.419417964644,
10564 "start" : 1045.5593220338983,
10565 "track" : "v3"
10566 },
10567 {
10568 "duration" : 1.661016949152554,
10569 "fadeIn" : 0,
10570 "fadeOut" : 0,
10571 "id" : "E59CB212-BAFB-4792-9E87-27750E214AFF",
10572 "kind" : "video",
10573 "linkId" : "0B407464-C16F-4EE0-8709-4530856B5481",
10574 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
10575 "muted" : false,
10576 "newShot" : false,
10577 "speed" : 1,
10578 "srcIn" : 3065.419413380645,
10579 "start" : 1045.5593220338983,
10580 "track" : "v4"
10581 },
10582 {
10583 "duration" : 4.745762711864472,
10584 "fadeIn" : 0,
10585 "fadeOut" : 0,
10586 "id" : "E92C9D2B-F806-42DF-BBBD-6444CED9CFA0",
10587 "kind" : "video",
10588 "linkId" : "BBA33081-9695-4391-B23B-D376880D264E",
10589 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
10590 "muted" : false,
10591 "newShot" : false,
10592 "speed" : 1,
10593 "srcIn" : 3070.203389830507,
10594 "start" : 1047.2203389830509,
10595 "track" : "v0"
10596 },
10597 {
10598 "duration" : 4.745762711864472,
10599 "fadeIn" : 0,
10600 "fadeOut" : 0,
10601 "id" : "C13910BD-C1D5-42AA-B25A-F4AFA7E0807E",
10602 "kind" : "audio",
10603 "linkId" : "BBA33081-9695-4391-B23B-D376880D264E",
10604 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
10605 "muted" : true,
10606 "newShot" : false,
10607 "speed" : 1,
10608 "srcIn" : 3070.119518289166,
10609 "start" : 1047.2203389830509,
10610 "track" : "v1"
10611 },
10612 {
10613 "duration" : 4.745762711864472,
10614 "fadeIn" : 0,
10615 "fadeOut" : 0,
10616 "id" : "6A6D3754-91FF-45E9-9A9C-EC342D95E136",
10617 "kind" : "audio",
10618 "linkId" : "BBA33081-9695-4391-B23B-D376880D264E",
10619 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
10620 "muted" : false,
10621 "newShot" : false,
10622 "speed" : 1,
10623 "srcIn" : 3070.166194592397,
10624 "start" : 1047.2203389830509,
10625 "track" : "v2"
10626 },
10627 {
10628 "duration" : 4.745762711864472,
10629 "fadeIn" : 0,
10630 "fadeOut" : 0,
10631 "id" : "122D9228-98AA-4877-A0C4-2DFD8CAE845B",
10632 "kind" : "video",
10633 "linkId" : "BBA33081-9695-4391-B23B-D376880D264E",
10634 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
10635 "muted" : false,
10636 "newShot" : false,
10637 "speed" : 1,
10638 "srcIn" : 3070.029587456169,
10639 "start" : 1047.2203389830509,
10640 "track" : "v3"
10641 },
10642 {
10643 "duration" : 4.745762711864472,
10644 "fadeIn" : 0,
10645 "fadeOut" : 0,
10646 "id" : "9124C8F4-A9B8-40C9-A87D-03794D9BFD5B",
10647 "kind" : "video",
10648 "linkId" : "BBA33081-9695-4391-B23B-D376880D264E",
10649 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
10650 "muted" : false,
10651 "newShot" : false,
10652 "speed" : 1,
10653 "srcIn" : 3070.02958287217,
10654 "start" : 1047.2203389830509,
10655 "track" : "v4"
10656 },
10657 {
10658 "duration" : 11.93220338983042,
10659 "fadeIn" : 0,
10660 "fadeOut" : 0,
10661 "id" : "28D0F5F8-073A-4EB4-ABCD-C489AF0CA087",
10662 "kind" : "video",
10663 "linkId" : "318B4FD4-E1D7-41FD-B760-CA9E5DAB9B1F",
10664 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
10665 "muted" : false,
10666 "newShot" : false,
10667 "speed" : 1,
10668 "srcIn" : 3082.271186440677,
10669 "start" : 1051.9661016949153,
10670 "track" : "v0"
10671 },
10672 {
10673 "duration" : 11.93220338983042,
10674 "fadeIn" : 0,
10675 "fadeOut" : 0,
10676 "id" : "2B967FFC-3967-43AC-B348-992E7603AE2C",
10677 "kind" : "audio",
10678 "linkId" : "318B4FD4-E1D7-41FD-B760-CA9E5DAB9B1F",
10679 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
10680 "muted" : true,
10681 "newShot" : false,
10682 "speed" : 1,
10683 "srcIn" : 3082.187314899336,
10684 "start" : 1051.9661016949153,
10685 "track" : "v1"
10686 },
10687 {
10688 "duration" : 11.93220338983042,
10689 "fadeIn" : 0,
10690 "fadeOut" : 0,
10691 "id" : "5DCE6786-7E43-4D1A-9415-C2E364A3C1E5",
10692 "kind" : "audio",
10693 "linkId" : "318B4FD4-E1D7-41FD-B760-CA9E5DAB9B1F",
10694 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
10695 "muted" : false,
10696 "newShot" : false,
10697 "speed" : 1,
10698 "srcIn" : 3082.233991202567,
10699 "start" : 1051.9661016949153,
10700 "track" : "v2"
10701 },
10702 {
10703 "duration" : 11.93220338983042,
10704 "fadeIn" : 0,
10705 "fadeOut" : 0,
10706 "id" : "CCB5A926-E4B6-4AA9-9EF3-2E8A78E7B2F2",
10707 "kind" : "video",
10708 "linkId" : "318B4FD4-E1D7-41FD-B760-CA9E5DAB9B1F",
10709 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
10710 "muted" : false,
10711 "newShot" : false,
10712 "speed" : 1,
10713 "srcIn" : 3082.0973840663387,
10714 "start" : 1051.9661016949153,
10715 "track" : "v3"
10716 },
10717 {
10718 "duration" : 11.93220338983042,
10719 "fadeIn" : 0,
10720 "fadeOut" : 0,
10721 "id" : "296DECA8-17FA-4732-85F9-E7E62AB4390E",
10722 "kind" : "video",
10723 "linkId" : "318B4FD4-E1D7-41FD-B760-CA9E5DAB9B1F",
10724 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
10725 "muted" : false,
10726 "newShot" : false,
10727 "speed" : 1,
10728 "srcIn" : 3082.09737948234,
10729 "start" : 1051.9661016949153,
10730 "track" : "v4"
10731 },
10732 {
10733 "duration" : 2.7118644067795685,
10734 "fadeIn" : 0,
10735 "fadeOut" : 0,
10736 "id" : "F118809D-1E6F-4E06-9DD8-59627D7FD31E",
10737 "kind" : "video",
10738 "linkId" : "D27F02ED-F905-4600-B733-AF4B73B5174F",
10739 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
10740 "muted" : false,
10741 "newShot" : false,
10742 "speed" : 1,
10743 "srcIn" : 3097.559322033897,
10744 "start" : 1063.8983050847457,
10745 "track" : "v0"
10746 },
10747 {
10748 "duration" : 2.7118644067795685,
10749 "fadeIn" : 0,
10750 "fadeOut" : 0,
10751 "id" : "4A2040D0-20BE-429F-AD73-5B3ED24C0A6D",
10752 "kind" : "audio",
10753 "linkId" : "D27F02ED-F905-4600-B733-AF4B73B5174F",
10754 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
10755 "muted" : true,
10756 "newShot" : false,
10757 "speed" : 1,
10758 "srcIn" : 3097.475450492556,
10759 "start" : 1063.8983050847457,
10760 "track" : "v1"
10761 },
10762 {
10763 "duration" : 2.7118644067795685,
10764 "fadeIn" : 0,
10765 "fadeOut" : 0,
10766 "id" : "3D418272-0D62-4126-A9C7-71E7D7FC255D",
10767 "kind" : "audio",
10768 "linkId" : "D27F02ED-F905-4600-B733-AF4B73B5174F",
10769 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
10770 "muted" : false,
10771 "newShot" : false,
10772 "speed" : 1,
10773 "srcIn" : 3097.522126795787,
10774 "start" : 1063.8983050847457,
10775 "track" : "v2"
10776 },
10777 {
10778 "duration" : 2.7118644067795685,
10779 "fadeIn" : 0,
10780 "fadeOut" : 0,
10781 "id" : "B50F2156-B9AC-4F52-B362-40B0B0D732A4",
10782 "kind" : "video",
10783 "linkId" : "D27F02ED-F905-4600-B733-AF4B73B5174F",
10784 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
10785 "muted" : false,
10786 "newShot" : false,
10787 "speed" : 1,
10788 "srcIn" : 3097.3855196595587,
10789 "start" : 1063.8983050847457,
10790 "track" : "v3"
10791 },
10792 {
10793 "duration" : 2.7118644067795685,
10794 "fadeIn" : 0,
10795 "fadeOut" : 0,
10796 "id" : "8C35ED3F-0857-4157-9DDF-8937A65375E5",
10797 "kind" : "video",
10798 "linkId" : "D27F02ED-F905-4600-B733-AF4B73B5174F",
10799 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
10800 "muted" : false,
10801 "newShot" : false,
10802 "speed" : 1,
10803 "srcIn" : 3097.38551507556,
10804 "start" : 1063.8983050847457,
10805 "track" : "v4"
10806 },
10807 {
10808 "duration" : 29.864406779661067,
10809 "fadeIn" : 0,
10810 "fadeOut" : 0,
10811 "id" : "5F3F6F18-5791-47A8-BCA4-A9790558A314",
10812 "kind" : "video",
10813 "linkId" : "0F08CC53-E7F9-4A91-9D1E-F73D91D3ECB9",
10814 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
10815 "muted" : false,
10816 "newShot" : false,
10817 "speed" : 1,
10818 "srcIn" : 3101.3559322033884,
10819 "start" : 1066.6101694915253,
10820 "track" : "v0"
10821 },
10822 {
10823 "duration" : 29.864406779661067,
10824 "fadeIn" : 0,
10825 "fadeOut" : 0,
10826 "id" : "CF1D8F7D-26D5-4CD2-8D99-2370B29915C0",
10827 "kind" : "audio",
10828 "linkId" : "0F08CC53-E7F9-4A91-9D1E-F73D91D3ECB9",
10829 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
10830 "muted" : true,
10831 "newShot" : false,
10832 "speed" : 1,
10833 "srcIn" : 3101.2720606620474,
10834 "start" : 1066.6101694915253,
10835 "track" : "v1"
10836 },
10837 {
10838 "duration" : 29.864406779661067,
10839 "fadeIn" : 0,
10840 "fadeOut" : 0,
10841 "id" : "A1160BCB-0740-4FC5-BEA2-A90D6030BFA6",
10842 "kind" : "audio",
10843 "linkId" : "0F08CC53-E7F9-4A91-9D1E-F73D91D3ECB9",
10844 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
10845 "muted" : false,
10846 "newShot" : false,
10847 "speed" : 1,
10848 "srcIn" : 3101.3187369652783,
10849 "start" : 1066.6101694915253,
10850 "track" : "v2"
10851 },
10852 {
10853 "duration" : 29.864406779661067,
10854 "fadeIn" : 0,
10855 "fadeOut" : 0,
10856 "id" : "8E323D18-4C84-4AFA-B90D-264EE10DBF94",
10857 "kind" : "video",
10858 "linkId" : "0F08CC53-E7F9-4A91-9D1E-F73D91D3ECB9",
10859 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
10860 "muted" : false,
10861 "newShot" : false,
10862 "speed" : 1,
10863 "srcIn" : 3101.18212982905,
10864 "start" : 1066.6101694915253,
10865 "track" : "v3"
10866 },
10867 {
10868 "duration" : 29.864406779661067,
10869 "fadeIn" : 0,
10870 "fadeOut" : 0,
10871 "id" : "A1E18A2B-C2ED-4F4F-B090-2F04AB1EAB86",
10872 "kind" : "video",
10873 "linkId" : "0F08CC53-E7F9-4A91-9D1E-F73D91D3ECB9",
10874 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
10875 "muted" : false,
10876 "newShot" : false,
10877 "speed" : 1,
10878 "srcIn" : 3101.1821252450513,
10879 "start" : 1066.6101694915253,
10880 "track" : "v4"
10881 },
10882 {
10883 "duration" : 3046.474576440677,
10884 "fadeIn" : 0,
10885 "fadeOut" : 0,
10886 "id" : "77231674-DFD4-469D-8BD3-B0384766ED44",
10887 "kind" : "video",
10888 "linkId" : "06145E01-F314-4D25-9F5A-C1D23472B857",
10889 "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
10890 "muted" : false,
10891 "newShot" : false,
10892 "speed" : 1,
10893 "srcIn" : 3175.7288135593208,
10894 "start" : 1096.4745762711864,
10895 "track" : "v0"
10896 },
10897 {
10898 "duration" : 3046.477724982019,
10899 "fadeIn" : 0,
10900 "fadeOut" : 0,
10901 "id" : "46D41482-2761-4F49-8714-E482340928D2",
10902 "kind" : "audio",
10903 "linkId" : "06145E01-F314-4D25-9F5A-C1D23472B857",
10904 "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
10905 "muted" : true,
10906 "newShot" : false,
10907 "speed" : 1,
10908 "srcIn" : 3175.6449420179797,
10909 "start" : 1096.4745762711864,
10910 "track" : "v1"
10911 },
10912 {
10913 "duration" : 3046.516381678787,
10914 "fadeIn" : 0,
10915 "fadeOut" : 0,
10916 "id" : "6655D05A-2F89-4E98-A2C0-475D1908D6DB",
10917 "kind" : "audio",
10918 "linkId" : "06145E01-F314-4D25-9F5A-C1D23472B857",
10919 "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
10920 "muted" : false,
10921 "newShot" : false,
10922 "speed" : 1,
10923 "srcIn" : 3175.6916183212106,
10924 "start" : 1096.4745762711864,
10925 "track" : "v2"
10926 },
10927 {
10928 "duration" : 3046.5116558150157,
10929 "fadeIn" : 0,
10930 "fadeOut" : 0,
10931 "id" : "0BA9AB3D-B156-466B-A477-DD6CBCC6D5D0",
10932 "kind" : "video",
10933 "linkId" : "06145E01-F314-4D25-9F5A-C1D23472B857",
10934 "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
10935 "muted" : false,
10936 "newShot" : false,
10937 "speed" : 1,
10938 "srcIn" : 3175.5550111849825,
10939 "start" : 1096.4745762711864,
10940 "track" : "v3"
10941 },
10942 {
10943 "duration" : 3046.5116603990145,
10944 "fadeIn" : 0,
10945 "fadeOut" : 0,
10946 "id" : "FA5C83A2-F1FC-4E94-B0A3-D12DF73B9D65",
10947 "kind" : "video",
10948 "linkId" : "06145E01-F314-4D25-9F5A-C1D23472B857",
10949 "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
10950 "muted" : false,
10951 "newShot" : false,
10952 "speed" : 1,
10953 "srcIn" : 3175.5550066009837,
10954 "start" : 1096.4745762711864,
10955 "track" : "v4"
10956 }
10957 ],
10958 "fps" : 29.5,
10959 "markers" : [
10960
10961 ],
10962 "media" : [
10963 {
10964 "cacheKey" : "cb2b0cb1418eb04f",
10965 "duration" : 812.745763,
10966 "fps" : 29.5,
10967 "hasAudio" : false,
10968 "height" : 720,
10969 "id" : "26CBEF77-6850-4D82-A5BD-A6A37587C040",
10970 "isAudio" : false,
10971 "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_13.49\/cam.mov",
10972 "width" : 1280
10973 },
10974 {
10975 "cacheKey" : "49108ecb3168df5a",
10976 "duration" : 812.885333,
10977 "fps" : 30,
10978 "hasAudio" : true,
10979 "height" : 0,
10980 "id" : "F676BA7D-A0E0-4603-AE13-B853D2F9F2BB",
10981 "isAudio" : true,
10982 "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_13.49\/desktop.m4a",
10983 "width" : 0
10984 },
10985 {
10986 "cacheKey" : "9f6621781616504d",
10987 "duration" : 813.269333,
10988 "fps" : 30,
10989 "hasAudio" : true,
10990 "height" : 0,
10991 "id" : "6FFA3786-8E51-4E69-A15D-D6A991C0CCAD",
10992 "isAudio" : true,
10993 "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_13.49\/mic.m4a",
10994 "width" : 0
10995 },
10996 {
10997 "cacheKey" : "fbe623fb3a0f34ba",
10998 "duration" : 812.833333,
10999 "fps" : 30,
11000 "hasAudio" : false,
11001 "height" : 2160,
11002 "id" : "609E978E-5994-4757-A6C7-EAAE72818A49",
11003 "isAudio" : false,
11004 "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_13.49\/screen-1.mov",
11005 "width" : 3840
11006 },
11007 {
11008 "cacheKey" : "1be7aaff98d7b0ff",
11009 "duration" : 812.833333,
11010 "fps" : 30,
11011 "hasAudio" : false,
11012 "height" : 2160,
11013 "id" : "C0E05C14-2D32-4A55-9041-7A752A97F6B1",
11014 "isAudio" : false,
11015 "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_13.49\/screen-2.mov",
11016 "width" : 3840
11017 },
11018 {
11019 "cacheKey" : "bc4651748a6b1673",
11020 "duration" : 6222.20339,
11021 "fps" : 29.5,
11022 "hasAudio" : false,
11023 "height" : 720,
11024 "id" : "40BBB768-793D-44DA-BBC9-B22F6591159D",
11025 "isAudio" : false,
11026 "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_14.03\/cam.mov",
11027 "width" : 1280
11028 },
11029 {
11030 "cacheKey" : "27d4dedeccdacecc",
11031 "duration" : 6222.122667,
11032 "fps" : 30,
11033 "hasAudio" : true,
11034 "height" : 0,
11035 "id" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6",
11036 "isAudio" : true,
11037 "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_14.03\/desktop.m4a",
11038 "width" : 0
11039 },
11040 {
11041 "cacheKey" : "103551fc583e9882",
11042 "duration" : 6222.208,
11043 "fps" : 30,
11044 "hasAudio" : true,
11045 "height" : 0,
11046 "id" : "501034F8-09AC-44B1-8826-FCE9B36C68F9",
11047 "isAudio" : true,
11048 "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_14.03\/mic.m4a",
11049 "width" : 0
11050 },
11051 {
11052 "cacheKey" : "5bfa7a15f159568d",
11053 "duration" : 6222.066667,
11054 "fps" : 30,
11055 "hasAudio" : false,
11056 "height" : 2160,
11057 "id" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE",
11058 "isAudio" : false,
11059 "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_14.03\/screen-1.mov",
11060 "width" : 3840
11061 },
11062 {
11063 "cacheKey" : "8cea14167c6e9778",
11064 "duration" : 6222.066667,
11065 "fps" : 30,
11066 "hasAudio" : false,
11067 "height" : 2160,
11068 "id" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1",
11069 "isAudio" : false,
11070 "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_14.03\/screen-2.mov",
11071 "width" : 3840
11072 },
11073 {
11074 "cacheKey" : "b966487289885ec1",
11075 "duration" : 15112.237288,
11076 "fps" : 29.5,
11077 "hasAudio" : false,
11078 "height" : 720,
11079 "id" : "CC300C55-7090-4A6E-81FA-55CB6644FAC9",
11080 "isAudio" : false,
11081 "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_16.36\/cam.mov",
11082 "width" : 1280
11083 },
11084 {
11085 "cacheKey" : "9044d1d53bcf480f",
11086 "duration" : 15112.106667,
11087 "fps" : 30,
11088 "hasAudio" : true,
11089 "height" : 0,
11090 "id" : "2613683E-12E6-402E-BF4D-6D9ACD7C1491",
11091 "isAudio" : true,
11092 "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_16.36\/desktop.m4a",
11093 "width" : 0
11094 },
11095 {
11096 "cacheKey" : "36fc42c715b64632",
11097 "duration" : 15112.213333,
11098 "fps" : 30,
11099 "hasAudio" : true,
11100 "height" : 0,
11101 "id" : "7889E9EC-F67A-491B-81C0-0CF8338965A3",
11102 "isAudio" : true,
11103 "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_16.36\/mic.m4a",
11104 "width" : 0
11105 },
11106 {
11107 "cacheKey" : "0308132cb01a092a",
11108 "duration" : 15112.066667,
11109 "fps" : 30,
11110 "hasAudio" : false,
11111 "height" : 2160,
11112 "id" : "BC4E74C5-4C45-4633-B31A-3CAA58D4B2BF",
11113 "isAudio" : false,
11114 "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_16.36\/screen-1.mov",
11115 "width" : 3840
11116 },
11117 {
11118 "cacheKey" : "270afa9f16a6fb41",
11119 "duration" : 15111.366667,
11120 "fps" : 30,
11121 "hasAudio" : false,
11122 "height" : 2160,
11123 "id" : "98882264-A2ED-477B-A7B8-B63E54EDEACE",
11124 "isAudio" : false,
11125 "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_16.36\/screen-2.mov",
11126 "width" : 3840
11127 },
11128 {
11129 "cacheKey" : "02a6eb97d64d4630",
11130 "duration" : 10045.254237,
11131 "fps" : 29.5,
11132 "hasAudio" : false,
11133 "height" : 720,
11134 "id" : "2D5EED57-87EB-44B4-9623-2CF48314C5F9",
11135 "isAudio" : false,
11136 "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_22.54\/cam.mov",
11137 "width" : 1280
11138 },
11139 {
11140 "cacheKey" : "cc655edd968d5060",
11141 "duration" : 10045.162667,
11142 "fps" : 30,
11143 "hasAudio" : true,
11144 "height" : 0,
11145 "id" : "0ECB1F4F-9065-432F-B0B1-7F47BD31FDCC",
11146 "isAudio" : true,
11147 "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_22.54\/desktop.m4a",
11148 "width" : 0
11149 },
11150 {
11151 "cacheKey" : "4a0d44fc07d2db63",
11152 "duration" : 10045.248,
11153 "fps" : 30,
11154 "hasAudio" : true,
11155 "height" : 0,
11156 "id" : "02A5DFB3-9348-4102-BD13-F1856B431A70",
11157 "isAudio" : true,
11158 "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_22.54\/mic.m4a",
11159 "width" : 0
11160 },
11161 {
11162 "cacheKey" : "edc26bd451155492",
11163 "duration" : 10045.133333,
11164 "fps" : 30,
11165 "hasAudio" : false,
11166 "height" : 2160,
11167 "id" : "9CA51332-5865-4C3D-9972-E781BDE75ECD",
11168 "isAudio" : false,
11169 "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_22.54\/screen-1.mov",
11170 "width" : 3840
11171 },
11172 {
11173 "cacheKey" : "3c45ae09f47beeae",
11174 "duration" : 10045.166667,
11175 "fps" : 30,
11176 "hasAudio" : false,
11177 "height" : 2160,
11178 "id" : "0DEB0D7E-0C1E-49DA-9911-7773FB2158DE",
11179 "isAudio" : false,
11180 "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_22.54\/screen-2.mov",
11181 "width" : 3840
11182 },
11183 {
11184 "cacheKey" : "81f385d21caafc19",
11185 "duration" : 11597.966102,
11186 "fps" : 29.5,
11187 "hasAudio" : false,
11188 "height" : 720,
11189 "id" : "F06DF483-F96F-4DD1-8602-53609FA888F1",
11190 "isAudio" : false,
11191 "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-04_17.30\/cam.mov",
11192 "width" : 1280
11193 },
11194 {
11195 "cacheKey" : "88621a686d385fe8",
11196 "duration" : 11598.101333,
11197 "fps" : 30,
11198 "hasAudio" : true,
11199 "height" : 0,
11200 "id" : "59213540-870A-4795-BD44-B3AFBC9F14E3",
11201 "isAudio" : true,
11202 "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-04_17.30\/desktop.m4a",
11203 "width" : 0
11204 },
11205 {
11206 "cacheKey" : "3ee60110dd18110c",
11207 "duration" : 11598.464,
11208 "fps" : 30,
11209 "hasAudio" : true,
11210 "height" : 0,
11211 "id" : "F4DB0AF3-2C74-4501-A58A-A519C046E3D6",
11212 "isAudio" : true,
11213 "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-04_17.30\/mic.m4a",
11214 "width" : 0
11215 },
11216 {
11217 "cacheKey" : "290f82433dd61a4c",
11218 "duration" : 11598.033333,
11219 "fps" : 30,
11220 "hasAudio" : false,
11221 "height" : 2160,
11222 "id" : "9F95D76B-EAB2-49AA-897A-C3C9A265E0CC",
11223 "isAudio" : false,
11224 "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-04_17.30\/screen-1.mov",
11225 "width" : 3840
11226 },
11227 {
11228 "cacheKey" : "12165002971af6ff",
11229 "duration" : 11598,
11230 "fps" : 30,
11231 "hasAudio" : false,
11232 "height" : 2160,
11233 "id" : "CC497E03-E3E7-4283-A96C-F076D9F154A1",
11234 "isAudio" : false,
11235 "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-04_17.30\/screen-2.mov",
11236 "width" : 3840
11237 }
11238 ],
11239 "preferredTakes" : [
11240
11241 ],
11242 "tracks" : [
11243 {
11244 "hue" : 0
11245 },
11246 {
11247 "hue" : 0.6180339887498949
11248 },
11249 {
11250 "hue" : 0.2360679774997898
11251 },
11252 {
11253 "hue" : 0.8541019662496847
11254 },
11255 {
11256 "hue" : 0.4721359549995796
11257 }
11258 ]
11259 },
11260 "view" : {
11261 "focusedTracks" : [
11262
11263 ],
11264 "fusionFocus" : false,
11265 "fusionHidden" : false,
11266 "hiddenTracks" : [
11267
11268 ],
11269 "laneScale" : 1.5562744140625,
11270 "previewsOnLeft" : false,
11271 "priorityPane" : "v4",
11272 "showFilmstrips" : true,
11273 "snapping" : true,
11274 "trackHeights" : [
11275 {
11276 "factor" : 0.99639892578125,
11277 "track" : "v0"
11278 },
11279 {
11280 "factor" : 1,
11281 "track" : "v4"
11282 }
11283 ]
11284 }
11285}
\ No newline at end of file
sequencer/Sources/Sequencer/AppDelegate.swift+11-2
...@@ -171,9 +171,11 @@ final class AppDelegate: NSObject, NSApplicationDelegate {...@@ -171,9 +171,11 @@ final class AppDelegate: NSObject, NSApplicationDelegate {
171 clip.addItem(item("Link Clips", #selector(SequencerWindowController.linkClips), key: "g", mods: []))171 clip.addItem(item("Link Clips", #selector(SequencerWindowController.linkClips), key: "g", mods: []))
172 clip.addItem(item("Unlink Clips", #selector(SequencerWindowController.unlinkClips), key: "g", mods: [.option]))172 clip.addItem(item("Unlink Clips", #selector(SequencerWindowController.unlinkClips), key: "g", mods: [.option]))
173 clip.addItem(.separator())173 clip.addItem(.separator())
174 clip.addItem(item("Delete", #selector(SequencerWindowController.deleteSelected), key: "\u{8}", mods: []))174 // X deletes, ⇧X ripple-deletes; ⌫ / ⌥⌫ remain aliases (handled in
175 // TimelineView.keyDown, so they keep working without a menu equivalent).
176 clip.addItem(item("Delete", #selector(SequencerWindowController.deleteSelected), key: "x", mods: []))
175 clip.addItem(item("Ripple Delete", #selector(SequencerWindowController.rippleDeleteSelected),177 clip.addItem(item("Ripple Delete", #selector(SequencerWindowController.rippleDeleteSelected),
176 key: "\u{8}", mods: [.option]))178 key: "X", mods: [.shift]))
177 clip.addItem(item("Close Gap at Playhead", #selector(SequencerWindowController.closeGapAtPlayhead)))179 clip.addItem(item("Close Gap at Playhead", #selector(SequencerWindowController.closeGapAtPlayhead)))
178 clip.addItem(.separator())180 clip.addItem(.separator())
179 clip.addItem(item("Ripple Trim Start to Playhead", #selector(SequencerWindowController.rippleTrimLeft),181 clip.addItem(item("Ripple Trim Start to Playhead", #selector(SequencerWindowController.rippleTrimLeft),
...@@ -315,4 +317,11 @@ final class AppDelegate: NSObject, NSApplicationDelegate {...@@ -315,4 +317,11 @@ final class AppDelegate: NSObject, NSApplicationDelegate {
315 ("59.94 fps", 60000.0 / 1001.0), ("60 fps", 60),317 ("59.94 fps", 60000.0 / 1001.0), ("60 fps", 60),
316 ]318 ]
317319
320 /// Normal-play speed presets for the transport's speed dropdown. These set
321 /// the forward speed Space plays at; J/K/L shuttle is independent.
322 static let playbackSpeeds: [(String, Double)] = [
323 ("0.25×", 0.25), ("0.5×", 0.5), ("0.75×", 0.75), ("1×", 1),
324 ("1.25×", 1.25), ("1.5×", 1.5), ("2×", 2), ("4×", 4),
325 ]
326
318}327}
sequencer/Sources/Sequencer/ChunkedProxy.swift+260-41
...@@ -16,20 +16,43 @@ final class ChunkManager {...@@ -16,20 +16,43 @@ final class ChunkManager {
16 unowned var ctx: DocumentContext!16 unowned var ctx: DocumentContext!
17 static let chunkSeconds: Double = 3017 static let chunkSeconds: Double = 30
1818
19 /// Adaptive proxy quality. Proxies are encoded at the highest quality the19 /// Adaptive proxy quality *ladder*, expressed as a fraction of a build
20 /// machine can still produce FASTER than real time, so playback never20 /// target width rather than an absolute size. Level 0 is the target itself;
21 /// outruns the render queue. Each step trades resolution (and, lower down,21 /// lower levels trade resolution (and, further down, frame rate) for encode
22 /// frame rate) for encode speed. Level 0 is the original full quality.22 /// speed so realtime playback keeps up even when the target is large. The
23 struct Quality { let maxWidth: Int; let fpsDivisor: Int }23 /// target width itself comes from the preview size (`previewTargetWidth`) —
24 /// a big preview asks for sharper proxies, a small one isn't over-rendered.
25 struct Quality { let widthFraction: Double; let fpsDivisor: Int }
24 static let qualities: [Quality] = [26 static let qualities: [Quality] = [
25 Quality(maxWidth: 960, fpsDivisor: 1), // full — matches the old fixed proxy27 Quality(widthFraction: 1.0, fpsDivisor: 1), // full target
26 Quality(maxWidth: 640, fpsDivisor: 1), // reduced28 Quality(widthFraction: 0.66, fpsDivisor: 1), // reduced
27 Quality(maxWidth: 480, fpsDivisor: 2), // low29 Quality(widthFraction: 0.5, fpsDivisor: 2), // low
28 Quality(maxWidth: 320, fpsDivisor: 2), // minimum30 Quality(widthFraction: 0.33, fpsDivisor: 2), // minimum
29 ]31 ]
3032
33 /// Largest on-screen preview width in device pixels, reported by the viewer
34 /// (`setPreviewTargetWidth`). Background optimisation targets this so the
35 /// proxy is as sharp as the preview it's displayed in. Defaults to the old
36 /// fixed 960 until the viewer measures itself.
37 private(set) var previewTargetWidth = 960
38
39 /// The width a fresh proxy for this media should reach — the preview target,
40 /// never upscaled past the source.
41 private func targetWidth(for media: MediaItem) -> Int {
42 let native = media.width > 0 ? media.width : previewTargetWidth
43 return min(native, previewTargetWidth)
44 }
45
46 /// Effective encode width at `level` for this media (even, ffmpeg-friendly).
47 private func buildWidth(level: Int, media: MediaItem) -> Int {
48 let q = Self.qualities[min(max(0, level), Self.qualities.count - 1)]
49 let w = Int((Double(targetWidth(for: media)) * q.widthFraction).rounded())
50 return max(160, w - (w % 2))
51 }
52
31 private struct MediaState {53 private struct MediaState {
32 var built: Set<Int> = []54 var built: [Int: Int] = [:] // chunk index → effective width on disk
55 var attempted: [Int: Int] = [:] // chunk index → width of the last attempt
33 var inFlight: Set<Int> = []56 var inFlight: Set<Int> = []
34 var failed: Set<Int> = []57 var failed: Set<Int> = []
35 var urgent: [Int] = []58 var urgent: [Int] = []
...@@ -67,11 +90,34 @@ final class ChunkManager {...@@ -67,11 +90,34 @@ final class ChunkManager {
67 /// Playback started: while paused, resume building the chunks it needs.90 /// Playback started: while paused, resume building the chunks it needs.
68 func playbackDidStart() { pump() }91 func playbackDidStart() { pump() }
6992
93 /// The viewer reports its largest preview cell's width in device pixels so
94 /// optimisation can target a proxy that's actually sharp at that size.
95 /// Quantised to a ladder so layout jitter of a few pixels doesn't churn the
96 /// target; growing it opens fresh upgrade work.
97 func setPreviewTargetWidth(_ pixels: Int) {
98 let steps = [640, 960, 1280, 1600, 1920, 2560, 3200, 3840]
99 let q = steps.first { $0 >= pixels } ?? steps.last!
100 guard q != previewTargetWidth else { return }
101 let grew = q > previewTargetWidth
102 previewTargetWidth = q
103 if grew { pump() } // below-target chunks are now upgrade candidates
104 }
105
106 /// Serialises the tiny per-media width manifests (index → built width) so
107 /// upgrades survive relaunch and a larger preview knows what to re-render.
108 private let manifestQueue = DispatchQueue(label: "sequencer.chunk.manifest")
109
70 init() {110 init() {
71 NotificationCenter.default.addObserver(111 NotificationCenter.default.addObserver(
72 forName: .projectChanged, object: nil, queue: .main) { [weak self] _ in112 forName: .projectChanged, object: nil, queue: .main) { [weak self] _ in
73 guard let self else { return }113 guard let self else { return }
74 self.ensure(for: self.ctx.store.project)114 self.ensure(for: self.ctx.store.project)
115 self.updateDemand(force: true)
116 }
117 // Hiding/focusing a track changes what to optimize first.
118 NotificationCenter.default.addObserver(
119 forName: .viewOptionsChanged, object: nil, queue: .main) { [weak self] _ in
120 self?.updateDemand(force: true)
75 }121 }
76 }122 }
77123
...@@ -89,6 +135,33 @@ final class ChunkManager {...@@ -89,6 +135,33 @@ final class ChunkManager {
89 private func chunkURL(key: String, index: Int) -> URL {135 private func chunkURL(key: String, index: Int) -> URL {
90 chunksDir(key).appendingPathComponent(String(format: "c%06d.mov", index))136 chunksDir(key).appendingPathComponent(String(format: "c%06d.mov", index))
91 }137 }
138 private func manifestURL(_ key: String) -> URL {
139 chunksDir(key).appendingPathComponent("widths.json")
140 }
141
142 /// Legacy width assumed for a chunk on disk with no manifest entry — the
143 /// old fixed proxy size. Correct enough that a normal-sized preview won't
144 /// pointlessly re-render old caches, while a bigger one still upgrades them.
145 private static let legacyWidth = 960
146
147 private func loadWidths(_ key: String) -> [Int: Int] {
148 guard let data = try? Data(contentsOf: manifestURL(key)),
149 let obj = try? JSONSerialization.jsonObject(with: data) as? [String: Int]
150 else { return [:] }
151 return Dictionary(uniqueKeysWithValues: obj.compactMap { k, v in
152 Int(k).map { ($0, v) }
153 })
154 }
155 private func persistWidths(key: String) {
156 let widths = states[key]?.built ?? [:]
157 let url = manifestURL(key)
158 manifestQueue.async {
159 let obj = Dictionary(uniqueKeysWithValues: widths.map { (String($0.key), $0.value) })
160 if let data = try? JSONSerialization.data(withJSONObject: obj) {
161 try? data.write(to: url)
162 }
163 }
164 }
92 static func chunkIndex(forSource t: Double) -> Int { max(0, Int(t / chunkSeconds)) }165 static func chunkIndex(forSource t: Double) -> Int { max(0, Int(t / chunkSeconds)) }
93 static func chunkCount(duration: Double) -> Int {166 static func chunkCount(duration: Double) -> Int {
94 max(1, Int(ceil(duration / chunkSeconds)))167 max(1, Int(ceil(duration / chunkSeconds)))
...@@ -99,10 +172,13 @@ final class ChunkManager {...@@ -99,10 +172,13 @@ final class ChunkManager {
99 var s = states[media.cacheKey] ?? MediaState()172 var s = states[media.cacheKey] ?? MediaState()
100 if !s.scanned {173 if !s.scanned {
101 s.scanned = true174 s.scanned = true
175 let widths = loadWidths(media.cacheKey)
102 if let names = try? FileManager.default176 if let names = try? FileManager.default
103 .contentsOfDirectory(atPath: chunksDir(media.cacheKey).path) {177 .contentsOfDirectory(atPath: chunksDir(media.cacheKey).path) {
104 for n in names where n.hasPrefix("c") && n.hasSuffix(".mov") {178 for n in names where n.hasPrefix("c") && n.hasSuffix(".mov") {
105 if let i = Int(n.dropFirst().dropLast(4)) { s.built.insert(i) }179 if let i = Int(n.dropFirst().dropLast(4)) {
180 s.built[i] = widths[i] ?? Self.legacyWidth
181 }
106 }182 }
107 }183 }
108 states[media.cacheKey] = s184 states[media.cacheKey] = s
...@@ -124,7 +200,7 @@ final class ChunkManager {...@@ -124,7 +200,7 @@ final class ChunkManager {
124 let n = Self.chunkCount(duration: media.duration)200 let n = Self.chunkCount(duration: media.duration)
125 let i = min(n - 1, Self.chunkIndex(forSource: sourceTime))201 let i = min(n - 1, Self.chunkIndex(forSource: sourceTime))
126 let wanted = [i, i + 1].filter {202 let wanted = [i, i + 1].filter {
127 $0 < n && !s.built.contains($0) && !s.inFlight.contains($0) && !s.failed.contains($0)203 $0 < n && s.built[$0] == nil && !s.inFlight.contains($0) && !s.failed.contains($0)
128 }204 }
129 guard s.urgent != wanted else { return }205 guard s.urgent != wanted else { return }
130 s.urgent = wanted206 s.urgent = wanted
...@@ -151,13 +227,98 @@ final class ChunkManager {...@@ -151,13 +227,98 @@ final class ChunkManager {
151 pump()227 pump()
152 }228 }
153229
230 // MARK: - Prefetch demand (what to optimize first)
231
232 private struct DemandKey: Hashable { let key: String; let index: Int }
233 /// Chunks to build first, best-first. Recomputed from the playhead, playback
234 /// direction, and visibility — supersedes the crude current+next `urgent`.
235 private var demand: [DemandKey] = []
236 /// The subset close enough ahead that playback will hit it imminently — these
237 /// build at the adaptive realtime quality so they land in time; everything
238 /// else builds at the full preview-quality target.
239 private var demandImminent: Set<DemandKey> = []
240 private var lastDemandPlayhead = -1e9
241 private var lastDemandSign = 0.0
242
243 /// How far ahead of the playhead (in the playback direction) to prefetch, and
244 /// how far behind to keep. Ahead is generous so a run of playback never
245 /// out-paces the encoder; behind is small (for a quick reverse / re-view).
246 private static let prefetchAhead = 120.0
247 private static let prefetchBehind = 20.0
248 /// Uncovered chunks within this many seconds ahead are "imminent".
249 private static let imminentAhead = 45.0
250
251 /// Recompute the build order — the heart of "optimize the right thing first."
252 /// For every video clip near the playhead we score the proxy chunks its
253 /// source range needs and sort them: coverage before sharpening, visible
254 /// (and focused) tracks before hidden, and nearer the playhead in the
255 /// playback direction before farther. Chunks outside the window fall through
256 /// to the whole-project background queue (`ensure`). Cheap; safe to call as
257 /// the playhead moves (self-throttled).
258 func updateDemand(force: Bool = false) {
259 guard ctx != nil else { return }
260 let ph = ctx.playback.playhead
261 let sign = ctx.playback.rate < 0 ? -1.0 : 1.0
262 guard force || abs(ph - lastDemandPlayhead) > 1.5 || sign != lastDemandSign else { return }
263 lastDemandPlayhead = ph
264 lastDemandSign = sign
265
266 let project = ctx.store.project
267 let dir = sign
268 let anyFocused = !ctx.session.focusedTracks.isEmpty
269
270 struct Cand { let key: DemandKey; let score: Double; let imminent: Bool }
271 var cands: [Cand] = []
272 for clip in project.clips where clip.kind == .video {
273 guard let media = project.media(clip.mediaId), media.duration > 0,
274 !media.isAudio, !hasFullProxy(media) else { continue }
275 let visible = !ctx.session.hiddenTracks.contains(clip.track)
276 let focused = ctx.session.focusedTracks.contains(clip.track)
277 let lo = ph - (dir > 0 ? Self.prefetchBehind : Self.prefetchAhead)
278 let hi = ph + (dir > 0 ? Self.prefetchAhead : Self.prefetchBehind)
279 let a = max(clip.start, lo), b = min(clip.end, hi)
280 guard b > a else { continue }
281 let n = Self.chunkCount(duration: media.duration)
282 let s = state(for: media)
283 let target = targetWidth(for: media)
284 let srcA = clip.srcIn + (a - clip.start) * clip.speed
285 let srcB = clip.srcIn + (b - clip.start) * clip.speed
286 let ci = min(n - 1, Self.chunkIndex(forSource: min(srcA, srcB)))
287 let cj = min(n - 1, Self.chunkIndex(forSource: max(srcA, srcB) - 1e-6))
288 for idx in ci...max(ci, cj) {
289 if (s.built[idx] ?? 0) >= target { continue } // already good enough
290 let covered = s.built[idx] != nil
291 // Timeline moment this chunk's content plays inside this clip.
292 let tl = clip.start
293 + (Double(idx) * Self.chunkSeconds - clip.srcIn) / max(1e-4, clip.speed)
294 let signed = (min(max(tl, a), b) - ph) * dir // >0 = ahead
295 var score = signed >= 0 ? signed : -signed * 4 // behind costs 4×
296 if covered { score += 10_000 } // coverage beats sharpening
297 if !visible { score += 100_000 } // hidden tracks last
298 else if anyFocused && !focused { score += 1_000 } // the enlarged pane first
299 let imminent = visible && !covered && signed >= 0 && signed < Self.imminentAhead
300 cands.append(Cand(key: DemandKey(key: media.cacheKey, index: idx),
301 score: score, imminent: imminent))
302 }
303 }
304 cands.sort { $0.score < $1.score }
305 demand.removeAll(keepingCapacity: true)
306 demandImminent.removeAll(keepingCapacity: true)
307 var seen = Set<DemandKey>()
308 for c in cands where seen.insert(c.key).inserted {
309 demand.append(c.key)
310 if c.imminent { demandImminent.insert(c.key) }
311 }
312 pump()
313 }
314
154 // MARK: - Status queries315 // MARK: - Status queries
155316
156 func isCovered(media: MediaItem, sourceTime: Double) -> Bool {317 func isCovered(media: MediaItem, sourceTime: Double) -> Bool {
157 if media.isAudio { return true } // audio plays the original directly318 if media.isAudio { return true } // audio plays the original directly
158 if hasFullProxy(media) { return true }319 if hasFullProxy(media) { return true }
159 let s = state(for: media)320 let s = state(for: media)
160 return s.built.contains(Self.chunkIndex(forSource: sourceTime))321 return s.built[Self.chunkIndex(forSource: sourceTime)] != nil
161 }322 }
162323
163 /// Last known answer; unknown kicks the async composition build (which324 /// Last known answer; unknown kicks the async composition build (which
...@@ -170,38 +331,79 @@ final class ChunkManager {...@@ -170,38 +331,79 @@ final class ChunkManager {
170 }331 }
171332
172 /// (building now, waiting in queue) across all media — for the status bar.333 /// (building now, waiting in queue) across all media — for the status bar.
334 /// A chunk counts as queued while it's either missing OR still below the
335 /// preview-quality target (i.e. an upgrade is pending).
173 func queueSummary() -> (building: Int, queued: Int) {336 func queueSummary() -> (building: Int, queued: Int) {
174 var building = 0, queued = 0337 var building = 0, queued = 0
175 for s in states.values {338 for (key, s) in states {
176 building += s.inFlight.count339 building += s.inFlight.count
177 let pending = Set(s.urgent + s.background)340 let target = mediaByKey[key].map { targetWidth(for: $0) } ?? previewTargetWidth
178 .subtracting(s.built).subtracting(s.inFlight).subtracting(s.failed)341 for i in Set(s.urgent + s.background)
179 queued += pending.count342 where !s.inFlight.contains(i) && !s.failed.contains(i) {
343 if (s.built[i] ?? 0) < target { queued += 1 }
344 }
180 }345 }
181 return (building, queued)346 return (building, queued)
182 }347 }
183348
184 /// The proxy-backed chunk set right now (players record this at item-swap349 /// Per-chunk proxy width right now (players record this at item-swap time
185 /// time to judge whether a later swap upgrades anything).350 /// to judge whether a later swap upgrades the frame under the playhead).
186 func builtChunks(media: MediaItem) -> Set<Int> {351 func builtWidths(media: MediaItem) -> [Int: Int] {
187 state(for: media).built352 state(for: media).built
188 }353 }
189354
190 func builtChunkURL(media: MediaItem, index: Int) -> URL? {355 func builtChunkURL(media: MediaItem, index: Int) -> URL? {
191 state(for: media).built.contains(index)356 state(for: media).built[index] != nil
192 ? chunkURL(key: media.cacheKey, index: index) : nil357 ? chunkURL(key: media.cacheKey, index: index) : nil
193 }358 }
194359
195 // MARK: - Build queue360 // MARK: - Build queue
196361
197 private func nextJob() -> (MediaItem, Int)? {362 /// Next chunk to build, in priority order:
198 for pass in 0..<2 {363 /// 0. urgent — coverage the playhead needs NOW, at any quality;
199 for (key, s) in states {364 /// 1. missing — background chunks not yet built at all (coverage first);
200 guard let media = mediaByKey[key] else { continue }365 /// 2. upgrade — background chunks built below the preview-quality target.
201 let list = pass == 0 ? s.urgent : s.background366 /// Coverage always beats sharpening, so playback never stalls waiting on a
202 for i in list where !s.built.contains(i) && !s.inFlight.contains(i)367 /// quality upgrade of a frame that's already visible.
203 && !s.failed.contains(i) {368 private func nextJob() -> (media: MediaItem, index: Int, urgent: Bool)? {
204 return (media, i)369 // 1. Prefetch demand — already ordered best-first (visible/focused, near,
370 // coverage before sharpening). Coverage rides the adaptive realtime
371 // quality when imminent; an upgrade goes for the full target.
372 for dk in demand {
373 guard let media = mediaByKey[dk.key] else { continue }
374 let s = states[dk.key] ?? state(for: media)
375 guard !s.inFlight.contains(dk.index), !s.failed.contains(dk.index) else { continue }
376 let target = targetWidth(for: media)
377 if let have = s.built[dk.index] {
378 if have < target, (s.attempted[dk.index] ?? 0) < target {
379 return (media, dk.index, false) // upgrade → target
380 }
381 } else {
382 return (media, dk.index, demandImminent.contains(dk)) // coverage
383 }
384 }
385 // 2. Legacy urgent (headless `want`) then the whole-project background
386 // fill for chunks off-screen of the prefetch window.
387 for (key, s) in states {
388 guard let media = mediaByKey[key] else { continue }
389 for i in s.urgent where s.built[i] == nil
390 && !s.inFlight.contains(i) && !s.failed.contains(i) {
391 return (media, i, true)
392 }
393 }
394 for (key, s) in states {
395 guard let media = mediaByKey[key] else { continue }
396 for i in s.background where s.built[i] == nil
397 && !s.inFlight.contains(i) && !s.failed.contains(i) {
398 return (media, i, false)
399 }
400 }
401 for (key, s) in states {
402 guard let media = mediaByKey[key] else { continue }
403 let target = targetWidth(for: media)
404 for i in s.background where !s.inFlight.contains(i) {
405 if let have = s.built[i], have < target, (s.attempted[i] ?? 0) < target {
406 return (media, i, false)
205 }407 }
206 }408 }
207 }409 }
...@@ -212,26 +414,45 @@ final class ChunkManager {...@@ -212,26 +414,45 @@ final class ChunkManager {
212 // Paused stops idle background fill, but playback still optimizes the414 // Paused stops idle background fill, but playback still optimizes the
213 // chunks it's about to need.415 // chunks it's about to need.
214 while (!isPaused || ctx.playback.isPlaying),416 while (!isPaused || ctx.playback.isPlaying),
215 activeBuilds < maxBuilds, let (media, index) = nextJob() {417 activeBuilds < maxBuilds, let job = nextJob() {
418 // During playback keep one slot free for urgent coverage so a slow
419 // background quality-upgrade can't stall the frames being played.
420 if !job.urgent, ctx.playback.isPlaying, activeBuilds >= maxBuilds - 1 { break }
421 let (media, index, urgent) = job
422 // Urgent builds ride the adaptive realtime level; background builds
423 // go for the full preview-quality target.
424 let level = urgent ? (states[media.cacheKey]?.qualityIndex ?? 0) : 0
425 let width = buildWidth(level: level, media: media)
426 let fpsDiv = Self.qualities[min(max(0, level), Self.qualities.count - 1)].fpsDivisor
427 let fps = max(1, Int((media.fps / Double(fpsDiv)).rounded()))
216 states[media.cacheKey]?.inFlight.insert(index)428 states[media.cacheKey]?.inFlight.insert(index)
217 let level = states[media.cacheKey]?.qualityIndex ?? 0429 states[media.cacheKey]?.attempted[index] = width
218 activeBuilds += 1430 activeBuilds += 1
219 DispatchQueue.global(qos: .userInitiated).async { [self] in431 DispatchQueue.global(qos: .userInitiated).async { [self] in
220 let r = buildChunk(media: media, index: index, level: level)432 let r = buildChunk(media: media, index: index, width: width, fps: fps)
221 DispatchQueue.main.async {433 DispatchQueue.main.async {
222 self.activeBuilds -= 1434 self.activeBuilds -= 1
223 var s = self.states[media.cacheKey] ?? MediaState()435 var s = self.states[media.cacheKey] ?? MediaState()
224 s.inFlight.remove(index)436 s.inFlight.remove(index)
225 if r.ok {437 if r.ok {
226 s.built.insert(index)438 s.built[index] = width
439 s.failed.remove(index)
227 s.version += 1440 s.version += 1
228 } else {441 } else if s.built[index] == nil {
442 // Only a hard failure when we have NOTHING; a failed
443 // upgrade just keeps the existing lower-quality chunk.
229 s.failed.insert(index)444 s.failed.insert(index)
230 }445 }
231 self.states[media.cacheKey] = s446 self.states[media.cacheKey] = s
232 if r.ok {447 if r.ok {
233 self.adaptQuality(key: media.cacheKey, level: level,448 self.persistWidths(key: media.cacheKey)
234 wall: r.wall, dur: r.dur, isNetwork: r.isNetwork)449 // Only realtime (urgent) builds inform the realtime
450 // controller — a slow, quality-first background build
451 // would falsely make it think the box can't keep up.
452 if urgent {
453 self.adaptQuality(key: media.cacheKey, level: level,
454 wall: r.wall, dur: r.dur, isNetwork: r.isNetwork)
455 }
235 }456 }
236 NotificationCenter.default.post(name: .mediaStatusChanged, object: nil)457 NotificationCenter.default.post(name: .mediaStatusChanged, object: nil)
237 MediaPipeline.shared.evictIfNeeded()458 MediaPipeline.shared.evictIfNeeded()
...@@ -243,7 +464,7 @@ final class ChunkManager {...@@ -243,7 +464,7 @@ final class ChunkManager {
243464
244 struct BuildResult { var ok: Bool; var wall: Double; var dur: Double; var isNetwork: Bool }465 struct BuildResult { var ok: Bool; var wall: Double; var dur: Double; var isNetwork: Bool }
245466
246 private func buildChunk(media: MediaItem, index: Int, level: Int) -> BuildResult {467 private func buildChunk(media: MediaItem, index: Int, width: Int, fps: Int) -> BuildResult {
247 let isNet = Self.isNetworkPath(media.path)468 let isNet = Self.isNetworkPath(media.path)
248 func fail(_ wall: Double = 0, _ dur: Double = 0) -> BuildResult {469 func fail(_ wall: Double = 0, _ dur: Double = 0) -> BuildResult {
249 BuildResult(ok: false, wall: wall, dur: dur, isNetwork: isNet)470 BuildResult(ok: false, wall: wall, dur: dur, isNetwork: isNet)
...@@ -257,8 +478,6 @@ final class ChunkManager {...@@ -257,8 +478,6 @@ final class ChunkManager {
257 let start = Double(index) * Self.chunkSeconds478 let start = Double(index) * Self.chunkSeconds
258 let dur = min(Self.chunkSeconds, media.duration - start)479 let dur = min(Self.chunkSeconds, media.duration - start)
259 guard dur > 0.01 else { return fail() }480 guard dur > 0.01 else { return fail() }
260 let q = Self.qualities[min(max(0, level), Self.qualities.count - 1)]
261 let fps = max(1, Int((media.fps / Double(q.fpsDivisor)).rounded()))
262481
263 func args(encoder: String) -> [String] {482 func args(encoder: String) -> [String] {
264 var a = ["-y", "-hwaccel", "videotoolbox",483 var a = ["-y", "-hwaccel", "videotoolbox",
...@@ -266,7 +485,7 @@ final class ChunkManager {...@@ -266,7 +485,7 @@ final class ChunkManager {
266 "-i", media.path,485 "-i", media.path,
267 "-t", String(format: "%.3f", dur),486 "-t", String(format: "%.3f", dur),
268 "-map", "0:v:0",487 "-map", "0:v:0",
269 "-vf", "scale='min(\(q.maxWidth),iw)':-2,fps=\(fps)",488 "-vf", "scale='min(\(width),iw)':-2,fps=\(fps)",
270 "-c:v", encoder, "-profile:v", "proxy"]489 "-c:v", encoder, "-profile:v", "proxy"]
271 if media.hasAudio { a += ["-map", "0:a:0", "-c:a", "pcm_s16le"] }490 if media.hasAudio { a += ["-map", "0:a:0", "-c:a", "pcm_s16le"] }
272 a.append(tmp.path)491 a.append(tmp.path)
...@@ -399,7 +618,7 @@ final class ChunkManager {...@@ -399,7 +618,7 @@ final class ChunkManager {
399 let s = state(for: media)618 let s = state(for: media)
400 let version = s.version619 let version = s.version
401 let chunkURLs = Dictionary(uniqueKeysWithValues:620 let chunkURLs = Dictionary(uniqueKeysWithValues:
402 s.built.map { ($0, chunkURL(key: key, index: $0)) })621 s.built.keys.map { ($0, chunkURL(key: key, index: $0)) })
403 Task.detached(priority: .userInitiated) {622 Task.detached(priority: .userInitiated) {
404 let (comp, playable) = await Self.assemble(media: media, chunkURLs: chunkURLs)623 let (comp, playable) = await Self.assemble(media: media, chunkURLs: chunkURLs)
405 await MainActor.run { [self] in624 await MainActor.run { [self] in
sequencer/Sources/Sequencer/Document.swift+51
...@@ -1,5 +1,56 @@...@@ -1,5 +1,56 @@
1import AppKit1import AppKit
22
3/// Document controller that reliably opens `.sq` project *packages*.
4///
5/// A `.sq` is a directory bundle. The app exports a UTType conforming to
6/// `com.apple.package`, but LaunchServices doesn't always know about it (a dev
7/// build rebuilt in place, or another app claiming `.sq`). When it doesn't, the
8/// system types a `.sq` as a plain `public.folder`: the stock Open panel won't
9/// let you choose it, and even if you could, `NSDocumentController` fails with
10/// "cannot open files in the folder format" because no document handles a
11/// folder. We fix both ends: run our own Open panel that makes `.sq` choosable,
12/// and force the document type for any `.sq` URL — regardless of what
13/// LaunchServices believes — so opening always resolves to `ProjectDocument`.
14final class ProjectDocumentController: NSDocumentController {
15 private static let projectType = "com.clover.sequencer.project"
16 private let sqPanelDelegate = SQOpenPanelDelegate()
17
18 /// Pin the document type for `.sq` URLs so it never resolves to a folder,
19 /// whatever LaunchServices thinks. Covers the Open panel, Open Recent, and
20 /// drag-drop paths alike (they all route through here).
21 override func typeForContents(of url: URL) throws -> String {
22 if url.pathExtension.lowercased() == "sq" { return Self.projectType }
23 return try super.typeForContents(of: url)
24 }
25
26 /// Drive the Open panel ourselves so a `.sq` bundle is always selectable —
27 /// the stock panel greys it out when the type reads as a plain folder.
28 override func openDocument(_ sender: Any?) {
29 let panel = NSOpenPanel()
30 panel.canChooseFiles = true
31 panel.canChooseDirectories = true // a `.sq` may read as a folder
32 panel.allowsMultipleSelection = true
33 panel.treatsFilePackagesAsDirectories = false
34 panel.delegate = sqPanelDelegate
35 panel.begin { [weak self] response in
36 guard response == .OK, let self else { return }
37 for url in panel.urls {
38 self.openDocument(withContentsOf: url, display: true) { _, _, error in
39 if let error { self.presentError(error) }
40 }
41 }
42 }
43 }
44}
45
46/// Enables only `.sq` items (package directories or legacy flat files) in the
47/// Open panel; other folders remain navigable but not choosable.
48final class SQOpenPanelDelegate: NSObject, NSOpenSavePanelDelegate {
49 func panel(_ sender: Any, shouldEnable url: URL) -> Bool {
50 url.pathExtension.lowercased() == "sq"
51 }
52}
53
3/// One open `.sq` project. The on-disk format is a **document package** (a54/// One open `.sq` project. The on-disk format is a **document package** (a
4/// directory Finder shows as one file):55/// directory Finder shows as one file):
5/// ```56/// ```
sequencer/Sources/Sequencer/PerfTest.swift created+109
...@@ -0,0 +1,109 @@
1import AppKit
2
3/// Headless draw-performance harness: `sequencer --perftest <file.sq>`.
4/// Loads a real project into an offscreen `TimelineView` and times `draw(_:)`
5/// while simulating a horizontal pan, at a few zoom levels, in both full-detail
6/// and simplified (mid-scroll) modes. Reports milliseconds per frame so timeline
7/// rendering changes can be judged against real numbers instead of feel.
8@MainActor
9func runPerfTest(path: String) {
10 let url = URL(fileURLWithPath: path)
11 var isDir: ObjCBool = false
12 FileManager.default.fileExists(atPath: url.path, isDirectory: &isDir)
13 let jsonURL = isDir.boolValue ? url.appendingPathComponent("project.json") : url
14 guard let data = try? Data(contentsOf: jsonURL),
15 let doc = try? JSONDecoder().decode(SequencerDocument.self, from: data) else {
16 print("perftest: could not read \(jsonURL.path)")
17 exit(1)
18 }
19
20 let ctx = DocumentContext.headless
21 ctx.session.apply(doc.view)
22 ctx.store.replaceForTest(doc.project)
23
24 let W: CGFloat = 2000, H: CGFloat = 600
25 let timeline = TimelineView(frame: NSRect(x: 0, y: 0, width: W, height: H))
26 let window = NSWindow(contentRect: NSRect(x: 0, y: 0, width: W, height: H),
27 styleMask: [.borderless], backing: .buffered, defer: false)
28 window.contentView = timeline
29
30 // Persistent bitmap-backed context: set current ONCE so we time draw(), not
31 // per-frame bitmap allocation.
32 let rep = timeline.bitmapImageRepForCachingDisplay(in: timeline.bounds)!
33 let gctx = NSGraphicsContext(bitmapImageRep: rep)!
34
35 let dur = timeline.testTimelineDuration
36 print(String(format: "project: %d clips, %.0f s span, view %.0f×%.0f",
37 doc.project.clips.count, dur, W, H))
38
39 let panSpan = max(1, dur * 0.5)
40
41 // filmstripImage loads thumbnails ASYNC on the main queue, so a tight draw
42 // loop that never spins the runloop measures the thumbnail-LESS path. Warm
43 // the cache: draw across the pan range at the current zoom and pump the
44 // runloop until the loads land, so we then measure real thumbnail blits.
45 func warmThumbnails() {
46 ctx.session.showFilmstrips = true
47 timeline.testSetScrolling(false)
48 NSGraphicsContext.saveGraphicsState()
49 NSGraphicsContext.current = gctx
50 for _ in 0..<5 {
51 for i in 0..<40 {
52 timeline.testSetOrigin(panSpan * Double(i) / 40)
53 timeline.testRedraw()
54 }
55 RunLoop.current.run(until: Date().addingTimeInterval(0.2))
56 }
57 NSGraphicsContext.restoreGraphicsState()
58 }
59
60 // Pan across the first half of the timeline over `frames` steps, timing each
61 // direct draw. Returns mean ms/frame.
62 func measure(scrolling: Bool, frames: Int = 120) -> Double {
63 timeline.testSetScrolling(scrolling)
64 NSGraphicsContext.saveGraphicsState()
65 NSGraphicsContext.current = gctx
66 defer { NSGraphicsContext.restoreGraphicsState() }
67 for _ in 0..<3 { timeline.testRedraw() } // warm up
68 let t0 = Date()
69 for i in 0..<frames {
70 timeline.testSetOrigin(panSpan * Double(i) / Double(frames))
71 timeline.testRedraw()
72 }
73 return Date().timeIntervalSince(t0) / Double(frames) * 1000
74 }
75
76 // pxPerSecond values: fit-all (everything on screen at once) up through
77 // progressively tighter section zooms; `empty` isolates fixed per-frame
78 // overhead (chrome + machinery) with ~no clips on screen.
79 let fitPps = max(0.05, Double(W - 26) / max(1, dur))
80 let zooms: [(String, Double)] = [
81 ("fit-all", fitPps),
82 ("section", 6),
83 ("tight", 30),
84 ("empty", 4000),
85 ]
86 ctx.session.showFilmstrips = true
87 print("mode zoom px/s visible ms/frame (fps) thumbs/frame")
88 for (name, pps) in zooms {
89 timeline.testSetPxPerSecond(pps)
90 timeline.testSetOrigin(0)
91 let visible = timeline.testVisibleClipCount
92 warmThumbnails()
93 // Count thumbnails actually blitted over one profiled pan pass.
94 DrawProf.on = true; DrawProf.thumbHits = 0
95 NSGraphicsContext.saveGraphicsState(); NSGraphicsContext.current = gctx
96 timeline.testSetScrolling(false)
97 for i in 0..<60 { timeline.testSetOrigin(panSpan * Double(i) / 60); timeline.testRedraw() }
98 NSGraphicsContext.restoreGraphicsState()
99 let thumbsPerFrame = DrawProf.thumbHits / 60
100 DrawProf.on = false
101 for (mode, scrolling) in [("detail ", false), ("scrolling", true)] {
102 let ms = measure(scrolling: scrolling)
103 print(String(format: "%@ %-9@ %7.2f %7d %8.2f %5.0f %6d",
104 mode, name as NSString, pps, visible, ms, 1000 / max(0.001, ms),
105 scrolling ? 0 : thumbsPerFrame))
106 }
107 }
108 exit(0)
109}
sequencer/Sources/Sequencer/PlaybackController.swift+228-45
...@@ -13,9 +13,18 @@ final class PlaybackController {...@@ -13,9 +13,18 @@ final class PlaybackController {
13 /// speed you left off — including a J/K/L shuttle speed. J/L themselves13 /// speed you left off — including a J/K/L shuttle speed. J/L themselves
14 /// ignore this and always start from ±1x.14 /// ignore this and always start from ±1x.
15 private var lastRate: Double = 115 private var lastRate: Double = 1
16 /// The normal forward speed Space / play uses, settable from the transport's
17 /// speed dropdown (default 1×). This is separate from the J/K/L shuttle,
18 /// which always walks its own 1,2,4…64 ladder — so choosing, say, 1.5× normal
19 /// playback leaves scrubbing untouched.
20 private(set) var playSpeed: Double = 1
16 private var anchorHost: Double = 021 private var anchorHost: Double = 0
17 private var anchorTime: Double = 022 private var anchorTime: Double = 0
18 private var pausedPlayhead: Double = 023 private var pausedPlayhead: Double = 0
24 /// Where the playhead sat when the CURRENT continuous playback run began,
25 /// so Escape can snap it back. Captured on the 0→moving transition (so a
26 /// mid-run shuttle speed change doesn't move it) and cleared on stop.
27 private var playbackStartPlayhead: Double?
19 private var timer: Timer?28 private var timer: Timer?
2029
21 /// Loop (cycle) range. Non-undoable session state, so it lives here rather30 /// Loop (cycle) range. Non-undoable session state, so it lives here rather
...@@ -51,8 +60,10 @@ final class PlaybackController {...@@ -51,8 +60,10 @@ final class PlaybackController {
51 } else if rate < 0, playhead <= 0 {60 } else if rate < 0, playhead <= 0 {
52 setRate(0); seek(to: 0)61 setRate(0); seek(to: 0)
53 }62 }
54 ctx.notify.post(name: .playheadChanged, object: nil)63 // Sync (which flips the double buffer at a cut) BEFORE the redraw, so the
64 // viewer reflects the flip on the same frame — no 1-tick lag at a cut.
55 ctx.players.sync()65 ctx.players.sync()
66 ctx.notify.post(name: .playheadChanged, object: nil)
56 }67 }
5768
58 /// Wrap the playhead back into the cycle range when it runs off the far69 /// Wrap the playhead back into the cycle range when it runs off the far
...@@ -68,10 +79,13 @@ final class PlaybackController {...@@ -68,10 +79,13 @@ final class PlaybackController {
6879
69 func setRate(_ newRate: Double) {80 func setRate(_ newRate: Double) {
70 let now = playhead81 let now = playhead
82 let wasStopped = rate == 0
71 rate = newRate83 rate = newRate
72 if newRate == 0 {84 if newRate == 0 {
73 pausedPlayhead = now85 pausedPlayhead = now
86 playbackStartPlayhead = nil
74 } else {87 } else {
88 if wasStopped { playbackStartPlayhead = now }
75 lastRate = newRate89 lastRate = newRate
76 anchorHost = CACurrentMediaTime()90 anchorHost = CACurrentMediaTime()
77 anchorTime = now91 anchorTime = now
...@@ -83,6 +97,34 @@ final class PlaybackController {...@@ -83,6 +97,34 @@ final class PlaybackController {
8397
84 func togglePlay() { setRate(isPlaying ? 0 : lastRate) }98 func togglePlay() { setRate(isPlaying ? 0 : lastRate) }
8599
100 /// Escape while playing: stop and snap the playhead back to where this
101 /// playback run began. Returns false when already paused (nothing to revert),
102 /// so the caller can fall back to a plain stop.
103 @discardableResult
104 func stopAndRevert() -> Bool {
105 guard isPlaying, let origin = playbackStartPlayhead else { return false }
106 setRate(0)
107 seek(to: origin)
108 return true
109 }
110
111 /// Set the normal play speed (from the transport dropdown). Applies live if
112 /// already playing — keeping the current direction — otherwise it becomes the
113 /// speed the next Space starts at. Clamped to a sane 0.1×–64× range.
114 func setPlaySpeed(_ speed: Double) {
115 playSpeed = max(0.1, min(64, speed))
116 if rate != 0 {
117 setRate(rate < 0 ? -playSpeed : playSpeed) // live; also updates lastRate
118 } else {
119 lastRate = playSpeed // so the next Space uses it
120 ctx.notify.post(name: .playheadChanged, object: nil)
121 }
122 let text = playSpeed == playSpeed.rounded()
123 ? String(format: "%.0f×", playSpeed) : String(format: "%g×", playSpeed)
124 NotificationCenter.default.post(name: .transientStatus, object: nil,
125 userInfo: ["text": "Playback speed: \(text)"])
126 }
127
86 /// J/K/L: each press in the moving direction doubles the rate (capped at128 /// J/K/L: each press in the moving direction doubles the rate (capped at
87 /// 64x); pressing the opposite direction halves it until it stops.129 /// 64x); pressing the opposite direction halves it until it stops.
88 func shuttle(_ direction: Double) {130 func shuttle(_ direction: Double) {
...@@ -111,6 +153,19 @@ final class PlaybackController {...@@ -111,6 +153,19 @@ final class PlaybackController {
111 seek(to: playhead + seconds)153 seek(to: playhead + seconds)
112 }154 }
113155
156 /// Shift the playhead by `delta` seconds, preserving playback continuity.
157 /// Unlike `seek`, this re-anchors WITHOUT forcing a hard resync — used by
158 /// ripple edits where content slides under the playhead by the same amount,
159 /// so every player is already on the right frame and must not hiccup.
160 func shift(by delta: Double) {
161 let target = max(0, playhead + delta)
162 pausedPlayhead = target
163 anchorHost = CACurrentMediaTime()
164 anchorTime = target
165 ctx.notify.post(name: .playheadChanged, object: nil)
166 ctx.players.sync(force: false)
167 }
168
114 // MARK: - Loop / cycle range (I / O / C)169 // MARK: - Loop / cycle range (I / O / C)
115170
116 /// Mark the in point at the playhead. A collapsed range (out ≤ in) drops171 /// Mark the in point at the playhead. A collapsed range (out ≤ in) drops
...@@ -197,10 +252,10 @@ final class TrackPlayer {...@@ -197,10 +252,10 @@ final class TrackPlayer {
197 }252 }
198253
199 private var currentMediaKey: String?254 private var currentMediaKey: String?
200 /// Chunk indices that were proxy-backed in the CURRENT item's composition255 /// Per-chunk proxy width baked into the CURRENT item's composition. A swap
201 /// (an item swap mid-playback is only worth its hiccup when it upgrades256 /// is only worth its hiccup when it improves the frame UNDER THE PLAYHEAD —
202 /// the frames under the playhead).257 /// either newly covered, or a sharper proxy than this item already has.
203 private var itemChunks: Set<Int> = []258 private var itemChunkWidths: [Int: Int] = [:]
204259
205 func setClip(_ clip: Clip?, media: MediaItem?, sourceTime: Double = 0) {260 func setClip(_ clip: Clip?, media: MediaItem?, sourceTime: Double = 0) {
206 guard let clip, let media else {261 guard let clip, let media else {
...@@ -234,27 +289,49 @@ final class TrackPlayer {...@@ -234,27 +289,49 @@ final class TrackPlayer {
234 } else {289 } else {
235 let (asset, version) = ctx.chunks.composition(for: media)290 let (asset, version) = ctx.chunks.composition(for: media)
236 let now = CACurrentMediaTime()291 let now = CACurrentMediaTime()
292 let ready = version != -2 // the real composition has assembled
237 let sameAsset = currentMediaKey == media.cacheKey && currentSourceURL == nil293 let sameAsset = currentMediaKey == media.cacheKey && currentSourceURL == nil
238 && player.currentItem != nil294 && player.currentItem != nil
239 var swap = !sameAsset295 var swap = false
240 if !swap, currentChunkVersion != version {296 if !ready {
241 if player.rate == 0 || currentChunkVersion == -2 {297 // Composition still assembling: do NOT install the empty
242 // Paused/scrubbing, or still on the placeholder while the298 // placeholder item — it shows black, can go .failed, and then
243 // first real composition assembled: swap freely.299 // the failure-retry below flashes it every couple of seconds.
244 swap = true300 // Leave the current item; the viewer stands in meanwhile.
301 swap = false
302 } else if !sameAsset {
303 swap = true // first real item, or the media changed
304 } else if currentChunkVersion != version {
305 // Same media, composition upgraded. Only reload when the frame
306 // UNDER THE PLAYHEAD actually changes what we can show — a chunk
307 // finishing elsewhere must not reset (and flash) the item.
308 let idx = ChunkManager.chunkIndex(forSource: sourceTime)
309 let have = ctx.chunks.builtWidths(media: media)[idx]
310 let had = itemChunkWidths[idx]
311 let sharperProxy = have != nil && (had ?? 0) < have!
312 if player.rate == 0 {
313 // PAUSED: a swap is a pure visual flash with no playback
314 // benefit, so swap only to REVEAL a frame we otherwise
315 // can't show at all — an unplayable original (DNx) whose
316 // covering chunk has just landed. Never swap to merely
317 // sharpen a still, and never trade a playable original
318 // (crisper than any proxy for a still) down to a proxy.
319 // Pending quality upgrades take effect on the next play/seek.
320 swap = sharperProxy && had == nil
321 && !ctx.chunks.originalPlayable(media: media)
245 } else {322 } else {
246 // Mid-playback, only swap when it UPGRADES the frames323 // PLAYING: adopt the proxy the moment it covers the playhead
247 // under the playhead (original/empty → rendered proxy).324 // (a NAS original may stutter), throttled so rapid
248 let idx = ChunkManager.chunkIndex(forSource: sourceTime)325 // completions don't hiccup the stream.
249 swap = !itemChunks.contains(idx)326 swap = sharperProxy && now - lastChunkSwap > 3
250 && ctx.chunks.isCovered(media: media, sourceTime: sourceTime)
251 && now - lastChunkSwap > 3
252 }327 }
253 }328 }
254 if itemFailed { swap = now - lastChunkSwap > 2 }329 // A failed stream is only worth re-swapping to recover DURING
330 // playback; while paused the retry just flashes with nothing gained.
331 if itemFailed, ready, player.rate != 0 { swap = now - lastChunkSwap > 2 }
255 if swap {332 if swap {
256 replaceItem(AVPlayerItem(asset: asset), media: media, url: nil, version: version)333 replaceItem(AVPlayerItem(asset: asset), media: media, url: nil, version: version)
257 itemChunks = ctx.chunks.builtChunks(media: media)334 itemChunkWidths = ctx.chunks.builtWidths(media: media)
258 lastChunkSwap = now335 lastChunkSwap = now
259 }336 }
260 }337 }
...@@ -264,11 +341,21 @@ final class TrackPlayer {...@@ -264,11 +341,21 @@ final class TrackPlayer {
264 }341 }
265342
266 private func replaceItem(_ item: AVPlayerItem, media: MediaItem, url: URL?, version: Int) {343 private func replaceItem(_ item: AVPlayerItem, media: MediaItem, url: URL?, version: Int) {
267 item.preferredForwardBufferDuration = lenientSync ? 8 : 1344 installItem(item)
268 player.replaceCurrentItem(with: item)
269 currentSourceURL = url345 currentSourceURL = url
270 currentMediaKey = media.cacheKey346 currentMediaKey = media.cacheKey
271 currentChunkVersion = version347 currentChunkVersion = version
348 }
349
350 /// Install a fresh item, holding it silent if we're mid-playback. A new item
351 /// starts at t=0; the syncTime call that always follows a swap (same sync
352 /// pass) seeks it to the live position and resumes. Without the hold it
353 /// blips wrong content from the file's head — audibly so on the audio track.
354 private func installItem(_ item: AVPlayerItem) {
355 item.preferredForwardBufferDuration = lenientSync ? 8 : 1
356 let wasPlaying = player.rate != 0
357 player.replaceCurrentItem(with: item)
358 if wasPlaying { player.rate = 0 }
272 itemFailed = false359 itemFailed = false
273 seekInFlight = false360 seekInFlight = false
274 pendingSeek = nil361 pendingSeek = nil
...@@ -329,10 +416,92 @@ final class TrackPlayer {...@@ -329,10 +416,92 @@ final class TrackPlayer {
329 }416 }
330}417}
331418
419/// Double-buffered video track: two `TrackPlayer`s so a cut to a DIFFERENT clip
420/// is gapless. The **front** player shows the clip under the playhead; as a cut
421/// approaches, the **back** player is prerolled to the next clip's first frame
422/// (loaded, decoded, parked, muted). At the cut the roles flip — the viewer just
423/// swaps which of its two layers is visible, and the already-warm back player
424/// resumes instantly, so there's no `replaceCurrentItem` black-frame / audio gap.
425///
426/// Only cuts to a different *media* need this; crossing into another clip of the
427/// same media keeps the item and just seeks (already gapless), so the back
428/// buffer is only spun up for a genuine media change.
429final class VideoTrackPlayer {
430 unowned var ctx: DocumentContext! {
431 didSet { a.ctx = ctx; b.ctx = ctx }
432 }
433 let a = TrackPlayer()
434 let b = TrackPlayer()
435 private(set) var frontIsA = true
436 var front: TrackPlayer { frontIsA ? a : b }
437 var back: TrackPlayer { frontIsA ? b : a }
438 var currentClipId: UUID? { front.currentClipId }
439
440 /// Spin up the next clip's buffer this many seconds before its cut — enough
441 /// to load + decode the first frame even off a NAS original.
442 private static let preroll = 1.5
443
444 func sync(ref: TrackRef, playhead: Double, rate: Double,
445 playheadMoved: Bool, force: Bool) {
446 let project = ctx.store.project
447 let cur = project.clipAt(track: ref, time: playhead, kind: .video)
448 let media = cur.flatMap { project.media($0.mediaId) }
449
450 // FLIP: the front is showing the wrong (previous) clip, but the back was
451 // prerolled to exactly the clip now under the playhead → hand over.
452 if let cur, front.currentClipId != cur.id, back.currentClipId == cur.id {
453 frontIsA.toggle()
454 }
455
456 // FRONT: the clip under the playhead, audible.
457 front.setClip(cur, media: media, sourceTime: cur?.sourceTime(at: playhead) ?? 0)
458 if let cur, media != nil {
459 let expected = cur.sourceTime(at: playhead)
460 if rate != 0 || playheadMoved || force {
461 front.syncTime(expected: expected, rate: rate * cur.speed, force: force)
462 }
463 }
464
465 // BACK: preroll the next different-media clip when its cut is imminent,
466 // parked (rate 0) and muted at its first frame. Forward playback only —
467 // a reverse/scrub cut falls back to the plain (tiny-gap) swap.
468 var buffering = false
469 if rate >= 0, let next = nextDifferentClip(on: ref, after: playhead, current: cur),
470 next.start - playhead <= Self.preroll,
471 let nextMedia = project.media(next.mediaId) {
472 if back.currentClipId != next.id {
473 back.setClip(next, media: nextMedia, sourceTime: next.srcIn)
474 }
475 back.player.isMuted = true
476 back.syncTime(expected: next.srcIn, rate: 0, force: false)
477 buffering = true
478 }
479 if !buffering, back.currentClipId != nil {
480 back.setClip(nil, media: nil) // release the idle buffer
481 }
482 }
483
484 /// The next clip on this track (in time) whose media differs from `current`
485 /// — i.e. the next cut that would otherwise flash. Same-media continuations
486 /// don't need a buffer.
487 private func nextDifferentClip(on ref: TrackRef, after t: Double,
488 current: Clip?) -> Clip? {
489 ctx.store.project.clips
490 .filter { $0.track == ref && $0.kind == .video && $0.start > t + 1e-6
491 && $0.mediaId != current?.mediaId }
492 .min { $0.start < $1.start }
493 }
494
495 func clear() {
496 a.player.replaceCurrentItem(with: nil)
497 b.player.replaceCurrentItem(with: nil)
498 }
499}
500
332final class PlayerManager {501final class PlayerManager {
333 /// The document context that owns this manager. Set at construction.502 /// The document context that owns this manager. Set at construction.
334 unowned var ctx: DocumentContext!503 unowned var ctx: DocumentContext!
335 private(set) var players: [TrackRef: TrackPlayer] = [:]504 private(set) var players: [TrackRef: VideoTrackPlayer] = [:]
336 /// Audio clips get one player per CLIP (not per track) so overlapping505 /// Audio clips get one player per CLIP (not per track) so overlapping
337 /// audio layers all sound at once.506 /// audio layers all sound at once.
338 private(set) var audioPlayers: [UUID: TrackPlayer] = [:]507 private(set) var audioPlayers: [UUID: TrackPlayer] = [:]
...@@ -343,7 +512,13 @@ final class PlayerManager {...@@ -343,7 +512,13 @@ final class PlayerManager {
343 // and finished proxies should replace original/filmstrip playback.512 // and finished proxies should replace original/filmstrip playback.
344 NotificationCenter.default.addObserver(513 NotificationCenter.default.addObserver(
345 forName: .projectChanged, object: nil, queue: .main) { [weak self] _ in514 forName: .projectChanged, object: nil, queue: .main) { [weak self] _ in
346 self?.sync(force: true)515 guard let self else { return }
516 // While playing, the 60 Hz tick already keeps players synced. Forcing
517 // a hard resync on every edit reseeks every player and audibly stutters
518 // the audio; only edits that actually move content under the playhead
519 // then drift into a normal (throttled) resync. Force only when paused,
520 // where nothing else refreshes the frame under the playhead.
521 self.sync(force: self.ctx.playback.rate == 0)
347 }522 }
348 NotificationCenter.default.addObserver(523 NotificationCenter.default.addObserver(
349 forName: .mediaStatusChanged, object: nil, queue: .main) { [weak self] _ in524 forName: .mediaStatusChanged, object: nil, queue: .main) { [weak self] _ in
...@@ -352,9 +527,9 @@ final class PlayerManager {...@@ -352,9 +527,9 @@ final class PlayerManager {
352 }527 }
353 }528 }
354529
355 func player(for ref: TrackRef) -> TrackPlayer {530 func videoTrack(for ref: TrackRef) -> VideoTrackPlayer {
356 if let p = players[ref] { return p }531 if let p = players[ref] { return p }
357 let p = TrackPlayer()532 let p = VideoTrackPlayer()
358 p.ctx = ctx533 p.ctx = ctx
359 players[ref] = p534 players[ref] = p
360 return p535 return p
...@@ -370,7 +545,7 @@ final class PlayerManager {...@@ -370,7 +545,7 @@ final class PlayerManager {
370 // Drop players for removed tracks.545 // Drop players for removed tracks.
371 let liveRefs = Set(project.tracks.indices.map { TrackRef.video($0) })546 let liveRefs = Set(project.tracks.indices.map { TrackRef.video($0) })
372 for (ref, p) in players where !liveRefs.contains(ref) {547 for (ref, p) in players where !liveRefs.contains(ref) {
373 p.player.replaceCurrentItem(with: nil)548 p.clear()
374 players.removeValue(forKey: ref)549 players.removeValue(forKey: ref)
375 }550 }
376551
...@@ -379,37 +554,43 @@ final class PlayerManager {...@@ -379,37 +554,43 @@ final class PlayerManager {
379554
380 for i in project.tracks.indices {555 for i in project.tracks.indices {
381 let ref = TrackRef.video(i)556 let ref = TrackRef.video(i)
382 let tp = player(for: ref)557 videoTrack(for: ref).sync(ref: ref, playhead: playhead, rate: rate,
383 let clip = project.clipAt(track: ref, time: playhead, kind: .video)558 playheadMoved: playheadMoved, force: force)
384 let media = clip.flatMap { project.media($0.mediaId) }
385 tp.setClip(clip, media: media,
386 sourceTime: clip?.sourceTime(at: playhead) ?? 0)
387 guard let clip, let media else { continue }
388 let expected = clip.sourceTime(at: playhead)
389 ctx.chunks.want(media: media, sourceTime: expected)
390 if rate != 0 || playheadMoved || force {
391 // Time-stretched clips chase the clock at a scaled rate.
392 tp.syncTime(expected: expected, rate: rate * clip.speed, force: force)
393 }
394 }559 }
395560
561 // Recompute the proxy build order from the (moved) playhead + direction;
562 // self-throttled, so calling it every tick is cheap.
563 ctx.chunks.updateDemand()
564
396 syncAudio(project: project, playhead: playhead, rate: rate,565 syncAudio(project: project, playhead: playhead, rate: rate,
397 playheadMoved: playheadMoved, force: force)566 playheadMoved: playheadMoved, force: force)
398 }567 }
399568
400 /// Layered audio: every audio clip under the playhead plays through its569 /// How far ahead of a clip's start we spin up (and preroll) its player, and
401 /// own player, with the fade envelope applied as volume.570 /// how long we keep a just-ended one. The lookahead is the key to gapless
571 /// audio cuts: the next clip is already playing (silently — its fade gain is
572 /// 0 until the playhead reaches it) and synced to the master clock BEFORE its
573 /// cut, so crossing the boundary is a pure volume handover with no cold-start
574 /// gap. The linger avoids tearing a player down the instant it ends.
575 private static let audioLookahead = 1.0
576 private static let audioLinger = 0.5
577
578 /// Layered audio: every audio clip near the playhead plays through its own
579 /// player, with the fade envelope applied as volume. Players for clips just
580 /// ahead of the playhead are kept running (silent) so cuts are seamless.
402 private func syncAudio(project: ProjectModel, playhead: Double, rate: Double,581 private func syncAudio(project: ProjectModel, playhead: Double, rate: Double,
403 playheadMoved: Bool, force: Bool) {582 playheadMoved: Bool, force: Bool) {
404 let active = project.clips.filter {583 let windowed = project.clips.filter {
405 $0.kind == .audio && playhead >= $0.start && playhead < $0.end584 $0.kind == .audio
585 && playhead + Self.audioLookahead >= $0.start
586 && playhead - Self.audioLinger < $0.end
406 }587 }
407 let activeIds = Set(active.map(\.id))588 let windowedIds = Set(windowed.map(\.id))
408 for (id, p) in audioPlayers where !activeIds.contains(id) {589 for (id, p) in audioPlayers where !windowedIds.contains(id) {
409 p.player.replaceCurrentItem(with: nil)590 p.player.replaceCurrentItem(with: nil)
410 audioPlayers.removeValue(forKey: id)591 audioPlayers.removeValue(forKey: id)
411 }592 }
412 for clip in active {593 for clip in windowed {
413 guard let media = project.media(clip.mediaId) else { continue }594 guard let media = project.media(clip.mediaId) else { continue }
414 let ap: TrackPlayer595 let ap: TrackPlayer
415 if let existing = audioPlayers[clip.id] {596 if let existing = audioPlayers[clip.id] {
...@@ -422,6 +603,8 @@ final class PlayerManager {...@@ -422,6 +603,8 @@ final class PlayerManager {
422 }603 }
423 let expected = clip.srcIn + (playhead - clip.start)604 let expected = clip.srcIn + (playhead - clip.start)
424 ap.setClip(clip, media: media, sourceTime: expected)605 ap.setClip(clip, media: media, sourceTime: expected)
606 // audioGain is 0 outside [start, end], so a prerolled upcoming clip
607 // stays silent until its cut, then hands over with no gap.
425 ap.player.volume = Float(audioGain(clip, at: playhead))608 ap.player.volume = Float(audioGain(clip, at: playhead))
426 if rate != 0 || playheadMoved || force {609 if rate != 0 || playheadMoved || force {
427 ap.syncTime(expected: expected, rate: rate, force: force)610 ap.syncTime(expected: expected, rate: rate, force: force)
sequencer/Sources/Sequencer/Store.swift+45-22
...@@ -26,23 +26,47 @@ final class Store {...@@ -26,23 +26,47 @@ final class Store {
26 didSet { if selection != oldValue { post(.selectionChanged) } }26 didSet { if selection != oldValue { post(.selectionChanged) } }
27 }27 }
2828
29 private var undoStack: [ProjectModel] = []29 /// An undo entry is the model plus the ephemeral cursor state (selection
30 private var redoStack: [ProjectModel] = []30 /// and playhead) as it stood before the edit. Restoring one puts the
31 private var gestureBase: ProjectModel?31 /// selection and playhead back too, so undo steps backward in time rather
32 /// than just reverting clip geometry.
33 private struct Snapshot {
34 var model: ProjectModel
35 var selection: Set<UUID>
36 var playhead: Double
37 }
38
39 private var undoStack: [Snapshot] = []
40 private var redoStack: [Snapshot] = []
41 private var gestureBase: Snapshot?
3242
33 var canUndo: Bool { !undoStack.isEmpty || gestureBase != nil }43 var canUndo: Bool { !undoStack.isEmpty || gestureBase != nil }
34 var canRedo: Bool { !redoStack.isEmpty }44 var canRedo: Bool { !redoStack.isEmpty }
3545
46 private func snapshot() -> Snapshot {
47 Snapshot(model: project, selection: selection, playhead: ctx.playback.playhead)
48 }
49
50 /// Restore a snapshot wholesale: model, selection (dropping any clips that
51 /// no longer exist), and playhead.
52 private func restore(_ s: Snapshot) {
53 project = s.model
54 selection = s.selection.intersection(Set(project.clips.map(\.id)))
55 ctx.playback.seek(to: s.playhead)
56 changed()
57 }
58
36 // MARK: - Mutation59 // MARK: - Mutation
3760
38 /// One-shot undoable mutation.61 /// One-shot undoable mutation.
39 func mutate(_ body: (inout ProjectModel) -> Void) {62 func mutate(_ body: (inout ProjectModel) -> Void) {
40 precondition(gestureBase == nil, "mutate() during an open gesture")63 precondition(gestureBase == nil, "mutate() during an open gesture")
64 let before = snapshot()
41 var copy = project65 var copy = project
42 body(&copy)66 body(&copy)
43 copy.normalizeStoryboards()67 copy.normalizeStoryboards()
44 guard copy != project else { return }68 guard copy != project else { return }
45 pushUndo(project)69 pushUndo(before)
46 project = copy70 project = copy
47 pruneSelection()71 pruneSelection()
48 changed()72 changed()
...@@ -53,13 +77,13 @@ final class Store {...@@ -53,13 +77,13 @@ final class Store {
53 /// so there is no accumulation error.77 /// so there is no accumulation error.
54 func beginGesture() {78 func beginGesture() {
55 precondition(gestureBase == nil)79 precondition(gestureBase == nil)
56 gestureBase = project80 gestureBase = snapshot()
57 }81 }
5882
59 var gestureBaseModel: ProjectModel? { gestureBase }83 var gestureBaseModel: ProjectModel? { gestureBase?.model }
6084
61 func updateGesture(_ body: (inout ProjectModel) -> Void) {85 func updateGesture(_ body: (inout ProjectModel) -> Void) {
62 guard let base = gestureBase else { return }86 guard let base = gestureBase?.model else { return }
63 var copy = base87 var copy = base
64 body(&copy)88 body(&copy)
65 copy.normalizeStoryboards()89 copy.normalizeStoryboards()
...@@ -84,7 +108,7 @@ final class Store {...@@ -84,7 +108,7 @@ final class Store {
84 post(.projectChanged)108 post(.projectChanged)
85 }109 }
86 gestureBase = nil110 gestureBase = nil
87 if project != base {111 if project != base.model {
88 pushUndo(base)112 pushUndo(base)
89 pruneSelection()113 pruneSelection()
90 changed()114 changed()
...@@ -99,10 +123,13 @@ final class Store {...@@ -99,10 +123,13 @@ final class Store {
99 post(.projectChanged)123 post(.projectChanged)
100 }124 }
101125
102 /// Commit a finished preview as ONE undo step, given the pre-preview snapshot.126 /// Commit a finished preview as ONE undo step, given the pre-preview model.
103 func commitPreview(from snapshot: ProjectModel) {127 /// A preview (e.g. the colour picker) doesn't touch selection or playhead,
104 guard project != snapshot else { return }128 /// so the current cursor state is also the pre-preview cursor state.
105 pushUndo(snapshot)129 func commitPreview(from model: ProjectModel) {
130 guard project != model else { return }
131 pushUndo(Snapshot(model: model, selection: selection,
132 playhead: ctx.playback.playhead))
106 pruneSelection()133 pruneSelection()
107 changed()134 changed()
108 }135 }
...@@ -110,28 +137,24 @@ final class Store {...@@ -110,28 +137,24 @@ final class Store {
110 func cancelGesture() {137 func cancelGesture() {
111 guard let base = gestureBase else { return }138 guard let base = gestureBase else { return }
112 gestureBase = nil139 gestureBase = nil
113 project = base140 project = base.model
114 post(.projectChanged)141 post(.projectChanged)
115 }142 }
116143
117 func undo() {144 func undo() {
118 if gestureBase != nil { cancelGesture(); return }145 if gestureBase != nil { cancelGesture(); return }
119 guard let prev = undoStack.popLast() else { return }146 guard let prev = undoStack.popLast() else { return }
120 redoStack.append(project)147 redoStack.append(snapshot())
121 project = prev148 restore(prev)
122 pruneSelection()
123 changed()
124 }149 }
125150
126 func redo() {151 func redo() {
127 guard let next = redoStack.popLast() else { return }152 guard let next = redoStack.popLast() else { return }
128 undoStack.append(project)153 undoStack.append(snapshot())
129 project = next154 restore(next)
130 pruneSelection()
131 changed()
132 }155 }
133156
134 private func pushUndo(_ snapshot: ProjectModel) {157 private func pushUndo(_ snapshot: Snapshot) {
135 undoStack.append(snapshot)158 undoStack.append(snapshot)
136 if undoStack.count > 500 { undoStack.removeFirst() }159 if undoStack.count > 500 { undoStack.removeFirst() }
137 redoStack.removeAll()160 redoStack.removeAll()
sequencer/Sources/Sequencer/TimelineView.swift+408-102
...@@ -1,5 +1,30 @@...@@ -1,5 +1,30 @@
1import AppKit1import AppKit
22
3/// Dev-only per-section draw profiler (enabled by the `--perftest` harness).
4/// Zero overhead when `on` is false.
5enum DrawProf {
6 static var on = false
7 static var acc: [String: Double] = [:]
8 static var order: [String] = []
9 static var thumbHits = 0 // filmstrip images actually blitted (cache hits)
10 @inline(__always) static func t<T>(_ label: String, _ body: () -> T) -> T {
11 if !on { return body() }
12 let t0 = DispatchTime.now().uptimeNanoseconds
13 let r = body()
14 let dt = Double(DispatchTime.now().uptimeNanoseconds - t0) / 1e6
15 if acc[label] == nil { order.append(label) }
16 acc[label, default: 0] += dt
17 return r
18 }
19 static func reset() { acc = [:]; order = [] }
20 static func report(frames: Int) {
21 for k in order {
22 print(String(format: " %-12@ %7.3f ms/frame", k as NSString,
23 acc[k]! / Double(frames)))
24 }
25 }
26}
27
3/// The timeline: ruler, Fusion comps band, track lanes, clips, playhead.28/// The timeline: ruler, Fusion comps band, track lanes, clips, playhead.
4/// Tracks are unnamed and color-coded; new tracks appear dynamically when a29/// Tracks are unnamed and color-coded; new tracks appear dynamically when a
5/// clip is dragged below the last lane (two rows down = two new tracks).30/// clip is dragged below the last lane (two rows down = two new tracks).
...@@ -27,6 +52,9 @@ final class TimelineView: NSView {...@@ -27,6 +52,9 @@ final class TimelineView: NSView {
27 oldValue.notify.removeObserver(self, name: .playheadChanged, object: nil)52 oldValue.notify.removeObserver(self, name: .playheadChanged, object: nil)
28 ctx.notify.addObserver(self, selector: #selector(playheadMoved),53 ctx.notify.addObserver(self, selector: #selector(playheadMoved),
29 name: .playheadChanged, object: nil)54 name: .playheadChanged, object: nil)
55 // New document ⇒ new model; the scene cache must rebuild even though
56 // no `.projectChanged` fires for the context swap itself.
57 sceneDirty = true
30 }58 }
31 }59 }
32 private var store: Store { ctx.store }60 private var store: Store { ctx.store }
...@@ -60,7 +88,7 @@ final class TimelineView: NSView {...@@ -60,7 +88,7 @@ final class TimelineView: NSView {
6088
61 required init?(coder: NSCoder) { fatalError() }89 required init?(coder: NSCoder) { fatalError() }
6290
63 @objc private func redraw() { needsDisplay = true }91 @objc private func redraw() { sceneDirty = true; needsDisplay = true }
6492
65 @objc private func playheadMoved() {93 @objc private func playheadMoved() {
66 // Auto-follow while playing.94 // Auto-follow while playing.
...@@ -192,19 +220,172 @@ final class TimelineView: NSView {...@@ -192,19 +220,172 @@ final class TimelineView: NSView {
192220
193 private var panelNamesCache: [UUID: String] = [:]221 private var panelNamesCache: [UUID: String] = [:]
194 private var linkedSelectionCache: Set<UUID> = []222 private var linkedSelectionCache: Set<UUID> = []
223 // Per-lane clips (sorted by start) and overlap ranges, grouped ONCE per
224 // model change rather than re-filtered/re-sorted for every lane on every
225 // frame. Rebuilt lazily when `sceneDirty` is set — which `redraw()` does on
226 // any model/selection/media/view/comps change. Scrolling, zooming and the
227 // 60 Hz playhead only set `needsDisplay` (not `sceneDirty`), so a pan over a
228 // large project is now a redraw of cached geometry, not a full recompute.
229 private var clipsByLane: [TrackRef: [Clip]] = [:]
230 private var overlapsByLane: [TrackRef: [ClipOverlap]] = [:]
231 private var mediaById: [UUID: MediaItem] = [:]
232 private var sceneDirty = true
233
234 /// Clip-title text attributes — hoisted out of the per-clip loop so we
235 /// don't rebuild the dictionary (and re-resolve the font) for every clip on
236 /// every frame.
237 private static let titleAttrs: [NSAttributedString.Key: Any] = [
238 .font: NSFont.systemFont(ofSize: 9.5, weight: .medium),
239 .foregroundColor: NSColor(calibratedWhite: 0.92, alpha: 1),
240 ]
195241
196 override func draw(_ dirtyRect: NSRect) {242 /// SF Symbols, tinted and baked into flat bitmaps, cached by `key`. Building
197 Theme.timelineBg.setFill()243 /// an SF Symbol and tinting it (`tinted` does a `lockFocus` composite) *per
198 bounds.fill()244 /// draw* was the single biggest timeline draw cost: nearly every clip is
199245 /// linked, so the link/mute badges alone ran hundreds of times a frame, and
246 /// the track-header buttons re-baked every frame too. Cached, drawing a badge
247 /// is a plain blit. Main-thread only (all drawing is).
248 private static var symbolCache: [String: NSImage] = [:]
249 static func bakedSymbol(_ name: String, pointSize: CGFloat = 0,
250 weight: NSFont.Weight = .regular,
251 tint: NSColor, key: String) -> NSImage? {
252 if let img = symbolCache[key] { return img }
253 var base = NSImage(systemSymbolName: name, accessibilityDescription: name)
254 if pointSize > 0 {
255 base = base?.withSymbolConfiguration(.init(pointSize: pointSize, weight: weight))
256 }
257 guard let tinted = base?.tinted(tint) else { return nil }
258 // Bake into a 2× bitmap so the flattened badge stays crisp on Retina
259 // (a plain `lockFocus` would capture at whatever scale is current).
260 let size = tinted.size
261 guard size.width > 0, size.height > 0,
262 let rep = NSBitmapImageRep(
263 bitmapDataPlanes: nil, pixelsWide: Int(size.width * 2),
264 pixelsHigh: Int(size.height * 2), bitsPerSample: 8, samplesPerPixel: 4,
265 hasAlpha: true, isPlanar: false, colorSpaceName: .deviceRGB,
266 bytesPerRow: 0, bitsPerPixel: 0) else { return nil }
267 rep.size = size
268 NSGraphicsContext.saveGraphicsState()
269 NSGraphicsContext.current = NSGraphicsContext(bitmapImageRep: rep)
270 tinted.draw(in: NSRect(origin: .zero, size: size))
271 NSGraphicsContext.restoreGraphicsState()
272 let baked = NSImage(size: size)
273 baked.addRepresentation(rep)
274 symbolCache[key] = baked
275 return baked
276 }
277 private static var mutedBadge: NSImage? {
278 bakedSymbol("speaker.slash.fill", tint: .white, key: "badge.muted")
279 }
280 private static var linkBadge: NSImage? {
281 bakedSymbol("link", tint: .white, key: "badge.link")
282 }
283
284 /// True while the user is actively scrolling/zooming (cleared ~120 ms after
285 /// the last scroll event, which triggers one full-detail redraw). On its own
286 /// it changes nothing — clips draw at full detail while scrolling. It only
287 /// gates the `lightScroll` fallback: a *very dense* frame (see
288 /// `denseScrollClips`) sheds the heavy filmstrip/waveform pass mid-scroll so
289 /// a pathological timeline can't stall, restoring detail the moment it settles.
290 private var isScrolling = false
291 private var scrollSettleToken = 0
292
293 /// Mark a scroll/zoom in progress and schedule the settle redraw.
294 private func noteScrolling() {
295 isScrolling = true
296 scrollSettleToken &+= 1
297 let token = scrollSettleToken
298 DispatchQueue.main.asyncAfter(deadline: .now() + 0.12) { [weak self] in
299 guard let self, self.scrollSettleToken == token else { return }
300 self.isScrolling = false
301 self.needsDisplay = true
302 }
303 }
304
305 private func rebuildSceneIfNeeded() {
306 guard sceneDirty else { return }
200 panelNamesCache = project.panelNames()307 panelNamesCache = project.panelNames()
201 // Link-mates of the selection get an aqua outline (they act selected).308 // Link-mates of the selection get an aqua outline (they act selected).
202 linkedSelectionCache = project.expandLinks(store.selection)309 linkedSelectionCache = project.expandLinks(store.selection)
203 .subtracting(store.selection)310 .subtracting(store.selection)
311 clipsByLane = Dictionary(grouping: project.clips, by: \.track)
312 for ref in clipsByLane.keys {
313 clipsByLane[ref]?.sort { $0.start < $1.start }
314 }
315 // `overlaps()` (no arg) computes every lane in one pass; grouping by
316 // track yields the same per-lane arrays `overlaps(on:)` returned.
317 overlapsByLane = Dictionary(grouping: project.overlaps(), by: \.track)
318 mediaById = Dictionary(project.media.map { ($0.id, $0) },
319 uniquingKeysWith: { a, _ in a })
320 // Per-lane colours: the track colour and its black-blended body/strip
321 // shades depend only on the lane's hue, but were re-derived (an NSColor
322 // alloc + two colour-space `blended()` conversions) for every clip every
323 // frame. Compute them once per lane here.
324 laneColorCache = [:]
325 for ref in project.laneRefs {
326 let base = trackColor(ref)
327 laneColorCache[ref] = LaneColors(
328 base: base,
329 videoBody: base.blended(withFraction: 0.75, of: .black) ?? base,
330 audioBody: base.blended(withFraction: 0.82, of: .black) ?? base,
331 strip: (base.blended(withFraction: 0.5, of: .black) ?? base)
332 .withAlphaComponent(0.85))
333 }
334 sceneDirty = false
335 }
336
337 private struct LaneColors {
338 let base: NSColor // borders, waveform, filmstrip tint
339 let videoBody: NSColor // video clip body fill
340 let audioBody: NSColor // audio clip body fill
341 let strip: NSColor // title-strip fill
342 }
343 private var laneColorCache: [TrackRef: LaneColors] = [:]
344 private func laneColors(_ ref: TrackRef) -> LaneColors {
345 if let c = laneColorCache[ref] { return c }
346 let base = trackColor(ref)
347 return LaneColors(base: base,
348 videoBody: base.blended(withFraction: 0.75, of: .black) ?? base,
349 audioBody: base.blended(withFraction: 0.82, of: .black) ?? base,
350 strip: (base.blended(withFraction: 0.5, of: .black) ?? base)
351 .withAlphaComponent(0.85))
352 }
353
354 /// Clips intersecting the visible time window, across all lanes. Cheap: the
355 /// per-lane arrays are sorted, so it culls the same way the draw loop does.
356 private func visibleClipCount() -> Int {
357 let left = originSecond
358 let right = originSecond + Double(bounds.width - headerW) / pxPerSecond
359 var n = 0
360 for ref in project.laneRefs {
361 for c in clipsByLane[ref] ?? [] {
362 if c.start > right { break }
363 if c.end < left { continue }
364 n += 1
365 }
366 }
367 return n
368 }
369
370 /// While actively scrolling a *very dense* frame, shed the heavy filmstrip/
371 /// waveform pass so the pan stays fluid; it returns the instant the scroll
372 /// settles. Ordinary-density views keep full detail — thumbnails, waveforms
373 /// and labels — even mid-scroll, so nothing visibly "drops out" in normal use.
374 private var lightScroll = false
375 private static let denseScrollClips = 350
376
377 override func draw(_ dirtyRect: NSRect) {
378 Theme.timelineBg.setFill()
379 bounds.fill()
380
381 DrawProf.t("scene") { rebuildSceneIfNeeded() }
382 lightScroll = isScrolling && visibleClipCount() > Self.denseScrollClips
204 scrollY = min(scrollY, maxScrollY)383 scrollY = min(scrollY, maxScrollY)
205 let rows = project.laneRefs384 let rows = project.laneRefs
206 for row in 0..<rows.count {385 DrawProf.t("lanes") {
207 drawLane(row: row, ref: rows[row])386 for row in 0..<rows.count {
387 drawLane(row: row, ref: rows[row])
388 }
208 }389 }
209 drawDragHintLanes()390 drawDragHintLanes()
210 drawFileDropPreview()391 drawFileDropPreview()
...@@ -212,9 +393,11 @@ final class TimelineView: NSView {...@@ -212,9 +393,11 @@ final class TimelineView: NSView {
212 // Opaque header column so clips never show behind the buttons.393 // Opaque header column so clips never show behind the buttons.
213 Theme.timelineBg.setFill()394 Theme.timelineBg.setFill()
214 NSRect(x: 0, y: rulerH, width: headerW, height: bounds.height - rulerH).fill()395 NSRect(x: 0, y: rulerH, width: headerW, height: bounds.height - rulerH).fill()
215 drawFusionHeader()396 DrawProf.t("headers") {
216 for row in 0..<rows.count {397 drawFusionHeader()
217 drawTrackHeader(row: row, ref: rows[row], lane: laneRect(row: row))398 for row in 0..<rows.count {
399 drawTrackHeader(row: row, ref: rows[row], lane: laneRect(row: row))
400 }
218 }401 }
219 drawRuler()402 drawRuler()
220 drawInOut()403 drawInOut()
...@@ -314,11 +497,21 @@ final class TimelineView: NSView {...@@ -314,11 +497,21 @@ final class TimelineView: NSView {
314 (ref == .storyboard ? Theme.storyboardLaneBg : Theme.laneBg).setFill()497 (ref == .storyboard ? Theme.storyboardLaneBg : Theme.laneBg).setFill()
315 NSBezierPath(roundedRect: lane, xRadius: 4, yRadius: 4).fill()498 NSBezierPath(roundedRect: lane, xRadius: 4, yRadius: 4).fill()
316499
317 let overlaps = project.overlaps(on: ref)500 let overlaps = overlapsByLane[ref] ?? []
318 let overlappingIds = Set(overlaps.flatMap { [$0.a.id, $0.b.id] })501 let overlappingIds = Set(overlaps.flatMap { [$0.a.id, $0.b.id] })
319502
320 for clip in project.clips(on: ref) {503 // Horizontal culling: clips are sorted by start, so once one starts past
321 drawClip(clip, row: row, ref: ref, overlapping: overlappingIds.contains(clip.id))504 // the right edge every later clip does too — stop. Clips ending before
505 // the left edge are skipped. Keeps the loop proportional to what's
506 // on-screen, not to the whole (possibly huge) lane.
507 let leftSec = originSecond
508 let rightSec = originSecond + Double(bounds.width - headerW) / pxPerSecond
509 let colors = laneColors(ref)
510 for clip in clipsByLane[ref] ?? [] {
511 if clip.start > rightSec { break }
512 if clip.end < leftSec { continue }
513 drawClip(clip, row: row, ref: ref, colors: colors,
514 overlapping: overlappingIds.contains(clip.id))
322 }515 }
323516
324 // Bright red overlap ranges on top of the clip bodies.517 // Bright red overlap ranges on top of the clip bodies.
...@@ -343,9 +536,9 @@ final class TimelineView: NSView {...@@ -343,9 +536,9 @@ final class TimelineView: NSView {
343 private func drawHeaderButton(_ symbolName: String, in r: NSRect, on: Bool) {536 private func drawHeaderButton(_ symbolName: String, in r: NSRect, on: Bool) {
344 (on ? NSColor.white : NSColor.black.withAlphaComponent(0.35)).setFill()537 (on ? NSColor.white : NSColor.black.withAlphaComponent(0.35)).setFill()
345 NSBezierPath(ovalIn: r).fill()538 NSBezierPath(ovalIn: r).fill()
346 guard let base = NSImage(systemSymbolName: symbolName, accessibilityDescription: nil)?539 let tint = on ? NSColor.black : NSColor(calibratedWhite: 0.95, alpha: 0.9)
347 .withSymbolConfiguration(.init(pointSize: 9, weight: .bold)) else { return }540 guard let img = Self.bakedSymbol(symbolName, pointSize: 9, weight: .bold,
348 let img = base.tinted(on ? .black : NSColor(calibratedWhite: 0.95, alpha: 0.9))541 tint: tint, key: "hdr.\(symbolName).\(on)") else { return }
349 let s = img.size542 let s = img.size
350 img.draw(in: NSRect(x: r.midX - s.width / 2, y: r.midY - s.height / 2,543 img.draw(in: NSRect(x: r.midX - s.width / 2, y: r.midY - s.height / 2,
351 width: s.width, height: s.height),544 width: s.width, height: s.height),
...@@ -479,11 +672,12 @@ final class TimelineView: NSView {...@@ -479,11 +672,12 @@ final class TimelineView: NSView {
479 }672 }
480 }673 }
481674
482 private func drawClip(_ clip: Clip, row: Int, ref: TrackRef, overlapping: Bool) {675 private func drawClip(_ clip: Clip, row: Int, ref: TrackRef, colors: LaneColors,
676 overlapping: Bool) {
483 let rect = clipRect(clip, row: row)677 let rect = clipRect(clip, row: row)
484 guard rect.maxX > headerW, rect.minX < bounds.width else { return }678 guard rect.maxX > headerW, rect.minX < bounds.width else { return }
485 let media = project.media(clip.mediaId)679 let media = clip.mediaId.flatMap { mediaById[$0] }
486 let color = trackColor(ref)680 let color = colors.base
487 let selected = store.selection.contains(clip.id)681 let selected = store.selection.contains(clip.id)
488682
489 // Storyboard panels tile edge-to-edge (they're gapless) so the track683 // Storyboard panels tile edge-to-edge (they're gapless) so the track
...@@ -499,25 +693,31 @@ final class TimelineView: NSView {...@@ -499,25 +693,31 @@ final class TimelineView: NSView {
499 case .storyboard:693 case .storyboard:
500 NSColor(calibratedWhite: 0.88, alpha: 1).setFill()694 NSColor(calibratedWhite: 0.88, alpha: 1).setFill()
501 case .audio:695 case .audio:
502 (color.blended(withFraction: 0.82, of: .black) ?? color).setFill()696 colors.audioBody.setFill()
503 case .video:697 case .video:
504 (media == nil ? NSColor(calibratedWhite: 0.25, alpha: 1)698 (media == nil ? NSColor(calibratedWhite: 0.25, alpha: 1) : colors.videoBody).setFill()
505 : color.blended(withFraction: 0.75, of: .black) ?? color).setFill()
506 }699 }
507 body.fill()700 body.fill()
508701
509 NSGraphicsContext.current?.saveGraphicsState()702 // Full detail (thumbnails, waveforms, labels) normally — including while
510 body.addClip()703 // scrolling. Only a very dense frame mid-scroll drops to bodies + strip +
511 switch clip.kind {704 // border (see `lightScroll`), and only until the pan settles.
512 case .video:705 let detail = !lightScroll
513 if let media, session.showFilmstrips { drawFilmstrip(clip, media: media, rect: rect) }706
514 case .audio:707 if detail {
515 if let media { drawWaveform(clip, media: media, rect: rect, color: color) }708 NSGraphicsContext.current?.saveGraphicsState()
516 drawFades(clip, rect: rect, selected: selected)709 body.addClip()
517 case .storyboard:710 switch clip.kind {
518 drawBoardThumb(clip, rect: rect)711 case .video:
712 if let media, session.showFilmstrips { drawFilmstrip(clip, media: media, rect: rect) }
713 case .audio:
714 if let media { drawWaveform(clip, media: media, rect: rect, color: color) }
715 drawFades(clip, rect: rect, selected: selected)
716 case .storyboard:
717 drawBoardThumb(clip, rect: rect)
718 }
719 NSGraphicsContext.current?.restoreGraphicsState()
519 }720 }
520 NSGraphicsContext.current?.restoreGraphicsState()
521721
522 let linkedSel = !selected && linkedSelectionCache.contains(clip.id)722 let linkedSel = !selected && linkedSelectionCache.contains(clip.id)
523723
...@@ -527,53 +727,48 @@ final class TimelineView: NSView {...@@ -527,53 +727,48 @@ final class TimelineView: NSView {
527 ? (panelNamesCache[clip.id] ?? "Panel") : "missing media")727 ? (panelNamesCache[clip.id] ?? "Panel") : "missing media")
528 if clip.kind != .storyboard && media == nil { title = "⚠︎ " + title }728 if clip.kind != .storyboard && media == nil { title = "⚠︎ " + title }
529 if clip.kind == .audio { title = "♪ " + title }729 if clip.kind == .audio { title = "♪ " + title }
530 let attrs: [NSAttributedString.Key: Any] = [730 // The label is drawn only at rest and only when the clip is wide enough
531 .font: NSFont.systemFont(ofSize: 9.5, weight: .medium),731 // to read; a clip narrower than this shows no legible text anyway.
532 .foregroundColor: NSColor(calibratedWhite: 0.92, alpha: 1),732 let showLabel = detail && rect.width >= 22
533 ]733 if detail { NSGraphicsContext.current?.saveGraphicsState(); body.addClip() }
534 NSGraphicsContext.current?.saveGraphicsState()734 colors.strip.setFill()
535 body.addClip()
536 color.blended(withFraction: 0.5, of: .black)?.withAlphaComponent(0.85).setFill()
537 NSRect(x: rect.minX, y: rect.minY, width: rect.width, height: 13).fill()735 NSRect(x: rect.minX, y: rect.minY, width: rect.width, height: 13).fill()
538 title.draw(at: NSPoint(x: max(rect.minX, headerW) + 5, y: rect.minY + 1),736 if showLabel {
539 withAttributes: attrs)737 title.draw(at: NSPoint(x: max(rect.minX, headerW) + 5, y: rect.minY + 1),
540738 withAttributes: Self.titleAttrs)
541 var badgeX = rect.maxX - 16739
542 if clip.speed != 1 {740 var badgeX = rect.maxX - 16
543 let s = String(format: "×%.4g", clip.speed)741 if clip.speed != 1 {
544 let sAttrs: [NSAttributedString.Key: Any] = [742 let s = String(format: "×%.4g", clip.speed)
545 .font: NSFont.monospacedDigitSystemFont(ofSize: 8.5, weight: .semibold),743 let sAttrs: [NSAttributedString.Key: Any] = [
546 .foregroundColor: FusionComps.yellow,744 .font: NSFont.monospacedDigitSystemFont(ofSize: 8.5, weight: .semibold),
547 ]745 .foregroundColor: FusionComps.yellow,
548 let w = s.size(withAttributes: sAttrs).width746 ]
549 badgeX -= w747 let w = s.size(withAttributes: sAttrs).width
550 s.draw(at: NSPoint(x: badgeX, y: rect.minY + 1.5), withAttributes: sAttrs)748 badgeX -= w
551 badgeX -= 5749 s.draw(at: NSPoint(x: badgeX, y: rect.minY + 1.5), withAttributes: sAttrs)
552 }750 badgeX -= 5
553 if clip.muted, let img = NSImage(systemSymbolName: "speaker.slash.fill",751 }
554 accessibilityDescription: "muted") {752 if clip.muted, let img = Self.mutedBadge {
555 img.tinted(.white).draw(753 img.draw(in: NSRect(x: badgeX, y: rect.minY + 2, width: 10, height: 10),
556 in: NSRect(x: badgeX, y: rect.minY + 2, width: 10, height: 10),754 from: .zero, operation: .sourceOver, fraction: 0.9)
557 from: .zero, operation: .sourceOver, fraction: 0.9)755 badgeX -= 13
558 badgeX -= 13756 }
559 }757 if clip.linkId != nil, let img = Self.linkBadge {
560 if clip.linkId != nil, let img = NSImage(systemSymbolName: "link",758 img.draw(in: NSRect(x: badgeX, y: rect.minY + 2, width: 10, height: 10),
561 accessibilityDescription: "linked") {759 from: .zero, operation: .sourceOver, fraction: 0.7)
562 img.tinted(.white).draw(760 }
563 in: NSRect(x: badgeX, y: rect.minY + 2, width: 10, height: 10),761 }
564 from: .zero, operation: .sourceOver, fraction: 0.7)762 if detail { NSGraphicsContext.current?.restoreGraphicsState() }
565 }
566 NSGraphicsContext.current?.restoreGraphicsState()
567763
568 // Selection reads as a full-card tint, not just an outline. Link-mates764 // Selection reads as a full-card tint, not just an outline. Link-mates
569 // of the selection (they act selected) tint aqua.765 // of the selection (they act selected) tint aqua.
570 if selected || linkedSel {766 if selected || linkedSel {
571 NSGraphicsContext.current?.saveGraphicsState()767 if detail { NSGraphicsContext.current?.saveGraphicsState(); body.addClip() }
572 body.addClip()
573 (selected ? NSColor.controlAccentColor : NSColor.systemCyan)768 (selected ? NSColor.controlAccentColor : NSColor.systemCyan)
574 .withAlphaComponent(selected ? 0.34 : 0.20).setFill()769 .withAlphaComponent(selected ? 0.34 : 0.20).setFill()
575 rect.fill()770 (detail ? rect : bodyRect).fill()
576 NSGraphicsContext.current?.restoreGraphicsState()771 if detail { NSGraphicsContext.current?.restoreGraphicsState() }
577 }772 }
578773
579 // Border LAST, on top of the tint: overlap = red, selection = accent774 // Border LAST, on top of the tint: overlap = red, selection = accent
...@@ -624,6 +819,7 @@ final class TimelineView: NSView {...@@ -624,6 +819,7 @@ final class TimelineView: NSView {
624 let tlSec = secondsFor(x + thumbW / 2)819 let tlSec = secondsFor(x + thumbW / 2)
625 let srcSec = clip.sourceTime(at: tlSec)820 let srcSec = clip.sourceTime(at: tlSec)
626 if let img = MediaPipeline.shared.filmstripImage(for: media, at: max(0, srcSec)) {821 if let img = MediaPipeline.shared.filmstripImage(for: media, at: max(0, srcSec)) {
822 if DrawProf.on { DrawProf.thumbHits += 1 }
627 img.draw(in: NSRect(x: x, y: rect.minY + 14, width: thumbW, height: thumbH),823 img.draw(in: NSRect(x: x, y: rect.minY + 14, width: thumbW, height: thumbH),
628 from: .zero, operation: .sourceOver, fraction: 0.9)824 from: .zero, operation: .sourceOver, fraction: 0.9)
629 }825 }
...@@ -996,6 +1192,17 @@ final class TimelineView: NSView {...@@ -996,6 +1192,17 @@ final class TimelineView: NSView {
996 var collapseTo: UUID? // click-on-selected: reduce to this clip if no drag1192 var collapseTo: UUID? // click-on-selected: reduce to this clip if no drag
997 }1193 }
998 private var drag = DragState()1194 private var drag = DragState()
1195
1196 // Middle-button drag grabs the timeline and hand-pans it in both axes
1197 // (time horizontally, tracks vertically), independent of any clip edit.
1198 private struct PanDrag {
1199 var active = false
1200 var start = NSPoint.zero
1201 var origOrigin = 0.0
1202 var origScrollY: CGFloat = 0
1203 }
1204 private var panDrag = PanDrag()
1205
999 private var activeSnapTarget: Double?1206 private var activeSnapTarget: Double?
1000 private var dragHintRow: Int?1207 private var dragHintRow: Int?
1001 private var lastMousePoint = NSPoint.zero1208 private var lastMousePoint = NSPoint.zero
...@@ -1265,6 +1472,12 @@ final class TimelineView: NSView {...@@ -1265,6 +1472,12 @@ final class TimelineView: NSView {
1265 session.trackHeights[ref] = min(4, max(0.35, factor))1472 session.trackHeights[ref] = min(4, max(0.35, factor))
1266 }1473 }
1267 }1474 }
1475 // Dragging the floating scrollbars is a scroll/zoom — simplify while it
1476 // moves, like the wheel and pinch paths.
1477 if [.hBarPan, .hBarLeft, .hBarRight,
1478 .vBarPan, .vBarTop, .vBarBottom].contains(drag.mode) {
1479 noteScrolling()
1480 }
1268 drag.moved = true1481 drag.moved = true
1269 autoscroll(with: event)1482 autoscroll(with: event)
1270 needsDisplay = true1483 needsDisplay = true
...@@ -1287,6 +1500,33 @@ final class TimelineView: NSView {...@@ -1287,6 +1500,33 @@ final class TimelineView: NSView {
1287 needsDisplay = true1500 needsDisplay = true
1288 }1501 }
12891502
1503 // MARK: - Middle-mouse pan
1504
1505 override func otherMouseDown(with event: NSEvent) {
1506 guard event.buttonNumber == 2 else { return }
1507 window?.makeFirstResponder(self)
1508 let p = convert(event.locationInWindow, from: nil)
1509 panDrag = PanDrag(active: true, start: p,
1510 origOrigin: originSecond, origScrollY: scrollY)
1511 }
1512
1513 override func otherMouseDragged(with event: NSEvent) {
1514 guard panDrag.active else { return }
1515 let p = convert(event.locationInWindow, from: nil)
1516 originSecond = clampOrigin(panDrag.origOrigin
1517 - Double(p.x - panDrag.start.x) / pxPerSecond)
1518 if maxScrollY > 0 {
1519 scrollY = min(max(0, panDrag.origScrollY - (p.y - panDrag.start.y)), maxScrollY)
1520 }
1521 noteScrolling()
1522 needsDisplay = true
1523 }
1524
1525 override func otherMouseUp(with event: NSEvent) {
1526 guard event.buttonNumber == 2 else { return }
1527 panDrag.active = false
1528 }
1529
1290 private func dragMove(p: NSPoint, dSec: Double) {1530 private func dragMove(p: NSPoint, dSec: Double) {
1291 guard let orig = drag.origClip else { return }1531 guard let orig = drag.origClip else { return }
1292 // Vertical retracking only for a lone unlinked clip.1532 // Vertical retracking only for a lone unlinked clip.
...@@ -1693,6 +1933,19 @@ final class TimelineView: NSView {...@@ -1693,6 +1933,19 @@ final class TimelineView: NSView {
1693 if event.modifierFlags.contains(.option) { unlinkSelection() }1933 if event.modifierFlags.contains(.option) { unlinkSelection() }
1694 else { linkSelection() }1934 else { linkSelection() }
1695 case "b": splitStoryboardAtPlayhead(newShot: event.modifierFlags.contains(.shift))1935 case "b": splitStoryboardAtPlayhead(newShot: event.modifierFlags.contains(.shift))
1936 case "x": // X delete / ⇧X ripple (same as ⌫)
1937 if store.selection.isEmpty {
1938 closeBlankSpace(at: quantize(pc.playhead))
1939 } else if event.modifierFlags.contains(.shift) {
1940 rippleDelete()
1941 } else {
1942 deleteSelection()
1943 }
1944 case "\\": rippleDelete() // documented default ripple-delete key (also ⌥⌫)
1945 case "a" where !event.modifierFlags.contains(.command): // ripple trim left (also ⌥←)
1946 rippleTrimToPlayhead(deleteLeft: true)
1947 case "d" where !event.modifierFlags.contains(.command): // ripple trim right (also ⌥→)
1948 rippleTrimToPlayhead(deleteLeft: false)
1696 case "[":1949 case "[":
1697 if event.modifierFlags.contains(.option) { goToPrevMarker() }1950 if event.modifierFlags.contains(.option) { goToPrevMarker() }
1698 else if event.modifierFlags.contains(.command) { goToPrevStoryboardPanel() }1951 else if event.modifierFlags.contains(.command) { goToPrevStoryboardPanel() }
...@@ -2022,9 +2275,19 @@ final class TimelineView: NSView {...@@ -2022,9 +2275,19 @@ final class TimelineView: NSView {
2022 }2275 }
2023 model.pruneTrailingEmptyTracks()2276 model.pruneTrailingEmptyTracks()
2024 }2277 }
2025 // Park the playhead where the gap closed, so it follows the content2278 // Keep the cursor on the same logical content rather than jumping it to
2026 // that just slid left instead of hanging over the removed span.2279 // the cut. If it sat after the removed span, slide it left by the gap so
2027 if let start { playback.seek(to: start) }2280 // the exact frame under it is unchanged — a playing stream keeps rolling
2281 // with no reseek. Inside the span, land on the close point; before it,
2282 // leave it be.
2283 if let start, let end, end > start {
2284 let ph = playback.playhead
2285 if ph >= end - 1e-9 {
2286 playback.shift(by: -(end - start))
2287 } else if ph > start {
2288 playback.seek(to: start)
2289 }
2290 }
2028 }2291 }
20292292
2030 /// ⌥← / ⌥→ — split the clip(s) under the playhead and ripple-delete the2293 /// ⌥← / ⌥→ — split the clip(s) under the playhead and ripple-delete the
...@@ -2033,40 +2296,71 @@ final class TimelineView: NSView {...@@ -2033,40 +2296,71 @@ final class TimelineView: NSView {
2033 /// under the playhead (so multicam stays in sync).2296 /// under the playhead (so multicam stays in sync).
2034 func rippleTrimToPlayhead(deleteLeft: Bool) {2297 func rippleTrimToPlayhead(deleteLeft: Bool) {
2035 let t = quantize(playback.playhead)2298 let t = quantize(playback.playhead)
2036 let intersects: (Clip) -> Bool = {2299 let eps = 1e-6
2037 $0.kind != .storyboard && $0.start + 1e-6 < t && $0.end - 1e-6 > t2300 let straddles: (Clip) -> Bool = {
2301 $0.kind != .storyboard && $0.start + eps < t && $0.end - eps > t
2038 }2302 }
2039 let sel = project.expandLinks(store.selection)2303 let sel = project.expandLinks(store.selection)
2040 let hadSelection = !store.selection.isEmpty2304 let hadSelection = !store.selection.isEmpty
2041 var targets = project.clips.filter { sel.contains($0.id) && intersects($0) }2305 // Prefer the selected/linked clips the playhead crosses; fall back to
2042 if targets.isEmpty { targets = project.clips.filter(intersects) }2306 // every angle under it (so multicam stays in sync).
2043 guard !targets.isEmpty else { return }2307 func pick(_ p: @escaping (Clip) -> Bool) -> [Clip] {
2044 let gapStart = deleteLeft ? targets.map(\.start).min()! : t2308 let inSel = project.clips.filter { sel.contains($0.id) && p($0) }
2045 let gapEnd = deleteLeft ? t : targets.map(\.end).max()!2309 return inSel.isEmpty ? project.clips.filter(p) : inSel
2046 let gap = gapEnd - gapStart2310 }
2047 guard gap > 1e-6 else { return }2311
2048 let ids = Set(targets.map(\.id))2312 let crossing = pick(straddles)
2049 store.mutate { model in2313 if !crossing.isEmpty {
2050 for tgt in model.clips where ids.contains(tgt.id) {2314 let gapStart = deleteLeft ? crossing.map(\.start).min()! : t
2051 guard let i = model.clips.firstIndex(where: { $0.id == tgt.id }) else { continue }2315 let gapEnd = deleteLeft ? t : crossing.map(\.end).max()!
2052 if deleteLeft {2316 let gap = gapEnd - gapStart
2053 model.clips[i].srcIn = tgt.srcIn + (t - tgt.start) * tgt.speed2317 guard gap > eps else { return }
2054 model.clips[i].start = t2318 let ids = Set(crossing.map(\.id))
2055 model.clips[i].duration = tgt.end - t2319 store.mutate { model in
2056 } else {2320 for tgt in model.clips where ids.contains(tgt.id) {
2057 model.clips[i].duration = t - tgt.start2321 guard let i = model.clips.firstIndex(where: { $0.id == tgt.id }) else { continue }
2322 if deleteLeft {
2323 model.clips[i].srcIn = tgt.srcIn + (t - tgt.start) * tgt.speed
2324 model.clips[i].start = t
2325 model.clips[i].duration = tgt.end - t
2326 } else {
2327 model.clips[i].duration = t - tgt.start
2328 }
2329 }
2330 // Close the gap on EVERY track (the kept right pieces start at
2331 // gapEnd, so they ride left with everything else).
2332 for i in model.clips.indices where model.clips[i].start >= gapEnd - 1e-9 {
2333 model.clips[i].start = max(0, model.clips[i].start - gap)
2058 }2334 }
2335 model.pruneTrailingEmptyTracks()
2059 }2336 }
2060 // Close the gap on EVERY track (the kept right pieces start at2337 // The kept piece keeps its id, so a trim that started from a
2061 // gapEnd, so they ride left with everything else).2338 // selection leaves that resulting clip selected.
2339 if hadSelection { store.selection = ids }
2340 playback.seek(to: gapStart)
2341 return
2342 }
2343
2344 // Nothing straddles the playhead — it's sitting exactly on a cut (e.g.
2345 // right after S). There's nothing to split, so ripple-delete the whole
2346 // clip butting the playhead on the side being trimmed, closing the gap.
2347 let abuts: (Clip) -> Bool = deleteLeft
2348 ? { $0.kind != .storyboard && abs($0.end - t) < eps }
2349 : { $0.kind != .storyboard && abs($0.start - t) < eps }
2350 let adjacent = pick(abuts)
2351 guard !adjacent.isEmpty else { return }
2352 let gapStart = adjacent.map(\.start).min()!
2353 let gapEnd = adjacent.map(\.end).max()!
2354 let gap = gapEnd - gapStart
2355 guard gap > eps else { return }
2356 let ids = Set(adjacent.map(\.id))
2357 store.mutate { model in
2358 model.clips.removeAll { ids.contains($0.id) }
2062 for i in model.clips.indices where model.clips[i].start >= gapEnd - 1e-9 {2359 for i in model.clips.indices where model.clips[i].start >= gapEnd - 1e-9 {
2063 model.clips[i].start = max(0, model.clips[i].start - gap)2360 model.clips[i].start = max(0, model.clips[i].start - gap)
2064 }2361 }
2065 model.pruneTrailingEmptyTracks()2362 model.pruneTrailingEmptyTracks()
2066 }2363 }
2067 // The kept piece keeps its id, so a trim that started from a selection
2068 // leaves that resulting clip selected.
2069 if hadSelection { store.selection = ids }
2070 playback.seek(to: gapStart)2364 playback.seek(to: gapStart)
2071 }2365 }
20722366
...@@ -2104,7 +2398,9 @@ final class TimelineView: NSView {...@@ -2104,7 +2398,9 @@ final class TimelineView: NSView {
2104 override func cancelOperation(_ sender: Any?) {2398 override func cancelOperation(_ sender: Any?) {
2105 if store.gestureBaseModel != nil { store.cancelGesture() }2399 if store.gestureBaseModel != nil { store.cancelGesture() }
2106 store.selection = []2400 store.selection = []
2107 playback.setRate(0)2401 // Escape during playback rewinds to where playback started; otherwise
2402 // it's a plain stop.
2403 if !playback.stopAndRevert() { playback.setRate(0) }
2108 needsDisplay = true2404 needsDisplay = true
2109 }2405 }
21102406
...@@ -2495,7 +2791,7 @@ final class TimelineView: NSView {...@@ -2495,7 +2791,7 @@ final class TimelineView: NSView {
2495 add("Copy", #selector(ctxCopy))2791 add("Copy", #selector(ctxCopy))
2496 menu.addItem(.separator())2792 menu.addItem(.separator())
2497 add("Delete", #selector(ctxDelete), key: "\u{8}")2793 add("Delete", #selector(ctxDelete), key: "\u{8}")
2498 add("Ripple Delete", #selector(ctxRippleDelete), key: "\u{8}", mods: .option)2794 add("Ripple Delete", #selector(ctxRippleDelete), key: "\\")
2499 return menu2795 return menu
2500 }2796 }
25012797
...@@ -2609,10 +2905,12 @@ final class TimelineView: NSView {...@@ -2609,10 +2905,12 @@ final class TimelineView: NSView {
2609 originSecond = clampOrigin(originSecond - Double(dx) / pxPerSecond)2905 originSecond = clampOrigin(originSecond - Double(dx) / pxPerSecond)
2610 }2906 }
2611 }2907 }
2908 noteScrolling()
2612 needsDisplay = true2909 needsDisplay = true
2613 }2910 }
26142911
2615 override func magnify(with event: NSEvent) {2912 override func magnify(with event: NSEvent) {
2913 noteScrolling()
2616 zoom(by: 1 + event.magnification, anchorX: convert(event.locationInWindow, from: nil).x)2914 zoom(by: 1 + event.magnification, anchorX: convert(event.locationInWindow, from: nil).x)
2617 }2915 }
26182916
...@@ -2867,6 +3165,14 @@ final class TimelineView: NSView {...@@ -2867,6 +3165,14 @@ final class TimelineView: NSView {
2867 var testPxPerSecond: Double { pxPerSecond }3165 var testPxPerSecond: Double { pxPerSecond }
2868 func testHThumb() -> NSRect { hThumbRect() }3166 func testHThumb() -> NSRect { hThumbRect() }
2869 func testVThumb() -> NSRect { vThumbRect() }3167 func testVThumb() -> NSRect { vThumbRect() }
3168 func testSetOrigin(_ sec: Double) { originSecond = sec }
3169 func testSetPxPerSecond(_ p: Double) { pxPerSecond = p }
3170 func testSetScrolling(_ b: Bool) { isScrolling = b }
3171 /// Draw straight into the current graphics context (set by the harness),
3172 /// bypassing `cacheDisplay`'s per-call bitmap allocation so we time `draw`.
3173 func testRedraw() { draw(bounds) }
3174 var testTimelineDuration: Double { project.timelineDuration }
3175 var testVisibleClipCount: Int { rebuildSceneIfNeeded(); return visibleClipCount() }
28703176
2871 // MARK: - Colors3177 // MARK: - Colors
28723178
sequencer/Sources/Sequencer/TransportBar.swift+100-8
...@@ -77,7 +77,9 @@ final class TransportBar: NSView {...@@ -77,7 +77,9 @@ final class TransportBar: NSView {
77 private let fpsButton = InstantButton(title: "", target: nil, action: nil)77 private let fpsButton = InstantButton(title: "", target: nil, action: nil)
78 private let customFpsField = NSTextField()78 private let customFpsField = NSTextField()
79 private weak var fpsMenu: NSMenu?79 private weak var fpsMenu: NSMenu?
80 private let rateField = NSTextField(labelWithString: "⏸")80 private let rateField = NSTextField(labelWithString: "1x")
81 private let customSpeedField = NSTextField()
82 private weak var speedMenu: NSMenu?
81 private let status = NSTextField(labelWithString: "")83 private let status = NSTextField(labelWithString: "")
82 private let jobs = NSTextField(labelWithString: "")84 private let jobs = NSTextField(labelWithString: "")
83 private let netWarn = NSTextField(labelWithString: "")85 private let netWarn = NSTextField(labelWithString: "")
...@@ -202,6 +204,14 @@ final class TransportBar: NSView {...@@ -202,6 +204,14 @@ final class TransportBar: NSView {
202 fpsButton.tipText = "Frame Rate"204 fpsButton.tipText = "Frame Rate"
203 rateField.font = .monospacedDigitSystemFont(ofSize: 11, weight: .regular)205 rateField.font = .monospacedDigitSystemFont(ofSize: 11, weight: .regular)
204 rateField.textColor = Theme.subtleLabel206 rateField.textColor = Theme.subtleLabel
207 rateField.toolTip = "Playback speed — click or right-click to change"
208 // Both buttons open the same speed editor: right-click is what was asked
209 // for, left-click makes it discoverable (like the frame-rate readout).
210 let speedLeftClick = NSClickGestureRecognizer(target: self, action: #selector(speedClicked))
211 rateField.addGestureRecognizer(speedLeftClick)
212 let speedRightClick = NSClickGestureRecognizer(target: self, action: #selector(speedClicked))
213 speedRightClick.buttonMask = 0x2
214 rateField.addGestureRecognizer(speedRightClick)
205 let centerStack = NSStackView(views: [timecode, fpsButton, rateField])215 let centerStack = NSStackView(views: [timecode, fpsButton, rateField])
206 centerStack.orientation = .horizontal216 centerStack.orientation = .horizontal
207 centerStack.spacing = 8217 centerStack.spacing = 8
...@@ -486,6 +496,77 @@ final class TransportBar: NSView {...@@ -486,6 +496,77 @@ final class TransportBar: NSView {
486 userInfo: ["text": "Project frame rate: \(text)"])496 userInfo: ["text": "Project frame rate: \(text)"])
487 }497 }
488498
499 // MARK: - Playback speed dropdown
500
501 @objc private func speedClicked() {
502 let menu = NSMenu()
503 menu.delegate = self
504 speedMenu = menu
505 let speed = playback.playSpeed
506
507 // Editable entry first, auto-focused and pre-selected so you can just
508 // type a custom speed — mirrors the frame-rate dropdown.
509 customSpeedField.stringValue = Self.speedString(speed)
510 menu.addItem(makeCustomSpeedItem())
511 menu.addItem(.separator())
512
513 for (title, v) in AppDelegate.playbackSpeeds {
514 let mi = NSMenuItem(title: title, action: #selector(speedPicked(_:)),
515 keyEquivalent: "")
516 mi.target = self
517 mi.representedObject = v
518 mi.state = abs(speed - v) < 0.001 ? .on : .off
519 menu.addItem(mi)
520 }
521
522 menu.popUp(positioning: menu.items.first,
523 at: NSPoint(x: -12, y: rateField.bounds.maxY + 9), in: rateField)
524 }
525
526 /// A menu item hosting the editable speed field, laid out like the fps one.
527 private func makeCustomSpeedItem() -> NSMenuItem {
528 let item = NSMenuItem()
529 let field = customSpeedField
530 field.isEditable = true
531 field.isBordered = true
532 field.bezelStyle = .roundedBezel
533 field.font = .monospacedDigitSystemFont(ofSize: 13, weight: .regular)
534 field.alignment = .left
535 field.placeholderString = "Custom speed"
536 field.target = self
537 field.action = #selector(customSpeedEntered(_:))
538 field.delegate = self
539 field.translatesAutoresizingMaskIntoConstraints = false
540
541 let container = NSView(frame: NSRect(x: 0, y: 0, width: 210, height: 28))
542 container.addSubview(field)
543 NSLayoutConstraint.activate([
544 field.leadingAnchor.constraint(equalTo: container.leadingAnchor, constant: 11),
545 field.trailingAnchor.constraint(equalTo: container.trailingAnchor, constant: -11),
546 field.centerYAnchor.constraint(equalTo: container.centerYAnchor),
547 ])
548 item.view = container
549 return item
550 }
551
552 @objc private func speedPicked(_ sender: NSMenuItem) {
553 guard let v = sender.representedObject as? Double else { return }
554 playback.setPlaySpeed(v)
555 }
556
557 @objc private func customSpeedEntered(_ sender: NSTextField) {
558 let raw = sender.stringValue.trimmingCharacters(in: .whitespaces)
559 // Accept a bare number or a "1.5x"/"1.5×" string.
560 let scanned = raw.split(whereSeparator: { $0 == "x" || $0 == "×" || $0 == " " })
561 .first.map(String.init) ?? raw
562 guard let v = Double(scanned), v >= 0.1, v <= 64 else {
563 NSSound.beep()
564 return
565 }
566 speedMenu?.cancelTracking()
567 playback.setPlaySpeed(v)
568 }
569
489 @objc private func heightChanged() {570 @objc private func heightChanged() {
490 session.laneScale = CGFloat(heightSlider.doubleValue)571 session.laneScale = CGFloat(heightSlider.doubleValue)
491 }572 }
...@@ -551,8 +632,17 @@ final class TransportBar: NSView {...@@ -551,8 +632,17 @@ final class TransportBar: NSView {
551 string: fpsText,632 string: fpsText,
552 attributes: [.font: NSFont.monospacedDigitSystemFont(ofSize: 10, weight: .regular),633 attributes: [.font: NSFont.monospacedDigitSystemFont(ofSize: 10, weight: .regular),
553 .foregroundColor: Theme.subtleLabel])634 .foregroundColor: Theme.subtleLabel])
554 rateField.stringValue = pc.rate == 0 ? "⏸"635 // Always show a speed. Stopped → the set play speed with no arrow (that
555 : String(format: "%@%.0fx", pc.rate < 0 ? "◀︎ " : "▶︎ ", abs(pc.rate))636 // absence is the "paused" cue); playing → a direction arrow + the live
637 // rate. %g keeps fractional speeds like 1.5x / 1.25x readable.
638 rateField.stringValue = pc.rate == 0
639 ? Self.speedString(pc.playSpeed)
640 : (pc.rate < 0 ? "◀︎ " : "▶︎ ") + Self.speedString(abs(pc.rate))
641 }
642
643 /// Format a speed magnitude as "1x" / "1.5x" (whole numbers drop the decimal).
644 private static func speedString(_ v: Double) -> String {
645 v == v.rounded() ? String(format: "%.0fx", v) : String(format: "%gx", v)
556 }646 }
557647
558 @objc private func updateJobs() {648 @objc private func updateJobs() {
...@@ -617,14 +707,16 @@ extension TransportBar: NSTextFieldDelegate {...@@ -617,14 +707,16 @@ extension TransportBar: NSTextFieldDelegate {
617707
618extension TransportBar: NSMenuDelegate {708extension TransportBar: NSMenuDelegate {
619 func menuWillOpen(_ menu: NSMenu) {709 func menuWillOpen(_ menu: NSMenu) {
620 guard menu === fpsMenu else { return }710 let field: NSTextField? = menu === fpsMenu ? customFpsField
711 : menu === speedMenu ? customSpeedField : nil
712 guard let field else { return }
621 // The menu runs its own modal tracking loop, so focus has to be handed713 // The menu runs its own modal tracking loop, so focus has to be handed
622 // to the field in that run-loop mode — a plain async dispatch would sit714 // to the field in that run-loop mode — a plain async dispatch would sit
623 // idle until the menu closed.715 // idle until the menu closed.
624 RunLoop.current.perform(inModes: [.eventTracking]) { [weak self] in716 RunLoop.current.perform(inModes: [.eventTracking]) {
625 guard let self, let window = self.customFpsField.window else { return }717 guard let window = field.window else { return }
626 window.makeFirstResponder(self.customFpsField)718 window.makeFirstResponder(field)
627 self.customFpsField.currentEditor()?.selectAll(nil)719 field.currentEditor()?.selectAll(nil)
628 }720 }
629 }721 }
630}722}
sequencer/Sources/Sequencer/UITest.swift+19-2
...@@ -531,15 +531,32 @@ func runUITest() {...@@ -531,15 +531,32 @@ func runUITest() {
531 "linked group moves vertically as one")531 "linked group moves vertically as one")
532 store.undo()532 store.undo()
533533
534 // 31. Ripple delete closes the gap on every track.534 // 31. Ripple delete closes the gap on every track. The playhead slides with
535 // the content it sat on: it was at 80 (after the removed [10,30) span), so
536 // removing that 20s gap carries it to 60 — same frame, not parked at the cut.
535 store.selection = [la.id] // linked pair [10,30) — ripple shifts solo 40→20537 store.selection = [la.id] // linked pair [10,30) — ripple shifts solo 40→20
536 DocumentContext.headless.playback.seek(to: 80)538 DocumentContext.headless.playback.seek(to: 80)
537 timeline.rippleDelete()539 timeline.rippleDelete()
538 check(store.project.clips.count == 1540 check(store.project.clips.count == 1
539 && abs(store.project.clip(solo.id)!.start - 20) < 1e-9,541 && abs(store.project.clip(solo.id)!.start - 20) < 1e-9,
540 "ripple delete closes the gap across tracks (got \(store.project.clip(solo.id)?.start ?? -1))")542 "ripple delete closes the gap across tracks (got \(store.project.clip(solo.id)?.start ?? -1))")
543 check(abs(DocumentContext.headless.playback.playhead - 60) < 1e-6,
544 "ripple delete slides the playhead with the content (got \(DocumentContext.headless.playback.playhead))")
545 store.undo()
546
547 // 31a. A playhead BEFORE the removed span is left untouched (content there
548 // didn't move); one INSIDE the span lands on the close point.
549 store.selection = [la.id]
550 DocumentContext.headless.playback.seek(to: 5)
551 timeline.rippleDelete()
552 check(abs(DocumentContext.headless.playback.playhead - 5) < 1e-6,
553 "ripple delete leaves an earlier playhead put (got \(DocumentContext.headless.playback.playhead))")
554 store.undo()
555 store.selection = [la.id]
556 DocumentContext.headless.playback.seek(to: 25)
557 timeline.rippleDelete()
541 check(abs(DocumentContext.headless.playback.playhead - 10) < 1e-6,558 check(abs(DocumentContext.headless.playback.playhead - 10) < 1e-6,
542 "ripple delete parks the playhead at the closed gap (got \(DocumentContext.headless.playback.playhead))")559 "ripple delete inside the span lands on the close point (got \(DocumentContext.headless.playback.playhead))")
543 store.undo()560 store.undo()
544561
545 // 31b. Trailing empty tracks collapse to the last used lane; interior and562 // 31b. Trailing empty tracks collapse to the last used lane; interior and
sequencer/Sources/Sequencer/ViewerGridView.swift+107-36
...@@ -15,6 +15,11 @@ final class ViewerGridView: NSView {...@@ -15,6 +15,11 @@ final class ViewerGridView: NSView {
15 oldValue.notify.removeObserver(self, name: .playheadChanged, object: nil)15 oldValue.notify.removeObserver(self, name: .playheadChanged, object: nil)
16 ctx.notify.addObserver(self, selector: #selector(sync),16 ctx.notify.addObserver(self, selector: #selector(sync),
17 name: .playheadChanged, object: nil)17 name: .playheadChanged, object: nil)
18 // Forward the new context into cells already built against the old
19 // one — otherwise they keep reading the previous (or headless) store
20 // and render nothing but the black cell background.
21 for c in cells.values { c.ctx = ctx }
22 fusionCell?.ctx = ctx
18 }23 }
19 }24 }
20 private var store: Store { ctx.store }25 private var store: Store { ctx.store }
...@@ -190,6 +195,7 @@ final class ViewerGridView: NSView {...@@ -190,6 +195,7 @@ final class ViewerGridView: NSView {
190 var newPanes: [NSView] = []195 var newPanes: [NSView] = []
191 for ref in tracks where cells[ref] == nil {196 for ref in tracks where cells[ref] == nil {
192 let cell = ViewerCell(ref: ref)197 let cell = ViewerCell(ref: ref)
198 cell.ctx = ctx
193 cell.alphaValue = 0199 cell.alphaValue = 0
194 cells[ref] = cell200 cells[ref] = cell
195 // Below the settled grid so it grows in UNDER its neighbours.201 // Below the settled grid so it grows in UNDER its neighbours.
...@@ -198,6 +204,7 @@ final class ViewerGridView: NSView {...@@ -198,6 +204,7 @@ final class ViewerGridView: NSView {
198 }204 }
199 if fusion, fusionCell == nil {205 if fusion, fusionCell == nil {
200 let cell = FusionViewerCell()206 let cell = FusionViewerCell()
207 cell.ctx = ctx
201 cell.alphaValue = 0208 cell.alphaValue = 0
202 fusionCell = cell209 fusionCell = cell
203 addSubview(cell, positioned: .below, relativeTo: nil)210 addSubview(cell, positioned: .below, relativeTo: nil)
...@@ -325,6 +332,18 @@ final class ViewerGridView: NSView {...@@ -325,6 +332,18 @@ final class ViewerGridView: NSView {
325 frames = justifiedFrames(aspects: aspects, in: bounds)332 frames = justifiedFrames(aspects: aspects, in: bounds)
326 }333 }
327334
335 // Tell optimisation how sharp the proxies need to be: the largest video
336 // cell on screen, in device pixels. A big preview asks for sharper
337 // background proxies; a small one avoids over-rendering.
338 let scale = window?.backingScaleFactor ?? NSScreen.main?.backingScaleFactor ?? 2
339 let maxVideoWidth = zip(panes, frames)
340 .filter { $0.0 is ViewerCell }
341 .map { $0.1.width }
342 .max() ?? 0
343 if maxVideoWidth > 0 {
344 ctx.chunks.setPreviewTargetWidth(Int((maxVideoWidth * scale).rounded()))
345 }
346
328 NSAnimationContext.runAnimationGroup({ ctx in347 NSAnimationContext.runAnimationGroup({ ctx in
329 ctx.duration = animated ? 0.16 : 0348 ctx.duration = animated ? 0.16 : 0
330 ctx.allowsImplicitAnimation = animated349 ctx.allowsImplicitAnimation = animated
...@@ -442,8 +461,9 @@ final class ViewerGridView: NSView {...@@ -442,8 +461,9 @@ final class ViewerGridView: NSView {
442 /// or top+bottom — then run the normal justified layout in whatever space is461 /// or top+bottom — then run the normal justified layout in whatever space is
443 /// left over. The strip's axis is dictated by that maximization, not chosen:462 /// left over. The strip's axis is dictated by that maximization, not chosen:
444 /// a full-width priority leaves a band underneath, a full-height one leaves a463 /// a full-width priority leaves a band underneath, a full-height one leaves a
445 /// band to the side. Because the two regions tile `rect` exactly and each464 /// band to the side. The priority pane and the secondaries' strip are laid
446 /// centres its own contents, the composite reads as centred.465 /// flush against each other and the combined block is centred in `rect`, so
466 /// there's no gap between the two panels and the whole reads as centred.
447 ///467 ///
448 /// The lone knob is a 100pt floor on the strip (clamped on tiny viewers): when468 /// The lone knob is a 100pt floor on the strip (clamped on tiny viewers): when
449 /// the priority's aspect nearly matches the container's, the natural leftover469 /// the priority's aspect nearly matches the container's, the natural leftover
...@@ -462,19 +482,26 @@ final class ViewerGridView: NSView {...@@ -462,19 +482,26 @@ final class ViewerGridView: NSView {
462 let freeBelow = rect.height - full.height // priority is full-width482 let freeBelow = rect.height - full.height // priority is full-width
463 let freeSide = rect.width - full.width // priority is full-height483 let freeSide = rect.width - full.width // priority is full-height
464484
485 // The clamp on the strip's thickness (and any width/height limit on the
486 // priority pane) can leave the pane smaller than its region, so it floats
487 // with dead space toward the strip. Size the pane first, then lay pane +
488 // strip flush against each other and centre that combined block in `rect`
489 // along the split axis — no gap between the two panels, group centred.
465 let priRegion: NSRect, strip: NSRect490 let priRegion: NSRect, strip: NSRect
466 if freeBelow >= freeSide {491 if freeBelow >= freeSide {
467 let t = min(max(freeBelow, 100), rect.height * 0.5)492 let t = min(max(freeBelow, 100), rect.height * 0.5)
468 priRegion = NSRect(x: rect.minX, y: rect.minY,493 let pane = aspectFit(aspects[p], in: NSRect(x: rect.minX, y: rect.minY,
469 width: rect.width, height: rect.height - t)494 width: rect.width, height: rect.height - t))
470 strip = NSRect(x: rect.minX, y: rect.maxY - t,495 let y0 = rect.minY + (rect.height - (pane.height + t)) / 2
471 width: rect.width, height: t)496 priRegion = NSRect(x: rect.minX, y: y0, width: rect.width, height: pane.height)
497 strip = NSRect(x: rect.minX, y: y0 + pane.height, width: rect.width, height: t)
472 } else {498 } else {
473 let t = min(max(freeSide, 100), rect.width * 0.5)499 let t = min(max(freeSide, 100), rect.width * 0.5)
474 priRegion = NSRect(x: rect.minX, y: rect.minY,500 let pane = aspectFit(aspects[p], in: NSRect(x: rect.minX, y: rect.minY,
475 width: rect.width - t, height: rect.height)501 width: rect.width - t, height: rect.height))
476 strip = NSRect(x: rect.maxX - t, y: rect.minY,502 let x0 = rect.minX + (rect.width - (pane.width + t)) / 2
477 width: t, height: rect.height)503 priRegion = NSRect(x: x0, y: rect.minY, width: pane.width, height: rect.height)
504 strip = NSRect(x: x0 + pane.width, y: rect.minY, width: t, height: rect.height)
478 }505 }
479 frames[p] = aspectFit(aspects[p], in: priRegion)506 frames[p] = aspectFit(aspects[p], in: priRegion)
480 let otherFrames = justifiedFrames(aspects: others.map { aspects[$0] }, in: strip)507 let otherFrames = justifiedFrames(aspects: others.map { aspects[$0] }, in: strip)
...@@ -799,9 +826,15 @@ class ViewerCellBase: NSView {...@@ -799,9 +826,15 @@ class ViewerCellBase: NSView {
799826
800final class ViewerCell: ViewerCellBase {827final class ViewerCell: ViewerCellBase {
801 let ref: TrackRef828 let ref: TrackRef
829 // Two layers for the double-buffered track player: `playerLayer` shows sub-
830 // player A, `playerLayerB` shows sub-player B. `update()` reveals whichever
831 // is the front buffer and hides the other — so a gapless cut is just a layer
832 // visibility flip (both already hold the right frame), never a rebind flash.
802 private let playerLayer = AVPlayerLayer()833 private let playerLayer = AVPlayerLayer()
834 private let playerLayerB = AVPlayerLayer()
803 private let imageLayer = CALayer()835 private let imageLayer = CALayer()
804 private var readyObs: NSKeyValueObservation?836 private var readyObs: NSKeyValueObservation?
837 private var readyObsB: NSKeyValueObservation?
805838
806 // "Loading Media…" overlay — a clear, frame-scaled not-rendered state839 // "Loading Media…" overlay — a clear, frame-scaled not-rendered state
807 // shown when there's neither live video NOR a filmstrip stand-in to show840 // shown when there's neither live video NOR a filmstrip stand-in to show
...@@ -823,8 +856,11 @@ final class ViewerCell: ViewerCellBase {...@@ -823,8 +856,11 @@ final class ViewerCell: ViewerCellBase {
823 // fills it edge to edge WITHOUT the inward crop fill would risk.856 // fills it edge to edge WITHOUT the inward crop fill would risk.
824 imageLayer.contentsGravity = .resizeAspect857 imageLayer.contentsGravity = .resizeAspect
825 playerLayer.videoGravity = .resizeAspect858 playerLayer.videoGravity = .resizeAspect
859 playerLayerB.videoGravity = .resizeAspect
860 playerLayerB.isHidden = true
826 layer?.insertSublayer(imageLayer, at: 0)861 layer?.insertSublayer(imageLayer, at: 0)
827 layer?.insertSublayer(playerLayer, above: imageLayer)862 layer?.insertSublayer(playerLayer, above: imageLayer)
863 layer?.insertSublayer(playerLayerB, above: playerLayer)
828864
829 // Overlay sits above the video/image layers (but below the chrome865 // Overlay sits above the video/image layers (but below the chrome
830 // subviews). Hidden until update() decides there's nothing to show.866 // subviews). Hidden until update() decides there's nothing to show.
...@@ -846,6 +882,9 @@ final class ViewerCell: ViewerCellBase {...@@ -846,6 +882,9 @@ final class ViewerCell: ViewerCellBase {
846 readyObs = playerLayer.observe(\.isReadyForDisplay) { [weak self] _, _ in882 readyObs = playerLayer.observe(\.isReadyForDisplay) { [weak self] _, _ in
847 DispatchQueue.main.async { self?.update() }883 DispatchQueue.main.async { self?.update() }
848 }884 }
885 readyObsB = playerLayerB.observe(\.isReadyForDisplay) { [weak self] _, _ in
886 DispatchQueue.main.async { self?.update() }
887 }
849 focusButton.onClick = { [weak self] in guard let self else { return }888 focusButton.onClick = { [weak self] in guard let self else { return }
850 session.toggleFocus(self.ref) }889 session.toggleFocus(self.ref) }
851 hideButton.onClick = { [weak self] in guard let self else { return }890 hideButton.onClick = { [weak self] in guard let self else { return }
...@@ -892,6 +931,7 @@ final class ViewerCell: ViewerCellBase {...@@ -892,6 +931,7 @@ final class ViewerCell: ViewerCellBase {
892931
893 override func layoutContentLayers(in target: CGRect) {932 override func layoutContentLayers(in target: CGRect) {
894 playerLayer.frame = target933 playerLayer.frame = target
934 playerLayerB.frame = target
895 imageLayer.frame = target935 imageLayer.frame = target
896 layoutOverlay(in: target)936 layoutOverlay(in: target)
897 }937 }
...@@ -921,6 +961,27 @@ final class ViewerCell: ViewerCellBase {...@@ -921,6 +961,27 @@ final class ViewerCell: ViewerCellBase {
921 width: bounds.width - 8, height: textH)961 width: bounds.width - 8, height: textH)
922 }962 }
923963
964 /// Pending debounced spinner. The empty state (no live frame AND no
965 /// filmstrip stand-in) is often just a brief transient — an item swap or a
966 /// seek that lands within a few frames. Showing the spinner instantly makes
967 /// those flash; instead we wait out a short grace period and only reveal it
968 /// if the cell is still empty. Any resolved frame cancels it.
969 private var pendingSpinner: DispatchWorkItem?
970 private func scheduleLoadingOverlay() {
971 guard !overlayVisible, pendingSpinner == nil else { return }
972 let work = DispatchWorkItem { [weak self] in
973 self?.pendingSpinner = nil
974 self?.showLoadingOverlay(true)
975 }
976 pendingSpinner = work
977 DispatchQueue.main.asyncAfter(deadline: .now() + 0.25, execute: work)
978 }
979 private func cancelLoadingOverlay() {
980 pendingSpinner?.cancel()
981 pendingSpinner = nil
982 showLoadingOverlay(false)
983 }
984
924 private func showLoadingOverlay(_ show: Bool) {985 private func showLoadingOverlay(_ show: Bool) {
925 if show { layoutOverlay(in: bounds) }986 if show { layoutOverlay(in: bounds) }
926 guard overlayVisible != show else { return }987 guard overlayVisible != show else { return }
...@@ -1166,8 +1227,16 @@ final class ViewerCell: ViewerCellBase {...@@ -1166,8 +1227,16 @@ final class ViewerCell: ViewerCellBase {
1166 defer { CATransaction.commit() }1227 defer { CATransaction.commit() }
1167 let project = store.project1228 let project = store.project
1168 let playhead = playback.playhead1229 let playhead = playback.playhead
1169 let tp = players.player(for: ref)1230 // Double-buffered: bind each layer to its sub-player once, then show only
1170 if playerLayer.player !== tp.player { playerLayer.player = tp.player }1231 // the front buffer's layer. The back buffer (a prerolled upcoming clip)
1232 // stays hidden until a cut flips the roles.
1233 let vt = players.videoTrack(for: ref)
1234 if playerLayer.player !== vt.a.player { playerLayer.player = vt.a.player }
1235 if playerLayerB.player !== vt.b.player { playerLayerB.player = vt.b.player }
1236 let frontLayer = vt.frontIsA ? playerLayer : playerLayerB
1237 let backLayer = vt.frontIsA ? playerLayerB : playerLayer
1238 let front = vt.front
1239 backLayer.isHidden = true
1171 focusButton.active = session.focusedTracks.contains(ref)1240 focusButton.active = session.focusedTracks.contains(ref)
1172 hideButton.active = session.hiddenTracks.contains(ref)1241 hideButton.active = session.hiddenTracks.contains(ref)
11731242
...@@ -1176,12 +1245,12 @@ final class ViewerCell: ViewerCellBase {...@@ -1176,12 +1245,12 @@ final class ViewerCell: ViewerCellBase {
1176 if let panel = project.clipAt(track: ref, time: playhead, kind: .storyboard),1245 if let panel = project.clipAt(track: ref, time: playhead, kind: .storyboard),
1177 let board = panel.board {1246 let board = panel.board {
1178 currentClipId = panel.id1247 currentClipId = panel.id
1179 playerLayer.isHidden = true1248 frontLayer.isHidden = true
1180 imageLayer.isHidden = false1249 imageLayer.isHidden = false
1181 imageLayer.contents = boards.composite(for: board)1250 imageLayer.contents = boards.composite(for: board)
1182 setTopLeft(project.panelNames()[panel.id] ?? "", hoverOnly: false)1251 setTopLeft(project.panelNames()[panel.id] ?? "", hoverOnly: false)
1183 setStatus("")1252 setStatus("")
1184 showLoadingOverlay(false)1253 cancelLoadingOverlay()
1185 return1254 return
1186 }1255 }
11871256
...@@ -1189,12 +1258,12 @@ final class ViewerCell: ViewerCellBase {...@@ -1189,12 +1258,12 @@ final class ViewerCell: ViewerCellBase {
1189 guard let clip = project.clipAt(track: ref, time: playhead, kind: .video),1258 guard let clip = project.clipAt(track: ref, time: playhead, kind: .video),
1190 let media = project.media(clip.mediaId) else {1259 let media = project.media(clip.mediaId) else {
1191 currentClipId = nil1260 currentClipId = nil
1192 playerLayer.isHidden = true1261 frontLayer.isHidden = true
1193 imageLayer.isHidden = true1262 imageLayer.isHidden = true
1194 imageLayer.contents = nil1263 imageLayer.contents = nil
1195 setTopLeft("", hoverOnly: true)1264 setTopLeft("", hoverOnly: true)
1196 setStatus("")1265 setStatus("")
1197 showLoadingOverlay(false)1266 cancelLoadingOverlay()
1198 return1267 return
1199 }1268 }
1200 currentClipId = clip.id1269 currentClipId = clip.id
...@@ -1208,32 +1277,34 @@ final class ViewerCell: ViewerCellBase {...@@ -1208,32 +1277,34 @@ final class ViewerCell: ViewerCellBase {
1208 // parked near the expected source time; otherwise the filmstrip (a1277 // parked near the expected source time; otherwise the filmstrip (a
1209 // real frame at this moment) stands in — so the transition is1278 // real frame at this moment) stands in — so the transition is
1210 // filmstrip → video, never black.1279 // filmstrip → video, never black.
1211 let cur = tp.player.currentTime().seconds1280 let cur = front.player.currentTime().seconds
1212 let onTime = cur.isFinite && abs(cur - src) < 0.51281 let onTime = cur.isFinite && abs(cur - src) < 0.5
1213 let itemOK = tp.player.currentItem != nil && !tp.itemFailed1282 let itemOK = front.player.currentItem != nil && !front.itemFailed
1214 && tp.player.currentItem?.status != .failed1283 && front.player.currentItem?.status != .failed
1215 && (covered || chunks.originalPlayable(media: media))1284 && (covered || chunks.originalPlayable(media: media))
1216 && playerLayer.isReadyForDisplay1285 && frontLayer.isReadyForDisplay
1217 && onTime1286 && onTime
1218 playerLayer.isHidden = !itemOK
1219 imageLayer.isHidden = itemOK
1220
1221 var status = covered ? "" : "processing…"1287 var status = covered ? "" : "processing…"
1222 if itemOK {1288 if itemOK {
1223 showLoadingOverlay(false)1289 frontLayer.isHidden = false
1224 } else {1290 imageLayer.isHidden = true
1225 let strip = MediaPipeline.shared.filmstripImage(for: media, at: src)1291 cancelLoadingOverlay()
1292 } else if let strip = MediaPipeline.shared.filmstripImage(for: media, at: src) {
1293 // A filmstrip is a real frame for this moment: stand in with it so
1294 // the transition is filmstrip → video, never black.
1295 frontLayer.isHidden = true
1296 imageLayer.isHidden = false
1226 imageLayer.contents = strip1297 imageLayer.contents = strip
1227 // No live video AND no thumbnail stand-in: make "not rendered"1298 cancelLoadingOverlay()
1228 // unmistakable with the framed spinner + "Loading Media…" instead1299 } else {
1229 // of a near-black cell. A filmstrip, when present, is a real frame1300 // No live video AND no stand-in. This is usually just a transient
1230 // for this moment, so it still stands in.1301 // (an item swap or a seek that lands within a few frames), so do
1231 if strip == nil {1302 // NOT blank the cell or flash the spinner immediately — hold what's
1232 showLoadingOverlay(true)1303 // on screen and only escalate to the framed "Loading Media…"
1233 status = ""1304 // overlay if the empty state actually persists (see
1234 } else {1305 // scheduleLoadingOverlay). That kills the paused spinner flashes.
1235 showLoadingOverlay(false)1306 scheduleLoadingOverlay()
1236 }1307 status = ""
1237 }1308 }
1238 setStatus(status)1309 setStatus(status)
1239 }1310 }
sequencer/Sources/Sequencer/main.swift+9
...@@ -11,8 +11,17 @@ if CommandLine.arguments.contains("--uitest") {...@@ -11,8 +11,17 @@ if CommandLine.arguments.contains("--uitest") {
11 MainActor.assumeIsolated { runUITest() }11 MainActor.assumeIsolated { runUITest() }
12}12}
1313
14if CommandLine.arguments.count >= 3, CommandLine.arguments[1] == "--perftest" {
15 _ = NSApplication.shared
16 MainActor.assumeIsolated { runPerfTest(path: CommandLine.arguments[2]) }
17}
18
14let app = SeqApplication.shared19let app = SeqApplication.shared
15let delegate = AppDelegate()20let delegate = AppDelegate()
16app.delegate = delegate21app.delegate = delegate
22// Instantiate our controller before anything opens a document: the first
23// NSDocumentController created becomes the shared instance. Retained here so it
24// stays the shared controller for the app's lifetime.
25let documentController = ProjectDocumentController()
17app.setActivationPolicy(.regular)26app.setActivationPolicy(.regular)
18app.run()27app.run()
sequencer/build.sh+58-1
...@@ -6,6 +6,61 @@ CONFIG=release...@@ -6,6 +6,61 @@ CONFIG=release
6APP=Sequencer.app6APP=Sequencer.app
7BIN=Sequencer7BIN=Sequencer
88
9# Signing identity. Override with: SIGN_ID="Some Identity" ./build.sh
10SIGN_ID="${SIGN_ID:-Sequencer Dev}"
11LOGIN_KEYCHAIN="$HOME/Library/Keychains/login.keychain-db"
12
13# Create a self-signed code-signing identity named "$SIGN_ID" in the login
14# keychain, so codesign works on a machine that has no dev certificate.
15create_cert() {
16 name="$SIGN_ID"
17 echo "Creating self-signed code-signing identity \"$name\"…"
18 tmp=$(mktemp -d)
19 openssl req -x509 -newkey rsa:2048 -sha256 -days 3650 -nodes \
20 -keyout "$tmp/key.pem" -out "$tmp/cert.pem" \
21 -subj "/CN=$name" \
22 -addext "basicConstraints=critical,CA:false" \
23 -addext "keyUsage=critical,digitalSignature" \
24 -addext "extendedKeyUsage=critical,codeSigning" >/dev/null 2>&1
25 openssl pkcs12 -export -legacy -out "$tmp/id.p12" \
26 -inkey "$tmp/key.pem" -in "$tmp/cert.pem" -passout pass: >/dev/null 2>&1 \
27 || openssl pkcs12 -export -out "$tmp/id.p12" \
28 -inkey "$tmp/key.pem" -in "$tmp/cert.pem" -passout pass: >/dev/null 2>&1
29 security import "$tmp/id.p12" -k "$LOGIN_KEYCHAIN" -P "" \
30 -T /usr/bin/codesign -T /usr/bin/security
31 # Trust it for signing, and let codesign use the key without a GUI prompt.
32 # Both are best-effort (may need the keychain password); a one-time
33 # "codesign wants to sign" prompt on first build is harmless — click Always Allow.
34 security add-trusted-cert -r trustRoot -p codeSign -k "$LOGIN_KEYCHAIN" \
35 "$tmp/cert.pem" >/dev/null 2>&1 || true
36 security set-key-partition-list -S apple-tool:,apple:,codesign: -s \
37 -k "" "$LOGIN_KEYCHAIN" >/dev/null 2>&1 || true
38 rm -rf "$tmp"
39}
40
41# Choose a signing identity: honour $SIGN_ID if present, else the first available
42# codesigning identity, else fall back to ad-hoc ("-", no certificate needed).
43pick_identity() {
44 if security find-identity -v -p codesigning 2>/dev/null | grep -qF "\"$SIGN_ID\""; then
45 printf '%s' "$SIGN_ID"; return
46 fi
47 first=$(security find-identity -v -p codesigning 2>/dev/null \
48 | sed -n 's/^[[:space:]]*[0-9][0-9]*)[[:space:]]*[0-9A-Fa-f]*[[:space:]]*"\(.*\)"$/\1/p' \
49 | head -n1)
50 if [ -n "$first" ]; then
51 echo "Identity \"$SIGN_ID\" not found; using \"$first\"." >&2
52 printf '%s' "$first"; return
53 fi
54 echo "No code-signing identity found — using ad-hoc signing (-)." >&2
55 echo " Run './build.sh --create-cert' to make a reusable self-signed \"$SIGN_ID\"." >&2
56 printf '%s' "-"
57}
58
59if [ "$1" = "--create-cert" ]; then
60 create_cert
61 shift
62fi
63
9swift build -c "$CONFIG"64swift build -c "$CONFIG"
1065
11# (Re)build the .app bundle from scratch so stale files never linger.66# (Re)build the .app bundle from scratch so stale files never linger.
...@@ -89,6 +144,8 @@ PLIST...@@ -89,6 +144,8 @@ PLIST
89# Mark the bundle as an app package for Finder/Launch Services.144# Mark the bundle as an app package for Finder/Launch Services.
90printf 'APPL????' > "$APP/Contents/PkgInfo"145printf 'APPL????' > "$APP/Contents/PkgInfo"
91146
92codesign --force --deep --sign "Sequencer Dev" "$APP"147IDENTITY=$(pick_identity)
148echo "Signing with: $IDENTITY"
149codesign --force --deep --sign "$IDENTITY" "$APP"
93150
94echo "Built $APP"151echo "Built $APP"