NASAL

N_RETROPOSITION_MM

tree<-rpart::rpart(N_POSITION~N_RETROPOSITION_MM,data=retropostion_data,control = rpart.control(minsplit = 10))
rpart.plot(tree,type=1,
           extra=101, box.palette="GnBu",
           branch.lty=3, shadow.col="gray", nn=TRUE
        )

rpart.rules(tree)
preds<-predict(tree,retropostion_data,type = 'class')
caret::confusionMatrix(preds,as.factor(retropostion_data$N_POSITION))
Confusion Matrix and Statistics

          Reference
Prediction CA CP  S
        CA  6  1  0
        CP  4 46  0
        S   0  0  6

Overall Statistics
                                          
               Accuracy : 0.9206          
                 95% CI : (0.8244, 0.9737)
    No Information Rate : 0.746           
    P-Value [Acc > NIR] : 0.0004041       
                                          
                  Kappa : 0.7918          
                                          
 Mcnemar's Test P-Value : NA              

Statistics by Class:

                     Class: CA Class: CP Class: S
Sensitivity            0.60000    0.9787  1.00000
Specificity            0.98113    0.7500  1.00000
Pos Pred Value         0.85714    0.9200  1.00000
Neg Pred Value         0.92857    0.9231  1.00000
Prevalence             0.15873    0.7460  0.09524
Detection Rate         0.09524    0.7302  0.09524
Detection Prevalence   0.11111    0.7937  0.09524
Balanced Accuracy      0.79057    0.8644  1.00000
cbind(id=1:nrow(retropostion_data),retropostion_data,N_POSITION_PREDICTED=as.character(preds)) %>% as.data.frame() %>% filter(N_POSITION!=N_POSITION_PREDICTED) %>% select(NAME,N_POSITION,N_POSITION_PREDICTED)
NA
NA

NORM_N_RETROPOSITION_MM

tree<-rpart::rpart(N_POSITION~NORM_N_RETROPOSITION,data=retropostion_data,control = rpart.control(minsplit = 10))
rpart.plot(tree,type=1,
           extra=101, box.palette="GnBu",
           branch.lty=3, shadow.col="gray", nn=TRUE
        )

rpart.rules(tree)

preds<-predict(tree,retropostion_data,type = 'class')
caret::confusionMatrix(preds,as.factor(retropostion_data$N_POSITION))
Confusion Matrix and Statistics

          Reference
Prediction CA CP  S
        CA  4  0  2
        CP  6 47  0
        S   0  0  4

Overall Statistics
                                         
               Accuracy : 0.873          
                 95% CI : (0.765, 0.9435)
    No Information Rate : 0.746          
    P-Value [Acc > NIR] : 0.01097        
                                         
                  Kappa : 0.6385         
                                         
 Mcnemar's Test P-Value : NA             

Statistics by Class:

                     Class: CA Class: CP Class: S
Sensitivity            0.40000    1.0000  0.66667
Specificity            0.96226    0.6250  1.00000
Pos Pred Value         0.66667    0.8868  1.00000
Neg Pred Value         0.89474    1.0000  0.96610
Prevalence             0.15873    0.7460  0.09524
Detection Rate         0.06349    0.7460  0.06349
Detection Prevalence   0.09524    0.8413  0.06349
Balanced Accuracy      0.68113    0.8125  0.83333

NORM_N_RETRO_HALF_IOL

tree<-rpart::rpart(N_POSITION~NORM_N_RETRO_HALF_IOL,data=retropostion_data,control = rpart.control(minsplit = 10))
rpart.plot(tree,type=1,
           extra=101, box.palette="GnBu",
           branch.lty=3, shadow.col="gray", nn=TRUE
        )

rpart.rules(tree)

preds<-predict(tree,retropostion_data,type = 'class')
caret::confusionMatrix(preds,as.factor(retropostion_data$N_POSITION))
Confusion Matrix and Statistics

          Reference
Prediction CA CP  S
        CA  4  0  3
        CP  6 47  0
        S   0  0  3

Overall Statistics
                                          
               Accuracy : 0.8571          
                 95% CI : (0.7461, 0.9325)
    No Information Rate : 0.746           
    P-Value [Acc > NIR] : 0.02497         
                                          
                  Kappa : 0.5921          
                                          
 Mcnemar's Test P-Value : NA              

Statistics by Class:

                     Class: CA Class: CP Class: S
Sensitivity            0.40000    1.0000  0.50000
Specificity            0.94340    0.6250  1.00000
Pos Pred Value         0.57143    0.8868  1.00000
Neg Pred Value         0.89286    1.0000  0.95000
Prevalence             0.15873    0.7460  0.09524
Detection Rate         0.06349    0.7460  0.04762
Detection Prevalence   0.11111    0.8413  0.04762
Balanced Accuracy      0.67170    0.8125  0.75000

NORM_N_RETRO_IOL

tree<-rpart::rpart(N_POSITION~NORM_N_RETRO_IOL,data=retropostion_data,control = rpart.control(minsplit = 10))
rpart.plot(tree,type=1,
           extra=101, box.palette="GnBu",
           branch.lty=3, shadow.col="gray", nn=TRUE
        )

rpart.rules(tree)

preds<-predict(tree,retropostion_data,type = 'class')
caret::confusionMatrix(preds,as.factor(retropostion_data$N_POSITION))
Confusion Matrix and Statistics

          Reference
Prediction CA CP  S
        CA  7  2  4
        CP  3 45  2
        S   0  0  0

Overall Statistics
                                         
               Accuracy : 0.8254         
                 95% CI : (0.709, 0.9095)
    No Information Rate : 0.746          
    P-Value [Acc > NIR] : 0.09291        
                                         
                  Kappa : 0.5346         
                                         
 Mcnemar's Test P-Value : 0.10228        

Statistics by Class:

                     Class: CA Class: CP Class: S
Sensitivity             0.7000    0.9574  0.00000
Specificity             0.8868    0.6875  1.00000
Pos Pred Value          0.5385    0.9000      NaN
Neg Pred Value          0.9400    0.8462  0.90476
Prevalence              0.1587    0.7460  0.09524
Detection Rate          0.1111    0.7143  0.00000
Detection Prevalence    0.2063    0.7937  0.00000
Balanced Accuracy       0.7934    0.8225  0.50000

TEMPORAL

T_RETROPOSITION_MM

tree<-rpart::rpart(T_POSITION~T_RETROPOSITION_MM,data=retropostion_data,control = rpart.control(minsplit = 10))
rpart.plot(tree,type=1,
           extra=101, box.palette="GnBu",
           branch.lty=3, shadow.col="gray", nn=TRUE
        )

rpart.rules(tree)

preds<-predict(tree,retropostion_data,type = 'class')
caret::confusionMatrix(preds,as.factor(retropostion_data$T_POSITION))
Confusion Matrix and Statistics

          Reference
Prediction CA CP  S
        CA  2  1  0
        CP  2 48  1
        S   2  0  7

Overall Statistics
                                          
               Accuracy : 0.9048          
                 95% CI : (0.8041, 0.9642)
    No Information Rate : 0.7778          
    P-Value [Acc > NIR] : 0.007371        
                                          
                  Kappa : 0.7261          
                                          
 Mcnemar's Test P-Value : 0.343030        

Statistics by Class:

                     Class: CA Class: CP Class: S
Sensitivity            0.33333    0.9796   0.8750
Specificity            0.98246    0.7857   0.9636
Pos Pred Value         0.66667    0.9412   0.7778
Neg Pred Value         0.93333    0.9167   0.9815
Prevalence             0.09524    0.7778   0.1270
Detection Rate         0.03175    0.7619   0.1111
Detection Prevalence   0.04762    0.8095   0.1429
Balanced Accuracy      0.65789    0.8827   0.9193
cbind(id=1:nrow(retropostion_data),retropostion_data,T_POSITION_PREDICTED=as.character(preds)) %>% as.data.frame() %>% filter(T_POSITION!=T_POSITION_PREDICTED) %>% select(NAME,T_POSITION,T_POSITION_PREDICTED)

NORM_T_RETROPOSITION

tree<-rpart::rpart(T_POSITION~NORM_T_RETROPOSITION,data=retropostion_data,control = rpart.control(minsplit = 10))
rpart.plot(tree,type=1,
           extra=101, box.palette="GnBu",
           branch.lty=3, shadow.col="gray", nn=TRUE
        )

rpart.rules(tree)

preds<-predict(tree,retropostion_data,type = 'class')
caret::confusionMatrix(preds,as.factor(retropostion_data$T_POSITION))
Confusion Matrix and Statistics

          Reference
Prediction CA CP  S
        CA  2  1  0
        CP  2 48  1
        S   2  0  7

Overall Statistics
                                          
               Accuracy : 0.9048          
                 95% CI : (0.8041, 0.9642)
    No Information Rate : 0.7778          
    P-Value [Acc > NIR] : 0.007371        
                                          
                  Kappa : 0.7261          
                                          
 Mcnemar's Test P-Value : 0.343030        

Statistics by Class:

                     Class: CA Class: CP Class: S
Sensitivity            0.33333    0.9796   0.8750
Specificity            0.98246    0.7857   0.9636
Pos Pred Value         0.66667    0.9412   0.7778
Neg Pred Value         0.93333    0.9167   0.9815
Prevalence             0.09524    0.7778   0.1270
Detection Rate         0.03175    0.7619   0.1111
Detection Prevalence   0.04762    0.8095   0.1429
Balanced Accuracy      0.65789    0.8827   0.9193

NORM_T_RETRO_HALF_IOL

tree<-rpart::rpart(T_POSITION~NORM_T_RETRO_HALF_IOL,data=retropostion_data,control = rpart.control(minsplit = 10))
rpart.plot(tree,type=1,
           extra=101, box.palette="GnBu",
           branch.lty=3, shadow.col="gray", nn=TRUE
        )

rpart.rules(tree)

preds<-predict(tree,retropostion_data,type = 'class')
caret::confusionMatrix(preds,as.factor(retropostion_data$T_POSITION))
Confusion Matrix and Statistics

          Reference
Prediction CA CP  S
        CA  0  0  0
        CP  4 49  1
        S   2  0  7

Overall Statistics
                                          
               Accuracy : 0.8889          
                 95% CI : (0.7844, 0.9541)
    No Information Rate : 0.7778          
    P-Value [Acc > NIR] : 0.01881         
                                          
                  Kappa : 0.6475          
                                          
 Mcnemar's Test P-Value : 0.07190         

Statistics by Class:

                     Class: CA Class: CP Class: S
Sensitivity            0.00000    1.0000   0.8750
Specificity            1.00000    0.6429   0.9636
Pos Pred Value             NaN    0.9074   0.7778
Neg Pred Value         0.90476    1.0000   0.9815
Prevalence             0.09524    0.7778   0.1270
Detection Rate         0.00000    0.7778   0.1111
Detection Prevalence   0.00000    0.8571   0.1429
Balanced Accuracy      0.50000    0.8214   0.9193

NORM_T_RETRO_IOL

tree<-rpart::rpart(T_POSITION~NORM_T_RETRO_IOL,data=retropostion_data,control = rpart.control(minsplit = 10))
rpart.plot(tree,type=1,
           extra=101, box.palette="GnBu",
           branch.lty=3, shadow.col="gray", nn=TRUE
        )

rpart.rules(tree)

preds<-predict(tree,retropostion_data,type = 'class')
caret::confusionMatrix(preds,as.factor(retropostion_data$T_POSITION))
Confusion Matrix and Statistics

          Reference
Prediction CA CP  S
        CA  0  0  0
        CP  4 49  5
        S   2  0  3

Overall Statistics
                                         
               Accuracy : 0.8254         
                 95% CI : (0.709, 0.9095)
    No Information Rate : 0.7778         
    P-Value [Acc > NIR] : 0.22809        
                                         
                  Kappa : 0.3625         
                                         
 Mcnemar's Test P-Value : 0.01173        

Statistics by Class:

                     Class: CA Class: CP Class: S
Sensitivity            0.00000    1.0000  0.37500
Specificity            1.00000    0.3571  0.96364
Pos Pred Value             NaN    0.8448  0.60000
Neg Pred Value         0.90476    1.0000  0.91379
Prevalence             0.09524    0.7778  0.12698
Detection Rate         0.00000    0.7778  0.04762
Detection Prevalence   0.00000    0.9206  0.07937
Balanced Accuracy      0.50000    0.6786  0.66932
LS0tCnRpdGxlOiAiSVogSUNMIFBPU0lUSU9OIEFOQUxZU0lTIChSRVRFU1RJTkcpIgpvdXRwdXQ6IAogIGh0bWxfbm90ZWJvb2s6IAogICAgY29kZV9mb2xkaW5nOiBoaWRlCiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgdG9jX2NvbGxhcHNlZDogdHJ1ZQotLS0KCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQpsaWJyYXJ5KHNraW1yKQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KHRpZHlyKQpsaWJyYXJ5KHRpYmJsZSkKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KFZJTSkKbGlicmFyeShyZWFkcikKbGlicmFyeShycGFydC5wbG90KQpgYGAKCmBgYHtyIGluY2x1ZGU9RkFMU0V9CnBvc3RvcF9kYXRhPC1yZWFkcjo6cmVhZF9jc3YoZmlsZSA9ICJwb3N0b3BfZGF0YV9jbGVhbmVkX25vcm1hbGl6ZWQtdmVyc2lvbjUtcmV0ZXN0LmNzdiIpCnJldHJvcG9zdGlvbl9kYXRhPC1wb3N0b3BfZGF0YSAlPiUgc2VsZWN0KE5BTUUsTk9STV9OX1JFVFJPUE9TSVRJT04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PUk1fVF9SRVRST1BPU0lUSU9OLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQT1NJVElPTixOX1JFVFJPUE9TSVRJT05fTU0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRfUkVUUk9QT1NJVElPTl9NTSxSRVRFU1RfUE9TSVRJT04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PUk1fVF9SRVRST19IQUxGX0lPTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTk9STV9OX1JFVFJPX0hBTEZfSU9MLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOT1JNX1RfUkVUUk9fSU9MLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOT1JNX05fUkVUUk9fSU9MCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAlPiUgZmlsdGVyKCFpcy5uYShSRVRFU1RfUE9TSVRJT04pKSAlPiUgc2VwYXJhdGUoUkVURVNUX1BPU0lUSU9OLGludG89YygiTl9QT1NJVElPTiIsIlRfUE9TSVRJT04iKSxzZXA9Jy0nKSAlPiUgZHJvcF9uYShUX1BPU0lUSU9OKSAlPiUgZHJvcF9uYShOT1JNX1RfUkVUUk9QT1NJVElPTikKCgpyZXRyb3Bvc3Rpb25fZGF0YTwtcmV0cm9wb3N0aW9uX2RhdGEgJT4lIG11dGF0ZShUX1BPU0lUSU9OPWlmZWxzZShUX1BPU0lUSU9OPT0iQ00iLCJDQSIsVF9QT1NJVElPTiksTl9QT1NJVElPTj1pZmVsc2UoTl9QT1NJVElPTj09IkNNIiwiQ0EiLE5fUE9TSVRJT04pKQpyZXRyb3Bvc3Rpb25fZGF0YQpgYGAKCiMgTkFTQUwKIyMgTl9SRVRST1BPU0lUSU9OX01NCgpgYGB7cn0KdHJlZTwtcnBhcnQ6OnJwYXJ0KE5fUE9TSVRJT05+Tl9SRVRST1BPU0lUSU9OX01NLGRhdGE9cmV0cm9wb3N0aW9uX2RhdGEsY29udHJvbCA9IHJwYXJ0LmNvbnRyb2wobWluc3BsaXQgPSAxMCkpCnJwYXJ0LnBsb3QodHJlZSx0eXBlPTEsCiAgICAgICAgICAgZXh0cmE9MTAxLCBib3gucGFsZXR0ZT0iR25CdSIsCiAgICAgICAgICAgYnJhbmNoLmx0eT0zLCBzaGFkb3cuY29sPSJncmF5Iiwgbm49VFJVRQogICAgICAgICkKcnBhcnQucnVsZXModHJlZSkKcHJlZHM8LXByZWRpY3QodHJlZSxyZXRyb3Bvc3Rpb25fZGF0YSx0eXBlID0gJ2NsYXNzJykKY2FyZXQ6OmNvbmZ1c2lvbk1hdHJpeChwcmVkcyxhcy5mYWN0b3IocmV0cm9wb3N0aW9uX2RhdGEkTl9QT1NJVElPTikpCmNiaW5kKGlkPTE6bnJvdyhyZXRyb3Bvc3Rpb25fZGF0YSkscmV0cm9wb3N0aW9uX2RhdGEsTl9QT1NJVElPTl9QUkVESUNURUQ9YXMuY2hhcmFjdGVyKHByZWRzKSkgJT4lIGFzLmRhdGEuZnJhbWUoKSAlPiUgZmlsdGVyKE5fUE9TSVRJT04hPU5fUE9TSVRJT05fUFJFRElDVEVEKSAlPiUgc2VsZWN0KE5BTUUsTl9QT1NJVElPTixOX1BPU0lUSU9OX1BSRURJQ1RFRCkKCgpgYGAKIyMgTk9STV9OX1JFVFJPUE9TSVRJT05fTU0KYGBge3J9CnRyZWU8LXJwYXJ0OjpycGFydChOX1BPU0lUSU9Ofk5PUk1fTl9SRVRST1BPU0lUSU9OLGRhdGE9cmV0cm9wb3N0aW9uX2RhdGEsY29udHJvbCA9IHJwYXJ0LmNvbnRyb2wobWluc3BsaXQgPSAxMCkpCnJwYXJ0LnBsb3QodHJlZSx0eXBlPTEsCiAgICAgICAgICAgZXh0cmE9MTAxLCBib3gucGFsZXR0ZT0iR25CdSIsCiAgICAgICAgICAgYnJhbmNoLmx0eT0zLCBzaGFkb3cuY29sPSJncmF5Iiwgbm49VFJVRQogICAgICAgICkKcnBhcnQucnVsZXModHJlZSkKCnByZWRzPC1wcmVkaWN0KHRyZWUscmV0cm9wb3N0aW9uX2RhdGEsdHlwZSA9ICdjbGFzcycpCmNhcmV0Ojpjb25mdXNpb25NYXRyaXgocHJlZHMsYXMuZmFjdG9yKHJldHJvcG9zdGlvbl9kYXRhJE5fUE9TSVRJT04pKQpgYGAKCiMjIE5PUk1fTl9SRVRST19IQUxGX0lPTAoKYGBge3J9CnRyZWU8LXJwYXJ0OjpycGFydChOX1BPU0lUSU9Ofk5PUk1fTl9SRVRST19IQUxGX0lPTCxkYXRhPXJldHJvcG9zdGlvbl9kYXRhLGNvbnRyb2wgPSBycGFydC5jb250cm9sKG1pbnNwbGl0ID0gMTApKQpycGFydC5wbG90KHRyZWUsdHlwZT0xLAogICAgICAgICAgIGV4dHJhPTEwMSwgYm94LnBhbGV0dGU9IkduQnUiLAogICAgICAgICAgIGJyYW5jaC5sdHk9Mywgc2hhZG93LmNvbD0iZ3JheSIsIG5uPVRSVUUKICAgICAgICApCnJwYXJ0LnJ1bGVzKHRyZWUpCgpwcmVkczwtcHJlZGljdCh0cmVlLHJldHJvcG9zdGlvbl9kYXRhLHR5cGUgPSAnY2xhc3MnKQpjYXJldDo6Y29uZnVzaW9uTWF0cml4KHByZWRzLGFzLmZhY3RvcihyZXRyb3Bvc3Rpb25fZGF0YSROX1BPU0lUSU9OKSkKYGBgCgojIyBOT1JNX05fUkVUUk9fSU9MCgpgYGB7cn0KdHJlZTwtcnBhcnQ6OnJwYXJ0KE5fUE9TSVRJT05+Tk9STV9OX1JFVFJPX0lPTCxkYXRhPXJldHJvcG9zdGlvbl9kYXRhLGNvbnRyb2wgPSBycGFydC5jb250cm9sKG1pbnNwbGl0ID0gMTApKQpycGFydC5wbG90KHRyZWUsdHlwZT0xLAogICAgICAgICAgIGV4dHJhPTEwMSwgYm94LnBhbGV0dGU9IkduQnUiLAogICAgICAgICAgIGJyYW5jaC5sdHk9Mywgc2hhZG93LmNvbD0iZ3JheSIsIG5uPVRSVUUKICAgICAgICApCnJwYXJ0LnJ1bGVzKHRyZWUpCgpwcmVkczwtcHJlZGljdCh0cmVlLHJldHJvcG9zdGlvbl9kYXRhLHR5cGUgPSAnY2xhc3MnKQpjYXJldDo6Y29uZnVzaW9uTWF0cml4KHByZWRzLGFzLmZhY3RvcihyZXRyb3Bvc3Rpb25fZGF0YSROX1BPU0lUSU9OKSkKYGBgCgoKIyBURU1QT1JBTAoKIyMgVF9SRVRST1BPU0lUSU9OX01NCgpgYGB7cn0KdHJlZTwtcnBhcnQ6OnJwYXJ0KFRfUE9TSVRJT05+VF9SRVRST1BPU0lUSU9OX01NLGRhdGE9cmV0cm9wb3N0aW9uX2RhdGEsY29udHJvbCA9IHJwYXJ0LmNvbnRyb2wobWluc3BsaXQgPSAxMCkpCnJwYXJ0LnBsb3QodHJlZSx0eXBlPTEsCiAgICAgICAgICAgZXh0cmE9MTAxLCBib3gucGFsZXR0ZT0iR25CdSIsCiAgICAgICAgICAgYnJhbmNoLmx0eT0zLCBzaGFkb3cuY29sPSJncmF5Iiwgbm49VFJVRQogICAgICAgICkKcnBhcnQucnVsZXModHJlZSkKCnByZWRzPC1wcmVkaWN0KHRyZWUscmV0cm9wb3N0aW9uX2RhdGEsdHlwZSA9ICdjbGFzcycpCmNhcmV0Ojpjb25mdXNpb25NYXRyaXgocHJlZHMsYXMuZmFjdG9yKHJldHJvcG9zdGlvbl9kYXRhJFRfUE9TSVRJT04pKQpjYmluZChpZD0xOm5yb3cocmV0cm9wb3N0aW9uX2RhdGEpLHJldHJvcG9zdGlvbl9kYXRhLFRfUE9TSVRJT05fUFJFRElDVEVEPWFzLmNoYXJhY3RlcihwcmVkcykpICU+JSBhcy5kYXRhLmZyYW1lKCkgJT4lIGZpbHRlcihUX1BPU0lUSU9OIT1UX1BPU0lUSU9OX1BSRURJQ1RFRCkgJT4lIHNlbGVjdChOQU1FLFRfUE9TSVRJT04sVF9QT1NJVElPTl9QUkVESUNURUQpCmBgYAoKIyMgTk9STV9UX1JFVFJPUE9TSVRJT04KCmBgYHtyfQp0cmVlPC1ycGFydDo6cnBhcnQoVF9QT1NJVElPTn5OT1JNX1RfUkVUUk9QT1NJVElPTixkYXRhPXJldHJvcG9zdGlvbl9kYXRhLGNvbnRyb2wgPSBycGFydC5jb250cm9sKG1pbnNwbGl0ID0gMTApKQpycGFydC5wbG90KHRyZWUsdHlwZT0xLAogICAgICAgICAgIGV4dHJhPTEwMSwgYm94LnBhbGV0dGU9IkduQnUiLAogICAgICAgICAgIGJyYW5jaC5sdHk9Mywgc2hhZG93LmNvbD0iZ3JheSIsIG5uPVRSVUUKICAgICAgICApCnJwYXJ0LnJ1bGVzKHRyZWUpCgpwcmVkczwtcHJlZGljdCh0cmVlLHJldHJvcG9zdGlvbl9kYXRhLHR5cGUgPSAnY2xhc3MnKQpjYXJldDo6Y29uZnVzaW9uTWF0cml4KHByZWRzLGFzLmZhY3RvcihyZXRyb3Bvc3Rpb25fZGF0YSRUX1BPU0lUSU9OKSkKYGBgCgoKIyMgTk9STV9UX1JFVFJPX0hBTEZfSU9MCmBgYHtyfQp0cmVlPC1ycGFydDo6cnBhcnQoVF9QT1NJVElPTn5OT1JNX1RfUkVUUk9fSEFMRl9JT0wsZGF0YT1yZXRyb3Bvc3Rpb25fZGF0YSxjb250cm9sID0gcnBhcnQuY29udHJvbChtaW5zcGxpdCA9IDEwKSkKcnBhcnQucGxvdCh0cmVlLHR5cGU9MSwKICAgICAgICAgICBleHRyYT0xMDEsIGJveC5wYWxldHRlPSJHbkJ1IiwKICAgICAgICAgICBicmFuY2gubHR5PTMsIHNoYWRvdy5jb2w9ImdyYXkiLCBubj1UUlVFCiAgICAgICAgKQpycGFydC5ydWxlcyh0cmVlKQoKcHJlZHM8LXByZWRpY3QodHJlZSxyZXRyb3Bvc3Rpb25fZGF0YSx0eXBlID0gJ2NsYXNzJykKY2FyZXQ6OmNvbmZ1c2lvbk1hdHJpeChwcmVkcyxhcy5mYWN0b3IocmV0cm9wb3N0aW9uX2RhdGEkVF9QT1NJVElPTikpCmBgYAoKCiMjIE5PUk1fVF9SRVRST19JT0wKYGBge3J9CnRyZWU8LXJwYXJ0OjpycGFydChUX1BPU0lUSU9Ofk5PUk1fVF9SRVRST19JT0wsZGF0YT1yZXRyb3Bvc3Rpb25fZGF0YSxjb250cm9sID0gcnBhcnQuY29udHJvbChtaW5zcGxpdCA9IDEwKSkKcnBhcnQucGxvdCh0cmVlLHR5cGU9MSwKICAgICAgICAgICBleHRyYT0xMDEsIGJveC5wYWxldHRlPSJHbkJ1IiwKICAgICAgICAgICBicmFuY2gubHR5PTMsIHNoYWRvdy5jb2w9ImdyYXkiLCBubj1UUlVFCiAgICAgICAgKQpycGFydC5ydWxlcyh0cmVlKQoKcHJlZHM8LXByZWRpY3QodHJlZSxyZXRyb3Bvc3Rpb25fZGF0YSx0eXBlID0gJ2NsYXNzJykKY2FyZXQ6OmNvbmZ1c2lvbk1hdHJpeChwcmVkcyxhcy5mYWN0b3IocmV0cm9wb3N0aW9uX2RhdGEkVF9QT1NJVElPTikpCmBgYAoK