contents   [plain text]


<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="17162" systemVersion="20A2347" minimumToolsVersion="Automatic" sourceLanguage="Swift" userDefinedModelVersionIdentifier="">
    <entity name="Bottle" representedClassName="BottleMO" syncable="YES" codeGenerationType="class">
        <attribute name="bottleID" optional="YES" attributeType="String"/>
        <attribute name="contents" optional="YES" attributeType="Binary"/>
        <attribute name="escrowedSigningSPKI" optional="YES" attributeType="Binary"/>
        <attribute name="peerID" optional="YES" attributeType="String"/>
        <attribute name="signatureUsingEscrowKey" optional="YES" attributeType="Binary"/>
        <attribute name="signatureUsingPeerKey" optional="YES" attributeType="Binary"/>
        <relationship name="container" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="Container" inverseName="bottles" inverseEntity="Container"/>
    </entity>
    <entity name="Container" representedClassName="ContainerMO" syncable="YES" codeGenerationType="class">
        <attribute name="accountDSID" optional="YES" attributeType="String"/>
        <attribute name="allowedMachineIDs" optional="YES" attributeType="Transformable" valueTransformerName="SetValueTransformer" customClassName="NSSet"/>
        <attribute name="changeToken" optional="YES" attributeType="String"/>
        <attribute name="egoPeerID" optional="YES" attributeType="String"/>
        <attribute name="egoPeerPermanentInfo" optional="YES" attributeType="Binary"/>
        <attribute name="egoPeerPermanentInfoSig" optional="YES" attributeType="Binary"/>
        <attribute name="egoPeerStableInfo" optional="YES" attributeType="Binary"/>
        <attribute name="egoPeerStableInfoSig" optional="YES" attributeType="Binary"/>
        <attribute name="escrowFetchDate" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="honorIDMSListChanges" optional="YES" attributeType="String" defaultValueString="UNKNOWN"/>
        <attribute name="moreChanges" optional="YES" attributeType="Boolean" usesScalarValueType="YES"/>
        <attribute name="name" optional="YES" attributeType="String"/>
        <attribute name="recoveryKeyEncryptionSPKI" optional="YES" attributeType="Binary"/>
        <attribute name="recoveryKeySigningSPKI" optional="YES" attributeType="Binary"/>
        <relationship name="bottles" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="Bottle" inverseName="container" inverseEntity="Bottle"/>
        <relationship name="fullyViableEscrowRecords" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="EscrowRecord" inverseName="fullyViableEscrowRecords" inverseEntity="EscrowRecord"/>
        <relationship name="legacyEscrowRecords" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="EscrowRecord" inverseName="legacyEscrowRecords" inverseEntity="EscrowRecord"/>
        <relationship name="machines" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="Machine" inverseName="container" inverseEntity="Machine"/>
        <relationship name="partiallyViableEscrowRecords" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="EscrowRecord" inverseName="partiallyViableEscrowRecords" inverseEntity="EscrowRecord"/>
        <relationship name="peers" optional="YES" toMany="YES" deletionRule="Cascade" destinationEntity="Peer" inverseName="container" inverseEntity="Peer"/>
        <relationship name="policies" optional="YES" toMany="YES" deletionRule="Cascade" destinationEntity="Policy" inverseName="container" inverseEntity="Policy"/>
    </entity>
    <entity name="EscrowClientMetadata" representedClassName="EscrowClientMetadataMO" syncable="YES" codeGenerationType="class">
        <attribute name="deviceColor" optional="YES" attributeType="String"/>
        <attribute name="deviceEnclosureColor" optional="YES" attributeType="String"/>
        <attribute name="deviceMid" optional="YES" attributeType="String"/>
        <attribute name="deviceModel" optional="YES" attributeType="String"/>
        <attribute name="deviceModelClass" optional="YES" attributeType="String"/>
        <attribute name="deviceModelVersion" optional="YES" attributeType="String"/>
        <attribute name="deviceName" optional="YES" attributeType="String"/>
        <attribute name="devicePlatform" optional="YES" attributeType="Integer 64" defaultValueString="0" usesScalarValueType="YES"/>
        <attribute name="secureBackupMetadataTimestamp" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="secureBackupNumericPassphraseLength" optional="YES" attributeType="Integer 64" defaultValueString="0" usesScalarValueType="YES"/>
        <attribute name="secureBackupUsesComplexPassphrase" optional="YES" attributeType="Integer 64" defaultValueString="0" usesScalarValueType="YES"/>
        <attribute name="secureBackupUsesNumericPassphrase" optional="YES" attributeType="Integer 64" defaultValueString="0" usesScalarValueType="YES"/>
        <relationship name="escrowMetadata" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="EscrowMetadata" inverseName="clientMetadata" inverseEntity="EscrowMetadata"/>
    </entity>
    <entity name="EscrowMetadata" representedClassName="EscrowMetadataMO" syncable="YES" codeGenerationType="class">
        <attribute name="backupKeybagDigest" optional="YES" attributeType="Binary"/>
        <attribute name="bottleID" optional="YES" attributeType="String"/>
        <attribute name="escrowedSPKI" optional="YES" attributeType="Binary"/>
        <attribute name="peerInfo" optional="YES" attributeType="Binary"/>
        <attribute name="secureBackupTimestamp" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="secureBackupUsesMultipleiCSCS" optional="YES" attributeType="Integer 64" defaultValueString="0" usesScalarValueType="YES"/>
        <attribute name="serial" optional="YES" attributeType="String"/>
        <relationship name="clientMetadata" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="EscrowClientMetadata" inverseName="escrowMetadata" inverseEntity="EscrowClientMetadata"/>
        <relationship name="escrowRecord" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="EscrowRecord" inverseName="escrowMetadata" inverseEntity="EscrowRecord"/>
    </entity>
    <entity name="EscrowRecord" representedClassName="EscrowRecordMO" syncable="YES" codeGenerationType="class">
        <attribute name="creationDate" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="label" optional="YES" attributeType="String"/>
        <attribute name="recordStatus" optional="YES" attributeType="Integer 64" defaultValueString="0" usesScalarValueType="YES"/>
        <attribute name="remainingAttempts" optional="YES" attributeType="Integer 64" defaultValueString="0" usesScalarValueType="YES"/>
        <attribute name="silentAttemptAllowed" optional="YES" attributeType="Integer 64" defaultValueString="0" usesScalarValueType="YES"/>
        <attribute name="sosViability" optional="YES" attributeType="Integer 64" defaultValueString="0" usesScalarValueType="YES"/>
        <relationship name="escrowMetadata" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="EscrowMetadata" inverseName="escrowRecord" inverseEntity="EscrowMetadata"/>
        <relationship name="fullyViableEscrowRecords" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="Container" inverseName="fullyViableEscrowRecords" inverseEntity="Container"/>
        <relationship name="legacyEscrowRecords" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="Container" inverseName="legacyEscrowRecords" inverseEntity="Container"/>
        <relationship name="partiallyViableEscrowRecords" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="Container" inverseName="partiallyViableEscrowRecords" inverseEntity="Container"/>
    </entity>
    <entity name="Machine" representedClassName="MachineMO" syncable="YES" codeGenerationType="class">
        <attribute name="allowed" optional="YES" attributeType="Boolean" usesScalarValueType="YES"/>
        <attribute name="machineID" optional="YES" attributeType="String"/>
        <attribute name="modified" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
        <attribute name="seenOnFullList" optional="YES" attributeType="Boolean" usesScalarValueType="YES"/>
        <attribute name="status" optional="YES" attributeType="Integer 64" usesScalarValueType="YES"/>
        <relationship name="container" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="Container" inverseName="machines" inverseEntity="Container"/>
    </entity>
    <entity name="Peer" representedClassName="PeerMO" syncable="YES" codeGenerationType="class">
        <attribute name="dynamicInfo" optional="YES" attributeType="Binary"/>
        <attribute name="dynamicInfoSig" optional="YES" attributeType="Binary"/>
        <attribute name="isEgoPeer" optional="YES" attributeType="Boolean" usesScalarValueType="YES"/>
        <attribute name="peerID" optional="YES" attributeType="String"/>
        <attribute name="permanentInfo" optional="YES" attributeType="Binary"/>
        <attribute name="permanentInfoSig" optional="YES" attributeType="Binary"/>
        <attribute name="stableInfo" optional="YES" attributeType="Binary"/>
        <attribute name="stableInfoSig" optional="YES" attributeType="Binary"/>
        <relationship name="container" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="Container" inverseName="peers" inverseEntity="Container"/>
        <relationship name="recoveryVoucher" optional="YES" maxCount="1" deletionRule="Cascade" destinationEntity="RecoveryVoucher" inverseName="beneficiary" inverseEntity="RecoveryVoucher"/>
        <relationship name="vouchers" optional="YES" toMany="YES" deletionRule="Cascade" destinationEntity="Voucher" inverseName="beneficiary" inverseEntity="Voucher"/>
    </entity>
    <entity name="Policy" representedClassName="PolicyMO" syncable="YES" codeGenerationType="class">
        <attribute name="policyData" optional="YES" attributeType="Binary"/>
        <attribute name="policyHash" optional="YES" attributeType="String"/>
        <attribute name="version" optional="YES" attributeType="Integer 64" defaultValueString="0" usesScalarValueType="YES"/>
        <relationship name="container" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="Container" inverseName="policies" inverseEntity="Container"/>
    </entity>
    <entity name="RecoveryVoucher" representedClassName="RecoveryVoucherMO" syncable="YES" codeGenerationType="class">
        <attribute name="recoverySigningPubKey" optional="YES" attributeType="Binary"/>
        <attribute name="recoveryVoucherInfo" optional="YES" attributeType="Binary"/>
        <attribute name="signature" optional="YES" attributeType="Binary"/>
        <relationship name="beneficiary" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="Peer" inverseName="recoveryVoucher" inverseEntity="Peer"/>
    </entity>
    <entity name="Voucher" representedClassName="VoucherMO" syncable="YES" codeGenerationType="class">
        <attribute name="voucherInfo" optional="YES" attributeType="Binary"/>
        <attribute name="voucherInfoSig" optional="YES" attributeType="Binary"/>
        <relationship name="beneficiary" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="Peer" inverseName="vouchers" inverseEntity="Peer"/>
    </entity>
    <elements>
        <element name="Bottle" positionX="-549" positionY="-234" width="128" height="150"/>
        <element name="Container" positionX="-758" positionY="-261" width="128" height="343"/>
        <element name="EscrowClientMetadata" positionX="-513" positionY="-198" width="128" height="238"/>
        <element name="EscrowMetadata" positionX="-522" positionY="-207" width="128" height="178"/>
        <element name="EscrowRecord" positionX="-549" positionY="-234" width="128" height="179"/>
        <element name="Machine" positionX="-549" positionY="-234" width="128" height="133"/>
        <element name="Peer" positionX="-414" positionY="-387" width="128" height="210"/>
        <element name="Policy" positionX="-414" positionY="54" width="128" height="105"/>
        <element name="RecoveryVoucher" positionX="-65" positionY="-297" width="128" height="105"/>
        <element name="Voucher" positionX="-65" positionY="-171" width="128" height="90"/>
    </elements>
</model>