00:00:00  * ircretaryquit (Remote host closed the connection)
00:00:08  * ircretaryjoined
00:46:17  * DamonOehlmanjoined
00:47:28  * pfrazequit (Ping timeout: 245 seconds)
00:59:06  * passyquit (Quit: Connection closed for inactivity)
01:06:02  * alexandergugeljoined
01:10:13  * tilgoviquit (Ping timeout: 248 seconds)
01:11:18  * alexandergugelquit (Ping timeout: 244 seconds)
01:22:39  * anvakaquit (Remote host closed the connection)
01:22:55  * anvakajoined
01:31:19  * alexandergugeljoined
01:38:27  * yoshuawuyts2joined
01:39:36  * yoshuawuyts1quit (Ping timeout: 256 seconds)
02:07:55  * alexandergugelquit (Remote host closed the connection)
02:09:07  * alexandergugeljoined
02:10:47  * alexande_joined
02:13:34  * alexandergugelquit (Ping timeout: 245 seconds)
02:46:16  * anvakaquit (Ping timeout: 240 seconds)
03:08:30  * mawequit (Ping timeout: 246 seconds)
03:13:40  * mawejoined
03:28:43  * yoshuawuyts2quit (Ping timeout: 245 seconds)
03:31:56  * jiangplusjoined
03:32:38  * alexande_quit (Remote host closed the connection)
03:35:35  * alexandergugeljoined
03:40:06  * alexande_joined
03:43:05  * alexandergugelquit (Ping timeout: 250 seconds)
03:44:10  * pfrazejoined
03:48:18  * alexande_quit (Remote host closed the connection)
03:50:52  * yoshuawuyts2joined
03:53:44  * jiangplusquit (Ping timeout: 250 seconds)
03:53:57  * jiangplusjoined
03:56:24  * alexandergugeljoined
03:57:49  * alexande_joined
03:58:55  * contrahaxjoined
04:01:32  * alexandergugelquit (Ping timeout: 250 seconds)
04:04:16  * jiangplusquit (Ping timeout: 240 seconds)
04:05:40  * jiangplusjoined
04:12:05  * thlorenzquit (Remote host closed the connection)
04:13:59  * thlorenzjoined
04:16:39  * domanicjoined
04:18:50  * thlorenzquit (Ping timeout: 246 seconds)
04:29:02  * yoshuawuyts2quit (Ping timeout: 256 seconds)
04:32:03  * contrahaxquit (Quit: Sleeping)
04:41:22  * yoshuawuyts2joined
04:44:36  * dguttmanquit (Quit: dguttman)
04:46:17  * anvakajoined
04:59:51  * tilgovijoined
05:15:07  * thlorenzjoined
05:19:38  * thlorenzquit (Ping timeout: 265 seconds)
05:26:47  * phatedquit (Remote host closed the connection)
05:27:23  * phatedjoined
05:30:41  * anvakaquit (Remote host closed the connection)
05:31:46  * phatedquit (Ping timeout: 255 seconds)
05:47:50  * alexande_quit (Remote host closed the connection)
05:49:30  * domanicquit (Ping timeout: 276 seconds)
06:00:50  * yoshuawuyts2quit (Ping timeout: 256 seconds)
06:09:05  * alexandergugeljoined
06:12:07  * pfrazequit (Remote host closed the connection)
06:12:38  * fotoveritequit (Quit: fotoverite)
06:13:18  * alexandergugelquit (Ping timeout: 245 seconds)
06:45:53  <substack>http://40.media.tumblr.com/090be8d6555ded4b51bbf8a701d6f387/tumblr_nmgavvoSTL1upcv1ao1_1280.jpg
06:47:53  * phatedjoined
06:49:12  * tilgoviquit (Ping timeout: 244 seconds)
06:52:10  * phatedquit (Remote host closed the connection)
06:52:42  * phatedjoined
06:54:04  * collypopsquit (Quit: Bye)
06:55:57  * thlorenzjoined
06:57:22  * phatedquit (Ping timeout: 264 seconds)
07:00:41  * thlorenzquit (Ping timeout: 250 seconds)
07:09:49  * alexandergugeljoined
07:15:25  * alexandergugelquit (Ping timeout: 264 seconds)
07:31:13  * DamonOehlmanquit (Ping timeout: 245 seconds)
07:33:08  * freealljoined
08:09:31  * peutetrejoined
08:57:53  * peutetrequit (Quit: ...)
08:58:44  * yoshuawuyts2joined
08:59:03  * alexandergugeljoined
09:00:28  * peutetrejoined
09:03:18  * yoshuawuyts2quit (Ping timeout: 256 seconds)
09:04:30  * alexandergugelquit (Ping timeout: 276 seconds)
09:36:05  * jiangplusquit (Ping timeout: 244 seconds)
09:55:19  * thlorenzjoined
09:59:49  * thlorenzquit (Ping timeout: 245 seconds)
10:19:44  * tilgovijoined
10:29:10  * tilgoviquit (Ping timeout: 264 seconds)
10:52:51  * phatedjoined
10:53:46  * peutetrequit (Quit: ...)
10:57:29  * phatedquit (Ping timeout: 265 seconds)
11:03:36  * freeallquit (Remote host closed the connection)
11:32:33  * peutetrejoined
11:45:32  * alexandergugeljoined
11:50:13  * alexandergugelquit (Ping timeout: 255 seconds)
11:56:10  * contrahaxjoined
12:04:33  * freealljoined
12:08:50  * freeallquit (Ping timeout: 252 seconds)
12:14:52  * jiangplusjoined
12:26:05  * thlorenzjoined
12:30:51  * thlorenzquit (Ping timeout: 256 seconds)
12:44:47  * jiangplusquit (Ping timeout: 265 seconds)
12:46:33  * jiangplusjoined
13:04:06  * DamonOehlmanjoined
13:12:30  * thlorenzjoined
13:13:01  * DamonOehlmanquit (Ping timeout: 264 seconds)
13:14:50  * knownasilyajoined
13:17:09  * thlorenzquit (Ping timeout: 248 seconds)
13:18:56  * peutetrequit (Ping timeout: 240 seconds)
13:24:55  * DamonOehlmanjoined
13:29:38  * DamonOehlmanquit (Ping timeout: 256 seconds)
13:32:30  * thlorenzjoined
13:32:44  * therealkoopajoined
13:33:54  * alexandergugeljoined
13:34:58  * freealljoined
13:39:11  * alexandergugelquit (Ping timeout: 246 seconds)
13:39:50  * freeallquit (Ping timeout: 256 seconds)
13:42:38  * therealkoopaquit (Remote host closed the connection)
13:49:15  * fotoveritejoined
13:52:07  * freealljoined
13:56:43  * pfrazejoined
14:05:59  * thlorenzquit (Remote host closed the connection)
14:06:15  * thlorenzjoined
14:06:53  * toddselfjoined
14:10:13  * yoshuawuyts2joined
14:15:49  * pfrazequit (Remote host closed the connection)
14:18:22  * jiangplusquit (Ping timeout: 256 seconds)
14:26:16  * kanzurequit (Ping timeout: 240 seconds)
14:26:20  * yoshuawuyts2quit (Ping timeout: 252 seconds)
14:28:10  * kanzurejoined
14:51:24  * alexandergugeljoined
14:56:02  * alexandergugelquit (Ping timeout: 252 seconds)
14:57:08  * marcello3dquit (Ping timeout: 252 seconds)
14:58:36  * defunctzombie_zzquit (Ping timeout: 252 seconds)
15:13:48  * defunctzombie_zzjoined
15:13:48  * marcello3djoined
15:22:46  * dguttmanjoined
15:32:01  * freeallquit (Remote host closed the connection)
15:38:48  * pfrazejoined
15:40:30  * alexandergugeljoined
15:46:28  * pfraze_joined
15:55:32  * jiangplusjoined
15:56:59  * pfraze_quit (Remote host closed the connection)
16:03:48  * yoshuawuyts2joined
16:04:05  * jiangplusquit (Ping timeout: 248 seconds)
16:09:46  * contrahaxquit (Quit: Sleeping)
16:12:31  * shamajoined
16:35:14  * akennjoined
16:44:21  * thlorenzquit (Remote host closed the connection)
16:44:51  * akennquit (Read error: Connection reset by peer)
16:45:46  * akennjoined
16:49:46  * thlorenzjoined
16:49:46  * akennquit (Read error: Connection reset by peer)
16:50:06  * akennjoined
17:08:45  * yoshuawuyts2quit (Ping timeout: 276 seconds)
17:10:42  * jiangplusjoined
17:11:37  * toddselfchanged nick to toddself_zz
17:11:51  * toddself_zzchanged nick to toddself
17:15:10  * jiangplusquit (Ping timeout: 256 seconds)
17:15:32  <ogd>substack: me and mafintosh did this yesterday (deleted all the existing taco code from last year and started over) https://github.com/maxogden/taco
17:16:02  <ogd>substack: one thing we're trying to figure out is how to integrate stuff like taco-nginx nicely
17:16:31  <ogd>substack: the way you do it now is "start": "taco-nginx node app.js" in your apps package.json
17:17:42  <ogd>substack: but we dont wanna require package.jsons to have to have deployment specific stuff in them, so we are trying to think of the best way to 'insert' deployment commands like that in at build-time
17:17:57  * peutetrejoined
17:18:10  <ogd>substack: one idea is to have a --start-prefix command for taco-build, e.g. taco-build "npm install--production" --start-prefix="taco-nginx"
17:18:25  * jxsonjoined
17:18:46  <ogd>substack: another is a "taco" field in package.json that could have stuff like a start prefix, that way your 'npm start' doesnt need deployment specific stuff in it
17:19:42  * peutetrequit (Client Quit)
17:20:08  <ogd>opened an issue for discussion here https://github.com/maxogden/taco/issues/13
17:20:43  * yoshuawuyts2joined
17:32:00  * phatedjoined
17:44:53  * yoshuawuyts2quit (Ping timeout: 248 seconds)
17:45:18  * yoshuawuyts2joined
17:49:35  * thlorenz_joined
17:52:14  * thlorenzquit (Remote host closed the connection)
17:52:37  * thlorenzjoined
17:52:39  * thlorenz_quit (Read error: Connection reset by peer)
18:12:26  * peutetrejoined
18:18:16  * yoshuawuyts2quit (Ping timeout: 240 seconds)
18:31:31  * yoshuawuyts2joined
18:36:11  <mafintosh>ogd: https://github.com/maxogden/taco-mon/pull/1
18:47:36  * peutetrequit (Quit: ...)
18:53:03  * alexandergugelquit (Remote host closed the connection)
18:54:30  * alexandergugeljoined
18:54:49  <guybrush>mafintosh, can i borrow your brain real quick regarding signalhub? im not sure if i should use it or implement something else
18:54:56  * alexandergugelquit (Remote host closed the connection)
18:55:20  * alexandergugeljoined
18:55:26  <guybrush>basically i would need something like "hey signalhub, who is currently hosting a game?"
18:55:51  <guybrush>with signalhub it would mean everyone has to publish "over here!"
18:56:24  <guybrush>i wonder if it makes more sense to implement a server that stores that info in memory instead of having everyone to publish
18:56:39  * alexandergugelquit (Remote host closed the connection)
18:56:42  <guybrush>but then i lose the "standardized signaling-server for all the things"
18:58:19  <guybrush>i guess, basically what im asking is should every app implement its own server or should we try to implement one standard thing that trys to serve the needs of all possible app-usecases
18:59:29  <guybrush>the "standard signaling-server" would be cool because everyone could just host its own and apps provide a way to let the user select to which servers he wants to connect
19:01:23  * alexandergugeljoined
19:01:52  * alexandergugelquit (Remote host closed the connection)
19:06:33  * alexandergugeljoined
19:11:01  * pfraze_joined
19:15:05  <jjjohnny_>guybrush: signalhub is not ready to be the standard, so go ahead and roll your own
19:15:21  <jjjohnny_>if anything, we want to standardize APIs, and allow for myriad implementations
19:15:35  <jjjohnny_>instead of relying on one version of one OSS
19:15:55  <jjjohnny_>that way, a front end app can switch out backends any time
19:16:08  <guybrush>sure i mean the api of signalhub
19:16:19  <jjjohnny_>maybe maybe not
19:16:24  <guybrush>which is only pubsub
19:17:23  <guybrush>but yeah maybe im thinking too much about this standard thing anyway
19:18:05  <jjjohnny_>it seems possible to have a sensible set of backend apis for various things
19:18:16  <jjjohnny_>if not for the world, for ourselves
19:24:42  * peutetrejoined
19:26:07  * peutetrequit (Client Quit)
19:26:11  <mafintosh>guybrush: just have the clients post "over here"
19:26:35  <mafintosh>guybrush: if you stored the state on the server you'd need to do heartbeats and stuff anyway
19:27:13  <guybrush>thats true
19:27:29  <guybrush>though i would use websockets anyway
19:28:00  <guybrush>but i _really_ like to depend on a very simple server-api (like just pubsub)
19:28:40  <mafintosh>guybrush: feel free to add a websocket api to signalhub
19:29:20  <mafintosh>i've had too many problems with websockets in the wild that its just using server side events now :)
19:34:03  <guybrush>oh ok, never had problems but have nothing too big deployed anyway
19:34:28  <guybrush>the only thing is that ws does not have a feature to limit message size
19:34:43  <guybrush>i mean the ws package
19:35:11  <guybrush>anyway thanks for your thoughts
19:35:51  * yoshuawuyts2quit (Read error: Connection reset by peer)
19:37:13  * yoshuawuyts2joined
19:47:48  * sz0joined
19:51:15  * thealphanerdjoined
19:51:39  <pfraze>ogd, are the taco tarballs byte-for-byte reproduceable?
19:52:11  <pfraze>domanic mentioned that tarballs include timestamps (I think it was ctime) that make that difficult
19:52:28  <ogd>pfraze: i was discussing the possibility of a content addressable version of taco-pack yesterday with mafintosh
19:52:36  <ogd>pfraze: but we havent implemented it
19:52:36  * contrahaxjoined
19:53:05  <pfraze>ogd, ok, +1 for that
19:53:22  <mafintosh>pfraze: we can just set the dates to 0 in the tarball
19:53:34  <ogd>pfraze: it could also insert a file with a md5 of the contents into the tar
19:53:38  * alexandergugelquit (Remote host closed the connection)
19:53:46  * thealphanerdquit (Client Quit)
19:54:18  <pfraze>mafintosh, ogd, hmm, those are both interesting. Would zeroing the dates create any weirdness in the output?
19:54:51  <ogd>youd just have mtimes that are not useful
19:54:56  <mafintosh>pfraze: when we unpack we can just set the dates to Date.now()
19:54:59  <ogd>so its a tradeoff i get
19:55:03  <ogd>guess*
19:55:04  <mafintosh>basically ignoring the mtimes
19:55:06  <ogd>mafintosh: oh yea thats a good point
19:55:29  <pfraze>mafintosh, that seems pretty reasonable
19:57:28  * alexandergugeljoined
19:58:22  <mafintosh>substack: is editor supposed to be version 0.0.1 (https://github.com/substack/node-editor) previous version was 0.0.6
20:00:34  <mafintosh>substack: ah think you meant 0.1.0, looking at https://github.com/substack/node-editor/commit/da8710f02a6bf70d56ab42688df3bd55232c5a44
20:01:58  * toddselfchanged nick to toddself_zz
20:02:38  * toddself_zzchanged nick to toddself
20:04:51  <substack>mafintosh: fixed, just published 1.0.0
20:09:28  <mafintosh>substack: thx
20:11:51  * alexandergugelquit (Remote host closed the connection)
20:13:16  * alexandergugeljoined
20:17:39  * toddselfquit
20:19:04  * dguttmanquit (Ping timeout: 252 seconds)
20:19:32  * dguttmanjoined
20:26:16  <guybrush>anyone fam with webrtc, once a peer gets destroyed do i have to get new signal-data?
20:26:25  <guybrush>or can i just reuse the old data
20:26:34  <jjjohnny_>guessing new
20:26:38  <guybrush>i cant get it working so i wonder if its possible or im doin it wrong :D
20:27:25  <jjjohnny_>mafintosh: where do you have websocket issues that you wouldn't also have wevRTC issues?
20:28:02  <guybrush>oh webrtc has harder issues than ws for sure :D
20:28:40  * yoshuawuyts2quit (Ping timeout: 250 seconds)
20:29:13  <pfraze>guybrush, I always wondered that
20:29:27  <guybrush>pfraze, i think you have to get new signal-data
20:30:10  <guybrush>but im not sure
20:31:19  <guybrush>it says Error processing ICE candidate
20:31:21  <pfraze>guybrush, hmm I wonder why that would be
20:31:48  * yoshuawuyts2joined
20:31:52  <jjjohnny_>thats what i was getting when i tried ot use a bad offer
20:32:54  * alexandergugelquit (Remote host closed the connection)
20:34:27  * alexandergugeljoined
20:37:31  <guybrush>well i guess the problem is that you will get a new port
20:37:44  <guybrush>besides other problems maybe
20:38:06  <guybrush>so you cant reuse that signaling-data
20:38:34  <pfraze>that would make sense
20:38:40  <pfraze>the new port allocation
20:38:55  <guybrush>but it would be cool if webrtc would try on its own to reconnect
20:39:01  <pfraze>agreed
20:39:35  <guybrush>but maybe its a harder problem than i can think
20:40:11  <guybrush>basically when i hit f5 i need to contact the signaling-server again
20:40:52  <guybrush>find my old peers somehow and do the whole negoation-thing again
20:40:57  <pfraze>would a sharedworker be able to persist across refreshes?
20:41:10  <guybrush>hm im not sure
20:41:16  <guybrush>but a tab would be for sure
20:41:25  <pfraze>yeah
20:41:42  <pfraze>the setup time for a webrtc connection isnt very good
20:42:04  <guybrush>i think its very dependent on user-connections
20:42:37  <guybrush>anyway the signaling-thing is really a pita, its just not p2p at all :D
20:43:17  <guybrush>thats why i want to have some standard signaling-server-api and a bunch of community-contributed running servers
20:43:29  <pfraze>yeah
20:43:43  <guybrush>i would run one or two servers with cors for sure
20:44:24  <pfraze>we may add signalling to the ssb servers after theyve had a chance to deploy
20:44:34  <guybrush>what is ssb?
20:44:54  <pfraze>guybrush, https://github.com/ssbc/scuttlebot
20:45:33  <guybrush>ah cool
20:46:22  <guybrush>omg so much cool projects
20:51:51  <guybrush>indeed that would be pretty cool
20:56:48  <guybrush>substack, after trying to use keyboot for my game i thought it would be cool to have "application requests" not only per domain but per app-hash
20:57:37  <guybrush>like i load a html and make a hash of its content then i can login with keyboot if the hash is approved
20:57:50  <guybrush>then i can host the html of the app anywhere
20:57:57  * contrahaxquit (Quit: Sleeping)
21:03:04  * thealphanerdjoined
21:11:01  <guybrush>basically keyboot would xhr the url (including path after domain) and calculate hash(content)
21:12:02  <mafintosh>jjjohnny_: signalhub can be used for other things than webrtc signalling
21:19:07  * gozalajoined
21:22:28  * jxson_joined
21:25:48  * jxsonquit (Ping timeout: 252 seconds)
21:26:03  * dguttmanquit (Ping timeout: 250 seconds)
21:27:01  * dguttmanjoined
21:31:04  * yoshuawuyts2quit (Ping timeout: 250 seconds)
21:34:08  * yoshuawuyts2joined
21:38:47  <jjjohnny_>mafintosh: gp
21:40:01  <jjjohnny_>mafintosh: are SSEs reliable for long?
21:40:10  <jjjohnny_>and with mobile?
21:41:07  <mafintosh>jjjohnny_: they seem to work pretty well. SSE has reconnect build in as well (which is nice)
21:42:43  * sethvincentjoined
21:45:56  * jxson_quit (Remote host closed the connection)
21:46:24  <mafintosh>jjjohnny_: but i don't have any mobile thats
21:46:32  * jxsonjoined
21:46:35  * alexandergugelquit (Remote host closed the connection)
21:48:19  * DamonOehlmanjoined
21:48:19  * thlorenzquit (Remote host closed the connection)
21:55:56  * yoshuawuyts2changed nick to yoshuawuyts
21:59:13  <guybrush>mafintosh, i get 504 (timeout) and then on reconnect i get No 'Access-Control-Allow-Origin' header is present on the requested resource.
22:00:03  <guybrush>but im writing some server now
22:00:50  * thealphanerdquit (Quit: thealphanerd)
22:01:54  * DamonOehlmanquit (Ping timeout: 256 seconds)
22:03:45  <guybrush>or dunno maybe im doing something wrong :p
22:04:03  <guybrush>is signalhub.maf.. 3.2.0?
22:04:10  <guybrush>maybe i should just run my own :p
22:07:09  * thealphanerdjoined
22:08:00  <guybrush>is localstorage per domain or per subdomain?
22:08:12  <guybrush>i mean the namespace
22:08:21  * alexandergugeljoined
22:08:55  <guybrush>ah i see its per subdomain
22:24:27  * stagasjoined
22:24:29  * stagasquit (Client Quit)
22:31:28  * thealphanerdquit (Quit: thealphanerd)
22:34:15  <mafintosh>guybrush: seems to be working for me. Could you share your code?
22:35:34  <guybrush>ah sorry i think the src is gone
22:36:09  <guybrush>ah i think i have it
22:37:34  <guybrush>requirebin is kinda blowing up on me i think :p
22:40:19  * thealphanerdjoined
22:40:33  <mafintosh>guybrush: hah :)
22:40:49  <guybrush>right i need some time the whole thing doesnt work somehow - at least requirebin does nothing
22:41:43  <guybrush>also makeing a p2p-app is a whole lot different than just some server-client app
22:41:51  <guybrush>so much things i didnt even think off
22:46:30  * thealphanerdquit (Quit: thealphanerd)
22:47:47  * yoshuawuytsquit (Ping timeout: 264 seconds)
22:48:50  * thlorenzjoined
22:53:49  * thlorenzquit (Ping timeout: 264 seconds)
22:55:13  * collypopsjoined
22:55:22  * yoshuawuytsjoined
23:02:42  <guybrush>i think requirebin's save gist doesnt work right now
23:06:04  * sethvincentquit (Ping timeout: 245 seconds)
23:06:23  <guybrush>but you can paste this into requirebin https://gist.github.com/guybrush/c4bfc9e6261d515a049c
23:06:47  <guybrush>after some time you will see CORS-errors in the console
23:14:01  * joepie91quit (Ping timeout: 256 seconds)
23:14:48  <guybrush>anyway i will just deploy ma custom thing now
23:16:37  * alexandergugelquit (Remote host closed the connection)
23:24:42  * alexandergugeljoined
23:36:52  <guybrush>mafintosh, did you change something?
23:37:24  <guybrush>it seems to work now
23:37:29  <mafintosh>guybrush: no but my nginx conf could be messed up
23:37:46  <guybrush>is there some TTL?
23:38:05  <mafintosh>guybrush: on?
23:38:09  * DamonOehlmanjoined
23:38:18  <mafintosh>guybrush: the messages you broadcast?
23:38:30  <guybrush>i dont know, before it was like after some time i got disconnected and then it said CORS-error
23:38:41  <guybrush>no i thought maybe you drop the connection after some time
23:38:46  * yoshuawuytsquit (Ping timeout: 244 seconds)
23:39:01  <mafintosh>guybrush: maybe my nginx conf does that *sigh*
23:39:13  * alexandergugelquit (Remote host closed the connection)
23:39:19  <mafintosh>let me check
23:39:34  <guybrush>i will try with increasing timeout
23:39:45  <guybrush>right now it seems to work
23:40:28  <mafintosh>guybrush: it might be because node only sends the response headers when you first write to the response
23:40:28  * alexandergugeljoined
23:40:58  <mafintosh>so if the connection times out before nginx probably sets some default headers :/
23:42:23  * joepie91joined
23:43:50  <guybrush>well it seems to work
23:44:11  <guybrush>im already at 30sec
23:47:11  <mafintosh>guybrush: ok - if it acts up again let me knw
23:47:39  <guybrush>oh a strange thing was when i broadcast('foo',1)
23:47:56  <guybrush>ah wait
23:48:15  <guybrush>broadcast('foo'); broadcast('foo','bar');
23:48:20  <guybrush>test-a:error-> Error: stream.push() after EOF
23:48:57  <guybrush>seems like after doing broadcast without 2nd parameter the client is in some state it can not recover from
23:49:59  <guybrush>but i guess its a client-problem only
23:54:26  <guybrush>ok the CORS-error is back :D
23:54:31  <guybrush>it just takes really long
23:57:15  <guybrush>at about ~60sec
23:58:00  <guybrush>yep
23:58:13  <guybrush>nginx has default-setting proxy_connect_timout 60sec
23:59:21  * DamonOehlmanquit (Ping timeout: 256 seconds)