Integral de Riemann.

Esta publicación se enfoca en exponer los resultados mas relevantes sobre la integral estocástica, pero para entender mejor estos conceptos en necesario comprender mejor algunos conceptos básicos del calculo tradicional, es decir primero veremos la construcción de la integral de Riemann y sus propiedades, para luego avanzar a la exposición de la teoría sobre la integral de Riemann- Stieltjes y finalmente abordaremos la teoría sobre la integral estocástica.

Definición

La definición de la integral de Riemann, normalmente se estudia en los primeros semestres de universitarios, la concepción de la integral de Riemann es la más conocida y la más utilizada en muchas áreas educativas.

Para simplificar nuestra construcción de la integral de Riemann en esta publicación, sin pérdida de generalidad podemos tomar \(f\) una función de variable real definida sobre el intervalo \([0,1]\), en general es posible tomar cualquier intervalo por ejemplo el intervalo \([a,b]\) con \(a,b \in \mathbb{R}\). Ahora consideremos la partición \(\tau_{n}\) sobre el intervalo \([0,1]\) tal que: \[\tau_{n}: 0=t_{0}<t_{1}<t_{2}<...<t_{n-1}<t_{n}=1\]

y definimos la longitud de cada intervalo como \(\Delta_{i}=t_{i}+t_{i-1}, i=1,2,...,n\) y tomando una partición intermedia \(\sigma_{n}\) de \(\tau_{n}\) dada por los \(y_{i}\) que satisfacen \(t_{i-1} \leq y_{i} \leq t_{i}, i=1,...,n\) entonces podemos definir la integral de Riemann como \[S_{n}=\sum_{i=1}^{n} f(y_{i})(t_{i}-t_{i-1})=\sum_{i=1}^{n} f(y_{i})\Delta_{i}\] En otras palabras podemos decir que la integral de Riemann es una media ponderada de los valores de \(f(y_{i})\), donde los pesos están dados por las longitudes de los intervalos \(\Delta_{i}\). En la práctica tenemos que tomar particiones muy finas, para obtener una mejor aproximación de la integral de Riemann, esto lo podemos lograr tomando el límite cuando \(n\) tiene de \(\infty\), y tomando intervalos cada vez más pequeños, es decir \[S= \lim_{n \rightarrow \infty} S_{n} = \lim_{n \rightarrow \infty} \sum_{i=1}^{n} f(y_{i})\Delta_{i}\] al resultado anterior se le conoce como Integral de Riemann. En la práctica se conoce a la integral de Riemann como el área bajo la curva continua \(f\). La notación usada para la integral de Riemann es \[S=\int_{0}^{1} f(t)dt\]

Propiedades.

A continuación veremos dos propiedades que juegan un papel importante dentro del cálculo, y que son muy útiles al momento de resolver problemas.

Dadas dos funciones Riemann integrables \(f_{1},f_{2}\) sobre el intervalo \([0,1]\) se cumplen las siguientes propiedades:

  • La integral de Riemann es lineal, es decir para cualesquiera dos constantes \(c_{1},c_{2}\) se cumple que \[\int_{0}^{1}[c_{1}f_{1}(t)+c_{2}f_{2}(t)] dt = c_{1} \int_{0}^{1} f_{1}(t) + c_{2} \int_{0}^{1} f_{2}(t)\]
  • La integral de Riemann es lineal sobre intervalos adyacentes, es decir \[\int_{0}^{1} f(t)dt = \int_{0}^{a} f(t)dt + \int_{a}^{1} f(t)dt,\hspace{0.5cm} 0\leq a \leq 1\] claramente este resultados pueden ser generalizados para intevarlos \([a,b] \in \mathbb{R}\).

Integral Riemann-Stieltjes.

En esta sección veremos de manera resumida como podemos construir la integral de Riemann-Stieltjes, como ya sabemos nos vamos sumergiendo en conceptos y definiciones más complejas, por lo que se recomienda complementar esta lectura junto con otros tópicos.

Definición.

Una forma fácil de recordar el concepto de la integral de Riemann-Stieltjes, basta con recordar que en teoría de probabilidad el valor esperado de una variable aleatoria \(X\), está dado por \[E[X]=\in_{\infty}^{\infty} tdF_{X}(f) \] Donde \(F_{X}\) denota la función de distribución de \(X\). esta notación hace referencia al hecho de que \(E[X]\) se define como integral de Riemann-Stieltjes, o también conocida como integral Lebesgue-Stieltjes, podemos definir matemáticamente esto como \[\int_{-\infty}^{\infty} tdF_{X}(f) =\sum_{i} y_{i}[F_{X}(t_{i})-F_{x}(t_{i-1})]\] Para alguna partición en \(\mathbb{R}\). Comencemos nuestra construcción de la integral de Riemann-Stieltjes, como en la seccion anterior sin perdida de generalidad podemos tomar una partición \(\tau_{n}\) del intervalor \([0,1]\), \[\tau_{n}: 0=t_{0}<t_{1}<t_{2}<...<t_{n-1}<t_{n}=1\] y tomando una particion intermedia \(\sigma_{n}\) de \(\tau_{n}\) \[\sigma_{n}: t_{i-1} \leq y_{i} \leq t_{i}, i = 1,2,...,n\] Finalmente tomando dos funciones de variable real \(f,g\) continuas sobre el intervalo \([0,1]\) definimos \[\Delta_{ig}=g(t_{i}-g(t_{i-1})), i = 1,...,n\] con todos los elemementos anteriores se define la suma de Riemann-Stieltjes como \[S_{n}=\sum_{i=1}^{n} f(y_{i}) \Delta_{ig}=\sum_{i=1}^{n} f(y_{i}) [g(t_{i})-g(t_{i-1})]\] si tomamos una particion donde la lingitud de los intervalos tienda a cero y tomamos limite cuando \(n\) tiene de a infinito tenemos \[S=\lim_{n \rightarrow \infty} S_{n}= \lim_{n \rightarrow \infty} \sum_{i=1}^{n} f(y_{i}) \Delta_{ig}\] la definicion anterior se conoce como la integral de Riemann-Stieltjes de \(f\) con respecto a una función \(g\) sobre el intervalo \([0,1]\) y se escribe como \[S=\int_{0}^{1} f(t)dg(t)\] Ahora nuestra duda fundamental reside en la pregunta ¿En cuales casos es posible tomar \(g=W\) donde \(W\) representa el movimiento Browniano, para aclarar esto veremos la siguiente Teorema.

Dada una funcion determinista \(f\) o un proceso estocastico con trayectoria simple, si \(f\) es diferenciable con derivada acotda en el intervalo \([a,b]\), entonces la integral de Riemann-Stieltjes esta dada por \[\int_{a}^{b} f(t)dW_{t}(\omega)\] existe para toda taryectoria simple del movimiento Browniano \(W_{t}(\omega)\).

Finalmente veremos como podemos definir la integral estocastica de una manera accesible.

Integral estocástica.

Dado un proceso estocástico \(\left\{ X(t), 0\leq t \leq T \right\}\) adaptada a la filtración generada por el movimiento Browniano tal que \(\int_{0}^{T} E[X(S)^{2}]ds < \infty\), entonces decimos que el proceso \(X\) es Itô integrable y definimos su integral como \[I_{t}(X) = \int_{0}^{t} X_{s} dW_{s} = \lim_{|\prod_{n}| \longrightarrow 0} \sum_{i=0}^{n-1}X(t_{i}(W(t_{i+1}-W(t_{i}))),\] donde la convergencia es en media cuadrática y \(t_{i} \in \prod_{n}\).

A continuación se describen las principales propiedades de la integral estocástica, las cuales se usaran de manera recurrente en la investigación.

Podemos ver un ejemplo de simulación utilizando R.

 # ex1 .13. R
set.seed (123)
n <- 5
N <- n* 10
t <- seq (0 , 2 *pi , length = N +1)
f <- sin ( t )+ rnorm (N +1)
plot (t , f , type ="l" , axes =F ,ylab = expression ( f( t )== sin ( t )+ epsilon [t ]))
idx <- seq (1 , N +1 , length =n +1)
axis (1 , t[ idx ] , c( sprintf ( " %3.2 f " , t [ idx [1: n ]]) ,expression (2 * pi )))
axis (2)
box ()
for(i in 1: n ){
  lines ( c(t[idx[i]],t[idx[i+1]]), c(f[idx[i]],f[idx[i]]) )
  points ( t[idx [i]],f[ idx [i ]], pch =19)
}
text ( t[ idx [3]]+.5 , f [ idx [2]]+.5 , expression (I (f ^{(5)})))

Propiedades

  • Si \(X\) es Itô integrable, entonces \[E\left[ \int_{0}^{T} X(s)dW(s) \right] = 0\] y \[Var\left( \int_{0}^{T} X(s)dW(s) \right)= \int_{0}^{T} E[x^{2}(t)]dt\]
  • Si \(X\) y \(Y\) son dos procesos Itô integrables, con \(a,b\) constantes entonces se cumple \[ \int_{0}^{T} (aX(t)+bY(t)) dW(t) = a \int_{0}^{T} X(t)dW(t) + b \int_{0}^{T} Y(t)dW(t) \]
  • De la propiedad de linealidad anterior se deduce que \[ \int_{0}^{T} adW(t) = a\int_{0}^{T}dW(t) = aW(T) \]
  • la integral estocástica de Itô, además cumple \[ \int_{0}^{T} W(t)dW(t) = \dfrac{1}{2} W^{2}(T)-\dfrac{1}{2} T \]
  • El proceso \(M(t)=M(0)+\int_{0}^{t} X(s)dW(s)\) es una martingala con \(M(0)\) constante.

Bibliografia

  • S. M. Iacus. Simulation and inference for stochastic differential equations: With R examples. Springer Series in Statistics 1. Springer-Verlag New York, 1 edition, 2008.

  • T. Mikosch. Elementary Stochastic Calculus with Finance in View. Advanced series on statistical science and applied probability 6. World Scientific Publ, 1998

LS0tDQp0aXRsZTogIkludGVncmFsIGVzdG9jw6FzdGljYS4iDQphdXRob3I6ICJKb2VsIFJhbcOtcmV6Ig0KZGF0ZTogImByIGZvcm1hdChTeXMudGltZSgpLCAnJWQgJUIgJVknKWAiDQpvdXRwdXQ6DQogIGh0bWxfbm90ZWJvb2s6DQogICAgdG9jOiB0cnVlDQogICAgdG9jX2Zsb2F0OiANCiAgICAgIGNvbGxhcHNlZDogdHJ1ZQ0KICAgICAgc21vb3RoX3Njcm9sbDogZmFsc2UNCiAgICB0b2NfZGVwdGg6IDMNCiAgICBudW1iZXJfc2VjdGlvbnM6IGZhbHNlDQotLS0NCg0KIyBJbnRlZ3JhbCBkZSBSaWVtYW5uLg0KDQpFc3RhIHB1YmxpY2FjacOzbiBzZSBlbmZvY2EgZW4gZXhwb25lciBsb3MgcmVzdWx0YWRvcyBtYXMgcmVsZXZhbnRlcyBzb2JyZSBsYSBgaW50ZWdyYWwgZXN0b2PDoXN0aWNhYCwgcGVybyBwYXJhIGVudGVuZGVyIG1lam9yIGVzdG9zIGNvbmNlcHRvcyBlbiBuZWNlc2FyaW8gY29tcHJlbmRlciBtZWpvciBhbGd1bm9zIGNvbmNlcHRvcyBiw6FzaWNvcyBkZWwgY2FsY3VsbyB0cmFkaWNpb25hbCwgZXMgZGVjaXIgcHJpbWVybyB2ZXJlbW9zIGxhIGNvbnN0cnVjY2nDs24gZGUgbGEgYGludGVncmFsIGRlIFJpZW1hbm5gIHkgc3VzIHByb3BpZWRhZGVzLCBwYXJhIGx1ZWdvIGF2YW56YXIgYSBsYSBleHBvc2ljacOzbiBkZSBsYSB0ZW9yw61hIHNvYnJlIGxhIGBpbnRlZ3JhbCBkZSBSaWVtYW5uLSBTdGllbHRqZXNgIHkgZmluYWxtZW50ZSBhYm9yZGFyZW1vcyBsYSB0ZW9yw61hIHNvYnJlIGxhIGludGVncmFsIGVzdG9jw6FzdGljYS4NCg0KIyMgRGVmaW5pY2nDs24NCg0KTGEgZGVmaW5pY2nDs24gZGUgbGEgaW50ZWdyYWwgZGUgUmllbWFubiwgbm9ybWFsbWVudGUgc2UgZXN0dWRpYSBlbiBsb3MgcHJpbWVyb3Mgc2VtZXN0cmVzIGRlIHVuaXZlcnNpdGFyaW9zLCBsYSBjb25jZXBjacOzbiBkZSBsYSBpbnRlZ3JhbCBkZSBSaWVtYW5uIGVzIGxhIG3DoXMgY29ub2NpZGEgeSBsYSBtw6FzIHV0aWxpemFkYSBlbiBtdWNoYXMgw6FyZWFzIGVkdWNhdGl2YXMuDQoNClBhcmEgc2ltcGxpZmljYXIgbnVlc3RyYSBjb25zdHJ1Y2Npw7NuIGRlIGxhIGludGVncmFsIGRlIFJpZW1hbm4gZW4gZXN0YSBwdWJsaWNhY2nDs24sIHNpbiBww6lyZGlkYSBkZSBnZW5lcmFsaWRhZCBwb2RlbW9zIHRvbWFyICRmJCB1bmEgZnVuY2nDs24gZGUgdmFyaWFibGUgcmVhbCBkZWZpbmlkYSBzb2JyZSBlbCBpbnRlcnZhbG8gJFswLDFdJCwgZW4gZ2VuZXJhbCBlcyBwb3NpYmxlIHRvbWFyIGN1YWxxdWllciBpbnRlcnZhbG8gcG9yIGVqZW1wbG8gZWwgaW50ZXJ2YWxvICRbYSxiXSQgY29uICRhLGIgXGluIFxtYXRoYmJ7Un0kLiBBaG9yYSBjb25zaWRlcmVtb3MgbGEgcGFydGljacOzbiAkXHRhdV97bn0kIHNvYnJlIGVsIGludGVydmFsbyAkWzAsMV0kIHRhbCBxdWU6DQokJFx0YXVfe259OiAwPXRfezB9PHRfezF9PHRfezJ9PC4uLjx0X3tuLTF9PHRfe259PTEkJA0KDQp5IGRlZmluaW1vcyBsYSBsb25naXR1ZCBkZSBjYWRhIGludGVydmFsbyBjb21vICRcRGVsdGFfe2l9PXRfe2l9K3Rfe2ktMX0sIGk9MSwyLC4uLixuJCB5IHRvbWFuZG8gdW5hIHBhcnRpY2nDs24gaW50ZXJtZWRpYSAkXHNpZ21hX3tufSQgZGUgJFx0YXVfe259JCBkYWRhIHBvciBsb3MgJHlfe2l9JCBxdWUgc2F0aXNmYWNlbiAkdF97aS0xfSBcbGVxIHlfe2l9IFxsZXEgdF97aX0sIGk9MSwuLi4sbiQgZW50b25jZXMgcG9kZW1vcyBkZWZpbmlyIGxhIGludGVncmFsIGRlIFJpZW1hbm4gY29tbyANCiQkU197bn09XHN1bV97aT0xfV57bn0gZih5X3tpfSkodF97aX0tdF97aS0xfSk9XHN1bV97aT0xfV57bn0gZih5X3tpfSlcRGVsdGFfe2l9JCQNCkVuIG90cmFzIHBhbGFicmFzIHBvZGVtb3MgZGVjaXIgcXVlIGxhIGludGVncmFsIGRlIFJpZW1hbm4gZXMgdW5hIG1lZGlhIHBvbmRlcmFkYSBkZSBsb3MgdmFsb3JlcyBkZSAkZih5X3tpfSkkLCBkb25kZSBsb3MgcGVzb3MgZXN0w6FuIGRhZG9zIHBvciBsYXMgbG9uZ2l0dWRlcyBkZSBsb3MgaW50ZXJ2YWxvcyAkXERlbHRhX3tpfSQuIEVuIGxhIHByw6FjdGljYSB0ZW5lbW9zIHF1ZSB0b21hciBwYXJ0aWNpb25lcyBtdXkgZmluYXMsIHBhcmEgb2J0ZW5lciB1bmEgbWVqb3IgYXByb3hpbWFjacOzbiBkZSBsYSBpbnRlZ3JhbCBkZSBSaWVtYW5uLCBlc3RvIGxvIHBvZGVtb3MgbG9ncmFyIHRvbWFuZG8gIGVsIGzDrW1pdGUgY3VhbmRvICRuJCB0aWVuZSBkZSAkXGluZnR5JCwgeSB0b21hbmRvIGludGVydmFsb3MgY2FkYSB2ZXogbcOhcyBwZXF1ZcOxb3MsIGVzIGRlY2lyDQokJFM9IFxsaW1fe24gXHJpZ2h0YXJyb3cgXGluZnR5fSBTX3tufSA9IFxsaW1fe24gXHJpZ2h0YXJyb3cgXGluZnR5fSBcc3VtX3tpPTF9XntufSBmKHlfe2l9KVxEZWx0YV97aX0kJA0KYWwgcmVzdWx0YWRvIGFudGVyaW9yIHNlIGxlIGNvbm9jZSBjb21vIGBJbnRlZ3JhbCBkZSBSaWVtYW5uYC4gRW4gbGEgcHLDoWN0aWNhIHNlIGNvbm9jZSBhIGxhIGludGVncmFsIGRlIFJpZW1hbm4gY29tbyBlbCDDoXJlYSBiYWpvIGxhIGN1cnZhIGNvbnRpbnVhICRmJC4gTGEgbm90YWNpw7NuIHVzYWRhIHBhcmEgbGEgaW50ZWdyYWwgZGUgUmllbWFubiBlcyAkJFM9XGludF97MH1eezF9IGYodClkdCQkDQoNCiMjIFByb3BpZWRhZGVzLg0KQSBjb250aW51YWNpw7NuIHZlcmVtb3MgZG9zIHByb3BpZWRhZGVzIHF1ZSBqdWVnYW4gdW4gcGFwZWwgaW1wb3J0YW50ZSBkZW50cm8gZGVsIGPDoWxjdWxvLCB5IHF1ZSBzb24gbXV5IMO6dGlsZXMgYWwgbW9tZW50byBkZSByZXNvbHZlciBwcm9ibGVtYXMuDQoNCkRhZGFzIGRvcyBmdW5jaW9uZXMgUmllbWFubiBpbnRlZ3JhYmxlcyAkZl97MX0sZl97Mn0kIHNvYnJlIGVsIGludGVydmFsbyAkWzAsMV0kIHNlIGN1bXBsZW4gbGFzIHNpZ3VpZW50ZXMgcHJvcGllZGFkZXM6DQoNCi0gTGEgaW50ZWdyYWwgZGUgUmllbWFubiBlcyBsaW5lYWwsIGVzIGRlY2lyIHBhcmEgY3VhbGVzcXVpZXJhIGRvcyBjb25zdGFudGVzICRjX3sxfSxjX3syfSQgc2UgY3VtcGxlIHF1ZSANCiQkXGludF97MH1eezF9W2NfezF9Zl97MX0odCkrY197Mn1mX3syfSh0KV0gZHQgPSBjX3sxfSBcaW50X3swfV57MX0gZl97MX0odCkgKyBjX3syfSBcaW50X3swfV57MX0gZl97Mn0odCkkJA0KLSBMYSBpbnRlZ3JhbCBkZSBSaWVtYW5uIGVzIGxpbmVhbCBzb2JyZSBpbnRlcnZhbG9zIGFkeWFjZW50ZXMsIGVzIGRlY2lyDQokJFxpbnRfezB9XnsxfSBmKHQpZHQgPSBcaW50X3swfV57YX0gZih0KWR0ICsgXGludF97YX1eezF9IGYodClkdCxcaHNwYWNlezAuNWNtfSAwXGxlcSBhIFxsZXEgMSQkDQpjbGFyYW1lbnRlIGVzdGUgcmVzdWx0YWRvcyBwdWVkZW4gc2VyIGdlbmVyYWxpemFkb3MgcGFyYSBpbnRldmFybG9zICRbYSxiXSBcaW4gXG1hdGhiYntSfSQuDQoNCiMgSW50ZWdyYWwgUmllbWFubi1TdGllbHRqZXMuDQoNCkVuIGVzdGEgc2VjY2nDs24gdmVyZW1vcyBkZSBtYW5lcmEgcmVzdW1pZGEgY29tbyBwb2RlbW9zIGNvbnN0cnVpciBsYSBpbnRlZ3JhbCBkZSBSaWVtYW5uLVN0aWVsdGplcywgY29tbyB5YSBzYWJlbW9zIG5vcyB2YW1vcyBzdW1lcmdpZW5kbyBlbiBjb25jZXB0b3MgeSBkZWZpbmljaW9uZXMgbcOhcyBjb21wbGVqYXMsIHBvciBsbyBxdWUgc2UgcmVjb21pZW5kYSBjb21wbGVtZW50YXIgZXN0YSBsZWN0dXJhIGp1bnRvIGNvbiBvdHJvcyB0w7NwaWNvcy4NCg0KIyMgRGVmaW5pY2nDs24uDQoNClVuYSBmb3JtYSBmw6FjaWwgZGUgcmVjb3JkYXIgZWwgY29uY2VwdG8gZGUgbGEgaW50ZWdyYWwgZGUgUmllbWFubi1TdGllbHRqZXMsIGJhc3RhIGNvbiByZWNvcmRhciBxdWUgZW4gdGVvcsOtYSBkZSBwcm9iYWJpbGlkYWQgZWwgdmFsb3IgZXNwZXJhZG8gZGUgdW5hIHZhcmlhYmxlIGFsZWF0b3JpYSAkWCQsIGVzdMOhIGRhZG8gcG9yDQokJEVbWF09XGluX3tcaW5mdHl9XntcaW5mdHl9IHRkRl97WH0oZikgJCQNCkRvbmRlICRGX3tYfSQgZGVub3RhIGxhIGZ1bmNpw7NuIGRlIGRpc3RyaWJ1Y2nDs24gZGUgJFgkLiBlc3RhIG5vdGFjacOzbiBoYWNlIHJlZmVyZW5jaWEgYWwgaGVjaG8gZGUgcXVlICRFW1hdJCBzZSBkZWZpbmUgY29tbyBpbnRlZ3JhbCBkZSBSaWVtYW5uLVN0aWVsdGplcywgbyB0YW1iacOpbiBjb25vY2lkYSBjb21vIGludGVncmFsIExlYmVzZ3VlLVN0aWVsdGplcywgcG9kZW1vcyBkZWZpbmlyIG1hdGVtw6F0aWNhbWVudGUgZXN0byBjb21vIA0KJCRcaW50X3stXGluZnR5fV57XGluZnR5fSB0ZEZfe1h9KGYpID1cc3VtX3tpfSB5X3tpfVtGX3tYfSh0X3tpfSktRl97eH0odF97aS0xfSldJCQNClBhcmEgYWxndW5hIHBhcnRpY2nDs24gZW4gJFxtYXRoYmJ7Un0kLg0KQ29tZW5jZW1vcyBudWVzdHJhIGNvbnN0cnVjY2nDs24gZGUgbGEgaW50ZWdyYWwgZGUgUmllbWFubi1TdGllbHRqZXMsIGNvbW8gZW4gbGEgc2VjY2lvbiBhbnRlcmlvciBzaW4gcGVyZGlkYSBkZSBnZW5lcmFsaWRhZCBwb2RlbW9zIHRvbWFyIHVuYSBwYXJ0aWNpw7NuICRcdGF1X3tufSQgZGVsIGludGVydmFsb3IgJFswLDFdJCwNCiQkXHRhdV97bn06IDA9dF97MH08dF97MX08dF97Mn08Li4uPHRfe24tMX08dF97bn09MSQkDQp5IHRvbWFuZG8gdW5hIHBhcnRpY2lvbiBpbnRlcm1lZGlhICRcc2lnbWFfe259JCBkZSAkXHRhdV97bn0kDQokJFxzaWdtYV97bn06IHRfe2ktMX0gXGxlcSB5X3tpfSBcbGVxIHRfe2l9LCBpID0gMSwyLC4uLixuJCQNCkZpbmFsbWVudGUgdG9tYW5kbyBkb3MgZnVuY2lvbmVzIGRlIHZhcmlhYmxlIHJlYWwgJGYsZyQgIGNvbnRpbnVhcyBzb2JyZSBlbCBpbnRlcnZhbG8gJFswLDFdJCBkZWZpbmltb3MgDQokJFxEZWx0YV97aWd9PWcodF97aX0tZyh0X3tpLTF9KSksIGkgPSAxLC4uLixuJCQNCmNvbiB0b2RvcyBsb3MgZWxlbWVtZW50b3MgYW50ZXJpb3JlcyBzZSBkZWZpbmUgbGEgc3VtYSBkZSBSaWVtYW5uLVN0aWVsdGplcyBjb21vIA0KJCRTX3tufT1cc3VtX3tpPTF9XntufSBmKHlfe2l9KSBcRGVsdGFfe2lnfT1cc3VtX3tpPTF9XntufSBmKHlfe2l9KSBbZyh0X3tpfSktZyh0X3tpLTF9KV0kJA0Kc2kgdG9tYW1vcyB1bmEgcGFydGljaW9uIGRvbmRlIGxhIGxpbmdpdHVkIGRlIGxvcyBpbnRlcnZhbG9zIHRpZW5kYSBhIGNlcm8geSB0b21hbW9zIGxpbWl0ZSBjdWFuZG8gJG4kIHRpZW5lIGRlIGEgaW5maW5pdG8gdGVuZW1vcyANCiQkUz1cbGltX3tuIFxyaWdodGFycm93IFxpbmZ0eX0gU197bn09IFxsaW1fe24gXHJpZ2h0YXJyb3cgXGluZnR5fSBcc3VtX3tpPTF9XntufSBmKHlfe2l9KSBcRGVsdGFfe2lnfSQkDQpsYSBkZWZpbmljaW9uIGFudGVyaW9yIHNlIGNvbm9jZSBjb21vIGxhIGBpbnRlZ3JhbCBkZSBSaWVtYW5uLVN0aWVsdGplc2AgZGUgJGYkIGNvbiByZXNwZWN0byBhIHVuYSBmdW5jacOzbiAkZyQgc29icmUgZWwgaW50ZXJ2YWxvICRbMCwxXSQgeSBzZSBlc2NyaWJlIGNvbW8gDQokJFM9XGludF97MH1eezF9IGYodClkZyh0KSQkDQpBaG9yYSBudWVzdHJhIGR1ZGEgZnVuZGFtZW50YWwgcmVzaWRlIGVuIGxhIHByZWd1bnRhIMK/RW4gY3VhbGVzIGNhc29zIGVzIHBvc2libGUgdG9tYXIgJGc9VyQgZG9uZGUgJFckIHJlcHJlc2VudGEgZWwgbW92aW1pZW50byBCcm93bmlhbm8sIHBhcmEgYWNsYXJhciBlc3RvIHZlcmVtb3MgbGEgc2lndWllbnRlIFRlb3JlbWEuDQoNClxtYXRoYmZ7VGVvcmVtYS59DQoNCkRhZGEgdW5hIGZ1bmNpb24gZGV0ZXJtaW5pc3RhICRmJCBvIHVuIHByb2Nlc28gZXN0b2Nhc3RpY28gY29uIHRyYXllY3RvcmlhIHNpbXBsZSwgc2kgJGYkIGVzIGRpZmVyZW5jaWFibGUgY29uIGRlcml2YWRhIGFjb3RkYSBlbiBlbCBpbnRlcnZhbG8gJFthLGJdJCwgZW50b25jZXMgbGEgaW50ZWdyYWwgZGUgUmllbWFubi1TdGllbHRqZXMgZXN0YSBkYWRhIHBvcg0KJCRcaW50X3thfV57Yn0gZih0KWRXX3t0fShcb21lZ2EpJCQgZXhpc3RlIHBhcmEgdG9kYSB0YXJ5ZWN0b3JpYSBzaW1wbGUgZGVsIG1vdmltaWVudG8gQnJvd25pYW5vICRXX3t0fShcb21lZ2EpJC4NCg0KRmluYWxtZW50ZSB2ZXJlbW9zIGNvbW8gcG9kZW1vcyBkZWZpbmlyIGxhIGludGVncmFsIGVzdG9jYXN0aWNhIGRlIHVuYSBtYW5lcmEgYWNjZXNpYmxlLg0KDQoNCg0KDQojIyBJbnRlZ3JhbCBlc3RvY8Ohc3RpY2EuDQoNCg0KRGFkbyB1biBwcm9jZXNvIGVzdG9jw6FzdGljbyAkXGxlZnRceyBYKHQpLCAwXGxlcSB0IFxsZXEgVCBccmlnaHRcfSQgYWRhcHRhZGEgYSBsYSBmaWx0cmFjacOzbiBnZW5lcmFkYSBwb3IgZWwgbW92aW1pZW50byBCcm93bmlhbm8gdGFsIHF1ZSAkXGludF97MH1ee1R9IEVbWChTKV57Mn1dZHMgPCBcaW5mdHkkLCBlbnRvbmNlcyBkZWNpbW9zIHF1ZSBlbCBwcm9jZXNvICRYJCBlcyBJdMO0IGludGVncmFibGUgeSBkZWZpbmltb3Mgc3UgaW50ZWdyYWwgY29tbyANCiQkSV97dH0oWCkgPSBcaW50X3swfV57dH0gWF97c30gZFdfe3N9ID0gXGxpbV97fFxwcm9kX3tufXwgXGxvbmdyaWdodGFycm93IDB9IFxzdW1fe2k9MH1ee24tMX1YKHRfe2l9KFcodF97aSsxfS1XKHRfe2l9KSkpLCQkDQpkb25kZSBsYSBjb252ZXJnZW5jaWEgZXMgZW4gbWVkaWEgY3VhZHLDoXRpY2EgeSAkdF97aX0gXGluIFxwcm9kX3tufSQuDQoNCkEgY29udGludWFjacOzbiBzZSBkZXNjcmliZW4gbGFzIHByaW5jaXBhbGVzIHByb3BpZWRhZGVzIGRlIGxhIGludGVncmFsIGVzdG9jw6FzdGljYSwgbGFzIGN1YWxlcyBzZSB1c2FyYW4gZGUgbWFuZXJhIHJlY3VycmVudGUgZW4gbGEgaW52ZXN0aWdhY2nDs24uDQoNClBvZGVtb3MgdmVyIHVuIGVqZW1wbG8gZGUgc2ltdWxhY2nDs24gdXRpbGl6YW5kbyBSLg0KDQpgYGB7cn0NCiAjIGV4MSAuMTMuIFINCnNldC5zZWVkICgxMjMpDQpuIDwtIDUNCk4gPC0gbiogMTANCnQgPC0gc2VxICgwICwgMiAqcGkgLCBsZW5ndGggPSBOICsxKQ0KZiA8LSBzaW4gKCB0ICkrIHJub3JtIChOICsxKQ0KcGxvdCAodCAsIGYgLCB0eXBlID0ibCIgLCBheGVzID1GICx5bGFiID0gZXhwcmVzc2lvbiAoIGYoIHQgKT09IHNpbiAoIHQgKSsgZXBzaWxvbiBbdCBdKSkNCmlkeCA8LSBzZXEgKDEgLCBOICsxICwgbGVuZ3RoID1uICsxKQ0KYXhpcyAoMSAsIHRbIGlkeCBdICwgYyggc3ByaW50ZiAoICIgJTMuMiBmICIgLCB0IFsgaWR4IFsxOiBuIF1dKSAsZXhwcmVzc2lvbiAoMiAqIHBpICkpKQ0KYXhpcyAoMikNCmJveCAoKQ0KZm9yKGkgaW4gMTogbiApew0KICBsaW5lcyAoIGModFtpZHhbaV1dLHRbaWR4W2krMV1dKSwgYyhmW2lkeFtpXV0sZltpZHhbaV1dKSApDQogIHBvaW50cyAoIHRbaWR4IFtpXV0sZlsgaWR4IFtpIF1dLCBwY2ggPTE5KQ0KfQ0KdGV4dCAoIHRbIGlkeCBbM11dKy41ICwgZiBbIGlkeCBbMl1dKy41ICwgZXhwcmVzc2lvbiAoSSAoZiBeeyg1KX0pKSkNCg0KYGBgDQojIyBQcm9waWVkYWRlcw0KDQotIFNpICRYJCBlcyBJdMO0IGludGVncmFibGUsIGVudG9uY2VzICQkRVxsZWZ0WyBcaW50X3swfV57VH0gWChzKWRXKHMpIFxyaWdodF0gPSAwJCQgeSAkJFZhclxsZWZ0KCBcaW50X3swfV57VH0gWChzKWRXKHMpIFxyaWdodCk9ICBcaW50X3swfV57VH0gRVt4XnsyfSh0KV1kdCQkDQotIFNpICRYJCB5ICRZJCBzb24gZG9zIHByb2Nlc29zIEl0w7QgaW50ZWdyYWJsZXMsIGNvbiAkYSxiJCBjb25zdGFudGVzIGVudG9uY2VzIHNlIGN1bXBsZSAkJCBcaW50X3swfV57VH0gKGFYKHQpK2JZKHQpKSBkVyh0KSA9IGEgXGludF97MH1ee1R9IFgodClkVyh0KSArIGIgXGludF97MH1ee1R9IFkodClkVyh0KSAkJA0KLSBEZSBsYSBwcm9waWVkYWQgZGUgbGluZWFsaWRhZCBhbnRlcmlvciBzZSBkZWR1Y2UgcXVlICQkIFxpbnRfezB9XntUfSBhZFcodCkgPSBhXGludF97MH1ee1R9ZFcodCkgPSBhVyhUKSAkJA0KLSBsYSBpbnRlZ3JhbCBlc3RvY8Ohc3RpY2EgZGUgSXTDtCwgYWRlbcOhcyBjdW1wbGUgJCQgXGludF97MH1ee1R9IFcodClkVyh0KSA9IFxkZnJhY3sxfXsyfSBXXnsyfShUKS1cZGZyYWN7MX17Mn0gVCAkJA0KLSBFbCBwcm9jZXNvICRNKHQpPU0oMCkrXGludF97MH1ee3R9IFgocylkVyhzKSQgZXMgdW5hIG1hcnRpbmdhbGEgY29uICRNKDApJCBjb25zdGFudGUuDQoNCg0KIyBCaWJsaW9ncmFmaWENCg0KLSBTLiBNLiBJYWN1cy4gU2ltdWxhdGlvbiBhbmQgaW5mZXJlbmNlIGZvciBzdG9jaGFzdGljIGRpZmZlcmVudGlhbCBlcXVhdGlvbnM6IFdpdGggUiBleGFtcGxlcy4NClNwcmluZ2VyIFNlcmllcyBpbiBTdGF0aXN0aWNzIDEuIFNwcmluZ2VyLVZlcmxhZyBOZXcgWW9yaywgMSBlZGl0aW9uLCAyMDA4Lg0KDQotIFQuIE1pa29zY2guIEVsZW1lbnRhcnkgU3RvY2hhc3RpYyBDYWxjdWx1cyB3aXRoIEZpbmFuY2UgaW4gVmlldy4gQWR2YW5jZWQgc2VyaWVzIG9uDQpzdGF0aXN0aWNhbCBzY2llbmNlIGFuZCBhcHBsaWVkIHByb2JhYmlsaXR5IDYuIFdvcmxkIFNjaWVudGlmaWMgUHVibCwgMTk5OA0K