Transcription: OpenAgents Episode 079 - Livewire Agent Chat
June 9, 2026 ยท View on GitHub
Source: https://twitter.com/OpenAgentsInc/status/1758511214253031692 Wiki source: https://raw.githubusercontent.com/wiki/OpenAgentsInc/openagents/Video-Series.md Media title: OpenAgents - Episode 079: Livewire Agent Chat We connect our agent chat UI to Live... Upload date: 20240216 Transcription model: mlx-whisper/mlx-community/whisper-tiny Generated at: 2026-06-01T18:56:26Z
Machine-generated transcript. Review speaker labels and wording before using this as quote-grade source material.
[00:00] Christopher David: Alright, let's see if we can get our main hidden chat screen here, agent chat screen, working with LiveWire.
[00:10] Christopher David: I have some previous code from this chat TBT style app.
[00:16] Christopher David: I built like a year ago that uses LiveWire.
[00:19] Christopher David: I think it might use the previous version of LiveWire.
[00:22] Christopher David: I'll have to be careful with some of that.
[00:25] Christopher David: Yeah, so this was the extreme of the structure that we had copy-pasted in.
[00:31] Christopher David: I had removed some of these liveWire, send messages, things, and kind of just built very basic HTML expressions of it.
[00:40] Christopher David: But this was the main thing that I want to get changed over.
[00:45] Christopher David: We've got this wire-submit.proven equals send message, which calls, let's see if we can find where that is.
[01:01] Christopher David: So I've also got this open here.
[01:11] Christopher David: So there's the bleed components, and then there's like the liveWire components, which I think are in here.
[01:26] Christopher David: So let's just take a spin through this.
[01:28] Christopher David: We've got message, which trims the message content, new conversation button, created conversation with a title,
[01:46] Christopher David: and then emit two chat box, chat lists, and messages that were loading a conversation.
[01:51] Christopher David: I don't even know if that's the best way to do it, but that worked.
[01:55] Christopher David: And then let's see chat main.
[02:02] Christopher David: On mounted, if there was a key, I don't know what that is.
[02:08] Christopher David: Finds the conversation in the database.
[02:13] Christopher David: If there's no conversation, we direct to a new chat.
[02:20] Christopher David: If this is a public conversation or if you're the author user or if you're a member of the conversation, then load the conversation, otherwise return it,
[02:32] Christopher David: I know it's new chat, and dispatch a browser event, scrolling through the bottom, okay?
[02:38] Christopher David: And then render liveWire chat main.
[02:42] Christopher David: And then send message, presumably as attached to the send message box, here we've got, it knows about the selected conversation,
[02:55] Christopher David: the body, the listeners, public function mount.
[03:08] Christopher David: Okay.
[03:14] Christopher David: I'm not going to try to pull over all of this as is, because I don't want to reason about things from scratch.
[03:22] Christopher David: And I remember thinking when I was building this, that it felt like I wasn't doing it correctly,
[03:28] Christopher David: it just seemed a little bit sprawling.
[03:30] Christopher David: I might not have chopped it up into components in the right way.
[03:34] Christopher David: So it'd be nice to just kind of think about this a little bit from scratch.
[03:49] Christopher David: Okay.
[03:53] Christopher David: Well, let's do that. Let's do the same thing that we did on the command line earlier.
[04:03] Christopher David: So PHP, Artisan, Make LiveWire, chat.
[04:31] Christopher David: Let's actually do this to get an boom.
[04:44] Christopher David: All right.
[04:57] Christopher David: Let's open about liveWire chat component.
[05:19] Christopher David: And let's do this. Let's go over to our routes web file.
[05:28] Christopher David: We don't need this, but I do want to do, what was it, app LiveWire chat.
[05:38] Christopher David: Then where we have agent chat, this has changed this.
[05:42] Christopher David: Let's actually pull it up here.
[05:46] Christopher David: Let's just make this chat.
[05:57] Christopher David: Bye, chat.
[06:04] Christopher David: LiveWire chat.
[06:23] Christopher David: So.
[06:33] Christopher David: Here may be we want to set this up in the same way that we set up the layout.
[06:57] Christopher David: Originally, let's go back over to our previous code base.
[07:03] Christopher David: Some of the layout stuff we were struggling with previously.
[07:08] Christopher David: Well, now probably be easier to pull in.
[07:11] Christopher David: Like, did we set the layout here?
[07:18] Christopher David: Chat key name chat manager.
[07:25] Christopher David: Main class.
[07:47] Christopher David: Let's try something.
[08:08] Christopher David: Let's see if we can set the layout layout.
[08:23] Christopher David: Let's go back to the layout.
[08:51] Christopher David: Okay, I think this will complain about there's no layout such so.
[09:21] Christopher David: And so here.
[09:37] Christopher David: Oops.
[09:42] Christopher David: So I want this stuff.
[09:52] Christopher David: Minus the stuff we don't need because it's the new version.
[09:55] Christopher David: So let's try this.
[10:02] Christopher David: So just the idea of we want the classes on the body.
[10:05] Christopher David: So class equals beauty black text white.
[10:13] Christopher David: It's screen font mono.
[10:18] Christopher David: So if class equals flex, flex call each full.
[10:35] Christopher David: Then main.
[10:45] Christopher David: Then diva.
[10:53] Christopher David: Let's see what that looks like.
[10:59] Christopher David: Still can't find layouts.chat.
[11:06] Christopher David: Why not?
[11:11] Christopher David: Maybe because layouts.
[11:14] Christopher David: Maybe it's because it's in a subfolder now.
[11:17] Christopher David: And it wasn't before.
[11:22] Christopher David: What about layouts?
[11:24] Christopher David: Yeah.
[11:27] Christopher David: Okay.
[11:36] Christopher David: I'm guessing we will watch this stuff.
[11:45] Christopher David: Okay.
[11:55] Christopher David: I'm actually going to want to live wire fire navigation there but this is good for now.
[12:14] Christopher David: Alright, I'm going to commit that.
[12:21] Christopher David: This will chat layouts.
[12:32] Christopher David: What?
[12:50] Christopher David: Oh.
[13:12] Christopher David: And then here.
[13:21] Christopher David: There's that scroll to bottom again.
[13:44] Christopher David: There's basically what we have.
[13:51] Christopher David: Except the side.
[14:00] Christopher David: And grab our agent chat code.
[14:06] Christopher David: Just what's inside the main slot here.
[14:15] Christopher David: Flex, flex row and W screen full.
[14:22] Christopher David: Time copy like this.
[14:33] Christopher David: Nice.
[14:54] Christopher David: Very nice.
[14:57] Christopher David: Except instead of HX stuff.
[15:04] Christopher David: We'll swap this stuff out with our.
[15:09] Christopher David: I don't know what this should be right now but I'll just do that.
[15:15] Christopher David: Okay.
[15:16] Christopher David: We have our little scaffolding again.
[15:26] Christopher David: So inside chat box container.
[15:33] Christopher David: It used.
[15:35] Christopher David: Partials live wire chat box.
[15:45] Christopher David: Oh.
[15:46] Christopher David: And then under that partial live wire send message.
[15:53] Christopher David: Let's take a look at the send message code.
[16:00] Christopher David: First of all, it has these listeners.
[16:04] Christopher David: Load conversation updates send message.
[16:08] Christopher David: Send message message.
[16:09] Christopher David: This creates.
[16:11] Christopher David: Yeah.
[16:12] Christopher David: Interesting.
[16:18] Christopher David: And the Blake components.
[16:29] Christopher David: For now, I'm just going to have all this go in line in the same.
[16:40] Christopher David: So wire submit dot prevent is send message.
[16:45] Christopher David: Out of curiosity.
[16:47] Christopher David: First of all, do I need that CSRF thing there?
[16:49] Christopher David: It looks like I don't.
[16:56] Christopher David: And out of curiosity is this correct.
[16:59] Christopher David: How does this compare event prevent default document get element by the send message
[17:06] Christopher David: click.
[17:09] Christopher David: Is that what it shows here?
[17:17] Christopher David: Interesting.
[17:19] Christopher David: Okay.
[17:20] Christopher David: Oh, and the text area here.
[17:24] Christopher David: That seems important.
[17:28] Christopher David: Wire model body.
[17:29] Christopher David: Why do I have that twice on the text area?
[17:34] Christopher David: I don't know what that deferred in.
[17:44] Christopher David: Okay.
[17:45] Christopher David: I'm expecting an error.
[17:49] Christopher David: No.
[17:52] Christopher David: Well, yeah.
[17:54] Christopher David: Conselaer.
[17:57] Christopher David: Wire model body properties.
[17:59] Christopher David: Not exist on the text area.
[18:01] Christopher David: Okay.
[18:05] Christopher David: Let's try to fix that.
[18:11] Christopher David: All right.
[18:12] Christopher David: Why is this messed up?
[18:20] Christopher David: Public.
[18:23] Christopher David: Body equals.
[18:28] Christopher David: Okay.
[18:29] Christopher David: What if I do.
[18:34] Christopher David: Oh, yeah.
[18:40] Christopher David: Okay.
[18:41] Christopher David: And then.
[18:49] Christopher David: Nice.
[18:54] Christopher David: That feels good.
[19:04] Christopher David: That feels good.
[19:07] Christopher David: So for send message.
[19:10] Christopher David: I think the idea is that we would handle the logic in this component.
[19:19] Christopher David: Not like send an API endpoint because we've already sent the API endpoint.
[19:27] Christopher David: So I'm not quite sure.
[19:35] Christopher David: So first I just tried something.
[19:44] Christopher David: Clear the input.
[19:45] Christopher David: Yeah.
[19:48] Christopher David: Now we're clearing the input.
[19:52] Christopher David: Isn't that nice?
[19:54] Christopher David: Now how do I want to handle this?
[19:59] Christopher David: Well, how are we handling this currently? First of all, let me commit this.
[20:04] Christopher David: Initial form and blur with body and clear input.
[20:12] Christopher David: That's nice.
[20:14] Christopher David: Um,
[20:19] Christopher David: Agent,
[20:22] Christopher David: Agent controller.
[20:27] Christopher David: It's right now doing run,
[20:31] Christopher David: run task.
[20:37] Christopher David: So right now we're not passing the task ID in,
[20:42] Christopher David: but conceivably,
[20:46] Christopher David: where we're doing this.
[20:52] Christopher David: I could just do this in the,
[20:56] Christopher David: chat handler.
[21:12] Christopher David: Interesting.
[21:16] Christopher David: What else do I do in that handler?
[21:20] Christopher David: So we have the task in the run task.
[21:27] Christopher David: Based on the task, we're grabbing the agent,
[21:33] Christopher David: and then we're calling run task with the input.
[21:39] Christopher David: Don't tell me it's that simple.
[21:45] Christopher David: Grab this,
[21:49] Christopher David: go back to chat and paste that there.
[21:54] Christopher David: And this is actually going to be,
[21:56] Christopher David: let's just do task agents.
[22:01] Christopher David: And then request input input,
[22:05] Christopher David: body.
[22:09] Christopher David: That's nice and simple.
[22:11] Christopher David: Wow.
[22:16] Christopher David: So.
[22:23] Christopher David: So just a test of this works.
[22:27] Christopher David: First of all, let's put this up here.
[22:33] Christopher David: A pen, the output to, wow.
[22:36] Christopher David: I was just going to dd it.
[22:38] Christopher David: This is a message receiver.
[22:39] Christopher David: I don't know what that, why would that be needed.
[22:42] Christopher David: That's if there's a chat box separately, that's listening.
[22:47] Christopher David: For now,
[22:49] Christopher David: I think we'll do like,
[22:53] Christopher David: public messages is array.
[22:57] Christopher David: I'll pen the message to the chat.
[23:02] Christopher David: Oh my goodness.
[23:08] Christopher David: Oh.
[23:11] Christopher David: So I do that first.
[23:16] Christopher David: Oh, that's nice.
[23:19] Christopher David: From you,
[23:21] Christopher David: then clear it.
[23:23] Christopher David: Oh, no clear.
[23:42] Christopher David: I wanted to clear it before we had this.
[23:44] Christopher David: So we got to have fun to that very well.
[23:47] Christopher David: Okay.
[23:49] Christopher David: And then we want to,
[23:51] Christopher David: a pen there to hang it.
[23:53] Christopher David: Oh gosh.
[23:54] Christopher David: Oh gosh.
[23:56] Christopher David: From this agent name.
[23:58] Christopher David: Wow.
[23:59] Christopher David: Wow.
[24:04] Christopher David: Wow.
[24:06] Christopher David: Okay.
[24:07] Christopher David: Let's go back to
[24:10] Christopher David: the chat component and actually render
[24:17] Christopher David: the messages.
[24:26] Christopher David: Render chat messages based on messages.
[24:33] Christopher David: Oh my goodness.
[24:34] Christopher David: What's going to happen?
[24:40] Christopher David: That can't work.
[24:42] Christopher David: That can't work.
[24:43] Christopher David: That would be too easy.
[24:44] Christopher David: Do not let this work.
[24:45] Christopher David: Do not let this work.
[24:47] Christopher David: I can't work.
[24:56] Christopher David: Ah, failed.
[24:57] Christopher David: Told you.
[24:58] Christopher David: Told you.
[25:00] Christopher David: Failed.
[25:05] Christopher David: Okay.
[25:09] Christopher David: Oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh
[25:39] Christopher David: oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh
[26:09] Christopher David: oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh
[26:39] Christopher David: oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh
[27:09] Christopher David: oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh
[27:39] Christopher David: oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh
[28:09] Christopher David: oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh
[28:39] Christopher David: oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh
[29:09] Christopher David: oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh
[29:39] Christopher David: oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh
[30:09] Christopher David: oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh
[30:39] Christopher David: oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh
[31:09] Christopher David: oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh
[31:39] Christopher David: oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh
[32:09] Christopher David: oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh
[32:39] Christopher David: oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh, oh