     {
 
         var offset = offset
-        let targets = reverseOrder ? reverse(targets) : targets
         for (i, asset) in enumerate(targets) {
-            let duration = asset.duration
-
-            if offset <= duration {
-                let time = reverseOrder ? duration - offset : offset
+
+            if offset <= asset.duration {
+                let time = reverseOrder ? asset.duration - offset : offset
                 return (i, time)
             }
-            offset -= duration
+            offset -= asset.duration
         }
         return nil
     }

        let lock = ScopedLock(self)

        if _assets.isEmpty { return nil }

        // 指定したポジションを、時間での表現に変換する
        var expectedOffset = maxDuration * position

        // 1) 0.0の位置を算出する
        var indexAtZero: Int

            // アセットの総時間が最大時間よりも少ないため、先頭が起点になる
            (indexAtZero, timeAtZero) = (0, kCMTimeZero)
        } else {
            let current = _current

            // 現在の再生場所を起点にrate=0.0地点を探索するが、
            // ループの中で先頭だけを特別視するのを避けるため(すべてdurationで計算したい)、
            // ゲタを履かせた上で0.0位置を調べる
            let initialOffset = current.asset.duration - _currentPresentationTimestamp
            let offset = maxDuration * _currentPosition + initialOffset

            let targets = reverse(_assets[0...current.index])
            if let resultAtZero = _positionAt(targets, offset: offset, reverseOrder: true) {
                indexAtZero = current.index - resultAtZero.0
                timeAtZero = resultAtZero.1
            } else {
                return nil
            }
