├── .gitignore
├── .idea
├── codeStyles
│ └── Project.xml
├── kyo-rs.iml
├── markdown-navigator.xml
├── markdown-navigator
│ └── profiles_settings.xml
├── misc.xml
├── modules.xml
└── vcs.xml
├── Cargo.lock
├── Cargo.toml
├── LICENSE.txt
├── README.md
├── build.rs
├── resources
├── img
│ ├── background.jpg
│ ├── background.jpg.base64
│ └── button.svg
├── index.css
├── index.html
├── index.js
└── manifest.xml
└── src
├── cert.rs
├── hosts.rs
├── main.rs
└── platform_utils
├── mod.rs
├── nix.rs
└── win32.rs
/.gitignore:
--------------------------------------------------------------------------------
1 | /target
2 | **/*.rs.bk
3 |
--------------------------------------------------------------------------------
/.idea/codeStyles/Project.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/.idea/kyo-rs.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/markdown-navigator.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
--------------------------------------------------------------------------------
/.idea/markdown-navigator/profiles_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/Cargo.lock:
--------------------------------------------------------------------------------
1 | [[package]]
2 | name = "adler32"
3 | version = "1.0.3"
4 | source = "registry+https://github.com/rust-lang/crates.io-index"
5 |
6 | [[package]]
7 | name = "arrayvec"
8 | version = "0.4.7"
9 | source = "registry+https://github.com/rust-lang/crates.io-index"
10 | dependencies = [
11 | "nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
12 | ]
13 |
14 | [[package]]
15 | name = "backtrace"
16 | version = "0.3.9"
17 | source = "registry+https://github.com/rust-lang/crates.io-index"
18 | dependencies = [
19 | "backtrace-sys 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)",
20 | "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
21 | "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
22 | "rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
23 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
24 | ]
25 |
26 | [[package]]
27 | name = "backtrace-sys"
28 | version = "0.1.24"
29 | source = "registry+https://github.com/rust-lang/crates.io-index"
30 | dependencies = [
31 | "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
32 | "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
33 | ]
34 |
35 | [[package]]
36 | name = "base64"
37 | version = "0.9.3"
38 | source = "registry+https://github.com/rust-lang/crates.io-index"
39 | dependencies = [
40 | "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
41 | "safemem 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
42 | ]
43 |
44 | [[package]]
45 | name = "bitflags"
46 | version = "0.9.1"
47 | source = "registry+https://github.com/rust-lang/crates.io-index"
48 |
49 | [[package]]
50 | name = "bitflags"
51 | version = "1.0.4"
52 | source = "registry+https://github.com/rust-lang/crates.io-index"
53 |
54 | [[package]]
55 | name = "block"
56 | version = "0.1.6"
57 | source = "registry+https://github.com/rust-lang/crates.io-index"
58 |
59 | [[package]]
60 | name = "build_const"
61 | version = "0.2.1"
62 | source = "registry+https://github.com/rust-lang/crates.io-index"
63 |
64 | [[package]]
65 | name = "byteorder"
66 | version = "1.2.6"
67 | source = "registry+https://github.com/rust-lang/crates.io-index"
68 |
69 | [[package]]
70 | name = "bytes"
71 | version = "0.4.10"
72 | source = "registry+https://github.com/rust-lang/crates.io-index"
73 | dependencies = [
74 | "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
75 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
76 | ]
77 |
78 | [[package]]
79 | name = "cc"
80 | version = "1.0.25"
81 | source = "registry+https://github.com/rust-lang/crates.io-index"
82 |
83 | [[package]]
84 | name = "cfg-if"
85 | version = "0.1.5"
86 | source = "registry+https://github.com/rust-lang/crates.io-index"
87 |
88 | [[package]]
89 | name = "chrono"
90 | version = "0.4.6"
91 | source = "registry+https://github.com/rust-lang/crates.io-index"
92 | dependencies = [
93 | "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
94 | "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
95 | "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)",
96 | ]
97 |
98 | [[package]]
99 | name = "cloudabi"
100 | version = "0.0.3"
101 | source = "registry+https://github.com/rust-lang/crates.io-index"
102 | dependencies = [
103 | "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
104 | ]
105 |
106 | [[package]]
107 | name = "core-foundation"
108 | version = "0.5.1"
109 | source = "registry+https://github.com/rust-lang/crates.io-index"
110 | dependencies = [
111 | "core-foundation-sys 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
112 | "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
113 | ]
114 |
115 | [[package]]
116 | name = "core-foundation-sys"
117 | version = "0.5.1"
118 | source = "registry+https://github.com/rust-lang/crates.io-index"
119 | dependencies = [
120 | "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
121 | ]
122 |
123 | [[package]]
124 | name = "crc"
125 | version = "1.8.1"
126 | source = "registry+https://github.com/rust-lang/crates.io-index"
127 | dependencies = [
128 | "build_const 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
129 | ]
130 |
131 | [[package]]
132 | name = "crossbeam-deque"
133 | version = "0.6.1"
134 | source = "registry+https://github.com/rust-lang/crates.io-index"
135 | dependencies = [
136 | "crossbeam-epoch 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
137 | "crossbeam-utils 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
138 | ]
139 |
140 | [[package]]
141 | name = "crossbeam-epoch"
142 | version = "0.5.2"
143 | source = "registry+https://github.com/rust-lang/crates.io-index"
144 | dependencies = [
145 | "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
146 | "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
147 | "crossbeam-utils 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
148 | "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
149 | "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
150 | "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
151 | ]
152 |
153 | [[package]]
154 | name = "crossbeam-utils"
155 | version = "0.5.0"
156 | source = "registry+https://github.com/rust-lang/crates.io-index"
157 |
158 | [[package]]
159 | name = "dbus"
160 | version = "0.4.1"
161 | source = "registry+https://github.com/rust-lang/crates.io-index"
162 | dependencies = [
163 | "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
164 | "pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
165 | ]
166 |
167 | [[package]]
168 | name = "dtoa"
169 | version = "0.4.3"
170 | source = "registry+https://github.com/rust-lang/crates.io-index"
171 |
172 | [[package]]
173 | name = "encoding_rs"
174 | version = "0.8.7"
175 | source = "registry+https://github.com/rust-lang/crates.io-index"
176 | dependencies = [
177 | "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
178 | ]
179 |
180 | [[package]]
181 | name = "error-chain"
182 | version = "0.10.0"
183 | source = "registry+https://github.com/rust-lang/crates.io-index"
184 | dependencies = [
185 | "backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
186 | ]
187 |
188 | [[package]]
189 | name = "fnv"
190 | version = "1.0.6"
191 | source = "registry+https://github.com/rust-lang/crates.io-index"
192 |
193 | [[package]]
194 | name = "foreign-types"
195 | version = "0.3.2"
196 | source = "registry+https://github.com/rust-lang/crates.io-index"
197 | dependencies = [
198 | "foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
199 | ]
200 |
201 | [[package]]
202 | name = "foreign-types-shared"
203 | version = "0.1.1"
204 | source = "registry+https://github.com/rust-lang/crates.io-index"
205 |
206 | [[package]]
207 | name = "fuchsia-zircon"
208 | version = "0.3.3"
209 | source = "registry+https://github.com/rust-lang/crates.io-index"
210 | dependencies = [
211 | "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
212 | "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
213 | ]
214 |
215 | [[package]]
216 | name = "fuchsia-zircon-sys"
217 | version = "0.3.3"
218 | source = "registry+https://github.com/rust-lang/crates.io-index"
219 |
220 | [[package]]
221 | name = "futures"
222 | version = "0.1.24"
223 | source = "registry+https://github.com/rust-lang/crates.io-index"
224 |
225 | [[package]]
226 | name = "futures-cpupool"
227 | version = "0.1.8"
228 | source = "registry+https://github.com/rust-lang/crates.io-index"
229 | dependencies = [
230 | "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)",
231 | "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
232 | ]
233 |
234 | [[package]]
235 | name = "gcc"
236 | version = "0.3.54"
237 | source = "registry+https://github.com/rust-lang/crates.io-index"
238 |
239 | [[package]]
240 | name = "h2"
241 | version = "0.1.12"
242 | source = "registry+https://github.com/rust-lang/crates.io-index"
243 | dependencies = [
244 | "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
245 | "bytes 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)",
246 | "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
247 | "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)",
248 | "http 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
249 | "indexmap 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
250 | "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
251 | "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
252 | "string 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
253 | "tokio-io 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
254 | ]
255 |
256 | [[package]]
257 | name = "html-minifier"
258 | version = "1.1.2"
259 | source = "registry+https://github.com/rust-lang/crates.io-index"
260 | dependencies = [
261 | "minifier 0.0.19 (registry+https://github.com/rust-lang/crates.io-index)",
262 | ]
263 |
264 | [[package]]
265 | name = "http"
266 | version = "0.1.13"
267 | source = "registry+https://github.com/rust-lang/crates.io-index"
268 | dependencies = [
269 | "bytes 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)",
270 | "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
271 | "itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
272 | ]
273 |
274 | [[package]]
275 | name = "httparse"
276 | version = "1.3.3"
277 | source = "registry+https://github.com/rust-lang/crates.io-index"
278 |
279 | [[package]]
280 | name = "hyper"
281 | version = "0.12.11"
282 | source = "registry+https://github.com/rust-lang/crates.io-index"
283 | dependencies = [
284 | "bytes 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)",
285 | "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)",
286 | "futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
287 | "h2 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
288 | "http 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
289 | "httparse 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
290 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
291 | "itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
292 | "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
293 | "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
294 | "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)",
295 | "tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
296 | "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
297 | "tokio-io 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
298 | "tokio-reactor 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
299 | "tokio-tcp 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
300 | "tokio-timer 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
301 | "want 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
302 | ]
303 |
304 | [[package]]
305 | name = "hyper-tls"
306 | version = "0.3.0"
307 | source = "registry+https://github.com/rust-lang/crates.io-index"
308 | dependencies = [
309 | "bytes 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)",
310 | "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)",
311 | "hyper 0.12.11 (registry+https://github.com/rust-lang/crates.io-index)",
312 | "native-tls 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
313 | "tokio-io 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
314 | ]
315 |
316 | [[package]]
317 | name = "idna"
318 | version = "0.1.5"
319 | source = "registry+https://github.com/rust-lang/crates.io-index"
320 | dependencies = [
321 | "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
322 | "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
323 | "unicode-normalization 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
324 | ]
325 |
326 | [[package]]
327 | name = "indexmap"
328 | version = "1.0.1"
329 | source = "registry+https://github.com/rust-lang/crates.io-index"
330 |
331 | [[package]]
332 | name = "iovec"
333 | version = "0.1.2"
334 | source = "registry+https://github.com/rust-lang/crates.io-index"
335 | dependencies = [
336 | "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
337 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
338 | ]
339 |
340 | [[package]]
341 | name = "itoa"
342 | version = "0.4.3"
343 | source = "registry+https://github.com/rust-lang/crates.io-index"
344 |
345 | [[package]]
346 | name = "kernel32-sys"
347 | version = "0.2.2"
348 | source = "registry+https://github.com/rust-lang/crates.io-index"
349 | dependencies = [
350 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
351 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
352 | ]
353 |
354 | [[package]]
355 | name = "kyo-rs"
356 | version = "0.0.1"
357 | dependencies = [
358 | "base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)",
359 | "html-minifier 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
360 | "hyper 0.12.11 (registry+https://github.com/rust-lang/crates.io-index)",
361 | "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
362 | "notify-rust 3.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
363 | "reqwest 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
364 | "serde_json 1.0.31 (registry+https://github.com/rust-lang/crates.io-index)",
365 | "user32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
366 | "web-view 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
367 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
368 | "winres 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
369 | "winrt 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
370 | "winrt-notification 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
371 | ]
372 |
373 | [[package]]
374 | name = "lazy_static"
375 | version = "1.1.0"
376 | source = "registry+https://github.com/rust-lang/crates.io-index"
377 | dependencies = [
378 | "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
379 | ]
380 |
381 | [[package]]
382 | name = "lazycell"
383 | version = "1.2.0"
384 | source = "registry+https://github.com/rust-lang/crates.io-index"
385 |
386 | [[package]]
387 | name = "libc"
388 | version = "0.2.43"
389 | source = "registry+https://github.com/rust-lang/crates.io-index"
390 |
391 | [[package]]
392 | name = "libflate"
393 | version = "0.1.18"
394 | source = "registry+https://github.com/rust-lang/crates.io-index"
395 | dependencies = [
396 | "adler32 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
397 | "byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
398 | "crc 1.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
399 | ]
400 |
401 | [[package]]
402 | name = "lock_api"
403 | version = "0.1.4"
404 | source = "registry+https://github.com/rust-lang/crates.io-index"
405 | dependencies = [
406 | "owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
407 | "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
408 | ]
409 |
410 | [[package]]
411 | name = "log"
412 | version = "0.4.5"
413 | source = "registry+https://github.com/rust-lang/crates.io-index"
414 | dependencies = [
415 | "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
416 | ]
417 |
418 | [[package]]
419 | name = "mac-notification-sys"
420 | version = "0.1.3"
421 | source = "registry+https://github.com/rust-lang/crates.io-index"
422 | dependencies = [
423 | "chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
424 | "error-chain 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
425 | "gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)",
426 | "objc-foundation 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
427 | ]
428 |
429 | [[package]]
430 | name = "macro-utils"
431 | version = "0.1.2"
432 | source = "registry+https://github.com/rust-lang/crates.io-index"
433 |
434 | [[package]]
435 | name = "malloc_buf"
436 | version = "0.0.6"
437 | source = "registry+https://github.com/rust-lang/crates.io-index"
438 | dependencies = [
439 | "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
440 | ]
441 |
442 | [[package]]
443 | name = "matches"
444 | version = "0.1.8"
445 | source = "registry+https://github.com/rust-lang/crates.io-index"
446 |
447 | [[package]]
448 | name = "memoffset"
449 | version = "0.2.1"
450 | source = "registry+https://github.com/rust-lang/crates.io-index"
451 |
452 | [[package]]
453 | name = "mime"
454 | version = "0.3.9"
455 | source = "registry+https://github.com/rust-lang/crates.io-index"
456 | dependencies = [
457 | "unicase 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
458 | ]
459 |
460 | [[package]]
461 | name = "mime_guess"
462 | version = "2.0.0-alpha.6"
463 | source = "registry+https://github.com/rust-lang/crates.io-index"
464 | dependencies = [
465 | "mime 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
466 | "phf 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)",
467 | "phf_codegen 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)",
468 | "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
469 | ]
470 |
471 | [[package]]
472 | name = "minifier"
473 | version = "0.0.19"
474 | source = "registry+https://github.com/rust-lang/crates.io-index"
475 | dependencies = [
476 | "macro-utils 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
477 | ]
478 |
479 | [[package]]
480 | name = "mio"
481 | version = "0.6.16"
482 | source = "registry+https://github.com/rust-lang/crates.io-index"
483 | dependencies = [
484 | "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
485 | "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
486 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
487 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
488 | "lazycell 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
489 | "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
490 | "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
491 | "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
492 | "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
493 | "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
494 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
495 | ]
496 |
497 | [[package]]
498 | name = "mio-uds"
499 | version = "0.6.7"
500 | source = "registry+https://github.com/rust-lang/crates.io-index"
501 | dependencies = [
502 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
503 | "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
504 | "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)",
505 | ]
506 |
507 | [[package]]
508 | name = "miow"
509 | version = "0.2.1"
510 | source = "registry+https://github.com/rust-lang/crates.io-index"
511 | dependencies = [
512 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
513 | "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
514 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
515 | "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
516 | ]
517 |
518 | [[package]]
519 | name = "native-tls"
520 | version = "0.2.1"
521 | source = "registry+https://github.com/rust-lang/crates.io-index"
522 | dependencies = [
523 | "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
524 | "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
525 | "openssl 0.10.12 (registry+https://github.com/rust-lang/crates.io-index)",
526 | "openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
527 | "openssl-sys 0.9.36 (registry+https://github.com/rust-lang/crates.io-index)",
528 | "schannel 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)",
529 | "security-framework 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
530 | "security-framework-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
531 | "tempfile 3.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
532 | ]
533 |
534 | [[package]]
535 | name = "net2"
536 | version = "0.2.33"
537 | source = "registry+https://github.com/rust-lang/crates.io-index"
538 | dependencies = [
539 | "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
540 | "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
541 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
542 | ]
543 |
544 | [[package]]
545 | name = "nodrop"
546 | version = "0.1.12"
547 | source = "registry+https://github.com/rust-lang/crates.io-index"
548 |
549 | [[package]]
550 | name = "notify-rust"
551 | version = "3.4.2"
552 | source = "registry+https://github.com/rust-lang/crates.io-index"
553 | dependencies = [
554 | "dbus 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
555 | "error-chain 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
556 | "mac-notification-sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
557 | ]
558 |
559 | [[package]]
560 | name = "num-integer"
561 | version = "0.1.39"
562 | source = "registry+https://github.com/rust-lang/crates.io-index"
563 | dependencies = [
564 | "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
565 | ]
566 |
567 | [[package]]
568 | name = "num-traits"
569 | version = "0.2.6"
570 | source = "registry+https://github.com/rust-lang/crates.io-index"
571 |
572 | [[package]]
573 | name = "num_cpus"
574 | version = "1.8.0"
575 | source = "registry+https://github.com/rust-lang/crates.io-index"
576 | dependencies = [
577 | "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
578 | ]
579 |
580 | [[package]]
581 | name = "objc"
582 | version = "0.2.5"
583 | source = "registry+https://github.com/rust-lang/crates.io-index"
584 | dependencies = [
585 | "malloc_buf 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
586 | ]
587 |
588 | [[package]]
589 | name = "objc-foundation"
590 | version = "0.1.1"
591 | source = "registry+https://github.com/rust-lang/crates.io-index"
592 | dependencies = [
593 | "block 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
594 | "objc 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
595 | "objc_id 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
596 | ]
597 |
598 | [[package]]
599 | name = "objc_id"
600 | version = "0.1.1"
601 | source = "registry+https://github.com/rust-lang/crates.io-index"
602 | dependencies = [
603 | "objc 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
604 | ]
605 |
606 | [[package]]
607 | name = "openssl"
608 | version = "0.10.12"
609 | source = "registry+https://github.com/rust-lang/crates.io-index"
610 | dependencies = [
611 | "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
612 | "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
613 | "foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
614 | "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
615 | "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
616 | "openssl-sys 0.9.36 (registry+https://github.com/rust-lang/crates.io-index)",
617 | ]
618 |
619 | [[package]]
620 | name = "openssl-probe"
621 | version = "0.1.2"
622 | source = "registry+https://github.com/rust-lang/crates.io-index"
623 |
624 | [[package]]
625 | name = "openssl-sys"
626 | version = "0.9.36"
627 | source = "registry+https://github.com/rust-lang/crates.io-index"
628 | dependencies = [
629 | "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
630 | "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
631 | "pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
632 | "vcpkg 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
633 | ]
634 |
635 | [[package]]
636 | name = "owning_ref"
637 | version = "0.3.3"
638 | source = "registry+https://github.com/rust-lang/crates.io-index"
639 | dependencies = [
640 | "stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
641 | ]
642 |
643 | [[package]]
644 | name = "parking_lot"
645 | version = "0.6.4"
646 | source = "registry+https://github.com/rust-lang/crates.io-index"
647 | dependencies = [
648 | "lock_api 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
649 | "parking_lot_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
650 | ]
651 |
652 | [[package]]
653 | name = "parking_lot_core"
654 | version = "0.3.1"
655 | source = "registry+https://github.com/rust-lang/crates.io-index"
656 | dependencies = [
657 | "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
658 | "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
659 | "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
660 | "smallvec 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
661 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
662 | ]
663 |
664 | [[package]]
665 | name = "percent-encoding"
666 | version = "1.0.1"
667 | source = "registry+https://github.com/rust-lang/crates.io-index"
668 |
669 | [[package]]
670 | name = "phf"
671 | version = "0.7.23"
672 | source = "registry+https://github.com/rust-lang/crates.io-index"
673 | dependencies = [
674 | "phf_shared 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)",
675 | ]
676 |
677 | [[package]]
678 | name = "phf_codegen"
679 | version = "0.7.23"
680 | source = "registry+https://github.com/rust-lang/crates.io-index"
681 | dependencies = [
682 | "phf_generator 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)",
683 | "phf_shared 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)",
684 | ]
685 |
686 | [[package]]
687 | name = "phf_generator"
688 | version = "0.7.23"
689 | source = "registry+https://github.com/rust-lang/crates.io-index"
690 | dependencies = [
691 | "phf_shared 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)",
692 | "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
693 | ]
694 |
695 | [[package]]
696 | name = "phf_shared"
697 | version = "0.7.23"
698 | source = "registry+https://github.com/rust-lang/crates.io-index"
699 | dependencies = [
700 | "siphasher 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
701 | "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
702 | ]
703 |
704 | [[package]]
705 | name = "pkg-config"
706 | version = "0.3.14"
707 | source = "registry+https://github.com/rust-lang/crates.io-index"
708 |
709 | [[package]]
710 | name = "quote"
711 | version = "0.3.15"
712 | source = "registry+https://github.com/rust-lang/crates.io-index"
713 |
714 | [[package]]
715 | name = "rand"
716 | version = "0.5.5"
717 | source = "registry+https://github.com/rust-lang/crates.io-index"
718 | dependencies = [
719 | "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
720 | "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
721 | "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
722 | "rand_core 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
723 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
724 | ]
725 |
726 | [[package]]
727 | name = "rand_core"
728 | version = "0.2.1"
729 | source = "registry+https://github.com/rust-lang/crates.io-index"
730 |
731 | [[package]]
732 | name = "redox_syscall"
733 | version = "0.1.40"
734 | source = "registry+https://github.com/rust-lang/crates.io-index"
735 |
736 | [[package]]
737 | name = "remove_dir_all"
738 | version = "0.5.1"
739 | source = "registry+https://github.com/rust-lang/crates.io-index"
740 | dependencies = [
741 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
742 | ]
743 |
744 | [[package]]
745 | name = "reqwest"
746 | version = "0.9.2"
747 | source = "registry+https://github.com/rust-lang/crates.io-index"
748 | dependencies = [
749 | "base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)",
750 | "bytes 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)",
751 | "encoding_rs 0.8.7 (registry+https://github.com/rust-lang/crates.io-index)",
752 | "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)",
753 | "http 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
754 | "hyper 0.12.11 (registry+https://github.com/rust-lang/crates.io-index)",
755 | "hyper-tls 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
756 | "libflate 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)",
757 | "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
758 | "mime 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
759 | "mime_guess 2.0.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)",
760 | "native-tls 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
761 | "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)",
762 | "serde_json 1.0.31 (registry+https://github.com/rust-lang/crates.io-index)",
763 | "serde_urlencoded 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
764 | "tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
765 | "tokio-io 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
766 | "url 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
767 | "uuid 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
768 | ]
769 |
770 | [[package]]
771 | name = "rustc-demangle"
772 | version = "0.1.9"
773 | source = "registry+https://github.com/rust-lang/crates.io-index"
774 |
775 | [[package]]
776 | name = "rustc_version"
777 | version = "0.2.3"
778 | source = "registry+https://github.com/rust-lang/crates.io-index"
779 | dependencies = [
780 | "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
781 | ]
782 |
783 | [[package]]
784 | name = "ryu"
785 | version = "0.2.6"
786 | source = "registry+https://github.com/rust-lang/crates.io-index"
787 |
788 | [[package]]
789 | name = "safemem"
790 | version = "0.3.0"
791 | source = "registry+https://github.com/rust-lang/crates.io-index"
792 |
793 | [[package]]
794 | name = "schannel"
795 | version = "0.1.14"
796 | source = "registry+https://github.com/rust-lang/crates.io-index"
797 | dependencies = [
798 | "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
799 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
800 | ]
801 |
802 | [[package]]
803 | name = "scopeguard"
804 | version = "0.3.3"
805 | source = "registry+https://github.com/rust-lang/crates.io-index"
806 |
807 | [[package]]
808 | name = "security-framework"
809 | version = "0.2.1"
810 | source = "registry+https://github.com/rust-lang/crates.io-index"
811 | dependencies = [
812 | "core-foundation 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
813 | "core-foundation-sys 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
814 | "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
815 | "security-framework-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
816 | ]
817 |
818 | [[package]]
819 | name = "security-framework-sys"
820 | version = "0.2.1"
821 | source = "registry+https://github.com/rust-lang/crates.io-index"
822 | dependencies = [
823 | "core-foundation-sys 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
824 | "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
825 | ]
826 |
827 | [[package]]
828 | name = "semver"
829 | version = "0.9.0"
830 | source = "registry+https://github.com/rust-lang/crates.io-index"
831 | dependencies = [
832 | "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
833 | ]
834 |
835 | [[package]]
836 | name = "semver-parser"
837 | version = "0.7.0"
838 | source = "registry+https://github.com/rust-lang/crates.io-index"
839 |
840 | [[package]]
841 | name = "serde"
842 | version = "1.0.79"
843 | source = "registry+https://github.com/rust-lang/crates.io-index"
844 |
845 | [[package]]
846 | name = "serde_json"
847 | version = "1.0.31"
848 | source = "registry+https://github.com/rust-lang/crates.io-index"
849 | dependencies = [
850 | "itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
851 | "ryu 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
852 | "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)",
853 | ]
854 |
855 | [[package]]
856 | name = "serde_urlencoded"
857 | version = "0.5.3"
858 | source = "registry+https://github.com/rust-lang/crates.io-index"
859 | dependencies = [
860 | "dtoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
861 | "itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
862 | "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)",
863 | "url 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
864 | ]
865 |
866 | [[package]]
867 | name = "siphasher"
868 | version = "0.2.3"
869 | source = "registry+https://github.com/rust-lang/crates.io-index"
870 |
871 | [[package]]
872 | name = "slab"
873 | version = "0.4.1"
874 | source = "registry+https://github.com/rust-lang/crates.io-index"
875 |
876 | [[package]]
877 | name = "smallvec"
878 | version = "0.6.5"
879 | source = "registry+https://github.com/rust-lang/crates.io-index"
880 | dependencies = [
881 | "unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
882 | ]
883 |
884 | [[package]]
885 | name = "stable_deref_trait"
886 | version = "1.1.1"
887 | source = "registry+https://github.com/rust-lang/crates.io-index"
888 |
889 | [[package]]
890 | name = "string"
891 | version = "0.1.1"
892 | source = "registry+https://github.com/rust-lang/crates.io-index"
893 |
894 | [[package]]
895 | name = "strum"
896 | version = "0.8.0"
897 | source = "registry+https://github.com/rust-lang/crates.io-index"
898 |
899 | [[package]]
900 | name = "strum_macros"
901 | version = "0.8.0"
902 | source = "registry+https://github.com/rust-lang/crates.io-index"
903 | dependencies = [
904 | "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)",
905 | "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)",
906 | ]
907 |
908 | [[package]]
909 | name = "syn"
910 | version = "0.11.11"
911 | source = "registry+https://github.com/rust-lang/crates.io-index"
912 | dependencies = [
913 | "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)",
914 | "synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)",
915 | "unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
916 | ]
917 |
918 | [[package]]
919 | name = "synom"
920 | version = "0.11.3"
921 | source = "registry+https://github.com/rust-lang/crates.io-index"
922 | dependencies = [
923 | "unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
924 | ]
925 |
926 | [[package]]
927 | name = "tempfile"
928 | version = "3.0.4"
929 | source = "registry+https://github.com/rust-lang/crates.io-index"
930 | dependencies = [
931 | "cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
932 | "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
933 | "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
934 | "redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)",
935 | "remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
936 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
937 | ]
938 |
939 | [[package]]
940 | name = "time"
941 | version = "0.1.40"
942 | source = "registry+https://github.com/rust-lang/crates.io-index"
943 | dependencies = [
944 | "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
945 | "redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)",
946 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
947 | ]
948 |
949 | [[package]]
950 | name = "tokio"
951 | version = "0.1.11"
952 | source = "registry+https://github.com/rust-lang/crates.io-index"
953 | dependencies = [
954 | "bytes 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)",
955 | "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)",
956 | "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)",
957 | "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
958 | "tokio-current-thread 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
959 | "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
960 | "tokio-fs 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
961 | "tokio-io 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
962 | "tokio-reactor 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
963 | "tokio-tcp 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
964 | "tokio-threadpool 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
965 | "tokio-timer 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
966 | "tokio-udp 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
967 | "tokio-uds 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
968 | ]
969 |
970 | [[package]]
971 | name = "tokio-codec"
972 | version = "0.1.1"
973 | source = "registry+https://github.com/rust-lang/crates.io-index"
974 | dependencies = [
975 | "bytes 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)",
976 | "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)",
977 | "tokio-io 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
978 | ]
979 |
980 | [[package]]
981 | name = "tokio-current-thread"
982 | version = "0.1.3"
983 | source = "registry+https://github.com/rust-lang/crates.io-index"
984 | dependencies = [
985 | "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)",
986 | "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
987 | ]
988 |
989 | [[package]]
990 | name = "tokio-executor"
991 | version = "0.1.5"
992 | source = "registry+https://github.com/rust-lang/crates.io-index"
993 | dependencies = [
994 | "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)",
995 | ]
996 |
997 | [[package]]
998 | name = "tokio-fs"
999 | version = "0.1.3"
1000 | source = "registry+https://github.com/rust-lang/crates.io-index"
1001 | dependencies = [
1002 | "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)",
1003 | "tokio-io 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
1004 | "tokio-threadpool 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
1005 | ]
1006 |
1007 | [[package]]
1008 | name = "tokio-io"
1009 | version = "0.1.9"
1010 | source = "registry+https://github.com/rust-lang/crates.io-index"
1011 | dependencies = [
1012 | "bytes 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)",
1013 | "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)",
1014 | "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
1015 | ]
1016 |
1017 | [[package]]
1018 | name = "tokio-reactor"
1019 | version = "0.1.6"
1020 | source = "registry+https://github.com/rust-lang/crates.io-index"
1021 | dependencies = [
1022 | "crossbeam-utils 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
1023 | "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)",
1024 | "lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
1025 | "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
1026 | "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)",
1027 | "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
1028 | "parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)",
1029 | "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
1030 | "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
1031 | "tokio-io 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
1032 | ]
1033 |
1034 | [[package]]
1035 | name = "tokio-tcp"
1036 | version = "0.1.2"
1037 | source = "registry+https://github.com/rust-lang/crates.io-index"
1038 | dependencies = [
1039 | "bytes 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)",
1040 | "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)",
1041 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
1042 | "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)",
1043 | "tokio-io 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
1044 | "tokio-reactor 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
1045 | ]
1046 |
1047 | [[package]]
1048 | name = "tokio-threadpool"
1049 | version = "0.1.7"
1050 | source = "registry+https://github.com/rust-lang/crates.io-index"
1051 | dependencies = [
1052 | "crossbeam-deque 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
1053 | "crossbeam-utils 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
1054 | "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)",
1055 | "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
1056 | "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
1057 | "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
1058 | "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
1059 | ]
1060 |
1061 | [[package]]
1062 | name = "tokio-timer"
1063 | version = "0.2.7"
1064 | source = "registry+https://github.com/rust-lang/crates.io-index"
1065 | dependencies = [
1066 | "crossbeam-utils 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
1067 | "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)",
1068 | "slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
1069 | "tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
1070 | ]
1071 |
1072 | [[package]]
1073 | name = "tokio-udp"
1074 | version = "0.1.2"
1075 | source = "registry+https://github.com/rust-lang/crates.io-index"
1076 | dependencies = [
1077 | "bytes 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)",
1078 | "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)",
1079 | "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
1080 | "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)",
1081 | "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
1082 | "tokio-io 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
1083 | "tokio-reactor 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
1084 | ]
1085 |
1086 | [[package]]
1087 | name = "tokio-uds"
1088 | version = "0.2.2"
1089 | source = "registry+https://github.com/rust-lang/crates.io-index"
1090 | dependencies = [
1091 | "bytes 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)",
1092 | "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)",
1093 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
1094 | "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
1095 | "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
1096 | "mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)",
1097 | "mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)",
1098 | "tokio-io 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
1099 | "tokio-reactor 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
1100 | ]
1101 |
1102 | [[package]]
1103 | name = "toml"
1104 | version = "0.4.7"
1105 | source = "registry+https://github.com/rust-lang/crates.io-index"
1106 | dependencies = [
1107 | "serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)",
1108 | ]
1109 |
1110 | [[package]]
1111 | name = "try-lock"
1112 | version = "0.2.2"
1113 | source = "registry+https://github.com/rust-lang/crates.io-index"
1114 |
1115 | [[package]]
1116 | name = "unicase"
1117 | version = "1.4.2"
1118 | source = "registry+https://github.com/rust-lang/crates.io-index"
1119 | dependencies = [
1120 | "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
1121 | ]
1122 |
1123 | [[package]]
1124 | name = "unicase"
1125 | version = "2.1.0"
1126 | source = "registry+https://github.com/rust-lang/crates.io-index"
1127 | dependencies = [
1128 | "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
1129 | ]
1130 |
1131 | [[package]]
1132 | name = "unicode-bidi"
1133 | version = "0.3.4"
1134 | source = "registry+https://github.com/rust-lang/crates.io-index"
1135 | dependencies = [
1136 | "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
1137 | ]
1138 |
1139 | [[package]]
1140 | name = "unicode-normalization"
1141 | version = "0.1.7"
1142 | source = "registry+https://github.com/rust-lang/crates.io-index"
1143 |
1144 | [[package]]
1145 | name = "unicode-xid"
1146 | version = "0.0.4"
1147 | source = "registry+https://github.com/rust-lang/crates.io-index"
1148 |
1149 | [[package]]
1150 | name = "unreachable"
1151 | version = "1.0.0"
1152 | source = "registry+https://github.com/rust-lang/crates.io-index"
1153 | dependencies = [
1154 | "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
1155 | ]
1156 |
1157 | [[package]]
1158 | name = "url"
1159 | version = "1.7.1"
1160 | source = "registry+https://github.com/rust-lang/crates.io-index"
1161 | dependencies = [
1162 | "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
1163 | "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
1164 | "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
1165 | ]
1166 |
1167 | [[package]]
1168 | name = "urlencoding"
1169 | version = "1.0.0"
1170 | source = "registry+https://github.com/rust-lang/crates.io-index"
1171 |
1172 | [[package]]
1173 | name = "user32-sys"
1174 | version = "0.2.0"
1175 | source = "registry+https://github.com/rust-lang/crates.io-index"
1176 | dependencies = [
1177 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
1178 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
1179 | ]
1180 |
1181 | [[package]]
1182 | name = "uuid"
1183 | version = "0.7.1"
1184 | source = "registry+https://github.com/rust-lang/crates.io-index"
1185 | dependencies = [
1186 | "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
1187 | ]
1188 |
1189 | [[package]]
1190 | name = "vcpkg"
1191 | version = "0.2.6"
1192 | source = "registry+https://github.com/rust-lang/crates.io-index"
1193 |
1194 | [[package]]
1195 | name = "version_check"
1196 | version = "0.1.5"
1197 | source = "registry+https://github.com/rust-lang/crates.io-index"
1198 |
1199 | [[package]]
1200 | name = "void"
1201 | version = "1.0.2"
1202 | source = "registry+https://github.com/rust-lang/crates.io-index"
1203 |
1204 | [[package]]
1205 | name = "want"
1206 | version = "0.0.6"
1207 | source = "registry+https://github.com/rust-lang/crates.io-index"
1208 | dependencies = [
1209 | "futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)",
1210 | "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
1211 | "try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
1212 | ]
1213 |
1214 | [[package]]
1215 | name = "web-view"
1216 | version = "0.2.1"
1217 | source = "registry+https://github.com/rust-lang/crates.io-index"
1218 | dependencies = [
1219 | "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
1220 | "urlencoding 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
1221 | "webview-sys 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
1222 | ]
1223 |
1224 | [[package]]
1225 | name = "webview-sys"
1226 | version = "0.1.0"
1227 | source = "registry+https://github.com/rust-lang/crates.io-index"
1228 | dependencies = [
1229 | "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
1230 | "cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
1231 | "pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
1232 | ]
1233 |
1234 | [[package]]
1235 | name = "winapi"
1236 | version = "0.2.8"
1237 | source = "registry+https://github.com/rust-lang/crates.io-index"
1238 |
1239 | [[package]]
1240 | name = "winapi"
1241 | version = "0.3.6"
1242 | source = "registry+https://github.com/rust-lang/crates.io-index"
1243 | dependencies = [
1244 | "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
1245 | "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
1246 | ]
1247 |
1248 | [[package]]
1249 | name = "winapi-build"
1250 | version = "0.1.1"
1251 | source = "registry+https://github.com/rust-lang/crates.io-index"
1252 |
1253 | [[package]]
1254 | name = "winapi-i686-pc-windows-gnu"
1255 | version = "0.4.0"
1256 | source = "registry+https://github.com/rust-lang/crates.io-index"
1257 |
1258 | [[package]]
1259 | name = "winapi-x86_64-pc-windows-gnu"
1260 | version = "0.4.0"
1261 | source = "registry+https://github.com/rust-lang/crates.io-index"
1262 |
1263 | [[package]]
1264 | name = "winres"
1265 | version = "0.1.6"
1266 | source = "registry+https://github.com/rust-lang/crates.io-index"
1267 | dependencies = [
1268 | "toml 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
1269 | ]
1270 |
1271 | [[package]]
1272 | name = "winrt"
1273 | version = "0.4.0"
1274 | source = "registry+https://github.com/rust-lang/crates.io-index"
1275 | dependencies = [
1276 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
1277 | ]
1278 |
1279 | [[package]]
1280 | name = "winrt"
1281 | version = "0.5.1"
1282 | source = "registry+https://github.com/rust-lang/crates.io-index"
1283 | dependencies = [
1284 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
1285 | ]
1286 |
1287 | [[package]]
1288 | name = "winrt-notification"
1289 | version = "0.2.2"
1290 | source = "registry+https://github.com/rust-lang/crates.io-index"
1291 | dependencies = [
1292 | "strum 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
1293 | "strum_macros 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
1294 | "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
1295 | "winrt 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
1296 | "xml-rs 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
1297 | ]
1298 |
1299 | [[package]]
1300 | name = "ws2_32-sys"
1301 | version = "0.2.1"
1302 | source = "registry+https://github.com/rust-lang/crates.io-index"
1303 | dependencies = [
1304 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
1305 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
1306 | ]
1307 |
1308 | [[package]]
1309 | name = "xml-rs"
1310 | version = "0.6.1"
1311 | source = "registry+https://github.com/rust-lang/crates.io-index"
1312 | dependencies = [
1313 | "bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
1314 | ]
1315 |
1316 | [metadata]
1317 | "checksum adler32 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7e522997b529f05601e05166c07ed17789691f562762c7f3b987263d2dedee5c"
1318 | "checksum arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)" = "a1e964f9e24d588183fcb43503abda40d288c8657dfc27311516ce2f05675aef"
1319 | "checksum backtrace 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "89a47830402e9981c5c41223151efcced65a0510c13097c769cede7efb34782a"
1320 | "checksum backtrace-sys 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)" = "c66d56ac8dabd07f6aacdaf633f4b8262f5b3601a810a0dcddffd5c22c69daa0"
1321 | "checksum base64 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643"
1322 | "checksum bitflags 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4efd02e230a02e18f92fc2735f44597385ed02ad8f831e7c1c1156ee5e1ab3a5"
1323 | "checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12"
1324 | "checksum block 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
1325 | "checksum build_const 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "39092a32794787acd8525ee150305ff051b0aa6cc2abaf193924f5ab05425f39"
1326 | "checksum byteorder 1.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "90492c5858dd7d2e78691cfb89f90d273a2800fc11d98f60786e5d87e2f83781"
1327 | "checksum bytes 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "0ce55bd354b095246fc34caf4e9e242f5297a7fd938b090cadfea6eee614aa62"
1328 | "checksum cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)" = "f159dfd43363c4d08055a07703eb7a3406b0dac4d0584d96965a3262db3c9d16"
1329 | "checksum cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "0c4e7bb64a8ebb0d856483e1e682ea3422f883c5f5615a90d51a2c82fe87fdd3"
1330 | "checksum chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "45912881121cb26fad7c38c17ba7daa18764771836b34fab7d3fbd93ed633878"
1331 | "checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
1332 | "checksum core-foundation 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "286e0b41c3a20da26536c6000a280585d519fd07b3956b43aed8a79e9edce980"
1333 | "checksum core-foundation-sys 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "716c271e8613ace48344f723b60b900a93150271e5be206212d052bbc0883efa"
1334 | "checksum crc 1.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d663548de7f5cca343f1e0a48d14dcfb0e9eb4e079ec58883b7251539fa10aeb"
1335 | "checksum crossbeam-deque 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3486aefc4c0487b9cb52372c97df0a48b8c249514af1ee99703bf70d2f2ceda1"
1336 | "checksum crossbeam-epoch 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "30fecfcac6abfef8771151f8be4abc9e4edc112c2bcb233314cafde2680536e9"
1337 | "checksum crossbeam-utils 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "677d453a17e8bd2b913fa38e8b9cf04bcdbb5be790aa294f2389661d72036015"
1338 | "checksum dbus 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "58ec7b4cac6f79f36af1cd9cfdb9b935fc5a4e899f494ee03a3a6165f7d10b4b"
1339 | "checksum dtoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6d301140eb411af13d3115f9a562c85cc6b541ade9dfa314132244aaee7489dd"
1340 | "checksum encoding_rs 0.8.7 (registry+https://github.com/rust-lang/crates.io-index)" = "21a550ec129ca2f8593227888625c7c5331c6ad878e2cee6b7ac25e1c7d05746"
1341 | "checksum error-chain 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d9435d864e017c3c6afeac1654189b06cdb491cf2ff73dbf0d73b0f292f42ff8"
1342 | "checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3"
1343 | "checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
1344 | "checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
1345 | "checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
1346 | "checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
1347 | "checksum futures 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)" = "0c84b40c7e2de99ffd70602db314a7a8c26b2b3d830e6f7f7a142a8860ab3ca4"
1348 | "checksum futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4"
1349 | "checksum gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)" = "5e33ec290da0d127825013597dbdfc28bee4964690c7ce1166cbc2a7bd08b1bb"
1350 | "checksum h2 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "a27e7ed946e8335bdf9a191bc1b9b14a03ba822d013d2f58437f4fabcbd7fc2c"
1351 | "checksum html-minifier 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f994b190481219347c266fa6e1c088b1cf73796fb776b3861751b4d2ec5e468d"
1352 | "checksum http 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "24f58e8c2d8e886055c3ead7b28793e1455270b5fb39650984c224bc538ba581"
1353 | "checksum httparse 1.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e8734b0cfd3bc3e101ec59100e101c2eecd19282202e87808b3037b442777a83"
1354 | "checksum hyper 0.12.11 (registry+https://github.com/rust-lang/crates.io-index)" = "78d50abbd1790e0f4c74cb1d4a2211b439bac661d54107ad5564c55e77906762"
1355 | "checksum hyper-tls 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "caaee4dea92794a9e697038bd401e264307d1f22c883dbcb6f6618ba0d3b3bd3"
1356 | "checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e"
1357 | "checksum indexmap 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "08173ba1e906efb6538785a8844dd496f5d34f0a2d88038e95195172fc667220"
1358 | "checksum iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe6e417e7d0975db6512b90796e8ce223145ac4e33c377e4a42882a0e88bb08"
1359 | "checksum itoa 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1306f3464951f30e30d12373d31c79fbd52d236e5e896fd92f96ec7babbbe60b"
1360 | "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
1361 | "checksum lazy_static 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ca488b89a5657b0a2ecd45b95609b3e848cf1755da332a0da46e2b2b1cb371a7"
1362 | "checksum lazycell 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ddba4c30a78328befecec92fc94970e53b3ae385827d28620f0f5bb2493081e0"
1363 | "checksum libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)" = "76e3a3ef172f1a0b9a9ff0dd1491ae5e6c948b94479a3021819ba7d860c8645d"
1364 | "checksum libflate 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)" = "21138fc6669f438ed7ae3559d5789a5f0ba32f28c1f0608d1e452b0bb06ee936"
1365 | "checksum lock_api 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "775751a3e69bde4df9b38dd00a1b5d6ac13791e4223d4a0506577f0dd27cfb7a"
1366 | "checksum log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fcce5fa49cc693c312001daf1d13411c4a5283796bac1084299ea3e567113f"
1367 | "checksum mac-notification-sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6a3639b6caa2db7443e5df80e12c450982f77fc3c140f53d6e48be91f965ea66"
1368 | "checksum macro-utils 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f2c4deaccc2ead6a28c16c0ba82f07d52b6475397415ce40876e559b0b0ea510"
1369 | "checksum malloc_buf 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
1370 | "checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08"
1371 | "checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3"
1372 | "checksum mime 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "4b082692d3f6cf41b453af73839ce3dfc212c4411cbb2441dff80a716e38bd79"
1373 | "checksum mime_guess 2.0.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)" = "30de2e4613efcba1ec63d8133f344076952090c122992a903359be5a4f99c3ed"
1374 | "checksum minifier 0.0.19 (registry+https://github.com/rust-lang/crates.io-index)" = "9908ed7c62f990c21ab41fdca53a864a3ada0da69d8729c4de727b397e27bc11"
1375 | "checksum mio 0.6.16 (registry+https://github.com/rust-lang/crates.io-index)" = "71646331f2619b1026cc302f87a2b8b648d5c6dd6937846a16cc8ce0f347f432"
1376 | "checksum mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "966257a94e196b11bb43aca423754d87429960a768de9414f3691d6957abf125"
1377 | "checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919"
1378 | "checksum native-tls 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8b0a7bd714e83db15676d31caf968ad7318e9cc35f93c85a90231c8f22867549"
1379 | "checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88"
1380 | "checksum nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "9a2228dca57108069a5262f2ed8bd2e82496d2e074a06d1ccc7ce1687b6ae0a2"
1381 | "checksum notify-rust 3.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0e58d0671a337f5616ada6b4fca9d792948c5ab03e6ce9376f9b7f31aa31545c"
1382 | "checksum num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "e83d528d2677f0518c570baf2b7abdcf0cd2d248860b68507bdcb3e91d4c0cea"
1383 | "checksum num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0b3a5d7cc97d6d30d8b9bc8fa19bf45349ffe46241e8816f50f62f6d6aaabee1"
1384 | "checksum num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c51a3322e4bca9d212ad9a158a02abc6934d005490c054a2778df73a70aa0a30"
1385 | "checksum objc 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "9833ab0efe5361b1e2122a0544a5d3359576911a42cb098c2e59be8650807367"
1386 | "checksum objc-foundation 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9"
1387 | "checksum objc_id 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b"
1388 | "checksum openssl 0.10.12 (registry+https://github.com/rust-lang/crates.io-index)" = "5e2e79eede055813a3ac52fb3915caf8e1c9da2dec1587871aec9f6f7b48508d"
1389 | "checksum openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de"
1390 | "checksum openssl-sys 0.9.36 (registry+https://github.com/rust-lang/crates.io-index)" = "409d77eeb492a1aebd6eb322b2ee72ff7c7496b4434d98b3bf8be038755de65e"
1391 | "checksum owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37"
1392 | "checksum parking_lot 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f0802bff09003b291ba756dc7e79313e51cc31667e94afbe847def490424cde5"
1393 | "checksum parking_lot_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ad7f7e6ebdc79edff6fdcb87a55b620174f7a989e3eb31b65231f4af57f00b8c"
1394 | "checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831"
1395 | "checksum phf 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)" = "cec29da322b242f4c3098852c77a0ca261c9c01b806cae85a5572a1eb94db9a6"
1396 | "checksum phf_codegen 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)" = "7d187f00cd98d5afbcd8898f6cf181743a449162aeb329dcd2f3849009e605ad"
1397 | "checksum phf_generator 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)" = "03dc191feb9b08b0dc1330d6549b795b9d81aec19efe6b4a45aec8d4caee0c4b"
1398 | "checksum phf_shared 0.7.23 (registry+https://github.com/rust-lang/crates.io-index)" = "b539898d22d4273ded07f64a05737649dc69095d92cb87c7097ec68e3f150b93"
1399 | "checksum pkg-config 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)" = "676e8eb2b1b4c9043511a9b7bea0915320d7e502b0a079fb03f9635a5252b18c"
1400 | "checksum quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a"
1401 | "checksum rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e464cd887e869cddcae8792a4ee31d23c7edd516700695608f5b98c67ee0131c"
1402 | "checksum rand_core 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "edecf0f94da5551fc9b492093e30b041a891657db7940ee221f9d2f66e82eef2"
1403 | "checksum redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "c214e91d3ecf43e9a4e41e578973adeb14b474f2bee858742d127af75a0112b1"
1404 | "checksum remove_dir_all 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3488ba1b9a2084d38645c4c08276a1752dcbf2c7130d74f1569681ad5d2799c5"
1405 | "checksum reqwest 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1d68c7bf0b1dc3860b80c6d31d05808bf54cdc1bfc70a4680893791becd083ae"
1406 | "checksum rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "bcfe5b13211b4d78e5c2cadfebd7769197d95c639c35a50057eb4c05de811395"
1407 | "checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
1408 | "checksum ryu 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7153dd96dade874ab973e098cb62fcdbb89a03682e46b144fd09550998d4a4a7"
1409 | "checksum safemem 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8dca453248a96cb0749e36ccdfe2b0b4e54a61bfef89fb97ec621eb8e0a93dd9"
1410 | "checksum schannel 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "0e1a231dc10abf6749cfa5d7767f25888d484201accbd919b66ab5413c502d56"
1411 | "checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27"
1412 | "checksum security-framework 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "697d3f3c23a618272ead9e1fb259c1411102b31c6af8b93f1d64cca9c3b0e8e0"
1413 | "checksum security-framework-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ab01dfbe5756785b5b4d46e0289e5a18071dfa9a7c2b24213ea00b9ef9b665bf"
1414 | "checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
1415 | "checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
1416 | "checksum serde 1.0.79 (registry+https://github.com/rust-lang/crates.io-index)" = "84257ccd054dc351472528c8587b4de2dbf0dc0fe2e634030c1a90bfdacebaa9"
1417 | "checksum serde_json 1.0.31 (registry+https://github.com/rust-lang/crates.io-index)" = "bb47a3d5c84320222f66d7db21157c4a7407755de41798f9b4c1c40593397b1a"
1418 | "checksum serde_urlencoded 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "aaed41d9fb1e2f587201b863356590c90c1157495d811430a0c0325fe8169650"
1419 | "checksum siphasher 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0b8de496cf83d4ed58b6be86c3a275b8602f6ffe98d3024a869e124147a9a3ac"
1420 | "checksum slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5f9776d6b986f77b35c6cf846c11ad986ff128fe0b2b63a3628e3755e8d3102d"
1421 | "checksum smallvec 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "153ffa32fd170e9944f7e0838edf824a754ec4c1fc64746fcc9fe1f8fa602e5d"
1422 | "checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8"
1423 | "checksum string 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00caf261d6f90f588f8450b8e1230fa0d5be49ee6140fdfbcb55335aff350970"
1424 | "checksum strum 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4ca6e4730f517e041e547ffe23d29daab8de6b73af4b6ae2a002108169f5e7da"
1425 | "checksum strum_macros 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3384590878eb0cab3b128e844412e2d010821e7e091211b9d87324173ada7db8"
1426 | "checksum syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad"
1427 | "checksum synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6"
1428 | "checksum tempfile 3.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "55c1195ef8513f3273d55ff59fe5da6940287a0d7a98331254397f464833675b"
1429 | "checksum time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "d825be0eb33fda1a7e68012d51e9c7f451dc1a69391e7fdc197060bb8c56667b"
1430 | "checksum tokio 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "6e93c78d23cc61aa245a8acd2c4a79c4d7fa7fb5c3ca90d5737029f043a84895"
1431 | "checksum tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5c501eceaf96f0e1793cf26beb63da3d11c738c4a943fdf3746d81d64684c39f"
1432 | "checksum tokio-current-thread 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "f90fcd90952f0a496d438a976afba8e5c205fb12123f813d8ab3aa1c8436638c"
1433 | "checksum tokio-executor 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "c117b6cf86bb730aab4834f10df96e4dd586eff2c3c27d3781348da49e255bde"
1434 | "checksum tokio-fs 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "b5cbe4ca6e71cb0b62a66e4e6f53a8c06a6eefe46cc5f665ad6f274c9906f135"
1435 | "checksum tokio-io 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "8b8a85fffbec3c5ab1ab62324570230dcd37ee5996a7859da5caf7b9d45e3e8c"
1436 | "checksum tokio-reactor 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "4b26fd37f1125738b2170c80b551f69ff6fecb277e6e5ca885e53eec2b005018"
1437 | "checksum tokio-tcp 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7ad235e9dadd126b2d47f6736f65aa1fdcd6420e66ca63f44177bc78df89f912"
1438 | "checksum tokio-threadpool 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "bbd8a8b911301c60cbfaa2a6588fb210e5c1038375b8bdecc47aa09a94c3c05f"
1439 | "checksum tokio-timer 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "3a52f00c97fedb6d535d27f65cccb7181c8dd4c6edc3eda9ea93f6d45d05168e"
1440 | "checksum tokio-udp 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "da941144b816d0dcda4db3a1ba87596e4df5e860a72b70783fe435891f80601c"
1441 | "checksum tokio-uds 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "22e3aa6d1fcc19e635418dc0a30ab5bd65d347973d6f43f1a37bf8d9d1335fc9"
1442 | "checksum toml 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)" = "b7e7d59d55f36979a9dd86d71ae54657a5e9c7fdb4fa2212f4064e2d32f9dcda"
1443 | "checksum try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382"
1444 | "checksum unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33"
1445 | "checksum unicase 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "284b6d3db520d67fbe88fd778c21510d1b0ba4a551e5d0fbb023d33405f6de8a"
1446 | "checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5"
1447 | "checksum unicode-normalization 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "6a0180bc61fc5a987082bfa111f4cc95c4caff7f9799f3e46df09163a937aa25"
1448 | "checksum unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc"
1449 | "checksum unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56"
1450 | "checksum url 1.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2a321979c09843d272956e73700d12c4e7d3d92b2ee112b31548aef0d4efc5a6"
1451 | "checksum urlencoding 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3df3561629a8bb4c57e5a2e4c43348d9e29c7c29d9b1c4c1f47166deca8f37ed"
1452 | "checksum user32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4ef4711d107b21b410a3a974b1204d9accc8b10dad75d8324b5d755de1617d47"
1453 | "checksum uuid 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dab5c5526c5caa3d106653401a267fed923e7046f35895ffcb5ca42db64942e6"
1454 | "checksum vcpkg 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "def296d3eb3b12371b2c7d0e83bfe1403e4db2d7a0bba324a12b21c4ee13143d"
1455 | "checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd"
1456 | "checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
1457 | "checksum want 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "797464475f30ddb8830cc529aaaae648d581f99e2036a928877dfde027ddf6b3"
1458 | "checksum web-view 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ce816fef17af3518d15417a2ca31076ce720704fd91f1aa9a2807b8ce933dc9f"
1459 | "checksum webview-sys 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cf132b1194e12c43eb22cb73a93d7a258d2c0bf73e638e2f0de21f5016a783e4"
1460 | "checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
1461 | "checksum winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "92c1eb33641e276cfa214a0522acad57be5c56b10cb348b3c5117db75f3ac4b0"
1462 | "checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
1463 | "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
1464 | "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
1465 | "checksum winres 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "f07dabda4e79413ecac65bc9a2234ad3d85dc49f9d289f868cd9d8611d88f28d"
1466 | "checksum winrt 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7e30cba82e22b083dc5a422c2ee77e20dc7927271a0dc981360c57c1453cb48d"
1467 | "checksum winrt 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0c4c01eac5a45f4fcb31db47886257ff0b0ec8958b581ff841b0d992a7e97f94"
1468 | "checksum winrt-notification 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6c31a65da50d792c6f9bd2e3216249566c4fb1d2d34f9b7d2d66d2e93f62a242"
1469 | "checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
1470 | "checksum xml-rs 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e1945e12e16b951721d7976520b0832496ef79c31602c7a29d950de79ba74621"
1471 |
--------------------------------------------------------------------------------
/Cargo.toml:
--------------------------------------------------------------------------------
1 | #
2 | # kyo-rs - Rust rewrite of kyo, a modern osu! server switcher
3 | # Copyright (C) 2018 Marc3842h
4 | #
5 | # This program is free software: you can redistribute it and/or modify
6 | # it under the terms of the GNU Lesser General Public License as published
7 | # by the Free Software Foundation, either version 3 of the License, or
8 | # (at your option) any later version.
9 | #
10 | # This program is distributed in the hope that it will be useful,
11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | # GNU Lesser General Public License for more details.
14 | #
15 | # You should have received a copy of the GNU Lesser General Public License
16 | # along with this program. If not, see .
17 | #
18 |
19 | [package]
20 | name = "kyo-rs"
21 | version = "0.0.1"
22 | authors = [ "Marc3842h " ]
23 | readme = "README.md"
24 | publish = false
25 | build = "build.rs"
26 |
27 | [dependencies]
28 | web-view = "0.2.1"
29 | serde_json = "1.0.31"
30 | libc = "0.2.43"
31 | hyper = "0.12.11"
32 | reqwest = "0.9.2"
33 |
34 | [build-dependencies]
35 | html-minifier = "1.1.2"
36 | base64 = "0.9.3"
37 |
38 | [target.'cfg(windows)'.dependencies]
39 | winapi = { version = "0.3.6", features = [ "shellapi", "wincrypt" ] }
40 | user32-sys = "0.2.0"
41 | winrt = { version = "0.5.1", features = [ "windows-data", "windows-ui" ] }
42 | winrt-notification = "0.2.2"
43 |
44 | [target.'cfg(windows)'.build-dependencies]
45 | winres = "0.1.6"
46 |
47 | [target.'cfg(unix)'.dependencies]
48 | notify-rust = "3.4.2"
49 |
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | GNU LESSER GENERAL PUBLIC LICENSE
2 | Version 3, 29 June 2007
3 |
4 | Copyright (C) 2007 Free Software Foundation, Inc.
5 | Everyone is permitted to copy and distribute verbatim copies
6 | of this license document, but changing it is not allowed.
7 |
8 |
9 | This version of the GNU Lesser General Public License incorporates
10 | the terms and conditions of version 3 of the GNU General Public
11 | License, supplemented by the additional permissions listed below.
12 |
13 | 0. Additional Definitions.
14 |
15 | As used herein, "this License" refers to version 3 of the GNU Lesser
16 | General Public License, and the "GNU GPL" refers to version 3 of the GNU
17 | General Public License.
18 |
19 | "The Library" refers to a covered work governed by this License,
20 | other than an Application or a Combined Work as defined below.
21 |
22 | An "Application" is any work that makes use of an interface provided
23 | by the Library, but which is not otherwise based on the Library.
24 | Defining a subclass of a class defined by the Library is deemed a mode
25 | of using an interface provided by the Library.
26 |
27 | A "Combined Work" is a work produced by combining or linking an
28 | Application with the Library. The particular version of the Library
29 | with which the Combined Work was made is also called the "Linked
30 | Version".
31 |
32 | The "Minimal Corresponding Source" for a Combined Work means the
33 | Corresponding Source for the Combined Work, excluding any source code
34 | for portions of the Combined Work that, considered in isolation, are
35 | based on the Application, and not on the Linked Version.
36 |
37 | The "Corresponding Application Code" for a Combined Work means the
38 | object code and/or source code for the Application, including any data
39 | and utility programs needed for reproducing the Combined Work from the
40 | Application, but excluding the System Libraries of the Combined Work.
41 |
42 | 1. Exception to Section 3 of the GNU GPL.
43 |
44 | You may convey a covered work under sections 3 and 4 of this License
45 | without being bound by section 3 of the GNU GPL.
46 |
47 | 2. Conveying Modified Versions.
48 |
49 | If you modify a copy of the Library, and, in your modifications, a
50 | facility refers to a function or data to be supplied by an Application
51 | that uses the facility (other than as an argument passed when the
52 | facility is invoked), then you may convey a copy of the modified
53 | version:
54 |
55 | a) under this License, provided that you make a good faith effort to
56 | ensure that, in the event an Application does not supply the
57 | function or data, the facility still operates, and performs
58 | whatever part of its purpose remains meaningful, or
59 |
60 | b) under the GNU GPL, with none of the additional permissions of
61 | this License applicable to that copy.
62 |
63 | 3. Object Code Incorporating Material from Library Header Files.
64 |
65 | The object code form of an Application may incorporate material from
66 | a header file that is part of the Library. You may convey such object
67 | code under terms of your choice, provided that, if the incorporated
68 | material is not limited to numerical parameters, data structure
69 | layouts and accessors, or small macros, inline functions and templates
70 | (ten or fewer lines in length), you do both of the following:
71 |
72 | a) Give prominent notice with each copy of the object code that the
73 | Library is used in it and that the Library and its use are
74 | covered by this License.
75 |
76 | b) Accompany the object code with a copy of the GNU GPL and this license
77 | document.
78 |
79 | 4. Combined Works.
80 |
81 | You may convey a Combined Work under terms of your choice that,
82 | taken together, effectively do not restrict modification of the
83 | portions of the Library contained in the Combined Work and reverse
84 | engineering for debugging such modifications, if you also do each of
85 | the following:
86 |
87 | a) Give prominent notice with each copy of the Combined Work that
88 | the Library is used in it and that the Library and its use are
89 | covered by this License.
90 |
91 | b) Accompany the Combined Work with a copy of the GNU GPL and this license
92 | document.
93 |
94 | c) For a Combined Work that displays copyright notices during
95 | execution, include the copyright notice for the Library among
96 | these notices, as well as a reference directing the user to the
97 | copies of the GNU GPL and this license document.
98 |
99 | d) Do one of the following:
100 |
101 | 0) Convey the Minimal Corresponding Source under the terms of this
102 | License, and the Corresponding Application Code in a form
103 | suitable for, and under terms that permit, the user to
104 | recombine or relink the Application with a modified version of
105 | the Linked Version to produce a modified Combined Work, in the
106 | manner specified by section 6 of the GNU GPL for conveying
107 | Corresponding Source.
108 |
109 | 1) Use a suitable shared library mechanism for linking with the
110 | Library. A suitable mechanism is one that (a) uses at run time
111 | a copy of the Library already present on the user's computer
112 | system, and (b) will operate properly with a modified version
113 | of the Library that is interface-compatible with the Linked
114 | Version.
115 |
116 | e) Provide Installation Information, but only if you would otherwise
117 | be required to provide such information under section 6 of the
118 | GNU GPL, and only to the extent that such information is
119 | necessary to install and execute a modified version of the
120 | Combined Work produced by recombining or relinking the
121 | Application with a modified version of the Linked Version. (If
122 | you use option 4d0, the Installation Information must accompany
123 | the Minimal Corresponding Source and Corresponding Application
124 | Code. If you use option 4d1, you must provide the Installation
125 | Information in the manner specified by section 6 of the GNU GPL
126 | for conveying Corresponding Source.)
127 |
128 | 5. Combined Libraries.
129 |
130 | You may place library facilities that are a work based on the
131 | Library side by side in a single library together with other library
132 | facilities that are not Applications and are not covered by this
133 | License, and convey such a combined library under terms of your
134 | choice, if you do both of the following:
135 |
136 | a) Accompany the combined library with a copy of the same work based
137 | on the Library, uncombined with any other library facilities,
138 | conveyed under the terms of this License.
139 |
140 | b) Give prominent notice with the combined library that part of it
141 | is a work based on the Library, and explaining where to find the
142 | accompanying uncombined form of the same work.
143 |
144 | 6. Revised Versions of the GNU Lesser General Public License.
145 |
146 | The Free Software Foundation may publish revised and/or new versions
147 | of the GNU Lesser General Public License from time to time. Such new
148 | versions will be similar in spirit to the present version, but may
149 | differ in detail to address new problems or concerns.
150 |
151 | Each version is given a distinguishing version number. If the
152 | Library as you received it specifies that a certain numbered version
153 | of the GNU Lesser General Public License "or any later version"
154 | applies to it, you have the option of following the terms and
155 | conditions either of that published version or of any later version
156 | published by the Free Software Foundation. If the Library as you
157 | received it does not specify a version number of the GNU Lesser
158 | General Public License, you may choose any version of the GNU Lesser
159 | General Public License ever published by the Free Software Foundation.
160 |
161 | If the Library as you received it specifies that a proxy can decide
162 | whether future versions of the GNU Lesser General Public License shall
163 | apply, that proxy's public statement of acceptance of any version is
164 | permanent authorization for you to choose that version for the
165 | Library.
166 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # kyo-rs
2 |
3 | The next generation of kyo, a fully featured and modern
4 | osu! server switcher - fully rewritten from ground up in Rust.
5 |
6 | 
7 |
--------------------------------------------------------------------------------
/build.rs:
--------------------------------------------------------------------------------
1 | /*
2 | * kyo-rs - Rust rewrite of kyo, a modern osu! server switcher
3 | * Copyright (C) 2018 Marc3842h
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU Lesser General Public License as published
7 | * by the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU Lesser General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU Lesser General Public License
16 | * along with this program. If not, see .
17 | */
18 |
19 | extern crate base64;
20 | extern crate html_minifier;
21 |
22 | #[cfg(windows)]
23 | extern crate winres;
24 |
25 | fn main() {
26 | // Minify and pack frontend .html, .css and .js files (as well as backgrounds and stuff)
27 | let css = "";
28 | let js = "";
29 | let background_jpg = "data:image/jpeg;base64,".to_owned() + include_str!("resources/img/background.jpg.base64");
30 | let button_svg = "data:image/svg+xml;base64,".to_owned() + &base64::encode(include_str!("resources/img/button.svg"));
31 |
32 | let fixed_css = &str::replace(include_str!("resources/index.html"), r#""#, css.as_str());
33 | let fixed_js = &str::replace(fixed_css, r#""#, js.as_str());
34 | let fixed_bg = &str::replace(fixed_js, r#"img/background.jpg"#, background_jpg.as_str());
35 | let fixed_btn = &str::replace(fixed_bg, r#"img/button.svg"#, button_svg.as_str());
36 |
37 | let mut minifier = html_minifier::HTMLMinifier::new();
38 | minifier.digest(fixed_btn).unwrap();
39 |
40 | let html: String = minifier.get_html().chars().skip(5).collect();
41 |
42 | std::fs::write("resources/index.include.html", html).unwrap();
43 |
44 | // Set Windows manifest
45 | install_manifest();
46 | }
47 |
48 | #[cfg(windows)]
49 | fn install_manifest() {
50 | let mut res = winres::WindowsResource::new();
51 |
52 | res.set_manifest(include_str!("resources/manifest.xml"));
53 | //res.set_icon("resources/icon.ico");
54 |
55 | res.compile().unwrap();
56 | }
57 |
58 | #[cfg(unix)]
59 | fn install_manifest() {
60 |
61 | }
62 |
--------------------------------------------------------------------------------
/resources/img/background.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mellowagain/kyo-rs/9831168ff7bfb837983c275880f503bae552edf5/resources/img/background.jpg
--------------------------------------------------------------------------------
/resources/img/button.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
78 |
--------------------------------------------------------------------------------
/resources/index.css:
--------------------------------------------------------------------------------
1 | /*
2 | * kyo-rs - Rust rewrite of kyo, a modern osu! server switcher
3 | * Copyright (C) 2018 Marc3842h, czapek
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU Lesser General Public License as published
7 | * by the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU Lesser General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU Lesser General Public License
16 | * along with this program. If not, see .
17 | */
18 |
19 | * {
20 | margin: 0;
21 | padding: 0;
22 | -webkit-touch-callout: none;
23 | -webkit-user-select: none;
24 | -khtml-user-select: none;
25 | -moz-user-select: none;
26 | -ms-user-select: none;
27 | user-select: none;
28 | }
29 |
30 | body {
31 | background: #222;
32 | font-family: "Exo 2", sans-serif;
33 | user-select: none;
34 | }
35 |
36 | .background {
37 | position: absolute;
38 | width: 100%;
39 | height: 100%;
40 | top: 50%;
41 | left: 50%;
42 | transform: translate(-50%, -50%);
43 | background-size: cover;
44 | background: url("img/background.jpg") center center;
45 | }
46 |
47 | .background-overlay {
48 | position: absolute;
49 | width: 100%;
50 | height: 100%;
51 | top: 50%;
52 | left: 50%;
53 | transform: translate(-50%, -50%);
54 | background: rgba(0, 0, 0, 0.75);
55 | }
56 |
57 | .content {
58 | position: absolute;
59 | top: 50%;
60 | left: 50%;
61 | transform: translate(-50%, -50%);
62 | width: 260px;
63 | }
64 |
65 | .content .button {
66 | cursor: pointer;
67 | color: #fff;
68 | border-radius: 6px;
69 | background-size: 175%;
70 | background: url("img/button.svg") 50%;
71 | font-size: 12px;
72 | font-weight: 700;
73 | margin: 10px 0 3px;
74 | padding: 10px 20px;
75 | display: -webkit-box;
76 | display: -ms-flexbox;
77 | display: flex;
78 | -webkit-transition: all .12s ease-in-out;
79 | transition: all .12s ease-in-out;
80 | -webkit-transform: translateZ(0);
81 | transform: translateZ(0);
82 | }
83 |
84 | .button.pink {
85 | background-color: #b17;
86 | -webkit-box-shadow: 0 3px #8c0d59, 0 4px 3px rgba(0,0,0,.25);
87 | box-shadow: 0 3px #8c0d59, 0 4px 3px rgba(0,0,0,.25);
88 | }
89 |
90 | .button.blue {
91 | background-color: #29b;
92 | -webkit-box-shadow: 0 3px #1a7690,0 4px 3px rgba(0,0,0,.25);
93 | box-shadow: 0 3px #1a7690,0 4px 3px rgba(0,0,0,.25)
94 | }
95 |
96 | .button.pink:focus {
97 | background: #d21386 calc(50% - 10px) 50%;
98 | }
99 |
100 | .button.blue:focus {
101 | background: #26abd1 calc(50% - 10px) 50%;
102 | }
103 |
104 | .button.pink:hover {
105 | background: #ea1595 calc(50% - 20px) 50%;
106 | }
107 |
108 | .button.pink:active {
109 | -webkit-transform: translateY(2px);
110 | transform: translateY(2px);
111 | background-position: calc(50% - 20px) 50%;
112 | -webkit-box-shadow: 0 1px #8c0d59,0 2px 3px rgba(0,0,0,.25);
113 | box-shadow: 0 1px #8c0d59,0 2px 3px rgba(0,0,0,.25)
114 | }
115 |
116 | .button.blue:hover {
117 | background-color: #36b6da
118 | }
119 |
120 | .button.blue:active,.button.blue:hover {
121 | background-position: calc(50% - 20px) 50%
122 | }
123 |
124 | .button.blue:active {
125 | -webkit-transform: translateY(2px);
126 | transform: translateY(2px);
127 | -webkit-box-shadow: 0 1px #1a7690,0 2px 3px rgba(0,0,0,.25);
128 | box-shadow: 0 1px #1a7690,0 2px 3px rgba(0,0,0,.25)
129 | }
130 |
131 | .button.green {
132 | background-color: #88b300;
133 | -webkit-box-shadow: 0 3px #618000,0 4px 3px rgba(0,0,0,.25);
134 | box-shadow: 0 3px #618000,0 4px 3px rgba(0,0,0,.25)
135 | }
136 |
137 | .button.green:focus {
138 | background: #9bcc00 calc(50% - 10px) 50%;
139 | }
140 |
141 | .button.green:hover {
142 | background: #afe600 calc(50% - 20px) 50%;
143 | }
144 |
145 | .button.green:active {
146 | -webkit-transform: translateY(2px);
147 | transform: translateY(2px);
148 | background-position: calc(50% - 20px) 50%;
149 | -webkit-box-shadow: 0 1px #618000,0 2px 3px rgba(0,0,0,.25);
150 | box-shadow: 0 1px #618000,0 2px 3px rgba(0,0,0,.25)
151 | }
152 |
153 | .button span.text {
154 | -webkit-box-flex: 1;
155 | -ms-flex: 1;
156 | flex: 1;
157 | }
158 |
159 | .button span.icon {
160 | font-size: 150%;
161 | -webkit-box-flex: 0;
162 | -ms-flex: none;
163 | flex: none;
164 | line-height: 0.1;
165 | }
166 |
167 | .input {
168 | margin-bottom: 30px;
169 | margin-left: auto;
170 | }
171 |
172 | .input input {
173 | border-radius: 4px;
174 | background-color: rgba(0,0,0,.5);
175 | padding: 10px;
176 | text-align: center;
177 | -webkit-transition: all .12s ease-in-out;
178 | transition: all .12s ease-in-out;
179 | width: 90%;
180 | font-family: "Noto Sans", sans-serif;
181 | outline: none;
182 | border: 2px solid #fc2;
183 | color: #fff;
184 | }
185 |
186 | .input.shake {
187 | animation: shake 0.82s cubic-bezier(.36,.07,.19,.97) both;
188 | }
189 |
190 | @keyframes shake {
191 | 10%, 90% {
192 | transform: translate3d(-1px, 0, 0);
193 | }
194 |
195 | 20%, 80% {
196 | transform: translate3d(2px, 0, 0);
197 | }
198 |
199 | 30%, 50%, 70% {
200 | transform: translate3d(-4px, 0, 0);
201 | }
202 |
203 | 40%, 60% {
204 | transform: translate3d(4px, 0, 0);
205 | }
206 | }
207 |
--------------------------------------------------------------------------------
/resources/index.html:
--------------------------------------------------------------------------------
1 |
20 |
21 |
22 |
23 |
24 | kyo-rs
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
40 |
41 |
42 | Switch to Shiro
43 |
44 |
45 |
46 |
47 |
48 | Install certificate
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
--------------------------------------------------------------------------------
/resources/index.js:
--------------------------------------------------------------------------------
1 | /*
2 | * kyo-rs - Rust rewrite of kyo, a modern osu! server switcher
3 | * Copyright (C) 2018 Marc3842h, czapek
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU Lesser General Public License as published
7 | * by the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU Lesser General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU Lesser General Public License
16 | * along with this program. If not, see .
17 | */
18 |
19 | // Invoked by frontend
20 |
21 | function updateData() {
22 | invokeBackend(
23 | {
24 | cmd: "update"
25 | }
26 | );
27 | }
28 |
29 | function connectShiro() {
30 | invokeBackend(
31 | {
32 | cmd: "connect",
33 | address: document.getElementById("connect-address").value
34 | }
35 | );
36 | }
37 |
38 | function connectBancho() {
39 | invokeBackend(
40 | {
41 | cmd: "disconnect"
42 | }
43 | );
44 | }
45 |
46 | function installCertificate() {
47 | invokeBackend(
48 | {
49 | cmd: "install"
50 | }
51 | );
52 | }
53 |
54 | function invokeBackend(args) {
55 | window.external.invoke(JSON.stringify(args));
56 | }
57 |
58 | // Invoked by backend
59 |
60 | function toggleConnectButton() {
61 | let connectButton = document.getElementById("btn-connect");
62 |
63 | connectButton.classList.toggle("pink");
64 | connectButton.classList.toggle("blue");
65 |
66 | // We just switched to Shiro
67 | if (connectButton.classList.contains("blue")) {
68 | document.getElementById("text-connect").innerHTML = "Switch to Bancho";
69 | document.getElementById("icon-switch").className = "fas fa-unlink";
70 | connectButton.onclick = connectBancho;
71 | }
72 |
73 | // We just switched back to Bancho
74 | if (connectButton.classList.contains("pink")) {
75 | document.getElementById("text-connect").innerHTML = "Switch to Shiro";
76 | document.getElementById("icon-switch").className = "fas fa-sync-alt";
77 | connectButton.onclick = connectShiro;
78 | }
79 | }
80 |
81 | function displayError() {
82 | let input = document.getElementById("input-address");
83 | input.classList.add("shake");
84 |
85 | setTimeout(function() {
86 | input.classList.remove("shake");
87 | }, 820);
88 | }
89 |
90 | // Listeners
91 |
92 | let previousValue = "";
93 |
94 | document.onkeydown = function (event) {
95 | event = event || window.event;
96 |
97 | if (event.keyCode === 17) {
98 | previousValue = document.getElementById("connect-address").value;
99 | document.getElementById("connect-address").value = "127.0.0.1";
100 | }
101 | };
102 |
103 | document.onkeyup = function (event) {
104 | event = event || window.event;
105 |
106 | if (event.keyCode === 17) {
107 | document.getElementById("connect-address").value = previousValue;
108 | }
109 | };
110 |
111 | // Init
112 |
113 | updateData();
114 | document.getElementById("connect-address").focus();
115 |
--------------------------------------------------------------------------------
/resources/manifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/src/cert.rs:
--------------------------------------------------------------------------------
1 | /*
2 | * kyo-rs - Rust rewrite of kyo, a modern osu! server switcher
3 | * Copyright (C) 2018 Marc3842h
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU Lesser General Public License as published
7 | * by the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU Lesser General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU Lesser General Public License
16 | * along with this program. If not, see .
17 | */
18 |
19 | extern crate std;
20 | extern crate hyper;
21 | extern crate reqwest;
22 |
23 | use std::io::Read;
24 |
25 | pub fn install_cert() {
26 | std::thread::spawn(move || {
27 | if download_cert() {
28 | super::utils::send_notify("Certificate has been successfully installed.");
29 | }
30 | });
31 | }
32 |
33 | fn download_cert() -> bool {
34 | let mut response = reqwest::get(super::CERT_URL).unwrap();
35 |
36 | if !response.status().is_success() {
37 | super::utils::send_notify(format!(
38 | "Certificate could not be downloaded. Remote server returned {}.", response.status()
39 | ).as_str());
40 |
41 | return false;
42 | }
43 |
44 | let mut content = String::new();
45 | response.read_to_string(&mut content).expect("Unable to read response.");
46 |
47 | super::utils::install_cert(content.as_str());
48 |
49 | return true;
50 | }
51 |
--------------------------------------------------------------------------------
/src/hosts.rs:
--------------------------------------------------------------------------------
1 | /*
2 | * kyo-rs - Rust rewrite of kyo, a modern osu! server switcher
3 | * Copyright (C) 2018 Marc3842h
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU Lesser General Public License as published
7 | * by the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU Lesser General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU Lesser General Public License
16 | * along with this program. If not, see .
17 | */
18 |
19 | extern crate std;
20 | extern crate reqwest;
21 |
22 | use std::io::BufRead;
23 |
24 | #[cfg(windows)]
25 | static HOSTS_PATH: &'static str = r#"C:\Windows\System32\drivers\etc\hosts"#;
26 | #[cfg(windows)]
27 | static NEW_LINE: &'static str = "\r\n";
28 |
29 | #[cfg(unix)]
30 | static HOSTS_PATH: &'static str = r#"/etc/hosts"#;
31 | #[cfg(unix)]
32 | static NEW_LINE: &'static str = "\n";
33 |
34 | pub fn overwrite(address: &str) -> bool {
35 | let mut changed_perms = false;
36 |
37 | if address.is_empty() {
38 | super::utils::send_notify("Target address is empty.");
39 | return false;
40 | }
41 |
42 | if is_connected() {
43 | super::utils::send_notify("You are already connected.");
44 | return true;
45 | }
46 |
47 | if is_read_only(HOSTS_PATH) {
48 | set_read_only(HOSTS_PATH, false);
49 | changed_perms = true;
50 | }
51 |
52 | let full_url_str_shiro = "http://".to_owned() + super::SHIRO_IP;
53 | let full_url_str_mirror = "http://".to_owned() + super::MIRROR_IP;
54 |
55 | let full_url_shiro: &str = full_url_str_shiro.as_str();
56 | let full_url_mirror: &str = full_url_str_mirror.as_str();
57 |
58 | let response_shiro = reqwest::get(full_url_shiro).unwrap();
59 | let response_mirror = reqwest::get(full_url_mirror).unwrap();
60 |
61 | if !response_shiro.status().is_success() || !response_mirror.status().is_success() {
62 | super::utils::send_notify("The server or the beatmap mirror is currently offline.");
63 | return false;
64 | }
65 |
66 | // 1. Remove all other entries for ppy.sh
67 | // 2. Add new entry for ppy.sh
68 | let lines = read_file_lines(HOSTS_PATH);
69 | let mut hosts = lines.clone();
70 |
71 | for (i, line) in lines.iter().enumerate() {
72 | if !line.starts_with("#") && line.contains("ppy.sh") {
73 | hosts[i] = "#".to_owned() + line;
74 | }
75 | }
76 |
77 | hosts.push("# Added by kyo-rs, a modern osu! server switcher".to_owned());
78 | hosts.push(format!("{} osu.ppy.sh", address));
79 | hosts.push(format!("{} c.ppy.sh", address));
80 | hosts.push(format!("{} ce.ppy.sh", address));
81 |
82 | for i in 1..7 {
83 | if i == 2 {
84 | continue;
85 | }
86 |
87 | hosts.push(format!("{} c{}.ppy.sh", address, i));
88 | }
89 |
90 | hosts.push(format!("{} a.ppy.sh", address));
91 | hosts.push(format!("{} i.ppy.sh", address));
92 |
93 | for i in 4..7 {
94 | hosts.push(format!("{} bm{}.ppy.sh", super::MIRROR_IP, i));
95 | }
96 |
97 |
98 | hosts.push(NEW_LINE.to_owned());
99 |
100 | let result = hosts.join(NEW_LINE);
101 |
102 | let file = std::fs::File::create(HOSTS_PATH).unwrap();
103 | file.set_len(0).unwrap();
104 |
105 | std::fs::write(HOSTS_PATH, result).unwrap();
106 |
107 | if changed_perms {
108 | set_read_only(HOSTS_PATH, true);
109 | }
110 |
111 | return true;
112 | }
113 |
114 | pub fn revert() -> bool {
115 | let mut changed_perms = false;
116 |
117 | if !is_connected() {
118 | super::utils::send_notify("You are already disconnected.");
119 | return true;
120 | }
121 |
122 | if is_read_only(HOSTS_PATH) {
123 | set_read_only(HOSTS_PATH, false);
124 | changed_perms = true;
125 | }
126 |
127 | let lines = read_file_lines(HOSTS_PATH);
128 | let mut hosts = lines.clone();
129 |
130 | for (i, line) in lines.iter().enumerate() {
131 | if line.starts_with("#") && line.contains("kyo-rs") {
132 | for j in i..(i + 8) {
133 | hosts[j] = "removed by kyo-rs".to_owned();
134 | }
135 |
136 | break;
137 | }
138 | }
139 |
140 | hosts.retain(|s| s != "removed by kyo-rs");
141 |
142 | let result = hosts.join(NEW_LINE);
143 |
144 | let file = std::fs::File::create(HOSTS_PATH).unwrap();
145 | file.set_len(0).unwrap();
146 |
147 | std::fs::write(HOSTS_PATH, result).unwrap();
148 |
149 | if changed_perms {
150 | set_read_only(HOSTS_PATH, true);
151 | }
152 |
153 | return true;
154 | }
155 |
156 | pub fn is_connected() -> bool {
157 | let file = std::fs::File::open(HOSTS_PATH).unwrap();
158 |
159 | for content in std::io::BufReader::new(file).lines() {
160 | let unwrapped = content.unwrap();
161 | let line = unwrapped.as_str();
162 |
163 | if line.starts_with("#") || !line.contains("ppy.sh") {
164 | continue;
165 | }
166 |
167 | if line.contains(super::SHIRO_IP) || line.contains(super::MIRROR_IP) {
168 | return true;
169 | }
170 | }
171 |
172 | return false;
173 | }
174 |
175 | fn is_read_only(file: &str) -> bool {
176 | let perms = std::fs::metadata(file).unwrap().permissions();
177 | return perms.readonly();
178 | }
179 |
180 | fn set_read_only(file: &str, read_only: bool) {
181 | let mut perms = std::fs::metadata(file).unwrap().permissions();
182 | perms.set_readonly(read_only);
183 | std::fs::set_permissions(file, perms).unwrap();
184 | }
185 |
186 | fn read_file_lines
(filename: P) -> Vec where P: AsRef, {
187 | let file = std::fs::File::open(filename).unwrap();
188 | let buf = std::io::BufReader::new(file);
189 | buf.lines()
190 | .map(|l| l.unwrap())
191 | .collect()
192 | }
193 |
--------------------------------------------------------------------------------
/src/main.rs:
--------------------------------------------------------------------------------
1 | /*
2 | * kyo-rs - Rust rewrite of kyo, a modern osu! server switcher
3 | * Copyright (C) 2018 Marc3842h
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU Lesser General Public License as published
7 | * by the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU Lesser General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU Lesser General Public License
16 | * along with this program. If not, see .
17 | */
18 |
19 | extern crate web_view;
20 | extern crate serde_json;
21 |
22 | #[cfg(windows)]
23 | extern crate winrt_notification;
24 | #[cfg(windows)]
25 | extern crate winapi;
26 |
27 | mod cert;
28 | mod hosts;
29 | mod platform_utils;
30 |
31 | #[cfg(windows)]
32 | use platform_utils::win32 as utils;
33 |
34 | #[cfg(unix)]
35 | use platform_utils::nix as utils;
36 |
37 | static SHIRO_IP: &'static str = r#"209.97.182.162"#;
38 | static MIRROR_IP: &'static str = r#"209.97.182.162"#; // Won't be displayed to user but put in hosts regardless
39 | static CERT_URL: &'static str = r#"https://shiro.host/cert.pem"#;
40 | static RESULT_CERT_NAME: &'static str = r#"shiro.crt"#; // Always needs to end in .crt
41 | static CONTENT: &'static str = include_str!("../resources/index.include.html");
42 |
43 | fn main() {
44 | if !utils::is_root() {
45 | utils::send_notify("Please run this program with elevated permissions. (Administrator or root)");
46 | std::process::exit(1);
47 | }
48 |
49 | let user_data = ();
50 |
51 | web_view::run(
52 | "kyo-rs",
53 | web_view::Content::Html(CONTENT),
54 | Some((400, 260)),
55 | false,
56 | true,
57 | move |_web_view| {},
58 | move |web_view, args, _user_data| {
59 | let json: serde_json::Value = serde_json::from_str(args).unwrap();
60 | let cmd = json["cmd"].as_str().unwrap();
61 | let address = json["address"].as_str().unwrap_or_default();
62 |
63 | match cmd {
64 | "update" => {
65 | let connected = hosts::is_connected();
66 | let connect_address = format!("document.getElementById('connect-address').value = '{}';", SHIRO_IP);
67 | let button_changer = if connected { "toggleConnectButton();" } else { "" };
68 |
69 | let js = &format!("{}{}", connect_address, button_changer);
70 | web_view.eval(js);
71 | }
72 | "connect" => {
73 | web_view.eval(if hosts::overwrite(address) { "toggleConnectButton();" } else { "displayError();" });
74 | }
75 | "disconnect" => {
76 | web_view.eval(if hosts::revert() { "toggleConnectButton();" } else { "displayError();" });
77 | }
78 | "install" => {
79 | cert::install_cert();
80 | }
81 | _ => unimplemented!()
82 | }
83 | },
84 | user_data
85 | );
86 | }
87 |
--------------------------------------------------------------------------------
/src/platform_utils/mod.rs:
--------------------------------------------------------------------------------
1 | /*
2 | * kyo-rs - Rust rewrite of kyo, a modern osu! server switcher
3 | * Copyright (C) 2018 Marc3842h
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU Lesser General Public License as published
7 | * by the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU Lesser General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU Lesser General Public License
16 | * along with this program. If not, see .
17 | */
18 |
19 | use RESULT_CERT_NAME;
20 |
21 | #[cfg(windows)]
22 | pub mod win32;
23 |
24 | #[cfg(unix)]
25 | pub mod nix;
26 |
--------------------------------------------------------------------------------
/src/platform_utils/nix.rs:
--------------------------------------------------------------------------------
1 | /*
2 | * kyo-rs - Rust rewrite of kyo, a modern osu! server switcher
3 | * Copyright (C) 2018 Marc3842h
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU Lesser General Public License as published
7 | * by the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU Lesser General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU Lesser General Public License
16 | * along with this program. If not, see .
17 | */
18 |
19 | extern crate std;
20 | extern crate libc;
21 | extern crate notify_rust;
22 |
23 | pub fn is_root() -> bool {
24 | unsafe {
25 | libc::getuid() == 0
26 | }
27 | }
28 |
29 | pub fn install_cert(cert: &str) {
30 | let fmt_path = format!(
31 | "/etc/ca-certificates/trust-source/anchors/{}", super::RESULT_CERT_NAME
32 | );
33 |
34 | let result_path = std::path::Path::new(&fmt_path);
35 |
36 | if result_path.exists() {
37 | send_notify("The certificate has already been installed.");
38 | return;
39 | }
40 |
41 | std::fs::write(result_path, cert).expect("Unable to write certificate to disk.");
42 |
43 | let status_code = std::process::Command::new("trust")
44 | .arg("extract-compat")
45 | .status()
46 | .expect("Unable to execute trust extract-compat command.");
47 |
48 | if status_code.code().unwrap() != 0 {
49 | send_notify(format!(
50 | "Trust store could not be refreshed. Trust exited with exit code {}.", status_code.code().unwrap()
51 | ).as_str());
52 | }
53 | }
54 |
55 | pub fn send_notify(msg: &str) {
56 | notify_rust::Notification::new()
57 | .appname("kyo-rs")
58 | .summary("kyo-rs")
59 | .body(msg)
60 | .auto_icon()
61 | .show()
62 | .unwrap();
63 | }
64 |
--------------------------------------------------------------------------------
/src/platform_utils/win32.rs:
--------------------------------------------------------------------------------
1 | /*
2 | * kyo-rs - Rust rewrite of kyo, a modern osu! server switcher
3 | * Copyright (C) 2018 Marc3842h
4 | *
5 | * This program is free software: you can redistribute it and/or modify
6 | * it under the terms of the GNU Lesser General Public License as published
7 | * by the Free Software Foundation, either version 3 of the License, or
8 | * (at your option) any later version.
9 | *
10 | * This program is distributed in the hope that it will be useful,
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 | * GNU Lesser General Public License for more details.
14 | *
15 | * You should have received a copy of the GNU Lesser General Public License
16 | * along with this program. If not, see .
17 | */
18 |
19 | extern crate std;
20 | extern crate user32;
21 | extern crate winapi;
22 | extern crate winrt;
23 | extern crate winrt_notification;
24 |
25 | use winapi::um::wincrypt::*;
26 | use winrt_notification::{Duration, Toast};
27 |
28 | pub fn is_root() -> bool {
29 | /*unsafe {
30 | winapi::vc::shell::IsUserAnAdmin()
31 | }*/
32 |
33 | // The current method above is not implemented in the winapi crate
34 | // Workaround this by *requiring* the program to be started
35 | // with admin permissions by specifying it in the manifest.
36 | true
37 | }
38 |
39 | pub fn install_cert(cert: &str) {
40 | /*unsafe {
41 | let root_str = std::ffi::CString::new("ROOT").unwrap();
42 | let cert_str = std::ffi::CString::new(cert).unwrap();
43 |
44 | let context_ptr: *mut PCCERT_CONTEXT = std::ptr::null_mut();
45 | let cert_store: HCERTSTORE = CertOpenSystemStoreA(0, root_str.as_ptr());
46 |
47 | CertAddEncodedCertificateToStore(
48 | cert_store,
49 | X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
50 | cert_str.as_ptr() as *const _,
51 | cert.len() as u32,
52 | CERT_STORE_ADD_USE_EXISTING,
53 | context_ptr
54 | );
55 |
56 | CertCloseStore(cert_store, 0);
57 | }*/
58 |
59 | let mut file = std::env::temp_dir();
60 | file.push(super::RESULT_CERT_NAME);
61 |
62 | let path = file.as_path();
63 | let path_str = path.to_str().unwrap();
64 |
65 | std::fs::write(path, cert).expect("Unable to write certificate to disk.");
66 |
67 | std::process::Command::new("certutil.exe")
68 | .arg("-addstore")
69 | .arg("Root")
70 | .arg(path_str)
71 | .status()
72 | .expect("Unable to install certificate in root certificate authorities.");
73 | }
74 |
75 | pub fn send_notify(msg: &str) {
76 | Toast::new(Toast::POWERSHELL_APP_ID)
77 | .title("kyo-rs")
78 | .text1(msg)
79 | .duration(Duration::Short)
80 | .show()
81 | .unwrap();
82 | }
83 |
--------------------------------------------------------------------------------