com.suibari.nagi.putPreferences

suibari.com

Schema Diff

+91 -1

From

CID
bafyreigjcqxtfpa...
Indexed At
2026-08-06 12:22 UTC
View this version

To

CID
bafyreihovx253b6...
Indexed At
2026-09-25 02:44 UTC
View this version

Compatibility Analysis

Backward Compatible

Backward compatible. 49 non-breaking changes.

Non-Breaking Changes (49)
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getChronicle#readYear" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#moderationPreferences" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.chronicleReadYears" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.chronicleReadYears:items" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.languagePreferences" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.languagePreferencesUpdatedAt" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.lastBookmarkFolderId" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.lastBookmarkFolderUpdatedAt" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.moderationPreferences" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.moderationPreferencesUpdatedAt" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.preferredName" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.replyFreq" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.chronicleReadYears" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.chronicleReadYears:items" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.languagePreferences" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.languagePreferencesUpdatedAt" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.lastBookmarkFolderId" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.lastBookmarkFolderUpdatedAt" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.moderationPreferences" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.moderationPreferencesUpdatedAt" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.preferredName" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.replyFreq" }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.chronicleReadYears", kind: "prop", name: Some("chronicleReadYears") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.languagePreferences", kind: "prop", name: Some("languagePreferences") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.languagePreferencesUpdatedAt", kind: "prop", name: Some("languagePreferencesUpdatedAt") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.lastBookmarkFolderId", kind: "prop", name: Some("lastBookmarkFolderId") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.lastBookmarkFolderUpdatedAt", kind: "prop", name: Some("lastBookmarkFolderUpdatedAt") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.moderationPreferences", kind: "prop", name: Some("moderationPreferences") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.moderationPreferencesUpdatedAt", kind: "prop", name: Some("moderationPreferencesUpdatedAt") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.preferredName", kind: "prop", name: Some("preferredName") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.replyFreq", kind: "prop", name: Some("replyFreq") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input.chronicleReadYears", tgt: "com.suibari.nagi.putPreferences:input.chronicleReadYears:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input.chronicleReadYears:items", tgt: "com.suibari.nagi.getChronicle#readYear", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input.languagePreferences", tgt: "com.suibari.nagi.getPreferences#languagePreferences", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input.moderationPreferences", tgt: "com.suibari.nagi.getPreferences#moderationPreferences", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.chronicleReadYears", kind: "prop", name: Some("chronicleReadYears") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.languagePreferences", kind: "prop", name: Some("languagePreferences") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.languagePreferencesUpdatedAt", kind: "prop", name: Some("languagePreferencesUpdatedAt") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.lastBookmarkFolderId", kind: "prop", name: Some("lastBookmarkFolderId") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.lastBookmarkFolderUpdatedAt", kind: "prop", name: Some("lastBookmarkFolderUpdatedAt") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.moderationPreferences", kind: "prop", name: Some("moderationPreferences") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.moderationPreferencesUpdatedAt", kind: "prop", name: Some("moderationPreferencesUpdatedAt") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.preferredName", kind: "prop", name: Some("preferredName") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.replyFreq", kind: "prop", name: Some("replyFreq") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output.chronicleReadYears", tgt: "com.suibari.nagi.putPreferences:output.chronicleReadYears:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output.chronicleReadYears:items", tgt: "com.suibari.nagi.getChronicle#readYear", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output.languagePreferences", tgt: "com.suibari.nagi.getPreferences#languagePreferences", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output.moderationPreferences", tgt: "com.suibari.nagi.getPreferences#moderationPreferences", kind: "ref", name: None }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "com.suibari.nagi.getChronicle#readYear" }
  • AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences" }
  • AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#moderationPreferences" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.chronicleReadYears" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.chronicleReadYears:items" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.languagePreferences" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.languagePreferencesUpdatedAt" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.lastBookmarkFolderId" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.lastBookmarkFolderUpdatedAt" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.moderationPreferences" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.moderationPreferencesUpdatedAt" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.preferredName" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.replyFreq" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.chronicleReadYears" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.chronicleReadYears:items" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.languagePreferences" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.languagePreferencesUpdatedAt" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.lastBookmarkFolderId" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.lastBookmarkFolderUpdatedAt" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.moderationPreferences" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.moderationPreferencesUpdatedAt" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.preferredName" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.replyFreq" }

Additional Notes

  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.chronicleReadYears", kind: "prop", name: Some("chronicleReadYears") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.languagePreferences", kind: "prop", name: Some("languagePreferences") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.languagePreferencesUpdatedAt", kind: "prop", name: Some("languagePreferencesUpdatedAt") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.lastBookmarkFolderId", kind: "prop", name: Some("lastBookmarkFolderId") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.lastBookmarkFolderUpdatedAt", kind: "prop", name: Some("lastBookmarkFolderUpdatedAt") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.moderationPreferences", kind: "prop", name: Some("moderationPreferences") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.moderationPreferencesUpdatedAt", kind: "prop", name: Some("moderationPreferencesUpdatedAt") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.preferredName", kind: "prop", name: Some("preferredName") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.replyFreq", kind: "prop", name: Some("replyFreq") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input.chronicleReadYears", tgt: "com.suibari.nagi.putPreferences:input.chronicleReadYears:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input.chronicleReadYears:items", tgt: "com.suibari.nagi.getChronicle#readYear", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input.languagePreferences", tgt: "com.suibari.nagi.getPreferences#languagePreferences", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input.moderationPreferences", tgt: "com.suibari.nagi.getPreferences#moderationPreferences", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.chronicleReadYears", kind: "prop", name: Some("chronicleReadYears") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.languagePreferences", kind: "prop", name: Some("languagePreferences") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.languagePreferencesUpdatedAt", kind: "prop", name: Some("languagePreferencesUpdatedAt") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.lastBookmarkFolderId", kind: "prop", name: Some("lastBookmarkFolderId") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.lastBookmarkFolderUpdatedAt", kind: "prop", name: Some("lastBookmarkFolderUpdatedAt") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.moderationPreferences", kind: "prop", name: Some("moderationPreferences") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.moderationPreferencesUpdatedAt", kind: "prop", name: Some("moderationPreferencesUpdatedAt") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.preferredName", kind: "prop", name: Some("preferredName") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.replyFreq", kind: "prop", name: Some("replyFreq") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output.chronicleReadYears", tgt: "com.suibari.nagi.putPreferences:output.chronicleReadYears:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output.chronicleReadYears:items", tgt: "com.suibari.nagi.getChronicle#readYear", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output.languagePreferences", tgt: "com.suibari.nagi.getPreferences#languagePreferences", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output.moderationPreferences", tgt: "com.suibari.nagi.getPreferences#moderationPreferences", kind: "ref", name: None }
1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 4
    "main": {
5 -
      "description": "同期対象の設定を書き込む。既読位置は (indexedAt, uri) が進むときだけ更新する単調マージ、お気に入りは updatedAt による後勝ち。どちらも省略でき、送った分だけが更新される。",
5 +
      "description": "同期対象の本人設定を書き込む。既読位置は単調マージ、配列・言語・コンテンツ表示設定・最後のブックマークフォルダは updatedAt による後勝ち。各項目は省略でき、送った分だけを更新する。",
6 6
      "errors": [
7 7
        {
8 8
          "name": "AuthRequired"
9 9
        },
10 10
        {
11 11
          "name": "InvalidRequest"
12 12
        }
13 13
      ],
14 14
      "input": {
15 15
        "encoding": "application/json",
16 16
        "schema": {
17 17
          "properties": {
18 +
            "chronicleReadYears": {
19 +
              "description": "年ごとの既読ハッシュ。過去の版は蓄積せず、現在の年表内容と一致する版だけを保存する。",
20 +
              "items": {
21 +
                "ref": "com.suibari.nagi.getChronicle#readYear",
22 +
                "type": "ref"
23 +
              },
24 +
              "maxLength": 100,
25 +
              "type": "array"
26 +
            },
18 27
            "emojiFavorites": {
19 28
              "items": {
20 29
                "type": "unknown"
21 30
              },
22 31
              "maxLength": 32,
23 32
              "type": "array"
24 33
            },
25 34
            "emojiFavoritesUpdatedAt": {
26 35
              "description": "emojiFavorites を送るときは必須。保存済みより古ければ書き込まない。",
27 36
              "format": "datetime",
28 37
              "type": "string"
29 38
            },
30 39
            "feedTabs": {
31 40
              "items": {
32 41
                "ref": "com.suibari.nagi.getPreferences#feedTab",
33 42
                "type": "ref"
34 43
              },
35 44
              "maxLength": 16,
36 45
              "type": "array"
37 46
            },
38 47
            "feedTabsUpdatedAt": {
39 48
              "description": "feedTabs を送るときは必須。保存済みより古ければ書き込まない。",
40 49
              "format": "datetime",
41 50
              "type": "string"
42 51
            },
52 +
            "languagePreferences": {
53 +
              "ref": "com.suibari.nagi.getPreferences#languagePreferences",
54 +
              "type": "ref"
55 +
            },
56 +
            "languagePreferencesUpdatedAt": {
57 +
              "format": "datetime",
58 +
              "type": "string"
59 +
            },
60 +
            "lastBookmarkFolderId": {
61 +
              "maxLength": 64,
62 +
              "nullable": true,
63 +
              "type": "string"
64 +
            },
65 +
            "lastBookmarkFolderUpdatedAt": {
66 +
              "format": "datetime",
67 +
              "type": "string"
68 +
            },
69 +
            "moderationPreferences": {
70 +
              "ref": "com.suibari.nagi.getPreferences#moderationPreferences",
71 +
              "type": "ref"
72 +
            },
73 +
            "moderationPreferencesUpdatedAt": {
74 +
              "format": "datetime",
75 +
              "type": "string"
76 +
            },
77 +
            "preferredName": {
78 +
              "description": "botたんに呼んでほしい名前。空文字を送ると登録を解除し、表示名に戻す。送らなければ変更しない。",
79 +
              "maxGraphemes": 40,
80 +
              "maxLength": 120,
81 +
              "type": "string"
82 +
            },
43 83
            "readPositions": {
44 84
              "items": {
45 85
                "ref": "com.suibari.nagi.getPreferences#readPosition",
46 86
                "type": "ref"
47 87
              },
48 88
              "maxLength": 16,
49 89
              "type": "array"
90 +
            },
91 +
            "replyFreq": {
92 +
              "description": "botたんからの返信確率(0〜100%)。送らなければ変更しない。",
93 +
              "maximum": 100,
94 +
              "minimum": 0,
95 +
              "type": "integer"
50 96
            }
51 97
          },
52 98
          "type": "object"
53 99
        }
54 100
      },
55 101
      "output": {
56 102
        "encoding": "application/json",
57 103
        "schema": {
58 104
          "properties": {
105 +
            "chronicleReadYears": {
106 +
              "description": "年ごとの既読ハッシュ。過去の版は蓄積せず、現在の年表内容と一致する版だけを保存する。",
107 +
              "items": {
108 +
                "ref": "com.suibari.nagi.getChronicle#readYear",
109 +
                "type": "ref"
110 +
              },
111 +
              "type": "array"
112 +
            },
59 113
            "emojiFavorites": {
60 114
              "items": {
61 115
                "type": "unknown"
62 116
              },
63 117
              "maxLength": 32,
64 118
              "type": "array"
65 119
            },
66 120
            "emojiFavoritesUpdatedAt": {
67 121
              "format": "datetime",
68 122
              "type": "string"
69 123
            },
70 124
            "feedTabs": {
71 125
              "items": {
72 126
                "ref": "com.suibari.nagi.getPreferences#feedTab",
73 127
                "type": "ref"
74 128
              },
75 129
              "maxLength": 16,
76 130
              "type": "array"
77 131
            },
78 132
            "feedTabsUpdatedAt": {
79 133
              "format": "datetime",
80 134
              "type": "string"
81 135
            },
136 +
            "languagePreferences": {
137 +
              "ref": "com.suibari.nagi.getPreferences#languagePreferences",
138 +
              "type": "ref"
139 +
            },
140 +
            "languagePreferencesUpdatedAt": {
141 +
              "format": "datetime",
142 +
              "type": "string"
143 +
            },
144 +
            "lastBookmarkFolderId": {
145 +
              "maxLength": 64,
146 +
              "type": "string"
147 +
            },
148 +
            "lastBookmarkFolderUpdatedAt": {
149 +
              "format": "datetime",
150 +
              "type": "string"
151 +
            },
152 +
            "moderationPreferences": {
153 +
              "ref": "com.suibari.nagi.getPreferences#moderationPreferences",
154 +
              "type": "ref"
155 +
            },
156 +
            "moderationPreferencesUpdatedAt": {
157 +
              "format": "datetime",
158 +
              "type": "string"
159 +
            },
160 +
            "preferredName": {
161 +
              "description": "botたんに呼んでほしい名前。省略時は未設定=表示名で呼ばれる。",
162 +
              "maxGraphemes": 40,
163 +
              "maxLength": 120,
164 +
              "type": "string"
165 +
            },
82 166
            "readPositions": {
83 167
              "description": "マージ後の確定値。送った位置が負けた場合は保存済みの方が返る。",
84 168
              "items": {
85 169
                "ref": "com.suibari.nagi.getPreferences#readPosition",
86 170
                "type": "ref"
87 171
              },
88 172
              "type": "array"
173 +
            },
174 +
            "replyFreq": {
175 +
              "description": "botたんからの返信確率(0〜100%)。",
176 +
              "maximum": 100,
177 +
              "minimum": 0,
178 +
              "type": "integer"
89 179
            }
90 180
          },
91 181
          "required": [
92 182
            "readPositions",
93 183
            "emojiFavorites"
94 184
          ],
95 185
          "type": "object"
96 186
        }
97 187
      },
98 188
      "type": "procedure"
99 189
    }
100 190
  },
101 191
  "id": "com.suibari.nagi.putPreferences",
102 192
  "lexicon": 1
103 193
}

Compare Other Versions

Lexicon Garden

@