diff --git a/.circleci/config.yml b/.circleci/config.yml index 6d57e9935..a0b72a80e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -266,9 +266,9 @@ workflows: build-and-test: jobs: - lint-testunit - - e2e-test: - requires: - - lint-testunit + # - e2e-test: + # requires: + # - lint-testunit - ios-build: requires: diff --git a/.expo/packager-info.json b/.expo/packager-info.json deleted file mode 100644 index 24e8ec399..000000000 --- a/.expo/packager-info.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "expoServerPort": null, - "packagerPort": null, - "packagerPid": null -} \ No newline at end of file diff --git a/.expo/settings.json b/.expo/settings.json deleted file mode 100644 index 5eee78b49..000000000 --- a/.expo/settings.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "hostType": "tunnel", - "lanType": "ip", - "dev": true, - "strict": false, - "minify": false, - "urlType": "exp", - "urlRandomness": null -} \ No newline at end of file diff --git a/README.md b/README.md index 65a9a803d..f1728a571 100644 --- a/README.md +++ b/README.md @@ -213,4 +213,25 @@ $ detox build --configuration ios.sim.release ```bash $ detox test --configuration ios.sim.release -``` \ No newline at end of file +``` + +## Storybook +- Open index.js + +- Uncomment following line + +```bash +import './storybook'; +``` + +- Comment out following lines +```bash +import './app/ReactotronConfig'; +import { AppRegistry } from 'react-native'; +import App from './app/index'; +import { name as appName } from './app.json'; + +AppRegistry.registerComponent(appName, () => App); +``` + +- Start your application again \ No newline at end of file diff --git a/__mocks__/realm.js b/__mocks__/realm.js new file mode 100644 index 000000000..8845406ec --- /dev/null +++ b/__mocks__/realm.js @@ -0,0 +1,26 @@ +export default class Realm { + schema = []; + + data = []; + + constructor(params) { + require('lodash').each(params.schema, (schema) => { + this.data[schema.name] = []; + this.data[schema.name].filtered = () => this.data[schema.name]; + }); + this.schema = params.schema; + } + + objects(schemaName) { + return this.data[schemaName]; + } + + write = (fn) => { + fn(); + } + + create(schemaName, data) { + this.data[schemaName].push(data); + return data; + } +} diff --git a/__tests__/RoomItem.js b/__tests__/RoomItem.js deleted file mode 100644 index f91171953..000000000 --- a/__tests__/RoomItem.js +++ /dev/null @@ -1,40 +0,0 @@ -import {View} from 'react-native'; -import { Provider } from 'react-redux'; - -import { createStore, combineReducers } from 'redux'; - -const reducers = combineReducers({login:() => ({user: {}}), settings:() => ({}), meteor: () => ({ connected: true })}); -const store = createStore(reducers); - -import React from 'react'; -import RoomItem from '../app/presentation/RoomItem'; - -// Note: test renderer must be required after react-native. -import renderer from 'react-test-renderer'; - -const date = '2017-10-10T10:00:00Z'; -const onPress = () => {}; - -it('renders correctly', () => { - expect(renderer.create().toJSON()).toMatchSnapshot(); -}); - -it('render unread', () => { - expect(renderer.create().toJSON()).toMatchSnapshot(); -}); - -it('render unread +999', () => { - expect(renderer.create().toJSON()).toMatchSnapshot(); -}); - -it('render no icon', () => { - expect(renderer.create().toJSON()).toMatchSnapshot(); -}); - -it('render private group', () => { - expect(renderer.create( ).toJSON()).toMatchSnapshot(); -}); - -it('render channel', () => { - expect(renderer.create().toJSON()).toMatchSnapshot(); -}); diff --git a/__tests__/__snapshots__/RoomItem.js.snap b/__tests__/__snapshots__/RoomItem.js.snap deleted file mode 100644 index 1ce3b1417..000000000 --- a/__tests__/__snapshots__/RoomItem.js.snap +++ /dev/null @@ -1,38 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`render channel 1`] = ` - - View - -`; - -exports[`render no icon 1`] = ` - - View - -`; - -exports[`render private group 1`] = ` - - View - - -`; - -exports[`render unread +999 1`] = ` - - View - -`; - -exports[`render unread 1`] = ` - - View - -`; - -exports[`renders correctly 1`] = ` - - View - -`; diff --git a/__tests__/__snapshots__/Storyshots.test.js.snap b/__tests__/__snapshots__/Storyshots.test.js.snap index 7757aba88..219faa3a2 100644 --- a/__tests__/__snapshots__/Storyshots.test.js.snap +++ b/__tests__/__snapshots__/Storyshots.test.js.snap @@ -191,24 +191,6 @@ exports[`Storyshots Avatar avatar 1`] = ` `; -exports[`Storyshots Channel Cell Direct Messages 1`] = ` - - - View - View - View - View - View - View - View - View - View - View - View - - -`; - exports[`Storyshots Message list 1`] = ` - - - - - - - - - - - - - diego.mello - - - - 10:00 AM - - - - - - - Message - - - - - - - - @@ -569,11 +343,14 @@ exports[`Storyshots Message list 1`] = ` } > - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum + Message @@ -639,13 +421,8 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "marginBottom": 0, + "marginTop": 30, }, ] } @@ -672,18 +449,10 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, - Object { - "marginBottom": 10, - }, undefined, undefined, ] @@ -706,7 +475,7 @@ exports[`Storyshots Message list 1`] = ` "width": 36, }, Object { - "marginTop": 5, + "marginTop": 4, }, ] } @@ -767,7 +536,6 @@ exports[`Storyshots Message list 1`] = ` "alignItems": "center", "flex": 1, "flexDirection": "row", - "marginBottom": 2, } } > @@ -781,11 +549,14 @@ exports[`Storyshots Message list 1`] = ` } > + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + + + + + + + + + + Grouped messages + + + + + + + + + + + + + + diego.mello + + + + 10:00 AM + + + + + @@ -861,18 +843,10 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, - Object { - "marginBottom": 10, - }, undefined, undefined, ] @@ -895,7 +869,7 @@ exports[`Storyshots Message list 1`] = ` "width": 36, }, Object { - "marginTop": 5, + "marginTop": 4, }, ] } @@ -919,7 +893,7 @@ exports[`Storyshots Message list 1`] = ` source={ Object { "priority": "high", - "uri": "https://open.rocket.chat/avatar/rocket.cat?format=png&width=50&height=50&rc_token=79q6lH40W4ZRGLOshDiDiVlQaCc4f_lU9HNdHLAzuHz&rc_uid=y8bd77ptZswPj3EW8", + "uri": "https://open.rocket.chat/avatar/Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.?format=png&width=50&height=50&rc_token=79q6lH40W4ZRGLOshDiDiVlQaCc4f_lU9HNdHLAzuHz&rc_uid=y8bd77ptZswPj3EW8", } } style={ @@ -956,7 +930,6 @@ exports[`Storyshots Message list 1`] = ` "alignItems": "center", "flex": 1, "flexDirection": "row", - "marginBottom": 2, } } > @@ -970,25 +943,30 @@ exports[`Storyshots Message list 1`] = ` } > - rocket.cat + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. @@ -1050,16 +1031,10 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, - false, undefined, undefined, ] @@ -1091,6 +1066,7 @@ exports[`Storyshots Message list 1`] = ` style={Object {}} > @@ -1141,16 +1119,10 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, - false, undefined, undefined, ] @@ -1182,6 +1154,7 @@ exports[`Storyshots Message list 1`] = ` style={Object {}} > @@ -1232,18 +1207,10 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, - Object { - "marginBottom": 10, - }, undefined, undefined, ] @@ -1266,7 +1233,7 @@ exports[`Storyshots Message list 1`] = ` "width": 36, }, Object { - "marginTop": 5, + "marginTop": 4, }, ] } @@ -1327,7 +1294,6 @@ exports[`Storyshots Message list 1`] = ` "alignItems": "center", "flex": 1, "flexDirection": "row", - "marginBottom": 2, } } > @@ -1341,11 +1307,14 @@ exports[`Storyshots Message list 1`] = ` } > @@ -1411,128 +1385,9 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], - }, - ] - } - > - Grouped messages - - - - - - - - - - Message - - - - - - - - - @@ -1558,18 +1413,10 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, - Object { - "marginBottom": 10, - }, undefined, undefined, ] @@ -1583,54 +1430,6 @@ exports[`Storyshots Message list 1`] = ` } } > - - - - - - - - - Diego Mello - - - @ - diego.mello - - - - 10:00 AM - - @@ -1750,13 +1491,8 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "marginBottom": 0, + "marginTop": 30, }, ] } @@ -1783,18 +1519,10 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, - Object { - "marginBottom": 10, - }, undefined, undefined, ] @@ -1817,7 +1545,7 @@ exports[`Storyshots Message list 1`] = ` "width": 36, }, Object { - "marginTop": 5, + "marginTop": 4, }, ] } @@ -1878,7 +1606,6 @@ exports[`Storyshots Message list 1`] = ` "alignItems": "center", "flex": 1, "flexDirection": "row", - "marginBottom": 2, } } > @@ -1892,25 +1619,44 @@ exports[`Storyshots Message list 1`] = ` } > - diego.mello + Diego Mello + + @ + diego.mello + @@ -1946,15 +1695,207 @@ exports[`Storyshots Message list 1`] = ` Message + + + + + + + + + + + + + + + + + - (edited) + Diego Mello + + @ + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + + + + + 10:00 AM + + + + + + + Message + @@ -1972,13 +1913,8 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "marginBottom": 0, + "marginTop": 30, }, ] } @@ -2005,18 +1941,10 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, - Object { - "marginBottom": 10, - }, undefined, undefined, ] @@ -2039,7 +1967,226 @@ exports[`Storyshots Message list 1`] = ` "width": 36, }, Object { - "marginTop": 5, + "marginTop": 4, + }, + ] + } + > + + + + + + + + + diego.mello + + + + 10:00 AM + + + + + + + Message + + + + (edited) + + + + + + + + + Static avatar + + + + + @@ -2114,11 +2260,14 @@ exports[`Storyshots Message list 1`] = ` } > @@ -2184,226 +2338,9 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], - }, - ] - } - > - Static avatar - - - - - - - - - - - - - - Diego Mello - - - - 10:00 AM - - - - - - - Message - - - - - - - - - @@ -2429,18 +2366,10 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, - Object { - "marginBottom": 10, - }, undefined, undefined, ] @@ -2463,7 +2392,7 @@ exports[`Storyshots Message list 1`] = ` "width": 36, }, Object { - "marginTop": 5, + "marginTop": 4, }, ] } @@ -2524,7 +2453,6 @@ exports[`Storyshots Message list 1`] = ` "alignItems": "center", "flex": 1, "flexDirection": "row", - "marginBottom": 2, } } > @@ -2538,25 +2466,30 @@ exports[`Storyshots Message list 1`] = ` } > - diego.mello + Diego Mello - -   - rocket.cat -   - - - - -   - diego.mello -   - - - - - -   - all -   - - - - - -   - here -   - - - - - -  # - general -   + Message @@ -2687,13 +2544,8 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "marginBottom": 0, + "marginTop": 30, }, ] } @@ -2720,18 +2572,10 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, - Object { - "marginBottom": 10, - }, undefined, undefined, ] @@ -2754,7 +2598,7 @@ exports[`Storyshots Message list 1`] = ` "width": 36, }, Object { - "marginTop": 5, + "marginTop": 4, }, ] } @@ -2815,7 +2659,6 @@ exports[`Storyshots Message list 1`] = ` "alignItems": "center", "flex": 1, "flexDirection": "row", - "marginBottom": 2, } } > @@ -2829,11 +2672,14 @@ exports[`Storyshots Message list 1`] = ` } > + +   + rocket.cat +   + - 👊🤙👏 + + + +   + diego.mello +   + + + + + +   + all +   + + + + + +   + here +   + + + + + +  # + general +   @@ -2899,13 +2834,8 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "marginBottom": 0, + "marginTop": 30, }, ] } @@ -2932,18 +2862,10 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, - Object { - "marginBottom": 10, - }, undefined, undefined, ] @@ -2966,7 +2888,7 @@ exports[`Storyshots Message list 1`] = ` "width": 36, }, Object { - "marginTop": 5, + "marginTop": 4, }, ] } @@ -3027,7 +2949,6 @@ exports[`Storyshots Message list 1`] = ` "alignItems": "center", "flex": 1, "flexDirection": "row", - "marginBottom": 2, } } > @@ -3041,11 +2962,14 @@ exports[`Storyshots Message list 1`] = ` } > + + 👊🤙👏 + + + + + + + + + + Custom Emojis + + + + + + + + + + + + + + diego.mello + + + + 10:00 AM + + + + + @@ -3153,226 +3288,9 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], - }, - ] - } - > - Custom Emojis - - - - - - - - - - - - - - diego.mello - - - - 10 November 2017 - - - - - - - Testing - - - - - - - - - @@ -3398,18 +3316,10 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, - Object { - "marginBottom": 10, - }, undefined, undefined, ] @@ -3432,7 +3342,7 @@ exports[`Storyshots Message list 1`] = ` "width": 36, }, Object { - "marginTop": 5, + "marginTop": 4, }, ] } @@ -3493,7 +3403,6 @@ exports[`Storyshots Message list 1`] = ` "alignItems": "center", "flex": 1, "flexDirection": "row", - "marginBottom": 2, } } > @@ -3507,11 +3416,14 @@ exports[`Storyshots Message list 1`] = ` } > - 10:00 AM + 10 November 2017 - Reactions + Testing - - View - View - View - View - @@ -3591,13 +3494,8 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "marginBottom": 0, + "marginTop": 30, }, ] } @@ -3624,18 +3522,10 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, - Object { - "marginBottom": 10, - }, undefined, undefined, ] @@ -3658,7 +3548,7 @@ exports[`Storyshots Message list 1`] = ` "width": 36, }, Object { - "marginTop": 5, + "marginTop": 4, }, ] } @@ -3719,7 +3609,6 @@ exports[`Storyshots Message list 1`] = ` "alignItems": "center", "flex": 1, "flexDirection": "row", - "marginBottom": 2, } } > @@ -3733,11 +3622,14 @@ exports[`Storyshots Message list 1`] = ` } > - Multiple Reactions + Reactions @@ -3794,19 +3691,298 @@ exports[`Storyshots Message list 1`] = ` Object { "flexDirection": "row", "flexWrap": "wrap", - "marginTop": 10, + "marginTop": 6, } } > - View - View - View - View - View - View - View - View - View + + + + 😂 + + + 3 + + + + + + + + 13 + + + + + + + 🤔 + + + 1 + + + + + + +  + + + @@ -3822,13 +3998,8 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "marginBottom": 0, + "marginTop": 30, }, ] } @@ -3855,18 +4026,10 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, - Object { - "marginBottom": 10, - }, undefined, undefined, ] @@ -3889,196 +4052,7 @@ exports[`Storyshots Message list 1`] = ` "width": 36, }, Object { - "marginTop": 5, - }, - ] - } - > - - - - - - - - - rocket.cat - - - - 10:00 AM - - - - - - - Fourth message - - - - - - - - - - - - @@ -4153,11 +4126,14 @@ exports[`Storyshots Message list 1`] = ` } > - Third message + Multiple Reactions - - - - - - - - - - - - - - - rocket.cat - - - - 10:00 AM - - - - - - - Second message + style={ + Object { + "height": 19, + "marginLeft": 7, + "width": 19, + } + } + /> + + 1 - - - - - - - - - - - - - - - - - + + - - diego.mello - - - - 10:00 AM - - - - - - - First message + style={ + Object { + "height": 19, + "marginLeft": 7, + "width": 19, + } + } + /> + + 1 - - + + + + + + + 1 + + + + + + + ❤️ + + + 1 + + + + + + + 🐶 + + + 1 + + + + + + + 😀 + + + 1 + + + + + + + 😬 + + + 1 + + + + + + + 😁 + + + 1 + + + + + + +  + + + @@ -4601,13 +4859,8 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "marginBottom": 0, + "marginTop": 30, }, ] } @@ -4634,18 +4887,10 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, - Object { - "marginBottom": 10, - }, undefined, undefined, ] @@ -4668,7 +4913,7 @@ exports[`Storyshots Message list 1`] = ` "width": 36, }, Object { - "marginTop": 5, + "marginTop": 4, }, ] } @@ -4729,7 +4974,6 @@ exports[`Storyshots Message list 1`] = ` "alignItems": "center", "flex": 1, "flexDirection": "row", - "marginBottom": 2, } } > @@ -4743,11 +4987,14 @@ exports[`Storyshots Message list 1`] = ` } > @@ -4803,72 +5055,6 @@ exports[`Storyshots Message list 1`] = ` - - - unread - - - - Nov 10, 2017 - - @@ -4998,11 +5175,14 @@ exports[`Storyshots Message list 1`] = ` } > @@ -5058,56 +5243,6 @@ exports[`Storyshots Message list 1`] = ` - - - unread - - - - - - - - - - Second message - - - - - - - - - - @@ -5328,11 +5363,14 @@ exports[`Storyshots Message list 1`] = ` } > @@ -5388,48 +5431,6 @@ exports[`Storyshots Message list 1`] = ` - - - - Nov 10, 2017 - - @@ -5559,11 +5551,14 @@ exports[`Storyshots Message list 1`] = ` } > @@ -5629,13 +5629,8 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "marginBottom": 0, + "marginTop": 30, }, ] } @@ -5662,18 +5657,10 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, - Object { - "marginBottom": 10, - }, undefined, undefined, ] @@ -5696,7 +5683,260 @@ exports[`Storyshots Message list 1`] = ` "width": 36, }, Object { - "marginTop": 5, + "marginTop": 4, + }, + ] + } + > + + + + + + + + + rocket.cat + + + + 10:00 AM + + + + + + + Fourth message + + + + + + + + + + + unread + + + + Nov 10, 2017 + + + + + + @@ -5771,11 +6010,14 @@ exports[`Storyshots Message list 1`] = ` } > - View + + + + + Third message + + + + + + + + + + + unread + + + + + + + + + + + + Second message + + + + + + + + + + + + + + + + + + + + + rocket.cat + + + + 10:00 AM + + + + + + + Second message + + + + + + + + + + + + Nov 10, 2017 + + + + + + + + + + + + + + + diego.mello + + + + 10:00 AM + + + + + + + First message + + + + + + + + + + With image + + + + + + + + + + + + + + diego.mello + + + + 10:00 AM + + + + + + + + + + + This is a description + + + + + @@ -6246,11 +7335,14 @@ exports[`Storyshots Message list 1`] = ` } > - View + + + + + + + + + This is a description + + + + + - With image + With video @@ -6744,11 +7922,14 @@ exports[`Storyshots Message list 1`] = ` } > - View + + +  + + @@ -6790,9 +8017,11 @@ exports[`Storyshots Message list 1`] = ` @@ -6808,7 +8037,10 @@ exports[`Storyshots Message list 1`] = ` hardwareAccelerated={false} hideModalContentWhileAnimating={false} onModalHide={[Function]} + onModalWillHide={[Function]} + onModalWillShow={[Function]} onRequestClose={[Function]} + scrollHorizontal={false} scrollOffset={0} scrollOffsetMax={0} scrollTo={null} @@ -6847,7 +8079,10 @@ exports[`Storyshots Message list 1`] = ` - With video + With audio @@ -7031,11 +8252,14 @@ exports[`Storyshots Message list 1`] = ` } > View - View + + +  + + @@ -7127,7 +8404,7 @@ exports[`Storyshots Message list 1`] = ` Object { "backgroundColor": "#1d74f5", "borderRadius": 2, - "height": 4, + "height": 2, "opacity": 0, "position": "absolute", "width": 0, @@ -7188,10 +8465,12 @@ exports[`Storyshots Message list 1`] = ` @@ -7216,9 +8495,11 @@ exports[`Storyshots Message list 1`] = ` @@ -7232,29 +8513,6 @@ exports[`Storyshots Message list 1`] = ` - - With audio - - - - - - - - - - diego.mello - - - - 10:00 AM - - - I’m fine! + First message - View @@ -7465,18 +8621,10 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, - Object { - "marginBottom": 10, - }, undefined, undefined, ] @@ -7490,54 +8638,6 @@ exports[`Storyshots Message list 1`] = ` } } > - - - - - + View - diego.mello +  + + + + + + - 10:00 AM + 00:00 - I’m fine! + This is a description - View + + + + + + + + + + View + + +  + + + + + + + + + + 00:00 + + + + + + + + + + + + View + + +  + + + + + + + + + + 00:00 + + @@ -7645,13 +9390,8 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "marginBottom": 0, + "marginTop": 30, }, ] } @@ -7678,18 +9418,10 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, - Object { - "marginBottom": 10, - }, undefined, undefined, ] @@ -7712,7 +9444,7 @@ exports[`Storyshots Message list 1`] = ` "width": 36, }, Object { - "marginTop": 5, + "marginTop": 4, }, ] } @@ -7773,7 +9505,6 @@ exports[`Storyshots Message list 1`] = ` "alignItems": "center", "flex": 1, "flexDirection": "row", - "marginBottom": 2, } } > @@ -7787,11 +9518,14 @@ exports[`Storyshots Message list 1`] = ` } > - View - View + + + + + I’m fine! + + + + + + + + + I'm a very long long title and I'll break + + + 10:00 AM + + + + + + + How are you? + + + + + + + + + + + + + + + + + + + + + + + diego.mello + + + + 10:00 AM + + + + + + + I’m fine! + + + + + + + + + rocket.cat + + + 10:00 AM + + + + + + + How are you? + + + + + + @@ -7829,13 +9996,4571 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ + "marginBottom": 0, + "marginTop": 30, + }, + ] + } + > + Message with thread + + + + + + + + + + + + + + diego.mello + + + + 10:00 AM + + + + + + + How are you? + + + + + + + +  + + + 1 reply + + + + Nov 10 + + + + + + + + + + + + + + + + + + + diego.mello + + + + 10:00 AM + + + + + + + How are you? + + + + + + + +  + + + +999 replies + + + + Nov 10 + + + + + + + + + + +  + + + How are you? + + + + + + + + + + + + + + + + + I’m fine! + + + + + + + + + + + + +  + + + Thread with emoji 🙂 😂 + + + + + + + + + + + + + + + + + I’m fine! + + + + + + + + + + + + +  + + + Markdown: link block code + + + + + + + + + + + + + + + + + I’m fine! + + + + + + + + + + + + +  + + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + + + + + + + + + + + + + + + + + I’m fine! + + + + + + + + + + + + +  + + + How are you? + + + + + + + + + + + + + + + + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + + + + + + + + + + + + +  + + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + + + + + + + + + + + + + + + + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + + + + + + + + + + + + +  + + + Thread with attachment + + + + + + + + + + + + + + Sent an attachment + + + + + + + Sequential thread messages following thread button + + + + + + + + + + + + + + diego.mello + + + + 10:00 AM + + + + + + + How are you? + + + + + + + +  + + + 1 reply + + + + Nov 10 + + + + + + + + + + + + + + + + + + + + I’m fine! + + + + + + + + + + + + + + + + + + + + + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + + + + + + + + + + + + + + + + + + + Sent an attachment + + + + + + + Sequential thread messages following thread reply + + + + + +  + + + How are you? + + + + + + + + + + + + + + + + + I’m fine! + + + + + + + + + + + + + + + + + + + + + + Cool! + + + + + + + + + + + + + + + + + + + + + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + + + + + + + + + + + + + + + + + + + Sent an attachment + + + + + + + Discussion + + + + + + + + + + + + + + diego.mello + + + + 10:00 AM + + + + Started a discussion: + + + This is a discussion + + + + +  + + + No messages yet + + + + + + + + + + + + + + + + + + + + + diego.mello + + + + 10:00 AM + + + + Started a discussion: + + + This is a discussion + + + + +  + + + 1 message + + + + Nov 10 + + + + + + + + + + + + + + + + + + + diego.mello + + + + 10:00 AM + + + + Started a discussion: + + + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. + + + + +  + + + 10 messages + + + + Nov 10 + + + + + + + + + + + + + + + + + + + diego.mello + + + + 10:00 AM + + + + Started a discussion: + + + This is a discussion + + + + +  + + + +999 messages + + + + Nov 10 + + + + + + + @@ -7971,11 +14687,14 @@ exports[`Storyshots Message list 1`] = ` } > - + + + - - Message - + Rocket.Chat - Free, Open Source, Enterprise Team Chat - + + Rocket.Chat is the leading open source team chat software solution. Free, unlimited and completely customizable with on-premises and SaaS cloud hosting. + + + + + + + Google + + + Search the world's information, including webpages, images, videos and more. Google has many special features to help you find exactly what you're looking for. + + - View @@ -8042,13 +14891,8 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "marginBottom": 0, + "marginTop": 30, }, ] } @@ -8075,18 +14919,10 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, - Object { - "marginBottom": 10, - }, undefined, undefined, ] @@ -8109,7 +14945,7 @@ exports[`Storyshots Message list 1`] = ` "width": 36, }, Object { - "marginTop": 5, + "marginTop": 4, }, ] } @@ -8170,7 +15006,6 @@ exports[`Storyshots Message list 1`] = ` "alignItems": "center", "flex": 1, "flexDirection": "row", - "marginBottom": 2, } } > @@ -8184,11 +15019,14 @@ exports[`Storyshots Message list 1`] = ` } > @@ -8240,8 +15083,322 @@ exports[`Storyshots Message list 1`] = ` - View - View + + + + + rocket.cat + + + 10:00 AM + + + + + + + Custom fields + + + + + + + + Field 1 + + + Value 1 + + + + + Field 2 + + + Value 2 + + + + + Field 3 + + + Value 3 + + + + + Field 4 + + + Value 4 + + + + + Field 5 + + + Value 5 + + + + + @@ -8256,13 +15413,8 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "marginBottom": 0, + "marginTop": 30, }, ] } @@ -8289,18 +15441,10 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, - Object { - "marginBottom": 10, - }, undefined, undefined, ] @@ -8323,7 +15467,7 @@ exports[`Storyshots Message list 1`] = ` "width": 36, }, Object { - "marginTop": 5, + "marginTop": 4, }, ] } @@ -8384,7 +15528,6 @@ exports[`Storyshots Message list 1`] = ` "alignItems": "center", "flex": 1, "flexDirection": "row", - "marginBottom": 2, } } > @@ -8398,11 +15541,14 @@ exports[`Storyshots Message list 1`] = ` } > - Broadcasted message + Message - View + + + + + rocket.cat + + + 10:00 AM + + + + + + + Custom fields + + + + + + + + Field 1 + + + Value 1 + + + + + Field 2 + + + Value 2 + + + + + + + + + + rocket.cat + + + 10:00 AM + + + + + + + Custom fields 2 + + + + + + + + Field 1 + + + Value 1 + + + + + Field 2 + + + Value 2 + + + + + @@ -8469,13 +16011,8 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "marginBottom": 0, + "marginTop": 30, }, ] } @@ -8502,18 +16039,10 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, - Object { - "marginBottom": 10, - }, undefined, undefined, ] @@ -8536,7 +16065,7 @@ exports[`Storyshots Message list 1`] = ` "width": 36, }, Object { - "marginTop": 5, + "marginTop": 4, }, ] } @@ -8597,7 +16126,6 @@ exports[`Storyshots Message list 1`] = ` "alignItems": "center", "flex": 1, "flexDirection": "row", - "marginBottom": 2, } } > @@ -8611,11 +16139,14 @@ exports[`Storyshots Message list 1`] = ` } > + + Broadcasted message + + + + + + + +  + + + Reply + + + + + + + + + Archived + + + + + + + + + + + + + + diego.mello + + + + 10:00 AM + + + + + @@ -8681,18 +16500,13 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "marginBottom": 0, + "marginTop": 30, }, ] } > - Archived + Error - View + + +  + + @@ -8797,7 +16645,44 @@ exports[`Storyshots Message list 1`] = ` } } > - View + + +  + + @@ -8924,11 +16800,14 @@ exports[`Storyshots Message list 1`] = ` } > @@ -8994,228 +16878,9 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], - }, - ] - } - > - Error - - - - - - - - - - - - - - diego.mello - - - - 10:00 AM - - - - - - - Temp message - - - - - - - - - @@ -9241,21 +16906,11 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, - Object { - "marginBottom": 10, - }, - Object { - "backgroundColor": "#fff5df", - }, + undefined, undefined, ] } @@ -9277,7 +16932,7 @@ exports[`Storyshots Message list 1`] = ` "width": 36, }, Object { - "marginTop": 5, + "marginTop": 4, }, ] } @@ -9328,7 +16983,9 @@ exports[`Storyshots Message list 1`] = ` }, false, false, - false, + Object { + "opacity": 0.3, + }, ] } > @@ -9338,7 +16995,6 @@ exports[`Storyshots Message list 1`] = ` "alignItems": "center", "flex": 1, "flexDirection": "row", - "marginBottom": 2, } } > @@ -9352,11 +17008,14 @@ exports[`Storyshots Message list 1`] = ` } > - Message being edited + Temp message @@ -9422,13 +17086,8 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "marginBottom": 0, + "marginTop": 30, }, ] } @@ -9455,20 +17114,14 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, Object { - "marginBottom": 10, + "backgroundColor": "#fff5df", }, undefined, - undefined, ] } > @@ -9489,7 +17142,7 @@ exports[`Storyshots Message list 1`] = ` "width": 36, }, Object { - "marginTop": 5, + "marginTop": 4, }, ] } @@ -9550,7 +17203,6 @@ exports[`Storyshots Message list 1`] = ` "alignItems": "center", "flex": 1, "flexDirection": "row", - "marginBottom": 2, } } > @@ -9564,11 +17216,14 @@ exports[`Storyshots Message list 1`] = ` } > - - Message removed - + + + + Message being edited + + + + @@ -9615,13 +17294,8 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "marginBottom": 0, + "marginTop": 30, }, ] } @@ -9648,18 +17322,10 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, - Object { - "marginBottom": 10, - }, undefined, undefined, ] @@ -9667,22 +17333,27 @@ exports[`Storyshots Message list 1`] = ` > - - - - diego.mello - - - - 10:00 AM - - - Has joined the channel + Message removed @@ -9808,13 +17436,8 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "marginBottom": 0, + "marginTop": 30, }, ] } @@ -9841,18 +17464,10 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, - Object { - "marginBottom": 10, - }, undefined, undefined, ] @@ -9860,22 +17475,27 @@ exports[`Storyshots Message list 1`] = ` > - - - - diego.mello - - - - 10:00 AM - - - Room name changed to: New name by diego.mello + Has joined the channel @@ -10001,13 +17578,8 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "marginBottom": 0, + "marginTop": 30, }, ] } @@ -10034,18 +17606,10 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, - Object { - "marginBottom": 10, - }, undefined, undefined, ] @@ -10053,22 +17617,27 @@ exports[`Storyshots Message list 1`] = ` > - - - - diego.mello - - - - 10:00 AM - - - Message pinned + Room name changed to: New name by diego.mello - View @@ -10195,13 +17720,8 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "marginBottom": 0, + "marginTop": 30, }, ] } @@ -10228,18 +17748,10 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, - Object { - "marginBottom": 10, - }, undefined, undefined, ] @@ -10247,22 +17759,27 @@ exports[`Storyshots Message list 1`] = ` > - - - - diego.mello - - - - 10:00 AM - - - Has left the channel + Message pinned @@ -10388,13 +17862,8 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "marginBottom": 0, + "marginTop": 30, }, ] } @@ -10421,18 +17890,10 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, - Object { - "marginBottom": 10, - }, undefined, undefined, ] @@ -10440,22 +17901,27 @@ exports[`Storyshots Message list 1`] = ` > - - - - diego.mello - - - - 10:00 AM - - - User rocket.cat removed by diego.mello + Has left the channel @@ -10581,13 +18004,8 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "marginBottom": 0, + "marginTop": 30, }, ] } @@ -10614,18 +18032,10 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, - Object { - "marginBottom": 10, - }, undefined, undefined, ] @@ -10633,22 +18043,27 @@ exports[`Storyshots Message list 1`] = ` > - - - - diego.mello - - - - 10:00 AM - - - User rocket.cat added by diego.mello + User rocket.cat removed by diego.mello @@ -10774,13 +18146,8 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "marginBottom": 0, + "marginTop": 30, }, ] } @@ -10807,18 +18174,10 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, - Object { - "marginBottom": 10, - }, undefined, undefined, ] @@ -10826,22 +18185,27 @@ exports[`Storyshots Message list 1`] = ` > - - - - diego.mello - - - - 10:00 AM - - - User rocket.cat muted by diego.mello + User rocket.cat added by diego.mello @@ -10967,13 +18288,8 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "marginBottom": 0, + "marginTop": 30, }, ] } @@ -11000,18 +18316,10 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, - Object { - "marginBottom": 10, - }, undefined, undefined, ] @@ -11019,22 +18327,27 @@ exports[`Storyshots Message list 1`] = ` > - - - - diego.mello - - - - 10:00 AM - - - User rocket.cat unmuted by diego.mello + User rocket.cat muted by diego.mello @@ -11160,13 +18430,8 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "marginBottom": 0, + "marginTop": 30, }, ] } @@ -11193,18 +18458,10 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, - Object { - "marginBottom": 10, - }, undefined, undefined, ] @@ -11212,22 +18469,27 @@ exports[`Storyshots Message list 1`] = ` > - - - - diego.mello - - - - 10:00 AM - - - rocket.cat was set admin by diego.mello + User rocket.cat unmuted by diego.mello @@ -11353,13 +18572,8 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "marginBottom": 0, + "marginTop": 30, }, ] } @@ -11386,18 +18600,10 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, - Object { - "marginBottom": 10, - }, undefined, undefined, ] @@ -11405,22 +18611,27 @@ exports[`Storyshots Message list 1`] = ` > - - - - diego.mello - - - - 10:00 AM - - - rocket.cat is no longer admin by diego.mello + rocket.cat was set admin by diego.mello @@ -11546,13 +18714,8 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "marginBottom": 0, + "marginTop": 30, }, ] } @@ -11579,18 +18742,10 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, - Object { - "marginBottom": 10, - }, undefined, undefined, ] @@ -11598,22 +18753,27 @@ exports[`Storyshots Message list 1`] = ` > - - - - diego.mello - - - - 10:00 AM - - - Room description changed to: new description by diego.mello + rocket.cat is no longer admin by diego.mello @@ -11739,13 +18856,8 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "marginBottom": 0, + "marginTop": 30, }, ] } @@ -11772,18 +18884,10 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, - Object { - "marginBottom": 10, - }, undefined, undefined, ] @@ -11791,22 +18895,27 @@ exports[`Storyshots Message list 1`] = ` > - - - - diego.mello - - - - 10:00 AM - - - Room announcement changed to: new announcement by diego.mello + Room description changed to: new description by diego.mello @@ -11932,13 +18998,8 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "marginBottom": 0, + "marginTop": 30, }, ] } @@ -11965,18 +19026,10 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, - Object { - "marginBottom": 10, - }, undefined, undefined, ] @@ -11984,22 +19037,27 @@ exports[`Storyshots Message list 1`] = ` > - - - - diego.mello - - - - 10:00 AM - - - Room topic changed to: new topic by diego.mello + Room announcement changed to: new announcement by diego.mello @@ -12125,13 +19140,8 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "marginBottom": 0, + "marginTop": 30, }, ] } @@ -12158,18 +19168,10 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, - Object { - "marginBottom": 10, - }, undefined, undefined, ] @@ -12177,22 +19179,27 @@ exports[`Storyshots Message list 1`] = ` > - - - - diego.mello - - - - 10:00 AM - - - Room type changed to: public by diego.mello + Room topic changed to: new topic by diego.mello @@ -12318,13 +19282,8 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "marginBottom": 0, + "marginTop": 30, }, ] } @@ -12351,17 +19310,151 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, + undefined, + undefined, + ] + } + > + + + + + + + + + Room type changed to: public by diego.mello + + + + + + + Custom style + + + @@ -12465,11 +19557,14 @@ exports[`Storyshots Message list 1`] = ` } > @@ -12535,18 +19635,13 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "marginBottom": 0, + "marginTop": 30, }, ] } > - Custom style + Markdown emphasis @@ -12677,11 +19763,14 @@ exports[`Storyshots Message list 1`] = ` } > @@ -12814,18 +19908,13 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "marginBottom": 0, + "marginTop": 30, }, ] } > - Markdown emphasis + Markdown headers @@ -12956,11 +20036,14 @@ exports[`Storyshots Message list 1`] = ` } > - Markdown headers + Markdown links @@ -13304,11 +20387,14 @@ exports[`Storyshots Message list 1`] = ` } > @@ -13361,7 +20452,10 @@ exports[`Storyshots Message list 1`] = ` onPress={[Function]} style={ Object { - "color": "#1D74F5", + "backgroundColor": "transparent", + "color": "#1d74f5", + "fontFamily": "System", + "fontWeight": "400", } } > @@ -13376,7 +20470,10 @@ exports[`Storyshots Message list 1`] = ` onPress={[Function]} style={ Object { - "color": "#1D74F5", + "backgroundColor": "transparent", + "color": "#1d74f5", + "fontFamily": "System", + "fontWeight": "400", } } > @@ -13404,18 +20501,13 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "marginBottom": 0, + "marginTop": 30, }, ] } > - Markdown links + Markdown image @@ -13546,11 +20629,14 @@ exports[`Storyshots Message list 1`] = ` } > - Markdown image - - - - - - - - - - - - - - diego.mello - - - - 10:00 AM - - - - - - - Inline - - - code - - - has - - - back-ticks around - - - it. - - - - - Code block - - - - - - - - @@ -13907,18 +20734,10 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, - Object { - "marginBottom": 10, - }, undefined, undefined, ] @@ -13941,7 +20760,7 @@ exports[`Storyshots Message list 1`] = ` "width": 36, }, Object { - "marginTop": 5, + "marginTop": 4, }, ] } @@ -14002,7 +20821,6 @@ exports[`Storyshots Message list 1`] = ` "alignItems": "center", "flex": 1, "flexDirection": "row", - "marginBottom": 2, } } > @@ -14016,11 +20834,14 @@ exports[`Storyshots Message list 1`] = ` } > - + + Inline + - - Quote - + code + + + has + + + back-ticks around + + + it. - + + + Code block + + @@ -14097,13 +20960,8 @@ exports[`Storyshots Message list 1`] = ` "marginTop": 30, }, Object { - "marginBottom": 30, - "marginTop": 0, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "marginBottom": 0, + "marginTop": 30, }, ] } @@ -14130,18 +20988,10 @@ exports[`Storyshots Message list 1`] = ` Object { "flex": 1, "flexDirection": "column", - "paddingHorizontal": 15, - "paddingVertical": 5, - "transform": Array [ - Object { - "scaleY": -1, - }, - ], + "paddingHorizontal": 14, + "paddingVertical": 4, "width": "100%", }, - Object { - "marginBottom": 10, - }, undefined, undefined, ] @@ -14164,7 +21014,7 @@ exports[`Storyshots Message list 1`] = ` "width": 36, }, Object { - "marginTop": 5, + "marginTop": 4, }, ] } @@ -14225,7 +21075,6 @@ exports[`Storyshots Message list 1`] = ` "alignItems": "center", "flex": 1, "flexDirection": "row", - "marginBottom": 2, } } > @@ -14239,11 +21088,14 @@ exports[`Storyshots Message list 1`] = ` } > + 10:00 AM + + + + + + + + Quote + + + + + + + + + + + Markdown table + + + + + + + + + + + + + + diego.mello + + + @@ -14334,9 +21407,11 @@ exports[`Storyshots Message list 1`] = ` @@ -14372,9 +21447,11 @@ exports[`Storyshots Message list 1`] = ` @@ -14396,9 +21473,11 @@ exports[`Storyshots Message list 1`] = ` @@ -14432,9 +21511,11 @@ exports[`Storyshots Message list 1`] = ` @@ -14456,9 +21537,11 @@ exports[`Storyshots Message list 1`] = ` @@ -14475,6 +21558,13 @@ exports[`Storyshots Message list 1`] = ` + + +`; + +exports[`Storyshots RoomItem list 1`] = ` + + - Markdown table + Basic + View + + User + + View + View + + Type + + View + View + View + View + View + + Alerts + + View + View + View + View + View + View + View + View + View + + Last Message + + View + View + View + View + View + View `; diff --git a/android/app/build.gradle b/android/app/build.gradle index 99ab1a64c..92691cf57 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -103,7 +103,7 @@ android { minSdkVersion 21 targetSdkVersion 28 versionCode VERSIONCODE as Integer - versionName "1.10.0" + versionName "1.13.0" ndk { abiFilters "armeabi-v7a", "x86" } @@ -180,7 +180,22 @@ repositories { configurations.all { resolutionStrategy { - force 'org.webkit:android-jsc:r225067' + force 'org.webkit:android-jsc:r241213' + + eachDependency { DependencyResolveDetails details -> + if (details.requested.name == 'play-services-base') { + details.useTarget group: details.requested.group, name: details.requested.name, version: '15.0.1' + } + if (details.requested.name == 'play-services-tasks') { + details.useTarget group: details.requested.group, name: details.requested.name, version: '15.0.1' + } + if (details.requested.name == 'play-services-stats') { + details.useTarget group: details.requested.group, name: details.requested.name, version: '15.0.1' + } + if (details.requested.name == 'play-services-basement') { + details.useTarget group: details.requested.group, name: details.requested.name, version: '15.0.1' + } + } } } @@ -199,21 +214,23 @@ dependencies { implementation project(':react-native-video') implementation project(':react-native-vector-icons') implementation project(':rn-fetch-blob') - implementation project(':@remobile/react-native-toast') + implementation project(':react-native-toast') implementation project(':react-native-fast-image') implementation project(':realm') implementation project(':reactnativenotifications') implementation fileTree(dir: "libs", include: ["*.jar"]) - implementation "com.android.support:appcompat-v7:27.1.1" - implementation "com.android.support:support-v4:27.1.1" - implementation 'com.android.support:customtabs:27.1.1' - implementation 'com.android.support:design:27.1.1' + implementation 'org.webkit:android-jsc-cppruntime:+' + implementation "com.android.support:appcompat-v7:28.0.0" + implementation "com.android.support:support-v4:28.0.0" + implementation 'com.android.support:customtabs:28.0.0' + implementation 'com.android.support:design:28.0.0' implementation "com.facebook.react:react-native:+" // From node_modules implementation 'com.facebook.fresco:fresco:1.10.0' implementation 'com.facebook.fresco:animated-gif:1.10.0' implementation 'com.facebook.fresco:animated-webp:1.10.0' implementation 'com.facebook.fresco:webpsupport:1.10.0' - implementation 'com.google.android.gms:play-services-gcm:16.1.0' + implementation "com.google.firebase:firebase-core:16.0.1" + implementation "com.google.firebase:firebase-messaging:17.3.4" implementation('com.crashlytics.sdk.android:crashlytics:2.9.5@aar') { transitive = true; } @@ -225,3 +242,6 @@ task copyDownloadableDepsToLibs(type: Copy) { from configurations.compile into 'libs' } + +apply plugin: 'com.google.gms.google-services' +com.google.gms.googleservices.GoogleServicesPlugin.config.disableVersionCheck = true \ No newline at end of file diff --git a/android/app/google-services.json b/android/app/google-services.json new file mode 100644 index 000000000..1721bcb78 --- /dev/null +++ b/android/app/google-services.json @@ -0,0 +1,245 @@ +{ + "project_info": { + "project_number": "673693445664", + "firebase_url": "https://rocketchat-9e9be.firebaseio.com", + "project_id": "rocketchat-9e9be", + "storage_bucket": "rocketchat-9e9be.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:673693445664:android:6ef4638e500ec958", + "android_client_info": { + "package_name": "RocketChat" + } + }, + "oauth_client": [ + { + "client_id": "673693445664-97s9t777ful7mn2510vuhb48958qd9tb.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyDIkZj1TRz8TmhnMswDwVY5OnWuzFK3rxg" + } + ], + "services": { + "analytics_service": { + "status": 1 + }, + "appinvite_service": { + "status": 1, + "other_platform_oauth_client": [] + }, + "ads_service": { + "status": 2 + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:673693445664:android:16da2e50aff9f0c9", + "android_client_info": { + "package_name": "chat.rocket.android" + } + }, + "oauth_client": [ + { + "client_id": "673693445664-hrjftksij02vqtd467ln2cubvu48ft5j.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "chat.rocket.android", + "certificate_hash": "41cf750df786a6d9da712a98a629d0c8391876d6" + } + }, + { + "client_id": "673693445664-k0mvosdjoe5dbvqce3b377ckabb5dgu8.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "chat.rocket.android", + "certificate_hash": "33fa8582794176014a59054192e261bfad0e5273" + } + }, + { + "client_id": "673693445664-97s9t777ful7mn2510vuhb48958qd9tb.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyDIkZj1TRz8TmhnMswDwVY5OnWuzFK3rxg" + } + ], + "services": { + "analytics_service": { + "status": 1 + }, + "appinvite_service": { + "status": 2, + "other_platform_oauth_client": [ + { + "client_id": "673693445664-97s9t777ful7mn2510vuhb48958qd9tb.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "673693445664-dumairnsk1sbkca5nmsq2b5kdglqpc0a.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "chat.rocket.ios", + "app_store_id": "1148741252" + } + } + ] + }, + "ads_service": { + "status": 2 + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:673693445664:android:1551054db195f705", + "android_client_info": { + "package_name": "chat.rocket.android.dev" + } + }, + "oauth_client": [ + { + "client_id": "673693445664-t5aeku0oie010npd40a0tgn27c418vk7.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "chat.rocket.android.dev", + "certificate_hash": "41cf750df786a6d9da712a98a629d0c8391876d6" + } + }, + { + "client_id": "673693445664-iml14ln4vccuu7liclrpt2k671fkjs38.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "chat.rocket.android.dev", + "certificate_hash": "33fa8582794176014a59054192e261bfad0e5273" + } + }, + { + "client_id": "673693445664-97s9t777ful7mn2510vuhb48958qd9tb.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyDIkZj1TRz8TmhnMswDwVY5OnWuzFK3rxg" + } + ], + "services": { + "analytics_service": { + "status": 1 + }, + "appinvite_service": { + "status": 2, + "other_platform_oauth_client": [ + { + "client_id": "673693445664-97s9t777ful7mn2510vuhb48958qd9tb.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "673693445664-dumairnsk1sbkca5nmsq2b5kdglqpc0a.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "chat.rocket.ios", + "app_store_id": "1148741252" + } + } + ] + }, + "ads_service": { + "status": 2 + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:673693445664:android:8be27b1f7c42a2ed", + "android_client_info": { + "package_name": "chat.rocket.reactnative" + } + }, + "oauth_client": [ + { + "client_id": "673693445664-97s9t777ful7mn2510vuhb48958qd9tb.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyDIkZj1TRz8TmhnMswDwVY5OnWuzFK3rxg" + } + ], + "services": { + "analytics_service": { + "status": 1 + }, + "appinvite_service": { + "status": 1, + "other_platform_oauth_client": [] + }, + "ads_service": { + "status": 2 + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:673693445664:android:64932c99863e2838", + "android_client_info": { + "package_name": "com.konecty.rocket.chat" + } + }, + "oauth_client": [ + { + "client_id": "673693445664-3ajben08beuco6eout3kpod2gbbm8fij.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.konecty.rocket.chat", + "certificate_hash": "cd5806ba3f0141d0f2e47acfe64a485f575108ab" + } + }, + { + "client_id": "673693445664-97s9t777ful7mn2510vuhb48958qd9tb.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyDIkZj1TRz8TmhnMswDwVY5OnWuzFK3rxg" + } + ], + "services": { + "analytics_service": { + "status": 1 + }, + "appinvite_service": { + "status": 2, + "other_platform_oauth_client": [ + { + "client_id": "673693445664-97s9t777ful7mn2510vuhb48958qd9tb.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "673693445664-dumairnsk1sbkca5nmsq2b5kdglqpc0a.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "chat.rocket.ios", + "app_store_id": "1148741252" + } + } + ] + }, + "ads_service": { + "status": 2 + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 17fcb09a1..04bdf8d81 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -9,15 +9,6 @@ - - - - - - - diff --git a/android/app/src/main/assets/fonts/custom.ttf b/android/app/src/main/assets/fonts/custom.ttf index 3c78fa494..78378284b 100755 Binary files a/android/app/src/main/assets/fonts/custom.ttf and b/android/app/src/main/assets/fonts/custom.ttf differ diff --git a/android/app/src/main/res/drawable-xxxhdpi/message_empty.png b/android/app/src/main/res/drawable-xxxhdpi/message_empty.png new file mode 100644 index 000000000..d07e5dcf3 Binary files /dev/null and b/android/app/src/main/res/drawable-xxxhdpi/message_empty.png differ diff --git a/android/build.gradle b/android/build.gradle index 3b3f3df0b..c41efb508 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -4,12 +4,11 @@ buildscript { repositories { mavenLocal() google() - // mavenCentral() jcenter() } dependencies { - // classpath 'com.android.tools.build:gradle:2.2.3' classpath 'com.android.tools.build:gradle:3.1.0' + classpath 'com.google.gms:google-services:4.0.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files @@ -19,12 +18,8 @@ buildscript { allprojects { repositories { mavenLocal() - // mavenCentral() google() jcenter() - // maven { - // url 'https://maven.google.com' - // } maven { url "https://jitpack.io" } maven { // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm diff --git a/android/settings.gradle b/android/settings.gradle index b4b8ff901..5cd7ee60c 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -11,8 +11,8 @@ include ':react-native-device-info' project(':react-native-device-info').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-device-info/android') include ':react-native-gesture-handler' project(':react-native-gesture-handler').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-gesture-handler/android') -include ':@remobile/react-native-toast' -project(':@remobile/react-native-toast').projectDir = new File(rootProject.projectDir, '../node_modules/@remobile/react-native-toast/android') +include ':react-native-toast' +project(':react-native-toast').projectDir = new File(rootProject.projectDir, '../node_modules/@remobile/react-native-toast/android') include ':rn-fetch-blob' project(':rn-fetch-blob').projectDir = new File(rootProject.projectDir, '../node_modules/rn-fetch-blob/android') include ':react-native-image-crop-picker' diff --git a/app/actions/actionsTypes.js b/app/actions/actionsTypes.js index a3a493347..3a0d3bbd4 100644 --- a/app/actions/actionsTypes.js +++ b/app/actions/actionsTypes.js @@ -26,18 +26,7 @@ export const ROOMS = createRequestTypes('ROOMS', [ 'OPEN_SEARCH_HEADER', 'CLOSE_SEARCH_HEADER' ]); -export const ROOM = createRequestTypes('ROOM', [ - 'ADD_USER_TYPING', - 'REMOVE_USER_TYPING', - 'SOMEONE_TYPING', - 'OPEN', - 'CLOSE', - 'LEAVE', - 'ERASE', - 'USER_TYPING', - 'MESSAGE_RECEIVED', - 'SET_LAST_OPEN' -]); +export const ROOM = createRequestTypes('ROOM', ['LEAVE', 'ERASE', 'USER_TYPING']); export const APP = createRequestTypes('APP', ['START', 'READY', 'INIT']); export const MESSAGES = createRequestTypes('MESSAGES', [ ...defaultTypes, @@ -75,8 +64,6 @@ export const SERVER = createRequestTypes('SERVER', [ ]); export const METEOR = createRequestTypes('METEOR_CONNECT', [...defaultTypes, 'DISCONNECT']); export const LOGOUT = 'LOGOUT'; // logout is always success -export const ACTIVE_USERS = createRequestTypes('ACTIVE_USERS', ['SET']); -export const ROLES = createRequestTypes('ROLES', ['SET']); export const SNIPPETED_MESSAGES = createRequestTypes('SNIPPETED_MESSAGES', ['OPEN', 'READY', 'CLOSE', 'MESSAGES_RECEIVED']); export const DEEP_LINKING = createRequestTypes('DEEP_LINKING', ['OPEN']); export const SORT_PREFERENCES = createRequestTypes('SORT_PREFERENCES', ['SET_ALL', 'SET']); diff --git a/app/actions/activeUsers.js b/app/actions/activeUsers.js deleted file mode 100644 index 1e7c5ecb7..000000000 --- a/app/actions/activeUsers.js +++ /dev/null @@ -1,8 +0,0 @@ -import * as types from './actionsTypes'; - -export function setActiveUser(data) { - return { - type: types.ACTIVE_USERS.SET, - data - }; -} diff --git a/app/actions/messages.js b/app/actions/messages.js index 1b8451c7b..f8784cde7 100644 --- a/app/actions/messages.js +++ b/app/actions/messages.js @@ -1,25 +1,5 @@ import * as types from './actionsTypes'; -export function messagesRequest(room) { - return { - type: types.MESSAGES.REQUEST, - room - }; -} - -export function messagesSuccess() { - return { - type: types.MESSAGES.SUCCESS - }; -} - -export function messagesFailure(err) { - return { - type: types.MESSAGES.FAILURE, - err - }; -} - export function actionsShow(actionMessage) { return { type: types.MESSAGES.ACTIONS_SHOW, diff --git a/app/actions/roles.js b/app/actions/roles.js deleted file mode 100644 index 074111985..000000000 --- a/app/actions/roles.js +++ /dev/null @@ -1,8 +0,0 @@ -import * as types from './actionsTypes'; - -export function setRoles(data) { - return { - type: types.ROLES.SET, - data - }; -} diff --git a/app/actions/room.js b/app/actions/room.js index ab8b1b1e6..64eb223d1 100644 --- a/app/actions/room.js +++ b/app/actions/room.js @@ -1,40 +1,5 @@ import * as types from './actionsTypes'; - -export function removeUserTyping(username) { - return { - type: types.ROOM.REMOVE_USER_TYPING, - username - }; -} - -export function someoneTyping(data) { - return { - type: types.ROOM.SOMEONE_TYPING, - ...data - }; -} - -export function addUserTyping(username) { - return { - type: types.ROOM.ADD_USER_TYPING, - username - }; -} - -export function openRoom(room) { - return { - type: types.ROOM.OPEN, - room - }; -} - -export function closeRoom() { - return { - type: types.ROOM.CLOSE - }; -} - export function leaveRoom(rid, t) { return { type: types.ROOM.LEAVE, @@ -51,23 +16,10 @@ export function eraseRoom(rid, t) { }; } -export function userTyping(status = true) { +export function userTyping(rid, status = true) { return { type: types.ROOM.USER_TYPING, + rid, status }; } - -export function roomMessageReceived(message) { - return { - type: types.ROOM.MESSAGE_RECEIVED, - message - }; -} - -export function setLastOpen(date = new Date()) { - return { - type: types.ROOM.SET_LAST_OPEN, - date - }; -} diff --git a/app/actions/server.js b/app/actions/server.js index a6bab715c..3a383781c 100644 --- a/app/actions/server.js +++ b/app/actions/server.js @@ -1,16 +1,19 @@ import { SERVER } from './actionsTypes'; -export function selectServerRequest(server) { +export function selectServerRequest(server, version, fetchVersion = true) { return { type: SERVER.SELECT_REQUEST, - server + server, + version, + fetchVersion }; } -export function selectServerSuccess(server) { +export function selectServerSuccess(server, version) { return { type: SERVER.SELECT_SUCCESS, - server + server, + version }; } diff --git a/app/constants/colors.js b/app/constants/colors.js index 658bf9f47..78dfda526 100644 --- a/app/constants/colors.js +++ b/app/constants/colors.js @@ -1,9 +1,17 @@ import { isIOS } from '../utils/deviceInfo'; export const COLOR_DANGER = '#f5455c'; -export const COLOR_BUTTON_PRIMARY = '#1d74f5'; -export const COLOR_TEXT = '#292E35'; -export const COLOR_SEPARATOR = '#CBCED1'; +export const COLOR_SUCCESS = '#2de0a5'; +export const COLOR_PRIMARY = '#1d74f5'; +export const COLOR_WHITE = '#fff'; +export const COLOR_BUTTON_PRIMARY = COLOR_PRIMARY; +export const COLOR_TITLE = '#0C0D0F'; +export const COLOR_TEXT = '#2F343D'; +export const COLOR_TEXT_DESCRIPTION = '#9ca2a8'; +export const COLOR_SEPARATOR = '#A7A7AA'; +export const COLOR_BACKGROUND_CONTAINER = '#f3f4f5'; +export const COLOR_BORDER = '#e1e5e8'; +export const COLOR_UNREAD = '#e1e5e8'; export const STATUS_COLORS = { online: '#2de0a5', busy: COLOR_DANGER, @@ -11,6 +19,6 @@ export const STATUS_COLORS = { offline: '#cbced1' }; -export const HEADER_BACKGROUND = isIOS ? '#FFF' : '#2F343D'; -export const HEADER_TITLE = isIOS ? '#0C0D0F' : '#FFF'; -export const HEADER_BACK = isIOS ? '#1d74f5' : '#FFF'; +export const HEADER_BACKGROUND = isIOS ? '#f8f8f8' : '#2F343D'; +export const HEADER_TITLE = isIOS ? COLOR_TITLE : COLOR_WHITE; +export const HEADER_BACK = isIOS ? COLOR_PRIMARY : COLOR_WHITE; diff --git a/app/constants/permissions.js b/app/constants/permissions.js deleted file mode 100644 index 16ce1cfc3..000000000 --- a/app/constants/permissions.js +++ /dev/null @@ -1,17 +0,0 @@ -export default [ - 'add-user-to-any-c-room', - 'add-user-to-any-p-room', - 'add-user-to-joined-room', - 'archive-room', - 'delete-c', - 'delete-message', - 'delete-p', - 'edit-message', - 'edit-room', - 'force-delete-message', - 'mute-user', - 'set-react-when-readonly', - 'set-readonly', - 'unarchive-room', - 'view-broadcast-member-list' -]; diff --git a/app/constants/settings.js b/app/constants/settings.js index fe00972b4..78b229522 100644 --- a/app/constants/settings.js +++ b/app/constants/settings.js @@ -14,12 +14,6 @@ export default { CROWD_Enable: { type: 'valueAsBoolean' }, - Layout_Privacy_Policy: { - type: 'valueAsString' - }, - Layout_Terms_of_Service: { - type: 'valueAsString' - }, LDAP_Enable: { type: 'valueAsBoolean' }, @@ -61,5 +55,8 @@ export default { }, Assets_favicon_512: { type: null + }, + Threads_enabled: { + type: null } }; diff --git a/app/containers/Avatar.js b/app/containers/Avatar.js index ba55c37fe..e0f53337d 100644 --- a/app/containers/Avatar.js +++ b/app/containers/Avatar.js @@ -1,73 +1,69 @@ -import React, { PureComponent } from 'react'; +import React from 'react'; import PropTypes from 'prop-types'; import { View, ViewPropTypes } from 'react-native'; import FastImage from 'react-native-fast-image'; -export default class Avatar extends PureComponent { - static propTypes = { - baseUrl: PropTypes.string.isRequired, - style: ViewPropTypes.style, - text: PropTypes.string, - avatar: PropTypes.string, - size: PropTypes.number, - borderRadius: PropTypes.number, - type: PropTypes.string, - children: PropTypes.object, - user: PropTypes.shape({ - id: PropTypes.string, - token: PropTypes.string - }) +const Avatar = React.memo(({ + text, size, baseUrl, borderRadius, style, avatar, type, children, userId, token +}) => { + const avatarStyle = { + width: size, + height: size, + borderRadius + }; + + if (!text && !avatar) { + return null; } - static defaultProps = { - text: '', - size: 25, - type: 'd', - borderRadius: 4 + const room = type === 'd' ? text : `@${ text }`; + + // Avoid requesting several sizes by having only two sizes on cache + const uriSize = size === 100 ? 100 : 50; + + let avatarAuthURLFragment = ''; + if (userId && token) { + avatarAuthURLFragment = `&rc_token=${ token }&rc_uid=${ userId }`; } - render() { - const { - text, size, baseUrl, borderRadius, style, avatar, type, children, user - } = this.props; + const uri = avatar || `${ baseUrl }/avatar/${ room }?format=png&width=${ uriSize }&height=${ uriSize }${ avatarAuthURLFragment }`; - const avatarStyle = { - width: size, - height: size, - borderRadius - }; + const image = ( + + ); - if (!text && !avatar) { - return null; - } + return ( + + {image} + {children} + + ); +}); - const room = type === 'd' ? text : `@${ text }`; +Avatar.propTypes = { + baseUrl: PropTypes.string.isRequired, + style: ViewPropTypes.style, + text: PropTypes.string, + avatar: PropTypes.string, + size: PropTypes.number, + borderRadius: PropTypes.number, + type: PropTypes.string, + children: PropTypes.object, + userId: PropTypes.string, + token: PropTypes.string +}; - // Avoid requesting several sizes by having only two sizes on cache - const uriSize = size === 100 ? 100 : 50; +Avatar.defaultProps = { + text: '', + size: 25, + type: 'd', + borderRadius: 4 +}; - let avatarAuthURLFragment = ''; - if (user && user.id && user.token) { - avatarAuthURLFragment = `&rc_token=${ user.token }&rc_uid=${ user.id }`; - } - - const uri = avatar || `${ baseUrl }/avatar/${ room }?format=png&width=${ uriSize }&height=${ uriSize }${ avatarAuthURLFragment }`; - - const image = ( - - ); - - return ( - - {image} - {children} - - ); - } -} +export default Avatar; diff --git a/app/containers/ConnectionBadge.js b/app/containers/ConnectionBadge.js deleted file mode 100644 index e2f9818a9..000000000 --- a/app/containers/ConnectionBadge.js +++ /dev/null @@ -1,136 +0,0 @@ -import React, { Component } from 'react'; -import { - Text, StyleSheet, ActivityIndicator, Animated, Easing -} from 'react-native'; -import { connect } from 'react-redux'; -import PropTypes from 'prop-types'; - -import I18n from '../i18n'; -import debounce from '../utils/debounce'; - -const styles = StyleSheet.create({ - container: { - width: '100%', - position: 'absolute', - top: 0, - height: 41, - backgroundColor: '#F7F8FA', - flexDirection: 'row', - alignItems: 'center', - justifyContent: 'center', - elevation: 4 - }, - text: { - color: '#fff', - fontSize: 15, - fontWeight: 'normal' - }, - textConnecting: { - color: '#9EA2A8' - }, - containerConnected: { - backgroundColor: '#2de0a5' - }, - containerOffline: { - backgroundColor: '#f5455c' - }, - activityIndicator: { - marginRight: 15 - } -}); - -const ANIMATION_DURATION = 300; - -@connect(state => ({ - connecting: state.meteor.connecting, - connected: state.meteor.connected, - disconnected: !state.meteor.connecting && !state.meteor.connected -})) -class ConnectionBadge extends Component { - static propTypes = { - connecting: PropTypes.bool, - connected: PropTypes.bool, - disconnected: PropTypes.bool - } - - constructor(props) { - super(props); - this.animatedValue = new Animated.Value(0); - if (props.connecting) { - this.show(); - } - } - - componentDidUpdate() { - const { connected, disconnected } = this.props; - this.show(connected || disconnected); - } - - componentWillUnmount() { - if (this.timeout) { - clearTimeout(this.timeout); - } - } - - // eslint-disable-next-line react/sort-comp - animate = debounce((toValue, autoHide) => { - Animated.timing( - this.animatedValue, - { - toValue, - duration: ANIMATION_DURATION, - easing: Easing.ease, - useNativeDriver: true - }, - ).start(() => { - if (toValue === 1 && autoHide) { - if (this.timeout) { - clearTimeout(this.timeout); - } - this.timeout = setTimeout(() => { - this.hide(); - }, 1000); - } - }); - }, 300); - - show = (autoHide) => { - this.animate(1, autoHide); - } - - hide = () => { - this.animate(0); - } - - render() { - const { connecting, connected } = this.props; - - const translateY = this.animatedValue.interpolate({ - inputRange: [0, 1], - outputRange: [-42, 0] - }); - - if (connecting) { - return ( - - - {I18n.t('Connecting')} - - ); - } else if (connected) { - return ( - - {I18n.t('Connected')} - - ); - } - - return ( - - {I18n.t('Offline')} - - ); - } -} - -export default ConnectionBadge; diff --git a/app/containers/EmojiPicker/index.js b/app/containers/EmojiPicker/index.js index 9860dea97..3fe6f9371 100644 --- a/app/containers/EmojiPicker/index.js +++ b/app/containers/EmojiPicker/index.js @@ -10,7 +10,7 @@ import TabBar from './TabBar'; import EmojiCategory from './EmojiCategory'; import styles from './styles'; import categories from './categories'; -import database from '../../lib/realm'; +import database, { safeAddListener } from '../../lib/realm'; import { emojisByCategory } from '../../emojis'; import protectedFunction from '../../lib/methods/helpers/protectedFunction'; @@ -45,8 +45,8 @@ export default class EmojiPicker extends Component { this.updateFrequentlyUsed(); this.updateCustomEmojis(); requestAnimationFrame(() => this.setState({ show: true })); - this.frequentlyUsed.addListener(this.updateFrequentlyUsed); - this.customEmojis.addListener(this.updateCustomEmojis); + safeAddListener(this.frequentlyUsed, this.updateFrequentlyUsed); + safeAddListener(this.customEmojis, this.updateCustomEmojis); } shouldComponentUpdate(nextProps, nextState) { diff --git a/app/containers/EmojiPicker/styles.js b/app/containers/EmojiPicker/styles.js index 35cbd7e97..d4e993f50 100644 --- a/app/containers/EmojiPicker/styles.js +++ b/app/containers/EmojiPicker/styles.js @@ -1,8 +1,9 @@ import { StyleSheet } from 'react-native'; +import { COLOR_PRIMARY, COLOR_WHITE } from '../../constants/colors'; export default StyleSheet.create({ background: { - backgroundColor: '#fff' + backgroundColor: COLOR_WHITE }, container: { flex: 1 @@ -27,7 +28,7 @@ export default StyleSheet.create({ left: 0, right: 0, height: 2, - backgroundColor: '#007aff', + backgroundColor: COLOR_PRIMARY, bottom: 0 }, tabLine: { diff --git a/app/containers/HeaderButton.js b/app/containers/HeaderButton.js index af11f1084..3ad9675f9 100644 --- a/app/containers/HeaderButton.js +++ b/app/containers/HeaderButton.js @@ -1,15 +1,16 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { Text } from 'react-native'; import HeaderButtons, { HeaderButton, Item } from 'react-navigation-header-buttons'; import { CustomIcon } from '../lib/Icons'; import { isIOS } from '../utils/deviceInfo'; +import { COLOR_PRIMARY, COLOR_WHITE } from '../constants/colors'; -const color = isIOS ? '#1D74F5' : '#FFF'; +const color = isIOS ? COLOR_PRIMARY : COLOR_WHITE; +export const headerIconSize = 23; const CustomHeaderButton = React.memo(props => ( - + )); export const CustomHeaderButtons = React.memo(props => ( @@ -59,5 +60,3 @@ LegalButton.propTypes = { }; export { Item }; - -export default () => a; diff --git a/app/containers/MessageActions.js b/app/containers/MessageActions.js index ccbfa35a9..e2d347afd 100644 --- a/app/containers/MessageActions.js +++ b/app/containers/MessageActions.js @@ -198,6 +198,11 @@ export default class MessageActions extends React.Component { if (this.isRoomReadOnly()) { return false; } + + // Prevent from deleting thread start message when positioned inside the thread + if (props.tmid && props.tmid === props.actionMessage._id) { + return false; + } const deleteOwn = this.isOwn(props); const { Message_AllowDeleting: isDeleteAllowed, Message_AllowDeleting_BlockDeleteInMinutes } = this.props; if (!(this.hasDeletePermission || (isDeleteAllowed && deleteOwn) || this.hasForceDeletePermission)) { diff --git a/app/containers/MessageBox/Recording.js b/app/containers/MessageBox/Recording.js index d816ce2b5..d30a9cf19 100644 --- a/app/containers/MessageBox/Recording.js +++ b/app/containers/MessageBox/Recording.js @@ -10,6 +10,7 @@ import styles from './styles'; import I18n from '../../i18n'; import { isIOS, isAndroid } from '../../utils/deviceInfo'; import { CustomIcon } from '../../lib/Icons'; +import { COLOR_SUCCESS, COLOR_DANGER } from '../../constants/colors'; export const _formatTime = function(seconds) { let minutes = Math.floor(seconds / 60); @@ -130,7 +131,7 @@ export default class extends React.PureComponent { > @@ -143,7 +144,7 @@ export default class extends React.PureComponent { > diff --git a/app/containers/MessageBox/ReplyPreview.js b/app/containers/MessageBox/ReplyPreview.js index a25ac1460..dd24b0d12 100644 --- a/app/containers/MessageBox/ReplyPreview.js +++ b/app/containers/MessageBox/ReplyPreview.js @@ -6,17 +6,21 @@ import { connect } from 'react-redux'; import Markdown from '../message/Markdown'; import { CustomIcon } from '../../lib/Icons'; +import sharedStyles from '../../views/Styles'; +import { + COLOR_PRIMARY, COLOR_BACKGROUND_CONTAINER, COLOR_TEXT_DESCRIPTION, COLOR_WHITE +} from '../../constants/colors'; const styles = StyleSheet.create({ container: { flexDirection: 'row', marginTop: 10, - backgroundColor: '#fff' + backgroundColor: COLOR_WHITE }, messageContainer: { flex: 1, marginHorizontal: 10, - backgroundColor: '#F3F4F5', + backgroundColor: COLOR_BACKGROUND_CONTAINER, paddingHorizontal: 15, paddingVertical: 10, borderRadius: 4 @@ -26,15 +30,17 @@ const styles = StyleSheet.create({ alignItems: 'center' }, username: { - color: '#1D74F5', + color: COLOR_PRIMARY, fontSize: 16, - fontWeight: '500' + ...sharedStyles.textMedium }, time: { - color: '#9EA2A8', fontSize: 12, lineHeight: 16, - marginLeft: 5 + marginLeft: 6, + ...sharedStyles.textColorDescription, + ...sharedStyles.textRegular, + fontWeight: '300' }, close: { marginRight: 10 @@ -79,7 +85,7 @@ export default class ReplyPreview extends Component { - + ); } diff --git a/app/containers/MessageBox/UploadModal.js b/app/containers/MessageBox/UploadModal.js index 3d04ba416..82b0ac7dc 100644 --- a/app/containers/MessageBox/UploadModal.js +++ b/app/containers/MessageBox/UploadModal.js @@ -12,8 +12,9 @@ import Button from '../Button'; import I18n from '../../i18n'; import sharedStyles from '../../views/Styles'; import { isIOS } from '../../utils/deviceInfo'; +import { COLOR_PRIMARY, COLOR_BACKGROUND_CONTAINER, COLOR_WHITE } from '../../constants/colors'; -const cancelButtonColor = '#f7f8fa'; +const cancelButtonColor = COLOR_BACKGROUND_CONTAINER; const styles = StyleSheet.create({ modal: { @@ -25,11 +26,13 @@ const styles = StyleSheet.create({ paddingTop: 16 }, title: { + fontSize: 14, + ...sharedStyles.textColorTitle, ...sharedStyles.textBold }, container: { height: 430, - backgroundColor: '#ffffff', + backgroundColor: COLOR_WHITE, flexDirection: 'column' }, scrollView: { @@ -46,7 +49,7 @@ const styles = StyleSheet.create({ flexDirection: 'row', justifyContent: 'space-between', padding: 16, - backgroundColor: '#f7f8fa' + backgroundColor: COLOR_BACKGROUND_CONTAINER }, button: { marginBottom: 0 @@ -149,15 +152,15 @@ export default class UploadModal extends Component { underlayColor={cancelButtonColor} activeOpacity={0.5} > - {I18n.t('Cancel')} + {I18n.t('Cancel')} - {I18n.t('Send')} + {I18n.t('Send')} ); diff --git a/app/containers/MessageBox/index.js b/app/containers/MessageBox/index.js index 7f3c93907..d22da3638 100644 --- a/app/containers/MessageBox/index.js +++ b/app/containers/MessageBox/index.js @@ -31,12 +31,11 @@ import I18n from '../../i18n'; import ReplyPreview from './ReplyPreview'; import { CustomIcon } from '../../lib/Icons'; import debounce from '../../utils/debounce'; +import { COLOR_PRIMARY, COLOR_TEXT_DESCRIPTION } from '../../constants/colors'; const MENTIONS_TRACKING_TYPE_USERS = '@'; const MENTIONS_TRACKING_TYPE_EMOJIS = ':'; -const BLUE_COLOR = '#1D74F5'; - const onlyUnique = function onlyUnique(value, index, self) { return self.indexOf(({ _id }) => value._id === _id) === index; }; @@ -49,25 +48,7 @@ const imagePickerConfig = { cropperCancelText: I18n.t('Cancel') }; -@connect(state => ({ - roomType: state.room.t, - message: state.messages.message, - replyMessage: state.messages.replyMessage, - replying: state.messages.replyMessage && !!state.messages.replyMessage.msg, - editing: state.messages.editing, - baseUrl: state.settings.Site_Url || state.server ? state.server.server : '', - user: { - id: state.login.user && state.login.user.id, - username: state.login.user && state.login.user.username, - token: state.login.user && state.login.user.token - } -}), dispatch => ({ - editCancel: () => dispatch(editCancelAction()), - editRequest: message => dispatch(editRequestAction(message)), - typing: status => dispatch(userTypingAction(status)), - closeReply: () => dispatch(replyCancelAction()) -})) -export default class MessageBox extends Component { +class MessageBox extends Component { static propTypes = { rid: PropTypes.string.isRequired, baseUrl: PropTypes.string.isRequired, @@ -75,12 +56,15 @@ export default class MessageBox extends Component { replyMessage: PropTypes.object, replying: PropTypes.bool, editing: PropTypes.bool, + threadsEnabled: PropTypes.bool, + isFocused: PropTypes.bool, user: PropTypes.shape({ id: PropTypes.string, username: PropTypes.string, token: PropTypes.string }), roomType: PropTypes.string, + tmid: PropTypes.string, editCancel: PropTypes.func.isRequired, editRequest: PropTypes.func.isRequired, onSubmit: PropTypes.func.isRequired, @@ -109,12 +93,38 @@ export default class MessageBox extends Component { this.text = ''; } + componentDidMount() { + const { rid, tmid } = this.props; + let msg; + if (tmid) { + const thread = database.objectForPrimaryKey('threads', tmid); + if (thread) { + msg = thread.draftMessage; + } + } else { + const [room] = database.objects('subscriptions').filtered('rid = $0', rid); + if (room) { + msg = room.draftMessage; + } + } + if (msg) { + this.setInput(msg); + this.setShowSend(true); + } + } + componentWillReceiveProps(nextProps) { - const { message, replyMessage } = this.props; - if (message !== nextProps.message && nextProps.message.msg) { + const { message, replyMessage, isFocused } = this.props; + if (!isFocused) { + return; + } + if (!equal(message, nextProps.message) && nextProps.message.msg) { this.setInput(nextProps.message.msg); + if (this.text) { + this.setShowSend(true); + } this.focus(); - } else if (replyMessage !== nextProps.replyMessage && nextProps.replyMessage.msg) { + } else if (!equal(replyMessage, nextProps.replyMessage)) { this.focus(); } else if (!nextProps.message) { this.clearInput(); @@ -126,8 +136,11 @@ export default class MessageBox extends Component { showEmojiKeyboard, showFilesAction, showSend, recording, mentions, file } = this.state; const { - roomType, replying, editing + roomType, replying, editing, isFocused } = this.props; + if (!isFocused) { + return false; + } if (nextProps.roomType !== roomType) { return true; } @@ -241,7 +254,7 @@ export default class MessageBox extends Component { > @@ -258,7 +271,7 @@ export default class MessageBox extends Component { > @@ -273,7 +286,7 @@ export default class MessageBox extends Component { > @@ -294,7 +307,7 @@ export default class MessageBox extends Component { accessibilityLabel={I18n.t('Send message')} accessibilityTraits='button' > - + ); return icons; @@ -308,7 +321,7 @@ export default class MessageBox extends Component { accessibilityLabel={I18n.t('Send audio message')} accessibilityTraits='button' > - + ); icons.push( @@ -320,7 +333,7 @@ export default class MessageBox extends Component { accessibilityLabel={I18n.t('Message actions')} accessibilityTraits='button' > - + ); return icons; @@ -446,13 +459,13 @@ export default class MessageBox extends Component { } handleTyping = (isTyping) => { - const { typing } = this.props; + const { typing, rid } = this.props; if (!isTyping) { if (this.typingTimeout) { clearTimeout(this.typingTimeout); this.typingTimeout = false; } - typing(false); + typing(rid, false); return; } @@ -461,7 +474,7 @@ export default class MessageBox extends Component { } this.typingTimeout = setTimeout(() => { - typing(true); + typing(rid, true); this.typingTimeout = false; }, 1000); } @@ -487,7 +500,7 @@ export default class MessageBox extends Component { } sendImageMessage = async(file) => { - const { rid } = this.props; + const { rid, tmid } = this.props; this.setState({ file: { isVisible: false } }); const fileInfo = { @@ -499,7 +512,7 @@ export default class MessageBox extends Component { path: file.path }; try { - await RocketChat.sendFileMessage(rid, fileInfo); + await RocketChat.sendFileMessage(rid, fileInfo, tmid); } catch (e) { log('sendImageMessage', e); } @@ -545,14 +558,14 @@ export default class MessageBox extends Component { } finishAudioMessage = async(fileInfo) => { - const { rid } = this.props; + const { rid, tmid } = this.props; this.setState({ recording: false }); if (fileInfo) { try { - await RocketChat.sendFileMessage(rid, fileInfo); + await RocketChat.sendFileMessage(rid, fileInfo, tmid); } catch (e) { if (e && e.error === 'error-file-too-large') { return Alert.alert(I18n.t(e.error)); @@ -578,31 +591,42 @@ export default class MessageBox extends Component { if (message.trim() === '') { return; } - // if is editing a message + const { editing, replying } = this.props; + // Edit if (editing) { const { _id, rid } = editingMessage; editRequest({ _id, msg: message, rid }); + + // Reply } else if (replying) { - const { - user, replyMessage, roomType, closeReply - } = this.props; - const permalink = await this.getPermalink(replyMessage); - let msg = `[ ](${ permalink }) `; + const { replyMessage, closeReply, threadsEnabled } = this.props; - // if original message wasn't sent by current user and neither from a direct room - if (user.username !== replyMessage.u.username && roomType !== 'd' && replyMessage.mention) { - msg += `@${ replyMessage.u.username } `; + // Thread + if (threadsEnabled && replyMessage.mention) { + onSubmit(message, replyMessage._id); + + // Legacy reply or quote (quote is a reply without mention) + } else { + const { user, roomType } = this.props; + const permalink = await this.getPermalink(replyMessage); + let msg = `[ ](${ permalink }) `; + + // if original message wasn't sent by current user and neither from a direct room + if (user.username !== replyMessage.u.username && roomType !== 'd' && replyMessage.mention) { + msg += `@${ replyMessage.u.username } `; + } + + msg = `${ msg } ${ message }`; + onSubmit(msg); } - - msg = `${ msg } ${ message }`; - onSubmit(msg); closeReply(); + + // Normal message } else { - // if is submiting a new message onSubmit(message); } this.clearInput(); @@ -648,7 +672,7 @@ export default class MessageBox extends Component { onPress={() => this.onPressMention(item)} > {item.username} - {item.username === 'here' ? I18n.t('Notify_active_in_this_room') : I18n.t('Notify_all_in_this_room')} + {item.username === 'here' ? I18n.t('Notify_active_in_this_room') : I18n.t('Notify_all_in_this_room')} ) @@ -691,7 +715,7 @@ export default class MessageBox extends Component { {trackingType === MENTIONS_TRACKING_TYPE_EMOJIS ? [ this.renderMentionEmoji(item), - :{ item.name || item }: + :{ item.name || item }: ] : [ , - { item.username || item.name } + { item.username || item.name } ] } @@ -782,7 +807,7 @@ export default class MessageBox extends Component { underlineColorAndroid='transparent' defaultValue='' multiline - placeholderTextColor='#9ea2a8' + placeholderTextColor={COLOR_TEXT_DESCRIPTION} testID='messagebox-input' /> {this.rightButtons} @@ -820,3 +845,26 @@ export default class MessageBox extends Component { ); } } + +const mapStateToProps = state => ({ + message: state.messages.message, + replyMessage: state.messages.replyMessage, + replying: state.messages.replying, + editing: state.messages.editing, + baseUrl: state.settings.Site_Url || state.server ? state.server.server : '', + threadsEnabled: state.settings.Threads_enabled, + user: { + id: state.login.user && state.login.user.id, + username: state.login.user && state.login.user.username, + token: state.login.user && state.login.user.token + } +}); + +const dispatchToProps = ({ + editCancel: () => editCancelAction(), + editRequest: message => editRequestAction(message), + typing: (rid, status) => userTypingAction(rid, status), + closeReply: () => replyCancelAction() +}); + +export default connect(mapStateToProps, dispatchToProps, null, { forwardRef: true })(MessageBox); diff --git a/app/containers/MessageBox/styles.js b/app/containers/MessageBox/styles.js index 601799c93..ec4cb3e76 100644 --- a/app/containers/MessageBox/styles.js +++ b/app/containers/MessageBox/styles.js @@ -1,29 +1,33 @@ import { StyleSheet } from 'react-native'; import { isIOS } from '../../utils/deviceInfo'; +import sharedStyles from '../../views/Styles'; +import { + COLOR_BORDER, COLOR_SEPARATOR, COLOR_BACKGROUND_CONTAINER, COLOR_WHITE +} from '../../constants/colors'; const MENTION_HEIGHT = 50; export default StyleSheet.create({ textBox: { - backgroundColor: '#fff', + backgroundColor: COLOR_WHITE, flex: 0, alignItems: 'center', - borderTopWidth: 1, - borderTopColor: '#D8D8D8', + borderTopWidth: StyleSheet.hairlineWidth, + borderTopColor: COLOR_SEPARATOR, zIndex: 2 }, composer: { - backgroundColor: '#fff', + backgroundColor: COLOR_WHITE, flexDirection: 'column', - borderTopColor: '#e1e5e8', - borderTopWidth: 1 + borderTopColor: COLOR_SEPARATOR, + borderTopWidth: StyleSheet.hairlineWidth }, textArea: { flexDirection: 'row', alignItems: 'center', flexGrow: 0, - backgroundColor: '#fff' + backgroundColor: COLOR_WHITE }, textBoxInput: { textAlignVertical: 'center', @@ -37,7 +41,8 @@ export default StyleSheet.create({ paddingRight: 0, fontSize: 17, letterSpacing: 0, - color: '#2f343d' + ...sharedStyles.textColorNormal, + ...sharedStyles.textRegular }, editing: { backgroundColor: '#fff5df' @@ -53,9 +58,9 @@ export default StyleSheet.create({ }, mentionItem: { height: MENTION_HEIGHT, - backgroundColor: '#F7F8FA', + backgroundColor: COLOR_BACKGROUND_CONTAINER, borderTopWidth: 1, - borderTopColor: '#ECECEC', + borderTopColor: COLOR_BORDER, flexDirection: 'row', alignItems: 'center', paddingHorizontal: 5 @@ -72,18 +77,25 @@ export default StyleSheet.create({ textAlign: 'center' }, fixedMentionAvatar: { - fontWeight: 'bold', textAlign: 'center', - width: 46 + width: 46, + fontSize: 14, + ...sharedStyles.textBold, + ...sharedStyles.textColorNormal + }, + mentionText: { + fontSize: 14, + ...sharedStyles.textRegular, + ...sharedStyles.textColorNormal }, emojiKeyboardContainer: { flex: 1, - borderTopColor: '#ECECEC', + borderTopColor: COLOR_BORDER, borderTopWidth: 1 }, iphoneXArea: { height: 50, - backgroundColor: '#fff', + backgroundColor: COLOR_WHITE, position: 'absolute', bottom: 0, left: 0, diff --git a/app/containers/RoomTypeIcon.js b/app/containers/RoomTypeIcon.js index 4b9382e65..433dfe984 100644 --- a/app/containers/RoomTypeIcon.js +++ b/app/containers/RoomTypeIcon.js @@ -1,12 +1,18 @@ import React from 'react'; import { Image, StyleSheet } from 'react-native'; import PropTypes from 'prop-types'; +import { CustomIcon } from '../lib/Icons'; +import { COLOR_TEXT_DESCRIPTION } from '../constants/colors'; const styles = StyleSheet.create({ style: { marginRight: 7, marginTop: 3, - tintColor: '#9EA2A8' + tintColor: COLOR_TEXT_DESCRIPTION, + color: COLOR_TEXT_DESCRIPTION + }, + discussion: { + marginRight: 6 } }); @@ -15,6 +21,11 @@ const RoomTypeIcon = React.memo(({ type, size, style }) => { return null; } + if (type === 'discussion') { + // FIXME: These are temporary only. We should have all room icons on , but our design team is still working on this. + return ; + } + if (type === 'c') { return ; } diff --git a/app/containers/SearchBox.js b/app/containers/SearchBox.js index a1f433fa9..65a41d3ee 100644 --- a/app/containers/SearchBox.js +++ b/app/containers/SearchBox.js @@ -5,6 +5,7 @@ import PropTypes from 'prop-types'; import I18n from '../i18n'; import { isIOS } from '../utils/deviceInfo'; import { CustomIcon } from '../lib/Icons'; +import sharedStyles from '../views/Styles'; const styles = StyleSheet.create({ container: { @@ -28,7 +29,8 @@ const styles = StyleSheet.create({ fontSize: 17, marginLeft: 8, paddingTop: 0, - paddingBottom: 0 + paddingBottom: 0, + ...sharedStyles.textRegular } }); diff --git a/app/containers/Status/index.js b/app/containers/Status/index.js index 9951eebf4..c1421ba76 100644 --- a/app/containers/Status/index.js +++ b/app/containers/Status/index.js @@ -4,28 +4,16 @@ import { connect } from 'react-redux'; import { ViewPropTypes } from 'react-native'; import Status from './Status'; +import database, { safeAddListener } from '../../lib/realm'; -@connect((state, ownProps) => { - if (state.login.user && ownProps.id === state.login.user.id) { - return { - status: state.login.user && state.login.user.status, - offline: !state.meteor.connected - }; - } - - const user = state.activeUsers[ownProps.id]; - return { - status: (user && user.status) || 'offline' - }; -}) - +@connect(state => ({ + offline: !state.meteor.connected +})) export default class StatusContainer extends React.PureComponent { static propTypes = { - // id is a prop, but it's used only inside @connect to find for current status - id: PropTypes.string, // eslint-disable-line + id: PropTypes.string, style: ViewPropTypes.style, size: PropTypes.number, - status: PropTypes.string, offline: PropTypes.bool }; @@ -33,12 +21,32 @@ export default class StatusContainer extends React.PureComponent { size: 16 } + constructor(props) { + super(props); + this.user = database.memoryDatabase.objects('activeUsers').filtered('id == $0', props.id); + this.state = { + user: this.user[0] || {} + }; + safeAddListener(this.user, this.updateState); + } + + componentWillUnmount() { + this.user.removeAllListeners(); + } + get status() { - const { offline, status } = this.props; - if (offline) { + const { user } = this.state; + const { offline } = this.props; + if (offline || !user) { return 'offline'; } - return status; + return user.status || 'offline'; + } + + updateState = () => { + if (this.user.length) { + this.setState({ user: this.user[0] }); + } } render() { diff --git a/app/containers/StatusBar.js b/app/containers/StatusBar.js index f1e110172..9e3a3874d 100644 --- a/app/containers/StatusBar.js +++ b/app/containers/StatusBar.js @@ -3,13 +3,13 @@ import { StatusBar as StatusBarRN } from 'react-native'; import PropTypes from 'prop-types'; import { isIOS } from '../utils/deviceInfo'; -import { HEADER_BACKGROUND } from '../constants/colors'; +import { HEADER_BACKGROUND, COLOR_WHITE } from '../constants/colors'; const HEADER_BAR_STYLE = isIOS ? 'dark-content' : 'light-content'; const StatusBar = React.memo(({ light }) => { if (light) { - return ; + return ; } return ; }); diff --git a/app/containers/TextInput.js b/app/containers/TextInput.js index 6237a6871..99c091f32 100644 --- a/app/containers/TextInput.js +++ b/app/containers/TextInput.js @@ -6,7 +6,9 @@ import PropTypes from 'prop-types'; import { BorderlessButton } from 'react-native-gesture-handler'; import sharedStyles from '../views/Styles'; -import { COLOR_DANGER, COLOR_TEXT } from '../constants/colors'; +import { + COLOR_DANGER, COLOR_TEXT_DESCRIPTION, COLOR_TEXT, COLOR_BORDER +} from '../constants/colors'; import { CustomIcon } from '../lib/Icons'; const styles = StyleSheet.create({ @@ -15,22 +17,21 @@ const styles = StyleSheet.create({ }, label: { marginBottom: 10, - color: COLOR_TEXT, fontSize: 14, - fontWeight: '700' + ...sharedStyles.textSemibold, + ...sharedStyles.textColorNormal }, input: { ...sharedStyles.textRegular, + ...sharedStyles.textColorNormal, height: 48, - fontSize: 17, - color: '#9EA2A8', - letterSpacing: 0, + fontSize: 16, paddingLeft: 14, paddingRight: 14, - borderWidth: 1.5, + borderWidth: 1, borderRadius: 2, backgroundColor: 'white', - borderColor: '#E7EBF2' + borderColor: COLOR_BORDER }, inputIconLeft: { paddingLeft: 45 @@ -59,10 +60,10 @@ const styles = StyleSheet.create({ right: 15 }, icon: { - color: '#2F343D' + color: COLOR_TEXT }, password: { - color: '#9ea2a8' + color: COLOR_TEXT_DESCRIPTION } }); @@ -144,7 +145,7 @@ export default class RCTextInput extends React.PureComponent { testID={testID} accessibilityLabel={placeholder} placeholder={placeholder} - placeholderTextColor='#9ea2a8' + placeholderTextColor={COLOR_TEXT_DESCRIPTION} contentDescription={placeholder} {...inputProps} /> diff --git a/app/containers/message/Audio.js b/app/containers/message/Audio.js index 3537b66c0..a9cf55389 100644 --- a/app/containers/message/Audio.js +++ b/app/containers/message/Audio.js @@ -6,11 +6,13 @@ import { import Video from 'react-native-video'; import Slider from 'react-native-slider'; import moment from 'moment'; -import { BorderlessButton } from 'react-native-gesture-handler'; import equal from 'deep-equal'; +import Touchable from 'react-native-platform-touchable'; import Markdown from './Markdown'; import { CustomIcon } from '../../lib/Icons'; +import sharedStyles from '../../views/Styles'; +import { COLOR_BACKGROUND_CONTAINER, COLOR_BORDER, COLOR_PRIMARY } from '../../constants/colors'; const styles = StyleSheet.create({ audioContainer: { @@ -18,35 +20,42 @@ const styles = StyleSheet.create({ flexDirection: 'row', alignItems: 'center', height: 56, - backgroundColor: '#f7f8fa', + backgroundColor: COLOR_BACKGROUND_CONTAINER, + borderColor: COLOR_BORDER, + borderWidth: 1, borderRadius: 4, - marginBottom: 10 + marginBottom: 6 }, playPauseButton: { - width: 56, + marginHorizontal: 10, alignItems: 'center', backgroundColor: 'transparent' }, playPauseImage: { - color: '#1D74F5' + color: COLOR_PRIMARY }, slider: { - flex: 1, - marginRight: 10 + flex: 1 }, duration: { - marginRight: 16, + marginHorizontal: 12, fontSize: 14, - fontWeight: '500', - color: '#54585e' + ...sharedStyles.textColorNormal, + ...sharedStyles.textRegular }, thumbStyle: { width: 12, height: 12 + }, + trackStyle: { + height: 2 } }); const formatTime = seconds => moment.utc(seconds * 1000).format('mm:ss'); +const BUTTON_HIT_SLOP = { + top: 12, right: 12, bottom: 12, left: 12 +}; export default class Audio extends React.Component { static propTypes = { @@ -93,30 +102,30 @@ export default class Audio extends React.Component { return false; } - onLoad(data) { + onLoad = (data) => { this.setState({ duration: data.duration > 0 ? data.duration : 0 }); } - onProgress(data) { + onProgress = (data) => { const { duration } = this.state; if (data.currentTime <= duration) { this.setState({ currentTime: data.currentTime }); } } - onEnd() { + onEnd = () => { this.setState({ paused: true, currentTime: 0 }); requestAnimationFrame(() => { this.player.seek(0); }); } - getDuration() { + getDuration = () => { const { duration } = this.state; return formatTime(duration); } - togglePlayPause() { + togglePlayPause = () => { const { paused } = this.state; this.setState({ paused: !paused }); } @@ -148,16 +157,18 @@ export default class Audio extends React.Component { paused={paused} repeat={false} /> - this.togglePlayPause()} + onPress={this.togglePlayPause} + hitSlop={BUTTON_HIT_SLOP} + background={Touchable.SelectableBackgroundBorderless()} > { paused - ? - : + ? + : } - + this.setState({ currentTime: value })} thumbStyle={styles.thumbStyle} + trackStyle={styles.trackStyle} /> {this.getDuration()} , diff --git a/app/containers/message/Image.js b/app/containers/message/Image.js index c9eea974c..5ed7da083 100644 --- a/app/containers/message/Image.js +++ b/app/containers/message/Image.js @@ -1,8 +1,8 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import FastImage from 'react-native-fast-image'; -import { RectButton } from 'react-native-gesture-handler'; import equal from 'deep-equal'; +import Touchable from 'react-native-platform-touchable'; import PhotoModal from './PhotoModal'; import Markdown from './Markdown'; @@ -36,7 +36,7 @@ export default class extends Component { return false; } - onPressButton() { + onPressButton = () => { this.setState({ modalVisible: true }); @@ -58,7 +58,7 @@ export default class extends Component { render() { const { modalVisible, isPressed } = this.state; const { baseUrl, file, user } = this.props; - const img = `${ baseUrl }${ file.image_url }?rc_uid=${ user.id }&rc_token=${ user.token }`; + const img = file.image_url.includes('http') ? file.image_url : `${ baseUrl }${ file.image_url }?rc_uid=${ user.id }&rc_token=${ user.token }`; if (!img) { return null; @@ -66,20 +66,21 @@ export default class extends Component { return ( [ - this.onPressButton()} - onActiveStateChange={this.isPressed} + onPress={this.onPressButton} style={styles.imageContainer} - underlayColor='#fff' + background={Touchable.Ripple('#fff')} > - - {this.getDescription()} - , + + + {this.getDescription()} + + , text.replace( (match, url, title) => `[${ title }](${ url })` ); -const codeFontFamily = Platform.select({ - ios: { fontFamily: 'Courier New' }, - android: { fontFamily: 'monospace' } -}); - -export default class Markdown extends React.Component { - shouldComponentUpdate(nextProps) { - const { msg } = this.props; - return nextProps.msg !== msg; +const Markdown = React.memo(({ + msg, customEmojis, style, rules, baseUrl, username, edited, numberOfLines +}) => { + if (!msg) { + return null; } - - render() { - const { - msg, customEmojis, style, rules, baseUrl, username, edited - } = this.props; - if (!msg) { - return null; - } - let m = formatText(msg); + let m = formatText(msg); + if (m) { m = emojify(m, { output: 'unicode' }); - m = m.replace(/^\[([^\]]*)\]\(([^)]*)\)/, '').trim(); - return ( - ( - // eslint-disable-next-line - - {children} - {edited ? (edited) : null} - - ), - mention: (node) => { - const { content, key } = node; - let mentionStyle = styles.mention; - if (content === 'all' || content === 'here') { - mentionStyle = { - ...mentionStyle, - ...styles.mentionAll - }; - } else if (content === username) { - mentionStyle = { - ...mentionStyle, - ...styles.mentionLoggedUser - }; - } - return ( - -  {content}  - - ); - }, - hashtag: node => ( - -  #{node.content}  - - ), - emoji: (node) => { - if (node.children && node.children.length && node.children[0].content) { - const { content } = node.children[0]; - const emojiExtension = customEmojis[content]; - if (emojiExtension) { - const emoji = { extension: emojiExtension, content }; - return ; - } - return :{content}:; - } - return null; - }, - hardbreak: () => null, - blocklink: () => null, - image: node => ( - - ), - ...rules - }} - style={{ - paragraph: styles.paragraph, - text: { - color: '#0C0D0F', - fontSize: 16, - letterSpacing: 0.1 - }, - codeInline: { - ...codeFontFamily, - borderWidth: 1, - backgroundColor: '#f8f8f8', - borderRadius: 4 - }, - codeBlock: { - ...codeFontFamily, - backgroundColor: '#f8f8f8', - borderColor: '#cccccc', - borderWidth: 1, - borderRadius: 4, - padding: 4 - }, - link: { - color: '#1D74F5' - }, - ...style - }} - plugins={[ - new PluginContainer(MarkdownFlowdock), - new PluginContainer(MarkdownEmojiPlugin) - ]} - >{m} - - ); } -} + m = m.replace(/^\[([^\]]*)\]\(([^)]*)\)/, '').trim(); + if (numberOfLines > 0) { + m = m.replace(/[\n]+/g, '\n').trim(); + } + return ( + ( + // eslint-disable-next-line + + {children} + {edited ? (edited) : null} + + ), + mention: (node) => { + const { content, key } = node; + let mentionStyle = styles.mention; + if (content === 'all' || content === 'here') { + mentionStyle = { + ...mentionStyle, + ...styles.mentionAll + }; + } else if (content === username) { + mentionStyle = { + ...mentionStyle, + ...styles.mentionLoggedUser + }; + } + return ( + +  {content}  + + ); + }, + hashtag: node => ( + +  #{node.content}  + + ), + emoji: (node) => { + if (node.children && node.children.length && node.children[0].content) { + const { content } = node.children[0]; + const emojiExtension = customEmojis[content]; + if (emojiExtension) { + const emoji = { extension: emojiExtension, content }; + return ; + } + return :{content}:; + } + return null; + }, + hardbreak: () => null, + blocklink: () => null, + image: node => ( + + ), + ...rules + }} + style={{ + paragraph: styles.paragraph, + text: styles.text, + codeInline: styles.codeInline, + codeBlock: styles.codeBlock, + link: styles.link, + ...style + }} + plugins={[ + new PluginContainer(MarkdownFlowdock), + new PluginContainer(MarkdownEmojiPlugin) + ]} + >{m} + + ); +}, (prevProps, nextProps) => prevProps.msg === nextProps.msg); Markdown.propTypes = { msg: PropTypes.string, @@ -132,5 +106,8 @@ Markdown.propTypes = { customEmojis: PropTypes.object.isRequired, style: PropTypes.any, rules: PropTypes.object, - edited: PropTypes.bool + edited: PropTypes.bool, + numberOfLines: PropTypes.number }; + +export default Markdown; diff --git a/app/containers/message/Message.js b/app/containers/message/Message.js index 940def60d..2ccf337ff 100644 --- a/app/containers/message/Message.js +++ b/app/containers/message/Message.js @@ -5,9 +5,9 @@ import { } from 'react-native'; import moment from 'moment'; import { KeyboardUtils } from 'react-native-keyboard-input'; -import { - State, RectButton, LongPressGestureHandler, BorderlessButton -} from 'react-native-gesture-handler'; +import Touchable from 'react-native-platform-touchable'; +import { emojify } from 'react-emojione'; +import removeMarkdown from 'remove-markdown'; import Image from './Image'; import User from './User'; @@ -23,6 +23,10 @@ import styles from './styles'; import I18n from '../../i18n'; import messagesStatus from '../../constants/messagesStatus'; import { CustomIcon } from '../../lib/Icons'; +import { COLOR_DANGER } from '../../constants/colors'; +import debounce from '../../utils/debounce'; +import DisclosureIndicator from '../DisclosureIndicator'; +import sharedStyles from '../../views/Styles'; const SYSTEM_MESSAGES = [ 'r', @@ -30,6 +34,7 @@ const SYSTEM_MESSAGES = [ 'ru', 'ul', 'uj', + 'ut', 'rm', 'user-muted', 'user-unmuted', @@ -40,7 +45,8 @@ const SYSTEM_MESSAGES = [ 'room_changed_announcement', 'room_changed_topic', 'room_changed_privacy', - 'message_snippeted' + 'message_snippeted', + 'thread-created' ]; const getInfoMessage = ({ @@ -51,6 +57,8 @@ const getInfoMessage = ({ return I18n.t('Message_removed'); } else if (type === 'uj') { return I18n.t('Has_joined_the_channel'); + } else if (type === 'ut') { + return I18n.t('Has_joined_the_conversation'); } else if (type === 'r') { return I18n.t('Room_name_changed', { name: msg, userBy: username }); } else if (type === 'message_pinned') { @@ -82,12 +90,16 @@ const getInfoMessage = ({ } return ''; }; +const BUTTON_HIT_SLOP = { + top: 4, right: 4, bottom: 4, left: 4 +}; export default class Message extends PureComponent { static propTypes = { baseUrl: PropTypes.string.isRequired, customEmojis: PropTypes.object.isRequired, timeFormat: PropTypes.string.isRequired, + customThreadTimeFormat: PropTypes.string, msg: PropTypes.string, user: PropTypes.shape({ id: PropTypes.string.isRequired, @@ -108,6 +120,8 @@ export default class Message extends PureComponent { reactionsModal: PropTypes.bool, type: PropTypes.string, header: PropTypes.bool, + isThreadReply: PropTypes.bool, + isThreadSequential: PropTypes.bool, avatar: PropTypes.string, alias: PropTypes.string, ts: PropTypes.oneOfType([ @@ -124,14 +138,23 @@ export default class Message extends PureComponent { PropTypes.object ]), useRealName: PropTypes.bool, + dcount: PropTypes.number, + dlm: PropTypes.instanceOf(Date), + tmid: PropTypes.string, + tcount: PropTypes.number, + tlm: PropTypes.instanceOf(Date), + tmsg: PropTypes.string, // methods closeReactions: PropTypes.func, onErrorPress: PropTypes.func, onLongPress: PropTypes.func, onReactionLongPress: PropTypes.func, onReactionPress: PropTypes.func, + onDiscussionPress: PropTypes.func, + onThreadPress: PropTypes.func, replyBroadcast: PropTypes.func, - toggleReactionPicker: PropTypes.func + toggleReactionPicker: PropTypes.func, + fetchThreadName: PropTypes.func } static defaultProps = { @@ -143,9 +166,14 @@ export default class Message extends PureComponent { onLongPress: () => {} } - onPress = () => { + onPress = debounce(() => { KeyboardUtils.dismiss(); - } + + const { onThreadPress, tlm, tmid } = this.props; + if ((tlm || tmid) && onThreadPress) { + onThreadPress(); + } + }, 300, true) onLongPress = () => { const { archived, onLongPress } = this.props; @@ -155,6 +183,32 @@ export default class Message extends PureComponent { onLongPress(); } + formatLastMessage = (lm) => { + const { customThreadTimeFormat } = this.props; + if (customThreadTimeFormat) { + return moment(lm).format(customThreadTimeFormat); + } + return lm ? moment(lm).calendar(null, { + lastDay: `[${ I18n.t('Yesterday') }]`, + sameDay: 'h:mm A', + lastWeek: 'dddd', + sameElse: 'MMM D' + }) : null; + } + + formatMessageCount = (count, type) => { + const discussion = type === 'discussion'; + let text = discussion ? I18n.t('No_messages_yet') : null; + if (count === 1) { + text = `${ count } ${ discussion ? I18n.t('message') : I18n.t('reply') }`; + } else if (count > 1 && count < 1000) { + text = `${ count } ${ discussion ? I18n.t('messages') : I18n.t('replies') }`; + } else if (count > 999) { + text = `+999 ${ discussion ? I18n.t('messages') : I18n.t('replies') }`; + } + return text; + } + isInfoMessage = () => { const { type } = this.props; return SYSTEM_MESSAGES.includes(type); @@ -180,20 +234,21 @@ export default class Message extends PureComponent { return status === messagesStatus.ERROR; } - renderAvatar = () => { + renderAvatar = (small = false) => { const { header, avatar, author, baseUrl, user } = this.props; if (header) { return ( ); } @@ -223,10 +278,25 @@ export default class Message extends PureComponent { if (this.isInfoMessage()) { return {getInfoMessage({ ...this.props })}; } + const { - customEmojis, msg, baseUrl, user, edited + customEmojis, msg, baseUrl, user, edited, tmid } = this.props; - return ; + + if (tmid && !msg) { + return {I18n.t('Sent_an_attachment')}; + } + + return ( + + ); } renderAttachment() { @@ -254,13 +324,13 @@ export default class Message extends PureComponent { } renderUrl = () => { - const { urls } = this.props; + const { urls, user, baseUrl } = this.props; if (urls.length === 0) { return null; } return urls.map((url, index) => ( - + )); } @@ -270,9 +340,9 @@ export default class Message extends PureComponent { } const { onErrorPress } = this.props; return ( - - - + + + ); } @@ -281,31 +351,27 @@ export default class Message extends PureComponent { user, onReactionLongPress, onReactionPress, customEmojis, baseUrl } = this.props; const reacted = reaction.usernames.findIndex(item => item.value === user.username) !== -1; - const underlayColor = reacted ? '#fff' : '#e1e5e8'; return ( - onReactionPress(reaction.emoji)} + onLongPress={onReactionLongPress} key={reaction.emoji} - onHandlerStateChange={({ nativeEvent }) => nativeEvent.state === State.ACTIVE && onReactionLongPress()} + testID={`message-reaction-${ reaction.emoji }`} + style={[styles.reactionButton, reacted && styles.reactionButtonReacted]} + background={Touchable.Ripple('#fff')} + hitSlop={BUTTON_HIT_SLOP} > - onReactionPress(reaction.emoji)} - testID={`message-reaction-${ reaction.emoji }`} - style={[styles.reactionButton, reacted && { backgroundColor: '#e8f2ff' }]} - activeOpacity={0.8} - underlayColor={underlayColor} - > - - - { reaction.usernames.length } - - - + + + { reaction.usernames.length } + + ); } @@ -317,18 +383,18 @@ export default class Message extends PureComponent { return ( {reactions.map(this.renderReaction)} - - + ); } @@ -337,23 +403,176 @@ export default class Message extends PureComponent { const { broadcast, replyBroadcast } = this.props; if (broadcast && !this.isOwn()) { return ( - - - {I18n.t('Reply')} - + + + + + {I18n.t('Reply')} + + + ); } return null; } + renderDiscussion = () => { + const { + msg, dcount, dlm, onDiscussionPress + } = this.props; + const time = this.formatLastMessage(dlm); + const buttonText = this.formatMessageCount(dcount, 'discussion'); + return ( + + {I18n.t('Started_discussion')} + {msg} + + + + + {buttonText} + + + {time} + + + ); + } + + renderThread = () => { + const { + tcount, tlm, onThreadPress, msg + } = this.props; + + if (!tlm) { + return null; + } + + const time = this.formatLastMessage(tlm); + const buttonText = this.formatMessageCount(tcount, 'thread'); + return ( + + + + + {buttonText} + + + {time} + + ); + } + + renderRepliedThread = () => { + const { + tmid, tmsg, header, fetchThreadName + } = this.props; + if (!tmid || !header || this.isTemp()) { + return null; + } + + if (!tmsg) { + fetchThreadName(tmid); + return null; + } + + let msg = emojify(tmsg, { output: 'unicode' }); + msg = removeMarkdown(msg); + + return ( + + + {msg} + + + ); + } + + renderInner = () => { + const { type } = this.props; + if (type === 'discussion-created') { + return ( + + {this.renderUsername()} + {this.renderDiscussion()} + + ); + } + return ( + + {this.renderUsername()} + {this.renderContent()} + {this.renderAttachment()} + {this.renderUrl()} + {this.renderThread()} + {this.renderReactions()} + {this.renderBroadcastReply()} + + ); + } + + renderMessage = () => { + const { header, isThreadReply, isThreadSequential } = this.props; + + if (isThreadReply || isThreadSequential || this.isInfoMessage()) { + const thread = isThreadReply ? this.renderRepliedThread() : null; + return ( + + {thread} + + {this.renderAvatar(true)} + + {this.renderContent()} + + + + ); + } + return ( + + {this.renderAvatar()} + + {this.renderInner()} + + + ); + } + render() { const { - editing, style, header, reactionsModal, closeReactions, msg, ts, reactions, author, user, timeFormat, customEmojis, baseUrl + editing, style, reactionsModal, closeReactions, msg, ts, reactions, author, user, timeFormat, customEmojis, baseUrl } = this.props; const accessibilityLabel = I18n.t('Message_accessibility', { user: author.username, time: moment(ts).format(timeFormat), message: msg }); @@ -365,28 +584,10 @@ export default class Message extends PureComponent { onPress={this.onPress} > - - {this.renderAvatar()} - - {this.renderUsername()} - {this.renderContent()} - {this.renderAttachment()} - {this.renderUrl()} - {this.renderReactions()} - {this.renderBroadcastReply()} - - + {this.renderMessage()} {reactionsModal ? ( { - if (!(attachment.author_icon || attachment.author_name || attachment.ts)) { + if (!attachment.author_name) { return null; } return ( @@ -121,7 +132,7 @@ const Reply = ({ {attachment.fields.map(field => ( {field.title} - {field.value} + {field.value} ))} @@ -129,18 +140,17 @@ const Reply = ({ }; return ( - onPress(attachment, baseUrl, user)} style={[styles.button, index > 0 && styles.marginTop]} - activeOpacity={0.5} - underlayColor='#fff' + background={Touchable.Ripple('#fff')} > {renderTitle()} {renderText()} {renderFields()} - + ); }; diff --git a/app/containers/message/Url.js b/app/containers/message/Url.js index 7767d2e88..e0ae7d4ec 100644 --- a/app/containers/message/Url.js +++ b/app/containers/message/Url.js @@ -2,9 +2,14 @@ import React from 'react'; import { View, Text, StyleSheet } from 'react-native'; import PropTypes from 'prop-types'; import FastImage from 'react-native-fast-image'; -import { RectButton } from 'react-native-gesture-handler'; +import Touchable from 'react-native-platform-touchable'; +import isEqual from 'lodash/isEqual'; import openLink from '../../utils/openLink'; +import sharedStyles from '../../views/Styles'; +import { + COLOR_BACKGROUND_CONTAINER, COLOR_BORDER, COLOR_PRIMARY +} from '../../constants/colors'; const styles = StyleSheet.create({ button: { @@ -14,8 +19,8 @@ const styles = StyleSheet.create({ flex: 1, flexDirection: 'column', borderRadius: 4, - backgroundColor: '#F3F4F5', - borderColor: '#F3F4F5', + backgroundColor: COLOR_BACKGROUND_CONTAINER, + borderColor: COLOR_BORDER, borderWidth: 1 }, textContainer: { @@ -26,14 +31,14 @@ const styles = StyleSheet.create({ alignItems: 'flex-start' }, title: { - fontWeight: '500', - color: '#1D74F5', - fontSize: 16 + color: COLOR_PRIMARY, + fontSize: 16, + ...sharedStyles.textMedium }, description: { - marginTop: 5, fontSize: 16, - color: '#0C0D0F' + ...sharedStyles.textColorDescription, + ...sharedStyles.textRegular }, marginTop: { marginTop: 4 @@ -46,32 +51,60 @@ const styles = StyleSheet.create({ } }); -const onPress = (url) => { - openLink(url); -}; -const Url = ({ url, index }) => { +const UrlImage = React.memo(({ image, user, baseUrl }) => { + if (!image) { + return null; + } + image = image.includes('http') ? image : `${ baseUrl }/${ image }?rc_uid=${ user.id }&rc_token=${ user.token }`; + return ; +}); + +const UrlContent = React.memo(({ title, description }) => ( + + {title ? {title} : null} + {description ? {description} : null} + +)); + +const Url = React.memo(({ + url, index, user, baseUrl +}) => { if (!url) { return null; } + + const onPress = () => openLink(url.url); + return ( - onPress(url.url)} + 0 && styles.marginTop, styles.container]} - activeOpacity={0.5} - underlayColor='#fff' + background={Touchable.Ripple('#fff')} > - {url.image ? : null} - - {url.title} - {url.description} - - + + + + + ); +}, (oldProps, newProps) => isEqual(oldProps.url, newProps.url)); + +UrlImage.propTypes = { + image: PropTypes.string, + user: PropTypes.object, + baseUrl: PropTypes.string +}; + +UrlContent.propTypes = { + title: PropTypes.string, + description: PropTypes.string }; Url.propTypes = { url: PropTypes.object.isRequired, - index: PropTypes.number + index: PropTypes.number, + user: PropTypes.object, + baseUrl: PropTypes.string }; export default Url; diff --git a/app/containers/message/User.js b/app/containers/message/User.js index 39f310466..654af4530 100644 --- a/app/containers/message/User.js +++ b/app/containers/message/User.js @@ -3,18 +3,20 @@ import PropTypes from 'prop-types'; import { View, Text, StyleSheet } from 'react-native'; import moment from 'moment'; +import sharedStyles from '../../views/Styles'; +import messageStyles from './styles'; + const styles = StyleSheet.create({ container: { flex: 1, flexDirection: 'row', - alignItems: 'center', - marginBottom: 2 + alignItems: 'center' }, username: { - color: '#0C0D0F', - fontWeight: '600', fontSize: 16, - lineHeight: 22 + lineHeight: 22, + ...sharedStyles.textColorNormal, + ...sharedStyles.textMedium }, titleContainer: { flex: 1, @@ -23,16 +25,8 @@ const styles = StyleSheet.create({ }, alias: { fontSize: 14, - color: '#9EA2A8', - paddingLeft: 6, - lineHeight: 16 - }, - time: { - fontSize: 12, - color: '#9EA2A8', - paddingLeft: 10, - fontWeight: '300', - lineHeight: 16 + ...sharedStyles.textColorDescription, + ...sharedStyles.textRegular } }); @@ -58,18 +52,18 @@ export default class User extends React.PureComponent { extraStyle.opacity = 0.3; } - const aliasUsername = alias ? (@{username}) : null; + const aliasUsername = alias ? ( @{username}) : null; const time = moment(ts).format(timeFormat); return ( - + {alias || username} + {aliasUsername} - {aliasUsername} - {time} + {time} ); } diff --git a/app/containers/message/Video.js b/app/containers/message/Video.js index d4c570bd4..073975926 100644 --- a/app/containers/message/Video.js +++ b/app/containers/message/Video.js @@ -3,7 +3,7 @@ import PropTypes from 'prop-types'; import { StyleSheet, View } from 'react-native'; import Modal from 'react-native-modal'; import VideoPlayer from 'react-native-video-controls'; -import { RectButton } from 'react-native-gesture-handler'; +import Touchable from 'react-native-platform-touchable'; import Markdown from './Markdown'; import openLink from '../../utils/openLink'; @@ -19,7 +19,7 @@ const styles = StyleSheet.create({ borderRadius: 4, height: 150, backgroundColor: '#1f2329', - marginBottom: 10, + marginBottom: 6, alignItems: 'center', justifyContent: 'center' }, @@ -48,13 +48,13 @@ export default class Video extends React.PureComponent { return `${ baseUrl }${ video_url }?rc_uid=${ user.id }&rc_token=${ user.token }`; } - toggleModal() { + toggleModal = () => { this.setState(prevState => ({ isVisible: !prevState.isVisible })); } - open() { + open = () => { const { file } = this.props; if (isTypeSupported(file.video_type)) { return this.toggleModal(); @@ -76,18 +76,17 @@ export default class Video extends React.PureComponent { return ( [ - this.open()} - activeOpacity={0.5} - underlayColor='#fff' + background={Touchable.Ripple('#fff')} > - + , this.toggleModal()} + onBack={this.toggleModal} disableVolume /> diff --git a/app/containers/message/index.js b/app/containers/message/index.js index 4da77d2ae..1220974d7 100644 --- a/app/containers/message/index.js +++ b/app/containers/message/index.js @@ -11,6 +11,7 @@ import { replyBroadcast as replyBroadcastAction } from '../../actions/messages'; import { vibrate } from '../../utils/vibration'; +import debounce from '../../utils/debounce'; @connect(state => ({ baseUrl: state.settings.Site_Url || state.server ? state.server.server : '', @@ -27,15 +28,14 @@ import { vibrate } from '../../utils/vibration'; export default class MessageContainer extends React.Component { static propTypes = { item: PropTypes.object.isRequired, - reactions: PropTypes.any.isRequired, user: PropTypes.shape({ id: PropTypes.string.isRequired, username: PropTypes.string.isRequired, token: PropTypes.string.isRequired }), customTimeFormat: PropTypes.string, + customThreadTimeFormat: PropTypes.string, style: ViewPropTypes.style, - status: PropTypes.number, archived: PropTypes.bool, broadcast: PropTypes.bool, previousItem: PropTypes.object, @@ -47,13 +47,17 @@ export default class MessageContainer extends React.Component { Message_TimeFormat: PropTypes.string, editingMessage: PropTypes.object, useRealName: PropTypes.bool, + status: PropTypes.number, + navigation: PropTypes.object, // methods - props onLongPress: PropTypes.func, onReactionPress: PropTypes.func, + onDiscussionPress: PropTypes.func, // methods - redux errorActionsShow: PropTypes.func, replyBroadcast: PropTypes.func, - toggleReactionPicker: PropTypes.func + toggleReactionPicker: PropTypes.func, + fetchThreadName: PropTypes.func } static defaultProps = { @@ -72,7 +76,7 @@ export default class MessageContainer extends React.Component { shouldComponentUpdate(nextProps, nextState) { const { reactionsModal } = this.state; const { - status, reactions, broadcast, _updatedAt, editingMessage, item + status, editingMessage, item, _updatedAt, navigation } = this.props; if (reactionsModal !== nextState.reactionsModal) { @@ -81,27 +85,20 @@ export default class MessageContainer extends React.Component { if (status !== nextProps.status) { return true; } - // eslint-disable-next-line - if (!!_updatedAt ^ !!nextProps._updatedAt) { + if (item.tmsg !== nextProps.item.tmsg) { return true; } - if (!equal(reactions, nextProps.reactions)) { - return true; - } - if (broadcast !== nextProps.broadcast) { - return true; - } - if (!equal(editingMessage, nextProps.editingMessage)) { + + if (navigation.isFocused() && !equal(editingMessage, nextProps.editingMessage)) { if (nextProps.editingMessage && nextProps.editingMessage._id === item._id) { return true; } else if (!nextProps.editingMessage._id !== item._id && editingMessage._id === item._id) { return true; } } - return _updatedAt.toGMTString() !== nextProps._updatedAt.toGMTString(); + return _updatedAt.toISOString() !== nextProps._updatedAt.toISOString(); } - onLongPress = () => { const { onLongPress } = this.props; onLongPress(this.parseMessage()); @@ -117,12 +114,30 @@ export default class MessageContainer extends React.Component { onReactionPress(emoji, item._id); } - onReactionLongPress = () => { this.setState({ reactionsModal: true }); vibrate(); } + onDiscussionPress = () => { + const { onDiscussionPress, item } = this.props; + onDiscussionPress(item); + } + + onThreadPress = debounce(() => { + const { navigation, item } = this.props; + if (item.tmid) { + navigation.push('RoomView', { + rid: item.rid, tmid: item.tmid, name: item.tmsg, t: 'thread' + }); + } else if (item.tlm) { + const title = item.msg || (item.attachments && item.attachments.length && item.attachments[0].title); + navigation.push('RoomView', { + rid: item.rid, tmid: item._id, name: title, t: 'thread' + }); + } + }, 1000, true) + get timeFormat() { const { customTimeFormat, Message_TimeFormat } = this.props; return customTimeFormat || Message_TimeFormat; @@ -141,12 +156,33 @@ export default class MessageContainer extends React.Component { && (previousItem.u.username === item.u.username) && !(previousItem.groupable === false || item.groupable === false || broadcast === true) && (item.ts - previousItem.ts < Message_GroupingPeriod * 1000) + && (previousItem.tmid === item.tmid) )) { return false; } return true; } + isThreadReply = () => { + const { + item, previousItem + } = this.props; + if (previousItem && item.tmid && (previousItem.tmid !== item.tmid) && (previousItem._id !== item.tmid)) { + return true; + } + return false; + } + + isThreadSequential = () => { + const { + item, previousItem + } = this.props; + if (previousItem && item.tmid && ((previousItem.tmid === item.tmid) || (previousItem._id === item.tmid))) { + return true; + } + return false; + } + parseMessage = () => { const { item } = this.props; return JSON.parse(JSON.stringify(item)); @@ -165,14 +201,15 @@ export default class MessageContainer extends React.Component { render() { const { reactionsModal } = this.state; const { - item, editingMessage, user, style, archived, baseUrl, customEmojis, useRealName, broadcast + item, editingMessage, user, style, archived, baseUrl, customEmojis, useRealName, broadcast, fetchThreadName, customThreadTimeFormat } = this.props; const { - msg, ts, attachments, urls, reactions, t, status, avatar, u, alias, editedBy, role + _id, msg, ts, attachments, urls, reactions, t, status, avatar, u, alias, editedBy, role, drid, dcount, dlm, tmid, tcount, tlm, tmsg } = item; const isEditing = editingMessage._id === item._id; return ( ); } diff --git a/app/containers/message/styles.js b/app/containers/message/styles.js index a3ae5f7b9..8bb283c19 100644 --- a/app/containers/message/styles.js +++ b/app/containers/message/styles.js @@ -1,15 +1,24 @@ -import { StyleSheet } from 'react-native'; +import { StyleSheet, Platform } from 'react-native'; + +import sharedStyles from '../../views/Styles'; +import { + COLOR_BORDER, COLOR_PRIMARY, COLOR_WHITE, COLOR_BACKGROUND_CONTAINER +} from '../../constants/colors'; + +const codeFontFamily = Platform.select({ + ios: { fontFamily: 'Courier New' }, + android: { fontFamily: 'monospace' } +}); export default StyleSheet.create({ root: { flexDirection: 'row' }, container: { - paddingVertical: 5, + paddingVertical: 4, width: '100%', - paddingHorizontal: 15, + paddingHorizontal: 14, flexDirection: 'column', - transform: [{ scaleY: -1 }], flex: 1 }, messageContent: { @@ -26,10 +35,16 @@ export default StyleSheet.create({ flexDirection: 'row', flex: 1 }, + text: { + fontSize: 16, + ...sharedStyles.textColorNormal, + ...sharedStyles.textRegular + }, textInfo: { fontStyle: 'italic', - color: '#a0a0a0', - fontSize: 16 + fontSize: 16, + ...sharedStyles.textColorDescription, + ...sharedStyles.textRegular }, editing: { backgroundColor: '#fff5df' @@ -39,38 +54,41 @@ export default StyleSheet.create({ height: 20 }, temp: { opacity: 0.3 }, - marginBottom: { - marginBottom: 10 + marginTop: { + marginTop: 6 }, reactionsContainer: { flexDirection: 'row', flexWrap: 'wrap', - marginTop: 10 + marginTop: 6 }, reactionButton: { - marginRight: 10, - marginBottom: 10, + marginRight: 6, + marginBottom: 6, borderRadius: 2 }, + reactionButtonReacted: { + backgroundColor: '#e8f2ff' + }, reactionContainer: { flexDirection: 'row', justifyContent: 'center', alignItems: 'center', - borderRadius: 4, - borderWidth: 1.5, - borderColor: '#e1e5e8', + borderRadius: 2, + borderWidth: 1, + borderColor: COLOR_BORDER, height: 28, - minWidth: 46 + minWidth: 46.3 }, reactedContainer: { - borderColor: '#1d74f580' + borderColor: COLOR_PRIMARY }, reactionCount: { fontSize: 14, marginLeft: 3, marginRight: 8.5, - fontWeight: '600', - color: '#1D74F5' + color: COLOR_PRIMARY, + ...sharedStyles.textSemibold }, reactionEmoji: { fontSize: 13, @@ -82,47 +100,56 @@ export default StyleSheet.create({ marginLeft: 7 }, avatar: { - marginTop: 5 + marginTop: 4 + }, + avatarSmall: { + marginLeft: 16 }, addReaction: { - color: '#1D74F5' + color: COLOR_PRIMARY }, errorButton: { paddingHorizontal: 15, paddingVertical: 5 }, - broadcastButton: { - width: 107, + buttonContainer: { + marginTop: 6, + flexDirection: 'row', + alignItems: 'center' + }, + button: { + paddingHorizontal: 15, height: 44, - marginTop: 15, - flex: 1, flexDirection: 'row', alignItems: 'center', justifyContent: 'center', - backgroundColor: '#1d74f5', - borderRadius: 4 + backgroundColor: COLOR_PRIMARY, + borderRadius: 2 }, - broadcastButtonIcon: { - color: '#fff', - marginRight: 11 + smallButton: { + height: 30 }, - broadcastButtonText: { - color: '#fff', + buttonIcon: { + color: COLOR_WHITE, + marginRight: 6 + }, + buttonText: { + color: COLOR_WHITE, fontSize: 14, - fontWeight: '500' + ...sharedStyles.textMedium }, mention: { + ...sharedStyles.textMedium, color: '#0072FE', - fontWeight: '500', padding: 5, backgroundColor: '#E8F2FF' }, mentionLoggedUser: { - color: '#fff', - backgroundColor: '#1D74F5' + color: COLOR_WHITE, + backgroundColor: COLOR_PRIMARY }, mentionAll: { - color: '#fff', + color: COLOR_WHITE, backgroundColor: '#FF5B5A' }, paragraph: { @@ -136,8 +163,6 @@ export default StyleSheet.create({ imageContainer: { flex: 1, flexDirection: 'column', - borderColor: '#F3F4F5', - borderWidth: 1, borderRadius: 4 }, image: { @@ -145,7 +170,8 @@ export default StyleSheet.create({ maxWidth: 400, minHeight: 200, borderRadius: 4, - marginBottom: 10 + borderColor: COLOR_BORDER, + borderWidth: 1 }, inlineImage: { width: 300, @@ -154,6 +180,60 @@ export default StyleSheet.create({ }, edited: { fontSize: 14, - color: '#9EA2A8' + ...sharedStyles.textColorDescription, + ...sharedStyles.textRegular + }, + codeInline: { + ...sharedStyles.textRegular, + ...codeFontFamily, + borderWidth: 1, + backgroundColor: COLOR_BACKGROUND_CONTAINER, + borderRadius: 4 + }, + codeBlock: { + ...sharedStyles.textRegular, + ...codeFontFamily, + backgroundColor: COLOR_BACKGROUND_CONTAINER, + borderColor: COLOR_BORDER, + borderWidth: 1, + borderRadius: 4, + padding: 4 + }, + link: { + color: COLOR_PRIMARY, + ...sharedStyles.textRegular + }, + startedDiscussion: { + fontStyle: 'italic', + fontSize: 16, + marginBottom: 6, + ...sharedStyles.textColorDescription, + ...sharedStyles.textRegular + }, + time: { + fontSize: 12, + paddingLeft: 10, + lineHeight: 22, + ...sharedStyles.textColorDescription, + ...sharedStyles.textRegular, + fontWeight: '300' + }, + repliedThread: { + flexDirection: 'row', + flex: 1, + alignItems: 'center', + marginTop: 6, + marginBottom: 12 + }, + repliedThreadIcon: { + color: COLOR_PRIMARY, + marginRight: 10, + marginLeft: 16 + }, + repliedThreadName: { + fontSize: 16, + flex: 1, + color: COLOR_PRIMARY, + ...sharedStyles.textRegular } }); diff --git a/app/i18n/index.js b/app/i18n/index.js index 16aae6d33..f6521862e 100644 --- a/app/i18n/index.js +++ b/app/i18n/index.js @@ -5,12 +5,13 @@ import fr from './locales/fr'; import de from './locales/de'; import ptBR from './locales/pt-BR'; import zhCN from './locales/zh-CN'; +import ptPT from './locales/pt-PT'; I18n.fallbacks = true; I18n.defaultLocale = 'en'; I18n.translations = { - en, ru, 'pt-BR': ptBR, 'zh-CN': zhCN, fr, de + en, ru, 'pt-BR': ptBR, 'zh-CN': zhCN, fr, de, 'pt-PT': ptPT }; export default I18n; diff --git a/app/i18n/locales/en.js b/app/i18n/locales/en.js index 4517ded81..334e2c3de 100644 --- a/app/i18n/locales/en.js +++ b/app/i18n/locales/en.js @@ -124,6 +124,7 @@ export default { Connect: 'Connect', Connect_to_a_server: 'Connect to a server', Connected: 'Connected', + connecting_server: 'connecting to server', Connecting: 'Connecting...', Continue_with: 'Continue with', Copied_to_clipboard: 'Copied to clipboard!', @@ -141,6 +142,7 @@ export default { description: 'description', Description: 'Description', Disable_notifications: 'Disable notifications', + Discussions: 'Discussions', Direct_Messages: 'Direct Messages', Dont_Have_An_Account: 'Don\'t have an account?', Do_you_really_want_to_key_this_room_question_mark: 'Do you really want to {{key}} this room?', @@ -158,6 +160,7 @@ export default { File_description: 'File description', File_name: 'File name', Finish_recording: 'Finish recording', + Following_thread: 'Following thread', For_your_security_you_must_enter_your_current_password_to_continue: 'For your security, you must enter your current password to continue', Forgot_my_password: 'Forgot my password', Forgot_password_If_this_email_is_registered: 'If this email is registered, we\'ll send instructions on how to reset your password. If you do not receive an email shortly, please come back and try again.', @@ -166,6 +169,7 @@ export default { Group_by_favorites: 'Group favorites', Group_by_type: 'Group by type', Has_joined_the_channel: 'Has joined the channel', + Has_joined_the_conversation: 'Has joined the conversation', Has_left_the_channel: 'Has left the channel', Invisible: 'Invisible', Invite: 'Invite', @@ -196,6 +200,8 @@ export default { Message_actions: 'Message actions', Message_pinned: 'Message pinned', Message_removed: 'Message removed', + message: 'message', + messages: 'messages', Messages: 'Messages', Microphone_Permission_Message: 'Rocket Chat needs access to your microphone so you can send audio message.', Microphone_Permission: 'Microphone Permission', @@ -215,10 +221,12 @@ export default { No_pinned_messages: 'No pinned messages', No_results_found: 'No results found', No_starred_messages: 'No starred messages', + No_thread_messages: 'No thread messages', No_announcement_provided: 'No announcement provided.', No_description_provided: 'No description provided.', No_topic_provided: 'No topic provided.', No_Message: 'No Message', + No_messages_yet: 'No messages yet', No_Reactions: 'No Reactions', Not_logged: 'Not logged', Nothing_to_save: 'Nothing to save!', @@ -254,6 +262,9 @@ export default { Read_Only: 'Read Only', Register: 'Register', Repeat_Password: 'Repeat Password', + Replied_on: 'Replied on:', + replies: 'replies', + reply: 'reply', Reply: 'Reply', Resend: 'Resend', Reset_password: 'Reset password', @@ -283,6 +294,7 @@ export default { Send: 'Send', Send_audio_message: 'Send audio message', Send_message: 'Send message', + Sent_an_attachment: 'Sent an attachment', Server: 'Server', Servers: 'Servers', Set_username_subtitle: 'The username is used to allow others to mention you in messages', @@ -299,6 +311,7 @@ export default { starred: 'starred', Starred: 'Starred', Start_of_conversation: 'Start of conversation', + Started_discussion: 'Started a discussion:', Submit: 'Submit', Take_a_photo: 'Take a photo', tap_to_change_status: 'tap to change status', @@ -308,6 +321,8 @@ export default { There_was_an_error_while_action: 'There was an error while {{action}}!', This_room_is_blocked: 'This room is blocked', This_room_is_read_only: 'This room is read only', + Thread: 'Thread', + Threads: 'Threads', Timezone: 'Timezone', Toggle_Drawer: 'Toggle_Drawer', topic: 'topic', @@ -318,6 +333,7 @@ export default { unarchive: 'unarchive', UNARCHIVE: 'UNARCHIVE', Unblock_user: 'Unblock user', + Unfollowed_thread: 'Unfollowed thread', Unmute: 'Unmute', unmuted: 'unmuted', Unpin: 'Unpin', @@ -349,7 +365,7 @@ export default { Yesterday: 'Yesterday', You_are_in_preview_mode: 'You are in preview mode', You_are_offline: 'You are offline', - You_can_search_using_RegExp_eg: 'You can search using RegExp. e.g. `/^text$/i`', + You_can_search_using_RegExp_eg: 'You can use RegExp. e.g. `/^text$/i`', You_colon: 'You: ', you_were_mentioned: 'you were mentioned', you: 'you', diff --git a/app/i18n/locales/pt-BR.js b/app/i18n/locales/pt-BR.js index ff4664254..50decbecb 100644 --- a/app/i18n/locales/pt-BR.js +++ b/app/i18n/locales/pt-BR.js @@ -131,6 +131,7 @@ export default { Connect: 'Conectar', Connect_to_a_server: 'Conectar a um servidor', Connected: 'Conectado', + connecting_server: 'conectando no servidor', Connecting: 'Conectando...', Continue_with: 'Entrar com', Copied_to_clipboard: 'Copiado para a área de transferência!', @@ -148,6 +149,7 @@ export default { description: 'descrição', Description: 'Descrição', Disable_notifications: 'Desabilitar notificações', + Discussions: 'Discussões', Direct_Messages: 'Mensagens Diretas', Dont_Have_An_Account: 'Não tem uma conta?', Do_you_really_want_to_key_this_room_question_mark: 'Você quer realmente {{key}} esta sala?', @@ -165,6 +167,7 @@ export default { File_description: 'Descrição do arquivo', File_name: 'Nome do arquivo', Finish_recording: 'Encerrar gravação', + Following_thread: 'Começou a seguir tópico', For_your_security_you_must_enter_your_current_password_to_continue: 'Para sua segurança, você precisa digitar sua senha', Forgot_my_password: 'Esqueci minha senha', Forgot_password_If_this_email_is_registered: 'Se este e-mail estiver cadastrado, enviaremos instruções sobre como redefinir sua senha. Se você não receber um e-mail em breve, volte e tente novamente.', @@ -173,6 +176,7 @@ export default { Group_by_favorites: 'Agrupar favoritos', Group_by_type: 'Agrupar por tipo', Has_joined_the_channel: 'Entrou no canal', + Has_joined_the_conversation: 'Entrou na conversa', Has_left_the_channel: 'Saiu da conversa', Invisible: 'Invisível', Invite: 'Convidar', @@ -200,6 +204,8 @@ export default { Message_actions: 'Ações', Message_pinned: 'Fixou uma mensagem', Message_removed: 'Mensagem removida', + message: 'mensagem', + messages: 'mensagens', Messages: 'Mensagens', Microphone_Permission_Message: 'Rocket Chat precisa de acesso ao seu microfone para enviar mensagens de áudio.', Microphone_Permission: 'Acesso ao Microfone', @@ -218,10 +224,12 @@ export default { No_pinned_messages: 'Não há mensagens fixadas', No_results_found: 'Nenhum resultado encontrado', No_starred_messages: 'Não há mensagens favoritas', + No_thread_messages: 'Não há tópicos', No_announcement_provided: 'Sem anúncio.', No_description_provided: 'Sem descrição.', No_topic_provided: 'Sem tópico.', No_Message: 'Não há mensagens', + No_messages_yet: 'Não há mensagens ainda', No_Reactions: 'Sem reações', Nothing_to_save: 'Nada para salvar!', Notify_active_in_this_room: 'Notificar usuários ativos nesta sala', @@ -256,6 +264,9 @@ export default { Read_Only: 'Somente Leitura', Register: 'Registrar', Repeat_Password: 'Repetir Senha', + Replied_on: 'Respondido em:', + replies: 'respostas', + reply: 'resposta', Reply: 'Responder', Resend: 'Reenviar', Reset_password: 'Resetar senha', @@ -285,6 +296,7 @@ export default { Send: 'Enviar', Send_audio_message: 'Enviar mensagem de áudio', Send_message: 'Enviar mensagem', + Sent_an_attachment: 'Enviou um anexo', Server: 'Servidor', Set_username_subtitle: 'O usuário é utilizado para permitir que você seja mencionado em mensagens', Settings: 'Configurações', @@ -300,6 +312,7 @@ export default { starred: 'favoritou', Starred: 'Mensagens Favoritas', Start_of_conversation: 'Início da conversa', + Started_discussion: 'Iniciou uma discussão:', Submit: 'Enviar', Take_a_photo: 'Tirar uma foto', Terms_of_Service: ' Termos de Serviço ', @@ -307,6 +320,8 @@ export default { There_was_an_error_while_action: 'Aconteceu um erro {{action}}!', This_room_is_blocked: 'Este quarto está bloqueado', This_room_is_read_only: 'Este quarto é apenas de leitura', + Thread: 'Tópico', + Threads: 'Tópicos', Timezone: 'Fuso horário', topic: 'tópico', Topic: 'Tópico', @@ -316,6 +331,7 @@ export default { unarchive: 'desarquivar', UNARCHIVE: 'DESARQUIVAR', Unblock_user: 'Desbloquear usuário', + Unfollowed_thread: 'Parou de seguir tópico', Unmute: 'Permitir que o usuário fale', unmuted: 'permitiu que o usuário fale', Unpin: 'Desafixar Mensagem', @@ -346,7 +362,7 @@ export default { Yesterday: 'Ontem', You_are_in_preview_mode: 'Está é uma prévia do canal', You_are_offline: 'Você está offline', - You_can_search_using_RegExp_eg: 'Você pode pesquisar usando expressões regulares, por exemplo `/^text$/i`', + You_can_search_using_RegExp_eg: 'Você pode usar expressões regulares, por exemplo `/^text$/i`', You_colon: 'Você: ', you_were_mentioned: 'você foi mencionado', you: 'você', diff --git a/app/i18n/locales/pt-PT.js b/app/i18n/locales/pt-PT.js new file mode 100644 index 000000000..f16bc95ac --- /dev/null +++ b/app/i18n/locales/pt-PT.js @@ -0,0 +1,360 @@ +export default { + '1_person_reacted': '1 pessoa reagiu', + '1_user': '1 utilizador', + 'error-action-not-allowed': '{{action}} não é permitida', + 'error-application-not-found': 'Aplicação não encontrada', + 'error-archived-duplicate-name': 'Existe um canal arquivado com o nome {{room_name}}', + 'error-avatar-invalid-url': 'URL de avatar inválido: {{url}}', + 'error-avatar-url-handling': 'Erro ao manipular a configuração de avatar de um URL ({{url}}) para {{username}}', + 'error-cant-invite-for-direct-room': 'Não pode convidar utilizadores para salas de mensagens directas', + 'error-could-not-change-email': 'Não foi possível alterar o e-mail', + 'error-could-not-change-name': 'Não foi possível alterar o nome', + 'error-could-not-change-username': 'Não foi possível alterar o nome de utilizador', + 'error-delete-protected-role': 'Não é possível eliminar uma função protegida', + 'error-department-not-found': 'Departamento não encontrado', + 'error-direct-message-file-upload-not-allowed': 'Partilha de ficheiros não permitido em mensagens diretas', + 'error-duplicate-channel-name': 'Um canal com o nome {{channel_name}} existe', + 'error-email-domain-blacklisted': 'O domínio de e-mail está na lista negra', + 'error-email-send-failed': 'Erro ao tentar enviar e-mail: {{message}}', + 'error-field-unavailable': '{{field}} já está em uso :(', + 'error-file-too-large': 'Ficheiro demasiado grande', + 'error-importer-not-defined': 'O importador não foi definido correctamente, a classe Import está em falta.', + 'error-input-is-not-a-valid-field': '{{input}} não é um {{field}} válido', + 'error-invalid-actionlink': 'Link de acção inválido', + 'error-invalid-arguments': 'Argumentos inválidos', + 'error-invalid-asset': 'Ficheiro inválida', + 'error-invalid-channel': 'Canal inválido.', + 'error-invalid-channel-start-with-chars': 'Canal inválido. Começa por @ ou #', + 'error-invalid-custom-field': 'Campo personalizado inválido', + 'error-invalid-custom-field-name': 'Nome de campo personalizado inválido. Use apenas letras, números, hífens e sublinhados.', + 'error-invalid-date': 'Data inválida fornecida.', + 'error-invalid-description': 'Descrição inválida', + 'error-invalid-domain': 'Domínio inválido', + 'error-invalid-email': 'E-mail inválido {{emai}}', + 'error-invalid-email-address': 'Endereço de e-mail invalido', + 'error-invalid-file-height': 'Altura de ficheiro inválida', + 'error-invalid-file-type': 'Tipo de ficheiro inválido', + 'error-invalid-file-width': 'Largura de ficheiro inválida', + 'error-invalid-from-address': 'Você informou um endereço DE inválido.', + 'error-invalid-integration': 'Integração inválida', + 'error-invalid-message': 'Mensagem inválida', + 'error-invalid-method': 'Método inválido', + 'error-invalid-name': 'Nome inválido', + 'error-invalid-password': 'Palavra-passe inválida', + 'error-invalid-redirectUri': 'redirectUri inválido', + 'error-invalid-role': 'Função inválido', + 'error-invalid-room': 'Sala inválida', + 'error-invalid-room-name': '{{room_name}} não é um nome de sala válido', + 'error-invalid-room-type': '{{type}} não é um tipo de sala válido.', + 'error-invalid-settings': 'Configurações inválidas fornecidas', + 'error-invalid-subscription': 'Subscrição inválida', + 'error-invalid-token': 'Token inválido', + 'error-invalid-triggerWords': 'triggerWords inválido', + 'error-invalid-urls': 'URLs inválidos', + 'error-invalid-user': 'Utilizador inválido', + 'error-invalid-username': 'Nome de utilizador inválido', + 'error-invalid-webhook-response': 'O URL do webhook respondeu com um estado diferente de 200', + 'error-message-deleting-blocked': 'A remoção de mensagens está bloqueada', + 'error-message-editing-blocked': 'A edição de mensagens está bloqueada', + 'error-message-size-exceeded': 'O tamanho da mensagem excede Message_MaxAllowedSize', + 'error-missing-unsubscribe-link': 'Você deve fornecer o link para cancelar a subscrição: [unsubscribe].', + 'error-no-tokens-for-this-user': 'Não há tokens para este utilizador', + 'error-not-allowed': 'Não permitido', + 'error-not-authorized': 'Não autorizado', + 'error-push-disabled': 'Push está desactivado', + 'error-remove-last-owner': 'Este é o último proprietário. Por favor, defina um novo proprietário antes de remover este.', + 'error-role-in-use': 'Não é possível remover função porque está em uso', + 'error-role-name-required': 'Nome da função requerido', + 'error-the-field-is-required': 'O campo {{field}} é obrigatório.', + 'error-too-many-requests': 'Erro, demasiados pedidos. Por favor, diminua a velocidade. Você deve esperar {{seconds}} segundos antes de tentar novamente.', + 'error-user-is-not-activated': 'O utilizador não está activado', + 'error-user-has-no-roles': 'O utilizador não tem funções', + 'error-user-limit-exceeded': 'O número de utilizadores que você está a tentar convidar para #channel_name excede o limite definido pelo administrador', + 'error-user-not-in-room': 'O utilizador não está nesta sala', + 'error-user-registration-custom-field': 'error-user-registration-custom-field', + 'error-user-registration-disabled': 'O registo de utilizadores está desactivado', + 'error-user-registration-secret': 'O registo de utilizadores só é permitido por meio de um URL secreto', + 'error-you-are-last-owner': 'Você é o último proprietário. Por favor, defina novo proprietário antes de sair da sala.', + Actions: 'Acções', + activity: 'actividade', + Activity: 'Actividade', + Add_Reaction: 'Adicionar Reacção', + Add_Server: 'Adicionar Servidor', + Add_user: 'Adicionar utilizador', + Alert: 'Alerta', + alert: 'alerta', + alerts: 'alertas', + All_users_in_the_channel_can_write_new_messages: 'Todos os utilizadores no canal podem escrever novas mensagens', + All: 'Todos', + Allow_Reactions: 'Permitir Reacções', + Alphabetical: 'Alfabética', + and_more: 'e mais', + and: 'e', + announcement: 'anúncio', + Announcement: 'Anúncio', + ARCHIVE: 'ARQUIVAR', + archive: 'arquivar', + are_typing: 'estão a escrever', + Are_you_sure_question_mark: 'Tem a certeza?', + Are_you_sure_you_want_to_leave_the_room: 'Tem certeza de que quer sair da sala {{room}}?', + Authenticating: 'Autenticando', + Avatar_changed_successfully: 'Avatar alterado com sucesso!', + Avatar_Url: 'URL do Avatar', + Away: 'Ausente', + Block_user: 'Bloquear utilizador', + Broadcast_channel_Description: 'Apenas utilizadores autorizados podem escrever novas mensagens, mas os outros utilizadores poderão responder', + Broadcast_Channel: 'Canal de Transmissão', + Busy: 'Ocupado', + By_proceeding_you_are_agreeing: 'Ao prosseguir você concorda com o(s) nosso(s)', + Cancel_editing: 'Cancelar edição', + Cancel_recording: 'Cancelar gravação', + Cancel: 'Cancelar', + changing_avatar: 'a alterar avatar', + creating_channel: 'a criar canal', + Channel_Name: 'Nome do Canal', + Channels: 'Canais', + Chats: 'Chats', + Close: 'Fechar', + Close_emoji_selector: 'Fechar selector de emoticons', + Choose: 'Escolher', + Choose_from_library: 'Escolher da biblioteca', + Code: 'Código', + Collaborative: 'Colaborativa', + Confirm: 'Confirmar', + Connect: 'Ligar', + Connect_to_a_server: 'Ligue-se a um servidor', + Connected: 'Ligado', + Connecting: 'A ligar...', + Continue_with: 'Continuar com', + Copied_to_clipboard: 'Copiado para a área de transferência!', + Copy: 'Copiar', + Permalink: 'Link permanente', + Create_account: 'Criar uma conta', + Create_Channel: 'Criar Canal', + Created_snippet: 'Criado um extracto', + Create_a_new_workspace: 'Criar um novo espaço de trabalho', + Create: 'Criar', + Delete_Room_Warning: 'Apagar uma sala irá remover todas as mensagens contidas nela. Isto não pode ser desfeito.', + delete: 'apagar', + Delete: 'Apagar', + DELETE: 'APAGAR', + description: 'descrição', + Description: 'Descrição', + Disable_notifications: 'Desactivar notificações', + Direct_Messages: 'Mensagens Directas', + Dont_Have_An_Account: 'Não tem uma conta?', + Do_you_really_want_to_key_this_room_question_mark: 'Você quer mesmo {{key}} esta sala?', + edit: 'editar', + erasing_room: 'apagando sala', + Edit: 'Editar', + Email_or_password_field_is_empty: 'O campo de e-mail ou palavra-passe está vazio', + Email: 'E-mail', + email: 'e-mail', + Enable_notifications: 'Activar notificações', + Everyone_can_access_this_channel: 'Todos podem aceder a este canal', + Error_uploading: 'Erro ao fazer o envio', + Favorites: 'Favoritos', + Files: 'Ficheiros', + File_description: 'Descrição do ficheiro', + File_name: 'Nome do ficheiro', + Finish_recording: 'Terminar a gravação', + For_your_security_you_must_enter_your_current_password_to_continue: 'Para sua segurança, você deve escrever a sua palavra-passe actual para continuar', + Forgot_my_password: 'Esqueci minha palavra-passe', + Forgot_password_If_this_email_is_registered: 'Se este e-mail estiver registado, enviaremos instruções sobre como repor a sua palavra-passe. Se você não receber um e-mail em breve, volte e tente novamente.', + Forgot_password: 'Esquecer palavra-passe', + Forgot_Password: 'Esquecer Palavra-passe', + Group_by_favorites: 'Agrupar por favoritos', + Group_by_type: 'Agrupar por tipo', + Has_joined_the_channel: 'Entrou no canal', + Has_joined_the_conversation: 'Entrou na conversa', + Has_left_the_channel: 'Saiu do canal', + Invisible: 'Invisível', + Invite: 'Convidar', + is_a_valid_RocketChat_instance: 'é uma instância válida do Rocket.Chat', + is_not_a_valid_RocketChat_instance: 'is not a valid Rocket.Chat instance', + is_typing: 'está a escrever', + Invalid_server_version: 'O servidor ao qual esta tentando ligar-se, utiliza uma versão que não é suporta pela aplicação: {{currentVersion}}.\n\nA versão mínima requerida é {{minVersion}}', + Join_the_community: 'Junte-se à comunidade', + Join: 'Entrar', + Just_invited_people_can_access_this_channel: 'Apenas utilizadores convidados podem aceder a este canal', + Language: 'Idioma', + last_message: 'última mensagem', + Leave_channel: 'Sair do canal', + leaving_room: 'a sair da sala', + leave: 'sair', + Legal: 'Legal', + Livechat: 'Livechat', + Login: 'Entrar', + Login_error: 'As suas credenciais foram rejeitadas! Por favor, tente novamente.', + Login_with: 'Entrar com', + Logout: 'Sair', + members: 'membros', + Members: 'Membros', + Mentioned_Messages: 'Mensagens Mencionadas', + mentioned: 'mencionado', + Mentions: 'Menções', + Message_accessibility: 'Mensagem de {{user}} às {{time}}: {{message}}', + Message_actions: 'Acções de mensagem', + Message_pinned: 'Mensagem afixada', + Message_removed: 'Mensagem removida', + Messages: 'Mensagens', + Microphone_Permission_Message: 'O Rocket Chat necessita de acesso ao seu microfone para que você possa enviar mensagens de áudio.', + Microphone_Permission: 'Permissão de Microfone', + Mute: 'Silenciar', + muted: 'silenciado', + My_servers: 'Meus servidores', + N_people_reacted: '{{n}} pessoas reagiram', + N_users: '{{n}} utilizadores', + name: 'nome', + Name: 'Nome', + New_Message: 'Nova Mensagem', + New_Password: 'Nova Palavra-passe', + New_Server: 'Novo Servidor', + Next: 'Próximo', + No_files: 'Nenhum ficheiro', + No_mentioned_messages: 'Nenhuma mensagem mencionada', + No_pinned_messages: 'Nenhuma mensagem afixada', + No_results_found: 'Nenhum resultado encontrado', + No_starred_messages: 'Nenhuma mensagem marcada com estrela', + No_announcement_provided: 'Nenhum anúncio fornecido.', + No_description_provided: 'Nenhuma descrição fornecida.', + No_topic_provided: 'Nenhum tópico fornecido.', + No_Message: 'Nenhuma mensagem', + No_Reactions: 'Nenhuma reação', + Not_logged: 'Não ligado', + Nothing_to_save: 'Nada para guardar!', + Notify_active_in_this_room: 'Notifica utilizadores activos nesta sala', + Notify_all_in_this_room: 'Notifica todos os utilizadores nesta sala', + Offline: 'Desligado', + Oops: 'Oops!', + Online: 'Ligado', + Only_authorized_users_can_write_new_messages: 'Apenas utilizadores autorizados podem escrever novas mensagens', + Open_emoji_selector: 'Abra o selector de emoticons', + Open_Source_Communication: 'Comunicação Open Source', + Password: 'Palavra-passe', + Permalink_copied_to_clipboard: 'Link permanente copiado para a área de transferência!', + Pin: 'Afixar', + Pinned_Messages: 'Mensagens Afixadas', + pinned: 'afixada', + Pinned: 'Afixada', + Please_enter_your_password: 'Por favor, introduza a sua palavra-passe', + Preferences_saved: 'Preferências guardadas!', + Privacy_Policy: ' Política de Privacidade', + Private_Channel: 'Canal Privado', + Private_Groups: 'Grupos Privados', + Private: 'Privado', + Profile_saved_successfully: 'Perfil actualizado com sucesso!', + Profile: 'Perfil', + Public_Channel: 'Canal Público', + Public: 'Público', + Quote: 'Citar', + Reactions_are_disabled: 'Reacções desactivadas', + Reactions_are_enabled: 'Reacções activadas', + Reactions: 'Reacções', + Read_Only_Channel: 'Canal só de leitura', + Read_Only: 'Só de Leitura', + Register: 'Registar', + Repeat_Password: 'Repita a palavra-passe', + Reply: 'Responder', + Resend: 'Reenviar', + Reset_password: 'Repor palavra-passe', + resetting_password: 'a repor palavra-passe', + RESET: 'REPOR', + Roles: 'Funções', + Room_actions: 'Ações de sala', + Room_changed_announcement: 'Anúncio da sala alterado para: {{announcement}} por {{userBy}}', + Room_changed_description: 'Descrição da sala alterada para: {{description}} por {{userBy}}', + Room_changed_privacy: 'Tipo de sala alterado para: {{type}} por {{userBy}}', + Room_changed_topic: 'Tópico da sala alterado para: {{topic}} por {{userBy}}', + Room_Files: 'Fiheiros da Sala', + Room_Info_Edit: 'Editar Informação da Sala', + Room_Info: 'Informação da Sala', + Room_Members: 'Membros da Sala', + Room_name_changed: 'Nome da sala alterado para: {{name}} por {{userBy}}', + SAVE: 'GUARDAR', + Save_Changes: 'Guardar Alterações', + Save: 'Guardar', + saving_preferences: 'a guardar preferências', + saving_profile: 'a guardar perfil', + saving_settings: 'a guardar configurações', + Search_Messages: 'Pesquisar Mensagens', + Search: 'Pesquisar', + Select_Avatar: 'Seleccionar Avatar', + Select_Users: 'Seleccionar Utilizadores', + Send: 'Enviar', + Send_audio_message: 'Enviar mensagem de áudio', + Send_message: 'Enviar mensagem', + Sent_an_attachment: 'Enviou um ficheiro', + Server: 'Servidor', + Servers: 'Servidores', + Set_username_subtitle: 'O nome de utilizador é usado para permitir que outros mencionem você em mensagens', + Settings: 'Definições', + Settings_succesfully_changed: 'Definições guardadas com sucesso!', + Share: 'Partilhar', + Sign_in_your_server: 'Entre no seu servidor', + Sign_Up: 'Inscreva-se', + Some_field_is_invalid_or_empty: 'Algum campo é inválido ou está vazio', + Sorting_by: 'Ordenar por {{key}}', + Star_room: 'Marcar como favorito', + Star: 'Dar estrela', + Starred_Messages: 'Mensagens com estrela', + starred: 'deu uma estrela', + Starred: 'Deu uma estrela', + Start_of_conversation: 'Início da conversa', + Submit: 'Enviar', + Take_a_photo: 'Tirar uma foto', + tap_to_change_status: 'toque para alterar o estado', + Tap_to_view_servers_list: 'Toque para ver a lista de servidores', + Terms_of_Service: ' Termos do Serviço ', + The_URL_is_invalid: 'O URL que você inseriu é inválido. Verifique e tente novamente, por favor!', + There_was_an_error_while_action: 'Houve um erro enquanto {{action}}!', + This_room_is_blocked: 'Esta sala está bloqueada', + This_room_is_read_only: 'Esta sala é apenas de leitura', + Timezone: 'Fuso Horário', + Toggle_Drawer: 'Toggle_Drawer', + topic: 'tópico', + Topic: 'Tópico', + Try_again: 'Tente novamente', + Two_Factor_Authentication: 'Autenticação 2FA', + Type_the_channel_name_here: 'Escreva o nome do canal aqui', + unarchive: 'desarquivar', + UNARCHIVE: 'DESARQUIVAR', + Unblock_user: 'Desbloquear utilizador', + Unmute: 'Retirar silêncio', + unmuted: 'silêncio removido', + Unpin: 'Desafixar', + unread_messages: 'não lidas', + Unread: 'Não lidas', + Unread_on_top: 'Não lidas no topo', + Unstar: 'Retirar estrela', + Updating: 'A actualizar...', + Uploading: 'A enviar', + Upload_file_question_mark: 'Enviar ficheiro?', + User_added_by: 'Utilizador {{userAdded}} adicionado por {{userBy}}', + User_has_been_key: 'Utilizador foi {{key}}!', + User_is_no_longer_role_by_: '{{userBy}} removeu o estatuto de {{role}} de {{user}}', + User_muted_by: 'Utilizador {{userMuted}} foi silenciado por {{userBy}}', + User_removed_by: 'Utilizador {{userRemoved}} removido por {{userBy}}', + User_sent_an_attachment: '{{user}} enviou um ficheiro', + User_unmuted_by: '{{userBy}} retirou o silêncio a {{userUnmuted}}', + User_was_set_role_by_: '{{userBy}} deu estatuto de {{role}} a {{user}}', + Username_is_empty: 'O nome de utilizador está vazio', + Username: 'Nome de utilizador', + Username_or_email: 'Nome de utilizador ou e-mail', + Validating: 'A validar', + Video_call: 'Video chamada', + Voice_call: 'Chamada de voz', + Welcome: 'Bem vindo(a)', + Welcome_to_RocketChat: 'Bem vindo(a) ao Rocket.Chat', + Whats_your_2fa: 'Qual é o seu código 2FA?', + Yes_action_it: 'Sim, {{action}}!', + Yesterday: 'Ontem', + You_are_in_preview_mode: 'Você está no modo de pré-visualização', + You_are_offline: 'Você está desligado', + You_can_search_using_RegExp_eg: 'Você pode pesquisar usando RegEx. por exemplo, `/^text$/i`', + You_colon: 'Você: ', + you_were_mentioned: 'você foi mencionado', + you: 'você', + You: 'Você', + You_will_not_be_able_to_recover_this_message: 'Você será incapaz de recuperar esta mensagem!' +}; diff --git a/app/index.js b/app/index.js index eea4ea1b4..9be8979b5 100644 --- a/app/index.js +++ b/app/index.js @@ -6,6 +6,7 @@ import { Provider } from 'react-redux'; import { useScreens } from 'react-native-screens'; // eslint-disable-line import/no-unresolved import { Linking } from 'react-native'; +import { appInit } from './actions'; import { deepLinkingOpen } from './actions/deepLinking'; import OnboardingView from './views/OnboardingView'; import NewServerView from './views/NewServerView'; @@ -28,41 +29,35 @@ import MentionedMessagesView from './views/MentionedMessagesView'; import StarredMessagesView from './views/StarredMessagesView'; import SearchMessagesView from './views/SearchMessagesView'; import PinnedMessagesView from './views/PinnedMessagesView'; +import ThreadMessagesView from './views/ThreadMessagesView'; import SelectedUsersView from './views/SelectedUsersView'; import CreateChannelView from './views/CreateChannelView'; import LegalView from './views/LegalView'; -import TermsServiceView from './views/TermsServiceView'; -import PrivacyPolicyView from './views/PrivacyPolicyView'; import ForgotPasswordView from './views/ForgotPasswordView'; import RegisterView from './views/RegisterView'; import OAuthView from './views/OAuthView'; import SetUsernameView from './views/SetUsernameView'; import { HEADER_BACKGROUND, HEADER_TITLE, HEADER_BACK } from './constants/colors'; import parseQuery from './lib/methods/helpers/parseQuery'; -import { initializePushNotifications } from './push'; +import { initializePushNotifications, onNotification } from './push'; import store from './lib/createStore'; useScreens(); -initializePushNotifications(); -const handleOpenURL = ({ url }) => { +const parseDeepLinking = (url) => { if (url) { url = url.replace(/rocketchat:\/\/|https:\/\/go.rocket.chat\//, ''); const regex = /^(room|auth)\?/; if (url.match(regex)) { - url = url.replace(regex, ''); - const params = parseQuery(url); - store.dispatch(deepLinkingOpen(params)); + url = url.replace(regex, '').trim(); + if (url) { + return parseQuery(url); + } } } + return null; }; -Linking - .getInitialURL() - .then(url => handleOpenURL({ url })) - .catch(e => console.warn(e)); -Linking.addEventListener('url', handleOpenURL); - const defaultHeader = { headerStyle: { backgroundColor: HEADER_BACKGROUND @@ -84,15 +79,8 @@ const OutsideStack = createStackNavigator({ LoginSignupView, LoginView, ForgotPasswordView, - RegisterView -}, { - defaultNavigationOptions: defaultHeader -}); - -const LegalStack = createStackNavigator({ - LegalView, - TermsServiceView, - PrivacyPolicyView + RegisterView, + LegalView }, { defaultNavigationOptions: defaultHeader }); @@ -105,7 +93,6 @@ const OAuthStack = createStackNavigator({ const OutsideStackModal = createStackNavigator({ OutsideStack, - LegalStack, OAuthStack }, { @@ -126,23 +113,54 @@ const ChatsStack = createStackNavigator({ StarredMessagesView, SearchMessagesView, PinnedMessagesView, - SelectedUsersView + SelectedUsersView, + ThreadMessagesView }, { defaultNavigationOptions: defaultHeader }); +ChatsStack.navigationOptions = ({ navigation }) => { + let drawerLockMode = 'unlocked'; + if (navigation.state.index > 0) { + drawerLockMode = 'locked-closed'; + } + return { + drawerLockMode + }; +}; + const ProfileStack = createStackNavigator({ ProfileView }, { defaultNavigationOptions: defaultHeader }); +ProfileStack.navigationOptions = ({ navigation }) => { + let drawerLockMode = 'unlocked'; + if (navigation.state.index > 0) { + drawerLockMode = 'locked-closed'; + } + return { + drawerLockMode + }; +}; + const SettingsStack = createStackNavigator({ SettingsView }, { defaultNavigationOptions: defaultHeader }); +SettingsStack.navigationOptions = ({ navigation }) => { + let drawerLockMode = 'unlocked'; + if (navigation.state.index > 0) { + drawerLockMode = 'locked-closed'; + } + return { + drawerLockMode + }; +}; + const ChatsDrawer = createDrawerNavigator({ ChatsStack, ProfileStack, @@ -184,12 +202,48 @@ const App = createAppContainer(createSwitchNavigator( } )); -export default () => ( - - { - Navigation.setTopLevelNavigator(navigatorRef); - }} - /> - -); +export default class Root extends React.Component { + constructor(props) { + super(props); + this.init(); + } + + componentDidMount() { + this.listenerTimeout = setTimeout(() => { + Linking.addEventListener('url', ({ url }) => { + const parsedDeepLinkingURL = parseDeepLinking(url); + if (parsedDeepLinkingURL) { + store.dispatch(deepLinkingOpen(parsedDeepLinkingURL)); + } + }); + }, 5000); + } + + componentWillUnmount() { + clearTimeout(this.listenerTimeout); + } + + init = async() => { + const [notification, deepLinking] = await Promise.all([initializePushNotifications(), Linking.getInitialURL()]); + const parsedDeepLinkingURL = parseDeepLinking(deepLinking); + if (notification) { + onNotification(notification); + } else if (parsedDeepLinkingURL) { + store.dispatch(deepLinkingOpen(parsedDeepLinkingURL)); + } else { + store.dispatch(appInit()); + } + } + + render() { + return ( + + { + Navigation.setTopLevelNavigator(navigatorRef); + }} + /> + + ); + } +} diff --git a/app/lib/methods/getCustomEmojis.js b/app/lib/methods/getCustomEmojis.js index adcb2e83c..207ef446c 100644 --- a/app/lib/methods/getCustomEmojis.js +++ b/app/lib/methods/getCustomEmojis.js @@ -1,39 +1,83 @@ import { InteractionManager } from 'react-native'; +import semver from 'semver'; import reduxStore from '../createStore'; import database from '../realm'; import * as actions from '../../actions'; import log from '../../utils/log'; -const getLastMessage = () => { - const setting = database.objects('customEmojis').sorted('_updatedAt', true)[0]; - return setting && setting._updatedAt; +const getUpdatedSince = () => { + const emoji = database.objects('customEmojis').sorted('_updatedAt', true)[0]; + return emoji && emoji._updatedAt.toISOString(); }; -// TODO: fix api (get emojis by date/version....) +const create = (customEmojis) => { + if (customEmojis && customEmojis.length) { + customEmojis.forEach((emoji) => { + try { + database.create('customEmojis', emoji, true); + } catch (e) { + log('getEmojis create', e); + } + }); + } +}; + + export default async function() { try { - const lastMessage = getLastMessage(); - // RC 0.61.0 - const result = await this.sdk.get('emoji-custom'); - let { emojis } = result; - emojis = emojis.filter(emoji => !lastMessage || emoji._updatedAt > lastMessage); - if (emojis.length === 0) { - return; - } - emojis = this._prepareEmojis(emojis); - InteractionManager.runAfterInteractions(() => { - database.write(() => { - emojis.forEach((emoji) => { - try { - database.create('customEmojis', emoji, true); - } catch (e) { - log('create custom emojis', e); - } + const serverVersion = reduxStore.getState().server.version; + const updatedSince = getUpdatedSince(); + + // if server version is lower than 0.75.0, fetches from old api + if (semver.lt(serverVersion, '0.75.0')) { + // RC 0.61.0 + const result = await this.sdk.get('emoji-custom'); + + InteractionManager.runAfterInteractions(() => { + let { emojis } = result; + emojis = emojis.filter(emoji => !updatedSince || emoji._updatedAt > updatedSince); + database.write(() => { + create(emojis); }); + reduxStore.dispatch(actions.setCustomEmojis(this.parseEmojis(result.emojis))); }); - }); - reduxStore.dispatch(actions.setCustomEmojis(this.parseEmojis(emojis))); + } else { + const params = {}; + if (updatedSince) { + params.updatedSince = updatedSince; + } + + // RC 0.75.0 + const result = await this.sdk.get('emoji-custom.list', params); + + if (!result.success) { + return; + } + + InteractionManager.runAfterInteractions( + () => database.write(() => { + const { emojis } = result; + create(emojis.update); + + if (emojis.delete && emojis.delete.length) { + emojis.delete.forEach((emoji) => { + try { + const emojiRecord = database.objectForPrimaryKey('customEmojis', emoji._id); + if (emojiRecord) { + database.delete(emojiRecord); + } + } catch (e) { + log('getEmojis delete', e); + } + }); + } + + const allEmojis = database.objects('customEmojis'); + reduxStore.dispatch(actions.setCustomEmojis(this.parseEmojis(allEmojis))); + }) + ); + } } catch (e) { log('getCustomEmojis', e); } diff --git a/app/lib/methods/getPermissions.js b/app/lib/methods/getPermissions.js index 1ef99eeeb..eaa9da083 100644 --- a/app/lib/methods/getPermissions.js +++ b/app/lib/methods/getPermissions.js @@ -1,34 +1,75 @@ import { InteractionManager } from 'react-native'; +import semver from 'semver'; import database from '../realm'; import log from '../../utils/log'; -import defaultPermissions from '../../constants/permissions'; +import reduxStore from '../createStore'; + +const getUpdatedSince = () => { + const permissions = database.objects('permissions').sorted('_updatedAt', true)[0]; + return permissions && permissions._updatedAt.toISOString(); +}; + +const create = (permissions) => { + if (permissions && permissions.length) { + permissions.forEach((permission) => { + try { + database.create('permissions', permission, true); + } catch (e) { + log('getPermissions create', e); + } + }); + } +}; export default async function() { try { - // RC 0.66.0 - const result = await this.sdk.get('permissions.list'); + const serverVersion = reduxStore.getState().server.version; - if (!result.success) { - return; - } - const permissions = result.permissions.filter(permission => defaultPermissions.includes(permission._id)); - permissions - .map((permission) => { - permission._updatedAt = new Date(); - permission.roles = permission.roles.map(role => ({ value: role })); - return permission; + // if server version is lower than 0.73.0, fetches from old api + if (semver.lt(serverVersion, '0.73.0')) { + // RC 0.66.0 + const result = await this.sdk.get('permissions.list'); + if (!result.success) { + return; + } + InteractionManager.runAfterInteractions(() => { + database.write(() => { + create(result.permissions); + }); }); + } else { + const params = {}; + const updatedSince = getUpdatedSince(); + if (updatedSince) { + params.updatedSince = updatedSince; + } + // RC 0.73.0 + const result = await this.sdk.get('permissions.listAll', params); - InteractionManager.runAfterInteractions( - () => database.write(() => permissions.forEach((permission) => { - try { - database.create('permissions', permission, true); - } catch (e) { - log('getPermissions create', e); - } - })) - ); + if (!result.success) { + return; + } + + InteractionManager.runAfterInteractions( + () => database.write(() => { + create(result.update); + + if (result.delete && result.delete.length) { + result.delete.forEach((p) => { + try { + const permission = database.objectForPrimaryKey('permissions', p._id); + if (permission) { + database.delete(permission); + } + } catch (e) { + log('getPermissions delete', e); + } + }); + } + }) + ); + } } catch (e) { log('getPermissions', e); } diff --git a/app/lib/methods/getRoles.js b/app/lib/methods/getRoles.js new file mode 100644 index 000000000..c5ba86c13 --- /dev/null +++ b/app/lib/methods/getRoles.js @@ -0,0 +1,31 @@ +import { InteractionManager } from 'react-native'; + +import database from '../realm'; +import log from '../../utils/log'; + +export default async function() { + try { + // RC 0.70.0 + const result = await this.sdk.get('roles.list'); + + if (!result.success) { + return; + } + + const { roles } = result; + + if (roles && roles.length) { + InteractionManager.runAfterInteractions(() => { + database.write(() => roles.forEach((role) => { + try { + database.create('roles', role, true); + } catch (e) { + log('getRoles create', e); + } + })); + }); + } + } catch (e) { + log('getRoles', e); + } +} diff --git a/app/lib/methods/helpers/mergeSubscriptionsRooms.js b/app/lib/methods/helpers/mergeSubscriptionsRooms.js index 94dc5f4b8..7983cac08 100644 --- a/app/lib/methods/helpers/mergeSubscriptionsRooms.js +++ b/app/lib/methods/helpers/mergeSubscriptionsRooms.js @@ -24,6 +24,9 @@ export const merge = (subscription, room) => { subscription.archived = room.archived; subscription.joinCodeRequired = room.joinCodeRequired; subscription.broadcast = room.broadcast; + if (!subscription.roles || !subscription.roles.length) { + subscription.roles = []; + } if (room.muted && room.muted.length) { subscription.muted = room.muted.filter(user => user).map(user => ({ value: user })); @@ -31,11 +34,6 @@ export const merge = (subscription, room) => { subscription.muted = []; } } - if (subscription.roles && subscription.roles.length) { - subscription.roles = subscription.roles.map(role => (role.value ? role : { value: role })); - } else { - subscription.roles = []; - } if (subscription.mobilePushNotifications === 'nothing') { subscription.notifications = true; diff --git a/app/lib/methods/helpers/normalizeMessage.js b/app/lib/methods/helpers/normalizeMessage.js index 7b77c9ad8..cc9d2ef45 100644 --- a/app/lib/methods/helpers/normalizeMessage.js +++ b/app/lib/methods/helpers/normalizeMessage.js @@ -18,7 +18,12 @@ function normalizeAttachments(msg) { } export default (msg) => { - if (!msg) { return; } + /** + * 2019-03-29: Realm object properties are *always* optional, but `u.username` is required + * https://realm.io/docs/javascript/latest/#to-one-relationships + */ + if (!msg || !msg.u || !msg.u.username) { return; } + msg = normalizeAttachments(msg); msg.reactions = msg.reactions || []; // TODO: api problems diff --git a/app/lib/methods/loadMessagesForRoom.js b/app/lib/methods/loadMessagesForRoom.js index f49ff8f64..e24151a89 100644 --- a/app/lib/methods/loadMessagesForRoom.js +++ b/app/lib/methods/loadMessagesForRoom.js @@ -39,8 +39,18 @@ export default function loadMessagesForRoom(...args) { if (data && data.length) { InteractionManager.runAfterInteractions(() => { database.write(() => data.forEach((message) => { + message = buildMessage(message); try { - database.create('messages', buildMessage(message), true); + database.create('messages', message, true); + // if it's a thread "header" + if (message.tlm) { + database.create('threads', message, true); + } + // if it belongs to a thread + if (message.tmid) { + message.rid = message.tmid; + database.create('threadMessages', message, true); + } } catch (e) { log('loadMessagesForRoom -> create messages', e); } diff --git a/app/lib/methods/loadMissedMessages.js b/app/lib/methods/loadMissedMessages.js index 806074815..e0d261a4b 100644 --- a/app/lib/methods/loadMissedMessages.js +++ b/app/lib/methods/loadMissedMessages.js @@ -19,7 +19,7 @@ async function load({ rid: roomId, lastOpen }) { lastUpdate = getLastUpdate(roomId); } // RC 0.60.0 - const { result } = await this.sdk.get('chat.syncMessages', { roomId, lastUpdate, count: 50 }); + const { result } = await this.sdk.get('chat.syncMessages', { roomId, lastUpdate }); return result; } @@ -31,16 +31,23 @@ export default function loadMissedMessages(...args) { if (data) { if (data.updated && data.updated.length) { const { updated } = data; - updated.forEach(buildMessage); InteractionManager.runAfterInteractions(() => { database.write(() => updated.forEach((message) => { try { + message = buildMessage(message); database.create('messages', message, true); + // if it's a thread "header" + if (message.tlm) { + database.create('threads', message, true); + } + if (message.tmid) { + message.rid = message.tmid; + database.create('threadMessages', message, true); + } } catch (e) { log('loadMissedMessages -> create messages', e); } })); - resolve(updated); }); } if (data.deleted && data.deleted.length) { @@ -51,6 +58,10 @@ export default function loadMissedMessages(...args) { deleted.forEach((m) => { const message = database.objects('messages').filtered('_id = $0', m._id); database.delete(message); + const thread = database.objects('threads').filtered('_id = $0', m._id); + database.delete(thread); + const threadMessage = database.objects('threadMessages').filtered('_id = $0', m._id); + database.delete(threadMessage); }); }); } catch (e) { @@ -59,7 +70,7 @@ export default function loadMissedMessages(...args) { }); } } - resolve([]); + resolve(); } catch (e) { log('loadMissedMessages', e); reject(e); diff --git a/app/lib/methods/loadThreadMessages.js b/app/lib/methods/loadThreadMessages.js new file mode 100644 index 000000000..7412ef0a0 --- /dev/null +++ b/app/lib/methods/loadThreadMessages.js @@ -0,0 +1,50 @@ +import { InteractionManager } from 'react-native'; +import EJSON from 'ejson'; + +import buildMessage from './helpers/buildMessage'; +import database from '../realm'; +import log from '../../utils/log'; + +async function load({ tmid, offset }) { + try { + // RC 1.0 + const result = await this.sdk.get('chat.getThreadMessages', { + tmid, count: 50, offset, sort: { ts: -1 }, query: { _hidden: { $ne: true } } + }); + if (!result || !result.success) { + return []; + } + return result.messages; + } catch (error) { + console.log(error); + return []; + } +} + +export default function loadThreadMessages({ tmid, offset = 0 }) { + return new Promise(async(resolve, reject) => { + try { + const data = await load.call(this, { tmid, offset }); + + if (data && data.length) { + InteractionManager.runAfterInteractions(() => { + database.write(() => data.forEach((m) => { + try { + const message = buildMessage(EJSON.fromJSONValue(m)); + message.rid = tmid; + database.create('threadMessages', message, true); + } catch (e) { + log('loadThreadMessages -> create messages', e); + } + })); + return resolve(data); + }); + } else { + return resolve([]); + } + } catch (e) { + log('loadThreadMessages', e); + reject(e); + } + }); +} diff --git a/app/lib/methods/sendFileMessage.js b/app/lib/methods/sendFileMessage.js index 5d836e96a..b04277237 100644 --- a/app/lib/methods/sendFileMessage.js +++ b/app/lib/methods/sendFileMessage.js @@ -29,7 +29,7 @@ export async function cancelUpload(path) { } } -export async function sendFileMessage(rid, fileInfo) { +export async function sendFileMessage(rid, fileInfo, tmid) { try { const data = await RNFetchBlob.wrap(fileInfo.path); if (!fileInfo.size) { @@ -86,6 +86,8 @@ export async function sendFileMessage(rid, fileInfo) { name: completeResult.name, description: completeResult.description, url: completeResult.path + }, { + tmid }); database.write(() => { diff --git a/app/lib/methods/sendMessage.js b/app/lib/methods/sendMessage.js index faeb978b6..7545349ed 100644 --- a/app/lib/methods/sendMessage.js +++ b/app/lib/methods/sendMessage.js @@ -5,12 +5,13 @@ import reduxStore from '../createStore'; import log from '../../utils/log'; import random from '../../utils/random'; -export const getMessage = (rid, msg = {}) => { +export const getMessage = (rid, msg = '', tmid) => { const _id = random(17); const message = { _id, rid, msg, + tmid, ts: new Date(), _updatedAt: new Date(), status: messagesStatus.TEMP, @@ -30,21 +31,28 @@ export const getMessage = (rid, msg = {}) => { }; export async function sendMessageCall(message) { - const { _id, rid, msg } = message; + const { + _id, rid, msg, tmid + } = message; // RC 0.60.0 - const data = await this.sdk.post('chat.sendMessage', { message: { _id, rid, msg } }); + const data = await this.sdk.post('chat.sendMessage', { + message: { + _id, rid, msg, tmid + } + }); return data; } -export default async function(rid, msg) { +export default async function(rid, msg, tmid) { try { - const message = getMessage(rid, msg); - const room = database.objects('subscriptions').filtered('rid == $0', rid); + const message = getMessage(rid, msg, tmid); + const [room] = database.objects('subscriptions').filtered('rid == $0', rid); - // TODO: do we need this? - database.write(() => { - room.lastMessage = message; - }); + if (room) { + database.write(() => { + room.draftMessage = null; + }); + } try { const ret = await sendMessageCall.call(this, message); diff --git a/app/lib/methods/subscriptions/room.js b/app/lib/methods/subscriptions/room.js index 410de3736..b30e63efa 100644 --- a/app/lib/methods/subscriptions/room.js +++ b/app/lib/methods/subscriptions/room.js @@ -1,18 +1,22 @@ +import EJSON from 'ejson'; + import log from '../../../utils/log'; +import protectedFunction from '../helpers/protectedFunction'; +import buildMessage from '../helpers/buildMessage'; +import database from '../../realm'; +import debounce from '../../../utils/debounce'; const unsubscribe = subscriptions => subscriptions.forEach(sub => sub.unsubscribe().catch(() => console.log('unsubscribeRoom'))); const removeListener = listener => listener.stop(); -let promises; -let timer = null; -let connectedListener; -let disconnectedListener; - export default function subscribeRoom({ rid }) { - if (promises) { - promises.then(unsubscribe); - promises = false; - } + let promises; + let timer = null; + let connectedListener; + let disconnectedListener; + let notifyRoomListener; + let messageReceivedListener; + const typingTimeouts = {}; const loop = () => { if (timer) { return; @@ -41,6 +45,116 @@ export default function subscribeRoom({ rid }) { } }; + const getUserTyping = username => ( + database + .memoryDatabase.objects('usersTyping') + .filtered('rid = $0 AND username = $1', rid, username) + ); + + const removeUserTyping = (username) => { + const userTyping = getUserTyping(username); + try { + database.memoryDatabase.write(() => { + database.memoryDatabase.delete(userTyping); + }); + + if (typingTimeouts[username]) { + clearTimeout(typingTimeouts[username]); + typingTimeouts[username] = null; + } + } catch (error) { + console.log('TCL: removeUserTyping -> error', error); + } + }; + + const addUserTyping = (username) => { + const userTyping = getUserTyping(username); + // prevent duplicated + if (userTyping.length === 0) { + try { + database.memoryDatabase.write(() => { + database.memoryDatabase.create('usersTyping', { rid, username }); + }); + + if (typingTimeouts[username]) { + clearTimeout(typingTimeouts[username]); + typingTimeouts[username] = null; + } + + typingTimeouts[username] = setTimeout(() => { + removeUserTyping(username); + }, 10000); + } catch (error) { + console.log('TCL: addUserTyping -> error', error); + } + } + }; + + const handleNotifyRoomReceived = protectedFunction((ddpMessage) => { + const [_rid, ev] = ddpMessage.fields.eventName.split('/'); + if (rid !== _rid) { + return; + } + if (ev === 'typing') { + const [username, typing] = ddpMessage.fields.args; + if (typing) { + addUserTyping(username); + } else { + removeUserTyping(username); + } + } else if (ev === 'deleteMessage') { + database.write(() => { + if (ddpMessage && ddpMessage.fields && ddpMessage.fields.args.length > 0) { + const { _id } = ddpMessage.fields.args[0]; + const message = database.objects('messages').filtered('_id = $0', _id); + database.delete(message); + const thread = database.objects('threads').filtered('_id = $0', _id); + database.delete(thread); + const threadMessage = database.objects('threadMessages').filtered('_id = $0', _id); + database.delete(threadMessage); + const cleanTmids = database.objects('messages').filtered('tmid = $0', _id).snapshot(); + if (cleanTmids && cleanTmids.length) { + cleanTmids.forEach((m) => { + m.tmid = null; + }); + } + } + }); + } + }); + + const read = debounce(() => { + const [room] = database.objects('subscriptions').filtered('rid = $0', rid); + if (room._id) { + this.readMessages(rid); + } + }, 300); + + const handleMessageReceived = protectedFunction((ddpMessage) => { + const message = buildMessage(EJSON.fromJSONValue(ddpMessage.fields.args[0])); + if (rid !== message.rid) { + return; + } + requestAnimationFrame(() => { + try { + database.write(() => { + database.create('messages', message, true); + // if it's a thread "header" + if (message.tlm) { + database.create('threads', message, true); + } else if (message.tmid) { + message.rid = message.tmid; + database.create('threadMessages', message, true); + } + }); + + read(); + } catch (e) { + console.warn('handleMessageReceived', e); + } + }); + }); + const stop = () => { if (promises) { promises.then(unsubscribe); @@ -54,12 +168,32 @@ export default function subscribeRoom({ rid }) { disconnectedListener.then(removeListener); disconnectedListener = false; } + if (notifyRoomListener) { + notifyRoomListener.then(removeListener); + notifyRoomListener = false; + } + if (messageReceivedListener) { + messageReceivedListener.then(removeListener); + messageReceivedListener = false; + } clearTimeout(timer); timer = false; + Object.keys(typingTimeouts).forEach((key) => { + if (typingTimeouts[key]) { + clearTimeout(typingTimeouts[key]); + typingTimeouts[key] = null; + } + }); + database.memoryDatabase.write(() => { + const usersTyping = database.memoryDatabase.objects('usersTyping').filtered('rid == $0', rid); + database.memoryDatabase.delete(usersTyping); + }); }; connectedListener = this.sdk.onStreamData('connected', handleConnected); disconnectedListener = this.sdk.onStreamData('close', handleDisconnected); + notifyRoomListener = this.sdk.onStreamData('stream-notify-room', handleNotifyRoomReceived); + messageReceivedListener = this.sdk.onStreamData('stream-room-messages', handleMessageReceived); try { promises = this.sdk.subscribeRoom(rid); diff --git a/app/lib/realm.js b/app/lib/realm.js index 947f10baf..db5396370 100644 --- a/app/lib/realm.js +++ b/app/lib/realm.js @@ -11,7 +11,8 @@ const serversSchema = { id: 'string', name: { type: 'string', optional: true }, iconURL: { type: 'string', optional: true }, - roomsUpdatedAt: { type: 'date', optional: true } + roomsUpdatedAt: { type: 'date', optional: true }, + version: 'string?' } }; @@ -27,20 +28,12 @@ const settingsSchema = { } }; -const permissionsRolesSchema = { - name: 'permissionsRoles', - primaryKey: 'value', - properties: { - value: 'string' - } -}; - const permissionsSchema = { name: 'permissions', primaryKey: '_id', properties: { _id: 'string', - roles: { type: 'list', objectType: 'permissionsRoles' }, + roles: 'string[]', _updatedAt: { type: 'date', optional: true } } }; @@ -54,14 +47,6 @@ const roomsSchema = { } }; -const subscriptionRolesSchema = { - name: 'subscriptionRolesSchema', - primaryKey: 'value', - properties: { - value: 'string' - } -}; - const userMutedInRoomSchema = { name: 'usersMuted', primaryKey: 'value', @@ -84,7 +69,7 @@ const subscriptionSchema = { rid: { type: 'string', indexed: true }, open: { type: 'bool', optional: true }, alert: { type: 'bool', optional: true }, - roles: { type: 'list', objectType: 'subscriptionRolesSchema' }, + roles: 'string[]', unread: { type: 'int', optional: true }, userMentions: { type: 'int', optional: true }, roomUpdatedAt: { type: 'date', optional: true }, @@ -101,7 +86,10 @@ const subscriptionSchema = { joinCodeRequired: { type: 'bool', optional: true }, notifications: { type: 'bool', optional: true }, muted: { type: 'list', objectType: 'usersMuted' }, - broadcast: { type: 'bool', optional: true } + broadcast: { type: 'bool', optional: true }, + prid: { type: 'string', optional: true }, + draftMessage: { type: 'string', optional: true }, + lastThreadSync: 'date?' } }; @@ -204,8 +192,73 @@ const messagesSchema = { rid: { type: 'string', indexed: true }, ts: 'date', u: 'users', - // mentions: [], - // channels: [], + alias: { type: 'string', optional: true }, + parseUrls: { type: 'bool', optional: true }, + groupable: { type: 'bool', optional: true }, + avatar: { type: 'string', optional: true }, + attachments: { type: 'list', objectType: 'attachment' }, + urls: { type: 'list', objectType: 'url', default: [] }, + _updatedAt: { type: 'date', optional: true }, + status: { type: 'int', optional: true }, + pinned: { type: 'bool', optional: true }, + starred: { type: 'bool', optional: true }, + editedBy: 'messagesEditedBy', + reactions: { type: 'list', objectType: 'messagesReactions' }, + role: { type: 'string', optional: true }, + drid: { type: 'string', optional: true }, + dcount: { type: 'int', optional: true }, + dlm: { type: 'date', optional: true }, + tmid: { type: 'string', optional: true }, + tcount: { type: 'int', optional: true }, + tlm: { type: 'date', optional: true }, + replies: 'string[]' + } +}; + +const threadsSchema = { + name: 'threads', + primaryKey: '_id', + properties: { + _id: 'string', + msg: { type: 'string', optional: true }, + t: { type: 'string', optional: true }, + rid: { type: 'string', indexed: true }, + ts: 'date', + u: 'users', + alias: { type: 'string', optional: true }, + parseUrls: { type: 'bool', optional: true }, + groupable: { type: 'bool', optional: true }, + avatar: { type: 'string', optional: true }, + attachments: { type: 'list', objectType: 'attachment' }, + urls: { type: 'list', objectType: 'url', default: [] }, + _updatedAt: { type: 'date', optional: true }, + status: { type: 'int', optional: true }, + pinned: { type: 'bool', optional: true }, + starred: { type: 'bool', optional: true }, + editedBy: 'messagesEditedBy', + reactions: { type: 'list', objectType: 'messagesReactions' }, + role: { type: 'string', optional: true }, + drid: { type: 'string', optional: true }, + dcount: { type: 'int', optional: true }, + dlm: { type: 'date', optional: true }, + tmid: { type: 'string', optional: true }, + tcount: { type: 'int', optional: true }, + tlm: { type: 'date', optional: true }, + replies: 'string[]', + draftMessage: 'string?' + } +}; + +const threadMessagesSchema = { + name: 'threadMessages', + primaryKey: '_id', + properties: { + _id: 'string', + msg: { type: 'string', optional: true }, + t: { type: 'string', optional: true }, + rid: { type: 'string', indexed: true }, + ts: 'date', + u: 'users', alias: { type: 'string', optional: true }, parseUrls: { type: 'bool', optional: true }, groupable: { type: 'bool', optional: true }, @@ -233,21 +286,13 @@ const frequentlyUsedEmojiSchema = { } }; -const customEmojiAliasesSchema = { - name: 'customEmojiAliases', - primaryKey: 'value', - properties: { - value: 'string' - } -}; - const customEmojisSchema = { name: 'customEmojis', primaryKey: '_id', properties: { _id: 'string', name: 'string', - aliases: { type: 'list', objectType: 'customEmojiAliases' }, + aliases: 'string[]', extension: 'string', _updatedAt: { type: 'date', optional: true } } @@ -278,21 +323,40 @@ const uploadsSchema = { } }; +const usersTypingSchema = { + name: 'usersTyping', + properties: { + rid: { type: 'string', indexed: true }, + username: { type: 'string', optional: true } + } +}; + +const activeUsersSchema = { + name: 'activeUsers', + primaryKey: 'id', + properties: { + id: 'string', + name: 'string?', + username: 'string?', + status: 'string?', + utcOffset: 'double?' + } +}; + const schema = [ settingsSchema, subscriptionSchema, - subscriptionRolesSchema, messagesSchema, + threadsSchema, + threadMessagesSchema, usersSchema, roomsSchema, attachment, attachmentFields, messagesEditedBySchema, permissionsSchema, - permissionsRolesSchema, url, frequentlyUsedEmojiSchema, - customEmojiAliasesSchema, customEmojisSchema, messagesReactionsSchema, messagesReactionsUsernamesSchema, @@ -301,6 +365,8 @@ const schema = [ uploadsSchema ]; +const inMemorySchema = [usersTypingSchema, activeUsersSchema]; + class DB { databases = { serversDB: new Realm({ @@ -308,7 +374,23 @@ class DB { schema: [ serversSchema ], - schemaVersion: 1 + schemaVersion: 6, + migration: (oldRealm, newRealm) => { + if (oldRealm.schemaVersion >= 1 && newRealm.schemaVersion <= 6) { + const newServers = newRealm.objects('servers'); + + // eslint-disable-next-line no-plusplus + for (let i = 0; i < newServers.length; i++) { + newServers[i].roomsUpdatedAt = null; + } + } + } + }), + inMemoryDB: new Realm({ + path: 'memory.realm', + schema: inMemorySchema, + schemaVersion: 2, + inMemory: true }) } @@ -332,17 +414,68 @@ class DB { return this.database.objects(...args); } + objectForPrimaryKey(...args) { + return this.database.objectForPrimaryKey(...args); + } + get database() { return this.databases.activeDB; } + get memoryDatabase() { + return this.databases.inMemoryDB; + } + setActiveDB(database = '') { const path = database.replace(/(^\w+:|^)\/\//, ''); return this.databases.activeDB = new Realm({ path: `${ path }.realm`, schema, - schemaVersion: 1 + schemaVersion: 9, + migration: (oldRealm, newRealm) => { + if (oldRealm.schemaVersion >= 3 && newRealm.schemaVersion <= 8) { + const newSubs = newRealm.objects('subscriptions'); + + // eslint-disable-next-line no-plusplus + for (let i = 0; i < newSubs.length; i++) { + newSubs[i].lastOpen = null; + newSubs[i].ls = null; + } + const newMessages = newRealm.objects('messages'); + newRealm.delete(newMessages); + const newThreads = newRealm.objects('threads'); + newRealm.delete(newThreads); + const newThreadMessages = newRealm.objects('threadMessages'); + newRealm.delete(newThreadMessages); + } + if (newRealm.schemaVersion === 9) { + const newSubs = newRealm.objects('subscriptions'); + newRealm.delete(newSubs); + const newEmojis = newRealm.objects('customEmojis'); + newRealm.delete(newEmojis); + const newSettings = newRealm.objects('settings'); + newRealm.delete(newSettings); + } + } }); } } -export default new DB(); +const db = new DB(); +export default db; + +// Realm workaround for "Cannot create asynchronous query while in a write transaction" +// inpired from https://github.com/realm/realm-js/issues/1188#issuecomment-359223918 +export function safeAddListener(results, callback, database = db) { + if (!results || !results.addListener) { + console.log('⚠️ safeAddListener called for non addListener-compliant object'); + return; + } + + if (database.isInTransaction) { + setTimeout(() => { + safeAddListener(results, callback); + }, 50); + } else { + results.addListener(callback); + } +} diff --git a/app/lib/rocketchat.js b/app/lib/rocketchat.js index de3cb6bb7..a7990d1c4 100644 --- a/app/lib/rocketchat.js +++ b/app/lib/rocketchat.js @@ -1,22 +1,19 @@ -import { AsyncStorage } from 'react-native'; -import foreach from 'lodash/forEach'; +import { AsyncStorage, InteractionManager } from 'react-native'; import semver from 'semver'; import { Rocketchat as RocketchatClient } from '@rocket.chat/sdk'; import reduxStore from './createStore'; import defaultSettings from '../constants/settings'; import messagesStatus from '../constants/messagesStatus'; -import database from './realm'; +import database, { safeAddListener } from './realm'; import log from '../utils/log'; import { isIOS, getBundleId } from '../utils/deviceInfo'; +import EventEmitter from '../utils/events'; import { setUser, setLoginServices, loginRequest, loginFailure, logout } from '../actions/login'; import { disconnect, connectSuccess, connectRequest } from '../actions/connect'; -import { setActiveUser } from '../actions/activeUsers'; -import { someoneTyping, roomMessageReceived } from '../actions/room'; -import { setRoles } from '../actions/roles'; import subscribeRooms from './methods/subscriptions/rooms'; import subscribeRoom from './methods/subscriptions/room'; @@ -28,11 +25,12 @@ import getSettings from './methods/getSettings'; import getRooms from './methods/getRooms'; import getPermissions from './methods/getPermissions'; import getCustomEmoji from './methods/getCustomEmojis'; +import getRoles from './methods/getRoles'; import canOpenRoom from './methods/canOpenRoom'; -import _buildMessage from './methods/helpers/buildMessage'; import loadMessagesForRoom from './methods/loadMessagesForRoom'; import loadMissedMessages from './methods/loadMissedMessages'; +import loadThreadMessages from './methods/loadThreadMessages'; import sendMessage, { getMessage, sendMessageCall } from './methods/sendMessage'; import { sendFileMessage, cancelUpload, isUploadActive } from './methods/sendFileMessage'; @@ -43,7 +41,7 @@ import { roomsRequest } from '../actions/rooms'; const TOKEN_KEY = 'reactnativemeteor_usertoken'; const SORT_PREFS_KEY = 'RC_SORT_PREFS_KEY'; const returnAnArray = obj => obj || []; -const MIN_ROCKETCHAT_VERSION = '0.66.0'; +const MIN_ROCKETCHAT_VERSION = '0.70.0'; const RocketChat = { TOKEN_KEY, @@ -65,7 +63,7 @@ const RocketChat = { if (data.length) { return resolve(data[0]); } - data.addListener(() => { + safeAddListener(data, () => { if (!data.length) { return; } data.removeAllListeners(); resolve(data[0]); @@ -80,26 +78,24 @@ const RocketChat = { console.warn(`AsyncStorage error: ${ error.message }`); } }, - async testServer(server) { + async getServerInfo(server) { try { - const result = await fetch(`${ server }/api/v1/info`).then(response => response.json()); - if (result.success && result.info) { - if (semver.lt(result.info.version, MIN_ROCKETCHAT_VERSION)) { + const result = await fetch(`${ server }/api/info`).then(response => response.json()); + if (result.success) { + if (semver.lt(result.version, MIN_ROCKETCHAT_VERSION)) { return { success: false, message: 'Invalid_server_version', messageOptions: { - currentVersion: result.info.version, + currentVersion: result.version, minVersion: MIN_ROCKETCHAT_VERSION } }; } - return { - success: true - }; + return result; } } catch (e) { - log('testServer', e); + log('getServerInfo', e); } return { success: false, @@ -114,25 +110,52 @@ const RocketChat = { reduxStore.dispatch(setUser(ddpMessage.fields)); } - if (this._setUserTimer) { - clearTimeout(this._setUserTimer); - this._setUserTimer = null; + if (ddpMessage.cleared && user && user.id === ddpMessage.id) { + reduxStore.dispatch(setUser({ status: 'offline' })); } - this._setUserTimer = setTimeout(() => { - reduxStore.dispatch(setActiveUser(this.activeUsers)); - this._setUserTimer = null; - return this.activeUsers = {}; - }, 2000); + if (!this._setUserTimer) { + this._setUserTimer = setTimeout(() => { + const batchUsers = this.activeUsers; + InteractionManager.runAfterInteractions(() => { + database.memoryDatabase.write(() => { + Object.keys(batchUsers).forEach((key) => { + if (batchUsers[key] && batchUsers[key].id) { + try { + const data = batchUsers[key]; + if (data.removed) { + const userRecord = database.memoryDatabase.objectForPrimaryKey('activeUsers', data.id); + if (userRecord) { + userRecord.status = 'offline'; + } + } else { + database.memoryDatabase.create('activeUsers', data, true); + } + } catch (error) { + console.log(error); + } + } + }); + }); + }); + this._setUserTimer = null; + return this.activeUsers = {}; + }, 10000); + } - const activeUser = reduxStore.getState().activeUsers[ddpMessage.id]; if (!ddpMessage.fields) { - this.activeUsers[ddpMessage.id] = {}; + this.activeUsers[ddpMessage.id] = { + id: ddpMessage.id, + removed: true + }; } else { - this.activeUsers[ddpMessage.id] = { ...this.activeUsers[ddpMessage.id], ...activeUser, ...ddpMessage.fields }; + this.activeUsers[ddpMessage.id] = { + id: ddpMessage.id, ...this.activeUsers[ddpMessage.id], ...ddpMessage.fields + }; } }, async loginSuccess({ user }) { + EventEmitter.emit('connected'); reduxStore.dispatch(setUser(user)); reduxStore.dispatch(roomsRequest()); @@ -141,11 +164,18 @@ const RocketChat = { } this.roomsSub = await this.subscribeRooms(); - this.sdk.subscribe('activeUsers'); - this.sdk.subscribe('roles'); this.getPermissions(); this.getCustomEmoji(); + this.getRoles(); this.registerPushToken().catch(e => console.log(e)); + + if (this.activeUsersSubTimeout) { + clearTimeout(this.activeUsersSubTimeout); + this.activeUsersSubTimeout = false; + } + this.activeUsersSubTimeout = setTimeout(() => { + this.sdk.subscribe('activeUsers'); + }, 5000); }, connect({ server, user }) { database.setActiveDB(server); @@ -190,53 +220,6 @@ const RocketChat = { }); this.sdk.onStreamData('users', protectedFunction(ddpMessage => RocketChat._setUser(ddpMessage))); - - this.sdk.onStreamData('stream-room-messages', (ddpMessage) => { - // TODO: debounce - const message = _buildMessage(ddpMessage.fields.args[0]); - requestAnimationFrame(() => reduxStore.dispatch(roomMessageReceived(message))); - }); - - this.sdk.onStreamData('stream-notify-room', protectedFunction((ddpMessage) => { - const [_rid, ev] = ddpMessage.fields.eventName.split('/'); - if (ev === 'typing') { - reduxStore.dispatch(someoneTyping({ _rid, username: ddpMessage.fields.args[0], typing: ddpMessage.fields.args[1] })); - } else if (ev === 'deleteMessage') { - database.write(() => { - if (ddpMessage && ddpMessage.fields && ddpMessage.fields.args.length > 0) { - const { _id } = ddpMessage.fields.args[0]; - const message = database.objects('messages').filtered('_id = $0', _id); - database.delete(message); - } - }); - } - })); - - this.sdk.onStreamData('rocketchat_roles', protectedFunction((ddpMessage) => { - this.roles = this.roles || {}; - - if (this.roleTimer) { - clearTimeout(this.roleTimer); - this.roleTimer = null; - } - this.roleTimer = setTimeout(() => { - reduxStore.dispatch(setRoles(this.roles)); - - database.write(() => { - foreach(this.roles, (description, _id) => { - try { - database.create('roles', { _id, description }, true); - } catch (e) { - log('create roles', e); - } - }); - }); - - this.roleTimer = null; - return this.roles = {}; - }, 1000); - this.roles[ddpMessage.id] = (ddpMessage.fields && ddpMessage.fields.description) || undefined; - })); }, register(credentials) { @@ -309,7 +292,8 @@ const RocketChat = { language: result.me.language, status: result.me.status, customFields: result.me.customFields, - emails: result.me.emails + emails: result.me.emails, + roles: result.me.roles }; return user; } catch (e) { @@ -326,6 +310,11 @@ const RocketChat = { this.roomsSub.stop(); } + if (this.activeUsersSubTimeout) { + clearTimeout(this.activeUsersSubTimeout); + this.activeUsersSubTimeout = false; + } + try { await this.removePushToken(); } catch (error) { @@ -377,6 +366,7 @@ const RocketChat = { }, loadMissedMessages, loadMessagesForRoom, + loadThreadMessages, getMessage, sendMessage, getRooms, @@ -421,8 +411,6 @@ const RocketChat = { data = data.filtered('t != $0', 'd'); } data = data.slice(0, 7); - const array = Array.from(data); - data = JSON.parse(JSON.stringify(array)); const usernames = data.map(sub => sub.name); try { @@ -473,6 +461,7 @@ const RocketChat = { getSettings, getPermissions, getCustomEmoji, + getRoles, parseSettings: settings => settings.reduce((ret, item) => { ret[item._id] = item[defaultSettings[item._id].type]; return ret; @@ -551,6 +540,9 @@ const RocketChat = { unsubscribe(subscription) { return this.sdk.unsubscribe(subscription); }, + onStreamData(...args) { + return this.sdk.onStreamData(...args); + }, emitTyping(room, t = true) { const { login } = reduxStore.getState(); return this.sdk.methodCall('stream-notify-room', `${ room }/typing`, login.user.username, t); @@ -572,9 +564,9 @@ const RocketChat = { // RC 0.64.0 return this.sdk.post('rooms.favorite', { roomId, favorite }); }, - getRoomMembers(rid, allUsers) { + getRoomMembers(rid, allUsers, skip = 0, limit = 10) { // RC 0.42.0 - return this.sdk.methodCall('getUsersOfRoom', rid, allUsers); + return this.sdk.methodCall('getUsersOfRoom', rid, allUsers, { skip, limit }); }, getUserRoles() { // RC 0.27.0 @@ -584,16 +576,19 @@ const RocketChat = { // RC 0.65.0 return this.sdk.get(`${ this.roomTypeToApiType(t) }.counters`, { roomId }); }, - async getRoomMember(rid, currentUserId) { - try { - if (rid === `${ currentUserId }${ currentUserId }`) { - return Promise.resolve(currentUserId); - } - const membersResult = await RocketChat.getRoomMembers(rid, true); - return Promise.resolve(membersResult.records.find(m => m._id !== currentUserId)); - } catch (error) { - return Promise.reject(error); + getChannelInfo(roomId) { + // RC 0.48.0 + return this.sdk.get('channels.info', { roomId }); + }, + getUserInfo(userId) { + // RC 0.48.0 + return this.sdk.get('users.info', { userId }); + }, + getRoomMemberId(rid, currentUserId) { + if (rid === `${ currentUserId }${ currentUserId }`) { + return currentUserId; } + return rid.replace(currentUserId, '').trim(); }, toggleBlockUser(rid, blocked, block) { if (block) { @@ -649,21 +644,29 @@ const RocketChat = { // RC 0.51.0 return this.sdk.methodCall('addUsersToRoom', { rid, users }); }, + getSingleMessage(msgId) { + // RC 0.57.0 + return this.sdk.methodCall('getSingleMessage', msgId); + }, hasPermission(permissions, rid) { - let roles = []; + let roomRoles = []; try { // get the room from realm - const room = database.objects('subscriptions').filtered('rid = $0', rid)[0]; + const [room] = database.objects('subscriptions').filtered('rid = $0', rid); + if (!room) { + return permissions.reduce((result, permission) => { + result[permission] = false; + return result; + }, {}); + } // get room roles - roles = room.roles; // eslint-disable-line prefer-destructuring + roomRoles = room.roles; } catch (error) { console.log('hasPermission -> error', error); } // get permissions from realm const permissionsFiltered = database.objects('permissions') .filter(permission => permissions.includes(permission._id)); - // transform room roles to array - const roomRoles = Array.from(Object.keys(roles), i => roles[i].value); // get user roles on the server from redux const userRoles = (reduxStore.getState().login.user && reduxStore.getState().login.user.roles) || []; // merge both roles @@ -675,7 +678,7 @@ const RocketChat = { result[permission] = false; const permissionFound = permissionsFiltered.find(p => p._id === permission); if (permissionFound) { - result[permission] = returnAnArray(permissionFound.roles).some(r => mergedRoles.includes(r.value)); + result[permission] = returnAnArray(permissionFound.roles).some(r => mergedRoles.includes(r)); } return result; }, {}); @@ -762,6 +765,25 @@ const RocketChat = { roomId, searchText }); + }, + toggleFollowMessage(mid, follow) { + // RC 1.0 + if (follow) { + return this.sdk.methodCall('followMessage', { mid }); + } + return this.sdk.methodCall('unfollowMessage', { mid }); + }, + getThreadsList({ rid, count, offset }) { + // RC 1.0 + return this.sdk.get('chat.getThreadsList', { + rid, count, offset, sort: { ts: -1 } + }); + }, + getSyncThreadsList({ rid, updatedSince }) { + // RC 1.0 + return this.sdk.get('chat.syncThreadsList', { + rid, updatedSince + }); } }; diff --git a/app/lib/selection.json b/app/lib/selection.json index 9630df272..0c25def09 100755 --- a/app/lib/selection.json +++ b/app/lib/selection.json @@ -1 +1 @@ -{"IcoMoonType":"selection","icons":[{"icon":{"paths":["M511.152 360.583c22.304 0 40.392 18.051 40.392 40.327v233.944c0 22.275-18.088 40.327-40.392 40.327s-40.392-18.051-40.392-40.327v-233.944c0-22.275 18.088-40.327 40.392-40.327zM49.119 863.747l413.955-740.751c14.588-26.104 48.090-35.845 75.032-21.957 9.656 4.977 17.597 12.61 22.82 21.957l413.955 740.751c16.58 29.668-5.594 65.533-40.020 65.533h-845.723c-34.426 0-56.599-35.865-40.020-65.533zM510.258 703.736c24.735 0 43.707 19.504 43.707 44.561 0 25.225-18.915 44.785-43.707 44.785s-43.707-19.56-43.707-44.785c0-25.056 18.972-44.561 43.707-44.561zM140.057 855.673h743.887l-371.943-665.573-371.943 665.573z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["warning"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":9,"id":115,"name":"warning","prevSize":32,"code":59651},"setIdx":3,"setId":5,"iconIdx":0},{"icon":{"paths":["M192 363.273v297.454h86.142l10.572 21.377c1.038 2.1 3.898 7.013 8.633 13.789 8.247 11.802 18.498 23.692 30.766 34.773 26.202 23.666 57.348 40.098 94.287 46.786v-531.14c-38.525 6.518-70.099 22.994-95.922 46.772-20.207 18.606-32.373 36.945-37.196 47.609l-10.21 22.579h-87.073zM115.2 686.327v-348.654c0-28.277 22.923-51.2 51.2-51.2h65.398c9.929-15.34 23.961-32.669 42.657-49.885 47.565-43.798 109.679-70.188 186.344-70.188 21.208 0 38.4 17.192 38.4 38.4v614.4c0 21.208-17.192 38.4-38.4 38.4-74.44 0-135.902-26.351-184.163-69.939-19.215-17.354-33.789-34.802-44.168-50.134h-66.069c-28.277 0-51.2-22.923-51.2-51.2zM671.024 687.393c-18.153-10.207-25.682-32.464-17.452-51.595 0.406-0.944 0.785-1.846 1.136-2.706 15.543-37.983 23.692-78.92 23.692-121.092 0-38.196-6.685-75.379-19.494-110.272-1.369-3.729-3.133-8.048-5.292-12.956-8.479-19.278-0.949-41.843 17.409-52.165 17.486-9.832 39.632-3.626 49.463 13.86 0.497 0.884 0.957 1.788 1.378 2.71 2.978 6.521 5.383 12.174 7.216 16.96 17.148 44.781 26.119 92.693 26.119 141.862 0 53.649-10.68 105.8-31.008 154.020-0.588 1.395-1.239 2.889-1.953 4.481l0.001 0.001c-8.25 18.402-29.857 26.632-48.259 18.382-1.008-0.452-1.995-0.949-2.958-1.491zM798.466 787.618c-18.347-10.316-25.51-33.12-16.356-52.074 1.158-2.395 2.188-4.585 3.090-6.569 30.65-67.393 46.8-140.98 46.8-216.975 0-77.121-16.632-151.762-48.171-219.966-0.535-1.158-1.118-2.392-1.747-3.702l0.001-0c-9.088-18.928-1.919-41.659 16.383-51.949 17.881-10.054 40.527-3.708 50.58 14.173 0.35 0.622 0.681 1.253 0.994 1.894 1.056 2.156 2.006 4.143 2.852 5.961 36.594 78.608 55.908 164.728 55.908 253.59 0 87.033-18.527 171.436-53.671 248.728-1.446 3.18-3.177 6.82-5.192 10.92l0.001 0c-9.039 18.386-31.271 25.964-49.657 16.926-0.614-0.302-1.219-0.62-1.815-0.955z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["volume"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":10,"id":114,"name":"volume","prevSize":32,"code":59652},"setIdx":3,"setId":5,"iconIdx":1},{"icon":{"paths":["M226.167 660.727l-81.802 71.829c-17.249-8.236-29.166-25.841-29.166-46.229v-348.654c0-28.277 22.923-51.2 51.2-51.2h65.398c9.929-15.34 23.961-32.669 42.657-49.885 47.565-43.798 109.679-70.188 186.344-70.188 21.208 0 38.4 17.192 38.4 38.4v216.18l-76.8 67.437v-242.104c-38.525 6.518-70.099 22.994-95.922 46.772-20.207 18.606-32.373 36.945-37.196 47.609l-10.21 22.579h-87.073v297.454h34.167zM355.626 751.596c19.822 12.498 41.994 21.37 66.774 25.856 0-20.591 0-36.035 0-46.33 0-8.481 0-21.202 0-38.163l76.8-67.442c0 26.928 0 47.125 0 60.589 0 29.577 0 73.941 0 133.095 0 21.208-17.192 38.4-38.4 38.4-64.739 0-119.664-19.931-164.625-53.797l59.451-52.207zM675.736 470.492l66.722-58.592c8.406 32.339 12.742 65.916 12.742 100.1 0 53.649-10.68 105.8-31.008 154.020-0.588 1.395-1.239 2.889-1.953 4.481l0.001 0.001c-8.25 18.402-29.857 26.632-48.259 18.382-1.008-0.452-1.995-0.949-2.958-1.491-18.153-10.207-25.682-32.464-17.452-51.595 0.406-0.944 0.785-1.846 1.136-2.706 15.543-37.983 23.692-78.92 23.692-121.092 0-13.993-0.897-27.85-2.664-41.508zM807.938 354.398l62.315-54.722c25.313 67.093 38.546 138.769 38.546 212.324 0 87.033-18.527 171.436-53.671 248.728-1.446 3.18-3.177 6.82-5.192 10.92l0.001 0c-9.039 18.386-31.271 25.964-49.657 16.926-0.614-0.302-1.219-0.62-1.815-0.955-18.347-10.316-25.51-33.12-16.356-52.074 1.158-2.395 2.188-4.585 3.090-6.569 30.65-67.393 46.8-140.98 46.8-216.975 0-54.218-8.22-107.21-24.062-157.602zM946.503 130.461c14.061 14.993 13.306 38.546-1.687 52.607-0.296 0.278-0.597 0.551-0.902 0.819l-811.178 712.336c-16.116 14.152-40.553 12.962-55.218-2.688-14.067-15.013-13.301-38.587 1.712-52.654 0.293-0.274 0.59-0.544 0.892-0.809l811.176-712.287c16.11-14.146 40.538-12.962 55.205 2.676z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["volume-mute"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":11,"id":113,"name":"volume-mute","prevSize":32,"code":59653},"setIdx":3,"setId":5,"iconIdx":2},{"icon":{"paths":["M846.779 659.382l0.202-147.149c0.019-14.138-11.426-25.616-25.565-25.635-2.659-0.004-5.303 0.407-7.836 1.218l-140.298 44.887v105.968l140.059 45.047c13.459 4.329 27.88-3.073 32.209-16.532 0.811-2.522 1.226-5.154 1.229-7.803zM598.819 719.874v-268.278c0-14.138-11.462-25.6-25.6-25.6h-370.756c-14.138 0-25.6 11.462-25.6 25.6v268.278c0 14.138 11.462 25.6 25.6 25.6h370.756c14.138 0 25.6-11.462 25.6-25.6zM892.302 415.085c18.566 13.369 29.189 35.29 29.189 60.209v220.784c0 24.919-10.673 46.791-29.189 60.16-11.964 8.601-26.261 12.976-41.352 12.976-8.389 0-16.978-1.327-25.516-4.079l-152.153-48.954v51.819c0 28.277-22.923 51.2-51.2 51.2h-468.482c-28.277 0-51.2-22.923-51.2-51.2v-364.529c0-28.277 22.923-51.2 51.2-51.2h468.482c28.277 0 51.2 22.923 51.2 51.2v51.672l152.202-48.905c23.977-7.717 48.302-4.473 66.818 8.847zM226.5 241.663v0c0-20.359 16.504-36.863 36.863-36.863h248.947c20.359 0 36.863 16.504 36.863 36.863v0c0 20.359-16.504 36.863-36.863 36.863h-248.947c-20.359 0-36.863-16.504-36.863-36.863z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["video"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":12,"id":112,"name":"video","prevSize":32,"code":59654},"setIdx":3,"setId":5,"iconIdx":3},{"icon":{"paths":["M218.87 797.637c9.606 3.608 21.53 7.28 35.985 10.849 59.123 14.598 143.466 23.514 257.146 23.514s198.023-8.916 257.146-23.514c14.454-3.569 26.378-7.241 35.985-10.849-6.496-56.39-38.135-87.347-99.936-113.172-8.559-3.577-17.471-6.998-29.283-11.314 2.748 1.004-22.903-8.286-29.518-10.774-60.736-22.842-89.594-44.548-89.484-88.671-0.075-1.028-0.075-1.028-0.204-3.673-0.731-17.527 0.562-37.647 5.737-57.807 5.146-20.046 13.648-37.544 27.874-52.383 33.963-33.045 49.684-67.214 49.684-118.501 0-83.443-58.409-149.344-128-149.344s-128 65.901-128 149.344c0 51.244 15.357 84.513 49.491 119.13 13.437 13.696 22.254 30.903 27.646 50.494 5.659 20.562 7.040 41.089 6.179 59.081-0.163 2.919-0.163 2.919-0.116 0.759 0 47.022-28.858 68.728-89.594 91.57-6.615 2.488-32.266 11.777-29.518 10.774-11.812 4.315-20.724 7.737-29.283 11.314-61.801 25.825-93.44 56.782-99.936 113.172zM140.8 821.133c0-107.358 52.685-167.534 148.394-207.529 9.82-4.104 19.726-7.907 32.54-12.589-2.308 0.843 22.741-8.229 28.838-10.521 31.709-11.925 39.829-18.033 39.971-22.993-0.015 0.223-0.015 0.223 0.061-1.121 0.507-10.589-0.369-23.607-3.513-35.032-2.19-7.958-5.172-13.777-8.354-17.020-47.496-48.169-71.537-100.249-71.537-172.984 0-123.933 90.591-226.144 204.8-226.144s204.8 102.211 204.8 226.144c0 72.96-24.682 126.604-71.953 172.563-2.969 3.104-5.88 9.097-8.016 17.416-2.989 11.645-3.838 24.838-3.392 35.51 0.063 1.261 0.063 1.261 0.161 3.976 0 1.653 8.12 7.76 39.829 19.686 6.097 2.293 31.146 11.365 28.838 10.521 12.813 4.681 22.719 8.485 32.54 12.589 95.71 39.995 148.394 100.171 148.394 207.529v19.301l-15.489 11.516c-12.629 9.39-38.034 20.697-80.156 31.098-65.585 16.194-156.017 25.753-275.556 25.753s-209.97-9.559-275.556-25.753c-42.121-10.4-67.526-21.708-80.156-31.098l-15.489-11.516v-19.301z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["user"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":13,"id":111,"name":"user","prevSize":32,"code":59655},"setIdx":3,"setId":5,"iconIdx":4},{"icon":{"paths":["M839.68 812.373c0 11.469-7.1 21.19-17.094 25.231-11.414-68.704-54.668-111.138-124.191-140.138-11.196-4.588-47.732-18.022-51.555-19.333-13.053-4.97-21.245-8.738-25.832-11.851-0.164-7.591 0.492-16.876 2.567-24.904 1.365-5.352 3.058-8.793 4.205-9.994 40.305-39.103 61.658-85.415 61.658-147.838 0-106.441-78.316-194.533-177.439-194.533s-177.439 88.091-177.439 194.533c0 62.205 20.808 107.151 61.44 148.275 1.311 1.365 3.058 4.697 4.424 9.776 2.185 7.864 2.895 17.094 2.621 24.685-4.588 3.113-12.78 6.881-25.887 11.851-3.768 1.311-40.359 14.746-51.5 19.333-69.523 29-112.777 71.434-124.245 140.138-9.994-3.987-17.094-13.763-17.094-25.231v-600.747c0-15.073 12.288-27.307 27.307-27.307h600.747c15.073 0 27.307 12.233 27.307 27.307v600.747zM405.504 754.975c53.084-19.988 79.244-39.649 79.299-83.831 0.765-15.674-0.437-33.369-5.407-51.337-4.806-17.531-12.78-32.986-25.068-45.493-26.324-26.651-37.847-51.5-37.847-90.767 0-63.188 43.964-112.613 95.519-112.613 51.61 0 95.519 49.425 95.519 112.613 0 39.267-11.742 64.771-37.792 90.112-13.271 13.708-20.862 29.437-25.504 47.35-4.478 17.531-5.625 34.843-4.97 50.080 0.109 2.348 0.109 2.348 0.164 3.331-0.109 40.905 26.051 60.566 79.080 80.555 4.314 1.529 38.939 14.199 48.387 18.132 40.25 16.766 63.242 35.717 72.363 66.574h-454.492c9.175-30.857 32.113-49.807 72.417-66.574 9.448-3.932 43.964-16.548 48.333-18.132zM812.373 102.4h-600.747c-60.293 0-109.227 48.934-109.227 109.227v600.747c0 60.348 48.934 109.227 109.227 109.227h600.747c60.293 0 109.227-48.879 109.227-109.227v-600.747c0-60.293-48.934-109.227-109.227-109.227z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["user-rounded"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":14,"id":110,"name":"user-rounded","prevSize":32,"code":59656},"setIdx":3,"setId":5,"iconIdx":5},{"icon":{"paths":["M331.532 803.498c38.087 9.46 92.556 15.252 166.070 15.252s127.983-5.792 166.070-15.252c1.811-0.45 3.786-0.977 5.925-1.581l-0.001-0.003c8.162-2.306 12.908-10.792 10.602-18.954-0.067-0.237-0.14-0.472-0.218-0.706-3.314-9.883-6.801-17.137-10.462-21.764-10.418-13.167-26.15-23.175-47.822-32.286-8.815-3.705-44.918-16.974-38.047-14.375-40.557-15.344-60.132-30.155-60.053-60.463-0.052-0.716-0.052-0.716-0.138-2.494-0.485-11.695 0.371-25.086 3.81-38.562 3.453-13.533 9.183-25.394 18.894-35.583 21.483-21.027 31.345-42.589 31.345-75.256 0-52.915-36.621-94.48-79.904-94.48s-79.904 41.565-79.904 94.48c0 32.647 9.636 53.647 31.27 75.718 9.119 9.35 15.063 21.018 18.683 34.251 3.765 13.763 4.68 27.441 4.108 39.46-0.072 32.774-19.646 47.586-60.202 62.929 6.863-2.597-29.235 10.67-38.049 14.375-22.603 9.502-38.745 19.98-49.136 34-3.225 4.352-6.321 11.060-9.289 20.124l0 0c-2.639 8.062 1.757 16.737 9.819 19.376 0.197 0.064 0.395 0.125 0.595 0.181 2.181 0.617 4.192 1.155 6.034 1.612zM279.485 265.898h79.904c17.891 0 32.394 14.503 32.394 32.394v0c0 17.891-14.503 32.394-32.394 32.394h-79.904v79.904c0 17.891-14.503 32.394-32.394 32.394v0c-17.891 0-32.394-14.503-32.394-32.394v-79.904h-79.904c-17.891 0-32.394-14.503-32.394-32.394v0c0-17.891 14.503-32.394 32.394-32.394h79.904v-79.904c0-17.891 14.503-32.394 32.394-32.394v0c17.891 0 32.394 14.503 32.394 32.394v79.904zM413.493 626.257c-1.3-4.751-3.012-8.113-4.672-9.815-31.342-31.976-47.271-66.689-47.271-114.972 0-82.454 60.066-150.629 136.053-150.629s136.053 68.174 136.053 150.629c0 48.437-16.356 84.197-47.509 114.663-1.524 1.603-3.201 5.075-4.473 10.059-1.859 7.285-2.393 15.64-2.115 22.352 0.038 0.772 0.038 0.772 0.107 2.714 0-0.642 4.42 2.703 23.851 10.054-8.126-3.074 29.733 10.84 39.938 15.129 63.15 26.546 98.179 66.795 98.179 138.222v14.061l-11.26 8.421c-8.556 6.399-25.434 13.956-53.167 20.845-42.837 10.64-101.782 16.908-179.606 16.908s-136.769-6.268-179.606-16.908c-27.733-6.888-44.611-14.445-53.167-20.845l-11.26-8.421v-14.061c0-71.428 35.029-111.676 98.179-138.222 10.204-4.29 48.064-18.204 39.938-15.129 19.162-7.249 23.726-10.602 23.948-12.384 0.355-7.334-0.195-15.555-2.142-22.672zM843.638 623.533c1.973-0.49 4.14-1.072 6.5-1.745l0.001 0.003c8.159-2.327 12.888-10.827 10.561-18.986-0.014-0.050-0.029-0.101-0.044-0.151-1.569-5.295-3.144-9.409-4.725-12.341-9.83-18.223-27.528-30.833-54.27-42.074-8.814-3.705-44.912-16.972-38.049-14.375-40.556-15.344-60.13-30.155-60.202-62.929-0.572-12.019 0.343-25.697 4.108-39.46 3.62-13.233 9.564-24.901 18.683-34.251 21.634-22.071 31.27-43.071 31.27-75.718 0-52.915-36.621-94.48-79.904-94.48-26.417 0-50.352 15.483-64.995 39.579-6.233 10.257-11.202 23.644-14.91 40.161h-56.149c2.611-17.627 6.283-32.54 11.016-44.737 20.7-53.351 68.455-91.152 125.038-91.152 75.987 0 136.053 68.174 136.053 150.629 0 48.284-15.929 82.996-47.271 114.972-1.66 1.702-3.372 5.064-4.672 9.815-1.947 7.117-2.497 15.338-2.142 22.672 0.222 1.781 4.786 5.134 23.948 12.384-8.126-3.074 29.733 10.84 39.938 15.129 63.15 26.546 98.179 66.795 98.179 138.222v0c0 8.85-4.173 17.182-11.26 22.482-8.556 6.399-25.434 13.956-53.167 20.845-18.942 4.705-41.378 8.602-67.626 11.477-11.504 1.26-25.438 2.685-41.802 4.273v-56.134c13.095-1.465 24.991-2.783 35.688-3.954 23.822-2.609 43.786-6.077 60.204-10.155z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["user-plus"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":15,"id":109,"name":"user-plus","prevSize":32,"code":59657},"setIdx":3,"setId":5,"iconIdx":6},{"icon":{"paths":["M806.86 327.115c99.002 16.485 174.473 102.538 174.473 206.218 0 115.464-93.602 209.067-209.067 209.067h-62.587c-21.208 0-38.4-17.192-38.4-38.4s17.192-38.4 38.4-38.4h62.587c73.049 0 132.267-59.218 132.267-132.267s-59.218-132.267-132.267-132.267h-38.4v-38.4c0-49.485-40.115-89.6-89.6-89.6-21.784 0-42.268 7.752-58.425 21.666l-30.468 26.237-24.808-31.643c-28.976-36.958-73.12-58.927-120.965-58.927-84.831 0-153.6 68.769-153.6 153.6 0 17.692 2.976 34.924 8.73 51.203l18.095 51.197h-65.226c-49.485 0-89.6 40.115-89.6 89.6s40.115 89.6 89.6 89.6h65.228c21.208 0 38.4 17.192 38.4 38.4s-17.192 38.4-38.4 38.4h-65.228c-91.9 0-166.4-74.5-166.4-166.4 0-79.358 55.552-145.741 129.89-162.382-1.255-9.763-1.89-19.651-1.89-29.618 0-127.246 103.154-230.4 230.4-230.4 59.366 0 115.051 22.632 157.077 61.83 23.581-12.446 50.090-19.163 77.59-19.163 79.698 0 146.31 56.030 162.594 130.849zM322.543 590.437c-14.996-14.996-14.996-39.31 0-54.306l144.815-144.815c19.995-19.995 52.413-19.995 72.408 0l144.815 144.815c14.996 14.996 14.996 39.31 0 54.306s-39.31 14.996-54.306 0l-85.965-85.965v312.679c0 21.208-17.192 38.4-38.4 38.4s-38.4-17.192-38.4-38.4v-317.376l-90.662 90.662c-14.996 14.996-39.31 14.996-54.306 0z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["upload"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":16,"id":108,"name":"upload","prevSize":32,"code":59658},"setIdx":3,"setId":5,"iconIdx":7},{"icon":{"paths":["M837.448 345.039c0.456 7.302 0.456 14.558 0.456 21.814 0 221.97-168.896 477.711-477.665 477.711-95.15 0-183.5-27.564-257.84-75.39 13.508 1.597 26.468 2.099 40.524 2.099 78.493 0 150.779-26.514 208.462-71.739-71.817-1.308-134.88-48.073-156.986-116.416 10.405 1.552 20.81 2.556 31.717 2.556 15.060 0 30.119-2.054 44.175-5.704-78.372-15.862-134.692-84.782-134.624-164.744v-2.099c22.361 12.458 48.373 20.262 75.892 21.312-46.789-31.135-74.885-83.625-74.842-139.827 0-31.215 8.306-59.782 22.818-84.745 85.298 104.986 211.14 168.844 346.235 175.696-2.693-12.648-4.085-25.539-4.153-38.471-0.036-44.539 17.641-87.264 49.134-118.758s74.219-49.171 118.758-49.134c46.476-0.11 90.907 19.098 122.668 53.028 37.601-7.249 73.657-20.976 106.559-40.57-12.513 38.803-38.75 71.709-73.792 92.548 33.335-3.805 65.914-12.573 96.656-26.012-22.981 33.478-51.447 62.838-84.197 86.844h0.046z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["twitter"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":17,"id":107,"name":"twitter","prevSize":32,"code":59659},"setIdx":3,"setId":5,"iconIdx":8},{"icon":{"paths":["M622.040 176.873h147.318c41.655 0 75.442 33.116 75.442 74.428v65.873c0 25.466-18.591 46.589-42.942 50.537v479.479c0 41.057-33.95 74.409-75.255 74.409h-429.207c-41.529 0-75.255-33.3-75.255-74.409v-468.242c0-3.775 0.287-7.484 0.84-11.109-24.762-3.594-43.782-24.909-43.782-50.667v-65.873c0-41.17 33.806-74.428 75.442-74.428h147.318c17.178-43.592 59.97-74.473 110.040-74.473s92.862 30.881 110.040 74.473zM544.212 176.873c-8.972-6.68-20.125-10.639-32.212-10.639s-23.24 3.959-32.212 10.639h64.423zM737.445 368.374h-440.049c-5.855 0-10.842 4.899-10.842 10.575v468.242c0 5.802 4.834 10.575 10.842 10.575h429.207c5.855 0 10.842-4.899 10.842-10.575v-478.817zM297.397 304.54h482.991v-53.239c0-5.9-4.79-10.595-11.029-10.595h-514.715c-6.167 0-11.029 4.784-11.029 10.595v53.239h53.784zM426.116 474.764c17.787 0 32.206 14.419 32.206 32.206v212.2c0 17.787-14.419 32.206-32.206 32.206s-32.206-14.419-32.206-32.206v-212.2c0-17.787 14.419-32.206 32.206-32.206zM597.884 474.764c17.787 0 32.206 14.419 32.206 32.206v212.2c0 17.787-14.419 32.206-32.206 32.206s-32.206-14.419-32.206-32.206v-212.2c0-17.787 14.419-32.206 32.206-32.206z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["trash"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":18,"id":106,"name":"trash","prevSize":32,"code":59660},"setIdx":3,"setId":5,"iconIdx":9},{"icon":{"paths":["M792.869 153.6c71.013 0 128.731 57.020 128.731 127.174v462.452c0 70.154-57.718 127.174-128.731 127.174h-561.737c-71.013 0-128.731-57.020-128.731-127.174v-462.452c0-70.154 57.718-127.174 128.731-127.174h561.737zM792.869 801.032c32.253 0 58.514-25.944 58.514-57.806v-104.052h-444.709v161.858h386.194zM172.617 743.226c0 31.863 26.261 57.806 58.514 57.806h105.326v-161.858h-163.84v104.052zM231.131 222.968c-32.253 0-58.514 25.944-58.514 57.806v57.806h163.84v-115.613h-105.326zM851.383 280.774c0-31.863-26.261-57.806-58.514-57.806h-386.194v115.613h444.709v-57.806zM172.617 569.806h163.84v-161.858h-163.84v161.858zM406.674 569.806h444.709v-161.858h-444.709v161.858z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["th-list"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":19,"id":105,"name":"th-list","prevSize":32,"code":59661},"setIdx":3,"setId":5,"iconIdx":10},{"icon":{"paths":["M351.569 797.703c36.794 9.632 89.413 15.529 160.431 15.529s123.637-5.897 160.431-15.529c0 0 0 0 0 0v0c10.921-2.859 17.456-14.029 14.598-24.95-0.149-0.571-0.323-1.135-0.522-1.69-2.676-7.499-5.463-13.186-8.363-17.061-10.064-13.449-25.282-23.663-46.264-32.959-8.515-3.773-43.393-17.282-36.755-14.635-39.18-15.622-58.090-30.703-58.014-61.561-0.050-0.729-0.050-0.729-0.133-2.539-0.469-11.908 0.358-25.541 3.68-39.262 3.336-13.778 8.871-25.855 18.252-36.229 20.753-21.408 30.28-43.362 30.28-76.622 0-53.876-35.378-96.194-77.191-96.194s-77.191 42.319-77.191 96.194c0 33.24 9.309 54.621 30.208 77.092 8.809 9.52 14.551 21.4 18.049 34.873 3.638 14.012 4.521 27.939 3.969 40.176-0.070 33.369-18.979 48.449-58.158 64.071 6.63-2.644-28.242 10.864-36.757 14.636-24.379 10.801-40.978 22.842-50.75 39.757-1.444 2.499-2.87 5.803-4.278 9.913l-0.001-0c-3.741 10.919 2.078 22.803 12.997 26.544 0.488 0.167 0.982 0.316 1.481 0.447 0 0 0 0 0 0zM430.746 617.245c-1.256-4.837-2.91-8.26-4.514-9.993-30.278-32.556-45.666-67.899-45.666-117.059 0-83.951 58.027-153.363 131.434-153.363s131.434 69.412 131.434 153.363c0 49.316-15.8 85.725-45.896 116.745-1.472 1.632-3.093 5.167-4.321 10.241-1.796 7.417-2.312 15.924-2.043 22.758 0.037 0.786 0.037 0.786 0.103 2.763 0-0.653 4.27 2.752 23.042 10.237-7.85-3.13 28.724 11.036 38.581 15.404 61.006 27.028 94.846 68.007 94.846 140.731v0.465c0 8.746-4.009 17.010-10.878 22.425-8.266 6.515-24.57 14.21-51.362 21.223-41.382 10.833-98.326 17.215-173.507 17.215s-132.124-6.382-173.507-17.215c-26.791-7.013-43.096-14.708-51.362-21.223v0c-6.869-5.414-10.878-13.678-10.878-22.425v-0.465c0-72.724 33.84-113.703 94.846-140.731 9.858-4.367 46.432-18.534 38.581-15.404 18.511-7.381 22.92-10.795 23.135-12.609 0.343-7.468-0.188-15.837-2.069-23.084zM177.715 614.472c15.86 4.152 35.147 7.683 58.16 10.34 10.333 1.193 27.284 2.535 50.853 4.026l-2.452 57.11c-25.091-1.589-43.193-3.025-54.307-4.308-25.357-2.927-47.031-6.895-65.329-11.685-26.791-7.013-43.096-14.708-51.362-21.223v0c-6.869-5.414-10.878-13.678-10.878-22.425v-0.465c0-72.724 33.84-113.703 94.846-140.731 9.832-4.356 46.236-18.458 38.644-15.429 18.458-7.364 22.858-10.772 23.072-12.584 0.343-7.468-0.188-15.837-2.069-23.084-1.256-4.837-2.91-8.26-4.514-9.993-30.278-32.556-45.666-67.899-45.666-117.059 0-83.951 58.027-153.363 131.434-153.363 54.993 0 101.354 38.956 121.153 93.797 4.42 12.242 8.54 25.746 12.362 40.512h-54.242c-4.898-13.865-10.304-25.99-16.217-36.376-14.12-24.801-37.374-40.765-63.056-40.765-41.813 0-77.191 42.319-77.191 96.194 0 33.24 9.309 54.621 30.208 77.092 8.809 9.52 14.551 21.4 18.049 34.873 3.638 14.012 4.521 27.939 3.969 40.176-0.070 33.369-18.979 48.449-58.158 64.071 6.63-2.644-28.242 10.864-36.757 14.636-27.095 12.004-44.579 25.54-53.763 45.595-1.181 2.579-2.371 6.104-3.57 10.575l0.001 0c-2.15 8.018 2.459 16.294 10.409 18.686 2.317 0.697 4.441 1.299 6.373 1.804zM846.285 614.472c1.918-0.502 4.026-1.099 6.324-1.79l0.001 0.002c7.966-2.396 12.578-10.697 10.404-18.727-1.339-4.944-2.674-8.809-4.004-11.593-9.309-19.484-26.653-32.758-53.275-44.553-8.515-3.772-43.387-17.28-36.757-14.636-39.179-15.622-58.089-30.703-58.158-64.071-0.552-12.237 0.331-26.164 3.969-40.176 3.497-13.473 9.24-25.353 18.049-34.873 20.899-22.472 30.208-43.852 30.208-77.092 0-53.876-35.378-96.194-77.191-96.194-25.224 0-48.105 15.4-62.292 39.447-6.22 10.544-11.207 23.109-14.96 37.694h-54.242c2.344-14.034 5.613-27.037 9.806-39.008 19.489-55.631 66.193-95.301 121.688-95.301 73.407 0 131.434 69.412 131.434 153.363 0 49.16-15.388 84.503-45.666 117.059-1.603 1.733-3.258 5.156-4.514 9.993-1.881 7.246-2.412 15.616-2.069 23.084 0.214 1.814 4.624 5.228 23.135 12.609-7.85-3.13 28.724 11.036 38.581 15.404 61.006 27.028 94.846 68.007 94.846 140.731v0.465c0 8.746-4.009 17.010-10.878 22.425-8.266 6.515-24.57 14.21-51.362 21.223-18.298 4.79-39.973 8.758-65.329 11.685-11.114 1.283-19.465 2.719-25.054 4.308v-57.11c40.965-6.809 66.734-11.598 77.308-14.366z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["team"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":20,"id":104,"name":"team","prevSize":32,"code":59662},"setIdx":3,"setId":5,"iconIdx":11},{"icon":{"paths":["M446.005 550.4h-190.005c-21.208 0-38.4-17.192-38.4-38.4v0c0-21.208 17.192-38.4 38.4-38.4h96.267c-5.026-13.916-7.479-29.497-7.479-46.85 0-83.525 68.25-139.1 170.625-139.1 74.737 0 133.658 34.233 157.596 87.145 1.273 2.813 2.497 6.146 3.673 9.997l-0.001 0c4.669 15.294-3.945 31.478-19.239 36.147-2.74 0.836-5.589 1.262-8.454 1.262v0c-19.004 0-36.432-10.569-45.215-27.422-0.851-1.631-1.703-3.076-2.558-4.334-16.494-24.267-47.195-38.444-86.777-38.444-57.525 0-95.875 27.625-95.875 69.875 0 22.951 11.611 39.18 38.604 51.725h310.834c21.208 0 38.4 17.192 38.4 38.4v0c0 21.208-17.192 38.4-38.4 38.4h-106.987c21.256 21.227 30.874 48.315 30.874 83.050 0 89.7-69.55 145.925-180.7 145.925-74.662 0-131.736-27.637-159.919-74.254-3.838-6.348-7.406-15.091-10.705-26.229l0-0c-4.519-15.256 4.186-31.287 19.443-35.806 2.656-0.787 5.412-1.186 8.182-1.186v0c19.865 0 38.134 10.884 47.59 28.355 3.288 6.073 6.708 10.829 10.262 14.268 19.781 19.141 51.485 30.178 90.673 30.178 58.5 0 101.4-30.225 101.4-71.825 0-35.75-27.3-57.2-89.375-71.825l-60.45-14.625c-7.818-1.827-15.243-3.834-22.283-6.025z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["strike"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":21,"id":103,"name":"strike","prevSize":32,"code":59663},"setIdx":3,"setId":5,"iconIdx":12},{"icon":{"paths":["M512 702.505l136.962 75.711c7.424 4.104 16.77 1.412 20.874-6.012 1.667-3.015 2.271-6.503 1.717-9.904l-26.352-161.551 112.325-115.124c5.924-6.072 5.804-15.796-0.267-21.721-2.296-2.24-5.236-3.705-8.407-4.19l-154.529-23.61-68.418-145.764c-3.604-7.679-12.752-10.983-20.431-7.378-3.245 1.523-5.855 4.133-7.378 7.378l-68.418 145.764-154.529 23.61c-8.386 1.281-14.145 9.118-12.864 17.504 0.484 3.171 1.95 6.111 4.19 8.407l112.325 115.124-26.352 161.551c-1.366 8.372 4.314 16.267 12.687 17.632 3.4 0.555 6.889-0.050 9.904-1.717l136.962-75.711zM272.433 838.351l34.767-213.14-149.132-152.849c-15.798-16.192-15.479-42.124 0.713-57.922 6.123-5.974 13.962-9.881 22.418-11.173l204.228-31.203 89.495-190.668c9.612-20.478 34.004-29.287 54.482-19.675 8.653 4.062 15.613 11.022 19.675 19.675l89.495 190.668 204.228 31.203c22.362 3.417 37.72 24.314 34.304 46.676-1.292 8.456-5.199 16.295-11.173 22.418l-149.132 152.849 34.767 213.14c3.642 22.327-11.505 43.378-33.832 47.020-9.068 1.479-18.369-0.133-26.41-4.578l-179.325-99.129-179.325 99.129c-19.798 10.944-44.719 3.767-55.664-16.032-4.445-8.041-6.057-17.343-4.578-26.41z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["star"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":22,"id":102,"name":"star","prevSize":32,"code":59664},"setIdx":3,"setId":5,"iconIdx":13},{"icon":{"paths":["M626.397 453.766c-4.1 10.953-12.803 16.765-24.728 16.765h-16.695c-8.318 0-15.234-3.647-20.087-10.592-4.873-6.974-5.963-14.981-3.163-23.392l91.103-255.538c4.1-10.953 12.803-16.765 24.728-16.765h24.284c11.925 0 20.628 5.812 24.767 16.873l91.114 255.577c2.75 8.264 1.66 16.271-3.213 23.245-4.853 6.946-11.77 10.592-20.087 10.592h-18.213c-11.023 0-19.151-5.921-23.285-16.973l-21.129-62.089h-84.194l-21.203 62.296zM710.343 329.968l-20.701-63.451-21.925 63.451h42.626zM407.956 688.223c14.571-14.255 38.056-14.255 52.627 0 14.77 14.45 14.77 38.036 0 52.486l-121.639 119c-14.571 14.255-38.056 14.255-52.627 0l-121.639-119c-14.77-14.45-14.77-38.036 0-52.486 14.571-14.255 38.056-14.255 52.627 0l57.934 56.677v-554.366c0-20.481 16.817-36.934 37.392-36.934s37.392 16.453 37.392 36.934v554.366l57.934-56.677zM780.76 796.736c6.867 0 12.918 2.496 17.771 7.358 4.89 4.899 7.423 11.062 7.423 18.071v12.163c0 7.009-2.533 13.172-7.423 18.071-4.854 4.862-10.904 7.358-17.771 7.358h-182.127c-6.867 0-12.918-2.496-17.771-7.358-4.89-4.899-7.423-11.062-7.423-18.071v-12.163c0-5.468 1.416-10.434 4.347-14.834l133.209-190.841h-104.772c-6.867 0-12.918-2.496-17.771-7.358-4.89-4.899-7.423-11.062-7.423-18.071v-12.163c0-7.009 2.533-13.172 7.423-18.071 4.854-4.862 10.904-7.358 17.771-7.358h173.021c6.867 0 12.918 2.496 17.771 7.358 4.89 4.899 7.423 11.062 7.423 18.071v12.163c0 4.57-1.474 9-4.345 13.311l-77.398 110.982c-29.564 42.526-48.847 70.177-57.423 81.382h115.489z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["sort"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":23,"id":101,"name":"sort","prevSize":32,"code":59665},"setIdx":3,"setId":5,"iconIdx":14},{"icon":{"paths":["M682.048 640l-170.048 170.048-170.048-170.048","M682.048 384l-170.048-170.048-170.048 170.048"],"attrs":[{"fill":"none","stroke":"rgb(203, 206, 209)","strokeLinejoin":"miter","strokeLinecap":"butt","strokeMiterlimit":"4","strokeWidth":96},{"fill":"none","stroke":"rgb(158, 162, 168)","strokeLinejoin":"miter","strokeLinecap":"butt","strokeMiterlimit":"4","strokeWidth":96}],"isMulticolor":false,"isMulticolor2":true,"grid":0,"tags":["sort-up"],"colorPermutations":{"2552552551291162451":[{"s":0},{"s":0}],"15816216812032062091":[{"s":1},{"s":0}]}},"attrs":[{"fill":"none","stroke":"rgb(203, 206, 209)","strokeLinejoin":"miter","strokeLinecap":"butt","strokeMiterlimit":"4","strokeWidth":96},{"fill":"none","stroke":"rgb(158, 162, 168)","strokeLinejoin":"miter","strokeLinecap":"butt","strokeMiterlimit":"4","strokeWidth":96}],"properties":{"order":24,"id":100,"name":"sort-up","prevSize":32,"code":59666},"setIdx":3,"setId":5,"iconIdx":15},{"icon":{"paths":["M682.048 384l-170.048-170.048-170.048 170.048","M682.048 640l-170.048 170.048-170.048-170.048"],"attrs":[{"fill":"none","stroke":"rgb(203, 206, 209)","strokeLinejoin":"miter","strokeLinecap":"butt","strokeMiterlimit":"4","strokeWidth":96},{"fill":"none","stroke":"rgb(158, 162, 168)","strokeLinejoin":"miter","strokeLinecap":"butt","strokeMiterlimit":"4","strokeWidth":96}],"isMulticolor":false,"isMulticolor2":true,"grid":0,"tags":["sort-down"],"colorPermutations":{"2552552551291162451":[{"s":0},{"s":0}],"15816216812032062091":[{"s":1},{"s":0}]}},"attrs":[{"fill":"none","stroke":"rgb(203, 206, 209)","strokeLinejoin":"miter","strokeLinecap":"butt","strokeMiterlimit":"4","strokeWidth":96},{"fill":"none","stroke":"rgb(158, 162, 168)","strokeLinejoin":"miter","strokeLinecap":"butt","strokeMiterlimit":"4","strokeWidth":96}],"properties":{"order":25,"id":99,"name":"sort-down","prevSize":32,"code":59667},"setIdx":3,"setId":5,"iconIdx":16},{"icon":{"paths":["M133.908 323.584c-17.401 0-31.508-15.129-31.508-33.792s14.106-33.792 31.508-33.792h462.113c17.401 0 31.508 15.129 31.508 33.792s-14.106 33.792-31.508 33.792h-462.113zM133.908 528.384c-17.401 0-31.508-15.129-31.508-33.792s14.106-33.792 31.508-33.792h378.092c17.401 0 31.508 15.129 31.508 33.792s-14.106 33.792-31.508 33.792h-378.092zM133.908 733.184c-17.401 0-31.508-15.129-31.508-33.792s14.106-33.792 31.508-33.792h294.072c17.401 0 31.508 15.129 31.508 33.792s-14.106 33.792-31.508 33.792h-294.072zM860.070 688.223c14.073-14.255 36.757-14.255 50.83 0 14.266 14.45 14.266 38.036 0 52.486l-117.485 119c-14.073 14.255-36.757 14.255-50.83 0l-117.485-119c-14.266-14.45-14.266-38.036 0-52.486 14.073-14.255 36.757-14.255 50.83 0l55.955 56.677v-554.366c0-20.481 16.243-36.934 36.115-36.934s36.115 16.453 36.115 36.934v554.366l55.955-56.677z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["sort-amount-down"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":26,"id":98,"name":"sort1","prevSize":32,"code":59648},"setIdx":3,"setId":5,"iconIdx":17},{"icon":{"paths":["M645.693 921.605h-492.029c-28.312 0-51.264-22.923-51.264-51.2v-716.8c0-28.277 22.952-51.2 51.264-51.2l508.89-0.007c28.277-0.002 51.202 22.919 51.204 51.196 0 0.002 0 0.003 0 0.005l-0.007 102.4h-76.896v-68.85h-448.617v649.71h448.617v-68.861h76.896l0.008 102.405c0.001 28.277-22.922 51.201-51.199 51.201-0.002 0-0.004 0-0.005 0l-16.173-0.007c-0.229 0.004-0.458 0.005-0.688 0.005zM698.094 393.607c-0.115-0.109-0.229-0.219-0.343-0.329-16.377-15.9-16.233-41.541 0.324-57.27 16.802-15.962 43.85-15.967 60.658-0.010l147.034 139.589c0.146 0.139 0.291 0.278 0.435 0.418 20.699 20.11 20.504 52.527-0.435 72.407l-147.034 139.589c-16.808 15.957-43.856 15.952-60.658-0.010-0.115-0.109-0.229-0.219-0.342-0.329-16.367-15.91-16.205-41.551 0.361-57.27l81.61-77.433h-379.359c-23.554 0-42.649-18.338-42.649-40.96s19.095-40.96 42.649-40.96h379.359l-81.61-77.433z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["sign-out"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":27,"id":97,"name":"sign-out","prevSize":32,"code":59668},"setIdx":3,"setId":5,"iconIdx":18},{"icon":{"paths":["M848.049 227.32c33.633 14.001 55.631 47.066 55.631 83.629 0 283.352-148.95 524.619-356.981 611.393-22.247 9.25-47.31 9.249-69.574-0.008-208.503-87.024-356.805-333.701-356.805-611.385 0-36.617 22.049-69.663 55.788-83.629l301.198-125.665c22.263-9.248 47.285-9.247 69.567 0.009l301.176 125.656zM515.949 847.874c172.552-68.548 307.095-297.014 306.959-536.924 0-4.129-2.328-7.66-6.016-9.199l-301.276-125.698c-2.305-0.981-5.081-0.973-7.489 0.042l-301.092 125.621c-3.695 1.568-6.1 5.201-6.1 9.235 0 239.977 134.63 468.41 307.148 536.874 2.621 1.050 5.424 1.053 7.866 0.050z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["shield"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":28,"id":96,"name":"shield","prevSize":32,"code":59669},"setIdx":3,"setId":5,"iconIdx":19},{"icon":{"paths":["M848.049 227.32c33.633 14.001 55.631 47.066 55.631 83.629 0 283.352-148.95 524.619-356.981 611.393-22.247 9.25-47.31 9.249-69.574-0.008-208.503-87.024-356.805-333.701-356.805-611.385 0-36.617 22.049-69.663 55.788-83.629l301.198-125.665c22.263-9.248 47.285-9.247 69.567 0.009l301.176 125.656zM515.949 847.874c172.552-68.548 307.095-297.014 306.959-536.924 0-4.129-2.328-7.66-6.016-9.199l-301.276-125.698c-2.305-0.981-5.081-0.973-7.489 0.042l-301.092 125.621c-3.695 1.568-6.1 5.201-6.1 9.235 0 239.977 134.63 468.41 307.148 536.874 2.621 1.050 5.424 1.053 7.866 0.050zM665.48 347.607c14.236-14.414 37.461-14.558 51.887-0.311 14.628 14.807 14.628 38.122 0.311 52.618l-239.682 242.678c-15.896 16.095-41.83 16.256-57.936 0.349l-0.348-0.349-102.257-103.535c-14.812-14.997-14.812-39.117 0-54.114 14.723-14.907 38.742-15.056 53.716-0.266l79.467 80.457 214.843-217.528z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["shield-check"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":29,"id":95,"name":"shield-check","prevSize":32,"code":59670},"setIdx":3,"setId":5,"iconIdx":20},{"icon":{"paths":["M848.049 227.32c33.633 14.001 55.631 47.066 55.631 83.629 0 283.352-148.95 524.619-356.981 611.393-22.247 9.25-47.31 9.249-69.574-0.008-208.503-87.024-356.805-333.701-356.805-611.385 0-36.617 22.049-69.663 55.788-83.629l301.198-125.665c22.263-9.248 47.285-9.247 69.567 0.009l301.176 125.656zM515.949 847.874c172.552-68.548 307.095-297.014 306.959-536.924 0-4.129-2.328-7.66-6.016-9.199l-301.276-125.698c-2.305-0.981-5.081-0.973-7.489 0.042l-301.092 125.621c-3.695 1.568-6.1 5.201-6.1 9.235 0 239.977 134.63 468.41 307.148 536.874 2.621 1.050 5.424 1.053 7.866 0.050zM364.244 386.457c9.881 79.955 46.236 161.347 109.356 244.214v-285.735l-109.356 41.521zM484.179 760.879c-126.028-132.474-192.633-265.254-199.003-398.202-0.796-16.605 9.184-31.836 24.725-37.737l188.469-71.559c25.128-9.541 52.031 9.021 52.031 35.899v445.131c0 34.674-42.322 51.59-66.221 26.468z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["shield-alt"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":30,"id":94,"name":"shield-alt","prevSize":32,"code":59671},"setIdx":3,"setId":5,"iconIdx":21},{"icon":{"paths":["M475.27 238.914l-74.979 72.125c-14.76 14.198-38.1 14.198-52.859 0v0c-14.041-13.507-14.474-35.839-0.968-49.88 0.316-0.329 0.639-0.651 0.968-0.968l128.539-123.647c19.822-19.068 51.168-19.068 70.99 0l128.539 123.647c14.041 13.507 14.474 35.839 0.968 49.88-0.316 0.329-0.639 0.651-0.968 0.968v0c-14.76 14.198-38.1 14.198-52.859 0l-73.91-71.097v409.378c0 20.286-16.445 36.73-36.73 36.73v0c-20.286 0-36.73-16.445-36.73-36.73v-410.406zM634.435 489.758v-70.665h107.965c28.277 0 51.2 22.923 51.2 51.2v400.107c0 28.277-22.923 51.2-51.2 51.2h-460.8c-28.277 0-51.2-22.923-51.2-51.2v-400.107c0-28.277 22.923-51.2 51.2-51.2h107.965v70.665h-85.704v361.177h416.278v-361.177h-85.704z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["share"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":31,"id":93,"name":"share","prevSize":32,"code":59672},"setIdx":3,"setId":5,"iconIdx":22},{"icon":{"paths":["M512.917 779.883l-64-232.448 317.542-261.018-253.542 493.466zM190.818 376.069l528.179-149.094-317.594 261.018-210.586-111.923zM913.199 116.536c-9.421-11.827-25.088-16.794-39.373-12.749l-795.034 224.512c-14.899 4.198-25.754 17.254-27.392 32.819-1.587 15.616 6.349 30.669 20.019 37.939l302.592 160.768 91.955 333.824c4.147 15.104 16.998 26.112 32.41 27.75 1.28 0.154 2.662 0.205 3.891 0.205 13.926 0 26.88-7.834 33.434-20.582l381.645-742.656c6.912-13.517 5.325-29.952-4.147-41.83z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["send"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":32,"id":92,"name":"send","prevSize":32,"code":59673},"setIdx":3,"setId":5,"iconIdx":23},{"icon":{"paths":["M19.721 504.267l312.885 327.111c43.945 45.945 122.505 15.269 122.505-49.156v-156.16c274.533 3.221 389.445 29.739 322.116 268.606-14.828 52.476 45.239 92.857 88.32 61.351 59.182-43.271 158.453-141.495 158.453-310.348 0-304.155-274.752-357.396-568.889-360.924v-156.718c0-64.48-78.606-95.051-122.507-49.156l-312.884 327.083c-26.295 27.502-26.295 70.809 0 98.311zM60.836 445.28l312.889-327.111c8.763-9.173 24.498-3.079 24.498 9.831v213.333c279.314 0 568.889 19.876 568.889 304.338 0 132.267-71.111 217.191-135.147 264.018 91.259-323.543-129.038-340.8-433.742-340.8v213.333c0 12.907-15.728 19.004-24.498 9.831l-312.889-327.111c-2.451-2.545-3.96-6.012-3.96-9.831s1.509-7.286 3.964-9.836l-0.004 0.004z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["reply"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":33,"id":91,"name":"reply","prevSize":32,"code":59674},"setIdx":3,"setId":5,"iconIdx":24},{"icon":{"paths":["M670.939 599.542h199.461c28.277 0 51.2 22.923 51.2 51.2v197.729c0 19.389-15.718 35.107-35.107 35.107v0c-19.389 0-35.107-15.718-35.107-35.107v-101.060c-14.089 19.847-29.302 38.945-46.809 56.030-77.562 76.158-180.448 118.098-289.699 118.098-214.525 0-391.087-159.758-410.7-371.615-0.048-0.533-0.094-1.083-0.141-1.65l-0.001 0c-1.508-18.485 12.254-34.693 30.739-36.201 0.909-0.074 1.82-0.111 2.731-0.111l2.070-0.001c17.94 0 32.918 13.684 34.534 31.55 0 0 0 0 0 0 16.243 175.439 162.754 307.814 340.768 307.814 90.715 0 176.188-34.779 240.597-98.018 20.924-20.502 39.132-43.626 54.111-68.762 2.809-4.728 4.774-9.923 7.396-14.792h-146.043c-19.389 0-35.107-15.718-35.107-35.107v0c0-19.389 15.718-35.107 35.107-35.107zM388.214 389.291v0c0 19.389-15.718 35.107-35.107 35.107h-199.461c-28.277 0-51.2-22.923-51.2-51.2v-197.729c0-19.389 15.718-35.107 35.107-35.107v0c19.389 0 35.107 15.718 35.107 35.107v101.060c14.136-19.847 29.349-38.945 46.762-55.983 77.609-76.158 180.541-118.145 289.699-118.145 214.571 0 391.134 159.758 410.747 371.662 0.043 0.456 0.085 0.925 0.126 1.406l-0 0c1.593 18.502-12.114 34.792-30.616 36.385-0.959 0.083-1.922 0.124-2.884 0.124l-1.972-0c-17.914 0-32.891-13.621-34.586-31.455 0 0 0 0 0 0-16.196-175.533-162.754-307.908-340.815-307.908-90.669 0-176.095 34.826-240.55 98.064-20.877 20.455-39.085 43.579-54.111 68.762-2.809 4.728-4.821 9.877-7.396 14.745h146.043c19.389 0 35.107 15.718 35.107 35.107z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["reload"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":34,"id":90,"name":"reload","prevSize":32,"code":59675},"setIdx":3,"setId":5,"iconIdx":25},{"icon":{"paths":["M414.476 394.968c0-67.325-54.578-121.902-121.905-121.902-67.326 0-121.905 54.579-121.905 121.905v48.762c0 40.396 32.747 73.143 73.143 73.143 13.021 0 24.908 7.408 30.643 19.098 19.758 40.269 18.374 88.36-2.635 144.554-2.325 6.22-5.803 14.311-10.433 24.274l-0.001-0c-2.384 5.129-0.158 11.219 4.971 13.603 3.207 1.49 6.955 1.221 9.916-0.713 14.199-9.273 25.268-17.8 33.208-25.581 63.043-61.782 104.997-167.862 104.997-297.143zM102.4 443.733v-48.762c0-105.029 85.143-190.171 190.171-190.171s190.171 85.141 190.171 190.168c0 241.96-133.814 424.232-307.2 424.232-27.553 0-43.751-30.962-28.041-53.596 56.52-81.429 78.704-142.61 71.172-182.688-66.107-11.859-116.274-69.662-116.274-139.182zM657.531 582.916c-66.107-11.859-116.274-69.662-116.274-139.182v-48.762c0-105.029 85.143-190.171 190.171-190.171s190.171 85.141 190.171 190.168c0 241.96-133.814 424.232-307.2 424.232-27.553 0-43.751-30.962-28.040-53.596 56.52-81.429 78.704-142.61 71.172-182.688zM853.333 394.968c0-67.325-54.578-121.902-121.905-121.902-67.326 0-121.905 54.579-121.905 121.905v48.762c0 40.396 32.747 73.143 73.143 73.143 13.021 0 24.908 7.408 30.643 19.098 19.37 39.477 18.42 86.472-1.418 141.249-2.531 6.989-6.461 16.233-11.79 27.732l-0.002-0.001c-2.379 5.132-0.146 11.221 4.986 13.6 3.2 1.483 6.938 1.215 9.894-0.709 13.847-9.013 24.662-17.295 32.446-24.846 63.549-61.65 105.908-168.128 105.908-298.031z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["quote"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":35,"id":89,"name":"quote","prevSize":32,"code":59676},"setIdx":3,"setId":5,"iconIdx":26},{"icon":{"paths":["M493.033 613.695l-371.535-215.269c-11.371-6.537-18.427-18.716-18.554-31.943-0.127-13.225 6.69-25.541 17.898-32.284l373.418-226.518c11.552-7.017 25.967-7.041 37.53-0.071l371.47 223.236c11.226 6.739 18.059 19.012 17.983 32.215-0.076 13.204-7.052 25.396-18.35 31.996l-373.37 218.564c-5.573 3.269-11.901 4.988-18.344 4.98-6.395-0.001-12.662-1.674-18.146-4.906zM212.267 365.373l298.85 173.185 300.875-176.139-298.831-179.553-300.894 182.507zM493.032 765.31l-371.339-215.205c-11.721-6.392-19.087-18.715-19.289-32.181-0.202-13.463 6.788-26.005 18.306-32.757 11.586-6.792 25.899-6.637 37.111 0.268l353.294 204.693 355.030-207.827c11.407-6.922 25.616-7.035 37.129-0.293 11.446 6.703 18.431 19.126 18.324 32.502-0.107 13.377-7.292 25.685-18.705 32.116l-373.362 218.559c-5.575 3.277-11.909 4.998-18.356 4.984-6.35-0.002-12.592-1.652-18.142-4.861zM493.032 916.74l-371.339-215.205c-11.721-6.392-19.087-18.715-19.289-32.181-0.202-13.463 6.788-26.005 18.306-32.757 11.586-6.792 25.899-6.637 37.111 0.268l353.294 204.693 355.308-207.989c17.57-9.903 39.689-3.594 49.625 14.077 9.872 17.558 4.114 39.933-13.155 50.41l-373.362 218.559c-5.575 3.277-11.909 4.998-18.356 4.984-6.35-0.002-12.592-1.652-18.142-4.861z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["queue"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":36,"id":88,"name":"queue","prevSize":32,"code":59677},"setIdx":3,"setId":5,"iconIdx":27},{"icon":{"paths":["M284.939 207.277v609.445c0 14.138 11.462 25.6 25.6 25.6h402.922c14.138 0 25.6-11.462 25.6-25.6v-425.488c0-13.675-5.471-26.782-15.192-36.399l-160.078-158.357c-9.585-9.482-22.524-14.801-36.008-14.801h-217.244c-14.138 0-25.6 11.462-25.6 25.6zM596.985 117.201l207.022 204.796c9.722 9.617 15.192 22.724 15.192 36.399v512.004c0 28.277-22.923 51.2-51.2 51.2h-512c-28.277 0-51.2-22.923-51.2-51.2v-716.8c0-28.277 22.923-51.2 51.2-51.2h304.978c13.483 0 26.422 5.319 36.008 14.801zM394.24 704v0c0-21.208 17.192-38.4 38.4-38.4h153.6c21.208 0 38.4 17.192 38.4 38.4v0c0 21.208-17.192 38.4-38.4 38.4h-153.6c-21.208 0-38.4-17.192-38.4-38.4zM394.24 550.4v0c0-21.208 17.192-38.4 38.4-38.4h153.6c21.208 0 38.4 17.192 38.4 38.4v0c0 21.208-17.192 38.4-38.4 38.4h-153.6c-21.208 0-38.4-17.192-38.4-38.4z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["post"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":37,"id":87,"name":"post","prevSize":32,"code":59678},"setIdx":3,"setId":5,"iconIdx":28},{"icon":{"paths":["M512 99.84c199.506 0 360.96 161.463 360.96 360.96 0 110.932-49.907 212.466-133.648 280.482-3.995 3.245-9.055 7.041-15.179 11.39-2.828 2.009-6.132 3.241-9.585 3.574-10.909 1.054-20.607-6.936-21.661-17.845l-0.192-1.986c-1.682-17.418 5.219-34.565 18.497-45.964 9.782-8.395 17.379-15.474 22.781-21.224 52.758-56.15 82.665-130.011 82.665-208.427 0-170.366-140.407-308.090-311.038-304.573-164.381 3.387-297.226 138.223-298.235 302.672-0.493 80.258 30.341 155.851 84.922 212.711 5.234 5.452 12.594 12.206 22.071 20.249 12.387 10.512 19.356 26.062 18.959 42.304l-0.136 5.517c-0.093 3.817-1.342 7.515-3.581 10.607-6.113 8.444-17.914 10.332-26.354 4.217-17.094-12.377-29.857-22.522-38.307-30.459-72.13-67.748-113.9-161.843-113.9-263.245 0-199.506 161.464-360.96 360.96-360.96zM611.84 671.6c0 46.621-18.108 157.105-32.826 211.836-6.815 25.189-30.31 35.604-67.014 35.604s-60.199-10.416-67.014-35.609c-14.708-54.691-32.826-165.054-32.826-211.831 0-47.592 36.076-67.44 99.84-67.44s99.84 19.848 99.84 67.44zM565.76 671.6c0-14.129-23.565-22.134-53.76-22.13-30.191 0.004-53.76 8.013-53.76 22.13 0 34.235 11.511 111.604 24.478 171.428 0.583 2.664 0.583 2.664 1.252 5.622 2.92 12.814 14.315 21.905 27.457 21.905l1.166-0.003c13.14 0 24.537-9.098 27.45-21.919 0.486-2.15 0.486-2.15 0.92-4.125 13.049-59.747 24.797-138.352 24.797-172.908zM616.96 460.8c0 57.967-46.993 104.96-104.96 104.96s-104.96-46.993-104.96-104.96c0-57.967 46.993-104.96 104.96-104.96s104.96 46.993 104.96 104.96zM560.64 460.8c0-26.818-21.822-48.64-48.64-48.64s-48.64 21.822-48.64 48.64c0 26.818 21.822 48.64 48.64 48.64s48.64-21.822 48.64-48.64zM669.982 545.059c1.487-2.642 2.729-5.004 3.728-7.087 11.522-24.039 17.49-50.271 17.49-77.171 0-101.539-84.63-182.985-186.256-179.064-92.382 3.565-167.505 77.969-171.933 170.293-1.487 30.994 4.921 61.326 18.63 88.7 0.64 1.249 0.64 1.249 1.038 2.010 0.5 0.931 0.5 0.931 1.36 2.49 7.294 13.022 5.65 29.218-4.111 40.51-7.331 8.481-20.149 9.412-28.629 2.082-1.423-1.23-2.667-2.651-3.699-4.224-4.637-7.070-8.234-13.097-10.787-18.076-16.586-32.356-25.214-68.047-25.214-104.721 0-127.771 104.48-231.42 232.285-230.392 124.147 0.999 225.904 101.455 228.464 225.55 0.787 38.143-7.742 75.348-24.875 109-2.591 5.088-6.259 11.257-10.999 18.499-6.149 9.395-18.749 12.026-28.144 5.878-1.563-1.023-2.977-2.256-4.203-3.665-9.832-11.298-11.493-27.561-4.146-40.613z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["podcast"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":38,"id":86,"name":"podcast","prevSize":32,"code":59679},"setIdx":3,"setId":5,"iconIdx":29},{"icon":{"paths":["M471.93 193.643v278.288h-278.261c-22.13 0-40.070 17.94-40.070 40.070v0c0 22.13 17.94 40.070 40.070 40.070h278.261v278.288c0 22.115 17.928 40.043 40.043 40.043v0c22.115 0 40.043-17.928 40.043-40.043v-278.288h278.314c22.13 0 40.070-17.94 40.070-40.070v0c0-22.13-17.94-40.070-40.070-40.070h-278.314v-278.288c0-22.115-17.928-40.043-40.043-40.043v0c-22.115 0-40.043 17.928-40.043 40.043z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["plus"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":39,"id":85,"name":"plus","prevSize":32,"code":59680},"setIdx":3,"setId":5,"iconIdx":30},{"icon":{"paths":["M512 921.6c-226.193 0-409.6-183.36-409.6-409.6s183.407-409.6 409.6-409.6c226.193 0 409.6 183.36 409.6 409.6s-183.407 409.6-409.6 409.6zM456.65 362.026c-4.893-3.071-10.553-4.7-16.33-4.7-16.966 0-30.72 13.754-30.72 30.72v247.902c0 5.777 1.629 11.437 4.7 16.33 9.019 14.371 27.98 18.709 42.35 9.69l197.503-123.951c3.918-2.459 7.231-5.772 9.69-9.69 9.019-14.371 4.68-33.331-9.69-42.35l-197.503-123.951z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["play"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":40,"id":84,"name":"play","prevSize":32,"code":59681},"setIdx":3,"setId":5,"iconIdx":31},{"icon":{"paths":["M912.8 429.4l-704-416.2c-57.2-33.8-144.8-1-144.8 82.6v832.2c0 75 81.4 120.2 144.8 82.6l704-416c62.8-37 63-128.2 0-165.2z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["play-solid"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":41,"id":83,"name":"play-solid","prevSize":32,"code":59682},"setIdx":3,"setId":5,"iconIdx":32},{"icon":{"paths":["M482.814 637.831l-224.859-224.911-32.719 32.719c-7.201 7.201-16.751 11.167-26.927 11.167 0 0 0 0 0 0v0c-10.643 0-19.44-8.301-20.056-18.926-0.022-0.403-0.034-0.791-0.034-1.164 0-10.124 3.966-19.517 10.906-26.561l221.049-220.997c0 0 0 0 0 0v0c9.814-9.814 25.725-9.814 35.539 0 6.797 6.797 9.121 16.875 5.988 25.962-1.415 4.107-3.429 7.473-6.042 10.097l-32.719 32.719 205.551 205.603 19.256 18.786 24.213-11.533c2.88-1.355 53.827-24.715 119.015 0.835 7.274 2.851 17.497 8.254 30.671 16.21l-0.003 0.005c7.259 4.384 9.59 13.822 5.206 21.081-0.641 1.062-1.409 2.042-2.286 2.92l-302.654 302.661c-6.001 6.001-15.73 6.001-21.73 0-0.887-0.887-1.662-1.879-2.308-2.955-8.368-13.935-14.002-24.715-16.901-32.338-24.462-64.324-1.531-114.303-0.314-116.906l12.159-24.474zM910.51 469.54c-103.010-103.115-207.534-90.486-255.438-76.657l-137.66-137.66c20.978-36.424 20.195-81.928-2.244-117.569l-17.742-17.742c-44.043-27.762-102.801-22.491-140.948 15.655l-220.945 220.997c-38.146 38.146-43.364 97.009-15.603 140.843l17.69 17.742c35.746 22.491 81.302 23.222 117.569 2.296l137.712 137.712c-13.829 47.8-26.457 152.271 76.657 255.386v0c14.77 14.799 38.741 14.822 53.54 0.052 0.009-0.009 0.017-0.017 0.026-0.026l166.909-166.909 151.971 151.971c14.808 14.808 38.816 14.814 53.632 0.013v0c14.806-14.792 14.818-38.786 0.026-53.592-0.004-0.004-0.009-0.009-0.013-0.013l-152.023-152.023 166.886-166.931c14.783-14.787 14.782-38.759-0.004-53.544z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["pin"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":42,"id":82,"name":"pin","prevSize":32,"code":59683},"setIdx":3,"setId":5,"iconIdx":33},{"icon":{"paths":["M540.754 693.093c15.352 15.384 15.496 40.229 0.264 55.894l-117.668 117.668c-73.491 73.319-192.458 73.316-265.962-0.017-73.318-73.49-73.317-192.457 0.008-265.954l168.375-168.375c73.52-73.311 192.464-73.27 266.199 0.266 14.589 15.658 14.164 40.055-0.961 55.196-15.147 15.163-39.545 15.57-55.449 0.774-42.469-42.36-111.21-42.361-153.673-0.007l-168.399 168.31c-42.353 42.453-42.356 111.179-0.017 153.617 42.453 42.354 111.179 42.355 153.624 0.010l117.869-117.859c15.603-15.114 40.446-14.899 55.789 0.476zM866.606 423.354l-168.423 168.379c-73.5 73.291-192.444 73.29-265.952-0.010-10.034-10.034-13.953-24.659-10.28-38.367s14.379-24.413 28.086-28.086c13.706-3.672 28.331 0.245 38.355 10.269 42.479 42.339 111.205 42.341 153.675 0.011l168.4-168.355c42.353-42.453 42.356-111.179 0.017-153.617-42.453-42.354-111.18-42.355-153.626-0.008l-117.701 117.701c-10.033 10.044-24.662 13.972-38.376 10.305s-24.431-14.372-28.112-28.082c-3.682-13.711 0.232-28.344 10.269-38.392l117.756-117.711c73.489-73.317 192.457-73.317 265.956 0.010 73.283 73.526 73.268 192.475-0.042 265.957z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["permalink"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":43,"id":81,"name":"permalink","prevSize":32,"code":59684},"setIdx":3,"setId":5,"iconIdx":34},{"icon":{"paths":["M512 921.6c-226.193 0-409.6-183.36-409.6-409.6s183.407-409.6 409.6-409.6c226.193 0 409.6 183.36 409.6 409.6s-183.407 409.6-409.6 409.6zM563.948 396.373l-0.641 230.827c-0.059 21.149 17.038 38.341 38.187 38.4 0.035 0 0.071 0 0.106 0v0c21.208 0 38.4-17.192 38.4-38.4v-230.827c0-20.972-17.001-37.973-37.973-37.973v0c-20.989 0-38.021 16.984-38.079 37.973zM384 396.8v230.4c0 21.208 17.192 38.4 38.4 38.4v0c21.208 0 38.4-17.192 38.4-38.4v-230.4c0-21.208-17.192-38.4-38.4-38.4v0c-21.208 0-38.4 17.192-38.4 38.4z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["pause"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":44,"id":80,"name":"pause","prevSize":32,"code":59685},"setIdx":3,"setId":5,"iconIdx":35},{"icon":{"paths":["M413.267 462.457l-61.621 52.827c-12.060-24.101-18.846-51.3-18.846-80.084v-153.6c0-98.969 80.231-179.2 179.2-179.2 81.222 0 149.823 54.036 171.815 128.12l-69.415 59.508v-8.428c0-56.554-45.846-102.4-102.4-102.4s-102.4 45.846-102.4 102.4v153.6c0 9.438 1.277 18.578 3.667 27.257zM377.419 729.227l67.683-58.024c20.198 4.825 42.486 7.197 66.899 7.197 130.426 0 200.2-67.697 214.765-215.514 0.429-4.351 0.833-9.7 1.213-16.048l-0.001-0c1.264-21.105 18.881-37.497 40.023-37.238 20.598 0.252 37.091 17.154 36.839 37.752-0.007 0.58-0.028 1.159-0.062 1.738-0.287 4.905-0.591 9.154-0.908 12.749-15.602 176.721-101.637 277.457-253.469 291.626v116.934h89.6c14.138 0 25.6 11.462 25.6 25.6s-11.462 25.6-25.6 25.6h-256c-14.138 0-25.6-11.462-25.6-25.6s11.462-25.6 25.6-25.6h89.6v-116.934c-35.723-3.334-67.803-11.459-96.181-24.239zM252.971 599.877c-17.135-38.906-28.111-84.873-32.804-137.618-0.329-3.702-0.644-8.093-0.943-13.173l0.001-0c-1.211-20.562 14.476-38.212 35.038-39.423 0.578-0.034 1.157-0.055 1.736-0.062 21.134-0.259 38.746 16.128 40.009 37.226 0.358 5.958 0.736 11.004 1.136 15.136 3.113 32.169 8.828 60.56 17.202 85.298l-61.375 52.616zM689.221 461.922c-12.902 86.295-87.333 152.478-177.221 152.478-0.213 0-0.425-0-0.638-0.001l177.859-152.476zM911.217 153.59c13.803 16.101 11.94 40.343-4.161 54.146l-749.629 642.648c-16.101 13.803-40.343 11.94-54.146-4.161s-11.94-40.343 4.161-54.146l749.629-642.648c16.101-13.803 40.343-11.94 54.146 4.161z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["mute"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":45,"id":79,"name":"mute","prevSize":32,"code":59686},"setIdx":3,"setId":5,"iconIdx":36},{"icon":{"paths":["M511.152 360.583c22.304 0 40.392 18.051 40.392 40.327v233.944c0 22.275-18.088 40.327-40.392 40.327s-40.392-18.051-40.392-40.327v-233.944c0-22.275 18.088-40.327 40.392-40.327zM49.119 863.747l413.955-740.751c14.588-26.104 48.090-35.845 75.032-21.957 9.656 4.977 17.597 12.61 22.82 21.957l413.955 740.751c16.58 29.668-5.594 65.533-40.020 65.533h-845.723c-34.426 0-56.599-35.865-40.020-65.533zM510.258 703.736c24.735 0 43.707 19.504 43.707 44.561 0 25.225-18.915 44.785-43.707 44.785s-43.707-19.56-43.707-44.785c0-25.056 18.972-44.561 43.707-44.561zM140.057 855.673h743.887l-371.943-665.573-371.943 665.573z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["modal-warning"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":46,"id":78,"name":"modal-warning","prevSize":32,"code":59687},"setIdx":3,"setId":5,"iconIdx":37},{"icon":{"paths":["M569.165 763.288c0 31.962-25.552 57.796-57.165 57.796s-57.165-25.834-57.165-57.796c0-31.962 25.552-57.796 57.165-57.796s57.165 25.834 57.165 57.796zM768 185.325v653.35c0 45.783-36.736 82.925-82.019 82.925h-347.961c-45.283 0-82.019-37.142-82.019-82.925v-653.35c0-45.783 36.736-82.925 82.019-82.925h347.961c45.283 0 82.019 37.142 82.019 82.925zM703.379 185.325c0-9.657-7.846-17.59-17.398-17.59h-347.961c-9.552 0-17.398 7.933-17.398 17.59v653.35c0 9.657 7.846 17.59 17.398 17.59h347.961c9.552 0 17.398-7.933 17.398-17.59v-653.35z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["mobile"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":47,"id":77,"name":"mobile","prevSize":32,"code":59688},"setIdx":3,"setId":5,"iconIdx":38},{"icon":{"paths":["M512 179.2c-56.554 0-102.4 45.846-102.4 102.4v153.6c0 56.554 45.846 102.4 102.4 102.4s102.4-45.846 102.4-102.4v-153.6c0-56.554-45.846-102.4-102.4-102.4zM665.6 896v0c0 14.138-11.462 25.6-25.6 25.6h-256c-14.138 0-25.6-11.462-25.6-25.6v0c0-14.138 11.462-25.6 25.6-25.6h89.6v-116.934c-151.712-14.158-237.732-114.746-253.432-291.208-0.329-3.702-0.644-8.093-0.943-13.173l0.001-0c-1.211-20.562 14.476-38.212 35.038-39.423 0.578-0.034 1.157-0.055 1.736-0.062v0c21.134-0.259 38.746 16.128 40.009 37.226 0.358 5.958 0.736 11.004 1.136 15.136 14.365 148.459 84.158 216.438 214.855 216.438 130.426 0 200.2-67.697 214.765-215.514 0.429-4.351 0.833-9.7 1.213-16.048l-0.001-0c1.264-21.105 18.881-37.497 40.023-37.238v0c20.598 0.252 37.091 17.154 36.839 37.752-0.007 0.58-0.028 1.159-0.062 1.738-0.287 4.905-0.591 9.154-0.908 12.749-15.602 176.721-101.637 277.457-253.469 291.626v116.934h89.6c14.138 0 25.6 11.462 25.6 25.6zM512 102.4c98.969 0 179.2 80.231 179.2 179.2v153.6c0 98.969-80.231 179.2-179.2 179.2s-179.2-80.231-179.2-179.2v-153.6c0-98.969 80.231-179.2 179.2-179.2z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["mic"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":48,"id":76,"name":"mic","prevSize":32,"code":59689},"setIdx":3,"setId":5,"iconIdx":39},{"icon":{"paths":["M541.395 826.208h-8.818c-208.607 0-360.015-132.144-360.015-314.208 0-173.28 141.818-314.256 316.115-314.256s316.115 140.976 316.115 314.256c0 28.32-13.252 56.64-27.275 86.544-4.867 10.464-9.686 20.784-13.396 29.664-36.43 78.048 35.226 115.632 65.729 131.664 4.722 2.448 10.794 5.616 15.709 8.544-20.046 22.944-87.414 58.512-304.164 57.792zM862.618 698.192c-43.129-22.704-41.056-27.216-34.214-42 3.903-9.264 8.288-18.672 12.722-28.176 15.902-33.84 33.876-72.24 33.876-116.016 0-211.776-173.333-384-386.326-384s-386.277 172.224-386.277 384c0 222.48 180.947 383.952 430.177 383.952l8.481 0.048h9.927c137.674 0 319.585-12.288 364.544-107.376 23.757-50.208-27.997-77.376-52.911-90.432z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["message"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":49,"id":75,"name":"message","prevSize":32,"code":59690},"setIdx":3,"setId":5,"iconIdx":40},{"icon":{"paths":["M445.44 780.8c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM445.44 524.8c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM445.44 268.8c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["menu"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":50,"id":74,"name":"menu","prevSize":32,"code":59691},"setIdx":3,"setId":5,"iconIdx":41},{"icon":{"paths":["M510.025 277.943c63.563 0 115.2 51.671 115.2 115.2s-51.637 115.2-115.2 115.2c-63.563 0-115.2-51.671-115.2-115.2s51.637-115.2 115.2-115.2zM510.025 445.514c28.91 0 52.4-23.468 52.4-52.371 0-28.862-23.49-52.371-52.4-52.371s-52.4 23.509-52.4 52.371c0 28.903 23.49 52.371 52.4 52.371zM534.763 913.507c-13.199 10.791-32.328 10.791-45.526 0-2.477-2.026-6.813-5.709-12.744-10.965-9.704-8.6-20.469-18.595-32.033-29.9-32.942-32.207-65.856-68.605-96.632-108.552-89.137-115.7-143.029-237.437-143.029-360.552 0-166.357 137.582-301.139 307.2-301.139s307.2 134.781 307.2 301.139c0 123.115-53.892 244.851-143.029 360.552-30.776 39.947-63.69 76.345-96.632 108.552-11.563 11.306-22.329 21.301-32.033 29.9-5.93 5.255-10.266 8.939-12.744 10.965zM529.322 822.806c30.705-30.020 61.437-64.005 90.064-101.164 80.587-104.602 128.529-212.899 128.529-318.104 0-127.491-105.58-230.921-235.916-230.921s-235.916 103.43-235.916 230.921c0 105.205 47.942 213.502 128.529 318.104 28.628 37.159 59.36 71.143 90.064 101.164 9.588 9.374 25.057 9.374 34.645 0z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["map-pin"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":51,"id":73,"name":"map-pin","prevSize":32,"code":59692},"setIdx":3,"setId":5,"iconIdx":42},{"icon":{"paths":["M217.907 243.597c-28.959 0-52.511 24.086-52.511 53.706v429.395c0 29.619 23.552 53.664 52.511 53.664h588.145c28.959 0 52.552-24.045 52.552-53.664v-429.395c0-29.619-23.593-53.706-52.552-53.706h-588.145zM806.052 844.8h-588.145c-63.734 0-115.507-52.957-115.507-118.102v-429.395c0-65.146 51.773-118.102 115.507-118.102h588.145c63.734 0 115.548 52.957 115.548 118.102v429.395c0 65.146-51.814 118.102-115.548 118.102zM485.814 577.169l-214.684-146.451c-14.683-10.016-18.656-29.937-8.94-44.82v0c9.466-14.499 28.894-18.58 43.393-9.114 0.177 0.116 0.353 0.233 0.528 0.352l208.557 142.256 208.605-142.265c14.294-9.748 33.785-6.063 43.533 8.231 0.122 0.179 0.242 0.358 0.36 0.539v0c9.706 14.885 5.729 34.8-8.951 44.814l-214.694 146.457c-17.403 11.872-40.302 11.872-57.706 0z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["mail"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":52,"id":72,"name":"mail","prevSize":32,"code":59693},"setIdx":3,"setId":5,"iconIdx":43},{"icon":{"paths":["M909.622 909.622v0c-15.971 15.971-41.864 15.971-57.835 0l-155.625-155.625c-62.53 49.946-141.808 79.806-228.060 79.806-201.971 0-365.702-163.73-365.702-365.702s163.73-365.702 365.702-365.702c201.971 0 365.702 163.73 365.702 365.702 0 86.252-29.86 165.53-79.806 228.060l155.625 155.625c15.971 15.971 15.971 41.864 0 57.835zM468.102 764.064c163.456 0 295.963-132.507 295.963-295.963s-132.507-295.963-295.963-295.963c-163.456 0-295.963 132.507-295.963 295.963s132.507 295.963 295.963 295.963z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["magnifier"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":53,"id":71,"name":"magnifier","prevSize":32,"code":59694},"setIdx":3,"setId":5,"iconIdx":44},{"icon":{"paths":["M694.539 847.127h-365.078c-14.138 0-25.6-11.462-25.6-25.6v-288.048c0-14.138 11.462-25.6 25.6-25.6h365.078c14.138 0 25.6 11.462 25.6 25.6v288.048c0 14.138-11.462 25.6-25.6 25.6zM385.5 305.115c0-70.699 56.761-128.242 126.5-128.242s126.5 57.543 126.5 128.242v128.292h-252.999v-128.292zM711.96 433.406v-128.292c0-111.759-89.72-202.715-199.96-202.715s-199.96 90.956-199.96 202.715v128.292h-30.44c-28.277 0-51.2 22.923-51.2 51.2v385.794c0 28.277 22.923 51.2 51.2 51.2h460.8c28.277 0 51.2-22.923 51.2-51.2v-385.794c0-28.277-22.923-51.2-51.2-51.2h-30.44z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["lock"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":54,"id":70,"name":"lock","prevSize":32,"code":59695},"setIdx":3,"setId":5,"iconIdx":45},{"icon":{"paths":["M512 137.576v0c0 19.36-14.836 35.49-34.129 37.105-6.46 0.542-11.94 1.15-16.44 1.823-163.449 24.468-288.814 165.724-288.814 336.314 0 170.932 125.868 312.413 289.798 336.46 4.262 0.625 9.42 1.191 15.472 1.697l-0 0.002c19.283 1.612 34.112 17.734 34.112 37.084v0c0 18.528-15.020 33.548-33.548 33.548-0.816 0-1.631-0.030-2.444-0.089-5.493-0.4-10.229-0.844-14.206-1.331-202.519-24.798-359.402-197.708-359.402-407.37 0-209.201 156.195-381.812 358.068-407.204 4.317-0.543 9.506-1.036 15.567-1.478l0 0.002c18.467-1.347 34.53 12.532 35.877 30.999 0.059 0.812 0.089 1.625 0.089 2.439z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["loading"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":55,"id":69,"name":"loading","prevSize":32,"code":59696},"setIdx":3,"setId":5,"iconIdx":46},{"icon":{"paths":["M851.354 560.845c0 19.251-15.77 34.97-35.123 34.97-19.302 0-35.072-15.718-35.072-34.97v-93.030c0-19.251 15.77-34.97 35.072-34.97 19.354 0 35.123 15.718 35.123 34.97v93.030zM523.674 851.814h-23.398c-19.354 0-35.072-15.718-35.072-34.97s15.718-34.918 35.072-34.918h23.398c19.405 0 35.123 15.667 35.123 34.918s-15.718 34.97-35.123 34.97zM207.718 595.814c-19.354 0-35.123-15.718-35.123-34.97v-93.030c0-19.251 15.77-34.97 35.123-34.97s35.072 15.718 35.072 34.97v93.030c0 19.251-15.718 34.97-35.072 34.97zM816.23 363.059c-14.336 0-27.955 2.867-40.448 8.090-24.832-123.955-133.632-217.549-263.782-217.549s-238.95 93.594-263.834 217.549c-12.442-5.222-26.112-8.090-40.448-8.090-58.112 0-105.318 47.002-105.318 104.755v93.030c0 57.754 47.206 104.755 105.318 104.755 56.013 0 101.53-43.827 104.704-98.765h0.614v-141.824c0-111.155 89.242-201.626 198.963-201.626 109.67 0 198.912 90.47 198.912 201.626v189.133c0 69.12-34.15 130.816-88.525 167.424-14.643-40.397-53.146-69.427-98.714-69.427h-23.398c-58.061 0-105.318 46.95-105.318 104.704s47.258 104.755 105.318 104.755h23.398c41.011 0 76.237-23.654 93.645-57.754 85.606-36.506 145.664-114.022 160.358-205.773 11.981 4.71 24.934 7.526 38.554 7.526 58.112 0 105.37-47.002 105.37-104.755v-93.030c0-57.754-47.258-104.755-105.37-104.755z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["livechat"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":56,"id":68,"name":"livechat","prevSize":32,"code":59697},"setIdx":3,"setId":5,"iconIdx":47},{"icon":{"paths":["M347.27 294.4c-22.13 0-40.070-17.192-40.070-38.4s17.94-38.4 40.070-38.4h534.261c22.13 0 40.070 17.192 40.070 38.4s-17.94 38.4-40.070 38.4h-534.261zM347.27 550.4c-22.13 0-40.070-17.192-40.070-38.4s17.94-38.4 40.070-38.4h534.261c22.13 0 40.070 17.192 40.070 38.4s-17.94 38.4-40.070 38.4h-534.261zM347.27 806.4c-22.13 0-40.070-17.192-40.070-38.4s17.94-38.4 40.070-38.4h534.261c22.13 0 40.070 17.192 40.070 38.4s-17.94 38.4-40.070 38.4h-534.261zM102.177 768v0c0-21.208 17.192-38.4 38.4-38.4h56.765c21.208 0 38.4 17.192 38.4 38.4v0c0 21.208-17.192 38.4-38.4 38.4h-56.765c-21.208 0-38.4-17.192-38.4-38.4zM102.177 512v0c0-21.208 17.192-38.4 38.4-38.4h56.765c21.208 0 38.4 17.192 38.4 38.4v0c0 21.208-17.192 38.4-38.4 38.4h-56.765c-21.208 0-38.4-17.192-38.4-38.4zM102.177 256v0c0-21.208 17.192-38.4 38.4-38.4h56.765c21.208 0 38.4 17.192 38.4 38.4v0c0 21.208-17.192 38.4-38.4 38.4h-56.765c-21.208 0-38.4-17.192-38.4-38.4z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["list"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":57,"id":67,"name":"list","prevSize":32,"code":59698},"setIdx":3,"setId":5,"iconIdx":48},{"icon":{"paths":["M231.131 222.968c-32.317 0-58.514 25.881-58.514 57.806v462.452c0 31.926 26.198 57.806 58.514 57.806h561.737c32.317 0 58.514-25.881 58.514-57.806v-462.452c0-31.926-26.198-57.806-58.514-57.806h-561.737zM231.131 153.6h561.737c71.096 0 128.731 56.938 128.731 127.174v462.452c0 70.236-57.635 127.174-128.731 127.174h-561.737c-71.096 0-128.731-56.938-128.731-127.174v-462.452c0-70.236 57.635-127.174 128.731-127.174zM465.189 407.948c-19.39 0-35.109-15.528-35.109-34.684s15.719-34.684 35.109-34.684h280.869c19.39 0 35.109 15.528 35.109 34.684s-15.719 34.684-35.109 34.684h-280.869zM277.943 407.948c-19.39 0-35.109-15.528-35.109-34.684s15.719-34.684 35.109-34.684h46.811c19.39 0 35.109 15.528 35.109 34.684s-15.719 34.684-35.109 34.684h-46.811zM465.189 546.684c-19.39 0-35.109-15.528-35.109-34.684s15.719-34.684 35.109-34.684h280.869c19.39 0 35.109 15.528 35.109 34.684s-15.719 34.684-35.109 34.684h-280.869zM277.943 546.684c-19.39 0-35.109-15.528-35.109-34.684s15.719-34.684 35.109-34.684h46.811c19.39 0 35.109 15.528 35.109 34.684s-15.719 34.684-35.109 34.684h-46.811zM277.943 685.419c-19.39 0-35.109-15.528-35.109-34.684s15.719-34.684 35.109-34.684h46.811c19.39 0 35.109 15.528 35.109 34.684s-15.719 34.684-35.109 34.684h-46.811zM465.189 685.419c-19.39 0-35.109-15.528-35.109-34.684s15.719-34.684 35.109-34.684h280.869c19.39 0 35.109 15.528 35.109 34.684s-15.719 34.684-35.109 34.684h-280.869z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["list-alt"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":58,"id":66,"name":"list-alt","prevSize":32,"code":59699},"setIdx":3,"setId":5,"iconIdx":49},{"icon":{"paths":["M863.073 102.4h-702.327c-32.176 0-58.345 26.533-58.345 59.073v701.053c0 32.54 26.169 59.073 58.345 59.073h702.327c32.176 0 58.527-26.533 58.527-59.073v-701.053c0-32.54-26.351-59.073-58.527-59.073zM349.98 804.591h-121.424v-390.94h121.606v390.94h-0.182zM289.269 360.22c-37.899-1.363-67.919-32.482-67.919-70.406s30.020-69.043 67.919-70.406c38.853 0.075 70.331 31.553 70.406 70.406 0 38.958-31.403 70.406-70.406 70.406zM805.137 804.591h-121.424v-190.191c0-45.329-0.91-103.674-63.078-103.674-63.26 0-73 49.38-73 100.398v193.422h-121.378v-390.94h116.463v53.43h1.638c16.293-30.72 55.979-63.124 115.007-63.124 122.88 0 145.772 81.010 145.772 186.368v214.312z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["linkedin"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":59,"id":65,"name":"linkedin","prevSize":32,"code":59700},"setIdx":3,"setId":5,"iconIdx":50},{"icon":{"paths":["M911.351 545.469c-25.914-69.895-98.214-111.622-193.431-111.622-3.735 0-7.331 0.046-10.882 0.228l-0.646-84.502 119.068-20.226c14.311-2.431 23.941-16.003 21.51-30.314-0.071-0.417-0.152-0.832-0.242-1.244v0c-3.344-15.203-17.825-25.272-33.241-23.114-35.852 5.020-71.704 10.040-107.555 15.060l-0.367-56.436c-0.103-15.831-13.012-28.586-28.844-28.498v0c-15.684 0.087-28.327 12.872-28.24 28.556 0 0.086 0.001 0.172 0.003 0.258l0.964 65.812c-33.79 5.762-67.579 11.524-101.369 17.286v0c-16.013 2.731-26.78 17.925-24.049 33.937 0.007 0.043 0.015 0.086 0.022 0.129v0c2.818 16.095 18.111 26.888 34.22 24.151l92.19-15.665 1.476 82.636c-35.674 8.733-68.121 27.236-93.603 53.377-31.715 32.688-49.635 76.062-50.121 121.315 0 64.98 40.3 103.568 96.6 110.394 131.229 15.836 212.428-125.319 239.402-193.12 41.847 56.68 15.763 159.705-64.315 227.705-0.625 0.53-1.298 1.091-2.019 1.681l-0-0c-10.687 8.739-12.266 24.486-3.527 35.173 0.145 0.178 0.293 0.354 0.443 0.527l1.609 1.858c9.197 10.635 25.138 12.141 36.164 3.417 0 0 0 0 0 0 89.963-71.182 129.396-175.97 98.782-258.757zM565.62 616.546c0-31.671 13.602-64.707 36.427-88.278 14.197-14.652 31.635-25.865 50.951-32.763l3.412 175.192c-16 5.324-33.199 7.554-51.597 5.324-40.116-4.96-39.193-37.405-39.193-59.474zM707.454 485.084c3.504-0.137 6.916-0.41 10.467-0.41 32.046 0 61.972 5.961 78.202 14.789 16.231 8.919-42.421 111.122-90.56 153.941l1.891-168.321zM223.4 378.718l-119.637 377.943c-4.846 15.31 3.636 31.651 18.947 36.497 2.817 0.892 5.754 1.349 8.708 1.356v0c23.507 0.054 44.265-15.322 51.064-37.825l30.489-100.918h145.154l34.39 102.622c7.249 21.632 27.512 36.212 50.326 36.212v0c15.375 0 27.839-12.464 27.839-27.839 0-2.892-0.451-5.767-1.336-8.52l-122.033-379.593c-8.666-26.956-33.742-45.235-62.057-45.235v0c-28.289 0-53.317 18.329-61.854 45.299zM225.467 598.117l50.215-179.701c1.522-5.447 7.171-8.628 12.618-7.106 3.449 0.964 6.144 3.659 7.107 7.108l50.176 179.699h-120.116z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["language"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":60,"id":64,"name":"language","prevSize":32,"code":59701},"setIdx":3,"setId":5,"iconIdx":51},{"icon":{"paths":["M853.333 250.88c40.46 0 73.387 30.869 73.387 69.12v384c0 38.251-32.927 69.12-73.387 69.12h-682.667c-40.46 0-73.387-30.869-73.387-69.12v-384c0-38.251 32.927-69.12 73.387-69.12h682.667zM870.969 704v-384c0-8.86-7.844-16.213-17.636-16.213h-682.667c-9.792 0-17.636 7.354-17.636 16.213v384c0 8.86 7.844 16.213 17.636 16.213h682.667c9.792 0 17.636-7.354 17.636-16.213zM346.453 528c0 11.74-10.005 21.12-22.187 21.12h-34.133c-12.182 0-22.187-9.38-22.187-21.12v-32c0-11.74 10.005-21.12 22.187-21.12h34.133c12.182 0 22.187 9.38 22.187 21.12v32zM482.987 528c0 11.74-10.005 21.12-22.187 21.12h-34.133c-12.182 0-22.187-9.38-22.187-21.12v-32c0-11.74 10.005-21.12 22.187-21.12h34.133c12.182 0 22.187 9.38 22.187 21.12v32zM619.52 528c0 11.74-10.005 21.12-22.187 21.12h-34.133c-12.182 0-22.187-9.38-22.187-21.12v-32c0-11.74 10.005-21.12 22.187-21.12h34.133c12.182 0 22.187 9.38 22.187 21.12v32zM756.053 528c0 11.74-10.005 21.12-22.187 21.12h-34.133c-12.182 0-22.187-9.38-22.187-21.12v-32c0-11.74 10.005-21.12 22.187-21.12h34.133c12.182 0 22.187 9.38 22.187 21.12v32zM278.187 634.667c0 11.74-10.005 21.12-22.187 21.12h-34.133c-12.182 0-22.187-9.38-22.187-21.12v-32c0-11.74 10.005-21.12 22.187-21.12h34.133c12.182 0 22.187 9.38 22.187 21.12v32zM824.32 634.667c0 11.74-10.005 21.12-22.187 21.12h-34.133c-12.182 0-22.187-9.38-22.187-21.12v-32c0-11.74 10.005-21.12 22.187-21.12h34.133c12.182 0 22.187 9.38 22.187 21.12v32zM278.187 421.333c0 11.74-10.005 21.12-22.187 21.12h-34.133c-12.182 0-22.187-9.38-22.187-21.12v-32c0-11.74 10.005-21.12 22.187-21.12h34.133c12.182 0 22.187 9.38 22.187 21.12v32zM414.72 421.333c0 11.74-10.005 21.12-22.187 21.12h-34.133c-12.182 0-22.187-9.38-22.187-21.12v-32c0-11.74 10.005-21.12 22.187-21.12h34.133c12.182 0 22.187 9.38 22.187 21.12v32zM551.253 421.333c0 11.74-10.005 21.12-22.187 21.12h-34.133c-12.182 0-22.187-9.38-22.187-21.12v-32c0-11.74 10.005-21.12 22.187-21.12h34.133c12.182 0 22.187 9.38 22.187 21.12v32zM687.787 421.333c0 11.74-10.005 21.12-22.187 21.12h-34.133c-12.182 0-22.187-9.38-22.187-21.12v-32c0-11.74 10.005-21.12 22.187-21.12h34.133c12.182 0 22.187 9.38 22.187 21.12v32zM824.32 421.333c0 11.74-10.005 21.12-22.187 21.12h-34.133c-12.182 0-22.187-9.38-22.187-21.12v-32c0-11.74 10.005-21.12 22.187-21.12h34.133c12.182 0 22.187 9.38 22.187 21.12v32zM687.787 624c0 11.74-10.005 21.12-22.187 21.12h-307.2c-12.182 0-22.187-9.38-22.187-21.12v-10.667c0-11.74 10.005-21.12 22.187-21.12h307.2c12.182 0 22.187 9.38 22.187 21.12v10.667z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["keyboard"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":61,"id":63,"name":"keyboard","prevSize":32,"code":59702},"setIdx":3,"setId":5,"iconIdx":52},{"icon":{"paths":["M827.303 827.306v0c9.349-9.335 12.764-23.079 8.87-35.704l-4.273-13.856c-6.957-22.557-19.493-42.993-36.449-59.415l-224.459-217.401c-11.86-11.487-14.062-29.707-5.28-43.688 7.009-11.241 15.473-34.315 15.473-80.553 0-112.728-91.748-204.476-204.476-204.476l-6.053 0.091c-106.311 2.958-195.329 92.021-198.333 198.56-1.593 55.795 18.978 108.496 57.798 148.363 38.775 39.958 90.929 61.939 146.588 61.939 26.669 0 50.243-6.007 72.361-18.341v0c13.642-7.642 30.703-5.266 41.738 5.812l62.708 62.953h37.818c28.277 0 51.2 22.923 51.2 51.2v37.909l8.92 8.874h37.909c28.277 0 51.2 22.923 51.2 51.2v37.909l2.685 2.685 48.32 14.819c12.638 3.876 26.383 0.46 35.737-8.88zM902.167 768.735l0.711 2.306c11.517 37.341 1.435 77.99-26.197 105.621v0c-27.636 27.636-68.281 37.74-105.641 26.262l-40.953-12.583c-15.716-4.829-30.010-13.431-41.636-25.056v0c-11.335-11.335-17.703-26.709-17.703-42.74v-23.204h-13.051c-22.532 0-44.143-8.946-60.083-24.871v0c-15.939-15.924-24.894-37.53-24.894-60.061v-13.051c-30.854 0-60.44-12.279-82.227-34.126l-31.73-31.818c-25.577 10.376-53.11 15.564-82.055 15.564-74.727 0-144.54-29.49-196.649-83.056-52.063-53.565-79.643-124.197-77.549-198.97 3.959-142.947 123.514-262.456 266.461-266.416l7.737-0.137c151.23 0 274.243 123.059 274.243 274.289 0 36.772-4.414 66.991-13.425 91.475l197.851 191.682c31.069 30.1 54.041 67.552 66.79 108.889zM276.969 346.78c0-38.547 31.265-69.812 69.812-69.812 38.592 0 69.812 31.265 69.812 69.812s-31.22 69.812-69.812 69.812c-38.547 0-69.812-31.265-69.812-69.812z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["key"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":62,"id":62,"name":"key","prevSize":32,"code":59703},"setIdx":3,"setId":5,"iconIdx":53},{"icon":{"paths":["M204.826 449.459v-193.485c0-28.277 22.923-51.2 51.2-51.2h294.554c28.277 0 51.2 22.923 51.2 51.2v526.49l135.975-130.597c15.17-14.57 39.133-14.576 54.31-0.014v0c14.406 13.822 14.879 36.706 1.057 51.112-0.337 0.352-0.682 0.697-1.033 1.034l-190.927 183.524c-19.817 19.049-51.14 19.050-70.959 0.004l-190.972-183.531c-14.393-13.833-14.848-36.714-1.016-51.108 0.339-0.352 0.684-0.698 1.037-1.036v0c15.176-14.561 39.138-14.552 54.304 0.020l131.373 126.239v-499.456h-243.302v170.803c0 21.208-17.192 38.4-38.4 38.4v0c-21.208 0-38.4-17.192-38.4-38.4z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["jump"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":63,"id":61,"name":"jump","prevSize":32,"code":59704},"setIdx":3,"setId":5,"iconIdx":54},{"icon":{"paths":["M512 768v0c19.206 0 34.775-15.569 34.775-34.775v-284.375c0-19.206-15.569-34.775-34.775-34.775v0c-19.206 0-34.775 15.569-34.775 34.775v284.375c0 19.206 15.569 34.775 34.775 34.775zM512 352c26 0 45.175-18.525 45.175-42.575 0-24.375-19.175-42.9-45.175-42.9s-45.175 18.525-45.175 42.9c0 24.050 19.175 42.575 45.175 42.575z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["italic"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":64,"id":60,"name":"italic","prevSize":32,"code":59705},"setIdx":3,"setId":5,"iconIdx":55},{"icon":{"paths":["M512 921.6c-226.193 0-409.6-183.407-409.6-409.6 0-226.24 183.407-409.6 409.6-409.6 226.24 0 409.6 183.36 409.6 409.6 0 226.193-183.36 409.6-409.6 409.6zM512 851.383c187.433 0 339.383-151.95 339.383-339.383s-151.95-339.383-339.383-339.383c-187.433 0-339.383 151.95-339.383 339.383s151.95 339.383 339.383 339.383zM512.042 378.058c-24.155 0-42.364-18.678-42.364-43.535 0-24.904 18.21-43.722 42.364-43.722s42.318 18.818 42.318 43.722c0 24.857-18.163 43.535-42.318 43.535zM513.142 733.17c-21.065 0-38.245-17.133-38.245-38.198v-240.704c0-21.065 17.18-38.198 38.245-38.198s38.198 17.133 38.198 38.198v240.704c0 21.065-17.133 38.198-38.198 38.198z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["info-circled"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":65,"id":59,"name":"info-circled","prevSize":32,"code":59706},"setIdx":3,"setId":5,"iconIdx":56},{"icon":{"paths":["M512 102.4v0c20.524 0 37.161 16.638 37.161 37.161v449.409l74.777-76.869c14.366-14.768 37.984-15.094 52.752-0.728 0.246 0.239 0.489 0.482 0.728 0.728v0c14.886 15.302 14.886 39.673 0 54.976l-129.258 132.875c-19.717 20.269-52.132 20.716-72.401 0.999-0.338-0.328-0.671-0.661-0.999-0.999l-129.258-132.875c-14.886-15.302-14.886-39.673 0-54.976v0c14.366-14.768 37.984-15.094 52.752-0.728 0.246 0.239 0.489 0.482 0.728 0.728l75.858 77.981v-450.521c0-20.524 16.638-37.161 37.161-37.161zM691.2 301.894v-76.402h153.6c28.277 0 51.2 22.923 51.2 51.2v593.708c0 28.277-22.923 51.2-51.2 51.2h-665.6c-28.277 0-51.2-22.923-51.2-51.2v-593.708c0-28.277 22.923-51.2 51.2-51.2h153.6v76.402h-130.477v543.304h619.355v-543.304h-130.477z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["import"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":66,"id":58,"name":"import","prevSize":32,"code":59707},"setIdx":3,"setId":5,"iconIdx":57},{"icon":{"paths":["M277.962 392.518c-32.296 0.102-58.446 26.818-58.521 59.788v119.482c0.1 32.952 26.242 59.639 58.521 59.741h468.075c32.314-0.102 58.471-26.846 58.521-59.834v-119.436c-0.1-32.952-26.242-59.639-58.521-59.741h-468.075zM746.038 497.042l-73.128 74.7h-87.781l-73.128-74.653-73.128 74.607h-87.827l-73.037-74.607v-44.829h43.868l73.128 74.653 73.083-74.607h87.827l73.128 74.653 73.128-74.653h43.868v44.736zM394.958 691.223h234.083v59.695h-234.083v-59.695zM512 153.6c-225.847 0-409.6 173.834-409.6 388.271v268.788c0.1 32.952 26.242 59.639 58.521 59.741h702.158c32.279-0.102 58.421-26.789 58.521-59.741v-268.788c0-214.436-183.753-388.271-409.646-388.271h0.046zM863.079 810.659h-702.158v-268.788c0-184.566 154.448-333.918 351.034-333.918s351.079 149.353 351.079 333.918v268.788h0.046z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["hubot"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":67,"id":57,"name":"hubot","prevSize":32,"code":59708},"setIdx":3,"setId":5,"iconIdx":58},{"icon":{"paths":["M543.721 856.474v-127.067c54.295-7.873 101.717-35.408 135.714-75.366l107.588 67.22c-57.253 75.048-144.134 126.157-243.302 135.214zM166.889 531.706l126.839 4.415c6.645 60.075 37.046 112.503 82.148 148.184l-63.488 109.909c-83.422-59.164-139.401-154.192-145.499-262.508zM480.233 167.481v127.067c-54.295 7.919-101.717 35.408-135.714 75.366l-107.543-67.174c57.253-75.048 144.134-126.157 243.257-135.259zM856.974 490.018l-126.93-4.46c-7.191-59.119-37.456-110.729-81.92-145.909l63.442-109.909c82.876 58.755 138.581 152.872 145.408 260.278zM728.496 553.552l126.157 4.415c-5.188 38.958-16.839 75.776-33.906 109.545l-106.997-66.856c6.599-14.928 11.56-30.674 14.746-47.104zM543.721 294.548v-127.067c40.050 3.641 78.006 14.336 112.913 30.492l-63.124 109.363c-15.747-6.281-32.495-10.286-49.789-12.789zM295.276 472.633l-126.293-4.415c5.052-39.731 16.839-77.323 34.27-111.73l106.951 66.81c-6.872 15.61-11.833 32.131-14.928 49.334zM512 669.15c-86.744 0-157.195-70.497-157.195-157.15 0-86.699 70.451-157.195 157.195-157.195 86.699 0 157.195 70.497 157.195 157.195 0 86.653-70.497 157.15-157.195 157.15zM480.233 729.407v127.067c-40.004-3.641-77.961-14.29-112.913-30.492l63.169-109.363c15.701 6.281 32.495 10.286 49.744 12.789zM512 102.4c-225.826 0-409.6 183.728-409.6 409.6 0 225.826 183.774 409.6 409.6 409.6s409.6-183.774 409.6-409.6c0-225.872-183.774-409.6-409.6-409.6z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["help"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":68,"id":56,"name":"help","prevSize":32,"code":59709},"setIdx":3,"setId":5,"iconIdx":59},{"icon":{"paths":["M292.571 643.657v-263.314h-146.286c-24.237 0-43.886-19.648-43.886-43.886v0c0-24.237 19.648-43.886 43.886-43.886h146.286v-146.286c0-24.237 19.648-43.886 43.886-43.886v0c24.237 0 43.886 19.648 43.886 43.886v146.286h263.314v-146.286c0-24.237 19.648-43.886 43.886-43.886v0c24.237 0 43.886 19.648 43.886 43.886v146.286h146.286c24.237 0 43.886 19.648 43.886 43.886v0c0 24.237-19.648 43.886-43.886 43.886h-146.286v263.314h146.286c24.237 0 43.886 19.648 43.886 43.886v0c0 24.237-19.648 43.886-43.886 43.886h-146.286v146.286c0 24.237-19.648 43.886-43.886 43.886v0c-24.237 0-43.886-19.648-43.886-43.886v-146.286h-263.314v146.286c0 24.237-19.648 43.886-43.886 43.886v0c-24.237 0-43.886-19.648-43.886-43.886v-146.286h-146.286c-24.237 0-43.886-19.648-43.886-43.886v0c0-24.237 19.648-43.886 43.886-43.886h146.286zM380.343 643.657h263.314v-263.314h-263.314v263.314z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["hashtag"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":69,"id":55,"name":"hashtag","prevSize":32,"code":59710},"setIdx":3,"setId":5,"iconIdx":60},{"icon":{"paths":["M729.177 398.231c64.9-30.875 141.223 17.116 141.223 90.853v137.482c-0 7.684-0.875 15.342-2.607 22.828l-45.070 194.765c-10.486 45.318-50.562 77.441-96.639 77.441h-292.957c-31.771 0-61.833-15.527-80.442-41.539l-180.258-252.049c-31.972-44.7-22.262-107.036 21.821-139.638 31.412-23.228 72.528-25.465 105.831-7.241v-278.467c0-55.281 44.508-100.267 99.246-100.267s99.244 44.985 99.244 100.267v132.010c36.5-9.503 75.619 2.763 100.447 32.405 44.615-25.166 101.182-11.721 130.159 31.149zM230.246 537.691c-18.055 12.931-22.917 34.956-8.598 54.978l180.277 252.049c7.258 10.145 18.933 16.201 31.202 16.201h292.958c18.003 0 33.472-12.498 37.628-30.46l45.073-194.766c0.69-2.986 1.040-6.056 1.040-9.125v-137.481c0-23.624-16.54-38.907-38.761-40.254-21.568-1.307-38.352 11.161-38.581 31.558-0.011 1.235-0.011 1.235-0.017 3.133-0.035 12.857-10.45 23.261-23.284 23.261-12.869 0-23.301-10.451-23.301-23.343v-28.727c0-24.172-16.75-39.256-38.668-39.245-21.915 0.011-38.673 15.109-38.673 39.245v28.728c0 12.891-10.432 23.341-23.3 23.341s-23.3-10.45-23.3-23.341v-51.642c0-24.173-16.75-39.257-38.668-39.245-21.914 0.012-38.673 15.111-38.673 39.245v51.639c0 12.892-10.433 23.343-23.302 23.343s-23.302-10.451-23.302-23.343v-280.775c0-24.173-16.749-39.257-38.667-39.245-21.914 0.012-38.673 15.111-38.673 39.245v383.212c0 9.369-6.039 17.666-14.943 20.532s-18.637-0.356-24.084-7.972l-37.578-52.54c-13.477-18.842-35.918-21.017-53.804-8.208zM437.994 722.849v-100.908c0-12.892 10.433-23.343 23.302-23.343s23.302 10.451 23.302 23.343v100.908c0 12.892-10.433 23.343-23.302 23.343s-23.302-10.451-23.302-23.343zM585.24 598.598c12.869 0 23.301 10.451 23.301 23.343v100.91c0 12.892-10.432 23.343-23.301 23.343s-23.301-10.451-23.301-23.343v-100.91c0-12.892 10.432-23.343 23.301-23.343zM685.883 621.94c0-12.892 10.432-23.343 23.301-23.343s23.301 10.451 23.301 23.343v100.91c0 12.892-10.432 23.343-23.301 23.343s-23.301-10.451-23.301-23.343v-100.91z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["hand-pointer"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":70,"id":54,"name":"hand-pointer","prevSize":32,"code":59711},"setIdx":3,"setId":5,"iconIdx":61},{"icon":{"paths":["M921.6 521.557c0 233.745-162.684 400.043-402.893 400.043-110.449 0.121-216.41-42.994-294.509-119.835s-121.921-181.095-121.798-289.764c0-226.6 185.997-409.6 416.307-409.6 112.125 0 206.488 40.505 279.157 107.179l-113.328 107.179c-148.205-140.629-423.847-34.998-423.847 195.243 0 142.905 116.011 258.64 258.018 258.64 164.858 0 226.656-116.281 236.37-176.583h-236.37v-140.811h396.324c3.886 20.981 6.568 41.142 6.568 68.358v-0.046z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["google"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":71,"id":53,"name":"google","prevSize":32,"code":59712},"setIdx":3,"setId":5,"iconIdx":62},{"icon":{"paths":["M150.050 416.542l361.813 466.808-396.538-292.201c-10.911-8.038-15.495-22.054-11.423-34.921l46.148-139.686zM270.655 138.978c-2.277-6.329-8.316-10.555-15.087-10.555s-12.81 4.225-15.087 10.555l-90.431 277.564h211.081l-90.476-277.564zM361.131 416.542l150.778 466.808 150.733-466.808h-301.511zM919.916 556.228l-46.148-139.686-361.859 466.808 396.584-292.201c10.894-8.050 15.46-22.064 11.378-34.921h0.046zM783.246 138.978c-2.277-6.329-8.316-10.555-15.087-10.555s-12.81 4.225-15.087 10.555l-90.431 277.564h211.081l-90.476-277.564z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["gitlab"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":72,"id":52,"name":"gitlab","prevSize":32,"code":59713},"setIdx":3,"setId":5,"iconIdx":63},{"icon":{"paths":["M372.17 762.031c0 3.362-3.897 6.070-8.873 6.070-5.634 0.514-9.53-2.194-9.53-6.070 0-3.408 3.943-6.070 8.873-6.070 5.117-0.56 9.53 2.148 9.53 6.070zM319.215 754.42c-1.221 3.362 2.206 7.284 7.324 8.264 4.413 1.728 9.53 0 10.563-3.362 0.986-3.408-2.253-7.284-7.324-8.824-4.46-1.167-9.389 0.514-10.563 3.922zM394.47 751.525c-4.929 1.167-8.31 4.389-7.84 8.311 0.516 3.362 4.976 5.603 10.047 4.389 4.976-1.167 8.356-4.389 7.84-7.797-0.469-3.222-5.070-5.416-10.047-4.902zM506.578 102.4c-236.281 0-416.978 178.354-416.978 413.343 0 187.832 118.868 348.585 288.72 405.172 21.783 3.875 29.435-9.478 29.435-20.497 0-10.505-0.469-68.447-0.469-104.024 0 0-119.244 25.446-144.313-50.425 0 0-19.389-49.351-47.322-62.050 0 0-39.012-26.613 2.723-26.053 0 0 42.393 3.362 65.725 43.701 37.322 65.365 99.808 46.55 124.173 35.391 3.943-27.080 15.023-45.896 27.229-57.101-95.16-10.505-191.26-24.232-191.26-187.179 0-46.596 12.957-69.941 40.233-99.776-4.46-11.019-18.919-56.401 4.413-114.996 35.585-11.019 117.507 45.756 117.507 45.756 34.842-9.61 70.833-14.478 106.991-14.474 36.143-0.020 72.121 4.849 106.944 14.474 0 0 81.921-56.961 117.554-45.756 23.332 58.782 8.826 103.978 4.413 114.996 27.229 29.975 43.942 53.366 43.942 99.776 0 163.46-100.324 176.487-195.532 187.225 15.68 13.353 28.966 38.752 28.966 78.579 0 57.055-0.516 127.696-0.516 141.61 0 11.019 7.84 24.372 29.435 20.497 170.368-56.261 285.81-217.013 285.81-404.846 0-234.989-191.588-413.343-427.822-413.343zM255.18 686.627c-2.253 1.728-1.737 5.603 1.174 8.824 2.723 2.708 6.619 3.875 8.873 1.681 2.206-1.681 1.69-5.603-1.221-8.778-2.723-2.708-6.619-3.922-8.826-1.728zM236.777 672.9c-1.221 2.241 0.469 4.949 3.897 6.63 2.723 1.681 6.103 1.167 7.324-1.167 1.221-2.241-0.469-4.949-3.897-6.63-3.427-1.027-6.103-0.467-7.324 1.167zM291.939 733.223c-2.723 2.194-1.69 7.284 2.206 10.505 3.943 3.875 8.873 4.389 11.079 1.681 2.206-2.194 1.221-7.284-2.206-10.505-3.756-3.875-8.873-4.389-11.079-1.681zM272.55 708.338c-2.723 1.681-2.723 6.070 0 9.992 2.723 3.875 7.324 5.603 9.53 3.875 2.723-2.194 2.723-6.583 0-10.505-2.394-3.875-6.807-5.603-9.53-3.362z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["github"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":73,"id":51,"name":"github","prevSize":32,"code":59714},"setIdx":3,"setId":5,"iconIdx":64},{"icon":{"paths":["M375.059 230.4h-170.259c-14.138 0-25.6 11.462-25.6 25.6v512c0 14.138 11.462 25.6 25.6 25.6h614.4c14.138 0 25.6-11.462 25.6-25.6v-409.6c0-14.138-11.462-25.6-25.6-25.6h-342.21l-82.738-93.74c-4.86-5.506-11.85-8.66-19.193-8.66zM511.641 256h358.759c28.277 0 51.2 22.923 51.2 51.2v512c0 28.277-22.923 51.2-51.2 51.2h-716.8c-28.277 0-51.2-22.923-51.2-51.2v-614.4c0-28.277 22.923-51.2 51.2-51.2h244.559c14.687 0 28.667 6.307 38.387 17.319l75.095 85.081z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["folder"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":74,"id":50,"name":"folder","prevSize":32,"code":59715},"setIdx":3,"setId":5,"iconIdx":65},{"icon":{"paths":["M649.479 321.022l142.305 128.268c21.614 19.482 22.48 51.889 1.935 72.384-10.193 10.169-24.34 15.925-39.135 15.925h-468.794v345.6c0 21.208-18.13 38.4-40.495 38.4s-40.495-17.192-40.495-38.4v-729.6c0-28.277 24.174-51.2 53.994-51.2h512.942c26.214 0 47.464 20.151 47.464 45.008 0 12.259-5.274 23.988-14.602 32.476l-155.119 141.137zM661.1 179.2h-375.309v281.6h373.075c5.964 0 10.799-4.585 10.799-10.24 0-2.779-1.191-5.439-3.301-7.369l-113.393-103.746c-10.73-9.817-11.036-26.023-0.683-36.198 0.224-0.22 0.451-0.436 0.683-0.647l115.626-105.79c4.292-3.927 4.414-10.409 0.273-14.479-2.035-2-4.84-3.13-7.771-3.13z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["flag"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":75,"id":49,"name":"flag","prevSize":32,"code":59716},"setIdx":3,"setId":5,"iconIdx":66},{"icon":{"paths":["M204.8 358.4h153.6v-102.4h-153.6v102.4zM204.8 460.8v102.4h153.6v-102.4h-153.6zM204.8 665.6v102.4h153.6v-102.4h-153.6zM460.8 768h358.4v-102.4h-358.4v102.4zM819.2 563.2v-102.4h-358.4v102.4h358.4zM819.2 358.4v-102.4h-358.4v102.4h358.4zM204.8 153.6h614.4c56.554 0 102.4 45.846 102.4 102.4v512c0 56.554-45.846 102.4-102.4 102.4h-614.4c-56.554 0-102.4-45.846-102.4-102.4v-512c0-56.554 45.846-102.4 102.4-102.4z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["file-sheets"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":76,"id":48,"name":"file-sheets","prevSize":32,"code":59717},"setIdx":3,"setId":5,"iconIdx":67},{"icon":{"paths":["M849.98 555.116c-38.964-38.325-150.107-27.786-205.678-20.759-54.933-33.535-91.661-79.844-117.53-147.871 12.456-51.42 32.257-129.667 17.246-178.851-13.414-83.677-120.724-75.373-136.054-18.843-14.053 51.42-1.278 122.96 22.356 214.301-31.938 76.331-79.525 178.851-113.059 237.616-63.875 32.896-150.107 83.677-162.882 147.552-10.539 50.461 83.038 176.296 243.045-99.645 71.54-23.634 149.468-52.697 218.453-64.195 60.362 32.576 130.944 54.294 178.212 54.294 81.441 0 89.425-90.064 55.891-123.599zM217.296 803.59c16.288-43.755 78.247-94.216 97.090-111.782-60.681 96.771-97.090 114.017-97.090 111.782zM477.907 194.859c23.634 0 21.398 102.52 5.749 130.305-14.053-44.393-13.733-130.305-5.749-130.305zM399.979 631.127c30.979-53.975 57.488-118.169 78.886-174.699 26.508 48.226 60.362 86.87 96.132 113.379-66.43 13.733-124.237 41.838-175.018 61.32zM820.278 615.159c0 0-15.969 19.163-119.127-24.911 112.101-8.304 130.625 17.246 119.127 24.911z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["file-pdf"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":77,"id":47,"name":"file-pdf","prevSize":32,"code":59718},"setIdx":3,"setId":5,"iconIdx":68},{"icon":{"paths":["M251.909 698.63v0c-13.538-11.36-15.304-31.544-3.944-45.083l294.504-350.976c49.32-58.777 136.496-66.538 195.386-17.125 58.618 49.186 66.186 136.85 17.036 195.424l-315.359 375.83c-71.816 85.587-199.714 96.629-285.354 24.784-85.712-71.905-96.714-200.039-24.728-285.829l342.715-408.431c94.541-112.67 262.87-127.247 375.541-32.689 112.773 94.643 127.503 262.904 32.947 375.591l-322.185 383.965c-11.36 13.538-31.544 15.304-45.083 3.944v0c-13.538-11.36-15.304-31.544-3.944-45.083l322.185-383.965c71.835-85.61 60.639-213.506-25.062-285.429-85.614-71.85-213.568-60.769-285.372 24.804l-342.715 408.431c-49.295 58.747-41.759 146.504 16.834 195.659 58.59 49.152 146.118 41.595 195.194-16.891l315.359-375.83c26.451-31.523 22.368-78.814-9.148-105.259-31.779-26.665-78.593-22.497-105.22 9.236l-294.504 350.976c-11.36 13.538-31.544 15.304-45.083 3.944z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["file-generic"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":78,"id":46,"name":"file-generic","prevSize":32,"code":59719},"setIdx":3,"setId":5,"iconIdx":69},{"icon":{"paths":["M153.6 153.6h716.8c28.277 0 51.2 22.923 51.2 51.2v0c0 28.277-22.923 51.2-51.2 51.2h-716.8c-28.277 0-51.2-22.923-51.2-51.2v0c0-28.277 22.923-51.2 51.2-51.2zM153.6 358.4h716.8c28.277 0 51.2 22.923 51.2 51.2v0c0 28.277-22.923 51.2-51.2 51.2h-716.8c-28.277 0-51.2-22.923-51.2-51.2v0c0-28.277 22.923-51.2 51.2-51.2zM153.6 563.2h716.8c28.277 0 51.2 22.923 51.2 51.2v0c0 28.277-22.923 51.2-51.2 51.2h-716.8c-28.277 0-51.2-22.923-51.2-51.2v0c0-28.277 22.923-51.2 51.2-51.2zM153.6 768h307.2c28.277 0 51.2 22.923 51.2 51.2v0c0 28.277-22.923 51.2-51.2 51.2h-307.2c-28.277 0-51.2-22.923-51.2-51.2v0c0-28.277 22.923-51.2 51.2-51.2z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["file-document"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":79,"id":45,"name":"file-document","prevSize":32,"code":59720},"setIdx":3,"setId":5,"iconIdx":70},{"icon":{"paths":["M921.6 147.547v728.724c0 25.031-20.298 45.147-45.147 45.147h-208.85v-317.076h106.45l15.929-123.608h-122.561v-79.007c0-35.817 9.876-60.166 61.258-60.166h65.49v-110.592c-31.712-3.406-63.588-5.062-95.482-4.961-94.345 0-159.061 57.617-159.061 163.476v91.25h-106.815v123.608h106.815v317.258h-392.078c-24.903-0.075-45.072-20.244-45.147-45.147v-728.906c0-24.849 20.298-45.147 45.147-45.147h728.724c25.031 0 45.329 20.298 45.329 45.147z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["facebook"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":80,"id":44,"name":"facebook","prevSize":32,"code":59721},"setIdx":3,"setId":5,"iconIdx":71},{"icon":{"paths":["M325.242 783.695l70.491-60.414c37.053 10.289 76.034 15.779 116.267 15.779 142.353 0 269.027-68.734 350.137-175.566 4.567-6.016 10.062-13.956 16.484-23.821 10.979-16.866 11.061-38.599 0.207-55.546-6.187-9.661-11.508-17.456-15.964-23.384-21.008-27.953-45.389-53.358-72.597-75.592l60.282-51.664c44.277 39.025 82.118 85.594 111.616 137.828 14.179 25.106 14.179 56.265 0 81.371-90.173 159.672-258.39 266.514-450.166 266.514-65.744 0-128.731-12.558-186.758-35.505zM168.775 686.343c-42.268-38.156-78.486-83.271-106.941-133.655-14.179-25.107-14.179-56.266 0-81.373 90.173-159.672 258.39-266.514 450.166-266.514 63.279 0 124.004 11.634 180.211 32.968l-72.317 61.974c-34.403-8.576-70.532-13.145-107.894-13.145-146.146 0-270.625 71.048-351.315 176.679-4.071 5.329-8.932 12.217-14.583 20.663-11.398 17.036-11.538 39.228-0.356 56.406l0.001-0c5.388 8.276 10.035 15.031 13.942 20.262 20.364 27.269 43.676 52.104 69.448 74.007l-60.362 51.729zM469.864 659.749l194.572-166.755c0.769 6.228 1.164 12.571 1.164 19.007 0 84.831-68.769 153.6-153.6 153.6-14.612 0-28.747-2.040-42.136-5.851zM358.822 523.476c-0.28-3.789-0.422-7.616-0.422-11.476 0-84.831 68.769-153.6 153.6-153.6 11.977 0 23.633 1.371 34.821 3.964l-187.999 161.112zM121.51 842.573c-13.181-15.357-11.417-38.491 3.939-51.672l715.824-613.448c15.373-13.174 38.514-11.395 51.692 3.975 13.174 15.365 11.398 38.501-3.967 51.675l-715.759 613.433c-15.382 13.183-38.536 11.409-51.73-3.963z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["eye-off"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":81,"id":43,"name":"eye-off","prevSize":32,"code":59722},"setIdx":3,"setId":5,"iconIdx":72},{"icon":{"paths":["M537.998 831.538h341.366c23.326 0 42.236 19.514 42.236 43.585s-18.91 43.585-42.236 43.585l-464.6 2.891c-28.396 0-53.434-11.69-75.114-35.070l-215.032-215.032c-39.586-39.586-39.788-103.567-0.45-142.905l391.75-391.75c39.338-39.338 103.318-39.136 142.905 0.45l215.032 215.032c39.586 39.586 39.788 103.567 0.45 142.905l-336.308 336.308zM391.608 368.669l250.871 250.871 178.068-178.068c9.834-9.834 9.784-25.83-0.113-35.726l-215.032-215.032c-9.897-9.897-25.892-9.947-35.726-0.113l-178.068 178.068zM338.187 422.090l-160.262 160.262c-9.834 9.834-9.784 25.83 0.113 35.726l215.032 215.032c9.897 9.897 25.892 9.947 35.726 0.113l160.262-160.262-250.871-250.871z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["eraser"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":82,"id":42,"name":"eraser","prevSize":32,"code":59723},"setIdx":3,"setId":5,"iconIdx":73},{"icon":{"paths":["M512 921.6c-226.216 0-409.6-183.384-409.6-409.6s183.384-409.6 409.6-409.6c226.216 0 409.6 183.384 409.6 409.6s-183.384 409.6-409.6 409.6zM512 842.323c182.432 0 330.323-147.89 330.323-330.323s-147.89-330.323-330.323-330.323c-182.432 0-330.323 147.89-330.323 330.323s147.89 330.323 330.323 330.323zM617.703 459.148c-29.189 0-52.852-23.662-52.852-52.852s23.662-52.852 52.852-52.852c29.189 0 52.852 23.662 52.852 52.852s-23.662 52.852-52.852 52.852zM406.297 459.148c-29.189 0-52.852-23.662-52.852-52.852s23.662-52.852 52.852-52.852c29.189 0 52.852 23.662 52.852 52.852s-23.662 52.852-52.852 52.852zM365.618 626.852v0c15.048-15.048 38.673-17.26 56.252-5.268 1.49 1.018 2.891 1.924 4.202 2.72 50.324 30.547 112.95 32.907 165.176 7.082 4.591-2.27 9.926-5.508 16.005-9.714l0.001 0.001c17.854-12.352 41.986-10.172 57.338 5.179v0c13.89 13.89 13.89 36.411 0 50.302-1.206 1.206-2.497 2.324-3.864 3.345-12.813 9.569-23.658 16.594-32.536 21.074-79.213 39.971-175.185 35.294-250.475-14.032-2.476-1.622-5.219-3.565-8.23-5.828l0-0.001c-16.077-12.084-19.314-34.914-7.229-50.99 1.028-1.367 2.15-2.66 3.36-3.87z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["emoji"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":83,"id":41,"name":"emoji","prevSize":32,"code":59724},"setIdx":3,"setId":5,"iconIdx":74},{"icon":{"paths":["M774.213 358.611l-108.786-108.736 54.393-54.443c23.582-23.482 64.564-23.582 88.046-0.050l20.79 20.79c24.23 24.28 24.23 63.766 0 88.046l-54.443 54.393zM370.876 761.948l-110.338 33.528c-13.528 4.111-27.826-3.524-31.937-17.051-1.474-4.85-1.474-10.028-0.002-14.879l33.491-110.334 350.439-350.489 108.836 108.786-350.489 350.439zM860.763 142.484c-25.875-25.826-60.226-40.084-96.871-40.084-36.594 0-71.045 14.259-96.92 40.134l-470.992 471.042-65.715 216.365c-8.218 27.057 7.054 55.652 34.111 63.87 9.703 2.947 20.063 2.946 29.766-0.002l216.369-65.751 471.042-470.942c53.396-53.496 53.396-140.395 0-193.841l-20.79-20.79z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["edit"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":84,"id":40,"name":"edit","prevSize":32,"code":59725},"setIdx":3,"setId":5,"iconIdx":75},{"icon":{"paths":["M801.451 563.304h65.536v247.856c0 60.994-49.446 110.44-110.44 110.44h-543.706c-60.994 0-110.44-49.446-110.44-110.44v-543.706c0-60.994 49.446-110.44 110.44-110.44h257.92l0.634 65.536h-258.554c-24.8 0-44.904 20.104-44.904 44.904v543.706c0 24.8 20.104 44.904 44.904 44.904h543.706c24.8 0 44.904-20.104 44.904-44.904v-247.856zM795.829 321.033l46.458-46.415c20.676-20.719 20.676-54.414 0-75.133l-17.741-17.741c-20.038-20.081-55.009-19.996-75.133 0.043l-46.415 46.458 92.831 92.788zM451.649 665.214l299.084-299.042-92.873-92.831-299.042 299.084-28.579 94.152c-1.256 4.139-1.256 8.558 0.002 12.696 3.508 11.544 15.709 18.058 27.253 14.55l94.155-28.61zM869.686 136.605l17.741 17.741c45.565 45.607 45.565 119.761 0 165.411l-401.955 401.87-184.635 56.108c-8.28 2.516-17.12 2.517-25.4 0.002-23.088-7.012-36.12-31.414-29.108-54.502l56.077-184.632 401.913-401.955c22.080-22.080 51.478-34.248 82.705-34.248 31.27 0 60.583 12.168 82.663 34.205z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["edit-rounded"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":85,"id":39,"name":"edit-rounded","prevSize":32,"code":59726},"setIdx":3,"setId":5,"iconIdx":76},{"icon":{"paths":["M327.788 691.2h-104.056c36.791 59.058 91.226 105.986 155.931 133.412-21.594-36.602-39.346-81.994-51.874-133.412zM313.652 614.4c-4.212-32.729-6.452-67.041-6.452-102.4 0-26.25 1.235-51.923 3.594-76.8h-129.45c-5.709 24.678-8.727 50.387-8.727 76.8 0 35.688 5.509 70.089 15.722 102.4h125.313zM322.087 358.4c12.547-61.994 32.463-116.447 57.576-159.012-73.799 31.281-134.238 87.932-170.378 159.012h112.802zM701.913 358.4h112.802c-36.139-71.081-96.578-127.731-170.378-159.012 25.112 42.566 45.028 97.018 57.576 159.012zM713.206 435.2c2.359 24.877 3.594 50.55 3.594 76.8 0 35.359-2.24 69.671-6.452 102.4h125.313c10.213-32.311 15.722-66.712 15.722-102.4 0-26.413-3.018-52.122-8.727-76.8h-129.45zM696.212 691.2c-12.528 51.419-30.28 96.81-51.874 133.412 64.705-27.426 119.139-74.355 155.931-133.412h-104.056zM403.174 691.2c22.577 95.277 62.874 158.72 108.826 158.72s86.249-63.443 108.826-158.72h-217.652zM389.768 614.4h244.464c3.749-31.537 5.768-65.070 5.768-99.84 0-27.341-1.249-53.918-3.605-79.36h-248.79c-2.356 25.442-3.605 52.019-3.605 79.36 0 34.77 2.020 68.303 5.768 99.84zM398.695 358.4h226.611c-21.439-106.558-64.134-179.2-113.305-179.2s-91.867 72.642-113.305 179.2zM512 921.6c-226.193 0-409.6-183.407-409.6-409.6 0-226.24 183.407-409.6 409.6-409.6 226.24 0 409.6 183.36 409.6 409.6 0 226.193-183.36 409.6-409.6 409.6z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["discover"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":86,"id":38,"name":"discover","prevSize":32,"code":59727},"setIdx":3,"setId":5,"iconIdx":77},{"icon":{"paths":["M530.684 472.361c17.254-61.004 73.343-105.703 139.871-105.703s122.617 44.699 139.871 105.703h71.536c21.892 0 39.639 17.747 39.639 39.639s-17.747 39.639-39.639 39.639h-71.536c-17.254 61.004-73.343 105.703-139.871 105.703s-122.617-44.699-139.871-105.703h-388.645c-21.892 0-39.639-17.747-39.639-39.639s17.747-39.639 39.639-39.639h388.645zM670.555 578.065c36.486 0 66.065-29.578 66.065-66.065s-29.578-66.065-66.065-66.065c-36.486 0-66.065 29.578-66.065 66.065s29.578 66.065 66.065 66.065zM406.297 630.916c66.528 0 122.617 44.699 139.871 105.703h335.794c21.892 0 39.639 17.747 39.639 39.639s-17.747 39.639-39.639 39.639h-335.794c-17.254 61.004-73.343 105.703-139.871 105.703s-122.617-44.699-139.871-105.703h-124.387c-21.892 0-39.639-17.747-39.639-39.639s17.747-39.639 39.639-39.639h124.387c17.254-61.004 73.343-105.703 139.871-105.703zM406.297 842.323c36.486 0 66.065-29.578 66.065-66.065s-29.578-66.065-66.065-66.065c-36.486 0-66.065 29.578-66.065 66.065s29.578 66.065 66.065 66.065zM353.445 102.4c66.528 0 122.617 44.699 139.871 105.703h388.645c21.892 0 39.639 17.747 39.639 39.639s-17.747 39.639-39.639 39.639h-388.645c-17.254 61.004-73.343 105.703-139.871 105.703s-122.617-44.699-139.871-105.703h-71.536c-21.892 0-39.639-17.747-39.639-39.639s17.747-39.639 39.639-39.639h71.536c17.254-61.004 73.343-105.703 139.871-105.703zM353.445 313.806c36.486 0 66.065-29.578 66.065-66.065s-29.578-66.065-66.065-66.065c-36.486 0-66.065 29.578-66.065 66.065s29.578 66.065 66.065 66.065z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["customize"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":87,"id":37,"name":"customize","prevSize":32,"code":59728},"setIdx":3,"setId":5,"iconIdx":78},{"icon":{"paths":["M102.436 291.481c-0.631-14.945 6.986-30.23 22.636-36.505l374.511-150.166c8.022-3.216 16.878-3.212 24.897 0.011l369.772 148.636c15.151 3.68 27.348 17.918 27.348 36.276v396.377c0 14.076-7.511 26.944-19.403 33.24l-374.143 198.101c-9.405 5.13-21.009 5.858-31.74 0.176-0.112-0.056-0.222-0.116-0.332-0.176l-374.143-198.101c-11.892-6.296-19.403-19.164-19.403-33.24v-394.628zM231.134 291.933l280.884 128.051 280.542-127.895-280.557-112.774-280.868 112.619zM547.125 486.752v337.49l304.261-161.1v-316.94l-15.771 7.19-288.49 133.36zM172.65 346.475v316.667l304.261 161.1v-337.466l-304.261-140.301z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["cube"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":88,"id":36,"name":"cube","prevSize":32,"code":59729},"setIdx":3,"setId":5,"iconIdx":79},{"icon":{"paths":["M512 447.614l210.621-210.621c17.78-17.78 46.606-17.78 64.386 0v0c17.78 17.78 17.78 46.606 0 64.386l-210.621 210.621 210.621 210.621c17.78 17.78 17.78 46.606 0 64.386v0c-17.78 17.78-46.606 17.78-64.386 0l-210.621-210.621-210.621 210.621c-17.78 17.78-46.606 17.78-64.386 0v0c-17.78-17.78-17.78-46.606 0-64.386l210.621-210.621-210.621-210.621c-17.78-17.78-17.78-46.606 0-64.386v0c17.78-17.78 46.606-17.78 64.386 0l210.621 210.621z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["cross"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":89,"id":35,"name":"cross","prevSize":32,"code":59730},"setIdx":3,"setId":5,"iconIdx":80},{"icon":{"paths":["M153.6 153.6v576.366c0 28.277 22.923 51.2 51.2 51.2h133.781v89.234c0 28.277 22.923 51.2 51.2 51.2h429.419c28.277 0 51.2-22.923 51.2-51.2v-351.93c0-13.473-5.31-26.403-14.78-35.986l-221.761-224.436c-9.619-9.735-22.735-15.214-36.42-15.214h-24.857l-123.655-125.211c-9.62-9.741-22.739-15.223-36.429-15.223h-207.696c-28.277 0-51.2 22.923-51.2 51.2zM248.568 172.57h145.906c6.846 0 13.408 2.742 18.218 7.615l61.85 62.649h-135.961v468.114h-90.013c-14.138 0-25.6-11.462-25.6-25.6v-487.178c0-14.138 11.462-25.6 25.6-25.6zM433.548 313.051h110.658c14.138 0 25.6 11.462 25.6 25.6v182.81c0 14.138 11.462 25.6 25.6 25.6h180.026c14.138 0 25.6 11.462 25.6 25.6v253.074c0 14.138-11.462 25.6-25.6 25.6h-341.884c-14.138 0-25.6-11.462-25.6-25.6v-487.085c0-14.138 11.462-25.6 25.6-25.6zM647.937 371.541l95.417 96.585c1.987 2.012 1.968 5.253-0.044 7.241-0.958 0.947-2.251 1.478-3.598 1.478h-95.417c-2.828 0-5.12-2.292-5.12-5.12v-96.585c0-2.828 2.292-5.12 5.12-5.12 1.369 0 2.68 0.548 3.642 1.522z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["copy"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":90,"id":34,"name":"copy","prevSize":32,"code":59731},"setIdx":3,"setId":5,"iconIdx":81},{"icon":{"paths":["M181.677 299.476v265.758c0 36.491 29.713 66.232 66.374 66.232h527.897c36.726 0 66.374-29.67 66.374-66.232v-265.758c0-36.491-29.713-66.232-66.374-66.232h-527.897c-36.726 0-66.374 29.67-66.374 66.232zM102.4 299.476c0-80.618 65.21-145.876 145.652-145.876h527.897c80.379 0 145.652 65.334 145.652 145.876v265.758c0 80.618-65.21 145.876-145.652 145.876h-527.897c-80.379 0-145.652-65.334-145.652-145.876v-265.758zM340.232 830.578v0c0-21.993 17.829-39.822 39.822-39.822h263.891c21.993 0 39.822 17.829 39.822 39.822v0c0 21.993-17.829 39.822-39.822 39.822h-263.891c-21.993 0-39.822-17.829-39.822-39.822z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["computer"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":91,"id":33,"name":"computer","prevSize":32,"code":59732},"setIdx":3,"setId":5,"iconIdx":82},{"icon":{"paths":["M448.953 104.267c3.112-1.171 6.459-1.823 9.925-1.866h105.986c13.206-0.126 24.859 8.613 28.435 21.327l22.541 79.214c5.495 1.863 10.893 3.889 16.211 6.056 8.48 3.267 16.857 6.885 25.115 10.967l71.744-39.959c11.519-6.461 25.938-4.401 35.187 5.027l74.944 74.944c2.209 2.266 3.991 4.82 5.328 7.553 4.372 8.465 4.433 18.757-0.323 27.457l-40.062 71.725c6.617 13.221 12.412 27.104 17.235 41.325l49.353 14.166c1.121 0.265 2.216 0.594 3.283 0.982l26.416 7.517c12.713 3.577 21.453 15.229 21.327 28.435v105.986c-0.012 0.918-0.066 1.828-0.161 2.727-0.132 1.48-0.376 2.96-0.737 4.428-2.516 10.235-10.302 18.351-20.424 21.29l-78.983 22.371c-4.661 13.983-10.365 27.853-16.99 41.276l24.881 44.915c1.28 2.073 2.28 4.268 2.997 6.531l11.431 20.629c6.344 11.31 4.484 25.446-4.57 34.73l-72.429 72.429c-2.195 2.853-4.926 5.323-8.104 7.247-9.017 5.458-20.26 5.692-29.496 0.612l-71.788-40.041c-13.602 6.728-27.455 12.391-41.63 17.099l-6.044 21.069-16.361 57.764c-3.51 12.736-15.122 21.538-28.332 21.478h-106.018c-13.211 0.061-24.822-8.742-28.332-21.478l-19.784-69.849-2.577-8.984c-5.736-1.907-11.378-4.027-16.964-6.321-8.402-3.243-16.62-6.786-24.651-10.81l-39.595 21.941-31.885 17.81c-9.012 5.118-19.837 4.998-28.573 0.179-2.491-1.357-4.814-3.095-6.879-5.2l-74.944-74.944c-1.102-1.13-2.098-2.333-2.985-3.593-6.556-9.146-7.355-21.437-1.653-31.476l32.471-58.134 7.354-13.271c-6.703-13.371-12.5-27.189-17.365-41.585l-79.056-22.392c-12.555-3.68-21.139-15.25-21.021-28.332v-106.475c0.085-12.913 8.629-24.243 21.021-27.875l79.056-22.849c4.827-14.236 10.63-28.133 17.256-41.366l-40.039-71.683c-4.438-8.119-4.682-17.623-1.142-25.735 1.393-3.382 3.436-6.539 6.104-9.275l74.944-74.944c8.713-8.881 22.014-11.224 33.157-6.064 0.665 0.301 1.323 0.629 1.972 0.984l72.058 39.745c13.457-6.642 27.363-12.357 41.382-17.025l22.34-78.873c2.656-9.246 9.626-16.443 18.445-19.531zM777.457 572.567c3.652-4.403 8.577-7.714 14.244-9.384l71.411-20.357v-62.041l-5.361-1.511c-1.065-0.227-2.124-0.515-3.172-0.865l-10.15-2.889-52.405-14.769c-3.317-0.921-6.391-2.403-9.115-4.338-5.474-3.771-9.59-9.357-11.499-15.932-5.939-21.558-14.215-42.045-25.134-61.234-5.192-8.852-5.366-19.777-0.457-28.789l35.999-64.707-43.757-43.757-64.303 35.867c-2.389 1.314-4.915 2.269-7.503 2.868-7.16 1.773-14.836 0.796-21.427-2.93-12.746-7.252-26.064-13.54-39.887-18.685-7.025-2.548-14.144-4.804-21.335-6.78-3.065-0.851-5.923-2.181-8.488-3.905-5.768-3.77-10.11-9.519-12.087-16.327l-20.107-70.831h-61.858l-20.248 71.029c-2.902 9.843-10.75 17.446-20.68 20.034-21.289 5.849-41.628 14.483-61.071 25.527-2.615 1.438-5.394 2.447-8.239 3.028-6.963 1.548-14.363 0.518-20.746-3.090l-37.47-20.994-26.929-14.811-43.622 43.622 21.999 39.999 13.821 24.843c1.956 3.59 3.105 7.485 3.451 11.43 0.592 5.962-0.65 12.065-3.727 17.436-8.467 14.906-15.328 30.149-20.704 46.044-1.652 4.923-3.173 9.908-4.566 14.951-2.649 9.813-10.207 17.555-19.968 20.433l-71.411 20.383v61.726l34.007 9.873 37.081 10.45c9.887 2.745 17.612 10.47 20.357 20.357 5.849 21.289 14.16 41.952 25.204 61.394 5.139 8.867 5.261 19.778 0.323 28.758l-20.483 36.577-15.641 28.115 43.88 43.88 64.4-36.069c8.932-5.050 19.857-5.050 28.789 0 6.009 3.419 12.146 6.624 18.403 9.596 13.962 6.514 28.424 11.754 43.187 15.81 9.887 2.745 17.612 10.47 20.357 20.357l20.034 71.088h62.041l6.578-23.074 13.561-48.080c1.747-6.016 5.341-11.205 10.134-14.932 3.129-2.475 6.78-4.321 10.765-5.36 7.389-2.030 14.625-4.357 21.736-6.991 13.565-5.095 26.64-11.29 39.163-18.414 8.932-5.050 19.857-5.050 28.789 0l15.143 8.485 49.549 27.357 43.61-43.61-36.101-64.89c-4.677-8.587-4.74-18.911-0.244-27.523 0.18-0.363 0.368-0.723 0.565-1.079 3.224-5.676 6.243-11.428 9.047-17.258 6.65-13.966 12.022-28.454 16.224-43.707 1.161-4.276 3.252-8.152 6.047-11.403zM466.144 357.634c14.499-4.319 29.841-6.64 45.704-6.64 14.901 0 29.342 2.048 43.056 5.876 25.934 7.136 50.404 20.855 70.704 41.155 17.869 17.869 30.638 38.967 38.307 61.451 5.693 16.432 8.788 34.054 8.788 52.372 0 22.987-4.874 44.881-13.64 64.699-7.785 17.793-18.937 34.443-33.455 48.961-11.806 11.806-25.021 21.385-39.115 28.739-22.334 11.78-47.74 18.456-74.645 18.456-28.401 0-55.133-7.44-78.343-20.469-12.696-7.061-24.623-15.969-35.38-26.726-12.399-12.399-22.342-26.352-29.83-41.245-11.061-21.789-17.302-46.401-17.302-72.414 0-20.811 3.995-40.726 11.256-59.015 7.82-19.992 19.779-38.711 35.876-54.808 19.599-19.599 43.082-33.062 68.019-40.391zM569.978 416.696c-16.89-10.293-36.78-16.209-58.13-16.209-19.935 0-38.597 5.158-54.733 14.221-8.575 4.873-16.656 10.978-23.993 18.315-9.811 9.811-17.419 20.952-22.824 32.827-6.307 14-9.812 29.567-9.812 45.999 0 11.865 1.827 23.279 5.217 33.978 5.262 16.307 14.401 31.667 27.418 44.684 15.358 15.358 33.978 25.318 53.566 29.881 8.078 1.844 16.499 2.818 25.16 2.818 9.391 0 18.499-1.145 27.194-3.303 18.855-4.762 36.733-14.56 51.569-29.396 11.347-11.347 19.748-24.475 25.202-38.458 4.78-12.454 7.397-26.006 7.397-40.205 0-19.452-4.911-37.692-13.569-53.556-4.986-9.051-11.329-17.57-19.029-25.27-6.371-6.371-13.303-11.813-20.633-16.326z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["cog"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":92,"id":32,"name":"cog","prevSize":32,"code":59733},"setIdx":3,"setId":5,"iconIdx":83},{"icon":{"paths":["M118.051 475.773l144.245-144.063c14.452-14.433 37.864-14.432 52.314 0.003v0c14.43 14.416 14.442 37.8 0.027 52.23-0.009 0.009-0.018 0.018-0.027 0.027l-128.16 128.029 128.16 128.029c14.43 14.416 14.442 37.8 0.027 52.23-0.009 0.009-0.018 0.018-0.027 0.027v0c-14.45 14.435-37.862 14.437-52.314 0.003l-144.245-144.063c-20.007-19.982-20.028-52.4-0.046-72.408 0.015-0.015 0.030-0.030 0.046-0.046zM607.804 154.853v0c19.741 5.277 31.466 25.558 26.189 45.299-0.003 0.011-0.006 0.023-0.009 0.034l-172.483 642.778c-5.299 19.747-25.595 31.465-45.346 26.182v0c-19.732-5.278-31.449-25.553-26.171-45.285 0.002-0.009 0.005-0.017 0.007-0.026l172.438-642.777c5.301-19.76 25.609-31.489 45.374-26.206zM709.395 331.733v0c14.45-14.435 37.862-14.437 52.314-0.003l144.24 144.059c20.007 19.982 20.028 52.4 0.046 72.408-0.017 0.017-0.033 0.033-0.050 0.050l-144.233 144.017c-14.454 14.432-37.866 14.429-52.317-0.006v0c-14.428-14.413-14.44-37.794-0.027-52.222 0.010-0.010 0.021-0.021 0.031-0.031l128.156-127.984-128.16-128.029c-14.43-14.416-14.442-37.8-0.027-52.23 0.009-0.009 0.018-0.018 0.027-0.027z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["code"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":93,"id":31,"name":"code","prevSize":32,"code":59734},"setIdx":3,"setId":5,"iconIdx":84},{"icon":{"paths":["M799.928 381.24c98.094 16.763 172.872 119.941 172.872 225.369 0 117.411-92.744 212.591-207.149 212.591v-78.095c72.379 0 131.053-60.216 131.053-134.496s-58.675-150.171-131.053-150.171h-38.048v-39.047c0-50.319-39.747-91.11-88.778-91.11-21.585 0-41.88 7.883-57.889 22.031l-30.189 26.68-24.581-32.176c-28.71-37.581-72.449-59.92-119.855-59.92-84.053 0-152.191 69.928-152.191 156.189 0 17.991 2.949 35.513 8.65 52.067l17.929 52.060h-64.627c-62.473 0-89.968 42.976-88.778 106.785s39.747 91.11 88.778 91.11h549.578v78.095h-549.578c-91.057 0-164.873-75.756-164.873-169.205 0-80.696 55.043-163.872 128.698-180.794-1.243-9.927-1.873-19.982-1.873-30.117 0-129.391 102.207-234.284 228.286-234.284 58.821 0 113.995 23.013 155.636 62.872 23.365-12.656 49.63-19.487 76.878-19.487 78.967 0 144.968 56.975 161.102 133.055zM476.137 464.902c0-17.468 14.16-31.628 31.628-31.628s31.628 14.16 31.628 31.628v58.489h58.497c17.472 0 31.636 14.164 31.636 31.636s-14.164 31.636-31.636 31.636h-58.497v58.489c0 17.468-14.16 31.628-31.628 31.628s-31.628-14.16-31.628-31.628v-58.489h-58.482c-17.472 0-31.636-14.164-31.636-31.636s14.164-31.636 31.636-31.636h58.482v-58.489z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["cloud-plus"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":94,"id":30,"name":"cloud-plus","prevSize":32,"code":59735},"setIdx":3,"setId":5,"iconIdx":85},{"icon":{"paths":["M512 102.4c226.27 0 409.6 183.33 409.6 409.6s-183.33 409.6-409.6 409.6c-226.27 0-409.6-183.33-409.6-409.6s183.33-409.6 409.6-409.6zM850.057 512c0-187.006-151.632-338.057-338.057-338.057-187.006 0-338.057 151.632-338.057 338.057 0 187.006 151.632 338.057 338.057 338.057 187.006 0 338.057-151.632 338.057-338.057zM552.606 517.066l98.098 72.79c17.476 12.968 21.132 37.648 8.164 55.124-0.089 0.12-0.178 0.239-0.269 0.358v0c-13.398 17.635-38.434 21.325-56.351 8.307l-118.92-86.409c-7.516-5.577-11.933-14.344-11.933-23.653v-245.889c0-22.426 18.18-40.606 40.606-40.606v0c22.426 0 40.606 18.18 40.606 40.606v219.373z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["clock"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":95,"id":29,"name":"clock","prevSize":32,"code":59736},"setIdx":3,"setId":5,"iconIdx":86},{"icon":{"paths":["M736.78 202.915c45.52 0 82.42 37.126 82.42 82.925v552.834c0 45.799-36.9 82.925-82.42 82.925h-449.561c-45.52 0-82.42-37.126-82.42-82.925v-552.834c0-45.799 36.9-82.925 82.42-82.925h130.008c-0.090-1.676-0.135-3.351-0.135-5.026 0-52.66 42.569-95.49 94.907-95.49s94.907 42.83 94.907 95.49c0 1.674-0.045 3.349-0.135 5.026h130.009zM512 152.658c-24.829 0-44.956 20.251-44.956 45.232s20.127 45.232 44.956 45.232c24.829 0 44.956-20.251 44.956-45.232s-20.127-45.232-44.956-45.232zM354.654 268.25h-67.434c-9.633 0-17.483 7.898-17.483 17.59v552.834c0 9.692 7.85 17.59 17.483 17.59h449.561c9.633 0 17.483-7.898 17.483-17.59v-552.834c0-9.692-7.85-17.59-17.483-17.59h-67.434v40.251c0 14.572-11.742 26.385-26.224 26.385h-262.244c-14.483 0-26.224-11.814-26.224-26.385v-40.251z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["clipboard"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":96,"id":28,"name":"clipboard","prevSize":32,"code":59737},"setIdx":3,"setId":5,"iconIdx":87},{"icon":{"paths":["M264.13 689.35v0c-12.944-11.048-14.639-30.434-3.811-43.561l280.254-339.75c46.923-56.885 129.865-64.397 185.893-16.573 55.77 47.603 62.97 132.445 16.209 189.134l-300.037 363.734c-68.327 82.833-190.011 93.519-271.49 23.986-81.547-69.59-92.015-193.601-23.527-276.629l326.064-395.286c89.948-109.044 250.098-123.151 357.296-31.637 107.294 91.596 121.308 254.442 31.346 363.502l-306.589 371.677c-10.596 12.846-29.6 14.669-42.446 4.073-0.13-0.108-0.26-0.216-0.389-0.326v0c-12.944-11.048-14.639-30.434-3.811-43.561l306.589-371.677c68.345-82.855 57.693-206.634-23.845-276.242-81.454-69.537-203.192-58.813-271.507 24.006l-326.064 395.286c-46.9 56.857-39.73 141.789 16.016 189.362 55.743 47.57 139.019 40.256 185.711-16.347l300.037-363.734c25.165-30.508 21.281-76.277-8.703-101.871-30.235-25.807-74.774-21.773-100.108 8.939l-280.254 339.75c-10.596 12.846-29.6 14.669-42.446 4.073-0.13-0.108-0.26-0.216-0.389-0.326z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["clip"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":97,"id":27,"name":"clip","prevSize":32,"code":59738},"setIdx":3,"setId":5,"iconIdx":88},{"icon":{"paths":["M512 921.6c-226.193 0-409.6-183.36-409.6-409.6s183.407-409.6 409.6-409.6c226.193 0 409.6 183.36 409.6 409.6s-183.407 409.6-409.6 409.6zM512 851.383c187.433 0 339.383-151.95 339.383-339.383s-151.95-339.383-339.383-339.383c-187.433 0-339.383 151.95-339.383 339.383s151.95 339.383 339.383 339.383zM547.792 563.291l80.305-80.305c13.715-13.715 35.952-13.715 49.667 0v0c13.715 13.715 13.715 35.952 0 49.667l-129.293 129.302c-19.995 19.995-52.413 19.995-72.408 0-0.001-0.001-0.003-0.003-0.004-0.004l-129.266-129.307c-13.709-13.713-13.713-35.941-0.009-49.658v0c13.693-13.706 35.904-13.716 49.609-0.023 0.006 0.006 0.011 0.011 0.017 0.017l81.165 81.201v-242.951c0-19.39 15.719-35.109 35.109-35.109v0c19.39 0 35.109 15.719 35.109 35.109v242.062z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["circled-arrow-down"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":98,"id":26,"name":"circled-arrow-down","prevSize":32,"code":59739},"setIdx":3,"setId":5,"iconIdx":89},{"icon":{"paths":["M512 921.6c-226.193 0-409.6-183.407-409.6-409.6 0-226.24 183.407-409.6 409.6-409.6 226.24 0 409.6 183.36 409.6 409.6 0 226.193-183.36 409.6-409.6 409.6z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["circle"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":99,"id":25,"name":"circle","prevSize":32,"code":59740},"setIdx":3,"setId":5,"iconIdx":90},{"icon":{"paths":["M512 921.6c-226.193 0-409.6-183.407-409.6-409.6 0-226.24 183.407-409.6 409.6-409.6 226.24 0 409.6 183.36 409.6 409.6 0 226.193-183.36 409.6-409.6 409.6zM475.623 513.887l-107.775-107.775c-11.659-11.659-11.659-30.563 0-42.222s30.563-11.659 42.222 0l107.775 107.775 107.775-107.775c11.659-11.659 30.563-11.659 42.222 0s11.659 30.563 0 42.222l-107.775 107.775 107.775 107.775c11.659 11.659 11.659 30.563 0 42.222s-30.563 11.659-42.222 0l-107.775-107.775-107.775 107.775c-11.659 11.659-30.563 11.659-42.222 0s-11.659-30.563 0-42.222l107.775-107.775zM512 851.383c187.433 0 339.383-151.95 339.383-339.383s-151.95-339.383-339.383-339.383c-187.433 0-339.383 151.95-339.383 339.383s151.95 339.383 339.383 339.383z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["circle-cross"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":100,"id":24,"name":"circle-cross","prevSize":32,"code":59741},"setIdx":3,"setId":5,"iconIdx":91},{"icon":{"paths":["M430.733 607.019l248.174-242.694c15.137-14.803 39.379-14.632 54.306 0.382 14.93 15.211 14.704 39.364-0.333 54.121l-270.787 265.759c-17.457 17.133-45.472 16.961-62.717-0.386l-114.626-115.298c-14.926-15.014-14.926-39.263 0-54.277 15.105-15.018 39.269-14.947 54.13 0l91.854 92.393zM512 921.6c-226.193 0-409.6-183.407-409.6-409.6 0-226.24 183.407-409.6 409.6-409.6 226.24 0 409.6 183.36 409.6 409.6 0 226.193-183.36 409.6-409.6 409.6zM512 851.383c187.433 0 339.383-151.95 339.383-339.383s-151.95-339.383-339.383-339.383c-187.433 0-339.383 151.95-339.383 339.383s151.95 339.383 339.383 339.383z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["checkmark-circled"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":101,"id":23,"name":"checkmark-circled","prevSize":32,"code":59742},"setIdx":3,"setId":5,"iconIdx":92},{"icon":{"paths":["M402.241 688.422l389.132-389.132c14.441-14.441 37.854-14.441 52.294 0v0c14.441 14.441 14.441 37.854 0 52.294l-408.299 408.299c-19.995 19.995-52.413 19.995-72.408 0l-171.436-171.436c-15.29-15.29-15.29-40.080 0-55.371v0c15.29-15.29 40.080-15.29 55.371 0l155.345 155.345z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["check"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":102,"id":22,"name":"check","prevSize":32,"code":59743},"setIdx":3,"setId":5,"iconIdx":93},{"icon":{"paths":["M172.192 806.879c-1.753 0.912-3.253 1.7-4.578 2.41 23.378 19.728 84.492 33.203 196.047 32.831l5.943-0c68.451 0 127.027-21.801 175.729-65.402l78.706 5.168c-32.607 31.619-49.869 48.22-51.786 49.803-52.616 43.442-123.449 67.577-202.649 67.577l-5.671 0.032-6.699 0c-136.95 0-222.963-18.909-249.539-75.336-14.428-30.613 1.439-48.51 37.772-67.626 24.169-12.773 24.606-13.408 20.758-21.754-2.23-5.305-4.163-9.569-8.543-18.995-16.964-36.242-23.235-54.989-23.235-80.395 0-43.195 10.472-84.864 30.015-122.108 10.746-18.442 29.443-48.938 54.204-61.082 0-1.302 13.676 61.082 13.676 59.997-4.346 6.059-8.904 12.78-13.676 20.163-24.761 36.112-26.943 64.99-26.943 103.030 0 14.972 4.334 27.305 17.854 56.249 5.229 11.287 6.997 15.182 9.089 20.209 16.231 34.899 4.636 61.658-24.761 82.359-6.556 4.617-11.96 7.723-21.713 12.869zM848.367 630.922c-1.774-0.959-3.814-2.034-6.289-3.322-11.28-5.952-17.509-9.532-25.058-14.848-33.726-23.75-46.973-54.324-28.286-94.515 2.332-5.613 4.375-10.115 10.412-23.145 15.698-33.609 20.736-47.942 20.736-65.422 0-132.445-107.986-240.215-240.702-240.215s-240.702 107.77-240.702 240.215c0 139.146 115.308 240.178 274.83 240.178l6.872 0c130.587 0.435 201.591-15.525 228.189-38.926zM847.938 544.158c-4.749 10.308-3.991 11.411 24.298 26.361 41.68 21.929 59.773 42.339 43.344 77.195-30.548 64.862-129.872 86.698-287.964 86.698h-7.717l-6.622-0.038c-196.405 0-339.44-128.159-339.44-304.704 0-168.061 136.964-304.742 305.341-304.742 168.384 0 305.379 136.688 305.379 304.742 0 29.238-7.227 50.846-26.812 92.685-5.065 10.9-7.304 15.839-9.807 21.804z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["chat"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":103,"id":21,"name":"chat","prevSize":32,"code":59744},"setIdx":3,"setId":5,"iconIdx":94},{"icon":{"paths":["M793.6 204.8c42.4 0 76.8 34.4 76.8 76.8v563.2c0 42.4-34.4 76.8-76.8 76.8h-563.2c-42.4 0-76.8-34.4-76.8-76.8v-563.2c0-42.4 34.4-76.8 76.8-76.8h76.8v-51.2c0-28.277 22.923-51.2 51.2-51.2s51.2 22.923 51.2 51.2v51.2h204.8v-51.2c0-28.277 22.923-51.2 51.2-51.2s51.2 22.923 51.2 51.2v51.2h76.8zM742.4 844.8c28.277 0 51.2-22.923 51.2-51.2v-435.2h-563.2v435.2c0 28.277 22.923 51.2 51.2 51.2h460.8zM322.56 460.8h71.68c8.483 0 15.36 6.877 15.36 15.36v71.68c0 8.483-6.877 15.36-15.36 15.36h-71.68c-8.483 0-15.36-6.877-15.36-15.36v-71.68c0-8.483 6.877-15.36 15.36-15.36zM322.56 614.4h71.68c8.483 0 15.36 6.877 15.36 15.36v71.68c0 8.483-6.877 15.36-15.36 15.36h-71.68c-8.483 0-15.36-6.877-15.36-15.36v-71.68c0-8.483 6.877-15.36 15.36-15.36zM476.16 460.8h71.68c8.483 0 15.36 6.877 15.36 15.36v71.68c0 8.483-6.877 15.36-15.36 15.36h-71.68c-8.483 0-15.36-6.877-15.36-15.36v-71.68c0-8.483 6.877-15.36 15.36-15.36zM476.16 614.4h71.68c8.483 0 15.36 6.877 15.36 15.36v71.68c0 8.483-6.877 15.36-15.36 15.36h-71.68c-8.483 0-15.36-6.877-15.36-15.36v-71.68c0-8.483 6.877-15.36 15.36-15.36zM629.76 460.8h71.68c8.483 0 15.36 6.877 15.36 15.36v71.68c0 8.483-6.877 15.36-15.36 15.36h-71.68c-8.483 0-15.36-6.877-15.36-15.36v-71.68c0-8.483 6.877-15.36 15.36-15.36zM629.76 614.4h71.68c8.483 0 15.36 6.877 15.36 15.36v71.68c0 8.483-6.877 15.36-15.36 15.36h-71.68c-8.483 0-15.36-6.877-15.36-15.36v-71.68c0-8.483 6.877-15.36 15.36-15.36z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["calendar"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":104,"id":20,"name":"calendar","prevSize":32,"code":59745},"setIdx":3,"setId":5,"iconIdx":95},{"icon":{"paths":["M538.229 742.4h-144.501c-28.277 0-51.2-22.923-51.2-51.2v-358.4c0-28.277 22.923-51.2 51.2-51.2h140.211c89.435 0 143.228 44.068 143.228 114.96 0 48.22-36.632 91.33-83.495 98.994v5.429c64.354 6.387 107.256 50.774 107.256 110.809 0 81.111-61.053 130.608-162.699 130.608zM416.452 342.274v134.44h87.785c65.344 0 99.336-23.311 99.336-67.060 0-42.472-32.012-67.38-86.795-67.38h-100.326zM416.452 681.726h106.926c66.664 0 101.976-26.185 101.976-75.044 0-48.22-36.632-73.447-106.266-73.447h-102.636v148.491z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["bold"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":105,"id":19,"name":"bold","prevSize":32,"code":59746},"setIdx":3,"setId":5,"iconIdx":96},{"icon":{"paths":["M728.623 590.439v-212.883c0-113.231-96.906-205.203-216.623-205.203s-216.623 91.972-216.623 205.203v212.883l-0.885 3.58-78.182 148.403h591.449l-79.136-151.982zM512 854.645c23.566 0 44.551-11.762 55.954-29.929h-111.909c11.403 18.167 32.388 29.929 55.954 29.929zM125.951 743.361l85.798-149.441v-218.453c0-155.152 134.566-280.747 300.251-280.747s300.251 125.595 300.251 280.747l-0.91 214.827 81.715 154.639c13.211 25.001 3.653 55.978-21.348 69.189-7.372 3.895-15.583 5.932-23.921 5.932h-186.412c-16.891 63.603-78.184 109.227-149.376 109.227s-132.485-45.624-149.376-109.227h-192.271c-28.277 0-51.2-22.923-51.2-51.2 0-8.945 2.344-17.735 6.798-25.492z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["bell"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":106,"id":18,"name":"bell","prevSize":32,"code":59747},"setIdx":3,"setId":5,"iconIdx":97},{"icon":{"paths":["M512 844.8c-78.029 0-149.658-27.085-206.438-72.038l467.2-467.2c44.954 56.781 72.038 128.41 72.038 206.438 0 183.808-148.992 332.8-332.8 332.8zM179.2 512c0-183.808 148.992-332.8 332.8-332.8 78.029 0 149.658 27.085 206.438 72.038l-467.2 467.2c-44.954-56.781-72.038-128.41-72.038-206.438zM512 102.4c-226.202 0-409.6 183.398-409.6 409.6s183.398 409.6 409.6 409.6c226.202 0 409.6-183.398 409.6-409.6s-183.398-409.6-409.6-409.6z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["ban"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":107,"id":17,"name":"ban","prevSize":32,"code":59748},"setIdx":3,"setId":5,"iconIdx":98},{"icon":{"paths":["M254.865 554.983l171.258 175.077c16.155 16.515 16.155 42.912 0 59.427v0c-15.702 16.052-41.444 16.336-57.497 0.634-0.214-0.209-0.425-0.42-0.634-0.634l-230.571-235.712c-19.466-19.9-19.466-51.705 0-71.605l243.364-248.79c15.103-15.44 39.864-15.713 55.304-0.61 0.205 0.201 0.409 0.404 0.61 0.61v0c15.539 15.885 15.539 41.275 0 57.16l-179.602 183.606h532.172c73.176 0 132.331 58.113 132.331 130.236v116.079c0 22.701-18.403 41.105-41.105 41.105v0c-22.701 0-41.105-18.403-41.105-41.105v-116.079c0-27.461-22.331-49.399-50.121-49.399h-534.404z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["back"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":108,"id":16,"name":"back","prevSize":32,"code":59749},"setIdx":3,"setId":5,"iconIdx":99},{"icon":{"paths":["M670.555 300.594v0c21.892 0 39.639 17.747 39.639 39.639v197.702c0 56.387 28.106 92.982 66.065 92.982 37.77 0 66.065-36.953 66.065-92.982v-25.934c0-182.432-147.89-330.323-330.323-330.323s-330.323 147.89-330.323 330.323c0 182.432 147.89 330.323 330.323 330.323 24.665 0 48.932-2.698 72.491-7.97 4.969-1.112 10.862-2.703 17.679-4.772l-0-0c20.847-6.329 43.096 4.186 51.441 24.311v0c7.896 19.041-1.14 40.877-20.18 48.773-0.979 0.406-1.976 0.77-2.986 1.092-10.574 3.362-19.5 5.876-26.778 7.54-29.799 6.815-60.501 10.304-91.666 10.304-226.216 0-409.6-183.384-409.6-409.6s183.384-409.6 409.6-409.6c226.216 0 409.6 183.384 409.6 409.6v28.635c-1.103 94.621-59.289 169.558-145.342 169.558-50.481 0-91.316-25.583-116.702-65.873-36.285 40.436-88.95 65.873-147.556 65.873-109.459 0-198.194-88.734-198.194-198.194s88.734-198.194 198.194-198.194c44.618 0 85.792 14.743 118.916 39.624v-13.198c0-21.892 17.747-39.639 39.639-39.639zM512 630.916c65.676 0 118.916-53.241 118.916-118.916s-53.241-118.916-118.916-118.916c-65.676 0-118.916 53.241-118.916 118.916s53.241 118.916 118.916 118.916z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["at"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":109,"id":15,"name":"at","prevSize":32,"code":59750},"setIdx":3,"setId":5,"iconIdx":100},{"icon":{"paths":["M512 611.902l228.206-227.278c14.56-14.501 38.103-14.501 52.663 0v0c14.483 14.424 14.531 37.859 0.107 52.342-0.035 0.036-0.071 0.071-0.107 0.107l-244.739 243.744c-19.978 19.897-52.282 19.897-72.26 0l-244.739-243.744c-14.483-14.424-14.531-37.859-0.107-52.342 0.035-0.036 0.071-0.071 0.107-0.107v0c14.56-14.501 38.103-14.501 52.663 0l228.206 227.278z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["arrow-down"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":110,"id":14,"name":"arrow-down","prevSize":32,"code":59751},"setIdx":3,"setId":5,"iconIdx":101},{"icon":{"paths":["M849.683 174.317h87.602c19.614 0 35.514 15.9 35.514 35.514v0c0 19.614-15.9 35.514-35.514 35.514h-87.602v87.602c0 19.614-15.9 35.514-35.514 35.514v0c-19.614 0-35.514-15.9-35.514-35.514v-87.602h-87.602c-19.614 0-35.514-15.9-35.514-35.514v0c0-19.614 15.9-35.514 35.514-35.514h87.602v-87.602c0-19.614 15.9-35.514 35.514-35.514v0c19.614 0 35.514 15.9 35.514 35.514v87.602zM615.288 456.065c-26.152 0-47.353-21.2-47.353-47.353s21.2-47.353 47.353-47.353c26.152 0 47.353 21.2 47.353 47.353s-21.2 47.353-47.353 47.353zM425.877 456.065c-26.152 0-47.353-21.2-47.353-47.353s21.2-47.353 47.353-47.353c26.152 0 47.353 21.2 47.353 47.353s-21.2 47.353-47.353 47.353zM520.583 136.435v71.029c-28.136 1.51-48.899 3.698-62.287 6.566-133.542 28.605-233.667 147.304-233.667 289.388 0 163.451 132.503 295.954 295.954 295.954 142.116 0 260.836-100.17 289.407-233.758 2.859-13.369 5.042-34.101 6.546-62.196h71.029c-1.4 30.22-3.438 52.58-6.116 67.078-31.519 170.646-181.098 299.904-360.866 299.904-202.679 0-366.983-164.304-366.983-366.983 0-178.815 127.891-327.76 297.193-360.355 15.063-2.9 38.326-5.109 69.79-6.628zM389.432 606.319v0c13.749-13.749 35.363-15.7 51.352-4.635 5.331 3.688 10.014 6.536 14.049 8.542 42.649 21.211 93.092 21.405 135.884 0.581 4.331-2.107 9.382-5.156 15.155-9.146l0 0c16.018-11.071 37.659-9.111 51.427 4.657v0c12.383 12.383 12.383 32.459 0 44.842-1.101 1.101-2.281 2.119-3.532 3.047-13.135 9.744-24.196 16.769-33.182 21.075-64.229 30.776-140.044 29.304-203.163-4.418-6.784-3.624-14.983-9.053-24.597-16.286l0.001-0.001c-14.14-10.638-16.979-30.725-6.341-44.865 0.902-1.199 1.887-2.333 2.947-3.393z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["add-reaction"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":111,"id":13,"name":"add-reaction","prevSize":32,"code":59649},"setIdx":3,"setId":5,"iconIdx":102},{"icon":{"paths":["M786.466 512l54.306 54.306c14.996 14.996 14.996 39.31 0 54.306s-39.31 14.996-54.306 0l-54.306-54.306-54.306 54.306c-14.996 14.996-39.31 14.996-54.306 0s-14.996-39.31 0-54.306l54.306-54.306-54.306-54.306c-14.996-14.996-14.996-39.31 0-54.306s39.31-14.996 54.306 0l54.306 54.306 54.306-54.306c14.996-14.996 39.31-14.996 54.306 0s14.996 39.31 0 54.306l-54.306 54.306zM192 363.273v297.454h86.142l10.572 21.377c1.038 2.1 3.898 7.013 8.633 13.789 8.247 11.802 18.498 23.692 30.766 34.773 26.202 23.666 57.348 40.098 94.287 46.786v-531.14c-38.525 6.518-70.099 22.994-95.922 46.772-20.207 18.606-32.373 36.945-37.196 47.609l-10.21 22.579h-87.073zM115.2 686.327v-348.654c0-28.277 22.923-51.2 51.2-51.2h65.398c9.929-15.34 23.961-32.669 42.657-49.885 47.565-43.798 109.679-70.188 186.344-70.188 21.208 0 38.4 17.192 38.4 38.4v614.4c0 21.208-17.192 38.4-38.4 38.4-74.44 0-135.902-26.351-184.163-69.939-19.215-17.354-33.789-34.802-44.168-50.134h-66.069c-28.277 0-51.2-22.923-51.2-51.2z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["Volume-disable"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":112,"id":12,"name":"Volume-disable","prevSize":32,"code":59752},"setIdx":3,"setId":5,"iconIdx":103},{"icon":{"paths":["M598.819 531.695l109.94-87.952 116.726-37.506c23.977-7.717 48.302-4.473 66.818 8.847 18.566 13.369 29.189 35.29 29.189 60.209v220.784c0 24.919-10.673 46.791-29.189 60.16-11.964 8.601-26.261 12.976-41.352 12.976-8.389 0-16.978-1.327-25.516-4.079l-152.153-48.954v51.819c0 28.277-22.923 51.2-51.2 51.2h-382.644l92.157-73.726h241.624c14.138 0 25.6-11.462 25.6-25.6v-188.179zM444.104 425.997h-241.641c-14.138 0-25.6 11.462-25.6 25.6v188.193l-74.463 59.57v-295.889c0-28.277 22.923-51.2 51.2-51.2h382.661l-92.157 73.726zM846.779 659.382l0.202-147.149c0.019-14.138-11.426-25.616-25.565-25.635-2.659-0.004-5.303 0.407-7.836 1.218l-140.298 44.887v105.968l140.059 45.047c13.459 4.329 27.88-3.073 32.209-16.532 0.811-2.522 1.226-5.154 1.229-7.803zM226.5 241.663c0-20.359 16.504-36.863 36.863-36.863h248.947c20.359 0 36.863 16.504 36.863 36.863s-16.504 36.863-36.863 36.863h-248.947c-20.359 0-36.863-16.504-36.863-36.863zM64.947 844.058c-13.246-16.554-10.565-40.713 5.99-53.959l0.003-0.002 708.040-566.432c16.558-13.246 40.719-10.563 53.967 5.994 13.246 16.554 10.565 40.713-5.99 53.959l-708.043 566.434c-16.558 13.246-40.719 10.563-53.967-5.994z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["Video-off"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":113,"id":11,"name":"Video-off","prevSize":32,"code":59753},"setIdx":3,"setId":5,"iconIdx":104},{"icon":{"paths":["M272.433 838.351l34.767-213.14-149.132-152.849c-15.798-16.192-15.479-42.124 0.713-57.922 6.123-5.974 13.962-9.881 22.418-11.173l204.228-31.203 89.495-190.668c9.612-20.478 34.004-29.287 54.482-19.675 8.653 4.062 15.613 11.022 19.675 19.675l89.495 190.668 204.228 31.203c22.362 3.417 37.72 24.314 34.304 46.676-1.292 8.456-5.199 16.295-11.173 22.418l-149.132 152.849 34.767 213.14c3.642 22.327-11.505 43.378-33.832 47.020-9.068 1.479-18.369-0.133-26.41-4.578l-179.325-99.129-179.325 99.129c-19.798 10.944-44.719 3.767-55.664-16.032-4.445-8.041-6.057-17.343-4.578-26.41z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["Star-filled"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":114,"id":10,"name":"Star-filled","prevSize":32,"code":59754},"setIdx":3,"setId":5,"iconIdx":105},{"icon":{"paths":["M315.97 527.941l-244.169-127.797c-30.836-16.139-26.016-61.689 7.515-71.017l809.701-225.253c32.369-9.005 59.876 24.965 44.339 54.754l-388.677 745.174c-16.096 30.859-61.652 26.103-71.027-7.414l-71.019-253.895 192.101-250.863-278.763 136.311z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["Send-active"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":115,"id":9,"name":"send1","prevSize":32,"code":59650},"setIdx":3,"setId":5,"iconIdx":106},{"icon":{"paths":["M587.366 294.4v0c0 21.208 17.192 38.4 38.4 38.4h170.803v243.302h-499.456l126.239-131.373c14.572-15.165 14.581-39.128 0.020-54.304v0c-13.821-14.405-36.702-14.878-51.107-1.057-0.353 0.338-0.698 0.684-1.037 1.036l-183.531 190.972c-19.047 19.819-19.045 51.142 0.004 70.959l183.524 190.927c13.835 14.394 36.72 14.846 51.113 1.010 0.351-0.338 0.696-0.683 1.033-1.034v0c14.562-15.177 14.556-39.14-0.014-54.31l-130.597-135.975h526.49c28.277 0 51.2-22.923 51.2-51.2v-294.554c0-28.277-22.923-51.2-51.2-51.2h-193.485c-21.208 0-38.4 17.192-38.4 38.4z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["Multiline"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":116,"id":8,"name":"Multiline","prevSize":32,"code":59755},"setIdx":3,"setId":5,"iconIdx":107},{"icon":{"paths":["M511.269 687.543h65.829c28.277 0 51.2 22.923 51.2 51.2v131.657c0 28.277-22.923 51.2-51.2 51.2h-131.657c-28.277 0-51.2-22.923-51.2-51.2v-274.286c0-14.138 11.462-25.6 25.6-25.6h91.429v117.029zM419.84 219.429c-14.138 0-25.6-11.462-25.6-25.6v-65.829c0-14.138 11.462-25.6 25.6-25.6h65.829c14.138 0 25.6 11.462 25.6 25.6v91.429h-91.429zM511.269 336.457v-117.029h91.429c14.138 0 25.6 11.462 25.6 25.6v65.829c0 14.138-11.462 25.6-25.6 25.6h-91.429zM419.84 453.486c-14.138 0-25.6-11.462-25.6-25.6v-65.829c0-14.138 11.462-25.6 25.6-25.6h91.429v117.029h-91.429zM511.269 570.514v-117.029h91.429c14.138 0 25.6 11.462 25.6 25.6v65.829c0 14.138-11.462 25.6-25.6 25.6h-91.429zM478.354 863.086h65.829c14.138 0 25.6-11.462 25.6-25.6v-65.829c0-14.138-11.462-25.6-25.6-25.6h-65.829c-14.138 0-25.6 11.462-25.6 25.6v65.829c0 14.138 11.462 25.6 25.6 25.6z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["Files-zip"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":117,"id":7,"name":"Files-zip","prevSize":32,"code":59756},"setIdx":3,"setId":5,"iconIdx":108},{"icon":{"paths":["M762.371 415.703c26.243-8.909 53.615-5.079 74.762 10.967 21.24 16.133 33.267 42.304 33.267 71.286v191.066c0 28.942-12.040 55.077-33.272 71.247-13.603 10.316-29.891 15.673-47.002 15.673-9.315 0-18.676-1.565-27.794-4.666l-95.568-70.287v67.011c0 28.277-22.923 51.2-51.2 51.2h-410.764c-28.277 0-51.2-22.923-51.2-51.2v-348.937c0-28.277 22.923-51.2 51.2-51.2h410.764c28.277 0 51.2 22.923 51.2 51.2v69.273l95.607-72.634zM306.614 204.8h207.127c28.277 0 51.2 22.923 51.2 51.2v8.658c0 28.277-22.923 51.2-51.2 51.2h-207.127c-28.277 0-51.2-22.923-51.2-51.2v-8.658c0-28.277 22.923-51.2 51.2-51.2z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["Files-video"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":118,"id":6,"name":"Files-video","prevSize":32,"code":59757},"setIdx":3,"setId":5,"iconIdx":109},{"icon":{"paths":["M870.138 150.751c-0.262-3.295-0.872-6.589-1.831-9.706-0.087-0.712-0.349-1.514-0.697-2.226 0.087-0.089 0.087-0.089 0-0.178-0.262-0.89-0.61-1.87-0.959-2.76-0.087-0.178-0.174-0.356-0.262-0.534-0.523-1.425-1.221-2.849-1.918-4.274-0.872-1.603-1.744-3.206-2.79-4.808-0.785-1.247-1.656-2.404-2.528-3.562-0.436-0.534-0.872-1.069-1.308-1.603-0.436-0.623-0.959-1.247-1.569-1.781-0.697-0.712-1.395-1.425-2.092-2.137-0.785-0.801-1.569-1.514-2.441-2.226-0.785-0.712-1.656-1.336-2.528-1.959-0.436-0.445-0.872-0.801-1.308-0.979-0.436-0.356-0.959-0.712-1.395-0.979 0 0-0.087-0.178-0.174-0.089-0.697-0.534-1.395-1.069-2.18-1.425-0.087-0.089-0.262-0.178-0.349-0.178-0.959-0.534-1.918-1.069-2.877-1.514-1.831-0.979-3.836-1.781-5.841-2.493-0.697-0.267-1.395-0.445-2.092-0.712-2.703-0.89-5.58-1.425-8.457-1.781-0.61-0.089-1.308-0.178-2.005-0.178-1.395-0.178-2.964-0.267-4.446-0.267-1.831 0-3.574 0.089-5.318 0.267-1.482 0.178-2.877 0.356-4.272 0.623-1.046 0.178-2.092 0.445-3.139 0.712l-400.421 102.489c-0.959 0.267-1.918 0.445-2.877 0.801-1.133 0.267-2.267 0.623-3.313 0.979-0.349 0.089-0.61 0.178-0.785 0.267-1.221 0.445-2.441 0.979-3.662 1.514-5.492 2.493-10.462 5.877-14.734 10.062-0.959 0.89-1.918 1.87-2.703 2.849-0.785 0.89-1.569 1.781-2.267 2.671-0.697 0.801-1.395 1.692-1.918 2.671-2.005 2.849-3.749 5.877-5.056 9.171-0.61 1.336-1.133 2.671-1.569 4.096-0.523 1.336-0.872 2.76-1.221 4.185-0.349 1.158-0.61 2.315-0.785 3.473-0.174 0.979-0.349 2.048-0.436 3.027-0.262 2.137-0.436 4.363-0.436 6.589v351.009c-16.39-6.055-34.088-9.261-52.483-9.261-86.658 0-157.1 72.036-157.1 160.545s70.442 160.456 157.1 160.456c84.827 0 153.961-69.009 156.838-155.025 0.174-1.781 0.262-3.562 0.262-5.432v-460.622l297.984-76.221v282.535c-16.39-6.055-34.088-9.261-52.483-9.261-86.658 0-157.1 72.036-157.1 160.456 0 88.509 70.442 160.545 157.1 160.545 84.844 0 153.961-69.098 156.829-155.051 0.183-1.808 0.27-3.633 0.27-5.494v-502.205c0-1.692-0.087-3.473-0.262-5.075z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["Files-audio"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":119,"id":5,"name":"Files-audio","prevSize":32,"code":59758},"setIdx":3,"setId":5,"iconIdx":110},{"icon":{"paths":["M516.333 543.331c98.167 0 196.334 0 294.501 0 0.692 0 1.416 0 2.174 0v-0.001c16.019 0 29.005 12.986 29.005 29.005 0 0.81-0.034 1.619-0.102 2.426-16.192 192.934-179.943 346.664-376.779 346.664-207.415 0-378.093-170.699-378.093-378.093 0-193.91 149.176-355.712 338.083-375.96 19.856-2.128 37.677 12.243 39.805 32.098 0.137 1.28 0.206 2.566 0.206 3.854-0.001 0.858-0.001 1.681-0.001 2.47 0 95.446 0 190.891 0 286.337 0 28.277 22.923 51.2 51.2 51.2zM528.147 429.294c0-138.591 0-237.283 0-296.078 0-0.865 0-1.784 0-2.757h0.001c-0-14.921 12.096-27.017 27.017-27.017 0.694-0 1.388 0.027 2.080 0.080 89.608 6.919 174.258 45.618 238.256 109.597 62.121 62.139 100.425 143.748 108.934 230.474 1.813 18.478-11.697 34.927-30.175 36.74-1.091 0.107-2.186 0.161-3.283 0.161l-291.631-0.001c-28.277 0-51.2-22.923-51.2-51.199z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["File-keynote"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":120,"id":4,"name":"File-keynote","prevSize":32,"code":59759},"setIdx":3,"setId":5,"iconIdx":111},{"icon":{"paths":["M870.4 593.185h-251.079l-233.898-388.385h251.127l233.851 388.385zM369.040 242.949l125.516 218.472-215.393 374.724-125.563-218.329 215.44-374.867zM443.813 633.017h425.325l-125.563 237.383h-434.6l134.838-237.383z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["File-google-drive"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":121,"id":3,"name":"File-google-drive","prevSize":32,"code":59760},"setIdx":3,"setId":5,"iconIdx":112},{"icon":{"paths":["M962.166 471.314c14.179 25.106 14.179 56.265 0 81.371-90.173 159.672-258.39 266.514-450.166 266.514-191.696 0-359.95-106.767-450.166-266.513-14.179-25.107-14.179-56.266 0-81.373 90.173-159.672 258.39-266.514 450.166-266.514 191.696 0 359.951 106.767 450.166 266.514zM512 739.061c142.353 0 269.027-68.734 350.137-175.566 4.567-6.016 10.062-13.956 16.484-23.821 10.979-16.866 11.061-38.599 0.207-55.546-6.187-9.661-11.508-17.456-15.964-23.384-78.965-105.072-205.598-174.146-350.864-174.146-146.146 0-270.625 71.048-351.315 176.679-4.071 5.329-8.932 12.217-14.583 20.663-11.398 17.036-11.538 39.228-0.356 56.406l0.001-0c5.388 8.276 10.035 15.031 13.942 20.262 81.011 108.48 208.68 178.454 352.311 178.454zM512 665.6c-84.831 0-153.6-68.769-153.6-153.6s68.769-153.6 153.6-153.6c84.831 0 153.6 68.769 153.6 153.6s-68.769 153.6-153.6 153.6z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["Eye"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":122,"id":2,"name":"Eye","prevSize":32,"code":59761},"setIdx":3,"setId":5,"iconIdx":113},{"icon":{"paths":["M668.989 710.098v0c13.020 12.835 13.17 33.795 0.335 46.815-0.111 0.112-0.222 0.224-0.335 0.335l-123.486 121.732c-19.934 19.651-51.954 19.651-71.888 0l-123.486-121.732c-13.020-12.835-13.17-33.795-0.335-46.815 0.111-0.112 0.222-0.224 0.335-0.335v0c13.263-13.074 34.566-13.074 47.829 0l75.713 74.637v-270.995c0-18.678 15.142-33.82 33.82-33.82v0c18.678 0 33.82 15.142 33.82 33.82v275.073l79.849-78.715c13.263-13.074 34.566-13.074 47.829 0zM767.936 278.65c87.194 14.313 153.664 89.026 153.664 179.043 0 100.249-82.439 181.517-184.132 181.517h-79.628c-18.413 0-33.34-14.927-33.34-33.34v0c0-18.413 14.927-33.34 33.34-33.34h79.628c64.337 0 116.492-51.414 116.492-114.837s-52.155-114.837-116.492-114.837h-33.82v-33.34c0-42.964-35.331-77.793-78.914-77.793-19.186 0-37.227 6.731-51.457 18.811l-26.834 22.78-21.85-27.473c-25.52-32.088-64.399-51.162-106.538-51.162-74.713 0-135.281 59.707-135.281 133.359 0 15.361 2.621 30.322 7.689 44.456l15.937 44.45h-57.446c-43.583 0-78.914 34.829-78.914 77.793s35.331 77.793 78.914 77.793h97.949c18.413 0 33.34 14.927 33.34 33.34v0c0 18.413-14.927 33.34-33.34 33.34h-97.949c-80.94 0-146.554-64.683-146.554-144.472 0-68.9 48.927-126.535 114.399-140.984-1.105-8.476-1.665-17.061-1.665-25.715 0-110.478 90.851-200.039 202.921-200.039 52.286 0 101.329 19.65 138.343 53.682 20.769-10.806 44.116-16.638 68.336-16.638 70.193 0 128.861 48.647 143.202 113.606z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["Download"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":123,"id":1,"name":"Download","prevSize":32,"code":59762},"setIdx":3,"setId":5,"iconIdx":114},{"icon":{"paths":["M260.157 613.052c-12.627 8.1-29.429 4.431-37.53-8.196-2.808-4.377-4.3-9.467-4.3-14.667v-214.704c0-153.693 132.622-278.221 295.987-278.221 62.748 0 122.548 18.415 172.447 52.124 3.216 2.173 6.867 4.84 10.961 8.005 14.4 11.136 17.048 31.836 5.914 46.237-1.352 1.749-2.877 3.358-4.551 4.801-15.788 13.614-38.896 14.489-55.668 2.11-3.572-2.636-6.742-4.823-9.503-6.557-35.289-22.169-76.503-34.17-119.6-34.17-120.367 0-217.856 93.052-217.856 207.718v169.102c0 26.876-13.68 51.905-36.301 66.417zM812.546 744.975l-80.299-154.522v-128.551c0-16.386 7.137-31.96 19.548-42.659l16.174-13.942c10.733-9.252 26.933-8.051 36.185 2.682 4.015 4.658 6.223 10.602 6.223 16.752l-0.601 166.793 76.24 143.151c14.621 27.454 4.219 61.563-23.235 76.184-8.15 4.34-17.241 6.61-26.474 6.61h-175.36c-15.767 63.489-76.199 109.261-146.608 109.261-70.367 0-130.792-45.779-146.557-109.261h-30.326c-12.611 0-22.835-10.223-22.835-22.835 0-6.642 2.892-12.955 7.922-17.292l21.686-18.702c10.226-8.819 23.279-13.67 36.782-13.67h431.534zM122.16 849.45c-15.019-18.454-12.949-45.44 4.71-61.387l711.173-642.24c16.736-15.114 42.556-13.799 57.67 2.937 0.696 0.784 0.696 0.784 1.365 1.592 15.019 18.454 12.949 45.44-4.71 61.387l-711.173 642.24c-16.736 15.114-42.556 13.799-57.67-2.937-0.696-0.784-0.696-0.784-1.365-1.592zM512 854.645c23.566 0 44.551-11.762 55.954-29.929h-111.909c11.403 18.167 32.388 29.929 55.954 29.929z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["Bell-off"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":124,"id":0,"name":"Bell-off","prevSize":32,"code":59763},"setIdx":3,"setId":5,"iconIdx":115}],"height":1024,"metadata":{"name":"custom"},"preferences":{"showGlyphs":true,"showQuickUse":true,"showQuickUse2":true,"showSVGs":true,"fontPref":{"prefix":"icon-","metadata":{"fontFamily":"custom","majorVersion":1,"minorVersion":0},"metrics":{"emSize":1024,"baseline":6.25,"whitespace":50},"embed":false,"noie8":true,"ie7":false,"showSelector":false,"showMetrics":false,"showMetadata":false,"showVersion":false},"imagePref":{"prefix":"icon-","png":true,"useClassSelector":true,"color":0,"bgColor":16777215,"classSelector":".icon","name":"icomoon","height":32,"columns":16,"margin":16},"historySize":50,"showCodes":true,"gridSize":16}} \ No newline at end of file +{"IcoMoonType":"selection","icons":[{"icon":{"paths":["M517.642 847.16c230.298 0.768 301.875-37.171 323.174-61.645-5.222-3.123-11.674-6.502-16.691-9.114-32.41-17.101-108.544-57.19-69.837-140.442 3.942-9.472 9.062-20.48 14.234-31.642 14.899-31.898 28.979-62.106 28.979-92.314 0-184.832-150.682-335.206-335.872-335.206s-335.872 150.374-335.872 335.206c0 194.202 160.87 335.155 382.515 335.155h9.37zM858.941 710.61c26.47 13.926 81.459 42.906 56.218 96.461-47.77 101.427-241.050 114.534-387.328 114.534h-10.547l-9.011-0.051c-264.806 0-457.062-172.237-457.062-409.549 0-225.894 184.115-409.6 410.419-409.6s410.47 183.706 410.47 409.6c0 46.694-19.098 87.654-35.994 123.75-4.71 10.138-9.37 20.173-13.517 30.054-7.27 15.77-9.472 20.582 36.352 44.8zM288.922 439.731v0c0-20.543 16.654-37.197 37.197-37.197h252.211c20.543 0 37.197 16.654 37.197 37.197v0c0 20.543-16.654 37.197-37.197 37.197h-252.211c-20.543 0-37.197-16.654-37.197-37.197zM288.922 563.712v0c0-20.557 16.665-37.222 37.222-37.222h293.53c20.557 0 37.222 16.665 37.222 37.222v0c0 20.557-16.665 37.222-37.222 37.222h-293.53c-20.557 0-37.222-16.665-37.222-37.222z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["thread"],"colorPermutations":{"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":125,"id":116,"name":"thread","prevSize":32,"code":59764},"setIdx":3,"setId":5,"iconIdx":0},{"icon":{"paths":["M511.152 360.583c22.304 0 40.392 18.051 40.392 40.327v233.944c0 22.275-18.088 40.327-40.392 40.327s-40.392-18.051-40.392-40.327v-233.944c0-22.275 18.088-40.327 40.392-40.327zM49.119 863.747l413.955-740.751c14.588-26.104 48.090-35.845 75.032-21.957 9.656 4.977 17.597 12.61 22.82 21.957l413.955 740.751c16.58 29.668-5.594 65.533-40.020 65.533h-845.723c-34.426 0-56.599-35.865-40.020-65.533zM510.258 703.736c24.735 0 43.707 19.504 43.707 44.561 0 25.225-18.915 44.785-43.707 44.785s-43.707-19.56-43.707-44.785c0-25.056 18.972-44.561 43.707-44.561zM140.057 855.673h743.887l-371.943-665.573-371.943 665.573z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["warning"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":9,"id":115,"name":"warning","prevSize":32,"code":59651},"setIdx":3,"setId":5,"iconIdx":1},{"icon":{"paths":["M192 363.273v297.454h86.142l10.572 21.377c1.038 2.1 3.898 7.013 8.633 13.789 8.247 11.802 18.498 23.692 30.766 34.773 26.202 23.666 57.348 40.098 94.287 46.786v-531.14c-38.525 6.518-70.099 22.994-95.922 46.772-20.207 18.606-32.373 36.945-37.196 47.609l-10.21 22.579h-87.073zM115.2 686.327v-348.654c0-28.277 22.923-51.2 51.2-51.2h65.398c9.929-15.34 23.961-32.669 42.657-49.885 47.565-43.798 109.679-70.188 186.344-70.188 21.208 0 38.4 17.192 38.4 38.4v614.4c0 21.208-17.192 38.4-38.4 38.4-74.44 0-135.902-26.351-184.163-69.939-19.215-17.354-33.789-34.802-44.168-50.134h-66.069c-28.277 0-51.2-22.923-51.2-51.2zM671.024 687.393c-18.153-10.207-25.682-32.464-17.452-51.595 0.406-0.944 0.785-1.846 1.136-2.706 15.543-37.983 23.692-78.92 23.692-121.092 0-38.196-6.685-75.379-19.494-110.272-1.369-3.729-3.133-8.048-5.292-12.956-8.479-19.278-0.949-41.843 17.409-52.165 17.486-9.832 39.632-3.626 49.463 13.86 0.497 0.884 0.957 1.788 1.378 2.71 2.978 6.521 5.383 12.174 7.216 16.96 17.148 44.781 26.119 92.693 26.119 141.862 0 53.649-10.68 105.8-31.008 154.020-0.588 1.395-1.239 2.889-1.953 4.481l0.001 0.001c-8.25 18.402-29.857 26.632-48.259 18.382-1.008-0.452-1.995-0.949-2.958-1.491zM798.466 787.618c-18.347-10.316-25.51-33.12-16.356-52.074 1.158-2.395 2.188-4.585 3.090-6.569 30.65-67.393 46.8-140.98 46.8-216.975 0-77.121-16.632-151.762-48.171-219.966-0.535-1.158-1.118-2.392-1.747-3.702l0.001-0c-9.088-18.928-1.919-41.659 16.383-51.949 17.881-10.054 40.527-3.708 50.58 14.173 0.35 0.622 0.681 1.253 0.994 1.894 1.056 2.156 2.006 4.143 2.852 5.961 36.594 78.608 55.908 164.728 55.908 253.59 0 87.033-18.527 171.436-53.671 248.728-1.446 3.18-3.177 6.82-5.192 10.92l0.001 0c-9.039 18.386-31.271 25.964-49.657 16.926-0.614-0.302-1.219-0.62-1.815-0.955z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["volume"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":10,"id":114,"name":"volume","prevSize":32,"code":59652},"setIdx":3,"setId":5,"iconIdx":2},{"icon":{"paths":["M226.167 660.727l-81.802 71.829c-17.249-8.236-29.166-25.841-29.166-46.229v-348.654c0-28.277 22.923-51.2 51.2-51.2h65.398c9.929-15.34 23.961-32.669 42.657-49.885 47.565-43.798 109.679-70.188 186.344-70.188 21.208 0 38.4 17.192 38.4 38.4v216.18l-76.8 67.437v-242.104c-38.525 6.518-70.099 22.994-95.922 46.772-20.207 18.606-32.373 36.945-37.196 47.609l-10.21 22.579h-87.073v297.454h34.167zM355.626 751.596c19.822 12.498 41.994 21.37 66.774 25.856 0-20.591 0-36.035 0-46.33 0-8.481 0-21.202 0-38.163l76.8-67.442c0 26.928 0 47.125 0 60.589 0 29.577 0 73.941 0 133.095 0 21.208-17.192 38.4-38.4 38.4-64.739 0-119.664-19.931-164.625-53.797l59.451-52.207zM675.736 470.492l66.722-58.592c8.406 32.339 12.742 65.916 12.742 100.1 0 53.649-10.68 105.8-31.008 154.020-0.588 1.395-1.239 2.889-1.953 4.481l0.001 0.001c-8.25 18.402-29.857 26.632-48.259 18.382-1.008-0.452-1.995-0.949-2.958-1.491-18.153-10.207-25.682-32.464-17.452-51.595 0.406-0.944 0.785-1.846 1.136-2.706 15.543-37.983 23.692-78.92 23.692-121.092 0-13.993-0.897-27.85-2.664-41.508zM807.938 354.398l62.315-54.722c25.313 67.093 38.546 138.769 38.546 212.324 0 87.033-18.527 171.436-53.671 248.728-1.446 3.18-3.177 6.82-5.192 10.92l0.001 0c-9.039 18.386-31.271 25.964-49.657 16.926-0.614-0.302-1.219-0.62-1.815-0.955-18.347-10.316-25.51-33.12-16.356-52.074 1.158-2.395 2.188-4.585 3.090-6.569 30.65-67.393 46.8-140.98 46.8-216.975 0-54.218-8.22-107.21-24.062-157.602zM946.503 130.461c14.061 14.993 13.306 38.546-1.687 52.607-0.296 0.278-0.597 0.551-0.902 0.819l-811.178 712.336c-16.116 14.152-40.553 12.962-55.218-2.688-14.067-15.013-13.301-38.587 1.712-52.654 0.293-0.274 0.59-0.544 0.892-0.809l811.176-712.287c16.11-14.146 40.538-12.962 55.205 2.676z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["volume-mute"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":11,"id":113,"name":"volume-mute","prevSize":32,"code":59653},"setIdx":3,"setId":5,"iconIdx":3},{"icon":{"paths":["M846.779 659.382l0.202-147.149c0.019-14.138-11.426-25.616-25.565-25.635-2.659-0.004-5.303 0.407-7.836 1.218l-140.298 44.887v105.968l140.059 45.047c13.459 4.329 27.88-3.073 32.209-16.532 0.811-2.522 1.226-5.154 1.229-7.803zM598.819 719.874v-268.278c0-14.138-11.462-25.6-25.6-25.6h-370.756c-14.138 0-25.6 11.462-25.6 25.6v268.278c0 14.138 11.462 25.6 25.6 25.6h370.756c14.138 0 25.6-11.462 25.6-25.6zM892.302 415.085c18.566 13.369 29.189 35.29 29.189 60.209v220.784c0 24.919-10.673 46.791-29.189 60.16-11.964 8.601-26.261 12.976-41.352 12.976-8.389 0-16.978-1.327-25.516-4.079l-152.153-48.954v51.819c0 28.277-22.923 51.2-51.2 51.2h-468.482c-28.277 0-51.2-22.923-51.2-51.2v-364.529c0-28.277 22.923-51.2 51.2-51.2h468.482c28.277 0 51.2 22.923 51.2 51.2v51.672l152.202-48.905c23.977-7.717 48.302-4.473 66.818 8.847zM226.5 241.663v0c0-20.359 16.504-36.863 36.863-36.863h248.947c20.359 0 36.863 16.504 36.863 36.863v0c0 20.359-16.504 36.863-36.863 36.863h-248.947c-20.359 0-36.863-16.504-36.863-36.863z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["video"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":12,"id":112,"name":"video","prevSize":32,"code":59654},"setIdx":3,"setId":5,"iconIdx":4},{"icon":{"paths":["M218.87 797.637c9.606 3.608 21.53 7.28 35.985 10.849 59.123 14.598 143.466 23.514 257.146 23.514s198.023-8.916 257.146-23.514c14.454-3.569 26.378-7.241 35.985-10.849-6.496-56.39-38.135-87.347-99.936-113.172-8.559-3.577-17.471-6.998-29.283-11.314 2.748 1.004-22.903-8.286-29.518-10.774-60.736-22.842-89.594-44.548-89.484-88.671-0.075-1.028-0.075-1.028-0.204-3.673-0.731-17.527 0.562-37.647 5.737-57.807 5.146-20.046 13.648-37.544 27.874-52.383 33.963-33.045 49.684-67.214 49.684-118.501 0-83.443-58.409-149.344-128-149.344s-128 65.901-128 149.344c0 51.244 15.357 84.513 49.491 119.13 13.437 13.696 22.254 30.903 27.646 50.494 5.659 20.562 7.040 41.089 6.179 59.081-0.163 2.919-0.163 2.919-0.116 0.759 0 47.022-28.858 68.728-89.594 91.57-6.615 2.488-32.266 11.777-29.518 10.774-11.812 4.315-20.724 7.737-29.283 11.314-61.801 25.825-93.44 56.782-99.936 113.172zM140.8 821.133c0-107.358 52.685-167.534 148.394-207.529 9.82-4.104 19.726-7.907 32.54-12.589-2.308 0.843 22.741-8.229 28.838-10.521 31.709-11.925 39.829-18.033 39.971-22.993-0.015 0.223-0.015 0.223 0.061-1.121 0.507-10.589-0.369-23.607-3.513-35.032-2.19-7.958-5.172-13.777-8.354-17.020-47.496-48.169-71.537-100.249-71.537-172.984 0-123.933 90.591-226.144 204.8-226.144s204.8 102.211 204.8 226.144c0 72.96-24.682 126.604-71.953 172.563-2.969 3.104-5.88 9.097-8.016 17.416-2.989 11.645-3.838 24.838-3.392 35.51 0.063 1.261 0.063 1.261 0.161 3.976 0 1.653 8.12 7.76 39.829 19.686 6.097 2.293 31.146 11.365 28.838 10.521 12.813 4.681 22.719 8.485 32.54 12.589 95.71 39.995 148.394 100.171 148.394 207.529v19.301l-15.489 11.516c-12.629 9.39-38.034 20.697-80.156 31.098-65.585 16.194-156.017 25.753-275.556 25.753s-209.97-9.559-275.556-25.753c-42.121-10.4-67.526-21.708-80.156-31.098l-15.489-11.516v-19.301z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["user"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":13,"id":111,"name":"user","prevSize":32,"code":59655},"setIdx":3,"setId":5,"iconIdx":5},{"icon":{"paths":["M839.68 812.373c0 11.469-7.1 21.19-17.094 25.231-11.414-68.704-54.668-111.138-124.191-140.138-11.196-4.588-47.732-18.022-51.555-19.333-13.053-4.97-21.245-8.738-25.832-11.851-0.164-7.591 0.492-16.876 2.567-24.904 1.365-5.352 3.058-8.793 4.205-9.994 40.305-39.103 61.658-85.415 61.658-147.838 0-106.441-78.316-194.533-177.439-194.533s-177.439 88.091-177.439 194.533c0 62.205 20.808 107.151 61.44 148.275 1.311 1.365 3.058 4.697 4.424 9.776 2.185 7.864 2.895 17.094 2.621 24.685-4.588 3.113-12.78 6.881-25.887 11.851-3.768 1.311-40.359 14.746-51.5 19.333-69.523 29-112.777 71.434-124.245 140.138-9.994-3.987-17.094-13.763-17.094-25.231v-600.747c0-15.073 12.288-27.307 27.307-27.307h600.747c15.073 0 27.307 12.233 27.307 27.307v600.747zM405.504 754.975c53.084-19.988 79.244-39.649 79.299-83.831 0.765-15.674-0.437-33.369-5.407-51.337-4.806-17.531-12.78-32.986-25.068-45.493-26.324-26.651-37.847-51.5-37.847-90.767 0-63.188 43.964-112.613 95.519-112.613 51.61 0 95.519 49.425 95.519 112.613 0 39.267-11.742 64.771-37.792 90.112-13.271 13.708-20.862 29.437-25.504 47.35-4.478 17.531-5.625 34.843-4.97 50.080 0.109 2.348 0.109 2.348 0.164 3.331-0.109 40.905 26.051 60.566 79.080 80.555 4.314 1.529 38.939 14.199 48.387 18.132 40.25 16.766 63.242 35.717 72.363 66.574h-454.492c9.175-30.857 32.113-49.807 72.417-66.574 9.448-3.932 43.964-16.548 48.333-18.132zM812.373 102.4h-600.747c-60.293 0-109.227 48.934-109.227 109.227v600.747c0 60.348 48.934 109.227 109.227 109.227h600.747c60.293 0 109.227-48.879 109.227-109.227v-600.747c0-60.293-48.934-109.227-109.227-109.227z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["user-rounded"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":14,"id":110,"name":"user-rounded","prevSize":32,"code":59656},"setIdx":3,"setId":5,"iconIdx":6},{"icon":{"paths":["M331.532 803.498c38.087 9.46 92.556 15.252 166.070 15.252s127.983-5.792 166.070-15.252c1.811-0.45 3.786-0.977 5.925-1.581l-0.001-0.003c8.162-2.306 12.908-10.792 10.602-18.954-0.067-0.237-0.14-0.472-0.218-0.706-3.314-9.883-6.801-17.137-10.462-21.764-10.418-13.167-26.15-23.175-47.822-32.286-8.815-3.705-44.918-16.974-38.047-14.375-40.557-15.344-60.132-30.155-60.053-60.463-0.052-0.716-0.052-0.716-0.138-2.494-0.485-11.695 0.371-25.086 3.81-38.562 3.453-13.533 9.183-25.394 18.894-35.583 21.483-21.027 31.345-42.589 31.345-75.256 0-52.915-36.621-94.48-79.904-94.48s-79.904 41.565-79.904 94.48c0 32.647 9.636 53.647 31.27 75.718 9.119 9.35 15.063 21.018 18.683 34.251 3.765 13.763 4.68 27.441 4.108 39.46-0.072 32.774-19.646 47.586-60.202 62.929 6.863-2.597-29.235 10.67-38.049 14.375-22.603 9.502-38.745 19.98-49.136 34-3.225 4.352-6.321 11.060-9.289 20.124l0 0c-2.639 8.062 1.757 16.737 9.819 19.376 0.197 0.064 0.395 0.125 0.595 0.181 2.181 0.617 4.192 1.155 6.034 1.612zM279.485 265.898h79.904c17.891 0 32.394 14.503 32.394 32.394v0c0 17.891-14.503 32.394-32.394 32.394h-79.904v79.904c0 17.891-14.503 32.394-32.394 32.394v0c-17.891 0-32.394-14.503-32.394-32.394v-79.904h-79.904c-17.891 0-32.394-14.503-32.394-32.394v0c0-17.891 14.503-32.394 32.394-32.394h79.904v-79.904c0-17.891 14.503-32.394 32.394-32.394v0c17.891 0 32.394 14.503 32.394 32.394v79.904zM413.493 626.257c-1.3-4.751-3.012-8.113-4.672-9.815-31.342-31.976-47.271-66.689-47.271-114.972 0-82.454 60.066-150.629 136.053-150.629s136.053 68.174 136.053 150.629c0 48.437-16.356 84.197-47.509 114.663-1.524 1.603-3.201 5.075-4.473 10.059-1.859 7.285-2.393 15.64-2.115 22.352 0.038 0.772 0.038 0.772 0.107 2.714 0-0.642 4.42 2.703 23.851 10.054-8.126-3.074 29.733 10.84 39.938 15.129 63.15 26.546 98.179 66.795 98.179 138.222v14.061l-11.26 8.421c-8.556 6.399-25.434 13.956-53.167 20.845-42.837 10.64-101.782 16.908-179.606 16.908s-136.769-6.268-179.606-16.908c-27.733-6.888-44.611-14.445-53.167-20.845l-11.26-8.421v-14.061c0-71.428 35.029-111.676 98.179-138.222 10.204-4.29 48.064-18.204 39.938-15.129 19.162-7.249 23.726-10.602 23.948-12.384 0.355-7.334-0.195-15.555-2.142-22.672zM843.638 623.533c1.973-0.49 4.14-1.072 6.5-1.745l0.001 0.003c8.159-2.327 12.888-10.827 10.561-18.986-0.014-0.050-0.029-0.101-0.044-0.151-1.569-5.295-3.144-9.409-4.725-12.341-9.83-18.223-27.528-30.833-54.27-42.074-8.814-3.705-44.912-16.972-38.049-14.375-40.556-15.344-60.13-30.155-60.202-62.929-0.572-12.019 0.343-25.697 4.108-39.46 3.62-13.233 9.564-24.901 18.683-34.251 21.634-22.071 31.27-43.071 31.27-75.718 0-52.915-36.621-94.48-79.904-94.48-26.417 0-50.352 15.483-64.995 39.579-6.233 10.257-11.202 23.644-14.91 40.161h-56.149c2.611-17.627 6.283-32.54 11.016-44.737 20.7-53.351 68.455-91.152 125.038-91.152 75.987 0 136.053 68.174 136.053 150.629 0 48.284-15.929 82.996-47.271 114.972-1.66 1.702-3.372 5.064-4.672 9.815-1.947 7.117-2.497 15.338-2.142 22.672 0.222 1.781 4.786 5.134 23.948 12.384-8.126-3.074 29.733 10.84 39.938 15.129 63.15 26.546 98.179 66.795 98.179 138.222v0c0 8.85-4.173 17.182-11.26 22.482-8.556 6.399-25.434 13.956-53.167 20.845-18.942 4.705-41.378 8.602-67.626 11.477-11.504 1.26-25.438 2.685-41.802 4.273v-56.134c13.095-1.465 24.991-2.783 35.688-3.954 23.822-2.609 43.786-6.077 60.204-10.155z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["user-plus"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":15,"id":109,"name":"user-plus","prevSize":32,"code":59657},"setIdx":3,"setId":5,"iconIdx":7},{"icon":{"paths":["M806.86 327.115c99.002 16.485 174.473 102.538 174.473 206.218 0 115.464-93.602 209.067-209.067 209.067h-62.587c-21.208 0-38.4-17.192-38.4-38.4s17.192-38.4 38.4-38.4h62.587c73.049 0 132.267-59.218 132.267-132.267s-59.218-132.267-132.267-132.267h-38.4v-38.4c0-49.485-40.115-89.6-89.6-89.6-21.784 0-42.268 7.752-58.425 21.666l-30.468 26.237-24.808-31.643c-28.976-36.958-73.12-58.927-120.965-58.927-84.831 0-153.6 68.769-153.6 153.6 0 17.692 2.976 34.924 8.73 51.203l18.095 51.197h-65.226c-49.485 0-89.6 40.115-89.6 89.6s40.115 89.6 89.6 89.6h65.228c21.208 0 38.4 17.192 38.4 38.4s-17.192 38.4-38.4 38.4h-65.228c-91.9 0-166.4-74.5-166.4-166.4 0-79.358 55.552-145.741 129.89-162.382-1.255-9.763-1.89-19.651-1.89-29.618 0-127.246 103.154-230.4 230.4-230.4 59.366 0 115.051 22.632 157.077 61.83 23.581-12.446 50.090-19.163 77.59-19.163 79.698 0 146.31 56.030 162.594 130.849zM322.543 590.437c-14.996-14.996-14.996-39.31 0-54.306l144.815-144.815c19.995-19.995 52.413-19.995 72.408 0l144.815 144.815c14.996 14.996 14.996 39.31 0 54.306s-39.31 14.996-54.306 0l-85.965-85.965v312.679c0 21.208-17.192 38.4-38.4 38.4s-38.4-17.192-38.4-38.4v-317.376l-90.662 90.662c-14.996 14.996-39.31 14.996-54.306 0z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["upload"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":16,"id":108,"name":"upload","prevSize":32,"code":59658},"setIdx":3,"setId":5,"iconIdx":8},{"icon":{"paths":["M837.448 345.039c0.456 7.302 0.456 14.558 0.456 21.814 0 221.97-168.896 477.711-477.665 477.711-95.15 0-183.5-27.564-257.84-75.39 13.508 1.597 26.468 2.099 40.524 2.099 78.493 0 150.779-26.514 208.462-71.739-71.817-1.308-134.88-48.073-156.986-116.416 10.405 1.552 20.81 2.556 31.717 2.556 15.060 0 30.119-2.054 44.175-5.704-78.372-15.862-134.692-84.782-134.624-164.744v-2.099c22.361 12.458 48.373 20.262 75.892 21.312-46.789-31.135-74.885-83.625-74.842-139.827 0-31.215 8.306-59.782 22.818-84.745 85.298 104.986 211.14 168.844 346.235 175.696-2.693-12.648-4.085-25.539-4.153-38.471-0.036-44.539 17.641-87.264 49.134-118.758s74.219-49.171 118.758-49.134c46.476-0.11 90.907 19.098 122.668 53.028 37.601-7.249 73.657-20.976 106.559-40.57-12.513 38.803-38.75 71.709-73.792 92.548 33.335-3.805 65.914-12.573 96.656-26.012-22.981 33.478-51.447 62.838-84.197 86.844h0.046z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["twitter"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":17,"id":107,"name":"twitter","prevSize":32,"code":59659},"setIdx":3,"setId":5,"iconIdx":9},{"icon":{"paths":["M622.040 176.873h147.318c41.655 0 75.442 33.116 75.442 74.428v65.873c0 25.466-18.591 46.589-42.942 50.537v479.479c0 41.057-33.95 74.409-75.255 74.409h-429.207c-41.529 0-75.255-33.3-75.255-74.409v-468.242c0-3.775 0.287-7.484 0.84-11.109-24.762-3.594-43.782-24.909-43.782-50.667v-65.873c0-41.17 33.806-74.428 75.442-74.428h147.318c17.178-43.592 59.97-74.473 110.040-74.473s92.862 30.881 110.040 74.473zM544.212 176.873c-8.972-6.68-20.125-10.639-32.212-10.639s-23.24 3.959-32.212 10.639h64.423zM737.445 368.374h-440.049c-5.855 0-10.842 4.899-10.842 10.575v468.242c0 5.802 4.834 10.575 10.842 10.575h429.207c5.855 0 10.842-4.899 10.842-10.575v-478.817zM297.397 304.54h482.991v-53.239c0-5.9-4.79-10.595-11.029-10.595h-514.715c-6.167 0-11.029 4.784-11.029 10.595v53.239h53.784zM426.116 474.764c17.787 0 32.206 14.419 32.206 32.206v212.2c0 17.787-14.419 32.206-32.206 32.206s-32.206-14.419-32.206-32.206v-212.2c0-17.787 14.419-32.206 32.206-32.206zM597.884 474.764c17.787 0 32.206 14.419 32.206 32.206v212.2c0 17.787-14.419 32.206-32.206 32.206s-32.206-14.419-32.206-32.206v-212.2c0-17.787 14.419-32.206 32.206-32.206z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["trash"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":18,"id":106,"name":"trash","prevSize":32,"code":59660},"setIdx":3,"setId":5,"iconIdx":10},{"icon":{"paths":["M792.869 153.6c71.013 0 128.731 57.020 128.731 127.174v462.452c0 70.154-57.718 127.174-128.731 127.174h-561.737c-71.013 0-128.731-57.020-128.731-127.174v-462.452c0-70.154 57.718-127.174 128.731-127.174h561.737zM792.869 801.032c32.253 0 58.514-25.944 58.514-57.806v-104.052h-444.709v161.858h386.194zM172.617 743.226c0 31.863 26.261 57.806 58.514 57.806h105.326v-161.858h-163.84v104.052zM231.131 222.968c-32.253 0-58.514 25.944-58.514 57.806v57.806h163.84v-115.613h-105.326zM851.383 280.774c0-31.863-26.261-57.806-58.514-57.806h-386.194v115.613h444.709v-57.806zM172.617 569.806h163.84v-161.858h-163.84v161.858zM406.674 569.806h444.709v-161.858h-444.709v161.858z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["th-list"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":19,"id":105,"name":"th-list","prevSize":32,"code":59661},"setIdx":3,"setId":5,"iconIdx":11},{"icon":{"paths":["M351.569 797.703c36.794 9.632 89.413 15.529 160.431 15.529s123.637-5.897 160.431-15.529c0 0 0 0 0 0v0c10.921-2.859 17.456-14.029 14.598-24.95-0.149-0.571-0.323-1.135-0.522-1.69-2.676-7.499-5.463-13.186-8.363-17.061-10.064-13.449-25.282-23.663-46.264-32.959-8.515-3.773-43.393-17.282-36.755-14.635-39.18-15.622-58.090-30.703-58.014-61.561-0.050-0.729-0.050-0.729-0.133-2.539-0.469-11.908 0.358-25.541 3.68-39.262 3.336-13.778 8.871-25.855 18.252-36.229 20.753-21.408 30.28-43.362 30.28-76.622 0-53.876-35.378-96.194-77.191-96.194s-77.191 42.319-77.191 96.194c0 33.24 9.309 54.621 30.208 77.092 8.809 9.52 14.551 21.4 18.049 34.873 3.638 14.012 4.521 27.939 3.969 40.176-0.070 33.369-18.979 48.449-58.158 64.071 6.63-2.644-28.242 10.864-36.757 14.636-24.379 10.801-40.978 22.842-50.75 39.757-1.444 2.499-2.87 5.803-4.278 9.913l-0.001-0c-3.741 10.919 2.078 22.803 12.997 26.544 0.488 0.167 0.982 0.316 1.481 0.447 0 0 0 0 0 0zM430.746 617.245c-1.256-4.837-2.91-8.26-4.514-9.993-30.278-32.556-45.666-67.899-45.666-117.059 0-83.951 58.027-153.363 131.434-153.363s131.434 69.412 131.434 153.363c0 49.316-15.8 85.725-45.896 116.745-1.472 1.632-3.093 5.167-4.321 10.241-1.796 7.417-2.312 15.924-2.043 22.758 0.037 0.786 0.037 0.786 0.103 2.763 0-0.653 4.27 2.752 23.042 10.237-7.85-3.13 28.724 11.036 38.581 15.404 61.006 27.028 94.846 68.007 94.846 140.731v0.465c0 8.746-4.009 17.010-10.878 22.425-8.266 6.515-24.57 14.21-51.362 21.223-41.382 10.833-98.326 17.215-173.507 17.215s-132.124-6.382-173.507-17.215c-26.791-7.013-43.096-14.708-51.362-21.223v0c-6.869-5.414-10.878-13.678-10.878-22.425v-0.465c0-72.724 33.84-113.703 94.846-140.731 9.858-4.367 46.432-18.534 38.581-15.404 18.511-7.381 22.92-10.795 23.135-12.609 0.343-7.468-0.188-15.837-2.069-23.084zM177.715 614.472c15.86 4.152 35.147 7.683 58.16 10.34 10.333 1.193 27.284 2.535 50.853 4.026l-2.452 57.11c-25.091-1.589-43.193-3.025-54.307-4.308-25.357-2.927-47.031-6.895-65.329-11.685-26.791-7.013-43.096-14.708-51.362-21.223v0c-6.869-5.414-10.878-13.678-10.878-22.425v-0.465c0-72.724 33.84-113.703 94.846-140.731 9.832-4.356 46.236-18.458 38.644-15.429 18.458-7.364 22.858-10.772 23.072-12.584 0.343-7.468-0.188-15.837-2.069-23.084-1.256-4.837-2.91-8.26-4.514-9.993-30.278-32.556-45.666-67.899-45.666-117.059 0-83.951 58.027-153.363 131.434-153.363 54.993 0 101.354 38.956 121.153 93.797 4.42 12.242 8.54 25.746 12.362 40.512h-54.242c-4.898-13.865-10.304-25.99-16.217-36.376-14.12-24.801-37.374-40.765-63.056-40.765-41.813 0-77.191 42.319-77.191 96.194 0 33.24 9.309 54.621 30.208 77.092 8.809 9.52 14.551 21.4 18.049 34.873 3.638 14.012 4.521 27.939 3.969 40.176-0.070 33.369-18.979 48.449-58.158 64.071 6.63-2.644-28.242 10.864-36.757 14.636-27.095 12.004-44.579 25.54-53.763 45.595-1.181 2.579-2.371 6.104-3.57 10.575l0.001 0c-2.15 8.018 2.459 16.294 10.409 18.686 2.317 0.697 4.441 1.299 6.373 1.804zM846.285 614.472c1.918-0.502 4.026-1.099 6.324-1.79l0.001 0.002c7.966-2.396 12.578-10.697 10.404-18.727-1.339-4.944-2.674-8.809-4.004-11.593-9.309-19.484-26.653-32.758-53.275-44.553-8.515-3.772-43.387-17.28-36.757-14.636-39.179-15.622-58.089-30.703-58.158-64.071-0.552-12.237 0.331-26.164 3.969-40.176 3.497-13.473 9.24-25.353 18.049-34.873 20.899-22.472 30.208-43.852 30.208-77.092 0-53.876-35.378-96.194-77.191-96.194-25.224 0-48.105 15.4-62.292 39.447-6.22 10.544-11.207 23.109-14.96 37.694h-54.242c2.344-14.034 5.613-27.037 9.806-39.008 19.489-55.631 66.193-95.301 121.688-95.301 73.407 0 131.434 69.412 131.434 153.363 0 49.16-15.388 84.503-45.666 117.059-1.603 1.733-3.258 5.156-4.514 9.993-1.881 7.246-2.412 15.616-2.069 23.084 0.214 1.814 4.624 5.228 23.135 12.609-7.85-3.13 28.724 11.036 38.581 15.404 61.006 27.028 94.846 68.007 94.846 140.731v0.465c0 8.746-4.009 17.010-10.878 22.425-8.266 6.515-24.57 14.21-51.362 21.223-18.298 4.79-39.973 8.758-65.329 11.685-11.114 1.283-19.465 2.719-25.054 4.308v-57.11c40.965-6.809 66.734-11.598 77.308-14.366z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["team"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":20,"id":104,"name":"team","prevSize":32,"code":59662},"setIdx":3,"setId":5,"iconIdx":12},{"icon":{"paths":["M446.005 550.4h-190.005c-21.208 0-38.4-17.192-38.4-38.4v0c0-21.208 17.192-38.4 38.4-38.4h96.267c-5.026-13.916-7.479-29.497-7.479-46.85 0-83.525 68.25-139.1 170.625-139.1 74.737 0 133.658 34.233 157.596 87.145 1.273 2.813 2.497 6.146 3.673 9.997l-0.001 0c4.669 15.294-3.945 31.478-19.239 36.147-2.74 0.836-5.589 1.262-8.454 1.262v0c-19.004 0-36.432-10.569-45.215-27.422-0.851-1.631-1.703-3.076-2.558-4.334-16.494-24.267-47.195-38.444-86.777-38.444-57.525 0-95.875 27.625-95.875 69.875 0 22.951 11.611 39.18 38.604 51.725h310.834c21.208 0 38.4 17.192 38.4 38.4v0c0 21.208-17.192 38.4-38.4 38.4h-106.987c21.256 21.227 30.874 48.315 30.874 83.050 0 89.7-69.55 145.925-180.7 145.925-74.662 0-131.736-27.637-159.919-74.254-3.838-6.348-7.406-15.091-10.705-26.229l0-0c-4.519-15.256 4.186-31.287 19.443-35.806 2.656-0.787 5.412-1.186 8.182-1.186v0c19.865 0 38.134 10.884 47.59 28.355 3.288 6.073 6.708 10.829 10.262 14.268 19.781 19.141 51.485 30.178 90.673 30.178 58.5 0 101.4-30.225 101.4-71.825 0-35.75-27.3-57.2-89.375-71.825l-60.45-14.625c-7.818-1.827-15.243-3.834-22.283-6.025z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["strike"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":21,"id":103,"name":"strike","prevSize":32,"code":59663},"setIdx":3,"setId":5,"iconIdx":13},{"icon":{"paths":["M512 702.505l136.962 75.711c7.424 4.104 16.77 1.412 20.874-6.012 1.667-3.015 2.271-6.503 1.717-9.904l-26.352-161.551 112.325-115.124c5.924-6.072 5.804-15.796-0.267-21.721-2.296-2.24-5.236-3.705-8.407-4.19l-154.529-23.61-68.418-145.764c-3.604-7.679-12.752-10.983-20.431-7.378-3.245 1.523-5.855 4.133-7.378 7.378l-68.418 145.764-154.529 23.61c-8.386 1.281-14.145 9.118-12.864 17.504 0.484 3.171 1.95 6.111 4.19 8.407l112.325 115.124-26.352 161.551c-1.366 8.372 4.314 16.267 12.687 17.632 3.4 0.555 6.889-0.050 9.904-1.717l136.962-75.711zM272.433 838.351l34.767-213.14-149.132-152.849c-15.798-16.192-15.479-42.124 0.713-57.922 6.123-5.974 13.962-9.881 22.418-11.173l204.228-31.203 89.495-190.668c9.612-20.478 34.004-29.287 54.482-19.675 8.653 4.062 15.613 11.022 19.675 19.675l89.495 190.668 204.228 31.203c22.362 3.417 37.72 24.314 34.304 46.676-1.292 8.456-5.199 16.295-11.173 22.418l-149.132 152.849 34.767 213.14c3.642 22.327-11.505 43.378-33.832 47.020-9.068 1.479-18.369-0.133-26.41-4.578l-179.325-99.129-179.325 99.129c-19.798 10.944-44.719 3.767-55.664-16.032-4.445-8.041-6.057-17.343-4.578-26.41z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["star"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":22,"id":102,"name":"star","prevSize":32,"code":59664},"setIdx":3,"setId":5,"iconIdx":14},{"icon":{"paths":["M626.397 453.766c-4.1 10.953-12.803 16.765-24.728 16.765h-16.695c-8.318 0-15.234-3.647-20.087-10.592-4.873-6.974-5.963-14.981-3.163-23.392l91.103-255.538c4.1-10.953 12.803-16.765 24.728-16.765h24.284c11.925 0 20.628 5.812 24.767 16.873l91.114 255.577c2.75 8.264 1.66 16.271-3.213 23.245-4.853 6.946-11.77 10.592-20.087 10.592h-18.213c-11.023 0-19.151-5.921-23.285-16.973l-21.129-62.089h-84.194l-21.203 62.296zM710.343 329.968l-20.701-63.451-21.925 63.451h42.626zM407.956 688.223c14.571-14.255 38.056-14.255 52.627 0 14.77 14.45 14.77 38.036 0 52.486l-121.639 119c-14.571 14.255-38.056 14.255-52.627 0l-121.639-119c-14.77-14.45-14.77-38.036 0-52.486 14.571-14.255 38.056-14.255 52.627 0l57.934 56.677v-554.366c0-20.481 16.817-36.934 37.392-36.934s37.392 16.453 37.392 36.934v554.366l57.934-56.677zM780.76 796.736c6.867 0 12.918 2.496 17.771 7.358 4.89 4.899 7.423 11.062 7.423 18.071v12.163c0 7.009-2.533 13.172-7.423 18.071-4.854 4.862-10.904 7.358-17.771 7.358h-182.127c-6.867 0-12.918-2.496-17.771-7.358-4.89-4.899-7.423-11.062-7.423-18.071v-12.163c0-5.468 1.416-10.434 4.347-14.834l133.209-190.841h-104.772c-6.867 0-12.918-2.496-17.771-7.358-4.89-4.899-7.423-11.062-7.423-18.071v-12.163c0-7.009 2.533-13.172 7.423-18.071 4.854-4.862 10.904-7.358 17.771-7.358h173.021c6.867 0 12.918 2.496 17.771 7.358 4.89 4.899 7.423 11.062 7.423 18.071v12.163c0 4.57-1.474 9-4.345 13.311l-77.398 110.982c-29.564 42.526-48.847 70.177-57.423 81.382h115.489z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["sort"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":23,"id":101,"name":"sort","prevSize":32,"code":59665},"setIdx":3,"setId":5,"iconIdx":15},{"icon":{"paths":["M682.048 640l-170.048 170.048-170.048-170.048","M682.048 384l-170.048-170.048-170.048 170.048"],"attrs":[{"fill":"none","stroke":"rgb(203, 206, 209)","strokeLinejoin":"miter","strokeLinecap":"butt","strokeMiterlimit":"4","strokeWidth":96},{"fill":"none","stroke":"rgb(158, 162, 168)","strokeLinejoin":"miter","strokeLinecap":"butt","strokeMiterlimit":"4","strokeWidth":96}],"isMulticolor":false,"isMulticolor2":true,"grid":0,"tags":["sort-up"],"colorPermutations":{"2552552551291162451":[{"s":0},{"s":0}],"15816216812032062091":[{"s":1},{"s":0}]}},"attrs":[{"fill":"none","stroke":"rgb(203, 206, 209)","strokeLinejoin":"miter","strokeLinecap":"butt","strokeMiterlimit":"4","strokeWidth":96},{"fill":"none","stroke":"rgb(158, 162, 168)","strokeLinejoin":"miter","strokeLinecap":"butt","strokeMiterlimit":"4","strokeWidth":96}],"properties":{"order":24,"id":100,"name":"sort-up","prevSize":32,"code":59666},"setIdx":3,"setId":5,"iconIdx":16},{"icon":{"paths":["M682.048 384l-170.048-170.048-170.048 170.048","M682.048 640l-170.048 170.048-170.048-170.048"],"attrs":[{"fill":"none","stroke":"rgb(203, 206, 209)","strokeLinejoin":"miter","strokeLinecap":"butt","strokeMiterlimit":"4","strokeWidth":96},{"fill":"none","stroke":"rgb(158, 162, 168)","strokeLinejoin":"miter","strokeLinecap":"butt","strokeMiterlimit":"4","strokeWidth":96}],"isMulticolor":false,"isMulticolor2":true,"grid":0,"tags":["sort-down"],"colorPermutations":{"2552552551291162451":[{"s":0},{"s":0}],"15816216812032062091":[{"s":1},{"s":0}]}},"attrs":[{"fill":"none","stroke":"rgb(203, 206, 209)","strokeLinejoin":"miter","strokeLinecap":"butt","strokeMiterlimit":"4","strokeWidth":96},{"fill":"none","stroke":"rgb(158, 162, 168)","strokeLinejoin":"miter","strokeLinecap":"butt","strokeMiterlimit":"4","strokeWidth":96}],"properties":{"order":25,"id":99,"name":"sort-down","prevSize":32,"code":59667},"setIdx":3,"setId":5,"iconIdx":17},{"icon":{"paths":["M133.908 323.584c-17.401 0-31.508-15.129-31.508-33.792s14.106-33.792 31.508-33.792h462.113c17.401 0 31.508 15.129 31.508 33.792s-14.106 33.792-31.508 33.792h-462.113zM133.908 528.384c-17.401 0-31.508-15.129-31.508-33.792s14.106-33.792 31.508-33.792h378.092c17.401 0 31.508 15.129 31.508 33.792s-14.106 33.792-31.508 33.792h-378.092zM133.908 733.184c-17.401 0-31.508-15.129-31.508-33.792s14.106-33.792 31.508-33.792h294.072c17.401 0 31.508 15.129 31.508 33.792s-14.106 33.792-31.508 33.792h-294.072zM860.070 688.223c14.073-14.255 36.757-14.255 50.83 0 14.266 14.45 14.266 38.036 0 52.486l-117.485 119c-14.073 14.255-36.757 14.255-50.83 0l-117.485-119c-14.266-14.45-14.266-38.036 0-52.486 14.073-14.255 36.757-14.255 50.83 0l55.955 56.677v-554.366c0-20.481 16.243-36.934 36.115-36.934s36.115 16.453 36.115 36.934v554.366l55.955-56.677z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["sort-amount-down"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":26,"id":98,"name":"sort1","prevSize":32,"code":59648},"setIdx":3,"setId":5,"iconIdx":18},{"icon":{"paths":["M645.693 921.605h-492.029c-28.312 0-51.264-22.923-51.264-51.2v-716.8c0-28.277 22.952-51.2 51.264-51.2l508.89-0.007c28.277-0.002 51.202 22.919 51.204 51.196 0 0.002 0 0.003 0 0.005l-0.007 102.4h-76.896v-68.85h-448.617v649.71h448.617v-68.861h76.896l0.008 102.405c0.001 28.277-22.922 51.201-51.199 51.201-0.002 0-0.004 0-0.005 0l-16.173-0.007c-0.229 0.004-0.458 0.005-0.688 0.005zM698.094 393.607c-0.115-0.109-0.229-0.219-0.343-0.329-16.377-15.9-16.233-41.541 0.324-57.27 16.802-15.962 43.85-15.967 60.658-0.010l147.034 139.589c0.146 0.139 0.291 0.278 0.435 0.418 20.699 20.11 20.504 52.527-0.435 72.407l-147.034 139.589c-16.808 15.957-43.856 15.952-60.658-0.010-0.115-0.109-0.229-0.219-0.342-0.329-16.367-15.91-16.205-41.551 0.361-57.27l81.61-77.433h-379.359c-23.554 0-42.649-18.338-42.649-40.96s19.095-40.96 42.649-40.96h379.359l-81.61-77.433z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["sign-out"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":27,"id":97,"name":"sign-out","prevSize":32,"code":59668},"setIdx":3,"setId":5,"iconIdx":19},{"icon":{"paths":["M848.049 227.32c33.633 14.001 55.631 47.066 55.631 83.629 0 283.352-148.95 524.619-356.981 611.393-22.247 9.25-47.31 9.249-69.574-0.008-208.503-87.024-356.805-333.701-356.805-611.385 0-36.617 22.049-69.663 55.788-83.629l301.198-125.665c22.263-9.248 47.285-9.247 69.567 0.009l301.176 125.656zM515.949 847.874c172.552-68.548 307.095-297.014 306.959-536.924 0-4.129-2.328-7.66-6.016-9.199l-301.276-125.698c-2.305-0.981-5.081-0.973-7.489 0.042l-301.092 125.621c-3.695 1.568-6.1 5.201-6.1 9.235 0 239.977 134.63 468.41 307.148 536.874 2.621 1.050 5.424 1.053 7.866 0.050z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["shield"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":28,"id":96,"name":"shield","prevSize":32,"code":59669},"setIdx":3,"setId":5,"iconIdx":20},{"icon":{"paths":["M848.049 227.32c33.633 14.001 55.631 47.066 55.631 83.629 0 283.352-148.95 524.619-356.981 611.393-22.247 9.25-47.31 9.249-69.574-0.008-208.503-87.024-356.805-333.701-356.805-611.385 0-36.617 22.049-69.663 55.788-83.629l301.198-125.665c22.263-9.248 47.285-9.247 69.567 0.009l301.176 125.656zM515.949 847.874c172.552-68.548 307.095-297.014 306.959-536.924 0-4.129-2.328-7.66-6.016-9.199l-301.276-125.698c-2.305-0.981-5.081-0.973-7.489 0.042l-301.092 125.621c-3.695 1.568-6.1 5.201-6.1 9.235 0 239.977 134.63 468.41 307.148 536.874 2.621 1.050 5.424 1.053 7.866 0.050zM665.48 347.607c14.236-14.414 37.461-14.558 51.887-0.311 14.628 14.807 14.628 38.122 0.311 52.618l-239.682 242.678c-15.896 16.095-41.83 16.256-57.936 0.349l-0.348-0.349-102.257-103.535c-14.812-14.997-14.812-39.117 0-54.114 14.723-14.907 38.742-15.056 53.716-0.266l79.467 80.457 214.843-217.528z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["shield-check"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":29,"id":95,"name":"shield-check","prevSize":32,"code":59670},"setIdx":3,"setId":5,"iconIdx":21},{"icon":{"paths":["M848.049 227.32c33.633 14.001 55.631 47.066 55.631 83.629 0 283.352-148.95 524.619-356.981 611.393-22.247 9.25-47.31 9.249-69.574-0.008-208.503-87.024-356.805-333.701-356.805-611.385 0-36.617 22.049-69.663 55.788-83.629l301.198-125.665c22.263-9.248 47.285-9.247 69.567 0.009l301.176 125.656zM515.949 847.874c172.552-68.548 307.095-297.014 306.959-536.924 0-4.129-2.328-7.66-6.016-9.199l-301.276-125.698c-2.305-0.981-5.081-0.973-7.489 0.042l-301.092 125.621c-3.695 1.568-6.1 5.201-6.1 9.235 0 239.977 134.63 468.41 307.148 536.874 2.621 1.050 5.424 1.053 7.866 0.050zM364.244 386.457c9.881 79.955 46.236 161.347 109.356 244.214v-285.735l-109.356 41.521zM484.179 760.879c-126.028-132.474-192.633-265.254-199.003-398.202-0.796-16.605 9.184-31.836 24.725-37.737l188.469-71.559c25.128-9.541 52.031 9.021 52.031 35.899v445.131c0 34.674-42.322 51.59-66.221 26.468z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["shield-alt"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":30,"id":94,"name":"shield-alt","prevSize":32,"code":59671},"setIdx":3,"setId":5,"iconIdx":22},{"icon":{"paths":["M475.27 238.914l-74.979 72.125c-14.76 14.198-38.1 14.198-52.859 0v0c-14.041-13.507-14.474-35.839-0.968-49.88 0.316-0.329 0.639-0.651 0.968-0.968l128.539-123.647c19.822-19.068 51.168-19.068 70.99 0l128.539 123.647c14.041 13.507 14.474 35.839 0.968 49.88-0.316 0.329-0.639 0.651-0.968 0.968v0c-14.76 14.198-38.1 14.198-52.859 0l-73.91-71.097v409.378c0 20.286-16.445 36.73-36.73 36.73v0c-20.286 0-36.73-16.445-36.73-36.73v-410.406zM634.435 489.758v-70.665h107.965c28.277 0 51.2 22.923 51.2 51.2v400.107c0 28.277-22.923 51.2-51.2 51.2h-460.8c-28.277 0-51.2-22.923-51.2-51.2v-400.107c0-28.277 22.923-51.2 51.2-51.2h107.965v70.665h-85.704v361.177h416.278v-361.177h-85.704z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["share"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":31,"id":93,"name":"share","prevSize":32,"code":59672},"setIdx":3,"setId":5,"iconIdx":23},{"icon":{"paths":["M512.917 779.883l-64-232.448 317.542-261.018-253.542 493.466zM190.818 376.069l528.179-149.094-317.594 261.018-210.586-111.923zM913.199 116.536c-9.421-11.827-25.088-16.794-39.373-12.749l-795.034 224.512c-14.899 4.198-25.754 17.254-27.392 32.819-1.587 15.616 6.349 30.669 20.019 37.939l302.592 160.768 91.955 333.824c4.147 15.104 16.998 26.112 32.41 27.75 1.28 0.154 2.662 0.205 3.891 0.205 13.926 0 26.88-7.834 33.434-20.582l381.645-742.656c6.912-13.517 5.325-29.952-4.147-41.83z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["send"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":32,"id":92,"name":"send","prevSize":32,"code":59673},"setIdx":3,"setId":5,"iconIdx":24},{"icon":{"paths":["M19.721 504.267l312.885 327.111c43.945 45.945 122.505 15.269 122.505-49.156v-156.16c274.533 3.221 389.445 29.739 322.116 268.606-14.828 52.476 45.239 92.857 88.32 61.351 59.182-43.271 158.453-141.495 158.453-310.348 0-304.155-274.752-357.396-568.889-360.924v-156.718c0-64.48-78.606-95.051-122.507-49.156l-312.884 327.083c-26.295 27.502-26.295 70.809 0 98.311zM60.836 445.28l312.889-327.111c8.763-9.173 24.498-3.079 24.498 9.831v213.333c279.314 0 568.889 19.876 568.889 304.338 0 132.267-71.111 217.191-135.147 264.018 91.259-323.543-129.038-340.8-433.742-340.8v213.333c0 12.907-15.728 19.004-24.498 9.831l-312.889-327.111c-2.451-2.545-3.96-6.012-3.96-9.831s1.509-7.286 3.964-9.836l-0.004 0.004z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["reply"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":33,"id":91,"name":"reply","prevSize":32,"code":59674},"setIdx":3,"setId":5,"iconIdx":25},{"icon":{"paths":["M670.939 599.542h199.461c28.277 0 51.2 22.923 51.2 51.2v197.729c0 19.389-15.718 35.107-35.107 35.107v0c-19.389 0-35.107-15.718-35.107-35.107v-101.060c-14.089 19.847-29.302 38.945-46.809 56.030-77.562 76.158-180.448 118.098-289.699 118.098-214.525 0-391.087-159.758-410.7-371.615-0.048-0.533-0.094-1.083-0.141-1.65l-0.001 0c-1.508-18.485 12.254-34.693 30.739-36.201 0.909-0.074 1.82-0.111 2.731-0.111l2.070-0.001c17.94 0 32.918 13.684 34.534 31.55 0 0 0 0 0 0 16.243 175.439 162.754 307.814 340.768 307.814 90.715 0 176.188-34.779 240.597-98.018 20.924-20.502 39.132-43.626 54.111-68.762 2.809-4.728 4.774-9.923 7.396-14.792h-146.043c-19.389 0-35.107-15.718-35.107-35.107v0c0-19.389 15.718-35.107 35.107-35.107zM388.214 389.291v0c0 19.389-15.718 35.107-35.107 35.107h-199.461c-28.277 0-51.2-22.923-51.2-51.2v-197.729c0-19.389 15.718-35.107 35.107-35.107v0c19.389 0 35.107 15.718 35.107 35.107v101.060c14.136-19.847 29.349-38.945 46.762-55.983 77.609-76.158 180.541-118.145 289.699-118.145 214.571 0 391.134 159.758 410.747 371.662 0.043 0.456 0.085 0.925 0.126 1.406l-0 0c1.593 18.502-12.114 34.792-30.616 36.385-0.959 0.083-1.922 0.124-2.884 0.124l-1.972-0c-17.914 0-32.891-13.621-34.586-31.455 0 0 0 0 0 0-16.196-175.533-162.754-307.908-340.815-307.908-90.669 0-176.095 34.826-240.55 98.064-20.877 20.455-39.085 43.579-54.111 68.762-2.809 4.728-4.821 9.877-7.396 14.745h146.043c19.389 0 35.107 15.718 35.107 35.107z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["reload"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":34,"id":90,"name":"reload","prevSize":32,"code":59675},"setIdx":3,"setId":5,"iconIdx":26},{"icon":{"paths":["M414.476 394.968c0-67.325-54.578-121.902-121.905-121.902-67.326 0-121.905 54.579-121.905 121.905v48.762c0 40.396 32.747 73.143 73.143 73.143 13.021 0 24.908 7.408 30.643 19.098 19.758 40.269 18.374 88.36-2.635 144.554-2.325 6.22-5.803 14.311-10.433 24.274l-0.001-0c-2.384 5.129-0.158 11.219 4.971 13.603 3.207 1.49 6.955 1.221 9.916-0.713 14.199-9.273 25.268-17.8 33.208-25.581 63.043-61.782 104.997-167.862 104.997-297.143zM102.4 443.733v-48.762c0-105.029 85.143-190.171 190.171-190.171s190.171 85.141 190.171 190.168c0 241.96-133.814 424.232-307.2 424.232-27.553 0-43.751-30.962-28.041-53.596 56.52-81.429 78.704-142.61 71.172-182.688-66.107-11.859-116.274-69.662-116.274-139.182zM657.531 582.916c-66.107-11.859-116.274-69.662-116.274-139.182v-48.762c0-105.029 85.143-190.171 190.171-190.171s190.171 85.141 190.171 190.168c0 241.96-133.814 424.232-307.2 424.232-27.553 0-43.751-30.962-28.040-53.596 56.52-81.429 78.704-142.61 71.172-182.688zM853.333 394.968c0-67.325-54.578-121.902-121.905-121.902-67.326 0-121.905 54.579-121.905 121.905v48.762c0 40.396 32.747 73.143 73.143 73.143 13.021 0 24.908 7.408 30.643 19.098 19.37 39.477 18.42 86.472-1.418 141.249-2.531 6.989-6.461 16.233-11.79 27.732l-0.002-0.001c-2.379 5.132-0.146 11.221 4.986 13.6 3.2 1.483 6.938 1.215 9.894-0.709 13.847-9.013 24.662-17.295 32.446-24.846 63.549-61.65 105.908-168.128 105.908-298.031z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["quote"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":35,"id":89,"name":"quote","prevSize":32,"code":59676},"setIdx":3,"setId":5,"iconIdx":27},{"icon":{"paths":["M493.033 613.695l-371.535-215.269c-11.371-6.537-18.427-18.716-18.554-31.943-0.127-13.225 6.69-25.541 17.898-32.284l373.418-226.518c11.552-7.017 25.967-7.041 37.53-0.071l371.47 223.236c11.226 6.739 18.059 19.012 17.983 32.215-0.076 13.204-7.052 25.396-18.35 31.996l-373.37 218.564c-5.573 3.269-11.901 4.988-18.344 4.98-6.395-0.001-12.662-1.674-18.146-4.906zM212.267 365.373l298.85 173.185 300.875-176.139-298.831-179.553-300.894 182.507zM493.032 765.31l-371.339-215.205c-11.721-6.392-19.087-18.715-19.289-32.181-0.202-13.463 6.788-26.005 18.306-32.757 11.586-6.792 25.899-6.637 37.111 0.268l353.294 204.693 355.030-207.827c11.407-6.922 25.616-7.035 37.129-0.293 11.446 6.703 18.431 19.126 18.324 32.502-0.107 13.377-7.292 25.685-18.705 32.116l-373.362 218.559c-5.575 3.277-11.909 4.998-18.356 4.984-6.35-0.002-12.592-1.652-18.142-4.861zM493.032 916.74l-371.339-215.205c-11.721-6.392-19.087-18.715-19.289-32.181-0.202-13.463 6.788-26.005 18.306-32.757 11.586-6.792 25.899-6.637 37.111 0.268l353.294 204.693 355.308-207.989c17.57-9.903 39.689-3.594 49.625 14.077 9.872 17.558 4.114 39.933-13.155 50.41l-373.362 218.559c-5.575 3.277-11.909 4.998-18.356 4.984-6.35-0.002-12.592-1.652-18.142-4.861z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["queue"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":36,"id":88,"name":"queue","prevSize":32,"code":59677},"setIdx":3,"setId":5,"iconIdx":28},{"icon":{"paths":["M284.939 207.277v609.445c0 14.138 11.462 25.6 25.6 25.6h402.922c14.138 0 25.6-11.462 25.6-25.6v-425.488c0-13.675-5.471-26.782-15.192-36.399l-160.078-158.357c-9.585-9.482-22.524-14.801-36.008-14.801h-217.244c-14.138 0-25.6 11.462-25.6 25.6zM596.985 117.201l207.022 204.796c9.722 9.617 15.192 22.724 15.192 36.399v512.004c0 28.277-22.923 51.2-51.2 51.2h-512c-28.277 0-51.2-22.923-51.2-51.2v-716.8c0-28.277 22.923-51.2 51.2-51.2h304.978c13.483 0 26.422 5.319 36.008 14.801zM394.24 704v0c0-21.208 17.192-38.4 38.4-38.4h153.6c21.208 0 38.4 17.192 38.4 38.4v0c0 21.208-17.192 38.4-38.4 38.4h-153.6c-21.208 0-38.4-17.192-38.4-38.4zM394.24 550.4v0c0-21.208 17.192-38.4 38.4-38.4h153.6c21.208 0 38.4 17.192 38.4 38.4v0c0 21.208-17.192 38.4-38.4 38.4h-153.6c-21.208 0-38.4-17.192-38.4-38.4z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["post"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":37,"id":87,"name":"post","prevSize":32,"code":59678},"setIdx":3,"setId":5,"iconIdx":29},{"icon":{"paths":["M512 99.84c199.506 0 360.96 161.463 360.96 360.96 0 110.932-49.907 212.466-133.648 280.482-3.995 3.245-9.055 7.041-15.179 11.39-2.828 2.009-6.132 3.241-9.585 3.574-10.909 1.054-20.607-6.936-21.661-17.845l-0.192-1.986c-1.682-17.418 5.219-34.565 18.497-45.964 9.782-8.395 17.379-15.474 22.781-21.224 52.758-56.15 82.665-130.011 82.665-208.427 0-170.366-140.407-308.090-311.038-304.573-164.381 3.387-297.226 138.223-298.235 302.672-0.493 80.258 30.341 155.851 84.922 212.711 5.234 5.452 12.594 12.206 22.071 20.249 12.387 10.512 19.356 26.062 18.959 42.304l-0.136 5.517c-0.093 3.817-1.342 7.515-3.581 10.607-6.113 8.444-17.914 10.332-26.354 4.217-17.094-12.377-29.857-22.522-38.307-30.459-72.13-67.748-113.9-161.843-113.9-263.245 0-199.506 161.464-360.96 360.96-360.96zM611.84 671.6c0 46.621-18.108 157.105-32.826 211.836-6.815 25.189-30.31 35.604-67.014 35.604s-60.199-10.416-67.014-35.609c-14.708-54.691-32.826-165.054-32.826-211.831 0-47.592 36.076-67.44 99.84-67.44s99.84 19.848 99.84 67.44zM565.76 671.6c0-14.129-23.565-22.134-53.76-22.13-30.191 0.004-53.76 8.013-53.76 22.13 0 34.235 11.511 111.604 24.478 171.428 0.583 2.664 0.583 2.664 1.252 5.622 2.92 12.814 14.315 21.905 27.457 21.905l1.166-0.003c13.14 0 24.537-9.098 27.45-21.919 0.486-2.15 0.486-2.15 0.92-4.125 13.049-59.747 24.797-138.352 24.797-172.908zM616.96 460.8c0 57.967-46.993 104.96-104.96 104.96s-104.96-46.993-104.96-104.96c0-57.967 46.993-104.96 104.96-104.96s104.96 46.993 104.96 104.96zM560.64 460.8c0-26.818-21.822-48.64-48.64-48.64s-48.64 21.822-48.64 48.64c0 26.818 21.822 48.64 48.64 48.64s48.64-21.822 48.64-48.64zM669.982 545.059c1.487-2.642 2.729-5.004 3.728-7.087 11.522-24.039 17.49-50.271 17.49-77.171 0-101.539-84.63-182.985-186.256-179.064-92.382 3.565-167.505 77.969-171.933 170.293-1.487 30.994 4.921 61.326 18.63 88.7 0.64 1.249 0.64 1.249 1.038 2.010 0.5 0.931 0.5 0.931 1.36 2.49 7.294 13.022 5.65 29.218-4.111 40.51-7.331 8.481-20.149 9.412-28.629 2.082-1.423-1.23-2.667-2.651-3.699-4.224-4.637-7.070-8.234-13.097-10.787-18.076-16.586-32.356-25.214-68.047-25.214-104.721 0-127.771 104.48-231.42 232.285-230.392 124.147 0.999 225.904 101.455 228.464 225.55 0.787 38.143-7.742 75.348-24.875 109-2.591 5.088-6.259 11.257-10.999 18.499-6.149 9.395-18.749 12.026-28.144 5.878-1.563-1.023-2.977-2.256-4.203-3.665-9.832-11.298-11.493-27.561-4.146-40.613z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["podcast"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":38,"id":86,"name":"podcast","prevSize":32,"code":59679},"setIdx":3,"setId":5,"iconIdx":30},{"icon":{"paths":["M471.93 193.643v278.288h-278.261c-22.13 0-40.070 17.94-40.070 40.070v0c0 22.13 17.94 40.070 40.070 40.070h278.261v278.288c0 22.115 17.928 40.043 40.043 40.043v0c22.115 0 40.043-17.928 40.043-40.043v-278.288h278.314c22.13 0 40.070-17.94 40.070-40.070v0c0-22.13-17.94-40.070-40.070-40.070h-278.314v-278.288c0-22.115-17.928-40.043-40.043-40.043v0c-22.115 0-40.043 17.928-40.043 40.043z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["plus"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":39,"id":85,"name":"plus","prevSize":32,"code":59680},"setIdx":3,"setId":5,"iconIdx":31},{"icon":{"paths":["M512 921.6c-226.193 0-409.6-183.36-409.6-409.6s183.407-409.6 409.6-409.6c226.193 0 409.6 183.36 409.6 409.6s-183.407 409.6-409.6 409.6zM456.65 362.026c-4.893-3.071-10.553-4.7-16.33-4.7-16.966 0-30.72 13.754-30.72 30.72v247.902c0 5.777 1.629 11.437 4.7 16.33 9.019 14.371 27.98 18.709 42.35 9.69l197.503-123.951c3.918-2.459 7.231-5.772 9.69-9.69 9.019-14.371 4.68-33.331-9.69-42.35l-197.503-123.951z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["play"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":40,"id":84,"name":"play","prevSize":32,"code":59681},"setIdx":3,"setId":5,"iconIdx":32},{"icon":{"paths":["M912.8 429.4l-704-416.2c-57.2-33.8-144.8-1-144.8 82.6v832.2c0 75 81.4 120.2 144.8 82.6l704-416c62.8-37 63-128.2 0-165.2z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["play-solid"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":41,"id":83,"name":"play-solid","prevSize":32,"code":59682},"setIdx":3,"setId":5,"iconIdx":33},{"icon":{"paths":["M482.814 637.831l-224.859-224.911-32.719 32.719c-7.201 7.201-16.751 11.167-26.927 11.167 0 0 0 0 0 0v0c-10.643 0-19.44-8.301-20.056-18.926-0.022-0.403-0.034-0.791-0.034-1.164 0-10.124 3.966-19.517 10.906-26.561l221.049-220.997c0 0 0 0 0 0v0c9.814-9.814 25.725-9.814 35.539 0 6.797 6.797 9.121 16.875 5.988 25.962-1.415 4.107-3.429 7.473-6.042 10.097l-32.719 32.719 205.551 205.603 19.256 18.786 24.213-11.533c2.88-1.355 53.827-24.715 119.015 0.835 7.274 2.851 17.497 8.254 30.671 16.21l-0.003 0.005c7.259 4.384 9.59 13.822 5.206 21.081-0.641 1.062-1.409 2.042-2.286 2.92l-302.654 302.661c-6.001 6.001-15.73 6.001-21.73 0-0.887-0.887-1.662-1.879-2.308-2.955-8.368-13.935-14.002-24.715-16.901-32.338-24.462-64.324-1.531-114.303-0.314-116.906l12.159-24.474zM910.51 469.54c-103.010-103.115-207.534-90.486-255.438-76.657l-137.66-137.66c20.978-36.424 20.195-81.928-2.244-117.569l-17.742-17.742c-44.043-27.762-102.801-22.491-140.948 15.655l-220.945 220.997c-38.146 38.146-43.364 97.009-15.603 140.843l17.69 17.742c35.746 22.491 81.302 23.222 117.569 2.296l137.712 137.712c-13.829 47.8-26.457 152.271 76.657 255.386v0c14.77 14.799 38.741 14.822 53.54 0.052 0.009-0.009 0.017-0.017 0.026-0.026l166.909-166.909 151.971 151.971c14.808 14.808 38.816 14.814 53.632 0.013v0c14.806-14.792 14.818-38.786 0.026-53.592-0.004-0.004-0.009-0.009-0.013-0.013l-152.023-152.023 166.886-166.931c14.783-14.787 14.782-38.759-0.004-53.544z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["pin"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":42,"id":82,"name":"pin","prevSize":32,"code":59683},"setIdx":3,"setId":5,"iconIdx":34},{"icon":{"paths":["M540.754 693.093c15.352 15.384 15.496 40.229 0.264 55.894l-117.668 117.668c-73.491 73.319-192.458 73.316-265.962-0.017-73.318-73.49-73.317-192.457 0.008-265.954l168.375-168.375c73.52-73.311 192.464-73.27 266.199 0.266 14.589 15.658 14.164 40.055-0.961 55.196-15.147 15.163-39.545 15.57-55.449 0.774-42.469-42.36-111.21-42.361-153.673-0.007l-168.399 168.31c-42.353 42.453-42.356 111.179-0.017 153.617 42.453 42.354 111.179 42.355 153.624 0.010l117.869-117.859c15.603-15.114 40.446-14.899 55.789 0.476zM866.606 423.354l-168.423 168.379c-73.5 73.291-192.444 73.29-265.952-0.010-10.034-10.034-13.953-24.659-10.28-38.367s14.379-24.413 28.086-28.086c13.706-3.672 28.331 0.245 38.355 10.269 42.479 42.339 111.205 42.341 153.675 0.011l168.4-168.355c42.353-42.453 42.356-111.179 0.017-153.617-42.453-42.354-111.18-42.355-153.626-0.008l-117.701 117.701c-10.033 10.044-24.662 13.972-38.376 10.305s-24.431-14.372-28.112-28.082c-3.682-13.711 0.232-28.344 10.269-38.392l117.756-117.711c73.489-73.317 192.457-73.317 265.956 0.010 73.283 73.526 73.268 192.475-0.042 265.957z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["permalink"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":43,"id":81,"name":"permalink","prevSize":32,"code":59684},"setIdx":3,"setId":5,"iconIdx":35},{"icon":{"paths":["M512 921.6c-226.193 0-409.6-183.36-409.6-409.6s183.407-409.6 409.6-409.6c226.193 0 409.6 183.36 409.6 409.6s-183.407 409.6-409.6 409.6zM563.948 396.373l-0.641 230.827c-0.059 21.149 17.038 38.341 38.187 38.4 0.035 0 0.071 0 0.106 0v0c21.208 0 38.4-17.192 38.4-38.4v-230.827c0-20.972-17.001-37.973-37.973-37.973v0c-20.989 0-38.021 16.984-38.079 37.973zM384 396.8v230.4c0 21.208 17.192 38.4 38.4 38.4v0c21.208 0 38.4-17.192 38.4-38.4v-230.4c0-21.208-17.192-38.4-38.4-38.4v0c-21.208 0-38.4 17.192-38.4 38.4z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["pause"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":44,"id":80,"name":"pause","prevSize":32,"code":59685},"setIdx":3,"setId":5,"iconIdx":36},{"icon":{"paths":["M413.267 462.457l-61.621 52.827c-12.060-24.101-18.846-51.3-18.846-80.084v-153.6c0-98.969 80.231-179.2 179.2-179.2 81.222 0 149.823 54.036 171.815 128.12l-69.415 59.508v-8.428c0-56.554-45.846-102.4-102.4-102.4s-102.4 45.846-102.4 102.4v153.6c0 9.438 1.277 18.578 3.667 27.257zM377.419 729.227l67.683-58.024c20.198 4.825 42.486 7.197 66.899 7.197 130.426 0 200.2-67.697 214.765-215.514 0.429-4.351 0.833-9.7 1.213-16.048l-0.001-0c1.264-21.105 18.881-37.497 40.023-37.238 20.598 0.252 37.091 17.154 36.839 37.752-0.007 0.58-0.028 1.159-0.062 1.738-0.287 4.905-0.591 9.154-0.908 12.749-15.602 176.721-101.637 277.457-253.469 291.626v116.934h89.6c14.138 0 25.6 11.462 25.6 25.6s-11.462 25.6-25.6 25.6h-256c-14.138 0-25.6-11.462-25.6-25.6s11.462-25.6 25.6-25.6h89.6v-116.934c-35.723-3.334-67.803-11.459-96.181-24.239zM252.971 599.877c-17.135-38.906-28.111-84.873-32.804-137.618-0.329-3.702-0.644-8.093-0.943-13.173l0.001-0c-1.211-20.562 14.476-38.212 35.038-39.423 0.578-0.034 1.157-0.055 1.736-0.062 21.134-0.259 38.746 16.128 40.009 37.226 0.358 5.958 0.736 11.004 1.136 15.136 3.113 32.169 8.828 60.56 17.202 85.298l-61.375 52.616zM689.221 461.922c-12.902 86.295-87.333 152.478-177.221 152.478-0.213 0-0.425-0-0.638-0.001l177.859-152.476zM911.217 153.59c13.803 16.101 11.94 40.343-4.161 54.146l-749.629 642.648c-16.101 13.803-40.343 11.94-54.146-4.161s-11.94-40.343 4.161-54.146l749.629-642.648c16.101-13.803 40.343-11.94 54.146 4.161z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["mute"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":45,"id":79,"name":"mute","prevSize":32,"code":59686},"setIdx":3,"setId":5,"iconIdx":37},{"icon":{"paths":["M511.152 360.583c22.304 0 40.392 18.051 40.392 40.327v233.944c0 22.275-18.088 40.327-40.392 40.327s-40.392-18.051-40.392-40.327v-233.944c0-22.275 18.088-40.327 40.392-40.327zM49.119 863.747l413.955-740.751c14.588-26.104 48.090-35.845 75.032-21.957 9.656 4.977 17.597 12.61 22.82 21.957l413.955 740.751c16.58 29.668-5.594 65.533-40.020 65.533h-845.723c-34.426 0-56.599-35.865-40.020-65.533zM510.258 703.736c24.735 0 43.707 19.504 43.707 44.561 0 25.225-18.915 44.785-43.707 44.785s-43.707-19.56-43.707-44.785c0-25.056 18.972-44.561 43.707-44.561zM140.057 855.673h743.887l-371.943-665.573-371.943 665.573z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["modal-warning"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":46,"id":78,"name":"modal-warning","prevSize":32,"code":59687},"setIdx":3,"setId":5,"iconIdx":38},{"icon":{"paths":["M569.165 763.288c0 31.962-25.552 57.796-57.165 57.796s-57.165-25.834-57.165-57.796c0-31.962 25.552-57.796 57.165-57.796s57.165 25.834 57.165 57.796zM768 185.325v653.35c0 45.783-36.736 82.925-82.019 82.925h-347.961c-45.283 0-82.019-37.142-82.019-82.925v-653.35c0-45.783 36.736-82.925 82.019-82.925h347.961c45.283 0 82.019 37.142 82.019 82.925zM703.379 185.325c0-9.657-7.846-17.59-17.398-17.59h-347.961c-9.552 0-17.398 7.933-17.398 17.59v653.35c0 9.657 7.846 17.59 17.398 17.59h347.961c9.552 0 17.398-7.933 17.398-17.59v-653.35z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["mobile"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":47,"id":77,"name":"mobile","prevSize":32,"code":59688},"setIdx":3,"setId":5,"iconIdx":39},{"icon":{"paths":["M512 179.2c-56.554 0-102.4 45.846-102.4 102.4v153.6c0 56.554 45.846 102.4 102.4 102.4s102.4-45.846 102.4-102.4v-153.6c0-56.554-45.846-102.4-102.4-102.4zM665.6 896v0c0 14.138-11.462 25.6-25.6 25.6h-256c-14.138 0-25.6-11.462-25.6-25.6v0c0-14.138 11.462-25.6 25.6-25.6h89.6v-116.934c-151.712-14.158-237.732-114.746-253.432-291.208-0.329-3.702-0.644-8.093-0.943-13.173l0.001-0c-1.211-20.562 14.476-38.212 35.038-39.423 0.578-0.034 1.157-0.055 1.736-0.062v0c21.134-0.259 38.746 16.128 40.009 37.226 0.358 5.958 0.736 11.004 1.136 15.136 14.365 148.459 84.158 216.438 214.855 216.438 130.426 0 200.2-67.697 214.765-215.514 0.429-4.351 0.833-9.7 1.213-16.048l-0.001-0c1.264-21.105 18.881-37.497 40.023-37.238v0c20.598 0.252 37.091 17.154 36.839 37.752-0.007 0.58-0.028 1.159-0.062 1.738-0.287 4.905-0.591 9.154-0.908 12.749-15.602 176.721-101.637 277.457-253.469 291.626v116.934h89.6c14.138 0 25.6 11.462 25.6 25.6zM512 102.4c98.969 0 179.2 80.231 179.2 179.2v153.6c0 98.969-80.231 179.2-179.2 179.2s-179.2-80.231-179.2-179.2v-153.6c0-98.969 80.231-179.2 179.2-179.2z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["mic"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":48,"id":76,"name":"mic","prevSize":32,"code":59689},"setIdx":3,"setId":5,"iconIdx":40},{"icon":{"paths":["M541.395 826.208h-8.818c-208.607 0-360.015-132.144-360.015-314.208 0-173.28 141.818-314.256 316.115-314.256s316.115 140.976 316.115 314.256c0 28.32-13.252 56.64-27.275 86.544-4.867 10.464-9.686 20.784-13.396 29.664-36.43 78.048 35.226 115.632 65.729 131.664 4.722 2.448 10.794 5.616 15.709 8.544-20.046 22.944-87.414 58.512-304.164 57.792zM862.618 698.192c-43.129-22.704-41.056-27.216-34.214-42 3.903-9.264 8.288-18.672 12.722-28.176 15.902-33.84 33.876-72.24 33.876-116.016 0-211.776-173.333-384-386.326-384s-386.277 172.224-386.277 384c0 222.48 180.947 383.952 430.177 383.952l8.481 0.048h9.927c137.674 0 319.585-12.288 364.544-107.376 23.757-50.208-27.997-77.376-52.911-90.432z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["message"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":49,"id":75,"name":"message","prevSize":32,"code":59690},"setIdx":3,"setId":5,"iconIdx":41},{"icon":{"paths":["M445.44 780.8c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM445.44 524.8c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64zM445.44 268.8c0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64s-64-28.654-64-64z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["menu"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":50,"id":74,"name":"menu","prevSize":32,"code":59691},"setIdx":3,"setId":5,"iconIdx":42},{"icon":{"paths":["M510.025 277.943c63.563 0 115.2 51.671 115.2 115.2s-51.637 115.2-115.2 115.2c-63.563 0-115.2-51.671-115.2-115.2s51.637-115.2 115.2-115.2zM510.025 445.514c28.91 0 52.4-23.468 52.4-52.371 0-28.862-23.49-52.371-52.4-52.371s-52.4 23.509-52.4 52.371c0 28.903 23.49 52.371 52.4 52.371zM534.763 913.507c-13.199 10.791-32.328 10.791-45.526 0-2.477-2.026-6.813-5.709-12.744-10.965-9.704-8.6-20.469-18.595-32.033-29.9-32.942-32.207-65.856-68.605-96.632-108.552-89.137-115.7-143.029-237.437-143.029-360.552 0-166.357 137.582-301.139 307.2-301.139s307.2 134.781 307.2 301.139c0 123.115-53.892 244.851-143.029 360.552-30.776 39.947-63.69 76.345-96.632 108.552-11.563 11.306-22.329 21.301-32.033 29.9-5.93 5.255-10.266 8.939-12.744 10.965zM529.322 822.806c30.705-30.020 61.437-64.005 90.064-101.164 80.587-104.602 128.529-212.899 128.529-318.104 0-127.491-105.58-230.921-235.916-230.921s-235.916 103.43-235.916 230.921c0 105.205 47.942 213.502 128.529 318.104 28.628 37.159 59.36 71.143 90.064 101.164 9.588 9.374 25.057 9.374 34.645 0z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["map-pin"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":51,"id":73,"name":"map-pin","prevSize":32,"code":59692},"setIdx":3,"setId":5,"iconIdx":43},{"icon":{"paths":["M217.907 243.597c-28.959 0-52.511 24.086-52.511 53.706v429.395c0 29.619 23.552 53.664 52.511 53.664h588.145c28.959 0 52.552-24.045 52.552-53.664v-429.395c0-29.619-23.593-53.706-52.552-53.706h-588.145zM806.052 844.8h-588.145c-63.734 0-115.507-52.957-115.507-118.102v-429.395c0-65.146 51.773-118.102 115.507-118.102h588.145c63.734 0 115.548 52.957 115.548 118.102v429.395c0 65.146-51.814 118.102-115.548 118.102zM485.814 577.169l-214.684-146.451c-14.683-10.016-18.656-29.937-8.94-44.82v0c9.466-14.499 28.894-18.58 43.393-9.114 0.177 0.116 0.353 0.233 0.528 0.352l208.557 142.256 208.605-142.265c14.294-9.748 33.785-6.063 43.533 8.231 0.122 0.179 0.242 0.358 0.36 0.539v0c9.706 14.885 5.729 34.8-8.951 44.814l-214.694 146.457c-17.403 11.872-40.302 11.872-57.706 0z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["mail"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":52,"id":72,"name":"mail","prevSize":32,"code":59693},"setIdx":3,"setId":5,"iconIdx":44},{"icon":{"paths":["M909.622 909.622v0c-15.971 15.971-41.864 15.971-57.835 0l-155.625-155.625c-62.53 49.946-141.808 79.806-228.060 79.806-201.971 0-365.702-163.73-365.702-365.702s163.73-365.702 365.702-365.702c201.971 0 365.702 163.73 365.702 365.702 0 86.252-29.86 165.53-79.806 228.060l155.625 155.625c15.971 15.971 15.971 41.864 0 57.835zM468.102 764.064c163.456 0 295.963-132.507 295.963-295.963s-132.507-295.963-295.963-295.963c-163.456 0-295.963 132.507-295.963 295.963s132.507 295.963 295.963 295.963z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["magnifier"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":53,"id":71,"name":"magnifier","prevSize":32,"code":59694},"setIdx":3,"setId":5,"iconIdx":45},{"icon":{"paths":["M694.539 847.127h-365.078c-14.138 0-25.6-11.462-25.6-25.6v-288.048c0-14.138 11.462-25.6 25.6-25.6h365.078c14.138 0 25.6 11.462 25.6 25.6v288.048c0 14.138-11.462 25.6-25.6 25.6zM385.5 305.115c0-70.699 56.761-128.242 126.5-128.242s126.5 57.543 126.5 128.242v128.292h-252.999v-128.292zM711.96 433.406v-128.292c0-111.759-89.72-202.715-199.96-202.715s-199.96 90.956-199.96 202.715v128.292h-30.44c-28.277 0-51.2 22.923-51.2 51.2v385.794c0 28.277 22.923 51.2 51.2 51.2h460.8c28.277 0 51.2-22.923 51.2-51.2v-385.794c0-28.277-22.923-51.2-51.2-51.2h-30.44z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["lock"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":54,"id":70,"name":"lock","prevSize":32,"code":59695},"setIdx":3,"setId":5,"iconIdx":46},{"icon":{"paths":["M512 137.576v0c0 19.36-14.836 35.49-34.129 37.105-6.46 0.542-11.94 1.15-16.44 1.823-163.449 24.468-288.814 165.724-288.814 336.314 0 170.932 125.868 312.413 289.798 336.46 4.262 0.625 9.42 1.191 15.472 1.697l-0 0.002c19.283 1.612 34.112 17.734 34.112 37.084v0c0 18.528-15.020 33.548-33.548 33.548-0.816 0-1.631-0.030-2.444-0.089-5.493-0.4-10.229-0.844-14.206-1.331-202.519-24.798-359.402-197.708-359.402-407.37 0-209.201 156.195-381.812 358.068-407.204 4.317-0.543 9.506-1.036 15.567-1.478l0 0.002c18.467-1.347 34.53 12.532 35.877 30.999 0.059 0.812 0.089 1.625 0.089 2.439z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["loading"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":55,"id":69,"name":"loading","prevSize":32,"code":59696},"setIdx":3,"setId":5,"iconIdx":47},{"icon":{"paths":["M851.354 560.845c0 19.251-15.77 34.97-35.123 34.97-19.302 0-35.072-15.718-35.072-34.97v-93.030c0-19.251 15.77-34.97 35.072-34.97 19.354 0 35.123 15.718 35.123 34.97v93.030zM523.674 851.814h-23.398c-19.354 0-35.072-15.718-35.072-34.97s15.718-34.918 35.072-34.918h23.398c19.405 0 35.123 15.667 35.123 34.918s-15.718 34.97-35.123 34.97zM207.718 595.814c-19.354 0-35.123-15.718-35.123-34.97v-93.030c0-19.251 15.77-34.97 35.123-34.97s35.072 15.718 35.072 34.97v93.030c0 19.251-15.718 34.97-35.072 34.97zM816.23 363.059c-14.336 0-27.955 2.867-40.448 8.090-24.832-123.955-133.632-217.549-263.782-217.549s-238.95 93.594-263.834 217.549c-12.442-5.222-26.112-8.090-40.448-8.090-58.112 0-105.318 47.002-105.318 104.755v93.030c0 57.754 47.206 104.755 105.318 104.755 56.013 0 101.53-43.827 104.704-98.765h0.614v-141.824c0-111.155 89.242-201.626 198.963-201.626 109.67 0 198.912 90.47 198.912 201.626v189.133c0 69.12-34.15 130.816-88.525 167.424-14.643-40.397-53.146-69.427-98.714-69.427h-23.398c-58.061 0-105.318 46.95-105.318 104.704s47.258 104.755 105.318 104.755h23.398c41.011 0 76.237-23.654 93.645-57.754 85.606-36.506 145.664-114.022 160.358-205.773 11.981 4.71 24.934 7.526 38.554 7.526 58.112 0 105.37-47.002 105.37-104.755v-93.030c0-57.754-47.258-104.755-105.37-104.755z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["livechat"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":56,"id":68,"name":"livechat","prevSize":32,"code":59697},"setIdx":3,"setId":5,"iconIdx":48},{"icon":{"paths":["M347.27 294.4c-22.13 0-40.070-17.192-40.070-38.4s17.94-38.4 40.070-38.4h534.261c22.13 0 40.070 17.192 40.070 38.4s-17.94 38.4-40.070 38.4h-534.261zM347.27 550.4c-22.13 0-40.070-17.192-40.070-38.4s17.94-38.4 40.070-38.4h534.261c22.13 0 40.070 17.192 40.070 38.4s-17.94 38.4-40.070 38.4h-534.261zM347.27 806.4c-22.13 0-40.070-17.192-40.070-38.4s17.94-38.4 40.070-38.4h534.261c22.13 0 40.070 17.192 40.070 38.4s-17.94 38.4-40.070 38.4h-534.261zM102.177 768v0c0-21.208 17.192-38.4 38.4-38.4h56.765c21.208 0 38.4 17.192 38.4 38.4v0c0 21.208-17.192 38.4-38.4 38.4h-56.765c-21.208 0-38.4-17.192-38.4-38.4zM102.177 512v0c0-21.208 17.192-38.4 38.4-38.4h56.765c21.208 0 38.4 17.192 38.4 38.4v0c0 21.208-17.192 38.4-38.4 38.4h-56.765c-21.208 0-38.4-17.192-38.4-38.4zM102.177 256v0c0-21.208 17.192-38.4 38.4-38.4h56.765c21.208 0 38.4 17.192 38.4 38.4v0c0 21.208-17.192 38.4-38.4 38.4h-56.765c-21.208 0-38.4-17.192-38.4-38.4z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["list"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":57,"id":67,"name":"list","prevSize":32,"code":59698},"setIdx":3,"setId":5,"iconIdx":49},{"icon":{"paths":["M231.131 222.968c-32.317 0-58.514 25.881-58.514 57.806v462.452c0 31.926 26.198 57.806 58.514 57.806h561.737c32.317 0 58.514-25.881 58.514-57.806v-462.452c0-31.926-26.198-57.806-58.514-57.806h-561.737zM231.131 153.6h561.737c71.096 0 128.731 56.938 128.731 127.174v462.452c0 70.236-57.635 127.174-128.731 127.174h-561.737c-71.096 0-128.731-56.938-128.731-127.174v-462.452c0-70.236 57.635-127.174 128.731-127.174zM465.189 407.948c-19.39 0-35.109-15.528-35.109-34.684s15.719-34.684 35.109-34.684h280.869c19.39 0 35.109 15.528 35.109 34.684s-15.719 34.684-35.109 34.684h-280.869zM277.943 407.948c-19.39 0-35.109-15.528-35.109-34.684s15.719-34.684 35.109-34.684h46.811c19.39 0 35.109 15.528 35.109 34.684s-15.719 34.684-35.109 34.684h-46.811zM465.189 546.684c-19.39 0-35.109-15.528-35.109-34.684s15.719-34.684 35.109-34.684h280.869c19.39 0 35.109 15.528 35.109 34.684s-15.719 34.684-35.109 34.684h-280.869zM277.943 546.684c-19.39 0-35.109-15.528-35.109-34.684s15.719-34.684 35.109-34.684h46.811c19.39 0 35.109 15.528 35.109 34.684s-15.719 34.684-35.109 34.684h-46.811zM277.943 685.419c-19.39 0-35.109-15.528-35.109-34.684s15.719-34.684 35.109-34.684h46.811c19.39 0 35.109 15.528 35.109 34.684s-15.719 34.684-35.109 34.684h-46.811zM465.189 685.419c-19.39 0-35.109-15.528-35.109-34.684s15.719-34.684 35.109-34.684h280.869c19.39 0 35.109 15.528 35.109 34.684s-15.719 34.684-35.109 34.684h-280.869z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["list-alt"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":58,"id":66,"name":"list-alt","prevSize":32,"code":59699},"setIdx":3,"setId":5,"iconIdx":50},{"icon":{"paths":["M863.073 102.4h-702.327c-32.176 0-58.345 26.533-58.345 59.073v701.053c0 32.54 26.169 59.073 58.345 59.073h702.327c32.176 0 58.527-26.533 58.527-59.073v-701.053c0-32.54-26.351-59.073-58.527-59.073zM349.98 804.591h-121.424v-390.94h121.606v390.94h-0.182zM289.269 360.22c-37.899-1.363-67.919-32.482-67.919-70.406s30.020-69.043 67.919-70.406c38.853 0.075 70.331 31.553 70.406 70.406 0 38.958-31.403 70.406-70.406 70.406zM805.137 804.591h-121.424v-190.191c0-45.329-0.91-103.674-63.078-103.674-63.26 0-73 49.38-73 100.398v193.422h-121.378v-390.94h116.463v53.43h1.638c16.293-30.72 55.979-63.124 115.007-63.124 122.88 0 145.772 81.010 145.772 186.368v214.312z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["linkedin"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":59,"id":65,"name":"linkedin","prevSize":32,"code":59700},"setIdx":3,"setId":5,"iconIdx":51},{"icon":{"paths":["M911.351 545.469c-25.914-69.895-98.214-111.622-193.431-111.622-3.735 0-7.331 0.046-10.882 0.228l-0.646-84.502 119.068-20.226c14.311-2.431 23.941-16.003 21.51-30.314-0.071-0.417-0.152-0.832-0.242-1.244v0c-3.344-15.203-17.825-25.272-33.241-23.114-35.852 5.020-71.704 10.040-107.555 15.060l-0.367-56.436c-0.103-15.831-13.012-28.586-28.844-28.498v0c-15.684 0.087-28.327 12.872-28.24 28.556 0 0.086 0.001 0.172 0.003 0.258l0.964 65.812c-33.79 5.762-67.579 11.524-101.369 17.286v0c-16.013 2.731-26.78 17.925-24.049 33.937 0.007 0.043 0.015 0.086 0.022 0.129v0c2.818 16.095 18.111 26.888 34.22 24.151l92.19-15.665 1.476 82.636c-35.674 8.733-68.121 27.236-93.603 53.377-31.715 32.688-49.635 76.062-50.121 121.315 0 64.98 40.3 103.568 96.6 110.394 131.229 15.836 212.428-125.319 239.402-193.12 41.847 56.68 15.763 159.705-64.315 227.705-0.625 0.53-1.298 1.091-2.019 1.681l-0-0c-10.687 8.739-12.266 24.486-3.527 35.173 0.145 0.178 0.293 0.354 0.443 0.527l1.609 1.858c9.197 10.635 25.138 12.141 36.164 3.417 0 0 0 0 0 0 89.963-71.182 129.396-175.97 98.782-258.757zM565.62 616.546c0-31.671 13.602-64.707 36.427-88.278 14.197-14.652 31.635-25.865 50.951-32.763l3.412 175.192c-16 5.324-33.199 7.554-51.597 5.324-40.116-4.96-39.193-37.405-39.193-59.474zM707.454 485.084c3.504-0.137 6.916-0.41 10.467-0.41 32.046 0 61.972 5.961 78.202 14.789 16.231 8.919-42.421 111.122-90.56 153.941l1.891-168.321zM223.4 378.718l-119.637 377.943c-4.846 15.31 3.636 31.651 18.947 36.497 2.817 0.892 5.754 1.349 8.708 1.356v0c23.507 0.054 44.265-15.322 51.064-37.825l30.489-100.918h145.154l34.39 102.622c7.249 21.632 27.512 36.212 50.326 36.212v0c15.375 0 27.839-12.464 27.839-27.839 0-2.892-0.451-5.767-1.336-8.52l-122.033-379.593c-8.666-26.956-33.742-45.235-62.057-45.235v0c-28.289 0-53.317 18.329-61.854 45.299zM225.467 598.117l50.215-179.701c1.522-5.447 7.171-8.628 12.618-7.106 3.449 0.964 6.144 3.659 7.107 7.108l50.176 179.699h-120.116z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["language"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":60,"id":64,"name":"language","prevSize":32,"code":59701},"setIdx":3,"setId":5,"iconIdx":52},{"icon":{"paths":["M853.333 250.88c40.46 0 73.387 30.869 73.387 69.12v384c0 38.251-32.927 69.12-73.387 69.12h-682.667c-40.46 0-73.387-30.869-73.387-69.12v-384c0-38.251 32.927-69.12 73.387-69.12h682.667zM870.969 704v-384c0-8.86-7.844-16.213-17.636-16.213h-682.667c-9.792 0-17.636 7.354-17.636 16.213v384c0 8.86 7.844 16.213 17.636 16.213h682.667c9.792 0 17.636-7.354 17.636-16.213zM346.453 528c0 11.74-10.005 21.12-22.187 21.12h-34.133c-12.182 0-22.187-9.38-22.187-21.12v-32c0-11.74 10.005-21.12 22.187-21.12h34.133c12.182 0 22.187 9.38 22.187 21.12v32zM482.987 528c0 11.74-10.005 21.12-22.187 21.12h-34.133c-12.182 0-22.187-9.38-22.187-21.12v-32c0-11.74 10.005-21.12 22.187-21.12h34.133c12.182 0 22.187 9.38 22.187 21.12v32zM619.52 528c0 11.74-10.005 21.12-22.187 21.12h-34.133c-12.182 0-22.187-9.38-22.187-21.12v-32c0-11.74 10.005-21.12 22.187-21.12h34.133c12.182 0 22.187 9.38 22.187 21.12v32zM756.053 528c0 11.74-10.005 21.12-22.187 21.12h-34.133c-12.182 0-22.187-9.38-22.187-21.12v-32c0-11.74 10.005-21.12 22.187-21.12h34.133c12.182 0 22.187 9.38 22.187 21.12v32zM278.187 634.667c0 11.74-10.005 21.12-22.187 21.12h-34.133c-12.182 0-22.187-9.38-22.187-21.12v-32c0-11.74 10.005-21.12 22.187-21.12h34.133c12.182 0 22.187 9.38 22.187 21.12v32zM824.32 634.667c0 11.74-10.005 21.12-22.187 21.12h-34.133c-12.182 0-22.187-9.38-22.187-21.12v-32c0-11.74 10.005-21.12 22.187-21.12h34.133c12.182 0 22.187 9.38 22.187 21.12v32zM278.187 421.333c0 11.74-10.005 21.12-22.187 21.12h-34.133c-12.182 0-22.187-9.38-22.187-21.12v-32c0-11.74 10.005-21.12 22.187-21.12h34.133c12.182 0 22.187 9.38 22.187 21.12v32zM414.72 421.333c0 11.74-10.005 21.12-22.187 21.12h-34.133c-12.182 0-22.187-9.38-22.187-21.12v-32c0-11.74 10.005-21.12 22.187-21.12h34.133c12.182 0 22.187 9.38 22.187 21.12v32zM551.253 421.333c0 11.74-10.005 21.12-22.187 21.12h-34.133c-12.182 0-22.187-9.38-22.187-21.12v-32c0-11.74 10.005-21.12 22.187-21.12h34.133c12.182 0 22.187 9.38 22.187 21.12v32zM687.787 421.333c0 11.74-10.005 21.12-22.187 21.12h-34.133c-12.182 0-22.187-9.38-22.187-21.12v-32c0-11.74 10.005-21.12 22.187-21.12h34.133c12.182 0 22.187 9.38 22.187 21.12v32zM824.32 421.333c0 11.74-10.005 21.12-22.187 21.12h-34.133c-12.182 0-22.187-9.38-22.187-21.12v-32c0-11.74 10.005-21.12 22.187-21.12h34.133c12.182 0 22.187 9.38 22.187 21.12v32zM687.787 624c0 11.74-10.005 21.12-22.187 21.12h-307.2c-12.182 0-22.187-9.38-22.187-21.12v-10.667c0-11.74 10.005-21.12 22.187-21.12h307.2c12.182 0 22.187 9.38 22.187 21.12v10.667z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["keyboard"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":61,"id":63,"name":"keyboard","prevSize":32,"code":59702},"setIdx":3,"setId":5,"iconIdx":53},{"icon":{"paths":["M827.303 827.306v0c9.349-9.335 12.764-23.079 8.87-35.704l-4.273-13.856c-6.957-22.557-19.493-42.993-36.449-59.415l-224.459-217.401c-11.86-11.487-14.062-29.707-5.28-43.688 7.009-11.241 15.473-34.315 15.473-80.553 0-112.728-91.748-204.476-204.476-204.476l-6.053 0.091c-106.311 2.958-195.329 92.021-198.333 198.56-1.593 55.795 18.978 108.496 57.798 148.363 38.775 39.958 90.929 61.939 146.588 61.939 26.669 0 50.243-6.007 72.361-18.341v0c13.642-7.642 30.703-5.266 41.738 5.812l62.708 62.953h37.818c28.277 0 51.2 22.923 51.2 51.2v37.909l8.92 8.874h37.909c28.277 0 51.2 22.923 51.2 51.2v37.909l2.685 2.685 48.32 14.819c12.638 3.876 26.383 0.46 35.737-8.88zM902.167 768.735l0.711 2.306c11.517 37.341 1.435 77.99-26.197 105.621v0c-27.636 27.636-68.281 37.74-105.641 26.262l-40.953-12.583c-15.716-4.829-30.010-13.431-41.636-25.056v0c-11.335-11.335-17.703-26.709-17.703-42.74v-23.204h-13.051c-22.532 0-44.143-8.946-60.083-24.871v0c-15.939-15.924-24.894-37.53-24.894-60.061v-13.051c-30.854 0-60.44-12.279-82.227-34.126l-31.73-31.818c-25.577 10.376-53.11 15.564-82.055 15.564-74.727 0-144.54-29.49-196.649-83.056-52.063-53.565-79.643-124.197-77.549-198.97 3.959-142.947 123.514-262.456 266.461-266.416l7.737-0.137c151.23 0 274.243 123.059 274.243 274.289 0 36.772-4.414 66.991-13.425 91.475l197.851 191.682c31.069 30.1 54.041 67.552 66.79 108.889zM276.969 346.78c0-38.547 31.265-69.812 69.812-69.812 38.592 0 69.812 31.265 69.812 69.812s-31.22 69.812-69.812 69.812c-38.547 0-69.812-31.265-69.812-69.812z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["key"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":62,"id":62,"name":"key","prevSize":32,"code":59703},"setIdx":3,"setId":5,"iconIdx":54},{"icon":{"paths":["M204.826 449.459v-193.485c0-28.277 22.923-51.2 51.2-51.2h294.554c28.277 0 51.2 22.923 51.2 51.2v526.49l135.975-130.597c15.17-14.57 39.133-14.576 54.31-0.014v0c14.406 13.822 14.879 36.706 1.057 51.112-0.337 0.352-0.682 0.697-1.033 1.034l-190.927 183.524c-19.817 19.049-51.14 19.050-70.959 0.004l-190.972-183.531c-14.393-13.833-14.848-36.714-1.016-51.108 0.339-0.352 0.684-0.698 1.037-1.036v0c15.176-14.561 39.138-14.552 54.304 0.020l131.373 126.239v-499.456h-243.302v170.803c0 21.208-17.192 38.4-38.4 38.4v0c-21.208 0-38.4-17.192-38.4-38.4z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["jump"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":63,"id":61,"name":"jump","prevSize":32,"code":59704},"setIdx":3,"setId":5,"iconIdx":55},{"icon":{"paths":["M512 768v0c19.206 0 34.775-15.569 34.775-34.775v-284.375c0-19.206-15.569-34.775-34.775-34.775v0c-19.206 0-34.775 15.569-34.775 34.775v284.375c0 19.206 15.569 34.775 34.775 34.775zM512 352c26 0 45.175-18.525 45.175-42.575 0-24.375-19.175-42.9-45.175-42.9s-45.175 18.525-45.175 42.9c0 24.050 19.175 42.575 45.175 42.575z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["italic"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":64,"id":60,"name":"italic","prevSize":32,"code":59705},"setIdx":3,"setId":5,"iconIdx":56},{"icon":{"paths":["M512 921.6c-226.193 0-409.6-183.407-409.6-409.6 0-226.24 183.407-409.6 409.6-409.6 226.24 0 409.6 183.36 409.6 409.6 0 226.193-183.36 409.6-409.6 409.6zM512 851.383c187.433 0 339.383-151.95 339.383-339.383s-151.95-339.383-339.383-339.383c-187.433 0-339.383 151.95-339.383 339.383s151.95 339.383 339.383 339.383zM512.042 378.058c-24.155 0-42.364-18.678-42.364-43.535 0-24.904 18.21-43.722 42.364-43.722s42.318 18.818 42.318 43.722c0 24.857-18.163 43.535-42.318 43.535zM513.142 733.17c-21.065 0-38.245-17.133-38.245-38.198v-240.704c0-21.065 17.18-38.198 38.245-38.198s38.198 17.133 38.198 38.198v240.704c0 21.065-17.133 38.198-38.198 38.198z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["info-circled"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":65,"id":59,"name":"info-circled","prevSize":32,"code":59706},"setIdx":3,"setId":5,"iconIdx":57},{"icon":{"paths":["M512 102.4v0c20.524 0 37.161 16.638 37.161 37.161v449.409l74.777-76.869c14.366-14.768 37.984-15.094 52.752-0.728 0.246 0.239 0.489 0.482 0.728 0.728v0c14.886 15.302 14.886 39.673 0 54.976l-129.258 132.875c-19.717 20.269-52.132 20.716-72.401 0.999-0.338-0.328-0.671-0.661-0.999-0.999l-129.258-132.875c-14.886-15.302-14.886-39.673 0-54.976v0c14.366-14.768 37.984-15.094 52.752-0.728 0.246 0.239 0.489 0.482 0.728 0.728l75.858 77.981v-450.521c0-20.524 16.638-37.161 37.161-37.161zM691.2 301.894v-76.402h153.6c28.277 0 51.2 22.923 51.2 51.2v593.708c0 28.277-22.923 51.2-51.2 51.2h-665.6c-28.277 0-51.2-22.923-51.2-51.2v-593.708c0-28.277 22.923-51.2 51.2-51.2h153.6v76.402h-130.477v543.304h619.355v-543.304h-130.477z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["import"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":66,"id":58,"name":"import","prevSize":32,"code":59707},"setIdx":3,"setId":5,"iconIdx":58},{"icon":{"paths":["M277.962 392.518c-32.296 0.102-58.446 26.818-58.521 59.788v119.482c0.1 32.952 26.242 59.639 58.521 59.741h468.075c32.314-0.102 58.471-26.846 58.521-59.834v-119.436c-0.1-32.952-26.242-59.639-58.521-59.741h-468.075zM746.038 497.042l-73.128 74.7h-87.781l-73.128-74.653-73.128 74.607h-87.827l-73.037-74.607v-44.829h43.868l73.128 74.653 73.083-74.607h87.827l73.128 74.653 73.128-74.653h43.868v44.736zM394.958 691.223h234.083v59.695h-234.083v-59.695zM512 153.6c-225.847 0-409.6 173.834-409.6 388.271v268.788c0.1 32.952 26.242 59.639 58.521 59.741h702.158c32.279-0.102 58.421-26.789 58.521-59.741v-268.788c0-214.436-183.753-388.271-409.646-388.271h0.046zM863.079 810.659h-702.158v-268.788c0-184.566 154.448-333.918 351.034-333.918s351.079 149.353 351.079 333.918v268.788h0.046z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["hubot"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":67,"id":57,"name":"hubot","prevSize":32,"code":59708},"setIdx":3,"setId":5,"iconIdx":59},{"icon":{"paths":["M543.721 856.474v-127.067c54.295-7.873 101.717-35.408 135.714-75.366l107.588 67.22c-57.253 75.048-144.134 126.157-243.302 135.214zM166.889 531.706l126.839 4.415c6.645 60.075 37.046 112.503 82.148 148.184l-63.488 109.909c-83.422-59.164-139.401-154.192-145.499-262.508zM480.233 167.481v127.067c-54.295 7.919-101.717 35.408-135.714 75.366l-107.543-67.174c57.253-75.048 144.134-126.157 243.257-135.259zM856.974 490.018l-126.93-4.46c-7.191-59.119-37.456-110.729-81.92-145.909l63.442-109.909c82.876 58.755 138.581 152.872 145.408 260.278zM728.496 553.552l126.157 4.415c-5.188 38.958-16.839 75.776-33.906 109.545l-106.997-66.856c6.599-14.928 11.56-30.674 14.746-47.104zM543.721 294.548v-127.067c40.050 3.641 78.006 14.336 112.913 30.492l-63.124 109.363c-15.747-6.281-32.495-10.286-49.789-12.789zM295.276 472.633l-126.293-4.415c5.052-39.731 16.839-77.323 34.27-111.73l106.951 66.81c-6.872 15.61-11.833 32.131-14.928 49.334zM512 669.15c-86.744 0-157.195-70.497-157.195-157.15 0-86.699 70.451-157.195 157.195-157.195 86.699 0 157.195 70.497 157.195 157.195 0 86.653-70.497 157.15-157.195 157.15zM480.233 729.407v127.067c-40.004-3.641-77.961-14.29-112.913-30.492l63.169-109.363c15.701 6.281 32.495 10.286 49.744 12.789zM512 102.4c-225.826 0-409.6 183.728-409.6 409.6 0 225.826 183.774 409.6 409.6 409.6s409.6-183.774 409.6-409.6c0-225.872-183.774-409.6-409.6-409.6z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["help"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":68,"id":56,"name":"help","prevSize":32,"code":59709},"setIdx":3,"setId":5,"iconIdx":60},{"icon":{"paths":["M292.571 643.657v-263.314h-146.286c-24.237 0-43.886-19.648-43.886-43.886v0c0-24.237 19.648-43.886 43.886-43.886h146.286v-146.286c0-24.237 19.648-43.886 43.886-43.886v0c24.237 0 43.886 19.648 43.886 43.886v146.286h263.314v-146.286c0-24.237 19.648-43.886 43.886-43.886v0c24.237 0 43.886 19.648 43.886 43.886v146.286h146.286c24.237 0 43.886 19.648 43.886 43.886v0c0 24.237-19.648 43.886-43.886 43.886h-146.286v263.314h146.286c24.237 0 43.886 19.648 43.886 43.886v0c0 24.237-19.648 43.886-43.886 43.886h-146.286v146.286c0 24.237-19.648 43.886-43.886 43.886v0c-24.237 0-43.886-19.648-43.886-43.886v-146.286h-263.314v146.286c0 24.237-19.648 43.886-43.886 43.886v0c-24.237 0-43.886-19.648-43.886-43.886v-146.286h-146.286c-24.237 0-43.886-19.648-43.886-43.886v0c0-24.237 19.648-43.886 43.886-43.886h146.286zM380.343 643.657h263.314v-263.314h-263.314v263.314z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["hashtag"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":69,"id":55,"name":"hashtag","prevSize":32,"code":59710},"setIdx":3,"setId":5,"iconIdx":61},{"icon":{"paths":["M729.177 398.231c64.9-30.875 141.223 17.116 141.223 90.853v137.482c-0 7.684-0.875 15.342-2.607 22.828l-45.070 194.765c-10.486 45.318-50.562 77.441-96.639 77.441h-292.957c-31.771 0-61.833-15.527-80.442-41.539l-180.258-252.049c-31.972-44.7-22.262-107.036 21.821-139.638 31.412-23.228 72.528-25.465 105.831-7.241v-278.467c0-55.281 44.508-100.267 99.246-100.267s99.244 44.985 99.244 100.267v132.010c36.5-9.503 75.619 2.763 100.447 32.405 44.615-25.166 101.182-11.721 130.159 31.149zM230.246 537.691c-18.055 12.931-22.917 34.956-8.598 54.978l180.277 252.049c7.258 10.145 18.933 16.201 31.202 16.201h292.958c18.003 0 33.472-12.498 37.628-30.46l45.073-194.766c0.69-2.986 1.040-6.056 1.040-9.125v-137.481c0-23.624-16.54-38.907-38.761-40.254-21.568-1.307-38.352 11.161-38.581 31.558-0.011 1.235-0.011 1.235-0.017 3.133-0.035 12.857-10.45 23.261-23.284 23.261-12.869 0-23.301-10.451-23.301-23.343v-28.727c0-24.172-16.75-39.256-38.668-39.245-21.915 0.011-38.673 15.109-38.673 39.245v28.728c0 12.891-10.432 23.341-23.3 23.341s-23.3-10.45-23.3-23.341v-51.642c0-24.173-16.75-39.257-38.668-39.245-21.914 0.012-38.673 15.111-38.673 39.245v51.639c0 12.892-10.433 23.343-23.302 23.343s-23.302-10.451-23.302-23.343v-280.775c0-24.173-16.749-39.257-38.667-39.245-21.914 0.012-38.673 15.111-38.673 39.245v383.212c0 9.369-6.039 17.666-14.943 20.532s-18.637-0.356-24.084-7.972l-37.578-52.54c-13.477-18.842-35.918-21.017-53.804-8.208zM437.994 722.849v-100.908c0-12.892 10.433-23.343 23.302-23.343s23.302 10.451 23.302 23.343v100.908c0 12.892-10.433 23.343-23.302 23.343s-23.302-10.451-23.302-23.343zM585.24 598.598c12.869 0 23.301 10.451 23.301 23.343v100.91c0 12.892-10.432 23.343-23.301 23.343s-23.301-10.451-23.301-23.343v-100.91c0-12.892 10.432-23.343 23.301-23.343zM685.883 621.94c0-12.892 10.432-23.343 23.301-23.343s23.301 10.451 23.301 23.343v100.91c0 12.892-10.432 23.343-23.301 23.343s-23.301-10.451-23.301-23.343v-100.91z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["hand-pointer"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":70,"id":54,"name":"hand-pointer","prevSize":32,"code":59711},"setIdx":3,"setId":5,"iconIdx":62},{"icon":{"paths":["M921.6 521.557c0 233.745-162.684 400.043-402.893 400.043-110.449 0.121-216.41-42.994-294.509-119.835s-121.921-181.095-121.798-289.764c0-226.6 185.997-409.6 416.307-409.6 112.125 0 206.488 40.505 279.157 107.179l-113.328 107.179c-148.205-140.629-423.847-34.998-423.847 195.243 0 142.905 116.011 258.64 258.018 258.64 164.858 0 226.656-116.281 236.37-176.583h-236.37v-140.811h396.324c3.886 20.981 6.568 41.142 6.568 68.358v-0.046z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["google"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":71,"id":53,"name":"google","prevSize":32,"code":59712},"setIdx":3,"setId":5,"iconIdx":63},{"icon":{"paths":["M150.050 416.542l361.813 466.808-396.538-292.201c-10.911-8.038-15.495-22.054-11.423-34.921l46.148-139.686zM270.655 138.978c-2.277-6.329-8.316-10.555-15.087-10.555s-12.81 4.225-15.087 10.555l-90.431 277.564h211.081l-90.476-277.564zM361.131 416.542l150.778 466.808 150.733-466.808h-301.511zM919.916 556.228l-46.148-139.686-361.859 466.808 396.584-292.201c10.894-8.050 15.46-22.064 11.378-34.921h0.046zM783.246 138.978c-2.277-6.329-8.316-10.555-15.087-10.555s-12.81 4.225-15.087 10.555l-90.431 277.564h211.081l-90.476-277.564z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["gitlab"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":72,"id":52,"name":"gitlab","prevSize":32,"code":59713},"setIdx":3,"setId":5,"iconIdx":64},{"icon":{"paths":["M372.17 762.031c0 3.362-3.897 6.070-8.873 6.070-5.634 0.514-9.53-2.194-9.53-6.070 0-3.408 3.943-6.070 8.873-6.070 5.117-0.56 9.53 2.148 9.53 6.070zM319.215 754.42c-1.221 3.362 2.206 7.284 7.324 8.264 4.413 1.728 9.53 0 10.563-3.362 0.986-3.408-2.253-7.284-7.324-8.824-4.46-1.167-9.389 0.514-10.563 3.922zM394.47 751.525c-4.929 1.167-8.31 4.389-7.84 8.311 0.516 3.362 4.976 5.603 10.047 4.389 4.976-1.167 8.356-4.389 7.84-7.797-0.469-3.222-5.070-5.416-10.047-4.902zM506.578 102.4c-236.281 0-416.978 178.354-416.978 413.343 0 187.832 118.868 348.585 288.72 405.172 21.783 3.875 29.435-9.478 29.435-20.497 0-10.505-0.469-68.447-0.469-104.024 0 0-119.244 25.446-144.313-50.425 0 0-19.389-49.351-47.322-62.050 0 0-39.012-26.613 2.723-26.053 0 0 42.393 3.362 65.725 43.701 37.322 65.365 99.808 46.55 124.173 35.391 3.943-27.080 15.023-45.896 27.229-57.101-95.16-10.505-191.26-24.232-191.26-187.179 0-46.596 12.957-69.941 40.233-99.776-4.46-11.019-18.919-56.401 4.413-114.996 35.585-11.019 117.507 45.756 117.507 45.756 34.842-9.61 70.833-14.478 106.991-14.474 36.143-0.020 72.121 4.849 106.944 14.474 0 0 81.921-56.961 117.554-45.756 23.332 58.782 8.826 103.978 4.413 114.996 27.229 29.975 43.942 53.366 43.942 99.776 0 163.46-100.324 176.487-195.532 187.225 15.68 13.353 28.966 38.752 28.966 78.579 0 57.055-0.516 127.696-0.516 141.61 0 11.019 7.84 24.372 29.435 20.497 170.368-56.261 285.81-217.013 285.81-404.846 0-234.989-191.588-413.343-427.822-413.343zM255.18 686.627c-2.253 1.728-1.737 5.603 1.174 8.824 2.723 2.708 6.619 3.875 8.873 1.681 2.206-1.681 1.69-5.603-1.221-8.778-2.723-2.708-6.619-3.922-8.826-1.728zM236.777 672.9c-1.221 2.241 0.469 4.949 3.897 6.63 2.723 1.681 6.103 1.167 7.324-1.167 1.221-2.241-0.469-4.949-3.897-6.63-3.427-1.027-6.103-0.467-7.324 1.167zM291.939 733.223c-2.723 2.194-1.69 7.284 2.206 10.505 3.943 3.875 8.873 4.389 11.079 1.681 2.206-2.194 1.221-7.284-2.206-10.505-3.756-3.875-8.873-4.389-11.079-1.681zM272.55 708.338c-2.723 1.681-2.723 6.070 0 9.992 2.723 3.875 7.324 5.603 9.53 3.875 2.723-2.194 2.723-6.583 0-10.505-2.394-3.875-6.807-5.603-9.53-3.362z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["github"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":73,"id":51,"name":"github","prevSize":32,"code":59714},"setIdx":3,"setId":5,"iconIdx":65},{"icon":{"paths":["M375.059 230.4h-170.259c-14.138 0-25.6 11.462-25.6 25.6v512c0 14.138 11.462 25.6 25.6 25.6h614.4c14.138 0 25.6-11.462 25.6-25.6v-409.6c0-14.138-11.462-25.6-25.6-25.6h-342.21l-82.738-93.74c-4.86-5.506-11.85-8.66-19.193-8.66zM511.641 256h358.759c28.277 0 51.2 22.923 51.2 51.2v512c0 28.277-22.923 51.2-51.2 51.2h-716.8c-28.277 0-51.2-22.923-51.2-51.2v-614.4c0-28.277 22.923-51.2 51.2-51.2h244.559c14.687 0 28.667 6.307 38.387 17.319l75.095 85.081z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["folder"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":74,"id":50,"name":"folder","prevSize":32,"code":59715},"setIdx":3,"setId":5,"iconIdx":66},{"icon":{"paths":["M649.479 321.022l142.305 128.268c21.614 19.482 22.48 51.889 1.935 72.384-10.193 10.169-24.34 15.925-39.135 15.925h-468.794v345.6c0 21.208-18.13 38.4-40.495 38.4s-40.495-17.192-40.495-38.4v-729.6c0-28.277 24.174-51.2 53.994-51.2h512.942c26.214 0 47.464 20.151 47.464 45.008 0 12.259-5.274 23.988-14.602 32.476l-155.119 141.137zM661.1 179.2h-375.309v281.6h373.075c5.964 0 10.799-4.585 10.799-10.24 0-2.779-1.191-5.439-3.301-7.369l-113.393-103.746c-10.73-9.817-11.036-26.023-0.683-36.198 0.224-0.22 0.451-0.436 0.683-0.647l115.626-105.79c4.292-3.927 4.414-10.409 0.273-14.479-2.035-2-4.84-3.13-7.771-3.13z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["flag"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":75,"id":49,"name":"flag","prevSize":32,"code":59716},"setIdx":3,"setId":5,"iconIdx":67},{"icon":{"paths":["M204.8 358.4h153.6v-102.4h-153.6v102.4zM204.8 460.8v102.4h153.6v-102.4h-153.6zM204.8 665.6v102.4h153.6v-102.4h-153.6zM460.8 768h358.4v-102.4h-358.4v102.4zM819.2 563.2v-102.4h-358.4v102.4h358.4zM819.2 358.4v-102.4h-358.4v102.4h358.4zM204.8 153.6h614.4c56.554 0 102.4 45.846 102.4 102.4v512c0 56.554-45.846 102.4-102.4 102.4h-614.4c-56.554 0-102.4-45.846-102.4-102.4v-512c0-56.554 45.846-102.4 102.4-102.4z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["file-sheets"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":76,"id":48,"name":"file-sheets","prevSize":32,"code":59717},"setIdx":3,"setId":5,"iconIdx":68},{"icon":{"paths":["M849.98 555.116c-38.964-38.325-150.107-27.786-205.678-20.759-54.933-33.535-91.661-79.844-117.53-147.871 12.456-51.42 32.257-129.667 17.246-178.851-13.414-83.677-120.724-75.373-136.054-18.843-14.053 51.42-1.278 122.96 22.356 214.301-31.938 76.331-79.525 178.851-113.059 237.616-63.875 32.896-150.107 83.677-162.882 147.552-10.539 50.461 83.038 176.296 243.045-99.645 71.54-23.634 149.468-52.697 218.453-64.195 60.362 32.576 130.944 54.294 178.212 54.294 81.441 0 89.425-90.064 55.891-123.599zM217.296 803.59c16.288-43.755 78.247-94.216 97.090-111.782-60.681 96.771-97.090 114.017-97.090 111.782zM477.907 194.859c23.634 0 21.398 102.52 5.749 130.305-14.053-44.393-13.733-130.305-5.749-130.305zM399.979 631.127c30.979-53.975 57.488-118.169 78.886-174.699 26.508 48.226 60.362 86.87 96.132 113.379-66.43 13.733-124.237 41.838-175.018 61.32zM820.278 615.159c0 0-15.969 19.163-119.127-24.911 112.101-8.304 130.625 17.246 119.127 24.911z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["file-pdf"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":77,"id":47,"name":"file-pdf","prevSize":32,"code":59718},"setIdx":3,"setId":5,"iconIdx":69},{"icon":{"paths":["M251.909 698.63v0c-13.538-11.36-15.304-31.544-3.944-45.083l294.504-350.976c49.32-58.777 136.496-66.538 195.386-17.125 58.618 49.186 66.186 136.85 17.036 195.424l-315.359 375.83c-71.816 85.587-199.714 96.629-285.354 24.784-85.712-71.905-96.714-200.039-24.728-285.829l342.715-408.431c94.541-112.67 262.87-127.247 375.541-32.689 112.773 94.643 127.503 262.904 32.947 375.591l-322.185 383.965c-11.36 13.538-31.544 15.304-45.083 3.944v0c-13.538-11.36-15.304-31.544-3.944-45.083l322.185-383.965c71.835-85.61 60.639-213.506-25.062-285.429-85.614-71.85-213.568-60.769-285.372 24.804l-342.715 408.431c-49.295 58.747-41.759 146.504 16.834 195.659 58.59 49.152 146.118 41.595 195.194-16.891l315.359-375.83c26.451-31.523 22.368-78.814-9.148-105.259-31.779-26.665-78.593-22.497-105.22 9.236l-294.504 350.976c-11.36 13.538-31.544 15.304-45.083 3.944z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["file-generic"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":78,"id":46,"name":"file-generic","prevSize":32,"code":59719},"setIdx":3,"setId":5,"iconIdx":70},{"icon":{"paths":["M153.6 153.6h716.8c28.277 0 51.2 22.923 51.2 51.2v0c0 28.277-22.923 51.2-51.2 51.2h-716.8c-28.277 0-51.2-22.923-51.2-51.2v0c0-28.277 22.923-51.2 51.2-51.2zM153.6 358.4h716.8c28.277 0 51.2 22.923 51.2 51.2v0c0 28.277-22.923 51.2-51.2 51.2h-716.8c-28.277 0-51.2-22.923-51.2-51.2v0c0-28.277 22.923-51.2 51.2-51.2zM153.6 563.2h716.8c28.277 0 51.2 22.923 51.2 51.2v0c0 28.277-22.923 51.2-51.2 51.2h-716.8c-28.277 0-51.2-22.923-51.2-51.2v0c0-28.277 22.923-51.2 51.2-51.2zM153.6 768h307.2c28.277 0 51.2 22.923 51.2 51.2v0c0 28.277-22.923 51.2-51.2 51.2h-307.2c-28.277 0-51.2-22.923-51.2-51.2v0c0-28.277 22.923-51.2 51.2-51.2z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["file-document"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":79,"id":45,"name":"file-document","prevSize":32,"code":59720},"setIdx":3,"setId":5,"iconIdx":71},{"icon":{"paths":["M921.6 147.547v728.724c0 25.031-20.298 45.147-45.147 45.147h-208.85v-317.076h106.45l15.929-123.608h-122.561v-79.007c0-35.817 9.876-60.166 61.258-60.166h65.49v-110.592c-31.712-3.406-63.588-5.062-95.482-4.961-94.345 0-159.061 57.617-159.061 163.476v91.25h-106.815v123.608h106.815v317.258h-392.078c-24.903-0.075-45.072-20.244-45.147-45.147v-728.906c0-24.849 20.298-45.147 45.147-45.147h728.724c25.031 0 45.329 20.298 45.329 45.147z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["facebook"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":80,"id":44,"name":"facebook","prevSize":32,"code":59721},"setIdx":3,"setId":5,"iconIdx":72},{"icon":{"paths":["M325.242 783.695l70.491-60.414c37.053 10.289 76.034 15.779 116.267 15.779 142.353 0 269.027-68.734 350.137-175.566 4.567-6.016 10.062-13.956 16.484-23.821 10.979-16.866 11.061-38.599 0.207-55.546-6.187-9.661-11.508-17.456-15.964-23.384-21.008-27.953-45.389-53.358-72.597-75.592l60.282-51.664c44.277 39.025 82.118 85.594 111.616 137.828 14.179 25.106 14.179 56.265 0 81.371-90.173 159.672-258.39 266.514-450.166 266.514-65.744 0-128.731-12.558-186.758-35.505zM168.775 686.343c-42.268-38.156-78.486-83.271-106.941-133.655-14.179-25.107-14.179-56.266 0-81.373 90.173-159.672 258.39-266.514 450.166-266.514 63.279 0 124.004 11.634 180.211 32.968l-72.317 61.974c-34.403-8.576-70.532-13.145-107.894-13.145-146.146 0-270.625 71.048-351.315 176.679-4.071 5.329-8.932 12.217-14.583 20.663-11.398 17.036-11.538 39.228-0.356 56.406l0.001-0c5.388 8.276 10.035 15.031 13.942 20.262 20.364 27.269 43.676 52.104 69.448 74.007l-60.362 51.729zM469.864 659.749l194.572-166.755c0.769 6.228 1.164 12.571 1.164 19.007 0 84.831-68.769 153.6-153.6 153.6-14.612 0-28.747-2.040-42.136-5.851zM358.822 523.476c-0.28-3.789-0.422-7.616-0.422-11.476 0-84.831 68.769-153.6 153.6-153.6 11.977 0 23.633 1.371 34.821 3.964l-187.999 161.112zM121.51 842.573c-13.181-15.357-11.417-38.491 3.939-51.672l715.824-613.448c15.373-13.174 38.514-11.395 51.692 3.975 13.174 15.365 11.398 38.501-3.967 51.675l-715.759 613.433c-15.382 13.183-38.536 11.409-51.73-3.963z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["eye-off"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":81,"id":43,"name":"eye-off","prevSize":32,"code":59722},"setIdx":3,"setId":5,"iconIdx":73},{"icon":{"paths":["M537.998 831.538h341.366c23.326 0 42.236 19.514 42.236 43.585s-18.91 43.585-42.236 43.585l-464.6 2.891c-28.396 0-53.434-11.69-75.114-35.070l-215.032-215.032c-39.586-39.586-39.788-103.567-0.45-142.905l391.75-391.75c39.338-39.338 103.318-39.136 142.905 0.45l215.032 215.032c39.586 39.586 39.788 103.567 0.45 142.905l-336.308 336.308zM391.608 368.669l250.871 250.871 178.068-178.068c9.834-9.834 9.784-25.83-0.113-35.726l-215.032-215.032c-9.897-9.897-25.892-9.947-35.726-0.113l-178.068 178.068zM338.187 422.090l-160.262 160.262c-9.834 9.834-9.784 25.83 0.113 35.726l215.032 215.032c9.897 9.897 25.892 9.947 35.726 0.113l160.262-160.262-250.871-250.871z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["eraser"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":82,"id":42,"name":"eraser","prevSize":32,"code":59723},"setIdx":3,"setId":5,"iconIdx":74},{"icon":{"paths":["M512 921.6c-226.216 0-409.6-183.384-409.6-409.6s183.384-409.6 409.6-409.6c226.216 0 409.6 183.384 409.6 409.6s-183.384 409.6-409.6 409.6zM512 842.323c182.432 0 330.323-147.89 330.323-330.323s-147.89-330.323-330.323-330.323c-182.432 0-330.323 147.89-330.323 330.323s147.89 330.323 330.323 330.323zM617.703 459.148c-29.189 0-52.852-23.662-52.852-52.852s23.662-52.852 52.852-52.852c29.189 0 52.852 23.662 52.852 52.852s-23.662 52.852-52.852 52.852zM406.297 459.148c-29.189 0-52.852-23.662-52.852-52.852s23.662-52.852 52.852-52.852c29.189 0 52.852 23.662 52.852 52.852s-23.662 52.852-52.852 52.852zM365.618 626.852v0c15.048-15.048 38.673-17.26 56.252-5.268 1.49 1.018 2.891 1.924 4.202 2.72 50.324 30.547 112.95 32.907 165.176 7.082 4.591-2.27 9.926-5.508 16.005-9.714l0.001 0.001c17.854-12.352 41.986-10.172 57.338 5.179v0c13.89 13.89 13.89 36.411 0 50.302-1.206 1.206-2.497 2.324-3.864 3.345-12.813 9.569-23.658 16.594-32.536 21.074-79.213 39.971-175.185 35.294-250.475-14.032-2.476-1.622-5.219-3.565-8.23-5.828l0-0.001c-16.077-12.084-19.314-34.914-7.229-50.99 1.028-1.367 2.15-2.66 3.36-3.87z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["emoji"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":83,"id":41,"name":"emoji","prevSize":32,"code":59724},"setIdx":3,"setId":5,"iconIdx":75},{"icon":{"paths":["M774.213 358.611l-108.786-108.736 54.393-54.443c23.582-23.482 64.564-23.582 88.046-0.050l20.79 20.79c24.23 24.28 24.23 63.766 0 88.046l-54.443 54.393zM370.876 761.948l-110.338 33.528c-13.528 4.111-27.826-3.524-31.937-17.051-1.474-4.85-1.474-10.028-0.002-14.879l33.491-110.334 350.439-350.489 108.836 108.786-350.489 350.439zM860.763 142.484c-25.875-25.826-60.226-40.084-96.871-40.084-36.594 0-71.045 14.259-96.92 40.134l-470.992 471.042-65.715 216.365c-8.218 27.057 7.054 55.652 34.111 63.87 9.703 2.947 20.063 2.946 29.766-0.002l216.369-65.751 471.042-470.942c53.396-53.496 53.396-140.395 0-193.841l-20.79-20.79z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["edit"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":84,"id":40,"name":"edit","prevSize":32,"code":59725},"setIdx":3,"setId":5,"iconIdx":76},{"icon":{"paths":["M801.451 563.304h65.536v247.856c0 60.994-49.446 110.44-110.44 110.44h-543.706c-60.994 0-110.44-49.446-110.44-110.44v-543.706c0-60.994 49.446-110.44 110.44-110.44h257.92l0.634 65.536h-258.554c-24.8 0-44.904 20.104-44.904 44.904v543.706c0 24.8 20.104 44.904 44.904 44.904h543.706c24.8 0 44.904-20.104 44.904-44.904v-247.856zM795.829 321.033l46.458-46.415c20.676-20.719 20.676-54.414 0-75.133l-17.741-17.741c-20.038-20.081-55.009-19.996-75.133 0.043l-46.415 46.458 92.831 92.788zM451.649 665.214l299.084-299.042-92.873-92.831-299.042 299.084-28.579 94.152c-1.256 4.139-1.256 8.558 0.002 12.696 3.508 11.544 15.709 18.058 27.253 14.55l94.155-28.61zM869.686 136.605l17.741 17.741c45.565 45.607 45.565 119.761 0 165.411l-401.955 401.87-184.635 56.108c-8.28 2.516-17.12 2.517-25.4 0.002-23.088-7.012-36.12-31.414-29.108-54.502l56.077-184.632 401.913-401.955c22.080-22.080 51.478-34.248 82.705-34.248 31.27 0 60.583 12.168 82.663 34.205z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["edit-rounded"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":85,"id":39,"name":"edit-rounded","prevSize":32,"code":59726},"setIdx":3,"setId":5,"iconIdx":77},{"icon":{"paths":["M327.788 691.2h-104.056c36.791 59.058 91.226 105.986 155.931 133.412-21.594-36.602-39.346-81.994-51.874-133.412zM313.652 614.4c-4.212-32.729-6.452-67.041-6.452-102.4 0-26.25 1.235-51.923 3.594-76.8h-129.45c-5.709 24.678-8.727 50.387-8.727 76.8 0 35.688 5.509 70.089 15.722 102.4h125.313zM322.087 358.4c12.547-61.994 32.463-116.447 57.576-159.012-73.799 31.281-134.238 87.932-170.378 159.012h112.802zM701.913 358.4h112.802c-36.139-71.081-96.578-127.731-170.378-159.012 25.112 42.566 45.028 97.018 57.576 159.012zM713.206 435.2c2.359 24.877 3.594 50.55 3.594 76.8 0 35.359-2.24 69.671-6.452 102.4h125.313c10.213-32.311 15.722-66.712 15.722-102.4 0-26.413-3.018-52.122-8.727-76.8h-129.45zM696.212 691.2c-12.528 51.419-30.28 96.81-51.874 133.412 64.705-27.426 119.139-74.355 155.931-133.412h-104.056zM403.174 691.2c22.577 95.277 62.874 158.72 108.826 158.72s86.249-63.443 108.826-158.72h-217.652zM389.768 614.4h244.464c3.749-31.537 5.768-65.070 5.768-99.84 0-27.341-1.249-53.918-3.605-79.36h-248.79c-2.356 25.442-3.605 52.019-3.605 79.36 0 34.77 2.020 68.303 5.768 99.84zM398.695 358.4h226.611c-21.439-106.558-64.134-179.2-113.305-179.2s-91.867 72.642-113.305 179.2zM512 921.6c-226.193 0-409.6-183.407-409.6-409.6 0-226.24 183.407-409.6 409.6-409.6 226.24 0 409.6 183.36 409.6 409.6 0 226.193-183.36 409.6-409.6 409.6z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["discover"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":86,"id":38,"name":"discover","prevSize":32,"code":59727},"setIdx":3,"setId":5,"iconIdx":78},{"icon":{"paths":["M530.684 472.361c17.254-61.004 73.343-105.703 139.871-105.703s122.617 44.699 139.871 105.703h71.536c21.892 0 39.639 17.747 39.639 39.639s-17.747 39.639-39.639 39.639h-71.536c-17.254 61.004-73.343 105.703-139.871 105.703s-122.617-44.699-139.871-105.703h-388.645c-21.892 0-39.639-17.747-39.639-39.639s17.747-39.639 39.639-39.639h388.645zM670.555 578.065c36.486 0 66.065-29.578 66.065-66.065s-29.578-66.065-66.065-66.065c-36.486 0-66.065 29.578-66.065 66.065s29.578 66.065 66.065 66.065zM406.297 630.916c66.528 0 122.617 44.699 139.871 105.703h335.794c21.892 0 39.639 17.747 39.639 39.639s-17.747 39.639-39.639 39.639h-335.794c-17.254 61.004-73.343 105.703-139.871 105.703s-122.617-44.699-139.871-105.703h-124.387c-21.892 0-39.639-17.747-39.639-39.639s17.747-39.639 39.639-39.639h124.387c17.254-61.004 73.343-105.703 139.871-105.703zM406.297 842.323c36.486 0 66.065-29.578 66.065-66.065s-29.578-66.065-66.065-66.065c-36.486 0-66.065 29.578-66.065 66.065s29.578 66.065 66.065 66.065zM353.445 102.4c66.528 0 122.617 44.699 139.871 105.703h388.645c21.892 0 39.639 17.747 39.639 39.639s-17.747 39.639-39.639 39.639h-388.645c-17.254 61.004-73.343 105.703-139.871 105.703s-122.617-44.699-139.871-105.703h-71.536c-21.892 0-39.639-17.747-39.639-39.639s17.747-39.639 39.639-39.639h71.536c17.254-61.004 73.343-105.703 139.871-105.703zM353.445 313.806c36.486 0 66.065-29.578 66.065-66.065s-29.578-66.065-66.065-66.065c-36.486 0-66.065 29.578-66.065 66.065s29.578 66.065 66.065 66.065z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["customize"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":87,"id":37,"name":"customize","prevSize":32,"code":59728},"setIdx":3,"setId":5,"iconIdx":79},{"icon":{"paths":["M102.436 291.481c-0.631-14.945 6.986-30.23 22.636-36.505l374.511-150.166c8.022-3.216 16.878-3.212 24.897 0.011l369.772 148.636c15.151 3.68 27.348 17.918 27.348 36.276v396.377c0 14.076-7.511 26.944-19.403 33.24l-374.143 198.101c-9.405 5.13-21.009 5.858-31.74 0.176-0.112-0.056-0.222-0.116-0.332-0.176l-374.143-198.101c-11.892-6.296-19.403-19.164-19.403-33.24v-394.628zM231.134 291.933l280.884 128.051 280.542-127.895-280.557-112.774-280.868 112.619zM547.125 486.752v337.49l304.261-161.1v-316.94l-15.771 7.19-288.49 133.36zM172.65 346.475v316.667l304.261 161.1v-337.466l-304.261-140.301z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["cube"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":88,"id":36,"name":"cube","prevSize":32,"code":59729},"setIdx":3,"setId":5,"iconIdx":80},{"icon":{"paths":["M512 447.614l210.621-210.621c17.78-17.78 46.606-17.78 64.386 0v0c17.78 17.78 17.78 46.606 0 64.386l-210.621 210.621 210.621 210.621c17.78 17.78 17.78 46.606 0 64.386v0c-17.78 17.78-46.606 17.78-64.386 0l-210.621-210.621-210.621 210.621c-17.78 17.78-46.606 17.78-64.386 0v0c-17.78-17.78-17.78-46.606 0-64.386l210.621-210.621-210.621-210.621c-17.78-17.78-17.78-46.606 0-64.386v0c17.78-17.78 46.606-17.78 64.386 0l210.621 210.621z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["cross"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":89,"id":35,"name":"cross","prevSize":32,"code":59730},"setIdx":3,"setId":5,"iconIdx":81},{"icon":{"paths":["M153.6 153.6v576.366c0 28.277 22.923 51.2 51.2 51.2h133.781v89.234c0 28.277 22.923 51.2 51.2 51.2h429.419c28.277 0 51.2-22.923 51.2-51.2v-351.93c0-13.473-5.31-26.403-14.78-35.986l-221.761-224.436c-9.619-9.735-22.735-15.214-36.42-15.214h-24.857l-123.655-125.211c-9.62-9.741-22.739-15.223-36.429-15.223h-207.696c-28.277 0-51.2 22.923-51.2 51.2zM248.568 172.57h145.906c6.846 0 13.408 2.742 18.218 7.615l61.85 62.649h-135.961v468.114h-90.013c-14.138 0-25.6-11.462-25.6-25.6v-487.178c0-14.138 11.462-25.6 25.6-25.6zM433.548 313.051h110.658c14.138 0 25.6 11.462 25.6 25.6v182.81c0 14.138 11.462 25.6 25.6 25.6h180.026c14.138 0 25.6 11.462 25.6 25.6v253.074c0 14.138-11.462 25.6-25.6 25.6h-341.884c-14.138 0-25.6-11.462-25.6-25.6v-487.085c0-14.138 11.462-25.6 25.6-25.6zM647.937 371.541l95.417 96.585c1.987 2.012 1.968 5.253-0.044 7.241-0.958 0.947-2.251 1.478-3.598 1.478h-95.417c-2.828 0-5.12-2.292-5.12-5.12v-96.585c0-2.828 2.292-5.12 5.12-5.12 1.369 0 2.68 0.548 3.642 1.522z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["copy"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":90,"id":34,"name":"copy","prevSize":32,"code":59731},"setIdx":3,"setId":5,"iconIdx":82},{"icon":{"paths":["M181.677 299.476v265.758c0 36.491 29.713 66.232 66.374 66.232h527.897c36.726 0 66.374-29.67 66.374-66.232v-265.758c0-36.491-29.713-66.232-66.374-66.232h-527.897c-36.726 0-66.374 29.67-66.374 66.232zM102.4 299.476c0-80.618 65.21-145.876 145.652-145.876h527.897c80.379 0 145.652 65.334 145.652 145.876v265.758c0 80.618-65.21 145.876-145.652 145.876h-527.897c-80.379 0-145.652-65.334-145.652-145.876v-265.758zM340.232 830.578v0c0-21.993 17.829-39.822 39.822-39.822h263.891c21.993 0 39.822 17.829 39.822 39.822v0c0 21.993-17.829 39.822-39.822 39.822h-263.891c-21.993 0-39.822-17.829-39.822-39.822z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["computer"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":91,"id":33,"name":"computer","prevSize":32,"code":59732},"setIdx":3,"setId":5,"iconIdx":83},{"icon":{"paths":["M448.953 104.267c3.112-1.171 6.459-1.823 9.925-1.866h105.986c13.206-0.126 24.859 8.613 28.435 21.327l22.541 79.214c5.495 1.863 10.893 3.889 16.211 6.056 8.48 3.267 16.857 6.885 25.115 10.967l71.744-39.959c11.519-6.461 25.938-4.401 35.187 5.027l74.944 74.944c2.209 2.266 3.991 4.82 5.328 7.553 4.372 8.465 4.433 18.757-0.323 27.457l-40.062 71.725c6.617 13.221 12.412 27.104 17.235 41.325l49.353 14.166c1.121 0.265 2.216 0.594 3.283 0.982l26.416 7.517c12.713 3.577 21.453 15.229 21.327 28.435v105.986c-0.012 0.918-0.066 1.828-0.161 2.727-0.132 1.48-0.376 2.96-0.737 4.428-2.516 10.235-10.302 18.351-20.424 21.29l-78.983 22.371c-4.661 13.983-10.365 27.853-16.99 41.276l24.881 44.915c1.28 2.073 2.28 4.268 2.997 6.531l11.431 20.629c6.344 11.31 4.484 25.446-4.57 34.73l-72.429 72.429c-2.195 2.853-4.926 5.323-8.104 7.247-9.017 5.458-20.26 5.692-29.496 0.612l-71.788-40.041c-13.602 6.728-27.455 12.391-41.63 17.099l-6.044 21.069-16.361 57.764c-3.51 12.736-15.122 21.538-28.332 21.478h-106.018c-13.211 0.061-24.822-8.742-28.332-21.478l-19.784-69.849-2.577-8.984c-5.736-1.907-11.378-4.027-16.964-6.321-8.402-3.243-16.62-6.786-24.651-10.81l-39.595 21.941-31.885 17.81c-9.012 5.118-19.837 4.998-28.573 0.179-2.491-1.357-4.814-3.095-6.879-5.2l-74.944-74.944c-1.102-1.13-2.098-2.333-2.985-3.593-6.556-9.146-7.355-21.437-1.653-31.476l32.471-58.134 7.354-13.271c-6.703-13.371-12.5-27.189-17.365-41.585l-79.056-22.392c-12.555-3.68-21.139-15.25-21.021-28.332v-106.475c0.085-12.913 8.629-24.243 21.021-27.875l79.056-22.849c4.827-14.236 10.63-28.133 17.256-41.366l-40.039-71.683c-4.438-8.119-4.682-17.623-1.142-25.735 1.393-3.382 3.436-6.539 6.104-9.275l74.944-74.944c8.713-8.881 22.014-11.224 33.157-6.064 0.665 0.301 1.323 0.629 1.972 0.984l72.058 39.745c13.457-6.642 27.363-12.357 41.382-17.025l22.34-78.873c2.656-9.246 9.626-16.443 18.445-19.531zM777.457 572.567c3.652-4.403 8.577-7.714 14.244-9.384l71.411-20.357v-62.041l-5.361-1.511c-1.065-0.227-2.124-0.515-3.172-0.865l-10.15-2.889-52.405-14.769c-3.317-0.921-6.391-2.403-9.115-4.338-5.474-3.771-9.59-9.357-11.499-15.932-5.939-21.558-14.215-42.045-25.134-61.234-5.192-8.852-5.366-19.777-0.457-28.789l35.999-64.707-43.757-43.757-64.303 35.867c-2.389 1.314-4.915 2.269-7.503 2.868-7.16 1.773-14.836 0.796-21.427-2.93-12.746-7.252-26.064-13.54-39.887-18.685-7.025-2.548-14.144-4.804-21.335-6.78-3.065-0.851-5.923-2.181-8.488-3.905-5.768-3.77-10.11-9.519-12.087-16.327l-20.107-70.831h-61.858l-20.248 71.029c-2.902 9.843-10.75 17.446-20.68 20.034-21.289 5.849-41.628 14.483-61.071 25.527-2.615 1.438-5.394 2.447-8.239 3.028-6.963 1.548-14.363 0.518-20.746-3.090l-37.47-20.994-26.929-14.811-43.622 43.622 21.999 39.999 13.821 24.843c1.956 3.59 3.105 7.485 3.451 11.43 0.592 5.962-0.65 12.065-3.727 17.436-8.467 14.906-15.328 30.149-20.704 46.044-1.652 4.923-3.173 9.908-4.566 14.951-2.649 9.813-10.207 17.555-19.968 20.433l-71.411 20.383v61.726l34.007 9.873 37.081 10.45c9.887 2.745 17.612 10.47 20.357 20.357 5.849 21.289 14.16 41.952 25.204 61.394 5.139 8.867 5.261 19.778 0.323 28.758l-20.483 36.577-15.641 28.115 43.88 43.88 64.4-36.069c8.932-5.050 19.857-5.050 28.789 0 6.009 3.419 12.146 6.624 18.403 9.596 13.962 6.514 28.424 11.754 43.187 15.81 9.887 2.745 17.612 10.47 20.357 20.357l20.034 71.088h62.041l6.578-23.074 13.561-48.080c1.747-6.016 5.341-11.205 10.134-14.932 3.129-2.475 6.78-4.321 10.765-5.36 7.389-2.030 14.625-4.357 21.736-6.991 13.565-5.095 26.64-11.29 39.163-18.414 8.932-5.050 19.857-5.050 28.789 0l15.143 8.485 49.549 27.357 43.61-43.61-36.101-64.89c-4.677-8.587-4.74-18.911-0.244-27.523 0.18-0.363 0.368-0.723 0.565-1.079 3.224-5.676 6.243-11.428 9.047-17.258 6.65-13.966 12.022-28.454 16.224-43.707 1.161-4.276 3.252-8.152 6.047-11.403zM466.144 357.634c14.499-4.319 29.841-6.64 45.704-6.64 14.901 0 29.342 2.048 43.056 5.876 25.934 7.136 50.404 20.855 70.704 41.155 17.869 17.869 30.638 38.967 38.307 61.451 5.693 16.432 8.788 34.054 8.788 52.372 0 22.987-4.874 44.881-13.64 64.699-7.785 17.793-18.937 34.443-33.455 48.961-11.806 11.806-25.021 21.385-39.115 28.739-22.334 11.78-47.74 18.456-74.645 18.456-28.401 0-55.133-7.44-78.343-20.469-12.696-7.061-24.623-15.969-35.38-26.726-12.399-12.399-22.342-26.352-29.83-41.245-11.061-21.789-17.302-46.401-17.302-72.414 0-20.811 3.995-40.726 11.256-59.015 7.82-19.992 19.779-38.711 35.876-54.808 19.599-19.599 43.082-33.062 68.019-40.391zM569.978 416.696c-16.89-10.293-36.78-16.209-58.13-16.209-19.935 0-38.597 5.158-54.733 14.221-8.575 4.873-16.656 10.978-23.993 18.315-9.811 9.811-17.419 20.952-22.824 32.827-6.307 14-9.812 29.567-9.812 45.999 0 11.865 1.827 23.279 5.217 33.978 5.262 16.307 14.401 31.667 27.418 44.684 15.358 15.358 33.978 25.318 53.566 29.881 8.078 1.844 16.499 2.818 25.16 2.818 9.391 0 18.499-1.145 27.194-3.303 18.855-4.762 36.733-14.56 51.569-29.396 11.347-11.347 19.748-24.475 25.202-38.458 4.78-12.454 7.397-26.006 7.397-40.205 0-19.452-4.911-37.692-13.569-53.556-4.986-9.051-11.329-17.57-19.029-25.27-6.371-6.371-13.303-11.813-20.633-16.326z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["cog"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":92,"id":32,"name":"cog","prevSize":32,"code":59733},"setIdx":3,"setId":5,"iconIdx":84},{"icon":{"paths":["M118.051 475.773l144.245-144.063c14.452-14.433 37.864-14.432 52.314 0.003v0c14.43 14.416 14.442 37.8 0.027 52.23-0.009 0.009-0.018 0.018-0.027 0.027l-128.16 128.029 128.16 128.029c14.43 14.416 14.442 37.8 0.027 52.23-0.009 0.009-0.018 0.018-0.027 0.027v0c-14.45 14.435-37.862 14.437-52.314 0.003l-144.245-144.063c-20.007-19.982-20.028-52.4-0.046-72.408 0.015-0.015 0.030-0.030 0.046-0.046zM607.804 154.853v0c19.741 5.277 31.466 25.558 26.189 45.299-0.003 0.011-0.006 0.023-0.009 0.034l-172.483 642.778c-5.299 19.747-25.595 31.465-45.346 26.182v0c-19.732-5.278-31.449-25.553-26.171-45.285 0.002-0.009 0.005-0.017 0.007-0.026l172.438-642.777c5.301-19.76 25.609-31.489 45.374-26.206zM709.395 331.733v0c14.45-14.435 37.862-14.437 52.314-0.003l144.24 144.059c20.007 19.982 20.028 52.4 0.046 72.408-0.017 0.017-0.033 0.033-0.050 0.050l-144.233 144.017c-14.454 14.432-37.866 14.429-52.317-0.006v0c-14.428-14.413-14.44-37.794-0.027-52.222 0.010-0.010 0.021-0.021 0.031-0.031l128.156-127.984-128.16-128.029c-14.43-14.416-14.442-37.8-0.027-52.23 0.009-0.009 0.018-0.018 0.027-0.027z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["code"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":93,"id":31,"name":"code","prevSize":32,"code":59734},"setIdx":3,"setId":5,"iconIdx":85},{"icon":{"paths":["M799.928 381.24c98.094 16.763 172.872 119.941 172.872 225.369 0 117.411-92.744 212.591-207.149 212.591v-78.095c72.379 0 131.053-60.216 131.053-134.496s-58.675-150.171-131.053-150.171h-38.048v-39.047c0-50.319-39.747-91.11-88.778-91.11-21.585 0-41.88 7.883-57.889 22.031l-30.189 26.68-24.581-32.176c-28.71-37.581-72.449-59.92-119.855-59.92-84.053 0-152.191 69.928-152.191 156.189 0 17.991 2.949 35.513 8.65 52.067l17.929 52.060h-64.627c-62.473 0-89.968 42.976-88.778 106.785s39.747 91.11 88.778 91.11h549.578v78.095h-549.578c-91.057 0-164.873-75.756-164.873-169.205 0-80.696 55.043-163.872 128.698-180.794-1.243-9.927-1.873-19.982-1.873-30.117 0-129.391 102.207-234.284 228.286-234.284 58.821 0 113.995 23.013 155.636 62.872 23.365-12.656 49.63-19.487 76.878-19.487 78.967 0 144.968 56.975 161.102 133.055zM476.137 464.902c0-17.468 14.16-31.628 31.628-31.628s31.628 14.16 31.628 31.628v58.489h58.497c17.472 0 31.636 14.164 31.636 31.636s-14.164 31.636-31.636 31.636h-58.497v58.489c0 17.468-14.16 31.628-31.628 31.628s-31.628-14.16-31.628-31.628v-58.489h-58.482c-17.472 0-31.636-14.164-31.636-31.636s14.164-31.636 31.636-31.636h58.482v-58.489z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["cloud-plus"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":94,"id":30,"name":"cloud-plus","prevSize":32,"code":59735},"setIdx":3,"setId":5,"iconIdx":86},{"icon":{"paths":["M512 102.4c226.27 0 409.6 183.33 409.6 409.6s-183.33 409.6-409.6 409.6c-226.27 0-409.6-183.33-409.6-409.6s183.33-409.6 409.6-409.6zM850.057 512c0-187.006-151.632-338.057-338.057-338.057-187.006 0-338.057 151.632-338.057 338.057 0 187.006 151.632 338.057 338.057 338.057 187.006 0 338.057-151.632 338.057-338.057zM552.606 517.066l98.098 72.79c17.476 12.968 21.132 37.648 8.164 55.124-0.089 0.12-0.178 0.239-0.269 0.358v0c-13.398 17.635-38.434 21.325-56.351 8.307l-118.92-86.409c-7.516-5.577-11.933-14.344-11.933-23.653v-245.889c0-22.426 18.18-40.606 40.606-40.606v0c22.426 0 40.606 18.18 40.606 40.606v219.373z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["clock"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":95,"id":29,"name":"clock","prevSize":32,"code":59736},"setIdx":3,"setId":5,"iconIdx":87},{"icon":{"paths":["M736.78 202.915c45.52 0 82.42 37.126 82.42 82.925v552.834c0 45.799-36.9 82.925-82.42 82.925h-449.561c-45.52 0-82.42-37.126-82.42-82.925v-552.834c0-45.799 36.9-82.925 82.42-82.925h130.008c-0.090-1.676-0.135-3.351-0.135-5.026 0-52.66 42.569-95.49 94.907-95.49s94.907 42.83 94.907 95.49c0 1.674-0.045 3.349-0.135 5.026h130.009zM512 152.658c-24.829 0-44.956 20.251-44.956 45.232s20.127 45.232 44.956 45.232c24.829 0 44.956-20.251 44.956-45.232s-20.127-45.232-44.956-45.232zM354.654 268.25h-67.434c-9.633 0-17.483 7.898-17.483 17.59v552.834c0 9.692 7.85 17.59 17.483 17.59h449.561c9.633 0 17.483-7.898 17.483-17.59v-552.834c0-9.692-7.85-17.59-17.483-17.59h-67.434v40.251c0 14.572-11.742 26.385-26.224 26.385h-262.244c-14.483 0-26.224-11.814-26.224-26.385v-40.251z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["clipboard"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":96,"id":28,"name":"clipboard","prevSize":32,"code":59737},"setIdx":3,"setId":5,"iconIdx":88},{"icon":{"paths":["M264.13 689.35v0c-12.944-11.048-14.639-30.434-3.811-43.561l280.254-339.75c46.923-56.885 129.865-64.397 185.893-16.573 55.77 47.603 62.97 132.445 16.209 189.134l-300.037 363.734c-68.327 82.833-190.011 93.519-271.49 23.986-81.547-69.59-92.015-193.601-23.527-276.629l326.064-395.286c89.948-109.044 250.098-123.151 357.296-31.637 107.294 91.596 121.308 254.442 31.346 363.502l-306.589 371.677c-10.596 12.846-29.6 14.669-42.446 4.073-0.13-0.108-0.26-0.216-0.389-0.326v0c-12.944-11.048-14.639-30.434-3.811-43.561l306.589-371.677c68.345-82.855 57.693-206.634-23.845-276.242-81.454-69.537-203.192-58.813-271.507 24.006l-326.064 395.286c-46.9 56.857-39.73 141.789 16.016 189.362 55.743 47.57 139.019 40.256 185.711-16.347l300.037-363.734c25.165-30.508 21.281-76.277-8.703-101.871-30.235-25.807-74.774-21.773-100.108 8.939l-280.254 339.75c-10.596 12.846-29.6 14.669-42.446 4.073-0.13-0.108-0.26-0.216-0.389-0.326z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["clip"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":97,"id":27,"name":"clip","prevSize":32,"code":59738},"setIdx":3,"setId":5,"iconIdx":89},{"icon":{"paths":["M512 921.6c-226.193 0-409.6-183.36-409.6-409.6s183.407-409.6 409.6-409.6c226.193 0 409.6 183.36 409.6 409.6s-183.407 409.6-409.6 409.6zM512 851.383c187.433 0 339.383-151.95 339.383-339.383s-151.95-339.383-339.383-339.383c-187.433 0-339.383 151.95-339.383 339.383s151.95 339.383 339.383 339.383zM547.792 563.291l80.305-80.305c13.715-13.715 35.952-13.715 49.667 0v0c13.715 13.715 13.715 35.952 0 49.667l-129.293 129.302c-19.995 19.995-52.413 19.995-72.408 0-0.001-0.001-0.003-0.003-0.004-0.004l-129.266-129.307c-13.709-13.713-13.713-35.941-0.009-49.658v0c13.693-13.706 35.904-13.716 49.609-0.023 0.006 0.006 0.011 0.011 0.017 0.017l81.165 81.201v-242.951c0-19.39 15.719-35.109 35.109-35.109v0c19.39 0 35.109 15.719 35.109 35.109v242.062z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["circled-arrow-down"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":98,"id":26,"name":"circled-arrow-down","prevSize":32,"code":59739},"setIdx":3,"setId":5,"iconIdx":90},{"icon":{"paths":["M512 921.6c-226.193 0-409.6-183.407-409.6-409.6 0-226.24 183.407-409.6 409.6-409.6 226.24 0 409.6 183.36 409.6 409.6 0 226.193-183.36 409.6-409.6 409.6z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["circle"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":99,"id":25,"name":"circle","prevSize":32,"code":59740},"setIdx":3,"setId":5,"iconIdx":91},{"icon":{"paths":["M512 921.6c-226.193 0-409.6-183.407-409.6-409.6 0-226.24 183.407-409.6 409.6-409.6 226.24 0 409.6 183.36 409.6 409.6 0 226.193-183.36 409.6-409.6 409.6zM475.623 513.887l-107.775-107.775c-11.659-11.659-11.659-30.563 0-42.222s30.563-11.659 42.222 0l107.775 107.775 107.775-107.775c11.659-11.659 30.563-11.659 42.222 0s11.659 30.563 0 42.222l-107.775 107.775 107.775 107.775c11.659 11.659 11.659 30.563 0 42.222s-30.563 11.659-42.222 0l-107.775-107.775-107.775 107.775c-11.659 11.659-30.563 11.659-42.222 0s-11.659-30.563 0-42.222l107.775-107.775zM512 851.383c187.433 0 339.383-151.95 339.383-339.383s-151.95-339.383-339.383-339.383c-187.433 0-339.383 151.95-339.383 339.383s151.95 339.383 339.383 339.383z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["circle-cross"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":100,"id":24,"name":"circle-cross","prevSize":32,"code":59741},"setIdx":3,"setId":5,"iconIdx":92},{"icon":{"paths":["M430.733 607.019l248.174-242.694c15.137-14.803 39.379-14.632 54.306 0.382 14.93 15.211 14.704 39.364-0.333 54.121l-270.787 265.759c-17.457 17.133-45.472 16.961-62.717-0.386l-114.626-115.298c-14.926-15.014-14.926-39.263 0-54.277 15.105-15.018 39.269-14.947 54.13 0l91.854 92.393zM512 921.6c-226.193 0-409.6-183.407-409.6-409.6 0-226.24 183.407-409.6 409.6-409.6 226.24 0 409.6 183.36 409.6 409.6 0 226.193-183.36 409.6-409.6 409.6zM512 851.383c187.433 0 339.383-151.95 339.383-339.383s-151.95-339.383-339.383-339.383c-187.433 0-339.383 151.95-339.383 339.383s151.95 339.383 339.383 339.383z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["checkmark-circled"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":101,"id":23,"name":"checkmark-circled","prevSize":32,"code":59742},"setIdx":3,"setId":5,"iconIdx":93},{"icon":{"paths":["M402.241 688.422l389.132-389.132c14.441-14.441 37.854-14.441 52.294 0v0c14.441 14.441 14.441 37.854 0 52.294l-408.299 408.299c-19.995 19.995-52.413 19.995-72.408 0l-171.436-171.436c-15.29-15.29-15.29-40.080 0-55.371v0c15.29-15.29 40.080-15.29 55.371 0l155.345 155.345z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["check"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":102,"id":22,"name":"check","prevSize":32,"code":59743},"setIdx":3,"setId":5,"iconIdx":94},{"icon":{"paths":["M172.192 806.879c-1.753 0.912-3.253 1.7-4.578 2.41 23.378 19.728 84.492 33.203 196.047 32.831l5.943-0c68.451 0 127.027-21.801 175.729-65.402l78.706 5.168c-32.607 31.619-49.869 48.22-51.786 49.803-52.616 43.442-123.449 67.577-202.649 67.577l-5.671 0.032-6.699 0c-136.95 0-222.963-18.909-249.539-75.336-14.428-30.613 1.439-48.51 37.772-67.626 24.169-12.773 24.606-13.408 20.758-21.754-2.23-5.305-4.163-9.569-8.543-18.995-16.964-36.242-23.235-54.989-23.235-80.395 0-43.195 10.472-84.864 30.015-122.108 10.746-18.442 29.443-48.938 54.204-61.082 0-1.302 13.676 61.082 13.676 59.997-4.346 6.059-8.904 12.78-13.676 20.163-24.761 36.112-26.943 64.99-26.943 103.030 0 14.972 4.334 27.305 17.854 56.249 5.229 11.287 6.997 15.182 9.089 20.209 16.231 34.899 4.636 61.658-24.761 82.359-6.556 4.617-11.96 7.723-21.713 12.869zM848.367 630.922c-1.774-0.959-3.814-2.034-6.289-3.322-11.28-5.952-17.509-9.532-25.058-14.848-33.726-23.75-46.973-54.324-28.286-94.515 2.332-5.613 4.375-10.115 10.412-23.145 15.698-33.609 20.736-47.942 20.736-65.422 0-132.445-107.986-240.215-240.702-240.215s-240.702 107.77-240.702 240.215c0 139.146 115.308 240.178 274.83 240.178l6.872 0c130.587 0.435 201.591-15.525 228.189-38.926zM847.938 544.158c-4.749 10.308-3.991 11.411 24.298 26.361 41.68 21.929 59.773 42.339 43.344 77.195-30.548 64.862-129.872 86.698-287.964 86.698h-7.717l-6.622-0.038c-196.405 0-339.44-128.159-339.44-304.704 0-168.061 136.964-304.742 305.341-304.742 168.384 0 305.379 136.688 305.379 304.742 0 29.238-7.227 50.846-26.812 92.685-5.065 10.9-7.304 15.839-9.807 21.804z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["chat"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":103,"id":21,"name":"chat","prevSize":32,"code":59744},"setIdx":3,"setId":5,"iconIdx":95},{"icon":{"paths":["M793.6 204.8c42.4 0 76.8 34.4 76.8 76.8v563.2c0 42.4-34.4 76.8-76.8 76.8h-563.2c-42.4 0-76.8-34.4-76.8-76.8v-563.2c0-42.4 34.4-76.8 76.8-76.8h76.8v-51.2c0-28.277 22.923-51.2 51.2-51.2s51.2 22.923 51.2 51.2v51.2h204.8v-51.2c0-28.277 22.923-51.2 51.2-51.2s51.2 22.923 51.2 51.2v51.2h76.8zM742.4 844.8c28.277 0 51.2-22.923 51.2-51.2v-435.2h-563.2v435.2c0 28.277 22.923 51.2 51.2 51.2h460.8zM322.56 460.8h71.68c8.483 0 15.36 6.877 15.36 15.36v71.68c0 8.483-6.877 15.36-15.36 15.36h-71.68c-8.483 0-15.36-6.877-15.36-15.36v-71.68c0-8.483 6.877-15.36 15.36-15.36zM322.56 614.4h71.68c8.483 0 15.36 6.877 15.36 15.36v71.68c0 8.483-6.877 15.36-15.36 15.36h-71.68c-8.483 0-15.36-6.877-15.36-15.36v-71.68c0-8.483 6.877-15.36 15.36-15.36zM476.16 460.8h71.68c8.483 0 15.36 6.877 15.36 15.36v71.68c0 8.483-6.877 15.36-15.36 15.36h-71.68c-8.483 0-15.36-6.877-15.36-15.36v-71.68c0-8.483 6.877-15.36 15.36-15.36zM476.16 614.4h71.68c8.483 0 15.36 6.877 15.36 15.36v71.68c0 8.483-6.877 15.36-15.36 15.36h-71.68c-8.483 0-15.36-6.877-15.36-15.36v-71.68c0-8.483 6.877-15.36 15.36-15.36zM629.76 460.8h71.68c8.483 0 15.36 6.877 15.36 15.36v71.68c0 8.483-6.877 15.36-15.36 15.36h-71.68c-8.483 0-15.36-6.877-15.36-15.36v-71.68c0-8.483 6.877-15.36 15.36-15.36zM629.76 614.4h71.68c8.483 0 15.36 6.877 15.36 15.36v71.68c0 8.483-6.877 15.36-15.36 15.36h-71.68c-8.483 0-15.36-6.877-15.36-15.36v-71.68c0-8.483 6.877-15.36 15.36-15.36z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["calendar"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":104,"id":20,"name":"calendar","prevSize":32,"code":59745},"setIdx":3,"setId":5,"iconIdx":96},{"icon":{"paths":["M538.229 742.4h-144.501c-28.277 0-51.2-22.923-51.2-51.2v-358.4c0-28.277 22.923-51.2 51.2-51.2h140.211c89.435 0 143.228 44.068 143.228 114.96 0 48.22-36.632 91.33-83.495 98.994v5.429c64.354 6.387 107.256 50.774 107.256 110.809 0 81.111-61.053 130.608-162.699 130.608zM416.452 342.274v134.44h87.785c65.344 0 99.336-23.311 99.336-67.060 0-42.472-32.012-67.38-86.795-67.38h-100.326zM416.452 681.726h106.926c66.664 0 101.976-26.185 101.976-75.044 0-48.22-36.632-73.447-106.266-73.447h-102.636v148.491z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["bold"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":105,"id":19,"name":"bold","prevSize":32,"code":59746},"setIdx":3,"setId":5,"iconIdx":97},{"icon":{"paths":["M728.623 590.439v-212.883c0-113.231-96.906-205.203-216.623-205.203s-216.623 91.972-216.623 205.203v212.883l-0.885 3.58-78.182 148.403h591.449l-79.136-151.982zM512 854.645c23.566 0 44.551-11.762 55.954-29.929h-111.909c11.403 18.167 32.388 29.929 55.954 29.929zM125.951 743.361l85.798-149.441v-218.453c0-155.152 134.566-280.747 300.251-280.747s300.251 125.595 300.251 280.747l-0.91 214.827 81.715 154.639c13.211 25.001 3.653 55.978-21.348 69.189-7.372 3.895-15.583 5.932-23.921 5.932h-186.412c-16.891 63.603-78.184 109.227-149.376 109.227s-132.485-45.624-149.376-109.227h-192.271c-28.277 0-51.2-22.923-51.2-51.2 0-8.945 2.344-17.735 6.798-25.492z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["bell"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":106,"id":18,"name":"bell","prevSize":32,"code":59747},"setIdx":3,"setId":5,"iconIdx":98},{"icon":{"paths":["M512 844.8c-78.029 0-149.658-27.085-206.438-72.038l467.2-467.2c44.954 56.781 72.038 128.41 72.038 206.438 0 183.808-148.992 332.8-332.8 332.8zM179.2 512c0-183.808 148.992-332.8 332.8-332.8 78.029 0 149.658 27.085 206.438 72.038l-467.2 467.2c-44.954-56.781-72.038-128.41-72.038-206.438zM512 102.4c-226.202 0-409.6 183.398-409.6 409.6s183.398 409.6 409.6 409.6c226.202 0 409.6-183.398 409.6-409.6s-183.398-409.6-409.6-409.6z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["ban"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":107,"id":17,"name":"ban","prevSize":32,"code":59748},"setIdx":3,"setId":5,"iconIdx":99},{"icon":{"paths":["M254.865 554.983l171.258 175.077c16.155 16.515 16.155 42.912 0 59.427v0c-15.702 16.052-41.444 16.336-57.497 0.634-0.214-0.209-0.425-0.42-0.634-0.634l-230.571-235.712c-19.466-19.9-19.466-51.705 0-71.605l243.364-248.79c15.103-15.44 39.864-15.713 55.304-0.61 0.205 0.201 0.409 0.404 0.61 0.61v0c15.539 15.885 15.539 41.275 0 57.16l-179.602 183.606h532.172c73.176 0 132.331 58.113 132.331 130.236v116.079c0 22.701-18.403 41.105-41.105 41.105v0c-22.701 0-41.105-18.403-41.105-41.105v-116.079c0-27.461-22.331-49.399-50.121-49.399h-534.404z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["back"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":108,"id":16,"name":"back","prevSize":32,"code":59749},"setIdx":3,"setId":5,"iconIdx":100},{"icon":{"paths":["M670.555 300.594v0c21.892 0 39.639 17.747 39.639 39.639v197.702c0 56.387 28.106 92.982 66.065 92.982 37.77 0 66.065-36.953 66.065-92.982v-25.934c0-182.432-147.89-330.323-330.323-330.323s-330.323 147.89-330.323 330.323c0 182.432 147.89 330.323 330.323 330.323 24.665 0 48.932-2.698 72.491-7.97 4.969-1.112 10.862-2.703 17.679-4.772l-0-0c20.847-6.329 43.096 4.186 51.441 24.311v0c7.896 19.041-1.14 40.877-20.18 48.773-0.979 0.406-1.976 0.77-2.986 1.092-10.574 3.362-19.5 5.876-26.778 7.54-29.799 6.815-60.501 10.304-91.666 10.304-226.216 0-409.6-183.384-409.6-409.6s183.384-409.6 409.6-409.6c226.216 0 409.6 183.384 409.6 409.6v28.635c-1.103 94.621-59.289 169.558-145.342 169.558-50.481 0-91.316-25.583-116.702-65.873-36.285 40.436-88.95 65.873-147.556 65.873-109.459 0-198.194-88.734-198.194-198.194s88.734-198.194 198.194-198.194c44.618 0 85.792 14.743 118.916 39.624v-13.198c0-21.892 17.747-39.639 39.639-39.639zM512 630.916c65.676 0 118.916-53.241 118.916-118.916s-53.241-118.916-118.916-118.916c-65.676 0-118.916 53.241-118.916 118.916s53.241 118.916 118.916 118.916z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["at"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":109,"id":15,"name":"at","prevSize":32,"code":59750},"setIdx":3,"setId":5,"iconIdx":101},{"icon":{"paths":["M512 611.902l228.206-227.278c14.56-14.501 38.103-14.501 52.663 0v0c14.483 14.424 14.531 37.859 0.107 52.342-0.035 0.036-0.071 0.071-0.107 0.107l-244.739 243.744c-19.978 19.897-52.282 19.897-72.26 0l-244.739-243.744c-14.483-14.424-14.531-37.859-0.107-52.342 0.035-0.036 0.071-0.071 0.107-0.107v0c14.56-14.501 38.103-14.501 52.663 0l228.206 227.278z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["arrow-down"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":110,"id":14,"name":"arrow-down","prevSize":32,"code":59751},"setIdx":3,"setId":5,"iconIdx":102},{"icon":{"paths":["M849.683 174.317h87.602c19.614 0 35.514 15.9 35.514 35.514v0c0 19.614-15.9 35.514-35.514 35.514h-87.602v87.602c0 19.614-15.9 35.514-35.514 35.514v0c-19.614 0-35.514-15.9-35.514-35.514v-87.602h-87.602c-19.614 0-35.514-15.9-35.514-35.514v0c0-19.614 15.9-35.514 35.514-35.514h87.602v-87.602c0-19.614 15.9-35.514 35.514-35.514v0c19.614 0 35.514 15.9 35.514 35.514v87.602zM615.288 456.065c-26.152 0-47.353-21.2-47.353-47.353s21.2-47.353 47.353-47.353c26.152 0 47.353 21.2 47.353 47.353s-21.2 47.353-47.353 47.353zM425.877 456.065c-26.152 0-47.353-21.2-47.353-47.353s21.2-47.353 47.353-47.353c26.152 0 47.353 21.2 47.353 47.353s-21.2 47.353-47.353 47.353zM520.583 136.435v71.029c-28.136 1.51-48.899 3.698-62.287 6.566-133.542 28.605-233.667 147.304-233.667 289.388 0 163.451 132.503 295.954 295.954 295.954 142.116 0 260.836-100.17 289.407-233.758 2.859-13.369 5.042-34.101 6.546-62.196h71.029c-1.4 30.22-3.438 52.58-6.116 67.078-31.519 170.646-181.098 299.904-360.866 299.904-202.679 0-366.983-164.304-366.983-366.983 0-178.815 127.891-327.76 297.193-360.355 15.063-2.9 38.326-5.109 69.79-6.628zM389.432 606.319v0c13.749-13.749 35.363-15.7 51.352-4.635 5.331 3.688 10.014 6.536 14.049 8.542 42.649 21.211 93.092 21.405 135.884 0.581 4.331-2.107 9.382-5.156 15.155-9.146l0 0c16.018-11.071 37.659-9.111 51.427 4.657v0c12.383 12.383 12.383 32.459 0 44.842-1.101 1.101-2.281 2.119-3.532 3.047-13.135 9.744-24.196 16.769-33.182 21.075-64.229 30.776-140.044 29.304-203.163-4.418-6.784-3.624-14.983-9.053-24.597-16.286l0.001-0.001c-14.14-10.638-16.979-30.725-6.341-44.865 0.902-1.199 1.887-2.333 2.947-3.393z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["add-reaction"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":111,"id":13,"name":"add-reaction","prevSize":32,"code":59649},"setIdx":3,"setId":5,"iconIdx":103},{"icon":{"paths":["M786.466 512l54.306 54.306c14.996 14.996 14.996 39.31 0 54.306s-39.31 14.996-54.306 0l-54.306-54.306-54.306 54.306c-14.996 14.996-39.31 14.996-54.306 0s-14.996-39.31 0-54.306l54.306-54.306-54.306-54.306c-14.996-14.996-14.996-39.31 0-54.306s39.31-14.996 54.306 0l54.306 54.306 54.306-54.306c14.996-14.996 39.31-14.996 54.306 0s14.996 39.31 0 54.306l-54.306 54.306zM192 363.273v297.454h86.142l10.572 21.377c1.038 2.1 3.898 7.013 8.633 13.789 8.247 11.802 18.498 23.692 30.766 34.773 26.202 23.666 57.348 40.098 94.287 46.786v-531.14c-38.525 6.518-70.099 22.994-95.922 46.772-20.207 18.606-32.373 36.945-37.196 47.609l-10.21 22.579h-87.073zM115.2 686.327v-348.654c0-28.277 22.923-51.2 51.2-51.2h65.398c9.929-15.34 23.961-32.669 42.657-49.885 47.565-43.798 109.679-70.188 186.344-70.188 21.208 0 38.4 17.192 38.4 38.4v614.4c0 21.208-17.192 38.4-38.4 38.4-74.44 0-135.902-26.351-184.163-69.939-19.215-17.354-33.789-34.802-44.168-50.134h-66.069c-28.277 0-51.2-22.923-51.2-51.2z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["Volume-disable"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":112,"id":12,"name":"Volume-disable","prevSize":32,"code":59752},"setIdx":3,"setId":5,"iconIdx":104},{"icon":{"paths":["M598.819 531.695l109.94-87.952 116.726-37.506c23.977-7.717 48.302-4.473 66.818 8.847 18.566 13.369 29.189 35.29 29.189 60.209v220.784c0 24.919-10.673 46.791-29.189 60.16-11.964 8.601-26.261 12.976-41.352 12.976-8.389 0-16.978-1.327-25.516-4.079l-152.153-48.954v51.819c0 28.277-22.923 51.2-51.2 51.2h-382.644l92.157-73.726h241.624c14.138 0 25.6-11.462 25.6-25.6v-188.179zM444.104 425.997h-241.641c-14.138 0-25.6 11.462-25.6 25.6v188.193l-74.463 59.57v-295.889c0-28.277 22.923-51.2 51.2-51.2h382.661l-92.157 73.726zM846.779 659.382l0.202-147.149c0.019-14.138-11.426-25.616-25.565-25.635-2.659-0.004-5.303 0.407-7.836 1.218l-140.298 44.887v105.968l140.059 45.047c13.459 4.329 27.88-3.073 32.209-16.532 0.811-2.522 1.226-5.154 1.229-7.803zM226.5 241.663c0-20.359 16.504-36.863 36.863-36.863h248.947c20.359 0 36.863 16.504 36.863 36.863s-16.504 36.863-36.863 36.863h-248.947c-20.359 0-36.863-16.504-36.863-36.863zM64.947 844.058c-13.246-16.554-10.565-40.713 5.99-53.959l0.003-0.002 708.040-566.432c16.558-13.246 40.719-10.563 53.967 5.994 13.246 16.554 10.565 40.713-5.99 53.959l-708.043 566.434c-16.558 13.246-40.719 10.563-53.967-5.994z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["Video-off"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":113,"id":11,"name":"Video-off","prevSize":32,"code":59753},"setIdx":3,"setId":5,"iconIdx":105},{"icon":{"paths":["M272.433 838.351l34.767-213.14-149.132-152.849c-15.798-16.192-15.479-42.124 0.713-57.922 6.123-5.974 13.962-9.881 22.418-11.173l204.228-31.203 89.495-190.668c9.612-20.478 34.004-29.287 54.482-19.675 8.653 4.062 15.613 11.022 19.675 19.675l89.495 190.668 204.228 31.203c22.362 3.417 37.72 24.314 34.304 46.676-1.292 8.456-5.199 16.295-11.173 22.418l-149.132 152.849 34.767 213.14c3.642 22.327-11.505 43.378-33.832 47.020-9.068 1.479-18.369-0.133-26.41-4.578l-179.325-99.129-179.325 99.129c-19.798 10.944-44.719 3.767-55.664-16.032-4.445-8.041-6.057-17.343-4.578-26.41z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["Star-filled"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":114,"id":10,"name":"Star-filled","prevSize":32,"code":59754},"setIdx":3,"setId":5,"iconIdx":106},{"icon":{"paths":["M315.97 527.941l-244.169-127.797c-30.836-16.139-26.016-61.689 7.515-71.017l809.701-225.253c32.369-9.005 59.876 24.965 44.339 54.754l-388.677 745.174c-16.096 30.859-61.652 26.103-71.027-7.414l-71.019-253.895 192.101-250.863-278.763 136.311z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["Send-active"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":115,"id":9,"name":"send1","prevSize":32,"code":59650},"setIdx":3,"setId":5,"iconIdx":107},{"icon":{"paths":["M587.366 294.4v0c0 21.208 17.192 38.4 38.4 38.4h170.803v243.302h-499.456l126.239-131.373c14.572-15.165 14.581-39.128 0.020-54.304v0c-13.821-14.405-36.702-14.878-51.107-1.057-0.353 0.338-0.698 0.684-1.037 1.036l-183.531 190.972c-19.047 19.819-19.045 51.142 0.004 70.959l183.524 190.927c13.835 14.394 36.72 14.846 51.113 1.010 0.351-0.338 0.696-0.683 1.033-1.034v0c14.562-15.177 14.556-39.14-0.014-54.31l-130.597-135.975h526.49c28.277 0 51.2-22.923 51.2-51.2v-294.554c0-28.277-22.923-51.2-51.2-51.2h-193.485c-21.208 0-38.4 17.192-38.4 38.4z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["Multiline"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":116,"id":8,"name":"Multiline","prevSize":32,"code":59755},"setIdx":3,"setId":5,"iconIdx":108},{"icon":{"paths":["M511.269 687.543h65.829c28.277 0 51.2 22.923 51.2 51.2v131.657c0 28.277-22.923 51.2-51.2 51.2h-131.657c-28.277 0-51.2-22.923-51.2-51.2v-274.286c0-14.138 11.462-25.6 25.6-25.6h91.429v117.029zM419.84 219.429c-14.138 0-25.6-11.462-25.6-25.6v-65.829c0-14.138 11.462-25.6 25.6-25.6h65.829c14.138 0 25.6 11.462 25.6 25.6v91.429h-91.429zM511.269 336.457v-117.029h91.429c14.138 0 25.6 11.462 25.6 25.6v65.829c0 14.138-11.462 25.6-25.6 25.6h-91.429zM419.84 453.486c-14.138 0-25.6-11.462-25.6-25.6v-65.829c0-14.138 11.462-25.6 25.6-25.6h91.429v117.029h-91.429zM511.269 570.514v-117.029h91.429c14.138 0 25.6 11.462 25.6 25.6v65.829c0 14.138-11.462 25.6-25.6 25.6h-91.429zM478.354 863.086h65.829c14.138 0 25.6-11.462 25.6-25.6v-65.829c0-14.138-11.462-25.6-25.6-25.6h-65.829c-14.138 0-25.6 11.462-25.6 25.6v65.829c0 14.138 11.462 25.6 25.6 25.6z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["Files-zip"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":117,"id":7,"name":"Files-zip","prevSize":32,"code":59756},"setIdx":3,"setId":5,"iconIdx":109},{"icon":{"paths":["M762.371 415.703c26.243-8.909 53.615-5.079 74.762 10.967 21.24 16.133 33.267 42.304 33.267 71.286v191.066c0 28.942-12.040 55.077-33.272 71.247-13.603 10.316-29.891 15.673-47.002 15.673-9.315 0-18.676-1.565-27.794-4.666l-95.568-70.287v67.011c0 28.277-22.923 51.2-51.2 51.2h-410.764c-28.277 0-51.2-22.923-51.2-51.2v-348.937c0-28.277 22.923-51.2 51.2-51.2h410.764c28.277 0 51.2 22.923 51.2 51.2v69.273l95.607-72.634zM306.614 204.8h207.127c28.277 0 51.2 22.923 51.2 51.2v8.658c0 28.277-22.923 51.2-51.2 51.2h-207.127c-28.277 0-51.2-22.923-51.2-51.2v-8.658c0-28.277 22.923-51.2 51.2-51.2z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["Files-video"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":118,"id":6,"name":"Files-video","prevSize":32,"code":59757},"setIdx":3,"setId":5,"iconIdx":110},{"icon":{"paths":["M870.138 150.751c-0.262-3.295-0.872-6.589-1.831-9.706-0.087-0.712-0.349-1.514-0.697-2.226 0.087-0.089 0.087-0.089 0-0.178-0.262-0.89-0.61-1.87-0.959-2.76-0.087-0.178-0.174-0.356-0.262-0.534-0.523-1.425-1.221-2.849-1.918-4.274-0.872-1.603-1.744-3.206-2.79-4.808-0.785-1.247-1.656-2.404-2.528-3.562-0.436-0.534-0.872-1.069-1.308-1.603-0.436-0.623-0.959-1.247-1.569-1.781-0.697-0.712-1.395-1.425-2.092-2.137-0.785-0.801-1.569-1.514-2.441-2.226-0.785-0.712-1.656-1.336-2.528-1.959-0.436-0.445-0.872-0.801-1.308-0.979-0.436-0.356-0.959-0.712-1.395-0.979 0 0-0.087-0.178-0.174-0.089-0.697-0.534-1.395-1.069-2.18-1.425-0.087-0.089-0.262-0.178-0.349-0.178-0.959-0.534-1.918-1.069-2.877-1.514-1.831-0.979-3.836-1.781-5.841-2.493-0.697-0.267-1.395-0.445-2.092-0.712-2.703-0.89-5.58-1.425-8.457-1.781-0.61-0.089-1.308-0.178-2.005-0.178-1.395-0.178-2.964-0.267-4.446-0.267-1.831 0-3.574 0.089-5.318 0.267-1.482 0.178-2.877 0.356-4.272 0.623-1.046 0.178-2.092 0.445-3.139 0.712l-400.421 102.489c-0.959 0.267-1.918 0.445-2.877 0.801-1.133 0.267-2.267 0.623-3.313 0.979-0.349 0.089-0.61 0.178-0.785 0.267-1.221 0.445-2.441 0.979-3.662 1.514-5.492 2.493-10.462 5.877-14.734 10.062-0.959 0.89-1.918 1.87-2.703 2.849-0.785 0.89-1.569 1.781-2.267 2.671-0.697 0.801-1.395 1.692-1.918 2.671-2.005 2.849-3.749 5.877-5.056 9.171-0.61 1.336-1.133 2.671-1.569 4.096-0.523 1.336-0.872 2.76-1.221 4.185-0.349 1.158-0.61 2.315-0.785 3.473-0.174 0.979-0.349 2.048-0.436 3.027-0.262 2.137-0.436 4.363-0.436 6.589v351.009c-16.39-6.055-34.088-9.261-52.483-9.261-86.658 0-157.1 72.036-157.1 160.545s70.442 160.456 157.1 160.456c84.827 0 153.961-69.009 156.838-155.025 0.174-1.781 0.262-3.562 0.262-5.432v-460.622l297.984-76.221v282.535c-16.39-6.055-34.088-9.261-52.483-9.261-86.658 0-157.1 72.036-157.1 160.456 0 88.509 70.442 160.545 157.1 160.545 84.844 0 153.961-69.098 156.829-155.051 0.183-1.808 0.27-3.633 0.27-5.494v-502.205c0-1.692-0.087-3.473-0.262-5.075z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["Files-audio"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":119,"id":5,"name":"Files-audio","prevSize":32,"code":59758},"setIdx":3,"setId":5,"iconIdx":111},{"icon":{"paths":["M516.333 543.331c98.167 0 196.334 0 294.501 0 0.692 0 1.416 0 2.174 0v-0.001c16.019 0 29.005 12.986 29.005 29.005 0 0.81-0.034 1.619-0.102 2.426-16.192 192.934-179.943 346.664-376.779 346.664-207.415 0-378.093-170.699-378.093-378.093 0-193.91 149.176-355.712 338.083-375.96 19.856-2.128 37.677 12.243 39.805 32.098 0.137 1.28 0.206 2.566 0.206 3.854-0.001 0.858-0.001 1.681-0.001 2.47 0 95.446 0 190.891 0 286.337 0 28.277 22.923 51.2 51.2 51.2zM528.147 429.294c0-138.591 0-237.283 0-296.078 0-0.865 0-1.784 0-2.757h0.001c-0-14.921 12.096-27.017 27.017-27.017 0.694-0 1.388 0.027 2.080 0.080 89.608 6.919 174.258 45.618 238.256 109.597 62.121 62.139 100.425 143.748 108.934 230.474 1.813 18.478-11.697 34.927-30.175 36.74-1.091 0.107-2.186 0.161-3.283 0.161l-291.631-0.001c-28.277 0-51.2-22.923-51.2-51.199z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["File-keynote"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":120,"id":4,"name":"File-keynote","prevSize":32,"code":59759},"setIdx":3,"setId":5,"iconIdx":112},{"icon":{"paths":["M870.4 593.185h-251.079l-233.898-388.385h251.127l233.851 388.385zM369.040 242.949l125.516 218.472-215.393 374.724-125.563-218.329 215.44-374.867zM443.813 633.017h425.325l-125.563 237.383h-434.6l134.838-237.383z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["File-google-drive"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":121,"id":3,"name":"File-google-drive","prevSize":32,"code":59760},"setIdx":3,"setId":5,"iconIdx":113},{"icon":{"paths":["M962.166 471.314c14.179 25.106 14.179 56.265 0 81.371-90.173 159.672-258.39 266.514-450.166 266.514-191.696 0-359.95-106.767-450.166-266.513-14.179-25.107-14.179-56.266 0-81.373 90.173-159.672 258.39-266.514 450.166-266.514 191.696 0 359.951 106.767 450.166 266.514zM512 739.061c142.353 0 269.027-68.734 350.137-175.566 4.567-6.016 10.062-13.956 16.484-23.821 10.979-16.866 11.061-38.599 0.207-55.546-6.187-9.661-11.508-17.456-15.964-23.384-78.965-105.072-205.598-174.146-350.864-174.146-146.146 0-270.625 71.048-351.315 176.679-4.071 5.329-8.932 12.217-14.583 20.663-11.398 17.036-11.538 39.228-0.356 56.406l0.001-0c5.388 8.276 10.035 15.031 13.942 20.262 81.011 108.48 208.68 178.454 352.311 178.454zM512 665.6c-84.831 0-153.6-68.769-153.6-153.6s68.769-153.6 153.6-153.6c84.831 0 153.6 68.769 153.6 153.6s-68.769 153.6-153.6 153.6z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["Eye"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":122,"id":2,"name":"Eye","prevSize":32,"code":59761},"setIdx":3,"setId":5,"iconIdx":114},{"icon":{"paths":["M668.989 710.098v0c13.020 12.835 13.17 33.795 0.335 46.815-0.111 0.112-0.222 0.224-0.335 0.335l-123.486 121.732c-19.934 19.651-51.954 19.651-71.888 0l-123.486-121.732c-13.020-12.835-13.17-33.795-0.335-46.815 0.111-0.112 0.222-0.224 0.335-0.335v0c13.263-13.074 34.566-13.074 47.829 0l75.713 74.637v-270.995c0-18.678 15.142-33.82 33.82-33.82v0c18.678 0 33.82 15.142 33.82 33.82v275.073l79.849-78.715c13.263-13.074 34.566-13.074 47.829 0zM767.936 278.65c87.194 14.313 153.664 89.026 153.664 179.043 0 100.249-82.439 181.517-184.132 181.517h-79.628c-18.413 0-33.34-14.927-33.34-33.34v0c0-18.413 14.927-33.34 33.34-33.34h79.628c64.337 0 116.492-51.414 116.492-114.837s-52.155-114.837-116.492-114.837h-33.82v-33.34c0-42.964-35.331-77.793-78.914-77.793-19.186 0-37.227 6.731-51.457 18.811l-26.834 22.78-21.85-27.473c-25.52-32.088-64.399-51.162-106.538-51.162-74.713 0-135.281 59.707-135.281 133.359 0 15.361 2.621 30.322 7.689 44.456l15.937 44.45h-57.446c-43.583 0-78.914 34.829-78.914 77.793s35.331 77.793 78.914 77.793h97.949c18.413 0 33.34 14.927 33.34 33.34v0c0 18.413-14.927 33.34-33.34 33.34h-97.949c-80.94 0-146.554-64.683-146.554-144.472 0-68.9 48.927-126.535 114.399-140.984-1.105-8.476-1.665-17.061-1.665-25.715 0-110.478 90.851-200.039 202.921-200.039 52.286 0 101.329 19.65 138.343 53.682 20.769-10.806 44.116-16.638 68.336-16.638 70.193 0 128.861 48.647 143.202 113.606z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["Download"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":123,"id":1,"name":"Download","prevSize":32,"code":59762},"setIdx":3,"setId":5,"iconIdx":115},{"icon":{"paths":["M260.157 613.052c-12.627 8.1-29.429 4.431-37.53-8.196-2.808-4.377-4.3-9.467-4.3-14.667v-214.704c0-153.693 132.622-278.221 295.987-278.221 62.748 0 122.548 18.415 172.447 52.124 3.216 2.173 6.867 4.84 10.961 8.005 14.4 11.136 17.048 31.836 5.914 46.237-1.352 1.749-2.877 3.358-4.551 4.801-15.788 13.614-38.896 14.489-55.668 2.11-3.572-2.636-6.742-4.823-9.503-6.557-35.289-22.169-76.503-34.17-119.6-34.17-120.367 0-217.856 93.052-217.856 207.718v169.102c0 26.876-13.68 51.905-36.301 66.417zM812.546 744.975l-80.299-154.522v-128.551c0-16.386 7.137-31.96 19.548-42.659l16.174-13.942c10.733-9.252 26.933-8.051 36.185 2.682 4.015 4.658 6.223 10.602 6.223 16.752l-0.601 166.793 76.24 143.151c14.621 27.454 4.219 61.563-23.235 76.184-8.15 4.34-17.241 6.61-26.474 6.61h-175.36c-15.767 63.489-76.199 109.261-146.608 109.261-70.367 0-130.792-45.779-146.557-109.261h-30.326c-12.611 0-22.835-10.223-22.835-22.835 0-6.642 2.892-12.955 7.922-17.292l21.686-18.702c10.226-8.819 23.279-13.67 36.782-13.67h431.534zM122.16 849.45c-15.019-18.454-12.949-45.44 4.71-61.387l711.173-642.24c16.736-15.114 42.556-13.799 57.67 2.937 0.696 0.784 0.696 0.784 1.365 1.592 15.019 18.454 12.949 45.44-4.71 61.387l-711.173 642.24c-16.736 15.114-42.556 13.799-57.67-2.937-0.696-0.784-0.696-0.784-1.365-1.592zM512 854.645c23.566 0 44.551-11.762 55.954-29.929h-111.909c11.403 18.167 32.388 29.929 55.954 29.929z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["Bell-off"],"colorPermutations":{"2552552551291162451":[{}],"15816216812032062091":[{}]}},"attrs":[{}],"properties":{"order":124,"id":0,"name":"Bell-off","prevSize":32,"code":59763},"setIdx":3,"setId":5,"iconIdx":116}],"height":1024,"metadata":{"name":"custom"},"preferences":{"showGlyphs":true,"showQuickUse":true,"showQuickUse2":true,"showSVGs":true,"fontPref":{"prefix":"icon-","metadata":{"fontFamily":"custom","majorVersion":1,"minorVersion":0},"metrics":{"emSize":1024,"baseline":6.25,"whitespace":50},"embed":false,"noie8":true,"ie7":false,"showSelector":false,"showMetrics":false,"showMetadata":false,"showVersion":false},"imagePref":{"prefix":"icon-","png":true,"useClassSelector":true,"color":0,"bgColor":16777215,"classSelector":".icon","name":"icomoon","height":32,"columns":16,"margin":16},"historySize":50,"showCodes":true,"gridSize":16}} \ No newline at end of file diff --git a/app/presentation/RoomItem.js b/app/presentation/RoomItem.js deleted file mode 100644 index 8b5cdab94..000000000 --- a/app/presentation/RoomItem.js +++ /dev/null @@ -1,273 +0,0 @@ -import React from 'react'; -import moment from 'moment'; -import PropTypes from 'prop-types'; -import { View, Text, StyleSheet } from 'react-native'; -import { connect } from 'react-redux'; -import { emojify } from 'react-emojione'; -import { RectButton } from 'react-native-gesture-handler'; - -import Avatar from '../containers/Avatar'; -import Status from '../containers/Status'; -import RoomTypeIcon from '../containers/RoomTypeIcon'; -import I18n from '../i18n'; -import { isIOS } from '../utils/deviceInfo'; - -const styles = StyleSheet.create({ - container: { - flexDirection: 'row', - alignItems: 'center', - marginHorizontal: 15 - }, - centerContainer: { - flex: 1, - height: '100%' - }, - title: { - flex: 1, - fontSize: 18, - color: '#0C0D0F', - fontWeight: '400', - marginRight: 5, - paddingTop: 0, - paddingBottom: 0 - }, - alert: { - fontWeight: '600' - }, - row: { - flex: 1, - flexDirection: 'row', - alignItems: 'flex-start' - }, - titleContainer: { - width: '100%', - marginTop: isIOS ? 5 : 2, - flexDirection: 'row', - alignItems: 'center', - justifyContent: 'center' - }, - date: { - fontSize: 14, - color: '#9EA2A8', - fontWeight: 'normal', - paddingTop: 0, - paddingBottom: 0 - }, - updateAlert: { - color: '#1D74F5', - fontWeight: '700' - }, - unreadNumberContainer: { - minWidth: 23, - padding: 3, - borderRadius: 4, - backgroundColor: '#1D74F5', - alignItems: 'center', - justifyContent: 'center' - }, - unreadNumberText: { - color: '#fff', - overflow: 'hidden', - fontSize: 14, - fontWeight: '500', - letterSpacing: 0.56 - }, - status: { - marginRight: 7, - marginTop: 3 - }, - markdownText: { - flex: 1, - color: '#9EA2A8', - fontSize: 15, - fontWeight: 'normal' - }, - markdownTextAlert: { - color: '#0C0D0F' - }, - avatar: { - marginRight: 10 - } -}); - -const renderNumber = (unread, userMentions) => { - if (!unread || unread <= 0) { - return; - } - - if (unread >= 1000) { - unread = '999+'; - } - - if (userMentions > 0) { - unread = `@ ${ unread }`; - } - - return ( - - { unread } - - ); -}; - -const attrs = ['name', 'unread', 'userMentions', 'StoreLastMessage', 'alert', 'type']; -@connect(state => ({ - user: { - id: state.login.user && state.login.user.id, - username: state.login.user && state.login.user.username, - token: state.login.user && state.login.user.token - }, - StoreLastMessage: state.settings.Store_Last_Message, - baseUrl: state.settings.Site_Url || state.server ? state.server.server : '' -})) -export default class RoomItem extends React.Component { - static propTypes = { - type: PropTypes.string.isRequired, - name: PropTypes.string.isRequired, - baseUrl: PropTypes.string.isRequired, - StoreLastMessage: PropTypes.bool, - _updatedAt: PropTypes.string, - lastMessage: PropTypes.object, - favorite: PropTypes.bool, - alert: PropTypes.bool, - unread: PropTypes.number, - userMentions: PropTypes.number, - id: PropTypes.string, - onPress: PropTypes.func, - user: PropTypes.shape({ - id: PropTypes.string, - username: PropTypes.string, - token: PropTypes.string - }), - avatarSize: PropTypes.number, - testID: PropTypes.string, - height: PropTypes.number - } - - static defaultProps = { - avatarSize: 48 - } - - shouldComponentUpdate(nextProps) { - const { lastMessage, _updatedAt } = this.props; - const oldlastMessage = lastMessage; - const newLastmessage = nextProps.lastMessage; - - if (oldlastMessage && newLastmessage && oldlastMessage.ts !== newLastmessage.ts) { - return true; - } - if (_updatedAt && nextProps._updatedAt && nextProps._updatedAt !== _updatedAt) { - return true; - } - // eslint-disable-next-line react/destructuring-assignment - return attrs.some(key => nextProps[key] !== this.props[key]); - } - - get avatar() { - const { - type, name, avatarSize, baseUrl, user - } = this.props; - return ; - } - - get lastMessage() { - const { - lastMessage, type, StoreLastMessage, user - } = this.props; - - if (!StoreLastMessage) { - return ''; - } - if (!lastMessage) { - return I18n.t('No_Message'); - } - - let prefix = ''; - const me = lastMessage.u.username === user.username; - - if (!lastMessage.msg && Object.keys(lastMessage.attachments).length > 0) { - if (me) { - return I18n.t('User_sent_an_attachment', { user: I18n.t('You') }); - } else { - return I18n.t('User_sent_an_attachment', { user: lastMessage.u.username }); - } - } - - if (me) { - prefix = I18n.t('You_colon'); - } else if (type !== 'd') { - prefix = `${ lastMessage.u.username }: `; - } - - let msg = `${ prefix }${ lastMessage.msg.replace(/[\n\t\r]/igm, '') }`; - msg = emojify(msg, { output: 'unicode' }); - return msg; - } - - get type() { - const { type, id } = this.props; - if (type === 'd') { - return ; - } - return ; - } - - formatDate = date => moment(date).calendar(null, { - lastDay: `[${ I18n.t('Yesterday') }]`, - sameDay: 'h:mm A', - lastWeek: 'dddd', - sameElse: 'MMM D' - }) - - render() { - const { - favorite, unread, userMentions, name, _updatedAt, alert, testID, height, onPress - } = this.props; - - const date = this.formatDate(_updatedAt); - - let accessibilityLabel = name; - if (unread === 1) { - accessibilityLabel += `, ${ unread } ${ I18n.t('alert') }`; - } else if (unread > 1) { - accessibilityLabel += `, ${ unread } ${ I18n.t('alerts') }`; - } - - if (userMentions > 0) { - accessibilityLabel += `, ${ I18n.t('you_were_mentioned') }`; - } - - if (date) { - accessibilityLabel += `, ${ I18n.t('last_message') } ${ date }`; - } - - return ( - - - {this.avatar} - - - {this.type} - { name } - {_updatedAt ? { date } : null} - - - - {this.lastMessage} - - {renderNumber(unread, userMentions)} - - - - - ); - } -} diff --git a/app/presentation/RoomItem/LastMessage.js b/app/presentation/RoomItem/LastMessage.js new file mode 100644 index 000000000..9b3e59b56 --- /dev/null +++ b/app/presentation/RoomItem/LastMessage.js @@ -0,0 +1,61 @@ +import React from 'react'; +import { Text } from 'react-native'; +import { emojify } from 'react-emojione'; +import PropTypes from 'prop-types'; +import _ from 'lodash'; + +import I18n from '../../i18n'; +import styles from './styles'; + +const formatMsg = ({ + lastMessage, type, showLastMessage, username +}) => { + if (!showLastMessage) { + return ''; + } + if (!lastMessage) { + return I18n.t('No_Message'); + } + + let prefix = ''; + const isLastMessageSentByMe = lastMessage.u.username === username; + + if (!lastMessage.msg && Object.keys(lastMessage.attachments).length) { + const user = isLastMessageSentByMe ? I18n.t('You') : lastMessage.u.username; + return I18n.t('User_sent_an_attachment', { user }); + } + + if (isLastMessageSentByMe) { + prefix = I18n.t('You_colon'); + } else if (type !== 'd') { + prefix = `${ lastMessage.u.username }: `; + } + + let msg = `${ prefix }${ lastMessage.msg.replace(/[\n\t\r]/igm, '') }`; + if (msg) { + msg = emojify(msg, { output: 'unicode' }); + } + return msg; +}; + +const arePropsEqual = (oldProps, newProps) => _.isEqual(oldProps, newProps); + +const LastMessage = React.memo(({ + lastMessage, type, showLastMessage, username, alert +}) => ( + + {formatMsg({ + lastMessage, type, showLastMessage, username + })} + +), arePropsEqual); + +LastMessage.propTypes = { + lastMessage: PropTypes.object, + type: PropTypes.string, + showLastMessage: PropTypes.bool, + username: PropTypes.string, + alert: PropTypes.bool +}; + +export default LastMessage; diff --git a/app/presentation/RoomItem/TypeIcon.js b/app/presentation/RoomItem/TypeIcon.js new file mode 100644 index 000000000..8a8c3ef53 --- /dev/null +++ b/app/presentation/RoomItem/TypeIcon.js @@ -0,0 +1,21 @@ +import React from 'react'; +import PropTypes from 'prop-types'; + +import Status from '../../containers/Status'; +import RoomTypeIcon from '../../containers/RoomTypeIcon'; +import styles from './styles'; + +const TypeIcon = React.memo(({ type, id, prid }) => { + if (type === 'd') { + return ; + } + return ; +}); + +TypeIcon.propTypes = { + type: PropTypes.string, + id: PropTypes.string, + prid: PropTypes.string +}; + +export default TypeIcon; diff --git a/app/presentation/RoomItem/UnreadBadge.js b/app/presentation/RoomItem/UnreadBadge.js new file mode 100644 index 000000000..eb6a72bad --- /dev/null +++ b/app/presentation/RoomItem/UnreadBadge.js @@ -0,0 +1,29 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { View, Text } from 'react-native'; + +import styles from './styles'; + +const UnreadBadge = React.memo(({ unread, userMentions, type }) => { + if (!unread || unread <= 0) { + return; + } + if (unread >= 1000) { + unread = '999+'; + } + const mentioned = userMentions > 0 && type !== 'd'; + + return ( + + { unread } + + ); +}); + +UnreadBadge.propTypes = { + unread: PropTypes.number, + userMentions: PropTypes.number, + type: PropTypes.string +}; + +export default UnreadBadge; diff --git a/app/presentation/RoomItem/index.js b/app/presentation/RoomItem/index.js new file mode 100644 index 000000000..335d1ef68 --- /dev/null +++ b/app/presentation/RoomItem/index.js @@ -0,0 +1,120 @@ +import React from 'react'; +import moment from 'moment'; +import PropTypes from 'prop-types'; +import { View, Text } from 'react-native'; +import { connect } from 'react-redux'; +import { RectButton } from 'react-native-gesture-handler'; + +import Avatar from '../../containers/Avatar'; +import I18n from '../../i18n'; +import styles, { ROW_HEIGHT } from './styles'; +import UnreadBadge from './UnreadBadge'; +import TypeIcon from './TypeIcon'; +import LastMessage from './LastMessage'; + +export { ROW_HEIGHT }; + +const attrs = ['name', 'unread', 'userMentions', 'showLastMessage', 'alert', 'type']; +@connect(state => ({ + userId: state.login.user && state.login.user.id, + username: state.login.user && state.login.user.username, + token: state.login.user && state.login.user.token +})) +export default class RoomItem extends React.Component { + static propTypes = { + type: PropTypes.string.isRequired, + name: PropTypes.string.isRequired, + baseUrl: PropTypes.string.isRequired, + showLastMessage: PropTypes.bool, + _updatedAt: PropTypes.string, + lastMessage: PropTypes.object, + alert: PropTypes.bool, + unread: PropTypes.number, + userMentions: PropTypes.number, + id: PropTypes.string, + prid: PropTypes.string, + onPress: PropTypes.func, + userId: PropTypes.string, + username: PropTypes.string, + token: PropTypes.string, + avatarSize: PropTypes.number, + testID: PropTypes.string, + height: PropTypes.number + } + + static defaultProps = { + avatarSize: 48 + } + + shouldComponentUpdate(nextProps) { + const { lastMessage, _updatedAt } = this.props; + const oldlastMessage = lastMessage; + const newLastmessage = nextProps.lastMessage; + + if (oldlastMessage && newLastmessage && oldlastMessage.ts !== newLastmessage.ts) { + return true; + } + if (_updatedAt && nextProps._updatedAt && nextProps._updatedAt !== _updatedAt) { + return true; + } + // eslint-disable-next-line react/destructuring-assignment + return attrs.some(key => nextProps[key] !== this.props[key]); + } + + formatDate = date => moment(date).calendar(null, { + lastDay: `[${ I18n.t('Yesterday') }]`, + sameDay: 'h:mm A', + lastWeek: 'dddd', + sameElse: 'MMM D' + }) + + render() { + const { + unread, userMentions, name, _updatedAt, alert, testID, height, type, avatarSize, baseUrl, userId, username, token, onPress, id, prid, showLastMessage, lastMessage + } = this.props; + + const date = this.formatDate(_updatedAt); + + let accessibilityLabel = name; + if (unread === 1) { + accessibilityLabel += `, ${ unread } ${ I18n.t('alert') }`; + } else if (unread > 1) { + accessibilityLabel += `, ${ unread } ${ I18n.t('alerts') }`; + } + + if (userMentions > 0) { + accessibilityLabel += `, ${ I18n.t('you_were_mentioned') }`; + } + + if (date) { + accessibilityLabel += `, ${ I18n.t('last_message') } ${ date }`; + } + + return ( + + + + + + + { name } + {_updatedAt ? { date } : null} + + + + + + + + + ); + } +} diff --git a/app/presentation/RoomItem/styles.js b/app/presentation/RoomItem/styles.js new file mode 100644 index 000000000..87fb92c94 --- /dev/null +++ b/app/presentation/RoomItem/styles.js @@ -0,0 +1,97 @@ +import { StyleSheet, PixelRatio } from 'react-native'; + +import sharedStyles from '../../views/Styles'; +import { + COLOR_SEPARATOR, COLOR_PRIMARY, COLOR_WHITE, COLOR_UNREAD, COLOR_TEXT +} from '../../constants/colors'; + +export const ROW_HEIGHT = 75 * PixelRatio.getFontScale(); + +export default StyleSheet.create({ + container: { + flexDirection: 'row', + alignItems: 'center', + marginLeft: 14, + height: ROW_HEIGHT + }, + centerContainer: { + flex: 1, + paddingVertical: 10, + paddingRight: 14, + borderBottomWidth: StyleSheet.hairlineWidth, + borderColor: COLOR_SEPARATOR + }, + title: { + flex: 1, + fontSize: 17, + lineHeight: 20, + ...sharedStyles.textColorNormal, + ...sharedStyles.textMedium + }, + alert: { + ...sharedStyles.textSemibold + }, + row: { + flex: 1, + flexDirection: 'row', + alignItems: 'flex-start' + }, + titleContainer: { + width: '100%', + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'center' + }, + date: { + fontSize: 13, + marginLeft: 4, + ...sharedStyles.textColorDescription, + ...sharedStyles.textRegular + }, + updateAlert: { + color: COLOR_PRIMARY, + ...sharedStyles.textSemibold + }, + unreadNumberContainer: { + minWidth: 21, + height: 21, + paddingVertical: 3, + paddingHorizontal: 5, + borderRadius: 10.5, + backgroundColor: COLOR_UNREAD, + alignItems: 'center', + justifyContent: 'center', + marginLeft: 10 + }, + unreadMentionedContainer: { + backgroundColor: COLOR_PRIMARY + }, + unreadText: { + color: COLOR_TEXT, + overflow: 'hidden', + fontSize: 13, + ...sharedStyles.textMedium, + letterSpacing: 0.56, + textAlign: 'center' + }, + unreadMentionedText: { + color: COLOR_WHITE + }, + status: { + marginRight: 7, + marginTop: 3 + }, + markdownText: { + flex: 1, + fontSize: 14, + lineHeight: 17, + ...sharedStyles.textRegular, + ...sharedStyles.textColorDescription + }, + markdownTextAlert: { + ...sharedStyles.textColorNormal + }, + avatar: { + marginRight: 10 + } +}); diff --git a/app/presentation/UserItem.js b/app/presentation/UserItem.js index dc01e6736..c767b4465 100644 --- a/app/presentation/UserItem.js +++ b/app/presentation/UserItem.js @@ -6,13 +6,14 @@ import PropTypes from 'prop-types'; import Avatar from '../containers/Avatar'; import Touch from '../utils/touch'; -import { isIOS } from '../utils/deviceInfo'; import { CustomIcon } from '../lib/Icons'; +import sharedStyles from '../views/Styles'; +import { COLOR_PRIMARY, COLOR_WHITE } from '../constants/colors'; const styles = StyleSheet.create({ button: { height: 54, - backgroundColor: '#fff' + backgroundColor: COLOR_WHITE }, container: { flexDirection: 'row' @@ -23,23 +24,23 @@ const styles = StyleSheet.create({ }, textContainer: { flex: 1, - flexDirection: 'column' + flexDirection: 'column', + justifyContent: 'center' }, name: { - fontSize: 18, - color: '#0C0D0F', - marginTop: isIOS ? 6 : 3, - marginBottom: 1, - textAlign: 'left' + fontSize: 17, + ...sharedStyles.textMedium, + ...sharedStyles.textColorNormal }, username: { fontSize: 14, - color: '#9EA2A8' + ...sharedStyles.textRegular, + ...sharedStyles.textColorDescription }, icon: { marginHorizontal: 15, alignSelf: 'center', - color: '#1D74F5' + color: COLOR_PRIMARY } }); @@ -48,7 +49,7 @@ const UserItem = ({ }) => ( - + {name} @{username} diff --git a/app/push/index.js b/app/push/index.js index c67f3d2de..d78af4c7b 100644 --- a/app/push/index.js +++ b/app/push/index.js @@ -4,7 +4,7 @@ import PushNotification from './push'; import store from '../lib/createStore'; import { deepLinkingOpen } from '../actions/deepLinking'; -const onNotification = (notification) => { +export const onNotification = (notification) => { if (notification) { const data = notification.getData(); if (data) { @@ -31,13 +31,11 @@ const onNotification = (notification) => { } }; -const getDeviceToken = () => PushNotification.getDeviceToken(); -const setBadgeCount = count => PushNotification.setBadgeCount(count); -const initializePushNotifications = () => { - PushNotification.configure({ +export const getDeviceToken = () => PushNotification.getDeviceToken(); +export const setBadgeCount = count => PushNotification.setBadgeCount(count); +export const initializePushNotifications = () => { + setBadgeCount(); + return PushNotification.configure({ onNotification }); - setBadgeCount(); }; - -export { initializePushNotifications, getDeviceToken, setBadgeCount }; diff --git a/app/push/push.android.js b/app/push/push.android.js index d3351ac67..d83184594 100644 --- a/app/push/push.android.js +++ b/app/push/push.android.js @@ -25,12 +25,7 @@ class PushNotification { this.onRegister = params.onRegister; this.onNotification = params.onNotification; NotificationsAndroid.refreshToken(); - - PendingNotifications.getInitialNotification() - .then((notification) => { - this.onNotification(notification); - }) - .catch(e => console.warn(e)); + return PendingNotifications.getInitialNotification(); } } diff --git a/app/push/push.ios.js b/app/push/push.ios.js index 0c1415715..56cfa3e9f 100644 --- a/app/push/push.ios.js +++ b/app/push/push.ios.js @@ -30,6 +30,7 @@ class PushNotification { this.onNotification = params.onNotification; NotificationsIOS.consumeBackgroundQueue(); + return Promise.resolve(); } } export default new PushNotification(); diff --git a/app/reducers/activeUsers.js b/app/reducers/activeUsers.js deleted file mode 100644 index 71aa7c4a4..000000000 --- a/app/reducers/activeUsers.js +++ /dev/null @@ -1,15 +0,0 @@ -import * as types from '../actions/actionsTypes'; - -const initialState = {}; - -export default (state = initialState, action) => { - switch (action.type) { - case types.ACTIVE_USERS.SET: - return { - ...state, - ...action.data - }; - default: - return state; - } -}; diff --git a/app/reducers/index.js b/app/reducers/index.js index c29361b9c..ed4abc562 100644 --- a/app/reducers/index.js +++ b/app/reducers/index.js @@ -3,15 +3,12 @@ import settings from './reducers'; import login from './login'; import meteor from './connect'; import messages from './messages'; -import room from './room'; import rooms from './rooms'; import server from './server'; import selectedUsers from './selectedUsers'; import createChannel from './createChannel'; import app from './app'; import customEmojis from './customEmojis'; -import activeUsers from './activeUsers'; -import roles from './roles'; import sortPreferences from './sortPreferences'; export default combineReducers({ @@ -23,10 +20,7 @@ export default combineReducers({ selectedUsers, createChannel, app, - room, rooms, customEmojis, - activeUsers, - roles, sortPreferences }); diff --git a/app/reducers/messages.js b/app/reducers/messages.js index 787efb549..ea9163474 100644 --- a/app/reducers/messages.js +++ b/app/reducers/messages.js @@ -1,11 +1,10 @@ import * as types from '../actions/actionsTypes'; const initialState = { - isFetching: false, - failure: false, message: {}, actionMessage: {}, replyMessage: {}, + replying: false, editing: false, showActions: false, showErrorActions: false, @@ -14,23 +13,6 @@ const initialState = { export default function messages(state = initialState, action) { switch (action.type) { - case types.MESSAGES.REQUEST: - return { - ...state, - isFetching: true - }; - case types.MESSAGES.SUCCESS: - return { - ...state, - isFetching: false - }; - case types.LOGIN.FAILURE: - return { - ...state, - isFetching: false, - failure: true, - errorMessage: action.err - }; case types.MESSAGES.ACTIONS_SHOW: return { ...state, @@ -83,12 +65,14 @@ export default function messages(state = initialState, action) { replyMessage: { ...action.message, mention: action.mention - } + }, + replying: true }; case types.MESSAGES.REPLY_CANCEL: return { ...state, - replyMessage: {} + replyMessage: {}, + replying: false }; case types.MESSAGES.SET_INPUT: return { diff --git a/app/reducers/roles.js b/app/reducers/roles.js deleted file mode 100644 index f0e964e6c..000000000 --- a/app/reducers/roles.js +++ /dev/null @@ -1,15 +0,0 @@ -import * as types from '../actions/actionsTypes'; - -const initialState = {}; - -export default (state = initialState, action) => { - switch (action.type) { - case types.ROLES.SET: - return { - ...state, - ...action.data - }; - default: - return state; - } -}; diff --git a/app/reducers/room.js b/app/reducers/room.js deleted file mode 100644 index 03b1fa898..000000000 --- a/app/reducers/room.js +++ /dev/null @@ -1,37 +0,0 @@ -import * as types from '../actions/actionsTypes'; - -const initialState = { - usersTyping: [] -}; - -export default function room(state = initialState, action) { - switch (action.type) { - case types.ROOM.OPEN: - return { - ...initialState, - ...action.room, - lastOpen: new Date() - }; - case types.ROOM.CLOSE: - return { - ...initialState - }; - case types.ROOM.SET_LAST_OPEN: - return { - ...state, - lastOpen: action.date - }; - case types.ROOM.ADD_USER_TYPING: - return { - ...state, - usersTyping: [...state.usersTyping.filter(user => user !== action.username), action.username] - }; - case types.ROOM.REMOVE_USER_TYPING: - return { - ...state, - usersTyping: [...state.usersTyping.filter(user => user !== action.username)] - }; - default: - return state; - } -} diff --git a/app/reducers/server.js b/app/reducers/server.js index a423033e2..a2a04bd94 100644 --- a/app/reducers/server.js +++ b/app/reducers/server.js @@ -5,6 +5,7 @@ const initialState = { connected: false, failure: false, server: '', + version: null, loading: true, adding: false }; @@ -29,6 +30,7 @@ export default function server(state = initialState, action) { return { ...state, server: action.server, + version: action.version, connecting: true, connected: false, loading: true @@ -37,6 +39,7 @@ export default function server(state = initialState, action) { return { ...state, server: action.server, + version: action.version, connecting: false, connected: true, loading: false diff --git a/app/sagas/deepLinking.js b/app/sagas/deepLinking.js index 837e0e342..de7bed594 100644 --- a/app/sagas/deepLinking.js +++ b/app/sagas/deepLinking.js @@ -1,7 +1,7 @@ import { AsyncStorage } from 'react-native'; import { delay } from 'redux-saga'; import { - takeLatest, take, select, put, all, race + takeLatest, take, select, put, all } from 'redux-saga/effects'; import Navigation from '../lib/Navigation'; @@ -10,28 +10,25 @@ import { selectServerRequest } from '../actions/server'; import database from '../lib/realm'; import RocketChat from '../lib/rocketchat'; import EventEmitter from '../utils/events'; +import { appStart } from '../actions'; const roomTypes = { channel: 'c', direct: 'd', group: 'p' }; const navigate = function* navigate({ params }) { + yield put(appStart('inside')); if (params.rid) { const canOpenRoom = yield RocketChat.canOpenRoom(params); if (canOpenRoom) { const [type, name] = params.path.split('/'); + yield Navigation.navigate('RoomsListView'); Navigation.navigate('RoomView', { rid: params.rid, name, t: roomTypes[type] }); } } }; const handleOpen = function* handleOpen({ params }) { - const isReady = yield select(state => state.app.ready); - - if (!isReady) { - yield take(types.APP.READY); - } - if (!params.host) { return; } @@ -54,29 +51,28 @@ const handleOpen = function* handleOpen({ params }) { // if deep link is from same server if (server === host) { if (user) { - yield race({ - typing: take(types.SERVER.SELECT_SUCCESS), - timeout: delay(3000) - }); + const connected = yield select(state => state.server.connected); + if (!connected) { + yield put(selectServerRequest(host)); + yield take(types.SERVER.SELECT_SUCCESS); + } yield navigate({ params }); + } else { + yield put(appStart('outside')); } } else { - // if deep link is from a different server - const result = yield RocketChat.testServer(server); - if (!result.success) { - return; - } - // search if deep link's server already exists const servers = yield database.databases.serversDB.objects('servers').filtered('id = $0', host); // TODO: need better test if (servers.length && user) { yield put(selectServerRequest(host)); - yield race({ - typing: take(types.SERVER.SELECT_SUCCESS), - timeout: delay(3000) - }); + yield take(types.SERVER.SELECT_SUCCESS); yield navigate({ params }); } else { + // if deep link is from a different server + const result = yield RocketChat.getServerInfo(server); + if (!result.success) { + return; + } Navigation.navigate('OnboardingView', { previousServer: server }); yield delay(1000); EventEmitter.emit('NewServer', { server: host }); diff --git a/app/sagas/init.js b/app/sagas/init.js index 41421c8eb..1b458e6e5 100644 --- a/app/sagas/init.js +++ b/app/sagas/init.js @@ -9,6 +9,7 @@ import { APP } from '../actions/actionsTypes'; import RocketChat from '../lib/rocketchat'; import log from '../utils/log'; import Navigation from '../lib/Navigation'; +import database from '../lib/realm'; const restore = function* restore() { try { @@ -27,7 +28,8 @@ const restore = function* restore() { ]); yield put(actions.appStart('outside')); } else if (server) { - yield put(selectServerRequest(server)); + const serverObj = database.databases.serversDB.objectForPrimaryKey('servers', server); + yield put(selectServerRequest(server, serverObj && serverObj.version)); } yield put(actions.appReady({})); diff --git a/app/sagas/messages.js b/app/sagas/messages.js index 38bda9c26..0fb79a32a 100644 --- a/app/sagas/messages.js +++ b/app/sagas/messages.js @@ -4,8 +4,6 @@ import { takeLatest, put, call } from 'redux-saga/effects'; import Navigation from '../lib/Navigation'; import { MESSAGES } from '../actions/actionsTypes'; import { - messagesSuccess, - messagesFailure, deleteSuccess, deleteFailure, editSuccess, @@ -25,19 +23,6 @@ const editMessage = message => RocketChat.editMessage(message); const toggleStarMessage = message => RocketChat.toggleStarMessage(message); const togglePinMessage = message => RocketChat.togglePinMessage(message); -const get = function* get({ room }) { - try { - if (room.lastOpen) { - yield RocketChat.loadMissedMessages(room); - } else { - yield RocketChat.loadMessagesForRoom(room); - } - yield put(messagesSuccess()); - } catch (err) { - yield put(messagesFailure(err)); - } -}; - const handleDeleteRequest = function* handleDeleteRequest({ message }) { try { yield call(deleteMessage, message); @@ -97,7 +82,6 @@ const handleReplyBroadcast = function* handleReplyBroadcast({ message }) { }; const root = function* root() { - yield takeLatest(MESSAGES.REQUEST, get); yield takeLatest(MESSAGES.DELETE_REQUEST, handleDeleteRequest); yield takeLatest(MESSAGES.EDIT_REQUEST, handleEditRequest); yield takeLatest(MESSAGES.TOGGLE_STAR_REQUEST, handleToggleStarRequest); diff --git a/app/sagas/room.js b/app/sagas/room.js index f508db2eb..0319b26e4 100644 --- a/app/sagas/room.js +++ b/app/sagas/room.js @@ -1,122 +1,30 @@ import { Alert } from 'react-native'; import { - put, call, takeLatest, take, select, race, fork, cancel, takeEvery + call, takeLatest, take, select } from 'redux-saga/effects'; import { delay } from 'redux-saga'; -import EJSON from 'ejson'; import Navigation from '../lib/Navigation'; import * as types from '../actions/actionsTypes'; -import { addUserTyping, removeUserTyping } from '../actions/room'; -import { messagesRequest, editCancel, replyCancel } from '../actions/messages'; import RocketChat from '../lib/rocketchat'; -import database from '../lib/realm'; import log from '../utils/log'; import I18n from '../i18n'; - -let sub; -let thread; - -const cancelTyping = function* cancelTyping(username) { - while (true) { - const { typing, timeout } = yield race({ - typing: take(types.ROOM.SOMEONE_TYPING), - timeout: call(delay, 5000) - }); - if (timeout || (typing.username === username && !typing.typing)) { - return yield put(removeUserTyping(username)); - } - } -}; - -const usersTyping = function* usersTyping({ rid }) { - while (true) { - const { _rid, username, typing } = yield take(types.ROOM.SOMEONE_TYPING); - if (_rid === rid) { - yield (typing ? put(addUserTyping(username)) : put(removeUserTyping(username))); - if (typing) { - yield fork(cancelTyping, username); - } - } - } -}; -const handleMessageReceived = function* handleMessageReceived({ message }) { - try { - const room = yield select(state => state.room); - - if (message.rid === room.rid) { - database.write(() => { - database.create('messages', EJSON.fromJSONValue(message), true); - }); - - if (room._id) { - RocketChat.readMessages(room.rid); - } - } - } catch (e) { - console.warn('handleMessageReceived', e); - } -}; - -let opened = false; - -const watchRoomOpen = function* watchRoomOpen({ room }) { - try { - if (opened) { - return; - } - opened = true; - - const auth = yield select(state => state.login.isAuthenticated); - if (!auth) { - yield take(types.LOGIN.SUCCESS); - } - - yield put(messagesRequest({ ...room })); - - if (room._id) { - RocketChat.readMessages(room.rid); - } - - sub = yield RocketChat.subscribeRoom(room); - - thread = yield fork(usersTyping, { rid: room.rid }); - yield race({ - open: take(types.ROOM.OPEN), - close: take(types.ROOM.CLOSE) - }); - opened = false; - cancel(thread); - sub.stop(); - yield put(editCancel()); - yield put(replyCancel()); - } catch (e) { - log('watchRoomOpen', e); - } -}; - -const watchuserTyping = function* watchuserTyping({ status }) { +const watchUserTyping = function* watchUserTyping({ rid, status }) { const auth = yield select(state => state.login.isAuthenticated); if (!auth) { yield take(types.LOGIN.SUCCESS); } - const room = yield select(state => state.room); - - if (!room) { - return; - } - try { - yield RocketChat.emitTyping(room.rid, status); + yield RocketChat.emitTyping(rid, status); if (status) { yield call(delay, 5000); - yield RocketChat.emitTyping(room.rid, false); + yield RocketChat.emitTyping(rid, false); } } catch (e) { - log('watchuserTyping', e); + log('watchUserTyping', e); } }; @@ -147,9 +55,7 @@ const handleEraseRoom = function* handleEraseRoom({ rid, t }) { }; const root = function* root() { - yield takeLatest(types.ROOM.USER_TYPING, watchuserTyping); - yield takeEvery(types.ROOM.OPEN, watchRoomOpen); - yield takeEvery(types.ROOM.MESSAGE_RECEIVED, handleMessageReceived); + yield takeLatest(types.ROOM.USER_TYPING, watchUserTyping); yield takeLatest(types.ROOM.LEAVE, handleLeaveRoom); yield takeLatest(types.ROOM.ERASE, handleEraseRoom); }; diff --git a/app/sagas/selectServer.js b/app/sagas/selectServer.js index c4b1b59dd..7f19cad2b 100644 --- a/app/sagas/selectServer.js +++ b/app/sagas/selectServer.js @@ -5,15 +5,37 @@ import Navigation from '../lib/Navigation'; import { SERVER } from '../actions/actionsTypes'; import * as actions from '../actions'; import { serverFailure, selectServerRequest, selectServerSuccess } from '../actions/server'; -import { setRoles } from '../actions/roles'; import { setUser } from '../actions/login'; import RocketChat from '../lib/rocketchat'; import database from '../lib/realm'; import log from '../utils/log'; import I18n from '../i18n'; -const handleSelectServer = function* handleSelectServer({ server }) { +const getServerInfo = function* getServerInfo({ server }) { try { + const serverInfo = yield RocketChat.getServerInfo(server); + if (!serverInfo.success) { + Alert.alert(I18n.t('Oops'), I18n.t(serverInfo.message, serverInfo.messageOptions)); + yield put(serverFailure()); + return; + } + + database.databases.serversDB.write(() => { + database.databases.serversDB.create('servers', { id: server, version: serverInfo.version }, true); + }); + + return serverInfo; + } catch (e) { + log('getServerInfo', e); + } +}; + +const handleSelectServer = function* handleSelectServer({ server, version, fetchVersion }) { + try { + let serverInfo; + if (fetchVersion) { + serverInfo = yield getServerInfo({ server }); + } yield AsyncStorage.setItem('currentServer', server); const userStringified = yield AsyncStorage.getItem(`${ RocketChat.TOKEN_KEY }-${ server }`); @@ -24,19 +46,15 @@ const handleSelectServer = function* handleSelectServer({ server }) { yield put(actions.appStart('inside')); } else { RocketChat.connect({ server }); + yield put(actions.appStart('outside')); } const settings = database.objects('settings'); yield put(actions.setAllSettings(RocketChat.parseSettings(settings.slice(0, settings.length)))); const emojis = database.objects('customEmojis'); yield put(actions.setCustomEmojis(RocketChat.parseEmojis(emojis.slice(0, emojis.length)))); - const roles = database.objects('roles'); - yield put(setRoles(roles.reduce((result, role) => { - result[role._id] = role.description; - return result; - }, {}))); - yield put(selectServerSuccess(server)); + yield put(selectServerSuccess(server, fetchVersion ? serverInfo && serverInfo.version : version)); } catch (e) { log('handleSelectServer', e); } @@ -44,13 +62,9 @@ const handleSelectServer = function* handleSelectServer({ server }) { const handleServerRequest = function* handleServerRequest({ server }) { try { - const result = yield RocketChat.testServer(server); - if (!result.success) { - Alert.alert(I18n.t('Oops'), I18n.t(result.message, result.messageOptions)); - yield put(serverFailure()); - return; - } + const serverInfo = yield getServerInfo({ server }); + // TODO: cai aqui O.o const loginServicesLength = yield RocketChat.getLoginServices(server); if (loginServicesLength === 0) { Navigation.navigate('LoginView'); @@ -58,10 +72,7 @@ const handleServerRequest = function* handleServerRequest({ server }) { Navigation.navigate('LoginSignupView'); } - database.databases.serversDB.write(() => { - database.databases.serversDB.create('servers', { id: server }, true); - }); - yield put(selectServerRequest(server)); + yield put(selectServerRequest(server, serverInfo.version, false)); } catch (e) { yield put(serverFailure()); log('handleServerRequest', e); diff --git a/app/utils/touch/index.ios.js b/app/utils/touch/index.ios.js index f649b5f8a..493559503 100644 --- a/app/utils/touch/index.ios.js +++ b/app/utils/touch/index.ios.js @@ -1,10 +1,11 @@ import React from 'react'; import { TouchableHighlight } from 'react-native'; import PropTypes from 'prop-types'; +import { COLOR_WHITE } from '../../constants/colors'; const Touch = ({ children, onPress, ...props }) => ( ({ - appInit: () => dispatch(appInitAction()) -})) -export default class Loading extends React.PureComponent { - static propTypes = { - appInit: PropTypes.func - } - - constructor(props) { - super(props); - props.appInit(); - } - - render() { - return ( - - - {isAndroid ? : null} - - ); - } -} +export default React.memo(() => ( + + + {isAndroid ? : null} + +)); diff --git a/app/views/CreateChannelView.js b/app/views/CreateChannelView.js index 9be9b69f8..91f229221 100644 --- a/app/views/CreateChannelView.js +++ b/app/views/CreateChannelView.js @@ -20,6 +20,7 @@ import { showErrorAlert } from '../utils/info'; import { isAndroid } from '../utils/deviceInfo'; import { CustomHeaderButtons, Item } from '../containers/HeaderButton'; import StatusBar from '../containers/StatusBar'; +import { COLOR_TEXT_DESCRIPTION, COLOR_WHITE } from '../constants/colors'; const styles = StyleSheet.create({ container: { @@ -28,7 +29,7 @@ const styles = StyleSheet.create({ }, list: { width: '100%', - backgroundColor: '#FFFFFF' + backgroundColor: COLOR_WHITE }, separator: { marginLeft: 60 @@ -39,22 +40,23 @@ const styles = StyleSheet.create({ input: { height: 54, paddingHorizontal: 18, - color: '#9EA2A8', - backgroundColor: '#fff', - fontSize: 18 + fontSize: 17, + ...sharedStyles.textRegular, + ...sharedStyles.textColorNormal, + backgroundColor: COLOR_WHITE }, swithContainer: { height: 54, - backgroundColor: '#fff', + backgroundColor: COLOR_WHITE, alignItems: 'center', justifyContent: 'space-between', flexDirection: 'row', paddingHorizontal: 18 }, label: { - color: '#0C0D0F', - fontSize: 18, - fontWeight: '500' + fontSize: 17, + ...sharedStyles.textMedium, + ...sharedStyles.textColorNormal }, invitedHeader: { marginTop: 18, @@ -64,14 +66,15 @@ const styles = StyleSheet.create({ alignItems: 'center' }, invitedTitle: { - color: '#2F343D', - fontSize: 22, - fontWeight: 'bold', + fontSize: 18, + ...sharedStyles.textSemibold, + ...sharedStyles.textColorNormal, lineHeight: 41 }, invitedCount: { - color: '#9EA2A8', - fontSize: 15 + fontSize: 14, + ...sharedStyles.textRegular, + ...sharedStyles.textColorDescription } }); @@ -347,6 +350,7 @@ export default class CreateChannelView extends LoggedView { value={channelName} onChangeText={this.onChangeText} placeholder={I18n.t('Channel_Name')} + placeholderTextColor={COLOR_TEXT_DESCRIPTION} returnKeyType='done' testID='create-channel-name' autoCorrect={false} diff --git a/app/views/LegalView.js b/app/views/LegalView.js index 313e90cb8..11c0249eb 100644 --- a/app/views/LegalView.js +++ b/app/views/LegalView.js @@ -5,14 +5,16 @@ import { } from 'react-native'; import { SafeAreaView } from 'react-navigation'; import { RectButton } from 'react-native-gesture-handler'; +import { connect } from 'react-redux'; import sharedStyles from './Styles'; import scrollPersistTaps from '../utils/scrollPersistTaps'; import LoggedView from './View'; import I18n from '../i18n'; import DisclosureIndicator from '../containers/DisclosureIndicator'; -import { CloseModalButton } from '../containers/HeaderButton'; import StatusBar from '../containers/StatusBar'; +import { COLOR_SEPARATOR, COLOR_WHITE } from '../constants/colors'; +import openLink from '../utils/openLink'; const styles = StyleSheet.create({ container: { @@ -21,13 +23,13 @@ const styles = StyleSheet.create({ }, scroll: { marginTop: 35, - backgroundColor: '#fff', - borderColor: '#cbced1', + backgroundColor: COLOR_WHITE, + borderColor: COLOR_SEPARATOR, borderTopWidth: StyleSheet.hairlineWidth, borderBottomWidth: StyleSheet.hairlineWidth }, separator: { - backgroundColor: '#cbced1', + backgroundColor: COLOR_SEPARATOR, height: StyleSheet.hairlineWidth, width: '100%', marginLeft: 20 @@ -35,7 +37,7 @@ const styles = StyleSheet.create({ item: { width: '100%', height: 48, - backgroundColor: '#fff', + backgroundColor: COLOR_WHITE, paddingLeft: 20, paddingRight: 10, flexDirection: 'row', @@ -44,22 +46,24 @@ const styles = StyleSheet.create({ }, text: { ...sharedStyles.textMedium, - color: '#0c0d0f', + ...sharedStyles.textColorNormal, fontSize: 18 } }); const Separator = () => ; +@connect(state => ({ + server: state.server.server +})) /** @extends React.Component */ export default class LegalView extends LoggedView { - static navigationOptions = ({ navigation }) => ({ - headerLeft: , + static navigationOptions = () => ({ title: I18n.t('Legal') }) static propTypes = { - navigation: PropTypes.object + server: PropTypes.string } constructor(props) { @@ -67,8 +71,11 @@ export default class LegalView extends LoggedView { } onPressItem = ({ route }) => { - const { navigation } = this.props; - navigation.navigate(route); + const { server } = this.props; + if (!server) { + return; + } + openLink(`${ server }/${ route }`); } renderItem = ({ text, route, testID }) => ( @@ -83,9 +90,9 @@ export default class LegalView extends LoggedView { - {this.renderItem({ text: 'Terms_of_Service', route: 'TermsServiceView', testID: 'legal-terms-button' })} + {this.renderItem({ text: 'Terms_of_Service', route: 'terms-of-service', testID: 'legal-terms-button' })} - {this.renderItem({ text: 'Privacy_Policy', route: 'PrivacyPolicyView', testID: 'legal-privacy-button' })} + {this.renderItem({ text: 'Privacy_Policy', route: 'privacy-policy', testID: 'legal-privacy-button' })} ); diff --git a/app/views/LoginSignupView.js b/app/views/LoginSignupView.js index 5b6a36156..69a62c8e9 100644 --- a/app/views/LoginSignupView.js +++ b/app/views/LoginSignupView.js @@ -17,6 +17,7 @@ import Button from '../containers/Button'; import I18n from '../i18n'; import { LegalButton } from '../containers/HeaderButton'; import StatusBar from '../containers/StatusBar'; +import { COLOR_SEPARATOR, COLOR_BORDER } from '../constants/colors'; const styles = StyleSheet.create({ container: { @@ -32,7 +33,7 @@ const styles = StyleSheet.create({ serviceButtonContainer: { borderRadius: 2, borderWidth: 1, - borderColor: '#e1e5e8', + borderColor: COLOR_BORDER, width: '100%', height: 48, flexDirection: 'row', @@ -49,8 +50,8 @@ const styles = StyleSheet.create({ }, serviceText: { ...sharedStyles.textRegular, - fontSize: 16, - color: '#2f343d' + ...sharedStyles.textColorNormal, + fontSize: 16 }, serviceName: { ...sharedStyles.textBold @@ -72,7 +73,7 @@ const styles = StyleSheet.create({ separatorLine: { flex: 1, height: 1, - backgroundColor: '#e1e5e8' + backgroundColor: COLOR_SEPARATOR }, separatorLineLeft: { marginRight: 15 diff --git a/app/views/LoginView.js b/app/views/LoginView.js index beb2051ea..da1935417 100644 --- a/app/views/LoginView.js +++ b/app/views/LoginView.js @@ -18,6 +18,7 @@ import I18n from '../i18n'; import { loginRequest as loginRequestAction } from '../actions/login'; import { LegalButton } from '../containers/HeaderButton'; import StatusBar from '../containers/StatusBar'; +import { COLOR_PRIMARY } from '../constants/colors'; const styles = StyleSheet.create({ buttonsContainer: { @@ -31,12 +32,12 @@ const styles = StyleSheet.create({ }, dontHaveAccount: { ...sharedStyles.textRegular, - color: '#9ea2a8', + ...sharedStyles.textColorDescription, fontSize: 13 }, createAccount: { ...sharedStyles.textSemibold, - color: '#1d74f5', + color: COLOR_PRIMARY, fontSize: 13 }, loginTitle: { @@ -96,7 +97,7 @@ export default class LoginView extends LoggedView { componentWillReceiveProps(nextProps) { const { Site_Name, error } = this.props; - if (Site_Name && nextProps.Site_Name !== Site_Name) { + if (nextProps.Site_Name && nextProps.Site_Name !== Site_Name) { this.setTitle(nextProps.Site_Name); } else if (nextProps.failure && !equal(error, nextProps.error)) { if (nextProps.error && nextProps.error.error === 'totp-required') { diff --git a/app/views/MentionedMessagesView/index.js b/app/views/MentionedMessagesView/index.js index abd654b49..987e9da9d 100644 --- a/app/views/MentionedMessagesView/index.js +++ b/app/views/MentionedMessagesView/index.js @@ -16,7 +16,6 @@ import StatusBar from '../../containers/StatusBar'; @connect(state => ({ baseUrl: state.settings.Site_Url || state.server ? state.server.server : '', customEmojis: state.customEmojis, - room: state.room, user: { id: state.login.user && state.login.user.id, username: state.login.user && state.login.user.username, @@ -33,7 +32,7 @@ export default class MentionedMessagesView extends LoggedView { user: PropTypes.object, baseUrl: PropTypes.string, customEmojis: PropTypes.object, - room: PropTypes.object + navigation: PropTypes.object } constructor(props) { @@ -42,6 +41,8 @@ export default class MentionedMessagesView extends LoggedView { loading: false, messages: [] }; + this.rid = props.navigation.getParam('rid'); + this.t = props.navigation.getParam('t'); } componentDidMount() { @@ -71,10 +72,9 @@ export default class MentionedMessagesView extends LoggedView { this.setState({ loading: true }); try { - const { room } = this.props; const result = await RocketChat.getMessages( - room.rid, - room.t, + this.rid, + this.t, { 'mentions._id': { $in: [user.id] } }, messages.length ); @@ -93,7 +93,7 @@ export default class MentionedMessagesView extends LoggedView { renderEmpty = () => ( - {I18n.t('No_mentioned_messages')} + {I18n.t('No_mentioned_messages')} ) @@ -101,7 +101,6 @@ export default class MentionedMessagesView extends LoggedView { const { user, customEmojis, baseUrl } = this.props; return ( ); diff --git a/app/views/OnboardingView/index.js b/app/views/OnboardingView/index.js index b2305c2c1..b225e718e 100644 --- a/app/views/OnboardingView/index.js +++ b/app/views/OnboardingView/index.js @@ -18,6 +18,7 @@ import { isIOS, isNotch } from '../../utils/deviceInfo'; import EventEmitter from '../../utils/events'; import { CustomIcon } from '../../lib/Icons'; import StatusBar from '../../containers/StatusBar'; +import { COLOR_PRIMARY, COLOR_WHITE } from '../../constants/colors'; @connect(state => ({ currentServer: state.server.server, @@ -125,7 +126,7 @@ export default class OnboardingView extends LoggedView { ); @@ -144,7 +145,7 @@ export default class OnboardingView extends LoggedView {