forked from sent/waves
1995 lines
88 KiB
HTML
1995 lines
88 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<script src="/js/all.min.js"></script>
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title>FNAF 4</title>
|
|
<link href="/siteBuild/icon/siteIcon.ico" rel="shortcut icon" type="image/x-icon"/>
|
|
<script type="text/javascript">
|
|
window.errors = []
|
|
if (window.addEventListener) {
|
|
window.addEventListener(
|
|
'error',
|
|
function (e) {
|
|
if (e.message) {
|
|
if (e.error && e.error.stack) {
|
|
if (e.message.indexOf('Uncaught SyntaxError') === 0) {
|
|
window.errors.push(
|
|
e.message +
|
|
' at ' +
|
|
e.filename +
|
|
':' +
|
|
e.lineno +
|
|
':' +
|
|
e.colno
|
|
)
|
|
} else {
|
|
window.errors.push(e.error.stack)
|
|
}
|
|
if (window.onNewError) window.onNewError()
|
|
}
|
|
} else {
|
|
window.errors.push(
|
|
'Problem loading ' + (e.target.src || e.target.href)
|
|
)
|
|
if (window.onNewError) window.onNewError()
|
|
}
|
|
window.onerror = null
|
|
},
|
|
true
|
|
) // true so that errors bubble up to window
|
|
window.addEventListener(
|
|
'unhandledrejection',
|
|
function (e) {
|
|
window.errors.push(
|
|
e.reason && (e.reason.stack || e.reason.message || e.reason)
|
|
)
|
|
if (window.onNewError) window.onNewError()
|
|
},
|
|
false
|
|
)
|
|
}
|
|
window.onerror = function (message, source, lineno, colno, error) {
|
|
if (colno) {
|
|
lineno += ':' + colno
|
|
}
|
|
if (error && error.stack) {
|
|
window.errors.push(error.stack)
|
|
} else {
|
|
window.errors.push(message + ' at ' + source + ':' + lineno)
|
|
}
|
|
if (window.onNewError) window.onNewError()
|
|
}
|
|
</script>
|
|
<style>
|
|
html,
|
|
body {
|
|
height: 100%;
|
|
}
|
|
body,
|
|
::backdrop {
|
|
margin: 0;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
background-color: black;
|
|
font-size: 0;
|
|
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
|
overflow: hidden;
|
|
background-position: center;
|
|
background-size: cover;
|
|
}
|
|
#wrapper {
|
|
display: block;
|
|
position: relative;
|
|
}
|
|
.no-cursor #wrapper {
|
|
cursor: none;
|
|
}
|
|
.loading #wrapper {
|
|
visibility: hidden;
|
|
}
|
|
.stretch-stage #wrapper {
|
|
width: 100vw;
|
|
height: 100vh;
|
|
}
|
|
/* CSS for proportional wrapper scaling is added dynamically by htmlifier.ts */
|
|
#monitors {
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
}
|
|
#stage {
|
|
width: 100%;
|
|
height: 100%;
|
|
}
|
|
#loading-progress {
|
|
display: none;
|
|
position: fixed;
|
|
bottom: 20px;
|
|
left: 20px;
|
|
right: 20px;
|
|
border-radius: 20px;
|
|
--progress: 0%;
|
|
z-index: 100;
|
|
}
|
|
.show-loading-progress #loading-progress {
|
|
display: block;
|
|
}
|
|
#loading-progress::before {
|
|
content: attr(data-progress);
|
|
position: absolute;
|
|
bottom: 100%;
|
|
left: 0;
|
|
right: 0;
|
|
text-align: center;
|
|
font-size: 1.5rem;
|
|
margin-bottom: 15px;
|
|
}
|
|
#loading-progress::after {
|
|
content: '';
|
|
display: block;
|
|
height: 16px;
|
|
border-radius: 20px;
|
|
width: var(--progress);
|
|
}
|
|
#loading-image {
|
|
position: fixed;
|
|
max-width: 100%;
|
|
max-height: 100%;
|
|
left: 0;
|
|
right: 0;
|
|
top: 0;
|
|
bottom: 0;
|
|
margin: auto;
|
|
}
|
|
.stretch-loading-image #loading-image {
|
|
width: 100%;
|
|
height: 100%;
|
|
}
|
|
.buttons {
|
|
position: fixed;
|
|
top: 0;
|
|
right: 0;
|
|
background-color: rgba(0, 0, 0, 0.5);
|
|
border-bottom-left-radius: 12px;
|
|
}
|
|
.buttons .button,
|
|
.buttons button {
|
|
display: none;
|
|
-webkit-appearance: none;
|
|
border: none;
|
|
background: none;
|
|
width: 48px;
|
|
height: 48px;
|
|
cursor: pointer;
|
|
background-repeat: no-repeat;
|
|
background-position: center;
|
|
background-size: 24px;
|
|
}
|
|
.buttons button:disabled,
|
|
#add-sprite-file:disabled + #add-sprite-btn {
|
|
cursor: auto;
|
|
opacity: 0.5;
|
|
}
|
|
#start-btn {
|
|
background-image: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"%3E%3Cpath d="M8 5v14l11-7z" fill="%23fff"/%3E%3C/svg%3E%0A');
|
|
}
|
|
.running #start-btn {
|
|
background-image: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"%3E%3Cpath d="M12 5V1L7 6l5 5V7c3.31 0 6 2.69 6 6s-2.69 6-6 6-6-2.69-6-6H4c0 4.42 3.58 8 8 8s8-3.58 8-8-3.58-8-8-8z" fill="%23fff"/%3E%3C/svg%3E');
|
|
}
|
|
#stop-btn {
|
|
background-image: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"%3E%3Cpath d="M6 6h12v12H6z" fill="%23fff"/%3E%3C/svg%3E%0A');
|
|
}
|
|
#fullscreen-btn {
|
|
background-image: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 48 48"%3E%3Cpath d="M14 28h-4v10h10v-4h-6v-6zm-4-8h4v-6h6v-4H10v10zm24 14h-6v4h10V28h-4v6zm-6-24v4h6v6h4V10H28z" fill="%23fff"/%3E%3C/svg%3E');
|
|
}
|
|
.fullscreen #fullscreen-btn {
|
|
background-image: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 48 48"%3E%3Cpath d="M10 32h6v6h4V28H10v4zm6-16h-6v4h10V10h-4v6zm12 22h4v-6h6v-4H28v10zm4-22v-6h-4v10h10v-4h-6z" fill="%23fff"/%3E%3C/svg%3E');
|
|
}
|
|
#download-btn {
|
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23fff'%3E%3Cpath d='M5,20h14v-2H5V20z M19,9h-4V3H9v6H5l7,7L19,9z'/%3E%3C/svg%3E");
|
|
}
|
|
#add-sprite-btn {
|
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23fff'%3E%3Cpath d='M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10h-4v4h-2v-4H7v-2h4V7h2v4h4v2z'/%3E%3C/svg%3E");
|
|
}
|
|
#add-sprite-file {
|
|
display: none;
|
|
clip: rect(0 0 0 0);
|
|
clip-path: inset(50%);
|
|
height: 1px;
|
|
overflow: hidden;
|
|
position: absolute;
|
|
white-space: nowrap;
|
|
width: 1px;
|
|
}
|
|
.show-start-stop-btns #start-btn,
|
|
.show-start-stop-btns #stop-btn,
|
|
.show-fullscreen-btn #fullscreen-btn,
|
|
.show-download-btn #download-btn,
|
|
.show-add-sprite-btn #add-sprite-btn,
|
|
.show-add-sprite-btn #add-sprite-file {
|
|
display: inline-block;
|
|
}
|
|
.monitor {
|
|
position: absolute;
|
|
border: 1px solid transparent;
|
|
border-radius: 0.25rem;
|
|
font-size: 0.75rem;
|
|
overflow: hidden;
|
|
padding: 3px;
|
|
white-space: pre;
|
|
}
|
|
.show-monitor-box .monitor {
|
|
border-color: rgba(0, 0, 0, 0.2);
|
|
background-color: rgba(0, 0, 0, 0.3);
|
|
}
|
|
.monitor-label {
|
|
margin: 0 5px;
|
|
font-weight: bold;
|
|
}
|
|
.monitor-value {
|
|
display: inline-block;
|
|
vertical-align: top;
|
|
min-width: 34px;
|
|
text-align: center;
|
|
border-radius: 0.25rem;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
user-select: text;
|
|
transform: translateZ(0);
|
|
}
|
|
.default .monitor-value,
|
|
.slider .monitor-value {
|
|
margin: 0 5px;
|
|
padding: 1px 3px;
|
|
}
|
|
.show-monitor-box .default .monitor-value,
|
|
.show-monitor-box .slider .monitor-value {
|
|
background-color: rgba(0, 0, 0, 0.5);
|
|
}
|
|
.large {
|
|
padding: 0.1rem 0.25rem;
|
|
min-width: 3rem;
|
|
}
|
|
.show-monitor-box .large {
|
|
background-color: rgba(0, 0, 0, 0.6);
|
|
}
|
|
.large .monitor-label {
|
|
display: none;
|
|
}
|
|
.large .monitor-value {
|
|
font-size: 1rem;
|
|
width: 100%;
|
|
}
|
|
.list {
|
|
padding: 0;
|
|
overflow: auto;
|
|
overflow-x: hidden;
|
|
}
|
|
.list .monitor-label {
|
|
text-align: center;
|
|
padding: 3px;
|
|
width: 100%;
|
|
display: block;
|
|
margin: 0;
|
|
box-sizing: border-box;
|
|
white-space: pre-wrap;
|
|
}
|
|
.list .monitor-value {
|
|
display: block;
|
|
}
|
|
.row {
|
|
display: flex;
|
|
align-items: center;
|
|
padding: 2px;
|
|
height: 24px;
|
|
box-sizing: border-box;
|
|
transform: translateZ(0);
|
|
}
|
|
.index {
|
|
font-weight: bold;
|
|
margin: 0 3px;
|
|
flex: none;
|
|
}
|
|
.row-value {
|
|
flex: auto;
|
|
margin: 0 3px;
|
|
text-align: left;
|
|
border-radius: 0.25rem;
|
|
border: 1px solid transparent;
|
|
height: 22px;
|
|
padding: 3px 5px;
|
|
box-sizing: border-box;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
}
|
|
.show-monitor-box .row-value {
|
|
border-color: rgba(0, 0, 0, 0.2);
|
|
background-color: rgba(0, 0, 0, 0.5);
|
|
}
|
|
.slider input {
|
|
display: block;
|
|
width: 100%;
|
|
transform: translateZ(0);
|
|
}
|
|
#asking-box {
|
|
display: none;
|
|
position: absolute;
|
|
left: 0;
|
|
bottom: 0;
|
|
right: 0;
|
|
background-color: rgba(33, 33, 33, 0.7);
|
|
}
|
|
.asking #asking-box {
|
|
display: block;
|
|
}
|
|
#question {
|
|
display: block;
|
|
margin: 0 10px;
|
|
margin-top: 10px;
|
|
font-size: 12px;
|
|
color: white;
|
|
}
|
|
#answer {
|
|
border: none;
|
|
background: none;
|
|
width: 100%;
|
|
font: inherit;
|
|
font-size: 16px;
|
|
color: white;
|
|
padding: 10px;
|
|
box-sizing: border-box;
|
|
}
|
|
#answer:focus {
|
|
outline: none;
|
|
}
|
|
#errors {
|
|
-webkit-appearance: none;
|
|
border: none;
|
|
background: rgba(255, 0, 0, 0.7);
|
|
color: white;
|
|
position: fixed;
|
|
top: 0;
|
|
left: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
z-index: 1000;
|
|
display: none;
|
|
}
|
|
|
|
</style> <style>
|
|
#loading-progress {
|
|
border: 1px solid #00ffff;
|
|
}
|
|
#loading-progress::before {
|
|
color: #00ffff;
|
|
}
|
|
#loading-progress::after {
|
|
background-color: #00ffff;
|
|
}
|
|
.monitor {
|
|
color: #ffffff;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body class="loading stretch-stage show-loading-progress stretch-loading-image show-fullscreen-btn show-monitor-box">
|
|
<div id="wrapper">
|
|
<canvas id="stage"></canvas>
|
|
<div id="monitors"></div>
|
|
<div id="asking-box">
|
|
<label id="question" for="answer">Question</label>
|
|
<input type="text" id="answer" />
|
|
</div>
|
|
</div>
|
|
<div id="loading-progress" data-progress="0%"></div>
|
|
|
|
<div class="buttons">
|
|
<!--
|
|
Only support sprite files (no images) for now. See
|
|
https://github.com/SheepTester/htmlifier/issues/67#issuecomment-894746718
|
|
-->
|
|
<input
|
|
type="file"
|
|
id="add-sprite-file"
|
|
accept=".sprite2, .sprite3"
|
|
aria-label="Select a Scratch sprite to add"
|
|
multiple
|
|
/>
|
|
<label
|
|
class="button"
|
|
id="add-sprite-btn"
|
|
for="add-sprite-file"
|
|
title="Add Scratch sprite to project"
|
|
></label>
|
|
<button id="download-btn" aria-label="Download Scratch project"></button>
|
|
<button id="start-btn" aria-label="Start"></button>
|
|
<button id="stop-btn" aria-label="Stop" disabled></button>
|
|
<button id="fullscreen-btn" aria-label="Enter/exit fullscreen"></button>
|
|
</div>
|
|
<textarea id="errors" readonly></textarea>
|
|
<script src="project/vm.js"></script> <script>
|
|
const noop = () => null
|
|
|
|
window.Scratch = {
|
|
get vm () {
|
|
return window.vm
|
|
},
|
|
get renderer () {
|
|
return window.vm.runtime.renderer
|
|
},
|
|
get audioEngine () {
|
|
return window.vm.runtime.audioEngine
|
|
},
|
|
get bitmapAdapter () {
|
|
return window.vm.runtime.v2BitmapAdapter
|
|
},
|
|
get videoProvider () {
|
|
return window.vm.runtime.ioDevices.video.provider
|
|
}
|
|
}
|
|
|
|
const CLOUD_PREFIX = '\u2601 '
|
|
window.setCloud = (name, value) => {
|
|
vm.postIOData('cloud', {
|
|
varUpdate: {
|
|
name: CLOUD_PREFIX + name,
|
|
value
|
|
}
|
|
})
|
|
}
|
|
function postError (err) {
|
|
setCloud('eval error', err.toString())
|
|
}
|
|
|
|
class CloudProvider {
|
|
constructor (options) {
|
|
this._serverUrl = options.cloud.serverUrl
|
|
this._specialBehaviours = options.cloud.specialBehaviours
|
|
this._options = options
|
|
|
|
this._ws = null
|
|
|
|
this.createVariable = noop
|
|
this.renameVariable = noop
|
|
this.deleteVariable = noop
|
|
|
|
this._handleMessage = event => {
|
|
event.data.split('\n').forEach(message => {
|
|
if (message) {
|
|
const { name, value } = JSON.parse(message)
|
|
vm.postIOData('cloud', {
|
|
varUpdate: { name, value }
|
|
})
|
|
}
|
|
})
|
|
}
|
|
this._handleOpen = () => {
|
|
this._sendData({ method: 'handshake' })
|
|
}
|
|
this._handleClose = () => {
|
|
setTimeout(() => this._openConnection(), 500)
|
|
}
|
|
|
|
this.handleUrlChange = () => {
|
|
setCloud('url', window.location.href)
|
|
}
|
|
if (this._specialBehaviours) {
|
|
window.addEventListener('hashchange', this.handleUrlChange)
|
|
window.addEventListener('popstate', this.handleUrlChange)
|
|
// Paste output
|
|
window.addEventListener('paste', event => {
|
|
setCloud(
|
|
'pasted',
|
|
(event.clipboardData || window.clipboardData).getData('text')
|
|
)
|
|
})
|
|
}
|
|
|
|
if (this._serverUrl) {
|
|
this._openConnection()
|
|
}
|
|
}
|
|
|
|
_openConnection () {
|
|
try {
|
|
this._ws = new WebSocket(this._serverUrl)
|
|
} catch (error) {
|
|
console.warn(error)
|
|
return
|
|
}
|
|
this._ws.onmessage = this._handleMessage
|
|
this._ws.onopen = this._handleOpen
|
|
this._ws.onclose = this._handleClose
|
|
}
|
|
|
|
_sendData (data) {
|
|
data.user = this._options.username
|
|
data.project_id = this._options.cloud.projectId
|
|
this._ws.send(JSON.stringify(data) + '\n')
|
|
}
|
|
|
|
updateVariable (name, value) {
|
|
if (this._specialBehaviours) {
|
|
let matched = true
|
|
if (name === CLOUD_PREFIX + 'eval') {
|
|
try {
|
|
Promise.resolve(eval(value))
|
|
.then(output => {
|
|
setCloud('eval output', output)
|
|
})
|
|
.catch(postError)
|
|
} catch (error) {
|
|
postError(error)
|
|
}
|
|
} else if (name === CLOUD_PREFIX + 'open link') {
|
|
try {
|
|
window.open(value, '_blank')
|
|
} catch (error) {
|
|
postError(error)
|
|
}
|
|
} else if (name === CLOUD_PREFIX + 'redirect') {
|
|
window.location = value
|
|
} else if (name === CLOUD_PREFIX + 'set clipboard') {
|
|
try {
|
|
navigator.clipboard.writeText(value).catch(postError)
|
|
} catch (error) {
|
|
postError(error)
|
|
}
|
|
} else if (name === CLOUD_PREFIX + 'set server ip') {
|
|
this._cloudHost = value
|
|
if (this._ws) {
|
|
this._ws.onclose = noop
|
|
this._ws.close()
|
|
}
|
|
this._openConnection()
|
|
} else if (name === CLOUD_PREFIX + 'username') {
|
|
this._options.username = value
|
|
vm.postIOData('userData', { username: value })
|
|
} else {
|
|
matched = false
|
|
}
|
|
if (matched) {
|
|
return
|
|
}
|
|
}
|
|
if (
|
|
!this._serverUrl ||
|
|
(this._specialBehaviours &&
|
|
name.startsWith(CLOUD_PREFIX + 'local storage'))
|
|
) {
|
|
try {
|
|
localStorage.setItem('[s3] ' + name, value)
|
|
} catch (error) {
|
|
postError(error)
|
|
}
|
|
} else {
|
|
this._sendData({ method: 'set', name, value })
|
|
}
|
|
}
|
|
|
|
requestCloseConnection () {
|
|
if (
|
|
this._ws &&
|
|
this._ws.readyState !== WebSocket.CLOSING &&
|
|
this._ws.readyState !== WebSocket.CLOSED
|
|
) {
|
|
this._ws.onclose = noop
|
|
this._ws.close()
|
|
}
|
|
}
|
|
}
|
|
|
|
// Based on
|
|
// https://github.com/LLK/scratch-gui/blob/7b658c60c7c04055e575601a861195fe6c9933f3/src/lib/video/camera.js
|
|
// https://github.com/LLK/scratch-gui/blob/7b658c60c7c04055e575601a861195fe6c9933f3/src/lib/video/video-provider.js
|
|
class VideoProvider {
|
|
constructor (width, height) {
|
|
this._dimensions = [width, height]
|
|
this.mirror = true
|
|
this._frameCacheTimeout = 16
|
|
this._video = null
|
|
this._track = null
|
|
this._workspace = []
|
|
}
|
|
|
|
get video () {
|
|
return this._video
|
|
}
|
|
|
|
enableVideo () {
|
|
this.enabled = true
|
|
return this._setupVideo()
|
|
}
|
|
|
|
disableVideo () {
|
|
this.enabled = false
|
|
if (this._singleSetup) {
|
|
this._singleSetup
|
|
.then(this._teardown.bind(this))
|
|
.catch(err => this.onError(err))
|
|
}
|
|
}
|
|
|
|
_teardown () {
|
|
if (this.enabled === false) {
|
|
requestStack.pop()
|
|
const disableTrack = requestStack.length === 0
|
|
this._singleSetup = null
|
|
this._video = null
|
|
if (this._track && disableTrack) {
|
|
this._track.stop()
|
|
}
|
|
this._track = null
|
|
}
|
|
}
|
|
|
|
getFrame ({
|
|
dimensions = this._dimensions,
|
|
mirror = this.mirror,
|
|
format = 'image-data',
|
|
cacheTimeout = this._frameCacheTimeout
|
|
}) {
|
|
if (!this.videoReady) {
|
|
return null
|
|
}
|
|
const [width, height] = dimensions
|
|
const workspace = this._getWorkspace({
|
|
dimensions,
|
|
mirror: Boolean(mirror)
|
|
})
|
|
const { videoWidth, videoHeight } = this._video
|
|
const { canvas, context, lastUpdate, cacheData } = workspace
|
|
const now = Date.now()
|
|
|
|
if (lastUpdate + cacheTimeout < now) {
|
|
if (mirror) {
|
|
context.scale(-1, 1)
|
|
context.translate(width * -1, 0)
|
|
}
|
|
|
|
context.drawImage(
|
|
this._video,
|
|
0,
|
|
0,
|
|
videoWidth,
|
|
videoHeight,
|
|
0,
|
|
0,
|
|
width,
|
|
height
|
|
)
|
|
|
|
context.setTransform(1, 0, 0, 1, 0, 0)
|
|
workspace.lastUpdate = now
|
|
}
|
|
|
|
if (!cacheData[format]) {
|
|
cacheData[format] = { lastUpdate: 0 }
|
|
}
|
|
const formatCache = cacheData[format]
|
|
|
|
if (formatCache.lastUpdate + cacheTimeout < now) {
|
|
if (format === 'image-data') {
|
|
formatCache.lastData = context.getImageData(0, 0, width, height)
|
|
} else if (format === 'canvas') {
|
|
formatCache.lastUpdate = Infinity
|
|
formatCache.lastData = canvas
|
|
} else {
|
|
console.error(`video io error - unimplemented format ${format}`)
|
|
formatCache.lastUpdate = Infinity
|
|
formatCache.lastData = null
|
|
}
|
|
|
|
formatCache.lastUpdate = Math.max(
|
|
workspace.lastUpdate,
|
|
formatCache.lastUpdate
|
|
)
|
|
}
|
|
|
|
return formatCache.lastData
|
|
}
|
|
|
|
onError (error) {
|
|
console.error('Unhandled video io device error', error)
|
|
}
|
|
|
|
_setupVideo () {
|
|
if (this._singleSetup) {
|
|
return this._singleSetup
|
|
}
|
|
|
|
if (requestStack.length === 0) {
|
|
this._singleSetup = navigator.mediaDevices.getUserMedia({
|
|
audio: false,
|
|
video: {
|
|
width: { min: width, ideal: (480 * width) / height },
|
|
height: { min: height, ideal: 480 }
|
|
}
|
|
})
|
|
requestStack.push(streamPromise)
|
|
} else if (requestStack.length > 0) {
|
|
this._singleSetup = requestStack[0]
|
|
requestStack.push(true)
|
|
}
|
|
this._singleSetup
|
|
.then(stream => {
|
|
this._video = document.createElement('video')
|
|
|
|
try {
|
|
this._video.srcObject = stream
|
|
} catch (_error) {
|
|
this._video.src = window.URL.createObjectURL(stream)
|
|
}
|
|
this._video.play()
|
|
this._track = stream.getTracks()[0]
|
|
return this
|
|
})
|
|
.catch(error => {
|
|
this._singleSetup = null
|
|
this.onError(error)
|
|
})
|
|
|
|
return this._singleSetup
|
|
}
|
|
|
|
get videoReady () {
|
|
if (!this.enabled || !this._video || !this._track) {
|
|
return false
|
|
}
|
|
const { videoWidth, videoHeight } = this._video
|
|
return (
|
|
typeof videoWidth === 'number' &&
|
|
typeof videoHeight === 'number' &&
|
|
videoWidth > 0 &&
|
|
videoHeight > 0
|
|
)
|
|
}
|
|
|
|
_getWorkspace ({ dimensions, mirror }) {
|
|
let workspace = this._workspace.find(
|
|
space =>
|
|
space.dimensions.join('-') === dimensions.join('-') &&
|
|
space.mirror === mirror
|
|
)
|
|
if (!workspace) {
|
|
workspace = {
|
|
dimensions,
|
|
mirror,
|
|
canvas: document.createElement('canvas'),
|
|
lastUpdate: 0,
|
|
cacheData: {}
|
|
}
|
|
workspace.canvas.width = dimensions[0]
|
|
workspace.canvas.height = dimensions[1]
|
|
workspace.context = workspace.canvas.getContext('2d')
|
|
this._workspace.push(workspace)
|
|
}
|
|
return workspace
|
|
}
|
|
}
|
|
|
|
const fullscreenBtn = document.getElementById('fullscreen-btn')
|
|
const exitFullscreen =
|
|
document.exitFullscreen ||
|
|
document.msExitFullscreen ||
|
|
document.mozCancelFullScreen ||
|
|
document.webkitExitFullscreen
|
|
const requestFullscreen =
|
|
document.body.requestFullscreen ||
|
|
document.body.msRequestFullscreen ||
|
|
document.body.mozRequestFullScreen ||
|
|
document.body.webkitRequestFullscreen
|
|
function isFullscreen () {
|
|
return (
|
|
document.fullscreenElement ||
|
|
document.mozFullScreenElement ||
|
|
document.webkitFullscreenElement ||
|
|
document.msFullscreenElement
|
|
)
|
|
}
|
|
function toggleFullscreen () {
|
|
if (isFullscreen()) {
|
|
exitFullscreen.call(document)
|
|
} else {
|
|
requestFullscreen.call(document.body)
|
|
}
|
|
}
|
|
fullscreenBtn.addEventListener('click', () => {
|
|
fullscreenBtn.blur()
|
|
toggleFullscreen()
|
|
})
|
|
function handleFullscreenChange () {
|
|
if (isFullscreen()) {
|
|
document.body.classList.add('fullscreen')
|
|
} else {
|
|
document.body.classList.remove('fullscreen')
|
|
}
|
|
}
|
|
document.addEventListener('fullscreenchange', handleFullscreenChange)
|
|
document.addEventListener('mozfullscreenchange', handleFullscreenChange)
|
|
document.addEventListener('webkitfullscreenchange', handleFullscreenChange)
|
|
document.addEventListener('msfullscreenchange', handleFullscreenChange)
|
|
|
|
window.init = async ({ width, height, ...options }) => {
|
|
window.vm = new window.NotVirtualMachine(width, height)
|
|
vm.setCompatibilityMode(options.fps)
|
|
vm.setTurboMode(options.turbo)
|
|
vm.requireLimits(options.limits, { fencing: options.fencing })
|
|
|
|
const storage = new ScratchStorage()
|
|
const AssetType = storage.AssetType
|
|
if (options.assets.project) {
|
|
storage.addWebStore([AssetType.Project], () => options.assets.project)
|
|
storage.addWebStore(
|
|
[AssetType.ImageVector, AssetType.ImageBitmap, AssetType.Sound],
|
|
({ assetId, dataFormat }) => options.assets[`${assetId}.${dataFormat}`]
|
|
)
|
|
}
|
|
const progress = document.getElementById('loading-progress')
|
|
if (options.loadingProgress) {
|
|
const _load = storage.webHelper.load
|
|
let total = 0,
|
|
complete = 0
|
|
storage.webHelper.load = function (...args) {
|
|
const result = _load.call(this, ...args)
|
|
total += 1
|
|
const percentage = (complete / total) * 100
|
|
progress.dataset.progress = percentage.toFixed(2) + '%'
|
|
progress.style.setProperty('--progress', percentage + '%')
|
|
result.then(() => {
|
|
complete += 1
|
|
const percentage = (complete / total) * 100
|
|
progress.dataset.progress = percentage.toFixed(2) + '%'
|
|
progress.style.setProperty('--progress', percentage + '%')
|
|
})
|
|
return result
|
|
}
|
|
}
|
|
vm.attachStorage(storage)
|
|
|
|
function resize () {
|
|
const rect = canvas.getBoundingClientRect()
|
|
renderer.resize(rect.width, rect.height)
|
|
if (options.stretchStage) {
|
|
monitorWrapper.style.transform = `scaleX(${rect.width /
|
|
width}) scaleY(${rect.height / height})`
|
|
} else {
|
|
monitorWrapper.style.transform = `scale(${rect.height / height})`
|
|
}
|
|
}
|
|
const monitorWrapper = document.getElementById('monitors')
|
|
const canvas = document.getElementById('stage')
|
|
const renderer = new window.ScratchRender(
|
|
canvas,
|
|
-width / 2,
|
|
width / 2,
|
|
-height / 2,
|
|
height / 2
|
|
)
|
|
resize()
|
|
vm.attachRenderer(renderer)
|
|
|
|
vm.attachAudioEngine(new window.AudioEngine())
|
|
vm.attachV2BitmapAdapter(
|
|
new ScratchSVGRenderer.BitmapAdapter(null, null, width, height)
|
|
)
|
|
vm.setVideoProvider(new VideoProvider(width, height))
|
|
vm.start()
|
|
|
|
if (options.extensionCount > 0) {
|
|
const OldWorker = window.Worker
|
|
window.Worker = class extends OldWorker {
|
|
// deno-lint-ignore constructor-super
|
|
constructor (...args) {
|
|
if (args[0].endsWith('extension-worker.js')) {
|
|
if (options.extensionWorker.url) {
|
|
super(options.extensionWorker.url, ...args.slice(1))
|
|
} else {
|
|
super(
|
|
URL.createObjectURL(
|
|
new Blob([options.extensionWorker.script], {
|
|
type: 'text/javascript'
|
|
})
|
|
),
|
|
...args.slice(1)
|
|
)
|
|
}
|
|
} else {
|
|
super(...args)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* https://github.com/LLK/scratch-gui/blob/develop/src/containers/stage.jsx#L176-L300 */
|
|
const getEventXY = e => {
|
|
if (e.touches && e.touches[0]) {
|
|
return { x: e.touches[0].clientX, y: e.touches[0].clientY }
|
|
} else if (e.changedTouches && e.changedTouches[0]) {
|
|
return { x: e.changedTouches[0].clientX, y: e.changedTouches[0].clientY }
|
|
}
|
|
return { x: e.clientX, y: e.clientY }
|
|
}
|
|
let mouseDown = false
|
|
let mouseDownPosition = null
|
|
let mouseDownTimeoutId = null
|
|
let isDragging = false
|
|
let dragId = null
|
|
let dragOffset = null
|
|
function cancelMouseDownTimeout () {
|
|
if (mouseDownTimeoutId !== null) {
|
|
clearTimeout(mouseDownTimeoutId)
|
|
}
|
|
mouseDownTimeoutId = null
|
|
}
|
|
// https://github.com/LLK/scratch-gui/blob/develop/src/containers/stage.jsx#L337-L366
|
|
function handleStartDrag () {
|
|
if (dragId || !mouseDownPosition) return
|
|
const drawableId = renderer.pick(mouseDownPosition.x, mouseDownPosition.y)
|
|
if (drawableId === null) return
|
|
const targetId = vm.getTargetIdForDrawableId(drawableId)
|
|
if (targetId === null) return
|
|
const target = vm.runtime.getTargetById(targetId)
|
|
if (!target || !target.draggable) return
|
|
target.goToFront()
|
|
const drawableData = renderer.extractDrawable(
|
|
drawableId,
|
|
mouseDownPosition.x,
|
|
mouseDownPosition.y
|
|
)
|
|
vm.startDrag(targetId)
|
|
isDragging = true
|
|
dragId = targetId
|
|
dragOffset = drawableData.scratchOffset
|
|
}
|
|
const accumulative = { x: 0, y: 0 }
|
|
function postIfPointerLocked (e, isDown) {
|
|
if (
|
|
document.pointerLockElement === canvas ||
|
|
document.mozPointerLockElement === canvas
|
|
) {
|
|
accumulative.x += e.movementX
|
|
accumulative.y += e.movementY
|
|
vm.postIOData('mouse', {
|
|
isDown,
|
|
x: accumulative.x + width / 2,
|
|
y: accumulative.y + height / 2,
|
|
canvasWidth: width,
|
|
canvasHeight: height
|
|
})
|
|
return true
|
|
} else {
|
|
return false
|
|
}
|
|
}
|
|
function postMouse (event, isDown) {
|
|
const { x, y } = getEventXY(event)
|
|
const rect = canvas.getBoundingClientRect()
|
|
const mousePosition = { x: x - rect.left, y: y - rect.top }
|
|
vm.postIOData('mouse', {
|
|
isDown,
|
|
...mousePosition,
|
|
canvasWidth: rect.width,
|
|
canvasHeight: rect.height
|
|
})
|
|
return { mousePosition, rect }
|
|
}
|
|
function handleMouseMove (event) {
|
|
if (postIfPointerLocked(event)) return
|
|
const { mousePosition, rect } = postMouse(event)
|
|
if (mouseDown && !isDragging) {
|
|
const distanceFromMouseDown = Math.hypot(
|
|
mousePosition.x - mouseDownPosition.x,
|
|
mousePosition.y - mouseDownPosition.y
|
|
)
|
|
if (distanceFromMouseDown > 3) {
|
|
cancelMouseDownTimeout()
|
|
handleStartDrag()
|
|
}
|
|
}
|
|
if (mouseDown && isDragging) {
|
|
const nativeSize = renderer.getNativeSize()
|
|
vm.postSpriteInfo({
|
|
x:
|
|
(nativeSize[0] / rect.width) * (mousePosition.x - rect.width / 2) +
|
|
dragOffset[0],
|
|
y: -(
|
|
(nativeSize[1] / rect.height) * (mousePosition.y - rect.height / 2) +
|
|
dragOffset[1]
|
|
),
|
|
force: true
|
|
})
|
|
}
|
|
}
|
|
function handleMouseDown (event) {
|
|
mouseDown = true
|
|
vm.postIOData('keyboard', {
|
|
key: 'Mouse' + event.which,
|
|
isDown: true
|
|
})
|
|
if (postIfPointerLocked(event, true)) return
|
|
mouseDownPosition = postMouse(event, true).mousePosition
|
|
mouseDownTimeoutId = setTimeout(handleStartDrag, 400)
|
|
event.preventDefault()
|
|
if (!document.body.classList.contains('asking')) {
|
|
window.focus()
|
|
}
|
|
}
|
|
function handleMouseUp (event) {
|
|
cancelMouseDownTimeout()
|
|
mouseDown = false
|
|
mouseDownPosition = null
|
|
if (isDragging) {
|
|
vm.stopDrag(dragId)
|
|
isDragging = false
|
|
dragOffset = null
|
|
dragId = null
|
|
}
|
|
vm.postIOData('keyboard', {
|
|
key: 'Mouse' + event.which,
|
|
isDown: false
|
|
})
|
|
if (postIfPointerLocked(event, false)) return
|
|
postMouse(event, false)
|
|
}
|
|
document.addEventListener('mousemove', handleMouseMove)
|
|
document.addEventListener('mouseup', handleMouseUp)
|
|
document.addEventListener('touchmove', handleMouseMove)
|
|
document.addEventListener('touchend', handleMouseUp, { passive: false })
|
|
canvas.addEventListener('wheel', event => {
|
|
vm.postIOData('mouseWheel', event)
|
|
event.preventDefault()
|
|
})
|
|
window.addEventListener('resize', resize)
|
|
canvas.addEventListener('contextmenu', event => {
|
|
event.preventDefault()
|
|
})
|
|
if (options.pointerLock) {
|
|
canvas.requestPointerLock =
|
|
canvas.requestPointerLock || canvas.mozRequestPointerLock
|
|
canvas.addEventListener('click', () => {
|
|
canvas.requestPointerLock()
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Maps e.key to e.code. For example, Shift -> ShiftRight. This is because the
|
|
* keyup event doesn't fire when you let go of one shift if the other shift
|
|
* key is still held down.
|
|
*/
|
|
const keyToCode = new Map()
|
|
function postKey (event, isDown) {
|
|
const key = !event.key || event.key === 'Dead' ? event.keyCode : event.key
|
|
vm.postIOData('keyboard', {
|
|
key: key,
|
|
isDown
|
|
})
|
|
vm.postIOData('keyboard', {
|
|
key: 'code_' + event.code,
|
|
isDown
|
|
})
|
|
}
|
|
document.addEventListener('keydown', event => {
|
|
if (event.target !== document && event.target !== document.body) return
|
|
const prevCode = keyToCode.get(event.key)
|
|
if (prevCode) {
|
|
if (prevCode !== event.code) {
|
|
vm.postIOData('keyboard', {
|
|
key: 'code_' + prevCode,
|
|
isDown: false
|
|
})
|
|
}
|
|
}
|
|
postKey(event, true)
|
|
keyToCode.set(event.key, event.code)
|
|
if (event.keyCode === 32 || (event.keyCode >= 37 && event.keyCode <= 40)) {
|
|
event.preventDefault()
|
|
}
|
|
if (
|
|
event.key === 'f' &&
|
|
(event.ctrlKey || event.metaKey) &&
|
|
!event.shiftKey &&
|
|
!event.altKey
|
|
) {
|
|
toggleFullscreen()
|
|
event.preventDefault()
|
|
}
|
|
})
|
|
document.addEventListener('keyup', e => {
|
|
postKey(e, false)
|
|
keyToCode.delete(e.key)
|
|
if (e.target !== document && e.target !== document.body) {
|
|
e.preventDefault()
|
|
}
|
|
})
|
|
vm.postIOData('keyboard', {
|
|
key: 'HTMLifier',
|
|
isDown: true
|
|
})
|
|
|
|
const question = document.getElementById('question')
|
|
const askBox = document.getElementById('answer')
|
|
vm.runtime.addListener('QUESTION', questionData => {
|
|
// null means the question was interrupted by stop script block
|
|
if (questionData === null) {
|
|
document.body.classList.remove('asking')
|
|
} else {
|
|
document.body.classList.add('asking')
|
|
question.textContent = questionData
|
|
askBox.value = ''
|
|
askBox.focus()
|
|
}
|
|
})
|
|
askBox.addEventListener('keydown', event => {
|
|
if (event.key === 'Enter') {
|
|
// The asking class must be removed first because the VM may start the
|
|
// next question immediately inside the .emit call
|
|
document.body.classList.remove('asking')
|
|
vm.runtime.emit('ANSWER', askBox.value)
|
|
}
|
|
})
|
|
|
|
const getVariable = (targetId, variableId) => {
|
|
const target = targetId
|
|
? vm.runtime.getTargetById(targetId)
|
|
: vm.runtime.getTargetForStage()
|
|
return target.variables[variableId]
|
|
}
|
|
const monitorStates = {}
|
|
vm.runtime.addListener('MONITORS_UPDATE', monitors => {
|
|
monitors.forEach((record, id) => {
|
|
const {
|
|
value,
|
|
visible,
|
|
mode,
|
|
x,
|
|
y,
|
|
width,
|
|
height,
|
|
params,
|
|
opcode,
|
|
spriteName,
|
|
sliderMin,
|
|
sliderMax,
|
|
isDiscrete,
|
|
targetId
|
|
} = record
|
|
|
|
if (!monitorStates[id]) {
|
|
const label = document.createElement('span')
|
|
label.className = 'monitor-label'
|
|
const name = params.VARIABLE || params.LIST || opcode
|
|
label.textContent = spriteName ? `${spriteName}: ${name}` : name
|
|
|
|
const value = document.createElement('span')
|
|
value.className = 'monitor-value'
|
|
|
|
const monitor = document.createElement('div')
|
|
monitor.className = 'monitor ' + mode
|
|
monitor.style.left = x + 'px'
|
|
monitor.style.top = y + 'px'
|
|
monitor.append(label, value)
|
|
|
|
monitorStates[id] = { monitor, valueElem: value, wasVisible: true }
|
|
|
|
if (mode === 'slider') {
|
|
const slider = document.createElement('input')
|
|
slider.type = 'range'
|
|
slider.min = sliderMin
|
|
slider.max = sliderMax
|
|
slider.step = isDiscrete ? 1 : 0.01
|
|
// Prevent tab focus, per #54, but it deviates from Scratch
|
|
slider.tabIndex = -1
|
|
slider.addEventListener('input', () => {
|
|
getVariable(targetId, id).value = slider.value
|
|
})
|
|
slider.addEventListener('change', () => {
|
|
getVariable(targetId, id).value = slider.value
|
|
})
|
|
monitorStates[id].slider = slider
|
|
monitor.append(slider)
|
|
} else if (mode === 'list') {
|
|
// If the list has never been resized, the width/height will be 0.
|
|
// Weird!
|
|
monitor.style.width = (width || 100) + 'px'
|
|
monitor.style.height = (height || 200) + 'px'
|
|
|
|
monitorStates[id].rowElems = []
|
|
}
|
|
|
|
monitorWrapper.append(monitor)
|
|
}
|
|
|
|
const {
|
|
monitor,
|
|
valueElem,
|
|
wasVisible,
|
|
lastValue = [],
|
|
slider,
|
|
rowElems
|
|
} = monitorStates[id]
|
|
if (visible) {
|
|
if (!wasVisible) {
|
|
monitor.style.display = null
|
|
}
|
|
const differed = Array.isArray(value)
|
|
? JSON.stringify(lastValue) !== JSON.stringify(value)
|
|
: lastValue !== value
|
|
if (differed) {
|
|
if (Array.isArray(value)) {
|
|
if (lastValue.length !== rowElems.length) {
|
|
console.error(
|
|
"List monitor rowElems and lastValue lengths don't match."
|
|
)
|
|
}
|
|
|
|
value.forEach((val, i) => {
|
|
if (i >= lastValue.length) {
|
|
// Could also set width to (lastValue.length + '').length + 'ch'
|
|
const index = document.createElement('div')
|
|
index.className = 'index'
|
|
index.textContent = i + 1
|
|
|
|
const value = document.createElement('div')
|
|
value.className = 'row-value'
|
|
|
|
const row = document.createElement('div')
|
|
row.className = 'row'
|
|
row.append(index, value)
|
|
|
|
valueElem.append(row)
|
|
rowElems[i] = value
|
|
}
|
|
|
|
if (lastValue[i] !== val) {
|
|
rowElems[i].textContent = val
|
|
}
|
|
})
|
|
|
|
if (value.length < lastValue.length) {
|
|
for (const toRemove of rowElems.splice(
|
|
value.length,
|
|
lastValue.length - value.length
|
|
)) {
|
|
toRemove.parentNode.remove()
|
|
}
|
|
}
|
|
} else {
|
|
// The HTMLifier used to use Number(value.toFixed(6)) but I don't
|
|
// think Scratch does that for monitors
|
|
valueElem.textContent = value
|
|
if (slider) {
|
|
slider.value = value
|
|
}
|
|
}
|
|
}
|
|
} else if (wasVisible) {
|
|
monitor.style.display = 'none'
|
|
}
|
|
monitorStates[id].wasVisible = visible
|
|
// `value` is a live array
|
|
monitorStates[id].lastValue = Array.isArray(value) ? [...value] : value
|
|
})
|
|
})
|
|
|
|
vm.postIOData('userData', { username: options.username })
|
|
|
|
for (let i = 0; i < options.extensionCount; i++) {
|
|
await vm.extensionManager.loadExtensionURL(String(i))
|
|
}
|
|
|
|
await vm.loadProject(
|
|
options.assets.file
|
|
? await fetch(options.assets.file).then(r => r.arrayBuffer())
|
|
: typeof options.assets.project === 'string'
|
|
? await storage.load(storage.AssetType.Project).then(asset => asset.data)
|
|
: // project.json was included as parsed JSON
|
|
JSON.stringify(options.assets.project)
|
|
)
|
|
|
|
const cloudProvider = new CloudProvider(options)
|
|
vm.setCloudProvider(cloudProvider)
|
|
if (options.cloud.specialBehaviours || !options.cloud.serverUrl) {
|
|
const stageVariables = vm.runtime.getTargetForStage().variables
|
|
for (const { name, isCloud } of Object.values(stageVariables)) {
|
|
if (isCloud) {
|
|
if (
|
|
options.cloud.specialBehaviours &&
|
|
options.cloud.serverUrl &&
|
|
!name.startsWith(CLOUD_PREFIX + 'local storage')
|
|
) {
|
|
continue
|
|
}
|
|
const value = localStorage.getItem('[s3] ' + name)
|
|
if (value !== null) {
|
|
vm.postIOData('cloud', { varUpdate: { name, value } })
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (options.cloud.specialBehaviours) {
|
|
cloudProvider.handleUrlChange()
|
|
}
|
|
|
|
progress.remove()
|
|
const loadingImage = document.getElementById('loading-image')
|
|
if (loadingImage) {
|
|
loadingImage.remove()
|
|
}
|
|
document.body.classList.remove('loading')
|
|
|
|
const greenFlag = document.getElementById('start-btn')
|
|
const stopSign = document.getElementById('stop-btn')
|
|
greenFlag.addEventListener('click', () => {
|
|
greenFlag.blur()
|
|
vm.greenFlag()
|
|
})
|
|
stopSign.addEventListener('click', () => {
|
|
stopSign.blur()
|
|
vm.stopAll()
|
|
})
|
|
vm.on('PROJECT_RUN_START', () => {
|
|
document.body.classList.add('running')
|
|
stopSign.disabled = false
|
|
})
|
|
vm.on('PROJECT_RUN_STOP', () => {
|
|
document.body.classList.remove('running')
|
|
stopSign.disabled = true
|
|
})
|
|
if (options.autoStart) {
|
|
vm.greenFlag()
|
|
}
|
|
|
|
document
|
|
.getElementById('download-btn')
|
|
.addEventListener('click', async () => {
|
|
download(await vm.saveProjectSb3(), document.title + '.sb3')
|
|
})
|
|
const addSpriteInput = document.getElementById('add-sprite-file')
|
|
addSpriteInput.addEventListener('change', async () => {
|
|
addSpriteInput.disabled = true
|
|
for (const file of addSpriteInput.files) {
|
|
// 1. Convert the File to an arrayBuffer. I care less about browser
|
|
// support, so I can use async/await + .arrayBuffer
|
|
// https://github.com/LLK/scratch-gui/blob/develop/src/lib/file-uploader.js#L25
|
|
const sprite = new Uint8Array(await file.arrayBuffer())
|
|
|
|
// 2. Convert a costume to a sprite (skipping for now)
|
|
// https://github.com/LLK/scratch-gui/blob/develop/src/lib/file-uploader.js#L208
|
|
|
|
// 3. Add to VM
|
|
await vm.addSprite(sprite)
|
|
}
|
|
addSpriteInput.disabled = false
|
|
addSpriteInput.value = null
|
|
})
|
|
|
|
canvas.addEventListener('mousedown', handleMouseDown)
|
|
canvas.addEventListener('touchstart', handleMouseDown, { passive: false })
|
|
}
|
|
|
|
const errorsTextarea = document.getElementById('errors')
|
|
function handleHashChange () {
|
|
// #show-errors-<Han sheep>
|
|
if (window.location.hash === '#show-errors-%E7%BE%8A') {
|
|
if (!window.onNewError) {
|
|
window.onNewError = () => {
|
|
errorsTextarea.value = `${
|
|
window.errors.length
|
|
} error(s)\n${window.errors.join('\n')}`
|
|
}
|
|
window.onNewError()
|
|
}
|
|
errorsTextarea.style.display = 'block'
|
|
} else if (window.onNewError) {
|
|
window.onNewError = null
|
|
errorsTextarea.style.display = 'none'
|
|
}
|
|
}
|
|
window.addEventListener('hashchange', handleHashChange)
|
|
handleHashChange()
|
|
|
|
// Not used by the template, but might be convenient for un-HTMLifying if I
|
|
// remember this function exists
|
|
window.download = (blob, name = 'download') => {
|
|
const url = URL.createObjectURL(blob)
|
|
const link = document.createElement('a')
|
|
link.href = url
|
|
link.download = name
|
|
document.body.append(link)
|
|
link.click()
|
|
link.remove()
|
|
URL.revokeObjectURL(url)
|
|
}
|
|
|
|
</script> <script>
|
|
const GENERATED = 1648316900730
|
|
const initOptions = {
|
|
"width": 480,
|
|
"height": 360,
|
|
"stretchStage": true,
|
|
"fps": 30,
|
|
"turbo": false,
|
|
"limits": true,
|
|
"fencing": true,
|
|
"pointerLock": false,
|
|
"autoStart": true,
|
|
"username": "user",
|
|
"loadingProgress": true,
|
|
"cloud": {
|
|
"serverUrl": null,
|
|
"specialBehaviours": false,
|
|
"projectId": "276660763"
|
|
},
|
|
"extensionWorker": {
|
|
"url": "https://sheeptester.github.io/scratch-vm/16-9/extension-worker.js"
|
|
},
|
|
"extensionCount": 0,
|
|
"assets": {
|
|
"project": "project/project.json",
|
|
"81ea83de67bc1f9b61ac13fe6ad837d2.png": "project/81ea83de67bc1f9b61ac13fe6ad837d2.png",
|
|
"f5e250886e3bafbbd9bc2398a5e321c5.png": "project/f5e250886e3bafbbd9bc2398a5e321c5.png",
|
|
"5a04bb20d246f15811faa5533055edab.wav": "project/5a04bb20d246f15811faa5533055edab.wav",
|
|
"054c57c8fe2c44ab427048cba396ab6c.wav": "project/054c57c8fe2c44ab427048cba396ab6c.wav",
|
|
"fffc28bb35d77c377dc3fbcdca5d22fa.wav": "project/fffc28bb35d77c377dc3fbcdca5d22fa.wav",
|
|
"681530b51e51ebcd83c9a9c438f4c046.svg": "project/681530b51e51ebcd83c9a9c438f4c046.svg",
|
|
"315e710ab9f8fc719aca2be819e0418c.png": "project/315e710ab9f8fc719aca2be819e0418c.png",
|
|
"995314bda208826c45ae2a230026042f.png": "project/995314bda208826c45ae2a230026042f.png",
|
|
"d8797a57e88e9d31a7d5f853c4502bf7.wav": "project/d8797a57e88e9d31a7d5f853c4502bf7.wav",
|
|
"27480d9e20de1728a972ec65ae46ac5d.wav": "project/27480d9e20de1728a972ec65ae46ac5d.wav",
|
|
"32ef290752856464c320e6a5a4aa6f9e.png": "project/32ef290752856464c320e6a5a4aa6f9e.png",
|
|
"4cc4bc157c80ff7f84bb39e87f00f743.png": "project/4cc4bc157c80ff7f84bb39e87f00f743.png",
|
|
"b92a6cab9e2f8b0d3fd6856c5b6f4f1b.png": "project/b92a6cab9e2f8b0d3fd6856c5b6f4f1b.png",
|
|
"61e948f03998bf3796297be087c9a63c.png": "project/61e948f03998bf3796297be087c9a63c.png",
|
|
"96bc5fa40d002ab1fd30457ac0773ffc.png": "project/96bc5fa40d002ab1fd30457ac0773ffc.png",
|
|
"8ba5289c7bb2a80e680b9e8c8d9fda85.png": "project/8ba5289c7bb2a80e680b9e8c8d9fda85.png",
|
|
"cba71499e7d24446ee5f87897b0609ab.png": "project/cba71499e7d24446ee5f87897b0609ab.png",
|
|
"6503b988d2e1f1ca522da48c140fbb7b.png": "project/6503b988d2e1f1ca522da48c140fbb7b.png",
|
|
"daa73bbf8ee731292ee6113de44198f1.png": "project/daa73bbf8ee731292ee6113de44198f1.png",
|
|
"7c69ef71a44b87bba4313c8f07f692c4.png": "project/7c69ef71a44b87bba4313c8f07f692c4.png",
|
|
"7e33e02531acab5a714ed26f6d82fe05.png": "project/7e33e02531acab5a714ed26f6d82fe05.png",
|
|
"9afe63a81471c81a5274bbd7a4b5b0a0.png": "project/9afe63a81471c81a5274bbd7a4b5b0a0.png",
|
|
"b4fd79d253c6ea0964e2dfbb20a099d6.png": "project/b4fd79d253c6ea0964e2dfbb20a099d6.png",
|
|
"20112378578537fe02ba08bc5691bd2c.png": "project/20112378578537fe02ba08bc5691bd2c.png",
|
|
"5e3a029a1e852c789f2c6b25b71bf8c8.png": "project/5e3a029a1e852c789f2c6b25b71bf8c8.png",
|
|
"85cef798772ed6ecb1b31a41540a96f7.png": "project/85cef798772ed6ecb1b31a41540a96f7.png",
|
|
"f883adc12a968cadabf65eded768025a.png": "project/f883adc12a968cadabf65eded768025a.png",
|
|
"e12b0518cb99d9a04d74bf0aa9694572.png": "project/e12b0518cb99d9a04d74bf0aa9694572.png",
|
|
"5398cb6a482544386cd5a8370ef13906.png": "project/5398cb6a482544386cd5a8370ef13906.png",
|
|
"f37e683d664fb86e3e8d8891c9036fe1.png": "project/f37e683d664fb86e3e8d8891c9036fe1.png",
|
|
"592d474eb441f669f3139deb6eae7959.png": "project/592d474eb441f669f3139deb6eae7959.png",
|
|
"44a790a88bca9f8d81243ba77f06cc64.png": "project/44a790a88bca9f8d81243ba77f06cc64.png",
|
|
"c2ec62a140eced3582dac36d58e042c9.png": "project/c2ec62a140eced3582dac36d58e042c9.png",
|
|
"21f597c618f8bd2e61b240821425f02e.png": "project/21f597c618f8bd2e61b240821425f02e.png",
|
|
"715e1c5226563bceff5fb947c181dd9a.png": "project/715e1c5226563bceff5fb947c181dd9a.png",
|
|
"1e791df82f4096335e4f4a6663dd788e.png": "project/1e791df82f4096335e4f4a6663dd788e.png",
|
|
"ef50731a6662c143e5be4775883ea9a0.png": "project/ef50731a6662c143e5be4775883ea9a0.png",
|
|
"f0fd3f36f9b3cc51a3a9a7c0eb1a2a74.png": "project/f0fd3f36f9b3cc51a3a9a7c0eb1a2a74.png",
|
|
"ba11ea2ee6cd0e94ce3dfcd0c575330f.png": "project/ba11ea2ee6cd0e94ce3dfcd0c575330f.png",
|
|
"b37931b50a2a5be3d4e05af57c68611d.png": "project/b37931b50a2a5be3d4e05af57c68611d.png",
|
|
"681904c0c6aa7a5b17fe0e036dc69fce.png": "project/681904c0c6aa7a5b17fe0e036dc69fce.png",
|
|
"5efe7a8047470d7fab1244edb8fd14da.png": "project/5efe7a8047470d7fab1244edb8fd14da.png",
|
|
"f4f12f43e2780e04cee44cb6f5e55b84.png": "project/f4f12f43e2780e04cee44cb6f5e55b84.png",
|
|
"b449cd3246159c3471d1c30b55a8a771.png": "project/b449cd3246159c3471d1c30b55a8a771.png",
|
|
"02c2930ce48825137686334adcc09505.png": "project/02c2930ce48825137686334adcc09505.png",
|
|
"ac2034c017e2604e576bf5e17a1ab770.png": "project/ac2034c017e2604e576bf5e17a1ab770.png",
|
|
"81a44fc21d36dc1e24617926acf9d5a3.png": "project/81a44fc21d36dc1e24617926acf9d5a3.png",
|
|
"72e50d9c75d3c790475d27b77aabf965.png": "project/72e50d9c75d3c790475d27b77aabf965.png",
|
|
"558c611e27143318087d0102991aff18.wav": "project/558c611e27143318087d0102991aff18.wav",
|
|
"5bf67bdb5585ab16e259a820faf56bf8.png": "project/5bf67bdb5585ab16e259a820faf56bf8.png",
|
|
"762a0dbbb7e6ff7f26c83bc225472940.png": "project/762a0dbbb7e6ff7f26c83bc225472940.png",
|
|
"02a64bfd0890cd3b8cef5e8ce0847575.png": "project/02a64bfd0890cd3b8cef5e8ce0847575.png",
|
|
"862305de01dafd2afeed69a13d0b049f.png": "project/862305de01dafd2afeed69a13d0b049f.png",
|
|
"2f8aaabb63839f603bfbd39bc46c18d9.png": "project/2f8aaabb63839f603bfbd39bc46c18d9.png",
|
|
"7bd29e956ff96b1667e0f7f029975353.png": "project/7bd29e956ff96b1667e0f7f029975353.png",
|
|
"d257770f1f2c927e2da1da1fc1222b8e.png": "project/d257770f1f2c927e2da1da1fc1222b8e.png",
|
|
"1fdc7f8587246949654b61e79b99c281.png": "project/1fdc7f8587246949654b61e79b99c281.png",
|
|
"0b96df20fdb41b417bdcf03a69201a96.png": "project/0b96df20fdb41b417bdcf03a69201a96.png",
|
|
"bd5d8ce08fbd97bcc2d486504d3fb43d.png": "project/bd5d8ce08fbd97bcc2d486504d3fb43d.png",
|
|
"89e72531c6f17ef58587f7f350c9b0e6.png": "project/89e72531c6f17ef58587f7f350c9b0e6.png",
|
|
"3516d20e6d474c195816a1d30ff54882.png": "project/3516d20e6d474c195816a1d30ff54882.png",
|
|
"c44fdf73fad41fe719056ad8c20d3dc6.png": "project/c44fdf73fad41fe719056ad8c20d3dc6.png",
|
|
"dde5fdec96045d0678686be58f58d16b.png": "project/dde5fdec96045d0678686be58f58d16b.png",
|
|
"d45d7a25978eb0b0d97dd8dee08d0d1e.png": "project/d45d7a25978eb0b0d97dd8dee08d0d1e.png",
|
|
"0772f3ddf49171ecf7fe86b5bac93dfa.png": "project/0772f3ddf49171ecf7fe86b5bac93dfa.png",
|
|
"d524e1ae2d06f9ea5738810642a90312.png": "project/d524e1ae2d06f9ea5738810642a90312.png",
|
|
"c67ccb5616c212e1522d0561b7a5ae7d.png": "project/c67ccb5616c212e1522d0561b7a5ae7d.png",
|
|
"d94832d9c39be3f5c367a64b8bf5cacf.png": "project/d94832d9c39be3f5c367a64b8bf5cacf.png",
|
|
"36a9944e39c18888486ccce10297ee10.png": "project/36a9944e39c18888486ccce10297ee10.png",
|
|
"809f54bbe750cf42be057c332effa6da.png": "project/809f54bbe750cf42be057c332effa6da.png",
|
|
"0e0ddf7f7cad82042d14f0930c54f796.png": "project/0e0ddf7f7cad82042d14f0930c54f796.png",
|
|
"e6354d58b9d974919f791be0c09fb988.png": "project/e6354d58b9d974919f791be0c09fb988.png",
|
|
"80354f071844f283b7fe762904d8065a.png": "project/80354f071844f283b7fe762904d8065a.png",
|
|
"bfedcb82ce3d207b24d0848da978e9e1.png": "project/bfedcb82ce3d207b24d0848da978e9e1.png",
|
|
"853a0607d2eba326a033c358ab11eae0.png": "project/853a0607d2eba326a033c358ab11eae0.png",
|
|
"a3fbfeceb467b498f2c028dffbf54e42.png": "project/a3fbfeceb467b498f2c028dffbf54e42.png",
|
|
"1c5865914d6896be4c1ef1075208d8e1.png": "project/1c5865914d6896be4c1ef1075208d8e1.png",
|
|
"9fc2436717ab5f9900e0964f12908568.png": "project/9fc2436717ab5f9900e0964f12908568.png",
|
|
"bc8b431f5fcf4adfc773fb0410cd9727.png": "project/bc8b431f5fcf4adfc773fb0410cd9727.png",
|
|
"a83f4cabca2197f157180dabbcd706bb.png": "project/a83f4cabca2197f157180dabbcd706bb.png",
|
|
"63eb44a6528809f5bf15a1397526042e.png": "project/63eb44a6528809f5bf15a1397526042e.png",
|
|
"9e9cd5b9d359c713531732e16b79cb45.png": "project/9e9cd5b9d359c713531732e16b79cb45.png",
|
|
"95c5d530aae1d29245d0a3f05e25088b.png": "project/95c5d530aae1d29245d0a3f05e25088b.png",
|
|
"3bf07ae47e200531dd4e6ad3aff42446.png": "project/3bf07ae47e200531dd4e6ad3aff42446.png",
|
|
"0c5d76b33d7be5faa9f7083f1c9c3efc.png": "project/0c5d76b33d7be5faa9f7083f1c9c3efc.png",
|
|
"a59c34f69506721d445b72d6d427321f.png": "project/a59c34f69506721d445b72d6d427321f.png",
|
|
"82418cc4610bcbda936692f4bc41b62b.png": "project/82418cc4610bcbda936692f4bc41b62b.png",
|
|
"7c4c77686b7971f0a4e2eb2183156f6d.png": "project/7c4c77686b7971f0a4e2eb2183156f6d.png",
|
|
"039b91e419a03885b14a082a53398f96.png": "project/039b91e419a03885b14a082a53398f96.png",
|
|
"c11b9a63d2ecc368afd6d8acb01ceb16.png": "project/c11b9a63d2ecc368afd6d8acb01ceb16.png",
|
|
"c17e58003d5913414e1a6806aeef074b.png": "project/c17e58003d5913414e1a6806aeef074b.png",
|
|
"7b7d4ed384d7db962b6b8785fd27375a.png": "project/7b7d4ed384d7db962b6b8785fd27375a.png",
|
|
"7f3217069148031a61680b22b3ad5867.png": "project/7f3217069148031a61680b22b3ad5867.png",
|
|
"80837f41899785463d4308f2048ff6f1.png": "project/80837f41899785463d4308f2048ff6f1.png",
|
|
"82069dc88ccf596a649bec5b1b736432.png": "project/82069dc88ccf596a649bec5b1b736432.png",
|
|
"cd0580401cb98a2b998c35a2ce04ab3e.png": "project/cd0580401cb98a2b998c35a2ce04ab3e.png",
|
|
"e95b6054867757c6c6c4e12da8499b47.png": "project/e95b6054867757c6c6c4e12da8499b47.png",
|
|
"02af97a6d44b8e22d099aca22aafb87f.png": "project/02af97a6d44b8e22d099aca22aafb87f.png",
|
|
"d5c008401970ac1316f324ead315f066.png": "project/d5c008401970ac1316f324ead315f066.png",
|
|
"f069987016feb0acd4f04e522b762a2e.png": "project/f069987016feb0acd4f04e522b762a2e.png",
|
|
"16645a83f28bf81c5099a34108768338.png": "project/16645a83f28bf81c5099a34108768338.png",
|
|
"7e95768bc3e47448ab9b665badeae380.png": "project/7e95768bc3e47448ab9b665badeae380.png",
|
|
"1291f6106df922999b4e6404a4c05e33.png": "project/1291f6106df922999b4e6404a4c05e33.png",
|
|
"fc463e2e0006b0f75b752f28d829907c.png": "project/fc463e2e0006b0f75b752f28d829907c.png",
|
|
"400e61a987767a78b4c16c9c027db684.png": "project/400e61a987767a78b4c16c9c027db684.png",
|
|
"72c1829c7e13dbff2fa8355af69539aa.png": "project/72c1829c7e13dbff2fa8355af69539aa.png",
|
|
"53d13554b997104439137cd8f685af8e.png": "project/53d13554b997104439137cd8f685af8e.png",
|
|
"c7d23ab29e90174c49280ba1a1a22192.png": "project/c7d23ab29e90174c49280ba1a1a22192.png",
|
|
"07e4d91c01312939463d094ba6948bc9.png": "project/07e4d91c01312939463d094ba6948bc9.png",
|
|
"9464ab2daa8542d056cb5d5ec4c88852.png": "project/9464ab2daa8542d056cb5d5ec4c88852.png",
|
|
"9879b2625c524f50faac6e25bce72ea3.png": "project/9879b2625c524f50faac6e25bce72ea3.png",
|
|
"a12c8710ebd846032fcd860747b1b9d6.png": "project/a12c8710ebd846032fcd860747b1b9d6.png",
|
|
"095bb8174b30d6e7e052537d39de45ce.png": "project/095bb8174b30d6e7e052537d39de45ce.png",
|
|
"036c462686fa5cfeef430a4fbfd67173.png": "project/036c462686fa5cfeef430a4fbfd67173.png",
|
|
"6b7bc780186195b7ff7e37695d49db5e.png": "project/6b7bc780186195b7ff7e37695d49db5e.png",
|
|
"ed457888198917dc968b9e47d5f69b00.png": "project/ed457888198917dc968b9e47d5f69b00.png",
|
|
"43ba79179ff0e69f8180b9ef5988c88f.png": "project/43ba79179ff0e69f8180b9ef5988c88f.png",
|
|
"57f0dce61fa0ae445c40c168a195c118.png": "project/57f0dce61fa0ae445c40c168a195c118.png",
|
|
"da2da8a3fb8ad1530c12a858bf034275.png": "project/da2da8a3fb8ad1530c12a858bf034275.png",
|
|
"ceed98e5defa295b767927eead5593ea.png": "project/ceed98e5defa295b767927eead5593ea.png",
|
|
"a0af5de878a13f43d9a9212f636f24dc.png": "project/a0af5de878a13f43d9a9212f636f24dc.png",
|
|
"7049693ec77751c87a32461be42d1e89.png": "project/7049693ec77751c87a32461be42d1e89.png",
|
|
"e3073f398b03519f1f67012d70f73c70.png": "project/e3073f398b03519f1f67012d70f73c70.png",
|
|
"2e9ee95ac40a81085ba2dccb5fd3dd9c.png": "project/2e9ee95ac40a81085ba2dccb5fd3dd9c.png",
|
|
"7ce8de1a9422cb31e832c0ba5bdf6094.png": "project/7ce8de1a9422cb31e832c0ba5bdf6094.png",
|
|
"dbbde9291c50f76c7a5ebcf63a406cca.png": "project/dbbde9291c50f76c7a5ebcf63a406cca.png",
|
|
"d9852112a855a319e1ff8eab75c4fca8.png": "project/d9852112a855a319e1ff8eab75c4fca8.png",
|
|
"6b4537504f6b89871fde8bcd331cc188.png": "project/6b4537504f6b89871fde8bcd331cc188.png",
|
|
"1b119118bb91cbf60d9d2fadbf6bf66c.png": "project/1b119118bb91cbf60d9d2fadbf6bf66c.png",
|
|
"8242701f96730b4dde44825b834f7115.png": "project/8242701f96730b4dde44825b834f7115.png",
|
|
"f13b32a32a888a69395358c7656d3a2e.png": "project/f13b32a32a888a69395358c7656d3a2e.png",
|
|
"31c2c017497bb49b19143c053a023d26.png": "project/31c2c017497bb49b19143c053a023d26.png",
|
|
"d642db094b3eb9c664747ddf321f7e70.png": "project/d642db094b3eb9c664747ddf321f7e70.png",
|
|
"ddd2dd90fa17d8cbb08779c6abb345c2.png": "project/ddd2dd90fa17d8cbb08779c6abb345c2.png",
|
|
"e5334777a5fada11adc6402f786b4ffc.png": "project/e5334777a5fada11adc6402f786b4ffc.png",
|
|
"31a85da57e7cf2f08095dc0fe24c930d.png": "project/31a85da57e7cf2f08095dc0fe24c930d.png",
|
|
"7e65cc189bcf608feb825c8b86db8f76.png": "project/7e65cc189bcf608feb825c8b86db8f76.png",
|
|
"08467f62ad5fa9186bbe0ea951f32acf.png": "project/08467f62ad5fa9186bbe0ea951f32acf.png",
|
|
"a74d70bc058cbccc048956293b9bf12e.png": "project/a74d70bc058cbccc048956293b9bf12e.png",
|
|
"f4ef499ff105efe0f7358309e7a84f94.png": "project/f4ef499ff105efe0f7358309e7a84f94.png",
|
|
"f18580cfaffe2873e0dcf5f262db0380.png": "project/f18580cfaffe2873e0dcf5f262db0380.png",
|
|
"75c4ff790c17169f7e337757e65a92bf.png": "project/75c4ff790c17169f7e337757e65a92bf.png",
|
|
"d290d3eb5a630b9a3b76473ad591f3e1.wav": "project/d290d3eb5a630b9a3b76473ad591f3e1.wav",
|
|
"387537489c75427b31bedc7cd64f91a1.wav": "project/387537489c75427b31bedc7cd64f91a1.wav",
|
|
"0c6ff4ff4382914e87678c2596f404f2.png": "project/0c6ff4ff4382914e87678c2596f404f2.png",
|
|
"ed1d984d0541f708bba452d46502cebb.png": "project/ed1d984d0541f708bba452d46502cebb.png",
|
|
"5ce229df092cda69a8b906750c53d382.png": "project/5ce229df092cda69a8b906750c53d382.png",
|
|
"86ec7b1fbf5452be6fd1eb8cb5d6de5a.png": "project/86ec7b1fbf5452be6fd1eb8cb5d6de5a.png",
|
|
"9509fe32ed86bfc2cf560bb65da40bc2.png": "project/9509fe32ed86bfc2cf560bb65da40bc2.png",
|
|
"e74be4ff193144d30063d59891964571.png": "project/e74be4ff193144d30063d59891964571.png",
|
|
"df53e28d9eb8f7a0871d9f14bedc3e89.png": "project/df53e28d9eb8f7a0871d9f14bedc3e89.png",
|
|
"c5bb43c95ed05313fd229232861fcd96.png": "project/c5bb43c95ed05313fd229232861fcd96.png",
|
|
"f3e098691b073e5eda9f8d41bbd66e97.png": "project/f3e098691b073e5eda9f8d41bbd66e97.png",
|
|
"36ad9f39a6782142a6cc41cd0552c905.png": "project/36ad9f39a6782142a6cc41cd0552c905.png",
|
|
"d2e8ace8648c1cc90247fed82c357326.png": "project/d2e8ace8648c1cc90247fed82c357326.png",
|
|
"d97cfbe719a56f765a45e7580bdec4b8.png": "project/d97cfbe719a56f765a45e7580bdec4b8.png",
|
|
"cc0f009ce7e2037855f9c370e52823e1.png": "project/cc0f009ce7e2037855f9c370e52823e1.png",
|
|
"d229c56ea380ba19651b9c2082e984b5.png": "project/d229c56ea380ba19651b9c2082e984b5.png",
|
|
"d489d12b43376f32b19e9484612cf202.png": "project/d489d12b43376f32b19e9484612cf202.png",
|
|
"b02872e0db7b766ccbbf25fa95748899.png": "project/b02872e0db7b766ccbbf25fa95748899.png",
|
|
"1a9d6d15748a098b6a0cfbc149ca2728.png": "project/1a9d6d15748a098b6a0cfbc149ca2728.png",
|
|
"db916f48a02b626cf83cf3f25f9c6871.png": "project/db916f48a02b626cf83cf3f25f9c6871.png",
|
|
"fc271b6d52549e973046930efbacefc2.png": "project/fc271b6d52549e973046930efbacefc2.png",
|
|
"830f48b5636bc3166c796f8e8a6802c6.png": "project/830f48b5636bc3166c796f8e8a6802c6.png",
|
|
"66140c88249cf627a7c2c8174d68327b.png": "project/66140c88249cf627a7c2c8174d68327b.png",
|
|
"613d2636706b43315d5521011d94af17.png": "project/613d2636706b43315d5521011d94af17.png",
|
|
"8288e5c032aae0730b23a19a4d470ced.png": "project/8288e5c032aae0730b23a19a4d470ced.png",
|
|
"3747ae97212c7b30694fb1e805edeea0.png": "project/3747ae97212c7b30694fb1e805edeea0.png",
|
|
"ca20d8d847cf373535b6ed1530f758fe.png": "project/ca20d8d847cf373535b6ed1530f758fe.png",
|
|
"5a7ee238d7cde4bf9ca2ddf9b37ac921.png": "project/5a7ee238d7cde4bf9ca2ddf9b37ac921.png",
|
|
"a107fc23f0f618b774d73778cf7da3c6.png": "project/a107fc23f0f618b774d73778cf7da3c6.png",
|
|
"5d7e634f4167ad02d28108d6395115ea.png": "project/5d7e634f4167ad02d28108d6395115ea.png",
|
|
"accef9e7dd74bd285234e633eb8a4cc6.png": "project/accef9e7dd74bd285234e633eb8a4cc6.png",
|
|
"7d2d530062673684f3e0c2ab003fbd04.png": "project/7d2d530062673684f3e0c2ab003fbd04.png",
|
|
"21e85b8c6ea6fc1e8c48752856406ba6.wav": "project/21e85b8c6ea6fc1e8c48752856406ba6.wav",
|
|
"b837e7934f9d43bc7d2c7e5e1dc73bdf.wav": "project/b837e7934f9d43bc7d2c7e5e1dc73bdf.wav",
|
|
"db2c74865224a0611d6047a581b8347d.wav": "project/db2c74865224a0611d6047a581b8347d.wav",
|
|
"b4710d22c0adc7bfa85c65d950fa261f.png": "project/b4710d22c0adc7bfa85c65d950fa261f.png",
|
|
"1ca0dba815bb23a829873eab867919f7.png": "project/1ca0dba815bb23a829873eab867919f7.png",
|
|
"b496b27d747a711dfb7652f832d9d9f9.png": "project/b496b27d747a711dfb7652f832d9d9f9.png",
|
|
"4ca1c95aa6860992630e22fc59ba96de.png": "project/4ca1c95aa6860992630e22fc59ba96de.png",
|
|
"343101dad1af3ccd453076db2a4cfb56.png": "project/343101dad1af3ccd453076db2a4cfb56.png",
|
|
"97b458a6fa8ac0b792fd2e90be8fe082.png": "project/97b458a6fa8ac0b792fd2e90be8fe082.png",
|
|
"e2a1ce1576630aa68d922edfb63ec968.png": "project/e2a1ce1576630aa68d922edfb63ec968.png",
|
|
"34f05f695f74bf321a2c2601dabcb034.png": "project/34f05f695f74bf321a2c2601dabcb034.png",
|
|
"3ac615af59b8fbf07613a956bf6922d9.png": "project/3ac615af59b8fbf07613a956bf6922d9.png",
|
|
"b4b6f8f0e135a3e6366cd5ed9beaa08c.png": "project/b4b6f8f0e135a3e6366cd5ed9beaa08c.png",
|
|
"e4897e093de8ed1895e6822d21c5693c.png": "project/e4897e093de8ed1895e6822d21c5693c.png",
|
|
"bc88f7d0623e87c84b6f083be04e19be.png": "project/bc88f7d0623e87c84b6f083be04e19be.png",
|
|
"6e5d240ce9dd2041449b2d341ca593e8.png": "project/6e5d240ce9dd2041449b2d341ca593e8.png",
|
|
"13064bf7ef9b8a297d7e18f7210f00ca.png": "project/13064bf7ef9b8a297d7e18f7210f00ca.png",
|
|
"854ae748f21df18df5421d26bfd64972.png": "project/854ae748f21df18df5421d26bfd64972.png",
|
|
"d8df06b1bc99791396cf1457af56a23d.png": "project/d8df06b1bc99791396cf1457af56a23d.png",
|
|
"e00feb3bc4baeaeb9c8cf7e8800af19c.png": "project/e00feb3bc4baeaeb9c8cf7e8800af19c.png",
|
|
"e33c60c6a5fa1f6baf4d53e19f045f70.png": "project/e33c60c6a5fa1f6baf4d53e19f045f70.png",
|
|
"3a0fbbd55ac2f7e49e6e90c44071a1bb.png": "project/3a0fbbd55ac2f7e49e6e90c44071a1bb.png",
|
|
"be432d69cf412f2a0b441c65838e5dd0.png": "project/be432d69cf412f2a0b441c65838e5dd0.png",
|
|
"e294c9baca484334678842be54544ff5.png": "project/e294c9baca484334678842be54544ff5.png",
|
|
"2c91520542a399e2475d6a765c2c3740.png": "project/2c91520542a399e2475d6a765c2c3740.png",
|
|
"6071f224c54e03fe6ef03c3e2a16f9b2.png": "project/6071f224c54e03fe6ef03c3e2a16f9b2.png",
|
|
"e882afcdb3e56ed2eace49e625bfe44f.png": "project/e882afcdb3e56ed2eace49e625bfe44f.png",
|
|
"65ac9724af4b664e6995366c76a358f1.png": "project/65ac9724af4b664e6995366c76a358f1.png",
|
|
"47d269e43f7e25afd66b540086d9d9b2.png": "project/47d269e43f7e25afd66b540086d9d9b2.png",
|
|
"4769076fb25fecffca6e587e7d19c06a.png": "project/4769076fb25fecffca6e587e7d19c06a.png",
|
|
"21d6c585c85b203ac7b9b4f3c646908e.png": "project/21d6c585c85b203ac7b9b4f3c646908e.png",
|
|
"9d22e9af99b4d1de600bf3a9190157fb.png": "project/9d22e9af99b4d1de600bf3a9190157fb.png",
|
|
"d61b2881f099e1779128e39e42403409.png": "project/d61b2881f099e1779128e39e42403409.png",
|
|
"b63d53c34d393c104bcb06508c1211a4.png": "project/b63d53c34d393c104bcb06508c1211a4.png",
|
|
"6a91bf53181482dbc12991ef9d251c5a.png": "project/6a91bf53181482dbc12991ef9d251c5a.png",
|
|
"7ff16489c535403f8b9a6321594b151e.png": "project/7ff16489c535403f8b9a6321594b151e.png",
|
|
"ad02be6ec25479b45aa67bbb192d123a.png": "project/ad02be6ec25479b45aa67bbb192d123a.png",
|
|
"382b8959845a113fd40306faf8408a1f.png": "project/382b8959845a113fd40306faf8408a1f.png",
|
|
"863a5bcaffee97174d9b72b1b6687b30.png": "project/863a5bcaffee97174d9b72b1b6687b30.png",
|
|
"6746c96d336a56f4e19ba5f62b6db6cf.png": "project/6746c96d336a56f4e19ba5f62b6db6cf.png",
|
|
"ad7f447da5129431a87f820247e672b1.png": "project/ad7f447da5129431a87f820247e672b1.png",
|
|
"13fd8dadd2108c25b7c45dfbac74ead6.png": "project/13fd8dadd2108c25b7c45dfbac74ead6.png",
|
|
"f66d95ccfd6805bd6bdec5daef4d6f3b.png": "project/f66d95ccfd6805bd6bdec5daef4d6f3b.png",
|
|
"e7c1ef247d19e1862b46054153327b34.png": "project/e7c1ef247d19e1862b46054153327b34.png",
|
|
"f7ffdd106b536e8e27d1aa0ee185e703.png": "project/f7ffdd106b536e8e27d1aa0ee185e703.png",
|
|
"7576a5c6634458f5b023285e8ce7ea2d.png": "project/7576a5c6634458f5b023285e8ce7ea2d.png",
|
|
"26cff03e2bc167d7e3daab4b11d7d9f6.png": "project/26cff03e2bc167d7e3daab4b11d7d9f6.png",
|
|
"aa80e8dda94e9dbc18160d718cd8ee82.png": "project/aa80e8dda94e9dbc18160d718cd8ee82.png",
|
|
"3f27da4e61bbc01a08e60e0905606fb9.png": "project/3f27da4e61bbc01a08e60e0905606fb9.png",
|
|
"50736a28a5bd76e3562d306d4209550f.png": "project/50736a28a5bd76e3562d306d4209550f.png",
|
|
"564790df7c3b5df9c6daa20c586eee25.png": "project/564790df7c3b5df9c6daa20c586eee25.png",
|
|
"54bd180162db6c27b048a95c7053cb8a.png": "project/54bd180162db6c27b048a95c7053cb8a.png",
|
|
"5db97c004e87e1f0e11d9f0c2d0c23cf.png": "project/5db97c004e87e1f0e11d9f0c2d0c23cf.png",
|
|
"2d9c95e63ec912a5b391747471d6d50a.png": "project/2d9c95e63ec912a5b391747471d6d50a.png",
|
|
"c1eb05b5d2bee08f3c07917c02166ea6.png": "project/c1eb05b5d2bee08f3c07917c02166ea6.png",
|
|
"8e4e662e801dd8a180ab3055ca7b4dd9.png": "project/8e4e662e801dd8a180ab3055ca7b4dd9.png",
|
|
"6108a0157fbcbb5405658108f63dcdb0.png": "project/6108a0157fbcbb5405658108f63dcdb0.png",
|
|
"6dca74662ed588610452d8673ca13d59.png": "project/6dca74662ed588610452d8673ca13d59.png",
|
|
"98a333fc380a9aecccfc891dfdd42416.png": "project/98a333fc380a9aecccfc891dfdd42416.png",
|
|
"715cd3cb144e02ed2175fc0449f788b4.png": "project/715cd3cb144e02ed2175fc0449f788b4.png",
|
|
"e2429b70f9fe8b92ce27019b17c2f24d.png": "project/e2429b70f9fe8b92ce27019b17c2f24d.png",
|
|
"611a2007140b2e19a7fb34202157d51c.png": "project/611a2007140b2e19a7fb34202157d51c.png",
|
|
"9c0dddc5bec470947fa411f2e29f48fb.png": "project/9c0dddc5bec470947fa411f2e29f48fb.png",
|
|
"b2cd952be5bcac0e025dccaa6312e1ad.png": "project/b2cd952be5bcac0e025dccaa6312e1ad.png",
|
|
"554b483b222658a0f321b7fb0998088d.png": "project/554b483b222658a0f321b7fb0998088d.png",
|
|
"48354ef424fafefff34e6880506550c5.png": "project/48354ef424fafefff34e6880506550c5.png",
|
|
"e94e4b7d9c1b0057692e8269178949bd.png": "project/e94e4b7d9c1b0057692e8269178949bd.png",
|
|
"19315905fcd36b84881da422e2f184b9.png": "project/19315905fcd36b84881da422e2f184b9.png",
|
|
"6e162d8f1dd5045fecc4b2ae6e9ed1e8.png": "project/6e162d8f1dd5045fecc4b2ae6e9ed1e8.png",
|
|
"b6a4548192aa8671976b07ae103eb1e3.png": "project/b6a4548192aa8671976b07ae103eb1e3.png",
|
|
"ef3625f33ed29b86228cc130d1a3ba9f.png": "project/ef3625f33ed29b86228cc130d1a3ba9f.png",
|
|
"7e39a9b5e2fda5674e71fa59b18dc540.png": "project/7e39a9b5e2fda5674e71fa59b18dc540.png",
|
|
"c5dc7642ca2043cb05e00c69341154e1.png": "project/c5dc7642ca2043cb05e00c69341154e1.png",
|
|
"9a79cc9798a5e9cf0503e5b95794a7a9.png": "project/9a79cc9798a5e9cf0503e5b95794a7a9.png",
|
|
"b8c1276538ab8fb63c87d09adaa5354e.png": "project/b8c1276538ab8fb63c87d09adaa5354e.png",
|
|
"5232af914baed2d34b6e4ac69ccfbf7b.png": "project/5232af914baed2d34b6e4ac69ccfbf7b.png",
|
|
"e7c67f27c8662a710e1461f5e79390a5.png": "project/e7c67f27c8662a710e1461f5e79390a5.png",
|
|
"0171caecbb52ce460bde5aa597fa05e9.png": "project/0171caecbb52ce460bde5aa597fa05e9.png",
|
|
"b523d6eb5d3367a5ff93fb1008484226.png": "project/b523d6eb5d3367a5ff93fb1008484226.png",
|
|
"cf3d3051b3f0ed99e1efe622422e895d.png": "project/cf3d3051b3f0ed99e1efe622422e895d.png",
|
|
"98fea587e7af82b7c813f2564108db50.png": "project/98fea587e7af82b7c813f2564108db50.png",
|
|
"f2fbd596a82ed58838c03339fedc236c.png": "project/f2fbd596a82ed58838c03339fedc236c.png",
|
|
"88fae570813702f21fb5ae140e1ee33f.png": "project/88fae570813702f21fb5ae140e1ee33f.png",
|
|
"07b650f19c1a87d368eeae0a2afc8f2a.png": "project/07b650f19c1a87d368eeae0a2afc8f2a.png",
|
|
"735bfb483c5bc7ed95b30e376eaecfce.png": "project/735bfb483c5bc7ed95b30e376eaecfce.png",
|
|
"1ffa8c7bdf3c99b965056a2cb80473dc.png": "project/1ffa8c7bdf3c99b965056a2cb80473dc.png",
|
|
"f7371f1fdb72fb7c0c578582933fc372.png": "project/f7371f1fdb72fb7c0c578582933fc372.png",
|
|
"b84b8ef78c9132a7ff69b3915ee47ea8.png": "project/b84b8ef78c9132a7ff69b3915ee47ea8.png",
|
|
"7930cc80c6b64c5f17de0850082e2dcb.png": "project/7930cc80c6b64c5f17de0850082e2dcb.png",
|
|
"f8b0db676c05ef6a8d68679c60fb76bf.png": "project/f8b0db676c05ef6a8d68679c60fb76bf.png",
|
|
"6ab988150e5a85d15861f3612bf7b61c.png": "project/6ab988150e5a85d15861f3612bf7b61c.png",
|
|
"7198400810d69180a7e1c03bbd50009f.png": "project/7198400810d69180a7e1c03bbd50009f.png",
|
|
"ccb7b4ad3b21fd63a851168116bbe7e3.png": "project/ccb7b4ad3b21fd63a851168116bbe7e3.png",
|
|
"179461b07c6e8d0826cdbf691e19f033.png": "project/179461b07c6e8d0826cdbf691e19f033.png",
|
|
"6e9567c57fd5348dbca656b87507539a.png": "project/6e9567c57fd5348dbca656b87507539a.png",
|
|
"da46c2a9354316b402aa18164a1170aa.png": "project/da46c2a9354316b402aa18164a1170aa.png",
|
|
"5c7972da0600e45ae655d7ce16f3284b.png": "project/5c7972da0600e45ae655d7ce16f3284b.png",
|
|
"285034008ee5a98d1ce0e56ca6331699.png": "project/285034008ee5a98d1ce0e56ca6331699.png",
|
|
"44d1964151f51e0a82bfc8542642d027.png": "project/44d1964151f51e0a82bfc8542642d027.png",
|
|
"572f33195813f4ad615c6f2411577ee3.png": "project/572f33195813f4ad615c6f2411577ee3.png",
|
|
"452614e3ff1ec7fa7d71f19f083238f6.png": "project/452614e3ff1ec7fa7d71f19f083238f6.png",
|
|
"a6a4c386bf3c58297b6d65770efa5501.png": "project/a6a4c386bf3c58297b6d65770efa5501.png",
|
|
"b2ca2fc08806d036813984b189fb5bab.png": "project/b2ca2fc08806d036813984b189fb5bab.png",
|
|
"e4330ef04c05acfce62d64e2c79e7628.png": "project/e4330ef04c05acfce62d64e2c79e7628.png",
|
|
"0b37f6340e74b65b73b21b1f26f7b04c.png": "project/0b37f6340e74b65b73b21b1f26f7b04c.png",
|
|
"d01b829d096064c3c4d0e8d8f3c6d0bf.png": "project/d01b829d096064c3c4d0e8d8f3c6d0bf.png",
|
|
"7b5d6cee3442429aaee24ceb97fdf079.png": "project/7b5d6cee3442429aaee24ceb97fdf079.png",
|
|
"56c2adbfc996d0fa530bf50258e0b329.png": "project/56c2adbfc996d0fa530bf50258e0b329.png",
|
|
"6ee01188fbf58304ad16da20af4b9e8b.png": "project/6ee01188fbf58304ad16da20af4b9e8b.png",
|
|
"bfe7e7c9605231f0a9d9ae653346b7f9.png": "project/bfe7e7c9605231f0a9d9ae653346b7f9.png",
|
|
"70a312aef7d87611f3d52f486a1ec20d.wav": "project/70a312aef7d87611f3d52f486a1ec20d.wav",
|
|
"294a1cfd95053819e9f3471851960f4e.png": "project/294a1cfd95053819e9f3471851960f4e.png",
|
|
"aca2e4ceb5203222437ef9525eaa7af5.png": "project/aca2e4ceb5203222437ef9525eaa7af5.png",
|
|
"c33e05b55ff26ee77f5047e5bc01d6ff.png": "project/c33e05b55ff26ee77f5047e5bc01d6ff.png",
|
|
"bcbd5588c874878538ca4dae88c68acd.png": "project/bcbd5588c874878538ca4dae88c68acd.png",
|
|
"fa704fd6df8e3dc5b3a8616cc74f8ed4.png": "project/fa704fd6df8e3dc5b3a8616cc74f8ed4.png",
|
|
"ae14465c3ddefe841d14f437d8dc18b8.png": "project/ae14465c3ddefe841d14f437d8dc18b8.png",
|
|
"7a0075a791e8170b34ea62be7f321e79.png": "project/7a0075a791e8170b34ea62be7f321e79.png",
|
|
"174b79d71273648f00b1471dfe550ce0.png": "project/174b79d71273648f00b1471dfe550ce0.png",
|
|
"98896cd084787d5c6f9a562b8f4ea991.png": "project/98896cd084787d5c6f9a562b8f4ea991.png",
|
|
"140d1bf8ae9adf41318cf5e3b4bb8c5c.png": "project/140d1bf8ae9adf41318cf5e3b4bb8c5c.png",
|
|
"c475aa02e1cbcedd49e3b2e4e499cb83.png": "project/c475aa02e1cbcedd49e3b2e4e499cb83.png",
|
|
"602bab173dfd8a2d0090983744175599.png": "project/602bab173dfd8a2d0090983744175599.png",
|
|
"626cc9f348466a93e730a1d0610b61d2.png": "project/626cc9f348466a93e730a1d0610b61d2.png",
|
|
"03c1d38b5bb933f522fbb882fa93edfb.png": "project/03c1d38b5bb933f522fbb882fa93edfb.png",
|
|
"56c659b13605b944d18dfa99f620a501.png": "project/56c659b13605b944d18dfa99f620a501.png",
|
|
"a71bfee4465ef38856fa1a37716679fd.png": "project/a71bfee4465ef38856fa1a37716679fd.png",
|
|
"7925210deb366684193b3d91d9fd48e4.png": "project/7925210deb366684193b3d91d9fd48e4.png",
|
|
"b26e594c19990621c463ef22baa189ab.png": "project/b26e594c19990621c463ef22baa189ab.png",
|
|
"635fdb8b75c2c1aab086815101d04407.png": "project/635fdb8b75c2c1aab086815101d04407.png",
|
|
"cec49e9987fac9e12d5e9ba5b32cb7d2.png": "project/cec49e9987fac9e12d5e9ba5b32cb7d2.png",
|
|
"da3b6157495892731cc3c6cb43ef7c07.png": "project/da3b6157495892731cc3c6cb43ef7c07.png",
|
|
"f7de4d25140a43929d6b1f4edf434836.png": "project/f7de4d25140a43929d6b1f4edf434836.png",
|
|
"7bd01c413a2c03d8e91a932b42574814.png": "project/7bd01c413a2c03d8e91a932b42574814.png",
|
|
"32901b7b294304f9ee29e936c9e3281f.png": "project/32901b7b294304f9ee29e936c9e3281f.png",
|
|
"38e2aa83a071139d8ac31bdbecced01f.svg": "project/38e2aa83a071139d8ac31bdbecced01f.svg",
|
|
"5a9c4d6325b9b6ba163961a80508e6d4.png": "project/5a9c4d6325b9b6ba163961a80508e6d4.png",
|
|
"b7fd054fd5afc965686ccd3e63f6a880.png": "project/b7fd054fd5afc965686ccd3e63f6a880.png",
|
|
"f5f71625e9a387c62b874670ed625013.png": "project/f5f71625e9a387c62b874670ed625013.png",
|
|
"9375a99597f229d7eefe4a077940900b.png": "project/9375a99597f229d7eefe4a077940900b.png",
|
|
"bf02425861a3f5ea2e9a6d59d22bb802.png": "project/bf02425861a3f5ea2e9a6d59d22bb802.png",
|
|
"d8cdeede5d0b718809c0f3e6d40dcdea.png": "project/d8cdeede5d0b718809c0f3e6d40dcdea.png",
|
|
"72929ea605ffcc4a2e7489495faed758.png": "project/72929ea605ffcc4a2e7489495faed758.png",
|
|
"0cd8d22f968c7ce1e7f8d7718d7c42cc.png": "project/0cd8d22f968c7ce1e7f8d7718d7c42cc.png",
|
|
"8e477c81f9a2c8e8d88f0a582f6d514a.png": "project/8e477c81f9a2c8e8d88f0a582f6d514a.png",
|
|
"f1a203a35bb9830828e3a9d5ac7aa868.png": "project/f1a203a35bb9830828e3a9d5ac7aa868.png",
|
|
"6cb80217d52cbaa8770bcab00697f250.png": "project/6cb80217d52cbaa8770bcab00697f250.png",
|
|
"898224858074015a301a74dea63a1585.png": "project/898224858074015a301a74dea63a1585.png",
|
|
"64c5c6dd810ae6c1057a013b96e55c5a.png": "project/64c5c6dd810ae6c1057a013b96e55c5a.png",
|
|
"ca8c634cfda7f9d79b441526f96958d4.png": "project/ca8c634cfda7f9d79b441526f96958d4.png",
|
|
"bd0db038868a05b29d02e748099f9455.png": "project/bd0db038868a05b29d02e748099f9455.png",
|
|
"271a1c223d5f170425f8e60c03d43e4d.png": "project/271a1c223d5f170425f8e60c03d43e4d.png",
|
|
"de28779c337573589913df4dc1b51943.png": "project/de28779c337573589913df4dc1b51943.png",
|
|
"396ae8a3579fd4fa13b11cb0fb7695eb.png": "project/396ae8a3579fd4fa13b11cb0fb7695eb.png",
|
|
"fe23593fe80048d76df43ca0758a5ab8.png": "project/fe23593fe80048d76df43ca0758a5ab8.png",
|
|
"9a2909ba9c2eca50de5a1a9a98eeade4.png": "project/9a2909ba9c2eca50de5a1a9a98eeade4.png",
|
|
"d6ea3dbae3be0031bfc555b8d6aebc7e.png": "project/d6ea3dbae3be0031bfc555b8d6aebc7e.png",
|
|
"6b200768382435b2d2d10d29ff15787e.png": "project/6b200768382435b2d2d10d29ff15787e.png",
|
|
"a808963f731d5f11612933d1c656be96.png": "project/a808963f731d5f11612933d1c656be96.png",
|
|
"1a33eea127b5a6e5331c9bc3863d6f61.png": "project/1a33eea127b5a6e5331c9bc3863d6f61.png",
|
|
"f86b1ef74408053b1ea83a342aefe11d.png": "project/f86b1ef74408053b1ea83a342aefe11d.png",
|
|
"38e0a1249cd62e5a4ec95462edc93b55.png": "project/38e0a1249cd62e5a4ec95462edc93b55.png",
|
|
"6e29a88083131c9b9895f125dc195cca.png": "project/6e29a88083131c9b9895f125dc195cca.png",
|
|
"498737314e5e215a60a0438ea4cb3be3.png": "project/498737314e5e215a60a0438ea4cb3be3.png",
|
|
"6188f07926b3f7119bd815dd05b41c35.png": "project/6188f07926b3f7119bd815dd05b41c35.png",
|
|
"f81c5cfab301972e97e602cf86b92476.png": "project/f81c5cfab301972e97e602cf86b92476.png",
|
|
"b39092599a047c16f09213ccd464030e.png": "project/b39092599a047c16f09213ccd464030e.png",
|
|
"87a8de1b461dcbef1b036c3c9aad5254.png": "project/87a8de1b461dcbef1b036c3c9aad5254.png",
|
|
"86b358c5b435ebbca818160a1d56443d.png": "project/86b358c5b435ebbca818160a1d56443d.png",
|
|
"29357029b4e98bc219e2bd61fcb7efae.png": "project/29357029b4e98bc219e2bd61fcb7efae.png",
|
|
"01be2c60195b7fce0cefeaf6afb81f5e.png": "project/01be2c60195b7fce0cefeaf6afb81f5e.png",
|
|
"79c4b5e7290f9305c2185d136ca91878.png": "project/79c4b5e7290f9305c2185d136ca91878.png",
|
|
"55317bbaeec74634d9010bbbaad566b9.png": "project/55317bbaeec74634d9010bbbaad566b9.png",
|
|
"0ad860b6ab5e302053d3608a1c3be3de.png": "project/0ad860b6ab5e302053d3608a1c3be3de.png",
|
|
"a3c457a1d859921537344ae76b4a6972.png": "project/a3c457a1d859921537344ae76b4a6972.png",
|
|
"636dcb4c3bb317b7e0bf0f91b4018c08.png": "project/636dcb4c3bb317b7e0bf0f91b4018c08.png",
|
|
"313ff0d6a65e54415cad30e06c26be8c.png": "project/313ff0d6a65e54415cad30e06c26be8c.png",
|
|
"468bd1203ec343967b9dc0fb6e2a385c.wav": "project/468bd1203ec343967b9dc0fb6e2a385c.wav",
|
|
"5d95e4446adfb7db3d737fc4bfe8142e.wav": "project/5d95e4446adfb7db3d737fc4bfe8142e.wav",
|
|
"b00aaf6c42748f2a44eb57b1c75780bf.png": "project/b00aaf6c42748f2a44eb57b1c75780bf.png",
|
|
"e05978801b606aa31fec06d84378d6a9.png": "project/e05978801b606aa31fec06d84378d6a9.png",
|
|
"70931547cca335ccf0e3bb8546b25bc3.png": "project/70931547cca335ccf0e3bb8546b25bc3.png",
|
|
"6fa607e4f86bbfd3160b7d172304c73e.png": "project/6fa607e4f86bbfd3160b7d172304c73e.png",
|
|
"17fd958a0944cbf21197f0746bc7ed25.png": "project/17fd958a0944cbf21197f0746bc7ed25.png",
|
|
"5a5620e722f3af80ef7408664186f0b7.png": "project/5a5620e722f3af80ef7408664186f0b7.png",
|
|
"e8182ee56298bd2a3d671c56d6de3a35.png": "project/e8182ee56298bd2a3d671c56d6de3a35.png",
|
|
"eb72c6a2c2daecb48b41a0b5205664d4.png": "project/eb72c6a2c2daecb48b41a0b5205664d4.png",
|
|
"36257bbf68734575106395fe1fadb8c5.png": "project/36257bbf68734575106395fe1fadb8c5.png",
|
|
"e3171493609ce266e0fbbffc01ae6ab9.png": "project/e3171493609ce266e0fbbffc01ae6ab9.png",
|
|
"c76b868d8046af7202a12ee77eb79112.png": "project/c76b868d8046af7202a12ee77eb79112.png",
|
|
"bc89711bab8aaa6ab1a415e882c441f4.png": "project/bc89711bab8aaa6ab1a415e882c441f4.png",
|
|
"1a971a4896c825c6ed3cb957b88bf0a3.png": "project/1a971a4896c825c6ed3cb957b88bf0a3.png",
|
|
"f33e5798132a1130b793c705db3be411.png": "project/f33e5798132a1130b793c705db3be411.png",
|
|
"55b508b259428654a2d6627e03bfa775.png": "project/55b508b259428654a2d6627e03bfa775.png",
|
|
"14318b1324272a4233ed0d9dbde254f7.png": "project/14318b1324272a4233ed0d9dbde254f7.png",
|
|
"276afa8bee80826a86447b1e70a55dd6.png": "project/276afa8bee80826a86447b1e70a55dd6.png",
|
|
"de83f34564bbd461773c22802aaf61a5.png": "project/de83f34564bbd461773c22802aaf61a5.png",
|
|
"f9c4057bd3750dc436686e3bcaccde4a.png": "project/f9c4057bd3750dc436686e3bcaccde4a.png",
|
|
"b6d517de1f38d1dfd8b561ace634f698.png": "project/b6d517de1f38d1dfd8b561ace634f698.png",
|
|
"445429f31c3e86ba3cb40acf30e9cf36.png": "project/445429f31c3e86ba3cb40acf30e9cf36.png",
|
|
"e4bfc7b6179e6d32f7402d2a55e0a7c6.png": "project/e4bfc7b6179e6d32f7402d2a55e0a7c6.png",
|
|
"941744f53a68f18ed95c42efb404af1e.png": "project/941744f53a68f18ed95c42efb404af1e.png",
|
|
"e141c6d60a8f976e91cf6ce94c1b0ae8.png": "project/e141c6d60a8f976e91cf6ce94c1b0ae8.png",
|
|
"9c8234101c05a1ed04467c206289ad03.png": "project/9c8234101c05a1ed04467c206289ad03.png",
|
|
"82ad356d43e29e5e3a265e27d3db8c2a.png": "project/82ad356d43e29e5e3a265e27d3db8c2a.png",
|
|
"ed28087b537b0bc4b03cc9fac72473ff.png": "project/ed28087b537b0bc4b03cc9fac72473ff.png",
|
|
"fe06b88a03869789eef8d3f41550002a.png": "project/fe06b88a03869789eef8d3f41550002a.png",
|
|
"a50237710a09f3307f62fe6cad107a79.png": "project/a50237710a09f3307f62fe6cad107a79.png",
|
|
"f0248b9cd49324423d68427842f4ae1c.png": "project/f0248b9cd49324423d68427842f4ae1c.png",
|
|
"897dc7e12c3e15f7218e1b04447b0961.png": "project/897dc7e12c3e15f7218e1b04447b0961.png",
|
|
"99790be6db8143496db2b41ea353f34d.png": "project/99790be6db8143496db2b41ea353f34d.png",
|
|
"8d9aeaaa5a4a25ae07d2db6d18499a8a.png": "project/8d9aeaaa5a4a25ae07d2db6d18499a8a.png",
|
|
"3605951b1e5e2165234c9c5091f31440.png": "project/3605951b1e5e2165234c9c5091f31440.png",
|
|
"4d5f187218e77e276aeb06f9c7b9a53b.png": "project/4d5f187218e77e276aeb06f9c7b9a53b.png",
|
|
"7312c71accf74b0286c2279d38892713.png": "project/7312c71accf74b0286c2279d38892713.png",
|
|
"b62a1fcb29779774109d5dd6cd5462ea.png": "project/b62a1fcb29779774109d5dd6cd5462ea.png",
|
|
"3493d9b235ba226d1f7aed9b750841f6.png": "project/3493d9b235ba226d1f7aed9b750841f6.png",
|
|
"055efbe468f2d2fd6e4ea0f801972214.png": "project/055efbe468f2d2fd6e4ea0f801972214.png",
|
|
"3460212e04a14ca4dfa2e66e717bc3e1.png": "project/3460212e04a14ca4dfa2e66e717bc3e1.png",
|
|
"92d675b6a6016620c3847c91baf68b26.png": "project/92d675b6a6016620c3847c91baf68b26.png",
|
|
"df7e8dd3a72e9f4ad04adbf978d04f55.png": "project/df7e8dd3a72e9f4ad04adbf978d04f55.png",
|
|
"87ef701f2771320f6ed44ef2cee6656c.png": "project/87ef701f2771320f6ed44ef2cee6656c.png",
|
|
"76c22b31118c58e43a9bac05e0ffd3fa.png": "project/76c22b31118c58e43a9bac05e0ffd3fa.png",
|
|
"aaeefb9b18d4820c764b33c0bbb78015.png": "project/aaeefb9b18d4820c764b33c0bbb78015.png",
|
|
"61a8857eaf412618c0b12c9e5f0540e4.png": "project/61a8857eaf412618c0b12c9e5f0540e4.png",
|
|
"596aadf866ab07ace96a933f5c3e0322.png": "project/596aadf866ab07ace96a933f5c3e0322.png",
|
|
"62666c40770e7b17ba033c5abed8dd41.png": "project/62666c40770e7b17ba033c5abed8dd41.png",
|
|
"cc03e0f5c3f0208a4fe21d26c0ee9dc6.png": "project/cc03e0f5c3f0208a4fe21d26c0ee9dc6.png",
|
|
"b2fb563d70c4c74cca654fc585facd23.png": "project/b2fb563d70c4c74cca654fc585facd23.png",
|
|
"bb33b839e4e268f7bda351bada7167fd.png": "project/bb33b839e4e268f7bda351bada7167fd.png",
|
|
"e506dd8a9e94785b33c9062e73c7a1de.png": "project/e506dd8a9e94785b33c9062e73c7a1de.png",
|
|
"7cc338d0fb79ad14b1ae2637ee95b9a5.png": "project/7cc338d0fb79ad14b1ae2637ee95b9a5.png",
|
|
"912c5a64a99cbe6a191a02cda374a12f.png": "project/912c5a64a99cbe6a191a02cda374a12f.png",
|
|
"89168c1744cefbf2475ad7a890622b45.png": "project/89168c1744cefbf2475ad7a890622b45.png",
|
|
"676e1941baa89ea6f02017690e0cd53d.png": "project/676e1941baa89ea6f02017690e0cd53d.png",
|
|
"517e70ca64d9e944213ee9864ced890a.png": "project/517e70ca64d9e944213ee9864ced890a.png",
|
|
"455c150db97723ef275b21c6988d4de9.wav": "project/455c150db97723ef275b21c6988d4de9.wav",
|
|
"e2580699d37fc931691629ed337a5111.png": "project/e2580699d37fc931691629ed337a5111.png",
|
|
"31583e98bfe5ca94f14bfa8f4fa5861b.png": "project/31583e98bfe5ca94f14bfa8f4fa5861b.png",
|
|
"0f5945121d92a1d73af384ced7f6149f.png": "project/0f5945121d92a1d73af384ced7f6149f.png",
|
|
"ff1591d48138e0327e85f8b7f7b6428a.png": "project/ff1591d48138e0327e85f8b7f7b6428a.png",
|
|
"33d966e1ca3afdb74151d90db66683c9.png": "project/33d966e1ca3afdb74151d90db66683c9.png",
|
|
"9b487a84c5be79b62a8e9121b9f5cdfc.png": "project/9b487a84c5be79b62a8e9121b9f5cdfc.png",
|
|
"5c6f9f72e7fa8760151440e5f39d4c0b.png": "project/5c6f9f72e7fa8760151440e5f39d4c0b.png",
|
|
"05bc2f303fb668030366a70b130798a1.png": "project/05bc2f303fb668030366a70b130798a1.png",
|
|
"12ef37da4651c211ca4638343e95f4f0.png": "project/12ef37da4651c211ca4638343e95f4f0.png",
|
|
"675903d4fea4b4f3bd90bf0896fddc8b.png": "project/675903d4fea4b4f3bd90bf0896fddc8b.png",
|
|
"d47f2ad5110ac290d860f4a4879069d6.png": "project/d47f2ad5110ac290d860f4a4879069d6.png",
|
|
"c79c092e562e3b9da534f5a672cbdf24.png": "project/c79c092e562e3b9da534f5a672cbdf24.png",
|
|
"34e773be8962c82dd7b9a27249bcff2b.wav": "project/34e773be8962c82dd7b9a27249bcff2b.wav",
|
|
"014bb34d73095e8f46375f83e7ee5ab2.png": "project/014bb34d73095e8f46375f83e7ee5ab2.png",
|
|
"feaa3b23adde5405ee68705ce84046e0.png": "project/feaa3b23adde5405ee68705ce84046e0.png",
|
|
"e7de8af15a5dc47ddb3745d7b4dc2b45.png": "project/e7de8af15a5dc47ddb3745d7b4dc2b45.png",
|
|
"52fdabf76b8bf749d82d52001c14dd20.png": "project/52fdabf76b8bf749d82d52001c14dd20.png",
|
|
"bc19d13521b62a3b56590b5e2b5692b6.png": "project/bc19d13521b62a3b56590b5e2b5692b6.png",
|
|
"3902b502f1dc828d141fb4fffec9ba70.png": "project/3902b502f1dc828d141fb4fffec9ba70.png",
|
|
"4d90f84ae9696056acf0f8aa0b89d6e8.png": "project/4d90f84ae9696056acf0f8aa0b89d6e8.png",
|
|
"9195fa5274a7d882e8d7163029a24f5d.png": "project/9195fa5274a7d882e8d7163029a24f5d.png",
|
|
"d36f6603ec293d2c2198d3ea05109fe0.png": "project/d36f6603ec293d2c2198d3ea05109fe0.png",
|
|
"d972d0a14f87e06f6f8ea4bce79d24e2.wav": "project/d972d0a14f87e06f6f8ea4bce79d24e2.wav",
|
|
"ae6b61d881022033014ce38f47e3e052.wav": "project/ae6b61d881022033014ce38f47e3e052.wav",
|
|
"921ab3b926190a40ea5f33e18928791a.wav": "project/921ab3b926190a40ea5f33e18928791a.wav",
|
|
"0bcc092ab4b63f718c5b7f8aa31f8652.wav": "project/0bcc092ab4b63f718c5b7f8aa31f8652.wav",
|
|
"2f3ab34326adb7b3338029e731fb13a4.wav": "project/2f3ab34326adb7b3338029e731fb13a4.wav",
|
|
"88fa64d9563f3d1d10988ff34aa7a08a.wav": "project/88fa64d9563f3d1d10988ff34aa7a08a.wav",
|
|
"fe455c2679b1c2b6b2a3203b154580d7.wav": "project/fe455c2679b1c2b6b2a3203b154580d7.wav",
|
|
"07e89313340e23d1e36114b4ea8971c9.wav": "project/07e89313340e23d1e36114b4ea8971c9.wav",
|
|
"a7b00810bd30a2e0b6b7b509c2e7a30e.wav": "project/a7b00810bd30a2e0b6b7b509c2e7a30e.wav",
|
|
"0847bb26214a10071af3fae1c4548103.wav": "project/0847bb26214a10071af3fae1c4548103.wav",
|
|
"52d007fd7981762f1ba60fc43fdb280d.wav": "project/52d007fd7981762f1ba60fc43fdb280d.wav",
|
|
"b9106333dbdc4946a79a6ebc11a6629b.wav": "project/b9106333dbdc4946a79a6ebc11a6629b.wav",
|
|
"ad2ae2da09e002276cdacb2bcfcd5d2a.wav": "project/ad2ae2da09e002276cdacb2bcfcd5d2a.wav",
|
|
"85f8c854229a75708c9c6c11efe865f8.wav": "project/85f8c854229a75708c9c6c11efe865f8.wav",
|
|
"3f6d7e71132cbdbbabd0b0ea83ec85d1.wav": "project/3f6d7e71132cbdbbabd0b0ea83ec85d1.wav",
|
|
"f9ee76c446f2bc0fc07200ceeeefed6c.wav": "project/f9ee76c446f2bc0fc07200ceeeefed6c.wav",
|
|
"da920c562d277c0a064007c74f244e7a.wav": "project/da920c562d277c0a064007c74f244e7a.wav",
|
|
"9d99c59b188a991596cb577e3fa39164.wav": "project/9d99c59b188a991596cb577e3fa39164.wav",
|
|
"28c24e74d80557dc9be76d081a17abc7.wav": "project/28c24e74d80557dc9be76d081a17abc7.wav",
|
|
"6d53da1720da85fb6c41957e8c0d8f9e.wav": "project/6d53da1720da85fb6c41957e8c0d8f9e.wav",
|
|
"fee5e4d3a3829efcb4baac0146b76fe0.wav": "project/fee5e4d3a3829efcb4baac0146b76fe0.wav",
|
|
"9c5591562b8c12a81626d65e0848c591.wav": "project/9c5591562b8c12a81626d65e0848c591.wav",
|
|
"6fa9f974ff4e12723d9dd35611d445cc.wav": "project/6fa9f974ff4e12723d9dd35611d445cc.wav",
|
|
"81f174b4501921fb087351770080eda1.png": "project/81f174b4501921fb087351770080eda1.png",
|
|
"99bcbff7a9cad238fe77d04f4793ae50.svg": "project/99bcbff7a9cad238fe77d04f4793ae50.svg",
|
|
"8c7314a259d848230e391e198bff94c8.svg": "project/8c7314a259d848230e391e198bff94c8.svg",
|
|
"1436bb85964d78c7b464cc879537d23f.svg": "project/1436bb85964d78c7b464cc879537d23f.svg",
|
|
"306e084b37fe860cf90e231f7997ff54.svg": "project/306e084b37fe860cf90e231f7997ff54.svg",
|
|
"83a9787d4cb6f3b7632b4ddfebf74367.wav": "project/83a9787d4cb6f3b7632b4ddfebf74367.wav",
|
|
"02743aa4e9301f05585beed54c4bab36.png": "project/02743aa4e9301f05585beed54c4bab36.png",
|
|
"85d7d9a9f590ddfcae39fbf2f9c040b1.png": "project/85d7d9a9f590ddfcae39fbf2f9c040b1.png",
|
|
"f8a3b870e948a4440e9a2de07154d3d5.png": "project/f8a3b870e948a4440e9a2de07154d3d5.png",
|
|
"3339a2953a3bf62bb80e54ff575dbced.svg": "project/3339a2953a3bf62bb80e54ff575dbced.svg",
|
|
"d3fd1b83dffc51bd4a59be487e0afb05.png": "project/d3fd1b83dffc51bd4a59be487e0afb05.png",
|
|
"d70ace8dfe7e175980498bd90c2958e2.png": "project/d70ace8dfe7e175980498bd90c2958e2.png",
|
|
"d286236a3082261d138ddbece007946a.png": "project/d286236a3082261d138ddbece007946a.png",
|
|
"75aed335c4d81080a92e853369e2dd0d.png": "project/75aed335c4d81080a92e853369e2dd0d.png",
|
|
"83c36d806dc92327b9e7049a565c6bff.wav": "project/83c36d806dc92327b9e7049a565c6bff.wav",
|
|
"b61b1077b0ea1931abee9dbbfa7903ff.png": "project/b61b1077b0ea1931abee9dbbfa7903ff.png",
|
|
"0aaf0ee1d6808bc11094b3fcde3286e8.png": "project/0aaf0ee1d6808bc11094b3fcde3286e8.png",
|
|
"bbefe594ad3f76a1d412e48ffd09872d.svg": "project/bbefe594ad3f76a1d412e48ffd09872d.svg",
|
|
"fcedd699c5a87813481e70ff316cbd89.svg": "project/fcedd699c5a87813481e70ff316cbd89.svg",
|
|
"11185a7e565b0766e0c1565dfe985b66.svg": "project/11185a7e565b0766e0c1565dfe985b66.svg",
|
|
"6d99d299cf04f79464e90da59e77ae87.svg": "project/6d99d299cf04f79464e90da59e77ae87.svg",
|
|
"4cd5ad9abdf14918b93971290a9a884c.svg": "project/4cd5ad9abdf14918b93971290a9a884c.svg",
|
|
"a094ac2c196b9446e5ad90a0aff7e921.svg": "project/a094ac2c196b9446e5ad90a0aff7e921.svg",
|
|
"e76ab45c26ec667d84a5887141cb92de.svg": "project/e76ab45c26ec667d84a5887141cb92de.svg",
|
|
"64d0c42a0807fbb1a373e63d5dcf1776.svg": "project/64d0c42a0807fbb1a373e63d5dcf1776.svg",
|
|
"6afd193b54de74cb0d941b521f390713.svg": "project/6afd193b54de74cb0d941b521f390713.svg",
|
|
"fc11bff81ff30f8eeaa7c1d4d12d5e01.svg": "project/fc11bff81ff30f8eeaa7c1d4d12d5e01.svg",
|
|
"ade9039ab0334f42706d4949de8c930c.svg": "project/ade9039ab0334f42706d4949de8c930c.svg",
|
|
"05f0ebee31c4cf42590c83ab92839625.wav": "project/05f0ebee31c4cf42590c83ab92839625.wav",
|
|
"de640aeef89852cc84c41d0846025f41.png": "project/de640aeef89852cc84c41d0846025f41.png",
|
|
"12f5c0c6e75bbc39f9197dc7bdbd5ab9.png": "project/12f5c0c6e75bbc39f9197dc7bdbd5ab9.png",
|
|
"25d922bad4d8b36ca74217b489f69f63.png": "project/25d922bad4d8b36ca74217b489f69f63.png",
|
|
"77a8575a10914ad815410baee8b7080b.png": "project/77a8575a10914ad815410baee8b7080b.png",
|
|
"01b691bacf28adc8492b169e640f5319.png": "project/01b691bacf28adc8492b169e640f5319.png",
|
|
"31aad96ba69831e368fc75e3c3d9a520.png": "project/31aad96ba69831e368fc75e3c3d9a520.png",
|
|
"866d7d62c89756c6e7ee482508468c32.png": "project/866d7d62c89756c6e7ee482508468c32.png",
|
|
"6f2921e883d25d61966cc6903d3ee463.png": "project/6f2921e883d25d61966cc6903d3ee463.png",
|
|
"5b6592ba3853a592a0baa9de8981f35d.png": "project/5b6592ba3853a592a0baa9de8981f35d.png",
|
|
"553acf95724e70ed7a1d73c7b3a7487d.png": "project/553acf95724e70ed7a1d73c7b3a7487d.png",
|
|
"6c415fed12667e09e849da0f5dff340d.png": "project/6c415fed12667e09e849da0f5dff340d.png",
|
|
"7e71876ffdb2c0dcb9776c6a473dbcc6.png": "project/7e71876ffdb2c0dcb9776c6a473dbcc6.png",
|
|
"75ad9bb66bdd8c89dc798aeff041afb0.png": "project/75ad9bb66bdd8c89dc798aeff041afb0.png",
|
|
"d9bb7c107a139fd9ae655a4ab34d620c.png": "project/d9bb7c107a139fd9ae655a4ab34d620c.png",
|
|
"0aae1289c8de380d5d5dbd280917f701.png": "project/0aae1289c8de380d5d5dbd280917f701.png",
|
|
"ca5b6684e375476da28f6d1157665512.png": "project/ca5b6684e375476da28f6d1157665512.png",
|
|
"a00157015f0498de7256a4e88e088c0d.png": "project/a00157015f0498de7256a4e88e088c0d.png",
|
|
"59f421c845b94858de12eba082a0e5a5.png": "project/59f421c845b94858de12eba082a0e5a5.png",
|
|
"1970ba7eb235df1c2cbdb6e44a62f161.png": "project/1970ba7eb235df1c2cbdb6e44a62f161.png",
|
|
"2c77be89735f34ca0b5f18ecedb3189e.png": "project/2c77be89735f34ca0b5f18ecedb3189e.png",
|
|
"a54658d972f81f58c4f15940d68ad256.wav": "project/a54658d972f81f58c4f15940d68ad256.wav",
|
|
"51a431572696b9153d75f634a23c4a1b.png": "project/51a431572696b9153d75f634a23c4a1b.png",
|
|
"a18be64f8a7ca0b9ab67589a7c81d20b.png": "project/a18be64f8a7ca0b9ab67589a7c81d20b.png",
|
|
"110e3a6815ca358c22f9554983669094.png": "project/110e3a6815ca358c22f9554983669094.png",
|
|
"7b395e1b2734dc760f5a404d983f1741.png": "project/7b395e1b2734dc760f5a404d983f1741.png",
|
|
"4895db13ed285eaeb860c6ddc7fe3d43.png": "project/4895db13ed285eaeb860c6ddc7fe3d43.png",
|
|
"f1ff57c62a3c8a400038540329faa030.png": "project/f1ff57c62a3c8a400038540329faa030.png",
|
|
"3a4fe2bbca6d1e57d2677b2a5ec6fca0.png": "project/3a4fe2bbca6d1e57d2677b2a5ec6fca0.png",
|
|
"ff7f17f538f10d44ce0ed4988a9f61a4.png": "project/ff7f17f538f10d44ce0ed4988a9f61a4.png",
|
|
"32718d555e81aff74650990f0c317d6d.png": "project/32718d555e81aff74650990f0c317d6d.png",
|
|
"7af6c8a6f147939932117268f87589be.png": "project/7af6c8a6f147939932117268f87589be.png",
|
|
"3a43a6f7ff9739684cad89b5e88d8e63.png": "project/3a43a6f7ff9739684cad89b5e88d8e63.png",
|
|
"37c24f47fa3b3a6b830c7778d543c201.png": "project/37c24f47fa3b3a6b830c7778d543c201.png",
|
|
"3e191a149a849cfe0b53dfb8f107d0d6.png": "project/3e191a149a849cfe0b53dfb8f107d0d6.png",
|
|
"03ef6572c221c01464f26cf126a46807.png": "project/03ef6572c221c01464f26cf126a46807.png",
|
|
"56b887a23f34615363c6f7f6946a6d0a.png": "project/56b887a23f34615363c6f7f6946a6d0a.png",
|
|
"c6c0809e7e79739f710235acca3c242c.png": "project/c6c0809e7e79739f710235acca3c242c.png",
|
|
"337460351999c821c9dd8a2e95010f82.png": "project/337460351999c821c9dd8a2e95010f82.png",
|
|
"6102632b3ad0a3e0299e4539f7a71e3b.png": "project/6102632b3ad0a3e0299e4539f7a71e3b.png",
|
|
"0b107a85d3955de97b9e57d2b24f366c.png": "project/0b107a85d3955de97b9e57d2b24f366c.png",
|
|
"588198e8e9d153d6c62c043b7852c62a.png": "project/588198e8e9d153d6c62c043b7852c62a.png",
|
|
"b3f0fc9129a3a1049b47c7cc4f20d226.png": "project/b3f0fc9129a3a1049b47c7cc4f20d226.png",
|
|
"3916610f30c0efe2e599372d5ac8afd9.png": "project/3916610f30c0efe2e599372d5ac8afd9.png",
|
|
"014de4607dab783ca702caed3ebdb860.png": "project/014de4607dab783ca702caed3ebdb860.png",
|
|
"1a33337918b933125b1d56d200372020.png": "project/1a33337918b933125b1d56d200372020.png",
|
|
"de9a577e774928208f66d3f9ac9c6eb4.png": "project/de9a577e774928208f66d3f9ac9c6eb4.png",
|
|
"0874453cdbd084993f1b39da531cf89f.png": "project/0874453cdbd084993f1b39da531cf89f.png",
|
|
"465704012bce2c2611e68ac1f02d4388.png": "project/465704012bce2c2611e68ac1f02d4388.png",
|
|
"d791c0797f61e1788da96bd404efd9ce.png": "project/d791c0797f61e1788da96bd404efd9ce.png",
|
|
"8c43e1f4128ad772ab8912f18a8389b6.png": "project/8c43e1f4128ad772ab8912f18a8389b6.png",
|
|
"113186954dd97326af833bc94506c9c9.png": "project/113186954dd97326af833bc94506c9c9.png",
|
|
"039e146a8cc3b1308ea51c01e2aa90b8.png": "project/039e146a8cc3b1308ea51c01e2aa90b8.png",
|
|
"62172a470d076070f8e7186ccf834aa9.png": "project/62172a470d076070f8e7186ccf834aa9.png",
|
|
"d455dcd5e72f7539a2356eb2facc8919.png": "project/d455dcd5e72f7539a2356eb2facc8919.png",
|
|
"ef98baaf95533cbb942e154ce9fb58db.png": "project/ef98baaf95533cbb942e154ce9fb58db.png",
|
|
"4cda2a25e08ba9708e67258edcaec398.png": "project/4cda2a25e08ba9708e67258edcaec398.png",
|
|
"149231c2ffcc4644bec388b82a698c77.png": "project/149231c2ffcc4644bec388b82a698c77.png",
|
|
"a46690f7eb5e73ffb38d18bd5fb3b365.png": "project/a46690f7eb5e73ffb38d18bd5fb3b365.png",
|
|
"07a322c83c40e628ab0dd2aadfe68cca.png": "project/07a322c83c40e628ab0dd2aadfe68cca.png",
|
|
"3df4b410b5a74a657cf70827541aeb7f.png": "project/3df4b410b5a74a657cf70827541aeb7f.png",
|
|
"3fc3aa308ac65e6c2a1c59331a80417a.png": "project/3fc3aa308ac65e6c2a1c59331a80417a.png",
|
|
"09fd88e16a024ae04755bab6bcbcee07.png": "project/09fd88e16a024ae04755bab6bcbcee07.png",
|
|
"775183100f2f8755d72e4e4e6e96a8c8.png": "project/775183100f2f8755d72e4e4e6e96a8c8.png",
|
|
"87a7785675b657e8803d038f290f8660.png": "project/87a7785675b657e8803d038f290f8660.png",
|
|
"4dd6fd7f19cbce305d8182bcd7f1fa2b.png": "project/4dd6fd7f19cbce305d8182bcd7f1fa2b.png",
|
|
"33bcadd8143f72119d1a64293c4a9725.png": "project/33bcadd8143f72119d1a64293c4a9725.png",
|
|
"23deac16f8bb236b26b0b127a7b1ab5c.wav": "project/23deac16f8bb236b26b0b127a7b1ab5c.wav",
|
|
"871403ab130977894e8a957a063b9d6d.svg": "project/871403ab130977894e8a957a063b9d6d.svg",
|
|
"70b37e07d137e92c22e67bed50de248c.wav": "project/70b37e07d137e92c22e67bed50de248c.wav",
|
|
"413442ea856c85cffc66c16b91071fd0.wav": "project/413442ea856c85cffc66c16b91071fd0.wav",
|
|
"8d7ca9005ca66f53b3db41d1fe9c3f0b.svg": "project/8d7ca9005ca66f53b3db41d1fe9c3f0b.svg"
|
|
}
|
|
}
|
|
init(initOptions)
|
|
</script>
|
|
</body>
|
|
</html>
|