summaryrefslogtreecommitdiffstats
path: root/afb-client/dist.prod/opa
diff options
context:
space:
mode:
Diffstat (limited to 'afb-client/dist.prod/opa')
-rw-r--r--afb-client/dist.prod/opa/AFBclient.min.css9
-rw-r--r--afb-client/dist.prod/opa/AFBclient.min.js2
-rw-r--r--afb-client/dist.prod/opa/images/avatars/istoobig.jpgbin0 -> 7204 bytes
-rw-r--r--afb-client/dist.prod/opa/images/avatars/istoobig.pngbin0 -> 15144 bytes
-rw-r--r--afb-client/dist.prod/opa/images/avatars/tux-admin.pngbin0 -> 15107 bytes
-rw-r--r--afb-client/dist.prod/opa/images/avatars/tux-bzh.pngbin0 -> 18451 bytes
-rw-r--r--afb-client/dist.prod/opa/images/avatars/tux-visitor.pngbin0 -> 29307 bytes
-rw-r--r--afb-client/dist.prod/opa/images/logo/logo_iot_bzh.svg1
-rw-r--r--afb-client/dist.prod/opa/images/logo/logo_iot_bzhx350.pngbin0 -> 9416 bytes
-rw-r--r--afb-client/dist.prod/opa/images/logo/tampon-iot-bzhx450.pngbin0 -> 19420 bytes
-rw-r--r--afb-client/dist.prod/opa/images/logo/triskel_iot_bzh.pngbin0 -> 30976 bytes
-rw-r--r--afb-client/dist.prod/opa/images/logo/triskel_iot_bzh.svg1
-rw-r--r--afb-client/dist.prod/opa/images/logo/triskel_iot_bzhx250.pngbin0 -> 9799 bytes
-rw-r--r--afb-client/dist.prod/opa/index.html3
14 files changed, 16 insertions, 0 deletions
diff --git a/afb-client/dist.prod/opa/AFBclient.min.css b/afb-client/dist.prod/opa/AFBclient.min.css
new file mode 100644
index 0000000..1c16956
--- /dev/null
+++ b/afb-client/dist.prod/opa/AFBclient.min.css
@@ -0,0 +1,9 @@
+submit-button{float:right;display:inline-block;border:1px solid #676767;box-shadow:2px 2px 1px gray;color:grey;border-radius:5px;font-style:italic;padding:0 .5rem;margin:.5rem;background:#d1d1e0}submit-button i{padding-right:.3rem;font-size:2rem}submit-button span{font-size:1rem}submit-button:hover{background:#f3f3f3;border:2px solid #4d4d4d}zf-modal{background-color:rgba(180,180,180,.5)}.box-content{border:2px solid #dcdcdc!important;border-radius:5px;min-width:98%!important;margin:.5rem;background:rgba(200,205,200,.3)}.box-content .box-title{display:block;font-size:1.3rem}.ui-notification{width:auto;border-radius:5px}
+token-refresh{display:block;float:right;margin:.5rem 1rem 0 0}.button-box{height:4.5rem}.button-box .session-button{float:left;width:5rem}.button-box .response>span{display:block;margin:.3rem .5rem}.button-box .fail{color:red;border:1px solid #c00}.button-box .success{color:green;border:1px solid #004d00}.message-box{height:auto;width:100%;font-size:.75rem}.message-box .response .err-no{color:grey}.message-box .response .res.err-ok{color:#00f}.message-box .response .req.err-ok{color:#8a2be2}.message-box .response .status.err-ok{color:green}.message-box .response .status.err-fx{color:red}
+.sample-box{display:block;height:4.5rem}.sample-box .sample-button{float:right;width:5rem}.sample-box .muted-off-off,.sample-box .muted-on-on{background:#8a2be2}.sample-box .muted-error{background:red}
+appli-button i,appli-button span{font-size:1rem}appli-button{display:inline-block;border:1px solid #676767;box-shadow:2px 2px 1px gray;color:grey;border-radius:5px;font-style:italic;padding:0 .5rem;margin:.5rem;background:#d1d1e0}appli-button i{padding-right:.3rem}appli-button:hover{background:#f3f3f3;border:2px solid #4d4d4d}appli-button img{height:3rem}appli-button .disable>i{text-decoration:none;cursor:auto;color:grey!important}.appli-menu-start .start-start i,.appli-menu-start .stop-stop i{color:grey}
+.upload-file{display:inline-block;float:right;height:5rem;width:5rem;margin:.5rem}.upload-file img{height:inherit}.upload-file .ibz-range-slider{height:10%!important;border-radius:5px;background-color:#d3d3d3!important}.upload-file .ibz-range-slider .range-slider-handle{width:10%!important;height:100%!important;margin-top:.2rem;background-color:purple!important}.upload-file .ibz-range-slider .range-slider-active-segment{height:80%!important;background-color:#90ee90}input-text alert{position:fixed;margin:-2.2rem 0 0 15rem;border-radius:5px;font-style:italic;border-color:rgba(175,175,175,.6);color:#00008b;background-color:rgba(200,200,200,.6)!important;padding:.2rem!important}input-text input{margin-bottom:.5rem!important}input-text label{margin-top:1rem!important}input-text .required{float:right;color:#87cefa}input-text .required.valid{color:green}input-text .required.invalid{color:plum}input-text .status-untouch{border-color:rgba(200,200,200,.6)!important;box-shadow:0 1px 1px rgba(0,0,0,.075) inset,0 0 8px rgba(200,200,200,.6)!important;color:#696969!important}input-text input:focus{border-color:rgba(82,168,236,.8);box-shadow:0 1px 1px rgba(0,0,0,.075) inset,0 0 8px rgba(82,168,236,.8)!important;transition:border .2s linear 0s,box-shadow .2s linear 0s;color:#483d8b!important}input-text .status-valid{border-color:rgba(154,205,50,.6)!important;box-shadow:0 1px 1px rgba(0,0,0,.075) inset,0 0 8px rgba(154,205,50,.6)!important}input-text .status-invalid{border-color:rgba(154,17,69,.6);box-shadow:0 1px 1px rgba(0,0,0,.075) inset,0 0 8px rgba(154,17,69,.6)!important;color:#9a1145}
+link-button,link-button.secondary{display:inline-block;font-style:italic;margin:.5rem}link-button i,link-button span,link-button.secondary span{font-size:1rem}link-button{border:1px solid #0040ff;box-shadow:2px 2px 1px #43f;color:#36f;border-radius:5px;padding:0 .5rem;background:#d1d1e0}link-button i{padding-right:.3rem}link-button:hover{background:#fff;border:2px solid #03c}link-button.secondary{border:1px solid #668dff;box-shadow:2px 2px 1px #a199ff;color:#99b3ff;border-radius:5px;padding:0 .5rem;background:#d1d1e0}link-button.secondary i{padding-right:.3rem;font-size:1rem}link-button.secondary:hover{background:#fff;border:2px solid #3367ff}
+link-button i,link-button span,token-refresh span{font-size:1rem}link-button{display:inline-block;border:1px solid #0040ff;box-shadow:2px 2px 1px #43f;color:#36f;border-radius:5px;font-style:italic;padding:0 .5rem;margin:.5rem;background:#d1d1e0}link-button i{padding-right:.3rem}link-button:hover{background:#fff;border:2px solid #03c}tip-modal{position:relative}.tip-modal-popup{width:20rem;position:absolute;top:1em;padding:.2em .6em;border:1px solid #963;background-color:#e5ffff;color:#000;opacity:0;transition:visibility .5s linear 1s,opacity 1s linear;border-radius:5px}.tip-modal-popup i{margin:0 .3rem 0 0;display:inline}token-refresh{display:inline-block;border:1px solid #676767;box-shadow:2px 2px 1px gray;color:grey;border-radius:5px;font-style:italic;padding:0 .5rem;margin:.5rem 1rem .5rem .5rem;background:#d1d1e0}token-refresh i{padding-right:.3rem;font-size:1rem;margin-left:.5rem}token-refresh:hover{background:#f3f3f3;border:2px solid #4d4d4d}token-refresh.online{color:#06c}token-refresh.online i{color:#0f0}token-refresh.offline{color:#f0f}token-refresh.offline i{color:red}
+.range-slider-handle{display:inline-block;position:absolute;z-index:1;top:-.2rem;width:2rem;height:1.375rem;border:1px solid;cursor:pointer;background:#008cba}.range-slider-handle,.range-slider.radius{background:#008cba;-webkit-border-radius:3px;border-radius:3px}.range-slider-active-segment{display:inline-block;top:.07rem;position:absolute;height:.8rem;background:#e5e5e5}.ibz-range-slider{background-color:rgba(154,205,50,.6)!important;height:1rem;position:relative}.ibz-range-slider .range-slider-active-segment{background-color:rgba(82,168,200,.6)}.ibz-range-slider-display{background-color:rgba(82,168,200,.6)!important;width:4rem!important;padding:.25rem;text-align:center}.ibz-range-slider-start,.ibz-range-slider-stop{display:inline-block;position:absolute;padding-top:2px;height:95%;background:repeating-linear-gradient(45deg,#606dbc,#606dbc 10px,#465298 10px,#465298 20px)}
+/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0eWxlcy9hcHAvaWJ6LWdsb2JhbC5zY3NzIiwic3R5bGVzL2FwcC9faWJ6LW1peGlucy5zY3NzIiwicGFnZXMvU2FtcGxlSG9tZS9TYW1wbGVIb21lLnNjc3MiLCJwYWdlcy9TYW1wbGVQb3N0L1NhbXBsZVBvc3Quc2NzcyIsIndpZGdldHMvQWN0aW9uQnV0dG9ucy9BY3Rpb25CdXR0b25zLnNjc3MiLCJ3aWRnZXRzL0Zvcm1JbnB1dC9Gb3JtSW5wdXQuc2NzcyIsIndpZGdldHMvTmF2aWdhdGlvbi9OYXZpZ2F0aW9uLnNjc3MiLCJ3aWRnZXRzL05vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9ucy5zY3NzIiwid2lkZ2V0cy9SYW5nZVNsaWRlcnMvUmFuZ2VzbGlkZXIuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvQmEsY0FDVCxNQUFPLE1DRFAsUUFBUyxhQUNULE9BQVcsSUFBTSxNQUFDLFFBQ2xCLFdBQWUsSUFBSSxJQUFJLElBQUMsS0FDeEIsTUREb0IsS0NFcEIsY0FBZSxJQUNmLFdBQVksT0FDWixRQUFTLEVBQUEsTUFDVCxPQUFPLE1BQ1AsV0FBWSxRQUNYLGdCQUNHLGNBQWUsTUFDZixVQVp5QixLQWN6QixtQkFBRSxVQUFXLEtBRVYsb0JBQ0wsV0FBWSxRQUNaLE9BQVcsSUFBTSxNQUFDLFFEWmhCLFNBQ04saUJBQWtCLHFCQUdSLGFDcEJSLE9BQVEsSUFBQSxNQUFBLGtCQUNSLGNBQWUsSUFJZixVQUFXLGNBQ1gsT0FBUSxNQUNSLFdBQVkscUJEZ0JGLHdCQUNOLFFBQVMsTUFDVCxVQUFXLE9BS0gsaUJBQ1osTUFBTyxLQUNQLGNBQWU7QUVsQk4sY0FDVCxRQUFTLE1BQ1QsTUFBTyxNQUNQLE9BQVEsTUFBQSxLQUFBLEVBQUEsRUFHRCxZQUNQLE9BQVUsT0FFSyw0QkFDYixNQUFPLEtBQ1AsTUFBTyxLQUdPLDJCQUNaLFFBQVMsTUFDVCxPQUFRLE1BQUEsTUFHUCxrQkFDRCxNQXRCSyxJQXVCTCxPQUFXLElBQU0sTUFBQyxLQUVk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ZSx1QkFpQmQsUUFBUyxhQUNULFNBQVUsU0FDVixZQUFhLElBQ2IsT0FBUSxJQUNSLFdBQVkiLCJmaWxlIjoiQUZCY2xpZW50LmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKEMpIDIwMTUgXCJJb1QuYnpoXCJcbkF1dGhvciBcIkZ1bHVwIEFyIEZvbGxcIlxuXG5UaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4oYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG5UaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbmJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG5NRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG5HTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG5Zb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5AaW1wb3J0IFwiYXBwL2liei1taXhpbnNcIjtcblxuc3VibWl0LWJ1dHRvbiB7XG4gICAgZmxvYXQ6IHJpZ2h0O1xuICAgIEBpbmNsdWRlIGliei1idXR0b24oZ3JleSk7XG59XG5cbnpmLW1vZGFsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxODAsMTgwLDE4MCwuNSk7XG59XG5cbi5ib3gtY29udGVudCB7XG4gICAgIEBpbmNsdWRlIGliei1ib3gtY29udGVudDtcblxuICAgIC5ib3gtdGl0bGUge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgZm9udC1zaXplOiAxLjNyZW07XG4gICAgfVxufVxuXG4vLyBDaGFuZ2UgTm90aWZpY2F0aW9ucyBkZWZhdWx0IHNpemVcbi51aS1ub3RpZmljYXRpb24ge1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIGJvcmRlci1yYWRpdXM6IDVweDtcbn0iLCIvKlxuICAgIEV2ZXJ5IFNDU1MgZmlsZXMgd2lsbCBiZSBpbmplY3RlZCBpbnRvIG1haW4gSFRNTCBwYWdlXG4qL1xuJXNoYWRvdy10cmFuc2l0aW9uIHtcbiAgICB0cmFuc2l0aW9uOiBib3JkZXIgMC4ycyBsaW5lYXIgMHMsIGJveC1zaGFkb3cgMC4ycyBsaW5lYXIgMHM7XG4gICAgYm9yZGVyLXJhZGl1czogNXB4O1xufVxuXG5AbWl4aW4gaWJ6LWJveC1jb250ZW50IHtcbiAgICBib3JkZXI6IDJweCBzb2xpZCBnYWluc2Jvcm8gIWltcG9ydGFudDtcbiAgICBib3JkZXItcmFkaXVzOiA1cHg7XG4gICAgXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICAgIG1pbi13aWR0aDogOTglICFpbXBvcnRhbnQ7IFxuICAgIG1hcmdpbjogLjVyZW0gLjVyZW0gLjVyZW0gLjVyZW07XG4gICAgYmFja2dyb3VuZDogcmdiYSgyMDAsMjA1LDIwMCwuMyk7XG59XG5cbkBtaXhpbiBpYnotYnV0dG9uICgkY29sb3IsICRzaXplOjJyZW0pIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgYm9yZGVyOiAxcHggc29saWQgZGFya2VuKCRjb2xvciwxMCUpO1xuICAgIGJveC1zaGFkb3c6IDJweCAycHggMXB4IGFkanVzdC1odWUoJGNvbG9yLDIwZGVnKTtcbiAgICBjb2xvcjogJGNvbG9yO1xuICAgIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgcGFkZGluZzogMHJlbSAuNXJlbSAwcmVtIC41cmVtO1xuICAgIG1hcmdpbjouNXJlbTtcbiAgICBiYWNrZ3JvdW5kOiBsaWdodGVuKCM5NDk0YjcsIDIwJSk7XG4gICAgaSB7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDAuM3JlbTtcbiAgICAgICAgZm9udC1zaXplOiAkc2l6ZTtcbiAgICB9XG4gICAgc3BhbiB7Zm9udC1zaXplOiAxcmVtfVxuICAgIFxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogbGlnaHRlbigkY29sb3IsIDQ1JSk7XG4gICAgICBib3JkZXI6IDJweCBzb2xpZCBkYXJrZW4oJGNvbG9yLDIwJSk7XG4gICAgICBcbiAgICB9XG59XG5cbkBtaXhpbiBpYnotaW5wdXQtYWxlcnQgKCRjb2xvciwgJGJhY2tncm91bmQpIHtcbiAgICBwb3NpdGlvbiAgOmZpeGVkO1xuICAgIG1hcmdpbjogLTIuMnJlbSAwIDAgMTVyZW07XG4gICAgYm9yZGVyLXJhZGl1czogNXB4O1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICBib3JkZXItY29sb3I6IGRhcmtlbigkYmFja2dyb3VuZCwxMCUpO1xuICAgIGNvbG9yOiAkY29sb3I7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQgIWltcG9ydGFudDtcbiAgICBwYWRkaW5nOiAwLjJyZW0gIWltcG9ydGFudDtcbn1cbiIsIi8qIFxuICogQ29weXJpZ2h0IChDKSAyMDE1IFwiSW9ULmJ6aFwiXG4gKiBBdXRob3IgXCJGdWx1cCBBciBGb2xsXCJcbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuICovXG5cbkBpbXBvcnQgXCJhcHAvaWJ6LW1peGluc1wiO1xuXG4kQ09MT1JfU1VDQ0VTUzogZ3JlZW47XG4kQ09MT1JfRkFJTDogcmVkO1xuXG50b2tlbi1yZWZyZXNoIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmbG9hdDogcmlnaHQ7XG4gICAgbWFyZ2luOiAuNXJlbSAxcmVtIDAgMDtcbn1cblxuLmJ1dHRvbi1ib3gge1xuICAgIGhlaWdodCAgOiA0LjVyZW07XG4gICAgXG4gICAgLnNlc3Npb24tYnV0dG9uIHtcbiAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgd2lkdGg6IDVyZW07XG4gICAgfTtcbiAgICBcbiAgICAucmVzcG9uc2UgPiBzcGFue1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgbWFyZ2luOiAuM3JlbSAuNXJlbSAuM3JlbSAuNXJlbTsgICAgICAgIFxuICAgIH0gIFxuICAgIFxuICAgIC5mYWlsIHsgXG4gICAgICAgIGNvbG9yOiRDT0xPUl9GQUlMO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBkYXJrZW4oJENPTE9SX0ZBSUwsMTAlKTtcbiAgICB9XG4gICAgLnN1Y2Nlc3MgeyBcbiAgICAgICAgY29sb3I6JENPTE9SX1NVQ0NFU1M7IFxuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBkYXJrZW4oJENPTE9SX1NVQ0NFU1MsMTAlKTtcbiAgICB9XG5cbn07XG5cbi5tZXNzYWdlLWJveCB7XG4gICAgaGVpZ2h0ICA6IGF1dG87XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgZm9udC1zaXplOiAuNzVyZW07XG4gIFxuICAgIC5yZXNwb25zZSB7XG4gICAgICAgIC5lcnItbm8geyBjb2xvcjpncmV5OyB9XG4gICAgICAgIC5yZXMuZXJyLW9rIHsgY29sb3I6IGJsdWU7IH1cbiAgICAgICAgLnJlcS5lcnItb2sgeyBjb2xvcjpibHVldmlvbGV0OyB9XG4gICAgICAgIC5zdGF0dXMuZXJyLW9rIHsgY29sb3I6Z3JlZW47IH1cbiAgICAgICAgLnN0YXR1cy5lcnItZnggeyBjb2xvcjpyZWQ7IH0gICAgICAgXG4gICAgfSBcbiAgICBcblxufTtcblxuXG5cbiIsIi8qIFxuICogQ29weXJpZ2h0IChDKSAyMDE1IFwiSW9ULmJ6aFwiXG4gKiBBdXRob3IgXCJGdWx1cCBBciBGb2xsXCJcbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuICovXG5cbkBpbXBvcnQgXCJhcHAvaWJ6LW1peGluc1wiO1xuXG5cbi5zYW1wbGUtYm94IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBoZWlnaHQgIDogNC41cmVtO1xuICAgIFxuICAgIC5zYW1wbGUtYnV0dG9uIHtcbiAgICAgIGZsb2F0OiByaWdodDtcbiAgICAgIHdpZHRoOiA1cmVtO1xuICAgIH07XG4gICAgXG4gICAgLm11dGVkLW9uLW9uLC5tdXRlZC1vZmYtb2Zme1xuICAgICAgICBiYWNrZ3JvdW5kOiBibHVldmlvbGV0O1xuICAgIH07XG4gICAgICAgIFxuICAgIC5tdXRlZC1lcnJvcntcbiAgICAgICAgYmFja2dyb3VuZDogcmVkO1xuICAgIH07XG59O1xuXG5cblxuIiwiLyogXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgXCJJb1QuYnpoXCJcbiAqIEF1dGhvciBcIkZ1bHVwIEFyIEZvbGxcIlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4gKi9cblxuQGltcG9ydCBcImFwcC9pYnotbWl4aW5zXCI7XG5cbi8vIHBsYWNlIGhlcmUgeW91ciBzdWJtaXQgYnV0dG9ucyBjdXN0b21pemF0aW9uXG5hcHBsaS1idXR0b24ge1xuICAgIEBpbmNsdWRlIGliei1idXR0b24oZ3JleSwxcmVtKVxuICAgIGltZyB7XG4gICAgICAgIGhlaWdodDogM3JlbTtcbiAgICB9XG4gICAgXG4gICAgXG4gICAgLmRpc2FibGU+aSB7XG4gICAgICB0ZXh0LWRlY29yYXRpb246bm9uZTsgLy8gcmVhbGx5IG5vdCBuZWVkZWQgZm9yIHRoZSBUb3AgQmFyLCBqdXN0IGZvciBnZW5lcmFsIHRlY2huaXF1ZVxuICAgICAgY3Vyc29yOiBhdXRvO1xuICAgICAgY29sb3I6IGdyZXkgIWltcG9ydGFudDtcbiAgICB9XG59XG5cbi5hcHBsaS1tZW51LXN0YXJ0IHsgICAgXG4gICAgLnN0YXJ0LXN0YXJ0LCAuc3RvcC1zdG9wIHtcbiAgICAgICAgaSB7Y29sb3I6IGdyZXk7fVxuICAgIH1cbn1cbiIsIi8qXG4gICAgU2FtcGxlIG9mIHN0eWxlIG92ZXJsb2FkIGZvciBhIHNwZWNpZmljIHdpZGdldFxuXG4gICAgTm90ZTogdGhpcyBTQ1NTIGlzIGluamVjdGVkIHdpdGggbWFpbiBIVE1MIHBhZ2UsIGl0IHNjb3BlIHNob3VsZCBiZSByZWR1Y2VcbiAgICB0byBhIHNwZWNpZmljIHdpZGdldCBvciBpdCB2YWx1ZSB3aWxsIGJlIHByb3BhZ2F0ZWQgYXQgYSBnbG9iYWwgbGV2ZWwuXG4qL1xuXG5AaW1wb3J0IFwiYXBwL2liei1taXhpbnNcIjtcblxuLnVwbG9hZC1maWxlIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgZmxvYXQ6IHJpZ2h0O1xuICAgIGhlaWdodCA6IDVyZW07XG4gICAgd2lkdGggIDogNXJlbTtcbiAgICBtYXJnaW46IDAuNXJlbTtcblxuICAgIGltZyB7IGhlaWdodDogaW5oZXJpdDt9XG4gICAgXG4gICAgLmliei1yYW5nZS1zbGlkZXIge1xuICAgICAgICBoZWlnaHQ6IDEwJSAhaW1wb3J0YW50O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA1cHg7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IGxpZ2h0Z3JleSAhaW1wb3J0YW50O1xuICAgIFxuICAgICAgICAucmFuZ2Utc2xpZGVyLWhhbmRsZSB7XG4gICAgICAgICAgICB3aWR0aDogMTAlICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IC4ycmVtO1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcHVycGxlICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAucmFuZ2Utc2xpZGVyLWFjdGl2ZS1zZWdtZW50IHtcbiAgICAgICAgICAgIGhlaWdodDogODAlICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGdyZWVuO1xuICAgICAgICB9XG4gICAgfVxuXG59XG5cbmlucHV0LXRleHQge1xuICBcbiAgICBhbGVydCB7QGluY2x1ZGUgaWJ6LWlucHV0LWFsZXJ0KGRhcmtibHVlLCByZ2JhKDIwMCwgMjAwLCAyMDAsIDAuNikpfTtcblxuICAgIGlucHV0IHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogLjVyZW0gIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICBsYWJlbCB7XG4gICAgICAgIG1hcmdpbi10b3A6IDFyZW0gIWltcG9ydGFudDtcbiAgICB9XG4gICAgXG4gICAgLnJlcXVpcmVkIHtcbiAgICAgICAgY29sb3I6IGJsdWU7XG4gICAgICAgIGZsb2F0OiByaWdodDtcbiAgICAgICAgY29sb3I6IGxpZ2h0c2t5Ymx1ZTtcbiAgICB9XG4gICAgLnJlcXVpcmVkLnZhbGlkIHtcbiAgICAgICAgY29sb3I6IGdyZWVuO1xuICAgIH1cbiAgICBcbiAgICAucmVxdWlyZWQuaW52YWxpZCB7XG4gICAgICAgIGNvbG9yOiBwbHVtO1xuICAgIH0gIFxuXG4gICAgLnN0YXR1cy11bnRvdWNoIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDIwMCwgMjAwLCAyMDAsIDAuNikgIWltcG9ydGFudDtcbiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpIGluc2V0LCAwIDAgOHB4IHJnYmEoMjAwLCAyMDAsIDIwMCwgMC42KSAhaW1wb3J0YW50O1xuICAgICAgICBjb2xvcjogIzY5Njk2OSAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIGlucHV0OmZvY3VzIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDgyLDE2OCwyMzYsMC44KSA7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KSBpbnNldCwgMCAwIDhweCByZ2JhKDgyLDE2OCwyMzYsMC44KSAhaW1wb3J0YW50O1xuICAgICAgICB0cmFuc2l0aW9uOiBib3JkZXIgMC4ycyBsaW5lYXIgMHMsIGJveC1zaGFkb3cgMC4ycyBsaW5lYXIgMHM7XG4gICAgICAgIGNvbG9yOiBkYXJrc2xhdGVibHVlICFpbXBvcnRhbnQ7XG4gICAgICAgIEBleHRlbmQgc2hhZG93LXRyYW5zaXRpb247XG4gICAgfVxuXG4gICAgLnN0YXR1cy12YWxpZCB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgxNTQsIDIwNSwgNTAsIDAuNikhaW1wb3J0YW50O1xuICAgICAgICBib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSkgaW5zZXQsIDAgMCA4cHggcmdiYSgxNTQsIDIwNSwgNTAsIDAuNikhaW1wb3J0YW50O1xuICAgICAgICBAZXh0ZW5kIHNoYWRvdy10cmFuc2l0aW9uO1xuICAgIH1cblxuICAgIC5zdGF0dXMtaW52YWxpZCB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgxNTQsIDE3LCA2OSwgMC42KTtcbiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpIGluc2V0LCAwIDAgOHB4IHJnYmEoMTU0LCAxNywgNjksIDAuNikhaW1wb3J0YW50O1xuICAgICAgICBjb2xvcjogcmdiKDE1NCwgMTcsIDY5KTtcbiAgICAgICAgQGV4dGVuZCBzaGFkb3ctdHJhbnNpdGlvbjtcbiAgICB9XG5cbn1cbiIsIi8qIFxuICogQ29weXJpZ2h0IChDKSAyMDE1IFwiSW9ULmJ6aFwiXG4gKiBBdXRob3IgXCJGdWx1cCBBciBGb2xsXCJcbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuICovXG5cbkBpbXBvcnQgXCJhcHAvaWJ6LW1peGluc1wiO1xuXG5cbmxpbmstYnV0dG9uIHtAaW5jbHVkZSBpYnotYnV0dG9uKCMzMzY2ZmYsMXJlbSl9O1xuXG4vL3BhbGUgYmx1ZSBmb3Igc2Vjb25kYXR5IGxpbmtcbmxpbmstYnV0dG9uLnNlY29uZGFyeSB7QGluY2x1ZGUgaWJ6LWJ1dHRvbigjOTliM2ZmLDFyZW0pfTtcblxuIiwiLyogXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgXCJJb1QuYnpoXCJcbiAqIEF1dGhvciBcIkZ1bHVwIEFyIEZvbGxcIlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4gKiBcbiAqIFJlZmVyZW5jZTogaHR0cDovL3d3dy5ncmV5d3l2ZXJuLmNvbS8/cG9zdD0zMzdcbiAqL1xuXG5AaW1wb3J0IFwiYXBwL2liei1taXhpbnNcIjtcblxuXG5saW5rLWJ1dHRvbiB7QGluY2x1ZGUgaWJ6LWJ1dHRvbigjMzM2NmZmLDFyZW0pfTtcblxuLy8gTW9kYWwgc2hvdWxkIGJlIHJlbGF0aXZlIGFuZCB0aXAtbW9kYWwtcG9wdXAgYWJzb2x1dGVcbnRpcC1tb2RhbCB7XG4gICAgcG9zaXRpb246cmVsYXRpdmU7XG59XG5cbi50aXAtbW9kYWwtcG9wdXAge1xuICAgIC8vdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgIHdpZHRoOiAyMHJlbTtcbiAgICBwb3NpdGlvbjphYnNvbHV0ZTtcbiAgICB0b3A6MWVtO1xuICAgIHBhZGRpbmc6IDAuMmVtIDAuNmVtO1xuICAgIGJvcmRlcjoxcHggc29saWQgIzk5NjYzMztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiNlNWZmZmY7XG4gICAgY29sb3I6IzAwMDtcbiAgICBvcGFjaXR5OjA7XG4gICAgdHJhbnNpdGlvbjp2aXNpYmlsaXR5IC41cyBsaW5lYXIgMXMsb3BhY2l0eSAxcyBsaW5lYXI7XG4gICAgYm9yZGVyLXJhZGl1czogNXB4O1xuICAgIGkge1xuICAgICAgICBtYXJnaW46IDAgLjNyZW0gMCAwO1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmU7XG4gICAgfVxufVxuXG50b2tlbi1yZWZyZXNoIHtcbiAgICBAaW5jbHVkZSBpYnotYnV0dG9uKGdyZXksMXJlbSlcbiAgICBpIHttYXJnaW4tbGVmdDogLjVyZW07fVxuICAgIG1hcmdpbi1yaWdodDogMXJlbTtcbn1cblxudG9rZW4tcmVmcmVzaC5vbmxpbmUge1xuICAgIGNvbG9yOiAjMDA2NmNjO1xuICAgIGkge2NvbG9yOiBsaW1lO30gICAgXG59XG5cbnRva2VuLXJlZnJlc2gub2ZmbGluZSB7XG4gICAgY29sb3I6ICNmZjAwZmY7XG4gICAgaSB7Y29sb3I6IHJlZDt9ICAgIFxufVxuIiwiLypcbiAqIGliei1EYXRlcGlja2VyIGZvciBGb3VuZGF0aW9uXG4gKlxuICogQXV0aG9yOiBGdWx1cCBBciBGb2xsXG4gKiBEYXRlICA6IE1hcmNoLTIwMTVcbiAqIE9iamVjdDogU0FTUyBzdHlsZXNoZWV0LCBjdXN0b21pemVkIHRvIEZvdW5kYXRpb25cbiAqIFJlZmVyZW5jZXM6IGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vc3RyaXBlcy1jc3MvXG4gKlxuICovXG5AaW1wb3J0IFwiYXBwL2liei1taXhpbnNcIjtcblxuLnJhbmdlLXNsaWRlci1oYW5kbGUge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMTtcbiAgdG9wOiAtMC4ycmVtO1xuICB3aWR0aDogMnJlbTtcbiAgaGVpZ2h0OiAxLjM3NXJlbTtcbiAgYm9yZGVyOiAxcHggc29saWQgbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBiYWNrZ3JvdW5kOiAjMDA4Y2JhO1xufVxuXG4ucmFuZ2Utc2xpZGVyLnJhZGl1cywgLnJhbmdlLXNsaWRlci1oYW5kbGUge1xuICBiYWNrZ3JvdW5kOiAjMDA4Y2JhO1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDNweDtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xufVxuXG4ucmFuZ2Utc2xpZGVyLWFjdGl2ZS1zZWdtZW50IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB0b3A6IDAuMDdyZW07XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgaGVpZ2h0OiAwLjgwcmVtO1xuICBiYWNrZ3JvdW5kOiAjZTVlNWU1O1xufVxuXG4uaWJ6LXJhbmdlLXNsaWRlciB7XG4gICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDE1NCwgMjA1LCA1MCwgMC42KSAhaW1wb3J0YW50O1xuICAgaGVpZ2h0OiAxcmVtO1xuICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgXG4gIC5yYW5nZS1zbGlkZXItYWN0aXZlLXNlZ21lbnQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoODIsIDE2OCwgMjAwLCAwLjYpO1xuICB9XG4gIFxuICAmLWRpc3BsYXkge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoODIsIDE2OCwgMjAwLCAwLjYpICFpbXBvcnRhbnQ7XG4gICAgd2lkdGggOiA0cmVtICFpbXBvcnRhbnQ7XG4gICAgcGFkZGluZzogLjI1cmVtO1xuICAgIHRleHQtYWxpZ246Y2VudGVyXG4gICB9XG5cbiAgICYtc3RhcnQsJi1zdG9wIHtcbiAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgIHBhZGRpbmctdG9wOiAycHg7XG4gICBoZWlnaHQ6IDk1JTtcbiAgIGJhY2tncm91bmQ6IHJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoXG4gICAgNDVkZWcsXG4gICAgIzYwNmRiYyxcbiAgICAjNjA2ZGJjIDEwcHgsXG4gICAgIzQ2NTI5OCAxMHB4LFxuICAgICM0NjUyOTggMjBweFxuICApO31cblxufVxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 */
diff --git a/afb-client/dist.prod/opa/AFBclient.min.js b/afb-client/dist.prod/opa/AFBclient.min.js
new file mode 100644
index 0000000..1752ebd
--- /dev/null
+++ b/afb-client/dist.prod/opa/AFBclient.min.js
@@ -0,0 +1,2 @@
+!function(){"use strict";function e(e){var t=[],n=[];this.getId=function(){return e.sliderid},this.getCbHandle=function(){return e.cbhandle},this.getView=function(a){return a||(a=0),e.value[a]===t[a]?n[a]:(t[a]=e.value[a],e.formatter?n[a]=e.formatter(e.value[a],e.ctrlhandle):n[a]=e.value[a],n[a])},this.updateClass=function(t,n){e.updateClass(t,n)},this.forceRefresh=function(t){e.forceRefresh(t)},this.getValue=function(t){return t||(t=0),e.value[t]},this.getRelative=function(t){return t||(t=0),e.relative[t]},this.setValue=function(t,n){n||(n=0),e.setValue(t,n)},this.setDisable=function(t){e.setDisable(t)}}var t=angular.module("RangeSlider",[]);t.directive("rangeSlider",["$log","$document","$timeout",function(t,n,a){function i(t,i,s,o){t.initWidget=function(e){e.byStep&&(t.byStep=parseInt(e.byStep)),e.notMore&&(t.notMore=parseInt(e.notMore)),e.notLess&&(t.notLess=parseInt(e.notLess)),e.id&&(t.sliderid=e.id),void 0!==e.value&&(t.value=e.value,t.forceRefresh(50))},t.forceRefresh=function(e){var n=t.value;t.value=[void 0,void 0],a(function(){t.setValue(n[0],0),t.dual&&t.setValue(n[1],1)},e)},t.updateClass=function(e,t){t?i.addClass(e):i.removeClass(e)},t.setDisable=function(e){e?(i.addClass("disable"),t.handles[0].css("visibility","hidden"),t.dual&&t.handles[1].css("visibility","hidden")):(i.removeClass("disable"),t.handles[0].css("visibility","visible"),t.dual&&t.handles[1].css("visibility","visible"))},t.normalize=function(e){var n,a=t.notMore-t.notLess,i=e*a;if(t.byStep>0){var s=(i-i%t.byStep)/t.byStep,o=i%t.byStep,l=o>=.5*t.byStep?t.byStep:0;return n=s*t.byStep+l+t.notLess}if(t.byStep<0){var r=Math.pow(10,-1*t.byStep);return n=t.notLess+parseInt(i*r)/r}return i},t.getValue=function(e,n){t.vertical?t.relative[n]=(e-t.bounds.handles[n].getBoundingClientRect().height)/(t.bounds.bar.getBoundingClientRect().height-t.bounds.handles[n].getBoundingClientRect().height):t.relative[n]=e/(t.bounds.bar.getBoundingClientRect().width-t.bounds.handles[n].getBoundingClientRect().width);var a=t.normalize(t.relative[n]);a!==t.value[n]&&(a<t.startValue&&(a=t.startValue),a>t.stopValue&&(a=t.stopValue),t.formatter?t.viewValue=t.formatter(a,t.ctrlhandle):t.viewValue=a,t.displays[n]&&t.displays[n].html(t.viewValue),t.value[n]=a,o&&o.$setViewValue(t.viewValue),t.$apply(),a>t.startValue&&a<t.stopValue&&t.translate(e,n))},t.setStart=function(e){var n;e>t.value[0]&&(t.dual?t.setValue(e,1):t.setValue(e,0)),t.vertical?(n=t.bounds.bar.getBoundingClientRect().height*(e-t.notLess)/(t.notMore-t.notLess),t.start.css("height",n+"px")):(n=t.bounds.bar.getBoundingClientRect().width*(e-t.notLess)/(t.notMore-t.notLess),t.start.css("width",n+"px")),t.startValue=e},t.setStop=function(e){var n;e<t.value[0]&&(t.dual?t.setValue(e,1):t.setValue(e,0)),t.vertical?(n=t.bounds.bar.getBoundingClientRect().height*(e-t.notLess)/(t.notMore-t.notLess),t.start.css("height",n+"px")):(n=t.bounds.bar.getBoundingClientRect().width*(e-t.notLess)/(t.notMore-t.notLess),t.stop.css({right:0,width:t.bounds.bar.getBoundingClientRect().width-n+"px"})),t.stopValue=e},t.translate=function(e,n){var a;if(t.vertical){var i=t.bounds.bar.getBoundingClientRect().height-e;if(t.handles[n].css({"-webkit-transform":"translateY("+i+"px)","-moz-transform":"translateY("+i+"px)","-ms-transform":"translateY("+i+"px)","-o-transform":"translateY("+i+"px)",transform:"translateY("+i+"px)"}),t.dual){if(t.relative[1]&&t.relative[0]){var s=(t.relative[1]-t.relative[0])*t.bounds.bar.getBoundingClientRect().height;a=t.relative[0]*t.bounds.bar.getBoundingClientRect().height,t.slider.css({bottom:a+"px",height:s+"px"})}}else t.slider.css("height",e+"px")}else if(t.handles[n].css({"-webkit-transform":"translateX("+e+"px)","-moz-transform":"translateX("+e+"px)","-ms-transform":"translateX("+e+"px)","-o-transform":"translateX("+e+"px)",transform:"translateX("+e+"px)"}),t.dual){if(t.relative[1]&&t.relative[0]){var o=(t.relative[1]-t.relative[0])*t.bounds.bar.getBoundingClientRect().width;a=t.relative[0]*t.bounds.bar.getBoundingClientRect().width,t.slider.css({left:a+"px",width:o+"px"})}}else t.slider.css("width",e+"px")},t.setValue=function(e,n){var a;e!==t.value[n]&&(void 0===e&&(e=0),e>t.notMore&&(e=t.notMore),e<t.notLess&&(e=t.notLess),t.vertical?(t.relative[n]=(e-t.notLess)/(t.notMore-t.notLess),0===n&&(a=t.relative[n]*t.bounds.bar.getBoundingClientRect().height+t.bounds.handles[n].getBoundingClientRect().height/2),1===n&&(a=t.relative[n]*t.bounds.bar.getBoundingClientRect().height)):(t.relative[n]=(e-t.notLess)/(t.notMore-t.notLess),a=t.relative[n]*(t.bounds.bar.getBoundingClientRect().width-t.bounds.handles[n].getBoundingClientRect().width)),t.translate(a,n),t.value[n]=e,t.formatter?t.viewValue=t.formatter(e,void 0):t.viewValue=e,o&&o.$setViewValue(t.viewValue),t.displays[n]&&t.displays[n].html(t.viewValue))},t.keydown=function(e){switch(e.keyCode){case 39:case 38:t.byStep>0&&t.$apply(t.setValue(t.value[t.actif]+t.byStep,t.actif)),t.byStep<0&&t.$apply(t.setValue(t.value[t.actif]+1/Math.pow(10,-1*t.byStep),t.actif)),t.callback&&t.callback(t.value[t.actif],t.ctrlhandle);break;case 37:case 40:t.byStep>0&&t.$apply(t.setValue(t.value[t.actif]-t.byStep,t.actif)),t.byStep<0&&t.$apply(t.setValue(t.value[t.actif]-1/Math.pow(10,-1*t.byStep),t.actif)),t.callback&&t.callback(t.value[t.actif],t.ctrlhandle);break;case 27:t.handles[t.actif][0].blur()}},t.moveHandle=function(e,n,a){var i;t.vertical?(i=t.bounds.bar.getBoundingClientRect().bottom-a,i>t.bounds.bar.getBoundingClientRect().height&&(i=t.bounds.bar.getBoundingClientRect().height),i<t.bounds.handles[e].getBoundingClientRect().height&&(i=t.bounds.handles[e].getBoundingClientRect().height)):(i=n-t.bounds.bar.getBoundingClientRect().left,0>i&&(i=0),n+t.bounds.handles[e].getBoundingClientRect().width>t.bounds.bar.getBoundingClientRect().right&&(i=t.bounds.bar.getBoundingClientRect().width-t.bounds.handles[e].getBoundingClientRect().width)),t.getValue(i,e),t.dual&&t.value[0]>t.value[1]&&(0===e?t.setValue(t.value[0],1):t.setValue(t.value[1],0))},t.focusCB=function(e){e?n.on("keydown",t.keydown):n.unbind("keydown",t.keydown)},t.touchBarCB=function(e){var n,a=0,i=e.changedTouches,s=t.value[a];if(e.preventDefault(),t.dual){n=t.vertical?(i[0].pageY-t.bounds.bar.getBoundingClientRect().bottom)/t.bounds.bar.getBoundingClientRect().height:(i[0].pageX-t.bounds.bar.getBoundingClientRect().left)/t.bounds.bar.getBoundingClientRect().width;var o=Math.abs(n-t.relative[0]),l=Math.abs(n-t.relative[1]);o>l&&(a=1)}t.moveHandle(a,i[0].pageX,i[0].pageY),t.callback&&s!==t.value[a]&&t.callback(t.value[a],t.ctrlhandle)},t.touchHandleCB=function(e,a){function s(e){e.preventDefault();for(var n=e.changedTouches,i=0;i<n.length;i++)t.moveHandle(a,n[i].pageX,n[i].pageY)}function o(e){n.unbind("touchmove",s),n.unbind("touchend",o),i.on("touchstart",t.touchBarCB),t.callback&&l!==t.value[a]&&t.callback(t.value[a],t.ctrlhandle)}var l=t.value[a];e.preventDefault(),n.on("touchmove",s),n.on("touchend",o),i.unbind("touchstart",t.touchBarCB)},t.handleCB=function(e,a){function i(e){t.moveHandle(a,e.clientX,e.clientY)}function o(){n.unbind("mousemove",i),n.unbind("mouseup",o),t.callback&&l!==t.value[a]&&t.callback(t.value[a],t.ctrlhandle)}if(!s.automatic){var l=t.value[a];e.preventDefault(),n.on("mousemove",i),n.on("mouseup",o),t.handles[a][0].focus(),t.actif=a}},t.find=function(e,t){var n;n=t?t[0].querySelector(e):i[0].querySelector(e);var a=angular.element(n);return a},t.initialSettings=function(e){var n;t.value=[],t.relative=[],null===t.precision&&(n=(""+t.byStep).match(/\.([\d]*)/),t.precision=n&&n[1]?n[1].length:0),i.on("touchstart",t.touchBarCB),t.handles[0].on("touchstart",function(e){t.touchHandleCB(e,0)}),t.dual&&(t.handles[1].addClass("range-slider-handle"),t.handles[1].on("touchstart",function(e){t.touchHandleCB(e,1)}),t.initvalues||t.setValue(e[1],1)),t.initvalues?t.initWidget(t.initvalues):t.setValue(e[0],0)},t.init=function(){if(t.sliderid=s.id||"slider-"+parseInt(1e3*Math.random()),t.startValue=-(1/0),t.stopValue=1/0,t.byStep=parseInt(s.byStep)||1,t.vertical=s.vertical||!1,t.dual=s.dualHandles||!1,t.trigger_input_change=!1,t.notMore=parseInt(s.notMore)||100,t.notLess=parseInt(s.notLess)||0,t.vertical&&i.addClass("vertical-range"),t.handles=[t.find(".handle-min"),t.find(".handle-max")],t.bar=i,t.slider=t.find(".range-slider-active-segment"),t.start=t.find(".ibz-range-slider-start"),t.stop=t.find(".ibz-range-slider-stop"),t.disable=s.disable||!1,t.ctrlhandle=new e(t),t.bounds={bar:i[0],handles:[t.handles[0][0],t.handles[1][0]]},"true"===s.disable&&t.setDisable(!0),s.displayTarget)switch(s.displayTarget){case!0:case"handle":t.displays=t.handles,t.handles[0].addClass("ibz-range-slider-display"),t.dual&&t.handles[1].addClass("ibz-range-slider-display");break;default:t.displays=[n.getElementById(s.displayTarget)]}else t.displays=[];if(s.initial){var a=s.initial.split(",");t.initial=[void 0!==a[0]?parseInt(a[0]):t.notLess,void 0!==a[1]?parseInt(a[1]):t.notMore]}else t.initial=[t.ngModel,t.ngModel];t.$watch("startAt",function(){t.value<t.startAt,t.startAt&&t.setStart(t.startAt)}),t.$watch("stopAt",function(){t.value>t.stopAt,t.stopAt&&t.setStop(t.stopAt)}),t.initialSettings(t.initial)},t.init(),t.$watch("inithook",function(){t.inithook&&t.inithook(t.ctrlhandle)}),t.$watch("initvalues",function(){t.initvalues&&t.initWidget(t.initvalues)}),t.$watch("ngModel",function(e){t.setValue(e,0)})}var s='<div class="ibz-range-slider range-slider" title="{{title}}"data-slider><span class="range-slider-handle handle-min" ng-mousedown="handleCB($event,0)" ng-focus="focusCB(true)" ng-blur="focusCB(false)" role="slider" tabindex="0"></span><span class="handle-max" ng-mousedown="handleCB($event,1)" ng-focus="focusCB(true)" ng-blur="focusCB(false)" role="slider" tabindex="0"></span><span class="range-slider-active-segment"></span><span class="ibz-range-slider-start" ></span> <span class="ibz-range-slider-stop"></span> <input id={{sliderid}} type="hidden"></div>';return{restrict:"E",scope:{startAt:"=",stopAt:"=",callback:"=",formatter:"=",inithook:"=",cbhandle:"=",initvalues:"=",ngModel:"="},require:"?ngModel",template:s,replace:!0,link:i}}])}(),function(){"use strict";var e='<div class="afb-monitor" ng-click="getping()"><span class="afb-refresh-token" >afb://{{hostname}}:{{httpdport}}</span><i class="{{icon}}"></i></div>';angular.module("TokenRefresh",["AppConfig","ModalNotification"]).directive("tokenRefresh",["$log","$window","$timeout","$location","Notification","AppConfig","AppCall",function(t,n,a,i,s,o,l){function r(e,r,u){e.logged=void 0,n.onbeforeunload=function(){l.get(e.plugin,"logout",{},function(){t.log("OPA exit")})},e.online=function(){r.addClass("online"),r.removeClass("offline"),e.logged=!0},e.offline=function(){r.addClass("offline"),r.removeClass("online"),e.logged=!1},e.onerror=function(){e.logged!==!1&&(s.warning({message:"AppFramework Binder Lost",delay:5e3}),e.offline()),e.status=0},e.onsuccess=function(t,n){return 200!==n||"success"!==t.request.status?(s.warning({message:"auto-connect :"+t.request.info,delay:1e4}),e.offline(),!1):(e.logged!==!0&&(s.success({message:"AppFramework Binder Connected",delay:3e3}),e.online(),e.callback&&e.callback(t)),e.status=1,!0)},e.getping=function(){l.get(e.plugin,"ping",{},function(t,n){return 200!==n||"success"!==t.request.status?(s.warning({message:t.request.info,delay:5e3}),void e.offline()):void a(e.getping,1e3*o.session.pingrate)},e.onerror)},e.refresh=function(){l.get(e.plugin,"refresh",{},function(t,n){e.onsuccess(t,n),a(e.refresh,250*o.session.timeout)},e.onerror)},e.loggin=function(){l.get(e.plugin,"connect",{token:o.session.initial},function(t,n){e.onsuccess(t,n)&&(a(e.getping,1e3*o.session.pingrate),a(e.refresh,250*o.session.timeout))},e.onerror)},e.plugin=u.plugin||"auth",e.icon=u.icon||"fi-lightbulb",e.hostname=i.host(),e.httpdport=i.port(),e.autolog=JSON.parse(u.autolog||!1),e.autolog&&e.loggin()}return{template:e,scope:{callback:"="},restrict:"E",link:r}}])}(),function(){"use strict";var e='<div class="tip-modal-popup"><i class="{{icon}}"></i><span>{{tip}}</span></span></div>';angular.module("ModalNotification",[]).directive("tipModal",["$timeout",function(t){function n(e,n,a){function i(){function n(){e.show&&e.modal.css({opacity:1,visibility:"visible"})}e.show=!0,e.timeout=t(n,e.delay)}function s(){e.show=!1,e.modal.css({opacity:0,visibility:"hidden"})}e.parent=n.parent(),e.modal=n.find("div"),e.icon=a.icon||"fi-lightbulb",e.parent.addClass("as-modal-tip"),e.parent.bind("click",s),e.parent.bind("focus",i),e.parent.bind("mouseover",i),e.parent.bind("mouseleave",s),e.parent.bind("blur",s),e.delay=a.delay||1e3}return{restrict:"E",template:e,link:n,scope:{tip:"="}}}])}(),function(){"use strict";var e='<span title="Goto: {{href}}" ng-click="clicked()"><i class="{{icon}}"></i><span>{{label}}</span></span>';angular.module("LinkButton",[]).directive("linkButton",["$location",function(t){function n(e,n,a){e.clicked=function(){a.query?t.path(a.href).search(a.query):t.path(a.href)},e.icon=a.icon||"fi-link",e.label=a.label||"Jump",e.href=a.href||"/home",n.addClass(e.label.toLowerCase())}return{restrict:"E",template:e,link:n,scope:{}}}])}(),function(){"use strict";function e(e,t,n,a,i){var s=new XMLHttpRequest,o=new FormData,l=function(e){i(e)};s.upload.onprogress=function(t){var n=Math.round(t.lengthComputable?100*t.loaded/t.total:0);e.slider&&e.slider.setValue(n)},s.onload=function(){t.addClass("success"),t.removeClass("error");var n={status:s.status,headers:s.getAllResponseHeaders()};e.callback(n)},s.onerror=function(){t.addClass("error"),t.removeClass("success");var n={status:s.status,headers:s.getAllResponseHeaders()};e.callback(n)},s.onabort=function(){t.addClass("error"),t.removeClass("success");var n={status:s.status,headers:s.getAllResponseHeaders()};e.callback(n)};for(var r=0;r<a.length;r++){var u=a[r];if(u.type.match(e.mimetype)){if(u.size>1024*e.maxsize)return e.thumbnail=e.istoobig,void e.$apply("thumbnail");if(isNaN(u.size))return e.thumbnail=e.isnotvalid,void e.$apply("thumbnail");if(e.Basename=u.name.split("/").reverse()[0],e.imgElem[0].file=u,i){var c=new FileReader;c.readAsArrayBuffer(u),c.onload=l}o.append(e.name,u,u.name)}}s.open("POST",n,!0),s.send(o)}var t='<input type="file" name="{{name}}-input" onchange="angular.element(this).scope().UpLoadFile(this.files)" accept="{{mimetype}}" style="display:none"><div class="upload-file" ng-click="imgClicked()"><img id="{{name}}-img" src="{{thumbnail}}"><range-slider ng-show="!noslider" id="{{name}}-slider" automatic=true inithook="SliderInitCB"></range-slider></div>';angular.module("UploadFiles",["AppConfig","ModalNotification","RangeSlider"]).directive("uploadImage",["AppConfig","JQemu","Notification",function(n,a,i){function s(t,a,i){if(t.imgElem=a.find("img"),t.inputElem=a.find("input"),t.imgClicked=function(){t.inputElem[0].click()},t.SliderInitCB=function(e){t.slider=e},t.UpLoadFile=function(s){var o=function(e){return t.imgElem[0].src=window.URL.createObjectURL(new Blob([e.target.result],{type:"image"})),!0},l=i.posturl+"?token="+n.session.token;new e(t,a,l,s,o)},t.name=i.name||"file",t.category=i.category||"image",t.mimetype=(i.accept||"image")+"/*",t.maxsize=i.maxsize||100,t.regexp=new RegExp(i.accept+".*","i"),i.thumbnail?t.thumbnail=n.paths[t.category]+i.thumbnail:t.thumbnail=n.paths[t.category]+"tux-bzh.png",i.thumbnail?t.isnotvalid=n.paths[t.category]+i.isnotvalid:t.isnotvalid=n.paths[t.category]+"isnotvalid.png",i.istoobig?t.istoobig=n.paths[t.category]+i.istoobig:t.istoobig=n.paths[t.category]+"istoobig.png",t.noslider=i.noslider||!1,!i.posturl)throw new TypeError("file-upload %s posturl=/api/xxxx/xxxx required",t.attrs)}return{restrict:"E",template:t,link:s,scope:{callback:"="}}}]).directive("uploadAudio",["AppConfig","JQemu","Notification",function(n,a,i){function s(t,a,i){if(t.imgElem=a.find("img"),t.inputElem=a.find("input"),t.imgClicked=function(){t.inputElem[0].click()},t.SliderInitCB=function(e){t.slider=e},t.UpLoadFile=function(s){var o=i.posturl+"?token="+n.session.token;new e(t,a,o,s,!1)},t.name=i.name||"audio",t.category=i.category||"audio",t.mimetype=(i.accept||"audio")+"/*",t.maxsize=i.maxsize||1e4,t.regexp=new RegExp(i.accept+".*","i"),i.thumbnail?t.thumbnail=n.paths[t.category]+i.thumbnail:t.thumbnail=n.paths[t.category]+"upload-music.png",i.thumbnail?t.isnotvalid=n.paths[t.category]+i.isnotvalid:t.isnotvalid=n.paths[t.category]+"isnotvalid.png",i.istoobig?t.istoobig=n.paths[t.category]+i.istoobig:t.istoobig=n.paths[t.category]+"istoobig.png",t.noslider=i.noslider||!1,!i.posturl)throw new TypeError("file-upload %s posturl=/api/xxxx/xxxx required",t.attrs)}return{restrict:"E",template:t,link:s,scope:{callback:"="}}}]).directive("uploadAppli",["AppConfig","JQemu","Notification",function(n,a,i){function s(t,a,i){if(t.imgElem=a.find("img"),t.inputElem=a.find("input"),t.imgClicked=function(){t.inputElem[0].click()},t.SliderInitCB=function(e){t.slider=e},t.UpLoadFile=function(s){var o=function(e){var a=new JSZip(e.target.result),i=a.file("afa-pkg/thumbnail.jpg");return i?(t.imgElem[0].src=window.URL.createObjectURL(new Blob([i.asArrayBuffer()],{type:"image"})),!0):(t.thumbnail=n.paths[t.category]+"isnotvalid.png",t.$apply("thumbnail"),!1)},l=i.posturl+"?token="+n.session.token;new e(t,a,l,s,o)},t.name=i.name||"appli",t.category=i.category||"appli",t.mimetype=i.accept||".zip",t.maxsize=i.maxsize||1e5,t.regexp=new RegExp(i.accept+".*","i"),i.thumbnail?t.thumbnail=n.paths[t.category]+i.thumbnail:t.thumbnail=n.paths[t.category]+"upload-appli.png",i.thumbnail?t.isnotvalid=n.paths[t.category]+i.isnotvalid:t.isnotvalid=n.paths[t.category]+"isnotvalid.png",i.istoobig?t.istoobig=n.paths[t.category]+i.istoobig:t.istoobig=n.paths[t.category]+"istoobig.png",t.noslider=i.noslider||!1,!i.posturl)throw new TypeError("file-upload %s posturl=/api/xxxx/xxxx required",t.attrs)}return{restrict:"E",template:t,link:s,scope:{callback:"="}}}])}(),function(){"use strict";var e='<div ng-click="clicked()"><i class="{{icon}}"></i><span>{{label}}</span></div>';angular.module("SubmitButton",[]).directive("submitButton",function(){function t(e,t,n){e.icon=n.icon||"fi-foot",e.label=n.label||"Next",t.addClass(e.label.toLowerCase())}return{restrict:"E",template:e,link:t,scope:{clicked:"="}}})}(),function(){"use strict";var e='<div ng-click="clicked()"><img ng-src="{{icon}}"><span>{{label}}</span></div>',t='<b class="close-button" ng-click="close()">×</b><img ng-src="{{icon}}"><span class="modal-text">Application <b>{{label}}</b></span><ul class="vertical icon-left primary menu-bar appli-menu-start"><li class=start-{{runstatus}}><a ng-click=action("start")><i class="fi-check"> Start</i></a></li><li class=stop-{{runstatus}}><a ng-click=action("stop")><i class="fi-x"> Stop</i></a></li><li><a ng-click=action("info")><i class="fi-info"> Info</i></a></li><li class=start-{{runstatus}}><a ng-click=action("uninstall")><i class="fi-x"> Uninstall</i></a></li></ul>',n='<b class="close-button" ng-click="close()">×</b><img ng-src="{{icon}}"><span class="modal-text">Application <b>{{label}}</b></span><ul class="vertical icon-left appli-menu-info"><li><i class="fi-paperclip"> Name : {{detail.name}} </i></li><li><i class="fi-info"> Description {{detail.description}}</i></li><li><i class="fi-torso"> Author : {{detail.author}}</i></li></ul>';angular.module("AppliButton",[]).directive("appliButton",["AppConfig","AppCall","ModalFactory","Notification","$timeout","$window","$location","urlquery",function(a,i,s,o,l,r,u,c){function d(e,d,p){e.runstatus="stop",e.runmode=c.runmode||"auto",e.clicked=function(){var a=function(t,n){o.error({message:"Fail /api/afm-main"+t+"="+e.label+" RunID="+e.appID,delay:5e3}),d.addClass("fail"),d.removeClass("success"),e.callback(e.appID,t,n)},c=function(t,n){d.removeClass("fail"),e.runID=n.data.response.runid,e.callback(e.appID,t,n)},p=function(){e.modApp.deactivate(),l(function(){e.modApp.destroy()},1e3)},g=function(){e.modInfo.deactivate(),l(function(){e.modInfo.destroy()},1e3)},f=function(t){switch(t){case"start":if("stop"!==e.runstatus)return;i.get("afm-main","start",{id:e.appID,mode:e.runmode},function(n){return 200!==n.status||"afb-reply"!==n.data.jtype?void a("start",n):(e.runstatus="start",c(t,n),void(n.data.response.uri&&(e.winapp=r.open(n.data.response.uri.replace("%h",u.host())))))});break;case"stop":if("start"!==e.runstatus)return;i.get("afm-main","terminate",{runid:e.runID},function(n){return 200!==n.status||"afb-reply"!==n.data.jtype?void a("stop",n):(e.runstatus="stop",e.winapp&&(e.winapp.close(),e.winapp=!1),void c(t,n))});break;case"info":i.get("afm-main","detail",{id:e.appID},function(t){if(200!==t.status||"afb-reply"!==t.data.jtype)return void a("detail",t);var i={animationIn:"slideInFromTop",contentScope:{close:g,icon:e.icon,label:e.appID,detail:t.data.response},template:n};e.modInfo=new s(i),e.modInfo.activate()});break;case"uninstall":if("stop"!==e.runstatus)return;i.get("afm-main","uninstall",{id:e.appID},function(e){return 200!==e.status||"afb-reply"!==e.data.jtype?void a("uninstall",e):void c(t,e)})}p()},m={animationIn:"slideInFromTop",contentScope:{action:f,runstatus:e.runstatus,close:p,icon:e.icon,label:e.label},template:t};e.modApp=new s(m),e.modApp.activate()},p.handle&&e.store[p.handle].name?(e.icon=a.paths.icons+p.handle,e.label=e.store[p.handle].name,e.appID=p.handle):(e.icon=a.paths.icons+"w3c-ico.png",e.label=p.handle),d.addClass(e.label.toLowerCase())}return{restrict:"E",template:e,link:d,scope:{callback:"=",store:"="}}}])}(),function(){"use strict";angular.module("SamplePostModule",["SubmitButton","UploadFiles"]).controller("SamplePostController",["$http",function(e){var t=this;t.FileUploaded=function(e){}}])}(),function(){"use strict";angular.module("SampleHomeModule",["SamplePostModule","SubmitButton","TokenRefresh","ModalNotification"]).controller("SampleHomeController",["AppCall","Notification",function(e,t){var n=this;n.uuid="none",n.token="none",n.session="none",n.status="err-no",n.OnResponse=function(e,a){n.status=e.request.status,n.errcode=a,n.request=e.request,n.response=e.response;var i=e.request.reqid.toUpperCase();switch(i){case"CONNECT":if("success"!==e.request.status)return t.error({message:i+": Logout before reconnecting",delay:5e3}),void(n["class"][e.request.reqid]="fail");n["class"]={};break;case"LOGOUT":if("success"!==e.request.status)return t.error({message:i+": Do connect first",delay:5e3}),void(n["class"][e.request.reqid]="fail");n["class"]={};break;case"REFRESH":case"CHECK":if("success"!==e.request.status)return t.error({message:i+": Need to be Connected to check/refresh session",delay:5e3}),void(n["class"][e.request.reqid]="fail");break;default:return void t.error({message:"Invalid RequestID:"+e.request.reqid,delay:5e3})}n["class"][e.request.reqid]="success"},n.ProcessError=function(e,a,i){t.error({message:"Invalid API:"+e.request.reqid,delay:5e3}),n.status="err-fx",n.errcode=a,n.request=e.request,n.response=""},n.ConnectClient=function(){e.get("auth","connect",{},n.OnResponse,n.InvalidApiCall)},n.CheckSession=function(){e.get("auth","check",{},n.OnResponse,n.InvalidApiCall)},n.RefreshSession=function(){e.get("auth","refresh",{},n.OnResponse,n.InvalidApiCall)},n.LogoutClient=function(){e.get("auth","logout",{},n.OnResponse,n.InvalidApiCall)},n.Initialised=function(){n["class"]={connect:"success"}}}])}(),function(){"use strict";angular.module("JQueryEmu",[]).factory("JQemu",function(){var e=function(e,t){for(var n=e,a=t.toUpperCase();n[0];){if(a===n[0].tagName)return n;n=n.parent()}},t=function(e,t,n){for(var a=n.toLowerCase(),i=t.toLowerCase()+"Name",s=e.children();s[0];){if(a===s[0][i])return s;s=s.next()}},n=function(e,t){for(var n=t.toLowerCase(),a=e.children();a[0];){if(a.hasClass(n))return a;a=a.next()}},a={FindInParent:e,FindByTag:t,FindByClass:n};return a})}();var foundationRoutes=[{name:"PostSample",url:"/sample-post",controller:"SamplePostController as ctrl",animationIn:"slideInRight",path:"pages/SamplePost/SamplePost.html"},{name:"SampleHome",url:"/sample-home",controller:"SampleHomeController as ctrl",animationIn:"slideInRight",path:"pages/SampleHome/SampleHome.html"}];!function(){"use strict";angular.module("AppConfig",[]).factory("AppConfig",["urlquery",function(e){var t={paths:{image:"images/",avatar:"images/avatars/"},session:{initial:e.token||"123456789",timeout:3600,pingrate:30,uuid:"",token:""}};return t}]).factory("AppCall",["$http","AppConfig","$log",function(e,t,n){var a={get:function(n,a,i,s,o){var l=function(e){o?o(e.data,e.status,e.config):s(e.data,e.status,e.config)},r=function(e){if(!e.data||!e.data.request)return void l(e);var n=e.data.request;n.token&&(t.session.token=n.token),n.uuid&&(t.session.uuid=n.uuid),n.timeout&&(t.session.timeout=n.timeout),s(e.data,e.status,e.config)};i.token||(i.token=t.session.token),i.reqid||(i.reqid=a);e.get("/api/"+n+"/"+a,{params:i}).then(r,l)}};return a}])}(),function(){"use strict";function e(){var e={};return location.search.substr(1).split("&").forEach(function(t){var n=t.split("=")[0],a=decodeURIComponent(t.split("=")[1]);n in e?e[n].push(a):e[n]=[a]}),e}function t(e,t,n){e.otherwise("/sample-home"),t.html5Mode(!0).hashPrefix("!")}function n(){FastClick.attach(document.body)}angular.module("AFBclient",["ui.router","ngAnimate","foundation","foundation.dynamicRouting","foundation.dynamicRouting.animations","ui-notification","AppConfig","JQueryEmu","SampleHomeModule","UploadFiles","LinkButton","TokenRefresh","RangeSlider","ModalNotification"]).value("urlquery",e()).config(t).run(n),t.$inject=["$urlRouterProvider","$locationProvider"]}(),function(){angular.module("AFBclient").run(["$templateCache",function(e){e.put("pages/SamplePost/SamplePost.html",'<h1><img class="logo" src="images/logo/triskel_iot_bzhx250.png" alt="IoT.bzh Logo" style="height:150px"> Post File Upload</h1><div class="sample-box box-content"><upload-image category="avatar" thumbnail="tux-visitor.png" maxsize="100" posturl="/api/post/upload-image" callback="ctrl.FileUploaded" accept="image" title="Change your Avatar"></upload-image></div><link-button href="home" icon="fi-home" label="home"></link-button>')}])}(),function(){angular.module("AFBclient").run(["$templateCache",function(e){e.put("pages/SampleHome/SampleHome.html",'<h3><img class="logo" src="images/logo/triskel_iot_bzhx250.png" alt="IoT.bzh Logo" style="height:150px"> App Framework Binder Simple Client</h3><token-refresh autolog="true" callback="ctrl.Initialised"></token-refresh><div class="button-box box-content"><submit-button class="session-button {{ctrl.class.connect}}" icon="fi-unlock" label="Connect" clicked="ctrl.ConnectClient"></submit-button><submit-button class="session-button {{ctrl.class.check}}" icon="fi-checkbox" label="Check" clicked="ctrl.CheckSession"></submit-button><submit-button class="session-button {{ctrl.class.refresh}}" icon="fi-arrows-compress" label="Refresh" clicked="ctrl.RefreshSession"></submit-button><submit-button class="session-button {{ctrl.class.logout}}" icon="fi-lock" label="Logout" clicked="ctrl.LogoutClient"></submit-button></div><div class="message-box box-content vertical grid-frame"><div class="response"><span class="grid-content noscroll req {{ctrl.status}}">req= {{ctrl.request}}</span> <span class="grid-content noscroll res {{ctrl.status}}">res= {{ctrl.response}}</span> <span class="grid-content noscroll status {{ctrl.status}}">status= {{ctrl.errcode}}</span></div></div><link-button href="sample-post" icon="fi-home" label="SamplePost"></link-button>')}])}();
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndpZGdldHMvUmFuZ2VTbGlkZXJzL1JhbmdlU2xpZGVyTW9kLmpzIiwid2lkZ2V0cy9Ob3RpZmljYXRpb25zL1Rva2VuUmVmcmVzaFN2Yy5qcyIsIndpZGdldHMvTm90aWZpY2F0aW9ucy9Nb2RhbE5vdGlmaWNhdGlvbi5qcyIsIndpZGdldHMvTmF2aWdhdGlvbi9MaW5rQnV0dG9uLmpzIiwid2lkZ2V0cy9Gb3JtSW5wdXQvVXBsb2FkRmlsZXMuanMiLCJ3aWRnZXRzL0FjdGlvbkJ1dHRvbnMvU3VibWl0QnV0dG9uLmpzIiwid2lkZ2V0cy9BY3Rpb25CdXR0b25zL0FwcGxpQnV0dG9uLmpzIiwicGFnZXMvU2FtcGxlUG9zdC9TYW1wbGVQb3N0LmpzIiwicGFnZXMvU2FtcGxlSG9tZS9TYW1wbGVIb21lLmpzIiwic2VydmljZXMvSlF1ZXJ5RW11LmpzIiwiZXRjL3JvdXRlcy5qcyIsImV0Yy9BcHBDb25maWcuanMiLCJhcHAuanMiXSwibmFtZXMiOlsiUmFuZ2VTbGlkZXJIYW5kbGUiLCJzY29wZSIsImludGVybmFscyIsImV4dGVybmFscyIsInRoaXMiLCJnZXRJZCIsInNsaWRlcmlkIiwiZ2V0Q2JIYW5kbGUiLCJjYmhhbmRsZSIsImdldFZpZXciLCJoYW5kbGUiLCJ2YWx1ZSIsImZvcm1hdHRlciIsImN0cmxoYW5kbGUiLCJ1cGRhdGVDbGFzcyIsImNsYXNzZSIsInN0YXR1cyIsImZvcmNlUmVmcmVzaCIsInRpbWVyIiwiZ2V0VmFsdWUiLCJnZXRSZWxhdGl2ZSIsInJlbGF0aXZlIiwic2V0VmFsdWUiLCJzZXREaXNhYmxlIiwiZmxhZyIsIlJhbmdlU2xpZGVyIiwiYW5ndWxhciIsIm1vZHVsZSIsImRpcmVjdGl2ZSIsIiRsb2ciLCIkZG9jdW1lbnQiLCIkdGltZW91dCIsImxpbmsiLCJlbGVtZW50IiwiYXR0cnMiLCJtb2RlbCIsImluaXRXaWRnZXQiLCJpbml0dmFsdWVzIiwiYnlTdGVwIiwicGFyc2VJbnQiLCJub3RNb3JlIiwibm90TGVzcyIsImlkIiwidW5kZWZpbmVkIiwiZHVhbCIsImFkZENsYXNzIiwicmVtb3ZlQ2xhc3MiLCJkaXNhYmxlZCIsImhhbmRsZXMiLCJjc3MiLCJub3JtYWxpemUiLCJyZXN1bHQiLCJyYW5nZSIsInBvaW50IiwibW9kIiwicmVtIiwicm91bmQiLCJwb3dlciIsIk1hdGgiLCJwb3ciLCJvZmZzZXQiLCJ2ZXJ0aWNhbCIsImJvdW5kcyIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImhlaWdodCIsImJhciIsIndpZHRoIiwibmV3dmFsdWUiLCJzdGFydFZhbHVlIiwic3RvcFZhbHVlIiwidmlld1ZhbHVlIiwiZGlzcGxheXMiLCJodG1sIiwiJHNldFZpZXdWYWx1ZSIsIiRhcHBseSIsInRyYW5zbGF0ZSIsInNldFN0YXJ0Iiwic3RhcnQiLCJzZXRTdG9wIiwic3RvcCIsInJpZ2h0Iiwidm9mZnNldCIsIi13ZWJraXQtdHJhbnNmb3JtIiwiLW1vei10cmFuc2Zvcm0iLCItbXMtdHJhbnNmb3JtIiwiLW8tdHJhbnNmb3JtIiwidHJhbnNmb3JtIiwic2xpZGVyIiwiYm90dG9tIiwibGVmdCIsImtleWRvd24iLCJlIiwia2V5Q29kZSIsImFjdGlmIiwiY2FsbGJhY2siLCJibHVyIiwibW92ZUhhbmRsZSIsImNsaWVudFgiLCJjbGllbnRZIiwiZm9jdXNDQiIsImluc2lkZSIsIm9uIiwidW5iaW5kIiwidG91Y2hCYXJDQiIsImV2ZW50IiwidG91Y2hlcyIsImNoYW5nZWRUb3VjaGVzIiwib2xkdmFsdWUiLCJwcmV2ZW50RGVmYXVsdCIsInBhZ2VZIiwicGFnZVgiLCJkaXN0YW5jZTAiLCJhYnMiLCJkaXN0YW5jZTEiLCJ0b3VjaEhhbmRsZUNCIiwidG91Y2hldnQiLCJ0b3VjaG1vdmUiLCJpZHgiLCJsZW5ndGgiLCJ0b3VjaGVuZCIsImhhbmRsZUNCIiwiY2xpY2tldmVudCIsIm1vdXNlbW92ZSIsIm1vdXNldXAiLCJhdXRvbWF0aWMiLCJmb2N1cyIsImZpbmQiLCJzZWxlY3QiLCJlbGVtIiwiZG9tZWxlbSIsInF1ZXJ5U2VsZWN0b3IiLCJhbmdlbGVtIiwiaW5pdGlhbFNldHRpbmdzIiwiaW5pdGlhbCIsImRlY2ltYWxfcGxhY2VzX21hdGNoX3Jlc3VsdCIsInByZWNpc2lvbiIsIm1hdGNoIiwiZXZ0IiwiaW5pdCIsInJhbmRvbSIsIkluZmluaXR5IiwiZHVhbEhhbmRsZXMiLCJ0cmlnZ2VyX2lucHV0X2NoYW5nZSIsImRpc2FibGUiLCJkaXNwbGF5VGFyZ2V0IiwiZ2V0RWxlbWVudEJ5SWQiLCJzcGxpdCIsIm5nTW9kZWwiLCIkd2F0Y2giLCJzdGFydEF0Iiwic3RvcEF0IiwiaW5pdGhvb2siLCJuZXdWYWx1ZSIsInRlbXBsYXRlIiwicmVzdHJpY3QiLCJyZXF1aXJlIiwicmVwbGFjZSIsIiR3aW5kb3ciLCIkbG9jYXRpb24iLCJOb3RpZmljYXRpb24iLCJBcHBDb25maWciLCJBcHBDYWxsIiwibXltZXRob2RzIiwibG9nZ2VkIiwib25iZWZvcmV1bmxvYWQiLCJnZXQiLCJwbHVnaW4iLCJsb2ciLCJvbmxpbmUiLCJvZmZsaW5lIiwib25lcnJvciIsIndhcm5pbmciLCJtZXNzYWdlIiwiZGVsYXkiLCJvbnN1Y2Nlc3MiLCJqcmVzcCIsImVycmNvZGUiLCJyZXF1ZXN0IiwiaW5mbyIsInN1Y2Nlc3MiLCJnZXRwaW5nIiwic2Vzc2lvbiIsInBpbmdyYXRlIiwicmVmcmVzaCIsInRpbWVvdXQiLCJsb2dnaW4iLCJ0b2tlbiIsImljb24iLCJob3N0bmFtZSIsImhvc3QiLCJodHRwZHBvcnQiLCJwb3J0IiwiYXV0b2xvZyIsIkpTT04iLCJwYXJzZSIsInRtcGwiLCJkaXNwbGF5IiwiYWN0aW9uIiwic2hvdyIsIm1vZGFsIiwib3BhY2l0eSIsInZpc2liaWxpdHkiLCJjbG9zZSIsInBhcmVudCIsImJpbmQiLCJ0aXAiLCJjbGlja2VkIiwicXVlcnkiLCJwYXRoIiwiaHJlZiIsInNlYXJjaCIsImxhYmVsIiwidG9Mb3dlckNhc2UiLCJMb2FkRmlsZVN2YyIsInBvc3R1cmwiLCJmaWxlcyIsInRodW1ibmFpbENCIiwieG1sUmVxIiwiWE1MSHR0cFJlcXVlc3QiLCJ4Zm9ybSIsIkZvcm1EYXRhIiwiT25Mb2FkQ0IiLCJ0YXJnZXQiLCJ1cGxvYWQiLCJvbnByb2dyZXNzIiwicHJvZ3Jlc3MiLCJsZW5ndGhDb21wdXRhYmxlIiwibG9hZGVkIiwidG90YWwiLCJvbmxvYWQiLCJyZXNwb25zZSIsImhlYWRlcnMiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJvbmFib3J0IiwiaSIsImZpbGUiLCJ0eXBlIiwibWltZXR5cGUiLCJzaXplIiwibWF4c2l6ZSIsInRodW1ibmFpbCIsImlzdG9vYmlnIiwiaXNOYU4iLCJpc25vdHZhbGlkIiwiQmFzZW5hbWUiLCJuYW1lIiwicmV2ZXJzZSIsImltZ0VsZW0iLCJyZWFkZXIiLCJGaWxlUmVhZGVyIiwicmVhZEFzQXJyYXlCdWZmZXIiLCJhcHBlbmQiLCJvcGVuIiwic2VuZCIsIkpRZW11IiwiaW5wdXRFbGVtIiwiaW1nQ2xpY2tlZCIsImNsaWNrIiwiU2xpZGVySW5pdENCIiwiVXBMb2FkRmlsZSIsInJlYWRlckNCIiwic3JjIiwid2luZG93IiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiQmxvYiIsImNhdGVnb3J5IiwiYWNjZXB0IiwicmVnZXhwIiwiUmVnRXhwIiwicGF0aHMiLCJub3NsaWRlciIsIlR5cGVFcnJvciIsInppcGFwcCIsIkpTWmlwIiwiYXNBcnJheUJ1ZmZlciIsInRtcGxBcHBsaSIsInRtcGxNb2RhbCIsInRtcGxEZXRhaWwiLCJNb2RhbEZhY3RvcnkiLCJ1cmxxdWVyeSIsInJ1bnN0YXR1cyIsInJ1bm1vZGUiLCJub3RpZnlFcnJvciIsImVycm9yIiwiYXBwSUQiLCJub3RpZnlTdWNjZXNzIiwicnVuSUQiLCJkYXRhIiwicnVuaWQiLCJjbG9zZU1vZEFwcCIsIm1vZEFwcCIsImRlYWN0aXZhdGUiLCJkZXN0cm95IiwiY2xvc2VNb2RJbmZvIiwibW9kSW5mbyIsImFjdGlvbk1vZGFsIiwibW9kZSIsImp0eXBlIiwidXJpIiwid2luYXBwIiwiY29uZmlnIiwiYW5pbWF0aW9uSW4iLCJjb250ZW50U2NvcGUiLCJkZXRhaWwiLCJhY3RpdmF0ZSIsInN0b3JlIiwiaWNvbnMiLCJjb250cm9sbGVyIiwiJGh0dHAiLCJGaWxlVXBsb2FkZWQiLCJ1dWlkIiwiT25SZXNwb25zZSIsInJlcWlkIiwidG9VcHBlckNhc2UiLCJQcm9jZXNzRXJyb3IiLCJDb25uZWN0Q2xpZW50IiwiSW52YWxpZEFwaUNhbGwiLCJDaGVja1Nlc3Npb24iLCJSZWZyZXNoU2Vzc2lvbiIsIkxvZ291dENsaWVudCIsIkluaXRpYWxpc2VkIiwiY29ubmVjdCIsImZhY3RvcnkiLCJGaW5kSW5QYXJlbnQiLCJzZWxlY3RvciIsInRhZ05hbWUiLCJGaW5kQnlUYWciLCJ0YWciLCJjaGlsZHJlbiIsIm5leHQiLCJGaW5kQnlDbGFzcyIsImhhc0NsYXNzIiwibXlNZXRob2RzIiwiZm91bmRhdGlvblJvdXRlcyIsInVybCIsIm15Q29uZmlnIiwiaW1hZ2UiLCJhdmF0YXIiLCJteUNhbGxzIiwiY2JyZXNwb25zZSIsImNiZXJyb3IiLCJwYXJhbXMiLCJ0aGVuIiwiUGFyc2VRdWVyeVN0cmluZyIsInFkIiwibG9jYXRpb24iLCJzdWJzdHIiLCJmb3JFYWNoIiwiaXRlbSIsImsiLCJ2IiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicHVzaCIsIiR1cmxQcm92aWRlciIsIiRsb2NhdGlvblByb3ZpZGVyIiwib3RoZXJ3aXNlIiwiaHRtbDVNb2RlIiwiaGFzaFByZWZpeCIsInJ1biIsIkZhc3RDbGljayIsImF0dGFjaCIsImRvY3VtZW50IiwiYm9keSIsIiRpbmplY3QiLCIkdGVtcGxhdGVDYWNoZSIsInB1dCJdLCJtYXBwaW5ncyI6IkNBa0RBLFdBQ0EsWUFJQSxTQUFBQSxHQUFBQyxHQUNBLEdBQUFDLE1BQ0FDLElBRUFDLE1BQUFDLE1BQUEsV0FDQSxNQUFBSixHQUFBSyxVQUdBRixLQUFBRyxZQUFBLFdBQ0EsTUFBQU4sR0FBQU8sVUFHQUosS0FBQUssUUFBQSxTQUFBQyxHQUlBLE1BSEFBLEtBQUFBLEVBQUEsR0FHQVQsRUFBQVUs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Z0JBR0FELEVBQUFFLFdBQUEsR0FBQUMsV0FBQSxLQUlBLFFBQUFDLEtBQ0FDLFVBQUFDLE9BQUFDLFNBQUFDLE1BdENBalYsUUFBQUMsT0FBQSxhQUNBLFlBQ0EsWUFHQSxhQUNBLDRCQUNBLHVDQUdBLGtCQUdBLFlBQ0EsWUFDQSxtQkFDQSxjQUNBLGFBQ0EsZUFDQSxjQUNBLHNCQUVBaEIsTUFBQSxXQUFBNlUsS0FDQTNDLE9BQUFBLEdBQ0EwRCxJQUFBQSxHQUdBMUQsRUFBQStELFNBQUEscUJBQUEsd0JMeENBLFdBQUFsVixRQUFBQyxPQUFBLGFBQUE0VSxLQUFBLGlCQUFBLFNBQUFNLEdBQUFBLEVBQUFDLElBQUEsbUNBQ0Esc2JDREEsV0FBQXBWLFFBQUFDLE9BQUEsYUFBQTRVLEtBQUEsaUJBQUEsU0FBQU0sR0FBQUEsRUFBQUMsSUFBQSxtQ0FDQSIsImZpbGUiOiJBRkJjbGllbnQubWluLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgXCJJb1QuYnpoXCJcbiAqIEF1dGhvciBcIkZ1bHVwIEFyIEZvbGxcIlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4gKiBcbiAqIEJ1Z3M6IElucHV0IHdpdGggQ2FsbGJhY2sgU0hPVUxEIEJFIGdldCAncmVxdWlyZWQnIGNsYXNzXG4gKiBcbiAqIHJlZjogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvRXZlbnRzL21vdXNlb3ZlclxuICogXG4gKiB1c2FnZTogXG5Vc2FnZSAgPHJhbmdlLXNsaWRlcj5cbi0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgPHJhbmdlLXNsaWRlclxuICAgICAgaWQ9XCJteS1zbGlkZXItbmFtZVwiICAgICAgICAgICAgICAgICAgICAgLy8gb25seSB1c2UgYXMgYW4gYXJndW1lbnQgdG8gY2FsbGJhY2tcbiAgICAgIGNsYXNzPVwibXktY3VzdG9tLWNsYXNzXCIgICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgY2xhc3MgaXMgaWJ6LXJhbmdlLXNsaWRlclxuICAgICAgcGxhY2Vob2xkZXI9XCJUcmFjayBEYXRlIFNlbGVjdGlvblwiICAgICAgLy8gcGxhY2UgaG9sZGVyIGZvciBkYXRlIHJlYWRvbmx5IGlucHV0IHpvbmVcblxuICAgICAgPCEtLSBGb3VuZGF0aW9uIGNsYXNzZXMgLS0+XG4gICAgICBjbGFzcz1cInJhZGl1c1wiICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBadXJiIGZvdW5kYXRpb24gZG9jIGZvciBmdXJ0aGVyIGluZm8uXG4gICAgICBjbGFzcz1cImliei1oYW5kbGUtZGlzcGxheVwiICAgICAgICAgICAgICAvLyBpbmNyZWFzZSBoYW5kbGUgd2lkdGggdG8gaG9sZCBzbGlkZXIgY3VycmVudCB2YWx1ZVxuXG4gICAgICA8IS0tIEFuZ3VsYXIgU2NvcGUgVmFyaWFibGVzIC0tPlxuICAgICAgY2FsbGJhY2s9XCJteUNhbGxCYWNrXCIgICAgICAgICAgICAgICAgICAgIC8vICRzY29wZS5teUNhbGxCYWNrKHNsaWRlcmhhbmRsZSkgaXMgY2FsbGVkIHdoZW4gZXZlciBzbGlkZXIgaGFuZGxlIGJsdXJcbiAgICAgIGZvcm1hdHRlcj1cIlNsaWRlckZvcm1hdENCXCIgICAgICAgICAgICAgICAvLyAkc2NvcGUubXlGb3JtYXR0ZXIodmFsdWUsIHNsaWRlcmlkKSB3aGVuIGV4aXN0IGlzIGNhbGwgd2hlbiBldmVyIHNsaWRlciBoYW5kbGUgbW92ZXMuIFNob3VsZCByZXR1cm4gZXh0ZXJuYWwgZm9ybSBvZiBzbGlkZXIgdmFsdWUuXG4gICAgICBuZy1tb2RlbD1cInh4eHh4eFwiICAgICAgICAgICAgICAgICAgICAgICAgLy8geHh4IE11c3QgYmUgZGVmaW5lZCwgc2NyaXB0IHdpbGwgc3RvcmUgYSBuZXcgUmFuZ2VyT2JqZWN0IHdpdGhpbiBwcm92aWRlZCBuZy1tb2RlbCB2YXJpYWJsZS5cbiAgICAgIHN0YXJ0LWF0PVwiU2NvcGVWYXJcIiAgICAgICAgICAgICAgICAgICAgICAvLyBEeW5hbWljIGxpbWl0YXRpb24gd2hlbiBzbGlkZXIgaXMgY29uc3RyYWlucyBieSBhbiBleHRlcm5hbCBjb21wb25hbnQgW2V4OiBjaGVjayBpbi9vdXRdXG4gICAgICBzdG9wLWF0PVwiU2NvcGVWYXJcIiAgICAgICAgICAgICAgICAgICAgICAgLy8gSWRlbSBidXQgZm9yIGVuZC5cblxuICAgICAgPCEtLSBBbmd1bGFyIERpcmVjdGl2ZSBBdHRyaWJ1dGVzIC0tPlxuICAgICAgbm90LWxlc3M9XCJpbnRlZ2VyXCIgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpeGVkIHN0YXJ0aW5nIHZhbHVlIGZvciBzbGlkZXIgW2RlZmF1bHQgMF1cbiAgICAgIG5vdC1tb3JlPVwiaW50ZWdlclwiICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXhlZCBlbmQgdmFsdWUgZm9yIHNsaWRlcnMgW2RlZmF1bHQgMTAwXVxuICAgICAgYnktc3RlcD1cIistaW50ZWdlclwiICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGJ5LXN0ZXAgaXMgPjAgdGhlbiBzbGlkZXIgdXNlIGl0IGFzIHN0ZXAtdmFsdWUsIHdoZW4gbmVnYXRpdmUgdXNlIGl0IGZvciBkZWNpbWFsIHByZWNpc2lvblxuICAgICAgZGlzcGxheS10YXJnZXQ9XCJoYW5kbGVcIiAgICAgICAgICAgICAgICAgIC8vIGRpc3BsYXkgc2xpZGVyIGV4dGVybmFsIGZvcm1hdGVkIHZhbHVlIGluIHRoZSBoYW5kbGUgW3JlcXVpcmVyIGNhbHNzPVwiaWJ6LWhhbmRsZS1kaXNwbGF5XCJdXG4gICAgICBkdWFsLWhhbmRsZXM9J3RydWUnICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZCBhIHNlY29uZCBoYW5kbGUgdG8gc2xpZGVyIGZvciBtaW4vbWF4IHJhbmdlXG4gICAgICBpbml0aWFsPSd2YWx1ZXxbc3RhcnQvc3RvcF0nICAgICAgICAgICAgIC8vIHNsaWRlciBpbml0aWFsIHZhbHVlIFtkdWFsLWhhbmRsZXNdIG1heSBoYXZlIGluaXRpYWwgdmFsdWVzXG4gICAvPjwvcmFuZ2Utc2xpZGVyPlxuICovXG5cbihmdW5jdGlvbiAoKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmFuZ2VTbGlkZXIgPSBhbmd1bGFyLm1vZHVsZSgnUmFuZ2VTbGlkZXInLFtdKTtcblxuZnVuY3Rpb24gUmFuZ2VTbGlkZXJIYW5kbGUgKHNjb3BlKSB7XG4gICAgdmFyIGludGVybmFscyA9IFtdO1xuICAgIHZhciBleHRlcm5hbHMgPSBbXTtcblxuICAgIHRoaXMuZ2V0SWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHNjb3BlLnNsaWRlcmlkO1xuICAgIH07XG5cbiAgICB0aGlzLmdldENiSGFuZGxlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzY29wZS5jYmhhbmRsZTtcbiAgICB9O1xuXG4gICAgdGhpcy5nZXRWaWV3PSBmdW5jdGlvbiAoaGFuZGxlKSB7XG4gICAgICAgIGlmICghaGFuZGxlKSBoYW5kbGUgPSAwO1xuXG4gICAgICAgIC8vIGlmIHZhbHVlIGRpZCBub3QgY2hhbmdlIHJldHVybiBjdXJyZW50IGV4dGVybmFsIHJlcHJlc2VudGF0aW9uXG4gICAgICAgIGlmIChzY29wZS52YWx1ZVtoYW5kbGVdID09PSBpbnRlcm5hbHNbaGFuZGxlXSkgcmV0dXJuIGV4dGVybmFsc1toYW5kbGVdO1xuXG4gICAgICAgIC8vIGJ1aWxkIGV4dGVybmFsIHJlcHJlc2VudGF0aW9uIGFuZCBzYXZlIGl0IGZvciBmdXJ0aGVyIHJlcXVlc3RzXG4gICAgICAgIGludGVybmFsc1toYW5kbGVdID0gc2NvcGUudmFsdWVbaGFuZGxlXTtcbiAgICAgICAgaWYgKHNjb3BlLmZvcm1hdHRlcikgZXh0ZXJuYWxzW2hhbmRsZV0gPSBzY29wZS5mb3JtYXR0ZXIoc2NvcGUudmFsdWVbaGFuZGxlXSwgc2NvcGUuY3RybGhhbmRsZSk7XG4gICAgICAgIGVsc2UgIGV4dGVybmFsc1toYW5kbGVdID0gc2NvcGUudmFsdWVbaGFuZGxlXTtcblxuICAgICAgICByZXR1cm4gZXh0ZXJuYWxzW2hhbmRsZV07XG4gICAgfTtcblxuICAgIHRoaXMudXBkYXRlQ2xhc3MgPSBmdW5jdGlvbiAoY2xhc3NlLCBzdGF0dXMpIHtcbiAgICAgICBzY29wZS51cGRhdGVDbGFzcyAoY2xhc3NlLCBzdGF0dXMpO1xuICAgIH07XG5cbiAgICB0aGlzLmZvcmNlUmVmcmVzaCA9IGZ1bmN0aW9uICh0aW1lcikge1xuICAgICAgIHNjb3BlLmZvcmNlUmVmcmVzaCh0aW1lcik7XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0VmFsdWU9IGZ1bmN0aW9uIChoYW5kbGUpIHtcbiAgICAgICAgaWYgKCFoYW5kbGUpIGhhbmRsZSA9IDA7XG4gICAgICAgIHJldHVybiBzY29wZS52YWx1ZVtoYW5kbGVdO1xuICAgIH07XG5cbiAgICB0aGlzLmdldFJlbGF0aXZlPSBmdW5jdGlvbiAoaGFuZGxlKSB7XG4gICAgICAgIGlmICghaGFuZGxlKSBoYW5kbGUgPSAwO1xuICAgICAgICByZXR1cm4gc2NvcGUucmVsYXRpdmVbaGFuZGxlXTtcbiAgICB9O1xuXG4gICAgdGhpcy5zZXRWYWx1ZT0gZnVuY3Rpb24gKHZhbHVlLCBoYW5kbGUpIHtcbiAgICAgICAgaWYgKCFoYW5kbGUpIGhhbmRsZSA9IDA7XG4gICAgICAgIHNjb3BlLnNldFZhbHVlICh2YWx1ZSwgaGFuZGxlKTtcbiAgICB9O1xuXG4gICAgdGhpcy5zZXREaXNhYmxlPSBmdW5jdGlvbiAoZmxhZykge1xuICAgICAgICBzY29wZS5zZXREaXNhYmxlKGZsYWcpO1xuICAgIH07XG59XG5cblJhbmdlU2xpZGVyLmRpcmVjdGl2ZSgncmFuZ2VTbGlkZXInLCBbXCIkbG9nXCIsIFwiJGRvY3VtZW50XCIsIFwiJHRpbWVvdXRcIiwgZnVuY3Rpb24gKCRsb2csICRkb2N1bWVudCwgJHRpbWVvdXQpIHtcblxuICAgIHZhciB0ZW1wbGF0ZT0gJzxkaXYgY2xhc3M9XCJpYnotcmFuZ2Utc2xpZGVyIHJhbmdlLXNsaWRlclwiIHRpdGxlPVwie3t0aXRsZX19XCJkYXRhLXNsaWRlcj4nK1xuICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwicmFuZ2Utc2xpZGVyLWhhbmRsZSBoYW5kbGUtbWluXCIgbmctbW91c2Vkb3duPVwiaGFuZGxlQ0IoJGV2ZW50LDApXCIgbmctZm9jdXM9XCJmb2N1c0NCKHRydWUpXCIgbmctYmx1cj1cImZvY3VzQ0IoZmFsc2UpXCIgcm9sZT1cInNsaWRlclwiIHRhYmluZGV4PVwiMFwiPjwvc3Bhbj4nK1xuICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwiaGFuZGxlLW1heFwiIG5nLW1vdXNlZG93bj1cImhhbmRsZUNCKCRldmVudCwxKVwiIG5nLWZvY3VzPVwiZm9jdXNDQih0cnVlKVwiIG5nLWJsdXI9XCJmb2N1c0NCKGZhbHNlKVwiIHJvbGU9XCJzbGlkZXJcIiB0YWJpbmRleD1cIjBcIj48L3NwYW4+JytcbiAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInJhbmdlLXNsaWRlci1hY3RpdmUtc2VnbWVudFwiPjwvc3Bhbj4nK1xuICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwiaWJ6LXJhbmdlLXNsaWRlci1zdGFydFwiID48L3NwYW4+ICcrXG4gICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJpYnotcmFuZ2Utc2xpZGVyLXN0b3BcIj48L3NwYW4+ICcrXG4gICAgICAgICAgICAgICAgICAnPGlucHV0IGlkPXt7c2xpZGVyaWR9fSB0eXBlPVwiaGlkZGVuXCI+JytcbiAgICAgICAgICAgICAgICAgICc8L2Rpdj4nO1xuXG5cbiAgICBmdW5jdGlvbiBsaW5rIChzY29wZSwgZWxlbWVudCwgYXR0cnMsIG1vZGVsKSB7XG4gICAgICAgIC8vIGZ1bGwgaW5pdGlhbGlzYXRpb24gb2Ygc2xpZGVyIGZyb20gYSBzaW5nbGUgb2JqZWN0XG4gICAgICAgIHNjb3BlLmluaXRXaWRnZXQgPSBmdW5jdGlvbiAoaW5pdHZhbHVlcykge1xuXG4gICAgICAgICAgICBpZiAoaW5pdHZhbHVlcy5ieVN0ZXApICBzY29wZS5ieVN0ZXAgID0gcGFyc2VJbnQoaW5pdHZhbHVlcy5ieVN0ZXApO1xuICAgICAgICAgICAgaWYgKGluaXR2YWx1ZXMubm90TW9yZSkgc2NvcGUubm90TW9yZSA9IHBhcnNlSW50KGluaXR2YWx1ZXMubm90TW9yZSk7XG4gICAgICAgICAgICBpZiAoaW5pdHZhbHVlcy5ub3RMZXNzKSBzY29wZS5ub3RMZXNzID0gcGFyc2VJbnQoaW5pdHZhbHVlcy5ub3RMZXNzKTtcbiAgICAgICAgICAgIGlmIChpbml0dmFsdWVzLmlkKSAgICAgIHNjb3BlLnNsaWRlcmlkPSBpbml0dmFsdWVzLmlkO1xuXG4gICAgICAgICAgICAvLyBodWdlbHkgYnV0IGluIHNvbWUgY2FzZSBET00gaXMgbm90IGZpbmlzaCB3aGVuIHdlIHRyeSB0byBzZXQgdmFsdWVzICEhIVxuICAgICAgICAgICAgaWYgKGluaXR2YWx1ZXMudmFsdWUgIT09IHVuZGVmaW5lZCkgICB7XG4gICAgICAgICAgICAgICAgc2NvcGUudmFsdWUgPSBpbml0dmFsdWVzLnZhbHVlO1xuICAgICAgICAgICAgICAgIHNjb3BlLmZvcmNlUmVmcmVzaCAoNTApOyAvLyB3YWl0IDUwbXMgZm9yIERPTSB0byBiZSByZWFkeVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIHRoaXMgZnVuY3Rpb24gcmVjb21wdXRlIHNsaWRlIHBvc2l0aW9uaW5nXG4gICAgICAgIHNjb3BlLmZvcmNlUmVmcmVzaCA9IGZ1bmN0aW9uICh0aW1lcikge1xuICAgICAgICAgICB2YXIgdmFsdWUgPSBzY29wZS52YWx1ZTtcbiAgICAgICAgICAgc2NvcGUudmFsdWUgPSBbdW5kZWZpbmVkLHVuZGVmaW5lZF07XG4gICAgICAgICAgICR0aW1lb3V0IChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgIHNjb3BlLnNldFZhbHVlKHZhbHVlWzBdLDApO1xuICAgICAgICAgICAgICAgaWYgKHNjb3BlLmR1YWwpICBzY29wZS5zZXRWYWx1ZSh2YWx1ZVsxXSwxKTtcbiAgICAgICAgICAgfSwgdGltZXIpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGhhbmRsZXIgdG8gY2hhbmdlIGNsYXNzIGZyb20gc2xpZGVyIGhhbmRsZVxuICAgICAgICBzY29wZS51cGRhdGVDbGFzcyA9IGZ1bmN0aW9uIChjbGFzc2UsIHN0YXR1cykge1xuXG4gICAgICAgICAgICBpZiAoc3RhdHVzKSBlbGVtZW50LmFkZENsYXNzIChjbGFzc2UpO1xuICAgICAgICAgICAgZWxzZSAgZWxlbWVudC5yZW1vdmVDbGFzcyAoY2xhc3NlKTtcbiAgICAgICAgfTtcblxuICAgICAgICBzY29wZS5zZXREaXNhYmxlID0gZnVuY3Rpb24gKGRpc2FibGVkKSB7XG5cbiAgICAgICAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuYWRkQ2xhc3MgKFwiZGlzYWJsZVwiKTtcbiAgICAgICAgICAgICAgICBzY29wZS5oYW5kbGVzWzBdLmNzcyAoJ3Zpc2liaWxpdHknLCdoaWRkZW4nKTtcbiAgICAgICAgICAgICAgICBpZiAoc2NvcGUuZHVhbCkge1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5oYW5kbGVzWzFdLmNzcyAoJ3Zpc2liaWxpdHknLCdoaWRkZW4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQ2xhc3MgKFwiZGlzYWJsZVwiKTtcbiAgICAgICAgICAgICAgICBzY29wZS5oYW5kbGVzWzBdLmNzcyAoJ3Zpc2liaWxpdHknLCd2aXNpYmxlJyk7XG4gICAgICAgICAgICAgICAgaWYgKHNjb3BlLmR1YWwpIHNjb3BlLmhhbmRsZXNbMV0uY3NzICgndmlzaWJpbGl0eScsJ3Zpc2libGUnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9O1xuXG4gICAgICAgIHNjb3BlLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgICAgIHZhciByYW5nZSA9IHNjb3BlLm5vdE1vcmUgLSBzY29wZS5ub3RMZXNzO1xuICAgICAgICAgICAgdmFyIHBvaW50ID0gdmFsdWUgKiByYW5nZTtcblxuICAgICAgICAgICAgLy8gaWYgc3RlcCBpcyBwb3NpdGl2ZSBsZXQncyByb3VuZCBzdGVwIGJ5IHN0ZXBcbiAgICAgICAgICAgIGlmIChzY29wZS5ieVN0ZXAgPiAgMCkge1xuICAgICAgICAgICAgICAgIHZhciBtb2QgPSAocG9pbnQgLSAocG9pbnQgJSBzY29wZS5ieVN0ZXApKSAvIHNjb3BlLmJ5U3RlcDtcbiAgICAgICAgICAgICAgICB2YXIgcmVtID0gcG9pbnQgJSBzY29wZS5ieVN0ZXA7XG5cbiAgICAgICAgICAgICAgICB2YXIgcm91bmQgPSAocmVtID49IHNjb3BlLmJ5U3RlcCAqIDAuNSA/IHNjb3BlLmJ5U3RlcCA6IDApO1xuICAgICAgICAgICAgICAgIHJlc3VsdD0gKG1vZCAqIHNjb3BlLmJ5U3RlcCArIHJvdW5kKSArIHNjb3BlLm5vdExlc3M7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyAoXCJyYW5nZT0lZCB2YWx1ZT0lZCBwb2ludD0lZCBtb2Q9JWQgcmVtPSVkIHJvdW5kPSVkIHJlc3VsdD0lZFwiLCByYW5nZSwgdmFsdWUsIHBvaW50LCBtb2QsIHJlbSwgcm91bmQsIHJlc3VsdClcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiBzdGVwIGlzIG5lZ2F0aXZlIHJldHVybiByb3VuZCB0byBhc2tlZCBkZWNpbWFsXG4gICAgICAgICAgICBpZiAoc2NvcGUuYnlTdGVwIDwgIDApIHtcbiAgICAgICAgICAgICAgICB2YXIgcG93ZXIgID0gIE1hdGgucG93ICgxMCwoc2NvcGUuYnlTdGVwICogLTEpKTtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBzY29wZS5ub3RMZXNzICsgcGFyc2VJbnQgKHBvaW50ICogcG93ZXIpIC8gcG93ZXI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChyZXN1bHQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiBzdGVwIGlzIG51bGwgcmV0dXJuIGZ1bGwgdmFsdWVcbiAgICAgICAgICAgIHJldHVybiBwb2ludDtcbiAgICAgICB9O1xuXG4gICAgICAgIC8vIHJldHVybiBjdXJyZW50IHZhbHVlXG4gICAgICAgIHNjb3BlLmdldFZhbHVlID0gZnVuY3Rpb24gKG9mZnNldCwgaGFuZGxlKSB7XG4gICAgICAgICAgICBpZiAoc2NvcGUudmVydGljYWwpIHtcbiAgICAgICAgICAgICAgICBzY29wZS5yZWxhdGl2ZVtoYW5kbGVdID0gKG9mZnNldCAtIHNjb3BlLmJvdW5kcy5oYW5kbGVzW2hhbmRsZV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KSAvIChzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCAtIHNjb3BlLmJvdW5kcy5oYW5kbGVzW2hhbmRsZV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2NvcGUucmVsYXRpdmVbaGFuZGxlXSA9IG9mZnNldCAvICAoc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAtIHNjb3BlLmJvdW5kcy5oYW5kbGVzW2hhbmRsZV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgbmV3dmFsdWUgPSBzY29wZS5ub3JtYWxpemUgKHNjb3BlLnJlbGF0aXZlW2hhbmRsZV0pO1xuXG5cbiAgICAgICAgICAgIC8vIGlmIGludGVybmFsIHZhbHVlIGNoYW5nZSB1cGRhdGUgb3IgbW9kZWxcbiAgICAgICAgICAgIGlmIChuZXd2YWx1ZSAhPT0gc2NvcGUudmFsdWVbaGFuZGxlXSkge1xuICAgICAgICAgICAgICAgIGlmIChuZXd2YWx1ZSA8IHNjb3BlLnN0YXJ0VmFsdWUpIG5ld3ZhbHVlPXNjb3BlLnN0YXJ0VmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKG5ld3ZhbHVlID4gc2NvcGUuc3RvcFZhbHVlKSAgbmV3dmFsdWU9c2NvcGUuc3RvcFZhbHVlO1xuXG5cbiAgICAgICAgICAgICAgICBpZiAoc2NvcGUuZm9ybWF0dGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLnZpZXdWYWx1ZSA9IHNjb3BlLmZvcm1hdHRlciAobmV3dmFsdWUsIHNjb3BlLmN0cmxoYW5kbGUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLnZpZXdWYWx1ZSA9IG5ld3ZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2NvcGUuZGlzcGxheXNbaGFuZGxlXSkge1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5kaXNwbGF5c1toYW5kbGVdLmh0bWwgKHNjb3BlLnZpZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlIGV4dGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbFxuICAgICAgICAgICAgICAgIHNjb3BlLnZhbHVlW2hhbmRsZV0gPSBuZXd2YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAobW9kZWwpIG1vZGVsLiRzZXRWaWV3VmFsdWUgKHNjb3BlLnZpZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgc2NvcGUuJGFwcGx5KCk7XG4gICAgICAgICAgICAgICAgaWYgKG5ld3ZhbHVlID4gc2NvcGUuc3RhcnRWYWx1ZSAmJiBuZXd2YWx1ZSA8IHNjb3BlLnN0b3BWYWx1ZSkgc2NvcGUudHJhbnNsYXRlKG9mZnNldCwgaGFuZGxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuXG4gICAgICAgIHNjb3BlLnNldFN0YXJ0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgb2Zmc2V0O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAodmFsdWUgPiBzY29wZS52YWx1ZVswXSkge1xuICAgICAgICAgICAgICAgIGlmICghc2NvcGUuZHVhbCkgc2NvcGUuc2V0VmFsdWUgKHZhbHVlLDApO1xuICAgICAgICAgICAgICAgIGVsc2Ugc2NvcGUuc2V0VmFsdWUgKHZhbHVlLDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2NvcGUudmVydGljYWwpIHtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCAqICh2YWx1ZSAtIHNjb3BlLm5vdExlc3MpIC8gKHNjb3BlLm5vdE1vcmUgLSBzY29wZS5ub3RMZXNzKTtcbiAgICAgICAgICAgICAgICBzY29wZS5zdGFydC5jc3MoJ2hlaWdodCcsb2Zmc2V0ICsgJ3B4Jyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG9mZnNldCA9IHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggKiAodmFsdWUgLSBzY29wZS5ub3RMZXNzKSAvIChzY29wZS5ub3RNb3JlIC0gc2NvcGUubm90TGVzcyk7XG4gICAgICAgICAgICAgICAgc2NvcGUuc3RhcnQuY3NzKCd3aWR0aCcsb2Zmc2V0ICsgJ3B4Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNjb3BlLnN0YXJ0VmFsdWU9IHZhbHVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNjb3BlLnNldFN0b3AgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBvZmZzZXQ7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICh2YWx1ZSA8IHNjb3BlLnZhbHVlWzBdKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzY29wZS5kdWFsKSBzY29wZS5zZXRWYWx1ZSAodmFsdWUsMCk7XG4gICAgICAgICAgICAgICAgZWxzZSBzY29wZS5zZXRWYWx1ZSAodmFsdWUsMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzY29wZS52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgIG9mZnNldCA9IHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0ICogKHZhbHVlIC0gc2NvcGUubm90TGVzcykgLyAoc2NvcGUubm90TW9yZSAtIHNjb3BlLm5vdExlc3MpO1xuICAgICAgICAgICAgICAgIHNjb3BlLnN0YXJ0LmNzcygnaGVpZ2h0JyxvZmZzZXQgKyAncHgnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAqICh2YWx1ZSAtIHNjb3BlLm5vdExlc3MpIC8gKHNjb3BlLm5vdE1vcmUgLSBzY29wZS5ub3RMZXNzKTtcbiAgICAgICAgICAgICAgICBzY29wZS5zdG9wLmNzcyh7J3JpZ2h0JzogMCwgJ3dpZHRoJzogKHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggIC0gb2Zmc2V0KSArICdweCd9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuc3RvcFZhbHVlPSB2YWx1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBzY29wZS50cmFuc2xhdGUgPSBmdW5jdGlvbiAob2Zmc2V0LCBoYW5kbGUpIHtcbiAgICAgICAgICAgIHZhciBzdGFydDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHNjb3BlLnZlcnRpY2FsKSB7XG4gICAgICAgICAgICAgICAgLy8gdGFrZSBoYW5kbGUgc2l6ZSBpbiBhY2NvdW50IHRvIGNvbXB1dGUgbWlkZGxlXG4gICAgICAgICAgICAgICAgdmFyIHZvZmZzZXQgPSBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCAtIG9mZnNldDtcblxuICAgICAgICAgICAgICAgIHNjb3BlLmhhbmRsZXNbaGFuZGxlXS5jc3Moe1xuICAgICAgICAgICAgICAgICAgICAnLXdlYmtpdC10cmFuc2Zvcm0nOiAndHJhbnNsYXRlWSgnICsgdm9mZnNldCArICdweCknLFxuICAgICAgICAgICAgICAgICAgICAnLW1vei10cmFuc2Zvcm0nOiAndHJhbnNsYXRlWSgnICsgdm9mZnNldCArICdweCknLFxuICAgICAgICAgICAgICAgICAgICAnLW1zLXRyYW5zZm9ybSc6ICd0cmFuc2xhdGVZKCcgKyB2b2Zmc2V0ICsgJ3B4KScsXG4gICAgICAgICAgICAgICAgICAgICctby10cmFuc2Zvcm0nOiAndHJhbnNsYXRlWSgnICsgdm9mZnNldCArICdweCknLFxuICAgICAgICAgICAgICAgICAgICAndHJhbnNmb3JtJzogJ3RyYW5zbGF0ZVkoJyArIHZvZmZzZXQgKyAncHgpJ1xuICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICBpZiAoIXNjb3BlLmR1YWwpIHNjb3BlLnNsaWRlci5jc3MoJ2hlaWdodCcsIG9mZnNldCArICdweCcpO1xuICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NvcGUucmVsYXRpdmVbMV0gJiYgc2NvcGUucmVsYXRpdmVbMF0pIHtcbiAgICAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gKHNjb3BlLnJlbGF0aXZlWzFdIC0gc2NvcGUucmVsYXRpdmVbMF0pICogIHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgIHN0YXJ0ICA9IChzY29wZS5yZWxhdGl2ZVswXSAqICBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgc2NvcGUuc2xpZGVyLmNzcyAoeydib3R0b20nOiBzdGFydCsncHgnLCdoZWlnaHQnOiBoZWlnaHQgKyAncHgnfSk7XG4gICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAgICAgc2NvcGUuaGFuZGxlc1toYW5kbGVdLmNzcyh7XG4gICAgICAgICAgICAgICAgICAgICctd2Via2l0LXRyYW5zZm9ybSc6ICd0cmFuc2xhdGVYKCcgKyBvZmZzZXQgKyAncHgpJyxcbiAgICAgICAgICAgICAgICAgICAgJy1tb3otdHJhbnNmb3JtJzogJ3RyYW5zbGF0ZVgoJyArIG9mZnNldCArICdweCknLFxuICAgICAgICAgICAgICAgICAgICAnLW1zLXRyYW5zZm9ybSc6ICd0cmFuc2xhdGVYKCcgKyBvZmZzZXQgKyAncHgpJyxcbiAgICAgICAgICAgICAgICAgICAgJy1vLXRyYW5zZm9ybSc6ICd0cmFuc2xhdGVYKCcgKyBvZmZzZXQgKyAncHgpJyxcbiAgICAgICAgICAgICAgICAgICAgJ3RyYW5zZm9ybSc6ICd0cmFuc2xhdGVYKCcgKyBvZmZzZXQgKyAncHgpJ1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmICghc2NvcGUuZHVhbCkgc2NvcGUuc2xpZGVyLmNzcygnd2lkdGgnLG9mZnNldCArICdweCcpO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjb3BlLnJlbGF0aXZlWzFdICYmIHNjb3BlLnJlbGF0aXZlWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IChzY29wZS5yZWxhdGl2ZVsxXSAtIHNjb3BlLnJlbGF0aXZlWzBdKSAqICBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICBzdGFydCA9IChzY29wZS5yZWxhdGl2ZVswXSAqICBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKTtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUuc2xpZGVyLmNzcyAoeydsZWZ0Jzogc3RhcnQrJ3B4Jywnd2lkdGgnOiB3aWR0aCArICdweCd9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gcG9zaXRpb24gaGFuZGxlIG9uIHRoZSBiYXIgZGVwZW5kaW5nIGEgZ2l2ZW4gdmFsdWVcbiAgICAgICAgc2NvcGUuc2V0VmFsdWUgPSBmdW5jdGlvbiAodmFsdWUgLCBoYW5kbGUpIHtcbiAgICAgICAgICAgIHZhciBvZmZzZXQ7XG5cbiAgICAgICAgICAgIC8vIGlmIHZhbHVlIGRpZCBub3QgY2hhbmdlIGlnbm9yZVxuICAgICAgICAgICAgaWYgKHZhbHVlID09PSBzY29wZS52YWx1ZVtoYW5kbGVdKSByZXR1cm47XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgICB2YWx1ZT0wO1xuICAgICAgICAgICAgaWYgKHZhbHVlID4gc2NvcGUubm90TW9yZSkgdmFsdWU9c2NvcGUubm90TW9yZTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA8IHNjb3BlLm5vdExlc3MpIHZhbHVlPXNjb3BlLm5vdExlc3M7XG5cbiAgICAgICAgICAgIGlmIChzY29wZS52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgIHNjb3BlLnJlbGF0aXZlW2hhbmRsZV0gPSAodmFsdWUgLSBzY29wZS5ub3RMZXNzKSAvIChzY29wZS5ub3RNb3JlIC0gc2NvcGUubm90TGVzcyk7XG4gICAgICAgICAgICAgICAgaWYgKGhhbmRsZSA9PT0gMCkgb2Zmc2V0ID0gKHNjb3BlLnJlbGF0aXZlW2hhbmRsZV0gKiBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCkgKyBzY29wZS5ib3VuZHMuaGFuZGxlc1toYW5kbGVdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodC8yO1xuICAgICAgICAgICAgICAgIGlmIChoYW5kbGUgPT09IDEpIG9mZnNldCA9IHNjb3BlLnJlbGF0aXZlW2hhbmRsZV0gKiBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzY29wZS5yZWxhdGl2ZVtoYW5kbGVdID0gKHZhbHVlIC0gc2NvcGUubm90TGVzcykgLyAoc2NvcGUubm90TW9yZSAtIHNjb3BlLm5vdExlc3MpO1xuICAgICAgICAgICAgICAgIG9mZnNldCA9IHNjb3BlLnJlbGF0aXZlW2hhbmRsZV0gKiAgKHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggLSBzY29wZS5ib3VuZHMuaGFuZGxlc1toYW5kbGVdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUudHJhbnNsYXRlIChvZmZzZXQsaGFuZGxlKTtcbiAgICAgICAgICAgIHNjb3BlLnZhbHVlW2hhbmRsZV0gPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHNjb3BlLmZvcm1hdHRlcikge1xuICAgICAgICAgICAgICAgIC8vIHdoZW4gY2FsbCB0aHJvdWdoIHNldFZhbHVlIHdlIGRvIG5vdCBwYXNzIGNiSGFuZGxlXG4gICAgICAgICAgICAgICAgc2NvcGUudmlld1ZhbHVlID0gc2NvcGUuZm9ybWF0dGVyICh2YWx1ZSwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2NvcGUudmlld1ZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChtb2RlbCkgbW9kZWwuJHNldFZpZXdWYWx1ZSggc2NvcGUudmlld1ZhbHVlKTtcblxuICAgICAgICAgICAgaWYgKHNjb3BlLmRpc3BsYXlzW2hhbmRsZV0pIHtcbiAgICAgICAgICAgICAgICBzY29wZS5kaXNwbGF5c1toYW5kbGVdLmh0bWwgKHNjb3BlLnZpZXdWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cblxuICAgICAgICAvLyBNaW5pbWFsIGtleXN0cm9rZSBoYW5kbGluZyB0byBjbG9zZSBwaWNrZXIgd2l0aCBFU0MgW3Njb3BlLmFjdGlmIGlzIGN1cnJlbnQgaGFuZGxlIGluZGV4XVxuICAgICAgICBzY29wZS5rZXlkb3duPSAgZnVuY3Rpb24oZSl7XG5cbiAgICAgICAgICAgIHN3aXRjaChlLmtleUNvZGUpe1xuICAgICAgICAgICAgICAgIGNhc2UgMzk6IC8vIFJpZ2h0XG4gICAgICAgICAgICAgICAgY2FzZSAzODogLy8gdXBcbiAgICAgICAgICAgICAgICAgICAgIGlmIChzY29wZS5ieVN0ZXAgPiAwKSBzY29wZS4kYXBwbHkoc2NvcGUuc2V0VmFsdWUgKChzY29wZS52YWx1ZVtzY29wZS5hY3RpZl0rc2NvcGUuYnlTdGVwKSwgc2NvcGUuYWN0aWYpKTtcbiAgICAgICAgICAgICAgICAgICAgIGlmIChzY29wZS5ieVN0ZXAgPCAwKSBzY29wZS4kYXBwbHkoc2NvcGUuc2V0VmFsdWUgKChzY29wZS52YWx1ZVtzY29wZS5hY3RpZl0rKDEgLyBNYXRoLnBvdygxMCwgc2NvcGUuYnlTdGVwKi0xKSkpLHNjb3BlLmFjdGlmKSk7XG4gICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUuY2FsbGJhY2spICBzY29wZS5jYWxsYmFjayAoc2NvcGUudmFsdWVbc2NvcGUuYWN0aWZdLCBzY29wZS5jdHJsaGFuZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMzc6IC8vIGxlZnRcbiAgICAgICAgICAgICAgICBjYXNlIDQwOiAvLyBkb3duXG4gICAgICAgICAgICAgICAgICAgIGlmIChzY29wZS5ieVN0ZXAgPiAwKSBzY29wZS4kYXBwbHkoc2NvcGUuc2V0VmFsdWUgKChzY29wZS52YWx1ZVtzY29wZS5hY3RpZl0gLSBzY29wZS5ieVN0ZXApLCBzY29wZS5hY3RpZikpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUuYnlTdGVwIDwgMCkgc2NvcGUuJGFwcGx5KHNjb3BlLnNldFZhbHVlICgoc2NvcGUudmFsdWVbc2NvcGUuYWN0aWZdIC0gKDEgLyBNYXRoLnBvdygxMCwgc2NvcGUuYnlTdGVwKi0xKSkpLHNjb3BlLmFjdGlmKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzY29wZS5jYWxsYmFjaykgIHNjb3BlLmNhbGxiYWNrIChzY29wZS52YWx1ZVtzY29wZS5hY3RpZl0sIHNjb3BlLmN0cmxoYW5kbGUpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDI3OiAvLyBlc2NcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUuaGFuZGxlc1tzY29wZS5hY3RpZl1bMF0uYmx1cigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHNjb3BlLm1vdmVIYW5kbGUgPSBmdW5jdGlvbiAoaGFuZGxlLCBjbGllbnRYLCBjbGllbnRZKSB7XG4gICAgICAgICAgICB2YXIgb2Zmc2V0O1xuICAgICAgICAgICAgaWYgKHNjb3BlLnZlcnRpY2FsKSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b20gLSBjbGllbnRZO1xuICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgPiBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCkgb2Zmc2V0ID0gc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgaWYgKG9mZnNldCA8IHNjb3BlLmJvdW5kcy5oYW5kbGVzW2hhbmRsZV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KSBvZmZzZXQgPSBzY29wZS5ib3VuZHMuaGFuZGxlc1toYW5kbGVdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gY2xpZW50WCAtIHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcblxuICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgPCAwKSBvZmZzZXQgPSAwO1xuICAgICAgICAgICAgICAgIGlmICgoY2xpZW50WCArIHNjb3BlLmJvdW5kcy5oYW5kbGVzW2hhbmRsZV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpID4gc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodCkge1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIC0gc2NvcGUuYm91bmRzLmhhbmRsZXNbaGFuZGxlXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNjb3BlLmdldFZhbHVlICAob2Zmc2V0LCBoYW5kbGUpO1xuXG4gICAgICAgICAgICAvLyBwcmV2ZW50IGR1YWwgaGFuZGxlIHRvIGNyb3NzXG4gICAgICAgICAgICBpZiAoc2NvcGUuZHVhbCAmJiBzY29wZS52YWx1ZSBbMF0gPiBzY29wZS52YWx1ZVsxXSkge1xuICAgICAgICAgICAgICAgIGlmIChoYW5kbGUgPT09IDApIHNjb3BlLnNldFZhbHVlIChzY29wZS52YWx1ZVswXSAsIDEpO1xuICAgICAgICAgICAgICAgIGVsc2Ugc2NvcGUuc2V0VmFsdWUoc2NvcGUudmFsdWVbMV0sMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cblxuICAgICAgICBzY29wZS5mb2N1c0NCID0gZnVuY3Rpb24gKGluc2lkZSkge1xuICAgICAgICAgICAgaWYgKGluc2lkZSkge1xuICAgICAgICAgICAgICAgICRkb2N1bWVudC5vbigna2V5ZG93bicsc2NvcGUua2V5ZG93bik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICRkb2N1bWVudC51bmJpbmQoJ2tleWRvd24nLHNjb3BlLmtleWRvd24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGJhciB3YXMgdG91Y2ggbGV0IG1vdmUgaGFuZGxlIHRvIHRoaXMgcG9pbnRcbiAgICAgICAgc2NvcGUudG91Y2hCYXJDQiA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgdmFyIGhhbmRsZT0wO1xuICAgICAgICAgICAgdmFyIHJlbGF0aXZlO1xuICAgICAgICAgICAgdmFyIHRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICAgICAgICAgIHZhciBvbGR2YWx1ZSA9IHNjb3BlLnZhbHVlW2hhbmRsZV07XG5cbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIC8vIGlmIHdlIGhhdmUgdHdvIGhhbmRsZXMgc2VsZWN0IGNsb3Nlc3Qgb25lIGZyb20gdG91Y2ggcG9pbnRcbiAgICAgICAgICAgIGlmIChzY29wZS5kdWFsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNjb3BlLnZlcnRpY2FsKSByZWxhdGl2ZSA9ICh0b3VjaGVzWzBdLnBhZ2VZIC0gc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b20pIC8gc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgZWxzZSByZWxhdGl2ZT0gKHRvdWNoZXNbMF0ucGFnZVggLSBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQpIC8gc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcblxuICAgICAgICAgICAgICAgIHZhciBkaXN0YW5jZTAgPSBNYXRoLmFicyhyZWxhdGl2ZSAtIHNjb3BlLnJlbGF0aXZlWzBdKTtcbiAgICAgICAgICAgICAgICB2YXIgZGlzdGFuY2UxID0gTWF0aC5hYnMocmVsYXRpdmUgLSBzY29wZS5yZWxhdGl2ZVsxXSk7XG4gICAgICAgICAgICAgICAgaWYgKGRpc3RhbmNlMSA8IGRpc3RhbmNlMCkgaGFuZGxlPTE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIG1vdmUgaGFuZGxlIHRvIG5ldyBwbGFjZVxuICAgICAgICAgICAgc2NvcGUubW92ZUhhbmRsZSAoaGFuZGxlLHRvdWNoZXNbMF0ucGFnZVgsIHRvdWNoZXNbMF0ucGFnZVkpO1xuICAgICAgICAgICAgaWYgKHNjb3BlLmNhbGxiYWNrICYmIG9sZHZhbHVlICE9PSBzY29wZS52YWx1ZVtoYW5kbGVdKSBzY29wZS5jYWxsYmFjayAoc2NvcGUudmFsdWVbaGFuZGxlXSwgc2NvcGUuY3RybGhhbmRsZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gaGFuZGxlIHdhcyB0b3VjaCBhbmQgZHJhZ1xuICAgICAgICBzY29wZS50b3VjaEhhbmRsZUNCID0gZnVuY3Rpb24gKHRvdWNoZXZ0LCBoYW5kbGUpIHtcbiAgICAgICAgICAgIHZhciBvbGR2YWx1ZSA9IHNjb3BlLnZhbHVlW2hhbmRsZV07XG5cbiAgICAgICAgICAgIHRvdWNoZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAkZG9jdW1lbnQub24oJ3RvdWNobW92ZScsdG91Y2htb3ZlKTtcbiAgICAgICAgICAgICRkb2N1bWVudC5vbigndG91Y2hlbmQnICx0b3VjaGVuZCk7XG4gICAgICAgICAgICBlbGVtZW50LnVuYmluZCgndG91Y2hzdGFydCcsIHNjb3BlLnRvdWNoQmFyQ0IpO1xuXG4gICAgICAgICAgICBmdW5jdGlvbiB0b3VjaG1vdmUoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHZhciB0b3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgdG91Y2hlcy5sZW5ndGg7IGlkeCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLm1vdmVIYW5kbGUgKGhhbmRsZSx0b3VjaGVzW2lkeF0ucGFnZVgsIHRvdWNoZXNbaWR4XS5wYWdlWSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiB0b3VjaGVuZChldmVudCkge1xuICAgICAgICAgICAgICAgJGRvY3VtZW50LnVuYmluZCgndG91Y2htb3ZlJyx0b3VjaG1vdmUpO1xuICAgICAgICAgICAgICAgJGRvY3VtZW50LnVuYmluZCgndG91Y2hlbmQnICx0b3VjaGVuZCk7XG4gICAgICAgICAgICAgICBlbGVtZW50Lm9uKCd0b3VjaHN0YXJ0Jywgc2NvcGUudG91Y2hCYXJDQik7XG5cbiAgICAgICAgICAgICAgICAvLyBpZiB2YWx1ZSBjaGFuZ2Ugbm90aWZ5IGFwcGxpY2F0aW9uIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgaWYgKHNjb3BlLmNhbGxiYWNrICYmIG9sZHZhbHVlICE9PSBzY29wZS52YWx1ZVtoYW5kbGVdKSBzY29wZS5jYWxsYmFjayAoc2NvcGUudmFsdWVbaGFuZGxlXSwgc2NvcGUuY3RybGhhbmRsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgc2NvcGUuaGFuZGxlQ0IgPSBmdW5jdGlvbiAoY2xpY2tldmVudCwgaGFuZGxlKSB7XG5cbiAgICAgICAgICAgIGlmIChhdHRycy5hdXRvbWF0aWMpIHJldHVybjtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIG9sZHZhbHVlID0gc2NvcGUudmFsdWVbaGFuZGxlXTtcbiAgICAgICAgICAgIC8vIHJlZ2lzdGVyIG1vdXNlIGV2ZW50IHRvIHRyYWNrIGhhbmRsZVxuICAgICAgICAgICAgY2xpY2tldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAkZG9jdW1lbnQub24oJ21vdXNlbW92ZScsbW91c2Vtb3ZlKTtcbiAgICAgICAgICAgICRkb2N1bWVudC5vbignbW91c2V1cCcsIG1vdXNldXApO1xuICAgICAgICAgICAgc2NvcGUuaGFuZGxlc1toYW5kbGVdWzBdLmZvY3VzKCk7XG4gICAgICAgICAgICBzY29wZS5hY3RpZj1oYW5kbGU7XG5cbiAgICAgICAgICAgIC8vIHNsaWRlciBoYW5kbGUgaXMgbW92aW5nXG4gICAgICAgICAgICBmdW5jdGlvbiBtb3VzZW1vdmUoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICBzY29wZS5tb3ZlSGFuZGxlIChoYW5kbGUsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBtb3VzZSBpcyB1cCBkYW5zIGxlYXZlIHNsaWRlciBzZW5kIHJlc2l6ZSBldmVudHNcbiAgICAgICAgICAgIGZ1bmN0aW9uIG1vdXNldXAoKSB7XG4gICAgICAgICAgICAgICAgJGRvY3VtZW50LnVuYmluZCgnbW91c2Vtb3ZlJywgbW91c2Vtb3ZlKTtcbiAgICAgICAgICAgICAgICAkZG9jdW1lbnQudW5iaW5kKCdtb3VzZXVwJywgbW91c2V1cCk7XG5cbiAgICAgICAgICAgICAgICAvLyBpZiB2YWx1ZSBjaGFuZ2Ugbm90aWZ5IGFwcGxpY2F0aW9uIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgaWYgKHNjb3BlLmNhbGxiYWNrICYmIG9sZHZhbHVlICE9PSBzY29wZS52YWx1ZVtoYW5kbGVdKSBzY29wZS5jYWxsYmFjayAoc2NvcGUudmFsdWVbaGFuZGxlXSwgc2NvcGUuY3RybGhhbmRsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gc2ltdWxhdGUganF1ZXJ5IGZpbmQgYnkgY2xhc3NlcyBjYXBhYmlsaXRpZXMgW3dhcm5pbmcgb25seSByZXR1cm4gMXN0IGVsZW1lbnRzXVxuICAgICAgICBzY29wZS5maW5kID0gZnVuY3Rpb24gKHNlbGVjdCwgZWxlbSkge1xuICAgICAgICAgICAgdmFyIGRvbWVsZW07XG5cbiAgICAgICAgICAgIGlmIChlbGVtKSBkb21lbGVtID0gZWxlbVswXS5xdWVyeVNlbGVjdG9yKHNlbGVjdCk7XG4gICAgICAgICAgICBlbHNlIGRvbWVsZW0gPSBlbGVtZW50WzBdLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0KTtcblxuICAgICAgICAgICAgdmFyIGFuZ2VsZW0gPSBhbmd1bGFyLmVsZW1lbnQoZG9tZWxlbSk7XG4gICAgICAgICAgICByZXR1cm4gKGFuZ2VsZW0pO1xuICAgICAgICB9O1xuXG5cblxuICAgICAgICBzY29wZS5pbml0aWFsU2V0dGluZ3MgPSBmdW5jdGlvbiAoaW5pdGlhbCkge1xuICAgICAgICAgICAgdmFyIGRlY2ltYWxfcGxhY2VzX21hdGNoX3Jlc3VsdDtcbiAgICAgICAgICAgIHNjb3BlLnZhbHVlPVtdOyAgLy8gc3RvcmUgbG93L2hlaWdodCB2YWx1ZSB3aGVuIHR3byBoYW5kbGVzXG4gICAgICAgICAgICBzY29wZS5yZWxhdGl2ZT1bXTtcblxuICAgICAgICAgICAgaWYgKHNjb3BlLnByZWNpc2lvbiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGRlY2ltYWxfcGxhY2VzX21hdGNoX3Jlc3VsdCA9ICgnJyArIHNjb3BlLmJ5U3RlcCkubWF0Y2goL1xcLihbXFxkXSopLyk7XG4gICAgICAgICAgICAgICAgc2NvcGUucHJlY2lzaW9uID0gZGVjaW1hbF9wbGFjZXNfbWF0Y2hfcmVzdWx0ICYmIGRlY2ltYWxfcGxhY2VzX21hdGNoX3Jlc3VsdFsxXSA/IGRlY2ltYWxfcGxhY2VzX21hdGNoX3Jlc3VsdFsxXS5sZW5ndGggOiAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBwb3NpdGlvbiBoYW5kbGUgdG8gaW5pdGlhbCB2YWx1ZShzKVxuICAgICAgICAgICAgZWxlbWVudC5vbigndG91Y2hzdGFydCcsIHNjb3BlLnRvdWNoQmFyQ0IpO1xuICAgICAgICAgICAgc2NvcGUuaGFuZGxlc1swXS5vbigndG91Y2hzdGFydCcsIGZ1bmN0aW9uKGV2dCl7c2NvcGUudG91Y2hIYW5kbGVDQihldnQsMCk7fSk7XG5cbiAgICAgICAgICAgIC8vIHRoaXMgc2xpZGVyIGhhcyB0d28gaGFuZGxlcyBsb3cvaGlnaHRcbiAgICAgICAgICAgIGlmIChzY29wZS5kdWFsKSB7XG4gICAgICAgICAgICAgICAgc2NvcGUuaGFuZGxlc1sxXS5hZGRDbGFzcygncmFuZ2Utc2xpZGVyLWhhbmRsZScpO1xuICAgICAgICAgICAgICAgIHNjb3BlLmhhbmRsZXNbMV0ub24oJ3RvdWNoc3RhcnQnLCBmdW5jdGlvbihldnQpe3Njb3BlLnRvdWNoSGFuZGxlQ0IoZXZ0LDEpO30pO1xuICAgICAgICAgICAgICAgIGlmICghc2NvcGUuaW5pdHZhbHVlcykgc2NvcGUuc2V0VmFsdWUgKGluaXRpYWxbMV0sMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHdlIGhhdmUgYW4gaW5pdHN0YXRlIG9iamVjdCBhcHBseSBpdFxuICAgICAgICAgICAgaWYgKHNjb3BlLmluaXR2YWx1ZXMpIHNjb3BlLmluaXRXaWRnZXQgKHNjb3BlLmluaXR2YWx1ZXMpO1xuICAgICAgICAgICAgZWxzZSAgIHNjb3BlLnNldFZhbHVlIChpbml0aWFsWzBdLDApO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNjb3BlLmluaXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzY29wZS5zbGlkZXJpZCAgID0gYXR0cnMuaWQgfHwgXCJzbGlkZXItXCIgKyBwYXJzZUludCAoTWF0aC5yYW5kb20oKSAqIDEwMDApO1xuICAgICAgICAgICAgc2NvcGUuc3RhcnRWYWx1ZSA9IC1JbmZpbml0eTtcbiAgICAgICAgICAgIHNjb3BlLnN0b3BWYWx1ZSAgPSBJbmZpbml0eTtcbiAgICAgICAgICAgIHNjb3BlLmJ5U3RlcCAgID0gcGFyc2VJbnQoYXR0cnMuYnlTdGVwKSB8fCAxO1xuICAgICAgICAgICAgc2NvcGUudmVydGljYWwgPSBhdHRycy52ZXJ0aWNhbCAgIHx8IGZhbHNlO1xuICAgICAgICAgICAgc2NvcGUuZHVhbCAgICAgPSBhdHRycy5kdWFsSGFuZGxlc3x8IGZhbHNlO1xuICAgICAgICAgICAgc2NvcGUudHJpZ2dlcl9pbnB1dF9jaGFuZ2U9IGZhbHNlO1xuICAgICAgICAgICAgc2NvcGUubm90TW9yZSAgPSBwYXJzZUludChhdHRycy5ub3RNb3JlKSAgIHx8IDEwMDtcbiAgICAgICAgICAgIHNjb3BlLm5vdExlc3MgID0gcGFyc2VJbnQoYXR0cnMubm90TGVzcykgICB8fCAwO1xuXG4gICAgICAgICAgICBpZiAoc2NvcGUudmVydGljYWwpIGVsZW1lbnQuYWRkQ2xhc3MoXCJ2ZXJ0aWNhbC1yYW5nZVwiKTtcblxuICAgICAgICAgICAgc2NvcGUuaGFuZGxlcz0gW3Njb3BlLmZpbmQoJy5oYW5kbGUtbWluJyksIHNjb3BlLmZpbmQoJy5oYW5kbGUtbWF4JyldO1xuICAgICAgICAgICAgc2NvcGUuYmFyICAgID0gZWxlbWVudDtcbiAgICAgICAgICAgIHNjb3BlLnNsaWRlciA9IHNjb3BlLmZpbmQoJy5yYW5nZS1zbGlkZXItYWN0aXZlLXNlZ21lbnQnKTtcbiAgICAgICAgICAgIHNjb3BlLnN0YXJ0ICA9IHNjb3BlLmZpbmQoJy5pYnotcmFuZ2Utc2xpZGVyLXN0YXJ0Jyk7XG4gICAgICAgICAgICBzY29wZS5zdG9wICAgPSBzY29wZS5maW5kKCcuaWJ6LXJhbmdlLXNsaWRlci1zdG9wJyk7XG4gICAgICAgICAgICBzY29wZS5kaXNhYmxlPSBhdHRycy5kaXNhYmxlIHx8IGZhbHNlO1xuXG4gICAgICAgICAgICBzY29wZS5jdHJsaGFuZGxlID0gbmV3IFJhbmdlU2xpZGVySGFuZGxlIChzY29wZSk7XG5cbiAgICAgICAgICAgIC8vIHByZXBhcmUgRE9NIG9iamVjdCBwb2ludGVyIHRvIGNvbXB1dGUgc2l6ZSBkeW5hbWljYWxseVxuICAgICAgICAgICAgc2NvcGUuYm91bmRzID0ge1xuICAgICAgICAgICAgICAgIGJhciAgICA6IGVsZW1lbnRbMF0sXG4gICAgICAgICAgICAgICAgaGFuZGxlczogW3Njb3BlLmhhbmRsZXNbMF1bMF0sIHNjb3BlLmhhbmRsZXNbMV1bMF1dXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoYXR0cnMuZGlzYWJsZSA9PT0gJ3RydWUnKSBzY29wZS5zZXREaXNhYmxlKHRydWUpO1xuXG4gICAgICAgICAgICBpZiAoYXR0cnMuZGlzcGxheVRhcmdldCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoYXR0cnMuZGlzcGxheVRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIHRydWUgOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdoYW5kbGUnIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmRpc3BsYXlzID0gc2NvcGUuaGFuZGxlcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmhhbmRsZXNbMF0uYWRkQ2xhc3MoJ2liei1yYW5nZS1zbGlkZXItZGlzcGxheScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3BlLmR1YWwpIHNjb3BlLmhhbmRsZXNbMV0uYWRkQ2xhc3MoJ2liei1yYW5nZS1zbGlkZXItZGlzcGxheScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5kaXNwbGF5cyA9ICBbJGRvY3VtZW50LmdldEVsZW1lbnRCeUlkIChhdHRycy5kaXNwbGF5VGFyZ2V0KV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHNjb3BlLmRpc3BsYXlzPVtdO1xuXG4gICAgICAgICAgICAvLyBleHRyYWN0IGluaXRpYWwgdmFsdWVzIGZyb20gYXR0cnMgYW5kIHBhcnNlIGludG8gaW50XG4gICAgICAgICAgICBpZiAoIWF0dHJzLmluaXRpYWwpIHtcbiAgICAgICAgICAgICAgICBzY29wZS5pbml0aWFsICA9IFtzY29wZS5uZ01vZGVsLCBzY29wZS5uZ01vZGVsXTsgLy8gaW5pdGlhbGl6ZSB0byBtb2RlbCB2YWx1ZXNcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGluaXRpYWwgID0gYXR0cnMuaW5pdGlhbC5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgICAgIHNjb3BlLmluaXRpYWwgPSBbXG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxbMF0gIT09IHVuZGVmaW5lZCA/IHBhcnNlSW50IChpbml0aWFsWzBdKSA6IHNjb3BlLm5vdExlc3MsXG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxbMV0gIT09IHVuZGVmaW5lZCA/IHBhcnNlSW50IChpbml0aWFsWzFdKSA6IHNjb3BlLm5vdE1vcmVcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBNb25pdG9yIGFueSBjaGFuZ2VzIG9uIHN0YXJ0L3N0b3AgZGF0ZXMuXG4gICAgICAgICAgICBzY29wZS4kd2F0Y2goJ3N0YXJ0QXQnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2NvcGUudmFsdWUgPCBzY29wZS5zdGFydEF0ICkge1xuICAgICAgICAgICAgICAgICAgICAvL3Njb3BlLnNldFZhbHVlIChzY29wZS5zdGFydEF0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNjb3BlLnN0YXJ0QXQpIHNjb3BlLnNldFN0YXJ0IChzY29wZS5zdGFydEF0KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBzY29wZS4kd2F0Y2goJ3N0b3BBdCcgLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2NvcGUudmFsdWUgPiBzY29wZS5zdG9wQXQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy9zY29wZS5zZXRWYWx1ZSAoc2NvcGUuc3RvcEF0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNjb3BlLnN0b3BBdCkgc2NvcGUuc2V0U3RvcCAoc2NvcGUuc3RvcEF0KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBmaW5pc2ggd2lkZ2V0IGluaXRpYWxpc2F0aW9uXG4gICAgICAgICAgICBzY29wZS5pbml0aWFsU2V0dGluZ3MgKHNjb3BlLmluaXRpYWwpO1xuXG4gICAgICAgIH07XG5cbiAgICAgICAgc2NvcGUuaW5pdCgpO1xuICAgICAgICBcbiAgICAgICAgIC8vIHNsaWRlciBpcyByZWFkeSBwcm92aWRlIGNvbnRyb2wgaGFuZGxlIHRvIGFwcGxpY2F0aW9uIGNvbnRyb2xsZXJcbiAgICAgICAgc2NvcGUuJHdhdGNoICgnaW5pdGhvb2snLCBmdW5jdGlvbiAoKSB7ICAgICAgICAgLy8gaW5pdCBWYWx1ZXMgbWF5IGFycml2ZSBsYXRlXG4gICAgICAgICAgICBpZiAoc2NvcGUuaW5pdGhvb2spIHNjb3BlLmluaXRob29rIChzY29wZS5jdHJsaGFuZGxlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2NvcGUuJHdhdGNoICgnaW5pdHZhbHVlcycsIGZ1bmN0aW9uICgpIHsgXHQvLyBpbml0IFZhbHVlcyBtYXkgYXJyaXZlIGxhdGVcbiAgICAgICAgICAgIGlmIChzY29wZS5pbml0dmFsdWVzKSBzY29wZS5pbml0V2lkZ2V0KHNjb3BlLmluaXR2YWx1ZXMpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyB0d28td2F5IGJpbmRpbmcgaWYgbW9kZWwgdmFsdWUgY2hhbmdlc1xuICAgICAgICBzY29wZS4kd2F0Y2ggKCduZ01vZGVsJywgZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgICAgc2NvcGUuc2V0VmFsdWUobmV3VmFsdWUsIDApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbnJldHVybiB7XG4gICAgcmVzdHJpY3Q6IFwiRVwiLCAgICAvLyByZXN0cmljdCB0byA8cmFuZ2Utc2xpZGVyPiBIVE1MIGVsZW1lbnQgbmFtZVxuICAgIHNjb3BlOiB7XG4gICAgICAgIHN0YXJ0QXQgIDonPScsICAvLyBGaXJzdCBhY2NlcHRhYmxlIGRhdGVcbiAgICAgICAgc3RvcEF0ICAgOic9JywgIC8vIExhc3QgYWNjZXB0YWJsZSBkYXRlXG4gICAgICAgIGNhbGxiYWNrIDonPScsICAvLyBDYWxsYmFjayB0byBhY3RpZiB3aGVuIGEgZGF0ZSBpcyBzZWxlY3RlZFxuICAgICAgICBmb3JtYXR0ZXI6Jz0nLCAgLy8gQ2FsbGJhY2sgZm9yIGRyYWcgZXZlbnQgY2FsbCBlYWNoIHRpbWUgaW50ZXJuYWwgdmFsdWUgY2hhbmdlc1xuICAgICAgICBpbml0aG9vayA6Jz0nLCAgLy8gSG9vayBwb2ludCB0byBjb250cm9sIHNsaWRlciBmcm9tIEFQSVxuICAgICAgICBjYmhhbmRsZSA6Jz0nLCAgLy8gQXJndW1lbnQgYWRkZWQgdG8gZXZlcnkgY2FsbGJhY2tcbiAgICAgICAgaW5pdHZhbHVlczonPScsICAgLy8gSW5pdGlhbCB2YWx1ZXMgYXMgYSBzaW5nbGUgb2JqZWN0XG4gICAgICAgIG5nTW9kZWw6ICc9JyAgICAvLyB0aGUgbW9kZWwgdmFsdWVcbiAgICB9LFxuICAgIHJlcXVpcmU6ICc/bmdNb2RlbCcsXG4gICAgdGVtcGxhdGU6IHRlbXBsYXRlLCAvLyBodG1sIHRlbXBsYXRlIGlzIGJ1aWxkIGZyb20gSlNcbiAgICByZXBsYWNlOiB0cnVlLCAgICAgIC8vIHJlcGxhY2UgY3VycmVudCBkaXJlY3RpdmUgd2l0aCB0ZW1wbGF0ZSB3aGlsZSBpbmhlcml0aW5nIG9mIGNsYXNzXG4gICAgbGluazogbGluayAgICAgICAgICAvLyBwaWNrYWRhdGUgb2JqZWN0J3MgbWV0aG9kc1xufTtcbn1dKTtcblxuY29uc29sZS5sb2cgKFwiUmFuZ2VTbGlkZXIgTG9hZGVkXCIpO1xuXG59KSgpOyIsIi8qXG4gYWxzYS1nYXRld2F5IC0tIHByb3ZpZGUgYSBSRVNUL0hUVFAgaW50ZXJmYWNlIHRvIEFMU0EtTWl4ZXJcblxuIENvcHlyaWdodCAoQykgMjAxNSwgRnVsdXAgQXIgRm9sbFxuXG4gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuIGFsb25nIHdpdGggc2NvcGUgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLlxuXG4gUmVmZXJlbmNlczpcblxuICovXG5cbihmdW5jdGlvbiAoKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIHRlbXBsYXRlID1cbiAgICAgICAgICAnPGRpdiBjbGFzcz1cImFmYi1tb25pdG9yXCIgbmctY2xpY2s9XCJnZXRwaW5nKClcIj4nICtcbiAgICAgICAgICc8c3BhbiBjbGFzcz1cImFmYi1yZWZyZXNoLXRva2VuXCIgID5hZmI6Ly97e2hvc3RuYW1lfX06e3todHRwZHBvcnR9fTwvc3Bhbj4nICtcbiAgICAgICAgICc8aSBjbGFzcz1cInt7aWNvbn19XCI+PC9pPicgK1xuICAgICAgICAgJzwvZGl2Pic7XG5cblxuLy8gc2NvcGUgbW9kdWxlIGlzIGxvYWQgc3RhdGljYWxseSBiZWZvcmUgYW55IHJvdXRlIGlzIGNhdGl2YXRlZFxuYW5ndWxhci5tb2R1bGUoJ1Rva2VuUmVmcmVzaCcsIFsnQXBwQ29uZmlnJywgJ01vZGFsTm90aWZpY2F0aW9uJ10pXG5cbiAgICAuZGlyZWN0aXZlICgndG9rZW5SZWZyZXNoJywgW1wiJGxvZ1wiLCBcIiR3aW5kb3dcIiwgXCIkdGltZW91dFwiLCBcIiRsb2NhdGlvblwiLCBcIk5vdGlmaWNhdGlvblwiLCBcIkFwcENvbmZpZ1wiLCBcIkFwcENhbGxcIiwgZnVuY3Rpb24oJGxvZywgJHdpbmRvdywgJHRpbWVvdXQsICRsb2NhdGlvbiwgTm90aWZpY2F0aW9uLCBBcHBDb25maWcsIEFwcENhbGwpIHtcblxuICAgIGZ1bmN0aW9uIG15bWV0aG9kcyhzY29wZSwgZWxlbSwgYXR0cnMpIHtcbiAgICAgICAgc2NvcGUubG9nZ2VkPXVuZGVmaW5lZDsgLy8gbmVpdGhlciB0aHUgbmVpdGhlciBmYWxzZVxuICAgICAgICBcbiAgICAgICAgJHdpbmRvdy5vbmJlZm9yZXVubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIEFwcENhbGwuZ2V0IChzY29wZS5wbHVnaW4sIFwibG9nb3V0XCIsIHsvKnF1ZXJ5Ki99LCBmdW5jdGlvbiAoKSB7ICAgIFxuICAgICAgICAgICAgJGxvZy5sb2coXCJPUEEgZXhpdFwiKTsgICAgICAgICAgICBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICAgICAgICAgICBcbiAgICAgICAgc2NvcGUub25saW5lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZWxlbS5hZGRDbGFzcyAgICAoXCJvbmxpbmVcIik7XG4gICAgICAgICAgICBlbGVtLnJlbW92ZUNsYXNzIChcIm9mZmxpbmVcIik7XG4gICAgICAgICAgICBzY29wZS5sb2dnZWQ9dHJ1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBzY29wZS5vZmZsaW5lID0gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGVsZW0uYWRkQ2xhc3MgICAgKFwib2ZmbGluZVwiKTtcbiAgICAgICAgICAgIGVsZW0ucmVtb3ZlQ2xhc3MgKFwib25saW5lXCIpO1xuICAgICAgICAgICAgc2NvcGUubG9nZ2VkPWZhbHNlO1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgc2NvcGUub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKHNjb3BlLmxvZ2dlZCAhPT0gZmFsc2UpICB7XG4gICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uLndhcm5pbmcgKHttZXNzYWdlOiBcIkFwcEZyYW1ld29yayBCaW5kZXIgTG9zdFwiLCBkZWxheTogNTAwMH0pO1xuICAgICAgICAgICAgICAgIHNjb3BlLm9mZmxpbmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNjb3BlLnN0YXR1cyA9IDA7XG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICBzY29wZS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihqcmVzcCwgZXJyY29kZSkge1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoZXJyY29kZSAhPT0gMjAwIHx8IGpyZXNwLnJlcXVlc3Quc3RhdHVzICE9PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbi53YXJuaW5nICh7bWVzc2FnZTogXCJhdXRvLWNvbm5lY3QgOlwiICsganJlc3AucmVxdWVzdC5pbmZvLCBkZWxheTogMTAwMDB9KTtcbiAgICAgICAgICAgICAgICBzY29wZS5vZmZsaW5lKCk7IFxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHNjb3BlLmxvZ2dlZCAhPT0gdHJ1ZSkgIHtcbiAgICAgICAgICAgICAgICBOb3RpZmljYXRpb24uc3VjY2VzcyAoe21lc3NhZ2U6IFwiQXBwRnJhbWV3b3JrIEJpbmRlciBDb25uZWN0ZWRcIiwgZGVsYXk6IDMwMDB9KTtcbiAgICAgICAgICAgICAgICBzY29wZS5vbmxpbmUoKTtcbiAgICAgICAgICAgICAgICBpZiAoc2NvcGUuY2FsbGJhY2spIHNjb3BlLmNhbGxiYWNrKGpyZXNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgc2NvcGUuc3RhdHVzID0gMTsgICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIENoZWNrIEJpbmRlciBzdGF0dXNcbiAgICAgICAgc2NvcGUuZ2V0cGluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBBcHBDYWxsLmdldCAoc2NvcGUucGx1Z2luLCBcInBpbmdcIiwgey8qcXVlcnkqL30sZnVuY3Rpb24oanJlc3AsIGVycmNvZGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyY29kZSAhPT0gMjAwIHx8IGpyZXNwLnJlcXVlc3Quc3RhdHVzICE9PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICAgICAgICAgICBOb3RpZmljYXRpb24ud2FybmluZyAoe21lc3NhZ2U6IGpyZXNwLnJlcXVlc3QuaW5mbywgZGVsYXk6IDUwMDB9KTtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUub2ZmbGluZSgpOyBcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyByZXN0YXJ0IGEgbmV3IHRpbWVyIGZvciBuZXh0IHBpbmdcbiAgICAgICAgICAgICAgICAkdGltZW91dCAoc2NvcGUuZ2V0cGluZywgQXBwQ29uZmlnLnNlc3Npb24ucGluZ3JhdGUqMTAwMCk7XG4gICAgICAgICAgICB9LCBzY29wZS5vbmVycm9yKTtcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIC8vIENoZWNrIEJpbmRlciBzdGF0dXNcbiAgICAgICAgc2NvcGUucmVmcmVzaCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBBcHBDYWxsLmdldCAoc2NvcGUucGx1Z2luLCBcInJlZnJlc2hcIiwgey8qcXVlcnkqL30sIGZ1bmN0aW9uKGpyZXNwLCBlcnJjb2RlKSB7XG5cbiAgICAgICAgICAgICAgICBzY29wZS5vbnN1Y2Nlc3MgKGpyZXNwLCBlcnJjb2RlKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyByZXN0YXJ0IGEgbmV3IHRpbWVyIGZvciBuZXh0IHJlZnJlc2hcbiAgICAgICAgICAgICAgICAkdGltZW91dCAoc2NvcGUucmVmcmVzaCwgQXBwQ29uZmlnLnNlc3Npb24udGltZW91dCAqMjUwKTtcbiAgICAgICAgICAgIH0sIHNjb3BlLm9uZXJyb3IpOyAgICAgICAgICAgIFxuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgLy8gSW5pdGlhbCBjb25uZWN0aW9uXG4gICAgICAgIHNjb3BlLmxvZ2dpbiA9IGZ1bmN0aW9uKCkgeyAgICAgICAgICAgIFxuICAgICAgICAgICAgQXBwQ2FsbC5nZXQgKHNjb3BlLnBsdWdpbiwgXCJjb25uZWN0XCIsIHt0b2tlbjogQXBwQ29uZmlnLnNlc3Npb24uaW5pdGlhbH0sIGZ1bmN0aW9uKGpyZXNwLCBlcnJjb2RlKSB7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgaWYgKCFzY29wZS5vbnN1Y2Nlc3MgKGpyZXNwLCBlcnJjb2RlKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIEludGlhbCB0b2tlbiB3YXMgYWNjZXB0ZWQgbGV0J3Mgc3RhcnQgcGluZyAmIHJlZnJlc2hcbiAgICAgICAgICAgICAgICAkdGltZW91dCAoc2NvcGUuZ2V0cGluZywgQXBwQ29uZmlnLnNlc3Npb24ucGluZ3JhdGUqMTAwMCk7XG4gICAgICAgICAgICAgICAgJHRpbWVvdXQgKHNjb3BlLnJlZnJlc2gsIEFwcENvbmZpZy5zZXNzaW9uLnRpbWVvdXQgKjI1MCk7XG4gXG4gICAgICAgICAgICB9LCBzY29wZS5vbmVycm9yKTtcbiAgICAgICAgfTtcblxuXG4gICAgICAgIC8vIFBhcnNlIFdpZGdldCBQYXJhbWV0ZXJzXG4gICAgICAgIHNjb3BlLnBsdWdpbiAgICA9IGF0dHJzLnBsdWdpbiB8fCBcImF1dGhcIjtcbiAgICAgICAgc2NvcGUuaWNvbiAgICAgID0gYXR0cnMuaWNvbiAgIHx8IFwiZmktbGlnaHRidWxiXCI7XG4gICAgICAgIHNjb3BlLmhvc3RuYW1lICA9ICRsb2NhdGlvbi5ob3N0KCk7XG4gICAgICAgIHNjb3BlLmh0dHBkcG9ydCA9ICRsb2NhdGlvbi5wb3J0KCk7XG4gICAgICAgIHNjb3BlLmF1dG9sb2cgICA9IEpTT04ucGFyc2UoYXR0cnMuYXV0b2xvZyB8fCBmYWxzZSk7XG4gICAgICAgIFxuICAgICAgICAvLyBhdXRvc3RhcnQgbG9nIGlmIHJlcXVlc3RlZFxuICAgICAgICBpZiAoc2NvcGUuYXV0b2xvZykgc2NvcGUubG9nZ2luKCk7XG4gICAgICAgIFxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZSxcbiAgICAgICAgc2NvcGU6IHtcbiAgICAgICAgICAgIGNhbGxiYWNrIDogXCI9XCJcbiAgICAgICAgfSxcbiAgICAgICAgcmVzdHJpY3Q6ICdFJyxcbiAgICAgICAgbGluazogbXltZXRob2RzXG4gICAgfTtcbn1dKTtcblxufSkoKTtcbmNvbnNvbGUubG9nIChcIlRva2VuIFJlZnJlc2ggTG9hZGVkXCIpO1xuIiwiLyogXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgXCJJb1QuYnpoXCJcbiAqIEF1dGhvciBcIkZ1bHVwIEFyIEZvbGxcIlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4gKiBcbiAqIEJ1Z3M6IElucHV0IHdpdGggQ2FsbGJhY2sgU0hPVUxEIEJFIGdldCAncmVxdWlyZWQnIGNsYXNzXG4gKiBcbiAqIHJlZjogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvRXZlbnRzL21vdXNlb3ZlclxuICogXG4gKiB1c2FnZTogXG4gKiBcbiAqIHRpcE1vZGFsOiBsaXN0ZW4gZXZlbnQgZnJvbSBlbGVtLnBhcmVudCgpIHRvIGRpc3BsYXkgdGlwLW1vZGFsXG4gKiAgICAgIDxkaXYgY2xhc3M9XCJ4eHh4XCI+XG4gKiAgICAgICAgICA8dGlwLW1vZGFsIHRpcD14eHh4PjwvdGlwLW1vZGFsPlxuICogICAgICAgICAgPGlucHV0LXRleHQgLi4uLj48L2lucHV0LXRleHQ+XG4gKiAgICAgIDwvZGl2PlxuICogICAgICBcbiAqIE5vdGU6IHVzZSBDU1MudmlzaWJpbGl0eSB0byBhdm9pZCBkaXNwbGF5IGZsaWNrZXJpbmcgYXQgaW5pdGlhbCBkaXNwbGF5LlxuICovXG5cbihmdW5jdGlvbiAoKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIHRtcGwgPSAnPGRpdiBjbGFzcz1cInRpcC1tb2RhbC1wb3B1cFwiPicgK1xuICAgICAgICAgICAgJzxpIGNsYXNzPVwie3tpY29ufX1cIj48L2k+JyArXG4gICAgICAgICAgICAnPHNwYW4+e3t0aXB9fTwvc3Bhbj4nICtcbiAgICAgICAgICAgICc8L3NwYW4+PC9kaXY+JyA7XG5cbiAgICBhbmd1bGFyLm1vZHVsZSgnTW9kYWxOb3RpZmljYXRpb24nLCBbXSlcbiAgICAgICAgICAgIC5kaXJlY3RpdmUoJ3RpcE1vZGFsJywgW1wiJHRpbWVvdXRcIiwgZnVuY3Rpb24gKCR0aW1lb3V0KSB7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBteW1ldGhvZHMoc2NvcGUsIGVsZW0sIGF0dHJzKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLnBhcmVudCA9IGVsZW0ucGFyZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLm1vZGFsICAgID0gZWxlbS5maW5kKFwiZGl2XCIpO1xuICAgICAgICAgICAgICAgICAgICBcbiAgICBcbiAgICAgICAgICAgICAgICAgICAgLy8gZGVsYXkgdGlwIGRpc3BsYXkgdG8gYXZvaWQgYmxpbmtpbmcgd2hlbiBtb3ZpbmcgbW91c2UgZmFzdFxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkaXNwbGF5ICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFjdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3BlLnNob3cpIHNjb3BlLm1vZGFsLmNzcyh7b3BhY2l0eTogMSwgdmlzaWJpbGl0eTondmlzaWJsZSd9KTsgIFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuc2hvdyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZS50aW1lb3V0ID0gJHRpbWVvdXQoYWN0aW9uLCBzY29wZS5kZWxheSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNsb3NlICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzY29wZS5zaG93ID0gZmFsc2U7ICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgc2NvcGUubW9kYWwuY3NzKHtvcGFjaXR5OiAwLCB2aXNpYmlsaXR5OidoaWRkZW4nfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICAgICAgLy8gYWp1c3QgaWNvbiBvciB1c2UgZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICBzY29wZS5pY29uICA9IGF0dHJzLmljb24gfHwgJ2ZpLWxpZ2h0YnVsYic7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgUGFyZW50IGVsZW1lbnQgdG8gZ2V0IG1vdXNlIGV2ZW50XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLnBhcmVudC5hZGRDbGFzcyAoJ2FzLW1vZGFsLXRpcCcpO1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5wYXJlbnQuYmluZCgnY2xpY2snLCBjbG9zZSk7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLnBhcmVudC5iaW5kKCdmb2N1cycsIGRpc3BsYXkpO1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5wYXJlbnQuYmluZCgnbW91c2VvdmVyJywgZGlzcGxheSk7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLnBhcmVudC5iaW5kKCdtb3VzZWxlYXZlJywgY2xvc2UpO1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5wYXJlbnQuYmluZCgnYmx1cicsIGNsb3NlKTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLmRlbGF5ID0gYXR0cnMuZGVsYXkgfHwgMTAwMDsgLy8gd2FpdCAxcyBiZWZvcmUgZGlzcGxheWluZyB0aXBcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICByZXN0cmljdDogJ0UnLFxuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdG1wbCxcbiAgICAgICAgICAgICAgICAgICAgbGluazogbXltZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBzY29wZToge3RpcDogXCI9XCJ9IC8vIHRpcCBtYXkgbm90IGJlIGRlZmluZWQgd2hlbiB3aWRnZXQgaXMgZGlzcGxheVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XSk7XG59KSgpO1xuIiwiLyogXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgXCJJb1QuYnpoXCJcbiAqIEF1dGhvciBcIkZ1bHVwIEFyIEZvbGxcIlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4gKiBcbiAqIEJ1Z3M6IElucHV0IHdpdGggQ2FsbGJhY2sgU0hPVUxEIEJFIGdldCAncmVxdWlyZWQnIGNsYXNzXG4gKi9cblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgdG1wbCA9ICc8c3BhbiB0aXRsZT1cIkdvdG86IHt7aHJlZn19XCIgbmctY2xpY2s9XCJjbGlja2VkKClcIj4nICtcbiAgICAgICAgICAgICc8aSBjbGFzcz1cInt7aWNvbn19XCI+PC9pPicgK1xuICAgICAgICAgICAgJzxzcGFuPnt7bGFiZWx9fTwvc3Bhbj4nICtcbiAgICAgICAgICAgICc8L3NwYW4+JztcblxuXG4gICAgYW5ndWxhci5tb2R1bGUoJ0xpbmtCdXR0b24nLCBbXSlcbiAgICAgICAgICAgIC5kaXJlY3RpdmUoJ2xpbmtCdXR0b24nLCBbXCIkbG9jYXRpb25cIiwgZnVuY3Rpb24gKCRsb2NhdGlvbikge1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG15bWV0aG9kcyhzY29wZSwgZWxlbSwgYXR0cnMpIHtcblxuICAgICAgICAgICAgICAgICAgICBzY29wZS5jbGlja2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWF0dHJzLnF1ZXJ5KSAkbG9jYXRpb24ucGF0aChhdHRycy5ocmVmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgJGxvY2F0aW9uLnBhdGgoYXR0cnMuaHJlZikuc2VhcmNoKGF0dHJzLnF1ZXJ5KTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBhanVzdCBpY29uIG9yIHVzZSBkZWZhdWx0XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLmljb24gPSBhdHRycy5pY29uICAgfHwgJ2ZpLWxpbmsnO1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5sYWJlbCA9IGF0dHJzLmxhYmVsIHx8ICdKdW1wJztcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUuaHJlZiAgPSBhdHRycy5ocmVmICB8fCAnL2hvbWUnO1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgLy8gYWRkIGxhYmVsIGFzIGNsYXNzXG4gICAgICAgICAgICAgICAgICAgIGVsZW0uYWRkQ2xhc3MgKHNjb3BlLmxhYmVsLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0OiAnRScsXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlOiB0bXBsLFxuICAgICAgICAgICAgICAgICAgICBsaW5rOiBteW1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIHNjb3BlOiB7fVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XSk7XG59KSgpO1xuIiwiXG4vKiBcbiAqIENvcHlyaWdodCAoQykgMjAxNSBcIklvVC5iemhcIlxuICogQXV0aG9yIFwiRnVsdXAgQXIgRm9sbFwiXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLi5cbiAqIFxuICogUmVmZXJlbmNlOlxuICogICBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9kb2NzL1dlYi9BUEkvRmlsZVJlYWRlciBcbiAqICAgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Vc2luZ19maWxlc19mcm9tX3dlYl9hcHBsaWNhdGlvbnMjVXNpbmdfaGlkZGVuX2ZpbGVfaW5wdXRfZWxlbWVudHNfdXNpbmdfdGhlX2NsaWNrJTI4JTI5X21ldGhvZFxuICogICBodHRwczovL3VuY29ya2Vkc3R1ZGlvcy5jb20vYmxvZy9tdWx0aXBhcnRmb3JtZGF0YS1maWxlLXVwbG9hZC13aXRoLWFuZ3VsYXJqc1xuICogICBodHRwczovL3d3dy50ZXJsaWNpLmNvbS8yMDE1LzA1LzE2L3VwbG9hZGluZy1maWxlcy1sb2NhbGx5Lmh0bWxcbiAqICAgaHR0cHM6Ly9naXRodWIuY29tL25lcnZnaC9hbmd1bGFyLWZpbGUtdXBsb2FkL2Jsb2IvbWFzdGVyL3NyYy9zZXJ2aWNlcy9GaWxlVXBsb2FkZXIuanNcbiAqICAgaHR0cHM6Ly9zdHVrLmdpdGh1Yi5pby9qc3ppcC9kb2N1bWVudGF0aW9uL2hvd3RvL3JlYWRfemlwLmh0bWxcbiAqICAgaHR0cDovL29uZWh1bmdyeW1pbmQuY29tL3ppcC1wYXJzaW5nLWpzemlwLWFuZ3VsYXIvXG4gKiAgIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTUzNDE5MTIvaG93LXRvLWdvLWZyb20tYmxvYi10by1hcnJheWJ1ZmZlclxuICogICBcbiAqICAgQnVnczogemlwIGZpbGUgc2VudCBldmVuIHdoZW4gZmxhZyBhcyBpbnZhbGlkIFxuICovXG5cbiBcblxuKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyBXQVJOSU5HOiBBbmd1bGFyIG5nLWNoYW5nZSBkb2VzIG5vdCB3b3JrIG9uIGlucHV0L2ZpbGUuIExldCdzIGhvb2sgb3VyIGNhbGxiYWNrIHRocm91Z2ggc3RhbmRhcmQgSlMgZnVuY3Rpb25cbnZhciB0bXBsID0gICc8aW5wdXQgdHlwZT1cImZpbGVcIiBuYW1lPVwie3tuYW1lfX0taW5wdXRcIiBvbmNoYW5nZT1cImFuZ3VsYXIuZWxlbWVudCh0aGlzKS5zY29wZSgpLlVwTG9hZEZpbGUodGhpcy5maWxlcylcIiBhY2NlcHQ9XCJ7e21pbWV0eXBlfX1cIiBzdHlsZT1cImRpc3BsYXk6bm9uZVwiPicrXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cInVwbG9hZC1maWxlXCIgbmctY2xpY2s9XCJpbWdDbGlja2VkKClcIj4nICtcbiAgICAgICAgICAgICc8aW1nIGlkPVwie3tuYW1lfX0taW1nXCIgc3JjPVwie3t0aHVtYm5haWx9fVwiPicgK1xuICAgICAgICAgICAgJzxyYW5nZS1zbGlkZXIgbmctc2hvdz1cIiFub3NsaWRlclwiIGlkPVwie3tuYW1lfX0tc2xpZGVyXCIgYXV0b21hdGljPXRydWUgaW5pdGhvb2s9XCJTbGlkZXJJbml0Q0JcIj48L3JhbmdlLXNsaWRlcj4nICtcbiAgICAgICAgICAgICc8L2Rpdj4nO1xuICAgIFxuXG4vLyBTZXJ2aWNlIENyZWF0ZSB4Zm9ybSBpbnNlcnQgZmlsZXMgaW4gYW5kIFBvc3QgaXQgdG8gdXJsXG5mdW5jdGlvbiBMb2FkRmlsZVN2YyAoc2NvcGUsIGVsZW0sIHBvc3R1cmwsIGZpbGVzLCB0aHVtYm5haWxDQikge1xuICAgIHZhciB4bWxSZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB2YXIgeGZvcm0gID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgXG4gICAgdmFyIE9uTG9hZENCID0gZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgICB2YXIgc3RhdHVzID0gdGh1bWJuYWlsQ0IgKHRhcmdldCk7XG4gICAgICAgIC8vaWYgKHN0YXR1cykgeGZvcm0uYXBwZW5kKHNjb3BlLm5hbWUsIGZpbGUsIGZpbGUubmFtZSk7XG4gICAgfTtcbiAgICAgICAgICAgIC8vIFVwZGF0ZSBzbGlkZXIgZHVyaW5nIFVwbG9hZFxuICAgIHhtbFJlcS51cGxvYWQub25wcm9ncmVzcyA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YXIgcHJvZ3Jlc3MgPSBNYXRoLnJvdW5kKGV2ZW50Lmxlbmd0aENvbXB1dGFibGUgPyBldmVudC5sb2FkZWQgKiAxMDAgLyBldmVudC50b3RhbCA6IDApO1xuICAgICAgICBpZiAoc2NvcGUuc2xpZGVyKSBzY29wZS5zbGlkZXIuc2V0VmFsdWUgKHByb2dyZXNzKTtcbiAgICB9O1xuXG4gICAgLy8gVXBsb2FkIGlzIGZpbmlzaCBsZXQncyBub3RpZnkgY29udHJvbGVyIGNhbGxiYWNrXG4gICAgeG1sUmVxLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZWxlbS5hZGRDbGFzcyAoXCJzdWNjZXNzXCIpO1xuICAgICAgICBlbGVtLnJlbW92ZUNsYXNzIChcImVycm9yXCIpO1xuICAgICAgICB2YXIgcmVzcG9uc2UgPXtcbiAgICAgICAgICAgIHN0YXR1cyA6IHhtbFJlcS5zdGF0dXMsXG4gICAgICAgICAgICBoZWFkZXJzOiB4bWxSZXEuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkgXG4gICAgICAgIH07XG4gICAgICAgIHNjb3BlLmNhbGxiYWNrIChyZXNwb25zZSk7XG4gICAgfTtcblxuICAgIHhtbFJlcS5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBlbGVtLmFkZENsYXNzIChcImVycm9yXCIpO1xuICAgICAgICBlbGVtLnJlbW92ZUNsYXNzIChcInN1Y2Nlc3NcIik7XG4gICAgICAgIHZhciByZXNwb25zZSA9e1xuICAgICAgICAgICAgc3RhdHVzIDogeG1sUmVxLnN0YXR1cyxcbiAgICAgICAgICAgIGhlYWRlcnM6IHhtbFJlcS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSBcbiAgICAgICAgfTtcbiAgICAgICAgc2NvcGUuY2FsbGJhY2sgKHJlc3BvbnNlKTtcbiAgICB9O1xuXG4gICAgeG1sUmVxLm9uYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGVsZW0uYWRkQ2xhc3MgKFwiZXJyb3JcIik7XG4gICAgICAgIGVsZW0ucmVtb3ZlQ2xhc3MgKFwic3VjY2Vzc1wiKTtcbiAgICAgICAgdmFyIHJlc3BvbnNlID17XG4gICAgICAgICAgICBzdGF0dXMgOiB4bWxSZXEuc3RhdHVzLFxuICAgICAgICAgICAgaGVhZGVyczogeG1sUmVxLmdldEFsbFJlc3BvbnNlSGVhZGVycygpIFxuICAgICAgICB9O1xuICAgICAgICBzY29wZS5jYWxsYmFjayAocmVzcG9uc2UpO1xuICAgIH07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBmaWxlID0gZmlsZXNbaV07XG4gICAgICAgIGlmICghZmlsZS50eXBlLm1hdGNoKHNjb3BlLm1pbWV0eXBlKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZyAoXCJTZWxlY3RlZCBmaWxlPVwiICsgZmlsZS5uYW1lICsgXCIgc2l6ZT1cIisgZmlsZS5zaXplLzEwMjQgKyBcIiBUeXBlPVwiKyBmaWxlLnR5cGUpO1xuXG4gICAgICAgIC8vIEZpbGUgdG8gdXBsb2FkIGlzIHRvbyBiaWdcbiAgICAgICAgaWYgKGZpbGUuc2l6ZSA+IHNjb3BlLm1heHNpemUqMTAyNCkge1xuICAgICAgICAgICAgc2NvcGUudGh1bWJuYWlsID0gc2NvcGUuaXN0b29iaWc7IC8vIHdhcm5pbmcgaWYgaW1hZ2UgcGF0aCBpcyB3cm9uZyBub3RoaW5nIGhhcHBlblxuICAgICAgICAgICAgc2NvcGUuJGFwcGx5KCd0aHVtYm5haWwnKTsgLy8gd2Ugc2hvcnQtY2lyY3VpdCBBbmd1bGFyIHJlc3luYyBJbWFnZVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhpcyBpcyBub3QgYW4gdXBsb2FkYWJsZSBmaWxlXG4gICAgICAgIGlmKGlzTmFOKGZpbGUuc2l6ZSkpIHtcbiAgICAgICAgICAgIHNjb3BlLnRodW1ibmFpbCA9IHNjb3BlLmlzbm90dmFsaWQ7IFxuICAgICAgICAgICAgc2NvcGUuJGFwcGx5KCd0aHVtYm5haWwnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHNjb3BlLkJhc2VuYW1lPSBmaWxlLm5hbWUuc3BsaXQoJy8nKS5yZXZlcnNlKClbMF07XG4gICAgICAgIHNjb3BlLmltZ0VsZW1bMF0uZmlsZSA9IGZpbGU7XG5cbiAgICAgICAgLy8gSWYgRmlsZSBpcyBhbiBpbWFnZSBsZXQgZGlzcGxheSBpdCBub3dcbiAgICAgICAgaWYgKHRodW1ibmFpbENCKSB7XG4gICAgICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihmaWxlKTtcbiAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSBPbkxvYWRDQjtcbiAgICAgICAgfSBcbiAgICAgICAgLy8gaWYgZXZlcnl0aGluZyBpcyBPSyBsZXQncyBhZGQgZmlsZSB0byB4Zm9ybVxuICAgICAgICB4Zm9ybS5hcHBlbmQoc2NvcGUubmFtZSwgZmlsZSwgZmlsZS5uYW1lKTtcbiAgICB9XG5cblxuICAgIC8vIGV2ZXJ5dGhpbmcgbG9va3MgT0sgbGV0J3MgUG9zdCBpdFxuICAgIHhtbFJlcS5vcGVuKFwiUE9TVFwiLCBwb3N0dXJsICwgdHJ1ZSk7XG4gICAgeG1sUmVxLnNlbmQoeGZvcm0pO1xufVxuXG5hbmd1bGFyLm1vZHVsZSgnVXBsb2FkRmlsZXMnLFsnQXBwQ29uZmlnJywgJ01vZGFsTm90aWZpY2F0aW9uJywgJ1JhbmdlU2xpZGVyJ10pXG5cbi5kaXJlY3RpdmUoJ3VwbG9hZEltYWdlJywgW1wiQXBwQ29uZmlnXCIsIFwiSlFlbXVcIiwgXCJOb3RpZmljYXRpb25cIiwgZnVuY3Rpb24oQXBwQ29uZmlnLCAgSlFlbXUsIE5vdGlmaWNhdGlvbikge1xuICAgIGZ1bmN0aW9uIG15bWV0aG9kcyhzY29wZSwgZWxlbSwgYXR0cnMpIHtcbiAgICAgICAgXG4gICAgICAgIC8vIGdldCB3aWRnZXQgaW1hZ2UgaGFuZGxlIGZyb20gdGVtcGxhdGVcbiAgICAgICAgc2NvcGUuaW1nRWxlbSAgICA9IGVsZW0uZmluZCgnaW1nJyk7XG4gICAgICAgIHNjb3BlLmlucHV0RWxlbSAgPSBlbGVtLmZpbmQoJ2lucHV0Jyk7XG4gICAgICAgIFxuICAgICAgICAvLyBJbWFnZSB3YXMgY2tpY2sgbGV0J3Mgc2ltdWxhdGUgYW4gaW5wdXQgKGZpbGUpIGNsaWNrXG4gICAgICAgIHNjb3BlLmltZ0NsaWNrZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzY29wZS5pbnB1dEVsZW1bMF0uY2xpY2soKTsgLy8gV2FybmluZyBBbmd1bGFyIFRyaWdnZXJFdmVudCBkb2VzIG5vdCB3b3JrISEhXG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICAvLyBTbGlkZXIgY29udHJvbCBoYW5kbGUgcmVnaXN0cmF0aW9uIGFmdGVyIGNyZWF0aW9uXG4gICAgICAgIHNjb3BlLlNsaWRlckluaXRDQj1mdW5jdGlvbiAoc2xpZGVyKSB7XG4gICAgICAgICAgIHNjb3BlLnNsaWRlcj0gc2xpZGVyOyBcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIC8vIFVwbG9hZCBpcyBkZWxlZ2F0ZWQgdG8gYSBzaGFyZWQgZnVuY3Rpb25cbiAgICAgICAgc2NvcGUuVXBMb2FkRmlsZT1mdW5jdGlvbiAoZmlsZXMpIHtcbiAgICAgICAgICAgIHZhciByZWFkZXJDQiA9IGZ1bmN0aW9uICh1cGxvYWQpIHtcbiAgICAgICAgICAgICAgICAvLyBzY29wZS50aHVtYm5haWwgPSB1cGxvYWQudGFyZ2V0LnJlc3VsdDtcbiAgICAgICAgICAgICAgICBzY29wZS5pbWdFbGVtWzBdLnNyYyA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFt1cGxvYWQudGFyZ2V0LnJlc3VsdF0sIHt0eXBlOiBcImltYWdlXCJ9KSk7ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyB0cnVlIGFjdGl2YXRlcyBwb3N0XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHBvc3R1cmwgPSBhdHRycy5wb3N0dXJsICsgXCI/dG9rZW49XCIgKyBBcHBDb25maWcuc2Vzc2lvbi50b2tlbjtcbiAgICAgICAgICAgIG5ldyBMb2FkRmlsZVN2YyAoc2NvcGUsIGVsZW0sIHBvc3R1cmwsIGZpbGVzLCByZWFkZXJDQik7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gSW5pdGlhbGxpemUgZGVmYXVsdCB2YWx1ZXMgZnJvbSBhdHRyaWJ1dGVzIHZhbHVlc1xuICAgICAgICBzY29wZS5uYW1lPSBhdHRycy5uYW1lIHx8ICdmaWxlJztcbiAgICAgICAgc2NvcGUuY2F0ZWdvcnk9IGF0dHJzLmNhdGVnb3J5ICB8fCAnaW1hZ2UnO1xuICAgICAgICBzY29wZS5taW1ldHlwZT0gKGF0dHJzLmFjY2VwdCB8fCAnaW1hZ2UnKSArICcvKic7XG4gICAgICAgIHNjb3BlLm1heHNpemU9IGF0dHJzLm1heHNpemUgfHwgMTAwOyAvLyBkZWZhdWx0IG1heCBzaXplIDEwMEtCXG4gICAgICAgIHNjb3BlLnJlZ2V4cCA9IG5ldyBSZWdFeHAgKGF0dHJzLmFjY2VwdCsgJy4qJywnaScpO1xuXG4gICAgICAgIGlmIChhdHRycy50aHVtYm5haWwpIHNjb3BlLnRodW1ibmFpbD0gQXBwQ29uZmlnLnBhdGhzW3Njb3BlLmNhdGVnb3J5XSArICBhdHRycy50aHVtYm5haWw7XG4gICAgICAgIGVsc2UgIHNjb3BlLnRodW1ibmFpbD1BcHBDb25maWcucGF0aHNbc2NvcGUuY2F0ZWdvcnldICsgJ3R1eC1iemgucG5nJztcbiAgICAgICAgXG4gICAgICAgIGlmIChhdHRycy50aHVtYm5haWwpIHNjb3BlLmlzbm90dmFsaWQ9IEFwcENvbmZpZy5wYXRoc1tzY29wZS5jYXRlZ29yeV0gKyAgYXR0cnMuaXNub3R2YWxpZDtcbiAgICAgICAgZWxzZSAgc2NvcGUuaXNub3R2YWxpZD1BcHBDb25maWcucGF0aHNbc2NvcGUuY2F0ZWdvcnldICsgJ2lzbm90dmFsaWQucG5nJztcblxuICAgICAgICBpZiAoYXR0cnMuaXN0b29iaWcpIHNjb3BlLmlzdG9vYmlnPSBBcHBDb25maWcucGF0aHNbc2NvcGUuY2F0ZWdvcnldICsgIGF0dHJzLmlzdG9vYmlnO1xuICAgICAgICBlbHNlICBzY29wZS5pc3Rvb2JpZz1BcHBDb25maWcucGF0aHNbc2NvcGUuY2F0ZWdvcnldICsgJ2lzdG9vYmlnLnBuZyc7XG4gICAgICAgIHNjb3BlLm5vc2xpZGVyID0gYXR0cnMubm9zbGlkZXIgfHwgZmFsc2U7XG5cbiAgICAgICAgaWYgKCFhdHRycy5wb3N0dXJsKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdmaWxlLXVwbG9hZCAlcyBwb3N0dXJsPS9hcGkveHh4eC94eHh4IHJlcXVpcmVkJywgc2NvcGUuYXR0cnMpOyAgICAgICAgICAgIFxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICByZXN0cmljdDogJ0UnLFxuICAgICAgICB0ZW1wbGF0ZTogdG1wbCxcbiAgICAgICAgbGluazogbXltZXRob2RzLFxuICAgICAgICBzY29wZToge1xuICAgICAgICAgICAgY2FsbGJhY2sgOiAnPSdcbiAgICAgICAgfVxuICAgIH07XG59XSlcbiAgICBcbi5kaXJlY3RpdmUoJ3VwbG9hZEF1ZGlvJywgW1wiQXBwQ29uZmlnXCIsIFwiSlFlbXVcIiwgXCJOb3RpZmljYXRpb25cIiwgZnVuY3Rpb24oQXBwQ29uZmlnLCAgSlFlbXUsIE5vdGlmaWNhdGlvbikge1xuICAgIGZ1bmN0aW9uIG15bWV0aG9kcyhzY29wZSwgZWxlbSwgYXR0cnMpIHtcbiAgICAgICAgXG4gICAgICAgIC8vIGdldCB3aWRnZXQgaW1hZ2UgaGFuZGxlIGZyb20gdGVtcGxhdGVcbiAgICAgICAgc2NvcGUuaW1nRWxlbSAgICA9IGVsZW0uZmluZCgnaW1nJyk7XG4gICAgICAgIHNjb3BlLmlucHV0RWxlbSAgPSBlbGVtLmZpbmQoJ2lucHV0Jyk7XG4gICAgICAgIFxuICAgICAgICAvLyBJbWFnZSB3YXMgY2tpY2sgbGV0J3Mgc2ltdWxhdGUgYW4gaW5wdXQgKGZpbGUpIGNsaWNrXG4gICAgICAgIHNjb3BlLmltZ0NsaWNrZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzY29wZS5pbnB1dEVsZW1bMF0uY2xpY2soKTsgLy8gV2FybmluZyBBbmd1bGFyIFRyaWdnZXJFdmVudCBkb2VzIG5vdCB3b3JrISEhXG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICAvLyBTbGlkZXIgY29udHJvbCBoYW5kbGUgcmVnaXN0cmF0aW9uIGFmdGVyIGNyZWF0aW9uXG4gICAgICAgIHNjb3BlLlNsaWRlckluaXRDQj1mdW5jdGlvbiAoc2xpZGVyKSB7XG4gICAgICAgICAgIHNjb3BlLnNsaWRlcj0gc2xpZGVyOyBcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIC8vIFVwbG9hZCBpcyBkZWxlZ2F0ZWQgdG8gYSBzaGFyZWQgZnVuY3Rpb25cbiAgICAgICAgc2NvcGUuVXBMb2FkRmlsZT1mdW5jdGlvbiAoZmlsZXMpIHtcbiAgICAgICAgICAgIHZhciBwb3N0dXJsID0gYXR0cnMucG9zdHVybCArIFwiP3Rva2VuPVwiICsgQXBwQ29uZmlnLnNlc3Npb24udG9rZW47XG4gICAgICAgICAgICBuZXcgTG9hZEZpbGVTdmMgKHNjb3BlLCBlbGVtLCBwb3N0dXJsLCBmaWxlcywgZmFsc2UpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEluaXRpYWxsaXplIGRlZmF1bHQgdmFsdWVzIGZyb20gYXR0cmlidXRlcyB2YWx1ZXNcbiAgICAgICAgc2NvcGUubmFtZT0gYXR0cnMubmFtZSB8fCAnYXVkaW8nO1xuICAgICAgICBzY29wZS5jYXRlZ29yeT0gYXR0cnMuY2F0ZWdvcnkgIHx8ICdhdWRpbyc7XG4gICAgICAgIHNjb3BlLm1pbWV0eXBlPSAoYXR0cnMuYWNjZXB0IHx8ICdhdWRpbycpICsgJy8qJztcbiAgICAgICAgc2NvcGUubWF4c2l6ZT0gYXR0cnMubWF4c2l6ZSB8fCAxMDAwMDsgLy8gZGVmYXVsdCBtYXggc2l6ZSAxME1CXG4gICAgICAgIHNjb3BlLnJlZ2V4cCA9IG5ldyBSZWdFeHAgKGF0dHJzLmFjY2VwdCsgJy4qJywnaScpO1xuXG4gICAgICAgIGlmIChhdHRycy50aHVtYm5haWwpIHNjb3BlLnRodW1ibmFpbD0gQXBwQ29uZmlnLnBhdGhzW3Njb3BlLmNhdGVnb3J5XSArICBhdHRycy50aHVtYm5haWw7XG4gICAgICAgIGVsc2UgIHNjb3BlLnRodW1ibmFpbD1BcHBDb25maWcucGF0aHNbc2NvcGUuY2F0ZWdvcnldICsgJ3VwbG9hZC1tdXNpYy5wbmcnO1xuICAgICAgICBcbiAgICAgICAgaWYgKGF0dHJzLnRodW1ibmFpbCkgc2NvcGUuaXNub3R2YWxpZD0gQXBwQ29uZmlnLnBhdGhzW3Njb3BlLmNhdGVnb3J5XSArICBhdHRycy5pc25vdHZhbGlkO1xuICAgICAgICBlbHNlICBzY29wZS5pc25vdHZhbGlkPUFwcENvbmZpZy5wYXRoc1tzY29wZS5jYXRlZ29yeV0gKyAnaXNub3R2YWxpZC5wbmcnO1xuXG4gICAgICAgIGlmIChhdHRycy5pc3Rvb2JpZykgc2NvcGUuaXN0b29iaWc9IEFwcENvbmZpZy5wYXRoc1tzY29wZS5jYXRlZ29yeV0gKyAgYXR0cnMuaXN0b29iaWc7XG4gICAgICAgIGVsc2UgIHNjb3BlLmlzdG9vYmlnPUFwcENvbmZpZy5wYXRoc1tzY29wZS5jYXRlZ29yeV0gKyAnaXN0b29iaWcucG5nJztcbiAgICAgICAgc2NvcGUubm9zbGlkZXIgPSBhdHRycy5ub3NsaWRlciB8fCBmYWxzZTtcblxuICAgICAgICBpZiAoIWF0dHJzLnBvc3R1cmwpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ZpbGUtdXBsb2FkICVzIHBvc3R1cmw9L2FwaS94eHh4L3h4eHggcmVxdWlyZWQnLCBzY29wZS5hdHRycyk7ICAgICAgICAgICAgXG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHJlc3RyaWN0OiAnRScsXG4gICAgICAgIHRlbXBsYXRlOiB0bXBsLFxuICAgICAgICBsaW5rOiBteW1ldGhvZHMsXG4gICAgICAgIHNjb3BlOiB7XG4gICAgICAgICAgICBjYWxsYmFjayA6ICc9J1xuICAgICAgICB9XG4gICAgfTtcbiAgICBcbn1dKVxuXG4uZGlyZWN0aXZlKCd1cGxvYWRBcHBsaScsIFtcIkFwcENvbmZpZ1wiLCBcIkpRZW11XCIsIFwiTm90aWZpY2F0aW9uXCIsIGZ1bmN0aW9uKEFwcENvbmZpZywgIEpRZW11LCBOb3RpZmljYXRpb24pIHtcbiAgICBmdW5jdGlvbiBteW1ldGhvZHMoc2NvcGUsIGVsZW0sIGF0dHJzKSB7XG4gICAgICAgIFxuICAgICAgICAvLyBnZXQgd2lkZ2V0IGltYWdlIGhhbmRsZSBmcm9tIHRlbXBsYXRlXG4gICAgICAgIHNjb3BlLmltZ0VsZW0gICAgPSBlbGVtLmZpbmQoJ2ltZycpO1xuICAgICAgICBzY29wZS5pbnB1dEVsZW0gID0gZWxlbS5maW5kKCdpbnB1dCcpO1xuICAgICAgICBcbiAgICAgICAgLy8gSW1hZ2Ugd2FzIGNraWNrIGxldCdzIHNpbXVsYXRlIGFuIGlucHV0IChmaWxlKSBjbGlja1xuICAgICAgICBzY29wZS5pbWdDbGlja2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2NvcGUuaW5wdXRFbGVtWzBdLmNsaWNrKCk7IC8vIFdhcm5pbmcgQW5ndWxhciBUcmlnZ2VyRXZlbnQgZG9lcyBub3Qgd29yayEhIVxuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgLy8gU2xpZGVyIGNvbnRyb2wgaGFuZGxlIHJlZ2lzdHJhdGlvbiBhZnRlciBjcmVhdGlvblxuICAgICAgICBzY29wZS5TbGlkZXJJbml0Q0I9ZnVuY3Rpb24gKHNsaWRlcikge1xuICAgICAgICAgICBzY29wZS5zbGlkZXI9IHNsaWRlcjsgXG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICAvLyBVcGxvYWQgaXMgZGVsZWdhdGVkIHRvIGEgc2hhcmVkIGZ1bmN0aW9uXG4gICAgICAgIHNjb3BlLlVwTG9hZEZpbGU9ZnVuY3Rpb24gKGZpbGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHJlYWRlckNCID0gZnVuY3Rpb24gKHVwbG9hZCkge1xuICAgICAgICAgICAgICAgIHZhciB6aXBhcHAgPSBuZXcgSlNaaXAodXBsb2FkLnRhcmdldC5yZXN1bHQpO1xuICAgICAgICAgICAgICAgIHZhciB0aHVtYm5haWwgPSB6aXBhcHAuZmlsZShcImFmYS1wa2cvdGh1bWJuYWlsLmpwZ1wiKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpcyB3ZSBoYXZlIGEgdGh1bWJuYWlsIHdpdGhpbiBsb2FkZWQgWmlwZmlsZVxuICAgICAgICAgICAgICAgIGlmICghdGh1bWJuYWlsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nIChcIlRoaXMgaXMgbm90IGEgdmFsaWQgQXBwbGljYXRpb24gRnJhbWV3b3JrIEFQUFwiKTtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUudGh1bWJuYWlsPUFwcENvbmZpZy5wYXRoc1tzY29wZS5jYXRlZ29yeV0gKyAnaXNub3R2YWxpZC5wbmcnO1xuICAgICAgICAgICAgICAgICAgICBzY29wZS4kYXBwbHkoJ3RodW1ibmFpbCcpOyAvLyB3ZSBzaG9ydC1jaXJjdWl0IEFuZ3VsYXIgcmVzeW5jIEltYWdlXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gZG8gbm90IHBvc3QgemlwIG9uIGJpbmRlclxuICAgICAgICAgICAgICAgIH0gXG4gICAgICAgICAgICAgICAgc2NvcGUuaW1nRWxlbVswXS5zcmMgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbdGh1bWJuYWlsLmFzQXJyYXlCdWZmZXIoKV0sIHt0eXBlOiBcImltYWdlXCJ9KSk7ICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIHRydWUgYWN0aXZhdGVzIHBvc3RcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgcG9zdHVybCA9IGF0dHJzLnBvc3R1cmwgKyBcIj90b2tlbj1cIiArIEFwcENvbmZpZy5zZXNzaW9uLnRva2VuO1xuICAgICAgICAgICAgbmV3IExvYWRGaWxlU3ZjIChzY29wZSwgZWxlbSwgcG9zdHVybCwgZmlsZXMsIHJlYWRlckNCKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJbml0aWFsbGl6ZSBkZWZhdWx0IHZhbHVlcyBmcm9tIGF0dHJpYnV0ZXMgdmFsdWVzXG4gICAgICAgIHNjb3BlLm5hbWU9IGF0dHJzLm5hbWUgfHwgJ2FwcGxpJztcbiAgICAgICAgc2NvcGUuY2F0ZWdvcnk9IGF0dHJzLmNhdGVnb3J5ICB8fCAnYXBwbGknO1xuICAgICAgICBzY29wZS5taW1ldHlwZT0gKGF0dHJzLmFjY2VwdCB8fCAnLnppcCcpO1xuICAgICAgICBzY29wZS5tYXhzaXplPSBhdHRycy5tYXhzaXplIHx8IDEwMDAwMDsgLy8gZGVmYXVsdCBtYXggc2l6ZSAxMDBNQlxuICAgICAgICBzY29wZS5yZWdleHAgPSBuZXcgUmVnRXhwIChhdHRycy5hY2NlcHQrICcuKicsJ2knKTtcblxuICAgICAgICBpZiAoYXR0cnMudGh1bWJuYWlsKSBzY29wZS50aHVtYm5haWw9IEFwcENvbmZpZy5wYXRoc1tzY29wZS5jYXRlZ29yeV0gKyAgYXR0cnMudGh1bWJuYWlsO1xuICAgICAgICBlbHNlICBzY29wZS50aHVtYm5haWw9QXBwQ29uZmlnLnBhdGhzW3Njb3BlLmNhdGVnb3J5XSArICd1cGxvYWQtYXBwbGkucG5nJztcbiAgICAgICAgXG4gICAgICAgIGlmIChhdHRycy50aHVtYm5haWwpIHNjb3BlLmlzbm90dmFsaWQ9IEFwcENvbmZpZy5wYXRoc1tzY29wZS5jYXRlZ29yeV0gKyAgYXR0cnMuaXNub3R2YWxpZDtcbiAgICAgICAgZWxzZSAgc2NvcGUuaXNub3R2YWxpZD1BcHBDb25maWcucGF0aHNbc2NvcGUuY2F0ZWdvcnldICsgJ2lzbm90dmFsaWQucG5nJztcblxuICAgICAgICBpZiAoYXR0cnMuaXN0b29iaWcpIHNjb3BlLmlzdG9vYmlnPSBBcHBDb25maWcucGF0aHNbc2NvcGUuY2F0ZWdvcnldICsgIGF0dHJzLmlzdG9vYmlnO1xuICAgICAgICBlbHNlICBzY29wZS5pc3Rvb2JpZz1BcHBDb25maWcucGF0aHNbc2NvcGUuY2F0ZWdvcnldICsgJ2lzdG9vYmlnLnBuZyc7XG4gICAgICAgIHNjb3BlLm5vc2xpZGVyID0gYXR0cnMubm9zbGlkZXIgfHwgZmFsc2U7XG5cbiAgICAgICAgaWYgKCFhdHRycy5wb3N0dXJsKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdmaWxlLXVwbG9hZCAlcyBwb3N0dXJsPS9hcGkveHh4eC94eHh4IHJlcXVpcmVkJywgc2NvcGUuYXR0cnMpOyAgICAgICAgICAgIFxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICByZXN0cmljdDogJ0UnLFxuICAgICAgICB0ZW1wbGF0ZTogdG1wbCxcbiAgICAgICAgbGluazogbXltZXRob2RzLFxuICAgICAgICBzY29wZToge1xuICAgICAgICAgICAgY2FsbGJhY2sgOiAnPSdcbiAgICAgICAgfVxuICAgIH07XG4gICAgXG59XSk7XG5cbmNvbnNvbGUubG9nIChcIlVwbG9hZEZpbGUgTG9hZGVkXCIpO1xufSkoKTtcbiIsIi8qIFxuICogQ29weXJpZ2h0IChDKSAyMDE1IFwiSW9ULmJ6aFwiXG4gKiBBdXRob3IgXCJGdWx1cCBBciBGb2xsXCJcbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuICogXG4gKiBCdWdzOiBJbnB1dCB3aXRoIENhbGxiYWNrIFNIT1VMRCBCRSBnZXQgJ3JlcXVpcmVkJyBjbGFzc1xuICovXG5cbihmdW5jdGlvbiAoKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIHRtcGwgPSAnPGRpdiAgbmctY2xpY2s9XCJjbGlja2VkKClcIj4nICtcbiAgICAgICAgICAgICc8aSBjbGFzcz1cInt7aWNvbn19XCI+PC9pPicgK1xuICAgICAgICAgICAgJzxzcGFuPnt7bGFiZWx9fTwvc3Bhbj4nICtcbiAgICAgICAgICAgICc8L2Rpdj4nO1xuXG4gICAgYW5ndWxhci5tb2R1bGUoJ1N1Ym1pdEJ1dHRvbicsIFtdKVxuICAgICAgICAgICAgLmRpcmVjdGl2ZSgnc3VibWl0QnV0dG9uJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gbXltZXRob2RzKHNjb3BlLCBlbGVtLCBhdHRycykge1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGFqdXN0IGljb24gb3IgdXNlIGRlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUuaWNvbiA9IGF0dHJzLmljb24gfHwgJ2ZpLWZvb3QnO1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5sYWJlbCA9IGF0dHJzLmxhYmVsIHx8ICdOZXh0JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIC8vIGFkZCBsYWJlbCBhcyBjbGFzc1xuICAgICAgICAgICAgICAgICAgICBlbGVtLmFkZENsYXNzIChzY29wZS5sYWJlbC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIC8vIG5vdGU6IGNsaWNrZWQgaW4gaW1wb3J0ZWQgYW5kIHdoZW4gdGVtcGxhdGUgaXMgY2xpY2tlZFxuICAgICAgICAgICAgICAgICAgICAvLyBpdCB3aWxsIGNhbGwgY2xpY2tlZCBtZXRob2QgcGFzc2VkIGluIHBhcmFtLlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICByZXN0cmljdDogJ0UnLFxuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdG1wbCxcbiAgICAgICAgICAgICAgICAgICAgbGluazogbXltZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBzY29wZToge2NsaWNrZWQgOiAnPSd9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xufSkoKTtcbiIsIi8qIFxuICogQ29weXJpZ2h0IChDKSAyMDE1IFwiSW9ULmJ6aFwiXG4gKiBBdXRob3IgXCJGdWx1cCBBciBGb2xsXCJcbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuICogXG4gKiBCdWdzOiBJbnB1dCB3aXRoIENhbGxiYWNrIFNIT1VMRCBCRSBnZXQgJ3JlcXVpcmVkJyBjbGFzc1xuICovXG5cbihmdW5jdGlvbiAoKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIHRtcGxBcHBsaSA9ICc8ZGl2ICBuZy1jbGljaz1cImNsaWNrZWQoKVwiPicgK1xuICAgICAgICAgICAgJzxpbWcgbmctc3JjPVwie3tpY29ufX1cIj4nICtcbiAgICAgICAgICAgICc8c3Bhbj57e2xhYmVsfX08L3NwYW4+JyArXG4gICAgICAgICAgICAnPC9kaXY+JztcbiAgICBcbiAgICB2YXIgdG1wbE1vZGFsID0gXG4gICAgICAgICAgICAnPGIgY2xhc3M9XCJjbG9zZS1idXR0b25cIiBuZy1jbGljaz1cImNsb3NlKClcIj7DlzwvYj4nICtcbiAgICAgICAgICAgICc8aW1nIG5nLXNyYz1cInt7aWNvbn19XCI+JyArXG4gICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJtb2RhbC10ZXh0XCI+QXBwbGljYXRpb24gPGI+e3tsYWJlbH19PC9iPjwvc3Bhbj4nICtcbiAgICAgICAgICAgICc8dWwgY2xhc3M9XCJ2ZXJ0aWNhbCBpY29uLWxlZnQgcHJpbWFyeSBtZW51LWJhciBhcHBsaS1tZW51LXN0YXJ0XCI+JyArXG4gICAgICAgICAgICAnPGxpIGNsYXNzPXN0YXJ0LXt7cnVuc3RhdHVzfX0+PGEgbmctY2xpY2s9YWN0aW9uKFwic3RhcnRcIik+PGkgY2xhc3M9XCJmaS1jaGVja1wiPiBTdGFydDwvaT48L2E+PC9saT4nICtcbiAgICAgICAgICAgICc8bGkgY2xhc3M9c3RvcC17e3J1bnN0YXR1c319PjxhIG5nLWNsaWNrPWFjdGlvbihcInN0b3BcIik+PGkgY2xhc3M9XCJmaS14XCI+IFN0b3A8L2k+PC9hPjwvbGk+JyArXG4gICAgICAgICAgICAnPGxpPjxhIG5nLWNsaWNrPWFjdGlvbihcImluZm9cIik+PGkgY2xhc3M9XCJmaS1pbmZvXCI+IEluZm88L2k+PC9hPjwvbGk+JyArXG4gICAgICAgICAgICAnPGxpIGNsYXNzPXN0YXJ0LXt7cnVuc3RhdHVzfX0+PGEgbmctY2xpY2s9YWN0aW9uKFwidW5pbnN0YWxsXCIpPjxpIGNsYXNzPVwiZmkteFwiPiBVbmluc3RhbGw8L2k+PC9hPjwvbGk+JyArXG4gICAgICAgICAgICAnPC91bD4nICtcbiAgICAgICAgICAgICcnO1xuICAgIFxuICAgIHZhciB0bXBsRGV0YWlsID0gXG4gICAgICAgICAgICAnPGIgY2xhc3M9XCJjbG9zZS1idXR0b25cIiBuZy1jbGljaz1cImNsb3NlKClcIj7DlzwvYj4nICtcbiAgICAgICAgICAgICc8aW1nIG5nLXNyYz1cInt7aWNvbn19XCI+JyArXG4gICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJtb2RhbC10ZXh0XCI+QXBwbGljYXRpb24gPGI+e3tsYWJlbH19PC9iPjwvc3Bhbj4nICtcbiAgICAgICAgICAgICc8dWwgY2xhc3M9XCJ2ZXJ0aWNhbCBpY29uLWxlZnQgYXBwbGktbWVudS1pbmZvXCI+JyArXG4gICAgICAgICAgICAnPGxpPjxpIGNsYXNzPVwiZmktcGFwZXJjbGlwXCI+IE5hbWUgOiB7e2RldGFpbC5uYW1lfX0gPC9pPjwvbGk+JyArXG4gICAgICAgICAgICAnPGxpPjxpIGNsYXNzPVwiZmktaW5mb1wiPiBEZXNjcmlwdGlvbiB7e2RldGFpbC5kZXNjcmlwdGlvbn19PC9pPjwvbGk+JyArXG4gICAgICAgICAgICAnPGxpPjxpIGNsYXNzPVwiZmktdG9yc29cIj4gQXV0aG9yIDoge3tkZXRhaWwuYXV0aG9yfX08L2k+PC9saT4nICtcbiAgICAgICAgICAgICc8L3VsPicgK1xuICAgICAgICAgICAgJyc7XG5cbiAgICBhbmd1bGFyLm1vZHVsZSgnQXBwbGlCdXR0b24nLCBbXSlcbiAgICAgICAgICAgIC5kaXJlY3RpdmUoJ2FwcGxpQnV0dG9uJywgW1wiQXBwQ29uZmlnXCIsIFwiQXBwQ2FsbFwiLCBcIk1vZGFsRmFjdG9yeVwiLCBcIk5vdGlmaWNhdGlvblwiLCBcIiR0aW1lb3V0XCIsIFwiJHdpbmRvd1wiLCBcIiRsb2NhdGlvblwiLCBcInVybHF1ZXJ5XCIsIGZ1bmN0aW9uIChBcHBDb25maWcsIEFwcENhbGwsIE1vZGFsRmFjdG9yeSwgTm90aWZpY2F0aW9uLCAkdGltZW91dCwgJHdpbmRvdywgJGxvY2F0aW9uLCB1cmxxdWVyeSkge1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gbXltZXRob2RzKHNjb3BlLCBlbGVtLCBhdHRycykge1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5ydW5zdGF0dXMgPSBcInN0b3BcIjtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUucnVubW9kZSAgID0gdXJscXVlcnkucnVubW9kZSB8fCBcImF1dG9cIjtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUuY2xpY2tlZCA9IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vdGlmeUVycm9yID0gZnVuY3Rpb24oYWN0aW9uLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbi5lcnJvciAoe21lc3NhZ2U6IFwiRmFpbCAvYXBpL2FmbS1tYWluXCIgKyBhY3Rpb24gKyBcIj1cIiArIHNjb3BlLmxhYmVsICsgXCIgUnVuSUQ9XCIrIHNjb3BlLmFwcElELCBkZWxheTogNTAwMH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uYWRkQ2xhc3MgKFwiZmFpbFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnJlbW92ZUNsYXNzIChcInN1Y2Nlc3NcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuY2FsbGJhY2sgKHNjb3BlLmFwcElELCBhY3Rpb24sIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub3RpZnlTdWNjZXNzID0gZnVuY3Rpb24gKGFjdGlvbiwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnJlbW92ZUNsYXNzIChcImZhaWxcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUucnVuSUQgPSByZXNwb25zZS5kYXRhLnJlc3BvbnNlLnJ1bmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmNhbGxiYWNrIChzY29wZS5hcHBJRCwgYWN0aW9uLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2xvc2VNb2RBcHAgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5tb2RBcHAuZGVhY3RpdmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aW1lb3V0IChmdW5jdGlvbigpIHtzY29wZS5tb2RBcHAuZGVzdHJveSgpO30sIDEwMDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNsb3NlTW9kSW5mbyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLm1vZEluZm8uZGVhY3RpdmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aW1lb3V0IChmdW5jdGlvbigpIHtzY29wZS5tb2RJbmZvLmRlc3Ryb3koKTt9LCAxMDAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhY3Rpb25Nb2RhbCA9IGZ1bmN0aW9uKGFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nIChcIk1vZGFsIEFjdGlvbj0lc1wiLCBhY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwic3RhcnRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY29wZS5ydW5zdGF0dXMgIT09IFwic3RvcFwiKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcHBDYWxsLmdldCAoXCJhZm0tbWFpblwiLCBcInN0YXJ0XCIsIHtpZDogc2NvcGUuYXBwSUQsIG1vZGU6IHNjb3BlLnJ1bm1vZGV9LCBmdW5jdGlvbihyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCB8fCByZXNwb25zZS5kYXRhLmp0eXBlICE9PSBcImFmYi1yZXBseVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUVycm9yIChcInN0YXJ0XCIsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5ydW5zdGF0dXM9XCJzdGFydFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeVN1Y2Nlc3MgKGFjdGlvbiwgcmVzcG9uc2UpO1xuXHRcdFx0XHRcdGlmKHJlc3BvbnNlLmRhdGEucmVzcG9uc2UudXJpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS53aW5hcHA9ICR3aW5kb3cub3BlbihyZXNwb25zZS5kYXRhLnJlc3BvbnNlLnVyaS5yZXBsYWNlKFwiJWhcIiwgJGxvY2F0aW9uLmhvc3QoKSkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzdG9wXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUucnVuc3RhdHVzICE9PSBcInN0YXJ0XCIpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwQ2FsbC5nZXQgKFwiYWZtLW1haW5cIiwgXCJ0ZXJtaW5hdGVcIiwge3J1bmlkOiBzY29wZS5ydW5JRH0sIGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMjAwIHx8IHJlc3BvbnNlLmRhdGEuanR5cGUgIT09IFwiYWZiLXJlcGx5XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5RXJyb3IgKFwic3RvcFwiLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUucnVuc3RhdHVzPVwic3RvcFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIGEgcmVtb3RlIHdpbmRvdyBhcHAgd2FzIG9wZW4gbGV0J3MgY2xvc2UgaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUud2luYXBwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cgKFwiQ2xvc2luZyBBcHBsaWNhdGlvbiBXaW5kb3cgbGFiZWw9JXMgaWQ9JXNcIiwgc2NvcGUubGFiZWwsIHNjb3BlLmFwcElEKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS53aW5hcHAuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS53aW5hcHA9ZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeVN1Y2Nlc3MgKGFjdGlvbiwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImluZm9cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcENhbGwuZ2V0IChcImFmbS1tYWluXCIsIFwiZGV0YWlsXCIsIHtpZDogc2NvcGUuYXBwSUR9LCBmdW5jdGlvbihyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCB8fCByZXNwb25zZS5kYXRhLmp0eXBlICE9PSBcImFmYi1yZXBseVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUVycm9yIChcImRldGFpbFwiLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVmZXJlbmNlIGh0dHA6Ly9mb3VuZGF0aW9uLnp1cmIuY29tL2FwcHMvZG9jcy8jIS9hbmd1bGFyLW1vZHVsZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25JbjogJ3NsaWRlSW5Gcm9tVG9wJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFNjb3BlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZSAgIDogY2xvc2VNb2RJbmZvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbiAgICA6IHNjb3BlLmljb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCAgIDogc2NvcGUuYXBwSUQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWwgIDogcmVzcG9uc2UuZGF0YS5yZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0ZW1wbGF0ZSA6IHRtcGxEZXRhaWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQb3B1cCBNb2RhbCB0byByZW5kZXIgYXBwbGljYXRpb24gZGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLm1vZEluZm8gPSBuZXcgTW9kYWxGYWN0b3J5KGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUubW9kSW5mby5hY3RpdmF0ZSAoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwidW5pbnN0YWxsXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUucnVuc3RhdHVzICE9PSBcInN0b3BcIikgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwQ2FsbC5nZXQgKFwiYWZtLW1haW5cIiwgXCJ1bmluc3RhbGxcIiwge2lkOiBzY29wZS5hcHBJRH0sIGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMjAwIHx8IHJlc3BvbnNlLmRhdGEuanR5cGUgIT09IFwiYWZiLXJlcGx5XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5RXJyb3IgKFwidW5pbnN0YWxsXCIsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlTdWNjZXNzIChhY3Rpb24sIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nIChcIkFjdGlvbk1vZGFsIHVua25vd24gYWN0aW9uPVslc11cIiwgYWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZU1vZEFwcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVmZXJlbmNlIGh0dHA6Ly9mb3VuZGF0aW9uLnp1cmIuY29tL2FwcHMvZG9jcy8jIS9hbmd1bGFyLW1vZHVsZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb25maWcgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uSW46ICdzbGlkZUluRnJvbVRvcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFNjb3BlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiAgIDogYWN0aW9uTW9kYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnN0YXR1czogc2NvcGUucnVuc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZSAgICA6IGNsb3NlTW9kQXBwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uICAgICA6IHNjb3BlLmljb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsICAgIDogc2NvcGUubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0ZW1wbGF0ZSAgOiB0bXBsTW9kYWxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07IFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUG9wdXAgTW9kYWwgdG8gcmVuZGVyIGFwcGxpY2F0aW9uIGRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLm1vZEFwcCA9IG5ldyBNb2RhbEZhY3RvcnkoY29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLm1vZEFwcC5hY3RpdmF0ZSAoKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBleHRyYWN0IGFwcGxpY2F0aW9uIGluZm9ybWF0aW9uIGZyb20gQXBwSUQrU3RvcmVcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJzLmhhbmRsZSAmJiBzY29wZS5zdG9yZSBbYXR0cnMuaGFuZGxlXS5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5pY29uICA9IEFwcENvbmZpZy5wYXRocy5pY29ucyArIGF0dHJzLmhhbmRsZTsgLy9zY29wZS5zdG9yZSBbYXR0cnMuaGFuZGxlXS5uYW1lLnRvTG93ZXJDYXNlKCkgKyAnLWljby5wbmcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUubGFiZWwgPSBzY29wZS5zdG9yZSBbYXR0cnMuaGFuZGxlXS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuYXBwSUQ9IGF0dHJzLmhhbmRsZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5pY29uICA9IEFwcENvbmZpZy5wYXRocy5pY29ucyArICd3M2MtaWNvLnBuZyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUubGFiZWwgPSBhdHRycy5oYW5kbGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIC8vIGFkZCBsYWJlbCBhcyBjbGFzc1xuICAgICAgICAgICAgICAgICAgICBlbGVtLmFkZENsYXNzIChzY29wZS5sYWJlbC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIC8vIG5vdGU6IGNsaWNrZWQgaW4gaW1wb3J0ZWQgYW5kIHdoZW4gdGVtcGxhdGUgaXMgY2xpY2tlZFxuICAgICAgICAgICAgICAgICAgICAvLyBpdCB3aWxsIGNhbGwgY2xpY2tlZCBtZXRob2QgcGFzc2VkIGluIHBhcmFtLlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICByZXN0cmljdDogJ0UnLFxuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdG1wbEFwcGxpLFxuICAgICAgICAgICAgICAgICAgICBsaW5rOiBteW1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIHNjb3BlOiB7Y2FsbGJhY2s6ICc9Jywgc3RvcmU6ICc9J31cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfV0pO1xufSkoKTtcbiIsIihmdW5jdGlvbigpIHthbmd1bGFyLm1vZHVsZSgnQUZCY2xpZW50JykucnVuKFsnJHRlbXBsYXRlQ2FjaGUnLCBmdW5jdGlvbigkdGVtcGxhdGVDYWNoZSkgeyR0ZW1wbGF0ZUNhY2hlLnB1dCgncGFnZXMvU2FtcGxlUG9zdC9TYW1wbGVQb3N0Lmh0bWwnLFxuICAgICc8aDE+PGltZyBjbGFzcz1cImxvZ29cIiBzcmM9XCJpbWFnZXMvbG9nby90cmlza2VsX2lvdF9iemh4MjUwLnBuZ1wiIGFsdD1cIklvVC5iemggTG9nb1wiIHN0eWxlPVwiaGVpZ2h0OjE1MHB4XCI+IFBvc3QgRmlsZSBVcGxvYWQ8L2gxPjxkaXYgY2xhc3M9XCJzYW1wbGUtYm94IGJveC1jb250ZW50XCI+PHVwbG9hZC1pbWFnZSBjYXRlZ29yeT1cImF2YXRhclwiIHRodW1ibmFpbD1cInR1eC12aXNpdG9yLnBuZ1wiIG1heHNpemU9XCIxMDBcIiBwb3N0dXJsPVwiL2FwaS9wb3N0L3VwbG9hZC1pbWFnZVwiIGNhbGxiYWNrPVwiY3RybC5GaWxlVXBsb2FkZWRcIiBhY2NlcHQ9XCJpbWFnZVwiIHRpdGxlPVwiQ2hhbmdlIHlvdXIgQXZhdGFyXCI+PC91cGxvYWQtaW1hZ2U+PC9kaXY+PGxpbmstYnV0dG9uIGhyZWY9XCJob21lXCIgaWNvbj1cImZpLWhvbWVcIiBsYWJlbD1cImhvbWVcIj48L2xpbmstYnV0dG9uPicpO31dKTtcbn0pKCk7XG4iLCIoZnVuY3Rpb24oKSB7YW5ndWxhci5tb2R1bGUoJ0FGQmNsaWVudCcpLnJ1bihbJyR0ZW1wbGF0ZUNhY2hlJywgZnVuY3Rpb24oJHRlbXBsYXRlQ2FjaGUpIHskdGVtcGxhdGVDYWNoZS5wdXQoJ3BhZ2VzL1NhbXBsZUhvbWUvU2FtcGxlSG9tZS5odG1sJyxcbiAgICAnPGgzPjxpbWcgY2xhc3M9XCJsb2dvXCIgc3JjPVwiaW1hZ2VzL2xvZ28vdHJpc2tlbF9pb3RfYnpoeDI1MC5wbmdcIiBhbHQ9XCJJb1QuYnpoIExvZ29cIiBzdHlsZT1cImhlaWdodDoxNTBweFwiPiBBcHAgRnJhbWV3b3JrIEJpbmRlciBTaW1wbGUgQ2xpZW50PC9oMz48dG9rZW4tcmVmcmVzaCBhdXRvbG9nPVwidHJ1ZVwiIGNhbGxiYWNrPVwiY3RybC5Jbml0aWFsaXNlZFwiPjwvdG9rZW4tcmVmcmVzaD48ZGl2IGNsYXNzPVwiYnV0dG9uLWJveCBib3gtY29udGVudFwiPjxzdWJtaXQtYnV0dG9uIGNsYXNzPVwic2Vzc2lvbi1idXR0b24ge3tjdHJsLmNsYXNzLmNvbm5lY3R9fVwiIGljb249XCJmaS11bmxvY2tcIiBsYWJlbD1cIkNvbm5lY3RcIiBjbGlja2VkPVwiY3RybC5Db25uZWN0Q2xpZW50XCI+PC9zdWJtaXQtYnV0dG9uPjxzdWJtaXQtYnV0dG9uIGNsYXNzPVwic2Vzc2lvbi1idXR0b24ge3tjdHJsLmNsYXNzLmNoZWNrfX1cIiBpY29uPVwiZmktY2hlY2tib3hcIiBsYWJlbD1cIkNoZWNrXCIgY2xpY2tlZD1cImN0cmwuQ2hlY2tTZXNzaW9uXCI+PC9zdWJtaXQtYnV0dG9uPjxzdWJtaXQtYnV0dG9uIGNsYXNzPVwic2Vzc2lvbi1idXR0b24ge3tjdHJsLmNsYXNzLnJlZnJlc2h9fVwiIGljb249XCJmaS1hcnJvd3MtY29tcHJlc3NcIiBsYWJlbD1cIlJlZnJlc2hcIiBjbGlja2VkPVwiY3RybC5SZWZyZXNoU2Vzc2lvblwiPjwvc3VibWl0LWJ1dHRvbj48c3VibWl0LWJ1dHRvbiBjbGFzcz1cInNlc3Npb24tYnV0dG9uIHt7Y3RybC5jbGFzcy5sb2dvdXR9fVwiIGljb249XCJmaS1sb2NrXCIgbGFiZWw9XCJMb2dvdXRcIiBjbGlja2VkPVwiY3RybC5Mb2dvdXRDbGllbnRcIj48L3N1Ym1pdC1idXR0b24+PC9kaXY+PGRpdiBjbGFzcz1cIm1lc3NhZ2UtYm94IGJveC1jb250ZW50IHZlcnRpY2FsIGdyaWQtZnJhbWVcIj48ZGl2IGNsYXNzPVwicmVzcG9uc2VcIj48c3BhbiBjbGFzcz1cImdyaWQtY29udGVudCBub3Njcm9sbCByZXEge3tjdHJsLnN0YXR1c319XCI+cmVxPSB7e2N0cmwucmVxdWVzdH19PC9zcGFuPiA8c3BhbiBjbGFzcz1cImdyaWQtY29udGVudCBub3Njcm9sbCByZXMge3tjdHJsLnN0YXR1c319XCI+cmVzPSB7e2N0cmwucmVzcG9uc2V9fTwvc3Bhbj4gPHNwYW4gY2xhc3M9XCJncmlkLWNvbnRlbnQgbm9zY3JvbGwgc3RhdHVzIHt7Y3RybC5zdGF0dXN9fVwiPnN0YXR1cz0ge3tjdHJsLmVycmNvZGV9fTwvc3Bhbj48L2Rpdj48L2Rpdj48bGluay1idXR0b24gaHJlZj1cInNhbXBsZS1wb3N0XCIgaWNvbj1cImZpLWhvbWVcIiBsYWJlbD1cIlNhbXBsZVBvc3RcIj48L2xpbmstYnV0dG9uPicpO31dKTtcbn0pKCk7XG4iLCIvKiBcbiAqIENvcHlyaWdodCAoQykgMjAxNSBcIklvVC5iemhcIlxuICogQXV0aG9yIFwiRnVsdXAgQXIgRm9sbFwiXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICogXG4gKiBVc2FnZTpcbiAqIFxuICogICAvLyBtb3VzZSBldmVudCBwcm9iYWJseSBwb2ludCBvbiBpY29uIGFuZCBub3Qgb24gYnV0dG9uIGRpdlxuICogICAuLi4gbmctY2xpY2s9XCJMb2NrQ2hhbm5lbCgkZXZlbnQpXG4gICAgIHZhciB0YXJnZXQ9IGFuZ3VsYXIuZWxlbWVudChldmVudC5jdXJyZW50VGFyZ2V0KTtcbiAgICAgdmFyIGJ1dHRvbj0gSlFlbXUuRmluZEluUGFyZW50ICh0YXJnZXQsICdkaXYnKTtcbiAqIFxuICovXG5cblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cblxuICAgICAgICAgIFxuICAgIC8vIF9hbGwgbW9kdWxlcyBvbmx5IHJlZmVyZW5jZSBkZXBlbmRlbmNpZXNcbiAgICBhbmd1bGFyLm1vZHVsZSgnSlF1ZXJ5RW11JywgW10pXG5cbiAgICAgICAgICAgIC8vIEZhY3RvcnkgaXMgYSBzaW5nbGV0b24gYW5kIHNoYXJlIGl0cyBjb250ZXh0IHdpdGhpbiBhbGwgaW5zdGFuY2VzLlxuICAgICAgICAgICAgLmZhY3RvcnkoJ0pRZW11JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgdmFyIEZpbmRJblBhcmVudCA9IGZ1bmN0aW9uIChlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50ID0gZWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlYXJjaCA9IHNlbGVjdG9yLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChwYXJlbnRbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWFyY2ggPT09IHBhcmVudFswXS50YWdOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gIC8vIEhUTUxEaXZFbGVtZW50IHByb3BlcnRpZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdmFyICBGaW5kQnlUYWc9IGZ1bmN0aW9uIChlbGVtZW50LCB0YWcsIHNlbGVjdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWFyY2ggPSBzZWxlY3Rvci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSAgID0gdGFnLnRvTG93ZXJDYXNlKCkrIFwiTmFtZVwiO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBlbGVtZW50LmNoaWxkcmVuKCk7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChjaGlsZHJlblswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlYXJjaCA9PT0gY2hpbGRyZW5bMF1bdHlwZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgICAgICAgICB9ICAvLyBIVE1MRGl2RWxlbWVudCBwcm9wZXJ0aWVzXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdmFyICBGaW5kQnlDbGFzcz0gZnVuY3Rpb24gKGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWFyY2ggPSBzZWxlY3Rvci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBlbGVtZW50LmNoaWxkcmVuKCk7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChjaGlsZHJlblswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuLmhhc0NsYXNzKHNlYXJjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgICAgICAgICB9ICAvLyBIVE1MRGl2RWxlbWVudCBwcm9wZXJ0aWVzXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB2YXIgbXlNZXRob2RzID0ge1xuICAgICAgICAgICAgICAgICAgICBGaW5kSW5QYXJlbnQ6IEZpbmRJblBhcmVudCxcbiAgICAgICAgICAgICAgICAgICAgRmluZEJ5VGFnOiBGaW5kQnlUYWcsXG4gICAgICAgICAgICAgICAgICAgIEZpbmRCeUNsYXNzOiBGaW5kQnlDbGFzc1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbXlNZXRob2RzO1xuICAgICAgICAgICAgfSk7XG5cbn0pKCk7IiwidmFyIGZvdW5kYXRpb25Sb3V0ZXMgPSBbe1wibmFtZVwiOlwiUG9zdFNhbXBsZVwiLFwidXJsXCI6XCIvc2FtcGxlLXBvc3RcIixcImNvbnRyb2xsZXJcIjpcIlNhbXBsZVBvc3RDb250cm9sbGVyIGFzIGN0cmxcIixcImFuaW1hdGlvbkluXCI6XCJzbGlkZUluUmlnaHRcIixcInBhdGhcIjpcInBhZ2VzL1NhbXBsZVBvc3QvU2FtcGxlUG9zdC5odG1sXCJ9LHtcIm5hbWVcIjpcIlNhbXBsZUhvbWVcIixcInVybFwiOlwiL3NhbXBsZS1ob21lXCIsXCJjb250cm9sbGVyXCI6XCJTYW1wbGVIb21lQ29udHJvbGxlciBhcyBjdHJsXCIsXCJhbmltYXRpb25JblwiOlwic2xpZGVJblJpZ2h0XCIsXCJwYXRoXCI6XCJwYWdlcy9TYW1wbGVIb21lL1NhbXBsZUhvbWUuaHRtbFwifV07IFxuIiwiKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICAvLyBfYWxsIG1vZHVsZXMgb25seSByZWZlcmVuY2UgZGVwZW5kZW5jaWVzXG4gICAgYW5ndWxhci5tb2R1bGUoJ0FwcENvbmZpZycsIFtdKVxuXG4gICAgICAgICAgICAvLyBGYWN0b3J5IGlzIGEgc2luZ2xldG9uIGFuZCBzaGFyZSBpdHMgY29udGV4dCB3aXRoaW4gYWxsIGluc3RhbmNlcy5cbiAgICAgICAgICAgIC5mYWN0b3J5KCdBcHBDb25maWcnLCBbXCJ1cmxxdWVyeVwiLCBmdW5jdGlvbiAodXJscXVlcnkpIHtcblxuICAgICAgICAgICAgICAgIHZhciBteUNvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgcGF0aHM6IHsgLy8gV2FybmluZyBwYXRocyBzaG91bGQgZW5kIHdpdGggL1xuICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgOiAnaW1hZ2VzLycsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdmF0YXI6ICdpbWFnZXMvYXZhdGFycy8nXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIHNlc3Npb246IHsgLy8gVGhvc2UgZGF0YSBhcmUgdXBkYXRlZCBieSBzZXNzaW9uIHNlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbCA6IHVybHF1ZXJ5LnRva2VuIHx8ICcxMjM0NTY3ODknLCAgLy8gdHlwaWNhbCBkZXYgaW5pdGlhbCB0b2tlblxuICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0IDogMzYwMCwgICAgICAgICAvLyB0aW1lb3V0IGlzIHVwZGF0ZWQgY2xpZW50IHNlc3NpbiBjb250ZXh0IGNyZWF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgIHBpbmdyYXRlOiAzMCwgICAgICAgICAgIC8vIFBpbmcgcmF0ZSB0byBjaGVjayBpZiBzZXJ2ZXIgaXMgc3RpbGwgYWxpdmVcbiAgICAgICAgICAgICAgICAgICAgICAgdXVpZCAgICA6ICcnLCAgICAgICAgICAgLy8gdXVpZCBtYXAgd2l0aCBjb29raWUgb3IgbG9uZyB0ZXJtIHNlc3Npb24gYWNjZXNzIGtleVxuICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiAgIDogJycgICAgICAgICAgICAvLyB3aWxsIGJlIHJldHVybmVkIGZyb20gYXV0aGVudGljYXRpb24gICAgXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG15Q29uZmlnO1xuICAgICAgICAgICAgfV0pXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIEZhY3RvcnkgaXMgYSBzaW5nbGV0b24gYW5kIHNoYXJlIGl0cyBjb250ZXh0IHdpdGhpbiBhbGwgaW5zdGFuY2VzLlxuICAgICAgICAgICAgLmZhY3RvcnkoJ0FwcENhbGwnLCBbXCIkaHR0cFwiLCBcIkFwcENvbmZpZ1wiLCBcIiRsb2dcIiwgZnVuY3Rpb24gKCRodHRwLCBBcHBDb25maWcsICRsb2cpIHtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB2YXIgbXlDYWxscyA9IHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0IDogZnVuY3Rpb24ocGx1Z2luLCBhY3Rpb24sIHF1ZXJ5LCBjYnJlc3BvbnNlLCBjYmVycm9yKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvbmVycm9yID0gZnVuY3Rpb24ocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2JlcnJvcikgY2JlcnJvcihyZXNwb25zZS5kYXRhLCByZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlLmNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBjYnJlc3BvbnNlKHJlc3BvbnNlLmRhdGEsIHJlc3BvbnNlLnN0YXR1cywgcmVzcG9uc2UuY29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvbnN1Y2Nlc3MgPWZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5kYXRhIHx8ICFyZXNwb25zZS5kYXRhLnJlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25lcnJvciAocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXF1ZXN0PXJlc3BvbnNlLmRhdGEucmVxdWVzdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0b2tlbiB3YXMgdXBkYXRlZCBrZWVwIGl0IHdpdGhpbiBhcHBsaWNhdGlvbiBjYWNoZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0LnRva2VuKSBBcHBDb25maWcuc2Vzc2lvbi50b2tlbiA9IHJlcXVlc3QudG9rZW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3QudXVpZCkgIEFwcENvbmZpZy5zZXNzaW9uLnV1aWQgID0gcmVxdWVzdC51dWlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0LnRpbWVvdXQpIEFwcENvbmZpZy5zZXNzaW9uLnRpbWVvdXQgPSByZXF1ZXN0LnRpbWVvdXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYnJlc3BvbnNlKHJlc3BvbnNlLmRhdGEsIHJlc3BvbnNlLnN0YXR1cywgcmVzcG9uc2UuY29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFxdWVyeS50b2tlbikgcXVlcnkudG9rZW4gPSBBcHBDb25maWcuc2Vzc2lvbi50b2tlbjsgLy8gYWRkIHRva2VuIHRvIHByb3ZpZGVkIHF1ZXJ5XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXF1ZXJ5LnJlcWlkKSBxdWVyeS5yZXFpZCA9IGFjdGlvbjsgLy8gdXNlIGFjdGlvbiBhcyBkZWZhdWx0IHJlcXVlc3RJRFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhbmRsZT0gJGh0dHAuZ2V0KCcvYXBpLycgKyBwbHVnaW4gKyAnLycgKyBhY3Rpb24gLCB7cGFyYW1zOiBxdWVyeX0pLnRoZW4ob25zdWNjZXNzLCBvbmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbXlDYWxscztcbiAgICAgICAgICAgIH1dKTtcblxufSkoKTsiLCIoZnVuY3Rpb24oKSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgXG4gIGZ1bmN0aW9uICBQYXJzZVF1ZXJ5U3RyaW5nICgpIHtcbiAgICAgIHZhciBxZCA9IHt9O1xuICAgICAgbG9jYXRpb24uc2VhcmNoLnN1YnN0cigxKS5zcGxpdChcIiZcIikuZm9yRWFjaChmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgICAgdmFyIGsgPSBpdGVtLnNwbGl0KFwiPVwiKVswXTtcbiAgICAgICAgICB2YXIgdiA9IGRlY29kZVVSSUNvbXBvbmVudChpdGVtLnNwbGl0KFwiPVwiKVsxXSk7IFxuICAgICAgICAgIGlmIChrIGluIHFkKSBxZFtrXS5wdXNoKHYpOyBlbHNlIHFkW2tdID0gW3ZdO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcWQ7XG4gIH1cblxuICBhbmd1bGFyLm1vZHVsZSgnQUZCY2xpZW50JywgWyAvLyBXYXJuaW5nOiBBcHBuYW1lIHNob3VsZCBmaXQgd2l0aCBndWxwZmlsZS5qcyAmIGluZGV4Lmh0bWxcbiAgICAndWkucm91dGVyJyxcbiAgICAnbmdBbmltYXRlJyxcblxuICAgIC8vZm91bmRhdGlvblxuICAgICdmb3VuZGF0aW9uJyxcbiAgICAnZm91bmRhdGlvbi5keW5hbWljUm91dGluZycsXG4gICAgJ2ZvdW5kYXRpb24uZHluYW1pY1JvdXRpbmcuYW5pbWF0aW9ucycsXG4gICAgXG4gICAgLy8gZXh0ZXJuYWwgY29tcG9uZW50c1xuICAgICd1aS1ub3RpZmljYXRpb24nLFxuICAgIFxuICAgIC8vIEFwcGxpY2F0aW9uIENvbXBvbmVudHNcbiAgICAnQXBwQ29uZmlnJyxcbiAgICAnSlF1ZXJ5RW11JyxcbiAgICAnU2FtcGxlSG9tZU1vZHVsZScsXG4gICAgJ1VwbG9hZEZpbGVzJyxcbiAgICAnTGlua0J1dHRvbicsXG4gICAgJ1Rva2VuUmVmcmVzaCcsXG4gICAgJ1JhbmdlU2xpZGVyJyxcbiAgICAnTW9kYWxOb3RpZmljYXRpb24nXG4gIF0pXG4gICAgLnZhbHVlICgndXJscXVlcnknLCBQYXJzZVF1ZXJ5U3RyaW5nKCkpXG4gICAgLmNvbmZpZyhjb25maWcpXG4gICAgLnJ1bihydW4pXG4gIDtcblxuICBjb25maWcuJGluamVjdCA9IFsnJHVybFJvdXRlclByb3ZpZGVyJywgJyRsb2NhdGlvblByb3ZpZGVyJ107XG4gIFxuICBmdW5jdGlvbiBjb25maWcoJHVybFByb3ZpZGVyLCAkbG9jYXRpb25Qcm92aWRlciwgQXBwQ29uZmlnKSB7XG4gICAgJHVybFByb3ZpZGVyLm90aGVyd2lzZSgnL3NhbXBsZS1ob21lJyk7XG5cbiAgICAvLyBodHRwczovL2RvY3MuYW5ndWxhcmpzLm9yZy9lcnJvci8kbG9jYXRpb24vbm9iYXNlXG4gICAgJGxvY2F0aW9uUHJvdmlkZXIuaHRtbDVNb2RlKHRydWUpLmhhc2hQcmVmaXgoJyEnKTtcbiAgICBcbiAgfVxuXG4gIGZ1bmN0aW9uIHJ1bigpIHtcbiAgICBGYXN0Q2xpY2suYXR0YWNoKGRvY3VtZW50LmJvZHkpO1xuICB9XG5cbmNvbnNvbGUubG9nIChcIm9wYT1BRkJjbGllbnQgTG9hZGVkXCIpO1xufSkoKTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ==
diff --git a/afb-client/dist.prod/opa/images/avatars/istoobig.jpg b/afb-client/dist.prod/opa/images/avatars/istoobig.jpg
new file mode 100644
index 0000000..da0f255
--- /dev/null
+++ b/afb-client/dist.prod/opa/images/avatars/istoobig.jpg
Binary files differ
diff --git a/afb-client/dist.prod/opa/images/avatars/istoobig.png b/afb-client/dist.prod/opa/images/avatars/istoobig.png
new file mode 100644
index 0000000..c3b794b
--- /dev/null
+++ b/afb-client/dist.prod/opa/images/avatars/istoobig.png
Binary files differ
diff --git a/afb-client/dist.prod/opa/images/avatars/tux-admin.png b/afb-client/dist.prod/opa/images/avatars/tux-admin.png
new file mode 100644
index 0000000..6ad950f
--- /dev/null
+++ b/afb-client/dist.prod/opa/images/avatars/tux-admin.png
Binary files differ
diff --git a/afb-client/dist.prod/opa/images/avatars/tux-bzh.png b/afb-client/dist.prod/opa/images/avatars/tux-bzh.png
new file mode 100644
index 0000000..e2cd262
--- /dev/null
+++ b/afb-client/dist.prod/opa/images/avatars/tux-bzh.png
Binary files differ
diff --git a/afb-client/dist.prod/opa/images/avatars/tux-visitor.png b/afb-client/dist.prod/opa/images/avatars/tux-visitor.png
new file mode 100644
index 0000000..0569822
--- /dev/null
+++ b/afb-client/dist.prod/opa/images/avatars/tux-visitor.png
Binary files differ
diff --git a/afb-client/dist.prod/opa/images/logo/logo_iot_bzh.svg b/afb-client/dist.prod/opa/images/logo/logo_iot_bzh.svg
new file mode 100644
index 0000000..e37a9f3
--- /dev/null
+++ b/afb-client/dist.prod/opa/images/logo/logo_iot_bzh.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="597.394" height="162.542"><defs><filter color-interpolation-filters="sRGB" id="a"><feFlood flood-opacity=".475" flood-color="#000" result="flood"/><feComposite in2="SourceGraphic" in="flood" operator="in" result="composite1"/><feGaussianBlur stdDeviation="5" result="blur"/><feOffset dx="8" dy="8" result="offset"/><feComposite in2="offset" in="SourceGraphic" result="composite2"/></filter></defs><g transform="translate(12.983 -409.02)" filter="url(#a)"><text y="519.507" x="27.887" style="line-height:125%" font-size="97.099" font-weight="400" letter-spacing="0" word-spacing="0" font-family="Sans"><tspan style="text-align:start;line-height:125%;-inkscape-font-specification:FreeEuro Bold" y="519.507" x="27.887" font-weight="700" font-family="FreeEuro">IOT</tspan></text><path d="M296.73 473.234c28.217 16.29 28.756 58.737.997 78.538-7.677 5.476-8.78 4.91-1.995-1.024 17.473-15.284 17.985-42.178 1.085-57.098l-3.913-3.454.723-3.71c.398-2.04.6-5.732.45-8.2-.34-5.548.157-6.493 2.653-5.052zm-64.766 11.403c7.06-7.742 18.647-14.16 29.04-16.09l6.876-1.274.874 2.897c.48 1.593.674 5.225.43 8.07l-.444 5.17-6.14 1.693c-10.91 3.007-20.4 10.86-25.452 21.06l-2.416 4.88-2.743-.413c-5.144-.773-12.73-3.976-12.792-5.4-.092-2.135 8.346-15.747 12.766-20.593zm33.206 36.395c-28.217 16.29-65.246-4.466-68.515-38.406-.904-9.386.137-10.058 1.885-1.216 4.5 22.775 27.534 36.664 48.905 29.49l4.948-1.663 2.852 2.482c1.568 1.364 4.663 3.384 6.878 4.488 4.972 2.48 5.543 3.383 3.047 4.824zm22.507-61.79c3.175 9.985 2.94 23.228-.587 33.193l-2.333 6.592-2.946-.692c-1.62-.38-4.86-2.028-7.202-3.662l-4.257-2.97 1.605-6.162c2.852-10.953.797-23.097-5.512-32.572l-3.017-4.533 1.728-2.17c3.24-4.066 9.81-9.035 11.072-8.376 1.895.986 9.464 15.1 11.45 21.35zm-48.802 10.314c0-32.582 36.49-54.272 67.518-40.133 8.58 3.91 8.642 5.148.11 2.24-21.973-7.49-45.52 5.514-49.99 27.61l-1.035 5.115-3.575 1.23c-1.967.675-5.263 2.345-7.327 3.71-4.634 3.067-5.7 3.11-5.7.228zm42.258 50.387c-10.235-2.244-21.587-9.068-28.453-17.105l-4.542-5.317 2.072-2.204c1.14-1.213 4.187-3.196 6.773-4.407l4.7-2.203 4.535 4.47c8.06 7.947 19.606 12.24 30.965 11.514l5.434-.347 1.015 2.582c1.9 4.84 2.92 13.013 1.72 13.778-1.804 1.147-17.81.644-24.22-.76z" fill="#5a2ca0"/><text y="519.507" x="317.958" style="line-height:125%" font-size="97.099" font-weight="400" letter-spacing="0" word-spacing="0" font-family="Sans"><tspan style="text-align:start;line-height:125%;-inkscape-font-specification:FreeEuro Bold" y="519.507" x="317.958" font-weight="700" font-family="FreeEuro">BZH</tspan></text></g><path fill="none" d="M10.126 0H587.27v162.542H10.125z"/></svg> \ No newline at end of file
diff --git a/afb-client/dist.prod/opa/images/logo/logo_iot_bzhx350.png b/afb-client/dist.prod/opa/images/logo/logo_iot_bzhx350.png
new file mode 100644
index 0000000..2bee568
--- /dev/null
+++ b/afb-client/dist.prod/opa/images/logo/logo_iot_bzhx350.png
Binary files differ
diff --git a/afb-client/dist.prod/opa/images/logo/tampon-iot-bzhx450.png b/afb-client/dist.prod/opa/images/logo/tampon-iot-bzhx450.png
new file mode 100644
index 0000000..44e04e5
--- /dev/null
+++ b/afb-client/dist.prod/opa/images/logo/tampon-iot-bzhx450.png
Binary files differ
diff --git a/afb-client/dist.prod/opa/images/logo/triskel_iot_bzh.png b/afb-client/dist.prod/opa/images/logo/triskel_iot_bzh.png
new file mode 100644
index 0000000..a921f1b
--- /dev/null
+++ b/afb-client/dist.prod/opa/images/logo/triskel_iot_bzh.png
Binary files differ
diff --git a/afb-client/dist.prod/opa/images/logo/triskel_iot_bzh.svg b/afb-client/dist.prod/opa/images/logo/triskel_iot_bzh.svg
new file mode 100644
index 0000000..9ec086c
--- /dev/null
+++ b/afb-client/dist.prod/opa/images/logo/triskel_iot_bzh.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="205.714" height="197.143"><defs><filter color-interpolation-filters="sRGB" id="a"><feFlood flood-opacity=".475" flood-color="#000" result="flood"/><feComposite in2="SourceGraphic" in="flood" operator="in" result="composite1"/><feGaussianBlur stdDeviation="5" result="blur"/><feOffset dx="8" dy="8" result="offset"/><feComposite in2="offset" in="SourceGraphic" result="composite2"/></filter></defs><path d="M470.886 595.304c28.217 16.29 28.755 58.738.997 78.538-7.677 5.476-8.78 4.91-1.996-1.023 17.474-15.286 17.985-42.18 1.086-57.1l-3.913-3.454.723-3.71c.398-2.04.6-5.73.45-8.2-.34-5.547.157-6.493 2.653-5.052zm-64.766 11.403c7.06-7.742 18.647-14.16 29.04-16.088l6.875-1.277.874 2.898c.48 1.594.674 5.225.43 8.07l-.444 5.172-6.14 1.69c-10.91 3.01-20.4 10.86-25.452 21.06l-2.417 4.88-2.742-.41c-5.143-.775-12.73-3.978-12.792-5.402-.092-2.134 8.347-15.746 12.767-20.593zm33.205 36.395c-28.216 16.29-65.246-4.465-68.514-38.405-.903-9.387.138-10.06 1.885-1.216 4.5 22.776 27.535 36.665 48.906 29.49l4.95-1.662 2.85 2.48c1.57 1.366 4.664 3.386 6.878 4.49 4.973 2.48 5.543 3.383 3.047 4.824zm22.508-61.79c3.174 9.986 2.94 23.23-.587 33.194l-2.333 6.59-2.946-.69c-1.62-.38-4.862-2.028-7.203-3.662l-4.258-2.97 1.605-6.163c2.852-10.953.798-23.097-5.51-32.572l-3.02-4.532 1.73-2.17c3.24-4.066 9.808-9.035 11.072-8.377 1.895.987 9.463 15.1 11.45 21.352zm-48.802 10.314c0-32.582 36.49-54.272 67.518-40.132 8.58 3.91 8.642 5.148.11 2.24-21.972-7.49-45.518 5.513-49.99 27.61l-1.035 5.114-3.575 1.23c-1.966.675-5.263 2.346-7.326 3.71-4.634 3.068-5.7 3.11-5.7.228zm42.26 50.387c-10.236-2.243-21.588-9.068-28.454-17.105l-4.542-5.316 2.072-2.206c1.14-1.213 4.187-3.196 6.772-4.407l4.7-2.203 4.536 4.47c8.06 7.948 19.605 12.24 30.965 11.514l5.433-.346 1.014 2.582c1.902 4.84 2.922 13.012 1.72 13.777-1.803 1.147-17.81.645-24.218-.76z" fill="#5a2ca0" filter="url(#a)" transform="translate(-328.57 -513.79)"/><path fill="none" d="M0 0h205.715v197.144H0z"/></svg> \ No newline at end of file
diff --git a/afb-client/dist.prod/opa/images/logo/triskel_iot_bzhx250.png b/afb-client/dist.prod/opa/images/logo/triskel_iot_bzhx250.png
new file mode 100644
index 0000000..b7c7db1
--- /dev/null
+++ b/afb-client/dist.prod/opa/images/logo/triskel_iot_bzhx250.png
Binary files differ
diff --git a/afb-client/dist.prod/opa/index.html b/afb-client/dist.prod/opa/index.html
new file mode 100644
index 0000000..6727a95
--- /dev/null
+++ b/afb-client/dist.prod/opa/index.html
@@ -0,0 +1,3 @@
+<!DOCTYPE html><!--[if lt IE 7]><html lang="en" ng-app="AFBclient" class="no-js lt-ie9 lt-ie8 lt-ie7"><![endif]--><!--[if IE 7]><html lang="en" ng-app="AFBclient" class="no-js lt-ie9 lt-ie8"><![endif]--><!--[if IE 8]><html lang="en" ng-app="AFBclient" class="no-js lt-ie9"><![endif]--><!--[if gt IE 8]><!--><html lang="en" ng-app="AFBclient" class="no-js"><!--<![endif]--><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><title>Simple Sample Application</title><meta name="description" content=""><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="stylesheet" href="/global_styles/ibz-global.min.css"><link rel="stylesheet" href="/global_styles/foundation-conf.min.css"><link rel="stylesheet" href="AFBclient.min.css"><base href="/opa/"></head><body><!--[if lt IE 7]><p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p><![endif]--><div ui-view></div><script src="/bower_components/vendor.min.js"></script><script src="AFBclient.min.js"></script><script id="components/modal/modal.html" type="text/ng-template"><div class="modal-overlay" ng-click="hideOverlay()">
+ <aside class="modal" ng-click="$event.stopPropagation();" ng-transclude></aside>
+ </div></script></body></html> \ No newline at end of file