Foto Isnaini

1 INDUSTRY 1 – HEALTHCARE

Time to Relapse After Cancer Treatment

Business Objective

Compare two treatments and determine which one delays relapse longer.

1.1 STEP 1 – Input Dataset

healthcare <- data.frame(
id = paste0("P",1:20),
treatment = c(rep("A",10), rep("B",10)),
time = c(6,10,4,8,12,7,9,5,11,3,
         8,12,6,14,9,13,7,15,10,16),
event = c(1,0,1,1,0,1,0,1,0,1,
          1,0,1,0,1,0,1,0,1,0),
age = c(45,50,39,60,47,55,52,41,48,44,
        46,51,38,62,49,53,57,45,43,54),
gender = c("F","M","F","M","F","M","F","M","F","M",
           "F","M","F","M","F","M","F","M","F","M")
)

1.2 STEP 2 – Create Survival Object

Surv_health <- Surv(healthcare$time, healthcare$event)

1.3 STEP 3 – Kaplan-Meier Curve

km_health <- survfit(Surv_health ~ treatment, data = healthcare)

ggsurvplot(km_health,
           data = healthcare,
           pval = TRUE,
           risk.table = TRUE)

1.3.1 Which treatment shows a higher survival probability?

Berdasarkan kurva Kaplan–Meier, kelompok Treatment B secara konsisten memiliki kurva survival yang berada di atas Treatment A sepanjang periode observasi. Hal ini menunjukkan bahwa probabilitas pasien untuk tetap bebas relaps pada setiap titik waktu lebih tinggi pada kelompok Treatment B.

Penurunan survival pada Treatment A terjadi lebih cepat, terutama pada rentang bulan 3–8, yang mengindikasikan kejadian relaps lebih dini dibandingkan Treatment B. Dengan demikian, secara deskriptif Treatment B menunjukkan performa yang lebih baik dalam menunda relaps.

1.3.2 What is the probability of being relapse-free at month 8?

Pada bulan ke-8, estimasi probabilitas survival dapat dibaca langsung dari kurva:

  • Treatment A berada di kisaran sekitar 0.40–0.45.

  • Treatment B berada di kisaran sekitar 0.70.

Artinya, pada bulan ke-8, sekitar 70% pasien yang menerima Treatment B masih bebas relaps, dibandingkan hanya sekitar 40–45% pada Treatment A. Perbedaan ini cukup substantif secara klinis, karena menunjukkan gap sekitar 25–30 poin persentase dalam probabilitas bertahan tanpa relaps.

1.3.3 Does the curve suggest a meaningful difference?

Secara visual, terdapat pemisahan kurva yang cukup jelas antara kedua kelompok, terutama setelah bulan ke-5. Treatment B tampak memberikan ketahanan yang lebih stabil terhadap relaps.

Namun, nilai p yang ditampilkan pada grafik adalah 0.35, yang berada jauh di atas batas signifikansi konvensional (α = 0.05). Ini mengindikasikan bahwa perbedaan survival yang terlihat secara visual tidak signifikan secara statistik.

Dari perspektif analitik, ini berarti:

  • Secara deskriptif dan klinis, Treatment B tampak lebih unggul.

  • Secara inferensial, dengan ukuran sampel yang relatif kecil (n = 20), bukti statistik belum cukup kuat untuk menyimpulkan bahwa Treatment B secara signifikan lebih baik dalam menunda relaps.

Kemungkinan besar, keterbatasan power statistik akibat ukuran sampel menjadi faktor utama tidak tercapainya signifikansi.

1.4 STEP 4 – Log-Rank Test

survdiff(Surv_health ~ treatment, data = healthcare)
## Call:
## survdiff(formula = Surv_health ~ treatment, data = healthcare)
## 
##              N Observed Expected (O-E)^2/E (O-E)^2/V
## treatment=A 10        6     4.51     0.494     0.879
## treatment=B 10        5     6.49     0.343     0.879
## 
##  Chisq= 0.9  on 1 degrees of freedom, p= 0.3

1.4.1 Interpret the Chi-square result.

Nilai Chi-square = 0.9 dengan df = 1 menghasilkan p-value = 0.3.

Secara statistik, nilai tersebut menunjukkan bahwa perbedaan antara jumlah kejadian yang diamati (observed) dan yang diharapkan (expected) pada kedua kelompok relatif kecil. Karena p-value (0.3) lebih besar dari tingkat signifikansi umum (α = 0.05), maka tidak ada bukti yang cukup untuk menolak hipotesis nol.

Sehingga tidak terdapat perbedaan fungsi survival yang signifikan antara Treatment A dan Treatment B berdasarkan uji log-rank. Perbedaan yang terlihat pada data kemungkinan besar disebabkan oleh variasi acak (random variation), bukan efek perlakuan yang nyata.

1.4.2 Is Treatment B statistically better?

Tidak.

Walaupun secara numerik Treatment B menunjukkan jumlah event lebih sedikit dibanding expected, perbedaan tersebut tidak signifikan secara statistik (p = 0.3). Dengan ukuran sampel yang kecil (masing-masing N = 10), kekuatan uji (statistical power) juga relatif terbatas, sehingga kemungkinan terjadi type II error tetap ada.

Treatment B belum dapat diklaim lebih efektif dalam meningkatkan survival dibanding Treatment A berdasarkan bukti statistik saat ini. Diperlukan ukuran sampel yang lebih besar atau estimasi lanjutan seperti Cox Proportional Hazards Model untuk mengestimasi hazard ratio dan interval kepercayaan guna memperoleh gambaran efek yang lebih robust.

1.5 STEP 5 – Cox Proportional Hazard Model

cox_health <- coxph(Surv_health ~ treatment + age + gender,
                    data = healthcare)

summary(cox_health)
## Call:
## coxph(formula = Surv_health ~ treatment + age + gender, data = healthcare)
## 
##   n= 20, number of events= 11 
## 
##                coef exp(coef) se(coef)      z Pr(>|z|)  
## treatmentB -0.68540   0.50389  0.63846 -1.074   0.2830  
## age        -0.13534   0.87341  0.07543 -1.794   0.0728 .
## genderM     0.03021   1.03067  0.69187  0.044   0.9652  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##            exp(coef) exp(-coef) lower .95 upper .95
## treatmentB    0.5039     1.9846    0.1442     1.761
## age           0.8734     1.1449    0.7534     1.013
## genderM       1.0307     0.9702    0.2656     4.000
## 
## Concordance= 0.693  (se = 0.102 )
## Likelihood ratio test= 5.36  on 3 df,   p=0.1
## Wald test            = 4.25  on 3 df,   p=0.2
## Score (logrank) test = 4.59  on 3 df,   p=0.2

1.5.1 Interpret the Hazard Ratio for Treatment B.

Nilai untuk treatmentB:

  • coef = -0.68540

  • exp(coef) = 0.50389

  • p-value = 0.2830

  • 95% CI = (0.1442 ; 1.761)

Hazard Ratio sebesar 0.50 berarti bahwa, dengan mengontrol variabel usia dan gender, pasien pada Treatment B memiliki risiko relapse sekitar 49–50% lebih rendah dibandingkan Treatment A (sebagai kategori referensi).

Namun, interval kepercayaan 95% mencakup nilai 1 (0.1442 hingga 1.761) dan p-value > 0.05. Artinya, secara statistik efek protektif tersebut tidak signifikan. Secara praktis, ada indikasi penurunan risiko, tetapi bukti empirisnya belum cukup kuat untuk menyimpulkan bahwa Treatment B benar-benar lebih efektif.

1.5.2 Does age increase relapse risk?

Untuk variabel age:

  • coef = -0.13534

  • HR = 0.87341

  • p-value = 0.0728

  • 95% CI = (0.7534 ; 1.013)

Hazard Ratio < 1 menunjukkan bahwa setiap kenaikan 1 unit usia justru dikaitkan dengan penurunan risiko relapse sekitar 12–13% (1 − 0.873 ≈ 0.127).

Jadi, berdasarkan model ini, usia tidak meningkatkan risiko relapse; arah efeknya justru protektif. Namun, p-value = 0.0728 menunjukkan signifikansi marginal (significant at 10% level, tetapi tidak pada 5%). Dengan sampel kecil (n = 20), kemungkinan keterbatasan power cukup besar.

1.5.3 Which variables are significant?

Pada tingkat signifikansi 5% (α = 0.05):

  • treatmentB → tidak signifikan (p = 0.2830)

  • age → tidak signifikan pada 5%, tetapi mendekati signifikan pada 10% (p = 0.0728)

  • genderM → tidak signifikan (p = 0.9652)

Secara simultan, uji global model:

  • Likelihood ratio test p = 0.1

  • Wald test p = 0.2

  • Score test p = 0.2

Semua > 0.05, sehingga model secara keseluruhan belum signifikan pada level 5%.

Jadi, tidak ada variabel yang signifikan secara statistik pada tingkat 5%, meskipun usia menunjukkan kecenderungan efek protektif yang borderline. Dengan ukuran sampel dan jumlah event yang terbatas (11 event), estimasi masih memiliki variabilitas yang tinggi, tercermin dari interval kepercayaan yang lebar, khususnya pada variabel treatment dan gender.

2 INDUSTRY 2 – MANUFACTURING

Machine Failure Analysis

Business Objective

Determine whether Premium machines last longer than Standard machines.

2.1 STEP 1 – Input Dataset

manufacturing <- data.frame(
id = paste0("M",1:20),
type = c(rep("Standard",10), rep("Premium",10)),
time = c(200,350,180,260,300,220,310,190,280,340,
         400,320,410,290,360,330,420,310,390,305),
status = c(1,0,1,1,0,1,0,1,1,0,
           0,1,0,1,0,1,0,1,0,1),
temp = c(75,72,78,80,74,77,73,79,76,72,
         70,68,69,71,67,72,66,70,68,73)
)

2.2 STEP 2 – Create Survival Object

Surv_machine <- Surv(manufacturing$time,
                     manufacturing$status)

2.3 STEP 3 – Kaplan-Meier Curve

km_machine <- survfit(Surv_machine ~ type,
                      data = manufacturing)

ggsurvplot(km_machine,
           data = manufacturing,
           pval = TRUE,
           risk.table = TRUE)

2.3.1 Which machine type lasts longer?

Secara visual, kurva Premium berada di atas kurva Standard hampir sepanjang periode observasi. Artinya, pada waktu yang sama, probabilitas mesin Premium masih bertahan (belum gagal) lebih tinggi dibandingkan mesin Standard.

Selain itu, kegagalan pada mesin Standard mulai terjadi lebih awal (sekitar 180–200 jam), sementara Premium menunjukkan penurunan survival yang lebih lambat dan terjadi pada waktu yang relatif lebih tinggi.

Secara deskriptif: Premium lasts longer than Standard.

Namun, uji log-rank menghasilkan p = 0.16, yang berarti perbedaan tersebut tidak signifikan secara statistik pada α = 0.05.

2.3.2 What is survival probability at 300 hours?

Berdasarkan grafik pada t ≈ 300 jam:

  • Premium: survival probability sekitar 0.80–0.90

  • Standard: survival probability sekitar 0.40

Maka,

  • Sekitar 80–90% mesin Premium masih beroperasi pada 300 jam.

  • Hanya sekitar 40% mesin Standard yang masih beroperasi pada 300 jam.

Dan dapat disimpulkan bahwa perbedaan ini cukup besar secara praktis.

2.3.3 Does Premium appear more reliable?

Dari perspektif reliabilitas (probabilitas bertahan lebih tinggi dan penurunan kurva lebih lambat):

Ya, Premium secara visual dan praktis tampak lebih reliabel dibandingkan Standard.

Namun secara inferensial:

  • p-value = 0.16 (> 0.05)

  • Tidak ada bukti statistik yang cukup kuat untuk menyatakan perbedaan signifikan.

Premium menunjukkan indikasi reliabilitas yang lebih baik secara praktis, tetapi dengan ukuran sampel kecil (n=20), bukti statistiknya belum cukup kuat untuk menyatakan superiority secara signifikan.

Artinya, dari sisi bisnis, ada sinyal positif untuk Premium, tetapi keputusan investasi skala besar sebaiknya dikonfirmasi dengan data tambahan atau periode observasi lebih panjang.

2.4 STEP 4 – Cox Model

cox_machine <- coxph(Surv_machine ~ type + temp,
                     data = manufacturing)

summary(cox_machine)
## Call:
## coxph(formula = Surv_machine ~ type + temp, data = manufacturing)
## 
##   n= 20, number of events= 11 
## 
##                 coef exp(coef) se(coef)      z Pr(>|z|)    
## typeStandard -1.4100    0.2441   0.9467 -1.489 0.136386    
## temp          0.5467    1.7275   0.1510  3.620 0.000294 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##              exp(coef) exp(-coef) lower .95 upper .95
## typeStandard    0.2441     4.0959   0.03818     1.561
## temp            1.7275     0.5789   1.28495     2.323
## 
## Concordance= 0.872  (se = 0.034 )
## Likelihood ratio test= 17.99  on 2 df,   p=1e-04
## Wald test            = 13.69  on 2 df,   p=0.001
## Score (logrank) test = 19.69  on 2 df,   p=5e-05

2.4.1 Interpret Hazard Ratio for Premium.

Pada output tertulis typeStandard, artinya Premium adalah kategori referensi.

Nilai:

  • HR (Standard vs Premium) = 0.244

  • 95% CI = (0.038 ; 1.561)

  • p = 0.136

Maka,mesin Standard memiliki hazard hanya 0.244 kali dibanding Premium (setelah mengontrol suhu).

\[ HR_Premiun = \frac{1}{0.244} ≈ 4.10 \]

Artinya:

Dengan suhu yang sama, mesin Premium memiliki risiko kegagalan sekitar 4 kali lebih tinggi dibanding mesin Standard.

Secara arah efek, ini bertentangan dengan hasil deskriptif Kaplan-Meier sebelumnya. Namun secara statistik:

  • p-value = 0.136 (> 0.05)

  • Interval kepercayaan mencakup 1

Sehingga perbedaan tipe mesin tidak signifikan secara statistik setelah mengontrol suhu. Ini menunjukkan bahwa variabel suhu kemungkinan menjadi faktor dominan yang menjelaskan perbedaan reliabilitas.

2.4.2 Does higher temperature increase failure risk?

Untuk variabel temp:

  • HR = 1.7275

  • 95% CI = (1.285 ; 2.323)

  • p = 0.000294 (sangat signifikan)

Setiap kenaikan 1 unit suhu meningkatkan risiko kegagalan sebesar:

\[ (1.7275 - 1) \times 100\% ≈ 72.7\% \]

Karena:

  • HR > 1

  • CI tidak mencakup 1

  • p < 0.001

Maka, suhu yang lebih tinggi secara signifikan meningkatkan risiko kegagalan mesin. Ini adalah efek yang kuat dan konsisten.

2.4.3 What is the managerial implication?

Dari perspektif pengambilan keputusan industri:

a) Faktor dominan adalah suhu operasional

Suhu memiliki pengaruh besar dan signifikan terhadap risiko kegagalan. Artinya:

  • Pengendalian suhu lebih kritis dibanding pemilihan tipe mesin.

  • Investasi pada sistem cooling atau kontrol lingkungan produksi dapat memberikan dampak reliabilitas yang lebih besar.

b) Tipe mesin bukan determinan utama (setelah kontrol suhu)

Meskipun secara visual Premium tampak lebih tahan lama, setelah dikontrol oleh suhu, perbedaannya tidak signifikan.

Ini mengindikasikan kemungkinan:

  • Premium mungkin beroperasi pada suhu berbeda dalam data mentah.

  • Efek tipe mesin sebagian dijelaskan oleh variabel temperatur.

c) Strategi berbasis data

Implikasi praktis yang rasional:

  1. Prioritaskan kontrol suhu sebagai strategi mitigasi risiko kegagalan.

  2. Evaluasi ulang positioning produk Premium — apakah benar menawarkan durability premium, atau hanya sensitif terhadap kondisi operasional.

  3. Lakukan studi lanjutan dengan sampel lebih besar untuk memastikan efek tipe mesin.

Kesimpulan:

Dalam konteks manufaktur ini, reliability lebih dipengaruhi oleh kondisi operasional (temperature) dibandingkan spesifikasi produk (machine type). Pengendalian lingkungan produksi memberikan ROI yang lebih jelas dibanding sekadar upgrade tipe mesin.

3 INDUSTRY 3 – CUSTOMER ANALYTICS

Time to Customer Churn

Business Objective

Evaluate retention differences between Basic and Pro subscription plans.

3.1 STEP 1 – Input Dataset

customer <- data.frame(
id = paste0("C",1:20),
plan = c(rep("Basic",10), rep("Pro",10)),
tenure = c(3,8,5,6,9,4,7,10,2,11,
           10,6,12,8,14,7,15,9,13,16),
churn = c(1,0,1,1,0,1,1,0,1,0,
          0,1,0,1,0,1,0,1,0,0),
fee = c(rep(20,10), rep(35,10)),
support_calls = c(5,2,4,3,1,6,3,2,7,1,
                  1,2,0,2,1,3,0,2,1,0)
)

3.2 STEP 2 – Create Survival Object

Surv_customer <- Surv(customer$tenure,
                      customer$churn)

3.3 STEP 3 – Kaplan-Meier Curve

km_customer <- survfit(Surv_customer ~ plan,
                       data = customer)

ggsurvplot(km_customer,
           data = customer,
           pval = TRUE,
           risk.table = TRUE)

3.3.1 Which plan shows better retention?

Kurva Kaplan–Meier menunjukkan bahwa pelanggan Pro memiliki probabilitas bertahan yang lebih tinggi dibandingkan pelanggan Basic sepanjang periode observasi. Penurunan survival pada Basic terjadi lebih cepat, yang berarti churn terjadi lebih dini pada segmen tersebut.

Dalam konteks retensi pelanggan:

Plan Pro menunjukkan performa retensi yang lebih baik, karena pelanggan cenderung bertahan lebih lama sebelum churn. Ini mengindikasikan bahwa pelanggan dengan paket Pro memiliki customer lifetime yang relatif lebih panjang.

3.3.2 What is the probability of surviving ≥ 6 months?

Dari estimasi kurva pada bulan ke-6:

  • Basic ≈ 50%

  • Pro ≈ 80%

Artinya:

  • Hanya sekitar separuh pelanggan Basic yang masih aktif setelah 6 bulan.

  • Sekitar delapan dari sepuluh pelanggan Pro masih bertahan pada periode yang sama.

Dalam analisis churn, ini menunjukkan bahwa risiko kehilangan pelanggan dalam 6 bulan pertama jauh lebih tinggi pada segmen Basic.

3.3.3 Is the difference statistically significant?

Nilai p dari uji log-rank adalah 0.17.

Karena p > 0.05, maka secara statistik tidak terdapat bukti yang cukup kuat untuk menyimpulkan bahwa perbedaan retensi antara Basic dan Pro signifikan pada tingkat kepercayaan 95%.

Namun, secara praktis terdapat gap retensi yang cukup besar. Dengan ukuran sampel yang kecil (20 pelanggan), kemungkinan keterbatasan statistical power cukup tinggi.

3.4 STEP 4 – Cox Model

cox_customer <- coxph(Surv_customer ~ plan +
                      support_calls + fee,
                      data = customer)

summary(cox_customer)
## Call:
## coxph(formula = Surv_customer ~ plan + support_calls + fee, data = customer)
## 
##   n= 20, number of events= 10 
## 
##                  coef exp(coef) se(coef)     z Pr(>|z|)   
## planPro        0.6690    1.9523   0.8219 0.814  0.41564   
## support_calls  2.3029   10.0031   0.7092 3.247  0.00116 **
## fee                NA        NA   0.0000    NA       NA   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##               exp(coef) exp(-coef) lower .95 upper .95
## planPro           1.952    0.51222    0.3899     9.775
## support_calls    10.003    0.09997    2.4917    40.158
## fee                  NA         NA        NA        NA
## 
## Concordance= 0.958  (se = 0.023 )
## Likelihood ratio test= 32.54  on 2 df,   p=9e-08
## Wald test            = 10.63  on 2 df,   p=0.005
## Score (logrank) test = 33.94  on 2 df,   p=4e-08

3.4.1 Interpret Hazard Ratio for Pro plan.

Untuk variabel planPro:

  • HR = 1.95

  • 95% CI = (0.39 ; 9.78)

  • p = 0.416

Dengan jumlah support calls dan fee yang sama, pelanggan Pro memiliki risiko churn sekitar 1.95 kali lebih tinggi dibanding Basic (karena Basic menjadi referensi).

Namun:

  • Interval kepercayaan sangat lebar dan mencakup 1

  • p-value > 0.05

Artinya, efek plan tidak signifikan secara statistik setelah mengontrol variabel lain. Perbedaan retensi yang terlihat pada Kaplan–Meier tampaknya bukan semata-mata disebabkan oleh jenis plan, melainkan oleh variabel lain dalam model.

3.4.2 Do support calls increase churn risk?

Untuk variabel support_calls:

  • HR = 10.00

  • 95% CI = (2.49 ; 40.16)

  • p = 0.00116

Setiap tambahan 1 support call meningkatkan risiko churn sekitar 10 kali lipat, dengan efek yang sangat signifikan secara statistik.

Karena:

  • HR jauh > 1

  • CI tidak mencakup 1

  • p < 0.01

Maka secara empiris, frekuensi interaksi dengan support merupakan prediktor kuat churn. Dalam konteks customer analytics, ini mengindikasikan bahwa tingginya support calls kemungkinan merefleksikan ketidakpuasan, friksi penggunaan, atau service failure.

3.4.3 What retention strategy can be derived?

Berdasarkan model ini, strategi retensi sebaiknya berfokus pada experience management, bukan sekadar diferensiasi plan.

a) Early Warning System

Support calls dapat digunakan sebagai variabel churn trigger. Pelanggan dengan >2–3 support calls dalam periode tertentu dapat dikategorikan sebagai high-risk dan diberi intervensi proaktif.

b) Root Cause Analysis

Karena efek support_calls sangat besar, perlu dianalisis:

  • Jenis keluhan yang paling sering muncul

  • Waktu respon support

  • Resolution time dan satisfaction score

Tujuannya adalah menurunkan volume dan frekuensi eskalasi.

c) Quality over Pricing

Variabel fee tidak terestimasi (NA), kemungkinan karena kolinearitas sempurna dengan plan (Basic = 20, Pro = 35). Ini menunjukkan bahwa harga tidak dapat dipisahkan dari jenis plan dalam dataset ini.

Implikasinya: Retensi tidak cukup dijelaskan oleh harga atau tipe paket saja; kualitas pengalaman pelanggan menjadi faktor dominan.

4 CRITICAL ANALYSIS (REQUIRED)

4.1 INDUSTRY 1 – HEALTHCARE (Time to Relapse)

1. What does censoring represent?

Censoring merepresentasikan pasien yang belum mengalami relapse hingga akhir periode observasi atau hilang dari follow-up. Artinya, kita hanya mengetahui bahwa waktu bebas relapse ≥ waktu terakhir observasi, tetapi tidak mengetahui waktu kejadian sebenarnya.

2. Why is the average time insufficient?

Rata-rata waktu relapse tidak mempertimbangkan:

  • Pasien yang belum relapse (censored data)

  • Distribusi waktu kejadian yang biasanya tidak simetris

  • Informasi tentang timing of risk

Menggunakan mean akan bias karena pasien yang tidak relapse akan diperlakukan seolah-olah memiliki waktu relapse pasti, padahal sebenarnya belum terjadi.

3. What strategic decision can management make?

Manajemen rumah sakit atau klinik dapat:

  • Mengidentifikasi terapi dengan hazard lebih rendah

  • Mendesain monitoring intensif pada periode risiko tinggi

  • Mengalokasikan sumber daya pada protokol yang menurunkan hazard relapse

Keputusan berbasis hazard ratio lebih informatif daripada sekadar rata-rata durasi.

4. What would happen if we used linear regression instead?

Linear regression:

  • Mengabaikan censoring

  • Mengasumsikan distribusi normal residual

  • Bisa menghasilkan prediksi waktu negatif

  • Tidak memodelkan risiko kejadian per unit waktu

Hasilnya bias dan tidak sesuai untuk data time-to-event.

4.2 INDUSTRY 2 – MANUFACTURING (Time to Machine Failure)

1. What does censoring represent?

Censoring berarti mesin belum gagal sampai akhir periode pengamatan. Mesin tersebut masih beroperasi saat studi selesai.

2. Why is the average time insufficient?

Rata-rata waktu kegagalan:

  • Tidak mempertimbangkan mesin yang belum gagal

  • Tidak menggambarkan perubahan risiko seiring waktu

  • Mengabaikan hazard dinamis akibat kondisi operasional (misalnya suhu)

Reliability analysis memerlukan estimasi survival function, bukan hanya mean time to failure.

3. What strategic decision can management make?

Manajemen dapat:

  • Mengontrol suhu operasional karena terbukti meningkatkan hazard

  • Mendesain preventive maintenance berbasis hazard

  • Mengevaluasi klaim durability antar tipe mesin secara berbasis data

Fokus strategis bergeser dari spesifikasi produk ke kondisi operasional.

4. What would happen if we used linear regression instead?

Linear regression akan:

  • Memperlakukan mesin yang belum gagal seolah memiliki waktu kegagalan pasti

  • Mengabaikan struktur hazard

  • Menghasilkan estimasi yang bias terhadap durability

Model tidak akan mampu menangkap probabilitas survival pada waktu tertentu.

4.3 INDUSTRY 3 – CUSTOMER ANALYTICS (Time to Churn)

1. What does censoring represent?

Censoring berarti pelanggan masih aktif hingga akhir periode observasi. Kita tidak mengetahui kapan mereka akan churn, hanya bahwa churn belum terjadi.

2. Why is the average time insufficient?

Rata-rata tenure:

  • Tidak mempertimbangkan pelanggan aktif

  • Tidak menangkap periode kritis churn (misal bulan 3–6)

  • Tidak mengestimasi risiko churn per unit waktu

Dalam churn analysis, timing sangat krusial; hazard rate lebih informatif dibanding mean tenure.

3. What strategic decision can management make?

Manajemen dapat:

  • Menggunakan support calls sebagai early warning churn signal

  • Mendesain intervensi retensi pada periode risiko tinggi

  • Mengoptimalkan customer experience, bukan hanya pricing plan

Strategi retensi harus berbasis risk profiling, bukan hanya segmentasi statis.

4. What would happen if we used linear regression instead?

Linear regression pada tenure:

  • Mengabaikan pelanggan yang masih aktif

  • Menghasilkan bias estimasi lifetime

  • Tidak dapat memodelkan probabilitas bertahan pada horizon tertentu

  • Tidak menangkap dinamika hazard akibat perilaku pelanggan

Akibatnya, model retensi menjadi kurang presisi dan berisiko menghasilkan keputusan yang salah arah.

LS0tDQp0aXRsZTogIkludHJvZHVjdGlvbiB0byBTdXJ2aXZhbCBNb2RlbCINCnN1YnRpdGxlOiAiVHVnYXMgMSBBbmFsaXNpcyBTdXJ2aXZhbCINCmF1dGhvcjogDQogICJJc25haW5pIE51ciBIYXNhbmFoICg1MjI0MDAwNSkiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiB0cnVlDQogICAgdG9jX2Zsb2F0OiB0cnVlDQogICAgdG9jX2RlcHRoOiAzDQogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlDQogICAgdGhlbWU6IGZsYXRseQ0KICAgIGhpZ2hsaWdodDogdGFuZ28NCiAgICBkZl9wcmludDogcGFnZWQNCiAgICBjb2RlX2ZvbGRpbmc6ICJzaG93Ig0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIGNzczogInN0eWxlICgxKS5jc3MiDQogICAgcGFyYW1zOg0KICBlY2hvOiBmYWxzZQ0KZWRpdG9yX29wdGlvbnM6IA0KICBtYXJrZG93bjogDQogICAgd3JhcDogNzINCi0tLQ0KDQo8aW1nIA0KICBpZD0iSXNuYSIgDQogIHNyYz0iRDpcS1VMSUFIIElTTkFcU2VtZXN0ZXIgNFxBbmFsaXNpcyBTdXJ2aXZhbFxJc25hLmpwZWciIA0KICBhbHQ9IkZvdG8gSXNuYWluaSIgDQogIHN0eWxlPSINCiAgICB3aWR0aDogMjAwcHg7DQogICAgaGVpZ2h0OiAyMDBweDsNCiAgICBvYmplY3QtZml0OiBjb3ZlcjsgICAgICAgDQogICAgYm9yZGVyLXJhZGl1czogNTAlOyAgICAgIA0KICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgIG1hcmdpbjogYXV0bzsNCiAgICBib3gtc2hhZG93OiAwIDAgMTBweCByZ2JhKDAsMCwwLDAuMik7IA0KICAiPg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZWNobz1GQUxTRX0NCmxpYnJhcnkoc3Vydml2YWwpDQpsaWJyYXJ5KHN1cnZtaW5lcikNCmBgYA0KDQoNCiMgSU5EVVNUUlkgMSDigJMgSEVBTFRIQ0FSRQ0KKipUaW1lIHRvIFJlbGFwc2UgQWZ0ZXIgQ2FuY2VyIFRyZWF0bWVudCoqDQoNCkJ1c2luZXNzIE9iamVjdGl2ZQ0KDQpDb21wYXJlIHR3byB0cmVhdG1lbnRzIGFuZCBkZXRlcm1pbmUgd2hpY2ggb25lIGRlbGF5cyByZWxhcHNlIGxvbmdlci4NCg0KIyMgU1RFUCAxIOKAkyBJbnB1dCBEYXRhc2V0DQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBlY2hvPVRSVUV9DQpoZWFsdGhjYXJlIDwtIGRhdGEuZnJhbWUoDQppZCA9IHBhc3RlMCgiUCIsMToyMCksDQp0cmVhdG1lbnQgPSBjKHJlcCgiQSIsMTApLCByZXAoIkIiLDEwKSksDQp0aW1lID0gYyg2LDEwLDQsOCwxMiw3LDksNSwxMSwzLA0KICAgICAgICAgOCwxMiw2LDE0LDksMTMsNywxNSwxMCwxNiksDQpldmVudCA9IGMoMSwwLDEsMSwwLDEsMCwxLDAsMSwNCiAgICAgICAgICAxLDAsMSwwLDEsMCwxLDAsMSwwKSwNCmFnZSA9IGMoNDUsNTAsMzksNjAsNDcsNTUsNTIsNDEsNDgsNDQsDQogICAgICAgIDQ2LDUxLDM4LDYyLDQ5LDUzLDU3LDQ1LDQzLDU0KSwNCmdlbmRlciA9IGMoIkYiLCJNIiwiRiIsIk0iLCJGIiwiTSIsIkYiLCJNIiwiRiIsIk0iLA0KICAgICAgICAgICAiRiIsIk0iLCJGIiwiTSIsIkYiLCJNIiwiRiIsIk0iLCJGIiwiTSIpDQopDQpgYGANCg0KIyMgU1RFUCAyIOKAkyBDcmVhdGUgU3Vydml2YWwgT2JqZWN0DQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZWNobz1UUlVFfQ0KU3Vydl9oZWFsdGggPC0gU3VydihoZWFsdGhjYXJlJHRpbWUsIGhlYWx0aGNhcmUkZXZlbnQpDQpgYGANCg0KIyMgU1RFUCAzIOKAkyBLYXBsYW4tTWVpZXIgQ3VydmUNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBlY2hvPVRSVUV9DQprbV9oZWFsdGggPC0gc3VydmZpdChTdXJ2X2hlYWx0aCB+IHRyZWF0bWVudCwgZGF0YSA9IGhlYWx0aGNhcmUpDQoNCmdnc3VydnBsb3Qoa21faGVhbHRoLA0KICAgICAgICAgICBkYXRhID0gaGVhbHRoY2FyZSwNCiAgICAgICAgICAgcHZhbCA9IFRSVUUsDQogICAgICAgICAgIHJpc2sudGFibGUgPSBUUlVFKQ0KYGBgDQoNCiMjIyBXaGljaCB0cmVhdG1lbnQgc2hvd3MgYSBoaWdoZXIgc3Vydml2YWwgcHJvYmFiaWxpdHk/DQoNCkJlcmRhc2Fya2FuIGt1cnZhIEthcGxhbuKAk01laWVyLCBrZWxvbXBvayBUcmVhdG1lbnQgQiBzZWNhcmEga29uc2lzdGVuIG1lbWlsaWtpIGt1cnZhIHN1cnZpdmFsIHlhbmcgYmVyYWRhIGRpIGF0YXMgVHJlYXRtZW50IEEgc2VwYW5qYW5nIHBlcmlvZGUgb2JzZXJ2YXNpLiBIYWwgaW5pIG1lbnVuanVra2FuIGJhaHdhIHByb2JhYmlsaXRhcyBwYXNpZW4gdW50dWsgdGV0YXAgYmViYXMgcmVsYXBzIHBhZGEgc2V0aWFwIHRpdGlrIHdha3R1IGxlYmloIHRpbmdnaSBwYWRhIGtlbG9tcG9rIFRyZWF0bWVudCBCLg0KDQpQZW51cnVuYW4gc3Vydml2YWwgcGFkYSBUcmVhdG1lbnQgQSB0ZXJqYWRpIGxlYmloIGNlcGF0LCB0ZXJ1dGFtYSBwYWRhIHJlbnRhbmcgYnVsYW4gM+KAkzgsIHlhbmcgbWVuZ2luZGlrYXNpa2FuIGtlamFkaWFuIHJlbGFwcyBsZWJpaCBkaW5pIGRpYmFuZGluZ2thbiBUcmVhdG1lbnQgQi4gRGVuZ2FuIGRlbWlraWFuLCBzZWNhcmEgZGVza3JpcHRpZiBUcmVhdG1lbnQgQiBtZW51bmp1a2thbiBwZXJmb3JtYSB5YW5nIGxlYmloIGJhaWsgZGFsYW0gbWVudW5kYSByZWxhcHMuDQoNCiMjIyBXaGF0IGlzIHRoZSBwcm9iYWJpbGl0eSBvZiBiZWluZyByZWxhcHNlLWZyZWUgYXQgbW9udGggOD8NCg0KUGFkYSBidWxhbiBrZS04LCBlc3RpbWFzaSBwcm9iYWJpbGl0YXMgc3Vydml2YWwgZGFwYXQgZGliYWNhIGxhbmdzdW5nIGRhcmkga3VydmE6DQoNCi0gVHJlYXRtZW50IEEgYmVyYWRhIGRpIGtpc2FyYW4gc2VraXRhciAwLjQw4oCTMC40NS4NCg0KLSBUcmVhdG1lbnQgQiBiZXJhZGEgZGkga2lzYXJhbiBzZWtpdGFyIDAuNzAuDQoNCkFydGlueWEsIHBhZGEgYnVsYW4ga2UtOCwgc2VraXRhciA3MCUgcGFzaWVuIHlhbmcgbWVuZXJpbWEgVHJlYXRtZW50IEIgbWFzaWggYmViYXMgcmVsYXBzLCBkaWJhbmRpbmdrYW4gaGFueWEgc2VraXRhciA0MOKAkzQ1JSBwYWRhIFRyZWF0bWVudCBBLiBQZXJiZWRhYW4gaW5pIGN1a3VwIHN1YnN0YW50aWYgc2VjYXJhIGtsaW5pcywga2FyZW5hIG1lbnVuanVra2FuIGdhcCBzZWtpdGFyIDI14oCTMzAgcG9pbiBwZXJzZW50YXNlIGRhbGFtIHByb2JhYmlsaXRhcyBiZXJ0YWhhbiB0YW5wYSByZWxhcHMuDQoNCiMjIyBEb2VzIHRoZSBjdXJ2ZSBzdWdnZXN0IGEgbWVhbmluZ2Z1bCBkaWZmZXJlbmNlPw0KDQpTZWNhcmEgdmlzdWFsLCB0ZXJkYXBhdCBwZW1pc2FoYW4ga3VydmEgeWFuZyBjdWt1cCBqZWxhcyBhbnRhcmEga2VkdWEga2Vsb21wb2ssIHRlcnV0YW1hIHNldGVsYWggYnVsYW4ga2UtNS4gVHJlYXRtZW50IEIgdGFtcGFrIG1lbWJlcmlrYW4ga2V0YWhhbmFuIHlhbmcgbGViaWggc3RhYmlsIHRlcmhhZGFwIHJlbGFwcy4NCg0KTmFtdW4sIG5pbGFpIHAgeWFuZyBkaXRhbXBpbGthbiBwYWRhIGdyYWZpayBhZGFsYWggMC4zNSwgeWFuZyBiZXJhZGEgamF1aCBkaSBhdGFzIGJhdGFzIHNpZ25pZmlrYW5zaSBrb252ZW5zaW9uYWwgKM6xID0gMC4wNSkuIEluaSBtZW5naW5kaWthc2lrYW4gYmFod2EgcGVyYmVkYWFuIHN1cnZpdmFsIHlhbmcgdGVybGloYXQgc2VjYXJhIHZpc3VhbCB0aWRhayBzaWduaWZpa2FuIHNlY2FyYSBzdGF0aXN0aWsuDQoNCkRhcmkgcGVyc3Bla3RpZiBhbmFsaXRpaywgaW5pIGJlcmFydGk6DQoNCi0gU2VjYXJhIGRlc2tyaXB0aWYgZGFuIGtsaW5pcywgVHJlYXRtZW50IEIgdGFtcGFrIGxlYmloIHVuZ2d1bC4NCg0KLSBTZWNhcmEgaW5mZXJlbnNpYWwsIGRlbmdhbiB1a3VyYW4gc2FtcGVsIHlhbmcgcmVsYXRpZiBrZWNpbCAobiA9IDIwKSwgYnVrdGkgc3RhdGlzdGlrIGJlbHVtIGN1a3VwIGt1YXQgdW50dWsgbWVueWltcHVsa2FuIGJhaHdhIFRyZWF0bWVudCBCIHNlY2FyYSBzaWduaWZpa2FuIGxlYmloIGJhaWsgZGFsYW0gbWVudW5kYSByZWxhcHMuDQoNCktlbXVuZ2tpbmFuIGJlc2FyLCBrZXRlcmJhdGFzYW4gcG93ZXIgc3RhdGlzdGlrIGFraWJhdCB1a3VyYW4gc2FtcGVsIG1lbmphZGkgZmFrdG9yIHV0YW1hIHRpZGFrIHRlcmNhcGFpbnlhIHNpZ25pZmlrYW5zaS4NCg0KDQojIyBTVEVQIDQg4oCTIExvZy1SYW5rIFRlc3QNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBlY2hvPVRSVUV9DQpzdXJ2ZGlmZihTdXJ2X2hlYWx0aCB+IHRyZWF0bWVudCwgZGF0YSA9IGhlYWx0aGNhcmUpDQpgYGANCg0KIyMjIEludGVycHJldCB0aGUgQ2hpLXNxdWFyZSByZXN1bHQuDQoNCk5pbGFpIENoaS1zcXVhcmUgPSAwLjkgZGVuZ2FuIGRmID0gMSBtZW5naGFzaWxrYW4gcC12YWx1ZSA9IDAuMy4NCg0KU2VjYXJhIHN0YXRpc3RpaywgbmlsYWkgdGVyc2VidXQgbWVudW5qdWtrYW4gYmFod2EgcGVyYmVkYWFuIGFudGFyYSBqdW1sYWgga2VqYWRpYW4geWFuZyBkaWFtYXRpIChvYnNlcnZlZCkgZGFuIHlhbmcgZGloYXJhcGthbiAoZXhwZWN0ZWQpIHBhZGEga2VkdWEga2Vsb21wb2sgcmVsYXRpZiBrZWNpbC4gS2FyZW5hIHAtdmFsdWUgKDAuMykgbGViaWggYmVzYXIgZGFyaSB0aW5na2F0IHNpZ25pZmlrYW5zaSB1bXVtICjOsSA9IDAuMDUpLCBtYWthIHRpZGFrIGFkYSBidWt0aSB5YW5nIGN1a3VwIHVudHVrIG1lbm9sYWsgaGlwb3Rlc2lzIG5vbC4NCg0KU2VoaW5nZ2EgdGlkYWsgdGVyZGFwYXQgcGVyYmVkYWFuIGZ1bmdzaSBzdXJ2aXZhbCB5YW5nIHNpZ25pZmlrYW4gYW50YXJhIFRyZWF0bWVudCBBIGRhbiBUcmVhdG1lbnQgQiBiZXJkYXNhcmthbiB1amkgbG9nLXJhbmsuIFBlcmJlZGFhbiB5YW5nIHRlcmxpaGF0IHBhZGEgZGF0YSBrZW11bmdraW5hbiBiZXNhciBkaXNlYmFia2FuIG9sZWggdmFyaWFzaSBhY2FrIChyYW5kb20gdmFyaWF0aW9uKSwgYnVrYW4gZWZlayBwZXJsYWt1YW4geWFuZyBueWF0YS4NCg0KIyMjIElzIFRyZWF0bWVudCBCIHN0YXRpc3RpY2FsbHkgYmV0dGVyPw0KDQpUaWRhay4NCg0KV2FsYXVwdW4gc2VjYXJhIG51bWVyaWsgVHJlYXRtZW50IEIgbWVudW5qdWtrYW4ganVtbGFoIGV2ZW50IGxlYmloIHNlZGlraXQgZGliYW5kaW5nIGV4cGVjdGVkLCBwZXJiZWRhYW4gdGVyc2VidXQgdGlkYWsgc2lnbmlmaWthbiBzZWNhcmEgc3RhdGlzdGlrIChwID0gMC4zKS4gRGVuZ2FuIHVrdXJhbiBzYW1wZWwgeWFuZyBrZWNpbCAobWFzaW5nLW1hc2luZyBOID0gMTApLCBrZWt1YXRhbiB1amkgKHN0YXRpc3RpY2FsIHBvd2VyKSBqdWdhIHJlbGF0aWYgdGVyYmF0YXMsIHNlaGluZ2dhIGtlbXVuZ2tpbmFuIHRlcmphZGkgdHlwZSBJSSBlcnJvciB0ZXRhcCBhZGEuDQoNClRyZWF0bWVudCBCIGJlbHVtIGRhcGF0IGRpa2xhaW0gbGViaWggZWZla3RpZiBkYWxhbSBtZW5pbmdrYXRrYW4gc3Vydml2YWwgZGliYW5kaW5nIFRyZWF0bWVudCBBIGJlcmRhc2Fya2FuIGJ1a3RpIHN0YXRpc3RpayBzYWF0IGluaS4gRGlwZXJsdWthbiB1a3VyYW4gc2FtcGVsIHlhbmcgbGViaWggYmVzYXIgYXRhdSBlc3RpbWFzaSBsYW5qdXRhbiBzZXBlcnRpIENveCBQcm9wb3J0aW9uYWwgSGF6YXJkcyBNb2RlbCB1bnR1ayBtZW5nZXN0aW1hc2kgaGF6YXJkIHJhdGlvIGRhbiBpbnRlcnZhbCBrZXBlcmNheWFhbiBndW5hIG1lbXBlcm9sZWggZ2FtYmFyYW4gZWZlayB5YW5nIGxlYmloIHJvYnVzdC4NCg0KIyMgU1RFUCA1IOKAkyBDb3ggUHJvcG9ydGlvbmFsIEhhemFyZCBNb2RlbA0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89VFJVRX0NCmNveF9oZWFsdGggPC0gY294cGgoU3Vydl9oZWFsdGggfiB0cmVhdG1lbnQgKyBhZ2UgKyBnZW5kZXIsDQogICAgICAgICAgICAgICAgICAgIGRhdGEgPSBoZWFsdGhjYXJlKQ0KDQpzdW1tYXJ5KGNveF9oZWFsdGgpDQpgYGANCg0KIyMjIEludGVycHJldCB0aGUgSGF6YXJkIFJhdGlvIGZvciBUcmVhdG1lbnQgQi4NCg0KTmlsYWkgdW50dWsgdHJlYXRtZW50QjoNCg0KLSBjb2VmID0gLTAuNjg1NDANCg0KLSBleHAoY29lZikgPSAwLjUwMzg5DQoNCi0gcC12YWx1ZSA9IDAuMjgzMA0KDQotIDk1JSBDSSA9ICgwLjE0NDIgOyAxLjc2MSkNCg0KSGF6YXJkIFJhdGlvIHNlYmVzYXIgMC41MCBiZXJhcnRpIGJhaHdhLCBkZW5nYW4gbWVuZ29udHJvbCB2YXJpYWJlbCB1c2lhIGRhbiBnZW5kZXIsIHBhc2llbiBwYWRhIFRyZWF0bWVudCBCIG1lbWlsaWtpIHJpc2lrbyByZWxhcHNlIHNla2l0YXIgNDnigJM1MCUgbGViaWggcmVuZGFoIGRpYmFuZGluZ2thbiBUcmVhdG1lbnQgQSAoc2ViYWdhaSBrYXRlZ29yaSByZWZlcmVuc2kpLg0KDQpOYW11biwgaW50ZXJ2YWwga2VwZXJjYXlhYW4gOTUlIG1lbmNha3VwIG5pbGFpIDEgKDAuMTQ0MiBoaW5nZ2EgMS43NjEpIGRhbiBwLXZhbHVlID4gMC4wNS4gQXJ0aW55YSwgc2VjYXJhIHN0YXRpc3RpayBlZmVrIHByb3Rla3RpZiB0ZXJzZWJ1dCB0aWRhayBzaWduaWZpa2FuLiBTZWNhcmEgcHJha3RpcywgYWRhIGluZGlrYXNpIHBlbnVydW5hbiByaXNpa28sIHRldGFwaSBidWt0aSBlbXBpcmlzbnlhIGJlbHVtIGN1a3VwIGt1YXQgdW50dWsgbWVueWltcHVsa2FuIGJhaHdhIFRyZWF0bWVudCBCIGJlbmFyLWJlbmFyIGxlYmloIGVmZWt0aWYuDQoNCiMjIyBEb2VzIGFnZSBpbmNyZWFzZSByZWxhcHNlIHJpc2s/DQoNClVudHVrIHZhcmlhYmVsIGFnZToNCg0KLSBjb2VmID0gLTAuMTM1MzQNCg0KLSBIUiA9IDAuODczNDENCg0KLSBwLXZhbHVlID0gMC4wNzI4DQoNCi0gOTUlIENJID0gKDAuNzUzNCA7IDEuMDEzKQ0KDQpIYXphcmQgUmF0aW8gPCAxIG1lbnVuanVra2FuIGJhaHdhIHNldGlhcCBrZW5haWthbiAxIHVuaXQgdXNpYSBqdXN0cnUgZGlrYWl0a2FuIGRlbmdhbiBwZW51cnVuYW4gcmlzaWtvIHJlbGFwc2Ugc2VraXRhciAxMuKAkzEzJSAoMSDiiJIgMC44NzMg4omIIDAuMTI3KS4NCg0KSmFkaSwgYmVyZGFzYXJrYW4gbW9kZWwgaW5pLCB1c2lhIHRpZGFrIG1lbmluZ2thdGthbiByaXNpa28gcmVsYXBzZTsgYXJhaCBlZmVrbnlhIGp1c3RydSBwcm90ZWt0aWYuIE5hbXVuLCBwLXZhbHVlID0gMC4wNzI4IG1lbnVuanVra2FuIHNpZ25pZmlrYW5zaSBtYXJnaW5hbCAoc2lnbmlmaWNhbnQgYXQgMTAlIGxldmVsLCB0ZXRhcGkgdGlkYWsgcGFkYSA1JSkuIERlbmdhbiBzYW1wZWwga2VjaWwgKG4gPSAyMCksIGtlbXVuZ2tpbmFuIGtldGVyYmF0YXNhbiBwb3dlciBjdWt1cCBiZXNhci4NCg0KIyMjIFdoaWNoIHZhcmlhYmxlcyBhcmUgc2lnbmlmaWNhbnQ/DQoNClBhZGEgdGluZ2thdCBzaWduaWZpa2Fuc2kgNSUgKM6xID0gMC4wNSk6DQoNCi0gdHJlYXRtZW50QiDihpIgdGlkYWsgc2lnbmlmaWthbiAocCA9IDAuMjgzMCkNCg0KLSBhZ2Ug4oaSIHRpZGFrIHNpZ25pZmlrYW4gcGFkYSA1JSwgdGV0YXBpIG1lbmRla2F0aSBzaWduaWZpa2FuIHBhZGEgMTAlIChwID0gMC4wNzI4KQ0KDQotIGdlbmRlck0g4oaSIHRpZGFrIHNpZ25pZmlrYW4gKHAgPSAwLjk2NTIpDQoNClNlY2FyYSBzaW11bHRhbiwgdWppIGdsb2JhbCBtb2RlbDoNCg0KLSBMaWtlbGlob29kIHJhdGlvIHRlc3QgcCA9IDAuMQ0KDQotIFdhbGQgdGVzdCBwID0gMC4yDQoNCi0gU2NvcmUgdGVzdCBwID0gMC4yDQoNClNlbXVhID4gMC4wNSwgc2VoaW5nZ2EgbW9kZWwgc2VjYXJhIGtlc2VsdXJ1aGFuIGJlbHVtIHNpZ25pZmlrYW4gcGFkYSBsZXZlbCA1JS4NCg0KSmFkaSwgdGlkYWsgYWRhIHZhcmlhYmVsIHlhbmcgc2lnbmlmaWthbiBzZWNhcmEgc3RhdGlzdGlrIHBhZGEgdGluZ2thdCA1JSwgbWVza2lwdW4gdXNpYSBtZW51bmp1a2thbiBrZWNlbmRlcnVuZ2FuIGVmZWsgcHJvdGVrdGlmIHlhbmcgYm9yZGVybGluZS4gRGVuZ2FuIHVrdXJhbiBzYW1wZWwgZGFuIGp1bWxhaCBldmVudCB5YW5nIHRlcmJhdGFzICgxMSBldmVudCksIGVzdGltYXNpIG1hc2loIG1lbWlsaWtpIHZhcmlhYmlsaXRhcyB5YW5nIHRpbmdnaSwgdGVyY2VybWluIGRhcmkgaW50ZXJ2YWwga2VwZXJjYXlhYW4geWFuZyBsZWJhciwga2h1c3VzbnlhIHBhZGEgdmFyaWFiZWwgdHJlYXRtZW50IGRhbiBnZW5kZXIuDQoNCiMgSU5EVVNUUlkgMiDigJMgTUFOVUZBQ1RVUklORw0KDQoqKk1hY2hpbmUgRmFpbHVyZSBBbmFseXNpcyoqDQoNCkJ1c2luZXNzIE9iamVjdGl2ZQ0KDQpEZXRlcm1pbmUgd2hldGhlciBQcmVtaXVtIG1hY2hpbmVzIGxhc3QgbG9uZ2VyIHRoYW4gU3RhbmRhcmQgbWFjaGluZXMuDQoNCiMjIFNURVAgMSDigJMgSW5wdXQgRGF0YXNldA0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89VFJVRX0NCm1hbnVmYWN0dXJpbmcgPC0gZGF0YS5mcmFtZSgNCmlkID0gcGFzdGUwKCJNIiwxOjIwKSwNCnR5cGUgPSBjKHJlcCgiU3RhbmRhcmQiLDEwKSwgcmVwKCJQcmVtaXVtIiwxMCkpLA0KdGltZSA9IGMoMjAwLDM1MCwxODAsMjYwLDMwMCwyMjAsMzEwLDE5MCwyODAsMzQwLA0KICAgICAgICAgNDAwLDMyMCw0MTAsMjkwLDM2MCwzMzAsNDIwLDMxMCwzOTAsMzA1KSwNCnN0YXR1cyA9IGMoMSwwLDEsMSwwLDEsMCwxLDEsMCwNCiAgICAgICAgICAgMCwxLDAsMSwwLDEsMCwxLDAsMSksDQp0ZW1wID0gYyg3NSw3Miw3OCw4MCw3NCw3Nyw3Myw3OSw3Niw3MiwNCiAgICAgICAgIDcwLDY4LDY5LDcxLDY3LDcyLDY2LDcwLDY4LDczKQ0KKQ0KYGBgDQoNCiMjIFNURVAgMiDigJMgQ3JlYXRlIFN1cnZpdmFsIE9iamVjdA0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89VFJVRX0NClN1cnZfbWFjaGluZSA8LSBTdXJ2KG1hbnVmYWN0dXJpbmckdGltZSwNCiAgICAgICAgICAgICAgICAgICAgIG1hbnVmYWN0dXJpbmckc3RhdHVzKQ0KYGBgDQoNCiMjIFNURVAgMyDigJMgS2FwbGFuLU1laWVyIEN1cnZlDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZWNobz1UUlVFfQ0Ka21fbWFjaGluZSA8LSBzdXJ2Zml0KFN1cnZfbWFjaGluZSB+IHR5cGUsDQogICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG1hbnVmYWN0dXJpbmcpDQoNCmdnc3VydnBsb3Qoa21fbWFjaGluZSwNCiAgICAgICAgICAgZGF0YSA9IG1hbnVmYWN0dXJpbmcsDQogICAgICAgICAgIHB2YWwgPSBUUlVFLA0KICAgICAgICAgICByaXNrLnRhYmxlID0gVFJVRSkNCmBgYA0KDQojIyMgV2hpY2ggbWFjaGluZSB0eXBlIGxhc3RzIGxvbmdlcj8NCg0KU2VjYXJhIHZpc3VhbCwga3VydmEgUHJlbWl1bSBiZXJhZGEgZGkgYXRhcyBrdXJ2YSBTdGFuZGFyZCBoYW1waXIgc2VwYW5qYW5nIHBlcmlvZGUgb2JzZXJ2YXNpLiBBcnRpbnlhLCBwYWRhIHdha3R1IHlhbmcgc2FtYSwgcHJvYmFiaWxpdGFzIG1lc2luIFByZW1pdW0gbWFzaWggYmVydGFoYW4gKGJlbHVtIGdhZ2FsKSBsZWJpaCB0aW5nZ2kgZGliYW5kaW5na2FuIG1lc2luIFN0YW5kYXJkLg0KDQpTZWxhaW4gaXR1LCBrZWdhZ2FsYW4gcGFkYSBtZXNpbiBTdGFuZGFyZCBtdWxhaSB0ZXJqYWRpIGxlYmloIGF3YWwgKHNla2l0YXIgMTgw4oCTMjAwIGphbSksIHNlbWVudGFyYSBQcmVtaXVtIG1lbnVuanVra2FuIHBlbnVydW5hbiBzdXJ2aXZhbCB5YW5nIGxlYmloIGxhbWJhdCBkYW4gdGVyamFkaSBwYWRhIHdha3R1IHlhbmcgcmVsYXRpZiBsZWJpaCB0aW5nZ2kuDQoNClNlY2FyYSBkZXNrcmlwdGlmOiBQcmVtaXVtIGxhc3RzIGxvbmdlciB0aGFuIFN0YW5kYXJkLg0KDQpOYW11biwgdWppIGxvZy1yYW5rIG1lbmdoYXNpbGthbiBwID0gMC4xNiwgeWFuZyBiZXJhcnRpIHBlcmJlZGFhbiB0ZXJzZWJ1dCB0aWRhayBzaWduaWZpa2FuIHNlY2FyYSBzdGF0aXN0aWsgcGFkYSDOsSA9IDAuMDUuDQoNCiMjIyBXaGF0IGlzIHN1cnZpdmFsIHByb2JhYmlsaXR5IGF0IDMwMCBob3Vycz8NCg0KQmVyZGFzYXJrYW4gZ3JhZmlrIHBhZGEgdCDiiYggMzAwIGphbToNCg0KLSBQcmVtaXVtOiBzdXJ2aXZhbCBwcm9iYWJpbGl0eSBzZWtpdGFyIDAuODDigJMwLjkwDQoNCi0gU3RhbmRhcmQ6IHN1cnZpdmFsIHByb2JhYmlsaXR5IHNla2l0YXIgMC40MA0KDQpNYWthLA0KDQotIFNla2l0YXIgODDigJM5MCUgbWVzaW4gUHJlbWl1bSBtYXNpaCBiZXJvcGVyYXNpIHBhZGEgMzAwIGphbS4NCg0KLSBIYW55YSBzZWtpdGFyIDQwJSBtZXNpbiBTdGFuZGFyZCB5YW5nIG1hc2loIGJlcm9wZXJhc2kgcGFkYSAzMDAgamFtLg0KDQpEYW4gZGFwYXQgZGlzaW1wdWxrYW4gYmFod2EgcGVyYmVkYWFuIGluaSBjdWt1cCBiZXNhciBzZWNhcmEgcHJha3Rpcy4NCg0KIyMjIERvZXMgUHJlbWl1bSBhcHBlYXIgbW9yZSByZWxpYWJsZT8NCg0KRGFyaSBwZXJzcGVrdGlmIHJlbGlhYmlsaXRhcyAocHJvYmFiaWxpdGFzIGJlcnRhaGFuIGxlYmloIHRpbmdnaSBkYW4gcGVudXJ1bmFuIGt1cnZhIGxlYmloIGxhbWJhdCk6DQoNCllhLCBQcmVtaXVtIHNlY2FyYSB2aXN1YWwgZGFuIHByYWt0aXMgdGFtcGFrIGxlYmloIHJlbGlhYmVsIGRpYmFuZGluZ2thbiBTdGFuZGFyZC4NCg0KTmFtdW4gc2VjYXJhIGluZmVyZW5zaWFsOg0KDQotIHAtdmFsdWUgPSAwLjE2ICg+IDAuMDUpDQoNCi0gVGlkYWsgYWRhIGJ1a3RpIHN0YXRpc3RpayB5YW5nIGN1a3VwIGt1YXQgdW50dWsgbWVueWF0YWthbiBwZXJiZWRhYW4gc2lnbmlmaWthbi4NCg0KUHJlbWl1bSBtZW51bmp1a2thbiBpbmRpa2FzaSByZWxpYWJpbGl0YXMgeWFuZyBsZWJpaCBiYWlrIHNlY2FyYSBwcmFrdGlzLCB0ZXRhcGkgZGVuZ2FuIHVrdXJhbiBzYW1wZWwga2VjaWwgKG49MjApLCBidWt0aSBzdGF0aXN0aWtueWEgYmVsdW0gY3VrdXAga3VhdCB1bnR1ayBtZW55YXRha2FuIHN1cGVyaW9yaXR5IHNlY2FyYSBzaWduaWZpa2FuLg0KDQpBcnRpbnlhLCBkYXJpIHNpc2kgYmlzbmlzLCBhZGEgc2lueWFsIHBvc2l0aWYgdW50dWsgUHJlbWl1bSwgdGV0YXBpIGtlcHV0dXNhbiBpbnZlc3Rhc2kgc2thbGEgYmVzYXIgc2ViYWlrbnlhIGRpa29uZmlybWFzaSBkZW5nYW4gZGF0YSB0YW1iYWhhbiBhdGF1IHBlcmlvZGUgb2JzZXJ2YXNpIGxlYmloIHBhbmphbmcuDQoNCiMjIFNURVAgNCDigJMgQ294IE1vZGVsDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZWNobz1UUlVFfQ0KY294X21hY2hpbmUgPC0gY294cGgoU3Vydl9tYWNoaW5lIH4gdHlwZSArIHRlbXAsDQogICAgICAgICAgICAgICAgICAgICBkYXRhID0gbWFudWZhY3R1cmluZykNCg0Kc3VtbWFyeShjb3hfbWFjaGluZSkNCmBgYA0KDQojIyMgSW50ZXJwcmV0IEhhemFyZCBSYXRpbyBmb3IgUHJlbWl1bS4NCg0KUGFkYSBvdXRwdXQgdGVydHVsaXMgdHlwZVN0YW5kYXJkLCBhcnRpbnlhIFByZW1pdW0gYWRhbGFoIGthdGVnb3JpIHJlZmVyZW5zaS4NCg0KTmlsYWk6DQoNCi0gSFIgKFN0YW5kYXJkIHZzIFByZW1pdW0pID0gMC4yNDQNCg0KLSA5NSUgQ0kgPSAoMC4wMzggOyAxLjU2MSkNCg0KLSBwID0gMC4xMzYNCg0KTWFrYSxtZXNpbiBTdGFuZGFyZCBtZW1pbGlraSBoYXphcmQgaGFueWEgMC4yNDQga2FsaSBkaWJhbmRpbmcgUHJlbWl1bSAoc2V0ZWxhaCBtZW5nb250cm9sIHN1aHUpLg0KDQokJA0KSFJfUHJlbWl1biA9IFxmcmFjezF9ezAuMjQ0fSDiiYggNC4xMA0KJCQNCg0KDQpBcnRpbnlhOg0KDQpEZW5nYW4gc3VodSB5YW5nIHNhbWEsIG1lc2luIFByZW1pdW0gbWVtaWxpa2kgcmlzaWtvIGtlZ2FnYWxhbiBzZWtpdGFyIDQga2FsaSBsZWJpaCB0aW5nZ2kgZGliYW5kaW5nIG1lc2luIFN0YW5kYXJkLg0KDQpTZWNhcmEgYXJhaCBlZmVrLCBpbmkgYmVydGVudGFuZ2FuIGRlbmdhbiBoYXNpbCBkZXNrcmlwdGlmIEthcGxhbi1NZWllciBzZWJlbHVtbnlhLiBOYW11biBzZWNhcmEgc3RhdGlzdGlrOg0KDQotIHAtdmFsdWUgPSAwLjEzNiAoPiAwLjA1KQ0KDQotIEludGVydmFsIGtlcGVyY2F5YWFuIG1lbmNha3VwIDENCg0KU2VoaW5nZ2EgcGVyYmVkYWFuIHRpcGUgbWVzaW4gdGlkYWsgc2lnbmlmaWthbiBzZWNhcmEgc3RhdGlzdGlrIHNldGVsYWggbWVuZ29udHJvbCBzdWh1LiBJbmkgbWVudW5qdWtrYW4gYmFod2EgdmFyaWFiZWwgc3VodSBrZW11bmdraW5hbiBtZW5qYWRpIGZha3RvciBkb21pbmFuIHlhbmcgbWVuamVsYXNrYW4gcGVyYmVkYWFuIHJlbGlhYmlsaXRhcy4NCg0KIyMjIERvZXMgaGlnaGVyIHRlbXBlcmF0dXJlIGluY3JlYXNlIGZhaWx1cmUgcmlzaz8NCg0KVW50dWsgdmFyaWFiZWwgdGVtcDoNCg0KLSBIUiA9IDEuNzI3NQ0KDQotIDk1JSBDSSA9ICgxLjI4NSA7IDIuMzIzKQ0KDQotIHAgPSAwLjAwMDI5NCAoc2FuZ2F0IHNpZ25pZmlrYW4pDQoNClNldGlhcCBrZW5haWthbiAxIHVuaXQgc3VodSBtZW5pbmdrYXRrYW4gcmlzaWtvIGtlZ2FnYWxhbiBzZWJlc2FyOg0KDQokJA0KKDEuNzI3NSAtIDEpIFx0aW1lcyAxMDBcJSDiiYggNzIuN1wlDQokJA0KDQpLYXJlbmE6DQoNCi0gSFIgPiAxDQoNCi0gQ0kgdGlkYWsgbWVuY2FrdXAgMQ0KDQotIHAgPCAwLjAwMQ0KDQpNYWthLCBzdWh1IHlhbmcgbGViaWggdGluZ2dpIHNlY2FyYSBzaWduaWZpa2FuIG1lbmluZ2thdGthbiByaXNpa28ga2VnYWdhbGFuIG1lc2luLiBJbmkgYWRhbGFoIGVmZWsgeWFuZyBrdWF0IGRhbiBrb25zaXN0ZW4uDQoNCiMjIyBXaGF0IGlzIHRoZSBtYW5hZ2VyaWFsIGltcGxpY2F0aW9uPw0KDQpEYXJpIHBlcnNwZWt0aWYgcGVuZ2FtYmlsYW4ga2VwdXR1c2FuIGluZHVzdHJpOg0KDQoqKmEpIEZha3RvciBkb21pbmFuIGFkYWxhaCBzdWh1IG9wZXJhc2lvbmFsKioNCg0KU3VodSBtZW1pbGlraSBwZW5nYXJ1aCBiZXNhciBkYW4gc2lnbmlmaWthbiB0ZXJoYWRhcCByaXNpa28ga2VnYWdhbGFuLiBBcnRpbnlhOg0KDQotIFBlbmdlbmRhbGlhbiBzdWh1IGxlYmloIGtyaXRpcyBkaWJhbmRpbmcgcGVtaWxpaGFuIHRpcGUgbWVzaW4uDQoNCi0gSW52ZXN0YXNpIHBhZGEgc2lzdGVtIGNvb2xpbmcgYXRhdSBrb250cm9sIGxpbmdrdW5nYW4gcHJvZHVrc2kgZGFwYXQgbWVtYmVyaWthbiBkYW1wYWsgcmVsaWFiaWxpdGFzIHlhbmcgbGViaWggYmVzYXIuDQoNCioqYikgVGlwZSBtZXNpbiBidWthbiBkZXRlcm1pbmFuIHV0YW1hIChzZXRlbGFoIGtvbnRyb2wgc3VodSkqKg0KDQpNZXNraXB1biBzZWNhcmEgdmlzdWFsIFByZW1pdW0gdGFtcGFrIGxlYmloIHRhaGFuIGxhbWEsIHNldGVsYWggZGlrb250cm9sIG9sZWggc3VodSwgcGVyYmVkYWFubnlhIHRpZGFrIHNpZ25pZmlrYW4uDQoNCkluaSBtZW5naW5kaWthc2lrYW4ga2VtdW5na2luYW46DQoNCi0gUHJlbWl1bSBtdW5na2luIGJlcm9wZXJhc2kgcGFkYSBzdWh1IGJlcmJlZGEgZGFsYW0gZGF0YSBtZW50YWguDQoNCi0gRWZlayB0aXBlIG1lc2luIHNlYmFnaWFuIGRpamVsYXNrYW4gb2xlaCB2YXJpYWJlbCB0ZW1wZXJhdHVyLg0KDQoqKmMpIFN0cmF0ZWdpIGJlcmJhc2lzIGRhdGEqKg0KDQpJbXBsaWthc2kgcHJha3RpcyB5YW5nIHJhc2lvbmFsOg0KDQoxLiBQcmlvcml0YXNrYW4ga29udHJvbCBzdWh1IHNlYmFnYWkgc3RyYXRlZ2kgbWl0aWdhc2kgcmlzaWtvIGtlZ2FnYWxhbi4NCg0KMi4gRXZhbHVhc2kgdWxhbmcgcG9zaXRpb25pbmcgcHJvZHVrIFByZW1pdW0g4oCUIGFwYWthaCBiZW5hciBtZW5hd2Fya2FuIGR1cmFiaWxpdHkgcHJlbWl1bSwgYXRhdSBoYW55YSBzZW5zaXRpZiB0ZXJoYWRhcCBrb25kaXNpIG9wZXJhc2lvbmFsLg0KDQozLiBMYWt1a2FuIHN0dWRpIGxhbmp1dGFuIGRlbmdhbiBzYW1wZWwgbGViaWggYmVzYXIgdW50dWsgbWVtYXN0aWthbiBlZmVrIHRpcGUgbWVzaW4uDQoNCktlc2ltcHVsYW46DQoNCkRhbGFtIGtvbnRla3MgbWFudWZha3R1ciBpbmksIHJlbGlhYmlsaXR5IGxlYmloIGRpcGVuZ2FydWhpIG9sZWgga29uZGlzaSBvcGVyYXNpb25hbCAodGVtcGVyYXR1cmUpIGRpYmFuZGluZ2thbiBzcGVzaWZpa2FzaSBwcm9kdWsgKG1hY2hpbmUgdHlwZSkuIFBlbmdlbmRhbGlhbiBsaW5na3VuZ2FuIHByb2R1a3NpIG1lbWJlcmlrYW4gUk9JIHlhbmcgbGViaWggamVsYXMgZGliYW5kaW5nIHNla2FkYXIgdXBncmFkZSB0aXBlIG1lc2luLg0KDQojIElORFVTVFJZIDMg4oCTIENVU1RPTUVSIEFOQUxZVElDUw0KDQoqKlRpbWUgdG8gQ3VzdG9tZXIgQ2h1cm4qKg0KDQpCdXNpbmVzcyBPYmplY3RpdmUNCg0KRXZhbHVhdGUgcmV0ZW50aW9uIGRpZmZlcmVuY2VzIGJldHdlZW4gQmFzaWMgYW5kIFBybyBzdWJzY3JpcHRpb24gcGxhbnMuDQoNCiMjIFNURVAgMSDigJMgSW5wdXQgRGF0YXNldA0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89VFJVRX0NCmN1c3RvbWVyIDwtIGRhdGEuZnJhbWUoDQppZCA9IHBhc3RlMCgiQyIsMToyMCksDQpwbGFuID0gYyhyZXAoIkJhc2ljIiwxMCksIHJlcCgiUHJvIiwxMCkpLA0KdGVudXJlID0gYygzLDgsNSw2LDksNCw3LDEwLDIsMTEsDQogICAgICAgICAgIDEwLDYsMTIsOCwxNCw3LDE1LDksMTMsMTYpLA0KY2h1cm4gPSBjKDEsMCwxLDEsMCwxLDEsMCwxLDAsDQogICAgICAgICAgMCwxLDAsMSwwLDEsMCwxLDAsMCksDQpmZWUgPSBjKHJlcCgyMCwxMCksIHJlcCgzNSwxMCkpLA0Kc3VwcG9ydF9jYWxscyA9IGMoNSwyLDQsMywxLDYsMywyLDcsMSwNCiAgICAgICAgICAgICAgICAgIDEsMiwwLDIsMSwzLDAsMiwxLDApDQopDQpgYGANCg0KIyMgU1RFUCAyIOKAkyBDcmVhdGUgU3Vydml2YWwgT2JqZWN0DQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZWNobz1UUlVFfQ0KU3Vydl9jdXN0b21lciA8LSBTdXJ2KGN1c3RvbWVyJHRlbnVyZSwNCiAgICAgICAgICAgICAgICAgICAgICBjdXN0b21lciRjaHVybikNCmBgYA0KDQojIyBTVEVQIDMg4oCTIEthcGxhbi1NZWllciBDdXJ2ZQ0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89VFJVRX0NCmttX2N1c3RvbWVyIDwtIHN1cnZmaXQoU3Vydl9jdXN0b21lciB+IHBsYW4sDQogICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBjdXN0b21lcikNCg0KZ2dzdXJ2cGxvdChrbV9jdXN0b21lciwNCiAgICAgICAgICAgZGF0YSA9IGN1c3RvbWVyLA0KICAgICAgICAgICBwdmFsID0gVFJVRSwNCiAgICAgICAgICAgcmlzay50YWJsZSA9IFRSVUUpDQpgYGANCg0KIyMjIFdoaWNoIHBsYW4gc2hvd3MgYmV0dGVyIHJldGVudGlvbj8NCg0KS3VydmEgS2FwbGFu4oCTTWVpZXIgbWVudW5qdWtrYW4gYmFod2EgcGVsYW5nZ2FuIFBybyBtZW1pbGlraSBwcm9iYWJpbGl0YXMgYmVydGFoYW4geWFuZyBsZWJpaCB0aW5nZ2kgZGliYW5kaW5na2FuIHBlbGFuZ2dhbiBCYXNpYyBzZXBhbmphbmcgcGVyaW9kZSBvYnNlcnZhc2kuIFBlbnVydW5hbiBzdXJ2aXZhbCBwYWRhIEJhc2ljIHRlcmphZGkgbGViaWggY2VwYXQsIHlhbmcgYmVyYXJ0aSBjaHVybiB0ZXJqYWRpIGxlYmloIGRpbmkgcGFkYSBzZWdtZW4gdGVyc2VidXQuDQoNCkRhbGFtIGtvbnRla3MgcmV0ZW5zaSBwZWxhbmdnYW46DQoNClBsYW4gUHJvIG1lbnVuanVra2FuIHBlcmZvcm1hIHJldGVuc2kgeWFuZyBsZWJpaCBiYWlrLCBrYXJlbmEgcGVsYW5nZ2FuIGNlbmRlcnVuZyBiZXJ0YWhhbiBsZWJpaCBsYW1hIHNlYmVsdW0gY2h1cm4uIEluaSBtZW5naW5kaWthc2lrYW4gYmFod2EgcGVsYW5nZ2FuIGRlbmdhbiBwYWtldCBQcm8gbWVtaWxpa2kgY3VzdG9tZXIgbGlmZXRpbWUgeWFuZyByZWxhdGlmIGxlYmloIHBhbmphbmcuDQoNCiMjIyBXaGF0IGlzIHRoZSBwcm9iYWJpbGl0eSBvZiBzdXJ2aXZpbmcg4omlIDYgbW9udGhzPw0KDQpEYXJpIGVzdGltYXNpIGt1cnZhIHBhZGEgYnVsYW4ga2UtNjoNCg0KLSBCYXNpYyDiiYggNTAlDQoNCi0gUHJvIOKJiCA4MCUNCg0KQXJ0aW55YToNCg0KLSBIYW55YSBzZWtpdGFyIHNlcGFydWggcGVsYW5nZ2FuIEJhc2ljIHlhbmcgbWFzaWggYWt0aWYgc2V0ZWxhaCA2IGJ1bGFuLg0KDQotIFNla2l0YXIgZGVsYXBhbiBkYXJpIHNlcHVsdWggcGVsYW5nZ2FuIFBybyBtYXNpaCBiZXJ0YWhhbiBwYWRhIHBlcmlvZGUgeWFuZyBzYW1hLg0KDQpEYWxhbSBhbmFsaXNpcyBjaHVybiwgaW5pIG1lbnVuanVra2FuIGJhaHdhIHJpc2lrbyBrZWhpbGFuZ2FuIHBlbGFuZ2dhbiBkYWxhbSA2IGJ1bGFuIHBlcnRhbWEgamF1aCBsZWJpaCB0aW5nZ2kgcGFkYSBzZWdtZW4gQmFzaWMuDQoNCiMjIyBJcyB0aGUgZGlmZmVyZW5jZSBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50Pw0KDQpOaWxhaSBwIGRhcmkgdWppIGxvZy1yYW5rIGFkYWxhaCAwLjE3Lg0KDQpLYXJlbmEgcCA+IDAuMDUsIG1ha2Egc2VjYXJhIHN0YXRpc3RpayB0aWRhayB0ZXJkYXBhdCBidWt0aSB5YW5nIGN1a3VwIGt1YXQgdW50dWsgbWVueWltcHVsa2FuIGJhaHdhIHBlcmJlZGFhbiByZXRlbnNpIGFudGFyYSBCYXNpYyBkYW4gUHJvIHNpZ25pZmlrYW4gcGFkYSB0aW5na2F0IGtlcGVyY2F5YWFuIDk1JS4NCg0KTmFtdW4sIHNlY2FyYSBwcmFrdGlzIHRlcmRhcGF0IGdhcCByZXRlbnNpIHlhbmcgY3VrdXAgYmVzYXIuIERlbmdhbiB1a3VyYW4gc2FtcGVsIHlhbmcga2VjaWwgKDIwIHBlbGFuZ2dhbiksIGtlbXVuZ2tpbmFuIGtldGVyYmF0YXNhbiBzdGF0aXN0aWNhbCBwb3dlciBjdWt1cCB0aW5nZ2kuDQoNCiMjIFNURVAgNCDigJMgQ294IE1vZGVsDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZWNobz1UUlVFfQ0KY294X2N1c3RvbWVyIDwtIGNveHBoKFN1cnZfY3VzdG9tZXIgfiBwbGFuICsNCiAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0X2NhbGxzICsgZmVlLA0KICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBjdXN0b21lcikNCg0Kc3VtbWFyeShjb3hfY3VzdG9tZXIpDQpgYGANCg0KIyMjIEludGVycHJldCBIYXphcmQgUmF0aW8gZm9yIFBybyBwbGFuLg0KDQpVbnR1ayB2YXJpYWJlbCBwbGFuUHJvOg0KDQotIEhSID0gMS45NQ0KDQotIDk1JSBDSSA9ICgwLjM5IDsgOS43OCkNCg0KLSBwID0gMC40MTYNCg0KRGVuZ2FuIGp1bWxhaCBzdXBwb3J0IGNhbGxzIGRhbiBmZWUgeWFuZyBzYW1hLCBwZWxhbmdnYW4gUHJvIG1lbWlsaWtpIHJpc2lrbyBjaHVybiBzZWtpdGFyIDEuOTUga2FsaSBsZWJpaCB0aW5nZ2kgZGliYW5kaW5nIEJhc2ljIChrYXJlbmEgQmFzaWMgbWVuamFkaSByZWZlcmVuc2kpLg0KDQpOYW11bjoNCg0KLSBJbnRlcnZhbCBrZXBlcmNheWFhbiBzYW5nYXQgbGViYXIgZGFuIG1lbmNha3VwIDENCg0KLSBwLXZhbHVlID4gMC4wNQ0KDQpBcnRpbnlhLCBlZmVrIHBsYW4gdGlkYWsgc2lnbmlmaWthbiBzZWNhcmEgc3RhdGlzdGlrIHNldGVsYWggbWVuZ29udHJvbCB2YXJpYWJlbCBsYWluLiBQZXJiZWRhYW4gcmV0ZW5zaSB5YW5nIHRlcmxpaGF0IHBhZGEgS2FwbGFu4oCTTWVpZXIgdGFtcGFrbnlhIGJ1a2FuIHNlbWF0YS1tYXRhIGRpc2ViYWJrYW4gb2xlaCBqZW5pcyBwbGFuLCBtZWxhaW5rYW4gb2xlaCB2YXJpYWJlbCBsYWluIGRhbGFtIG1vZGVsLg0KDQojIyMgRG8gc3VwcG9ydCBjYWxscyBpbmNyZWFzZSBjaHVybiByaXNrPw0KDQpVbnR1ayB2YXJpYWJlbCBzdXBwb3J0X2NhbGxzOg0KDQotIEhSID0gMTAuMDANCg0KLSA5NSUgQ0kgPSAoMi40OSA7IDQwLjE2KQ0KDQotIHAgPSAwLjAwMTE2DQoNClNldGlhcCB0YW1iYWhhbiAxIHN1cHBvcnQgY2FsbCBtZW5pbmdrYXRrYW4gcmlzaWtvIGNodXJuIHNla2l0YXIgMTAga2FsaSBsaXBhdCwgZGVuZ2FuIGVmZWsgeWFuZyBzYW5nYXQgc2lnbmlmaWthbiBzZWNhcmEgc3RhdGlzdGlrLg0KDQpLYXJlbmE6DQoNCi0gSFIgamF1aCA+IDENCg0KLSBDSSB0aWRhayBtZW5jYWt1cCAxDQoNCi0gcCA8IDAuMDENCg0KTWFrYSBzZWNhcmEgZW1waXJpcywgZnJla3VlbnNpIGludGVyYWtzaSBkZW5nYW4gc3VwcG9ydCBtZXJ1cGFrYW4gcHJlZGlrdG9yIGt1YXQgY2h1cm4uIERhbGFtIGtvbnRla3MgY3VzdG9tZXIgYW5hbHl0aWNzLCBpbmkgbWVuZ2luZGlrYXNpa2FuIGJhaHdhIHRpbmdnaW55YSBzdXBwb3J0IGNhbGxzIGtlbXVuZ2tpbmFuIG1lcmVmbGVrc2lrYW4ga2V0aWRha3B1YXNhbiwgZnJpa3NpIHBlbmdndW5hYW4sIGF0YXUgc2VydmljZSBmYWlsdXJlLg0KDQojIyMgV2hhdCByZXRlbnRpb24gc3RyYXRlZ3kgY2FuIGJlIGRlcml2ZWQ/DQoNCkJlcmRhc2Fya2FuIG1vZGVsIGluaSwgc3RyYXRlZ2kgcmV0ZW5zaSBzZWJhaWtueWEgYmVyZm9rdXMgcGFkYSBleHBlcmllbmNlIG1hbmFnZW1lbnQsIGJ1a2FuIHNla2FkYXIgZGlmZXJlbnNpYXNpIHBsYW4uDQoNCioqYSkgRWFybHkgV2FybmluZyBTeXN0ZW0qKg0KDQpTdXBwb3J0IGNhbGxzIGRhcGF0IGRpZ3VuYWthbiBzZWJhZ2FpIHZhcmlhYmVsIGNodXJuIHRyaWdnZXIuIFBlbGFuZ2dhbiBkZW5nYW4gPjLigJMzIHN1cHBvcnQgY2FsbHMgZGFsYW0gcGVyaW9kZSB0ZXJ0ZW50dSBkYXBhdCBkaWthdGVnb3Jpa2FuIHNlYmFnYWkgaGlnaC1yaXNrIGRhbiBkaWJlcmkgaW50ZXJ2ZW5zaSBwcm9ha3RpZi4NCg0KKipiKSBSb290IENhdXNlIEFuYWx5c2lzKioNCg0KS2FyZW5hIGVmZWsgc3VwcG9ydF9jYWxscyBzYW5nYXQgYmVzYXIsIHBlcmx1IGRpYW5hbGlzaXM6DQoNCi0gSmVuaXMga2VsdWhhbiB5YW5nIHBhbGluZyBzZXJpbmcgbXVuY3VsDQoNCi0gV2FrdHUgcmVzcG9uIHN1cHBvcnQNCg0KLSBSZXNvbHV0aW9uIHRpbWUgZGFuIHNhdGlzZmFjdGlvbiBzY29yZQ0KDQpUdWp1YW5ueWEgYWRhbGFoIG1lbnVydW5rYW4gdm9sdW1lIGRhbiBmcmVrdWVuc2kgZXNrYWxhc2kuDQoNCioqYykgUXVhbGl0eSBvdmVyIFByaWNpbmcqKg0KDQpWYXJpYWJlbCBmZWUgdGlkYWsgdGVyZXN0aW1hc2kgKE5BKSwga2VtdW5na2luYW4ga2FyZW5hIGtvbGluZWFyaXRhcyBzZW1wdXJuYSBkZW5nYW4gcGxhbiAoQmFzaWMgPSAyMCwgUHJvID0gMzUpLiBJbmkgbWVudW5qdWtrYW4gYmFod2EgaGFyZ2EgdGlkYWsgZGFwYXQgZGlwaXNhaGthbiBkYXJpIGplbmlzIHBsYW4gZGFsYW0gZGF0YXNldCBpbmkuDQoNCkltcGxpa2FzaW55YToNClJldGVuc2kgdGlkYWsgY3VrdXAgZGlqZWxhc2thbiBvbGVoIGhhcmdhIGF0YXUgdGlwZSBwYWtldCBzYWphOyBrdWFsaXRhcyBwZW5nYWxhbWFuIHBlbGFuZ2dhbiBtZW5qYWRpIGZha3RvciBkb21pbmFuLg0KDQojIENSSVRJQ0FMIEFOQUxZU0lTIChSRVFVSVJFRCkNCg0KIyMgSU5EVVNUUlkgMSDigJMgSEVBTFRIQ0FSRSAoVGltZSB0byBSZWxhcHNlKQ0KDQoqKjEuIFdoYXQgZG9lcyBjZW5zb3JpbmcgcmVwcmVzZW50PyoqDQoNCkNlbnNvcmluZyBtZXJlcHJlc2VudGFzaWthbiBwYXNpZW4geWFuZyBiZWx1bSBtZW5nYWxhbWkgcmVsYXBzZSBoaW5nZ2EgYWtoaXIgcGVyaW9kZSBvYnNlcnZhc2kgYXRhdSBoaWxhbmcgZGFyaSBmb2xsb3ctdXAuIEFydGlueWEsIGtpdGEgaGFueWEgbWVuZ2V0YWh1aSBiYWh3YSB3YWt0dSBiZWJhcyByZWxhcHNlIOKJpSB3YWt0dSB0ZXJha2hpciBvYnNlcnZhc2ksIHRldGFwaSB0aWRhayBtZW5nZXRhaHVpIHdha3R1IGtlamFkaWFuIHNlYmVuYXJueWEuDQoNCioqMi4gV2h5IGlzIHRoZSBhdmVyYWdlIHRpbWUgaW5zdWZmaWNpZW50PyoqDQoNClJhdGEtcmF0YSB3YWt0dSByZWxhcHNlIHRpZGFrIG1lbXBlcnRpbWJhbmdrYW46DQoNCi0gUGFzaWVuIHlhbmcgYmVsdW0gcmVsYXBzZSAoY2Vuc29yZWQgZGF0YSkNCg0KLSBEaXN0cmlidXNpIHdha3R1IGtlamFkaWFuIHlhbmcgYmlhc2FueWEgdGlkYWsgc2ltZXRyaXMNCg0KLSBJbmZvcm1hc2kgdGVudGFuZyB0aW1pbmcgb2Ygcmlzaw0KDQpNZW5nZ3VuYWthbiBtZWFuIGFrYW4gYmlhcyBrYXJlbmEgcGFzaWVuIHlhbmcgdGlkYWsgcmVsYXBzZSBha2FuIGRpcGVybGFrdWthbiBzZW9sYWgtb2xhaCBtZW1pbGlraSB3YWt0dSByZWxhcHNlIHBhc3RpLCBwYWRhaGFsIHNlYmVuYXJueWEgYmVsdW0gdGVyamFkaS4NCg0KKiozLiBXaGF0IHN0cmF0ZWdpYyBkZWNpc2lvbiBjYW4gbWFuYWdlbWVudCBtYWtlPyoqDQoNCk1hbmFqZW1lbiBydW1haCBzYWtpdCBhdGF1IGtsaW5payBkYXBhdDoNCg0KLSBNZW5naWRlbnRpZmlrYXNpIHRlcmFwaSBkZW5nYW4gaGF6YXJkIGxlYmloIHJlbmRhaA0KDQotIE1lbmRlc2FpbiBtb25pdG9yaW5nIGludGVuc2lmIHBhZGEgcGVyaW9kZSByaXNpa28gdGluZ2dpDQoNCi0gTWVuZ2Fsb2thc2lrYW4gc3VtYmVyIGRheWEgcGFkYSBwcm90b2tvbCB5YW5nIG1lbnVydW5rYW4gaGF6YXJkIHJlbGFwc2UNCg0KS2VwdXR1c2FuIGJlcmJhc2lzIGhhemFyZCByYXRpbyBsZWJpaCBpbmZvcm1hdGlmIGRhcmlwYWRhIHNla2FkYXIgcmF0YS1yYXRhIGR1cmFzaS4NCg0KKio0LiBXaGF0IHdvdWxkIGhhcHBlbiBpZiB3ZSB1c2VkIGxpbmVhciByZWdyZXNzaW9uIGluc3RlYWQ/KioNCg0KTGluZWFyIHJlZ3Jlc3Npb246DQoNCi0gTWVuZ2FiYWlrYW4gY2Vuc29yaW5nDQoNCi0gTWVuZ2FzdW1zaWthbiBkaXN0cmlidXNpIG5vcm1hbCByZXNpZHVhbA0KDQotIEJpc2EgbWVuZ2hhc2lsa2FuIHByZWRpa3NpIHdha3R1IG5lZ2F0aWYNCg0KLSBUaWRhayBtZW1vZGVsa2FuIHJpc2lrbyBrZWphZGlhbiBwZXIgdW5pdCB3YWt0dQ0KDQpIYXNpbG55YSBiaWFzIGRhbiB0aWRhayBzZXN1YWkgdW50dWsgZGF0YSB0aW1lLXRvLWV2ZW50Lg0KDQojIyBJTkRVU1RSWSAyIOKAkyBNQU5VRkFDVFVSSU5HIChUaW1lIHRvIE1hY2hpbmUgRmFpbHVyZSkNCg0KKioxLiBXaGF0IGRvZXMgY2Vuc29yaW5nIHJlcHJlc2VudD8qKg0KDQpDZW5zb3JpbmcgYmVyYXJ0aSBtZXNpbiBiZWx1bSBnYWdhbCBzYW1wYWkgYWtoaXIgcGVyaW9kZSBwZW5nYW1hdGFuLiBNZXNpbiB0ZXJzZWJ1dCBtYXNpaCBiZXJvcGVyYXNpIHNhYXQgc3R1ZGkgc2VsZXNhaS4NCg0KKioyLiBXaHkgaXMgdGhlIGF2ZXJhZ2UgdGltZSBpbnN1ZmZpY2llbnQ/KioNCg0KUmF0YS1yYXRhIHdha3R1IGtlZ2FnYWxhbjoNCg0KLSBUaWRhayBtZW1wZXJ0aW1iYW5na2FuIG1lc2luIHlhbmcgYmVsdW0gZ2FnYWwNCg0KLSBUaWRhayBtZW5nZ2FtYmFya2FuIHBlcnViYWhhbiByaXNpa28gc2VpcmluZyB3YWt0dQ0KDQotIE1lbmdhYmFpa2FuIGhhemFyZCBkaW5hbWlzIGFraWJhdCBrb25kaXNpIG9wZXJhc2lvbmFsIChtaXNhbG55YSBzdWh1KQ0KDQpSZWxpYWJpbGl0eSBhbmFseXNpcyBtZW1lcmx1a2FuIGVzdGltYXNpIHN1cnZpdmFsIGZ1bmN0aW9uLCBidWthbiBoYW55YSBtZWFuIHRpbWUgdG8gZmFpbHVyZS4NCg0KKiozLiBXaGF0IHN0cmF0ZWdpYyBkZWNpc2lvbiBjYW4gbWFuYWdlbWVudCBtYWtlPyoqDQoNCk1hbmFqZW1lbiBkYXBhdDoNCg0KLSBNZW5nb250cm9sIHN1aHUgb3BlcmFzaW9uYWwga2FyZW5hIHRlcmJ1a3RpIG1lbmluZ2thdGthbiBoYXphcmQNCg0KLSBNZW5kZXNhaW4gcHJldmVudGl2ZSBtYWludGVuYW5jZSBiZXJiYXNpcyBoYXphcmQNCg0KLSBNZW5nZXZhbHVhc2kga2xhaW0gZHVyYWJpbGl0eSBhbnRhciB0aXBlIG1lc2luIHNlY2FyYSBiZXJiYXNpcyBkYXRhDQoNCkZva3VzIHN0cmF0ZWdpcyBiZXJnZXNlciBkYXJpIHNwZXNpZmlrYXNpIHByb2R1ayBrZSBrb25kaXNpIG9wZXJhc2lvbmFsLg0KDQoqKjQuIFdoYXQgd291bGQgaGFwcGVuIGlmIHdlIHVzZWQgbGluZWFyIHJlZ3Jlc3Npb24gaW5zdGVhZD8qKg0KDQpMaW5lYXIgcmVncmVzc2lvbiBha2FuOg0KDQotIE1lbXBlcmxha3VrYW4gbWVzaW4geWFuZyBiZWx1bSBnYWdhbCBzZW9sYWggbWVtaWxpa2kgd2FrdHUga2VnYWdhbGFuIHBhc3RpDQoNCi0gTWVuZ2FiYWlrYW4gc3RydWt0dXIgaGF6YXJkDQoNCi0gTWVuZ2hhc2lsa2FuIGVzdGltYXNpIHlhbmcgYmlhcyB0ZXJoYWRhcCBkdXJhYmlsaXR5DQoNCk1vZGVsIHRpZGFrIGFrYW4gbWFtcHUgbWVuYW5na2FwIHByb2JhYmlsaXRhcyBzdXJ2aXZhbCBwYWRhIHdha3R1IHRlcnRlbnR1Lg0KDQojIyBJTkRVU1RSWSAzIOKAkyBDVVNUT01FUiBBTkFMWVRJQ1MgKFRpbWUgdG8gQ2h1cm4pDQoNCioqMS4gV2hhdCBkb2VzIGNlbnNvcmluZyByZXByZXNlbnQ/KioNCg0KQ2Vuc29yaW5nIGJlcmFydGkgcGVsYW5nZ2FuIG1hc2loIGFrdGlmIGhpbmdnYSBha2hpciBwZXJpb2RlIG9ic2VydmFzaS4gS2l0YSB0aWRhayBtZW5nZXRhaHVpIGthcGFuIG1lcmVrYSBha2FuIGNodXJuLCBoYW55YSBiYWh3YSBjaHVybiBiZWx1bSB0ZXJqYWRpLg0KDQoqKjIuIFdoeSBpcyB0aGUgYXZlcmFnZSB0aW1lIGluc3VmZmljaWVudD8qKg0KDQpSYXRhLXJhdGEgdGVudXJlOg0KDQotIFRpZGFrIG1lbXBlcnRpbWJhbmdrYW4gcGVsYW5nZ2FuIGFrdGlmDQoNCi0gVGlkYWsgbWVuYW5na2FwIHBlcmlvZGUga3JpdGlzIGNodXJuIChtaXNhbCBidWxhbiAz4oCTNikNCg0KLSBUaWRhayBtZW5nZXN0aW1hc2kgcmlzaWtvIGNodXJuIHBlciB1bml0IHdha3R1DQoNCkRhbGFtIGNodXJuIGFuYWx5c2lzLCB0aW1pbmcgc2FuZ2F0IGtydXNpYWw7IGhhemFyZCByYXRlIGxlYmloIGluZm9ybWF0aWYgZGliYW5kaW5nIG1lYW4gdGVudXJlLg0KDQoqKjMuIFdoYXQgc3RyYXRlZ2ljIGRlY2lzaW9uIGNhbiBtYW5hZ2VtZW50IG1ha2U/KioNCg0KTWFuYWplbWVuIGRhcGF0Og0KDQotIE1lbmdndW5ha2FuIHN1cHBvcnQgY2FsbHMgc2ViYWdhaSBlYXJseSB3YXJuaW5nIGNodXJuIHNpZ25hbA0KDQotIE1lbmRlc2FpbiBpbnRlcnZlbnNpIHJldGVuc2kgcGFkYSBwZXJpb2RlIHJpc2lrbyB0aW5nZ2kNCg0KLSBNZW5nb3B0aW1hbGthbiBjdXN0b21lciBleHBlcmllbmNlLCBidWthbiBoYW55YSBwcmljaW5nIHBsYW4NCg0KU3RyYXRlZ2kgcmV0ZW5zaSBoYXJ1cyBiZXJiYXNpcyByaXNrIHByb2ZpbGluZywgYnVrYW4gaGFueWEgc2VnbWVudGFzaSBzdGF0aXMuDQoNCioqNC4gV2hhdCB3b3VsZCBoYXBwZW4gaWYgd2UgdXNlZCBsaW5lYXIgcmVncmVzc2lvbiBpbnN0ZWFkPyoqDQoNCkxpbmVhciByZWdyZXNzaW9uIHBhZGEgdGVudXJlOg0KDQotIE1lbmdhYmFpa2FuIHBlbGFuZ2dhbiB5YW5nIG1hc2loIGFrdGlmDQoNCi0gTWVuZ2hhc2lsa2FuIGJpYXMgZXN0aW1hc2kgbGlmZXRpbWUNCg0KLSBUaWRhayBkYXBhdCBtZW1vZGVsa2FuIHByb2JhYmlsaXRhcyBiZXJ0YWhhbiBwYWRhIGhvcml6b24gdGVydGVudHUNCg0KLSBUaWRhayBtZW5hbmdrYXAgZGluYW1pa2EgaGF6YXJkIGFraWJhdCBwZXJpbGFrdSBwZWxhbmdnYW4NCg0KQWtpYmF0bnlhLCBtb2RlbCByZXRlbnNpIG1lbmphZGkga3VyYW5nIHByZXNpc2kgZGFuIGJlcmlzaWtvIG1lbmdoYXNpbGthbiBrZXB1dHVzYW4geWFuZyBzYWxhaCBhcmFoLg0KDQo=