Loading files
e5b871ed5This file is pinned to the selected release. Download the original to open it in your design tool.
// ═══════════════════════════════════════════════════════════
// PatternFlow - Browser self-update page (PROGMEM HTML bundle)
//
// Served at http://patternflow.local/update by core_web_update.h.
// Drop a firmware .bin (the app image the web build service emits, or an
// arduino-cli export) and the device flashes itself via Update.h.
//
// The page polls /update/status: stock builds are always ready
// (PF_WEBUPDATE_ALWAYS_ARMED 1); builds that opted into physical arming
// show a LOCKED tag plus the how-to-arm note until the UPDATE screen is
// opened on the device. Upload progress is the XHR's own send progress —
// the device flashes as it receives, so the bar tracks the actual write
// within a buffer's worth.
//
// Styled to the patternflow.work design system (web/docs/
// patternflow-styleguide.html): cream + ink + LED accent, thin rules,
// mono kickers/tags, dashed placeholder-style drop zone.
//
// License: MIT
// ═══════════════════════════════════════════════════════════
// The page body below is generated from console/update.html — edit that,
// then run: python firmware/toolchain/console_pages.py build
#pragma once
#include <pgmspace.h>
const char WEB_UPDATE_HTML[] PROGMEM = R"HTML(<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<script src="/pf-console.js"></script>
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Patternflow — Firmware update</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
<style>
:root{--cream:#0C0B09;--cream2:#1B1914;--ink:#EDE7DB;--muted:#8A8272;--faint:#5A5546;--rule:#242118;--rule-soft:#1B1914;--led:#FF5C2E;--panel:#131110;
--sans:'Inter',ui-sans-serif,system-ui,sans-serif;
--mono:'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,monospace}
*{box-sizing:border-box;margin:0;padding:0}
body{min-height:100vh;background:var(--cream);color:var(--ink);
font:15px/1.55 var(--sans);-webkit-font-smoothing:antialiased;text-rendering:geometricPrecision;
padding:24px 24px 64px}
.panel{width:100%;max-width:560px;background:var(--panel);margin:16px auto 0;padding:48px 48px 44px}
header{display:flex;align-items:center;gap:8px;padding-bottom:12px;border-bottom:1px solid var(--rule);margin-bottom:24px}
.dot{width:7px;height:7px;background:var(--led);border-radius:1px}
h1{font-size:15px;font-weight:600;letter-spacing:.01em;margin:0;flex:1}
.back{font-family:var(--mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;
color:var(--muted);text-decoration:none}
.back:hover{color:var(--ink);text-decoration:underline;text-underline-offset:3px}
#pill{font-family:var(--mono);font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;
padding:5px 10px 4px;border:1px solid var(--faint);color:var(--muted)}
#pill.ok{border-color:var(--ink);color:var(--ink)}
#pill.warn{border-color:var(--led);color:var(--led)}
#pill.bad{border-color:var(--faint);color:var(--faint)}
.sub{max-width:36ch;color:var(--muted);font-size:15px;line-height:1.5;margin-bottom:32px}
.pf-kicker{display:block;font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;
color:var(--muted);margin-bottom:2px}
.step{display:grid;grid-template-columns:40px 1fr;gap:20px;padding:14px 0;border-bottom:1px solid var(--rule);align-items:baseline}
.step:first-of-type{border-top:1px solid var(--rule)}
.step .n{font-family:var(--mono);font-size:10px;letter-spacing:.12em;color:var(--muted)}
.step p{font-size:14px;line-height:1.5;color:var(--muted)}
.step b{font-weight:500;color:var(--ink)}
#armHint{display:none;margin:20px 0 0;border:1px dashed var(--rule);background:var(--cream);
padding:14px 16px;font-family:var(--mono);font-size:11.5px;line-height:1.6;color:var(--muted)}
#armHint b{font-weight:500;color:var(--ink)}
#handoff{display:none;margin:0 0 24px;padding:16px 18px;border:1px solid var(--rule);background:var(--cream)}
#handoffFrom{font-family:var(--mono);font-size:11px;color:var(--muted);word-break:break-all;margin:6px 0 14px;line-height:1.6}
#handoffGo{font-family:var(--mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;
background:var(--ink);color:var(--cream);border:1px solid var(--ink);padding:12px 16px;cursor:pointer;
transition:background .15s ease,color .15s ease}
#handoffGo:hover{background:transparent;color:var(--ink)}
#handoffGo:disabled{opacity:.5;cursor:default}
#drop{margin-top:28px;min-height:176px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;
border:1px dashed var(--rule);background:var(--cream);cursor:pointer;text-align:center;padding:24px;
transition:border-color .16s ease,background .16s ease}
#drop .big{font-family:var(--mono);font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink)}
#drop .small{font-family:var(--mono);font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--faint)}
#drop.hover{border-color:var(--ink);background:var(--cream2)}
#drop.disabled{opacity:.45}
#bar{height:6px;background:var(--rule-soft);margin:20px 0 10px;display:none}
#fill{height:100%;width:0%;background:var(--led);transition:width .1s linear}
#msg{font-size:13px;min-height:20px;color:var(--muted);line-height:1.55;margin-top:12px}
#msg.ok{color:var(--ink)} #msg.bad{color:var(--led)}
@media(max-width:560px){body{padding:12px 12px 56px}.panel{padding:36px 24px 32px}}
</style></head><body>
<main class="panel">
<header><span class="dot"></span><h1>Update</h1><span id="pill">…</span></header>
<p class="sub">Drop a firmware .bin — the device flashes itself over the LAN and reboots on the new build.</p>
<!-- Shown when the build page hands a firmware URL over via ?src= —
the phone never touches a file picker. -->
<div id="handoff">
<span class="pf-kicker">Linked build</span>
<div id="handoffFrom"></div>
<button id="handoffGo" type="button">Fetch & flash</button>
</div>
<span class="pf-kicker">Two steps</span>
<div class="step"><span class="n">01</span><p>Build & download a <b>.bin</b> — patternflow.work → Build, or an <b>arduino-cli</b> export.</p></div>
<div class="step"><span class="n">02</span><p>Drop it below. Keep the device powered; it verifies, flashes, and reboots itself.</p></div>
<div id="armHint">This build requires arming first. On the device: hold <b>K2</b> → NETWORK, then turn <b>K4</b> → <b>UPDATE</b>.</div>
<div id="drop">
<span class="big">Drop .bin here</span>
<span class="small">or click to choose a file</span>
</div>
<!-- accept="*/*", not ".bin": Android maps unknown extensions to a
media-only picker (camera/gallery), and on some devices NO accept
does the same — an explicit any-type accept is what reliably brings
up the full chooser with the file manager. The JS validates
extension and size instead. -->
<input id="file" type="file" accept="*/*" style="display:none">
<div id="bar"><div id="fill"></div></div>
<div id="msg"></div>
</main>
<script>
var drop=document.getElementById('drop'),fileIn=document.getElementById('file'),
pill=document.getElementById('pill'),bar=document.getElementById('bar'),
fill=document.getElementById('fill'),msg=document.getElementById('msg'),
armHint=document.getElementById('armHint');
var armed=false,busy=false,uploading=false;
function setPill(t,c){pill.textContent=t;pill.className=c||''}
function setMsg(t,c){msg.textContent=t;msg.className=c||''}
// The device serves one client at a time. Skipping polls while uploading is
// not enough on its own: a poll issued a moment BEFORE the upload starts is
// still in flight, and that one request is enough to wedge a 1.2 MB POST into
// "Connection lost during upload". So the poll is abortable and the upload
// cancels it before opening its own connection.
var pollAbort=null;
function poll(){
if(uploading)return;
pollAbort=new AbortController();
fetch('/update/status',{cache:'no-store',signal:pollAbort.signal})
.then(function(r){return r.json()}).then(function(s){
armed=s.armed;busy=s.busy;
if(busy)setPill('BUSY','warn');
else if(armed)setPill('READY','ok');
else setPill('LOCKED','bad');
armHint.style.display=(!armed&&!busy)?'block':'none';
drop.classList.toggle('disabled',!armed||busy);
}).catch(function(e){if(!e||e.name!=='AbortError')setPill('OFFLINE','bad')});
}
setInterval(poll,2000);poll();
drop.addEventListener('click',function(){if(!uploading)fileIn.click()});
fileIn.addEventListener('change',function(){if(fileIn.files.length)upload(fileIn.files[0])});
['dragover','dragenter'].forEach(function(ev){drop.addEventListener(ev,function(e){e.preventDefault();drop.classList.add('hover')})});
['dragleave','drop'].forEach(function(ev){drop.addEventListener(ev,function(e){e.preventDefault();drop.classList.remove('hover')})});
drop.addEventListener('drop',function(e){if(!uploading&&e.dataTransfer.files.length)upload(e.dataTransfer.files[0])});
function upload(f){
if(uploading)return;
if(!/\.bin$/i.test(f.name)){setMsg('That is not a .bin file.','bad');return}
if(f.size>3*1024*1024){setMsg('Too big for the 3 MB app partition. This looks like a merged full-flash image; upload the app .bin instead.','bad');return}
if(f.size<200*1024){setMsg('Suspiciously small for Patternflow firmware. Wrong file?','bad');return}
if(!armed){setMsg('Device is locked - see the arming note above.','bad');return}
uploading=true;
if(pollAbort)pollAbort.abort();
setPill('FLASHING','warn');
bar.style.display='block';fill.style.width='0%';
setMsg('Uploading '+f.name+' ('+(f.size/1048576).toFixed(2)+' MB). Keep this tab open and the device powered.');
var xhr=new XMLHttpRequest();
xhr.open('POST','/update?size='+f.size);
xhr.timeout=300000;
xhr.upload.onprogress=function(e){if(e.lengthComputable)fill.style.width=Math.round(e.loaded*100/e.total)+'%'};
xhr.onload=function(){
uploading=false;
if(xhr.status===200){
fill.style.width='100%';
setMsg('Flashed. Rebooting - the device should be back in about 10 seconds.','ok');
waitForReboot();
}else{
var t='upload failed ('+xhr.status+')';
try{t=JSON.parse(xhr.responseText).error||t}catch(e){}
setMsg('Failed: '+t,'bad');
bar.style.display='none';
}
};
xhr.onerror=function(){
uploading=false;
setMsg('Connection lost during upload. The device still runs its old firmware unless it just rebooted - if in doubt, try again.','bad');
bar.style.display='none';
};
xhr.ontimeout=function(){
uploading=false;
setMsg('Upload timed out. Try again closer to the access point, or flash over USB.','bad');
bar.style.display='none';
};
var fd=new FormData();fd.append('firmware',f,f.name);
xhr.send(fd);
}
function waitForReboot(){
var tries=0;
var t=setInterval(function(){
if(++tries>30){clearInterval(t);return}
fetch('/update/status',{cache:'no-store'}).then(function(r){
if(r.ok){clearInterval(t);setPill('BACK','ok');setMsg('Device is back online on the new firmware.','ok')}
}).catch(function(){});
},2000);
}
// ?src= handoff from the build page ("Send over Wi-Fi"): this page fetches
// the .bin itself and feeds it into the same upload path — no file picker,
// which some Android systems cannot show for arbitrary files. The firmware
// route serves public CORS for exactly this fetch.
var srcUrl=null;
try{
var s=new URLSearchParams(location.search).get('src');
if(s&&/^https?:\/\//i.test(s)){
srcUrl=s;
document.getElementById('handoffFrom').textContent=s.replace(/^https?:\/\//i,'');
document.getElementById('handoff').style.display='block';
}
}catch(e){}
document.getElementById('handoffGo').addEventListener('click',function(){
if(!srcUrl||uploading)return;
if(!armed){setMsg('Device is locked - see the arming note above.','bad');return}
var btn=this;
btn.disabled=true;
setPill('FETCHING','warn');
setMsg('Downloading the build from '+srcUrl.split('/')[2]+' ...');
fetch(srcUrl).then(function(r){
if(!r.ok)throw new Error('HTTP '+r.status);
return r.blob();
}).then(function(b){
btn.disabled=false;
upload(new File([b],'firmware.bin',{type:'application/octet-stream'}));
}).catch(function(e){
btn.disabled=false;
poll();
setMsg('Could not download the build ('+e.message+'). Download the .bin on this device and drop it above instead.','bad');
});
});
</script>
</body></html>
)HTML";
// <gz:WEB_UPDATE_HTML> GENERATED by firmware/toolchain/console_pages.py build — do not edit.
// gzip -9 of WEB_UPDATE_HTML (11590 bytes → 4418 bytes), served with Content-Encoding: gzip.
const uint8_t WEB_UPDATE_HTML_GZ[] PROGMEM = {
0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x02,0xff,0xb5,0x5a,0xeb,0x72,0xdb,0xb8,
0x92,0xfe,0xef,0xa7,0x40,0x94,0x1d,0x53,0x9a,0x48,0xd4,0xc5,0x97,0xe4,0x50,0x96,
0x73,0xe2,0xd8,0x9e,0xc9,0xe4,0x5a,0xb1,0x53,0xb3,0x5b,0x33,0xb3,0x55,0x10,0x09,
0x4a,0x1c,0x93,0x04,0x0f,0x00,0x5a,0xf6,0x51,0x5c,0xb5,0x0f,0xb1,0x4f,0x78,0x9e,
0xe4,0x74,0x37,0x40,0x8a,0x92,0xe5,0x8c,0x67,0x6a,0x37,0x55,0x91,0x25,0x02,0x68,
0x34,0xfa,0xf2,0xf5,0xd7,0x90,0x8e,0x9e,0x44,0x32,0x34,0xb7,0x85,0x60,0x73,0x93,
0xa5,0xc7,0x3b,0x47,0xf8,0x87,0xa5,0x3c,0x9f,0x4d,0x5a,0x22,0x6f,0xe1,0x03,0xc1,
0x23,0xf8,0x93,0x09,0xc3,0x59,0x38,0xe7,0x4a,0x0b,0x33,0x69,0x95,0x26,0xee,0xbd,
0xc0,0x51,0x1d,0xaa,0xa4,0x30,0x4c,0xab,0x70,0xd2,0xea,0x17,0x71,0x2f,0x94,0xb9,
0x96,0xa9,0xf0,0x7f,0xd7,0xad,0xe3,0xa3,0xbe,0x1d,0xad,0x56,0xe7,0x3c,0x13,0x93,
0xd6,0x75,0x22,0x16,0x85,0x54,0xa6,0xc5,0x60,0xae,0x11,0x39,0x48,0x5b,0x24,0x91,
0x99,0x4f,0x22,0x71,0x9d,0x84,0xa2,0x47,0x1f,0xba,0x49,0x9e,0x98,0x84,0xa7,0x3d,
0x1d,0xf2,0x54,0x4c,0x86,0xb8,0x95,0x49,0x4c,0x2a,0x8e,0x3f,0x71,0x63,0x84,0xca,
0xe3,0x54,0x2e,0xd8,0xbf,0xfe,0xe7,0x7f,0xd9,0x79,0xa2,0xb2,0x05,0x57,0x82,0x95,
0x45,0xc4,0x8d,0x38,0xea,0xdb,0x69,0x3b,0x47,0x69,0x92,0x5f,0x31,0x25,0xd2,0x49,
0xab,0x50,0x02,0xb6,0xca,0x45,0x08,0x7b,0xce,0x95,0x88,0x27,0xad,0xb9,0x31,0x85,
0x0e,0xfa,0xfd,0x18,0x34,0xd0,0xfe,0x4c,0xca,0x59,0x2a,0x78,0x91,0x68,0x3f,0x94,
0x59,0xeb,0xcf,0xad,0xd5,0x86,0x9b,0x24,0xa4,0x85,0x2c,0x54,0x52,0x6b,0xa9,0x92,
0x59,0x92,0x57,0x42,0xfe,0x78,0xbf,0x7e,0xa8,0xf5,0xe8,0x65,0xcc,0xb3,0x24,0xbd,
0x9d,0xbc,0x01,0x8b,0xa8,0x60,0x31,0x9b,0x9b,0xbf,0xef,0x0f,0x06,0xe3,0x83,0xc1,
0x60,0xd7,0x8d,0xfc,0x24,0xcc,0x89,0xe2,0x49,0xae,0x9f,0xbd,0x97,0xb9,0x5c,0x9f,
0x12,0x25,0xba,0x48,0xf9,0xed,0x44,0x2f,0x78,0xd1,0xb2,0x7a,0x6b,0x73,0x9b,0x0a,
0x3d,0x17,0xc2,0x90,0x97,0xf0,0xd3,0xf1,0x0e,0x63,0x81,0x92,0xd2,0x2c,0x7b,0xbd,
0x50,0x09,0x9e,0x05,0x4f,0x07,0xaf,0x07,0x27,0x83,0xbf,0x8d,0xdd,0xe7,0x51,0xf0,
0x74,0x78,0x32,0xfc,0xdb,0x70,0x1f,0x1e,0x80,0xee,0xc1,0xd3,0xb3,0xd3,0xb3,0xe7,
0xa7,0x27,0xf0,0x29,0x2b,0x8d,0x88,0x82,0xa7,0x2f,0x5e,0xbd,0x18,0x3d,0x1f,0xc1,
0xe7,0x18,0x14,0x31,0xc1,0xd3,0x83,0x57,0x07,0x07,0xfb,0x87,0xf0,0x59,0x95,0xa9,
0x08,0x9e,0x8e,0xf6,0x47,0xc3,0xe1,0x0b,0xf7,0xb1,0xa7,0x65,0x6c,0x1a,0x02,0x53,
0x14,0x70,0x7e,0x7e,0xf0,0x7a,0x74,0x06,0x9f,0x0a,0x9e,0x8b,0x14,0x46,0xf7,0x86,
0xc3,0xe1,0x60,0x0c,0x8a,0xd9,0x7f,0xbd,0x9e,0xe6,0xb9,0x0e,0x3c,0x32,0x83,0xd7,
0x2d,0x13,0xfa,0xdc,0xd3,0x42,0x25,0x71,0x57,0xdf,0x6a,0x23,0xb2,0x5e,0x99,0x74,
0x57,0x0f,0x9b,0x4b,0x33,0xb4,0x8b,0x57,0xdb,0x89,0xa1,0x9d,0x48,0x06,0x0e,0xe8,
0x82,0x87,0xa2,0x7b,0x71,0x8e,0x0f,0x7b,0x9f,0xc5,0xac,0x4c,0xb9,0xea,0xbe,0x17,
0x79,0x2a,0xbb,0xf5,0xf0,0x1d,0x08,0xfb,0x7e,0x39,0x95,0x37,0x3d,0x9d,0xfc,0x33,
0xc9,0x67,0xc1,0x54,0xaa,0x48,0xa8,0x1e,0x3c,0x19,0x67,0x5c,0x81,0x57,0x83,0xc1,
0xb8,0xe0,0x51,0x84,0x63,0x03,0x9c,0x3d,0x95,0xd1,0xed,0x32,0x4b,0xf2,0xde,0x5c,
0x24,0xe0,0x90,0x60,0x38,0x18,0x5c,0xcf,0xc7,0x53,0x1e,0x5e,0xcd,0x94,0x2c,0xf3,
0x28,0xb8,0xe6,0xaa,0xed,0xac,0xdb,0x19,0x87,0x32,0x95,0xca,0x3d,0x02,0xfb,0x76,
0x6a,0xe5,0x31,0x2c,0x82,0xe1,0x41,0x71,0xd3,0x1f,0xfa,0x07,0x07,0xcc,0xce,0xc0,
0x43,0x76,0xc6,0xbd,0x85,0x98,0x5e,0x25,0xa6,0x87,0x53,0x7a,0x3a,0x03,0xef,0xcd,
0x71,0x77,0x9e,0x63,0x76,0x24,0x5c,0x8b,0x68,0x6c,0xc4,0x8d,0xe9,0x29,0x91,0x83,
0xaa,0x38,0x34,0x13,0x12,0xb2,0x4d,0x25,0xe1,0x27,0x08,0xdd,0x44,0x27,0x32,0xaf,
0xf7,0xa9,0x74,0x1f,0xed,0x17,0x37,0x8c,0x5e,0x0e,0xe1,0x05,0x0f,0xe2,0x93,0x43,
0x96,0x94,0x7b,0x78,0x8a,0xef,0xe0,0xc0,0x37,0x36,0x15,0x83,0x83,0xc3,0x41,0x71,
0x73,0xff,0x50,0xb4,0xa2,0x53,0x19,0x66,0x78,0x08,0xd2,0x78,0x69,0x24,0x5b,0x99,
0x68,0xff,0x05,0x3c,0xb3,0x2f,0x6e,0x1b,0xc4,0x12,0xa1,0x96,0x2e,0x5e,0x83,0x38,
0x15,0x37,0x63,0x38,0xc6,0x2c,0xef,0x25,0xe0,0x5a,0x1d,0x84,0x02,0x1d,0x3f,0x9e,
0xf1,0x22,0x80,0x65,0x95,0x20,0x70,0x80,0x31,0x32,0x0b,0x86,0x23,0xd4,0xa3,0xf2,
0x89,0x7d,0x04,0xc2,0x01,0x6f,0x92,0xc8,0x19,0x0d,0x23,0xaf,0xd2,0xa9,0x9a,0x33,
0xaa,0xce,0x18,0x41,0xe8,0xdb,0x23,0x3d,0x07,0x41,0xce,0x65,0xcf,0xb7,0x9d,0x0d,
0x82,0xb5,0x53,0xed,0xa4,0x78,0x94,0x94,0x1a,0x77,0xa2,0x13,0x0c,0x97,0xd6,0x15,
0xc9,0x3f,0x05,0xb9,0x6c,0x4c,0x1f,0x17,0x56,0xd8,0x21,0x24,0x64,0x2a,0x10,0xa0,
0x7a,0x18,0x51,0x68,0x04,0x7f,0x30,0x14,0xd9,0x2a,0x7c,0xf0,0xc8,0xc1,0x90,0xd4,
0xc1,0x5d,0xad,0x30,0x9b,0xe2,0x6e,0x6f,0x0c,0xc7,0xce,0xb8,0xb1,0x09,0xec,0x7c,
0x5f,0xe8,0x0b,0x10,0x4a,0x8e,0x37,0x0a,0xe2,0x24,0x96,0x2a,0x0b,0xca,0xa2,0x10,
0x2a,0x84,0x90,0xa8,0xfd,0xdd,0x0c,0x38,0x4a,0xe1,0x8e,0x5d,0x13,0x01,0xa6,0x29,
0x80,0x2d,0x99,0x07,0xb9,0xcc,0x45,0xad,0x4d,0x30,0x97,0xd7,0xe0,0x9e,0x7b,0x71,
0xba,0xb9,0xa8,0xc4,0x58,0x03,0x78,0x13,0x76,0xa4,0xfe,0xd8,0x93,0x71,0x0c,0xe5,
0x21,0xd8,0xb3,0xb6,0x7a,0x5a,0x24,0x69,0xfa,0x98,0x13,0x0e,0xfc,0x83,0x2d,0x67,
0x1c,0x8e,0x1e,0x73,0xc6,0x2a,0xd8,0x40,0x02,0x1b,0x0e,0x30,0xd6,0xea,0x20,0xb9,
0x17,0x1d,0x04,0x5b,0xeb,0x79,0x68,0xcd,0x52,0x6b,0xeb,0xcb,0xab,0xa5,0xf3,0xfb,
0x3d,0x2b,0x6c,0x3e,0x58,0x2d,0x82,0xfa,0x93,0x6f,0x5b,0x46,0x61,0xb4,0xf9,0x60,
0xb5,0x6c,0xca,0xa3,0x6d,0xab,0xb6,0x68,0x69,0x1f,0x91,0x9f,0x74,0x39,0x5d,0xae,
0x72,0x73,0xef,0x30,0x9c,0x6f,0x39,0xcf,0x78,0x23,0x46,0xc9,0x39,0x15,0x46,0xf9,
0x07,0x1b,0x09,0xb2,0x37,0xaa,0x40,0x20,0xee,0x5d,0x25,0xe1,0x55,0x23,0x43,0xa7,
0xa9,0x0c,0xaf,0xc6,0x7f,0x31,0x48,0x87,0xfb,0x7f,0x31,0x48,0x37,0xf2,0xd7,0x69,
0x07,0xe8,0x5f,0xd4,0x8a,0xcd,0x54,0x12,0x8d,0xf1,0xa5,0x07,0xc0,0x01,0x4f,0x8c,
0x40,0x1b,0x96,0x19,0x54,0x8f,0x7d,0x8c,0x82,0x61,0x6c,0x61,0x64,0x34,0x58,0xe1,
0x48,0x30,0x44,0xc8,0x1b,0x3c,0x0a,0x42,0x9a,0xa8,0x34,0x05,0x75,0xd1,0x82,0xb5,
0x16,0x41,0x9c,0x28,0x6d,0x20,0xda,0x7b,0xc8,0x9c,0x2a,0x1f,0x1a,0x59,0x6c,0x17,
0x56,0xaf,0x63,0x7e,0xfe,0xa8,0x74,0x78,0x28,0x19,0xb6,0x07,0xae,0x15,0x5d,0x34,
0x71,0x69,0x7f,0x8b,0xcf,0xbf,0xb5,0x78,0xba,0x6c,0xa2,0x18,0x50,0x8a,0xed,0xc1,
0xce,0x55,0xf6,0x23,0x04,0x62,0xed,0x04,0x04,0x8f,0x0a,0xda,0xd0,0xd0,0x6c,0x50,
0x5b,0x97,0x2c,0x11,0x71,0x60,0x20,0xeb,0x76,0x7d,0xa8,0x36,0x6e,0xa6,0x33,0xb9,
0x0a,0x8b,0xca,0xa3,0x82,0xcf,0xbf,0x1f,0xe4,0x87,0x0f,0xa5,0xb9,0x3b,0xc4,0x63,
0xcf,0x3c,0xe7,0x79,0x04,0xb0,0xb6,0xf5,0xcc,0x70,0x5c,0x2a,0xa3,0xab,0x00,0xc3,
0x2a,0x38,0x7c,0xf1,0x30,0x02,0x7d,0xd3,0x08,0xcd,0xfd,0xce,0x95,0xcc,0x1e,0x5b,
0x1c,0xb6,0x64,0xd0,0x02,0xb6,0xef,0x4d,0x41,0xea,0x55,0x40,0xaf,0x3d,0x9e,0xa6,
0x95,0xd6,0x87,0xe4,0xa8,0x2d,0x31,0x72,0xd8,0x54,0xe0,0x07,0xf9,0x57,0x6b,0xd3,
0xe3,0x70,0xfb,0x9e,0x0d,0xee,0x61,0xac,0x8b,0x8c,0x07,0x2c,0x49,0xd3,0x6b,0xbb,
0x8f,0xaa,0x68,0x09,0x4b,0x05,0x0c,0x3c,0x28,0x64,0x42,0x4c,0xa2,0xda,0x8d,0x34,
0x49,0xa8,0x78,0xad,0x36,0x66,0xfe,0xf0,0x40,0x33,0x01,0x5a,0x75,0x69,0xdf,0xd5,
0xe7,0x75,0x43,0xb8,0xb2,0xd8,0xd0,0x98,0xc4,0x15,0xd0,0x75,0xe4,0xe6,0x9b,0x51,
0x03,0x6b,0x21,0x6e,0xf8,0x14,0x70,0x7f,0x29,0xd1,0x3e,0xe6,0x36,0xc0,0x54,0xb4,
0x4a,0x46,0x22,0xe6,0x65,0x6a,0x68,0x41,0xa4,0x64,0xb1,0x74,0xb8,0x87,0x40,0x32,
0xc2,0x20,0x6a,0x32,0xcb,0xe7,0x78,0xba,0x35,0xe2,0x84,0x2f,0xbd,0x28,0x01,0x96,
0x47,0xe7,0xb2,0xf0,0xb7,0x8d,0x4e,0xfd,0x5e,0x6a,0x93,0xc4,0xb7,0x3d,0xd7,0x6f,
0x6d,0xb2,0xac,0xda,0x23,0x7f,0x29,0x71,0x37,0x0c,0x4e,0x7e,0x27,0x1d,0xaa,0x6d,
0x9a,0xa4,0x73,0xab,0x3f,0x1a,0x15,0x10,0x3c,0x70,0xe8,0x3c,0xb2,0xe6,0xa6,0xc3,
0x86,0x5b,0xd0,0x52,0x40,0x57,0x92,0xd9,0x63,0xe2,0x73,0xf4,0xa7,0xcb,0xd2,0x56,
0x77,0xda,0x3d,0x75,0xc6,0x1f,0xc9,0x67,0xfe,0x34,0x63,0xdb,0x5e,0xec,0x69,0x5f,
0xdf,0x45,0xdf,0x03,0xac,0x64,0xbb,0x5f,0x46,0x8d,0xf5,0xf7,0x23,0x70,0xff,0x80,
0x46,0xa7,0x5c,0x2d,0x5d,0x78,0x1d,0x6e,0x63,0xc1,0x75,0x1b,0xd7,0xd9,0x00,0x79,
0x3a,0x60,0x13,0x10,0x49,0x5c,0x8c,0x6c,0x6f,0xd5,0x08,0x7d,0x37,0xb6,0x14,0x05,
0xde,0x6c,0xe7,0xd7,0x8d,0x18,0xa0,0x99,0xe0,0x67,0xcd,0x10,0x91,0xb8,0x22,0x79,
0x99,0x9e,0x35,0x6b,0xda,0xde,0x7a,0x42,0x50,0x61,0xdf,0x82,0x7c,0x1b,0x65,0xaf,
0xe6,0x3a,0x54,0x9d,0x1d,0x95,0x40,0xd1,0xc8,0xf4,0xee,0xf9,0xda,0x8e,0x20,0x2f,
0xdb,0xc6,0xda,0xfe,0x9e,0x89,0x28,0xe1,0xed,0x8d,0xce,0xa8,0xb3,0xa4,0x2e,0x70,
0x1d,0x8a,0xf0,0xe5,0x00,0x8c,0x7a,0xe7,0x1a,0xab,0x6a,0x74,0xef,0xb0,0xea,0xbc,
0x88,0x74,0xdd,0xed,0x1c,0xf5,0x6d,0x6f,0x7e,0xd4,0xa7,0x7b,0x96,0x23,0x94,0x75,
0xbc,0xb3,0xb3,0x73,0x94,0x41,0x14,0xb0,0x30,0xe5,0x5a,0x4f,0x5a,0x24,0xa3,0x85,
0xfd,0xfb,0x91,0xed,0xa0,0x8e,0x8f,0x20,0xae,0xea,0x61,0xe8,0x6b,0xe8,0xb2,0x05,
0x1e,0x1d,0x1f,0xcd,0x87,0xc7,0x5f,0xdc,0x4d,0x08,0xbc,0xb5,0xf3,0x92,0x08,0x64,
0x80,0x77,0x5a,0xc7,0xbb,0x73,0x91,0xa6,0x49,0x31,0xae,0x66,0xf7,0x9d,0xbc,0x1d,
0x94,0x5d,0x54,0x02,0x81,0x63,0xb6,0x8e,0x4f,0x31,0xe6,0x39,0x8b,0xab,0xfb,0x15,
0x48,0xb9,0x9c,0xed,0x66,0x08,0x0d,0x63,0x66,0xe6,0x82,0xd9,0xfb,0x1a,0x16,0xa7,
0x08,0x16,0x9a,0x25,0x06,0x58,0x52,0xcc,0x30,0x58,0x69,0xf8,0xdd,0xab,0x0f,0x0c,
0x50,0x90,0x29,0x31,0x85,0xae,0x55,0x33,0x99,0xd3,0xe3,0x5c,0x2c,0xd8,0xb4,0x4c,
0xd2,0xc8,0x3f,0xea,0x17,0x76,0xdf,0x27,0xbd,0x1e,0xbb,0x98,0xcb,0x45,0xce,0x16,
0x73,0x61,0x67,0xd1,0x0c,0x20,0x03,0x33,0xc1,0x10,0x4a,0x75,0x53,0x91,0x2f,0x9f,
0xdf,0xd9,0x5d,0xae,0x13,0xce,0x5e,0xe2,0xcd,0x13,0x5e,0x04,0xd5,0xc8,0x02,0xab,
0x8b,0x39,0xc4,0x24,0xec,0x44,0xaa,0xc8,0x32,0x44,0xf5,0x50,0x40,0x0a,0x43,0xc4,
0x6f,0x7d,0xd6,0xeb,0x91,0x39,0xa3,0xe4,0x9a,0xac,0xe3,0xf0,0x9a,0x6c,0x0c,0x8f,
0x9b,0xd6,0xad,0x49,0x71,0xeb,0xf8,0x1d,0x04,0x09,0xc0,0x22,0x29,0xe7,0x2c,0x68,
0xe7,0x6f,0x88,0xc1,0xe2,0x8d,0x1e,0x81,0xc7,0x6e,0xc2,0xb4,0x04,0xae,0x99,0x37,
0xe7,0xfc,0x20,0x5b,0x0c,0xd9,0xe3,0xa4,0x65,0xc7,0x5a,0xc7,0xe7,0xc2,0x84,0x73,
0xb6,0xcb,0xb3,0x62,0x6c,0x8d,0x7a,0xd4,0xb7,0x43,0xa4,0xa9,0x15,0xb6,0xf3,0xb0,
0x72,0x97,0x0b,0xc9,0x90,0xcc,0xe9,0x95,0x66,0xa4,0x57,0xe5,0x53,0x18,0x6a,0xad,
0xc7,0x0d,0xec,0x39,0x18,0x56,0x91,0x50,0x1c,0x9f,0x90,0xcd,0xed,0xfe,0x11,0x78,
0x23,0x95,0x3c,0x02,0xb3,0x1d,0x4d,0x8f,0xd1,0xf5,0xa0,0xcc,0x71,0xed,0xfe,0x62,
0x75,0x09,0xe7,0x03,0xd5,0xb8,0x62,0xbb,0x8a,0x2b,0x35,0x66,0x24,0xa2,0xcb,0x00,
0xc8,0x61,0x17,0x58,0xc8,0x55,0x54,0x26,0xb9,0xec,0x85,0x69,0x42,0xeb,0xc5,0x0d,
0xde,0xfc,0x91,0xe7,0x6b,0xeb,0x3c,0x42,0xc9,0xd1,0x4a,0x49,0x8a,0xca,0x04,0xd8,
0x9b,0xc0,0xbd,0xd9,0x5b,0x01,0xec,0xb5,0x11,0x8c,0x85,0x5c,0x08,0x25,0xa2,0x31,
0x4e,0xb9,0xc6,0x0b,0xa2,0x44,0xe8,0x6e,0x15,0xa2,0xdd,0xb5,0x78,0xb4,0xf1,0xda,
0xd4,0xa5,0x19,0x10,0x8e,0x25,0x82,0x59,0xe7,0x89,0x76,0xe1,0xa8,0xc4,0x3f,0x4a,
0x28,0xb7,0x10,0x4b,0x0a,0x80,0x68,0xc6,0xa8,0x0b,0xf0,0xd9,0xc7,0xbc,0xa1,0x41,
0xc0,0xe6,0x12,0xa6,0xc2,0xd9,0xdf,0x8e,0xac,0xc9,0xac,0x65,0x3e,0x9c,0x5d,0xfe,
0xfc,0xf1,0xf3,0xdb,0x2e,0x4e,0x85,0xf9,0xa5,0x22,0xfb,0xbc,0xdd,0x6f,0xce,0x81,
0x07,0x5f,0x3e,0x9d,0xbe,0xba,0x3c,0xc3,0x87,0xfe,0x16,0xa5,0x10,0xce,0xb7,0x85,
0x28,0x14,0x43,0x97,0xaf,0x94,0xa4,0x73,0x30,0xc1,0x5a,0x78,0x36,0xe7,0x52,0x11,
0x6b,0x1d,0x83,0x8b,0xc0,0x29,0xe1,0x15,0xe4,0x07,0x0b,0xe7,0x52,0x6a,0xe1,0x32,
0xa4,0x11,0x3d,0xb5,0x87,0x30,0x41,0x79,0x18,0x8a,0xc2,0x4c,0x5a,0xdf,0xf7,0xbf,
0x6f,0x75,0x59,0x2e,0x0d,0x6b,0xe1,0x66,0xad,0x80,0xbd,0xca,0x41,0x2f,0xe0,0x65,
0x19,0x2f,0x34,0x2b,0xf3,0xab,0x1c,0x33,0x19,0x0a,0x9d,0xc8,0xf1,0xf2,0x49,0xe3,
0x0e,0xbc,0xca,0x4e,0x42,0xd0,0x9e,0xcc,0xd3,0x5b,0x97,0x89,0xac,0x1d,0xf2,0x4c,
0x28,0xde,0x9f,0x81,0x5a,0x42,0xdd,0x76,0xac,0x93,0x20,0x57,0xb4,0xcc,0x2a,0xa3,
0x6a,0xf6,0xe1,0xa3,0x53,0xa0,0x12,0x14,0x49,0x78,0x8a,0x66,0xd7,0xb0,0x9c,0x2e,
0x82,0x39,0x6e,0x5a,0xc0,0x99,0xc0,0xf5,0x3c,0xbf,0xa5,0xd6,0xcc,0x2d,0x62,0xe0,
0xc2,0xc5,0x9c,0x1b,0xbc,0x1a,0x4d,0xa0,0x16,0xde,0xb2,0x29,0x5e,0x95,0xe9,0x4a,
0x58,0x69,0x63,0x28,0x2e,0xd3,0xd4,0x19,0x43,0xb1,0x45,0x02,0x15,0x89,0x9e,0x22,
0x6c,0x64,0x3c,0x07,0x2c,0x02,0xdc,0xb8,0x84,0x27,0x3f,0x5d,0x00,0x33,0x02,0x26,
0x0a,0x20,0x5b,0x8b,0xa8,0xcf,0x4b,0xea,0x63,0xc5,0x62,0x49,0x0e,0xe1,0xcc,0xa3,
0x1a,0x6b,0x92,0xbc,0x28,0x0d,0xf9,0x11,0x45,0x56,0xd9,0x6f,0xdf,0x37,0xad,0xcb,
0xa8,0x22,0x80,0xb7,0x1b,0x05,0xb6,0xb5,0x86,0x56,0x50,0xb8,0x21,0x4b,0xaa,0x4f,
0x31,0x21,0xbb,0xf5,0xd6,0x7a,0x56,0xe1,0x28,0x14,0xb4,0x1a,0x8a,0x8e,0xfa,0x58,
0x55,0x20,0xa6,0x8e,0xaa,0x8b,0x79,0x28,0x70,0x0c,0xa3,0x6a,0x12,0xc9,0xb0,0xcc,
0x80,0xb0,0xf9,0x33,0x61,0xce,0x52,0x81,0x6f,0x4f,0x6e,0xdf,0x44,0x6d,0x0f,0x47,
0xbd,0x4e,0x17,0xd5,0x7c,0x93,0x3f,0x3c,0x0d,0xc7,0x61,0x1a,0x99,0x03,0x4b,0xcd,
0xc3,0x33,0x71,0x14,0x66,0xc2,0x19,0x1e,0x9e,0x03,0x83,0x95,0xb0,0xf8,0x9b,0xc2,
0x62,0x2b,0x0c,0x0e,0xf9,0xf0,0x1c,0x18,0xac,0x84,0xb9,0xac,0x7e,0x78,0xae,0x9b,
0xe0,0x41,0x43,0x8a,0xa6,0x81,0x8f,0x22,0x9a,0xc4,0x3c,0x45,0x42,0x5a,0xea,0x5b,
0xf7,0xb6,0x2c,0x10,0x1b,0x21,0x82,0xec,0xe7,0xf1,0xce,0x4e,0x5c,0xe6,0xc4,0xc2,
0x99,0x16,0xe6,0x13,0xe8,0xd4,0x36,0xdd,0xb0,0xb3,0xa4,0x5b,0x1e,0xe4,0x7c,0xaf,
0xdd,0x37,0x1d,0x66,0x4c,0x8f,0x28,0x15,0x3f,0xe0,0xb7,0x21,0xe1,0xd7,0xaf,0x9e,
0x77,0xb7,0xb6,0xfc,0xbd,0x9e,0xd9,0xd5,0x48,0x45,0xd6,0x17,0xe3,0x93,0x7b,0x6b,
0x77,0xfa,0x7d,0x8a,0x4a,0x87,0x80,0x10,0xbb,0xd7,0x02,0xab,0xad,0xc0,0x04,0x87,
0x75,0x0c,0xe2,0x9e,0x33,0x93,0x64,0xc2,0x67,0x17,0x57,0x49,0x51,0x20,0x74,0x15,
0x32,0x4d,0x31,0x27,0x30,0xb6,0xeb,0xd3,0x40,0x9a,0xa0,0x30,0xcc,0x6d,0x91,0xcb,
0x72,0x36,0xc7,0x34,0x4c,0xb0,0x74,0x2f,0xf2,0x00,0x64,0xe0,0x22,0x98,0xa3,0x4b,
0x81,0x75,0x21,0x93,0x68,0x36,0x76,0x72,0x76,0xfe,0xf1,0xf3,0x19,0x65,0x8a,0x15,
0x04,0xe1,0xcb,0x15,0xe2,0x2b,0x09,0x83,0xce,0x03,0x17,0xe5,0x80,0xc1,0x48,0xc9,
0x6c,0x76,0x1b,0xcc,0x45,0xd4,0x10,0x11,0x55,0x68,0xca,0x4f,0xb7,0x23,0x80,0xc5,
0x42,0x44,0x33,0x44,0xa3,0xa1,0x3f,0x62,0xef,0x4f,0xd8,0xa7,0x8f,0x17,0x97,0x20,
0xc0,0x48,0x14,0xd7,0x7a,0x6d,0xbf,0x8c,0x41,0x5b,0xa5,0x12,0x56,0x46,0x25,0x66,
0xb2,0xdb,0xba,0x05,0x27,0x94,0x96,0x01,0x58,0x55,0x19,0x07,0xda,0x6c,0x90,0xfd,
0xba,0x7d,0x2b,0x25,0x51,0x56,0xc8,0xf3,0x50,0xa4,0xda,0x56,0x13,0xe0,0xe3,0x82,
0xc9,0x42,0xe4,0x64,0x07,0x7b,0x66,0x16,0xd6,0x9b,0xf9,0x14,0x0e,0x28,0xf5,0x15,
0x4a,0x9c,0xe4,0x00,0x15,0xe3,0x95,0xdb,0x70,0xa0,0xdd,0x59,0x42,0x8c,0x25,0x71,
0xbb,0xb6,0x67,0x47,0x09,0x04,0x7a,0x6c,0x7a,0x1a,0x2b,0x81,0xff,0xd0,0x3b,0x74,
0xab,0x92,0x08,0x7a,0x6d,0xba,0xfe,0x88,0xb1,0xfc,0xb7,0xbd,0xbe,0xfd,0x1e,0xab,
0x8f,0xdf,0x2b,0x95,0xda,0xeb,0x2e,0x43,0x0e,0xfc,0x25,0xf0,0xa0,0x8a,0x6a,0x03,
0x4a,0x7a,0x5d,0x0d,0xcd,0x15,0x4f,0x83,0x5a,0xa4,0x6f,0x1f,0xdc,0x75,0xf0,0x3a,
0x07,0xcb,0x4b,0xbb,0xd2,0xab,0xad,0x3a,0x4b,0xab,0x03,0x53,0xfe,0xef,0x1a,0x1e,
0x74,0xee,0x3a,0x1b,0x53,0x34,0xa9,0xcd,0x5c,0xa8,0x6b,0x9f,0xfe,0x8e,0x29,0xd8,
0xb5,0x8f,0x7f,0x6c,0xcf,0x06,0xe7,0xc2,0x0f,0x9d,0x2a,0xbe,0xbd,0x93,0x2f,0x17,
0xff,0xe5,0x75,0x3d,0xbc,0xfa,0xf4,0xdc,0xf5,0x0d,0x18,0x53,0xe0,0x44,0x12,0xb1,
0x9a,0xf9,0xf9,0xec,0xd5,0x29,0x4e,0x95,0x57,0x6b,0x13,0xeb,0xf1,0x77,0x1f,0x5f,
0xbf,0x3d,0x3b,0x85,0x09,0xc0,0xbb,0xab,0x19,0x2e,0x0f,0x7d,0x82,0x42,0xbf,0xfa,
0x7e,0xab,0xfd,0x84,0x44,0xef,0xee,0x3e,0x21,0x5d,0x5e,0x7a,0x74,0x3d,0xe9,0xa1,
0x71,0x72,0xe1,0xd9,0x95,0xd4,0xf2,0x50,0x92,0xbc,0x4b,0xa0,0x3a,0x1b,0x39,0x9b,
0xa5,0x02,0x60,0xcc,0x35,0x41,0x5e,0xd7,0xca,0xf8,0xfa,0x95,0x44,0xe0,0x1a,0x30,
0x49,0xc8,0xd1,0xf6,0xb5,0x4d,0x44,0x67,0x09,0xc7,0x78,0x22,0xbe,0x7e,0x15,0x3e,
0x7e,0x69,0xf9,0x64,0x32,0xf1,0xc8,0xd4,0x67,0x4a,0x49,0x40,0xa6,0x5a,0xf5,0x8f,
0xe7,0xe7,0xef,0xde,0x7c,0x38,0xab,0x74,0xbf,0x03,0x79,0x77,0x3b,0x30,0x4a,0xdf,
0x5f,0x41,0x8d,0x68,0xa3,0x93,0xba,0xa3,0xc1,0x60,0xd0,0x19,0xdb,0x18,0x01,0xac,
0x20,0x0d,0xa1,0x1f,0x38,0xbb,0x86,0xfc,0x41,0x25,0x45,0x0e,0x31,0xe0,0x51,0x39,
0xf6,0xba,0xb5,0x12,0x56,0x87,0x55,0x30,0x59,0x04,0xf6,0x69,0x5a,0x9b,0xb6,0x72,
0x4f,0xb6,0x88,0x02,0x8e,0x39,0x13,0x9b,0xb2,0xdc,0x74,0xfc,0xa3,0xfd,0x54,0xe4,
0x33,0x33,0xef,0x58,0xf1,0x6b,0x43,0xbf,0x0c,0x7e,0x23,0xe9,0xbf,0x00,0xf4,0xf3,
0x19,0x12,0x6d,0x38,0x1e,0xbe,0xa5,0x76,0xde,0xfb,0xcd,0x87,0x54,0x39,0xe3,0x6b,
0xe6,0xba,0xee,0x2c,0xb7,0x1f,0x4a,0x5c,0x77,0x9b,0x46,0x15,0x7e,0xa1,0x04,0x4e,
0x38,0xb5,0x37,0x1f,0x60,0x8e,0x0d,0x77,0x81,0x84,0xb6,0x47,0x0d,0x2f,0x5a,0x73,
0xa5,0x46,0x2a,0xf8,0xb5,0x20,0x3d,0xa0,0x1a,0xfd,0xff,0xaa,0xa0,0x44,0x06,0xfb,
0x6f,0x68,0xf1,0x80,0xcf,0x48,0x9d,0xee,0x66,0xdc,0xd4,0x3e,0xdb,0xdd,0x85,0xd8,
0xe5,0x86,0x5f,0x52,0xc7,0x0f,0xf4,0x61,0x9b,0xed,0xb7,0x4d,0xa9,0x7c,0xb0,0x42,
0x98,0xca,0x51,0xdf,0x02,0x19,0xdc,0xbb,0xff,0x2b,0xb2,0xb2,0xff,0xe8,0x27,0x50,
0x3a,0xb4,0x69,0xc7,0x14,0xbf,0x9d,0xce,0xd2,0x15,0x16,0xef,0x12,0xa1,0x17,0x80,
0x11,0x41,0x9e,0x5b,0xba,0x88,0x3b,0xfa,0x75,0xfa,0x59,0x71,0x77,0x56,0x5c,0xec,
0x23,0x93,0x39,0xde,0xfb,0x7e,0x38,0x18,0xed,0xd3,0x4b,0x43,0x92,0x94,0x0c,0x88,
0x27,0x03,0x5f,0x10,0xb0,0xee,0x21,0x58,0xf3,0xa2,0x80,0xe6,0x40,0x19,0x6a,0xeb,
0x91,0x2d,0xc1,0x56,0xa9,0x94,0x57,0xd8,0xd8,0x5f,0x21,0xa8,0x03,0xd7,0x9b,0x41,
0xf9,0x40,0xaa,0xd5,0x23,0x5a,0xce,0x92,0x0c,0x42,0x6b,0x5c,0x15,0x0f,0x94,0x84,
0x42,0x48,0xb3,0x8a,0x41,0x7d,0x4b,0xb9,0x23,0xc8,0xae,0x0d,0xcd,0x2e,0x4a,0x0d,
0xe4,0x32,0x91,0xa5,0x06,0xa6,0x47,0x7c,0x97,0x94,0x6c,0xfe,0x72,0xa0,0x6a,0x26,
0x7d,0xf6,0xb3,0x92,0x44,0xe5,0x53,0xf1,0x72,0xfb,0x36,0x16,0x2f,0x56,0xd2,0x4f,
0x6d,0x9d,0xa5,0x83,0x85,0xd8,0x0e,0xf6,0x00,0xca,0x84,0x55,0xdc,0xf6,0x05,0x60,
0x5b,0x81,0x95,0xe7,0x7a,0xab,0x59,0x57,0xe4,0xc1,0xa8,0x52,0x38,0xbf,0xd5,0x60,
0xde,0x59,0xc1,0x3a,0xd5,0x2e,0x5b,0x1b,0x6a,0xc0,0x39,0x7f,0xf7,0xea,0xe2,0xc7,
0x37,0x1f,0x7e,0x58,0x43,0x5e,0x60,0x4b,0x1b,0x40,0xe9,0x80,0x71,0x8c,0xf4,0xc8,
0x0d,0xd9,0xdf,0x58,0x78,0x83,0xef,0x3c,0x27,0x90,0x0e,0xf3,0xa5,0xae,0xfd,0xde,
0x33,0x1b,0x2b,0xcf,0x3c,0xd6,0xf6,0x9e,0x39,0xe3,0xf6,0x87,0x83,0xfd,0x17,0x07,
0xcf,0x0f,0xa1,0x68,0xc8,0xf3,0xe4,0x46,0x44,0xed,0x51,0x07,0x26,0xbc,0x3f,0xe9,
0xd4,0xad,0x17,0xd8,0x01,0x0a,0x2c,0x95,0xce,0xba,0xc6,0xae,0x37,0x63,0xbe,0xd5,
0x12,0x0b,0xe8,0xcd,0x5c,0x51,0x01,0xfc,0xcf,0xf7,0xef,0x7e,0x34,0xa6,0xf8,0x6c,
0xcb,0xbf,0x3d,0x23,0x8c,0xf9,0x28,0xa5,0xed,0x61,0xc5,0x87,0x03,0xba,0x4a,0xf8,
0x12,0x15,0x99,0xa0,0x7a,0xf8,0xa6,0x9e,0x8a,0x84,0x46,0x96,0x66,0xb2,0x37,0xc0,
0x7f,0xd5,0x53,0x6b,0x5c,0x5f,0xe6,0x85,0x92,0x33,0x68,0xd5,0xf4,0x64,0x23,0x39,
0x85,0xcb,0xbe,0xd7,0x32,0x03,0x36,0x8e,0x25,0xa1,0x73,0xcf,0x48,0xef,0xb9,0x99,
0xfb,0x74,0x5d,0x85,0xd3,0x41,0x9e,0x88,0x20,0xc2,0x06,0x7d,0x01,0x56,0x30,0x3c,
0x05,0x0b,0x7c,0xe7,0xdd,0xd5,0x2a,0x53,0x9f,0x3c,0x69,0x40,0xed,0x8e,0x6d,0x29,
0x36,0x28,0xa2,0x2b,0xa2,0xb8,0xc4,0x96,0xf6,0xc9,0x64,0x02,0xa1,0xeb,0xa6,0x5b,
0x9e,0xbb,0xee,0x2a,0xbc,0x43,0xf3,0xaa,0x1b,0xd3,0xca,0x61,0xe7,0xd4,0xca,0x42,
0x53,0xf1,0x99,0xda,0x58,0xf4,0x5c,0xaf,0x69,0x73,0x3d,0x97,0x25,0xf4,0x9f,0x53,
0x41,0x17,0xec,0x48,0xbc,0x20,0x8c,0xa0,0xed,0x18,0x0e,0x40,0x04,0xf0,0x99,0x48,
0xfb,0x6b,0xa5,0x98,0xb1,0x05,0x4f,0xcc,0xb9,0x54,0x56,0x5e,0xdb,0x3d,0xbe,0xc3,
0x12,0x5d,0xa9,0x86,0x9e,0x33,0x13,0xcf,0x65,0x68,0xcc,0x21,0x57,0x22,0x0c,0x92,
0xd5,0x59,0x9e,0x79,0x9d,0x5a,0x53,0xa3,0x6e,0x97,0x66,0xf2,0xd3,0xc5,0xc7,0x0f,
0x7e,0x81,0xbf,0x16,0xa2,0x23,0x83,0x2b,0x0a,0xe8,0x05,0xc5,0x25,0xf0,0xd9,0x8e,
0x2f,0xb0,0x8c,0x7e,0xfd,0x6a,0xee,0x6c,0xdd,0x05,0xcf,0xdc,0x6d,0x1e,0x93,0x36,
0x09,0x20,0x2a,0xcd,0x1a,0x2f,0xd8,0x1a,0xec,0x8d,0xea,0x8f,0x72,0x1a,0xae,0xa1,
0x8d,0x1e,0xe7,0x9b,0x6a,0xe7,0x6f,0x12,0x4c,0x7f,0x8d,0x69,0x13,0xb5,0x55,0x65,
0xae,0x2d,0x61,0x04,0xb3,0xd7,0x77,0x54,0x65,0x0e,0x28,0x4e,0xd4,0x12,0x2f,0xdf,
0xdd,0x9d,0x03,0x61,0x45,0x12,0xa3,0x53,0x22,0x59,0x4e,0x81,0x0c,0x83,0xad,0x18,
0x9f,0x41,0x4f,0xe6,0xaf,0xd3,0x9f,0x6f,0x1d,0xb2,0x71,0xbc,0x2a,0x07,0xfe,0xd4,
0x01,0xbf,0x38,0xa0,0x85,0xb5,0xd0,0x67,0x97,0x06,0xce,0x54,0x69,0x01,0x1d,0x03,
0xf5,0xbe,0xc6,0x92,0x68,0x6c,0x4a,0xe1,0x10,0x74,0xb5,0x4f,0x97,0x3a,0x16,0xb0,
0xe9,0xee,0xed,0xcb,0xc5,0xc9,0x9f,0xd5,0x19,0xc3,0x28,0x8e,0x28,0xff,0x21,0xde,
0xb2,0x53,0xa8,0x7a,0x10,0x6e,0x71,0xe4,0x03,0xde,0x8b,0x9c,0x9a,0x39,0x6b,0x3d,
0xa8,0xa8,0x5d,0x57,0xb8,0xaa,0xb3,0x6a,0x9c,0x10,0x47,0xc4,0xaf,0x56,0x45,0x71,
0x23,0x74,0x97,0x6e,0x13,0xa3,0x12,0xa1,0x27,0x83,0x6a,0x4f,0x33,0x69,0x32,0xb2,
0x4d,0x5b,0x41,0x4e,0x3e,0x7b,0x46,0x2b,0x8e,0xf7,0x20,0x1b,0x43,0x60,0x1a,0xaa,
0x9e,0x6c,0x9a,0xc0,0xfd,0x78,0x8a,0x7e,0x8f,0x64,0xab,0x3a,0xcd,0x61,0x3b,0xf0,
0xdc,0xd5,0x96,0x8d,0x56,0xcc,0xfa,0xd5,0xeb,0xb7,0x55,0x8e,0xde,0x2f,0x3a,0x94,
0xd6,0x00,0x3a,0x09,0xb4,0x4f,0x8d,0x2b,0xd5,0xba,0xa0,0xb9,0x95,0x56,0xe1,0xfb,
0xd4,0x16,0x52,0xcd,0x92,0x5e,0xc7,0x4a,0x77,0x6c,0x03,0x69,0xaf,0x51,0xdd,0xd5,
0x24,0x8b,0x95,0xcc,0x36,0xaf,0x61,0xdb,0xad,0x0b,0x81,0x17,0x33,0xe8,0xfc,0x9f,
0x93,0xde,0x79,0xd2,0xea,0x04,0x16,0xfe,0x69,0x98,0x4c,0x23,0xa8,0xe5,0xc3,0x85,
0xb6,0x7c,0xdb,0x1b,0x61,0xac,0x0a,0xb1,0x10,0x11,0xa5,0x03,0x36,0x72,0xab,0x7b,
0x1b,0x07,0x29,0x05,0x00,0x2e,0xdd,0xe1,0xe4,0xb2,0x79,0x4b,0xdb,0x45,0x69,0xd0,
0xa3,0x86,0x73,0x7b,0x19,0x54,0x5d,0x34,0xd9,0x1f,0x82,0x69,0x6c,0xe0,0x90,0xc6,
0x00,0xe4,0x2d,0xa8,0xc0,0x73,0x35,0x4d,0x8c,0xe2,0x10,0xcd,0x96,0x67,0x51,0xb2,
0x56,0x86,0x41,0x59,0x80,0xe9,0xa6,0xee,0x90,0x8b,0x72,0x0a,0x54,0x9a,0xbd,0xfe,
0xf8,0xf9,0x82,0x56,0x8b,0x1b,0x1e,0x1a,0x20,0x0c,0x74,0x26,0x3a,0x8e,0x6d,0xfa,
0xc0,0x32,0x5f,0x54,0xea,0x3a,0x3e,0x04,0x37,0x17,0x56,0x9a,0x22,0xf9,0xcb,0xe7,
0x77,0x17,0xe0,0xc8,0x70,0xfe,0x89,0x2b,0x9e,0xe9,0x36,0xd4,0x5d,0xfa,0x8d,0x0c,
0x44,0x2c,0x3e,0xed,0xe0,0x0d,0x43,0xdb,0x03,0x19,0x36,0x4d,0xc0,0xfd,0x7a,0x77,
0xb7,0xff,0xdf,0xf4,0x83,0xc0,0x97,0xc1,0xaf,0xfd,0x5f,0xfb,0x15,0x55,0xd3,0x1d,
0x17,0x24,0x6e,0x43,0xed,0xfa,0x99,0x87,0xae,0x2a,0x1a,0x77,0xcd,0x5e,0x67,0xed,
0xa2,0x40,0x03,0xdc,0x42,0x02,0x86,0xa2,0xbd,0xb1,0x51,0xd7,0xab,0x92,0xf5,0x8f,
0xa4,0x82,0xc4,0xed,0x8c,0x02,0x43,0x67,0xa7,0x89,0xdb,0x7f,0x24,0xe9,0x07,0x09,
0xb2,0x1e,0xd3,0xed,0x38,0xb6,0x65,0x4f,0xff,0xf5,0xeb,0x43,0x04,0xf7,0xff,0x98,
0x8d,0xa1,0x27,0xa7,0x26,0x9f,0xa0,0xd7,0x89,0x4b,0x99,0xbc,0xfe,0xc2,0xac,0x26,
0x68,0x2b,0xfa,0x75,0x76,0xf9,0xfa,0x1e,0xfd,0xaa,0x55,0x71,0x77,0xe6,0xb8,0xe9,
0x2a,0x79,0x28,0x97,0xbc,0x67,0xf6,0x58,0x3e,0x18,0x33,0x81,0x78,0xe8,0x7b,0x9d,
0x5f,0x46,0xbf,0x01,0x93,0xf2,0x7d,0xc7,0x8e,0x2c,0xb4,0xd8,0x59,0x0f,0xa1,0x07,
0x1e,0x9f,0xc0,0xc3,0xcc,0x15,0x84,0x3c,0x86,0x1f,0x35,0xa4,0x6d,0xef,0xc7,0xcb,
0xcb,0x4f,0xb0,0x49,0x55,0x8e,0x9d,0x93,0xeb,0xd6,0x1f,0x7c,0x37,0x6d,0x57,0xbd,
0xee,0xba,0xec,0xa9,0x93,0xbd,0x76,0xee,0x46,0xd5,0x70,0x7d,0x07,0x81,0x36,0x24,
0x55,0xfb,0x97,0xe9,0x6f,0xdd,0x1a,0xa8,0x31,0xcb,0x01,0xfe,0xf0,0x22,0x33,0xf0,
0x00,0xc5,0xc1,0xa7,0x14,0xfc,0x7d,0x19,0x1a,0x61,0x00,0x0c,0xf1,0xab,0x48,0x40,
0xc3,0x87,0xdb,0xec,0x6f,0xee,0x5d,0x75,0xcc,0xeb,0xe5,0x19,0xe9,0x0d,0xa6,0x7d,
0xfd,0x15,0xc5,0xca,0xd6,0xc0,0x49,0x84,0x9f,0x41,0xcd,0x02,0x44,0x02,0x4a,0xe2,
0xb3,0xd3,0xe6,0x1c,0xc2,0x24,0x82,0x4c,0x88,0x16,0x57,0xc3,0x11,0x9b,0x22,0xf7,
0x95,0x02,0xc5,0xc8,0xfd,0x9e,0x83,0x54,0x07,0x9c,0x84,0xff,0x8d,0x1f,0x34,0xf7,
0xe9,0x8b,0xba,0xa3,0xbe,0xfd,0xd5,0xf4,0xbf,0x01,0x14,0x7b,0x13,0x30,0x46,0x2d,
0x00,0x00,
};
constexpr size_t WEB_UPDATE_HTML_GZ_LEN = sizeof(WEB_UPDATE_HTML_GZ);
// </gz:WEB_UPDATE_HTML>