From 0228b45e1570260d7dac4722b25b75a59177350c Mon Sep 17 00:00:00 2001 From: Eric Defore Date: Wed, 31 Aug 2022 11:15:41 -0400 Subject: [PATCH] v1.6.0 --- assets/dist/css/rbm-fh-select2.css | 2 -- assets/dist/css/rbm-fh-select2.css.map | 1 - assets/dist/css/rbm-fh-select2.min.css | 2 -- assets/dist/css/rbm-fh-select2.min.css.map | 1 - assets/dist/css/rbm-field-helpers-admin.css | 2 -- assets/dist/css/rbm-field-helpers-admin.css.map | 1 - assets/dist/css/rbm-field-helpers-admin.min.css | 2 -- assets/dist/css/rbm-field-helpers-admin.min.css.map | 1 - assets/dist/js/rbm-field-helpers-admin.js | 3 +-- assets/dist/js/rbm-field-helpers-admin.js.map | 1 - assets/dist/js/rbm-field-helpers-admin.min.js | 3 +-- assets/dist/js/rbm-field-helpers-admin.min.js.map | 1 - package-lock.json | 2 +- package.json | 2 +- rbm-field-helpers.php | 2 +- 15 files changed, 5 insertions(+), 21 deletions(-) delete mode 100644 assets/dist/css/rbm-fh-select2.css.map delete mode 100644 assets/dist/css/rbm-fh-select2.min.css.map delete mode 100644 assets/dist/css/rbm-field-helpers-admin.css.map delete mode 100644 assets/dist/css/rbm-field-helpers-admin.min.css.map delete mode 100644 assets/dist/js/rbm-field-helpers-admin.js.map delete mode 100644 assets/dist/js/rbm-field-helpers-admin.min.js.map diff --git a/assets/dist/css/rbm-fh-select2.css b/assets/dist/css/rbm-fh-select2.css index 8d9bc58..a681f1e 100644 --- a/assets/dist/css/rbm-fh-select2.css +++ b/assets/dist/css/rbm-fh-select2.css @@ -539,5 +539,3 @@ .select2-container--classic.select2-container--open .select2-dropdown { border-color: #5897fb; } - -/*# sourceMappingURL=rbm-fh-select2.css.map */ diff --git a/assets/dist/css/rbm-fh-select2.css.map b/assets/dist/css/rbm-fh-select2.css.map deleted file mode 100644 index edc6596..0000000 --- a/assets/dist/css/rbm-fh-select2.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../../../node_modules/select2/dist/css/select2.css"],"names":[],"mappings":"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","file":"rbm-fh-select2.css","sourcesContent":[".select2-container {\n box-sizing: border-box;\n display: inline-block;\n margin: 0;\n position: relative;\n vertical-align: middle; }\n .select2-container .select2-selection--single {\n box-sizing: border-box;\n cursor: pointer;\n display: block;\n height: 28px;\n user-select: none;\n -webkit-user-select: none; }\n .select2-container .select2-selection--single .select2-selection__rendered {\n display: block;\n padding-left: 8px;\n padding-right: 20px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap; }\n .select2-container .select2-selection--single .select2-selection__clear {\n position: relative; }\n .select2-container[dir=\"rtl\"] .select2-selection--single .select2-selection__rendered {\n padding-right: 8px;\n padding-left: 20px; }\n .select2-container .select2-selection--multiple {\n box-sizing: border-box;\n cursor: pointer;\n display: block;\n min-height: 32px;\n user-select: none;\n -webkit-user-select: none; }\n .select2-container .select2-selection--multiple .select2-selection__rendered {\n display: inline-block;\n overflow: hidden;\n padding-left: 8px;\n text-overflow: ellipsis;\n white-space: nowrap; }\n .select2-container .select2-search--inline {\n float: left; }\n .select2-container .select2-search--inline .select2-search__field {\n box-sizing: border-box;\n border: none;\n font-size: 100%;\n margin-top: 5px;\n padding: 0; }\n .select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button {\n -webkit-appearance: none; }\n\n.select2-dropdown {\n background-color: white;\n border: 1px solid #aaa;\n border-radius: 4px;\n box-sizing: border-box;\n display: block;\n position: absolute;\n left: -100000px;\n width: 100%;\n z-index: 1051; }\n\n.select2-results {\n display: block; }\n\n.select2-results__options {\n list-style: none;\n margin: 0;\n padding: 0; }\n\n.select2-results__option {\n padding: 6px;\n user-select: none;\n -webkit-user-select: none; }\n .select2-results__option[aria-selected] {\n cursor: pointer; }\n\n.select2-container--open .select2-dropdown {\n left: 0; }\n\n.select2-container--open .select2-dropdown--above {\n border-bottom: none;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0; }\n\n.select2-container--open .select2-dropdown--below {\n border-top: none;\n border-top-left-radius: 0;\n border-top-right-radius: 0; }\n\n.select2-search--dropdown {\n display: block;\n padding: 4px; }\n .select2-search--dropdown .select2-search__field {\n padding: 4px;\n width: 100%;\n box-sizing: border-box; }\n .select2-search--dropdown .select2-search__field::-webkit-search-cancel-button {\n -webkit-appearance: none; }\n .select2-search--dropdown.select2-search--hide {\n display: none; }\n\n.select2-close-mask {\n border: 0;\n margin: 0;\n padding: 0;\n display: block;\n position: fixed;\n left: 0;\n top: 0;\n min-height: 100%;\n min-width: 100%;\n height: auto;\n width: auto;\n opacity: 0;\n z-index: 99;\n background-color: #fff;\n filter: alpha(opacity=0); }\n\n.select2-hidden-accessible {\n border: 0 !important;\n clip: rect(0 0 0 0) !important;\n height: 1px !important;\n margin: -1px !important;\n overflow: hidden !important;\n padding: 0 !important;\n position: absolute !important;\n width: 1px !important; }\n\n.select2-container--default .select2-selection--single {\n background-color: #fff;\n border: 1px solid #aaa;\n border-radius: 4px; }\n .select2-container--default .select2-selection--single .select2-selection__rendered {\n color: #444;\n line-height: 28px; }\n .select2-container--default .select2-selection--single .select2-selection__clear {\n cursor: pointer;\n float: right;\n font-weight: bold; }\n .select2-container--default .select2-selection--single .select2-selection__placeholder {\n color: #999; }\n .select2-container--default .select2-selection--single .select2-selection__arrow {\n height: 26px;\n position: absolute;\n top: 1px;\n right: 1px;\n width: 20px; }\n .select2-container--default .select2-selection--single .select2-selection__arrow b {\n border-color: #888 transparent transparent transparent;\n border-style: solid;\n border-width: 5px 4px 0 4px;\n height: 0;\n left: 50%;\n margin-left: -4px;\n margin-top: -2px;\n position: absolute;\n top: 50%;\n width: 0; }\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--single .select2-selection__clear {\n float: left; }\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--single .select2-selection__arrow {\n left: 1px;\n right: auto; }\n\n.select2-container--default.select2-container--disabled .select2-selection--single {\n background-color: #eee;\n cursor: default; }\n .select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear {\n display: none; }\n\n.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b {\n border-color: transparent transparent #888 transparent;\n border-width: 0 4px 5px 4px; }\n\n.select2-container--default .select2-selection--multiple {\n background-color: white;\n border: 1px solid #aaa;\n border-radius: 4px;\n cursor: text; }\n .select2-container--default .select2-selection--multiple .select2-selection__rendered {\n box-sizing: border-box;\n list-style: none;\n margin: 0;\n padding: 0 5px;\n width: 100%; }\n .select2-container--default .select2-selection--multiple .select2-selection__rendered li {\n list-style: none; }\n .select2-container--default .select2-selection--multiple .select2-selection__placeholder {\n color: #999;\n margin-top: 5px;\n float: left; }\n .select2-container--default .select2-selection--multiple .select2-selection__clear {\n cursor: pointer;\n float: right;\n font-weight: bold;\n margin-top: 5px;\n margin-right: 10px; }\n .select2-container--default .select2-selection--multiple .select2-selection__choice {\n background-color: #e4e4e4;\n border: 1px solid #aaa;\n border-radius: 4px;\n cursor: default;\n float: left;\n margin-right: 5px;\n margin-top: 5px;\n padding: 0 5px; }\n .select2-container--default .select2-selection--multiple .select2-selection__choice__remove {\n color: #999;\n cursor: pointer;\n display: inline-block;\n font-weight: bold;\n margin-right: 2px; }\n .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover {\n color: #333; }\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice, .select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-selection__placeholder, .select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-search--inline {\n float: right; }\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice {\n margin-left: 5px;\n margin-right: auto; }\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice__remove {\n margin-left: 2px;\n margin-right: auto; }\n\n.select2-container--default.select2-container--focus .select2-selection--multiple {\n border: solid black 1px;\n outline: 0; }\n\n.select2-container--default.select2-container--disabled .select2-selection--multiple {\n background-color: #eee;\n cursor: default; }\n\n.select2-container--default.select2-container--disabled .select2-selection__choice__remove {\n display: none; }\n\n.select2-container--default.select2-container--open.select2-container--above .select2-selection--single, .select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple {\n border-top-left-radius: 0;\n border-top-right-radius: 0; }\n\n.select2-container--default.select2-container--open.select2-container--below .select2-selection--single, .select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0; }\n\n.select2-container--default .select2-search--dropdown .select2-search__field {\n border: 1px solid #aaa; }\n\n.select2-container--default .select2-search--inline .select2-search__field {\n background: transparent;\n border: none;\n outline: 0;\n box-shadow: none;\n -webkit-appearance: textfield; }\n\n.select2-container--default .select2-results > .select2-results__options {\n max-height: 200px;\n overflow-y: auto; }\n\n.select2-container--default .select2-results__option[role=group] {\n padding: 0; }\n\n.select2-container--default .select2-results__option[aria-disabled=true] {\n color: #999; }\n\n.select2-container--default .select2-results__option[aria-selected=true] {\n background-color: #ddd; }\n\n.select2-container--default .select2-results__option .select2-results__option {\n padding-left: 1em; }\n .select2-container--default .select2-results__option .select2-results__option .select2-results__group {\n padding-left: 0; }\n .select2-container--default .select2-results__option .select2-results__option .select2-results__option {\n margin-left: -1em;\n padding-left: 2em; }\n .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option {\n margin-left: -2em;\n padding-left: 3em; }\n .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {\n margin-left: -3em;\n padding-left: 4em; }\n .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {\n margin-left: -4em;\n padding-left: 5em; }\n .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {\n margin-left: -5em;\n padding-left: 6em; }\n\n.select2-container--default .select2-results__option--highlighted[aria-selected] {\n background-color: #5897fb;\n color: white; }\n\n.select2-container--default .select2-results__group {\n cursor: default;\n display: block;\n padding: 6px; }\n\n.select2-container--classic .select2-selection--single {\n background-color: #f7f7f7;\n border: 1px solid #aaa;\n border-radius: 4px;\n outline: 0;\n background-image: -webkit-linear-gradient(top, white 50%, #eeeeee 100%);\n background-image: -o-linear-gradient(top, white 50%, #eeeeee 100%);\n background-image: linear-gradient(to bottom, white 50%, #eeeeee 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); }\n .select2-container--classic .select2-selection--single:focus {\n border: 1px solid #5897fb; }\n .select2-container--classic .select2-selection--single .select2-selection__rendered {\n color: #444;\n line-height: 28px; }\n .select2-container--classic .select2-selection--single .select2-selection__clear {\n cursor: pointer;\n float: right;\n font-weight: bold;\n margin-right: 10px; }\n .select2-container--classic .select2-selection--single .select2-selection__placeholder {\n color: #999; }\n .select2-container--classic .select2-selection--single .select2-selection__arrow {\n background-color: #ddd;\n border: none;\n border-left: 1px solid #aaa;\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px;\n height: 26px;\n position: absolute;\n top: 1px;\n right: 1px;\n width: 20px;\n background-image: -webkit-linear-gradient(top, #eeeeee 50%, #cccccc 100%);\n background-image: -o-linear-gradient(top, #eeeeee 50%, #cccccc 100%);\n background-image: linear-gradient(to bottom, #eeeeee 50%, #cccccc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0); }\n .select2-container--classic .select2-selection--single .select2-selection__arrow b {\n border-color: #888 transparent transparent transparent;\n border-style: solid;\n border-width: 5px 4px 0 4px;\n height: 0;\n left: 50%;\n margin-left: -4px;\n margin-top: -2px;\n position: absolute;\n top: 50%;\n width: 0; }\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--single .select2-selection__clear {\n float: left; }\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--single .select2-selection__arrow {\n border: none;\n border-right: 1px solid #aaa;\n border-radius: 0;\n border-top-left-radius: 4px;\n border-bottom-left-radius: 4px;\n left: 1px;\n right: auto; }\n\n.select2-container--classic.select2-container--open .select2-selection--single {\n border: 1px solid #5897fb; }\n .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow {\n background: transparent;\n border: none; }\n .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b {\n border-color: transparent transparent #888 transparent;\n border-width: 0 4px 5px 4px; }\n\n.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single {\n border-top: none;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n background-image: -webkit-linear-gradient(top, white 0%, #eeeeee 50%);\n background-image: -o-linear-gradient(top, white 0%, #eeeeee 50%);\n background-image: linear-gradient(to bottom, white 0%, #eeeeee 50%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); }\n\n.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single {\n border-bottom: none;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n background-image: -webkit-linear-gradient(top, #eeeeee 50%, white 100%);\n background-image: -o-linear-gradient(top, #eeeeee 50%, white 100%);\n background-image: linear-gradient(to bottom, #eeeeee 50%, white 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0); }\n\n.select2-container--classic .select2-selection--multiple {\n background-color: white;\n border: 1px solid #aaa;\n border-radius: 4px;\n cursor: text;\n outline: 0; }\n .select2-container--classic .select2-selection--multiple:focus {\n border: 1px solid #5897fb; }\n .select2-container--classic .select2-selection--multiple .select2-selection__rendered {\n list-style: none;\n margin: 0;\n padding: 0 5px; }\n .select2-container--classic .select2-selection--multiple .select2-selection__clear {\n display: none; }\n .select2-container--classic .select2-selection--multiple .select2-selection__choice {\n background-color: #e4e4e4;\n border: 1px solid #aaa;\n border-radius: 4px;\n cursor: default;\n float: left;\n margin-right: 5px;\n margin-top: 5px;\n padding: 0 5px; }\n .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove {\n color: #888;\n cursor: pointer;\n display: inline-block;\n font-weight: bold;\n margin-right: 2px; }\n .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover {\n color: #555; }\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice {\n float: right; }\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice {\n margin-left: 5px;\n margin-right: auto; }\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice__remove {\n margin-left: 2px;\n margin-right: auto; }\n\n.select2-container--classic.select2-container--open .select2-selection--multiple {\n border: 1px solid #5897fb; }\n\n.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple {\n border-top: none;\n border-top-left-radius: 0;\n border-top-right-radius: 0; }\n\n.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple {\n border-bottom: none;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0; }\n\n.select2-container--classic .select2-search--dropdown .select2-search__field {\n border: 1px solid #aaa;\n outline: 0; }\n\n.select2-container--classic .select2-search--inline .select2-search__field {\n outline: 0;\n box-shadow: none; }\n\n.select2-container--classic .select2-dropdown {\n background-color: white;\n border: 1px solid transparent; }\n\n.select2-container--classic .select2-dropdown--above {\n border-bottom: none; }\n\n.select2-container--classic .select2-dropdown--below {\n border-top: none; }\n\n.select2-container--classic .select2-results > .select2-results__options {\n max-height: 200px;\n overflow-y: auto; }\n\n.select2-container--classic .select2-results__option[role=group] {\n padding: 0; }\n\n.select2-container--classic .select2-results__option[aria-disabled=true] {\n color: grey; }\n\n.select2-container--classic .select2-results__option--highlighted[aria-selected] {\n background-color: #3875d7;\n color: white; }\n\n.select2-container--classic .select2-results__group {\n cursor: default;\n display: block;\n padding: 6px; }\n\n.select2-container--classic.select2-container--open .select2-dropdown {\n border-color: #5897fb; }\n"]} \ No newline at end of file diff --git a/assets/dist/css/rbm-fh-select2.min.css b/assets/dist/css/rbm-fh-select2.min.css index 3484516..5886fc3 100644 --- a/assets/dist/css/rbm-fh-select2.min.css +++ b/assets/dist/css/rbm-fh-select2.min.css @@ -1,3 +1 @@ .select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;height:1px !important;margin:-1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:#999;margin-top:5px;float:left}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid black 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, white 50%, #eee 100%);background-image:-o-linear-gradient(top, white 50%, #eee 100%);background-image:linear-gradient(to bottom, white 50%, #eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eee 50%, #ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, white 0%, #eee 50%);background-image:-o-linear-gradient(top, white 0%, #eee 50%);background-image:linear-gradient(to bottom, white 0%, #eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, white 100%);background-image:-o-linear-gradient(top, #eee 50%, white 100%);background-image:linear-gradient(to bottom, #eee 50%, white 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{float:right}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:white;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:white}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb} - -/*# sourceMappingURL=rbm-fh-select2.min.css.map */ diff --git a/assets/dist/css/rbm-fh-select2.min.css.map b/assets/dist/css/rbm-fh-select2.min.css.map deleted file mode 100644 index 00491f7..0000000 --- a/assets/dist/css/rbm-fh-select2.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"rbm-fh-select2.min.css","sources":["rbm-fh-select2.scss","../../../../node_modules/select2/dist/css/select2.css"],"sourcesContent":["// Just grab the pre-compiled CSS\n@import \"select2\";",".select2-container {\n box-sizing: border-box;\n display: inline-block;\n margin: 0;\n position: relative;\n vertical-align: middle; }\n .select2-container .select2-selection--single {\n box-sizing: border-box;\n cursor: pointer;\n display: block;\n height: 28px;\n user-select: none;\n -webkit-user-select: none; }\n .select2-container .select2-selection--single .select2-selection__rendered {\n display: block;\n padding-left: 8px;\n padding-right: 20px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap; }\n .select2-container .select2-selection--single .select2-selection__clear {\n position: relative; }\n .select2-container[dir=\"rtl\"] .select2-selection--single .select2-selection__rendered {\n padding-right: 8px;\n padding-left: 20px; }\n .select2-container .select2-selection--multiple {\n box-sizing: border-box;\n cursor: pointer;\n display: block;\n min-height: 32px;\n user-select: none;\n -webkit-user-select: none; }\n .select2-container .select2-selection--multiple .select2-selection__rendered {\n display: inline-block;\n overflow: hidden;\n padding-left: 8px;\n text-overflow: ellipsis;\n white-space: nowrap; }\n .select2-container .select2-search--inline {\n float: left; }\n .select2-container .select2-search--inline .select2-search__field {\n box-sizing: border-box;\n border: none;\n font-size: 100%;\n margin-top: 5px;\n padding: 0; }\n .select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button {\n -webkit-appearance: none; }\n\n.select2-dropdown {\n background-color: white;\n border: 1px solid #aaa;\n border-radius: 4px;\n box-sizing: border-box;\n display: block;\n position: absolute;\n left: -100000px;\n width: 100%;\n z-index: 1051; }\n\n.select2-results {\n display: block; }\n\n.select2-results__options {\n list-style: none;\n margin: 0;\n padding: 0; }\n\n.select2-results__option {\n padding: 6px;\n user-select: none;\n -webkit-user-select: none; }\n .select2-results__option[aria-selected] {\n cursor: pointer; }\n\n.select2-container--open .select2-dropdown {\n left: 0; }\n\n.select2-container--open .select2-dropdown--above {\n border-bottom: none;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0; }\n\n.select2-container--open .select2-dropdown--below {\n border-top: none;\n border-top-left-radius: 0;\n border-top-right-radius: 0; }\n\n.select2-search--dropdown {\n display: block;\n padding: 4px; }\n .select2-search--dropdown .select2-search__field {\n padding: 4px;\n width: 100%;\n box-sizing: border-box; }\n .select2-search--dropdown .select2-search__field::-webkit-search-cancel-button {\n -webkit-appearance: none; }\n .select2-search--dropdown.select2-search--hide {\n display: none; }\n\n.select2-close-mask {\n border: 0;\n margin: 0;\n padding: 0;\n display: block;\n position: fixed;\n left: 0;\n top: 0;\n min-height: 100%;\n min-width: 100%;\n height: auto;\n width: auto;\n opacity: 0;\n z-index: 99;\n background-color: #fff;\n filter: alpha(opacity=0); }\n\n.select2-hidden-accessible {\n border: 0 !important;\n clip: rect(0 0 0 0) !important;\n height: 1px !important;\n margin: -1px !important;\n overflow: hidden !important;\n padding: 0 !important;\n position: absolute !important;\n width: 1px !important; }\n\n.select2-container--default .select2-selection--single {\n background-color: #fff;\n border: 1px solid #aaa;\n border-radius: 4px; }\n .select2-container--default .select2-selection--single .select2-selection__rendered {\n color: #444;\n line-height: 28px; }\n .select2-container--default .select2-selection--single .select2-selection__clear {\n cursor: pointer;\n float: right;\n font-weight: bold; }\n .select2-container--default .select2-selection--single .select2-selection__placeholder {\n color: #999; }\n .select2-container--default .select2-selection--single .select2-selection__arrow {\n height: 26px;\n position: absolute;\n top: 1px;\n right: 1px;\n width: 20px; }\n .select2-container--default .select2-selection--single .select2-selection__arrow b {\n border-color: #888 transparent transparent transparent;\n border-style: solid;\n border-width: 5px 4px 0 4px;\n height: 0;\n left: 50%;\n margin-left: -4px;\n margin-top: -2px;\n position: absolute;\n top: 50%;\n width: 0; }\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--single .select2-selection__clear {\n float: left; }\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--single .select2-selection__arrow {\n left: 1px;\n right: auto; }\n\n.select2-container--default.select2-container--disabled .select2-selection--single {\n background-color: #eee;\n cursor: default; }\n .select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear {\n display: none; }\n\n.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b {\n border-color: transparent transparent #888 transparent;\n border-width: 0 4px 5px 4px; }\n\n.select2-container--default .select2-selection--multiple {\n background-color: white;\n border: 1px solid #aaa;\n border-radius: 4px;\n cursor: text; }\n .select2-container--default .select2-selection--multiple .select2-selection__rendered {\n box-sizing: border-box;\n list-style: none;\n margin: 0;\n padding: 0 5px;\n width: 100%; }\n .select2-container--default .select2-selection--multiple .select2-selection__rendered li {\n list-style: none; }\n .select2-container--default .select2-selection--multiple .select2-selection__placeholder {\n color: #999;\n margin-top: 5px;\n float: left; }\n .select2-container--default .select2-selection--multiple .select2-selection__clear {\n cursor: pointer;\n float: right;\n font-weight: bold;\n margin-top: 5px;\n margin-right: 10px; }\n .select2-container--default .select2-selection--multiple .select2-selection__choice {\n background-color: #e4e4e4;\n border: 1px solid #aaa;\n border-radius: 4px;\n cursor: default;\n float: left;\n margin-right: 5px;\n margin-top: 5px;\n padding: 0 5px; }\n .select2-container--default .select2-selection--multiple .select2-selection__choice__remove {\n color: #999;\n cursor: pointer;\n display: inline-block;\n font-weight: bold;\n margin-right: 2px; }\n .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover {\n color: #333; }\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice, .select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-selection__placeholder, .select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-search--inline {\n float: right; }\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice {\n margin-left: 5px;\n margin-right: auto; }\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice__remove {\n margin-left: 2px;\n margin-right: auto; }\n\n.select2-container--default.select2-container--focus .select2-selection--multiple {\n border: solid black 1px;\n outline: 0; }\n\n.select2-container--default.select2-container--disabled .select2-selection--multiple {\n background-color: #eee;\n cursor: default; }\n\n.select2-container--default.select2-container--disabled .select2-selection__choice__remove {\n display: none; }\n\n.select2-container--default.select2-container--open.select2-container--above .select2-selection--single, .select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple {\n border-top-left-radius: 0;\n border-top-right-radius: 0; }\n\n.select2-container--default.select2-container--open.select2-container--below .select2-selection--single, .select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0; }\n\n.select2-container--default .select2-search--dropdown .select2-search__field {\n border: 1px solid #aaa; }\n\n.select2-container--default .select2-search--inline .select2-search__field {\n background: transparent;\n border: none;\n outline: 0;\n box-shadow: none;\n -webkit-appearance: textfield; }\n\n.select2-container--default .select2-results > .select2-results__options {\n max-height: 200px;\n overflow-y: auto; }\n\n.select2-container--default .select2-results__option[role=group] {\n padding: 0; }\n\n.select2-container--default .select2-results__option[aria-disabled=true] {\n color: #999; }\n\n.select2-container--default .select2-results__option[aria-selected=true] {\n background-color: #ddd; }\n\n.select2-container--default .select2-results__option .select2-results__option {\n padding-left: 1em; }\n .select2-container--default .select2-results__option .select2-results__option .select2-results__group {\n padding-left: 0; }\n .select2-container--default .select2-results__option .select2-results__option .select2-results__option {\n margin-left: -1em;\n padding-left: 2em; }\n .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option {\n margin-left: -2em;\n padding-left: 3em; }\n .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {\n margin-left: -3em;\n padding-left: 4em; }\n .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {\n margin-left: -4em;\n padding-left: 5em; }\n .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {\n margin-left: -5em;\n padding-left: 6em; }\n\n.select2-container--default .select2-results__option--highlighted[aria-selected] {\n background-color: #5897fb;\n color: white; }\n\n.select2-container--default .select2-results__group {\n cursor: default;\n display: block;\n padding: 6px; }\n\n.select2-container--classic .select2-selection--single {\n background-color: #f7f7f7;\n border: 1px solid #aaa;\n border-radius: 4px;\n outline: 0;\n background-image: -webkit-linear-gradient(top, white 50%, #eeeeee 100%);\n background-image: -o-linear-gradient(top, white 50%, #eeeeee 100%);\n background-image: linear-gradient(to bottom, white 50%, #eeeeee 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); }\n .select2-container--classic .select2-selection--single:focus {\n border: 1px solid #5897fb; }\n .select2-container--classic .select2-selection--single .select2-selection__rendered {\n color: #444;\n line-height: 28px; }\n .select2-container--classic .select2-selection--single .select2-selection__clear {\n cursor: pointer;\n float: right;\n font-weight: bold;\n margin-right: 10px; }\n .select2-container--classic .select2-selection--single .select2-selection__placeholder {\n color: #999; }\n .select2-container--classic .select2-selection--single .select2-selection__arrow {\n background-color: #ddd;\n border: none;\n border-left: 1px solid #aaa;\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px;\n height: 26px;\n position: absolute;\n top: 1px;\n right: 1px;\n width: 20px;\n background-image: -webkit-linear-gradient(top, #eeeeee 50%, #cccccc 100%);\n background-image: -o-linear-gradient(top, #eeeeee 50%, #cccccc 100%);\n background-image: linear-gradient(to bottom, #eeeeee 50%, #cccccc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0); }\n .select2-container--classic .select2-selection--single .select2-selection__arrow b {\n border-color: #888 transparent transparent transparent;\n border-style: solid;\n border-width: 5px 4px 0 4px;\n height: 0;\n left: 50%;\n margin-left: -4px;\n margin-top: -2px;\n position: absolute;\n top: 50%;\n width: 0; }\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--single .select2-selection__clear {\n float: left; }\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--single .select2-selection__arrow {\n border: none;\n border-right: 1px solid #aaa;\n border-radius: 0;\n border-top-left-radius: 4px;\n border-bottom-left-radius: 4px;\n left: 1px;\n right: auto; }\n\n.select2-container--classic.select2-container--open .select2-selection--single {\n border: 1px solid #5897fb; }\n .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow {\n background: transparent;\n border: none; }\n .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b {\n border-color: transparent transparent #888 transparent;\n border-width: 0 4px 5px 4px; }\n\n.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single {\n border-top: none;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n background-image: -webkit-linear-gradient(top, white 0%, #eeeeee 50%);\n background-image: -o-linear-gradient(top, white 0%, #eeeeee 50%);\n background-image: linear-gradient(to bottom, white 0%, #eeeeee 50%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); }\n\n.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single {\n border-bottom: none;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n background-image: -webkit-linear-gradient(top, #eeeeee 50%, white 100%);\n background-image: -o-linear-gradient(top, #eeeeee 50%, white 100%);\n background-image: linear-gradient(to bottom, #eeeeee 50%, white 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0); }\n\n.select2-container--classic .select2-selection--multiple {\n background-color: white;\n border: 1px solid #aaa;\n border-radius: 4px;\n cursor: text;\n outline: 0; }\n .select2-container--classic .select2-selection--multiple:focus {\n border: 1px solid #5897fb; }\n .select2-container--classic .select2-selection--multiple .select2-selection__rendered {\n list-style: none;\n margin: 0;\n padding: 0 5px; }\n .select2-container--classic .select2-selection--multiple .select2-selection__clear {\n display: none; }\n .select2-container--classic .select2-selection--multiple .select2-selection__choice {\n background-color: #e4e4e4;\n border: 1px solid #aaa;\n border-radius: 4px;\n cursor: default;\n float: left;\n margin-right: 5px;\n margin-top: 5px;\n padding: 0 5px; }\n .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove {\n color: #888;\n cursor: pointer;\n display: inline-block;\n font-weight: bold;\n margin-right: 2px; }\n .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover {\n color: #555; }\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice {\n float: right; }\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice {\n margin-left: 5px;\n margin-right: auto; }\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice__remove {\n margin-left: 2px;\n margin-right: auto; }\n\n.select2-container--classic.select2-container--open .select2-selection--multiple {\n border: 1px solid #5897fb; }\n\n.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple {\n border-top: none;\n border-top-left-radius: 0;\n border-top-right-radius: 0; }\n\n.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple {\n border-bottom: none;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0; }\n\n.select2-container--classic .select2-search--dropdown .select2-search__field {\n border: 1px solid #aaa;\n outline: 0; }\n\n.select2-container--classic .select2-search--inline .select2-search__field {\n outline: 0;\n box-shadow: none; }\n\n.select2-container--classic .select2-dropdown {\n background-color: white;\n border: 1px solid transparent; }\n\n.select2-container--classic .select2-dropdown--above {\n border-bottom: none; }\n\n.select2-container--classic .select2-dropdown--below {\n border-top: none; }\n\n.select2-container--classic .select2-results > .select2-results__options {\n max-height: 200px;\n overflow-y: auto; }\n\n.select2-container--classic .select2-results__option[role=group] {\n padding: 0; }\n\n.select2-container--classic .select2-results__option[aria-disabled=true] {\n color: grey; }\n\n.select2-container--classic .select2-results__option--highlighted[aria-selected] {\n background-color: #3875d7;\n color: white; }\n\n.select2-container--classic .select2-results__group {\n cursor: default;\n display: block;\n padding: 6px; }\n\n.select2-container--classic.select2-container--open .select2-dropdown {\n border-color: #5897fb; }\n"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/assets/dist/css/rbm-field-helpers-admin.css b/assets/dist/css/rbm-field-helpers-admin.css index 46c114d..102d107 100644 --- a/assets/dist/css/rbm-field-helpers-admin.css +++ b/assets/dist/css/rbm-field-helpers-admin.css @@ -1252,5 +1252,3 @@ input[readonly].fieldhelpers-field-timepicker-preview, input[readonly].fieldhelp .fieldhelpers-field-tip .fieldhelpers-field-tip-text a { color: inherit !important; text-decoration: underline; } - -/*# sourceMappingURL=rbm-field-helpers-admin.css.map */ diff --git a/assets/dist/css/rbm-field-helpers-admin.css.map b/assets/dist/css/rbm-field-helpers-admin.css.map deleted file mode 100644 index 9669228..0000000 --- a/assets/dist/css/rbm-field-helpers-admin.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../../../node_modules/flatpickr/dist/flatpickr.css","global/_common.scss","global/_layout.scss","fields/_field.scss","fields/_field-checkbox.scss","global/_settings.scss","fields/_field-colorpicker.scss","fields/_field-datetimepicker.scss","fields/_field-hidden.scss","fields/_field-list.scss","fields/_field-media.scss","fields/_field-number.scss","fields/_field-radio.scss","fields/_field-repeater.scss","fields/_field-select.scss","fields/_field-table.scss","fields/_field-toggle.scss","fields/_field-wysiwyg.scss","components/_field-tip.scss"],"names":[],"mappings":"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","file":"rbm-field-helpers-admin.css","sourcesContent":[".flatpickr-calendar {\n background: transparent;\n opacity: 0;\n display: none;\n text-align: center;\n visibility: hidden;\n padding: 0;\n -webkit-animation: none;\n animation: none;\n direction: ltr;\n border: 0;\n font-size: 14px;\n line-height: 24px;\n border-radius: 5px;\n position: absolute;\n width: 307.875px;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n -ms-touch-action: manipulation;\n touch-action: manipulation;\n background: #fff;\n -webkit-box-shadow: 1px 0 0 #e6e6e6, -1px 0 0 #e6e6e6, 0 1px 0 #e6e6e6, 0 -1px 0 #e6e6e6, 0 3px 13px rgba(0,0,0,0.08);\n box-shadow: 1px 0 0 #e6e6e6, -1px 0 0 #e6e6e6, 0 1px 0 #e6e6e6, 0 -1px 0 #e6e6e6, 0 3px 13px rgba(0,0,0,0.08);\n}\n.flatpickr-calendar.open,\n.flatpickr-calendar.inline {\n opacity: 1;\n max-height: 640px;\n visibility: visible;\n}\n.flatpickr-calendar.open {\n display: inline-block;\n z-index: 99999;\n}\n.flatpickr-calendar.animate.open {\n -webkit-animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1);\n animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1);\n}\n.flatpickr-calendar.inline {\n display: block;\n position: relative;\n top: 2px;\n}\n.flatpickr-calendar.static {\n position: absolute;\n top: calc(100% + 2px);\n}\n.flatpickr-calendar.static.open {\n z-index: 999;\n display: block;\n}\n.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7) {\n -webkit-box-shadow: none !important;\n box-shadow: none !important;\n}\n.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1) {\n -webkit-box-shadow: -2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;\n box-shadow: -2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;\n}\n.flatpickr-calendar .hasWeeks .dayContainer,\n.flatpickr-calendar .hasTime .dayContainer {\n border-bottom: 0;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.flatpickr-calendar .hasWeeks .dayContainer {\n border-left: 0;\n}\n.flatpickr-calendar.showTimeInput.hasTime .flatpickr-time {\n height: 40px;\n border-top: 1px solid #e6e6e6;\n}\n.flatpickr-calendar.noCalendar.hasTime .flatpickr-time {\n height: auto;\n}\n.flatpickr-calendar:before,\n.flatpickr-calendar:after {\n position: absolute;\n display: block;\n pointer-events: none;\n border: solid transparent;\n content: '';\n height: 0;\n width: 0;\n left: 22px;\n}\n.flatpickr-calendar.rightMost:before,\n.flatpickr-calendar.rightMost:after {\n left: auto;\n right: 22px;\n}\n.flatpickr-calendar:before {\n border-width: 5px;\n margin: 0 -5px;\n}\n.flatpickr-calendar:after {\n border-width: 4px;\n margin: 0 -4px;\n}\n.flatpickr-calendar.arrowTop:before,\n.flatpickr-calendar.arrowTop:after {\n bottom: 100%;\n}\n.flatpickr-calendar.arrowTop:before {\n border-bottom-color: #e6e6e6;\n}\n.flatpickr-calendar.arrowTop:after {\n border-bottom-color: #fff;\n}\n.flatpickr-calendar.arrowBottom:before,\n.flatpickr-calendar.arrowBottom:after {\n top: 100%;\n}\n.flatpickr-calendar.arrowBottom:before {\n border-top-color: #e6e6e6;\n}\n.flatpickr-calendar.arrowBottom:after {\n border-top-color: #fff;\n}\n.flatpickr-calendar:focus {\n outline: 0;\n}\n.flatpickr-wrapper {\n position: relative;\n display: inline-block;\n}\n.flatpickr-months {\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n}\n.flatpickr-months .flatpickr-month {\n background: transparent;\n color: rgba(0,0,0,0.9);\n fill: rgba(0,0,0,0.9);\n height: 34px;\n line-height: 1;\n text-align: center;\n position: relative;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n overflow: hidden;\n -webkit-box-flex: 1;\n -webkit-flex: 1;\n -ms-flex: 1;\n flex: 1;\n}\n.flatpickr-months .flatpickr-prev-month,\n.flatpickr-months .flatpickr-next-month {\n text-decoration: none;\n cursor: pointer;\n position: absolute;\n top: 0;\n height: 34px;\n padding: 10px;\n z-index: 3;\n color: rgba(0,0,0,0.9);\n fill: rgba(0,0,0,0.9);\n}\n.flatpickr-months .flatpickr-prev-month.flatpickr-disabled,\n.flatpickr-months .flatpickr-next-month.flatpickr-disabled {\n display: none;\n}\n.flatpickr-months .flatpickr-prev-month i,\n.flatpickr-months .flatpickr-next-month i {\n position: relative;\n}\n.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month,\n.flatpickr-months .flatpickr-next-month.flatpickr-prev-month {\n/*\n /*rtl:begin:ignore*/\n/*\n */\n left: 0;\n/*\n /*rtl:end:ignore*/\n/*\n */\n}\n/*\n /*rtl:begin:ignore*/\n/*\n /*rtl:end:ignore*/\n.flatpickr-months .flatpickr-prev-month.flatpickr-next-month,\n.flatpickr-months .flatpickr-next-month.flatpickr-next-month {\n/*\n /*rtl:begin:ignore*/\n/*\n */\n right: 0;\n/*\n /*rtl:end:ignore*/\n/*\n */\n}\n/*\n /*rtl:begin:ignore*/\n/*\n /*rtl:end:ignore*/\n.flatpickr-months .flatpickr-prev-month:hover,\n.flatpickr-months .flatpickr-next-month:hover {\n color: #959ea9;\n}\n.flatpickr-months .flatpickr-prev-month:hover svg,\n.flatpickr-months .flatpickr-next-month:hover svg {\n fill: #f64747;\n}\n.flatpickr-months .flatpickr-prev-month svg,\n.flatpickr-months .flatpickr-next-month svg {\n width: 14px;\n height: 14px;\n}\n.flatpickr-months .flatpickr-prev-month svg path,\n.flatpickr-months .flatpickr-next-month svg path {\n -webkit-transition: fill 0.1s;\n transition: fill 0.1s;\n fill: inherit;\n}\n.numInputWrapper {\n position: relative;\n height: auto;\n}\n.numInputWrapper input,\n.numInputWrapper span {\n display: inline-block;\n}\n.numInputWrapper input {\n width: 100%;\n}\n.numInputWrapper input::-ms-clear {\n display: none;\n}\n.numInputWrapper input::-webkit-outer-spin-button,\n.numInputWrapper input::-webkit-inner-spin-button {\n margin: 0;\n -webkit-appearance: none;\n}\n.numInputWrapper span {\n position: absolute;\n right: 0;\n width: 14px;\n padding: 0 4px 0 2px;\n height: 50%;\n line-height: 50%;\n opacity: 0;\n cursor: pointer;\n border: 1px solid rgba(57,57,57,0.15);\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n}\n.numInputWrapper span:hover {\n background: rgba(0,0,0,0.1);\n}\n.numInputWrapper span:active {\n background: rgba(0,0,0,0.2);\n}\n.numInputWrapper span:after {\n display: block;\n content: \"\";\n position: absolute;\n}\n.numInputWrapper span.arrowUp {\n top: 0;\n border-bottom: 0;\n}\n.numInputWrapper span.arrowUp:after {\n border-left: 4px solid transparent;\n border-right: 4px solid transparent;\n border-bottom: 4px solid rgba(57,57,57,0.6);\n top: 26%;\n}\n.numInputWrapper span.arrowDown {\n top: 50%;\n}\n.numInputWrapper span.arrowDown:after {\n border-left: 4px solid transparent;\n border-right: 4px solid transparent;\n border-top: 4px solid rgba(57,57,57,0.6);\n top: 40%;\n}\n.numInputWrapper span svg {\n width: inherit;\n height: auto;\n}\n.numInputWrapper span svg path {\n fill: rgba(0,0,0,0.5);\n}\n.numInputWrapper:hover {\n background: rgba(0,0,0,0.05);\n}\n.numInputWrapper:hover span {\n opacity: 1;\n}\n.flatpickr-current-month {\n font-size: 135%;\n line-height: inherit;\n font-weight: 300;\n color: inherit;\n position: absolute;\n width: 75%;\n left: 12.5%;\n padding: 7.48px 0 0 0;\n line-height: 1;\n height: 34px;\n display: inline-block;\n text-align: center;\n -webkit-transform: translate3d(0px, 0px, 0px);\n transform: translate3d(0px, 0px, 0px);\n}\n.flatpickr-current-month span.cur-month {\n font-family: inherit;\n font-weight: 700;\n color: inherit;\n display: inline-block;\n margin-left: 0.5ch;\n padding: 0;\n}\n.flatpickr-current-month span.cur-month:hover {\n background: rgba(0,0,0,0.05);\n}\n.flatpickr-current-month .numInputWrapper {\n width: 6ch;\n width: 7ch\\0;\n display: inline-block;\n}\n.flatpickr-current-month .numInputWrapper span.arrowUp:after {\n border-bottom-color: rgba(0,0,0,0.9);\n}\n.flatpickr-current-month .numInputWrapper span.arrowDown:after {\n border-top-color: rgba(0,0,0,0.9);\n}\n.flatpickr-current-month input.cur-year {\n background: transparent;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n color: inherit;\n cursor: text;\n padding: 0 0 0 0.5ch;\n margin: 0;\n display: inline-block;\n font-size: inherit;\n font-family: inherit;\n font-weight: 300;\n line-height: inherit;\n height: auto;\n border: 0;\n border-radius: 0;\n vertical-align: initial;\n -webkit-appearance: textfield;\n -moz-appearance: textfield;\n appearance: textfield;\n}\n.flatpickr-current-month input.cur-year:focus {\n outline: 0;\n}\n.flatpickr-current-month input.cur-year[disabled],\n.flatpickr-current-month input.cur-year[disabled]:hover {\n font-size: 100%;\n color: rgba(0,0,0,0.5);\n background: transparent;\n pointer-events: none;\n}\n.flatpickr-current-month .flatpickr-monthDropdown-months {\n appearance: menulist;\n background: transparent;\n border: none;\n border-radius: 0;\n box-sizing: border-box;\n color: inherit;\n cursor: pointer;\n font-size: inherit;\n font-family: inherit;\n font-weight: 300;\n height: auto;\n line-height: inherit;\n margin: -1px 0 0 0;\n outline: none;\n padding: 0 0 0 0.5ch;\n position: relative;\n vertical-align: initial;\n -webkit-box-sizing: border-box;\n -webkit-appearance: menulist;\n -moz-appearance: menulist;\n width: auto;\n}\n.flatpickr-current-month .flatpickr-monthDropdown-months:focus,\n.flatpickr-current-month .flatpickr-monthDropdown-months:active {\n outline: none;\n}\n.flatpickr-current-month .flatpickr-monthDropdown-months:hover {\n background: rgba(0,0,0,0.05);\n}\n.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month {\n background-color: transparent;\n outline: none;\n padding: 0;\n}\n.flatpickr-weekdays {\n background: transparent;\n text-align: center;\n overflow: hidden;\n width: 100%;\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-align: center;\n -webkit-align-items: center;\n -ms-flex-align: center;\n align-items: center;\n height: 28px;\n}\n.flatpickr-weekdays .flatpickr-weekdaycontainer {\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-flex: 1;\n -webkit-flex: 1;\n -ms-flex: 1;\n flex: 1;\n}\nspan.flatpickr-weekday {\n cursor: default;\n font-size: 90%;\n background: transparent;\n color: rgba(0,0,0,0.54);\n line-height: 1;\n margin: 0;\n text-align: center;\n display: block;\n -webkit-box-flex: 1;\n -webkit-flex: 1;\n -ms-flex: 1;\n flex: 1;\n font-weight: bolder;\n}\n.dayContainer,\n.flatpickr-weeks {\n padding: 1px 0 0 0;\n}\n.flatpickr-days {\n position: relative;\n overflow: hidden;\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-align: start;\n -webkit-align-items: flex-start;\n -ms-flex-align: start;\n align-items: flex-start;\n width: 307.875px;\n}\n.flatpickr-days:focus {\n outline: 0;\n}\n.dayContainer {\n padding: 0;\n outline: 0;\n text-align: left;\n width: 307.875px;\n min-width: 307.875px;\n max-width: 307.875px;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n display: inline-block;\n display: -ms-flexbox;\n display: -webkit-box;\n display: -webkit-flex;\n display: flex;\n -webkit-flex-wrap: wrap;\n flex-wrap: wrap;\n -ms-flex-wrap: wrap;\n -ms-flex-pack: justify;\n -webkit-justify-content: space-around;\n justify-content: space-around;\n -webkit-transform: translate3d(0px, 0px, 0px);\n transform: translate3d(0px, 0px, 0px);\n opacity: 1;\n}\n.dayContainer + .dayContainer {\n -webkit-box-shadow: -1px 0 0 #e6e6e6;\n box-shadow: -1px 0 0 #e6e6e6;\n}\n.flatpickr-day {\n background: none;\n border: 1px solid transparent;\n border-radius: 150px;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n color: #393939;\n cursor: pointer;\n font-weight: 400;\n width: 14.2857143%;\n -webkit-flex-basis: 14.2857143%;\n -ms-flex-preferred-size: 14.2857143%;\n flex-basis: 14.2857143%;\n max-width: 39px;\n height: 39px;\n line-height: 39px;\n margin: 0;\n display: inline-block;\n position: relative;\n -webkit-box-pack: center;\n -webkit-justify-content: center;\n -ms-flex-pack: center;\n justify-content: center;\n text-align: center;\n}\n.flatpickr-day.inRange,\n.flatpickr-day.prevMonthDay.inRange,\n.flatpickr-day.nextMonthDay.inRange,\n.flatpickr-day.today.inRange,\n.flatpickr-day.prevMonthDay.today.inRange,\n.flatpickr-day.nextMonthDay.today.inRange,\n.flatpickr-day:hover,\n.flatpickr-day.prevMonthDay:hover,\n.flatpickr-day.nextMonthDay:hover,\n.flatpickr-day:focus,\n.flatpickr-day.prevMonthDay:focus,\n.flatpickr-day.nextMonthDay:focus {\n cursor: pointer;\n outline: 0;\n background: #e6e6e6;\n border-color: #e6e6e6;\n}\n.flatpickr-day.today {\n border-color: #959ea9;\n}\n.flatpickr-day.today:hover,\n.flatpickr-day.today:focus {\n border-color: #959ea9;\n background: #959ea9;\n color: #fff;\n}\n.flatpickr-day.selected,\n.flatpickr-day.startRange,\n.flatpickr-day.endRange,\n.flatpickr-day.selected.inRange,\n.flatpickr-day.startRange.inRange,\n.flatpickr-day.endRange.inRange,\n.flatpickr-day.selected:focus,\n.flatpickr-day.startRange:focus,\n.flatpickr-day.endRange:focus,\n.flatpickr-day.selected:hover,\n.flatpickr-day.startRange:hover,\n.flatpickr-day.endRange:hover,\n.flatpickr-day.selected.prevMonthDay,\n.flatpickr-day.startRange.prevMonthDay,\n.flatpickr-day.endRange.prevMonthDay,\n.flatpickr-day.selected.nextMonthDay,\n.flatpickr-day.startRange.nextMonthDay,\n.flatpickr-day.endRange.nextMonthDay {\n background: #569ff7;\n -webkit-box-shadow: none;\n box-shadow: none;\n color: #fff;\n border-color: #569ff7;\n}\n.flatpickr-day.selected.startRange,\n.flatpickr-day.startRange.startRange,\n.flatpickr-day.endRange.startRange {\n border-radius: 50px 0 0 50px;\n}\n.flatpickr-day.selected.endRange,\n.flatpickr-day.startRange.endRange,\n.flatpickr-day.endRange.endRange {\n border-radius: 0 50px 50px 0;\n}\n.flatpickr-day.selected.startRange + .endRange:not(:nth-child(7n+1)),\n.flatpickr-day.startRange.startRange + .endRange:not(:nth-child(7n+1)),\n.flatpickr-day.endRange.startRange + .endRange:not(:nth-child(7n+1)) {\n -webkit-box-shadow: -10px 0 0 #569ff7;\n box-shadow: -10px 0 0 #569ff7;\n}\n.flatpickr-day.selected.startRange.endRange,\n.flatpickr-day.startRange.startRange.endRange,\n.flatpickr-day.endRange.startRange.endRange {\n border-radius: 50px;\n}\n.flatpickr-day.inRange {\n border-radius: 0;\n -webkit-box-shadow: -5px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;\n box-shadow: -5px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;\n}\n.flatpickr-day.flatpickr-disabled,\n.flatpickr-day.flatpickr-disabled:hover,\n.flatpickr-day.prevMonthDay,\n.flatpickr-day.nextMonthDay,\n.flatpickr-day.notAllowed,\n.flatpickr-day.notAllowed.prevMonthDay,\n.flatpickr-day.notAllowed.nextMonthDay {\n color: rgba(57,57,57,0.3);\n background: transparent;\n border-color: transparent;\n cursor: default;\n}\n.flatpickr-day.flatpickr-disabled,\n.flatpickr-day.flatpickr-disabled:hover {\n cursor: not-allowed;\n color: rgba(57,57,57,0.1);\n}\n.flatpickr-day.week.selected {\n border-radius: 0;\n -webkit-box-shadow: -5px 0 0 #569ff7, 5px 0 0 #569ff7;\n box-shadow: -5px 0 0 #569ff7, 5px 0 0 #569ff7;\n}\n.flatpickr-day.hidden {\n visibility: hidden;\n}\n.rangeMode .flatpickr-day {\n margin-top: 1px;\n}\n.flatpickr-weekwrapper {\n float: left;\n}\n.flatpickr-weekwrapper .flatpickr-weeks {\n padding: 0 12px;\n -webkit-box-shadow: 1px 0 0 #e6e6e6;\n box-shadow: 1px 0 0 #e6e6e6;\n}\n.flatpickr-weekwrapper .flatpickr-weekday {\n float: none;\n width: 100%;\n line-height: 28px;\n}\n.flatpickr-weekwrapper span.flatpickr-day,\n.flatpickr-weekwrapper span.flatpickr-day:hover {\n display: block;\n width: 100%;\n max-width: none;\n color: rgba(57,57,57,0.3);\n background: transparent;\n cursor: default;\n border: none;\n}\n.flatpickr-innerContainer {\n display: block;\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n overflow: hidden;\n}\n.flatpickr-rContainer {\n display: inline-block;\n padding: 0;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n}\n.flatpickr-time {\n text-align: center;\n outline: 0;\n display: block;\n height: 0;\n line-height: 40px;\n max-height: 40px;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n overflow: hidden;\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n}\n.flatpickr-time:after {\n content: \"\";\n display: table;\n clear: both;\n}\n.flatpickr-time .numInputWrapper {\n -webkit-box-flex: 1;\n -webkit-flex: 1;\n -ms-flex: 1;\n flex: 1;\n width: 40%;\n height: 40px;\n float: left;\n}\n.flatpickr-time .numInputWrapper span.arrowUp:after {\n border-bottom-color: #393939;\n}\n.flatpickr-time .numInputWrapper span.arrowDown:after {\n border-top-color: #393939;\n}\n.flatpickr-time.hasSeconds .numInputWrapper {\n width: 26%;\n}\n.flatpickr-time.time24hr .numInputWrapper {\n width: 49%;\n}\n.flatpickr-time input {\n background: transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n border: 0;\n border-radius: 0;\n text-align: center;\n margin: 0;\n padding: 0;\n height: inherit;\n line-height: inherit;\n color: #393939;\n font-size: 14px;\n position: relative;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n -webkit-appearance: textfield;\n -moz-appearance: textfield;\n appearance: textfield;\n}\n.flatpickr-time input.flatpickr-hour {\n font-weight: bold;\n}\n.flatpickr-time input.flatpickr-minute,\n.flatpickr-time input.flatpickr-second {\n font-weight: 400;\n}\n.flatpickr-time input:focus {\n outline: 0;\n border: 0;\n}\n.flatpickr-time .flatpickr-time-separator,\n.flatpickr-time .flatpickr-am-pm {\n height: inherit;\n float: left;\n line-height: inherit;\n color: #393939;\n font-weight: bold;\n width: 2%;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n -webkit-align-self: center;\n -ms-flex-item-align: center;\n align-self: center;\n}\n.flatpickr-time .flatpickr-am-pm {\n outline: 0;\n width: 18%;\n cursor: pointer;\n text-align: center;\n font-weight: 400;\n}\n.flatpickr-time input:hover,\n.flatpickr-time .flatpickr-am-pm:hover,\n.flatpickr-time input:focus,\n.flatpickr-time .flatpickr-am-pm:focus {\n background: #eee;\n}\n.flatpickr-input[readonly] {\n cursor: pointer;\n}\n@-webkit-keyframes fpFadeInDown {\n from {\n opacity: 0;\n -webkit-transform: translate3d(0, -20px, 0);\n transform: translate3d(0, -20px, 0);\n }\n to {\n opacity: 1;\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n }\n}\n@keyframes fpFadeInDown {\n from {\n opacity: 0;\n -webkit-transform: translate3d(0, -20px, 0);\n transform: translate3d(0, -20px, 0);\n }\n to {\n opacity: 1;\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n }\n}\n",".fieldhelpers-fieldset {\n border: 1px solid #ddd;\n padding: 0.5em;\n}","@mixin fieldhelpers-col() {\n box-sizing: border-box;\n padding: 0.5em;\n float: left;\n}\n\n.fieldhelpers-col {\n @include fieldhelpers-col();\n}\n\n@for $i from 1 through 5 {\n\n .fieldhelpers-col-#{$i} {\n\n @include fieldhelpers-col();\n width: #{100 / $i}#{\"%\"};\n\n @media only screen and (max-width: 640px) {\n width: 100%;\n }\n }\n}",".fieldhelpers-field {\n margin-bottom: 1em;\n}\n\n.fieldhelpers-field-header {\n margin-bottom: 0.5em;\n}\n\n.fieldhelpers-field-content {\n\t\n\t& > *, [data-image-preview] {\n\t\tmax-width: 100%;\n\t}\n\t\n}",".fieldhelpers-field-checkbox-container {\n display: inline-block;\n border: 1px solid #DFDFDF;\n background: #fff;\n width: 300px;\n max-width: 100%;\n}\n\n.fieldhelpers-field-checkbox-row {\n position: relative;\n cursor: pointer;\n transition: background 150ms;\n line-height: 30px;\n\n &:hover {\n background: darken(#fff, 5%);\n transition: background 0s;\n }\n\n &:after {\n content: '';\n clear: both;\n display: table;\n }\n\n &:not(:last-of-type) {\n border-bottom: 1px solid #DFDFDF;\n }\n\n &.fieldhelpers-field-checkbox-row-active {\n background: $primary-color;\n\n &:hover {\n background: darken($primary-color, 5%);\n }\n\n .fieldhelpers-field-checkbox-label {\n color: #fff;\n }\n }\n\n .fieldhelpers-field-checkbox-input-container {\n width: 15%;\n float: left;\n box-sizing: border-box;\n text-align: center;\n }\n\n input[type=\"checkbox\"] {\n margin: 0.5em 0.5em;\n }\n\n .fieldhelpers-field-checkbox-label {\n display: block;\n float: left;\n width: 85%;\n font-weight: bold;\n padding: 0 0.5em;\n border-left: 1px solid #DFDFDF;\n line-height: 30px;\n box-sizing: border-box;\n }\n}","$primary-color: #007AB1;",".fieldhelpers-field-colorpicker {\n position: relative;\n\n .wp-picker-holder {\n position: absolute;\n left: 0;\n top: 100%;\n box-shadow: 5px 5px 30px rgba(#000, 0.5);\n z-index: 100;\n }\n}","input[readonly] {\n\n\t&.fieldhelpers-field-timepicker-preview, &.fieldhelpers-field-datetimepicker-preview, &.fieldhelpers-field-datepicker-preview {\n\n\t\tbackground-color: #fff;\n\n\t}\n\n}",".fieldhelpers-field-hidden {\n display: none;\n}",".fieldhelpers-field-list {\n .fieldhelpers-field-list-item {\n border: 1px solid #ddd;\n background-color: #fff;\n padding: 0.5em;\n margin-bottom: 0.5em;\n cursor: move;\n }\n\n .fieldhelpers-field-list-item-handle {\n color: #bbb;\n }\n}",".fieldhelpers-media-uploader {\n .media-url {\n display: block;\n width: 100%;\n word-break: break-all;\n box-sizing: border-box;\n }\n\n .image-preview {\n max-width: 100%;\n }\n}",".fieldhelpers-field-number {\n .fieldhelpers-field-number-container {\n width: 100px;\n\n &[data-postfix] {\n position: relative;\n\n &:after {\n content: attr(data-postfix);\n position: absolute;\n right: calc(20px + 0.5em);\n top: 50%;\n color: #aaa;\n transform: translateY(-50%);\n }\n }\n }\n\n // Excessive selector because WP tries to change it for mobile\n input[type=\"text\"].fieldhelpers-field-input {\n height: 40px;\n line-height: 40px;\n width: 80px;\n padding: 0;\n margin: 0;\n float: left;\n text-align: center;\n }\n\n .fieldhelpers-field-number-increase, .fieldhelpers-field-number-decrease {\n display: block;\n height: 20px;\n width: 20px;\n line-height: 20px;\n padding: 0;\n font-size: 14px;\n color: #fff;\n background: $primary-color;\n border: 1px solid darken($primary-color, 5%);\n box-shadow: 0 1px 0 darken($primary-color, 5%);\n outline: none;\n border-radius: 0;\n cursor: pointer;\n\n &:hover {\n color: #fff;\n background: lighten($primary-color, 5%);\n border-color: $primary-color;\n box-shadow: 0 1px 0 $primary-color;\n }\n\n &:active {\n transform: translateY(1px);\n }\n\n .dashicons {\n font-size: inherit;\n line-height: inherit;\n width: auto;\n height: auto;\n }\n }\n\n .fieldhelpers-field-number-increase {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n border-bottom-width: 0;\n }\n\n .fieldhelpers-field-number-decrease {\n border-bottom-left-radius: 3px;\n border-bottom-right-radius: 3px;\n }\n}",".fieldhelpers-field-radio-container {\n display: inline-block;\n border: 1px solid #DFDFDF;\n background: #fff;\n width: 300px;\n max-width: 100%;\n}\n\n.fieldhelpers-field-radio-row {\n position: relative;\n cursor: pointer;\n transition: background 150ms;\n\n &:hover {\n background: darken(#fff, 5%);\n transition: background 0s;\n }\n\n &:after {\n content: '';\n clear: both;\n display: table;\n }\n\n &:not(:last-of-type) {\n border-bottom: 1px solid #DFDFDF;\n }\n\n &.fieldhelpers-field-radio-row-active {\n background: $primary-color;\n\n &:hover {\n background: darken($primary-color, 5%);\n }\n\n .fieldhelpers-field-radio-label {\n color: #fff;\n }\n }\n\n .fieldhelpers-field-radio-input-container {\n width: 15%;\n float: left;\n box-sizing: border-box;\n text-align: center;\n }\n\n input[type=\"radio\"] {\n margin: 0.5em 0.5em;\n }\n\n .fieldhelpers-field-radio-label {\n display: block;\n float: left;\n width: 85%;\n font-weight: bold;\n padding: 0 0.5em;\n border-left: 1px solid #DFDFDF;\n line-height: 30px;\n box-sizing: border-box;\n }\n}",".fieldhelpers-field-repeater-label {\n font-weight: bold;\n}\n\n.fieldhelpers-field-repeater-list {\n\n .fieldhelpers-sortable-placeholder {\n border: 3px dashed #ddd;\n }\n\n .fieldhelpers-field-repeater-content{\n &:after {\n content: '';\n display: table;\n clear: both;\n }\n }\n\n}\n\n.fieldhelpers-field-repeater-row {\n padding: 0.5em;\n margin: 0.5em 0;\n border: 1px solid #ddd;\n background: #fff;\n\n &:before {\n content: '';\n display: table;\n clear: both;\n }\n\n &.ui-sortable-helper {\n opacity: 0.5;\n }\n\n .fieldhelpers-field-repeater-handle {\n height: 20px;\n cursor: move;\n margin-bottom: 10px;\n background-image: -webkit-repeating-radial-gradient(center center, rgba(0, 0, 0, .2), rgba(0, 0, 0, .2) 1px, transparent 1px, transparent 100%);\n background-image: -moz-repeating-radial-gradient(center center, rgba(0, 0, 0, .2), rgba(0, 0, 0, .2) 1px, transparent 1px, transparent 100%);\n background-image: -ms-repeating-radial-gradient(center center, rgba(0, 0, 0, .2), rgba(0, 0, 0, .2) 1px, transparent 1px, transparent 100%);\n background-image: repeating-radial-gradient(center center, rgba(0, 0, 0, .2), rgba(0, 0, 0, .2) 1px, transparent 1px, transparent 100%);\n background-size: 3px 3px;\n }\n}\n\n.fieldhelpers-field-repeater-collapsable {\n .fieldhelpers-field-repeater-content {\n display: none;\n }\n\n .fieldhelpers-field-repeater-header-interior {\n padding: 0 0.5em 0 0.5em;\n\n .fieldhelpers-field-repeater-delete-button {\n float: right;\n }\n }\n\n .fieldhelpers-field-repeater-collapsable-handle {\n cursor: pointer;\n }\n\n .fieldhelpers-field-repeater-row.opened {\n .fieldhelpers-field-repeater-collapsable-collapse-icon{\n transform: rotate(180deg);\n }\n }\n\n .fieldhelpers-field-repeater-collapsable-collapse-icon {\n transition: transform 300ms ease-in 0s;\n\n &:hover {\n cursor: pointer;\n }\n }\n}",".select2-container--default .fieldhelpers-select2 {\n\n &.select2-selection--single,\n &.select2-selection--multiple {\n\n &.select2-selection {\n border-radius: 0;\n border: 1px solid #ddd;\n box-shadow: inset 0 1px 2px rgba(#000, 0.07);\n outline: none;\n margin: 1px;\n height: auto;\n }\n\n .select2-selection__rendered {\n line-height: inherit;\n padding: 3px 5px;\n font-size: 14px;\n }\n\n .select2-search {\n margin-bottom: 0;\n }\n\n .select2-selection__choice {\n border-radius: 0;\n }\n\n .select2-selection__clear {\n margin-right: 15px;\n }\n }\n\n &.select2-dropdown {\n border-radius: 0;\n border: 1px solid #ddd;\n box-shadow: 5px 5px 40px rgba(#000, 0.3);\n\n .select2-results__option--highlighted[aria-selected] {\n background-color: $primary-color;\n }\n\n .select2-results__option {\n margin-bottom: 0;\n }\n }\n}",".fieldhelpers-field-table {\n\n .fieldhelpers-field-table-loading {\n text-align: center;\n\n .spinner {\n float: none;\n display: inline-block;\n }\n }\n\n table {\n width: 100%;\n border-collapse: collapse;\n }\n\n th, td {\n padding: 5px;\n }\n\n thead {\n input[type=\"text\"] {\n background: #fff78a;\n }\n }\n\n input[type=\"text\"] {\n width: 100%;\n }\n\n .fieldhelpers-field-table-delete-columns {\n text-align: center;\n }\n}",".fieldhelpers-field-toggle-container {\n position: relative;\n display: inline-block;\n width: 60px;\n height: 34px;\n\n &.checked {\n .fieldhelpers-field-toggle-slider {\n background-color: $primary-color;\n\n &:before {\n transform: translateX(26px);\n }\n }\n }\n\n .fieldhelpers-field-toggle-slider {\n position: absolute;\n cursor: pointer;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: #ccc;\n transition: transform 300ms;\n\n &:before {\n position: absolute;\n content: \"\";\n height: 26px;\n width: 26px;\n left: 4px;\n bottom: 4px;\n background-color: white;\n transition: transform 300ms;\n }\n }\n}",".fieldhelpers-field-wysiwyg-label {\n font-weight: bold;\n}",".fieldhelpers-field-tip {\n position: relative;\n display: inline-block;\n\n &.fieldhelpers-field-tip-align-left {\n .fieldhelpers-field-tip-text {\n left: -10px;\n\n &:before {\n left: 10px;\n }\n }\n }\n\n &.fieldhelpers-field-tip-align-right {\n .fieldhelpers-field-tip-text {\n right: -10px;\n\n &:before {\n right: 10px;\n }\n }\n }\n\n &:hover {\n .fieldhelpers-field-tip-text {\n visibility: visible;\n opacity: 1;\n transform: translateY(0);\n }\n\n .fieldhelpers-field-tip-toggle {\n color: $primary-color;\n }\n }\n\n .fieldhelpers-field-tip-toggle {\n cursor: pointer;\n transition: color 300ms;\n }\n\n .fieldhelpers-field-tip-text {\n position: absolute;\n visibility: hidden;\n opacity: 0;\n top: 100%;\n margin-top: 15px;\n background: $primary-color;\n color: #fff;\n padding: 1em;\n width: 300px;\n text-align: left;\n box-shadow: 5px 5px 40px rgba(#000, 0.3);\n transform: translateY(10px);\n transition: visibility 300ms, opacity 300ms, transform 300ms;\n z-index: 100;\n\n &:before {\n content: '';\n position: absolute;\n bottom: 100%;\n width: 0;\n height: 0;\n border-style: solid;\n border-width: 0 10px 10px 10px;\n border-color: transparent transparent $primary-color transparent;\n }\n\n &:after {\n content: '';\n position: absolute;\n bottom: 100%;\n left: 0;\n width: 100%;\n height: 15px;\n }\n\n a {\n color: inherit !important;\n text-decoration: underline;\n }\n }\n}"]} \ No newline at end of file diff --git a/assets/dist/css/rbm-field-helpers-admin.min.css b/assets/dist/css/rbm-field-helpers-admin.min.css index a61bf14..2c7254d 100644 --- a/assets/dist/css/rbm-field-helpers-admin.min.css +++ b/assets/dist/css/rbm-field-helpers-admin.min.css @@ -1,3 +1 @@ .flatpickr-calendar{background:transparent;opacity:0;display:none;text-align:center;visibility:hidden;padding:0;-webkit-animation:none;animation:none;direction:ltr;border:0;font-size:14px;line-height:24px;border-radius:5px;position:absolute;width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-touch-action:manipulation;touch-action:manipulation;background:#fff;-webkit-box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,0.08);box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,0.08)}.flatpickr-calendar.open,.flatpickr-calendar.inline{opacity:1;max-height:640px;visibility:visible}.flatpickr-calendar.open{display:inline-block;z-index:99999}.flatpickr-calendar.animate.open{-webkit-animation:fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1);animation:fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1)}.flatpickr-calendar.inline{display:block;position:relative;top:2px}.flatpickr-calendar.static{position:absolute;top:calc(100% + 2px)}.flatpickr-calendar.static.open{z-index:999;display:block}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7){-webkit-box-shadow:none !important;box-shadow:none !important}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1){-webkit-box-shadow:-2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;box-shadow:-2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6}.flatpickr-calendar .hasWeeks .dayContainer,.flatpickr-calendar .hasTime .dayContainer{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.flatpickr-calendar .hasWeeks .dayContainer{border-left:0}.flatpickr-calendar.showTimeInput.hasTime .flatpickr-time{height:40px;border-top:1px solid #e6e6e6}.flatpickr-calendar.noCalendar.hasTime .flatpickr-time{height:auto}.flatpickr-calendar:before,.flatpickr-calendar:after{position:absolute;display:block;pointer-events:none;border:solid transparent;content:'';height:0;width:0;left:22px}.flatpickr-calendar.rightMost:before,.flatpickr-calendar.rightMost:after{left:auto;right:22px}.flatpickr-calendar:before{border-width:5px;margin:0 -5px}.flatpickr-calendar:after{border-width:4px;margin:0 -4px}.flatpickr-calendar.arrowTop:before,.flatpickr-calendar.arrowTop:after{bottom:100%}.flatpickr-calendar.arrowTop:before{border-bottom-color:#e6e6e6}.flatpickr-calendar.arrowTop:after{border-bottom-color:#fff}.flatpickr-calendar.arrowBottom:before,.flatpickr-calendar.arrowBottom:after{top:100%}.flatpickr-calendar.arrowBottom:before{border-top-color:#e6e6e6}.flatpickr-calendar.arrowBottom:after{border-top-color:#fff}.flatpickr-calendar:focus{outline:0}.flatpickr-wrapper{position:relative;display:inline-block}.flatpickr-months{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-months .flatpickr-month{background:transparent;color:rgba(0,0,0,0.9);fill:rgba(0,0,0,0.9);height:34px;line-height:1;text-align:center;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.flatpickr-months .flatpickr-prev-month,.flatpickr-months .flatpickr-next-month{text-decoration:none;cursor:pointer;position:absolute;top:0;height:34px;padding:10px;z-index:3;color:rgba(0,0,0,0.9);fill:rgba(0,0,0,0.9)}.flatpickr-months .flatpickr-prev-month.flatpickr-disabled,.flatpickr-months .flatpickr-next-month.flatpickr-disabled{display:none}.flatpickr-months .flatpickr-prev-month i,.flatpickr-months .flatpickr-next-month i{position:relative}.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month,.flatpickr-months .flatpickr-next-month.flatpickr-prev-month{left:0}.flatpickr-months .flatpickr-prev-month.flatpickr-next-month,.flatpickr-months .flatpickr-next-month.flatpickr-next-month{right:0}.flatpickr-months .flatpickr-prev-month:hover,.flatpickr-months .flatpickr-next-month:hover{color:#959ea9}.flatpickr-months .flatpickr-prev-month:hover svg,.flatpickr-months .flatpickr-next-month:hover svg{fill:#f64747}.flatpickr-months .flatpickr-prev-month svg,.flatpickr-months .flatpickr-next-month svg{width:14px;height:14px}.flatpickr-months .flatpickr-prev-month svg path,.flatpickr-months .flatpickr-next-month svg path{-webkit-transition:fill 0.1s;transition:fill 0.1s;fill:inherit}.numInputWrapper{position:relative;height:auto}.numInputWrapper input,.numInputWrapper span{display:inline-block}.numInputWrapper input{width:100%}.numInputWrapper input::-ms-clear{display:none}.numInputWrapper input::-webkit-outer-spin-button,.numInputWrapper input::-webkit-inner-spin-button{margin:0;-webkit-appearance:none}.numInputWrapper span{position:absolute;right:0;width:14px;padding:0 4px 0 2px;height:50%;line-height:50%;opacity:0;cursor:pointer;border:1px solid rgba(57,57,57,0.15);-webkit-box-sizing:border-box;box-sizing:border-box}.numInputWrapper span:hover{background:rgba(0,0,0,0.1)}.numInputWrapper span:active{background:rgba(0,0,0,0.2)}.numInputWrapper span:after{display:block;content:"";position:absolute}.numInputWrapper span.arrowUp{top:0;border-bottom:0}.numInputWrapper span.arrowUp:after{border-left:4px solid transparent;border-right:4px solid transparent;border-bottom:4px solid rgba(57,57,57,0.6);top:26%}.numInputWrapper span.arrowDown{top:50%}.numInputWrapper span.arrowDown:after{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(57,57,57,0.6);top:40%}.numInputWrapper span svg{width:inherit;height:auto}.numInputWrapper span svg path{fill:rgba(0,0,0,0.5)}.numInputWrapper:hover{background:rgba(0,0,0,0.05)}.numInputWrapper:hover span{opacity:1}.flatpickr-current-month{font-size:135%;line-height:inherit;font-weight:300;color:inherit;position:absolute;width:75%;left:12.5%;padding:7.48px 0 0 0;line-height:1;height:34px;display:inline-block;text-align:center;-webkit-transform:translate3d(0px, 0px, 0px);transform:translate3d(0px, 0px, 0px)}.flatpickr-current-month span.cur-month{font-family:inherit;font-weight:700;color:inherit;display:inline-block;margin-left:0.5ch;padding:0}.flatpickr-current-month span.cur-month:hover{background:rgba(0,0,0,0.05)}.flatpickr-current-month .numInputWrapper{width:6ch;width:7ch\0;display:inline-block}.flatpickr-current-month .numInputWrapper span.arrowUp:after{border-bottom-color:rgba(0,0,0,0.9)}.flatpickr-current-month .numInputWrapper span.arrowDown:after{border-top-color:rgba(0,0,0,0.9)}.flatpickr-current-month input.cur-year{background:transparent;-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;cursor:text;padding:0 0 0 0.5ch;margin:0;display:inline-block;font-size:inherit;font-family:inherit;font-weight:300;line-height:inherit;height:auto;border:0;border-radius:0;vertical-align:initial;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.flatpickr-current-month input.cur-year:focus{outline:0}.flatpickr-current-month input.cur-year[disabled],.flatpickr-current-month input.cur-year[disabled]:hover{font-size:100%;color:rgba(0,0,0,0.5);background:transparent;pointer-events:none}.flatpickr-current-month .flatpickr-monthDropdown-months{appearance:menulist;background:transparent;border:none;border-radius:0;box-sizing:border-box;color:inherit;cursor:pointer;font-size:inherit;font-family:inherit;font-weight:300;height:auto;line-height:inherit;margin:-1px 0 0 0;outline:none;padding:0 0 0 0.5ch;position:relative;vertical-align:initial;-webkit-box-sizing:border-box;-webkit-appearance:menulist;-moz-appearance:menulist;width:auto}.flatpickr-current-month .flatpickr-monthDropdown-months:focus,.flatpickr-current-month .flatpickr-monthDropdown-months:active{outline:none}.flatpickr-current-month .flatpickr-monthDropdown-months:hover{background:rgba(0,0,0,0.05)}.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month{background-color:transparent;outline:none;padding:0}.flatpickr-weekdays{background:transparent;text-align:center;overflow:hidden;width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:28px}.flatpickr-weekdays .flatpickr-weekdaycontainer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}span.flatpickr-weekday{cursor:default;font-size:90%;background:transparent;color:rgba(0,0,0,0.54);line-height:1;margin:0;text-align:center;display:block;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;font-weight:bolder}.dayContainer,.flatpickr-weeks{padding:1px 0 0 0}.flatpickr-days{position:relative;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;width:307.875px}.flatpickr-days:focus{outline:0}.dayContainer{padding:0;outline:0;text-align:left;width:307.875px;min-width:307.875px;max-width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;display:inline-block;display:-ms-flexbox;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-wrap:wrap;-ms-flex-pack:justify;-webkit-justify-content:space-around;justify-content:space-around;-webkit-transform:translate3d(0px, 0px, 0px);transform:translate3d(0px, 0px, 0px);opacity:1}.dayContainer+.dayContainer{-webkit-box-shadow:-1px 0 0 #e6e6e6;box-shadow:-1px 0 0 #e6e6e6}.flatpickr-day{background:none;border:1px solid transparent;border-radius:150px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#393939;cursor:pointer;font-weight:400;width:14.2857143%;-webkit-flex-basis:14.2857143%;-ms-flex-preferred-size:14.2857143%;flex-basis:14.2857143%;max-width:39px;height:39px;line-height:39px;margin:0;display:inline-block;position:relative;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center}.flatpickr-day.inRange,.flatpickr-day.prevMonthDay.inRange,.flatpickr-day.nextMonthDay.inRange,.flatpickr-day.today.inRange,.flatpickr-day.prevMonthDay.today.inRange,.flatpickr-day.nextMonthDay.today.inRange,.flatpickr-day:hover,.flatpickr-day.prevMonthDay:hover,.flatpickr-day.nextMonthDay:hover,.flatpickr-day:focus,.flatpickr-day.prevMonthDay:focus,.flatpickr-day.nextMonthDay:focus{cursor:pointer;outline:0;background:#e6e6e6;border-color:#e6e6e6}.flatpickr-day.today{border-color:#959ea9}.flatpickr-day.today:hover,.flatpickr-day.today:focus{border-color:#959ea9;background:#959ea9;color:#fff}.flatpickr-day.selected,.flatpickr-day.startRange,.flatpickr-day.endRange,.flatpickr-day.selected.inRange,.flatpickr-day.startRange.inRange,.flatpickr-day.endRange.inRange,.flatpickr-day.selected:focus,.flatpickr-day.startRange:focus,.flatpickr-day.endRange:focus,.flatpickr-day.selected:hover,.flatpickr-day.startRange:hover,.flatpickr-day.endRange:hover,.flatpickr-day.selected.prevMonthDay,.flatpickr-day.startRange.prevMonthDay,.flatpickr-day.endRange.prevMonthDay,.flatpickr-day.selected.nextMonthDay,.flatpickr-day.startRange.nextMonthDay,.flatpickr-day.endRange.nextMonthDay{background:#569ff7;-webkit-box-shadow:none;box-shadow:none;color:#fff;border-color:#569ff7}.flatpickr-day.selected.startRange,.flatpickr-day.startRange.startRange,.flatpickr-day.endRange.startRange{border-radius:50px 0 0 50px}.flatpickr-day.selected.endRange,.flatpickr-day.startRange.endRange,.flatpickr-day.endRange.endRange{border-radius:0 50px 50px 0}.flatpickr-day.selected.startRange+.endRange:not(:nth-child(7n+1)),.flatpickr-day.startRange.startRange+.endRange:not(:nth-child(7n+1)),.flatpickr-day.endRange.startRange+.endRange:not(:nth-child(7n+1)){-webkit-box-shadow:-10px 0 0 #569ff7;box-shadow:-10px 0 0 #569ff7}.flatpickr-day.selected.startRange.endRange,.flatpickr-day.startRange.startRange.endRange,.flatpickr-day.endRange.startRange.endRange{border-radius:50px}.flatpickr-day.inRange{border-radius:0;-webkit-box-shadow:-5px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;box-shadow:-5px 0 0 #e6e6e6, 5px 0 0 #e6e6e6}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover,.flatpickr-day.prevMonthDay,.flatpickr-day.nextMonthDay,.flatpickr-day.notAllowed,.flatpickr-day.notAllowed.prevMonthDay,.flatpickr-day.notAllowed.nextMonthDay{color:rgba(57,57,57,0.3);background:transparent;border-color:transparent;cursor:default}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover{cursor:not-allowed;color:rgba(57,57,57,0.1)}.flatpickr-day.week.selected{border-radius:0;-webkit-box-shadow:-5px 0 0 #569ff7, 5px 0 0 #569ff7;box-shadow:-5px 0 0 #569ff7, 5px 0 0 #569ff7}.flatpickr-day.hidden{visibility:hidden}.rangeMode .flatpickr-day{margin-top:1px}.flatpickr-weekwrapper{float:left}.flatpickr-weekwrapper .flatpickr-weeks{padding:0 12px;-webkit-box-shadow:1px 0 0 #e6e6e6;box-shadow:1px 0 0 #e6e6e6}.flatpickr-weekwrapper .flatpickr-weekday{float:none;width:100%;line-height:28px}.flatpickr-weekwrapper span.flatpickr-day,.flatpickr-weekwrapper span.flatpickr-day:hover{display:block;width:100%;max-width:none;color:rgba(57,57,57,0.3);background:transparent;cursor:default;border:none}.flatpickr-innerContainer{display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}.flatpickr-rContainer{display:inline-block;padding:0;-webkit-box-sizing:border-box;box-sizing:border-box}.flatpickr-time{text-align:center;outline:0;display:block;height:0;line-height:40px;max-height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-time:after{content:"";display:table;clear:both}.flatpickr-time .numInputWrapper{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;width:40%;height:40px;float:left}.flatpickr-time .numInputWrapper span.arrowUp:after{border-bottom-color:#393939}.flatpickr-time .numInputWrapper span.arrowDown:after{border-top-color:#393939}.flatpickr-time.hasSeconds .numInputWrapper{width:26%}.flatpickr-time.time24hr .numInputWrapper{width:49%}.flatpickr-time input{background:transparent;-webkit-box-shadow:none;box-shadow:none;border:0;border-radius:0;text-align:center;margin:0;padding:0;height:inherit;line-height:inherit;color:#393939;font-size:14px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.flatpickr-time input.flatpickr-hour{font-weight:bold}.flatpickr-time input.flatpickr-minute,.flatpickr-time input.flatpickr-second{font-weight:400}.flatpickr-time input:focus{outline:0;border:0}.flatpickr-time .flatpickr-time-separator,.flatpickr-time .flatpickr-am-pm{height:inherit;float:left;line-height:inherit;color:#393939;font-weight:bold;width:2%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.flatpickr-time .flatpickr-am-pm{outline:0;width:18%;cursor:pointer;text-align:center;font-weight:400}.flatpickr-time input:hover,.flatpickr-time .flatpickr-am-pm:hover,.flatpickr-time input:focus,.flatpickr-time .flatpickr-am-pm:focus{background:#eee}.flatpickr-input[readonly]{cursor:pointer}@-webkit-keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0, -20px, 0);transform:translate3d(0, -20px, 0)}to{opacity:1;-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}}@keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0, -20px, 0);transform:translate3d(0, -20px, 0)}to{opacity:1;-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}}.fieldhelpers-fieldset{border:1px solid #ddd;padding:0.5em}.fieldhelpers-col{box-sizing:border-box;padding:0.5em;float:left}.fieldhelpers-col-1{box-sizing:border-box;padding:0.5em;float:left;width:100%}@media only screen and (max-width: 640px){.fieldhelpers-col-1{width:100%}}.fieldhelpers-col-2{box-sizing:border-box;padding:0.5em;float:left;width:50%}@media only screen and (max-width: 640px){.fieldhelpers-col-2{width:100%}}.fieldhelpers-col-3{box-sizing:border-box;padding:0.5em;float:left;width:33.33333%}@media only screen and (max-width: 640px){.fieldhelpers-col-3{width:100%}}.fieldhelpers-col-4{box-sizing:border-box;padding:0.5em;float:left;width:25%}@media only screen and (max-width: 640px){.fieldhelpers-col-4{width:100%}}.fieldhelpers-col-5{box-sizing:border-box;padding:0.5em;float:left;width:20%}@media only screen and (max-width: 640px){.fieldhelpers-col-5{width:100%}}.fieldhelpers-field{margin-bottom:1em}.fieldhelpers-field-header{margin-bottom:0.5em}.fieldhelpers-field-content>*,.fieldhelpers-field-content [data-image-preview]{max-width:100%}.fieldhelpers-field-checkbox-container{display:inline-block;border:1px solid #DFDFDF;background:#fff;width:300px;max-width:100%}.fieldhelpers-field-checkbox-row{position:relative;cursor:pointer;transition:background 150ms;line-height:30px}.fieldhelpers-field-checkbox-row:hover{background:#f2f2f2;transition:background 0s}.fieldhelpers-field-checkbox-row:after{content:'';clear:both;display:table}.fieldhelpers-field-checkbox-row:not(:last-of-type){border-bottom:1px solid #DFDFDF}.fieldhelpers-field-checkbox-row.fieldhelpers-field-checkbox-row-active{background:#007AB1}.fieldhelpers-field-checkbox-row.fieldhelpers-field-checkbox-row-active:hover{background:#006898}.fieldhelpers-field-checkbox-row.fieldhelpers-field-checkbox-row-active .fieldhelpers-field-checkbox-label{color:#fff}.fieldhelpers-field-checkbox-row .fieldhelpers-field-checkbox-input-container{width:15%;float:left;box-sizing:border-box;text-align:center}.fieldhelpers-field-checkbox-row input[type="checkbox"]{margin:0.5em 0.5em}.fieldhelpers-field-checkbox-row .fieldhelpers-field-checkbox-label{display:block;float:left;width:85%;font-weight:bold;padding:0 0.5em;border-left:1px solid #DFDFDF;line-height:30px;box-sizing:border-box}.fieldhelpers-field-colorpicker{position:relative}.fieldhelpers-field-colorpicker .wp-picker-holder{position:absolute;left:0;top:100%;box-shadow:5px 5px 30px rgba(0,0,0,0.5);z-index:100}input[readonly].fieldhelpers-field-timepicker-preview,input[readonly].fieldhelpers-field-datetimepicker-preview,input[readonly].fieldhelpers-field-datepicker-preview{background-color:#fff}.fieldhelpers-field-hidden{display:none}.fieldhelpers-field-list .fieldhelpers-field-list-item{border:1px solid #ddd;background-color:#fff;padding:0.5em;margin-bottom:0.5em;cursor:move}.fieldhelpers-field-list .fieldhelpers-field-list-item-handle{color:#bbb}.fieldhelpers-media-uploader .media-url{display:block;width:100%;word-break:break-all;box-sizing:border-box}.fieldhelpers-media-uploader .image-preview{max-width:100%}.fieldhelpers-field-number .fieldhelpers-field-number-container{width:100px}.fieldhelpers-field-number .fieldhelpers-field-number-container[data-postfix]{position:relative}.fieldhelpers-field-number .fieldhelpers-field-number-container[data-postfix]:after{content:attr(data-postfix);position:absolute;right:calc(20px + 0.5em);top:50%;color:#aaa;transform:translateY(-50%)}.fieldhelpers-field-number input[type="text"].fieldhelpers-field-input{height:40px;line-height:40px;width:80px;padding:0;margin:0;float:left;text-align:center}.fieldhelpers-field-number .fieldhelpers-field-number-increase,.fieldhelpers-field-number .fieldhelpers-field-number-decrease{display:block;height:20px;width:20px;line-height:20px;padding:0;font-size:14px;color:#fff;background:#007AB1;border:1px solid #006898;box-shadow:0 1px 0 #006898;outline:none;border-radius:0;cursor:pointer}.fieldhelpers-field-number .fieldhelpers-field-number-increase:hover,.fieldhelpers-field-number .fieldhelpers-field-number-decrease:hover{color:#fff;background:#008ccb;border-color:#007AB1;box-shadow:0 1px 0 #007AB1}.fieldhelpers-field-number .fieldhelpers-field-number-increase:active,.fieldhelpers-field-number .fieldhelpers-field-number-decrease:active{transform:translateY(1px)}.fieldhelpers-field-number .fieldhelpers-field-number-increase .dashicons,.fieldhelpers-field-number .fieldhelpers-field-number-decrease .dashicons{font-size:inherit;line-height:inherit;width:auto;height:auto}.fieldhelpers-field-number .fieldhelpers-field-number-increase{border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-width:0}.fieldhelpers-field-number .fieldhelpers-field-number-decrease{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.fieldhelpers-field-radio-container{display:inline-block;border:1px solid #DFDFDF;background:#fff;width:300px;max-width:100%}.fieldhelpers-field-radio-row{position:relative;cursor:pointer;transition:background 150ms}.fieldhelpers-field-radio-row:hover{background:#f2f2f2;transition:background 0s}.fieldhelpers-field-radio-row:after{content:'';clear:both;display:table}.fieldhelpers-field-radio-row:not(:last-of-type){border-bottom:1px solid #DFDFDF}.fieldhelpers-field-radio-row.fieldhelpers-field-radio-row-active{background:#007AB1}.fieldhelpers-field-radio-row.fieldhelpers-field-radio-row-active:hover{background:#006898}.fieldhelpers-field-radio-row.fieldhelpers-field-radio-row-active .fieldhelpers-field-radio-label{color:#fff}.fieldhelpers-field-radio-row .fieldhelpers-field-radio-input-container{width:15%;float:left;box-sizing:border-box;text-align:center}.fieldhelpers-field-radio-row input[type="radio"]{margin:0.5em 0.5em}.fieldhelpers-field-radio-row .fieldhelpers-field-radio-label{display:block;float:left;width:85%;font-weight:bold;padding:0 0.5em;border-left:1px solid #DFDFDF;line-height:30px;box-sizing:border-box}.fieldhelpers-field-repeater-label{font-weight:bold}.fieldhelpers-field-repeater-list .fieldhelpers-sortable-placeholder{border:3px dashed #ddd}.fieldhelpers-field-repeater-list .fieldhelpers-field-repeater-content:after{content:'';display:table;clear:both}.fieldhelpers-field-repeater-row{padding:0.5em;margin:0.5em 0;border:1px solid #ddd;background:#fff}.fieldhelpers-field-repeater-row:before{content:'';display:table;clear:both}.fieldhelpers-field-repeater-row.ui-sortable-helper{opacity:0.5}.fieldhelpers-field-repeater-row .fieldhelpers-field-repeater-handle{height:20px;cursor:move;margin-bottom:10px;background-image:-webkit-repeating-radial-gradient(center center, rgba(0,0,0,0.2), rgba(0,0,0,0.2) 1px, transparent 1px, transparent 100%);background-image:-moz-repeating-radial-gradient(center center, rgba(0,0,0,0.2), rgba(0,0,0,0.2) 1px, transparent 1px, transparent 100%);background-image:-ms-repeating-radial-gradient(center center, rgba(0,0,0,0.2), rgba(0,0,0,0.2) 1px, transparent 1px, transparent 100%);background-image:repeating-radial-gradient(center center, rgba(0,0,0,0.2), rgba(0,0,0,0.2) 1px, transparent 1px, transparent 100%);background-size:3px 3px}.fieldhelpers-field-repeater-collapsable .fieldhelpers-field-repeater-content{display:none}.fieldhelpers-field-repeater-collapsable .fieldhelpers-field-repeater-header-interior{padding:0 0.5em 0 0.5em}.fieldhelpers-field-repeater-collapsable .fieldhelpers-field-repeater-header-interior .fieldhelpers-field-repeater-delete-button{float:right}.fieldhelpers-field-repeater-collapsable .fieldhelpers-field-repeater-collapsable-handle{cursor:pointer}.fieldhelpers-field-repeater-collapsable .fieldhelpers-field-repeater-row.opened .fieldhelpers-field-repeater-collapsable-collapse-icon{transform:rotate(180deg)}.fieldhelpers-field-repeater-collapsable .fieldhelpers-field-repeater-collapsable-collapse-icon{transition:transform 300ms ease-in 0s}.fieldhelpers-field-repeater-collapsable .fieldhelpers-field-repeater-collapsable-collapse-icon:hover{cursor:pointer}.select2-container--default .fieldhelpers-select2.select2-selection--single.select2-selection,.select2-container--default .fieldhelpers-select2.select2-selection--multiple.select2-selection{border-radius:0;border:1px solid #ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,0.07);outline:none;margin:1px;height:auto}.select2-container--default .fieldhelpers-select2.select2-selection--single .select2-selection__rendered,.select2-container--default .fieldhelpers-select2.select2-selection--multiple .select2-selection__rendered{line-height:inherit;padding:3px 5px;font-size:14px}.select2-container--default .fieldhelpers-select2.select2-selection--single .select2-search,.select2-container--default .fieldhelpers-select2.select2-selection--multiple .select2-search{margin-bottom:0}.select2-container--default .fieldhelpers-select2.select2-selection--single .select2-selection__choice,.select2-container--default .fieldhelpers-select2.select2-selection--multiple .select2-selection__choice{border-radius:0}.select2-container--default .fieldhelpers-select2.select2-selection--single .select2-selection__clear,.select2-container--default .fieldhelpers-select2.select2-selection--multiple .select2-selection__clear{margin-right:15px}.select2-container--default .fieldhelpers-select2.select2-dropdown{border-radius:0;border:1px solid #ddd;box-shadow:5px 5px 40px rgba(0,0,0,0.3)}.select2-container--default .fieldhelpers-select2.select2-dropdown .select2-results__option--highlighted[aria-selected]{background-color:#007AB1}.select2-container--default .fieldhelpers-select2.select2-dropdown .select2-results__option{margin-bottom:0}.fieldhelpers-field-table .fieldhelpers-field-table-loading{text-align:center}.fieldhelpers-field-table .fieldhelpers-field-table-loading .spinner{float:none;display:inline-block}.fieldhelpers-field-table table{width:100%;border-collapse:collapse}.fieldhelpers-field-table th,.fieldhelpers-field-table td{padding:5px}.fieldhelpers-field-table thead input[type="text"]{background:#fff78a}.fieldhelpers-field-table input[type="text"]{width:100%}.fieldhelpers-field-table .fieldhelpers-field-table-delete-columns{text-align:center}.fieldhelpers-field-toggle-container{position:relative;display:inline-block;width:60px;height:34px}.fieldhelpers-field-toggle-container.checked .fieldhelpers-field-toggle-slider{background-color:#007AB1}.fieldhelpers-field-toggle-container.checked .fieldhelpers-field-toggle-slider:before{transform:translateX(26px)}.fieldhelpers-field-toggle-container .fieldhelpers-field-toggle-slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;transition:transform 300ms}.fieldhelpers-field-toggle-container .fieldhelpers-field-toggle-slider:before{position:absolute;content:"";height:26px;width:26px;left:4px;bottom:4px;background-color:white;transition:transform 300ms}.fieldhelpers-field-wysiwyg-label{font-weight:bold}.fieldhelpers-field-tip{position:relative;display:inline-block}.fieldhelpers-field-tip.fieldhelpers-field-tip-align-left .fieldhelpers-field-tip-text{left:-10px}.fieldhelpers-field-tip.fieldhelpers-field-tip-align-left .fieldhelpers-field-tip-text:before{left:10px}.fieldhelpers-field-tip.fieldhelpers-field-tip-align-right .fieldhelpers-field-tip-text{right:-10px}.fieldhelpers-field-tip.fieldhelpers-field-tip-align-right .fieldhelpers-field-tip-text:before{right:10px}.fieldhelpers-field-tip:hover .fieldhelpers-field-tip-text{visibility:visible;opacity:1;transform:translateY(0)}.fieldhelpers-field-tip:hover .fieldhelpers-field-tip-toggle{color:#007AB1}.fieldhelpers-field-tip .fieldhelpers-field-tip-toggle{cursor:pointer;transition:color 300ms}.fieldhelpers-field-tip .fieldhelpers-field-tip-text{position:absolute;visibility:hidden;opacity:0;top:100%;margin-top:15px;background:#007AB1;color:#fff;padding:1em;width:300px;text-align:left;box-shadow:5px 5px 40px rgba(0,0,0,0.3);transform:translateY(10px);transition:visibility 300ms, opacity 300ms, transform 300ms;z-index:100}.fieldhelpers-field-tip .fieldhelpers-field-tip-text:before{content:'';position:absolute;bottom:100%;width:0;height:0;border-style:solid;border-width:0 10px 10px 10px;border-color:transparent transparent #007AB1 transparent}.fieldhelpers-field-tip .fieldhelpers-field-tip-text:after{content:'';position:absolute;bottom:100%;left:0;width:100%;height:15px}.fieldhelpers-field-tip .fieldhelpers-field-tip-text a{color:inherit !important;text-decoration:underline} - -/*# sourceMappingURL=rbm-field-helpers-admin.min.css.map */ diff --git a/assets/dist/css/rbm-field-helpers-admin.min.css.map b/assets/dist/css/rbm-field-helpers-admin.min.css.map deleted file mode 100644 index 78005f6..0000000 --- a/assets/dist/css/rbm-field-helpers-admin.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"rbm-field-helpers-admin.min.css","sources":["rbm-field-helpers-admin.scss","../../../../node_modules/flatpickr/dist/flatpickr.css","global/_settings.scss","global/_common.scss","global/_layout.scss","fields/_field.scss","fields/_field-checkbox.scss","fields/_field-colorpicker.scss","fields/_field-datetimepicker.scss","fields/_field-hidden.scss","fields/_field-list.scss","fields/_field-media.scss","fields/_field-number.scss","fields/_field-radio.scss","fields/_field-repeater.scss","fields/_field-select.scss","fields/_field-table.scss","fields/_field-toggle.scss","fields/_field-wysiwyg.scss","components/_field-tip.scss"],"sourcesContent":["// Vendor\n@import 'flatpickr';\n\n// Global\n@import \"global/settings\";\n@import \"global/common\";\n@import \"global/layout\";\n\n// Fields\n@import \"fields/field\";\n@import \"fields/field-checkbox\";\n@import \"fields/field-colorpicker\";\n@import \"fields/field-datetimepicker\";\n@import \"fields/field-hidden\";\n@import \"fields/field-list\";\n@import \"fields/field-media\";\n@import \"fields/field-number\";\n@import \"fields/field-radio\";\n@import \"fields/field-repeater\";\n@import \"fields/field-select\";\n@import \"fields/field-table\";\n@import \"fields/field-toggle\";\n@import \"fields/field-wysiwyg\";\n\n// Components\n@import \"components/field-tip\";",".flatpickr-calendar {\n background: transparent;\n opacity: 0;\n display: none;\n text-align: center;\n visibility: hidden;\n padding: 0;\n -webkit-animation: none;\n animation: none;\n direction: ltr;\n border: 0;\n font-size: 14px;\n line-height: 24px;\n border-radius: 5px;\n position: absolute;\n width: 307.875px;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n -ms-touch-action: manipulation;\n touch-action: manipulation;\n background: #fff;\n -webkit-box-shadow: 1px 0 0 #e6e6e6, -1px 0 0 #e6e6e6, 0 1px 0 #e6e6e6, 0 -1px 0 #e6e6e6, 0 3px 13px rgba(0,0,0,0.08);\n box-shadow: 1px 0 0 #e6e6e6, -1px 0 0 #e6e6e6, 0 1px 0 #e6e6e6, 0 -1px 0 #e6e6e6, 0 3px 13px rgba(0,0,0,0.08);\n}\n.flatpickr-calendar.open,\n.flatpickr-calendar.inline {\n opacity: 1;\n max-height: 640px;\n visibility: visible;\n}\n.flatpickr-calendar.open {\n display: inline-block;\n z-index: 99999;\n}\n.flatpickr-calendar.animate.open {\n -webkit-animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1);\n animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1);\n}\n.flatpickr-calendar.inline {\n display: block;\n position: relative;\n top: 2px;\n}\n.flatpickr-calendar.static {\n position: absolute;\n top: calc(100% + 2px);\n}\n.flatpickr-calendar.static.open {\n z-index: 999;\n display: block;\n}\n.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7) {\n -webkit-box-shadow: none !important;\n box-shadow: none !important;\n}\n.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1) {\n -webkit-box-shadow: -2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;\n box-shadow: -2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;\n}\n.flatpickr-calendar .hasWeeks .dayContainer,\n.flatpickr-calendar .hasTime .dayContainer {\n border-bottom: 0;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.flatpickr-calendar .hasWeeks .dayContainer {\n border-left: 0;\n}\n.flatpickr-calendar.showTimeInput.hasTime .flatpickr-time {\n height: 40px;\n border-top: 1px solid #e6e6e6;\n}\n.flatpickr-calendar.noCalendar.hasTime .flatpickr-time {\n height: auto;\n}\n.flatpickr-calendar:before,\n.flatpickr-calendar:after {\n position: absolute;\n display: block;\n pointer-events: none;\n border: solid transparent;\n content: '';\n height: 0;\n width: 0;\n left: 22px;\n}\n.flatpickr-calendar.rightMost:before,\n.flatpickr-calendar.rightMost:after {\n left: auto;\n right: 22px;\n}\n.flatpickr-calendar:before {\n border-width: 5px;\n margin: 0 -5px;\n}\n.flatpickr-calendar:after {\n border-width: 4px;\n margin: 0 -4px;\n}\n.flatpickr-calendar.arrowTop:before,\n.flatpickr-calendar.arrowTop:after {\n bottom: 100%;\n}\n.flatpickr-calendar.arrowTop:before {\n border-bottom-color: #e6e6e6;\n}\n.flatpickr-calendar.arrowTop:after {\n border-bottom-color: #fff;\n}\n.flatpickr-calendar.arrowBottom:before,\n.flatpickr-calendar.arrowBottom:after {\n top: 100%;\n}\n.flatpickr-calendar.arrowBottom:before {\n border-top-color: #e6e6e6;\n}\n.flatpickr-calendar.arrowBottom:after {\n border-top-color: #fff;\n}\n.flatpickr-calendar:focus {\n outline: 0;\n}\n.flatpickr-wrapper {\n position: relative;\n display: inline-block;\n}\n.flatpickr-months {\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n}\n.flatpickr-months .flatpickr-month {\n background: transparent;\n color: rgba(0,0,0,0.9);\n fill: rgba(0,0,0,0.9);\n height: 34px;\n line-height: 1;\n text-align: center;\n position: relative;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n overflow: hidden;\n -webkit-box-flex: 1;\n -webkit-flex: 1;\n -ms-flex: 1;\n flex: 1;\n}\n.flatpickr-months .flatpickr-prev-month,\n.flatpickr-months .flatpickr-next-month {\n text-decoration: none;\n cursor: pointer;\n position: absolute;\n top: 0;\n height: 34px;\n padding: 10px;\n z-index: 3;\n color: rgba(0,0,0,0.9);\n fill: rgba(0,0,0,0.9);\n}\n.flatpickr-months .flatpickr-prev-month.flatpickr-disabled,\n.flatpickr-months .flatpickr-next-month.flatpickr-disabled {\n display: none;\n}\n.flatpickr-months .flatpickr-prev-month i,\n.flatpickr-months .flatpickr-next-month i {\n position: relative;\n}\n.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month,\n.flatpickr-months .flatpickr-next-month.flatpickr-prev-month {\n/*\n /*rtl:begin:ignore*/\n/*\n */\n left: 0;\n/*\n /*rtl:end:ignore*/\n/*\n */\n}\n/*\n /*rtl:begin:ignore*/\n/*\n /*rtl:end:ignore*/\n.flatpickr-months .flatpickr-prev-month.flatpickr-next-month,\n.flatpickr-months .flatpickr-next-month.flatpickr-next-month {\n/*\n /*rtl:begin:ignore*/\n/*\n */\n right: 0;\n/*\n /*rtl:end:ignore*/\n/*\n */\n}\n/*\n /*rtl:begin:ignore*/\n/*\n /*rtl:end:ignore*/\n.flatpickr-months .flatpickr-prev-month:hover,\n.flatpickr-months .flatpickr-next-month:hover {\n color: #959ea9;\n}\n.flatpickr-months .flatpickr-prev-month:hover svg,\n.flatpickr-months .flatpickr-next-month:hover svg {\n fill: #f64747;\n}\n.flatpickr-months .flatpickr-prev-month svg,\n.flatpickr-months .flatpickr-next-month svg {\n width: 14px;\n height: 14px;\n}\n.flatpickr-months .flatpickr-prev-month svg path,\n.flatpickr-months .flatpickr-next-month svg path {\n -webkit-transition: fill 0.1s;\n transition: fill 0.1s;\n fill: inherit;\n}\n.numInputWrapper {\n position: relative;\n height: auto;\n}\n.numInputWrapper input,\n.numInputWrapper span {\n display: inline-block;\n}\n.numInputWrapper input {\n width: 100%;\n}\n.numInputWrapper input::-ms-clear {\n display: none;\n}\n.numInputWrapper input::-webkit-outer-spin-button,\n.numInputWrapper input::-webkit-inner-spin-button {\n margin: 0;\n -webkit-appearance: none;\n}\n.numInputWrapper span {\n position: absolute;\n right: 0;\n width: 14px;\n padding: 0 4px 0 2px;\n height: 50%;\n line-height: 50%;\n opacity: 0;\n cursor: pointer;\n border: 1px solid rgba(57,57,57,0.15);\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n}\n.numInputWrapper span:hover {\n background: rgba(0,0,0,0.1);\n}\n.numInputWrapper span:active {\n background: rgba(0,0,0,0.2);\n}\n.numInputWrapper span:after {\n display: block;\n content: \"\";\n position: absolute;\n}\n.numInputWrapper span.arrowUp {\n top: 0;\n border-bottom: 0;\n}\n.numInputWrapper span.arrowUp:after {\n border-left: 4px solid transparent;\n border-right: 4px solid transparent;\n border-bottom: 4px solid rgba(57,57,57,0.6);\n top: 26%;\n}\n.numInputWrapper span.arrowDown {\n top: 50%;\n}\n.numInputWrapper span.arrowDown:after {\n border-left: 4px solid transparent;\n border-right: 4px solid transparent;\n border-top: 4px solid rgba(57,57,57,0.6);\n top: 40%;\n}\n.numInputWrapper span svg {\n width: inherit;\n height: auto;\n}\n.numInputWrapper span svg path {\n fill: rgba(0,0,0,0.5);\n}\n.numInputWrapper:hover {\n background: rgba(0,0,0,0.05);\n}\n.numInputWrapper:hover span {\n opacity: 1;\n}\n.flatpickr-current-month {\n font-size: 135%;\n line-height: inherit;\n font-weight: 300;\n color: inherit;\n position: absolute;\n width: 75%;\n left: 12.5%;\n padding: 7.48px 0 0 0;\n line-height: 1;\n height: 34px;\n display: inline-block;\n text-align: center;\n -webkit-transform: translate3d(0px, 0px, 0px);\n transform: translate3d(0px, 0px, 0px);\n}\n.flatpickr-current-month span.cur-month {\n font-family: inherit;\n font-weight: 700;\n color: inherit;\n display: inline-block;\n margin-left: 0.5ch;\n padding: 0;\n}\n.flatpickr-current-month span.cur-month:hover {\n background: rgba(0,0,0,0.05);\n}\n.flatpickr-current-month .numInputWrapper {\n width: 6ch;\n width: 7ch\\0;\n display: inline-block;\n}\n.flatpickr-current-month .numInputWrapper span.arrowUp:after {\n border-bottom-color: rgba(0,0,0,0.9);\n}\n.flatpickr-current-month .numInputWrapper span.arrowDown:after {\n border-top-color: rgba(0,0,0,0.9);\n}\n.flatpickr-current-month input.cur-year {\n background: transparent;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n color: inherit;\n cursor: text;\n padding: 0 0 0 0.5ch;\n margin: 0;\n display: inline-block;\n font-size: inherit;\n font-family: inherit;\n font-weight: 300;\n line-height: inherit;\n height: auto;\n border: 0;\n border-radius: 0;\n vertical-align: initial;\n -webkit-appearance: textfield;\n -moz-appearance: textfield;\n appearance: textfield;\n}\n.flatpickr-current-month input.cur-year:focus {\n outline: 0;\n}\n.flatpickr-current-month input.cur-year[disabled],\n.flatpickr-current-month input.cur-year[disabled]:hover {\n font-size: 100%;\n color: rgba(0,0,0,0.5);\n background: transparent;\n pointer-events: none;\n}\n.flatpickr-current-month .flatpickr-monthDropdown-months {\n appearance: menulist;\n background: transparent;\n border: none;\n border-radius: 0;\n box-sizing: border-box;\n color: inherit;\n cursor: pointer;\n font-size: inherit;\n font-family: inherit;\n font-weight: 300;\n height: auto;\n line-height: inherit;\n margin: -1px 0 0 0;\n outline: none;\n padding: 0 0 0 0.5ch;\n position: relative;\n vertical-align: initial;\n -webkit-box-sizing: border-box;\n -webkit-appearance: menulist;\n -moz-appearance: menulist;\n width: auto;\n}\n.flatpickr-current-month .flatpickr-monthDropdown-months:focus,\n.flatpickr-current-month .flatpickr-monthDropdown-months:active {\n outline: none;\n}\n.flatpickr-current-month .flatpickr-monthDropdown-months:hover {\n background: rgba(0,0,0,0.05);\n}\n.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month {\n background-color: transparent;\n outline: none;\n padding: 0;\n}\n.flatpickr-weekdays {\n background: transparent;\n text-align: center;\n overflow: hidden;\n width: 100%;\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-align: center;\n -webkit-align-items: center;\n -ms-flex-align: center;\n align-items: center;\n height: 28px;\n}\n.flatpickr-weekdays .flatpickr-weekdaycontainer {\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-flex: 1;\n -webkit-flex: 1;\n -ms-flex: 1;\n flex: 1;\n}\nspan.flatpickr-weekday {\n cursor: default;\n font-size: 90%;\n background: transparent;\n color: rgba(0,0,0,0.54);\n line-height: 1;\n margin: 0;\n text-align: center;\n display: block;\n -webkit-box-flex: 1;\n -webkit-flex: 1;\n -ms-flex: 1;\n flex: 1;\n font-weight: bolder;\n}\n.dayContainer,\n.flatpickr-weeks {\n padding: 1px 0 0 0;\n}\n.flatpickr-days {\n position: relative;\n overflow: hidden;\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-align: start;\n -webkit-align-items: flex-start;\n -ms-flex-align: start;\n align-items: flex-start;\n width: 307.875px;\n}\n.flatpickr-days:focus {\n outline: 0;\n}\n.dayContainer {\n padding: 0;\n outline: 0;\n text-align: left;\n width: 307.875px;\n min-width: 307.875px;\n max-width: 307.875px;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n display: inline-block;\n display: -ms-flexbox;\n display: -webkit-box;\n display: -webkit-flex;\n display: flex;\n -webkit-flex-wrap: wrap;\n flex-wrap: wrap;\n -ms-flex-wrap: wrap;\n -ms-flex-pack: justify;\n -webkit-justify-content: space-around;\n justify-content: space-around;\n -webkit-transform: translate3d(0px, 0px, 0px);\n transform: translate3d(0px, 0px, 0px);\n opacity: 1;\n}\n.dayContainer + .dayContainer {\n -webkit-box-shadow: -1px 0 0 #e6e6e6;\n box-shadow: -1px 0 0 #e6e6e6;\n}\n.flatpickr-day {\n background: none;\n border: 1px solid transparent;\n border-radius: 150px;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n color: #393939;\n cursor: pointer;\n font-weight: 400;\n width: 14.2857143%;\n -webkit-flex-basis: 14.2857143%;\n -ms-flex-preferred-size: 14.2857143%;\n flex-basis: 14.2857143%;\n max-width: 39px;\n height: 39px;\n line-height: 39px;\n margin: 0;\n display: inline-block;\n position: relative;\n -webkit-box-pack: center;\n -webkit-justify-content: center;\n -ms-flex-pack: center;\n justify-content: center;\n text-align: center;\n}\n.flatpickr-day.inRange,\n.flatpickr-day.prevMonthDay.inRange,\n.flatpickr-day.nextMonthDay.inRange,\n.flatpickr-day.today.inRange,\n.flatpickr-day.prevMonthDay.today.inRange,\n.flatpickr-day.nextMonthDay.today.inRange,\n.flatpickr-day:hover,\n.flatpickr-day.prevMonthDay:hover,\n.flatpickr-day.nextMonthDay:hover,\n.flatpickr-day:focus,\n.flatpickr-day.prevMonthDay:focus,\n.flatpickr-day.nextMonthDay:focus {\n cursor: pointer;\n outline: 0;\n background: #e6e6e6;\n border-color: #e6e6e6;\n}\n.flatpickr-day.today {\n border-color: #959ea9;\n}\n.flatpickr-day.today:hover,\n.flatpickr-day.today:focus {\n border-color: #959ea9;\n background: #959ea9;\n color: #fff;\n}\n.flatpickr-day.selected,\n.flatpickr-day.startRange,\n.flatpickr-day.endRange,\n.flatpickr-day.selected.inRange,\n.flatpickr-day.startRange.inRange,\n.flatpickr-day.endRange.inRange,\n.flatpickr-day.selected:focus,\n.flatpickr-day.startRange:focus,\n.flatpickr-day.endRange:focus,\n.flatpickr-day.selected:hover,\n.flatpickr-day.startRange:hover,\n.flatpickr-day.endRange:hover,\n.flatpickr-day.selected.prevMonthDay,\n.flatpickr-day.startRange.prevMonthDay,\n.flatpickr-day.endRange.prevMonthDay,\n.flatpickr-day.selected.nextMonthDay,\n.flatpickr-day.startRange.nextMonthDay,\n.flatpickr-day.endRange.nextMonthDay {\n background: #569ff7;\n -webkit-box-shadow: none;\n box-shadow: none;\n color: #fff;\n border-color: #569ff7;\n}\n.flatpickr-day.selected.startRange,\n.flatpickr-day.startRange.startRange,\n.flatpickr-day.endRange.startRange {\n border-radius: 50px 0 0 50px;\n}\n.flatpickr-day.selected.endRange,\n.flatpickr-day.startRange.endRange,\n.flatpickr-day.endRange.endRange {\n border-radius: 0 50px 50px 0;\n}\n.flatpickr-day.selected.startRange + .endRange:not(:nth-child(7n+1)),\n.flatpickr-day.startRange.startRange + .endRange:not(:nth-child(7n+1)),\n.flatpickr-day.endRange.startRange + .endRange:not(:nth-child(7n+1)) {\n -webkit-box-shadow: -10px 0 0 #569ff7;\n box-shadow: -10px 0 0 #569ff7;\n}\n.flatpickr-day.selected.startRange.endRange,\n.flatpickr-day.startRange.startRange.endRange,\n.flatpickr-day.endRange.startRange.endRange {\n border-radius: 50px;\n}\n.flatpickr-day.inRange {\n border-radius: 0;\n -webkit-box-shadow: -5px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;\n box-shadow: -5px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;\n}\n.flatpickr-day.flatpickr-disabled,\n.flatpickr-day.flatpickr-disabled:hover,\n.flatpickr-day.prevMonthDay,\n.flatpickr-day.nextMonthDay,\n.flatpickr-day.notAllowed,\n.flatpickr-day.notAllowed.prevMonthDay,\n.flatpickr-day.notAllowed.nextMonthDay {\n color: rgba(57,57,57,0.3);\n background: transparent;\n border-color: transparent;\n cursor: default;\n}\n.flatpickr-day.flatpickr-disabled,\n.flatpickr-day.flatpickr-disabled:hover {\n cursor: not-allowed;\n color: rgba(57,57,57,0.1);\n}\n.flatpickr-day.week.selected {\n border-radius: 0;\n -webkit-box-shadow: -5px 0 0 #569ff7, 5px 0 0 #569ff7;\n box-shadow: -5px 0 0 #569ff7, 5px 0 0 #569ff7;\n}\n.flatpickr-day.hidden {\n visibility: hidden;\n}\n.rangeMode .flatpickr-day {\n margin-top: 1px;\n}\n.flatpickr-weekwrapper {\n float: left;\n}\n.flatpickr-weekwrapper .flatpickr-weeks {\n padding: 0 12px;\n -webkit-box-shadow: 1px 0 0 #e6e6e6;\n box-shadow: 1px 0 0 #e6e6e6;\n}\n.flatpickr-weekwrapper .flatpickr-weekday {\n float: none;\n width: 100%;\n line-height: 28px;\n}\n.flatpickr-weekwrapper span.flatpickr-day,\n.flatpickr-weekwrapper span.flatpickr-day:hover {\n display: block;\n width: 100%;\n max-width: none;\n color: rgba(57,57,57,0.3);\n background: transparent;\n cursor: default;\n border: none;\n}\n.flatpickr-innerContainer {\n display: block;\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n overflow: hidden;\n}\n.flatpickr-rContainer {\n display: inline-block;\n padding: 0;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n}\n.flatpickr-time {\n text-align: center;\n outline: 0;\n display: block;\n height: 0;\n line-height: 40px;\n max-height: 40px;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n overflow: hidden;\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n}\n.flatpickr-time:after {\n content: \"\";\n display: table;\n clear: both;\n}\n.flatpickr-time .numInputWrapper {\n -webkit-box-flex: 1;\n -webkit-flex: 1;\n -ms-flex: 1;\n flex: 1;\n width: 40%;\n height: 40px;\n float: left;\n}\n.flatpickr-time .numInputWrapper span.arrowUp:after {\n border-bottom-color: #393939;\n}\n.flatpickr-time .numInputWrapper span.arrowDown:after {\n border-top-color: #393939;\n}\n.flatpickr-time.hasSeconds .numInputWrapper {\n width: 26%;\n}\n.flatpickr-time.time24hr .numInputWrapper {\n width: 49%;\n}\n.flatpickr-time input {\n background: transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n border: 0;\n border-radius: 0;\n text-align: center;\n margin: 0;\n padding: 0;\n height: inherit;\n line-height: inherit;\n color: #393939;\n font-size: 14px;\n position: relative;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n -webkit-appearance: textfield;\n -moz-appearance: textfield;\n appearance: textfield;\n}\n.flatpickr-time input.flatpickr-hour {\n font-weight: bold;\n}\n.flatpickr-time input.flatpickr-minute,\n.flatpickr-time input.flatpickr-second {\n font-weight: 400;\n}\n.flatpickr-time input:focus {\n outline: 0;\n border: 0;\n}\n.flatpickr-time .flatpickr-time-separator,\n.flatpickr-time .flatpickr-am-pm {\n height: inherit;\n float: left;\n line-height: inherit;\n color: #393939;\n font-weight: bold;\n width: 2%;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n -webkit-align-self: center;\n -ms-flex-item-align: center;\n align-self: center;\n}\n.flatpickr-time .flatpickr-am-pm {\n outline: 0;\n width: 18%;\n cursor: pointer;\n text-align: center;\n font-weight: 400;\n}\n.flatpickr-time input:hover,\n.flatpickr-time .flatpickr-am-pm:hover,\n.flatpickr-time input:focus,\n.flatpickr-time .flatpickr-am-pm:focus {\n background: #eee;\n}\n.flatpickr-input[readonly] {\n cursor: pointer;\n}\n@-webkit-keyframes fpFadeInDown {\n from {\n opacity: 0;\n -webkit-transform: translate3d(0, -20px, 0);\n transform: translate3d(0, -20px, 0);\n }\n to {\n opacity: 1;\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n }\n}\n@keyframes fpFadeInDown {\n from {\n opacity: 0;\n -webkit-transform: translate3d(0, -20px, 0);\n transform: translate3d(0, -20px, 0);\n }\n to {\n opacity: 1;\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n }\n}\n","$primary-color: #007AB1;",".fieldhelpers-fieldset {\n border: 1px solid #ddd;\n padding: 0.5em;\n}","@mixin fieldhelpers-col() {\n box-sizing: border-box;\n padding: 0.5em;\n float: left;\n}\n\n.fieldhelpers-col {\n @include fieldhelpers-col();\n}\n\n@for $i from 1 through 5 {\n\n .fieldhelpers-col-#{$i} {\n\n @include fieldhelpers-col();\n width: #{100 / $i}#{\"%\"};\n\n @media only screen and (max-width: 640px) {\n width: 100%;\n }\n }\n}",".fieldhelpers-field {\n margin-bottom: 1em;\n}\n\n.fieldhelpers-field-header {\n margin-bottom: 0.5em;\n}\n\n.fieldhelpers-field-content {\n\t\n\t& > *, [data-image-preview] {\n\t\tmax-width: 100%;\n\t}\n\t\n}",".fieldhelpers-field-checkbox-container {\n display: inline-block;\n border: 1px solid #DFDFDF;\n background: #fff;\n width: 300px;\n max-width: 100%;\n}\n\n.fieldhelpers-field-checkbox-row {\n position: relative;\n cursor: pointer;\n transition: background 150ms;\n line-height: 30px;\n\n &:hover {\n background: darken(#fff, 5%);\n transition: background 0s;\n }\n\n &:after {\n content: '';\n clear: both;\n display: table;\n }\n\n &:not(:last-of-type) {\n border-bottom: 1px solid #DFDFDF;\n }\n\n &.fieldhelpers-field-checkbox-row-active {\n background: $primary-color;\n\n &:hover {\n background: darken($primary-color, 5%);\n }\n\n .fieldhelpers-field-checkbox-label {\n color: #fff;\n }\n }\n\n .fieldhelpers-field-checkbox-input-container {\n width: 15%;\n float: left;\n box-sizing: border-box;\n text-align: center;\n }\n\n input[type=\"checkbox\"] {\n margin: 0.5em 0.5em;\n }\n\n .fieldhelpers-field-checkbox-label {\n display: block;\n float: left;\n width: 85%;\n font-weight: bold;\n padding: 0 0.5em;\n border-left: 1px solid #DFDFDF;\n line-height: 30px;\n box-sizing: border-box;\n }\n}",".fieldhelpers-field-colorpicker {\n position: relative;\n\n .wp-picker-holder {\n position: absolute;\n left: 0;\n top: 100%;\n box-shadow: 5px 5px 30px rgba(#000, 0.5);\n z-index: 100;\n }\n}","input[readonly] {\n\n\t&.fieldhelpers-field-timepicker-preview, &.fieldhelpers-field-datetimepicker-preview, &.fieldhelpers-field-datepicker-preview {\n\n\t\tbackground-color: #fff;\n\n\t}\n\n}",".fieldhelpers-field-hidden {\n display: none;\n}",".fieldhelpers-field-list {\n .fieldhelpers-field-list-item {\n border: 1px solid #ddd;\n background-color: #fff;\n padding: 0.5em;\n margin-bottom: 0.5em;\n cursor: move;\n }\n\n .fieldhelpers-field-list-item-handle {\n color: #bbb;\n }\n}",".fieldhelpers-media-uploader {\n .media-url {\n display: block;\n width: 100%;\n word-break: break-all;\n box-sizing: border-box;\n }\n\n .image-preview {\n max-width: 100%;\n }\n}",".fieldhelpers-field-number {\n .fieldhelpers-field-number-container {\n width: 100px;\n\n &[data-postfix] {\n position: relative;\n\n &:after {\n content: attr(data-postfix);\n position: absolute;\n right: calc(20px + 0.5em);\n top: 50%;\n color: #aaa;\n transform: translateY(-50%);\n }\n }\n }\n\n // Excessive selector because WP tries to change it for mobile\n input[type=\"text\"].fieldhelpers-field-input {\n height: 40px;\n line-height: 40px;\n width: 80px;\n padding: 0;\n margin: 0;\n float: left;\n text-align: center;\n }\n\n .fieldhelpers-field-number-increase, .fieldhelpers-field-number-decrease {\n display: block;\n height: 20px;\n width: 20px;\n line-height: 20px;\n padding: 0;\n font-size: 14px;\n color: #fff;\n background: $primary-color;\n border: 1px solid darken($primary-color, 5%);\n box-shadow: 0 1px 0 darken($primary-color, 5%);\n outline: none;\n border-radius: 0;\n cursor: pointer;\n\n &:hover {\n color: #fff;\n background: lighten($primary-color, 5%);\n border-color: $primary-color;\n box-shadow: 0 1px 0 $primary-color;\n }\n\n &:active {\n transform: translateY(1px);\n }\n\n .dashicons {\n font-size: inherit;\n line-height: inherit;\n width: auto;\n height: auto;\n }\n }\n\n .fieldhelpers-field-number-increase {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n border-bottom-width: 0;\n }\n\n .fieldhelpers-field-number-decrease {\n border-bottom-left-radius: 3px;\n border-bottom-right-radius: 3px;\n }\n}",".fieldhelpers-field-radio-container {\n display: inline-block;\n border: 1px solid #DFDFDF;\n background: #fff;\n width: 300px;\n max-width: 100%;\n}\n\n.fieldhelpers-field-radio-row {\n position: relative;\n cursor: pointer;\n transition: background 150ms;\n\n &:hover {\n background: darken(#fff, 5%);\n transition: background 0s;\n }\n\n &:after {\n content: '';\n clear: both;\n display: table;\n }\n\n &:not(:last-of-type) {\n border-bottom: 1px solid #DFDFDF;\n }\n\n &.fieldhelpers-field-radio-row-active {\n background: $primary-color;\n\n &:hover {\n background: darken($primary-color, 5%);\n }\n\n .fieldhelpers-field-radio-label {\n color: #fff;\n }\n }\n\n .fieldhelpers-field-radio-input-container {\n width: 15%;\n float: left;\n box-sizing: border-box;\n text-align: center;\n }\n\n input[type=\"radio\"] {\n margin: 0.5em 0.5em;\n }\n\n .fieldhelpers-field-radio-label {\n display: block;\n float: left;\n width: 85%;\n font-weight: bold;\n padding: 0 0.5em;\n border-left: 1px solid #DFDFDF;\n line-height: 30px;\n box-sizing: border-box;\n }\n}",".fieldhelpers-field-repeater-label {\n font-weight: bold;\n}\n\n.fieldhelpers-field-repeater-list {\n\n .fieldhelpers-sortable-placeholder {\n border: 3px dashed #ddd;\n }\n\n .fieldhelpers-field-repeater-content{\n &:after {\n content: '';\n display: table;\n clear: both;\n }\n }\n\n}\n\n.fieldhelpers-field-repeater-row {\n padding: 0.5em;\n margin: 0.5em 0;\n border: 1px solid #ddd;\n background: #fff;\n\n &:before {\n content: '';\n display: table;\n clear: both;\n }\n\n &.ui-sortable-helper {\n opacity: 0.5;\n }\n\n .fieldhelpers-field-repeater-handle {\n height: 20px;\n cursor: move;\n margin-bottom: 10px;\n background-image: -webkit-repeating-radial-gradient(center center, rgba(0, 0, 0, .2), rgba(0, 0, 0, .2) 1px, transparent 1px, transparent 100%);\n background-image: -moz-repeating-radial-gradient(center center, rgba(0, 0, 0, .2), rgba(0, 0, 0, .2) 1px, transparent 1px, transparent 100%);\n background-image: -ms-repeating-radial-gradient(center center, rgba(0, 0, 0, .2), rgba(0, 0, 0, .2) 1px, transparent 1px, transparent 100%);\n background-image: repeating-radial-gradient(center center, rgba(0, 0, 0, .2), rgba(0, 0, 0, .2) 1px, transparent 1px, transparent 100%);\n background-size: 3px 3px;\n }\n}\n\n.fieldhelpers-field-repeater-collapsable {\n .fieldhelpers-field-repeater-content {\n display: none;\n }\n\n .fieldhelpers-field-repeater-header-interior {\n padding: 0 0.5em 0 0.5em;\n\n .fieldhelpers-field-repeater-delete-button {\n float: right;\n }\n }\n\n .fieldhelpers-field-repeater-collapsable-handle {\n cursor: pointer;\n }\n\n .fieldhelpers-field-repeater-row.opened {\n .fieldhelpers-field-repeater-collapsable-collapse-icon{\n transform: rotate(180deg);\n }\n }\n\n .fieldhelpers-field-repeater-collapsable-collapse-icon {\n transition: transform 300ms ease-in 0s;\n\n &:hover {\n cursor: pointer;\n }\n }\n}",".select2-container--default .fieldhelpers-select2 {\n\n &.select2-selection--single,\n &.select2-selection--multiple {\n\n &.select2-selection {\n border-radius: 0;\n border: 1px solid #ddd;\n box-shadow: inset 0 1px 2px rgba(#000, 0.07);\n outline: none;\n margin: 1px;\n height: auto;\n }\n\n .select2-selection__rendered {\n line-height: inherit;\n padding: 3px 5px;\n font-size: 14px;\n }\n\n .select2-search {\n margin-bottom: 0;\n }\n\n .select2-selection__choice {\n border-radius: 0;\n }\n\n .select2-selection__clear {\n margin-right: 15px;\n }\n }\n\n &.select2-dropdown {\n border-radius: 0;\n border: 1px solid #ddd;\n box-shadow: 5px 5px 40px rgba(#000, 0.3);\n\n .select2-results__option--highlighted[aria-selected] {\n background-color: $primary-color;\n }\n\n .select2-results__option {\n margin-bottom: 0;\n }\n }\n}",".fieldhelpers-field-table {\n\n .fieldhelpers-field-table-loading {\n text-align: center;\n\n .spinner {\n float: none;\n display: inline-block;\n }\n }\n\n table {\n width: 100%;\n border-collapse: collapse;\n }\n\n th, td {\n padding: 5px;\n }\n\n thead {\n input[type=\"text\"] {\n background: #fff78a;\n }\n }\n\n input[type=\"text\"] {\n width: 100%;\n }\n\n .fieldhelpers-field-table-delete-columns {\n text-align: center;\n }\n}",".fieldhelpers-field-toggle-container {\n position: relative;\n display: inline-block;\n width: 60px;\n height: 34px;\n\n &.checked {\n .fieldhelpers-field-toggle-slider {\n background-color: $primary-color;\n\n &:before {\n transform: translateX(26px);\n }\n }\n }\n\n .fieldhelpers-field-toggle-slider {\n position: absolute;\n cursor: pointer;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: #ccc;\n transition: transform 300ms;\n\n &:before {\n position: absolute;\n content: \"\";\n height: 26px;\n width: 26px;\n left: 4px;\n bottom: 4px;\n background-color: white;\n transition: transform 300ms;\n }\n }\n}",".fieldhelpers-field-wysiwyg-label {\n font-weight: bold;\n}",".fieldhelpers-field-tip {\n position: relative;\n display: inline-block;\n\n &.fieldhelpers-field-tip-align-left {\n .fieldhelpers-field-tip-text {\n left: -10px;\n\n &:before {\n left: 10px;\n }\n }\n }\n\n &.fieldhelpers-field-tip-align-right {\n .fieldhelpers-field-tip-text {\n right: -10px;\n\n &:before {\n right: 10px;\n }\n }\n }\n\n &:hover {\n .fieldhelpers-field-tip-text {\n visibility: visible;\n opacity: 1;\n transform: translateY(0);\n }\n\n .fieldhelpers-field-tip-toggle {\n color: $primary-color;\n }\n }\n\n .fieldhelpers-field-tip-toggle {\n cursor: pointer;\n transition: color 300ms;\n }\n\n .fieldhelpers-field-tip-text {\n position: absolute;\n visibility: hidden;\n opacity: 0;\n top: 100%;\n margin-top: 15px;\n background: $primary-color;\n color: #fff;\n padding: 1em;\n width: 300px;\n text-align: left;\n box-shadow: 5px 5px 40px rgba(#000, 0.3);\n transform: translateY(10px);\n transition: visibility 300ms, opacity 300ms, transform 300ms;\n z-index: 100;\n\n &:before {\n content: '';\n position: absolute;\n bottom: 100%;\n width: 0;\n height: 0;\n border-style: solid;\n border-width: 0 10px 10px 10px;\n border-color: transparent transparent $primary-color transparent;\n }\n\n &:after {\n content: '';\n position: absolute;\n bottom: 100%;\n left: 0;\n width: 100%;\n height: 15px;\n }\n\n a {\n color: inherit !important;\n text-decoration: underline;\n }\n }\n}"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/assets/dist/js/rbm-field-helpers-admin.js b/assets/dist/js/rbm-field-helpers-admin.js index 9ad1ae0..04b5a9c 100644 --- a/assets/dist/js/rbm-field-helpers-admin.js +++ b/assets/dist/js/rbm-field-helpers-admin.js @@ -7246,5 +7246,4 @@ var FieldToggleInitialize = function () { exports.default = FieldToggleInitialize; /***/ }) -/******/ ]); -//# sourceMappingURL=rbm-field-helpers-admin.js.map +/******/ ]); \ No newline at end of file diff --git a/assets/dist/js/rbm-field-helpers-admin.js.map b/assets/dist/js/rbm-field-helpers-admin.js.map deleted file mode 100644 index 67b6722..0000000 --- a/assets/dist/js/rbm-field-helpers-admin.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap 30a482c22d358aa9a099","webpack:///./assets/src/js/admin/fields/field.js","webpack:///./assets/src/js/admin/fields-init.js","webpack:///./assets/src/js/admin/rbm-field-helpers-admin.js","webpack:///./node_modules/jquery.repeater/jquery.repeater.js","webpack:///./node_modules/flatpickr/dist/flatpickr.js","webpack:///./assets/src/js/admin/fields/field-number.js","webpack:///./assets/src/js/admin/fields/field-colorpicker.js","webpack:///./assets/src/js/admin/fields/field-datepicker.js","webpack:///./assets/src/js/admin/fields/field-timepicker.js","webpack:///./assets/src/js/admin/fields/field-datetimepicker.js","webpack:///./assets/src/js/admin/fields/field-table.js","webpack:///./assets/src/js/admin/fields/field-media.js","webpack:///./assets/src/js/admin/fields/field-list.js","webpack:///./assets/src/js/admin/fields/field-repeater.js","webpack:///./assets/src/js/admin/fields/field-select.js","webpack:///./assets/src/js/admin/fields/field-textarea.js","webpack:///./assets/src/js/admin/fields/field-checkbox.js","webpack:///./assets/src/js/admin/fields/field-radio.js","webpack:///./assets/src/js/admin/fields/field-toggle.js"],"names":["Field","$field","type","$wrapper","closest","name","attr","instance","getRepeater","getOptions","repeater","repeaterSupport","RBM_FieldHelpers","options","console","error","length","$repeater","parent","on","event","repeaterBeforeInit","repeaterOnInit","repeaterBeforeAddItem","repeaterOnAddItem","repeaterBeforeDeleteSelf","repeaterBeforeDeleteItem","repeaterOnDeleteItem","find","repeaterOnSort","repeaterSetID","fieldCleanup","index","newID","id","default","val","change","FieldsInitialize","$root","fields","checkbox","toggle","radio","select","textarea","number","colorpicker","datepicker","timepicker","datetimepicker","table","media","list","jQuery","Fields","document","trigger","window","rbmFHinitField","rbmFHgetFieldObject","fieldType","data","classNames","first","test","exec","$","identity","x","isArray","value","isObject","Object","isNumber","Number","isFunction","Function","indexOf","object","inArray","array","foreach","collection","callback","i","hasOwnProperty","last","argumentsToArray","args","Array","prototype","slice","call","extend","extended","arguments","o","key","mapToArray","mapped","coll","push","mapToObject","keyCallback","map","pluck","arrayOfObjects","filter","filtered","functionName","apply","throttle","minimumInterval","timeout","that","setTimeout","mixinPubSub","topics","publish","topic","subscribe","unsubscribe","subscribers","splice","createBaseInput","fig","my","self","$self","getType","selector","disable","prop","enable","equalTo","a","b","publishChange","oldValue","e","domElement","newValue","get","createInput","set","clear","buildSetter","inputEqualToArray","isEqual","createInputButton","createInputCheckbox","values","each","newValues","createInputEmail","createInputText","createInputFile","split","wrap","reset","unwrap","createInputHidden","createInputMultipleFile","fileListObject","files","names","createInputMultipleSelect","createInputPassword","createInputRadio","createInputRange","createInputSelect","createInputTextarea","createInputURL","buildFormInputs","inputs","constructor","constructorOverride","button","text","url","email","password","range","file","hidden","addInputsBasic","$input","addInputsGroup","is","fn","inputVal","inputName","inputOnChange","input","inputDisable","inputEnable","inputClear","repeaterVal","parse","raw","parsed","parsedKey","match","concat","bracketed","replace","build","p","head","shift","grouped","built","group","setList","show","hide","removeElement","$list","$filterNested","$items","repeaters","join","$itemTemplate","clone","$firstDeleteButton","isFirstItemUndeletable","remove","getGroupName","groupName","$parent","initNested","$listItems","$item","nestedFig","$foreachRepeaterInItem","cb","setIndexes","matches","newName","removeAttr","initEmpty","ready","appendItem","setItemsValues","defaultValues","inputNames","fieldName","$template","append","addItem","rows","click","global","factory","exports","module","flatpickr","__assign","assign","t","s","n","HOOKS","defaults","_disable","_enable","allowInput","altFormat","altInput","altInputClass","animate","navigator","userAgent","ariaDateFormat","clickOpens","closeOnSelect","conjunction","dateFormat","defaultHour","defaultMinute","defaultSeconds","disableMobile","enableSeconds","enableTime","errorHandler","err","warn","getWeek","givenDate","date","Date","getTime","setHours","setDate","getDate","getDay","week1","getFullYear","Math","round","hourIncrement","ignoredFocusElements","inline","locale","minuteIncrement","mode","monthSelectorType","nextArrow","noCalendar","now","onChange","onClose","onDayCreate","onDestroy","onKeyDown","onMonthChange","onOpen","onParseConfig","onReady","onValueUpdate","onYearChange","onPreCalendarPosition","plugins","position","positionElement","undefined","prevArrow","shorthandCurrentMonth","showMonths","static","time_24hr","weekNumbers","english","weekdays","shorthand","longhand","months","daysInMonth","firstDayOfWeek","ordinal","nth","rangeSeparator","weekAbbreviation","scrollTitle","toggleTitle","amPM","yearAriaLabel","hourAriaLabel","minuteAriaLabel","pad","int","bool","debounce","func","wait","immediate","context","clearTimeout","arrayify","obj","toggleClass","elem","className","classList","add","createElement","tag","content","textContent","clearNode","node","firstChild","removeChild","findParent","condition","parentNode","createNumberInput","inputClassName","opts","wrapper","numInput","arrowUp","arrowDown","pattern","setAttribute","appendChild","getEventTarget","composedPath","path","target","doNothing","monthToStr","monthNumber","revFormat","D","F","dateObj","monthName","setMonth","G","hour","parseFloat","H","J","day","K","getHours","RegExp","M","shortMonth","S","seconds","setSeconds","U","_","unixSeconds","W","weekNum","weekNumber","parseInt","Y","year","setFullYear","Z","ISODate","d","h","minutes","setMinutes","j","l","m","month","u","unixMillSeconds","w","y","tokenRegex","formats","toISOString","getMonth","getSeconds","getMinutes","String","substring","createDateFormatter","_a","_b","config","_c","l10n","frmt","overrideLocale","formatDate","c","arr","createDateParser","givenFormat","timeless","customLocale","parsedDate","dateOrig","toFixed","format","datestr","trim","parseDate","matched","ops","matchIndex","regexStr","token_1","isBackSlash","escaped","forEach","isNaN","Error","compareDates","date1","date2","isBetween","ts","ts1","ts2","min","max","duration","DAY","_i","TypeError","_loop_1","source","keys","args_1","DEBOUNCED_CHANGE_MS","FlatpickrInstance","element","instanceConfig","defaultConfig","_handlers","pluginElements","loadedPlugins","_bind","bind","_setHoursFromDate","setHoursFromDate","_positionCalendar","positionCalendar","changeMonth","changeYear","close","_createElement","destroy","isEnabled","jumpToDate","open","redraw","setupHelperFunctions","utils","getDaysInMonth","yr","currentMonth","currentYear","init","isOpen","parseConfig","setupLocale","setupInputs","setupDates","isMobile","bindEvents","selectedDates","latestSelectedDateObj","minDate","updateValue","setCalendarWidth","showTimeInput","isSafari","triggerEvent","bindToInstance","requestAnimationFrame","calendarContainer","style","visibility","display","daysContainer","daysWidth","days","offsetWidth","width","weekWrapper","removeProperty","updateTime","setDefaultTime","timeWrapper","prevValue","_input","setHoursFromInputs","_debouncedChange","ampm2military","military2ampm","hourElement","minuteElement","hours","secondElement","limitMinHours","minTime","minDateHasTime","limitMaxHours","maxTime","maxDate","maxDateHasTime","setDefaultHours","minHr","minMinutes","maxHr","maxMinutes","onYearInput","delta","toString","handler","ev","el","addEventListener","onClick","evt","which","triggerChange","querySelectorAll","setupMobile","debouncedResize","onResize","onMouseOver","body","ontouchstart","documentClick","capture","monthNav","onMonthNavClick","selectDate","timeContainer","selText","timeIncrement","jumpDate","jumpTo","oldYear","oldMonth","message","buildMonthSwitch","incrementNumInput","contains","inputElem","createEvent","dispatchEvent","fragment","createDocumentFragment","tabIndex","buildMonthNav","innerContainer","buildWeeks","rContainer","buildWeekdays","buildDays","buildTime","customAppend","appendTo","nodeType","insertBefore","nextSibling","createDay","dayNumber","dateIsEnabled","dayElement","$i","todayDateElem","isDateSelected","selectedDateElem","isDateInRange","insertAdjacentHTML","focusOnDayElem","targetNode","focus","getFirstAvailableDay","startMonth","endMonth","children","startIndex","endIndex","getNextAvailableDay","current","givenMonth","loopDelta","numMonthDays","abs","focusOnDay","offset","dayFocused","isInView","activeElement","startElem","buildMonthDays","firstOfMonth","prevMonthDays","isMultiMonth","prevMonthDayClass","nextMonthDayClass","dayIndex","dayNum","dayContainer","frag","shouldBuildMonth","monthsDropdownContainer","innerHTML","selected","buildMonth","container","monthNavFragment","monthElement","selectedMonth","yearInput","tabindex","yearElement","getElementsByTagName","disabled","buildMonths","prevMonthNav","yearElements","monthElements","nextMonthNav","defineProperty","__hidePrevMonthArrow","__hideNextMonthArrow","currentYearElement","updateNavigationCurrentMonth","separator","hourInput","minuteInput","secondInput","getAttribute","title","weekdayContainer","updateWeekdays","isOffset","_hidePrevMonthArrow","_hideNextMonthArrow","triggerChangeEvent","toInitial","mobileInput","_initialDate","removeEventListener","lastChild","_type","removeAttribute","k","isCalendarElem","eventTarget_1","isCalendarElement","isInput","lostFocus","relatedTarget","isIgnored","some","newYear","newYearNum","isNewYear","dateToCheck","from","to","allowKeydown","allowInlineKeydown","keyCode","blur","isTimeObj","preventDefault","focusAndClose","delta_1","ctrlKey","stopPropagation","elems","shiftKey","charAt","toLowerCase","hoverDate","firstElementChild","initialDate","rangeStartDate","rangeEndDate","containsDisabled","minRange","maxRange","dayElem","timestamp","outOfRange","_positionElement","wasOpen","minMaxDateSetter","inverseDateObj","boolOpts","userConfig","JSON","stringify","dataset","dates","parseDateRules","timeMode","defaultDateFormat","defaultAltFormat","_minDate","_maxDate","minMaxTimeSetter","_minTime","_maxTime","hook","pluginConf","l10ns","customPositionElement","calendarHeight","reduce","acc","child","offsetHeight","calendarWidth","configPos","configPosVertical","configPosHorizontal","inputBounds","getBoundingClientRect","distanceFromBottom","innerHeight","bottom","showOnTop","top","pageYOffset","left","pageXOffset","right","rightMost","centerMost","doc","styleSheets","bodyWidth","centerLeft","centerBefore","centerAfter","centerIndex","cssRules","centerStyle","insertRule","msMaxTouchPoints","isSelectable","selectedDate","shouldChangeMonth","selectedIndex","sort","single","CALLBACKS","option","setSelectedDate","inputDate","rule","preloadedDate","defaultDate","nodeName","placeholder","_showTimeInput","querySelector","required","inputType","step","mobileFormatStr","defaultValue","hooks","initEvent","getDateStr","dObj","isPrevMonth","isNextMonth","isKeyDown","curValue","isHourElem","isMinuteElem","_flatpickr","nodeList","nodes","HTMLElement","instances","HTMLCollection","NodeList","Node","en","localize","setDefaults","fp_incr","FieldNumber","initField","$ui","increase","decrease","intervals","normal","increaseInterval","alt","altIncreaseInterval","decreaseInterval","altDecreaseInterval","constrainMax","constrainMin","constraints","shiftKeyUtility","setupHandlers","initialValue","validateInput","shiftKeyDown","increaseNumber","decreaseNumber","inputExternalChange","amount","newNumber","status","currentValue","constrainNumber","toggleDecreaseDisabledUI","toggleIncreaseDisabledUI","FieldNumberInitialize","api","$fields","initializeField","FieldColorPicker","initializeColorpicker","setDefault","wpColorPicker","colorpickerOptions","FieldColorPickerInitialize","FieldDatePicker","option_functions","datepickerOptions","FieldDatePickerInitialize","FieldTimePicker","timepickerOptions","FieldTimePickerInitialize","FieldDateTimePicker","datetimepickerOptions","FieldDateTimePickerInitialize","FieldTable","actions","loading","thead","tbody","addRow","addColumn","buildTable","deleteRow","deleteColumn","updateTableData","$headCells","dataHead","currentCell","$bodyRows","dataBody","currentRow","hasClass","rowData","$cells","columns","row","html","$row","cell","cell_i","$cell","$deleteRow","row_i","FieldTableInitialize","FieldMedia","addButton","imagePreview","mediaPreview","removeButton","mediaFrame","wp","frames","meta_image_frame","imageProperties","previewSize","addMedia","removeMedia","selectMedia","mediaAttachment","state","toJSON","previewUrl","sizes","FieldMediaInitialize","FieldList","sortable","FieldListInitialize","FieldRepeater","$repeaterList","repeaterShow","deleteItem","repeaterHide","empty","collapsable","initCollapsable","initSortable","log","toggleCollapse","axis","handle","forcePlaceholderSize","stop","ui","$content","slideDown","addClass","removeClass","slideUp","css","confirm","FieldRepeaterInitialize","FieldSelect","select2Disabled","rbmfhselect2","setupSelect2Options","select2Options","language","setupL10n","callbackOptions","callbackName","optGroups","optGroupSelectionPrefix","templateSelection","item","optGroup","$oldSelect","next","FieldSelectInitialize","FieldTextArea","wysiwyg","editor","settings","getDefaultEditorSettings","wysiwygOptions","initialize","tinymce","getDefaultSettings","FieldTextAreaInitialize","FieldCheckbox","checkboxes","handleChange","setActive","setInactive","ID","$rows","$label","fieldIndex","FieldCheckboxInitialize","FieldRadio","radios","FieldRadioInitialize","FieldToggle","getUI","slider","handleClick","isChecked","uncheckedValue","checkedValue","FieldToggleInitialize"],"mappings":"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","file":"rbm-field-helpers-admin.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 2);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 30a482c22d358aa9a099","/**\n * Main field class.\n *\n * @since 1.4.0\n */\nclass Field {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $field\n * @param {string} type\n */\n constructor($field, type) {\n\n this.$field = $field;\n this.$wrapper = $field.closest('.fieldhelpers-field');\n this.type = type;\n this.name = this.$wrapper.attr('data-fieldhelpers-name');\n this.instance = this.$wrapper.attr('data-fieldhelpers-instance');\n\n this.getRepeater();\n\n this.getOptions();\n\n if ( this.repeater ) {\n\n this.repeaterSupport();\n }\n\t\t\n\t\t// Put in global scope for other methods to interact with it\n\t\tif ( typeof RBM_FieldHelpers[ this.instance ]['fieldObjects'] == 'undefined' ) {\n\t\t\tRBM_FieldHelpers[ this.instance ]['fieldObjects'] = {};\n\t\t}\n\t\t\n\t\tif ( typeof RBM_FieldHelpers[ this.instance ]['fieldObjects'][ this.type ] == 'undefined' ) {\n\t\t\tRBM_FieldHelpers[ this.instance ]['fieldObjects'][ this.type ] = {};\n\t\t}\n\t\t\t\n\t\tRBM_FieldHelpers[ this.instance ]['fieldObjects'][ this.type ][ this.name ] = this;\n\t\t\n }\n\n /**\n * Initializes the field.\n *\n * @since 1.4.0\n */\n initField() {\n }\n\n /**\n * Gets field options.\n *\n * @since 1.4.0\n */\n getOptions() {\n\n this.options = {};\n\n if ( typeof RBM_FieldHelpers[this.instance] === 'undefined' ) {\n\n console.error(`Field Helpers Error: Data for ${this.instance} instance cannot be found.`);\n return;\n }\n\n if ( this.repeater ) {\n\n if ( typeof RBM_FieldHelpers[this.instance]['repeaterFields'][this.repeater] === 'undefined' ) {\n\n console.error(`Field Helpers Error: Data for repeater ${this.type} sub-fields cannot be found.`);\n return;\n }\n\n if ( typeof RBM_FieldHelpers[this.instance]['repeaterFields'][this.repeater][this.name] === 'undefined' ) {\n\n console.error(`Field Helpers Error: Cannot find field options for repeater ${this.type} sub-field with name: ${this.name}.`);\n return;\n }\n\n this.options = RBM_FieldHelpers[this.instance]['repeaterFields'][this.repeater][this.name];\n\n } else {\n\n if ( typeof RBM_FieldHelpers[this.instance][this.type] === 'undefined' ) {\n\n console.error(`Field Helpers Error: Data for ${this.type} fields cannot be found.`);\n return;\n }\n\n if ( typeof RBM_FieldHelpers[this.instance][this.type][this.name] === 'undefined' ) {\n\n console.error(`Field Helpers Error: Cannot find field options for ${this.type} field with name: ${this.name}.`);\n return;\n }\n\n this.options = RBM_FieldHelpers[this.instance][this.type][this.name];\n }\n }\n\n /**\n * If field is in a Repeater, it will need support.\n *\n * @since 1.4.0\n */\n getRepeater() {\n\n if ( this.$field.closest('[data-fieldhelpers-field-repeater]').length ) {\n\n this.$repeater = this.$field.parent().closest('[data-fieldhelpers-field-repeater]');\n this.repeater = this.$repeater.closest('.fieldhelpers-field-repeater').attr('data-fieldhelpers-name');\n }\n }\n\n /**\n * Runs some functions if inside a Repeater.\n *\n * @since 1.4.0\n */\n repeaterSupport() {\n\n // Triggers fields can utilize. Wrapped in anonymous to utilize self access.\n this.$repeater.on('repeater-before-init', ( event, $repeater, options ) => {\n this.repeaterBeforeInit( $repeater, options );\n });\n this.$repeater.on('repeater-init', ( event, $repeater, options ) => {\n this.repeaterOnInit( $repeater, options );\n });\n this.$repeater.on('repeater-before-add-item', () => {\n this.repeaterBeforeAddItem();\n });\n this.$repeater.on('repeater-add-item', () => {\n this.repeaterOnAddItem();\n });\n this.$field.closest('[data-repeater-item]').on('repeater-before-delete-item', () => {\n this.repeaterBeforeDeleteSelf();\n });\n this.$repeater.on('repeater-before-delete-item', () => {\n this.repeaterBeforeDeleteItem();\n });\n this.$repeater.on('repeater-delete-item', () => {\n this.repeaterOnDeleteItem();\n });\n this.$repeater.find('.fieldhelpers-field-repeater-list').on('list-update', () => {\n this.repeaterOnSort();\n });\n\n this.repeaterSetID();\n this.fieldCleanup();\n }\n\n /**\n * Fires before Repeater init.\n *\n * @since 1.5.0\n */\n repeaterBeforeInit( $repeater, options ) {\n }\n\n /**\n * Fires on Repeater init.\n *\n * @since 1.4.0\n */\n repeaterOnInit( $repeater, options ) {\n }\n\n /**\n * Fires before Repeater add item.\n *\n * @since 1.4.0\n */\n repeaterBeforeAddItem() {\n }\n\n /**\n * Fires on Repeater add item.\n *\n * @since 1.4.0\n */\n repeaterOnAddItem() {\n }\n\n /**\n * Fires before Repeater delete item (localized to self).\n *\n * @since 1.4.0\n */\n repeaterBeforeDeleteSelf() {\n }\n\n /**\n * Fires before Repeater delete item.\n *\n * @since 1.4.0\n */\n repeaterBeforeDeleteItem() {\n }\n\n /**\n * Fires on Repeater delete item.\n *\n * @since 1.4.0\n */\n repeaterOnDeleteItem() {\n }\n\n /**\n * Fires on Repeat sort item.\n *\n * @since 1.4.0\n */\n repeaterOnSort() {\n }\n\n /**\n * Sets the ID to be unique, based off the repeater item index.\n *\n * @since 1.4.0\n */\n repeaterSetID() {\n\n let index = this.$field.closest('[data-repeater-item]').index();\n let newID = `${this.options.id}_${index}`;\n\n this.$field.attr('id', newID);\n }\n\n /**\n * Cleans up after a repeater add/init.\n *\n * @since 1.4.0\n */\n fieldCleanup() {\n }\n\n /**\n * Sets the field to default. Override in child class if need different method.\n *\n * @since 1.4.0\n */\n setDefault() {\n\n if ( this.options.default ) {\n\n this.$field.val(this.options.default).change();\n }\n }\n}\n\nexport default Field;\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/admin/fields/field.js","import FieldNumberInitialize from \"./fields/field-number\";\nimport FieldColorPickerInitialize from \"./fields/field-colorpicker\";\nimport FieldDatePickerInitialize from \"./fields/field-datepicker\";\nimport FieldTimePickerInitialize from \"./fields/field-timepicker\";\nimport FieldDateTimePickerInitialize from \"./fields/field-datetimepicker\";\nimport FieldTableInitialize from \"./fields/field-table\";\nimport FieldMediaInitialize from \"./fields/field-media\";\nimport FieldListInitialize from \"./fields/field-list\";\nimport FieldRepeaterInitialize from \"./fields/field-repeater\";\nimport FieldSelectInitialize from \"./fields/field-select\";\nimport FieldTextAreaInitialize from \"./fields/field-textarea\";\nimport FieldCheckboxInitialize from \"./fields/field-checkbox\";\nimport FieldRadioInitialize from \"./fields/field-radio\";\nimport FieldToggleInitialize from \"./fields/field-toggle\";\n\n/**\n * Handles all field initializations.\n *\n * @since 1.4.0\n */\nclass FieldsInitialize {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $root Root element to initialize fields inside.\n */\n constructor($root) {\n\n this.fields = {\n checkbox: new FieldCheckboxInitialize($root),\n toggle: new FieldToggleInitialize($root),\n radio: new FieldRadioInitialize($root),\n select: new FieldSelectInitialize($root),\n textarea: new FieldTextAreaInitialize($root),\n number: new FieldNumberInitialize($root),\n colorpicker: new FieldColorPickerInitialize($root),\n datepicker: new FieldDatePickerInitialize($root),\n timepicker: new FieldTimePickerInitialize($root),\n datetimepicker: new FieldDateTimePickerInitialize($root),\n table: new FieldTableInitialize($root),\n media: new FieldMediaInitialize($root),\n list: new FieldListInitialize($root),\n repeater: new FieldRepeaterInitialize($root),\n };\n }\n}\n\nexport default FieldsInitialize;\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/admin/fields-init.js","import 'jquery.repeater';\nimport 'flatpickr';\nimport FieldsInitialize from \"./fields-init\";\n\n// Initialize app on jQuery Ready.\njQuery(() => {\n\n const Fields = new FieldsInitialize(jQuery(document));\n\tjQuery( document ).trigger( 'rbm-field-helpers-ready' );\n});\n\n// Re-init any fields within a container\nwindow.rbmFHinitField = function( $root ) {\n\t\n\tnew FieldsInitialize( $root );\n\t\n}\n\n// Grab Field Object from the RBM_FieldHelpers global in order to run methods on them\nwindow.rbmFHgetFieldObject = function( name, instance = null, fieldType = null ) {\n\t\n\tif ( instance === null ) {\n\t\t\n\t\tinstance = jQuery( '.fieldhelpers-field[data-fieldhelpers-name=\"' + name + '\"]' ).data( 'fieldhelpers-instance' );\n\t\t\n\t}\n\t\n\tif ( fieldType === null ) {\n\t\t\n\t\tlet classNames = jQuery( '.fieldhelpers-field[data-fieldhelpers-name=\"' + name + '\"][data-fieldhelpers-instance=\"' + instance + '\"]' ).first().attr( 'class' );\n\t\t\n\t\tlet test = /fieldhelpers-field-(\\S*)/.exec( classNames );\n\t\t\n\t\tif ( test !== null && \n\t\t test[1].length > 0 ) {\n\t\t\t\n\t\t\tfieldType = test[1];\n\t\t\t\n\t\t}\n\t\t\n\t}\n\t\n\ttry {\n\t\n\t\treturn RBM_FieldHelpers[ instance ]['fieldObjects'][ fieldType ][ name ];\n\t\t\n\t}\n\tcatch ( error ) {\n\t\t\n\t\tif ( instance === null || \n\t\t fieldType === null || \n\t\t typeof RBM_FieldHelpers[ instance ] == 'undefined' || \n\t\t typeof RBM_FieldHelpers[ instance ]['fieldObjects'] == 'undefined' ||\n\t\t typeof RBM_FieldHelpers[ instance ]['fieldObjects'][ fieldType ] == 'undefined' || \n\t\t typeof RBM_FieldHelpers[ instance ]['fieldObjects'][ fieldType ][ name ] == 'undefined' || \n\t\t typeof RBM_FieldHelpers[ instance ]['fieldObjects'][ fieldType ][ name ].length < 0 ) {\n\t\t\tconsole.error( 'Field Helpers Error: Field Object for \"' + name + '\" Not Found' );\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n}\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/admin/rbm-field-helpers-admin.js","// jquery.repeater version 1.2.1\n// https://github.com/DubFriend/jquery.repeater\n// (MIT) 09-10-2016\n// Brian Detering (http://www.briandetering.net/)\n(function ($) {\n'use strict';\n\nvar identity = function (x) {\n return x;\n};\n\nvar isArray = function (value) {\n return $.isArray(value);\n};\n\nvar isObject = function (value) {\n return !isArray(value) && (value instanceof Object);\n};\n\nvar isNumber = function (value) {\n return value instanceof Number;\n};\n\nvar isFunction = function (value) {\n return value instanceof Function;\n};\n\nvar indexOf = function (object, value) {\n return $.inArray(value, object);\n};\n\nvar inArray = function (array, value) {\n return indexOf(array, value) !== -1;\n};\n\nvar foreach = function (collection, callback) {\n for(var i in collection) {\n if(collection.hasOwnProperty(i)) {\n callback(collection[i], i, collection);\n }\n }\n};\n\n\nvar last = function (array) {\n return array[array.length - 1];\n};\n\nvar argumentsToArray = function (args) {\n return Array.prototype.slice.call(args);\n};\n\nvar extend = function () {\n var extended = {};\n foreach(argumentsToArray(arguments), function (o) {\n foreach(o, function (val, key) {\n extended[key] = val;\n });\n });\n return extended;\n};\n\nvar mapToArray = function (collection, callback) {\n var mapped = [];\n foreach(collection, function (value, key, coll) {\n mapped.push(callback(value, key, coll));\n });\n return mapped;\n};\n\nvar mapToObject = function (collection, callback, keyCallback) {\n var mapped = {};\n foreach(collection, function (value, key, coll) {\n key = keyCallback ? keyCallback(key, value) : key;\n mapped[key] = callback(value, key, coll);\n });\n return mapped;\n};\n\nvar map = function (collection, callback, keyCallback) {\n return isArray(collection) ?\n mapToArray(collection, callback) :\n mapToObject(collection, callback, keyCallback);\n};\n\nvar pluck = function (arrayOfObjects, key) {\n return map(arrayOfObjects, function (val) {\n return val[key];\n });\n};\n\nvar filter = function (collection, callback) {\n var filtered;\n\n if(isArray(collection)) {\n filtered = [];\n foreach(collection, function (val, key, coll) {\n if(callback(val, key, coll)) {\n filtered.push(val);\n }\n });\n }\n else {\n filtered = {};\n foreach(collection, function (val, key, coll) {\n if(callback(val, key, coll)) {\n filtered[key] = val;\n }\n });\n }\n\n return filtered;\n};\n\nvar call = function (collection, functionName, args) {\n return map(collection, function (object, name) {\n return object[functionName].apply(object, args || []);\n });\n};\n\n//execute callback immediately and at most one time on the minimumInterval,\n//ignore block attempts\nvar throttle = function (minimumInterval, callback) {\n var timeout = null;\n return function () {\n var that = this, args = arguments;\n if(timeout === null) {\n timeout = setTimeout(function () {\n timeout = null;\n }, minimumInterval);\n callback.apply(that, args);\n }\n };\n};\n\n\nvar mixinPubSub = function (object) {\n object = object || {};\n var topics = {};\n\n object.publish = function (topic, data) {\n foreach(topics[topic], function (callback) {\n callback(data);\n });\n };\n\n object.subscribe = function (topic, callback) {\n topics[topic] = topics[topic] || [];\n topics[topic].push(callback);\n };\n\n object.unsubscribe = function (callback) {\n foreach(topics, function (subscribers) {\n var index = indexOf(subscribers, callback);\n if(index !== -1) {\n subscribers.splice(index, 1);\n }\n });\n };\n\n return object;\n};\n\n// jquery.input version 0.0.0\n// https://github.com/DubFriend/jquery.input\n// (MIT) 09-04-2014\n// Brian Detering (http://www.briandetering.net/)\n(function ($) {\n'use strict';\n\nvar createBaseInput = function (fig, my) {\n var self = mixinPubSub(),\n $self = fig.$;\n\n self.getType = function () {\n throw 'implement me (return type. \"text\", \"radio\", etc.)';\n };\n\n self.$ = function (selector) {\n return selector ? $self.find(selector) : $self;\n };\n\n self.disable = function () {\n self.$().prop('disabled', true);\n self.publish('isEnabled', false);\n };\n\n self.enable = function () {\n self.$().prop('disabled', false);\n self.publish('isEnabled', true);\n };\n\n my.equalTo = function (a, b) {\n return a === b;\n };\n\n my.publishChange = (function () {\n var oldValue;\n return function (e, domElement) {\n var newValue = self.get();\n if(!my.equalTo(newValue, oldValue)) {\n self.publish('change', { e: e, domElement: domElement });\n }\n oldValue = newValue;\n };\n }());\n\n return self;\n};\n\n\nvar createInput = function (fig, my) {\n var self = createBaseInput(fig, my);\n\n self.get = function () {\n return self.$().val();\n };\n\n self.set = function (newValue) {\n self.$().val(newValue);\n };\n\n self.clear = function () {\n self.set('');\n };\n\n my.buildSetter = function (callback) {\n return function (newValue) {\n callback.call(self, newValue);\n };\n };\n\n return self;\n};\n\nvar inputEqualToArray = function (a, b) {\n a = isArray(a) ? a : [a];\n b = isArray(b) ? b : [b];\n\n var isEqual = true;\n if(a.length !== b.length) {\n isEqual = false;\n }\n else {\n foreach(a, function (value) {\n if(!inArray(b, value)) {\n isEqual = false;\n }\n });\n }\n\n return isEqual;\n};\n\nvar createInputButton = function (fig) {\n var my = {},\n self = createInput(fig, my);\n\n self.getType = function () {\n return 'button';\n };\n\n self.$().on('change', function (e) {\n my.publishChange(e, this);\n });\n\n return self;\n};\n\nvar createInputCheckbox = function (fig) {\n var my = {},\n self = createInput(fig, my);\n\n self.getType = function () {\n return 'checkbox';\n };\n\n self.get = function () {\n var values = [];\n self.$().filter(':checked').each(function () {\n values.push($(this).val());\n });\n return values;\n };\n\n self.set = function (newValues) {\n newValues = isArray(newValues) ? newValues : [newValues];\n\n self.$().each(function () {\n $(this).prop('checked', false);\n });\n\n foreach(newValues, function (value) {\n self.$().filter('[value=\"' + value + '\"]')\n .prop('checked', true);\n });\n };\n\n my.equalTo = inputEqualToArray;\n\n self.$().change(function (e) {\n my.publishChange(e, this);\n });\n\n return self;\n};\n\nvar createInputEmail = function (fig) {\n var my = {},\n self = createInputText(fig, my);\n\n self.getType = function () {\n return 'email';\n };\n\n return self;\n};\n\nvar createInputFile = function (fig) {\n var my = {},\n self = createBaseInput(fig, my);\n\n self.getType = function () {\n return 'file';\n };\n\n self.get = function () {\n return last(self.$().val().split('\\\\'));\n };\n\n self.clear = function () {\n // http://stackoverflow.com/questions/1043957/clearing-input-type-file-using-jquery\n this.$().each(function () {\n $(this).wrap('
').closest('form').get(0).reset();\n $(this).unwrap();\n });\n };\n\n self.$().change(function (e) {\n my.publishChange(e, this);\n // self.publish('change', self);\n });\n\n return self;\n};\n\nvar createInputHidden = function (fig) {\n var my = {},\n self = createInput(fig, my);\n\n self.getType = function () {\n return 'hidden';\n };\n\n self.$().change(function (e) {\n my.publishChange(e, this);\n });\n\n return self;\n};\nvar createInputMultipleFile = function (fig) {\n var my = {},\n self = createBaseInput(fig, my);\n\n self.getType = function () {\n return 'file[multiple]';\n };\n\n self.get = function () {\n // http://stackoverflow.com/questions/14035530/how-to-get-value-of-html-5-multiple-file-upload-variable-using-jquery\n var fileListObject = self.$().get(0).files || [],\n names = [], i;\n\n for(i = 0; i < (fileListObject.length || 0); i += 1) {\n names.push(fileListObject[i].name);\n }\n\n return names;\n };\n\n self.clear = function () {\n // http://stackoverflow.com/questions/1043957/clearing-input-type-file-using-jquery\n this.$().each(function () {\n $(this).wrap('').closest('form').get(0).reset();\n $(this).unwrap();\n });\n };\n\n self.$().change(function (e) {\n my.publishChange(e, this);\n });\n\n return self;\n};\n\nvar createInputMultipleSelect = function (fig) {\n var my = {},\n self = createInput(fig, my);\n\n self.getType = function () {\n return 'select[multiple]';\n };\n\n self.get = function () {\n return self.$().val() || [];\n };\n\n self.set = function (newValues) {\n self.$().val(\n newValues === '' ? [] : isArray(newValues) ? newValues : [newValues]\n );\n };\n\n my.equalTo = inputEqualToArray;\n\n self.$().change(function (e) {\n my.publishChange(e, this);\n });\n\n return self;\n};\n\nvar createInputPassword = function (fig) {\n var my = {},\n self = createInputText(fig, my);\n\n self.getType = function () {\n return 'password';\n };\n\n return self;\n};\n\nvar createInputRadio = function (fig) {\n var my = {},\n self = createInput(fig, my);\n\n self.getType = function () {\n return 'radio';\n };\n\n self.get = function () {\n return self.$().filter(':checked').val() || null;\n };\n\n self.set = function (newValue) {\n if(!newValue) {\n self.$().each(function () {\n $(this).prop('checked', false);\n });\n }\n else {\n self.$().filter('[value=\"' + newValue + '\"]').prop('checked', true);\n }\n };\n\n self.$().change(function (e) {\n my.publishChange(e, this);\n });\n\n return self;\n};\n\nvar createInputRange = function (fig) {\n var my = {},\n self = createInput(fig, my);\n\n self.getType = function () {\n return 'range';\n };\n\n self.$().change(function (e) {\n my.publishChange(e, this);\n });\n\n return self;\n};\n\nvar createInputSelect = function (fig) {\n var my = {},\n self = createInput(fig, my);\n\n self.getType = function () {\n return 'select';\n };\n\n self.$().change(function (e) {\n my.publishChange(e, this);\n });\n\n return self;\n};\n\nvar createInputText = function (fig) {\n var my = {},\n self = createInput(fig, my);\n\n self.getType = function () {\n return 'text';\n };\n\n self.$().on('change keyup keydown', function (e) {\n my.publishChange(e, this);\n });\n\n return self;\n};\n\nvar createInputTextarea = function (fig) {\n var my = {},\n self = createInput(fig, my);\n\n self.getType = function () {\n return 'textarea';\n };\n\n self.$().on('change keyup keydown', function (e) {\n my.publishChange(e, this);\n });\n\n return self;\n};\n\nvar createInputURL = function (fig) {\n var my = {},\n self = createInputText(fig, my);\n\n self.getType = function () {\n return 'url';\n };\n\n return self;\n};\n\nvar buildFormInputs = function (fig) {\n var inputs = {},\n $self = fig.$;\n\n var constructor = fig.constructorOverride || {\n button: createInputButton,\n text: createInputText,\n url: createInputURL,\n email: createInputEmail,\n password: createInputPassword,\n range: createInputRange,\n textarea: createInputTextarea,\n select: createInputSelect,\n 'select[multiple]': createInputMultipleSelect,\n radio: createInputRadio,\n checkbox: createInputCheckbox,\n file: createInputFile,\n 'file[multiple]': createInputMultipleFile,\n hidden: createInputHidden\n };\n\n var addInputsBasic = function (type, selector) {\n var $input = isObject(selector) ? selector : $self.find(selector);\n\n $input.each(function () {\n var name = $(this).attr('name');\n inputs[name] = constructor[type]({\n $: $(this)\n });\n });\n };\n\n var addInputsGroup = function (type, selector) {\n var names = [],\n $input = isObject(selector) ? selector : $self.find(selector);\n\n if(isObject(selector)) {\n inputs[$input.attr('name')] = constructor[type]({\n $: $input\n });\n }\n else {\n // group by name attribute\n $input.each(function () {\n if(indexOf(names, $(this).attr('name')) === -1) {\n names.push($(this).attr('name'));\n }\n });\n\n foreach(names, function (name) {\n inputs[name] = constructor[type]({\n $: $self.find('input[name=\"' + name + '\"]')\n });\n });\n }\n };\n\n\n if($self.is('input, select, textarea')) {\n if($self.is('input[type=\"button\"], button, input[type=\"submit\"]')) {\n addInputsBasic('button', $self);\n }\n else if($self.is('textarea')) {\n addInputsBasic('textarea', $self);\n }\n else if(\n $self.is('input[type=\"text\"]') ||\n $self.is('input') && !$self.attr('type')\n ) {\n addInputsBasic('text', $self);\n }\n else if($self.is('input[type=\"password\"]')) {\n addInputsBasic('password', $self);\n }\n else if($self.is('input[type=\"email\"]')) {\n addInputsBasic('email', $self);\n }\n else if($self.is('input[type=\"url\"]')) {\n addInputsBasic('url', $self);\n }\n else if($self.is('input[type=\"range\"]')) {\n addInputsBasic('range', $self);\n }\n else if($self.is('select')) {\n if($self.is('[multiple]')) {\n addInputsBasic('select[multiple]', $self);\n }\n else {\n addInputsBasic('select', $self);\n }\n }\n else if($self.is('input[type=\"file\"]')) {\n if($self.is('[multiple]')) {\n addInputsBasic('file[multiple]', $self);\n }\n else {\n addInputsBasic('file', $self);\n }\n }\n else if($self.is('input[type=\"hidden\"]')) {\n addInputsBasic('hidden', $self);\n }\n else if($self.is('input[type=\"radio\"]')) {\n addInputsGroup('radio', $self);\n }\n else if($self.is('input[type=\"checkbox\"]')) {\n addInputsGroup('checkbox', $self);\n }\n else {\n //in all other cases default to a \"text\" input interface.\n addInputsBasic('text', $self);\n }\n }\n else {\n addInputsBasic('button', 'input[type=\"button\"], button, input[type=\"submit\"]');\n addInputsBasic('text', 'input[type=\"text\"]');\n addInputsBasic('password', 'input[type=\"password\"]');\n addInputsBasic('email', 'input[type=\"email\"]');\n addInputsBasic('url', 'input[type=\"url\"]');\n addInputsBasic('range', 'input[type=\"range\"]');\n addInputsBasic('textarea', 'textarea');\n addInputsBasic('select', 'select:not([multiple])');\n addInputsBasic('select[multiple]', 'select[multiple]');\n addInputsBasic('file', 'input[type=\"file\"]:not([multiple])');\n addInputsBasic('file[multiple]', 'input[type=\"file\"][multiple]');\n addInputsBasic('hidden', 'input[type=\"hidden\"]');\n addInputsGroup('radio', 'input[type=\"radio\"]');\n addInputsGroup('checkbox', 'input[type=\"checkbox\"]');\n }\n\n return inputs;\n};\n\n$.fn.inputVal = function (newValue) {\n var $self = $(this);\n\n var inputs = buildFormInputs({ $: $self });\n\n if($self.is('input, textarea, select')) {\n if(typeof newValue === 'undefined') {\n return inputs[$self.attr('name')].get();\n }\n else {\n inputs[$self.attr('name')].set(newValue);\n return $self;\n }\n }\n else {\n if(typeof newValue === 'undefined') {\n return call(inputs, 'get');\n }\n else {\n foreach(newValue, function (value, inputName) {\n inputs[inputName].set(value);\n });\n return $self;\n }\n }\n};\n\n$.fn.inputOnChange = function (callback) {\n var $self = $(this);\n var inputs = buildFormInputs({ $: $self });\n foreach(inputs, function (input) {\n input.subscribe('change', function (data) {\n callback.call(data.domElement, data.e);\n });\n });\n return $self;\n};\n\n$.fn.inputDisable = function () {\n var $self = $(this);\n call(buildFormInputs({ $: $self }), 'disable');\n return $self;\n};\n\n$.fn.inputEnable = function () {\n var $self = $(this);\n call(buildFormInputs({ $: $self }), 'enable');\n return $self;\n};\n\n$.fn.inputClear = function () {\n var $self = $(this);\n call(buildFormInputs({ $: $self }), 'clear');\n return $self;\n};\n\n}(jQuery));\n\n$.fn.repeaterVal = function () {\n var parse = function (raw) {\n var parsed = [];\n\n foreach(raw, function (val, key) {\n var parsedKey = [];\n if(key !== \"undefined\") {\n parsedKey.push(key.match(/^[^\\[]*/)[0]);\n parsedKey = parsedKey.concat(map(\n key.match(/\\[[^\\]]*\\]/g),\n function (bracketed) {\n return bracketed.replace(/[\\[\\]]/g, '');\n }\n ));\n\n parsed.push({\n val: val,\n key: parsedKey\n });\n }\n });\n\n return parsed;\n };\n\n var build = function (parsed) {\n if(\n parsed.length === 1 &&\n (parsed[0].key.length === 0 || parsed[0].key.length === 1 && !parsed[0].key[0])\n ) {\n return parsed[0].val;\n }\n\n foreach(parsed, function (p) {\n p.head = p.key.shift();\n });\n\n var grouped = (function () {\n var grouped = {};\n\n foreach(parsed, function (p) {\n if(!grouped[p.head]) {\n grouped[p.head] = [];\n }\n grouped[p.head].push(p);\n });\n\n return grouped;\n }());\n\n var built;\n\n if(/^[0-9]+$/.test(parsed[0].head)) {\n built = [];\n foreach(grouped, function (group) {\n built.push(build(group));\n });\n }\n else {\n built = {};\n foreach(grouped, function (group, key) {\n built[key] = build(group);\n });\n }\n\n return built;\n };\n\n return build(parse($(this).inputVal()));\n};\n\n$.fn.repeater = function (fig) {\n fig = fig || {};\n\n var setList;\n\n $(this).each(function () {\n\n var $self = $(this);\n\n var show = fig.show || function () {\n $(this).show();\n };\n\n var hide = fig.hide || function (removeElement) {\n removeElement();\n };\n\n var $list = $self.find('[data-repeater-list]').first();\n\n var $filterNested = function ($items, repeaters) {\n return $items.filter(function () {\n return repeaters ?\n $(this).closest(\n pluck(repeaters, 'selector').join(',')\n ).length === 0 : true;\n });\n };\n\n var $items = function () {\n return $filterNested($list.find('[data-repeater-item]'), fig.repeaters);\n };\n\n var $itemTemplate = $list.find('[data-repeater-item]')\n .first().clone().hide();\n\n var $firstDeleteButton = $filterNested(\n $filterNested($(this).find('[data-repeater-item]'), fig.repeaters)\n .first().find('[data-repeater-delete]'),\n fig.repeaters\n );\n\n if(fig.isFirstItemUndeletable && $firstDeleteButton) {\n $firstDeleteButton.remove();\n }\n\n var getGroupName = function () {\n var groupName = $list.data('repeater-list');\n return fig.$parent ?\n fig.$parent.data('item-name') + '[' + groupName + ']' :\n groupName;\n };\n\n var initNested = function ($listItems) {\n if(fig.repeaters) {\n $listItems.each(function () {\n var $item = $(this);\n foreach(fig.repeaters, function (nestedFig) {\n $item.find(nestedFig.selector).repeater(extend(\n nestedFig, { $parent: $item }\n ));\n });\n });\n }\n };\n\n var $foreachRepeaterInItem = function (repeaters, $item, cb) {\n if(repeaters) {\n foreach(repeaters, function (nestedFig) {\n cb.call($item.find(nestedFig.selector)[0], nestedFig);\n });\n }\n };\n\n var setIndexes = function ($items, groupName, repeaters) {\n $items.each(function (index) {\n var $item = $(this);\n $item.data('item-name', groupName + '[' + index + ']');\n $filterNested($item.find('[name]'), repeaters)\n .each(function () {\n var $input = $(this);\n // match non empty brackets (ex: \"[foo]\")\n var matches = $input.attr('name').match(/\\[[^\\]]+\\]/g);\n\n var name = matches ?\n // strip \"[\" and \"]\" characters\n last(matches).replace(/\\[|\\]/g, '') :\n $input.attr('name');\n\n\n var newName = groupName + '[' + index + '][' + name + ']' +\n ($input.is(':checkbox') || $input.attr('multiple') ? '[]' : '');\n\n $input.attr('name', newName);\n\n $foreachRepeaterInItem(repeaters, $item, function (nestedFig) {\n var $repeater = $(this);\n setIndexes(\n $filterNested($repeater.find('[data-repeater-item]'), nestedFig.repeaters || []),\n groupName + '[' + index + ']' +\n '[' + $repeater.find('[data-repeater-list]').first().data('repeater-list') + ']',\n nestedFig.repeaters\n );\n });\n });\n });\n\n $list.find('input[name][checked]')\n .removeAttr('checked')\n .prop('checked', true);\n };\n\n setIndexes($items(), getGroupName(), fig.repeaters);\n initNested($items());\n if(fig.initEmpty) {\n $items().remove();\n }\n\n if(fig.ready) {\n fig.ready(function () {\n setIndexes($items(), getGroupName(), fig.repeaters);\n });\n }\n\n var appendItem = (function () {\n var setItemsValues = function ($item, data, repeaters) {\n if(data || fig.defaultValues) {\n var inputNames = {};\n $filterNested($item.find('[name]'), repeaters).each(function () {\n var key = $(this).attr('name').match(/\\[([^\\]]*)(\\]|\\]\\[\\])$/)[1];\n inputNames[key] = $(this).attr('name');\n });\n\n $item.inputVal(map(\n filter(data || fig.defaultValues, function (val, name) {\n return inputNames[name];\n }),\n identity,\n function (name) {\n return inputNames[name];\n }\n ));\n }\n\n\n $foreachRepeaterInItem(repeaters, $item, function (nestedFig) {\n var $repeater = $(this);\n $filterNested(\n $repeater.find('[data-repeater-item]'),\n nestedFig.repeaters\n )\n .each(function () {\n var fieldName = $repeater.find('[data-repeater-list]').data('repeater-list');\n if(data && data[fieldName]) {\n var $template = $(this).clone();\n $repeater.find('[data-repeater-item]').remove();\n foreach(data[fieldName], function (data) {\n var $item = $template.clone();\n setItemsValues(\n $item,\n data,\n nestedFig.repeaters || []\n );\n $repeater.find('[data-repeater-list]').append($item);\n });\n }\n else {\n setItemsValues(\n $(this),\n nestedFig.defaultValues,\n nestedFig.repeaters || []\n );\n }\n });\n });\n\n };\n\n return function ($item, data) {\n $list.append($item);\n setIndexes($items(), getGroupName(), fig.repeaters);\n $item.find('[name]').each(function () {\n $(this).inputClear();\n });\n setItemsValues($item, data || fig.defaultValues, fig.repeaters);\n };\n }());\n\n var addItem = function (data) {\n var $item = $itemTemplate.clone();\n appendItem($item, data);\n if(fig.repeaters) {\n initNested($item);\n }\n show.call($item.get(0));\n };\n\n setList = function (rows) {\n $items().remove();\n foreach(rows, addItem);\n };\n\n $filterNested($self.find('[data-repeater-create]'), fig.repeaters).click(function () {\n addItem();\n });\n\n $list.on('click', '[data-repeater-delete]', function () {\n var self = $(this).closest('[data-repeater-item]').get(0);\n hide.call(self, function () {\n $(self).remove();\n setIndexes($items(), getGroupName(), fig.repeaters);\n });\n });\n });\n\n this.setList = setList;\n\n return this;\n};\n\n}(jQuery));\n\n\n// WEBPACK FOOTER //\n// ./node_modules/jquery.repeater/jquery.repeater.js","/* flatpickr v4.6.2, @license MIT */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = global || self, global.flatpickr = factory());\n}(this, function () { 'use strict';\n\n /*! *****************************************************************************\r\n Copyright (c) Microsoft Corporation. All rights reserved.\r\n Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\n this file except in compliance with the License. You may obtain a copy of the\r\n License at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\n KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\n WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\n MERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\n See the Apache Version 2.0 License for specific language governing permissions\r\n and limitations under the License.\r\n ***************************************************************************** */\r\n\r\n var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n };\n\n var HOOKS = [\n \"onChange\",\n \"onClose\",\n \"onDayCreate\",\n \"onDestroy\",\n \"onKeyDown\",\n \"onMonthChange\",\n \"onOpen\",\n \"onParseConfig\",\n \"onReady\",\n \"onValueUpdate\",\n \"onYearChange\",\n \"onPreCalendarPosition\",\n ];\n var defaults = {\n _disable: [],\n _enable: [],\n allowInput: false,\n altFormat: \"F j, Y\",\n altInput: false,\n altInputClass: \"form-control input\",\n animate: typeof window === \"object\" &&\n window.navigator.userAgent.indexOf(\"MSIE\") === -1,\n ariaDateFormat: \"F j, Y\",\n clickOpens: true,\n closeOnSelect: true,\n conjunction: \", \",\n dateFormat: \"Y-m-d\",\n defaultHour: 12,\n defaultMinute: 0,\n defaultSeconds: 0,\n disable: [],\n disableMobile: false,\n enable: [],\n enableSeconds: false,\n enableTime: false,\n errorHandler: function (err) {\n return typeof console !== \"undefined\" && console.warn(err);\n },\n getWeek: function (givenDate) {\n var date = new Date(givenDate.getTime());\n date.setHours(0, 0, 0, 0);\n // Thursday in current week decides the year.\n date.setDate(date.getDate() + 3 - ((date.getDay() + 6) % 7));\n // January 4 is always in week 1.\n var week1 = new Date(date.getFullYear(), 0, 4);\n // Adjust to Thursday in week 1 and count number of weeks from date to week1.\n return (1 +\n Math.round(((date.getTime() - week1.getTime()) / 86400000 -\n 3 +\n ((week1.getDay() + 6) % 7)) /\n 7));\n },\n hourIncrement: 1,\n ignoredFocusElements: [],\n inline: false,\n locale: \"default\",\n minuteIncrement: 5,\n mode: \"single\",\n monthSelectorType: \"dropdown\",\n nextArrow: \"\",\n noCalendar: false,\n now: new Date(),\n onChange: [],\n onClose: [],\n onDayCreate: [],\n onDestroy: [],\n onKeyDown: [],\n onMonthChange: [],\n onOpen: [],\n onParseConfig: [],\n onReady: [],\n onValueUpdate: [],\n onYearChange: [],\n onPreCalendarPosition: [],\n plugins: [],\n position: \"auto\",\n positionElement: undefined,\n prevArrow: \"\",\n shorthandCurrentMonth: false,\n showMonths: 1,\n static: false,\n time_24hr: false,\n weekNumbers: false,\n wrap: false\n };\n\n var english = {\n weekdays: {\n shorthand: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n longhand: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ]\n },\n months: {\n shorthand: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ],\n longhand: [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ]\n },\n daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n firstDayOfWeek: 0,\n ordinal: function (nth) {\n var s = nth % 100;\n if (s > 3 && s < 21)\n return \"th\";\n switch (s % 10) {\n case 1:\n return \"st\";\n case 2:\n return \"nd\";\n case 3:\n return \"rd\";\n default:\n return \"th\";\n }\n },\n rangeSeparator: \" to \",\n weekAbbreviation: \"Wk\",\n scrollTitle: \"Scroll to increment\",\n toggleTitle: \"Click to toggle\",\n amPM: [\"AM\", \"PM\"],\n yearAriaLabel: \"Year\",\n hourAriaLabel: \"Hour\",\n minuteAriaLabel: \"Minute\",\n time_24hr: false\n };\n\n var pad = function (number) { return (\"0\" + number).slice(-2); };\n var int = function (bool) { return (bool === true ? 1 : 0); };\n /* istanbul ignore next */\n function debounce(func, wait, immediate) {\n if (immediate === void 0) { immediate = false; }\n var timeout;\n return function () {\n var context = this, args = arguments;\n timeout !== null && clearTimeout(timeout);\n timeout = window.setTimeout(function () {\n timeout = null;\n if (!immediate)\n func.apply(context, args);\n }, wait);\n if (immediate && !timeout)\n func.apply(context, args);\n };\n }\n var arrayify = function (obj) {\n return obj instanceof Array ? obj : [obj];\n };\n\n function toggleClass(elem, className, bool) {\n if (bool === true)\n return elem.classList.add(className);\n elem.classList.remove(className);\n }\n function createElement(tag, className, content) {\n var e = window.document.createElement(tag);\n className = className || \"\";\n content = content || \"\";\n e.className = className;\n if (content !== undefined)\n e.textContent = content;\n return e;\n }\n function clearNode(node) {\n while (node.firstChild)\n node.removeChild(node.firstChild);\n }\n function findParent(node, condition) {\n if (condition(node))\n return node;\n else if (node.parentNode)\n return findParent(node.parentNode, condition);\n return undefined; // nothing found\n }\n function createNumberInput(inputClassName, opts) {\n var wrapper = createElement(\"div\", \"numInputWrapper\"), numInput = createElement(\"input\", \"numInput \" + inputClassName), arrowUp = createElement(\"span\", \"arrowUp\"), arrowDown = createElement(\"span\", \"arrowDown\");\n if (navigator.userAgent.indexOf(\"MSIE 9.0\") === -1) {\n numInput.type = \"number\";\n }\n else {\n numInput.type = \"text\";\n numInput.pattern = \"\\\\d*\";\n }\n if (opts !== undefined)\n for (var key in opts)\n numInput.setAttribute(key, opts[key]);\n wrapper.appendChild(numInput);\n wrapper.appendChild(arrowUp);\n wrapper.appendChild(arrowDown);\n return wrapper;\n }\n function getEventTarget(event) {\n if (typeof event.composedPath === \"function\") {\n var path = event.composedPath();\n return path[0];\n }\n return event.target;\n }\n\n var doNothing = function () { return undefined; };\n var monthToStr = function (monthNumber, shorthand, locale) { return locale.months[shorthand ? \"shorthand\" : \"longhand\"][monthNumber]; };\n var revFormat = {\n D: doNothing,\n F: function (dateObj, monthName, locale) {\n dateObj.setMonth(locale.months.longhand.indexOf(monthName));\n },\n G: function (dateObj, hour) {\n dateObj.setHours(parseFloat(hour));\n },\n H: function (dateObj, hour) {\n dateObj.setHours(parseFloat(hour));\n },\n J: function (dateObj, day) {\n dateObj.setDate(parseFloat(day));\n },\n K: function (dateObj, amPM, locale) {\n dateObj.setHours((dateObj.getHours() % 12) +\n 12 * int(new RegExp(locale.amPM[1], \"i\").test(amPM)));\n },\n M: function (dateObj, shortMonth, locale) {\n dateObj.setMonth(locale.months.shorthand.indexOf(shortMonth));\n },\n S: function (dateObj, seconds) {\n dateObj.setSeconds(parseFloat(seconds));\n },\n U: function (_, unixSeconds) { return new Date(parseFloat(unixSeconds) * 1000); },\n W: function (dateObj, weekNum, locale) {\n var weekNumber = parseInt(weekNum);\n var date = new Date(dateObj.getFullYear(), 0, 2 + (weekNumber - 1) * 7, 0, 0, 0, 0);\n date.setDate(date.getDate() - date.getDay() + locale.firstDayOfWeek);\n return date;\n },\n Y: function (dateObj, year) {\n dateObj.setFullYear(parseFloat(year));\n },\n Z: function (_, ISODate) { return new Date(ISODate); },\n d: function (dateObj, day) {\n dateObj.setDate(parseFloat(day));\n },\n h: function (dateObj, hour) {\n dateObj.setHours(parseFloat(hour));\n },\n i: function (dateObj, minutes) {\n dateObj.setMinutes(parseFloat(minutes));\n },\n j: function (dateObj, day) {\n dateObj.setDate(parseFloat(day));\n },\n l: doNothing,\n m: function (dateObj, month) {\n dateObj.setMonth(parseFloat(month) - 1);\n },\n n: function (dateObj, month) {\n dateObj.setMonth(parseFloat(month) - 1);\n },\n s: function (dateObj, seconds) {\n dateObj.setSeconds(parseFloat(seconds));\n },\n u: function (_, unixMillSeconds) {\n return new Date(parseFloat(unixMillSeconds));\n },\n w: doNothing,\n y: function (dateObj, year) {\n dateObj.setFullYear(2000 + parseFloat(year));\n }\n };\n var tokenRegex = {\n D: \"(\\\\w+)\",\n F: \"(\\\\w+)\",\n G: \"(\\\\d\\\\d|\\\\d)\",\n H: \"(\\\\d\\\\d|\\\\d)\",\n J: \"(\\\\d\\\\d|\\\\d)\\\\w+\",\n K: \"\",\n M: \"(\\\\w+)\",\n S: \"(\\\\d\\\\d|\\\\d)\",\n U: \"(.+)\",\n W: \"(\\\\d\\\\d|\\\\d)\",\n Y: \"(\\\\d{4})\",\n Z: \"(.+)\",\n d: \"(\\\\d\\\\d|\\\\d)\",\n h: \"(\\\\d\\\\d|\\\\d)\",\n i: \"(\\\\d\\\\d|\\\\d)\",\n j: \"(\\\\d\\\\d|\\\\d)\",\n l: \"(\\\\w+)\",\n m: \"(\\\\d\\\\d|\\\\d)\",\n n: \"(\\\\d\\\\d|\\\\d)\",\n s: \"(\\\\d\\\\d|\\\\d)\",\n u: \"(.+)\",\n w: \"(\\\\d\\\\d|\\\\d)\",\n y: \"(\\\\d{2})\"\n };\n var formats = {\n // get the date in UTC\n Z: function (date) { return date.toISOString(); },\n // weekday name, short, e.g. Thu\n D: function (date, locale, options) {\n return locale.weekdays.shorthand[formats.w(date, locale, options)];\n },\n // full month name e.g. January\n F: function (date, locale, options) {\n return monthToStr(formats.n(date, locale, options) - 1, false, locale);\n },\n // padded hour 1-12\n G: function (date, locale, options) {\n return pad(formats.h(date, locale, options));\n },\n // hours with leading zero e.g. 03\n H: function (date) { return pad(date.getHours()); },\n // day (1-30) with ordinal suffix e.g. 1st, 2nd\n J: function (date, locale) {\n return locale.ordinal !== undefined\n ? date.getDate() + locale.ordinal(date.getDate())\n : date.getDate();\n },\n // AM/PM\n K: function (date, locale) { return locale.amPM[int(date.getHours() > 11)]; },\n // shorthand month e.g. Jan, Sep, Oct, etc\n M: function (date, locale) {\n return monthToStr(date.getMonth(), true, locale);\n },\n // seconds 00-59\n S: function (date) { return pad(date.getSeconds()); },\n // unix timestamp\n U: function (date) { return date.getTime() / 1000; },\n W: function (date, _, options) {\n return options.getWeek(date);\n },\n // full year e.g. 2016\n Y: function (date) { return date.getFullYear(); },\n // day in month, padded (01-30)\n d: function (date) { return pad(date.getDate()); },\n // hour from 1-12 (am/pm)\n h: function (date) { return (date.getHours() % 12 ? date.getHours() % 12 : 12); },\n // minutes, padded with leading zero e.g. 09\n i: function (date) { return pad(date.getMinutes()); },\n // day in month (1-30)\n j: function (date) { return date.getDate(); },\n // weekday name, full, e.g. Thursday\n l: function (date, locale) {\n return locale.weekdays.longhand[date.getDay()];\n },\n // padded month number (01-12)\n m: function (date) { return pad(date.getMonth() + 1); },\n // the month number (1-12)\n n: function (date) { return date.getMonth() + 1; },\n // seconds 0-59\n s: function (date) { return date.getSeconds(); },\n // Unix Milliseconds\n u: function (date) { return date.getTime(); },\n // number of the day of the week\n w: function (date) { return date.getDay(); },\n // last two digits of year e.g. 16 for 2016\n y: function (date) { return String(date.getFullYear()).substring(2); }\n };\n\n var createDateFormatter = function (_a) {\n var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c;\n return function (dateObj, frmt, overrideLocale) {\n var locale = overrideLocale || l10n;\n if (config.formatDate !== undefined) {\n return config.formatDate(dateObj, frmt, locale);\n }\n return frmt\n .split(\"\")\n .map(function (c, i, arr) {\n return formats[c] && arr[i - 1] !== \"\\\\\"\n ? formats[c](dateObj, locale, config)\n : c !== \"\\\\\"\n ? c\n : \"\";\n })\n .join(\"\");\n };\n };\n var createDateParser = function (_a) {\n var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c;\n return function (date, givenFormat, timeless, customLocale) {\n if (date !== 0 && !date)\n return undefined;\n var locale = customLocale || l10n;\n var parsedDate;\n var dateOrig = date;\n if (date instanceof Date)\n parsedDate = new Date(date.getTime());\n else if (typeof date !== \"string\" &&\n date.toFixed !== undefined // timestamp\n )\n // create a copy\n parsedDate = new Date(date);\n else if (typeof date === \"string\") {\n // date string\n var format = givenFormat || (config || defaults).dateFormat;\n var datestr = String(date).trim();\n if (datestr === \"today\") {\n parsedDate = new Date();\n timeless = true;\n }\n else if (/Z$/.test(datestr) ||\n /GMT$/.test(datestr) // datestrings w/ timezone\n )\n parsedDate = new Date(date);\n else if (config && config.parseDate)\n parsedDate = config.parseDate(date, format);\n else {\n parsedDate =\n !config || !config.noCalendar\n ? new Date(new Date().getFullYear(), 0, 1, 0, 0, 0, 0)\n : new Date(new Date().setHours(0, 0, 0, 0));\n var matched = void 0, ops = [];\n for (var i = 0, matchIndex = 0, regexStr = \"\"; i < format.length; i++) {\n var token_1 = format[i];\n var isBackSlash = token_1 === \"\\\\\";\n var escaped = format[i - 1] === \"\\\\\" || isBackSlash;\n if (tokenRegex[token_1] && !escaped) {\n regexStr += tokenRegex[token_1];\n var match = new RegExp(regexStr).exec(date);\n if (match && (matched = true)) {\n ops[token_1 !== \"Y\" ? \"push\" : \"unshift\"]({\n fn: revFormat[token_1],\n val: match[++matchIndex]\n });\n }\n }\n else if (!isBackSlash)\n regexStr += \".\"; // don't really care\n ops.forEach(function (_a) {\n var fn = _a.fn, val = _a.val;\n return (parsedDate = fn(parsedDate, val, locale) || parsedDate);\n });\n }\n parsedDate = matched ? parsedDate : undefined;\n }\n }\n /* istanbul ignore next */\n if (!(parsedDate instanceof Date && !isNaN(parsedDate.getTime()))) {\n config.errorHandler(new Error(\"Invalid date provided: \" + dateOrig));\n return undefined;\n }\n if (timeless === true)\n parsedDate.setHours(0, 0, 0, 0);\n return parsedDate;\n };\n };\n /**\n * Compute the difference in dates, measured in ms\n */\n function compareDates(date1, date2, timeless) {\n if (timeless === void 0) { timeless = true; }\n if (timeless !== false) {\n return (new Date(date1.getTime()).setHours(0, 0, 0, 0) -\n new Date(date2.getTime()).setHours(0, 0, 0, 0));\n }\n return date1.getTime() - date2.getTime();\n }\n var isBetween = function (ts, ts1, ts2) {\n return ts > Math.min(ts1, ts2) && ts < Math.max(ts1, ts2);\n };\n var duration = {\n DAY: 86400000\n };\n\n if (typeof Object.assign !== \"function\") {\n Object.assign = function (target) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (!target) {\n throw TypeError(\"Cannot convert undefined or null to object\");\n }\n var _loop_1 = function (source) {\n if (source) {\n Object.keys(source).forEach(function (key) { return (target[key] = source[key]); });\n }\n };\n for (var _a = 0, args_1 = args; _a < args_1.length; _a++) {\n var source = args_1[_a];\n _loop_1(source);\n }\n return target;\n };\n }\n\n var DEBOUNCED_CHANGE_MS = 300;\n function FlatpickrInstance(element, instanceConfig) {\n var self = {\n config: __assign({}, defaults, flatpickr.defaultConfig),\n l10n: english\n };\n self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });\n self._handlers = [];\n self.pluginElements = [];\n self.loadedPlugins = [];\n self._bind = bind;\n self._setHoursFromDate = setHoursFromDate;\n self._positionCalendar = positionCalendar;\n self.changeMonth = changeMonth;\n self.changeYear = changeYear;\n self.clear = clear;\n self.close = close;\n self._createElement = createElement;\n self.destroy = destroy;\n self.isEnabled = isEnabled;\n self.jumpToDate = jumpToDate;\n self.open = open;\n self.redraw = redraw;\n self.set = set;\n self.setDate = setDate;\n self.toggle = toggle;\n function setupHelperFunctions() {\n self.utils = {\n getDaysInMonth: function (month, yr) {\n if (month === void 0) { month = self.currentMonth; }\n if (yr === void 0) { yr = self.currentYear; }\n if (month === 1 && ((yr % 4 === 0 && yr % 100 !== 0) || yr % 400 === 0))\n return 29;\n return self.l10n.daysInMonth[month];\n }\n };\n }\n function init() {\n self.element = self.input = element;\n self.isOpen = false;\n parseConfig();\n setupLocale();\n setupInputs();\n setupDates();\n setupHelperFunctions();\n if (!self.isMobile)\n build();\n bindEvents();\n if (self.selectedDates.length || self.config.noCalendar) {\n if (self.config.enableTime) {\n setHoursFromDate(self.config.noCalendar\n ? self.latestSelectedDateObj || self.config.minDate\n : undefined);\n }\n updateValue(false);\n }\n setCalendarWidth();\n self.showTimeInput =\n self.selectedDates.length > 0 || self.config.noCalendar;\n var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n /* TODO: investigate this further\n \n Currently, there is weird positioning behavior in safari causing pages\n to scroll up. https://github.com/chmln/flatpickr/issues/563\n \n However, most browsers are not Safari and positioning is expensive when used\n in scale. https://github.com/chmln/flatpickr/issues/1096\n */\n if (!self.isMobile && isSafari) {\n positionCalendar();\n }\n triggerEvent(\"onReady\");\n }\n function bindToInstance(fn) {\n return fn.bind(self);\n }\n function setCalendarWidth() {\n var config = self.config;\n if (config.weekNumbers === false && config.showMonths === 1)\n return;\n else if (config.noCalendar !== true) {\n window.requestAnimationFrame(function () {\n if (self.calendarContainer !== undefined) {\n self.calendarContainer.style.visibility = \"hidden\";\n self.calendarContainer.style.display = \"block\";\n }\n if (self.daysContainer !== undefined) {\n var daysWidth = (self.days.offsetWidth + 1) * config.showMonths;\n self.daysContainer.style.width = daysWidth + \"px\";\n self.calendarContainer.style.width =\n daysWidth +\n (self.weekWrapper !== undefined\n ? self.weekWrapper.offsetWidth\n : 0) +\n \"px\";\n self.calendarContainer.style.removeProperty(\"visibility\");\n self.calendarContainer.style.removeProperty(\"display\");\n }\n });\n }\n }\n /**\n * The handler for all events targeting the time inputs\n */\n function updateTime(e) {\n if (self.selectedDates.length === 0) {\n setDefaultTime();\n }\n if (e !== undefined && e.type !== \"blur\") {\n timeWrapper(e);\n }\n var prevValue = self._input.value;\n setHoursFromInputs();\n updateValue();\n if (self._input.value !== prevValue) {\n self._debouncedChange();\n }\n }\n function ampm2military(hour, amPM) {\n return (hour % 12) + 12 * int(amPM === self.l10n.amPM[1]);\n }\n function military2ampm(hour) {\n switch (hour % 24) {\n case 0:\n case 12:\n return 12;\n default:\n return hour % 12;\n }\n }\n /**\n * Syncs the selected date object time with user's time input\n */\n function setHoursFromInputs() {\n if (self.hourElement === undefined || self.minuteElement === undefined)\n return;\n var hours = (parseInt(self.hourElement.value.slice(-2), 10) || 0) % 24, minutes = (parseInt(self.minuteElement.value, 10) || 0) % 60, seconds = self.secondElement !== undefined\n ? (parseInt(self.secondElement.value, 10) || 0) % 60\n : 0;\n if (self.amPM !== undefined) {\n hours = ampm2military(hours, self.amPM.textContent);\n }\n var limitMinHours = self.config.minTime !== undefined ||\n (self.config.minDate &&\n self.minDateHasTime &&\n self.latestSelectedDateObj &&\n compareDates(self.latestSelectedDateObj, self.config.minDate, true) ===\n 0);\n var limitMaxHours = self.config.maxTime !== undefined ||\n (self.config.maxDate &&\n self.maxDateHasTime &&\n self.latestSelectedDateObj &&\n compareDates(self.latestSelectedDateObj, self.config.maxDate, true) ===\n 0);\n if (limitMaxHours) {\n var maxTime = self.config.maxTime !== undefined\n ? self.config.maxTime\n : self.config.maxDate;\n hours = Math.min(hours, maxTime.getHours());\n if (hours === maxTime.getHours())\n minutes = Math.min(minutes, maxTime.getMinutes());\n if (minutes === maxTime.getMinutes())\n seconds = Math.min(seconds, maxTime.getSeconds());\n }\n if (limitMinHours) {\n var minTime = self.config.minTime !== undefined\n ? self.config.minTime\n : self.config.minDate;\n hours = Math.max(hours, minTime.getHours());\n if (hours === minTime.getHours())\n minutes = Math.max(minutes, minTime.getMinutes());\n if (minutes === minTime.getMinutes())\n seconds = Math.max(seconds, minTime.getSeconds());\n }\n setHours(hours, minutes, seconds);\n }\n /**\n * Syncs time input values with a date\n */\n function setHoursFromDate(dateObj) {\n var date = dateObj || self.latestSelectedDateObj;\n if (date)\n setHours(date.getHours(), date.getMinutes(), date.getSeconds());\n }\n function setDefaultHours() {\n var hours = self.config.defaultHour;\n var minutes = self.config.defaultMinute;\n var seconds = self.config.defaultSeconds;\n if (self.config.minDate !== undefined) {\n var minHr = self.config.minDate.getHours();\n var minMinutes = self.config.minDate.getMinutes();\n hours = Math.max(hours, minHr);\n if (hours === minHr)\n minutes = Math.max(minMinutes, minutes);\n if (hours === minHr && minutes === minMinutes)\n seconds = self.config.minDate.getSeconds();\n }\n if (self.config.maxDate !== undefined) {\n var maxHr = self.config.maxDate.getHours();\n var maxMinutes = self.config.maxDate.getMinutes();\n hours = Math.min(hours, maxHr);\n if (hours === maxHr)\n minutes = Math.min(maxMinutes, minutes);\n if (hours === maxHr && minutes === maxMinutes)\n seconds = self.config.maxDate.getSeconds();\n }\n setHours(hours, minutes, seconds);\n }\n /**\n * Sets the hours, minutes, and optionally seconds\n * of the latest selected date object and the\n * corresponding time inputs\n * @param {Number} hours the hour. whether its military\n * or am-pm gets inferred from config\n * @param {Number} minutes the minutes\n * @param {Number} seconds the seconds (optional)\n */\n function setHours(hours, minutes, seconds) {\n if (self.latestSelectedDateObj !== undefined) {\n self.latestSelectedDateObj.setHours(hours % 24, minutes, seconds || 0, 0);\n }\n if (!self.hourElement || !self.minuteElement || self.isMobile)\n return;\n self.hourElement.value = pad(!self.config.time_24hr\n ? ((12 + hours) % 12) + 12 * int(hours % 12 === 0)\n : hours);\n self.minuteElement.value = pad(minutes);\n if (self.amPM !== undefined)\n self.amPM.textContent = self.l10n.amPM[int(hours >= 12)];\n if (self.secondElement !== undefined)\n self.secondElement.value = pad(seconds);\n }\n /**\n * Handles the year input and incrementing events\n * @param {Event} event the keyup or increment event\n */\n function onYearInput(event) {\n var year = parseInt(event.target.value) + (event.delta || 0);\n if (year / 1000 > 1 ||\n (event.key === \"Enter\" && !/[^\\d]/.test(year.toString()))) {\n changeYear(year);\n }\n }\n /**\n * Essentially addEventListener + tracking\n * @param {Element} element the element to addEventListener to\n * @param {String} event the event name\n * @param {Function} handler the event handler\n */\n function bind(element, event, handler, options) {\n if (event instanceof Array)\n return event.forEach(function (ev) { return bind(element, ev, handler, options); });\n if (element instanceof Array)\n return element.forEach(function (el) { return bind(el, event, handler, options); });\n element.addEventListener(event, handler, options);\n self._handlers.push({\n element: element,\n event: event,\n handler: handler,\n options: options\n });\n }\n /**\n * A mousedown handler which mimics click.\n * Minimizes latency, since we don't need to wait for mouseup in most cases.\n * Also, avoids handling right clicks.\n *\n * @param {Function} handler the event handler\n */\n function onClick(handler) {\n return function (evt) {\n evt.which === 1 && handler(evt);\n };\n }\n function triggerChange() {\n triggerEvent(\"onChange\");\n }\n /**\n * Adds all the necessary event listeners\n */\n function bindEvents() {\n if (self.config.wrap) {\n [\"open\", \"close\", \"toggle\", \"clear\"].forEach(function (evt) {\n Array.prototype.forEach.call(self.element.querySelectorAll(\"[data-\" + evt + \"]\"), function (el) {\n return bind(el, \"click\", self[evt]);\n });\n });\n }\n if (self.isMobile) {\n setupMobile();\n return;\n }\n var debouncedResize = debounce(onResize, 50);\n self._debouncedChange = debounce(triggerChange, DEBOUNCED_CHANGE_MS);\n if (self.daysContainer && !/iPhone|iPad|iPod/i.test(navigator.userAgent))\n bind(self.daysContainer, \"mouseover\", function (e) {\n if (self.config.mode === \"range\")\n onMouseOver(e.target);\n });\n bind(window.document.body, \"keydown\", onKeyDown);\n if (!self.config.inline && !self.config.static)\n bind(window, \"resize\", debouncedResize);\n if (window.ontouchstart !== undefined)\n bind(window.document, \"touchstart\", documentClick);\n else\n bind(window.document, \"mousedown\", onClick(documentClick));\n bind(window.document, \"focus\", documentClick, { capture: true });\n if (self.config.clickOpens === true) {\n bind(self._input, \"focus\", self.open);\n bind(self._input, \"mousedown\", onClick(self.open));\n }\n if (self.daysContainer !== undefined) {\n bind(self.monthNav, \"mousedown\", onClick(onMonthNavClick));\n bind(self.monthNav, [\"keyup\", \"increment\"], onYearInput);\n bind(self.daysContainer, \"mousedown\", onClick(selectDate));\n }\n if (self.timeContainer !== undefined &&\n self.minuteElement !== undefined &&\n self.hourElement !== undefined) {\n var selText = function (e) {\n return e.target.select();\n };\n bind(self.timeContainer, [\"increment\"], updateTime);\n bind(self.timeContainer, \"blur\", updateTime, { capture: true });\n bind(self.timeContainer, \"mousedown\", onClick(timeIncrement));\n bind([self.hourElement, self.minuteElement], [\"focus\", \"click\"], selText);\n if (self.secondElement !== undefined)\n bind(self.secondElement, \"focus\", function () { return self.secondElement && self.secondElement.select(); });\n if (self.amPM !== undefined) {\n bind(self.amPM, \"mousedown\", onClick(function (e) {\n updateTime(e);\n triggerChange();\n }));\n }\n }\n }\n /**\n * Set the calendar view to a particular date.\n * @param {Date} jumpDate the date to set the view to\n * @param {boolean} triggerChange if change events should be triggered\n */\n function jumpToDate(jumpDate, triggerChange) {\n var jumpTo = jumpDate !== undefined\n ? self.parseDate(jumpDate)\n : self.latestSelectedDateObj ||\n (self.config.minDate && self.config.minDate > self.now\n ? self.config.minDate\n : self.config.maxDate && self.config.maxDate < self.now\n ? self.config.maxDate\n : self.now);\n var oldYear = self.currentYear;\n var oldMonth = self.currentMonth;\n try {\n if (jumpTo !== undefined) {\n self.currentYear = jumpTo.getFullYear();\n self.currentMonth = jumpTo.getMonth();\n }\n }\n catch (e) {\n /* istanbul ignore next */\n e.message = \"Invalid date supplied: \" + jumpTo;\n self.config.errorHandler(e);\n }\n if (triggerChange && self.currentYear !== oldYear) {\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n if (triggerChange &&\n (self.currentYear !== oldYear || self.currentMonth !== oldMonth)) {\n triggerEvent(\"onMonthChange\");\n }\n self.redraw();\n }\n /**\n * The up/down arrow handler for time inputs\n * @param {Event} e the click event\n */\n function timeIncrement(e) {\n if (~e.target.className.indexOf(\"arrow\"))\n incrementNumInput(e, e.target.classList.contains(\"arrowUp\") ? 1 : -1);\n }\n /**\n * Increments/decrements the value of input associ-\n * ated with the up/down arrow by dispatching an\n * \"increment\" event on the input.\n *\n * @param {Event} e the click event\n * @param {Number} delta the diff (usually 1 or -1)\n * @param {Element} inputElem the input element\n */\n function incrementNumInput(e, delta, inputElem) {\n var target = e && e.target;\n var input = inputElem ||\n (target && target.parentNode && target.parentNode.firstChild);\n var event = createEvent(\"increment\");\n event.delta = delta;\n input && input.dispatchEvent(event);\n }\n function build() {\n var fragment = window.document.createDocumentFragment();\n self.calendarContainer = createElement(\"div\", \"flatpickr-calendar\");\n self.calendarContainer.tabIndex = -1;\n if (!self.config.noCalendar) {\n fragment.appendChild(buildMonthNav());\n self.innerContainer = createElement(\"div\", \"flatpickr-innerContainer\");\n if (self.config.weekNumbers) {\n var _a = buildWeeks(), weekWrapper = _a.weekWrapper, weekNumbers = _a.weekNumbers;\n self.innerContainer.appendChild(weekWrapper);\n self.weekNumbers = weekNumbers;\n self.weekWrapper = weekWrapper;\n }\n self.rContainer = createElement(\"div\", \"flatpickr-rContainer\");\n self.rContainer.appendChild(buildWeekdays());\n if (!self.daysContainer) {\n self.daysContainer = createElement(\"div\", \"flatpickr-days\");\n self.daysContainer.tabIndex = -1;\n }\n buildDays();\n self.rContainer.appendChild(self.daysContainer);\n self.innerContainer.appendChild(self.rContainer);\n fragment.appendChild(self.innerContainer);\n }\n if (self.config.enableTime) {\n fragment.appendChild(buildTime());\n }\n toggleClass(self.calendarContainer, \"rangeMode\", self.config.mode === \"range\");\n toggleClass(self.calendarContainer, \"animate\", self.config.animate === true);\n toggleClass(self.calendarContainer, \"multiMonth\", self.config.showMonths > 1);\n self.calendarContainer.appendChild(fragment);\n var customAppend = self.config.appendTo !== undefined &&\n self.config.appendTo.nodeType !== undefined;\n if (self.config.inline || self.config.static) {\n self.calendarContainer.classList.add(self.config.inline ? \"inline\" : \"static\");\n if (self.config.inline) {\n if (!customAppend && self.element.parentNode)\n self.element.parentNode.insertBefore(self.calendarContainer, self._input.nextSibling);\n else if (self.config.appendTo !== undefined)\n self.config.appendTo.appendChild(self.calendarContainer);\n }\n if (self.config.static) {\n var wrapper = createElement(\"div\", \"flatpickr-wrapper\");\n if (self.element.parentNode)\n self.element.parentNode.insertBefore(wrapper, self.element);\n wrapper.appendChild(self.element);\n if (self.altInput)\n wrapper.appendChild(self.altInput);\n wrapper.appendChild(self.calendarContainer);\n }\n }\n if (!self.config.static && !self.config.inline)\n (self.config.appendTo !== undefined\n ? self.config.appendTo\n : window.document.body).appendChild(self.calendarContainer);\n }\n function createDay(className, date, dayNumber, i) {\n var dateIsEnabled = isEnabled(date, true), dayElement = createElement(\"span\", \"flatpickr-day \" + className, date.getDate().toString());\n dayElement.dateObj = date;\n dayElement.$i = i;\n dayElement.setAttribute(\"aria-label\", self.formatDate(date, self.config.ariaDateFormat));\n if (className.indexOf(\"hidden\") === -1 &&\n compareDates(date, self.now) === 0) {\n self.todayDateElem = dayElement;\n dayElement.classList.add(\"today\");\n dayElement.setAttribute(\"aria-current\", \"date\");\n }\n if (dateIsEnabled) {\n dayElement.tabIndex = -1;\n if (isDateSelected(date)) {\n dayElement.classList.add(\"selected\");\n self.selectedDateElem = dayElement;\n if (self.config.mode === \"range\") {\n toggleClass(dayElement, \"startRange\", self.selectedDates[0] &&\n compareDates(date, self.selectedDates[0], true) === 0);\n toggleClass(dayElement, \"endRange\", self.selectedDates[1] &&\n compareDates(date, self.selectedDates[1], true) === 0);\n if (className === \"nextMonthDay\")\n dayElement.classList.add(\"inRange\");\n }\n }\n }\n else {\n dayElement.classList.add(\"flatpickr-disabled\");\n }\n if (self.config.mode === \"range\") {\n if (isDateInRange(date) && !isDateSelected(date))\n dayElement.classList.add(\"inRange\");\n }\n if (self.weekNumbers &&\n self.config.showMonths === 1 &&\n className !== \"prevMonthDay\" &&\n dayNumber % 7 === 1) {\n self.weekNumbers.insertAdjacentHTML(\"beforeend\", \"\" + self.config.getWeek(date) + \"\");\n }\n triggerEvent(\"onDayCreate\", dayElement);\n return dayElement;\n }\n function focusOnDayElem(targetNode) {\n targetNode.focus();\n if (self.config.mode === \"range\")\n onMouseOver(targetNode);\n }\n function getFirstAvailableDay(delta) {\n var startMonth = delta > 0 ? 0 : self.config.showMonths - 1;\n var endMonth = delta > 0 ? self.config.showMonths : -1;\n for (var m = startMonth; m != endMonth; m += delta) {\n var month = self.daysContainer.children[m];\n var startIndex = delta > 0 ? 0 : month.children.length - 1;\n var endIndex = delta > 0 ? month.children.length : -1;\n for (var i = startIndex; i != endIndex; i += delta) {\n var c = month.children[i];\n if (c.className.indexOf(\"hidden\") === -1 && isEnabled(c.dateObj))\n return c;\n }\n }\n return undefined;\n }\n function getNextAvailableDay(current, delta) {\n var givenMonth = current.className.indexOf(\"Month\") === -1\n ? current.dateObj.getMonth()\n : self.currentMonth;\n var endMonth = delta > 0 ? self.config.showMonths : -1;\n var loopDelta = delta > 0 ? 1 : -1;\n for (var m = givenMonth - self.currentMonth; m != endMonth; m += loopDelta) {\n var month = self.daysContainer.children[m];\n var startIndex = givenMonth - self.currentMonth === m\n ? current.$i + delta\n : delta < 0\n ? month.children.length - 1\n : 0;\n var numMonthDays = month.children.length;\n for (var i = startIndex; i >= 0 && i < numMonthDays && i != (delta > 0 ? numMonthDays : -1); i += loopDelta) {\n var c = month.children[i];\n if (c.className.indexOf(\"hidden\") === -1 &&\n isEnabled(c.dateObj) &&\n Math.abs(current.$i - i) >= Math.abs(delta))\n return focusOnDayElem(c);\n }\n }\n self.changeMonth(loopDelta);\n focusOnDay(getFirstAvailableDay(loopDelta), 0);\n return undefined;\n }\n function focusOnDay(current, offset) {\n var dayFocused = isInView(document.activeElement || document.body);\n var startElem = current !== undefined\n ? current\n : dayFocused\n ? document.activeElement\n : self.selectedDateElem !== undefined && isInView(self.selectedDateElem)\n ? self.selectedDateElem\n : self.todayDateElem !== undefined && isInView(self.todayDateElem)\n ? self.todayDateElem\n : getFirstAvailableDay(offset > 0 ? 1 : -1);\n if (startElem === undefined)\n return self._input.focus();\n if (!dayFocused)\n return focusOnDayElem(startElem);\n getNextAvailableDay(startElem, offset);\n }\n function buildMonthDays(year, month) {\n var firstOfMonth = (new Date(year, month, 1).getDay() - self.l10n.firstDayOfWeek + 7) % 7;\n var prevMonthDays = self.utils.getDaysInMonth((month - 1 + 12) % 12);\n var daysInMonth = self.utils.getDaysInMonth(month), days = window.document.createDocumentFragment(), isMultiMonth = self.config.showMonths > 1, prevMonthDayClass = isMultiMonth ? \"prevMonthDay hidden\" : \"prevMonthDay\", nextMonthDayClass = isMultiMonth ? \"nextMonthDay hidden\" : \"nextMonthDay\";\n var dayNumber = prevMonthDays + 1 - firstOfMonth, dayIndex = 0;\n // prepend days from the ending of previous month\n for (; dayNumber <= prevMonthDays; dayNumber++, dayIndex++) {\n days.appendChild(createDay(prevMonthDayClass, new Date(year, month - 1, dayNumber), dayNumber, dayIndex));\n }\n // Start at 1 since there is no 0th day\n for (dayNumber = 1; dayNumber <= daysInMonth; dayNumber++, dayIndex++) {\n days.appendChild(createDay(\"\", new Date(year, month, dayNumber), dayNumber, dayIndex));\n }\n // append days from the next month\n for (var dayNum = daysInMonth + 1; dayNum <= 42 - firstOfMonth &&\n (self.config.showMonths === 1 || dayIndex % 7 !== 0); dayNum++, dayIndex++) {\n days.appendChild(createDay(nextMonthDayClass, new Date(year, month + 1, dayNum % daysInMonth), dayNum, dayIndex));\n }\n //updateNavigationCurrentMonth();\n var dayContainer = createElement(\"div\", \"dayContainer\");\n dayContainer.appendChild(days);\n return dayContainer;\n }\n function buildDays() {\n if (self.daysContainer === undefined) {\n return;\n }\n clearNode(self.daysContainer);\n // TODO: week numbers for each month\n if (self.weekNumbers)\n clearNode(self.weekNumbers);\n var frag = document.createDocumentFragment();\n for (var i = 0; i < self.config.showMonths; i++) {\n var d = new Date(self.currentYear, self.currentMonth, 1);\n d.setMonth(self.currentMonth + i);\n frag.appendChild(buildMonthDays(d.getFullYear(), d.getMonth()));\n }\n self.daysContainer.appendChild(frag);\n self.days = self.daysContainer.firstChild;\n if (self.config.mode === \"range\" && self.selectedDates.length === 1) {\n onMouseOver();\n }\n }\n function buildMonthSwitch() {\n if (self.config.showMonths > 1 ||\n self.config.monthSelectorType !== \"dropdown\")\n return;\n var shouldBuildMonth = function (month) {\n if (self.config.minDate !== undefined &&\n self.currentYear === self.config.minDate.getFullYear() &&\n month < self.config.minDate.getMonth()) {\n return false;\n }\n return !(self.config.maxDate !== undefined &&\n self.currentYear === self.config.maxDate.getFullYear() &&\n month > self.config.maxDate.getMonth());\n };\n self.monthsDropdownContainer.tabIndex = -1;\n self.monthsDropdownContainer.innerHTML = \"\";\n for (var i = 0; i < 12; i++) {\n if (!shouldBuildMonth(i))\n continue;\n var month = createElement(\"option\", \"flatpickr-monthDropdown-month\");\n month.value = new Date(self.currentYear, i).getMonth().toString();\n month.textContent = monthToStr(i, self.config.shorthandCurrentMonth, self.l10n);\n month.tabIndex = -1;\n if (self.currentMonth === i) {\n month.selected = true;\n }\n self.monthsDropdownContainer.appendChild(month);\n }\n }\n function buildMonth() {\n var container = createElement(\"div\", \"flatpickr-month\");\n var monthNavFragment = window.document.createDocumentFragment();\n var monthElement;\n if (self.config.showMonths > 1 ||\n self.config.monthSelectorType === \"static\") {\n monthElement = createElement(\"span\", \"cur-month\");\n }\n else {\n self.monthsDropdownContainer = createElement(\"select\", \"flatpickr-monthDropdown-months\");\n bind(self.monthsDropdownContainer, \"change\", function (e) {\n var target = e.target;\n var selectedMonth = parseInt(target.value, 10);\n self.changeMonth(selectedMonth - self.currentMonth);\n triggerEvent(\"onMonthChange\");\n });\n buildMonthSwitch();\n monthElement = self.monthsDropdownContainer;\n }\n var yearInput = createNumberInput(\"cur-year\", { tabindex: \"-1\" });\n var yearElement = yearInput.getElementsByTagName(\"input\")[0];\n yearElement.setAttribute(\"aria-label\", self.l10n.yearAriaLabel);\n if (self.config.minDate) {\n yearElement.setAttribute(\"min\", self.config.minDate.getFullYear().toString());\n }\n if (self.config.maxDate) {\n yearElement.setAttribute(\"max\", self.config.maxDate.getFullYear().toString());\n yearElement.disabled =\n !!self.config.minDate &&\n self.config.minDate.getFullYear() === self.config.maxDate.getFullYear();\n }\n var currentMonth = createElement(\"div\", \"flatpickr-current-month\");\n currentMonth.appendChild(monthElement);\n currentMonth.appendChild(yearInput);\n monthNavFragment.appendChild(currentMonth);\n container.appendChild(monthNavFragment);\n return {\n container: container,\n yearElement: yearElement,\n monthElement: monthElement\n };\n }\n function buildMonths() {\n clearNode(self.monthNav);\n self.monthNav.appendChild(self.prevMonthNav);\n if (self.config.showMonths) {\n self.yearElements = [];\n self.monthElements = [];\n }\n for (var m = self.config.showMonths; m--;) {\n var month = buildMonth();\n self.yearElements.push(month.yearElement);\n self.monthElements.push(month.monthElement);\n self.monthNav.appendChild(month.container);\n }\n self.monthNav.appendChild(self.nextMonthNav);\n }\n function buildMonthNav() {\n self.monthNav = createElement(\"div\", \"flatpickr-months\");\n self.yearElements = [];\n self.monthElements = [];\n self.prevMonthNav = createElement(\"span\", \"flatpickr-prev-month\");\n self.prevMonthNav.innerHTML = self.config.prevArrow;\n self.nextMonthNav = createElement(\"span\", \"flatpickr-next-month\");\n self.nextMonthNav.innerHTML = self.config.nextArrow;\n buildMonths();\n Object.defineProperty(self, \"_hidePrevMonthArrow\", {\n get: function () { return self.__hidePrevMonthArrow; },\n set: function (bool) {\n if (self.__hidePrevMonthArrow !== bool) {\n toggleClass(self.prevMonthNav, \"flatpickr-disabled\", bool);\n self.__hidePrevMonthArrow = bool;\n }\n }\n });\n Object.defineProperty(self, \"_hideNextMonthArrow\", {\n get: function () { return self.__hideNextMonthArrow; },\n set: function (bool) {\n if (self.__hideNextMonthArrow !== bool) {\n toggleClass(self.nextMonthNav, \"flatpickr-disabled\", bool);\n self.__hideNextMonthArrow = bool;\n }\n }\n });\n self.currentYearElement = self.yearElements[0];\n updateNavigationCurrentMonth();\n return self.monthNav;\n }\n function buildTime() {\n self.calendarContainer.classList.add(\"hasTime\");\n if (self.config.noCalendar)\n self.calendarContainer.classList.add(\"noCalendar\");\n self.timeContainer = createElement(\"div\", \"flatpickr-time\");\n self.timeContainer.tabIndex = -1;\n var separator = createElement(\"span\", \"flatpickr-time-separator\", \":\");\n var hourInput = createNumberInput(\"flatpickr-hour\", {\n \"aria-label\": self.l10n.hourAriaLabel\n });\n self.hourElement = hourInput.getElementsByTagName(\"input\")[0];\n var minuteInput = createNumberInput(\"flatpickr-minute\", {\n \"aria-label\": self.l10n.minuteAriaLabel\n });\n self.minuteElement = minuteInput.getElementsByTagName(\"input\")[0];\n self.hourElement.tabIndex = self.minuteElement.tabIndex = -1;\n self.hourElement.value = pad(self.latestSelectedDateObj\n ? self.latestSelectedDateObj.getHours()\n : self.config.time_24hr\n ? self.config.defaultHour\n : military2ampm(self.config.defaultHour));\n self.minuteElement.value = pad(self.latestSelectedDateObj\n ? self.latestSelectedDateObj.getMinutes()\n : self.config.defaultMinute);\n self.hourElement.setAttribute(\"step\", self.config.hourIncrement.toString());\n self.minuteElement.setAttribute(\"step\", self.config.minuteIncrement.toString());\n self.hourElement.setAttribute(\"min\", self.config.time_24hr ? \"0\" : \"1\");\n self.hourElement.setAttribute(\"max\", self.config.time_24hr ? \"23\" : \"12\");\n self.minuteElement.setAttribute(\"min\", \"0\");\n self.minuteElement.setAttribute(\"max\", \"59\");\n self.timeContainer.appendChild(hourInput);\n self.timeContainer.appendChild(separator);\n self.timeContainer.appendChild(minuteInput);\n if (self.config.time_24hr)\n self.timeContainer.classList.add(\"time24hr\");\n if (self.config.enableSeconds) {\n self.timeContainer.classList.add(\"hasSeconds\");\n var secondInput = createNumberInput(\"flatpickr-second\");\n self.secondElement = secondInput.getElementsByTagName(\"input\")[0];\n self.secondElement.value = pad(self.latestSelectedDateObj\n ? self.latestSelectedDateObj.getSeconds()\n : self.config.defaultSeconds);\n self.secondElement.setAttribute(\"step\", self.minuteElement.getAttribute(\"step\"));\n self.secondElement.setAttribute(\"min\", \"0\");\n self.secondElement.setAttribute(\"max\", \"59\");\n self.timeContainer.appendChild(createElement(\"span\", \"flatpickr-time-separator\", \":\"));\n self.timeContainer.appendChild(secondInput);\n }\n if (!self.config.time_24hr) {\n // add self.amPM if appropriate\n self.amPM = createElement(\"span\", \"flatpickr-am-pm\", self.l10n.amPM[int((self.latestSelectedDateObj\n ? self.hourElement.value\n : self.config.defaultHour) > 11)]);\n self.amPM.title = self.l10n.toggleTitle;\n self.amPM.tabIndex = -1;\n self.timeContainer.appendChild(self.amPM);\n }\n return self.timeContainer;\n }\n function buildWeekdays() {\n if (!self.weekdayContainer)\n self.weekdayContainer = createElement(\"div\", \"flatpickr-weekdays\");\n else\n clearNode(self.weekdayContainer);\n for (var i = self.config.showMonths; i--;) {\n var container = createElement(\"div\", \"flatpickr-weekdaycontainer\");\n self.weekdayContainer.appendChild(container);\n }\n updateWeekdays();\n return self.weekdayContainer;\n }\n function updateWeekdays() {\n var firstDayOfWeek = self.l10n.firstDayOfWeek;\n var weekdays = self.l10n.weekdays.shorthand.slice();\n if (firstDayOfWeek > 0 && firstDayOfWeek < weekdays.length) {\n weekdays = weekdays.splice(firstDayOfWeek, weekdays.length).concat(weekdays.splice(0, firstDayOfWeek));\n }\n for (var i = self.config.showMonths; i--;) {\n self.weekdayContainer.children[i].innerHTML = \"\\n \\n \" + weekdays.join(\"\") + \"\\n \\n \";\n }\n }\n /* istanbul ignore next */\n function buildWeeks() {\n self.calendarContainer.classList.add(\"hasWeeks\");\n var weekWrapper = createElement(\"div\", \"flatpickr-weekwrapper\");\n weekWrapper.appendChild(createElement(\"span\", \"flatpickr-weekday\", self.l10n.weekAbbreviation));\n var weekNumbers = createElement(\"div\", \"flatpickr-weeks\");\n weekWrapper.appendChild(weekNumbers);\n return {\n weekWrapper: weekWrapper,\n weekNumbers: weekNumbers\n };\n }\n function changeMonth(value, isOffset) {\n if (isOffset === void 0) { isOffset = true; }\n var delta = isOffset ? value : value - self.currentMonth;\n if ((delta < 0 && self._hidePrevMonthArrow === true) ||\n (delta > 0 && self._hideNextMonthArrow === true))\n return;\n self.currentMonth += delta;\n if (self.currentMonth < 0 || self.currentMonth > 11) {\n self.currentYear += self.currentMonth > 11 ? 1 : -1;\n self.currentMonth = (self.currentMonth + 12) % 12;\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n buildDays();\n triggerEvent(\"onMonthChange\");\n updateNavigationCurrentMonth();\n }\n function clear(triggerChangeEvent, toInitial) {\n if (triggerChangeEvent === void 0) { triggerChangeEvent = true; }\n if (toInitial === void 0) { toInitial = true; }\n self.input.value = \"\";\n if (self.altInput !== undefined)\n self.altInput.value = \"\";\n if (self.mobileInput !== undefined)\n self.mobileInput.value = \"\";\n self.selectedDates = [];\n self.latestSelectedDateObj = undefined;\n if (toInitial === true) {\n self.currentYear = self._initialDate.getFullYear();\n self.currentMonth = self._initialDate.getMonth();\n }\n self.showTimeInput = false;\n if (self.config.enableTime === true) {\n setDefaultHours();\n }\n self.redraw();\n if (triggerChangeEvent)\n // triggerChangeEvent is true (default) or an Event\n triggerEvent(\"onChange\");\n }\n function close() {\n self.isOpen = false;\n if (!self.isMobile) {\n if (self.calendarContainer !== undefined) {\n self.calendarContainer.classList.remove(\"open\");\n }\n if (self._input !== undefined) {\n self._input.classList.remove(\"active\");\n }\n }\n triggerEvent(\"onClose\");\n }\n function destroy() {\n if (self.config !== undefined)\n triggerEvent(\"onDestroy\");\n for (var i = self._handlers.length; i--;) {\n var h = self._handlers[i];\n h.element.removeEventListener(h.event, h.handler, h.options);\n }\n self._handlers = [];\n if (self.mobileInput) {\n if (self.mobileInput.parentNode)\n self.mobileInput.parentNode.removeChild(self.mobileInput);\n self.mobileInput = undefined;\n }\n else if (self.calendarContainer && self.calendarContainer.parentNode) {\n if (self.config.static && self.calendarContainer.parentNode) {\n var wrapper = self.calendarContainer.parentNode;\n wrapper.lastChild && wrapper.removeChild(wrapper.lastChild);\n if (wrapper.parentNode) {\n while (wrapper.firstChild)\n wrapper.parentNode.insertBefore(wrapper.firstChild, wrapper);\n wrapper.parentNode.removeChild(wrapper);\n }\n }\n else\n self.calendarContainer.parentNode.removeChild(self.calendarContainer);\n }\n if (self.altInput) {\n self.input.type = \"text\";\n if (self.altInput.parentNode)\n self.altInput.parentNode.removeChild(self.altInput);\n delete self.altInput;\n }\n if (self.input) {\n self.input.type = self.input._type;\n self.input.classList.remove(\"flatpickr-input\");\n self.input.removeAttribute(\"readonly\");\n self.input.value = \"\";\n }\n [\n \"_showTimeInput\",\n \"latestSelectedDateObj\",\n \"_hideNextMonthArrow\",\n \"_hidePrevMonthArrow\",\n \"__hideNextMonthArrow\",\n \"__hidePrevMonthArrow\",\n \"isMobile\",\n \"isOpen\",\n \"selectedDateElem\",\n \"minDateHasTime\",\n \"maxDateHasTime\",\n \"days\",\n \"daysContainer\",\n \"_input\",\n \"_positionElement\",\n \"innerContainer\",\n \"rContainer\",\n \"monthNav\",\n \"todayDateElem\",\n \"calendarContainer\",\n \"weekdayContainer\",\n \"prevMonthNav\",\n \"nextMonthNav\",\n \"monthsDropdownContainer\",\n \"currentMonthElement\",\n \"currentYearElement\",\n \"navigationCurrentMonth\",\n \"selectedDateElem\",\n \"config\",\n ].forEach(function (k) {\n try {\n delete self[k];\n }\n catch (_) { }\n });\n }\n function isCalendarElem(elem) {\n if (self.config.appendTo && self.config.appendTo.contains(elem))\n return true;\n return self.calendarContainer.contains(elem);\n }\n function documentClick(e) {\n if (self.isOpen && !self.config.inline) {\n var eventTarget_1 = getEventTarget(e);\n var isCalendarElement = isCalendarElem(eventTarget_1);\n var isInput = eventTarget_1 === self.input ||\n eventTarget_1 === self.altInput ||\n self.element.contains(eventTarget_1) ||\n // web components\n // e.path is not present in all browsers. circumventing typechecks\n (e.path &&\n e.path.indexOf &&\n (~e.path.indexOf(self.input) ||\n ~e.path.indexOf(self.altInput)));\n var lostFocus = e.type === \"blur\"\n ? isInput &&\n e.relatedTarget &&\n !isCalendarElem(e.relatedTarget)\n : !isInput &&\n !isCalendarElement &&\n !isCalendarElem(e.relatedTarget);\n var isIgnored = !self.config.ignoredFocusElements.some(function (elem) {\n return elem.contains(eventTarget_1);\n });\n if (lostFocus && isIgnored) {\n self.close();\n if (self.config.mode === \"range\" && self.selectedDates.length === 1) {\n self.clear(false);\n self.redraw();\n }\n }\n }\n }\n function changeYear(newYear) {\n if (!newYear ||\n (self.config.minDate && newYear < self.config.minDate.getFullYear()) ||\n (self.config.maxDate && newYear > self.config.maxDate.getFullYear()))\n return;\n var newYearNum = newYear, isNewYear = self.currentYear !== newYearNum;\n self.currentYear = newYearNum || self.currentYear;\n if (self.config.maxDate &&\n self.currentYear === self.config.maxDate.getFullYear()) {\n self.currentMonth = Math.min(self.config.maxDate.getMonth(), self.currentMonth);\n }\n else if (self.config.minDate &&\n self.currentYear === self.config.minDate.getFullYear()) {\n self.currentMonth = Math.max(self.config.minDate.getMonth(), self.currentMonth);\n }\n if (isNewYear) {\n self.redraw();\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n }\n function isEnabled(date, timeless) {\n if (timeless === void 0) { timeless = true; }\n var dateToCheck = self.parseDate(date, undefined, timeless); // timeless\n if ((self.config.minDate &&\n dateToCheck &&\n compareDates(dateToCheck, self.config.minDate, timeless !== undefined ? timeless : !self.minDateHasTime) < 0) ||\n (self.config.maxDate &&\n dateToCheck &&\n compareDates(dateToCheck, self.config.maxDate, timeless !== undefined ? timeless : !self.maxDateHasTime) > 0))\n return false;\n if (self.config.enable.length === 0 && self.config.disable.length === 0)\n return true;\n if (dateToCheck === undefined)\n return false;\n var bool = self.config.enable.length > 0, array = bool ? self.config.enable : self.config.disable;\n for (var i = 0, d = void 0; i < array.length; i++) {\n d = array[i];\n if (typeof d === \"function\" &&\n d(dateToCheck) // disabled by function\n )\n return bool;\n else if (d instanceof Date &&\n dateToCheck !== undefined &&\n d.getTime() === dateToCheck.getTime())\n // disabled by date\n return bool;\n else if (typeof d === \"string\" && dateToCheck !== undefined) {\n // disabled by date string\n var parsed = self.parseDate(d, undefined, true);\n return parsed && parsed.getTime() === dateToCheck.getTime()\n ? bool\n : !bool;\n }\n else if (\n // disabled by range\n typeof d === \"object\" &&\n dateToCheck !== undefined &&\n d.from &&\n d.to &&\n dateToCheck.getTime() >= d.from.getTime() &&\n dateToCheck.getTime() <= d.to.getTime())\n return bool;\n }\n return !bool;\n }\n function isInView(elem) {\n if (self.daysContainer !== undefined)\n return (elem.className.indexOf(\"hidden\") === -1 &&\n self.daysContainer.contains(elem));\n return false;\n }\n function onKeyDown(e) {\n // e.key e.keyCode\n // \"Backspace\" 8\n // \"Tab\" 9\n // \"Enter\" 13\n // \"Escape\" (IE \"Esc\") 27\n // \"ArrowLeft\" (IE \"Left\") 37\n // \"ArrowUp\" (IE \"Up\") 38\n // \"ArrowRight\" (IE \"Right\") 39\n // \"ArrowDown\" (IE \"Down\") 40\n // \"Delete\" (IE \"Del\") 46\n var isInput = e.target === self._input;\n var allowInput = self.config.allowInput;\n var allowKeydown = self.isOpen && (!allowInput || !isInput);\n var allowInlineKeydown = self.config.inline && isInput && !allowInput;\n if (e.keyCode === 13 && isInput) {\n if (allowInput) {\n self.setDate(self._input.value, true, e.target === self.altInput\n ? self.config.altFormat\n : self.config.dateFormat);\n return e.target.blur();\n }\n else {\n self.open();\n }\n }\n else if (isCalendarElem(e.target) ||\n allowKeydown ||\n allowInlineKeydown) {\n var isTimeObj = !!self.timeContainer &&\n self.timeContainer.contains(e.target);\n switch (e.keyCode) {\n case 13:\n if (isTimeObj) {\n e.preventDefault();\n updateTime();\n focusAndClose();\n }\n else\n selectDate(e);\n break;\n case 27: // escape\n e.preventDefault();\n focusAndClose();\n break;\n case 8:\n case 46:\n if (isInput && !self.config.allowInput) {\n e.preventDefault();\n self.clear();\n }\n break;\n case 37:\n case 39:\n if (!isTimeObj && !isInput) {\n e.preventDefault();\n if (self.daysContainer !== undefined &&\n (allowInput === false ||\n (document.activeElement && isInView(document.activeElement)))) {\n var delta_1 = e.keyCode === 39 ? 1 : -1;\n if (!e.ctrlKey)\n focusOnDay(undefined, delta_1);\n else {\n e.stopPropagation();\n changeMonth(delta_1);\n focusOnDay(getFirstAvailableDay(1), 0);\n }\n }\n }\n else if (self.hourElement)\n self.hourElement.focus();\n break;\n case 38:\n case 40:\n e.preventDefault();\n var delta = e.keyCode === 40 ? 1 : -1;\n if ((self.daysContainer && e.target.$i !== undefined) ||\n e.target === self.input) {\n if (e.ctrlKey) {\n e.stopPropagation();\n changeYear(self.currentYear - delta);\n focusOnDay(getFirstAvailableDay(1), 0);\n }\n else if (!isTimeObj)\n focusOnDay(undefined, delta * 7);\n }\n else if (e.target === self.currentYearElement) {\n changeYear(self.currentYear - delta);\n }\n else if (self.config.enableTime) {\n if (!isTimeObj && self.hourElement)\n self.hourElement.focus();\n updateTime(e);\n self._debouncedChange();\n }\n break;\n case 9:\n if (isTimeObj) {\n var elems = [\n self.hourElement,\n self.minuteElement,\n self.secondElement,\n self.amPM,\n ]\n .concat(self.pluginElements)\n .filter(function (x) { return x; });\n var i = elems.indexOf(e.target);\n if (i !== -1) {\n var target = elems[i + (e.shiftKey ? -1 : 1)];\n e.preventDefault();\n (target || self._input).focus();\n }\n }\n else if (!self.config.noCalendar &&\n self.daysContainer &&\n self.daysContainer.contains(e.target) &&\n e.shiftKey) {\n e.preventDefault();\n self._input.focus();\n }\n break;\n default:\n break;\n }\n }\n if (self.amPM !== undefined && e.target === self.amPM) {\n switch (e.key) {\n case self.l10n.amPM[0].charAt(0):\n case self.l10n.amPM[0].charAt(0).toLowerCase():\n self.amPM.textContent = self.l10n.amPM[0];\n setHoursFromInputs();\n updateValue();\n break;\n case self.l10n.amPM[1].charAt(0):\n case self.l10n.amPM[1].charAt(0).toLowerCase():\n self.amPM.textContent = self.l10n.amPM[1];\n setHoursFromInputs();\n updateValue();\n break;\n }\n }\n if (isInput || isCalendarElem(e.target)) {\n triggerEvent(\"onKeyDown\", e);\n }\n }\n function onMouseOver(elem) {\n if (self.selectedDates.length !== 1 ||\n (elem &&\n (!elem.classList.contains(\"flatpickr-day\") ||\n elem.classList.contains(\"flatpickr-disabled\"))))\n return;\n var hoverDate = elem\n ? elem.dateObj.getTime()\n : self.days.firstElementChild.dateObj.getTime(), initialDate = self.parseDate(self.selectedDates[0], undefined, true).getTime(), rangeStartDate = Math.min(hoverDate, self.selectedDates[0].getTime()), rangeEndDate = Math.max(hoverDate, self.selectedDates[0].getTime());\n var containsDisabled = false;\n var minRange = 0, maxRange = 0;\n for (var t = rangeStartDate; t < rangeEndDate; t += duration.DAY) {\n if (!isEnabled(new Date(t), true)) {\n containsDisabled =\n containsDisabled || (t > rangeStartDate && t < rangeEndDate);\n if (t < initialDate && (!minRange || t > minRange))\n minRange = t;\n else if (t > initialDate && (!maxRange || t < maxRange))\n maxRange = t;\n }\n }\n for (var m = 0; m < self.config.showMonths; m++) {\n var month = self.daysContainer.children[m];\n var _loop_1 = function (i, l) {\n var dayElem = month.children[i], date = dayElem.dateObj;\n var timestamp = date.getTime();\n var outOfRange = (minRange > 0 && timestamp < minRange) ||\n (maxRange > 0 && timestamp > maxRange);\n if (outOfRange) {\n dayElem.classList.add(\"notAllowed\");\n [\"inRange\", \"startRange\", \"endRange\"].forEach(function (c) {\n dayElem.classList.remove(c);\n });\n return \"continue\";\n }\n else if (containsDisabled && !outOfRange)\n return \"continue\";\n [\"startRange\", \"inRange\", \"endRange\", \"notAllowed\"].forEach(function (c) {\n dayElem.classList.remove(c);\n });\n if (elem !== undefined) {\n elem.classList.add(hoverDate <= self.selectedDates[0].getTime()\n ? \"startRange\"\n : \"endRange\");\n if (initialDate < hoverDate && timestamp === initialDate)\n dayElem.classList.add(\"startRange\");\n else if (initialDate > hoverDate && timestamp === initialDate)\n dayElem.classList.add(\"endRange\");\n if (timestamp >= minRange &&\n (maxRange === 0 || timestamp <= maxRange) &&\n isBetween(timestamp, initialDate, hoverDate))\n dayElem.classList.add(\"inRange\");\n }\n };\n for (var i = 0, l = month.children.length; i < l; i++) {\n _loop_1(i, l);\n }\n }\n }\n function onResize() {\n if (self.isOpen && !self.config.static && !self.config.inline)\n positionCalendar();\n }\n function setDefaultTime() {\n self.setDate(self.config.minDate !== undefined\n ? new Date(self.config.minDate.getTime())\n : new Date(), true);\n setDefaultHours();\n updateValue();\n }\n function open(e, positionElement) {\n if (positionElement === void 0) { positionElement = self._positionElement; }\n if (self.isMobile === true) {\n if (e) {\n e.preventDefault();\n e.target && e.target.blur();\n }\n if (self.mobileInput !== undefined) {\n self.mobileInput.focus();\n self.mobileInput.click();\n }\n triggerEvent(\"onOpen\");\n return;\n }\n if (self._input.disabled || self.config.inline)\n return;\n var wasOpen = self.isOpen;\n self.isOpen = true;\n if (!wasOpen) {\n self.calendarContainer.classList.add(\"open\");\n self._input.classList.add(\"active\");\n triggerEvent(\"onOpen\");\n positionCalendar(positionElement);\n }\n if (self.config.enableTime === true && self.config.noCalendar === true) {\n if (self.selectedDates.length === 0) {\n setDefaultTime();\n }\n if (self.config.allowInput === false &&\n (e === undefined ||\n !self.timeContainer.contains(e.relatedTarget))) {\n setTimeout(function () { return self.hourElement.select(); }, 50);\n }\n }\n }\n function minMaxDateSetter(type) {\n return function (date) {\n var dateObj = (self.config[\"_\" + type + \"Date\"] = self.parseDate(date, self.config.dateFormat));\n var inverseDateObj = self.config[\"_\" + (type === \"min\" ? \"max\" : \"min\") + \"Date\"];\n if (dateObj !== undefined) {\n self[type === \"min\" ? \"minDateHasTime\" : \"maxDateHasTime\"] =\n dateObj.getHours() > 0 ||\n dateObj.getMinutes() > 0 ||\n dateObj.getSeconds() > 0;\n }\n if (self.selectedDates) {\n self.selectedDates = self.selectedDates.filter(function (d) { return isEnabled(d); });\n if (!self.selectedDates.length && type === \"min\")\n setHoursFromDate(dateObj);\n updateValue();\n }\n if (self.daysContainer) {\n redraw();\n if (dateObj !== undefined)\n self.currentYearElement[type] = dateObj.getFullYear().toString();\n else\n self.currentYearElement.removeAttribute(type);\n self.currentYearElement.disabled =\n !!inverseDateObj &&\n dateObj !== undefined &&\n inverseDateObj.getFullYear() === dateObj.getFullYear();\n }\n };\n }\n function parseConfig() {\n var boolOpts = [\n \"wrap\",\n \"weekNumbers\",\n \"allowInput\",\n \"clickOpens\",\n \"time_24hr\",\n \"enableTime\",\n \"noCalendar\",\n \"altInput\",\n \"shorthandCurrentMonth\",\n \"inline\",\n \"static\",\n \"enableSeconds\",\n \"disableMobile\",\n ];\n var userConfig = __assign({}, instanceConfig, JSON.parse(JSON.stringify(element.dataset || {})));\n var formats = {};\n self.config.parseDate = userConfig.parseDate;\n self.config.formatDate = userConfig.formatDate;\n Object.defineProperty(self.config, \"enable\", {\n get: function () { return self.config._enable; },\n set: function (dates) {\n self.config._enable = parseDateRules(dates);\n }\n });\n Object.defineProperty(self.config, \"disable\", {\n get: function () { return self.config._disable; },\n set: function (dates) {\n self.config._disable = parseDateRules(dates);\n }\n });\n var timeMode = userConfig.mode === \"time\";\n if (!userConfig.dateFormat && (userConfig.enableTime || timeMode)) {\n var defaultDateFormat = flatpickr.defaultConfig.dateFormat || defaults.dateFormat;\n formats.dateFormat =\n userConfig.noCalendar || timeMode\n ? \"H:i\" + (userConfig.enableSeconds ? \":S\" : \"\")\n : defaultDateFormat + \" H:i\" + (userConfig.enableSeconds ? \":S\" : \"\");\n }\n if (userConfig.altInput &&\n (userConfig.enableTime || timeMode) &&\n !userConfig.altFormat) {\n var defaultAltFormat = flatpickr.defaultConfig.altFormat || defaults.altFormat;\n formats.altFormat =\n userConfig.noCalendar || timeMode\n ? \"h:i\" + (userConfig.enableSeconds ? \":S K\" : \" K\")\n : defaultAltFormat + (\" h:i\" + (userConfig.enableSeconds ? \":S\" : \"\") + \" K\");\n }\n if (!userConfig.altInputClass) {\n self.config.altInputClass =\n self.input.className + \" \" + self.config.altInputClass;\n }\n Object.defineProperty(self.config, \"minDate\", {\n get: function () { return self.config._minDate; },\n set: minMaxDateSetter(\"min\")\n });\n Object.defineProperty(self.config, \"maxDate\", {\n get: function () { return self.config._maxDate; },\n set: minMaxDateSetter(\"max\")\n });\n var minMaxTimeSetter = function (type) { return function (val) {\n self.config[type === \"min\" ? \"_minTime\" : \"_maxTime\"] = self.parseDate(val, \"H:i\");\n }; };\n Object.defineProperty(self.config, \"minTime\", {\n get: function () { return self.config._minTime; },\n set: minMaxTimeSetter(\"min\")\n });\n Object.defineProperty(self.config, \"maxTime\", {\n get: function () { return self.config._maxTime; },\n set: minMaxTimeSetter(\"max\")\n });\n if (userConfig.mode === \"time\") {\n self.config.noCalendar = true;\n self.config.enableTime = true;\n }\n Object.assign(self.config, formats, userConfig);\n for (var i = 0; i < boolOpts.length; i++)\n self.config[boolOpts[i]] =\n self.config[boolOpts[i]] === true ||\n self.config[boolOpts[i]] === \"true\";\n HOOKS.filter(function (hook) { return self.config[hook] !== undefined; }).forEach(function (hook) {\n self.config[hook] = arrayify(self.config[hook] || []).map(bindToInstance);\n });\n self.isMobile =\n !self.config.disableMobile &&\n !self.config.inline &&\n self.config.mode === \"single\" &&\n !self.config.disable.length &&\n !self.config.enable.length &&\n !self.config.weekNumbers &&\n /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n for (var i = 0; i < self.config.plugins.length; i++) {\n var pluginConf = self.config.plugins[i](self) || {};\n for (var key in pluginConf) {\n if (HOOKS.indexOf(key) > -1) {\n self.config[key] = arrayify(pluginConf[key])\n .map(bindToInstance)\n .concat(self.config[key]);\n }\n else if (typeof userConfig[key] === \"undefined\")\n self.config[key] = pluginConf[key];\n }\n }\n triggerEvent(\"onParseConfig\");\n }\n function setupLocale() {\n if (typeof self.config.locale !== \"object\" &&\n typeof flatpickr.l10ns[self.config.locale] === \"undefined\")\n self.config.errorHandler(new Error(\"flatpickr: invalid locale \" + self.config.locale));\n self.l10n = __assign({}, flatpickr.l10ns[\"default\"], (typeof self.config.locale === \"object\"\n ? self.config.locale\n : self.config.locale !== \"default\"\n ? flatpickr.l10ns[self.config.locale]\n : undefined));\n tokenRegex.K = \"(\" + self.l10n.amPM[0] + \"|\" + self.l10n.amPM[1] + \"|\" + self.l10n.amPM[0].toLowerCase() + \"|\" + self.l10n.amPM[1].toLowerCase() + \")\";\n var userConfig = __assign({}, instanceConfig, JSON.parse(JSON.stringify(element.dataset || {})));\n if (userConfig.time_24hr === undefined &&\n flatpickr.defaultConfig.time_24hr === undefined) {\n self.config.time_24hr = self.l10n.time_24hr;\n }\n self.formatDate = createDateFormatter(self);\n self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });\n }\n function positionCalendar(customPositionElement) {\n if (self.calendarContainer === undefined)\n return;\n triggerEvent(\"onPreCalendarPosition\");\n var positionElement = customPositionElement || self._positionElement;\n var calendarHeight = Array.prototype.reduce.call(self.calendarContainer.children, (function (acc, child) { return acc + child.offsetHeight; }), 0), calendarWidth = self.calendarContainer.offsetWidth, configPos = self.config.position.split(\" \"), configPosVertical = configPos[0], configPosHorizontal = configPos.length > 1 ? configPos[1] : null, inputBounds = positionElement.getBoundingClientRect(), distanceFromBottom = window.innerHeight - inputBounds.bottom, showOnTop = configPosVertical === \"above\" ||\n (configPosVertical !== \"below\" &&\n distanceFromBottom < calendarHeight &&\n inputBounds.top > calendarHeight);\n var top = window.pageYOffset +\n inputBounds.top +\n (!showOnTop ? positionElement.offsetHeight + 2 : -calendarHeight - 2);\n toggleClass(self.calendarContainer, \"arrowTop\", !showOnTop);\n toggleClass(self.calendarContainer, \"arrowBottom\", showOnTop);\n if (self.config.inline)\n return;\n var left = window.pageXOffset +\n inputBounds.left -\n (configPosHorizontal != null && configPosHorizontal === \"center\"\n ? (calendarWidth - inputBounds.width) / 2\n : 0);\n var right = window.document.body.offsetWidth - inputBounds.right;\n var rightMost = left + calendarWidth > window.document.body.offsetWidth;\n var centerMost = right + calendarWidth > window.document.body.offsetWidth;\n toggleClass(self.calendarContainer, \"rightMost\", rightMost);\n if (self.config.static)\n return;\n self.calendarContainer.style.top = top + \"px\";\n if (!rightMost) {\n self.calendarContainer.style.left = left + \"px\";\n self.calendarContainer.style.right = \"auto\";\n }\n else if (!centerMost) {\n self.calendarContainer.style.left = \"auto\";\n self.calendarContainer.style.right = right + \"px\";\n }\n else {\n var doc = document.styleSheets[0];\n // some testing environments don't have css support\n if (doc === undefined)\n return;\n var bodyWidth = window.document.body.offsetWidth;\n var centerLeft = Math.max(0, bodyWidth / 2 - calendarWidth / 2);\n var centerBefore = \".flatpickr-calendar.centerMost:before\";\n var centerAfter = \".flatpickr-calendar.centerMost:after\";\n var centerIndex = doc.cssRules.length;\n var centerStyle = \"{left:\" + inputBounds.left + \"px;right:auto;}\";\n toggleClass(self.calendarContainer, \"rightMost\", false);\n toggleClass(self.calendarContainer, \"centerMost\", true);\n doc.insertRule(centerBefore + \",\" + centerAfter + centerStyle, centerIndex);\n self.calendarContainer.style.left = centerLeft + \"px\";\n self.calendarContainer.style.right = \"auto\";\n }\n }\n function redraw() {\n if (self.config.noCalendar || self.isMobile)\n return;\n updateNavigationCurrentMonth();\n buildDays();\n }\n function focusAndClose() {\n self._input.focus();\n if (window.navigator.userAgent.indexOf(\"MSIE\") !== -1 ||\n navigator.msMaxTouchPoints !== undefined) {\n // hack - bugs in the way IE handles focus keeps the calendar open\n setTimeout(self.close, 0);\n }\n else {\n self.close();\n }\n }\n function selectDate(e) {\n e.preventDefault();\n e.stopPropagation();\n var isSelectable = function (day) {\n return day.classList &&\n day.classList.contains(\"flatpickr-day\") &&\n !day.classList.contains(\"flatpickr-disabled\") &&\n !day.classList.contains(\"notAllowed\");\n };\n var t = findParent(e.target, isSelectable);\n if (t === undefined)\n return;\n var target = t;\n var selectedDate = (self.latestSelectedDateObj = new Date(target.dateObj.getTime()));\n var shouldChangeMonth = (selectedDate.getMonth() < self.currentMonth ||\n selectedDate.getMonth() >\n self.currentMonth + self.config.showMonths - 1) &&\n self.config.mode !== \"range\";\n self.selectedDateElem = target;\n if (self.config.mode === \"single\")\n self.selectedDates = [selectedDate];\n else if (self.config.mode === \"multiple\") {\n var selectedIndex = isDateSelected(selectedDate);\n if (selectedIndex)\n self.selectedDates.splice(parseInt(selectedIndex), 1);\n else\n self.selectedDates.push(selectedDate);\n }\n else if (self.config.mode === \"range\") {\n if (self.selectedDates.length === 2) {\n self.clear(false, false);\n }\n self.latestSelectedDateObj = selectedDate;\n self.selectedDates.push(selectedDate);\n // unless selecting same date twice, sort ascendingly\n if (compareDates(selectedDate, self.selectedDates[0], true) !== 0)\n self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });\n }\n setHoursFromInputs();\n if (shouldChangeMonth) {\n var isNewYear = self.currentYear !== selectedDate.getFullYear();\n self.currentYear = selectedDate.getFullYear();\n self.currentMonth = selectedDate.getMonth();\n if (isNewYear) {\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n triggerEvent(\"onMonthChange\");\n }\n updateNavigationCurrentMonth();\n buildDays();\n updateValue();\n if (self.config.enableTime)\n setTimeout(function () { return (self.showTimeInput = true); }, 50);\n // maintain focus\n if (!shouldChangeMonth &&\n self.config.mode !== \"range\" &&\n self.config.showMonths === 1)\n focusOnDayElem(target);\n else if (self.selectedDateElem !== undefined &&\n self.hourElement === undefined) {\n self.selectedDateElem && self.selectedDateElem.focus();\n }\n if (self.hourElement !== undefined)\n self.hourElement !== undefined && self.hourElement.focus();\n if (self.config.closeOnSelect) {\n var single = self.config.mode === \"single\" && !self.config.enableTime;\n var range = self.config.mode === \"range\" &&\n self.selectedDates.length === 2 &&\n !self.config.enableTime;\n if (single || range) {\n focusAndClose();\n }\n }\n triggerChange();\n }\n var CALLBACKS = {\n locale: [setupLocale, updateWeekdays],\n showMonths: [buildMonths, setCalendarWidth, buildWeekdays],\n minDate: [jumpToDate],\n maxDate: [jumpToDate]\n };\n function set(option, value) {\n if (option !== null && typeof option === \"object\") {\n Object.assign(self.config, option);\n for (var key in option) {\n if (CALLBACKS[key] !== undefined)\n CALLBACKS[key].forEach(function (x) { return x(); });\n }\n }\n else {\n self.config[option] = value;\n if (CALLBACKS[option] !== undefined)\n CALLBACKS[option].forEach(function (x) { return x(); });\n else if (HOOKS.indexOf(option) > -1)\n self.config[option] = arrayify(value);\n }\n self.redraw();\n updateValue(false);\n }\n function setSelectedDate(inputDate, format) {\n var dates = [];\n if (inputDate instanceof Array)\n dates = inputDate.map(function (d) { return self.parseDate(d, format); });\n else if (inputDate instanceof Date || typeof inputDate === \"number\")\n dates = [self.parseDate(inputDate, format)];\n else if (typeof inputDate === \"string\") {\n switch (self.config.mode) {\n case \"single\":\n case \"time\":\n dates = [self.parseDate(inputDate, format)];\n break;\n case \"multiple\":\n dates = inputDate\n .split(self.config.conjunction)\n .map(function (date) { return self.parseDate(date, format); });\n break;\n case \"range\":\n dates = inputDate\n .split(self.l10n.rangeSeparator)\n .map(function (date) { return self.parseDate(date, format); });\n break;\n default:\n break;\n }\n }\n else\n self.config.errorHandler(new Error(\"Invalid date supplied: \" + JSON.stringify(inputDate)));\n self.selectedDates = dates.filter(function (d) { return d instanceof Date && isEnabled(d, false); });\n if (self.config.mode === \"range\")\n self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });\n }\n function setDate(date, triggerChange, format) {\n if (triggerChange === void 0) { triggerChange = false; }\n if (format === void 0) { format = self.config.dateFormat; }\n if ((date !== 0 && !date) || (date instanceof Array && date.length === 0))\n return self.clear(triggerChange);\n setSelectedDate(date, format);\n self.showTimeInput = self.selectedDates.length > 0;\n self.latestSelectedDateObj =\n self.selectedDates[self.selectedDates.length - 1];\n self.redraw();\n jumpToDate();\n setHoursFromDate();\n if (self.selectedDates.length === 0) {\n self.clear(false);\n }\n updateValue(triggerChange);\n if (triggerChange)\n triggerEvent(\"onChange\");\n }\n function parseDateRules(arr) {\n return arr\n .slice()\n .map(function (rule) {\n if (typeof rule === \"string\" ||\n typeof rule === \"number\" ||\n rule instanceof Date) {\n return self.parseDate(rule, undefined, true);\n }\n else if (rule &&\n typeof rule === \"object\" &&\n rule.from &&\n rule.to)\n return {\n from: self.parseDate(rule.from, undefined),\n to: self.parseDate(rule.to, undefined)\n };\n return rule;\n })\n .filter(function (x) { return x; }); // remove falsy values\n }\n function setupDates() {\n self.selectedDates = [];\n self.now = self.parseDate(self.config.now) || new Date();\n // Workaround IE11 setting placeholder as the input's value\n var preloadedDate = self.config.defaultDate ||\n ((self.input.nodeName === \"INPUT\" ||\n self.input.nodeName === \"TEXTAREA\") &&\n self.input.placeholder &&\n self.input.value === self.input.placeholder\n ? null\n : self.input.value);\n if (preloadedDate)\n setSelectedDate(preloadedDate, self.config.dateFormat);\n self._initialDate =\n self.selectedDates.length > 0\n ? self.selectedDates[0]\n : self.config.minDate &&\n self.config.minDate.getTime() > self.now.getTime()\n ? self.config.minDate\n : self.config.maxDate &&\n self.config.maxDate.getTime() < self.now.getTime()\n ? self.config.maxDate\n : self.now;\n self.currentYear = self._initialDate.getFullYear();\n self.currentMonth = self._initialDate.getMonth();\n if (self.selectedDates.length > 0)\n self.latestSelectedDateObj = self.selectedDates[0];\n if (self.config.minTime !== undefined)\n self.config.minTime = self.parseDate(self.config.minTime, \"H:i\");\n if (self.config.maxTime !== undefined)\n self.config.maxTime = self.parseDate(self.config.maxTime, \"H:i\");\n self.minDateHasTime =\n !!self.config.minDate &&\n (self.config.minDate.getHours() > 0 ||\n self.config.minDate.getMinutes() > 0 ||\n self.config.minDate.getSeconds() > 0);\n self.maxDateHasTime =\n !!self.config.maxDate &&\n (self.config.maxDate.getHours() > 0 ||\n self.config.maxDate.getMinutes() > 0 ||\n self.config.maxDate.getSeconds() > 0);\n Object.defineProperty(self, \"showTimeInput\", {\n get: function () { return self._showTimeInput; },\n set: function (bool) {\n self._showTimeInput = bool;\n if (self.calendarContainer)\n toggleClass(self.calendarContainer, \"showTimeInput\", bool);\n self.isOpen && positionCalendar();\n }\n });\n }\n function setupInputs() {\n self.input = self.config.wrap\n ? element.querySelector(\"[data-input]\")\n : element;\n /* istanbul ignore next */\n if (!self.input) {\n self.config.errorHandler(new Error(\"Invalid input element specified\"));\n return;\n }\n // hack: store previous type to restore it after destroy()\n self.input._type = self.input.type;\n self.input.type = \"text\";\n self.input.classList.add(\"flatpickr-input\");\n self._input = self.input;\n if (self.config.altInput) {\n // replicate self.element\n self.altInput = createElement(self.input.nodeName, self.config.altInputClass);\n self._input = self.altInput;\n self.altInput.placeholder = self.input.placeholder;\n self.altInput.disabled = self.input.disabled;\n self.altInput.required = self.input.required;\n self.altInput.tabIndex = self.input.tabIndex;\n self.altInput.type = \"text\";\n self.input.setAttribute(\"type\", \"hidden\");\n if (!self.config.static && self.input.parentNode)\n self.input.parentNode.insertBefore(self.altInput, self.input.nextSibling);\n }\n if (!self.config.allowInput)\n self._input.setAttribute(\"readonly\", \"readonly\");\n self._positionElement = self.config.positionElement || self._input;\n }\n function setupMobile() {\n var inputType = self.config.enableTime\n ? self.config.noCalendar\n ? \"time\"\n : \"datetime-local\"\n : \"date\";\n self.mobileInput = createElement(\"input\", self.input.className + \" flatpickr-mobile\");\n self.mobileInput.step = self.input.getAttribute(\"step\") || \"any\";\n self.mobileInput.tabIndex = 1;\n self.mobileInput.type = inputType;\n self.mobileInput.disabled = self.input.disabled;\n self.mobileInput.required = self.input.required;\n self.mobileInput.placeholder = self.input.placeholder;\n self.mobileFormatStr =\n inputType === \"datetime-local\"\n ? \"Y-m-d\\\\TH:i:S\"\n : inputType === \"date\"\n ? \"Y-m-d\"\n : \"H:i:S\";\n if (self.selectedDates.length > 0) {\n self.mobileInput.defaultValue = self.mobileInput.value = self.formatDate(self.selectedDates[0], self.mobileFormatStr);\n }\n if (self.config.minDate)\n self.mobileInput.min = self.formatDate(self.config.minDate, \"Y-m-d\");\n if (self.config.maxDate)\n self.mobileInput.max = self.formatDate(self.config.maxDate, \"Y-m-d\");\n self.input.type = \"hidden\";\n if (self.altInput !== undefined)\n self.altInput.type = \"hidden\";\n try {\n if (self.input.parentNode)\n self.input.parentNode.insertBefore(self.mobileInput, self.input.nextSibling);\n }\n catch (_a) { }\n bind(self.mobileInput, \"change\", function (e) {\n self.setDate(e.target.value, false, self.mobileFormatStr);\n triggerEvent(\"onChange\");\n triggerEvent(\"onClose\");\n });\n }\n function toggle(e) {\n if (self.isOpen === true)\n return self.close();\n self.open(e);\n }\n function triggerEvent(event, data) {\n // If the instance has been destroyed already, all hooks have been removed\n if (self.config === undefined)\n return;\n var hooks = self.config[event];\n if (hooks !== undefined && hooks.length > 0) {\n for (var i = 0; hooks[i] && i < hooks.length; i++)\n hooks[i](self.selectedDates, self.input.value, self, data);\n }\n if (event === \"onChange\") {\n self.input.dispatchEvent(createEvent(\"change\"));\n // many front-end frameworks bind to the input event\n self.input.dispatchEvent(createEvent(\"input\"));\n }\n }\n function createEvent(name) {\n var e = document.createEvent(\"Event\");\n e.initEvent(name, true, true);\n return e;\n }\n function isDateSelected(date) {\n for (var i = 0; i < self.selectedDates.length; i++) {\n if (compareDates(self.selectedDates[i], date) === 0)\n return \"\" + i;\n }\n return false;\n }\n function isDateInRange(date) {\n if (self.config.mode !== \"range\" || self.selectedDates.length < 2)\n return false;\n return (compareDates(date, self.selectedDates[0]) >= 0 &&\n compareDates(date, self.selectedDates[1]) <= 0);\n }\n function updateNavigationCurrentMonth() {\n if (self.config.noCalendar || self.isMobile || !self.monthNav)\n return;\n self.yearElements.forEach(function (yearElement, i) {\n var d = new Date(self.currentYear, self.currentMonth, 1);\n d.setMonth(self.currentMonth + i);\n if (self.config.showMonths > 1 ||\n self.config.monthSelectorType === \"static\") {\n self.monthElements[i].textContent =\n monthToStr(d.getMonth(), self.config.shorthandCurrentMonth, self.l10n) + \" \";\n }\n else {\n self.monthsDropdownContainer.value = d.getMonth().toString();\n }\n yearElement.value = d.getFullYear().toString();\n });\n self._hidePrevMonthArrow =\n self.config.minDate !== undefined &&\n (self.currentYear === self.config.minDate.getFullYear()\n ? self.currentMonth <= self.config.minDate.getMonth()\n : self.currentYear < self.config.minDate.getFullYear());\n self._hideNextMonthArrow =\n self.config.maxDate !== undefined &&\n (self.currentYear === self.config.maxDate.getFullYear()\n ? self.currentMonth + 1 > self.config.maxDate.getMonth()\n : self.currentYear > self.config.maxDate.getFullYear());\n }\n function getDateStr(format) {\n return self.selectedDates\n .map(function (dObj) { return self.formatDate(dObj, format); })\n .filter(function (d, i, arr) {\n return self.config.mode !== \"range\" ||\n self.config.enableTime ||\n arr.indexOf(d) === i;\n })\n .join(self.config.mode !== \"range\"\n ? self.config.conjunction\n : self.l10n.rangeSeparator);\n }\n /**\n * Updates the values of inputs associated with the calendar\n */\n function updateValue(triggerChange) {\n if (triggerChange === void 0) { triggerChange = true; }\n if (self.mobileInput !== undefined && self.mobileFormatStr) {\n self.mobileInput.value =\n self.latestSelectedDateObj !== undefined\n ? self.formatDate(self.latestSelectedDateObj, self.mobileFormatStr)\n : \"\";\n }\n self.input.value = getDateStr(self.config.dateFormat);\n if (self.altInput !== undefined) {\n self.altInput.value = getDateStr(self.config.altFormat);\n }\n if (triggerChange !== false)\n triggerEvent(\"onValueUpdate\");\n }\n function onMonthNavClick(e) {\n var isPrevMonth = self.prevMonthNav.contains(e.target);\n var isNextMonth = self.nextMonthNav.contains(e.target);\n if (isPrevMonth || isNextMonth) {\n changeMonth(isPrevMonth ? -1 : 1);\n }\n else if (self.yearElements.indexOf(e.target) >= 0) {\n e.target.select();\n }\n else if (e.target.classList.contains(\"arrowUp\")) {\n self.changeYear(self.currentYear + 1);\n }\n else if (e.target.classList.contains(\"arrowDown\")) {\n self.changeYear(self.currentYear - 1);\n }\n }\n function timeWrapper(e) {\n e.preventDefault();\n var isKeyDown = e.type === \"keydown\", input = e.target;\n if (self.amPM !== undefined && e.target === self.amPM) {\n self.amPM.textContent =\n self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n }\n var min = parseFloat(input.getAttribute(\"min\")), max = parseFloat(input.getAttribute(\"max\")), step = parseFloat(input.getAttribute(\"step\")), curValue = parseInt(input.value, 10), delta = e.delta ||\n (isKeyDown ? (e.which === 38 ? 1 : -1) : 0);\n var newValue = curValue + step * delta;\n if (typeof input.value !== \"undefined\" && input.value.length === 2) {\n var isHourElem = input === self.hourElement, isMinuteElem = input === self.minuteElement;\n if (newValue < min) {\n newValue =\n max +\n newValue +\n int(!isHourElem) +\n (int(isHourElem) && int(!self.amPM));\n if (isMinuteElem)\n incrementNumInput(undefined, -1, self.hourElement);\n }\n else if (newValue > max) {\n newValue =\n input === self.hourElement ? newValue - max - int(!self.amPM) : min;\n if (isMinuteElem)\n incrementNumInput(undefined, 1, self.hourElement);\n }\n if (self.amPM &&\n isHourElem &&\n (step === 1\n ? newValue + curValue === 23\n : Math.abs(newValue - curValue) > step)) {\n self.amPM.textContent =\n self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n }\n input.value = pad(newValue);\n }\n }\n init();\n return self;\n }\n /* istanbul ignore next */\n function _flatpickr(nodeList, config) {\n // static list\n var nodes = Array.prototype.slice\n .call(nodeList)\n .filter(function (x) { return x instanceof HTMLElement; });\n var instances = [];\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n try {\n if (node.getAttribute(\"data-fp-omit\") !== null)\n continue;\n if (node._flatpickr !== undefined) {\n node._flatpickr.destroy();\n node._flatpickr = undefined;\n }\n node._flatpickr = FlatpickrInstance(node, config || {});\n instances.push(node._flatpickr);\n }\n catch (e) {\n console.error(e);\n }\n }\n return instances.length === 1 ? instances[0] : instances;\n }\n /* istanbul ignore next */\n if (typeof HTMLElement !== \"undefined\" &&\n typeof HTMLCollection !== \"undefined\" &&\n typeof NodeList !== \"undefined\") {\n // browser env\n HTMLCollection.prototype.flatpickr = NodeList.prototype.flatpickr = function (config) {\n return _flatpickr(this, config);\n };\n HTMLElement.prototype.flatpickr = function (config) {\n return _flatpickr([this], config);\n };\n }\n /* istanbul ignore next */\n var flatpickr = function (selector, config) {\n if (typeof selector === \"string\") {\n return _flatpickr(window.document.querySelectorAll(selector), config);\n }\n else if (selector instanceof Node) {\n return _flatpickr([selector], config);\n }\n else {\n return _flatpickr(selector, config);\n }\n };\n /* istanbul ignore next */\n flatpickr.defaultConfig = {};\n flatpickr.l10ns = {\n en: __assign({}, english),\n \"default\": __assign({}, english)\n };\n flatpickr.localize = function (l10n) {\n flatpickr.l10ns[\"default\"] = __assign({}, flatpickr.l10ns[\"default\"], l10n);\n };\n flatpickr.setDefaults = function (config) {\n flatpickr.defaultConfig = __assign({}, flatpickr.defaultConfig, config);\n };\n flatpickr.parseDate = createDateParser({});\n flatpickr.formatDate = createDateFormatter({});\n flatpickr.compareDates = compareDates;\n /* istanbul ignore next */\n if (typeof jQuery !== \"undefined\" && typeof jQuery.fn !== \"undefined\") {\n jQuery.fn.flatpickr = function (config) {\n return _flatpickr(this, config);\n };\n }\n // eslint-disable-next-line @typescript-eslint/camelcase\n Date.prototype.fp_incr = function (days) {\n return new Date(this.getFullYear(), this.getMonth(), this.getDate() + (typeof days === \"string\" ? parseInt(days, 10) : days));\n };\n if (typeof window !== \"undefined\") {\n window.flatpickr = flatpickr;\n }\n\n return flatpickr;\n\n}));\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/flatpickr/dist/flatpickr.js","import Field from './field.js';\n\n/**\n * Number Field functionality.\n *\n * @since 1.4.0\n */\nclass FieldNumber extends Field {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n */\n constructor($field) {\n\n super($field, 'number');\n\n this.initField();\n }\n\n /**\n * Initializes the Number field.\n *\n * @since 1.4.0\n */\n initField() {\n\n this.$ui = {\n container: this.$field,\n input: this.$field.find('.fieldhelpers-field-input'),\n increase: this.$field.find('[data-number-increase]'),\n decrease: this.$field.find('[data-number-decrease]'),\n };\n\n this.intervals = {\n increase: {\n normal: parseFloat(this.options.increaseInterval),\n alt: parseFloat(this.options.altIncreaseInterval),\n },\n decrease: {\n normal: parseFloat(this.options.decreaseInterval),\n alt: parseFloat(this.options.altDecreaseInterval),\n },\n }\n\n let constrainMax = this.options.max;\n let constrainMin = this.options.min\n\n this.constraints = {\n max: constrainMax !== 'none' ? parseFloat(constrainMax) : false,\n min: constrainMin !== 'none' ? parseFloat(constrainMin) : false,\n }\n\n this.shiftKeyUtility();\n this.setupHandlers();\n\n let initialValue = this.$ui.input.val();\n this.value = !initialValue ? 0 : parseFloat(initialValue);\n\n // Initializes the field\n this.validateInput();\n }\n\n /**\n * Helps determine shift key press status.\n *\n * @since 1.4.0\n */\n shiftKeyUtility() {\n\n this.shiftKeyDown = false;\n\n jQuery(document).on('keydown', (e) => {\n\n if ( e.which === 16 ) {\n\n this.shiftKeyDown = true;\n }\n });\n\n jQuery(document).on('keyup', (e) => {\n\n if ( e.which === 16 ) {\n\n this.shiftKeyDown = false;\n }\n });\n }\n\n /**\n * Sets up the class handlers.\n *\n * @since 1.4.0\n */\n setupHandlers() {\n\n this.$ui.increase.click((e) => {\n\n this.increaseNumber(e);\n });\n\n this.$ui.decrease.click((e) => {\n\n this.decreaseNumber(e);\n });\n\n this.$ui.input.change((e) => {\n\n this.inputExternalChange(e);\n });\n }\n\n /**\n * Increases the input number.\n *\n * @since 1.4.0\n */\n increaseNumber() {\n\n let amount = this.shiftKeyDown ? this.intervals.increase.alt : this.intervals.increase.normal;\n let newNumber = this.value + amount;\n\n this.$ui.input.val(newNumber);\n this.$ui.input.trigger('change');\n }\n\n /**\n * Decreases the input number.\n *\n * @since 1.4.0\n */\n decreaseNumber() {\n\n let amount = this.shiftKeyDown ? this.intervals.decrease.alt : this.intervals.decrease.normal;\n let newNumber = this.value - amount;\n\n this.$ui.input.val(newNumber);\n this.$ui.input.trigger('change');\n }\n\n /**\n * Fires on the input change. Typically from user typing or other scripts modifying.\n *\n * @since 1.4.0\n */\n inputExternalChange() {\n\n this.validateInput();\n }\n\n /**\n * Runs number through constrains.\n *\n * @param {int} number\n *\n * @return {Object}\n */\n constrainNumber(number) {\n\n let status = 'unmodified';\n\n if ( this.constraints.max !== false && number > this.constraints.max ) {\n\n status = 'max';\n number = this.constraints.max;\n\n } else if ( this.constraints.min !== false && number < this.constraints.min ) {\n\n status = 'min';\n number = this.constraints.min;\n }\n\n\n return {\n status,\n number,\n }\n }\n\n /**\n * Runs input value through constraints to ensure it is accurate.\n *\n * @since 1.4.0\n */\n validateInput() {\n\n let currentValue = this.$ui.input.val();\n\n // Constrain to numbers\n let matches = currentValue.match(/^-?[0-9]\\d*(\\.\\d+)?$/);\n currentValue = (matches && parseFloat(matches[0])) || 0;\n\n let constraints = this.constrainNumber(currentValue);\n\n switch ( constraints.status ) {\n\n case 'max':\n\n this.toggleDecreaseDisabledUI(true);\n this.toggleIncreaseDisabledUI(false);\n break;\n\n case 'min':\n\n this.toggleIncreaseDisabledUI(true);\n this.toggleDecreaseDisabledUI(false);\n break;\n\n default:\n\n this.toggleIncreaseDisabledUI(true);\n this.toggleDecreaseDisabledUI(true);\n\n }\n\n this.value = constraints.number;\n this.$ui.input.val(this.value);\n\n if ( currentValue !== this.value ) {\n\n this.$ui.input.trigger('change');\n }\n }\n\n /**\n * Disables/Enables the increase button.\n *\n * @since 1.4.0\n *\n * @param {bool} enable True to set to enabled, false to set to disabled\n */\n toggleIncreaseDisabledUI(enable) {\n\n this.$ui.increase.prop('disabled', !enable);\n }\n\n /**\n * Disables/Enables the decrease button.\n *\n * @since 1.4.0\n *\n * @param {bool} enable True to set to enabled, false to set to disabled\n */\n toggleDecreaseDisabledUI(enable) {\n\n this.$ui.decrease.prop('disabled', !enable);\n }\n}\n\n/**\n * Finds and initializes all Number fields.\n *\n * @since 1.4.0\n */\nclass FieldNumberInitialize {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $root Root element to initialize fields inside.\n */\n constructor($root) {\n\n const api = this;\n\n this.fields = [];\n\n let $fields = $root.find('[data-fieldhelpers-field-number]');\n\n if ( $fields.length ) {\n\n $fields.each(function () {\n\n api.initializeField(jQuery(this));\n });\n }\n }\n\n /**\n * Initializes the field.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $field\n */\n initializeField($field) {\n\n this.fields.push({\n $field,\n api: new FieldNumber($field),\n });\n }\n}\n\nexport default FieldNumberInitialize;\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/admin/fields/field-number.js","import Field from './field.js';\n\n/**\n * Color Picker Field functionality.\n *\n * @since 1.4.0\n */\nclass FieldColorPicker extends Field {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n */\n constructor($field) {\n\n super($field, 'colorpicker');\n\n this.initializeColorpicker();\n }\n\n /**\n * Initializes the Color Picker.\n *\n * @since 1.4.0\n */\n initializeColorpicker() {\n\n if ( ! this.$field.val() ) {\n this.setDefault();\n }\n \n this.$field.wpColorPicker( this.options.colorpickerOptions );\n }\n\n\n /**\n * Cleans up after a repeater add/init.\n *\n * @since 1.4.0\n */\n fieldCleanup() {\n\n this.$wrapper.find('[data-fieldhelpers-field-colorpicker]')\n .appendTo(this.$wrapper.find('.fieldhelpers-field-content'));\n\n this.$wrapper.find('.wp-picker-container').remove();\n }\n}\n\n/**\n * Finds and initializes all Color Picker fields.\n *\n * @since 1.4.0\n */\nclass FieldColorPickerInitialize {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $root Root element to initialize fields inside.\n */\n constructor($root) {\n\n const api = this;\n\n this.fields = [];\n\n let $fields = $root.find('[data-fieldhelpers-field-colorpicker]');\n\n if ( $fields.length ) {\n\n if (!jQuery.isFunction(jQuery.fn.wpColorPicker)) {\n\n console.error('Field Helpers Error: Trying to initialize Color Picker field but \"wp-color-picker\" is ' +\n 'not enqueued.');\n return;\n }\n\n $fields.each(function () {\n\n api.initializeField(jQuery(this));\n });\n }\n }\n\n /**\n * Initializes the field.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $field\n */\n initializeField($field) {\n\n this.fields.push({\n $field,\n api: new FieldColorPicker($field),\n });\n }\n}\n\nexport default FieldColorPickerInitialize;\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/admin/fields/field-colorpicker.js","import Field from './field.js';\n\n/**\n * Date Picker Field functionality.\n *\n * Also includes Date/Time Picker and Time Picker.\n *\n * @since 1.4.0\n */\nclass FieldDatePicker extends Field {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n */\n constructor($field) {\n\n super($field, 'datepicker');\n\n this.initField();\n }\n\n /**\n * Initializes the Date Picker.\n *\n * @since 1.4.0\n */\n initField() {\n\n let option_functions = ['onChange', 'onOpen', 'onClose', 'onMonthChange', 'onYearChange', 'onReady', 'onValueUpdate', 'onDayCreate'];\n\n // Function support\n jQuery.each(this.options.datepickerOptions, (name, value) => {\n\n if ( option_functions.indexOf(name) !== -1 &&\n !jQuery.isFunction(this.options.datepickerOptions[name]) &&\n jQuery.isFunction(window[value]) ) {\n\n this.options.datepickerOptions[name] = window[value];\n }\n });\n\n // We need to ensure that the field instance for our specific field loads its default date in properly\n this.options.datepickerOptions.defaultDate = this.$field.data( 'defaultdate' );\n\n let value = this.$field.val();\n\n if ( ! value ) value = this.options.datepickerOptions.defaultDate;\n\n this.flatpickr = this.$field.flatpickr( this.options.datepickerOptions );\n\n this.flatpickr.setDate( value, true );\n }\n\n /**\n * Cleans up after a repeater add/init.\n *\n * @since 1.4.0\n */\n fieldCleanup() {\n\n let value = this.$field.val();\n\n if ( ! value ) value = this.options.datepickerOptions.defaultDate;\n\n if ( typeof this.flatpickr !== 'undefined' ) {\n\n this.flatpickr.destroy();\n\n }\n\n this.$field.val( value );\n\n }\n\n /**\n * Runs cleanup before the Repeater creates a dummy row to ensure we do not get weird double inputs\n *\n * @param {object} $repeater jQuery DOM Object\n * @param {array} options Array of Field Options\n *\n * @since 1.5.0\n * @return void\n */\n repeaterBeforeInit( $repeater, options ) {\n\n this.fieldCleanup();\n\n }\n\n /**\n * Ensure that the purposefully unloaded Flatpickr reloads\n *\n * @param {object} $repeater jQuery DOM Object\n * @param {array} options Array of Field Options\n *\n * @since 1.5.0\n * @return void\n */\n repeaterOnInit( $repeater, options ) {\n\n this.initField();\n\n }\n}\n\n/**\n * Finds and initializes all Date Picker fields.\n *\n * @since 1.4.0\n */\nclass FieldDatePickerInitialize {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $root Root element to initialize fields inside.\n */\n constructor($root) {\n\n const api = this;\n\n this.fields = [];\n\n let $fields = $root.find('[data-fieldhelpers-field-datepicker]');\n\n if ( $fields.length ) {\n\n if ( !jQuery.isFunction(jQuery.fn.flatpickr) ) {\n\n console.error('Field Helpers Error: Trying to initialize Date Picker field but \"flatpickr\" ' +\n 'is not enqueued.');\n return;\n }\n\n $fields.each(function () {\n\n api.initializeField(jQuery(this));\n });\n }\n }\n\n /**\n * Initializes the field.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $field\n */\n initializeField($field) {\n\n this.fields.push({\n $field,\n api: new FieldDatePicker($field),\n });\n }\n}\n\nexport default FieldDatePickerInitialize;\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/admin/fields/field-datepicker.js","import Field from './field.js';\nimport FieldsInitialize from '../fields-init.js';\n\n/**\n * Time Picker Field functionality.\n *\n * Also includes Date/Time Picker and Time Picker.\n *\n * @since 1.4.0\n */\nclass FieldTimePicker extends Field {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n */\n constructor($field) {\n\n super($field, 'timepicker');\n\n this.initField();\n }\n\n /**\n * Initializes the Time Picker.\n *\n * @since 1.4.0\n */\n initField() {\n\n let option_functions = ['onChange', 'onOpen', 'onClose', 'onMonthChange', 'onYearChange', 'onReady', 'onValueUpdate', 'onDayCreate'];\n\n // Function support\n jQuery.each(this.options.timepickerOptions, (name, value) => {\n\n if ( option_functions.indexOf(name) !== -1 &&\n !jQuery.isFunction(this.options.timepickerOptions[name]) &&\n jQuery.isFunction(window[value]) ) {\n\n this.options.timepickerOptions[name] = window[value];\n }\n });\n\n // We need to ensure that the field instance for our specific field loads its default date in properly\n this.options.timepickerOptions.defaultDate = this.$field.data( 'defaultdate' );\n\n let value = this.$field.val();\n\n if ( ! value ) value = this.options.timepickerOptions.defaultDate;\n\n this.flatpickr = this.$field.flatpickr(this.options.timepickerOptions);\n\n this.flatpickr.setDate( value, true );\n \n }\n\n /**\n * Cleans up after a repeater add/init.\n *\n * @since 1.4.0\n */\n fieldCleanup() {\n\n let value = this.$field.val();\n\n if ( ! value ) value = this.options.timepickerOptions.defaultDate;\n\n if ( typeof this.flatpickr !== 'undefined' ) {\n\n this.flatpickr.destroy();\n\n }\n\n this.$field.val( value );\n\n }\n \n /**\n * Runs cleanup before the Repeater creates a dummy row to ensure we do not get weird double inputs\n *\n * @param {object} $repeater jQuery DOM Object\n * @param {array} options Array of Field Options\n *\n * @since 1.5.0\n * @return void\n */\n repeaterBeforeInit( $repeater, options ) {\n\n this.fieldCleanup();\n\n }\n\n /**\n * Ensure that the purposefully unloaded Flatpickr reloads\n *\n * @param {object} $repeater jQuery DOM Object\n * @param {array} options Array of Field Options\n *\n * @since 1.5.0\n * @return void\n */\n repeaterOnInit( $repeater, options ) {\n\n this.initField();\n\n }\n\n}\n\n/**\n * Finds and initializes all Time Picker fields.\n *\n * @since 1.4.0\n */\nclass FieldTimePickerInitialize {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $root Root element to initialize fields inside.\n */\n constructor($root) {\n\n const api = this;\n\n this.fields = [];\n\n let $fields = $root.find('[data-fieldhelpers-field-timepicker]');\n\n if ( $fields.length ) {\n\n if ( !jQuery.isFunction(jQuery.fn.flatpickr) ) {\n\n console.error('Field Helpers Error: Trying to initialize Time Picker field but ' +\n '\"flatpickr\" is not enqueued.');\n return;\n }\n\n $fields.each(function () {\n\n api.initializeField(jQuery(this));\n });\n }\n }\n\n /**\n * Initializes the field.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $field\n */\n initializeField($field) {\n\n this.fields.push({\n $field,\n api: new FieldTimePicker($field),\n });\n }\n}\n\nexport default FieldTimePickerInitialize;\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/admin/fields/field-timepicker.js","import Field from './field.js';\n\n/**\n * Date Time Picker Field functionality.\n *\n * Also includes Date/Time Picker and Time Picker.\n *\n * @since 1.4.0\n */\nclass FieldDateTimePicker extends Field {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n */\n constructor($field) {\n\n super($field, 'datetimepicker');\n\n this.initField();\n }\n\n /**\n * Initializes the Date Time Picker.\n *\n * @since 1.4.0\n */\n initField() {\n\n let option_functions = ['onChange', 'onOpen', 'onClose', 'onMonthChange', 'onYearChange', 'onReady', 'onValueUpdate', 'onDayCreate'];\n\n // Function support\n jQuery.each(this.options.datetimepickerOptions, (name, value) => {\n\n if ( option_functions.indexOf(name) !== -1 &&\n !jQuery.isFunction(this.options.datetimepickerOptions[name]) &&\n jQuery.isFunction(window[value]) ) {\n\n this.options.datetimepickerOptions[name] = window[value];\n }\n });\n\n // We need to ensure that the field instance for our specific field loads its default date in properly\n this.options.datetimepickerOptions.defaultDate = this.$field.data( 'defaultdate' );\n\n let value = this.$field.val();\n\n if ( ! value ) value = this.options.datetimepickerOptions.defaultDate;\n\n this.flatpickr = this.$field.flatpickr(this.options.datetimepickerOptions);\n\n this.flatpickr.setDate( value, true );\n }\n\n /**\n * Cleans up after a repeater add/init.\n *\n * @since 1.4.0\n */\n fieldCleanup() {\n\n let value = this.$field.val();\n\n if ( ! value ) value = this.options.datetimepickerOptions.defaultDate;\n\n if ( typeof this.flatpickr !== 'undefined' ) {\n\n this.flatpickr.destroy();\n\n }\n\n this.$field.val( value );\n\n }\n\n /**\n * Runs cleanup before the Repeater creates a dummy row to ensure we do not get weird double inputs\n *\n * @param {object} $repeater jQuery DOM Object\n * @param {array} options Array of Field Options\n *\n * @since 1.5.0\n * @return void\n */\n repeaterBeforeInit( $repeater, options ) {\n\n this.fieldCleanup();\n\n }\n\n /**\n * Ensure that the purposefully unloaded Flatpickr reloads\n *\n * @param {object} $repeater jQuery DOM Object\n * @param {array} options Array of Field Options\n *\n * @since 1.5.0\n * @return void\n */\n repeaterOnInit( $repeater, options ) {\n\n this.initField();\n\n }\n\n}\n\n/**\n * Finds and initializes all Date Time Picker fields.\n *\n * @since 1.4.0\n */\nclass FieldDateTimePickerInitialize {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $root Root element to initialize fields inside.\n */\n constructor($root) {\n\n const api = this;\n\n this.fields = [];\n\n let $fields = $root.find('[data-fieldhelpers-field-datetimepicker]');\n\n if ( $fields.length ) {\n\n if ( !jQuery.isFunction(jQuery.fn.flatpickr) ) {\n\n console.error('Field Helpers Error: Trying to initialize Date Time Picker field but ' +\n '\"flatpickr\" is not enqueued.');\n return;\n }\n\n $fields.each(function () {\n\n api.initializeField(jQuery(this));\n });\n }\n }\n\n /**\n * Initializes the field.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $field\n */\n initializeField($field) {\n\n this.fields.push({\n $field,\n api: new FieldDateTimePicker($field),\n });\n }\n}\n\nexport default FieldDateTimePickerInitialize;\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/admin/fields/field-datetimepicker.js","import Field from './field.js';\n\n/**\n * Table Field functionality.\n *\n * @since 1.4.0\n */\nclass FieldTable extends Field {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n */\n constructor($field) {\n\n super($field, 'table');\n\n this.initField();\n }\n\n /**\n * Initializes the Table field.\n *\n * @since 1.4.0\n */\n initField() {\n\n this.$ui = {\n actions: this.$field.find('.fieldhelpers-field-table-actions'),\n loading: this.$field.find('.fieldhelpers-field-table-loading'),\n table: this.$field.find('table'),\n thead: this.$field.find('thead'),\n tbody: this.$field.find('tbody'),\n addRow: this.$field.find('[data-table-create-row]'),\n addColumn: this.$field.find('[data-table-create-column]'),\n }\n\n this.l10n = RBM_FieldHelpers.l10n['field_table'] || {};\n\n this.name = this.$field.attr('data-table-name');\n\n let data = JSON.parse(this.$ui.table.attr('data-table-data'));\n\n this.data = {};\n this.data.head = data.head || [];\n this.data.body = data.body || [];\n\n this.setupHandlers();\n\n // Initial build\n this.buildTable();\n\n // Show initially\n this.$ui.table.show();\n this.$ui.actions.show();\n this.$ui.loading.hide();\n }\n\n /**\n * Sets up the class handlers.\n *\n * @since 1.4.0\n */\n setupHandlers() {\n\n const api = this;\n\n this.$ui.addRow.click((e) => {\n\n e.preventDefault();\n this.addRow();\n });\n\n this.$ui.addColumn.click((e) => {\n\n e.preventDefault();\n this.addColumn();\n });\n\n this.$ui.table.on('click', '[data-delete-row]', function (e) {\n\n let index = jQuery(this).closest('tr').index();\n\n api.deleteRow(index);\n });\n\n this.$ui.table.on('click', '[data-delete-column]', function (e) {\n\n let index = jQuery(this).closest('td').index();\n\n api.deleteColumn(index);\n });\n\n this.$ui.table.on('change', 'input[type=\"text\"]', (e) => {\n\n this.updateTableData();\n });\n }\n\n /**\n * Gathers all data from the table.\n */\n updateTableData() {\n\n const api = this\n\n // Head\n let $headCells = this.$ui.table.find('thead th');\n let dataHead = [];\n let currentCell = 0;\n\n $headCells.each(function () {\n\n let $input = jQuery(this).find(`input[name=\"${api.name}[head][${currentCell}]\"]`);\n\n if ( !$input.length ) {\n\n console.error('Field Helpers Error: Table head data corrupted.');\n return false;\n }\n\n dataHead.push($input.val());\n\n currentCell++;\n });\n\n this.data.head = dataHead;\n\n // Body\n let $bodyRows = this.$ui.table.find('tbody tr');\n let dataBody = [];\n let currentRow = 0;\n\n $bodyRows.each(function () {\n\n // Skip delete row\n if ( jQuery(this).hasClass('fieldhelpers-field-table-delete-columns') ) {\n\n return true;\n }\n\n let rowData = [];\n let $cells = jQuery(this).find('td');\n let currentCell = 0;\n\n $cells.each(function () {\n\n // Skip delete cell\n if ( jQuery(this).hasClass('fieldhelpers-field-table-delete-row') ) {\n\n return true;\n }\n\n let $input = jQuery(this).find(`input[name=\"${api.name}[body][${currentRow}][${currentCell}]\"]`);\n\n if ( !$input.length ) {\n\n console.error('Field Helpers Error: Table body data corrupted.');\n return false;\n }\n\n rowData.push($input.val());\n\n currentCell++;\n });\n\n dataBody.push(rowData);\n\n currentRow++;\n });\n\n this.data.body = dataBody;\n }\n\n /**\n * Adds a row to the table.\n *\n * @since 1.4.0\n */\n addRow() {\n\n if ( !this.data.head.length ) {\n\n this.data.head.push('');\n }\n\n if ( !this.data.body.length ) {\n\n // Push 1 empty row with 1 empty cell\n this.data.body.push(['']);\n\n } else {\n\n let columns = this.data.body[0].length;\n let row = [];\n\n for ( let i = 0; i < columns; i++ ) {\n row.push('');\n }\n\n this.data.body.push(row);\n }\n\n this.buildTable();\n }\n\n /**\n * Adds a column to the table.\n *\n * @since 1.4.0\n */\n addColumn() {\n\n if ( !this.data.body.length ) {\n\n // Push 1 empty row with 1 empty cell\n this.data.head.push(['']);\n this.data.body.push(['']);\n\n } else {\n\n this.data.head.push('');\n\n this.data.body.map((row) => {\n row.push('');\n });\n }\n\n this.buildTable();\n }\n\n /**\n * Deletes a row from the table.\n *\n * @since 1.4.0\n *\n * @param {int} index Index of row to delete.\n */\n deleteRow(index) {\n\n // Decrease to compensate for \"delete row\" at top\n index--;\n\n if ( this.data.body.length === 1 ) {\n\n this.data.head = [];\n this.data.body = [];\n\n } else {\n\n this.data.body.splice(index, 1);\n }\n\n\n this.buildTable();\n }\n\n /**\n * Deletes a column from the table.\n *\n * @since 1.4.0\n *\n * @param {int} index Index of column to delete.\n */\n deleteColumn(index) {\n\n if ( this.data.body[0].length === 1 ) {\n\n this.data.head = [];\n this.data.body = [];\n\n } else {\n\n this.data.head.splice(index, 1);\n\n this.data.body.map((row) =>\n row.splice(index, 1)\n );\n }\n\n this.buildTable();\n }\n\n /**\n * Builds the table based on the table data.\n *\n * @since 1.4.0\n */\n buildTable() {\n\n this.$ui.thead.html('');\n this.$ui.tbody.html('');\n\n if ( this.data.head.length ) {\n\n let $row = jQuery('');\n\n this.data.head.map((cell, cell_i) => {\n\n let $cell = jQuery('');\n\n $cell.append(``);\n $cell.find('input[type=\"text\"]').val(cell);\n\n $row.append($cell);\n });\n\n this.$ui.thead.append($row);\n }\n\n if ( this.data.body.length ) {\n\n let $deleteRow = jQuery('');\n\n for ( let i = 0; i < this.data.body[0].length; i++ ) {\n\n $deleteRow.append(\n '' +\n `' +\n ''\n );\n }\n\n this.$ui.tbody.append($deleteRow);\n\n this.data.body.map((row, row_i) => {\n\n let $row = jQuery('');\n\n row.map((cell, cell_i) => {\n\n let $cell = jQuery('');\n\n $cell.append(``);\n $cell.find('input[type=\"text\"]').val(cell);\n\n $row.append($cell);\n });\n\n $row.append(\n '' +\n `' +\n ''\n );\n\n this.$ui.tbody.append($row);\n });\n }\n }\n}\n\n/**\n * Finds and initializes all Table fields.\n *\n * @since 1.4.0\n */\nclass FieldTableInitialize {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $root Root element to initialize fields inside.\n */\n constructor($root) {\n\n const api = this;\n\n this.fields = [];\n\n let $fields = $root.find('[data-fieldhelpers-field-table]');\n\n if ( $fields.length ) {\n\n $fields.each(function () {\n\n api.initializeField(jQuery(this));\n });\n }\n }\n\n /**\n * Initializes the field.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $field\n */\n initializeField($field) {\n\n this.fields.push({\n $field,\n api: new FieldTable($field),\n });\n }\n}\n\nexport default FieldTableInitialize;\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/admin/fields/field-table.js","import Field from './field.js';\n\n/**\n * Media Field functionality.\n *\n * @since 1.4.0\n */\nclass FieldMedia extends Field {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n */\n constructor($field) {\n\n super($field, 'media');\n\n this.initField();\n }\n\n /**\n * Initializes the Media field.\n *\n * @since 1.4.0\n */\n initField() {\n\n this.$ui = {\n input: this.$field.find('[data-media-input]'),\n addButton: this.$field.find('[data-add-media]'),\n imagePreview: this.$field.find('[data-image-preview]'),\n mediaPreview: this.$field.find('[data-media-preview]'),\n removeButton: this.$field.find('[data-remove-media]'),\n }\n\n this.mediaFrame = wp.media.frames.meta_image_frame = wp.media({\n title: this.options.l10n['window_title'],\n });\n\n this.placeholder = this.options.placeholder;\n this.type = this.options.type\n\n this.imageProperties = {\n previewSize: this.options.previewSize,\n };\n\n this.setupHandlers();\n }\n\n /**\n * Sets up the class handlers.\n *\n * @since 1.4.0\n */\n setupHandlers() {\n\n this.$ui.addButton.click((e) => {\n\n e.preventDefault();\n this.addMedia();\n });\n\n this.$ui.removeButton.click((e) => {\n\n e.preventDefault();\n this.removeMedia();\n });\n\n this.mediaFrame.on('select', (e) => {\n\n this.selectMedia();\n });\n }\n\n /**\n * Opens the media frame to add media.\n *\n * @since 1.4.0\n */\n addMedia() {\n\n this.mediaFrame.open();\n }\n\n /**\n * Removes the currently selected media.\n *\n * @since 1.4.0\n */\n removeMedia() {\n\n this.$ui.addButton.show();\n this.$ui.removeButton.hide();\n this.$ui.input.val('');\n\n // Reset preview\n switch ( this.type ) {\n\n case 'image':\n\n this.$ui.imagePreview.attr('src', this.placeholder || '');\n\n break;\n\n default:\n\n this.$ui.mediaPreview.html(this.placeholder || ' ');\n }\n }\n\n /**\n * Fires on selecting a piece of media.\n *\n * @since 1.4.0\n */\n selectMedia() {\n\n let mediaAttachment = this.mediaFrame.state().get('selection').first().toJSON();\n\n this.$ui.input.val(mediaAttachment.id);\n\n this.$ui.addButton.hide();\n this.$ui.removeButton.show();\n\n // Preview\n switch ( this.type ) {\n\n case 'image':\n\n let previewUrl = mediaAttachment.url;\n\n if ( mediaAttachment.sizes[this.imageProperties.previewSize] ) {\n\n previewUrl = mediaAttachment.sizes[this.imageProperties.previewSize].url;\n }\n\n this.$ui.imagePreview.attr('src', previewUrl);\n break;\n\n default:\n\n this.$ui.mediaPreview.html(mediaAttachment.url);\n }\n }\n}\n\n/**\n * Finds and initializes all Media fields.\n *\n * @since 1.4.0\n */\nclass FieldMediaInitialize {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $root Root element to initialize fields inside.\n */\n constructor($root) {\n\n const api = this;\n\n this.fields = [];\n\n let $fields = $root.find('[data-fieldhelpers-field-media]');\n\n if ( $fields.length ) {\n\n if ( !wp.media ) {\n\n console.error('Field Helpers Error: Trying to initialize Media field but media is not enqueued.');\n return;\n }\n\n $fields.each(function () {\n\n api.initializeField(jQuery(this));\n });\n }\n }\n\n /**\n * Initializes the field.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $field\n */\n initializeField($field) {\n\n this.fields.push({\n $field,\n api: new FieldMedia($field),\n });\n }\n}\n\nexport default FieldMediaInitialize;\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/admin/fields/field-media.js","import Field from './field.js';\n\n/**\n * List Field functionality.\n *\n * @since 1.4.0\n */\nclass FieldList extends Field {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n */\n constructor($field) {\n\n super($field, 'list');\n\n this.initField();\n }\n\n /**\n * Initializes the list.\n *\n * @since 1.4.0\n */\n initField() {\n\n this.$field.sortable(this.options);\n }\n}\n\n/**\n * Finds and initializes all List fields.\n *\n * @since 1.4.0\n */\nclass FieldListInitialize {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $root Root element to initialize fields inside.\n */\n constructor($root) {\n\n const api = this;\n\n this.fields = [];\n\n let $fields = $root.find('[data-fieldhelpers-field-list]');\n\n if ( $fields.length ) {\n\n if ( !jQuery.isFunction(jQuery.fn.sortable) ) {\n\n console.error('Field Helpers Error: Trying to initialize List field but \"jquery-ui-sortable\" ' +\n 'is not enqueued.');\n return;\n }\n\n $fields.each(function () {\n\n api.initializeField(jQuery(this));\n });\n }\n }\n\n /**\n * Initializes the field.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $field\n */\n initializeField($field) {\n\n this.fields.push({\n $field,\n api: new FieldList($field),\n });\n }\n}\n\nexport default FieldListInitialize;\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/admin/fields/field-list.js","import Field from './field.js';\nimport FieldsInitialize from '../fields-init';\n\n/**\n * Repeater Field functionality.\n *\n * @since 1.4.0\n */\nclass FieldRepeater extends Field {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n */\n constructor($field) {\n\n super($field, 'repeater');\n\n this.initField();\n }\n\n /**\n * Initializes the Repeater.\n *\n * @since 1.4.0\n */\n initField() {\n\n this.$repeaterList = this.$field.find('.fieldhelpers-field-repeater-list');\n\n const api = this;\n\n this.$field.trigger('repeater-before-init', [this.$field, this.options]);\n\n this.repeater = this.$field.repeater({\n show: function () {\n api.repeaterShow(jQuery(this));\n },\n hide: function (deleteItem) {\n api.repeaterHide(jQuery(this), deleteItem)\n },\n ready: function (setIndexes) {\n api.$repeaterList.on('sortupdate', setIndexes);\n },\n isFirstItemUndeletable: api.options.isFirstItemUndeletable,\n });\n\n // Delete first item if allowed and empty\n if ( !this.options.isFirstItemUndeletable && this.options.empty ) {\n this.$repeaterList.find('.fieldhelpers-field-repeater-row').remove();\n }\n\n if ( this.options.collapsable ) {\n\n this.initCollapsable();\n }\n\n if ( this.options.sortable ) {\n\n if ( !jQuery.isFunction(jQuery.fn.sortable) ) {\n\n console.error('Field Helpers Error: Trying to initialize sortable Repeater field but \"jquery-ui-sortable\" ' +\n 'is not enqueued.');\n return;\n\n } else {\n\n this.initSortable();\n }\n }\n\n // Delay for other plugins\n setTimeout(() => {\n this.$field.trigger('repeater-init', [this.$field]);\n }, 1);\n }\n\n /**\n * Initializes the Collapsable feature, if enabled.\n *\n * @since 1.4.0\n */\n initCollapsable() {\n\n const api = this;\n\n this.$field.on('click touchend', '[data-repeater-collapsable-handle]', function () {\n console.log('click');\n api.toggleCollapse(jQuery(this).closest('.fieldhelpers-field-repeater-row'));\n });\n }\n\n /**\n * Initializes the Sortable feature, if enabled.\n *\n * @since 1.4.0\n */\n initSortable() {\n\n const api = this;\n\n this.$repeaterList.sortable({\n axis: 'y',\n handle: '.fieldhelpers-field-repeater-handle',\n forcePlaceholderSize: true,\n placeholder: 'fieldhelpers-sortable-placeholder',\n stop: function (e, ui) {\n\n api.$repeaterList.trigger(\n 'list-update',\n [api.$repeaterList]\n );\n }\n });\n }\n\n /**\n * Toggles a repeater item collapse.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $item\n */\n toggleCollapse($item) {\n\n let $content = $item.find('.fieldhelpers-field-repeater-content').first();\n let status = $item.hasClass('opened') ? 'closing' : 'opening';\n\n if ( status === 'opening' ) {\n\n $content.stop().slideDown();\n $item.addClass('opened');\n $item.removeClass('closed');\n\n } else {\n\n $content.stop().slideUp();\n $item.addClass('closed');\n $item.removeClass('opened');\n }\n }\n\n /**\n * Shows a new repeater item.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $item Repeater item row.\n */\n repeaterShow($item) {\n\n this.$field.trigger('repeater-before-add-item', [$item]);\n\n $item.slideDown();\n\n if ( this.$repeaterList.hasClass('collapsable') ) {\n\n $item.addClass('opened').removeClass('closed');\n\n // Hide current title for new item and show default title\n $item.find('.fieldhelpers-field-repeater-header span.collapsable-title').html($item.find('.fieldhelpers-field-repeater-header span.collapsable-title').data('collapsable-title-default'));\n\n $item.find('.collapse-icon').css({'transform': 'rotate(-180deg)'});\n\n }\n\n // Re-initialize fields in new row\n new FieldsInitialize($item);\n\n this.$field.trigger('repeater-add-item', [$item]);\n }\n\n /**\n * Removes a repeater item.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $item Repeater item row.\n * @param {function} deleteItem Callback for deleting the item.\n */\n repeaterHide($item, deleteItem) {\n\n if ( confirm(this.options.l10n['confirm_delete_text']) ) {\n\n this.$field.trigger('repeater-before-delete-item', [$item]);\n\n $item.slideUp(400, () => {\n\n deleteItem();\n this.$field.trigger('repeater-delete-item', [$item]);\n });\n }\n }\n}\n\n/**\n * Finds and initializes all Repeater fields.\n *\n * @since 1.4.0\n */\nclass FieldRepeaterInitialize {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $root Root element to initialize fields inside.\n */\n constructor($root) {\n\n const api = this;\n\n this.fields = [];\n\n let $fields = $root.find('[data-fieldhelpers-field-repeater]');\n\n if ( $fields.length ) {\n\n $fields.each(function () {\n\n api.initializeField(jQuery(this));\n });\n }\n }\n\n /**\n * Initializes the field.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $field\n */\n initializeField($field) {\n\n this.fields.push({\n $field,\n api: new FieldRepeater($field),\n });\n }\n}\n\nexport default FieldRepeaterInitialize;\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/admin/fields/field-repeater.js","import Field from './field.js';\n\n/**\n * Select Field functionality.\n *\n * @since 1.4.0\n */\nclass FieldSelect extends Field {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n */\n constructor($field) {\n\n super($field, 'select');\n\n this.initField();\n }\n\n /**\n * Initializes the select.\n *\n * @since 1.4.0\n */\n initField() {\n\n if ( !this.options.select2Disabled ) {\n\n if ( !jQuery.isFunction(jQuery.fn.rbmfhselect2) ) {\n\n console.error('Field Helpers Error: Trying to initialize Select field but \"select2\" ' +\n 'is not enqueued.');\n return;\n }\n\n this.setupSelect2Options();\n\n this.$field.rbmfhselect2(this.options.select2Options);\n }\n }\n\n /**\n * Sets up languages.\n *\n * @since 1.4.0\n */\n setupL10n() {\n\n if ( Object.keys(this.options.select2Options.language).length > 0 ) {\n\n Object.keys(this.options.select2Options.language).map((id) => {\n\n let text = this.options.select2Options.language[id];\n\n // All languages must be functions. Turn all into functions.\n this.options.select2Options.language[id] = (args) => text;\n });\n }\n }\n\n /**\n * Sets up Select2 arguments, allowing for callback arguments.\n *\n * @since 1.4.2\n */\n setupSelect2Options() {\n\n this.setupL10n();\n\n // List of available Select2 options that are callbacks\n let callbackOptions = [\n 'escapeMarkup',\n 'initSelection',\n 'matcher',\n 'query',\n 'sorter',\n 'templateResult',\n 'templateSelection',\n 'tokenizer'\n ];\n\n Object.keys(this.options.select2Options).map((name) => {\n\n if ( callbackOptions.indexOf(name) !== -1 ) {\n\n let callbackName = this.options.select2Options[name];\n\n if ( typeof window[callbackName] === 'function' ) {\n\n this.options.select2Options[name] = window[callbackName];\n }\n }\n });\n\n // Automatically prefix selected items with optgroup label, if using optgroups\n if ( this.options.optGroups &&\n this.options.optGroupSelectionPrefix &&\n typeof this.options.select2Options.templateSelection === 'undefined' ) {\n\n this.options.select2Options.templateSelection = (item) => {\n\n let optGroup = jQuery(item.element).closest('optgroup').attr('label').trim();\n\n return optGroup + ': ' + item.text;\n }\n }\n }\n\n /**\n * Resets the field.\n *\n * @since 1.4.0\n */\n fieldCleanup() {\n\n if ( this.options.select2Disabled ) {\n\n return;\n }\n\n let $oldSelect = this.$field.next('.select2');\n\n if ( $oldSelect.length ) {\n\n $oldSelect.remove();\n }\n\n this.$field\n .removeClass('select2-hidden-accessible')\n .removeAttr('tablindex aria-hidden');\n }\n\n /**\n * Sets the field to default. Override in child class if need different method.\n *\n * @since 1.4.0\n */\n setDefault() {\n\n this.$field.find('option:selected').prop('selected', false);\n this.$field.trigger('change');\n }\n}\n\n/**\n * Finds and initializes all Select fields.\n *\n * @since 1.4.0\n */\nclass FieldSelectInitialize {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $root Root element to initialize fields inside.\n */\n constructor($root) {\n\n const api = this;\n\n this.fields = [];\n\n let $fields = $root.find('[data-fieldhelpers-field-select]');\n\n if ( $fields.length ) {\n\n $fields.each(function () {\n\n api.initializeField(jQuery(this));\n });\n }\n }\n\n /**\n * Initializes the field.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $field\n */\n initializeField($field) {\n\n this.fields.push({\n $field,\n api: new FieldSelect($field),\n });\n }\n}\n\nexport default FieldSelectInitialize;\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/admin/fields/field-select.js","import Field from './field.js';\n\n/**\n * TextArea Field functionality.\n *\n * @since 1.4.0\n */\nclass FieldTextArea extends Field {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n */\n constructor($field) {\n\n super($field, 'textarea');\n\n this.initField();\n }\n\n /**\n * Initializes the WYSIWYG.\n *\n * @since 1.4.0\n */\n initField() {\n\n if ( this.options.wysiwyg ) {\n\n if ( !wp.editor ) {\n\n console.error('Field Helpers Error: Trying to initialize a WYSIWYG Text Area field but \"wp_editor\" ' +\n 'is not enqueued.');\n return;\n }\n\n let settings = jQuery.extend(this.getDefaultEditorSettings(), this.options.wysiwygOptions);\n\n wp.editor.initialize(this.$field.attr('id'), settings);\n }\n }\n\n /**\n * Resets the field.\n *\n * @since 1.4.0\n */\n fieldCleanup() {\n\n if ( this.options.wysiwyg ) {\n\n let id = this.$field.attr('id');\n\n if ( window.tinymce.get(id) ) {\n\n wp.editor.remove(id);\n\n } else {\n\n this.$field.appendTo(this.$wrapper.find('.fieldhelpers-field-content'));\n this.$wrapper.find('.wp-editor-wrap').remove();\n }\n }\n }\n\n /**\n * Fires before deleting the item from a repeater.\n *\n * Removes from wp.editor.\n *\n * @since 1.4.0\n */\n repeaterBeforeDeleteSelf() {\n\n this.fieldCleanup();\n }\n\n /**\n * Fires on Repeat delete item.\n *\n * Adds slight delay to field re-initialization.\n *\n * @since 1.4.0\n */\n repeaterOnDeleteItem() {\n\n this.fieldCleanup();\n this.repeaterSetID();\n\n // Add slight delay because all repeater item WYSIWYG's must be unitialized before re-initializing to prevent\n // ID overlap.\n setTimeout(() => {this.initField()}, 1);\n }\n\n /**\n * Fires on Repeat sort item.\n *\n * Adds slight delay to field re-initialization.\n *\n * @since 1.4.0\n */\n repeaterOnSort() {\n\n this.fieldCleanup();\n this.repeaterSetID();\n\n // Add slight delay because all repeater item WYSIWYG's must be unitialized before re-initializing to prevent\n // ID overlap.\n setTimeout(() => {this.initField()}, 1);\n }\n\n /**\n * Tries to get default editor settings.\n *\n * @since 1.4.0\n *\n * @return {{}}\n */\n getDefaultEditorSettings() {\n\n if ( ! jQuery.isFunction(wp.editor.getDefaultSettings) ) {\n\n return {};\n\n } else {\n\n return wp.editor.getDefaultSettings();\n }\n }\n}\n\n/**\n * Finds and initializes all TextArea fields.\n *\n * @since 1.4.0\n */\nclass FieldTextAreaInitialize {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $root Root element to initialize fields inside.\n */\n constructor($root) {\n\n const api = this;\n\n this.fields = [];\n\n let $fields = $root.find('[data-fieldhelpers-field-textarea]');\n\n if ( $fields.length ) {\n\n $fields.each(function () {\n\n api.initializeField(jQuery(this));\n });\n }\n }\n\n /**\n * Initializes the field.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $field\n */\n initializeField($field) {\n\n this.fields.push({\n $field,\n api: new FieldTextArea($field),\n });\n }\n}\n\nexport default FieldTextAreaInitialize;\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/admin/fields/field-textarea.js","import Field from './field.js';\n\n/**\n * Checkbox Field functionality.\n *\n * @since 1.4.0\n */\nclass FieldCheckbox extends Field {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n */\n constructor($field) {\n\n super($field, 'checkbox');\n\n this.initField();\n }\n\n /**\n * Initializes the select.\n *\n * @since 1.4.0\n */\n initField() {\n\n this.$ui = {\n checkboxes: this.$field.find('input[type=\"checkbox\"]'),\n }\n\n this.setupHandlers();\n\n this.$field.find('input:checked').trigger( 'change' );\n }\n\n /**\n * Sets up class handlers.\n *\n * @since 1.4.0\n */\n setupHandlers() {\n\n const api = this;\n\n this.$ui.checkboxes.change(function () {\n api.handleChange(jQuery(this));\n });\n }\n\n /**\n * Fires on checkbox change.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $input Checkbox input.\n */\n handleChange($input) {\n\n if ( $input.prop('checked') ) {\n\n this.setActive($input.closest('.fieldhelpers-field-checkbox-row'));\n\n } else {\n\n this.setInactive($input.closest('.fieldhelpers-field-checkbox-row'));\n }\n }\n\n /**\n * Sets the checkbox row as active.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $row\n */\n setActive($row) {\n\n $row.addClass('fieldhelpers-field-checkbox-row-active');\n }\n\n /**\n * Sets the checkbox row as inactive.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $row\n */\n setInactive($row) {\n\n $row.removeClass('fieldhelpers-field-checkbox-row-active');\n }\n\n /**\n * Sets the ID to be unique, based off the repeater item index.\n *\n * For checkboxes, there will be multiple IDs in each, and need to be set accordingly.\n *\n * @since 1.4.0\n */\n repeaterSetID() {\n\n let ID = this.options.id;\n let $rows = this.$field.find('.fieldhelpers-field-checkbox-row');\n let index = this.$field.closest('[data-repeater-item]').index();\n\n $rows.each(function () {\n\n let $field = jQuery(this).find('input[type=\"checkbox\"]');\n let $label = $field.next('label');\n let fieldIndex = jQuery(this).index();\n let newID = `${ID}_${index}_${fieldIndex}`;\n\n $field.attr('id', newID);\n $label.attr('for', newID);\n });\n }\n\n /**\n * Cleans up after a repeater add/init.\n *\n * @since 1.5.8\n */\n fieldCleanup() {\n\n let api = this;\n\n this.$field.find( 'input' ).each( function( index, input ) {\n api.setInactive( jQuery( input ).closest( '.fieldhelpers-field-checkbox-row' ) );\n } );\n\n }\n\n /**\n * Ensure that our styling is reapplied\n *\n * @param {object} $repeater jQuery DOM Object\n * @param {array} options Array of Field Options\n *\n * @since 1.5.8\n * @return void\n */\n repeaterOnInit( $repeater, options ) {\n\n this.initField();\n\n }\n \n /**\n * Runs cleanup before the Repeater creates a dummy row to clear out selected items\n *\n * @param {object} $repeater jQuery DOM Object\n * @param {array} options Array of Field Options\n *\n * @since 1.5.8\n * @return void\n */\n repeaterBeforeInit( $repeater, options ) {\n\n this.fieldCleanup();\n\n }\n\n /**\n * Sets the field to default.\n *\n * @since 1.4.0\n */\n setDefault() {\n\n if ( this.options.default ) {\n\n this.$field.find(`[value=\"${this.options.default}\"]`).prop('checked', true).change();\n }\n }\n}\n\n/**\n * Finds and initializes all Checkbox fields.\n *\n * @since 1.4.0\n */\nclass FieldCheckboxInitialize {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $root Root element to initialize fields inside.\n */\n constructor($root) {\n\n const api = this;\n\n this.fields = [];\n\n let $fields = $root.find('[data-fieldhelpers-field-checkbox]');\n\n if ( $fields.length ) {\n\n $fields.each(function () {\n\n api.initializeField(jQuery(this));\n });\n }\n }\n\n /**\n * Initializes the field.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $field\n */\n initializeField($field) {\n\n this.fields.push({\n $field,\n api: new FieldCheckbox($field),\n });\n }\n}\n\nexport default FieldCheckboxInitialize;\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/admin/fields/field-checkbox.js","import Field from './field.js';\n\n/**\n * Radio Field functionality.\n *\n * @since 1.4.0\n */\nclass FieldRadio extends Field {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n */\n constructor($field) {\n\n super($field, 'radio');\n\n this.initField();\n }\n\n /**\n * Initializes the select.\n *\n * @since 1.4.0\n */\n initField() {\n\n this.$ui = {\n radios: this.$field.find('input[type=\"radio\"]'),\n }\n\n this.setupHandlers();\n\n this.$field.find('input:checked').trigger( 'change' );\n }\n\n /**\n * Sets up class handlers.\n *\n * @since 1.4.0\n */\n setupHandlers() {\n\n const api = this;\n\n this.$ui.radios.change(function () {\n api.handleChange(jQuery(this));\n });\n }\n\n /**\n * Fires on radio change.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $input Checkbox input.\n */\n handleChange($input) {\n\n this.setInactive(this.$ui.radios.closest('.fieldhelpers-field-radio-row'));\n this.setActive($input.closest('.fieldhelpers-field-radio-row'));\n }\n\n /**\n * Sets the radio row as active.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $row\n */\n setActive($row) {\n\n $row.addClass('fieldhelpers-field-radio-row-active');\n }\n\n /**\n * Sets the radio row as inactive.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $row\n */\n setInactive($row) {\n\n $row.removeClass('fieldhelpers-field-radio-row-active');\n }\n\n\n /**\n * Sets the ID to be unique, based off the repeater item index.\n *\n * For radios, there will be multiple IDs in each, and need to be set accordingly.\n *\n * @since 1.4.0\n */\n repeaterSetID() {\n\n let ID = this.options.id;\n let $rows = this.$field.find('.fieldhelpers-field-radio-row');\n let index = this.$field.closest('[data-repeater-item]').index();\n\n $rows.each(function () {\n\n let $field = jQuery(this).find('input[type=\"radio\"]');\n let $label = $field.next('label');\n let fieldIndex = jQuery(this).index();\n let newID = `${ID}_${index}_${fieldIndex}`;\n\n $field.attr('id', newID);\n $label.attr('for', newID);\n });\n }\n\n /**\n * Cleans up after a repeater add/init.\n *\n * @since 1.5.8\n */\n fieldCleanup() {\n\n let api = this;\n\n this.$field.find( 'input' ).each( function( index, input ) {\n api.setInactive( jQuery( input ).closest( '.fieldhelpers-field-radio-row' ) );\n } );\n\n }\n\n /**\n * Ensure that our styling is reapplied\n *\n * @param {object} $repeater jQuery DOM Object\n * @param {array} options Array of Field Options\n *\n * @since 1.5.8\n * @return void\n */\n repeaterOnInit( $repeater, options ) {\n\n this.initField();\n\n }\n \n /**\n * Runs cleanup before the Repeater creates a dummy row to clear out selected items\n *\n * @param {object} $repeater jQuery DOM Object\n * @param {array} options Array of Field Options\n *\n * @since 1.5.8\n * @return void\n */\n repeaterBeforeInit( $repeater, options ) {\n\n this.fieldCleanup();\n\n }\n\n /**\n * Sets the field to default.\n *\n * @since 1.4.0\n */\n setDefault() {\n\n if ( this.options.default ) {\n\n this.$field.find(`[value=\"${this.options.default}\"]`).prop('checked', true).change();\n }\n }\n}\n\n/**\n * Finds and initializes all Radio fields.\n *\n * @since 1.4.0\n */\nclass FieldRadioInitialize {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $root Root element to initialize fields inside.\n */\n constructor($root) {\n\n const api = this;\n\n this.fields = [];\n\n let $fields = $root.find('[data-fieldhelpers-field-radio]');\n\n if ( $fields.length ) {\n\n $fields.each(function () {\n\n api.initializeField(jQuery(this));\n });\n }\n }\n\n /**\n * Initializes the field.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $field\n */\n initializeField($field) {\n\n this.fields.push({\n $field,\n api: new FieldRadio($field),\n });\n }\n}\n\nexport default FieldRadioInitialize;\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/admin/fields/field-radio.js","import Field from './field.js';\n\n/**\n * Toggle Field functionality.\n *\n * @since 1.4.0\n */\nclass FieldToggle extends Field {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n */\n constructor($field) {\n\n super($field, 'toggle');\n\n this.initField();\n }\n\n /**\n * Initializes the select.\n *\n * @since 1.4.0\n */\n initField() {\n\n this.getUI();\n\n // Initial change trigger to help other plugins\n setTimeout(() => {\n this.$field.trigger('change', [this.$ui.input.val()]);\n }, 1);\n\n this.setupHandlers();\n }\n\n /**\n * Retrieves the UI.\n *\n * @since 1.4.0\n */\n getUI() {\n\n this.$ui = {\n slider: this.$field.find('.fieldhelpers-field-toggle-slider'),\n input: this.$field.find('input[type=\"hidden\"]'),\n }\n }\n\n /**\n * Sets up class handlers.\n *\n * @since 1.4.0\n */\n setupHandlers() {\n\n const api = this;\n\n this.$ui.slider.click(() => {\n api.handleClick();\n });\n }\n\n /**\n * Return if field is checked or not.\n *\n * @since 1.4.0\n *\n * @returns {*}\n */\n isChecked() {\n\n return this.$field.hasClass('checked');\n }\n\n /**\n * Fires on toggle change.\n *\n * @since 1.4.0\n */\n handleClick() {\n\n if ( this.isChecked() ) {\n\n this.$ui.input.val(this.options.uncheckedValue);\n this.$field.removeClass('checked');\n\n } else {\n\n this.$ui.input.val(this.options.checkedValue);\n this.$field.addClass('checked');\n }\n\n this.$field.trigger('change', [this.$ui.input.val()]);\n }\n}\n\n/**\n * Finds and initializes all Toggle fields.\n *\n * @since 1.4.0\n */\nclass FieldToggleInitialize {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $root Root element to initialize fields inside.\n */\n constructor($root) {\n\n const api = this;\n\n this.fields = [];\n\n let $fields = $root.find('[data-fieldhelpers-field-toggle]');\n\n if ( $fields.length ) {\n\n $fields.each(function () {\n\n api.initializeField(jQuery(this));\n });\n }\n }\n\n /**\n * Initializes the field.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $field\n */\n initializeField($field) {\n\n this.fields.push({\n $field,\n api: new FieldToggle($field),\n });\n }\n}\n\nexport default FieldToggleInitialize;\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/admin/fields/field-toggle.js"],"preExistingComment":"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgMzBhNDgyYzIyZDM1OGFhOWEwOTkiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9qcy9hZG1pbi9maWVsZHMvZmllbGQuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9qcy9hZG1pbi9maWVsZHMtaW5pdC5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2pzL2FkbWluL3JibS1maWVsZC1oZWxwZXJzLWFkbWluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9qcXVlcnkucmVwZWF0ZXIvanF1ZXJ5LnJlcGVhdGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9mbGF0cGlja3IvZGlzdC9mbGF0cGlja3IuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9qcy9hZG1pbi9maWVsZHMvZmllbGQtbnVtYmVyLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvanMvYWRtaW4vZmllbGRzL2ZpZWxkLWNvbG9ycGlja2VyLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvanMvYWRtaW4vZmllbGRzL2ZpZWxkLWRhdGVwaWNrZXIuanMiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3NyYy9qcy9hZG1pbi9maWVsZHMvZmllbGQtdGltZXBpY2tlci5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2pzL2FkbWluL2ZpZWxkcy9maWVsZC1kYXRldGltZXBpY2tlci5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2pzL2FkbWluL2ZpZWxkcy9maWVsZC10YWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2pzL2FkbWluL2ZpZWxkcy9maWVsZC1tZWRpYS5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2pzL2FkbWluL2ZpZWxkcy9maWVsZC1saXN0LmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvanMvYWRtaW4vZmllbGRzL2ZpZWxkLXJlcGVhdGVyLmpzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zcmMvanMvYWRtaW4vZmllbGRzL2ZpZWxkLXNlbGVjdC5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2pzL2FkbWluL2ZpZWxkcy9maWVsZC10ZXh0YXJlYS5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2pzL2FkbWluL2ZpZWxkcy9maWVsZC1jaGVja2JveC5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2pzL2FkbWluL2ZpZWxkcy9maWVsZC1yYWRpby5qcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3JjL2pzL2FkbWluL2ZpZWxkcy9maWVsZC10b2dnbGUuanMiXSwibmFtZXMiOlsiRmllbGQiLCIkZmllbGQiLCJ0eXBlIiwiJHdyYXBwZXIiLCJjbG9zZXN0IiwibmFtZSIsImF0dHIiLCJpbnN0YW5jZSIsImdldFJlcGVhdGVyIiwiZ2V0T3B0aW9ucyIsInJlcGVhdGVyIiwicmVwZWF0ZXJTdXBwb3J0IiwiUkJNX0ZpZWxkSGVscGVycyIsIm9wdGlvbnMiLCJjb25zb2xlIiwiZXJyb3IiLCJsZW5ndGgiLCIkcmVwZWF0ZXIiLCJwYXJlbnQiLCJvbiIsImV2ZW50IiwicmVwZWF0ZXJCZWZvcmVJbml0IiwicmVwZWF0ZXJPbkluaXQiLCJyZXBlYXRlckJlZm9yZUFkZEl0ZW0iLCJyZXBlYXRlck9uQWRkSXRlbSIsInJlcGVhdGVyQmVmb3JlRGVsZXRlU2VsZiIsInJlcGVhdGVyQmVmb3JlRGVsZXRlSXRlbSIsInJlcGVhdGVyT25EZWxldGVJdGVtIiwiZmluZCIsInJlcGVhdGVyT25Tb3J0IiwicmVwZWF0ZXJTZXRJRCIsImZpZWxkQ2xlYW51cCIsImluZGV4IiwibmV3SUQiLCJpZCIsImRlZmF1bHQiLCJ2YWwiLCJjaGFuZ2UiLCJGaWVsZHNJbml0aWFsaXplIiwiJHJvb3QiLCJmaWVsZHMiLCJjaGVja2JveCIsInRvZ2dsZSIsInJhZGlvIiwic2VsZWN0IiwidGV4dGFyZWEiLCJudW1iZXIiLCJjb2xvcnBpY2tlciIsImRhdGVwaWNrZXIiLCJ0aW1lcGlja2VyIiwiZGF0ZXRpbWVwaWNrZXIiLCJ0YWJsZSIsIm1lZGlhIiwibGlzdCIsImpRdWVyeSIsIkZpZWxkcyIsImRvY3VtZW50IiwidHJpZ2dlciIsIndpbmRvdyIsInJibUZIaW5pdEZpZWxkIiwicmJtRkhnZXRGaWVsZE9iamVjdCIsImZpZWxkVHlwZSIsImRhdGEiLCJjbGFzc05hbWVzIiwiZmlyc3QiLCJ0ZXN0IiwiZXhlYyIsIiQiLCJpZGVudGl0eSIsIngiLCJpc0FycmF5IiwidmFsdWUiLCJpc09iamVjdCIsIk9iamVjdCIsImlzTnVtYmVyIiwiTnVtYmVyIiwiaXNGdW5jdGlvbiIsIkZ1bmN0aW9uIiwiaW5kZXhPZiIsIm9iamVjdCIsImluQXJyYXkiLCJhcnJheSIsImZvcmVhY2giLCJjb2xsZWN0aW9uIiwiY2FsbGJhY2siLCJpIiwiaGFzT3duUHJvcGVydHkiLCJsYXN0IiwiYXJndW1lbnRzVG9BcnJheSIsImFyZ3MiLCJBcnJheSIsInByb3RvdHlwZSIsInNsaWNlIiwiY2FsbCIsImV4dGVuZCIsImV4dGVuZGVkIiwiYXJndW1lbnRzIiwibyIsImtleSIsIm1hcFRvQXJyYXkiLCJtYXBwZWQiLCJjb2xsIiwicHVzaCIsIm1hcFRvT2JqZWN0Iiwia2V5Q2FsbGJhY2siLCJtYXAiLCJwbHVjayIsImFycmF5T2ZPYmplY3RzIiwiZmlsdGVyIiwiZmlsdGVyZWQiLCJmdW5jdGlvbk5hbWUiLCJhcHBseSIsInRocm90dGxlIiwibWluaW11bUludGVydmFsIiwidGltZW91dCIsInRoYXQiLCJzZXRUaW1lb3V0IiwibWl4aW5QdWJTdWIiLCJ0b3BpY3MiLCJwdWJsaXNoIiwidG9waWMiLCJzdWJzY3JpYmUiLCJ1bnN1YnNjcmliZSIsInN1YnNjcmliZXJzIiwic3BsaWNlIiwiY3JlYXRlQmFzZUlucHV0IiwiZmlnIiwibXkiLCJzZWxmIiwiJHNlbGYiLCJnZXRUeXBlIiwic2VsZWN0b3IiLCJkaXNhYmxlIiwicHJvcCIsImVuYWJsZSIsImVxdWFsVG8iLCJhIiwiYiIsInB1Ymxpc2hDaGFuZ2UiLCJvbGRWYWx1ZSIsImUiLCJkb21FbGVtZW50IiwibmV3VmFsdWUiLCJnZXQiLCJjcmVhdGVJbnB1dCIsInNldCIsImNsZWFyIiwiYnVpbGRTZXR0ZXIiLCJpbnB1dEVxdWFsVG9BcnJheSIsImlzRXF1YWwiLCJjcmVhdGVJbnB1dEJ1dHRvbiIsImNyZWF0ZUlucHV0Q2hlY2tib3giLCJ2YWx1ZXMiLCJlYWNoIiwibmV3VmFsdWVzIiwiY3JlYXRlSW5wdXRFbWFpbCIsImNyZWF0ZUlucHV0VGV4dCIsImNyZWF0ZUlucHV0RmlsZSIsInNwbGl0Iiwid3JhcCIsInJlc2V0IiwidW53cmFwIiwiY3JlYXRlSW5wdXRIaWRkZW4iLCJjcmVhdGVJbnB1dE11bHRpcGxlRmlsZSIsImZpbGVMaXN0T2JqZWN0IiwiZmlsZXMiLCJuYW1lcyIsImNyZWF0ZUlucHV0TXVsdGlwbGVTZWxlY3QiLCJjcmVhdGVJbnB1dFBhc3N3b3JkIiwiY3JlYXRlSW5wdXRSYWRpbyIsImNyZWF0ZUlucHV0UmFuZ2UiLCJjcmVhdGVJbnB1dFNlbGVjdCIsImNyZWF0ZUlucHV0VGV4dGFyZWEiLCJjcmVhdGVJbnB1dFVSTCIsImJ1aWxkRm9ybUlucHV0cyIsImlucHV0cyIsImNvbnN0cnVjdG9yIiwiY29uc3RydWN0b3JPdmVycmlkZSIsImJ1dHRvbiIsInRleHQiLCJ1cmwiLCJlbWFpbCIsInBhc3N3b3JkIiwicmFuZ2UiLCJmaWxlIiwiaGlkZGVuIiwiYWRkSW5wdXRzQmFzaWMiLCIkaW5wdXQiLCJhZGRJbnB1dHNHcm91cCIsImlzIiwiZm4iLCJpbnB1dFZhbCIsImlucHV0TmFtZSIsImlucHV0T25DaGFuZ2UiLCJpbnB1dCIsImlucHV0RGlzYWJsZSIsImlucHV0RW5hYmxlIiwiaW5wdXRDbGVhciIsInJlcGVhdGVyVmFsIiwicGFyc2UiLCJyYXciLCJwYXJzZWQiLCJwYXJzZWRLZXkiLCJtYXRjaCIsImNvbmNhdCIsImJyYWNrZXRlZCIsInJlcGxhY2UiLCJidWlsZCIsInAiLCJoZWFkIiwic2hpZnQiLCJncm91cGVkIiwiYnVpbHQiLCJncm91cCIsInNldExpc3QiLCJzaG93IiwiaGlkZSIsInJlbW92ZUVsZW1lbnQiLCIkbGlzdCIsIiRmaWx0ZXJOZXN0ZWQiLCIkaXRlbXMiLCJyZXBlYXRlcnMiLCJqb2luIiwiJGl0ZW1UZW1wbGF0ZSIsImNsb25lIiwiJGZpcnN0RGVsZXRlQnV0dG9uIiwiaXNGaXJzdEl0ZW1VbmRlbGV0YWJsZSIsInJlbW92ZSIsImdldEdyb3VwTmFtZSIsImdyb3VwTmFtZSIsIiRwYXJlbnQiLCJpbml0TmVzdGVkIiwiJGxpc3RJdGVtcyIsIiRpdGVtIiwibmVzdGVkRmlnIiwiJGZvcmVhY2hSZXBlYXRlckluSXRlbSIsImNiIiwic2V0SW5kZXhlcyIsIm1hdGNoZXMiLCJuZXdOYW1lIiwicmVtb3ZlQXR0ciIsImluaXRFbXB0eSIsInJlYWR5IiwiYXBwZW5kSXRlbSIsInNldEl0ZW1zVmFsdWVzIiwiZGVmYXVsdFZhbHVlcyIsImlucHV0TmFtZXMiLCJmaWVsZE5hbWUiLCIkdGVtcGxhdGUiLCJhcHBlbmQiLCJhZGRJdGVtIiwicm93cyIsImNsaWNrIiwiZ2xvYmFsIiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJmbGF0cGlja3IiLCJfX2Fzc2lnbiIsImFzc2lnbiIsInQiLCJzIiwibiIsIkhPT0tTIiwiZGVmYXVsdHMiLCJfZGlzYWJsZSIsIl9lbmFibGUiLCJhbGxvd0lucHV0IiwiYWx0Rm9ybWF0IiwiYWx0SW5wdXQiLCJhbHRJbnB1dENsYXNzIiwiYW5pbWF0ZSIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImFyaWFEYXRlRm9ybWF0IiwiY2xpY2tPcGVucyIsImNsb3NlT25TZWxlY3QiLCJjb25qdW5jdGlvbiIsImRhdGVGb3JtYXQiLCJkZWZhdWx0SG91ciIsImRlZmF1bHRNaW51dGUiLCJkZWZhdWx0U2Vjb25kcyIsImRpc2FibGVNb2JpbGUiLCJlbmFibGVTZWNvbmRzIiwiZW5hYmxlVGltZSIsImVycm9ySGFuZGxlciIsImVyciIsIndhcm4iLCJnZXRXZWVrIiwiZ2l2ZW5EYXRlIiwiZGF0ZSIsIkRhdGUiLCJnZXRUaW1lIiwic2V0SG91cnMiLCJzZXREYXRlIiwiZ2V0RGF0ZSIsImdldERheSIsIndlZWsxIiwiZ2V0RnVsbFllYXIiLCJNYXRoIiwicm91bmQiLCJob3VySW5jcmVtZW50IiwiaWdub3JlZEZvY3VzRWxlbWVudHMiLCJpbmxpbmUiLCJsb2NhbGUiLCJtaW51dGVJbmNyZW1lbnQiLCJtb2RlIiwibW9udGhTZWxlY3RvclR5cGUiLCJuZXh0QXJyb3ciLCJub0NhbGVuZGFyIiwibm93Iiwib25DaGFuZ2UiLCJvbkNsb3NlIiwib25EYXlDcmVhdGUiLCJvbkRlc3Ryb3kiLCJvbktleURvd24iLCJvbk1vbnRoQ2hhbmdlIiwib25PcGVuIiwib25QYXJzZUNvbmZpZyIsIm9uUmVhZHkiLCJvblZhbHVlVXBkYXRlIiwib25ZZWFyQ2hhbmdlIiwib25QcmVDYWxlbmRhclBvc2l0aW9uIiwicGx1Z2lucyIsInBvc2l0aW9uIiwicG9zaXRpb25FbGVtZW50IiwidW5kZWZpbmVkIiwicHJldkFycm93Iiwic2hvcnRoYW5kQ3VycmVudE1vbnRoIiwic2hvd01vbnRocyIsInN0YXRpYyIsInRpbWVfMjRociIsIndlZWtOdW1iZXJzIiwiZW5nbGlzaCIsIndlZWtkYXlzIiwic2hvcnRoYW5kIiwibG9uZ2hhbmQiLCJtb250aHMiLCJkYXlzSW5Nb250aCIsImZpcnN0RGF5T2ZXZWVrIiwib3JkaW5hbCIsIm50aCIsInJhbmdlU2VwYXJhdG9yIiwid2Vla0FiYnJldmlhdGlvbiIsInNjcm9sbFRpdGxlIiwidG9nZ2xlVGl0bGUiLCJhbVBNIiwieWVhckFyaWFMYWJlbCIsImhvdXJBcmlhTGFiZWwiLCJtaW51dGVBcmlhTGFiZWwiLCJwYWQiLCJpbnQiLCJib29sIiwiZGVib3VuY2UiLCJmdW5jIiwid2FpdCIsImltbWVkaWF0ZSIsImNvbnRleHQiLCJjbGVhclRpbWVvdXQiLCJhcnJheWlmeSIsIm9iaiIsInRvZ2dsZUNsYXNzIiwiZWxlbSIsImNsYXNzTmFtZSIsImNsYXNzTGlzdCIsImFkZCIsImNyZWF0ZUVsZW1lbnQiLCJ0YWciLCJjb250ZW50IiwidGV4dENvbnRlbnQiLCJjbGVhck5vZGUiLCJub2RlIiwiZmlyc3RDaGlsZCIsInJlbW92ZUNoaWxkIiwiZmluZFBhcmVudCIsImNvbmRpdGlvbiIsInBhcmVudE5vZGUiLCJjcmVhdGVOdW1iZXJJbnB1dCIsImlucHV0Q2xhc3NOYW1lIiwib3B0cyIsIndyYXBwZXIiLCJudW1JbnB1dCIsImFycm93VXAiLCJhcnJvd0Rvd24iLCJwYXR0ZXJuIiwic2V0QXR0cmlidXRlIiwiYXBwZW5kQ2hpbGQiLCJnZXRFdmVudFRhcmdldCIsImNvbXBvc2VkUGF0aCIsInBhdGgiLCJ0YXJnZXQiLCJkb05vdGhpbmciLCJtb250aFRvU3RyIiwibW9udGhOdW1iZXIiLCJyZXZGb3JtYXQiLCJEIiwiRiIsImRhdGVPYmoiLCJtb250aE5hbWUiLCJzZXRNb250aCIsIkciLCJob3VyIiwicGFyc2VGbG9hdCIsIkgiLCJKIiwiZGF5IiwiSyIsImdldEhvdXJzIiwiUmVnRXhwIiwiTSIsInNob3J0TW9udGgiLCJTIiwic2Vjb25kcyIsInNldFNlY29uZHMiLCJVIiwiXyIsInVuaXhTZWNvbmRzIiwiVyIsIndlZWtOdW0iLCJ3ZWVrTnVtYmVyIiwicGFyc2VJbnQiLCJZIiwieWVhciIsInNldEZ1bGxZZWFyIiwiWiIsIklTT0RhdGUiLCJkIiwiaCIsIm1pbnV0ZXMiLCJzZXRNaW51dGVzIiwiaiIsImwiLCJtIiwibW9udGgiLCJ1IiwidW5peE1pbGxTZWNvbmRzIiwidyIsInkiLCJ0b2tlblJlZ2V4IiwiZm9ybWF0cyIsInRvSVNPU3RyaW5nIiwiZ2V0TW9udGgiLCJnZXRTZWNvbmRzIiwiZ2V0TWludXRlcyIsIlN0cmluZyIsInN1YnN0cmluZyIsImNyZWF0ZURhdGVGb3JtYXR0ZXIiLCJfYSIsIl9iIiwiY29uZmlnIiwiX2MiLCJsMTBuIiwiZnJtdCIsIm92ZXJyaWRlTG9jYWxlIiwiZm9ybWF0RGF0ZSIsImMiLCJhcnIiLCJjcmVhdGVEYXRlUGFyc2VyIiwiZ2l2ZW5Gb3JtYXQiLCJ0aW1lbGVzcyIsImN1c3RvbUxvY2FsZSIsInBhcnNlZERhdGUiLCJkYXRlT3JpZyIsInRvRml4ZWQiLCJmb3JtYXQiLCJkYXRlc3RyIiwidHJpbSIsInBhcnNlRGF0ZSIsIm1hdGNoZWQiLCJvcHMiLCJtYXRjaEluZGV4IiwicmVnZXhTdHIiLCJ0b2tlbl8xIiwiaXNCYWNrU2xhc2giLCJlc2NhcGVkIiwiZm9yRWFjaCIsImlzTmFOIiwiRXJyb3IiLCJjb21wYXJlRGF0ZXMiLCJkYXRlMSIsImRhdGUyIiwiaXNCZXR3ZWVuIiwidHMiLCJ0czEiLCJ0czIiLCJtaW4iLCJtYXgiLCJkdXJhdGlvbiIsIkRBWSIsIl9pIiwiVHlwZUVycm9yIiwiX2xvb3BfMSIsInNvdXJjZSIsImtleXMiLCJhcmdzXzEiLCJERUJPVU5DRURfQ0hBTkdFX01TIiwiRmxhdHBpY2tySW5zdGFuY2UiLCJlbGVtZW50IiwiaW5zdGFuY2VDb25maWciLCJkZWZhdWx0Q29uZmlnIiwiX2hhbmRsZXJzIiwicGx1Z2luRWxlbWVudHMiLCJsb2FkZWRQbHVnaW5zIiwiX2JpbmQiLCJiaW5kIiwiX3NldEhvdXJzRnJvbURhdGUiLCJzZXRIb3Vyc0Zyb21EYXRlIiwiX3Bvc2l0aW9uQ2FsZW5kYXIiLCJwb3NpdGlvbkNhbGVuZGFyIiwiY2hhbmdlTW9udGgiLCJjaGFuZ2VZZWFyIiwiY2xvc2UiLCJfY3JlYXRlRWxlbWVudCIsImRlc3Ryb3kiLCJpc0VuYWJsZWQiLCJqdW1wVG9EYXRlIiwib3BlbiIsInJlZHJhdyIsInNldHVwSGVscGVyRnVuY3Rpb25zIiwidXRpbHMiLCJnZXREYXlzSW5Nb250aCIsInlyIiwiY3VycmVudE1vbnRoIiwiY3VycmVudFllYXIiLCJpbml0IiwiaXNPcGVuIiwicGFyc2VDb25maWciLCJzZXR1cExvY2FsZSIsInNldHVwSW5wdXRzIiwic2V0dXBEYXRlcyIsImlzTW9iaWxlIiwiYmluZEV2ZW50cyIsInNlbGVjdGVkRGF0ZXMiLCJsYXRlc3RTZWxlY3RlZERhdGVPYmoiLCJtaW5EYXRlIiwidXBkYXRlVmFsdWUiLCJzZXRDYWxlbmRhcldpZHRoIiwic2hvd1RpbWVJbnB1dCIsImlzU2FmYXJpIiwidHJpZ2dlckV2ZW50IiwiYmluZFRvSW5zdGFuY2UiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJjYWxlbmRhckNvbnRhaW5lciIsInN0eWxlIiwidmlzaWJpbGl0eSIsImRpc3BsYXkiLCJkYXlzQ29udGFpbmVyIiwiZGF5c1dpZHRoIiwiZGF5cyIsIm9mZnNldFdpZHRoIiwid2lkdGgiLCJ3ZWVrV3JhcHBlciIsInJlbW92ZVByb3BlcnR5IiwidXBkYXRlVGltZSIsInNldERlZmF1bHRUaW1lIiwidGltZVdyYXBwZXIiLCJwcmV2VmFsdWUiLCJfaW5wdXQiLCJzZXRIb3Vyc0Zyb21JbnB1dHMiLCJfZGVib3VuY2VkQ2hhbmdlIiwiYW1wbTJtaWxpdGFyeSIsIm1pbGl0YXJ5MmFtcG0iLCJob3VyRWxlbWVudCIsIm1pbnV0ZUVsZW1lbnQiLCJob3VycyIsInNlY29uZEVsZW1lbnQiLCJsaW1pdE1pbkhvdXJzIiwibWluVGltZSIsIm1pbkRhdGVIYXNUaW1lIiwibGltaXRNYXhIb3VycyIsIm1heFRpbWUiLCJtYXhEYXRlIiwibWF4RGF0ZUhhc1RpbWUiLCJzZXREZWZhdWx0SG91cnMiLCJtaW5IciIsIm1pbk1pbnV0ZXMiLCJtYXhIciIsIm1heE1pbnV0ZXMiLCJvblllYXJJbnB1dCIsImRlbHRhIiwidG9TdHJpbmciLCJoYW5kbGVyIiwiZXYiLCJlbCIsImFkZEV2ZW50TGlzdGVuZXIiLCJvbkNsaWNrIiwiZXZ0Iiwid2hpY2giLCJ0cmlnZ2VyQ2hhbmdlIiwicXVlcnlTZWxlY3RvckFsbCIsInNldHVwTW9iaWxlIiwiZGVib3VuY2VkUmVzaXplIiwib25SZXNpemUiLCJvbk1vdXNlT3ZlciIsImJvZHkiLCJvbnRvdWNoc3RhcnQiLCJkb2N1bWVudENsaWNrIiwiY2FwdHVyZSIsIm1vbnRoTmF2Iiwib25Nb250aE5hdkNsaWNrIiwic2VsZWN0RGF0ZSIsInRpbWVDb250YWluZXIiLCJzZWxUZXh0IiwidGltZUluY3JlbWVudCIsImp1bXBEYXRlIiwianVtcFRvIiwib2xkWWVhciIsIm9sZE1vbnRoIiwibWVzc2FnZSIsImJ1aWxkTW9udGhTd2l0Y2giLCJpbmNyZW1lbnROdW1JbnB1dCIsImNvbnRhaW5zIiwiaW5wdXRFbGVtIiwiY3JlYXRlRXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwiZnJhZ21lbnQiLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwidGFiSW5kZXgiLCJidWlsZE1vbnRoTmF2IiwiaW5uZXJDb250YWluZXIiLCJidWlsZFdlZWtzIiwickNvbnRhaW5lciIsImJ1aWxkV2Vla2RheXMiLCJidWlsZERheXMiLCJidWlsZFRpbWUiLCJjdXN0b21BcHBlbmQiLCJhcHBlbmRUbyIsIm5vZGVUeXBlIiwiaW5zZXJ0QmVmb3JlIiwibmV4dFNpYmxpbmciLCJjcmVhdGVEYXkiLCJkYXlOdW1iZXIiLCJkYXRlSXNFbmFibGVkIiwiZGF5RWxlbWVudCIsIiRpIiwidG9kYXlEYXRlRWxlbSIsImlzRGF0ZVNlbGVjdGVkIiwic2VsZWN0ZWREYXRlRWxlbSIsImlzRGF0ZUluUmFuZ2UiLCJpbnNlcnRBZGphY2VudEhUTUwiLCJmb2N1c09uRGF5RWxlbSIsInRhcmdldE5vZGUiLCJmb2N1cyIsImdldEZpcnN0QXZhaWxhYmxlRGF5Iiwic3RhcnRNb250aCIsImVuZE1vbnRoIiwiY2hpbGRyZW4iLCJzdGFydEluZGV4IiwiZW5kSW5kZXgiLCJnZXROZXh0QXZhaWxhYmxlRGF5IiwiY3VycmVudCIsImdpdmVuTW9udGgiLCJsb29wRGVsdGEiLCJudW1Nb250aERheXMiLCJhYnMiLCJmb2N1c09uRGF5Iiwib2Zmc2V0IiwiZGF5Rm9jdXNlZCIsImlzSW5WaWV3IiwiYWN0aXZlRWxlbWVudCIsInN0YXJ0RWxlbSIsImJ1aWxkTW9udGhEYXlzIiwiZmlyc3RPZk1vbnRoIiwicHJldk1vbnRoRGF5cyIsImlzTXVsdGlNb250aCIsInByZXZNb250aERheUNsYXNzIiwibmV4dE1vbnRoRGF5Q2xhc3MiLCJkYXlJbmRleCIsImRheU51bSIsImRheUNvbnRhaW5lciIsImZyYWciLCJzaG91bGRCdWlsZE1vbnRoIiwibW9udGhzRHJvcGRvd25Db250YWluZXIiLCJpbm5lckhUTUwiLCJzZWxlY3RlZCIsImJ1aWxkTW9udGgiLCJjb250YWluZXIiLCJtb250aE5hdkZyYWdtZW50IiwibW9udGhFbGVtZW50Iiwic2VsZWN0ZWRNb250aCIsInllYXJJbnB1dCIsInRhYmluZGV4IiwieWVhckVsZW1lbnQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImRpc2FibGVkIiwiYnVpbGRNb250aHMiLCJwcmV2TW9udGhOYXYiLCJ5ZWFyRWxlbWVudHMiLCJtb250aEVsZW1lbnRzIiwibmV4dE1vbnRoTmF2IiwiZGVmaW5lUHJvcGVydHkiLCJfX2hpZGVQcmV2TW9udGhBcnJvdyIsIl9faGlkZU5leHRNb250aEFycm93IiwiY3VycmVudFllYXJFbGVtZW50IiwidXBkYXRlTmF2aWdhdGlvbkN1cnJlbnRNb250aCIsInNlcGFyYXRvciIsImhvdXJJbnB1dCIsIm1pbnV0ZUlucHV0Iiwic2Vjb25kSW5wdXQiLCJnZXRBdHRyaWJ1dGUiLCJ0aXRsZSIsIndlZWtkYXlDb250YWluZXIiLCJ1cGRhdGVXZWVrZGF5cyIsImlzT2Zmc2V0IiwiX2hpZGVQcmV2TW9udGhBcnJvdyIsIl9oaWRlTmV4dE1vbnRoQXJyb3ciLCJ0cmlnZ2VyQ2hhbmdlRXZlbnQiLCJ0b0luaXRpYWwiLCJtb2JpbGVJbnB1dCIsIl9pbml0aWFsRGF0ZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJsYXN0Q2hpbGQiLCJfdHlwZSIsInJlbW92ZUF0dHJpYnV0ZSIsImsiLCJpc0NhbGVuZGFyRWxlbSIsImV2ZW50VGFyZ2V0XzEiLCJpc0NhbGVuZGFyRWxlbWVudCIsImlzSW5wdXQiLCJsb3N0Rm9jdXMiLCJyZWxhdGVkVGFyZ2V0IiwiaXNJZ25vcmVkIiwic29tZSIsIm5ld1llYXIiLCJuZXdZZWFyTnVtIiwiaXNOZXdZZWFyIiwiZGF0ZVRvQ2hlY2siLCJmcm9tIiwidG8iLCJhbGxvd0tleWRvd24iLCJhbGxvd0lubGluZUtleWRvd24iLCJrZXlDb2RlIiwiYmx1ciIsImlzVGltZU9iaiIsInByZXZlbnREZWZhdWx0IiwiZm9jdXNBbmRDbG9zZSIsImRlbHRhXzEiLCJjdHJsS2V5Iiwic3RvcFByb3BhZ2F0aW9uIiwiZWxlbXMiLCJzaGlmdEtleSIsImNoYXJBdCIsInRvTG93ZXJDYXNlIiwiaG92ZXJEYXRlIiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJpbml0aWFsRGF0ZSIsInJhbmdlU3RhcnREYXRlIiwicmFuZ2VFbmREYXRlIiwiY29udGFpbnNEaXNhYmxlZCIsIm1pblJhbmdlIiwibWF4UmFuZ2UiLCJkYXlFbGVtIiwidGltZXN0YW1wIiwib3V0T2ZSYW5nZSIsIl9wb3NpdGlvbkVsZW1lbnQiLCJ3YXNPcGVuIiwibWluTWF4RGF0ZVNldHRlciIsImludmVyc2VEYXRlT2JqIiwiYm9vbE9wdHMiLCJ1c2VyQ29uZmlnIiwiSlNPTiIsInN0cmluZ2lmeSIsImRhdGFzZXQiLCJkYXRlcyIsInBhcnNlRGF0ZVJ1bGVzIiwidGltZU1vZGUiLCJkZWZhdWx0RGF0ZUZvcm1hdCIsImRlZmF1bHRBbHRGb3JtYXQiLCJfbWluRGF0ZSIsIl9tYXhEYXRlIiwibWluTWF4VGltZVNldHRlciIsIl9taW5UaW1lIiwiX21heFRpbWUiLCJob29rIiwicGx1Z2luQ29uZiIsImwxMG5zIiwiY3VzdG9tUG9zaXRpb25FbGVtZW50IiwiY2FsZW5kYXJIZWlnaHQiLCJyZWR1Y2UiLCJhY2MiLCJjaGlsZCIsIm9mZnNldEhlaWdodCIsImNhbGVuZGFyV2lkdGgiLCJjb25maWdQb3MiLCJjb25maWdQb3NWZXJ0aWNhbCIsImNvbmZpZ1Bvc0hvcml6b250YWwiLCJpbnB1dEJvdW5kcyIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImRpc3RhbmNlRnJvbUJvdHRvbSIsImlubmVySGVpZ2h0IiwiYm90dG9tIiwic2hvd09uVG9wIiwidG9wIiwicGFnZVlPZmZzZXQiLCJsZWZ0IiwicGFnZVhPZmZzZXQiLCJyaWdodCIsInJpZ2h0TW9zdCIsImNlbnRlck1vc3QiLCJkb2MiLCJzdHlsZVNoZWV0cyIsImJvZHlXaWR0aCIsImNlbnRlckxlZnQiLCJjZW50ZXJCZWZvcmUiLCJjZW50ZXJBZnRlciIsImNlbnRlckluZGV4IiwiY3NzUnVsZXMiLCJjZW50ZXJTdHlsZSIsImluc2VydFJ1bGUiLCJtc01heFRvdWNoUG9pbnRzIiwiaXNTZWxlY3RhYmxlIiwic2VsZWN0ZWREYXRlIiwic2hvdWxkQ2hhbmdlTW9udGgiLCJzZWxlY3RlZEluZGV4Iiwic29ydCIsInNpbmdsZSIsIkNBTExCQUNLUyIsIm9wdGlvbiIsInNldFNlbGVjdGVkRGF0ZSIsImlucHV0RGF0ZSIsInJ1bGUiLCJwcmVsb2FkZWREYXRlIiwiZGVmYXVsdERhdGUiLCJub2RlTmFtZSIsInBsYWNlaG9sZGVyIiwiX3Nob3dUaW1lSW5wdXQiLCJxdWVyeVNlbGVjdG9yIiwicmVxdWlyZWQiLCJpbnB1dFR5cGUiLCJzdGVwIiwibW9iaWxlRm9ybWF0U3RyIiwiZGVmYXVsdFZhbHVlIiwiaG9va3MiLCJpbml0RXZlbnQiLCJnZXREYXRlU3RyIiwiZE9iaiIsImlzUHJldk1vbnRoIiwiaXNOZXh0TW9udGgiLCJpc0tleURvd24iLCJjdXJWYWx1ZSIsImlzSG91ckVsZW0iLCJpc01pbnV0ZUVsZW0iLCJfZmxhdHBpY2tyIiwibm9kZUxpc3QiLCJub2RlcyIsIkhUTUxFbGVtZW50IiwiaW5zdGFuY2VzIiwiSFRNTENvbGxlY3Rpb24iLCJOb2RlTGlzdCIsIk5vZGUiLCJlbiIsImxvY2FsaXplIiwic2V0RGVmYXVsdHMiLCJmcF9pbmNyIiwiRmllbGROdW1iZXIiLCJpbml0RmllbGQiLCIkdWkiLCJpbmNyZWFzZSIsImRlY3JlYXNlIiwiaW50ZXJ2YWxzIiwibm9ybWFsIiwiaW5jcmVhc2VJbnRlcnZhbCIsImFsdCIsImFsdEluY3JlYXNlSW50ZXJ2YWwiLCJkZWNyZWFzZUludGVydmFsIiwiYWx0RGVjcmVhc2VJbnRlcnZhbCIsImNvbnN0cmFpbk1heCIsImNvbnN0cmFpbk1pbiIsImNvbnN0cmFpbnRzIiwic2hpZnRLZXlVdGlsaXR5Iiwic2V0dXBIYW5kbGVycyIsImluaXRpYWxWYWx1ZSIsInZhbGlkYXRlSW5wdXQiLCJzaGlmdEtleURvd24iLCJpbmNyZWFzZU51bWJlciIsImRlY3JlYXNlTnVtYmVyIiwiaW5wdXRFeHRlcm5hbENoYW5nZSIsImFtb3VudCIsIm5ld051bWJlciIsInN0YXR1cyIsImN1cnJlbnRWYWx1ZSIsImNvbnN0cmFpbk51bWJlciIsInRvZ2dsZURlY3JlYXNlRGlzYWJsZWRVSSIsInRvZ2dsZUluY3JlYXNlRGlzYWJsZWRVSSIsIkZpZWxkTnVtYmVySW5pdGlhbGl6ZSIsImFwaSIsIiRmaWVsZHMiLCJpbml0aWFsaXplRmllbGQiLCJGaWVsZENvbG9yUGlja2VyIiwiaW5pdGlhbGl6ZUNvbG9ycGlja2VyIiwic2V0RGVmYXVsdCIsIndwQ29sb3JQaWNrZXIiLCJjb2xvcnBpY2tlck9wdGlvbnMiLCJGaWVsZENvbG9yUGlja2VySW5pdGlhbGl6ZSIsIkZpZWxkRGF0ZVBpY2tlciIsIm9wdGlvbl9mdW5jdGlvbnMiLCJkYXRlcGlja2VyT3B0aW9ucyIsIkZpZWxkRGF0ZVBpY2tlckluaXRpYWxpemUiLCJGaWVsZFRpbWVQaWNrZXIiLCJ0aW1lcGlja2VyT3B0aW9ucyIsIkZpZWxkVGltZVBpY2tlckluaXRpYWxpemUiLCJGaWVsZERhdGVUaW1lUGlja2VyIiwiZGF0ZXRpbWVwaWNrZXJPcHRpb25zIiwiRmllbGREYXRlVGltZVBpY2tlckluaXRpYWxpemUiLCJGaWVsZFRhYmxlIiwiYWN0aW9ucyIsImxvYWRpbmciLCJ0aGVhZCIsInRib2R5IiwiYWRkUm93IiwiYWRkQ29sdW1uIiwiYnVpbGRUYWJsZSIsImRlbGV0ZVJvdyIsImRlbGV0ZUNvbHVtbiIsInVwZGF0ZVRhYmxlRGF0YSIsIiRoZWFkQ2VsbHMiLCJkYXRhSGVhZCIsImN1cnJlbnRDZWxsIiwiJGJvZHlSb3dzIiwiZGF0YUJvZHkiLCJjdXJyZW50Um93IiwiaGFzQ2xhc3MiLCJyb3dEYXRhIiwiJGNlbGxzIiwiY29sdW1ucyIsInJvdyIsImh0bWwiLCIkcm93IiwiY2VsbCIsImNlbGxfaSIsIiRjZWxsIiwiJGRlbGV0ZVJvdyIsInJvd19pIiwiRmllbGRUYWJsZUluaXRpYWxpemUiLCJGaWVsZE1lZGlhIiwiYWRkQnV0dG9uIiwiaW1hZ2VQcmV2aWV3IiwibWVkaWFQcmV2aWV3IiwicmVtb3ZlQnV0dG9uIiwibWVkaWFGcmFtZSIsIndwIiwiZnJhbWVzIiwibWV0YV9pbWFnZV9mcmFtZSIsImltYWdlUHJvcGVydGllcyIsInByZXZpZXdTaXplIiwiYWRkTWVkaWEiLCJyZW1vdmVNZWRpYSIsInNlbGVjdE1lZGlhIiwibWVkaWFBdHRhY2htZW50Iiwic3RhdGUiLCJ0b0pTT04iLCJwcmV2aWV3VXJsIiwic2l6ZXMiLCJGaWVsZE1lZGlhSW5pdGlhbGl6ZSIsIkZpZWxkTGlzdCIsInNvcnRhYmxlIiwiRmllbGRMaXN0SW5pdGlhbGl6ZSIsIkZpZWxkUmVwZWF0ZXIiLCIkcmVwZWF0ZXJMaXN0IiwicmVwZWF0ZXJTaG93IiwiZGVsZXRlSXRlbSIsInJlcGVhdGVySGlkZSIsImVtcHR5IiwiY29sbGFwc2FibGUiLCJpbml0Q29sbGFwc2FibGUiLCJpbml0U29ydGFibGUiLCJsb2ciLCJ0b2dnbGVDb2xsYXBzZSIsImF4aXMiLCJoYW5kbGUiLCJmb3JjZVBsYWNlaG9sZGVyU2l6ZSIsInN0b3AiLCJ1aSIsIiRjb250ZW50Iiwic2xpZGVEb3duIiwiYWRkQ2xhc3MiLCJyZW1vdmVDbGFzcyIsInNsaWRlVXAiLCJjc3MiLCJjb25maXJtIiwiRmllbGRSZXBlYXRlckluaXRpYWxpemUiLCJGaWVsZFNlbGVjdCIsInNlbGVjdDJEaXNhYmxlZCIsInJibWZoc2VsZWN0MiIsInNldHVwU2VsZWN0Mk9wdGlvbnMiLCJzZWxlY3QyT3B0aW9ucyIsImxhbmd1YWdlIiwic2V0dXBMMTBuIiwiY2FsbGJhY2tPcHRpb25zIiwiY2FsbGJhY2tOYW1lIiwib3B0R3JvdXBzIiwib3B0R3JvdXBTZWxlY3Rpb25QcmVmaXgiLCJ0ZW1wbGF0ZVNlbGVjdGlvbiIsIml0ZW0iLCJvcHRHcm91cCIsIiRvbGRTZWxlY3QiLCJuZXh0IiwiRmllbGRTZWxlY3RJbml0aWFsaXplIiwiRmllbGRUZXh0QXJlYSIsInd5c2l3eWciLCJlZGl0b3IiLCJzZXR0aW5ncyIsImdldERlZmF1bHRFZGl0b3JTZXR0aW5ncyIsInd5c2l3eWdPcHRpb25zIiwiaW5pdGlhbGl6ZSIsInRpbnltY2UiLCJnZXREZWZhdWx0U2V0dGluZ3MiLCJGaWVsZFRleHRBcmVhSW5pdGlhbGl6ZSIsIkZpZWxkQ2hlY2tib3giLCJjaGVja2JveGVzIiwiaGFuZGxlQ2hhbmdlIiwic2V0QWN0aXZlIiwic2V0SW5hY3RpdmUiLCJJRCIsIiRyb3dzIiwiJGxhYmVsIiwiZmllbGRJbmRleCIsIkZpZWxkQ2hlY2tib3hJbml0aWFsaXplIiwiRmllbGRSYWRpbyIsInJhZGlvcyIsIkZpZWxkUmFkaW9Jbml0aWFsaXplIiwiRmllbGRUb2dnbGUiLCJnZXRVSSIsInNsaWRlciIsImhhbmRsZUNsaWNrIiwiaXNDaGVja2VkIiwidW5jaGVja2VkVmFsdWUiLCJjaGVja2VkVmFsdWUiLCJGaWVsZFRvZ2dsZUluaXRpYWxpemUiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQTJCLDBCQUEwQixFQUFFO0FBQ3ZELHlDQUFpQyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhEQUFzRCwrREFBK0Q7O0FBRXJIO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7Ozs7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TEQsTUFLTzs7QUFFSCxxQkFBS3hILEdBQUwsQ0FBU3RwQixLQUFULENBQWU5SixHQUFmLENBQW1CLEtBQUt2QixPQUFMLENBQWFzL0IsWUFBaEM7QUFDQSxxQkFBS2xnQyxNQUFMLENBQVk4OEIsUUFBWixDQUFxQixTQUFyQjtBQUNIOztBQUVELGlCQUFLOThCLE1BQUwsQ0FBWXdELE9BQVosQ0FBb0IsUUFBcEIsRUFBOEIsQ0FBQyxLQUFLK3hCLEdBQUwsQ0FBU3RwQixLQUFULENBQWU5SixHQUFmLEVBQUQsQ0FBOUI7QUFDSDs7Ozs7O0FBR0w7Ozs7Ozs7SUFLTWcrQixxQjs7QUFFRjs7Ozs7OztBQU9BLG1DQUFZNzlCLEtBQVosRUFBbUI7QUFBQTs7QUFFZixZQUFNODBCLE1BQU0sSUFBWjs7QUFFQSxhQUFLNzBCLE1BQUwsR0FBYyxFQUFkOztBQUVBLFlBQUk4MEIsVUFBVS8wQixNQUFNWCxJQUFOLENBQVcsa0NBQVgsQ0FBZDs7QUFFQSxZQUFLMDFCLFFBQVF0MkIsTUFBYixFQUFzQjs7QUFFbEJzMkIsb0JBQVE3dEIsSUFBUixDQUFhLFlBQVk7O0FBRXJCNHRCLG9CQUFJRSxlQUFKLENBQW9CajBCLE9BQU8sSUFBUCxDQUFwQjtBQUNILGFBSEQ7QUFJSDtBQUNKOztBQUVEOzs7Ozs7Ozs7Ozt3Q0FPZ0JyRCxNLEVBQVE7O0FBRXBCLGlCQUFLdUMsTUFBTCxDQUFZOEQsSUFBWixDQUFpQjtBQUNickcsOEJBRGE7QUFFYm8zQixxQkFBSyxJQUFJd0ksV0FBSixDQUFnQjUvQixNQUFoQjtBQUZRLGFBQWpCO0FBSUg7Ozs7OztrQkFHVW1nQyxxQiIsImZpbGUiOiJyYm0tZmllbGQtaGVscGVycy1hZG1pbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0XHRnZXQ6IGdldHRlclxuIFx0XHRcdH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDIpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIDMwYTQ4MmMyMmQzNThhYTlhMDk5IiwiLyoqXG4gKiBNYWluIGZpZWxkIGNsYXNzLlxuICpcbiAqIEBzaW5jZSAxLjQuMFxuICovXG5jbGFzcyBGaWVsZCB7XG5cbiAgICAvKipcbiAgICAgKiBDbGFzcyBjb25zdHJ1Y3Rvci5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqXG4gICAgICogQHBhcmFtIHtqUXVlcnl9ICRmaWVsZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoJGZpZWxkLCB0eXBlKSB7XG5cbiAgICAgICAgdGhpcy4kZmllbGQgICA9ICRmaWVsZDtcbiAgICAgICAgdGhpcy4kd3JhcHBlciA9ICRmaWVsZC5jbG9zZXN0KCcuZmllbGRoZWxwZXJzLWZpZWxkJyk7XG4gICAgICAgIHRoaXMudHlwZSAgICAgPSB0eXBlO1xuICAgICAgICB0aGlzLm5hbWUgICAgID0gdGhpcy4kd3JhcHBlci5hdHRyKCdkYXRhLWZpZWxkaGVscGVycy1uYW1lJyk7XG4gICAgICAgIHRoaXMuaW5zdGFuY2UgPSB0aGlzLiR3cmFwcGVyLmF0dHIoJ2RhdGEtZmllbGRoZWxwZXJzLWluc3RhbmNlJyk7XG5cbiAgICAgICAgdGhpcy5nZXRSZXBlYXRlcigpO1xuXG4gICAgICAgIHRoaXMuZ2V0T3B0aW9ucygpO1xuXG4gICAgICAgIGlmICggdGhpcy5yZXBlYXRlciApIHtcblxuICAgICAgICAgICAgdGhpcy5yZXBlYXRlclN1cHBvcnQoKTtcbiAgICAgICAgfVxuXHRcdFxuXHRcdC8vIFB1dCBpbiBnbG9iYWwgc2NvcGUgZm9yIG90aGVyIG1ldGhvZHMgdG8gaW50ZXJhY3Qgd2l0aCBpdFxuXHRcdGlmICggdHlwZW9mIFJCTV9GaWVsZEhlbHBlcnNbIHRoaXMuaW5zdGFuY2UgXVsnZmllbGRPYmplY3RzJ10gPT0gJ3VuZGVmaW5lZCcgKSB7XG5cdFx0XHRSQk1fRmllbGRIZWxwZXJzWyB0aGlzLmluc3RhbmNlIF1bJ2ZpZWxkT2JqZWN0cyddID0ge307XG5cdFx0fVxuXHRcdFxuXHRcdGlmICggdHlwZW9mIFJCTV9GaWVsZEhlbHBlcnNbIHRoaXMuaW5zdGFuY2UgXVsnZmllbGRPYmplY3RzJ11bIHRoaXMudHlwZSBdID09ICd1bmRlZmluZWQnICkge1xuXHRcdFx0UkJNX0ZpZWxkSGVscGVyc1sgdGhpcy5pbnN0YW5jZSBdWydmaWVsZE9iamVjdHMnXVsgdGhpcy50eXBlIF0gPSB7fTtcblx0XHR9XG5cdFx0XHRcblx0XHRSQk1fRmllbGRIZWxwZXJzWyB0aGlzLmluc3RhbmNlIF1bJ2ZpZWxkT2JqZWN0cyddWyB0aGlzLnR5cGUgXVsgdGhpcy5uYW1lIF0gPSB0aGlzO1xuXHRcdFxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemVzIHRoZSBmaWVsZC5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqL1xuICAgIGluaXRGaWVsZCgpIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGZpZWxkIG9wdGlvbnMuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMS40LjBcbiAgICAgKi9cbiAgICBnZXRPcHRpb25zKCkge1xuXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuXG4gICAgICAgIGlmICggdHlwZW9mIFJCTV9GaWVsZEhlbHBlcnNbdGhpcy5pbnN0YW5jZV0gPT09ICd1bmRlZmluZWQnICkge1xuXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBGaWVsZCBIZWxwZXJzIEVycm9yOiBEYXRhIGZvciAke3RoaXMuaW5zdGFuY2V9IGluc3RhbmNlIGNhbm5vdCBiZSBmb3VuZC5gKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICggdGhpcy5yZXBlYXRlciApIHtcblxuICAgICAgICAgICAgaWYgKCB0eXBlb2YgUkJNX0ZpZWxkSGVscGVyc1t0aGlzLmluc3RhbmNlXVsncmVwZWF0ZXJGaWVsZHMnXVt0aGlzLnJlcGVhdGVyXSA9PT0gJ3VuZGVmaW5lZCcgKSB7XG5cbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBGaWVsZCBIZWxwZXJzIEVycm9yOiBEYXRhIGZvciByZXBlYXRlciAke3RoaXMudHlwZX0gc3ViLWZpZWxkcyBjYW5ub3QgYmUgZm91bmQuYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIHR5cGVvZiBSQk1fRmllbGRIZWxwZXJzW3RoaXMuaW5zdGFuY2VdWydyZXBlYXRlckZpZWxkcyddW3RoaXMucmVwZWF0ZXJdW3RoaXMubmFtZV0gPT09ICd1bmRlZmluZWQnICkge1xuXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRmllbGQgSGVscGVycyBFcnJvcjogQ2Fubm90IGZpbmQgZmllbGQgb3B0aW9ucyBmb3IgcmVwZWF0ZXIgJHt0aGlzLnR5cGV9IHN1Yi1maWVsZCB3aXRoIG5hbWU6ICR7dGhpcy5uYW1lfS5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IFJCTV9GaWVsZEhlbHBlcnNbdGhpcy5pbnN0YW5jZV1bJ3JlcGVhdGVyRmllbGRzJ11bdGhpcy5yZXBlYXRlcl1bdGhpcy5uYW1lXTtcblxuICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICBpZiAoIHR5cGVvZiBSQk1fRmllbGRIZWxwZXJzW3RoaXMuaW5zdGFuY2VdW3RoaXMudHlwZV0gPT09ICd1bmRlZmluZWQnICkge1xuXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRmllbGQgSGVscGVycyBFcnJvcjogRGF0YSBmb3IgJHt0aGlzLnR5cGV9IGZpZWxkcyBjYW5ub3QgYmUgZm91bmQuYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIHR5cGVvZiBSQk1fRmllbGRIZWxwZXJzW3RoaXMuaW5zdGFuY2VdW3RoaXMudHlwZV1bdGhpcy5uYW1lXSA9PT0gJ3VuZGVmaW5lZCcgKSB7XG5cbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBGaWVsZCBIZWxwZXJzIEVycm9yOiBDYW5ub3QgZmluZCBmaWVsZCBvcHRpb25zIGZvciAke3RoaXMudHlwZX0gZmllbGQgd2l0aCBuYW1lOiAke3RoaXMubmFtZX0uYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSBSQk1fRmllbGRIZWxwZXJzW3RoaXMuaW5zdGFuY2VdW3RoaXMudHlwZV1bdGhpcy5uYW1lXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElmIGZpZWxkIGlzIGluIGEgUmVwZWF0ZXIsIGl0IHdpbGwgbmVlZCBzdXBwb3J0LlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICovXG4gICAgZ2V0UmVwZWF0ZXIoKSB7XG5cbiAgICAgICAgaWYgKCB0aGlzLiRmaWVsZC5jbG9zZXN0KCdbZGF0YS1maWVsZGhlbHBlcnMtZmllbGQtcmVwZWF0ZXJdJykubGVuZ3RoICkge1xuXG4gICAgICAgICAgICB0aGlzLiRyZXBlYXRlciA9IHRoaXMuJGZpZWxkLnBhcmVudCgpLmNsb3Nlc3QoJ1tkYXRhLWZpZWxkaGVscGVycy1maWVsZC1yZXBlYXRlcl0nKTtcbiAgICAgICAgICAgIHRoaXMucmVwZWF0ZXIgID0gdGhpcy4kcmVwZWF0ZXIuY2xvc2VzdCgnLmZpZWxkaGVscGVycy1maWVsZC1yZXBlYXRlcicpLmF0dHIoJ2RhdGEtZmllbGRoZWxwZXJzLW5hbWUnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJ1bnMgc29tZSBmdW5jdGlvbnMgaWYgaW5zaWRlIGEgUmVwZWF0ZXIuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMS40LjBcbiAgICAgKi9cbiAgICByZXBlYXRlclN1cHBvcnQoKSB7XG5cbiAgICAgICAgLy8gVHJpZ2dlcnMgZmllbGRzIGNhbiB1dGlsaXplLiBXcmFwcGVkIGluIGFub255bW91cyB0byB1dGlsaXplIHNlbGYgYWNjZXNzLlxuICAgICAgICB0aGlzLiRyZXBlYXRlci5vbigncmVwZWF0ZXItYmVmb3JlLWluaXQnLCAoIGV2ZW50LCAkcmVwZWF0ZXIsIG9wdGlvbnMgKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlcGVhdGVyQmVmb3JlSW5pdCggJHJlcGVhdGVyLCBvcHRpb25zICk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLiRyZXBlYXRlci5vbigncmVwZWF0ZXItaW5pdCcsICggZXZlbnQsICRyZXBlYXRlciwgb3B0aW9ucyApID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJPbkluaXQoICRyZXBlYXRlciwgb3B0aW9ucyApO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy4kcmVwZWF0ZXIub24oJ3JlcGVhdGVyLWJlZm9yZS1hZGQtaXRlbScsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJCZWZvcmVBZGRJdGVtKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLiRyZXBlYXRlci5vbigncmVwZWF0ZXItYWRkLWl0ZW0nLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlcGVhdGVyT25BZGRJdGVtKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLiRmaWVsZC5jbG9zZXN0KCdbZGF0YS1yZXBlYXRlci1pdGVtXScpLm9uKCdyZXBlYXRlci1iZWZvcmUtZGVsZXRlLWl0ZW0nLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlcGVhdGVyQmVmb3JlRGVsZXRlU2VsZigpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy4kcmVwZWF0ZXIub24oJ3JlcGVhdGVyLWJlZm9yZS1kZWxldGUtaXRlbScsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVwZWF0ZXJCZWZvcmVEZWxldGVJdGVtKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLiRyZXBlYXRlci5vbigncmVwZWF0ZXItZGVsZXRlLWl0ZW0nLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlcGVhdGVyT25EZWxldGVJdGVtKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLiRyZXBlYXRlci5maW5kKCcuZmllbGRoZWxwZXJzLWZpZWxkLXJlcGVhdGVyLWxpc3QnKS5vbignbGlzdC11cGRhdGUnLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlcGVhdGVyT25Tb3J0KCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucmVwZWF0ZXJTZXRJRCgpO1xuICAgICAgICB0aGlzLmZpZWxkQ2xlYW51cCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpcmVzIGJlZm9yZSBSZXBlYXRlciBpbml0LlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNS4wXG4gICAgICovXG4gICAgcmVwZWF0ZXJCZWZvcmVJbml0KCAkcmVwZWF0ZXIsIG9wdGlvbnMgKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gUmVwZWF0ZXIgaW5pdC5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqL1xuICAgIHJlcGVhdGVyT25Jbml0KCAkcmVwZWF0ZXIsIG9wdGlvbnMgKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZXMgYmVmb3JlIFJlcGVhdGVyIGFkZCBpdGVtLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICovXG4gICAgcmVwZWF0ZXJCZWZvcmVBZGRJdGVtKCkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIFJlcGVhdGVyIGFkZCBpdGVtLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICovXG4gICAgcmVwZWF0ZXJPbkFkZEl0ZW0oKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZXMgYmVmb3JlIFJlcGVhdGVyIGRlbGV0ZSBpdGVtIChsb2NhbGl6ZWQgdG8gc2VsZikuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMS40LjBcbiAgICAgKi9cbiAgICByZXBlYXRlckJlZm9yZURlbGV0ZVNlbGYoKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZXMgYmVmb3JlIFJlcGVhdGVyIGRlbGV0ZSBpdGVtLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICovXG4gICAgcmVwZWF0ZXJCZWZvcmVEZWxldGVJdGVtKCkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIFJlcGVhdGVyIGRlbGV0ZSBpdGVtLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICovXG4gICAgcmVwZWF0ZXJPbkRlbGV0ZUl0ZW0oKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gUmVwZWF0IHNvcnQgaXRlbS5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqL1xuICAgIHJlcGVhdGVyT25Tb3J0KCkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIElEIHRvIGJlIHVuaXF1ZSwgYmFzZWQgb2ZmIHRoZSByZXBlYXRlciBpdGVtIGluZGV4LlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICovXG4gICAgcmVwZWF0ZXJTZXRJRCgpIHtcblxuICAgICAgICBsZXQgaW5kZXggPSB0aGlzLiRmaWVsZC5jbG9zZXN0KCdbZGF0YS1yZXBlYXRlci1pdGVtXScpLmluZGV4KCk7XG4gICAgICAgIGxldCBuZXdJRCA9IGAke3RoaXMub3B0aW9ucy5pZH1fJHtpbmRleH1gO1xuXG4gICAgICAgIHRoaXMuJGZpZWxkLmF0dHIoJ2lkJywgbmV3SUQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFucyB1cCBhZnRlciBhIHJlcGVhdGVyIGFkZC9pbml0LlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICovXG4gICAgZmllbGRDbGVhbnVwKCkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGZpZWxkIHRvIGRlZmF1bHQuIE92ZXJyaWRlIGluIGNoaWxkIGNsYXNzIGlmIG5lZWQgZGlmZmVyZW50IG1ldGhvZC5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqL1xuICAgIHNldERlZmF1bHQoKSB7XG5cbiAgICAgICAgaWYgKCB0aGlzLm9wdGlvbnMuZGVmYXVsdCApIHtcblxuICAgICAgICAgICAgdGhpcy4kZmllbGQudmFsKHRoaXMub3B0aW9ucy5kZWZhdWx0KS5jaGFuZ2UoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRmllbGQ7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vYXNzZXRzL3NyYy9qcy9hZG1pbi9maWVsZHMvZmllbGQuanMiLCJpbXBvcnQgRmllbGROdW1iZXJJbml0aWFsaXplIGZyb20gXCIuL2ZpZWxkcy9maWVsZC1udW1iZXJcIjtcbmltcG9ydCBGaWVsZENvbG9yUGlja2VySW5pdGlhbGl6ZSBmcm9tIFwiLi9maWVsZHMvZmllbGQtY29sb3JwaWNrZXJcIjtcbmltcG9ydCBGaWVsZERhdGVQaWNrZXJJbml0aWFsaXplIGZyb20gXCIuL2ZpZWxkcy9maWVsZC1kYXRlcGlja2VyXCI7XG5pbXBvcnQgRmllbGRUaW1lUGlja2VySW5pdGlhbGl6ZSBmcm9tIFwiLi9maWVsZHMvZmllbGQtdGltZXBpY2tlclwiO1xuaW1wb3J0IEZpZWxkRGF0ZVRpbWVQaWNrZXJJbml0aWFsaXplIGZyb20gXCIuL2ZpZWxkcy9maWVsZC1kYXRldGltZXBpY2tlclwiO1xuaW1wb3J0IEZpZWxkVGFibGVJbml0aWFsaXplIGZyb20gXCIuL2ZpZWxkcy9maWVsZC10YWJsZVwiO1xuaW1wb3J0IEZpZWxkTWVkaWFJbml0aWFsaXplIGZyb20gXCIuL2ZpZWxkcy9maWVsZC1tZWRpYVwiO1xuaW1wb3J0IEZpZWxkTGlzdEluaXRpYWxpemUgZnJvbSBcIi4vZmllbGRzL2ZpZWxkLWxpc3RcIjtcbmltcG9ydCBGaWVsZFJlcGVhdGVySW5pdGlhbGl6ZSBmcm9tIFwiLi9maWVsZHMvZmllbGQtcmVwZWF0ZXJcIjtcbmltcG9ydCBGaWVsZFNlbGVjdEluaXRpYWxpemUgZnJvbSBcIi4vZmllbGRzL2ZpZWxkLXNlbGVjdFwiO1xuaW1wb3J0IEZpZWxkVGV4dEFyZWFJbml0aWFsaXplIGZyb20gXCIuL2ZpZWxkcy9maWVsZC10ZXh0YXJlYVwiO1xuaW1wb3J0IEZpZWxkQ2hlY2tib3hJbml0aWFsaXplIGZyb20gXCIuL2ZpZWxkcy9maWVsZC1jaGVja2JveFwiO1xuaW1wb3J0IEZpZWxkUmFkaW9Jbml0aWFsaXplIGZyb20gXCIuL2ZpZWxkcy9maWVsZC1yYWRpb1wiO1xuaW1wb3J0IEZpZWxkVG9nZ2xlSW5pdGlhbGl6ZSBmcm9tIFwiLi9maWVsZHMvZmllbGQtdG9nZ2xlXCI7XG5cbi8qKlxuICogSGFuZGxlcyBhbGwgZmllbGQgaW5pdGlhbGl6YXRpb25zLlxuICpcbiAqIEBzaW5jZSAxLjQuMFxuICovXG5jbGFzcyBGaWVsZHNJbml0aWFsaXplIHtcblxuICAgIC8qKlxuICAgICAqIENsYXNzIGNvbnN0cnVjdG9yLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2pRdWVyeX0gJHJvb3QgUm9vdCBlbGVtZW50IHRvIGluaXRpYWxpemUgZmllbGRzIGluc2lkZS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcigkcm9vdCkge1xuXG4gICAgICAgIHRoaXMuZmllbGRzID0ge1xuICAgICAgICAgICAgY2hlY2tib3g6IG5ldyBGaWVsZENoZWNrYm94SW5pdGlhbGl6ZSgkcm9vdCksXG4gICAgICAgICAgICB0b2dnbGU6IG5ldyBGaWVsZFRvZ2dsZUluaXRpYWxpemUoJHJvb3QpLFxuICAgICAgICAgICAgcmFkaW86IG5ldyBGaWVsZFJhZGlvSW5pdGlhbGl6ZSgkcm9vdCksXG4gICAgICAgICAgICBzZWxlY3Q6IG5ldyBGaWVsZFNlbGVjdEluaXRpYWxpemUoJHJvb3QpLFxuICAgICAgICAgICAgdGV4dGFyZWE6IG5ldyBGaWVsZFRleHRBcmVhSW5pdGlhbGl6ZSgkcm9vdCksXG4gICAgICAgICAgICBudW1iZXI6IG5ldyBGaWVsZE51bWJlckluaXRpYWxpemUoJHJvb3QpLFxuICAgICAgICAgICAgY29sb3JwaWNrZXI6IG5ldyBGaWVsZENvbG9yUGlja2VySW5pdGlhbGl6ZSgkcm9vdCksXG4gICAgICAgICAgICBkYXRlcGlja2VyOiBuZXcgRmllbGREYXRlUGlja2VySW5pdGlhbGl6ZSgkcm9vdCksXG4gICAgICAgICAgICB0aW1lcGlja2VyOiBuZXcgRmllbGRUaW1lUGlja2VySW5pdGlhbGl6ZSgkcm9vdCksXG4gICAgICAgICAgICBkYXRldGltZXBpY2tlcjogbmV3IEZpZWxkRGF0ZVRpbWVQaWNrZXJJbml0aWFsaXplKCRyb290KSxcbiAgICAgICAgICAgIHRhYmxlOiBuZXcgRmllbGRUYWJsZUluaXRpYWxpemUoJHJvb3QpLFxuICAgICAgICAgICAgbWVkaWE6IG5ldyBGaWVsZE1lZGlhSW5pdGlhbGl6ZSgkcm9vdCksXG4gICAgICAgICAgICBsaXN0OiBuZXcgRmllbGRMaXN0SW5pdGlhbGl6ZSgkcm9vdCksXG4gICAgICAgICAgICByZXBlYXRlcjogbmV3IEZpZWxkUmVwZWF0ZXJJbml0aWFsaXplKCRyb290KSxcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZpZWxkc0luaXRpYWxpemU7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vYXNzZXRzL3NyYy9qcy9hZG1pbi9maWVsZHMtaW5pdC5qcyIsImltcG9ydCAnanF1ZXJ5LnJlcGVhdGVyJztcbmltcG9ydCAnZmxhdHBpY2tyJztcbmltcG9ydCBGaWVsZHNJbml0aWFsaXplIGZyb20gXCIuL2ZpZWxkcy1pbml0XCI7XG5cbi8vIEluaXRpYWxpemUgYXBwIG9uIGpRdWVyeSBSZWFkeS5cbmpRdWVyeSgoKSA9PiB7XG5cbiAgICBjb25zdCBGaWVsZHMgPSBuZXcgRmllbGRzSW5pdGlhbGl6ZShqUXVlcnkoZG9jdW1lbnQpKTtcblx0alF1ZXJ5KCBkb2N1bWVudCApLnRyaWdnZXIoICdyYm0tZmllbGQtaGVscGVycy1yZWFkeScgKTtcbn0pO1xuXG4vLyBSZS1pbml0IGFueSBmaWVsZHMgd2l0aGluIGEgY29udGFpbmVyXG53aW5kb3cucmJtRkhpbml0RmllbGQgPSBmdW5jdGlvbiggJHJvb3QgKSB7XG5cdFxuXHRuZXcgRmllbGRzSW5pdGlhbGl6ZSggJHJvb3QgKTtcblx0XG59XG5cbi8vIEdyYWIgRmllbGQgT2JqZWN0IGZyb20gdGhlIFJCTV9GaWVsZEhlbHBlcnMgZ2xvYmFsIGluIG9yZGVyIHRvIHJ1biBtZXRob2RzIG9uIHRoZW1cbndpbmRvdy5yYm1GSGdldEZpZWxkT2JqZWN0ID0gZnVuY3Rpb24oIG5hbWUsIGluc3RhbmNlID0gbnVsbCwgZmllbGRUeXBlID0gbnVsbCApIHtcblx0XG5cdGlmICggaW5zdGFuY2UgPT09IG51bGwgKSB7XG5cdFx0XG5cdFx0aW5zdGFuY2UgPSBqUXVlcnkoICcuZmllbGRoZWxwZXJzLWZpZWxkW2RhdGEtZmllbGRoZWxwZXJzLW5hbWU9XCInICsgbmFtZSArICdcIl0nICkuZGF0YSggJ2ZpZWxkaGVscGVycy1pbnN0YW5jZScgKTtcblx0XHRcblx0fVxuXHRcblx0aWYgKCBmaWVsZFR5cGUgPT09IG51bGwgKSB7XG5cdFx0XG5cdFx0bGV0IGNsYXNzTmFtZXMgPSBqUXVlcnkoICcuZmllbGRoZWxwZXJzLWZpZWxkW2RhdGEtZmllbGRoZWxwZXJzLW5hbWU9XCInICsgbmFtZSArICdcIl1bZGF0YS1maWVsZGhlbHBlcnMtaW5zdGFuY2U9XCInICsgaW5zdGFuY2UgKyAnXCJdJyApLmZpcnN0KCkuYXR0ciggJ2NsYXNzJyApO1xuXHRcdFxuXHRcdGxldCB0ZXN0ID0gL2ZpZWxkaGVscGVycy1maWVsZC0oXFxTKikvLmV4ZWMoIGNsYXNzTmFtZXMgKTtcblx0XHRcblx0XHRpZiAoIHRlc3QgIT09IG51bGwgJiYgXG5cdFx0ICAgdGVzdFsxXS5sZW5ndGggPiAwICkge1xuXHRcdFx0XG5cdFx0XHRmaWVsZFR5cGUgPSB0ZXN0WzFdO1xuXHRcdFx0XG5cdFx0fVxuXHRcdFxuXHR9XG5cdFxuXHR0cnkge1xuXHRcblx0XHRyZXR1cm4gUkJNX0ZpZWxkSGVscGVyc1sgaW5zdGFuY2UgXVsnZmllbGRPYmplY3RzJ11bIGZpZWxkVHlwZSBdWyBuYW1lIF07XG5cdFx0XG5cdH1cblx0Y2F0Y2ggKCBlcnJvciApIHtcblx0XHRcblx0XHRpZiAoIGluc3RhbmNlID09PSBudWxsIHx8IFxuXHRcdCAgIGZpZWxkVHlwZSA9PT0gbnVsbCB8fCBcblx0XHQgICB0eXBlb2YgUkJNX0ZpZWxkSGVscGVyc1sgaW5zdGFuY2UgXSA9PSAndW5kZWZpbmVkJyB8fCBcblx0XHQgICB0eXBlb2YgUkJNX0ZpZWxkSGVscGVyc1sgaW5zdGFuY2UgXVsnZmllbGRPYmplY3RzJ10gPT0gJ3VuZGVmaW5lZCcgfHxcblx0XHQgICB0eXBlb2YgUkJNX0ZpZWxkSGVscGVyc1sgaW5zdGFuY2UgXVsnZmllbGRPYmplY3RzJ11bIGZpZWxkVHlwZSBdID09ICd1bmRlZmluZWQnIHx8IFxuXHRcdCAgIHR5cGVvZiBSQk1fRmllbGRIZWxwZXJzWyBpbnN0YW5jZSBdWydmaWVsZE9iamVjdHMnXVsgZmllbGRUeXBlIF1bIG5hbWUgXSA9PSAndW5kZWZpbmVkJyB8fCBcblx0XHQgICB0eXBlb2YgUkJNX0ZpZWxkSGVscGVyc1sgaW5zdGFuY2UgXVsnZmllbGRPYmplY3RzJ11bIGZpZWxkVHlwZSBdWyBuYW1lIF0ubGVuZ3RoIDwgMCApIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoICdGaWVsZCBIZWxwZXJzIEVycm9yOiBGaWVsZCBPYmplY3QgZm9yIFwiJyArIG5hbWUgKyAnXCIgTm90IEZvdW5kJyApO1xuXHRcdH1cblx0XHRcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vYXNzZXRzL3NyYy9qcy9hZG1pbi9yYm0tZmllbGQtaGVscGVycy1hZG1pbi5qcyIsIi8vIGpxdWVyeS5yZXBlYXRlciB2ZXJzaW9uIDEuMi4xXG4vLyBodHRwczovL2dpdGh1Yi5jb20vRHViRnJpZW5kL2pxdWVyeS5yZXBlYXRlclxuLy8gKE1JVCkgMDktMTAtMjAxNlxuLy8gQnJpYW4gRGV0ZXJpbmcgPEJEZXRlcmluQGdtYWlsLmNvbT4gKGh0dHA6Ly93d3cuYnJpYW5kZXRlcmluZy5uZXQvKVxuKGZ1bmN0aW9uICgkKSB7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBpZGVudGl0eSA9IGZ1bmN0aW9uICh4KSB7XG4gICAgcmV0dXJuIHg7XG59O1xuXG52YXIgaXNBcnJheSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiAkLmlzQXJyYXkodmFsdWUpO1xufTtcblxudmFyIGlzT2JqZWN0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuICFpc0FycmF5KHZhbHVlKSAmJiAodmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpO1xufTtcblxudmFyIGlzTnVtYmVyID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgTnVtYmVyO1xufTtcblxudmFyIGlzRnVuY3Rpb24gPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBGdW5jdGlvbjtcbn07XG5cbnZhciBpbmRleE9mID0gZnVuY3Rpb24gKG9iamVjdCwgdmFsdWUpIHtcbiAgICByZXR1cm4gJC5pbkFycmF5KHZhbHVlLCBvYmplY3QpO1xufTtcblxudmFyIGluQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIGluZGV4T2YoYXJyYXksIHZhbHVlKSAhPT0gLTE7XG59O1xuXG52YXIgZm9yZWFjaCA9IGZ1bmN0aW9uIChjb2xsZWN0aW9uLCBjYWxsYmFjaykge1xuICAgIGZvcih2YXIgaSBpbiBjb2xsZWN0aW9uKSB7XG4gICAgICAgIGlmKGNvbGxlY3Rpb24uaGFzT3duUHJvcGVydHkoaSkpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGNvbGxlY3Rpb25baV0sIGksIGNvbGxlY3Rpb24pO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuXG52YXIgbGFzdCA9IGZ1bmN0aW9uIChhcnJheSkge1xuICAgIHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTtcbn07XG5cbnZhciBhcmd1bWVudHNUb0FycmF5ID0gZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncyk7XG59O1xuXG52YXIgZXh0ZW5kID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRlZCA9IHt9O1xuICAgIGZvcmVhY2goYXJndW1lbnRzVG9BcnJheShhcmd1bWVudHMpLCBmdW5jdGlvbiAobykge1xuICAgICAgICBmb3JlYWNoKG8sIGZ1bmN0aW9uICh2YWwsIGtleSkge1xuICAgICAgICAgICAgZXh0ZW5kZWRba2V5XSA9IHZhbDtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGV4dGVuZGVkO1xufTtcblxudmFyIG1hcFRvQXJyYXkgPSBmdW5jdGlvbiAoY29sbGVjdGlvbiwgY2FsbGJhY2spIHtcbiAgICB2YXIgbWFwcGVkID0gW107XG4gICAgZm9yZWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbiAodmFsdWUsIGtleSwgY29sbCkge1xuICAgICAgICBtYXBwZWQucHVzaChjYWxsYmFjayh2YWx1ZSwga2V5LCBjb2xsKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIG1hcHBlZDtcbn07XG5cbnZhciBtYXBUb09iamVjdCA9IGZ1bmN0aW9uIChjb2xsZWN0aW9uLCBjYWxsYmFjaywga2V5Q2FsbGJhY2spIHtcbiAgICB2YXIgbWFwcGVkID0ge307XG4gICAgZm9yZWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbiAodmFsdWUsIGtleSwgY29sbCkge1xuICAgICAgICBrZXkgPSBrZXlDYWxsYmFjayA/IGtleUNhbGxiYWNrKGtleSwgdmFsdWUpIDoga2V5O1xuICAgICAgICBtYXBwZWRba2V5XSA9IGNhbGxiYWNrKHZhbHVlLCBrZXksIGNvbGwpO1xuICAgIH0pO1xuICAgIHJldHVybiBtYXBwZWQ7XG59O1xuXG52YXIgbWFwID0gZnVuY3Rpb24gKGNvbGxlY3Rpb24sIGNhbGxiYWNrLCBrZXlDYWxsYmFjaykge1xuICAgIHJldHVybiBpc0FycmF5KGNvbGxlY3Rpb24pID9cbiAgICAgICAgbWFwVG9BcnJheShjb2xsZWN0aW9uLCBjYWxsYmFjaykgOlxuICAgICAgICBtYXBUb09iamVjdChjb2xsZWN0aW9uLCBjYWxsYmFjaywga2V5Q2FsbGJhY2spO1xufTtcblxudmFyIHBsdWNrID0gZnVuY3Rpb24gKGFycmF5T2ZPYmplY3RzLCBrZXkpIHtcbiAgICByZXR1cm4gbWFwKGFycmF5T2ZPYmplY3RzLCBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIHJldHVybiB2YWxba2V5XTtcbiAgICB9KTtcbn07XG5cbnZhciBmaWx0ZXIgPSBmdW5jdGlvbiAoY29sbGVjdGlvbiwgY2FsbGJhY2spIHtcbiAgICB2YXIgZmlsdGVyZWQ7XG5cbiAgICBpZihpc0FycmF5KGNvbGxlY3Rpb24pKSB7XG4gICAgICAgIGZpbHRlcmVkID0gW107XG4gICAgICAgIGZvcmVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24gKHZhbCwga2V5LCBjb2xsKSB7XG4gICAgICAgICAgICBpZihjYWxsYmFjayh2YWwsIGtleSwgY29sbCkpIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJlZC5wdXNoKHZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZmlsdGVyZWQgPSB7fTtcbiAgICAgICAgZm9yZWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbiAodmFsLCBrZXksIGNvbGwpIHtcbiAgICAgICAgICAgIGlmKGNhbGxiYWNrKHZhbCwga2V5LCBjb2xsKSkge1xuICAgICAgICAgICAgICAgIGZpbHRlcmVkW2tleV0gPSB2YWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBmaWx0ZXJlZDtcbn07XG5cbnZhciBjYWxsID0gZnVuY3Rpb24gKGNvbGxlY3Rpb24sIGZ1bmN0aW9uTmFtZSwgYXJncykge1xuICAgIHJldHVybiBtYXAoY29sbGVjdGlvbiwgZnVuY3Rpb24gKG9iamVjdCwgbmFtZSkge1xuICAgICAgICByZXR1cm4gb2JqZWN0W2Z1bmN0aW9uTmFtZV0uYXBwbHkob2JqZWN0LCBhcmdzIHx8IFtdKTtcbiAgICB9KTtcbn07XG5cbi8vZXhlY3V0ZSBjYWxsYmFjayBpbW1lZGlhdGVseSBhbmQgYXQgbW9zdCBvbmUgdGltZSBvbiB0aGUgbWluaW11bUludGVydmFsLFxuLy9pZ25vcmUgYmxvY2sgYXR0ZW1wdHNcbnZhciB0aHJvdHRsZSA9IGZ1bmN0aW9uIChtaW5pbXVtSW50ZXJ2YWwsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHRpbWVvdXQgPSBudWxsO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB0aGF0ID0gdGhpcywgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgaWYodGltZW91dCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgfSwgbWluaW11bUludGVydmFsKTtcbiAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHRoYXQsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5cblxudmFyIG1peGluUHViU3ViID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICAgIG9iamVjdCA9IG9iamVjdCB8fCB7fTtcbiAgICB2YXIgdG9waWNzID0ge307XG5cbiAgICBvYmplY3QucHVibGlzaCA9IGZ1bmN0aW9uICh0b3BpYywgZGF0YSkge1xuICAgICAgICBmb3JlYWNoKHRvcGljc1t0b3BpY10sIGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICAgICAgY2FsbGJhY2soZGF0YSk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBvYmplY3Quc3Vic2NyaWJlID0gZnVuY3Rpb24gKHRvcGljLCBjYWxsYmFjaykge1xuICAgICAgICB0b3BpY3NbdG9waWNdID0gdG9waWNzW3RvcGljXSB8fCBbXTtcbiAgICAgICAgdG9waWNzW3RvcGljXS5wdXNoKGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgb2JqZWN0LnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgIGZvcmVhY2godG9waWNzLCBmdW5jdGlvbiAoc3Vic2NyaWJlcnMpIHtcbiAgICAgICAgICAgIHZhciBpbmRleCA9IGluZGV4T2Yoc3Vic2NyaWJlcnMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIGlmKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm4gb2JqZWN0O1xufTtcblxuLy8ganF1ZXJ5LmlucHV0IHZlcnNpb24gMC4wLjBcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EdWJGcmllbmQvanF1ZXJ5LmlucHV0XG4vLyAoTUlUKSAwOS0wNC0yMDE0XG4vLyBCcmlhbiBEZXRlcmluZyA8QkRldGVyaW5AZ21haWwuY29tPiAoaHR0cDovL3d3dy5icmlhbmRldGVyaW5nLm5ldC8pXG4oZnVuY3Rpb24gKCQpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIGNyZWF0ZUJhc2VJbnB1dCA9IGZ1bmN0aW9uIChmaWcsIG15KSB7XG4gICAgdmFyIHNlbGYgPSBtaXhpblB1YlN1YigpLFxuICAgICAgICAkc2VsZiA9IGZpZy4kO1xuXG4gICAgc2VsZi5nZXRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aHJvdyAnaW1wbGVtZW50IG1lIChyZXR1cm4gdHlwZS4gXCJ0ZXh0XCIsIFwicmFkaW9cIiwgZXRjLiknO1xuICAgIH07XG5cbiAgICBzZWxmLiQgPSBmdW5jdGlvbiAoc2VsZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yID8gJHNlbGYuZmluZChzZWxlY3RvcikgOiAkc2VsZjtcbiAgICB9O1xuXG4gICAgc2VsZi5kaXNhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBzZWxmLiQoKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpO1xuICAgICAgICBzZWxmLnB1Ymxpc2goJ2lzRW5hYmxlZCcsIGZhbHNlKTtcbiAgICB9O1xuXG4gICAgc2VsZi5lbmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNlbGYuJCgpLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpO1xuICAgICAgICBzZWxmLnB1Ymxpc2goJ2lzRW5hYmxlZCcsIHRydWUpO1xuICAgIH07XG5cbiAgICBteS5lcXVhbFRvID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIGEgPT09IGI7XG4gICAgfTtcblxuICAgIG15LnB1Ymxpc2hDaGFuZ2UgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb2xkVmFsdWU7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoZSwgZG9tRWxlbWVudCkge1xuICAgICAgICAgICAgdmFyIG5ld1ZhbHVlID0gc2VsZi5nZXQoKTtcbiAgICAgICAgICAgIGlmKCFteS5lcXVhbFRvKG5ld1ZhbHVlLCBvbGRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnB1Ymxpc2goJ2NoYW5nZScsIHsgZTogZSwgZG9tRWxlbWVudDogZG9tRWxlbWVudCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9sZFZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgIH07XG4gICAgfSgpKTtcblxuICAgIHJldHVybiBzZWxmO1xufTtcblxuXG52YXIgY3JlYXRlSW5wdXQgPSBmdW5jdGlvbiAoZmlnLCBteSkge1xuICAgIHZhciBzZWxmID0gY3JlYXRlQmFzZUlucHV0KGZpZywgbXkpO1xuXG4gICAgc2VsZi5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBzZWxmLiQoKS52YWwoKTtcbiAgICB9O1xuXG4gICAgc2VsZi5zZXQgPSBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgc2VsZi4kKCkudmFsKG5ld1ZhbHVlKTtcbiAgICB9O1xuXG4gICAgc2VsZi5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2VsZi5zZXQoJycpO1xuICAgIH07XG5cbiAgICBteS5idWlsZFNldHRlciA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICBjYWxsYmFjay5jYWxsKHNlbGYsIG5ld1ZhbHVlKTtcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHNlbGY7XG59O1xuXG52YXIgaW5wdXRFcXVhbFRvQXJyYXkgPSBmdW5jdGlvbiAoYSwgYikge1xuICAgIGEgPSBpc0FycmF5KGEpID8gYSA6IFthXTtcbiAgICBiID0gaXNBcnJheShiKSA/IGIgOiBbYl07XG5cbiAgICB2YXIgaXNFcXVhbCA9IHRydWU7XG4gICAgaWYoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XG4gICAgICAgIGlzRXF1YWwgPSBmYWxzZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGZvcmVhY2goYSwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZighaW5BcnJheShiLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBpc0VxdWFsID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBpc0VxdWFsO1xufTtcblxudmFyIGNyZWF0ZUlucHV0QnV0dG9uID0gZnVuY3Rpb24gKGZpZykge1xuICAgIHZhciBteSA9IHt9LFxuICAgICAgICBzZWxmID0gY3JlYXRlSW5wdXQoZmlnLCBteSk7XG5cbiAgICBzZWxmLmdldFR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnYnV0dG9uJztcbiAgICB9O1xuXG4gICAgc2VsZi4kKCkub24oJ2NoYW5nZScsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIG15LnB1Ymxpc2hDaGFuZ2UoZSwgdGhpcyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2VsZjtcbn07XG5cbnZhciBjcmVhdGVJbnB1dENoZWNrYm94ID0gZnVuY3Rpb24gKGZpZykge1xuICAgIHZhciBteSA9IHt9LFxuICAgICAgICBzZWxmID0gY3JlYXRlSW5wdXQoZmlnLCBteSk7XG5cbiAgICBzZWxmLmdldFR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnY2hlY2tib3gnO1xuICAgIH07XG5cbiAgICBzZWxmLmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgICBzZWxmLiQoKS5maWx0ZXIoJzpjaGVja2VkJykuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YWx1ZXMucHVzaCgkKHRoaXMpLnZhbCgpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgfTtcblxuICAgIHNlbGYuc2V0ID0gZnVuY3Rpb24gKG5ld1ZhbHVlcykge1xuICAgICAgICBuZXdWYWx1ZXMgPSBpc0FycmF5KG5ld1ZhbHVlcykgPyBuZXdWYWx1ZXMgOiBbbmV3VmFsdWVzXTtcblxuICAgICAgICBzZWxmLiQoKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICQodGhpcykucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yZWFjaChuZXdWYWx1ZXMsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgc2VsZi4kKCkuZmlsdGVyKCdbdmFsdWU9XCInICsgdmFsdWUgKyAnXCJdJylcbiAgICAgICAgICAgICAgICAucHJvcCgnY2hlY2tlZCcsIHRydWUpO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgbXkuZXF1YWxUbyA9IGlucHV0RXF1YWxUb0FycmF5O1xuXG4gICAgc2VsZi4kKCkuY2hhbmdlKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIG15LnB1Ymxpc2hDaGFuZ2UoZSwgdGhpcyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2VsZjtcbn07XG5cbnZhciBjcmVhdGVJbnB1dEVtYWlsID0gZnVuY3Rpb24gKGZpZykge1xuICAgIHZhciBteSA9IHt9LFxuICAgICAgICBzZWxmID0gY3JlYXRlSW5wdXRUZXh0KGZpZywgbXkpO1xuXG4gICAgc2VsZi5nZXRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJ2VtYWlsJztcbiAgICB9O1xuXG4gICAgcmV0dXJuIHNlbGY7XG59O1xuXG52YXIgY3JlYXRlSW5wdXRGaWxlID0gZnVuY3Rpb24gKGZpZykge1xuICAgIHZhciBteSA9IHt9LFxuICAgICAgICBzZWxmID0gY3JlYXRlQmFzZUlucHV0KGZpZywgbXkpO1xuXG4gICAgc2VsZi5nZXRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJ2ZpbGUnO1xuICAgIH07XG5cbiAgICBzZWxmLmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGxhc3Qoc2VsZi4kKCkudmFsKCkuc3BsaXQoJ1xcXFwnKSk7XG4gICAgfTtcblxuICAgIHNlbGYuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTA0Mzk1Ny9jbGVhcmluZy1pbnB1dC10eXBlLWZpbGUtdXNpbmctanF1ZXJ5XG4gICAgICAgIHRoaXMuJCgpLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgJCh0aGlzKS53cmFwKCc8Zm9ybT4nKS5jbG9zZXN0KCdmb3JtJykuZ2V0KDApLnJlc2V0KCk7XG4gICAgICAgICAgICAkKHRoaXMpLnVud3JhcCgpO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgc2VsZi4kKCkuY2hhbmdlKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIG15LnB1Ymxpc2hDaGFuZ2UoZSwgdGhpcyk7XG4gICAgICAgIC8vIHNlbGYucHVibGlzaCgnY2hhbmdlJywgc2VsZik7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2VsZjtcbn07XG5cbnZhciBjcmVhdGVJbnB1dEhpZGRlbiA9IGZ1bmN0aW9uIChmaWcpIHtcbiAgICB2YXIgbXkgPSB7fSxcbiAgICAgICAgc2VsZiA9IGNyZWF0ZUlucHV0KGZpZywgbXkpO1xuXG4gICAgc2VsZi5nZXRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJ2hpZGRlbic7XG4gICAgfTtcblxuICAgIHNlbGYuJCgpLmNoYW5nZShmdW5jdGlvbiAoZSkge1xuICAgICAgICBteS5wdWJsaXNoQ2hhbmdlKGUsIHRoaXMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNlbGY7XG59O1xudmFyIGNyZWF0ZUlucHV0TXVsdGlwbGVGaWxlID0gZnVuY3Rpb24gKGZpZykge1xuICAgIHZhciBteSA9IHt9LFxuICAgICAgICBzZWxmID0gY3JlYXRlQmFzZUlucHV0KGZpZywgbXkpO1xuXG4gICAgc2VsZi5nZXRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJ2ZpbGVbbXVsdGlwbGVdJztcbiAgICB9O1xuXG4gICAgc2VsZi5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTQwMzU1MzAvaG93LXRvLWdldC12YWx1ZS1vZi1odG1sLTUtbXVsdGlwbGUtZmlsZS11cGxvYWQtdmFyaWFibGUtdXNpbmctanF1ZXJ5XG4gICAgICAgIHZhciBmaWxlTGlzdE9iamVjdCA9IHNlbGYuJCgpLmdldCgwKS5maWxlcyB8fCBbXSxcbiAgICAgICAgICAgIG5hbWVzID0gW10sIGk7XG5cbiAgICAgICAgZm9yKGkgPSAwOyBpIDwgKGZpbGVMaXN0T2JqZWN0Lmxlbmd0aCB8fCAwKTsgaSArPSAxKSB7XG4gICAgICAgICAgICBuYW1lcy5wdXNoKGZpbGVMaXN0T2JqZWN0W2ldLm5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5hbWVzO1xuICAgIH07XG5cbiAgICBzZWxmLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEwNDM5NTcvY2xlYXJpbmctaW5wdXQtdHlwZS1maWxlLXVzaW5nLWpxdWVyeVxuICAgICAgICB0aGlzLiQoKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICQodGhpcykud3JhcCgnPGZvcm0+JykuY2xvc2VzdCgnZm9ybScpLmdldCgwKS5yZXNldCgpO1xuICAgICAgICAgICAgJCh0aGlzKS51bndyYXAoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHNlbGYuJCgpLmNoYW5nZShmdW5jdGlvbiAoZSkge1xuICAgICAgICBteS5wdWJsaXNoQ2hhbmdlKGUsIHRoaXMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNlbGY7XG59O1xuXG52YXIgY3JlYXRlSW5wdXRNdWx0aXBsZVNlbGVjdCA9IGZ1bmN0aW9uIChmaWcpIHtcbiAgICB2YXIgbXkgPSB7fSxcbiAgICAgICAgc2VsZiA9IGNyZWF0ZUlucHV0KGZpZywgbXkpO1xuXG4gICAgc2VsZi5nZXRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJ3NlbGVjdFttdWx0aXBsZV0nO1xuICAgIH07XG5cbiAgICBzZWxmLmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHNlbGYuJCgpLnZhbCgpIHx8IFtdO1xuICAgIH07XG5cbiAgICBzZWxmLnNldCA9IGZ1bmN0aW9uIChuZXdWYWx1ZXMpIHtcbiAgICAgICAgc2VsZi4kKCkudmFsKFxuICAgICAgICAgICAgbmV3VmFsdWVzID09PSAnJyA/IFtdIDogaXNBcnJheShuZXdWYWx1ZXMpID8gbmV3VmFsdWVzIDogW25ld1ZhbHVlc11cbiAgICAgICAgKTtcbiAgICB9O1xuXG4gICAgbXkuZXF1YWxUbyA9IGlucHV0RXF1YWxUb0FycmF5O1xuXG4gICAgc2VsZi4kKCkuY2hhbmdlKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIG15LnB1Ymxpc2hDaGFuZ2UoZSwgdGhpcyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2VsZjtcbn07XG5cbnZhciBjcmVhdGVJbnB1dFBhc3N3b3JkID0gZnVuY3Rpb24gKGZpZykge1xuICAgIHZhciBteSA9IHt9LFxuICAgICAgICBzZWxmID0gY3JlYXRlSW5wdXRUZXh0KGZpZywgbXkpO1xuXG4gICAgc2VsZi5nZXRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJ3Bhc3N3b3JkJztcbiAgICB9O1xuXG4gICAgcmV0dXJuIHNlbGY7XG59O1xuXG52YXIgY3JlYXRlSW5wdXRSYWRpbyA9IGZ1bmN0aW9uIChmaWcpIHtcbiAgICB2YXIgbXkgPSB7fSxcbiAgICAgICAgc2VsZiA9IGNyZWF0ZUlucHV0KGZpZywgbXkpO1xuXG4gICAgc2VsZi5nZXRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJ3JhZGlvJztcbiAgICB9O1xuXG4gICAgc2VsZi5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBzZWxmLiQoKS5maWx0ZXIoJzpjaGVja2VkJykudmFsKCkgfHwgbnVsbDtcbiAgICB9O1xuXG4gICAgc2VsZi5zZXQgPSBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgaWYoIW5ld1ZhbHVlKSB7XG4gICAgICAgICAgICBzZWxmLiQoKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAkKHRoaXMpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNlbGYuJCgpLmZpbHRlcignW3ZhbHVlPVwiJyArIG5ld1ZhbHVlICsgJ1wiXScpLnByb3AoJ2NoZWNrZWQnLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBzZWxmLiQoKS5jaGFuZ2UoZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgbXkucHVibGlzaENoYW5nZShlLCB0aGlzKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBzZWxmO1xufTtcblxudmFyIGNyZWF0ZUlucHV0UmFuZ2UgPSBmdW5jdGlvbiAoZmlnKSB7XG4gICAgdmFyIG15ID0ge30sXG4gICAgICAgIHNlbGYgPSBjcmVhdGVJbnB1dChmaWcsIG15KTtcblxuICAgIHNlbGYuZ2V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICdyYW5nZSc7XG4gICAgfTtcblxuICAgIHNlbGYuJCgpLmNoYW5nZShmdW5jdGlvbiAoZSkge1xuICAgICAgICBteS5wdWJsaXNoQ2hhbmdlKGUsIHRoaXMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNlbGY7XG59O1xuXG52YXIgY3JlYXRlSW5wdXRTZWxlY3QgPSBmdW5jdGlvbiAoZmlnKSB7XG4gICAgdmFyIG15ID0ge30sXG4gICAgICAgIHNlbGYgPSBjcmVhdGVJbnB1dChmaWcsIG15KTtcblxuICAgIHNlbGYuZ2V0VHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICdzZWxlY3QnO1xuICAgIH07XG5cbiAgICBzZWxmLiQoKS5jaGFuZ2UoZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgbXkucHVibGlzaENoYW5nZShlLCB0aGlzKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBzZWxmO1xufTtcblxudmFyIGNyZWF0ZUlucHV0VGV4dCA9IGZ1bmN0aW9uIChmaWcpIHtcbiAgICB2YXIgbXkgPSB7fSxcbiAgICAgICAgc2VsZiA9IGNyZWF0ZUlucHV0KGZpZywgbXkpO1xuXG4gICAgc2VsZi5nZXRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJ3RleHQnO1xuICAgIH07XG5cbiAgICBzZWxmLiQoKS5vbignY2hhbmdlIGtleXVwIGtleWRvd24nLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICBteS5wdWJsaXNoQ2hhbmdlKGUsIHRoaXMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNlbGY7XG59O1xuXG52YXIgY3JlYXRlSW5wdXRUZXh0YXJlYSA9IGZ1bmN0aW9uIChmaWcpIHtcbiAgICB2YXIgbXkgPSB7fSxcbiAgICAgICAgc2VsZiA9IGNyZWF0ZUlucHV0KGZpZywgbXkpO1xuXG4gICAgc2VsZi5nZXRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJ3RleHRhcmVhJztcbiAgICB9O1xuXG4gICAgc2VsZi4kKCkub24oJ2NoYW5nZSBrZXl1cCBrZXlkb3duJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgbXkucHVibGlzaENoYW5nZShlLCB0aGlzKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBzZWxmO1xufTtcblxudmFyIGNyZWF0ZUlucHV0VVJMID0gZnVuY3Rpb24gKGZpZykge1xuICAgIHZhciBteSA9IHt9LFxuICAgICAgICBzZWxmID0gY3JlYXRlSW5wdXRUZXh0KGZpZywgbXkpO1xuXG4gICAgc2VsZi5nZXRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJ3VybCc7XG4gICAgfTtcblxuICAgIHJldHVybiBzZWxmO1xufTtcblxudmFyIGJ1aWxkRm9ybUlucHV0cyA9IGZ1bmN0aW9uIChmaWcpIHtcbiAgICB2YXIgaW5wdXRzID0ge30sXG4gICAgICAgICRzZWxmID0gZmlnLiQ7XG5cbiAgICB2YXIgY29uc3RydWN0b3IgPSBmaWcuY29uc3RydWN0b3JPdmVycmlkZSB8fCB7XG4gICAgICAgIGJ1dHRvbjogY3JlYXRlSW5wdXRCdXR0b24sXG4gICAgICAgIHRleHQ6IGNyZWF0ZUlucHV0VGV4dCxcbiAgICAgICAgdXJsOiBjcmVhdGVJbnB1dFVSTCxcbiAgICAgICAgZW1haWw6IGNyZWF0ZUlucHV0RW1haWwsXG4gICAgICAgIHBhc3N3b3JkOiBjcmVhdGVJbnB1dFBhc3N3b3JkLFxuICAgICAgICByYW5nZTogY3JlYXRlSW5wdXRSYW5nZSxcbiAgICAgICAgdGV4dGFyZWE6IGNyZWF0ZUlucHV0VGV4dGFyZWEsXG4gICAgICAgIHNlbGVjdDogY3JlYXRlSW5wdXRTZWxlY3QsXG4gICAgICAgICdzZWxlY3RbbXVsdGlwbGVdJzogY3JlYXRlSW5wdXRNdWx0aXBsZVNlbGVjdCxcbiAgICAgICAgcmFkaW86IGNyZWF0ZUlucHV0UmFkaW8sXG4gICAgICAgIGNoZWNrYm94OiBjcmVhdGVJbnB1dENoZWNrYm94LFxuICAgICAgICBmaWxlOiBjcmVhdGVJbnB1dEZpbGUsXG4gICAgICAgICdmaWxlW211bHRpcGxlXSc6IGNyZWF0ZUlucHV0TXVsdGlwbGVGaWxlLFxuICAgICAgICBoaWRkZW46IGNyZWF0ZUlucHV0SGlkZGVuXG4gICAgfTtcblxuICAgIHZhciBhZGRJbnB1dHNCYXNpYyA9IGZ1bmN0aW9uICh0eXBlLCBzZWxlY3Rvcikge1xuICAgICAgICB2YXIgJGlucHV0ID0gaXNPYmplY3Qoc2VsZWN0b3IpID8gc2VsZWN0b3IgOiAkc2VsZi5maW5kKHNlbGVjdG9yKTtcblxuICAgICAgICAkaW5wdXQuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9ICQodGhpcykuYXR0cignbmFtZScpO1xuICAgICAgICAgICAgaW5wdXRzW25hbWVdID0gY29uc3RydWN0b3JbdHlwZV0oe1xuICAgICAgICAgICAgICAgICQ6ICQodGhpcylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgdmFyIGFkZElucHV0c0dyb3VwID0gZnVuY3Rpb24gKHR5cGUsIHNlbGVjdG9yKSB7XG4gICAgICAgIHZhciBuYW1lcyA9IFtdLFxuICAgICAgICAgICAgJGlucHV0ID0gaXNPYmplY3Qoc2VsZWN0b3IpID8gc2VsZWN0b3IgOiAkc2VsZi5maW5kKHNlbGVjdG9yKTtcblxuICAgICAgICBpZihpc09iamVjdChzZWxlY3RvcikpIHtcbiAgICAgICAgICAgIGlucHV0c1skaW5wdXQuYXR0cignbmFtZScpXSA9IGNvbnN0cnVjdG9yW3R5cGVdKHtcbiAgICAgICAgICAgICAgICAkOiAkaW5wdXRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gZ3JvdXAgYnkgbmFtZSBhdHRyaWJ1dGVcbiAgICAgICAgICAgICRpbnB1dC5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZihpbmRleE9mKG5hbWVzLCAkKHRoaXMpLmF0dHIoJ25hbWUnKSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWVzLnB1c2goJCh0aGlzKS5hdHRyKCduYW1lJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBmb3JlYWNoKG5hbWVzLCBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgICAgICAgIGlucHV0c1tuYW1lXSA9IGNvbnN0cnVjdG9yW3R5cGVdKHtcbiAgICAgICAgICAgICAgICAgICAgJDogJHNlbGYuZmluZCgnaW5wdXRbbmFtZT1cIicgKyBuYW1lICsgJ1wiXScpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cblxuICAgIGlmKCRzZWxmLmlzKCdpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYScpKSB7XG4gICAgICAgIGlmKCRzZWxmLmlzKCdpbnB1dFt0eXBlPVwiYnV0dG9uXCJdLCBidXR0b24sIGlucHV0W3R5cGU9XCJzdWJtaXRcIl0nKSkge1xuICAgICAgICAgICAgYWRkSW5wdXRzQmFzaWMoJ2J1dHRvbicsICRzZWxmKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKCRzZWxmLmlzKCd0ZXh0YXJlYScpKSB7XG4gICAgICAgICAgICBhZGRJbnB1dHNCYXNpYygndGV4dGFyZWEnLCAkc2VsZik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihcbiAgICAgICAgICAgICRzZWxmLmlzKCdpbnB1dFt0eXBlPVwidGV4dFwiXScpIHx8XG4gICAgICAgICAgICAkc2VsZi5pcygnaW5wdXQnKSAmJiAhJHNlbGYuYXR0cigndHlwZScpXG4gICAgICAgICkge1xuICAgICAgICAgICAgYWRkSW5wdXRzQmFzaWMoJ3RleHQnLCAkc2VsZik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZigkc2VsZi5pcygnaW5wdXRbdHlwZT1cInBhc3N3b3JkXCJdJykpIHtcbiAgICAgICAgICAgIGFkZElucHV0c0Jhc2ljKCdwYXNzd29yZCcsICRzZWxmKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKCRzZWxmLmlzKCdpbnB1dFt0eXBlPVwiZW1haWxcIl0nKSkge1xuICAgICAgICAgICAgYWRkSW5wdXRzQmFzaWMoJ2VtYWlsJywgJHNlbGYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYoJHNlbGYuaXMoJ2lucHV0W3R5cGU9XCJ1cmxcIl0nKSkge1xuICAgICAgICAgICAgYWRkSW5wdXRzQmFzaWMoJ3VybCcsICRzZWxmKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKCRzZWxmLmlzKCdpbnB1dFt0eXBlPVwicmFuZ2VcIl0nKSkge1xuICAgICAgICAgICAgYWRkSW5wdXRzQmFzaWMoJ3JhbmdlJywgJHNlbGYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYoJHNlbGYuaXMoJ3NlbGVjdCcpKSB7XG4gICAgICAgICAgICBpZigkc2VsZi5pcygnW211bHRpcGxlXScpKSB7XG4gICAgICAgICAgICAgICAgYWRkSW5wdXRzQmFzaWMoJ3NlbGVjdFttdWx0aXBsZV0nLCAkc2VsZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhZGRJbnB1dHNCYXNpYygnc2VsZWN0JywgJHNlbGYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYoJHNlbGYuaXMoJ2lucHV0W3R5cGU9XCJmaWxlXCJdJykpIHtcbiAgICAgICAgICAgIGlmKCRzZWxmLmlzKCdbbXVsdGlwbGVdJykpIHtcbiAgICAgICAgICAgICAgICBhZGRJbnB1dHNCYXNpYygnZmlsZVttdWx0aXBsZV0nLCAkc2VsZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhZGRJbnB1dHNCYXNpYygnZmlsZScsICRzZWxmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKCRzZWxmLmlzKCdpbnB1dFt0eXBlPVwiaGlkZGVuXCJdJykpIHtcbiAgICAgICAgICAgIGFkZElucHV0c0Jhc2ljKCdoaWRkZW4nLCAkc2VsZik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZigkc2VsZi5pcygnaW5wdXRbdHlwZT1cInJhZGlvXCJdJykpIHtcbiAgICAgICAgICAgIGFkZElucHV0c0dyb3VwKCdyYWRpbycsICRzZWxmKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKCRzZWxmLmlzKCdpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nKSkge1xuICAgICAgICAgICAgYWRkSW5wdXRzR3JvdXAoJ2NoZWNrYm94JywgJHNlbGYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy9pbiBhbGwgb3RoZXIgY2FzZXMgZGVmYXVsdCB0byBhIFwidGV4dFwiIGlucHV0IGludGVyZmFjZS5cbiAgICAgICAgICAgIGFkZElucHV0c0Jhc2ljKCd0ZXh0JywgJHNlbGYpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBhZGRJbnB1dHNCYXNpYygnYnV0dG9uJywgJ2lucHV0W3R5cGU9XCJidXR0b25cIl0sIGJ1dHRvbiwgaW5wdXRbdHlwZT1cInN1Ym1pdFwiXScpO1xuICAgICAgICBhZGRJbnB1dHNCYXNpYygndGV4dCcsICdpbnB1dFt0eXBlPVwidGV4dFwiXScpO1xuICAgICAgICBhZGRJbnB1dHNCYXNpYygncGFzc3dvcmQnLCAnaW5wdXRbdHlwZT1cInBhc3N3b3JkXCJdJyk7XG4gICAgICAgIGFkZElucHV0c0Jhc2ljKCdlbWFpbCcsICdpbnB1dFt0eXBlPVwiZW1haWxcIl0nKTtcbiAgICAgICAgYWRkSW5wdXRzQmFzaWMoJ3VybCcsICdpbnB1dFt0eXBlPVwidXJsXCJdJyk7XG4gICAgICAgIGFkZElucHV0c0Jhc2ljKCdyYW5nZScsICdpbnB1dFt0eXBlPVwicmFuZ2VcIl0nKTtcbiAgICAgICAgYWRkSW5wdXRzQmFzaWMoJ3RleHRhcmVhJywgJ3RleHRhcmVhJyk7XG4gICAgICAgIGFkZElucHV0c0Jhc2ljKCdzZWxlY3QnLCAnc2VsZWN0Om5vdChbbXVsdGlwbGVdKScpO1xuICAgICAgICBhZGRJbnB1dHNCYXNpYygnc2VsZWN0W211bHRpcGxlXScsICdzZWxlY3RbbXVsdGlwbGVdJyk7XG4gICAgICAgIGFkZElucHV0c0Jhc2ljKCdmaWxlJywgJ2lucHV0W3R5cGU9XCJmaWxlXCJdOm5vdChbbXVsdGlwbGVdKScpO1xuICAgICAgICBhZGRJbnB1dHNCYXNpYygnZmlsZVttdWx0aXBsZV0nLCAnaW5wdXRbdHlwZT1cImZpbGVcIl1bbXVsdGlwbGVdJyk7XG4gICAgICAgIGFkZElucHV0c0Jhc2ljKCdoaWRkZW4nLCAnaW5wdXRbdHlwZT1cImhpZGRlblwiXScpO1xuICAgICAgICBhZGRJbnB1dHNHcm91cCgncmFkaW8nLCAnaW5wdXRbdHlwZT1cInJhZGlvXCJdJyk7XG4gICAgICAgIGFkZElucHV0c0dyb3VwKCdjaGVja2JveCcsICdpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5wdXRzO1xufTtcblxuJC5mbi5pbnB1dFZhbCA9IGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgIHZhciAkc2VsZiA9ICQodGhpcyk7XG5cbiAgICB2YXIgaW5wdXRzID0gYnVpbGRGb3JtSW5wdXRzKHsgJDogJHNlbGYgfSk7XG5cbiAgICBpZigkc2VsZi5pcygnaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QnKSkge1xuICAgICAgICBpZih0eXBlb2YgbmV3VmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXRzWyRzZWxmLmF0dHIoJ25hbWUnKV0uZ2V0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpbnB1dHNbJHNlbGYuYXR0cignbmFtZScpXS5zZXQobmV3VmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuICRzZWxmO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZih0eXBlb2YgbmV3VmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbChpbnB1dHMsICdnZXQnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvcmVhY2gobmV3VmFsdWUsIGZ1bmN0aW9uICh2YWx1ZSwgaW5wdXROYW1lKSB7XG4gICAgICAgICAgICAgICAgaW5wdXRzW2lucHV0TmFtZV0uc2V0KHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuICRzZWxmO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuJC5mbi5pbnB1dE9uQ2hhbmdlID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyICRzZWxmID0gJCh0aGlzKTtcbiAgICB2YXIgaW5wdXRzID0gYnVpbGRGb3JtSW5wdXRzKHsgJDogJHNlbGYgfSk7XG4gICAgZm9yZWFjaChpbnB1dHMsIGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICBpbnB1dC5zdWJzY3JpYmUoJ2NoYW5nZScsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICBjYWxsYmFjay5jYWxsKGRhdGEuZG9tRWxlbWVudCwgZGF0YS5lKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuICRzZWxmO1xufTtcblxuJC5mbi5pbnB1dERpc2FibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyICRzZWxmID0gJCh0aGlzKTtcbiAgICBjYWxsKGJ1aWxkRm9ybUlucHV0cyh7ICQ6ICRzZWxmIH0pLCAnZGlzYWJsZScpO1xuICAgIHJldHVybiAkc2VsZjtcbn07XG5cbiQuZm4uaW5wdXRFbmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyICRzZWxmID0gJCh0aGlzKTtcbiAgICBjYWxsKGJ1aWxkRm9ybUlucHV0cyh7ICQ6ICRzZWxmIH0pLCAnZW5hYmxlJyk7XG4gICAgcmV0dXJuICRzZWxmO1xufTtcblxuJC5mbi5pbnB1dENsZWFyID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciAkc2VsZiA9ICQodGhpcyk7XG4gICAgY2FsbChidWlsZEZvcm1JbnB1dHMoeyAkOiAkc2VsZiB9KSwgJ2NsZWFyJyk7XG4gICAgcmV0dXJuICRzZWxmO1xufTtcblxufShqUXVlcnkpKTtcblxuJC5mbi5yZXBlYXRlclZhbCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyc2UgPSBmdW5jdGlvbiAocmF3KSB7XG4gICAgICAgIHZhciBwYXJzZWQgPSBbXTtcblxuICAgICAgICBmb3JlYWNoKHJhdywgZnVuY3Rpb24gKHZhbCwga2V5KSB7XG4gICAgICAgICAgICB2YXIgcGFyc2VkS2V5ID0gW107XG4gICAgICAgICAgICBpZihrZXkgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICBwYXJzZWRLZXkucHVzaChrZXkubWF0Y2goL15bXlxcW10qLylbMF0pO1xuICAgICAgICAgICAgICAgIHBhcnNlZEtleSA9IHBhcnNlZEtleS5jb25jYXQobWFwKFxuICAgICAgICAgICAgICAgICAgICBrZXkubWF0Y2goL1xcW1teXFxdXSpcXF0vZyksXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChicmFja2V0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBicmFja2V0ZWQucmVwbGFjZSgvW1xcW1xcXV0vZywgJycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKSk7XG5cbiAgICAgICAgICAgICAgICBwYXJzZWQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHZhbDogdmFsLFxuICAgICAgICAgICAgICAgICAgICBrZXk6IHBhcnNlZEtleVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgIH07XG5cbiAgICB2YXIgYnVpbGQgPSBmdW5jdGlvbiAocGFyc2VkKSB7XG4gICAgICAgIGlmKFxuICAgICAgICAgICAgcGFyc2VkLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgICAgKHBhcnNlZFswXS5rZXkubGVuZ3RoID09PSAwIHx8IHBhcnNlZFswXS5rZXkubGVuZ3RoID09PSAxICYmICFwYXJzZWRbMF0ua2V5WzBdKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZWRbMF0udmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yZWFjaChwYXJzZWQsIGZ1bmN0aW9uIChwKSB7XG4gICAgICAgICAgICBwLmhlYWQgPSBwLmtleS5zaGlmdCgpO1xuICAgICAgICB9KTtcblxuICAgICAgICB2YXIgZ3JvdXBlZCA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZ3JvdXBlZCA9IHt9O1xuXG4gICAgICAgICAgICBmb3JlYWNoKHBhcnNlZCwgZnVuY3Rpb24gKHApIHtcbiAgICAgICAgICAgICAgICBpZighZ3JvdXBlZFtwLmhlYWRdKSB7XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwZWRbcC5oZWFkXSA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBncm91cGVkW3AuaGVhZF0ucHVzaChwKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gZ3JvdXBlZDtcbiAgICAgICAgfSgpKTtcblxuICAgICAgICB2YXIgYnVpbHQ7XG5cbiAgICAgICAgaWYoL15bMC05XSskLy50ZXN0KHBhcnNlZFswXS5oZWFkKSkge1xuICAgICAgICAgICAgYnVpbHQgPSBbXTtcbiAgICAgICAgICAgIGZvcmVhY2goZ3JvdXBlZCwgZnVuY3Rpb24gKGdyb3VwKSB7XG4gICAgICAgICAgICAgICAgYnVpbHQucHVzaChidWlsZChncm91cCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBidWlsdCA9IHt9O1xuICAgICAgICAgICAgZm9yZWFjaChncm91cGVkLCBmdW5jdGlvbiAoZ3JvdXAsIGtleSkge1xuICAgICAgICAgICAgICAgIGJ1aWx0W2tleV0gPSBidWlsZChncm91cCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBidWlsdDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGJ1aWxkKHBhcnNlKCQodGhpcykuaW5wdXRWYWwoKSkpO1xufTtcblxuJC5mbi5yZXBlYXRlciA9IGZ1bmN0aW9uIChmaWcpIHtcbiAgICBmaWcgPSBmaWcgfHwge307XG5cbiAgICB2YXIgc2V0TGlzdDtcblxuICAgICQodGhpcykuZWFjaChmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgdmFyICRzZWxmID0gJCh0aGlzKTtcblxuICAgICAgICB2YXIgc2hvdyA9IGZpZy5zaG93IHx8IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICQodGhpcykuc2hvdygpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBoaWRlID0gZmlnLmhpZGUgfHwgZnVuY3Rpb24gKHJlbW92ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJlbW92ZUVsZW1lbnQoKTtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgJGxpc3QgPSAkc2VsZi5maW5kKCdbZGF0YS1yZXBlYXRlci1saXN0XScpLmZpcnN0KCk7XG5cbiAgICAgICAgdmFyICRmaWx0ZXJOZXN0ZWQgPSBmdW5jdGlvbiAoJGl0ZW1zLCByZXBlYXRlcnMpIHtcbiAgICAgICAgICAgIHJldHVybiAkaXRlbXMuZmlsdGVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVwZWF0ZXJzID9cbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KFxuICAgICAgICAgICAgICAgICAgICAgICAgcGx1Y2socmVwZWF0ZXJzLCAnc2VsZWN0b3InKS5qb2luKCcsJylcbiAgICAgICAgICAgICAgICAgICAgKS5sZW5ndGggPT09IDAgOiB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyICRpdGVtcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAkZmlsdGVyTmVzdGVkKCRsaXN0LmZpbmQoJ1tkYXRhLXJlcGVhdGVyLWl0ZW1dJyksIGZpZy5yZXBlYXRlcnMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHZhciAkaXRlbVRlbXBsYXRlID0gJGxpc3QuZmluZCgnW2RhdGEtcmVwZWF0ZXItaXRlbV0nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpcnN0KCkuY2xvbmUoKS5oaWRlKCk7XG5cbiAgICAgICAgdmFyICRmaXJzdERlbGV0ZUJ1dHRvbiA9ICRmaWx0ZXJOZXN0ZWQoXG4gICAgICAgICAgICAkZmlsdGVyTmVzdGVkKCQodGhpcykuZmluZCgnW2RhdGEtcmVwZWF0ZXItaXRlbV0nKSwgZmlnLnJlcGVhdGVycylcbiAgICAgICAgICAgIC5maXJzdCgpLmZpbmQoJ1tkYXRhLXJlcGVhdGVyLWRlbGV0ZV0nKSxcbiAgICAgICAgICAgIGZpZy5yZXBlYXRlcnNcbiAgICAgICAgKTtcblxuICAgICAgICBpZihmaWcuaXNGaXJzdEl0ZW1VbmRlbGV0YWJsZSAmJiAkZmlyc3REZWxldGVCdXR0b24pIHtcbiAgICAgICAgICAgICRmaXJzdERlbGV0ZUJ1dHRvbi5yZW1vdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBnZXRHcm91cE5hbWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZ3JvdXBOYW1lID0gJGxpc3QuZGF0YSgncmVwZWF0ZXItbGlzdCcpO1xuICAgICAgICAgICAgcmV0dXJuIGZpZy4kcGFyZW50ID9cbiAgICAgICAgICAgICAgICBmaWcuJHBhcmVudC5kYXRhKCdpdGVtLW5hbWUnKSArICdbJyArIGdyb3VwTmFtZSArICddJyA6XG4gICAgICAgICAgICAgICAgZ3JvdXBOYW1lO1xuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBpbml0TmVzdGVkID0gZnVuY3Rpb24gKCRsaXN0SXRlbXMpIHtcbiAgICAgICAgICAgIGlmKGZpZy5yZXBlYXRlcnMpIHtcbiAgICAgICAgICAgICAgICAkbGlzdEl0ZW1zLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgJGl0ZW0gPSAkKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKGZpZy5yZXBlYXRlcnMsIGZ1bmN0aW9uIChuZXN0ZWRGaWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRpdGVtLmZpbmQobmVzdGVkRmlnLnNlbGVjdG9yKS5yZXBlYXRlcihleHRlbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVzdGVkRmlnLCB7ICRwYXJlbnQ6ICRpdGVtIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgJGZvcmVhY2hSZXBlYXRlckluSXRlbSA9IGZ1bmN0aW9uIChyZXBlYXRlcnMsICRpdGVtLCBjYikge1xuICAgICAgICAgICAgaWYocmVwZWF0ZXJzKSB7XG4gICAgICAgICAgICAgICAgZm9yZWFjaChyZXBlYXRlcnMsIGZ1bmN0aW9uIChuZXN0ZWRGaWcpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IuY2FsbCgkaXRlbS5maW5kKG5lc3RlZEZpZy5zZWxlY3RvcilbMF0sIG5lc3RlZEZpZyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIHNldEluZGV4ZXMgPSBmdW5jdGlvbiAoJGl0ZW1zLCBncm91cE5hbWUsIHJlcGVhdGVycykge1xuICAgICAgICAgICAgJGl0ZW1zLmVhY2goZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICAgICAgdmFyICRpdGVtID0gJCh0aGlzKTtcbiAgICAgICAgICAgICAgICAkaXRlbS5kYXRhKCdpdGVtLW5hbWUnLCBncm91cE5hbWUgKyAnWycgKyBpbmRleCArICddJyk7XG4gICAgICAgICAgICAgICAgJGZpbHRlck5lc3RlZCgkaXRlbS5maW5kKCdbbmFtZV0nKSwgcmVwZWF0ZXJzKVxuICAgICAgICAgICAgICAgIC5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRpbnB1dCA9ICQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoIG5vbiBlbXB0eSBicmFja2V0cyAoZXg6IFwiW2Zvb11cIilcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoZXMgPSAkaW5wdXQuYXR0cignbmFtZScpLm1hdGNoKC9cXFtbXlxcXV0rXFxdL2cpO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gbWF0Y2hlcyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzdHJpcCBcIltcIiBhbmQgXCJdXCIgY2hhcmFjdGVyc1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdChtYXRjaGVzKS5yZXBsYWNlKC9cXFt8XFxdL2csICcnKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAkaW5wdXQuYXR0cignbmFtZScpO1xuXG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIG5ld05hbWUgPSBncm91cE5hbWUgKyAnWycgKyBpbmRleCArICddWycgKyBuYW1lICsgJ10nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICgkaW5wdXQuaXMoJzpjaGVja2JveCcpIHx8ICRpbnB1dC5hdHRyKCdtdWx0aXBsZScpID8gJ1tdJyA6ICcnKTtcblxuICAgICAgICAgICAgICAgICAgICAkaW5wdXQuYXR0cignbmFtZScsIG5ld05hbWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICRmb3JlYWNoUmVwZWF0ZXJJbkl0ZW0ocmVwZWF0ZXJzLCAkaXRlbSwgZnVuY3Rpb24gKG5lc3RlZEZpZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRyZXBlYXRlciA9ICQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRJbmRleGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmaWx0ZXJOZXN0ZWQoJHJlcGVhdGVyLmZpbmQoJ1tkYXRhLXJlcGVhdGVyLWl0ZW1dJyksIG5lc3RlZEZpZy5yZXBlYXRlcnMgfHwgW10pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwTmFtZSArICdbJyArIGluZGV4ICsgJ10nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWycgKyAkcmVwZWF0ZXIuZmluZCgnW2RhdGEtcmVwZWF0ZXItbGlzdF0nKS5maXJzdCgpLmRhdGEoJ3JlcGVhdGVyLWxpc3QnKSArICddJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXN0ZWRGaWcucmVwZWF0ZXJzXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAkbGlzdC5maW5kKCdpbnB1dFtuYW1lXVtjaGVja2VkXScpXG4gICAgICAgICAgICAgICAgLnJlbW92ZUF0dHIoJ2NoZWNrZWQnKVxuICAgICAgICAgICAgICAgIC5wcm9wKCdjaGVja2VkJywgdHJ1ZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc2V0SW5kZXhlcygkaXRlbXMoKSwgZ2V0R3JvdXBOYW1lKCksIGZpZy5yZXBlYXRlcnMpO1xuICAgICAgICBpbml0TmVzdGVkKCRpdGVtcygpKTtcbiAgICAgICAgaWYoZmlnLmluaXRFbXB0eSkge1xuICAgICAgICAgICAgJGl0ZW1zKCkucmVtb3ZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZihmaWcucmVhZHkpIHtcbiAgICAgICAgICAgIGZpZy5yZWFkeShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc2V0SW5kZXhlcygkaXRlbXMoKSwgZ2V0R3JvdXBOYW1lKCksIGZpZy5yZXBlYXRlcnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYXBwZW5kSXRlbSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgc2V0SXRlbXNWYWx1ZXMgPSBmdW5jdGlvbiAoJGl0ZW0sIGRhdGEsIHJlcGVhdGVycykge1xuICAgICAgICAgICAgICAgIGlmKGRhdGEgfHwgZmlnLmRlZmF1bHRWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0TmFtZXMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgJGZpbHRlck5lc3RlZCgkaXRlbS5maW5kKCdbbmFtZV0nKSwgcmVwZWF0ZXJzKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSAkKHRoaXMpLmF0dHIoJ25hbWUnKS5tYXRjaCgvXFxbKFteXFxdXSopKFxcXXxcXF1cXFtcXF0pJC8pWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXROYW1lc1trZXldID0gJCh0aGlzKS5hdHRyKCduYW1lJyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICRpdGVtLmlucHV0VmFsKG1hcChcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihkYXRhIHx8IGZpZy5kZWZhdWx0VmFsdWVzLCBmdW5jdGlvbiAodmFsLCBuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0TmFtZXNbbmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXROYW1lc1tuYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAkZm9yZWFjaFJlcGVhdGVySW5JdGVtKHJlcGVhdGVycywgJGl0ZW0sIGZ1bmN0aW9uIChuZXN0ZWRGaWcpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRyZXBlYXRlciA9ICQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICRmaWx0ZXJOZXN0ZWQoXG4gICAgICAgICAgICAgICAgICAgICAgICAkcmVwZWF0ZXIuZmluZCgnW2RhdGEtcmVwZWF0ZXItaXRlbV0nKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5lc3RlZEZpZy5yZXBlYXRlcnNcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmllbGROYW1lID0gJHJlcGVhdGVyLmZpbmQoJ1tkYXRhLXJlcGVhdGVyLWxpc3RdJykuZGF0YSgncmVwZWF0ZXItbGlzdCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGF0YSAmJiBkYXRhW2ZpZWxkTmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgJHRlbXBsYXRlID0gJCh0aGlzKS5jbG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZXBlYXRlci5maW5kKCdbZGF0YS1yZXBlYXRlci1pdGVtXScpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2goZGF0YVtmaWVsZE5hbWVdLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgJGl0ZW0gPSAkdGVtcGxhdGUuY2xvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbXNWYWx1ZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXN0ZWRGaWcucmVwZWF0ZXJzIHx8IFtdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZXBlYXRlci5maW5kKCdbZGF0YS1yZXBlYXRlci1saXN0XScpLmFwcGVuZCgkaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJdGVtc1ZhbHVlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVzdGVkRmlnLmRlZmF1bHRWYWx1ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lc3RlZEZpZy5yZXBlYXRlcnMgfHwgW11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgkaXRlbSwgZGF0YSkge1xuICAgICAgICAgICAgICAgICRsaXN0LmFwcGVuZCgkaXRlbSk7XG4gICAgICAgICAgICAgICAgc2V0SW5kZXhlcygkaXRlbXMoKSwgZ2V0R3JvdXBOYW1lKCksIGZpZy5yZXBlYXRlcnMpO1xuICAgICAgICAgICAgICAgICRpdGVtLmZpbmQoJ1tuYW1lXScpLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmlucHV0Q2xlYXIoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzZXRJdGVtc1ZhbHVlcygkaXRlbSwgZGF0YSB8fCBmaWcuZGVmYXVsdFZhbHVlcywgZmlnLnJlcGVhdGVycyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KCkpO1xuXG4gICAgICAgIHZhciBhZGRJdGVtID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgIHZhciAkaXRlbSA9ICRpdGVtVGVtcGxhdGUuY2xvbmUoKTtcbiAgICAgICAgICAgIGFwcGVuZEl0ZW0oJGl0ZW0sIGRhdGEpO1xuICAgICAgICAgICAgaWYoZmlnLnJlcGVhdGVycykge1xuICAgICAgICAgICAgICAgIGluaXROZXN0ZWQoJGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2hvdy5jYWxsKCRpdGVtLmdldCgwKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc2V0TGlzdCA9IGZ1bmN0aW9uIChyb3dzKSB7XG4gICAgICAgICAgICAkaXRlbXMoKS5yZW1vdmUoKTtcbiAgICAgICAgICAgIGZvcmVhY2gocm93cywgYWRkSXRlbSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgJGZpbHRlck5lc3RlZCgkc2VsZi5maW5kKCdbZGF0YS1yZXBlYXRlci1jcmVhdGVdJyksIGZpZy5yZXBlYXRlcnMpLmNsaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGFkZEl0ZW0oKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJGxpc3Qub24oJ2NsaWNrJywgJ1tkYXRhLXJlcGVhdGVyLWRlbGV0ZV0nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgc2VsZiA9ICQodGhpcykuY2xvc2VzdCgnW2RhdGEtcmVwZWF0ZXItaXRlbV0nKS5nZXQoMCk7XG4gICAgICAgICAgICBoaWRlLmNhbGwoc2VsZiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICQoc2VsZikucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgc2V0SW5kZXhlcygkaXRlbXMoKSwgZ2V0R3JvdXBOYW1lKCksIGZpZy5yZXBlYXRlcnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5zZXRMaXN0ID0gc2V0TGlzdDtcblxuICAgIHJldHVybiB0aGlzO1xufTtcblxufShqUXVlcnkpKTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9ub2RlX21vZHVsZXMvanF1ZXJ5LnJlcGVhdGVyL2pxdWVyeS5yZXBlYXRlci5qcyIsIi8qIGZsYXRwaWNrciB2NC42LjIsIEBsaWNlbnNlIE1JVCAqL1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcbiAgICAoZ2xvYmFsID0gZ2xvYmFsIHx8IHNlbGYsIGdsb2JhbC5mbGF0cGlja3IgPSBmYWN0b3J5KCkpO1xufSh0aGlzLCBmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gICAgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2VcclxuICAgIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlXHJcbiAgICBMaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG5cclxuICAgIFRISVMgQ09ERSBJUyBQUk9WSURFRCBPTiBBTiAqQVMgSVMqIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcclxuICAgIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRURcclxuICAgIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsXHJcbiAgICBNRVJDSEFOVEFCTElUWSBPUiBOT04tSU5GUklOR0VNRU5ULlxyXG5cclxuICAgIFNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xyXG4gICAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxyXG4gICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuXHJcbiAgICB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0O1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICB9O1xuXG4gICAgdmFyIEhPT0tTID0gW1xuICAgICAgICBcIm9uQ2hhbmdlXCIsXG4gICAgICAgIFwib25DbG9zZVwiLFxuICAgICAgICBcIm9uRGF5Q3JlYXRlXCIsXG4gICAgICAgIFwib25EZXN0cm95XCIsXG4gICAgICAgIFwib25LZXlEb3duXCIsXG4gICAgICAgIFwib25Nb250aENoYW5nZVwiLFxuICAgICAgICBcIm9uT3BlblwiLFxuICAgICAgICBcIm9uUGFyc2VDb25maWdcIixcbiAgICAgICAgXCJvblJlYWR5XCIsXG4gICAgICAgIFwib25WYWx1ZVVwZGF0ZVwiLFxuICAgICAgICBcIm9uWWVhckNoYW5nZVwiLFxuICAgICAgICBcIm9uUHJlQ2FsZW5kYXJQb3NpdGlvblwiLFxuICAgIF07XG4gICAgdmFyIGRlZmF1bHRzID0ge1xuICAgICAgICBfZGlzYWJsZTogW10sXG4gICAgICAgIF9lbmFibGU6IFtdLFxuICAgICAgICBhbGxvd0lucHV0OiBmYWxzZSxcbiAgICAgICAgYWx0Rm9ybWF0OiBcIkYgaiwgWVwiLFxuICAgICAgICBhbHRJbnB1dDogZmFsc2UsXG4gICAgICAgIGFsdElucHV0Q2xhc3M6IFwiZm9ybS1jb250cm9sIGlucHV0XCIsXG4gICAgICAgIGFuaW1hdGU6IHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoXCJNU0lFXCIpID09PSAtMSxcbiAgICAgICAgYXJpYURhdGVGb3JtYXQ6IFwiRiBqLCBZXCIsXG4gICAgICAgIGNsaWNrT3BlbnM6IHRydWUsXG4gICAgICAgIGNsb3NlT25TZWxlY3Q6IHRydWUsXG4gICAgICAgIGNvbmp1bmN0aW9uOiBcIiwgXCIsXG4gICAgICAgIGRhdGVGb3JtYXQ6IFwiWS1tLWRcIixcbiAgICAgICAgZGVmYXVsdEhvdXI6IDEyLFxuICAgICAgICBkZWZhdWx0TWludXRlOiAwLFxuICAgICAgICBkZWZhdWx0U2Vjb25kczogMCxcbiAgICAgICAgZGlzYWJsZTogW10sXG4gICAgICAgIGRpc2FibGVNb2JpbGU6IGZhbHNlLFxuICAgICAgICBlbmFibGU6IFtdLFxuICAgICAgICBlbmFibGVTZWNvbmRzOiBmYWxzZSxcbiAgICAgICAgZW5hYmxlVGltZTogZmFsc2UsXG4gICAgICAgIGVycm9ySGFuZGxlcjogZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnNvbGUud2FybihlcnIpO1xuICAgICAgICB9LFxuICAgICAgICBnZXRXZWVrOiBmdW5jdGlvbiAoZ2l2ZW5EYXRlKSB7XG4gICAgICAgICAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKGdpdmVuRGF0ZS5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICAgICAgICAgIC8vIFRodXJzZGF5IGluIGN1cnJlbnQgd2VlayBkZWNpZGVzIHRoZSB5ZWFyLlxuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgMyAtICgoZGF0ZS5nZXREYXkoKSArIDYpICUgNykpO1xuICAgICAgICAgICAgLy8gSmFudWFyeSA0IGlzIGFsd2F5cyBpbiB3ZWVrIDEuXG4gICAgICAgICAgICB2YXIgd2VlazEgPSBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIDAsIDQpO1xuICAgICAgICAgICAgLy8gQWRqdXN0IHRvIFRodXJzZGF5IGluIHdlZWsgMSBhbmQgY291bnQgbnVtYmVyIG9mIHdlZWtzIGZyb20gZGF0ZSB0byB3ZWVrMS5cbiAgICAgICAgICAgIHJldHVybiAoMSArXG4gICAgICAgICAgICAgICAgTWF0aC5yb3VuZCgoKGRhdGUuZ2V0VGltZSgpIC0gd2VlazEuZ2V0VGltZSgpKSAvIDg2NDAwMDAwIC1cbiAgICAgICAgICAgICAgICAgICAgMyArXG4gICAgICAgICAgICAgICAgICAgICgod2VlazEuZ2V0RGF5KCkgKyA2KSAlIDcpKSAvXG4gICAgICAgICAgICAgICAgICAgIDcpKTtcbiAgICAgICAgfSxcbiAgICAgICAgaG91ckluY3JlbWVudDogMSxcbiAgICAgICAgaWdub3JlZEZvY3VzRWxlbWVudHM6IFtdLFxuICAgICAgICBpbmxpbmU6IGZhbHNlLFxuICAgICAgICBsb2NhbGU6IFwiZGVmYXVsdFwiLFxuICAgICAgICBtaW51dGVJbmNyZW1lbnQ6IDUsXG4gICAgICAgIG1vZGU6IFwic2luZ2xlXCIsXG4gICAgICAgIG1vbnRoU2VsZWN0b3JUeXBlOiBcImRyb3Bkb3duXCIsXG4gICAgICAgIG5leHRBcnJvdzogXCI8c3ZnIHZlcnNpb249JzEuMScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB4bWxuczp4bGluaz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycgdmlld0JveD0nMCAwIDE3IDE3Jz48Zz48L2c+PHBhdGggZD0nTTEzLjIwNyA4LjQ3MmwtNy44NTQgNy44NTQtMC43MDctMC43MDcgNy4xNDYtNy4xNDYtNy4xNDYtNy4xNDggMC43MDctMC43MDcgNy44NTQgNy44NTR6JyAvPjwvc3ZnPlwiLFxuICAgICAgICBub0NhbGVuZGFyOiBmYWxzZSxcbiAgICAgICAgbm93OiBuZXcgRGF0ZSgpLFxuICAgICAgICBvbkNoYW5nZTogW10sXG4gICAgICAgIG9uQ2xvc2U6IFtdLFxuICAgICAgICBvbkRheUNyZWF0ZTogW10sXG4gICAgICAgIG9uRGVzdHJveTogW10sXG4gICAgICAgIG9uS2V5RG93bjogW10sXG4gICAgICAgIG9uTW9udGhDaGFuZ2U6IFtdLFxuICAgICAgICBvbk9wZW46IFtdLFxuICAgICAgICBvblBhcnNlQ29uZmlnOiBbXSxcbiAgICAgICAgb25SZWFkeTogW10sXG4gICAgICAgIG9uVmFsdWVVcGRhdGU6IFtdLFxuICAgICAgICBvblllYXJDaGFuZ2U6IFtdLFxuICAgICAgICBvblByZUNhbGVuZGFyUG9zaXRpb246IFtdLFxuICAgICAgICBwbHVnaW5zOiBbXSxcbiAgICAgICAgcG9zaXRpb246IFwiYXV0b1wiLFxuICAgICAgICBwb3NpdGlvbkVsZW1lbnQ6IHVuZGVmaW5lZCxcbiAgICAgICAgcHJldkFycm93OiBcIjxzdmcgdmVyc2lvbj0nMS4xJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyB2aWV3Qm94PScwIDAgMTcgMTcnPjxnPjwvZz48cGF0aCBkPSdNNS4yMDcgOC40NzFsNy4xNDYgNy4xNDctMC43MDcgMC43MDctNy44NTMtNy44NTQgNy44NTQtNy44NTMgMC43MDcgMC43MDctNy4xNDcgNy4xNDZ6JyAvPjwvc3ZnPlwiLFxuICAgICAgICBzaG9ydGhhbmRDdXJyZW50TW9udGg6IGZhbHNlLFxuICAgICAgICBzaG93TW9udGhzOiAxLFxuICAgICAgICBzdGF0aWM6IGZhbHNlLFxuICAgICAgICB0aW1lXzI0aHI6IGZhbHNlLFxuICAgICAgICB3ZWVrTnVtYmVyczogZmFsc2UsXG4gICAgICAgIHdyYXA6IGZhbHNlXG4gICAgfTtcblxuICAgIHZhciBlbmdsaXNoID0ge1xuICAgICAgICB3ZWVrZGF5czoge1xuICAgICAgICAgICAgc2hvcnRoYW5kOiBbXCJTdW5cIiwgXCJNb25cIiwgXCJUdWVcIiwgXCJXZWRcIiwgXCJUaHVcIiwgXCJGcmlcIiwgXCJTYXRcIl0sXG4gICAgICAgICAgICBsb25naGFuZDogW1xuICAgICAgICAgICAgICAgIFwiU3VuZGF5XCIsXG4gICAgICAgICAgICAgICAgXCJNb25kYXlcIixcbiAgICAgICAgICAgICAgICBcIlR1ZXNkYXlcIixcbiAgICAgICAgICAgICAgICBcIldlZG5lc2RheVwiLFxuICAgICAgICAgICAgICAgIFwiVGh1cnNkYXlcIixcbiAgICAgICAgICAgICAgICBcIkZyaWRheVwiLFxuICAgICAgICAgICAgICAgIFwiU2F0dXJkYXlcIixcbiAgICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzOiB7XG4gICAgICAgICAgICBzaG9ydGhhbmQ6IFtcbiAgICAgICAgICAgICAgICBcIkphblwiLFxuICAgICAgICAgICAgICAgIFwiRmViXCIsXG4gICAgICAgICAgICAgICAgXCJNYXJcIixcbiAgICAgICAgICAgICAgICBcIkFwclwiLFxuICAgICAgICAgICAgICAgIFwiTWF5XCIsXG4gICAgICAgICAgICAgICAgXCJKdW5cIixcbiAgICAgICAgICAgICAgICBcIkp1bFwiLFxuICAgICAgICAgICAgICAgIFwiQXVnXCIsXG4gICAgICAgICAgICAgICAgXCJTZXBcIixcbiAgICAgICAgICAgICAgICBcIk9jdFwiLFxuICAgICAgICAgICAgICAgIFwiTm92XCIsXG4gICAgICAgICAgICAgICAgXCJEZWNcIixcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBsb25naGFuZDogW1xuICAgICAgICAgICAgICAgIFwiSmFudWFyeVwiLFxuICAgICAgICAgICAgICAgIFwiRmVicnVhcnlcIixcbiAgICAgICAgICAgICAgICBcIk1hcmNoXCIsXG4gICAgICAgICAgICAgICAgXCJBcHJpbFwiLFxuICAgICAgICAgICAgICAgIFwiTWF5XCIsXG4gICAgICAgICAgICAgICAgXCJKdW5lXCIsXG4gICAgICAgICAgICAgICAgXCJKdWx5XCIsXG4gICAgICAgICAgICAgICAgXCJBdWd1c3RcIixcbiAgICAgICAgICAgICAgICBcIlNlcHRlbWJlclwiLFxuICAgICAgICAgICAgICAgIFwiT2N0b2JlclwiLFxuICAgICAgICAgICAgICAgIFwiTm92ZW1iZXJcIixcbiAgICAgICAgICAgICAgICBcIkRlY2VtYmVyXCIsXG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIGRheXNJbk1vbnRoOiBbMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV0sXG4gICAgICAgIGZpcnN0RGF5T2ZXZWVrOiAwLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnRoKSB7XG4gICAgICAgICAgICB2YXIgcyA9IG50aCAlIDEwMDtcbiAgICAgICAgICAgIGlmIChzID4gMyAmJiBzIDwgMjEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwidGhcIjtcbiAgICAgICAgICAgIHN3aXRjaCAocyAlIDEwKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJzdFwiO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwibmRcIjtcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcInJkXCI7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwidGhcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmFuZ2VTZXBhcmF0b3I6IFwiIHRvIFwiLFxuICAgICAgICB3ZWVrQWJicmV2aWF0aW9uOiBcIldrXCIsXG4gICAgICAgIHNjcm9sbFRpdGxlOiBcIlNjcm9sbCB0byBpbmNyZW1lbnRcIixcbiAgICAgICAgdG9nZ2xlVGl0bGU6IFwiQ2xpY2sgdG8gdG9nZ2xlXCIsXG4gICAgICAgIGFtUE06IFtcIkFNXCIsIFwiUE1cIl0sXG4gICAgICAgIHllYXJBcmlhTGFiZWw6IFwiWWVhclwiLFxuICAgICAgICBob3VyQXJpYUxhYmVsOiBcIkhvdXJcIixcbiAgICAgICAgbWludXRlQXJpYUxhYmVsOiBcIk1pbnV0ZVwiLFxuICAgICAgICB0aW1lXzI0aHI6IGZhbHNlXG4gICAgfTtcblxuICAgIHZhciBwYWQgPSBmdW5jdGlvbiAobnVtYmVyKSB7IHJldHVybiAoXCIwXCIgKyBudW1iZXIpLnNsaWNlKC0yKTsgfTtcbiAgICB2YXIgaW50ID0gZnVuY3Rpb24gKGJvb2wpIHsgcmV0dXJuIChib29sID09PSB0cnVlID8gMSA6IDApOyB9O1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7XG4gICAgICAgIGlmIChpbW1lZGlhdGUgPT09IHZvaWQgMCkgeyBpbW1lZGlhdGUgPSBmYWxzZTsgfVxuICAgICAgICB2YXIgdGltZW91dDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBjb250ZXh0ID0gdGhpcywgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgIHRpbWVvdXQgIT09IG51bGwgJiYgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoIWltbWVkaWF0ZSlcbiAgICAgICAgICAgICAgICAgICAgZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgICAgIH0sIHdhaXQpO1xuICAgICAgICAgICAgaWYgKGltbWVkaWF0ZSAmJiAhdGltZW91dClcbiAgICAgICAgICAgICAgICBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICB2YXIgYXJyYXlpZnkgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBBcnJheSA/IG9iaiA6IFtvYmpdO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiB0b2dnbGVDbGFzcyhlbGVtLCBjbGFzc05hbWUsIGJvb2wpIHtcbiAgICAgICAgaWYgKGJvb2wgPT09IHRydWUpXG4gICAgICAgICAgICByZXR1cm4gZWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7XG4gICAgICAgIGVsZW0uY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50KHRhZywgY2xhc3NOYW1lLCBjb250ZW50KSB7XG4gICAgICAgIHZhciBlID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTtcbiAgICAgICAgY2xhc3NOYW1lID0gY2xhc3NOYW1lIHx8IFwiXCI7XG4gICAgICAgIGNvbnRlbnQgPSBjb250ZW50IHx8IFwiXCI7XG4gICAgICAgIGUuY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuICAgICAgICBpZiAoY29udGVudCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgZS50ZXh0Q29udGVudCA9IGNvbnRlbnQ7XG4gICAgICAgIHJldHVybiBlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjbGVhck5vZGUobm9kZSkge1xuICAgICAgICB3aGlsZSAobm9kZS5maXJzdENoaWxkKVxuICAgICAgICAgICAgbm9kZS5yZW1vdmVDaGlsZChub2RlLmZpcnN0Q2hpbGQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5kUGFyZW50KG5vZGUsIGNvbmRpdGlvbikge1xuICAgICAgICBpZiAoY29uZGl0aW9uKG5vZGUpKVxuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIGVsc2UgaWYgKG5vZGUucGFyZW50Tm9kZSlcbiAgICAgICAgICAgIHJldHVybiBmaW5kUGFyZW50KG5vZGUucGFyZW50Tm9kZSwgY29uZGl0aW9uKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsgLy8gbm90aGluZyBmb3VuZFxuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVOdW1iZXJJbnB1dChpbnB1dENsYXNzTmFtZSwgb3B0cykge1xuICAgICAgICB2YXIgd3JhcHBlciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJudW1JbnB1dFdyYXBwZXJcIiksIG51bUlucHV0ID0gY3JlYXRlRWxlbWVudChcImlucHV0XCIsIFwibnVtSW5wdXQgXCIgKyBpbnB1dENsYXNzTmFtZSksIGFycm93VXAgPSBjcmVhdGVFbGVtZW50KFwic3BhblwiLCBcImFycm93VXBcIiksIGFycm93RG93biA9IGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIFwiYXJyb3dEb3duXCIpO1xuICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKFwiTVNJRSA5LjBcIikgPT09IC0xKSB7XG4gICAgICAgICAgICBudW1JbnB1dC50eXBlID0gXCJudW1iZXJcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG51bUlucHV0LnR5cGUgPSBcInRleHRcIjtcbiAgICAgICAgICAgIG51bUlucHV0LnBhdHRlcm4gPSBcIlxcXFxkKlwiO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gb3B0cylcbiAgICAgICAgICAgICAgICBudW1JbnB1dC5zZXRBdHRyaWJ1dGUoa2V5LCBvcHRzW2tleV0pO1xuICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKG51bUlucHV0KTtcbiAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChhcnJvd1VwKTtcbiAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChhcnJvd0Rvd24pO1xuICAgICAgICByZXR1cm4gd3JhcHBlcjtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0RXZlbnRUYXJnZXQoZXZlbnQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBldmVudC5jb21wb3NlZFBhdGggPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdmFyIHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcbiAgICAgICAgICAgIHJldHVybiBwYXRoWzBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudC50YXJnZXQ7XG4gICAgfVxuXG4gICAgdmFyIGRvTm90aGluZyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfTtcbiAgICB2YXIgbW9udGhUb1N0ciA9IGZ1bmN0aW9uIChtb250aE51bWJlciwgc2hvcnRoYW5kLCBsb2NhbGUpIHsgcmV0dXJuIGxvY2FsZS5tb250aHNbc2hvcnRoYW5kID8gXCJzaG9ydGhhbmRcIiA6IFwibG9uZ2hhbmRcIl1bbW9udGhOdW1iZXJdOyB9O1xuICAgIHZhciByZXZGb3JtYXQgPSB7XG4gICAgICAgIEQ6IGRvTm90aGluZyxcbiAgICAgICAgRjogZnVuY3Rpb24gKGRhdGVPYmosIG1vbnRoTmFtZSwgbG9jYWxlKSB7XG4gICAgICAgICAgICBkYXRlT2JqLnNldE1vbnRoKGxvY2FsZS5tb250aHMubG9uZ2hhbmQuaW5kZXhPZihtb250aE5hbWUpKTtcbiAgICAgICAgfSxcbiAgICAgICAgRzogZnVuY3Rpb24gKGRhdGVPYmosIGhvdXIpIHtcbiAgICAgICAgICAgIGRhdGVPYmouc2V0SG91cnMocGFyc2VGbG9hdChob3VyKSk7XG4gICAgICAgIH0sXG4gICAgICAgIEg6IGZ1bmN0aW9uIChkYXRlT2JqLCBob3VyKSB7XG4gICAgICAgICAgICBkYXRlT2JqLnNldEhvdXJzKHBhcnNlRmxvYXQoaG91cikpO1xuICAgICAgICB9LFxuICAgICAgICBKOiBmdW5jdGlvbiAoZGF0ZU9iaiwgZGF5KSB7XG4gICAgICAgICAgICBkYXRlT2JqLnNldERhdGUocGFyc2VGbG9hdChkYXkpKTtcbiAgICAgICAgfSxcbiAgICAgICAgSzogZnVuY3Rpb24gKGRhdGVPYmosIGFtUE0sIGxvY2FsZSkge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXRIb3VycygoZGF0ZU9iai5nZXRIb3VycygpICUgMTIpICtcbiAgICAgICAgICAgICAgICAxMiAqIGludChuZXcgUmVnRXhwKGxvY2FsZS5hbVBNWzFdLCBcImlcIikudGVzdChhbVBNKSkpO1xuICAgICAgICB9LFxuICAgICAgICBNOiBmdW5jdGlvbiAoZGF0ZU9iaiwgc2hvcnRNb250aCwgbG9jYWxlKSB7XG4gICAgICAgICAgICBkYXRlT2JqLnNldE1vbnRoKGxvY2FsZS5tb250aHMuc2hvcnRoYW5kLmluZGV4T2Yoc2hvcnRNb250aCkpO1xuICAgICAgICB9LFxuICAgICAgICBTOiBmdW5jdGlvbiAoZGF0ZU9iaiwgc2Vjb25kcykge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXRTZWNvbmRzKHBhcnNlRmxvYXQoc2Vjb25kcykpO1xuICAgICAgICB9LFxuICAgICAgICBVOiBmdW5jdGlvbiAoXywgdW5peFNlY29uZHMpIHsgcmV0dXJuIG5ldyBEYXRlKHBhcnNlRmxvYXQodW5peFNlY29uZHMpICogMTAwMCk7IH0sXG4gICAgICAgIFc6IGZ1bmN0aW9uIChkYXRlT2JqLCB3ZWVrTnVtLCBsb2NhbGUpIHtcbiAgICAgICAgICAgIHZhciB3ZWVrTnVtYmVyID0gcGFyc2VJbnQod2Vla051bSk7XG4gICAgICAgICAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKGRhdGVPYmouZ2V0RnVsbFllYXIoKSwgMCwgMiArICh3ZWVrTnVtYmVyIC0gMSkgKiA3LCAwLCAwLCAwLCAwKTtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIGRhdGUuZ2V0RGF5KCkgKyBsb2NhbGUuZmlyc3REYXlPZldlZWspO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICAgIH0sXG4gICAgICAgIFk6IGZ1bmN0aW9uIChkYXRlT2JqLCB5ZWFyKSB7XG4gICAgICAgICAgICBkYXRlT2JqLnNldEZ1bGxZZWFyKHBhcnNlRmxvYXQoeWVhcikpO1xuICAgICAgICB9LFxuICAgICAgICBaOiBmdW5jdGlvbiAoXywgSVNPRGF0ZSkgeyByZXR1cm4gbmV3IERhdGUoSVNPRGF0ZSk7IH0sXG4gICAgICAgIGQ6IGZ1bmN0aW9uIChkYXRlT2JqLCBkYXkpIHtcbiAgICAgICAgICAgIGRhdGVPYmouc2V0RGF0ZShwYXJzZUZsb2F0KGRheSkpO1xuICAgICAgICB9LFxuICAgICAgICBoOiBmdW5jdGlvbiAoZGF0ZU9iaiwgaG91cikge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXRIb3VycyhwYXJzZUZsb2F0KGhvdXIpKTtcbiAgICAgICAgfSxcbiAgICAgICAgaTogZnVuY3Rpb24gKGRhdGVPYmosIG1pbnV0ZXMpIHtcbiAgICAgICAgICAgIGRhdGVPYmouc2V0TWludXRlcyhwYXJzZUZsb2F0KG1pbnV0ZXMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgajogZnVuY3Rpb24gKGRhdGVPYmosIGRheSkge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXREYXRlKHBhcnNlRmxvYXQoZGF5KSk7XG4gICAgICAgIH0sXG4gICAgICAgIGw6IGRvTm90aGluZyxcbiAgICAgICAgbTogZnVuY3Rpb24gKGRhdGVPYmosIG1vbnRoKSB7XG4gICAgICAgICAgICBkYXRlT2JqLnNldE1vbnRoKHBhcnNlRmxvYXQobW9udGgpIC0gMSk7XG4gICAgICAgIH0sXG4gICAgICAgIG46IGZ1bmN0aW9uIChkYXRlT2JqLCBtb250aCkge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXRNb250aChwYXJzZUZsb2F0KG1vbnRoKSAtIDEpO1xuICAgICAgICB9LFxuICAgICAgICBzOiBmdW5jdGlvbiAoZGF0ZU9iaiwgc2Vjb25kcykge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXRTZWNvbmRzKHBhcnNlRmxvYXQoc2Vjb25kcykpO1xuICAgICAgICB9LFxuICAgICAgICB1OiBmdW5jdGlvbiAoXywgdW5peE1pbGxTZWNvbmRzKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUocGFyc2VGbG9hdCh1bml4TWlsbFNlY29uZHMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgdzogZG9Ob3RoaW5nLFxuICAgICAgICB5OiBmdW5jdGlvbiAoZGF0ZU9iaiwgeWVhcikge1xuICAgICAgICAgICAgZGF0ZU9iai5zZXRGdWxsWWVhcigyMDAwICsgcGFyc2VGbG9hdCh5ZWFyKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHZhciB0b2tlblJlZ2V4ID0ge1xuICAgICAgICBEOiBcIihcXFxcdyspXCIsXG4gICAgICAgIEY6IFwiKFxcXFx3KylcIixcbiAgICAgICAgRzogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICAgICAgSDogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICAgICAgSjogXCIoXFxcXGRcXFxcZHxcXFxcZClcXFxcdytcIixcbiAgICAgICAgSzogXCJcIixcbiAgICAgICAgTTogXCIoXFxcXHcrKVwiLFxuICAgICAgICBTOiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgICAgICBVOiBcIiguKylcIixcbiAgICAgICAgVzogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICAgICAgWTogXCIoXFxcXGR7NH0pXCIsXG4gICAgICAgIFo6IFwiKC4rKVwiLFxuICAgICAgICBkOiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgICAgICBoOiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgICAgICBpOiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgICAgICBqOiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgICAgICBsOiBcIihcXFxcdyspXCIsXG4gICAgICAgIG06IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgICAgIG46IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgICAgIHM6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgICAgIHU6IFwiKC4rKVwiLFxuICAgICAgICB3OiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgICAgICB5OiBcIihcXFxcZHsyfSlcIlxuICAgIH07XG4gICAgdmFyIGZvcm1hdHMgPSB7XG4gICAgICAgIC8vIGdldCB0aGUgZGF0ZSBpbiBVVENcbiAgICAgICAgWjogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKTsgfSxcbiAgICAgICAgLy8gd2Vla2RheSBuYW1lLCBzaG9ydCwgZS5nLiBUaHVcbiAgICAgICAgRDogZnVuY3Rpb24gKGRhdGUsIGxvY2FsZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5cy5zaG9ydGhhbmRbZm9ybWF0cy53KGRhdGUsIGxvY2FsZSwgb3B0aW9ucyldO1xuICAgICAgICB9LFxuICAgICAgICAvLyBmdWxsIG1vbnRoIG5hbWUgZS5nLiBKYW51YXJ5XG4gICAgICAgIEY6IGZ1bmN0aW9uIChkYXRlLCBsb2NhbGUsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBtb250aFRvU3RyKGZvcm1hdHMubihkYXRlLCBsb2NhbGUsIG9wdGlvbnMpIC0gMSwgZmFsc2UsIGxvY2FsZSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIHBhZGRlZCBob3VyIDEtMTJcbiAgICAgICAgRzogZnVuY3Rpb24gKGRhdGUsIGxvY2FsZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIHBhZChmb3JtYXRzLmgoZGF0ZSwgbG9jYWxlLCBvcHRpb25zKSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGhvdXJzIHdpdGggbGVhZGluZyB6ZXJvIGUuZy4gMDNcbiAgICAgICAgSDogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIHBhZChkYXRlLmdldEhvdXJzKCkpOyB9LFxuICAgICAgICAvLyBkYXkgKDEtMzApIHdpdGggb3JkaW5hbCBzdWZmaXggZS5nLiAxc3QsIDJuZFxuICAgICAgICBKOiBmdW5jdGlvbiAoZGF0ZSwgbG9jYWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLm9yZGluYWwgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gZGF0ZS5nZXREYXRlKCkgKyBsb2NhbGUub3JkaW5hbChkYXRlLmdldERhdGUoKSlcbiAgICAgICAgICAgICAgICA6IGRhdGUuZ2V0RGF0ZSgpO1xuICAgICAgICB9LFxuICAgICAgICAvLyBBTS9QTVxuICAgICAgICBLOiBmdW5jdGlvbiAoZGF0ZSwgbG9jYWxlKSB7IHJldHVybiBsb2NhbGUuYW1QTVtpbnQoZGF0ZS5nZXRIb3VycygpID4gMTEpXTsgfSxcbiAgICAgICAgLy8gc2hvcnRoYW5kIG1vbnRoIGUuZy4gSmFuLCBTZXAsIE9jdCwgZXRjXG4gICAgICAgIE06IGZ1bmN0aW9uIChkYXRlLCBsb2NhbGUpIHtcbiAgICAgICAgICAgIHJldHVybiBtb250aFRvU3RyKGRhdGUuZ2V0TW9udGgoKSwgdHJ1ZSwgbG9jYWxlKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gc2Vjb25kcyAwMC01OVxuICAgICAgICBTOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gcGFkKGRhdGUuZ2V0U2Vjb25kcygpKTsgfSxcbiAgICAgICAgLy8gdW5peCB0aW1lc3RhbXBcbiAgICAgICAgVTogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIGRhdGUuZ2V0VGltZSgpIC8gMTAwMDsgfSxcbiAgICAgICAgVzogZnVuY3Rpb24gKGRhdGUsIF8sIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmdldFdlZWsoZGF0ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGZ1bGwgeWVhciBlLmcuIDIwMTZcbiAgICAgICAgWTogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIGRhdGUuZ2V0RnVsbFllYXIoKTsgfSxcbiAgICAgICAgLy8gZGF5IGluIG1vbnRoLCBwYWRkZWQgKDAxLTMwKVxuICAgICAgICBkOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gcGFkKGRhdGUuZ2V0RGF0ZSgpKTsgfSxcbiAgICAgICAgLy8gaG91ciBmcm9tIDEtMTIgKGFtL3BtKVxuICAgICAgICBoOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gKGRhdGUuZ2V0SG91cnMoKSAlIDEyID8gZGF0ZS5nZXRIb3VycygpICUgMTIgOiAxMik7IH0sXG4gICAgICAgIC8vIG1pbnV0ZXMsIHBhZGRlZCB3aXRoIGxlYWRpbmcgemVybyBlLmcuIDA5XG4gICAgICAgIGk6IGZ1bmN0aW9uIChkYXRlKSB7IHJldHVybiBwYWQoZGF0ZS5nZXRNaW51dGVzKCkpOyB9LFxuICAgICAgICAvLyBkYXkgaW4gbW9udGggKDEtMzApXG4gICAgICAgIGo6IGZ1bmN0aW9uIChkYXRlKSB7IHJldHVybiBkYXRlLmdldERhdGUoKTsgfSxcbiAgICAgICAgLy8gd2Vla2RheSBuYW1lLCBmdWxsLCBlLmcuIFRodXJzZGF5XG4gICAgICAgIGw6IGZ1bmN0aW9uIChkYXRlLCBsb2NhbGUpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXMubG9uZ2hhbmRbZGF0ZS5nZXREYXkoKV07XG4gICAgICAgIH0sXG4gICAgICAgIC8vIHBhZGRlZCBtb250aCBudW1iZXIgKDAxLTEyKVxuICAgICAgICBtOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gcGFkKGRhdGUuZ2V0TW9udGgoKSArIDEpOyB9LFxuICAgICAgICAvLyB0aGUgbW9udGggbnVtYmVyICgxLTEyKVxuICAgICAgICBuOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gZGF0ZS5nZXRNb250aCgpICsgMTsgfSxcbiAgICAgICAgLy8gc2Vjb25kcyAwLTU5XG4gICAgICAgIHM6IGZ1bmN0aW9uIChkYXRlKSB7IHJldHVybiBkYXRlLmdldFNlY29uZHMoKTsgfSxcbiAgICAgICAgLy8gVW5peCBNaWxsaXNlY29uZHNcbiAgICAgICAgdTogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIGRhdGUuZ2V0VGltZSgpOyB9LFxuICAgICAgICAvLyBudW1iZXIgb2YgdGhlIGRheSBvZiB0aGUgd2Vla1xuICAgICAgICB3OiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gZGF0ZS5nZXREYXkoKTsgfSxcbiAgICAgICAgLy8gbGFzdCB0d28gZGlnaXRzIG9mIHllYXIgZS5nLiAxNiBmb3IgMjAxNlxuICAgICAgICB5OiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gU3RyaW5nKGRhdGUuZ2V0RnVsbFllYXIoKSkuc3Vic3RyaW5nKDIpOyB9XG4gICAgfTtcblxuICAgIHZhciBjcmVhdGVEYXRlRm9ybWF0dGVyID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHZhciBfYiA9IF9hLmNvbmZpZywgY29uZmlnID0gX2IgPT09IHZvaWQgMCA/IGRlZmF1bHRzIDogX2IsIF9jID0gX2EubDEwbiwgbDEwbiA9IF9jID09PSB2b2lkIDAgPyBlbmdsaXNoIDogX2M7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoZGF0ZU9iaiwgZnJtdCwgb3ZlcnJpZGVMb2NhbGUpIHtcbiAgICAgICAgICAgIHZhciBsb2NhbGUgPSBvdmVycmlkZUxvY2FsZSB8fCBsMTBuO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5mb3JtYXREYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnLmZvcm1hdERhdGUoZGF0ZU9iaiwgZnJtdCwgbG9jYWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmcm10XG4gICAgICAgICAgICAgICAgLnNwbGl0KFwiXCIpXG4gICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoYywgaSwgYXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHNbY10gJiYgYXJyW2kgLSAxXSAhPT0gXCJcXFxcXCJcbiAgICAgICAgICAgICAgICAgICAgPyBmb3JtYXRzW2NdKGRhdGVPYmosIGxvY2FsZSwgY29uZmlnKVxuICAgICAgICAgICAgICAgICAgICA6IGMgIT09IFwiXFxcXFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGNcbiAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIjtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmpvaW4oXCJcIik7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICB2YXIgY3JlYXRlRGF0ZVBhcnNlciA9IGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgX2IgPSBfYS5jb25maWcsIGNvbmZpZyA9IF9iID09PSB2b2lkIDAgPyBkZWZhdWx0cyA6IF9iLCBfYyA9IF9hLmwxMG4sIGwxMG4gPSBfYyA9PT0gdm9pZCAwID8gZW5nbGlzaCA6IF9jO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGUsIGdpdmVuRm9ybWF0LCB0aW1lbGVzcywgY3VzdG9tTG9jYWxlKSB7XG4gICAgICAgICAgICBpZiAoZGF0ZSAhPT0gMCAmJiAhZGF0ZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdmFyIGxvY2FsZSA9IGN1c3RvbUxvY2FsZSB8fCBsMTBuO1xuICAgICAgICAgICAgdmFyIHBhcnNlZERhdGU7XG4gICAgICAgICAgICB2YXIgZGF0ZU9yaWcgPSBkYXRlO1xuICAgICAgICAgICAgaWYgKGRhdGUgaW5zdGFuY2VvZiBEYXRlKVxuICAgICAgICAgICAgICAgIHBhcnNlZERhdGUgPSBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgZGF0ZSAhPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgICAgIGRhdGUudG9GaXhlZCAhPT0gdW5kZWZpbmVkIC8vIHRpbWVzdGFtcFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBhIGNvcHlcbiAgICAgICAgICAgICAgICBwYXJzZWREYXRlID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgZGF0ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIC8vIGRhdGUgc3RyaW5nXG4gICAgICAgICAgICAgICAgdmFyIGZvcm1hdCA9IGdpdmVuRm9ybWF0IHx8IChjb25maWcgfHwgZGVmYXVsdHMpLmRhdGVGb3JtYXQ7XG4gICAgICAgICAgICAgICAgdmFyIGRhdGVzdHIgPSBTdHJpbmcoZGF0ZSkudHJpbSgpO1xuICAgICAgICAgICAgICAgIGlmIChkYXRlc3RyID09PSBcInRvZGF5XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkRGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVsZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoL1okLy50ZXN0KGRhdGVzdHIpIHx8XG4gICAgICAgICAgICAgICAgICAgIC9HTVQkLy50ZXN0KGRhdGVzdHIpIC8vIGRhdGVzdHJpbmdzIHcvIHRpbWV6b25lXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBwYXJzZWREYXRlID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29uZmlnICYmIGNvbmZpZy5wYXJzZURhdGUpXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZERhdGUgPSBjb25maWcucGFyc2VEYXRlKGRhdGUsIGZvcm1hdCk7XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZERhdGUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgIWNvbmZpZyB8fCAhY29uZmlnLm5vQ2FsZW5kYXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSwgMCwgMSwgMCwgMCwgMCwgMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG5ldyBEYXRlKG5ldyBEYXRlKCkuc2V0SG91cnMoMCwgMCwgMCwgMCkpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2hlZCA9IHZvaWQgMCwgb3BzID0gW107XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBtYXRjaEluZGV4ID0gMCwgcmVnZXhTdHIgPSBcIlwiOyBpIDwgZm9ybWF0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW5fMSA9IGZvcm1hdFtpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc0JhY2tTbGFzaCA9IHRva2VuXzEgPT09IFwiXFxcXFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVzY2FwZWQgPSBmb3JtYXRbaSAtIDFdID09PSBcIlxcXFxcIiB8fCBpc0JhY2tTbGFzaDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlblJlZ2V4W3Rva2VuXzFdICYmICFlc2NhcGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXhTdHIgKz0gdG9rZW5SZWdleFt0b2tlbl8xXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBuZXcgUmVnRXhwKHJlZ2V4U3RyKS5leGVjKGRhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCAmJiAobWF0Y2hlZCA9IHRydWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wc1t0b2tlbl8xICE9PSBcIllcIiA/IFwicHVzaFwiIDogXCJ1bnNoaWZ0XCJdKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuOiByZXZGb3JtYXRbdG9rZW5fMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWw6IG1hdGNoWysrbWF0Y2hJbmRleF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWlzQmFja1NsYXNoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4U3RyICs9IFwiLlwiOyAvLyBkb24ndCByZWFsbHkgY2FyZVxuICAgICAgICAgICAgICAgICAgICAgICAgb3BzLmZvckVhY2goZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZuID0gX2EuZm4sIHZhbCA9IF9hLnZhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHBhcnNlZERhdGUgPSBmbihwYXJzZWREYXRlLCB2YWwsIGxvY2FsZSkgfHwgcGFyc2VkRGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwYXJzZWREYXRlID0gbWF0Y2hlZCA/IHBhcnNlZERhdGUgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgIGlmICghKHBhcnNlZERhdGUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTihwYXJzZWREYXRlLmdldFRpbWUoKSkpKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnLmVycm9ySGFuZGxlcihuZXcgRXJyb3IoXCJJbnZhbGlkIGRhdGUgcHJvdmlkZWQ6IFwiICsgZGF0ZU9yaWcpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRpbWVsZXNzID09PSB0cnVlKVxuICAgICAgICAgICAgICAgIHBhcnNlZERhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VkRGF0ZTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIENvbXB1dGUgdGhlIGRpZmZlcmVuY2UgaW4gZGF0ZXMsIG1lYXN1cmVkIGluIG1zXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29tcGFyZURhdGVzKGRhdGUxLCBkYXRlMiwgdGltZWxlc3MpIHtcbiAgICAgICAgaWYgKHRpbWVsZXNzID09PSB2b2lkIDApIHsgdGltZWxlc3MgPSB0cnVlOyB9XG4gICAgICAgIGlmICh0aW1lbGVzcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiAobmV3IERhdGUoZGF0ZTEuZ2V0VGltZSgpKS5zZXRIb3VycygwLCAwLCAwLCAwKSAtXG4gICAgICAgICAgICAgICAgbmV3IERhdGUoZGF0ZTIuZ2V0VGltZSgpKS5zZXRIb3VycygwLCAwLCAwLCAwKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGUxLmdldFRpbWUoKSAtIGRhdGUyLmdldFRpbWUoKTtcbiAgICB9XG4gICAgdmFyIGlzQmV0d2VlbiA9IGZ1bmN0aW9uICh0cywgdHMxLCB0czIpIHtcbiAgICAgICAgcmV0dXJuIHRzID4gTWF0aC5taW4odHMxLCB0czIpICYmIHRzIDwgTWF0aC5tYXgodHMxLCB0czIpO1xuICAgIH07XG4gICAgdmFyIGR1cmF0aW9uID0ge1xuICAgICAgICBEQVk6IDg2NDAwMDAwXG4gICAgfTtcblxuICAgIGlmICh0eXBlb2YgT2JqZWN0LmFzc2lnbiAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24gPSBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgICAgICBhcmdzW19pIC0gMV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCJDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3RcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHNvdXJjZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IHJldHVybiAodGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XSk7IH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3IgKHZhciBfYSA9IDAsIGFyZ3NfMSA9IGFyZ3M7IF9hIDwgYXJnc18xLmxlbmd0aDsgX2ErKykge1xuICAgICAgICAgICAgICAgIHZhciBzb3VyY2UgPSBhcmdzXzFbX2FdO1xuICAgICAgICAgICAgICAgIF9sb29wXzEoc291cmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIERFQk9VTkNFRF9DSEFOR0VfTVMgPSAzMDA7XG4gICAgZnVuY3Rpb24gRmxhdHBpY2tySW5zdGFuY2UoZWxlbWVudCwgaW5zdGFuY2VDb25maWcpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB7XG4gICAgICAgICAgICBjb25maWc6IF9fYXNzaWduKHt9LCBkZWZhdWx0cywgZmxhdHBpY2tyLmRlZmF1bHRDb25maWcpLFxuICAgICAgICAgICAgbDEwbjogZW5nbGlzaFxuICAgICAgICB9O1xuICAgICAgICBzZWxmLnBhcnNlRGF0ZSA9IGNyZWF0ZURhdGVQYXJzZXIoeyBjb25maWc6IHNlbGYuY29uZmlnLCBsMTBuOiBzZWxmLmwxMG4gfSk7XG4gICAgICAgIHNlbGYuX2hhbmRsZXJzID0gW107XG4gICAgICAgIHNlbGYucGx1Z2luRWxlbWVudHMgPSBbXTtcbiAgICAgICAgc2VsZi5sb2FkZWRQbHVnaW5zID0gW107XG4gICAgICAgIHNlbGYuX2JpbmQgPSBiaW5kO1xuICAgICAgICBzZWxmLl9zZXRIb3Vyc0Zyb21EYXRlID0gc2V0SG91cnNGcm9tRGF0ZTtcbiAgICAgICAgc2VsZi5fcG9zaXRpb25DYWxlbmRhciA9IHBvc2l0aW9uQ2FsZW5kYXI7XG4gICAgICAgIHNlbGYuY2hhbmdlTW9udGggPSBjaGFuZ2VNb250aDtcbiAgICAgICAgc2VsZi5jaGFuZ2VZZWFyID0gY2hhbmdlWWVhcjtcbiAgICAgICAgc2VsZi5jbGVhciA9IGNsZWFyO1xuICAgICAgICBzZWxmLmNsb3NlID0gY2xvc2U7XG4gICAgICAgIHNlbGYuX2NyZWF0ZUVsZW1lbnQgPSBjcmVhdGVFbGVtZW50O1xuICAgICAgICBzZWxmLmRlc3Ryb3kgPSBkZXN0cm95O1xuICAgICAgICBzZWxmLmlzRW5hYmxlZCA9IGlzRW5hYmxlZDtcbiAgICAgICAgc2VsZi5qdW1wVG9EYXRlID0ganVtcFRvRGF0ZTtcbiAgICAgICAgc2VsZi5vcGVuID0gb3BlbjtcbiAgICAgICAgc2VsZi5yZWRyYXcgPSByZWRyYXc7XG4gICAgICAgIHNlbGYuc2V0ID0gc2V0O1xuICAgICAgICBzZWxmLnNldERhdGUgPSBzZXREYXRlO1xuICAgICAgICBzZWxmLnRvZ2dsZSA9IHRvZ2dsZTtcbiAgICAgICAgZnVuY3Rpb24gc2V0dXBIZWxwZXJGdW5jdGlvbnMoKSB7XG4gICAgICAgICAgICBzZWxmLnV0aWxzID0ge1xuICAgICAgICAgICAgICAgIGdldERheXNJbk1vbnRoOiBmdW5jdGlvbiAobW9udGgsIHlyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtb250aCA9PT0gdm9pZCAwKSB7IG1vbnRoID0gc2VsZi5jdXJyZW50TW9udGg7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHlyID09PSB2b2lkIDApIHsgeXIgPSBzZWxmLmN1cnJlbnRZZWFyOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChtb250aCA9PT0gMSAmJiAoKHlyICUgNCA9PT0gMCAmJiB5ciAlIDEwMCAhPT0gMCkgfHwgeXIgJSA0MDAgPT09IDApKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDI5O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5sMTBuLmRheXNJbk1vbnRoW21vbnRoXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICAgICAgICBzZWxmLmVsZW1lbnQgPSBzZWxmLmlucHV0ID0gZWxlbWVudDtcbiAgICAgICAgICAgIHNlbGYuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgICAgICBwYXJzZUNvbmZpZygpO1xuICAgICAgICAgICAgc2V0dXBMb2NhbGUoKTtcbiAgICAgICAgICAgIHNldHVwSW5wdXRzKCk7XG4gICAgICAgICAgICBzZXR1cERhdGVzKCk7XG4gICAgICAgICAgICBzZXR1cEhlbHBlckZ1bmN0aW9ucygpO1xuICAgICAgICAgICAgaWYgKCFzZWxmLmlzTW9iaWxlKVxuICAgICAgICAgICAgICAgIGJ1aWxkKCk7XG4gICAgICAgICAgICBiaW5kRXZlbnRzKCk7XG4gICAgICAgICAgICBpZiAoc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCB8fCBzZWxmLmNvbmZpZy5ub0NhbGVuZGFyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLmVuYWJsZVRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0SG91cnNGcm9tRGF0ZShzZWxmLmNvbmZpZy5ub0NhbGVuZGFyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqIHx8IHNlbGYuY29uZmlnLm1pbkRhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdXBkYXRlVmFsdWUoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2V0Q2FsZW5kYXJXaWR0aCgpO1xuICAgICAgICAgICAgc2VsZi5zaG93VGltZUlucHV0ID1cbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID4gMCB8fCBzZWxmLmNvbmZpZy5ub0NhbGVuZGFyO1xuICAgICAgICAgICAgdmFyIGlzU2FmYXJpID0gL14oKD8hY2hyb21lfGFuZHJvaWQpLikqc2FmYXJpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICAgICAgICAgIC8qIFRPRE86IGludmVzdGlnYXRlIHRoaXMgZnVydGhlclxuICAgICAgICBcbiAgICAgICAgICAgICAgQ3VycmVudGx5LCB0aGVyZSBpcyB3ZWlyZCBwb3NpdGlvbmluZyBiZWhhdmlvciBpbiBzYWZhcmkgY2F1c2luZyBwYWdlc1xuICAgICAgICAgICAgICB0byBzY3JvbGwgdXAuIGh0dHBzOi8vZ2l0aHViLmNvbS9jaG1sbi9mbGF0cGlja3IvaXNzdWVzLzU2M1xuICAgICAgICBcbiAgICAgICAgICAgICAgSG93ZXZlciwgbW9zdCBicm93c2VycyBhcmUgbm90IFNhZmFyaSBhbmQgcG9zaXRpb25pbmcgaXMgZXhwZW5zaXZlIHdoZW4gdXNlZFxuICAgICAgICAgICAgICBpbiBzY2FsZS4gaHR0cHM6Ly9naXRodWIuY29tL2NobWxuL2ZsYXRwaWNrci9pc3N1ZXMvMTA5NlxuICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmICghc2VsZi5pc01vYmlsZSAmJiBpc1NhZmFyaSkge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uQ2FsZW5kYXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uUmVhZHlcIik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYmluZFRvSW5zdGFuY2UoZm4pIHtcbiAgICAgICAgICAgIHJldHVybiBmbi5iaW5kKHNlbGYpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNldENhbGVuZGFyV2lkdGgoKSB7XG4gICAgICAgICAgICB2YXIgY29uZmlnID0gc2VsZi5jb25maWc7XG4gICAgICAgICAgICBpZiAoY29uZmlnLndlZWtOdW1iZXJzID09PSBmYWxzZSAmJiBjb25maWcuc2hvd01vbnRocyA9PT0gMSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBlbHNlIGlmIChjb25maWcubm9DYWxlbmRhciAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5jYWxlbmRhckNvbnRhaW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLmRheXNDb250YWluZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRheXNXaWR0aCA9IChzZWxmLmRheXMub2Zmc2V0V2lkdGggKyAxKSAqIGNvbmZpZy5zaG93TW9udGhzO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kYXlzQ29udGFpbmVyLnN0eWxlLndpZHRoID0gZGF5c1dpZHRoICsgXCJweFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS53aWR0aCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF5c1dpZHRoICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYud2Vla1dyYXBwZXIgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLndlZWtXcmFwcGVyLm9mZnNldFdpZHRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJweFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcInZpc2liaWxpdHlcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnN0eWxlLnJlbW92ZVByb3BlcnR5KFwiZGlzcGxheVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgaGFuZGxlciBmb3IgYWxsIGV2ZW50cyB0YXJnZXRpbmcgdGhlIHRpbWUgaW5wdXRzXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiB1cGRhdGVUaW1lKGUpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc2V0RGVmYXVsdFRpbWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlICE9PSB1bmRlZmluZWQgJiYgZS50eXBlICE9PSBcImJsdXJcIikge1xuICAgICAgICAgICAgICAgIHRpbWVXcmFwcGVyKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHByZXZWYWx1ZSA9IHNlbGYuX2lucHV0LnZhbHVlO1xuICAgICAgICAgICAgc2V0SG91cnNGcm9tSW5wdXRzKCk7XG4gICAgICAgICAgICB1cGRhdGVWYWx1ZSgpO1xuICAgICAgICAgICAgaWYgKHNlbGYuX2lucHV0LnZhbHVlICE9PSBwcmV2VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9kZWJvdW5jZWRDaGFuZ2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhbXBtMm1pbGl0YXJ5KGhvdXIsIGFtUE0pIHtcbiAgICAgICAgICAgIHJldHVybiAoaG91ciAlIDEyKSArIDEyICogaW50KGFtUE0gPT09IHNlbGYubDEwbi5hbVBNWzFdKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBtaWxpdGFyeTJhbXBtKGhvdXIpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoaG91ciAlIDI0KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAxMjtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaG91ciAlIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTeW5jcyB0aGUgc2VsZWN0ZWQgZGF0ZSBvYmplY3QgdGltZSB3aXRoIHVzZXIncyB0aW1lIGlucHV0XG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBzZXRIb3Vyc0Zyb21JbnB1dHMoKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5ob3VyRWxlbWVudCA9PT0gdW5kZWZpbmVkIHx8IHNlbGYubWludXRlRWxlbWVudCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHZhciBob3VycyA9IChwYXJzZUludChzZWxmLmhvdXJFbGVtZW50LnZhbHVlLnNsaWNlKC0yKSwgMTApIHx8IDApICUgMjQsIG1pbnV0ZXMgPSAocGFyc2VJbnQoc2VsZi5taW51dGVFbGVtZW50LnZhbHVlLCAxMCkgfHwgMCkgJSA2MCwgc2Vjb25kcyA9IHNlbGYuc2Vjb25kRWxlbWVudCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyAocGFyc2VJbnQoc2VsZi5zZWNvbmRFbGVtZW50LnZhbHVlLCAxMCkgfHwgMCkgJSA2MFxuICAgICAgICAgICAgICAgIDogMDtcbiAgICAgICAgICAgIGlmIChzZWxmLmFtUE0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGhvdXJzID0gYW1wbTJtaWxpdGFyeShob3Vycywgc2VsZi5hbVBNLnRleHRDb250ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBsaW1pdE1pbkhvdXJzID0gc2VsZi5jb25maWcubWluVGltZSAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgICAgKHNlbGYuY29uZmlnLm1pbkRhdGUgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5taW5EYXRlSGFzVGltZSAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iaiAmJlxuICAgICAgICAgICAgICAgICAgICBjb21wYXJlRGF0ZXMoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmosIHNlbGYuY29uZmlnLm1pbkRhdGUsIHRydWUpID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgMCk7XG4gICAgICAgICAgICB2YXIgbGltaXRNYXhIb3VycyA9IHNlbGYuY29uZmlnLm1heFRpbWUgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgIChzZWxmLmNvbmZpZy5tYXhEYXRlICYmXG4gICAgICAgICAgICAgICAgICAgIHNlbGYubWF4RGF0ZUhhc1RpbWUgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogJiZcbiAgICAgICAgICAgICAgICAgICAgY29tcGFyZURhdGVzKHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqLCBzZWxmLmNvbmZpZy5tYXhEYXRlLCB0cnVlKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgIDApO1xuICAgICAgICAgICAgaWYgKGxpbWl0TWF4SG91cnMpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWF4VGltZSA9IHNlbGYuY29uZmlnLm1heFRpbWUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLm1heFRpbWVcbiAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmNvbmZpZy5tYXhEYXRlO1xuICAgICAgICAgICAgICAgIGhvdXJzID0gTWF0aC5taW4oaG91cnMsIG1heFRpbWUuZ2V0SG91cnMoKSk7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXJzID09PSBtYXhUaW1lLmdldEhvdXJzKCkpXG4gICAgICAgICAgICAgICAgICAgIG1pbnV0ZXMgPSBNYXRoLm1pbihtaW51dGVzLCBtYXhUaW1lLmdldE1pbnV0ZXMoKSk7XG4gICAgICAgICAgICAgICAgaWYgKG1pbnV0ZXMgPT09IG1heFRpbWUuZ2V0TWludXRlcygpKVxuICAgICAgICAgICAgICAgICAgICBzZWNvbmRzID0gTWF0aC5taW4oc2Vjb25kcywgbWF4VGltZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxpbWl0TWluSG91cnMpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWluVGltZSA9IHNlbGYuY29uZmlnLm1pblRpbWUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLm1pblRpbWVcbiAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmNvbmZpZy5taW5EYXRlO1xuICAgICAgICAgICAgICAgIGhvdXJzID0gTWF0aC5tYXgoaG91cnMsIG1pblRpbWUuZ2V0SG91cnMoKSk7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXJzID09PSBtaW5UaW1lLmdldEhvdXJzKCkpXG4gICAgICAgICAgICAgICAgICAgIG1pbnV0ZXMgPSBNYXRoLm1heChtaW51dGVzLCBtaW5UaW1lLmdldE1pbnV0ZXMoKSk7XG4gICAgICAgICAgICAgICAgaWYgKG1pbnV0ZXMgPT09IG1pblRpbWUuZ2V0TWludXRlcygpKVxuICAgICAgICAgICAgICAgICAgICBzZWNvbmRzID0gTWF0aC5tYXgoc2Vjb25kcywgbWluVGltZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2V0SG91cnMoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTeW5jcyB0aW1lIGlucHV0IHZhbHVlcyB3aXRoIGEgZGF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gc2V0SG91cnNGcm9tRGF0ZShkYXRlT2JqKSB7XG4gICAgICAgICAgICB2YXIgZGF0ZSA9IGRhdGVPYmogfHwgc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmo7XG4gICAgICAgICAgICBpZiAoZGF0ZSlcbiAgICAgICAgICAgICAgICBzZXRIb3VycyhkYXRlLmdldEhvdXJzKCksIGRhdGUuZ2V0TWludXRlcygpLCBkYXRlLmdldFNlY29uZHMoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2V0RGVmYXVsdEhvdXJzKCkge1xuICAgICAgICAgICAgdmFyIGhvdXJzID0gc2VsZi5jb25maWcuZGVmYXVsdEhvdXI7XG4gICAgICAgICAgICB2YXIgbWludXRlcyA9IHNlbGYuY29uZmlnLmRlZmF1bHRNaW51dGU7XG4gICAgICAgICAgICB2YXIgc2Vjb25kcyA9IHNlbGYuY29uZmlnLmRlZmF1bHRTZWNvbmRzO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1pbkRhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHZhciBtaW5IciA9IHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0SG91cnMoKTtcbiAgICAgICAgICAgICAgICB2YXIgbWluTWludXRlcyA9IHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0TWludXRlcygpO1xuICAgICAgICAgICAgICAgIGhvdXJzID0gTWF0aC5tYXgoaG91cnMsIG1pbkhyKTtcbiAgICAgICAgICAgICAgICBpZiAoaG91cnMgPT09IG1pbkhyKVxuICAgICAgICAgICAgICAgICAgICBtaW51dGVzID0gTWF0aC5tYXgobWluTWludXRlcywgbWludXRlcyk7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXJzID09PSBtaW5IciAmJiBtaW51dGVzID09PSBtaW5NaW51dGVzKVxuICAgICAgICAgICAgICAgICAgICBzZWNvbmRzID0gc2VsZi5jb25maWcubWluRGF0ZS5nZXRTZWNvbmRzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubWF4RGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1heEhyID0gc2VsZi5jb25maWcubWF4RGF0ZS5nZXRIb3VycygpO1xuICAgICAgICAgICAgICAgIHZhciBtYXhNaW51dGVzID0gc2VsZi5jb25maWcubWF4RGF0ZS5nZXRNaW51dGVzKCk7XG4gICAgICAgICAgICAgICAgaG91cnMgPSBNYXRoLm1pbihob3VycywgbWF4SHIpO1xuICAgICAgICAgICAgICAgIGlmIChob3VycyA9PT0gbWF4SHIpXG4gICAgICAgICAgICAgICAgICAgIG1pbnV0ZXMgPSBNYXRoLm1pbihtYXhNaW51dGVzLCBtaW51dGVzKTtcbiAgICAgICAgICAgICAgICBpZiAoaG91cnMgPT09IG1heEhyICYmIG1pbnV0ZXMgPT09IG1heE1pbnV0ZXMpXG4gICAgICAgICAgICAgICAgICAgIHNlY29uZHMgPSBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldFNlY29uZHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldEhvdXJzKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogU2V0cyB0aGUgaG91cnMsIG1pbnV0ZXMsIGFuZCBvcHRpb25hbGx5IHNlY29uZHNcbiAgICAgICAgICogb2YgdGhlIGxhdGVzdCBzZWxlY3RlZCBkYXRlIG9iamVjdCBhbmQgdGhlXG4gICAgICAgICAqIGNvcnJlc3BvbmRpbmcgdGltZSBpbnB1dHNcbiAgICAgICAgICogQHBhcmFtIHtOdW1iZXJ9IGhvdXJzIHRoZSBob3VyLiB3aGV0aGVyIGl0cyBtaWxpdGFyeVxuICAgICAgICAgKiAgICAgICAgICAgICAgICAgb3IgYW0tcG0gZ2V0cyBpbmZlcnJlZCBmcm9tIGNvbmZpZ1xuICAgICAgICAgKiBAcGFyYW0ge051bWJlcn0gbWludXRlcyB0aGUgbWludXRlc1xuICAgICAgICAgKiBAcGFyYW0ge051bWJlcn0gc2Vjb25kcyB0aGUgc2Vjb25kcyAob3B0aW9uYWwpXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBzZXRIb3Vycyhob3VycywgbWludXRlcywgc2Vjb25kcykge1xuICAgICAgICAgICAgaWYgKHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iai5zZXRIb3Vycyhob3VycyAlIDI0LCBtaW51dGVzLCBzZWNvbmRzIHx8IDAsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzZWxmLmhvdXJFbGVtZW50IHx8ICFzZWxmLm1pbnV0ZUVsZW1lbnQgfHwgc2VsZi5pc01vYmlsZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBzZWxmLmhvdXJFbGVtZW50LnZhbHVlID0gcGFkKCFzZWxmLmNvbmZpZy50aW1lXzI0aHJcbiAgICAgICAgICAgICAgICA/ICgoMTIgKyBob3VycykgJSAxMikgKyAxMiAqIGludChob3VycyAlIDEyID09PSAwKVxuICAgICAgICAgICAgICAgIDogaG91cnMpO1xuICAgICAgICAgICAgc2VsZi5taW51dGVFbGVtZW50LnZhbHVlID0gcGFkKG1pbnV0ZXMpO1xuICAgICAgICAgICAgaWYgKHNlbGYuYW1QTSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHNlbGYuYW1QTS50ZXh0Q29udGVudCA9IHNlbGYubDEwbi5hbVBNW2ludChob3VycyA+PSAxMildO1xuICAgICAgICAgICAgaWYgKHNlbGYuc2Vjb25kRWxlbWVudCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHNlbGYuc2Vjb25kRWxlbWVudC52YWx1ZSA9IHBhZChzZWNvbmRzKTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogSGFuZGxlcyB0aGUgeWVhciBpbnB1dCBhbmQgaW5jcmVtZW50aW5nIGV2ZW50c1xuICAgICAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudCB0aGUga2V5dXAgb3IgaW5jcmVtZW50IGV2ZW50XG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBvblllYXJJbnB1dChldmVudCkge1xuICAgICAgICAgICAgdmFyIHllYXIgPSBwYXJzZUludChldmVudC50YXJnZXQudmFsdWUpICsgKGV2ZW50LmRlbHRhIHx8IDApO1xuICAgICAgICAgICAgaWYgKHllYXIgLyAxMDAwID4gMSB8fFxuICAgICAgICAgICAgICAgIChldmVudC5rZXkgPT09IFwiRW50ZXJcIiAmJiAhL1teXFxkXS8udGVzdCh5ZWFyLnRvU3RyaW5nKCkpKSkge1xuICAgICAgICAgICAgICAgIGNoYW5nZVllYXIoeWVhcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEVzc2VudGlhbGx5IGFkZEV2ZW50TGlzdGVuZXIgKyB0cmFja2luZ1xuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgdGhlIGVsZW1lbnQgdG8gYWRkRXZlbnRMaXN0ZW5lciB0b1xuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgdGhlIGV2ZW50IG5hbWVcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciB0aGUgZXZlbnQgaGFuZGxlclxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gYmluZChlbGVtZW50LCBldmVudCwgaGFuZGxlciwgb3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgQXJyYXkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LmZvckVhY2goZnVuY3Rpb24gKGV2KSB7IHJldHVybiBiaW5kKGVsZW1lbnQsIGV2LCBoYW5kbGVyLCBvcHRpb25zKTsgfSk7XG4gICAgICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50LmZvckVhY2goZnVuY3Rpb24gKGVsKSB7IHJldHVybiBiaW5kKGVsLCBldmVudCwgaGFuZGxlciwgb3B0aW9ucyk7IH0pO1xuICAgICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBoYW5kbGVyLCBvcHRpb25zKTtcbiAgICAgICAgICAgIHNlbGYuX2hhbmRsZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgICAgIGhhbmRsZXI6IGhhbmRsZXIsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogb3B0aW9uc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgbW91c2Vkb3duIGhhbmRsZXIgd2hpY2ggbWltaWNzIGNsaWNrLlxuICAgICAgICAgKiBNaW5pbWl6ZXMgbGF0ZW5jeSwgc2luY2Ugd2UgZG9uJ3QgbmVlZCB0byB3YWl0IGZvciBtb3VzZXVwIGluIG1vc3QgY2FzZXMuXG4gICAgICAgICAqIEFsc28sIGF2b2lkcyBoYW5kbGluZyByaWdodCBjbGlja3MuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgdGhlIGV2ZW50IGhhbmRsZXJcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIG9uQ2xpY2soaGFuZGxlcikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChldnQpIHtcbiAgICAgICAgICAgICAgICBldnQud2hpY2ggPT09IDEgJiYgaGFuZGxlcihldnQpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0cmlnZ2VyQ2hhbmdlKCkge1xuICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25DaGFuZ2VcIik7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFkZHMgYWxsIHRoZSBuZWNlc3NhcnkgZXZlbnQgbGlzdGVuZXJzXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBiaW5kRXZlbnRzKCkge1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLndyYXApIHtcbiAgICAgICAgICAgICAgICBbXCJvcGVuXCIsIFwiY2xvc2VcIiwgXCJ0b2dnbGVcIiwgXCJjbGVhclwiXS5mb3JFYWNoKGZ1bmN0aW9uIChldnQpIHtcbiAgICAgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChzZWxmLmVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLVwiICsgZXZ0ICsgXCJdXCIpLCBmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiaW5kKGVsLCBcImNsaWNrXCIsIHNlbGZbZXZ0XSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuaXNNb2JpbGUpIHtcbiAgICAgICAgICAgICAgICBzZXR1cE1vYmlsZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBkZWJvdW5jZWRSZXNpemUgPSBkZWJvdW5jZShvblJlc2l6ZSwgNTApO1xuICAgICAgICAgICAgc2VsZi5fZGVib3VuY2VkQ2hhbmdlID0gZGVib3VuY2UodHJpZ2dlckNoYW5nZSwgREVCT1VOQ0VEX0NIQU5HRV9NUyk7XG4gICAgICAgICAgICBpZiAoc2VsZi5kYXlzQ29udGFpbmVyICYmICEvaVBob25lfGlQYWR8aVBvZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpXG4gICAgICAgICAgICAgICAgYmluZChzZWxmLmRheXNDb250YWluZXIsIFwibW91c2VvdmVyXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBvbk1vdXNlT3ZlcihlLnRhcmdldCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBiaW5kKHdpbmRvdy5kb2N1bWVudC5ib2R5LCBcImtleWRvd25cIiwgb25LZXlEb3duKTtcbiAgICAgICAgICAgIGlmICghc2VsZi5jb25maWcuaW5saW5lICYmICFzZWxmLmNvbmZpZy5zdGF0aWMpXG4gICAgICAgICAgICAgICAgYmluZCh3aW5kb3csIFwicmVzaXplXCIsIGRlYm91bmNlZFJlc2l6ZSk7XG4gICAgICAgICAgICBpZiAod2luZG93Lm9udG91Y2hzdGFydCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGJpbmQod2luZG93LmRvY3VtZW50LCBcInRvdWNoc3RhcnRcIiwgZG9jdW1lbnRDbGljayk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgYmluZCh3aW5kb3cuZG9jdW1lbnQsIFwibW91c2Vkb3duXCIsIG9uQ2xpY2soZG9jdW1lbnRDbGljaykpO1xuICAgICAgICAgICAgYmluZCh3aW5kb3cuZG9jdW1lbnQsIFwiZm9jdXNcIiwgZG9jdW1lbnRDbGljaywgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLmNsaWNrT3BlbnMgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBiaW5kKHNlbGYuX2lucHV0LCBcImZvY3VzXCIsIHNlbGYub3Blbik7XG4gICAgICAgICAgICAgICAgYmluZChzZWxmLl9pbnB1dCwgXCJtb3VzZWRvd25cIiwgb25DbGljayhzZWxmLm9wZW4pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmRheXNDb250YWluZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGJpbmQoc2VsZi5tb250aE5hdiwgXCJtb3VzZWRvd25cIiwgb25DbGljayhvbk1vbnRoTmF2Q2xpY2spKTtcbiAgICAgICAgICAgICAgICBiaW5kKHNlbGYubW9udGhOYXYsIFtcImtleXVwXCIsIFwiaW5jcmVtZW50XCJdLCBvblllYXJJbnB1dCk7XG4gICAgICAgICAgICAgICAgYmluZChzZWxmLmRheXNDb250YWluZXIsIFwibW91c2Vkb3duXCIsIG9uQ2xpY2soc2VsZWN0RGF0ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYudGltZUNvbnRhaW5lciAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgc2VsZi5taW51dGVFbGVtZW50ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICBzZWxmLmhvdXJFbGVtZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB2YXIgc2VsVGV4dCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlLnRhcmdldC5zZWxlY3QoKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJpbmQoc2VsZi50aW1lQ29udGFpbmVyLCBbXCJpbmNyZW1lbnRcIl0sIHVwZGF0ZVRpbWUpO1xuICAgICAgICAgICAgICAgIGJpbmQoc2VsZi50aW1lQ29udGFpbmVyLCBcImJsdXJcIiwgdXBkYXRlVGltZSwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIGJpbmQoc2VsZi50aW1lQ29udGFpbmVyLCBcIm1vdXNlZG93blwiLCBvbkNsaWNrKHRpbWVJbmNyZW1lbnQpKTtcbiAgICAgICAgICAgICAgICBiaW5kKFtzZWxmLmhvdXJFbGVtZW50LCBzZWxmLm1pbnV0ZUVsZW1lbnRdLCBbXCJmb2N1c1wiLCBcImNsaWNrXCJdLCBzZWxUZXh0KTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5zZWNvbmRFbGVtZW50ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIGJpbmQoc2VsZi5zZWNvbmRFbGVtZW50LCBcImZvY3VzXCIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGYuc2Vjb25kRWxlbWVudCAmJiBzZWxmLnNlY29uZEVsZW1lbnQuc2VsZWN0KCk7IH0pO1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLmFtUE0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBiaW5kKHNlbGYuYW1QTSwgXCJtb3VzZWRvd25cIiwgb25DbGljayhmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlVGltZShlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJDaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogU2V0IHRoZSBjYWxlbmRhciB2aWV3IHRvIGEgcGFydGljdWxhciBkYXRlLlxuICAgICAgICAgKiBAcGFyYW0ge0RhdGV9IGp1bXBEYXRlIHRoZSBkYXRlIHRvIHNldCB0aGUgdmlldyB0b1xuICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHRyaWdnZXJDaGFuZ2UgaWYgY2hhbmdlIGV2ZW50cyBzaG91bGQgYmUgdHJpZ2dlcmVkXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBqdW1wVG9EYXRlKGp1bXBEYXRlLCB0cmlnZ2VyQ2hhbmdlKSB7XG4gICAgICAgICAgICB2YXIganVtcFRvID0ganVtcERhdGUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gc2VsZi5wYXJzZURhdGUoanVtcERhdGUpXG4gICAgICAgICAgICAgICAgOiBzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iaiB8fFxuICAgICAgICAgICAgICAgICAgICAoc2VsZi5jb25maWcubWluRGF0ZSAmJiBzZWxmLmNvbmZpZy5taW5EYXRlID4gc2VsZi5ub3dcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi5jb25maWcubWluRGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmNvbmZpZy5tYXhEYXRlICYmIHNlbGYuY29uZmlnLm1heERhdGUgPCBzZWxmLm5vd1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi5jb25maWcubWF4RGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc2VsZi5ub3cpO1xuICAgICAgICAgICAgdmFyIG9sZFllYXIgPSBzZWxmLmN1cnJlbnRZZWFyO1xuICAgICAgICAgICAgdmFyIG9sZE1vbnRoID0gc2VsZi5jdXJyZW50TW9udGg7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChqdW1wVG8gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyID0ganVtcFRvLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudE1vbnRoID0ganVtcFRvLmdldE1vbnRoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgICAgICAgIGUubWVzc2FnZSA9IFwiSW52YWxpZCBkYXRlIHN1cHBsaWVkOiBcIiArIGp1bXBUbztcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5lcnJvckhhbmRsZXIoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHJpZ2dlckNoYW5nZSAmJiBzZWxmLmN1cnJlbnRZZWFyICE9PSBvbGRZZWFyKSB7XG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25ZZWFyQ2hhbmdlXCIpO1xuICAgICAgICAgICAgICAgIGJ1aWxkTW9udGhTd2l0Y2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlICYmXG4gICAgICAgICAgICAgICAgKHNlbGYuY3VycmVudFllYXIgIT09IG9sZFllYXIgfHwgc2VsZi5jdXJyZW50TW9udGggIT09IG9sZE1vbnRoKSkge1xuICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uTW9udGhDaGFuZ2VcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLnJlZHJhdygpO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgdXAvZG93biBhcnJvdyBoYW5kbGVyIGZvciB0aW1lIGlucHV0c1xuICAgICAgICAgKiBAcGFyYW0ge0V2ZW50fSBlIHRoZSBjbGljayBldmVudFxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gdGltZUluY3JlbWVudChlKSB7XG4gICAgICAgICAgICBpZiAofmUudGFyZ2V0LmNsYXNzTmFtZS5pbmRleE9mKFwiYXJyb3dcIikpXG4gICAgICAgICAgICAgICAgaW5jcmVtZW50TnVtSW5wdXQoZSwgZS50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYXJyb3dVcFwiKSA/IDEgOiAtMSk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluY3JlbWVudHMvZGVjcmVtZW50cyB0aGUgdmFsdWUgb2YgaW5wdXQgYXNzb2NpLVxuICAgICAgICAgKiBhdGVkIHdpdGggdGhlIHVwL2Rvd24gYXJyb3cgYnkgZGlzcGF0Y2hpbmcgYW5cbiAgICAgICAgICogXCJpbmNyZW1lbnRcIiBldmVudCBvbiB0aGUgaW5wdXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RXZlbnR9IGUgdGhlIGNsaWNrIGV2ZW50XG4gICAgICAgICAqIEBwYXJhbSB7TnVtYmVyfSBkZWx0YSB0aGUgZGlmZiAodXN1YWxseSAxIG9yIC0xKVxuICAgICAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGlucHV0RWxlbSB0aGUgaW5wdXQgZWxlbWVudFxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gaW5jcmVtZW50TnVtSW5wdXQoZSwgZGVsdGEsIGlucHV0RWxlbSkge1xuICAgICAgICAgICAgdmFyIHRhcmdldCA9IGUgJiYgZS50YXJnZXQ7XG4gICAgICAgICAgICB2YXIgaW5wdXQgPSBpbnB1dEVsZW0gfHxcbiAgICAgICAgICAgICAgICAodGFyZ2V0ICYmIHRhcmdldC5wYXJlbnROb2RlICYmIHRhcmdldC5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpO1xuICAgICAgICAgICAgdmFyIGV2ZW50ID0gY3JlYXRlRXZlbnQoXCJpbmNyZW1lbnRcIik7XG4gICAgICAgICAgICBldmVudC5kZWx0YSA9IGRlbHRhO1xuICAgICAgICAgICAgaW5wdXQgJiYgaW5wdXQuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYnVpbGQoKSB7XG4gICAgICAgICAgICB2YXIgZnJhZ21lbnQgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3ItY2FsZW5kYXJcIik7XG4gICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnRhYkluZGV4ID0gLTE7XG4gICAgICAgICAgICBpZiAoIXNlbGYuY29uZmlnLm5vQ2FsZW5kYXIpIHtcbiAgICAgICAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChidWlsZE1vbnRoTmF2KCkpO1xuICAgICAgICAgICAgICAgIHNlbGYuaW5uZXJDb250YWluZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLWlubmVyQ29udGFpbmVyXCIpO1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy53ZWVrTnVtYmVycykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX2EgPSBidWlsZFdlZWtzKCksIHdlZWtXcmFwcGVyID0gX2Eud2Vla1dyYXBwZXIsIHdlZWtOdW1iZXJzID0gX2Eud2Vla051bWJlcnM7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuaW5uZXJDb250YWluZXIuYXBwZW5kQ2hpbGQod2Vla1dyYXBwZXIpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLndlZWtOdW1iZXJzID0gd2Vla051bWJlcnM7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYud2Vla1dyYXBwZXIgPSB3ZWVrV3JhcHBlcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2VsZi5yQ29udGFpbmVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci1yQ29udGFpbmVyXCIpO1xuICAgICAgICAgICAgICAgIHNlbGYuckNvbnRhaW5lci5hcHBlbmRDaGlsZChidWlsZFdlZWtkYXlzKCkpO1xuICAgICAgICAgICAgICAgIGlmICghc2VsZi5kYXlzQ29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZGF5c0NvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3ItZGF5c1wiKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5kYXlzQ29udGFpbmVyLnRhYkluZGV4ID0gLTE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJ1aWxkRGF5cygpO1xuICAgICAgICAgICAgICAgIHNlbGYuckNvbnRhaW5lci5hcHBlbmRDaGlsZChzZWxmLmRheXNDb250YWluZXIpO1xuICAgICAgICAgICAgICAgIHNlbGYuaW5uZXJDb250YWluZXIuYXBwZW5kQ2hpbGQoc2VsZi5yQ29udGFpbmVyKTtcbiAgICAgICAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChzZWxmLmlubmVyQ29udGFpbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5lbmFibGVUaW1lKSB7XG4gICAgICAgICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoYnVpbGRUaW1lKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5jYWxlbmRhckNvbnRhaW5lciwgXCJyYW5nZU1vZGVcIiwgc2VsZi5jb25maWcubW9kZSA9PT0gXCJyYW5nZVwiKTtcbiAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIFwiYW5pbWF0ZVwiLCBzZWxmLmNvbmZpZy5hbmltYXRlID09PSB0cnVlKTtcbiAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIFwibXVsdGlNb250aFwiLCBzZWxmLmNvbmZpZy5zaG93TW9udGhzID4gMSk7XG4gICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLmFwcGVuZENoaWxkKGZyYWdtZW50KTtcbiAgICAgICAgICAgIHZhciBjdXN0b21BcHBlbmQgPSBzZWxmLmNvbmZpZy5hcHBlbmRUbyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcuYXBwZW5kVG8ubm9kZVR5cGUgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5pbmxpbmUgfHwgc2VsZi5jb25maWcuc3RhdGljKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKHNlbGYuY29uZmlnLmlubGluZSA/IFwiaW5saW5lXCIgOiBcInN0YXRpY1wiKTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuaW5saW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY3VzdG9tQXBwZW5kICYmIHNlbGYuZWxlbWVudC5wYXJlbnROb2RlKVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIHNlbGYuX2lucHV0Lm5leHRTaWJsaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2VsZi5jb25maWcuYXBwZW5kVG8gIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLmFwcGVuZFRvLmFwcGVuZENoaWxkKHNlbGYuY2FsZW5kYXJDb250YWluZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuc3RhdGljKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB3cmFwcGVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci13cmFwcGVyXCIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5lbGVtZW50LnBhcmVudE5vZGUpXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUod3JhcHBlciwgc2VsZi5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChzZWxmLmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5hbHRJbnB1dClcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoc2VsZi5hbHRJbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoc2VsZi5jYWxlbmRhckNvbnRhaW5lcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzZWxmLmNvbmZpZy5zdGF0aWMgJiYgIXNlbGYuY29uZmlnLmlubGluZSlcbiAgICAgICAgICAgICAgICAoc2VsZi5jb25maWcuYXBwZW5kVG8gIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLmFwcGVuZFRvXG4gICAgICAgICAgICAgICAgICAgIDogd2luZG93LmRvY3VtZW50LmJvZHkpLmFwcGVuZENoaWxkKHNlbGYuY2FsZW5kYXJDb250YWluZXIpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNyZWF0ZURheShjbGFzc05hbWUsIGRhdGUsIGRheU51bWJlciwgaSkge1xuICAgICAgICAgICAgdmFyIGRhdGVJc0VuYWJsZWQgPSBpc0VuYWJsZWQoZGF0ZSwgdHJ1ZSksIGRheUVsZW1lbnQgPSBjcmVhdGVFbGVtZW50KFwic3BhblwiLCBcImZsYXRwaWNrci1kYXkgXCIgKyBjbGFzc05hbWUsIGRhdGUuZ2V0RGF0ZSgpLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgZGF5RWxlbWVudC5kYXRlT2JqID0gZGF0ZTtcbiAgICAgICAgICAgIGRheUVsZW1lbnQuJGkgPSBpO1xuICAgICAgICAgICAgZGF5RWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsIHNlbGYuZm9ybWF0RGF0ZShkYXRlLCBzZWxmLmNvbmZpZy5hcmlhRGF0ZUZvcm1hdCkpO1xuICAgICAgICAgICAgaWYgKGNsYXNzTmFtZS5pbmRleE9mKFwiaGlkZGVuXCIpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIGNvbXBhcmVEYXRlcyhkYXRlLCBzZWxmLm5vdykgPT09IDApIHtcbiAgICAgICAgICAgICAgICBzZWxmLnRvZGF5RGF0ZUVsZW0gPSBkYXlFbGVtZW50O1xuICAgICAgICAgICAgICAgIGRheUVsZW1lbnQuY2xhc3NMaXN0LmFkZChcInRvZGF5XCIpO1xuICAgICAgICAgICAgICAgIGRheUVsZW1lbnQuc2V0QXR0cmlidXRlKFwiYXJpYS1jdXJyZW50XCIsIFwiZGF0ZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRlSXNFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgZGF5RWxlbWVudC50YWJJbmRleCA9IC0xO1xuICAgICAgICAgICAgICAgIGlmIChpc0RhdGVTZWxlY3RlZChkYXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBkYXlFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJzZWxlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVFbGVtID0gZGF5RWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1vZGUgPT09IFwicmFuZ2VcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9nZ2xlQ2xhc3MoZGF5RWxlbWVudCwgXCJzdGFydFJhbmdlXCIsIHNlbGYuc2VsZWN0ZWREYXRlc1swXSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVEYXRlcyhkYXRlLCBzZWxmLnNlbGVjdGVkRGF0ZXNbMF0sIHRydWUpID09PSAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZUNsYXNzKGRheUVsZW1lbnQsIFwiZW5kUmFuZ2VcIiwgc2VsZi5zZWxlY3RlZERhdGVzWzFdICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyZURhdGVzKGRhdGUsIHNlbGYuc2VsZWN0ZWREYXRlc1sxXSwgdHJ1ZSkgPT09IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gXCJuZXh0TW9udGhEYXlcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXlFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJpblJhbmdlXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF5RWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiZmxhdHBpY2tyLWRpc2FibGVkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1vZGUgPT09IFwicmFuZ2VcIikge1xuICAgICAgICAgICAgICAgIGlmIChpc0RhdGVJblJhbmdlKGRhdGUpICYmICFpc0RhdGVTZWxlY3RlZChkYXRlKSlcbiAgICAgICAgICAgICAgICAgICAgZGF5RWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiaW5SYW5nZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLndlZWtOdW1iZXJzICYmXG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcuc2hvd01vbnRocyA9PT0gMSAmJlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZSAhPT0gXCJwcmV2TW9udGhEYXlcIiAmJlxuICAgICAgICAgICAgICAgIGRheU51bWJlciAlIDcgPT09IDEpIHtcbiAgICAgICAgICAgICAgICBzZWxmLndlZWtOdW1iZXJzLmluc2VydEFkamFjZW50SFRNTChcImJlZm9yZWVuZFwiLCBcIjxzcGFuIGNsYXNzPSdmbGF0cGlja3ItZGF5Jz5cIiArIHNlbGYuY29uZmlnLmdldFdlZWsoZGF0ZSkgKyBcIjwvc3Bhbj5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbkRheUNyZWF0ZVwiLCBkYXlFbGVtZW50KTtcbiAgICAgICAgICAgIHJldHVybiBkYXlFbGVtZW50O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGZvY3VzT25EYXlFbGVtKHRhcmdldE5vZGUpIHtcbiAgICAgICAgICAgIHRhcmdldE5vZGUuZm9jdXMoKTtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIpXG4gICAgICAgICAgICAgICAgb25Nb3VzZU92ZXIodGFyZ2V0Tm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZ2V0Rmlyc3RBdmFpbGFibGVEYXkoZGVsdGEpIHtcbiAgICAgICAgICAgIHZhciBzdGFydE1vbnRoID0gZGVsdGEgPiAwID8gMCA6IHNlbGYuY29uZmlnLnNob3dNb250aHMgLSAxO1xuICAgICAgICAgICAgdmFyIGVuZE1vbnRoID0gZGVsdGEgPiAwID8gc2VsZi5jb25maWcuc2hvd01vbnRocyA6IC0xO1xuICAgICAgICAgICAgZm9yICh2YXIgbSA9IHN0YXJ0TW9udGg7IG0gIT0gZW5kTW9udGg7IG0gKz0gZGVsdGEpIHtcbiAgICAgICAgICAgICAgICB2YXIgbW9udGggPSBzZWxmLmRheXNDb250YWluZXIuY2hpbGRyZW5bbV07XG4gICAgICAgICAgICAgICAgdmFyIHN0YXJ0SW5kZXggPSBkZWx0YSA+IDAgPyAwIDogbW9udGguY2hpbGRyZW4ubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICB2YXIgZW5kSW5kZXggPSBkZWx0YSA+IDAgPyBtb250aC5jaGlsZHJlbi5sZW5ndGggOiAtMTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRleDsgaSAhPSBlbmRJbmRleDsgaSArPSBkZWx0YSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IG1vbnRoLmNoaWxkcmVuW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYy5jbGFzc05hbWUuaW5kZXhPZihcImhpZGRlblwiKSA9PT0gLTEgJiYgaXNFbmFibGVkKGMuZGF0ZU9iaikpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGdldE5leHRBdmFpbGFibGVEYXkoY3VycmVudCwgZGVsdGEpIHtcbiAgICAgICAgICAgIHZhciBnaXZlbk1vbnRoID0gY3VycmVudC5jbGFzc05hbWUuaW5kZXhPZihcIk1vbnRoXCIpID09PSAtMVxuICAgICAgICAgICAgICAgID8gY3VycmVudC5kYXRlT2JqLmdldE1vbnRoKClcbiAgICAgICAgICAgICAgICA6IHNlbGYuY3VycmVudE1vbnRoO1xuICAgICAgICAgICAgdmFyIGVuZE1vbnRoID0gZGVsdGEgPiAwID8gc2VsZi5jb25maWcuc2hvd01vbnRocyA6IC0xO1xuICAgICAgICAgICAgdmFyIGxvb3BEZWx0YSA9IGRlbHRhID4gMCA/IDEgOiAtMTtcbiAgICAgICAgICAgIGZvciAodmFyIG0gPSBnaXZlbk1vbnRoIC0gc2VsZi5jdXJyZW50TW9udGg7IG0gIT0gZW5kTW9udGg7IG0gKz0gbG9vcERlbHRhKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1vbnRoID0gc2VsZi5kYXlzQ29udGFpbmVyLmNoaWxkcmVuW21dO1xuICAgICAgICAgICAgICAgIHZhciBzdGFydEluZGV4ID0gZ2l2ZW5Nb250aCAtIHNlbGYuY3VycmVudE1vbnRoID09PSBtXG4gICAgICAgICAgICAgICAgICAgID8gY3VycmVudC4kaSArIGRlbHRhXG4gICAgICAgICAgICAgICAgICAgIDogZGVsdGEgPCAwXG4gICAgICAgICAgICAgICAgICAgICAgICA/IG1vbnRoLmNoaWxkcmVuLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICAgICAgICAgIDogMDtcbiAgICAgICAgICAgICAgICB2YXIgbnVtTW9udGhEYXlzID0gbW9udGguY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBzdGFydEluZGV4OyBpID49IDAgJiYgaSA8IG51bU1vbnRoRGF5cyAmJiBpICE9IChkZWx0YSA+IDAgPyBudW1Nb250aERheXMgOiAtMSk7IGkgKz0gbG9vcERlbHRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjID0gbW9udGguY2hpbGRyZW5baV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChjLmNsYXNzTmFtZS5pbmRleE9mKFwiaGlkZGVuXCIpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgaXNFbmFibGVkKGMuZGF0ZU9iaikgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIE1hdGguYWJzKGN1cnJlbnQuJGkgLSBpKSA+PSBNYXRoLmFicyhkZWx0YSkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm9jdXNPbkRheUVsZW0oYyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5jaGFuZ2VNb250aChsb29wRGVsdGEpO1xuICAgICAgICAgICAgZm9jdXNPbkRheShnZXRGaXJzdEF2YWlsYWJsZURheShsb29wRGVsdGEpLCAwKTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZm9jdXNPbkRheShjdXJyZW50LCBvZmZzZXQpIHtcbiAgICAgICAgICAgIHZhciBkYXlGb2N1c2VkID0gaXNJblZpZXcoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCB8fCBkb2N1bWVudC5ib2R5KTtcbiAgICAgICAgICAgIHZhciBzdGFydEVsZW0gPSBjdXJyZW50ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IGN1cnJlbnRcbiAgICAgICAgICAgICAgICA6IGRheUZvY3VzZWRcbiAgICAgICAgICAgICAgICAgICAgPyBkb2N1bWVudC5hY3RpdmVFbGVtZW50XG4gICAgICAgICAgICAgICAgICAgIDogc2VsZi5zZWxlY3RlZERhdGVFbGVtICE9PSB1bmRlZmluZWQgJiYgaXNJblZpZXcoc2VsZi5zZWxlY3RlZERhdGVFbGVtKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLnNlbGVjdGVkRGF0ZUVsZW1cbiAgICAgICAgICAgICAgICAgICAgICAgIDogc2VsZi50b2RheURhdGVFbGVtICE9PSB1bmRlZmluZWQgJiYgaXNJblZpZXcoc2VsZi50b2RheURhdGVFbGVtKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi50b2RheURhdGVFbGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBnZXRGaXJzdEF2YWlsYWJsZURheShvZmZzZXQgPiAwID8gMSA6IC0xKTtcbiAgICAgICAgICAgIGlmIChzdGFydEVsZW0gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5faW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICAgIGlmICghZGF5Rm9jdXNlZClcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9jdXNPbkRheUVsZW0oc3RhcnRFbGVtKTtcbiAgICAgICAgICAgIGdldE5leHRBdmFpbGFibGVEYXkoc3RhcnRFbGVtLCBvZmZzZXQpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkTW9udGhEYXlzKHllYXIsIG1vbnRoKSB7XG4gICAgICAgICAgICB2YXIgZmlyc3RPZk1vbnRoID0gKG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxKS5nZXREYXkoKSAtIHNlbGYubDEwbi5maXJzdERheU9mV2VlayArIDcpICUgNztcbiAgICAgICAgICAgIHZhciBwcmV2TW9udGhEYXlzID0gc2VsZi51dGlscy5nZXREYXlzSW5Nb250aCgobW9udGggLSAxICsgMTIpICUgMTIpO1xuICAgICAgICAgICAgdmFyIGRheXNJbk1vbnRoID0gc2VsZi51dGlscy5nZXREYXlzSW5Nb250aChtb250aCksIGRheXMgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLCBpc011bHRpTW9udGggPSBzZWxmLmNvbmZpZy5zaG93TW9udGhzID4gMSwgcHJldk1vbnRoRGF5Q2xhc3MgPSBpc011bHRpTW9udGggPyBcInByZXZNb250aERheSBoaWRkZW5cIiA6IFwicHJldk1vbnRoRGF5XCIsIG5leHRNb250aERheUNsYXNzID0gaXNNdWx0aU1vbnRoID8gXCJuZXh0TW9udGhEYXkgaGlkZGVuXCIgOiBcIm5leHRNb250aERheVwiO1xuICAgICAgICAgICAgdmFyIGRheU51bWJlciA9IHByZXZNb250aERheXMgKyAxIC0gZmlyc3RPZk1vbnRoLCBkYXlJbmRleCA9IDA7XG4gICAgICAgICAgICAvLyBwcmVwZW5kIGRheXMgZnJvbSB0aGUgZW5kaW5nIG9mIHByZXZpb3VzIG1vbnRoXG4gICAgICAgICAgICBmb3IgKDsgZGF5TnVtYmVyIDw9IHByZXZNb250aERheXM7IGRheU51bWJlcisrLCBkYXlJbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgZGF5cy5hcHBlbmRDaGlsZChjcmVhdGVEYXkocHJldk1vbnRoRGF5Q2xhc3MsIG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF5TnVtYmVyKSwgZGF5TnVtYmVyLCBkYXlJbmRleCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU3RhcnQgYXQgMSBzaW5jZSB0aGVyZSBpcyBubyAwdGggZGF5XG4gICAgICAgICAgICBmb3IgKGRheU51bWJlciA9IDE7IGRheU51bWJlciA8PSBkYXlzSW5Nb250aDsgZGF5TnVtYmVyKyssIGRheUluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBkYXlzLmFwcGVuZENoaWxkKGNyZWF0ZURheShcIlwiLCBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgZGF5TnVtYmVyKSwgZGF5TnVtYmVyLCBkYXlJbmRleCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYXBwZW5kIGRheXMgZnJvbSB0aGUgbmV4dCBtb250aFxuICAgICAgICAgICAgZm9yICh2YXIgZGF5TnVtID0gZGF5c0luTW9udGggKyAxOyBkYXlOdW0gPD0gNDIgLSBmaXJzdE9mTW9udGggJiZcbiAgICAgICAgICAgICAgICAoc2VsZi5jb25maWcuc2hvd01vbnRocyA9PT0gMSB8fCBkYXlJbmRleCAlIDcgIT09IDApOyBkYXlOdW0rKywgZGF5SW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGRheXMuYXBwZW5kQ2hpbGQoY3JlYXRlRGF5KG5leHRNb250aERheUNsYXNzLCBuZXcgRGF0ZSh5ZWFyLCBtb250aCArIDEsIGRheU51bSAlIGRheXNJbk1vbnRoKSwgZGF5TnVtLCBkYXlJbmRleCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy91cGRhdGVOYXZpZ2F0aW9uQ3VycmVudE1vbnRoKCk7XG4gICAgICAgICAgICB2YXIgZGF5Q29udGFpbmVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImRheUNvbnRhaW5lclwiKTtcbiAgICAgICAgICAgIGRheUNvbnRhaW5lci5hcHBlbmRDaGlsZChkYXlzKTtcbiAgICAgICAgICAgIHJldHVybiBkYXlDb250YWluZXI7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYnVpbGREYXlzKCkge1xuICAgICAgICAgICAgaWYgKHNlbGYuZGF5c0NvbnRhaW5lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2xlYXJOb2RlKHNlbGYuZGF5c0NvbnRhaW5lcik7XG4gICAgICAgICAgICAvLyBUT0RPOiB3ZWVrIG51bWJlcnMgZm9yIGVhY2ggbW9udGhcbiAgICAgICAgICAgIGlmIChzZWxmLndlZWtOdW1iZXJzKVxuICAgICAgICAgICAgICAgIGNsZWFyTm9kZShzZWxmLndlZWtOdW1iZXJzKTtcbiAgICAgICAgICAgIHZhciBmcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLmNvbmZpZy5zaG93TW9udGhzOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgZCA9IG5ldyBEYXRlKHNlbGYuY3VycmVudFllYXIsIHNlbGYuY3VycmVudE1vbnRoLCAxKTtcbiAgICAgICAgICAgICAgICBkLnNldE1vbnRoKHNlbGYuY3VycmVudE1vbnRoICsgaSk7XG4gICAgICAgICAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChidWlsZE1vbnRoRGF5cyhkLmdldEZ1bGxZZWFyKCksIGQuZ2V0TW9udGgoKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5kYXlzQ29udGFpbmVyLmFwcGVuZENoaWxkKGZyYWcpO1xuICAgICAgICAgICAgc2VsZi5kYXlzID0gc2VsZi5kYXlzQ29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubW9kZSA9PT0gXCJyYW5nZVwiICYmIHNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICBvbk1vdXNlT3ZlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkTW9udGhTd2l0Y2goKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuc2hvd01vbnRocyA+IDEgfHxcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5tb250aFNlbGVjdG9yVHlwZSAhPT0gXCJkcm9wZG93blwiKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHZhciBzaG91bGRCdWlsZE1vbnRoID0gZnVuY3Rpb24gKG1vbnRoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1pbkRhdGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyID09PSBzZWxmLmNvbmZpZy5taW5EYXRlLmdldEZ1bGxZZWFyKCkgJiZcbiAgICAgICAgICAgICAgICAgICAgbW9udGggPCBzZWxmLmNvbmZpZy5taW5EYXRlLmdldE1vbnRoKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gIShzZWxmLmNvbmZpZy5tYXhEYXRlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhciA9PT0gc2VsZi5jb25maWcubWF4RGF0ZS5nZXRGdWxsWWVhcigpICYmXG4gICAgICAgICAgICAgICAgICAgIG1vbnRoID4gc2VsZi5jb25maWcubWF4RGF0ZS5nZXRNb250aCgpKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBzZWxmLm1vbnRoc0Ryb3Bkb3duQ29udGFpbmVyLnRhYkluZGV4ID0gLTE7XG4gICAgICAgICAgICBzZWxmLm1vbnRoc0Ryb3Bkb3duQ29udGFpbmVyLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNob3VsZEJ1aWxkTW9udGgoaSkpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIHZhciBtb250aCA9IGNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiwgXCJmbGF0cGlja3ItbW9udGhEcm9wZG93bi1tb250aFwiKTtcbiAgICAgICAgICAgICAgICBtb250aC52YWx1ZSA9IG5ldyBEYXRlKHNlbGYuY3VycmVudFllYXIsIGkpLmdldE1vbnRoKCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICBtb250aC50ZXh0Q29udGVudCA9IG1vbnRoVG9TdHIoaSwgc2VsZi5jb25maWcuc2hvcnRoYW5kQ3VycmVudE1vbnRoLCBzZWxmLmwxMG4pO1xuICAgICAgICAgICAgICAgIG1vbnRoLnRhYkluZGV4ID0gLTE7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY3VycmVudE1vbnRoID09PSBpKSB7XG4gICAgICAgICAgICAgICAgICAgIG1vbnRoLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2VsZi5tb250aHNEcm9wZG93bkNvbnRhaW5lci5hcHBlbmRDaGlsZChtb250aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gYnVpbGRNb250aCgpIHtcbiAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLW1vbnRoXCIpO1xuICAgICAgICAgICAgdmFyIG1vbnRoTmF2RnJhZ21lbnQgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgICAgICAgdmFyIG1vbnRoRWxlbWVudDtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5zaG93TW9udGhzID4gMSB8fFxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1vbnRoU2VsZWN0b3JUeXBlID09PSBcInN0YXRpY1wiKSB7XG4gICAgICAgICAgICAgICAgbW9udGhFbGVtZW50ID0gY3JlYXRlRWxlbWVudChcInNwYW5cIiwgXCJjdXItbW9udGhcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxmLm1vbnRoc0Ryb3Bkb3duQ29udGFpbmVyID0gY3JlYXRlRWxlbWVudChcInNlbGVjdFwiLCBcImZsYXRwaWNrci1tb250aERyb3Bkb3duLW1vbnRoc1wiKTtcbiAgICAgICAgICAgICAgICBiaW5kKHNlbGYubW9udGhzRHJvcGRvd25Db250YWluZXIsIFwiY2hhbmdlXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdGVkTW9udGggPSBwYXJzZUludCh0YXJnZXQudmFsdWUsIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGFuZ2VNb250aChzZWxlY3RlZE1vbnRoIC0gc2VsZi5jdXJyZW50TW9udGgpO1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbk1vbnRoQ2hhbmdlXCIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJ1aWxkTW9udGhTd2l0Y2goKTtcbiAgICAgICAgICAgICAgICBtb250aEVsZW1lbnQgPSBzZWxmLm1vbnRoc0Ryb3Bkb3duQ29udGFpbmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHllYXJJbnB1dCA9IGNyZWF0ZU51bWJlcklucHV0KFwiY3VyLXllYXJcIiwgeyB0YWJpbmRleDogXCItMVwiIH0pO1xuICAgICAgICAgICAgdmFyIHllYXJFbGVtZW50ID0geWVhcklucHV0LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaW5wdXRcIilbMF07XG4gICAgICAgICAgICB5ZWFyRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsIHNlbGYubDEwbi55ZWFyQXJpYUxhYmVsKTtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5taW5EYXRlKSB7XG4gICAgICAgICAgICAgICAgeWVhckVsZW1lbnQuc2V0QXR0cmlidXRlKFwibWluXCIsIHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tYXhEYXRlKSB7XG4gICAgICAgICAgICAgICAgeWVhckVsZW1lbnQuc2V0QXR0cmlidXRlKFwibWF4XCIsIHNlbGYuY29uZmlnLm1heERhdGUuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICB5ZWFyRWxlbWVudC5kaXNhYmxlZCA9XG4gICAgICAgICAgICAgICAgICAgICEhc2VsZi5jb25maWcubWluRGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcubWluRGF0ZS5nZXRGdWxsWWVhcigpID09PSBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgY3VycmVudE1vbnRoID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci1jdXJyZW50LW1vbnRoXCIpO1xuICAgICAgICAgICAgY3VycmVudE1vbnRoLmFwcGVuZENoaWxkKG1vbnRoRWxlbWVudCk7XG4gICAgICAgICAgICBjdXJyZW50TW9udGguYXBwZW5kQ2hpbGQoeWVhcklucHV0KTtcbiAgICAgICAgICAgIG1vbnRoTmF2RnJhZ21lbnQuYXBwZW5kQ2hpbGQoY3VycmVudE1vbnRoKTtcbiAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChtb250aE5hdkZyYWdtZW50KTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyOiBjb250YWluZXIsXG4gICAgICAgICAgICAgICAgeWVhckVsZW1lbnQ6IHllYXJFbGVtZW50LFxuICAgICAgICAgICAgICAgIG1vbnRoRWxlbWVudDogbW9udGhFbGVtZW50XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkTW9udGhzKCkge1xuICAgICAgICAgICAgY2xlYXJOb2RlKHNlbGYubW9udGhOYXYpO1xuICAgICAgICAgICAgc2VsZi5tb250aE5hdi5hcHBlbmRDaGlsZChzZWxmLnByZXZNb250aE5hdik7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuc2hvd01vbnRocykge1xuICAgICAgICAgICAgICAgIHNlbGYueWVhckVsZW1lbnRzID0gW107XG4gICAgICAgICAgICAgICAgc2VsZi5tb250aEVsZW1lbnRzID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBtID0gc2VsZi5jb25maWcuc2hvd01vbnRoczsgbS0tOykge1xuICAgICAgICAgICAgICAgIHZhciBtb250aCA9IGJ1aWxkTW9udGgoKTtcbiAgICAgICAgICAgICAgICBzZWxmLnllYXJFbGVtZW50cy5wdXNoKG1vbnRoLnllYXJFbGVtZW50KTtcbiAgICAgICAgICAgICAgICBzZWxmLm1vbnRoRWxlbWVudHMucHVzaChtb250aC5tb250aEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHNlbGYubW9udGhOYXYuYXBwZW5kQ2hpbGQobW9udGguY29udGFpbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYubW9udGhOYXYuYXBwZW5kQ2hpbGQoc2VsZi5uZXh0TW9udGhOYXYpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkTW9udGhOYXYoKSB7XG4gICAgICAgICAgICBzZWxmLm1vbnRoTmF2ID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci1tb250aHNcIik7XG4gICAgICAgICAgICBzZWxmLnllYXJFbGVtZW50cyA9IFtdO1xuICAgICAgICAgICAgc2VsZi5tb250aEVsZW1lbnRzID0gW107XG4gICAgICAgICAgICBzZWxmLnByZXZNb250aE5hdiA9IGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIFwiZmxhdHBpY2tyLXByZXYtbW9udGhcIik7XG4gICAgICAgICAgICBzZWxmLnByZXZNb250aE5hdi5pbm5lckhUTUwgPSBzZWxmLmNvbmZpZy5wcmV2QXJyb3c7XG4gICAgICAgICAgICBzZWxmLm5leHRNb250aE5hdiA9IGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIFwiZmxhdHBpY2tyLW5leHQtbW9udGhcIik7XG4gICAgICAgICAgICBzZWxmLm5leHRNb250aE5hdi5pbm5lckhUTUwgPSBzZWxmLmNvbmZpZy5uZXh0QXJyb3c7XG4gICAgICAgICAgICBidWlsZE1vbnRocygpO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYsIFwiX2hpZGVQcmV2TW9udGhBcnJvd1wiLCB7XG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLl9faGlkZVByZXZNb250aEFycm93OyB9LFxuICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKGJvb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuX19oaWRlUHJldk1vbnRoQXJyb3cgIT09IGJvb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYucHJldk1vbnRoTmF2LCBcImZsYXRwaWNrci1kaXNhYmxlZFwiLCBib29sKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19oaWRlUHJldk1vbnRoQXJyb3cgPSBib29sO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZiwgXCJfaGlkZU5leHRNb250aEFycm93XCIsIHtcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGYuX19oaWRlTmV4dE1vbnRoQXJyb3c7IH0sXG4gICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoYm9vbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5fX2hpZGVOZXh0TW9udGhBcnJvdyAhPT0gYm9vbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5uZXh0TW9udGhOYXYsIFwiZmxhdHBpY2tyLWRpc2FibGVkXCIsIGJvb2wpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2hpZGVOZXh0TW9udGhBcnJvdyA9IGJvb2w7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXJFbGVtZW50ID0gc2VsZi55ZWFyRWxlbWVudHNbMF07XG4gICAgICAgICAgICB1cGRhdGVOYXZpZ2F0aW9uQ3VycmVudE1vbnRoKCk7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi5tb250aE5hdjtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBidWlsZFRpbWUoKSB7XG4gICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJoYXNUaW1lXCIpO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm5vQ2FsZW5kYXIpXG4gICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwibm9DYWxlbmRhclwiKTtcbiAgICAgICAgICAgIHNlbGYudGltZUNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3ItdGltZVwiKTtcbiAgICAgICAgICAgIHNlbGYudGltZUNvbnRhaW5lci50YWJJbmRleCA9IC0xO1xuICAgICAgICAgICAgdmFyIHNlcGFyYXRvciA9IGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIFwiZmxhdHBpY2tyLXRpbWUtc2VwYXJhdG9yXCIsIFwiOlwiKTtcbiAgICAgICAgICAgIHZhciBob3VySW5wdXQgPSBjcmVhdGVOdW1iZXJJbnB1dChcImZsYXRwaWNrci1ob3VyXCIsIHtcbiAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogc2VsZi5sMTBuLmhvdXJBcmlhTGFiZWxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudCA9IGhvdXJJbnB1dC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlucHV0XCIpWzBdO1xuICAgICAgICAgICAgdmFyIG1pbnV0ZUlucHV0ID0gY3JlYXRlTnVtYmVySW5wdXQoXCJmbGF0cGlja3ItbWludXRlXCIsIHtcbiAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogc2VsZi5sMTBuLm1pbnV0ZUFyaWFMYWJlbFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQgPSBtaW51dGVJbnB1dC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlucHV0XCIpWzBdO1xuICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudC50YWJJbmRleCA9IHNlbGYubWludXRlRWxlbWVudC50YWJJbmRleCA9IC0xO1xuICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudC52YWx1ZSA9IHBhZChzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9ialxuICAgICAgICAgICAgICAgID8gc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmouZ2V0SG91cnMoKVxuICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcudGltZV8yNGhyXG4gICAgICAgICAgICAgICAgICAgID8gc2VsZi5jb25maWcuZGVmYXVsdEhvdXJcbiAgICAgICAgICAgICAgICAgICAgOiBtaWxpdGFyeTJhbXBtKHNlbGYuY29uZmlnLmRlZmF1bHRIb3VyKSk7XG4gICAgICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQudmFsdWUgPSBwYWQoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmpcbiAgICAgICAgICAgICAgICA/IHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqLmdldE1pbnV0ZXMoKVxuICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcuZGVmYXVsdE1pbnV0ZSk7XG4gICAgICAgICAgICBzZWxmLmhvdXJFbGVtZW50LnNldEF0dHJpYnV0ZShcInN0ZXBcIiwgc2VsZi5jb25maWcuaG91ckluY3JlbWVudC50b1N0cmluZygpKTtcbiAgICAgICAgICAgIHNlbGYubWludXRlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJzdGVwXCIsIHNlbGYuY29uZmlnLm1pbnV0ZUluY3JlbWVudC50b1N0cmluZygpKTtcbiAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQuc2V0QXR0cmlidXRlKFwibWluXCIsIHNlbGYuY29uZmlnLnRpbWVfMjRociA/IFwiMFwiIDogXCIxXCIpO1xuICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtYXhcIiwgc2VsZi5jb25maWcudGltZV8yNGhyID8gXCIyM1wiIDogXCIxMlwiKTtcbiAgICAgICAgICAgIHNlbGYubWludXRlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtaW5cIiwgXCIwXCIpO1xuICAgICAgICAgICAgc2VsZi5taW51dGVFbGVtZW50LnNldEF0dHJpYnV0ZShcIm1heFwiLCBcIjU5XCIpO1xuICAgICAgICAgICAgc2VsZi50aW1lQ29udGFpbmVyLmFwcGVuZENoaWxkKGhvdXJJbnB1dCk7XG4gICAgICAgICAgICBzZWxmLnRpbWVDb250YWluZXIuYXBwZW5kQ2hpbGQoc2VwYXJhdG9yKTtcbiAgICAgICAgICAgIHNlbGYudGltZUNvbnRhaW5lci5hcHBlbmRDaGlsZChtaW51dGVJbnB1dCk7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcudGltZV8yNGhyKVxuICAgICAgICAgICAgICAgIHNlbGYudGltZUNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwidGltZTI0aHJcIik7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuZW5hYmxlU2Vjb25kcykge1xuICAgICAgICAgICAgICAgIHNlbGYudGltZUNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwiaGFzU2Vjb25kc1wiKTtcbiAgICAgICAgICAgICAgICB2YXIgc2Vjb25kSW5wdXQgPSBjcmVhdGVOdW1iZXJJbnB1dChcImZsYXRwaWNrci1zZWNvbmRcIik7XG4gICAgICAgICAgICAgICAgc2VsZi5zZWNvbmRFbGVtZW50ID0gc2Vjb25kSW5wdXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKVswXTtcbiAgICAgICAgICAgICAgICBzZWxmLnNlY29uZEVsZW1lbnQudmFsdWUgPSBwYWQoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmpcbiAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iai5nZXRTZWNvbmRzKClcbiAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmNvbmZpZy5kZWZhdWx0U2Vjb25kcyk7XG4gICAgICAgICAgICAgICAgc2VsZi5zZWNvbmRFbGVtZW50LnNldEF0dHJpYnV0ZShcInN0ZXBcIiwgc2VsZi5taW51dGVFbGVtZW50LmdldEF0dHJpYnV0ZShcInN0ZXBcIikpO1xuICAgICAgICAgICAgICAgIHNlbGYuc2Vjb25kRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtaW5cIiwgXCIwXCIpO1xuICAgICAgICAgICAgICAgIHNlbGYuc2Vjb25kRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtYXhcIiwgXCI1OVwiKTtcbiAgICAgICAgICAgICAgICBzZWxmLnRpbWVDb250YWluZXIuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChcInNwYW5cIiwgXCJmbGF0cGlja3ItdGltZS1zZXBhcmF0b3JcIiwgXCI6XCIpKTtcbiAgICAgICAgICAgICAgICBzZWxmLnRpbWVDb250YWluZXIuYXBwZW5kQ2hpbGQoc2Vjb25kSW5wdXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzZWxmLmNvbmZpZy50aW1lXzI0aHIpIHtcbiAgICAgICAgICAgICAgICAvLyBhZGQgc2VsZi5hbVBNIGlmIGFwcHJvcHJpYXRlXG4gICAgICAgICAgICAgICAgc2VsZi5hbVBNID0gY3JlYXRlRWxlbWVudChcInNwYW5cIiwgXCJmbGF0cGlja3ItYW0tcG1cIiwgc2VsZi5sMTBuLmFtUE1baW50KChzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9ialxuICAgICAgICAgICAgICAgICAgICA/IHNlbGYuaG91ckVsZW1lbnQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmNvbmZpZy5kZWZhdWx0SG91cikgPiAxMSldKTtcbiAgICAgICAgICAgICAgICBzZWxmLmFtUE0udGl0bGUgPSBzZWxmLmwxMG4udG9nZ2xlVGl0bGU7XG4gICAgICAgICAgICAgICAgc2VsZi5hbVBNLnRhYkluZGV4ID0gLTE7XG4gICAgICAgICAgICAgICAgc2VsZi50aW1lQ29udGFpbmVyLmFwcGVuZENoaWxkKHNlbGYuYW1QTSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2VsZi50aW1lQ29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGJ1aWxkV2Vla2RheXMoKSB7XG4gICAgICAgICAgICBpZiAoIXNlbGYud2Vla2RheUNvbnRhaW5lcilcbiAgICAgICAgICAgICAgICBzZWxmLndlZWtkYXlDb250YWluZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLXdlZWtkYXlzXCIpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGNsZWFyTm9kZShzZWxmLndlZWtkYXlDb250YWluZXIpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHNlbGYuY29uZmlnLnNob3dNb250aHM7IGktLTspIHtcbiAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci13ZWVrZGF5Y29udGFpbmVyXCIpO1xuICAgICAgICAgICAgICAgIHNlbGYud2Vla2RheUNvbnRhaW5lci5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdXBkYXRlV2Vla2RheXMoKTtcbiAgICAgICAgICAgIHJldHVybiBzZWxmLndlZWtkYXlDb250YWluZXI7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlV2Vla2RheXMoKSB7XG4gICAgICAgICAgICB2YXIgZmlyc3REYXlPZldlZWsgPSBzZWxmLmwxMG4uZmlyc3REYXlPZldlZWs7XG4gICAgICAgICAgICB2YXIgd2Vla2RheXMgPSBzZWxmLmwxMG4ud2Vla2RheXMuc2hvcnRoYW5kLnNsaWNlKCk7XG4gICAgICAgICAgICBpZiAoZmlyc3REYXlPZldlZWsgPiAwICYmIGZpcnN0RGF5T2ZXZWVrIDwgd2Vla2RheXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgd2Vla2RheXMgPSB3ZWVrZGF5cy5zcGxpY2UoZmlyc3REYXlPZldlZWssIHdlZWtkYXlzLmxlbmd0aCkuY29uY2F0KHdlZWtkYXlzLnNwbGljZSgwLCBmaXJzdERheU9mV2VlaykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHNlbGYuY29uZmlnLnNob3dNb250aHM7IGktLTspIHtcbiAgICAgICAgICAgICAgICBzZWxmLndlZWtkYXlDb250YWluZXIuY2hpbGRyZW5baV0uaW5uZXJIVE1MID0gXCJcXG4gICAgICA8c3BhbiBjbGFzcz0nZmxhdHBpY2tyLXdlZWtkYXknPlxcbiAgICAgICAgXCIgKyB3ZWVrZGF5cy5qb2luKFwiPC9zcGFuPjxzcGFuIGNsYXNzPSdmbGF0cGlja3Itd2Vla2RheSc+XCIpICsgXCJcXG4gICAgICA8L3NwYW4+XFxuICAgICAgXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgZnVuY3Rpb24gYnVpbGRXZWVrcygpIHtcbiAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuY2xhc3NMaXN0LmFkZChcImhhc1dlZWtzXCIpO1xuICAgICAgICAgICAgdmFyIHdlZWtXcmFwcGVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci13ZWVrd3JhcHBlclwiKTtcbiAgICAgICAgICAgIHdlZWtXcmFwcGVyLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIFwiZmxhdHBpY2tyLXdlZWtkYXlcIiwgc2VsZi5sMTBuLndlZWtBYmJyZXZpYXRpb24pKTtcbiAgICAgICAgICAgIHZhciB3ZWVrTnVtYmVycyA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3Itd2Vla3NcIik7XG4gICAgICAgICAgICB3ZWVrV3JhcHBlci5hcHBlbmRDaGlsZCh3ZWVrTnVtYmVycyk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHdlZWtXcmFwcGVyOiB3ZWVrV3JhcHBlcixcbiAgICAgICAgICAgICAgICB3ZWVrTnVtYmVyczogd2Vla051bWJlcnNcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2hhbmdlTW9udGgodmFsdWUsIGlzT2Zmc2V0KSB7XG4gICAgICAgICAgICBpZiAoaXNPZmZzZXQgPT09IHZvaWQgMCkgeyBpc09mZnNldCA9IHRydWU7IH1cbiAgICAgICAgICAgIHZhciBkZWx0YSA9IGlzT2Zmc2V0ID8gdmFsdWUgOiB2YWx1ZSAtIHNlbGYuY3VycmVudE1vbnRoO1xuICAgICAgICAgICAgaWYgKChkZWx0YSA8IDAgJiYgc2VsZi5faGlkZVByZXZNb250aEFycm93ID09PSB0cnVlKSB8fFxuICAgICAgICAgICAgICAgIChkZWx0YSA+IDAgJiYgc2VsZi5faGlkZU5leHRNb250aEFycm93ID09PSB0cnVlKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBzZWxmLmN1cnJlbnRNb250aCArPSBkZWx0YTtcbiAgICAgICAgICAgIGlmIChzZWxmLmN1cnJlbnRNb250aCA8IDAgfHwgc2VsZi5jdXJyZW50TW9udGggPiAxMSkge1xuICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXIgKz0gc2VsZi5jdXJyZW50TW9udGggPiAxMSA/IDEgOiAtMTtcbiAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRNb250aCA9IChzZWxmLmN1cnJlbnRNb250aCArIDEyKSAlIDEyO1xuICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uWWVhckNoYW5nZVwiKTtcbiAgICAgICAgICAgICAgICBidWlsZE1vbnRoU3dpdGNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidWlsZERheXMoKTtcbiAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uTW9udGhDaGFuZ2VcIik7XG4gICAgICAgICAgICB1cGRhdGVOYXZpZ2F0aW9uQ3VycmVudE1vbnRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2xlYXIodHJpZ2dlckNoYW5nZUV2ZW50LCB0b0luaXRpYWwpIHtcbiAgICAgICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlRXZlbnQgPT09IHZvaWQgMCkgeyB0cmlnZ2VyQ2hhbmdlRXZlbnQgPSB0cnVlOyB9XG4gICAgICAgICAgICBpZiAodG9Jbml0aWFsID09PSB2b2lkIDApIHsgdG9Jbml0aWFsID0gdHJ1ZTsgfVxuICAgICAgICAgICAgc2VsZi5pbnB1dC52YWx1ZSA9IFwiXCI7XG4gICAgICAgICAgICBpZiAoc2VsZi5hbHRJbnB1dCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHNlbGYuYWx0SW5wdXQudmFsdWUgPSBcIlwiO1xuICAgICAgICAgICAgaWYgKHNlbGYubW9iaWxlSW5wdXQgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0LnZhbHVlID0gXCJcIjtcbiAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcyA9IFtdO1xuICAgICAgICAgICAgc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAodG9Jbml0aWFsID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhciA9IHNlbGYuX2luaXRpYWxEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50TW9udGggPSBzZWxmLl9pbml0aWFsRGF0ZS5nZXRNb250aCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5zaG93VGltZUlucHV0ID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuZW5hYmxlVGltZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHNldERlZmF1bHRIb3VycygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5yZWRyYXcoKTtcbiAgICAgICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlRXZlbnQpXG4gICAgICAgICAgICAgICAgLy8gdHJpZ2dlckNoYW5nZUV2ZW50IGlzIHRydWUgKGRlZmF1bHQpIG9yIGFuIEV2ZW50XG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25DaGFuZ2VcIik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgICAgICAgICBzZWxmLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKCFzZWxmLmlzTW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY2FsZW5kYXJDb250YWluZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoXCJvcGVuXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5faW5wdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dC5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uQ2xvc2VcIik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uRGVzdHJveVwiKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBzZWxmLl9oYW5kbGVycy5sZW5ndGg7IGktLTspIHtcbiAgICAgICAgICAgICAgICB2YXIgaCA9IHNlbGYuX2hhbmRsZXJzW2ldO1xuICAgICAgICAgICAgICAgIGguZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGguZXZlbnQsIGguaGFuZGxlciwgaC5vcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYuX2hhbmRsZXJzID0gW107XG4gICAgICAgICAgICBpZiAoc2VsZi5tb2JpbGVJbnB1dCkge1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLm1vYmlsZUlucHV0LnBhcmVudE5vZGUpXG4gICAgICAgICAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzZWxmLm1vYmlsZUlucHV0KTtcbiAgICAgICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc2VsZi5jYWxlbmRhckNvbnRhaW5lciAmJiBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuc3RhdGljICYmIHNlbGYuY2FsZW5kYXJDb250YWluZXIucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgd3JhcHBlciA9IHNlbGYuY2FsZW5kYXJDb250YWluZXIucGFyZW50Tm9kZTtcbiAgICAgICAgICAgICAgICAgICAgd3JhcHBlci5sYXN0Q2hpbGQgJiYgd3JhcHBlci5yZW1vdmVDaGlsZCh3cmFwcGVyLmxhc3RDaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3cmFwcGVyLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh3cmFwcGVyLmZpcnN0Q2hpbGQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlci5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh3cmFwcGVyLmZpcnN0Q2hpbGQsIHdyYXBwZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHdyYXBwZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNlbGYuY2FsZW5kYXJDb250YWluZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuYWx0SW5wdXQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmlucHV0LnR5cGUgPSBcInRleHRcIjtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5hbHRJbnB1dC5wYXJlbnROb2RlKVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmFsdElucHV0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc2VsZi5hbHRJbnB1dCk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHNlbGYuYWx0SW5wdXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi5pbnB1dCkge1xuICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQudHlwZSA9IHNlbGYuaW5wdXQuX3R5cGU7XG4gICAgICAgICAgICAgICAgc2VsZi5pbnB1dC5jbGFzc0xpc3QucmVtb3ZlKFwiZmxhdHBpY2tyLWlucHV0XCIpO1xuICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQucmVtb3ZlQXR0cmlidXRlKFwicmVhZG9ubHlcIik7XG4gICAgICAgICAgICAgICAgc2VsZi5pbnB1dC52YWx1ZSA9IFwiXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCJfc2hvd1RpbWVJbnB1dFwiLFxuICAgICAgICAgICAgICAgIFwibGF0ZXN0U2VsZWN0ZWREYXRlT2JqXCIsXG4gICAgICAgICAgICAgICAgXCJfaGlkZU5leHRNb250aEFycm93XCIsXG4gICAgICAgICAgICAgICAgXCJfaGlkZVByZXZNb250aEFycm93XCIsXG4gICAgICAgICAgICAgICAgXCJfX2hpZGVOZXh0TW9udGhBcnJvd1wiLFxuICAgICAgICAgICAgICAgIFwiX19oaWRlUHJldk1vbnRoQXJyb3dcIixcbiAgICAgICAgICAgICAgICBcImlzTW9iaWxlXCIsXG4gICAgICAgICAgICAgICAgXCJpc09wZW5cIixcbiAgICAgICAgICAgICAgICBcInNlbGVjdGVkRGF0ZUVsZW1cIixcbiAgICAgICAgICAgICAgICBcIm1pbkRhdGVIYXNUaW1lXCIsXG4gICAgICAgICAgICAgICAgXCJtYXhEYXRlSGFzVGltZVwiLFxuICAgICAgICAgICAgICAgIFwiZGF5c1wiLFxuICAgICAgICAgICAgICAgIFwiZGF5c0NvbnRhaW5lclwiLFxuICAgICAgICAgICAgICAgIFwiX2lucHV0XCIsXG4gICAgICAgICAgICAgICAgXCJfcG9zaXRpb25FbGVtZW50XCIsXG4gICAgICAgICAgICAgICAgXCJpbm5lckNvbnRhaW5lclwiLFxuICAgICAgICAgICAgICAgIFwickNvbnRhaW5lclwiLFxuICAgICAgICAgICAgICAgIFwibW9udGhOYXZcIixcbiAgICAgICAgICAgICAgICBcInRvZGF5RGF0ZUVsZW1cIixcbiAgICAgICAgICAgICAgICBcImNhbGVuZGFyQ29udGFpbmVyXCIsXG4gICAgICAgICAgICAgICAgXCJ3ZWVrZGF5Q29udGFpbmVyXCIsXG4gICAgICAgICAgICAgICAgXCJwcmV2TW9udGhOYXZcIixcbiAgICAgICAgICAgICAgICBcIm5leHRNb250aE5hdlwiLFxuICAgICAgICAgICAgICAgIFwibW9udGhzRHJvcGRvd25Db250YWluZXJcIixcbiAgICAgICAgICAgICAgICBcImN1cnJlbnRNb250aEVsZW1lbnRcIixcbiAgICAgICAgICAgICAgICBcImN1cnJlbnRZZWFyRWxlbWVudFwiLFxuICAgICAgICAgICAgICAgIFwibmF2aWdhdGlvbkN1cnJlbnRNb250aFwiLFxuICAgICAgICAgICAgICAgIFwic2VsZWN0ZWREYXRlRWxlbVwiLFxuICAgICAgICAgICAgICAgIFwiY29uZmlnXCIsXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgc2VsZltrXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKF8pIHsgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaXNDYWxlbmRhckVsZW0oZWxlbSkge1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLmFwcGVuZFRvICYmIHNlbGYuY29uZmlnLmFwcGVuZFRvLmNvbnRhaW5zKGVsZW0pKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHNlbGYuY2FsZW5kYXJDb250YWluZXIuY29udGFpbnMoZWxlbSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZG9jdW1lbnRDbGljayhlKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5pc09wZW4gJiYgIXNlbGYuY29uZmlnLmlubGluZSkge1xuICAgICAgICAgICAgICAgIHZhciBldmVudFRhcmdldF8xID0gZ2V0RXZlbnRUYXJnZXQoZSk7XG4gICAgICAgICAgICAgICAgdmFyIGlzQ2FsZW5kYXJFbGVtZW50ID0gaXNDYWxlbmRhckVsZW0oZXZlbnRUYXJnZXRfMSk7XG4gICAgICAgICAgICAgICAgdmFyIGlzSW5wdXQgPSBldmVudFRhcmdldF8xID09PSBzZWxmLmlucHV0IHx8XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50VGFyZ2V0XzEgPT09IHNlbGYuYWx0SW5wdXQgfHxcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5lbGVtZW50LmNvbnRhaW5zKGV2ZW50VGFyZ2V0XzEpIHx8XG4gICAgICAgICAgICAgICAgICAgIC8vIHdlYiBjb21wb25lbnRzXG4gICAgICAgICAgICAgICAgICAgIC8vIGUucGF0aCBpcyBub3QgcHJlc2VudCBpbiBhbGwgYnJvd3NlcnMuIGNpcmN1bXZlbnRpbmcgdHlwZWNoZWNrc1xuICAgICAgICAgICAgICAgICAgICAoZS5wYXRoICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnBhdGguaW5kZXhPZiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKH5lLnBhdGguaW5kZXhPZihzZWxmLmlucHV0KSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH5lLnBhdGguaW5kZXhPZihzZWxmLmFsdElucHV0KSkpO1xuICAgICAgICAgICAgICAgIHZhciBsb3N0Rm9jdXMgPSBlLnR5cGUgPT09IFwiYmx1clwiXG4gICAgICAgICAgICAgICAgICAgID8gaXNJbnB1dCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgZS5yZWxhdGVkVGFyZ2V0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhaXNDYWxlbmRhckVsZW0oZS5yZWxhdGVkVGFyZ2V0KVxuICAgICAgICAgICAgICAgICAgICA6ICFpc0lucHV0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhaXNDYWxlbmRhckVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICFpc0NhbGVuZGFyRWxlbShlLnJlbGF0ZWRUYXJnZXQpO1xuICAgICAgICAgICAgICAgIHZhciBpc0lnbm9yZWQgPSAhc2VsZi5jb25maWcuaWdub3JlZEZvY3VzRWxlbWVudHMuc29tZShmdW5jdGlvbiAoZWxlbSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5jb250YWlucyhldmVudFRhcmdldF8xKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAobG9zdEZvY3VzICYmIGlzSWdub3JlZCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIgJiYgc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGVhcihmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlZHJhdygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNoYW5nZVllYXIobmV3WWVhcikge1xuICAgICAgICAgICAgaWYgKCFuZXdZZWFyIHx8XG4gICAgICAgICAgICAgICAgKHNlbGYuY29uZmlnLm1pbkRhdGUgJiYgbmV3WWVhciA8IHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0RnVsbFllYXIoKSkgfHxcbiAgICAgICAgICAgICAgICAoc2VsZi5jb25maWcubWF4RGF0ZSAmJiBuZXdZZWFyID4gc2VsZi5jb25maWcubWF4RGF0ZS5nZXRGdWxsWWVhcigpKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgbmV3WWVhck51bSA9IG5ld1llYXIsIGlzTmV3WWVhciA9IHNlbGYuY3VycmVudFllYXIgIT09IG5ld1llYXJOdW07XG4gICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyID0gbmV3WWVhck51bSB8fCBzZWxmLmN1cnJlbnRZZWFyO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1heERhdGUgJiZcbiAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyID09PSBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldEZ1bGxZZWFyKCkpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRNb250aCA9IE1hdGgubWluKHNlbGYuY29uZmlnLm1heERhdGUuZ2V0TW9udGgoKSwgc2VsZi5jdXJyZW50TW9udGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc2VsZi5jb25maWcubWluRGF0ZSAmJlxuICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXIgPT09IHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0RnVsbFllYXIoKSkge1xuICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudE1vbnRoID0gTWF0aC5tYXgoc2VsZi5jb25maWcubWluRGF0ZS5nZXRNb250aCgpLCBzZWxmLmN1cnJlbnRNb250aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNOZXdZZWFyKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5yZWRyYXcoKTtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvblllYXJDaGFuZ2VcIik7XG4gICAgICAgICAgICAgICAgYnVpbGRNb250aFN3aXRjaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlzRW5hYmxlZChkYXRlLCB0aW1lbGVzcykge1xuICAgICAgICAgICAgaWYgKHRpbWVsZXNzID09PSB2b2lkIDApIHsgdGltZWxlc3MgPSB0cnVlOyB9XG4gICAgICAgICAgICB2YXIgZGF0ZVRvQ2hlY2sgPSBzZWxmLnBhcnNlRGF0ZShkYXRlLCB1bmRlZmluZWQsIHRpbWVsZXNzKTsgLy8gdGltZWxlc3NcbiAgICAgICAgICAgIGlmICgoc2VsZi5jb25maWcubWluRGF0ZSAmJlxuICAgICAgICAgICAgICAgIGRhdGVUb0NoZWNrICYmXG4gICAgICAgICAgICAgICAgY29tcGFyZURhdGVzKGRhdGVUb0NoZWNrLCBzZWxmLmNvbmZpZy5taW5EYXRlLCB0aW1lbGVzcyAhPT0gdW5kZWZpbmVkID8gdGltZWxlc3MgOiAhc2VsZi5taW5EYXRlSGFzVGltZSkgPCAwKSB8fFxuICAgICAgICAgICAgICAgIChzZWxmLmNvbmZpZy5tYXhEYXRlICYmXG4gICAgICAgICAgICAgICAgICAgIGRhdGVUb0NoZWNrICYmXG4gICAgICAgICAgICAgICAgICAgIGNvbXBhcmVEYXRlcyhkYXRlVG9DaGVjaywgc2VsZi5jb25maWcubWF4RGF0ZSwgdGltZWxlc3MgIT09IHVuZGVmaW5lZCA/IHRpbWVsZXNzIDogIXNlbGYubWF4RGF0ZUhhc1RpbWUpID4gMCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLmVuYWJsZS5sZW5ndGggPT09IDAgJiYgc2VsZi5jb25maWcuZGlzYWJsZS5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBpZiAoZGF0ZVRvQ2hlY2sgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB2YXIgYm9vbCA9IHNlbGYuY29uZmlnLmVuYWJsZS5sZW5ndGggPiAwLCBhcnJheSA9IGJvb2wgPyBzZWxmLmNvbmZpZy5lbmFibGUgOiBzZWxmLmNvbmZpZy5kaXNhYmxlO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGQgPSB2b2lkIDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGQgPSBhcnJheVtpXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGQgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICAgICAgICAgICAgICBkKGRhdGVUb0NoZWNrKSAvLyBkaXNhYmxlZCBieSBmdW5jdGlvblxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJvb2w7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZCBpbnN0YW5jZW9mIERhdGUgJiZcbiAgICAgICAgICAgICAgICAgICAgZGF0ZVRvQ2hlY2sgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICBkLmdldFRpbWUoKSA9PT0gZGF0ZVRvQ2hlY2suZ2V0VGltZSgpKVxuICAgICAgICAgICAgICAgICAgICAvLyBkaXNhYmxlZCBieSBkYXRlXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBib29sO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBkID09PSBcInN0cmluZ1wiICYmIGRhdGVUb0NoZWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZGlzYWJsZWQgYnkgZGF0ZSBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlZCA9IHNlbGYucGFyc2VEYXRlKGQsIHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZWQgJiYgcGFyc2VkLmdldFRpbWUoKSA9PT0gZGF0ZVRvQ2hlY2suZ2V0VGltZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGJvb2xcbiAgICAgICAgICAgICAgICAgICAgICAgIDogIWJvb2w7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIC8vIGRpc2FibGVkIGJ5IHJhbmdlXG4gICAgICAgICAgICAgICAgdHlwZW9mIGQgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICAgICAgICAgZGF0ZVRvQ2hlY2sgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICBkLmZyb20gJiZcbiAgICAgICAgICAgICAgICAgICAgZC50byAmJlxuICAgICAgICAgICAgICAgICAgICBkYXRlVG9DaGVjay5nZXRUaW1lKCkgPj0gZC5mcm9tLmdldFRpbWUoKSAmJlxuICAgICAgICAgICAgICAgICAgICBkYXRlVG9DaGVjay5nZXRUaW1lKCkgPD0gZC50by5nZXRUaW1lKCkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBib29sO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICFib29sO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlzSW5WaWV3KGVsZW0pIHtcbiAgICAgICAgICAgIGlmIChzZWxmLmRheXNDb250YWluZXIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICByZXR1cm4gKGVsZW0uY2xhc3NOYW1lLmluZGV4T2YoXCJoaWRkZW5cIikgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZGF5c0NvbnRhaW5lci5jb250YWlucyhlbGVtKSk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gb25LZXlEb3duKGUpIHtcbiAgICAgICAgICAgIC8vIGUua2V5ICAgICAgICAgICAgICAgICAgICAgIGUua2V5Q29kZVxuICAgICAgICAgICAgLy8gXCJCYWNrc3BhY2VcIiAgICAgICAgICAgICAgICAgICAgICAgIDhcbiAgICAgICAgICAgIC8vIFwiVGFiXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5XG4gICAgICAgICAgICAvLyBcIkVudGVyXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAxM1xuICAgICAgICAgICAgLy8gXCJFc2NhcGVcIiAgICAgKElFIFwiRXNjXCIpICAgICAgICAgICAyN1xuICAgICAgICAgICAgLy8gXCJBcnJvd0xlZnRcIiAgKElFIFwiTGVmdFwiKSAgICAgICAgICAzN1xuICAgICAgICAgICAgLy8gXCJBcnJvd1VwXCIgICAgKElFIFwiVXBcIikgICAgICAgICAgICAzOFxuICAgICAgICAgICAgLy8gXCJBcnJvd1JpZ2h0XCIgKElFIFwiUmlnaHRcIikgICAgICAgICAzOVxuICAgICAgICAgICAgLy8gXCJBcnJvd0Rvd25cIiAgKElFIFwiRG93blwiKSAgICAgICAgICA0MFxuICAgICAgICAgICAgLy8gXCJEZWxldGVcIiAgICAgKElFIFwiRGVsXCIpICAgICAgICAgICA0NlxuICAgICAgICAgICAgdmFyIGlzSW5wdXQgPSBlLnRhcmdldCA9PT0gc2VsZi5faW5wdXQ7XG4gICAgICAgICAgICB2YXIgYWxsb3dJbnB1dCA9IHNlbGYuY29uZmlnLmFsbG93SW5wdXQ7XG4gICAgICAgICAgICB2YXIgYWxsb3dLZXlkb3duID0gc2VsZi5pc09wZW4gJiYgKCFhbGxvd0lucHV0IHx8ICFpc0lucHV0KTtcbiAgICAgICAgICAgIHZhciBhbGxvd0lubGluZUtleWRvd24gPSBzZWxmLmNvbmZpZy5pbmxpbmUgJiYgaXNJbnB1dCAmJiAhYWxsb3dJbnB1dDtcbiAgICAgICAgICAgIGlmIChlLmtleUNvZGUgPT09IDEzICYmIGlzSW5wdXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoYWxsb3dJbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnNldERhdGUoc2VsZi5faW5wdXQudmFsdWUsIHRydWUsIGUudGFyZ2V0ID09PSBzZWxmLmFsdElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLmFsdEZvcm1hdFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmNvbmZpZy5kYXRlRm9ybWF0KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUudGFyZ2V0LmJsdXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYub3BlbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzQ2FsZW5kYXJFbGVtKGUudGFyZ2V0KSB8fFxuICAgICAgICAgICAgICAgIGFsbG93S2V5ZG93biB8fFxuICAgICAgICAgICAgICAgIGFsbG93SW5saW5lS2V5ZG93bikge1xuICAgICAgICAgICAgICAgIHZhciBpc1RpbWVPYmogPSAhIXNlbGYudGltZUNvbnRhaW5lciAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxmLnRpbWVDb250YWluZXIuY29udGFpbnMoZS50YXJnZXQpO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZS5rZXlDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNUaW1lT2JqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c0FuZENsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0RGF0ZShlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI3OiAvLyBlc2NhcGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzQW5kQ2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDY6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNJbnB1dCAmJiAhc2VsZi5jb25maWcuYWxsb3dJbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNUaW1lT2JqICYmICFpc0lucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLmRheXNDb250YWluZXIgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWxsb3dJbnB1dCA9PT0gZmFsc2UgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmIGlzSW5WaWV3KGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlbHRhXzEgPSBlLmtleUNvZGUgPT09IDM5ID8gMSA6IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWUuY3RybEtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzT25EYXkodW5kZWZpbmVkLCBkZWx0YV8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlTW9udGgoZGVsdGFfMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c09uRGF5KGdldEZpcnN0QXZhaWxhYmxlRGF5KDEpLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNlbGYuaG91ckVsZW1lbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVsdGEgPSBlLmtleUNvZGUgPT09IDQwID8gMSA6IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChzZWxmLmRheXNDb250YWluZXIgJiYgZS50YXJnZXQuJGkgIT09IHVuZGVmaW5lZCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnRhcmdldCA9PT0gc2VsZi5pbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmN0cmxLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlWWVhcihzZWxmLmN1cnJlbnRZZWFyIC0gZGVsdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c09uRGF5KGdldEZpcnN0QXZhaWxhYmxlRGF5KDEpLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWlzVGltZU9iailcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNPbkRheSh1bmRlZmluZWQsIGRlbHRhICogNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChlLnRhcmdldCA9PT0gc2VsZi5jdXJyZW50WWVhckVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VZZWFyKHNlbGYuY3VycmVudFllYXIgLSBkZWx0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzZWxmLmNvbmZpZy5lbmFibGVUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1RpbWVPYmogJiYgc2VsZi5ob3VyRWxlbWVudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVRpbWUoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZGVib3VuY2VkQ2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzVGltZU9iaikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtcyA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5taW51dGVFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlY29uZEVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYW1QTSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoc2VsZi5wbHVnaW5FbGVtZW50cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4geDsgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSBlbGVtcy5pbmRleE9mKGUudGFyZ2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IGVsZW1zW2kgKyAoZS5zaGlmdEtleSA/IC0xIDogMSldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0YXJnZXQgfHwgc2VsZi5faW5wdXQpLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIXNlbGYuY29uZmlnLm5vQ2FsZW5kYXIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRheXNDb250YWluZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRheXNDb250YWluZXIuY29udGFpbnMoZS50YXJnZXQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zaGlmdEtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dC5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi5hbVBNICE9PSB1bmRlZmluZWQgJiYgZS50YXJnZXQgPT09IHNlbGYuYW1QTSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZS5rZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBzZWxmLmwxMG4uYW1QTVswXS5jaGFyQXQoMCk6XG4gICAgICAgICAgICAgICAgICAgIGNhc2Ugc2VsZi5sMTBuLmFtUE1bMF0uY2hhckF0KDApLnRvTG93ZXJDYXNlKCk6XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFtUE0udGV4dENvbnRlbnQgPSBzZWxmLmwxMG4uYW1QTVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEhvdXJzRnJvbUlucHV0cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIHNlbGYubDEwbi5hbVBNWzFdLmNoYXJBdCgwKTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBzZWxmLmwxMG4uYW1QTVsxXS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYW1QTS50ZXh0Q29udGVudCA9IHNlbGYubDEwbi5hbVBNWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SG91cnNGcm9tSW5wdXRzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzSW5wdXQgfHwgaXNDYWxlbmRhckVsZW0oZS50YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25LZXlEb3duXCIsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG9uTW91c2VPdmVyKGVsZW0pIHtcbiAgICAgICAgICAgIGlmIChzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoICE9PSAxIHx8XG4gICAgICAgICAgICAgICAgKGVsZW0gJiZcbiAgICAgICAgICAgICAgICAgICAgKCFlbGVtLmNsYXNzTGlzdC5jb250YWlucyhcImZsYXRwaWNrci1kYXlcIikgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NMaXN0LmNvbnRhaW5zKFwiZmxhdHBpY2tyLWRpc2FibGVkXCIpKSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGhvdmVyRGF0ZSA9IGVsZW1cbiAgICAgICAgICAgICAgICA/IGVsZW0uZGF0ZU9iai5nZXRUaW1lKClcbiAgICAgICAgICAgICAgICA6IHNlbGYuZGF5cy5maXJzdEVsZW1lbnRDaGlsZC5kYXRlT2JqLmdldFRpbWUoKSwgaW5pdGlhbERhdGUgPSBzZWxmLnBhcnNlRGF0ZShzZWxmLnNlbGVjdGVkRGF0ZXNbMF0sIHVuZGVmaW5lZCwgdHJ1ZSkuZ2V0VGltZSgpLCByYW5nZVN0YXJ0RGF0ZSA9IE1hdGgubWluKGhvdmVyRGF0ZSwgc2VsZi5zZWxlY3RlZERhdGVzWzBdLmdldFRpbWUoKSksIHJhbmdlRW5kRGF0ZSA9IE1hdGgubWF4KGhvdmVyRGF0ZSwgc2VsZi5zZWxlY3RlZERhdGVzWzBdLmdldFRpbWUoKSk7XG4gICAgICAgICAgICB2YXIgY29udGFpbnNEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIG1pblJhbmdlID0gMCwgbWF4UmFuZ2UgPSAwO1xuICAgICAgICAgICAgZm9yICh2YXIgdCA9IHJhbmdlU3RhcnREYXRlOyB0IDwgcmFuZ2VFbmREYXRlOyB0ICs9IGR1cmF0aW9uLkRBWSkge1xuICAgICAgICAgICAgICAgIGlmICghaXNFbmFibGVkKG5ldyBEYXRlKHQpLCB0cnVlKSkge1xuICAgICAgICAgICAgICAgICAgICBjb250YWluc0Rpc2FibGVkID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zRGlzYWJsZWQgfHwgKHQgPiByYW5nZVN0YXJ0RGF0ZSAmJiB0IDwgcmFuZ2VFbmREYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgPCBpbml0aWFsRGF0ZSAmJiAoIW1pblJhbmdlIHx8IHQgPiBtaW5SYW5nZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5SYW5nZSA9IHQ7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHQgPiBpbml0aWFsRGF0ZSAmJiAoIW1heFJhbmdlIHx8IHQgPCBtYXhSYW5nZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhSYW5nZSA9IHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgbSA9IDA7IG0gPCBzZWxmLmNvbmZpZy5zaG93TW9udGhzOyBtKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgbW9udGggPSBzZWxmLmRheXNDb250YWluZXIuY2hpbGRyZW5bbV07XG4gICAgICAgICAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoaSwgbCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGF5RWxlbSA9IG1vbnRoLmNoaWxkcmVuW2ldLCBkYXRlID0gZGF5RWxlbS5kYXRlT2JqO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBvdXRPZlJhbmdlID0gKG1pblJhbmdlID4gMCAmJiB0aW1lc3RhbXAgPCBtaW5SYW5nZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIChtYXhSYW5nZSA+IDAgJiYgdGltZXN0YW1wID4gbWF4UmFuZ2UpO1xuICAgICAgICAgICAgICAgICAgICBpZiAob3V0T2ZSYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF5RWxlbS5jbGFzc0xpc3QuYWRkKFwibm90QWxsb3dlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcImluUmFuZ2VcIiwgXCJzdGFydFJhbmdlXCIsIFwiZW5kUmFuZ2VcIl0uZm9yRWFjaChmdW5jdGlvbiAoYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRheUVsZW0uY2xhc3NMaXN0LnJlbW92ZShjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiY29udGludWVcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb250YWluc0Rpc2FibGVkICYmICFvdXRPZlJhbmdlKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiY29udGludWVcIjtcbiAgICAgICAgICAgICAgICAgICAgW1wic3RhcnRSYW5nZVwiLCBcImluUmFuZ2VcIiwgXCJlbmRSYW5nZVwiLCBcIm5vdEFsbG93ZWRcIl0uZm9yRWFjaChmdW5jdGlvbiAoYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF5RWxlbS5jbGFzc0xpc3QucmVtb3ZlKGMpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5jbGFzc0xpc3QuYWRkKGhvdmVyRGF0ZSA8PSBzZWxmLnNlbGVjdGVkRGF0ZXNbMF0uZ2V0VGltZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcInN0YXJ0UmFuZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJlbmRSYW5nZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbml0aWFsRGF0ZSA8IGhvdmVyRGF0ZSAmJiB0aW1lc3RhbXAgPT09IGluaXRpYWxEYXRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRheUVsZW0uY2xhc3NMaXN0LmFkZChcInN0YXJ0UmFuZ2VcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpbml0aWFsRGF0ZSA+IGhvdmVyRGF0ZSAmJiB0aW1lc3RhbXAgPT09IGluaXRpYWxEYXRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRheUVsZW0uY2xhc3NMaXN0LmFkZChcImVuZFJhbmdlXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpbWVzdGFtcCA+PSBtaW5SYW5nZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXhSYW5nZSA9PT0gMCB8fCB0aW1lc3RhbXAgPD0gbWF4UmFuZ2UpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNCZXR3ZWVuKHRpbWVzdGFtcCwgaW5pdGlhbERhdGUsIGhvdmVyRGF0ZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF5RWxlbS5jbGFzc0xpc3QuYWRkKFwiaW5SYW5nZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBtb250aC5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgX2xvb3BfMShpLCBsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gb25SZXNpemUoKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5pc09wZW4gJiYgIXNlbGYuY29uZmlnLnN0YXRpYyAmJiAhc2VsZi5jb25maWcuaW5saW5lKVxuICAgICAgICAgICAgICAgIHBvc2l0aW9uQ2FsZW5kYXIoKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXREZWZhdWx0VGltZSgpIHtcbiAgICAgICAgICAgIHNlbGYuc2V0RGF0ZShzZWxmLmNvbmZpZy5taW5EYXRlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0VGltZSgpKVxuICAgICAgICAgICAgICAgIDogbmV3IERhdGUoKSwgdHJ1ZSk7XG4gICAgICAgICAgICBzZXREZWZhdWx0SG91cnMoKTtcbiAgICAgICAgICAgIHVwZGF0ZVZhbHVlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gb3BlbihlLCBwb3NpdGlvbkVsZW1lbnQpIHtcbiAgICAgICAgICAgIGlmIChwb3NpdGlvbkVsZW1lbnQgPT09IHZvaWQgMCkgeyBwb3NpdGlvbkVsZW1lbnQgPSBzZWxmLl9wb3NpdGlvbkVsZW1lbnQ7IH1cbiAgICAgICAgICAgIGlmIChzZWxmLmlzTW9iaWxlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBlLnRhcmdldCAmJiBlLnRhcmdldC5ibHVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzZWxmLm1vYmlsZUlucHV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0LmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uT3BlblwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi5faW5wdXQuZGlzYWJsZWQgfHwgc2VsZi5jb25maWcuaW5saW5lKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHZhciB3YXNPcGVuID0gc2VsZi5pc09wZW47XG4gICAgICAgICAgICBzZWxmLmlzT3BlbiA9IHRydWU7XG4gICAgICAgICAgICBpZiAoIXdhc09wZW4pIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJvcGVuXCIpO1xuICAgICAgICAgICAgICAgIHNlbGYuX2lucHV0LmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIik7XG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25PcGVuXCIpO1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uQ2FsZW5kYXIocG9zaXRpb25FbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5lbmFibGVUaW1lID09PSB0cnVlICYmIHNlbGYuY29uZmlnLm5vQ2FsZW5kYXIgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBzZXREZWZhdWx0VGltZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuYWxsb3dJbnB1dCA9PT0gZmFsc2UgJiZcbiAgICAgICAgICAgICAgICAgICAgKGUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgIXNlbGYudGltZUNvbnRhaW5lci5jb250YWlucyhlLnJlbGF0ZWRUYXJnZXQpKSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGYuaG91ckVsZW1lbnQuc2VsZWN0KCk7IH0sIDUwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbWluTWF4RGF0ZVNldHRlcih0eXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGF0ZU9iaiA9IChzZWxmLmNvbmZpZ1tcIl9cIiArIHR5cGUgKyBcIkRhdGVcIl0gPSBzZWxmLnBhcnNlRGF0ZShkYXRlLCBzZWxmLmNvbmZpZy5kYXRlRm9ybWF0KSk7XG4gICAgICAgICAgICAgICAgdmFyIGludmVyc2VEYXRlT2JqID0gc2VsZi5jb25maWdbXCJfXCIgKyAodHlwZSA9PT0gXCJtaW5cIiA/IFwibWF4XCIgOiBcIm1pblwiKSArIFwiRGF0ZVwiXTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0ZU9iaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGZbdHlwZSA9PT0gXCJtaW5cIiA/IFwibWluRGF0ZUhhc1RpbWVcIiA6IFwibWF4RGF0ZUhhc1RpbWVcIl0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZU9iai5nZXRIb3VycygpID4gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVPYmouZ2V0TWludXRlcygpID4gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVPYmouZ2V0U2Vjb25kcygpID4gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuc2VsZWN0ZWREYXRlcykge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMgPSBzZWxmLnNlbGVjdGVkRGF0ZXMuZmlsdGVyKGZ1bmN0aW9uIChkKSB7IHJldHVybiBpc0VuYWJsZWQoZCk7IH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggJiYgdHlwZSA9PT0gXCJtaW5cIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEhvdXJzRnJvbURhdGUoZGF0ZU9iaik7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVZhbHVlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzZWxmLmRheXNDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVkcmF3KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRlT2JqICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyRWxlbWVudFt0eXBlXSA9IGRhdGVPYmouZ2V0RnVsbFllYXIoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUodHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXJFbGVtZW50LmRpc2FibGVkID1cbiAgICAgICAgICAgICAgICAgICAgICAgICEhaW52ZXJzZURhdGVPYmogJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlT2JqICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZlcnNlRGF0ZU9iai5nZXRGdWxsWWVhcigpID09PSBkYXRlT2JqLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBwYXJzZUNvbmZpZygpIHtcbiAgICAgICAgICAgIHZhciBib29sT3B0cyA9IFtcbiAgICAgICAgICAgICAgICBcIndyYXBcIixcbiAgICAgICAgICAgICAgICBcIndlZWtOdW1iZXJzXCIsXG4gICAgICAgICAgICAgICAgXCJhbGxvd0lucHV0XCIsXG4gICAgICAgICAgICAgICAgXCJjbGlja09wZW5zXCIsXG4gICAgICAgICAgICAgICAgXCJ0aW1lXzI0aHJcIixcbiAgICAgICAgICAgICAgICBcImVuYWJsZVRpbWVcIixcbiAgICAgICAgICAgICAgICBcIm5vQ2FsZW5kYXJcIixcbiAgICAgICAgICAgICAgICBcImFsdElucHV0XCIsXG4gICAgICAgICAgICAgICAgXCJzaG9ydGhhbmRDdXJyZW50TW9udGhcIixcbiAgICAgICAgICAgICAgICBcImlubGluZVwiLFxuICAgICAgICAgICAgICAgIFwic3RhdGljXCIsXG4gICAgICAgICAgICAgICAgXCJlbmFibGVTZWNvbmRzXCIsXG4gICAgICAgICAgICAgICAgXCJkaXNhYmxlTW9iaWxlXCIsXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgdmFyIHVzZXJDb25maWcgPSBfX2Fzc2lnbih7fSwgaW5zdGFuY2VDb25maWcsIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZWxlbWVudC5kYXRhc2V0IHx8IHt9KSkpO1xuICAgICAgICAgICAgdmFyIGZvcm1hdHMgPSB7fTtcbiAgICAgICAgICAgIHNlbGYuY29uZmlnLnBhcnNlRGF0ZSA9IHVzZXJDb25maWcucGFyc2VEYXRlO1xuICAgICAgICAgICAgc2VsZi5jb25maWcuZm9ybWF0RGF0ZSA9IHVzZXJDb25maWcuZm9ybWF0RGF0ZTtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZWxmLmNvbmZpZywgXCJlbmFibGVcIiwge1xuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VsZi5jb25maWcuX2VuYWJsZTsgfSxcbiAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChkYXRlcykge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5fZW5hYmxlID0gcGFyc2VEYXRlUnVsZXMoZGF0ZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYuY29uZmlnLCBcImRpc2FibGVcIiwge1xuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VsZi5jb25maWcuX2Rpc2FibGU7IH0sXG4gICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoZGF0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcuX2Rpc2FibGUgPSBwYXJzZURhdGVSdWxlcyhkYXRlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgdGltZU1vZGUgPSB1c2VyQ29uZmlnLm1vZGUgPT09IFwidGltZVwiO1xuICAgICAgICAgICAgaWYgKCF1c2VyQ29uZmlnLmRhdGVGb3JtYXQgJiYgKHVzZXJDb25maWcuZW5hYmxlVGltZSB8fCB0aW1lTW9kZSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGVmYXVsdERhdGVGb3JtYXQgPSBmbGF0cGlja3IuZGVmYXVsdENvbmZpZy5kYXRlRm9ybWF0IHx8IGRlZmF1bHRzLmRhdGVGb3JtYXQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0cy5kYXRlRm9ybWF0ID1cbiAgICAgICAgICAgICAgICAgICAgdXNlckNvbmZpZy5ub0NhbGVuZGFyIHx8IHRpbWVNb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFwiSDppXCIgKyAodXNlckNvbmZpZy5lbmFibGVTZWNvbmRzID8gXCI6U1wiIDogXCJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIDogZGVmYXVsdERhdGVGb3JtYXQgKyBcIiBIOmlcIiArICh1c2VyQ29uZmlnLmVuYWJsZVNlY29uZHMgPyBcIjpTXCIgOiBcIlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh1c2VyQ29uZmlnLmFsdElucHV0ICYmXG4gICAgICAgICAgICAgICAgKHVzZXJDb25maWcuZW5hYmxlVGltZSB8fCB0aW1lTW9kZSkgJiZcbiAgICAgICAgICAgICAgICAhdXNlckNvbmZpZy5hbHRGb3JtYXQpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGVmYXVsdEFsdEZvcm1hdCA9IGZsYXRwaWNrci5kZWZhdWx0Q29uZmlnLmFsdEZvcm1hdCB8fCBkZWZhdWx0cy5hbHRGb3JtYXQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0cy5hbHRGb3JtYXQgPVxuICAgICAgICAgICAgICAgICAgICB1c2VyQ29uZmlnLm5vQ2FsZW5kYXIgfHwgdGltZU1vZGVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gXCJoOmlcIiArICh1c2VyQ29uZmlnLmVuYWJsZVNlY29uZHMgPyBcIjpTIEtcIiA6IFwiIEtcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIDogZGVmYXVsdEFsdEZvcm1hdCArIChcIiBoOmlcIiArICh1c2VyQ29uZmlnLmVuYWJsZVNlY29uZHMgPyBcIjpTXCIgOiBcIlwiKSArIFwiIEtcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXVzZXJDb25maWcuYWx0SW5wdXRDbGFzcykge1xuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLmFsdElucHV0Q2xhc3MgPVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmlucHV0LmNsYXNzTmFtZSArIFwiIFwiICsgc2VsZi5jb25maWcuYWx0SW5wdXRDbGFzcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZWxmLmNvbmZpZywgXCJtaW5EYXRlXCIsIHtcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGYuY29uZmlnLl9taW5EYXRlOyB9LFxuICAgICAgICAgICAgICAgIHNldDogbWluTWF4RGF0ZVNldHRlcihcIm1pblwiKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZi5jb25maWcsIFwibWF4RGF0ZVwiLCB7XG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLmNvbmZpZy5fbWF4RGF0ZTsgfSxcbiAgICAgICAgICAgICAgICBzZXQ6IG1pbk1heERhdGVTZXR0ZXIoXCJtYXhcIilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIG1pbk1heFRpbWVTZXR0ZXIgPSBmdW5jdGlvbiAodHlwZSkgeyByZXR1cm4gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnW3R5cGUgPT09IFwibWluXCIgPyBcIl9taW5UaW1lXCIgOiBcIl9tYXhUaW1lXCJdID0gc2VsZi5wYXJzZURhdGUodmFsLCBcIkg6aVwiKTtcbiAgICAgICAgICAgIH07IH07XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZi5jb25maWcsIFwibWluVGltZVwiLCB7XG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLmNvbmZpZy5fbWluVGltZTsgfSxcbiAgICAgICAgICAgICAgICBzZXQ6IG1pbk1heFRpbWVTZXR0ZXIoXCJtaW5cIilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYuY29uZmlnLCBcIm1heFRpbWVcIiwge1xuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VsZi5jb25maWcuX21heFRpbWU7IH0sXG4gICAgICAgICAgICAgICAgc2V0OiBtaW5NYXhUaW1lU2V0dGVyKFwibWF4XCIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICh1c2VyQ29uZmlnLm1vZGUgPT09IFwidGltZVwiKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcubm9DYWxlbmRhciA9IHRydWU7XG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcuZW5hYmxlVGltZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHNlbGYuY29uZmlnLCBmb3JtYXRzLCB1c2VyQ29uZmlnKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm9vbE9wdHMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWdbYm9vbE9wdHNbaV1dID1cbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWdbYm9vbE9wdHNbaV1dID09PSB0cnVlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ1tib29sT3B0c1tpXV0gPT09IFwidHJ1ZVwiO1xuICAgICAgICAgICAgSE9PS1MuZmlsdGVyKGZ1bmN0aW9uIChob29rKSB7IHJldHVybiBzZWxmLmNvbmZpZ1tob29rXSAhPT0gdW5kZWZpbmVkOyB9KS5mb3JFYWNoKGZ1bmN0aW9uIChob29rKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWdbaG9va10gPSBhcnJheWlmeShzZWxmLmNvbmZpZ1tob29rXSB8fCBbXSkubWFwKGJpbmRUb0luc3RhbmNlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2VsZi5pc01vYmlsZSA9XG4gICAgICAgICAgICAgICAgIXNlbGYuY29uZmlnLmRpc2FibGVNb2JpbGUgJiZcbiAgICAgICAgICAgICAgICAgICAgIXNlbGYuY29uZmlnLmlubGluZSAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5tb2RlID09PSBcInNpbmdsZVwiICYmXG4gICAgICAgICAgICAgICAgICAgICFzZWxmLmNvbmZpZy5kaXNhYmxlLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgICAgICAhc2VsZi5jb25maWcuZW5hYmxlLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgICAgICAhc2VsZi5jb25maWcud2Vla051bWJlcnMgJiZcbiAgICAgICAgICAgICAgICAgICAgL0FuZHJvaWR8d2ViT1N8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fElFTW9iaWxlfE9wZXJhIE1pbmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLmNvbmZpZy5wbHVnaW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHBsdWdpbkNvbmYgPSBzZWxmLmNvbmZpZy5wbHVnaW5zW2ldKHNlbGYpIHx8IHt9O1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBwbHVnaW5Db25mKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChIT09LUy5pbmRleE9mKGtleSkgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWdba2V5XSA9IGFycmF5aWZ5KHBsdWdpbkNvbmZba2V5XSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGJpbmRUb0luc3RhbmNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoc2VsZi5jb25maWdba2V5XSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHVzZXJDb25maWdba2V5XSA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnW2tleV0gPSBwbHVnaW5Db25mW2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25QYXJzZUNvbmZpZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXR1cExvY2FsZSgpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2VsZi5jb25maWcubG9jYWxlICE9PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGZsYXRwaWNrci5sMTBuc1tzZWxmLmNvbmZpZy5sb2NhbGVdID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLmVycm9ySGFuZGxlcihuZXcgRXJyb3IoXCJmbGF0cGlja3I6IGludmFsaWQgbG9jYWxlIFwiICsgc2VsZi5jb25maWcubG9jYWxlKSk7XG4gICAgICAgICAgICBzZWxmLmwxMG4gPSBfX2Fzc2lnbih7fSwgZmxhdHBpY2tyLmwxMG5zW1wiZGVmYXVsdFwiXSwgKHR5cGVvZiBzZWxmLmNvbmZpZy5sb2NhbGUgPT09IFwib2JqZWN0XCJcbiAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLmxvY2FsZVxuICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcubG9jYWxlICE9PSBcImRlZmF1bHRcIlxuICAgICAgICAgICAgICAgICAgICA/IGZsYXRwaWNrci5sMTBuc1tzZWxmLmNvbmZpZy5sb2NhbGVdXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkKSk7XG4gICAgICAgICAgICB0b2tlblJlZ2V4LksgPSBcIihcIiArIHNlbGYubDEwbi5hbVBNWzBdICsgXCJ8XCIgKyBzZWxmLmwxMG4uYW1QTVsxXSArIFwifFwiICsgc2VsZi5sMTBuLmFtUE1bMF0udG9Mb3dlckNhc2UoKSArIFwifFwiICsgc2VsZi5sMTBuLmFtUE1bMV0udG9Mb3dlckNhc2UoKSArIFwiKVwiO1xuICAgICAgICAgICAgdmFyIHVzZXJDb25maWcgPSBfX2Fzc2lnbih7fSwgaW5zdGFuY2VDb25maWcsIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZWxlbWVudC5kYXRhc2V0IHx8IHt9KSkpO1xuICAgICAgICAgICAgaWYgKHVzZXJDb25maWcudGltZV8yNGhyID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICBmbGF0cGlja3IuZGVmYXVsdENvbmZpZy50aW1lXzI0aHIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLnRpbWVfMjRociA9IHNlbGYubDEwbi50aW1lXzI0aHI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLmZvcm1hdERhdGUgPSBjcmVhdGVEYXRlRm9ybWF0dGVyKHNlbGYpO1xuICAgICAgICAgICAgc2VsZi5wYXJzZURhdGUgPSBjcmVhdGVEYXRlUGFyc2VyKHsgY29uZmlnOiBzZWxmLmNvbmZpZywgbDEwbjogc2VsZi5sMTBuIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHBvc2l0aW9uQ2FsZW5kYXIoY3VzdG9tUG9zaXRpb25FbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5jYWxlbmRhckNvbnRhaW5lciA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uUHJlQ2FsZW5kYXJQb3NpdGlvblwiKTtcbiAgICAgICAgICAgIHZhciBwb3NpdGlvbkVsZW1lbnQgPSBjdXN0b21Qb3NpdGlvbkVsZW1lbnQgfHwgc2VsZi5fcG9zaXRpb25FbGVtZW50O1xuICAgICAgICAgICAgdmFyIGNhbGVuZGFySGVpZ2h0ID0gQXJyYXkucHJvdG90eXBlLnJlZHVjZS5jYWxsKHNlbGYuY2FsZW5kYXJDb250YWluZXIuY2hpbGRyZW4sIChmdW5jdGlvbiAoYWNjLCBjaGlsZCkgeyByZXR1cm4gYWNjICsgY2hpbGQub2Zmc2V0SGVpZ2h0OyB9KSwgMCksIGNhbGVuZGFyV2lkdGggPSBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLm9mZnNldFdpZHRoLCBjb25maWdQb3MgPSBzZWxmLmNvbmZpZy5wb3NpdGlvbi5zcGxpdChcIiBcIiksIGNvbmZpZ1Bvc1ZlcnRpY2FsID0gY29uZmlnUG9zWzBdLCBjb25maWdQb3NIb3Jpem9udGFsID0gY29uZmlnUG9zLmxlbmd0aCA+IDEgPyBjb25maWdQb3NbMV0gOiBudWxsLCBpbnB1dEJvdW5kcyA9IHBvc2l0aW9uRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgZGlzdGFuY2VGcm9tQm90dG9tID0gd2luZG93LmlubmVySGVpZ2h0IC0gaW5wdXRCb3VuZHMuYm90dG9tLCBzaG93T25Ub3AgPSBjb25maWdQb3NWZXJ0aWNhbCA9PT0gXCJhYm92ZVwiIHx8XG4gICAgICAgICAgICAgICAgKGNvbmZpZ1Bvc1ZlcnRpY2FsICE9PSBcImJlbG93XCIgJiZcbiAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2VGcm9tQm90dG9tIDwgY2FsZW5kYXJIZWlnaHQgJiZcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRCb3VuZHMudG9wID4gY2FsZW5kYXJIZWlnaHQpO1xuICAgICAgICAgICAgdmFyIHRvcCA9IHdpbmRvdy5wYWdlWU9mZnNldCArXG4gICAgICAgICAgICAgICAgaW5wdXRCb3VuZHMudG9wICtcbiAgICAgICAgICAgICAgICAoIXNob3dPblRvcCA/IHBvc2l0aW9uRWxlbWVudC5vZmZzZXRIZWlnaHQgKyAyIDogLWNhbGVuZGFySGVpZ2h0IC0gMik7XG4gICAgICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBcImFycm93VG9wXCIsICFzaG93T25Ub3ApO1xuICAgICAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5jYWxlbmRhckNvbnRhaW5lciwgXCJhcnJvd0JvdHRvbVwiLCBzaG93T25Ub3ApO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLmlubGluZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgbGVmdCA9IHdpbmRvdy5wYWdlWE9mZnNldCArXG4gICAgICAgICAgICAgICAgaW5wdXRCb3VuZHMubGVmdCAtXG4gICAgICAgICAgICAgICAgKGNvbmZpZ1Bvc0hvcml6b250YWwgIT0gbnVsbCAmJiBjb25maWdQb3NIb3Jpem9udGFsID09PSBcImNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgID8gKGNhbGVuZGFyV2lkdGggLSBpbnB1dEJvdW5kcy53aWR0aCkgLyAyXG4gICAgICAgICAgICAgICAgICAgIDogMCk7XG4gICAgICAgICAgICB2YXIgcmlnaHQgPSB3aW5kb3cuZG9jdW1lbnQuYm9keS5vZmZzZXRXaWR0aCAtIGlucHV0Qm91bmRzLnJpZ2h0O1xuICAgICAgICAgICAgdmFyIHJpZ2h0TW9zdCA9IGxlZnQgKyBjYWxlbmRhcldpZHRoID4gd2luZG93LmRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICB2YXIgY2VudGVyTW9zdCA9IHJpZ2h0ICsgY2FsZW5kYXJXaWR0aCA+IHdpbmRvdy5kb2N1bWVudC5ib2R5Lm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5jYWxlbmRhckNvbnRhaW5lciwgXCJyaWdodE1vc3RcIiwgcmlnaHRNb3N0KTtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5zdGF0aWMpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS50b3AgPSB0b3AgKyBcInB4XCI7XG4gICAgICAgICAgICBpZiAoIXJpZ2h0TW9zdCkge1xuICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUubGVmdCA9IGxlZnQgKyBcInB4XCI7XG4gICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS5yaWdodCA9IFwiYXV0b1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIWNlbnRlck1vc3QpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnN0eWxlLmxlZnQgPSBcImF1dG9cIjtcbiAgICAgICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnN0eWxlLnJpZ2h0ID0gcmlnaHQgKyBcInB4XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgZG9jID0gZG9jdW1lbnQuc3R5bGVTaGVldHNbMF07XG4gICAgICAgICAgICAgICAgLy8gc29tZSB0ZXN0aW5nIGVudmlyb25tZW50cyBkb24ndCBoYXZlIGNzcyBzdXBwb3J0XG4gICAgICAgICAgICAgICAgaWYgKGRvYyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgdmFyIGJvZHlXaWR0aCA9IHdpbmRvdy5kb2N1bWVudC5ib2R5Lm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgICAgIHZhciBjZW50ZXJMZWZ0ID0gTWF0aC5tYXgoMCwgYm9keVdpZHRoIC8gMiAtIGNhbGVuZGFyV2lkdGggLyAyKTtcbiAgICAgICAgICAgICAgICB2YXIgY2VudGVyQmVmb3JlID0gXCIuZmxhdHBpY2tyLWNhbGVuZGFyLmNlbnRlck1vc3Q6YmVmb3JlXCI7XG4gICAgICAgICAgICAgICAgdmFyIGNlbnRlckFmdGVyID0gXCIuZmxhdHBpY2tyLWNhbGVuZGFyLmNlbnRlck1vc3Q6YWZ0ZXJcIjtcbiAgICAgICAgICAgICAgICB2YXIgY2VudGVySW5kZXggPSBkb2MuY3NzUnVsZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHZhciBjZW50ZXJTdHlsZSA9IFwie2xlZnQ6XCIgKyBpbnB1dEJvdW5kcy5sZWZ0ICsgXCJweDtyaWdodDphdXRvO31cIjtcbiAgICAgICAgICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBcInJpZ2h0TW9zdFwiLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5jYWxlbmRhckNvbnRhaW5lciwgXCJjZW50ZXJNb3N0XCIsIHRydWUpO1xuICAgICAgICAgICAgICAgIGRvYy5pbnNlcnRSdWxlKGNlbnRlckJlZm9yZSArIFwiLFwiICsgY2VudGVyQWZ0ZXIgKyBjZW50ZXJTdHlsZSwgY2VudGVySW5kZXgpO1xuICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUubGVmdCA9IGNlbnRlckxlZnQgKyBcInB4XCI7XG4gICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS5yaWdodCA9IFwiYXV0b1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJlZHJhdygpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5ub0NhbGVuZGFyIHx8IHNlbGYuaXNNb2JpbGUpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdXBkYXRlTmF2aWdhdGlvbkN1cnJlbnRNb250aCgpO1xuICAgICAgICAgICAgYnVpbGREYXlzKCk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZm9jdXNBbmRDbG9zZSgpIHtcbiAgICAgICAgICAgIHNlbGYuX2lucHV0LmZvY3VzKCk7XG4gICAgICAgICAgICBpZiAod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZihcIk1TSUVcIikgIT09IC0xIHx8XG4gICAgICAgICAgICAgICAgbmF2aWdhdG9yLm1zTWF4VG91Y2hQb2ludHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIC8vIGhhY2sgLSBidWdzIGluIHRoZSB3YXkgSUUgaGFuZGxlcyBmb2N1cyBrZWVwcyB0aGUgY2FsZW5kYXIgb3BlblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoc2VsZi5jbG9zZSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2VsZWN0RGF0ZShlKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgdmFyIGlzU2VsZWN0YWJsZSA9IGZ1bmN0aW9uIChkYXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF5LmNsYXNzTGlzdCAmJlxuICAgICAgICAgICAgICAgICAgICBkYXkuY2xhc3NMaXN0LmNvbnRhaW5zKFwiZmxhdHBpY2tyLWRheVwiKSAmJlxuICAgICAgICAgICAgICAgICAgICAhZGF5LmNsYXNzTGlzdC5jb250YWlucyhcImZsYXRwaWNrci1kaXNhYmxlZFwiKSAmJlxuICAgICAgICAgICAgICAgICAgICAhZGF5LmNsYXNzTGlzdC5jb250YWlucyhcIm5vdEFsbG93ZWRcIik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHQgPSBmaW5kUGFyZW50KGUudGFyZ2V0LCBpc1NlbGVjdGFibGUpO1xuICAgICAgICAgICAgaWYgKHQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gdDtcbiAgICAgICAgICAgIHZhciBzZWxlY3RlZERhdGUgPSAoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogPSBuZXcgRGF0ZSh0YXJnZXQuZGF0ZU9iai5nZXRUaW1lKCkpKTtcbiAgICAgICAgICAgIHZhciBzaG91bGRDaGFuZ2VNb250aCA9IChzZWxlY3RlZERhdGUuZ2V0TW9udGgoKSA8IHNlbGYuY3VycmVudE1vbnRoIHx8XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWREYXRlLmdldE1vbnRoKCkgPlxuICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRNb250aCArIHNlbGYuY29uZmlnLnNob3dNb250aHMgLSAxKSAmJlxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1vZGUgIT09IFwicmFuZ2VcIjtcbiAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlRWxlbSA9IHRhcmdldDtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInNpbmdsZVwiKVxuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcyA9IFtzZWxlY3RlZERhdGVdO1xuICAgICAgICAgICAgZWxzZSBpZiAoc2VsZi5jb25maWcubW9kZSA9PT0gXCJtdWx0aXBsZVwiKSB7XG4gICAgICAgICAgICAgICAgdmFyIHNlbGVjdGVkSW5kZXggPSBpc0RhdGVTZWxlY3RlZChzZWxlY3RlZERhdGUpO1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZEluZGV4KVxuICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMuc3BsaWNlKHBhcnNlSW50KHNlbGVjdGVkSW5kZXgpLCAxKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcy5wdXNoKHNlbGVjdGVkRGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmNsZWFyKGZhbHNlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqID0gc2VsZWN0ZWREYXRlO1xuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcy5wdXNoKHNlbGVjdGVkRGF0ZSk7XG4gICAgICAgICAgICAgICAgLy8gdW5sZXNzIHNlbGVjdGluZyBzYW1lIGRhdGUgdHdpY2UsIHNvcnQgYXNjZW5kaW5nbHlcbiAgICAgICAgICAgICAgICBpZiAoY29tcGFyZURhdGVzKHNlbGVjdGVkRGF0ZSwgc2VsZi5zZWxlY3RlZERhdGVzWzBdLCB0cnVlKSAhPT0gMClcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEuZ2V0VGltZSgpIC0gYi5nZXRUaW1lKCk7IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2V0SG91cnNGcm9tSW5wdXRzKCk7XG4gICAgICAgICAgICBpZiAoc2hvdWxkQ2hhbmdlTW9udGgpIHtcbiAgICAgICAgICAgICAgICB2YXIgaXNOZXdZZWFyID0gc2VsZi5jdXJyZW50WWVhciAhPT0gc2VsZWN0ZWREYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhciA9IHNlbGVjdGVkRGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudE1vbnRoID0gc2VsZWN0ZWREYXRlLmdldE1vbnRoKCk7XG4gICAgICAgICAgICAgICAgaWYgKGlzTmV3WWVhcikge1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvblllYXJDaGFuZ2VcIik7XG4gICAgICAgICAgICAgICAgICAgIGJ1aWxkTW9udGhTd2l0Y2goKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25Nb250aENoYW5nZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVwZGF0ZU5hdmlnYXRpb25DdXJyZW50TW9udGgoKTtcbiAgICAgICAgICAgIGJ1aWxkRGF5cygpO1xuICAgICAgICAgICAgdXBkYXRlVmFsdWUoKTtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5lbmFibGVUaW1lKVxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gKHNlbGYuc2hvd1RpbWVJbnB1dCA9IHRydWUpOyB9LCA1MCk7XG4gICAgICAgICAgICAvLyBtYWludGFpbiBmb2N1c1xuICAgICAgICAgICAgaWYgKCFzaG91bGRDaGFuZ2VNb250aCAmJlxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1vZGUgIT09IFwicmFuZ2VcIiAmJlxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLnNob3dNb250aHMgPT09IDEpXG4gICAgICAgICAgICAgICAgZm9jdXNPbkRheUVsZW0odGFyZ2V0KTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHNlbGYuc2VsZWN0ZWREYXRlRWxlbSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVFbGVtICYmIHNlbGYuc2VsZWN0ZWREYXRlRWxlbS5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuaG91ckVsZW1lbnQgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBzZWxmLmhvdXJFbGVtZW50ICE9PSB1bmRlZmluZWQgJiYgc2VsZi5ob3VyRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLmNsb3NlT25TZWxlY3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgc2luZ2xlID0gc2VsZi5jb25maWcubW9kZSA9PT0gXCJzaW5nbGVcIiAmJiAhc2VsZi5jb25maWcuZW5hYmxlVGltZTtcbiAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCA9PT0gMiAmJlxuICAgICAgICAgICAgICAgICAgICAhc2VsZi5jb25maWcuZW5hYmxlVGltZTtcbiAgICAgICAgICAgICAgICBpZiAoc2luZ2xlIHx8IHJhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQW5kQ2xvc2UoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cmlnZ2VyQ2hhbmdlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIENBTExCQUNLUyA9IHtcbiAgICAgICAgICAgIGxvY2FsZTogW3NldHVwTG9jYWxlLCB1cGRhdGVXZWVrZGF5c10sXG4gICAgICAgICAgICBzaG93TW9udGhzOiBbYnVpbGRNb250aHMsIHNldENhbGVuZGFyV2lkdGgsIGJ1aWxkV2Vla2RheXNdLFxuICAgICAgICAgICAgbWluRGF0ZTogW2p1bXBUb0RhdGVdLFxuICAgICAgICAgICAgbWF4RGF0ZTogW2p1bXBUb0RhdGVdXG4gICAgICAgIH07XG4gICAgICAgIGZ1bmN0aW9uIHNldChvcHRpb24sIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9uICE9PSBudWxsICYmIHR5cGVvZiBvcHRpb24gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHNlbGYuY29uZmlnLCBvcHRpb24pO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBvcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKENBTExCQUNLU1trZXldICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBDQUxMQkFDS1Nba2V5XS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4KCk7IH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnW29wdGlvbl0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAoQ0FMTEJBQ0tTW29wdGlvbl0gIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgQ0FMTEJBQ0tTW29wdGlvbl0uZm9yRWFjaChmdW5jdGlvbiAoeCkgeyByZXR1cm4geCgpOyB9KTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChIT09LUy5pbmRleE9mKG9wdGlvbikgPiAtMSlcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWdbb3B0aW9uXSA9IGFycmF5aWZ5KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYucmVkcmF3KCk7XG4gICAgICAgICAgICB1cGRhdGVWYWx1ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2V0U2VsZWN0ZWREYXRlKGlucHV0RGF0ZSwgZm9ybWF0KSB7XG4gICAgICAgICAgICB2YXIgZGF0ZXMgPSBbXTtcbiAgICAgICAgICAgIGlmIChpbnB1dERhdGUgaW5zdGFuY2VvZiBBcnJheSlcbiAgICAgICAgICAgICAgICBkYXRlcyA9IGlucHV0RGF0ZS5tYXAoZnVuY3Rpb24gKGQpIHsgcmV0dXJuIHNlbGYucGFyc2VEYXRlKGQsIGZvcm1hdCk7IH0pO1xuICAgICAgICAgICAgZWxzZSBpZiAoaW5wdXREYXRlIGluc3RhbmNlb2YgRGF0ZSB8fCB0eXBlb2YgaW5wdXREYXRlID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgICAgIGRhdGVzID0gW3NlbGYucGFyc2VEYXRlKGlucHV0RGF0ZSwgZm9ybWF0KV07XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgaW5wdXREYXRlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChzZWxmLmNvbmZpZy5tb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzaW5nbGVcIjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInRpbWVcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVzID0gW3NlbGYucGFyc2VEYXRlKGlucHV0RGF0ZSwgZm9ybWF0KV07XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIm11bHRpcGxlXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlcyA9IGlucHV0RGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zcGxpdChzZWxmLmNvbmZpZy5jb25qdW5jdGlvbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChkYXRlKSB7IHJldHVybiBzZWxmLnBhcnNlRGF0ZShkYXRlLCBmb3JtYXQpOyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwicmFuZ2VcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVzID0gaW5wdXREYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KHNlbGYubDEwbi5yYW5nZVNlcGFyYXRvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChkYXRlKSB7IHJldHVybiBzZWxmLnBhcnNlRGF0ZShkYXRlLCBmb3JtYXQpOyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLmVycm9ySGFuZGxlcihuZXcgRXJyb3IoXCJJbnZhbGlkIGRhdGUgc3VwcGxpZWQ6IFwiICsgSlNPTi5zdHJpbmdpZnkoaW5wdXREYXRlKSkpO1xuICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzID0gZGF0ZXMuZmlsdGVyKGZ1bmN0aW9uIChkKSB7IHJldHVybiBkIGluc3RhbmNlb2YgRGF0ZSAmJiBpc0VuYWJsZWQoZCwgZmFsc2UpOyB9KTtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIpXG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEuZ2V0VGltZSgpIC0gYi5nZXRUaW1lKCk7IH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHNldERhdGUoZGF0ZSwgdHJpZ2dlckNoYW5nZSwgZm9ybWF0KSB7XG4gICAgICAgICAgICBpZiAodHJpZ2dlckNoYW5nZSA9PT0gdm9pZCAwKSB7IHRyaWdnZXJDaGFuZ2UgPSBmYWxzZTsgfVxuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gdm9pZCAwKSB7IGZvcm1hdCA9IHNlbGYuY29uZmlnLmRhdGVGb3JtYXQ7IH1cbiAgICAgICAgICAgIGlmICgoZGF0ZSAhPT0gMCAmJiAhZGF0ZSkgfHwgKGRhdGUgaW5zdGFuY2VvZiBBcnJheSAmJiBkYXRlLmxlbmd0aCA9PT0gMCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuY2xlYXIodHJpZ2dlckNoYW5nZSk7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZERhdGUoZGF0ZSwgZm9ybWF0KTtcbiAgICAgICAgICAgIHNlbGYuc2hvd1RpbWVJbnB1dCA9IHNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggPiAwO1xuICAgICAgICAgICAgc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogPVxuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlc1tzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBzZWxmLnJlZHJhdygpO1xuICAgICAgICAgICAganVtcFRvRGF0ZSgpO1xuICAgICAgICAgICAgc2V0SG91cnNGcm9tRGF0ZSgpO1xuICAgICAgICAgICAgaWYgKHNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNsZWFyKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVwZGF0ZVZhbHVlKHRyaWdnZXJDaGFuZ2UpO1xuICAgICAgICAgICAgaWYgKHRyaWdnZXJDaGFuZ2UpXG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25DaGFuZ2VcIik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcGFyc2VEYXRlUnVsZXMoYXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJyXG4gICAgICAgICAgICAgICAgLnNsaWNlKClcbiAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChydWxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBydWxlID09PSBcInN0cmluZ1wiIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBydWxlID09PSBcIm51bWJlclwiIHx8XG4gICAgICAgICAgICAgICAgICAgIHJ1bGUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnBhcnNlRGF0ZShydWxlLCB1bmRlZmluZWQsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChydWxlICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBydWxlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAgICAgICAgIHJ1bGUuZnJvbSAmJlxuICAgICAgICAgICAgICAgICAgICBydWxlLnRvKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbTogc2VsZi5wYXJzZURhdGUocnVsZS5mcm9tLCB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG86IHNlbGYucGFyc2VEYXRlKHJ1bGUudG8sIHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcnVsZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4geDsgfSk7IC8vIHJlbW92ZSBmYWxzeSB2YWx1ZXNcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXR1cERhdGVzKCkge1xuICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzID0gW107XG4gICAgICAgICAgICBzZWxmLm5vdyA9IHNlbGYucGFyc2VEYXRlKHNlbGYuY29uZmlnLm5vdykgfHwgbmV3IERhdGUoKTtcbiAgICAgICAgICAgIC8vIFdvcmthcm91bmQgSUUxMSBzZXR0aW5nIHBsYWNlaG9sZGVyIGFzIHRoZSBpbnB1dCdzIHZhbHVlXG4gICAgICAgICAgICB2YXIgcHJlbG9hZGVkRGF0ZSA9IHNlbGYuY29uZmlnLmRlZmF1bHREYXRlIHx8XG4gICAgICAgICAgICAgICAgKChzZWxmLmlucHV0Lm5vZGVOYW1lID09PSBcIklOUFVUXCIgfHxcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5pbnB1dC5ub2RlTmFtZSA9PT0gXCJURVhUQVJFQVwiKSAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxmLmlucHV0LnBsYWNlaG9sZGVyICYmXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQudmFsdWUgPT09IHNlbGYuaW5wdXQucGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICAgIDogc2VsZi5pbnB1dC52YWx1ZSk7XG4gICAgICAgICAgICBpZiAocHJlbG9hZGVkRGF0ZSlcbiAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZERhdGUocHJlbG9hZGVkRGF0ZSwgc2VsZi5jb25maWcuZGF0ZUZvcm1hdCk7XG4gICAgICAgICAgICBzZWxmLl9pbml0aWFsRGF0ZSA9XG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgPyBzZWxmLnNlbGVjdGVkRGF0ZXNbMF1cbiAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmNvbmZpZy5taW5EYXRlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5taW5EYXRlLmdldFRpbWUoKSA+IHNlbGYubm93LmdldFRpbWUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5taW5EYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHNlbGYuY29uZmlnLm1heERhdGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldFRpbWUoKSA8IHNlbGYubm93LmdldFRpbWUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi5jb25maWcubWF4RGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc2VsZi5ub3c7XG4gICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyID0gc2VsZi5faW5pdGlhbERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgIHNlbGYuY3VycmVudE1vbnRoID0gc2VsZi5faW5pdGlhbERhdGUuZ2V0TW9udGgoKTtcbiAgICAgICAgICAgIGlmIChzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICBzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iaiA9IHNlbGYuc2VsZWN0ZWREYXRlc1swXTtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5taW5UaW1lICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcubWluVGltZSA9IHNlbGYucGFyc2VEYXRlKHNlbGYuY29uZmlnLm1pblRpbWUsIFwiSDppXCIpO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1heFRpbWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5tYXhUaW1lID0gc2VsZi5wYXJzZURhdGUoc2VsZi5jb25maWcubWF4VGltZSwgXCJIOmlcIik7XG4gICAgICAgICAgICBzZWxmLm1pbkRhdGVIYXNUaW1lID1cbiAgICAgICAgICAgICAgICAhIXNlbGYuY29uZmlnLm1pbkRhdGUgJiZcbiAgICAgICAgICAgICAgICAgICAgKHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0SG91cnMoKSA+IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0TWludXRlcygpID4gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcubWluRGF0ZS5nZXRTZWNvbmRzKCkgPiAwKTtcbiAgICAgICAgICAgIHNlbGYubWF4RGF0ZUhhc1RpbWUgPVxuICAgICAgICAgICAgICAgICEhc2VsZi5jb25maWcubWF4RGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICAoc2VsZi5jb25maWcubWF4RGF0ZS5nZXRIb3VycygpID4gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcubWF4RGF0ZS5nZXRNaW51dGVzKCkgPiAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldFNlY29uZHMoKSA+IDApO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYsIFwic2hvd1RpbWVJbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLl9zaG93VGltZUlucHV0OyB9LFxuICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKGJvb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2hvd1RpbWVJbnB1dCA9IGJvb2w7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLmNhbGVuZGFyQ29udGFpbmVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5jYWxlbmRhckNvbnRhaW5lciwgXCJzaG93VGltZUlucHV0XCIsIGJvb2wpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmlzT3BlbiAmJiBwb3NpdGlvbkNhbGVuZGFyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2V0dXBJbnB1dHMoKSB7XG4gICAgICAgICAgICBzZWxmLmlucHV0ID0gc2VsZi5jb25maWcud3JhcFxuICAgICAgICAgICAgICAgID8gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiW2RhdGEtaW5wdXRdXCIpXG4gICAgICAgICAgICAgICAgOiBlbGVtZW50O1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgIGlmICghc2VsZi5pbnB1dCkge1xuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLmVycm9ySGFuZGxlcihuZXcgRXJyb3IoXCJJbnZhbGlkIGlucHV0IGVsZW1lbnQgc3BlY2lmaWVkXCIpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBoYWNrOiBzdG9yZSBwcmV2aW91cyB0eXBlIHRvIHJlc3RvcmUgaXQgYWZ0ZXIgZGVzdHJveSgpXG4gICAgICAgICAgICBzZWxmLmlucHV0Ll90eXBlID0gc2VsZi5pbnB1dC50eXBlO1xuICAgICAgICAgICAgc2VsZi5pbnB1dC50eXBlID0gXCJ0ZXh0XCI7XG4gICAgICAgICAgICBzZWxmLmlucHV0LmNsYXNzTGlzdC5hZGQoXCJmbGF0cGlja3ItaW5wdXRcIik7XG4gICAgICAgICAgICBzZWxmLl9pbnB1dCA9IHNlbGYuaW5wdXQ7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuYWx0SW5wdXQpIHtcbiAgICAgICAgICAgICAgICAvLyByZXBsaWNhdGUgc2VsZi5lbGVtZW50XG4gICAgICAgICAgICAgICAgc2VsZi5hbHRJbnB1dCA9IGNyZWF0ZUVsZW1lbnQoc2VsZi5pbnB1dC5ub2RlTmFtZSwgc2VsZi5jb25maWcuYWx0SW5wdXRDbGFzcyk7XG4gICAgICAgICAgICAgICAgc2VsZi5faW5wdXQgPSBzZWxmLmFsdElucHV0O1xuICAgICAgICAgICAgICAgIHNlbGYuYWx0SW5wdXQucGxhY2Vob2xkZXIgPSBzZWxmLmlucHV0LnBsYWNlaG9sZGVyO1xuICAgICAgICAgICAgICAgIHNlbGYuYWx0SW5wdXQuZGlzYWJsZWQgPSBzZWxmLmlucHV0LmRpc2FibGVkO1xuICAgICAgICAgICAgICAgIHNlbGYuYWx0SW5wdXQucmVxdWlyZWQgPSBzZWxmLmlucHV0LnJlcXVpcmVkO1xuICAgICAgICAgICAgICAgIHNlbGYuYWx0SW5wdXQudGFiSW5kZXggPSBzZWxmLmlucHV0LnRhYkluZGV4O1xuICAgICAgICAgICAgICAgIHNlbGYuYWx0SW5wdXQudHlwZSA9IFwidGV4dFwiO1xuICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQuc2V0QXR0cmlidXRlKFwidHlwZVwiLCBcImhpZGRlblwiKTtcbiAgICAgICAgICAgICAgICBpZiAoIXNlbGYuY29uZmlnLnN0YXRpYyAmJiBzZWxmLmlucHV0LnBhcmVudE5vZGUpXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoc2VsZi5hbHRJbnB1dCwgc2VsZi5pbnB1dC5uZXh0U2libGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXNlbGYuY29uZmlnLmFsbG93SW5wdXQpXG4gICAgICAgICAgICAgICAgc2VsZi5faW5wdXQuc2V0QXR0cmlidXRlKFwicmVhZG9ubHlcIiwgXCJyZWFkb25seVwiKTtcbiAgICAgICAgICAgIHNlbGYuX3Bvc2l0aW9uRWxlbWVudCA9IHNlbGYuY29uZmlnLnBvc2l0aW9uRWxlbWVudCB8fCBzZWxmLl9pbnB1dDtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXR1cE1vYmlsZSgpIHtcbiAgICAgICAgICAgIHZhciBpbnB1dFR5cGUgPSBzZWxmLmNvbmZpZy5lbmFibGVUaW1lXG4gICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5ub0NhbGVuZGFyXG4gICAgICAgICAgICAgICAgICAgID8gXCJ0aW1lXCJcbiAgICAgICAgICAgICAgICAgICAgOiBcImRhdGV0aW1lLWxvY2FsXCJcbiAgICAgICAgICAgICAgICA6IFwiZGF0ZVwiO1xuICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dCA9IGNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCBzZWxmLmlucHV0LmNsYXNzTmFtZSArIFwiIGZsYXRwaWNrci1tb2JpbGVcIik7XG4gICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0LnN0ZXAgPSBzZWxmLmlucHV0LmdldEF0dHJpYnV0ZShcInN0ZXBcIikgfHwgXCJhbnlcIjtcbiAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQudGFiSW5kZXggPSAxO1xuICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC50eXBlID0gaW5wdXRUeXBlO1xuICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC5kaXNhYmxlZCA9IHNlbGYuaW5wdXQuZGlzYWJsZWQ7XG4gICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0LnJlcXVpcmVkID0gc2VsZi5pbnB1dC5yZXF1aXJlZDtcbiAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQucGxhY2Vob2xkZXIgPSBzZWxmLmlucHV0LnBsYWNlaG9sZGVyO1xuICAgICAgICAgICAgc2VsZi5tb2JpbGVGb3JtYXRTdHIgPVxuICAgICAgICAgICAgICAgIGlucHV0VHlwZSA9PT0gXCJkYXRldGltZS1sb2NhbFwiXG4gICAgICAgICAgICAgICAgICAgID8gXCJZLW0tZFxcXFxUSDppOlNcIlxuICAgICAgICAgICAgICAgICAgICA6IGlucHV0VHlwZSA9PT0gXCJkYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gXCJZLW0tZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFwiSDppOlNcIjtcbiAgICAgICAgICAgIGlmIChzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQuZGVmYXVsdFZhbHVlID0gc2VsZi5tb2JpbGVJbnB1dC52YWx1ZSA9IHNlbGYuZm9ybWF0RGF0ZShzZWxmLnNlbGVjdGVkRGF0ZXNbMF0sIHNlbGYubW9iaWxlRm9ybWF0U3RyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5taW5EYXRlKVxuICAgICAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQubWluID0gc2VsZi5mb3JtYXREYXRlKHNlbGYuY29uZmlnLm1pbkRhdGUsIFwiWS1tLWRcIik7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubWF4RGF0ZSlcbiAgICAgICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0Lm1heCA9IHNlbGYuZm9ybWF0RGF0ZShzZWxmLmNvbmZpZy5tYXhEYXRlLCBcIlktbS1kXCIpO1xuICAgICAgICAgICAgc2VsZi5pbnB1dC50eXBlID0gXCJoaWRkZW5cIjtcbiAgICAgICAgICAgIGlmIChzZWxmLmFsdElucHV0ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC50eXBlID0gXCJoaWRkZW5cIjtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuaW5wdXQucGFyZW50Tm9kZSlcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5pbnB1dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzZWxmLm1vYmlsZUlucHV0LCBzZWxmLmlucHV0Lm5leHRTaWJsaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChfYSkgeyB9XG4gICAgICAgICAgICBiaW5kKHNlbGYubW9iaWxlSW5wdXQsIFwiY2hhbmdlXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5zZXREYXRlKGUudGFyZ2V0LnZhbHVlLCBmYWxzZSwgc2VsZi5tb2JpbGVGb3JtYXRTdHIpO1xuICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uQ2hhbmdlXCIpO1xuICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uQ2xvc2VcIik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0b2dnbGUoZSkge1xuICAgICAgICAgICAgaWYgKHNlbGYuaXNPcGVuID09PSB0cnVlKVxuICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmNsb3NlKCk7XG4gICAgICAgICAgICBzZWxmLm9wZW4oZSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdHJpZ2dlckV2ZW50KGV2ZW50LCBkYXRhKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgaW5zdGFuY2UgaGFzIGJlZW4gZGVzdHJveWVkIGFscmVhZHksIGFsbCBob29rcyBoYXZlIGJlZW4gcmVtb3ZlZFxuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGhvb2tzID0gc2VsZi5jb25maWdbZXZlbnRdO1xuICAgICAgICAgICAgaWYgKGhvb2tzICE9PSB1bmRlZmluZWQgJiYgaG9va3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBob29rc1tpXSAmJiBpIDwgaG9va3MubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgICAgIGhvb2tzW2ldKHNlbGYuc2VsZWN0ZWREYXRlcywgc2VsZi5pbnB1dC52YWx1ZSwgc2VsZiwgZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXZlbnQgPT09IFwib25DaGFuZ2VcIikge1xuICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQuZGlzcGF0Y2hFdmVudChjcmVhdGVFdmVudChcImNoYW5nZVwiKSk7XG4gICAgICAgICAgICAgICAgLy8gbWFueSBmcm9udC1lbmQgZnJhbWV3b3JrcyBiaW5kIHRvIHRoZSBpbnB1dCBldmVudFxuICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQuZGlzcGF0Y2hFdmVudChjcmVhdGVFdmVudChcImlucHV0XCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjcmVhdGVFdmVudChuYW1lKSB7XG4gICAgICAgICAgICB2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiRXZlbnRcIik7XG4gICAgICAgICAgICBlLmluaXRFdmVudChuYW1lLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlzRGF0ZVNlbGVjdGVkKGRhdGUpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBhcmVEYXRlcyhzZWxmLnNlbGVjdGVkRGF0ZXNbaV0sIGRhdGUpID09PSAwKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJcIiArIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaXNEYXRlSW5SYW5nZShkYXRlKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubW9kZSAhPT0gXCJyYW5nZVwiIHx8IHNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggPCAyKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiAoY29tcGFyZURhdGVzKGRhdGUsIHNlbGYuc2VsZWN0ZWREYXRlc1swXSkgPj0gMCAmJlxuICAgICAgICAgICAgICAgIGNvbXBhcmVEYXRlcyhkYXRlLCBzZWxmLnNlbGVjdGVkRGF0ZXNbMV0pIDw9IDApO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZU5hdmlnYXRpb25DdXJyZW50TW9udGgoKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubm9DYWxlbmRhciB8fCBzZWxmLmlzTW9iaWxlIHx8ICFzZWxmLm1vbnRoTmF2KVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHNlbGYueWVhckVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKHllYXJFbGVtZW50LCBpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGQgPSBuZXcgRGF0ZShzZWxmLmN1cnJlbnRZZWFyLCBzZWxmLmN1cnJlbnRNb250aCwgMSk7XG4gICAgICAgICAgICAgICAgZC5zZXRNb250aChzZWxmLmN1cnJlbnRNb250aCArIGkpO1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5zaG93TW9udGhzID4gMSB8fFxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5tb250aFNlbGVjdG9yVHlwZSA9PT0gXCJzdGF0aWNcIikge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLm1vbnRoRWxlbWVudHNbaV0udGV4dENvbnRlbnQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgbW9udGhUb1N0cihkLmdldE1vbnRoKCksIHNlbGYuY29uZmlnLnNob3J0aGFuZEN1cnJlbnRNb250aCwgc2VsZi5sMTBuKSArIFwiIFwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5tb250aHNEcm9wZG93bkNvbnRhaW5lci52YWx1ZSA9IGQuZ2V0TW9udGgoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB5ZWFyRWxlbWVudC52YWx1ZSA9IGQuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzZWxmLl9oaWRlUHJldk1vbnRoQXJyb3cgPVxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1pbkRhdGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICAoc2VsZi5jdXJyZW50WWVhciA9PT0gc2VsZi5jb25maWcubWluRGF0ZS5nZXRGdWxsWWVhcigpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHNlbGYuY3VycmVudE1vbnRoIDw9IHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0TW9udGgoKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmN1cnJlbnRZZWFyIDwgc2VsZi5jb25maWcubWluRGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgIHNlbGYuX2hpZGVOZXh0TW9udGhBcnJvdyA9XG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcubWF4RGF0ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgIChzZWxmLmN1cnJlbnRZZWFyID09PSBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldEZ1bGxZZWFyKClcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi5jdXJyZW50TW9udGggKyAxID4gc2VsZi5jb25maWcubWF4RGF0ZS5nZXRNb250aCgpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHNlbGYuY3VycmVudFllYXIgPiBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGdldERhdGVTdHIoZm9ybWF0KSB7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi5zZWxlY3RlZERhdGVzXG4gICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoZE9iaikgeyByZXR1cm4gc2VsZi5mb3JtYXREYXRlKGRPYmosIGZvcm1hdCk7IH0pXG4gICAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoZCwgaSwgYXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29uZmlnLm1vZGUgIT09IFwicmFuZ2VcIiB8fFxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5lbmFibGVUaW1lIHx8XG4gICAgICAgICAgICAgICAgICAgIGFyci5pbmRleE9mKGQpID09PSBpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuam9pbihzZWxmLmNvbmZpZy5tb2RlICE9PSBcInJhbmdlXCJcbiAgICAgICAgICAgICAgICA/IHNlbGYuY29uZmlnLmNvbmp1bmN0aW9uXG4gICAgICAgICAgICAgICAgOiBzZWxmLmwxMG4ucmFuZ2VTZXBhcmF0b3IpO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBVcGRhdGVzIHRoZSB2YWx1ZXMgb2YgaW5wdXRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2FsZW5kYXJcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZVZhbHVlKHRyaWdnZXJDaGFuZ2UpIHtcbiAgICAgICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlID09PSB2b2lkIDApIHsgdHJpZ2dlckNoYW5nZSA9IHRydWU7IH1cbiAgICAgICAgICAgIGlmIChzZWxmLm1vYmlsZUlucHV0ICE9PSB1bmRlZmluZWQgJiYgc2VsZi5tb2JpbGVGb3JtYXRTdHIpIHtcbiAgICAgICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0LnZhbHVlID1cbiAgICAgICAgICAgICAgICAgICAgc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmZvcm1hdERhdGUoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmosIHNlbGYubW9iaWxlRm9ybWF0U3RyKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBcIlwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5pbnB1dC52YWx1ZSA9IGdldERhdGVTdHIoc2VsZi5jb25maWcuZGF0ZUZvcm1hdCk7XG4gICAgICAgICAgICBpZiAoc2VsZi5hbHRJbnB1dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC52YWx1ZSA9IGdldERhdGVTdHIoc2VsZi5jb25maWcuYWx0Rm9ybWF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvblZhbHVlVXBkYXRlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG9uTW9udGhOYXZDbGljayhlKSB7XG4gICAgICAgICAgICB2YXIgaXNQcmV2TW9udGggPSBzZWxmLnByZXZNb250aE5hdi5jb250YWlucyhlLnRhcmdldCk7XG4gICAgICAgICAgICB2YXIgaXNOZXh0TW9udGggPSBzZWxmLm5leHRNb250aE5hdi5jb250YWlucyhlLnRhcmdldCk7XG4gICAgICAgICAgICBpZiAoaXNQcmV2TW9udGggfHwgaXNOZXh0TW9udGgpIHtcbiAgICAgICAgICAgICAgICBjaGFuZ2VNb250aChpc1ByZXZNb250aCA/IC0xIDogMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzZWxmLnllYXJFbGVtZW50cy5pbmRleE9mKGUudGFyZ2V0KSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgZS50YXJnZXQuc2VsZWN0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChlLnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoXCJhcnJvd1VwXCIpKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jaGFuZ2VZZWFyKHNlbGYuY3VycmVudFllYXIgKyAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhcImFycm93RG93blwiKSkge1xuICAgICAgICAgICAgICAgIHNlbGYuY2hhbmdlWWVhcihzZWxmLmN1cnJlbnRZZWFyIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdGltZVdyYXBwZXIoZSkge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdmFyIGlzS2V5RG93biA9IGUudHlwZSA9PT0gXCJrZXlkb3duXCIsIGlucHV0ID0gZS50YXJnZXQ7XG4gICAgICAgICAgICBpZiAoc2VsZi5hbVBNICE9PSB1bmRlZmluZWQgJiYgZS50YXJnZXQgPT09IHNlbGYuYW1QTSkge1xuICAgICAgICAgICAgICAgIHNlbGYuYW1QTS50ZXh0Q29udGVudCA9XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubDEwbi5hbVBNW2ludChzZWxmLmFtUE0udGV4dENvbnRlbnQgPT09IHNlbGYubDEwbi5hbVBNWzBdKV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgbWluID0gcGFyc2VGbG9hdChpbnB1dC5nZXRBdHRyaWJ1dGUoXCJtaW5cIikpLCBtYXggPSBwYXJzZUZsb2F0KGlucHV0LmdldEF0dHJpYnV0ZShcIm1heFwiKSksIHN0ZXAgPSBwYXJzZUZsb2F0KGlucHV0LmdldEF0dHJpYnV0ZShcInN0ZXBcIikpLCBjdXJWYWx1ZSA9IHBhcnNlSW50KGlucHV0LnZhbHVlLCAxMCksIGRlbHRhID0gZS5kZWx0YSB8fFxuICAgICAgICAgICAgICAgIChpc0tleURvd24gPyAoZS53aGljaCA9PT0gMzggPyAxIDogLTEpIDogMCk7XG4gICAgICAgICAgICB2YXIgbmV3VmFsdWUgPSBjdXJWYWx1ZSArIHN0ZXAgKiBkZWx0YTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQudmFsdWUgIT09IFwidW5kZWZpbmVkXCIgJiYgaW5wdXQudmFsdWUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgICAgdmFyIGlzSG91ckVsZW0gPSBpbnB1dCA9PT0gc2VsZi5ob3VyRWxlbWVudCwgaXNNaW51dGVFbGVtID0gaW5wdXQgPT09IHNlbGYubWludXRlRWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAobmV3VmFsdWUgPCBtaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KCFpc0hvdXJFbGVtKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludChpc0hvdXJFbGVtKSAmJiBpbnQoIXNlbGYuYW1QTSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNNaW51dGVFbGVtKVxuICAgICAgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50TnVtSW5wdXQodW5kZWZpbmVkLCAtMSwgc2VsZi5ob3VyRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5ld1ZhbHVlID4gbWF4KSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0ID09PSBzZWxmLmhvdXJFbGVtZW50ID8gbmV3VmFsdWUgLSBtYXggLSBpbnQoIXNlbGYuYW1QTSkgOiBtaW47XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc01pbnV0ZUVsZW0pXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnROdW1JbnB1dCh1bmRlZmluZWQsIDEsIHNlbGYuaG91ckVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5hbVBNICYmXG4gICAgICAgICAgICAgICAgICAgIGlzSG91ckVsZW0gJiZcbiAgICAgICAgICAgICAgICAgICAgKHN0ZXAgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbmV3VmFsdWUgKyBjdXJWYWx1ZSA9PT0gMjNcbiAgICAgICAgICAgICAgICAgICAgICAgIDogTWF0aC5hYnMobmV3VmFsdWUgLSBjdXJWYWx1ZSkgPiBzdGVwKSkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmFtUE0udGV4dENvbnRlbnQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sMTBuLmFtUE1baW50KHNlbGYuYW1QTS50ZXh0Q29udGVudCA9PT0gc2VsZi5sMTBuLmFtUE1bMF0pXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPSBwYWQobmV3VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGluaXQoKTtcbiAgICAgICAgcmV0dXJuIHNlbGY7XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgZnVuY3Rpb24gX2ZsYXRwaWNrcihub2RlTGlzdCwgY29uZmlnKSB7XG4gICAgICAgIC8vIHN0YXRpYyBsaXN0XG4gICAgICAgIHZhciBub2RlcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZVxuICAgICAgICAgICAgLmNhbGwobm9kZUxpc3QpXG4gICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7IH0pO1xuICAgICAgICB2YXIgaW5zdGFuY2VzID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChub2RlLmdldEF0dHJpYnV0ZShcImRhdGEtZnAtb21pdFwiKSAhPT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuX2ZsYXRwaWNrciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuX2ZsYXRwaWNrci5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuX2ZsYXRwaWNrciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbm9kZS5fZmxhdHBpY2tyID0gRmxhdHBpY2tySW5zdGFuY2Uobm9kZSwgY29uZmlnIHx8IHt9KTtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZXMucHVzaChub2RlLl9mbGF0cGlja3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnN0YW5jZXMubGVuZ3RoID09PSAxID8gaW5zdGFuY2VzWzBdIDogaW5zdGFuY2VzO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgdHlwZW9mIEhUTUxDb2xsZWN0aW9uICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgIHR5cGVvZiBOb2RlTGlzdCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAvLyBicm93c2VyIGVudlxuICAgICAgICBIVE1MQ29sbGVjdGlvbi5wcm90b3R5cGUuZmxhdHBpY2tyID0gTm9kZUxpc3QucHJvdG90eXBlLmZsYXRwaWNrciA9IGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgICAgIHJldHVybiBfZmxhdHBpY2tyKHRoaXMsIGNvbmZpZyk7XG4gICAgICAgIH07XG4gICAgICAgIEhUTUxFbGVtZW50LnByb3RvdHlwZS5mbGF0cGlja3IgPSBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICAgICAgICByZXR1cm4gX2ZsYXRwaWNrcihbdGhpc10sIGNvbmZpZyk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgdmFyIGZsYXRwaWNrciA9IGZ1bmN0aW9uIChzZWxlY3RvciwgY29uZmlnKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBfZmxhdHBpY2tyKHdpbmRvdy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSwgY29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzZWxlY3RvciBpbnN0YW5jZW9mIE5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBfZmxhdHBpY2tyKFtzZWxlY3Rvcl0sIGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gX2ZsYXRwaWNrcihzZWxlY3RvciwgY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBmbGF0cGlja3IuZGVmYXVsdENvbmZpZyA9IHt9O1xuICAgIGZsYXRwaWNrci5sMTBucyA9IHtcbiAgICAgICAgZW46IF9fYXNzaWduKHt9LCBlbmdsaXNoKSxcbiAgICAgICAgXCJkZWZhdWx0XCI6IF9fYXNzaWduKHt9LCBlbmdsaXNoKVxuICAgIH07XG4gICAgZmxhdHBpY2tyLmxvY2FsaXplID0gZnVuY3Rpb24gKGwxMG4pIHtcbiAgICAgICAgZmxhdHBpY2tyLmwxMG5zW1wiZGVmYXVsdFwiXSA9IF9fYXNzaWduKHt9LCBmbGF0cGlja3IubDEwbnNbXCJkZWZhdWx0XCJdLCBsMTBuKTtcbiAgICB9O1xuICAgIGZsYXRwaWNrci5zZXREZWZhdWx0cyA9IGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgZmxhdHBpY2tyLmRlZmF1bHRDb25maWcgPSBfX2Fzc2lnbih7fSwgZmxhdHBpY2tyLmRlZmF1bHRDb25maWcsIGNvbmZpZyk7XG4gICAgfTtcbiAgICBmbGF0cGlja3IucGFyc2VEYXRlID0gY3JlYXRlRGF0ZVBhcnNlcih7fSk7XG4gICAgZmxhdHBpY2tyLmZvcm1hdERhdGUgPSBjcmVhdGVEYXRlRm9ybWF0dGVyKHt9KTtcbiAgICBmbGF0cGlja3IuY29tcGFyZURhdGVzID0gY29tcGFyZURhdGVzO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHR5cGVvZiBqUXVlcnkgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIGpRdWVyeS5mbiAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBqUXVlcnkuZm4uZmxhdHBpY2tyID0gZnVuY3Rpb24gKGNvbmZpZykge1xuICAgICAgICAgICAgcmV0dXJuIF9mbGF0cGlja3IodGhpcywgY29uZmlnKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9jYW1lbGNhc2VcbiAgICBEYXRlLnByb3RvdHlwZS5mcF9pbmNyID0gZnVuY3Rpb24gKGRheXMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMuZ2V0RnVsbFllYXIoKSwgdGhpcy5nZXRNb250aCgpLCB0aGlzLmdldERhdGUoKSArICh0eXBlb2YgZGF5cyA9PT0gXCJzdHJpbmdcIiA/IHBhcnNlSW50KGRheXMsIDEwKSA6IGRheXMpKTtcbiAgICB9O1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHdpbmRvdy5mbGF0cGlja3IgPSBmbGF0cGlja3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZsYXRwaWNrcjtcblxufSkpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vbm9kZV9tb2R1bGVzL2ZsYXRwaWNrci9kaXN0L2ZsYXRwaWNrci5qcyIsImltcG9ydCBGaWVsZCBmcm9tICcuL2ZpZWxkLmpzJztcblxuLyoqXG4gKiBOdW1iZXIgRmllbGQgZnVuY3Rpb25hbGl0eS5cbiAqXG4gKiBAc2luY2UgMS40LjBcbiAqL1xuY2xhc3MgRmllbGROdW1iZXIgZXh0ZW5kcyBGaWVsZCB7XG5cbiAgICAvKipcbiAgICAgKiBDbGFzcyBjb25zdHJ1Y3Rvci5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKCRmaWVsZCkge1xuXG4gICAgICAgIHN1cGVyKCRmaWVsZCwgJ251bWJlcicpO1xuXG4gICAgICAgIHRoaXMuaW5pdEZpZWxkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZXMgdGhlIE51bWJlciBmaWVsZC5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqL1xuICAgIGluaXRGaWVsZCgpIHtcblxuICAgICAgICB0aGlzLiR1aSA9IHtcbiAgICAgICAgICAgIGNvbnRhaW5lcjogdGhpcy4kZmllbGQsXG4gICAgICAgICAgICBpbnB1dDogdGhpcy4kZmllbGQuZmluZCgnLmZpZWxkaGVscGVycy1maWVsZC1pbnB1dCcpLFxuICAgICAgICAgICAgaW5jcmVhc2U6IHRoaXMuJGZpZWxkLmZpbmQoJ1tkYXRhLW51bWJlci1pbmNyZWFzZV0nKSxcbiAgICAgICAgICAgIGRlY3JlYXNlOiB0aGlzLiRmaWVsZC5maW5kKCdbZGF0YS1udW1iZXItZGVjcmVhc2VdJyksXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5pbnRlcnZhbHMgPSB7XG4gICAgICAgICAgICBpbmNyZWFzZToge1xuICAgICAgICAgICAgICAgIG5vcm1hbDogcGFyc2VGbG9hdCh0aGlzLm9wdGlvbnMuaW5jcmVhc2VJbnRlcnZhbCksXG4gICAgICAgICAgICAgICAgYWx0OiBwYXJzZUZsb2F0KHRoaXMub3B0aW9ucy5hbHRJbmNyZWFzZUludGVydmFsKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWNyZWFzZToge1xuICAgICAgICAgICAgICAgIG5vcm1hbDogcGFyc2VGbG9hdCh0aGlzLm9wdGlvbnMuZGVjcmVhc2VJbnRlcnZhbCksXG4gICAgICAgICAgICAgICAgYWx0OiBwYXJzZUZsb2F0KHRoaXMub3B0aW9ucy5hbHREZWNyZWFzZUludGVydmFsKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY29uc3RyYWluTWF4ID0gdGhpcy5vcHRpb25zLm1heDtcbiAgICAgICAgbGV0IGNvbnN0cmFpbk1pbiA9IHRoaXMub3B0aW9ucy5taW5cblxuICAgICAgICB0aGlzLmNvbnN0cmFpbnRzID0ge1xuICAgICAgICAgICAgbWF4OiBjb25zdHJhaW5NYXggIT09ICdub25lJyA/IHBhcnNlRmxvYXQoY29uc3RyYWluTWF4KSA6IGZhbHNlLFxuICAgICAgICAgICAgbWluOiBjb25zdHJhaW5NaW4gIT09ICdub25lJyA/IHBhcnNlRmxvYXQoY29uc3RyYWluTWluKSA6IGZhbHNlLFxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zaGlmdEtleVV0aWxpdHkoKTtcbiAgICAgICAgdGhpcy5zZXR1cEhhbmRsZXJzKCk7XG5cbiAgICAgICAgbGV0IGluaXRpYWxWYWx1ZSA9IHRoaXMuJHVpLmlucHV0LnZhbCgpO1xuICAgICAgICB0aGlzLnZhbHVlICAgICAgID0gIWluaXRpYWxWYWx1ZSA/IDAgOiBwYXJzZUZsb2F0KGluaXRpYWxWYWx1ZSk7XG5cbiAgICAgICAgLy8gSW5pdGlhbGl6ZXMgdGhlIGZpZWxkXG4gICAgICAgIHRoaXMudmFsaWRhdGVJbnB1dCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhlbHBzIGRldGVybWluZSBzaGlmdCBrZXkgcHJlc3Mgc3RhdHVzLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICovXG4gICAgc2hpZnRLZXlVdGlsaXR5KCkge1xuXG4gICAgICAgIHRoaXMuc2hpZnRLZXlEb3duID0gZmFsc2U7XG5cbiAgICAgICAgalF1ZXJ5KGRvY3VtZW50KS5vbigna2V5ZG93bicsIChlKSA9PiB7XG5cbiAgICAgICAgICAgIGlmICggZS53aGljaCA9PT0gMTYgKSB7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNoaWZ0S2V5RG93biA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGpRdWVyeShkb2N1bWVudCkub24oJ2tleXVwJywgKGUpID0+IHtcblxuICAgICAgICAgICAgaWYgKCBlLndoaWNoID09PSAxNiApIHtcblxuICAgICAgICAgICAgICAgIHRoaXMuc2hpZnRLZXlEb3duID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdXAgdGhlIGNsYXNzIGhhbmRsZXJzLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICovXG4gICAgc2V0dXBIYW5kbGVycygpIHtcblxuICAgICAgICB0aGlzLiR1aS5pbmNyZWFzZS5jbGljaygoZSkgPT4ge1xuXG4gICAgICAgICAgICB0aGlzLmluY3JlYXNlTnVtYmVyKGUpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLiR1aS5kZWNyZWFzZS5jbGljaygoZSkgPT4ge1xuXG4gICAgICAgICAgICB0aGlzLmRlY3JlYXNlTnVtYmVyKGUpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLiR1aS5pbnB1dC5jaGFuZ2UoKGUpID0+IHtcblxuICAgICAgICAgICAgdGhpcy5pbnB1dEV4dGVybmFsQ2hhbmdlKGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbmNyZWFzZXMgdGhlIGlucHV0IG51bWJlci5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqL1xuICAgIGluY3JlYXNlTnVtYmVyKCkge1xuXG4gICAgICAgIGxldCBhbW91bnQgICAgPSB0aGlzLnNoaWZ0S2V5RG93biA/IHRoaXMuaW50ZXJ2YWxzLmluY3JlYXNlLmFsdCA6IHRoaXMuaW50ZXJ2YWxzLmluY3JlYXNlLm5vcm1hbDtcbiAgICAgICAgbGV0IG5ld051bWJlciA9IHRoaXMudmFsdWUgKyBhbW91bnQ7XG5cbiAgICAgICAgdGhpcy4kdWkuaW5wdXQudmFsKG5ld051bWJlcik7XG4gICAgICAgIHRoaXMuJHVpLmlucHV0LnRyaWdnZXIoJ2NoYW5nZScpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlY3JlYXNlcyB0aGUgaW5wdXQgbnVtYmVyLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICovXG4gICAgZGVjcmVhc2VOdW1iZXIoKSB7XG5cbiAgICAgICAgbGV0IGFtb3VudCAgICA9IHRoaXMuc2hpZnRLZXlEb3duID8gdGhpcy5pbnRlcnZhbHMuZGVjcmVhc2UuYWx0IDogdGhpcy5pbnRlcnZhbHMuZGVjcmVhc2Uubm9ybWFsO1xuICAgICAgICBsZXQgbmV3TnVtYmVyID0gdGhpcy52YWx1ZSAtIGFtb3VudDtcblxuICAgICAgICB0aGlzLiR1aS5pbnB1dC52YWwobmV3TnVtYmVyKTtcbiAgICAgICAgdGhpcy4kdWkuaW5wdXQudHJpZ2dlcignY2hhbmdlJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gdGhlIGlucHV0IGNoYW5nZS4gVHlwaWNhbGx5IGZyb20gdXNlciB0eXBpbmcgb3Igb3RoZXIgc2NyaXB0cyBtb2RpZnlpbmcuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMS40LjBcbiAgICAgKi9cbiAgICBpbnB1dEV4dGVybmFsQ2hhbmdlKCkge1xuXG4gICAgICAgIHRoaXMudmFsaWRhdGVJbnB1dCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJ1bnMgbnVtYmVyIHRocm91Z2ggY29uc3RyYWlucy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7aW50fSBudW1iZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgKi9cbiAgICBjb25zdHJhaW5OdW1iZXIobnVtYmVyKSB7XG5cbiAgICAgICAgbGV0IHN0YXR1cyA9ICd1bm1vZGlmaWVkJztcblxuICAgICAgICBpZiAoIHRoaXMuY29uc3RyYWludHMubWF4ICE9PSBmYWxzZSAmJiBudW1iZXIgPiB0aGlzLmNvbnN0cmFpbnRzLm1heCApIHtcblxuICAgICAgICAgICAgc3RhdHVzID0gJ21heCc7XG4gICAgICAgICAgICBudW1iZXIgPSB0aGlzLmNvbnN0cmFpbnRzLm1heDtcblxuICAgICAgICB9IGVsc2UgaWYgKCB0aGlzLmNvbnN0cmFpbnRzLm1pbiAhPT0gZmFsc2UgJiYgbnVtYmVyIDwgdGhpcy5jb25zdHJhaW50cy5taW4gKSB7XG5cbiAgICAgICAgICAgIHN0YXR1cyA9ICdtaW4nO1xuICAgICAgICAgICAgbnVtYmVyID0gdGhpcy5jb25zdHJhaW50cy5taW47XG4gICAgICAgIH1cblxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICBudW1iZXIsXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSdW5zIGlucHV0IHZhbHVlIHRocm91Z2ggY29uc3RyYWludHMgdG8gZW5zdXJlIGl0IGlzIGFjY3VyYXRlLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICovXG4gICAgdmFsaWRhdGVJbnB1dCgpIHtcblxuICAgICAgICBsZXQgY3VycmVudFZhbHVlID0gdGhpcy4kdWkuaW5wdXQudmFsKCk7XG5cbiAgICAgICAgLy8gQ29uc3RyYWluIHRvIG51bWJlcnNcbiAgICAgICAgbGV0IG1hdGNoZXMgID0gY3VycmVudFZhbHVlLm1hdGNoKC9eLT9bMC05XVxcZCooXFwuXFxkKyk/JC8pO1xuICAgICAgICBjdXJyZW50VmFsdWUgPSAobWF0Y2hlcyAmJiBwYXJzZUZsb2F0KG1hdGNoZXNbMF0pKSB8fCAwO1xuXG4gICAgICAgIGxldCBjb25zdHJhaW50cyA9IHRoaXMuY29uc3RyYWluTnVtYmVyKGN1cnJlbnRWYWx1ZSk7XG5cbiAgICAgICAgc3dpdGNoICggY29uc3RyYWludHMuc3RhdHVzICkge1xuXG4gICAgICAgICAgICBjYXNlICdtYXgnOlxuXG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVEZWNyZWFzZURpc2FibGVkVUkodHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVJbmNyZWFzZURpc2FibGVkVUkoZmFsc2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdtaW4nOlxuXG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVJbmNyZWFzZURpc2FibGVkVUkodHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVEZWNyZWFzZURpc2FibGVkVUkoZmFsc2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuXG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVJbmNyZWFzZURpc2FibGVkVUkodHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVEZWNyZWFzZURpc2FibGVkVUkodHJ1ZSk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudmFsdWUgPSBjb25zdHJhaW50cy5udW1iZXI7XG4gICAgICAgIHRoaXMuJHVpLmlucHV0LnZhbCh0aGlzLnZhbHVlKTtcblxuICAgICAgICBpZiAoIGN1cnJlbnRWYWx1ZSAhPT0gdGhpcy52YWx1ZSApIHtcblxuICAgICAgICAgICAgdGhpcy4kdWkuaW5wdXQudHJpZ2dlcignY2hhbmdlJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcy9FbmFibGVzIHRoZSBpbmNyZWFzZSBidXR0b24uXG4gICAgICpcbiAgICAgKiBAc2luY2UgMS40LjBcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Ym9vbH0gZW5hYmxlIFRydWUgdG8gc2V0IHRvIGVuYWJsZWQsIGZhbHNlIHRvIHNldCB0byBkaXNhYmxlZFxuICAgICAqL1xuICAgIHRvZ2dsZUluY3JlYXNlRGlzYWJsZWRVSShlbmFibGUpIHtcblxuICAgICAgICB0aGlzLiR1aS5pbmNyZWFzZS5wcm9wKCdkaXNhYmxlZCcsICFlbmFibGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc2FibGVzL0VuYWJsZXMgdGhlIGRlY3JlYXNlIGJ1dHRvbi5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqXG4gICAgICogQHBhcmFtIHtib29sfSBlbmFibGUgVHJ1ZSB0byBzZXQgdG8gZW5hYmxlZCwgZmFsc2UgdG8gc2V0IHRvIGRpc2FibGVkXG4gICAgICovXG4gICAgdG9nZ2xlRGVjcmVhc2VEaXNhYmxlZFVJKGVuYWJsZSkge1xuXG4gICAgICAgIHRoaXMuJHVpLmRlY3JlYXNlLnByb3AoJ2Rpc2FibGVkJywgIWVuYWJsZSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEZpbmRzIGFuZCBpbml0aWFsaXplcyBhbGwgTnVtYmVyIGZpZWxkcy5cbiAqXG4gKiBAc2luY2UgMS40LjBcbiAqL1xuY2xhc3MgRmllbGROdW1iZXJJbml0aWFsaXplIHtcblxuICAgIC8qKlxuICAgICAqIENsYXNzIGNvbnN0cnVjdG9yLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2pRdWVyeX0gJHJvb3QgUm9vdCBlbGVtZW50IHRvIGluaXRpYWxpemUgZmllbGRzIGluc2lkZS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcigkcm9vdCkge1xuXG4gICAgICAgIGNvbnN0IGFwaSA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5maWVsZHMgPSBbXTtcblxuICAgICAgICBsZXQgJGZpZWxkcyA9ICRyb290LmZpbmQoJ1tkYXRhLWZpZWxkaGVscGVycy1maWVsZC1udW1iZXJdJyk7XG5cbiAgICAgICAgaWYgKCAkZmllbGRzLmxlbmd0aCApIHtcblxuICAgICAgICAgICAgJGZpZWxkcy5lYWNoKGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGFwaS5pbml0aWFsaXplRmllbGQoalF1ZXJ5KHRoaXMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZXMgdGhlIGZpZWxkLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2pRdWVyeX0gJGZpZWxkXG4gICAgICovXG4gICAgaW5pdGlhbGl6ZUZpZWxkKCRmaWVsZCkge1xuXG4gICAgICAgIHRoaXMuZmllbGRzLnB1c2goe1xuICAgICAgICAgICAgJGZpZWxkLFxuICAgICAgICAgICAgYXBpOiBuZXcgRmllbGROdW1iZXIoJGZpZWxkKSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBGaWVsZE51bWJlckluaXRpYWxpemU7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vYXNzZXRzL3NyYy9qcy9hZG1pbi9maWVsZHMvZmllbGQtbnVtYmVyLmpzIiwiaW1wb3J0IEZpZWxkIGZyb20gJy4vZmllbGQuanMnO1xuXG4vKipcbiAqIENvbG9yIFBpY2tlciBGaWVsZCBmdW5jdGlvbmFsaXR5LlxuICpcbiAqIEBzaW5jZSAxLjQuMFxuICovXG5jbGFzcyBGaWVsZENvbG9yUGlja2VyIGV4dGVuZHMgRmllbGQge1xuXG4gICAgLyoqXG4gICAgICogQ2xhc3MgY29uc3RydWN0b3IuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMS40LjBcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcigkZmllbGQpIHtcblxuICAgICAgICBzdXBlcigkZmllbGQsICdjb2xvcnBpY2tlcicpO1xuXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZUNvbG9ycGlja2VyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZXMgdGhlIENvbG9yIFBpY2tlci5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqL1xuICAgIGluaXRpYWxpemVDb2xvcnBpY2tlcigpIHtcblxuICAgICAgICBpZiAoICEgdGhpcy4kZmllbGQudmFsKCkgKSB7XG4gICAgICAgICAgICB0aGlzLnNldERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIFxuICAgICAgICB0aGlzLiRmaWVsZC53cENvbG9yUGlja2VyKCB0aGlzLm9wdGlvbnMuY29sb3JwaWNrZXJPcHRpb25zICk7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBDbGVhbnMgdXAgYWZ0ZXIgYSByZXBlYXRlciBhZGQvaW5pdC5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqL1xuICAgIGZpZWxkQ2xlYW51cCgpIHtcblxuICAgICAgICB0aGlzLiR3cmFwcGVyLmZpbmQoJ1tkYXRhLWZpZWxkaGVscGVycy1maWVsZC1jb2xvcnBpY2tlcl0nKVxuICAgICAgICAgICAgLmFwcGVuZFRvKHRoaXMuJHdyYXBwZXIuZmluZCgnLmZpZWxkaGVscGVycy1maWVsZC1jb250ZW50JykpO1xuXG4gICAgICAgIHRoaXMuJHdyYXBwZXIuZmluZCgnLndwLXBpY2tlci1jb250YWluZXInKS5yZW1vdmUoKTtcbiAgICB9XG59XG5cbi8qKlxuICogRmluZHMgYW5kIGluaXRpYWxpemVzIGFsbCBDb2xvciBQaWNrZXIgZmllbGRzLlxuICpcbiAqIEBzaW5jZSAxLjQuMFxuICovXG5jbGFzcyBGaWVsZENvbG9yUGlja2VySW5pdGlhbGl6ZSB7XG5cbiAgICAvKipcbiAgICAgKiBDbGFzcyBjb25zdHJ1Y3Rvci5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqXG4gICAgICogQHBhcmFtIHtqUXVlcnl9ICRyb290IFJvb3QgZWxlbWVudCB0byBpbml0aWFsaXplIGZpZWxkcyBpbnNpZGUuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoJHJvb3QpIHtcblxuICAgICAgICBjb25zdCBhcGkgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMuZmllbGRzID0gW107XG5cbiAgICAgICAgbGV0ICRmaWVsZHMgPSAkcm9vdC5maW5kKCdbZGF0YS1maWVsZGhlbHBlcnMtZmllbGQtY29sb3JwaWNrZXJdJyk7XG5cbiAgICAgICAgaWYgKCAkZmllbGRzLmxlbmd0aCApIHtcblxuICAgICAgICAgICAgaWYgKCFqUXVlcnkuaXNGdW5jdGlvbihqUXVlcnkuZm4ud3BDb2xvclBpY2tlcikpIHtcblxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZpZWxkIEhlbHBlcnMgRXJyb3I6IFRyeWluZyB0byBpbml0aWFsaXplIENvbG9yIFBpY2tlciBmaWVsZCBidXQgXCJ3cC1jb2xvci1waWNrZXJcIiBpcyAnICtcbiAgICAgICAgICAgICAgICAgICAgJ25vdCBlbnF1ZXVlZC4nKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICRmaWVsZHMuZWFjaChmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBhcGkuaW5pdGlhbGl6ZUZpZWxkKGpRdWVyeSh0aGlzKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemVzIHRoZSBmaWVsZC5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqXG4gICAgICogQHBhcmFtIHtqUXVlcnl9ICRmaWVsZFxuICAgICAqL1xuICAgIGluaXRpYWxpemVGaWVsZCgkZmllbGQpIHtcblxuICAgICAgICB0aGlzLmZpZWxkcy5wdXNoKHtcbiAgICAgICAgICAgICRmaWVsZCxcbiAgICAgICAgICAgIGFwaTogbmV3IEZpZWxkQ29sb3JQaWNrZXIoJGZpZWxkKSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBGaWVsZENvbG9yUGlja2VySW5pdGlhbGl6ZTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9hc3NldHMvc3JjL2pzL2FkbWluL2ZpZWxkcy9maWVsZC1jb2xvcnBpY2tlci5qcyIsImltcG9ydCBGaWVsZCBmcm9tICcuL2ZpZWxkLmpzJztcblxuLyoqXG4gKiBEYXRlIFBpY2tlciBGaWVsZCBmdW5jdGlvbmFsaXR5LlxuICpcbiAqIEFsc28gaW5jbHVkZXMgRGF0ZS9UaW1lIFBpY2tlciBhbmQgVGltZSBQaWNrZXIuXG4gKlxuICogQHNpbmNlIDEuNC4wXG4gKi9cbmNsYXNzIEZpZWxkRGF0ZVBpY2tlciBleHRlbmRzIEZpZWxkIHtcblxuICAgIC8qKlxuICAgICAqIENsYXNzIGNvbnN0cnVjdG9yLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoJGZpZWxkKSB7XG5cbiAgICAgICAgc3VwZXIoJGZpZWxkLCAnZGF0ZXBpY2tlcicpO1xuXG4gICAgICAgIHRoaXMuaW5pdEZpZWxkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZXMgdGhlIERhdGUgUGlja2VyLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICovXG4gICAgaW5pdEZpZWxkKCkge1xuXG4gICAgICAgIGxldCBvcHRpb25fZnVuY3Rpb25zID0gWydvbkNoYW5nZScsICdvbk9wZW4nLCAnb25DbG9zZScsICdvbk1vbnRoQ2hhbmdlJywgJ29uWWVhckNoYW5nZScsICdvblJlYWR5JywgJ29uVmFsdWVVcGRhdGUnLCAnb25EYXlDcmVhdGUnXTtcblxuICAgICAgICAvLyBGdW5jdGlvbiBzdXBwb3J0XG4gICAgICAgIGpRdWVyeS5lYWNoKHRoaXMub3B0aW9ucy5kYXRlcGlja2VyT3B0aW9ucywgKG5hbWUsIHZhbHVlKSA9PiB7XG5cbiAgICAgICAgICAgIGlmICggb3B0aW9uX2Z1bmN0aW9ucy5pbmRleE9mKG5hbWUpICE9PSAtMSAmJlxuICAgICAgICAgICAgICAgICFqUXVlcnkuaXNGdW5jdGlvbih0aGlzLm9wdGlvbnMuZGF0ZXBpY2tlck9wdGlvbnNbbmFtZV0pICYmXG4gICAgICAgICAgICAgICAgalF1ZXJ5LmlzRnVuY3Rpb24od2luZG93W3ZhbHVlXSkgKSB7XG5cbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuZGF0ZXBpY2tlck9wdGlvbnNbbmFtZV0gPSB3aW5kb3dbdmFsdWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBmaWVsZCBpbnN0YW5jZSBmb3Igb3VyIHNwZWNpZmljIGZpZWxkIGxvYWRzIGl0cyBkZWZhdWx0IGRhdGUgaW4gcHJvcGVybHlcbiAgICAgICAgdGhpcy5vcHRpb25zLmRhdGVwaWNrZXJPcHRpb25zLmRlZmF1bHREYXRlID0gdGhpcy4kZmllbGQuZGF0YSggJ2RlZmF1bHRkYXRlJyApO1xuXG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuJGZpZWxkLnZhbCgpO1xuXG4gICAgICAgIGlmICggISB2YWx1ZSApIHZhbHVlID0gdGhpcy5vcHRpb25zLmRhdGVwaWNrZXJPcHRpb25zLmRlZmF1bHREYXRlO1xuXG4gICAgICAgIHRoaXMuZmxhdHBpY2tyID0gdGhpcy4kZmllbGQuZmxhdHBpY2tyKCB0aGlzLm9wdGlvbnMuZGF0ZXBpY2tlck9wdGlvbnMgKTtcblxuICAgICAgICB0aGlzLmZsYXRwaWNrci5zZXREYXRlKCB2YWx1ZSwgdHJ1ZSApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFucyB1cCBhZnRlciBhIHJlcGVhdGVyIGFkZC9pbml0LlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICovXG4gICAgZmllbGRDbGVhbnVwKCkge1xuXG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuJGZpZWxkLnZhbCgpO1xuXG4gICAgICAgIGlmICggISB2YWx1ZSApIHZhbHVlID0gdGhpcy5vcHRpb25zLmRhdGVwaWNrZXJPcHRpb25zLmRlZmF1bHREYXRlO1xuXG4gICAgICAgIGlmICggdHlwZW9mIHRoaXMuZmxhdHBpY2tyICE9PSAndW5kZWZpbmVkJyApIHtcblxuICAgICAgICAgICAgdGhpcy5mbGF0cGlja3IuZGVzdHJveSgpO1xuXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLiRmaWVsZC52YWwoIHZhbHVlICk7XG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSdW5zIGNsZWFudXAgYmVmb3JlIHRoZSBSZXBlYXRlciBjcmVhdGVzIGEgZHVtbXkgcm93IHRvIGVuc3VyZSB3ZSBkbyBub3QgZ2V0IHdlaXJkIGRvdWJsZSBpbnB1dHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSAgIHtvYmplY3R9ICAkcmVwZWF0ZXIgIGpRdWVyeSBET00gT2JqZWN0XG4gICAgICogQHBhcmFtICAge2FycmF5fSAgb3B0aW9ucyAgICAgQXJyYXkgb2YgRmllbGQgT3B0aW9uc1xuICAgICAqXG4gICAgICogQHNpbmNlICAgMS41LjBcbiAgICAgKiBAcmV0dXJuICB2b2lkXG4gICAgICovXG4gICAgcmVwZWF0ZXJCZWZvcmVJbml0KCAkcmVwZWF0ZXIsIG9wdGlvbnMgKSB7XG5cbiAgICAgICAgdGhpcy5maWVsZENsZWFudXAoKTtcblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuc3VyZSB0aGF0IHRoZSBwdXJwb3NlZnVsbHkgdW5sb2FkZWQgRmxhdHBpY2tyIHJlbG9hZHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSAgIHtvYmplY3R9ICAkcmVwZWF0ZXIgIGpRdWVyeSBET00gT2JqZWN0XG4gICAgICogQHBhcmFtICAge2FycmF5fSAgb3B0aW9ucyAgICAgQXJyYXkgb2YgRmllbGQgT3B0aW9uc1xuICAgICAqXG4gICAgICogQHNpbmNlICAgMS41LjBcbiAgICAgKiBAcmV0dXJuICB2b2lkXG4gICAgICovXG4gICAgcmVwZWF0ZXJPbkluaXQoICRyZXBlYXRlciwgb3B0aW9ucyApIHtcblxuICAgICAgICB0aGlzLmluaXRGaWVsZCgpO1xuXG4gICAgfVxufVxuXG4vKipcbiAqIEZpbmRzIGFuZCBpbml0aWFsaXplcyBhbGwgRGF0ZSBQaWNrZXIgZmllbGRzLlxuICpcbiAqIEBzaW5jZSAxLjQuMFxuICovXG5jbGFzcyBGaWVsZERhdGVQaWNrZXJJbml0aWFsaXplIHtcblxuICAgIC8qKlxuICAgICAqIENsYXNzIGNvbnN0cnVjdG9yLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2pRdWVyeX0gJHJvb3QgUm9vdCBlbGVtZW50IHRvIGluaXRpYWxpemUgZmllbGRzIGluc2lkZS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcigkcm9vdCkge1xuXG4gICAgICAgIGNvbnN0IGFwaSA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5maWVsZHMgPSBbXTtcblxuICAgICAgICBsZXQgJGZpZWxkcyA9ICRyb290LmZpbmQoJ1tkYXRhLWZpZWxkaGVscGVycy1maWVsZC1kYXRlcGlja2VyXScpO1xuXG4gICAgICAgIGlmICggJGZpZWxkcy5sZW5ndGggKSB7XG5cbiAgICAgICAgICAgIGlmICggIWpRdWVyeS5pc0Z1bmN0aW9uKGpRdWVyeS5mbi5mbGF0cGlja3IpICkge1xuXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmllbGQgSGVscGVycyBFcnJvcjogVHJ5aW5nIHRvIGluaXRpYWxpemUgRGF0ZSBQaWNrZXIgZmllbGQgYnV0IFwiZmxhdHBpY2tyXCIgJyArXG4gICAgICAgICAgICAgICAgICAgICdpcyBub3QgZW5xdWV1ZWQuJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAkZmllbGRzLmVhY2goZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgYXBpLmluaXRpYWxpemVGaWVsZChqUXVlcnkodGhpcykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplcyB0aGUgZmllbGQuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMS40LjBcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7alF1ZXJ5fSAkZmllbGRcbiAgICAgKi9cbiAgICBpbml0aWFsaXplRmllbGQoJGZpZWxkKSB7XG5cbiAgICAgICAgdGhpcy5maWVsZHMucHVzaCh7XG4gICAgICAgICAgICAkZmllbGQsXG4gICAgICAgICAgICBhcGk6IG5ldyBGaWVsZERhdGVQaWNrZXIoJGZpZWxkKSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBGaWVsZERhdGVQaWNrZXJJbml0aWFsaXplO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2Fzc2V0cy9zcmMvanMvYWRtaW4vZmllbGRzL2ZpZWxkLWRhdGVwaWNrZXIuanMiLCJpbXBvcnQgRmllbGQgZnJvbSAnLi9maWVsZC5qcyc7XG5pbXBvcnQgRmllbGRzSW5pdGlhbGl6ZSBmcm9tICcuLi9maWVsZHMtaW5pdC5qcyc7XG5cbi8qKlxuICogVGltZSBQaWNrZXIgRmllbGQgZnVuY3Rpb25hbGl0eS5cbiAqXG4gKiBBbHNvIGluY2x1ZGVzIERhdGUvVGltZSBQaWNrZXIgYW5kIFRpbWUgUGlja2VyLlxuICpcbiAqIEBzaW5jZSAxLjQuMFxuICovXG5jbGFzcyBGaWVsZFRpbWVQaWNrZXIgZXh0ZW5kcyBGaWVsZCB7XG5cbiAgICAvKipcbiAgICAgKiBDbGFzcyBjb25zdHJ1Y3Rvci5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKCRmaWVsZCkge1xuXG4gICAgICAgIHN1cGVyKCRmaWVsZCwgJ3RpbWVwaWNrZXInKTtcblxuICAgICAgICB0aGlzLmluaXRGaWVsZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemVzIHRoZSBUaW1lIFBpY2tlci5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqL1xuICAgIGluaXRGaWVsZCgpIHtcblxuICAgICAgICBsZXQgb3B0aW9uX2Z1bmN0aW9ucyA9IFsnb25DaGFuZ2UnLCAnb25PcGVuJywgJ29uQ2xvc2UnLCAnb25Nb250aENoYW5nZScsICdvblllYXJDaGFuZ2UnLCAnb25SZWFkeScsICdvblZhbHVlVXBkYXRlJywgJ29uRGF5Q3JlYXRlJ107XG5cbiAgICAgICAgLy8gRnVuY3Rpb24gc3VwcG9ydFxuICAgICAgICBqUXVlcnkuZWFjaCh0aGlzLm9wdGlvbnMudGltZXBpY2tlck9wdGlvbnMsIChuYW1lLCB2YWx1ZSkgPT4ge1xuXG4gICAgICAgICAgICBpZiAoIG9wdGlvbl9mdW5jdGlvbnMuaW5kZXhPZihuYW1lKSAhPT0gLTEgJiZcbiAgICAgICAgICAgICAgICAhalF1ZXJ5LmlzRnVuY3Rpb24odGhpcy5vcHRpb25zLnRpbWVwaWNrZXJPcHRpb25zW25hbWVdKSAmJlxuICAgICAgICAgICAgICAgIGpRdWVyeS5pc0Z1bmN0aW9uKHdpbmRvd1t2YWx1ZV0pICkge1xuXG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnRpbWVwaWNrZXJPcHRpb25zW25hbWVdID0gd2luZG93W3ZhbHVlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gV2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZmllbGQgaW5zdGFuY2UgZm9yIG91ciBzcGVjaWZpYyBmaWVsZCBsb2FkcyBpdHMgZGVmYXVsdCBkYXRlIGluIHByb3Blcmx5XG4gICAgICAgIHRoaXMub3B0aW9ucy50aW1lcGlja2VyT3B0aW9ucy5kZWZhdWx0RGF0ZSA9IHRoaXMuJGZpZWxkLmRhdGEoICdkZWZhdWx0ZGF0ZScgKTtcblxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLiRmaWVsZC52YWwoKTtcblxuICAgICAgICBpZiAoICEgdmFsdWUgKSB2YWx1ZSA9IHRoaXMub3B0aW9ucy50aW1lcGlja2VyT3B0aW9ucy5kZWZhdWx0RGF0ZTtcblxuICAgICAgICB0aGlzLmZsYXRwaWNrciA9IHRoaXMuJGZpZWxkLmZsYXRwaWNrcih0aGlzLm9wdGlvbnMudGltZXBpY2tlck9wdGlvbnMpO1xuXG4gICAgICAgIHRoaXMuZmxhdHBpY2tyLnNldERhdGUoIHZhbHVlLCB0cnVlICk7XG4gICAgXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYW5zIHVwIGFmdGVyIGEgcmVwZWF0ZXIgYWRkL2luaXQuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMS40LjBcbiAgICAgKi9cbiAgICBmaWVsZENsZWFudXAoKSB7XG5cbiAgICAgICAgbGV0IHZhbHVlID0gdGhpcy4kZmllbGQudmFsKCk7XG5cbiAgICAgICAgaWYgKCAhIHZhbHVlICkgdmFsdWUgPSB0aGlzLm9wdGlvbnMudGltZXBpY2tlck9wdGlvbnMuZGVmYXVsdERhdGU7XG5cbiAgICAgICAgaWYgKCB0eXBlb2YgdGhpcy5mbGF0cGlja3IgIT09ICd1bmRlZmluZWQnICkge1xuXG4gICAgICAgICAgICB0aGlzLmZsYXRwaWNrci5kZXN0cm95KCk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuJGZpZWxkLnZhbCggdmFsdWUgKTtcblxuICAgIH1cbiAgICBcbiAgICAvKipcbiAgICAgKiBSdW5zIGNsZWFudXAgYmVmb3JlIHRoZSBSZXBlYXRlciBjcmVhdGVzIGEgZHVtbXkgcm93IHRvIGVuc3VyZSB3ZSBkbyBub3QgZ2V0IHdlaXJkIGRvdWJsZSBpbnB1dHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSAgIHtvYmplY3R9ICAkcmVwZWF0ZXIgIGpRdWVyeSBET00gT2JqZWN0XG4gICAgICogQHBhcmFtICAge2FycmF5fSAgb3B0aW9ucyAgICAgQXJyYXkgb2YgRmllbGQgT3B0aW9uc1xuICAgICAqXG4gICAgICogQHNpbmNlICAgMS41LjBcbiAgICAgKiBAcmV0dXJuICB2b2lkXG4gICAgICovXG4gICAgcmVwZWF0ZXJCZWZvcmVJbml0KCAkcmVwZWF0ZXIsIG9wdGlvbnMgKSB7XG5cbiAgICAgICAgdGhpcy5maWVsZENsZWFudXAoKTtcblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuc3VyZSB0aGF0IHRoZSBwdXJwb3NlZnVsbHkgdW5sb2FkZWQgRmxhdHBpY2tyIHJlbG9hZHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSAgIHtvYmplY3R9ICAkcmVwZWF0ZXIgIGpRdWVyeSBET00gT2JqZWN0XG4gICAgICogQHBhcmFtICAge2FycmF5fSAgb3B0aW9ucyAgICAgQXJyYXkgb2YgRmllbGQgT3B0aW9uc1xuICAgICAqXG4gICAgICogQHNpbmNlICAgMS41LjBcbiAgICAgKiBAcmV0dXJuICB2b2lkXG4gICAgICovXG4gICAgcmVwZWF0ZXJPbkluaXQoICRyZXBlYXRlciwgb3B0aW9ucyApIHtcblxuICAgICAgICB0aGlzLmluaXRGaWVsZCgpO1xuXG4gICAgfVxuXG59XG5cbi8qKlxuICogRmluZHMgYW5kIGluaXRpYWxpemVzIGFsbCBUaW1lIFBpY2tlciBmaWVsZHMuXG4gKlxuICogQHNpbmNlIDEuNC4wXG4gKi9cbmNsYXNzIEZpZWxkVGltZVBpY2tlckluaXRpYWxpemUge1xuXG4gICAgLyoqXG4gICAgICogQ2xhc3MgY29uc3RydWN0b3IuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMS40LjBcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7alF1ZXJ5fSAkcm9vdCBSb290IGVsZW1lbnQgdG8gaW5pdGlhbGl6ZSBmaWVsZHMgaW5zaWRlLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKCRyb290KSB7XG5cbiAgICAgICAgY29uc3QgYXBpID0gdGhpcztcblxuICAgICAgICB0aGlzLmZpZWxkcyA9IFtdO1xuXG4gICAgICAgIGxldCAkZmllbGRzID0gJHJvb3QuZmluZCgnW2RhdGEtZmllbGRoZWxwZXJzLWZpZWxkLXRpbWVwaWNrZXJdJyk7XG5cbiAgICAgICAgaWYgKCAkZmllbGRzLmxlbmd0aCApIHtcblxuICAgICAgICAgICAgaWYgKCAhalF1ZXJ5LmlzRnVuY3Rpb24oalF1ZXJ5LmZuLmZsYXRwaWNrcikgKSB7XG5cbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGaWVsZCBIZWxwZXJzIEVycm9yOiBUcnlpbmcgdG8gaW5pdGlhbGl6ZSBUaW1lIFBpY2tlciBmaWVsZCBidXQgJyArXG4gICAgICAgICAgICAgICAgICAgICdcImZsYXRwaWNrclwiIGlzIG5vdCBlbnF1ZXVlZC4nKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICRmaWVsZHMuZWFjaChmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBhcGkuaW5pdGlhbGl6ZUZpZWxkKGpRdWVyeSh0aGlzKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemVzIHRoZSBmaWVsZC5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqXG4gICAgICogQHBhcmFtIHtqUXVlcnl9ICRmaWVsZFxuICAgICAqL1xuICAgIGluaXRpYWxpemVGaWVsZCgkZmllbGQpIHtcblxuICAgICAgICB0aGlzLmZpZWxkcy5wdXNoKHtcbiAgICAgICAgICAgICRmaWVsZCxcbiAgICAgICAgICAgIGFwaTogbmV3IEZpZWxkVGltZVBpY2tlcigkZmllbGQpLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZpZWxkVGltZVBpY2tlckluaXRpYWxpemU7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vYXNzZXRzL3NyYy9qcy9hZG1pbi9maWVsZHMvZmllbGQtdGltZXBpY2tlci5qcyIsImltcG9ydCBGaWVsZCBmcm9tICcuL2ZpZWxkLmpzJztcblxuLyoqXG4gKiBEYXRlIFRpbWUgUGlja2VyIEZpZWxkIGZ1bmN0aW9uYWxpdHkuXG4gKlxuICogQWxzbyBpbmNsdWRlcyBEYXRlL1RpbWUgUGlja2VyIGFuZCBUaW1lIFBpY2tlci5cbiAqXG4gKiBAc2luY2UgMS40LjBcbiAqL1xuY2xhc3MgRmllbGREYXRlVGltZVBpY2tlciBleHRlbmRzIEZpZWxkIHtcblxuICAgIC8qKlxuICAgICAqIENsYXNzIGNvbnN0cnVjdG9yLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoJGZpZWxkKSB7XG5cbiAgICAgICAgc3VwZXIoJGZpZWxkLCAnZGF0ZXRpbWVwaWNrZXInKTtcblxuICAgICAgICB0aGlzLmluaXRGaWVsZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemVzIHRoZSBEYXRlIFRpbWUgUGlja2VyLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICovXG4gICAgaW5pdEZpZWxkKCkge1xuXG4gICAgICAgIGxldCBvcHRpb25fZnVuY3Rpb25zID0gWydvbkNoYW5nZScsICdvbk9wZW4nLCAnb25DbG9zZScsICdvbk1vbnRoQ2hhbmdlJywgJ29uWWVhckNoYW5nZScsICdvblJlYWR5JywgJ29uVmFsdWVVcGRhdGUnLCAnb25EYXlDcmVhdGUnXTtcblxuICAgICAgICAvLyBGdW5jdGlvbiBzdXBwb3J0XG4gICAgICAgIGpRdWVyeS5lYWNoKHRoaXMub3B0aW9ucy5kYXRldGltZXBpY2tlck9wdGlvbnMsIChuYW1lLCB2YWx1ZSkgPT4ge1xuXG4gICAgICAgICAgICBpZiAoIG9wdGlvbl9mdW5jdGlvbnMuaW5kZXhPZihuYW1lKSAhPT0gLTEgJiZcbiAgICAgICAgICAgICAgICAhalF1ZXJ5LmlzRnVuY3Rpb24odGhpcy5vcHRpb25zLmRhdGV0aW1lcGlja2VyT3B0aW9uc1tuYW1lXSkgJiZcbiAgICAgICAgICAgICAgICBqUXVlcnkuaXNGdW5jdGlvbih3aW5kb3dbdmFsdWVdKSApIHtcblxuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5kYXRldGltZXBpY2tlck9wdGlvbnNbbmFtZV0gPSB3aW5kb3dbdmFsdWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBmaWVsZCBpbnN0YW5jZSBmb3Igb3VyIHNwZWNpZmljIGZpZWxkIGxvYWRzIGl0cyBkZWZhdWx0IGRhdGUgaW4gcHJvcGVybHlcbiAgICAgICAgdGhpcy5vcHRpb25zLmRhdGV0aW1lcGlja2VyT3B0aW9ucy5kZWZhdWx0RGF0ZSA9IHRoaXMuJGZpZWxkLmRhdGEoICdkZWZhdWx0ZGF0ZScgKTtcblxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLiRmaWVsZC52YWwoKTtcblxuICAgICAgICBpZiAoICEgdmFsdWUgKSB2YWx1ZSA9IHRoaXMub3B0aW9ucy5kYXRldGltZXBpY2tlck9wdGlvbnMuZGVmYXVsdERhdGU7XG5cbiAgICAgICAgdGhpcy5mbGF0cGlja3IgPSB0aGlzLiRmaWVsZC5mbGF0cGlja3IodGhpcy5vcHRpb25zLmRhdGV0aW1lcGlja2VyT3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5mbGF0cGlja3Iuc2V0RGF0ZSggdmFsdWUsIHRydWUgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhbnMgdXAgYWZ0ZXIgYSByZXBlYXRlciBhZGQvaW5pdC5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqL1xuICAgIGZpZWxkQ2xlYW51cCgpIHtcblxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLiRmaWVsZC52YWwoKTtcblxuICAgICAgICBpZiAoICEgdmFsdWUgKSB2YWx1ZSA9IHRoaXMub3B0aW9ucy5kYXRldGltZXBpY2tlck9wdGlvbnMuZGVmYXVsdERhdGU7XG5cbiAgICAgICAgaWYgKCB0eXBlb2YgdGhpcy5mbGF0cGlja3IgIT09ICd1bmRlZmluZWQnICkge1xuXG4gICAgICAgICAgICB0aGlzLmZsYXRwaWNrci5kZXN0cm95KCk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuJGZpZWxkLnZhbCggdmFsdWUgKTtcblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJ1bnMgY2xlYW51cCBiZWZvcmUgdGhlIFJlcGVhdGVyIGNyZWF0ZXMgYSBkdW1teSByb3cgdG8gZW5zdXJlIHdlIGRvIG5vdCBnZXQgd2VpcmQgZG91YmxlIGlucHV0c1xuICAgICAqXG4gICAgICogQHBhcmFtICAge29iamVjdH0gICRyZXBlYXRlciAgalF1ZXJ5IERPTSBPYmplY3RcbiAgICAgKiBAcGFyYW0gICB7YXJyYXl9ICBvcHRpb25zICAgICBBcnJheSBvZiBGaWVsZCBPcHRpb25zXG4gICAgICpcbiAgICAgKiBAc2luY2UgICAxLjUuMFxuICAgICAqIEByZXR1cm4gIHZvaWRcbiAgICAgKi9cbiAgICByZXBlYXRlckJlZm9yZUluaXQoICRyZXBlYXRlciwgb3B0aW9ucyApIHtcblxuICAgICAgICB0aGlzLmZpZWxkQ2xlYW51cCgpO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW5zdXJlIHRoYXQgdGhlIHB1cnBvc2VmdWxseSB1bmxvYWRlZCBGbGF0cGlja3IgcmVsb2Fkc1xuICAgICAqXG4gICAgICogQHBhcmFtICAge29iamVjdH0gICRyZXBlYXRlciAgalF1ZXJ5IERPTSBPYmplY3RcbiAgICAgKiBAcGFyYW0gICB7YXJyYXl9ICBvcHRpb25zICAgICBBcnJheSBvZiBGaWVsZCBPcHRpb25zXG4gICAgICpcbiAgICAgKiBAc2luY2UgICAxLjUuMFxuICAgICAqIEByZXR1cm4gIHZvaWRcbiAgICAgKi9cbiAgICByZXBlYXRlck9uSW5pdCggJHJlcGVhdGVyLCBvcHRpb25zICkge1xuXG4gICAgICAgIHRoaXMuaW5pdEZpZWxkKCk7XG5cbiAgICB9XG5cbn1cblxuLyoqXG4gKiBGaW5kcyBhbmQgaW5pdGlhbGl6ZXMgYWxsIERhdGUgVGltZSBQaWNrZXIgZmllbGRzLlxuICpcbiAqIEBzaW5jZSAxLjQuMFxuICovXG5jbGFzcyBGaWVsZERhdGVUaW1lUGlja2VySW5pdGlhbGl6ZSB7XG5cbiAgICAvKipcbiAgICAgKiBDbGFzcyBjb25zdHJ1Y3Rvci5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqXG4gICAgICogQHBhcmFtIHtqUXVlcnl9ICRyb290IFJvb3QgZWxlbWVudCB0byBpbml0aWFsaXplIGZpZWxkcyBpbnNpZGUuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoJHJvb3QpIHtcblxuICAgICAgICBjb25zdCBhcGkgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMuZmllbGRzID0gW107XG5cbiAgICAgICAgbGV0ICRmaWVsZHMgPSAkcm9vdC5maW5kKCdbZGF0YS1maWVsZGhlbHBlcnMtZmllbGQtZGF0ZXRpbWVwaWNrZXJdJyk7XG5cbiAgICAgICAgaWYgKCAkZmllbGRzLmxlbmd0aCApIHtcblxuICAgICAgICAgICAgaWYgKCAhalF1ZXJ5LmlzRnVuY3Rpb24oalF1ZXJ5LmZuLmZsYXRwaWNrcikgKSB7XG5cbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGaWVsZCBIZWxwZXJzIEVycm9yOiBUcnlpbmcgdG8gaW5pdGlhbGl6ZSBEYXRlIFRpbWUgUGlja2VyIGZpZWxkIGJ1dCAnICtcbiAgICAgICAgICAgICAgICAgICAgJ1wiZmxhdHBpY2tyXCIgaXMgbm90IGVucXVldWVkLicpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJGZpZWxkcy5lYWNoKGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGFwaS5pbml0aWFsaXplRmllbGQoalF1ZXJ5KHRoaXMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZXMgdGhlIGZpZWxkLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2pRdWVyeX0gJGZpZWxkXG4gICAgICovXG4gICAgaW5pdGlhbGl6ZUZpZWxkKCRmaWVsZCkge1xuXG4gICAgICAgIHRoaXMuZmllbGRzLnB1c2goe1xuICAgICAgICAgICAgJGZpZWxkLFxuICAgICAgICAgICAgYXBpOiBuZXcgRmllbGREYXRlVGltZVBpY2tlcigkZmllbGQpLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZpZWxkRGF0ZVRpbWVQaWNrZXJJbml0aWFsaXplO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2Fzc2V0cy9zcmMvanMvYWRtaW4vZmllbGRzL2ZpZWxkLWRhdGV0aW1lcGlja2VyLmpzIiwiaW1wb3J0IEZpZWxkIGZyb20gJy4vZmllbGQuanMnO1xuXG4vKipcbiAqIFRhYmxlIEZpZWxkIGZ1bmN0aW9uYWxpdHkuXG4gKlxuICogQHNpbmNlIDEuNC4wXG4gKi9cbmNsYXNzIEZpZWxkVGFibGUgZXh0ZW5kcyBGaWVsZCB7XG5cbiAgICAvKipcbiAgICAgKiBDbGFzcyBjb25zdHJ1Y3Rvci5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKCRmaWVsZCkge1xuXG4gICAgICAgIHN1cGVyKCRmaWVsZCwgJ3RhYmxlJyk7XG5cbiAgICAgICAgdGhpcy5pbml0RmllbGQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplcyB0aGUgVGFibGUgZmllbGQuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMS40LjBcbiAgICAgKi9cbiAgICBpbml0RmllbGQoKSB7XG5cbiAgICAgICAgdGhpcy4kdWkgPSB7XG4gICAgICAgICAgICBhY3Rpb25zOiB0aGlzLiRmaWVsZC5maW5kKCcuZmllbGRoZWxwZXJzLWZpZWxkLXRhYmxlLWFjdGlvbnMnKSxcbiAgICAgICAgICAgIGxvYWRpbmc6IHRoaXMuJGZpZWxkLmZpbmQoJy5maWVsZGhlbHBlcnMtZmllbGQtdGFibGUtbG9hZGluZycpLFxuICAgICAgICAgICAgdGFibGU6IHRoaXMuJGZpZWxkLmZpbmQoJ3RhYmxlJyksXG4gICAgICAgICAgICB0aGVhZDogdGhpcy4kZmllbGQuZmluZCgndGhlYWQnKSxcbiAgICAgICAgICAgIHRib2R5OiB0aGlzLiRmaWVsZC5maW5kKCd0Ym9keScpLFxuICAgICAgICAgICAgYWRkUm93OiB0aGlzLiRmaWVsZC5maW5kKCdbZGF0YS10YWJsZS1jcmVhdGUtcm93XScpLFxuICAgICAgICAgICAgYWRkQ29sdW1uOiB0aGlzLiRmaWVsZC5maW5kKCdbZGF0YS10YWJsZS1jcmVhdGUtY29sdW1uXScpLFxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sMTBuID0gUkJNX0ZpZWxkSGVscGVycy5sMTBuWydmaWVsZF90YWJsZSddIHx8IHt9O1xuXG4gICAgICAgIHRoaXMubmFtZSA9IHRoaXMuJGZpZWxkLmF0dHIoJ2RhdGEtdGFibGUtbmFtZScpO1xuXG4gICAgICAgIGxldCBkYXRhID0gSlNPTi5wYXJzZSh0aGlzLiR1aS50YWJsZS5hdHRyKCdkYXRhLXRhYmxlLWRhdGEnKSk7XG5cbiAgICAgICAgdGhpcy5kYXRhICAgICAgPSB7fTtcbiAgICAgICAgdGhpcy5kYXRhLmhlYWQgPSBkYXRhLmhlYWQgfHwgW107XG4gICAgICAgIHRoaXMuZGF0YS5ib2R5ID0gZGF0YS5ib2R5IHx8IFtdO1xuXG4gICAgICAgIHRoaXMuc2V0dXBIYW5kbGVycygpO1xuXG4gICAgICAgIC8vIEluaXRpYWwgYnVpbGRcbiAgICAgICAgdGhpcy5idWlsZFRhYmxlKCk7XG5cbiAgICAgICAgLy8gU2hvdyBpbml0aWFsbHlcbiAgICAgICAgdGhpcy4kdWkudGFibGUuc2hvdygpO1xuICAgICAgICB0aGlzLiR1aS5hY3Rpb25zLnNob3coKTtcbiAgICAgICAgdGhpcy4kdWkubG9hZGluZy5oaWRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB1cCB0aGUgY2xhc3MgaGFuZGxlcnMuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMS40LjBcbiAgICAgKi9cbiAgICBzZXR1cEhhbmRsZXJzKCkge1xuXG4gICAgICAgIGNvbnN0IGFwaSA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy4kdWkuYWRkUm93LmNsaWNrKChlKSA9PiB7XG5cbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuYWRkUm93KCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuJHVpLmFkZENvbHVtbi5jbGljaygoZSkgPT4ge1xuXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLmFkZENvbHVtbigpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLiR1aS50YWJsZS5vbignY2xpY2snLCAnW2RhdGEtZGVsZXRlLXJvd10nLCBmdW5jdGlvbiAoZSkge1xuXG4gICAgICAgICAgICBsZXQgaW5kZXggPSBqUXVlcnkodGhpcykuY2xvc2VzdCgndHInKS5pbmRleCgpO1xuXG4gICAgICAgICAgICBhcGkuZGVsZXRlUm93KGluZGV4KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy4kdWkudGFibGUub24oJ2NsaWNrJywgJ1tkYXRhLWRlbGV0ZS1jb2x1bW5dJywgZnVuY3Rpb24gKGUpIHtcblxuICAgICAgICAgICAgbGV0IGluZGV4ID0galF1ZXJ5KHRoaXMpLmNsb3Nlc3QoJ3RkJykuaW5kZXgoKTtcblxuICAgICAgICAgICAgYXBpLmRlbGV0ZUNvbHVtbihpbmRleCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuJHVpLnRhYmxlLm9uKCdjaGFuZ2UnLCAnaW5wdXRbdHlwZT1cInRleHRcIl0nLCAoZSkgPT4ge1xuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRhYmxlRGF0YSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHYXRoZXJzIGFsbCBkYXRhIGZyb20gdGhlIHRhYmxlLlxuICAgICAqL1xuICAgIHVwZGF0ZVRhYmxlRGF0YSgpIHtcblxuICAgICAgICBjb25zdCBhcGkgPSB0aGlzXG5cbiAgICAgICAgLy8gSGVhZFxuICAgICAgICBsZXQgJGhlYWRDZWxscyAgPSB0aGlzLiR1aS50YWJsZS5maW5kKCd0aGVhZCB0aCcpO1xuICAgICAgICBsZXQgZGF0YUhlYWQgICAgPSBbXTtcbiAgICAgICAgbGV0IGN1cnJlbnRDZWxsID0gMDtcblxuICAgICAgICAkaGVhZENlbGxzLmVhY2goZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgJGlucHV0ID0galF1ZXJ5KHRoaXMpLmZpbmQoYGlucHV0W25hbWU9XCIke2FwaS5uYW1lfVtoZWFkXVske2N1cnJlbnRDZWxsfV1cIl1gKTtcblxuICAgICAgICAgICAgaWYgKCAhJGlucHV0Lmxlbmd0aCApIHtcblxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZpZWxkIEhlbHBlcnMgRXJyb3I6IFRhYmxlIGhlYWQgZGF0YSBjb3JydXB0ZWQuJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkYXRhSGVhZC5wdXNoKCRpbnB1dC52YWwoKSk7XG5cbiAgICAgICAgICAgIGN1cnJlbnRDZWxsKys7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZGF0YS5oZWFkID0gZGF0YUhlYWQ7XG5cbiAgICAgICAgLy8gQm9keVxuICAgICAgICBsZXQgJGJvZHlSb3dzICA9IHRoaXMuJHVpLnRhYmxlLmZpbmQoJ3Rib2R5IHRyJyk7XG4gICAgICAgIGxldCBkYXRhQm9keSAgID0gW107XG4gICAgICAgIGxldCBjdXJyZW50Um93ID0gMDtcblxuICAgICAgICAkYm9keVJvd3MuZWFjaChmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIC8vIFNraXAgZGVsZXRlIHJvd1xuICAgICAgICAgICAgaWYgKCBqUXVlcnkodGhpcykuaGFzQ2xhc3MoJ2ZpZWxkaGVscGVycy1maWVsZC10YWJsZS1kZWxldGUtY29sdW1ucycpICkge1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCByb3dEYXRhICAgICA9IFtdO1xuICAgICAgICAgICAgbGV0ICRjZWxscyAgICAgID0galF1ZXJ5KHRoaXMpLmZpbmQoJ3RkJyk7XG4gICAgICAgICAgICBsZXQgY3VycmVudENlbGwgPSAwO1xuXG4gICAgICAgICAgICAkY2VsbHMuZWFjaChmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICAvLyBTa2lwIGRlbGV0ZSBjZWxsXG4gICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkodGhpcykuaGFzQ2xhc3MoJ2ZpZWxkaGVscGVycy1maWVsZC10YWJsZS1kZWxldGUtcm93JykgKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0ICRpbnB1dCA9IGpRdWVyeSh0aGlzKS5maW5kKGBpbnB1dFtuYW1lPVwiJHthcGkubmFtZX1bYm9keV1bJHtjdXJyZW50Um93fV1bJHtjdXJyZW50Q2VsbH1dXCJdYCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoICEkaW5wdXQubGVuZ3RoICkge1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZpZWxkIEhlbHBlcnMgRXJyb3I6IFRhYmxlIGJvZHkgZGF0YSBjb3JydXB0ZWQuJyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByb3dEYXRhLnB1c2goJGlucHV0LnZhbCgpKTtcblxuICAgICAgICAgICAgICAgIGN1cnJlbnRDZWxsKys7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGF0YUJvZHkucHVzaChyb3dEYXRhKTtcblxuICAgICAgICAgICAgY3VycmVudFJvdysrO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmRhdGEuYm9keSA9IGRhdGFCb2R5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSByb3cgdG8gdGhlIHRhYmxlLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICovXG4gICAgYWRkUm93KCkge1xuXG4gICAgICAgIGlmICggIXRoaXMuZGF0YS5oZWFkLmxlbmd0aCApIHtcblxuICAgICAgICAgICAgdGhpcy5kYXRhLmhlYWQucHVzaCgnJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoICF0aGlzLmRhdGEuYm9keS5sZW5ndGggKSB7XG5cbiAgICAgICAgICAgIC8vIFB1c2ggMSBlbXB0eSByb3cgd2l0aCAxIGVtcHR5IGNlbGxcbiAgICAgICAgICAgIHRoaXMuZGF0YS5ib2R5LnB1c2goWycnXSk7XG5cbiAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgbGV0IGNvbHVtbnMgPSB0aGlzLmRhdGEuYm9keVswXS5sZW5ndGg7XG4gICAgICAgICAgICBsZXQgcm93ICAgICA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKCBsZXQgaSA9IDA7IGkgPCBjb2x1bW5zOyBpKysgKSB7XG4gICAgICAgICAgICAgICAgcm93LnB1c2goJycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRhdGEuYm9keS5wdXNoKHJvdyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJ1aWxkVGFibGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgY29sdW1uIHRvIHRoZSB0YWJsZS5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqL1xuICAgIGFkZENvbHVtbigpIHtcblxuICAgICAgICBpZiAoICF0aGlzLmRhdGEuYm9keS5sZW5ndGggKSB7XG5cbiAgICAgICAgICAgIC8vIFB1c2ggMSBlbXB0eSByb3cgd2l0aCAxIGVtcHR5IGNlbGxcbiAgICAgICAgICAgIHRoaXMuZGF0YS5oZWFkLnB1c2goWycnXSk7XG4gICAgICAgICAgICB0aGlzLmRhdGEuYm9keS5wdXNoKFsnJ10pO1xuXG4gICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgIHRoaXMuZGF0YS5oZWFkLnB1c2goJycpO1xuXG4gICAgICAgICAgICB0aGlzLmRhdGEuYm9keS5tYXAoKHJvdykgPT4ge1xuICAgICAgICAgICAgICAgIHJvdy5wdXNoKCcnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5idWlsZFRhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVsZXRlcyBhIHJvdyBmcm9tIHRoZSB0YWJsZS5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqXG4gICAgICogQHBhcmFtIHtpbnR9IGluZGV4IEluZGV4IG9mIHJvdyB0byBkZWxldGUuXG4gICAgICovXG4gICAgZGVsZXRlUm93KGluZGV4KSB7XG5cbiAgICAgICAgLy8gRGVjcmVhc2UgdG8gY29tcGVuc2F0ZSBmb3IgXCJkZWxldGUgcm93XCIgYXQgdG9wXG4gICAgICAgIGluZGV4LS07XG5cbiAgICAgICAgaWYgKCB0aGlzLmRhdGEuYm9keS5sZW5ndGggPT09IDEgKSB7XG5cbiAgICAgICAgICAgIHRoaXMuZGF0YS5oZWFkID0gW107XG4gICAgICAgICAgICB0aGlzLmRhdGEuYm9keSA9IFtdO1xuXG4gICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgIHRoaXMuZGF0YS5ib2R5LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIHRoaXMuYnVpbGRUYWJsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlbGV0ZXMgYSBjb2x1bW4gZnJvbSB0aGUgdGFibGUuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMS40LjBcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7aW50fSBpbmRleCBJbmRleCBvZiBjb2x1bW4gdG8gZGVsZXRlLlxuICAgICAqL1xuICAgIGRlbGV0ZUNvbHVtbihpbmRleCkge1xuXG4gICAgICAgIGlmICggdGhpcy5kYXRhLmJvZHlbMF0ubGVuZ3RoID09PSAxICkge1xuXG4gICAgICAgICAgICB0aGlzLmRhdGEuaGVhZCA9IFtdO1xuICAgICAgICAgICAgdGhpcy5kYXRhLmJvZHkgPSBbXTtcblxuICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICB0aGlzLmRhdGEuaGVhZC5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgICAgICAgICB0aGlzLmRhdGEuYm9keS5tYXAoKHJvdykgPT5cbiAgICAgICAgICAgICAgICByb3cuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYnVpbGRUYWJsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJ1aWxkcyB0aGUgdGFibGUgYmFzZWQgb24gdGhlIHRhYmxlIGRhdGEuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMS40LjBcbiAgICAgKi9cbiAgICBidWlsZFRhYmxlKCkge1xuXG4gICAgICAgIHRoaXMuJHVpLnRoZWFkLmh0bWwoJycpO1xuICAgICAgICB0aGlzLiR1aS50Ym9keS5odG1sKCcnKTtcblxuICAgICAgICBpZiAoIHRoaXMuZGF0YS5oZWFkLmxlbmd0aCApIHtcblxuICAgICAgICAgICAgbGV0ICRyb3cgPSBqUXVlcnkoJzx0ciAvPicpO1xuXG4gICAgICAgICAgICB0aGlzLmRhdGEuaGVhZC5tYXAoKGNlbGwsIGNlbGxfaSkgPT4ge1xuXG4gICAgICAgICAgICAgICAgbGV0ICRjZWxsID0galF1ZXJ5KCc8dGggLz4nKTtcblxuICAgICAgICAgICAgICAgICRjZWxsLmFwcGVuZChgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cIiR7dGhpcy5uYW1lfVtoZWFkXVske2NlbGxfaX1dXCIgLz5gKTtcbiAgICAgICAgICAgICAgICAkY2VsbC5maW5kKCdpbnB1dFt0eXBlPVwidGV4dFwiXScpLnZhbChjZWxsKTtcblxuICAgICAgICAgICAgICAgICRyb3cuYXBwZW5kKCRjZWxsKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLiR1aS50aGVhZC5hcHBlbmQoJHJvdyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIHRoaXMuZGF0YS5ib2R5Lmxlbmd0aCApIHtcblxuICAgICAgICAgICAgbGV0ICRkZWxldGVSb3cgPSBqUXVlcnkoJzx0ciBjbGFzcz1cImZpZWxkaGVscGVycy1maWVsZC10YWJsZS1kZWxldGUtY29sdW1uc1wiPjwvdHI+Jyk7XG5cbiAgICAgICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IHRoaXMuZGF0YS5ib2R5WzBdLmxlbmd0aDsgaSsrICkge1xuXG4gICAgICAgICAgICAgICAgJGRlbGV0ZVJvdy5hcHBlbmQoXG4gICAgICAgICAgICAgICAgICAgICc8dGQ+JyArXG4gICAgICAgICAgICAgICAgICAgIGA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRlbGV0ZS1jb2x1bW4gYXJpYS1sYWJlbD1cIiR7dGhpcy5sMTBuWydkZWxldGVfY29sdW1uJ119XCI+YCArXG4gICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cImRhc2hpY29ucyBkYXNoaWNvbnMtbm9cIiAvPicgK1xuICAgICAgICAgICAgICAgICAgICAnPC9idXR0b24+JyArXG4gICAgICAgICAgICAgICAgICAgICc8L3RkPidcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLiR1aS50Ym9keS5hcHBlbmQoJGRlbGV0ZVJvdyk7XG5cbiAgICAgICAgICAgIHRoaXMuZGF0YS5ib2R5Lm1hcCgocm93LCByb3dfaSkgPT4ge1xuXG4gICAgICAgICAgICAgICAgbGV0ICRyb3cgPSBqUXVlcnkoJzx0ci8+Jyk7XG5cbiAgICAgICAgICAgICAgICByb3cubWFwKChjZWxsLCBjZWxsX2kpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgJGNlbGwgPSBqUXVlcnkoJzx0ZC8+Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgJGNlbGwuYXBwZW5kKGA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiJHt0aGlzLm5hbWV9W2JvZHldWyR7cm93X2l9XVske2NlbGxfaX1dXCIgLz5gKTtcbiAgICAgICAgICAgICAgICAgICAgJGNlbGwuZmluZCgnaW5wdXRbdHlwZT1cInRleHRcIl0nKS52YWwoY2VsbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgJHJvdy5hcHBlbmQoJGNlbGwpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgJHJvdy5hcHBlbmQoXG4gICAgICAgICAgICAgICAgICAgICc8dGQgY2xhc3M9XCJmaWVsZGhlbHBlcnMtZmllbGQtdGFibGUtZGVsZXRlLXJvd1wiPicgK1xuICAgICAgICAgICAgICAgICAgICBgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kZWxldGUtcm93IGFyaWEtbGFiZWw9XCIke3RoaXMubDEwblsnZGVsZXRlX3JvdyddfVwiPmAgK1xuICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJkYXNoaWNvbnMgZGFzaGljb25zLW5vXCIgLz4nICtcbiAgICAgICAgICAgICAgICAgICAgJzwvYnV0dG9uPicgK1xuICAgICAgICAgICAgICAgICAgICAnPC90ZD4nXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuJHVpLnRib2R5LmFwcGVuZCgkcm93KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIEZpbmRzIGFuZCBpbml0aWFsaXplcyBhbGwgVGFibGUgZmllbGRzLlxuICpcbiAqIEBzaW5jZSAxLjQuMFxuICovXG5jbGFzcyBGaWVsZFRhYmxlSW5pdGlhbGl6ZSB7XG5cbiAgICAvKipcbiAgICAgKiBDbGFzcyBjb25zdHJ1Y3Rvci5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqXG4gICAgICogQHBhcmFtIHtqUXVlcnl9ICRyb290IFJvb3QgZWxlbWVudCB0byBpbml0aWFsaXplIGZpZWxkcyBpbnNpZGUuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoJHJvb3QpIHtcblxuICAgICAgICBjb25zdCBhcGkgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMuZmllbGRzID0gW107XG5cbiAgICAgICAgbGV0ICRmaWVsZHMgPSAkcm9vdC5maW5kKCdbZGF0YS1maWVsZGhlbHBlcnMtZmllbGQtdGFibGVdJyk7XG5cbiAgICAgICAgaWYgKCAkZmllbGRzLmxlbmd0aCApIHtcblxuICAgICAgICAgICAgJGZpZWxkcy5lYWNoKGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGFwaS5pbml0aWFsaXplRmllbGQoalF1ZXJ5KHRoaXMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZXMgdGhlIGZpZWxkLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2pRdWVyeX0gJGZpZWxkXG4gICAgICovXG4gICAgaW5pdGlhbGl6ZUZpZWxkKCRmaWVsZCkge1xuXG4gICAgICAgIHRoaXMuZmllbGRzLnB1c2goe1xuICAgICAgICAgICAgJGZpZWxkLFxuICAgICAgICAgICAgYXBpOiBuZXcgRmllbGRUYWJsZSgkZmllbGQpLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZpZWxkVGFibGVJbml0aWFsaXplO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2Fzc2V0cy9zcmMvanMvYWRtaW4vZmllbGRzL2ZpZWxkLXRhYmxlLmpzIiwiaW1wb3J0IEZpZWxkIGZyb20gJy4vZmllbGQuanMnO1xuXG4vKipcbiAqIE1lZGlhIEZpZWxkIGZ1bmN0aW9uYWxpdHkuXG4gKlxuICogQHNpbmNlIDEuNC4wXG4gKi9cbmNsYXNzIEZpZWxkTWVkaWEgZXh0ZW5kcyBGaWVsZCB7XG5cbiAgICAvKipcbiAgICAgKiBDbGFzcyBjb25zdHJ1Y3Rvci5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKCRmaWVsZCkge1xuXG4gICAgICAgIHN1cGVyKCRmaWVsZCwgJ21lZGlhJyk7XG5cbiAgICAgICAgdGhpcy5pbml0RmllbGQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplcyB0aGUgTWVkaWEgZmllbGQuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMS40LjBcbiAgICAgKi9cbiAgICBpbml0RmllbGQoKSB7XG5cbiAgICAgICAgdGhpcy4kdWkgPSB7XG4gICAgICAgICAgICBpbnB1dDogdGhpcy4kZmllbGQuZmluZCgnW2RhdGEtbWVkaWEtaW5wdXRdJyksXG4gICAgICAgICAgICBhZGRCdXR0b246IHRoaXMuJGZpZWxkLmZpbmQoJ1tkYXRhLWFkZC1tZWRpYV0nKSxcbiAgICAgICAgICAgIGltYWdlUHJldmlldzogdGhpcy4kZmllbGQuZmluZCgnW2RhdGEtaW1hZ2UtcHJldmlld10nKSxcbiAgICAgICAgICAgIG1lZGlhUHJldmlldzogdGhpcy4kZmllbGQuZmluZCgnW2RhdGEtbWVkaWEtcHJldmlld10nKSxcbiAgICAgICAgICAgIHJlbW92ZUJ1dHRvbjogdGhpcy4kZmllbGQuZmluZCgnW2RhdGEtcmVtb3ZlLW1lZGlhXScpLFxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tZWRpYUZyYW1lID0gd3AubWVkaWEuZnJhbWVzLm1ldGFfaW1hZ2VfZnJhbWUgPSB3cC5tZWRpYSh7XG4gICAgICAgICAgICB0aXRsZTogdGhpcy5vcHRpb25zLmwxMG5bJ3dpbmRvd190aXRsZSddLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnBsYWNlaG9sZGVyID0gdGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyO1xuICAgICAgICB0aGlzLnR5cGUgICAgICAgID0gdGhpcy5vcHRpb25zLnR5cGVcblxuICAgICAgICB0aGlzLmltYWdlUHJvcGVydGllcyA9IHtcbiAgICAgICAgICAgIHByZXZpZXdTaXplOiB0aGlzLm9wdGlvbnMucHJldmlld1NpemUsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5zZXR1cEhhbmRsZXJzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB1cCB0aGUgY2xhc3MgaGFuZGxlcnMuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMS40LjBcbiAgICAgKi9cbiAgICBzZXR1cEhhbmRsZXJzKCkge1xuXG4gICAgICAgIHRoaXMuJHVpLmFkZEJ1dHRvbi5jbGljaygoZSkgPT4ge1xuXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLmFkZE1lZGlhKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuJHVpLnJlbW92ZUJ1dHRvbi5jbGljaygoZSkgPT4ge1xuXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZU1lZGlhKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubWVkaWFGcmFtZS5vbignc2VsZWN0JywgKGUpID0+IHtcblxuICAgICAgICAgICAgdGhpcy5zZWxlY3RNZWRpYSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPcGVucyB0aGUgbWVkaWEgZnJhbWUgdG8gYWRkIG1lZGlhLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICovXG4gICAgYWRkTWVkaWEoKSB7XG5cbiAgICAgICAgdGhpcy5tZWRpYUZyYW1lLm9wZW4oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgbWVkaWEuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMS40LjBcbiAgICAgKi9cbiAgICByZW1vdmVNZWRpYSgpIHtcblxuICAgICAgICB0aGlzLiR1aS5hZGRCdXR0b24uc2hvdygpO1xuICAgICAgICB0aGlzLiR1aS5yZW1vdmVCdXR0b24uaGlkZSgpO1xuICAgICAgICB0aGlzLiR1aS5pbnB1dC52YWwoJycpO1xuXG4gICAgICAgIC8vIFJlc2V0IHByZXZpZXdcbiAgICAgICAgc3dpdGNoICggdGhpcy50eXBlICkge1xuXG4gICAgICAgICAgICBjYXNlICdpbWFnZSc6XG5cbiAgICAgICAgICAgICAgICB0aGlzLiR1aS5pbWFnZVByZXZpZXcuYXR0cignc3JjJywgdGhpcy5wbGFjZWhvbGRlciB8fCAnJyk7XG5cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcblxuICAgICAgICAgICAgICAgIHRoaXMuJHVpLm1lZGlhUHJldmlldy5odG1sKHRoaXMucGxhY2Vob2xkZXIgfHwgJyZuYnNwOycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gc2VsZWN0aW5nIGEgcGllY2Ugb2YgbWVkaWEuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMS40LjBcbiAgICAgKi9cbiAgICBzZWxlY3RNZWRpYSgpIHtcblxuICAgICAgICBsZXQgbWVkaWFBdHRhY2htZW50ID0gdGhpcy5tZWRpYUZyYW1lLnN0YXRlKCkuZ2V0KCdzZWxlY3Rpb24nKS5maXJzdCgpLnRvSlNPTigpO1xuXG4gICAgICAgIHRoaXMuJHVpLmlucHV0LnZhbChtZWRpYUF0dGFjaG1lbnQuaWQpO1xuXG4gICAgICAgIHRoaXMuJHVpLmFkZEJ1dHRvbi5oaWRlKCk7XG4gICAgICAgIHRoaXMuJHVpLnJlbW92ZUJ1dHRvbi5zaG93KCk7XG5cbiAgICAgICAgLy8gUHJldmlld1xuICAgICAgICBzd2l0Y2ggKCB0aGlzLnR5cGUgKSB7XG5cbiAgICAgICAgICAgIGNhc2UgJ2ltYWdlJzpcblxuICAgICAgICAgICAgICAgIGxldCBwcmV2aWV3VXJsID0gbWVkaWFBdHRhY2htZW50LnVybDtcblxuICAgICAgICAgICAgICAgIGlmICggbWVkaWFBdHRhY2htZW50LnNpemVzW3RoaXMuaW1hZ2VQcm9wZXJ0aWVzLnByZXZpZXdTaXplXSApIHtcblxuICAgICAgICAgICAgICAgICAgICBwcmV2aWV3VXJsID0gbWVkaWFBdHRhY2htZW50LnNpemVzW3RoaXMuaW1hZ2VQcm9wZXJ0aWVzLnByZXZpZXdTaXplXS51cmw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy4kdWkuaW1hZ2VQcmV2aWV3LmF0dHIoJ3NyYycsIHByZXZpZXdVcmwpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuXG4gICAgICAgICAgICAgICAgdGhpcy4kdWkubWVkaWFQcmV2aWV3Lmh0bWwobWVkaWFBdHRhY2htZW50LnVybCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogRmluZHMgYW5kIGluaXRpYWxpemVzIGFsbCBNZWRpYSBmaWVsZHMuXG4gKlxuICogQHNpbmNlIDEuNC4wXG4gKi9cbmNsYXNzIEZpZWxkTWVkaWFJbml0aWFsaXplIHtcblxuICAgIC8qKlxuICAgICAqIENsYXNzIGNvbnN0cnVjdG9yLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2pRdWVyeX0gJHJvb3QgUm9vdCBlbGVtZW50IHRvIGluaXRpYWxpemUgZmllbGRzIGluc2lkZS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcigkcm9vdCkge1xuXG4gICAgICAgIGNvbnN0IGFwaSA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5maWVsZHMgPSBbXTtcblxuICAgICAgICBsZXQgJGZpZWxkcyA9ICRyb290LmZpbmQoJ1tkYXRhLWZpZWxkaGVscGVycy1maWVsZC1tZWRpYV0nKTtcblxuICAgICAgICBpZiAoICRmaWVsZHMubGVuZ3RoICkge1xuXG4gICAgICAgICAgICBpZiAoICF3cC5tZWRpYSApIHtcblxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZpZWxkIEhlbHBlcnMgRXJyb3I6IFRyeWluZyB0byBpbml0aWFsaXplIE1lZGlhIGZpZWxkIGJ1dCBtZWRpYSBpcyBub3QgZW5xdWV1ZWQuJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAkZmllbGRzLmVhY2goZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgYXBpLmluaXRpYWxpemVGaWVsZChqUXVlcnkodGhpcykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplcyB0aGUgZmllbGQuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMS40LjBcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7alF1ZXJ5fSAkZmllbGRcbiAgICAgKi9cbiAgICBpbml0aWFsaXplRmllbGQoJGZpZWxkKSB7XG5cbiAgICAgICAgdGhpcy5maWVsZHMucHVzaCh7XG4gICAgICAgICAgICAkZmllbGQsXG4gICAgICAgICAgICBhcGk6IG5ldyBGaWVsZE1lZGlhKCRmaWVsZCksXG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRmllbGRNZWRpYUluaXRpYWxpemU7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vYXNzZXRzL3NyYy9qcy9hZG1pbi9maWVsZHMvZmllbGQtbWVkaWEuanMiLCJpbXBvcnQgRmllbGQgZnJvbSAnLi9maWVsZC5qcyc7XG5cbi8qKlxuICogTGlzdCBGaWVsZCBmdW5jdGlvbmFsaXR5LlxuICpcbiAqIEBzaW5jZSAxLjQuMFxuICovXG5jbGFzcyBGaWVsZExpc3QgZXh0ZW5kcyBGaWVsZCB7XG5cbiAgICAvKipcbiAgICAgKiBDbGFzcyBjb25zdHJ1Y3Rvci5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKCRmaWVsZCkge1xuXG4gICAgICAgIHN1cGVyKCRmaWVsZCwgJ2xpc3QnKTtcblxuICAgICAgICB0aGlzLmluaXRGaWVsZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemVzIHRoZSBsaXN0LlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICovXG4gICAgaW5pdEZpZWxkKCkge1xuXG4gICAgICAgIHRoaXMuJGZpZWxkLnNvcnRhYmxlKHRoaXMub3B0aW9ucyk7XG4gICAgfVxufVxuXG4vKipcbiAqIEZpbmRzIGFuZCBpbml0aWFsaXplcyBhbGwgTGlzdCBmaWVsZHMuXG4gKlxuICogQHNpbmNlIDEuNC4wXG4gKi9cbmNsYXNzIEZpZWxkTGlzdEluaXRpYWxpemUge1xuXG4gICAgLyoqXG4gICAgICogQ2xhc3MgY29uc3RydWN0b3IuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMS40LjBcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7alF1ZXJ5fSAkcm9vdCBSb290IGVsZW1lbnQgdG8gaW5pdGlhbGl6ZSBmaWVsZHMgaW5zaWRlLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKCRyb290KSB7XG5cbiAgICAgICAgY29uc3QgYXBpID0gdGhpcztcblxuICAgICAgICB0aGlzLmZpZWxkcyA9IFtdO1xuXG4gICAgICAgIGxldCAkZmllbGRzID0gJHJvb3QuZmluZCgnW2RhdGEtZmllbGRoZWxwZXJzLWZpZWxkLWxpc3RdJyk7XG5cbiAgICAgICAgaWYgKCAkZmllbGRzLmxlbmd0aCApIHtcblxuICAgICAgICAgICAgaWYgKCAhalF1ZXJ5LmlzRnVuY3Rpb24oalF1ZXJ5LmZuLnNvcnRhYmxlKSApIHtcblxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZpZWxkIEhlbHBlcnMgRXJyb3I6IFRyeWluZyB0byBpbml0aWFsaXplIExpc3QgZmllbGQgYnV0IFwianF1ZXJ5LXVpLXNvcnRhYmxlXCIgJyArXG4gICAgICAgICAgICAgICAgICAgICdpcyBub3QgZW5xdWV1ZWQuJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAkZmllbGRzLmVhY2goZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgYXBpLmluaXRpYWxpemVGaWVsZChqUXVlcnkodGhpcykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplcyB0aGUgZmllbGQuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMS40LjBcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7alF1ZXJ5fSAkZmllbGRcbiAgICAgKi9cbiAgICBpbml0aWFsaXplRmllbGQoJGZpZWxkKSB7XG5cbiAgICAgICAgdGhpcy5maWVsZHMucHVzaCh7XG4gICAgICAgICAgICAkZmllbGQsXG4gICAgICAgICAgICBhcGk6IG5ldyBGaWVsZExpc3QoJGZpZWxkKSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBGaWVsZExpc3RJbml0aWFsaXplO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2Fzc2V0cy9zcmMvanMvYWRtaW4vZmllbGRzL2ZpZWxkLWxpc3QuanMiLCJpbXBvcnQgRmllbGQgZnJvbSAnLi9maWVsZC5qcyc7XG5pbXBvcnQgRmllbGRzSW5pdGlhbGl6ZSBmcm9tICcuLi9maWVsZHMtaW5pdCc7XG5cbi8qKlxuICogUmVwZWF0ZXIgRmllbGQgZnVuY3Rpb25hbGl0eS5cbiAqXG4gKiBAc2luY2UgMS40LjBcbiAqL1xuY2xhc3MgRmllbGRSZXBlYXRlciBleHRlbmRzIEZpZWxkIHtcblxuICAgIC8qKlxuICAgICAqIENsYXNzIGNvbnN0cnVjdG9yLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoJGZpZWxkKSB7XG5cbiAgICAgICAgc3VwZXIoJGZpZWxkLCAncmVwZWF0ZXInKTtcblxuICAgICAgICB0aGlzLmluaXRGaWVsZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemVzIHRoZSBSZXBlYXRlci5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqL1xuICAgIGluaXRGaWVsZCgpIHtcblxuICAgICAgICB0aGlzLiRyZXBlYXRlckxpc3QgPSB0aGlzLiRmaWVsZC5maW5kKCcuZmllbGRoZWxwZXJzLWZpZWxkLXJlcGVhdGVyLWxpc3QnKTtcblxuICAgICAgICBjb25zdCBhcGkgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMuJGZpZWxkLnRyaWdnZXIoJ3JlcGVhdGVyLWJlZm9yZS1pbml0JywgW3RoaXMuJGZpZWxkLCB0aGlzLm9wdGlvbnNdKTtcblxuICAgICAgICB0aGlzLnJlcGVhdGVyID0gdGhpcy4kZmllbGQucmVwZWF0ZXIoe1xuICAgICAgICAgICAgc2hvdzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGFwaS5yZXBlYXRlclNob3coalF1ZXJ5KHRoaXMpKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoaWRlOiBmdW5jdGlvbiAoZGVsZXRlSXRlbSkge1xuICAgICAgICAgICAgICAgIGFwaS5yZXBlYXRlckhpZGUoalF1ZXJ5KHRoaXMpLCBkZWxldGVJdGVtKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlYWR5OiBmdW5jdGlvbiAoc2V0SW5kZXhlcykge1xuICAgICAgICAgICAgICAgIGFwaS4kcmVwZWF0ZXJMaXN0Lm9uKCdzb3J0dXBkYXRlJywgc2V0SW5kZXhlcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNGaXJzdEl0ZW1VbmRlbGV0YWJsZTogYXBpLm9wdGlvbnMuaXNGaXJzdEl0ZW1VbmRlbGV0YWJsZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gRGVsZXRlIGZpcnN0IGl0ZW0gaWYgYWxsb3dlZCBhbmQgZW1wdHlcbiAgICAgICAgaWYgKCAhdGhpcy5vcHRpb25zLmlzRmlyc3RJdGVtVW5kZWxldGFibGUgJiYgdGhpcy5vcHRpb25zLmVtcHR5ICkge1xuICAgICAgICAgICAgdGhpcy4kcmVwZWF0ZXJMaXN0LmZpbmQoJy5maWVsZGhlbHBlcnMtZmllbGQtcmVwZWF0ZXItcm93JykucmVtb3ZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIHRoaXMub3B0aW9ucy5jb2xsYXBzYWJsZSApIHtcblxuICAgICAgICAgICAgdGhpcy5pbml0Q29sbGFwc2FibGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICggdGhpcy5vcHRpb25zLnNvcnRhYmxlICkge1xuXG4gICAgICAgICAgICBpZiAoICFqUXVlcnkuaXNGdW5jdGlvbihqUXVlcnkuZm4uc29ydGFibGUpICkge1xuXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmllbGQgSGVscGVycyBFcnJvcjogVHJ5aW5nIHRvIGluaXRpYWxpemUgc29ydGFibGUgUmVwZWF0ZXIgZmllbGQgYnV0IFwianF1ZXJ5LXVpLXNvcnRhYmxlXCIgJyArXG4gICAgICAgICAgICAgICAgICAgICdpcyBub3QgZW5xdWV1ZWQuJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAgICAgdGhpcy5pbml0U29ydGFibGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERlbGF5IGZvciBvdGhlciBwbHVnaW5zXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy4kZmllbGQudHJpZ2dlcigncmVwZWF0ZXItaW5pdCcsIFt0aGlzLiRmaWVsZF0pO1xuICAgICAgICB9LCAxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplcyB0aGUgQ29sbGFwc2FibGUgZmVhdHVyZSwgaWYgZW5hYmxlZC5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqL1xuICAgIGluaXRDb2xsYXBzYWJsZSgpIHtcblxuICAgICAgICBjb25zdCBhcGkgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMuJGZpZWxkLm9uKCdjbGljayB0b3VjaGVuZCcsICdbZGF0YS1yZXBlYXRlci1jb2xsYXBzYWJsZS1oYW5kbGVdJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ2NsaWNrJyk7XG4gICAgICAgICAgICBhcGkudG9nZ2xlQ29sbGFwc2UoalF1ZXJ5KHRoaXMpLmNsb3Nlc3QoJy5maWVsZGhlbHBlcnMtZmllbGQtcmVwZWF0ZXItcm93JykpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplcyB0aGUgU29ydGFibGUgZmVhdHVyZSwgaWYgZW5hYmxlZC5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqL1xuICAgIGluaXRTb3J0YWJsZSgpIHtcblxuICAgICAgICBjb25zdCBhcGkgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMuJHJlcGVhdGVyTGlzdC5zb3J0YWJsZSh7XG4gICAgICAgICAgICBheGlzOiAneScsXG4gICAgICAgICAgICBoYW5kbGU6ICcuZmllbGRoZWxwZXJzLWZpZWxkLXJlcGVhdGVyLWhhbmRsZScsXG4gICAgICAgICAgICBmb3JjZVBsYWNlaG9sZGVyU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnZmllbGRoZWxwZXJzLXNvcnRhYmxlLXBsYWNlaG9sZGVyJyxcbiAgICAgICAgICAgIHN0b3A6IGZ1bmN0aW9uIChlLCB1aSkge1xuXG4gICAgICAgICAgICAgICAgYXBpLiRyZXBlYXRlckxpc3QudHJpZ2dlcihcbiAgICAgICAgICAgICAgICAgICAgJ2xpc3QtdXBkYXRlJyxcbiAgICAgICAgICAgICAgICAgICAgW2FwaS4kcmVwZWF0ZXJMaXN0XVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgYSByZXBlYXRlciBpdGVtIGNvbGxhcHNlLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2pRdWVyeX0gJGl0ZW1cbiAgICAgKi9cbiAgICB0b2dnbGVDb2xsYXBzZSgkaXRlbSkge1xuXG4gICAgICAgIGxldCAkY29udGVudCA9ICRpdGVtLmZpbmQoJy5maWVsZGhlbHBlcnMtZmllbGQtcmVwZWF0ZXItY29udGVudCcpLmZpcnN0KCk7XG4gICAgICAgIGxldCBzdGF0dXMgICA9ICRpdGVtLmhhc0NsYXNzKCdvcGVuZWQnKSA/ICdjbG9zaW5nJyA6ICdvcGVuaW5nJztcblxuICAgICAgICBpZiAoIHN0YXR1cyA9PT0gJ29wZW5pbmcnICkge1xuXG4gICAgICAgICAgICAkY29udGVudC5zdG9wKCkuc2xpZGVEb3duKCk7XG4gICAgICAgICAgICAkaXRlbS5hZGRDbGFzcygnb3BlbmVkJyk7XG4gICAgICAgICAgICAkaXRlbS5yZW1vdmVDbGFzcygnY2xvc2VkJyk7XG5cbiAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgJGNvbnRlbnQuc3RvcCgpLnNsaWRlVXAoKTtcbiAgICAgICAgICAgICRpdGVtLmFkZENsYXNzKCdjbG9zZWQnKTtcbiAgICAgICAgICAgICRpdGVtLnJlbW92ZUNsYXNzKCdvcGVuZWQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNob3dzIGEgbmV3IHJlcGVhdGVyIGl0ZW0uXG4gICAgICpcbiAgICAgKiBAc2luY2UgMS40LjBcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7alF1ZXJ5fSAkaXRlbSBSZXBlYXRlciBpdGVtIHJvdy5cbiAgICAgKi9cbiAgICByZXBlYXRlclNob3coJGl0ZW0pIHtcblxuICAgICAgICB0aGlzLiRmaWVsZC50cmlnZ2VyKCdyZXBlYXRlci1iZWZvcmUtYWRkLWl0ZW0nLCBbJGl0ZW1dKTtcblxuICAgICAgICAkaXRlbS5zbGlkZURvd24oKTtcblxuICAgICAgICBpZiAoIHRoaXMuJHJlcGVhdGVyTGlzdC5oYXNDbGFzcygnY29sbGFwc2FibGUnKSApIHtcblxuICAgICAgICAgICAgJGl0ZW0uYWRkQ2xhc3MoJ29wZW5lZCcpLnJlbW92ZUNsYXNzKCdjbG9zZWQnKTtcblxuICAgICAgICAgICAgLy8gSGlkZSBjdXJyZW50IHRpdGxlIGZvciBuZXcgaXRlbSBhbmQgc2hvdyBkZWZhdWx0IHRpdGxlXG4gICAgICAgICAgICAkaXRlbS5maW5kKCcuZmllbGRoZWxwZXJzLWZpZWxkLXJlcGVhdGVyLWhlYWRlciBzcGFuLmNvbGxhcHNhYmxlLXRpdGxlJykuaHRtbCgkaXRlbS5maW5kKCcuZmllbGRoZWxwZXJzLWZpZWxkLXJlcGVhdGVyLWhlYWRlciBzcGFuLmNvbGxhcHNhYmxlLXRpdGxlJykuZGF0YSgnY29sbGFwc2FibGUtdGl0bGUtZGVmYXVsdCcpKTtcblxuICAgICAgICAgICAgJGl0ZW0uZmluZCgnLmNvbGxhcHNlLWljb24nKS5jc3Moeyd0cmFuc2Zvcm0nOiAncm90YXRlKC0xODBkZWcpJ30pO1xuXG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZS1pbml0aWFsaXplIGZpZWxkcyBpbiBuZXcgcm93XG4gICAgICAgIG5ldyBGaWVsZHNJbml0aWFsaXplKCRpdGVtKTtcblxuICAgICAgICB0aGlzLiRmaWVsZC50cmlnZ2VyKCdyZXBlYXRlci1hZGQtaXRlbScsIFskaXRlbV0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYSByZXBlYXRlciBpdGVtLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2pRdWVyeX0gJGl0ZW0gUmVwZWF0ZXIgaXRlbSByb3cuXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gZGVsZXRlSXRlbSBDYWxsYmFjayBmb3IgZGVsZXRpbmcgdGhlIGl0ZW0uXG4gICAgICovXG4gICAgcmVwZWF0ZXJIaWRlKCRpdGVtLCBkZWxldGVJdGVtKSB7XG5cbiAgICAgICAgaWYgKCBjb25maXJtKHRoaXMub3B0aW9ucy5sMTBuWydjb25maXJtX2RlbGV0ZV90ZXh0J10pICkge1xuXG4gICAgICAgICAgICB0aGlzLiRmaWVsZC50cmlnZ2VyKCdyZXBlYXRlci1iZWZvcmUtZGVsZXRlLWl0ZW0nLCBbJGl0ZW1dKTtcblxuICAgICAgICAgICAgJGl0ZW0uc2xpZGVVcCg0MDAsICgpID0+IHtcblxuICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW0oKTtcbiAgICAgICAgICAgICAgICB0aGlzLiRmaWVsZC50cmlnZ2VyKCdyZXBlYXRlci1kZWxldGUtaXRlbScsIFskaXRlbV0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogRmluZHMgYW5kIGluaXRpYWxpemVzIGFsbCBSZXBlYXRlciBmaWVsZHMuXG4gKlxuICogQHNpbmNlIDEuNC4wXG4gKi9cbmNsYXNzIEZpZWxkUmVwZWF0ZXJJbml0aWFsaXplIHtcblxuICAgIC8qKlxuICAgICAqIENsYXNzIGNvbnN0cnVjdG9yLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2pRdWVyeX0gJHJvb3QgUm9vdCBlbGVtZW50IHRvIGluaXRpYWxpemUgZmllbGRzIGluc2lkZS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcigkcm9vdCkge1xuXG4gICAgICAgIGNvbnN0IGFwaSA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5maWVsZHMgPSBbXTtcblxuICAgICAgICBsZXQgJGZpZWxkcyA9ICRyb290LmZpbmQoJ1tkYXRhLWZpZWxkaGVscGVycy1maWVsZC1yZXBlYXRlcl0nKTtcblxuICAgICAgICBpZiAoICRmaWVsZHMubGVuZ3RoICkge1xuXG4gICAgICAgICAgICAkZmllbGRzLmVhY2goZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgYXBpLmluaXRpYWxpemVGaWVsZChqUXVlcnkodGhpcykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplcyB0aGUgZmllbGQuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMS40LjBcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7alF1ZXJ5fSAkZmllbGRcbiAgICAgKi9cbiAgICBpbml0aWFsaXplRmllbGQoJGZpZWxkKSB7XG5cbiAgICAgICAgdGhpcy5maWVsZHMucHVzaCh7XG4gICAgICAgICAgICAkZmllbGQsXG4gICAgICAgICAgICBhcGk6IG5ldyBGaWVsZFJlcGVhdGVyKCRmaWVsZCksXG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRmllbGRSZXBlYXRlckluaXRpYWxpemU7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vYXNzZXRzL3NyYy9qcy9hZG1pbi9maWVsZHMvZmllbGQtcmVwZWF0ZXIuanMiLCJpbXBvcnQgRmllbGQgZnJvbSAnLi9maWVsZC5qcyc7XG5cbi8qKlxuICogU2VsZWN0IEZpZWxkIGZ1bmN0aW9uYWxpdHkuXG4gKlxuICogQHNpbmNlIDEuNC4wXG4gKi9cbmNsYXNzIEZpZWxkU2VsZWN0IGV4dGVuZHMgRmllbGQge1xuXG4gICAgLyoqXG4gICAgICogQ2xhc3MgY29uc3RydWN0b3IuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMS40LjBcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcigkZmllbGQpIHtcblxuICAgICAgICBzdXBlcigkZmllbGQsICdzZWxlY3QnKTtcblxuICAgICAgICB0aGlzLmluaXRGaWVsZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemVzIHRoZSBzZWxlY3QuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMS40LjBcbiAgICAgKi9cbiAgICBpbml0RmllbGQoKSB7XG5cbiAgICAgICAgaWYgKCAhdGhpcy5vcHRpb25zLnNlbGVjdDJEaXNhYmxlZCApIHtcblxuICAgICAgICAgICAgaWYgKCAhalF1ZXJ5LmlzRnVuY3Rpb24oalF1ZXJ5LmZuLnJibWZoc2VsZWN0MikgKSB7XG5cbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGaWVsZCBIZWxwZXJzIEVycm9yOiBUcnlpbmcgdG8gaW5pdGlhbGl6ZSBTZWxlY3QgZmllbGQgYnV0IFwic2VsZWN0MlwiICcgK1xuICAgICAgICAgICAgICAgICAgICAnaXMgbm90IGVucXVldWVkLicpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZXR1cFNlbGVjdDJPcHRpb25zKCk7XG5cbiAgICAgICAgICAgIHRoaXMuJGZpZWxkLnJibWZoc2VsZWN0Mih0aGlzLm9wdGlvbnMuc2VsZWN0Mk9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB1cCBsYW5ndWFnZXMuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMS40LjBcbiAgICAgKi9cbiAgICBzZXR1cEwxMG4oKSB7XG5cbiAgICAgICAgaWYgKCBPYmplY3Qua2V5cyh0aGlzLm9wdGlvbnMuc2VsZWN0Mk9wdGlvbnMubGFuZ3VhZ2UpLmxlbmd0aCA+IDAgKSB7XG5cbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMub3B0aW9ucy5zZWxlY3QyT3B0aW9ucy5sYW5ndWFnZSkubWFwKChpZCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgbGV0IHRleHQgPSB0aGlzLm9wdGlvbnMuc2VsZWN0Mk9wdGlvbnMubGFuZ3VhZ2VbaWRdO1xuXG4gICAgICAgICAgICAgICAgLy8gQWxsIGxhbmd1YWdlcyBtdXN0IGJlIGZ1bmN0aW9ucy4gVHVybiBhbGwgaW50byBmdW5jdGlvbnMuXG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnNlbGVjdDJPcHRpb25zLmxhbmd1YWdlW2lkXSA9IChhcmdzKSA9PiB0ZXh0O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHVwIFNlbGVjdDIgYXJndW1lbnRzLCBhbGxvd2luZyBmb3IgY2FsbGJhY2sgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4yXG4gICAgICovXG4gICAgc2V0dXBTZWxlY3QyT3B0aW9ucygpIHtcblxuICAgICAgICB0aGlzLnNldHVwTDEwbigpO1xuXG4gICAgICAgIC8vIExpc3Qgb2YgYXZhaWxhYmxlIFNlbGVjdDIgb3B0aW9ucyB0aGF0IGFyZSBjYWxsYmFja3NcbiAgICAgICAgbGV0IGNhbGxiYWNrT3B0aW9ucyA9IFtcbiAgICAgICAgICAgICdlc2NhcGVNYXJrdXAnLFxuICAgICAgICAgICAgJ2luaXRTZWxlY3Rpb24nLFxuICAgICAgICAgICAgJ21hdGNoZXInLFxuICAgICAgICAgICAgJ3F1ZXJ5JyxcbiAgICAgICAgICAgICdzb3J0ZXInLFxuICAgICAgICAgICAgJ3RlbXBsYXRlUmVzdWx0JyxcbiAgICAgICAgICAgICd0ZW1wbGF0ZVNlbGVjdGlvbicsXG4gICAgICAgICAgICAndG9rZW5pemVyJ1xuICAgICAgICBdO1xuXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMub3B0aW9ucy5zZWxlY3QyT3B0aW9ucykubWFwKChuYW1lKSA9PiB7XG5cbiAgICAgICAgICAgIGlmICggY2FsbGJhY2tPcHRpb25zLmluZGV4T2YobmFtZSkgIT09IC0xICkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGNhbGxiYWNrTmFtZSA9IHRoaXMub3B0aW9ucy5zZWxlY3QyT3B0aW9uc1tuYW1lXTtcblxuICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIHdpbmRvd1tjYWxsYmFja05hbWVdID09PSAnZnVuY3Rpb24nICkge1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zZWxlY3QyT3B0aW9uc1tuYW1lXSA9IHdpbmRvd1tjYWxsYmFja05hbWVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gQXV0b21hdGljYWxseSBwcmVmaXggc2VsZWN0ZWQgaXRlbXMgd2l0aCBvcHRncm91cCBsYWJlbCwgaWYgdXNpbmcgb3B0Z3JvdXBzXG4gICAgICAgIGlmICggdGhpcy5vcHRpb25zLm9wdEdyb3VwcyAmJlxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLm9wdEdyb3VwU2VsZWN0aW9uUHJlZml4ICYmXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5vcHRpb25zLnNlbGVjdDJPcHRpb25zLnRlbXBsYXRlU2VsZWN0aW9uID09PSAndW5kZWZpbmVkJyApIHtcblxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnNlbGVjdDJPcHRpb25zLnRlbXBsYXRlU2VsZWN0aW9uID0gKGl0ZW0pID0+IHtcblxuICAgICAgICAgICAgICAgIGxldCBvcHRHcm91cCA9IGpRdWVyeShpdGVtLmVsZW1lbnQpLmNsb3Nlc3QoJ29wdGdyb3VwJykuYXR0cignbGFiZWwnKS50cmltKCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gb3B0R3JvdXAgKyAnOiAnICsgaXRlbS50ZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzZXRzIHRoZSBmaWVsZC5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqL1xuICAgIGZpZWxkQ2xlYW51cCgpIHtcblxuICAgICAgICBpZiAoIHRoaXMub3B0aW9ucy5zZWxlY3QyRGlzYWJsZWQgKSB7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCAkb2xkU2VsZWN0ID0gdGhpcy4kZmllbGQubmV4dCgnLnNlbGVjdDInKTtcblxuICAgICAgICBpZiAoICRvbGRTZWxlY3QubGVuZ3RoICkge1xuXG4gICAgICAgICAgICAkb2xkU2VsZWN0LnJlbW92ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy4kZmllbGRcbiAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnc2VsZWN0Mi1oaWRkZW4tYWNjZXNzaWJsZScpXG4gICAgICAgICAgICAucmVtb3ZlQXR0cigndGFibGluZGV4IGFyaWEtaGlkZGVuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZmllbGQgdG8gZGVmYXVsdC4gT3ZlcnJpZGUgaW4gY2hpbGQgY2xhc3MgaWYgbmVlZCBkaWZmZXJlbnQgbWV0aG9kLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICovXG4gICAgc2V0RGVmYXVsdCgpIHtcblxuICAgICAgICB0aGlzLiRmaWVsZC5maW5kKCdvcHRpb246c2VsZWN0ZWQnKS5wcm9wKCdzZWxlY3RlZCcsIGZhbHNlKTtcbiAgICAgICAgdGhpcy4kZmllbGQudHJpZ2dlcignY2hhbmdlJyk7XG4gICAgfVxufVxuXG4vKipcbiAqIEZpbmRzIGFuZCBpbml0aWFsaXplcyBhbGwgU2VsZWN0IGZpZWxkcy5cbiAqXG4gKiBAc2luY2UgMS40LjBcbiAqL1xuY2xhc3MgRmllbGRTZWxlY3RJbml0aWFsaXplIHtcblxuICAgIC8qKlxuICAgICAqIENsYXNzIGNvbnN0cnVjdG9yLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2pRdWVyeX0gJHJvb3QgUm9vdCBlbGVtZW50IHRvIGluaXRpYWxpemUgZmllbGRzIGluc2lkZS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcigkcm9vdCkge1xuXG4gICAgICAgIGNvbnN0IGFwaSA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5maWVsZHMgPSBbXTtcblxuICAgICAgICBsZXQgJGZpZWxkcyA9ICRyb290LmZpbmQoJ1tkYXRhLWZpZWxkaGVscGVycy1maWVsZC1zZWxlY3RdJyk7XG5cbiAgICAgICAgaWYgKCAkZmllbGRzLmxlbmd0aCApIHtcblxuICAgICAgICAgICAgJGZpZWxkcy5lYWNoKGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGFwaS5pbml0aWFsaXplRmllbGQoalF1ZXJ5KHRoaXMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZXMgdGhlIGZpZWxkLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2pRdWVyeX0gJGZpZWxkXG4gICAgICovXG4gICAgaW5pdGlhbGl6ZUZpZWxkKCRmaWVsZCkge1xuXG4gICAgICAgIHRoaXMuZmllbGRzLnB1c2goe1xuICAgICAgICAgICAgJGZpZWxkLFxuICAgICAgICAgICAgYXBpOiBuZXcgRmllbGRTZWxlY3QoJGZpZWxkKSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBGaWVsZFNlbGVjdEluaXRpYWxpemU7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vYXNzZXRzL3NyYy9qcy9hZG1pbi9maWVsZHMvZmllbGQtc2VsZWN0LmpzIiwiaW1wb3J0IEZpZWxkIGZyb20gJy4vZmllbGQuanMnO1xuXG4vKipcbiAqIFRleHRBcmVhIEZpZWxkIGZ1bmN0aW9uYWxpdHkuXG4gKlxuICogQHNpbmNlIDEuNC4wXG4gKi9cbmNsYXNzIEZpZWxkVGV4dEFyZWEgZXh0ZW5kcyBGaWVsZCB7XG5cbiAgICAvKipcbiAgICAgKiBDbGFzcyBjb25zdHJ1Y3Rvci5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKCRmaWVsZCkge1xuXG4gICAgICAgIHN1cGVyKCRmaWVsZCwgJ3RleHRhcmVhJyk7XG5cbiAgICAgICAgdGhpcy5pbml0RmllbGQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplcyB0aGUgV1lTSVdZRy5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqL1xuICAgIGluaXRGaWVsZCgpIHtcblxuICAgICAgICBpZiAoIHRoaXMub3B0aW9ucy53eXNpd3lnICkge1xuXG4gICAgICAgICAgICBpZiAoICF3cC5lZGl0b3IgKSB7XG5cbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGaWVsZCBIZWxwZXJzIEVycm9yOiBUcnlpbmcgdG8gaW5pdGlhbGl6ZSBhIFdZU0lXWUcgVGV4dCBBcmVhIGZpZWxkIGJ1dCBcIndwX2VkaXRvclwiICcgK1xuICAgICAgICAgICAgICAgICAgICAnaXMgbm90IGVucXVldWVkLicpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHNldHRpbmdzID0galF1ZXJ5LmV4dGVuZCh0aGlzLmdldERlZmF1bHRFZGl0b3JTZXR0aW5ncygpLCB0aGlzLm9wdGlvbnMud3lzaXd5Z09wdGlvbnMpO1xuXG4gICAgICAgICAgICB3cC5lZGl0b3IuaW5pdGlhbGl6ZSh0aGlzLiRmaWVsZC5hdHRyKCdpZCcpLCBzZXR0aW5ncyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNldHMgdGhlIGZpZWxkLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICovXG4gICAgZmllbGRDbGVhbnVwKCkge1xuXG4gICAgICAgIGlmICggdGhpcy5vcHRpb25zLnd5c2l3eWcgKSB7XG5cbiAgICAgICAgICAgIGxldCBpZCA9IHRoaXMuJGZpZWxkLmF0dHIoJ2lkJyk7XG5cbiAgICAgICAgICAgIGlmICggd2luZG93LnRpbnltY2UuZ2V0KGlkKSApIHtcblxuICAgICAgICAgICAgICAgIHdwLmVkaXRvci5yZW1vdmUoaWQpO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAgICAgdGhpcy4kZmllbGQuYXBwZW5kVG8odGhpcy4kd3JhcHBlci5maW5kKCcuZmllbGRoZWxwZXJzLWZpZWxkLWNvbnRlbnQnKSk7XG4gICAgICAgICAgICAgICAgdGhpcy4kd3JhcHBlci5maW5kKCcud3AtZWRpdG9yLXdyYXAnKS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpcmVzIGJlZm9yZSBkZWxldGluZyB0aGUgaXRlbSBmcm9tIGEgcmVwZWF0ZXIuXG4gICAgICpcbiAgICAgKiBSZW1vdmVzIGZyb20gd3AuZWRpdG9yLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICovXG4gICAgcmVwZWF0ZXJCZWZvcmVEZWxldGVTZWxmKCkge1xuXG4gICAgICAgIHRoaXMuZmllbGRDbGVhbnVwKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gUmVwZWF0IGRlbGV0ZSBpdGVtLlxuICAgICAqXG4gICAgICogQWRkcyBzbGlnaHQgZGVsYXkgdG8gZmllbGQgcmUtaW5pdGlhbGl6YXRpb24uXG4gICAgICpcbiAgICAgKiBAc2luY2UgMS40LjBcbiAgICAgKi9cbiAgICByZXBlYXRlck9uRGVsZXRlSXRlbSgpIHtcblxuICAgICAgICB0aGlzLmZpZWxkQ2xlYW51cCgpO1xuICAgICAgICB0aGlzLnJlcGVhdGVyU2V0SUQoKTtcblxuICAgICAgICAvLyBBZGQgc2xpZ2h0IGRlbGF5IGJlY2F1c2UgYWxsIHJlcGVhdGVyIGl0ZW0gV1lTSVdZRydzIG11c3QgYmUgdW5pdGlhbGl6ZWQgYmVmb3JlIHJlLWluaXRpYWxpemluZyB0byBwcmV2ZW50XG4gICAgICAgIC8vIElEIG92ZXJsYXAuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge3RoaXMuaW5pdEZpZWxkKCl9LCAxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaXJlcyBvbiBSZXBlYXQgc29ydCBpdGVtLlxuICAgICAqXG4gICAgICogQWRkcyBzbGlnaHQgZGVsYXkgdG8gZmllbGQgcmUtaW5pdGlhbGl6YXRpb24uXG4gICAgICpcbiAgICAgKiBAc2luY2UgMS40LjBcbiAgICAgKi9cbiAgICByZXBlYXRlck9uU29ydCgpIHtcblxuICAgICAgICB0aGlzLmZpZWxkQ2xlYW51cCgpO1xuICAgICAgICB0aGlzLnJlcGVhdGVyU2V0SUQoKTtcblxuICAgICAgICAvLyBBZGQgc2xpZ2h0IGRlbGF5IGJlY2F1c2UgYWxsIHJlcGVhdGVyIGl0ZW0gV1lTSVdZRydzIG11c3QgYmUgdW5pdGlhbGl6ZWQgYmVmb3JlIHJlLWluaXRpYWxpemluZyB0byBwcmV2ZW50XG4gICAgICAgIC8vIElEIG92ZXJsYXAuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge3RoaXMuaW5pdEZpZWxkKCl9LCAxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmllcyB0byBnZXQgZGVmYXVsdCBlZGl0b3Igc2V0dGluZ3MuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMS40LjBcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge3t9fVxuICAgICAqL1xuICAgIGdldERlZmF1bHRFZGl0b3JTZXR0aW5ncygpIHtcblxuICAgICAgICBpZiAoICEgalF1ZXJ5LmlzRnVuY3Rpb24od3AuZWRpdG9yLmdldERlZmF1bHRTZXR0aW5ncykgKSB7XG5cbiAgICAgICAgICAgIHJldHVybiB7fTtcblxuICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICByZXR1cm4gd3AuZWRpdG9yLmdldERlZmF1bHRTZXR0aW5ncygpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIEZpbmRzIGFuZCBpbml0aWFsaXplcyBhbGwgVGV4dEFyZWEgZmllbGRzLlxuICpcbiAqIEBzaW5jZSAxLjQuMFxuICovXG5jbGFzcyBGaWVsZFRleHRBcmVhSW5pdGlhbGl6ZSB7XG5cbiAgICAvKipcbiAgICAgKiBDbGFzcyBjb25zdHJ1Y3Rvci5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqXG4gICAgICogQHBhcmFtIHtqUXVlcnl9ICRyb290IFJvb3QgZWxlbWVudCB0byBpbml0aWFsaXplIGZpZWxkcyBpbnNpZGUuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoJHJvb3QpIHtcblxuICAgICAgICBjb25zdCBhcGkgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMuZmllbGRzID0gW107XG5cbiAgICAgICAgbGV0ICRmaWVsZHMgPSAkcm9vdC5maW5kKCdbZGF0YS1maWVsZGhlbHBlcnMtZmllbGQtdGV4dGFyZWFdJyk7XG5cbiAgICAgICAgaWYgKCAkZmllbGRzLmxlbmd0aCApIHtcblxuICAgICAgICAgICAgJGZpZWxkcy5lYWNoKGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGFwaS5pbml0aWFsaXplRmllbGQoalF1ZXJ5KHRoaXMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZXMgdGhlIGZpZWxkLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2pRdWVyeX0gJGZpZWxkXG4gICAgICovXG4gICAgaW5pdGlhbGl6ZUZpZWxkKCRmaWVsZCkge1xuXG4gICAgICAgIHRoaXMuZmllbGRzLnB1c2goe1xuICAgICAgICAgICAgJGZpZWxkLFxuICAgICAgICAgICAgYXBpOiBuZXcgRmllbGRUZXh0QXJlYSgkZmllbGQpLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZpZWxkVGV4dEFyZWFJbml0aWFsaXplO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2Fzc2V0cy9zcmMvanMvYWRtaW4vZmllbGRzL2ZpZWxkLXRleHRhcmVhLmpzIiwiaW1wb3J0IEZpZWxkIGZyb20gJy4vZmllbGQuanMnO1xuXG4vKipcbiAqIENoZWNrYm94IEZpZWxkIGZ1bmN0aW9uYWxpdHkuXG4gKlxuICogQHNpbmNlIDEuNC4wXG4gKi9cbmNsYXNzIEZpZWxkQ2hlY2tib3ggZXh0ZW5kcyBGaWVsZCB7XG5cbiAgICAvKipcbiAgICAgKiBDbGFzcyBjb25zdHJ1Y3Rvci5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKCRmaWVsZCkge1xuXG4gICAgICAgIHN1cGVyKCRmaWVsZCwgJ2NoZWNrYm94Jyk7XG5cbiAgICAgICAgdGhpcy5pbml0RmllbGQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplcyB0aGUgc2VsZWN0LlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICovXG4gICAgaW5pdEZpZWxkKCkge1xuXG4gICAgICAgIHRoaXMuJHVpID0ge1xuICAgICAgICAgICAgY2hlY2tib3hlczogdGhpcy4kZmllbGQuZmluZCgnaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdJyksXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldHVwSGFuZGxlcnMoKTtcblxuICAgICAgICB0aGlzLiRmaWVsZC5maW5kKCdpbnB1dDpjaGVja2VkJykudHJpZ2dlciggJ2NoYW5nZScgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHVwIGNsYXNzIGhhbmRsZXJzLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICovXG4gICAgc2V0dXBIYW5kbGVycygpIHtcblxuICAgICAgICBjb25zdCBhcGkgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMuJHVpLmNoZWNrYm94ZXMuY2hhbmdlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGFwaS5oYW5kbGVDaGFuZ2UoalF1ZXJ5KHRoaXMpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gY2hlY2tib3ggY2hhbmdlLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2pRdWVyeX0gJGlucHV0IENoZWNrYm94IGlucHV0LlxuICAgICAqL1xuICAgIGhhbmRsZUNoYW5nZSgkaW5wdXQpIHtcblxuICAgICAgICBpZiAoICRpbnB1dC5wcm9wKCdjaGVja2VkJykgKSB7XG5cbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlKCRpbnB1dC5jbG9zZXN0KCcuZmllbGRoZWxwZXJzLWZpZWxkLWNoZWNrYm94LXJvdycpKTtcblxuICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICB0aGlzLnNldEluYWN0aXZlKCRpbnB1dC5jbG9zZXN0KCcuZmllbGRoZWxwZXJzLWZpZWxkLWNoZWNrYm94LXJvdycpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNoZWNrYm94IHJvdyBhcyBhY3RpdmUuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMS40LjBcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7alF1ZXJ5fSAkcm93XG4gICAgICovXG4gICAgc2V0QWN0aXZlKCRyb3cpIHtcblxuICAgICAgICAkcm93LmFkZENsYXNzKCdmaWVsZGhlbHBlcnMtZmllbGQtY2hlY2tib3gtcm93LWFjdGl2ZScpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNoZWNrYm94IHJvdyBhcyBpbmFjdGl2ZS5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqXG4gICAgICogQHBhcmFtIHtqUXVlcnl9ICRyb3dcbiAgICAgKi9cbiAgICBzZXRJbmFjdGl2ZSgkcm93KSB7XG5cbiAgICAgICAgJHJvdy5yZW1vdmVDbGFzcygnZmllbGRoZWxwZXJzLWZpZWxkLWNoZWNrYm94LXJvdy1hY3RpdmUnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBJRCB0byBiZSB1bmlxdWUsIGJhc2VkIG9mZiB0aGUgcmVwZWF0ZXIgaXRlbSBpbmRleC5cbiAgICAgKlxuICAgICAqIEZvciBjaGVja2JveGVzLCB0aGVyZSB3aWxsIGJlIG11bHRpcGxlIElEcyBpbiBlYWNoLCBhbmQgbmVlZCB0byBiZSBzZXQgYWNjb3JkaW5nbHkuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMS40LjBcbiAgICAgKi9cbiAgICByZXBlYXRlclNldElEKCkge1xuXG4gICAgICAgIGxldCBJRCAgICA9IHRoaXMub3B0aW9ucy5pZDtcbiAgICAgICAgbGV0ICRyb3dzID0gdGhpcy4kZmllbGQuZmluZCgnLmZpZWxkaGVscGVycy1maWVsZC1jaGVja2JveC1yb3cnKTtcbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy4kZmllbGQuY2xvc2VzdCgnW2RhdGEtcmVwZWF0ZXItaXRlbV0nKS5pbmRleCgpO1xuXG4gICAgICAgICRyb3dzLmVhY2goZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgJGZpZWxkICAgICA9IGpRdWVyeSh0aGlzKS5maW5kKCdpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nKTtcbiAgICAgICAgICAgIGxldCAkbGFiZWwgICAgID0gJGZpZWxkLm5leHQoJ2xhYmVsJyk7XG4gICAgICAgICAgICBsZXQgZmllbGRJbmRleCA9IGpRdWVyeSh0aGlzKS5pbmRleCgpO1xuICAgICAgICAgICAgbGV0IG5ld0lEICAgICAgPSBgJHtJRH1fJHtpbmRleH1fJHtmaWVsZEluZGV4fWA7XG5cbiAgICAgICAgICAgICRmaWVsZC5hdHRyKCdpZCcsIG5ld0lEKTtcbiAgICAgICAgICAgICRsYWJlbC5hdHRyKCdmb3InLCBuZXdJRCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFucyB1cCBhZnRlciBhIHJlcGVhdGVyIGFkZC9pbml0LlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNS44XG4gICAgICovXG4gICAgIGZpZWxkQ2xlYW51cCgpIHtcblxuICAgICAgICBsZXQgYXBpID0gdGhpcztcblxuICAgICAgICB0aGlzLiRmaWVsZC5maW5kKCAnaW5wdXQnICkuZWFjaCggZnVuY3Rpb24oIGluZGV4LCBpbnB1dCApIHtcbiAgICAgICAgICAgIGFwaS5zZXRJbmFjdGl2ZSggalF1ZXJ5KCBpbnB1dCApLmNsb3Nlc3QoICcuZmllbGRoZWxwZXJzLWZpZWxkLWNoZWNrYm94LXJvdycgKSApO1xuICAgICAgICB9ICk7XG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbnN1cmUgdGhhdCBvdXIgc3R5bGluZyBpcyByZWFwcGxpZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSAgIHtvYmplY3R9ICAkcmVwZWF0ZXIgIGpRdWVyeSBET00gT2JqZWN0XG4gICAgICogQHBhcmFtICAge2FycmF5fSAgb3B0aW9ucyAgICAgQXJyYXkgb2YgRmllbGQgT3B0aW9uc1xuICAgICAqXG4gICAgICogQHNpbmNlICAgMS41LjhcbiAgICAgKiBAcmV0dXJuICB2b2lkXG4gICAgICovXG4gICAgIHJlcGVhdGVyT25Jbml0KCAkcmVwZWF0ZXIsIG9wdGlvbnMgKSB7XG5cbiAgICAgICAgdGhpcy5pbml0RmllbGQoKTtcblxuICAgIH1cbiAgICBcbiAgICAvKipcbiAgICAgKiBSdW5zIGNsZWFudXAgYmVmb3JlIHRoZSBSZXBlYXRlciBjcmVhdGVzIGEgZHVtbXkgcm93IHRvIGNsZWFyIG91dCBzZWxlY3RlZCBpdGVtc1xuICAgICAqXG4gICAgICogQHBhcmFtICAge29iamVjdH0gICRyZXBlYXRlciAgalF1ZXJ5IERPTSBPYmplY3RcbiAgICAgKiBAcGFyYW0gICB7YXJyYXl9ICBvcHRpb25zICAgICBBcnJheSBvZiBGaWVsZCBPcHRpb25zXG4gICAgICpcbiAgICAgKiBAc2luY2UgICAxLjUuOFxuICAgICAqIEByZXR1cm4gIHZvaWRcbiAgICAgKi9cbiAgICByZXBlYXRlckJlZm9yZUluaXQoICRyZXBlYXRlciwgb3B0aW9ucyApIHtcblxuICAgICAgICB0aGlzLmZpZWxkQ2xlYW51cCgpO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZmllbGQgdG8gZGVmYXVsdC5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqL1xuICAgIHNldERlZmF1bHQoKSB7XG5cbiAgICAgICAgaWYgKCB0aGlzLm9wdGlvbnMuZGVmYXVsdCApIHtcblxuICAgICAgICAgICAgdGhpcy4kZmllbGQuZmluZChgW3ZhbHVlPVwiJHt0aGlzLm9wdGlvbnMuZGVmYXVsdH1cIl1gKS5wcm9wKCdjaGVja2VkJywgdHJ1ZSkuY2hhbmdlKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogRmluZHMgYW5kIGluaXRpYWxpemVzIGFsbCBDaGVja2JveCBmaWVsZHMuXG4gKlxuICogQHNpbmNlIDEuNC4wXG4gKi9cbmNsYXNzIEZpZWxkQ2hlY2tib3hJbml0aWFsaXplIHtcblxuICAgIC8qKlxuICAgICAqIENsYXNzIGNvbnN0cnVjdG9yLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2pRdWVyeX0gJHJvb3QgUm9vdCBlbGVtZW50IHRvIGluaXRpYWxpemUgZmllbGRzIGluc2lkZS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcigkcm9vdCkge1xuXG4gICAgICAgIGNvbnN0IGFwaSA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5maWVsZHMgPSBbXTtcblxuICAgICAgICBsZXQgJGZpZWxkcyA9ICRyb290LmZpbmQoJ1tkYXRhLWZpZWxkaGVscGVycy1maWVsZC1jaGVja2JveF0nKTtcblxuICAgICAgICBpZiAoICRmaWVsZHMubGVuZ3RoICkge1xuXG4gICAgICAgICAgICAkZmllbGRzLmVhY2goZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgYXBpLmluaXRpYWxpemVGaWVsZChqUXVlcnkodGhpcykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplcyB0aGUgZmllbGQuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMS40LjBcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7alF1ZXJ5fSAkZmllbGRcbiAgICAgKi9cbiAgICBpbml0aWFsaXplRmllbGQoJGZpZWxkKSB7XG5cbiAgICAgICAgdGhpcy5maWVsZHMucHVzaCh7XG4gICAgICAgICAgICAkZmllbGQsXG4gICAgICAgICAgICBhcGk6IG5ldyBGaWVsZENoZWNrYm94KCRmaWVsZCksXG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRmllbGRDaGVja2JveEluaXRpYWxpemU7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vYXNzZXRzL3NyYy9qcy9hZG1pbi9maWVsZHMvZmllbGQtY2hlY2tib3guanMiLCJpbXBvcnQgRmllbGQgZnJvbSAnLi9maWVsZC5qcyc7XG5cbi8qKlxuICogUmFkaW8gRmllbGQgZnVuY3Rpb25hbGl0eS5cbiAqXG4gKiBAc2luY2UgMS40LjBcbiAqL1xuY2xhc3MgRmllbGRSYWRpbyBleHRlbmRzIEZpZWxkIHtcblxuICAgIC8qKlxuICAgICAqIENsYXNzIGNvbnN0cnVjdG9yLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoJGZpZWxkKSB7XG5cbiAgICAgICAgc3VwZXIoJGZpZWxkLCAncmFkaW8nKTtcblxuICAgICAgICB0aGlzLmluaXRGaWVsZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemVzIHRoZSBzZWxlY3QuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMS40LjBcbiAgICAgKi9cbiAgICBpbml0RmllbGQoKSB7XG5cbiAgICAgICAgdGhpcy4kdWkgPSB7XG4gICAgICAgICAgICByYWRpb3M6IHRoaXMuJGZpZWxkLmZpbmQoJ2lucHV0W3R5cGU9XCJyYWRpb1wiXScpLFxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXR1cEhhbmRsZXJzKCk7XG5cbiAgICAgICAgdGhpcy4kZmllbGQuZmluZCgnaW5wdXQ6Y2hlY2tlZCcpLnRyaWdnZXIoICdjaGFuZ2UnICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB1cCBjbGFzcyBoYW5kbGVycy5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqL1xuICAgIHNldHVwSGFuZGxlcnMoKSB7XG5cbiAgICAgICAgY29uc3QgYXBpID0gdGhpcztcblxuICAgICAgICB0aGlzLiR1aS5yYWRpb3MuY2hhbmdlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGFwaS5oYW5kbGVDaGFuZ2UoalF1ZXJ5KHRoaXMpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlyZXMgb24gcmFkaW8gY2hhbmdlLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2pRdWVyeX0gJGlucHV0IENoZWNrYm94IGlucHV0LlxuICAgICAqL1xuICAgIGhhbmRsZUNoYW5nZSgkaW5wdXQpIHtcblxuICAgICAgICB0aGlzLnNldEluYWN0aXZlKHRoaXMuJHVpLnJhZGlvcy5jbG9zZXN0KCcuZmllbGRoZWxwZXJzLWZpZWxkLXJhZGlvLXJvdycpKTtcbiAgICAgICAgdGhpcy5zZXRBY3RpdmUoJGlucHV0LmNsb3Nlc3QoJy5maWVsZGhlbHBlcnMtZmllbGQtcmFkaW8tcm93JykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHJhZGlvIHJvdyBhcyBhY3RpdmUuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMS40LjBcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7alF1ZXJ5fSAkcm93XG4gICAgICovXG4gICAgc2V0QWN0aXZlKCRyb3cpIHtcblxuICAgICAgICAkcm93LmFkZENsYXNzKCdmaWVsZGhlbHBlcnMtZmllbGQtcmFkaW8tcm93LWFjdGl2ZScpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHJhZGlvIHJvdyBhcyBpbmFjdGl2ZS5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqXG4gICAgICogQHBhcmFtIHtqUXVlcnl9ICRyb3dcbiAgICAgKi9cbiAgICBzZXRJbmFjdGl2ZSgkcm93KSB7XG5cbiAgICAgICAgJHJvdy5yZW1vdmVDbGFzcygnZmllbGRoZWxwZXJzLWZpZWxkLXJhZGlvLXJvdy1hY3RpdmUnKTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIElEIHRvIGJlIHVuaXF1ZSwgYmFzZWQgb2ZmIHRoZSByZXBlYXRlciBpdGVtIGluZGV4LlxuICAgICAqXG4gICAgICogRm9yIHJhZGlvcywgdGhlcmUgd2lsbCBiZSBtdWx0aXBsZSBJRHMgaW4gZWFjaCwgYW5kIG5lZWQgdG8gYmUgc2V0IGFjY29yZGluZ2x5LlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICovXG4gICAgcmVwZWF0ZXJTZXRJRCgpIHtcblxuICAgICAgICBsZXQgSUQgICAgPSB0aGlzLm9wdGlvbnMuaWQ7XG4gICAgICAgIGxldCAkcm93cyA9IHRoaXMuJGZpZWxkLmZpbmQoJy5maWVsZGhlbHBlcnMtZmllbGQtcmFkaW8tcm93Jyk7XG4gICAgICAgIGxldCBpbmRleCA9IHRoaXMuJGZpZWxkLmNsb3Nlc3QoJ1tkYXRhLXJlcGVhdGVyLWl0ZW1dJykuaW5kZXgoKTtcblxuICAgICAgICAkcm93cy5lYWNoKGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0ICRmaWVsZCAgICAgPSBqUXVlcnkodGhpcykuZmluZCgnaW5wdXRbdHlwZT1cInJhZGlvXCJdJyk7XG4gICAgICAgICAgICBsZXQgJGxhYmVsICAgICA9ICRmaWVsZC5uZXh0KCdsYWJlbCcpO1xuICAgICAgICAgICAgbGV0IGZpZWxkSW5kZXggPSBqUXVlcnkodGhpcykuaW5kZXgoKTtcbiAgICAgICAgICAgIGxldCBuZXdJRCAgICAgID0gYCR7SUR9XyR7aW5kZXh9XyR7ZmllbGRJbmRleH1gO1xuXG4gICAgICAgICAgICAkZmllbGQuYXR0cignaWQnLCBuZXdJRCk7XG4gICAgICAgICAgICAkbGFiZWwuYXR0cignZm9yJywgbmV3SUQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhbnMgdXAgYWZ0ZXIgYSByZXBlYXRlciBhZGQvaW5pdC5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjUuOFxuICAgICAqL1xuICAgIGZpZWxkQ2xlYW51cCgpIHtcblxuICAgICAgICBsZXQgYXBpID0gdGhpcztcblxuICAgICAgICB0aGlzLiRmaWVsZC5maW5kKCAnaW5wdXQnICkuZWFjaCggZnVuY3Rpb24oIGluZGV4LCBpbnB1dCApIHtcbiAgICAgICAgICAgIGFwaS5zZXRJbmFjdGl2ZSggalF1ZXJ5KCBpbnB1dCApLmNsb3Nlc3QoICcuZmllbGRoZWxwZXJzLWZpZWxkLXJhZGlvLXJvdycgKSApO1xuICAgICAgICB9ICk7XG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbnN1cmUgdGhhdCBvdXIgc3R5bGluZyBpcyByZWFwcGxpZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSAgIHtvYmplY3R9ICAkcmVwZWF0ZXIgIGpRdWVyeSBET00gT2JqZWN0XG4gICAgICogQHBhcmFtICAge2FycmF5fSAgb3B0aW9ucyAgICAgQXJyYXkgb2YgRmllbGQgT3B0aW9uc1xuICAgICAqXG4gICAgICogQHNpbmNlICAgMS41LjhcbiAgICAgKiBAcmV0dXJuICB2b2lkXG4gICAgICovXG4gICAgIHJlcGVhdGVyT25Jbml0KCAkcmVwZWF0ZXIsIG9wdGlvbnMgKSB7XG5cbiAgICAgICAgdGhpcy5pbml0RmllbGQoKTtcblxuICAgIH1cbiAgICBcbiAgICAvKipcbiAgICAgKiBSdW5zIGNsZWFudXAgYmVmb3JlIHRoZSBSZXBlYXRlciBjcmVhdGVzIGEgZHVtbXkgcm93IHRvIGNsZWFyIG91dCBzZWxlY3RlZCBpdGVtc1xuICAgICAqXG4gICAgICogQHBhcmFtICAge29iamVjdH0gICRyZXBlYXRlciAgalF1ZXJ5IERPTSBPYmplY3RcbiAgICAgKiBAcGFyYW0gICB7YXJyYXl9ICBvcHRpb25zICAgICBBcnJheSBvZiBGaWVsZCBPcHRpb25zXG4gICAgICpcbiAgICAgKiBAc2luY2UgICAxLjUuOFxuICAgICAqIEByZXR1cm4gIHZvaWRcbiAgICAgKi9cbiAgICByZXBlYXRlckJlZm9yZUluaXQoICRyZXBlYXRlciwgb3B0aW9ucyApIHtcblxuICAgICAgICB0aGlzLmZpZWxkQ2xlYW51cCgpO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZmllbGQgdG8gZGVmYXVsdC5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqL1xuICAgIHNldERlZmF1bHQoKSB7XG5cbiAgICAgICAgaWYgKCB0aGlzLm9wdGlvbnMuZGVmYXVsdCApIHtcblxuICAgICAgICAgICAgdGhpcy4kZmllbGQuZmluZChgW3ZhbHVlPVwiJHt0aGlzLm9wdGlvbnMuZGVmYXVsdH1cIl1gKS5wcm9wKCdjaGVja2VkJywgdHJ1ZSkuY2hhbmdlKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogRmluZHMgYW5kIGluaXRpYWxpemVzIGFsbCBSYWRpbyBmaWVsZHMuXG4gKlxuICogQHNpbmNlIDEuNC4wXG4gKi9cbmNsYXNzIEZpZWxkUmFkaW9Jbml0aWFsaXplIHtcblxuICAgIC8qKlxuICAgICAqIENsYXNzIGNvbnN0cnVjdG9yLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2pRdWVyeX0gJHJvb3QgUm9vdCBlbGVtZW50IHRvIGluaXRpYWxpemUgZmllbGRzIGluc2lkZS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcigkcm9vdCkge1xuXG4gICAgICAgIGNvbnN0IGFwaSA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5maWVsZHMgPSBbXTtcblxuICAgICAgICBsZXQgJGZpZWxkcyA9ICRyb290LmZpbmQoJ1tkYXRhLWZpZWxkaGVscGVycy1maWVsZC1yYWRpb10nKTtcblxuICAgICAgICBpZiAoICRmaWVsZHMubGVuZ3RoICkge1xuXG4gICAgICAgICAgICAkZmllbGRzLmVhY2goZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgYXBpLmluaXRpYWxpemVGaWVsZChqUXVlcnkodGhpcykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplcyB0aGUgZmllbGQuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMS40LjBcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7alF1ZXJ5fSAkZmllbGRcbiAgICAgKi9cbiAgICBpbml0aWFsaXplRmllbGQoJGZpZWxkKSB7XG5cbiAgICAgICAgdGhpcy5maWVsZHMucHVzaCh7XG4gICAgICAgICAgICAkZmllbGQsXG4gICAgICAgICAgICBhcGk6IG5ldyBGaWVsZFJhZGlvKCRmaWVsZCksXG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRmllbGRSYWRpb0luaXRpYWxpemU7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vYXNzZXRzL3NyYy9qcy9hZG1pbi9maWVsZHMvZmllbGQtcmFkaW8uanMiLCJpbXBvcnQgRmllbGQgZnJvbSAnLi9maWVsZC5qcyc7XG5cbi8qKlxuICogVG9nZ2xlIEZpZWxkIGZ1bmN0aW9uYWxpdHkuXG4gKlxuICogQHNpbmNlIDEuNC4wXG4gKi9cbmNsYXNzIEZpZWxkVG9nZ2xlIGV4dGVuZHMgRmllbGQge1xuXG4gICAgLyoqXG4gICAgICogQ2xhc3MgY29uc3RydWN0b3IuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMS40LjBcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcigkZmllbGQpIHtcblxuICAgICAgICBzdXBlcigkZmllbGQsICd0b2dnbGUnKTtcblxuICAgICAgICB0aGlzLmluaXRGaWVsZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemVzIHRoZSBzZWxlY3QuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMS40LjBcbiAgICAgKi9cbiAgICBpbml0RmllbGQoKSB7XG5cbiAgICAgICAgdGhpcy5nZXRVSSgpO1xuXG4gICAgICAgIC8vIEluaXRpYWwgY2hhbmdlIHRyaWdnZXIgdG8gaGVscCBvdGhlciBwbHVnaW5zXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy4kZmllbGQudHJpZ2dlcignY2hhbmdlJywgW3RoaXMuJHVpLmlucHV0LnZhbCgpXSk7XG4gICAgICAgIH0sIDEpO1xuXG4gICAgICAgIHRoaXMuc2V0dXBIYW5kbGVycygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgVUkuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMS40LjBcbiAgICAgKi9cbiAgICBnZXRVSSgpIHtcblxuICAgICAgICB0aGlzLiR1aSA9IHtcbiAgICAgICAgICAgIHNsaWRlcjogdGhpcy4kZmllbGQuZmluZCgnLmZpZWxkaGVscGVycy1maWVsZC10b2dnbGUtc2xpZGVyJyksXG4gICAgICAgICAgICBpbnB1dDogdGhpcy4kZmllbGQuZmluZCgnaW5wdXRbdHlwZT1cImhpZGRlblwiXScpLFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB1cCBjbGFzcyBoYW5kbGVycy5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqL1xuICAgIHNldHVwSGFuZGxlcnMoKSB7XG5cbiAgICAgICAgY29uc3QgYXBpID0gdGhpcztcblxuICAgICAgICB0aGlzLiR1aS5zbGlkZXIuY2xpY2soKCkgPT4ge1xuICAgICAgICAgICAgYXBpLmhhbmRsZUNsaWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBpZiBmaWVsZCBpcyBjaGVja2VkIG9yIG5vdC5cbiAgICAgKlxuICAgICAqIEBzaW5jZSAxLjQuMFxuICAgICAqXG4gICAgICogQHJldHVybnMgeyp9XG4gICAgICovXG4gICAgaXNDaGVja2VkKCkge1xuXG4gICAgICAgIHJldHVybiB0aGlzLiRmaWVsZC5oYXNDbGFzcygnY2hlY2tlZCcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpcmVzIG9uIHRvZ2dsZSBjaGFuZ2UuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMS40LjBcbiAgICAgKi9cbiAgICBoYW5kbGVDbGljaygpIHtcblxuICAgICAgICBpZiAoIHRoaXMuaXNDaGVja2VkKCkgKSB7XG5cbiAgICAgICAgICAgIHRoaXMuJHVpLmlucHV0LnZhbCh0aGlzLm9wdGlvbnMudW5jaGVja2VkVmFsdWUpO1xuICAgICAgICAgICAgdGhpcy4kZmllbGQucmVtb3ZlQ2xhc3MoJ2NoZWNrZWQnKTtcblxuICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICB0aGlzLiR1aS5pbnB1dC52YWwodGhpcy5vcHRpb25zLmNoZWNrZWRWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLiRmaWVsZC5hZGRDbGFzcygnY2hlY2tlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy4kZmllbGQudHJpZ2dlcignY2hhbmdlJywgW3RoaXMuJHVpLmlucHV0LnZhbCgpXSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEZpbmRzIGFuZCBpbml0aWFsaXplcyBhbGwgVG9nZ2xlIGZpZWxkcy5cbiAqXG4gKiBAc2luY2UgMS40LjBcbiAqL1xuY2xhc3MgRmllbGRUb2dnbGVJbml0aWFsaXplIHtcblxuICAgIC8qKlxuICAgICAqIENsYXNzIGNvbnN0cnVjdG9yLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2pRdWVyeX0gJHJvb3QgUm9vdCBlbGVtZW50IHRvIGluaXRpYWxpemUgZmllbGRzIGluc2lkZS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcigkcm9vdCkge1xuXG4gICAgICAgIGNvbnN0IGFwaSA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5maWVsZHMgPSBbXTtcblxuICAgICAgICBsZXQgJGZpZWxkcyA9ICRyb290LmZpbmQoJ1tkYXRhLWZpZWxkaGVscGVycy1maWVsZC10b2dnbGVdJyk7XG5cbiAgICAgICAgaWYgKCAkZmllbGRzLmxlbmd0aCApIHtcblxuICAgICAgICAgICAgJGZpZWxkcy5lYWNoKGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGFwaS5pbml0aWFsaXplRmllbGQoalF1ZXJ5KHRoaXMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZXMgdGhlIGZpZWxkLlxuICAgICAqXG4gICAgICogQHNpbmNlIDEuNC4wXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2pRdWVyeX0gJGZpZWxkXG4gICAgICovXG4gICAgaW5pdGlhbGl6ZUZpZWxkKCRmaWVsZCkge1xuXG4gICAgICAgIHRoaXMuZmllbGRzLnB1c2goe1xuICAgICAgICAgICAgJGZpZWxkLFxuICAgICAgICAgICAgYXBpOiBuZXcgRmllbGRUb2dnbGUoJGZpZWxkKSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBGaWVsZFRvZ2dsZUluaXRpYWxpemU7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vYXNzZXRzL3NyYy9qcy9hZG1pbi9maWVsZHMvZmllbGQtdG9nZ2xlLmpzIl0sInNvdXJjZVJvb3QiOiIifQ=="} \ No newline at end of file diff --git a/assets/dist/js/rbm-field-helpers-admin.min.js b/assets/dist/js/rbm-field-helpers-admin.min.js index 060c931..76b4246 100644 --- a/assets/dist/js/rbm-field-helpers-admin.min.js +++ b/assets/dist/js/rbm-field-helpers-admin.min.js @@ -1,2 +1 @@ -!function(e){function t(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var n={};t.m=e,t.c=n,t.d=function(e,n,i){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:i})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=2)}([function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(null===t&&(t=jQuery('.fieldhelpers-field[data-fieldhelpers-name="'+e+'"]').data("fieldhelpers-instance")),null===n){var r=jQuery('.fieldhelpers-field[data-fieldhelpers-name="'+e+'"][data-fieldhelpers-instance="'+t+'"]').first().attr("class"),a=/fieldhelpers-field-(\S*)/.exec(r);null!==a&&a[1].length>0&&(n=a[1])}try{return RBM_FieldHelpers[t].fieldObjects[n][e]}catch(r){return(null===t||null===n||void 0===RBM_FieldHelpers[t]||void 0===RBM_FieldHelpers[t].fieldObjects||void 0===RBM_FieldHelpers[t].fieldObjects[n]||void 0===RBM_FieldHelpers[t].fieldObjects[n][e]||i(RBM_FieldHelpers[t].fieldObjects[n][e].length)<0)&&console.error('Field Helpers Error: Field Object for "'+e+'" Not Found'),!1}}},function(e,t,n){"use strict";!function(e){var t=function(e){return e},n=function(t){return e.isArray(t)},i=function(e){return!n(e)&&e instanceof Object},r=function(t,n){return e.inArray(n,t)},a=function(e,t){return-1!==r(e,t)},o=function(e,t){for(var n in e)e.hasOwnProperty(n)&&t(e[n],n,e)},l=function(e){return e[e.length-1]},s=function(e){return Array.prototype.slice.call(e)},u=function(){var e={};return o(s(arguments),function(t){o(t,function(t,n){e[n]=t})}),e},c=function(e,t){var n=[];return o(e,function(e,i,r){n.push(t(e,i,r))}),n},f=function(e,t,n){var i={};return o(e,function(e,r,a){r=n?n(r,e):r,i[r]=t(e,r,a)}),i},d=function(e,t,i){return n(e)?c(e,t):f(e,t,i)},p=function(e,t){return d(e,function(e){return e[t]})},h=function(e,t){var i;return n(e)?(i=[],o(e,function(e,n,r){t(e,n,r)&&i.push(e)})):(i={},o(e,function(e,n,r){t(e,n,r)&&(i[n]=e)})),i},m=function(e,t,n){return d(e,function(e,i){return e[t].apply(e,n||[])})},g=function(e){var t={};return(e=e||{}).publish=function(e,n){o(t[e],function(e){e(n)})},e.subscribe=function(e,n){t[e]=t[e]||[],t[e].push(n)},e.unsubscribe=function(e){o(t,function(t){var n=r(t,e);-1!==n&&t.splice(n,1)})},e};!function(e){var t=function(e,t){var n=g(),i=e.$;return n.getType=function(){throw'implement me (return type. "text", "radio", etc.)'},n.$=function(e){return e?i.find(e):i},n.disable=function(){n.$().prop("disabled",!0),n.publish("isEnabled",!1)},n.enable=function(){n.$().prop("disabled",!1),n.publish("isEnabled",!0)},t.equalTo=function(e,t){return e===t},t.publishChange=function(){var e;return function(i,r){var a=n.get();t.equalTo(a,e)||n.publish("change",{e:i,domElement:r}),e=a}}(),n},s=function(e,n){var i=t(e,n);return i.get=function(){return i.$().val()},i.set=function(e){i.$().val(e)},i.clear=function(){i.set("")},n.buildSetter=function(e){return function(t){e.call(i,t)}},i},u=function(e,t){e=n(e)?e:[e],t=n(t)?t:[t];var i=!0;return e.length!==t.length?i=!1:o(e,function(e){a(t,e)||(i=!1)}),i},c=function(e){var t={},n=s(e,t);return n.getType=function(){return"button"},n.$().on("change",function(e){t.publishChange(e,this)}),n},f=function(t){var i={},r=s(t,i);return r.getType=function(){return"checkbox"},r.get=function(){var t=[];return r.$().filter(":checked").each(function(){t.push(e(this).val())}),t},r.set=function(t){t=n(t)?t:[t],r.$().each(function(){e(this).prop("checked",!1)}),o(t,function(e){r.$().filter('[value="'+e+'"]').prop("checked",!0)})},i.equalTo=u,r.$().change(function(e){i.publishChange(e,this)}),r},d=function(e){var t=C(e,{});return t.getType=function(){return"email"},t},p=function(n){var i={},r=t(n,i);return r.getType=function(){return"file"},r.get=function(){return l(r.$().val().split("\\"))},r.clear=function(){this.$().each(function(){e(this).wrap("").closest("form").get(0).reset(),e(this).unwrap()})},r.$().change(function(e){i.publishChange(e,this)}),r},h=function(e){var t={},n=s(e,t);return n.getType=function(){return"hidden"},n.$().change(function(e){t.publishChange(e,this)}),n},v=function(n){var i={},r=t(n,i);return r.getType=function(){return"file[multiple]"},r.get=function(){var e,t=r.$().get(0).files||[],n=[];for(e=0;e<(t.length||0);e+=1)n.push(t[e].name);return n},r.clear=function(){this.$().each(function(){e(this).wrap("").closest("form").get(0).reset(),e(this).unwrap()})},r.$().change(function(e){i.publishChange(e,this)}),r},y=function(e){var t={},i=s(e,t);return i.getType=function(){return"select[multiple]"},i.get=function(){return i.$().val()||[]},i.set=function(e){i.$().val(""===e?[]:n(e)?e:[e])},t.equalTo=u,i.$().change(function(e){t.publishChange(e,this)}),i},b=function(e){var t=C(e,{});return t.getType=function(){return"password"},t},w=function(t){var n={},i=s(t,n);return i.getType=function(){return"radio"},i.get=function(){return i.$().filter(":checked").val()||null},i.set=function(t){t?i.$().filter('[value="'+t+'"]').prop("checked",!0):i.$().each(function(){e(this).prop("checked",!1)})},i.$().change(function(e){n.publishChange(e,this)}),i},D=function(e){var t={},n=s(e,t);return n.getType=function(){return"range"},n.$().change(function(e){t.publishChange(e,this)}),n},k=function(e){var t={},n=s(e,t);return n.getType=function(){return"select"},n.$().change(function(e){t.publishChange(e,this)}),n},C=function(e){var t={},n=s(e,t);return n.getType=function(){return"text"},n.$().on("change keyup keydown",function(e){t.publishChange(e,this)}),n},M=function(e){var t={},n=s(e,t);return n.getType=function(){return"textarea"},n.$().on("change keyup keydown",function(e){t.publishChange(e,this)}),n},O=function(e){var t=C(e,{});return t.getType=function(){return"url"},t},_=function(t){var n={},a=t.$,l=t.constructorOverride||{button:c,text:C,url:O,email:d,password:b,range:D,textarea:M,select:k,"select[multiple]":y,radio:w,checkbox:f,file:p,"file[multiple]":v,hidden:h},s=function(t,r){(i(r)?r:a.find(r)).each(function(){var i=e(this).attr("name");n[i]=l[t]({$:e(this)})})},u=function(t,s){var u=[],c=i(s)?s:a.find(s);i(s)?n[c.attr("name")]=l[t]({$:c}):(c.each(function(){-1===r(u,e(this).attr("name"))&&u.push(e(this).attr("name"))}),o(u,function(e){n[e]=l[t]({$:a.find('input[name="'+e+'"]')})}))};return a.is("input, select, textarea")?a.is('input[type="button"], button, input[type="submit"]')?s("button",a):a.is("textarea")?s("textarea",a):a.is('input[type="text"]')||a.is("input")&&!a.attr("type")?s("text",a):a.is('input[type="password"]')?s("password",a):a.is('input[type="email"]')?s("email",a):a.is('input[type="url"]')?s("url",a):a.is('input[type="range"]')?s("range",a):a.is("select")?a.is("[multiple]")?s("select[multiple]",a):s("select",a):a.is('input[type="file"]')?a.is("[multiple]")?s("file[multiple]",a):s("file",a):a.is('input[type="hidden"]')?s("hidden",a):a.is('input[type="radio"]')?u("radio",a):a.is('input[type="checkbox"]')?u("checkbox",a):s("text",a):(s("button",'input[type="button"], button, input[type="submit"]'),s("text",'input[type="text"]'),s("password",'input[type="password"]'),s("email",'input[type="email"]'),s("url",'input[type="url"]'),s("range",'input[type="range"]'),s("textarea","textarea"),s("select","select:not([multiple])"),s("select[multiple]","select[multiple]"),s("file",'input[type="file"]:not([multiple])'),s("file[multiple]",'input[type="file"][multiple]'),s("hidden",'input[type="hidden"]'),u("radio",'input[type="radio"]'),u("checkbox",'input[type="checkbox"]')),n};e.fn.inputVal=function(t){var n=e(this),i=_({$:n});return n.is("input, textarea, select")?void 0===t?i[n.attr("name")].get():(i[n.attr("name")].set(t),n):void 0===t?m(i,"get"):(o(t,function(e,t){i[t].set(e)}),n)},e.fn.inputOnChange=function(t){var n=e(this),i=_({$:n});return o(i,function(e){e.subscribe("change",function(e){t.call(e.domElement,e.e)})}),n},e.fn.inputDisable=function(){var t=e(this);return m(_({$:t}),"disable"),t},e.fn.inputEnable=function(){var t=e(this);return m(_({$:t}),"enable"),t},e.fn.inputClear=function(){var t=e(this);return m(_({$:t}),"clear"),t}}(jQuery),e.fn.repeaterVal=function(){return function e(t){if(1===t.length&&(0===t[0].key.length||1===t[0].key.length&&!t[0].key[0]))return t[0].val;o(t,function(e){e.head=e.key.shift()});var n,i=function(){var e={};return o(t,function(t){e[t.head]||(e[t.head]=[]),e[t.head].push(t)}),e}();return/^[0-9]+$/.test(t[0].head)?(n=[],o(i,function(t){n.push(e(t))})):(n={},o(i,function(t,i){n[i]=e(t)})),n}(function(e){var t=[];return o(e,function(e,n){var i=[];"undefined"!==n&&(i.push(n.match(/^[^\[]*/)[0]),i=i.concat(d(n.match(/\[[^\]]*\]/g),function(e){return e.replace(/[\[\]]/g,"")})),t.push({val:e,key:i}))}),t}(e(this).inputVal()))},e.fn.repeater=function(n){n=n||{};var i;return e(this).each(function(){var r=e(this),a=n.show||function(){e(this).show()},s=n.hide||function(e){e()},c=r.find("[data-repeater-list]").first(),f=function(t,n){return t.filter(function(){return!n||0===e(this).closest(p(n,"selector").join(",")).length})},m=function(){return f(c.find("[data-repeater-item]"),n.repeaters)},g=c.find("[data-repeater-item]").first().clone().hide(),v=f(f(e(this).find("[data-repeater-item]"),n.repeaters).first().find("[data-repeater-delete]"),n.repeaters);n.isFirstItemUndeletable&&v&&v.remove();var y=function(){var e=c.data("repeater-list");return n.$parent?n.$parent.data("item-name")+"["+e+"]":e},b=function(t){n.repeaters&&t.each(function(){var t=e(this);o(n.repeaters,function(e){t.find(e.selector).repeater(u(e,{$parent:t}))})})},w=function(e,t,n){e&&o(e,function(e){n.call(t.find(e.selector)[0],e)})},D=function t(n,i,r){n.each(function(n){var a=e(this);a.data("item-name",i+"["+n+"]"),f(a.find("[name]"),r).each(function(){var o=e(this),s=o.attr("name").match(/\[[^\]]+\]/g),u=s?l(s).replace(/\[|\]/g,""):o.attr("name"),c=i+"["+n+"]["+u+"]"+(o.is(":checkbox")||o.attr("multiple")?"[]":"");o.attr("name",c),w(r,a,function(r){var a=e(this);t(f(a.find("[data-repeater-item]"),r.repeaters||[]),i+"["+n+"]["+a.find("[data-repeater-list]").first().data("repeater-list")+"]",r.repeaters)})})}),c.find("input[name][checked]").removeAttr("checked").prop("checked",!0)};D(m(),y(),n.repeaters),b(m()),n.initEmpty&&m().remove(),n.ready&&n.ready(function(){D(m(),y(),n.repeaters)});var k=function(){var i=function i(r,a,l){if(a||n.defaultValues){var s={};f(r.find("[name]"),l).each(function(){var t=e(this).attr("name").match(/\[([^\]]*)(\]|\]\[\])$/)[1];s[t]=e(this).attr("name")}),r.inputVal(d(h(a||n.defaultValues,function(e,t){return s[t]}),t,function(e){return s[e]}))}w(l,r,function(t){var n=e(this);f(n.find("[data-repeater-item]"),t.repeaters).each(function(){var r=n.find("[data-repeater-list]").data("repeater-list");if(a&&a[r]){var l=e(this).clone();n.find("[data-repeater-item]").remove(),o(a[r],function(e){var r=l.clone();i(r,e,t.repeaters||[]),n.find("[data-repeater-list]").append(r)})}else i(e(this),t.defaultValues,t.repeaters||[])})})};return function(t,r){c.append(t),D(m(),y(),n.repeaters),t.find("[name]").each(function(){e(this).inputClear()}),i(t,r||n.defaultValues,n.repeaters)}}(),C=function(e){var t=g.clone();k(t,e),n.repeaters&&b(t),a.call(t.get(0))};i=function(e){m().remove(),o(e,C)},f(r.find("[data-repeater-create]"),n.repeaters).click(function(){C()}),c.on("click","[data-repeater-delete]",function(){var t=e(this).closest("[data-repeater-item]").get(0);s.call(t,function(){e(t).remove(),D(m(),y(),n.repeaters)})})}),this.setList=i,this}}(jQuery)},function(e,t,n){"use strict";var i,r,a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};!function(o,l){"object"===a(t)&&void 0!==e?e.exports=l():(i=l,void 0!==(r="function"==typeof i?i.call(t,n,t,e):i)&&(e.exports=r))}(0,function(){function e(e,t,n){void 0===n&&(n=!1);var i;return function(){var r=this,a=arguments;null!==i&&clearTimeout(i),i=window.setTimeout(function(){i=null,n||e.apply(r,a)},t),n&&!i&&e.apply(r,a)}}function t(e,t,n){if(!0===n)return e.classList.add(t);e.classList.remove(t)}function n(e,t,n){var i=window.document.createElement(e);return t=t||"",n=n||"",i.className=t,void 0!==n&&(i.textContent=n),i}function i(e){for(;e.firstChild;)e.removeChild(e.firstChild)}function r(e,t){return t(e)?e:e.parentNode?r(e.parentNode,t):void 0}function o(e,t){var i=n("div","numInputWrapper"),r=n("input","numInput "+e),a=n("span","arrowUp"),o=n("span","arrowDown");if(-1===navigator.userAgent.indexOf("MSIE 9.0")?r.type="number":(r.type="text",r.pattern="\\d*"),void 0!==t)for(var l in t)r.setAttribute(l,t[l]);return i.appendChild(r),i.appendChild(a),i.appendChild(o),i}function l(e){return"function"==typeof e.composedPath?e.composedPath()[0]:e.target}function s(e,t,n){return void 0===n&&(n=!0),!1!==n?new Date(e.getTime()).setHours(0,0,0,0)-new Date(t.getTime()).setHours(0,0,0,0):e.getTime()-t.getTime()}function u(u,c){function y(){Ae.utils={getDaysInMonth:function(e,t){return void 0===e&&(e=Ae.currentMonth),void 0===t&&(t=Ae.currentYear),1===e&&(t%4==0&&t%100!=0||t%400==0)?29:Ae.l10n.daysInMonth[e]}}}function w(e){return e.bind(Ae)}function k(){var e=Ae.config;!1===e.weekNumbers&&1===e.showMonths||!0!==e.noCalendar&&window.requestAnimationFrame(function(){if(void 0!==Ae.calendarContainer&&(Ae.calendarContainer.style.visibility="hidden",Ae.calendarContainer.style.display="block"),void 0!==Ae.daysContainer){var t=(Ae.days.offsetWidth+1)*e.showMonths;Ae.daysContainer.style.width=t+"px",Ae.calendarContainer.style.width=t+(void 0!==Ae.weekWrapper?Ae.weekWrapper.offsetWidth:0)+"px",Ae.calendarContainer.style.removeProperty("visibility"),Ae.calendarContainer.style.removeProperty("display")}})}function F(e){0===Ae.selectedDates.length&&me(),void 0!==e&&"blur"!==e.type&&He(e);var t=Ae._input.value;T(),Ie(),Ae._input.value!==t&&Ae._debouncedChange()}function E(e,t){return e%12+12*g(t===Ae.l10n.amPM[1])}function $(e){switch(e%24){case 0:case 12:return 12;default:return e%12}}function T(){if(void 0!==Ae.hourElement&&void 0!==Ae.minuteElement){var e=(parseInt(Ae.hourElement.value.slice(-2),10)||0)%24,t=(parseInt(Ae.minuteElement.value,10)||0)%60,n=void 0!==Ae.secondElement?(parseInt(Ae.secondElement.value,10)||0)%60:0;void 0!==Ae.amPM&&(e=E(e,Ae.amPM.textContent));var i=void 0!==Ae.config.minTime||Ae.config.minDate&&Ae.minDateHasTime&&Ae.latestSelectedDateObj&&0===s(Ae.latestSelectedDateObj,Ae.config.minDate,!0);if(void 0!==Ae.config.maxTime||Ae.config.maxDate&&Ae.maxDateHasTime&&Ae.latestSelectedDateObj&&0===s(Ae.latestSelectedDateObj,Ae.config.maxDate,!0)){var r=void 0!==Ae.config.maxTime?Ae.config.maxTime:Ae.config.maxDate;(e=Math.min(e,r.getHours()))===r.getHours()&&(t=Math.min(t,r.getMinutes())),t===r.getMinutes()&&(n=Math.min(n,r.getSeconds()))}if(i){var a=void 0!==Ae.config.minTime?Ae.config.minTime:Ae.config.minDate;(e=Math.max(e,a.getHours()))===a.getHours()&&(t=Math.max(t,a.getMinutes())),t===a.getMinutes()&&(n=Math.max(n,a.getSeconds()))}S(e,t,n)}}function P(e){var t=e||Ae.latestSelectedDateObj;t&&S(t.getHours(),t.getMinutes(),t.getSeconds())}function I(){var e=Ae.config.defaultHour,t=Ae.config.defaultMinute,n=Ae.config.defaultSeconds;if(void 0!==Ae.config.minDate){var i=Ae.config.minDate.getHours(),r=Ae.config.minDate.getMinutes();(e=Math.max(e,i))===i&&(t=Math.max(r,t)),e===i&&t===r&&(n=Ae.config.minDate.getSeconds())}if(void 0!==Ae.config.maxDate){var a=Ae.config.maxDate.getHours(),o=Ae.config.maxDate.getMinutes();(e=Math.min(e,a))===a&&(t=Math.min(o,t)),e===a&&t===o&&(n=Ae.config.maxDate.getSeconds())}S(e,t,n)}function S(e,t,n){void 0!==Ae.latestSelectedDateObj&&Ae.latestSelectedDateObj.setHours(e%24,t,n||0,0),Ae.hourElement&&Ae.minuteElement&&!Ae.isMobile&&(Ae.hourElement.value=m(Ae.config.time_24hr?e:(12+e)%12+12*g(e%12==0)),Ae.minuteElement.value=m(t),void 0!==Ae.amPM&&(Ae.amPM.textContent=Ae.l10n.amPM[g(e>=12)]),void 0!==Ae.secondElement&&(Ae.secondElement.value=m(n)))}function H(e){var t=parseInt(e.target.value)+(e.delta||0);(t/1e3>1||"Enter"===e.key&&!/[^\d]/.test(t.toString()))&&ue(t)}function A(e,t,n,i){return t instanceof Array?t.forEach(function(t){return A(e,t,n,i)}):e instanceof Array?e.forEach(function(e){return A(e,t,n,i)}):(e.addEventListener(t,n,i),void Ae._handlers.push({element:e,event:t,handler:n,options:i}))}function N(e){return function(t){1===t.which&&e(t)}}function Y(){xe("onChange")}function Q(){if(Ae.config.wrap&&["open","close","toggle","clear"].forEach(function(e){Array.prototype.forEach.call(Ae.element.querySelectorAll("[data-"+e+"]"),function(t){return A(t,"click",Ae[e])})}),Ae.isMobile)je();else{var t=e(he,50);if(Ae._debouncedChange=e(Y,j),Ae.daysContainer&&!/iPhone|iPad|iPod/i.test(navigator.userAgent)&&A(Ae.daysContainer,"mouseover",function(e){"range"===Ae.config.mode&&pe(e.target)}),A(window.document.body,"keydown",de),Ae.config.inline||Ae.config.static||A(window,"resize",t),void 0!==window.ontouchstart?A(window.document,"touchstart",se):A(window.document,"mousedown",N(se)),A(window.document,"focus",se,{capture:!0}),!0===Ae.config.clickOpens&&(A(Ae._input,"focus",Ae.open),A(Ae._input,"mousedown",N(Ae.open))),void 0!==Ae.daysContainer&&(A(Ae.monthNav,"mousedown",N(Se)),A(Ae.monthNav,["keyup","increment"],H),A(Ae.daysContainer,"mousedown",N(ke))),void 0!==Ae.timeContainer&&void 0!==Ae.minuteElement&&void 0!==Ae.hourElement){A(Ae.timeContainer,["increment"],F),A(Ae.timeContainer,"blur",F,{capture:!0}),A(Ae.timeContainer,"mousedown",N(R)),A([Ae.hourElement,Ae.minuteElement],["focus","click"],function(e){return e.target.select()}),void 0!==Ae.secondElement&&A(Ae.secondElement,"focus",function(){return Ae.secondElement&&Ae.secondElement.select()}),void 0!==Ae.amPM&&A(Ae.amPM,"mousedown",N(function(e){F(e),Y()}))}}}function L(e,t){var n=void 0!==e?Ae.parseDate(e):Ae.latestSelectedDateObj||(Ae.config.minDate&&Ae.config.minDate>Ae.now?Ae.config.minDate:Ae.config.maxDate&&Ae.config.maxDate1),Ae.calendarContainer.appendChild(e);var o=void 0!==Ae.config.appendTo&&void 0!==Ae.config.appendTo.nodeType;if((Ae.config.inline||Ae.config.static)&&(Ae.calendarContainer.classList.add(Ae.config.inline?"inline":"static"),Ae.config.inline&&(!o&&Ae.element.parentNode?Ae.element.parentNode.insertBefore(Ae.calendarContainer,Ae._input.nextSibling):void 0!==Ae.config.appendTo&&Ae.config.appendTo.appendChild(Ae.calendarContainer)),Ae.config.static)){var l=n("div","flatpickr-wrapper");Ae.element.parentNode&&Ae.element.parentNode.insertBefore(l,Ae.element),l.appendChild(Ae.element),Ae.altInput&&l.appendChild(Ae.altInput),l.appendChild(Ae.calendarContainer)}Ae.config.static||Ae.config.inline||(void 0!==Ae.config.appendTo?Ae.config.appendTo:window.document.body).appendChild(Ae.calendarContainer)}function U(e,i,r,a){var o=ce(i,!0),l=n("span","flatpickr-day "+e,i.getDate().toString());return l.dateObj=i,l.$i=a,l.setAttribute("aria-label",Ae.formatDate(i,Ae.config.ariaDateFormat)),-1===e.indexOf("hidden")&&0===s(i,Ae.now)&&(Ae.todayDateElem=l,l.classList.add("today"),l.setAttribute("aria-current","date")),o?(l.tabIndex=-1,Ee(i)&&(l.classList.add("selected"),Ae.selectedDateElem=l,"range"===Ae.config.mode&&(t(l,"startRange",Ae.selectedDates[0]&&0===s(i,Ae.selectedDates[0],!0)),t(l,"endRange",Ae.selectedDates[1]&&0===s(i,Ae.selectedDates[1],!0)),"nextMonthDay"===e&&l.classList.add("inRange")))):l.classList.add("flatpickr-disabled"),"range"===Ae.config.mode&&$e(i)&&!Ee(i)&&l.classList.add("inRange"),Ae.weekNumbers&&1===Ae.config.showMonths&&"prevMonthDay"!==e&&r%7==1&&Ae.weekNumbers.insertAdjacentHTML("beforeend",""+Ae.config.getWeek(i)+""),xe("onDayCreate",l),l}function W(e){e.focus(),"range"===Ae.config.mode&&pe(e)}function q(e){for(var t=e>0?0:Ae.config.showMonths-1,n=e>0?Ae.config.showMonths:-1,i=t;i!=n;i+=e)for(var r=Ae.daysContainer.children[i],a=e>0?0:r.children.length-1,o=e>0?r.children.length:-1,l=a;l!=o;l+=e){var s=r.children[l];if(-1===s.className.indexOf("hidden")&&ce(s.dateObj))return s}}function K(e,t){for(var n=-1===e.className.indexOf("Month")?e.dateObj.getMonth():Ae.currentMonth,i=t>0?Ae.config.showMonths:-1,r=t>0?1:-1,a=n-Ae.currentMonth;a!=i;a+=r)for(var o=Ae.daysContainer.children[a],l=n-Ae.currentMonth===a?e.$i+t:t<0?o.children.length-1:0,s=o.children.length,u=l;u>=0&&u0?s:-1);u+=r){var c=o.children[u];if(-1===c.className.indexOf("hidden")&&ce(c.dateObj)&&Math.abs(e.$i-u)>=Math.abs(t))return W(c)}Ae.changeMonth(r),V(q(r),0)}function V(e,t){var n=fe(document.activeElement||document.body),i=void 0!==e?e:n?document.activeElement:void 0!==Ae.selectedDateElem&&fe(Ae.selectedDateElem)?Ae.selectedDateElem:void 0!==Ae.todayDateElem&&fe(Ae.todayDateElem)?Ae.todayDateElem:q(t>0?1:-1);return void 0===i?Ae._input.focus():n?void K(i,t):W(i)}function J(e,t){for(var i=(new Date(e,t,1).getDay()-Ae.l10n.firstDayOfWeek+7)%7,r=Ae.utils.getDaysInMonth((t-1+12)%12),a=Ae.utils.getDaysInMonth(t),o=window.document.createDocumentFragment(),l=Ae.config.showMonths>1,s=l?"prevMonthDay hidden":"prevMonthDay",u=l?"nextMonthDay hidden":"nextMonthDay",c=r+1-i,f=0;c<=r;c++,f++)o.appendChild(U(s,new Date(e,t-1,c),c,f));for(c=1;c<=a;c++,f++)o.appendChild(U("",new Date(e,t,c),c,f));for(var d=a+1;d<=42-i&&(1===Ae.config.showMonths||f%7!=0);d++,f++)o.appendChild(U(u,new Date(e,t+1,d%a),d,f));var p=n("div","dayContainer");return p.appendChild(o),p}function G(){if(void 0!==Ae.daysContainer){i(Ae.daysContainer),Ae.weekNumbers&&i(Ae.weekNumbers);for(var e=document.createDocumentFragment(),t=0;t1||"dropdown"!==Ae.config.monthSelectorType)){Ae.monthsDropdownContainer.tabIndex=-1,Ae.monthsDropdownContainer.innerHTML="";for(var e=0;e<12;e++)if(function(e){return!(void 0!==Ae.config.minDate&&Ae.currentYear===Ae.config.minDate.getFullYear()&&eAe.config.maxDate.getMonth())}(e)){var t=n("option","flatpickr-monthDropdown-month");t.value=new Date(Ae.currentYear,e).getMonth().toString(),t.textContent=b(e,Ae.config.shorthandCurrentMonth,Ae.l10n),t.tabIndex=-1,Ae.currentMonth===e&&(t.selected=!0),Ae.monthsDropdownContainer.appendChild(t)}}}function X(){var e,t=n("div","flatpickr-month"),i=window.document.createDocumentFragment();Ae.config.showMonths>1||"static"===Ae.config.monthSelectorType?e=n("span","cur-month"):(Ae.monthsDropdownContainer=n("select","flatpickr-monthDropdown-months"),A(Ae.monthsDropdownContainer,"change",function(e){var t=e.target,n=parseInt(t.value,10);Ae.changeMonth(n-Ae.currentMonth),xe("onMonthChange")}),Z(),e=Ae.monthsDropdownContainer);var r=o("cur-year",{tabindex:"-1"}),a=r.getElementsByTagName("input")[0];a.setAttribute("aria-label",Ae.l10n.yearAriaLabel),Ae.config.minDate&&a.setAttribute("min",Ae.config.minDate.getFullYear().toString()),Ae.config.maxDate&&(a.setAttribute("max",Ae.config.maxDate.getFullYear().toString()),a.disabled=!!Ae.config.minDate&&Ae.config.minDate.getFullYear()===Ae.config.maxDate.getFullYear());var l=n("div","flatpickr-current-month");return l.appendChild(e),l.appendChild(r),i.appendChild(l),t.appendChild(i),{container:t,yearElement:a,monthElement:e}}function ee(){i(Ae.monthNav),Ae.monthNav.appendChild(Ae.prevMonthNav),Ae.config.showMonths&&(Ae.yearElements=[],Ae.monthElements=[]);for(var e=Ae.config.showMonths;e--;){var t=X();Ae.yearElements.push(t.yearElement),Ae.monthElements.push(t.monthElement),Ae.monthNav.appendChild(t.container)}Ae.monthNav.appendChild(Ae.nextMonthNav)}function te(){return Ae.monthNav=n("div","flatpickr-months"),Ae.yearElements=[],Ae.monthElements=[],Ae.prevMonthNav=n("span","flatpickr-prev-month"),Ae.prevMonthNav.innerHTML=Ae.config.prevArrow,Ae.nextMonthNav=n("span","flatpickr-next-month"),Ae.nextMonthNav.innerHTML=Ae.config.nextArrow,ee(),Object.defineProperty(Ae,"_hidePrevMonthArrow",{get:function(){return Ae.__hidePrevMonthArrow},set:function(e){Ae.__hidePrevMonthArrow!==e&&(t(Ae.prevMonthNav,"flatpickr-disabled",e),Ae.__hidePrevMonthArrow=e)}}),Object.defineProperty(Ae,"_hideNextMonthArrow",{get:function(){return Ae.__hideNextMonthArrow},set:function(e){Ae.__hideNextMonthArrow!==e&&(t(Ae.nextMonthNav,"flatpickr-disabled",e),Ae.__hideNextMonthArrow=e)}}),Ae.currentYearElement=Ae.yearElements[0],Te(),Ae.monthNav}function ne(){Ae.calendarContainer.classList.add("hasTime"),Ae.config.noCalendar&&Ae.calendarContainer.classList.add("noCalendar"),Ae.timeContainer=n("div","flatpickr-time"),Ae.timeContainer.tabIndex=-1;var e=n("span","flatpickr-time-separator",":"),t=o("flatpickr-hour",{"aria-label":Ae.l10n.hourAriaLabel});Ae.hourElement=t.getElementsByTagName("input")[0];var i=o("flatpickr-minute",{"aria-label":Ae.l10n.minuteAriaLabel});if(Ae.minuteElement=i.getElementsByTagName("input")[0],Ae.hourElement.tabIndex=Ae.minuteElement.tabIndex=-1,Ae.hourElement.value=m(Ae.latestSelectedDateObj?Ae.latestSelectedDateObj.getHours():Ae.config.time_24hr?Ae.config.defaultHour:$(Ae.config.defaultHour)),Ae.minuteElement.value=m(Ae.latestSelectedDateObj?Ae.latestSelectedDateObj.getMinutes():Ae.config.defaultMinute),Ae.hourElement.setAttribute("step",Ae.config.hourIncrement.toString()),Ae.minuteElement.setAttribute("step",Ae.config.minuteIncrement.toString()),Ae.hourElement.setAttribute("min",Ae.config.time_24hr?"0":"1"),Ae.hourElement.setAttribute("max",Ae.config.time_24hr?"23":"12"),Ae.minuteElement.setAttribute("min","0"),Ae.minuteElement.setAttribute("max","59"),Ae.timeContainer.appendChild(t),Ae.timeContainer.appendChild(e),Ae.timeContainer.appendChild(i),Ae.config.time_24hr&&Ae.timeContainer.classList.add("time24hr"),Ae.config.enableSeconds){Ae.timeContainer.classList.add("hasSeconds");var r=o("flatpickr-second");Ae.secondElement=r.getElementsByTagName("input")[0],Ae.secondElement.value=m(Ae.latestSelectedDateObj?Ae.latestSelectedDateObj.getSeconds():Ae.config.defaultSeconds),Ae.secondElement.setAttribute("step",Ae.minuteElement.getAttribute("step")),Ae.secondElement.setAttribute("min","0"),Ae.secondElement.setAttribute("max","59"),Ae.timeContainer.appendChild(n("span","flatpickr-time-separator",":")),Ae.timeContainer.appendChild(r)}return Ae.config.time_24hr||(Ae.amPM=n("span","flatpickr-am-pm",Ae.l10n.amPM[g((Ae.latestSelectedDateObj?Ae.hourElement.value:Ae.config.defaultHour)>11)]),Ae.amPM.title=Ae.l10n.toggleTitle,Ae.amPM.tabIndex=-1,Ae.timeContainer.appendChild(Ae.amPM)),Ae.timeContainer}function ie(){Ae.weekdayContainer?i(Ae.weekdayContainer):Ae.weekdayContainer=n("div","flatpickr-weekdays");for(var e=Ae.config.showMonths;e--;){var t=n("div","flatpickr-weekdaycontainer");Ae.weekdayContainer.appendChild(t)}return re(),Ae.weekdayContainer}function re(){var e=Ae.l10n.firstDayOfWeek,t=Ae.l10n.weekdays.shorthand.slice();e>0&&e\n "+t.join("")+"\n \n "}function ae(){Ae.calendarContainer.classList.add("hasWeeks");var e=n("div","flatpickr-weekwrapper");e.appendChild(n("span","flatpickr-weekday",Ae.l10n.weekAbbreviation));var t=n("div","flatpickr-weeks");return e.appendChild(t),{weekWrapper:e,weekNumbers:t}}function oe(e,t){void 0===t&&(t=!0);var n=t?e:e-Ae.currentMonth;n<0&&!0===Ae._hidePrevMonthArrow||n>0&&!0===Ae._hideNextMonthArrow||(Ae.currentMonth+=n,(Ae.currentMonth<0||Ae.currentMonth>11)&&(Ae.currentYear+=Ae.currentMonth>11?1:-1,Ae.currentMonth=(Ae.currentMonth+12)%12,xe("onYearChange"),Z()),G(),xe("onMonthChange"),Te())}function le(e){return!(!Ae.config.appendTo||!Ae.config.appendTo.contains(e))||Ae.calendarContainer.contains(e)}function se(e){if(Ae.isOpen&&!Ae.config.inline){var t=l(e),n=le(t),i=t===Ae.input||t===Ae.altInput||Ae.element.contains(t)||e.path&&e.path.indexOf&&(~e.path.indexOf(Ae.input)||~e.path.indexOf(Ae.altInput)),r="blur"===e.type?i&&e.relatedTarget&&!le(e.relatedTarget):!i&&!n&&!le(e.relatedTarget),a=!Ae.config.ignoredFocusElements.some(function(e){return e.contains(t)});r&&a&&(Ae.close(),"range"===Ae.config.mode&&1===Ae.selectedDates.length&&(Ae.clear(!1),Ae.redraw()))}}function ue(e){if(!(!e||Ae.config.minDate&&eAe.config.maxDate.getFullYear())){var t=e,n=Ae.currentYear!==t;Ae.currentYear=t||Ae.currentYear,Ae.config.maxDate&&Ae.currentYear===Ae.config.maxDate.getFullYear()?Ae.currentMonth=Math.min(Ae.config.maxDate.getMonth(),Ae.currentMonth):Ae.config.minDate&&Ae.currentYear===Ae.config.minDate.getFullYear()&&(Ae.currentMonth=Math.max(Ae.config.minDate.getMonth(),Ae.currentMonth)),n&&(Ae.redraw(),xe("onYearChange"),Z())}}function ce(e,t){void 0===t&&(t=!0);var n=Ae.parseDate(e,void 0,t);if(Ae.config.minDate&&n&&s(n,Ae.config.minDate,void 0!==t?t:!Ae.minDateHasTime)<0||Ae.config.maxDate&&n&&s(n,Ae.config.maxDate,void 0!==t?t:!Ae.maxDateHasTime)>0)return!1;if(0===Ae.config.enable.length&&0===Ae.config.disable.length)return!0;if(void 0===n)return!1;for(var i=Ae.config.enable.length>0,r=i?Ae.config.enable:Ae.config.disable,o=0,l=void 0;o=l.from.getTime()&&n.getTime()<=l.to.getTime())return i}return!i}function fe(e){return void 0!==Ae.daysContainer&&(-1===e.className.indexOf("hidden")&&Ae.daysContainer.contains(e))}function de(e){var t=e.target===Ae._input,n=Ae.config.allowInput,i=Ae.isOpen&&(!n||!t),r=Ae.config.inline&&t&&!n;if(13===e.keyCode&&t){if(n)return Ae.setDate(Ae._input.value,!0,e.target===Ae.altInput?Ae.config.altFormat:Ae.config.dateFormat),e.target.blur();Ae.open()}else if(le(e.target)||i||r){var a=!!Ae.timeContainer&&Ae.timeContainer.contains(e.target);switch(e.keyCode){case 13:a?(e.preventDefault(),F(),De()):ke(e);break;case 27:e.preventDefault(),De();break;case 8:case 46:t&&!Ae.config.allowInput&&(e.preventDefault(),Ae.clear());break;case 37:case 39:if(a||t)Ae.hourElement&&Ae.hourElement.focus();else if(e.preventDefault(),void 0!==Ae.daysContainer&&(!1===n||document.activeElement&&fe(document.activeElement))){var o=39===e.keyCode?1:-1;e.ctrlKey?(e.stopPropagation(),oe(o),V(q(1),0)):V(void 0,o)}break;case 38:case 40:e.preventDefault();var l=40===e.keyCode?1:-1;Ae.daysContainer&&void 0!==e.target.$i||e.target===Ae.input?e.ctrlKey?(e.stopPropagation(),ue(Ae.currentYear-l),V(q(1),0)):a||V(void 0,7*l):e.target===Ae.currentYearElement?ue(Ae.currentYear-l):Ae.config.enableTime&&(!a&&Ae.hourElement&&Ae.hourElement.focus(),F(e),Ae._debouncedChange());break;case 9:if(a){var s=[Ae.hourElement,Ae.minuteElement,Ae.secondElement,Ae.amPM].concat(Ae.pluginElements).filter(function(e){return e}),u=s.indexOf(e.target);if(-1!==u){var c=s[u+(e.shiftKey?-1:1)];e.preventDefault(),(c||Ae._input).focus()}}else!Ae.config.noCalendar&&Ae.daysContainer&&Ae.daysContainer.contains(e.target)&&e.shiftKey&&(e.preventDefault(),Ae._input.focus())}}if(void 0!==Ae.amPM&&e.target===Ae.amPM)switch(e.key){case Ae.l10n.amPM[0].charAt(0):case Ae.l10n.amPM[0].charAt(0).toLowerCase():Ae.amPM.textContent=Ae.l10n.amPM[0],T(),Ie();break;case Ae.l10n.amPM[1].charAt(0):case Ae.l10n.amPM[1].charAt(0).toLowerCase():Ae.amPM.textContent=Ae.l10n.amPM[1],T(),Ie()}(t||le(e.target))&&xe("onKeyDown",e)}function pe(e){if(1===Ae.selectedDates.length&&(!e||e.classList.contains("flatpickr-day")&&!e.classList.contains("flatpickr-disabled"))){for(var t=e?e.dateObj.getTime():Ae.days.firstElementChild.dateObj.getTime(),n=Ae.parseDate(Ae.selectedDates[0],void 0,!0).getTime(),i=Math.min(t,Ae.selectedDates[0].getTime()),r=Math.max(t,Ae.selectedDates[0].getTime()),a=!1,o=0,l=0,s=i;si&&so)?o=s:s>n&&(!l||s0&&u0&&u>l;f?(s.classList.add("notAllowed"),["inRange","startRange","endRange"].forEach(function(e){s.classList.remove(e)})):a&&!f||(["startRange","inRange","endRange","notAllowed"].forEach(function(e){s.classList.remove(e)}),void 0!==e&&(e.classList.add(t<=Ae.selectedDates[0].getTime()?"startRange":"endRange"),nt&&u===n&&s.classList.add("endRange"),u>=o&&(0===l||u<=l)&&O(u,n,t)&&s.classList.add("inRange")))}(f)}}function he(){!Ae.isOpen||Ae.config.static||Ae.config.inline||be()}function me(){Ae.setDate(void 0!==Ae.config.minDate?new Date(Ae.config.minDate.getTime()):new Date,!0),I(),Ie()}function ge(e){return function(t){var n=Ae.config["_"+e+"Date"]=Ae.parseDate(t,Ae.config.dateFormat),i=Ae.config["_"+("min"===e?"max":"min")+"Date"];void 0!==n&&(Ae["min"===e?"minDateHasTime":"maxDateHasTime"]=n.getHours()>0||n.getMinutes()>0||n.getSeconds()>0),Ae.selectedDates&&(Ae.selectedDates=Ae.selectedDates.filter(function(e){return ce(e)}),Ae.selectedDates.length||"min"!==e||P(n),Ie()),Ae.daysContainer&&(we(),void 0!==n?Ae.currentYearElement[e]=n.getFullYear().toString():Ae.currentYearElement.removeAttribute(e),Ae.currentYearElement.disabled=!!i&&void 0!==n&&i.getFullYear()===n.getFullYear())}}function ve(){var e=["wrap","weekNumbers","allowInput","clickOpens","time_24hr","enableTime","noCalendar","altInput","shorthandCurrentMonth","inline","static","enableSeconds","disableMobile"],t=f({},c,JSON.parse(JSON.stringify(u.dataset||{}))),n={};Ae.config.parseDate=t.parseDate,Ae.config.formatDate=t.formatDate,Object.defineProperty(Ae.config,"enable",{get:function(){return Ae.config._enable},set:function(e){Ae.config._enable=Me(e)}}),Object.defineProperty(Ae.config,"disable",{get:function(){return Ae.config._disable},set:function(e){Ae.config._disable=Me(e)}});var i="time"===t.mode;if(!t.dateFormat&&(t.enableTime||i)){var r=x.defaultConfig.dateFormat||p.dateFormat;n.dateFormat=t.noCalendar||i?"H:i"+(t.enableSeconds?":S":""):r+" H:i"+(t.enableSeconds?":S":"")}if(t.altInput&&(t.enableTime||i)&&!t.altFormat){var a=x.defaultConfig.altFormat||p.altFormat;n.altFormat=t.noCalendar||i?"h:i"+(t.enableSeconds?":S K":" K"):a+" h:i"+(t.enableSeconds?":S":"")+" K"}t.altInputClass||(Ae.config.altInputClass=Ae.input.className+" "+Ae.config.altInputClass),Object.defineProperty(Ae.config,"minDate",{get:function(){return Ae.config._minDate},set:ge("min")}),Object.defineProperty(Ae.config,"maxDate",{get:function(){return Ae.config._maxDate},set:ge("max")});var o=function(e){return function(t){Ae.config["min"===e?"_minTime":"_maxTime"]=Ae.parseDate(t,"H:i")}};Object.defineProperty(Ae.config,"minTime",{get:function(){return Ae.config._minTime},set:o("min")}),Object.defineProperty(Ae.config,"maxTime",{get:function(){return Ae.config._maxTime},set:o("max")}),"time"===t.mode&&(Ae.config.noCalendar=!0,Ae.config.enableTime=!0),Object.assign(Ae.config,n,t);for(l=0;l-1?Ae.config[h]=v(s[h]).map(w).concat(Ae.config[h]):void 0===t[h]&&(Ae.config[h]=s[h])}xe("onParseConfig")}function ye(){"object"!==a(Ae.config.locale)&&void 0===x.l10ns[Ae.config.locale]&&Ae.config.errorHandler(new Error("flatpickr: invalid locale "+Ae.config.locale)),Ae.l10n=f({},x.l10ns.default,"object"===a(Ae.config.locale)?Ae.config.locale:"default"!==Ae.config.locale?x.l10ns[Ae.config.locale]:void 0),D.K="("+Ae.l10n.amPM[0]+"|"+Ae.l10n.amPM[1]+"|"+Ae.l10n.amPM[0].toLowerCase()+"|"+Ae.l10n.amPM[1].toLowerCase()+")",void 0===f({},c,JSON.parse(JSON.stringify(u.dataset||{}))).time_24hr&&void 0===x.defaultConfig.time_24hr&&(Ae.config.time_24hr=Ae.l10n.time_24hr),Ae.formatDate=C(Ae),Ae.parseDate=M({config:Ae.config,l10n:Ae.l10n})}function be(e){if(void 0!==Ae.calendarContainer){xe("onPreCalendarPosition");var n=e||Ae._positionElement,i=Array.prototype.reduce.call(Ae.calendarContainer.children,function(e,t){return e+t.offsetHeight},0),r=Ae.calendarContainer.offsetWidth,a=Ae.config.position.split(" "),o=a[0],l=a.length>1?a[1]:null,s=n.getBoundingClientRect(),u=window.innerHeight-s.bottom,c="above"===o||"below"!==o&&ui,f=window.pageYOffset+s.top+(c?-i-2:n.offsetHeight+2);if(t(Ae.calendarContainer,"arrowTop",!c),t(Ae.calendarContainer,"arrowBottom",c),!Ae.config.inline){var d=window.pageXOffset+s.left-(null!=l&&"center"===l?(r-s.width)/2:0),p=window.document.body.offsetWidth-s.right,h=d+r>window.document.body.offsetWidth,m=p+r>window.document.body.offsetWidth;if(t(Ae.calendarContainer,"rightMost",h),!Ae.config.static)if(Ae.calendarContainer.style.top=f+"px",h)if(m){var g=document.styleSheets[0];if(void 0===g)return;var v=window.document.body.offsetWidth,y=Math.max(0,v/2-r/2),b=g.cssRules.length,w="{left:"+s.left+"px;right:auto;}";t(Ae.calendarContainer,"rightMost",!1),t(Ae.calendarContainer,"centerMost",!0),g.insertRule(".flatpickr-calendar.centerMost:before,.flatpickr-calendar.centerMost:after"+w,b),Ae.calendarContainer.style.left=y+"px",Ae.calendarContainer.style.right="auto"}else Ae.calendarContainer.style.left="auto",Ae.calendarContainer.style.right=p+"px";else Ae.calendarContainer.style.left=d+"px",Ae.calendarContainer.style.right="auto"}}}function we(){Ae.config.noCalendar||Ae.isMobile||(Te(),G())}function De(){Ae._input.focus(),-1!==window.navigator.userAgent.indexOf("MSIE")||void 0!==navigator.msMaxTouchPoints?setTimeout(Ae.close,0):Ae.close()}function ke(e){e.preventDefault(),e.stopPropagation();var t=r(e.target,function(e){return e.classList&&e.classList.contains("flatpickr-day")&&!e.classList.contains("flatpickr-disabled")&&!e.classList.contains("notAllowed")});if(void 0!==t){var n=t,i=Ae.latestSelectedDateObj=new Date(n.dateObj.getTime()),a=(i.getMonth()Ae.currentMonth+Ae.config.showMonths-1)&&"range"!==Ae.config.mode;if(Ae.selectedDateElem=n,"single"===Ae.config.mode)Ae.selectedDates=[i];else if("multiple"===Ae.config.mode){var o=Ee(i);o?Ae.selectedDates.splice(parseInt(o),1):Ae.selectedDates.push(i)}else"range"===Ae.config.mode&&(2===Ae.selectedDates.length&&Ae.clear(!1,!1),Ae.latestSelectedDateObj=i,Ae.selectedDates.push(i),0!==s(i,Ae.selectedDates[0],!0)&&Ae.selectedDates.sort(function(e,t){return e.getTime()-t.getTime()}));if(T(),a){var l=Ae.currentYear!==i.getFullYear();Ae.currentYear=i.getFullYear(),Ae.currentMonth=i.getMonth(),l&&(xe("onYearChange"),Z()),xe("onMonthChange")}if(Te(),G(),Ie(),Ae.config.enableTime&&setTimeout(function(){return Ae.showTimeInput=!0},50),a||"range"===Ae.config.mode||1!==Ae.config.showMonths?void 0!==Ae.selectedDateElem&&void 0===Ae.hourElement&&Ae.selectedDateElem&&Ae.selectedDateElem.focus():W(n),void 0!==Ae.hourElement&&void 0!==Ae.hourElement&&Ae.hourElement.focus(),Ae.config.closeOnSelect){var u="single"===Ae.config.mode&&!Ae.config.enableTime,c="range"===Ae.config.mode&&2===Ae.selectedDates.length&&!Ae.config.enableTime;(u||c)&&De()}Y()}}function Ce(e,t){var n=[];if(e instanceof Array)n=e.map(function(e){return Ae.parseDate(e,t)});else if(e instanceof Date||"number"==typeof e)n=[Ae.parseDate(e,t)];else if("string"==typeof e)switch(Ae.config.mode){case"single":case"time":n=[Ae.parseDate(e,t)];break;case"multiple":n=e.split(Ae.config.conjunction).map(function(e){return Ae.parseDate(e,t)});break;case"range":n=e.split(Ae.l10n.rangeSeparator).map(function(e){return Ae.parseDate(e,t)})}else Ae.config.errorHandler(new Error("Invalid date supplied: "+JSON.stringify(e)));Ae.selectedDates=n.filter(function(e){return e instanceof Date&&ce(e,!1)}),"range"===Ae.config.mode&&Ae.selectedDates.sort(function(e,t){return e.getTime()-t.getTime()})}function Me(e){return e.slice().map(function(e){return"string"==typeof e||"number"==typeof e||e instanceof Date?Ae.parseDate(e,void 0,!0):e&&"object"===(void 0===e?"undefined":a(e))&&e.from&&e.to?{from:Ae.parseDate(e.from,void 0),to:Ae.parseDate(e.to,void 0)}:e}).filter(function(e){return e})}function Oe(){Ae.selectedDates=[],Ae.now=Ae.parseDate(Ae.config.now)||new Date;var e=Ae.config.defaultDate||("INPUT"!==Ae.input.nodeName&&"TEXTAREA"!==Ae.input.nodeName||!Ae.input.placeholder||Ae.input.value!==Ae.input.placeholder?Ae.input.value:null);e&&Ce(e,Ae.config.dateFormat),Ae._initialDate=Ae.selectedDates.length>0?Ae.selectedDates[0]:Ae.config.minDate&&Ae.config.minDate.getTime()>Ae.now.getTime()?Ae.config.minDate:Ae.config.maxDate&&Ae.config.maxDate.getTime()0&&(Ae.latestSelectedDateObj=Ae.selectedDates[0]),void 0!==Ae.config.minTime&&(Ae.config.minTime=Ae.parseDate(Ae.config.minTime,"H:i")),void 0!==Ae.config.maxTime&&(Ae.config.maxTime=Ae.parseDate(Ae.config.maxTime,"H:i")),Ae.minDateHasTime=!!Ae.config.minDate&&(Ae.config.minDate.getHours()>0||Ae.config.minDate.getMinutes()>0||Ae.config.minDate.getSeconds()>0),Ae.maxDateHasTime=!!Ae.config.maxDate&&(Ae.config.maxDate.getHours()>0||Ae.config.maxDate.getMinutes()>0||Ae.config.maxDate.getSeconds()>0),Object.defineProperty(Ae,"showTimeInput",{get:function(){return Ae._showTimeInput},set:function(e){Ae._showTimeInput=e,Ae.calendarContainer&&t(Ae.calendarContainer,"showTimeInput",e),Ae.isOpen&&be()}})}function _e(){Ae.input=Ae.config.wrap?u.querySelector("[data-input]"):u,Ae.input?(Ae.input._type=Ae.input.type,Ae.input.type="text",Ae.input.classList.add("flatpickr-input"),Ae._input=Ae.input,Ae.config.altInput&&(Ae.altInput=n(Ae.input.nodeName,Ae.config.altInputClass),Ae._input=Ae.altInput,Ae.altInput.placeholder=Ae.input.placeholder,Ae.altInput.disabled=Ae.input.disabled,Ae.altInput.required=Ae.input.required,Ae.altInput.tabIndex=Ae.input.tabIndex,Ae.altInput.type="text",Ae.input.setAttribute("type","hidden"),!Ae.config.static&&Ae.input.parentNode&&Ae.input.parentNode.insertBefore(Ae.altInput,Ae.input.nextSibling)),Ae.config.allowInput||Ae._input.setAttribute("readonly","readonly"),Ae._positionElement=Ae.config.positionElement||Ae._input):Ae.config.errorHandler(new Error("Invalid input element specified"))}function je(){var e=Ae.config.enableTime?Ae.config.noCalendar?"time":"datetime-local":"date";Ae.mobileInput=n("input",Ae.input.className+" flatpickr-mobile"),Ae.mobileInput.step=Ae.input.getAttribute("step")||"any",Ae.mobileInput.tabIndex=1,Ae.mobileInput.type=e,Ae.mobileInput.disabled=Ae.input.disabled,Ae.mobileInput.required=Ae.input.required,Ae.mobileInput.placeholder=Ae.input.placeholder,Ae.mobileFormatStr="datetime-local"===e?"Y-m-d\\TH:i:S":"date"===e?"Y-m-d":"H:i:S",Ae.selectedDates.length>0&&(Ae.mobileInput.defaultValue=Ae.mobileInput.value=Ae.formatDate(Ae.selectedDates[0],Ae.mobileFormatStr)),Ae.config.minDate&&(Ae.mobileInput.min=Ae.formatDate(Ae.config.minDate,"Y-m-d")),Ae.config.maxDate&&(Ae.mobileInput.max=Ae.formatDate(Ae.config.maxDate,"Y-m-d")),Ae.input.type="hidden",void 0!==Ae.altInput&&(Ae.altInput.type="hidden");try{Ae.input.parentNode&&Ae.input.parentNode.insertBefore(Ae.mobileInput,Ae.input.nextSibling)}catch(e){}A(Ae.mobileInput,"change",function(e){Ae.setDate(e.target.value,!1,Ae.mobileFormatStr),xe("onChange"),xe("onClose")})}function xe(e,t){if(void 0!==Ae.config){var n=Ae.config[e];if(void 0!==n&&n.length>0)for(var i=0;n[i]&&i=0&&s(e,Ae.selectedDates[1])<=0)}function Te(){Ae.config.noCalendar||Ae.isMobile||!Ae.monthNav||(Ae.yearElements.forEach(function(e,t){var n=new Date(Ae.currentYear,Ae.currentMonth,1);n.setMonth(Ae.currentMonth+t),Ae.config.showMonths>1||"static"===Ae.config.monthSelectorType?Ae.monthElements[t].textContent=b(n.getMonth(),Ae.config.shorthandCurrentMonth,Ae.l10n)+" ":Ae.monthsDropdownContainer.value=n.getMonth().toString(),e.value=n.getFullYear().toString()}),Ae._hidePrevMonthArrow=void 0!==Ae.config.minDate&&(Ae.currentYear===Ae.config.minDate.getFullYear()?Ae.currentMonth<=Ae.config.minDate.getMonth():Ae.currentYearAe.config.maxDate.getMonth():Ae.currentYear>Ae.config.maxDate.getFullYear()))}function Pe(e){return Ae.selectedDates.map(function(t){return Ae.formatDate(t,e)}).filter(function(e,t,n){return"range"!==Ae.config.mode||Ae.config.enableTime||n.indexOf(e)===t}).join("range"!==Ae.config.mode?Ae.config.conjunction:Ae.l10n.rangeSeparator)}function Ie(e){void 0===e&&(e=!0),void 0!==Ae.mobileInput&&Ae.mobileFormatStr&&(Ae.mobileInput.value=void 0!==Ae.latestSelectedDateObj?Ae.formatDate(Ae.latestSelectedDateObj,Ae.mobileFormatStr):""),Ae.input.value=Pe(Ae.config.dateFormat),void 0!==Ae.altInput&&(Ae.altInput.value=Pe(Ae.config.altFormat)),!1!==e&&xe("onValueUpdate")}function Se(e){var t=Ae.prevMonthNav.contains(e.target),n=Ae.nextMonthNav.contains(e.target);t||n?oe(t?-1:1):Ae.yearElements.indexOf(e.target)>=0?e.target.select():e.target.classList.contains("arrowUp")?Ae.changeYear(Ae.currentYear+1):e.target.classList.contains("arrowDown")&&Ae.changeYear(Ae.currentYear-1)}function He(e){e.preventDefault();var t="keydown"===e.type,n=e.target;void 0!==Ae.amPM&&e.target===Ae.amPM&&(Ae.amPM.textContent=Ae.l10n.amPM[g(Ae.amPM.textContent===Ae.l10n.amPM[0])]);var i=parseFloat(n.getAttribute("min")),r=parseFloat(n.getAttribute("max")),a=parseFloat(n.getAttribute("step")),o=parseInt(n.value,10),l=o+a*(e.delta||(t?38===e.which?1:-1:0));if(void 0!==n.value&&2===n.value.length){var s=n===Ae.hourElement,u=n===Ae.minuteElement;lr&&(l=n===Ae.hourElement?l-r-g(!Ae.amPM):i,u&&B(void 0,1,Ae.hourElement)),Ae.amPM&&s&&(1===a?l+o===23:Math.abs(l-o)>a)&&(Ae.amPM.textContent=Ae.l10n.amPM[g(Ae.amPM.textContent===Ae.l10n.amPM[0])]),n.value=m(l)}}var Ae={config:f({},p,x.defaultConfig),l10n:h};Ae.parseDate=M({config:Ae.config,l10n:Ae.l10n}),Ae._handlers=[],Ae.pluginElements=[],Ae.loadedPlugins=[],Ae._bind=A,Ae._setHoursFromDate=P,Ae._positionCalendar=be,Ae.changeMonth=oe,Ae.changeYear=ue,Ae.clear=function(e,t){void 0===e&&(e=!0),void 0===t&&(t=!0),Ae.input.value="",void 0!==Ae.altInput&&(Ae.altInput.value=""),void 0!==Ae.mobileInput&&(Ae.mobileInput.value=""),Ae.selectedDates=[],Ae.latestSelectedDateObj=void 0,!0===t&&(Ae.currentYear=Ae._initialDate.getFullYear(),Ae.currentMonth=Ae._initialDate.getMonth()),Ae.showTimeInput=!1,!0===Ae.config.enableTime&&I(),Ae.redraw(),e&&xe("onChange")},Ae.close=function(){Ae.isOpen=!1,Ae.isMobile||(void 0!==Ae.calendarContainer&&Ae.calendarContainer.classList.remove("open"),void 0!==Ae._input&&Ae._input.classList.remove("active")),xe("onClose")},Ae._createElement=n,Ae.destroy=function(){void 0!==Ae.config&&xe("onDestroy");for(var e=Ae._handlers.length;e--;){var t=Ae._handlers[e];t.element.removeEventListener(t.event,t.handler,t.options)}if(Ae._handlers=[],Ae.mobileInput)Ae.mobileInput.parentNode&&Ae.mobileInput.parentNode.removeChild(Ae.mobileInput),Ae.mobileInput=void 0;else if(Ae.calendarContainer&&Ae.calendarContainer.parentNode)if(Ae.config.static&&Ae.calendarContainer.parentNode){var n=Ae.calendarContainer.parentNode;if(n.lastChild&&n.removeChild(n.lastChild),n.parentNode){for(;n.firstChild;)n.parentNode.insertBefore(n.firstChild,n);n.parentNode.removeChild(n)}}else Ae.calendarContainer.parentNode.removeChild(Ae.calendarContainer);Ae.altInput&&(Ae.input.type="text",Ae.altInput.parentNode&&Ae.altInput.parentNode.removeChild(Ae.altInput),delete Ae.altInput),Ae.input&&(Ae.input.type=Ae.input._type,Ae.input.classList.remove("flatpickr-input"),Ae.input.removeAttribute("readonly"),Ae.input.value=""),["_showTimeInput","latestSelectedDateObj","_hideNextMonthArrow","_hidePrevMonthArrow","__hideNextMonthArrow","__hidePrevMonthArrow","isMobile","isOpen","selectedDateElem","minDateHasTime","maxDateHasTime","days","daysContainer","_input","_positionElement","innerContainer","rContainer","monthNav","todayDateElem","calendarContainer","weekdayContainer","prevMonthNav","nextMonthNav","monthsDropdownContainer","currentMonthElement","currentYearElement","navigationCurrentMonth","selectedDateElem","config"].forEach(function(e){try{delete Ae[e]}catch(e){}})},Ae.isEnabled=ce,Ae.jumpToDate=L,Ae.open=function(e,t){if(void 0===t&&(t=Ae._positionElement),!0===Ae.isMobile)return e&&(e.preventDefault(),e.target&&e.target.blur()),void 0!==Ae.mobileInput&&(Ae.mobileInput.focus(),Ae.mobileInput.click()),void xe("onOpen");if(!Ae._input.disabled&&!Ae.config.inline){var n=Ae.isOpen;Ae.isOpen=!0,n||(Ae.calendarContainer.classList.add("open"),Ae._input.classList.add("active"),xe("onOpen"),be(t)),!0===Ae.config.enableTime&&!0===Ae.config.noCalendar&&(0===Ae.selectedDates.length&&me(),!1!==Ae.config.allowInput||void 0!==e&&Ae.timeContainer.contains(e.relatedTarget)||setTimeout(function(){return Ae.hourElement.select()},50))}},Ae.redraw=we,Ae.set=function(e,t){if(null!==e&&"object"===(void 0===e?"undefined":a(e))){Object.assign(Ae.config,e);for(var n in e)void 0!==Ne[n]&&Ne[n].forEach(function(e){return e()})}else Ae.config[e]=t,void 0!==Ne[e]?Ne[e].forEach(function(e){return e()}):d.indexOf(e)>-1&&(Ae.config[e]=v(t));Ae.redraw(),Ie(!1)},Ae.setDate=function(e,t,n){if(void 0===t&&(t=!1),void 0===n&&(n=Ae.config.dateFormat),0!==e&&!e||e instanceof Array&&0===e.length)return Ae.clear(t);Ce(e,n),Ae.showTimeInput=Ae.selectedDates.length>0,Ae.latestSelectedDateObj=Ae.selectedDates[Ae.selectedDates.length-1],Ae.redraw(),L(),P(),0===Ae.selectedDates.length&&Ae.clear(!1),Ie(t),t&&xe("onChange")},Ae.toggle=function(e){if(!0===Ae.isOpen)return Ae.close();Ae.open(e)};var Ne={locale:[ye,re],showMonths:[ee,k,ie],minDate:[L],maxDate:[L]};return function(){Ae.element=Ae.input=u,Ae.isOpen=!1,ve(),ye(),_e(),Oe(),y(),Ae.isMobile||z(),Q(),(Ae.selectedDates.length||Ae.config.noCalendar)&&(Ae.config.enableTime&&P(Ae.config.noCalendar?Ae.latestSelectedDateObj||Ae.config.minDate:void 0),Ie(!1)),k(),Ae.showTimeInput=Ae.selectedDates.length>0||Ae.config.noCalendar;var e=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);!Ae.isMobile&&e&&be(),xe("onReady")}(),Ae}function c(e,t){for(var n=Array.prototype.slice.call(e).filter(function(e){return e instanceof HTMLElement}),i=[],r=0;r",noCalendar:!1,now:new Date,onChange:[],onClose:[],onDayCreate:[],onDestroy:[],onKeyDown:[],onMonthChange:[],onOpen:[],onParseConfig:[],onReady:[],onValueUpdate:[],onYearChange:[],onPreCalendarPosition:[],plugins:[],position:"auto",positionElement:void 0,prevArrow:"",shorthandCurrentMonth:!1,showMonths:1,static:!1,time_24hr:!1,weekNumbers:!1,wrap:!1},h={weekdays:{shorthand:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],longhand:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},months:{shorthand:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],longhand:["January","February","March","April","May","June","July","August","September","October","November","December"]},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:0,ordinal:function(e){var t=e%100;if(t>3&&t<21)return"th";switch(t%10){case 1:return"st";case 2:return"nd";case 3:return"rd";default:return"th"}},rangeSeparator:" to ",weekAbbreviation:"Wk",scrollTitle:"Scroll to increment",toggleTitle:"Click to toggle",amPM:["AM","PM"],yearAriaLabel:"Year",hourAriaLabel:"Hour",minuteAriaLabel:"Minute",time_24hr:!1},m=function(e){return("0"+e).slice(-2)},g=function(e){return!0===e?1:0},v=function(e){return e instanceof Array?e:[e]},y=function(){},b=function(e,t,n){return n.months[t?"shorthand":"longhand"][e]},w={D:y,F:function(e,t,n){e.setMonth(n.months.longhand.indexOf(t))},G:function(e,t){e.setHours(parseFloat(t))},H:function(e,t){e.setHours(parseFloat(t))},J:function(e,t){e.setDate(parseFloat(t))},K:function(e,t,n){e.setHours(e.getHours()%12+12*g(new RegExp(n.amPM[1],"i").test(t)))},M:function(e,t,n){e.setMonth(n.months.shorthand.indexOf(t))},S:function(e,t){e.setSeconds(parseFloat(t))},U:function(e,t){return new Date(1e3*parseFloat(t))},W:function(e,t,n){var i=parseInt(t),r=new Date(e.getFullYear(),0,2+7*(i-1),0,0,0,0);return r.setDate(r.getDate()-r.getDay()+n.firstDayOfWeek),r},Y:function(e,t){e.setFullYear(parseFloat(t))},Z:function(e,t){return new Date(t)},d:function(e,t){e.setDate(parseFloat(t))},h:function(e,t){e.setHours(parseFloat(t))},i:function(e,t){e.setMinutes(parseFloat(t))},j:function(e,t){e.setDate(parseFloat(t))},l:y,m:function(e,t){e.setMonth(parseFloat(t)-1)},n:function(e,t){e.setMonth(parseFloat(t)-1)},s:function(e,t){e.setSeconds(parseFloat(t))},u:function(e,t){return new Date(parseFloat(t))},w:y,y:function(e,t){e.setFullYear(2e3+parseFloat(t))}},D={D:"(\\w+)",F:"(\\w+)",G:"(\\d\\d|\\d)",H:"(\\d\\d|\\d)",J:"(\\d\\d|\\d)\\w+",K:"",M:"(\\w+)",S:"(\\d\\d|\\d)",U:"(.+)",W:"(\\d\\d|\\d)",Y:"(\\d{4})",Z:"(.+)",d:"(\\d\\d|\\d)",h:"(\\d\\d|\\d)",i:"(\\d\\d|\\d)",j:"(\\d\\d|\\d)",l:"(\\w+)",m:"(\\d\\d|\\d)",n:"(\\d\\d|\\d)",s:"(\\d\\d|\\d)",u:"(.+)",w:"(\\d\\d|\\d)",y:"(\\d{2})"},k={Z:function(e){return e.toISOString()},D:function(e,t,n){return t.weekdays.shorthand[k.w(e,t,n)]},F:function(e,t,n){return b(k.n(e,t,n)-1,!1,t)},G:function(e,t,n){return m(k.h(e,t,n))},H:function(e){return m(e.getHours())},J:function(e,t){return void 0!==t.ordinal?e.getDate()+t.ordinal(e.getDate()):e.getDate()},K:function(e,t){return t.amPM[g(e.getHours()>11)]},M:function(e,t){return b(e.getMonth(),!0,t)},S:function(e){return m(e.getSeconds())},U:function(e){return e.getTime()/1e3},W:function(e,t,n){return n.getWeek(e)},Y:function(e){return e.getFullYear()},d:function(e){return m(e.getDate())},h:function(e){return e.getHours()%12?e.getHours()%12:12},i:function(e){return m(e.getMinutes())},j:function(e){return e.getDate()},l:function(e,t){return t.weekdays.longhand[e.getDay()]},m:function(e){return m(e.getMonth()+1)},n:function(e){return e.getMonth()+1},s:function(e){return e.getSeconds()},u:function(e){return e.getTime()},w:function(e){return e.getDay()},y:function(e){return String(e.getFullYear()).substring(2)}},C=function(e){var t=e.config,n=void 0===t?p:t,i=e.l10n,r=void 0===i?h:i;return function(e,t,i){var a=i||r;return void 0!==n.formatDate?n.formatDate(e,t,a):t.split("").map(function(t,i,r){return k[t]&&"\\"!==r[i-1]?k[t](e,a,n):"\\"!==t?t:""}).join("")}},M=function(e){var t=e.config,n=void 0===t?p:t,i=e.l10n,r=void 0===i?h:i;return function(e,t,i,a){if(0===e||e){var o,l=a||r,s=e;if(e instanceof Date)o=new Date(e.getTime());else if("string"!=typeof e&&void 0!==e.toFixed)o=new Date(e);else if("string"==typeof e){var u=t||(n||p).dateFormat,c=String(e).trim();if("today"===c)o=new Date,i=!0;else if(/Z$/.test(c)||/GMT$/.test(c))o=new Date(e);else if(n&&n.parseDate)o=n.parseDate(e,u);else{o=n&&n.noCalendar?new Date((new Date).setHours(0,0,0,0)):new Date((new Date).getFullYear(),0,1,0,0,0,0);for(var f=void 0,d=[],h=0,m=0,g="";hMath.min(t,n)&&ethis.constraints.max?(t="max",e=this.constraints.max):!1!==this.constraints.min&&e");this.data.head.map(function(n,i){var r=jQuery("");r.append(''),r.find('input[type="text"]').val(n),t.append(r)}),this.$ui.thead.append(t)}if(this.data.body.length){for(var n=jQuery(''),i=0;i');this.$ui.tbody.append(n),this.data.body.map(function(t,n){var i=jQuery("");t.map(function(t,r){var a=jQuery("");a.append(''),a.find('input[type="text"]').val(t),i.append(a)}),i.append(''),e.$ui.tbody.append(i)})}}}]),t}(),u=function(){function e(t){i(this,e);var n=this;this.fields=[];var r=t.find("[data-fieldhelpers-field-table]");r.length&&r.each(function(){n.initializeField(jQuery(this))})}return o(e,[{key:"initializeField",value:function(e){this.fields.push({$field:e,api:new s(e)})}}]),e}();t.default=u},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n0&&Object.keys(this.options.select2Options.language).map(function(t){var n=e.options.select2Options.language[t];e.options.select2Options.language[t]=function(e){return n}})}},{key:"setupSelect2Options",value:function(){var e=this;this.setupL10n();var t=["escapeMarkup","initSelection","matcher","query","sorter","templateResult","templateSelection","tokenizer"];Object.keys(this.options.select2Options).map(function(n){if(-1!==t.indexOf(n)){var i=e.options.select2Options[n];"function"==typeof window[i]&&(e.options.select2Options[n]=window[i])}}),this.options.optGroups&&this.options.optGroupSelectionPrefix&&void 0===this.options.select2Options.templateSelection&&(this.options.select2Options.templateSelection=function(e){return jQuery(e.element).closest("optgroup").attr("label").trim()+": "+e.text})}},{key:"fieldCleanup",value:function(){if(!this.options.select2Disabled){var e=this.$field.next(".select2");e.length&&e.remove(),this.$field.removeClass("select2-hidden-accessible").removeAttr("tablindex aria-hidden")}}},{key:"setDefault",value:function(){this.$field.find("option:selected").prop("selected",!1),this.$field.trigger("change")}}]),t}(),u=function(){function e(t){i(this,e);var n=this;this.fields=[];var r=t.find("[data-fieldhelpers-field-select]");r.length&&r.each(function(){n.initializeField(jQuery(this))})}return o(e,[{key:"initializeField",value:function(e){this.fields.push({$field:e,api:new s(e)})}}]),e}();t.default=u},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(null===t&&(t=jQuery('.fieldhelpers-field[data-fieldhelpers-name="'+e+'"]').data("fieldhelpers-instance")),null===n){var r=jQuery('.fieldhelpers-field[data-fieldhelpers-name="'+e+'"][data-fieldhelpers-instance="'+t+'"]').first().attr("class"),a=/fieldhelpers-field-(\S*)/.exec(r);null!==a&&a[1].length>0&&(n=a[1])}try{return RBM_FieldHelpers[t].fieldObjects[n][e]}catch(r){return(null===t||null===n||void 0===RBM_FieldHelpers[t]||void 0===RBM_FieldHelpers[t].fieldObjects||void 0===RBM_FieldHelpers[t].fieldObjects[n]||void 0===RBM_FieldHelpers[t].fieldObjects[n][e]||i(RBM_FieldHelpers[t].fieldObjects[n][e].length)<0)&&console.error('Field Helpers Error: Field Object for "'+e+'" Not Found'),!1}}},function(e,t,n){"use strict";!function(e){var t=function(e){return e},n=function(t){return e.isArray(t)},i=function(e){return!n(e)&&e instanceof Object},r=function(t,n){return e.inArray(n,t)},a=function(e,t){return-1!==r(e,t)},o=function(e,t){for(var n in e)e.hasOwnProperty(n)&&t(e[n],n,e)},l=function(e){return e[e.length-1]},s=function(e){return Array.prototype.slice.call(e)},u=function(){var e={};return o(s(arguments),function(t){o(t,function(t,n){e[n]=t})}),e},c=function(e,t){var n=[];return o(e,function(e,i,r){n.push(t(e,i,r))}),n},f=function(e,t,n){var i={};return o(e,function(e,r,a){r=n?n(r,e):r,i[r]=t(e,r,a)}),i},d=function(e,t,i){return n(e)?c(e,t):f(e,t,i)},p=function(e,t){return d(e,function(e){return e[t]})},h=function(e,t){var i;return n(e)?(i=[],o(e,function(e,n,r){t(e,n,r)&&i.push(e)})):(i={},o(e,function(e,n,r){t(e,n,r)&&(i[n]=e)})),i},m=function(e,t,n){return d(e,function(e,i){return e[t].apply(e,n||[])})},g=function(e){var t={};return(e=e||{}).publish=function(e,n){o(t[e],function(e){e(n)})},e.subscribe=function(e,n){t[e]=t[e]||[],t[e].push(n)},e.unsubscribe=function(e){o(t,function(t){var n=r(t,e);-1!==n&&t.splice(n,1)})},e};!function(e){var t=function(e,t){var n=g(),i=e.$;return n.getType=function(){throw'implement me (return type. "text", "radio", etc.)'},n.$=function(e){return e?i.find(e):i},n.disable=function(){n.$().prop("disabled",!0),n.publish("isEnabled",!1)},n.enable=function(){n.$().prop("disabled",!1),n.publish("isEnabled",!0)},t.equalTo=function(e,t){return e===t},t.publishChange=function(){var e;return function(i,r){var a=n.get();t.equalTo(a,e)||n.publish("change",{e:i,domElement:r}),e=a}}(),n},s=function(e,n){var i=t(e,n);return i.get=function(){return i.$().val()},i.set=function(e){i.$().val(e)},i.clear=function(){i.set("")},n.buildSetter=function(e){return function(t){e.call(i,t)}},i},u=function(e,t){e=n(e)?e:[e],t=n(t)?t:[t];var i=!0;return e.length!==t.length?i=!1:o(e,function(e){a(t,e)||(i=!1)}),i},c=function(e){var t={},n=s(e,t);return n.getType=function(){return"button"},n.$().on("change",function(e){t.publishChange(e,this)}),n},f=function(t){var i={},r=s(t,i);return r.getType=function(){return"checkbox"},r.get=function(){var t=[];return r.$().filter(":checked").each(function(){t.push(e(this).val())}),t},r.set=function(t){t=n(t)?t:[t],r.$().each(function(){e(this).prop("checked",!1)}),o(t,function(e){r.$().filter('[value="'+e+'"]').prop("checked",!0)})},i.equalTo=u,r.$().change(function(e){i.publishChange(e,this)}),r},d=function(e){var t=C(e,{});return t.getType=function(){return"email"},t},p=function(n){var i={},r=t(n,i);return r.getType=function(){return"file"},r.get=function(){return l(r.$().val().split("\\"))},r.clear=function(){this.$().each(function(){e(this).wrap("").closest("form").get(0).reset(),e(this).unwrap()})},r.$().change(function(e){i.publishChange(e,this)}),r},h=function(e){var t={},n=s(e,t);return n.getType=function(){return"hidden"},n.$().change(function(e){t.publishChange(e,this)}),n},v=function(n){var i={},r=t(n,i);return r.getType=function(){return"file[multiple]"},r.get=function(){var e,t=r.$().get(0).files||[],n=[];for(e=0;e<(t.length||0);e+=1)n.push(t[e].name);return n},r.clear=function(){this.$().each(function(){e(this).wrap("").closest("form").get(0).reset(),e(this).unwrap()})},r.$().change(function(e){i.publishChange(e,this)}),r},y=function(e){var t={},i=s(e,t);return i.getType=function(){return"select[multiple]"},i.get=function(){return i.$().val()||[]},i.set=function(e){i.$().val(""===e?[]:n(e)?e:[e])},t.equalTo=u,i.$().change(function(e){t.publishChange(e,this)}),i},b=function(e){var t=C(e,{});return t.getType=function(){return"password"},t},w=function(t){var n={},i=s(t,n);return i.getType=function(){return"radio"},i.get=function(){return i.$().filter(":checked").val()||null},i.set=function(t){t?i.$().filter('[value="'+t+'"]').prop("checked",!0):i.$().each(function(){e(this).prop("checked",!1)})},i.$().change(function(e){n.publishChange(e,this)}),i},D=function(e){var t={},n=s(e,t);return n.getType=function(){return"range"},n.$().change(function(e){t.publishChange(e,this)}),n},k=function(e){var t={},n=s(e,t);return n.getType=function(){return"select"},n.$().change(function(e){t.publishChange(e,this)}),n},C=function(e){var t={},n=s(e,t);return n.getType=function(){return"text"},n.$().on("change keyup keydown",function(e){t.publishChange(e,this)}),n},M=function(e){var t={},n=s(e,t);return n.getType=function(){return"textarea"},n.$().on("change keyup keydown",function(e){t.publishChange(e,this)}),n},O=function(e){var t=C(e,{});return t.getType=function(){return"url"},t},_=function(t){var n={},a=t.$,l=t.constructorOverride||{button:c,text:C,url:O,email:d,password:b,range:D,textarea:M,select:k,"select[multiple]":y,radio:w,checkbox:f,file:p,"file[multiple]":v,hidden:h},s=function(t,r){(i(r)?r:a.find(r)).each(function(){var i=e(this).attr("name");n[i]=l[t]({$:e(this)})})},u=function(t,s){var u=[],c=i(s)?s:a.find(s);i(s)?n[c.attr("name")]=l[t]({$:c}):(c.each(function(){-1===r(u,e(this).attr("name"))&&u.push(e(this).attr("name"))}),o(u,function(e){n[e]=l[t]({$:a.find('input[name="'+e+'"]')})}))};return a.is("input, select, textarea")?a.is('input[type="button"], button, input[type="submit"]')?s("button",a):a.is("textarea")?s("textarea",a):a.is('input[type="text"]')||a.is("input")&&!a.attr("type")?s("text",a):a.is('input[type="password"]')?s("password",a):a.is('input[type="email"]')?s("email",a):a.is('input[type="url"]')?s("url",a):a.is('input[type="range"]')?s("range",a):a.is("select")?a.is("[multiple]")?s("select[multiple]",a):s("select",a):a.is('input[type="file"]')?a.is("[multiple]")?s("file[multiple]",a):s("file",a):a.is('input[type="hidden"]')?s("hidden",a):a.is('input[type="radio"]')?u("radio",a):a.is('input[type="checkbox"]')?u("checkbox",a):s("text",a):(s("button",'input[type="button"], button, input[type="submit"]'),s("text",'input[type="text"]'),s("password",'input[type="password"]'),s("email",'input[type="email"]'),s("url",'input[type="url"]'),s("range",'input[type="range"]'),s("textarea","textarea"),s("select","select:not([multiple])"),s("select[multiple]","select[multiple]"),s("file",'input[type="file"]:not([multiple])'),s("file[multiple]",'input[type="file"][multiple]'),s("hidden",'input[type="hidden"]'),u("radio",'input[type="radio"]'),u("checkbox",'input[type="checkbox"]')),n};e.fn.inputVal=function(t){var n=e(this),i=_({$:n});return n.is("input, textarea, select")?void 0===t?i[n.attr("name")].get():(i[n.attr("name")].set(t),n):void 0===t?m(i,"get"):(o(t,function(e,t){i[t].set(e)}),n)},e.fn.inputOnChange=function(t){var n=e(this),i=_({$:n});return o(i,function(e){e.subscribe("change",function(e){t.call(e.domElement,e.e)})}),n},e.fn.inputDisable=function(){var t=e(this);return m(_({$:t}),"disable"),t},e.fn.inputEnable=function(){var t=e(this);return m(_({$:t}),"enable"),t},e.fn.inputClear=function(){var t=e(this);return m(_({$:t}),"clear"),t}}(jQuery),e.fn.repeaterVal=function(){return function e(t){if(1===t.length&&(0===t[0].key.length||1===t[0].key.length&&!t[0].key[0]))return t[0].val;o(t,function(e){e.head=e.key.shift()});var n,i=function(){var e={};return o(t,function(t){e[t.head]||(e[t.head]=[]),e[t.head].push(t)}),e}();return/^[0-9]+$/.test(t[0].head)?(n=[],o(i,function(t){n.push(e(t))})):(n={},o(i,function(t,i){n[i]=e(t)})),n}(function(e){var t=[];return o(e,function(e,n){var i=[];"undefined"!==n&&(i.push(n.match(/^[^\[]*/)[0]),i=i.concat(d(n.match(/\[[^\]]*\]/g),function(e){return e.replace(/[\[\]]/g,"")})),t.push({val:e,key:i}))}),t}(e(this).inputVal()))},e.fn.repeater=function(n){n=n||{};var i;return e(this).each(function(){var r=e(this),a=n.show||function(){e(this).show()},s=n.hide||function(e){e()},c=r.find("[data-repeater-list]").first(),f=function(t,n){return t.filter(function(){return!n||0===e(this).closest(p(n,"selector").join(",")).length})},m=function(){return f(c.find("[data-repeater-item]"),n.repeaters)},g=c.find("[data-repeater-item]").first().clone().hide(),v=f(f(e(this).find("[data-repeater-item]"),n.repeaters).first().find("[data-repeater-delete]"),n.repeaters);n.isFirstItemUndeletable&&v&&v.remove();var y=function(){var e=c.data("repeater-list");return n.$parent?n.$parent.data("item-name")+"["+e+"]":e},b=function(t){n.repeaters&&t.each(function(){var t=e(this);o(n.repeaters,function(e){t.find(e.selector).repeater(u(e,{$parent:t}))})})},w=function(e,t,n){e&&o(e,function(e){n.call(t.find(e.selector)[0],e)})},D=function t(n,i,r){n.each(function(n){var a=e(this);a.data("item-name",i+"["+n+"]"),f(a.find("[name]"),r).each(function(){var o=e(this),s=o.attr("name").match(/\[[^\]]+\]/g),u=s?l(s).replace(/\[|\]/g,""):o.attr("name"),c=i+"["+n+"]["+u+"]"+(o.is(":checkbox")||o.attr("multiple")?"[]":"");o.attr("name",c),w(r,a,function(r){var a=e(this);t(f(a.find("[data-repeater-item]"),r.repeaters||[]),i+"["+n+"]["+a.find("[data-repeater-list]").first().data("repeater-list")+"]",r.repeaters)})})}),c.find("input[name][checked]").removeAttr("checked").prop("checked",!0)};D(m(),y(),n.repeaters),b(m()),n.initEmpty&&m().remove(),n.ready&&n.ready(function(){D(m(),y(),n.repeaters)});var k=function(){var i=function i(r,a,l){if(a||n.defaultValues){var s={};f(r.find("[name]"),l).each(function(){var t=e(this).attr("name").match(/\[([^\]]*)(\]|\]\[\])$/)[1];s[t]=e(this).attr("name")}),r.inputVal(d(h(a||n.defaultValues,function(e,t){return s[t]}),t,function(e){return s[e]}))}w(l,r,function(t){var n=e(this);f(n.find("[data-repeater-item]"),t.repeaters).each(function(){var r=n.find("[data-repeater-list]").data("repeater-list");if(a&&a[r]){var l=e(this).clone();n.find("[data-repeater-item]").remove(),o(a[r],function(e){var r=l.clone();i(r,e,t.repeaters||[]),n.find("[data-repeater-list]").append(r)})}else i(e(this),t.defaultValues,t.repeaters||[])})})};return function(t,r){c.append(t),D(m(),y(),n.repeaters),t.find("[name]").each(function(){e(this).inputClear()}),i(t,r||n.defaultValues,n.repeaters)}}(),C=function(e){var t=g.clone();k(t,e),n.repeaters&&b(t),a.call(t.get(0))};i=function(e){m().remove(),o(e,C)},f(r.find("[data-repeater-create]"),n.repeaters).click(function(){C()}),c.on("click","[data-repeater-delete]",function(){var t=e(this).closest("[data-repeater-item]").get(0);s.call(t,function(){e(t).remove(),D(m(),y(),n.repeaters)})})}),this.setList=i,this}}(jQuery)},function(e,t,n){"use strict";var i,r,a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};!function(o,l){"object"===a(t)&&void 0!==e?e.exports=l():(i=l,void 0!==(r="function"==typeof i?i.call(t,n,t,e):i)&&(e.exports=r))}(0,function(){function e(e,t,n){void 0===n&&(n=!1);var i;return function(){var r=this,a=arguments;null!==i&&clearTimeout(i),i=window.setTimeout(function(){i=null,n||e.apply(r,a)},t),n&&!i&&e.apply(r,a)}}function t(e,t,n){if(!0===n)return e.classList.add(t);e.classList.remove(t)}function n(e,t,n){var i=window.document.createElement(e);return t=t||"",n=n||"",i.className=t,void 0!==n&&(i.textContent=n),i}function i(e){for(;e.firstChild;)e.removeChild(e.firstChild)}function r(e,t){return t(e)?e:e.parentNode?r(e.parentNode,t):void 0}function o(e,t){var i=n("div","numInputWrapper"),r=n("input","numInput "+e),a=n("span","arrowUp"),o=n("span","arrowDown");if(-1===navigator.userAgent.indexOf("MSIE 9.0")?r.type="number":(r.type="text",r.pattern="\\d*"),void 0!==t)for(var l in t)r.setAttribute(l,t[l]);return i.appendChild(r),i.appendChild(a),i.appendChild(o),i}function l(e){return"function"==typeof e.composedPath?e.composedPath()[0]:e.target}function s(e,t,n){return void 0===n&&(n=!0),!1!==n?new Date(e.getTime()).setHours(0,0,0,0)-new Date(t.getTime()).setHours(0,0,0,0):e.getTime()-t.getTime()}function u(u,c){function y(){Ae.utils={getDaysInMonth:function(e,t){return void 0===e&&(e=Ae.currentMonth),void 0===t&&(t=Ae.currentYear),1===e&&(t%4==0&&t%100!=0||t%400==0)?29:Ae.l10n.daysInMonth[e]}}}function w(e){return e.bind(Ae)}function k(){var e=Ae.config;!1===e.weekNumbers&&1===e.showMonths||!0!==e.noCalendar&&window.requestAnimationFrame(function(){if(void 0!==Ae.calendarContainer&&(Ae.calendarContainer.style.visibility="hidden",Ae.calendarContainer.style.display="block"),void 0!==Ae.daysContainer){var t=(Ae.days.offsetWidth+1)*e.showMonths;Ae.daysContainer.style.width=t+"px",Ae.calendarContainer.style.width=t+(void 0!==Ae.weekWrapper?Ae.weekWrapper.offsetWidth:0)+"px",Ae.calendarContainer.style.removeProperty("visibility"),Ae.calendarContainer.style.removeProperty("display")}})}function F(e){0===Ae.selectedDates.length&&me(),void 0!==e&&"blur"!==e.type&&He(e);var t=Ae._input.value;T(),Ie(),Ae._input.value!==t&&Ae._debouncedChange()}function E(e,t){return e%12+12*g(t===Ae.l10n.amPM[1])}function $(e){switch(e%24){case 0:case 12:return 12;default:return e%12}}function T(){if(void 0!==Ae.hourElement&&void 0!==Ae.minuteElement){var e=(parseInt(Ae.hourElement.value.slice(-2),10)||0)%24,t=(parseInt(Ae.minuteElement.value,10)||0)%60,n=void 0!==Ae.secondElement?(parseInt(Ae.secondElement.value,10)||0)%60:0;void 0!==Ae.amPM&&(e=E(e,Ae.amPM.textContent));var i=void 0!==Ae.config.minTime||Ae.config.minDate&&Ae.minDateHasTime&&Ae.latestSelectedDateObj&&0===s(Ae.latestSelectedDateObj,Ae.config.minDate,!0);if(void 0!==Ae.config.maxTime||Ae.config.maxDate&&Ae.maxDateHasTime&&Ae.latestSelectedDateObj&&0===s(Ae.latestSelectedDateObj,Ae.config.maxDate,!0)){var r=void 0!==Ae.config.maxTime?Ae.config.maxTime:Ae.config.maxDate;(e=Math.min(e,r.getHours()))===r.getHours()&&(t=Math.min(t,r.getMinutes())),t===r.getMinutes()&&(n=Math.min(n,r.getSeconds()))}if(i){var a=void 0!==Ae.config.minTime?Ae.config.minTime:Ae.config.minDate;(e=Math.max(e,a.getHours()))===a.getHours()&&(t=Math.max(t,a.getMinutes())),t===a.getMinutes()&&(n=Math.max(n,a.getSeconds()))}S(e,t,n)}}function P(e){var t=e||Ae.latestSelectedDateObj;t&&S(t.getHours(),t.getMinutes(),t.getSeconds())}function I(){var e=Ae.config.defaultHour,t=Ae.config.defaultMinute,n=Ae.config.defaultSeconds;if(void 0!==Ae.config.minDate){var i=Ae.config.minDate.getHours(),r=Ae.config.minDate.getMinutes();(e=Math.max(e,i))===i&&(t=Math.max(r,t)),e===i&&t===r&&(n=Ae.config.minDate.getSeconds())}if(void 0!==Ae.config.maxDate){var a=Ae.config.maxDate.getHours(),o=Ae.config.maxDate.getMinutes();(e=Math.min(e,a))===a&&(t=Math.min(o,t)),e===a&&t===o&&(n=Ae.config.maxDate.getSeconds())}S(e,t,n)}function S(e,t,n){void 0!==Ae.latestSelectedDateObj&&Ae.latestSelectedDateObj.setHours(e%24,t,n||0,0),Ae.hourElement&&Ae.minuteElement&&!Ae.isMobile&&(Ae.hourElement.value=m(Ae.config.time_24hr?e:(12+e)%12+12*g(e%12==0)),Ae.minuteElement.value=m(t),void 0!==Ae.amPM&&(Ae.amPM.textContent=Ae.l10n.amPM[g(e>=12)]),void 0!==Ae.secondElement&&(Ae.secondElement.value=m(n)))}function H(e){var t=parseInt(e.target.value)+(e.delta||0);(t/1e3>1||"Enter"===e.key&&!/[^\d]/.test(t.toString()))&&ue(t)}function A(e,t,n,i){return t instanceof Array?t.forEach(function(t){return A(e,t,n,i)}):e instanceof Array?e.forEach(function(e){return A(e,t,n,i)}):(e.addEventListener(t,n,i),void Ae._handlers.push({element:e,event:t,handler:n,options:i}))}function N(e){return function(t){1===t.which&&e(t)}}function Y(){xe("onChange")}function Q(){if(Ae.config.wrap&&["open","close","toggle","clear"].forEach(function(e){Array.prototype.forEach.call(Ae.element.querySelectorAll("[data-"+e+"]"),function(t){return A(t,"click",Ae[e])})}),Ae.isMobile)je();else{var t=e(he,50);if(Ae._debouncedChange=e(Y,j),Ae.daysContainer&&!/iPhone|iPad|iPod/i.test(navigator.userAgent)&&A(Ae.daysContainer,"mouseover",function(e){"range"===Ae.config.mode&&pe(e.target)}),A(window.document.body,"keydown",de),Ae.config.inline||Ae.config.static||A(window,"resize",t),void 0!==window.ontouchstart?A(window.document,"touchstart",se):A(window.document,"mousedown",N(se)),A(window.document,"focus",se,{capture:!0}),!0===Ae.config.clickOpens&&(A(Ae._input,"focus",Ae.open),A(Ae._input,"mousedown",N(Ae.open))),void 0!==Ae.daysContainer&&(A(Ae.monthNav,"mousedown",N(Se)),A(Ae.monthNav,["keyup","increment"],H),A(Ae.daysContainer,"mousedown",N(ke))),void 0!==Ae.timeContainer&&void 0!==Ae.minuteElement&&void 0!==Ae.hourElement){A(Ae.timeContainer,["increment"],F),A(Ae.timeContainer,"blur",F,{capture:!0}),A(Ae.timeContainer,"mousedown",N(R)),A([Ae.hourElement,Ae.minuteElement],["focus","click"],function(e){return e.target.select()}),void 0!==Ae.secondElement&&A(Ae.secondElement,"focus",function(){return Ae.secondElement&&Ae.secondElement.select()}),void 0!==Ae.amPM&&A(Ae.amPM,"mousedown",N(function(e){F(e),Y()}))}}}function L(e,t){var n=void 0!==e?Ae.parseDate(e):Ae.latestSelectedDateObj||(Ae.config.minDate&&Ae.config.minDate>Ae.now?Ae.config.minDate:Ae.config.maxDate&&Ae.config.maxDate1),Ae.calendarContainer.appendChild(e);var o=void 0!==Ae.config.appendTo&&void 0!==Ae.config.appendTo.nodeType;if((Ae.config.inline||Ae.config.static)&&(Ae.calendarContainer.classList.add(Ae.config.inline?"inline":"static"),Ae.config.inline&&(!o&&Ae.element.parentNode?Ae.element.parentNode.insertBefore(Ae.calendarContainer,Ae._input.nextSibling):void 0!==Ae.config.appendTo&&Ae.config.appendTo.appendChild(Ae.calendarContainer)),Ae.config.static)){var l=n("div","flatpickr-wrapper");Ae.element.parentNode&&Ae.element.parentNode.insertBefore(l,Ae.element),l.appendChild(Ae.element),Ae.altInput&&l.appendChild(Ae.altInput),l.appendChild(Ae.calendarContainer)}Ae.config.static||Ae.config.inline||(void 0!==Ae.config.appendTo?Ae.config.appendTo:window.document.body).appendChild(Ae.calendarContainer)}function U(e,i,r,a){var o=ce(i,!0),l=n("span","flatpickr-day "+e,i.getDate().toString());return l.dateObj=i,l.$i=a,l.setAttribute("aria-label",Ae.formatDate(i,Ae.config.ariaDateFormat)),-1===e.indexOf("hidden")&&0===s(i,Ae.now)&&(Ae.todayDateElem=l,l.classList.add("today"),l.setAttribute("aria-current","date")),o?(l.tabIndex=-1,Ee(i)&&(l.classList.add("selected"),Ae.selectedDateElem=l,"range"===Ae.config.mode&&(t(l,"startRange",Ae.selectedDates[0]&&0===s(i,Ae.selectedDates[0],!0)),t(l,"endRange",Ae.selectedDates[1]&&0===s(i,Ae.selectedDates[1],!0)),"nextMonthDay"===e&&l.classList.add("inRange")))):l.classList.add("flatpickr-disabled"),"range"===Ae.config.mode&&$e(i)&&!Ee(i)&&l.classList.add("inRange"),Ae.weekNumbers&&1===Ae.config.showMonths&&"prevMonthDay"!==e&&r%7==1&&Ae.weekNumbers.insertAdjacentHTML("beforeend",""+Ae.config.getWeek(i)+""),xe("onDayCreate",l),l}function W(e){e.focus(),"range"===Ae.config.mode&&pe(e)}function q(e){for(var t=e>0?0:Ae.config.showMonths-1,n=e>0?Ae.config.showMonths:-1,i=t;i!=n;i+=e)for(var r=Ae.daysContainer.children[i],a=e>0?0:r.children.length-1,o=e>0?r.children.length:-1,l=a;l!=o;l+=e){var s=r.children[l];if(-1===s.className.indexOf("hidden")&&ce(s.dateObj))return s}}function K(e,t){for(var n=-1===e.className.indexOf("Month")?e.dateObj.getMonth():Ae.currentMonth,i=t>0?Ae.config.showMonths:-1,r=t>0?1:-1,a=n-Ae.currentMonth;a!=i;a+=r)for(var o=Ae.daysContainer.children[a],l=n-Ae.currentMonth===a?e.$i+t:t<0?o.children.length-1:0,s=o.children.length,u=l;u>=0&&u0?s:-1);u+=r){var c=o.children[u];if(-1===c.className.indexOf("hidden")&&ce(c.dateObj)&&Math.abs(e.$i-u)>=Math.abs(t))return W(c)}Ae.changeMonth(r),V(q(r),0)}function V(e,t){var n=fe(document.activeElement||document.body),i=void 0!==e?e:n?document.activeElement:void 0!==Ae.selectedDateElem&&fe(Ae.selectedDateElem)?Ae.selectedDateElem:void 0!==Ae.todayDateElem&&fe(Ae.todayDateElem)?Ae.todayDateElem:q(t>0?1:-1);return void 0===i?Ae._input.focus():n?void K(i,t):W(i)}function J(e,t){for(var i=(new Date(e,t,1).getDay()-Ae.l10n.firstDayOfWeek+7)%7,r=Ae.utils.getDaysInMonth((t-1+12)%12),a=Ae.utils.getDaysInMonth(t),o=window.document.createDocumentFragment(),l=Ae.config.showMonths>1,s=l?"prevMonthDay hidden":"prevMonthDay",u=l?"nextMonthDay hidden":"nextMonthDay",c=r+1-i,f=0;c<=r;c++,f++)o.appendChild(U(s,new Date(e,t-1,c),c,f));for(c=1;c<=a;c++,f++)o.appendChild(U("",new Date(e,t,c),c,f));for(var d=a+1;d<=42-i&&(1===Ae.config.showMonths||f%7!=0);d++,f++)o.appendChild(U(u,new Date(e,t+1,d%a),d,f));var p=n("div","dayContainer");return p.appendChild(o),p}function G(){if(void 0!==Ae.daysContainer){i(Ae.daysContainer),Ae.weekNumbers&&i(Ae.weekNumbers);for(var e=document.createDocumentFragment(),t=0;t1||"dropdown"!==Ae.config.monthSelectorType)){Ae.monthsDropdownContainer.tabIndex=-1,Ae.monthsDropdownContainer.innerHTML="";for(var e=0;e<12;e++)if(function(e){return!(void 0!==Ae.config.minDate&&Ae.currentYear===Ae.config.minDate.getFullYear()&&eAe.config.maxDate.getMonth())}(e)){var t=n("option","flatpickr-monthDropdown-month");t.value=new Date(Ae.currentYear,e).getMonth().toString(),t.textContent=b(e,Ae.config.shorthandCurrentMonth,Ae.l10n),t.tabIndex=-1,Ae.currentMonth===e&&(t.selected=!0),Ae.monthsDropdownContainer.appendChild(t)}}}function X(){var e,t=n("div","flatpickr-month"),i=window.document.createDocumentFragment();Ae.config.showMonths>1||"static"===Ae.config.monthSelectorType?e=n("span","cur-month"):(Ae.monthsDropdownContainer=n("select","flatpickr-monthDropdown-months"),A(Ae.monthsDropdownContainer,"change",function(e){var t=e.target,n=parseInt(t.value,10);Ae.changeMonth(n-Ae.currentMonth),xe("onMonthChange")}),Z(),e=Ae.monthsDropdownContainer);var r=o("cur-year",{tabindex:"-1"}),a=r.getElementsByTagName("input")[0];a.setAttribute("aria-label",Ae.l10n.yearAriaLabel),Ae.config.minDate&&a.setAttribute("min",Ae.config.minDate.getFullYear().toString()),Ae.config.maxDate&&(a.setAttribute("max",Ae.config.maxDate.getFullYear().toString()),a.disabled=!!Ae.config.minDate&&Ae.config.minDate.getFullYear()===Ae.config.maxDate.getFullYear());var l=n("div","flatpickr-current-month");return l.appendChild(e),l.appendChild(r),i.appendChild(l),t.appendChild(i),{container:t,yearElement:a,monthElement:e}}function ee(){i(Ae.monthNav),Ae.monthNav.appendChild(Ae.prevMonthNav),Ae.config.showMonths&&(Ae.yearElements=[],Ae.monthElements=[]);for(var e=Ae.config.showMonths;e--;){var t=X();Ae.yearElements.push(t.yearElement),Ae.monthElements.push(t.monthElement),Ae.monthNav.appendChild(t.container)}Ae.monthNav.appendChild(Ae.nextMonthNav)}function te(){return Ae.monthNav=n("div","flatpickr-months"),Ae.yearElements=[],Ae.monthElements=[],Ae.prevMonthNav=n("span","flatpickr-prev-month"),Ae.prevMonthNav.innerHTML=Ae.config.prevArrow,Ae.nextMonthNav=n("span","flatpickr-next-month"),Ae.nextMonthNav.innerHTML=Ae.config.nextArrow,ee(),Object.defineProperty(Ae,"_hidePrevMonthArrow",{get:function(){return Ae.__hidePrevMonthArrow},set:function(e){Ae.__hidePrevMonthArrow!==e&&(t(Ae.prevMonthNav,"flatpickr-disabled",e),Ae.__hidePrevMonthArrow=e)}}),Object.defineProperty(Ae,"_hideNextMonthArrow",{get:function(){return Ae.__hideNextMonthArrow},set:function(e){Ae.__hideNextMonthArrow!==e&&(t(Ae.nextMonthNav,"flatpickr-disabled",e),Ae.__hideNextMonthArrow=e)}}),Ae.currentYearElement=Ae.yearElements[0],Te(),Ae.monthNav}function ne(){Ae.calendarContainer.classList.add("hasTime"),Ae.config.noCalendar&&Ae.calendarContainer.classList.add("noCalendar"),Ae.timeContainer=n("div","flatpickr-time"),Ae.timeContainer.tabIndex=-1;var e=n("span","flatpickr-time-separator",":"),t=o("flatpickr-hour",{"aria-label":Ae.l10n.hourAriaLabel});Ae.hourElement=t.getElementsByTagName("input")[0];var i=o("flatpickr-minute",{"aria-label":Ae.l10n.minuteAriaLabel});if(Ae.minuteElement=i.getElementsByTagName("input")[0],Ae.hourElement.tabIndex=Ae.minuteElement.tabIndex=-1,Ae.hourElement.value=m(Ae.latestSelectedDateObj?Ae.latestSelectedDateObj.getHours():Ae.config.time_24hr?Ae.config.defaultHour:$(Ae.config.defaultHour)),Ae.minuteElement.value=m(Ae.latestSelectedDateObj?Ae.latestSelectedDateObj.getMinutes():Ae.config.defaultMinute),Ae.hourElement.setAttribute("step",Ae.config.hourIncrement.toString()),Ae.minuteElement.setAttribute("step",Ae.config.minuteIncrement.toString()),Ae.hourElement.setAttribute("min",Ae.config.time_24hr?"0":"1"),Ae.hourElement.setAttribute("max",Ae.config.time_24hr?"23":"12"),Ae.minuteElement.setAttribute("min","0"),Ae.minuteElement.setAttribute("max","59"),Ae.timeContainer.appendChild(t),Ae.timeContainer.appendChild(e),Ae.timeContainer.appendChild(i),Ae.config.time_24hr&&Ae.timeContainer.classList.add("time24hr"),Ae.config.enableSeconds){Ae.timeContainer.classList.add("hasSeconds");var r=o("flatpickr-second");Ae.secondElement=r.getElementsByTagName("input")[0],Ae.secondElement.value=m(Ae.latestSelectedDateObj?Ae.latestSelectedDateObj.getSeconds():Ae.config.defaultSeconds),Ae.secondElement.setAttribute("step",Ae.minuteElement.getAttribute("step")),Ae.secondElement.setAttribute("min","0"),Ae.secondElement.setAttribute("max","59"),Ae.timeContainer.appendChild(n("span","flatpickr-time-separator",":")),Ae.timeContainer.appendChild(r)}return Ae.config.time_24hr||(Ae.amPM=n("span","flatpickr-am-pm",Ae.l10n.amPM[g((Ae.latestSelectedDateObj?Ae.hourElement.value:Ae.config.defaultHour)>11)]),Ae.amPM.title=Ae.l10n.toggleTitle,Ae.amPM.tabIndex=-1,Ae.timeContainer.appendChild(Ae.amPM)),Ae.timeContainer}function ie(){Ae.weekdayContainer?i(Ae.weekdayContainer):Ae.weekdayContainer=n("div","flatpickr-weekdays");for(var e=Ae.config.showMonths;e--;){var t=n("div","flatpickr-weekdaycontainer");Ae.weekdayContainer.appendChild(t)}return re(),Ae.weekdayContainer}function re(){var e=Ae.l10n.firstDayOfWeek,t=Ae.l10n.weekdays.shorthand.slice();e>0&&e\n "+t.join("")+"\n \n "}function ae(){Ae.calendarContainer.classList.add("hasWeeks");var e=n("div","flatpickr-weekwrapper");e.appendChild(n("span","flatpickr-weekday",Ae.l10n.weekAbbreviation));var t=n("div","flatpickr-weeks");return e.appendChild(t),{weekWrapper:e,weekNumbers:t}}function oe(e,t){void 0===t&&(t=!0);var n=t?e:e-Ae.currentMonth;n<0&&!0===Ae._hidePrevMonthArrow||n>0&&!0===Ae._hideNextMonthArrow||(Ae.currentMonth+=n,(Ae.currentMonth<0||Ae.currentMonth>11)&&(Ae.currentYear+=Ae.currentMonth>11?1:-1,Ae.currentMonth=(Ae.currentMonth+12)%12,xe("onYearChange"),Z()),G(),xe("onMonthChange"),Te())}function le(e){return!(!Ae.config.appendTo||!Ae.config.appendTo.contains(e))||Ae.calendarContainer.contains(e)}function se(e){if(Ae.isOpen&&!Ae.config.inline){var t=l(e),n=le(t),i=t===Ae.input||t===Ae.altInput||Ae.element.contains(t)||e.path&&e.path.indexOf&&(~e.path.indexOf(Ae.input)||~e.path.indexOf(Ae.altInput)),r="blur"===e.type?i&&e.relatedTarget&&!le(e.relatedTarget):!i&&!n&&!le(e.relatedTarget),a=!Ae.config.ignoredFocusElements.some(function(e){return e.contains(t)});r&&a&&(Ae.close(),"range"===Ae.config.mode&&1===Ae.selectedDates.length&&(Ae.clear(!1),Ae.redraw()))}}function ue(e){if(!(!e||Ae.config.minDate&&eAe.config.maxDate.getFullYear())){var t=e,n=Ae.currentYear!==t;Ae.currentYear=t||Ae.currentYear,Ae.config.maxDate&&Ae.currentYear===Ae.config.maxDate.getFullYear()?Ae.currentMonth=Math.min(Ae.config.maxDate.getMonth(),Ae.currentMonth):Ae.config.minDate&&Ae.currentYear===Ae.config.minDate.getFullYear()&&(Ae.currentMonth=Math.max(Ae.config.minDate.getMonth(),Ae.currentMonth)),n&&(Ae.redraw(),xe("onYearChange"),Z())}}function ce(e,t){void 0===t&&(t=!0);var n=Ae.parseDate(e,void 0,t);if(Ae.config.minDate&&n&&s(n,Ae.config.minDate,void 0!==t?t:!Ae.minDateHasTime)<0||Ae.config.maxDate&&n&&s(n,Ae.config.maxDate,void 0!==t?t:!Ae.maxDateHasTime)>0)return!1;if(0===Ae.config.enable.length&&0===Ae.config.disable.length)return!0;if(void 0===n)return!1;for(var i=Ae.config.enable.length>0,r=i?Ae.config.enable:Ae.config.disable,o=0,l=void 0;o=l.from.getTime()&&n.getTime()<=l.to.getTime())return i}return!i}function fe(e){return void 0!==Ae.daysContainer&&(-1===e.className.indexOf("hidden")&&Ae.daysContainer.contains(e))}function de(e){var t=e.target===Ae._input,n=Ae.config.allowInput,i=Ae.isOpen&&(!n||!t),r=Ae.config.inline&&t&&!n;if(13===e.keyCode&&t){if(n)return Ae.setDate(Ae._input.value,!0,e.target===Ae.altInput?Ae.config.altFormat:Ae.config.dateFormat),e.target.blur();Ae.open()}else if(le(e.target)||i||r){var a=!!Ae.timeContainer&&Ae.timeContainer.contains(e.target);switch(e.keyCode){case 13:a?(e.preventDefault(),F(),De()):ke(e);break;case 27:e.preventDefault(),De();break;case 8:case 46:t&&!Ae.config.allowInput&&(e.preventDefault(),Ae.clear());break;case 37:case 39:if(a||t)Ae.hourElement&&Ae.hourElement.focus();else if(e.preventDefault(),void 0!==Ae.daysContainer&&(!1===n||document.activeElement&&fe(document.activeElement))){var o=39===e.keyCode?1:-1;e.ctrlKey?(e.stopPropagation(),oe(o),V(q(1),0)):V(void 0,o)}break;case 38:case 40:e.preventDefault();var l=40===e.keyCode?1:-1;Ae.daysContainer&&void 0!==e.target.$i||e.target===Ae.input?e.ctrlKey?(e.stopPropagation(),ue(Ae.currentYear-l),V(q(1),0)):a||V(void 0,7*l):e.target===Ae.currentYearElement?ue(Ae.currentYear-l):Ae.config.enableTime&&(!a&&Ae.hourElement&&Ae.hourElement.focus(),F(e),Ae._debouncedChange());break;case 9:if(a){var s=[Ae.hourElement,Ae.minuteElement,Ae.secondElement,Ae.amPM].concat(Ae.pluginElements).filter(function(e){return e}),u=s.indexOf(e.target);if(-1!==u){var c=s[u+(e.shiftKey?-1:1)];e.preventDefault(),(c||Ae._input).focus()}}else!Ae.config.noCalendar&&Ae.daysContainer&&Ae.daysContainer.contains(e.target)&&e.shiftKey&&(e.preventDefault(),Ae._input.focus())}}if(void 0!==Ae.amPM&&e.target===Ae.amPM)switch(e.key){case Ae.l10n.amPM[0].charAt(0):case Ae.l10n.amPM[0].charAt(0).toLowerCase():Ae.amPM.textContent=Ae.l10n.amPM[0],T(),Ie();break;case Ae.l10n.amPM[1].charAt(0):case Ae.l10n.amPM[1].charAt(0).toLowerCase():Ae.amPM.textContent=Ae.l10n.amPM[1],T(),Ie()}(t||le(e.target))&&xe("onKeyDown",e)}function pe(e){if(1===Ae.selectedDates.length&&(!e||e.classList.contains("flatpickr-day")&&!e.classList.contains("flatpickr-disabled"))){for(var t=e?e.dateObj.getTime():Ae.days.firstElementChild.dateObj.getTime(),n=Ae.parseDate(Ae.selectedDates[0],void 0,!0).getTime(),i=Math.min(t,Ae.selectedDates[0].getTime()),r=Math.max(t,Ae.selectedDates[0].getTime()),a=!1,o=0,l=0,s=i;si&&so)?o=s:s>n&&(!l||s0&&u0&&u>l;f?(s.classList.add("notAllowed"),["inRange","startRange","endRange"].forEach(function(e){s.classList.remove(e)})):a&&!f||(["startRange","inRange","endRange","notAllowed"].forEach(function(e){s.classList.remove(e)}),void 0!==e&&(e.classList.add(t<=Ae.selectedDates[0].getTime()?"startRange":"endRange"),nt&&u===n&&s.classList.add("endRange"),u>=o&&(0===l||u<=l)&&O(u,n,t)&&s.classList.add("inRange")))}(f)}}function he(){!Ae.isOpen||Ae.config.static||Ae.config.inline||be()}function me(){Ae.setDate(void 0!==Ae.config.minDate?new Date(Ae.config.minDate.getTime()):new Date,!0),I(),Ie()}function ge(e){return function(t){var n=Ae.config["_"+e+"Date"]=Ae.parseDate(t,Ae.config.dateFormat),i=Ae.config["_"+("min"===e?"max":"min")+"Date"];void 0!==n&&(Ae["min"===e?"minDateHasTime":"maxDateHasTime"]=n.getHours()>0||n.getMinutes()>0||n.getSeconds()>0),Ae.selectedDates&&(Ae.selectedDates=Ae.selectedDates.filter(function(e){return ce(e)}),Ae.selectedDates.length||"min"!==e||P(n),Ie()),Ae.daysContainer&&(we(),void 0!==n?Ae.currentYearElement[e]=n.getFullYear().toString():Ae.currentYearElement.removeAttribute(e),Ae.currentYearElement.disabled=!!i&&void 0!==n&&i.getFullYear()===n.getFullYear())}}function ve(){var e=["wrap","weekNumbers","allowInput","clickOpens","time_24hr","enableTime","noCalendar","altInput","shorthandCurrentMonth","inline","static","enableSeconds","disableMobile"],t=f({},c,JSON.parse(JSON.stringify(u.dataset||{}))),n={};Ae.config.parseDate=t.parseDate,Ae.config.formatDate=t.formatDate,Object.defineProperty(Ae.config,"enable",{get:function(){return Ae.config._enable},set:function(e){Ae.config._enable=Me(e)}}),Object.defineProperty(Ae.config,"disable",{get:function(){return Ae.config._disable},set:function(e){Ae.config._disable=Me(e)}});var i="time"===t.mode;if(!t.dateFormat&&(t.enableTime||i)){var r=x.defaultConfig.dateFormat||p.dateFormat;n.dateFormat=t.noCalendar||i?"H:i"+(t.enableSeconds?":S":""):r+" H:i"+(t.enableSeconds?":S":"")}if(t.altInput&&(t.enableTime||i)&&!t.altFormat){var a=x.defaultConfig.altFormat||p.altFormat;n.altFormat=t.noCalendar||i?"h:i"+(t.enableSeconds?":S K":" K"):a+" h:i"+(t.enableSeconds?":S":"")+" K"}t.altInputClass||(Ae.config.altInputClass=Ae.input.className+" "+Ae.config.altInputClass),Object.defineProperty(Ae.config,"minDate",{get:function(){return Ae.config._minDate},set:ge("min")}),Object.defineProperty(Ae.config,"maxDate",{get:function(){return Ae.config._maxDate},set:ge("max")});var o=function(e){return function(t){Ae.config["min"===e?"_minTime":"_maxTime"]=Ae.parseDate(t,"H:i")}};Object.defineProperty(Ae.config,"minTime",{get:function(){return Ae.config._minTime},set:o("min")}),Object.defineProperty(Ae.config,"maxTime",{get:function(){return Ae.config._maxTime},set:o("max")}),"time"===t.mode&&(Ae.config.noCalendar=!0,Ae.config.enableTime=!0),Object.assign(Ae.config,n,t);for(l=0;l-1?Ae.config[h]=v(s[h]).map(w).concat(Ae.config[h]):void 0===t[h]&&(Ae.config[h]=s[h])}xe("onParseConfig")}function ye(){"object"!==a(Ae.config.locale)&&void 0===x.l10ns[Ae.config.locale]&&Ae.config.errorHandler(new Error("flatpickr: invalid locale "+Ae.config.locale)),Ae.l10n=f({},x.l10ns.default,"object"===a(Ae.config.locale)?Ae.config.locale:"default"!==Ae.config.locale?x.l10ns[Ae.config.locale]:void 0),D.K="("+Ae.l10n.amPM[0]+"|"+Ae.l10n.amPM[1]+"|"+Ae.l10n.amPM[0].toLowerCase()+"|"+Ae.l10n.amPM[1].toLowerCase()+")",void 0===f({},c,JSON.parse(JSON.stringify(u.dataset||{}))).time_24hr&&void 0===x.defaultConfig.time_24hr&&(Ae.config.time_24hr=Ae.l10n.time_24hr),Ae.formatDate=C(Ae),Ae.parseDate=M({config:Ae.config,l10n:Ae.l10n})}function be(e){if(void 0!==Ae.calendarContainer){xe("onPreCalendarPosition");var n=e||Ae._positionElement,i=Array.prototype.reduce.call(Ae.calendarContainer.children,function(e,t){return e+t.offsetHeight},0),r=Ae.calendarContainer.offsetWidth,a=Ae.config.position.split(" "),o=a[0],l=a.length>1?a[1]:null,s=n.getBoundingClientRect(),u=window.innerHeight-s.bottom,c="above"===o||"below"!==o&&ui,f=window.pageYOffset+s.top+(c?-i-2:n.offsetHeight+2);if(t(Ae.calendarContainer,"arrowTop",!c),t(Ae.calendarContainer,"arrowBottom",c),!Ae.config.inline){var d=window.pageXOffset+s.left-(null!=l&&"center"===l?(r-s.width)/2:0),p=window.document.body.offsetWidth-s.right,h=d+r>window.document.body.offsetWidth,m=p+r>window.document.body.offsetWidth;if(t(Ae.calendarContainer,"rightMost",h),!Ae.config.static)if(Ae.calendarContainer.style.top=f+"px",h)if(m){var g=document.styleSheets[0];if(void 0===g)return;var v=window.document.body.offsetWidth,y=Math.max(0,v/2-r/2),b=g.cssRules.length,w="{left:"+s.left+"px;right:auto;}";t(Ae.calendarContainer,"rightMost",!1),t(Ae.calendarContainer,"centerMost",!0),g.insertRule(".flatpickr-calendar.centerMost:before,.flatpickr-calendar.centerMost:after"+w,b),Ae.calendarContainer.style.left=y+"px",Ae.calendarContainer.style.right="auto"}else Ae.calendarContainer.style.left="auto",Ae.calendarContainer.style.right=p+"px";else Ae.calendarContainer.style.left=d+"px",Ae.calendarContainer.style.right="auto"}}}function we(){Ae.config.noCalendar||Ae.isMobile||(Te(),G())}function De(){Ae._input.focus(),-1!==window.navigator.userAgent.indexOf("MSIE")||void 0!==navigator.msMaxTouchPoints?setTimeout(Ae.close,0):Ae.close()}function ke(e){e.preventDefault(),e.stopPropagation();var t=r(e.target,function(e){return e.classList&&e.classList.contains("flatpickr-day")&&!e.classList.contains("flatpickr-disabled")&&!e.classList.contains("notAllowed")});if(void 0!==t){var n=t,i=Ae.latestSelectedDateObj=new Date(n.dateObj.getTime()),a=(i.getMonth()Ae.currentMonth+Ae.config.showMonths-1)&&"range"!==Ae.config.mode;if(Ae.selectedDateElem=n,"single"===Ae.config.mode)Ae.selectedDates=[i];else if("multiple"===Ae.config.mode){var o=Ee(i);o?Ae.selectedDates.splice(parseInt(o),1):Ae.selectedDates.push(i)}else"range"===Ae.config.mode&&(2===Ae.selectedDates.length&&Ae.clear(!1,!1),Ae.latestSelectedDateObj=i,Ae.selectedDates.push(i),0!==s(i,Ae.selectedDates[0],!0)&&Ae.selectedDates.sort(function(e,t){return e.getTime()-t.getTime()}));if(T(),a){var l=Ae.currentYear!==i.getFullYear();Ae.currentYear=i.getFullYear(),Ae.currentMonth=i.getMonth(),l&&(xe("onYearChange"),Z()),xe("onMonthChange")}if(Te(),G(),Ie(),Ae.config.enableTime&&setTimeout(function(){return Ae.showTimeInput=!0},50),a||"range"===Ae.config.mode||1!==Ae.config.showMonths?void 0!==Ae.selectedDateElem&&void 0===Ae.hourElement&&Ae.selectedDateElem&&Ae.selectedDateElem.focus():W(n),void 0!==Ae.hourElement&&void 0!==Ae.hourElement&&Ae.hourElement.focus(),Ae.config.closeOnSelect){var u="single"===Ae.config.mode&&!Ae.config.enableTime,c="range"===Ae.config.mode&&2===Ae.selectedDates.length&&!Ae.config.enableTime;(u||c)&&De()}Y()}}function Ce(e,t){var n=[];if(e instanceof Array)n=e.map(function(e){return Ae.parseDate(e,t)});else if(e instanceof Date||"number"==typeof e)n=[Ae.parseDate(e,t)];else if("string"==typeof e)switch(Ae.config.mode){case"single":case"time":n=[Ae.parseDate(e,t)];break;case"multiple":n=e.split(Ae.config.conjunction).map(function(e){return Ae.parseDate(e,t)});break;case"range":n=e.split(Ae.l10n.rangeSeparator).map(function(e){return Ae.parseDate(e,t)})}else Ae.config.errorHandler(new Error("Invalid date supplied: "+JSON.stringify(e)));Ae.selectedDates=n.filter(function(e){return e instanceof Date&&ce(e,!1)}),"range"===Ae.config.mode&&Ae.selectedDates.sort(function(e,t){return e.getTime()-t.getTime()})}function Me(e){return e.slice().map(function(e){return"string"==typeof e||"number"==typeof e||e instanceof Date?Ae.parseDate(e,void 0,!0):e&&"object"===(void 0===e?"undefined":a(e))&&e.from&&e.to?{from:Ae.parseDate(e.from,void 0),to:Ae.parseDate(e.to,void 0)}:e}).filter(function(e){return e})}function Oe(){Ae.selectedDates=[],Ae.now=Ae.parseDate(Ae.config.now)||new Date;var e=Ae.config.defaultDate||("INPUT"!==Ae.input.nodeName&&"TEXTAREA"!==Ae.input.nodeName||!Ae.input.placeholder||Ae.input.value!==Ae.input.placeholder?Ae.input.value:null);e&&Ce(e,Ae.config.dateFormat),Ae._initialDate=Ae.selectedDates.length>0?Ae.selectedDates[0]:Ae.config.minDate&&Ae.config.minDate.getTime()>Ae.now.getTime()?Ae.config.minDate:Ae.config.maxDate&&Ae.config.maxDate.getTime()0&&(Ae.latestSelectedDateObj=Ae.selectedDates[0]),void 0!==Ae.config.minTime&&(Ae.config.minTime=Ae.parseDate(Ae.config.minTime,"H:i")),void 0!==Ae.config.maxTime&&(Ae.config.maxTime=Ae.parseDate(Ae.config.maxTime,"H:i")),Ae.minDateHasTime=!!Ae.config.minDate&&(Ae.config.minDate.getHours()>0||Ae.config.minDate.getMinutes()>0||Ae.config.minDate.getSeconds()>0),Ae.maxDateHasTime=!!Ae.config.maxDate&&(Ae.config.maxDate.getHours()>0||Ae.config.maxDate.getMinutes()>0||Ae.config.maxDate.getSeconds()>0),Object.defineProperty(Ae,"showTimeInput",{get:function(){return Ae._showTimeInput},set:function(e){Ae._showTimeInput=e,Ae.calendarContainer&&t(Ae.calendarContainer,"showTimeInput",e),Ae.isOpen&&be()}})}function _e(){Ae.input=Ae.config.wrap?u.querySelector("[data-input]"):u,Ae.input?(Ae.input._type=Ae.input.type,Ae.input.type="text",Ae.input.classList.add("flatpickr-input"),Ae._input=Ae.input,Ae.config.altInput&&(Ae.altInput=n(Ae.input.nodeName,Ae.config.altInputClass),Ae._input=Ae.altInput,Ae.altInput.placeholder=Ae.input.placeholder,Ae.altInput.disabled=Ae.input.disabled,Ae.altInput.required=Ae.input.required,Ae.altInput.tabIndex=Ae.input.tabIndex,Ae.altInput.type="text",Ae.input.setAttribute("type","hidden"),!Ae.config.static&&Ae.input.parentNode&&Ae.input.parentNode.insertBefore(Ae.altInput,Ae.input.nextSibling)),Ae.config.allowInput||Ae._input.setAttribute("readonly","readonly"),Ae._positionElement=Ae.config.positionElement||Ae._input):Ae.config.errorHandler(new Error("Invalid input element specified"))}function je(){var e=Ae.config.enableTime?Ae.config.noCalendar?"time":"datetime-local":"date";Ae.mobileInput=n("input",Ae.input.className+" flatpickr-mobile"),Ae.mobileInput.step=Ae.input.getAttribute("step")||"any",Ae.mobileInput.tabIndex=1,Ae.mobileInput.type=e,Ae.mobileInput.disabled=Ae.input.disabled,Ae.mobileInput.required=Ae.input.required,Ae.mobileInput.placeholder=Ae.input.placeholder,Ae.mobileFormatStr="datetime-local"===e?"Y-m-d\\TH:i:S":"date"===e?"Y-m-d":"H:i:S",Ae.selectedDates.length>0&&(Ae.mobileInput.defaultValue=Ae.mobileInput.value=Ae.formatDate(Ae.selectedDates[0],Ae.mobileFormatStr)),Ae.config.minDate&&(Ae.mobileInput.min=Ae.formatDate(Ae.config.minDate,"Y-m-d")),Ae.config.maxDate&&(Ae.mobileInput.max=Ae.formatDate(Ae.config.maxDate,"Y-m-d")),Ae.input.type="hidden",void 0!==Ae.altInput&&(Ae.altInput.type="hidden");try{Ae.input.parentNode&&Ae.input.parentNode.insertBefore(Ae.mobileInput,Ae.input.nextSibling)}catch(e){}A(Ae.mobileInput,"change",function(e){Ae.setDate(e.target.value,!1,Ae.mobileFormatStr),xe("onChange"),xe("onClose")})}function xe(e,t){if(void 0!==Ae.config){var n=Ae.config[e];if(void 0!==n&&n.length>0)for(var i=0;n[i]&&i=0&&s(e,Ae.selectedDates[1])<=0)}function Te(){Ae.config.noCalendar||Ae.isMobile||!Ae.monthNav||(Ae.yearElements.forEach(function(e,t){var n=new Date(Ae.currentYear,Ae.currentMonth,1);n.setMonth(Ae.currentMonth+t),Ae.config.showMonths>1||"static"===Ae.config.monthSelectorType?Ae.monthElements[t].textContent=b(n.getMonth(),Ae.config.shorthandCurrentMonth,Ae.l10n)+" ":Ae.monthsDropdownContainer.value=n.getMonth().toString(),e.value=n.getFullYear().toString()}),Ae._hidePrevMonthArrow=void 0!==Ae.config.minDate&&(Ae.currentYear===Ae.config.minDate.getFullYear()?Ae.currentMonth<=Ae.config.minDate.getMonth():Ae.currentYearAe.config.maxDate.getMonth():Ae.currentYear>Ae.config.maxDate.getFullYear()))}function Pe(e){return Ae.selectedDates.map(function(t){return Ae.formatDate(t,e)}).filter(function(e,t,n){return"range"!==Ae.config.mode||Ae.config.enableTime||n.indexOf(e)===t}).join("range"!==Ae.config.mode?Ae.config.conjunction:Ae.l10n.rangeSeparator)}function Ie(e){void 0===e&&(e=!0),void 0!==Ae.mobileInput&&Ae.mobileFormatStr&&(Ae.mobileInput.value=void 0!==Ae.latestSelectedDateObj?Ae.formatDate(Ae.latestSelectedDateObj,Ae.mobileFormatStr):""),Ae.input.value=Pe(Ae.config.dateFormat),void 0!==Ae.altInput&&(Ae.altInput.value=Pe(Ae.config.altFormat)),!1!==e&&xe("onValueUpdate")}function Se(e){var t=Ae.prevMonthNav.contains(e.target),n=Ae.nextMonthNav.contains(e.target);t||n?oe(t?-1:1):Ae.yearElements.indexOf(e.target)>=0?e.target.select():e.target.classList.contains("arrowUp")?Ae.changeYear(Ae.currentYear+1):e.target.classList.contains("arrowDown")&&Ae.changeYear(Ae.currentYear-1)}function He(e){e.preventDefault();var t="keydown"===e.type,n=e.target;void 0!==Ae.amPM&&e.target===Ae.amPM&&(Ae.amPM.textContent=Ae.l10n.amPM[g(Ae.amPM.textContent===Ae.l10n.amPM[0])]);var i=parseFloat(n.getAttribute("min")),r=parseFloat(n.getAttribute("max")),a=parseFloat(n.getAttribute("step")),o=parseInt(n.value,10),l=o+a*(e.delta||(t?38===e.which?1:-1:0));if(void 0!==n.value&&2===n.value.length){var s=n===Ae.hourElement,u=n===Ae.minuteElement;lr&&(l=n===Ae.hourElement?l-r-g(!Ae.amPM):i,u&&B(void 0,1,Ae.hourElement)),Ae.amPM&&s&&(1===a?l+o===23:Math.abs(l-o)>a)&&(Ae.amPM.textContent=Ae.l10n.amPM[g(Ae.amPM.textContent===Ae.l10n.amPM[0])]),n.value=m(l)}}var Ae={config:f({},p,x.defaultConfig),l10n:h};Ae.parseDate=M({config:Ae.config,l10n:Ae.l10n}),Ae._handlers=[],Ae.pluginElements=[],Ae.loadedPlugins=[],Ae._bind=A,Ae._setHoursFromDate=P,Ae._positionCalendar=be,Ae.changeMonth=oe,Ae.changeYear=ue,Ae.clear=function(e,t){void 0===e&&(e=!0),void 0===t&&(t=!0),Ae.input.value="",void 0!==Ae.altInput&&(Ae.altInput.value=""),void 0!==Ae.mobileInput&&(Ae.mobileInput.value=""),Ae.selectedDates=[],Ae.latestSelectedDateObj=void 0,!0===t&&(Ae.currentYear=Ae._initialDate.getFullYear(),Ae.currentMonth=Ae._initialDate.getMonth()),Ae.showTimeInput=!1,!0===Ae.config.enableTime&&I(),Ae.redraw(),e&&xe("onChange")},Ae.close=function(){Ae.isOpen=!1,Ae.isMobile||(void 0!==Ae.calendarContainer&&Ae.calendarContainer.classList.remove("open"),void 0!==Ae._input&&Ae._input.classList.remove("active")),xe("onClose")},Ae._createElement=n,Ae.destroy=function(){void 0!==Ae.config&&xe("onDestroy");for(var e=Ae._handlers.length;e--;){var t=Ae._handlers[e];t.element.removeEventListener(t.event,t.handler,t.options)}if(Ae._handlers=[],Ae.mobileInput)Ae.mobileInput.parentNode&&Ae.mobileInput.parentNode.removeChild(Ae.mobileInput),Ae.mobileInput=void 0;else if(Ae.calendarContainer&&Ae.calendarContainer.parentNode)if(Ae.config.static&&Ae.calendarContainer.parentNode){var n=Ae.calendarContainer.parentNode;if(n.lastChild&&n.removeChild(n.lastChild),n.parentNode){for(;n.firstChild;)n.parentNode.insertBefore(n.firstChild,n);n.parentNode.removeChild(n)}}else Ae.calendarContainer.parentNode.removeChild(Ae.calendarContainer);Ae.altInput&&(Ae.input.type="text",Ae.altInput.parentNode&&Ae.altInput.parentNode.removeChild(Ae.altInput),delete Ae.altInput),Ae.input&&(Ae.input.type=Ae.input._type,Ae.input.classList.remove("flatpickr-input"),Ae.input.removeAttribute("readonly"),Ae.input.value=""),["_showTimeInput","latestSelectedDateObj","_hideNextMonthArrow","_hidePrevMonthArrow","__hideNextMonthArrow","__hidePrevMonthArrow","isMobile","isOpen","selectedDateElem","minDateHasTime","maxDateHasTime","days","daysContainer","_input","_positionElement","innerContainer","rContainer","monthNav","todayDateElem","calendarContainer","weekdayContainer","prevMonthNav","nextMonthNav","monthsDropdownContainer","currentMonthElement","currentYearElement","navigationCurrentMonth","selectedDateElem","config"].forEach(function(e){try{delete Ae[e]}catch(e){}})},Ae.isEnabled=ce,Ae.jumpToDate=L,Ae.open=function(e,t){if(void 0===t&&(t=Ae._positionElement),!0===Ae.isMobile)return e&&(e.preventDefault(),e.target&&e.target.blur()),void 0!==Ae.mobileInput&&(Ae.mobileInput.focus(),Ae.mobileInput.click()),void xe("onOpen");if(!Ae._input.disabled&&!Ae.config.inline){var n=Ae.isOpen;Ae.isOpen=!0,n||(Ae.calendarContainer.classList.add("open"),Ae._input.classList.add("active"),xe("onOpen"),be(t)),!0===Ae.config.enableTime&&!0===Ae.config.noCalendar&&(0===Ae.selectedDates.length&&me(),!1!==Ae.config.allowInput||void 0!==e&&Ae.timeContainer.contains(e.relatedTarget)||setTimeout(function(){return Ae.hourElement.select()},50))}},Ae.redraw=we,Ae.set=function(e,t){if(null!==e&&"object"===(void 0===e?"undefined":a(e))){Object.assign(Ae.config,e);for(var n in e)void 0!==Ne[n]&&Ne[n].forEach(function(e){return e()})}else Ae.config[e]=t,void 0!==Ne[e]?Ne[e].forEach(function(e){return e()}):d.indexOf(e)>-1&&(Ae.config[e]=v(t));Ae.redraw(),Ie(!1)},Ae.setDate=function(e,t,n){if(void 0===t&&(t=!1),void 0===n&&(n=Ae.config.dateFormat),0!==e&&!e||e instanceof Array&&0===e.length)return Ae.clear(t);Ce(e,n),Ae.showTimeInput=Ae.selectedDates.length>0,Ae.latestSelectedDateObj=Ae.selectedDates[Ae.selectedDates.length-1],Ae.redraw(),L(),P(),0===Ae.selectedDates.length&&Ae.clear(!1),Ie(t),t&&xe("onChange")},Ae.toggle=function(e){if(!0===Ae.isOpen)return Ae.close();Ae.open(e)};var Ne={locale:[ye,re],showMonths:[ee,k,ie],minDate:[L],maxDate:[L]};return function(){Ae.element=Ae.input=u,Ae.isOpen=!1,ve(),ye(),_e(),Oe(),y(),Ae.isMobile||z(),Q(),(Ae.selectedDates.length||Ae.config.noCalendar)&&(Ae.config.enableTime&&P(Ae.config.noCalendar?Ae.latestSelectedDateObj||Ae.config.minDate:void 0),Ie(!1)),k(),Ae.showTimeInput=Ae.selectedDates.length>0||Ae.config.noCalendar;var e=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);!Ae.isMobile&&e&&be(),xe("onReady")}(),Ae}function c(e,t){for(var n=Array.prototype.slice.call(e).filter(function(e){return e instanceof HTMLElement}),i=[],r=0;r",noCalendar:!1,now:new Date,onChange:[],onClose:[],onDayCreate:[],onDestroy:[],onKeyDown:[],onMonthChange:[],onOpen:[],onParseConfig:[],onReady:[],onValueUpdate:[],onYearChange:[],onPreCalendarPosition:[],plugins:[],position:"auto",positionElement:void 0,prevArrow:"",shorthandCurrentMonth:!1,showMonths:1,static:!1,time_24hr:!1,weekNumbers:!1,wrap:!1},h={weekdays:{shorthand:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],longhand:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},months:{shorthand:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],longhand:["January","February","March","April","May","June","July","August","September","October","November","December"]},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:0,ordinal:function(e){var t=e%100;if(t>3&&t<21)return"th";switch(t%10){case 1:return"st";case 2:return"nd";case 3:return"rd";default:return"th"}},rangeSeparator:" to ",weekAbbreviation:"Wk",scrollTitle:"Scroll to increment",toggleTitle:"Click to toggle",amPM:["AM","PM"],yearAriaLabel:"Year",hourAriaLabel:"Hour",minuteAriaLabel:"Minute",time_24hr:!1},m=function(e){return("0"+e).slice(-2)},g=function(e){return!0===e?1:0},v=function(e){return e instanceof Array?e:[e]},y=function(){},b=function(e,t,n){return n.months[t?"shorthand":"longhand"][e]},w={D:y,F:function(e,t,n){e.setMonth(n.months.longhand.indexOf(t))},G:function(e,t){e.setHours(parseFloat(t))},H:function(e,t){e.setHours(parseFloat(t))},J:function(e,t){e.setDate(parseFloat(t))},K:function(e,t,n){e.setHours(e.getHours()%12+12*g(new RegExp(n.amPM[1],"i").test(t)))},M:function(e,t,n){e.setMonth(n.months.shorthand.indexOf(t))},S:function(e,t){e.setSeconds(parseFloat(t))},U:function(e,t){return new Date(1e3*parseFloat(t))},W:function(e,t,n){var i=parseInt(t),r=new Date(e.getFullYear(),0,2+7*(i-1),0,0,0,0);return r.setDate(r.getDate()-r.getDay()+n.firstDayOfWeek),r},Y:function(e,t){e.setFullYear(parseFloat(t))},Z:function(e,t){return new Date(t)},d:function(e,t){e.setDate(parseFloat(t))},h:function(e,t){e.setHours(parseFloat(t))},i:function(e,t){e.setMinutes(parseFloat(t))},j:function(e,t){e.setDate(parseFloat(t))},l:y,m:function(e,t){e.setMonth(parseFloat(t)-1)},n:function(e,t){e.setMonth(parseFloat(t)-1)},s:function(e,t){e.setSeconds(parseFloat(t))},u:function(e,t){return new Date(parseFloat(t))},w:y,y:function(e,t){e.setFullYear(2e3+parseFloat(t))}},D={D:"(\\w+)",F:"(\\w+)",G:"(\\d\\d|\\d)",H:"(\\d\\d|\\d)",J:"(\\d\\d|\\d)\\w+",K:"",M:"(\\w+)",S:"(\\d\\d|\\d)",U:"(.+)",W:"(\\d\\d|\\d)",Y:"(\\d{4})",Z:"(.+)",d:"(\\d\\d|\\d)",h:"(\\d\\d|\\d)",i:"(\\d\\d|\\d)",j:"(\\d\\d|\\d)",l:"(\\w+)",m:"(\\d\\d|\\d)",n:"(\\d\\d|\\d)",s:"(\\d\\d|\\d)",u:"(.+)",w:"(\\d\\d|\\d)",y:"(\\d{2})"},k={Z:function(e){return e.toISOString()},D:function(e,t,n){return t.weekdays.shorthand[k.w(e,t,n)]},F:function(e,t,n){return b(k.n(e,t,n)-1,!1,t)},G:function(e,t,n){return m(k.h(e,t,n))},H:function(e){return m(e.getHours())},J:function(e,t){return void 0!==t.ordinal?e.getDate()+t.ordinal(e.getDate()):e.getDate()},K:function(e,t){return t.amPM[g(e.getHours()>11)]},M:function(e,t){return b(e.getMonth(),!0,t)},S:function(e){return m(e.getSeconds())},U:function(e){return e.getTime()/1e3},W:function(e,t,n){return n.getWeek(e)},Y:function(e){return e.getFullYear()},d:function(e){return m(e.getDate())},h:function(e){return e.getHours()%12?e.getHours()%12:12},i:function(e){return m(e.getMinutes())},j:function(e){return e.getDate()},l:function(e,t){return t.weekdays.longhand[e.getDay()]},m:function(e){return m(e.getMonth()+1)},n:function(e){return e.getMonth()+1},s:function(e){return e.getSeconds()},u:function(e){return e.getTime()},w:function(e){return e.getDay()},y:function(e){return String(e.getFullYear()).substring(2)}},C=function(e){var t=e.config,n=void 0===t?p:t,i=e.l10n,r=void 0===i?h:i;return function(e,t,i){var a=i||r;return void 0!==n.formatDate?n.formatDate(e,t,a):t.split("").map(function(t,i,r){return k[t]&&"\\"!==r[i-1]?k[t](e,a,n):"\\"!==t?t:""}).join("")}},M=function(e){var t=e.config,n=void 0===t?p:t,i=e.l10n,r=void 0===i?h:i;return function(e,t,i,a){if(0===e||e){var o,l=a||r,s=e;if(e instanceof Date)o=new Date(e.getTime());else if("string"!=typeof e&&void 0!==e.toFixed)o=new Date(e);else if("string"==typeof e){var u=t||(n||p).dateFormat,c=String(e).trim();if("today"===c)o=new Date,i=!0;else if(/Z$/.test(c)||/GMT$/.test(c))o=new Date(e);else if(n&&n.parseDate)o=n.parseDate(e,u);else{o=n&&n.noCalendar?new Date((new Date).setHours(0,0,0,0)):new Date((new Date).getFullYear(),0,1,0,0,0,0);for(var f=void 0,d=[],h=0,m=0,g="";hMath.min(t,n)&&ethis.constraints.max?(t="max",e=this.constraints.max):!1!==this.constraints.min&&e");this.data.head.map(function(n,i){var r=jQuery("");r.append(''),r.find('input[type="text"]').val(n),t.append(r)}),this.$ui.thead.append(t)}if(this.data.body.length){for(var n=jQuery(''),i=0;i');this.$ui.tbody.append(n),this.data.body.map(function(t,n){var i=jQuery("");t.map(function(t,r){var a=jQuery("");a.append(''),a.find('input[type="text"]').val(t),i.append(a)}),i.append(''),e.$ui.tbody.append(i)})}}}]),t}(),u=function(){function e(t){i(this,e);var n=this;this.fields=[];var r=t.find("[data-fieldhelpers-field-table]");r.length&&r.each(function(){n.initializeField(jQuery(this))})}return o(e,[{key:"initializeField",value:function(e){this.fields.push({$field:e,api:new s(e)})}}]),e}();t.default=u},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n0&&Object.keys(this.options.select2Options.language).map(function(t){var n=e.options.select2Options.language[t];e.options.select2Options.language[t]=function(e){return n}})}},{key:"setupSelect2Options",value:function(){var e=this;this.setupL10n();var t=["escapeMarkup","initSelection","matcher","query","sorter","templateResult","templateSelection","tokenizer"];Object.keys(this.options.select2Options).map(function(n){if(-1!==t.indexOf(n)){var i=e.options.select2Options[n];"function"==typeof window[i]&&(e.options.select2Options[n]=window[i])}}),this.options.optGroups&&this.options.optGroupSelectionPrefix&&void 0===this.options.select2Options.templateSelection&&(this.options.select2Options.templateSelection=function(e){return jQuery(e.element).closest("optgroup").attr("label").trim()+": "+e.text})}},{key:"fieldCleanup",value:function(){if(!this.options.select2Disabled){var e=this.$field.next(".select2");e.length&&e.remove(),this.$field.removeClass("select2-hidden-accessible").removeAttr("tablindex aria-hidden")}}},{key:"setDefault",value:function(){this.$field.find("option:selected").prop("selected",!1),this.$field.trigger("change")}}]),t}(),u=function(){function e(t){i(this,e);var n=this;this.fields=[];var r=t.find("[data-fieldhelpers-field-select]");r.length&&r.each(function(){n.initializeField(jQuery(this))})}return o(e,[{key:"initializeField",value:function(e){this.fields.push({$field:e,api:new s(e)})}}]),e}();t.default=u},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n {\n this.repeaterBeforeInit( $repeater, options );\n });\n this.$repeater.on('repeater-init', ( event, $repeater, options ) => {\n this.repeaterOnInit( $repeater, options );\n });\n this.$repeater.on('repeater-before-add-item', () => {\n this.repeaterBeforeAddItem();\n });\n this.$repeater.on('repeater-add-item', () => {\n this.repeaterOnAddItem();\n });\n this.$field.closest('[data-repeater-item]').on('repeater-before-delete-item', () => {\n this.repeaterBeforeDeleteSelf();\n });\n this.$repeater.on('repeater-before-delete-item', () => {\n this.repeaterBeforeDeleteItem();\n });\n this.$repeater.on('repeater-delete-item', () => {\n this.repeaterOnDeleteItem();\n });\n this.$repeater.find('.fieldhelpers-field-repeater-list').on('list-update', () => {\n this.repeaterOnSort();\n });\n\n this.repeaterSetID();\n this.fieldCleanup();\n }\n\n /**\n * Fires before Repeater init.\n *\n * @since 1.5.0\n */\n repeaterBeforeInit( $repeater, options ) {\n }\n\n /**\n * Fires on Repeater init.\n *\n * @since 1.4.0\n */\n repeaterOnInit( $repeater, options ) {\n }\n\n /**\n * Fires before Repeater add item.\n *\n * @since 1.4.0\n */\n repeaterBeforeAddItem() {\n }\n\n /**\n * Fires on Repeater add item.\n *\n * @since 1.4.0\n */\n repeaterOnAddItem() {\n }\n\n /**\n * Fires before Repeater delete item (localized to self).\n *\n * @since 1.4.0\n */\n repeaterBeforeDeleteSelf() {\n }\n\n /**\n * Fires before Repeater delete item.\n *\n * @since 1.4.0\n */\n repeaterBeforeDeleteItem() {\n }\n\n /**\n * Fires on Repeater delete item.\n *\n * @since 1.4.0\n */\n repeaterOnDeleteItem() {\n }\n\n /**\n * Fires on Repeat sort item.\n *\n * @since 1.4.0\n */\n repeaterOnSort() {\n }\n\n /**\n * Sets the ID to be unique, based off the repeater item index.\n *\n * @since 1.4.0\n */\n repeaterSetID() {\n\n let index = this.$field.closest('[data-repeater-item]').index();\n let newID = `${this.options.id}_${index}`;\n\n this.$field.attr('id', newID);\n }\n\n /**\n * Cleans up after a repeater add/init.\n *\n * @since 1.4.0\n */\n fieldCleanup() {\n }\n\n /**\n * Sets the field to default. Override in child class if need different method.\n *\n * @since 1.4.0\n */\n setDefault() {\n\n if ( this.options.default ) {\n\n this.$field.val(this.options.default).change();\n }\n }\n}\n\nexport default Field;\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/admin/fields/field.js","import FieldNumberInitialize from \"./fields/field-number\";\nimport FieldColorPickerInitialize from \"./fields/field-colorpicker\";\nimport FieldDatePickerInitialize from \"./fields/field-datepicker\";\nimport FieldTimePickerInitialize from \"./fields/field-timepicker\";\nimport FieldDateTimePickerInitialize from \"./fields/field-datetimepicker\";\nimport FieldTableInitialize from \"./fields/field-table\";\nimport FieldMediaInitialize from \"./fields/field-media\";\nimport FieldListInitialize from \"./fields/field-list\";\nimport FieldRepeaterInitialize from \"./fields/field-repeater\";\nimport FieldSelectInitialize from \"./fields/field-select\";\nimport FieldTextAreaInitialize from \"./fields/field-textarea\";\nimport FieldCheckboxInitialize from \"./fields/field-checkbox\";\nimport FieldRadioInitialize from \"./fields/field-radio\";\nimport FieldToggleInitialize from \"./fields/field-toggle\";\n\n/**\n * Handles all field initializations.\n *\n * @since 1.4.0\n */\nclass FieldsInitialize {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $root Root element to initialize fields inside.\n */\n constructor($root) {\n\n this.fields = {\n checkbox: new FieldCheckboxInitialize($root),\n toggle: new FieldToggleInitialize($root),\n radio: new FieldRadioInitialize($root),\n select: new FieldSelectInitialize($root),\n textarea: new FieldTextAreaInitialize($root),\n number: new FieldNumberInitialize($root),\n colorpicker: new FieldColorPickerInitialize($root),\n datepicker: new FieldDatePickerInitialize($root),\n timepicker: new FieldTimePickerInitialize($root),\n datetimepicker: new FieldDateTimePickerInitialize($root),\n table: new FieldTableInitialize($root),\n media: new FieldMediaInitialize($root),\n list: new FieldListInitialize($root),\n repeater: new FieldRepeaterInitialize($root),\n };\n }\n}\n\nexport default FieldsInitialize;\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/admin/fields-init.js","import 'jquery.repeater';\nimport 'flatpickr';\nimport FieldsInitialize from \"./fields-init\";\n\n// Initialize app on jQuery Ready.\njQuery(() => {\n\n const Fields = new FieldsInitialize(jQuery(document));\n\tjQuery( document ).trigger( 'rbm-field-helpers-ready' );\n});\n\n// Re-init any fields within a container\nwindow.rbmFHinitField = function( $root ) {\n\t\n\tnew FieldsInitialize( $root );\n\t\n}\n\n// Grab Field Object from the RBM_FieldHelpers global in order to run methods on them\nwindow.rbmFHgetFieldObject = function( name, instance = null, fieldType = null ) {\n\t\n\tif ( instance === null ) {\n\t\t\n\t\tinstance = jQuery( '.fieldhelpers-field[data-fieldhelpers-name=\"' + name + '\"]' ).data( 'fieldhelpers-instance' );\n\t\t\n\t}\n\t\n\tif ( fieldType === null ) {\n\t\t\n\t\tlet classNames = jQuery( '.fieldhelpers-field[data-fieldhelpers-name=\"' + name + '\"][data-fieldhelpers-instance=\"' + instance + '\"]' ).first().attr( 'class' );\n\t\t\n\t\tlet test = /fieldhelpers-field-(\\S*)/.exec( classNames );\n\t\t\n\t\tif ( test !== null && \n\t\t test[1].length > 0 ) {\n\t\t\t\n\t\t\tfieldType = test[1];\n\t\t\t\n\t\t}\n\t\t\n\t}\n\t\n\ttry {\n\t\n\t\treturn RBM_FieldHelpers[ instance ]['fieldObjects'][ fieldType ][ name ];\n\t\t\n\t}\n\tcatch ( error ) {\n\t\t\n\t\tif ( instance === null || \n\t\t fieldType === null || \n\t\t typeof RBM_FieldHelpers[ instance ] == 'undefined' || \n\t\t typeof RBM_FieldHelpers[ instance ]['fieldObjects'] == 'undefined' ||\n\t\t typeof RBM_FieldHelpers[ instance ]['fieldObjects'][ fieldType ] == 'undefined' || \n\t\t typeof RBM_FieldHelpers[ instance ]['fieldObjects'][ fieldType ][ name ] == 'undefined' || \n\t\t typeof RBM_FieldHelpers[ instance ]['fieldObjects'][ fieldType ][ name ].length < 0 ) {\n\t\t\tconsole.error( 'Field Helpers Error: Field Object for \"' + name + '\" Not Found' );\n\t\t}\n\t\t\n\t\treturn false;\n\t}\n\t\n}\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/admin/rbm-field-helpers-admin.js","// jquery.repeater version 1.2.1\n// https://github.com/DubFriend/jquery.repeater\n// (MIT) 09-10-2016\n// Brian Detering (http://www.briandetering.net/)\n(function ($) {\n'use strict';\n\nvar identity = function (x) {\n return x;\n};\n\nvar isArray = function (value) {\n return $.isArray(value);\n};\n\nvar isObject = function (value) {\n return !isArray(value) && (value instanceof Object);\n};\n\nvar isNumber = function (value) {\n return value instanceof Number;\n};\n\nvar isFunction = function (value) {\n return value instanceof Function;\n};\n\nvar indexOf = function (object, value) {\n return $.inArray(value, object);\n};\n\nvar inArray = function (array, value) {\n return indexOf(array, value) !== -1;\n};\n\nvar foreach = function (collection, callback) {\n for(var i in collection) {\n if(collection.hasOwnProperty(i)) {\n callback(collection[i], i, collection);\n }\n }\n};\n\n\nvar last = function (array) {\n return array[array.length - 1];\n};\n\nvar argumentsToArray = function (args) {\n return Array.prototype.slice.call(args);\n};\n\nvar extend = function () {\n var extended = {};\n foreach(argumentsToArray(arguments), function (o) {\n foreach(o, function (val, key) {\n extended[key] = val;\n });\n });\n return extended;\n};\n\nvar mapToArray = function (collection, callback) {\n var mapped = [];\n foreach(collection, function (value, key, coll) {\n mapped.push(callback(value, key, coll));\n });\n return mapped;\n};\n\nvar mapToObject = function (collection, callback, keyCallback) {\n var mapped = {};\n foreach(collection, function (value, key, coll) {\n key = keyCallback ? keyCallback(key, value) : key;\n mapped[key] = callback(value, key, coll);\n });\n return mapped;\n};\n\nvar map = function (collection, callback, keyCallback) {\n return isArray(collection) ?\n mapToArray(collection, callback) :\n mapToObject(collection, callback, keyCallback);\n};\n\nvar pluck = function (arrayOfObjects, key) {\n return map(arrayOfObjects, function (val) {\n return val[key];\n });\n};\n\nvar filter = function (collection, callback) {\n var filtered;\n\n if(isArray(collection)) {\n filtered = [];\n foreach(collection, function (val, key, coll) {\n if(callback(val, key, coll)) {\n filtered.push(val);\n }\n });\n }\n else {\n filtered = {};\n foreach(collection, function (val, key, coll) {\n if(callback(val, key, coll)) {\n filtered[key] = val;\n }\n });\n }\n\n return filtered;\n};\n\nvar call = function (collection, functionName, args) {\n return map(collection, function (object, name) {\n return object[functionName].apply(object, args || []);\n });\n};\n\n//execute callback immediately and at most one time on the minimumInterval,\n//ignore block attempts\nvar throttle = function (minimumInterval, callback) {\n var timeout = null;\n return function () {\n var that = this, args = arguments;\n if(timeout === null) {\n timeout = setTimeout(function () {\n timeout = null;\n }, minimumInterval);\n callback.apply(that, args);\n }\n };\n};\n\n\nvar mixinPubSub = function (object) {\n object = object || {};\n var topics = {};\n\n object.publish = function (topic, data) {\n foreach(topics[topic], function (callback) {\n callback(data);\n });\n };\n\n object.subscribe = function (topic, callback) {\n topics[topic] = topics[topic] || [];\n topics[topic].push(callback);\n };\n\n object.unsubscribe = function (callback) {\n foreach(topics, function (subscribers) {\n var index = indexOf(subscribers, callback);\n if(index !== -1) {\n subscribers.splice(index, 1);\n }\n });\n };\n\n return object;\n};\n\n// jquery.input version 0.0.0\n// https://github.com/DubFriend/jquery.input\n// (MIT) 09-04-2014\n// Brian Detering (http://www.briandetering.net/)\n(function ($) {\n'use strict';\n\nvar createBaseInput = function (fig, my) {\n var self = mixinPubSub(),\n $self = fig.$;\n\n self.getType = function () {\n throw 'implement me (return type. \"text\", \"radio\", etc.)';\n };\n\n self.$ = function (selector) {\n return selector ? $self.find(selector) : $self;\n };\n\n self.disable = function () {\n self.$().prop('disabled', true);\n self.publish('isEnabled', false);\n };\n\n self.enable = function () {\n self.$().prop('disabled', false);\n self.publish('isEnabled', true);\n };\n\n my.equalTo = function (a, b) {\n return a === b;\n };\n\n my.publishChange = (function () {\n var oldValue;\n return function (e, domElement) {\n var newValue = self.get();\n if(!my.equalTo(newValue, oldValue)) {\n self.publish('change', { e: e, domElement: domElement });\n }\n oldValue = newValue;\n };\n }());\n\n return self;\n};\n\n\nvar createInput = function (fig, my) {\n var self = createBaseInput(fig, my);\n\n self.get = function () {\n return self.$().val();\n };\n\n self.set = function (newValue) {\n self.$().val(newValue);\n };\n\n self.clear = function () {\n self.set('');\n };\n\n my.buildSetter = function (callback) {\n return function (newValue) {\n callback.call(self, newValue);\n };\n };\n\n return self;\n};\n\nvar inputEqualToArray = function (a, b) {\n a = isArray(a) ? a : [a];\n b = isArray(b) ? b : [b];\n\n var isEqual = true;\n if(a.length !== b.length) {\n isEqual = false;\n }\n else {\n foreach(a, function (value) {\n if(!inArray(b, value)) {\n isEqual = false;\n }\n });\n }\n\n return isEqual;\n};\n\nvar createInputButton = function (fig) {\n var my = {},\n self = createInput(fig, my);\n\n self.getType = function () {\n return 'button';\n };\n\n self.$().on('change', function (e) {\n my.publishChange(e, this);\n });\n\n return self;\n};\n\nvar createInputCheckbox = function (fig) {\n var my = {},\n self = createInput(fig, my);\n\n self.getType = function () {\n return 'checkbox';\n };\n\n self.get = function () {\n var values = [];\n self.$().filter(':checked').each(function () {\n values.push($(this).val());\n });\n return values;\n };\n\n self.set = function (newValues) {\n newValues = isArray(newValues) ? newValues : [newValues];\n\n self.$().each(function () {\n $(this).prop('checked', false);\n });\n\n foreach(newValues, function (value) {\n self.$().filter('[value=\"' + value + '\"]')\n .prop('checked', true);\n });\n };\n\n my.equalTo = inputEqualToArray;\n\n self.$().change(function (e) {\n my.publishChange(e, this);\n });\n\n return self;\n};\n\nvar createInputEmail = function (fig) {\n var my = {},\n self = createInputText(fig, my);\n\n self.getType = function () {\n return 'email';\n };\n\n return self;\n};\n\nvar createInputFile = function (fig) {\n var my = {},\n self = createBaseInput(fig, my);\n\n self.getType = function () {\n return 'file';\n };\n\n self.get = function () {\n return last(self.$().val().split('\\\\'));\n };\n\n self.clear = function () {\n // http://stackoverflow.com/questions/1043957/clearing-input-type-file-using-jquery\n this.$().each(function () {\n $(this).wrap('').closest('form').get(0).reset();\n $(this).unwrap();\n });\n };\n\n self.$().change(function (e) {\n my.publishChange(e, this);\n // self.publish('change', self);\n });\n\n return self;\n};\n\nvar createInputHidden = function (fig) {\n var my = {},\n self = createInput(fig, my);\n\n self.getType = function () {\n return 'hidden';\n };\n\n self.$().change(function (e) {\n my.publishChange(e, this);\n });\n\n return self;\n};\nvar createInputMultipleFile = function (fig) {\n var my = {},\n self = createBaseInput(fig, my);\n\n self.getType = function () {\n return 'file[multiple]';\n };\n\n self.get = function () {\n // http://stackoverflow.com/questions/14035530/how-to-get-value-of-html-5-multiple-file-upload-variable-using-jquery\n var fileListObject = self.$().get(0).files || [],\n names = [], i;\n\n for(i = 0; i < (fileListObject.length || 0); i += 1) {\n names.push(fileListObject[i].name);\n }\n\n return names;\n };\n\n self.clear = function () {\n // http://stackoverflow.com/questions/1043957/clearing-input-type-file-using-jquery\n this.$().each(function () {\n $(this).wrap('').closest('form').get(0).reset();\n $(this).unwrap();\n });\n };\n\n self.$().change(function (e) {\n my.publishChange(e, this);\n });\n\n return self;\n};\n\nvar createInputMultipleSelect = function (fig) {\n var my = {},\n self = createInput(fig, my);\n\n self.getType = function () {\n return 'select[multiple]';\n };\n\n self.get = function () {\n return self.$().val() || [];\n };\n\n self.set = function (newValues) {\n self.$().val(\n newValues === '' ? [] : isArray(newValues) ? newValues : [newValues]\n );\n };\n\n my.equalTo = inputEqualToArray;\n\n self.$().change(function (e) {\n my.publishChange(e, this);\n });\n\n return self;\n};\n\nvar createInputPassword = function (fig) {\n var my = {},\n self = createInputText(fig, my);\n\n self.getType = function () {\n return 'password';\n };\n\n return self;\n};\n\nvar createInputRadio = function (fig) {\n var my = {},\n self = createInput(fig, my);\n\n self.getType = function () {\n return 'radio';\n };\n\n self.get = function () {\n return self.$().filter(':checked').val() || null;\n };\n\n self.set = function (newValue) {\n if(!newValue) {\n self.$().each(function () {\n $(this).prop('checked', false);\n });\n }\n else {\n self.$().filter('[value=\"' + newValue + '\"]').prop('checked', true);\n }\n };\n\n self.$().change(function (e) {\n my.publishChange(e, this);\n });\n\n return self;\n};\n\nvar createInputRange = function (fig) {\n var my = {},\n self = createInput(fig, my);\n\n self.getType = function () {\n return 'range';\n };\n\n self.$().change(function (e) {\n my.publishChange(e, this);\n });\n\n return self;\n};\n\nvar createInputSelect = function (fig) {\n var my = {},\n self = createInput(fig, my);\n\n self.getType = function () {\n return 'select';\n };\n\n self.$().change(function (e) {\n my.publishChange(e, this);\n });\n\n return self;\n};\n\nvar createInputText = function (fig) {\n var my = {},\n self = createInput(fig, my);\n\n self.getType = function () {\n return 'text';\n };\n\n self.$().on('change keyup keydown', function (e) {\n my.publishChange(e, this);\n });\n\n return self;\n};\n\nvar createInputTextarea = function (fig) {\n var my = {},\n self = createInput(fig, my);\n\n self.getType = function () {\n return 'textarea';\n };\n\n self.$().on('change keyup keydown', function (e) {\n my.publishChange(e, this);\n });\n\n return self;\n};\n\nvar createInputURL = function (fig) {\n var my = {},\n self = createInputText(fig, my);\n\n self.getType = function () {\n return 'url';\n };\n\n return self;\n};\n\nvar buildFormInputs = function (fig) {\n var inputs = {},\n $self = fig.$;\n\n var constructor = fig.constructorOverride || {\n button: createInputButton,\n text: createInputText,\n url: createInputURL,\n email: createInputEmail,\n password: createInputPassword,\n range: createInputRange,\n textarea: createInputTextarea,\n select: createInputSelect,\n 'select[multiple]': createInputMultipleSelect,\n radio: createInputRadio,\n checkbox: createInputCheckbox,\n file: createInputFile,\n 'file[multiple]': createInputMultipleFile,\n hidden: createInputHidden\n };\n\n var addInputsBasic = function (type, selector) {\n var $input = isObject(selector) ? selector : $self.find(selector);\n\n $input.each(function () {\n var name = $(this).attr('name');\n inputs[name] = constructor[type]({\n $: $(this)\n });\n });\n };\n\n var addInputsGroup = function (type, selector) {\n var names = [],\n $input = isObject(selector) ? selector : $self.find(selector);\n\n if(isObject(selector)) {\n inputs[$input.attr('name')] = constructor[type]({\n $: $input\n });\n }\n else {\n // group by name attribute\n $input.each(function () {\n if(indexOf(names, $(this).attr('name')) === -1) {\n names.push($(this).attr('name'));\n }\n });\n\n foreach(names, function (name) {\n inputs[name] = constructor[type]({\n $: $self.find('input[name=\"' + name + '\"]')\n });\n });\n }\n };\n\n\n if($self.is('input, select, textarea')) {\n if($self.is('input[type=\"button\"], button, input[type=\"submit\"]')) {\n addInputsBasic('button', $self);\n }\n else if($self.is('textarea')) {\n addInputsBasic('textarea', $self);\n }\n else if(\n $self.is('input[type=\"text\"]') ||\n $self.is('input') && !$self.attr('type')\n ) {\n addInputsBasic('text', $self);\n }\n else if($self.is('input[type=\"password\"]')) {\n addInputsBasic('password', $self);\n }\n else if($self.is('input[type=\"email\"]')) {\n addInputsBasic('email', $self);\n }\n else if($self.is('input[type=\"url\"]')) {\n addInputsBasic('url', $self);\n }\n else if($self.is('input[type=\"range\"]')) {\n addInputsBasic('range', $self);\n }\n else if($self.is('select')) {\n if($self.is('[multiple]')) {\n addInputsBasic('select[multiple]', $self);\n }\n else {\n addInputsBasic('select', $self);\n }\n }\n else if($self.is('input[type=\"file\"]')) {\n if($self.is('[multiple]')) {\n addInputsBasic('file[multiple]', $self);\n }\n else {\n addInputsBasic('file', $self);\n }\n }\n else if($self.is('input[type=\"hidden\"]')) {\n addInputsBasic('hidden', $self);\n }\n else if($self.is('input[type=\"radio\"]')) {\n addInputsGroup('radio', $self);\n }\n else if($self.is('input[type=\"checkbox\"]')) {\n addInputsGroup('checkbox', $self);\n }\n else {\n //in all other cases default to a \"text\" input interface.\n addInputsBasic('text', $self);\n }\n }\n else {\n addInputsBasic('button', 'input[type=\"button\"], button, input[type=\"submit\"]');\n addInputsBasic('text', 'input[type=\"text\"]');\n addInputsBasic('password', 'input[type=\"password\"]');\n addInputsBasic('email', 'input[type=\"email\"]');\n addInputsBasic('url', 'input[type=\"url\"]');\n addInputsBasic('range', 'input[type=\"range\"]');\n addInputsBasic('textarea', 'textarea');\n addInputsBasic('select', 'select:not([multiple])');\n addInputsBasic('select[multiple]', 'select[multiple]');\n addInputsBasic('file', 'input[type=\"file\"]:not([multiple])');\n addInputsBasic('file[multiple]', 'input[type=\"file\"][multiple]');\n addInputsBasic('hidden', 'input[type=\"hidden\"]');\n addInputsGroup('radio', 'input[type=\"radio\"]');\n addInputsGroup('checkbox', 'input[type=\"checkbox\"]');\n }\n\n return inputs;\n};\n\n$.fn.inputVal = function (newValue) {\n var $self = $(this);\n\n var inputs = buildFormInputs({ $: $self });\n\n if($self.is('input, textarea, select')) {\n if(typeof newValue === 'undefined') {\n return inputs[$self.attr('name')].get();\n }\n else {\n inputs[$self.attr('name')].set(newValue);\n return $self;\n }\n }\n else {\n if(typeof newValue === 'undefined') {\n return call(inputs, 'get');\n }\n else {\n foreach(newValue, function (value, inputName) {\n inputs[inputName].set(value);\n });\n return $self;\n }\n }\n};\n\n$.fn.inputOnChange = function (callback) {\n var $self = $(this);\n var inputs = buildFormInputs({ $: $self });\n foreach(inputs, function (input) {\n input.subscribe('change', function (data) {\n callback.call(data.domElement, data.e);\n });\n });\n return $self;\n};\n\n$.fn.inputDisable = function () {\n var $self = $(this);\n call(buildFormInputs({ $: $self }), 'disable');\n return $self;\n};\n\n$.fn.inputEnable = function () {\n var $self = $(this);\n call(buildFormInputs({ $: $self }), 'enable');\n return $self;\n};\n\n$.fn.inputClear = function () {\n var $self = $(this);\n call(buildFormInputs({ $: $self }), 'clear');\n return $self;\n};\n\n}(jQuery));\n\n$.fn.repeaterVal = function () {\n var parse = function (raw) {\n var parsed = [];\n\n foreach(raw, function (val, key) {\n var parsedKey = [];\n if(key !== \"undefined\") {\n parsedKey.push(key.match(/^[^\\[]*/)[0]);\n parsedKey = parsedKey.concat(map(\n key.match(/\\[[^\\]]*\\]/g),\n function (bracketed) {\n return bracketed.replace(/[\\[\\]]/g, '');\n }\n ));\n\n parsed.push({\n val: val,\n key: parsedKey\n });\n }\n });\n\n return parsed;\n };\n\n var build = function (parsed) {\n if(\n parsed.length === 1 &&\n (parsed[0].key.length === 0 || parsed[0].key.length === 1 && !parsed[0].key[0])\n ) {\n return parsed[0].val;\n }\n\n foreach(parsed, function (p) {\n p.head = p.key.shift();\n });\n\n var grouped = (function () {\n var grouped = {};\n\n foreach(parsed, function (p) {\n if(!grouped[p.head]) {\n grouped[p.head] = [];\n }\n grouped[p.head].push(p);\n });\n\n return grouped;\n }());\n\n var built;\n\n if(/^[0-9]+$/.test(parsed[0].head)) {\n built = [];\n foreach(grouped, function (group) {\n built.push(build(group));\n });\n }\n else {\n built = {};\n foreach(grouped, function (group, key) {\n built[key] = build(group);\n });\n }\n\n return built;\n };\n\n return build(parse($(this).inputVal()));\n};\n\n$.fn.repeater = function (fig) {\n fig = fig || {};\n\n var setList;\n\n $(this).each(function () {\n\n var $self = $(this);\n\n var show = fig.show || function () {\n $(this).show();\n };\n\n var hide = fig.hide || function (removeElement) {\n removeElement();\n };\n\n var $list = $self.find('[data-repeater-list]').first();\n\n var $filterNested = function ($items, repeaters) {\n return $items.filter(function () {\n return repeaters ?\n $(this).closest(\n pluck(repeaters, 'selector').join(',')\n ).length === 0 : true;\n });\n };\n\n var $items = function () {\n return $filterNested($list.find('[data-repeater-item]'), fig.repeaters);\n };\n\n var $itemTemplate = $list.find('[data-repeater-item]')\n .first().clone().hide();\n\n var $firstDeleteButton = $filterNested(\n $filterNested($(this).find('[data-repeater-item]'), fig.repeaters)\n .first().find('[data-repeater-delete]'),\n fig.repeaters\n );\n\n if(fig.isFirstItemUndeletable && $firstDeleteButton) {\n $firstDeleteButton.remove();\n }\n\n var getGroupName = function () {\n var groupName = $list.data('repeater-list');\n return fig.$parent ?\n fig.$parent.data('item-name') + '[' + groupName + ']' :\n groupName;\n };\n\n var initNested = function ($listItems) {\n if(fig.repeaters) {\n $listItems.each(function () {\n var $item = $(this);\n foreach(fig.repeaters, function (nestedFig) {\n $item.find(nestedFig.selector).repeater(extend(\n nestedFig, { $parent: $item }\n ));\n });\n });\n }\n };\n\n var $foreachRepeaterInItem = function (repeaters, $item, cb) {\n if(repeaters) {\n foreach(repeaters, function (nestedFig) {\n cb.call($item.find(nestedFig.selector)[0], nestedFig);\n });\n }\n };\n\n var setIndexes = function ($items, groupName, repeaters) {\n $items.each(function (index) {\n var $item = $(this);\n $item.data('item-name', groupName + '[' + index + ']');\n $filterNested($item.find('[name]'), repeaters)\n .each(function () {\n var $input = $(this);\n // match non empty brackets (ex: \"[foo]\")\n var matches = $input.attr('name').match(/\\[[^\\]]+\\]/g);\n\n var name = matches ?\n // strip \"[\" and \"]\" characters\n last(matches).replace(/\\[|\\]/g, '') :\n $input.attr('name');\n\n\n var newName = groupName + '[' + index + '][' + name + ']' +\n ($input.is(':checkbox') || $input.attr('multiple') ? '[]' : '');\n\n $input.attr('name', newName);\n\n $foreachRepeaterInItem(repeaters, $item, function (nestedFig) {\n var $repeater = $(this);\n setIndexes(\n $filterNested($repeater.find('[data-repeater-item]'), nestedFig.repeaters || []),\n groupName + '[' + index + ']' +\n '[' + $repeater.find('[data-repeater-list]').first().data('repeater-list') + ']',\n nestedFig.repeaters\n );\n });\n });\n });\n\n $list.find('input[name][checked]')\n .removeAttr('checked')\n .prop('checked', true);\n };\n\n setIndexes($items(), getGroupName(), fig.repeaters);\n initNested($items());\n if(fig.initEmpty) {\n $items().remove();\n }\n\n if(fig.ready) {\n fig.ready(function () {\n setIndexes($items(), getGroupName(), fig.repeaters);\n });\n }\n\n var appendItem = (function () {\n var setItemsValues = function ($item, data, repeaters) {\n if(data || fig.defaultValues) {\n var inputNames = {};\n $filterNested($item.find('[name]'), repeaters).each(function () {\n var key = $(this).attr('name').match(/\\[([^\\]]*)(\\]|\\]\\[\\])$/)[1];\n inputNames[key] = $(this).attr('name');\n });\n\n $item.inputVal(map(\n filter(data || fig.defaultValues, function (val, name) {\n return inputNames[name];\n }),\n identity,\n function (name) {\n return inputNames[name];\n }\n ));\n }\n\n\n $foreachRepeaterInItem(repeaters, $item, function (nestedFig) {\n var $repeater = $(this);\n $filterNested(\n $repeater.find('[data-repeater-item]'),\n nestedFig.repeaters\n )\n .each(function () {\n var fieldName = $repeater.find('[data-repeater-list]').data('repeater-list');\n if(data && data[fieldName]) {\n var $template = $(this).clone();\n $repeater.find('[data-repeater-item]').remove();\n foreach(data[fieldName], function (data) {\n var $item = $template.clone();\n setItemsValues(\n $item,\n data,\n nestedFig.repeaters || []\n );\n $repeater.find('[data-repeater-list]').append($item);\n });\n }\n else {\n setItemsValues(\n $(this),\n nestedFig.defaultValues,\n nestedFig.repeaters || []\n );\n }\n });\n });\n\n };\n\n return function ($item, data) {\n $list.append($item);\n setIndexes($items(), getGroupName(), fig.repeaters);\n $item.find('[name]').each(function () {\n $(this).inputClear();\n });\n setItemsValues($item, data || fig.defaultValues, fig.repeaters);\n };\n }());\n\n var addItem = function (data) {\n var $item = $itemTemplate.clone();\n appendItem($item, data);\n if(fig.repeaters) {\n initNested($item);\n }\n show.call($item.get(0));\n };\n\n setList = function (rows) {\n $items().remove();\n foreach(rows, addItem);\n };\n\n $filterNested($self.find('[data-repeater-create]'), fig.repeaters).click(function () {\n addItem();\n });\n\n $list.on('click', '[data-repeater-delete]', function () {\n var self = $(this).closest('[data-repeater-item]').get(0);\n hide.call(self, function () {\n $(self).remove();\n setIndexes($items(), getGroupName(), fig.repeaters);\n });\n });\n });\n\n this.setList = setList;\n\n return this;\n};\n\n}(jQuery));\n\n\n// WEBPACK FOOTER //\n// ./node_modules/jquery.repeater/jquery.repeater.js","/* flatpickr v4.6.2, @license MIT */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = global || self, global.flatpickr = factory());\n}(this, function () { 'use strict';\n\n /*! *****************************************************************************\r\n Copyright (c) Microsoft Corporation. All rights reserved.\r\n Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\n this file except in compliance with the License. You may obtain a copy of the\r\n License at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\n KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\n WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\n MERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\n See the Apache Version 2.0 License for specific language governing permissions\r\n and limitations under the License.\r\n ***************************************************************************** */\r\n\r\n var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n };\n\n var HOOKS = [\n \"onChange\",\n \"onClose\",\n \"onDayCreate\",\n \"onDestroy\",\n \"onKeyDown\",\n \"onMonthChange\",\n \"onOpen\",\n \"onParseConfig\",\n \"onReady\",\n \"onValueUpdate\",\n \"onYearChange\",\n \"onPreCalendarPosition\",\n ];\n var defaults = {\n _disable: [],\n _enable: [],\n allowInput: false,\n altFormat: \"F j, Y\",\n altInput: false,\n altInputClass: \"form-control input\",\n animate: typeof window === \"object\" &&\n window.navigator.userAgent.indexOf(\"MSIE\") === -1,\n ariaDateFormat: \"F j, Y\",\n clickOpens: true,\n closeOnSelect: true,\n conjunction: \", \",\n dateFormat: \"Y-m-d\",\n defaultHour: 12,\n defaultMinute: 0,\n defaultSeconds: 0,\n disable: [],\n disableMobile: false,\n enable: [],\n enableSeconds: false,\n enableTime: false,\n errorHandler: function (err) {\n return typeof console !== \"undefined\" && console.warn(err);\n },\n getWeek: function (givenDate) {\n var date = new Date(givenDate.getTime());\n date.setHours(0, 0, 0, 0);\n // Thursday in current week decides the year.\n date.setDate(date.getDate() + 3 - ((date.getDay() + 6) % 7));\n // January 4 is always in week 1.\n var week1 = new Date(date.getFullYear(), 0, 4);\n // Adjust to Thursday in week 1 and count number of weeks from date to week1.\n return (1 +\n Math.round(((date.getTime() - week1.getTime()) / 86400000 -\n 3 +\n ((week1.getDay() + 6) % 7)) /\n 7));\n },\n hourIncrement: 1,\n ignoredFocusElements: [],\n inline: false,\n locale: \"default\",\n minuteIncrement: 5,\n mode: \"single\",\n monthSelectorType: \"dropdown\",\n nextArrow: \"\",\n noCalendar: false,\n now: new Date(),\n onChange: [],\n onClose: [],\n onDayCreate: [],\n onDestroy: [],\n onKeyDown: [],\n onMonthChange: [],\n onOpen: [],\n onParseConfig: [],\n onReady: [],\n onValueUpdate: [],\n onYearChange: [],\n onPreCalendarPosition: [],\n plugins: [],\n position: \"auto\",\n positionElement: undefined,\n prevArrow: \"\",\n shorthandCurrentMonth: false,\n showMonths: 1,\n static: false,\n time_24hr: false,\n weekNumbers: false,\n wrap: false\n };\n\n var english = {\n weekdays: {\n shorthand: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n longhand: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ]\n },\n months: {\n shorthand: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ],\n longhand: [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ]\n },\n daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n firstDayOfWeek: 0,\n ordinal: function (nth) {\n var s = nth % 100;\n if (s > 3 && s < 21)\n return \"th\";\n switch (s % 10) {\n case 1:\n return \"st\";\n case 2:\n return \"nd\";\n case 3:\n return \"rd\";\n default:\n return \"th\";\n }\n },\n rangeSeparator: \" to \",\n weekAbbreviation: \"Wk\",\n scrollTitle: \"Scroll to increment\",\n toggleTitle: \"Click to toggle\",\n amPM: [\"AM\", \"PM\"],\n yearAriaLabel: \"Year\",\n hourAriaLabel: \"Hour\",\n minuteAriaLabel: \"Minute\",\n time_24hr: false\n };\n\n var pad = function (number) { return (\"0\" + number).slice(-2); };\n var int = function (bool) { return (bool === true ? 1 : 0); };\n /* istanbul ignore next */\n function debounce(func, wait, immediate) {\n if (immediate === void 0) { immediate = false; }\n var timeout;\n return function () {\n var context = this, args = arguments;\n timeout !== null && clearTimeout(timeout);\n timeout = window.setTimeout(function () {\n timeout = null;\n if (!immediate)\n func.apply(context, args);\n }, wait);\n if (immediate && !timeout)\n func.apply(context, args);\n };\n }\n var arrayify = function (obj) {\n return obj instanceof Array ? obj : [obj];\n };\n\n function toggleClass(elem, className, bool) {\n if (bool === true)\n return elem.classList.add(className);\n elem.classList.remove(className);\n }\n function createElement(tag, className, content) {\n var e = window.document.createElement(tag);\n className = className || \"\";\n content = content || \"\";\n e.className = className;\n if (content !== undefined)\n e.textContent = content;\n return e;\n }\n function clearNode(node) {\n while (node.firstChild)\n node.removeChild(node.firstChild);\n }\n function findParent(node, condition) {\n if (condition(node))\n return node;\n else if (node.parentNode)\n return findParent(node.parentNode, condition);\n return undefined; // nothing found\n }\n function createNumberInput(inputClassName, opts) {\n var wrapper = createElement(\"div\", \"numInputWrapper\"), numInput = createElement(\"input\", \"numInput \" + inputClassName), arrowUp = createElement(\"span\", \"arrowUp\"), arrowDown = createElement(\"span\", \"arrowDown\");\n if (navigator.userAgent.indexOf(\"MSIE 9.0\") === -1) {\n numInput.type = \"number\";\n }\n else {\n numInput.type = \"text\";\n numInput.pattern = \"\\\\d*\";\n }\n if (opts !== undefined)\n for (var key in opts)\n numInput.setAttribute(key, opts[key]);\n wrapper.appendChild(numInput);\n wrapper.appendChild(arrowUp);\n wrapper.appendChild(arrowDown);\n return wrapper;\n }\n function getEventTarget(event) {\n if (typeof event.composedPath === \"function\") {\n var path = event.composedPath();\n return path[0];\n }\n return event.target;\n }\n\n var doNothing = function () { return undefined; };\n var monthToStr = function (monthNumber, shorthand, locale) { return locale.months[shorthand ? \"shorthand\" : \"longhand\"][monthNumber]; };\n var revFormat = {\n D: doNothing,\n F: function (dateObj, monthName, locale) {\n dateObj.setMonth(locale.months.longhand.indexOf(monthName));\n },\n G: function (dateObj, hour) {\n dateObj.setHours(parseFloat(hour));\n },\n H: function (dateObj, hour) {\n dateObj.setHours(parseFloat(hour));\n },\n J: function (dateObj, day) {\n dateObj.setDate(parseFloat(day));\n },\n K: function (dateObj, amPM, locale) {\n dateObj.setHours((dateObj.getHours() % 12) +\n 12 * int(new RegExp(locale.amPM[1], \"i\").test(amPM)));\n },\n M: function (dateObj, shortMonth, locale) {\n dateObj.setMonth(locale.months.shorthand.indexOf(shortMonth));\n },\n S: function (dateObj, seconds) {\n dateObj.setSeconds(parseFloat(seconds));\n },\n U: function (_, unixSeconds) { return new Date(parseFloat(unixSeconds) * 1000); },\n W: function (dateObj, weekNum, locale) {\n var weekNumber = parseInt(weekNum);\n var date = new Date(dateObj.getFullYear(), 0, 2 + (weekNumber - 1) * 7, 0, 0, 0, 0);\n date.setDate(date.getDate() - date.getDay() + locale.firstDayOfWeek);\n return date;\n },\n Y: function (dateObj, year) {\n dateObj.setFullYear(parseFloat(year));\n },\n Z: function (_, ISODate) { return new Date(ISODate); },\n d: function (dateObj, day) {\n dateObj.setDate(parseFloat(day));\n },\n h: function (dateObj, hour) {\n dateObj.setHours(parseFloat(hour));\n },\n i: function (dateObj, minutes) {\n dateObj.setMinutes(parseFloat(minutes));\n },\n j: function (dateObj, day) {\n dateObj.setDate(parseFloat(day));\n },\n l: doNothing,\n m: function (dateObj, month) {\n dateObj.setMonth(parseFloat(month) - 1);\n },\n n: function (dateObj, month) {\n dateObj.setMonth(parseFloat(month) - 1);\n },\n s: function (dateObj, seconds) {\n dateObj.setSeconds(parseFloat(seconds));\n },\n u: function (_, unixMillSeconds) {\n return new Date(parseFloat(unixMillSeconds));\n },\n w: doNothing,\n y: function (dateObj, year) {\n dateObj.setFullYear(2000 + parseFloat(year));\n }\n };\n var tokenRegex = {\n D: \"(\\\\w+)\",\n F: \"(\\\\w+)\",\n G: \"(\\\\d\\\\d|\\\\d)\",\n H: \"(\\\\d\\\\d|\\\\d)\",\n J: \"(\\\\d\\\\d|\\\\d)\\\\w+\",\n K: \"\",\n M: \"(\\\\w+)\",\n S: \"(\\\\d\\\\d|\\\\d)\",\n U: \"(.+)\",\n W: \"(\\\\d\\\\d|\\\\d)\",\n Y: \"(\\\\d{4})\",\n Z: \"(.+)\",\n d: \"(\\\\d\\\\d|\\\\d)\",\n h: \"(\\\\d\\\\d|\\\\d)\",\n i: \"(\\\\d\\\\d|\\\\d)\",\n j: \"(\\\\d\\\\d|\\\\d)\",\n l: \"(\\\\w+)\",\n m: \"(\\\\d\\\\d|\\\\d)\",\n n: \"(\\\\d\\\\d|\\\\d)\",\n s: \"(\\\\d\\\\d|\\\\d)\",\n u: \"(.+)\",\n w: \"(\\\\d\\\\d|\\\\d)\",\n y: \"(\\\\d{2})\"\n };\n var formats = {\n // get the date in UTC\n Z: function (date) { return date.toISOString(); },\n // weekday name, short, e.g. Thu\n D: function (date, locale, options) {\n return locale.weekdays.shorthand[formats.w(date, locale, options)];\n },\n // full month name e.g. January\n F: function (date, locale, options) {\n return monthToStr(formats.n(date, locale, options) - 1, false, locale);\n },\n // padded hour 1-12\n G: function (date, locale, options) {\n return pad(formats.h(date, locale, options));\n },\n // hours with leading zero e.g. 03\n H: function (date) { return pad(date.getHours()); },\n // day (1-30) with ordinal suffix e.g. 1st, 2nd\n J: function (date, locale) {\n return locale.ordinal !== undefined\n ? date.getDate() + locale.ordinal(date.getDate())\n : date.getDate();\n },\n // AM/PM\n K: function (date, locale) { return locale.amPM[int(date.getHours() > 11)]; },\n // shorthand month e.g. Jan, Sep, Oct, etc\n M: function (date, locale) {\n return monthToStr(date.getMonth(), true, locale);\n },\n // seconds 00-59\n S: function (date) { return pad(date.getSeconds()); },\n // unix timestamp\n U: function (date) { return date.getTime() / 1000; },\n W: function (date, _, options) {\n return options.getWeek(date);\n },\n // full year e.g. 2016\n Y: function (date) { return date.getFullYear(); },\n // day in month, padded (01-30)\n d: function (date) { return pad(date.getDate()); },\n // hour from 1-12 (am/pm)\n h: function (date) { return (date.getHours() % 12 ? date.getHours() % 12 : 12); },\n // minutes, padded with leading zero e.g. 09\n i: function (date) { return pad(date.getMinutes()); },\n // day in month (1-30)\n j: function (date) { return date.getDate(); },\n // weekday name, full, e.g. Thursday\n l: function (date, locale) {\n return locale.weekdays.longhand[date.getDay()];\n },\n // padded month number (01-12)\n m: function (date) { return pad(date.getMonth() + 1); },\n // the month number (1-12)\n n: function (date) { return date.getMonth() + 1; },\n // seconds 0-59\n s: function (date) { return date.getSeconds(); },\n // Unix Milliseconds\n u: function (date) { return date.getTime(); },\n // number of the day of the week\n w: function (date) { return date.getDay(); },\n // last two digits of year e.g. 16 for 2016\n y: function (date) { return String(date.getFullYear()).substring(2); }\n };\n\n var createDateFormatter = function (_a) {\n var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c;\n return function (dateObj, frmt, overrideLocale) {\n var locale = overrideLocale || l10n;\n if (config.formatDate !== undefined) {\n return config.formatDate(dateObj, frmt, locale);\n }\n return frmt\n .split(\"\")\n .map(function (c, i, arr) {\n return formats[c] && arr[i - 1] !== \"\\\\\"\n ? formats[c](dateObj, locale, config)\n : c !== \"\\\\\"\n ? c\n : \"\";\n })\n .join(\"\");\n };\n };\n var createDateParser = function (_a) {\n var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c;\n return function (date, givenFormat, timeless, customLocale) {\n if (date !== 0 && !date)\n return undefined;\n var locale = customLocale || l10n;\n var parsedDate;\n var dateOrig = date;\n if (date instanceof Date)\n parsedDate = new Date(date.getTime());\n else if (typeof date !== \"string\" &&\n date.toFixed !== undefined // timestamp\n )\n // create a copy\n parsedDate = new Date(date);\n else if (typeof date === \"string\") {\n // date string\n var format = givenFormat || (config || defaults).dateFormat;\n var datestr = String(date).trim();\n if (datestr === \"today\") {\n parsedDate = new Date();\n timeless = true;\n }\n else if (/Z$/.test(datestr) ||\n /GMT$/.test(datestr) // datestrings w/ timezone\n )\n parsedDate = new Date(date);\n else if (config && config.parseDate)\n parsedDate = config.parseDate(date, format);\n else {\n parsedDate =\n !config || !config.noCalendar\n ? new Date(new Date().getFullYear(), 0, 1, 0, 0, 0, 0)\n : new Date(new Date().setHours(0, 0, 0, 0));\n var matched = void 0, ops = [];\n for (var i = 0, matchIndex = 0, regexStr = \"\"; i < format.length; i++) {\n var token_1 = format[i];\n var isBackSlash = token_1 === \"\\\\\";\n var escaped = format[i - 1] === \"\\\\\" || isBackSlash;\n if (tokenRegex[token_1] && !escaped) {\n regexStr += tokenRegex[token_1];\n var match = new RegExp(regexStr).exec(date);\n if (match && (matched = true)) {\n ops[token_1 !== \"Y\" ? \"push\" : \"unshift\"]({\n fn: revFormat[token_1],\n val: match[++matchIndex]\n });\n }\n }\n else if (!isBackSlash)\n regexStr += \".\"; // don't really care\n ops.forEach(function (_a) {\n var fn = _a.fn, val = _a.val;\n return (parsedDate = fn(parsedDate, val, locale) || parsedDate);\n });\n }\n parsedDate = matched ? parsedDate : undefined;\n }\n }\n /* istanbul ignore next */\n if (!(parsedDate instanceof Date && !isNaN(parsedDate.getTime()))) {\n config.errorHandler(new Error(\"Invalid date provided: \" + dateOrig));\n return undefined;\n }\n if (timeless === true)\n parsedDate.setHours(0, 0, 0, 0);\n return parsedDate;\n };\n };\n /**\n * Compute the difference in dates, measured in ms\n */\n function compareDates(date1, date2, timeless) {\n if (timeless === void 0) { timeless = true; }\n if (timeless !== false) {\n return (new Date(date1.getTime()).setHours(0, 0, 0, 0) -\n new Date(date2.getTime()).setHours(0, 0, 0, 0));\n }\n return date1.getTime() - date2.getTime();\n }\n var isBetween = function (ts, ts1, ts2) {\n return ts > Math.min(ts1, ts2) && ts < Math.max(ts1, ts2);\n };\n var duration = {\n DAY: 86400000\n };\n\n if (typeof Object.assign !== \"function\") {\n Object.assign = function (target) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (!target) {\n throw TypeError(\"Cannot convert undefined or null to object\");\n }\n var _loop_1 = function (source) {\n if (source) {\n Object.keys(source).forEach(function (key) { return (target[key] = source[key]); });\n }\n };\n for (var _a = 0, args_1 = args; _a < args_1.length; _a++) {\n var source = args_1[_a];\n _loop_1(source);\n }\n return target;\n };\n }\n\n var DEBOUNCED_CHANGE_MS = 300;\n function FlatpickrInstance(element, instanceConfig) {\n var self = {\n config: __assign({}, defaults, flatpickr.defaultConfig),\n l10n: english\n };\n self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });\n self._handlers = [];\n self.pluginElements = [];\n self.loadedPlugins = [];\n self._bind = bind;\n self._setHoursFromDate = setHoursFromDate;\n self._positionCalendar = positionCalendar;\n self.changeMonth = changeMonth;\n self.changeYear = changeYear;\n self.clear = clear;\n self.close = close;\n self._createElement = createElement;\n self.destroy = destroy;\n self.isEnabled = isEnabled;\n self.jumpToDate = jumpToDate;\n self.open = open;\n self.redraw = redraw;\n self.set = set;\n self.setDate = setDate;\n self.toggle = toggle;\n function setupHelperFunctions() {\n self.utils = {\n getDaysInMonth: function (month, yr) {\n if (month === void 0) { month = self.currentMonth; }\n if (yr === void 0) { yr = self.currentYear; }\n if (month === 1 && ((yr % 4 === 0 && yr % 100 !== 0) || yr % 400 === 0))\n return 29;\n return self.l10n.daysInMonth[month];\n }\n };\n }\n function init() {\n self.element = self.input = element;\n self.isOpen = false;\n parseConfig();\n setupLocale();\n setupInputs();\n setupDates();\n setupHelperFunctions();\n if (!self.isMobile)\n build();\n bindEvents();\n if (self.selectedDates.length || self.config.noCalendar) {\n if (self.config.enableTime) {\n setHoursFromDate(self.config.noCalendar\n ? self.latestSelectedDateObj || self.config.minDate\n : undefined);\n }\n updateValue(false);\n }\n setCalendarWidth();\n self.showTimeInput =\n self.selectedDates.length > 0 || self.config.noCalendar;\n var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n /* TODO: investigate this further\n \n Currently, there is weird positioning behavior in safari causing pages\n to scroll up. https://github.com/chmln/flatpickr/issues/563\n \n However, most browsers are not Safari and positioning is expensive when used\n in scale. https://github.com/chmln/flatpickr/issues/1096\n */\n if (!self.isMobile && isSafari) {\n positionCalendar();\n }\n triggerEvent(\"onReady\");\n }\n function bindToInstance(fn) {\n return fn.bind(self);\n }\n function setCalendarWidth() {\n var config = self.config;\n if (config.weekNumbers === false && config.showMonths === 1)\n return;\n else if (config.noCalendar !== true) {\n window.requestAnimationFrame(function () {\n if (self.calendarContainer !== undefined) {\n self.calendarContainer.style.visibility = \"hidden\";\n self.calendarContainer.style.display = \"block\";\n }\n if (self.daysContainer !== undefined) {\n var daysWidth = (self.days.offsetWidth + 1) * config.showMonths;\n self.daysContainer.style.width = daysWidth + \"px\";\n self.calendarContainer.style.width =\n daysWidth +\n (self.weekWrapper !== undefined\n ? self.weekWrapper.offsetWidth\n : 0) +\n \"px\";\n self.calendarContainer.style.removeProperty(\"visibility\");\n self.calendarContainer.style.removeProperty(\"display\");\n }\n });\n }\n }\n /**\n * The handler for all events targeting the time inputs\n */\n function updateTime(e) {\n if (self.selectedDates.length === 0) {\n setDefaultTime();\n }\n if (e !== undefined && e.type !== \"blur\") {\n timeWrapper(e);\n }\n var prevValue = self._input.value;\n setHoursFromInputs();\n updateValue();\n if (self._input.value !== prevValue) {\n self._debouncedChange();\n }\n }\n function ampm2military(hour, amPM) {\n return (hour % 12) + 12 * int(amPM === self.l10n.amPM[1]);\n }\n function military2ampm(hour) {\n switch (hour % 24) {\n case 0:\n case 12:\n return 12;\n default:\n return hour % 12;\n }\n }\n /**\n * Syncs the selected date object time with user's time input\n */\n function setHoursFromInputs() {\n if (self.hourElement === undefined || self.minuteElement === undefined)\n return;\n var hours = (parseInt(self.hourElement.value.slice(-2), 10) || 0) % 24, minutes = (parseInt(self.minuteElement.value, 10) || 0) % 60, seconds = self.secondElement !== undefined\n ? (parseInt(self.secondElement.value, 10) || 0) % 60\n : 0;\n if (self.amPM !== undefined) {\n hours = ampm2military(hours, self.amPM.textContent);\n }\n var limitMinHours = self.config.minTime !== undefined ||\n (self.config.minDate &&\n self.minDateHasTime &&\n self.latestSelectedDateObj &&\n compareDates(self.latestSelectedDateObj, self.config.minDate, true) ===\n 0);\n var limitMaxHours = self.config.maxTime !== undefined ||\n (self.config.maxDate &&\n self.maxDateHasTime &&\n self.latestSelectedDateObj &&\n compareDates(self.latestSelectedDateObj, self.config.maxDate, true) ===\n 0);\n if (limitMaxHours) {\n var maxTime = self.config.maxTime !== undefined\n ? self.config.maxTime\n : self.config.maxDate;\n hours = Math.min(hours, maxTime.getHours());\n if (hours === maxTime.getHours())\n minutes = Math.min(minutes, maxTime.getMinutes());\n if (minutes === maxTime.getMinutes())\n seconds = Math.min(seconds, maxTime.getSeconds());\n }\n if (limitMinHours) {\n var minTime = self.config.minTime !== undefined\n ? self.config.minTime\n : self.config.minDate;\n hours = Math.max(hours, minTime.getHours());\n if (hours === minTime.getHours())\n minutes = Math.max(minutes, minTime.getMinutes());\n if (minutes === minTime.getMinutes())\n seconds = Math.max(seconds, minTime.getSeconds());\n }\n setHours(hours, minutes, seconds);\n }\n /**\n * Syncs time input values with a date\n */\n function setHoursFromDate(dateObj) {\n var date = dateObj || self.latestSelectedDateObj;\n if (date)\n setHours(date.getHours(), date.getMinutes(), date.getSeconds());\n }\n function setDefaultHours() {\n var hours = self.config.defaultHour;\n var minutes = self.config.defaultMinute;\n var seconds = self.config.defaultSeconds;\n if (self.config.minDate !== undefined) {\n var minHr = self.config.minDate.getHours();\n var minMinutes = self.config.minDate.getMinutes();\n hours = Math.max(hours, minHr);\n if (hours === minHr)\n minutes = Math.max(minMinutes, minutes);\n if (hours === minHr && minutes === minMinutes)\n seconds = self.config.minDate.getSeconds();\n }\n if (self.config.maxDate !== undefined) {\n var maxHr = self.config.maxDate.getHours();\n var maxMinutes = self.config.maxDate.getMinutes();\n hours = Math.min(hours, maxHr);\n if (hours === maxHr)\n minutes = Math.min(maxMinutes, minutes);\n if (hours === maxHr && minutes === maxMinutes)\n seconds = self.config.maxDate.getSeconds();\n }\n setHours(hours, minutes, seconds);\n }\n /**\n * Sets the hours, minutes, and optionally seconds\n * of the latest selected date object and the\n * corresponding time inputs\n * @param {Number} hours the hour. whether its military\n * or am-pm gets inferred from config\n * @param {Number} minutes the minutes\n * @param {Number} seconds the seconds (optional)\n */\n function setHours(hours, minutes, seconds) {\n if (self.latestSelectedDateObj !== undefined) {\n self.latestSelectedDateObj.setHours(hours % 24, minutes, seconds || 0, 0);\n }\n if (!self.hourElement || !self.minuteElement || self.isMobile)\n return;\n self.hourElement.value = pad(!self.config.time_24hr\n ? ((12 + hours) % 12) + 12 * int(hours % 12 === 0)\n : hours);\n self.minuteElement.value = pad(minutes);\n if (self.amPM !== undefined)\n self.amPM.textContent = self.l10n.amPM[int(hours >= 12)];\n if (self.secondElement !== undefined)\n self.secondElement.value = pad(seconds);\n }\n /**\n * Handles the year input and incrementing events\n * @param {Event} event the keyup or increment event\n */\n function onYearInput(event) {\n var year = parseInt(event.target.value) + (event.delta || 0);\n if (year / 1000 > 1 ||\n (event.key === \"Enter\" && !/[^\\d]/.test(year.toString()))) {\n changeYear(year);\n }\n }\n /**\n * Essentially addEventListener + tracking\n * @param {Element} element the element to addEventListener to\n * @param {String} event the event name\n * @param {Function} handler the event handler\n */\n function bind(element, event, handler, options) {\n if (event instanceof Array)\n return event.forEach(function (ev) { return bind(element, ev, handler, options); });\n if (element instanceof Array)\n return element.forEach(function (el) { return bind(el, event, handler, options); });\n element.addEventListener(event, handler, options);\n self._handlers.push({\n element: element,\n event: event,\n handler: handler,\n options: options\n });\n }\n /**\n * A mousedown handler which mimics click.\n * Minimizes latency, since we don't need to wait for mouseup in most cases.\n * Also, avoids handling right clicks.\n *\n * @param {Function} handler the event handler\n */\n function onClick(handler) {\n return function (evt) {\n evt.which === 1 && handler(evt);\n };\n }\n function triggerChange() {\n triggerEvent(\"onChange\");\n }\n /**\n * Adds all the necessary event listeners\n */\n function bindEvents() {\n if (self.config.wrap) {\n [\"open\", \"close\", \"toggle\", \"clear\"].forEach(function (evt) {\n Array.prototype.forEach.call(self.element.querySelectorAll(\"[data-\" + evt + \"]\"), function (el) {\n return bind(el, \"click\", self[evt]);\n });\n });\n }\n if (self.isMobile) {\n setupMobile();\n return;\n }\n var debouncedResize = debounce(onResize, 50);\n self._debouncedChange = debounce(triggerChange, DEBOUNCED_CHANGE_MS);\n if (self.daysContainer && !/iPhone|iPad|iPod/i.test(navigator.userAgent))\n bind(self.daysContainer, \"mouseover\", function (e) {\n if (self.config.mode === \"range\")\n onMouseOver(e.target);\n });\n bind(window.document.body, \"keydown\", onKeyDown);\n if (!self.config.inline && !self.config.static)\n bind(window, \"resize\", debouncedResize);\n if (window.ontouchstart !== undefined)\n bind(window.document, \"touchstart\", documentClick);\n else\n bind(window.document, \"mousedown\", onClick(documentClick));\n bind(window.document, \"focus\", documentClick, { capture: true });\n if (self.config.clickOpens === true) {\n bind(self._input, \"focus\", self.open);\n bind(self._input, \"mousedown\", onClick(self.open));\n }\n if (self.daysContainer !== undefined) {\n bind(self.monthNav, \"mousedown\", onClick(onMonthNavClick));\n bind(self.monthNav, [\"keyup\", \"increment\"], onYearInput);\n bind(self.daysContainer, \"mousedown\", onClick(selectDate));\n }\n if (self.timeContainer !== undefined &&\n self.minuteElement !== undefined &&\n self.hourElement !== undefined) {\n var selText = function (e) {\n return e.target.select();\n };\n bind(self.timeContainer, [\"increment\"], updateTime);\n bind(self.timeContainer, \"blur\", updateTime, { capture: true });\n bind(self.timeContainer, \"mousedown\", onClick(timeIncrement));\n bind([self.hourElement, self.minuteElement], [\"focus\", \"click\"], selText);\n if (self.secondElement !== undefined)\n bind(self.secondElement, \"focus\", function () { return self.secondElement && self.secondElement.select(); });\n if (self.amPM !== undefined) {\n bind(self.amPM, \"mousedown\", onClick(function (e) {\n updateTime(e);\n triggerChange();\n }));\n }\n }\n }\n /**\n * Set the calendar view to a particular date.\n * @param {Date} jumpDate the date to set the view to\n * @param {boolean} triggerChange if change events should be triggered\n */\n function jumpToDate(jumpDate, triggerChange) {\n var jumpTo = jumpDate !== undefined\n ? self.parseDate(jumpDate)\n : self.latestSelectedDateObj ||\n (self.config.minDate && self.config.minDate > self.now\n ? self.config.minDate\n : self.config.maxDate && self.config.maxDate < self.now\n ? self.config.maxDate\n : self.now);\n var oldYear = self.currentYear;\n var oldMonth = self.currentMonth;\n try {\n if (jumpTo !== undefined) {\n self.currentYear = jumpTo.getFullYear();\n self.currentMonth = jumpTo.getMonth();\n }\n }\n catch (e) {\n /* istanbul ignore next */\n e.message = \"Invalid date supplied: \" + jumpTo;\n self.config.errorHandler(e);\n }\n if (triggerChange && self.currentYear !== oldYear) {\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n if (triggerChange &&\n (self.currentYear !== oldYear || self.currentMonth !== oldMonth)) {\n triggerEvent(\"onMonthChange\");\n }\n self.redraw();\n }\n /**\n * The up/down arrow handler for time inputs\n * @param {Event} e the click event\n */\n function timeIncrement(e) {\n if (~e.target.className.indexOf(\"arrow\"))\n incrementNumInput(e, e.target.classList.contains(\"arrowUp\") ? 1 : -1);\n }\n /**\n * Increments/decrements the value of input associ-\n * ated with the up/down arrow by dispatching an\n * \"increment\" event on the input.\n *\n * @param {Event} e the click event\n * @param {Number} delta the diff (usually 1 or -1)\n * @param {Element} inputElem the input element\n */\n function incrementNumInput(e, delta, inputElem) {\n var target = e && e.target;\n var input = inputElem ||\n (target && target.parentNode && target.parentNode.firstChild);\n var event = createEvent(\"increment\");\n event.delta = delta;\n input && input.dispatchEvent(event);\n }\n function build() {\n var fragment = window.document.createDocumentFragment();\n self.calendarContainer = createElement(\"div\", \"flatpickr-calendar\");\n self.calendarContainer.tabIndex = -1;\n if (!self.config.noCalendar) {\n fragment.appendChild(buildMonthNav());\n self.innerContainer = createElement(\"div\", \"flatpickr-innerContainer\");\n if (self.config.weekNumbers) {\n var _a = buildWeeks(), weekWrapper = _a.weekWrapper, weekNumbers = _a.weekNumbers;\n self.innerContainer.appendChild(weekWrapper);\n self.weekNumbers = weekNumbers;\n self.weekWrapper = weekWrapper;\n }\n self.rContainer = createElement(\"div\", \"flatpickr-rContainer\");\n self.rContainer.appendChild(buildWeekdays());\n if (!self.daysContainer) {\n self.daysContainer = createElement(\"div\", \"flatpickr-days\");\n self.daysContainer.tabIndex = -1;\n }\n buildDays();\n self.rContainer.appendChild(self.daysContainer);\n self.innerContainer.appendChild(self.rContainer);\n fragment.appendChild(self.innerContainer);\n }\n if (self.config.enableTime) {\n fragment.appendChild(buildTime());\n }\n toggleClass(self.calendarContainer, \"rangeMode\", self.config.mode === \"range\");\n toggleClass(self.calendarContainer, \"animate\", self.config.animate === true);\n toggleClass(self.calendarContainer, \"multiMonth\", self.config.showMonths > 1);\n self.calendarContainer.appendChild(fragment);\n var customAppend = self.config.appendTo !== undefined &&\n self.config.appendTo.nodeType !== undefined;\n if (self.config.inline || self.config.static) {\n self.calendarContainer.classList.add(self.config.inline ? \"inline\" : \"static\");\n if (self.config.inline) {\n if (!customAppend && self.element.parentNode)\n self.element.parentNode.insertBefore(self.calendarContainer, self._input.nextSibling);\n else if (self.config.appendTo !== undefined)\n self.config.appendTo.appendChild(self.calendarContainer);\n }\n if (self.config.static) {\n var wrapper = createElement(\"div\", \"flatpickr-wrapper\");\n if (self.element.parentNode)\n self.element.parentNode.insertBefore(wrapper, self.element);\n wrapper.appendChild(self.element);\n if (self.altInput)\n wrapper.appendChild(self.altInput);\n wrapper.appendChild(self.calendarContainer);\n }\n }\n if (!self.config.static && !self.config.inline)\n (self.config.appendTo !== undefined\n ? self.config.appendTo\n : window.document.body).appendChild(self.calendarContainer);\n }\n function createDay(className, date, dayNumber, i) {\n var dateIsEnabled = isEnabled(date, true), dayElement = createElement(\"span\", \"flatpickr-day \" + className, date.getDate().toString());\n dayElement.dateObj = date;\n dayElement.$i = i;\n dayElement.setAttribute(\"aria-label\", self.formatDate(date, self.config.ariaDateFormat));\n if (className.indexOf(\"hidden\") === -1 &&\n compareDates(date, self.now) === 0) {\n self.todayDateElem = dayElement;\n dayElement.classList.add(\"today\");\n dayElement.setAttribute(\"aria-current\", \"date\");\n }\n if (dateIsEnabled) {\n dayElement.tabIndex = -1;\n if (isDateSelected(date)) {\n dayElement.classList.add(\"selected\");\n self.selectedDateElem = dayElement;\n if (self.config.mode === \"range\") {\n toggleClass(dayElement, \"startRange\", self.selectedDates[0] &&\n compareDates(date, self.selectedDates[0], true) === 0);\n toggleClass(dayElement, \"endRange\", self.selectedDates[1] &&\n compareDates(date, self.selectedDates[1], true) === 0);\n if (className === \"nextMonthDay\")\n dayElement.classList.add(\"inRange\");\n }\n }\n }\n else {\n dayElement.classList.add(\"flatpickr-disabled\");\n }\n if (self.config.mode === \"range\") {\n if (isDateInRange(date) && !isDateSelected(date))\n dayElement.classList.add(\"inRange\");\n }\n if (self.weekNumbers &&\n self.config.showMonths === 1 &&\n className !== \"prevMonthDay\" &&\n dayNumber % 7 === 1) {\n self.weekNumbers.insertAdjacentHTML(\"beforeend\", \"\" + self.config.getWeek(date) + \"\");\n }\n triggerEvent(\"onDayCreate\", dayElement);\n return dayElement;\n }\n function focusOnDayElem(targetNode) {\n targetNode.focus();\n if (self.config.mode === \"range\")\n onMouseOver(targetNode);\n }\n function getFirstAvailableDay(delta) {\n var startMonth = delta > 0 ? 0 : self.config.showMonths - 1;\n var endMonth = delta > 0 ? self.config.showMonths : -1;\n for (var m = startMonth; m != endMonth; m += delta) {\n var month = self.daysContainer.children[m];\n var startIndex = delta > 0 ? 0 : month.children.length - 1;\n var endIndex = delta > 0 ? month.children.length : -1;\n for (var i = startIndex; i != endIndex; i += delta) {\n var c = month.children[i];\n if (c.className.indexOf(\"hidden\") === -1 && isEnabled(c.dateObj))\n return c;\n }\n }\n return undefined;\n }\n function getNextAvailableDay(current, delta) {\n var givenMonth = current.className.indexOf(\"Month\") === -1\n ? current.dateObj.getMonth()\n : self.currentMonth;\n var endMonth = delta > 0 ? self.config.showMonths : -1;\n var loopDelta = delta > 0 ? 1 : -1;\n for (var m = givenMonth - self.currentMonth; m != endMonth; m += loopDelta) {\n var month = self.daysContainer.children[m];\n var startIndex = givenMonth - self.currentMonth === m\n ? current.$i + delta\n : delta < 0\n ? month.children.length - 1\n : 0;\n var numMonthDays = month.children.length;\n for (var i = startIndex; i >= 0 && i < numMonthDays && i != (delta > 0 ? numMonthDays : -1); i += loopDelta) {\n var c = month.children[i];\n if (c.className.indexOf(\"hidden\") === -1 &&\n isEnabled(c.dateObj) &&\n Math.abs(current.$i - i) >= Math.abs(delta))\n return focusOnDayElem(c);\n }\n }\n self.changeMonth(loopDelta);\n focusOnDay(getFirstAvailableDay(loopDelta), 0);\n return undefined;\n }\n function focusOnDay(current, offset) {\n var dayFocused = isInView(document.activeElement || document.body);\n var startElem = current !== undefined\n ? current\n : dayFocused\n ? document.activeElement\n : self.selectedDateElem !== undefined && isInView(self.selectedDateElem)\n ? self.selectedDateElem\n : self.todayDateElem !== undefined && isInView(self.todayDateElem)\n ? self.todayDateElem\n : getFirstAvailableDay(offset > 0 ? 1 : -1);\n if (startElem === undefined)\n return self._input.focus();\n if (!dayFocused)\n return focusOnDayElem(startElem);\n getNextAvailableDay(startElem, offset);\n }\n function buildMonthDays(year, month) {\n var firstOfMonth = (new Date(year, month, 1).getDay() - self.l10n.firstDayOfWeek + 7) % 7;\n var prevMonthDays = self.utils.getDaysInMonth((month - 1 + 12) % 12);\n var daysInMonth = self.utils.getDaysInMonth(month), days = window.document.createDocumentFragment(), isMultiMonth = self.config.showMonths > 1, prevMonthDayClass = isMultiMonth ? \"prevMonthDay hidden\" : \"prevMonthDay\", nextMonthDayClass = isMultiMonth ? \"nextMonthDay hidden\" : \"nextMonthDay\";\n var dayNumber = prevMonthDays + 1 - firstOfMonth, dayIndex = 0;\n // prepend days from the ending of previous month\n for (; dayNumber <= prevMonthDays; dayNumber++, dayIndex++) {\n days.appendChild(createDay(prevMonthDayClass, new Date(year, month - 1, dayNumber), dayNumber, dayIndex));\n }\n // Start at 1 since there is no 0th day\n for (dayNumber = 1; dayNumber <= daysInMonth; dayNumber++, dayIndex++) {\n days.appendChild(createDay(\"\", new Date(year, month, dayNumber), dayNumber, dayIndex));\n }\n // append days from the next month\n for (var dayNum = daysInMonth + 1; dayNum <= 42 - firstOfMonth &&\n (self.config.showMonths === 1 || dayIndex % 7 !== 0); dayNum++, dayIndex++) {\n days.appendChild(createDay(nextMonthDayClass, new Date(year, month + 1, dayNum % daysInMonth), dayNum, dayIndex));\n }\n //updateNavigationCurrentMonth();\n var dayContainer = createElement(\"div\", \"dayContainer\");\n dayContainer.appendChild(days);\n return dayContainer;\n }\n function buildDays() {\n if (self.daysContainer === undefined) {\n return;\n }\n clearNode(self.daysContainer);\n // TODO: week numbers for each month\n if (self.weekNumbers)\n clearNode(self.weekNumbers);\n var frag = document.createDocumentFragment();\n for (var i = 0; i < self.config.showMonths; i++) {\n var d = new Date(self.currentYear, self.currentMonth, 1);\n d.setMonth(self.currentMonth + i);\n frag.appendChild(buildMonthDays(d.getFullYear(), d.getMonth()));\n }\n self.daysContainer.appendChild(frag);\n self.days = self.daysContainer.firstChild;\n if (self.config.mode === \"range\" && self.selectedDates.length === 1) {\n onMouseOver();\n }\n }\n function buildMonthSwitch() {\n if (self.config.showMonths > 1 ||\n self.config.monthSelectorType !== \"dropdown\")\n return;\n var shouldBuildMonth = function (month) {\n if (self.config.minDate !== undefined &&\n self.currentYear === self.config.minDate.getFullYear() &&\n month < self.config.minDate.getMonth()) {\n return false;\n }\n return !(self.config.maxDate !== undefined &&\n self.currentYear === self.config.maxDate.getFullYear() &&\n month > self.config.maxDate.getMonth());\n };\n self.monthsDropdownContainer.tabIndex = -1;\n self.monthsDropdownContainer.innerHTML = \"\";\n for (var i = 0; i < 12; i++) {\n if (!shouldBuildMonth(i))\n continue;\n var month = createElement(\"option\", \"flatpickr-monthDropdown-month\");\n month.value = new Date(self.currentYear, i).getMonth().toString();\n month.textContent = monthToStr(i, self.config.shorthandCurrentMonth, self.l10n);\n month.tabIndex = -1;\n if (self.currentMonth === i) {\n month.selected = true;\n }\n self.monthsDropdownContainer.appendChild(month);\n }\n }\n function buildMonth() {\n var container = createElement(\"div\", \"flatpickr-month\");\n var monthNavFragment = window.document.createDocumentFragment();\n var monthElement;\n if (self.config.showMonths > 1 ||\n self.config.monthSelectorType === \"static\") {\n monthElement = createElement(\"span\", \"cur-month\");\n }\n else {\n self.monthsDropdownContainer = createElement(\"select\", \"flatpickr-monthDropdown-months\");\n bind(self.monthsDropdownContainer, \"change\", function (e) {\n var target = e.target;\n var selectedMonth = parseInt(target.value, 10);\n self.changeMonth(selectedMonth - self.currentMonth);\n triggerEvent(\"onMonthChange\");\n });\n buildMonthSwitch();\n monthElement = self.monthsDropdownContainer;\n }\n var yearInput = createNumberInput(\"cur-year\", { tabindex: \"-1\" });\n var yearElement = yearInput.getElementsByTagName(\"input\")[0];\n yearElement.setAttribute(\"aria-label\", self.l10n.yearAriaLabel);\n if (self.config.minDate) {\n yearElement.setAttribute(\"min\", self.config.minDate.getFullYear().toString());\n }\n if (self.config.maxDate) {\n yearElement.setAttribute(\"max\", self.config.maxDate.getFullYear().toString());\n yearElement.disabled =\n !!self.config.minDate &&\n self.config.minDate.getFullYear() === self.config.maxDate.getFullYear();\n }\n var currentMonth = createElement(\"div\", \"flatpickr-current-month\");\n currentMonth.appendChild(monthElement);\n currentMonth.appendChild(yearInput);\n monthNavFragment.appendChild(currentMonth);\n container.appendChild(monthNavFragment);\n return {\n container: container,\n yearElement: yearElement,\n monthElement: monthElement\n };\n }\n function buildMonths() {\n clearNode(self.monthNav);\n self.monthNav.appendChild(self.prevMonthNav);\n if (self.config.showMonths) {\n self.yearElements = [];\n self.monthElements = [];\n }\n for (var m = self.config.showMonths; m--;) {\n var month = buildMonth();\n self.yearElements.push(month.yearElement);\n self.monthElements.push(month.monthElement);\n self.monthNav.appendChild(month.container);\n }\n self.monthNav.appendChild(self.nextMonthNav);\n }\n function buildMonthNav() {\n self.monthNav = createElement(\"div\", \"flatpickr-months\");\n self.yearElements = [];\n self.monthElements = [];\n self.prevMonthNav = createElement(\"span\", \"flatpickr-prev-month\");\n self.prevMonthNav.innerHTML = self.config.prevArrow;\n self.nextMonthNav = createElement(\"span\", \"flatpickr-next-month\");\n self.nextMonthNav.innerHTML = self.config.nextArrow;\n buildMonths();\n Object.defineProperty(self, \"_hidePrevMonthArrow\", {\n get: function () { return self.__hidePrevMonthArrow; },\n set: function (bool) {\n if (self.__hidePrevMonthArrow !== bool) {\n toggleClass(self.prevMonthNav, \"flatpickr-disabled\", bool);\n self.__hidePrevMonthArrow = bool;\n }\n }\n });\n Object.defineProperty(self, \"_hideNextMonthArrow\", {\n get: function () { return self.__hideNextMonthArrow; },\n set: function (bool) {\n if (self.__hideNextMonthArrow !== bool) {\n toggleClass(self.nextMonthNav, \"flatpickr-disabled\", bool);\n self.__hideNextMonthArrow = bool;\n }\n }\n });\n self.currentYearElement = self.yearElements[0];\n updateNavigationCurrentMonth();\n return self.monthNav;\n }\n function buildTime() {\n self.calendarContainer.classList.add(\"hasTime\");\n if (self.config.noCalendar)\n self.calendarContainer.classList.add(\"noCalendar\");\n self.timeContainer = createElement(\"div\", \"flatpickr-time\");\n self.timeContainer.tabIndex = -1;\n var separator = createElement(\"span\", \"flatpickr-time-separator\", \":\");\n var hourInput = createNumberInput(\"flatpickr-hour\", {\n \"aria-label\": self.l10n.hourAriaLabel\n });\n self.hourElement = hourInput.getElementsByTagName(\"input\")[0];\n var minuteInput = createNumberInput(\"flatpickr-minute\", {\n \"aria-label\": self.l10n.minuteAriaLabel\n });\n self.minuteElement = minuteInput.getElementsByTagName(\"input\")[0];\n self.hourElement.tabIndex = self.minuteElement.tabIndex = -1;\n self.hourElement.value = pad(self.latestSelectedDateObj\n ? self.latestSelectedDateObj.getHours()\n : self.config.time_24hr\n ? self.config.defaultHour\n : military2ampm(self.config.defaultHour));\n self.minuteElement.value = pad(self.latestSelectedDateObj\n ? self.latestSelectedDateObj.getMinutes()\n : self.config.defaultMinute);\n self.hourElement.setAttribute(\"step\", self.config.hourIncrement.toString());\n self.minuteElement.setAttribute(\"step\", self.config.minuteIncrement.toString());\n self.hourElement.setAttribute(\"min\", self.config.time_24hr ? \"0\" : \"1\");\n self.hourElement.setAttribute(\"max\", self.config.time_24hr ? \"23\" : \"12\");\n self.minuteElement.setAttribute(\"min\", \"0\");\n self.minuteElement.setAttribute(\"max\", \"59\");\n self.timeContainer.appendChild(hourInput);\n self.timeContainer.appendChild(separator);\n self.timeContainer.appendChild(minuteInput);\n if (self.config.time_24hr)\n self.timeContainer.classList.add(\"time24hr\");\n if (self.config.enableSeconds) {\n self.timeContainer.classList.add(\"hasSeconds\");\n var secondInput = createNumberInput(\"flatpickr-second\");\n self.secondElement = secondInput.getElementsByTagName(\"input\")[0];\n self.secondElement.value = pad(self.latestSelectedDateObj\n ? self.latestSelectedDateObj.getSeconds()\n : self.config.defaultSeconds);\n self.secondElement.setAttribute(\"step\", self.minuteElement.getAttribute(\"step\"));\n self.secondElement.setAttribute(\"min\", \"0\");\n self.secondElement.setAttribute(\"max\", \"59\");\n self.timeContainer.appendChild(createElement(\"span\", \"flatpickr-time-separator\", \":\"));\n self.timeContainer.appendChild(secondInput);\n }\n if (!self.config.time_24hr) {\n // add self.amPM if appropriate\n self.amPM = createElement(\"span\", \"flatpickr-am-pm\", self.l10n.amPM[int((self.latestSelectedDateObj\n ? self.hourElement.value\n : self.config.defaultHour) > 11)]);\n self.amPM.title = self.l10n.toggleTitle;\n self.amPM.tabIndex = -1;\n self.timeContainer.appendChild(self.amPM);\n }\n return self.timeContainer;\n }\n function buildWeekdays() {\n if (!self.weekdayContainer)\n self.weekdayContainer = createElement(\"div\", \"flatpickr-weekdays\");\n else\n clearNode(self.weekdayContainer);\n for (var i = self.config.showMonths; i--;) {\n var container = createElement(\"div\", \"flatpickr-weekdaycontainer\");\n self.weekdayContainer.appendChild(container);\n }\n updateWeekdays();\n return self.weekdayContainer;\n }\n function updateWeekdays() {\n var firstDayOfWeek = self.l10n.firstDayOfWeek;\n var weekdays = self.l10n.weekdays.shorthand.slice();\n if (firstDayOfWeek > 0 && firstDayOfWeek < weekdays.length) {\n weekdays = weekdays.splice(firstDayOfWeek, weekdays.length).concat(weekdays.splice(0, firstDayOfWeek));\n }\n for (var i = self.config.showMonths; i--;) {\n self.weekdayContainer.children[i].innerHTML = \"\\n \\n \" + weekdays.join(\"\") + \"\\n \\n \";\n }\n }\n /* istanbul ignore next */\n function buildWeeks() {\n self.calendarContainer.classList.add(\"hasWeeks\");\n var weekWrapper = createElement(\"div\", \"flatpickr-weekwrapper\");\n weekWrapper.appendChild(createElement(\"span\", \"flatpickr-weekday\", self.l10n.weekAbbreviation));\n var weekNumbers = createElement(\"div\", \"flatpickr-weeks\");\n weekWrapper.appendChild(weekNumbers);\n return {\n weekWrapper: weekWrapper,\n weekNumbers: weekNumbers\n };\n }\n function changeMonth(value, isOffset) {\n if (isOffset === void 0) { isOffset = true; }\n var delta = isOffset ? value : value - self.currentMonth;\n if ((delta < 0 && self._hidePrevMonthArrow === true) ||\n (delta > 0 && self._hideNextMonthArrow === true))\n return;\n self.currentMonth += delta;\n if (self.currentMonth < 0 || self.currentMonth > 11) {\n self.currentYear += self.currentMonth > 11 ? 1 : -1;\n self.currentMonth = (self.currentMonth + 12) % 12;\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n buildDays();\n triggerEvent(\"onMonthChange\");\n updateNavigationCurrentMonth();\n }\n function clear(triggerChangeEvent, toInitial) {\n if (triggerChangeEvent === void 0) { triggerChangeEvent = true; }\n if (toInitial === void 0) { toInitial = true; }\n self.input.value = \"\";\n if (self.altInput !== undefined)\n self.altInput.value = \"\";\n if (self.mobileInput !== undefined)\n self.mobileInput.value = \"\";\n self.selectedDates = [];\n self.latestSelectedDateObj = undefined;\n if (toInitial === true) {\n self.currentYear = self._initialDate.getFullYear();\n self.currentMonth = self._initialDate.getMonth();\n }\n self.showTimeInput = false;\n if (self.config.enableTime === true) {\n setDefaultHours();\n }\n self.redraw();\n if (triggerChangeEvent)\n // triggerChangeEvent is true (default) or an Event\n triggerEvent(\"onChange\");\n }\n function close() {\n self.isOpen = false;\n if (!self.isMobile) {\n if (self.calendarContainer !== undefined) {\n self.calendarContainer.classList.remove(\"open\");\n }\n if (self._input !== undefined) {\n self._input.classList.remove(\"active\");\n }\n }\n triggerEvent(\"onClose\");\n }\n function destroy() {\n if (self.config !== undefined)\n triggerEvent(\"onDestroy\");\n for (var i = self._handlers.length; i--;) {\n var h = self._handlers[i];\n h.element.removeEventListener(h.event, h.handler, h.options);\n }\n self._handlers = [];\n if (self.mobileInput) {\n if (self.mobileInput.parentNode)\n self.mobileInput.parentNode.removeChild(self.mobileInput);\n self.mobileInput = undefined;\n }\n else if (self.calendarContainer && self.calendarContainer.parentNode) {\n if (self.config.static && self.calendarContainer.parentNode) {\n var wrapper = self.calendarContainer.parentNode;\n wrapper.lastChild && wrapper.removeChild(wrapper.lastChild);\n if (wrapper.parentNode) {\n while (wrapper.firstChild)\n wrapper.parentNode.insertBefore(wrapper.firstChild, wrapper);\n wrapper.parentNode.removeChild(wrapper);\n }\n }\n else\n self.calendarContainer.parentNode.removeChild(self.calendarContainer);\n }\n if (self.altInput) {\n self.input.type = \"text\";\n if (self.altInput.parentNode)\n self.altInput.parentNode.removeChild(self.altInput);\n delete self.altInput;\n }\n if (self.input) {\n self.input.type = self.input._type;\n self.input.classList.remove(\"flatpickr-input\");\n self.input.removeAttribute(\"readonly\");\n self.input.value = \"\";\n }\n [\n \"_showTimeInput\",\n \"latestSelectedDateObj\",\n \"_hideNextMonthArrow\",\n \"_hidePrevMonthArrow\",\n \"__hideNextMonthArrow\",\n \"__hidePrevMonthArrow\",\n \"isMobile\",\n \"isOpen\",\n \"selectedDateElem\",\n \"minDateHasTime\",\n \"maxDateHasTime\",\n \"days\",\n \"daysContainer\",\n \"_input\",\n \"_positionElement\",\n \"innerContainer\",\n \"rContainer\",\n \"monthNav\",\n \"todayDateElem\",\n \"calendarContainer\",\n \"weekdayContainer\",\n \"prevMonthNav\",\n \"nextMonthNav\",\n \"monthsDropdownContainer\",\n \"currentMonthElement\",\n \"currentYearElement\",\n \"navigationCurrentMonth\",\n \"selectedDateElem\",\n \"config\",\n ].forEach(function (k) {\n try {\n delete self[k];\n }\n catch (_) { }\n });\n }\n function isCalendarElem(elem) {\n if (self.config.appendTo && self.config.appendTo.contains(elem))\n return true;\n return self.calendarContainer.contains(elem);\n }\n function documentClick(e) {\n if (self.isOpen && !self.config.inline) {\n var eventTarget_1 = getEventTarget(e);\n var isCalendarElement = isCalendarElem(eventTarget_1);\n var isInput = eventTarget_1 === self.input ||\n eventTarget_1 === self.altInput ||\n self.element.contains(eventTarget_1) ||\n // web components\n // e.path is not present in all browsers. circumventing typechecks\n (e.path &&\n e.path.indexOf &&\n (~e.path.indexOf(self.input) ||\n ~e.path.indexOf(self.altInput)));\n var lostFocus = e.type === \"blur\"\n ? isInput &&\n e.relatedTarget &&\n !isCalendarElem(e.relatedTarget)\n : !isInput &&\n !isCalendarElement &&\n !isCalendarElem(e.relatedTarget);\n var isIgnored = !self.config.ignoredFocusElements.some(function (elem) {\n return elem.contains(eventTarget_1);\n });\n if (lostFocus && isIgnored) {\n self.close();\n if (self.config.mode === \"range\" && self.selectedDates.length === 1) {\n self.clear(false);\n self.redraw();\n }\n }\n }\n }\n function changeYear(newYear) {\n if (!newYear ||\n (self.config.minDate && newYear < self.config.minDate.getFullYear()) ||\n (self.config.maxDate && newYear > self.config.maxDate.getFullYear()))\n return;\n var newYearNum = newYear, isNewYear = self.currentYear !== newYearNum;\n self.currentYear = newYearNum || self.currentYear;\n if (self.config.maxDate &&\n self.currentYear === self.config.maxDate.getFullYear()) {\n self.currentMonth = Math.min(self.config.maxDate.getMonth(), self.currentMonth);\n }\n else if (self.config.minDate &&\n self.currentYear === self.config.minDate.getFullYear()) {\n self.currentMonth = Math.max(self.config.minDate.getMonth(), self.currentMonth);\n }\n if (isNewYear) {\n self.redraw();\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n }\n function isEnabled(date, timeless) {\n if (timeless === void 0) { timeless = true; }\n var dateToCheck = self.parseDate(date, undefined, timeless); // timeless\n if ((self.config.minDate &&\n dateToCheck &&\n compareDates(dateToCheck, self.config.minDate, timeless !== undefined ? timeless : !self.minDateHasTime) < 0) ||\n (self.config.maxDate &&\n dateToCheck &&\n compareDates(dateToCheck, self.config.maxDate, timeless !== undefined ? timeless : !self.maxDateHasTime) > 0))\n return false;\n if (self.config.enable.length === 0 && self.config.disable.length === 0)\n return true;\n if (dateToCheck === undefined)\n return false;\n var bool = self.config.enable.length > 0, array = bool ? self.config.enable : self.config.disable;\n for (var i = 0, d = void 0; i < array.length; i++) {\n d = array[i];\n if (typeof d === \"function\" &&\n d(dateToCheck) // disabled by function\n )\n return bool;\n else if (d instanceof Date &&\n dateToCheck !== undefined &&\n d.getTime() === dateToCheck.getTime())\n // disabled by date\n return bool;\n else if (typeof d === \"string\" && dateToCheck !== undefined) {\n // disabled by date string\n var parsed = self.parseDate(d, undefined, true);\n return parsed && parsed.getTime() === dateToCheck.getTime()\n ? bool\n : !bool;\n }\n else if (\n // disabled by range\n typeof d === \"object\" &&\n dateToCheck !== undefined &&\n d.from &&\n d.to &&\n dateToCheck.getTime() >= d.from.getTime() &&\n dateToCheck.getTime() <= d.to.getTime())\n return bool;\n }\n return !bool;\n }\n function isInView(elem) {\n if (self.daysContainer !== undefined)\n return (elem.className.indexOf(\"hidden\") === -1 &&\n self.daysContainer.contains(elem));\n return false;\n }\n function onKeyDown(e) {\n // e.key e.keyCode\n // \"Backspace\" 8\n // \"Tab\" 9\n // \"Enter\" 13\n // \"Escape\" (IE \"Esc\") 27\n // \"ArrowLeft\" (IE \"Left\") 37\n // \"ArrowUp\" (IE \"Up\") 38\n // \"ArrowRight\" (IE \"Right\") 39\n // \"ArrowDown\" (IE \"Down\") 40\n // \"Delete\" (IE \"Del\") 46\n var isInput = e.target === self._input;\n var allowInput = self.config.allowInput;\n var allowKeydown = self.isOpen && (!allowInput || !isInput);\n var allowInlineKeydown = self.config.inline && isInput && !allowInput;\n if (e.keyCode === 13 && isInput) {\n if (allowInput) {\n self.setDate(self._input.value, true, e.target === self.altInput\n ? self.config.altFormat\n : self.config.dateFormat);\n return e.target.blur();\n }\n else {\n self.open();\n }\n }\n else if (isCalendarElem(e.target) ||\n allowKeydown ||\n allowInlineKeydown) {\n var isTimeObj = !!self.timeContainer &&\n self.timeContainer.contains(e.target);\n switch (e.keyCode) {\n case 13:\n if (isTimeObj) {\n e.preventDefault();\n updateTime();\n focusAndClose();\n }\n else\n selectDate(e);\n break;\n case 27: // escape\n e.preventDefault();\n focusAndClose();\n break;\n case 8:\n case 46:\n if (isInput && !self.config.allowInput) {\n e.preventDefault();\n self.clear();\n }\n break;\n case 37:\n case 39:\n if (!isTimeObj && !isInput) {\n e.preventDefault();\n if (self.daysContainer !== undefined &&\n (allowInput === false ||\n (document.activeElement && isInView(document.activeElement)))) {\n var delta_1 = e.keyCode === 39 ? 1 : -1;\n if (!e.ctrlKey)\n focusOnDay(undefined, delta_1);\n else {\n e.stopPropagation();\n changeMonth(delta_1);\n focusOnDay(getFirstAvailableDay(1), 0);\n }\n }\n }\n else if (self.hourElement)\n self.hourElement.focus();\n break;\n case 38:\n case 40:\n e.preventDefault();\n var delta = e.keyCode === 40 ? 1 : -1;\n if ((self.daysContainer && e.target.$i !== undefined) ||\n e.target === self.input) {\n if (e.ctrlKey) {\n e.stopPropagation();\n changeYear(self.currentYear - delta);\n focusOnDay(getFirstAvailableDay(1), 0);\n }\n else if (!isTimeObj)\n focusOnDay(undefined, delta * 7);\n }\n else if (e.target === self.currentYearElement) {\n changeYear(self.currentYear - delta);\n }\n else if (self.config.enableTime) {\n if (!isTimeObj && self.hourElement)\n self.hourElement.focus();\n updateTime(e);\n self._debouncedChange();\n }\n break;\n case 9:\n if (isTimeObj) {\n var elems = [\n self.hourElement,\n self.minuteElement,\n self.secondElement,\n self.amPM,\n ]\n .concat(self.pluginElements)\n .filter(function (x) { return x; });\n var i = elems.indexOf(e.target);\n if (i !== -1) {\n var target = elems[i + (e.shiftKey ? -1 : 1)];\n e.preventDefault();\n (target || self._input).focus();\n }\n }\n else if (!self.config.noCalendar &&\n self.daysContainer &&\n self.daysContainer.contains(e.target) &&\n e.shiftKey) {\n e.preventDefault();\n self._input.focus();\n }\n break;\n default:\n break;\n }\n }\n if (self.amPM !== undefined && e.target === self.amPM) {\n switch (e.key) {\n case self.l10n.amPM[0].charAt(0):\n case self.l10n.amPM[0].charAt(0).toLowerCase():\n self.amPM.textContent = self.l10n.amPM[0];\n setHoursFromInputs();\n updateValue();\n break;\n case self.l10n.amPM[1].charAt(0):\n case self.l10n.amPM[1].charAt(0).toLowerCase():\n self.amPM.textContent = self.l10n.amPM[1];\n setHoursFromInputs();\n updateValue();\n break;\n }\n }\n if (isInput || isCalendarElem(e.target)) {\n triggerEvent(\"onKeyDown\", e);\n }\n }\n function onMouseOver(elem) {\n if (self.selectedDates.length !== 1 ||\n (elem &&\n (!elem.classList.contains(\"flatpickr-day\") ||\n elem.classList.contains(\"flatpickr-disabled\"))))\n return;\n var hoverDate = elem\n ? elem.dateObj.getTime()\n : self.days.firstElementChild.dateObj.getTime(), initialDate = self.parseDate(self.selectedDates[0], undefined, true).getTime(), rangeStartDate = Math.min(hoverDate, self.selectedDates[0].getTime()), rangeEndDate = Math.max(hoverDate, self.selectedDates[0].getTime());\n var containsDisabled = false;\n var minRange = 0, maxRange = 0;\n for (var t = rangeStartDate; t < rangeEndDate; t += duration.DAY) {\n if (!isEnabled(new Date(t), true)) {\n containsDisabled =\n containsDisabled || (t > rangeStartDate && t < rangeEndDate);\n if (t < initialDate && (!minRange || t > minRange))\n minRange = t;\n else if (t > initialDate && (!maxRange || t < maxRange))\n maxRange = t;\n }\n }\n for (var m = 0; m < self.config.showMonths; m++) {\n var month = self.daysContainer.children[m];\n var _loop_1 = function (i, l) {\n var dayElem = month.children[i], date = dayElem.dateObj;\n var timestamp = date.getTime();\n var outOfRange = (minRange > 0 && timestamp < minRange) ||\n (maxRange > 0 && timestamp > maxRange);\n if (outOfRange) {\n dayElem.classList.add(\"notAllowed\");\n [\"inRange\", \"startRange\", \"endRange\"].forEach(function (c) {\n dayElem.classList.remove(c);\n });\n return \"continue\";\n }\n else if (containsDisabled && !outOfRange)\n return \"continue\";\n [\"startRange\", \"inRange\", \"endRange\", \"notAllowed\"].forEach(function (c) {\n dayElem.classList.remove(c);\n });\n if (elem !== undefined) {\n elem.classList.add(hoverDate <= self.selectedDates[0].getTime()\n ? \"startRange\"\n : \"endRange\");\n if (initialDate < hoverDate && timestamp === initialDate)\n dayElem.classList.add(\"startRange\");\n else if (initialDate > hoverDate && timestamp === initialDate)\n dayElem.classList.add(\"endRange\");\n if (timestamp >= minRange &&\n (maxRange === 0 || timestamp <= maxRange) &&\n isBetween(timestamp, initialDate, hoverDate))\n dayElem.classList.add(\"inRange\");\n }\n };\n for (var i = 0, l = month.children.length; i < l; i++) {\n _loop_1(i, l);\n }\n }\n }\n function onResize() {\n if (self.isOpen && !self.config.static && !self.config.inline)\n positionCalendar();\n }\n function setDefaultTime() {\n self.setDate(self.config.minDate !== undefined\n ? new Date(self.config.minDate.getTime())\n : new Date(), true);\n setDefaultHours();\n updateValue();\n }\n function open(e, positionElement) {\n if (positionElement === void 0) { positionElement = self._positionElement; }\n if (self.isMobile === true) {\n if (e) {\n e.preventDefault();\n e.target && e.target.blur();\n }\n if (self.mobileInput !== undefined) {\n self.mobileInput.focus();\n self.mobileInput.click();\n }\n triggerEvent(\"onOpen\");\n return;\n }\n if (self._input.disabled || self.config.inline)\n return;\n var wasOpen = self.isOpen;\n self.isOpen = true;\n if (!wasOpen) {\n self.calendarContainer.classList.add(\"open\");\n self._input.classList.add(\"active\");\n triggerEvent(\"onOpen\");\n positionCalendar(positionElement);\n }\n if (self.config.enableTime === true && self.config.noCalendar === true) {\n if (self.selectedDates.length === 0) {\n setDefaultTime();\n }\n if (self.config.allowInput === false &&\n (e === undefined ||\n !self.timeContainer.contains(e.relatedTarget))) {\n setTimeout(function () { return self.hourElement.select(); }, 50);\n }\n }\n }\n function minMaxDateSetter(type) {\n return function (date) {\n var dateObj = (self.config[\"_\" + type + \"Date\"] = self.parseDate(date, self.config.dateFormat));\n var inverseDateObj = self.config[\"_\" + (type === \"min\" ? \"max\" : \"min\") + \"Date\"];\n if (dateObj !== undefined) {\n self[type === \"min\" ? \"minDateHasTime\" : \"maxDateHasTime\"] =\n dateObj.getHours() > 0 ||\n dateObj.getMinutes() > 0 ||\n dateObj.getSeconds() > 0;\n }\n if (self.selectedDates) {\n self.selectedDates = self.selectedDates.filter(function (d) { return isEnabled(d); });\n if (!self.selectedDates.length && type === \"min\")\n setHoursFromDate(dateObj);\n updateValue();\n }\n if (self.daysContainer) {\n redraw();\n if (dateObj !== undefined)\n self.currentYearElement[type] = dateObj.getFullYear().toString();\n else\n self.currentYearElement.removeAttribute(type);\n self.currentYearElement.disabled =\n !!inverseDateObj &&\n dateObj !== undefined &&\n inverseDateObj.getFullYear() === dateObj.getFullYear();\n }\n };\n }\n function parseConfig() {\n var boolOpts = [\n \"wrap\",\n \"weekNumbers\",\n \"allowInput\",\n \"clickOpens\",\n \"time_24hr\",\n \"enableTime\",\n \"noCalendar\",\n \"altInput\",\n \"shorthandCurrentMonth\",\n \"inline\",\n \"static\",\n \"enableSeconds\",\n \"disableMobile\",\n ];\n var userConfig = __assign({}, instanceConfig, JSON.parse(JSON.stringify(element.dataset || {})));\n var formats = {};\n self.config.parseDate = userConfig.parseDate;\n self.config.formatDate = userConfig.formatDate;\n Object.defineProperty(self.config, \"enable\", {\n get: function () { return self.config._enable; },\n set: function (dates) {\n self.config._enable = parseDateRules(dates);\n }\n });\n Object.defineProperty(self.config, \"disable\", {\n get: function () { return self.config._disable; },\n set: function (dates) {\n self.config._disable = parseDateRules(dates);\n }\n });\n var timeMode = userConfig.mode === \"time\";\n if (!userConfig.dateFormat && (userConfig.enableTime || timeMode)) {\n var defaultDateFormat = flatpickr.defaultConfig.dateFormat || defaults.dateFormat;\n formats.dateFormat =\n userConfig.noCalendar || timeMode\n ? \"H:i\" + (userConfig.enableSeconds ? \":S\" : \"\")\n : defaultDateFormat + \" H:i\" + (userConfig.enableSeconds ? \":S\" : \"\");\n }\n if (userConfig.altInput &&\n (userConfig.enableTime || timeMode) &&\n !userConfig.altFormat) {\n var defaultAltFormat = flatpickr.defaultConfig.altFormat || defaults.altFormat;\n formats.altFormat =\n userConfig.noCalendar || timeMode\n ? \"h:i\" + (userConfig.enableSeconds ? \":S K\" : \" K\")\n : defaultAltFormat + (\" h:i\" + (userConfig.enableSeconds ? \":S\" : \"\") + \" K\");\n }\n if (!userConfig.altInputClass) {\n self.config.altInputClass =\n self.input.className + \" \" + self.config.altInputClass;\n }\n Object.defineProperty(self.config, \"minDate\", {\n get: function () { return self.config._minDate; },\n set: minMaxDateSetter(\"min\")\n });\n Object.defineProperty(self.config, \"maxDate\", {\n get: function () { return self.config._maxDate; },\n set: minMaxDateSetter(\"max\")\n });\n var minMaxTimeSetter = function (type) { return function (val) {\n self.config[type === \"min\" ? \"_minTime\" : \"_maxTime\"] = self.parseDate(val, \"H:i\");\n }; };\n Object.defineProperty(self.config, \"minTime\", {\n get: function () { return self.config._minTime; },\n set: minMaxTimeSetter(\"min\")\n });\n Object.defineProperty(self.config, \"maxTime\", {\n get: function () { return self.config._maxTime; },\n set: minMaxTimeSetter(\"max\")\n });\n if (userConfig.mode === \"time\") {\n self.config.noCalendar = true;\n self.config.enableTime = true;\n }\n Object.assign(self.config, formats, userConfig);\n for (var i = 0; i < boolOpts.length; i++)\n self.config[boolOpts[i]] =\n self.config[boolOpts[i]] === true ||\n self.config[boolOpts[i]] === \"true\";\n HOOKS.filter(function (hook) { return self.config[hook] !== undefined; }).forEach(function (hook) {\n self.config[hook] = arrayify(self.config[hook] || []).map(bindToInstance);\n });\n self.isMobile =\n !self.config.disableMobile &&\n !self.config.inline &&\n self.config.mode === \"single\" &&\n !self.config.disable.length &&\n !self.config.enable.length &&\n !self.config.weekNumbers &&\n /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n for (var i = 0; i < self.config.plugins.length; i++) {\n var pluginConf = self.config.plugins[i](self) || {};\n for (var key in pluginConf) {\n if (HOOKS.indexOf(key) > -1) {\n self.config[key] = arrayify(pluginConf[key])\n .map(bindToInstance)\n .concat(self.config[key]);\n }\n else if (typeof userConfig[key] === \"undefined\")\n self.config[key] = pluginConf[key];\n }\n }\n triggerEvent(\"onParseConfig\");\n }\n function setupLocale() {\n if (typeof self.config.locale !== \"object\" &&\n typeof flatpickr.l10ns[self.config.locale] === \"undefined\")\n self.config.errorHandler(new Error(\"flatpickr: invalid locale \" + self.config.locale));\n self.l10n = __assign({}, flatpickr.l10ns[\"default\"], (typeof self.config.locale === \"object\"\n ? self.config.locale\n : self.config.locale !== \"default\"\n ? flatpickr.l10ns[self.config.locale]\n : undefined));\n tokenRegex.K = \"(\" + self.l10n.amPM[0] + \"|\" + self.l10n.amPM[1] + \"|\" + self.l10n.amPM[0].toLowerCase() + \"|\" + self.l10n.amPM[1].toLowerCase() + \")\";\n var userConfig = __assign({}, instanceConfig, JSON.parse(JSON.stringify(element.dataset || {})));\n if (userConfig.time_24hr === undefined &&\n flatpickr.defaultConfig.time_24hr === undefined) {\n self.config.time_24hr = self.l10n.time_24hr;\n }\n self.formatDate = createDateFormatter(self);\n self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });\n }\n function positionCalendar(customPositionElement) {\n if (self.calendarContainer === undefined)\n return;\n triggerEvent(\"onPreCalendarPosition\");\n var positionElement = customPositionElement || self._positionElement;\n var calendarHeight = Array.prototype.reduce.call(self.calendarContainer.children, (function (acc, child) { return acc + child.offsetHeight; }), 0), calendarWidth = self.calendarContainer.offsetWidth, configPos = self.config.position.split(\" \"), configPosVertical = configPos[0], configPosHorizontal = configPos.length > 1 ? configPos[1] : null, inputBounds = positionElement.getBoundingClientRect(), distanceFromBottom = window.innerHeight - inputBounds.bottom, showOnTop = configPosVertical === \"above\" ||\n (configPosVertical !== \"below\" &&\n distanceFromBottom < calendarHeight &&\n inputBounds.top > calendarHeight);\n var top = window.pageYOffset +\n inputBounds.top +\n (!showOnTop ? positionElement.offsetHeight + 2 : -calendarHeight - 2);\n toggleClass(self.calendarContainer, \"arrowTop\", !showOnTop);\n toggleClass(self.calendarContainer, \"arrowBottom\", showOnTop);\n if (self.config.inline)\n return;\n var left = window.pageXOffset +\n inputBounds.left -\n (configPosHorizontal != null && configPosHorizontal === \"center\"\n ? (calendarWidth - inputBounds.width) / 2\n : 0);\n var right = window.document.body.offsetWidth - inputBounds.right;\n var rightMost = left + calendarWidth > window.document.body.offsetWidth;\n var centerMost = right + calendarWidth > window.document.body.offsetWidth;\n toggleClass(self.calendarContainer, \"rightMost\", rightMost);\n if (self.config.static)\n return;\n self.calendarContainer.style.top = top + \"px\";\n if (!rightMost) {\n self.calendarContainer.style.left = left + \"px\";\n self.calendarContainer.style.right = \"auto\";\n }\n else if (!centerMost) {\n self.calendarContainer.style.left = \"auto\";\n self.calendarContainer.style.right = right + \"px\";\n }\n else {\n var doc = document.styleSheets[0];\n // some testing environments don't have css support\n if (doc === undefined)\n return;\n var bodyWidth = window.document.body.offsetWidth;\n var centerLeft = Math.max(0, bodyWidth / 2 - calendarWidth / 2);\n var centerBefore = \".flatpickr-calendar.centerMost:before\";\n var centerAfter = \".flatpickr-calendar.centerMost:after\";\n var centerIndex = doc.cssRules.length;\n var centerStyle = \"{left:\" + inputBounds.left + \"px;right:auto;}\";\n toggleClass(self.calendarContainer, \"rightMost\", false);\n toggleClass(self.calendarContainer, \"centerMost\", true);\n doc.insertRule(centerBefore + \",\" + centerAfter + centerStyle, centerIndex);\n self.calendarContainer.style.left = centerLeft + \"px\";\n self.calendarContainer.style.right = \"auto\";\n }\n }\n function redraw() {\n if (self.config.noCalendar || self.isMobile)\n return;\n updateNavigationCurrentMonth();\n buildDays();\n }\n function focusAndClose() {\n self._input.focus();\n if (window.navigator.userAgent.indexOf(\"MSIE\") !== -1 ||\n navigator.msMaxTouchPoints !== undefined) {\n // hack - bugs in the way IE handles focus keeps the calendar open\n setTimeout(self.close, 0);\n }\n else {\n self.close();\n }\n }\n function selectDate(e) {\n e.preventDefault();\n e.stopPropagation();\n var isSelectable = function (day) {\n return day.classList &&\n day.classList.contains(\"flatpickr-day\") &&\n !day.classList.contains(\"flatpickr-disabled\") &&\n !day.classList.contains(\"notAllowed\");\n };\n var t = findParent(e.target, isSelectable);\n if (t === undefined)\n return;\n var target = t;\n var selectedDate = (self.latestSelectedDateObj = new Date(target.dateObj.getTime()));\n var shouldChangeMonth = (selectedDate.getMonth() < self.currentMonth ||\n selectedDate.getMonth() >\n self.currentMonth + self.config.showMonths - 1) &&\n self.config.mode !== \"range\";\n self.selectedDateElem = target;\n if (self.config.mode === \"single\")\n self.selectedDates = [selectedDate];\n else if (self.config.mode === \"multiple\") {\n var selectedIndex = isDateSelected(selectedDate);\n if (selectedIndex)\n self.selectedDates.splice(parseInt(selectedIndex), 1);\n else\n self.selectedDates.push(selectedDate);\n }\n else if (self.config.mode === \"range\") {\n if (self.selectedDates.length === 2) {\n self.clear(false, false);\n }\n self.latestSelectedDateObj = selectedDate;\n self.selectedDates.push(selectedDate);\n // unless selecting same date twice, sort ascendingly\n if (compareDates(selectedDate, self.selectedDates[0], true) !== 0)\n self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });\n }\n setHoursFromInputs();\n if (shouldChangeMonth) {\n var isNewYear = self.currentYear !== selectedDate.getFullYear();\n self.currentYear = selectedDate.getFullYear();\n self.currentMonth = selectedDate.getMonth();\n if (isNewYear) {\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n triggerEvent(\"onMonthChange\");\n }\n updateNavigationCurrentMonth();\n buildDays();\n updateValue();\n if (self.config.enableTime)\n setTimeout(function () { return (self.showTimeInput = true); }, 50);\n // maintain focus\n if (!shouldChangeMonth &&\n self.config.mode !== \"range\" &&\n self.config.showMonths === 1)\n focusOnDayElem(target);\n else if (self.selectedDateElem !== undefined &&\n self.hourElement === undefined) {\n self.selectedDateElem && self.selectedDateElem.focus();\n }\n if (self.hourElement !== undefined)\n self.hourElement !== undefined && self.hourElement.focus();\n if (self.config.closeOnSelect) {\n var single = self.config.mode === \"single\" && !self.config.enableTime;\n var range = self.config.mode === \"range\" &&\n self.selectedDates.length === 2 &&\n !self.config.enableTime;\n if (single || range) {\n focusAndClose();\n }\n }\n triggerChange();\n }\n var CALLBACKS = {\n locale: [setupLocale, updateWeekdays],\n showMonths: [buildMonths, setCalendarWidth, buildWeekdays],\n minDate: [jumpToDate],\n maxDate: [jumpToDate]\n };\n function set(option, value) {\n if (option !== null && typeof option === \"object\") {\n Object.assign(self.config, option);\n for (var key in option) {\n if (CALLBACKS[key] !== undefined)\n CALLBACKS[key].forEach(function (x) { return x(); });\n }\n }\n else {\n self.config[option] = value;\n if (CALLBACKS[option] !== undefined)\n CALLBACKS[option].forEach(function (x) { return x(); });\n else if (HOOKS.indexOf(option) > -1)\n self.config[option] = arrayify(value);\n }\n self.redraw();\n updateValue(false);\n }\n function setSelectedDate(inputDate, format) {\n var dates = [];\n if (inputDate instanceof Array)\n dates = inputDate.map(function (d) { return self.parseDate(d, format); });\n else if (inputDate instanceof Date || typeof inputDate === \"number\")\n dates = [self.parseDate(inputDate, format)];\n else if (typeof inputDate === \"string\") {\n switch (self.config.mode) {\n case \"single\":\n case \"time\":\n dates = [self.parseDate(inputDate, format)];\n break;\n case \"multiple\":\n dates = inputDate\n .split(self.config.conjunction)\n .map(function (date) { return self.parseDate(date, format); });\n break;\n case \"range\":\n dates = inputDate\n .split(self.l10n.rangeSeparator)\n .map(function (date) { return self.parseDate(date, format); });\n break;\n default:\n break;\n }\n }\n else\n self.config.errorHandler(new Error(\"Invalid date supplied: \" + JSON.stringify(inputDate)));\n self.selectedDates = dates.filter(function (d) { return d instanceof Date && isEnabled(d, false); });\n if (self.config.mode === \"range\")\n self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });\n }\n function setDate(date, triggerChange, format) {\n if (triggerChange === void 0) { triggerChange = false; }\n if (format === void 0) { format = self.config.dateFormat; }\n if ((date !== 0 && !date) || (date instanceof Array && date.length === 0))\n return self.clear(triggerChange);\n setSelectedDate(date, format);\n self.showTimeInput = self.selectedDates.length > 0;\n self.latestSelectedDateObj =\n self.selectedDates[self.selectedDates.length - 1];\n self.redraw();\n jumpToDate();\n setHoursFromDate();\n if (self.selectedDates.length === 0) {\n self.clear(false);\n }\n updateValue(triggerChange);\n if (triggerChange)\n triggerEvent(\"onChange\");\n }\n function parseDateRules(arr) {\n return arr\n .slice()\n .map(function (rule) {\n if (typeof rule === \"string\" ||\n typeof rule === \"number\" ||\n rule instanceof Date) {\n return self.parseDate(rule, undefined, true);\n }\n else if (rule &&\n typeof rule === \"object\" &&\n rule.from &&\n rule.to)\n return {\n from: self.parseDate(rule.from, undefined),\n to: self.parseDate(rule.to, undefined)\n };\n return rule;\n })\n .filter(function (x) { return x; }); // remove falsy values\n }\n function setupDates() {\n self.selectedDates = [];\n self.now = self.parseDate(self.config.now) || new Date();\n // Workaround IE11 setting placeholder as the input's value\n var preloadedDate = self.config.defaultDate ||\n ((self.input.nodeName === \"INPUT\" ||\n self.input.nodeName === \"TEXTAREA\") &&\n self.input.placeholder &&\n self.input.value === self.input.placeholder\n ? null\n : self.input.value);\n if (preloadedDate)\n setSelectedDate(preloadedDate, self.config.dateFormat);\n self._initialDate =\n self.selectedDates.length > 0\n ? self.selectedDates[0]\n : self.config.minDate &&\n self.config.minDate.getTime() > self.now.getTime()\n ? self.config.minDate\n : self.config.maxDate &&\n self.config.maxDate.getTime() < self.now.getTime()\n ? self.config.maxDate\n : self.now;\n self.currentYear = self._initialDate.getFullYear();\n self.currentMonth = self._initialDate.getMonth();\n if (self.selectedDates.length > 0)\n self.latestSelectedDateObj = self.selectedDates[0];\n if (self.config.minTime !== undefined)\n self.config.minTime = self.parseDate(self.config.minTime, \"H:i\");\n if (self.config.maxTime !== undefined)\n self.config.maxTime = self.parseDate(self.config.maxTime, \"H:i\");\n self.minDateHasTime =\n !!self.config.minDate &&\n (self.config.minDate.getHours() > 0 ||\n self.config.minDate.getMinutes() > 0 ||\n self.config.minDate.getSeconds() > 0);\n self.maxDateHasTime =\n !!self.config.maxDate &&\n (self.config.maxDate.getHours() > 0 ||\n self.config.maxDate.getMinutes() > 0 ||\n self.config.maxDate.getSeconds() > 0);\n Object.defineProperty(self, \"showTimeInput\", {\n get: function () { return self._showTimeInput; },\n set: function (bool) {\n self._showTimeInput = bool;\n if (self.calendarContainer)\n toggleClass(self.calendarContainer, \"showTimeInput\", bool);\n self.isOpen && positionCalendar();\n }\n });\n }\n function setupInputs() {\n self.input = self.config.wrap\n ? element.querySelector(\"[data-input]\")\n : element;\n /* istanbul ignore next */\n if (!self.input) {\n self.config.errorHandler(new Error(\"Invalid input element specified\"));\n return;\n }\n // hack: store previous type to restore it after destroy()\n self.input._type = self.input.type;\n self.input.type = \"text\";\n self.input.classList.add(\"flatpickr-input\");\n self._input = self.input;\n if (self.config.altInput) {\n // replicate self.element\n self.altInput = createElement(self.input.nodeName, self.config.altInputClass);\n self._input = self.altInput;\n self.altInput.placeholder = self.input.placeholder;\n self.altInput.disabled = self.input.disabled;\n self.altInput.required = self.input.required;\n self.altInput.tabIndex = self.input.tabIndex;\n self.altInput.type = \"text\";\n self.input.setAttribute(\"type\", \"hidden\");\n if (!self.config.static && self.input.parentNode)\n self.input.parentNode.insertBefore(self.altInput, self.input.nextSibling);\n }\n if (!self.config.allowInput)\n self._input.setAttribute(\"readonly\", \"readonly\");\n self._positionElement = self.config.positionElement || self._input;\n }\n function setupMobile() {\n var inputType = self.config.enableTime\n ? self.config.noCalendar\n ? \"time\"\n : \"datetime-local\"\n : \"date\";\n self.mobileInput = createElement(\"input\", self.input.className + \" flatpickr-mobile\");\n self.mobileInput.step = self.input.getAttribute(\"step\") || \"any\";\n self.mobileInput.tabIndex = 1;\n self.mobileInput.type = inputType;\n self.mobileInput.disabled = self.input.disabled;\n self.mobileInput.required = self.input.required;\n self.mobileInput.placeholder = self.input.placeholder;\n self.mobileFormatStr =\n inputType === \"datetime-local\"\n ? \"Y-m-d\\\\TH:i:S\"\n : inputType === \"date\"\n ? \"Y-m-d\"\n : \"H:i:S\";\n if (self.selectedDates.length > 0) {\n self.mobileInput.defaultValue = self.mobileInput.value = self.formatDate(self.selectedDates[0], self.mobileFormatStr);\n }\n if (self.config.minDate)\n self.mobileInput.min = self.formatDate(self.config.minDate, \"Y-m-d\");\n if (self.config.maxDate)\n self.mobileInput.max = self.formatDate(self.config.maxDate, \"Y-m-d\");\n self.input.type = \"hidden\";\n if (self.altInput !== undefined)\n self.altInput.type = \"hidden\";\n try {\n if (self.input.parentNode)\n self.input.parentNode.insertBefore(self.mobileInput, self.input.nextSibling);\n }\n catch (_a) { }\n bind(self.mobileInput, \"change\", function (e) {\n self.setDate(e.target.value, false, self.mobileFormatStr);\n triggerEvent(\"onChange\");\n triggerEvent(\"onClose\");\n });\n }\n function toggle(e) {\n if (self.isOpen === true)\n return self.close();\n self.open(e);\n }\n function triggerEvent(event, data) {\n // If the instance has been destroyed already, all hooks have been removed\n if (self.config === undefined)\n return;\n var hooks = self.config[event];\n if (hooks !== undefined && hooks.length > 0) {\n for (var i = 0; hooks[i] && i < hooks.length; i++)\n hooks[i](self.selectedDates, self.input.value, self, data);\n }\n if (event === \"onChange\") {\n self.input.dispatchEvent(createEvent(\"change\"));\n // many front-end frameworks bind to the input event\n self.input.dispatchEvent(createEvent(\"input\"));\n }\n }\n function createEvent(name) {\n var e = document.createEvent(\"Event\");\n e.initEvent(name, true, true);\n return e;\n }\n function isDateSelected(date) {\n for (var i = 0; i < self.selectedDates.length; i++) {\n if (compareDates(self.selectedDates[i], date) === 0)\n return \"\" + i;\n }\n return false;\n }\n function isDateInRange(date) {\n if (self.config.mode !== \"range\" || self.selectedDates.length < 2)\n return false;\n return (compareDates(date, self.selectedDates[0]) >= 0 &&\n compareDates(date, self.selectedDates[1]) <= 0);\n }\n function updateNavigationCurrentMonth() {\n if (self.config.noCalendar || self.isMobile || !self.monthNav)\n return;\n self.yearElements.forEach(function (yearElement, i) {\n var d = new Date(self.currentYear, self.currentMonth, 1);\n d.setMonth(self.currentMonth + i);\n if (self.config.showMonths > 1 ||\n self.config.monthSelectorType === \"static\") {\n self.monthElements[i].textContent =\n monthToStr(d.getMonth(), self.config.shorthandCurrentMonth, self.l10n) + \" \";\n }\n else {\n self.monthsDropdownContainer.value = d.getMonth().toString();\n }\n yearElement.value = d.getFullYear().toString();\n });\n self._hidePrevMonthArrow =\n self.config.minDate !== undefined &&\n (self.currentYear === self.config.minDate.getFullYear()\n ? self.currentMonth <= self.config.minDate.getMonth()\n : self.currentYear < self.config.minDate.getFullYear());\n self._hideNextMonthArrow =\n self.config.maxDate !== undefined &&\n (self.currentYear === self.config.maxDate.getFullYear()\n ? self.currentMonth + 1 > self.config.maxDate.getMonth()\n : self.currentYear > self.config.maxDate.getFullYear());\n }\n function getDateStr(format) {\n return self.selectedDates\n .map(function (dObj) { return self.formatDate(dObj, format); })\n .filter(function (d, i, arr) {\n return self.config.mode !== \"range\" ||\n self.config.enableTime ||\n arr.indexOf(d) === i;\n })\n .join(self.config.mode !== \"range\"\n ? self.config.conjunction\n : self.l10n.rangeSeparator);\n }\n /**\n * Updates the values of inputs associated with the calendar\n */\n function updateValue(triggerChange) {\n if (triggerChange === void 0) { triggerChange = true; }\n if (self.mobileInput !== undefined && self.mobileFormatStr) {\n self.mobileInput.value =\n self.latestSelectedDateObj !== undefined\n ? self.formatDate(self.latestSelectedDateObj, self.mobileFormatStr)\n : \"\";\n }\n self.input.value = getDateStr(self.config.dateFormat);\n if (self.altInput !== undefined) {\n self.altInput.value = getDateStr(self.config.altFormat);\n }\n if (triggerChange !== false)\n triggerEvent(\"onValueUpdate\");\n }\n function onMonthNavClick(e) {\n var isPrevMonth = self.prevMonthNav.contains(e.target);\n var isNextMonth = self.nextMonthNav.contains(e.target);\n if (isPrevMonth || isNextMonth) {\n changeMonth(isPrevMonth ? -1 : 1);\n }\n else if (self.yearElements.indexOf(e.target) >= 0) {\n e.target.select();\n }\n else if (e.target.classList.contains(\"arrowUp\")) {\n self.changeYear(self.currentYear + 1);\n }\n else if (e.target.classList.contains(\"arrowDown\")) {\n self.changeYear(self.currentYear - 1);\n }\n }\n function timeWrapper(e) {\n e.preventDefault();\n var isKeyDown = e.type === \"keydown\", input = e.target;\n if (self.amPM !== undefined && e.target === self.amPM) {\n self.amPM.textContent =\n self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n }\n var min = parseFloat(input.getAttribute(\"min\")), max = parseFloat(input.getAttribute(\"max\")), step = parseFloat(input.getAttribute(\"step\")), curValue = parseInt(input.value, 10), delta = e.delta ||\n (isKeyDown ? (e.which === 38 ? 1 : -1) : 0);\n var newValue = curValue + step * delta;\n if (typeof input.value !== \"undefined\" && input.value.length === 2) {\n var isHourElem = input === self.hourElement, isMinuteElem = input === self.minuteElement;\n if (newValue < min) {\n newValue =\n max +\n newValue +\n int(!isHourElem) +\n (int(isHourElem) && int(!self.amPM));\n if (isMinuteElem)\n incrementNumInput(undefined, -1, self.hourElement);\n }\n else if (newValue > max) {\n newValue =\n input === self.hourElement ? newValue - max - int(!self.amPM) : min;\n if (isMinuteElem)\n incrementNumInput(undefined, 1, self.hourElement);\n }\n if (self.amPM &&\n isHourElem &&\n (step === 1\n ? newValue + curValue === 23\n : Math.abs(newValue - curValue) > step)) {\n self.amPM.textContent =\n self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n }\n input.value = pad(newValue);\n }\n }\n init();\n return self;\n }\n /* istanbul ignore next */\n function _flatpickr(nodeList, config) {\n // static list\n var nodes = Array.prototype.slice\n .call(nodeList)\n .filter(function (x) { return x instanceof HTMLElement; });\n var instances = [];\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n try {\n if (node.getAttribute(\"data-fp-omit\") !== null)\n continue;\n if (node._flatpickr !== undefined) {\n node._flatpickr.destroy();\n node._flatpickr = undefined;\n }\n node._flatpickr = FlatpickrInstance(node, config || {});\n instances.push(node._flatpickr);\n }\n catch (e) {\n console.error(e);\n }\n }\n return instances.length === 1 ? instances[0] : instances;\n }\n /* istanbul ignore next */\n if (typeof HTMLElement !== \"undefined\" &&\n typeof HTMLCollection !== \"undefined\" &&\n typeof NodeList !== \"undefined\") {\n // browser env\n HTMLCollection.prototype.flatpickr = NodeList.prototype.flatpickr = function (config) {\n return _flatpickr(this, config);\n };\n HTMLElement.prototype.flatpickr = function (config) {\n return _flatpickr([this], config);\n };\n }\n /* istanbul ignore next */\n var flatpickr = function (selector, config) {\n if (typeof selector === \"string\") {\n return _flatpickr(window.document.querySelectorAll(selector), config);\n }\n else if (selector instanceof Node) {\n return _flatpickr([selector], config);\n }\n else {\n return _flatpickr(selector, config);\n }\n };\n /* istanbul ignore next */\n flatpickr.defaultConfig = {};\n flatpickr.l10ns = {\n en: __assign({}, english),\n \"default\": __assign({}, english)\n };\n flatpickr.localize = function (l10n) {\n flatpickr.l10ns[\"default\"] = __assign({}, flatpickr.l10ns[\"default\"], l10n);\n };\n flatpickr.setDefaults = function (config) {\n flatpickr.defaultConfig = __assign({}, flatpickr.defaultConfig, config);\n };\n flatpickr.parseDate = createDateParser({});\n flatpickr.formatDate = createDateFormatter({});\n flatpickr.compareDates = compareDates;\n /* istanbul ignore next */\n if (typeof jQuery !== \"undefined\" && typeof jQuery.fn !== \"undefined\") {\n jQuery.fn.flatpickr = function (config) {\n return _flatpickr(this, config);\n };\n }\n // eslint-disable-next-line @typescript-eslint/camelcase\n Date.prototype.fp_incr = function (days) {\n return new Date(this.getFullYear(), this.getMonth(), this.getDate() + (typeof days === \"string\" ? parseInt(days, 10) : days));\n };\n if (typeof window !== \"undefined\") {\n window.flatpickr = flatpickr;\n }\n\n return flatpickr;\n\n}));\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/flatpickr/dist/flatpickr.js","import Field from './field.js';\n\n/**\n * Number Field functionality.\n *\n * @since 1.4.0\n */\nclass FieldNumber extends Field {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n */\n constructor($field) {\n\n super($field, 'number');\n\n this.initField();\n }\n\n /**\n * Initializes the Number field.\n *\n * @since 1.4.0\n */\n initField() {\n\n this.$ui = {\n container: this.$field,\n input: this.$field.find('.fieldhelpers-field-input'),\n increase: this.$field.find('[data-number-increase]'),\n decrease: this.$field.find('[data-number-decrease]'),\n };\n\n this.intervals = {\n increase: {\n normal: parseFloat(this.options.increaseInterval),\n alt: parseFloat(this.options.altIncreaseInterval),\n },\n decrease: {\n normal: parseFloat(this.options.decreaseInterval),\n alt: parseFloat(this.options.altDecreaseInterval),\n },\n }\n\n let constrainMax = this.options.max;\n let constrainMin = this.options.min\n\n this.constraints = {\n max: constrainMax !== 'none' ? parseFloat(constrainMax) : false,\n min: constrainMin !== 'none' ? parseFloat(constrainMin) : false,\n }\n\n this.shiftKeyUtility();\n this.setupHandlers();\n\n let initialValue = this.$ui.input.val();\n this.value = !initialValue ? 0 : parseFloat(initialValue);\n\n // Initializes the field\n this.validateInput();\n }\n\n /**\n * Helps determine shift key press status.\n *\n * @since 1.4.0\n */\n shiftKeyUtility() {\n\n this.shiftKeyDown = false;\n\n jQuery(document).on('keydown', (e) => {\n\n if ( e.which === 16 ) {\n\n this.shiftKeyDown = true;\n }\n });\n\n jQuery(document).on('keyup', (e) => {\n\n if ( e.which === 16 ) {\n\n this.shiftKeyDown = false;\n }\n });\n }\n\n /**\n * Sets up the class handlers.\n *\n * @since 1.4.0\n */\n setupHandlers() {\n\n this.$ui.increase.click((e) => {\n\n this.increaseNumber(e);\n });\n\n this.$ui.decrease.click((e) => {\n\n this.decreaseNumber(e);\n });\n\n this.$ui.input.change((e) => {\n\n this.inputExternalChange(e);\n });\n }\n\n /**\n * Increases the input number.\n *\n * @since 1.4.0\n */\n increaseNumber() {\n\n let amount = this.shiftKeyDown ? this.intervals.increase.alt : this.intervals.increase.normal;\n let newNumber = this.value + amount;\n\n this.$ui.input.val(newNumber);\n this.$ui.input.trigger('change');\n }\n\n /**\n * Decreases the input number.\n *\n * @since 1.4.0\n */\n decreaseNumber() {\n\n let amount = this.shiftKeyDown ? this.intervals.decrease.alt : this.intervals.decrease.normal;\n let newNumber = this.value - amount;\n\n this.$ui.input.val(newNumber);\n this.$ui.input.trigger('change');\n }\n\n /**\n * Fires on the input change. Typically from user typing or other scripts modifying.\n *\n * @since 1.4.0\n */\n inputExternalChange() {\n\n this.validateInput();\n }\n\n /**\n * Runs number through constrains.\n *\n * @param {int} number\n *\n * @return {Object}\n */\n constrainNumber(number) {\n\n let status = 'unmodified';\n\n if ( this.constraints.max !== false && number > this.constraints.max ) {\n\n status = 'max';\n number = this.constraints.max;\n\n } else if ( this.constraints.min !== false && number < this.constraints.min ) {\n\n status = 'min';\n number = this.constraints.min;\n }\n\n\n return {\n status,\n number,\n }\n }\n\n /**\n * Runs input value through constraints to ensure it is accurate.\n *\n * @since 1.4.0\n */\n validateInput() {\n\n let currentValue = this.$ui.input.val();\n\n // Constrain to numbers\n let matches = currentValue.match(/^-?[0-9]\\d*(\\.\\d+)?$/);\n currentValue = (matches && parseFloat(matches[0])) || 0;\n\n let constraints = this.constrainNumber(currentValue);\n\n switch ( constraints.status ) {\n\n case 'max':\n\n this.toggleDecreaseDisabledUI(true);\n this.toggleIncreaseDisabledUI(false);\n break;\n\n case 'min':\n\n this.toggleIncreaseDisabledUI(true);\n this.toggleDecreaseDisabledUI(false);\n break;\n\n default:\n\n this.toggleIncreaseDisabledUI(true);\n this.toggleDecreaseDisabledUI(true);\n\n }\n\n this.value = constraints.number;\n this.$ui.input.val(this.value);\n\n if ( currentValue !== this.value ) {\n\n this.$ui.input.trigger('change');\n }\n }\n\n /**\n * Disables/Enables the increase button.\n *\n * @since 1.4.0\n *\n * @param {bool} enable True to set to enabled, false to set to disabled\n */\n toggleIncreaseDisabledUI(enable) {\n\n this.$ui.increase.prop('disabled', !enable);\n }\n\n /**\n * Disables/Enables the decrease button.\n *\n * @since 1.4.0\n *\n * @param {bool} enable True to set to enabled, false to set to disabled\n */\n toggleDecreaseDisabledUI(enable) {\n\n this.$ui.decrease.prop('disabled', !enable);\n }\n}\n\n/**\n * Finds and initializes all Number fields.\n *\n * @since 1.4.0\n */\nclass FieldNumberInitialize {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $root Root element to initialize fields inside.\n */\n constructor($root) {\n\n const api = this;\n\n this.fields = [];\n\n let $fields = $root.find('[data-fieldhelpers-field-number]');\n\n if ( $fields.length ) {\n\n $fields.each(function () {\n\n api.initializeField(jQuery(this));\n });\n }\n }\n\n /**\n * Initializes the field.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $field\n */\n initializeField($field) {\n\n this.fields.push({\n $field,\n api: new FieldNumber($field),\n });\n }\n}\n\nexport default FieldNumberInitialize;\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/admin/fields/field-number.js","import Field from './field.js';\n\n/**\n * Color Picker Field functionality.\n *\n * @since 1.4.0\n */\nclass FieldColorPicker extends Field {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n */\n constructor($field) {\n\n super($field, 'colorpicker');\n\n this.initializeColorpicker();\n }\n\n /**\n * Initializes the Color Picker.\n *\n * @since 1.4.0\n */\n initializeColorpicker() {\n\n if ( ! this.$field.val() ) {\n this.setDefault();\n }\n \n this.$field.wpColorPicker( this.options.colorpickerOptions );\n }\n\n\n /**\n * Cleans up after a repeater add/init.\n *\n * @since 1.4.0\n */\n fieldCleanup() {\n\n this.$wrapper.find('[data-fieldhelpers-field-colorpicker]')\n .appendTo(this.$wrapper.find('.fieldhelpers-field-content'));\n\n this.$wrapper.find('.wp-picker-container').remove();\n }\n}\n\n/**\n * Finds and initializes all Color Picker fields.\n *\n * @since 1.4.0\n */\nclass FieldColorPickerInitialize {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $root Root element to initialize fields inside.\n */\n constructor($root) {\n\n const api = this;\n\n this.fields = [];\n\n let $fields = $root.find('[data-fieldhelpers-field-colorpicker]');\n\n if ( $fields.length ) {\n\n if (!jQuery.isFunction(jQuery.fn.wpColorPicker)) {\n\n console.error('Field Helpers Error: Trying to initialize Color Picker field but \"wp-color-picker\" is ' +\n 'not enqueued.');\n return;\n }\n\n $fields.each(function () {\n\n api.initializeField(jQuery(this));\n });\n }\n }\n\n /**\n * Initializes the field.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $field\n */\n initializeField($field) {\n\n this.fields.push({\n $field,\n api: new FieldColorPicker($field),\n });\n }\n}\n\nexport default FieldColorPickerInitialize;\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/admin/fields/field-colorpicker.js","import Field from './field.js';\n\n/**\n * Date Picker Field functionality.\n *\n * Also includes Date/Time Picker and Time Picker.\n *\n * @since 1.4.0\n */\nclass FieldDatePicker extends Field {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n */\n constructor($field) {\n\n super($field, 'datepicker');\n\n this.initField();\n }\n\n /**\n * Initializes the Date Picker.\n *\n * @since 1.4.0\n */\n initField() {\n\n let option_functions = ['onChange', 'onOpen', 'onClose', 'onMonthChange', 'onYearChange', 'onReady', 'onValueUpdate', 'onDayCreate'];\n\n // Function support\n jQuery.each(this.options.datepickerOptions, (name, value) => {\n\n if ( option_functions.indexOf(name) !== -1 &&\n !jQuery.isFunction(this.options.datepickerOptions[name]) &&\n jQuery.isFunction(window[value]) ) {\n\n this.options.datepickerOptions[name] = window[value];\n }\n });\n\n // We need to ensure that the field instance for our specific field loads its default date in properly\n this.options.datepickerOptions.defaultDate = this.$field.data( 'defaultdate' );\n\n let value = this.$field.val();\n\n if ( ! value ) value = this.options.datepickerOptions.defaultDate;\n\n this.flatpickr = this.$field.flatpickr( this.options.datepickerOptions );\n\n this.flatpickr.setDate( value, true );\n }\n\n /**\n * Cleans up after a repeater add/init.\n *\n * @since 1.4.0\n */\n fieldCleanup() {\n\n let value = this.$field.val();\n\n if ( ! value ) value = this.options.datepickerOptions.defaultDate;\n\n if ( typeof this.flatpickr !== 'undefined' ) {\n\n this.flatpickr.destroy();\n\n }\n\n this.$field.val( value );\n\n }\n\n /**\n * Runs cleanup before the Repeater creates a dummy row to ensure we do not get weird double inputs\n *\n * @param {object} $repeater jQuery DOM Object\n * @param {array} options Array of Field Options\n *\n * @since 1.5.0\n * @return void\n */\n repeaterBeforeInit( $repeater, options ) {\n\n this.fieldCleanup();\n\n }\n\n /**\n * Ensure that the purposefully unloaded Flatpickr reloads\n *\n * @param {object} $repeater jQuery DOM Object\n * @param {array} options Array of Field Options\n *\n * @since 1.5.0\n * @return void\n */\n repeaterOnInit( $repeater, options ) {\n\n this.initField();\n\n }\n}\n\n/**\n * Finds and initializes all Date Picker fields.\n *\n * @since 1.4.0\n */\nclass FieldDatePickerInitialize {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $root Root element to initialize fields inside.\n */\n constructor($root) {\n\n const api = this;\n\n this.fields = [];\n\n let $fields = $root.find('[data-fieldhelpers-field-datepicker]');\n\n if ( $fields.length ) {\n\n if ( !jQuery.isFunction(jQuery.fn.flatpickr) ) {\n\n console.error('Field Helpers Error: Trying to initialize Date Picker field but \"flatpickr\" ' +\n 'is not enqueued.');\n return;\n }\n\n $fields.each(function () {\n\n api.initializeField(jQuery(this));\n });\n }\n }\n\n /**\n * Initializes the field.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $field\n */\n initializeField($field) {\n\n this.fields.push({\n $field,\n api: new FieldDatePicker($field),\n });\n }\n}\n\nexport default FieldDatePickerInitialize;\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/admin/fields/field-datepicker.js","import Field from './field.js';\nimport FieldsInitialize from '../fields-init.js';\n\n/**\n * Time Picker Field functionality.\n *\n * Also includes Date/Time Picker and Time Picker.\n *\n * @since 1.4.0\n */\nclass FieldTimePicker extends Field {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n */\n constructor($field) {\n\n super($field, 'timepicker');\n\n this.initField();\n }\n\n /**\n * Initializes the Time Picker.\n *\n * @since 1.4.0\n */\n initField() {\n\n let option_functions = ['onChange', 'onOpen', 'onClose', 'onMonthChange', 'onYearChange', 'onReady', 'onValueUpdate', 'onDayCreate'];\n\n // Function support\n jQuery.each(this.options.timepickerOptions, (name, value) => {\n\n if ( option_functions.indexOf(name) !== -1 &&\n !jQuery.isFunction(this.options.timepickerOptions[name]) &&\n jQuery.isFunction(window[value]) ) {\n\n this.options.timepickerOptions[name] = window[value];\n }\n });\n\n // We need to ensure that the field instance for our specific field loads its default date in properly\n this.options.timepickerOptions.defaultDate = this.$field.data( 'defaultdate' );\n\n let value = this.$field.val();\n\n if ( ! value ) value = this.options.timepickerOptions.defaultDate;\n\n this.flatpickr = this.$field.flatpickr(this.options.timepickerOptions);\n\n this.flatpickr.setDate( value, true );\n \n }\n\n /**\n * Cleans up after a repeater add/init.\n *\n * @since 1.4.0\n */\n fieldCleanup() {\n\n let value = this.$field.val();\n\n if ( ! value ) value = this.options.timepickerOptions.defaultDate;\n\n if ( typeof this.flatpickr !== 'undefined' ) {\n\n this.flatpickr.destroy();\n\n }\n\n this.$field.val( value );\n\n }\n \n /**\n * Runs cleanup before the Repeater creates a dummy row to ensure we do not get weird double inputs\n *\n * @param {object} $repeater jQuery DOM Object\n * @param {array} options Array of Field Options\n *\n * @since 1.5.0\n * @return void\n */\n repeaterBeforeInit( $repeater, options ) {\n\n this.fieldCleanup();\n\n }\n\n /**\n * Ensure that the purposefully unloaded Flatpickr reloads\n *\n * @param {object} $repeater jQuery DOM Object\n * @param {array} options Array of Field Options\n *\n * @since 1.5.0\n * @return void\n */\n repeaterOnInit( $repeater, options ) {\n\n this.initField();\n\n }\n\n}\n\n/**\n * Finds and initializes all Time Picker fields.\n *\n * @since 1.4.0\n */\nclass FieldTimePickerInitialize {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $root Root element to initialize fields inside.\n */\n constructor($root) {\n\n const api = this;\n\n this.fields = [];\n\n let $fields = $root.find('[data-fieldhelpers-field-timepicker]');\n\n if ( $fields.length ) {\n\n if ( !jQuery.isFunction(jQuery.fn.flatpickr) ) {\n\n console.error('Field Helpers Error: Trying to initialize Time Picker field but ' +\n '\"flatpickr\" is not enqueued.');\n return;\n }\n\n $fields.each(function () {\n\n api.initializeField(jQuery(this));\n });\n }\n }\n\n /**\n * Initializes the field.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $field\n */\n initializeField($field) {\n\n this.fields.push({\n $field,\n api: new FieldTimePicker($field),\n });\n }\n}\n\nexport default FieldTimePickerInitialize;\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/admin/fields/field-timepicker.js","import Field from './field.js';\n\n/**\n * Date Time Picker Field functionality.\n *\n * Also includes Date/Time Picker and Time Picker.\n *\n * @since 1.4.0\n */\nclass FieldDateTimePicker extends Field {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n */\n constructor($field) {\n\n super($field, 'datetimepicker');\n\n this.initField();\n }\n\n /**\n * Initializes the Date Time Picker.\n *\n * @since 1.4.0\n */\n initField() {\n\n let option_functions = ['onChange', 'onOpen', 'onClose', 'onMonthChange', 'onYearChange', 'onReady', 'onValueUpdate', 'onDayCreate'];\n\n // Function support\n jQuery.each(this.options.datetimepickerOptions, (name, value) => {\n\n if ( option_functions.indexOf(name) !== -1 &&\n !jQuery.isFunction(this.options.datetimepickerOptions[name]) &&\n jQuery.isFunction(window[value]) ) {\n\n this.options.datetimepickerOptions[name] = window[value];\n }\n });\n\n // We need to ensure that the field instance for our specific field loads its default date in properly\n this.options.datetimepickerOptions.defaultDate = this.$field.data( 'defaultdate' );\n\n let value = this.$field.val();\n\n if ( ! value ) value = this.options.datetimepickerOptions.defaultDate;\n\n this.flatpickr = this.$field.flatpickr(this.options.datetimepickerOptions);\n\n this.flatpickr.setDate( value, true );\n }\n\n /**\n * Cleans up after a repeater add/init.\n *\n * @since 1.4.0\n */\n fieldCleanup() {\n\n let value = this.$field.val();\n\n if ( ! value ) value = this.options.datetimepickerOptions.defaultDate;\n\n if ( typeof this.flatpickr !== 'undefined' ) {\n\n this.flatpickr.destroy();\n\n }\n\n this.$field.val( value );\n\n }\n\n /**\n * Runs cleanup before the Repeater creates a dummy row to ensure we do not get weird double inputs\n *\n * @param {object} $repeater jQuery DOM Object\n * @param {array} options Array of Field Options\n *\n * @since 1.5.0\n * @return void\n */\n repeaterBeforeInit( $repeater, options ) {\n\n this.fieldCleanup();\n\n }\n\n /**\n * Ensure that the purposefully unloaded Flatpickr reloads\n *\n * @param {object} $repeater jQuery DOM Object\n * @param {array} options Array of Field Options\n *\n * @since 1.5.0\n * @return void\n */\n repeaterOnInit( $repeater, options ) {\n\n this.initField();\n\n }\n\n}\n\n/**\n * Finds and initializes all Date Time Picker fields.\n *\n * @since 1.4.0\n */\nclass FieldDateTimePickerInitialize {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $root Root element to initialize fields inside.\n */\n constructor($root) {\n\n const api = this;\n\n this.fields = [];\n\n let $fields = $root.find('[data-fieldhelpers-field-datetimepicker]');\n\n if ( $fields.length ) {\n\n if ( !jQuery.isFunction(jQuery.fn.flatpickr) ) {\n\n console.error('Field Helpers Error: Trying to initialize Date Time Picker field but ' +\n '\"flatpickr\" is not enqueued.');\n return;\n }\n\n $fields.each(function () {\n\n api.initializeField(jQuery(this));\n });\n }\n }\n\n /**\n * Initializes the field.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $field\n */\n initializeField($field) {\n\n this.fields.push({\n $field,\n api: new FieldDateTimePicker($field),\n });\n }\n}\n\nexport default FieldDateTimePickerInitialize;\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/admin/fields/field-datetimepicker.js","import Field from './field.js';\n\n/**\n * Table Field functionality.\n *\n * @since 1.4.0\n */\nclass FieldTable extends Field {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n */\n constructor($field) {\n\n super($field, 'table');\n\n this.initField();\n }\n\n /**\n * Initializes the Table field.\n *\n * @since 1.4.0\n */\n initField() {\n\n this.$ui = {\n actions: this.$field.find('.fieldhelpers-field-table-actions'),\n loading: this.$field.find('.fieldhelpers-field-table-loading'),\n table: this.$field.find('table'),\n thead: this.$field.find('thead'),\n tbody: this.$field.find('tbody'),\n addRow: this.$field.find('[data-table-create-row]'),\n addColumn: this.$field.find('[data-table-create-column]'),\n }\n\n this.l10n = RBM_FieldHelpers.l10n['field_table'] || {};\n\n this.name = this.$field.attr('data-table-name');\n\n let data = JSON.parse(this.$ui.table.attr('data-table-data'));\n\n this.data = {};\n this.data.head = data.head || [];\n this.data.body = data.body || [];\n\n this.setupHandlers();\n\n // Initial build\n this.buildTable();\n\n // Show initially\n this.$ui.table.show();\n this.$ui.actions.show();\n this.$ui.loading.hide();\n }\n\n /**\n * Sets up the class handlers.\n *\n * @since 1.4.0\n */\n setupHandlers() {\n\n const api = this;\n\n this.$ui.addRow.click((e) => {\n\n e.preventDefault();\n this.addRow();\n });\n\n this.$ui.addColumn.click((e) => {\n\n e.preventDefault();\n this.addColumn();\n });\n\n this.$ui.table.on('click', '[data-delete-row]', function (e) {\n\n let index = jQuery(this).closest('tr').index();\n\n api.deleteRow(index);\n });\n\n this.$ui.table.on('click', '[data-delete-column]', function (e) {\n\n let index = jQuery(this).closest('td').index();\n\n api.deleteColumn(index);\n });\n\n this.$ui.table.on('change', 'input[type=\"text\"]', (e) => {\n\n this.updateTableData();\n });\n }\n\n /**\n * Gathers all data from the table.\n */\n updateTableData() {\n\n const api = this\n\n // Head\n let $headCells = this.$ui.table.find('thead th');\n let dataHead = [];\n let currentCell = 0;\n\n $headCells.each(function () {\n\n let $input = jQuery(this).find(`input[name=\"${api.name}[head][${currentCell}]\"]`);\n\n if ( !$input.length ) {\n\n console.error('Field Helpers Error: Table head data corrupted.');\n return false;\n }\n\n dataHead.push($input.val());\n\n currentCell++;\n });\n\n this.data.head = dataHead;\n\n // Body\n let $bodyRows = this.$ui.table.find('tbody tr');\n let dataBody = [];\n let currentRow = 0;\n\n $bodyRows.each(function () {\n\n // Skip delete row\n if ( jQuery(this).hasClass('fieldhelpers-field-table-delete-columns') ) {\n\n return true;\n }\n\n let rowData = [];\n let $cells = jQuery(this).find('td');\n let currentCell = 0;\n\n $cells.each(function () {\n\n // Skip delete cell\n if ( jQuery(this).hasClass('fieldhelpers-field-table-delete-row') ) {\n\n return true;\n }\n\n let $input = jQuery(this).find(`input[name=\"${api.name}[body][${currentRow}][${currentCell}]\"]`);\n\n if ( !$input.length ) {\n\n console.error('Field Helpers Error: Table body data corrupted.');\n return false;\n }\n\n rowData.push($input.val());\n\n currentCell++;\n });\n\n dataBody.push(rowData);\n\n currentRow++;\n });\n\n this.data.body = dataBody;\n }\n\n /**\n * Adds a row to the table.\n *\n * @since 1.4.0\n */\n addRow() {\n\n if ( !this.data.head.length ) {\n\n this.data.head.push('');\n }\n\n if ( !this.data.body.length ) {\n\n // Push 1 empty row with 1 empty cell\n this.data.body.push(['']);\n\n } else {\n\n let columns = this.data.body[0].length;\n let row = [];\n\n for ( let i = 0; i < columns; i++ ) {\n row.push('');\n }\n\n this.data.body.push(row);\n }\n\n this.buildTable();\n }\n\n /**\n * Adds a column to the table.\n *\n * @since 1.4.0\n */\n addColumn() {\n\n if ( !this.data.body.length ) {\n\n // Push 1 empty row with 1 empty cell\n this.data.head.push(['']);\n this.data.body.push(['']);\n\n } else {\n\n this.data.head.push('');\n\n this.data.body.map((row) => {\n row.push('');\n });\n }\n\n this.buildTable();\n }\n\n /**\n * Deletes a row from the table.\n *\n * @since 1.4.0\n *\n * @param {int} index Index of row to delete.\n */\n deleteRow(index) {\n\n // Decrease to compensate for \"delete row\" at top\n index--;\n\n if ( this.data.body.length === 1 ) {\n\n this.data.head = [];\n this.data.body = [];\n\n } else {\n\n this.data.body.splice(index, 1);\n }\n\n\n this.buildTable();\n }\n\n /**\n * Deletes a column from the table.\n *\n * @since 1.4.0\n *\n * @param {int} index Index of column to delete.\n */\n deleteColumn(index) {\n\n if ( this.data.body[0].length === 1 ) {\n\n this.data.head = [];\n this.data.body = [];\n\n } else {\n\n this.data.head.splice(index, 1);\n\n this.data.body.map((row) =>\n row.splice(index, 1)\n );\n }\n\n this.buildTable();\n }\n\n /**\n * Builds the table based on the table data.\n *\n * @since 1.4.0\n */\n buildTable() {\n\n this.$ui.thead.html('');\n this.$ui.tbody.html('');\n\n if ( this.data.head.length ) {\n\n let $row = jQuery('');\n\n this.data.head.map((cell, cell_i) => {\n\n let $cell = jQuery('');\n\n $cell.append(``);\n $cell.find('input[type=\"text\"]').val(cell);\n\n $row.append($cell);\n });\n\n this.$ui.thead.append($row);\n }\n\n if ( this.data.body.length ) {\n\n let $deleteRow = jQuery('');\n\n for ( let i = 0; i < this.data.body[0].length; i++ ) {\n\n $deleteRow.append(\n '' +\n `' +\n ''\n );\n }\n\n this.$ui.tbody.append($deleteRow);\n\n this.data.body.map((row, row_i) => {\n\n let $row = jQuery('');\n\n row.map((cell, cell_i) => {\n\n let $cell = jQuery('');\n\n $cell.append(``);\n $cell.find('input[type=\"text\"]').val(cell);\n\n $row.append($cell);\n });\n\n $row.append(\n '' +\n `' +\n ''\n );\n\n this.$ui.tbody.append($row);\n });\n }\n }\n}\n\n/**\n * Finds and initializes all Table fields.\n *\n * @since 1.4.0\n */\nclass FieldTableInitialize {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $root Root element to initialize fields inside.\n */\n constructor($root) {\n\n const api = this;\n\n this.fields = [];\n\n let $fields = $root.find('[data-fieldhelpers-field-table]');\n\n if ( $fields.length ) {\n\n $fields.each(function () {\n\n api.initializeField(jQuery(this));\n });\n }\n }\n\n /**\n * Initializes the field.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $field\n */\n initializeField($field) {\n\n this.fields.push({\n $field,\n api: new FieldTable($field),\n });\n }\n}\n\nexport default FieldTableInitialize;\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/admin/fields/field-table.js","import Field from './field.js';\n\n/**\n * Media Field functionality.\n *\n * @since 1.4.0\n */\nclass FieldMedia extends Field {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n */\n constructor($field) {\n\n super($field, 'media');\n\n this.initField();\n }\n\n /**\n * Initializes the Media field.\n *\n * @since 1.4.0\n */\n initField() {\n\n this.$ui = {\n input: this.$field.find('[data-media-input]'),\n addButton: this.$field.find('[data-add-media]'),\n imagePreview: this.$field.find('[data-image-preview]'),\n mediaPreview: this.$field.find('[data-media-preview]'),\n removeButton: this.$field.find('[data-remove-media]'),\n }\n\n this.mediaFrame = wp.media.frames.meta_image_frame = wp.media({\n title: this.options.l10n['window_title'],\n });\n\n this.placeholder = this.options.placeholder;\n this.type = this.options.type\n\n this.imageProperties = {\n previewSize: this.options.previewSize,\n };\n\n this.setupHandlers();\n }\n\n /**\n * Sets up the class handlers.\n *\n * @since 1.4.0\n */\n setupHandlers() {\n\n this.$ui.addButton.click((e) => {\n\n e.preventDefault();\n this.addMedia();\n });\n\n this.$ui.removeButton.click((e) => {\n\n e.preventDefault();\n this.removeMedia();\n });\n\n this.mediaFrame.on('select', (e) => {\n\n this.selectMedia();\n });\n }\n\n /**\n * Opens the media frame to add media.\n *\n * @since 1.4.0\n */\n addMedia() {\n\n this.mediaFrame.open();\n }\n\n /**\n * Removes the currently selected media.\n *\n * @since 1.4.0\n */\n removeMedia() {\n\n this.$ui.addButton.show();\n this.$ui.removeButton.hide();\n this.$ui.input.val('');\n\n // Reset preview\n switch ( this.type ) {\n\n case 'image':\n\n this.$ui.imagePreview.attr('src', this.placeholder || '');\n\n break;\n\n default:\n\n this.$ui.mediaPreview.html(this.placeholder || ' ');\n }\n }\n\n /**\n * Fires on selecting a piece of media.\n *\n * @since 1.4.0\n */\n selectMedia() {\n\n let mediaAttachment = this.mediaFrame.state().get('selection').first().toJSON();\n\n this.$ui.input.val(mediaAttachment.id);\n\n this.$ui.addButton.hide();\n this.$ui.removeButton.show();\n\n // Preview\n switch ( this.type ) {\n\n case 'image':\n\n let previewUrl = mediaAttachment.url;\n\n if ( mediaAttachment.sizes[this.imageProperties.previewSize] ) {\n\n previewUrl = mediaAttachment.sizes[this.imageProperties.previewSize].url;\n }\n\n this.$ui.imagePreview.attr('src', previewUrl);\n break;\n\n default:\n\n this.$ui.mediaPreview.html(mediaAttachment.url);\n }\n }\n}\n\n/**\n * Finds and initializes all Media fields.\n *\n * @since 1.4.0\n */\nclass FieldMediaInitialize {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $root Root element to initialize fields inside.\n */\n constructor($root) {\n\n const api = this;\n\n this.fields = [];\n\n let $fields = $root.find('[data-fieldhelpers-field-media]');\n\n if ( $fields.length ) {\n\n if ( !wp.media ) {\n\n console.error('Field Helpers Error: Trying to initialize Media field but media is not enqueued.');\n return;\n }\n\n $fields.each(function () {\n\n api.initializeField(jQuery(this));\n });\n }\n }\n\n /**\n * Initializes the field.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $field\n */\n initializeField($field) {\n\n this.fields.push({\n $field,\n api: new FieldMedia($field),\n });\n }\n}\n\nexport default FieldMediaInitialize;\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/admin/fields/field-media.js","import Field from './field.js';\n\n/**\n * List Field functionality.\n *\n * @since 1.4.0\n */\nclass FieldList extends Field {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n */\n constructor($field) {\n\n super($field, 'list');\n\n this.initField();\n }\n\n /**\n * Initializes the list.\n *\n * @since 1.4.0\n */\n initField() {\n\n this.$field.sortable(this.options);\n }\n}\n\n/**\n * Finds and initializes all List fields.\n *\n * @since 1.4.0\n */\nclass FieldListInitialize {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $root Root element to initialize fields inside.\n */\n constructor($root) {\n\n const api = this;\n\n this.fields = [];\n\n let $fields = $root.find('[data-fieldhelpers-field-list]');\n\n if ( $fields.length ) {\n\n if ( !jQuery.isFunction(jQuery.fn.sortable) ) {\n\n console.error('Field Helpers Error: Trying to initialize List field but \"jquery-ui-sortable\" ' +\n 'is not enqueued.');\n return;\n }\n\n $fields.each(function () {\n\n api.initializeField(jQuery(this));\n });\n }\n }\n\n /**\n * Initializes the field.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $field\n */\n initializeField($field) {\n\n this.fields.push({\n $field,\n api: new FieldList($field),\n });\n }\n}\n\nexport default FieldListInitialize;\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/admin/fields/field-list.js","import Field from './field.js';\nimport FieldsInitialize from '../fields-init';\n\n/**\n * Repeater Field functionality.\n *\n * @since 1.4.0\n */\nclass FieldRepeater extends Field {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n */\n constructor($field) {\n\n super($field, 'repeater');\n\n this.initField();\n }\n\n /**\n * Initializes the Repeater.\n *\n * @since 1.4.0\n */\n initField() {\n\n this.$repeaterList = this.$field.find('.fieldhelpers-field-repeater-list');\n\n const api = this;\n\n this.$field.trigger('repeater-before-init', [this.$field, this.options]);\n\n this.repeater = this.$field.repeater({\n show: function () {\n api.repeaterShow(jQuery(this));\n },\n hide: function (deleteItem) {\n api.repeaterHide(jQuery(this), deleteItem)\n },\n ready: function (setIndexes) {\n api.$repeaterList.on('sortupdate', setIndexes);\n },\n isFirstItemUndeletable: api.options.isFirstItemUndeletable,\n });\n\n // Delete first item if allowed and empty\n if ( !this.options.isFirstItemUndeletable && this.options.empty ) {\n this.$repeaterList.find('.fieldhelpers-field-repeater-row').remove();\n }\n\n if ( this.options.collapsable ) {\n\n this.initCollapsable();\n }\n\n if ( this.options.sortable ) {\n\n if ( !jQuery.isFunction(jQuery.fn.sortable) ) {\n\n console.error('Field Helpers Error: Trying to initialize sortable Repeater field but \"jquery-ui-sortable\" ' +\n 'is not enqueued.');\n return;\n\n } else {\n\n this.initSortable();\n }\n }\n\n // Delay for other plugins\n setTimeout(() => {\n this.$field.trigger('repeater-init', [this.$field]);\n }, 1);\n }\n\n /**\n * Initializes the Collapsable feature, if enabled.\n *\n * @since 1.4.0\n */\n initCollapsable() {\n\n const api = this;\n\n this.$field.on('click touchend', '[data-repeater-collapsable-handle]', function () {\n console.log('click');\n api.toggleCollapse(jQuery(this).closest('.fieldhelpers-field-repeater-row'));\n });\n }\n\n /**\n * Initializes the Sortable feature, if enabled.\n *\n * @since 1.4.0\n */\n initSortable() {\n\n const api = this;\n\n this.$repeaterList.sortable({\n axis: 'y',\n handle: '.fieldhelpers-field-repeater-handle',\n forcePlaceholderSize: true,\n placeholder: 'fieldhelpers-sortable-placeholder',\n stop: function (e, ui) {\n\n api.$repeaterList.trigger(\n 'list-update',\n [api.$repeaterList]\n );\n }\n });\n }\n\n /**\n * Toggles a repeater item collapse.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $item\n */\n toggleCollapse($item) {\n\n let $content = $item.find('.fieldhelpers-field-repeater-content').first();\n let status = $item.hasClass('opened') ? 'closing' : 'opening';\n\n if ( status === 'opening' ) {\n\n $content.stop().slideDown();\n $item.addClass('opened');\n $item.removeClass('closed');\n\n } else {\n\n $content.stop().slideUp();\n $item.addClass('closed');\n $item.removeClass('opened');\n }\n }\n\n /**\n * Shows a new repeater item.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $item Repeater item row.\n */\n repeaterShow($item) {\n\n this.$field.trigger('repeater-before-add-item', [$item]);\n\n $item.slideDown();\n\n if ( this.$repeaterList.hasClass('collapsable') ) {\n\n $item.addClass('opened').removeClass('closed');\n\n // Hide current title for new item and show default title\n $item.find('.fieldhelpers-field-repeater-header span.collapsable-title').html($item.find('.fieldhelpers-field-repeater-header span.collapsable-title').data('collapsable-title-default'));\n\n $item.find('.collapse-icon').css({'transform': 'rotate(-180deg)'});\n\n }\n\n // Re-initialize fields in new row\n new FieldsInitialize($item);\n\n this.$field.trigger('repeater-add-item', [$item]);\n }\n\n /**\n * Removes a repeater item.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $item Repeater item row.\n * @param {function} deleteItem Callback for deleting the item.\n */\n repeaterHide($item, deleteItem) {\n\n if ( confirm(this.options.l10n['confirm_delete_text']) ) {\n\n this.$field.trigger('repeater-before-delete-item', [$item]);\n\n $item.slideUp(400, () => {\n\n deleteItem();\n this.$field.trigger('repeater-delete-item', [$item]);\n });\n }\n }\n}\n\n/**\n * Finds and initializes all Repeater fields.\n *\n * @since 1.4.0\n */\nclass FieldRepeaterInitialize {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $root Root element to initialize fields inside.\n */\n constructor($root) {\n\n const api = this;\n\n this.fields = [];\n\n let $fields = $root.find('[data-fieldhelpers-field-repeater]');\n\n if ( $fields.length ) {\n\n $fields.each(function () {\n\n api.initializeField(jQuery(this));\n });\n }\n }\n\n /**\n * Initializes the field.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $field\n */\n initializeField($field) {\n\n this.fields.push({\n $field,\n api: new FieldRepeater($field),\n });\n }\n}\n\nexport default FieldRepeaterInitialize;\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/admin/fields/field-repeater.js","import Field from './field.js';\n\n/**\n * Select Field functionality.\n *\n * @since 1.4.0\n */\nclass FieldSelect extends Field {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n */\n constructor($field) {\n\n super($field, 'select');\n\n this.initField();\n }\n\n /**\n * Initializes the select.\n *\n * @since 1.4.0\n */\n initField() {\n\n if ( !this.options.select2Disabled ) {\n\n if ( !jQuery.isFunction(jQuery.fn.rbmfhselect2) ) {\n\n console.error('Field Helpers Error: Trying to initialize Select field but \"select2\" ' +\n 'is not enqueued.');\n return;\n }\n\n this.setupSelect2Options();\n\n this.$field.rbmfhselect2(this.options.select2Options);\n }\n }\n\n /**\n * Sets up languages.\n *\n * @since 1.4.0\n */\n setupL10n() {\n\n if ( Object.keys(this.options.select2Options.language).length > 0 ) {\n\n Object.keys(this.options.select2Options.language).map((id) => {\n\n let text = this.options.select2Options.language[id];\n\n // All languages must be functions. Turn all into functions.\n this.options.select2Options.language[id] = (args) => text;\n });\n }\n }\n\n /**\n * Sets up Select2 arguments, allowing for callback arguments.\n *\n * @since 1.4.2\n */\n setupSelect2Options() {\n\n this.setupL10n();\n\n // List of available Select2 options that are callbacks\n let callbackOptions = [\n 'escapeMarkup',\n 'initSelection',\n 'matcher',\n 'query',\n 'sorter',\n 'templateResult',\n 'templateSelection',\n 'tokenizer'\n ];\n\n Object.keys(this.options.select2Options).map((name) => {\n\n if ( callbackOptions.indexOf(name) !== -1 ) {\n\n let callbackName = this.options.select2Options[name];\n\n if ( typeof window[callbackName] === 'function' ) {\n\n this.options.select2Options[name] = window[callbackName];\n }\n }\n });\n\n // Automatically prefix selected items with optgroup label, if using optgroups\n if ( this.options.optGroups &&\n this.options.optGroupSelectionPrefix &&\n typeof this.options.select2Options.templateSelection === 'undefined' ) {\n\n this.options.select2Options.templateSelection = (item) => {\n\n let optGroup = jQuery(item.element).closest('optgroup').attr('label').trim();\n\n return optGroup + ': ' + item.text;\n }\n }\n }\n\n /**\n * Resets the field.\n *\n * @since 1.4.0\n */\n fieldCleanup() {\n\n if ( this.options.select2Disabled ) {\n\n return;\n }\n\n let $oldSelect = this.$field.next('.select2');\n\n if ( $oldSelect.length ) {\n\n $oldSelect.remove();\n }\n\n this.$field\n .removeClass('select2-hidden-accessible')\n .removeAttr('tablindex aria-hidden');\n }\n\n /**\n * Sets the field to default. Override in child class if need different method.\n *\n * @since 1.4.0\n */\n setDefault() {\n\n this.$field.find('option:selected').prop('selected', false);\n this.$field.trigger('change');\n }\n}\n\n/**\n * Finds and initializes all Select fields.\n *\n * @since 1.4.0\n */\nclass FieldSelectInitialize {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $root Root element to initialize fields inside.\n */\n constructor($root) {\n\n const api = this;\n\n this.fields = [];\n\n let $fields = $root.find('[data-fieldhelpers-field-select]');\n\n if ( $fields.length ) {\n\n $fields.each(function () {\n\n api.initializeField(jQuery(this));\n });\n }\n }\n\n /**\n * Initializes the field.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $field\n */\n initializeField($field) {\n\n this.fields.push({\n $field,\n api: new FieldSelect($field),\n });\n }\n}\n\nexport default FieldSelectInitialize;\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/admin/fields/field-select.js","import Field from './field.js';\n\n/**\n * TextArea Field functionality.\n *\n * @since 1.4.0\n */\nclass FieldTextArea extends Field {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n */\n constructor($field) {\n\n super($field, 'textarea');\n\n this.initField();\n }\n\n /**\n * Initializes the WYSIWYG.\n *\n * @since 1.4.0\n */\n initField() {\n\n if ( this.options.wysiwyg ) {\n\n if ( !wp.editor ) {\n\n console.error('Field Helpers Error: Trying to initialize a WYSIWYG Text Area field but \"wp_editor\" ' +\n 'is not enqueued.');\n return;\n }\n\n let settings = jQuery.extend(this.getDefaultEditorSettings(), this.options.wysiwygOptions);\n\n wp.editor.initialize(this.$field.attr('id'), settings);\n }\n }\n\n /**\n * Resets the field.\n *\n * @since 1.4.0\n */\n fieldCleanup() {\n\n if ( this.options.wysiwyg ) {\n\n let id = this.$field.attr('id');\n\n if ( window.tinymce.get(id) ) {\n\n wp.editor.remove(id);\n\n } else {\n\n this.$field.appendTo(this.$wrapper.find('.fieldhelpers-field-content'));\n this.$wrapper.find('.wp-editor-wrap').remove();\n }\n }\n }\n\n /**\n * Fires before deleting the item from a repeater.\n *\n * Removes from wp.editor.\n *\n * @since 1.4.0\n */\n repeaterBeforeDeleteSelf() {\n\n this.fieldCleanup();\n }\n\n /**\n * Fires on Repeat delete item.\n *\n * Adds slight delay to field re-initialization.\n *\n * @since 1.4.0\n */\n repeaterOnDeleteItem() {\n\n this.fieldCleanup();\n this.repeaterSetID();\n\n // Add slight delay because all repeater item WYSIWYG's must be unitialized before re-initializing to prevent\n // ID overlap.\n setTimeout(() => {this.initField()}, 1);\n }\n\n /**\n * Fires on Repeat sort item.\n *\n * Adds slight delay to field re-initialization.\n *\n * @since 1.4.0\n */\n repeaterOnSort() {\n\n this.fieldCleanup();\n this.repeaterSetID();\n\n // Add slight delay because all repeater item WYSIWYG's must be unitialized before re-initializing to prevent\n // ID overlap.\n setTimeout(() => {this.initField()}, 1);\n }\n\n /**\n * Tries to get default editor settings.\n *\n * @since 1.4.0\n *\n * @return {{}}\n */\n getDefaultEditorSettings() {\n\n if ( ! jQuery.isFunction(wp.editor.getDefaultSettings) ) {\n\n return {};\n\n } else {\n\n return wp.editor.getDefaultSettings();\n }\n }\n}\n\n/**\n * Finds and initializes all TextArea fields.\n *\n * @since 1.4.0\n */\nclass FieldTextAreaInitialize {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $root Root element to initialize fields inside.\n */\n constructor($root) {\n\n const api = this;\n\n this.fields = [];\n\n let $fields = $root.find('[data-fieldhelpers-field-textarea]');\n\n if ( $fields.length ) {\n\n $fields.each(function () {\n\n api.initializeField(jQuery(this));\n });\n }\n }\n\n /**\n * Initializes the field.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $field\n */\n initializeField($field) {\n\n this.fields.push({\n $field,\n api: new FieldTextArea($field),\n });\n }\n}\n\nexport default FieldTextAreaInitialize;\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/admin/fields/field-textarea.js","import Field from './field.js';\n\n/**\n * Checkbox Field functionality.\n *\n * @since 1.4.0\n */\nclass FieldCheckbox extends Field {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n */\n constructor($field) {\n\n super($field, 'checkbox');\n\n this.initField();\n }\n\n /**\n * Initializes the select.\n *\n * @since 1.4.0\n */\n initField() {\n\n this.$ui = {\n checkboxes: this.$field.find('input[type=\"checkbox\"]'),\n }\n\n this.setupHandlers();\n\n this.$field.find('input:checked').trigger( 'change' );\n }\n\n /**\n * Sets up class handlers.\n *\n * @since 1.4.0\n */\n setupHandlers() {\n\n const api = this;\n\n this.$ui.checkboxes.change(function () {\n api.handleChange(jQuery(this));\n });\n }\n\n /**\n * Fires on checkbox change.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $input Checkbox input.\n */\n handleChange($input) {\n\n if ( $input.prop('checked') ) {\n\n this.setActive($input.closest('.fieldhelpers-field-checkbox-row'));\n\n } else {\n\n this.setInactive($input.closest('.fieldhelpers-field-checkbox-row'));\n }\n }\n\n /**\n * Sets the checkbox row as active.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $row\n */\n setActive($row) {\n\n $row.addClass('fieldhelpers-field-checkbox-row-active');\n }\n\n /**\n * Sets the checkbox row as inactive.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $row\n */\n setInactive($row) {\n\n $row.removeClass('fieldhelpers-field-checkbox-row-active');\n }\n\n /**\n * Sets the ID to be unique, based off the repeater item index.\n *\n * For checkboxes, there will be multiple IDs in each, and need to be set accordingly.\n *\n * @since 1.4.0\n */\n repeaterSetID() {\n\n let ID = this.options.id;\n let $rows = this.$field.find('.fieldhelpers-field-checkbox-row');\n let index = this.$field.closest('[data-repeater-item]').index();\n\n $rows.each(function () {\n\n let $field = jQuery(this).find('input[type=\"checkbox\"]');\n let $label = $field.next('label');\n let fieldIndex = jQuery(this).index();\n let newID = `${ID}_${index}_${fieldIndex}`;\n\n $field.attr('id', newID);\n $label.attr('for', newID);\n });\n }\n\n /**\n * Cleans up after a repeater add/init.\n *\n * @since 1.5.8\n */\n fieldCleanup() {\n\n let api = this;\n\n this.$field.find( 'input' ).each( function( index, input ) {\n api.setInactive( jQuery( input ).closest( '.fieldhelpers-field-checkbox-row' ) );\n } );\n\n }\n\n /**\n * Ensure that our styling is reapplied\n *\n * @param {object} $repeater jQuery DOM Object\n * @param {array} options Array of Field Options\n *\n * @since 1.5.8\n * @return void\n */\n repeaterOnInit( $repeater, options ) {\n\n this.initField();\n\n }\n \n /**\n * Runs cleanup before the Repeater creates a dummy row to clear out selected items\n *\n * @param {object} $repeater jQuery DOM Object\n * @param {array} options Array of Field Options\n *\n * @since 1.5.8\n * @return void\n */\n repeaterBeforeInit( $repeater, options ) {\n\n this.fieldCleanup();\n\n }\n\n /**\n * Sets the field to default.\n *\n * @since 1.4.0\n */\n setDefault() {\n\n if ( this.options.default ) {\n\n this.$field.find(`[value=\"${this.options.default}\"]`).prop('checked', true).change();\n }\n }\n}\n\n/**\n * Finds and initializes all Checkbox fields.\n *\n * @since 1.4.0\n */\nclass FieldCheckboxInitialize {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $root Root element to initialize fields inside.\n */\n constructor($root) {\n\n const api = this;\n\n this.fields = [];\n\n let $fields = $root.find('[data-fieldhelpers-field-checkbox]');\n\n if ( $fields.length ) {\n\n $fields.each(function () {\n\n api.initializeField(jQuery(this));\n });\n }\n }\n\n /**\n * Initializes the field.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $field\n */\n initializeField($field) {\n\n this.fields.push({\n $field,\n api: new FieldCheckbox($field),\n });\n }\n}\n\nexport default FieldCheckboxInitialize;\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/admin/fields/field-checkbox.js","import Field from './field.js';\n\n/**\n * Radio Field functionality.\n *\n * @since 1.4.0\n */\nclass FieldRadio extends Field {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n */\n constructor($field) {\n\n super($field, 'radio');\n\n this.initField();\n }\n\n /**\n * Initializes the select.\n *\n * @since 1.4.0\n */\n initField() {\n\n this.$ui = {\n radios: this.$field.find('input[type=\"radio\"]'),\n }\n\n this.setupHandlers();\n\n this.$field.find('input:checked').trigger( 'change' );\n }\n\n /**\n * Sets up class handlers.\n *\n * @since 1.4.0\n */\n setupHandlers() {\n\n const api = this;\n\n this.$ui.radios.change(function () {\n api.handleChange(jQuery(this));\n });\n }\n\n /**\n * Fires on radio change.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $input Checkbox input.\n */\n handleChange($input) {\n\n this.setInactive(this.$ui.radios.closest('.fieldhelpers-field-radio-row'));\n this.setActive($input.closest('.fieldhelpers-field-radio-row'));\n }\n\n /**\n * Sets the radio row as active.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $row\n */\n setActive($row) {\n\n $row.addClass('fieldhelpers-field-radio-row-active');\n }\n\n /**\n * Sets the radio row as inactive.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $row\n */\n setInactive($row) {\n\n $row.removeClass('fieldhelpers-field-radio-row-active');\n }\n\n\n /**\n * Sets the ID to be unique, based off the repeater item index.\n *\n * For radios, there will be multiple IDs in each, and need to be set accordingly.\n *\n * @since 1.4.0\n */\n repeaterSetID() {\n\n let ID = this.options.id;\n let $rows = this.$field.find('.fieldhelpers-field-radio-row');\n let index = this.$field.closest('[data-repeater-item]').index();\n\n $rows.each(function () {\n\n let $field = jQuery(this).find('input[type=\"radio\"]');\n let $label = $field.next('label');\n let fieldIndex = jQuery(this).index();\n let newID = `${ID}_${index}_${fieldIndex}`;\n\n $field.attr('id', newID);\n $label.attr('for', newID);\n });\n }\n\n /**\n * Cleans up after a repeater add/init.\n *\n * @since 1.5.8\n */\n fieldCleanup() {\n\n let api = this;\n\n this.$field.find( 'input' ).each( function( index, input ) {\n api.setInactive( jQuery( input ).closest( '.fieldhelpers-field-radio-row' ) );\n } );\n\n }\n\n /**\n * Ensure that our styling is reapplied\n *\n * @param {object} $repeater jQuery DOM Object\n * @param {array} options Array of Field Options\n *\n * @since 1.5.8\n * @return void\n */\n repeaterOnInit( $repeater, options ) {\n\n this.initField();\n\n }\n \n /**\n * Runs cleanup before the Repeater creates a dummy row to clear out selected items\n *\n * @param {object} $repeater jQuery DOM Object\n * @param {array} options Array of Field Options\n *\n * @since 1.5.8\n * @return void\n */\n repeaterBeforeInit( $repeater, options ) {\n\n this.fieldCleanup();\n\n }\n\n /**\n * Sets the field to default.\n *\n * @since 1.4.0\n */\n setDefault() {\n\n if ( this.options.default ) {\n\n this.$field.find(`[value=\"${this.options.default}\"]`).prop('checked', true).change();\n }\n }\n}\n\n/**\n * Finds and initializes all Radio fields.\n *\n * @since 1.4.0\n */\nclass FieldRadioInitialize {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $root Root element to initialize fields inside.\n */\n constructor($root) {\n\n const api = this;\n\n this.fields = [];\n\n let $fields = $root.find('[data-fieldhelpers-field-radio]');\n\n if ( $fields.length ) {\n\n $fields.each(function () {\n\n api.initializeField(jQuery(this));\n });\n }\n }\n\n /**\n * Initializes the field.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $field\n */\n initializeField($field) {\n\n this.fields.push({\n $field,\n api: new FieldRadio($field),\n });\n }\n}\n\nexport default FieldRadioInitialize;\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/admin/fields/field-radio.js","import Field from './field.js';\n\n/**\n * Toggle Field functionality.\n *\n * @since 1.4.0\n */\nclass FieldToggle extends Field {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n */\n constructor($field) {\n\n super($field, 'toggle');\n\n this.initField();\n }\n\n /**\n * Initializes the select.\n *\n * @since 1.4.0\n */\n initField() {\n\n this.getUI();\n\n // Initial change trigger to help other plugins\n setTimeout(() => {\n this.$field.trigger('change', [this.$ui.input.val()]);\n }, 1);\n\n this.setupHandlers();\n }\n\n /**\n * Retrieves the UI.\n *\n * @since 1.4.0\n */\n getUI() {\n\n this.$ui = {\n slider: this.$field.find('.fieldhelpers-field-toggle-slider'),\n input: this.$field.find('input[type=\"hidden\"]'),\n }\n }\n\n /**\n * Sets up class handlers.\n *\n * @since 1.4.0\n */\n setupHandlers() {\n\n const api = this;\n\n this.$ui.slider.click(() => {\n api.handleClick();\n });\n }\n\n /**\n * Return if field is checked or not.\n *\n * @since 1.4.0\n *\n * @returns {*}\n */\n isChecked() {\n\n return this.$field.hasClass('checked');\n }\n\n /**\n * Fires on toggle change.\n *\n * @since 1.4.0\n */\n handleClick() {\n\n if ( this.isChecked() ) {\n\n this.$ui.input.val(this.options.uncheckedValue);\n this.$field.removeClass('checked');\n\n } else {\n\n this.$ui.input.val(this.options.checkedValue);\n this.$field.addClass('checked');\n }\n\n this.$field.trigger('change', [this.$ui.input.val()]);\n }\n}\n\n/**\n * Finds and initializes all Toggle fields.\n *\n * @since 1.4.0\n */\nclass FieldToggleInitialize {\n\n /**\n * Class constructor.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $root Root element to initialize fields inside.\n */\n constructor($root) {\n\n const api = this;\n\n this.fields = [];\n\n let $fields = $root.find('[data-fieldhelpers-field-toggle]');\n\n if ( $fields.length ) {\n\n $fields.each(function () {\n\n api.initializeField(jQuery(this));\n });\n }\n }\n\n /**\n * Initializes the field.\n *\n * @since 1.4.0\n *\n * @param {jQuery} $field\n */\n initializeField($field) {\n\n this.fields.push({\n $field,\n api: new FieldToggle($field),\n });\n }\n}\n\nexport default FieldToggleInitialize;\n\n\n// WEBPACK FOOTER //\n// ./assets/src/js/admin/fields/field-toggle.js"]} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 29d21bd..d256428 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "RBMFieldHelpers", - "version": "1.5.9", + "version": "1.6.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 33c286c..76f010f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "RBMFieldHelpers", - "version": "1.5.9", + "version": "1.6.0", "authors": [ "Joel Worsham ", "Eric Defore " diff --git a/rbm-field-helpers.php b/rbm-field-helpers.php index 4ff4c66..7a0f372 100644 --- a/rbm-field-helpers.php +++ b/rbm-field-helpers.php @@ -9,7 +9,7 @@ if ( ! class_exists( 'RBM_FieldHelpers' ) ) { - define( 'RBM_FIELD_HELPERS_VER', '1.5.9' ); + define( 'RBM_FIELD_HELPERS_VER', '1.6.0' ); if ( strpos( wp_normalize_path( __FILE__ ), wp_normalize_path( WP_PLUGIN_DIR ) ) !== false ) {