4.3.1 Parametric Estimation using Modified Data
Teori dasar dan banyak aplikasi didasarkan pada pengamatan individu yang “lengkap” dan “tidak dimodifikasi”, seperti yang telah kita lihat di bagian sebelumnya. Bagian 3.5 memperkenalkan konsep pengamatan yang “dimodifikasi” karena dua jenis keterbatasan yang umum terjadi: penyensoran dan pemotongan. Sebagai contoh, adalah umum untuk berpikir tentang deductible asuransi sebagai menghasilkan data yang terpotong (dari kiri) atau batas polis sebagai menghasilkan data yang disensor (dari kanan). Sudut pandang ini berasal dari perusahaan asuransi utama (penjual asuransi). Sudut pandang lainnya adalah dari sudut pandang reasuradur (penanggung perusahaan asuransi) yang akan dibahas lebih lanjut di Bab 10. Reasuradur mungkin tidak melihat klaim yang lebih kecil dari suatu jumlah, hanya melihat bahwa klaim itu ada; ini adalah contoh penyensoran dari kiri. Jadi, pada bagian ini, kita akan membahas keseluruhan alternatif. Secara khusus, bagian ini akan membahas metode estimasi parametrik untuk tiga alternatif data individu, lengkap, dan tidak dimodifikasi: data tersensor interval yang hanya tersedia dalam kelompok, data yang dibatasi atau disensor, dan data yang mungkin tidak teramati karena terpotong.
4.3.1.1 Parametric Estimation using Grouped Data
Dengan mempertimbangkan sampel yang berukuran n yang diamati dari distribusi F(⋅), namun diamati dalam kelompok agar dapat mengatehui kelompok setiap pengamatan yang berbeda. Data tersebut disebut sebagai data yang dikelompokkan atau disensor interval. Contohnya adalah dengan melihat pencatatan karyawan tahunan 2 tahun berturut-turut. Orang-orang yang dipekerjakan di tahun pertama tetapi tidak di tahun kedua telah keluar pada suatu waktu selama tahun tersebut. Dengan tanggal keberangkatan yang tepat (data individu), kita dapat menghitung jumlah waktu mereka bersama perusahaan. Tanpa tanggal keberangkatan (data yang dikelompokkan), kita hanya tahu bahwa mereka keluar pada suatu waktu selama interval satu tahun.
Dengan merumuskan ide, dengan memisalkan k group atau intervals yang dibatasi oleh batas-batas \(c_0<c_1<⋯<c_k\). Dalam setiap pengamatan, hanya dapat mengamati interval yang dimana berada pada \(c_{j−1},c_j\), bukan nilai pastinya. Maka dari itu, dapat mengetahui jumlah pengamatan dalam setiap interval. Konstanta-konstanta \(({c_0<c_1<⋯<c_k})\) yang membentuk beberapa partisi dari domain F(⋅). Kemudian probabilitas dari sebuah observasi X_i yang jatuh pada interval ke-j interval ke-j adalah.
\[
\begin{align}
\Pr\left(X_i \in (c_{j-1}, c_j]\right) = F(c_j) - F(c_{j-1})
\end{align}
\]
Fungsi massa probabilitas yang sesuai untuk sebuah pengamatan adalah
\[
\begin{aligned}
f(x) &=
\begin{cases}
F(c_1) - F(c_{0}) & \text{if }\ x \in (c_{0}, c_1]\\
\vdots & \vdots \\
F(c_k) - F(c_{k-1}) & \text{if }\ x \in (c_{k-1}, c_k]\\
\end{cases} \\
&= \prod_{j=1}^k \left\{F(c_j) - F(c_{j-1})\right\}^{I(x \in (c_{j-1}, c_j])}
\end{aligned}
\]
Lalu dengan mendefinisikan n_j sebagai jumlah observasi yang berada pada interval ke-j \((c_{j-1},c_j)\). Sehingga fungsi Likelihood yang berhubungan dengan parameter θ adalah
\[
\begin{aligned}
L(\theta) = \prod_{j=1}^n f(x_i) = \prod_{j=1}^k \left\{F(c_j) - F(c_{j-1})\right\}^{n_j}
\end{aligned}
\]
Dan fungsi log-likelihoodnya adalah
\[
\begin{aligned}
L(\theta) = \prod_{j=1}^n f(x_i) = \prod_{j=1}^k \left\{F(c_j) - F(c_{j-1})\right\}^{n_j}
\end{aligned}
\]
Memaksimalkan fungsi likelihood (atau dengan kata lain, memaksimalkan fungsi log-likelihood) akan menghasilkan estimasi likelihood maksimum untuk data yang dikelompokkan.
Example 4.3.1 Actuarial Exam Question
Diberikan data : 1. Kerugian mengikuti distribusi eksponensial dengan rata-rata \(θ\). 2. Sebuah sampel acak dari 20 kerugian didistribusikan sebagai berikut:

Hitung estimasi kemungkinan maksimum dari \(θ\)
JAWABAN
\[
\begin{aligned}
L(\theta) &= F(1000)^7[F(2000)-F(1000)]^6[1-F(2000)]^7 \\
&= (1-e^{-1000/\theta})^7(e^{-1000/\theta} - e^{-2000/\theta})^6(e^{-2000/\theta})^7 \\
&= (1-p)^7(p-p^2)^6(p^2)^7 \\
&= p^{20}(1-p)^{13}
\end{aligned}
\]
di mana \(p = e^{-1000/θ}\). Memaksimalkan ekspresi ini sehubungan dengan \(p\) setara dengan memaksimalkan kemungkinan terhadap \(θ\). Maksimum terjadi pada \(p = /frac{20}{33}\). sehingga \(θ^ = /frac{-1000}{log(20/33)} = 1996.90\)
4.3.1.2 Censored Data
Penyensoran terjadi ketika kita hanya mencatat nilai yang terbatas dari sebuah observasi. Bentuk yang paling umum adalah penyensoran kanan, di mana kita mencatat nilai yang lebih kecil dari variabel dependen “benar” dan nilai penyensoran. Dengan menggunakan notasi, dengan X mewakili hasil yang diminati, seperti kerugian akibat kejadian yang diasuransikan atau waktu hingga kejadian. Dengan \(C_U\) menyatakan jumlah penyensoran. Dengan pengamatan tersensor kanan, mencatat \(X_U^* = min(X, C_U) = X∧C_U\). Lalu juga mencatat apakah penyensoran telah terjadi atau tidak. \(δ_U = I(X≤C_U)\) adalah variabel biner yang bernilai 0 jika penyensoran terjadi dan 1 jika tidak, yaitu, \(δ_U\) menunjukkan apakah X tidak disensor atau tidak.
Sebagai contoh \(C_U\) dapat merepresentasikan batas atas pertanggungan sebuah polis asuransi. Kerugian dapat melebihi jumlah \(C_U\) tetapi perusahaan asuransi hanya memiliki \(C_U\) dalam catatannya sebagai jumlah yang dibayarkan dan tidak memiliki jumlah kerugian aktual \(X\) dalam catatannya.
Sama halnya dengan penyensoran kiri, dapat mencatat yang lebih besar dari variabel yang diminati dan variabel yang disensor. Jika \(C_L\) digunakan untuk merepresentasikan jumlah penyensoran, maka mencatat \(X_L^*=max(X,C_L)\) bersama dengan indikator penyensoran \(δ_L=I(X>C_L)\).
Sebagai contoh, reasuradur akan menanggung kerugian penanggung yang lebih besar dari \(C_L\) ini berarti reasuradur bertanggung jawab atas kelebihan \(X_L^*\) pada \(C_L\). Dengan menggunakan notasi, kerugian reasuradur adalah \(Y = X_L^*L-C_L\) Untuk melihat hal ini, pertama-tama pertimbangkan kasus di mana pemegang polis mengalami kerugian \(X < C_L\). Kemudian, penanggung akan membayar seluruh klaim dan \(Y=C_L-C_L=0\) tidak ada kerugian bagi reasuradur. Sebaliknya, jika kerugian \(X≥C_L\) maka \(Y = X-C_L\) merupakan klaim yang ditahan oleh reasuradur. Dengan kata lain, jika terjadi kerugian, reasuradur mencatat jumlah sebenarnya jika melebihi batas \(C_L\) dan jika tidak, hanya mencatat akan mengalami kerugian sebesar 0.
4.3.1.3 Truncated Data
Pengamatan yang disensor dicatat untuk studi, meskipun dalam bentuk yang terbatas. Sebaliknya, hasil yang terpotong adalah jenis data yang hilang. Sebuah hasil berpotensi terpotong ketika ketersediaan pengamatan bergantung pada hasil.
Dalam asuransi, biasanya pengamatan terpotong kiri pada \(C_L\) ketika jumlahnya adalah
\[
\begin{aligned}
Y &=
\left\{
\begin{array}{cl}
\text{we do not observe }X & X \le C_L \\
X & X > C_L
\end{array}
\right.\end{aligned}
\]
Dengan kata lain, jika X kurang dari ambang batas \(C_L\) maka ia tidak teramati.
\(C_L\) dapat merepresentasikan deductible dari sebuah polis asuransi. Jika kerugian yang diasuransikan kurang dari deductible, maka perusahaan asuransi mungkin tidak mengamati atau mencatat kerugian sama sekali. Jika kerugian melebihi deductible, maka kelebihan \(X-C_L\) adalah klaim yang ditanggung oleh penanggung. Dimana dapat didefinisikan kerugian per pembayaran sebagai
\[
\begin{aligned}
Y^{P} = \left\{ \begin{matrix}
\text{Undefined} & X \le d \\
X - d & X > d
\end{matrix} \right.
\end{aligned}
\]
sehingga jika kerugian melebihi deductible, kami mencatat jumlah kelebihan \(X-d\). Hal ini sangat penting ketika mempertimbangkan jumlah yang akan dibayarkan oleh perusahaan asuransi. Namun, untuk tujuan estimasi pada bagian ini, tidak terlalu penting jika kita mengurangkan konstanta yang diketahui seperti \(C_L = d\). Sehingga, untuk variabel terpotong \(Y\) kita menggunakan konvensi yang lebih sederhana dan tidak mengurangkan \(d\).
Demikian pula untuk data terpotong kanan, jika X melebihi ambang batas \(C_U\) maka data tersebut tidak diobservasi. Dalam hal ini, jumlahnya adalah
\[
\begin{aligned}
Y &=
\left\{
\begin{array}{cl}
X & X \le C_U \\
\text{we do not observe }X & X > C_U.
\end{array}
\right.\end{aligned}
\]
Contoh klasik dari pemotongan dari kanan termasuk X sebagai ukuran jarak ke bintang. Ketika jaraknya melebihi tingkat tertentu \(C_U\) maka bintang tersebut tidak lagi dapat diamati.
Gambar dibawah ini membandingkan pengamatan yang terpotong dan tersensor. Nilai-nilai X yang lebih besar dari batas penyensoran “atas” \(C_U\) tidak teramati sama sekali (tersensor kanan), sedangkan nilai X yang lebih kecil dari batas pemotongan “bawah” \(C_L\) tetap diamati, tetapi diamati sebagai \(C_L\) daripada nilai X yang sebenarnya (tersensor kiri).

Sebagai rangkuman, untuk hasil X dan konstanta-konstanta \(C_L\) dan \(C_U\)

4.3.1.4 Parametric Estimation using Censored and Truncated Data
Untuk mempermudah, dapat diasumsikan jumlah penyensoran tidak acak dan hasil yang kontinu X . Sebagai permulaan, pertimbangkan kasus data tersensor kanan di mana merekam \(X_U^* = min(X, C_U) = X∧C_U\)) dan indikator penyensoran \(δ = I(X≤C_U)\) . Jika penyensoran terjadi sehingga \(δ=0\) maka \(X>C_U\) dan peluangnya adalah \(Pr(X>C_U)=1-F(C_U)\). Jika penyensoran tidak terjadi sehingga \(δ = 1\) maka \(X≤C_U\) dan likelihoodnya adalah \(f(x)\) . Ringkasnya, didapatkan likelihood dari sebuah pengamatan tunggal sebagai
\[
\begin{aligned}
\left\{
\begin{array}{ll}
1-F(C_U) & \text{if }\delta=0 \\
f(x) & \text{if } \delta = 1
\end{array}
\right. = \left\{ f(x)\right\}^{\delta} \left\{1-F(C_U)\right\}^{1-\delta} .
\end{aligned}
\] Ekspresi ruas kanan memungkinkan dalam menyajikan peluang dengan lebih ringkas. Sekarang, untuk sampel ke-i dengan ukuran n , peluangnya adalah
\[
\begin{aligned}
L(\theta) =
\prod_{i=1}^n \left\{ f(x_i)\right\}^{\delta_i} \left\{1-F(C_{Ui})\right\}^{1-\delta_i} = \prod_{\delta_i=1} f(x_i) \prod_{\delta_i=0} \{1-F(C_{Ui})\}
\end{aligned}
\]
dengan waktu penyensoran potensial \({(C_{U1},...,C_{Un})}\) . Di sini, notasi “\(∏_{δi} = 1\)” berarti mengambil hasil kali dari pengamatan yang tidak disensor, dan demikian pula untuk “\(∏_{δi} = 0\)”
Di sisi lain, data terpotong ditangani dalam inferensi kemungkinan melalui probabilitas bersyarat. Secara khusus, kontribusi likelihood dapat disesuaikan dengan membaginya dengan probabilitas bahwa variabel tersebut diamati. Sebagai rangkuman, kami memiliki kontribusi berikut pada fungsi likelihood untuk enam jenis hasil:

Untuk hasil yang diketahui dan data yang disensor, kemungkinannya adalah
\[
\begin{aligned}
L(\theta) = \prod_{E} f(x_i) \prod_{R} \{1-F(C_{Ui})\} \prod_{L}
F(C_{Li}) \prod_{I} (F(C_{Ui})-F(C_{Li})),
\end{aligned}
\]
di mana \("∏_E"\) adalah hasil kali pengamatan dengan nilai Exact, dan demikian pula untuk Right-,Left- and Interval-censoring.
Untuk data yang disensor kanan dan terpotong kiri, kemungkinannya adalah
\[
\begin{aligned}
L(\theta) = \prod_{E} \frac{f(x_i)}{1-F(C_{Li})} \prod_{R} \frac{1-F(C_{Ui})}{1-F(C_{Li})},
\end{aligned}
\] dan juga untuk kombinasi lainnya.
Example 4.3.2. Actuarial Exam Question
Diberikan data :
- Sebuah contoh kerugian adalah: 600 700 900
- Tidak ada informasi yang tersedia mengenai kerugian sebesar 500 atau kurang.
- Kerugian diasumsikan mengikuti distribusi eksponensial dengan rata-rata \(θ\).
Hitung estimasi kemungkinan maksimum dari \(θ\)
JAWAB
Pengamatan ini terpotong pada angka 500. Kontribusi dari setiap pengamatan terhadap fungsi likelihood adalah
\(\frac{f(x)}{1-F(500)} = \frac{\theta^{-1}e^{-x/\theta}}{e^{-500/\theta}}\)
Lalu Fungsi Likelihoodnya adalah
\(L(\theta)= \frac{\theta^{-1} e^{-600/\theta} \theta^{-1} e^{-700/\theta} \theta^{-1} e^{-900/\theta}}{(e^{-500/\theta})^3} = \theta^{-3}e^{-700/\theta}\)
Log-Likehoodnya adalah
\(l(\theta) = \log L(\theta) = -3 \log \theta - 700 \theta^{-1}\)
Memaksimalkan ekspresi ini dengan menetapkan turunan terhadap θ sama dengan 0, Maka memiliki
\(L'(\theta) = -3 \theta^{-1} + 700 \theta^{-2} = 0 \ \Rightarrow \ \hat{\theta} = \frac{700}{3} = 233.33 .\)
4.3.2 Nonparametric Estimation using Modified Data
Estimator nonparametrik memberikan tolok ukur yang berguna, sehingga akan sangat membantu untuk memahami prosedur estimasi untuk data yang dikelompokkan, disensor, dan dipotong
4.3.2.1 Grouped Data
Pengamatan dapat dikelompokkan (juga disebut sebagai interval tersensor) dalam arti bahwa pengamatan sebagai bagian dari salah satu dari k interval dalam bentuk \((c_{j-1},c_j)\) , untuk \(j = 1,...,k\) . Pada batas-batasnya, fungsi distribusi empiris didefinisikan dengan cara yang biasa:
\[
\begin{aligned}
F_n(c_j) = \frac{\text{number of observations } \le c_j}{n}
\end{aligned}
\]
Ogive Estimator
Untuk nilai lain dari \(x∈(c_{j-1},c_j)\) dapat mengestimasi fungsi distribusi dengan ogive estimator yang menginterpolasi secara linear antara \(F_n(c_{j-1})\) dan \(Fn_(c_j)\) yaitu nilai dari batas-batas \(F_n(c_{j-1})\) dan \(Fn_(c_j)\) dihubungkan dengan sebuah garis lurus. Hal ini secara formal dapat dinyatakan sebagai
\[
\begin{aligned}
F_n(x) = \frac{c_j-x}{c_j-c_{j-1}} F_n(c_{j-1}) + \frac{x-c_{j-1}}{c_j-c_{j-1}} F_n(c_j) \ \ \ \text{for } c_{j-1} \le x < c_j
\end{aligned}
\]
Sehinga Densitas yang sesuai adalah
\[
\begin{aligned}
f_n(x) = F^{\prime}_n(x) = \frac{F_n(c_j)-F_n(c_{j-1})}{c_j - c_{j-1}} \ \ \ \text{for } c_{j-1} < x < c_j .
\end{aligned}
\]
Example 4.3.4. Actuarial Exam Question
Diberikan informasi berikut ini mengenai jumlah klaim untuk 100 klaim:

4.3.2.2 Right-Censored Empirical Distribution Function
Akan sangat berguna untuk mengkalibrasi penaksir parametrik dengan metode nonparametrik yang tidak bergantung pada bentuk parametrik distribusi. Penaksir batas produk menurut (Kaplan dan Meier 1958) merupakan penaksir yang terkenal untuk fungsi distribusi dengan adanya penyensoran.
Motivasi untuk Penaksir Batas Produk Kaplan-Meier
Untuk menjelaskan mengapa product-limit bekerja dengan sangat baik dengan observasi tersensor, pertama-tama dapat melihat ke kasus tanpa penyensoran. Di sini, fungsi distribusi empiris \(F_n(x)\) adalah penaksir tak bias dari fungsi distribusi \(F(x)\) . Hal ini karena \(F_n(x)\) adalah rata-rata dari variabel indikator yang masing-masing tidak bias, yaitu, \(E [I(X_i≤x)]=Pr(X_i≤x)=F(x)\)
Sekarang misalkan hasil acak disensor di sebelah kanan dengan jumlah yang membatasi, katakanlah, CU sehingga dapat mencatat yang lebih kecil dari keduanya, \(X^* = min(X, C_U)\) . Untuk nilai-nilai \(x\) yang lebih kecil dari \(C_U\), variabel indikator masih memberikan penaksir yang tidak bias terhadap fungsi distribusi sebelum kita mencapai batas penyensoran. Artinya, \(E [I(X^∗≤x)]=F(x)\) karena \(I(X^∗≤x)=I(X≤x)\) untuk \(x<C_U\) . Dengan cara yang sama, \(E[I(X^∗>x)]=1-F(x)=S(x)\) . Tetapi, untuk \(x>C_U\) , \(I(X^∗≤x)\) secara umum bukan merupakan penaksir tak bias dari F(x). Sebagai alternatif, pertimbangkan dua peubah acak yang memiliki batas penyensoran yang berbeda. Sebagai ilustrasi, misalkan kita mengamati \(X^∗1=min(X_1,5)\) dan \(X^∗2 = min(X_2,10)\) di mana \(X_1\) dan \(X_2\) adalah undian independen dari distribusi yang sama. Untuk \(x≤5\) fungsi distribusi empiris \(F_2(x)\) adalah penaksir tak bias dari \(F(x)\). Akan tetapi, untuk \(5<x≤10\) pengamatan pertama tidak dapat digunakan untuk fungsi distribusi karena adanya batasan penyensoran. Sebagai gantinya, strategi yang dikembangkan oleh (Kaplan dan Meier 1958) adalah dengan menggunakan \(S_2(5)\) sebagai penaksir dari \(S(5)\) dan kemudian menggunakan observasi kedua untuk mengestimasi fungsi survival bersyarat pada kelangsungan hidup hingga waktu ke-5, \(Pr(X>x|X>5)=\frac{S(x)}{S(5)}\) . Secara khusus, untuk \(5<x≤10\) penaksir dari fungsi survival adalah
\[
\begin{aligned}
\hat{S}(x) = S_2(5) \times I(X_2^* > x )
\end{aligned}
\]
Kaplan-Meier Product Limit Estimator
Dengen memperluas ide dalam setiap observasi i,dengan ui menjadi batas atas penyensoran \((=∞) jikatidakadapenyensoran\). Dengan demikian, nilai yang tercatat adalah xi dalam kasus tidak ada penyensoran dan ui jika ada penyensoran. Dengan \(t_1<⋯<t_k\)menjadi k titik berbeda di mana kerugian yang tidak disensor terjadi, dan biarkan \(s_j\) adalah jumlah kerugian yang tidak tersensor \(x_i\) yang tidak tersensor pada \(t_j\). Himpunan risiko yang sesuai adalah jumlah observasi yang aktif (tidak tersensor) pada nilai yang kurang dari \(t_j\) yang dinotasikan sebagai \(R_j = \sum_{i=1}^n I(x_i \geq t_{j}) + \sum_{i=1}^n I(u_i \geq t_{j})\)
Dengan notasi ini, penaksir product-limit dari fungsi distribusi
\[
\begin{equation}
\hat{F}(x) =
\left\{
\begin{array}{ll}
0 & x<t_{1} \\
1-\prod_{j:t_{j} \leq x}\left( 1-\frac{s_j}{R_{j}}\right) & x \geq t_{1}
\end{array}
\right. .
\tag{4.6}
\end{equation}
\]
Sebagai contohnya, jika x lebih kecil dari kerugian terkecil yang tidak tersensor, maka \(x<t1\) dan \(F^(x)=0\) . Sebagai contoh lain, jika \(x\) berada di antara kerugian tersensor terkecil kedua dan ketiga, maka \(x∈(t_2,t_3]\) dan \(\hat{F}(x) = 1 - \left(1- \frac{s_1}{R_{1}}\right)\left(1- \frac{s_2}{R_{2}}\right)\) .Taksiran yang sesuai dari fungsi survival adalah \(\hat{S}(x) = 1 - \hat{F}(x)\)
Example 4.3.5. Actuarial Exam Question.
Berikut ini adalah contoh dari 10 pembayaran:

dimana + menunjukkan bahwa kerugian telah melebihi batas polis.
Dengan menggunakan estimator batas produk Kaplan-Meier, hitunglah probabilitas bahwa kerugian pada suatu polis melebihi 11, \(\hat{S}(11)\)
Terdapat empat waktu kejadian (pengamatan yang tidak disensor). Untuk setiap waktu tj kita dapat menghitung jumlah kejadian sj dan himpunan risiko \(R_j\) sebagai berikut:

Dengan demikian, estimasi Kaplan-Meier dari S(11) adalah
\[
\begin{aligned}
\hat{S}(11) &= \prod_{j:t_j\leq 11} \left( 1- \frac{s_j}{R_j} \right) = \prod_{j=1}^{2} \left( 1- \frac{s_j}{R_j} \right)\\
&= \left(1-\frac{2}{10} \right) \left(1-\frac{1}{5} \right) = (0.8)(0.8)= 0.64. \\
\end{aligned}
\]
Right-Censored, Left-Truncated Empirical Distribution Function
Selain penyensoran kanan, selanjutnya adalah memperluas kerangka kerja untuk memungkinkan data terpotong ke kiri. Seperti sebelumnya, untuk setiap observasi i , dengan \(u_i\) menjadi batas penyensoran atas ( \(=∞\) jika tidak ada penyensoran). Selanjutnya, \(d_i\) merupakan batas pemotongan bawah (0 jika tidak ada pemotongan). Dengan demikian, nilai yang tercatat (jika lebih besar dari \(d_i\) ) adalah \(x_i\) dalam kasus tidak ada penyensoran dan \(u_i\) jika ada penyensoran. Lalu untuk $t_1<⋯<t_k $menjadi \(k\) titik-titik yang berbeda di mana sebuah kejadian yang menarik terjadi, dan biarkan \(s_j\) adalah jumlah kejadian yang terekam \(x_i\) pada titik waktu \(t_j\).
Himpunan risiko yang sesuai adalah
\(R_j = \sum_{i=1}^n I(x_i \geq t_{j}) + \sum_{i=1}^n I(u_i \geq t_{j}) - \sum_{i=1}^n I(d_i \geq t_{j}).\)
Dengan definisi baru dari himpunan risiko ini, penaksir batas hasil kali dari fungsi distribusi adalah seperti pada persamaan product limit estimator.
Rumus Greenwood (Greenwood 1926) menurunkan rumus untuk estimasi varians dari penaksir batas-produk menjadi
\(\widehat{Var}(\hat{F}(x)) = (1-\hat{F}(x))^{2} \sum _{j:t_{j} \leq x} \dfrac{s_j}{R_{j}(R_{j}-s_j)}.\)
Seperti biasa, dapat mengacu pada akar kuadrat dari estimasi varians sebagai kesalahan standar, sebuah kuantitas yang secara rutin digunakan dalam interval kepercayaan dan untuk pengujian hipotesis. Untuk menghitungnya, metode survfit R mengambil sebuah objek data survival dan membuat sebuah objek baru yang berisi estimasi Kaplan-Meier dari fungsi survival bersama dengan interval kepercayaan. Metode Kaplan-Meier (type='kaplan-meier') digunakan secara default untuk membuat estimasi kurva survival. Fungsi survival diskrit yang dihasilkan memiliki massa titik pada waktu kejadian yang diamati (tanggal pelepasan) \(t_j\) dimana probabilitas suatu kejadian yang diberi ketahanan hidup pada durasi tersebut diestimasi sebagai jumlah kejadian yang diamati pada durasi sj dibagi dengan jumlah subjek yang terpapar atau ‘berisiko’ sesaat sebelum durasi kejadian \(R_j\).
Penaksir Alternatif
Dua jenis estimasi alternatif juga tersedia untuk metode survfit. Alternatif pertama (type='fh2') menangani hubungan, pada dasarnya, dengan mengasumsikan bahwa beberapa kejadian pada durasi yang sama terjadi dalam urutan yang berubah-ubah. Alternatif lain (type='fleming-harrington') menggunakan estimasi Nelson-Aalen (Aalen 1978) dari fungsi hazard kumulatif untuk mendapatkan estimasi fungsi survival. Estimasi bahaya kumulatif \(H^(x)\) dimulai dari nol dan bertambah pada setiap durasi kejadian yang diamati \(t_j\) dengan jumlah kejadian \(s_j\) dibagi dengan jumlah yang berisiko \(R_j\). Dengan notasi yang sama seperti di atas, penaksir Nelson-Äalen dari fungsi distribusi adalah
\[
\begin{aligned}
\hat{F}_{NA}(x) &=
\left\{
\begin{array}{ll}
0 & x<t_{1} \\
1- \exp \left(-\sum_{j:t_{j} \leq x}\frac{s_j}{R_j} \right) & x \geq t_{1}
\end{array}
\right. .\end{aligned}
\]
Itu merupakan hasil dari estimator Nelson-Äalen dari fungsi hazard kumulatif
\(\hat{H}(x)=\sum_{j:t_j\leq x} \frac{s_j}{R_j}\)
dan hubungan antara fungsi survival dan fungsi hazard kumulatif,
\(\hat{S}_{NA}(x)=e^{-\hat{H}(x)}\)
LS0tDQp0aXRsZTogIjQuMyBFc3RpbWF0aW9uIHVzaW5nIE1vZGlmaWVkIERhdGEiDQpzdWJ0aXRsZTogIlRlb3JpIFJlc2lrbyINCmF1dGhvcjogIkNsYXJhIERlbGxhIEV2YW5pYSAoMjAyMDQ5MjAwMTgpIg0KZGF0ZTogICJgciBmb3JtYXQoU3lzLkRhdGUoKSwgJyVCICVkLCAlWScpYCINCm91dHB1dDoNCiAgcm1kZm9ybWF0czo6cm9ib2Jvb2s6ICAgIyBodHRwczovL2dpdGh1Yi5jb20vanViYS9ybWRmb3JtYXRzDQogICAgc2VsZl9jb250YWluZWQ6IHRydWUNCiAgICB0aHVtYm5haWxzOiB0cnVlDQogICAgbGlnaHRib3g6IHRydWUNCiAgICBnYWxsZXJ5OiB0cnVlDQogICAgbGliX2RpcjogbGlicw0KICAgIGRmX3ByaW50OiAicGFnZWQiDQogICAgY29kZV9mb2xkaW5nOiAic2hvdyINCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICBjc3M6ICJzdHlsZS5jc3MiDQoNCi0tLQ0KDQoNCmBgYHtyIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoY2xhc3Muc291cmNlID0gIm5vY29weSIsDQogICAgICAgICAgICAgICAgICAgICAgY2xhc3Mub3V0cHV0ID0gIm5vY29weSIsDQogICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IEYsDQogICAgICAgICAgICAgICAgICAgICAgd2FybmluZyA9IEYpDQpgYGANCg0KDQo8YnI+DQoNCg0KPGltZyBzdHlsZT0iZmxvYXQ6IHJpZ2h0OyBtYXJnaW46IC01MHB4IDUwcHggMHB4IDUwcHg7IHdpZHRoOjI1JSIgc3JjPSJtZS5qcGVnIi8+IA0KDQp8DQo6LS0tLSB8Oi0tLS0NCktvbnRha3wgKjoqICRcZG93bmFycm93JA0KRW1haWx8IGNsYXJhLmV2YW5pYUBzdHVkZW50Lm1hdGFuYXVuaXZlcnNpdHkuYWMuaWQNCkluc3RhZ3JhbSB8IGh0dHBzOi8vd3d3Lmluc3RhZ3JhbS5jb20vY2xhcmFldmFuaWEvIA0KUlB1YnMgIHwgaHR0cHM6Ly9ycHVicy5jb20vY2xhcmFkZWxsYWV2YW5pYS8gDQoNCg0KRGFsYW0gTWF0ZXJpIGluaSBha2FuIG1lbXBlbGFqYXJpOg0KDQoNCjEuIE1lbmplbGFza2FuIGRhdGEgeWFuZyBkaWtlbG9tcG9ra2FuLCBkaXNlbnNvciwgZGFuIHRlcnBvdG9uZw0KMi4gTWVuZ2VzdGltYXNpIGRpc3RyaWJ1c2kgcGFyYW1ldHJpayBiZXJkYXNhcmthbiBkYXRhIHlhbmcgZGlrZWxvbXBva2thbiwgZGlzZW5zb3IsIGRhbiB0ZXJwb3RvbmcNCjMuIE1lbmdlc3RpbWFzaSBkaXN0cmlidXNpIG5vbnBhcmFtZXRyaWsgYmVyZGFzYXJrYW4gZGF0YSB5YW5nIGRpa2Vsb21wb2trYW4sIGRpc2Vuc29yLCBkYW4gdGVycG90b25nDQoNCiMgNC4zLjEgUGFyYW1ldHJpYyBFc3RpbWF0aW9uIHVzaW5nIE1vZGlmaWVkIERhdGENCg0KVGVvcmkgZGFzYXIgZGFuIGJhbnlhayBhcGxpa2FzaSBkaWRhc2Fya2FuIHBhZGEgcGVuZ2FtYXRhbiBpbmRpdmlkdSB5YW5nICJsZW5na2FwIiBkYW4gInRpZGFrIGRpbW9kaWZpa2FzaSIsIHNlcGVydGkgeWFuZyB0ZWxhaCBraXRhIGxpaGF0IGRpIGJhZ2lhbiBzZWJlbHVtbnlhLiBCYWdpYW4gMy41IG1lbXBlcmtlbmFsa2FuIGtvbnNlcCBwZW5nYW1hdGFuIHlhbmcgImRpbW9kaWZpa2FzaSIga2FyZW5hIGR1YSBqZW5pcyBrZXRlcmJhdGFzYW4geWFuZyB1bXVtIHRlcmphZGk6IHBlbnllbnNvcmFuIGRhbiBwZW1vdG9uZ2FuLiBTZWJhZ2FpIGNvbnRvaCwgYWRhbGFoIHVtdW0gdW50dWsgYmVycGlraXIgdGVudGFuZyBkZWR1Y3RpYmxlIGFzdXJhbnNpIHNlYmFnYWkgbWVuZ2hhc2lsa2FuIGRhdGEgeWFuZyB0ZXJwb3RvbmcgKGRhcmkga2lyaSkgYXRhdSBiYXRhcyBwb2xpcyBzZWJhZ2FpIG1lbmdoYXNpbGthbiBkYXRhIHlhbmcgZGlzZW5zb3IgKGRhcmkga2FuYW4pLiBTdWR1dCBwYW5kYW5nIGluaSBiZXJhc2FsIGRhcmkgcGVydXNhaGFhbiBhc3VyYW5zaSB1dGFtYSAocGVuanVhbCBhc3VyYW5zaSkuIFN1ZHV0IHBhbmRhbmcgbGFpbm55YSBhZGFsYWggZGFyaSBzdWR1dCBwYW5kYW5nIHJlYXN1cmFkdXIgKHBlbmFuZ2d1bmcgcGVydXNhaGFhbiBhc3VyYW5zaSkgeWFuZyBha2FuIGRpYmFoYXMgbGViaWggbGFuanV0IGRpIEJhYiAxMC4gUmVhc3VyYWR1ciBtdW5na2luIHRpZGFrIG1lbGloYXQga2xhaW0geWFuZyBsZWJpaCBrZWNpbCBkYXJpIHN1YXR1IGp1bWxhaCwgaGFueWEgbWVsaWhhdCBiYWh3YSBrbGFpbSBpdHUgYWRhOyBpbmkgYWRhbGFoIGNvbnRvaCBwZW55ZW5zb3JhbiBkYXJpIGtpcmkuIEphZGksIHBhZGEgYmFnaWFuIGluaSwga2l0YSBha2FuIG1lbWJhaGFzIGtlc2VsdXJ1aGFuIGFsdGVybmF0aWYuIFNlY2FyYSBraHVzdXMsIGJhZ2lhbiBpbmkgYWthbiBtZW1iYWhhcyBtZXRvZGUgZXN0aW1hc2kgcGFyYW1ldHJpayB1bnR1ayB0aWdhIGFsdGVybmF0aWYgZGF0YSBpbmRpdmlkdSwgbGVuZ2thcCwgZGFuIHRpZGFrIGRpbW9kaWZpa2FzaTogZGF0YSB0ZXJzZW5zb3IgaW50ZXJ2YWwgeWFuZyBoYW55YSB0ZXJzZWRpYSBkYWxhbSBrZWxvbXBvaywgZGF0YSB5YW5nIGRpYmF0YXNpIGF0YXUgZGlzZW5zb3IsIGRhbiBkYXRhIHlhbmcgbXVuZ2tpbiB0aWRhayB0ZXJhbWF0aSBrYXJlbmEgdGVycG90b25nLg0KDQojIyA0LjMuMS4xIFBhcmFtZXRyaWMgRXN0aW1hdGlvbiB1c2luZyBHcm91cGVkIERhdGENCg0KRGVuZ2FuIG1lbXBlcnRpbWJhbmdrYW4gc2FtcGVsIHlhbmcgYmVydWt1cmFuIG4geWFuZyBkaWFtYXRpIGRhcmkgZGlzdHJpYnVzaSBgRijii4UpYCwgbmFtdW4gZGlhbWF0aSBkYWxhbSBrZWxvbXBvayBhZ2FyIGRhcGF0IG1lbmdhdGVodWkga2Vsb21wb2sgc2V0aWFwIHBlbmdhbWF0YW4geWFuZyBiZXJiZWRhLiBEYXRhIHRlcnNlYnV0IGRpc2VidXQgc2ViYWdhaSBkYXRhIHlhbmcgZGlrZWxvbXBva2thbiBhdGF1IGRpc2Vuc29yIGludGVydmFsLiBDb250b2hueWEgYWRhbGFoIGRlbmdhbiBtZWxpaGF0IHBlbmNhdGF0YW4ga2FyeWF3YW4gdGFodW5hbiAyIHRhaHVuIGJlcnR1cnV0LXR1cnV0LiBPcmFuZy1vcmFuZyB5YW5nIGRpcGVrZXJqYWthbiBkaSB0YWh1biBwZXJ0YW1hIHRldGFwaSB0aWRhayBkaSB0YWh1biBrZWR1YSB0ZWxhaCBrZWx1YXIgcGFkYSBzdWF0dSB3YWt0dSBzZWxhbWEgdGFodW4gdGVyc2VidXQuIERlbmdhbiB0YW5nZ2FsIGtlYmVyYW5na2F0YW4geWFuZyB0ZXBhdCAoZGF0YSBpbmRpdmlkdSksIGtpdGEgZGFwYXQgbWVuZ2hpdHVuZyBqdW1sYWggd2FrdHUgbWVyZWthIGJlcnNhbWEgcGVydXNhaGFhbi4gVGFucGEgdGFuZ2dhbCBrZWJlcmFuZ2thdGFuIChkYXRhIHlhbmcgZGlrZWxvbXBva2thbiksIGtpdGEgaGFueWEgdGFodSBiYWh3YSBtZXJla2Ega2VsdWFyIHBhZGEgc3VhdHUgd2FrdHUgc2VsYW1hIGludGVydmFsIHNhdHUgdGFodW4uDQoNCkRlbmdhbiBtZXJ1bXVza2FuIGlkZSwgZGVuZ2FuIG1lbWlzYWxrYW4gayBncm91cCBhdGF1IGludGVydmFscyB5YW5nIGRpYmF0YXNpIG9sZWggYmF0YXMtYmF0YXMgJGNfMDxjXzE84ouvPGNfayQuIERhbGFtIHNldGlhcCBwZW5nYW1hdGFuLCBoYW55YSBkYXBhdCBtZW5nYW1hdGkgaW50ZXJ2YWwgeWFuZyBkaW1hbmEgYmVyYWRhIHBhZGEgJGNfe2riiJIxfSxjX2okLCBidWthbiBuaWxhaSBwYXN0aW55YS4gTWFrYSBkYXJpIGl0dSwgZGFwYXQgbWVuZ2V0YWh1aSBqdW1sYWggcGVuZ2FtYXRhbiBkYWxhbSBzZXRpYXAgaW50ZXJ2YWwuIEtvbnN0YW50YS1rb25zdGFudGEgJCh7Y18wPGNfMTzii688Y19rfSkkIHlhbmcgbWVtYmVudHVrIGJlYmVyYXBhIHBhcnRpc2kgZGFyaSBkb21haW4gYEYo4ouFKWAuIEtlbXVkaWFuIHByb2JhYmlsaXRhcyBkYXJpIHNlYnVhaCBvYnNlcnZhc2kgYFhfaWAgeWFuZyBqYXR1aCBwYWRhIGludGVydmFsIGtlLWogaW50ZXJ2YWwga2UtaiBhZGFsYWguDQoNCiQkDQpcYmVnaW57YWxpZ259DQpcUHJcbGVmdChYX2kgXGluIChjX3tqLTF9LCBjX2pdXHJpZ2h0KSA9IEYoY19qKSAtIEYoY197ai0xfSkNClxlbmR7YWxpZ259DQokJA0KDQpGdW5nc2kgbWFzc2EgcHJvYmFiaWxpdGFzIHlhbmcgc2VzdWFpIHVudHVrIHNlYnVhaCBwZW5nYW1hdGFuIGFkYWxhaA0KDQokJA0KXGJlZ2lue2FsaWduZWR9DQpmKHgpICY9DQpcYmVnaW57Y2FzZXN9DQpGKGNfMSkgLSBGKGNfezB9KSAmICAgXHRleHR7aWYgfVwgeCBcaW4gKGNfezB9LCBjXzFdXFwNClx2ZG90cyAmIFx2ZG90cyBcXA0KRihjX2spIC0gRihjX3trLTF9KSAmICAgXHRleHR7aWYgfVwgeCBcaW4gKGNfe2stMX0sIGNfa11cXA0KXGVuZHtjYXNlc30gXFwNCiY9IFxwcm9kX3tqPTF9XmsgXGxlZnRce0YoY19qKSAtIEYoY197ai0xfSlccmlnaHRcfV57SSh4IFxpbiAoY197ai0xfSwgY19qXSl9DQpcZW5ke2FsaWduZWR9DQokJA0KDQpMYWx1IGRlbmdhbiBtZW5kZWZpbmlzaWthbiBgbl9qYCBzZWJhZ2FpIGp1bWxhaCBvYnNlcnZhc2kgeWFuZyBiZXJhZGEgcGFkYSBpbnRlcnZhbCBrZS1qICQoY197ai0xfSxjX2opJC4gU2VoaW5nZ2EgZnVuZ3NpIExpa2VsaWhvb2QgeWFuZyBiZXJodWJ1bmdhbiBkZW5nYW4gcGFyYW1ldGVyIM64IGFkYWxhaCANCg0KJCQNClxiZWdpbnthbGlnbmVkfQ0KTChcdGhldGEpID0gXHByb2Rfe2o9MX1ebiBmKHhfaSkgPSBccHJvZF97aj0xfV5rIFxsZWZ0XHtGKGNfaikgLSBGKGNfe2otMX0pXHJpZ2h0XH1ee25fan0NClxlbmR7YWxpZ25lZH0NCiQkDQoNCkRhbiBmdW5nc2kgbG9nLWxpa2VsaWhvb2RueWEgYWRhbGFoDQoNCg0KJCQNClxiZWdpbnthbGlnbmVkfQ0KTChcdGhldGEpID0gXHByb2Rfe2o9MX1ebiBmKHhfaSkgPSBccHJvZF97aj0xfV5rIFxsZWZ0XHtGKGNfaikgLSBGKGNfe2otMX0pXHJpZ2h0XH1ee25fan0NClxlbmR7YWxpZ25lZH0NCiQkDQoNCk1lbWFrc2ltYWxrYW4gZnVuZ3NpIGxpa2VsaWhvb2QgKGF0YXUgZGVuZ2FuIGthdGEgbGFpbiwgbWVtYWtzaW1hbGthbiBmdW5nc2kgbG9nLWxpa2VsaWhvb2QpIGFrYW4gbWVuZ2hhc2lsa2FuIGVzdGltYXNpIGxpa2VsaWhvb2QgbWFrc2ltdW0gdW50dWsgZGF0YSB5YW5nIGRpa2Vsb21wb2trYW4uDQoNCiMjIyBFeGFtcGxlIDQuMy4xIEFjdHVhcmlhbCBFeGFtIFF1ZXN0aW9uDQoNCkRpYmVyaWthbiBkYXRhIDoNCjEuIEtlcnVnaWFuIG1lbmdpa3V0aSBkaXN0cmlidXNpIGVrc3BvbmVuc2lhbCBkZW5nYW4gcmF0YS1yYXRhICTOuCQuDQoyLiBTZWJ1YWggc2FtcGVsIGFjYWsgZGFyaSAyMCBrZXJ1Z2lhbiBkaWRpc3RyaWJ1c2lrYW4gc2ViYWdhaSBiZXJpa3V0Og0KDQpgYGB7ciBpbWFnZTEsIGVjaG89RkFMU0UsIGZpZy5jYXA9IiIsZmlnLmFsaWduPSdjZW50ZXInLCBvdXQud2lkdGggPSAnMTAwJSd9DQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygiNDMucG5nIikNCmBgYA0KDQpIaXR1bmcgZXN0aW1hc2kga2VtdW5na2luYW4gbWFrc2ltdW0gZGFyaSAkzrgkDQoNCioqSkFXQUJBTioqDQoNCiQkDQpcYmVnaW57YWxpZ25lZH0NCkwoXHRoZXRhKSAmPSBGKDEwMDApXjdbRigyMDAwKS1GKDEwMDApXV42WzEtRigyMDAwKV1eNyBcXA0KJj0gKDEtZV57LTEwMDAvXHRoZXRhfSleNyhlXnstMTAwMC9cdGhldGF9IC0gZV57LTIwMDAvXHRoZXRhfSleNihlXnstMjAwMC9cdGhldGF9KV43IFxcDQomPSAoMS1wKV43KHAtcF4yKV42KHBeMileNyBcXA0KJj0gcF57MjB9KDEtcCleezEzfQ0KXGVuZHthbGlnbmVkfQ0KJCQNCg0KZGkgbWFuYSAkcCA9IGVeey0xMDAwL864fSQuIE1lbWFrc2ltYWxrYW4gZWtzcHJlc2kgaW5pIHNlaHVidW5nYW4gZGVuZ2FuICRwJCBzZXRhcmEgZGVuZ2FuIG1lbWFrc2ltYWxrYW4ga2VtdW5na2luYW4gdGVyaGFkYXAgJM64JC4gTWFrc2ltdW0gdGVyamFkaSBwYWRhICRwID0gL2ZyYWN7MjB9ezMzfSQuIHNlaGluZ2dhICTOuF4gPSAvZnJhY3stMTAwMH17bG9nKDIwLzMzKX0gPSAxOTk2LjkwJA0KDQojIyA0LjMuMS4yIENlbnNvcmVkIERhdGENCg0KUGVueWVuc29yYW4gdGVyamFkaSBrZXRpa2Ega2l0YSBoYW55YSBtZW5jYXRhdCBuaWxhaSB5YW5nIHRlcmJhdGFzIGRhcmkgc2VidWFoIG9ic2VydmFzaS4gQmVudHVrIHlhbmcgcGFsaW5nIHVtdW0gYWRhbGFoIHBlbnllbnNvcmFuIGthbmFuLCBkaSBtYW5hIGtpdGEgbWVuY2F0YXQgbmlsYWkgeWFuZyBsZWJpaCBrZWNpbCBkYXJpIHZhcmlhYmVsIGRlcGVuZGVuICJiZW5hciIgZGFuIG5pbGFpIHBlbnllbnNvcmFuLiBEZW5nYW4gbWVuZ2d1bmFrYW4gbm90YXNpLCBkZW5nYW4gYFhgIG1ld2FraWxpIGhhc2lsIHlhbmcgZGltaW5hdGksIHNlcGVydGkga2VydWdpYW4gYWtpYmF0IGtlamFkaWFuIHlhbmcgZGlhc3VyYW5zaWthbiBhdGF1IHdha3R1IGhpbmdnYSBrZWphZGlhbi4gRGVuZ2FuICRDX1UkIG1lbnlhdGFrYW4ganVtbGFoIHBlbnllbnNvcmFuLiBEZW5nYW4gcGVuZ2FtYXRhbiB0ZXJzZW5zb3Iga2FuYW4sIG1lbmNhdGF0ICRYX1VeKiA9IG1pbihYLCBDX1UpID0gWOKIp0NfVSQuIExhbHUganVnYSBtZW5jYXRhdCBhcGFrYWggcGVueWVuc29yYW4gdGVsYWggdGVyamFkaSBhdGF1IHRpZGFrLiAkzrRfVSA9IEkoWOKJpENfVSkkIGFkYWxhaCB2YXJpYWJlbCBiaW5lciB5YW5nIGJlcm5pbGFpIDAgamlrYSBwZW55ZW5zb3JhbiB0ZXJqYWRpIGRhbiAxIGppa2EgdGlkYWssIHlhaXR1LCAkzrRfVSQgbWVudW5qdWtrYW4gYXBha2FoIFggdGlkYWsgZGlzZW5zb3IgYXRhdSB0aWRhay4NCg0KU2ViYWdhaSBjb250b2ggJENfVSQgZGFwYXQgbWVyZXByZXNlbnRhc2lrYW4gYmF0YXMgYXRhcyBwZXJ0YW5nZ3VuZ2FuIHNlYnVhaCBwb2xpcyBhc3VyYW5zaS4gS2VydWdpYW4gZGFwYXQgbWVsZWJpaGkganVtbGFoICRDX1UkIHRldGFwaSBwZXJ1c2FoYWFuIGFzdXJhbnNpIGhhbnlhIG1lbWlsaWtpICRDX1UkIGRhbGFtIGNhdGF0YW5ueWEgc2ViYWdhaSBqdW1sYWggeWFuZyBkaWJheWFya2FuIGRhbiB0aWRhayBtZW1pbGlraSBqdW1sYWgga2VydWdpYW4gYWt0dWFsICRYJCBkYWxhbSBjYXRhdGFubnlhLg0KDQpTYW1hIGhhbG55YSBkZW5nYW4gcGVueWVuc29yYW4ga2lyaSwgZGFwYXQgbWVuY2F0YXQgeWFuZyBsZWJpaCBiZXNhciBkYXJpIHZhcmlhYmVsIHlhbmcgZGltaW5hdGkgZGFuIHZhcmlhYmVsIHlhbmcgZGlzZW5zb3IuIEppa2EgJENfTCQgZGlndW5ha2FuIHVudHVrIG1lcmVwcmVzZW50YXNpa2FuIGp1bWxhaCBwZW55ZW5zb3JhbiwgbWFrYSBtZW5jYXRhdCAkWF9MXio9bWF4KFgsQ19MKSQgYmVyc2FtYSBkZW5nYW4gaW5kaWthdG9yIHBlbnllbnNvcmFuICTOtF9MPUkoWD5DX0wpJC4NCg0KU2ViYWdhaSBjb250b2gsICByZWFzdXJhZHVyIGFrYW4gbWVuYW5nZ3VuZyBrZXJ1Z2lhbiBwZW5hbmdndW5nIHlhbmcgbGViaWggYmVzYXIgZGFyaSAkQ19MJCBpbmkgYmVyYXJ0aSByZWFzdXJhZHVyIGJlcnRhbmdndW5nIGphd2FiIGF0YXMga2VsZWJpaGFuICRYX0xeKiQgcGFkYSAkQ19MJC4gRGVuZ2FuIG1lbmdndW5ha2FuIG5vdGFzaSwga2VydWdpYW4gcmVhc3VyYWR1ciBhZGFsYWggJFkgPSBYX0xeKkwtQ19MJCBVbnR1ayBtZWxpaGF0IGhhbCBpbmksIHBlcnRhbWEtdGFtYSBwZXJ0aW1iYW5na2FuIGthc3VzIGRpIG1hbmEgcGVtZWdhbmcgcG9saXMgbWVuZ2FsYW1pIGtlcnVnaWFuICRYIDwgQ19MJC4gS2VtdWRpYW4sIHBlbmFuZ2d1bmcgYWthbiBtZW1iYXlhciBzZWx1cnVoIGtsYWltIGRhbiAkWT1DX0wtQ19MPTAkIHRpZGFrIGFkYSBrZXJ1Z2lhbiBiYWdpIHJlYXN1cmFkdXIuIFNlYmFsaWtueWEsIGppa2Ega2VydWdpYW4gJFjiiaVDX0wkIG1ha2EgJFkgPSBYLUNfTCQgbWVydXBha2FuIGtsYWltIHlhbmcgZGl0YWhhbiBvbGVoIHJlYXN1cmFkdXIuIERlbmdhbiBrYXRhIGxhaW4sIGppa2EgdGVyamFkaSBrZXJ1Z2lhbiwgcmVhc3VyYWR1ciBtZW5jYXRhdCBqdW1sYWggc2ViZW5hcm55YSBqaWthIG1lbGViaWhpIGJhdGFzICRDX0wkIGRhbiBqaWthIHRpZGFrLCBoYW55YSBtZW5jYXRhdCBha2FuIG1lbmdhbGFtaSBrZXJ1Z2lhbiBzZWJlc2FyIDAuDQoNCiMjIDQuMy4xLjMgVHJ1bmNhdGVkIERhdGENCg0KUGVuZ2FtYXRhbiB5YW5nIGRpc2Vuc29yIGRpY2F0YXQgdW50dWsgc3R1ZGksIG1lc2tpcHVuIGRhbGFtIGJlbnR1ayB5YW5nIHRlcmJhdGFzLiBTZWJhbGlrbnlhLCBoYXNpbCB5YW5nIHRlcnBvdG9uZyBhZGFsYWggamVuaXMgZGF0YSB5YW5nIGhpbGFuZy4gU2VidWFoIGhhc2lsIGJlcnBvdGVuc2kgdGVycG90b25nIGtldGlrYSBrZXRlcnNlZGlhYW4gcGVuZ2FtYXRhbiBiZXJnYW50dW5nIHBhZGEgaGFzaWwuDQoNCkRhbGFtIGFzdXJhbnNpLCBiaWFzYW55YSBwZW5nYW1hdGFuIHRlcnBvdG9uZyBraXJpIHBhZGEgJENfTCQga2V0aWthIGp1bWxhaG55YSBhZGFsYWgNCg0KJCQNClxiZWdpbnthbGlnbmVkfQ0KWSAmPQ0KXGxlZnRcew0KXGJlZ2lue2FycmF5fXtjbH0NClx0ZXh0e3dlIGRvIG5vdCBvYnNlcnZlIH1YICYgWCBcbGUgQ19MIFxcDQpYICYgWCA+IENfTA0KXGVuZHthcnJheX0NClxyaWdodC5cZW5ke2FsaWduZWR9DQokJA0KDQpEZW5nYW4ga2F0YSBsYWluLCBqaWthIFgga3VyYW5nIGRhcmkgYW1iYW5nIGJhdGFzICRDX0wkIG1ha2EgaWEgdGlkYWsgdGVyYW1hdGkuIA0KDQokQ19MJCBkYXBhdCBtZXJlcHJlc2VudGFzaWthbiBkZWR1Y3RpYmxlIGRhcmkgc2VidWFoIHBvbGlzIGFzdXJhbnNpLiBKaWthIGtlcnVnaWFuIHlhbmcgZGlhc3VyYW5zaWthbiBrdXJhbmcgZGFyaSBkZWR1Y3RpYmxlLCBtYWthIHBlcnVzYWhhYW4gYXN1cmFuc2kgbXVuZ2tpbiB0aWRhayBtZW5nYW1hdGkgYXRhdSBtZW5jYXRhdCBrZXJ1Z2lhbiBzYW1hIHNla2FsaS4gSmlrYSBrZXJ1Z2lhbiBtZWxlYmloaSBkZWR1Y3RpYmxlLCBtYWthIGtlbGViaWhhbiAkWC1DX0wkIGFkYWxhaCBrbGFpbSB5YW5nIGRpdGFuZ2d1bmcgb2xlaCBwZW5hbmdndW5nLiBEaW1hbmEgZGFwYXQgZGlkZWZpbmlzaWthbiBrZXJ1Z2lhbiBwZXIgcGVtYmF5YXJhbiBzZWJhZ2FpDQoNCiQkDQpcYmVnaW57YWxpZ25lZH0NCllee1B9ID0gXGxlZnRceyBcYmVnaW57bWF0cml4fQ0KXHRleHR7VW5kZWZpbmVkfSAmIFggXGxlIGQgXFwNClggLSBkICYgWCA+IGQgDQpcZW5ke21hdHJpeH0gXHJpZ2h0LiANClxlbmR7YWxpZ25lZH0NCiQkDQoNCnNlaGluZ2dhIGppa2Ega2VydWdpYW4gbWVsZWJpaGkgZGVkdWN0aWJsZSwga2FtaSBtZW5jYXRhdCBqdW1sYWgga2VsZWJpaGFuICRYLWQkLiBIYWwgaW5pIHNhbmdhdCBwZW50aW5nIGtldGlrYSBtZW1wZXJ0aW1iYW5na2FuIGp1bWxhaCB5YW5nIGFrYW4gZGliYXlhcmthbiBvbGVoIHBlcnVzYWhhYW4gYXN1cmFuc2kuIE5hbXVuLCB1bnR1ayB0dWp1YW4gZXN0aW1hc2kgcGFkYSBiYWdpYW4gaW5pLCB0aWRhayB0ZXJsYWx1IHBlbnRpbmcgamlrYSBraXRhIG1lbmd1cmFuZ2thbiBrb25zdGFudGEgeWFuZyBkaWtldGFodWkgc2VwZXJ0aSAkQ19MID0gZCQuIFNlaGluZ2dhLCB1bnR1ayB2YXJpYWJlbCB0ZXJwb3RvbmcgJFkkIGtpdGEgbWVuZ2d1bmFrYW4ga29udmVuc2kgeWFuZyBsZWJpaCBzZWRlcmhhbmEgZGFuIHRpZGFrIG1lbmd1cmFuZ2thbiAkZCQuDQoNCkRlbWlraWFuIHB1bGEgdW50dWsgZGF0YSB0ZXJwb3Rvbmcga2FuYW4sIGppa2EgWCBtZWxlYmloaSBhbWJhbmcgYmF0YXMgJENfVSQgbWFrYSBkYXRhIHRlcnNlYnV0IHRpZGFrIGRpb2JzZXJ2YXNpLiBEYWxhbSBoYWwgaW5pLCBqdW1sYWhueWEgYWRhbGFoDQoNCiQkDQpcYmVnaW57YWxpZ25lZH0NClkgJj0NClxsZWZ0XHsNClxiZWdpbnthcnJheX17Y2x9DQpYICYgWCBcbGUgQ19VIFxcDQpcdGV4dHt3ZSBkbyBub3Qgb2JzZXJ2ZSB9WCAmIFggPiBDX1UuDQpcZW5ke2FycmF5fQ0KXHJpZ2h0LlxlbmR7YWxpZ25lZH0NCiQkDQoNCkNvbnRvaCBrbGFzaWsgZGFyaSBwZW1vdG9uZ2FuIGRhcmkga2FuYW4gdGVybWFzdWsgWCBzZWJhZ2FpIHVrdXJhbiBqYXJhayBrZSBiaW50YW5nLiBLZXRpa2EgamFyYWtueWEgbWVsZWJpaGkgdGluZ2thdCB0ZXJ0ZW50dSAkQ19VJCBtYWthIGJpbnRhbmcgdGVyc2VidXQgdGlkYWsgbGFnaSBkYXBhdCBkaWFtYXRpLg0KDQpHYW1iYXIgZGliYXdhaCBpbmkgbWVtYmFuZGluZ2thbiBwZW5nYW1hdGFuIHlhbmcgdGVycG90b25nIGRhbiB0ZXJzZW5zb3IuIE5pbGFpLW5pbGFpIFggeWFuZyBsZWJpaCBiZXNhciBkYXJpIGJhdGFzIHBlbnllbnNvcmFuICJhdGFzIiAkQ19VJCB0aWRhayB0ZXJhbWF0aSBzYW1hIHNla2FsaSAodGVyc2Vuc29yIGthbmFuKSwgc2VkYW5na2FuIG5pbGFpIFggeWFuZyBsZWJpaCBrZWNpbCBkYXJpIGJhdGFzIHBlbW90b25nYW4gImJhd2FoIiAkQ19MJCB0ZXRhcCBkaWFtYXRpLCB0ZXRhcGkgZGlhbWF0aSBzZWJhZ2FpICRDX0wkIGRhcmlwYWRhIG5pbGFpIFggeWFuZyBzZWJlbmFybnlhICh0ZXJzZW5zb3Iga2lyaSkuDQoNCmBgYHtyIGltYWdlMiwgZWNobz1GQUxTRSwgZmlnLmNhcD0iIixmaWcuYWxpZ249J2NlbnRlcicsIG91dC53aWR0aCA9ICcxMDAlJ30NCmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKCI0MS5wbmciKQ0KYGBgDQoNClNlYmFnYWkgcmFuZ2t1bWFuLCB1bnR1ayBoYXNpbCBYIGRhbiBrb25zdGFudGEta29uc3RhbnRhICRDX0wkIGRhbiAkQ19VJA0KDQpgYGB7ciBpbWFnZTMsIGVjaG89RkFMU0UsIGZpZy5jYXA9IiIsZmlnLmFsaWduPSdjZW50ZXInLCBvdXQud2lkdGggPSAnMTAwJSd9DQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygiNDIucG5nIikNCmBgYA0KDQojIyA0LjMuMS40IFBhcmFtZXRyaWMgRXN0aW1hdGlvbiB1c2luZyBDZW5zb3JlZCBhbmQgVHJ1bmNhdGVkIERhdGENCg0KVW50dWsgbWVtcGVybXVkYWgsIGRhcGF0IGRpYXN1bXNpa2FuIGp1bWxhaCBwZW55ZW5zb3JhbiB0aWRhayBhY2FrIGRhbiBoYXNpbCB5YW5nIGtvbnRpbnUgWCAuIFNlYmFnYWkgcGVybXVsYWFuLCBwZXJ0aW1iYW5na2FuIGthc3VzIGRhdGEgdGVyc2Vuc29yIGthbmFuIGRpIG1hbmEgbWVyZWthbSAkWF9VXiogPSBtaW4oWCwgQ19VKSA9IFjiiKdDX1UkKSBkYW4gaW5kaWthdG9yIHBlbnllbnNvcmFuICTOtCA9IEkoWOKJpENfVSkkIC4gSmlrYSBwZW55ZW5zb3JhbiB0ZXJqYWRpIHNlaGluZ2dhICTOtD0wJCBtYWthICRYPkNfVSQgZGFuIHBlbHVhbmdueWEgYWRhbGFoICRQcihYPkNfVSk9MS1GKENfVSkkLiBKaWthIHBlbnllbnNvcmFuIHRpZGFrIHRlcmphZGkgc2VoaW5nZ2EgJM60ID0gMSQgbWFrYSAkWOKJpENfVSQgZGFuIGxpa2VsaWhvb2RueWEgYWRhbGFoICRmKHgpJCAuIFJpbmdrYXNueWEsIGRpZGFwYXRrYW4gbGlrZWxpaG9vZCBkYXJpIHNlYnVhaCBwZW5nYW1hdGFuIHR1bmdnYWwgc2ViYWdhaQ0KDQokJA0KXGJlZ2lue2FsaWduZWR9DQpcbGVmdFx7DQpcYmVnaW57YXJyYXl9e2xsfQ0KMS1GKENfVSkgJiBcdGV4dHtpZiB9XGRlbHRhPTAgXFwNCmYoeCkgJiBcdGV4dHtpZiB9IFxkZWx0YSA9IDEgDQpcZW5ke2FycmF5fQ0KXHJpZ2h0LiA9IFxsZWZ0XHsgZih4KVxyaWdodFx9XntcZGVsdGF9IFxsZWZ0XHsxLUYoQ19VKVxyaWdodFx9XnsxLVxkZWx0YX0gLg0KXGVuZHthbGlnbmVkfQ0KJCQNCkVrc3ByZXNpIHJ1YXMga2FuYW4gbWVtdW5na2lua2FuIGRhbGFtIG1lbnlhamlrYW4gcGVsdWFuZyBkZW5nYW4gbGViaWggcmluZ2thcy4gU2VrYXJhbmcsIHVudHVrIHNhbXBlbCBrZS1pIGRlbmdhbiB1a3VyYW4gbiAsIHBlbHVhbmdueWEgYWRhbGFoDQoNCiQkDQpcYmVnaW57YWxpZ25lZH0NCkwoXHRoZXRhKSA9IA0KXHByb2Rfe2k9MX1ebiBcbGVmdFx7IGYoeF9pKVxyaWdodFx9XntcZGVsdGFfaX0gXGxlZnRcezEtRihDX3tVaX0pXHJpZ2h0XH1eezEtXGRlbHRhX2l9ID0gXHByb2Rfe1xkZWx0YV9pPTF9IGYoeF9pKSBccHJvZF97XGRlbHRhX2k9MH0gXHsxLUYoQ197VWl9KVx9DQpcZW5ke2FsaWduZWR9DQokJA0KDQpkZW5nYW4gd2FrdHUgcGVueWVuc29yYW4gcG90ZW5zaWFsICR7KENfe1UxfSwuLi4sQ197VW59KX0kIC4gRGkgc2luaSwgbm90YXNpICIk4oiPX3vOtGl9ID0gMSQiIGJlcmFydGkgbWVuZ2FtYmlsIGhhc2lsIGthbGkgZGFyaSBwZW5nYW1hdGFuIHlhbmcgdGlkYWsgZGlzZW5zb3IsIGRhbiBkZW1pa2lhbiBwdWxhIHVudHVrICIk4oiPX3vOtGl9ID0gMCQgIiANCg0KDQpEaSBzaXNpIGxhaW4sIGRhdGEgdGVycG90b25nIGRpdGFuZ2FuaSBkYWxhbSBpbmZlcmVuc2kga2VtdW5na2luYW4gbWVsYWx1aSBwcm9iYWJpbGl0YXMgYmVyc3lhcmF0LiBTZWNhcmEga2h1c3VzLCBrb250cmlidXNpIGxpa2VsaWhvb2QgZGFwYXQgZGlzZXN1YWlrYW4gZGVuZ2FuIG1lbWJhZ2lueWEgZGVuZ2FuIHByb2JhYmlsaXRhcyBiYWh3YSB2YXJpYWJlbCB0ZXJzZWJ1dCBkaWFtYXRpLiBTZWJhZ2FpIHJhbmdrdW1hbiwga2FtaSBtZW1pbGlraSBrb250cmlidXNpIGJlcmlrdXQgcGFkYSBmdW5nc2kgbGlrZWxpaG9vZCB1bnR1ayBlbmFtIGplbmlzIGhhc2lsOg0KDQpgYGB7ciBpbWFnZTQsIGVjaG89RkFMU0UsIGZpZy5jYXA9IiIsZmlnLmFsaWduPSdjZW50ZXInLCBvdXQud2lkdGggPSAnMTAwJSd9DQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygiNDMucG5nIikNCmBgYA0KDQpVbnR1ayBoYXNpbCB5YW5nIGRpa2V0YWh1aSBkYW4gZGF0YSB5YW5nIGRpc2Vuc29yLCBrZW11bmdraW5hbm55YSBhZGFsYWgNCg0KJCQNClxiZWdpbnthbGlnbmVkfQ0KTChcdGhldGEpID0gXHByb2Rfe0V9IGYoeF9pKSBccHJvZF97Un0gXHsxLUYoQ197VWl9KVx9IFxwcm9kX3tMfQ0KRihDX3tMaX0pIFxwcm9kX3tJfSAoRihDX3tVaX0pLUYoQ197TGl9KSksDQpcZW5ke2FsaWduZWR9DQokJA0KDQpkaSBtYW5hICQi4oiPX0UiJCBhZGFsYWggaGFzaWwga2FsaSBwZW5nYW1hdGFuIGRlbmdhbiBuaWxhaSBFeGFjdCwgZGFuIGRlbWlraWFuIHB1bGEgdW50dWsgUmlnaHQtLExlZnQtDQphbmQgIEludGVydmFsLWNlbnNvcmluZy4NCg0KVW50dWsgZGF0YSB5YW5nIGRpc2Vuc29yIGthbmFuIGRhbiB0ZXJwb3Rvbmcga2lyaSwga2VtdW5na2luYW5ueWEgYWRhbGFoDQoNCiQkDQpcYmVnaW57YWxpZ25lZH0NCkwoXHRoZXRhKSA9IFxwcm9kX3tFfSBcZnJhY3tmKHhfaSl9ezEtRihDX3tMaX0pfSBccHJvZF97Un0gXGZyYWN7MS1GKENfe1VpfSl9ezEtRihDX3tMaX0pfSwNClxlbmR7YWxpZ25lZH0NCiQkDQpkYW4ganVnYSB1bnR1ayBrb21iaW5hc2kgbGFpbm55YS4gDQoNCiMjIyBFeGFtcGxlIDQuMy4yLiBBY3R1YXJpYWwgRXhhbSBRdWVzdGlvbg0KDQpEaWJlcmlrYW4gZGF0YSA6DQoNCmkuIFNlYnVhaCBjb250b2gga2VydWdpYW4gYWRhbGFoOiA2MDAgNzAwIDkwMA0KaWkuIFRpZGFrIGFkYSBpbmZvcm1hc2kgeWFuZyB0ZXJzZWRpYSBtZW5nZW5haSBrZXJ1Z2lhbiBzZWJlc2FyIDUwMCBhdGF1IGt1cmFuZy4NCmlpaS4gS2VydWdpYW4gZGlhc3Vtc2lrYW4gbWVuZ2lrdXRpIGRpc3RyaWJ1c2kgZWtzcG9uZW5zaWFsIGRlbmdhbiByYXRhLXJhdGEgJM64JC4NCg0KDQpIaXR1bmcgZXN0aW1hc2kga2VtdW5na2luYW4gbWFrc2ltdW0gZGFyaSAkzrgkDQoNCioqSkFXQUIqKg0KDQpQZW5nYW1hdGFuIGluaSB0ZXJwb3RvbmcgcGFkYSBhbmdrYSA1MDAuIEtvbnRyaWJ1c2kgZGFyaSBzZXRpYXAgcGVuZ2FtYXRhbiB0ZXJoYWRhcCBmdW5nc2kgbGlrZWxpaG9vZCBhZGFsYWgNCg0KJFxmcmFje2YoeCl9ezEtRig1MDApfSA9IFxmcmFje1x0aGV0YV57LTF9ZV57LXgvXHRoZXRhfX17ZV57LTUwMC9cdGhldGF9fSQNCg0KTGFsdSBGdW5nc2kgTGlrZWxpaG9vZG55YSBhZGFsYWgNCg0KJEwoXHRoZXRhKT0gXGZyYWN7XHRoZXRhXnstMX0gZV57LTYwMC9cdGhldGF9IFx0aGV0YV57LTF9IGVeey03MDAvXHRoZXRhfSBcdGhldGFeey0xfSBlXnstOTAwL1x0aGV0YX19eyhlXnstNTAwL1x0aGV0YX0pXjN9ID0gXHRoZXRhXnstM31lXnstNzAwL1x0aGV0YX0kDQoNCkxvZy1MaWtlaG9vZG55YSBhZGFsYWgNCg0KJGwoXHRoZXRhKSA9IFxsb2cgTChcdGhldGEpID0gLTMgXGxvZyBcdGhldGEgLSA3MDAgXHRoZXRhXnstMX0kDQoNCk1lbWFrc2ltYWxrYW4gZWtzcHJlc2kgaW5pIGRlbmdhbiBtZW5ldGFwa2FuIHR1cnVuYW4gdGVyaGFkYXAgzrggc2FtYSBkZW5nYW4gMCwgTWFrYSBtZW1pbGlraQ0KDQokTCcoXHRoZXRhKSA9IC0zIFx0aGV0YV57LTF9ICsgNzAwIFx0aGV0YV57LTJ9ID0gMCBcIFxSaWdodGFycm93IFwgXGhhdHtcdGhldGF9ID0gXGZyYWN7NzAwfXszfSA9IDIzMy4zMyAuJA0KDQojIDQuMy4yIE5vbnBhcmFtZXRyaWMgRXN0aW1hdGlvbiB1c2luZyBNb2RpZmllZCBEYXRhDQoNCkVzdGltYXRvciBub25wYXJhbWV0cmlrIG1lbWJlcmlrYW4gdG9sb2sgdWt1ciB5YW5nIGJlcmd1bmEsIHNlaGluZ2dhIGFrYW4gc2FuZ2F0IG1lbWJhbnR1IHVudHVrIG1lbWFoYW1pIHByb3NlZHVyIGVzdGltYXNpIHVudHVrIGRhdGEgeWFuZyBkaWtlbG9tcG9ra2FuLCBkaXNlbnNvciwgZGFuIGRpcG90b25nDQoNCiMjIDQuMy4yLjEgR3JvdXBlZCBEYXRhDQoNClBlbmdhbWF0YW4gZGFwYXQgZGlrZWxvbXBva2thbiAoanVnYSBkaXNlYnV0IHNlYmFnYWkgaW50ZXJ2YWwgdGVyc2Vuc29yKSBkYWxhbSBhcnRpIGJhaHdhIHBlbmdhbWF0YW4gc2ViYWdhaSBiYWdpYW4gZGFyaSBzYWxhaCBzYXR1IGRhcmkgayBpbnRlcnZhbCBkYWxhbSBiZW50dWsgJChjX3tqLTF9LGNfaikkICwgdW50dWsgJGogPSAxLC4uLixrJCAuIFBhZGEgYmF0YXMtYmF0YXNueWEsIGZ1bmdzaSBkaXN0cmlidXNpIGVtcGlyaXMgZGlkZWZpbmlzaWthbiBkZW5nYW4gY2FyYSB5YW5nIGJpYXNhOg0KDQokJA0KXGJlZ2lue2FsaWduZWR9DQpGX24oY19qKSA9IFxmcmFje1x0ZXh0e251bWJlciBvZiBvYnNlcnZhdGlvbnMgfSBcbGUgY19qfXtufQ0KXGVuZHthbGlnbmVkfQ0KJCQNCg0KKipPZ2l2ZSBFc3RpbWF0b3IqKg0KDQpVbnR1ayBuaWxhaSBsYWluIGRhcmkgJHjiiIgoY197ai0xfSxjX2opJCBkYXBhdCBtZW5nZXN0aW1hc2kgZnVuZ3NpIGRpc3RyaWJ1c2kgZGVuZ2FuIG9naXZlIGVzdGltYXRvciB5YW5nIG1lbmdpbnRlcnBvbGFzaSBzZWNhcmEgbGluZWFyIGFudGFyYSAkRl9uKGNfe2otMX0pJCBkYW4gJEZuXyhjX2opJCB5YWl0dSBuaWxhaSBkYXJpIGJhdGFzLWJhdGFzICRGX24oY197ai0xfSkkIGRhbiAkRm5fKGNfaikkIGRpaHVidW5na2FuIGRlbmdhbiBzZWJ1YWggZ2FyaXMgbHVydXMuIEhhbCBpbmkgc2VjYXJhIGZvcm1hbCBkYXBhdCBkaW55YXRha2FuIHNlYmFnYWkNCg0KJCQNClxiZWdpbnthbGlnbmVkfQ0KRl9uKHgpID0gXGZyYWN7Y19qLXh9e2Nfai1jX3tqLTF9fSBGX24oY197ai0xfSkgKyBcZnJhY3t4LWNfe2otMX19e2Nfai1jX3tqLTF9fSBGX24oY19qKSBcIFwgXCBcdGV4dHtmb3IgfSBjX3tqLTF9IFxsZSB4IDwgY19qDQpcZW5ke2FsaWduZWR9DQokJA0KDQpTZWhpbmdhIERlbnNpdGFzIHlhbmcgc2VzdWFpIGFkYWxhaCANCg0KJCQNClxiZWdpbnthbGlnbmVkfQ0KZl9uKHgpID0gRl57XHByaW1lfV9uKHgpID0gXGZyYWN7Rl9uKGNfaiktRl9uKGNfe2otMX0pfXtjX2ogLSBjX3tqLTF9fSBcIFwgXCAgXHRleHR7Zm9yIH0gY197ai0xfSA8IHggPCBjX2ogLg0KXGVuZHthbGlnbmVkfQ0KJCQNCg0KIyMjIEV4YW1wbGUgNC4zLjQuIEFjdHVhcmlhbCBFeGFtIFF1ZXN0aW9uDQoNCkRpYmVyaWthbiBpbmZvcm1hc2kgYmVyaWt1dCBpbmkgbWVuZ2VuYWkganVtbGFoIGtsYWltIHVudHVrIDEwMCBrbGFpbToNCg0KYGBge3IgaW1hZ2U1LCBlY2hvPUZBTFNFLCBmaWcuY2FwPSIiLGZpZy5hbGlnbj0nY2VudGVyJywgb3V0LndpZHRoID0gJzEwMCUnfQ0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoIjQ1LnBuZyIpDQpgYGANCg0KDQojIyA0LjMuMi4yIFJpZ2h0LUNlbnNvcmVkIEVtcGlyaWNhbCBEaXN0cmlidXRpb24gRnVuY3Rpb24NCg0KQWthbiBzYW5nYXQgYmVyZ3VuYSB1bnR1ayBtZW5na2FsaWJyYXNpIHBlbmFrc2lyIHBhcmFtZXRyaWsgZGVuZ2FuIG1ldG9kZSBub25wYXJhbWV0cmlrIHlhbmcgdGlkYWsgYmVyZ2FudHVuZyBwYWRhIGJlbnR1ayBwYXJhbWV0cmlrIGRpc3RyaWJ1c2kuIFBlbmFrc2lyIGJhdGFzIHByb2R1ayBtZW51cnV0IChLYXBsYW4gZGFuIE1laWVyIDE5NTgpIG1lcnVwYWthbiBwZW5ha3NpciB5YW5nIHRlcmtlbmFsIHVudHVrIGZ1bmdzaSBkaXN0cmlidXNpIGRlbmdhbiBhZGFueWEgcGVueWVuc29yYW4uIA0KDQoqKk1vdGl2YXNpIHVudHVrIFBlbmFrc2lyIEJhdGFzIFByb2R1ayBLYXBsYW4tTWVpZXIqKg0KDQpVbnR1ayBtZW5qZWxhc2thbiBtZW5nYXBhIHByb2R1Y3QtbGltaXQgYmVrZXJqYSBkZW5nYW4gc2FuZ2F0IGJhaWsgZGVuZ2FuIG9ic2VydmFzaSB0ZXJzZW5zb3IsIHBlcnRhbWEtdGFtYSBkYXBhdCBtZWxpaGF0IGtlIGthc3VzIHRhbnBhIHBlbnllbnNvcmFuLiBEaSBzaW5pLCBmdW5nc2kgZGlzdHJpYnVzaSBlbXBpcmlzICRGX24oeCkkIGFkYWxhaCBwZW5ha3NpciB0YWsgYmlhcyBkYXJpIGZ1bmdzaSBkaXN0cmlidXNpICRGKHgpJCAuIEhhbCBpbmkga2FyZW5hICRGX24oeCkkIGFkYWxhaCByYXRhLXJhdGEgZGFyaSB2YXJpYWJlbCBpbmRpa2F0b3IgeWFuZyBtYXNpbmctbWFzaW5nIHRpZGFrIGJpYXMsIHlhaXR1LCAkRSBbSShYX2niiaR4KV09UHIoWF9p4omkeCk9Rih4KSQNCg0KU2VrYXJhbmcgbWlzYWxrYW4gaGFzaWwgYWNhayBkaXNlbnNvciBkaSBzZWJlbGFoIGthbmFuIGRlbmdhbiBqdW1sYWggeWFuZyBtZW1iYXRhc2ksIGthdGFrYW5sYWgsIENVIHNlaGluZ2dhIGRhcGF0IG1lbmNhdGF0IHlhbmcgbGViaWgga2VjaWwgZGFyaSBrZWR1YW55YSwgJFheKiA9IG1pbihYLCBDX1UpJCAuIFVudHVrIG5pbGFpLW5pbGFpICR4JCB5YW5nIGxlYmloIGtlY2lsIGRhcmkgJENfVSQsIHZhcmlhYmVsIGluZGlrYXRvciBtYXNpaCBtZW1iZXJpa2FuIHBlbmFrc2lyIHlhbmcgdGlkYWsgYmlhcyB0ZXJoYWRhcCBmdW5nc2kgZGlzdHJpYnVzaSBzZWJlbHVtIGtpdGEgbWVuY2FwYWkgYmF0YXMgcGVueWVuc29yYW4uIEFydGlueWEsICRFIFtJKFhe4oiX4omkeCldPUYoeCkkIGthcmVuYSAkSShYXuKIl+KJpHgpPUkoWOKJpHgpJCB1bnR1ayAkeDxDX1UkIC4gRGVuZ2FuIGNhcmEgeWFuZyBzYW1hLCAkRVtJKFhe4oiXPngpXT0xLUYoeCk9Uyh4KSQgLiBUZXRhcGksIHVudHVrICR4PkNfVSQgLCAkSShYXuKIl+KJpHgpJCBzZWNhcmEgdW11bSBidWthbiBtZXJ1cGFrYW4gcGVuYWtzaXIgdGFrIGJpYXMgZGFyaSBGKHgpLiBTZWJhZ2FpIGFsdGVybmF0aWYsIHBlcnRpbWJhbmdrYW4gZHVhIHBldWJhaCBhY2FrIHlhbmcgbWVtaWxpa2kgYmF0YXMgcGVueWVuc29yYW4geWFuZyBiZXJiZWRhLiBTZWJhZ2FpIGlsdXN0cmFzaSwgbWlzYWxrYW4ga2l0YSBtZW5nYW1hdGkgJFhe4oiXMT1taW4oWF8xLDUpJCBkYW4gJFhe4oiXMiA9IG1pbihYXzIsMTApJCBkaSBtYW5hICRYXzEkIGRhbiAkWF8yJCBhZGFsYWggdW5kaWFuIGluZGVwZW5kZW4gZGFyaSBkaXN0cmlidXNpIHlhbmcgc2FtYS4gVW50dWsgJHjiiaQ1JCBmdW5nc2kgZGlzdHJpYnVzaSBlbXBpcmlzICRGXzIoeCkkIGFkYWxhaCBwZW5ha3NpciB0YWsgYmlhcyBkYXJpICRGKHgpJC4gQWthbiB0ZXRhcGksIHVudHVrICQ1PHjiiaQxMCQgcGVuZ2FtYXRhbiBwZXJ0YW1hIHRpZGFrIGRhcGF0IGRpZ3VuYWthbiB1bnR1ayBmdW5nc2kgZGlzdHJpYnVzaSBrYXJlbmEgYWRhbnlhIGJhdGFzYW4gcGVueWVuc29yYW4uIFNlYmFnYWkgZ2FudGlueWEsIHN0cmF0ZWdpIHlhbmcgZGlrZW1iYW5na2FuIG9sZWggKEthcGxhbiBkYW4gTWVpZXIgMTk1OCkgYWRhbGFoIGRlbmdhbiBtZW5nZ3VuYWthbiAkU18yKDUpJCBzZWJhZ2FpIHBlbmFrc2lyIGRhcmkgJFMoNSkkIGRhbiBrZW11ZGlhbiBtZW5nZ3VuYWthbiBvYnNlcnZhc2kga2VkdWEgdW50dWsgbWVuZ2VzdGltYXNpIGZ1bmdzaSBzdXJ2aXZhbCBiZXJzeWFyYXQgcGFkYSBrZWxhbmdzdW5nYW4gaGlkdXAgaGluZ2dhIHdha3R1IGtlLTUsICRQcihYPnh8WD41KT1cZnJhY3tTKHgpfXtTKDUpfSQgLiBTZWNhcmEga2h1c3VzLCB1bnR1ayAkNTx44omkMTAkIHBlbmFrc2lyIGRhcmkgZnVuZ3NpIHN1cnZpdmFsIGFkYWxhaA0KDQokJA0KXGJlZ2lue2FsaWduZWR9DQpcaGF0e1N9KHgpID0gU18yKDUpIFx0aW1lcyBJKFhfMl4qID4geCApDQpcZW5ke2FsaWduZWR9DQokJA0KDQoqS2FwbGFuLU1laWVyIFByb2R1Y3QgTGltaXQgRXN0aW1hdG9yKg0KDQpEZW5nZW4gbWVtcGVybHVhcyBpZGUgZGFsYW0gc2V0aWFwIG9ic2VydmFzaSBgaWAsZGVuZ2FuIGB1aWAgbWVuamFkaSBiYXRhcyBhdGFzIHBlbnllbnNvcmFuICQoPeKInikgamlrYXRpZGFrYWRhcGVueWVuc29yYW4kLiBEZW5nYW4gZGVtaWtpYW4sIG5pbGFpIHlhbmcgdGVyY2F0YXQgYWRhbGFoIGB4aWAgZGFsYW0ga2FzdXMgdGlkYWsgYWRhIHBlbnllbnNvcmFuIGRhbiBgdWlgIGppa2EgYWRhIHBlbnllbnNvcmFuLiBEZW5nYW4gJHRfMTzii688dF9rJG1lbmphZGkgayB0aXRpayBiZXJiZWRhIGRpIG1hbmEga2VydWdpYW4geWFuZyB0aWRhayBkaXNlbnNvciB0ZXJqYWRpLCBkYW4gYmlhcmthbiAkc19qJCBhZGFsYWgganVtbGFoIGtlcnVnaWFuIHlhbmcgdGlkYWsgdGVyc2Vuc29yICR4X2kkIHlhbmcgdGlkYWsgdGVyc2Vuc29yIHBhZGEgJHRfaiQuIEhpbXB1bmFuIHJpc2lrbyB5YW5nIHNlc3VhaSBhZGFsYWgganVtbGFoIG9ic2VydmFzaSB5YW5nIGFrdGlmICh0aWRhayB0ZXJzZW5zb3IpIHBhZGEgbmlsYWkgeWFuZyBrdXJhbmcgZGFyaSAkdF9qJCB5YW5nIGRpbm90YXNpa2FuIHNlYmFnYWkgDQokUl9qID0gXHN1bV97aT0xfV5uIEkoeF9pIFxnZXEgdF97an0pICsgXHN1bV97aT0xfV5uIEkodV9pIFxnZXEgdF97an0pJA0KDQoNCg0KRGVuZ2FuIG5vdGFzaSBpbmksIHBlbmFrc2lyIHByb2R1Y3QtbGltaXQgZGFyaSBmdW5nc2kgZGlzdHJpYnVzaQ0KDQokJA0KXGJlZ2lue2VxdWF0aW9ufQ0KXGhhdHtGfSh4KSA9DQpcbGVmdFx7DQpcYmVnaW57YXJyYXl9e2xsfQ0KMCAmIHg8dF97MX0gXFwNCjEtXHByb2Rfe2o6dF97an0gXGxlcSB4fVxsZWZ0KCAxLVxmcmFje3Nfan17Ul97an19XHJpZ2h0KSAmIHggXGdlcSB0X3sxfSANClxlbmR7YXJyYXl9DQpccmlnaHQuIC4NClx0YWd7NC42fQ0KXGVuZHtlcXVhdGlvbn0NCiQkDQoNCg0KU2ViYWdhaSBjb250b2hueWEsIGppa2EgYHhgIGxlYmloIGtlY2lsIGRhcmkga2VydWdpYW4gdGVya2VjaWwgeWFuZyB0aWRhayB0ZXJzZW5zb3IsIG1ha2EgJHg8dDEkIGRhbiAkRl4oeCk9MCQgLiBTZWJhZ2FpIGNvbnRvaCBsYWluLCBqaWthICR4JCBiZXJhZGEgZGkgYW50YXJhIGtlcnVnaWFuIHRlcnNlbnNvciB0ZXJrZWNpbCBrZWR1YSBkYW4ga2V0aWdhLCBtYWthICR44oiIKHRfMix0XzNdJCBkYW4gJFxoYXR7Rn0oeCkgPSAxIC0gXGxlZnQoMS0gXGZyYWN7c18xfXtSX3sxfX1ccmlnaHQpXGxlZnQoMS0gXGZyYWN7c18yfXtSX3syfX1ccmlnaHQpJCAuVGFrc2lyYW4geWFuZyBzZXN1YWkgZGFyaSBmdW5nc2kgc3Vydml2YWwgYWRhbGFoICRcaGF0e1N9KHgpID0gMSAtIFxoYXR7Rn0oeCkkDQoNCiMjIyBFeGFtcGxlIDQuMy41LiBBY3R1YXJpYWwgRXhhbSBRdWVzdGlvbi4gDQoNCkJlcmlrdXQgaW5pIGFkYWxhaCBjb250b2ggZGFyaSAxMCBwZW1iYXlhcmFuOg0KDQpgYGB7ciBpbWFnZTYsIGVjaG89RkFMU0UsIGZpZy5jYXA9IiIsZmlnLmFsaWduPSdjZW50ZXInLCBvdXQud2lkdGggPSAnMTAwJSd9DQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygiNDYucG5nIikNCmBgYA0KIA0KZGltYW5hICsgbWVudW5qdWtrYW4gYmFod2Ega2VydWdpYW4gdGVsYWggbWVsZWJpaGkgYmF0YXMgcG9saXMuDQoNCkRlbmdhbiBtZW5nZ3VuYWthbiBlc3RpbWF0b3IgYmF0YXMgcHJvZHVrIEthcGxhbi1NZWllciwgaGl0dW5nbGFoIHByb2JhYmlsaXRhcyBiYWh3YSBrZXJ1Z2lhbiBwYWRhIHN1YXR1IHBvbGlzIG1lbGViaWhpIDExLCAkXGhhdHtTfSgxMSkkDQoNClRlcmRhcGF0IGVtcGF0IHdha3R1IGtlamFkaWFuIChwZW5nYW1hdGFuIHlhbmcgdGlkYWsgZGlzZW5zb3IpLiBVbnR1ayBzZXRpYXAgd2FrdHUgdGoga2l0YSBkYXBhdCBtZW5naGl0dW5nIGp1bWxhaCBrZWphZGlhbiBzaiBkYW4gaGltcHVuYW4gcmlzaWtvICRSX2okIHNlYmFnYWkgYmVyaWt1dDoNCiAgDQpgYGB7ciBpbWFnZTcsIGVjaG89RkFMU0UsIGZpZy5jYXA9IiIsZmlnLmFsaWduPSdjZW50ZXInLCBvdXQud2lkdGggPSAnMTAwJSd9DQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygiNDcucG5nIikNCmBgYA0KDQpEZW5nYW4gZGVtaWtpYW4sIGVzdGltYXNpIEthcGxhbi1NZWllciBkYXJpIFMoMTEpIGFkYWxhaA0KDQoNCiQkDQpcYmVnaW57YWxpZ25lZH0NClxoYXR7U30oMTEpICY9IFxwcm9kX3tqOnRfalxsZXEgMTF9IFxsZWZ0KCAxLSBcZnJhY3tzX2p9e1Jfan0gXHJpZ2h0KSA9ICBccHJvZF97aj0xfV57Mn0gXGxlZnQoIDEtIFxmcmFje3Nfan17Ul9qfSBccmlnaHQpXFwNCiY9IFxsZWZ0KDEtXGZyYWN7Mn17MTB9IFxyaWdodCkgXGxlZnQoMS1cZnJhY3sxfXs1fSBccmlnaHQpID0gKDAuOCkoMC44KT0gMC42NC4gXFwNClxlbmR7YWxpZ25lZH0NCiQkDQoNCg0KKlJpZ2h0LUNlbnNvcmVkLCBMZWZ0LVRydW5jYXRlZCBFbXBpcmljYWwgRGlzdHJpYnV0aW9uIEZ1bmN0aW9uKg0KDQpTZWxhaW4gcGVueWVuc29yYW4ga2FuYW4sIHNlbGFuanV0bnlhIGFkYWxhaCBtZW1wZXJsdWFzIGtlcmFuZ2thIGtlcmphIHVudHVrIG1lbXVuZ2tpbmthbiBkYXRhIHRlcnBvdG9uZyBrZSBraXJpLiBTZXBlcnRpIHNlYmVsdW1ueWEsIHVudHVrIHNldGlhcCBvYnNlcnZhc2kgIGBpYCAsIGRlbmdhbiAkdV9pJCBtZW5qYWRpIGJhdGFzIHBlbnllbnNvcmFuIGF0YXMgKCAkPeKIniQgamlrYSB0aWRhayBhZGEgcGVueWVuc29yYW4pLiBTZWxhbmp1dG55YSwgJGRfaSQgbWVydXBha2FuIGJhdGFzIHBlbW90b25nYW4gYmF3YWggKDAgamlrYSB0aWRhayBhZGEgcGVtb3RvbmdhbikuIERlbmdhbiBkZW1pa2lhbiwgbmlsYWkgeWFuZyB0ZXJjYXRhdCAoamlrYSBsZWJpaCBiZXNhciBkYXJpICRkX2kkICkgYWRhbGFoICR4X2kkIGRhbGFtIGthc3VzIHRpZGFrIGFkYSBwZW55ZW5zb3JhbiBkYW4gJHVfaSQgamlrYSBhZGEgcGVueWVuc29yYW4uIExhbHUgdW50dWsgJHRfMTzii688dF9rICRtZW5qYWRpICRrJCB0aXRpay10aXRpayB5YW5nIGJlcmJlZGEgZGkgbWFuYSBzZWJ1YWgga2VqYWRpYW4geWFuZyBtZW5hcmlrIHRlcmphZGksIGRhbiBiaWFya2FuICRzX2okIGFkYWxhaCBqdW1sYWgga2VqYWRpYW4geWFuZyB0ZXJla2FtICR4X2kkICBwYWRhIHRpdGlrIHdha3R1ICR0X2okLg0KDQpIaW1wdW5hbiByaXNpa28geWFuZyBzZXN1YWkgYWRhbGFoDQoNCiRSX2ogPSBcc3VtX3tpPTF9Xm4gSSh4X2kgXGdlcSB0X3tqfSkgKyBcc3VtX3tpPTF9Xm4gSSh1X2kgXGdlcSB0X3tqfSkgLSBcc3VtX3tpPTF9Xm4gSShkX2kgXGdlcSB0X3tqfSkuJA0KDQpEZW5nYW4gZGVmaW5pc2kgYmFydSBkYXJpIGhpbXB1bmFuIHJpc2lrbyBpbmksIHBlbmFrc2lyIGJhdGFzIGhhc2lsIGthbGkgZGFyaSBmdW5nc2kgZGlzdHJpYnVzaSBhZGFsYWggc2VwZXJ0aSBwYWRhIHBlcnNhbWFhbiBwcm9kdWN0IGxpbWl0IGVzdGltYXRvci4NCg0KKlJ1bXVzIEdyZWVud29vZCogKEdyZWVud29vZCAxOTI2KSBtZW51cnVua2FuIHJ1bXVzIHVudHVrIGVzdGltYXNpIHZhcmlhbnMgZGFyaSBwZW5ha3NpciBiYXRhcy1wcm9kdWsgbWVuamFkaQ0KDQokXHdpZGVoYXR7VmFyfShcaGF0e0Z9KHgpKSA9ICgxLVxoYXR7Rn0oeCkpXnsyfSBcc3VtIF97ajp0X3tqfSBcbGVxIHh9IFxkZnJhY3tzX2p9e1Jfe2p9KFJfe2p9LXNfail9LiQNCg0KU2VwZXJ0aSBiaWFzYSwgZGFwYXQgbWVuZ2FjdSBwYWRhIGFrYXIga3VhZHJhdCBkYXJpIGVzdGltYXNpIHZhcmlhbnMgc2ViYWdhaSBrZXNhbGFoYW4gc3RhbmRhciwgc2VidWFoIGt1YW50aXRhcyB5YW5nIHNlY2FyYSBydXRpbiBkaWd1bmFrYW4gZGFsYW0gaW50ZXJ2YWwga2VwZXJjYXlhYW4gZGFuIHVudHVrIHBlbmd1amlhbiBoaXBvdGVzaXMuIFVudHVrIG1lbmdoaXR1bmdueWEsIG1ldG9kZSBgc3VydmZpdCBSYCBtZW5nYW1iaWwgc2VidWFoIG9iamVrIGRhdGEgc3Vydml2YWwgZGFuIG1lbWJ1YXQgc2VidWFoIG9iamVrIGJhcnUgeWFuZyBiZXJpc2kgZXN0aW1hc2kgS2FwbGFuLU1laWVyIGRhcmkgZnVuZ3NpIHN1cnZpdmFsIGJlcnNhbWEgZGVuZ2FuIGludGVydmFsIGtlcGVyY2F5YWFuLiBNZXRvZGUgS2FwbGFuLU1laWVyIGAodHlwZT0na2FwbGFuLW1laWVyJylgIGRpZ3VuYWthbiBzZWNhcmEgZGVmYXVsdCB1bnR1ayBtZW1idWF0IGVzdGltYXNpIGt1cnZhIHN1cnZpdmFsLiBGdW5nc2kgc3Vydml2YWwgZGlza3JpdCB5YW5nIGRpaGFzaWxrYW4gbWVtaWxpa2kgbWFzc2EgdGl0aWsgcGFkYSB3YWt0dSBrZWphZGlhbiB5YW5nIGRpYW1hdGkgKHRhbmdnYWwgcGVsZXBhc2FuKSAkdF9qJCBkaW1hbmEgcHJvYmFiaWxpdGFzIHN1YXR1IGtlamFkaWFuIHlhbmcgZGliZXJpIGtldGFoYW5hbiBoaWR1cCBwYWRhIGR1cmFzaSB0ZXJzZWJ1dCBkaWVzdGltYXNpIHNlYmFnYWkganVtbGFoIGtlamFkaWFuIHlhbmcgZGlhbWF0aSBwYWRhIGR1cmFzaSBzaiBkaWJhZ2kgZGVuZ2FuIGp1bWxhaCBzdWJqZWsgeWFuZyB0ZXJwYXBhciBhdGF1ICdiZXJpc2lrbycgc2VzYWF0IHNlYmVsdW0gZHVyYXNpIGtlamFkaWFuICRSX2okLg0KDQoqUGVuYWtzaXIgQWx0ZXJuYXRpZioNCg0KRHVhIGplbmlzIGVzdGltYXNpIGFsdGVybmF0aWYganVnYSB0ZXJzZWRpYSB1bnR1ayBtZXRvZGUgIGBzdXJ2Zml0YC4gQWx0ZXJuYXRpZiBwZXJ0YW1hIChgdHlwZT0nZmgyJ2ApIG1lbmFuZ2FuaSBodWJ1bmdhbiwgcGFkYSBkYXNhcm55YSwgZGVuZ2FuIG1lbmdhc3Vtc2lrYW4gYmFod2EgYmViZXJhcGEga2VqYWRpYW4gcGFkYSBkdXJhc2kgeWFuZyBzYW1hIHRlcmphZGkgZGFsYW0gdXJ1dGFuIHlhbmcgYmVydWJhaC11YmFoLiBBbHRlcm5hdGlmIGxhaW4gKGB0eXBlPSdmbGVtaW5nLWhhcnJpbmd0b24nYCkgbWVuZ2d1bmFrYW4gZXN0aW1hc2kgKk5lbHNvbi1BYWxlbiAgKEFhbGVuIDE5NzgpKiBkYXJpICpmdW5nc2kgaGF6YXJkIGt1bXVsYXRpZiogdW50dWsgbWVuZGFwYXRrYW4gZXN0aW1hc2kgZnVuZ3NpIHN1cnZpdmFsLiBFc3RpbWFzaSBiYWhheWEga3VtdWxhdGlmICRIXih4KSQgZGltdWxhaSBkYXJpIG5vbCBkYW4gYmVydGFtYmFoIHBhZGEgc2V0aWFwIGR1cmFzaSBrZWphZGlhbiB5YW5nIGRpYW1hdGkgJHRfaiQgZGVuZ2FuIGp1bWxhaCBrZWphZGlhbiAkc19qJCBkaWJhZ2kgZGVuZ2FuIGp1bWxhaCB5YW5nIGJlcmlzaWtvICRSX2okLiBEZW5nYW4gbm90YXNpIHlhbmcgc2FtYSBzZXBlcnRpIGRpIGF0YXMsIHBlbmFrc2lyIE5lbHNvbi3DhGFsZW4gZGFyaSBmdW5nc2kgZGlzdHJpYnVzaSBhZGFsYWgNCg0KJCQNClxiZWdpbnthbGlnbmVkfQ0KXGhhdHtGfV97TkF9KHgpICY9DQpcbGVmdFx7DQpcYmVnaW57YXJyYXl9e2xsfQ0KMCAmIHg8dF97MX0gXFwNCjEtIFxleHAgXGxlZnQoLVxzdW1fe2o6dF97an0gXGxlcSB4fVxmcmFje3Nfan17Ul9qfSBccmlnaHQpICYgeCBcZ2VxIHRfezF9IA0KXGVuZHthcnJheX0NClxyaWdodC4gLlxlbmR7YWxpZ25lZH0NCiQkDQoNCkl0dSBtZXJ1cGFrYW4gaGFzaWwgZGFyaSBlc3RpbWF0b3IgTmVsc29uLcOEYWxlbiBkYXJpIGZ1bmdzaSBoYXphcmQga3VtdWxhdGlmDQoNCiRcaGF0e0h9KHgpPVxzdW1fe2o6dF9qXGxlcSB4fSAgXGZyYWN7c19qfXtSX2p9JA0KDQpkYW4gaHVidW5nYW4gYW50YXJhIGZ1bmdzaSBzdXJ2aXZhbCBkYW4gZnVuZ3NpIGhhemFyZCBrdW11bGF0aWYsDQoNCiRcaGF0e1N9X3tOQX0oeCk9ZV57LVxoYXR7SH0oeCl9JA0KDQojIFJlZmVyZW5zaSANCi0gaHR0cHM6Ly9vcGVuYWN0dGV4dHMuZ2l0aHViLmlvL0xvc3MtRGF0YS1BbmFseXRpY3MvQ2hhcEZyZXF1ZW5jeS1Nb2RlbGluZy5odG1sI1M6Z29vZG5lc3Mtb2YtZml0