internal PropertyContext LoadFrom(BinaryReader reader)
        {
            PropertyContext result = default;

            if (reader.BaseStream.Length >= MinimumViableFileSize)
            {
                var context = new PropertyListContext()
                              .HeaderFromBinaryReader(reader);

                if (context.IsSupportedBinaryPropertyList())
                {
                    context = context.TrailerFromBinaryReader(reader)
                              .OffsetTableFromBinaryReader(reader);

                    result = ParseObjectByOffsetIndex(reader, context, (int)context.TopObjectOffset);
                }
            }

            return(result);
        }
        internal PropertyListContext Parse(BinaryReader reader)
        {
            PropertyListContext result = default;

            if (reader.BaseStream.Length >= MinimumViableFileSize)
            {
                result = new PropertyListContext()
                         .HeaderFromBinaryReader(reader);

                if (result.IsSupportedBinaryPropertyList())
                {
                    result = result.TrailerFromBinaryReader(reader)
                             .OffsetTableFromBinaryReader(reader);

#if TRACE_BINARYPROPERTYLISTREADER
                    TraceContext(result);
#endif

                    result.Root = ParseObjectByOffsetIndex(reader, result, (int)result.TopObjectOffset);
                }
            }

            return(result);
        }