[1] "/Users/jornbrouwer/Onedrive/Programeren/the_big_five/thebigfive/RScript/SpaandersBV_dataset_2"

Simulatie informatie

1.0 Logbestand: ../LogFiles/logfile-v4_minimale_productie.csv

1.1 aantal gemaakte budget-tafels: 61986

1.2 aantal gemaakte luxe-tafels: 7280

1.3 Gesimuleerde tijd: 1040d 0H 0M 0S

1.4 aantal reparaties: 0

1.5 Aantal keer dat machines zijn omgesteld tussen luxe- en budgettafels: 207

1.6 gemiddelde bezettingsgraad tussenliggende buffers: 23.4525267



Productielijnen

Budget-bladen

  • Rendered time period is: 20d 0H 0M 0S

Machine 1 - (Hout) zaagmachine


Machine 4 - Voorboormachine


Machine 5 - Schuurmachine


Machine 6 - Verfmachine


Budget-poten

Machine 7 - IJzerzaag-machine


Machine 9 - Lasmachine


Machine 10 - Poedercoat-machine


Luxe-bladen

Render time

  • Rendered time period is: 20d 0H 0M 0S

Machine 1 - (Hout) zaagmachine

Machine 2 - (Hout) lijmmachine

Machine 3 - (Hout) Freezemachine

Machine 4 - (Hout) Voorboormachine

Machine 5 - (Hout) Schuurmachine

Machine 6 - (Hout) Verfmachine

Luxe-poten

Machine 7 - IJzerzaag-machine

Machine 8 - (IJzer) buigmachine

M8 <- subset(logfile,select=c(Timestamp,Sender,Message,InputBuffer,OutputBuffer,Workload,ItemType),
             subset=((machines_V==8)&(itemtype_V=="E")&(timestamps_V<=renderTime[dummyRenderedTime])))
print(head(M8$OutputBuffer))
[1] "X" "X" "X" "X" "X" "X"
print(unique(M8$OutputBuffer))
[1] "X"
#print(count((M8$OutputBuffer)))
class(M8$OutputBuffer)
[1] "character"
#output <- abs(M8$OutputBuffer)
# par(mfrow = c(1,1))
# plot(M8$Timestamp,output, main="Buigmachine",xlab = "Timestamp in seconds",ylab="1st outputbuffer")
# lines(M8$Timestamp,M8$OutputBuffer)
#print(head(M8, n=50))
#print(tail(M8, n=50))
# par(mfrow = c(1,2))
# gebogenPoten <- M8$OutputBuffer
# gebogenPoten <- as.numeric(gebogenPoten)
# hist(gebogenPoten,main="Gebogen luxe poten", xlab="bucket grootte", ylab="hoeveelheid luxe gebogen poten")
#d <- density(gezaagdeBladen)
#plot(d)
#polygon(d,col="red",border="blue")
# xaxis <- seq(1:length(gebogenPoten))
# boxplot(x = gebogenPoten,y = xaxis, main="boxplot luxe gebogen poten", ylab="Hoeveelheid luxe gebogen poten")
#print(summary(gezaagdeBladen))
#print(unique(gezaagdeBladen))

Machine 9 - Lasmachine

Machine 11 - polijstmachine


LS0tCnRpdGxlOiAiU2ltdWxhdGlvbiBSZXBvcnQiCmF1dGhvcjogIlNwYWFuZGVycyBCLlYuIgpvdXRwdXQ6IAogIGh0bWxfbm90ZWJvb2sKLS0tCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0KIyAxLjEgTG9hZCBsaWJyYXJpZXMKIyMgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gIyMKbGlicmFyeShyZWFkcikKbGlicmFyeShkcGx5cikgIyBMaWJyYXJ5IGZvciBmaWx0ZXJpbmcgZGF0YQpsaWJyYXJ5KGx1YnJpZGF0ZSkgIyBMaWJyYXJ5IGZvciBjb252ZXJ0aW5nIHRpbWVzdGFtcHMgKHNlY29uZHMgaW4gb3VyIGNhc2UpIHRvIGZvcm1hdHRlZCBkYXRldGltZXMKbGlicmFyeSh0aWR5cikgIyBsaWJyYXJ5IGZvciBlZmZlY3RpdmUgZGF0YSBzaGFwaW5nCmxpYnJhcnkoZ2dwbG90MikgIyBsaWJyYXJ5IGZvciBlZmZlY3RpdmUgZGF0YSBzaGFwaW5nCmxpYnJhcnkoc2hpbnkpCmxpYnJhcnkoZ3JpZCkKbGlicmFyeShncmlkRXh0cmEpCmBgYAoKCmBgYHtyIGVjaG89RkFMU0V9CiMgLjIgU2V0IFdvcmtpbmcgRGlyZWN0b3J5CiNzZXR3ZCgifi9PbmVkcml2ZS9Qcm9ncmFtZXJlbi90aGVfYmlnX2ZpdmUvdGhlYmlnZml2ZS9SU2NyaXB0LyIpCiNwcmludChnZXR3ZCkKcHJpbnQoZ2V0d2QoKSkKIyBsb2dmaWxlIDwtIHJlYWQuY3N2KCJMb2dGaWxlcy9sb2dmaWxlLTE2LTAxLmNzdiIsIGhlYWRlciA9IFRSVUUsIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkgIyBSZWFkIGxvZyBmaWxlCiMgbG9nZmlsZSA8LSByZWFkLmNzdigifi9Vc2Vycy9qb3JuYnJvdXdlci9PbmVkcml2ZS9Qcm9ncmFtZXJlbi90aGVfYmlnX2ZpdmUvdGhlYmlnZml2ZS9SU2NyaXB0L0xvZ0ZpbGVzL2xvZ2ZpbGUtMTctMDEuY3N2IiwgaGVhZGVyID0gVFJVRSwgc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFKSAjIFJlYWQgbG9nIGZpbGUKIyBsb2dmaWxlIDwtIHJlYWQuY3N2KCIuLi9Mb2dGaWxlcy9TcGFhbmRlcnNCVl8xamFhcl9nb2Vka29wZU1hY2hpbmVzX29tc3RlbGxlbl8xX3dlZWsuY3N2IiwgaGVhZGVyID0gVFJVRSxzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UpCiNsb2dmaWxlIDwtIHJlYWQuY3N2KCIuLi9Mb2dGaWxlcy9sb2dmaWxlLXYxX21pbmltYWxlX3Byb2R1Y3RpZS5jc3YiLCBoZWFkZXIgPSBUUlVFLHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkKI2xvZ2ZpbGUgPC0gcmVhZC5jc3YoIi4uL0xvZ0ZpbGVzL2xvZ2ZpbGUtdjJfbWluaW1hbGVfcHJvZHVjdGllLmNzdiIsIGhlYWRlciA9IFRSVUUsc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFKQojbG9nZmlsZSA8LSByZWFkLmNzdigiLi4vTG9nRmlsZXMvbG9nZmlsZS12Ml9taW5pbWFsZV9wcm9kdWN0aWUuY3N2IiwgaGVhZGVyID0gVFJVRSxzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UpCiNsb2dmaWxlIDwtIHJlYWQuY3N2KCIuLi9Mb2dGaWxlcy9sb2dmaWxlLXYzX21pbmltYWxlX3Byb2R1Y3RpZS5jc3YiLCBoZWFkZXIgPSBUUlVFLHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkKI2xvZ2ZpbGUgPC0gcmVhZC5jc3YoIi4uL0xvZ0ZpbGVzL2xvZ2ZpbGUtdjRfbWluaW1hbGVfcHJvZHVjdGllLmNzdiIsIGhlYWRlciA9IFRSVUUsc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFKQojIyAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAjIwpzaW1fbmFtZSA8LSBjKCIuLi9Mb2dGaWxlcy9sb2dmaWxlLXY0X21pbmltYWxlX3Byb2R1Y3RpZS5jc3YiKQojcHJpbnQoc2ltX25hbWUpCgpgYGAKCmBgYHtyIGluY2x1ZGU9RkFMU0V9CnNvdXJjZSgiUE9TX3RpbWVfY29udmVydGVyLlIiKQoKc2hvd1RpbWUgPC0gKHJlbmRlclRpbWVbZHVtbXlSZW5kZXJlZFRpbWVdKSozCnNob3dUaW1lIDwtIHNlY29uZHNfdG9fcGVyaW9kKHNob3dUaW1lKQpzaG93VGltZSA8LSBhcy5jaGFyYWN0ZXIuUE9TSVh0KHNob3dUaW1lKQpwcmludChzaG93VGltZSkKYGBgCgpgYGB7ciBpbmNsdWRlPUZBTFNFfQojIFRlc3QgdGltZXN0YW1wcyBmb3IgY29udmVydGllCiNwcmludChzZWNvbmRzX3RvX3BlcmlvZCgyOTk1MjAwMCkpCiNwcmludChzZWNvbmRzX3RvX3BlcmlvZCg3NDg4MDAwKjMqNCkpCiNwcmludChzZWNvbmRzX3RvX3BlcmlvZCg4OTg1NjAwMCkpCmBgYAoKCmBgYHtyIFNldHVwLCBpbmNsdWRlPUZBTFNFfQpwcmludChnZXR3ZCgpKQoKc291cmNlKCJJbml0aWFsaXplLlIiKQpgYGAKCmBgYHtyIGVjaG89RkFMU0V9CiNwcmludCh0YWlsKGxvZ2ZpbGUsIG49MjAwKSkKYGBgCgotLS0KCiMjIyBTaW11bGF0aWUgaW5mb3JtYXRpZQoKMS4wIExvZ2Jlc3RhbmQ6IF9fYHIgc2ltX25hbWVgX18KCjEuMSBhYW50YWwgZ2VtYWFrdGUgYnVkZ2V0LXRhZmVsczogX19gciBuR2Vwcm9kdWNlZXJkZUJ1ZGdldFRhZmVsc2BfXwoKMS4yICBhYW50YWwgZ2VtYWFrdGUgbHV4ZS10YWZlbHM6IF9fYHIgbkdlcHJvZHVjZWVyZGVMdXhlVGFmZWxzYF9fCgoxLjMgR2VzaW11bGVlcmRlIHRpamQ6IF9fYHIgZmluYWxTaW1UaW1lYF9fCgoxLjQgYWFudGFsIHJlcGFyYXRpZXM6IF9fYHIgbk1hY2hpbmVzQnJva2VuYF9fCgoxLjUgQWFudGFsIGtlZXIgZGF0IG1hY2hpbmVzIHppam4gb21nZXN0ZWxkIHR1c3NlbiBsdXhlLSBlbiBidWRnZXR0YWZlbHM6IF9fYHIgbWFjaGluZV9jb25maWdzX1VgX18KCjEuNiBnZW1pZGRlbGRlIGJlemV0dGluZ3NncmFhZCB0dXNzZW5saWdnZW5kZSBidWZmZXJzOiBfX2ByIHRvdGFsQmV6ZXR0aW5nc0dyYWFkYF9fCgotLS0KCmBgYHtyIGV2YWw9RkFMU0UsIGluY2x1ZGU9RkFMU0V9CiNzb3VyY2UoImV4cGVuc2l2ZUl0ZW1zLlIiKQojIyMgMSAtIEdlbmVyYWwgU2ltdWxhdGlvbiBWYXJpYWJsZXMKCiMgMS4xIGFhbnRhbCBnZW1hYWt0ZSBidWRnZXQtdGFmZWxzOiBfX2ByIG5HZXByb2R1Y2VlcmRlQnVkZ2V0VGFmZWxzYF9fCiMgCiMgMS4yICBhYW50YWwgZ2VtYWFrdGUgbHV4ZS10YWZlbHM6IF9fYHIgbkdlcHJvZHVjZWVyZGVMdXhlVGFmZWxzYF9fCiMgCiMgMS4zIEdlc2ltdWxlZXJkZSB0aWpkOiBfX2ByIGZpbmFsU2ltVGltZWBfXwojIAojIDEuNCBhYW50YWwgcmVwYXJhdGllczogX19gciBuTWFjaGluZXNCcm9rZW5gX18KIyAKIyAxLjUgQWFudGFsIGtlZXIgZGF0IG1hY2hpbmVzIHppam4gb21nZXN0ZWxkIHR1c3NlbiBsdXhlLSBlbiBidWRnZXR0YWZlbHM6IF9fYHIgbWFjaGluZV9jb25maWdzX1VgX18KIyAKIyAxLjYgZ2VtaWRkZWxkZSBiZXpldHRpbmdzZ3JhYWQgdHVzc2VubGlnZ2VuZGUgYnVmZmVyczogX19gciB0b3RhbEJlemV0dGluZ3NHcmFhZGBfXwoKYGBgCgotLS0KCiMgIFByb2R1Y3RpZWxpam5lbiB7LnRhYnNldCAudGFic2V0LWZhZGUgLnRhYnNldC1waWxsc30KCmBgYHtyIGVjaG89RkFMU0V9CnBhcihtZnJvdyA9IGMoMSwgMikpICMgQ3JlYXRlIGEgeCBncmlkIGZvciBkaWFncmFtcwoKYmV6ZXR0aW5nc2dyYWFkVGFmZWxJdGVtcyA8LSBjKG0xX21lYW4sbTRfbWVhbixtNV9tZWFuKQpiYXJwbG90KGJlemV0dGluZ3NncmFhZFRhZmVsSXRlbXMsIG1haW49ImdlbWlkZGVsZGUgdmFuIGRlIGJ1ZmZlcnMgWzFdWzRdWzVdIikKCmJlemV0dGluc2dyYWFkVGFmZWxwb3RlbiA8LWMobTdfbWVhbiwgbTlfbWVhbikKCmJhcnBsb3QoYmV6ZXR0aW5zZ3JhYWRUYWZlbHBvdGVuLCBtYWluPSJnZW1pZGRlbGRlIHZhbiBkZSBidWZmZXJzIFs3XVs5XSIpCgp0b3RhbEJlemV0dGluZ3NHcmFhZCA8LSBjKGJlemV0dGluZ3NncmFhZFRhZmVsSXRlbXMsYmV6ZXR0aW5zZ3JhYWRUYWZlbHBvdGVuKQp0b3RhbEJlemV0dGluZ3NHcmFhZCA8LSBtZWFuKHRvdGFsQmV6ZXR0aW5nc0dyYWFkKQpgYGAKCgojIyBCdWRnZXQtYmxhZGVuCgotIFJlbmRlcmVkIHRpbWUgcGVyaW9kIGlzOiBfX2ByIHNob3dUaW1lYF9fCgojIyMgTWFjaGluZSAxIC0gKEhvdXQpIHphYWdtYWNoaW5lCgpgYGB7ciBlY2hvPUZBTFNFfQpNMSA8LSBzdWJzZXQobG9nZmlsZSxzZWxlY3Q9YyhUaW1lc3RhbXAsU2VuZGVyLE1lc3NhZ2UsSW5wdXRCdWZmZXIsT3V0cHV0QnVmZmVyLFdvcmtsb2FkKSwKICAgICAgICAgICAgIHN1YnNldD0oKG1hY2hpbmVzX1Y9PTEpJihpdGVtdHlwZV9WPT0iQyIpJih0aW1lc3RhbXBzX1Y8PXJlbmRlclRpbWVbZHVtbXlSZW5kZXJlZFRpbWVdKSkpCgojcHJpbnQoaGVhZChNMSxuPTEwMCkpCgpwYXIobWZyb3cgPSBjKDEsMSkpCnBsb3QoTTEkVGltZXN0YW1wLE0xJE91dHB1dEJ1ZmZlciwgbWFpbj0iSG91dHphYWdtYWNoaW5lIix4bGFiID0gIlRpbWVzdGFtcCBpbiBzZWNvbmRzIix5bGFiPSIxc3Qgb3V0cHV0YnVmZmVyIikKbGluZXMoTTEkVGltZXN0YW1wLE0xJE91dHB1dEJ1ZmZlcikKCnBhcihtZnJvdyA9IGMoMSwyKSkKZ2V6YWFnZGVCbGFkZW4gPC0gTTEkT3V0cHV0QnVmZmVyCmdlemFhZ2RlQmxhZGVuIDwtIGFzLm51bWVyaWMoZ2V6YWFnZGVCbGFkZW4pCgpoaXN0KGdlemFhZ2RlQmxhZGVuLG1haW49IkdlemFhZ2RlIGJ1ZGdldCB0YWZlbGJsYWRlbiIsIHhsYWI9ImJ1Y2tldCBncm9vdHRlIiwgeWxhYj0iaG9ldmVlbGhlaWQgZ2V6YWFnZGVibGFkZW4iKQoKI2QgPC0gZGVuc2l0eShnZXphYWdkZUJsYWRlbikKI3Bsb3QoZCkKI3BvbHlnb24oZCxjb2w9InJlZCIsYm9yZGVyPSJibHVlIikKCnhheGlzIDwtIHNlcSgxOmxlbmd0aChnZXphYWdkZUJsYWRlbikpCmJveHBsb3QoeCA9IGdlemFhZ2RlQmxhZGVuLHkgPSB4YXhpcywgbWFpbj0iYm94cGxvdCBidWRnZXQgdGFmZWxibGFkZW4iLCB5bGFiPSJuR2V6YWFnZGVCbGFkZW4iKQoKbTFfbWVhbiA8LSBtZWFuKGdlemFhZ2RlQmxhZGVuKQojcHJpbnQobTFfbWVhbikKI3ByaW50KHN1bW1hcnkoZ2V6YWFnZGVCbGFkZW4pKQojcHJpbnQodW5pcXVlKGdlemFhZ2RlQmxhZGVuKSkKYGBgCgpgYGB7ciBwaWUxLCBldmFsPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQpNMV9jb25maWcgPC0gYyhmaWx0ZXIoTTEsIE0xJE1lc3NhZ2U9PSJDT05GSUciKSkKTTFfY29uZmlnIDwtIE0xX2NvbmZpZyRUaW1lc3RhbXAKIyMgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gIyMKTTFfaWRsZSA8LSBjKGZpbHRlcihNMSwgTTEkTWVzc2FnZT09IlBST0RVQ1RJT05fSURMRSIpKQpNMV9pZGxlIDwtIE0xX2lkbGUkVGltZXN0YW1wCiMjIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICMjCk0xX3Byb2Nlc3NpbmcgPC0gYyhmaWx0ZXIoTTEsIE0xJE1lc3NhZ2U9PSJQUk9EVUNUSU9OX1BST0NFU1NJTkciKSkKTTFfcHJvY2Vzc2luZyA8LSBNMV9wcm9jZXNzaW5nJFRpbWVzdGFtcAojIyAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAjIwpNMV9wcm9jZXNzZWQgPC0gYyhmaWx0ZXIoTTEsIE0xJE1lc3NhZ2U9PSJQUk9EVUNUSU9OX1BST0NFU1NFRCIpKQpNMV9wcm9jZXNzZWQgPC0gTTFfcHJvY2Vzc2VkJFRpbWVzdGFtcAojIyAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAjIwojcHJpbnQobGVuZ3RoKE0xX2lkbGUpKQojcHJpbnQobGVuZ3RoKE0xX3Byb2Nlc3NlZCkpCiNwcmludChsZW5ndGgoTTFfcHJvY2Vzc2luZykpCiNwcmludChNMV9wcm9jZXNzaW5nWzJdIC0gTTFfaWRsZVsyXSkKI3ByaW50KE0xX3Byb2Nlc3NlZFsyXSAtIE0xX3Byb2Nlc3NpbmdbMl0pCiNwcmludChNMV9pZGxlWzNdIC0gTTFfcHJvY2Vzc2VkWzJdKQojIyAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAjIwoKI3ByaW50KGNvX3RpbWUpIApuQ29uZmlncyA8LSBsZW5ndGgoTTFfY29uZmlnKQpjb190aW1lIDwtIG5Db25maWdzICogMzAwICNldmVyeSBjb25maWcgdGFrZXMgMzAwcyAoNW1pbnV0ZXMpCgojIyAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAjIwoKCiNuUHJvY2Vzc2luZ3MgPC0gbGVuZ3RoKE0xX3Byb2Nlc3NpbmcpIC0xCiNuUHJvY2Vzc2luZ3MgPC0gbGVuZ3RoKE0xX3Byb2Nlc3NlZCkgLTEKI25Qcm9jZXNzaW5ncyA8LSBsZW5ndGgoTTFfaWRsZSkgLTEgCgpwcmludChuUHJvY2Vzc2luZ3MpCmlkX3RpbWUgPC0gMApwZ190aW1lIDwtIDAKcGRfdGltZSA8LSAwCmZvcihpIGluIDE6blByb2Nlc3NpbmdzKQp7CiAgaWRfdGltZV90YWtlbiA8LSBNMV9wcm9jZXNzaW5nW2ldIC0gTTFfaWRsZVtpXSAjaWRsZSB0aW1lIAogIHBnX3RpbWVfdGFrZW4gPC0gTTFfcHJvY2Vzc2VkW2ldIC0gTTFfcHJvY2Vzc2luZ1tpXSAjcHJvY2Vzc2luZyB0aW1lCiAgcGRfdGltZV90YWtlbiA8LSBNMV9pZGxlW2krMV0gLSBNMV9wcm9jZXNzZWRbaV0gICNwcm9jZXNzZWQgdGltZQogIAogIGlkX3RpbWUgPC0gaWRfdGltZSArIGlkX3RpbWVfdGFrZW4KICBwZ190aW1lIDwtIHBnX3RpbWUgKyBwZ190aW1lX3Rha2VuCiAgcGRfdGltZSA8LSBwZF90aW1lICsgcGRfdGltZV90YWtlbgp9CiMjIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICMjCnNsaWNlcyA8LSBjKGNvX3RpbWUsIGlkX3RpbWUsIHBnX3RpbWUscGRfdGltZSkKCgoKI3ByaW50KGlkX3RpbWUpIAojcHJpbnQocGdfdGltZSlcCgpsYWJlbHMgPC0gYygiQ09ORklHIiwgIklETEUiLCAiUFJPQ0VTU0lORyIsICJQUk9DRVNTRUQiKQoKcGllKHNsaWNlcywgIGxhYmVscyA9IGxhYmVscywKICAgICAgICBtYWluID0gIlRpamQgcGVyIHN0YXRlIiwKICAgICAgICB4bGFiID0gIlN0YXRlcyIsCiAgICAgICAgeWxhYiA9ICJUaWpkIChzZWNvbmRlbikiLAogICAgICAgIGxhcz0xLAogICAgICAgIGNvbCA9IHJhaW5ib3cobGVuZ3RoKGxhYmVscykpKQojIyAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAjIwpgYGAKCi0tLQoKIyMjIE1hY2hpbmUgNCAtIFZvb3Jib29ybWFjaGluZQoKYGBge3IgZWNobz1GQUxTRX0KTTQgPC0gc3Vic2V0KGxvZ2ZpbGUsc2VsZWN0PWMoVGltZXN0YW1wLFNlbmRlcixNZXNzYWdlLElucHV0QnVmZmVyLE91dHB1dEJ1ZmZlcixXb3JrbG9hZCksCiAgICAgICAgICAgICBzdWJzZXQ9KChtYWNoaW5lc19WPT00KSYoaXRlbXR5cGVfVj09IkMiKSYodGltZXN0YW1wc19WPD1yZW5kZXJUaW1lW2R1bW15UmVuZGVyZWRUaW1lXSkpKQoKcGFyKG1mcm93ID0gYygxLDEpKQpwbG90KE00JFRpbWVzdGFtcCxNNCRPdXRwdXRCdWZmZXIsIG1haW49IlZvb3Jib29ybWFjaGluZSIseGxhYiA9ICJUaW1lc3RhbXAgaW4gc2Vjb25kcyIseWxhYj0iMm5kIG91dHB1dGJ1ZmZlciIpCmxpbmVzKE00JFRpbWVzdGFtcCxNNCRPdXRwdXRCdWZmZXIpCgpwYXIobWZyb3cgPSBjKDEsMikpCmdlYm9vcmRlUGxhdGVuIDwtIE00JE91dHB1dEJ1ZmZlcgpnZWJvb3JkZVBsYXRlbiA8LSBhcy5udW1lcmljKGdlYm9vcmRlUGxhdGVuKQpoaXN0KGdlYm9vcmRlUGxhdGVuKQpib3hwbG90KGdlYm9vcmRlUGxhdGVuKQoKbTRfbWVhbiA8LSBtZWFuKGdlYm9vcmRlUGxhdGVuKQojcHJpbnQobTRfbWVhbikKI3ByaW50KHVuaXF1ZShnZWJvb3JkZVBsYXRlbikpCiNwcmludChzdW1tYXJ5KGdlYm9vcmRlUGxhdGVuKSkKYGBgCgoKYGBge3IgcGllNCwgZXZhbD1GQUxTRSwgaW5jbHVkZT1GQUxTRX0KTTRfY29uZmlnIDwtIGMoZmlsdGVyKE00LCBNNCRNZXNzYWdlPT0iQ09ORklHIikpCk00X2NvbmZpZyA8LSBNNF9jb25maWckVGltZXN0YW1wCiNwcmludChNNF9jb25maWcpCiMjIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICMjCk00X2lkbGUgPC0gYyhmaWx0ZXIoTTQsIE00JE1lc3NhZ2U9PSJQUk9EVUNUSU9OX0lETEUiKSkKTTRfaWRsZSA8LSBNNF9pZGxlJFRpbWVzdGFtcAojcHJpbnQobGVuZ3RoKE00X2lkbGUpKQojIyAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAjIwpNNF9wcm9jZXNzaW5nIDwtIGMoZmlsdGVyKE00LCBNNCRNZXNzYWdlPT0iUFJPRFVDVElPTl9QUk9DRVNTSU5HIikpCk00X3Byb2Nlc3NpbmcgPC0gTTRfcHJvY2Vzc2luZyRUaW1lc3RhbXAKI3ByaW50KGxlbmd0aChNNF9wcm9jZXNzaW5nKSkKIyMgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gIyMKTTRfcHJvY2Vzc2VkIDwtIGMoZmlsdGVyKE00LCBNNCRNZXNzYWdlPT0iUFJPRFVDVElPTl9QUk9DRVNTRUQiKSkKTTRfcHJvY2Vzc2VkIDwtIE00X3Byb2Nlc3NlZCRUaW1lc3RhbXAKI3ByaW50KGxlbmd0aChNNF9wcm9jZXNzZWQpKQojIyAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAjIwpuQ29uZmlncyA8LSBsZW5ndGgoTTRfY29uZmlnKQpjb190aW1lIDwtIG5Db25maWdzICogMzAwCm5Qcm9jZXNzaW5ncyA8LSBsZW5ndGgoTTRfcHJvY2Vzc2luZyktMQojcHJpbnQoblByb2Nlc3NpbmdzKQojIyAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAjIwppZF90aW1lIDwtIDAKcGdfdGltZSA8LSAwCnBkX3RpbWUgPC0gMAojIyAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAjIwpmb3IoaSBpbiAxOm5Qcm9jZXNzaW5ncykKewogIGlkX3RpbWVfdGFrZW4gPC0gTTRfcHJvY2Vzc2luZ1tpXSAtIE00X2lkbGVbaV0gI2lkbGUgdGltZSAKICBwZ190aW1lX3Rha2VuIDwtIE00X3Byb2Nlc3NlZFtpXSAtIE00X3Byb2Nlc3NpbmdbaV0gI3Byb2Nlc3NpbmcgdGltZQogIHBkX3RpbWVfdGFrZW4gPC0gTTRfaWRsZVtpKzFdIC0gTTRfcHJvY2Vzc2VkW2ldICAjcHJvY2Vzc2VkIHRpbWUKICAKICBpZF90aW1lIDwtIGlkX3RpbWUgKyBpZF90aW1lX3Rha2VuCiAgcGdfdGltZSA8LSBwZ190aW1lICsgcGdfdGltZV90YWtlbgogIHBkX3RpbWUgPC0gcGRfdGltZSArIHBkX3RpbWVfdGFrZW4KICAjcHJpbnQocGRfdGltZV90YWtlbikKfQojIyAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAjIwpzbGljZXMgPC0gYyhjb190aW1lLCBpZF90aW1lLCBwZ190aW1lLCBwZF90aW1lKQoKbGFiZWwgPC0gYygiQ09ORklHIiwgIklETEUiLCAiUFJPQ0VTU0lORyIsICJQUk9DRVNTRUQiKQoKcGllKHNsaWNlcywgIGxhYmVsID0gbGFiZWxzLAogICAgICAgIG1haW4gPSAiVGlqZCBwZXIgc3RhdGUiLAogICAgICAgIHhsYWIgPSAiU3RhdGVzIiwKICAgICAgICB5bGFiID0gIlRpamQgKHNlY29uZGVuKSIsCiAgICAgICAgY29sID0gcmFpbmJvdyhsZW5ndGgobGFiZWxzKSkpCiMjIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICMjCmBgYAoKCi0tLQoKIyMjIE1hY2hpbmUgNSAtIFNjaHV1cm1hY2hpbmUKYGBge3IgZWNobz1GQUxTRX0KTTUgPC0gc3Vic2V0KGxvZ2ZpbGUsc2VsZWN0PWMoVGltZXN0YW1wLFNlbmRlcixNZXNzYWdlLElucHV0QnVmZmVyLE91dHB1dEJ1ZmZlcixXb3JrbG9hZCksCiAgICAgICAgICAgICBzdWJzZXQ9KChtYWNoaW5lc19WPT01KSYoaXRlbXR5cGVfVj09IkMiKSYodGltZXN0YW1wc19WPD1yZW5kZXJUaW1lW2R1bW15UmVuZGVyZWRUaW1lXSkpKQoKcGFyKG1mcm93ID0gYygxLDEpKQpwbG90KE01JFRpbWVzdGFtcCxNNSRPdXRwdXRCdWZmZXIsIG1haW49IlNjaHV1cm1hY2hpbmUiLHhsYWIgPSAiVGltZXN0YW1wIGluIHNlY29uZHMiLHlsYWI9IjNyZG91dHB1dGJ1ZmZlciIpCmxpbmVzKE01JFRpbWVzdGFtcCxNNSRPdXRwdXRCdWZmZXIpCgpwYXIobWZyb3cgPSBjKDEsMikpCmdlc2NodXVyZGVQbGF0ZW4gPC0gTTUkT3V0cHV0QnVmZmVyCmdlc2NodXVyZGVQbGF0ZW4gPC0gYXMubnVtZXJpYyhnZXNjaHV1cmRlUGxhdGVuKQpoaXN0KGdlc2NodXVyZGVQbGF0ZW4pCmJveHBsb3QoZ2VzY2h1dXJkZVBsYXRlbikKCm01X21lYW4gPC0gbWVhbihnZXNjaHV1cmRlUGxhdGVuKQojcHJpbnQobTVfbWVhbikKI3ByaW50KHVuaXF1ZShnZXNjaHV1cmRlUGxhdGVuKSkKI3ByaW50KHN1bW1hcnkoZ2VzY2h1dXJkZVBsYXRlbikpCmBgYAoKCmBgYHtyIHBpZTUsIGV2YWw9RkFMU0UsIGluY2x1ZGU9RkFMU0V9Ck01X2NvbmZpZyA8LSBjKGZpbHRlcihNNSwgTTUkTWVzc2FnZT09IkNPTkZJRyIpKQpNNV9jb25maWcgPC0gTTVfY29uZmlnJFRpbWVzdGFtcAojIyAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAjIwpNNV9pZGxlIDwtIGMoZmlsdGVyKE01LCBNNSRNZXNzYWdlPT0iUFJPRFVDVElPTl9JRExFIikpCk01X2lkbGUgPC0gTTVfaWRsZSRUaW1lc3RhbXAKIyMgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gIyMKTTVfcHJvY2Vzc2luZyA8LSBjKGZpbHRlcihNNSwgTTUkTWVzc2FnZT09IlBST0RVQ1RJT05fUFJPQ0VTU0lORyIpKQpNNV9wcm9jZXNzaW5nIDwtIE01X3Byb2Nlc3NpbmckVGltZXN0YW1wCiMjIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICMjCk01X3Byb2Nlc3NlZCA8LSBjKGZpbHRlcihNNSwgTTUkTWVzc2FnZT09IlBST0RVQ1RJT05fUFJPQ0VTU0VEIikpCk01X3Byb2Nlc3NlZCA8LSBNNV9wcm9jZXNzZWQkVGltZXN0YW1wCiMjIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICMjCm5Db25maWdzIDwtIGxlbmd0aChNNV9jb25maWcpCmNvX3RpbWUgPC0gbkNvbmZpZ3MgKiAzMDAKblByb2Nlc3NpbmdzIDwtIGxlbmd0aChNNV9wcm9jZXNzaW5nKS0xCiMjIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICMjCmlkX3RpbWUgPC0gMApwZ190aW1lIDwtIDAKcGRfdGltZSA8LSAwCiMjIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICMjCmZvcihpIGluIDE6blByb2Nlc3NpbmdzKQp7CiAgaWRfdGltZV90YWtlbiA8LSBNNV9wcm9jZXNzaW5nW2ldIC0gTTVfaWRsZVtpXSAjaWRsZSB0aW1lIAogIHBnX3RpbWVfdGFrZW4gPC0gTTVfcHJvY2Vzc2VkW2ldIC0gTTVfcHJvY2Vzc2luZ1tpXSAjcHJvY2Vzc2luZyB0aW1lCiAgcGRfdGltZV90YWtlbiA8LSBNNV9pZGxlW2krMV0gLSBNNV9wcm9jZXNzZWRbaV0gICNwcm9jZXNzZWQgdGltZQogIAogIGlkX3RpbWUgPC0gaWRfdGltZSArIGlkX3RpbWVfdGFrZW4KICBwZ190aW1lIDwtIHBnX3RpbWUgKyBwZ190aW1lX3Rha2VuCiAgcGRfdGltZSA8LSBwZF90aW1lICsgcGRfdGltZV90YWtlbgogICNwcmludChwZF90aW1lX3Rha2VuKQp9CiMjIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICMjCnNsaWNlcyA8LSBjKGNvX3RpbWUsIGlkX3RpbWUsIHBnX3RpbWUsIHBkX3RpbWUpCgpsYWJlbCA8LSBjKCJDT05GSUciLCAiSURMRSIsICJQUk9DRVNTSU5HIiwgIlBST0NFU1NFRCIpCgpwaWUoc2xpY2VzLCAgbGFiZWwgPSBsYWJlbHMsCiAgICAgICAgbWFpbiA9ICJUaWpkIHBlciBzdGF0ZSIsCiAgICAgICAgeGxhYiA9ICJTdGF0ZXMiLAogICAgICAgIHlsYWIgPSAiVGlqZCAoc2Vjb25kZW4pIiwKICAgICAgICBjb2wgPSByYWluYm93KGxlbmd0aChsYWJlbHMpKSkKIyMgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gIyMKYGBgCgotLS0KCiMjIyBNYWNoaW5lIDYgLSBWZXJmbWFjaGluZQpgYGB7ciBlY2hvPUZBTFNFfQpNNiA8LSBzdWJzZXQobG9nZmlsZSxzZWxlY3Q9YyhUaW1lc3RhbXAsU2VuZGVyLE1lc3NhZ2UsSW5wdXRCdWZmZXIsT3V0cHV0QnVmZmVyLFdvcmtsb2FkKSwKICAgICAgICAgICAgIHN1YnNldD0oKG1hY2hpbmVzX1Y9PTYpJihpdGVtdHlwZV9WPT0iQyIpJih0aW1lc3RhbXBzX1Y8PXJlbmRlclRpbWVbZHVtbXlSZW5kZXJlZFRpbWVdKSkpCgpwYXIobWZyb3cgPSBjKDEsMSkpCnBsb3QoTTYkVGltZXN0YW1wLE02JE91dHB1dEJ1ZmZlcixtYWluPSJWZXJmbWFjaGluZSIseGxhYiA9ICJUaW1lc3RhbXAgaW4gc2Vjb25kcyIseWxhYj0iZmluYWxvdXRwdXRidWZmZXIiKQpsaW5lcyhNNiRUaW1lc3RhbXAsTTYkT3V0cHV0QnVmZmVyKQoKcGFyKG1mcm93ID0gYygxLDIpKQpnZXZlcmZkZVBsYXRlbiA8LSBNNiRPdXRwdXRCdWZmZXIKZ2V2ZXJmZGVQbGF0ZW4gPC0gYXMubnVtZXJpYyhnZXZlcmZkZVBsYXRlbikKaGlzdChnZXZlcmZkZVBsYXRlbikKYm94cGxvdChnZXZlcmZkZVBsYXRlbikKCiNwcmludCh1bmlxdWUoZ2V2ZXJmZGVQbGF0ZW4pKQojcHJpbnQoc3VtbWFyeShnZXZlcmZkZVBsYXRlbikpCmBgYAoKYGBge3IgcGllNiwgZXZhbD1GQUxTRSwgaW5jbHVkZT1GQUxTRX0KTTZfY29uZmlnIDwtIGMoZmlsdGVyKE02LCBNNiRNZXNzYWdlPT0iQ09ORklHIikpCk02X2NvbmZpZyA8LSBNNl9jb25maWckVGltZXN0YW1wCiMjIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICMjCk02X2lkbGUgPC0gYyhmaWx0ZXIoTTYsIE02JE1lc3NhZ2U9PSJQUk9EVUNUSU9OX0lETEUiKSkKTTZfaWRsZSA8LSBNNl9pZGxlJFRpbWVzdGFtcAojIyAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAjIwpNNl9wcm9jZXNzaW5nIDwtIGMoZmlsdGVyKE02LCBNNiRNZXNzYWdlPT0iUFJPRFVDVElPTl9QUk9DRVNTSU5HIikpCk02X3Byb2Nlc3NpbmcgPC0gTTZfcHJvY2Vzc2luZyRUaW1lc3RhbXAKIyMgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gIyMKTTZfcHJvY2Vzc2VkIDwtIGMoZmlsdGVyKE02LCBNNiRNZXNzYWdlPT0iUFJPRFVDVElPTl9QUk9DRVNTRUQiKSkKTTZfcHJvY2Vzc2VkIDwtIE02X3Byb2Nlc3NlZCRUaW1lc3RhbXAKIyMgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gIyMKbkNvbmZpZ3MgPC0gbGVuZ3RoKE02X2NvbmZpZykKY29fdGltZSA8LSBuQ29uZmlncyAqIDMwMApuUHJvY2Vzc2luZ3MgPC0gbGVuZ3RoKE02X3Byb2Nlc3NlZCkKIyMgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gIyMKaWRfdGltZSA8LSAwCnBnX3RpbWUgPC0gMApwZF90aW1lIDwtIDAKIyMgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gIyMKIyBwcmludChsZW5ndGgoTTZfaWRsZSkpCiMgCiMgcHJpbnQobGVuZ3RoKE02X3Byb2Nlc3NpbmcpKQojIHByaW50KGxlbmd0aChNNl9wcm9jZXNzZWQpKQojIHggPC0gbGVuZ3RoKE02X2lkbGUpCiMgeSA8LSBsZW5ndGgoTTZfcHJvY2Vzc2luZykKIyB6IDwtIGxlbmd0aChNNl9wcm9jZXNzZWQpCiMgcHJpbnQodGFpbChNNl9pZGxlKSkKIyBwcmludCh0YWlsKE02X3Byb2Nlc3NpbmcpKQojIHByaW50KHRhaWwoTTZfcHJvY2Vzc2VkKSkKIyBwcmludChNNl9wcm9jZXNzaW5nWzJdIC0gTTZfaWRsZVsyXSkKIyBwcmludChNNl9wcm9jZXNzZWRbMl0gLSBNNl9wcm9jZXNzaW5nWzJdKQogcHJpbnQoTTZfaWRsZVsxMDAxXSAtIE02X3Byb2Nlc3NlZFsxMDAwXSkKCmZvcihpIGluIDE6blByb2Nlc3NpbmdzKQp7CiAgaWRfdGltZV90YWtlbiA8LSBNNl9wcm9jZXNzaW5nW2ldIC0gTTZfaWRsZVtpXSAjaWRsZSB0aW1lIAogIHBnX3RpbWVfdGFrZW4gPC0gTTZfcHJvY2Vzc2VkW2ldIC0gTTZfcHJvY2Vzc2luZ1tpXSAjcHJvY2Vzc2luZyB0aW1lCiAgcGRfdGltZV90YWtlbiA8LSBNNl9pZGxlW2ldIC0gTTZfcHJvY2Vzc2VkW2ldICAjcHJvY2Vzc2VkIHRpbWUKICAKICBwcmludChwZF90aW1lX3Rha2VuKQogIAogIGlkX3RpbWUgPC0gaWRfdGltZSArIGlkX3RpbWVfdGFrZW4KICBwZ190aW1lIDwtIHBnX3RpbWUgKyBwZ190aW1lX3Rha2VuCiAgcGRfdGltZSA8LSBwZF90aW1lICsgcGRfdGltZV90YWtlbgp9CiAKI3ByaW50KGlkX3RpbWUpCiNwcmludChwZ190aW1lKQojcHJpbnQocGRfdGltZSkKCiMjIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICMjCnNsaWNlcyA8LSBjKGNvX3RpbWUsIGlkX3RpbWUsIHBnX3RpbWUsIGFicyhwZF90aW1lKSkKCmxhYmVsIDwtIGMoIkNPTkZJRyIsICJJRExFIiwgIlBST0NFU1NJTkciLCAiUFJPQ0VTU0VEIikKCnBpZShzbGljZXMsICBsYWJlbCA9IGxhYmVscywKICAgICAgICBtYWluID0gIlRpamQgcGVyIHN0YXRlIiwKICAgICAgICB4bGFiID0gIlN0YXRlcyIsCiAgICAgICAgeWxhYiA9ICJUaWpkIChzZWNvbmRlbikiLAogICAgICAgIGNvbCA9IHJhaW5ib3cobGVuZ3RoKGxhYmVscykpKQojIyAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAjIwpgYGAKCi0tLS0KCiMjIEJ1ZGdldC1wb3RlbgoKIyMjIE1hY2hpbmUgNyAtIElKemVyemFhZy1tYWNoaW5lCmBgYHtyIGVjaG89RkFMU0V9Ck03IDwtIHN1YnNldChsb2dmaWxlLHNlbGVjdD1jKFRpbWVzdGFtcCxTZW5kZXIsTWVzc2FnZSxJbnB1dEJ1ZmZlcixPdXRwdXRCdWZmZXIsV29ya2xvYWQpLAogICAgICAgICAgICAgc3Vic2V0PSgobWFjaGluZXNfVj09NykmKGl0ZW10eXBlX1Y9PSJDIikmKHRpbWVzdGFtcHNfVjw9cmVuZGVyVGltZVtkdW1teVJlbmRlcmVkVGltZV0pKSkKCnBhcihtZnJvdyA9IGMoMSwxKSkKcGxvdChNNyRUaW1lc3RhbXAsTTckT3V0cHV0QnVmZmVyLG1haW49IklKemVyemFhZ21hY2hpbmUiLHhsYWIgPSAiVGltZXN0YW1wIGluIHNlY29uZHMiLHlsYWI9IjFzdCBvdXRwdXRidWZmZXIiKQpsaW5lcyhNNyRUaW1lc3RhbXAsTTckT3V0cHV0QnVmZmVyKQoKcGFyKG1mcm93ID0gYygxLDIpKQpnZXphYWdkZVBvdGVuIDwtIE03JE91dHB1dEJ1ZmZlcgpnZXphYWdkZVBvdGVuIDwtIGFzLm51bWVyaWMoZ2V6YWFnZGVQb3RlbikKaGlzdChnZXphYWdkZVBvdGVuKQpib3hwbG90KGdlemFhZ2RlUG90ZW4pCgptN19tZWFuIDwtIG1lYW4oZ2V6YWFnZGVQb3RlbikKI3ByaW50KG03X21lYW4pCgojcHJpbnQoc3VtbWFyeShnZXphYWdkZVBvdGVuKSkKYGBgCgotLS0KCiMjIyBNYWNoaW5lIDkgLSBMYXNtYWNoaW5lCmBgYHtyIGVjaG89RkFMU0V9Ck05IDwtIHN1YnNldChsb2dmaWxlLHNlbGVjdD1jKFRpbWVzdGFtcCxTZW5kZXIsTWVzc2FnZSxJbnB1dEJ1ZmZlcixPdXRwdXRCdWZmZXIsV29ya2xvYWQpLAogICAgICAgICAgICAgc3Vic2V0PSgobWFjaGluZXNfVj09OSkmKGl0ZW10eXBlX1Y9PSJDIikmKHRpbWVzdGFtcHNfVjw9cmVuZGVyVGltZVtkdW1teVJlbmRlcmVkVGltZV0pKSkKCnBhcihtZnJvdyA9IGMoMSwxKSkKcGxvdChNOSRUaW1lc3RhbXAsTTkkT3V0cHV0QnVmZmVyLG1haW49Ikxhc21hY2hpbmUiLHhsYWIgPSAiVGltZXN0YW1wIGluIHNlY29uZHMiLHlsYWI9IjJuZCBvdXRwdXRidWZmZXIiKQpsaW5lcyhNOSRUaW1lc3RhbXAsTTkkT3V0cHV0QnVmZmVyKQpwYXIobWZyb3cgPSBjKDEsMikpCmdlbGFzZGVQb3RlbiA8LSBNOSRPdXRwdXRCdWZmZXIKZ2VsYXNkZVBvdGVuIDwtIGFzLm51bWVyaWMoZ2VsYXNkZVBvdGVuKQpoaXN0KGdlbGFzZGVQb3RlbikKYm94cGxvdChnZWxhc2RlUG90ZW4pCgptOV9tZWFuIDwtIG1lYW4oZ2VsYXNkZVBvdGVuKQojcHJpbnQobTlfbWVhbikKCiNwcmludChzdW1tYXJ5KGdlbGFzZGVQb3RlbikpCmBgYAoKLS0tCgojIyMgTWFjaGluZSAxMCAtIFBvZWRlcmNvYXQtbWFjaGluZQpgYGB7ciBlY2hvPUZBTFNFfQpNMTAgPC0gc3Vic2V0KGxvZ2ZpbGUsc2VsZWN0PWMoVGltZXN0YW1wLFNlbmRlcixNZXNzYWdlLElucHV0QnVmZmVyLE91dHB1dEJ1ZmZlcixXb3JrbG9hZCksCiAgICAgICAgICAgICAgc3Vic2V0PSgobWFjaGluZXNfVj09MTApJihpdGVtdHlwZV9WPT0iQyIpJih0aW1lc3RhbXBzX1Y8PXJlbmRlclRpbWVbZHVtbXlSZW5kZXJlZFRpbWVdKSkpCgpwYXIobWZyb3cgPSBjKDEsMSkpCnBsb3QoTTEwJFRpbWVzdGFtcCxNMTAkT3V0cHV0QnVmZmVyLG1haW49IlBvZWRlcmNvYXRtYWNoaW5lIix4bGFiID0gIlRpbWVzdGFtcCBpbiBzZWNvbmRzIix5bGFiPSJmaW5hbCBvdXRwdXRidWZmZXIiKQpsaW5lcyhNMTAkVGltZXN0YW1wLE0xMCRPdXRwdXRCdWZmZXIpCgpwYXIobWZyb3cgPSBjKDEsMikpCmdlY29hdGVQb3RlbiA8LSBNMTAkT3V0cHV0QnVmZmVyCmdlY29hdGVQb3RlbiA8LSBhcy5udW1lcmljKGdlY29hdGVQb3RlbikKaGlzdChnZWNvYXRlUG90ZW4pCmJveHBsb3QoZ2Vjb2F0ZVBvdGVuKQoKI20xMF9tZWFuIDwtIG1lYW4oZ2Vjb2F0ZVBvdGVuKQojcHJpbnQobTEwX21lYW4pCgojcHJpbnQoc3VtbWFyeShnZWNvYXRlUG90ZW4pKQpgYGAKCi0tLQoKIyMgTHV4ZS1ibGFkZW4KClJlbmRlciB0aW1lCgotIFJlbmRlcmVkIHRpbWUgcGVyaW9kIGlzOiBfX2ByIHNob3dUaW1lYF9fCgojIyMgTWFjaGluZSAxIC0gKEhvdXQpIHphYWdtYWNoaW5lCgpgYGB7ciBlY2hvPUZBTFNFfQpNMSA8LSBzdWJzZXQobG9nZmlsZSxzZWxlY3Q9YyhUaW1lc3RhbXAsU2VuZGVyLE1lc3NhZ2UsSW5wdXRCdWZmZXIsT3V0cHV0QnVmZmVyLFdvcmtsb2FkKSwKICAgICAgICAgICAgIHN1YnNldD0oKG1hY2hpbmVzX1Y9PTEpJihpdGVtdHlwZV9WPT0iRSIpJih0aW1lc3RhbXBzX1Y8PXJlbmRlclRpbWVbZHVtbXlSZW5kZXJlZFRpbWVdKSkpCgpwYXIobWZyb3cgPSBjKDEsMSkpCnBsb3QoTTEkVGltZXN0YW1wLE0xJE91dHB1dEJ1ZmZlciwgbWFpbj0iSG91dHphYWdtYWNoaW5lIix4bGFiID0gIlRpbWVzdGFtcCBpbiBzZWNvbmRzIix5bGFiPSIxc3Qgb3V0cHV0YnVmZmVyIikKbGluZXMoTTEkVGltZXN0YW1wLE0xJE91dHB1dEJ1ZmZlcikKCnBhcihtZnJvdyA9IGMoMSwyKSkKZ2V6YWFnZGVCbGFkZW4gPC0gTTEkT3V0cHV0QnVmZmVyCmdlemFhZ2RlQmxhZGVuIDwtIGFzLm51bWVyaWMoZ2V6YWFnZGVCbGFkZW4pCmhpc3QoZ2V6YWFnZGVCbGFkZW4sbWFpbj0iR2V6YWFnZGUgZHVyZSB0YWZlbGJsYWRlbiIsIHhsYWI9ImJ1Y2tldCBncm9vdHRlIiwgeWxhYj0iaG9ldmVlbGhlaWQgZ2V6YWFnZGVibGFkZW4iKQoKI2QgPC0gZGVuc2l0eShnZXphYWdkZUJsYWRlbikKI3Bsb3QoZCkKI3BvbHlnb24oZCxjb2w9InJlZCIsYm9yZGVyPSJibHVlIikKCnhheGlzIDwtIHNlcSgxOmxlbmd0aChnZXphYWdkZUJsYWRlbikpCmJveHBsb3QoeCA9IGdlemFhZ2RlQmxhZGVuLHkgPSB4YXhpcywgbWFpbj0iYm94cGxvdCBkdXJlIHRhZmVsYmxhZGVuIiwgeWxhYj0ibkdlemFhZ2RlQmxhZGVuIikKCiNwcmludChzdW1tYXJ5KGdlemFhZ2RlQmxhZGVuKSkKI3ByaW50KHVuaXF1ZShnZXphYWdkZUJsYWRlbikpCmBgYAoKIyMjIE1hY2hpbmUgMiAtIChIb3V0KSBsaWptbWFjaGluZQoKYGBge3IgZWNobz1GQUxTRX0KTTIgPC0gc3Vic2V0KGxvZ2ZpbGUsc2VsZWN0PWMoVGltZXN0YW1wLFNlbmRlcixNZXNzYWdlLElucHV0QnVmZmVyLE91dHB1dEJ1ZmZlcixXb3JrbG9hZCksCiAgICAgICAgICAgICBzdWJzZXQ9KChtYWNoaW5lc19WPT0yKSYoaXRlbXR5cGVfVj09IkUiKSYodGltZXN0YW1wc19WPD1yZW5kZXJUaW1lW2R1bW15UmVuZGVyZWRUaW1lXSkpKQoKcGFyKG1mcm93ID0gYygxLDEpKQpwbG90KE0yJFRpbWVzdGFtcCxNMiRPdXRwdXRCdWZmZXIsIG1haW49Ikxpam1tYWNoaW5lIix4bGFiID0gIlRpbWVzdGFtcCBpbiBzZWNvbmRzIix5bGFiPSIxc3Qgb3V0cHV0YnVmZmVyIikKbGluZXMoTTIkVGltZXN0YW1wLE0yJE91dHB1dEJ1ZmZlcikKCnBhcihtZnJvdyA9IGMoMSwyKSkKZ2VsaWptZGVCbGFkZW4gPC0gTTIkT3V0cHV0QnVmZmVyCmdlbGlqbWRlQmxhZGVuIDwtIGFzLm51bWVyaWMoZ2VsaWptZGVCbGFkZW4pCmhpc3QoZ2VsaWptZGVCbGFkZW4sbWFpbj0iR2VsaWptZGUgZHVyZSB0YWZlbGJsYWRlbiIsIHhsYWI9ImJ1Y2tldCBncm9vdHRlIiwgeWxhYj0iaG9ldmVlbGhlaWQgZ2VsaWptZGVibGFkZW4iKQoKI2QgPC0gZGVuc2l0eShnZXphYWdkZUJsYWRlbikKI3Bsb3QoZCkKI3BvbHlnb24oZCxjb2w9InJlZCIsYm9yZGVyPSJibHVlIikKCnhheGlzIDwtIHNlcSgxOmxlbmd0aChnZWxpam1kZUJsYWRlbikpCmJveHBsb3QoeCA9IGdlbGlqbWRlQmxhZGVuLHkgPSB4YXhpcywgbWFpbj0iR2VsaWptZGUgZHVyZSB0YWZlbGJsYWRlbiIsIHlsYWI9ImdlbGlqbWRlQmxhZGVuIikKCiNwcmludChzdW1tYXJ5KGdlemFhZ2RlQmxhZGVuKSkKI3ByaW50KHVuaXF1ZShnZXphYWdkZUJsYWRlbikpCmBgYAoKCiMjIyBNYWNoaW5lIDMgLSAoSG91dCkgRnJlZXplbWFjaGluZQoKYGBge3IgZWNobz1GQUxTRX0KTTMgPC0gc3Vic2V0KGxvZ2ZpbGUsc2VsZWN0PWMoVGltZXN0YW1wLFNlbmRlcixNZXNzYWdlLElucHV0QnVmZmVyLE91dHB1dEJ1ZmZlcixXb3JrbG9hZCksCiAgICAgICAgICAgICBzdWJzZXQ9KChtYWNoaW5lc19WPT0zKSYoaXRlbXR5cGVfVj09IkUiKSYodGltZXN0YW1wc19WPD1yZW5kZXJUaW1lW2R1bW15UmVuZGVyZWRUaW1lXSkpKQoKcGFyKG1mcm93ID0gYygxLDEpKQpwbG90KE0zJFRpbWVzdGFtcCxNMyRPdXRwdXRCdWZmZXIsIG1haW49IkZyZWV6ZW1hY2hpbmUiLHhsYWIgPSAiVGltZXN0YW1wIGluIHNlY29uZHMiLHlsYWI9IjFzdCBvdXRwdXRidWZmZXIiKQpsaW5lcyhNMyRUaW1lc3RhbXAsTTMkT3V0cHV0QnVmZmVyKQoKcGFyKG1mcm93ID0gYygxLDIpKQpnZWZyZWV6ZGVCbGFkZW4gPC0gTTMkT3V0cHV0QnVmZmVyCmdlZnJlZXpkZUJsYWRlbiA8LSBhcy5udW1lcmljKGdlZnJlZXpkZUJsYWRlbikKaGlzdChnZWZyZWV6ZGVCbGFkZW4sbWFpbj0iR2VmcmVlemRlIGR1cmUgdGFmZWxibGFkZW4iLCB4bGFiPSJidWNrZXQgZ3Jvb3R0ZSIsIHlsYWI9ImhvZXZlZWxoZWlkIGdlZnJlZXpkZSBibGFkZW4iKQoKI2QgPC0gZGVuc2l0eShnZXphYWdkZUJsYWRlbikKI3Bsb3QoZCkKI3BvbHlnb24oZCxjb2w9InJlZCIsYm9yZGVyPSJibHVlIikKCnhheGlzIDwtIHNlcSgxOmxlbmd0aChnZWZyZWV6ZGVCbGFkZW4pKQpib3hwbG90KHggPSBnZWZyZWV6ZGVCbGFkZW4seSA9IHhheGlzLCBtYWluPSJHZWZyZWV6ZGUgZHVyZSB0YWZlbGJsYWRlbiIsIHlsYWI9IkhvZXZlZWxoZWlkIGdlZnJlZXpkZSBibGFkZW4iKQoKI3ByaW50KHN1bW1hcnkoZ2V6YWFnZGVCbGFkZW4pKQojcHJpbnQodW5pcXVlKGdlemFhZ2RlQmxhZGVuKSkKYGBgCgojIyMgTWFjaGluZSA0IC0gKEhvdXQpIFZvb3Jib29ybWFjaGluZQoKYGBge3IgZWNobz1GQUxTRX0KTTQgPC0gc3Vic2V0KGxvZ2ZpbGUsc2VsZWN0PWMoVGltZXN0YW1wLFNlbmRlcixNZXNzYWdlLElucHV0QnVmZmVyLE91dHB1dEJ1ZmZlcixXb3JrbG9hZCksCiAgICAgICAgICAgICBzdWJzZXQ9KChtYWNoaW5lc19WPT00KSYoaXRlbXR5cGVfVj09IkUiKSYodGltZXN0YW1wc19WPD1yZW5kZXJUaW1lW2R1bW15UmVuZGVyZWRUaW1lXSkpKQoKcGFyKG1mcm93ID0gYygxLDEpKQpwbG90KE00JFRpbWVzdGFtcCxNNCRPdXRwdXRCdWZmZXIsIG1haW49IlZvb3Jib29ybWFjaGluZSIseGxhYiA9ICJUaW1lc3RhbXAgaW4gc2Vjb25kcyIseWxhYj0iMm5kIG91dHB1dGJ1ZmZlciIpCmxpbmVzKE00JFRpbWVzdGFtcCxNNCRPdXRwdXRCdWZmZXIpCgpwYXIobWZyb3cgPSBjKDEsMikpCmdlYm9vcmRlUGxhdGVuIDwtIE00JE91dHB1dEJ1ZmZlcgpnZWJvb3JkZVBsYXRlbiA8LSBhcy5udW1lcmljKGdlYm9vcmRlUGxhdGVuKQoKaGlzdChnZWJvb3JkZVBsYXRlbixtYWluPSJWb29yZ2Vib29yZGUgZHVyZSB0YWZlbGJsYWRlbiIsIHhsYWI9ImJ1Y2tldCBncm9vdHRlIiwgeWxhYj0iaG9ldmVlbGhlaWQgdm9vcmdlYm9vcmRlIHBsYXRlbiIpCgp4YXhpcyA8LSBzZXEoMTpsZW5ndGgoZ2Vib29yZGVQbGF0ZW4pKQpib3hwbG90KGdlYm9vcmRlUGxhdGVuLHkgPSB4YXhpcywgbWFpbj0iVm9vcmdlYm9vcmRlIGR1cmUgdGFmZWxibGFkZW4iLCB5bGFiPSJIb2V2ZWVsaGVpZCBWb29yZ2Vib29yZGUgYmxhZGVuIikKCiNwcmludCh1bmlxdWUoZ2Vib29yZGVQbGF0ZW4pKQojcHJpbnQoc3VtbWFyeShnZWJvb3JkZVBsYXRlbikpCmBgYAoKIyMjIE1hY2hpbmUgNSAtIChIb3V0KSBTY2h1dXJtYWNoaW5lCgpgYGB7ciBlY2hvPUZBTFNFfQpNNSA8LSBzdWJzZXQobG9nZmlsZSxzZWxlY3Q9YyhUaW1lc3RhbXAsU2VuZGVyLE1lc3NhZ2UsSW5wdXRCdWZmZXIsT3V0cHV0QnVmZmVyLFdvcmtsb2FkKSwKICAgICAgICAgICAgIHN1YnNldD0oKG1hY2hpbmVzX1Y9PTUpJihpdGVtdHlwZV9WPT0iRSIpJih0aW1lc3RhbXBzX1Y8PXJlbmRlclRpbWVbZHVtbXlSZW5kZXJlZFRpbWVdKSkpCgpwYXIobWZyb3cgPSBjKDEsMSkpCnBsb3QoTTUkVGltZXN0YW1wLE01JE91dHB1dEJ1ZmZlciwgbWFpbj0iU2NodXVybWFjaGluZSIseGxhYiA9ICJUaW1lc3RhbXAgaW4gc2Vjb25kcyIseWxhYj0iM3JkIG91dHB1dGJ1ZmZlciIpCmxpbmVzKE01JFRpbWVzdGFtcCxNNSRPdXRwdXRCdWZmZXIpCgpwYXIobWZyb3cgPSBjKDEsMikpCmdlc2NodXVyZGVQbGF0ZW4gPC0gTTUkT3V0cHV0QnVmZmVyCmdlc2NodXVyZGVQbGF0ZW4gPC0gYXMubnVtZXJpYyhnZXNjaHV1cmRlUGxhdGVuKQpoaXN0KGdlc2NodXVyZGVQbGF0ZW4sbWFpbj0iR2VzY2h1dXJkZSBkdXJlIHRhZmVsYmxhZGVuIiwgeGxhYj0iYnVja2V0IGdyb290dGUiLCB5bGFiPSJob2V2ZWVsaGVpZCBnZXNjaHV1cmRlIHBsYXRlbiIpCgp4YXhpcyA8LSBzZXEoMTpsZW5ndGgoZ2VzY2h1dXJkZVBsYXRlbikpCmJveHBsb3QoZ2VzY2h1dXJkZVBsYXRlbix5ID0geGF4aXMsIG1haW49Ikdlc2NodXVyZGUgZHVyZSB0YWZlbGJsYWRlbiIsIHlsYWI9IkhvZXZlZWxoZWlkIGdlc2NodXVyZGUgYmxhZGVuIikKCiNwcmludCh1bmlxdWUoZ2VzY2h1dXJkZVBsYXRlbikpCiNwcmludChzdW1tYXJ5KGdlc2NodXVyZGVQbGF0ZW4pKQpgYGAKCiMjIyBNYWNoaW5lIDYgLSAoSG91dCkgVmVyZm1hY2hpbmUKCmBgYHtyIGVjaG89RkFMU0V9Ck02IDwtIHN1YnNldChsb2dmaWxlLHNlbGVjdD1jKFRpbWVzdGFtcCxTZW5kZXIsTWVzc2FnZSxJbnB1dEJ1ZmZlcixPdXRwdXRCdWZmZXIsV29ya2xvYWQpLAogICAgICAgICAgICAgc3Vic2V0PSgobWFjaGluZXNfVj09NikmKGl0ZW10eXBlX1Y9PSJFIikmKHRpbWVzdGFtcHNfVjw9cmVuZGVyVGltZVtkdW1teVJlbmRlcmVkVGltZV0pKSkKCnBhcihtZnJvdyA9IGMoMSwxKSkKcGxvdChNNiRUaW1lc3RhbXAsTTYkT3V0cHV0QnVmZmVyLG1haW49IlZlcmZtYWNoaW5lIix4bGFiID0gIlRpbWVzdGFtcCBpbiBzZWNvbmRzIix5bGFiPSJmaW5hbG91dHB1dGJ1ZmZlciIpCmxpbmVzKE02JFRpbWVzdGFtcCxNNiRPdXRwdXRCdWZmZXIpCgpwYXIobWZyb3cgPSBjKDEsMikpCmdldmVyZmRlUGxhdGVuIDwtIE02JE91dHB1dEJ1ZmZlcgpnZXZlcmZkZVBsYXRlbiA8LSBhcy5udW1lcmljKGdldmVyZmRlUGxhdGVuKQpoaXN0KGdldmVyZmRlUGxhdGVuKQpib3hwbG90KGdldmVyZmRlUGxhdGVuKQoKI3ByaW50KHVuaXF1ZShnZXZlcmZkZVBsYXRlbikpCiNwcmludChzdW1tYXJ5KGdldmVyZmRlUGxhdGVuKSkKYGBgCgojIyBMdXhlLXBvdGVuCgojIyMgTWFjaGluZSA3IC0gSUp6ZXJ6YWFnLW1hY2hpbmUKCmBgYHtyIGVjaG89RkFMU0V9Ck03IDwtIHN1YnNldChsb2dmaWxlLHNlbGVjdD1jKFRpbWVzdGFtcCxTZW5kZXIsTWVzc2FnZSxJbnB1dEJ1ZmZlcixPdXRwdXRCdWZmZXIsV29ya2xvYWQpLAogICAgICAgICAgICAgc3Vic2V0PSgobWFjaGluZXNfVj09NykmKGl0ZW10eXBlX1Y9PSJFIikmKHRpbWVzdGFtcHNfVjw9cmVuZGVyVGltZVtkdW1teVJlbmRlcmVkVGltZV0pKSkKCnBhcihtZnJvdyA9IGMoMSwxKSkKcGxvdChNNyRUaW1lc3RhbXAsTTckT3V0cHV0QnVmZmVyLG1haW49IklKemVyemFhZ21hY2hpbmUiLHhsYWIgPSAiVGltZXN0YW1wIGluIHNlY29uZHMiLHlsYWI9IjFzdCBvdXRwdXRidWZmZXIiKQpsaW5lcyhNNyRUaW1lc3RhbXAsTTckT3V0cHV0QnVmZmVyKQoKcGFyKG1mcm93ID0gYygxLDIpKQpnZXphYWdkZVBvdGVuIDwtIE03JE91dHB1dEJ1ZmZlcgpnZXphYWdkZVBvdGVuIDwtIGFzLm51bWVyaWMoZ2V6YWFnZGVQb3RlbikKaGlzdChnZXphYWdkZVBvdGVuLG1haW49IkdlemFhZ2RlIGx1eGUgcG90ZW4iLCB4bGFiPSJidWNrZXQgZ3Jvb3R0ZSIsIHlsYWI9ImhvZXZlZWxoZWlkIGx1eGUgZ2V6YWFnZGUgcG90ZW4iKQoKeGF4aXMgPC0gc2VxKDE6bGVuZ3RoKGdlemFhZ2RlUG90ZW4pKQpib3hwbG90KGdlemFhZ2RlUG90ZW4sIHkgPSB4YXhpcywgbWFpbj0iYm94cGxvdCBsdXhlIGdlemFhZ2RlIHBvdGVuIiwgeWxhYj0iSG9ldmVlbGhlaWQgbHV4ZSBnZXphYWdkZSBwb3RlbiIpCiNwcmludChzdW1tYXJ5KGdlemFhZ2RlUG90ZW4pKQpgYGAKCiMjIyBNYWNoaW5lIDggLSAoSUp6ZXIpIGJ1aWdtYWNoaW5lCgpgYGB7cn0KTTggPC0gc3Vic2V0KGxvZ2ZpbGUsc2VsZWN0PWMoVGltZXN0YW1wLFNlbmRlcixNZXNzYWdlLElucHV0QnVmZmVyLE91dHB1dEJ1ZmZlcixXb3JrbG9hZCxJdGVtVHlwZSksCiAgICAgICAgICAgICBzdWJzZXQ9KChtYWNoaW5lc19WPT04KSYoaXRlbXR5cGVfVj09IkUiKSYodGltZXN0YW1wc19WPD1yZW5kZXJUaW1lW2R1bW15UmVuZGVyZWRUaW1lXSkpKQoKcHJpbnQoaGVhZChNOCRPdXRwdXRCdWZmZXIpKQpwcmludCh1bmlxdWUoTTgkT3V0cHV0QnVmZmVyKSkKI3ByaW50KGNvdW50KChNOCRPdXRwdXRCdWZmZXIpKSkKY2xhc3MoTTgkT3V0cHV0QnVmZmVyKQojb3V0cHV0IDwtIGFicyhNOCRPdXRwdXRCdWZmZXIpCgojIHBhcihtZnJvdyA9IGMoMSwxKSkKIyBwbG90KE04JFRpbWVzdGFtcCxvdXRwdXQsIG1haW49IkJ1aWdtYWNoaW5lIix4bGFiID0gIlRpbWVzdGFtcCBpbiBzZWNvbmRzIix5bGFiPSIxc3Qgb3V0cHV0YnVmZmVyIikKIyBsaW5lcyhNOCRUaW1lc3RhbXAsTTgkT3V0cHV0QnVmZmVyKQoKI3ByaW50KGhlYWQoTTgsIG49NTApKQojcHJpbnQodGFpbChNOCwgbj01MCkpCgojIHBhcihtZnJvdyA9IGMoMSwyKSkKIyBnZWJvZ2VuUG90ZW4gPC0gTTgkT3V0cHV0QnVmZmVyCiMgZ2Vib2dlblBvdGVuIDwtIGFzLm51bWVyaWMoZ2Vib2dlblBvdGVuKQojIGhpc3QoZ2Vib2dlblBvdGVuLG1haW49IkdlYm9nZW4gbHV4ZSBwb3RlbiIsIHhsYWI9ImJ1Y2tldCBncm9vdHRlIiwgeWxhYj0iaG9ldmVlbGhlaWQgbHV4ZSBnZWJvZ2VuIHBvdGVuIikKCiNkIDwtIGRlbnNpdHkoZ2V6YWFnZGVCbGFkZW4pCiNwbG90KGQpCiNwb2x5Z29uKGQsY29sPSJyZWQiLGJvcmRlcj0iYmx1ZSIpCgojIHhheGlzIDwtIHNlcSgxOmxlbmd0aChnZWJvZ2VuUG90ZW4pKQojIGJveHBsb3QoeCA9IGdlYm9nZW5Qb3Rlbix5ID0geGF4aXMsIG1haW49ImJveHBsb3QgbHV4ZSBnZWJvZ2VuIHBvdGVuIiwgeWxhYj0iSG9ldmVlbGhlaWQgbHV4ZSBnZWJvZ2VuIHBvdGVuIikKCiNwcmludChzdW1tYXJ5KGdlemFhZ2RlQmxhZGVuKSkKI3ByaW50KHVuaXF1ZShnZXphYWdkZUJsYWRlbikpCmBgYAoKIyMjIE1hY2hpbmUgOSAtIExhc21hY2hpbmUKCmBgYHtyIGVjaG89RkFMU0V9Ck05IDwtIHN1YnNldChsb2dmaWxlLHNlbGVjdD1jKFRpbWVzdGFtcCxTZW5kZXIsTWVzc2FnZSxJbnB1dEJ1ZmZlcixPdXRwdXRCdWZmZXIsV29ya2xvYWQpLAogICAgICAgICAgICAgc3Vic2V0PSgobWFjaGluZXNfVj09OSkmKGl0ZW10eXBlX1Y9PSJFIikmKHRpbWVzdGFtcHNfVjw9cmVuZGVyVGltZVtkdW1teVJlbmRlcmVkVGltZV0pKSkKCnBhcihtZnJvdyA9IGMoMSwxKSkKcGxvdChNOSRUaW1lc3RhbXAsTTkkT3V0cHV0QnVmZmVyLG1haW49Ikxhc21hY2hpbmUiLHhsYWIgPSAiVGltZXN0YW1wIGluIHNlY29uZHMiLHlsYWI9IjJuZCBvdXRwdXRidWZmZXIiKQpsaW5lcyhNOSRUaW1lc3RhbXAsTTkkT3V0cHV0QnVmZmVyKQoKcGFyKG1mcm93ID0gYygxLDIpKQpnZWxhc2RlUG90ZW4gPC0gTTkkT3V0cHV0QnVmZmVyCmdlbGFzZGVQb3RlbiA8LSBhcy5udW1lcmljKGdlbGFzZGVQb3RlbikKaGlzdChnZWxhc2RlUG90ZW4sbWFpbj0iR2VsYXNkZSBsdXhlIHBvdGVuIiwgeGxhYj0iYnVja2V0IGdyb290dGUiLCB5bGFiPSJob2V2ZWVsaGVpZCBnZWxhc2RlIGx1eGUgcG90ZW4iKQoKeGF4aXMgPC0gc2VxKDE6bGVuZ3RoKGdlbGFzZGVQb3RlbikpCmJveHBsb3QoZ2VsYXNkZVBvdGVuLHkgPSB4YXhpcywgbWFpbj0iYm94cGxvdCBsdXhlIGdlbGFzZGUgcG90ZW4iLCB5bGFiPSJIb2V2ZWVsaGVpZCBsdXhlIGdlbGFzZGUgcG90ZW4iKQoKI3ByaW50KHN1bW1hcnkoZ2VsYXNkZVBvdGVuKSkKYGBgCgojIyMgTWFjaGluZSAxMSAtIHBvbGlqc3RtYWNoaW5lCgpgYGB7ciBlY2hvPUZBTFNFfQpNMTEgPC0gc3Vic2V0KGxvZ2ZpbGUsc2VsZWN0PWMoVGltZXN0YW1wLFNlbmRlcixNZXNzYWdlLElucHV0QnVmZmVyLE91dHB1dEJ1ZmZlcixXb3JrbG9hZCksCiAgICAgICAgICAgICAgc3Vic2V0PSgobWFjaGluZXNfVj09MTEpJihpdGVtdHlwZV9WPT0iRSIpJih0aW1lc3RhbXBzX1Y8PXJlbmRlclRpbWVbZHVtbXlSZW5kZXJlZFRpbWVdKSkpCgpwYXIobWZyb3cgPSBjKDEsMSkpCnBsb3QoTTExJFRpbWVzdGFtcCxNMTEkT3V0cHV0QnVmZmVyLG1haW49IlBvbGlqc3RtYWNoaW5lIix4bGFiID0gIlRpbWVzdGFtcCBpbiBzZWNvbmRzIix5bGFiPSJmaW5hbCBvdXRwdXRidWZmZXIiKQpsaW5lcyhNMTEkVGltZXN0YW1wLE0xMSRPdXRwdXRCdWZmZXIpCgpwYXIobWZyb3cgPSBjKDEsMikpCmdlcG9saWpzdGVQb3RlbiA8LSBNMTEkT3V0cHV0QnVmZmVyCmdlcG9saWpzdGVQb3RlbiA8LSBhcy5udW1lcmljKGdlcG9saWpzdGVQb3RlbikKaGlzdChnZXBvbGlqc3RlUG90ZW4pCmJveHBsb3QoZ2Vwb2xpanN0ZVBvdGVuKQoKI3ByaW50KHN1bW1hcnkoZ2Vjb2F0ZVBvdGVuKSkKYGBgCgotLS0K