Clase 1: Variedades diferenciables
Definición 1.1
Variedad
Definición 1.1: Variedad
\(M \subset \mathbb{R}^n\) es llamada variedad de dimensión \(m \, (m\leq n)\) si para todo \(p\in M\) existe un mapa suave \(\phi: V \rightarrow U\) donde \(U\) es una vecindad de \(p\) en \(M , V\) es abierto en \(\mathbb{R}^{m}, \, \phi\) es un homeomorfismo y \(D\phi_q\) es inyectiva para todo \(q\in V .\)
Aquel \(\phi\) es llamado parametrización y \(\phi^{-1}\) es llamada carta.
Si \(M \subset\mathbb{R}^{n}\) es una variedad de dimensión \(m\). se escribirá \(M^m \, .\) Además, se cumple \(dim M = m \,\) y \(\, codim M = n -m \, .\)
Ejemplos:
- \(S^n = \{ (x_1,x_2,\dots,x_{n+1}) \in \mathbb{R}^{n+1} \mid x_1^{2} + \dots + x_{n+1}^2 = 1 \}\) \(\quad dim(S^n) = n\)
- Los conjuntos discretos (ejemplo: \(\mathbb{Z}\)) son variedades de dimensión cero.
- Todo abierto no vacío \(U\subset\mathbb{R}^n\) es una variedad de dimensión \(n.\)
- Si \(U\subset M^m \subset\mathbb{R}^n\) es un abierto de la variedad \(M^m\), entonces \(U\) es una variedad.
- Para cualquier par de variedades \(M^m \subset\mathbb{R}^n\) y \(N^k \subset\mathbb{R}^p\), se cumple que \(M \times N \subset\mathbb{R}^{n+p}\) es una variedad de dimensión \(m+k \, .\)
- Si \(E\subset\mathbb{R}^n\) es un subespacio vectorial de dimensión \(k\), entonces \(E\) es una variedad de dimension \(k \, .\)
Clase 2: Aplicaciones diferenciables
Proposición 2.1
Proposición 2.1
Sean \(V_0\subset\mathbb{R}^m\) abierto, \(V\subset\mathbb{R}^n, \varphi: V_0 \rightarrow V\) una parametrización suave. Dado \(U_0 \subset\mathbb{R}^k\) abierto y \(f:U_0 \rightarrow V\) suave, entonces \(\varphi^{-1}: U_0 \rightarrow V_0\) es suave.
Definición 2.1
Mapa diferenciable
Definición 2.1: Mapa diferenciable
Dadas las variedades \(M^m\subset\mathbb{R}^{p}\) y \(N^n\subset\mathbb{R}^{k}\), diremos que un mapa \(f: M \rightarrow N\) es diferenciable en \(p\in M\) si existen parametrizaciones \(\varphi: U_0 \rightarrow U\) y \(\psi: V_0 \rightarrow V\) tales que:
- \(p\in U\)
- \(f(p) \in V\)
- \(f(U)\subset V\)
- \(\psi^{-1} \circ f \circ \varphi\,\) sea diferenciable en \(\,\varphi^{-1}(p)\, .\)
Teorema 2.1
Teorema 2.1
Si \(f:M\rightarrow N\) y \(g:N\rightarrow P\) son suaves, entonces \(g\circ f:M\rightarrow P\) es suave.
Definición 2.2
Subvariedad
Definición 2.2: Subvariedad
Sean las variedades \(M^m\subset\mathbb{R}^{k}\) y \(N^n \subset\mathbb{R}^{k}\). Diremos que \(N\) es una subvariedad de \(M\) si se cumple \(N\subset M\).
Observación: Se cumple \(m\geq n .\)
Ejercicio: Sean las variedades \(X,Y \text{ y } Z\), con \(X\subset Y\). Si \(f:Y \rightarrow Z\) y \(g:Z\rightarrow X\) son suaves, entonces \(f\kern-0.75ex\restriction_X : X \rightarrow Z\) y \(g: Z\rightarrow Y\) son suaves.
Definición 2.3
Difeomorfismo
Definición 2.3: Difeomorfismo
Cualquier biyección suave entre variedades será llamada difeomorfismo si su inversa también es suave.
Ejemplo: Toda parametrización es un difeomorfismo.
Teorema 2.2
Teorema 2.2
La composición de difeomorfismos es un difeomorfismo.
Definición 2.4
Variedades difeomorfas
Definición 2.4: Variedades difeomorfas
Diremos que dos variedades son difeomorfas si existe un difeomorfismo entre ellas.
Clase 3: Espacio tangente
Definición 3.1
Espacio tangente
Definición 3.1: Espacio tangente
Sean \(M^m\subset\mathbb{R}^n\) una variedad y \(\varphi: U_0 \rightarrow U\) una parametrización. Con \(p\in U, \varphi(q) = p\), el espacio tangente a \(M\) en \(p\) es \[
T_p M := D\varphi_q (\mathbb{R}^m) \, .
\]
Observación:
- \(T_p M\) es un espacio vectorial de dimensión \(m \, .\)
- \(D \varphi_q (e_i) = \frac{\partial\varphi}{\partial x^i} (q)\, .\)
- \(\left\{ \frac{\partial \varphi}{\partial x^1}(q), \, \dots \, \frac{\partial \varphi}{\partial x^m}(q) \right\}\) es una base de \(T_p M\, .\)
Proposición 3.1
Proposición 3.1
Dada una variedad \(M^m\subset\mathbb{R}^{n}\) y \(p\in M\), se cumple \[
T_p M = \{ \alpha'(0) \mid \alpha: (-\epsilon,\epsilon)\rightarrow M
\text{ es un camino suave que satisface } \alpha(0) = p\} \, .
\]
Demostración:
\((\subseteq)\)
Sea \(v\in T_p M\), existen \(\varphi: U_0 \rightarrow U \ni p\) parametrización y \(u\in \mathbb{R}^m\) tal que \(v = D\varphi_q (u),\, \varphi(q) = p\).
\(\Rightarrow v = D\varphi_q (u) = \frac{\partial\varphi}{\partial u}(q) = \displaystyle{\lim_{t\to \,0}} \, \frac{\varphi(q+tu) - \varphi(q)}{t}\).
\(\alpha(t) := \varphi(q+tu) \Rightarrow \alpha'(0) = D\varphi_q (u) \, .\)
\((\supseteq)\)
Se tiene un camino suave \(\alpha: (-\epsilon,\epsilon)\rightarrow M, \,\, \alpha(0) = p \, .\)
Escogemos una parametrización \(\varphi: \mathbb{R}^m \rightarrow U\ni p, \,\, \varphi(0) = p \,.\)
Definimos \(\beta = \varphi^{-1}\circ\alpha: (-\epsilon,\epsilon)\rightarrow\mathbb{R}^{m}\)
\(\Rightarrow \alpha = \varphi\circ\beta\)
\(\Rightarrow \alpha '(0)= D\varphi_{\beta(0)} \beta'(0)\)
\(\Rightarrow \alpha'(0) = D\varphi_0 (\beta'(0))\)
\(\Rightarrow \alpha'(0)\in D\varphi_0 (\mathbb{R}^m) \,\, .\)
Ejemplos:
- Si \(U\subset\mathbb{R}^{n}\) es un abierto no vacío, entonces para todo \(p\in U\) se cumple \(T_p U = \mathbb{R}^n\,\, .\)
- \(T_p S^n = \{ v\in\mathbb{R}^{n+1} \mid \langle v,p\rangle = 0 \}\)
Proposición 3.2
Proposición 3.2
Si \(E\) es un subespacio vectorial de \(\mathbb{R}^{n},\) entonces para todo \(p \in U\) (abierto en \(E\)) se tiene \(T_p E = E\,\, .\)
Clase 4: Derivada
Sea \(f: U\rightarrow V, f\in C^{\infty}, p\in U \\ Df_p u = (f\circ\alpha)'(0), \text{ donde } \alpha'(0) = u \text{ y } \alpha(0) = p, \\ p\in U, \exists \; r>0 \text{ tal que } B(p,r) \subset U, \text{ con } \alpha(t) = p +tu, \text{ donde } \lvert t \rvert < \epsilon\, .\)
Definición 4.1
Derivada
Definición 4.1: Derivada
Sea \(f:M \rightarrow N\) suave tal que \(f(p) = q .\) La derivada de \(f\) en \(p\) es el operador:
\[
Df_p: T_p M \rightarrow T_q N \\
\hspace{5.5em} v \hspace{1em}\mapsto (f\circ \alpha)'(0)
\]
donde \(\alpha: (-t,t) \rightarrow M\) es suave y se tiene \(\alpha(0) = p \ \) y \(\ \alpha(0)' = v \, .\)
\(Df_p (v)\) no depende del camino \(\alpha\), sino de la parametrización \(\varphi \ .\)
Teorema 4.1
Teorema 4.1
Sean \(M,N \text{ y } P\) variedades, \(f:M \rightarrow N \text{ y } g:N\rightarrow P\) suaves, y \(f(p)=q\), entonces se cumple \[
D(g\circ f)_p = Dg_q \circ Df_p\, .
\]
Demostración:
\(D(g\circ f)_p: T_p M \rightarrow T_{g(q)}P\)
Sea \(\alpha: (-\epsilon,\epsilon) \rightarrow M\) suave, tal que \(\alpha(0)=p\) y \(\alpha'(0)=u .\)
\(\Rightarrow D(g\circ f)_p (u)= (g\circ \underbrace{f \circ \alpha)'}_{\beta}(0)\) \(= Dg_q (f\circ \alpha)'(0)=Dg_q Df_p u \, .\)
Ejercicio:
Sea \(M\) una variedad, entonces se cumple \(D(\text{ Id })_p = \text{ Id }_{T_p M} \, .\)
Corolario 4.2
Corolario 4.2
Sean \(M,N\) variedades y \(f: M\rightarrow N\) es un difeomorfismo, entonces \(Df_p\) es un isomorfismo para \(p\in M.\) Más aún, si \(f(p)=q\), entonces se tiene \(Df^{-1}_q = (Df_p)^{-1} \, .\)
Demostración:
\(f\circ f^{-1} = \text{ Id}_N\)
\(\Rightarrow D(f\circ f^{-1})_q = \text{ Id}_{T_q N}\) \(\Rightarrow Df_p Df^{-1}_q = \text{ Id}_{T_q N} \, .\)
Análogamente:
\(Df^{-1}_q Df_p = \text{ Id}_{T_p M}\)
\(Df_p\) es un isomorfismo y \((Df_p)^{-1}\) vale \(Df^{-1}_q \, .\)
Clase 5: Teoremas de la función inversa y del valor regular
Teorema 5.1
De la función inversa
y formas locales
Teorema de la función inversa y formas locales
Sean \(M\) y \(N\) variedades, \(p\in M, f:M \rightarrow N\) suave y \(Df_p\) es un isomorfismo. Entonces existen \(U\ni p\) abierto en \(M\) y \(V\ni f(p)\) abierto en \(N\) tales que \(f:U \rightarrow V\) es un difeomorfismo.
Corolario 5.2
Corolario 5.2
Si \(M\) y \(N\) son variedades, \(f:M\rightarrow N\) es suaves, biyección y \(Df_p\) es un isomorfismo para todo \(p\in M\), entonces \(f\) es un difeomorfismo.
Demostración:
Como \(f\) es biyección, existe \(f^{-1}\).
\(\exists\, U\ni p \ \) y \(\ V\ni f(p)\) tal que \(f_{\restriction_U}\) es difeomorfismo.
\[
(f_{\restriction_U})^{-1} = f^{-1}_{\restriction_V}
\Rightarrow f^{-1}_{\restriction_V} \text{ es diferenciable }
\Rightarrow f^{-1} \text{ es diferenciable. }
\]
Definición 5.1
Mapas suaves
equivalentes
Definición 5.1: Mapas suaves equivalentes
Sean \(M,N, \widetilde{M}\) y \(\widetilde{N}\) variedades. Dos mapas suaves \(f:M \rightarrow N\) y \(g:\widetilde{M} \rightarrow\widetilde{N}\) son llamados equivalentes si existen difeomorfismos \(\varphi:M\rightarrow\widetilde{M}\) y \(\phi:N\rightarrow\widetilde{N}\) tal que el siguiente diagrama es conmutativo:
Es decir:
\(\phi\circ f = g\circ\varphi \, .\)
Corolario 5.3
Corolario 5.3
Sean \(M\) y \(N\) variedades, \(f:M\rightarrow N\) suave, \(p\in M,q\in M\) con \(q=f(p)\) y \(Df_p\) isomorfismo. Entonces f es localmente equivalente en \(p\) a la función identidad.
Demostración:
Sabemos que existen vecindades \(U\) y \(V\), de \(p\) y \(q\) respectivamente.
Además, se tienen parametrizaciones \(\varphi\) y \(\phi\) de \(M\) y \(N\) respectivamente, tales que mapean ciertas vecindades \(\widetilde{U}\) hacia \(U\), y \(\widetilde{V}\) hacia \(V\), en el orden respectivo.
Así, \(f:U\rightarrow V\) es un difeomorfismo, entonces \(\widetilde{f}:\widetilde{U}\rightarrow\widetilde{V}\) también lo es.
Para concluir, basta notar el siguiente diagrama conmutativo:

Definición 5.2
Inmersión
Definición 5.2: Inmersión
Sean \(M\) y \(N\) variedades con \(f:M\rightarrow N\) suave. \(f\) es una inmersión si \(Df_p\) es inyectiva para todo \(p\in M \, .\)
Ejemplo:
Sean \(U,V\) abiertos en \(\mathbb{R}^{m}\) y \(\mathbb{R}^n\) respectivamente, con \(0\in V.\) Entonces la siguiente inclusión es una inmersión: \[
i:U\rightarrow U\times V \\
\hspace{0.8em} x \hspace{0.8ex}\mapsto (x,0)
\]
Teorema 5.4
Teorema 5.4
Sean \(M\) y \(N\) variedades, \(f:M\rightarrow N\) suave, \(p\in M\) y \(q=f(p).\) Si \(Df_p\) es inyectiva, entonces \(f\) es localmente equivalente a la inclusión.
Definición 5.3
Mapa propio
Definición 5.3: Mapa propio
Sean \(M, N\) variedades y \(f:M\rightarrow N\) un mapa suave. El mapa \(f\) es propio si y solo si \(f^{-1}(K)\) es compacto para todo \(K\subset N\) compacto.
Proposición 5.5
Proposición 5.5
Todo mapa suave y propio es cerrado.
Definición 5.4
Encaje
Definición 5.4: Encaje
Un mapa es llamado encaje si es propio, inmersión e inyectivo.
Teorema 5.6
Teorema 5.6
Si \(f:M\rightarrow N\) es un encaje, entonces \(f(M)\) es una subvariedad.
Corolario 5.7
Corolario 5.7
Si \(f:M\rightarrow N\) es una inmersión inyectiva y \(M\) es compacto, entonces \(f(M)\subset N\) es una variedad.
Definición 5.5
Sumersión
Definición 5.5: Sumersión
Un mapa \(f:M\rightarrow N\) es una sumersión si \(Df_p\) es sobreyectiva para todo \(p\in M \, .\)
Ejemplo:
\(U\subset \mathbb{R}^m\) abierto, \(V\subset\mathbb{R}^n\) abierto. Entonces se tiene la sumersión \[
\pi: U\times V \rightarrow U \\
\kern2em(x,y) \mapsto x
\]
Teorema 5.8
Teorema 5.8
\(f:M\rightarrow N\) suave, \(p\in M, f(p)=q\) y \(Df_p\) sobreyectiva. Entonces \(f\) es localmente equivalente a la función proyección.
Definición 5.6
Valor regular
Definición 5.6: Valor regular
Sea \(f:M\rightarrow N\) suave. \(q\in N\) es llamado valor regular si \(Df_p\) es sobreyectivo para todo \(p\in f^{-1}(q)\, .\)
Teorema 5.9
Del valor regular
Teorema 5.9: Del valor regular
Si \(q\in N\) es un valor regular del mapa suave \(f:M^{m}\rightarrow N^{n}\), entonces \(f^{-1}(q)\) es una variedad con \(dim(f^{-1}(q)) = m-n\).
Además, se cumple \(T_p f^{-1}(q) = Ker(Df_p) \, .\)
Ejemplos:
\(f:\mathbb{R}^{\overline{m+1}} \rightarrow\mathbb{R}\)
\(\kern2em x \kern1em\mapsto \lVert x\rVert^2=x_{1}^2 +\cdots+x_{m+1}^2\)
\(Jf(x) = (2x_1,\cdots,2x_{m+1})\) \(Df_p:\mathbb{R}^{m+1}\rightarrow\mathbb{R} \Rightarrow\) Entonces \(Df_p\) es sobreyectiva si \(p \neq 0\) y \(1\in \mathbb{R}\).
\(\Rightarrow f^{-1}(1)\) es una variedad de dimensión \(m\) y se cumple \(T_pf^{-1}(1) = Ker(Df_p) = {p}^{\perp}\)
\(f:\mathbb{R}^2 \rightarrow\mathbb{R}\)
\((x,y) \mapsto y^2 \\ \)
\(f^{-1}(0) = \mathbb{R}\times \{0\} \Rightarrow\) \(Df_p = (0,2y) \, .\)
Si \(p\in f^{-1}(0) \Rightarrow y=0\, .\)
\(\varphi:\mathbb{R}^{n\times n} \rightarrow S_n\)
\(\kern2em A\kern0.5em\mapsto A A^T \\ \)
\(\varphi^{-1}(I) =O_n .\) Sea \(A\in\varphi^{-1}(I) \,.\)
\(D\varphi_A(M) = \displaystyle{\lim_{h\to 0}\,} \frac{\varphi(A+hM)-\varphi(M)}{h}\) \(= AM^T + MA^T \, . \\ \)
\(D\varphi_A : \mathbb{R}^{n\times n}\rightarrow S_n\)
Sea \(C\in S_n\), considerando \(M=\frac{CA}{2} \, .\\ \)
\(\Rightarrow D\varphi_A (M) = \frac{A A^T C}{2} + \frac{CA}{2}A^T\) \(= \frac{C}{2} + \frac{C}{2} = C\)
\(\Rightarrow O_n\) es una variedad de dimensión \(n^2 - \frac{n(n+1)}{2} = \frac{n(n-1)}{2}\, .\)
\(T_I (O_n) = Ker(D\varphi_I)\)
Sea \(M\in Ker(D_\varphi(I))\)
\(\Rightarrow D\varphi_I (M) = M+M^T = 0 \Rightarrow M=-M^T \,.\) \(T_I O_n = \text{ conjunto de matrices antisimétricas }\).
¿El conjunto \(SO_n = \{A\in O_n \,\mid\, det(A) = 1\}\) es una variedad?
Se tiene \(T_I (SO_n) = \{ A\in\mathbb{R}^{n\times n} \,\mid\, A^T = -A \}\)
\(\varphi=det: \overbrace{\mathbb{R}^n \times\cdots\times\mathbb{R}^n}^{n \text{ veces}}\) \(\rightarrow\mathbb{R}\)
\(U = (u_1,\cdots,u_n) \mapsto det([u_1 \,\lvert\, \cdots \,\rvert\, u_n])\)
Si \(V = [v_1 \,\lvert\, \cdots \,\rvert\, v_n]\), entonces se tiene
\(D\varphi_U (V) = \displaystyle{\sum_{k=1}^{n} det([u_1 \,\lvert\, \cdots \,\rvert\, u_{k-1}\,\lvert\, v_k \,\rvert\, u_{k+1}\,\lvert\,\cdots\,\rvert\,u_n])}\)
Sea \(U\in\varphi^{-1}(1) \Rightarrow D\varphi_U(U) = n\, .\)
Sea \(\alpha\in\mathbb{R} \Rightarrow D\varphi_U (\frac{\alpha}{n}U) =\) \(\frac{\alpha}{n}\cdot n = \alpha \Rightarrow D\varphi_U\) es sobreyectiva.
Entonces \(\varphi^{-1}(1) = SL_n\) es una variedad de dimensión \(n^2 -1\) y se cumple \(T_I (SL_n) = \{ A\in \mathbb{R}^{n\times n} \,\mid\, tr(A) = 0\} \, .\)
Clase 6: Grupos de Lie
\(\underline{\text{Grupos y variedades:}} \; GL_n, O_n, SL_n, \{I_n\} \, .\)
Definición 6.1
Grupo de Lie
Definición 6.1: Grupo de Lie
Un subgrupo \(G\subset GL_n\) es llamado grupo de Lie si es una variedad.
Definición 6.2
Corchetes de Lie
Definición 6.2: Corchetes de Lie
Los corchetes de Lie de \(A,B \in\mathbb{R}^{nxn}\) es:
\[
[A,B] := AB - BA
\]
Propiedades:
\([A,B] = -[B,A]\)
\([A+A',B] = [A,B] + [A',B]\)
\([A,B+B'] = [A,B] + [A,B']\)
\([\alpha A, B] = [A,\alpha B] = \alpha [A,B]\)
\([A,[B,C]] + [C,[A,B]] + [B,[C,A]] = 0\)
Definición 6.3
Álgebra de Lie
Definición 6.3: Álgebra de Lie
\(E\subset\mathbb{R}^{n\times n}\) es llamado álgebra de Lie si es un espacio vectorial y \([A,B]\in E\) para todo \(A,B\in E\, .\)
Ejemplos:
\(T_I O_n =\) matrices antisimétricas.
\(T_I SL_n =\) traza nula.
\(T_I GL_n = \mathbb{R}^{n\times n}\, .\)
\(T_I(\{I_n\}) = \{0\} \, .\)
Definición 6.4
Exponencial de
una matriz
Definición 6.4: Exponencial de una matriz
Si \(A\in\mathbb{R}^{n\times n}\), la exponencial de A es \[
exp(A) = e^{A} := \displaystyle{\sum_{k=0}^{\infty} \frac{1}{k!} A^k}\, .
\]
Propiedades:
Si \(AB = BA\), entonces \(e^{A+B} = e^{A} e^{B}\)
\(e^{(s+t)A} = e^{sA}\cdot e^{tA}\) para todo \(s,t\in\mathbb{R}\,.\)
\(e^{O} = I\, .\)
\(e^{-A} = (e^{A})^{-1} \,.\)
\(\frac{d\, e^{tA}}{d\,t} = A e^{tA} \, .\)
Lema 6.1
Lema 6.1
Si \(M\subset\mathbb{R}^{n}\) es una variedad y \(v:M\rightarrow\mathbb{R}^n\) un mapa suave tal que \(v(p)\in T_p M\) para todo \(p\in M\, .\) Para cada \(p\in M\) existen \(c>0\) y \(\lambda:(-c,c)\rightarrow M\) suave tal que \(\lambda(0)= p\) y \(\lambda'(t) = v(\lambda(t))\). Si \(\mu:(-d,d)\rightarrow M\) es suave, \(\mu(0)=p\) y \(\mu'(t)=v(\mu(t))\), entonces existe \(\delta >0\) tal que \(\lambda\) y \(\mu\) coinciden en el intervalo \((-\delta,\delta) \, .\)
Proposición 6.2
Proposición 6.2
Si \(G\subset GL_n\) es un grupo de Lie y \(A\in T_I G\), entonces \(e^{tA}\in G\) para todo \(t\in\mathbb{R}\,.\)
Proposición 6.3
Proposición 6.3
El espacio tangente en \(I\) de un grupo de Lie \(G\) es un álgebra de Lie.
LS0tDQp0aXRsZTogIkN1cnNvIEdFTTogVmFyaWVkYWRlcyBkaWZlcmVuY2lhYmxlcyIgDQphdXRob3I6IA0KICAtICJEaWN0YTogSmFmZXIgR3V0aWVycmV6Ig0KICAtICJUaXBlYTogTHVjaW8gQ29ybmVqbyINCmhlYWRlci1pbmNsdWRlczoNCiAgICAtIFx1c2VwYWNrYWdle3VuaWNvZGUtbWF0aH0NCiAgICAtIFx1c2VwYWNrYWdle2Ftc3N5bWJ9DQogICAgLSBcdXNlcGFja2FnZXtyYWdnZWQyZX0NCiAgICAtIFx1c2VwYWNrYWdle2Ftc21hdGh9DQpvdXRwdXQ6DQogICAgaHRtbF9ub3RlYm9vazoNCiAgICAgICAgdG9jOiBUUlVFDQogICAgICAgIHRvY19mbG9hdDogVFJVRQ0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGQUxTRSkNCmBgYA0KDQpgYGB7Y3NzfQ0KLmRlZiB7DQogZm9udC1zaXplOiAxLjJlbTsgDQogY29sb3I6ICM0NTdjOGY7DQp9DQpoMltjbGFzcz0iZGVmIl0gew0KICB2aXNpYmlsaXR5OiBoaWRkZW47DQogIG1hcmdpbi1ib3R0b206IC00OHB4Ow0KfQ0KDQoucHJvcCB7DQogZm9udC1zaXplOiAxLjJlbTsgDQogY29sb3I6ICNmZjNiM2I7DQp9DQpoMltjbGFzcz0icHJvcCJdIHsNCiAgdmlzaWJpbGl0eTogaGlkZGVuOw0KICBtYXJnaW4tYm90dG9tOiAtMzBweDsNCn0NCg0KI3Byb29mIHsNCiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KICBtYXJnaW4tYm90dG9tOiAtMjBweDsNCn0NCg0KYm9keSB7DQogIGJhY2tncm91bmQtaW1hZ2U6IHJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoNDE4ZGVnLCByZ2JhKDEwNSwxMDUsMTA1LCAwLjAzKSAwcHgsIHJnYmEoMTA1LDEwNSwxMDUsIDAuMDMpIDEycHgsdHJhbnNwYXJlbnQgMTJweCwgdHJhbnNwYXJlbnQgMTNweCxyZ2JhKDEwNSwxMDUsMTA1LCAwLjAzKSAxM3B4LCByZ2JhKDEwNSwxMDUsMTA1LCAwLjAzKSAxOHB4LHRyYW5zcGFyZW50IDE4cHgsIHRyYW5zcGFyZW50IDI2cHgpLHJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoMzUzZGVnLCByZ2JhKDEwNSwxMDUsMTA1LCAwLjAzKSAwcHgsIHJnYmEoMTA1LDEwNSwxMDUsIDAuMDMpIDZweCx0cmFuc3BhcmVudCA2cHgsIHRyYW5zcGFyZW50IDE0cHgscmdiYSgxMDUsMTA1LDEwNSwgMC4wMykgMTRweCwgcmdiYSgxMDUsMTA1LDEwNSwgMC4wMykgMjZweCx0cmFuc3BhcmVudCAyNnB4LCB0cmFuc3BhcmVudCAzOHB4KSxyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDU5NWRlZywgcmdiYSgxMDUsMTA1LDEwNSwgMC4wMykgMHB4LCByZ2JhKDEwNSwxMDUsMTA1LCAwLjAzKSAxMnB4LHRyYW5zcGFyZW50IDEycHgsIHRyYW5zcGFyZW50IDE1cHgscmdiYSgxMDUsMTA1LDEwNSwgMC4wMykgMTVweCwgcmdiYSgxMDUsMTA1LDEwNSwgMC4wMykgMjBweCx0cmFuc3BhcmVudCAyMHB4LCB0cmFuc3BhcmVudCAzMHB4KSxyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDQxOGRlZywgcmdiYSgxMDUsMTA1LDEwNSwgMC4wMykgMHB4LCByZ2JhKDEwNSwxMDUsMTA1LCAwLjAzKSA1cHgsdHJhbnNwYXJlbnQgNXB4LCB0cmFuc3BhcmVudCA3cHgscmdiYSgxMDUsMTA1LDEwNSwgMC4wMykgN3B4LCByZ2JhKDEwNSwxMDUsMTA1LCAwLjAzKSAxMnB4LHRyYW5zcGFyZW50IDEycHgsIHRyYW5zcGFyZW50IDIzcHgpLHJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoNjAwZGVnLCByZ2JhKDEwNSwxMDUsMTA1LCAwLjAzKSAwcHgsIHJnYmEoMTA1LDEwNSwxMDUsIDAuMDMpIDZweCx0cmFuc3BhcmVudCA2cHgsIHRyYW5zcGFyZW50IDE3cHgscmdiYSgxMDUsMTA1LDEwNSwgMC4wMykgMTdweCwgcmdiYSgxMDUsMTA1LDEwNSwgMC4wMykgMjhweCx0cmFuc3BhcmVudCAyOHB4LCB0cmFuc3BhcmVudCAyOXB4KSxyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDQxMmRlZywgcmdiYSgxMDUsMTA1LDEwNSwgMC4wMykgMHB4LCByZ2JhKDEwNSwxMDUsMTA1LCAwLjAzKSA2cHgsdHJhbnNwYXJlbnQgNnB4LCB0cmFuc3BhcmVudCA3cHgscmdiYSgxMDUsMTA1LDEwNSwgMC4wMykgN3B4LCByZ2JhKDEwNSwxMDUsMTA1LCAwLjAzKSAxMnB4LHRyYW5zcGFyZW50IDEycHgsIHRyYW5zcGFyZW50IDIxcHgpLGxpbmVhci1ncmFkaWVudCgzNjBkZWcsIHJnYigyMzksMjM1LDIzNSkscmdiKDIzOSwyMzUsMjM1KSk7DQogIGZvbnQtc2l6ZTogMTZweDsNCiAgbGluZS1oZWlnaHQ6IDIycHQ7DQp9DQoNCi8qIFRhYmxlIG9mIGNvbnRlbnRzICovDQoudG9jaWZ5IHtib3JkZXI6IG5vbmU7fQ0KLnRvY2lmeSAudG9jaWZ5LWhlYWRlciB7DQogIG1hcmdpbjogMzBweDsNCiAgZm9udC1zaXplOiAxNHB4Ow0KfQ0KW2RhdGEtdGFnPSIyIl0gPiBsaSB7DQogIGJvcmRlci10b3A6IDJweCBzb2xpZCB3aGl0ZTsNCn0NCltkYXRhLXVuaXF1ZSo9Il9EZWZpbmljacOzbl8iXXsNCiAgY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7DQogIGJhY2tncm91bmQ6ICM0NTdjOGYgIWltcG9ydGFudDsNCn0NCltkYXRhLXVuaXF1ZSo9Il9UZW9yZW1hXyJdLFtkYXRhLXVuaXF1ZSo9Il9Db3JvbGFyaW9fIl0sW2RhdGEtdW5pcXVlKj0iX1Byb3Bvc2ljacOzbl8iXSxbZGF0YS11bmlxdWUqPSJfTGVtYV8iXXsNCiAgY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7DQogIGJhY2tncm91bmQ6ICNmZjNiM2IgIWltcG9ydGFudDsNCn0NCmBgYA0KDQpcbmV3Y29tbWFuZHtcc3VicmV9e1xzdWJzZXRcbWF0aGJie1J9fQ0KXG5ld2NvbW1hbmR7XGZkfXtccmlnaHRhcnJvd30NCg0KXA0KDQojIENsYXNlIDE6IFZhcmllZGFkZXMgZGlmZXJlbmNpYWJsZXMNCg0KPGgyIGNsYXNzPSJkZWYiPiBEZWZpbmljacOzbiAxLjE8YnIvPiZlbXNwOyZuYnNwOyBWYXJpZWRhZDwvaDI+DQo8cCBjbGFzcz0iZGVmIj4gRGVmaW5pY2nDs24gMS4xOiBWYXJpZWRhZDwvcD4NClwoIE0gXHN1YnNldCBcbWF0aGJie1J9Xm4gXCkNCmVzIGxsYW1hZGEgKip2YXJpZWRhZCoqIGRlIGRpbWVuc2nDs24gDQpcKCBtIFwsIChtXGxlcSBuKVwpDQpzaSBwYXJhIHRvZG8gIFwoIHBcaW4gTSBcKQ0KZXhpc3RlIHVuIG1hcGEgc3VhdmUNClwoIFxwaGk6IFYgXHJpZ2h0YXJyb3cgVSBcKQ0KZG9uZGUgXCggVSBcKSBlcyB1bmEgdmVjaW5kYWQgZGUgXCggcCBcKQ0KZW4gXCggTSAsIFYgXCkgZXMgYWJpZXJ0byBlbiANClwoIFxtYXRoYmJ7Un1ee219LCBcLCBccGhpIFwpIGVzIHVuIGhvbWVvbW9yZmlzbW8NCnkgXCggRFxwaGlfcSBcKSBlcyBpbnllY3RpdmEgcGFyYSB0b2RvIA0KXCggcVxpbiBWIC4gXCkNCg0KQXF1ZWwgXCggXHBoaSBcKSBlcyBsbGFtYWRvICoqcGFyYW1ldHJpemFjacOzbioqIA0KeSBcKCBccGhpXnstMX0gXCkgZXMgbGxhbWFkYSAqKmNhcnRhKiouDQoNClNpIFwoIE0gXHN1YnJlXntufSBcKSBlcyB1bmEgdmFyaWVkYWQgZGUgZGltZW5zacOzbiBcKCBtIFwpLg0Kc2UgZXNjcmliaXLDoSBcKCBNXm0gXCwgLlwpIEFkZW3DoXMsIHNlIGN1bXBsZQ0KXCggZGltIE0gPSBtIFwsIFwpIHkgXCggXCwgY29kaW0gTSA9IG4gLW0gXCwgLlwpDQoNClwNCg0KKioqRWplbXBsb3M6KioqDQoNCi0gXCggU15uID0gXHsgKHhfMSx4XzIsXGRvdHMseF97bisxfSkgXGluIFxtYXRoYmJ7Un1ee24rMX0gXG1pZCB4XzFeezJ9ICsgXGRvdHMgKyB4X3tuKzF9XjIgPSAxIFx9IFwpDQpcKCBccXVhZCBkaW0oU15uKSA9IG4gXCkNCi0gTG9zIGNvbmp1bnRvcyBkaXNjcmV0b3MgKGVqZW1wbG86IFwoIFxtYXRoYmJ7Wn0gXCkpIHNvbiB2YXJpZWRhZGVzDQpkZSBkaW1lbnNpw7NuIGNlcm8uDQotIFRvZG8gYWJpZXJ0byBubyB2YWPDrW8gXCggVVxzdWJyZV5uIFwpIGVzIHVuYSB2YXJpZWRhZCBkZSBkaW1lbnNpw7NuIFwoIG4uIFwpDQotIFNpIFwoIFVcc3Vic2V0IE1ebSBcc3VicmVebiBcKSBlcyB1biBhYmllcnRvIGRlIGxhIHZhcmllZGFkDQpcKCBNXm0gXCksIGVudG9uY2VzIFwoIFUgXCkgZXMgdW5hIHZhcmllZGFkLg0KLSBQYXJhIGN1YWxxdWllciBwYXIgZGUgdmFyaWVkYWRlcyBcKCBNXm0gXHN1YnJlXm4gXCkgeSBcKCBOXmsgXHN1YnJlXnAgXCksDQpzZSBjdW1wbGUgcXVlIFwoIE0gXHRpbWVzIE4gXHN1YnJlXntuK3B9XCkgZXMgdW5hIHZhcmllZGFkIGRlIGRpbWVuc2nDs24NClwoIG0rayBcLCAuIFwpDQotIFNpIFwoIEVcc3VicmVebiBcKSBlcyB1biBzdWJlc3BhY2lvIHZlY3RvcmlhbCBkZSBkaW1lbnNpw7NuIFwoIGsgXCksIA0KZW50b25jZXMgXCggRSBcKSBlcyB1bmEgdmFyaWVkYWQgZGUgZGltZW5zaW9uIFwoIGsgXCwgLlwpDQoNClwNCg0KIyBDbGFzZSAyOiBBcGxpY2FjaW9uZXMgZGlmZXJlbmNpYWJsZXMNCg0KPGgyIGNsYXNzPSJwcm9wIj5Qcm9wb3NpY2nDs24gMi4xPC9oMj4NCjxwIGNsYXNzPSJwcm9wIj5Qcm9wb3NpY2nDs24gMi4xPC9wPg0KU2VhbiBcKCBWXzBcc3VicmVebSBcKSBhYmllcnRvLA0KXCggVlxzdWJyZV5uLCBcdmFycGhpOiBWXzAgXHJpZ2h0YXJyb3cgViBcKSB1bmEgcGFyYW1ldHJpemFjacOzbiBzdWF2ZS4NCkRhZG8gXCggVV8wIFxzdWJyZV5rIFwpIGFiaWVydG8geSBcKCBmOlVfMCBccmlnaHRhcnJvdyBWIFwpIHN1YXZlLA0KZW50b25jZXMgXCggXHZhcnBoaV57LTF9OiBVXzAgXHJpZ2h0YXJyb3cgVl8wIFwpIGVzIHN1YXZlLg0KDQo8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogLTEwcHg7Ij4gJm5ic3A7IDwvcD4NCg0KPGgyIGNsYXNzPSJkZWYiPkRlZmluaWNpw7NuIDIuMTxici8+JmVtc3A7Jm5ic3A7IE1hcGEgZGlmZXJlbmNpYWJsZTwvaDI+DQo8cCBjbGFzcz0iZGVmIj5EZWZpbmljacOzbiAyLjE6IE1hcGEgZGlmZXJlbmNpYWJsZTwvcD4NCkRhZGFzIGxhcyB2YXJpZWRhZGVzIFwoIE1ebVxzdWJyZV57cH0gXCkgeSBcKCBOXm5cc3VicmVee2t9IFwpLA0KZGlyZW1vcyBxdWUgdW4gbWFwYSBcKCBmOiBNIFxyaWdodGFycm93IE4gXCkgZXMgKipkaWZlcmVuY2lhYmxlKiogZW4gXCggcFxpbiBNIFwpDQpzaSBleGlzdGVuIHBhcmFtZXRyaXphY2lvbmVzIFwoIFx2YXJwaGk6IFVfMCBccmlnaHRhcnJvdyBVIFwpIHkNClwoIFxwc2k6IFZfMCBccmlnaHRhcnJvdyBWIFwpIHRhbGVzIHF1ZToNCg0KLSBcKCBwXGluIFUgXCkNCi0gXCggZihwKSBcaW4gVlwpDQotIFwoIGYoVSlcc3Vic2V0IFYgXCkNCi0gXCggXHBzaV57LTF9IFxjaXJjIGYgXGNpcmMgXHZhcnBoaVwsIFwpIHNlYSBkaWZlcmVuY2lhYmxlIGVuDQpcKCBcLFx2YXJwaGleey0xfShwKVwsIC4gXCkNCg0KXA0KDQo8aDIgY2xhc3M9InByb3AiPlRlb3JlbWEgMi4xPC9oMj4NCjxwIGNsYXNzPSJwcm9wIj5UZW9yZW1hIDIuMTwvcD4NClNpIFwoIGY6TVxmZCBOIFwpIHkgXCggZzpOXGZkIFAgXCkgc29uIHN1YXZlcywgZW50b25jZXMNClwoIGdcY2lyYyBmOk1cZmQgUCBcKSBlcyBzdWF2ZS4NCg0KPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IC0xMHB4OyI+ICZuYnNwOyA8L3A+DQoNCjxoMiBjbGFzcz0iZGVmIj5EZWZpbmljacOzbiAyLjI8YnIvPiZlbXNwOyZuYnNwOyBTdWJ2YXJpZWRhZDwvaDI+DQo8cCBjbGFzcz0iZGVmIj5EZWZpbmljacOzbiAyLjI6IFN1YnZhcmllZGFkPC9wPg0KU2VhbiBsYXMgdmFyaWVkYWRlcyBcKCBNXm1cc3VicmVee2t9IFwpIHkgXCggTl5uIFxzdWJyZV57a30gXCkuDQpEaXJlbW9zIHF1ZSBcKCBOIFwpIGVzIHVuYSAqKnN1YnZhcmllZGFkKiogZGUgXCggTSBcKSBzaSBzZSBjdW1wbGUgXCggTlxzdWJzZXQgTSBcKS4NCg0KKioqT2JzZXJ2YWNpw7NuOioqKiBTZSBjdW1wbGUgXCggbVxnZXEgbiAuIFwpDQoNCioqKkVqZXJjaWNpbzoqKiogU2VhbiBsYXMgdmFyaWVkYWRlcyBcKCBYLFkgXHRleHR7IHkgfSBaIFwpLCBjb24gXCggWFxzdWJzZXQgWSBcKS4NClNpIFwoIGY6WSBcZmQgWiBcKSB5IFwoIGc6WlxmZCBYIFwpIHNvbiBzdWF2ZXMsIGVudG9uY2VzDQpcKCBmXGtlcm4tMC43NWV4XHJlc3RyaWN0aW9uX1ggOiBYIFxmZCBaIFwpIHkgXCggZzogWlxmZCBZIFwpIHNvbiBzdWF2ZXMuDQoNCjxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAtMTBweDsiPiAmbmJzcDsgPC9wPg0KDQo8aDIgY2xhc3M9ImRlZiI+RGVmaW5pY2nDs24gMi4zPGJyLz4mZW1zcDsmbmJzcDsgRGlmZW9tb3JmaXNtbyA8L2gyPg0KPHAgY2xhc3M9ImRlZiI+RGVmaW5pY2nDs24gMi4zOiBEaWZlb21vcmZpc21vPC9wPg0KQ3VhbHF1aWVyIGJpeWVjY2nDs24gc3VhdmUgZW50cmUgdmFyaWVkYWRlcyBzZXLDoSBsbGFtYWRhDQoqKmRpZmVvbW9yZmlzbW8qKiBzaSBzdSBpbnZlcnNhIHRhbWJpw6luIGVzIHN1YXZlLg0KDQoqKipFamVtcGxvOioqKiBUb2RhIHBhcmFtZXRyaXphY2nDs24gZXMgdW4gZGlmZW9tb3JmaXNtby4NCg0KPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IC0xMHB4OyI+ICZuYnNwOyA8L3A+DQoNCjxoMiBjbGFzcz0icHJvcCI+VGVvcmVtYSAyLjI8L2gyPg0KPHAgY2xhc3M9InByb3AiPlRlb3JlbWEgMi4yPC9wPg0KTGEgY29tcG9zaWNpw7NuIGRlIGRpZmVvbW9yZmlzbW9zIGVzIHVuIGRpZmVvbW9yZmlzbW8uDQoNCjxoMiBjbGFzcz0iZGVmIj5EZWZpbmljacOzbiAyLjQ8YnIvPiZlbXNwOyZuYnNwOyBWYXJpZWRhZGVzIGRpZmVvbW9yZmFzPC9oMj4NCjxwIGNsYXNzPSJkZWYiPkRlZmluaWNpw7NuIDIuNDogVmFyaWVkYWRlcyBkaWZlb21vcmZhczwvcD4NCkRpcmVtb3MgcXVlIGRvcyB2YXJpZWRhZGVzIHNvbiAqKmRpZmVvbW9yZmFzKiogc2kgZXhpc3RlDQp1biBkaWZlb21vcmZpc21vIGVudHJlIGVsbGFzLg0KDQpcDQoNCiMgQ2xhc2UgMzogRXNwYWNpbyB0YW5nZW50ZQ0KDQo8aDIgY2xhc3M9ImRlZiI+RGVmaW5pY2nDs24gMy4xPGJyLz4mZW1zcDsmbmJzcDsgRXNwYWNpbyB0YW5nZW50ZTwvaDI+DQo8cCBjbGFzcz0iZGVmIj5EZWZpbmljacOzbiAzLjE6IEVzcGFjaW8gdGFuZ2VudGU8L3A+DQpTZWFuIFwoIE1ebVxzdWJyZV5uIFwpIHVuYSB2YXJpZWRhZCB5IA0KXCggXHZhcnBoaTogVV8wIFxmZCBVIFwpIHVuYSBwYXJhbWV0cml6YWNpw7NuLiANCkNvbiBcKCBwXGluIFUsIFx2YXJwaGkocSkgPSBwIFwpLCBlbCAqKmVzcGFjaW8gdGFuZ2VudGUqKiBhIFwoIE0gXCkNCmVuIFwoIHAgXCkgZXMNClxbDQpUX3AgTSA6PSBEXHZhcnBoaV9xIChcbWF0aGJie1J9Xm0pIFwsIC4NClxdDQoNCioqKk9ic2VydmFjacOzbjoqKioNCg0KLSBcKCBUX3AgTSBcKSBlcyB1biBlc3BhY2lvIHZlY3RvcmlhbCBkZSBkaW1lbnNpw7NuIFwoIG0gXCwgLiBcKQ0KLSBcKCBEIFx2YXJwaGlfcSAoZV9pKSA9ICBcZnJhY3tccGFydGlhbFx2YXJwaGl9e1xwYXJ0aWFsIHheaX0gKHEpXCwgLiBcKQ0KLSBcKCBcbGVmdFx7IFxmcmFje1xwYXJ0aWFsIFx2YXJwaGl9e1xwYXJ0aWFsIHheMX0ocSksIFwsIFxkb3RzIFwsDQogXGZyYWN7XHBhcnRpYWwgXHZhcnBoaX17XHBhcnRpYWwgeF5tfShxKSBccmlnaHRcfSBcKSBlcyB1bmEgYmFzZSBkZQ0KIFwoIFRfcCBNXCwgLiBcKQ0KDQogXA0KDQogPGgyIGNsYXNzPSJwcm9wIj5Qcm9wb3NpY2nDs24gMy4xPC9oMj4NCiA8cCBjbGFzcz0icHJvcCI+UHJvcG9zaWNpw7NuIDMuMTwvcD4NCiBEYWRhIHVuYSB2YXJpZWRhZCBcKCBNXm1cc3VicmVee259IFwpIHkgXCggcFxpbiBNIFwpLCBzZSBjdW1wbGUNCiBcWw0KIFRfcCBNID0gXHsgXGFscGhhJygwKSBcbWlkIFxhbHBoYTogKC1cZXBzaWxvbixcZXBzaWxvbilcZmQgTSANCiBcdGV4dHsgZXMgdW4gY2FtaW5vIHN1YXZlIHF1ZSBzYXRpc2ZhY2UgfSBcYWxwaGEoMCkgPSBwXH0gXCwgLg0KIFxdDQoNCiA8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogLTEwcHg7Ij4gJm5ic3A7IDwvcD4NCiANCjxwIGlkPSJwcm9vZiI+RGVtb3N0cmFjacOzbjo8L3A+XA0KXCggKFxzdWJzZXRlcSkgXCkgXA0KU2VhIFwoIHZcaW4gVF9wIE0gXCksIGV4aXN0ZW4gDQpcKCBcdmFycGhpOiBVXzAgXGZkIFUgXG5pIHAgXCkgcGFyYW1ldHJpemFjacOzbiB5IA0KXCggdVxpbiBcbWF0aGJie1J9Xm0gXCkgdGFsIHF1ZQ0KXCggdiA9IERcdmFycGhpX3EgKHUpLFwsIFx2YXJwaGkocSkgPSBwIFwpLiBcDQpcKCBcUmlnaHRhcnJvdyB2ID0gRFx2YXJwaGlfcSAodSkgID0gXGZyYWN7XHBhcnRpYWxcdmFycGhpfXtccGFydGlhbCB1fShxKSANCj0gXGRpc3BsYXlzdHlsZXtcbGltX3t0XHRvIFwsMH19IFwsIFxmcmFje1x2YXJwaGkocSt0dSkgLSBcdmFycGhpKHEpfXt0fVwpLiBcDQpcKCBcYWxwaGEodCkgOj0gXHZhcnBoaShxK3R1KSBcUmlnaHRhcnJvdyBcYWxwaGEnKDApID0gRFx2YXJwaGlfcSAodSkgXCwgLlwpIFwNCiZuYnNwO1wNClwoIChcc3Vwc2V0ZXEpIFwpIFwNClNlIHRpZW5lIHVuIGNhbWlubyBzdWF2ZSANClwoIFxhbHBoYTogKC1cZXBzaWxvbixcZXBzaWxvbilcZmQgTSwgXCxcLCBcYWxwaGEoMCkgPSBwIFwsIC4gIFwpIFwNCkVzY29nZW1vcyB1bmEgcGFyYW1ldHJpemFjacOzbiANClwoIFx2YXJwaGk6IFxtYXRoYmJ7Un1ebSBcZmQgVVxuaSBwLCBcLFwsIFx2YXJwaGkoMCkgPSBwIFwsLiBcKSBcDQpEZWZpbmltb3MgDQpcKCBcYmV0YSA9IFx2YXJwaGleey0xfVxjaXJjXGFscGhhOiAoLVxlcHNpbG9uLFxlcHNpbG9uKVxmZFxtYXRoYmJ7Un1ee219IFwpXA0KXCggXFJpZ2h0YXJyb3cgXGFscGhhID0gXHZhcnBoaVxjaXJjXGJldGEgXCkgXA0KXCggXFJpZ2h0YXJyb3cgXGFscGhhICcoMCk9IERcdmFycGhpX3tcYmV0YSgwKX0gXGJldGEnKDApIFwpIFwNClwoIFxSaWdodGFycm93IFxhbHBoYScoMCkgPSBEXHZhcnBoaV8wIChcYmV0YScoMCkpIFwpIFwNClwoIFxSaWdodGFycm93IFxhbHBoYScoMClcaW4gRFx2YXJwaGlfMCAoXG1hdGhiYntSfV5tKSBcLFwsIC5cKQ0KDQpcIA0KDQoqKipFamVtcGxvczoqKioNCg0KLSBTaSBcKCBVXHN1YnJlXntufSBcKSBlcyB1biBhYmllcnRvIG5vIHZhY8OtbywgZW50b25jZXMgcGFyYSB0b2RvDQpcKCBwXGluIFUgXCkgc2UgY3VtcGxlIFwoIFRfcCBVID0gXG1hdGhiYntSfV5uXCxcLCAuIFwpDQotIFwoIFRfcCBTXm4gPSBceyB2XGluXG1hdGhiYntSfV57bisxfSBcbWlkICBcbGFuZ2xlIHYscFxyYW5nbGUgPSAwIFx9IFwpDQoNCjxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAtMTBweDsiPiAmbmJzcDsgPC9wPg0KDQo8aDIgY2xhc3M9InByb3AiPlByb3Bvc2ljacOzbiAzLjI8L2gyPg0KPHAgY2xhc3M9InByb3AiPlByb3Bvc2ljacOzbiAzLjI8L3A+DQpTaSBcKCBFIFwpIGVzIHVuIHN1YmVzcGFjaW8gdmVjdG9yaWFsIGRlIFwoIFxtYXRoYmJ7Un1ee259LCBcKQ0KZW50b25jZXMgcGFyYSB0b2RvIFwoIHAgXGluIFVcKSAoYWJpZXJ0byBlbiBcKCBFIFwpKQ0Kc2UgdGllbmUgXCggVF9wIEUgPSBFXCxcLCAuIFwpDQoNClwNCg0KIyBDbGFzZSA0OiBEZXJpdmFkYQ0KDQpTZWEgDQpcKCAgZjogVVxmZCBWLCBmXGluIENee1xpbmZ0eX0sIHBcaW4gVSBcXCANCkRmX3AgdSA9IChmXGNpcmNcYWxwaGEpJygwKSwgXHRleHR7IGRvbmRlIH0NClxhbHBoYScoMCkgPSB1IFx0ZXh0eyB5IH0gXGFscGhhKDApID0gcCwgXFwNCnBcaW4gVSwgIFxleGlzdHMgXDsgcj4wIFx0ZXh0eyB0YWwgcXVlIH0gQihwLHIpIFxzdWJzZXQgVSwNClx0ZXh0eyBjb24gfSBcYWxwaGEodCkgPSBwICt0dSwgXHRleHR7IGRvbmRlIH0gDQpcbHZlcnQgdCBccnZlcnQgPCBcZXBzaWxvblwsIC4NClwpDQoNCjxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAtMTBweDsiPiAmbmJzcDsgPC9wPg0KDQo8aDIgY2xhc3M9ImRlZiI+RGVmaW5pY2nDs24gNC4xPGJyLz4mZW1zcDsmbmJzcDsgRGVyaXZhZGE8L2gyPg0KPHAgY2xhc3M9ImRlZiI+RGVmaW5pY2nDs24gNC4xOiBEZXJpdmFkYTwvcD4NClNlYSBcKCBmOk0gXGZkIE4gXCkgc3VhdmUgdGFsIHF1ZSBcKCBmKHApID0gcSAuXCkgDQpMYSBkZXJpdmFkYSBkZSBcKCBmIFwpIGVuIFwoIHAgXCkgZXMgZWwgb3BlcmFkb3I6IA0KDQpcWw0KRGZfcDogVF9wIE0gXGZkIFRfcSBOIFxcIA0KXGhzcGFjZXs1LjVlbX0gdiBcaHNwYWNlezFlbX1cbWFwc3RvIChmXGNpcmMgXGFscGhhKScoMCkgDQpcXQ0KDQpkb25kZSBcKCBcYWxwaGE6ICgtdCx0KSBcZmQgTSBcKSBlcyBzdWF2ZSB5IHNlIHRpZW5lIA0KXCggXGFscGhhKDApID0gcCBcIFwpIHkgXCggXCBcYWxwaGEoMCknID0gdiBcLCAuXCkNCg0KXA0KDQoqKlwoIERmX3AgKHYpIFwpIG5vIGRlcGVuZGUgZGVsIGNhbWlubyBcKCBcYWxwaGEgXCksIHNpbm8gZGUgbGEgcGFyYW1ldHJpemFjacOzbiBcKCBcdmFycGhpIFwgLlwpKioNCg0KPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IC0xMHB4OyI+ICZuYnNwOyA8L3A+DQoNCjxoMiBjbGFzcz0icHJvcCI+VGVvcmVtYSA0LjE8L2gyPg0KPHAgY2xhc3M9InByb3AiPlRlb3JlbWEgNC4xPC9wPg0KU2VhbiBcKCBNLE4gXHRleHR7IHkgfSBQIFwpIHZhcmllZGFkZXMsIA0KXCggZjpNIFxmZCBOIFx0ZXh0eyB5IH0gZzpOXGZkIFAgXCkgc3VhdmVzLA0KeSBcKCBmKHApPXEgXCksIGVudG9uY2VzIHNlIGN1bXBsZSANClxbDQpEKGdcY2lyYyBmKV9wID0gRGdfcSBcY2lyYyBEZl9wXCwgLg0KXF0NCg0KPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IC0xMHB4OyI+ICZuYnNwOyA8L3A+DQoNCjxwIGlkPSJwcm9vZiI+RGVtb3N0cmFjacOzbjo8L3A+XA0KXCggRChnXGNpcmMgZilfcDogVF9wIE0gXGZkIFRfe2cocSl9UCBcKSBcDQpTZWEgXCggXGFscGhhOiAoLVxlcHNpbG9uLFxlcHNpbG9uKSBcZmQgTSBcKSBzdWF2ZSwNCnRhbCBxdWUgXCggXGFscGhhKDApPXAgXCkgeSBcKCBcYWxwaGEnKDApPXUgLlwpXA0KXCggXFJpZ2h0YXJyb3cgRChnXGNpcmMgZilfcCAodSk9IChnXGNpcmMgXHVuZGVyYnJhY2V7ZiBcY2lyYyBcYWxwaGEpJ31fe1xiZXRhfSgwKSBcKQ0KXCggPSBEZ19xIChmXGNpcmMgXGFscGhhKScoMCk9RGdfcSBEZl9wIHUgXCwgLlwpDQoNCjxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAtMTBweDsiPiAmbmJzcDsgPC9wPg0KDQoqKipFamVyY2ljaW86KioqXA0KU2VhIFwoIE0gXCkgdW5hIHZhcmllZGFkLCBlbnRvbmNlcyBzZSBjdW1wbGUgDQpcKCBEKFx0ZXh0eyBJZCB9KV9wID0gXHRleHR7IElkIH1fe1RfcCBNfSBcLCAuXCkNCg0KPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IC0xMHB4OyI+ICZuYnNwOyA8L3A+DQoNCjxoMiBjbGFzcz0icHJvcCI+Q29yb2xhcmlvIDQuMjwvaDI+DQo8cCBjbGFzcz0icHJvcCI+Q29yb2xhcmlvIDQuMjwvcD4NClNlYW4gXCggTSxOIFwpIHZhcmllZGFkZXMgeSBcKCBmOiBNXGZkIE4gXCkgZXMgdW4gZGlmZW9tb3JmaXNtbywgDQplbnRvbmNlcyBcKCBEZl9wIFwpIGVzIHVuIGlzb21vcmZpc21vIHBhcmEgXCggcFxpbiBNLiBcKQ0KTcOhcyBhw7puLCBzaSBcKCBmKHApPXEgXCksIGVudG9uY2VzIHNlIHRpZW5lIA0KXCggRGZeey0xfV9xID0gKERmX3ApXnstMX0gXCwgLlwpDQoNCjxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAtMTBweDsiPiAmbmJzcDsgPC9wPg0KDQo8cCBpZD0icHJvb2YiPkRlbW9zdHJhY2nDs246PC9wPlwNClwoIGZcY2lyYyBmXnstMX0gPSBcdGV4dHsgSWR9X04gXCkgXA0KXCggXFJpZ2h0YXJyb3cgRChmXGNpcmMgZl57LTF9KV9xID0gXHRleHR7IElkfV97VF9xIE59IFwpIFwgDQpcKCBcUmlnaHRhcnJvdyBEZl9wIERmXnstMX1fcSA9IFx0ZXh0eyBJZH1fe1RfcSBOfSBcLCAuIFwpDQoNCkFuw6Fsb2dhbWVudGU6IFwNClwoIERmXnstMX1fcSBEZl9wID0gXHRleHR7IElkfV97VF9wIE19IFwpIFwNClwoIERmX3AgXCkgZXMgdW4gaXNvbW9yZmlzbW8geSBcKCAoRGZfcCleey0xfSBcKSANCnZhbGUgXCggRGZeey0xfV9xIFwsIC4gXCkNCg0KXA0KDQojIENsYXNlIDU6IFRlb3JlbWFzIGRlIGxhIGZ1bmNpw7NuIGludmVyc2EgeSBkZWwgdmFsb3IgcmVndWxhcg0KDQo8aDIgY2xhc3M9InByb3AiPlRlb3JlbWEgNS4xPGJyLz4mZW1zcDsmbmJzcDsgRGUgbGEgZnVuY2nDs24gaW52ZXJzYSA8YnIvPiZlbXNwOyZuYnNwOyB5IGZvcm1hcyBsb2NhbGVzPC9oMj4NCjxwIGNsYXNzPSJwcm9wIj5UZW9yZW1hIGRlIGxhIGZ1bmNpw7NuIGludmVyc2EgeSBmb3JtYXMgbG9jYWxlczwvcD4NClNlYW4gXCggTSBcKSB5IFwoIE4gXCkgdmFyaWVkYWRlcywgXCggcFxpbiBNLCBmOk0gXGZkIE4gXCkgc3VhdmUgeQ0KXCggRGZfcCBcKSBlcyB1biBpc29tb3JmaXNtby4gRW50b25jZXMgZXhpc3RlbiBcKCBVXG5pIHAgXCkgYWJpZXJ0byBlbiBcKCBNIFwpDQp5IFwoIFZcbmkgZihwKSBcKSBhYmllcnRvIGVuIFwoIE4gXCkgdGFsZXMgcXVlIA0KXCggZjpVIFxmZCBWIFwpIGVzIHVuIGRpZmVvbW9yZmlzbW8uDQoNCjxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAtMTBweDsiPiAmbmJzcDsgPC9wPg0KDQo8aDIgY2xhc3M9InByb3AiPkNvcm9sYXJpbyA1LjI8L2gyPiANCjxwIGNsYXNzPSJwcm9wIj5Db3JvbGFyaW8gNS4yPC9wPg0KU2kgXCggTSBcKSB5IFwoIE4gXCkgc29uIHZhcmllZGFkZXMsIFwoIGY6TVxmZCBOIFwpIGVzIHN1YXZlcywgYml5ZWNjacOzbg0KeSBcKCBEZl9wIFwpIGVzIHVuIGlzb21vcmZpc21vIHBhcmEgdG9kbyBcKCBwXGluIE0gXCksIGVudG9uY2VzIA0KXCggZiBcKSBlcyB1biBkaWZlb21vcmZpc21vLg0KDQo8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogLTEwcHg7Ij4gJm5ic3A7IDwvcD4NCg0KPHAgaWQ9InByb29mIj5EZW1vc3RyYWNpw7NuOjwvcD5cDQpDb21vIFwoIGYgXCkgZXMgYml5ZWNjacOzbiwgZXhpc3RlIFwoIGZeey0xfSBcKS4gXA0KXCggXGV4aXN0c1wsIFVcbmkgcCBcIFwpIHkgXCggXCBWXG5pIGYocCkgXCkgdGFsIHF1ZQ0KXCggZl97XHJlc3RyaWN0aW9uX1V9IFwpIGVzIGRpZmVvbW9yZmlzbW8uDQoNClxbDQooZl97XHJlc3RyaWN0aW9uX1V9KV57LTF9ID0gZl57LTF9X3tccmVzdHJpY3Rpb25fVn0NClxSaWdodGFycm93IGZeey0xfV97XHJlc3RyaWN0aW9uX1Z9IFx0ZXh0eyBlcyBkaWZlcmVuY2lhYmxlIH0NClxSaWdodGFycm93IGZeey0xfSBcdGV4dHsgZXMgZGlmZXJlbmNpYWJsZS4gfQ0KXF0NCg0KPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IC0xMHB4OyI+ICZuYnNwOyA8L3A+DQoNCjxoMiBjbGFzcz0iZGVmIj5EZWZpbmljacOzbiA1LjEgPGJyLz4mZW1zcDsmbmJzcDsgTWFwYXMgc3VhdmVzIDxici8+JmVtc3A7Jm5ic3A7IGVxdWl2YWxlbnRlcyA8L2gyPg0KPHAgY2xhc3M9ImRlZiI+RGVmaW5pY2nDs24gNS4xOiBNYXBhcyBzdWF2ZXMgZXF1aXZhbGVudGVzPC9wPg0KU2VhbiBcKCBNLE4sIFx3aWRldGlsZGV7TX0gXCkgeSBcKCBcd2lkZXRpbGRle059IFwpIHZhcmllZGFkZXMuDQpEb3MgbWFwYXMgc3VhdmVzIFwoIGY6TSBcZmQgTiBcKSB5IFwoIGc6XHdpZGV0aWxkZXtNfSBcZmQgXHdpZGV0aWxkZXtOfVwpDQpzb24gbGxhbWFkb3MgZXF1aXZhbGVudGVzIHNpIGV4aXN0ZW4gZGlmZW9tb3JmaXNtb3MgDQpcKCBcdmFycGhpOk1cZmQgXHdpZGV0aWxkZXtNfSBcKSB5IFwoIFxwaGk6TlxmZCBcd2lkZXRpbGRle059IFwpIHRhbCBxdWUNCmVsIHNpZ3VpZW50ZSBkaWFncmFtYSBlcyBjb25tdXRhdGl2bzoNCg0KOjo6Ojo6IHsuY29sdW1uc30NCjo6OiB7LmNvbHVtbn0NCjxpbWcgc3JjPSJkaWFncmFtLnBuZyIgY2xhc3M9ImRpYWdyYW1hIj4NCjo6Og0KOjo6IHsuY29sdW1ufQ0KPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDE1cHg7Ij4gJm5ic3A7IDwvcD4NCg0KRXMgZGVjaXI6IA0KDQpcKCBccGhpXGNpcmMgZiA9IGdcY2lyY1x2YXJwaGkgXCwgLlwpDQo6OjoNCjo6Ojo6Og0KDQpgYGB7Y3NzfQ0KLmRpYWdyYW1hIHsNCiAgZGlzcGxheTogYmxvY2s7IA0KICBtYXJnaW4tbGVmdDogYXV0bzsgDQogIG1hcmdpbi1yaWdodDogYXV0bzsgDQogIGhlaWdodDogMTUwcHgNCn0NCmBgYA0KDQo8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogLTEwcHg7Ij4gJm5ic3A7IDwvcD4NCg0KPGgyIGNsYXNzPSJwcm9wIj5Db3JvbGFyaW8gNS4zPC9oMj4NCjxwIGNsYXNzPSJwcm9wIj5Db3JvbGFyaW8gNS4zPC9wPg0KU2VhbiBcKCBNIFwpIHkgXCggTiBcKSB2YXJpZWRhZGVzLCBcKCBmOk1cZmQgTiBcKSBzdWF2ZSwNClwoIHBcaW4gTSxxXGluIE0gXCkgY29uIFwoIHE9ZihwKSBcKSB5IFwoIERmX3AgXCkgaXNvbW9yZmlzbW8uDQpFbnRvbmNlcyBmIGVzIGxvY2FsbWVudGUgZXF1aXZhbGVudGUgZW4gXCggcCBcKSBhIGxhIGZ1bmNpw7NuIGlkZW50aWRhZC4NCg0KPHAgaWQ9InByb29mIj5EZW1vc3RyYWNpw7NuOjwvcD5cDQpTYWJlbW9zIHF1ZSBleGlzdGVuIHZlY2luZGFkZXMgXCggVSBcKSB5IFwoIFYgXCksDQpkZSBcKCBwIFwpIHkgXCggcSBcKSByZXNwZWN0aXZhbWVudGUuXA0KQWRlbcOhcywgc2UgdGllbmVuIHBhcmFtZXRyaXphY2lvbmVzIFwoIFx2YXJwaGkgXCkgeSBcKCBccGhpIFwpDQpkZSBcKCBNIFwpIHkgXCggTiBcKSByZXNwZWN0aXZhbWVudGUsIHRhbGVzIHF1ZSBtYXBlYW4gY2llcnRhcyB2ZWNpbmRhZGVzDQpcKCBcd2lkZXRpbGRle1V9IFwpIGhhY2lhIFwoIFUgXCksIHkgXCggXHdpZGV0aWxkZXtWfSBcKSBoYWNpYSBcKCBWIFwpLCANCmVuIGVsIG9yZGVuIHJlc3BlY3Rpdm8uDQoNCkFzw60sIFwoIGY6VVxmZCBWIFwpIGVzIHVuIGRpZmVvbW9yZmlzbW8sIGVudG9uY2VzIA0KXCggXHdpZGV0aWxkZXtmfTpcd2lkZXRpbGRle1V9XGZkIFx3aWRldGlsZGV7Vn0gXCkgdGFtYmnDqW4gbG8gZXMuDQoNClBhcmEgY29uY2x1aXIsIGJhc3RhIG5vdGFyIGVsIHNpZ3VpZW50ZSBkaWFncmFtYSBjb25tdXRhdGl2bzogDQoNCjxpbWcgc3JjPSJkaWFncmFtXzIucG5nIiBjbGFzcz0iZGlhZ3JhbWEiPg0KDQo8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogLTEwcHg7Ij4gJm5ic3A7IDwvcD4NCg0KPGgyIGNsYXNzPSJkZWYiPkRlZmluaWNpw7NuIDUuMjxici8+JmVtc3A7Jm5ic3A7IElubWVyc2nDs248L2gyPg0KPHAgY2xhc3M9ImRlZiI+RGVmaW5pY2nDs24gNS4yOiBJbm1lcnNpw7NuIDwvcD4NClNlYW4gXCggTVwpIHkgXCggTiBcKSB2YXJpZWRhZGVzIGNvbiBcKCBmOk1cZmQgTiBcKSBzdWF2ZS4gDQpcKCBmIFwpIGVzIHVuYSAqKmlubWVyc2nDs24qKiBzaSBcKCBEZl9wIFwpIGVzIGlueWVjdGl2YSBwYXJhIHRvZG8NClwoIHBcaW4gTSBcLCAuIFwpDQoNCjxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAtMTBweDsiPiAmbmJzcDsgPC9wPg0KDQoqKkVqZW1wbG86KioNCg0KU2VhbiBcKCBVLFYgXCkgYWJpZXJ0b3MgZW4gXCggXG1hdGhiYntSfV57bX0gXCkgeSBcKCBcbWF0aGJie1J9Xm4gXCkNCnJlc3BlY3RpdmFtZW50ZSwgY29uIFwoIDBcaW4gVi4gXCkgRW50b25jZXMgbGEgc2lndWllbnRlIGluY2x1c2nDs24NCmVzIHVuYSBpbm1lcnNpw7NuOg0KXFsNCmk6VVxmZCBVXHRpbWVzIFYgXFwNClxoc3BhY2V7MC44ZW19IHggXGhzcGFjZXswLjhleH1cbWFwc3RvICh4LDApIA0KXF0NCg0KPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IC0xMHB4OyI+ICZuYnNwOyA8L3A+DQoNCjxoMiBjbGFzcz0icHJvcCI+VGVvcmVtYSA1LjQ8L2gyPg0KPHAgY2xhc3M9InByb3AiPlRlb3JlbWEgNS40PC9wPg0KU2VhbiBcKCBNIFwpIHkgXCggTiBcKSB2YXJpZWRhZGVzLCBcKCBmOk1cZmQgTiBcKSBzdWF2ZSwgDQpcKCBwXGluIE0gXCkgeSBcKCBxPWYocCkuIFwpIFNpIFwoIERmX3AgXCkgZXMgaW55ZWN0aXZhLCBlbnRvbmNlcw0KXCggZiBcKSBlcyBsb2NhbG1lbnRlIGVxdWl2YWxlbnRlIGEgbGEgaW5jbHVzacOzbi4NCg0KPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IC0xMHB4OyI+ICZuYnNwOyA8L3A+DQoNCjxoMiBjbGFzcz0iZGVmIj5EZWZpbmljacOzbiA1LjM8YnIvPiZlbXNwOyZuYnNwOyBNYXBhIHByb3BpbzwvaDI+DQo8cCBjbGFzcz0iZGVmIj5EZWZpbmljacOzbiA1LjM6IE1hcGEgcHJvcGlvPC9wPg0KU2VhbiBcKCBNLCBOIFwpIHZhcmllZGFkZXMgeSBcKCBmOk1cZmQgTiBcKSB1biBtYXBhIHN1YXZlLiBFbCBtYXBhDQpcKCBmIFwpIGVzICoqcHJvcGlvKiogc2kgeSBzb2xvIHNpIFwoIGZeey0xfShLKSBcKSBlcyBjb21wYWN0bw0KcGFyYSB0b2RvIFwoIEtcc3Vic2V0IE4gXCkgY29tcGFjdG8uDQoNCjxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAtMTBweDsiPiAmbmJzcDsgPC9wPg0KDQo8aDIgY2xhc3M9InByb3AiPlByb3Bvc2ljacOzbiA1LjU8L2gyPg0KPHAgY2xhc3M9InByb3AiPlByb3Bvc2ljacOzbiA1LjU8L3A+DQpUb2RvIG1hcGEgc3VhdmUgeSBwcm9waW8gZXMgY2VycmFkby4NCg0KPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IC0xMHB4OyI+ICZuYnNwOyA8L3A+DQoNCjxoMiBjbGFzcz0iZGVmIj5EZWZpbmljacOzbiA1LjQ8YnIvPiZlbXNwOyZuYnNwOyBFbmNhamU8L2gyPg0KPHAgY2xhc3M9ImRlZiI+RGVmaW5pY2nDs24gNS40OiBFbmNhamU8L3A+DQpVbiBtYXBhIGVzIGxsYW1hZG8gKiplbmNhamUqKiBzaSBlcyBwcm9waW8sIGlubWVyc2nDs24gZSBpbnllY3Rpdm8uDQoNCjxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAtMTBweDsiPiAmbmJzcDsgPC9wPg0KDQo8aDIgY2xhc3M9InByb3AiPlRlb3JlbWEgNS42PC9oMj4NCjxwIGNsYXNzPSJwcm9wIj5UZW9yZW1hIDUuNjwvcD4NClNpIFwoIGY6TVxmZCBOIFwpIGVzIHVuIGVuY2FqZSwgZW50b25jZXMgXCggZihNKSBcKSBlcyB1bmEgc3VidmFyaWVkYWQuDQoNCjxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAtMTBweDsiPiAmbmJzcDsgPC9wPg0KDQo8aDIgY2xhc3M9InByb3AiPkNvcm9sYXJpbyA1Ljc8L2gyPg0KPHAgY2xhc3M9InByb3AiPkNvcm9sYXJpbyA1Ljc8L3A+DQpTaSBcKCBmOk1cZmQgTiBcKSBlcyB1bmEgaW5tZXJzacOzbiBpbnllY3RpdmEgeSBcKCBNIFwpIGVzIGNvbXBhY3RvLA0KZW50b25jZXMgXCggZihNKVxzdWJzZXQgTiBcKSBlcyB1bmEgdmFyaWVkYWQuDQoNCjxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAtMTBweDsiPiAmbmJzcDsgPC9wPg0KDQo8aDIgY2xhc3M9ImRlZiI+RGVmaW5pY2nDs24gNS41PGJyLz4mZW1zcDsmbmJzcDsgU3VtZXJzacOzbiA8L2gyPg0KPHAgY2xhc3M9ImRlZiI+RGVmaW5pY2nDs24gNS41OiBTdW1lcnNpw7NuPC9wPg0KVW4gbWFwYSBcKCBmOk1cZmQgTiBcKSBlcyB1bmEgKipzdW1lcnNpw7NuKiogc2kgXCggRGZfcCBcKQ0KZXMgc29icmV5ZWN0aXZhIHBhcmEgdG9kbyBcKCBwXGluIE0gXCwgLlwpDQoNCioqRWplbXBsbzoqKg0KDQpcKCBVXHN1YnNldCBcbWF0aGJie1J9Xm0gXCkgYWJpZXJ0bywgXCggVlxzdWJzZXRcbWF0aGJie1J9Xm4gXCkNCmFiaWVydG8uIEVudG9uY2VzIHNlIHRpZW5lIGxhIHN1bWVyc2nDs24gDQpcWw0KXHBpOiBVXHRpbWVzIFYgXGZkIFUgXFwNClxrZXJuMmVtKHgseSkgXG1hcHN0byB4DQpcXQ0KDQo8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogLTEwcHg7Ij4gJm5ic3A7IDwvcD4NCg0KPGgyIGNsYXNzPSJwcm9wIj5UZW9yZW1hIDUuODwvaDI+DQo8cCBjbGFzcz0icHJvcCI+VGVvcmVtYSA1Ljg8L3A+DQpcKCBmOk1cZmQgTiBcKSBzdWF2ZSwgXCggcFxpbiBNLCBmKHApPXEgXCkNCnkgXCggRGZfcCBcKSBzb2JyZXllY3RpdmEuIEVudG9uY2VzIFwoIGYgXCkgZXMgDQpsb2NhbG1lbnRlIGVxdWl2YWxlbnRlIGEgbGEgZnVuY2nDs24gcHJveWVjY2nDs24uDQoNCjxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAtMTBweDsiPiAmbmJzcDsgPC9wPg0KDQo8aDIgY2xhc3M9ImRlZiI+RGVmaW5pY2nDs24gNS42IDxici8+JmVtc3A7Jm5ic3A7IFZhbG9yIHJlZ3VsYXI8L2gyPg0KPHAgY2xhc3M9ImRlZiI+RGVmaW5pY2nDs24gNS42OiBWYWxvciByZWd1bGFyPC9wPg0KU2VhIFwoIGY6TVxmZCBOIFwpIHN1YXZlLiBcKCBxXGluIE4gXCkgZXMgbGxhbWFkbyANCioqdmFsb3IgcmVndWxhcioqIHNpIFwoIERmX3AgXCkgZXMgc29icmV5ZWN0aXZvIHBhcmEgdG9kbyANClwoIHBcaW4gZl57LTF9KHEpXCwgLiBcKQ0KDQo8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogLTEwcHg7Ij4gJm5ic3A7IDwvcD4NCg0KPGgyIGNsYXNzPSJwcm9wIj5UZW9yZW1hIDUuOTxici8+JmVtc3A7Jm5ic3A7IERlbCB2YWxvciByZWd1bGFyPC9oMj4NCjxwIGNsYXNzPSJwcm9wIj5UZW9yZW1hIDUuOTogRGVsIHZhbG9yIHJlZ3VsYXI8L3A+DQpTaSBcKCBxXGluIE4gXCkgZXMgdW4gdmFsb3IgcmVndWxhciBkZWwgbWFwYSBzdWF2ZSANClwoIGY6TV57bX1cZmQgTl57bn1cKSwgZW50b25jZXMgXCggZl57LTF9KHEpIFwpIGVzIHVuYSB2YXJpZWRhZCANCmNvbiBcKCBkaW0oZl57LTF9KHEpKSA9IG0tbiBcKS4gXA0KQWRlbcOhcywgc2UgY3VtcGxlDQpcKCBUX3AgZl57LTF9KHEpID0gS2VyKERmX3ApIFwsIC5cKQ0KDQo8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogLTEwcHg7Ij4gJm5ic3A7IDwvcD4NCg0KKipFamVtcGxvczoqKg0KDQotIFwoIGY6XG1hdGhiYntSfV57XG92ZXJsaW5le20rMX19IFxmZCBcbWF0aGJie1J9IFwpIFwNCiAgXCggXGtlcm4yZW0geCBca2VybjFlbVxtYXBzdG8gXGxWZXJ0IHhcclZlcnReMj14X3sxfV4yICtcY2RvdHMreF97bSsxfV4yIFwpIFwNCiAgXCggSmYoeCkgPSAoMnhfMSxcY2RvdHMsMnhfe20rMX0pIFwpIFwgDQogIFwoIERmX3A6XG1hdGhiYntSfV57bSsxfVxmZCBcbWF0aGJie1J9IFxSaWdodGFycm93IFwpDQogIEVudG9uY2VzIFwoIERmX3AgXCkgZXMgc29icmV5ZWN0aXZhIHNpIFwoIHAgXG5lcSAwIFwpIHkgXCggMVxpbiBcbWF0aGJie1J9IFwpLiBcDQogIFwoIFxSaWdodGFycm93IGZeey0xfSgxKSBcKSBlcyB1bmEgdmFyaWVkYWQgZGUgZGltZW5zacOzbiBcKCBtIFwpIHkgc2UgY3VtcGxlIA0KICBcKCBUX3BmXnstMX0oMSkgPSBLZXIoRGZfcCkgPSB7cH1ee1xwZXJwfSBcKQ0KDQotIFwoIGY6XG1hdGhiYntSfV4yIFxmZCBcbWF0aGJie1J9IFwpIFwNCiAgXCggKHgseSkgXG1hcHN0byB5XjIgXFwgXCkgXA0KICBcKCBmXnstMX0oMCkgPSBcbWF0aGJie1J9XHRpbWVzIFx7MFx9IFxSaWdodGFycm93IFwpIA0KICBcKCBEZl9wID0gKDAsMnkpIFwsIC5cKSBcDQogIFNpIFwoIHBcaW4gZl57LTF9KDApIFxSaWdodGFycm93IHk9MFwsIC5cKQ0KDQotIFwoIFx2YXJwaGk6XG1hdGhiYntSfV57blx0aW1lcyBufSBcZmQgU19uIFwpIFwNCiAgXCggXGtlcm4yZW0gQVxrZXJuMC41ZW1cbWFwc3RvIEEgQV5UIFxcIFwpIFwNCiAgXCggXHZhcnBoaV57LTF9KEkpID1PX24gLlwpIFNlYSBcKCBBXGluXHZhcnBoaV57LTF9KEkpIFwsLlwpIFwNCiAgXCggRFx2YXJwaGlfQShNKSA9IFxkaXNwbGF5c3R5bGV7XGxpbV97aFx0byAwfVwsfSBcZnJhY3tcdmFycGhpKEEraE0pLVx2YXJwaGkoTSl9e2h9IFwpDQogIFwoID0gQU1eVCArIE1BXlQgXCwgLiBcXCBcKSBcDQogIFwoIERcdmFycGhpX0EgOiBcbWF0aGJie1J9XntuXHRpbWVzIG59XGZkIFNfbiBcKSBcDQogIFNlYSBcKCBDXGluIFNfbiBcKSwgY29uc2lkZXJhbmRvIFwoIE09XGZyYWN7Q0F9ezJ9IFwsIC5cXCBcKSBcDQogIFwoIFxSaWdodGFycm93IERcdmFycGhpX0EgKE0pID0gXGZyYWN7QSBBXlQgQ317Mn0gKyBcZnJhY3tDQX17Mn1BXlQgXCkNCiAgXCggPSBcZnJhY3tDfXsyfSArIFxmcmFje0N9ezJ9ID0gQyBcKSANCg0KICBcKCBcUmlnaHRhcnJvdyBPX24gXCkgZXMgdW5hIHZhcmllZGFkIGRlIGRpbWVuc2nDs24gDQogIFwoIG5eMiAtIFxmcmFje24obisxKX17Mn0gPSBcZnJhY3tuKG4tMSl9ezJ9XCwgLiAgXCkNCiAgDQogIFwoIFRfSSAoT19uKSA9IEtlcihEXHZhcnBoaV9JKSBcKQ0KDQogIFNlYSBcKCBNXGluIEtlcihEX1x2YXJwaGkoSSkpIFwpDQoNCiAgXCggXFJpZ2h0YXJyb3cgRFx2YXJwaGlfSSAoTSkgPSBNK01eVCA9IDAgXFJpZ2h0YXJyb3cgTT0tTV5UIFwsLiBcKQ0KICBcKCBUX0kgT19uICA9IFx0ZXh0eyBjb25qdW50byBkZSBtYXRyaWNlcyBhbnRpc2ltw6l0cmljYXMgIH1cKS4NCg0KICDCv0VsIGNvbmp1bnRvIFwoIFNPX24gPSBce0FcaW4gT19uIFwsXG1pZFwsIGRldChBKSA9IDFcfSBcKQ0KICBlcyB1bmEgdmFyaWVkYWQ/IFwNCiAgU2UgdGllbmUgXCggVF9JIChTT19uKSA9IFx7IEFcaW5cbWF0aGJie1J9XntuXHRpbWVzIG59IFwsXG1pZFwsIEFeVCA9IC1BIFx9IFwpDQoNCi0gXCggXHZhcnBoaT1kZXQ6IFxvdmVyYnJhY2V7XG1hdGhiYntSfV5uIFx0aW1lc1xjZG90c1x0aW1lc1xtYXRoYmJ7Un1ebn1ee24gXHRleHR7IHZlY2VzfX0gXCkNCiAgXCggXGZkIFxtYXRoYmJ7Un1cKSBcDQogIFwoIFUgPSAodV8xLFxjZG90cyx1X24pIFxtYXBzdG8gZGV0KFt1XzEgXCxcbHZlcnRcLCBcY2RvdHMgXCxccnZlcnRcLCB1X25dKSBcKQ0KDQogIFNpIFwoIFYgPSBbdl8xIFwsXGx2ZXJ0XCwgXGNkb3RzIFwsXHJ2ZXJ0XCwgdl9uXSBcKSwgZW50b25jZXMgc2UgdGllbmUgXA0KICBcKCBEXHZhcnBoaV9VIChWKSA9IFxkaXNwbGF5c3R5bGV7XHN1bV97az0xfV57bn0gZGV0KFt1XzEgXCxcbHZlcnRcLCBcY2RvdHMgXCxccnZlcnRcLCB1X3trLTF9XCxcbHZlcnRcLCB2X2sgXCxccnZlcnRcLCB1X3trKzF9XCxcbHZlcnRcLFxjZG90c1wsXHJ2ZXJ0XCx1X25dKX0gXCkNCg0KICBTZWEgXCggVVxpblx2YXJwaGleey0xfSgxKSBcUmlnaHRhcnJvdyBEXHZhcnBoaV9VKFUpID0gblwsIC5cKQ0KDQogIFNlYSBcKCBcYWxwaGFcaW5cbWF0aGJie1J9IFxSaWdodGFycm93IERcdmFycGhpX1UgKFxmcmFje1xhbHBoYX17bn1VKSA9IFwpDQogIFwoIFxmcmFje1xhbHBoYX17bn1cY2RvdCBuID0gXGFscGhhIFxSaWdodGFycm93IERcdmFycGhpX1UgXCkNCiAgZXMgc29icmV5ZWN0aXZhLg0KDQogIEVudG9uY2VzIFwoIFx2YXJwaGleey0xfSgxKSA9IFNMX24gXCkgZXMgdW5hIHZhcmllZGFkIGRlIGRpbWVuc2nDs24gXCggbl4yIC0xIFwpDQogIHkgc2UgY3VtcGxlIFwoIFRfSSAoU0xfbikgPSBceyBBXGluIFxtYXRoYmJ7Un1ee25cdGltZXMgbn0gXCxcbWlkXCwgdHIoQSkgPSAwXH0gXCwgLlwpDQoNClwNCg0KIyBDbGFzZSA2OiBHcnVwb3MgZGUgTGllDQoNClwoICBcdW5kZXJsaW5le1x0ZXh0e0dydXBvcyB5IHZhcmllZGFkZXM6fX0gXDsgR0xfbiwgT19uLCBTTF9uLCBce0lfblx9IFwsIC4gXCkNCg0KPGgyIGNsYXNzPSJkZWYiPkRlZmluaWNpw7NuIDYuMTxici8+JmVtc3A7Jm5ic3A7IEdydXBvIGRlIExpZTwvaDI+DQo8cCBjbGFzcz0iZGVmIj5EZWZpbmljacOzbiA2LjE6IEdydXBvIGRlIExpZTwvcD4NClVuIHN1YmdydXBvIFwoIEdcc3Vic2V0IEdMX24gXCkgZXMgbGxhbWFkbyAqKmdydXBvIGRlIExpZSoqIHNpIGVzIHVuYSB2YXJpZWRhZC4NCg0KPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IC0xMHB4OyI+ICZuYnNwOyA8L3A+DQoNCjxoMiBjbGFzcz0iZGVmIj5EZWZpbmljacOzbiA2LjI8YnIvPiZlbXNwOyZuYnNwOyBDb3JjaGV0ZXMgZGUgTGllPC9oMj4NCjxwIGNsYXNzPSJkZWYiPkRlZmluaWNpw7NuIDYuMjogQ29yY2hldGVzIGRlIExpZTwvcD4NCkxvcyBjb3JjaGV0ZXMgZGUgTGllIGRlIFwoIEEsQiBcaW5cbWF0aGJie1J9XntueG59IFwpIGVzOlwNClxbDQpbQSxCXSA6PSBBQiAtIEJBDQpcXQ0KDQoqKlByb3BpZWRhZGVzOioqDQoNCi0gXCggW0EsQl0gPSAtW0IsQV0gXCkNCg0KLSBcKCBbQStBJyxCXSA9IFtBLEJdICsgW0EnLEJdIFwpDQoNCi0gXCggW0EsQitCJ10gPSBbQSxCXSArIFtBLEInXSBcKQ0KDQotIFwoIFtcYWxwaGEgQSwgQl0gPSAgW0EsXGFscGhhIEJdID0gXGFscGhhIFtBLEJdIFwpDQoNCi0gXCggW0EsW0IsQ11dICsgW0MsW0EsQl1dICsgW0IsW0MsQV1dID0gMCAgXCkNCg0KPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IC0yMHB4OyI+ICZuYnNwOyA8L3A+DQoNCjxoMiBjbGFzcz0iZGVmIj5EZWZpbmljacOzbiA2LjM8YnIvPiZlbXNwOyZuYnNwOyDDgWxnZWJyYSBkZSBMaWU8L2gyPg0KPHAgY2xhc3M9ImRlZiI+RGVmaW5pY2nDs24gNi4zOiDDgWxnZWJyYSBkZSBMaWU8L3A+DQpcKCBFXHN1YnNldFxtYXRoYmJ7Un1ee25cdGltZXMgbn0gXCkgZXMgbGxhbWFkbyAqKsOhbGdlYnJhIGRlIExpZSoqIHNpIGVzIHVuDQplc3BhY2lvIHZlY3RvcmlhbCB5IFwoIFtBLEJdXGluIEUgXCkgcGFyYSB0b2RvIFwoIEEsQlxpbiBFXCwgLiBcKQ0KDQoqKkVqZW1wbG9zOioqDQoNCi0gXCggVF9JIE9fbiA9IFwpIG1hdHJpY2VzIGFudGlzaW3DqXRyaWNhcy4NCg0KLSBcKCBUX0kgU0xfbiA9IFwpIHRyYXphIG51bGEuIA0KDQotIFwoIFRfSSBHTF9uICA9IFxtYXRoYmJ7Un1ee25cdGltZXMgbn1cLCAuXCkgDQoNCi0gXCggVF9JKFx7SV9uXH0pID0gXHswXH0gXCwgLlwpDQoNCjxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAtMTBweDsiPiAmbmJzcDsgPC9wPg0KDQo8aDIgY2xhc3M9ImRlZiI+RGVmaW5pY2nDs24gNi40PGJyLz4mZW1zcDsmbmJzcDsgRXhwb25lbmNpYWwgZGUgPGJyLz4mZW1zcDsmbmJzcDsgdW5hIG1hdHJpejwvaDI+DQo8cCBjbGFzcz0iZGVmIj5EZWZpbmljacOzbiA2LjQ6IEV4cG9uZW5jaWFsIGRlIHVuYSBtYXRyaXo8L3A+DQpTaSBcKCBBXGluXG1hdGhiYntSfV57blx0aW1lcyBufSBcKSwgbGEgKipleHBvbmVuY2lhbCBkZSBBKiogZXMNClxbDQpleHAoQSkgPSBlXntBfSA6PSBcZGlzcGxheXN0eWxle1xzdW1fe2s9MH1ee1xpbmZ0eX0gXGZyYWN7MX17ayF9IEFea31cLCAuDQpcXQ0KDQoqKlByb3BpZWRhZGVzOioqDQoNCi0gU2kgXCggQUIgPSBCQSBcKSwgZW50b25jZXMgXCggZV57QStCfSA9IGVee0F9IGVee0J9XCkNCg0KLSBcKCBlXnsocyt0KUF9ID0gZV57c0F9XGNkb3QgZV57dEF9IFwpIHBhcmEgdG9kbyBcKCBzLHRcaW5cbWF0aGJie1J9XCwuIFwpDQoNCi0gXCggZV57T30gPSBJXCwgLiBcKQ0KDQotIFwoIGVeey1BfSA9IChlXntBfSleey0xfSBcLC5cKQ0KDQotIFwoIFxmcmFje2RcLCBlXnt0QX19e2RcLHR9ID0gQSBlXnt0QX0gXCwgLlwpDQoNCjxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAtMTBweDsiPiAmbmJzcDsgPC9wPg0KDQo8aDIgY2xhc3M9InByb3AiPkxlbWEgNi4xPC9oMj4NCjxwIGNsYXNzPSJwcm9wIj5MZW1hIDYuMTwvcD4NClNpIFwoIE1cc3Vic2V0XG1hdGhiYntSfV57bn0gXCkgZXMgdW5hIHZhcmllZGFkIHkgDQpcKCB2Ok1cZmQgXG1hdGhiYntSfV5uIFwpIHVuIG1hcGEgc3VhdmUgdGFsIHF1ZSANClwoIHYocClcaW4gVF9wIE0gXCkgcGFyYSB0b2RvIFwoIHBcaW4gTVwsIC4gXCkgDQpQYXJhIGNhZGEgXCggcFxpbiBNIFwpIGV4aXN0ZW4gXCggYz4wIFwpIHkgDQpcKCBcbGFtYmRhOigtYyxjKVxmZCBNIFwpIHN1YXZlIHRhbCBxdWUgXCggXGxhbWJkYSgwKT0gcCBcKSB5DQpcKCBcbGFtYmRhJyh0KSA9IHYoXGxhbWJkYSh0KSkgXCkuIFNpIFwoIFxtdTooLWQsZClcZmQgTSBcKQ0KZXMgc3VhdmUsIFwoIFxtdSgwKT1wICBcKSB5IFwoIFxtdScodCk9dihcbXUodCkpIFwpLCBlbnRvbmNlcw0KZXhpc3RlIFwoIFxkZWx0YSA+MCBcKSB0YWwgcXVlIFwoIFxsYW1iZGEgXCkgeSBcKCBcbXUgXCkgY29pbmNpZGVuIA0KZW4gZWwgaW50ZXJ2YWxvIFwoICgtXGRlbHRhLFxkZWx0YSkgXCwgLiBcKQ0KDQo8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogLTEwcHg7Ij4gJm5ic3A7IDwvcD4NCg0KPGgyIGNsYXNzPSJwcm9wIj5Qcm9wb3NpY2nDs24gNi4yPC9oMj4NCjxwIGNsYXNzPSJwcm9wIj5Qcm9wb3NpY2nDs24gNi4yPC9wPg0KU2kgXCggR1xzdWJzZXQgR0xfbiBcKSBlcyB1biBncnVwbyBkZSBMaWUgeSBcKCBBXGluIFRfSSBHIFwpLCBlbnRvbmNlcw0KXCggZV57dEF9XGluIEcgXCkgcGFyYSB0b2RvIFwoIHRcaW5cbWF0aGJie1J9XCwuIFwpDQoNCjxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAtMTBweDsiPiAmbmJzcDsgPC9wPg0KDQo8aDIgY2xhc3M9InByb3AiPlByb3Bvc2ljacOzbiA2LjM8L2gyPg0KPHAgY2xhc3M9InByb3AiPlByb3Bvc2ljacOzbiA2LjM8L3A+DQpFbCBlc3BhY2lvIHRhbmdlbnRlIGVuIFwoIEkgXCkgZGUgdW4gZ3J1cG8gZGUgTGllIFwoIEcgXCkgZXMgdW4gw6FsZ2VicmEgZGUgTGllLg0K