GitHub Pages로
1분 만에 배포하기
이 아키텍처 제안서를 동료들에게 공유하고 싶으신가요? GitHub 저장소에 코드를 올리는 것만으로 무료 호스팅 사이트를 가질 수 있습니다.
1
저장소 생성
GitHub에서 streaming-arch 이름의 새 레포지토리를 만듭니다.
2
index.html 파일 업로드
아래 코드를 복사하여 저장소에 파일을 생성합니다.
3
Pages 활성화
Settings > Pages 메뉴에서 Branch를 main으로 선택하고 Save를 누릅니다.
Estimated Time
60 Seconds
code
배포용 소스 코드
<html lang="ko"><head>
<script class="injected-ffc2e83d85">
(function(){'use strict';function q(b){var c=0;return function(){return c<b.length?{done:!1,value:b[c++]}:{done:!0}}}function t(b){var c=typeof Symbol!="undefined"&&Symbol.iterator&&b[Symbol.iterator];if(c)return c.call(b);if(typeof b.length=="number")return{next:q(b)};throw Error(String(b)+" is not an iterable or ArrayLike");}var u=typeof Object.defineProperties=="function"?Object.defineProperty:function(b,c,g){if(b==Array.prototype||b==Object.prototype)return b;b[c]=g.value;return b};
function v(b){b=["object"==typeof globalThis&&globalThis,b,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var c=0;c<b.length;++c){var g=b[c];if(g&&g.Math==Math)return g}throw Error("Cannot find global object");}var w=v(this);function x(b,c){if(c)a:{var g=w;b=b.split(".");for(var h=0;h<b.length-1;h++){var l=b[h];if(!(l in g))break a;g=g[l]}b=b[b.length-1];h=g[b];c=c(h);c!=h&&c!=null&&u(g,b,{configurable:!0,writable:!0,value:c})}}
function y(){this.j=!1;this.g=null;this.u=void 0;this.h=1;this.v=this.l=0;this.i=null}function z(b){if(b.j)throw new TypeError("Generator is already running");b.j=!0}y.prototype.o=function(b){this.u=b};function A(b,c){b.i={I:c,J:!0};b.h=b.l||b.v}y.prototype.return=function(b){this.i={return:b};this.h=this.v};function B(b){this.g=new y;this.h=b}function E(b,c){z(b.g);var g=b.g.g;if(g)return F(b,"return"in g?g["return"]:function(h){return{value:h,done:!0}},c,b.g.return);b.g.return(c);return G(b)}
function F(b,c,g,h){try{var l=c.call(b.g.g,g);if(!(l instanceof Object))throw new TypeError("Iterator result "+l+" is not an object");if(!l.done)return b.g.j=!1,l;var m=l.value}catch(f){return b.g.g=null,A(b.g,f),G(b)}b.g.g=null;h.call(b.g,m);return G(b)}function G(b){for(;b.g.h;)try{var c=b.h(b.g);if(c)return b.g.j=!1,{value:c.value,done:!1}}catch(g){b.g.u=void 0,A(b.g,g)}b.g.j=!1;if(b.g.i){c=b.g.i;b.g.i=null;if(c.J)throw c.I;return{value:c.return,done:!0}}return{value:void 0,done:!0}}
function H(b){this.next=function(c){z(b.g);b.g.g?c=F(b,b.g.g.next,c,b.g.o):(b.g.o(c),c=G(b));return c};this.throw=function(c){z(b.g);b.g.g?c=F(b,b.g.g["throw"],c,b.g.o):(A(b.g,c),c=G(b));return c};this.return=function(c){return E(b,c)};this[Symbol.iterator]=function(){return this}}function I(b){function c(h){return b.next(h)}function g(h){return b.throw(h)}return new Promise(function(h,l){function m(f){f.done?h(f.value):Promise.resolve(f.value).then(c,g).then(m,l)}m(b.next())})}
x("Symbol",function(b){function c(m){if(this instanceof c)throw new TypeError("Symbol is not a constructor");return new g(h+(m||"")+"_"+l++,m)}function g(m,f){this.g=m;u(this,"description",{configurable:!0,writable:!0,value:f})}if(b)return b;g.prototype.toString=function(){return this.g};var h="jscomp_symbol_"+(Math.random()*1E9>>>0)+"_",l=0;return c});
x("Symbol.iterator",function(b){if(b)return b;b=Symbol("Symbol.iterator");u(Array.prototype,b,{configurable:!0,writable:!0,value:function(){return J(q(this))}});return b});function J(b){b={next:b};b[Symbol.iterator]=function(){return this};return b}
x("Promise",function(b){function c(f){this.h=0;this.i=void 0;this.g=[];this.u=!1;var a=this.j();try{f(a.resolve,a.reject)}catch(d){a.reject(d)}}function g(){this.g=null}function h(f){return f instanceof c?f:new c(function(a){a(f)})}if(b)return b;g.prototype.h=function(f){if(this.g==null){this.g=[];var a=this;this.i(function(){a.l()})}this.g.push(f)};var l=w.setTimeout;g.prototype.i=function(f){l(f,0)};g.prototype.l=function(){for(;this.g&&this.g.length;){var f=this.g;this.g=[];for(var a=0;a<f.length;++a){var d=
f[a];f[a]=null;try{d()}catch(e){this.j(e)}}}this.g=null};g.prototype.j=function(f){this.i(function(){throw f;})};c.prototype.j=function(){function f(e){return function(k){d||(d=!0,e.call(a,k))}}var a=this,d=!1;return{resolve:f(this.D),reject:f(this.l)}};c.prototype.D=function(f){if(f===this)this.l(new TypeError("A Promise cannot resolve to itself"));else if(f instanceof c)this.G(f);else{a:switch(typeof f){case "object":var a=f!=null;break a;case "function":a=!0;break a;default:a=!1}a?this.C(f):this.o(f)}};
c.prototype.C=function(f){var a=void 0;try{a=f.then}catch(d){this.l(d);return}typeof a=="function"?this.H(a,f):this.o(f)};c.prototype.l=function(f){this.v(2,f)};c.prototype.o=function(f){this.v(1,f)};c.prototype.v=function(f,a){if(this.h!=0)throw Error("Cannot settle("+f+", "+a+"): Promise already settled in state"+this.h);this.h=f;this.i=a;this.h===2&&this.F();this.K()};c.prototype.F=function(){var f=this;l(function(){if(f.B()){var a=w.console;typeof a!=="undefined"&&a.error(f.i)}},1)};c.prototype.B=
function(){if(this.u)return!1;var f=w.CustomEvent,a=w.Event,d=w.dispatchEvent;if(typeof d==="undefined")return!0;typeof f==="function"?f=new f("unhandledrejection",{cancelable:!0}):typeof a==="function"?f=new a("unhandledrejection",{cancelable:!0}):(f=w.document.createEvent("CustomEvent"),f.initCustomEvent("unhandledrejection",!1,!0,f));f.promise=this;f.reason=this.i;return d(f)};c.prototype.K=function(){if(this.g!=null){for(var f=0;f<this.g.length;++f)m.h(this.g[f]);this.g=null}};var m=new g;c.prototype.G=
function(f){var a=this.j();f.A(a.resolve,a.reject)};c.prototype.H=function(f,a){var d=this.j();try{f.call(a,d.resolve,d.reject)}catch(e){d.reject(e)}};c.prototype.then=function(f,a){function d(n,r){return typeof n=="function"?function(C){try{e(n(C))}catch(D){k(D)}}:r}var e,k,p=new c(function(n,r){e=n;k=r});this.A(d(f,e),d(a,k));return p};c.prototype.catch=function(f){return this.then(void 0,f)};c.prototype.A=function(f,a){function d(){switch(e.h){case 1:f(e.i);break;case 2:a(e.i);break;default:throw Error("Unexpected state: "+
e.h);}}var e=this;this.g==null?m.h(d):this.g.push(d);this.u=!0};c.resolve=h;c.reject=function(f){return new c(function(a,d){d(f)})};c.race=function(f){return new c(function(a,d){for(var e=t(f),k=e.next();!k.done;k=e.next())h(k.value).A(a,d)})};c.all=function(f){var a=t(f),d=a.next();return d.done?h([]):new c(function(e,k){function p(C){return function(D){n[C]=D;r--;r==0&&e(n)}}var n=[],r=0;do n.push(void 0),r++,h(d.value).A(p(n.length-1),k),d=a.next();while(!d.done)})};return c});
function K(b,c){return Object.prototype.hasOwnProperty.call(b,c)}x("Object.is",function(b){return b?b:function(c,g){return c===g?c!==0||1/c===1/g:c!==c&&g!==g}});x("Array.prototype.includes",function(b){return b?b:function(c,g){var h=this;h instanceof String&&(h=String(h));var l=h.length;g=g||0;for(g<0&&(g=Math.max(g+l,0));g<l;g++){var m=h[g];if(m===c||Object.is(m,c))return!0}return!1}});
x("String.prototype.includes",function(b){return b?b:function(c,g){if(this==null)throw new TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(c instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return this.indexOf(c,g||0)!==-1}});
x("WeakMap",function(b){function c(d){this.g=(a+=Math.random()+1).toString();if(d){d=t(d);for(var e;!(e=d.next()).done;)e=e.value,this.set(e[0],e[1])}}function g(){}function h(d){var e=typeof d;return e==="object"&&d!==null||e==="function"}function l(d){if(!K(d,f)){var e=new g;u(d,f,{value:e})}}function m(d){var e=Object[d];e&&(Object[d]=function(k){if(k instanceof g)return k;Object.isExtensible(k)&&l(k);return e(k)})}if(function(){if(!b||!Object.seal)return!1;try{var d=Object.seal({}),e=Object.seal({}),
k=new b([[d,2],[e,3]]);if(k.get(d)!=2||k.get(e)!=3)return!1;k.delete(d);k.set(e,4);return!k.has(d)&&k.get(e)==4}catch(p){return!1}}())return b;var f="$jscomp_hidden_"+Math.random();m("freeze");m("preventExtensions");m("seal");var a=0;c.prototype.set=function(d,e){if(!h(d))throw Error("Invalid WeakMap key");l(d);if(!K(d,f))throw Error("WeakMap key fail: "+d);d[f][this.g]=e;return this};c.prototype.get=function(d){return h(d)&&K(d,f)?d[f][this.g]:void 0};c.prototype.has=function(d){return h(d)&&K(d,
f)&&K(d[f],this.g)};c.prototype.delete=function(d){return h(d)&&K(d,f)&&K(d[f],this.g)?delete d[f][this.g]:!1};return c});
x("Map",function(b){function c(){var a={};return a.m=a.next=a.head=a}function g(a,d){var e=a[1];return J(function(){if(e){for(;e.head!=a[1];)e=e.m;for(;e.next!=e.head;)return e=e.next,{done:!1,value:d(e)};e=null}return{done:!0,value:void 0}})}function h(a,d){var e=d&&typeof d;e=="object"||e=="function"?m.has(d)?e=m.get(d):(e=""+ ++f,m.set(d,e)):e="p_"+d;var k=a[0][e];if(k&&K(a[0],e))for(a=0;a<k.length;a++){var p=k[a];if(d!==d&&p.key!==p.key||d===p.key)return{id:e,list:k,index:a,entry:p}}return{id:e,
list:k,index:-1,entry:void 0}}function l(a){this[0]={};this[1]=c();this.size=0;if(a){a=t(a);for(var d;!(d=a.next()).done;)d=d.value,this.set(d[0],d[1])}}if(function(){if(!b||typeof b!="function"||!b.prototype.entries||typeof Object.seal!="function")return!1;try{var a=Object.seal({x:4}),d=new b(t([[a,"s"]]));if(d.get(a)!="s"||d.size!=1||d.get({x:4})||d.set({x:4},"t")!=d||d.size!=2)return!1;var e=d.entries(),k=e.next();if(k.done||k.value[0]!=a||k.value[1]!="s")return!1;k=e.next();return k.done||k.value[0].x!=
4||k.value[1]!="t"||!e.next().done?!1:!0}catch(p){return!1}}())return b;var m=new WeakMap;l.prototype.set=function(a,d){a=a===0?0:a;var e=h(this,a);e.list||(e.list=this[0][e.id]=[]);e.entry?e.entry.value=d:(e.entry={next:this[1],m:this[1].m,head:this[1],key:a,value:d},e.list.push(e.entry),this[1].m.next=e.entry,this[1].m=e.entry,this.size++);return this};l.prototype.delete=function(a){a=h(this,a);return a.entry&&a.list?(a.list.splice(a.index,1),a.list.length||delete this[0][a.id],a.entry.m.next=a.entry.next,
a.entry.next.m=a.entry.m,a.entry.head=null,this.size--,!0):!1};l.prototype.clear=function(){this[0]={};this[1]=this[1].m=c();this.size=0};l.prototype.has=function(a){return!!h(this,a).entry};l.prototype.get=function(a){return(a=h(this,a).entry)&&a.value};l.prototype.entries=function(){return g(this,function(a){return[a.key,a.value]})};l.prototype.keys=function(){return g(this,function(a){return a.key})};l.prototype.values=function(){return g(this,function(a){return a.value})};l.prototype.forEach=
function(a,d){for(var e=this.entries(),k;!(k=e.next()).done;)k=k.value,a.call(d,k[1],k[0],this)};l.prototype[Symbol.iterator]=l.prototype.entries;var f=0;return l});
x("Set",function(b){function c(g){this.g=new Map;if(g){g=t(g);for(var h;!(h=g.next()).done;)this.add(h.value)}this.size=this.g.size}if(function(){if(!b||typeof b!="function"||!b.prototype.entries||typeof Object.seal!="function")return!1;try{var g=Object.seal({x:4}),h=new b(t([g]));if(!h.has(g)||h.size!=1||h.add(g)!=h||h.size!=1||h.add({x:4})!=h||h.size!=2)return!1;var l=h.entries(),m=l.next();if(m.done||m.value[0]!=g||m.value[1]!=g)return!1;m=l.next();return m.done||m.value[0]==g||m.value[0].x!=4||
m.value[1]!=m.value[0]?!1:l.next().done}catch(f){return!1}}())return b;c.prototype.add=function(g){g=g===0?0:g;this.g.set(g,g);this.size=this.g.size;return this};c.prototype.delete=function(g){g=this.g.delete(g);this.size=this.g.size;return g};c.prototype.clear=function(){this.g.clear();this.size=0};c.prototype.has=function(g){return this.g.has(g)};c.prototype.entries=function(){return this.g.entries()};c.prototype.values=function(){return this.g.values()};c.prototype.keys=c.prototype.values;c.prototype[Symbol.iterator]=
c.prototype.values;c.prototype.forEach=function(g,h){var l=this;this.g.forEach(function(m){return g.call(h,m,m,l)})};return c});(function(){function b(){return m?Promise.resolve(m):f?f:f=fetch("https://www.gstatic.com/bard-maui/resources/material-design-icon-names.804824289.json").then(function(a){if(!a.ok)throw Error("HTTP error! status: "+a.status+" fetching https://www.gstatic.com/bard-maui/resources/material-design-icon-names.804824289.json");return a.json()}).then(function(a){if(!Array.isArray(a))throw new TypeError("Fetched icon names from https://www.gstatic.com/bard-maui/resources/material-design-icon-names.804824289.json is not an array.");
return m=a}).catch(function(a){console.error("IconChecker: Failed to load valid icon names from https://www.gstatic.com/bard-maui/resources/material-design-icon-names.804824289.json.",a);f=null;throw a;})}function c(a){var d,e,k,p;return I(new H(new B(function(n){switch(n.h){case 1:d=(a.textContent||"").trim();if(!d||a.classList.contains("js-replaced-missing-icon")&&d==="radio_button_unchecked")return n.return();e=window.getComputedStyle(a);if(e.display==="none"||e.visibility==="hidden")return n.return();
n.l=2;var r=b();n.h=4;return{value:r};case 4:k=n.u;n.h=3;n.l=0;break;case 2:return n.l=0,n.i=null,console.warn('IconChecker: Skipping check for icon "'+d+'" as valid names could not be loaded.'),n.return();case 3:(p=k.includes(d))?a.classList.contains("js-replaced-missing-icon")&&a.classList.remove("js-replaced-missing-icon"):d==="radio_button_unchecked"&&a.classList.contains("js-replaced-missing-icon")||(a.textContent="radio_button_unchecked",a.classList.add("js-replaced-missing-icon")),n.h=0}})))}
function g(a){a=a===void 0?document.body:a;a.querySelectorAll(l).forEach(function(d){c(d)})}function h(){b().catch(function(){});document.fonts.ready.then(function(){requestAnimationFrame(function(){g(document.body);(new MutationObserver(function(a){var d=new Set;a=t(a);for(var e=a.next();!e.done;e=a.next())if(e=e.value,e.type==="childList")e.addedNodes.forEach(function(p){p.nodeType===Node.ELEMENT_NODE&&(p.matches(l)&&d.add(p),p.querySelectorAll(l).forEach(function(n){d.add(n)}))});else if(e.type===
"attributes"&&e.attributeName==="class"){var k=e.target;e.target.nodeType===Node.ELEMENT_NODE&&k.matches(l)&&d.add(k)}else e.type==="characterData"&&e.target.parentNode&&(e=e.target.parentNode,e.nodeType===Node.ELEMENT_NODE&&e.matches(l)&&d.add(e));d.size>0&&setTimeout(function(){d.forEach(function(p){c(p)})},500)})).observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["class"],characterData:!0})})}).catch(function(a){console.error("IconChecker: Font loading error. Scanning icons anyway.",
a);requestAnimationFrame(function(){g(document.body)})})}var l=["material-icons","material-symbols-outlined","material-symbols-rounded","material-symbols-sharp"].map(function(a){return"."+a}).join(","),m=null,f=null;document.readyState==="loading"?document.addEventListener("DOMContentLoaded",function(){h()}):h()})();}).call(this);
</script>
<script class="injected-ffc2e83d85">
const IMG_SEARCH_REPLACE_MAP = {};
const IMG_SEARCH_ATTRIBUTION_MAP = {};
const IMG_GEN_REPLACE_MAP = {"GitHub Pages tutorial screenshot settings panel&aspect=16:9&reimagine=1": "https://lh3.googleusercontent.com/gg-dl/ABS2GSmLOTm93sczzhQua_Y8KD8ReqC2TspMA0bHbMs_Q5x-B5ycPYOs5-tv7a_OKFsr7xrBtKti3khnv-WYlPRyUjeJiM4cxG6EXXoFQ32-wxLFfYbPsFZ-q0EaPNJlmMFxGM10WkAQyxVPMh0DCpnxs2WL_fPj9uRBiusfTDXBlbe3crf7WQ", "Cloud computing infrastructure with glowing data packets and high speed networking lines dark theme futuristic&aspect=16:9": "https://lh3.googleusercontent.com/gg-dl/ABS2GSl-75cKiYeP7mHRXbSsfxu7oB84bBdSRAjLygvup3oNKVq_Me-pD_yjHA_LxWl9trrM0-MCq9gKygIOYaEnaRDhMT4nyz2LVmDvY257I5lTmUgCzhPwZdzl6OcErr4Df-4JPj1-T-Akop1_ji6-9xGYsqskyme-dJswgeSBApE-1JYwlA", "GitHub logo with modern web deployment concept illustration isometric style&aspect=4:3": "https://lh3.googleusercontent.com/gg-dl/ABS2GSkmE3oDveN4_n4pwEG7e0I-XRgZWQd6mI1k49aQ_Inai0Za2f7S70mhC-YHP5IaFpMJLNKcpjHghOeJpEkWA85gG5hjOS8MW0FBAd7pPbrsYVgdtZq31njhMVgv7gKrpGJwhhH64wXSEv4goR4Op6pho5FqtaMtyIPlzrdT8gqok8ev", "AWS logo and GitHub logo connected by a bridge representing deployment automation&aspect=16:9": "https://lh3.googleusercontent.com/gg-dl/ABS2GSlxsWZihtl_E00uoIStDXvv62tlMfNtl2IHaE8FXCpyodnEdgPAWQ_LvikHIje1QigTTJeAwxKY5UkN8Wgavn-oEpAbw7Lp4rCnxvTXp2jyPgfEQ8cb6OnSElCXKjQgYqHUqIBiC4U8-bLZqNTQEtSWFkNNVQO-iNQt6kEl-jXxbBxyqQ"};
const MAY_HAVE_BACKGROUND_IMAGE = true;
const IMG_SEARCH_REIMAGINE_PARAM = "1";
</script>
<script class="injected-ffc2e83d85">
(function(){'use strict';var n,aa=typeof Object.create=="function"?Object.create:function(a){function b(){}b.prototype=a;return new b},ca=typeof Object.defineProperties=="function"?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a};
function da(a){a=["object"==typeof globalThis&&globalThis,a,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error("Cannot find global object");}var ea=da(this);function q(a,b){if(b)a:{var c=ea;a=a.split(".");for(var d=0;d<a.length-1;d++){var e=a[d];if(!(e in c))break a;c=c[e]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&b!=null&&ca(c,a,{configurable:!0,writable:!0,value:b})}}var fa;
if(typeof Object.setPrototypeOf=="function")fa=Object.setPrototypeOf;else{var ia;a:{var ja={a:!0},ka={};try{ka.__proto__=ja;ia=ka.a;break a}catch(a){}ia=!1}fa=ia?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+" is not extensible");return a}:null}var la=fa;
function ma(a,b){a.prototype=aa(b.prototype);a.prototype.constructor=a;if(la)la(a,b);else for(var c in b)if(c!="prototype")if(Object.defineProperties){var d=Object.getOwnPropertyDescriptor(b,c);d&&Object.defineProperty(a,c,d)}else a[c]=b[c];a.K=b.prototype}function na(a){var b=0;return function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}}}
function u(a){var b=typeof Symbol!="undefined"&&Symbol.iterator&&a[Symbol.iterator];if(b)return b.call(a);if(typeof a.length=="number")return{next:na(a)};throw Error(String(a)+" is not an iterable or ArrayLike");}function oa(a){return pa(a,a)}function pa(a,b){a.raw=b;Object.freeze&&(Object.freeze(a),Object.freeze(b));return a}function qa(){this.G=!1;this.C=null;this.B=void 0;this.A=1;this.J=this.F=0;this.D=null}function ra(a){if(a.G)throw new TypeError("Generator is already running");a.G=!0}
qa.prototype.H=function(a){this.B=a};function sa(a,b){a.D={qa:b,ua:!0};a.A=a.F||a.J}qa.prototype.return=function(a){this.D={return:a};this.A=this.J};function v(a,b,c){a.A=c;return{value:b}}function ua(a){a.F=0;var b=a.D.qa;a.D=null;return b}function va(a){this.A=new qa;this.B=a}function wa(a,b){ra(a.A);var c=a.A.C;if(c)return xa(a,"return"in c?c["return"]:function(d){return{value:d,done:!0}},b,a.A.return);a.A.return(b);return ya(a)}
function xa(a,b,c,d){try{var e=b.call(a.A.C,c);if(!(e instanceof Object))throw new TypeError("Iterator result "+e+" is not an object");if(!e.done)return a.A.G=!1,e;var h=e.value}catch(f){return a.A.C=null,sa(a.A,f),ya(a)}a.A.C=null;d.call(a.A,h);return ya(a)}function ya(a){for(;a.A.A;)try{var b=a.B(a.A);if(b)return a.A.G=!1,{value:b.value,done:!1}}catch(c){a.A.B=void 0,sa(a.A,c)}a.A.G=!1;if(a.A.D){b=a.A.D;a.A.D=null;if(b.ua)throw b.qa;return{value:b.return,done:!0}}return{value:void 0,done:!0}}
function Aa(a){this.next=function(b){ra(a.A);a.A.C?b=xa(a,a.A.C.next,b,a.A.H):(a.A.H(b),b=ya(a));return b};this.throw=function(b){ra(a.A);a.A.C?b=xa(a,a.A.C["throw"],b,a.A.H):(sa(a.A,b),b=ya(a));return b};this.return=function(b){return wa(a,b)};this[Symbol.iterator]=function(){return this}}function Ba(a){function b(d){return a.next(d)}function c(d){return a.throw(d)}return new Promise(function(d,e){function h(f){f.done?d(f.value):Promise.resolve(f.value).then(b,c).then(h,e)}h(a.next())})}
function w(a){return Ba(new Aa(new va(a)))}function Ca(){for(var a=Number(this),b=[],c=a;c<arguments.length;c++)b[c-a]=arguments[c];return b}q("globalThis",function(a){return a||ea});
q("Symbol",function(a){function b(h){if(this instanceof b)throw new TypeError("Symbol is not a constructor");return new c(d+(h||"")+"_"+e++,h)}function c(h,f){this.A=h;ca(this,"description",{configurable:!0,writable:!0,value:f})}if(a)return a;c.prototype.toString=function(){return this.A};var d="jscomp_symbol_"+(Math.random()*1E9>>>0)+"_",e=0;return b});
q("Symbol.iterator",function(a){if(a)return a;a=Symbol("Symbol.iterator");ca(Array.prototype,a,{configurable:!0,writable:!0,value:function(){return Da(na(this))}});return a});function Da(a){a={next:a};a[Symbol.iterator]=function(){return this};return a}
q("Promise",function(a){function b(f){this.B=0;this.C=void 0;this.A=[];this.H=!1;var g=this.D();try{f(g.resolve,g.reject)}catch(k){g.reject(k)}}function c(){this.A=null}function d(f){return f instanceof b?f:new b(function(g){g(f)})}if(a)return a;c.prototype.B=function(f){if(this.A==null){this.A=[];var g=this;this.C(function(){g.F()})}this.A.push(f)};var e=ea.setTimeout;c.prototype.C=function(f){e(f,0)};c.prototype.F=function(){for(;this.A&&this.A.length;){var f=this.A;this.A=[];for(var g=0;g<f.length;++g){var k=
f[g];f[g]=null;try{k()}catch(m){this.D(m)}}}this.A=null};c.prototype.D=function(f){this.C(function(){throw f;})};b.prototype.D=function(){function f(m){return function(r){k||(k=!0,m.call(g,r))}}var g=this,k=!1;return{resolve:f(this.X),reject:f(this.F)}};b.prototype.X=function(f){if(f===this)this.F(new TypeError("A Promise cannot resolve to itself"));else if(f instanceof b)this.Z(f);else{a:switch(typeof f){case "object":var g=f!=null;break a;case "function":g=!0;break a;default:g=!1}g?this.W(f):this.G(f)}};
b.prototype.W=function(f){var g=void 0;try{g=f.then}catch(k){this.F(k);return}typeof g=="function"?this.aa(g,f):this.G(f)};b.prototype.F=function(f){this.J(2,f)};b.prototype.G=function(f){this.J(1,f)};b.prototype.J=function(f,g){if(this.B!=0)throw Error("Cannot settle("+f+", "+g+"): Promise already settled in state"+this.B);this.B=f;this.C=g;this.B===2&&this.Y();this.R()};b.prototype.Y=function(){var f=this;e(function(){if(f.V()){var g=ea.console;typeof g!=="undefined"&&g.error(f.C)}},1)};b.prototype.V=
function(){if(this.H)return!1;var f=ea.CustomEvent,g=ea.Event,k=ea.dispatchEvent;if(typeof k==="undefined")return!0;typeof f==="function"?f=new f("unhandledrejection",{cancelable:!0}):typeof g==="function"?f=new g("unhandledrejection",{cancelable:!0}):(f=ea.document.createEvent("CustomEvent"),f.initCustomEvent("unhandledrejection",!1,!0,f));f.promise=this;f.reason=this.C;return k(f)};b.prototype.R=function(){if(this.A!=null){for(var f=0;f<this.A.length;++f)h.B(this.A[f]);this.A=null}};var h=new c;
b.prototype.Z=function(f){var g=this.D();f.ca(g.resolve,g.reject)};b.prototype.aa=function(f,g){var k=this.D();try{f.call(g,k.resolve,k.reject)}catch(m){k.reject(m)}};b.prototype.then=function(f,g){function k(z,C){return typeof z=="function"?function(H){try{m(z(H))}catch(O){r(O)}}:C}var m,r,B=new b(function(z,C){m=z;r=C});this.ca(k(f,m),k(g,r));return B};b.prototype.catch=function(f){return this.then(void 0,f)};b.prototype.ca=function(f,g){function k(){switch(m.B){case 1:f(m.C);break;case 2:g(m.C);
break;default:throw Error("Unexpected state: "+m.B);}}var m=this;this.A==null?h.B(k):this.A.push(k);this.H=!0};b.resolve=d;b.reject=function(f){return new b(function(g,k){k(f)})};b.race=function(f){return new b(function(g,k){for(var m=u(f),r=m.next();!r.done;r=m.next())d(r.value).ca(g,k)})};b.all=function(f){var g=u(f),k=g.next();return k.done?d([]):new b(function(m,r){function B(H){return function(O){z[H]=O;C--;C==0&&m(z)}}var z=[],C=0;do z.push(void 0),C++,d(k.value).ca(B(z.length-1),r),k=g.next();
while(!k.done)})};return b});function Ea(a,b){return Object.prototype.hasOwnProperty.call(a,b)}
q("WeakMap",function(a){function b(k){this.A=(g+=Math.random()+1).toString();if(k){k=u(k);for(var m;!(m=k.next()).done;)m=m.value,this.set(m[0],m[1])}}function c(){}function d(k){var m=typeof k;return m==="object"&&k!==null||m==="function"}function e(k){if(!Ea(k,f)){var m=new c;ca(k,f,{value:m})}}function h(k){var m=Object[k];m&&(Object[k]=function(r){if(r instanceof c)return r;Object.isExtensible(r)&&e(r);return m(r)})}if(function(){if(!a||!Object.seal)return!1;try{var k=Object.seal({}),m=Object.seal({}),
r=new a([[k,2],[m,3]]);if(r.get(k)!=2||r.get(m)!=3)return!1;r.delete(k);r.set(m,4);return!r.has(k)&&r.get(m)==4}catch(B){return!1}}())return a;var f="$jscomp_hidden_"+Math.random();h("freeze");h("preventExtensions");h("seal");var g=0;b.prototype.set=function(k,m){if(!d(k))throw Error("Invalid WeakMap key");e(k);if(!Ea(k,f))throw Error("WeakMap key fail: "+k);k[f][this.A]=m;return this};b.prototype.get=function(k){return d(k)&&Ea(k,f)?k[f][this.A]:void 0};b.prototype.has=function(k){return d(k)&&Ea(k,
f)&&Ea(k[f],this.A)};b.prototype.delete=function(k){return d(k)&&Ea(k,f)&&Ea(k[f],this.A)?delete k[f][this.A]:!1};return b});
q("Map",function(a){function b(){var g={};return g.L=g.next=g.head=g}function c(g,k){var m=g[1];return Da(function(){if(m){for(;m.head!=g[1];)m=m.L;for(;m.next!=m.head;)return m=m.next,{done:!1,value:k(m)};m=null}return{done:!0,value:void 0}})}function d(g,k){var m=k&&typeof k;m=="object"||m=="function"?h.has(k)?m=h.get(k):(m=""+ ++f,h.set(k,m)):m="p_"+k;var r=g[0][m];if(r&&Ea(g[0],m))for(g=0;g<r.length;g++){var B=r[g];if(k!==k&&B.key!==B.key||k===B.key)return{id:m,list:r,index:g,entry:B}}return{id:m,
list:r,index:-1,entry:void 0}}function e(g){this[0]={};this[1]=b();this.size=0;if(g){g=u(g);for(var k;!(k=g.next()).done;)k=k.value,this.set(k[0],k[1])}}if(function(){if(!a||typeof a!="function"||!a.prototype.entries||typeof Object.seal!="function")return!1;try{var g=Object.seal({x:4}),k=new a(u([[g,"s"]]));if(k.get(g)!="s"||k.size!=1||k.get({x:4})||k.set({x:4},"t")!=k||k.size!=2)return!1;var m=k.entries(),r=m.next();if(r.done||r.value[0]!=g||r.value[1]!="s")return!1;r=m.next();return r.done||r.value[0].x!=
4||r.value[1]!="t"||!m.next().done?!1:!0}catch(B){return!1}}())return a;var h=new WeakMap;e.prototype.set=function(g,k){g=g===0?0:g;var m=d(this,g);m.list||(m.list=this[0][m.id]=[]);m.entry?m.entry.value=k:(m.entry={next:this[1],L:this[1].L,head:this[1],key:g,value:k},m.list.push(m.entry),this[1].L.next=m.entry,this[1].L=m.entry,this.size++);return this};e.prototype.delete=function(g){g=d(this,g);return g.entry&&g.list?(g.list.splice(g.index,1),g.list.length||delete this[0][g.id],g.entry.L.next=g.entry.next,
g.entry.next.L=g.entry.L,g.entry.head=null,this.size--,!0):!1};e.prototype.clear=function(){this[0]={};this[1]=this[1].L=b();this.size=0};e.prototype.has=function(g){return!!d(this,g).entry};e.prototype.get=function(g){return(g=d(this,g).entry)&&g.value};e.prototype.entries=function(){return c(this,function(g){return[g.key,g.value]})};e.prototype.keys=function(){return c(this,function(g){return g.key})};e.prototype.values=function(){return c(this,function(g){return g.value})};e.prototype.forEach=
function(g,k){for(var m=this.entries(),r;!(r=m.next()).done;)r=r.value,g.call(k,r[1],r[0],this)};e.prototype[Symbol.iterator]=e.prototype.entries;var f=0;return e});
q("Set",function(a){function b(c){this.A=new Map;if(c){c=u(c);for(var d;!(d=c.next()).done;)this.add(d.value)}this.size=this.A.size}if(function(){if(!a||typeof a!="function"||!a.prototype.entries||typeof Object.seal!="function")return!1;try{var c=Object.seal({x:4}),d=new a(u([c]));if(!d.has(c)||d.size!=1||d.add(c)!=d||d.size!=1||d.add({x:4})!=d||d.size!=2)return!1;var e=d.entries(),h=e.next();if(h.done||h.value[0]!=c||h.value[1]!=c)return!1;h=e.next();return h.done||h.value[0]==c||h.value[0].x!=4||
h.value[1]!=h.value[0]?!1:e.next().done}catch(f){return!1}}())return a;b.prototype.add=function(c){c=c===0?0:c;this.A.set(c,c);this.size=this.A.size;return this};b.prototype.delete=function(c){c=this.A.delete(c);this.size=this.A.size;return c};b.prototype.clear=function(){this.A.clear();this.size=0};b.prototype.has=function(c){return this.A.has(c)};b.prototype.entries=function(){return this.A.entries()};b.prototype.values=function(){return this.A.values()};b.prototype.keys=b.prototype.values;b.prototype[Symbol.iterator]=
b.prototype.values;b.prototype.forEach=function(c,d){var e=this;this.A.forEach(function(h){return c.call(d,h,h,e)})};return b});q("Object.values",function(a){return a?a:function(b){var c=[],d;for(d in b)Ea(b,d)&&c.push(b[d]);return c}});q("Object.is",function(a){return a?a:function(b,c){return b===c?b!==0||1/b===1/c:b!==b&&c!==c}});
q("Array.prototype.includes",function(a){return a?a:function(b,c){var d=this;d instanceof String&&(d=String(d));var e=d.length;c=c||0;for(c<0&&(c=Math.max(c+e,0));c<e;c++){var h=d[c];if(h===b||Object.is(h,b))return!0}return!1}});function Fa(a,b,c){if(a==null)throw new TypeError("The 'this' value for String.prototype."+c+" must not be null or undefined");if(b instanceof RegExp)throw new TypeError("First argument to String.prototype."+c+" must not be a regular expression");return a+""}
q("String.prototype.includes",function(a){return a?a:function(b,c){return Fa(this,b,"includes").indexOf(b,c||0)!==-1}});q("Array.from",function(a){return a?a:function(b,c,d){c=c!=null?c:function(g){return g};var e=[],h=typeof Symbol!="undefined"&&Symbol.iterator&&b[Symbol.iterator];if(typeof h=="function"){b=h.call(b);for(var f=0;!(h=b.next()).done;)e.push(c.call(d,h.value,f++))}else for(h=b.length,f=0;f<h;f++)e.push(c.call(d,b[f],f));return e}});
q("Object.entries",function(a){return a?a:function(b){var c=[],d;for(d in b)Ea(b,d)&&c.push([d,b[d]]);return c}});q("Number.isFinite",function(a){return a?a:function(b){return typeof b!=="number"?!1:!isNaN(b)&&b!==Infinity&&b!==-Infinity}});q("Number.MAX_SAFE_INTEGER",function(){return 9007199254740991});q("Number.MIN_SAFE_INTEGER",function(){return-9007199254740991});q("Number.isInteger",function(a){return a?a:function(b){return Number.isFinite(b)?b===Math.floor(b):!1}});
q("Number.isSafeInteger",function(a){return a?a:function(b){return Number.isInteger(b)&&Math.abs(b)<=Number.MAX_SAFE_INTEGER}});q("String.prototype.startsWith",function(a){return a?a:function(b,c){var d=Fa(this,b,"startsWith"),e=d.length,h=b.length;c=Math.max(0,Math.min(c|0,d.length));for(var f=0;f<h&&c<e;)if(d[c++]!=b[f++])return!1;return f>=h}});
function Ga(a,b){a instanceof String&&(a+="");var c=0,d=!1,e={next:function(){if(!d&&c<a.length){var h=c++;return{value:b(h,a[h]),done:!1}}d=!0;return{done:!0,value:void 0}}};e[Symbol.iterator]=function(){return e};return e}q("Array.prototype.entries",function(a){return a?a:function(){return Ga(this,function(b,c){return[b,c]})}});q("Math.trunc",function(a){return a?a:function(b){b=Number(b);if(isNaN(b)||b===Infinity||b===-Infinity||b===0)return b;var c=Math.floor(Math.abs(b));return b<0?-c:c}});
q("Number.isNaN",function(a){return a?a:function(b){return typeof b==="number"&&isNaN(b)}});q("Array.prototype.keys",function(a){return a?a:function(){return Ga(this,function(b){return b})}});q("Array.prototype.values",function(a){return a?a:function(){return Ga(this,function(b,c){return c})}});
q("String.prototype.replaceAll",function(a){return a?a:function(b,c){if(b instanceof RegExp&&!b.global)throw new TypeError("String.prototype.replaceAll called with a non-global RegExp argument.");return b instanceof RegExp?this.replace(b,c):this.replace(new RegExp(String(b).replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g,"\\$1").replace(/\x08/g,"\\x08"),"g"),c)}});/*
Copyright The Closure Library Authors.
SPDX-License-Identifier: Apache-2.0
*/
var Ja=this||self;function Ka(a,b){a:{var c=["CLOSURE_FLAGS"];for(var d=Ja,e=0;e<c.length;e++)if(d=d[c[e]],d==null){c=null;break a}c=d}a=c&&c[a];return a!=null?a:b}function La(a){var b=typeof a;return b!="object"?b:a?Array.isArray(a)?"array":b:"null"}function Ma(a,b,c){return a.call.apply(a.bind,arguments)}
function Na(a,b,c){if(!a)throw Error();if(arguments.length>2){var d=Array.prototype.slice.call(arguments,2);return function(){var e=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(e,d);return a.apply(b,e)}}return function(){return a.apply(b,arguments)}}function x(a,b,c){x=Function.prototype.bind&&Function.prototype.bind.toString().indexOf("native code")!=-1?Ma:Na;return x.apply(null,arguments)}
function Oa(a,b){function c(){}c.prototype=b.prototype;a.K=b.prototype;a.prototype=new c;a.prototype.constructor=a;a.Ha=function(d,e,h){for(var f=Array(arguments.length-2),g=2;g<arguments.length;g++)f[g-2]=arguments[g];return b.prototype[e].apply(d,f)}};function Pa(a){Ja.setTimeout(function(){throw a;},0)};var Qa=Ka(748402147,!0),Ra=Ka(824656860,Ka(1,!0));function Sa(a,b){a.__closure__error__context__984382||(a.__closure__error__context__984382={});a.__closure__error__context__984382.severity=b};var Ta=void 0;function Ua(a){a=Error(a);Sa(a,"warning");return a};function Va(){return typeof BigInt==="function"};var Wa=typeof Symbol==="function"&&typeof Symbol()==="symbol";function Xa(a,b,c){return typeof Symbol==="function"&&typeof Symbol()==="symbol"?(c===void 0?0:c)&&Symbol.for&&a?Symbol.for(a):a!=null?Symbol(a):Symbol():b}var ab=Xa("jas",void 0,!0),bb=Xa(void 0,"1oa"),cb=Xa(void 0,"0actk"),db=Xa("m_m","Ja",!0);var eb={ta:{value:0,configurable:!0,writable:!0,enumerable:!1}},fb=Object.defineProperties,y=Wa?ab:"ta";function gb(a,b){Wa||y in a||fb(a,eb);a[y]|=b}function hb(a,b){Wa||y in a||fb(a,eb);a[y]=b};var ib={};function jb(a,b){return b===void 0?a.A!==kb&&!!(2&(a.I[y]|0)):!!(2&b)&&a.A!==kb}var kb={};function lb(a){a.Ia=!0;return a};var mb=lb(function(a){return typeof a==="number"}),nb=lb(function(a){return typeof a==="string"}),ob=lb(function(a){return typeof a==="boolean"});var pb=typeof Ja.BigInt==="function"&&typeof Ja.BigInt(0)==="bigint";function D(a){var b=a;if(nb(b)){if(!/^\s*(?:-?[1-9]\d*|0)?\s*$/.test(b))throw Error(String(b));}else if(mb(b)&&!Number.isSafeInteger(b))throw Error(String(b));return pb?BigInt(a):a=ob(a)?a?"1":"0":nb(a)?a.trim()||"0":String(a)}var xb=lb(function(a){return pb?a>=qb&&a<=rb:a[0]==="-"?sb(a,tb):sb(a,wb)}),tb=Number.MIN_SAFE_INTEGER.toString(),qb=pb?BigInt(Number.MIN_SAFE_INTEGER):void 0,wb=Number.MAX_SAFE_INTEGER.toString(),rb=pb?BigInt(Number.MAX_SAFE_INTEGER):void 0;
function sb(a,b){if(a.length>b.length)return!1;if(a.length<b.length||a===b)return!0;for(var c=0;c<a.length;c++){var d=a[c],e=b[c];if(d>e)return!1;if(d<e)return!0}};var E=0,F=0;function yb(a){var b=a>>>0;E=b;F=(a-b)/4294967296>>>0}function zb(a){if(a<0){yb(-a);var b=u(Ab(E,F));a=b.next().value;b=b.next().value;E=a>>>0;F=b>>>0}else yb(a)}function Bb(a,b){var c=b*4294967296+(a>>>0);return Number.isSafeInteger(c)?c:Cb(a,b)}
function Cb(a,b){b>>>=0;a>>>=0;if(b<=2097151)var c=""+(4294967296*b+a);else Va()?c=""+(BigInt(b)<<BigInt(32)|BigInt(a)):(c=(a>>>24|b<<8)&16777215,b=b>>16&65535,a=(a&16777215)+c*6777216+b*6710656,c+=b*8147497,b*=2,a>=1E7&&(c+=a/1E7>>>0,a%=1E7),c>=1E7&&(b+=c/1E7>>>0,c%=1E7),c=b+Db(c)+Db(a));return c}function Db(a){a=String(a);return"0000000".slice(a.length)+a}
function Eb(){var a=E,b=F;b&2147483648?Va()?a=""+(BigInt(b|0)<<BigInt(32)|BigInt(a>>>0)):(b=u(Ab(a,b)),a=b.next().value,b=b.next().value,a="-"+Cb(a,b)):a=Cb(a,b);return a}
function Fb(a){if(a.length<16)zb(Number(a));else if(Va())a=BigInt(a),E=Number(a&BigInt(4294967295))>>>0,F=Number(a>>BigInt(32)&BigInt(4294967295));else{var b=+(a[0]==="-");F=E=0;for(var c=a.length,d=b,e=(c-b)%6+b;e<=c;d=e,e+=6)d=Number(a.slice(d,e)),F*=1E6,E=E*1E6+d,E>=4294967296&&(F+=Math.trunc(E/4294967296),F>>>=0,E>>>=0);b&&(b=u(Ab(E,F)),a=b.next().value,b=b.next().value,E=a,F=b)}}function Ab(a,b){b=~b;a?a=~a+1:b+=1;return[a,b]};function Gb(){throw Error("Unknown format requested type for int64");};var Hb=typeof BigInt==="function"?BigInt.asIntN:void 0,Ib=typeof BigInt==="function"?BigInt.asUintN:void 0,Jb=Number.isSafeInteger,Kb=Number.isFinite,Lb=Math.trunc;function Mb(a){if(a==null||typeof a==="number")return a;if(a==="NaN"||a==="Infinity"||a==="-Infinity")return Number(a)}function Nb(a){if(a==null||typeof a==="boolean")return a;if(typeof a==="number")return!!a}var Ob=/^-?([1-9][0-9]*|0)(\.[0-9]+)?$/;
function Pb(a){switch(typeof a){case "bigint":return!0;case "number":return Kb(a);case "string":return Ob.test(a);default:return!1}}function Qb(a){if(a==null)return a;if(typeof a==="string"&&a)a=+a;else if(typeof a!=="number")return;return Kb(a)?a|0:void 0}
function Rb(a){var b=void 0;b!=null||(b=Ra?1024:0);if(!Pb(a))throw Ua("int64");var c=typeof a;switch(b){case 512:switch(c){case "string":return Sb(a);case "bigint":return String(Hb(64,a));default:return Tb(a)}case 1024:switch(c){case "string":return Ub(a);case "bigint":return D(Hb(64,a));default:return Vb(a)}case 0:switch(c){case "string":return Sb(a);case "bigint":return D(Hb(64,a));default:return Wb(a)}default:return Gb()}}
function Xb(a){var b=a.length;if(a[0]==="-"?b<20||b===20&&a<="-9223372036854775808":b<19||b===19&&a<="9223372036854775807")return a;Fb(a);return Eb()}function Yb(a){if(a[0]==="-")var b=!1;else b=a.length,b=b<20?!0:b===20&&a<="18446744073709551615";if(b)return a;Fb(a);return Cb(E,F)}function Wb(a){a=Lb(a);if(!Jb(a)){zb(a);var b=E,c=F;if(a=c&2147483648)b=~b+1>>>0,c=~c>>>0,b==0&&(c=c+1>>>0);b=Bb(b,c);a=typeof b==="number"?a?-b:b:a?"-"+b:b}return a}
function Zb(a){a=Lb(a);a>=0&&Jb(a)||(zb(a),a=Bb(E,F));return a}function Tb(a){a=Lb(a);Jb(a)?a=String(a):(zb(a),a=Eb());return a}function $b(a){a=Lb(a);a>=0&&Jb(a)?a=String(a):(zb(a),a=Cb(E,F));return a}function Sb(a){var b=Lb(Number(a));if(Jb(b))return String(b);b=a.indexOf(".");b!==-1&&(a=a.substring(0,b));return Xb(a)}function Ub(a){var b=Lb(Number(a));if(Jb(b))return D(b);b=a.indexOf(".");b!==-1&&(a=a.substring(0,b));return Va()?D(Hb(64,BigInt(a))):D(Xb(a))}
function Vb(a){return Jb(a)?D(Wb(a)):D(Tb(a))}function ac(a){return Jb(a)?D(Zb(a)):D($b(a))}function kc(a){var b=Lb(Number(a));if(Jb(b)&&b>=0)return String(b);b=a.indexOf(".");b!==-1&&(a=a.substring(0,b));return Yb(a)}function lc(a){var b=Lb(Number(a));if(Jb(b)&&b>=0)return D(b);b=a.indexOf(".");b!==-1&&(a=a.substring(0,b));return Va()?D(Ib(64,BigInt(a))):D(Yb(a))}function mc(a){var b=typeof a;if(a==null)return a;if(b==="bigint")return D(Hb(64,a));if(Pb(a))return b==="string"?Ub(a):Vb(a)}
function nc(a){var b=void 0;b!=null||(b=Ra?1024:0);if(!Pb(a))throw Ua("uint64");var c=typeof a;switch(b){case 512:switch(c){case "string":return kc(a);case "bigint":return String(Ib(64,a));default:return $b(a)}case 1024:switch(c){case "string":return lc(a);case "bigint":return D(Ib(64,a));default:return ac(a)}case 0:switch(c){case "string":return kc(a);case "bigint":return D(Ib(64,a));default:return Zb(a)}default:return Gb()}}
function oc(a){var b=typeof a;if(a==null)return a;if(b==="bigint")return D(Ib(64,a));if(Pb(a))return b==="string"?lc(a):ac(a)};function pc(a){return a};function qc(a,b,c,d){var e=d!==void 0;d=!!d;var h=[],f=a.length,g=4294967295,k=!1,m=!!(b&64),r=m?b&128?0:-1:void 0;if(!(b&1)){var B=f&&a[f-1];B!=null&&typeof B==="object"&&B.constructor===Object?(f--,g=f):B=void 0;if(m&&!(b&128)&&!e){k=!0;var z;g=((z=rc)!=null?z:pc)(g-r,r,a,B,void 0)+r}}b=void 0;for(e=0;e<f;e++)if(z=a[e],z!=null&&(z=c(z,d))!=null)if(m&&e>=g){var C=e-r,H=void 0;((H=b)!=null?H:b={})[C]=z}else h[e]=z;if(B)for(var O in B)a=B[O],a!=null&&(a=c(a,d))!=null&&(f=+O,e=void 0,m&&!Number.isNaN(f)&&
(e=f+r)<g?h[e]=a:(f=void 0,((f=b)!=null?f:b={})[O]=a));b&&(k?h.push(b):h[g]=b);return h}function sc(a){switch(typeof a){case "number":return Number.isFinite(a)?a:""+a;case "bigint":return xb(a)?Number(a):""+a;case "boolean":return a?1:0;case "object":if(Array.isArray(a)){var b=a[y]|0;return a.length===0&&b&1?void 0:qc(a,b,sc)}if(a!=null&&a[db]===ib)return tc(a);return}return a}var rc;function tc(a){a=a.I;return qc(a,a[y]|0,sc)};function uc(a,b,c,d){d=d===void 0?0:d;if(a==null){var e=32;c?(a=[c],e|=128):a=[];b&&(e=e&-16760833|(b&1023)<<14)}else{if(!Array.isArray(a))throw Error("narr");e=a[y]|0;if(Qa&&1&e)throw Error("rfarr");2048&e&&!(2&e)&&vc();if(e&256)throw Error("farr");if(e&64)return(e|d)!==e&&hb(a,e|d),a;if(c&&(e|=128,c!==a[0]))throw Error("mid");a:{c=a;e|=64;var h=c.length;if(h){var f=h-1,g=c[f];if(g!=null&&typeof g==="object"&&g.constructor===Object){b=e&128?0:-1;f-=b;if(f>=1024)throw Error("pvtlmt");for(var k in g)h=
+k,h<f&&(c[h+b]=g[k],delete g[k]);e=e&-16760833|(f&1023)<<14;break a}}if(b){k=Math.max(b,h-(e&128?0:-1));if(k>1024)throw Error("spvt");e=e&-16760833|(k&1023)<<14}}}hb(a,e|64|d);return a}function vc(){if(Qa)throw Error("carr");if(cb!=null){var a;var b=(a=Ta)!=null?a:Ta={};a=b[cb]||0;a>=5||(b[cb]=a+1,b=Error(),Sa(b,"incident"),Pa(b))}};function wc(a,b){if(typeof a!=="object")return a;if(Array.isArray(a)){var c=a[y]|0;a.length===0&&c&1?a=void 0:c&2||(!b||4096&c||16&c?a=xc(a,c,!1,b&&!(c&16)):(gb(a,34),c&4&&Object.freeze(a)));return a}if(a!=null&&a[db]===ib)return b=a.I,c=b[y]|0,jb(a,c)?a:yc(a,b,c)?zc(a,b):xc(b,c)}function zc(a,b,c){a=new a.constructor(b);c&&(a.A=kb);a.B=kb;return a}function xc(a,b,c,d){d!=null||(d=!!(34&b));a=qc(a,b,wc,d);d=32;c&&(d|=2);b=b&16769217|d;hb(a,b);return a}
function Ac(a){if(a.A!==kb)return!1;var b=a.I;b=xc(b,b[y]|0);gb(b,2048);a.I=b;a.A=void 0;a.B=void 0;return!0}function Bc(a){if(!Ac(a)&&jb(a,a.I[y]|0))throw Error();}function Cc(a,b){b===void 0&&(b=a[y]|0);b&32&&!(b&4096)&&hb(a,b|4096)}function yc(a,b,c){return c&2?!0:c&32&&!(c&4096)?(hb(b,c|2),a.A=kb,!0):!1};var Dc={};function Ec(a,b,c,d,e){b=Fc(a.I,b,c,e);if(b!==null||d&&a.B!==kb)return b}function Fc(a,b,c,d){if(b===-1)return null;var e=b+(c?0:-1),h=a.length-1;if(!(h<1+(c?0:-1))){if(e>=h){var f=a[h];if(f!=null&&typeof f==="object"&&f.constructor===Object){c=f[b];var g=!0}else if(e===h)c=f;else return}else c=a[e];if(d&&c!=null){d=d(c);if(d==null)return d;if(!Object.is(d,c))return g?f[b]=d:a[e]=d,d}return c}}function Gc(a,b,c){Bc(a);a=a.I;Hc(a,a[y]|0,b,c)}
function Hc(a,b,c,d){var e=c+-1,h=a.length-1;if(h>=0&&e>=h){var f=a[h];if(f!=null&&typeof f==="object"&&f.constructor===Object)return f[c]=d,b}if(e<=h)return a[e]=d,b;if(d!==void 0){var g;h=((g=b)!=null?g:b=a[y]|0)>>14&1023||536870912;c>=h?d!=null&&(e={},a[h+-1]=(e[c]=d,e)):a[e]=d}return b}function Ic(a){if(Wa){var b;return(b=a[bb])!=null?b:a[bb]=new Map}if(bb in a)return a[bb];b=new Map;Object.defineProperty(a,bb,{value:b});return b}
function Jc(a,b,c){var d=Kc,e=a.get(d);if(e!=null)return e;for(var h=e=0;h<d.length;h++){var f=d[h];Fc(b,f)!=null&&(e!==0&&(c=Hc(b,c,e)),e=f)}a.set(d,e);return e}function Lc(a,b,c,d){var e=!1;d=Fc(a,d,void 0,function(h){if(h!=null&&h[db]===ib)var f=h;else if(Array.isArray(h)){f=h[y]|0;var g=f|b&32;g|=b&2;g!==f&&hb(h,g);f=new c(h)}else f=void 0;e=f!==h&&f!=null;return f});if(d!=null)return e&&!jb(d)&&Cc(a,b),d}
function Mc(a,b,c){var d=a.I,e=d[y]|0;b=Lc(d,e,b,c);if(b==null)return b;e=d[y]|0;if(!jb(a,e)){var h=b;var f=h.I,g=f[y]|0;h=jb(h,g)?yc(h,f,g)?zc(h,f,!0):new h.constructor(xc(f,g,!1)):h;h!==b&&(Ac(a)&&(d=a.I,e=d[y]|0),b=h,e=Hc(d,e,c,b),Cc(d,e))}return b}function Nc(a){a==null&&(a=void 0);return a}function Oc(a,b){return Ra?Ec(a,b,void 0,Dc,oc):oc(Ec(a,b,void 0,Dc))}function Pc(a,b,c){a=Ec(a,b,void 0,c);return a==null||typeof a==="string"?a:void 0}
function J(a,b){var c=c===void 0?!1:c;var d;return(d=Nb(Ec(a,b)))!=null?d:c}function L(a,b){return Nb(Ec(a,b,void 0,Dc))}function P(a,b){return Qb(Ec(a,b,void 0,Dc))}function Qc(a,b){return Ra?Ec(a,b,void 0,Dc,mc):mc(Ec(a,b,void 0,Dc))}function Rc(a,b){return Ec(a,b,void 0,Dc,Mb)}function Q(a,b){return Pc(a,b,Dc)}function S(a,b,c){if(c!=null&&typeof c!=="boolean")throw Error("Expected boolean but got "+La(c)+": "+c);Gc(a,b,c)}
function T(a,b,c){if(c!=null){if(typeof c!=="number")throw Ua("int32");if(!Kb(c))throw Ua("int32");c|=0}Gc(a,b,c)}function Sc(a,b,c){if(c!=null&&typeof c!=="number")throw Error("Value of float/double field must be a number, found "+typeof c+": "+c);Gc(a,b,c)}function Tc(a,b,c){if(c!=null&&typeof c!=="string")throw Error();Gc(a,b,c)};function Uc(a,b,c){this.I=uc(a,b,c,2048)}Uc.prototype.toJSON=function(){return tc(this)};Uc.prototype[db]=ib;Uc.prototype.toString=function(){return this.I.toString()};function Vc(a){this.I=uc(a,void 0,void 0,2048)}ma(Vc,Uc);function Wc(a){this.I=uc(a,void 0,void 0,2048)}ma(Wc,Uc);function Xc(a){this.I=uc(a,void 0,void 0,2048)}ma(Xc,Uc);function Yc(a){this.I=uc(a,void 0,void 0,2048)}ma(Yc,Uc);function Zc(a){this.I=uc(a,void 0,void 0,2048)}ma(Zc,Uc);var Kc=[1,2,3,4];/*
Copyright Google LLC
SPDX-License-Identifier: Apache-2.0
*/
var $c=globalThis.trustedTypes,ad;function bd(){var a=null;if(!$c)return a;try{var b=function(c){return c};a=$c.createPolicy("goog#html",{createHTML:b,createScript:b,createScriptURL:b})}catch(c){}return a};function cd(a){this.A=a}cd.prototype.toString=function(){return this.A+""};function dd(a){var b;ad===void 0&&(ad=bd());a=(b=ad)?b.createScriptURL(a):a;return new cd(a)};function ed(a){this.B=a}ed.prototype.toString=function(){return this.B};function fd(a){var b=window;if(typeof MediaSource!=="undefined"&&a instanceof MediaSource||typeof b.ManagedMediaSource!=="undefined"&&a instanceof b.ManagedMediaSource)return a=URL.createObjectURL(a),new ed(a);b=a.type;b.toLowerCase()==="application/octet-stream"?b=!0:(b=b.match(/^([^;]+)(?:;\w+=(?:\w+|"[\w;,= ]+"))*$/i),b=(b==null?void 0:b.length)===2&&(/^image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp|x-icon|heic|heif|avif|x-ms-bmp)$/i.test(b[1])||/^video\/(?:3gpp|avi|mpeg|mpg|mp4|ogg|webm|x-flv|x-matroska|quicktime|x-ms-wmv)$/i.test(b[1])||
/^audio\/(?:3gpp2|3gpp|aac|amr|L16|midi|mp3|mp4|mpeg|oga|ogg|opus|x-m4a|x-matroska|x-wav|wav|webm)$/i.test(b[1])||/^font\/[\w-]+$/i.test(b[1])));if(!b)throw Error("");a=URL.createObjectURL(a);return new ed(a)}var gd=/^\s*(?!javascript:)(?:[\w+.-]+:|[^:/?#]*(?:[/?#]|$))/i;function hd(a){if(a instanceof ed)if(a instanceof ed)a=a.B;else throw Error("");else a=gd.test(a)?a:void 0;return a};var id="alternate author bookmark canonical cite help icon license modulepreload next prefetch dns-prefetch prerender preconnect preload prev search subresource".split(" ");function jd(a,b){if(b instanceof cd){if(b instanceof cd)b=b.A;else throw Error("");a.href=b.toString();a.rel="stylesheet"}else{if(id.indexOf("stylesheet")===-1)throw Error('TrustedResourceUrl href attribute required with rel="stylesheet"');b=hd(b);b!==void 0&&(a.href=b,a.rel="stylesheet")}};function kd(){window.addEventListener("click",function(a){for(var b=document.elementsFromPoint(a.clientX,a.clientY).filter(function(e){return e instanceof HTMLButtonElement&&e.classList.contains("dyn-img-attribution-button-di-script")?!ld(e):!1}),c=u(b),d=c.next();!d.done;d=c.next())if(d.value===a.target)return;b.length>0&&(b.length>1&&console.debug("More than 1 attribution button found covered, only triggering the first one."),a=b[0],console.debug("Triggering covered attribution button"),a.click())})}
function md(a,b){b.addEventListener("click",function(c){c.stopPropagation();c=new Zc;var d=new Yc,e=a;e=Nc(e);Gc(d,1,e);e&&!jb(e)&&Cc(d.I);d=Nc(d);a:{Bc(c);e=c.I;var h=e[y]|0;if(d==null){var f=Ic(e);if(Jc(f,e,h)===2)f.set(Kc,0);else break a}else{f=Ic(e);var g=Jc(f,e,h);g!==2&&(g&&(h=Hc(e,h,g)),f.set(Kc,2))}Hc(e,h,2,d)}d&&!jb(d)&&Cc(c.I);c=JSON.stringify(tc(c));window.parent.postMessage({source:"__geminigo_renderer",payload:c},"*")})}
function ld(a){a=getComputedStyle(a);return a.display==="none"||a.visibility==="hidden"||a.opacity==="0"};function nd(a,b,c){var d=MAY_HAVE_BACKGROUND_IMAGE,e=new MutationObserver(function(h,f){var g,k,m;return w(function(r){if(r.A==1){if(a())return console.debug("Too many mutations, stopping mutation observer."),f.disconnect(),r.return();g=u(h);k=g.next()}if(r.A!=3){if(k.done){r.A=0;return}m=k.value;if(m.type==="childList"&&m.addedNodes.length>0){m.addedNodes.forEach(function(B){var z;return w(function(C){if(C.A==1){if(B.nodeType!==Node.ELEMENT_NODE){C.A=0;return}z=B;d?C=v(C,c(z),3):(C.A=3,C=void 0);
return C}if(z.tagName!=="IMG")z.querySelectorAll&&(d&&z.querySelectorAll("*").forEach(function(H){return w(function(O){return v(O,c(H),0)})}),z.querySelectorAll("img").forEach(function(H){return w(function(O){return v(O,b(H),0)})})),C.A=0;else return v(C,b(B),0)})});r.A=3;return}m.type==="attributes"&&m.attributeName==="src"?m.target.nodeType!==Node.ELEMENT_NODE||m.target.tagName!=="IMG"?(r.A=3,r=void 0):r=v(r,b(m.target),3):d&&m.type==="attributes"&&m.attributeName==="style"&&m.target.nodeType===
Node.ELEMENT_NODE?r=v(r,c(m.target),3):(r.A=3,r=void 0);return r}k=g.next();r.A=2})});window.imageObserver=e;e.observe(document,{attributes:!0,attributeFilter:d?["src","style"]:["src"],childList:!0,subtree:!0})}var od=Object.getOwnPropertyDescriptor(HTMLImageElement.prototype,"src");function pd(a){if(od&&od.set){var b=od.set;Object.defineProperty(HTMLImageElement.prototype,"src",{set:function(c){b.call(this,c);a(this)},get:od.get,enumerable:od.enumerable,configurable:od.configurable})}};function qd(a){return"data:image/svg+xml;base64,"+btoa(a.replace("\n"," ").replace(/\s+/g," "))}var rd=Object.getOwnPropertyDescriptor(HTMLImageElement.prototype,"src"),sd=rd==null?void 0:rd.set,td=qd('\n <svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg" style="width:100%; height:100%;">\n \x3c!-- Wrapper group for opacity --\x3e\n <g opacity="0.4">\n <g id="icon" fill="none" stroke="#aaaaaa" stroke-width="5.25" stroke-linecap="round">\n <circle cx="50" cy="45" r="19"></circle>\n <line x1="37" y1="32" x2="63" y2="58"></line>\n </g>\n <g id="text">\n <text x="50" y="80" font-family="Arial, sans-serif" font-size="9" fill="#aaaaaa" text-anchor="middle" font-weight="600" font-style="italic">No image</text>\n </g>\n </g>\n </svg>');
function ud(a){sd==null||sd.call(a,td);a.style.objectFit="fill"}function vd(a,b){a.style.setProperty("background-image","url('"+b+"')","important")}function wd(a){a.style.backgroundSize="100% 100%";vd(a,td)}var xd=qd('\n<svg width="1024" height="1024" viewBox="0 0 100 100" preserveAspectRatio="none" xmlns="http://www.w3.org/2000/svg">\n <defs>\n <linearGradient id="g" x1="-100%" y1="0" x2="0" y2="0">\n <stop offset="0" stop-color="#b0b0b0"/>\n <stop offset=".5" stop-color="#f0f0f0"/>\n <stop offset="1" stop-color="#b0b0b0"/>\n\n <animateTransform id="a" \n attributeName="gradientTransform" \n type="translate" \n from="0" to="2" \n dur="1s" begin="0s"/>\n <animateTransform id="b" \n attributeName="gradientTransform" \n type="translate" \n from="0" to="2" \n dur="1.5s" begin="a.end"/>\n <animateTransform attributeName="gradientTransform" \n type="translate" \n from="0" to="2" \n dur="2s" begin="b.end" \n repeatCount="indefinite"/>\n </linearGradient>\n </defs>\n \n <rect width="100" height="100" fill="url(#g)"/>\n</svg>');
function yd(a,b){sd==null||sd.call(a,xd);(b=b.match(/aspectRatio=(\d+:\d+)$/))&&b[1]!=="1:1"&&(b=b[1].replace(":","/"),a.style.setProperty("--go-org-aspect-ratio",a.style.aspectRatio),a.style.aspectRatio=b)}
function zd(a,b){var c=a.style.opacity;a.offsetParent===null||c!==""&&Number(c)<=.15?sd==null||sd.call(a,b):(c=new Image,c.onload=function(){var d=a.style.transition,e=a.style.opacity;a.style.transition="none";a.style.opacity="0";sd==null||sd.call(a,b);setTimeout(function(){a.style.transition="opacity 0.2s ease-in-out";a.style.opacity="1";setTimeout(function(){a.style.transition=d;e==="0"?console.debug("Unexpected: orgOpacity of 0."):a.style.opacity=e;var h=a.style.getPropertyValue("--go-org-aspect-ratio");
a.style.aspectRatio=h?h:""},250)},10)},sd==null||sd.call(c,b))}function Ad(a){if(!document.baseURI||!a||a.startsWith("/"))return a;var b=(new URL(document.baseURI)).origin;return a.startsWith(b)?a.slice(b.length):a}function Bd(a,b){a=b===void 0||b?window.getComputedStyle(a):a.style;return a.backgroundImage&&a.backgroundImage!=="none"?(a=(a=a.backgroundImage.match(/url\(['"]?(.*?)['"]?\)/))?a[1]:null)?Ad(a):null:null};var Cd=function(a){return function(b){b=JSON.parse(b);if(!Array.isArray(b))throw Error("Expected jspb data to be an array, got "+La(b)+": "+b);gb(b,34);return new a(b)}}(Xc);var Dd=RegExp("^((http(s)?):)?\\/\\/((((lh[3-6](-tt|-d[a-g,y,z]|-testonly)?\\.((ggpht)|(googleusercontent)|(google)|(sandbox\\.google)))|(lh7\\-(eu|us|qw|rt)\\.((googleusercontent)|(google)))|((photos|testonly|work)\\.fife\\.usercontent\\.google)|([\\w\\-]+\\.fife\\.usercontent\\.google)|(([1-4]\\.bp\\.blogspot)|(bp[0-3]\\.blogger))|(ccp-lh\\.googleusercontent)|((((cp|ci|gp)[3-6])|(ap[1-2]))\\.(ggpht|googleusercontent))|(gm[1-4]\\.ggpht)|(play-(ti-)?lh\\.googleusercontent)|(gz0\\.googleusercontent)|(((yt[3-4])|(sp[1-3]))\\.(ggpht|googleusercontent)))\\.com)|(drive\\.google\\.com\\/drive\\-(usercontent|viewer))|(dp[3-6]\\.googleusercontent\\.cn)|(lh[3-6]\\.(googleadsserving\\.cn|xn--9kr7l\\.com))|((photos|drive|contribution)\\-image\\-(dev|qa)(-us|-eu)?(-auth|-cookie)?\\.corp\\.google\\.com)|(photos\\-image\\-dev\\-dl\\-(auth|eu|us)\\.corp\\.google\\.com)|((dev|dev2|dev3|qa|qa2|qa3|qa-red|qa-blue|canary)[-.]lighthouse\\.sandbox\\.google\\.com\\/image)|(image\\-(dev|qa)\\-lighthouse(-auth)?\\.sandbox\\.google\\.com(\\/image)?)|(drive\\-qa\\.corp\\.google\\.com\\/drive\\-(usercontent|viewer))|(docs(\\-(dev|qa)\\.corp)?\\.google\\.com\\/(u\\/[0-9]+\\/)?(docs|sheets|slides|drawings|forms|videos)\\-images\\-(rt|qw))|(docs\\.sandbox\\.google\\.com\\/(u\\/[0-9]+\\/)?(docs|sheets|slides|drawings|forms|videos)\\-images))\\/",
"i"),Ed=/^(https?:)?\/\/sp[1-4]\.((ggpht)|(googleusercontent))\.com\//i,Fd=/^(https?:)?\/\/(qa(-red|-blue)?|dev2?|image-dev)(-|\.)lighthouse(-auth)?\.sandbox\.google\.com\//i,Gd=/^(https?:)?\/\/lighthouse-(qa(-red|-blue)?|dev2)\.corp\.google\.com\//i;function Hd(a){this.I=uc(a,void 0,void 0,2048)}ma(Hd,Uc);var Id=String.prototype.repeat?function(a,b){return a.repeat(b)}:function(a,b){return Array(b+1).join(a)};function Jd(a,b){var c=Array.prototype.slice.call(arguments),d=c.shift();if(typeof d=="undefined")throw Error("[goog.string.format] Template required");d.replace(/%([0\- \+]*)(\d+)?(\.(\d+))?([%sfdiu])/g,function(e,h,f,g,k,m,r,B){if(m=="%")return"%";var z=c.shift();if(typeof z=="undefined")throw Error("[goog.string.format] Not enough arguments");arguments[0]=z;return Kd[m].apply(null,arguments)})}
var Kd={s:function(a,b,c){return isNaN(c)||c==""||a.length>=Number(c)?a:a=b.indexOf("-",0)>-1?a+Id(" ",Number(c)-a.length):Id(" ",Number(c)-a.length)+a},f:function(a,b,c,d,e){d=a.toString();isNaN(e)||e==""||(d=parseFloat(a).toFixed(e));var h=Number(a)<0?"-":b.indexOf("+")>=0?"+":b.indexOf(" ")>=0?" ":"";Number(a)>=0&&(d=h+d);if(isNaN(c)||d.length>=Number(c))return d;d=isNaN(e)?Math.abs(Number(a)).toString():Math.abs(Number(a)).toFixed(e);a=Number(c)-d.length-h.length;return d=b.indexOf("-",0)>=0?
h+d+Id(" ",a):h+Id(b.indexOf("0",0)>=0?"0":" ",a)+d},d:function(a,b,c,d,e,h,f,g){return Kd.f(parseInt(a,10),b,c,d,0,h,f,g)}};Kd.i=Kd.d;Kd.u=Kd.d;function Ld(){this.B=void 0;this.A={}}n=Ld.prototype;n.set=function(a,b){Md(this,a,b,!1)};n.add=function(a,b){Md(this,a,b,!0)};function Md(a,b,c,d){for(var e=0;e<b.length;e++){var h=b.charAt(e);a.A[h]||(a.A[h]=new Ld);a=a.A[h]}if(d&&a.B!==void 0)throw Error('The collection already contains the key "'+b+'"');a.B=c}function Nd(a,b){for(var c=0;c<b.length;c++)if(a=a.A[b.charAt(c)],!a)return;return a}n.get=function(a){return(a=Nd(this,a))?a.B:void 0};n.la=function(){var a=[];Od(this,a);return a};
function Od(a,b){a.B!==void 0&&b.push(a.B);for(var c in a.A)Od(a.A[c],b)}n.clear=function(){this.A={};this.B=void 0};n.sa=function(){var a;if(a=this.B===void 0)a:{for(var b in this.A){a=!1;break a}a=!0}return a};function fe(){if(!ge){var a=ge=new Ld,b;for(b in he)a.add(b,he[b])}}var ge;function U(a,b){this.types=a;this.A=b}
var he={a:new U([3,0],[function(a,b){S(a,21,b)},function(a,b){T(a,56,b)}]),al:new U([3],[function(a,b){S(a,74,b)}]),b:new U([3,0],[function(a,b){S(a,23,b)},function(a,b){T(a,38,b)}]),ba:new U([0],[function(a,b){T(a,85,b)}]),bc:new U([0],[function(a,b){T(a,87,b)}]),br:new U([0],[function(a,b){T(a,86,b)}]),c:new U([3,0],[function(a,b){S(a,2,b)},function(a,b){T(a,39,b)}]),cc:new U([3],[function(a,b){S(a,51,b)}]),ci:new U([3],[function(a,b){S(a,32,b)}]),ckm:new U([3],[function(a,b){S(a,104,b)}]),cp:new U([0],
[function(a,b){T(a,92,b)}]),cr:new U([3],[function(a,b){S(a,108,b)}]),cv:new U([0],[function(a,b){T(a,94,b)}]),d:new U([3],[function(a,b){S(a,3,b)}]),dc:new U([5],[function(a,b){Tc(a,99,b)}]),df:new U([3],[function(a,b){S(a,80,b)}]),dv:new U([3],[function(a,b){S(a,90,b)}]),e:new U([0],[function(a,b){T(a,15,b)}]),em:new U([0],[function(a,b){T(a,107,b)}]),f:new U([4],[function(a,b){Tc(a,16,b)}]),fg:new U([3],[function(a,b){S(a,34,b)}]),fh:new U([3],[function(a,b){S(a,30,b)}]),fm:new U([3],[function(a,
b){S(a,84,b)}]),fo:new U([2],[function(a,b){Sc(a,79,b)}]),ft:new U([3],[function(a,b){S(a,50,b)}]),fv:new U([3],[function(a,b){S(a,31,b)}]),g:new U([3],[function(a,b){S(a,14,b)}]),gce:new U([4],[function(a,b){Tc(a,112,b)}]),gd:new U([3],[function(a,b){S(a,83,b)}]),gm:new U([3],[function(a,b){S(a,105,b)}]),h:new U([3,0],[function(a,b){S(a,4,b)},function(a,b){T(a,13,b)}]),i:new U([3],[function(a,b){S(a,22,b)}]),ic:new U([0],[function(a,b){T(a,71,b)}]),id:new U([3],[function(a,b){S(a,70,b)}]),il:new U([3],
[function(a,b){S(a,96,b)}]),ip:new U([3],[function(a,b){S(a,54,b)}]),iv:new U([0],[function(a,b){Gc(a,75,b==null?b:Rb(b))}]),j:new U([1],[function(a,b){Gc(a,29,b==null?b:nc(b))}]),k:new U([3,0],[function(a,b){S(a,17,b)},function(a,b){T(a,42,b)}]),l:new U([0],[function(a,b){T(a,44,b)}]),lf:new U([3],[function(a,b){S(a,65,b)}]),lo:new U([3],[function(a,b){S(a,97,b)}]),m:new U([0],[function(a,b){T(a,63,b)}]),md:new U([3],[function(a,b){S(a,91,b)}]),mm:new U([4],[function(a,b){Tc(a,81,b)}]),mo:new U([3],
[function(a,b){S(a,73,b)}]),mp:new U([0],[function(a,b){T(a,115,b)}]),mv:new U([3],[function(a,b){S(a,66,b)}]),n:new U([3],[function(a,b){S(a,20,b)}]),nc:new U([3],[function(a,b){S(a,55,b)}]),nd:new U([3],[function(a,b){S(a,53,b)}]),ng:new U([3],[function(a,b){S(a,95,b)}]),ngm:new U([3],[function(a,b){S(a,106,b)}]),no:new U([3],[function(a,b){S(a,37,b)}]),ns:new U([3],[function(a,b){S(a,40,b)}]),nt0:new U([4],[function(a,b){Tc(a,36,b)}]),ntm:new U([3],[function(a,b){S(a,114,b)}]),nu:new U([3],[function(a,
b){S(a,46,b)}]),nw:new U([3],[function(a,b){S(a,48,b)}]),o:new U([1,3],[function(a,b){Gc(a,7,b==null?b:nc(b))},function(a,b){S(a,27,b)}]),p:new U([3,0],[function(a,b){S(a,19,b)},function(a,b){T(a,43,b)}]),pa:new U([3],[function(a,b){S(a,61,b)}]),pc:new U([0],[function(a,b){T(a,88,b)}]),pd:new U([3],[function(a,b){S(a,60,b)}]),pf:new U([3],[function(a,b){S(a,67,b)}]),pg:new U([3],[function(a,b){S(a,72,b)}]),pi:new U([2],[function(a,b){Sc(a,76,b)}]),pp:new U([3],[function(a,b){S(a,52,b)}]),pt:new U([4],
[function(a,b){Tc(a,111,b)}]),q:new U([4],[function(a,b){Tc(a,28,b)}]),r:new U([3,0],[function(a,b){S(a,6,b)},function(a,b){T(a,26,b)}]),ra:new U([3],[function(a,b){S(a,103,b)}]),rf:new U([3],[function(a,b){S(a,100,b)}]),rg:new U([3],[function(a,b){S(a,59,b)}]),rh:new U([3],[function(a,b){S(a,49,b)}]),rj:new U([3],[function(a,b){S(a,57,b)}]),ro:new U([2],[function(a,b){Sc(a,78,b)}]),rp:new U([3],[function(a,b){S(a,58,b)}]),rw:new U([3],[function(a,b){S(a,35,b)}]),rwa:new U([3],[function(a,b){S(a,
64,b)}]),rwu:new U([3],[function(a,b){S(a,41,b)}]),s:new U([3,0],[function(a,b){S(a,33,b)},function(a,b){T(a,1,b)}]),sb:new U([0],[function(a,b){T(a,110,b)}]),sc:new U([0],[function(a,b){T(a,89,b)}]),sg:new U([3],[function(a,b){S(a,82,b)}]),sl:new U([0],[function(a,b){T(a,109,b)}]),sm:new U([3],[function(a,b){S(a,93,b)}]),t:new U([4],[function(a,b){Tc(a,24,b)}]),tm:new U([3],[function(a,b){S(a,113,b)}]),u:new U([3],[function(a,b){S(a,18,b)}]),ut:new U([3],[function(a,b){S(a,45,b)}]),v:new U([0],[function(a,
b){T(a,62,b)}]),vb:new U([0],[function(a,b){Gc(a,68,b==null?b:Rb(b))}]),vf:new U([4],[function(a,b){Tc(a,102,b)}]),vl:new U([0],[function(a,b){Gc(a,69,b==null?b:Rb(b))}]),vm:new U([3],[function(a,b){S(a,98,b)}]),w:new U([0],[function(a,b){T(a,12,b)}]),x:new U([0],[function(a,b){T(a,9,b)}]),y:new U([0],[function(a,b){T(a,10,b)}]),ya:new U([2],[function(a,b){Sc(a,77,b)}]),z:new U([0],[function(a,b){T(a,11,b)}])};function ie(a,b){Jd("For token '%s': %s",a,b)}
function je(a,b){var c=new Hd,d=new Hd;if(b=="")a=!0;else{b=b.split("-");for(var e=!0,h=0;h<b.length;h++){var f=b[h];if(f.length==0)e=!1;else{var g=f,k=!1;var m=g;var r=g.charAt(0);r!=r.toLowerCase()&&(k=!0,m=g.charAt(0).toLowerCase()+g.substring(1));var B=ge;for(r=1;r<=m.length;++r){var z=B,C=m.substring(0,r);if(C.length==0?z.sa():!Nd(z,C))break}m=r==1?null:(m=B.get(m.substring(0,r-1)))?{Aa:g.substring(0,r-1),value:g.substring(r-1),Ga:k,attributes:m}:null;if(m){g=[];k=[];r=!1;for(B=0;B<m.attributes.types.length;B++){z=
m.attributes.types[B];var H=m.value;C=h;if(m.Ga&&z==1)for(var O=H.length;O<12&&C<b.length-1;)H+="-"+b[C+1],O=H.length,++C;else if(z==2)for(;C<b.length-1&&b[C+1].match(/^[\d\.]/);)H+="-"+b[C+1],++C;O=m.attributes.A[B];H=ke(a,z)(m.Aa,H,c,d,O);if(H===null){r=!0;h=C;break}else g.push(z),k.push(H)}if(!r)for(m=0;m<k.length;m++)B=g[m],H=k[m],le(a,B)(f,H);e=e&&r}else e=!1}}a=e}return new me(c,d,a)}function ne(a,b,c,d,e,h){e(c,b);a=a.charAt(0);h=h(a==a.toUpperCase());e(d,h)}n=fe.prototype;
n.Da=function(a,b,c,d,e){if(b=="")return 0;isFinite(b)&&(b=String(b));b=typeof b==="string"?/^\s*-?0x/i.test(b)?parseInt(b,16):parseInt(b,10):NaN;if(isNaN(b))return 1;ne(a,b,c,d,e,Number);return null};n.xa=function(a,b){switch(b){case 1:ie(a,"Option value could not be interpreted as an integer.");break;case 0:ie(a,"Missing value for integer option.")}};n.Ca=function(a,b,c,d,e){if(b=="")return 0;var h=Number(b);b=h==0&&/^[\s\xa0]*$/.test(b)?NaN:h;if(isNaN(b))return 1;ne(a,b,c,d,e,Number);return null};
n.wa=function(a,b){switch(b){case 1:ie(a,"Option value could not be interpreted as a float.");break;case 0:ie(a,"Missing value for float option.")}};n.Ba=function(a,b,c,d,e){if(b!="")return 2;ne(a,!0,c,d,e,Boolean);return null};n.va=function(a,b){switch(b){case 2:ie(a,"Unexpected value specified for boolean option.")}};n.Ea=function(a,b,c,d,e){if(b=="")return 0;ne(a,b,c,d,e,function(h){return h?"1":""});return null};n.za=function(a,b){switch(b){case 0:ie(a,"Missing value for string option.")}};
n.Fa=function(a,b,c,d,e){if(b=="")return 0;ne(a,b,c,d,e,function(h){return h?1:0});return null};function ke(a,b){switch(b){case 0:return x(a.Da,a);case 2:return x(a.Ca,a);case 3:return x(a.Ba,a);case 4:return x(a.Ea,a);case 1:return x(a.Fa,a);default:return function(){}}}function le(a,b){switch(b){case 0:return x(a.xa,a);case 2:return x(a.wa,a);case 3:return x(a.va,a);case 4:case 1:return x(a.za,a);default:return function(){}}}function me(a,b,c){this.A=a;this.B=b;this.C=c}me.prototype.F=function(){return this.C};function oe(a,b){a!=null&&this.S.apply(this,arguments)}n=oe.prototype;n.N="";n.set=function(a){this.N=""+a};n.S=function(a,b,c){this.N+=String(a);if(b!=null)for(var d=1;d<arguments.length;d++)this.N+=arguments[d];return this};n.clear=function(){this.N=""};n.toString=function(){return this.N};function pe(a){this.D=null;this.C=[];this.B=null;qe(this,a)}function re(a){a.D==null&&(a.D=new fe);return a.D}function qe(a,b){a.B=b?typeof b==="string"?je(re(a),b):b:je(re(a),"")}function V(a,b){return a==b?!1:!0}n=pe.prototype;n.fa=function(a){a=a||void 0;var b=this.B,c=b.A;V(a,J(c,2),J(b.B,2))&&S(c,2,a);return this};n.ea=function(a){a=a||void 0;var b=this.B,c=b.A;V(a,L(c,51),L(b.B,51))&&S(c,51,a);return this};n.ga=function(a){a=a||void 0;var b=this.B,c=b.A;V(a,L(c,32),L(b.B,32))&&S(c,32,a);return this};
n.T=function(a){var b=this.B,c=b.A;V(a,P(c,13),P(b.B,13))&&T(c,13,a);return this};n.da=function(a){a=a||void 0;var b=this.B,c=b.A;V(a,J(c,20),J(b.B,20))&&S(c,20,a);return this};n.ia=function(a){a=a||void 0;var b=this.B,c=b.A;V(a,J(c,19),J(b.B,19))&&S(c,19,a);return this};n.ha=function(a){a=a||void 0;var b=this.B,c=b.A;V(a,L(c,60),L(b.B,60))&&S(c,60,a);return this};n.ka=function(a){a=a||void 0;var b=this.B,c=b.A;V(a,J(c,67),J(b.B,67))&&S(c,67,a);return this};
n.ja=function(a){a=a||void 0;var b=this.B,c=b.A;V(a,J(c,52),J(b.B,52))&&S(c,52,a);return this};n.M=function(a){var b=this.B,c=b.A;V(a,P(c,1),P(b.B,1))&&T(c,1,a);return this};n.U=function(a){var b=this.B,c=b.A;V(a,P(c,12),P(b.B,12))&&T(c,12,a);return this};
n.O=function(){this.C.length=0;var a=this.B,b=a.A;a=a.B;W(this,"s",P(b,1),P(a,1));W(this,"w",P(b,12),P(a,12));Y(this,"c",J(b,2),J(a,2));Y(this,"d",J(b,3),J(a,3));W(this,"h",P(b,13),P(a,13));Y(this,"s",L(b,33),L(a,33));Y(this,"h",J(b,4),J(a,4));Y(this,"p",J(b,19),J(a,19));Y(this,"pp",J(b,52),J(a,52));Y(this,"pf",J(b,67),J(a,67));Y(this,"n",J(b,20),J(a,20));W(this,"r",P(b,26),P(a,26));Y(this,"r",J(b,6),J(a,6));Y(this,"o",L(b,27),L(a,27));var c=Oc(b,7);se(this,"o",c,Oc(a,7));c=Oc(b,29);se(this,"j",c,
Oc(a,29));W(this,"x",P(b,9),P(a,9));W(this,"y",P(b,10),P(a,10));W(this,"z",P(b,11),P(a,11));Y(this,"g",J(b,14),J(a,14));W(this,"e",P(b,15),P(a,15));se(this,"f",Q(b,16),Q(a,16));Y(this,"k",L(b,17),L(a,17));Y(this,"u",L(b,18),!0);Y(this,"ut",L(b,45),!0);Y(this,"i",L(b,22),!0);Y(this,"a",L(b,21),L(a,21));Y(this,"b",J(b,23),J(a,23));W(this,"b",P(b,38),P(a,38));W(this,"c",P(b,39),P(a,39),16,8);se(this,"q",Q(b,28),Q(a,28));Y(this,"fh",L(b,30),L(a,30));Y(this,"fv",L(b,31),L(a,31));Y(this,"fg",J(b,34),J(a,
34));Y(this,"ci",L(b,32),L(a,32));se(this,"t",Q(b,24),Q(a,24));se(this,"nt0",Q(b,36),Q(a,36));Y(this,"rw",J(b,35),J(a,35));Y(this,"rwu",J(b,41),J(a,41));Y(this,"rwa",J(b,64),J(a,64));Y(this,"nw",J(b,48),J(a,48));Y(this,"rh",J(b,49),J(a,49));Y(this,"no",J(b,37),J(a,37));Y(this,"ns",L(b,40),L(a,40));W(this,"k",P(b,42),P(a,42));W(this,"p",P(b,43),P(a,43));W(this,"l",P(b,44),P(a,44));W(this,"v",P(b,62),P(a,62));Y(this,"nu",L(b,46),L(a,46));Y(this,"ft",L(b,50),L(a,50));Y(this,"cc",L(b,51),L(a,51));Y(this,
"nd",L(b,53),L(a,53));Y(this,"ip",L(b,54),L(a,54));Y(this,"nc",L(b,55),L(a,55));W(this,"a",P(b,56),P(a,56));Y(this,"rj",L(b,57),L(a,57));Y(this,"rp",L(b,58),L(a,58));Y(this,"rg",L(b,59),L(a,59));Y(this,"pd",L(b,60),L(a,60));Y(this,"pa",L(b,61),L(a,61));W(this,"m",P(b,63),P(a,63));W(this,"vb",Qc(b,68),Qc(a,68));W(this,"vl",Qc(b,69),Qc(a,69));Y(this,"lf",L(b,65),L(a,65));Y(this,"mv",L(b,66),L(a,66));Y(this,"id",L(b,70),L(a,70));W(this,"ic",P(b,71),!0);Y(this,"pg",J(b,72),J(a,72));Y(this,"mo",L(b,73),
L(a,73));Y(this,"al",L(b,74),L(a,74));W(this,"iv",Qc(b,75),Qc(a,75));W(this,"pi",Rc(b,76),Rc(a,76));W(this,"ya",Rc(b,77),Rc(a,77));W(this,"ro",Rc(b,78),Rc(a,78));W(this,"fo",Rc(b,79),Rc(a,79));Y(this,"df",L(b,80),L(a,80));se(this,"mm",Q(b,81),Q(a,81));Y(this,"sg",L(b,82),L(a,82));Y(this,"gd",L(b,83),L(a,83));Y(this,"fm",L(b,84),L(a,84));W(this,"ba",P(b,85),P(a,85));W(this,"br",P(b,86),P(a,86));W(this,"bc",P(b,87),P(a,87),16,8);W(this,"pc",P(b,88),P(a,88),16,8);W(this,"sc",P(b,89),P(a,89),16,8);Y(this,
"dv",L(b,90),L(a,90));Y(this,"md",L(b,91),L(a,91));W(this,"cp",P(b,92),P(a,92));Y(this,"sm",L(b,93),L(a,93));W(this,"cv",P(b,94),P(a,94));Y(this,"ng",L(b,95),L(a,95));Y(this,"il",L(b,96),L(a,96));Y(this,"lo",L(b,97),L(a,97));Y(this,"vm",L(b,98),L(a,98));se(this,"dc",Q(b,99),Q(a,99));Y(this,"rf",L(b,100),L(a,100));se(this,"vf",Q(b,102),Q(a,102));Y(this,"ra",J(b,103),J(a,103));Y(this,"ckm",L(b,104),L(a,104));Y(this,"gm",L(b,105),L(a,105));Y(this,"ngm",L(b,106),L(a,106));W(this,"em",P(b,107),P(a,107));
Y(this,"cr",L(b,108),L(a,108));W(this,"sl",P(b,109),P(a,109));W(this,"sb",P(b,110),P(a,110));se(this,"pt",Q(b,111),Q(a,111));se(this,"gce",Q(b,112),Q(a,112));Y(this,"tm",L(b,113),L(a,113));Y(this,"ntm",L(b,114),L(a,114));W(this,"mp",P(b,115),P(a,115));return this.C.join("-")};
function W(a,b,c,d,e,h){if(c!=null){var f=e==void 0||e!=10&&e!=16?10:e;c=Number(c).toString(f);e=new oe;e.S(f==16?"0x":"");f=e.S;h==void 0?h="":(h-=c.length,h=h<=0?"":Id("0",h));f.call(e,h);e.S(c);te(a,b,e.toString(),!!Number(d))}}function Y(a,b,c,d){c&&te(a,b,"",!!d)}function se(a,b,c,d){c&&te(a,b,String(c),!!Number(d))}function te(a,b,c,d){d&&(b=b.charAt(0).toUpperCase()+b.substring(1));a.C.push(b+c)};function Z(a){pe.call(this,a)}Oa(Z,pe);n=Z.prototype;n.fa=function(a){a&&ue(this);return Z.K.fa.call(this,a)};n.T=function(a){a=a==null||a<0?void 0:a;a!=null&&this.M();return Z.K.T.call(this,a)};n.ga=function(a){a&&ue(this);return Z.K.ga.call(this,a)};n.ea=function(a){a&&ue(this);return Z.K.ea.call(this,a)};n.M=function(a){var b=typeof a;(b=="object"&&a!=null||b=="function")&&(a=Math.max(a.width,a.height));a=a==null||a<0?void 0:a;a!=null&&(this.U(),this.T());return Z.K.M.call(this,a)};
n.ia=function(a){a&&ue(this);return Z.K.ia.call(this,a)};n.ja=function(a){a&&ue(this);return Z.K.ja.call(this,a)};n.ka=function(a){a&&ue(this);return Z.K.ka.call(this,a)};n.da=function(a){a&&ue(this);return Z.K.da.call(this,a)};n.ha=function(a){a&&ue(this);return Z.K.ha.call(this,a)};n.U=function(a){a=a==null||a<0?void 0:a;a!=null&&this.M();return Z.K.U.call(this,a)};function ue(a){a.da();a.ea();a.fa();a.ga();a.ha();a.ia();a.ja();a.ka()}
n.O=function(){var a=this.B.A;L(a,18)||L(a,45)?P(a,1)||this.M(0):(a=this.B.A,P(a,1)||P(a,12)||P(a,13)||(this.M(),this.T(),this.U(),ue(this)));return Z.K.O.call(this)};var ve=RegExp("^(?:([^:/?#.]+):)?(?://(?:([^\\\\/?#]*)@)?([^\\\\/?#]*?)(?::([0-9]+))?(?=[\\\\/?#]|$))?([^?#]+)?(?:\\?([^#]*))?(?:#([\\s\\S]*))?$");function we(a,b){if(a){a=a.split("&");for(var c=0;c<a.length;c++){var d=a[c].indexOf("="),e=null;if(d>=0){var h=a[c].substring(0,d);e=a[c].substring(d+1)}else h=a[c];b(h,e?decodeURIComponent(e.replace(/\+/g," ")):"")}}};function xe(a,b){this.B=this.J=this.D="";this.H=null;this.G=this.A="";this.F=!1;var c;a instanceof xe?(this.F=b!==void 0?b:a.F,ye(this,a.D),this.J=a.J,this.B=a.B,ze(this,a.H),this.A=a.A,Ae(this,Be(a.C)),this.G=a.G):a&&(c=String(a).match(ve))?(this.F=!!b,ye(this,c[1]||"",!0),this.J=Ce(c[2]||""),this.B=Ce(c[3]||"",!0),ze(this,c[4]),this.A=Ce(c[5]||"",!0),Ae(this,c[6]||"",!0),this.G=Ce(c[7]||"")):(this.F=!!b,this.C=new De(null,this.F))}
xe.prototype.toString=function(){var a=[],b=this.D;b&&a.push(Ee(b,Fe,!0),":");var c=this.B;if(c||b=="file")a.push("//"),(b=this.J)&&a.push(Ee(b,Fe,!0),"@"),a.push(encodeURIComponent(String(c)).replace(/%25([0-9a-fA-F]{2})/g,"%$1")),c=this.H,c!=null&&a.push(":",String(c));if(c=this.A)this.B&&c.charAt(0)!="/"&&a.push("/"),a.push(Ee(c,c.charAt(0)=="/"?Ge:He,!0));(c=this.C.toString())&&a.push("?",c);(c=this.G)&&a.push("#",Ee(c,Ie));return a.join("")};
xe.prototype.resolve=function(a){var b=new xe(this),c=!!a.D;c?ye(b,a.D):c=!!a.J;c?b.J=a.J:c=!!a.B;c?b.B=a.B:c=a.H!=null;var d=a.A;if(c)ze(b,a.H);else if(c=!!a.A){if(d.charAt(0)!="/")if(this.B&&!this.A)d="/"+d;else{var e=b.A.lastIndexOf("/");e!=-1&&(d=b.A.slice(0,e+1)+d)}e=d;if(e==".."||e==".")d="";else if(e.indexOf("./")!=-1||e.indexOf("/.")!=-1){d=e.lastIndexOf("/",0)==0;e=e.split("/");for(var h=[],f=0;f<e.length;){var g=e[f++];g=="."?d&&f==e.length&&h.push(""):g==".."?((h.length>1||h.length==1&&
h[0]!="")&&h.pop(),d&&f==e.length&&h.push("")):(h.push(g),d=!0)}d=h.join("/")}else d=e}c?b.A=d:c=a.C.toString()!=="";c?Ae(b,Be(a.C)):c=!!a.G;c&&(b.G=a.G);return b};function ye(a,b,c){a.D=c?Ce(b,!0):b;a.D&&(a.D=a.D.replace(/:$/,""))}function ze(a,b){if(b){b=Number(b);if(isNaN(b)||b<0)throw Error("Bad port number "+b);a.H=b}else a.H=null}function Ae(a,b,c){b instanceof De?(a.C=b,Je(a.C,a.F)):(c||(b=Ee(b,Ke)),a.C=new De(b,a.F))}function Le(a,b){return a instanceof xe?new xe(a):new xe(a,b)}
function Ce(a,b){return a?b?decodeURI(a.replace(/%25/g,"%2525")):decodeURIComponent(a):""}function Ee(a,b,c){return typeof a==="string"?(a=encodeURI(a).replace(b,Me),c&&(a=a.replace(/%25([0-9a-fA-F]{2})/g,"%$1")),a):null}function Me(a){a=a.charCodeAt(0);return"%"+(a>>4&15).toString(16)+(a&15).toString(16)}var Fe=/[#\/\?@]/g,He=/[#\?:]/g,Ge=/[#\?]/g,Ke=/[#\?@]/g,Ie=/#/g;function De(a,b){this.B=this.A=null;this.C=a||null;this.D=!!b}
function Ne(a){a.A||(a.A=new Map,a.B=0,a.C&&we(a.C,function(b,c){a.add(decodeURIComponent(b.replace(/\+/g," ")),c)}))}n=De.prototype;n.add=function(a,b){Ne(this);this.C=null;a=Oe(this,a);var c=this.A.get(a);c||this.A.set(a,c=[]);c.push(b);this.B+=1;return this};function Pe(a,b){Ne(a);b=Oe(a,b);a.A.has(b)&&(a.C=null,a.B-=a.A.get(b).length,a.A.delete(b))}n.clear=function(){this.A=this.C=null;this.B=0};n.sa=function(){Ne(this);return this.B==0};function Qe(a,b){Ne(a);b=Oe(a,b);return a.A.has(b)}
n.forEach=function(a,b){Ne(this);this.A.forEach(function(c,d){c.forEach(function(e){a.call(b,e,d,this)},this)},this)};n.la=function(a){Ne(this);var b=[];if(typeof a==="string")Qe(this,a)&&(b=b.concat(this.A.get(Oe(this,a))));else{a=Array.from(this.A.values());for(var c=0;c<a.length;c++)b=b.concat(a[c])}return b};n.set=function(a,b){Ne(this);this.C=null;a=Oe(this,a);Qe(this,a)&&(this.B-=this.A.get(a).length);this.A.set(a,[b]);this.B+=1;return this};
n.get=function(a,b){if(!a)return b;a=this.la(a);return a.length>0?String(a[0]):b};n.toString=function(){if(this.C)return this.C;if(!this.A)return"";for(var a=[],b=Array.from(this.A.keys()),c=0;c<b.length;c++){var d=b[c],e=encodeURIComponent(String(d));d=this.la(d);for(var h=0;h<d.length;h++){var f=e;d[h]!==""&&(f+="="+encodeURIComponent(String(d[h])));a.push(f)}}return this.C=a.join("&")};function Be(a){var b=new De;b.C=a.C;a.A&&(b.A=new Map(a.A),b.B=a.B);return b}
function Oe(a,b){b=String(b);a.D&&(b=b.toLowerCase());return b}function Je(a,b){b&&!a.D&&(Ne(a),a.C=null,a.A.forEach(function(c,d){var e=d.toLowerCase();if(d!=e&&(Pe(this,d),Pe(this,e),c.length>0)){this.C=null;d=this.A;var h=d.set;e=Oe(this,e);var f=c.length;if(f>0){for(var g=Array(f),k=0;k<f;k++)g[k]=c[k];f=g}else f=[];h.call(d,e,f);this.B+=c.length}},a));a.D=b};var Re=/^[^\/]*\/\//;function Se(a,b){b=b===void 0?!1:b;this.C=a;this.G="";(a=this.C.match(Re))&&a[0]?(this.G=a[0],a=this.G.match(/\w+/)?this.C:"http://"+this.C.substring(this.G.length)):a="http://"+this.C;this.H=Le(a,!0);this.X=b;this.D=!0;this.aa=!1}function Te(a,b){a.B=a.B?a.B+("/"+b):b}
function Ue(a){if(a.A==void 0){var b=a.H.A.substring(1);a.B=null;if(a.X){a.A=[];if((b.match(/=/g)||[]).length>1)return a.D=!1,a.A;var c=b.indexOf("=");c!=-1?(a.A.push(b.substr(0,c)),a.A.push(b.substr(c+1))):a.A.push(b);return a.A}a.A=b.split("/");b=a.A.length;b>2&&a.A[0]=="u"&&(Te(a,a.A[0]+"/"+a.A[1]),a.A.shift(),a.A.shift(),b-=2);if(b==0||b==4||b>7)return a.D=!1,a.A;if(b==2)Te(a,a.A[0]);else if(a.A[0]=="image")Te(a,a.A[0]);else if(b==7||b==3)return a.D=!1,a.A;if(b<=3){a.aa=!0;b==3&&(Te(a,a.A[1]),
a.A.shift(),--b);--b;c=a.A[b];var d=c.indexOf("=");d!=-1&&(a.A[b]=c.substr(0,d),a.A.push(c.substr(d+1)))}}return a.A}Se.prototype.F=function(){Ue(this);return this.D};function Ve(a){Ue(a);return a.aa}function We(a){Ue(a);return a.X}function Xe(a){Ue(a);a.B==void 0&&(a.B=null);return a.B}function Ye(a){switch(Ue(a).length){case 7:return!0;case 6:return Xe(a)==null;case 5:return!1;case 3:return!0;case 2:return Xe(a)==null;case 1:return!1;default:return!1}}
function Ze(a,b){if(We(a))a:{switch(b){case 7:b=0;break;case 4:if(!Ye(a)){a=null;break a}b=1;break;default:a=null;break a}a=Ue(a)[b]}else if(Ve(a))a:{var c=Xe(a)!=null?1:0;switch(b){case 6:b=c;break;case 4:if(!Ye(a)){a=null;break a}b=1+c;break;default:a=null;break a}a=Ue(a)[b]}else a:{c=Xe(a)!=null?1:0;switch(b){case 0:b=c;break;case 1:b=1+c;break;case 2:b=2+c;break;case 3:b=3+c;break;case 4:if(!Ye(a)){a=null;break a}b=4+c;break;case 5:b=Ye(a)?1:0;b=4+c+b;break;default:a=null;break a}a=Ue(a)[b]}return a}
function $e(a){a.ma==void 0&&(a.ma=Ze(a,4));return a.ma};function af(){}function bf(a,b){Se.call(this,a,b===void 0?!1:b)}ma(bf,Se);function cf(a,b){b=b===void 0?!1:b;this.A=null;a instanceof bf||(df==void 0&&(df=new af),a=new bf(a.toString(),b===void 0?!1:b));a=this.A=a;a.J==void 0&&((b=$e(a))||(b=""),a.J=je(new fe,b));pe.call(this,a.J);this.J=this.A.G;a=this.A;b=a.H.H;this.H=a.H.B+(b?":"+b:"");this.G=this.A.H.C.toString()}Oa(cf,Z);var df;cf.prototype.F=function(){return this.A.F()};
cf.prototype.O=function(){if(!this.A.F())return this.A.C;var a=cf.K.O.call(this),b=[];Xe(this.A)!=null&&b.push(Xe(this.A));var c=We(this.A);if(Ve(this.A)){var d=this.A;d.Y==void 0&&(d.Y=Ze(d,6));b.push(d.Y+(a?"="+a:""))}else if(c){d=b.push;var e=this.A;e.V===void 0&&(e.V=Ze(e,7));d.call(b,e.V);a&&b.push(a)}else d=b.push,e=this.A,e.Z==void 0&&(e.Z=Ze(e,0)),d.call(b,e.Z),d=b.push,e=this.A,e.na==void 0&&(e.na=Ze(e,1)),d.call(b,e.na),d=b.push,e=this.A,e.W==void 0&&(e.W=Ze(e,2)),d.call(b,e.W),d=b.push,
e=this.A,e.oa==void 0&&(e.oa=Ze(e,3)),d.call(b,e.oa),a&&b.push(a),a=b.push,d=this.A,d.R==void 0&&(d.R=Ze(d,5)),a.call(b,d.R);b=Le(this.J+this.H+"/"+(c?b.join("="):b.join("/"))+(this.G?"?"+this.G:"")).toString();b.startsWith("%3a//")&&(b=b.replace("%3a//","://"));return b};function ef(a){var b=Ca.apply(1,arguments);if(b.length===0)return dd(a[0]);for(var c=a[0],d=0;d<b.length;d++)c+=encodeURIComponent(b[d])+a[d+1];return dd(c)};var ff=oa(["https://fonts.googleapis.com/css2?family=Google+Symbols:opsz,wght,FILL,GRAD,ROND@24,400,0,0,50&icon_names=link"]),gf=oa(["https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0&icon_names=open_in_full"]);(function(){function a(l){var p=l.parentElement;if(p&&p.classList.contains("dyn-img-link-wrapper-di-script")){var t=p.querySelector(".dyn-img-inline-attribution-di-script");if(t){var A=A===void 0?333:A;ld(l)?t.style.display="none":l.getBoundingClientRect().width>=A?t.style.display="inline-block":t.style.display="none"}if(p=p.querySelector(".dyn-img-attribution-button-di-script"))p.style.display=ld(l)?"none":"flex"}}function b(){if(!document.getElementById("dyn-img-link-styles-di-script")){var l=document.createElement("link");
l.type="text/css";document.querySelector('link[href*="family=Google+Symbols"]')?console.debug("Google Symbols already imported, skipping import."):(jd(l,ef(ff)),document.head.appendChild(l));document.querySelector('link[href*="family=Material+Symbols+Outlined"]')?console.debug("Material Symbols already imported, skipping import."):(l=document.createElement("link"),jd(l,ef(gf)),document.head.appendChild(l));l=document.createElement("style");l.id="dyn-img-link-styles-di-script";l.textContent="\n .dyn-img-link-wrapper-di-script {\n anchor-scope: all;\n display: contents;\n position: relative;\n z-index: 1;\n }\n\n .dyn-img-link-wrapper-di-script img {\n anchor-name: --photo;\n display: block;\n max-width: 100%;\n }\n\n .dyn-img-link-di-script {\n z-index: 999999;\n background-color: rgba(0, 0, 0, 0.5);\n border-radius: 9999px;\n box-shadow: 0 1px 2px rgba(0,0,0,0.2);\n color: white;\n height: clamp(13px, calc(max(anchor-size(width), anchor-size(height)) * 0.3), 21px);\n width: clamp(13px, calc(max(anchor-size(width), anchor-size(height)) * 0.3), 21px);\n padding: 4px;\n position: absolute;\n\n bottom: anchor(bottom);\n left: anchor(left);\n margin-left: 10px;\n margin-bottom: 10px;\n\n transition: background-color 0.2s ease-in-out;\n }\n\n .dyn-img-link-di-script:hover {\n background-color: rgba(0, 0, 0, 0.8);\n }\n\n .dyn-img-link-di-script span {\n font-size: 14px;\n vertical-align: top;\n }\n\n .dyn-img-attribution-button-di-script {\n z-index: 999999;\n background-color: rgba(0, 0, 0, 0.5);\n border-radius: 9999px;\n box-shadow: 0 1px 2px rgba(0,0,0,0.2);\n color: white;\n width: clamp(13px, calc(max(anchor-size(width), anchor-size(height)) * 0.3), 21px);\n height: clamp(13px, calc(max(anchor-size(width), anchor-size(height)) * 0.3), 21px);\n padding: 4px;\n\n position: absolute;\n position-anchor: --photo;\n top: anchor(top);\n right: anchor(right);\n margin-top: 10px;\n margin-right: 10px;\n\n transition: background-color 0.2s ease-in-out;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .dyn-img-attribution-button-di-script:hover {\n background-color: rgba(0, 0, 0, 0.8);\n }\n\n .dyn-img-attribution-button-di-script span {\n font-size: 14px;\n vertical-align: top;\n }\n\n .dyn-img-inline-attribution-di-script {\n z-index: 999999;\n font-size: 12px;\n padding: 4px;\n display: none;\n\n position: absolute;\n position-anchor: --photo;\n bottom: anchor(bottom);\n right: anchor(right);\n margin-bottom: 8px;\n margin-right: 8px;\n\n max-width: 200px;\n overflow: hidden;\n text-overflow: ellipsis;\n text-align: right;\n\n white-space: nowrap;\n background-color: rgba(0, 0, 0, 0.8);\n border-radius: 9999px;\n box-shadow: 0 1px 2px rgba(0,0,0,0.2);\n color: white;\n }\n ";
document.head.appendChild(l)}}function c(l,p){p=l=(l.get(p)||"").trim();((p.match(/(([a-z]|'|%27)[a-z]|a)\+[a-z]{2}/gi)||[]).length>=2||!p.includes(" ")&&!p.includes("%20"))&&(l=l.replaceAll("+","%20"));return decodeURIComponent(l).trim()}function d(l){l=m(l,"/image?");var p=new URLSearchParams(l);l=c(p,"query");return(p=p.get("aspect"))&&p!=="1:1"?l+"&aspect="+p:l}function e(l){l=m(l,"/gen?");var p=new URLSearchParams(l);l=c(p,"prompt");var t=p.get("aspect");t&&t!=="1:1"&&(l+="&aspect="+t);(t=p.get("context_image_idx"))&&
(l+="&context_image_idx="+t.split(",").map(Number).sort(function(A,I){return A-I}).join(","));(p=p.get("reimagine"))&&(l+="&reimagine="+p);return l}function h(l){return l.replace(/&aspect=\d+:\d+/,"")}function f(l){l=l.replace(/[^a-zA-Z0-9-_]/g," ");return"data:image/svg+xml,"+encodeURIComponent('<svg width="512" height="512" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg">\n <style>\n .s { stroke:#E57373; stroke-width:30; fill:none; stroke-linecap:round }\n .t { font:bold 68px Arial; text-anchor:middle; dominant-baseline:middle }\n </style>\n <g class="s">\n <circle cx="256" cy="256" r="230"/>\n <path d="M120 120L392 392M392 120L120 392"/>\n </g>\n <text class="t" x="50%" y="50%">'+
l+"</text>\n </svg>")}function g(l){var p,t,A,I,N,R,G,X,M;return w(function(K){switch(K.A){case 1:if(Dd.test(l)||Ed.test(l)||Fd.test(l)||Gd.test(l)){K.A=2;break}return v(K,fetch(l),3);case 3:return p=K.B,K.return(p.blob());case 2:var ba=$e(new bf(l,!1));t=new Z(ba);t.M(1024);ba=t.O();var ta=new cf(l,!1);qe(ta,ba);A=ta.O();I=new URL(A);I.searchParams.set("alr","yes");((N=window.geminiGoConstants)==null?0:N.authUserSessionIndex)&&I.searchParams.set("authuser",window.geminiGoConstants.authUserSessionIndex.toString());
R=0;case 4:if(!(R<5)){K.A=6;break}return v(K,fetch(I.toString(),{credentials:"include"}),7);case 7:G=K.B;if(!G.ok)throw Error("Fetch using ALR received not OK response");X=void 0;if((X=G.headers.get("content-type"))==null?0:X.startsWith("text/plain")){K.A=8;break}return v(K,G.blob(),9);case 9:return M=K.B,K.return(M);case 8:return v(K,G.text(),10);case 10:I=new URL(K.B);R++;K.A=4;break;case 6:throw Error("Fetch using ALR exceeded maximum number of redirects");}})}function k(l,p,t){var A=h(l);return l in
p?p[l]:A in t?p[t[A]]:null}function m(l,p){return l.startsWith(p)?l.slice(p.length):l}function r(l,p){l=u(Object.keys(l));for(var t=l.next();!t.done;t=l.next())t=t.value,p[h(t)]=t;l=u(Object.keys(IMG_SEARCH_REPLACE_MAP));for(t=l.next();!t.done;t=l.next())t=t.value,t.includes("&aspect=")||(p[h(t)]=t)}function B(){for(var l=u(Object.entries(IMG_GEN_REPLACE_MAP)),p=l.next(),t={};!p.done;t={P:void 0},p=l.next()){var A=u(p.value);p=A.next().value;A=A.next().value;t.P=p;p=A;p.startsWith("data:text/plain;utf-8,")?
ha.C[t.P]=f(p.slice(22)):(ha.B[t.P]=g(p),ha.B[t.P].then(function(I){return function(){ha.D.add(I.P)}}(t)))}}function z(l){if(!l.startsWith("/image?query=")||!IMG_SEARCH_REIMAGINE_PARAM)return l;var p=d(l);return k(p,IMG_SEARCH_REPLACE_MAP,ub)?l:"/gen?prompt="+m(l,"/image?query=")+"&reimagine="+IMG_SEARCH_REIMAGINE_PARAM}function C(l){var p,t,A,I;return w(function(N){if(N.A==1){p=e(l);if(t=ha.C[p])return console.debug("Returning error url for prompt: ",prompt),N.return(t);A=k(p,ha.B,ha.A);if(!A)return console.debug("No image found for prompt: ",
prompt),N.return("");I=fd;return v(N,A,2)}return N.return(I(N.B).toString())})}function H(l,p){var t,A,I,N,R;return w(function(G){switch(G.A){case 1:G.F=2;var X=t=e(p),M=ha.D,K=ha.A,ba=h(X);if(!M.has(X)&&!M.has(K[ba])){G.A=4;break}return v(G,C(p),5);case 5:if(A=G.B)return(I=bc)==null||I.call(l,A),G.return();case 4:return yd(l,p),v(G,C(p),6);case 6:N=G.B;if(!N)return console.debug("No gen image found for prompt: ",p),ud(l),G.return();zd(l,N);G.A=0;G.F=0;break;case 2:R=ua(G),console.debug("Error replacing generated image src",
R),G.A=0}})}function O(l,p){var t,A,I,N,R,G,X,M,K,ba,ta,hf,cc,Ya,Pd,Qd,Rd,dc;return w(function(Sd){try{t=window.getComputedStyle(l).borderRadius;A=d(p);I=k(A,IMG_SEARCH_REPLACE_MAP,ub);N=k(A,IMG_SEARCH_ATTRIBUTION_MAP,Td);R=null;N&&(R=Cd(N));if(!I)return console.debug("no image search found for key: ",A),ud(l),Sd.return();G=u(I);X=G.next().value;M=G.next().value;K=X;ba=M;if(hf=(ta=l.parentElement)&&ta.classList.contains("dyn-img-link-wrapper-di-script")){if(cc=ta.querySelector(".dyn-img-link-di-script")){var Ud=
hd(ba);Ud!==void 0&&(cc.href=Ud);cc.title="Image Source: "+ba}if((Ya=ta.querySelector(".dyn-img-attribution-button-di-script"))&&R){var Za=R,Ha=Ya.cloneNode(!0);Ya.parentNode?Ya.parentNode.replaceChild(Ha,Ya):console.debug("Cannot replace image attribution button.");md(Za,Ha)}else console.debug("Unable to update button event listener.");ta.style.borderRadius=t;(Pd=bc)==null||Pd.call(l,K)}else{Date.now()<Vd+500?(yd(l,p),zd(l,K)):(Qd=bc)==null||Qd.call(l,K);if(R){Ha=R;var $a=document.createElement("button");
$a.className="dyn-img-attribution-button-di-script";$a.title="Image Attribution";md(Ha,$a);var ec=document.createElement("span");ec.className="material-symbols-outlined";ec.textContent="open_in_full";$a.appendChild(ec);var Wd=$a}else{var za=document.createElement("a");za.className="dyn-img-link-di-script";za.target="_blank";za.rel="noopener noreferrer";var Xd=hd(ba);Xd!==void 0&&(za.href=Xd);za.title="Image Source: "+ba;var fc=document.createElement("span");fc.className="google-symbols";fc.textContent=
"link";za.appendChild(fc);Wd=za}Rd=Wd;if(R){var Yd,Zd;if((Yd=Mc(R,Wc,14))==null)var $d=void 0;else{if((Zd=Mc(Yd,Vc,2))==null)var ae=void 0;else{var hc=hc===void 0?"":hc;var be;ae=(be=Pc(Zd,1))!=null?be:hc}$d=ae}if(Ha=$d){var ic=document.createElement("span");ic.className="dyn-img-inline-attribution-di-script";ic.textContent=Ha;Za=ic}else Za=null}else Za=null;dc=Za;var jf=window.getComputedStyle(l),Ia=document.createElement("div");Ia.className="dyn-img-link-wrapper-di-script";Ia.style.borderRadius=
jf.borderRadius;l.parentNode&&(l.parentNode.insertBefore(Ia,l),Ia.appendChild(l),Ia.appendChild(Rd),dc&&Ia.appendChild(dc));kf.observe(l);lf.observe(l,{attributes:!0,attributeFilter:["style","class"]})}}catch(mf){console.debug("Error replacing search image src",mf)}Sd.A=0})}function jc(l){var p;return w(function(t){var A=l.getAttribute("src");p=A?Ad(A):null;if(!p)return t.return();p=z(p);p.startsWith("/gen?prompt=")?(vb++,H(l,p)):p.startsWith("/image?query=")&&(vb++,O(l,p));t.A=0})}function nf(l,
p){var t,A,I,N,R,G,X;return w(function(M){switch(M.A){case 1:t=null;M.F=2;vd(l,xd);if(!p.startsWith("/gen?prompt=")){A=d(p);I=k(A,IMG_SEARCH_REPLACE_MAP,ub);if(!I)return console.debug("no image search found for key: ",A),wd(l),M.return();N=u(I);t=G=R=N.next().value;M.A=4;break}return v(M,C(p),5);case 5:t=M.B;case 4:if(!t)return console.debug("No image found for: ",p),wd(l),M.return();if(t===p)return console.debug("Unexpected: resolvedUrl is the same as placeholderUrl: ",t,p),wd(l),M.return();vd(l,
t);M.A=0;M.F=0;break;case 2:X=ua(M),console.debug("Error setting backgroundImage",X),M.A=0}})}function ce(l){var p,t;return w(function(A){if(!(l instanceof HTMLElement))return A.return();p=l;(t=Bd(p,!1))||(t=Bd(p,!0));if(!t||!t.startsWith("/gen?prompt=")&&!t.startsWith("/image?query="))return A.return();vb++;t=z(t);nf(p,t);A.A=0})}function de(){return w(function(l){console.debug("processLoadedDoc "+Date.now());Vd=Date.now();b();document.querySelectorAll("img").forEach(function(p){return w(function(t){return v(t,
jc(p),0)})});MAY_HAVE_BACKGROUND_IMAGE&&document.querySelectorAll("*").forEach(function(p){return w(function(t){return v(t,ce(p),0)})});nd(function(){return vb>1E4},jc,ce);kd();console.debug("done processLoadedDoc "+Date.now());l.A=0})}console.debug("PreprocessImages Version 2");var kf=new ResizeObserver(function(l){l=u(l);for(var p=l.next();!p.done;p=l.next())(p=p.value.target)&&a(p)}),lf=new MutationObserver(function(l){var p=new Set;l=u(l);for(var t=l.next();!t.done;t=l.next())t=t.value,t.target&&
p.add(t.target);p=u(p);for(l=p.next();!l.done;l=p.next())a(l.value)}),Vd=0,ha=new function(){this.B={};this.C={};this.D=new Set;this.A={}},ub={},Td={},vb=0,ee,bc=(ee=Object.getOwnPropertyDescriptor(HTMLImageElement.prototype,"src"))==null?void 0:ee.set;(function(){return w(function(l){console.debug("beforeLoad "+Date.now());r(IMG_SEARCH_REPLACE_MAP,ub);r(IMG_SEARCH_ATTRIBUTION_MAP,Td);r(IMG_GEN_REPLACE_MAP,ha.A);B();pd(jc);console.debug("done beforeLoad "+Date.now());l.A=0})})();document.readyState===
"loading"?document.addEventListener("DOMContentLoaded",function(){de()}):de()})();}).call(this);
</script>
<meta name="surface-hint" content="desktop-responsive" data-hint="injected-ffc2e83d85">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AWS Streaming Architecture & GitHub Deployment Guide</title>
<script src="https://cdn.tailwindcss.com"></script>
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,1,0" rel="stylesheet">
<style>
@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300;400;500;700&display=swap');
body { font-family: 'Noto+Sans+KR', sans-serif; background-color: #f0f2f5; }
.aws-gradient { background: linear-gradient(135deg, #232f3e 0%, #000000 100%); }
.github-gradient { background: linear-gradient(135deg, #24292e 0%, #444d56 100%); }
.glass-morphism { background: rgba(255, 255, 255, 0.9); backdrop-filter: blur(10px); }
.tab-active { border-bottom: 4px solid #ff9900; color: #ff9900; }
.code-container::-webkit-scrollbar { width: 8px; }
.code-container::-webkit-scrollbar-thumb { background: #cbd5e1; border-radius: 4px; }
</style>
<!--
"/gen?prompt=Cloud+computing+infrastructure+with+glowing+data+packets+and+high+speed+networking+lines+dark+theme+futuristic&aspect=16:9"
"/gen?prompt=GitHub+logo+with+modern+web+deployment+concept+illustration+isometric+style&aspect=4:3"
"/gen?prompt=AWS+logo+and+GitHub+logo+connected+by+a+bridge+representing+deployment+automation&aspect=16:9"
"/image?query=GitHub+Pages+tutorial+screenshot+settings+panel&aspect=16:9"
-->
<style>*, ::before, ::after{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/* ! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com */*,::after,::before{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}::after,::before{--tw-content:''}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0px}.-bottom-6{bottom:-1.5rem}.-right-6{right:-1.5rem}.bottom-10{bottom:2.5rem}.left-1\/2{left:50%}.top-0{top:0px}.z-10{z-index:10}.z-50{z-index:50}.mx-auto{margin-left:auto;margin-right:auto}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.mb-1{margin-bottom:0.25rem}.mb-2{margin-bottom:0.5rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.mt-10{margin-top:2.5rem}.mt-8{margin-top:2rem}.mb-10{margin-bottom:2.5rem}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.h-12{height:3rem}.h-16{height:4rem}.h-2{height:0.5rem}.h-\[400px\]{height:400px}.h-full{height:100%}.max-h-\[500px\]{max-height:500px}.min-h-\[400px\]{min-height:400px}.w-12{width:3rem}.w-\[30\%\]{width:30%}.w-\[40\%\]{width:40%}.w-\[95\%\]{width:95%}.w-full{width:100%}.w-16{width:4rem}.max-w-3xl{max-width:48rem}.max-w-7xl{max-width:80rem}.max-w-none{max-width:none}.-translate-x-1\/2{--tw-translate-x:-50%;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes bounce{0%, 100%{transform:translateY(-25%);animation-timing-function:cubic-bezier(0.8,0,1,1)}50%{transform:none;animation-timing-function:cubic-bezier(0,0,0.2,1)}}.animate-bounce{animation:bounce 1s infinite}.cursor-not-allowed{cursor:not-allowed}.scroll-mt-24{scroll-margin-top:6rem}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.grid-cols-1{grid-template-columns:repeat(1, minmax(0, 1fr))}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-12{gap:3rem}.gap-2{gap:0.5rem}.gap-3{gap:0.75rem}.gap-4{gap:1rem}.gap-8{gap:2rem}.gap-6{gap:1.5rem}.space-y-12 > :not([hidden]) ~ :not([hidden]){--tw-space-y-reverse:0;margin-top:calc(3rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(3rem * var(--tw-space-y-reverse))}.space-y-2 > :not([hidden]) ~ :not([hidden]){--tw-space-y-reverse:0;margin-top:calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0.5rem * var(--tw-space-y-reverse))}.space-y-4 > :not([hidden]) ~ :not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6 > :not([hidden]) ~ :not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.whitespace-pre-wrap{white-space:pre-wrap}.break-all{word-break:break-all}.rounded{border-radius:0.25rem}.rounded-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-\[40px\]{border-radius:40px}.rounded-full{border-radius:9999px}.rounded-xl{border-radius:0.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-l-8{border-left-width:8px}.border-t{border-top-width:1px}.border-orange-500{--tw-border-opacity:1;border-color:rgb(249 115 22 / var(--tw-border-opacity, 1))}.border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249 / var(--tw-border-opacity, 1))}.border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1))}.border-slate-800{--tw-border-opacity:1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.border-white\/10{border-color:rgb(255 255 255 / 0.1)}.border-white\/20{border-color:rgb(255 255 255 / 0.2)}.bg-black\/50{background-color:rgb(0 0 0 / 0.5)}.bg-black\/60{background-color:rgb(0 0 0 / 0.6)}.bg-blue-400{--tw-bg-opacity:1;background-color:rgb(96 165 250 / var(--tw-bg-opacity, 1))}.bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.bg-green-400{--tw-bg-opacity:1;background-color:rgb(74 222 128 / var(--tw-bg-opacity, 1))}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-orange-50{--tw-bg-opacity:1;background-color:rgb(255 247 237 / var(--tw-bg-opacity, 1))}.bg-orange-500{--tw-bg-opacity:1;background-color:rgb(249 115 22 / var(--tw-bg-opacity, 1))}.bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1))}.bg-slate-700{--tw-bg-opacity:1;background-color:rgb(51 65 85 / var(--tw-bg-opacity, 1))}.bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\/10{background-color:rgb(255 255 255 / 0.1)}.object-cover{object-fit:cover}.p-10{padding:2.5rem}.p-12{padding:3rem}.p-2{padding:0.5rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-1{padding-left:0.25rem;padding-right:0.25rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.px-12{padding-left:3rem;padding-right:3rem}.px-3{padding-left:0.75rem;padding-right:0.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-1{padding-top:0.25rem;padding-bottom:0.25rem}.py-2{padding-top:0.5rem;padding-bottom:0.5rem}.py-3{padding-top:0.75rem;padding-bottom:0.75rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-5xl{font-size:3rem;line-height:1}.text-\[10px\]{font-size:10px}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:0.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:0.75rem;line-height:1rem}.font-black{font-weight:900}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-normal{font-weight:400}.uppercase{text-transform:uppercase}.italic{font-style:italic}.leading-relaxed{line-height:1.625}.leading-tight{line-height:1.25}.tracking-tight{letter-spacing:-0.025em}.text-blue-100{--tw-text-opacity:1;color:rgb(219 234 254 / var(--tw-text-opacity, 1))}.text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-orange-400{--tw-text-opacity:1;color:rgb(251 146 60 / var(--tw-text-opacity, 1))}.text-orange-500{--tw-text-opacity:1;color:rgb(249 115 22 / var(--tw-text-opacity, 1))}.text-slate-200{--tw-text-opacity:1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.text-slate-300{--tw-text-opacity:1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.text-slate-800{--tw-text-opacity:1;color:rgb(30 41 59 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-50{opacity:0.5}.opacity-80{opacity:0.8}.shadow-2xl{--tw-shadow:0 25px 50px -12px rgb(0 0 0 / 0.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgb(0 0 0 / 0.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)}.backdrop-blur-md{--tw-backdrop-blur:blur(12px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms}.duration-500{transition-duration:500ms}.hover\:border-orange-500:hover{--tw-border-opacity:1;border-color:rgb(249 115 22 / var(--tw-border-opacity, 1))}.hover\:bg-blue-500:hover{--tw-bg-opacity:1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.hover\:bg-orange-500:hover{--tw-bg-opacity:1;background-color:rgb(249 115 22 / var(--tw-bg-opacity, 1))}.hover\:bg-orange-600:hover{--tw-bg-opacity:1;background-color:rgb(234 88 12 / var(--tw-bg-opacity, 1))}.hover\:bg-white\/20:hover{background-color:rgb(255 255 255 / 0.2)}.hover\:bg-orange-50:hover{--tw-bg-opacity:1;background-color:rgb(255 247 237 / var(--tw-bg-opacity, 1))}.hover\:text-slate-800:hover{--tw-text-opacity:1;color:rgb(30 41 59 / var(--tw-text-opacity, 1))}.group:hover .group-hover\:bg-orange-200{--tw-bg-opacity:1;background-color:rgb(254 215 170 / var(--tw-bg-opacity, 1))}@media (min-width: 768px){.md\:block{display:block}.md\:grid-cols-2{grid-template-columns:repeat(2, minmax(0, 1fr))}}@media (min-width: 1024px){.lg\:col-span-2{grid-column:span 2 / span 2}.lg\:grid-cols-2{grid-template-columns:repeat(2, minmax(0, 1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3, minmax(0, 1fr))}}</style><link type="text/css" href="https://fonts.googleapis.com/css2?family=Google+Symbols:opsz,wght,FILL,GRAD,ROND@24,400,0,0,50&icon_names=link" rel="stylesheet"><style id="dyn-img-link-styles-di-script">
.dyn-img-link-wrapper-di-script {
anchor-scope: all;
display: contents;
position: relative;
z-index: 1;
}
.dyn-img-link-wrapper-di-script img {
anchor-name: --photo;
display: block;
max-width: 100%;
}
.dyn-img-link-di-script {
z-index: 999999;
background-color: rgba(0, 0, 0, 0.5);
border-radius: 9999px;
box-shadow: 0 1px 2px rgba(0,0,0,0.2);
color: white;
height: clamp(13px, calc(max(anchor-size(width), anchor-size(height)) * 0.3), 21px);
width: clamp(13px, calc(max(anchor-size(width), anchor-size(height)) * 0.3), 21px);
padding: 4px;
position: absolute;
bottom: anchor(bottom);
left: anchor(left);
margin-left: 10px;
margin-bottom: 10px;
transition: background-color 0.2s ease-in-out;
}
.dyn-img-link-di-script:hover {
background-color: rgba(0, 0, 0, 0.8);
}
.dyn-img-link-di-script span {
font-size: 14px;
vertical-align: top;
}
.dyn-img-attribution-button-di-script {
z-index: 999999;
background-color: rgba(0, 0, 0, 0.5);
border-radius: 9999px;
box-shadow: 0 1px 2px rgba(0,0,0,0.2);
color: white;
width: clamp(13px, calc(max(anchor-size(width), anchor-size(height)) * 0.3), 21px);
height: clamp(13px, calc(max(anchor-size(width), anchor-size(height)) * 0.3), 21px);
padding: 4px;
position: absolute;
position-anchor: --photo;
top: anchor(top);
right: anchor(right);
margin-top: 10px;
margin-right: 10px;
transition: background-color 0.2s ease-in-out;
display: flex;
align-items: center;
justify-content: center;
}
.dyn-img-attribution-button-di-script:hover {
background-color: rgba(0, 0, 0, 0.8);
}
.dyn-img-attribution-button-di-script span {
font-size: 14px;
vertical-align: top;
}
.dyn-img-inline-attribution-di-script {
z-index: 999999;
font-size: 12px;
padding: 4px;
display: none;
position: absolute;
position-anchor: --photo;
bottom: anchor(bottom);
right: anchor(right);
margin-bottom: 8px;
margin-right: 8px;
max-width: 200px;
overflow: hidden;
text-overflow: ellipsis;
text-align: right;
white-space: nowrap;
background-color: rgba(0, 0, 0, 0.8);
border-radius: 9999px;
box-shadow: 0 1px 2px rgba(0,0,0,0.2);
color: white;
}
</style></head>
<body class="text-slate-800 antialiased">
<!-- Top Navigation / Tabs -->
<nav class="sticky top-0 z-50 glass-morphism border-b border-slate-200">
<div class="max-w-7xl mx-auto px-6 flex items-center justify-between h-16">
<div class="flex items-center gap-2">
<span class="material-symbols-outlined text-orange-500 font-bold">cloud_upload</span>
<span class="font-extrabold text-xl tracking-tight">ARCH-DEPLOYER</span>
</div>
<div class="flex gap-8 h-full">
<button onclick="switchTab('arch')" id="tab-arch" class="px-4 font-bold text-sm h-full flex items-center transition-all">아키텍처 제안서</button>
<button onclick="switchTab('deploy')" id="tab-deploy" class="px-4 font-bold text-sm h-full flex items-center text-slate-500 transition-all tab-active">GitHub 배포 가이드</button>
</div>
<div class="hidden md:block">
<span class="text-xs bg-slate-100 text-slate-500 px-3 py-1 rounded-full border border-slate-200">v1.2.0 Stable</span>
</div>
</div>
</nav>
<!-- Main Content Area -->
<main class="max-w-7xl mx-auto py-8 px-6">
<!-- TAB 1: Architecture Proposal (Existing Content Enhanced) -->
<div id="content-arch" class="block space-y-12 hidden">
<header class="relative rounded-3xl overflow-hidden shadow-2xl h-[400px] flex items-center">
<img src="blob:https://1c7b6id0l3sxrwob3b5za8mu1j3hoffjlbxqifdzaty2kg9rq2-h852644758.scf.usercontent.goog/11168521-c9e6-4db7-b47c-edc69f691f25" alt="Hero" class="absolute inset-0 w-full h-full object-cover" style="">
<div class="absolute inset-0 bg-black/60"></div>
<div class="relative z-10 px-12 text-white max-w-3xl">
<h1 class="text-5xl font-black mb-4 leading-tight">대규모 스트리밍을 위한<br><span class="text-orange-400 font-black">Direct Return</span> 설계</h1>
<p class="text-lg text-slate-300">ALB의 병목을 제거하고 100대의 인스턴스가 클라이언트에 직접 데이터를 쏘아주는 최적의 네트워크 라우팅 기법을 연구합니다.</p>
<div class="mt-8 flex gap-4">
<button onclick="scrollToId('survey')" class="bg-orange-500 hover:bg-orange-600 px-8 py-3 rounded-xl font-bold transition-all shadow-lg">문진표 시작하기</button>
<button onclick="switchTab('deploy')" class="bg-white/10 hover:bg-white/20 px-8 py-3 rounded-xl font-bold backdrop-blur-md transition-all border border-white/20">GitHub에 바로 올리기</button>
</div>
</div>
</header>
<!-- Direct Answer & Logic -->
<div class="grid grid-cols-1 lg:grid-cols-3 gap-8">
<div class="lg:col-span-2 bg-white rounded-3xl p-10 shadow-sm border border-slate-100">
<h2 class="text-3xl font-bold mb-6 flex items-center gap-3">
<span class="material-symbols-outlined text-orange-500 bg-orange-50 p-2 rounded-xl">architecture</span>
최적의 아키텍처: Asymmetric Routing
</h2>
<div class="prose prose-slate max-w-none text-slate-600 leading-relaxed space-y-4">
<p>AWS ALB는 L7 Proxy로 동작하여 응답 데이터 역시 자신을 통과시키려 합니다. 대량의 동영상 트래픽(Outbound) 발생 시 ALB는 CPU 및 전송 비용 면에서 거대한 병목이 됩니다.</p>
<div class="bg-slate-50 p-6 rounded-2xl border-l-8 border-orange-500 my-6">
<h4 class="text-slate-800 font-bold text-lg mb-2">핵심 해결책: HTTP 302 Redirect 기법</h4>
<ol class="list-decimal list-inside space-y-2">
<li>클라이언트는 <b>ALB 도메인</b>으로 접속 (세션 및 인증 수행)</li>
<li>EC2 인스턴스는 인증 확인 후 <b>본인의 Public IP(또는 EIP)</b>를 포함한 302 주소를 반환</li>
<li>클라이언트는 ALB를 통하지 않고 <b>EC2 서버로 직접</b> 재요청하여 영상 데이터 수신</li>
</ol>
</div>
</div>
</div>
<div class="bg-slate-900 rounded-3xl p-8 text-white shadow-xl flex flex-col justify-between">
<div>
<h3 class="text-xl font-bold mb-4">예상 효율 개선도</h3>
<div class="space-y-6">
<div>
<div class="flex justify-between text-xs mb-1"><span>ALB 부하 감소율</span><span>95%</span></div>
<div class="w-full bg-slate-700 h-2 rounded-full overflow-hidden"><div class="bg-orange-500 h-full w-[95%]"></div></div>
</div>
<div>
<div class="flex justify-between text-xs mb-1"><span>전송 지연 시간(Latency) 개선</span><span>40%</span></div>
<div class="w-full bg-slate-700 h-2 rounded-full overflow-hidden"><div class="bg-blue-400 h-full w-[40%]"></div></div>
</div>
<div>
<div class="flex justify-between text-xs mb-1"><span>인프라 비용 절감 효과</span><span>30%</span></div>
<div class="w-full bg-slate-700 h-2 rounded-full overflow-hidden"><div class="bg-green-400 h-full w-[30%]"></div></div>
</div>
</div>
</div>
<div class="mt-10 pt-6 border-t border-slate-800">
<p class="text-xs text-slate-400 italic">"100대의 인스턴스가 각각 1Gbps를 쏠 때, ALB 한 대에 집중되는 트래픽을 분산하는 유일한 소프트웨어 정의 방법입니다."</p>
</div>
</div>
</div>
<!-- Questionnaire Section -->
<section id="survey" class="scroll-mt-24">
<div class="bg-white rounded-[40px] shadow-2xl border border-slate-100 overflow-hidden">
<div class="bg-slate-50 px-12 py-8 border-b border-slate-100 flex items-center justify-between">
<div>
<h3 class="text-2xl font-bold">아키텍처 결정 문진표</h3>
<p class="text-slate-500 text-sm">상황에 가장 적합한 전송 기술을 매칭해 드립니다.</p>
</div>
<div id="step-counter" class="text-orange-500 font-black text-4xl italic">01 <span class="text-slate-200 text-xl font-normal">/ 03</span></div>
</div>
<div class="p-12 min-h-[400px]" id="survey-content">
<div class="animate-in fade-in slide-in-from-right-4 duration-500">
<h4 class="text-3xl font-black text-slate-800 mb-10 leading-tight">주로 어떤 형식의 동영상을 전송하시나요?</h4>
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
<button onclick="selectOption('1', 'hls')" class="group flex items-center gap-6 p-8 border-2 border-slate-100 rounded-3xl text-left hover:border-orange-500 hover:bg-orange-50 transition-all ">
<div class="w-16 h-16 bg-slate-100 rounded-2xl flex items-center justify-center group-hover:bg-orange-200 transition-all">
<span class="material-symbols-outlined text-3xl text-slate-500">video_library</span>
</div>
<div>
<span class="block font-bold text-lg">표준 HTTP 스트리밍 (HLS, DASH)</span>
<span class="text-sm text-slate-400">상황에 가장 적합한 옵션</span>
</div>
</button>
<button onclick="selectOption('1', 'rtmp')" class="group flex items-center gap-6 p-8 border-2 border-slate-100 rounded-3xl text-left hover:border-orange-500 hover:bg-orange-50 transition-all ">
<div class="w-16 h-16 bg-slate-100 rounded-2xl flex items-center justify-center group-hover:bg-orange-200 transition-all">
<span class="material-symbols-outlined text-3xl text-slate-500">live_tv</span>
</div>
<div>
<span class="block font-bold text-lg">커스텀 실시간 전송 (RTMP, RTSP)</span>
<span class="text-sm text-slate-400">상황에 가장 적합한 옵션</span>
</div>
</button>
</div>
</div>
</div>
<div class="px-12 py-8 bg-slate-50 flex justify-between items-center">
<button id="survey-prev" onclick="moveStep(-1)" class="flex items-center gap-2 text-slate-400 font-bold hover:text-slate-800 transition-all opacity-50 cursor-not-allowed" disabled="">
<span class="material-symbols-outlined">arrow_back</span> 이전 단계
</button>
<button id="survey-next" onclick="moveStep(1)" class="bg-slate-900 text-white px-10 py-3 rounded-2xl font-bold hover:bg-orange-500 transition-all shadow-xl flex items-center gap-2">
다음으로 <span class="material-symbols-outlined">arrow_forward</span>
</button>
</div>
</div>
</section>
</div>
<!-- TAB 2: Deployment Guide (New Content) -->
<div id="content-deploy" class="space-y-12">
<div class="grid grid-cols-1 lg:grid-cols-2 gap-12 items-center">
<div>
<h2 class="text-4xl font-black mb-6">GitHub Pages로<br><span class="text-blue-600">1분 만에 배포하기</span></h2>
<p class="text-slate-600 text-lg mb-8">이 아키텍처 제안서를 동료들에게 공유하고 싶으신가요? GitHub 저장소에 코드를 올리는 것만으로 무료 호스팅 사이트를 가질 수 있습니다.</p>
<div class="space-y-4">
<div class="flex items-center gap-4 bg-white p-6 rounded-2xl border border-slate-100 shadow-sm">
<div class="w-12 h-12 bg-slate-900 text-white rounded-full flex items-center justify-center font-bold">1</div>
<div>
<h4 class="font-bold">저장소 생성</h4>
<p class="text-xs text-slate-500">GitHub에서 <span class="bg-slate-100 px-1 rounded">streaming-arch</span> 이름의 새 레포지토리를 만듭니다.</p>
</div>
</div>
<div class="flex items-center gap-4 bg-white p-6 rounded-2xl border border-slate-100 shadow-sm">
<div class="w-12 h-12 bg-slate-900 text-white rounded-full flex items-center justify-center font-bold">2</div>
<div>
<h4 class="font-bold">index.html 파일 업로드</h4>
<p class="text-xs text-slate-500">아래 코드를 복사하여 저장소에 파일을 생성합니다.</p>
</div>
</div>
<div class="flex items-center gap-4 bg-white p-6 rounded-2xl border border-slate-100 shadow-sm">
<div class="w-12 h-12 bg-slate-900 text-white rounded-full flex items-center justify-center font-bold">3</div>
<div>
<h4 class="font-bold">Pages 활성화</h4>
<p class="text-xs text-slate-500">Settings > Pages 메뉴에서 Branch를 main으로 선택하고 Save를 누릅니다.</p>
</div>
</div>
</div>
</div>
<div class="relative">
<img src="blob:https://1c7b6id0l3sxrwob3b5za8mu1j3hoffjlbxqifdzaty2kg9rq2-h852644758.scf.usercontent.goog/54ecedbe-be78-4605-8f61-005bba37a86b" alt="GitHub Deploy" class="rounded-[40px] shadow-2xl">
<div class="absolute -bottom-6 -right-6 bg-white p-6 rounded-3xl shadow-xl border border-slate-100">
<div class="text-center">
<p class="text-[10px] text-slate-400 uppercase font-bold mb-1">Estimated Time</p>
<p class="text-2xl font-black text-blue-600">60 Seconds</p>
</div>
</div>
</div>
</div>
<!-- Code Exporter -->
<div class="bg-slate-900 rounded-[40px] p-10 text-white shadow-2xl">
<div class="flex items-center justify-between mb-6">
<div class="flex items-center gap-3">
<span class="material-symbols-outlined text-blue-400">code</span>
<h3 class="text-2xl font-bold">배포용 소스 코드</h3>
</div>
<button onclick="copyFullCode()" class="flex items-center gap-2 bg-blue-600 hover:bg-blue-500 px-6 py-2 rounded-xl font-bold transition-all text-sm shadow-lg">
<span class="material-symbols-outlined text-sm">content_copy</span> 전체 코드 복사하기
</button>
</div>
<div class="code-container bg-black/50 rounded-2xl p-6 font-mono text-sm text-blue-100 overflow-y-auto max-h-[500px] border border-white/10">
<pre id="full-code-block" class="whitespace-pre-wrap break-all opacity-80"><!DOCTYPE html>
<html lang="ko">
... (현재 이 페이지의 전체 소스 코드가 복사됩니다) ...
</pre>
</div>
<div id="copy-toast" class="hidden fixed bottom-10 left-1/2 -translate-x-1/2 bg-green-500 text-white px-8 py-3 rounded-full font-bold shadow-2xl animate-bounce">
클립보드에 복사되었습니다!
</div>
</div>
</div>
</main>
<!-- Scripts -->
<script>
// Tab Switching Logic
function switchTab(tab) {
const archTab = document.getElementById('tab-arch');
const deployTab = document.getElementById('tab-deploy');
const archContent = document.getElementById('content-arch');
const deployContent = document.getElementById('content-deploy');
if (tab === 'arch') {
archTab.classList.add('tab-active');
deployTab.classList.remove('tab-active', 'text-slate-500');
archContent.classList.remove('hidden');
deployContent.classList.add('hidden');
window.scrollTo({ top: 0, behavior: 'smooth' });
} else {
deployTab.classList.add('tab-active');
archTab.classList.remove('tab-active', 'text-slate-500');
deployContent.classList.remove('hidden');
archContent.classList.add('hidden');
window.scrollTo({ top: 0, behavior: 'smooth' });
// Populate code block on first open
document.getElementById('full-code-block').innerText = document.documentElement.outerHTML;
}
}
function scrollToId(id) {
document.getElementById(id).scrollIntoView({ behavior: 'smooth' });
}
// Questionnaire Logic
const questions = [
{
id: 1,
q: "주로 어떤 형식의 동영상을 전송하시나요?",
options: [
{ text: "표준 HTTP 스트리밍 (HLS, DASH)", value: "hls", icon: "video_library" },
{ text: "커스텀 실시간 전송 (RTMP, RTSP)", value: "rtmp", icon: "live_tv" }
]
},
{
id: 2,
q: "현재 가장 큰 병목 포인트는 어디인가요?",
options: [
{ text: "ALB의 CPU/대역폭 한계", value: "alb_bottleneck", icon: "speed" },
{ text: "네트워크 전송 비용 (Data Transfer Out)", value: "dto_cost", icon: "payments" }
]
},
{
id: 3,
q: "시스템 아키텍처의 복잡도 감내 수준은?",
options: [
{ text: "조금 복잡해도 성능이 우선 (Redirect)", value: "perf", icon: "bolt" },
{ text: "단순한 관리가 최우선 (NLB)", value: "simple", icon: "settings_input_component" }
]
}
];
let currentStep = 1;
let answers = {};
function renderQuestion() {
const container = document.getElementById('survey-content');
const qData = questions[currentStep - 1];
if (!qData) {
renderResult();
return;
}
container.innerHTML = `
<div class="animate-in fade-in slide-in-from-right-4 duration-500">
<h4 class="text-3xl font-black text-slate-800 mb-10 leading-tight">${qData.q}</h4>
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
${qData.options.map(opt => `
<button onclick="selectOption('${qData.id}', '${opt.value}')"
class="group flex items-center gap-6 p-8 border-2 border-slate-100 rounded-3xl text-left hover:border-orange-500 hover:bg-orange-50 transition-all ${answers[qData.id] === opt.value ? 'border-orange-500 bg-orange-50' : ''}">
<div class="w-16 h-16 bg-slate-100 rounded-2xl flex items-center justify-center group-hover:bg-orange-200 transition-all">
<span class="material-symbols-outlined text-3xl ${answers[qData.id] === opt.value ? 'text-orange-600' : 'text-slate-500'}">${opt.icon}</span>
</div>
<div>
<span class="block font-bold text-lg">${opt.text}</span>
<span class="text-sm text-slate-400">상황에 가장 적합한 옵션</span>
</div>
</button>
`).join('')}
</div>
</div>
`;
document.getElementById('step-counter').innerHTML = `${currentStep < 10 ? '0' + currentStep : currentStep} <span class="text-slate-200 text-xl font-normal">/ 03</span>`;
const prevBtn = document.getElementById('survey-prev');
if (currentStep === 1) {
prevBtn.disabled = true;
prevBtn.classList.add('opacity-50', 'cursor-not-allowed');
} else {
prevBtn.disabled = false;
prevBtn.classList.remove('opacity-50', 'cursor-not-allowed');
}
}
function selectOption(qId, value) {
answers[qId] = value;
renderQuestion();
}
function moveStep(dir) {
if (dir === 1 && !answers[currentStep]) {
alert("답변을 선택해 주세요!");
return;
}
currentStep += dir;
renderQuestion();
}
function renderResult() {
const container = document.getElementById('survey-content');
document.getElementById('survey-next').classList.add('hidden');
document.getElementById('step-counter').innerHTML = "결과";
let title = "Asymmetric Direct Return (HTTP 302)";
let reason = "HTTP 프로토콜을 사용하며 성능이 최우선인 환경에 가장 추천됩니다. ALB는 오직 인증만을 담당하고 실제 데이터는 EC2가 직접 쏩니다.";
let imgPrompt = "high+speed+data+transfer+from+server+to+client+bypassing+hub";
if (answers[3] === 'simple') {
title = "High-Performance Network Load Balancer (NLB)";
reason = "복잡한 리다이렉트 설정보다는 초당 수천만 건을 처리하는 L4 로드밸런서 NLB를 통해 병목을 원천 차단하는 것이 합리적입니다.";
imgPrompt = "powerful+network+router+hardware+glowing+blue";
}
container.innerHTML = `
<div class="animate-in zoom-in-95 duration-700 text-center">
<div class="mb-8 flex justify-center">
<div class="w-32 h-32 bg-orange-500 rounded-full flex items-center justify-center text-white shadow-2xl">
<span class="material-symbols-outlined text-6xl">verified</span>
</div>
</div>
<h4 class="text-4xl font-black mb-4">추천: ${title}</h4>
<p class="text-slate-600 max-w-2xl mx-auto mb-10 text-lg">${reason}</p>
<div class="rounded-3xl overflow-hidden border-4 border-slate-100 shadow-xl max-w-xl mx-auto">
<img src="/gen?prompt=${imgPrompt}&aspect=16:9" alt="Result Illustration">
</div>
<button onclick="location.reload()" class="mt-12 text-slate-400 font-bold hover:text-orange-500 underline underline-offset-4">다시 시작하기</button>
</div>
`;
}
function copyFullCode() {
const code = document.documentElement.outerHTML;
navigator.clipboard.writeText(code).then(() => {
const toast = document.getElementById('copy-toast');
toast.classList.remove('hidden');
setTimeout(() => toast.classList.add('hidden'), 2000);
});
}
// Initial load
renderQuestion();
</script>
</body></html>
클립보드에 복사되었습니다!