/// <summary>
        /// Do the fuzz process
        /// </summary>
        /// <param name="realOffset">Real offset</param>
        public PatchChange Process(long realOffset)
        {
            // Removes

            var remove = RemoveLength != null?RemoveLength.Get() : (ushort)0;

            // Appends

            var size = AppendIterations != null?AppendIterations.Get() : 0;

            byte[] data = size > 0 && Append != null?Append.GetChunk(size) : null;

            if (data == null || data.Length == 0)
            {
                return(remove > 0 ? new PatchChange(Description, realOffset, remove) : null);
            }

            // Apply the filter

            if (Filter != null)
            {
                var filter = Filter.Get();
                if (filter != null)
                {
                    data = filter.ApplyFilter(data);
                }
            }

            return(new PatchChange(Description, realOffset, remove, data));
        }
        /// <summary>
        /// GetHashCode
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            var hashCode = -1435047217;

            hashCode = hashCode * -1521134295 + Description.GetHashCodeWithNullCheck();
            hashCode = hashCode * -1521134295 + Weight.GetHashCodeWithNullCheck();
            hashCode = hashCode * -1521134295 + Append.GetHashCodeWithNullCheck();
            hashCode = hashCode * -1521134295 + AppendIterations.GetHashCodeWithNullCheck();
            hashCode = hashCode * -1521134295 + RemoveLength.GetHashCodeWithNullCheck();
            hashCode = hashCode * -1521134295 + Filter.GetHashCodeWithNullCheck();
            return(hashCode);
        }