@omujs/chat 0.9.10 → 0.9.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/CHANGELOG.md +146 -0
  2. package/README.md +19 -1
  3. package/dist/dts/chat.d.ts +18 -19
  4. package/dist/dts/const.d.ts +2 -3
  5. package/dist/dts/event/event-types.d.ts +13 -8
  6. package/dist/dts/event/event.d.ts +24 -25
  7. package/dist/dts/event/index.d.ts +2 -3
  8. package/dist/dts/index.d.ts +6 -5
  9. package/dist/dts/models/author.d.ts +32 -35
  10. package/dist/dts/models/channel.d.ts +28 -31
  11. package/dist/dts/models/content.d.ts +26 -84
  12. package/dist/dts/models/gift.d.ts +20 -22
  13. package/dist/dts/models/index.d.ts +13 -12
  14. package/dist/dts/models/message.d.ts +37 -40
  15. package/dist/dts/models/paid.d.ts +8 -10
  16. package/dist/dts/models/provider.d.ts +31 -34
  17. package/dist/dts/models/reaction.d.ts +18 -20
  18. package/dist/dts/models/role.d.ts +23 -25
  19. package/dist/dts/models/room.d.ts +39 -42
  20. package/dist/dts/models/vote.d.ts +28 -31
  21. package/dist/dts/permissions.d.ts +7 -7
  22. package/dist/esm/chat.js +7652 -112
  23. package/dist/esm/const.js +4751 -3
  24. package/dist/esm/event/event-types.js +75 -9
  25. package/dist/esm/event/event.js +101 -75
  26. package/dist/esm/event/index.js +115 -3
  27. package/dist/esm/index.js +7698 -5
  28. package/dist/esm/models/author.js +4823 -38
  29. package/dist/esm/models/channel.js +4789 -41
  30. package/dist/esm/models/content.js +39 -168
  31. package/dist/esm/models/gift.js +39 -32
  32. package/dist/esm/models/index.js +5190 -12
  33. package/dist/esm/models/message.js +4886 -57
  34. package/dist/esm/models/paid.js +24 -17
  35. package/dist/esm/models/provider.js +4792 -44
  36. package/dist/esm/models/reaction.js +4763 -15
  37. package/dist/esm/models/role.js +43 -36
  38. package/dist/esm/models/room.js +4788 -40
  39. package/dist/esm/models/vote.js +4784 -36
  40. package/dist/esm/permissions.js +4764 -8
  41. package/package.json +26 -37
  42. package/src/chat.ts +49 -43
  43. package/src/const.ts +2 -2
  44. package/src/event/event-types.ts +13 -7
  45. package/src/event/event.ts +18 -18
  46. package/src/event/index.ts +2 -1
  47. package/src/index.ts +5 -4
  48. package/src/models/author.ts +15 -17
  49. package/src/models/channel.ts +11 -13
  50. package/src/models/content.ts +42 -206
  51. package/src/models/gift.ts +1 -3
  52. package/src/models/index.ts +14 -11
  53. package/src/models/message.ts +19 -22
  54. package/src/models/paid.ts +1 -3
  55. package/src/models/provider.ts +16 -18
  56. package/src/models/reaction.ts +5 -6
  57. package/src/models/role.ts +1 -3
  58. package/src/models/room.ts +11 -13
  59. package/src/models/vote.ts +9 -11
  60. package/src/permissions.ts +8 -7
  61. package/tsconfig.json +5 -2
  62. package/tsconfig.tsbuildinfo +1 -0
  63. package/LICENSE +0 -21
  64. package/dist/dts/chat.d.ts.map +0 -1
  65. package/dist/dts/const.d.ts.map +0 -1
  66. package/dist/dts/event/event-types.d.ts.map +0 -1
  67. package/dist/dts/event/event.d.ts.map +0 -1
  68. package/dist/dts/event/index.d.ts.map +0 -1
  69. package/dist/dts/index.d.ts.map +0 -1
  70. package/dist/dts/models/author.d.ts.map +0 -1
  71. package/dist/dts/models/channel.d.ts.map +0 -1
  72. package/dist/dts/models/content.d.ts.map +0 -1
  73. package/dist/dts/models/gift.d.ts.map +0 -1
  74. package/dist/dts/models/index.d.ts.map +0 -1
  75. package/dist/dts/models/message.d.ts.map +0 -1
  76. package/dist/dts/models/paid.d.ts.map +0 -1
  77. package/dist/dts/models/provider.d.ts.map +0 -1
  78. package/dist/dts/models/reaction.d.ts.map +0 -1
  79. package/dist/dts/models/role.d.ts.map +0 -1
  80. package/dist/dts/models/room.d.ts.map +0 -1
  81. package/dist/dts/models/vote.d.ts.map +0 -1
  82. package/dist/dts/permissions.d.ts.map +0 -1
  83. package/dist/esm/chat.js.map +0 -1
  84. package/dist/esm/const.js.map +0 -1
  85. package/dist/esm/event/event-types.js.map +0 -1
  86. package/dist/esm/event/event.js.map +0 -1
  87. package/dist/esm/event/index.js.map +0 -1
  88. package/dist/esm/index.js.map +0 -1
  89. package/dist/esm/models/author.js.map +0 -1
  90. package/dist/esm/models/channel.js.map +0 -1
  91. package/dist/esm/models/content.js.map +0 -1
  92. package/dist/esm/models/gift.js.map +0 -1
  93. package/dist/esm/models/index.js.map +0 -1
  94. package/dist/esm/models/message.js.map +0 -1
  95. package/dist/esm/models/paid.js.map +0 -1
  96. package/dist/esm/models/provider.js.map +0 -1
  97. package/dist/esm/models/reaction.js.map +0 -1
  98. package/dist/esm/models/role.js.map +0 -1
  99. package/dist/esm/models/room.js.map +0 -1
  100. package/dist/esm/models/vote.js.map +0 -1
  101. package/dist/esm/permissions.js.map +0 -1
  102. package/eslint.config.js +0 -6
@@ -1,168 +1,39 @@
1
- import { Identifier } from '@omujs/omu';
2
- export class Component {
3
- type;
4
- constructor(type) {
5
- this.type = type;
6
- }
7
- isParent() {
8
- return 'children' in this;
9
- }
10
- walk(cb) {
11
- const stack = [this];
12
- while (stack.length) {
13
- const component = stack.pop();
14
- if (!component) {
15
- continue;
16
- }
17
- cb(component);
18
- if (component.isParent()) {
19
- stack.push(...component.children);
20
- }
21
- }
22
- }
23
- *iter() {
24
- const stack = [this];
25
- while (stack.length) {
26
- const component = stack.pop();
27
- if (!component) {
28
- continue;
29
- }
30
- yield component;
31
- if (component.isParent()) {
32
- stack.push(...component.children);
33
- }
34
- }
35
- }
36
- toString() {
37
- const parts = [];
38
- for (const component of this.iter()) {
39
- if (component instanceof Text) {
40
- parts.push(component.text);
41
- }
42
- }
43
- return parts.join('');
44
- }
45
- }
46
- const componentTypes = {};
47
- export function deserialize(json) {
48
- const type = componentTypes[json.type];
49
- if (!type) {
50
- throw new Error(`Unknown component type: ${json.type}`);
51
- }
52
- return type.fromJson(json.data);
53
- }
54
- export function serialize(component) {
55
- return {
56
- type: component.type,
57
- data: component.toJson(),
58
- };
59
- }
60
- export function register(type, deserialize) {
61
- if (componentTypes[type]) {
62
- throw new Error(`Component type already registered: ${type}`);
63
- }
64
- componentTypes[type] = {
65
- type,
66
- fromJson: deserialize,
67
- };
68
- }
69
- export class Root extends Component {
70
- children;
71
- constructor(children) {
72
- super('root');
73
- this.children = children;
74
- }
75
- toJson() {
76
- return this.children.map(serialize);
77
- }
78
- add(component) {
79
- this.children.push(component);
80
- }
81
- text() {
82
- const parts = [];
83
- for (const component of this.iter()) {
84
- if (component instanceof Text) {
85
- parts.push(component.text);
86
- }
87
- }
88
- return parts.join('');
89
- }
90
- }
91
- export class Text extends Component {
92
- text;
93
- constructor(text) {
94
- super('text');
95
- this.text = text;
96
- }
97
- toJson() {
98
- return this.text;
99
- }
100
- static of(text) {
101
- return new Text(text);
102
- }
103
- }
104
- export class Image extends Component {
105
- url;
106
- id;
107
- name;
108
- constructor(url, id, name = undefined) {
109
- super('image');
110
- this.url = url;
111
- this.id = id;
112
- this.name = name;
113
- }
114
- toJson() {
115
- return {
116
- url: this.url,
117
- id: this.id,
118
- name: this.name,
119
- };
120
- }
121
- static of({ url, id, name }) {
122
- return new Image(url, id, name);
123
- }
124
- }
125
- export class Asset extends Component {
126
- id;
127
- constructor(id) {
128
- super('asset');
129
- this.id = id;
130
- }
131
- toJson() {
132
- return {
133
- id: this.id.key(),
134
- };
135
- }
136
- }
137
- export class Link extends Component {
138
- url;
139
- children;
140
- constructor(url, children) {
141
- super('link');
142
- this.url = url;
143
- this.children = children;
144
- }
145
- toJson() {
146
- return {
147
- url: this.url,
148
- children: this.children.map(serialize),
149
- };
150
- }
151
- }
152
- export class System extends Component {
153
- children;
154
- constructor(children) {
155
- super('system');
156
- this.children = children;
157
- }
158
- toJson() {
159
- return this.children.map(serialize);
160
- }
161
- }
162
- register('root', (data) => new Root(data.map(deserialize)));
163
- register('text', (data) => new Text(data));
164
- register('image', (data) => new Image(data.url, data.id, data.name));
165
- register('asset', (data) => new Asset(Identifier.fromKey(data.id)));
166
- register('link', (data) => new Link(data.url, data.children.map(deserialize)));
167
- register('system', (data) => new System(data.map(deserialize)));
168
- //# sourceMappingURL=content.js.map
1
+ // @bun
2
+ // src/models/content.ts
3
+ function children(component) {
4
+ switch (component.type) {
5
+ case "root":
6
+ return component.data;
7
+ case "system":
8
+ return component.data;
9
+ case "link":
10
+ return component.data.children;
11
+ case "text":
12
+ return [];
13
+ case "image":
14
+ return [];
15
+ case "asset":
16
+ return [];
17
+ }
18
+ }
19
+ function* walk(component) {
20
+ const queue = [component];
21
+ while (queue.length > 0) {
22
+ const component2 = queue.pop();
23
+ if (!component2)
24
+ return;
25
+ yield component2;
26
+ queue.push(...children(component2).slice().reverse());
27
+ }
28
+ }
29
+ function format(component) {
30
+ return [...walk(component)].filter((it) => it.type === "text").map((it) => it.data).join("");
31
+ }
32
+ export {
33
+ walk,
34
+ format,
35
+ children
36
+ };
37
+
38
+ //# debugId=3D5A89C228A2C9FA64756E2164756E21
39
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL21vZGVscy9jb250ZW50LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgImltcG9ydCB7IEpzb25UeXBlIH0gZnJvbSAnQG9tdWpzL29tdS9zZXJpYWxpemUnO1xuXG5leHBvcnQgdHlwZSBDb21wb25lbnRUeXBlPFQgZXh0ZW5kcyBzdHJpbmcsIEQgZXh0ZW5kcyBKc29uVHlwZSA9IEpzb25UeXBlPiA9IHtcbiAgICB0eXBlOiBUO1xuICAgIGRhdGE6IEQ7XG59O1xuXG5leHBvcnQgdHlwZSBSb290ID0gQ29tcG9uZW50VHlwZTwncm9vdCcsIENvbXBvbmVudFtdPjtcblxuZXhwb3J0IHR5cGUgVGV4dCA9IENvbXBvbmVudFR5cGU8J3RleHQnLCBzdHJpbmc+O1xuXG5leHBvcnQgdHlwZSBJbWFnZSA9IENvbXBvbmVudFR5cGU8J2ltYWdlJywge1xuICAgIHVybDogc3RyaW5nO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbmFtZT86IHN0cmluZztcbn0+O1xuXG5leHBvcnQgdHlwZSBBc3NldCA9IENvbXBvbmVudFR5cGU8J2Fzc2V0Jywge1xuICAgIGlkOiBzdHJpbmc7XG59PjtcblxuZXhwb3J0IHR5cGUgTGluayA9IENvbXBvbmVudFR5cGU8J2xpbmsnLCB7XG4gICAgdXJsOiBzdHJpbmc7XG4gICAgY2hpbGRyZW46IENvbXBvbmVudFtdO1xufT47XG5cbmV4cG9ydCB0eXBlIFN5c3RlbSA9IENvbXBvbmVudFR5cGU8J3N5c3RlbScsIENvbXBvbmVudFtdPjtcblxuZXhwb3J0IHR5cGUgQ29tcG9uZW50ID1cbiAgICAgICAgICAgICAgICAgICAgfCBSb290XG4gICAgICAgICAgICAgICAgICAgIHwgVGV4dFxuICAgICAgICAgICAgICAgICAgICB8IEltYWdlXG4gICAgICAgICAgICAgICAgICAgIHwgQXNzZXRcbiAgICAgICAgICAgICAgICAgICAgfCBMaW5rXG4gICAgICAgICAgICAgICAgICAgIHwgU3lzdGVtO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hpbGRyZW4oY29tcG9uZW50OiBDb21wb25lbnQpOiBDb21wb25lbnRbXSB7XG4gICAgc3dpdGNoIChjb21wb25lbnQudHlwZSkge1xuICAgICAgICBjYXNlICdyb290JzogcmV0dXJuIGNvbXBvbmVudC5kYXRhO1xuICAgICAgICBjYXNlICdzeXN0ZW0nOiByZXR1cm4gY29tcG9uZW50LmRhdGE7XG4gICAgICAgIGNhc2UgJ2xpbmsnOiByZXR1cm4gY29tcG9uZW50LmRhdGEuY2hpbGRyZW47XG4gICAgICAgIGNhc2UgJ3RleHQnOiByZXR1cm4gW107XG4gICAgICAgIGNhc2UgJ2ltYWdlJzogcmV0dXJuIFtdO1xuICAgICAgICBjYXNlICdhc3NldCc6IHJldHVybiBbXTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiAqd2Fsayhjb21wb25lbnQ6IENvbXBvbmVudCk6IEl0ZXJhYmxlPENvbXBvbmVudD4ge1xuICAgIGNvbnN0IHF1ZXVlID0gW2NvbXBvbmVudF07XG4gICAgd2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gcXVldWUucG9wKCk7XG4gICAgICAgIGlmICghY29tcG9uZW50KSByZXR1cm47XG4gICAgICAgIHlpZWxkIGNvbXBvbmVudDtcbiAgICAgICAgcXVldWUucHVzaCguLi5jaGlsZHJlbihjb21wb25lbnQpLnNsaWNlKCkucmV2ZXJzZSgpKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXQoY29tcG9uZW50OiBDb21wb25lbnQpOiBzdHJpbmcge1xuICAgIHJldHVybiBbLi4ud2Fsayhjb21wb25lbnQpXVxuICAgICAgICAuZmlsdGVyKGl0ID0+IGl0LnR5cGUgPT09ICd0ZXh0JylcbiAgICAgICAgLm1hcChpdCA9PiBpdC5kYXRhKS5qb2luKCcnKTtcbn1cbiIKICBdLAogICJtYXBwaW5ncyI6ICI7O0FBb0NPLFNBQVMsUUFBUSxDQUFDLFdBQW1DO0FBQUEsRUFDeEQsUUFBUSxVQUFVO0FBQUEsU0FDVDtBQUFBLE1BQVEsT0FBTyxVQUFVO0FBQUEsU0FDekI7QUFBQSxNQUFVLE9BQU8sVUFBVTtBQUFBLFNBQzNCO0FBQUEsTUFBUSxPQUFPLFVBQVUsS0FBSztBQUFBLFNBQzlCO0FBQUEsTUFBUSxPQUFPLENBQUM7QUFBQSxTQUNoQjtBQUFBLE1BQVMsT0FBTyxDQUFDO0FBQUEsU0FDakI7QUFBQSxNQUFTLE9BQU8sQ0FBQztBQUFBO0FBQUE7QUFJdkIsVUFBVSxJQUFJLENBQUMsV0FBMkM7QUFBQSxFQUM3RCxNQUFNLFFBQVEsQ0FBQyxTQUFTO0FBQUEsRUFDeEIsT0FBTyxNQUFNLFNBQVMsR0FBRztBQUFBLElBQ3JCLE1BQU0sYUFBWSxNQUFNLElBQUk7QUFBQSxJQUM1QixJQUFJLENBQUM7QUFBQSxNQUFXO0FBQUEsSUFDaEIsTUFBTTtBQUFBLElBQ04sTUFBTSxLQUFLLEdBQUcsU0FBUyxVQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQztBQUFBLEVBQ3ZEO0FBQUE7QUFHRyxTQUFTLE1BQU0sQ0FBQyxXQUE4QjtBQUFBLEVBQ2pELE9BQU8sQ0FBQyxHQUFHLEtBQUssU0FBUyxDQUFDLEVBQ3JCLE9BQU8sUUFBTSxHQUFHLFNBQVMsTUFBTSxFQUMvQixJQUFJLFFBQU0sR0FBRyxJQUFJLEVBQUUsS0FBSyxFQUFFO0FBQUE7IiwKICAiZGVidWdJZCI6ICIzRDVBODlDMjI4QTJDOUZBNjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==
@@ -1,33 +1,40 @@
1
- export class Gift {
2
- id;
3
- name;
4
- amount;
5
- isPaid;
6
- imageUrl;
7
- constructor(options) {
8
- this.id = options.id;
9
- this.name = options.name;
10
- this.amount = options.amount;
11
- this.isPaid = options.isPaid;
12
- this.imageUrl = options.imageUrl;
13
- }
14
- static fromJson(options) {
15
- return new Gift({
16
- id: options.id,
17
- name: options.name,
18
- amount: options.amount,
19
- isPaid: options.is_paid,
20
- imageUrl: options.image_url,
21
- });
22
- }
23
- toJson() {
24
- return {
25
- id: this.id,
26
- name: this.name,
27
- amount: this.amount,
28
- is_paid: this.isPaid,
29
- image_url: this.imageUrl,
30
- };
31
- }
1
+ // @bun
2
+ // src/models/gift.ts
3
+ class Gift {
4
+ id;
5
+ name;
6
+ amount;
7
+ isPaid;
8
+ imageUrl;
9
+ constructor(options) {
10
+ this.id = options.id;
11
+ this.name = options.name;
12
+ this.amount = options.amount;
13
+ this.isPaid = options.isPaid;
14
+ this.imageUrl = options.imageUrl;
15
+ }
16
+ static fromJson(options) {
17
+ return new Gift({
18
+ id: options.id,
19
+ name: options.name,
20
+ amount: options.amount,
21
+ isPaid: options.is_paid,
22
+ imageUrl: options.image_url
23
+ });
24
+ }
25
+ toJson() {
26
+ return {
27
+ id: this.id,
28
+ name: this.name,
29
+ amount: this.amount,
30
+ is_paid: this.isPaid,
31
+ image_url: this.imageUrl
32
+ };
33
+ }
32
34
  }
33
- //# sourceMappingURL=gift.js.map
35
+ export {
36
+ Gift
37
+ };
38
+
39
+ //# debugId=0D6153798E35A36A64756E2164756E21
40
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL21vZGVscy9naWZ0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgImV4cG9ydCB0eXBlIEdpZnRKc29uID0ge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbmFtZT86IHN0cmluZztcbiAgICBhbW91bnQ/OiBudW1iZXI7XG4gICAgaXNfcGFpZD86IGJvb2xlYW47XG4gICAgaW1hZ2VfdXJsPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGNsYXNzIEdpZnQge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbmFtZT86IHN0cmluZztcbiAgICBhbW91bnQ/OiBudW1iZXI7XG4gICAgaXNQYWlkPzogYm9vbGVhbjtcbiAgICBpbWFnZVVybD86IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IHtcbiAgICAgICAgaWQ6IHN0cmluZztcbiAgICAgICAgbmFtZT86IHN0cmluZztcbiAgICAgICAgYW1vdW50PzogbnVtYmVyO1xuICAgICAgICBpc1BhaWQ/OiBib29sZWFuO1xuICAgICAgICBpbWFnZVVybD86IHN0cmluZztcbiAgICB9KSB7XG4gICAgICAgIHRoaXMuaWQgPSBvcHRpb25zLmlkO1xuICAgICAgICB0aGlzLm5hbWUgPSBvcHRpb25zLm5hbWU7XG4gICAgICAgIHRoaXMuYW1vdW50ID0gb3B0aW9ucy5hbW91bnQ7XG4gICAgICAgIHRoaXMuaXNQYWlkID0gb3B0aW9ucy5pc1BhaWQ7XG4gICAgICAgIHRoaXMuaW1hZ2VVcmwgPSBvcHRpb25zLmltYWdlVXJsO1xuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSnNvbihvcHRpb25zOiBHaWZ0SnNvbik6IEdpZnQge1xuICAgICAgICByZXR1cm4gbmV3IEdpZnQoe1xuICAgICAgICAgICAgaWQ6IG9wdGlvbnMuaWQsXG4gICAgICAgICAgICBuYW1lOiBvcHRpb25zLm5hbWUsXG4gICAgICAgICAgICBhbW91bnQ6IG9wdGlvbnMuYW1vdW50LFxuICAgICAgICAgICAgaXNQYWlkOiBvcHRpb25zLmlzX3BhaWQsXG4gICAgICAgICAgICBpbWFnZVVybDogb3B0aW9ucy5pbWFnZV91cmwsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRvSnNvbigpOiBHaWZ0SnNvbiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogdGhpcy5pZCxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIGFtb3VudDogdGhpcy5hbW91bnQsXG4gICAgICAgICAgICBpc19wYWlkOiB0aGlzLmlzUGFpZCxcbiAgICAgICAgICAgIGltYWdlX3VybDogdGhpcy5pbWFnZVVybCxcbiAgICAgICAgfTtcbiAgICB9XG59XG4iCiAgXSwKICAibWFwcGluZ3MiOiAiOztBQVFPLE1BQU0sS0FBSztBQUFBLEVBQ2Q7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxXQUFXLENBQUMsU0FNVDtBQUFBLElBQ0MsS0FBSyxLQUFLLFFBQVE7QUFBQSxJQUNsQixLQUFLLE9BQU8sUUFBUTtBQUFBLElBQ3BCLEtBQUssU0FBUyxRQUFRO0FBQUEsSUFDdEIsS0FBSyxTQUFTLFFBQVE7QUFBQSxJQUN0QixLQUFLLFdBQVcsUUFBUTtBQUFBO0FBQUEsU0FHckIsUUFBUSxDQUFDLFNBQXlCO0FBQUEsSUFDckMsT0FBTyxJQUFJLEtBQUs7QUFBQSxNQUNaLElBQUksUUFBUTtBQUFBLE1BQ1osTUFBTSxRQUFRO0FBQUEsTUFDZCxRQUFRLFFBQVE7QUFBQSxNQUNoQixRQUFRLFFBQVE7QUFBQSxNQUNoQixVQUFVLFFBQVE7QUFBQSxJQUN0QixDQUFDO0FBQUE7QUFBQSxFQUdMLE1BQU0sR0FBYTtBQUFBLElBQ2YsT0FBTztBQUFBLE1BQ0gsSUFBSSxLQUFLO0FBQUEsTUFDVCxNQUFNLEtBQUs7QUFBQSxNQUNYLFFBQVEsS0FBSztBQUFBLE1BQ2IsU0FBUyxLQUFLO0FBQUEsTUFDZCxXQUFXLEtBQUs7QUFBQSxJQUNwQjtBQUFBO0FBRVI7IiwKICAiZGVidWdJZCI6ICIwRDYxNTM3OThFMzVBMzZBNjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==