static bool ContentsSync(MarsMarkerLibrary marsMarkerLibrary, XRReferenceImageLibrary xrReferenceImageLibrary)
        {
            var needsSave = false;

            // Find all changes and synchronize
            var referenceImages = new Dictionary <Guid, XRReferenceImage>();

            foreach (var xrRefImage in xrReferenceImageLibrary)
            {
                referenceImages.Add(xrRefImage.guid, xrRefImage);
            }

            var markersToAdd = new List <MarsMarkerDefinition>();
            var markersToUpdateDictionary = new Dictionary <MarsMarkerDefinition, XRReferenceImage>();

            foreach (var marsDefinition in marsMarkerLibrary)
            {
                if (referenceImages.ContainsKey(marsDefinition.MarkerId))
                {
                    var refImage = referenceImages[marsDefinition.MarkerId];
                    if (refImage.name != marsDefinition.Label || refImage.specifySize != marsDefinition.SpecifySize ||
                        refImage.size != marsDefinition.Size || refImage.texture != marsDefinition.Texture)
                    {
                        markersToUpdateDictionary.Add(marsDefinition, refImage);
                        needsSave = true;
                    }

                    referenceImages.Remove(marsDefinition.MarkerId);
                }
                else
                {
                    markersToAdd.Add(marsDefinition);
                    needsSave = true;
                }
            }

            // Whatever is left in referenceImages needs to be deleted, since none of the marker definitions match
            needsSave = needsSave || referenceImages.Count > 0;
            foreach (var refImageEntry in referenceImages)
            {
                var index = xrReferenceImageLibrary.indexOf(refImageEntry.Value);
                xrReferenceImageLibrary.RemoveAt(index);
            }

            foreach (var marsMarkerDefinition in markersToAdd)
            {
                var refImage = AddRefImageFromMarker(xrReferenceImageLibrary, marsMarkerDefinition);
                marsMarkerLibrary.SetGuid(marsMarkerLibrary.IndexOf(marsMarkerDefinition), refImage.guid);
            }

            foreach (var dictEntry in markersToUpdateDictionary)
            {
                var index = xrReferenceImageLibrary.indexOf(dictEntry.Value);
                UpdateRefImage(xrReferenceImageLibrary, index, dictEntry.Key);
            }

            return(needsSave);
        }