/// <summary>
        /// bitmap cache get ->
        /// background thread hand-off -> multiplex -> bitmap cache ->
        /// decode -> branch on separate images
        ///   -> exif resize and rotate -> exif thumbnail creation
        ///   -> local image resize and rotate -> add meta data producer
        ///   -> multiplex -> encoded cache -> (webp transcode)
        ///   -> FutureAccessList fetch.
        /// </summary>
        private IProducer <CloseableReference <CloseableImage> > GetFutureAccessListFetchSequence()
        {
            lock (_gate)
            {
                if (_futureAccessListFetchSequence == null)
                {
                    FutureAccessListFetchProducer futureAccessListFetchProducer =
                        _producerFactory.NewFutureAccessListFetchProducer();

                    _futureAccessListFetchSequence =
                        NewBitmapCacheGetToLocalTransformSequence(futureAccessListFetchProducer);
                }

                return(_futureAccessListFetchSequence);
            }
        }
        /// <summary>
        /// encoded cache multiplex -> encoded cache -> FutureAccessList fetch.
        /// </summary>
        private IProducer <CloseableReference <IPooledByteBuffer> > GetEncodedFutureAccessListFetchSequence()
        {
            lock (_gate)
            {
                if (_encodedFutureAccessListFetchSequence == null)
                {
                    FutureAccessListFetchProducer futureAccessListFetchProducer =
                        _producerFactory.NewFutureAccessListFetchProducer();

                    _encodedFutureAccessListFetchSequence = new RemoveImageTransformMetaDataProducer(
                        NewEncodedCacheMultiplexToTranscodeSequence(futureAccessListFetchProducer));
                }

                return(_encodedFutureAccessListFetchSequence);
            }
        }