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