I am trying to set up a server to receive audio from a client browser using SocketIO
, then process it through Google Speech-to-Text, and finally reply back to the client with the text.
Originally and ideally, I wanted to set up to function somewhat like the tool on this page: https://cloud.google.com/speech-to-text/
I tried using getUserMedia
and streaming it through SocketIO-Stream
, but I couldn't figure out how to 'pipe' MediaStream
.
Instead, now I've decided to use MediaRecorder
on the client side, and then send the data altogether as a blob(seen in this example).
I then apply toString('base64')
to the blob and call google-cloud/speech's client.recognize()
on the blob.
Client Side(i'm using VueJS):
new Vue({
el: '#app',
data: function () {
return ({
msgs: [],
socket: null,
recorder: null,
: []
})
},
mounted: function () {
this.socket = io.connect('localhost:3000/user');
console.log('Connected!')
this.socket.on('text', function (text) {
this.msgs.push(text)
})
},
methods: {
startRecording: function () {
if (this.recorder && this.recorder.state == 'recording') {
console.log("Stopping!")
this.recorder.stop()
} else {
console.log("Starting!")
navigator.mediaDevices.getUserMedia({ audio: true, video: false })
.then(this.handleSuccess);
}
},
handleSuccess: function (stream) {
this.recorder = new MediaRecorder(stream)
this.recorder.start(10000)
this.recorder.ondataavailable = (e) => {
this.chunks.push(e.data)
console.log(e.data)
}
this.recorder.onstop = (e) => {
const blob = new Blob(this.chunks, { 'type': 'audio/webm; codecs=opus' })
this.socket.emit('audio', blob)
}
}
}
})
Server Side:
const speech = require('@google-cloud/speech');
const client = new speech.SpeechClient();
const io = require('socket.io').listen(3000)
const ss = require('socket.io-stream')
const encoding = 'LINEAR16';
const sampleRateHertz = 16000;
const languageCode = 'en-US';
const audio = {
content: null
}
const config = {
encoding: encoding,
sampleRateHertz: sampleRateHertz,
languageCode: languageCode,
}
async function main() {
const [response] = await client.recognize({
audio: audio,
config: config
})
const transcription = response.results
.map(result => result.alternatives[0].transcript)
.join('\n');
console.log(`Transcription: ${transcription}`);
}
io.of('/user').on('connection', function (socket) {
console.log('Connection made!')
socket.on('audio', function (data) {
audio.content = data.toString('base64')
main().catch(console.error)
});
});
The log from the main()
function in the Server side is always:
"Transcription: "
-- which is empty!
It should contain the text from the audio sent. Thank you in advance!
Text-to-Speech is priced based on the number of characters sent to the service to be synthesized into audio each month. You must enable billing to use Text-to-Speech, and will be automatically charged if your usage exceeds the number of free characters allowed per month.
You can activate this by going to Settings - Language and Input - Voice Input and touch the cog icon next to Enhanced Google Services. Choose "Offline Speech Recognition" and select the "All" tab to download your preferred language if it's not already installed.
All sessions are now available for viewing in our on-demand library. Click here to start watching. Google today open-sourced the speech engine that powers its Android speech recognition transcription tool Live Transcribe.
Your nodejs application asks for the processing of raw audio data, recorded as an array of 16-bit signed integers ('LINEAR16'
) at a rate if 16k samples/sec (16000
) . This sort of audio representation is known as pulse-code modulation (PCM) for reasons lost in ancient telephony lore.
But the Blob you send from your client-side code is not that. It's a media object with the content-type audio/webm; codecs=opus
. That means the audio track is compressed using the Opus codec and boxed (multiplexed) in the webm (Matroska, ebml) container format. The cloud text-to-speech code tries to interpret that as raw audio data, fails, throws up its hands and returns an empty transcription string. It's analogous to trying to view a zip file in a text editor: it's just gibberish.
To get text-to-speech to work with a media object, you have to extract the PCM audio from it first. This is a notorious pain in the neck to set up on a server; you have to use ffmpeg. There's a tutorial on it in the text-to-speech documentation. The tutorial mentions scraping the audio out of video files. Your Blob is, basically, a video file with no video track in it, so the same techniques work.
But, you'll be much better off returning to your first approach, using the MediaStream browser javascript APIs. In particular, your browser code should use elements of the Web Audio API to intercept the raw PCM audio data and send it to your server or directly from your browser to text-to-speech.
Explaining all this is way beyond the scope of a StackOverflow answer. Here are some hints. How to use web audio api to get raw pcm audio?
The Google Text-To-Speech v1p1beta1
API end point supports MP3 files now. As O.Jones says, above MediaRecorder API is a good option, but now you can just get MP3 instead of raw PCM data, I found it difficult to implement the RecordRTC library with the intention of getting raw PCM because I ran into sound quality and cross-browser issues.
My solution: I used the mimeType audio/mp3
when creating my blob as such: const blob = new Blob(chunks, { 'type' : 'audio/mp3' });
Then I converted the blob to a base64 string like in this SO example. Then when you send an api call to Google's Speech-To-Text api, you have to specify the v1p1beta1
beta endpoint, as well as set the config as I have done in the cURL request below. Note that the default sampling rate for MediaRecorder is 16000Hz. An example CURL call could be the following (you must specify your api key):
curl --location --request POST 'https://speech.googleapis.com/v1p1beta1/speech:recognize?key=yourkey' \
--header 'Content-Type: application/json' \
--data-raw '{
"config": {
"encoding":"MP3",
"sampleRateHertz": 16000,
"languageCode": "en-US"
},
"audio": {
"content":"T2dnUwACAAAAAAAAAAB3RH51AAAAAPHhQ10BE09wdXNIZWFkAQE4AYC7AAAAAABPZ2dTAAAAAAAAAAAAAHdEfnUBAAAAdUgTIgE4T3B1c1RhZ3MPAAAAbGlib3B1cyB1bmtub3duAQAAABUAAABFTkNPREVSPU1vemlsbGE4Mi4wLjNPZ2dTAABAOAAAAAAAAHdEfnUCAAAAsNMpwh0DA///Cv+7/0L/Qv9C/0L/Qv8H/wf/CP8I/wv/I/j//vj//viKNX326AqaWxhaBYDqmgiNxb57cPlTIfDcUGjrQM1bCnrq2XwaAILM2arH3YXS5qnUdw1PQFIXfH7OGgVpCkrFpAcz+IBxewzQou6cqxJUyPxj9hrgDNuOFMAYN9X9MgBi1O6o9kmYEcdz6Si2yYZMrLGtJ/sLn8TjfYXvHbIhhSRHLcRSzsvm7BNXJhIOnIyoVdjStDmXzjE+eqeR/JbjNvzTDUL5/snxgKVgMU3RsxiqSmCvAOPFMUiDGHqsGG3INrZMOJTHnkvwgThrWZY6tdMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaC6pJaGVVHIFXj024ialIZZPyw1FwtTD4tTD4y7/M8OixCapmolTOUyniKmN9JJhauoDvgCDBUd6CakabbwJWrjP0oyiqz/H62sn62sQFi6i960D06xtAqa2UUOZdWtqwOeMGhh9hSKYaf37ARI4yQiOiawPIjMaYN0mMhAQ2NUJomqeMXEJRZs4VhRK0DBrD4e8ZCb/Vv4ti5PpWxsRwcxEnpFHKkjwDDZAAn72+JrdB+BhkL/tIBOrGb2A1ZPdzOjYTVGyL5nIL6RulhkE62/MrdDgGbeJPj/ovdW/5wzhiSZymabWUpHljr3vozXHxKvs78MzJAXb4OIM+dYyQdZhh8iZnXucAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf0NxPwNF6yXcWbPv/+Xljow5Og0qew5Ij5YK+AhYQEwJEBDz8cISzoetk0TMTgEwEJlJbzMpW05Sco9R8icHfcyotpWWKzPy+LVOZe08BZAtcKXo6WrQyCDswLAIZommoLJrwOFiZr3Md1QpI7xis9Fh9CSaVcfp4F4GzcbgzIhGO4Kv3UC9fBkd/giSZYxe6LqMfi1fXHljzJpyOUjNyy7rfsndI34mGRJJ1lIAHFZPcMYjnQXfnq67EJU4YXRVa72nDe5u4UssU0msDYdNXJdfuxDBlVA/cqaoIGsFFA8XEzdcS8ldXoH0eiMaRIH0PJENc4EjYy7D7gSNgW9TbgSNiSyZgLepBwJGxW7cPdbtw9kOJ8HjKvwVxi/JlzWxHzWxHv9L8SW46zPbaM6tGXhnbaKp5HqnkdF1w99FOenPFSQC7XTnpz4jX1t++TnipO9tsn8p/mT/qy5f8v55c9uor6ZLwaMH/ggsxY1GCmRL8R0SkkcFMX3bHRBFYAB8/kjt0GFLUI2C+LT/hhPj3JGE/uUOPJ+wQIhrHg9NZmEKLeWgndjzb4aVrRkzxk9lAmwaYtLOpX5+UEQIX2IdtTd1WW+yb9JzlHRnE24/GiLCobufGQcIUfBt2rBqHl8Iq3iXvquOC/PewlFXa+xNyw2b/qn9U4PTsLl+5VJ0vgtyA1kfHcRPb646DYr3LH7s/I8sviO4wND97fV2K0fM86qPPzkhoT6rwyKcTkIO2RtQ2lgG+rZuj8sOqeaCofeiRnxLjkoih0oKlLtkJHcwgsRfKSJI9wSKvlJ5P7AwtAFVtS5W7AAXwBAEAkAnvHvEAJACeG2wDZjF9GnNawB4AbZNAtsPvAINF2lQASAGvuP89wA1AA12lfpMAA1AAa1/eaOvAAGFgAGF+y3w6UAhh5hwjukX6FwtKiBV8REa9sOi/NlMpjbkwIEG+LUUshGs9waRXArM83Twhit3xg1NyghCUOp7WNZMah3xlf+zXy23ovHAeewBPpgFuWi0mlb+UKM01n9oPyYH4XqP2adFB6+z1SGJ8A+xXgAVLBgtkj2YjMmVsl7TKCR1agVRDxVgC2fHxaYkPltMawbv/HXEw7DBPgST6BH2tdX5Yfw6wKck2dJlGvU88FzaBc10oojcl7VdMnBjdcnilzAhB2yWAb6bUNpa0m6WHVPNBUPvVAB6OyD8RAQyUCp0S2RSIAVzToZVLWZF2xFXzHa//drtoAgpMRTWXAjIBgGACACDShpQAIACed64JswvOzUCebQBAUWy634wcAEGlbTQACAAJ7mfPwABAABNpr6DAABAAAlfvmjnwABtAAKoxd/izIENoCG4Z8pNAbovSynjRHvrxseIXFxrlCDYFl7G+LUVZKuf28fZJbD51Lk9AQHGxSQ7Os8rBPeO3MvKqcmwq1NXrLzgrhQ4YY2Vh6LICeaunSNvZsjlSNkPrtU1D2mT57L04/93cUi4efVD8yak6BvghwHIKcH7WoJTfc1mIS/qlaMBNnAge6Whx6YqBIvxtDnTHOX7HPTvyuW1fSwgw/YaiHI2rZmy9m6/E+KfYx03XBZo5FU/Hcd+RZTMlwMTuYIbUNpYBvq2bo0sOlD71TzQaC/edkH4iBtkoFToLwCkQAsRPlyqWsyLtiKvmO1/7AwrQBBSWymsuBGQAQBAEAEGlDSgAQAE871wDZhedmoE82gCAotl1vxg4AINK2mgAEAAT3M+fgACAAa7TX0GAAagANa/vNHXgACXAAJiwy9lUAgCAQAYhWsQQxIRX65PHHpvkh6foVAS6S1t6/5G+HgeQu5AN4/T6gN8SwwH0ZtZi3amEz7soVld0p2uYknUrZdGWD6ja2M1KYVj5RfTGTurtgR3tueCuhZi4XWVcdn+3NOgl7KqtVHrHagTRKh0DjpYbAmYNVyMKsVYg9FEB4H8RhdQHub6ipnyAFBuroygF2bJqX1ZMmRWP++/YFWWsT2GAjoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABTC0i59zZMstfK0QKL0wUHKUXl6YKIUIz6b4Mo5+mJK+esGG76lfPWZCELLL/h1Zz4nmo+onRSNjelqzQgcmAWSiKnJgkUn9yNhOQVyfeGjt/FNH6M/1Pdv5CUjhkWmPimzFpHqW6EzL6GYZgeKWow0qcVPGo62SjmSEjmuJHKpioRQdKiFT+GtsmqX50plxyc+Ia1aEWiMYXc9mA1KyJT1GjCw3PWUaEbEOsczZ6DaX2ASdVf9jLisy0F85LYc3T+AV+QEuTKqhN7b/Y0RCnKQgnx4TH7GiQ5PxXpWB+WUqdYF2oiaS1dY/wFjpgT4wK1BsHbdbuZ26eLs90KHjkpx2ytXFxJMXSFZqd2m+WC5FXnQAWXSjJaFNHiSEgu5lhyGU0rcea7wD5dhT5Oo/AeElvcY7Uqn/+eSBUjNghdFvWkxtDhd+B//bKnXlNyW9gDn8zOXIe4oldAhoX7XF77XTA7n3bWVACssWnNaCTwmSAmC6a1N2kYXjHK0sa5cBoNspI0TCmqEZDwpn4P0+quWJBh6CWGQPiFrnBzsMsOvDVzw+R8KASrt3SehWygWO4wpcV62oqi3yv6SbCW9LbfttOeVYoCDYKEa5IkuAx2fpmwOxcP5hyl+lNBG80MyqFyTA7HPeLcXkDBHBBN5VQnZ6s08F7aMIDGi047OI7UTnoapKUhlTH4huNv4HQjejI/862+c716LES/4D04Cxrp/UJiCuDU51BxMOMm8JaXhnZYC8ra0DXK8mh5kl5rvHxWuJai4w7jLs6OvOSipS8l3Loe9nwTG9rpoEk2PjTbpAvhfR2mdSLCIJ9ChiD5AhqJ6gKc48rIIzSjtSESKvd1HpnnvgFTf5m08OAu45NLKr5c4lB/+YOnQPujWcD4PytHhlOR74xv7VsKtX+I1vmEApi9OQd4zqRWxcoD7uMPDCFvZKcTSyghR/uX9HiFCoHgifEEr7sGeKtH4EUfbeKb4ZcJimU+WHYyo8DP8f2Yv4RBTXp9C4BiqXtZ/fBOiFtKmrUc+oXWhv54hsgIB7D21EYUmKooVBGg5fhN87DZssnmELtscLbq6iQpTkIA09SxBVmL93JYrLyt4xDXIkL3DqwFvrF54ywLPaVtQqj8BLmQ5TerqaJ19YWKlqnPOouBHz9zIAW3ATGzb++sctzqEM+iGNbaIw+a294IjuPqWo1Ps5u0Ux8642ZHHfH7m2+lE9B08NsfU/hPn+v7WZAYAcBFqfg/GoBdhxbWruJoMVT++uOhaJWB1IX++3PUyXOS2mHrHOu+47LqOl9hV+NlnTMoaYWeye1alFjifnL8mOBxzDc2VmoZqzApU1VINbzmjGn8t0j8o/qV7ZyIHHr9N088A1n+Wwuq/nm3GOvMg5bul5a6im0XzpwkH1xUgk4VDbqiORMKqOR4NJAiNxWgw07HRkeim/TKPWuFyZVOIEmcutxLn7xBp7hWwlRSt1xW4jXaj7x7R3SXVH2cd1040O6J9J3PWFzgpTXRXFml/VjDtaMCVsly4bLgGm9wnyA4EyD37u6OC0LoVkWdOVOAG+P0edTI47rlAAdA9pPeJT2YOZ1p+6VIagsp+D9LNymwjkpEDuPsMtwDVmfHDXNsTlihjJwtBgiLEAfBFcpwOqJW4kERyWX4ybHFcVpX2nDI/xKV0iSjBh+nXrMsjoAkZ0QsOu0DZ4KLGTuXsAFdlZsrvufV+lopxvUKSQU4P9qRp/skby073DIgv1m6OG8PIP3WV3ErVFmh00Pn9AwH7MSgRh1eJyJczK2/5BiT85EMScYMJJhTRSp6il/PZBpLKicY7wZpGeLUB1zSoyLD8xE7XPDVTavyTb2up9fXKjId0bi8OP9j/fFbh54/z0l1MuHx5jzIdgpmdPQoANxCLbxBNmEqqk+YeNQseAD18EL2kYKQ2dY8zuYRaxW/v/fpmtnHsZ/4UGW42mql1LJkyqVeAnTGxFq+qggPkPCMasnkFtfLiMalL6oa92otEJ36A0I3RXABf4sQwsY3/W9Jn2Wjz1ap7/7dZL1utkgW9QHDxRzccnBZSo3+uFfvA0P5QF4qz0/ghQYNoBZbtstK4QDH7HikXyrnV90QKHgQQzHmGCqQEQyPqqHx4dsR7UCp1akKNoHbUjPUnP10wJBOCONyWXAD5ltID/hb3I1aBbVa2NMciy38mZhCV4UYFlnMm+2W9AUgRXw5n5HYxQwmP0s2CqyHHieKaRDtny+DNeoDUVTswL0+9N7FeYBu+RhzQWN/AeMkcb6q/1sl56snxmFThof3ronIJd0wv6abSb64NJSWky1cd66GESRgCuw/7crQOn7eXk9nZ1MAAABpAAAAAAAAd0R+dQMAAAAACSD4Gv9C/0L/Qv9C/0L/Qv9C/0L/Qv9C/0L/Qv9C+D8pbJwLy14ArBJpABsvmnW/DNZupT+J9ZuRvF5YbgPTSdyeVlBkD8HIfixRlqFNRgt3vs2QZ/Dnsoy4MNUeyRlCzxDXMkOS0gu+bPpKNem+IwkEUPtJnqwQUgHvvpF9zwige1hQSThFGb/BSjoHqXmFvvjKO3bbgUCNfj/wivwV6i+4HLo67xnl9GASbVygXXAWV3/1CkcD8A96dvLt1Ih0lJH7VPuQd6Mw8h3o6W0CZB4g+ZdHVVnSsgzAGS4vUhWpb40Wwi3j6E3fakUUUoWjyFWgcC2fcAsqlSPyhuh1mCqKDbIZfCyeKg4klHHaRq5n8/jMgffWpTKRRQRqdhS6MFUK9OtLPLMhJ735JBhIxv2S9ju3Hojd7zN4XAv3W7vO+vbZ480i5SAN9qoKHixh5iQ8pEk7zIrBZFJm9whY+D8nYbTeIJx6nwV/5uqyrBp8OO3VZPbkjGPG3KpA4V07UNMaWedCfcE3dXCgev+1LiiqG85642732ZNADHA6x9TzkuIqlKKmTlSRqdIsciRIzJcd27a985w5tuoFiEa/j1PlfT7MXd61HHZOREpUfJl40tMpcWJRZ8SC+VWI5k57S6xqktewGRZOdzM+iAaB7WSK/agl6Nh33NFk6uiGGqDg6O0TouIAaQ46TPWIj8eoN5kIzPmTH2Lbix+dR8M4adYWHUbAzkmdn1Q9tS5JRMJJ3iRkvw9VU730ov9r9Zd/eI32iGWPIqRAq72XfxYolRDkA7V4/DnwFhFpWcizcymYbwJy3hi60CCm5LL3kMPidVSXwrUDVcXz1EgSto6GLL50HmjuJ3UXaExa+1IH+VBRapiDsZ5RzJk0lpnrYWJc+D9FKuP+ulFRxhPEy+85/mFUej2Uafwaj2q97DBv3CH2Aema8CSqig3l2mXlN+UmyyTwVqFy0pSk7ulZY+apOsuvfLuQ/q6SFeUvc7LJjxn73wNuWSswpe0gJiPlSGrdgdiADmev0m2qoDoxvl/NPQnWdM7ujsyiTAsb2qyV3o8Zf6boBXJ86QkFzSDWM64yvCZN7eDIha7Lr+W+gO6n8rCkc+1VibEu5PFBJKzpz41lu7TtYK2zrh/Jvmn8qIn7591oHwJd5PUJ/wP94U9LbT/SIW9aR2qDEiPlgTTaf1H8y7Eejb5f1vLUCHIzyxKTc0THtl5eTNytqxiZuc+ff7kzecOvrPrYckeb0ER1BDT5LtTxDiA0Dym5zedjDXJX8Dxk7DhjaJ9IT8APc3nHYIZTE1mcBNoPy3g1XOeKVhO/+D8WiIx5FfTX1fNE/qYRva3oLkk2+PqeskSIHGUv1qaCNWv4ubyuibwHAsTnZ8dkpatnJmHYah93OenQJWVKYtCliHR8TmpLSm9nGh+F9H5koM55ltAJrmn90sDQjHJ4FvAdXUqYcLaPkWeFk3z9KB2UU5S1dk8cGLvEVfG5Xpv3POowV9G94eIGzd8HGacyqc19rUj4S12Xyf98ID+4v+N8+2iZAyuJXVYsXtOUuoXakQmLzRvhE0RGjCCLfvsYmIRxKJ/KTLlwLlQRLPv1JG6fvcheVlKy6AUiNJBSv3vL5i9ANLQ0JsHofdONnuRrJQWdHDBA38klo+5+J+mFy2edJUI2yHZC5589w7e9W7uPvrsmKcevZXEuHU1hultayqPeONhjW1H8wY++hSnEGC/prLTqzitiE+xJhcHqbVsw+O/u2oXceNr7NdWbVEzDuIcdHwwX41czFD6oTgGW00OjXr9UsX6G6znYQVLLaThgsNJ98vjV5Mb9otR1vqQarTDg5igiwKgcxmUz11Hn8L4+azZVLzLEMaAonE9y39ZEtQRccQ6+lBOEuOFjXPY/k7s0kejqWcURegx4TUXEC3/369Ae78FLhA3xoPvReZ88gPrK5Brr8xVZ1Atw5NU56xuPxILqLzCwTrznHEWR4eUomPrxBJfn/Q5oyXcZowKUlQMNr+Zlwmr/dqhXsQqnxMygQIaH6weHx7aC6ij1MVjEDbp/fRvyk4q6KMr2H70rEshnnUMev3BYw90gKZzgGWxeNvJ5/rf8EQ5itbEI8CShp63MHtdFQJMAhm9HyRHPcBqwEUA7KF6FWJq0kSi7Xv5B4a5T2P1K3HF8da/3XnVI+IWm9CbVFS5ZHuUM+0yRNzTzIf69S+OAdHp5wMzE/QhqAcdNNuZfFiQIInZNjUlKOrKYcOWyoXeMviSoVBS4YJOWfRJqFKf8Q73a9YUN/JxoUtlkBEUVZxuruOhlsdzhu66NY99n6xOSJrW5fQWt458Np1fxPuLywWN2D51dMG9BRFSfozK/v80oFM5l3HJai9ZzlY7JmKWdbLrz8jDQ3TWX12VgE7ZDVqTg2fx/TUr+WFkv8igCEcqJrm/nq4S6/xTcLHBpzwO4eXrooT2kbd6AtMsK85NIyoOKQIFvQA6plZLsBAfvdA6o+3Ue6xyn/TnontN050R4FW4b8hbKM459oc9AYASACYGEjJDInXkBvkrWMoGWC5OJh59wBAh/nJMCfgmnRRej6pYBUwW+jG0EQEaOdY/HrofIk44z/Xww+IMUSSzKQAtxyDq5M3C7E9rj35NAnwy4UVC1gTZW7p0QC2Ea40Eu/MQCQTjwGNwPvqZDT11NPuYTJYL67tRDBujc3oO5Oh+nzpy5zKyLJRssPf3So92lvUQrEOpwe5WLejlFcp0W8iqpT+snImI8A/Z/B9z9QvMWhsCG4jiYK2nQ19yluMHtATA/+6EWMOyaelLkLfyg8kZ/xdaOsRzopT8RGHEKuZk03DNx1IeXjRhP4dZo5Cq4A4IvnnpUOg/n9GC78r8NYYOMvwmg6ZYDkf6CtBrtqUI5+LP9j2RgksI1LUe+yhDM7adHpaWOjTiwNEu48orlOZdBAYUWPGayYJkMLzk+5ASRpehW2gKMf28MqecTUo31qijzeadwAxkrHCrE01wLca9/Uy34ZhUQHF6xt/0W+mAtbA683nOuarBA+IVfZCXr2VTeCM52nkNK9ZnD/yNOhYyyzasATzGJ9I/x/m5I4F7ebe8zZN88Pr6KVfjS0wM77DFcY3ThSpCMjfL2wUoulm6RfDlFdlrY55FoAy9vpXXBCg0Lg1SxEyy2fpwyXBeou+PGwiNzID4er+WyBLs+w1kwGhFD+OfRdSt5TXT6TEHB7j31tWrsAwOESjxIoGFDPWiNi4MMNc+hCrCc70DV9CaT8uqAZDpmaRGPkyMCQ1YZA7YG3tNWycUUSDNb4qX65F1Ao7YwEw4pjLKvpI1jpGlqW+COp7muvLzKab8Bno9vw+dOtYLwbhlIBPGR14AYq5KNs1qV+4/BTioLRv4kZrgnQRUFr/GcLGgniTIL+2ESXc9XgAbyYsvxSPqs8UhUg2DCP5L9kS9lYB7FQoQ3ZaE1P2sR4nC+24XA+JpvtHSvwWq3QkpH1O4Hxc8sCeBoMu3mfdQVIhjWqniZuw13+HjAKTCXS0THFyOkUDuU8Cc/58pZr+u04DtAHD6BLJJ6kXN+j5zFp+1/K7vuo4vdQdZf2vKkoxHY8Ree+iMDUYeu3jGA9L9vtYgPLHGdQvc25jgkN4o9kPfV5p4PjsvrE4fRoygTbcelcETuBsF6dtHh79WdMo6fz8/D4/ul3moSa2zNKHGK7lI9JSRyUzblCF4d+fy2TIzn0sJBM1xAir+E8GiPpRgWAytMnYBKNXsJOu0oCm1qFgsxHMTEWeHmlnGXGlEakut7B3lH4BW/55r62aWEPOfPxlod3cuLomB842aU9oAOEvfMiAGECvUiPAnP9XmQmLBNV5AHmWwPJZK5BKdhXFU08/ebDt1n3bctO3IwVeGkbATUZm+c+Jqbf7t7jiPvLqMT9ezAlCq97uWnHYs7M9cuNSGYu2WswwTR8PO9Usp3/9VNuwsCGiLB2kLsMCtNzVFQ3kLUBUi/5AiHA1O2bIQSwTGxUhJ2eKSPeSqY1Kez9BcnkHrlkYW333Sm0Dn6kjRE9ceUdauF3MLIY6/p/361vcOEw95QZqeyiYPWrsvUH+G2e5pU8cfFymHNNBbB8Xt1c8bLDr6wJHpMEfYhTdYPeYEEx+//7WfO1nzxW6lLm+vvtNEEdL7IBfbs+D6KFiMlPeotw7mvarlYYey3rCSRGTwL3kZF9NFS6cRzEWaBmdKRD56HcyPCbiMhLB1Cx3x0rW3jJmVVPRtxsJnMjul8+5ICxaNJ9gKDA7tWwp9jCt4u+kZdI9CVBzVLkTlw8vpiBpjuHG8VcyJemk2ryKxtmesvPn+c+JqaHq/H5B1WH7QeTU8TWRcFOSnhxNOtqig0OsN3xSSyR5L7i7RJHvZfdLkAzioKOPQAK0DFV9Ao2JIucGsLeo4nwKY1ua0y2ZzJAapzIA3TLCn/JVRLX7G3ATvt1nS2m9kWthSiRbvqDYvF094BbEogw2Oxtcgu7aNmBXCDVcs9/NjXY7AuWgcmmDqSeuOpdTexb9sN9/2qvOlWqWZVOOFTPNMszcRWRojO6B8sF1EoubO6hrBkfwyIXIRz5XPUOlWWd7NbetI8asB8t2m5rv/mxuJxlfOrep18X7znUh1w7Y916ze+v9exdTJMTaPE95+LDu4u5VDXlYgwDh2Z+qqLeWB8iZDFVSuPHX1TFEEBwVaIz+rOyqz3f6An5eb607cjuLRmV3qRv9oJ31wfWvPy7BSzqkDdyMOnKZNPq22e+EBwPe6ZIu65Q0wpI/ld4ly1y+GY4Lc+Og93KQC52gxl2syL2p/pfyBnrAUxBAzGzT27hrgwc22NHYr2I3aIdd8I46UkJujDjcvy/xZe4fn6tITujMVcojdfv47ya4KeKuptr4eZQLNBLwXV9dFnyq/PQIV6QNhg2FKqlSn5W/9RgJpGudnuDmUyHR5mJ8uHoA9jt8zxIgFMLu1ibeIlYyXhpmmiLcIE1TQsmc90BcyRyqPoDfk//uxXgc/EIB56aWGqDz4e6jGrA/QX+o8Io3W4KbbwNTu6Cl5CfLTQwjop/5sHdfPIZ3bhsHlZGJ1tlOf2WS3sYOXkoES++xypIjYuY4nRRZw55GoqohYVZwNmmMLWesgfQnV+9WHjgHSfjhqcCvCqoBf28OrQCP1AfDmPIB3JCDsr0aLAEyeARjpq+IVZnRC5/XkibsawqcEvWQTuDvdJra305IsUZ6/3CEBw/9+KOgBlZmPnP95gGTZqEab60xcbQTiOUK9GnRX2cZL6QVXz7i3wFd9yJdoxY8uV5/WFUtSCh5R3JQFyQF7r0gOBZQCkdj3CG6Brq1gDiN0Q7pSWijOFe+Fodh+RxQDXOFW+HIyTvOFnOK3HQqqGLyy+Oq4nKi3P0RSIUSBbNPgS/CoNbrxMq+qx29BI2e3pIzYfbJLJR+WFiZNTEvKFdzFq4pOxqFuPlI95OE2cGvFDLJT3dWqrQsoBZwIWQpDr0v60dc7zU1TVpNxAK7Wix+Q5O602bkVpi88nmmX9bEWTbdKr2WjqXX5NAC8VqgYjmFkSs57odQX/elPyhVmBgo8Ld+uLN2RrIS2MXQauTz48zuDITTD0JW4W4dc4bovAT2dnUwAAwJkAAAAAAAB3RH51BAAAAGkDc9wa/0L/Qv9C/0L/Qv9C/0L/Qv9C/0L/Qv9C/0L4sBK6Bau7AriLi61KhBVVSFhyDxdsUd/b+sSqhCLHu/QfRyAbM5RBe3wiNf8QUwZ25x9Yfe48p9jRqXksehhB77fU1y+kWLGSdIfV5cbPdJJlA/BWV3KG3mV8ckZTrDIVx7PY/YlnzKKchtVQGZNzfyaSthkxX6SfM81qF3bJgZLRZlMcO9kOroTh5tEMtWWs9yqMxw8b8nwWWSRXP9VkyQlbLGyQifR9SW3P2MphNqeFKulPun+S6v0ikIvt1lvg0+PyKksGQ7jeKiYW0Vc8D89yOX/EiNXZ5Sv3YR6oNfmkmRD6NCYAKf9WimDUhCju2+Z6l7PBLsaqoonx1P4BB+oKZa8iYPQvYSGIUOz0qWbJefDkEVR9VPna4Y5KCJv6xwA+6OuPk3ZoxpSSLiifphNqMhvyv8XTcLECa59kfIL4iQHNdiHPuGr3fb9s9oc2JHEj3yU8RuLLIh5XD1bIXMuaGwExK3/LOkArP4KnniSbOG98UFj5LYdrmd6lddD+J2kxUE5WArxIWxu2D9DaLwGjykpP6ws+jAwsOrzqLbyqsw0kylkqcNbTa0VULSzryQTpQPcEdA/MZdzIK84qACLQQh5IoK+G9KyXTX/WP1Gxdm7FrmHxxcX2j/85aFOm5jeEuZt85Q0QwalslB5o6gQsBVwhj+wzyTNpx6E1+eQbErxCkTR0F7CDW+hThJ8f7LyivSrDUuSfaj6oiFZs0fNzoiK4MLjh0xpV7n2yDsgPwqGc708tD3l9ThRq8xmJts65pydN1kgKipNHIP45n9vBSDPMKOXdQlVNk1fhcEdp+JMiv8ZotrNt/Pln5s070TiytXVy6IUc+Js3enxxNsD4mp7piT3PTDVPknfEekqncDT1LTMW9g2eqIGZkUI12bLjepMzU8uwPlcROdQwKKaIFJUlxUQT+3Yc7Q7akivmkLKLV09KAPJhDZbMSRugrYWMFCrZxsVZ7VtbLnogJWzytTO0IhiCIdBEX4WXFfNYITQIA1ANP4Iq5ZUXxRpeHsSa5UOwhlRtN7zLjiR4P9p0cp8AeLXVzlZcAQF9LN4v1m4b+bmVxbn8dyUaZ+rh+JbZT/GXboqKzQZUz5eGVIU97m/SqcVQcFbEbIBWafN9XR/P3iUT7y5cflFy3wBT65sDBa/ZgHhKyXZdMF/t1NfX7616BVxGNwyme+Ctv7ZLqVkC6UuzROFDX5TQ2T3nLCTw+xxzDXBK4xli/6JYypCv/bx2trEPgw+wYaepCosCGkWaj51pY3yJGfUVudv/fnb4hVaBMYGVk+tBRx4v9ChaLgRKacY4s58KfzEroY4w4Zy+wKP7F1WWIKF0Pn3nftgo+DX1JZO+HE+kVY2XpnzM0Jd2PkUrJq/mWl2+TKnWaOB1+4JYFBHkxoefICNBs78Vb4gh5hvnUZJnc5QFOQPJGoZZv0dvc820OlZXkOBQgFgsw645Y8LotK3CGXbJQAZVaFsmiLBRk2yiDfrKCGoRbW3kxMOsntP8YrSS72/mLrHd4VbWNXnbMLAkz+z1QS6iNkOFRrCnmdnci9Mbk489o2XhVxMHXeJkHjC2Tm3Oip+D958sSm6pXs5i5jqlJzMI99jlBiLnQYV27Ood2n6/MAPLzeJTUCTDo8duC++SpXTtU8RAn7edxgXPtY8BIwwRxIV5zOG1Akz5yX+fLlvxNwJ20xEdGCBQnNKvDi98k9D47/eTtR1QAaJUpkekrKhvUUt3tU4KUWY+/hJRTNo5kxwSSIsgyABqhZLwse3zk47kAV7A+5/bxmqzPXWzBOoLmfVC3+Mruw7HdExb9by8DZyimXM1E3Uj5cg2mPiHRVgQq08uAxms7PPQTOfbvty1OwAraNo3+2SuIck26tTlQqCdDSY14g6a59olplPIdvSSI4Gy2kx2whqZuxEvc+45fILSaZ+agObst11enyo2S9llw9vVucxL4CthE4XJEZhP3AY+IG8dBTjeTRgELqiXpVGtOjSbrMm8d89E0bDgcWMrl95lvtbtC6mY8s20X+KrbeDoQmEljPB5J2zWGXQz7TGOd9Stwe7ZLODcE3aaS0ptDu0ghNKGWwXlSRhVcH9UFIlLhUhl75CjH0Z13f3UOsDL3Qmx6OwEHedxbBikV2n47+tADtFCYUbqp+kV0c7IOnRgbqn6p6HQKwDXgqnvDpvYCc3VQhDp785WryybingMi0LQ94asZGbpJ53QlD1tUPyqKbJZiQvW0NhmggS/fSYtEmFwCYHGdD+rWQsodCkpj9CSSxUdN7a7AwJuAVSYI0pRZMlTQK1ZKiY02kvfaUo7KzEh6nU4PUTxxzE/+0wESL73L+arC6ThihbaInLW6GxOOc22sRk11EP+rUhzxhG74FgtxRYwuzGgzivAhg3C0koisWA+XEyD81NYTds6Kf7oEgeqTz6KXvoyQA0EYc7eayWqEQmntlIEkdgyjgwd9TsNedMfHU0025TvhjE2TJHphvZZoo7ZQRleZyOb8IhKrVGKA68D5rZtywwah8bupTzGc0ZrQIpZl2j8c4jHgtrv8dbHQPTEFInuQgK494j48FODH3bTr4a9pIiJ5rjkW6VCbmFfX+SWJonZgc2Z0JybjF520wv6Vjwu4o9GTWtUZ3LkjAFHRmNnZg1ehgxwuM8TGdlhE9IHAv0VYjx36kYoSAr4WgY1690dYSoie27ggJFM84KAu9uV3uCCLwuUiTyppQdhzNoUSgV9yyu0kyruq1Lm03GNc4pI5GiiGaZGvpGMeCuuGBtKfxdePaoi/GgSIklSEFYCs3TvH7C9PKpYlefUsLy+tBFX7yYYLtJYIpopdGsxoseIp9Nvke/y/XYIMhbXnTofjsayKEoHyQCkdKn7eXPwj0vD+Bzzk95Y+LRM+rpoKNzq0gTiWiS7qOVC5XKkXNxxxBCFX9bqkFFDRKLxJQJMy65miqUv0mAr3z7IZNAB37gPEI24VJd0xWJB7hzsJffbGMIbRZvtVZ/4GwazkGvDD55WM4lfcoTx+qr9uY/7e5QD7HcGCEtiR7mmF7TAU6o4Qjsu6mbhzedAgTaVx8tqN0WYnYqA+gWM3Edlb+OipUTGInHu4i6ogI6JZXT3SUdG6hZUxfC3uFXz3nSR0/waeknZjiiJSGJibZMIAJ1wRClqagCllxjl5hUneE27AxyZ2fDknccVpPuALP3j32vnCo9vlAdzpar1qYc+5NO/TqnhUE/vqILfd2PchUKITg+GgA4GvXpzaMfDxo3DmwD0Ms4Qz9dMR/kyysXbxgLg/nZXp9M3LTqvd6dq6tyw+n4Ml+52N4rT+Zxf1tieM10c2sv06rgJEFqfJooWR0DZaf8W5J1EpmUB/y/s5yT6BFf6ZDWoW2i3CUVXA4C39g+xXN0U847IDu0ghzND8y8a73HLWPAVeTDw7QL4hUoHs2o4/vRwnKJls2KFneFdriBpyk73g48aB/eWNQ0vWpPsh6xUJMB51WFbys1uQjmBmSKVZV3g7ZxysHf1omnjPoTTjvVoB5z/eaGdA3NSCmO91Y8N3bVT8KnW2QhCkXcBg6ZEJaO/KE1I40qKaod5eXw4TG83lNLEm4AXfYwgdoSjuAT1sQvgtFIy7rbFZWkKv4lwnEdzh3hBnh79vXoANkLingfAUdcZ9QDzoIdo/bQyU+Gk0thKuZNx14g8zL7CgqwLDSBDRm9TV0MZ7gWB1FjJ7Zcz+gMXvCjy9B3i68jBkp3wZbYUPw6VPucfW1N35G70LjO6PVCiQDo8O+9x5wtNGSaRqHW14UwgzTpHBGQGCGBlY8G8Ni2dexneaU6YW4NWqEkPfza8MPvS5gOpFTQTJ3w3QfUDw9dg3cD4hbBQJisTqRAe5NngO1XsBy8f206NaUd8tbI1b8Xjq3TuAZDZs7rDLiVlRJu4LaJ+8ZPHrxEuVnDQG194XvLs3U6n914kXjlM2KOflAnVJ9RuWC1nt6POoTS/qanJ82d9gLJNf6zaw8JhyVvH00zqf/u5pjQ+bQdm1EABh3p7GghWFJXj+EkcffSGReNHVjaXZl0Kz2zYA+nvkqyTldJzz9CUubiHnkYd6fdzwuLrUNWRRy2o5YuDtxdifpm22JbvXrdWe0nYgtY5GEPghXHBb6RjqJqrzznGbaKopHe5/mrbXbj/iYNhu7upChftKC812rqicYQ/5mU5fN+jCa4NCuVWb820A6+f7eqMHYxH3xo0M2IyvBiv2JkAtpO8FkZLtnu0zPWEuTWr9qiYK8z9FbbYIwckkh624Pf3ivacdKD4haiwa/ChNgnilThu+lHX78hoR2Y2G6mOurrUySfYGuwgTyScdhiFpbSlMJgcJxlmw5okyzMh3gluEhhowX2OFFBlIVh3CHe8TrRvR1kl+UkUQvpChTyPj+uz7CQxDyHoS0kkkRMzp3M9/ftLG0gwGxrU5+43HK+HONEzIfB9Od+1LZ18maYYiLwsTi+Pe1Vs2xPjjv+F+445taSZzj6t5YU1uxQBdA1gBFJHGjxlTkCVY1gXBr3hTcaMqEvS1CgPOnBSRwi5SNej4XgTGxQojKPJ7hB/b8WNk5lujIJ3rmC2TIfyiniomGhxDgBTMGJ5xU/HqY5bPAl2AZN66HSpgrau8C4m2SE5uhqdl8hxxQyn1rId6PYB1tkR9MET5oEn9zeiK2ecdcaWJqhRkD2MoJbgS/Hmk6vbt6ACtkZn+sD4gumvctOUf/ZsW3q5n3hUAoCNyLxnuUht9FvgUJ38KyCMcnu9oX7LzLGyD4hgwpt0db7DPxQRcgtw+NswG4iFtLmZCpvR8LYGwXH6vpP4V9XqS9Qtt5FymnLbiKgFOwvatiobdgx+rCJWmjkbYCbeordpJhepPjDngZ3L3DAeHZGjO727MWK8yn7F0pJqxOED3Ku4B5Hg+l6N8R4whMXiwshkyl/N3V+zACF7he1OSU0ORjtvX+Yruq7256lF//xF3bXWbL6jjpyq5YbrjPJvMdAA8yPb3EtSX6uHPjacY1lHOVNoqV67fyTvZ1LnqSjE/IU0iovct/Rk5zn6BXuGThMyxv33thzXvBFeRELQ9G5WbnqVGZSsJs9t2LWqsltz2od+K1IQ6WhIQEYIxSrePAoh+MXWKGcmGolsQFnlwED4l5DpP8hwuixjovO5XSd9H3+ZD+He/GwrM/YqUsY8S4xmLYBeHSuvyRCdOCP8yhWNrrlAkrp5dQC+XU8P9jJP87Q8kxA+oXnOWkb0TiHTN68Tw1ksvwYvDUddqeHCH3UWFmabWKqLpWa0DW8nvBGbq/9CWeISUT+2yQ7eUuBpwT5hmTy3m8QHnTyB6pFq6JPtqQ4KOGmzEdRmQaZbyePIM1HThB4WALeYpCA+pQh15AFvtLj/+hLH6Mx0JQK4N1z0SV6qC7nz53Oxd/5o10ATvpKiOPYqyfjZVOxuVeVXJArOMhuI1psDUyG+29TtQzhRvrsVKV/+PMp+9Fqke5yDES1IMyztxaIJuLt4COBYqsPyq3dMT+ER/N5fHZ4yPSz95PKtzXgGQXKCwCr4ETD1tJIdNyK3a6k0Q/HnGLOcMXZPZ2dTAADAxgAAAAAAAHdEfnUFAAAArYSxShj/Qv/h/1r/Vf9r/3L/PP80/0P/Xf9X/0L4IpincqH71RaUqMs+/OdN5o5+Pp0S1kzVmmZpiu0F3YcG7Js5Xiegz4cyA+sNJijIZv0OnU3S/0X8iD8comB8JRK/81oByUo8gyT/F9NrMIHrLbukXZODCi12OiktnbyQaRTLp1f5CMNRszr5QyOTvjpRKZRt6S6Avrvcyh7ZXISyBqqIk4kFWf2268BI1GqK85W3aFGnq1VYH9bRIwB/PFamoLeFyQ+k0Fk4cGD1Vt1FX18btP4sDh0fvfwo16Y3g5NSW1YeF3pZCw0HiQQb1mtcdvAGJQ5XYove4r3nvm1KykeVJqIAZtqDBdOTijfDlHpHnkxsmLVo/zEFZGAYt53r6aTmceJ15AponCUuKIajeaVpW8tXfJSpNfhanXel5MOxmQWI7mTS1KLVtWsOd6to+a3NP7CnMCrLxdC6D5X4cAwZxnF5fHLpBf1rTBo2wRXAa0vAiQW1ASiG6kpBceJokSKLfNTn3WfBuPaVkegA5nO+uHA0y8a2B5aK8+xtNfQKwV2R6eV7/QcRx//OkjqYbbV3MvxVHG5D8eEC7Uq/vOLqUXi1GdfqkM6ScToN9MYsf5I+GeNOvAhDJ0LOjAKUSTIXoczghBeULFyQ74hHwB4DzxnAlFUSeYfL/VGrbbo2ODNd9d9hOxPtndhp6dzWXNhDoetZ5BRv9LEiiHo1aCg8clpAyQS9hJHmuzBnzEtgIGlYQANYXfUB+Hq/d3teIJRXBfbe7AHx5/lRbwB1X1pXJqELieJVGt4Vi75OoURJSTu2p64ecpgEPYfB+AUPXYt7eUwiRvLfQ/TtAmfictAAYspWtR/3CqMhqpXRDWJA3B3AjAsBsa/uPqLFcd+MbhDDniglP8nUsglGBpOoM/3+z+FjRpDVRP2wLp6oXgceMUy9PPoYuZEfI7ACr9W8a4zqmfwT3ROMWYpek3j+iERGzFaf3LU2ccsKvLLgbRyHmCtt/83/s4sRw/0g1yQjrx5Q9ZvxUfB+4oJ/ooFJTqipboQM614KV/8XVkKRLVt9k0v8+Hjx808d5Z1Wz37132aCfDA0vcL5osPiAzj4d1TMXQFjbhs12usPTP8zW173ktvheyEGxQhRcJ+fYsJCdrz2pnJvFjeXaGZlG+95Wwne13W3axAh26TjiabcT9O2Dv4c0P724TXMRGBpUV/tbZ32SgsZLi8L7E4IzuVubazgQcrsBRQLb6ABnYpB2nHXtCQqI+nUPhH1xDbfobPqRgZqkLi6zl9agQf0k50vIw163QswaBjzk15trksRBhTDRLVeLOEzB8ZWJNxI4c+JArPVYsgXeLSuaiB/+CUDqcRGct7U/9mk/6RpykeCsitGQhxIBfBx7EH3vLkFwWI2/5oyuqEiDY77H3Asx1zy5Xagw/7fpkgzvoPt7qK1LtDdVkEnRx/cai7YWTE+rTW0JzYnI6A+cpsgXoDDkGmALsAgL5fydmQ9QvCRHvGsV9TPPq4I7ec9nXDT4xiR5Bxj1nUsZwhmmcgLIrftvDQOXkmYaWWbPKT4FIuHS5H4QxgtLfAIGH/JxGx4UomM2jqn7h+FSxsCij2Q1S8CMhBG5l6Cap9AnpJo56aH0UFu8mcKpGVqbZP/cHrTbnlOnVxM4R/dyt72dtf7hAyLCeyM/9+meI1urFRO1egTsdFUfeO1GuyNburllQvGK95NmYXnHsj29HWP4HNJ02eC9ZTs/ns/oGAuYwGbHX0kea2oNbxqzlGJ89iV6z2rA+79tCFxrOT6NiRoYXUBijOnyLRmyHv6aZjLCP2ZW/YljVd9iezueFcKhcU8LwrlRXApyqr17HiGbjmsFqqmHyM/HZThWxYyWqnYiyobFpBHSqk1IK2jYSjGI/KGhE6gv1ZRCzz9ajwVCwzSCXQIJtVR2WIfpo7gRCnEEO6uUBY/91JCKaEvkjELOzBwIXCdGAu2TpBf5+9YWRDi0t0bJYWePvaO7FR6fnOv/3uvG1yB+N7HGEE9Zl/6YV6IhDws+YaP3vGfLBrbe45un/+bomCIxD4XWuMOkkAvSWWqu6RB0ON5N1p7XrAjk9jRhk02ptByCxUrwjCrzVlRhizB7Y7im4yB1x7ZM5N8tbq5jR/QFXoHJ3OpkpMGQ14epOOiWHrdmos6NAtbzhbGW6cQdGnHk+myA9aN59405PytOGGTzCqE/w3mgcSYFH4K/lGlP1mGbDqKCaqlgzXxQaAwban9wjriGBEn38hcD/izElTM8IQskRCsfXezrybKx1MVJKfIarnt+PhpoJ41tNOqu19x+BjGqXNYyapod873t+o6M6+r06FcVjUI/dCw9CLiwafL6erArZ/Z6RLaw5oKUMj6QLSTbTx+x1wx3Nbw8ZcM4OwlJ4GttrtqHuI251SXqFH/Jh0DGf9Ptzzmu6/u3yM29ENcdRP5k/WCVXGK9reXAa9JVq36Wfs6A4ryqqqYg5Y2qoYdlodOc3H43rZORv5opTXklytmwO6dKJ+rN3Ar30FTF5K9lwsOjaU/O47C/5mu+R65dEjZLQkYp+i/ujWULXPODgku3YcIH14rPlX3REbTfjxRCNO/MotAeP2udmVVsoCd2bRGNTXE3bGO244dGwnsPEIa0ApXtQw39f0RbdczIh/VDZ4PwkUcD2LNqX6I9NSKLwwwCM7naM8l1bPhMXFqUNh4cRAl+rz6C1PTHWohgmWmseAu5hPzHrCb+/xtVLniVfbQFRh0UXorCJ/Hpsg6tShUVI5kfnPVn8sX7On/Kd11NhjBYYvpnBbmHbDGe4wDHTi2uAsddRTDmSEweSEP1z+1gWYqFcqimLAzHoK0dTXhxDJINZZLrku4c70ny6cWPmdHzFdawasK/+iVcFkofst84tfhTI2dFVtnajuZLBcOTzB5560nyjaKkzXVf2nNlAQGRuS5RtGX3CuYlAn7E8kqCeN3iEWw9F8FoUTBf6exOQbaI1r42n7ROS0pfQ+prbS1B0xsC+EDhieVRXniw/d0oABWzjRqMhTKShX+iO1EOrhvWvxJXl2nt+3D0wEeoYJ6mDotqrMyNYY0SU3jKU2rZMYmzUqg3GESgiYjkXUr60vWgUmhsQUcUyTgHYIJ2i0egMxMLAAoU7+5gmws8I+g4yDMQJtjeAYdF5cBkOmBC1BKN/h7WQjYu5MvnJ8h33lWRKBph40OU6tfIlRbpBd7f6QM7DnkUyZ4OKo6vD2JfQw9y1hzAxsljaH2eg7sjx5l6RP1kCyxrVMRDm5wWgIy7f1dN3VHMcLCv/SP5rnGKT5DWghVlgQdUlKXh9RXyRj7lgoNfbaUgUIJJJgCArBR3g3jNWxRTsdP63hG4DlwEUGEWpnHahCWqZHfTBTfKgSg3r5yFGFmcJ1Bizr17VL41z/lpwpRis1vf6hA/m52Y+I3xS8cWSx27YlpnwkgJJPrXP3D1OvEMnBy1LsKXDH24g13rqmuO6/UaBcpU1Wjcpu4iMvMSdSmi0Zyhl7VEzrhxXb+MK0YY5DGzRO+dMwpKxQ0CnES0/a4U+cHHpRhBhA/Ri7Fhg4XtcgPnCqushbTn1pq59HE6FBP238WkmamimsJkOXjchiYjbApe63QBuBMvTcv+Esk6nc0Vh1D4Vlm4vIXVSlvOUpb0+MYcbmWl0FEWS2P0EpYM65qseuWyatXkWzQhfpB8FYF/+asWwJggey6volX2gJKDV7TDwAOqv/NRrn6zyu+s/m2b6ntaRyOd4Mu70/1fEUePAbpRMd/1MknHN+VdgOak9uLiygwiMtKBac4KO9ApzlFM+Sa/ixL+NWAeM8XQE/l85mvxHTBGvNdsH0aKU0uos1JGKD5OjWvs/zp05hM5eY1u5fNQuLOkvVRiulrRJ7Ki35DCuYBkwFEewdDAhjXx5pj/m21bszXb9KeuiREtcd7jM0nH3OYYzSlwvnqqkFTukaBNN7dfGFbvgeTzetbhPHZ4qHl6lsdtwRYoWfcu4LqOeSuQeXo/QNiI42WrN2EAfvnDv/KiiCHc2qTg+ET2iBKGpxbvH6VJM9GNBvahBg+adUxf31nkeCMSZqpX63R6x3RzqEgzW3FLFR4Sx00JfDuKEaaHKGVguzI8swwqMnFmeuEKJXJDpD0FonzdNhGSJKxWO9v3PS2hmRp11iofkr9c8DGvv+SfsmR21t9iVkQndWgV2Abu1FyOguwt2XxoN1OZOgisx89MstBJmUoi79LI5T8y/ETRvjVuTIMi3lJdmAQjxUw6crK+VggrpB5d+W9uXCO+VP5Cm2z+TiRF3qaQDI9lUWIm68eKhJd8VCMIuQoEWCvTMl7gT/b+yNi5d+tiWFcHc/5LCijiDW5aMsgtsmu13Gk3796R60xALGgqxhHbtahZJsqbA87MkHPpDQ/83Q9NcM4PI87PgFNtFxtRNQzNqcIwtvLHY4dPucbdXoNSjWDcaMMmBdtG02DISloQ0yp1ZVotrF+LN8pA3S27XqXmD5WLSi/e2DL10tgzd6LPKzsT8fWDO299fLERAI7YQoszsSNoM7njxB3JrRL7t8QBt0oR0QaARhERUzgvC82Wki1RkV3c0fjcQdeFHZ/ETzUea01Ew50UdqiEDXhqokYqwjcXaDJnNrXKV7oXoWx1a2ZDWXQHw9xgRKQCBP9nYASk90rV4MtzTaCetvJN+k9hEf+yTWq8+Wq8P5kU4ELRfjfL/gTw5oNYYP2j5MTJ3YqcymZAT3Z1fj3P2/mj4J7PtSwXcSxtzVFAbP0nW4i7crdRfs/5UWy/xLf/F8Tmu/gcZn2KgIoZWq14uIrilfpiXvLFJWFvXqKDwmqR6vIsnR2tRBVHcrtCErPoiUdVb/5ffqBkhrbeIz5MVOY3VIhmkVrzyJ5SLmBRsjda10qwN5MaNFCoSona6snnpgQBXeMX3nT2bKTbBvoghwVoSJMLHr8iW4//BLcG1cXMI8Zn7PPXgYOcv7A4skgWWW3Z25vr4EL3/o6iZd85FflmLWFvKSI2CsvIW35878LOTDEsKfzzOisYJ2H/TuCeUwCKVFdzWfGQb9rBCyenH5gcXeuQXSIAmXAp+m6MLpPLo32Xdaheo7aTUsyNs7U6Sf3DmjLLTb5d3D4Jv2CoBHZihlhJEEWXZyVAN/RX++oZBKGHk8XA7m1P/jetenDtSoA3CARQae2oncqLud4aVO/wzkCx2NiSR2zhRqW6ZaoCuIn3ws7Kuaz8EZTnPOY0OgXHCknWXlCX+qAoitEZv+5Htt/oM3AznvehbbxTtrfZk3gSRWBPnBBRyDRHLfChssqJhMkNR5vwGI4f1iWFhIKAOl5nkQiWdW8l1b5wW/JB/MoGTNSTjY504xvzd7MIealDKZIoEdrWxNpnDH65ykP2QOQFjLEj1ArllPT5doc7W12DxkqdruhFkvfWtqsNFS6xJXf1RUqgtFebQ8LexwvGvxKIvntbkcD36iY9zetIDGxM36NQuILV5gbA+uLnPfj0TwBAtaXkc8QhEGPjOlDgGRBB43rXsMQ28lFa/7hYXwpj5kQJweP+Q00UQzhtiCzO06aacr+9l69SQXml+cjG8cm6Q5TQ80lPk9nZ1MABDjqAAAAAAAAd0R+dQYAAADflqtJFP9C/0L/Qv9C/xr/GP8Y/xj/FP/C+N646Dp+AN2hvHgyRG4omCdK4o46F0hSdiLh70SJ0mDiDOeFXhkAO3Q2183Zb+Y49BaG+VZvtw37QC+NDXwAQad5i08A+P4pa8qOwHz0Jvz4GB3nGQmSdJ5I0hGUTxmDs6l/mSQw/43RoisSvSDK3RQXupEbr4+BIFB8EJRKunhtYNQRa0LOZOtFZXKbyHAqFYZgSpJlt80jsU/5ODShMX95vOhyvZA08UHfcFU3BYe+xqQfJ1rBVD2Wpapmr83LDG+RGmDRhIr2+nlPEkJM3OA7WSENEwhFr3Oy6iaXjk88kgMdRVtkB38J4//80RhMGg1K/Bmq9K0GPmNMVjT2ah9zA1XQag7cR/p7fcAqTJ0f6LF3WDexsaFp7jVQAyP2POX5FwsLT+2Sp3xkwWkAtqzsl5L1GNncPsBUk6HStc0/+LRmlnutcZZKLanjMKc9fFQxpC6ec+fg0J99CSXQCOAsqsx6wWAU2dET4ljH6bFt0u7KBenPWW3j+AXHIOBfQyUHno9VGnReVD3dcUPpU49kacc0nDWgqz2tkti2GGFL2QXtpfWLwjMRs3dujuZ+8TVRFL6U4ErrOuG2BNq4Y3894soNmyro1AU4JZnZ0N5oV+fTm9CMUi9CfRaMb2EzHokvD0ba4cTWaCcO2eyzMyXPAP0yjKlrFEnYptDFG7ZDMS1P56dZ6gUq/DnQR3pMM1wh37dqScr+ykztF4kUAzoGvMQusUHd7KQJ6yp5GvG7S2G3QRi7NTNfC42PQAUxm56wEjE4Tub6VUXR598ZRXSgKI2pTArwwd7GU93PB6lRraCZ08txbaVcie2TwueigqI1kperX3BVpuzqvDZXQpzX+LRhWZIXfr9py14mrodio4Ta17OFrTOJ5hRJHqk3iJPs2OvJZSHyrTYK24qcRE9KoE/iIMH4+QhX5qV/mXA6pHsnvWGxV8imi+OWfBQ6+JGGOHoKREW+zdbBSKZ2skSIx+ejhUinelzY7hd3SvtAydhAgEo7NEryM6aD4Z+4dQLC9Osn3fQtcTXj0/EWYtoLMeOHgxI7juSxpugUC1Gt5jB9COcoFlCYmaOnLTYdSTTUfn3U+x4ZtrLoVIxye2RCRW7HMImXXrH/INQIlu3sgIc2jJ4e8rlecwnYa3CmlLAlsRfZfsfOsip1W/4jpY/eD+GlJaCD8NHpOqtSuPObik3Hu3UUUUcjJWLgir6KEsT8t/ySuteAgonrFez21i0i2vK+5KfFaaXgQI+bpxCz5ZXzMzd6HzRs6IuCIzidWDyb+HE7vj48ibYvhezkdhdtXkiaRIuXIIP3BCEzoE9a6w7r31oRhWI6a1KObfTIjQRMAD1klkgA+q0hPK/XJmRQ+y+b+uRAdEDcE/N5VawJFtvPFRJj0NY+P3t13EBZvV9y3uCWPL9fHIvO0m9Ox2aZ21kKPge852YDsussUHo1AMB5dKY4tO7BUF74Nx2ueFCJXjTGdIdoiEmlzm5WVI53uKkVoTKE59is2Qt8x8ezxshCWeJgwE7fL8ezdJl4mVH04st7Oktge5Y9Nkd7V1oFZrStc7+mJ7aU2WHOzy4sft4/SW2Y5YxcIWe9ktjPCoQg8wCrGkwR2BssOsr52S9oSqfgmODsPW8yOt9UNCaXOdOMr04XtbYmmF9sbqgDmSWka7fFovpuYQUkqQqo4XJ0P30M5jwcGdA7RGJsqNpAuB3Z+LAMnQIgLmSuj6rdFBYTfQLwE70c+wrGwFt0vPMmPxrB1xxQMfiSGbnK0RVUDv4JZuTwaXlPVmIYIAjmMPVdHzk21IM6NIpesL5Z0y7EZvgQmPGKb5yVqGlQtdhUvprAz6WFYatTncwLSk2Yq0WlaV2QUxdwCKmub/NK/seVCjfxVb55+coxX4RgB9AkFFTXXR+Q2BM4p+w+ZSvWeZ7o6ZoMkFSpgbtLaNDrUf6F6NCK/LKk7x1mfG5v4QjjpaUwmiRfe33M+DsSNqMRzs4BCktgNDjbWIWk81McStZOggiBhcNrMc+qBfxeAthU8CoMROpAsEn2cIQIK4imr/HIFhlCyCCPqiPxepWxTuTCY3cCLTNqIMdu7NH4rLpOEWWDWHQEDGLqq0eWftyN9zme8tLN3S+LTuSpzMnjwWUzlV1r5sEjELjOLnywueS+YSSCJKiBq5m6u6P/9BJfmROYq9vAKpocMwMWxknIV2jF5eDwK1GsSUcUwuBhlwr9qvssQIVw0nErjLks0CVNpIG4FaSucckWkNwEl5HIhs5nrXFN/FkCsU6HCLvmaAAfjRfzoyFwO7Chyf33bK7pzJoVN9t6jjTZWHcsp2aTu4XwmXMNLN4PAcd7QbAD1liITzwrKbEheFwbDGlP5+IxtuSxljGrxlw8BM1PlSZUKx6zwo5tyk+pim4O2g6mizWQqx/OmpLQc0RATpwuWnaAFroJWiOz5LLn757xWutixTi7dND4rL0e37PX2JZfq8E+0jFtKgXJ8xtgSykMGV34Om006xnfzCCfoNvS/dk8losveBk6L5MlFjnPwph0UzRXPvEFy9hefSVIzivqI4E5WqpxcWRJXkU9A2o+a+FwNYytCmWPqBgxIxon9+1ksMeBWxNVc/f8VernkeY4f/DM537nLm+xVH1YQxlslUeUN+q5yG6lAtIDQvay8HIzPjhIuZcsApj2QNMU7EeI/Se+PSmGWrYlNe8w+8getaQo9TIKHHbyKylOLOdORM5V35nIc9fku0eoxvlYLjh7pMA+wfiymtPcUVMnSp69pYVTguY/GDUmNoH0msNbdiNQrIwNPLVvT3ED3ZJeYQiL3we2mF3+VQPDW6H7YtH4rPk9h7TsMT3m/Xh5AWX3yCRilHkyPek/5ABgywnn8W9iLH0Lhd5isdDoyqzmBu0OYXTHgbK8DPFTjGRJml/D2F3/EvflL367C2GIcGtDTekwIzfzKCOEq+vdEF3b5ao9E9QsL4Osb9RWNHT3YHBtgOvFdbrfy3NhjqrMsHkwPS4OohTHYbtgOkQx/6+kZYUcOObNGlqGFaNuWraqbU6OaKyvmn7brx7Wrkj/Ri0dR0yH+SU21toHAK5PA7esms0bLU+VqpKbo88SOHppNiV8qpaxcghrY44C/v9IiwNKFDDruIkyn0q2Dka3u8heLmY4FjJaN1i0EihwCHW/z3/7sS2bIZsATpDtMB9N/2G4oFKDmc5kQNL4Ip14q3WnkxzIA4R6x0pETWrpOeL1R+x8Ypuc2+y4tmHzRXsMFP/HezubGhUnpy1B8bI034BZuaRbNpz4pRRm8BWTfdnxxOOyo3xMHwYaAdc7wiP0C/9zPE4Gx+R+oZQznZ0Dvd4Kt9FGlVYpSK3GS/XWy7hxtTdKA1L/e7fypESNrRdL0/mSfjQqEcrumuerHzsBZLYfYFnjdNZcc8BPRWa0W2zIoejNqUpeUKGU5S5l7NGaOs58xczRnAycWNsIcSc+q84Rz6iDqS9WlhQlLZ+zocOpCsTiE3PQmqmA4GENOun7cWQxhuqpoIecnnJrsNIECa1QEciMxLWlnc2ENX2D7r01Q2KzHpTeSQq5p644tPhxAN+5AZsBRDAMLUT6cSlfuhtlEqan1qTZT5g1nc0FH+O6oJY3aNWPpowYMQYK0Hwc5gXXMh2TjzHsu5sBpEE39FFRPGSNXl+/IrlhAp7AIRUmDZ/KniP1jgcilEhD4RnVtnjP5YJTfR8kx1solMtISy6vJ9sEiZaldDn9ZZlF0qjavG4bKkM1zAG2GbOa87n7A4uiNGHtXhGoup6UM66dpDwUS+pbSyvHk1b8kBlDENYfi02fdTu19ZhB9+rlN+DEHGlMgFRasRe3S37oycaTxwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFrH+gl4o/w9Eax0x3k3pp9NfwxzDnI9AFrpYiADKEDR0M56Qk+hpYNOkP0e6g6ffXveUpqY5j/oVSkJr5pezInQgohnBudy+S60AldzKkb/q+UVMd2qbxtMqRZ76JfXevmaMyvNXJ3pQJ904qAGt3QzVkP+MSZ/ieOIXa9NcxelJjesww2km9mkoBbTet"
}
}'
Also, this is working for me on Chrome, Firefox and Safari, but for Safari you must enable the MediaRecorder in Develop -> Experimental Features -> Media Recorder
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With