occam-styles 4.1.350 → 4.1.351

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/example.js CHANGED
@@ -30908,46 +30908,6 @@
30908
30908
  var _default = _withStyle.default;
30909
30909
  });
30910
30910
 
30911
- // lib/example/view/div.js
30912
- var require_div = __commonJS((exports) => {
30913
- "use strict";
30914
- Object.defineProperty(exports, "__esModule", {
30915
- value: true
30916
- });
30917
- Object.defineProperty(exports, "default", {
30918
- enumerable: true,
30919
- get: function() {
30920
- return _default;
30921
- }
30922
- });
30923
- var _easywithstyle = /* @__PURE__ */ _interop_require_default(require_lib7());
30924
- function _interop_require_default(obj) {
30925
- return obj && obj.__esModule ? obj : {
30926
- default: obj
30927
- };
30928
- }
30929
- function _tagged_template_literal(strings, raw) {
30930
- if (!raw) {
30931
- raw = strings.slice(0);
30932
- }
30933
- return Object.freeze(Object.defineProperties(strings, {
30934
- raw: {
30935
- value: Object.freeze(raw)
30936
- }
30937
- }));
30938
- }
30939
- function _templateObject() {
30940
- var data = _tagged_template_literal([
30941
- "\n\n width: 10rem;\n border: 1px dashed black;\n display: inline-block;\n border-right: none;\n \n :last-of-type {\n border-right: 1px dashed black;\n }\n\n"
30942
- ]);
30943
- _templateObject = function _templateObject2() {
30944
- return data;
30945
- };
30946
- return data;
30947
- }
30948
- var _default = _easywithstyle.default.div(_templateObject());
30949
- });
30950
-
30951
30911
  // lib/styles.js
30952
30912
  var require_styles2 = __commonJS((exports) => {
30953
30913
  "use strict";
@@ -39903,6 +39863,46 @@
39903
39863
  }
39904
39864
  });
39905
39865
 
39866
+ // lib/example/view/div.js
39867
+ var require_div = __commonJS((exports) => {
39868
+ "use strict";
39869
+ Object.defineProperty(exports, "__esModule", {
39870
+ value: true
39871
+ });
39872
+ Object.defineProperty(exports, "default", {
39873
+ enumerable: true,
39874
+ get: function() {
39875
+ return _default;
39876
+ }
39877
+ });
39878
+ var _easywithstyle = /* @__PURE__ */ _interop_require_default(require_lib7());
39879
+ function _interop_require_default(obj) {
39880
+ return obj && obj.__esModule ? obj : {
39881
+ default: obj
39882
+ };
39883
+ }
39884
+ function _tagged_template_literal(strings, raw) {
39885
+ if (!raw) {
39886
+ raw = strings.slice(0);
39887
+ }
39888
+ return Object.freeze(Object.defineProperties(strings, {
39889
+ raw: {
39890
+ value: Object.freeze(raw)
39891
+ }
39892
+ }));
39893
+ }
39894
+ function _templateObject() {
39895
+ var data = _tagged_template_literal([
39896
+ "\n\n width: 10rem;\n border: 1px dashed black;\n display: inline-block;\n border-right: none;\n \n :last-of-type {\n border-right: 1px dashed black;\n }\n\n"
39897
+ ]);
39898
+ _templateObject = function _templateObject2() {
39899
+ return data;
39900
+ };
39901
+ return data;
39902
+ }
39903
+ var _default = _easywithstyle.default.div(_templateObject());
39904
+ });
39905
+
39906
39906
  // lib/example/view/div/menu.js
39907
39907
  var require_menu2 = __commonJS((exports) => {
39908
39908
  "use strict";
@@ -40949,9 +40949,8 @@
40949
40949
  require_lib2();
40950
40950
  var _easywithstyle = /* @__PURE__ */ _interop_require_default(require_lib7());
40951
40951
  var _easy = require_lib();
40952
+ var _index = require_lib8();
40952
40953
  var _view = /* @__PURE__ */ _interop_require_default(require_view());
40953
- var _juliaMono = /* @__PURE__ */ _interop_require_default(require_juliaMono());
40954
- var _computerModern = /* @__PURE__ */ _interop_require_default(require_computerModern());
40955
40954
  function _interop_require_default(obj) {
40956
40955
  return obj && obj.__esModule ? obj : {
40957
40956
  default: obj
@@ -40961,10 +40960,10 @@
40961
40960
  var renderStyles = _easywithstyle.default.renderStyles;
40962
40961
  var body = new _easy.Body();
40963
40962
  renderStyles();
40964
- renderStyle((0, _computerModern.default)());
40965
- renderStyle((0, _juliaMono.default)());
40963
+ renderStyle((0, _index.computerModernStyle)());
40964
+ renderStyle((0, _index.juliaMonoStyle)());
40966
40965
  body.mount(/* @__PURE__ */ React.createElement(_view.default, null));
40967
40966
  });
40968
40967
  require_example();
40969
40968
  })();
40970
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL29mZnNldC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvYm91bmRzLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL3V0aWxpdGllcy9vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL3V0aWxpdGllcy9hcnJheS5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvdXRpbGl0aWVzL3N0cmluZy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvdXRpbGl0aWVzL25hbWUuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL3V0aWxpdGllcy9kb20uanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL21peGlucy9lbGVtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy90ZXh0RWxlbWVudC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvdXRpbGl0aWVzL2VsZW1lbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvanN4LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9ldmVudFR5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMva2V5LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvY2xpY2suanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL21peGlucy9zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL3Jlc2l6ZS5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL2V2ZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvbW91c2UuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL21peGlucy9zY3JvbGwuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL3V0aWxpdGllcy9hc3luYy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL2N1c3RvbUV2ZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvZWxlbWVudC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvcmVhY3QuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2VsZW1lbnQvYm9keS5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvZWxlbWVudC9saW5rLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvY2hhbmdlLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9pbnB1dEVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2lucHV0RWxlbWVudC9pbnB1dC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvZWxlbWVudC9idXR0b24uanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2VsZW1lbnQvc2VsZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9lbGVtZW50L2NoZWNrYm94LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9pbnB1dEVsZW1lbnQvdGV4dGFyZWEuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL21peGlucy93aW5kb3cuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL3dpbmRvdy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL3NlbGVjdGlvbi5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvZG9jdW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL21vdXNlQnV0dG9ucy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2p1eHRhcG9zZS9zcmMvanV4dGFwb3NlLmpzIiwgIm5vZGVfbW9kdWxlcy9qdXh0YXBvc2Uvc3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy90YWdOYW1lcy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9sZXZlbHMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvbWV0aG9kcy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9oZWFkZXJzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2tleUNvZGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2VuY29kaW5ncy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9jaGFyYWN0ZXJzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3N0YXR1c0NvZGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2NvbnRlbnRUeXBlcy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9zdGF0dXNNZXNzYWdlcy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2FycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3V0aWxpdGllcy9wYXRoLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3V0aWxpdGllcy9odHRwLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3V0aWxpdGllcy9zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL3ZlcnNpb24uanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2FzeW5jaHJvbm91cy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy91dGlsaXRpZXMvYWpheC5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9icm93c2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3V0aWxpdGllcy9jb250ZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3R5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL3NpZ25pZmljYW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9ydWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3NwZWNpYWxTeW1ib2xzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3V0aWxpdGllcy9sZXhlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9ibmYvZW50cmllcy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy91dGlsaXRpZXMvdG9rZW4uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29tbW9uL2xleGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L3doaXRlc3BhY2UuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvcmVndWxhckV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9kb3VibHlRdW90ZWQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYm5mL2xleGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2Jhc2ljL2VudHJpZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9zaW5nbHlRdW90ZWQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZS9weXRob25TdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZi9weXRob25TdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2YvcHl0aG9uU3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2YuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2YvcHl0aG9uU3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYmFzaWMvbGV4ZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL3NpZ25pZmljYW50L2NvbW1lbnQvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZS9jU3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2YvY1N0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2YvY1N0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mL2NTdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvY3NzL2VudHJpZXMuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL2Nzcy9sZXhlci5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9saWIvY3NzLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2JuZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvc3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS92ZXJ0aWNhbEJyYW5jaC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL3Rva2Vucy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvaG9yaXpvbnRhbEJyYW5jaC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlL2NoaWxkTm9kZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS9ub25UZXJtaW5hbE5vZGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvbm9uVGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL25hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3V0aWxpdGllcy9wYXJzZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC90ZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlL3Rlcm1pbmFsTm9kZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS90ZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC90ZXJtaW5hbC9zaWduaWZpY2FudFRva2VuVHlwZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlTmFtZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvbmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC9ub25UZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydFR5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L25vblRlcm1pbmFsL29wdGlvbmFsUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvbm9uVGVybWluYWwvb25lT3JNb3JlUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3V0aWxpdGllcy9ibmYuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL3BhcnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vcnVsZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vcGFydFJ1bGUvdGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vcGFydFJ1bGUvbm9uVGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvcGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvcnVsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9ydWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3J1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL2Vycm9yLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L3Rlcm1pbmFsL3dpbGRjYXJkLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2Vycm9yLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2Vycm9yLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvZXBzaWxvbk5vZGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvdGVybWluYWwvZXBzaWxvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC90ZXJtaW5hbC9lcHNpbG9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9lcHNpbG9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3Rlcm1pbmFsU3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2Vwc2lsb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3V0aWxpdGllcy9ub2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9kb2N1bWVudC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydENob2ljZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC9ub25UZXJtaW5hbC9jaG9pY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2RvY3VtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2RvY3VtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9ydWxlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9ydWxlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvd2lsZGNhcmQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvd2lsZGNhcmQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3N0YXRlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9taXhpbnMvcGFyc2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvZW5kT2ZMaW5lTm9kZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS90ZXJtaW5hbC9lbmRPZkxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvdGVybWluYWwvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9lbmRPZkxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9wYXJ0Q2hvaWNlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3BhcnRDaG9pY2UuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvcGFydENob2ljZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9xdWFudGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9kZWZpbml0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2RlZmluaXRpb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvZGVmaW5pdGlvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvcHJlY2VkZW5jZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9wcmVjZWRlbmNlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3ByZWNlZGVuY2UuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL2RlZmluaXRpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L25vblRlcm1pbmFsL3NlcXVlbmNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9kZWZpbml0aW9ucy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9kZWZpbml0aW9ucy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvcGFydC90ZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS90ZXJtaW5hbFBhcnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL2Nob2ljZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vY2hvaWNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9jaG9pY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi90ZXJtaW5hbFN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9zaWduaWZpY2FudFRva2VuVHlwZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS90ZXJtaW5hbFN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvcGFydC9ub25UZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9wYXJ0UnVsZS9ub25UZXJtaW5hbC9ydWxlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9ub25UZXJtaW5hbFBhcnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL3NlcXVlbmNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9zZXF1ZW5jZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvc2VxdWVuY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvbm9XaGl0ZXNwYWNlTm9kZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS90ZXJtaW5hbC9ub1doaXRlc3BhY2UuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvdGVybWluYWwvbm9XaGl0ZXNwYWNlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9ub1doaXRlc3BhY2VQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL25vV2hpdGVzcGFjZVBhcnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvbm9XaGl0ZXNwYWNlUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvbW9kaWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vbG9va0FoZWFkTW9kaWZpZXJSdWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2xvb2tBaGVhZE1vZGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2FtYmlndW91c01vZGlmaWVyUnVsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9hbWJpZ3VvdXNNb2RpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC90ZXJtaW5hbC9yZWd1bGFyRXhwcmVzc2lvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvcmVndWxhckV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvcmVndWxhckV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL3F1YW50aWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vcXVhbnRpZmllclJ1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvb3B0aW9uYWxRdWFudGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL29uZU9yTW9yZVF1YW50aWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvemVyb09yTW9yZVF1YW50aWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvcnVsZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2Jhc2ljL2JuZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29tbW9uL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYmFzaWMvcGFyc2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL2Nzcy9ibmYuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL2Nzcy9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvbGliL2Nzcy88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWRvbS9zcmMvdXRpbGl0aWVzL2FycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1kb20vc3JjL3NwcmVhZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZG9tL3NyYy9xdWVyeS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZG9tL3NyYy91dGlsaXRpZXMvcXVlcnkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWRvbS9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvdXRpbGl0aWVzL2NvbnRlbnQuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3N0eWxlL2RlY2xhcmF0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL2xpYi9zdHlsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3N0eWxlL2RlY2xhcmF0aW9ucy5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9saWIvc3R5bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9zdHlsZS9ydWxlU2V0LmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9zdHlsZS9ydWxlU2V0cy5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9saWIvc3R5bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9zdHlsZS9tZWRpYS5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvc3R5bGUvbWVkaWFzLmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL2xpYi9zdHlsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3N0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL2xpYi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3V0aWxpdGllcy9zdHlsZXMuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3V0aWxpdGllcy9jbGFzc05hbWUuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LXdpdGgtc3R5bGUvc3JjL3V0aWxpdGllcy9jbGFzcy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS13aXRoLXN0eWxlL3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktd2l0aC1zdHlsZS9zcmMvd2l0aFN0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LXdpdGgtc3R5bGUvc3JjL2luZGV4LmpzIiwgInNyYy9leGFtcGxlL3ZpZXcvZGl2LmpzIiwgInNyYy9zdHlsZXMuanMiLCAic3JjL2NvbG91cnMuanMiLCAic3JjL3NjaGVtZS9zeW50YXgvZGVmYXVsdC5qcyIsICJzcmMvc3R5bGUvc3ludGF4L2RlZmF1bHQuanMiLCAic3JjL3NjaGVtZS9zeW50YXgvZmxvcmVuY2UuanMiLCAic3JjL3N0eWxlL3N5bnRheC9mbG9yZW5jZS5qcyIsICJzcmMvc2NoZW1lL3N5bnRheC9wbGFpblRleHQuanMiLCAic3JjL3N0eWxlL3N5bnRheC9tYXJrZG93bi5qcyIsICJzcmMvc2NoZW1lL3N5bnRheC9tZXRhSlNPTi5qcyIsICJzcmMvc3R5bGUvc3ludGF4L21ldGFKU09OLmpzIiwgInNyYy9zdHlsZS9zeW50YXgvcGxhaW5UZXh0LmpzIiwgInNyYy9zY2hlbWUvc3ludGF4L2N1c3RvbUdyYW1tYXJCTkYuanMiLCAic3JjL3N0eWxlL3N5bnRheC9jdXN0b21HcmFtbWFyQk5GLmpzIiwgInNyYy9zdHlsZS9zeW50YXguanMiLCAic3JjL2RlZmF1bHRzLmpzIiwgInNyYy9zdHlsZS9qdWxpYU1vbm8uanMiLCAic3JjL3N0eWxlL2NvbXB1dGVyTW9kZXJuLmpzIiwgInNyYy9taXhpbi9mb250L2NvbW1vbi5qcyIsICJzcmMvbWl4aW4vZm9udC9qdWxpYU1vbm8uanMiLCAic3JjL3NjaGVtZS9jb21tb24uanMiLCAic3JjL3NjaGVtZS9lZGl0b3IuanMiLCAic3JjL3NjaGVtZS9jb25zb2xlLmpzIiwgInNyYy9zY2hlbWUvcHJldmlld1BhbmUuanMiLCAic3JjL3NjaGVtZS9wcmV0dHlQcmludGVyLmpzIiwgInNyYy9zY2hlbWUvd2VsY29tZVNjcmVlbi5qcyIsICJzcmMvc3ZnL2xvZ28uanMiLCAic3JjL3N2Zy5qcyIsICJzcmMvc3ZnL21hcmtlci5qcyIsICJzcmMvc3ZnL25hbWUuanMiLCAic3JjL3N2Zy9uYW1lL2ZpbGUuanMiLCAic3JjL3N2Zy90b2dnbGUuanMiLCAic3JjL3N2Zy90b2dnbGUvdXAuanMiLCAic3JjL3N2Zy9mb2xkLmpzIiwgInNyYy9zdmcvZm9sZC9saW5lLmpzIiwgInNyYy9zdmcvbWVudS5qcyIsICJzcmMvc3ZnL21lbnUvZmxpcC5qcyIsICJzcmMvc3ZnL3RvZ2dsZS9kb3duLmpzIiwgInNyYy9zdmcvZm9sZC9jbG9zZWQuanMiLCAic3JjL3N2Zy9mb2xkL3RvcE9wZW4uanMiLCAic3JjL3N2Zy9uYW1lL2RpcmVjdG9yeS5qcyIsICJzcmMvc3ZnL3RpdGxlLmpzIiwgInNyYy9zdmcvdGl0bGUvZXhwYW5kZWQuanMiLCAic3JjL3N2Zy90aXRsZS9jb2xsYXBzZWQuanMiLCAic3JjL3N2Zy9mb2xkL2JvdHRvbU9wZW4uanMiLCAic3JjL3N2Zy9tZW51L2VtYmVkZGVkTW9kZS5qcyIsICJzcmMvc3ZnL3Rvb2xiYXIuanMiLCAic3JjL3N2Zy90b29sYmFyL2pvaW5TZXNzaW9uLmpzIiwgInNyYy9zdmcvdG9vbGJhci9zeW5jaHJvbmlzZS5qcyIsICJzcmMvc3ZnL3Rvb2xiYXIvc2hvd1JlbGVhc2VzLmpzIiwgInNyYy9zdmcvdG9vbGJhci9oaWRlUmVsZWFzZXMuanMiLCAic3JjL3N2Zy90b29sYmFyL2xlYXZlU2Vzc2lvbi5qcyIsICJzcmMvc3ZnL3Rvb2xiYXIvY2xlYXJDb25zb2xlLmpzIiwgInNyYy9zdmcvdG9vbGJhci9jcmVhdGVTZXNzaW9uLmpzIiwgInNyYy9zdmcvbmFtZS9kaXJlY3RvcnkvcmVsZWFzZS5qcyIsICJzcmMvc3ZnL21lbnUvcHJlc2VudGF0aW9uTW9kZS5qcyIsICJzcmMvc3ZnL21lbnUvZGVjcmVhc2VGb250U2l6ZS5qcyIsICJzcmMvc3ZnL21lbnUvaW5jcmVhc2VGb250U2l6ZS5qcyIsICJzcmMvc3ZnL3Rvb2xiYXIvb3BlblJ1YmJpc2hCaW4uanMiLCAic3JjL3N2Zy90b29sYmFyL2NvcHlTZXNzaW9uS2V5LmpzIiwgInNyYy9zdmcvdG9vbGJhci9jbG9zZWRSdWJiaXNoQmluLmpzIiwgInNyYy9zdmcvbWVudS90b2dnbGVQcmV2aWV3UGFuZU9ubHkuanMiLCAic3JjL3N2Zy9tZW51L3RvZ2dsZVByZXZpZXdQYW5lU3BsaXQuanMiLCAic3JjL3N2Zy90b29sYmFyL2ZpbmRJbkFjdGl2ZURvY3VtZW50LmpzIiwgInNyYy9zdmcvdG9vbGJhci9leHBvcnRDdXN0b21HcmFtbWFycy5qcyIsICJzcmMvc3ZnL21lbnUvdG9nZ2xlUHJldHR5UHJpbnRlck9ubHkuanMiLCAic3JjL3N2Zy9tZW51L3RvZ2dsZVByZXR0eVByaW50ZXJTcGxpdC5qcyIsICJzcmMvc3ZnL3Rvb2xiYXIvY3JlYXRlUHJvamVjdHNGaWxlUGF0aC5qcyIsICJzcmMvc3ZnL3Rvb2xiYXIvZmluZEluUHJvamVjdHNBbmRSZWxlYXNlcy5qcyIsICJzcmMvc3ZnL3Rvb2xiYXIvcmVsb2FkUHJvamVjdHNBbmRSZWxlYXNlcy5qcyIsICJzcmMvc3ZnL3Rvb2xiYXIvcmVuYW1lU2VsZWN0ZWRQcm9qZWN0c1BhdGguanMiLCAic3JjL3N2Zy90b29sYmFyL2NyZWF0ZVByb2plY3RzRGlyZWN0b3J5UGF0aC5qcyIsICJzcmMvaW5kZXguanMiLCAic3JjL2V4YW1wbGUvdmlldy9kaXYvbWVudS5qcyIsICJzcmMvZXhhbXBsZS92aWV3L2Rpdi90b29sYmFyLmpzIiwgInNyYy9leGFtcGxlL3ZpZXcvZGl2L2NvbXB1dGVyTW9kZXJuLmpzIiwgInNyYy9leGFtcGxlL3ZpZXcuanMiLCAic3JjL2V4YW1wbGUuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPZmZzZXQge1xuICBjb25zdHJ1Y3Rvcih0b3AsIGxlZnQpIHtcbiAgICB0aGlzLnRvcCA9IHRvcDtcbiAgICB0aGlzLmxlZnQgPSBsZWZ0O1xuICB9XG5cbiAgZ2V0VG9wKCkge1xuICAgIHJldHVybiB0aGlzLnRvcDtcbiAgfVxuXG4gIGdldExlZnQoKSB7XG4gICAgcmV0dXJuIHRoaXMubGVmdDtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCb3VuZHMge1xuICBjb25zdHJ1Y3Rvcih0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20pIHtcbiAgICB0aGlzLnRvcCA9IHRvcDtcbiAgICB0aGlzLmxlZnQgPSBsZWZ0O1xuICAgIHRoaXMucmlnaHQgPSByaWdodDtcbiAgICB0aGlzLmJvdHRvbSA9IGJvdHRvbTtcbiAgfVxuXG4gIGdldFRvcCgpIHtcbiAgICByZXR1cm4gdGhpcy50b3A7XG4gIH1cblxuICBnZXRMZWZ0KCkge1xuICAgIHJldHVybiB0aGlzLmxlZnQ7XG4gIH1cblxuICBnZXRSaWdodCgpIHtcbiAgICByZXR1cm4gdGhpcy5yaWdodDtcbiAgfVxuXG4gIGdldEJvdHRvbSgpIHtcbiAgICByZXR1cm4gdGhpcy5ib3R0b207XG4gIH1cblxuICBnZXRXaWR0aCgpIHtcbiAgICBjb25zdCB3aWR0aCA9ICh0aGlzLnJpZ2h0IC0gdGhpcy5sZWZ0KTtcblxuICAgIHJldHVybiB3aWR0aDtcbiAgfVxuXG4gIGdldEhlaWdodCgpIHtcbiAgICBjb25zdCBoZWlnaHQgPSAodGhpcy5ib3R0b20gLSB0aGlzLnRvcCk7XG5cbiAgICByZXR1cm4gaGVpZ2h0O1xuICB9XG4gIFxuICBzZXRUb3AodG9wKSB7XG4gICAgdGhpcy50b3AgPSB0b3A7XG4gIH1cblxuICBzZXRMZWZ0KGxlZnQpIHtcbiAgICB0aGlzLmxlZnQgPSBsZWZ0O1xuICB9XG5cbiAgc2V0UmlnaHQocmlnaHQpIHtcbiAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7XG4gIH1cblxuICBzZXRCb3R0b20oYm90dG9tKSB7XG4gICAgdGhpcy5ib3R0b20gPSBib3R0b207XG4gIH1cblxuICBzaGlmdChob3Jpem9udGFsT2Zmc2V0LCB2ZXJ0aWNhbE9mZnNldCkge1xuICAgIHRoaXMudG9wICs9IHZlcnRpY2FsT2Zmc2V0O1xuICAgIHRoaXMubGVmdCArPSBob3Jpem9udGFsT2Zmc2V0O1xuICAgIHRoaXMucmlnaHQgKz0gaG9yaXpvbnRhbE9mZnNldDtcbiAgICB0aGlzLmJvdHRvbSArPSB2ZXJ0aWNhbE9mZnNldDtcbiAgfVxuXG4gIGlzT3ZlcmxhcHBpbmdNb3VzZShtb3VzZVRvcCwgbW91c2VMZWZ0KSB7XG4gICAgcmV0dXJuICggICh0aGlzLnRvcCA8PSBtb3VzZVRvcClcbiAgICAgICAgICAgJiYgKHRoaXMubGVmdCA8PSBtb3VzZUxlZnQpXG4gICAgICAgICAgICYmICh0aGlzLnJpZ2h0ID4gbW91c2VMZWZ0KVxuICAgICAgICAgICAmJiAodGhpcy5ib3R0b20gPiBtb3VzZVRvcCkgICk7XG4gIH1cblxuICBhcmVPdmVybGFwcGluZyhib3VuZHMpIHtcbiAgICBjb25zdCBib3R0b20gPSBib3VuZHMuZ2V0Qm90dG9tKCksXG4gICAgICAgICAgcmlnaHQgPSBib3VuZHMuZ2V0UmlnaHQoKSxcbiAgICAgICAgICBsZWZ0ID0gYm91bmRzLmdldExlZnQoKSxcbiAgICAgICAgICB0b3AgPSBib3VuZHMuZ2V0VG9wKCksXG4gICAgICAgICAgb3ZlcmxhcHBpbmcgPSAoICAodGhpcy50b3AgPCBib3R0b20pXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiAodGhpcy5sZWZ0IDwgcmlnaHQpXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiAodGhpcy5yaWdodCA+IGxlZnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiAodGhpcy5ib3R0b20gPiB0b3ApICApO1xuXG4gICAgcmV0dXJuIG92ZXJsYXBwaW5nO1xuICB9XG5cbiAgc3RhdGljIGZyb21Cb3VuZGluZ0NsaWVudFJlY3QoYm91bmRpbmdDbGllbnRSZWN0KSB7XG4gICAgY29uc3Qgd2luZG93U2Nyb2xsVG9wID0gd2luZG93LnBhZ2VZT2Zmc2V0LCAvLy9cbiAgICAgICAgICB3aW5kb3dTY3JvbGxMZWZ0ID0gd2luZG93LnBhZ2VYT2Zmc2V0LCAgLy8vXG4gICAgICAgICAgdG9wID0gYm91bmRpbmdDbGllbnRSZWN0LnRvcCArIHdpbmRvd1Njcm9sbFRvcCxcbiAgICAgICAgICBsZWZ0ID0gYm91bmRpbmdDbGllbnRSZWN0LmxlZnQgKyB3aW5kb3dTY3JvbGxMZWZ0LFxuICAgICAgICAgIHJpZ2h0ID0gYm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0ICsgd2luZG93U2Nyb2xsTGVmdCxcbiAgICAgICAgICBib3R0b20gPSBib3VuZGluZ0NsaWVudFJlY3QuYm90dG9tICsgd2luZG93U2Nyb2xsVG9wLFxuICAgICAgICAgIGJvdW5kcyA9IG5ldyBCb3VuZHModG9wLCBsZWZ0LCByaWdodCwgYm90dG9tKTtcblxuICAgIHJldHVybiBib3VuZHM7XG4gIH1cblxuICBzdGF0aWMgZnJvbVRvcExlZnRXaWR0aEFuZEhlaWdodCh0b3AsIGxlZnQsIHdpZHRoLCBoZWlnaHQpIHtcbiAgICBjb25zdCBib3R0b20gPSB0b3AgKyBoZWlnaHQsXG4gICAgICAgICAgcmlnaHQgPSBsZWZ0ICsgd2lkdGgsXG4gICAgICAgICAgYm91bmRzID0gbmV3IEJvdW5kcyh0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20pO1xuXG4gICAgcmV0dXJuIGJvdW5kcztcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgRk9SID0gXCJmb3JcIjtcbmV4cG9ydCBjb25zdCBCT0RZID0gXCJib2R5XCI7XG5leHBvcnQgY29uc3QgTk9ORSA9IFwibm9uZVwiO1xuZXhwb3J0IGNvbnN0IERBU0ggPSBcIi1cIjtcbmV4cG9ydCBjb25zdCBTUEFDRSA9IFwiIFwiO1xuZXhwb3J0IGNvbnN0IENMQVNTID0gXCJjbGFzc1wiO1xuZXhwb3J0IGNvbnN0IFdJRFRIID0gXCJ3aWR0aFwiO1xuZXhwb3J0IGNvbnN0IEJMT0NLID0gXCJibG9ja1wiO1xuZXhwb3J0IGNvbnN0IEhFSUdIVCA9IFwiaGVpZ2h0XCI7XG5leHBvcnQgY29uc3QgT0JKRUNUID0gXCJvYmplY3RcIjtcbmV4cG9ydCBjb25zdCBTVFJJTkcgPSBcInN0cmluZ1wiO1xuZXhwb3J0IGNvbnN0IERJU1BMQVkgPSBcImRpc3BsYXlcIjtcbmV4cG9ydCBjb25zdCBCT09MRUFOID0gXCJib29sZWFuXCI7XG5leHBvcnQgY29uc3QgRElTQUJMRUQgPSBcImRpc2FibGVkXCI7XG5leHBvcnQgY29uc3QgRlVOQ1RJT04gPSBcImZ1bmN0aW9uXCI7XG5leHBvcnQgY29uc3QgV0lMRENBUkQgPSBcIipcIjtcbmV4cG9ydCBjb25zdCBIVE1MX0ZPUiA9IFwiaHRtbEZvclwiO1xuZXhwb3J0IGNvbnN0IFRFWFRfSFRNTCA9IFwidGV4dC9odG1sXCI7XG5leHBvcnQgY29uc3QgVU5ERUZJTkVEID0gJ3VuZGVmaW5lZCc7XG5leHBvcnQgY29uc3QgQ0xBU1NfTkFNRSA9IFwiY2xhc3NOYW1lXCI7XG5leHBvcnQgY29uc3QgQUJPVVRfQkxBTksgPSBcImFib3V0OmJsYW5rXCI7XG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbmV4cG9ydCBjb25zdCBTVkdfTkFNRVNQQUNFX1VSSSA9IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjtcbmV4cG9ydCBjb25zdCBERUZBVUxUX1BST1BFUlRJRVMgPSBcImRlZmF1bHRQcm9wZXJ0aWVzXCI7XG5leHBvcnQgY29uc3QgSUdOT1JFRF9QUk9QRVJUSUVTID0gXCJpZ25vcmVkUHJvcGVydGllc1wiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBCT09MRUFOIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZSh0YXJnZXQsIHNvdXJjZSA9IHt9KSB7XG4gIHRhcmdldCA9IHsgIC8vL1xuICAgIC4uLnRhcmdldFxuICB9O1xuXG4gIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXMoc291cmNlKTsgIC8vL1xuXG4gIG5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICBjb25zdCB0YXJnZXRWYWx1ZSA9IHRhcmdldFtuYW1lXSxcbiAgICAgICAgICBzb3VyY2VWYWx1ZSA9IHNvdXJjZVtuYW1lXSxcbiAgICAgICAgICB0YXJnZXRIYXNPd25Qcm9wZXJ0eSA9IHRhcmdldC5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcblxuICAgIHRhcmdldFtuYW1lXSA9IHRhcmdldEhhc093blByb3BlcnR5ID9cbiAgICAgICAgICAgICAgICAgICAgIGNvbWJpbmVWYWx1ZXModGFyZ2V0VmFsdWUsIHNvdXJjZVZhbHVlKSA6XG4gICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVZhbHVlOyAvLy9cbiAgfSk7XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBydW5lKHRhcmdldCwgbmFtZXMgPSBbXSkge1xuICB0YXJnZXQgPSB7ICAvLy9cbiAgICAuLi50YXJnZXRcbiAgfTtcblxuICBuYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0SGFzT3duUHJvcGVydHkgPSB0YXJnZXQuaGFzT3duUHJvcGVydHkobmFtZSk7XG5cbiAgICBpZiAodGFyZ2V0SGFzT3duUHJvcGVydHkpIHtcbiAgICAgIGRlbGV0ZSB0YXJnZXRbbmFtZV07XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBjb21iaW5lVmFsdWVzKHRhcmdldFZhbHVlLCBzb3VyY2VWYWx1ZSkge1xuICBjb25zdCB0YXJnZXRWYWx1ZUJvb2xlYW4gPSBpc1ZhbHVlQm9vbGVhbih0YXJnZXRWYWx1ZSksXG4gICAgICAgIHNvdXJjZVZhbHVlQm9vbGVhbiA9IGlzVmFsdWVCb29sZWFuKHNvdXJjZVZhbHVlKSxcbiAgICAgICAgY29tYmluZWRWYWx1ZSA9ICh0YXJnZXRWYWx1ZUJvb2xlYW4gJiYgc291cmNlVmFsdWVCb29sZWFuKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFZhbHVlIDogLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7dGFyZ2V0VmFsdWV9ICR7c291cmNlVmFsdWV9YDtcblxuICByZXR1cm4gY29tYmluZWRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gaXNWYWx1ZUJvb2xlYW4odmFsdWUpIHtcbiAgY29uc3QgdmFsdWVCb29sZWFuID0gKHR5cGVvZiB2YWx1ZSA9PT0gQk9PTEVBTik7XG5cbiAgcmV0dXJuIHZhbHVlQm9vbGVhbjtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGZpcnN0KGFycmF5KSB7IHJldHVybiBhcnJheVswXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gcHVzaChhcnJheTEsIGFycmF5MikgeyBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShhcnJheTEsIGFycmF5Mik7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGF1Z21lbnQoYXJyYXkxLCBhcnJheTIsIHRlc3QpIHtcbiAgYXJyYXkxID0gWyAuLi5hcnJheTEgXTsgLy8vXG5cbiAgYXJyYXkyLmZvckVhY2goKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gdGVzdChlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICBhcnJheTEucHVzaChlbGVtZW50KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBhcnJheTE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuKGFycmF5KSB7XG4gIHJldHVybiBhcnJheS5yZWR1Y2UoKGFycmF5LCBlbGVtZW50KSA9PiB7XG4gICAgYXJyYXkgPSBhcnJheS5jb25jYXQoZWxlbWVudCk7ICAvLy9cblxuICAgIHJldHVybiBhcnJheTtcbiAgfSwgW10pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3VhcmFudGVlKGFycmF5T3JFbGVtZW50KSB7XG4gIGFycmF5T3JFbGVtZW50ID0gYXJyYXlPckVsZW1lbnQgfHwgW107XG5cbiAgcmV0dXJuIChhcnJheU9yRWxlbWVudCBpbnN0YW5jZW9mIEFycmF5KSA/XG4gICAgICAgICAgICBhcnJheU9yRWxlbWVudCA6XG4gICAgICAgICAgICAgIFthcnJheU9yRWxlbWVudF07XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IERBU0ggfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjYW1lbENhc2VUb1NuYWtlQ2FzZShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC8oW0EtWl0pL2csIChtYXRjaCwgY2hhcmFjdGVyKSA9PiB7XG4gICAgY29uc3QgdXBwZXJDYXNlQ2hhcmFjdGVyID0gY2hhcmFjdGVyLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgc25ha2VDYXNlQ2hhcmFjdGVycyA9IGAke0RBU0h9JHt1cHBlckNhc2VDaGFyYWN0ZXJ9YDtcblxuICAgIHJldHVybiBzbmFrZUNhc2VDaGFyYWN0ZXJzO1xuICB9KTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzU1ZHVGFnTmFtZSh0YWdOYW1lKSB7XG4gIHJldHVybiBzdmdUYWdOYW1lcy5pbmNsdWRlcyh0YWdOYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU1ZHQXR0cmlidXRlTmFtZShhdHRyaWJ1dGVOYW1lKSB7XG4gIHJldHVybiBzdmdBdHRyaWJ1dGVOYW1lcy5pbmNsdWRlcyhhdHRyaWJ1dGVOYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSFRNTEF0dHJpYnV0ZU5hbWUoYXR0cmlidXRlTmFtZSkge1xuICByZXR1cm4gaHRtbEF0dHJpYnV0ZU5hbWVzLmluY2x1ZGVzKGF0dHJpYnV0ZU5hbWUpO1xufVxuXG5jb25zdCBzdmdUYWdOYW1lcyA9IFtcbiAgICAgICAgXCJhbHRHbHlwaFwiLCBcImFuaW1hdGVcIiwgXCJhbmltYXRlQ29sb3JcIiwgXCJhbmltYXRlTW90aW9uXCIsIFwiYW5pbWF0ZVRyYW5zZm9ybVwiLCBcImFuaW1hdGlvblwiLCBcImF1ZGlvXCIsXG4gICAgICAgIFwiY2lyY2xlXCIsIFwiY2xpcFBhdGhcIiwgXCJjb2xvci1wcm9maWxlXCIsIFwiY3Vyc29yXCIsXG4gICAgICAgIFwiZGVmc1wiLCBcImRlc2NcIiwgXCJkaXNjYXJkXCIsXG4gICAgICAgIFwiZWxsaXBzZVwiLFxuICAgICAgICBcImZlQmxlbmRcIiwgXCJmZUNvbG9yTWF0cml4XCIsIFwiZmVDb21wb25lbnRUcmFuc2ZlclwiLCBcImZlQ29tcG9zaXRlXCIsIFwiZmVDb252b2x2ZU1hdHJpeFwiLCBcImZlRGlmZnVzZUxpZ2h0aW5nXCIsIFwiZmVEaXNwbGFjZW1lbnRNYXBcIiwgXCJmZURpc3RhbnRMaWdodFwiLCBcImZlRHJvcFNoYWRvd1wiLCBcImZlRmxvb2RcIiwgXCJmZUZ1bmNBXCIsIFwiZmVGdW5jQlwiLCBcImZlRnVuY0dcIiwgXCJmZUZ1bmNSXCIsIFwiZmVHYXVzc2lhbkJsdXJcIiwgXCJmZUltYWdlXCIsIFwiZmVNZXJnZVwiLCBcImZlTWVyZ2VOb2RlXCIsIFwiZmVNb3JwaG9sb2d5XCIsIFwiZmVPZmZzZXRcIiwgXCJmZVBvaW50TGlnaHRcIiwgXCJmZVNwZWN1bGFyTGlnaHRpbmdcIiwgXCJmZVNwb3RMaWdodFwiLCBcImZlVGlsZVwiLCBcImZlVHVyYnVsZW5jZVwiLCBcImZpbHRlclwiLCBcImZvbnRcIiwgXCJmb250LWZhY2VcIiwgXCJmb250LWZhY2UtZm9ybWF0XCIsIFwiZm9udC1mYWNlLW5hbWVcIiwgXCJmb250LWZhY2UtdXJpXCIsIFwiZm9yZWlnbk9iamVjdFwiLFxuICAgICAgICBcImdcIiwgXCJnbHlwaFwiLCBcImdseXBoUmVmXCIsXG4gICAgICAgIFwiaGFuZGxlclwiLCBcImhhdGNoXCIsIFwiaGF0Y2hwYXRoXCIsIFwiaGtlcm5cIixcbiAgICAgICAgXCJpbWFnZVwiLCBcImxpbmVcIiwgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICBcImxpc3RlbmVyXCIsXG4gICAgICAgIFwibWFya2VyXCIsIFwibWFza1wiLCBcIm1lc2hcIiwgXCJtZXNoZ3JhZGllbnRcIiwgXCJtZXNocGF0Y2hcIiwgXCJtZXNocm93XCIsIFwibWV0YWRhdGFcIiwgXCJtaXNzaW5nLWdseXBoXCIsIFwibXBhdGhcIixcbiAgICAgICAgXCJwYXRoXCIsIFwicGF0dGVyblwiLCBcInBvbHlnb25cIiwgXCJwb2x5bGluZVwiLCBcInByZWZldGNoXCIsXG4gICAgICAgIFwicmFkaWFsR3JhZGllbnRcIiwgXCJyZWN0XCIsXG4gICAgICAgIFwic2NyaXB0XCIsIFwic2V0XCIsIFwic29saWRjb2xvclwiLCBcInN0b3BcIiwgXCJzdHlsZVwiLCBcInN2Z1wiLCBcInN3aXRjaFwiLCBcInN5bWJvbFwiLFxuICAgICAgICBcInRicmVha1wiLCBcInRleHRcIiwgXCJ0ZXh0QXJlYVwiLCBcInRleHRQYXRoXCIsIFwidGl0bGVcIiwgXCJ0cmVmXCIsIFwidHNwYW5cIixcbiAgICAgICAgXCJ1bmtub3duXCIsIFwidXNlXCIsXG4gICAgICAgIFwidmlkZW9cIiwgXCJ2aWV3XCIsIFwidmtlcm5cIlxuICAgICAgXSxcbiAgICAgIHN2Z0F0dHJpYnV0ZU5hbWVzID0gW1xuICAgICAgICBcImFjY2VudC1oZWlnaHRcIiwgXCJhY2N1bXVsYXRlXCIsIFwiYWRkaXRpdmVcIiwgXCJhbGlnbm1lbnQtYmFzZWxpbmVcIiwgXCJhbHBoYWJldGljXCIsIFwiYW1wbGl0dWRlXCIsIFwiYXJhYmljLWZvcm1cIiwgXCJhc2NlbnRcIiwgXCJhdHRyaWJ1dGVOYW1lXCIsIFwiYXR0cmlidXRlVHlwZVwiLCBcImF6aW11dGhcIixcbiAgICAgICAgXCJiYW5kd2lkdGhcIiwgXCJiYXNlRnJlcXVlbmN5XCIsIFwiYmFzZVByb2ZpbGVcIiwgXCJiYXNlbGluZS1zaGlmdFwiLCBcImJib3hcIiwgXCJiZWdpblwiLCBcImJpYXNcIiwgXCJieVwiLFxuICAgICAgICBcImNhbGNNb2RlXCIsIFwiY2FwLWhlaWdodFwiLCBcImNsaXBcIiwgXCJjbGFzc05hbWVcIiwgXCJjbGlwLXBhdGhcIiwgXCJjbGlwLXJ1bGVcIiwgXCJjbGlwUGF0aFVuaXRzXCIsIFwiY29sb3JcIiwgXCJjb2xvci1pbnRlcnBvbGF0aW9uXCIsIFwiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzXCIsIFwiY29sb3ItcHJvZmlsZVwiLCBcImNvbG9yLXJlbmRlcmluZ1wiLCBcImNvbnRlbnRTY3JpcHRUeXBlXCIsIFwiY29udGVudFN0eWxlVHlwZVwiLCBcImNyb3Nzb3JpZ2luXCIsIFwiY3Vyc29yXCIsIFwiY3hcIiwgXCJjeVwiLFxuICAgICAgICBcImRcIiwgXCJkZWZhdWx0QWN0aW9uXCIsIFwiZGVzY2VudFwiLCBcImRpZmZ1c2VDb25zdGFudFwiLCBcImRpcmVjdGlvblwiLCBcImRpc3BsYXlcIiwgXCJkaXZpc29yXCIsIFwiZG9taW5hbnQtYmFzZWxpbmVcIiwgXCJkb3dubG9hZFwiLCBcImR1clwiLCBcImR4XCIsIFwiZHlcIixcbiAgICAgICAgXCJlZGdlTW9kZVwiLCBcImVkaXRhYmxlXCIsIFwiZWxldmF0aW9uXCIsIFwiZW5hYmxlLWJhY2tncm91bmRcIiwgXCJlbmRcIiwgXCJldmVudFwiLCBcImV4cG9uZW50XCIsIFwiZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZFwiLFxuICAgICAgICBcImZpbGxcIiwgXCJmaWxsLW9wYWNpdHlcIiwgXCJmaWxsLXJ1bGVcIiwgXCJmaWx0ZXJcIiwgXCJmaWx0ZXJSZXNcIiwgXCJmaWx0ZXJVbml0c1wiLCBcImZsb29kLWNvbG9yXCIsIFwiZmxvb2Qtb3BhY2l0eVwiLCBcImZvY3VzSGlnaGxpZ2h0XCIsIFwiZm9jdXNhYmxlXCIsIFwiZm9udC1mYW1pbHlcIiwgXCJmb250LXNpemVcIiwgXCJmb250LXNpemUtYWRqdXN0XCIsIFwiZm9udC1zdHJldGNoXCIsIFwiZm9udC1zdHlsZVwiLCBcImZvbnQtdmFyaWFudFwiLCBcImZvbnQtd2VpZ2h0XCIsIFwiZm9ybWF0XCIsIFwiZnJcIiwgXCJmcm9tXCIsIFwiZnhcIiwgXCJmeVwiLFxuICAgICAgICBcImcxXCIsIFwiZzJcIiwgXCJnbHlwaC1uYW1lXCIsIFwiZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbFwiLCBcImdseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsXCIsIFwiZ2x5cGhSZWZcIiwgXCJncmFkaWVudFRyYW5zZm9ybVwiLCBcImdyYWRpZW50VW5pdHNcIixcbiAgICAgICAgXCJoYW5kbGVyXCIsIFwiaGFuZ2luZ1wiLCBcImhhdGNoQ29udGVudFVuaXRzXCIsIFwiaGF0Y2hVbml0c1wiLCBcImhlaWdodFwiLCBcImhvcml6LWFkdi14XCIsIFwiaG9yaXotb3JpZ2luLXhcIiwgXCJob3Jpei1vcmlnaW4teVwiLCBcImhyZWZcIiwgXCJocmVmbGFuZ1wiLFxuICAgICAgICBcImlkXCIsIFwiaWRlb2dyYXBoaWNcIiwgXCJpbWFnZS1yZW5kZXJpbmdcIiwgXCJpblwiLCBcImluMlwiLCBcImluaXRpYWxWaXNpYmlsaXR5XCIsIFwiaW50ZXJjZXB0XCIsXG4gICAgICAgIFwia1wiLCBcImsxXCIsIFwiazJcIiwgXCJrM1wiLCBcIms0XCIsIFwia2VybmVsTWF0cml4XCIsIFwia2VybmVsVW5pdExlbmd0aFwiLCBcImtlcm5pbmdcIiwgXCJrZXlQb2ludHNcIiwgXCJrZXlTcGxpbmVzXCIsIFwia2V5VGltZXNcIixcbiAgICAgICAgXCJsZW5ndGhBZGp1c3RcIiwgXCJsZXR0ZXItc3BhY2luZ1wiLCBcImxpZ2h0aW5nLWNvbG9yXCIsIFwibGltaXRpbmdDb25lQW5nbGVcIiwgXCJsb2NhbFwiLFxuICAgICAgICBcIm1hcmtlci1lbmRcIiwgXCJtYXJrZXItbWlkXCIsIFwibWFya2VyLXN0YXJ0XCIsIFwibWFya2VySGVpZ2h0XCIsIFwibWFya2VyVW5pdHNcIiwgXCJtYXJrZXJXaWR0aFwiLCBcIm1hc2tcIiwgXCJtYXNrQ29udGVudFVuaXRzXCIsIFwibWFza1VuaXRzXCIsIFwibWF0aGVtYXRpY2FsXCIsIFwibWF4XCIsIFwibWVkaWFcIiwgXCJtZWRpYUNoYXJhY3RlckVuY29kaW5nXCIsIFwibWVkaWFDb250ZW50RW5jb2RpbmdzXCIsIFwibWVkaWFTaXplXCIsIFwibWVkaWFUaW1lXCIsIFwibWV0aG9kXCIsIFwibWluXCIsIFwibW9kZVwiLFxuICAgICAgICBcIm5hbWVcIiwgXCJuYXYtZG93blwiLCBcIm5hdi1kb3duLWxlZnRcIiwgXCJuYXYtZG93bi1yaWdodFwiLCBcIm5hdi1sZWZ0XCIsIFwibmF2LW5leHRcIiwgXCJuYXYtcHJldlwiLCBcIm5hdi1yaWdodFwiLCBcIm5hdi11cFwiLCBcIm5hdi11cC1sZWZ0XCIsIFwibmF2LXVwLXJpZ2h0XCIsIFwibnVtT2N0YXZlc1wiLFxuICAgICAgICBcIm9ic2VydmVyXCIsIFwib2Zmc2V0XCIsIFwib3BhY2l0eVwiLCBcIm9wZXJhdG9yXCIsIFwib3JkZXJcIiwgXCJvcmllbnRcIiwgXCJvcmllbnRhdGlvblwiLCBcIm9yaWdpblwiLCBcIm92ZXJmbG93XCIsIFwib3ZlcmxheVwiLCBcIm92ZXJsaW5lLXBvc2l0aW9uXCIsIFwib3ZlcmxpbmUtdGhpY2tuZXNzXCIsXG4gICAgICAgIFwicGFub3NlLTFcIiwgXCJwYXRoXCIsIFwicGF0aExlbmd0aFwiLCBcInBhdHRlcm5Db250ZW50VW5pdHNcIiwgXCJwYXR0ZXJuVHJhbnNmb3JtXCIsIFwicGF0dGVyblVuaXRzXCIsIFwicGhhc2VcIiwgXCJwaXRjaFwiLCBcInBsYXliYWNrT3JkZXJcIiwgXCJwbGF5YmFja29yZGVyXCIsIFwicG9pbnRlci1ldmVudHNcIiwgXCJwb2ludHNcIiwgXCJwb2ludHNBdFhcIiwgXCJwb2ludHNBdFlcIiwgXCJwb2ludHNBdFpcIiwgXCJwcmVzZXJ2ZUFscGhhXCIsIFwicHJlc2VydmVBc3BlY3RSYXRpb1wiLCBcInByaW1pdGl2ZVVuaXRzXCIsIFwicHJvcGFnYXRlXCIsXG4gICAgICAgIFwiclwiLCBcInJhZGl1c1wiLCBcInJlZlhcIiwgXCJyZWZZXCIsIFwicmVuZGVyaW5nLWludGVudFwiLCBcInJlcGVhdENvdW50XCIsIFwicmVwZWF0RHVyXCIsIFwicmVxdWlyZWRFeHRlbnNpb25zXCIsIFwicmVxdWlyZWRGZWF0dXJlc1wiLCBcInJlcXVpcmVkRm9udHNcIiwgXCJyZXF1aXJlZEZvcm1hdHNcIiwgXCJyZXN0YXJ0XCIsIFwicmVzdWx0XCIsIFwicm90YXRlXCIsIFwicnhcIiwgXCJyeVwiLFxuICAgICAgICBcInNjYWxlXCIsIFwic2VlZFwiLCBcInNoYXBlLXJlbmRlcmluZ1wiLCBcInNpZGVcIiwgXCJzbG9wZVwiLCBcInNuYXBzaG90VGltZVwiLCBcInNwYWNpbmdcIiwgXCJzcGVjdWxhckNvbnN0YW50XCIsIFwic3BlY3VsYXJFeHBvbmVudFwiLCBcInNwcmVhZE1ldGhvZFwiLCBcInNyY1wiLCBcInN0YXJ0T2Zmc2V0XCIsIFwic3RkRGV2aWF0aW9uXCIsIFwic3RlbWhcIiwgXCJzdGVtdlwiLCBcInN0aXRjaFRpbGVzXCIsIFwic3RvcC1jb2xvclwiLCBcInN0b3Atb3BhY2l0eVwiLCBcInN0cmlrZXRocm91Z2gtcG9zaXRpb25cIiwgXCJzdHJpa2V0aHJvdWdoLXRoaWNrbmVzc1wiLCBcInN0cmluZ1wiLCBcInN0cm9rZVwiLCBcInN0cm9rZS1kYXNoYXJyYXlcIiwgXCJzdHJva2UtZGFzaG9mZnNldFwiLCBcInN0cm9rZS1saW5lY2FwXCIsIFwic3Ryb2tlLWxpbmVqb2luXCIsIFwic3Ryb2tlLW1pdGVybGltaXRcIiwgXCJzdHJva2Utb3BhY2l0eVwiLCBcInN0cm9rZS13aWR0aFwiLCBcInN0eWxlXCIsIFwic3VyZmFjZVNjYWxlXCIsIFwic3luY0JlaGF2aW9yXCIsIFwic3luY0JlaGF2aW9yRGVmYXVsdFwiLCBcInN5bmNNYXN0ZXJcIiwgXCJzeW5jVG9sZXJhbmNlXCIsIFwic3luY1RvbGVyYW5jZURlZmF1bHRcIiwgXCJzeXN0ZW1MYW5ndWFnZVwiLFxuICAgICAgICBcInRhYmxlVmFsdWVzXCIsIFwidGFyZ2V0XCIsIFwidGFyZ2V0WFwiLCBcInRhcmdldFlcIiwgXCJ0ZXh0LWFuY2hvclwiLCBcInRleHQtZGVjb3JhdGlvblwiLCBcInRleHQtcmVuZGVyaW5nXCIsIFwidGV4dExlbmd0aFwiLCBcInRpbWVsaW5lQmVnaW5cIiwgXCJ0aW1lbGluZWJlZ2luXCIsIFwidGl0bGVcIiwgXCJ0b1wiLCBcInRyYW5zZm9ybVwiLCBcInRyYW5zZm9ybUJlaGF2aW9yXCIsIFwidHlwZVwiLFxuICAgICAgICBcInUxXCIsIFwidTJcIiwgXCJ1bmRlcmxpbmUtcG9zaXRpb25cIiwgXCJ1bmRlcmxpbmUtdGhpY2tuZXNzXCIsIFwidW5pY29kZVwiLCBcInVuaWNvZGUtYmlkaVwiLCBcInVuaWNvZGUtcmFuZ2VcIiwgXCJ1bml0cy1wZXItZW1cIixcbiAgICAgICAgXCJ2LWFscGhhYmV0aWNcIiwgXCJ2LWhhbmdpbmdcIiwgXCJ2LWlkZW9ncmFwaGljXCIsIFwidi1tYXRoZW1hdGljYWxcIiwgXCJ2YWx1ZXNcIiwgXCJ2ZXJzaW9uXCIsIFwidmVydC1hZHYteVwiLCBcInZlcnQtb3JpZ2luLXhcIiwgXCJ2ZXJ0LW9yaWdpbi15XCIsIFwidmlld0JveFwiLCBcInZpZXdUYXJnZXRcIiwgXCJ2aXNpYmlsaXR5XCIsXG4gICAgICAgIFwid2lkdGhcIiwgXCJ3aWR0aHNcIiwgXCJ3b3JkLXNwYWNpbmdcIiwgXCJ3cml0aW5nLW1vZGVcIixcbiAgICAgICAgXCJ4XCIsIFwieC1oZWlnaHRcIiwgXCJ4MVwiLCBcIngyXCIsIFwieENoYW5uZWxTZWxlY3RvclwiLFxuICAgICAgICBcInlcIiwgXCJ5MVwiLCBcInkyXCIsIFwieUNoYW5uZWxTZWxlY3RvclwiLFxuICAgICAgICBcInpcIiwgXCJ6b29tQW5kUGFuXCJcbiAgICAgIF0sXG4gICAgICBodG1sQXR0cmlidXRlTmFtZXMgPSBbXG4gICAgICAgIFwiYWNjZXB0XCIsIFwiYWNjZXB0Q2hhcnNldFwiLCBcImFjY2Vzc0tleVwiLCBcImFjdGlvblwiLCBcImFsbG93XCIsIFwiYWxsb3dGdWxsU2NyZWVuXCIsIFwiYWxsb3dUcmFuc3BhcmVuY3lcIiwgXCJhbHRcIiwgXCJhc3luY1wiLCBcImF1dG9Db21wbGV0ZVwiLCBcImF1dG9Gb2N1c1wiLCBcImF1dG9QbGF5XCIsXG4gICAgICAgIFwiY2FwdHVyZVwiLCBcImNlbGxQYWRkaW5nXCIsIFwiY2VsbFNwYWNpbmdcIiwgXCJjaGFsbGVuZ2VcIiwgXCJjaGFyU2V0XCIsIFwiY2hlY2tlZFwiLCBcImNpdGVcIiwgXCJjbGFzc0lEXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sU3BhblwiLCBcImNvbHNcIiwgXCJjb250ZW50XCIsIFwiY29udGVudEVkaXRhYmxlXCIsIFwiY29udGV4dE1lbnVcIiwgXCJjb250cm9sc1wiLCBcImNvb3Jkc1wiLCBcImNyb3NzT3JpZ2luXCIsXG4gICAgICAgIFwiZGF0YVwiLCBcImRhdGVUaW1lXCIsIFwiZGVmYXVsdFwiLCBcImRlZmVyXCIsIFwiZGlyXCIsIFwiZGlzYWJsZWRcIiwgXCJkb3dubG9hZFwiLCBcImRyYWdnYWJsZVwiLFxuICAgICAgICBcImVuY1R5cGVcIixcbiAgICAgICAgXCJmb3JtXCIsIFwiZm9ybUFjdGlvblwiLCBcImZvcm1FbmNUeXBlXCIsIFwiZm9ybU1ldGhvZFwiLCBcImZvcm1Ob1ZhbGlkYXRlXCIsIFwiZm9ybVRhcmdldFwiLCBcImZyYW1lQm9yZGVyXCIsXG4gICAgICAgIFwiaGVhZGVyc1wiLCBcImhlaWdodFwiLCBcImhpZGRlblwiLCBcImhpZ2hcIiwgXCJocmVmXCIsIFwiaHJlZkxhbmdcIiwgXCJodG1sRm9yXCIsIFwiaHR0cEVxdWl2XCIsXG4gICAgICAgIFwiaWNvblwiLCBcImlkXCIsIFwiaW5wdXRNb2RlXCIsIFwiaW50ZWdyaXR5XCIsIFwiaXNcIixcbiAgICAgICAgXCJrZXlQYXJhbXNcIiwgXCJrZXlUeXBlXCIsIFwia2luZFwiLFxuICAgICAgICBcImxhYmVsXCIsIFwibGFuZ1wiLCBcImxpc3RcIiwgXCJsb29wXCIsIFwibG93XCIsXG4gICAgICAgIFwibWFuaWZlc3RcIiwgXCJtYXJnaW5IZWlnaHRcIiwgXCJtYXJnaW5XaWR0aFwiLCBcIm1heFwiLCBcIm1heExlbmd0aFwiLCBcIm1lZGlhXCIsIFwibWVkaWFHcm91cFwiLCBcIm1ldGhvZFwiLCBcIm1pblwiLCBcIm1pbkxlbmd0aFwiLCBcIm11bHRpcGxlXCIsIFwibXV0ZWRcIixcbiAgICAgICAgXCJuYW1lXCIsIFwibm9WYWxpZGF0ZVwiLCBcIm5vbmNlXCIsXG4gICAgICAgIFwib3BlblwiLCBcIm9wdGltdW1cIixcbiAgICAgICAgXCJwYXR0ZXJuXCIsIFwicGxhY2Vob2xkZXJcIiwgXCJwb3N0ZXJcIiwgXCJwcmVsb2FkXCIsIFwicHJvZmlsZVwiLFxuICAgICAgICBcInJhZGlvR3JvdXBcIiwgXCJyZWFkT25seVwiLCBcInJlbFwiLCBcInJlcXVpcmVkXCIsIFwicmV2ZXJzZWRcIiwgXCJyb2xlXCIsIFwicm93U3BhblwiLCBcInJvd3NcIixcbiAgICAgICAgXCJzYW5kYm94XCIsIFwic2NvcGVcIiwgXCJzY29wZWRcIiwgXCJzY3JvbGxpbmdcIiwgXCJzZWFtbGVzc1wiLCBcInNlbGVjdGVkXCIsIFwic2hhcGVcIiwgXCJzaXplXCIsIFwic2l6ZXNcIiwgXCJzcGFuXCIsIFwic3BlbGxDaGVja1wiLCBcInNyY1wiLCBcInNyY0RvY1wiLCBcInNyY0xhbmdcIiwgXCJzcmNTZXRcIiwgXCJzdGFydFwiLCBcInN0ZXBcIiwgXCJzdHlsZVwiLCBcInN1bW1hcnlcIixcbiAgICAgICAgXCJ0YWJJbmRleFwiLCBcInRhcmdldFwiLCBcInRpdGxlXCIsIFwidHlwZVwiLFxuICAgICAgICBcInVzZU1hcFwiLFxuICAgICAgICBcInZhbHVlXCIsXG4gICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgXCJ3bW9kZVwiLFxuICAgICAgICBcIndyYXBcIlxuICAgICAgXTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgcHVzaCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IFdJTERDQVJEIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gZWxlbWVudHNGcm9tRE9NRWxlbWVudHMoZG9tRWxlbWVudHMpIHtcbiAgY29uc3QgZG9tRWxlbWVudHNXaXRoRWxlbWVudHMgPSBmaWx0ZXJET01Ob2Rlcyhkb21FbGVtZW50cywgKGRvbUVsZW1lbnQpID0+IHtcbiAgICAgICAgICBpZiAoKGRvbUVsZW1lbnQuX19lbGVtZW50X18pKSB7IC8vL1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgZWxlbWVudHMgPSBkb21FbGVtZW50c1dpdGhFbGVtZW50cy5tYXAoKGRvbUVsZW1lbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9tRWxlbWVudC5fX2VsZW1lbnRfXzsgLy8vXG5cbiAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIGVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNjZW5kYW50RE9NTm9kZXNGcm9tRE9NTm9kZShkb21Ob2RlLCBoZWlnaHQsIGFzY2VuZGFudERPTU5vZGVzID0gW10pIHtcbiAgaWYgKGhlaWdodCA+IDApIHtcbiAgICBjb25zdCBwYXJlbnRET01Ob2RlID0gZG9tTm9kZS5wYXJlbnRFbGVtZW50OyAgLy8vXG5cbiAgICBpZiAocGFyZW50RE9NTm9kZSAhPT0gbnVsbCkge1xuICAgICAgYXNjZW5kYW50RE9NTm9kZXMucHVzaChwYXJlbnRET01Ob2RlKTtcblxuICAgICAgaGVpZ2h0LS07XG5cbiAgICAgIGFzY2VuZGFudERPTU5vZGVzRnJvbURPTU5vZGUocGFyZW50RE9NTm9kZSwgaGVpZ2h0LCBhc2NlbmRhbnRET01Ob2Rlcyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFzY2VuZGFudERPTU5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVzY2VuZGFudERPTU5vZGVzRnJvbURPTU5vZGUoZG9tTm9kZSwgZGVwdGgsIGRlc2NlbmRhbnRET01Ob2RlcyA9IFtdKSB7XG4gIGlmIChkZXB0aCA+IDApIHtcbiAgICBjb25zdCBjaGlsZERPTU5vZGVzID0gZG9tTm9kZS5jaGlsZE5vZGVzOyAgLy8vXG5cbiAgICBwdXNoKGRlc2NlbmRhbnRET01Ob2RlcywgY2hpbGRET01Ob2Rlcyk7XG5cbiAgICBkZXB0aC0tO1xuXG4gICAgY2hpbGRET01Ob2Rlcy5mb3JFYWNoKChjaGlsZERPTU5vZGUpID0+IHtcbiAgICAgIGRlc2NlbmRhbnRET01Ob2Rlc0Zyb21ET01Ob2RlKGNoaWxkRE9NTm9kZSwgZGVwdGgsIGRlc2NlbmRhbnRET01Ob2Rlcyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZGVzY2VuZGFudERPTU5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyRE9NTm9kZXNCeVNlbGVjdG9yKGRvbU5vZGVzLCBzZWxlY3Rvcikge1xuICBjb25zdCBmaWx0ZXJlZERPTU5vZGVzID0gZmlsdGVyRE9NTm9kZXMoZG9tTm9kZXMsIChkb21Ob2RlKSA9PiB7XG4gICAgaWYgKGRvbU5vZGVNYXRjaGVzU2VsZWN0b3IoZG9tTm9kZSwgc2VsZWN0b3IpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBmaWx0ZXJlZERPTU5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZG9tTm9kZU1hdGNoZXNTZWxlY3Rvcihkb21Ob2RlLCBzZWxlY3Rvcikge1xuICBjb25zdCBkb21Ob2RlVHlwZSA9IGRvbU5vZGUubm9kZVR5cGU7IC8vL1xuXG4gIHN3aXRjaCAoZG9tTm9kZVR5cGUpIHtcbiAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOiB7XG4gICAgICBjb25zdCBkb21FbGVtZW50ID0gZG9tTm9kZTsgLy8vXG5cbiAgICAgIHJldHVybiBkb21FbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpO1xuICAgIH1cblxuICAgIGNhc2UgTm9kZS5URVhUX05PREU6IHtcbiAgICAgIGlmIChzZWxlY3RvciA9PT0gV0lMRENBUkQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyRE9NTm9kZXMoZG9tTm9kZXMsIHRlc3QpIHtcbiAgY29uc3QgZmlsdGVyZWRET01Ob2RlcyA9IFtdLFxuICAgICAgICBkb21Ob2Rlc0xlbmd0aCA9IGRvbU5vZGVzLmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZG9tTm9kZXNMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBkb21Ob2RlID0gZG9tTm9kZXNbaW5kZXhdLFxuICAgICAgICAgIHJlc3VsdCA9IHRlc3QoZG9tTm9kZSk7XG5cbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICBmaWx0ZXJlZERPTU5vZGVzLnB1c2goZG9tTm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZpbHRlcmVkRE9NTm9kZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgV0lMRENBUkQgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBkb21Ob2RlTWF0Y2hlc1NlbGVjdG9yLCBlbGVtZW50c0Zyb21ET01FbGVtZW50cywgZmlsdGVyRE9NTm9kZXNCeVNlbGVjdG9yLCBhc2NlbmRhbnRET01Ob2Rlc0Zyb21ET01Ob2RlLCBkZXNjZW5kYW50RE9NTm9kZXNGcm9tRE9NTm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZG9tXCI7XG5cbmZ1bmN0aW9uIGdldFBhcmVudEVsZW1lbnQoc2VsZWN0b3IgPSBXSUxEQ0FSRCkge1xuICBsZXQgcGFyZW50RWxlbWVudCA9IG51bGw7XG5cbiAgY29uc3QgcGFyZW50RE9NRWxlbWVudCA9IHRoaXMuZG9tRWxlbWVudC5wYXJlbnRFbGVtZW50OyAvLy9cblxuICBpZiAocGFyZW50RE9NRWxlbWVudCAhPT0gbnVsbCkge1xuICAgIGlmIChwYXJlbnRET01FbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpKSB7XG4gICAgICBjb25zdCBwYXJlbnRET01FbGVtZW50cyA9IFtcbiAgICAgICAgICAgICAgcGFyZW50RE9NRWxlbWVudFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHBhcmVudEVsZW1lbnRzID0gZWxlbWVudHNGcm9tRE9NRWxlbWVudHMocGFyZW50RE9NRWxlbWVudHMpLFxuICAgICAgICAgICAgZmlyc3RQYXJlbnRFbGVtZW50ID0gZmlyc3QocGFyZW50RWxlbWVudHMpO1xuXG4gICAgICBwYXJlbnRFbGVtZW50ID0gZmlyc3RQYXJlbnRFbGVtZW50IHx8IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcmVudEVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGdldENoaWxkRWxlbWVudHMoc2VsZWN0b3IgPSBXSUxEQ0FSRCkge1xuICBjb25zdCBjaGlsZERPTU5vZGVzID0gdGhpcy5kb21FbGVtZW50LmNoaWxkTm9kZXMsIC8vL1xuICAgICAgICBjaGlsZERPTUVsZW1lbnRzID0gZmlsdGVyRE9NTm9kZXNCeVNlbGVjdG9yKGNoaWxkRE9NTm9kZXMsIHNlbGVjdG9yKSxcbiAgICAgICAgY2hpbGRFbGVtZW50cyA9IGVsZW1lbnRzRnJvbURPTUVsZW1lbnRzKGNoaWxkRE9NRWxlbWVudHMpO1xuXG4gIHJldHVybiBjaGlsZEVsZW1lbnRzO1xufVxuXG5mdW5jdGlvbiBnZXRBc2NlbmRhbnRFbGVtZW50cyhzZWxlY3RvciA9IFdJTERDQVJELCBtYXhpbXVtSGVpZ2h0ID0gSW5maW5pdHkpIHtcbiAgY29uc3QgaGVpZ2h0ID0gbWF4aW11bUhlaWdodCwgLy8vXG4gICAgICAgIGRvbU5vZGUgPSB0aGlzLmRvbUVsZW1lbnQsICAvLy9cbiAgICAgICAgYXNjZW5kYW50RE9NTm9kZXMgPSBhc2NlbmRhbnRET01Ob2Rlc0Zyb21ET01Ob2RlKGRvbU5vZGUsIGhlaWdodCksXG4gICAgICAgIGFzY2VuZGFudERPTUVsZW1lbnRzID0gZmlsdGVyRE9NTm9kZXNCeVNlbGVjdG9yKGFzY2VuZGFudERPTU5vZGVzLCBzZWxlY3RvciksXG4gICAgICAgIGFzY2VuZGFudEVsZW1lbnRzID0gZWxlbWVudHNGcm9tRE9NRWxlbWVudHMoYXNjZW5kYW50RE9NRWxlbWVudHMpO1xuXG4gIHJldHVybiBhc2NlbmRhbnRFbGVtZW50cztcbn1cblxuZnVuY3Rpb24gZ2V0RGVzY2VuZGFudEVsZW1lbnRzKHNlbGVjdG9yID0gV0lMRENBUkQsIG1heGltdW1EZXB0aCA9IEluZmluaXR5KSB7XG4gIGNvbnN0IGRlcHRoID0gbWF4aW11bURlcHRoLCAvLy9cbiAgICAgICAgZG9tTm9kZSA9IHRoaXMuZG9tRWxlbWVudCwgIC8vL1xuICAgICAgICBkZXNjZW5kYW50RE9NTm9kZXMgPSBkZXNjZW5kYW50RE9NTm9kZXNGcm9tRE9NTm9kZShkb21Ob2RlLCBkZXB0aCksXG4gICAgICAgIGRlc2NlbmRhbnRET01FbGVtZW50cyA9IGZpbHRlckRPTU5vZGVzQnlTZWxlY3RvcihkZXNjZW5kYW50RE9NTm9kZXMsIHNlbGVjdG9yKSxcbiAgICAgICAgZGVzY2VuZGFudEVsZW1lbnRzID0gZWxlbWVudHNGcm9tRE9NRWxlbWVudHMoZGVzY2VuZGFudERPTUVsZW1lbnRzKTtcblxuICByZXR1cm4gZGVzY2VuZGFudEVsZW1lbnRzO1xufVxuXG5mdW5jdGlvbiBnZXROZXh0U2libGluZ0VsZW1lbnQoc2VsZWN0b3IgPSBXSUxEQ0FSRCkge1xuICBsZXQgbmV4dFNpYmxpbmdFbGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBuZXh0U2libGluZ0RPTU5vZGUgPSB0aGlzLmRvbUVsZW1lbnQubmV4dFNpYmxpbmc7IC8vL1xuXG4gIGlmICgobmV4dFNpYmxpbmdET01Ob2RlICE9PSBudWxsKSAmJiBkb21Ob2RlTWF0Y2hlc1NlbGVjdG9yKG5leHRTaWJsaW5nRE9NTm9kZSwgc2VsZWN0b3IpKSB7XG4gICAgbmV4dFNpYmxpbmdFbGVtZW50ID0gbmV4dFNpYmxpbmdET01Ob2RlLl9fZWxlbWVudF9fIHx8IG51bGw7XG4gIH1cblxuICByZXR1cm4gbmV4dFNpYmxpbmdFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBnZXRQcmV2aW91c1NpYmxpbmdFbGVtZW50KHNlbGVjdG9yID0gV0lMRENBUkQpIHtcbiAgbGV0IHByZXZpb3VzU2libGluZ0VsZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHByZXZpb3VzU2libGluZ0RPTU5vZGUgPSB0aGlzLmRvbUVsZW1lbnQucHJldmlvdXNTaWJsaW5nOyAgLy8vXG5cbiAgaWYgKChwcmV2aW91c1NpYmxpbmdET01Ob2RlICE9PSBudWxsKSAmJiBkb21Ob2RlTWF0Y2hlc1NlbGVjdG9yKHByZXZpb3VzU2libGluZ0RPTU5vZGUsIHNlbGVjdG9yKSkge1xuICAgIHByZXZpb3VzU2libGluZ0VsZW1lbnQgPSBwcmV2aW91c1NpYmxpbmdET01Ob2RlLl9fZWxlbWVudF9fIHx8IG51bGw7XG4gIH1cblxuICByZXR1cm4gcHJldmlvdXNTaWJsaW5nRWxlbWVudDtcbn1cblxuY29uc3QgZWxlbWVudE1peGlucyA9IHtcbiAgZ2V0UGFyZW50RWxlbWVudCxcbiAgZ2V0Q2hpbGRFbGVtZW50cyxcbiAgZ2V0QXNjZW5kYW50RWxlbWVudHMsXG4gIGdldERlc2NlbmRhbnRFbGVtZW50cyxcbiAgZ2V0TmV4dFNpYmxpbmdFbGVtZW50LFxuICBnZXRQcmV2aW91c1NpYmxpbmdFbGVtZW50XG59O1xuXG5leHBvcnQgZGVmYXVsdCBlbGVtZW50TWl4aW5zO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgT2Zmc2V0IGZyb20gXCIuL29mZnNldFwiO1xuaW1wb3J0IEJvdW5kcyBmcm9tIFwiLi9ib3VuZHNcIjtcbmltcG9ydCBlbGVtZW50TWl4aW5zIGZyb20gXCIuL21peGlucy9lbGVtZW50XCI7XG5cbmNsYXNzIFRleHRFbGVtZW50IHtcbiAgY29uc3RydWN0b3IodGV4dCkge1xuICAgIHRoaXMuZG9tRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpOyAvLy9cblxuICAgIHRoaXMuZG9tRWxlbWVudC5fX2VsZW1lbnRfXyA9IHRoaXM7IC8vL1xuICB9XG5cbiAgZ2V0RE9NRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5kb21FbGVtZW50O1xuICB9XG5cbiAgZ2V0VGV4dCgpIHtcbiAgICBjb25zdCBub2RlVmFsdWUgPSB0aGlzLmRvbUVsZW1lbnQubm9kZVZhbHVlLFxuICAgICAgICAgIHRleHQgPSBub2RlVmFsdWU7IC8vL1xuXG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cblxuICBzZXRUZXh0KHRleHQpIHtcbiAgICBjb25zdCBub2RlVmFsdWUgPSB0ZXh0OyAvLy9cblxuICAgIHRoaXMuZG9tRWxlbWVudC5ub2RlVmFsdWUgPSBub2RlVmFsdWU7XG4gIH1cblxuICBnZXRPZmZzZXQoKSB7XG4gICAgY29uc3QgdG9wID0gdGhpcy5kb21FbGVtZW50Lm9mZnNldFRvcCwgIC8vL1xuICAgICAgICAgIGxlZnQgPSB0aGlzLmRvbUVsZW1lbnQub2Zmc2V0TGVmdCwgIC8vL1xuICAgICAgICAgIG9mZnNldCA9IG5ldyBPZmZzZXQodG9wLCBsZWZ0KTtcblxuICAgIHJldHVybiBvZmZzZXQ7XG4gIH1cblxuICBnZXRCb3VuZHMoKSB7XG4gICAgY29uc3QgYm91bmRpbmdDbGllbnRSZWN0ID0gdGhpcy5kb21FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgICAgICAgIGJvdW5kcyA9IEJvdW5kcy5mcm9tQm91bmRpbmdDbGllbnRSZWN0KGJvdW5kaW5nQ2xpZW50UmVjdCk7XG5cbiAgICByZXR1cm4gYm91bmRzO1xuICB9XG5cbiAgZ2V0V2lkdGgoKSB7XG4gICAgY29uc3QgY2xpZW50V2lkdGggPSB0aGlzLmRvbUVsZW1lbnQuY2xpZW50V2lkdGgsXG4gICAgICAgICAgd2lkdGggPSBjbGllbnRXaWR0aDsgIC8vL1xuXG4gICAgcmV0dXJuIHdpZHRoO1xuICB9XG5cbiAgZ2V0SGVpZ2h0KCkge1xuICAgIGNvbnN0IGNsaWVudEhlaWdodCA9IHRoaXMuZG9tRWxlbWVudC5jbGllbnRIZWlnaHQsXG4gICAgICAgICAgaGVpZ2h0ID0gY2xpZW50SGVpZ2h0OyAgLy8vXG5cbiAgICByZXR1cm4gaGVpZ2h0O1xuICB9XG5cbiAgcHJlcGVuZFRvKHBhcmVudEVsZW1lbnQpIHsgcGFyZW50RWxlbWVudC5wcmVwZW5kKHRoaXMpOyB9XG5cbiAgYXBwZW5kVG8ocGFyZW50RWxlbWVudCkgeyBwYXJlbnRFbGVtZW50LmFwcGVuZCh0aGlzKTsgfVxuXG4gIGFkZFRvKHBhcmVudEVsZW1lbnQpIHsgcGFyZW50RWxlbWVudC5hZGQodGhpcyk7IH1cblxuICByZW1vdmVGcm9tKHBhcmVudEVsZW1lbnQpIHsgcGFyZW50RWxlbWVudC5yZW1vdmUodGhpcyk7IH1cblxuICBpbnNlcnRCZWZvcmUoc2libGluZ0VsZW1lbnQpIHtcbiAgICBjb25zdCBwYXJlbnRET01Ob2RlID0gc2libGluZ0VsZW1lbnQuZG9tRWxlbWVudC5wYXJlbnROb2RlLCAvLy9cbiAgICAgICAgICBzaWJsaW5nRE9NRWxlbWVudCA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQ7ICAvLy9cblxuICAgIHBhcmVudERPTU5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuZG9tRWxlbWVudCwgc2libGluZ0RPTUVsZW1lbnQpO1xuICB9XG5cbiAgaW5zZXJ0QWZ0ZXIoc2libGluZ0VsZW1lbnQpIHtcbiAgICBjb25zdCBwYXJlbnRET01Ob2RlID0gc2libGluZ0VsZW1lbnQuZG9tRWxlbWVudC5wYXJlbnROb2RlLCAvLy9cbiAgICAgICAgICBzaWJsaW5nRE9NRWxlbWVudCA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQ7ICAvLy9cblxuICAgIHBhcmVudERPTU5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuZG9tRWxlbWVudCwgc2libGluZ0RPTUVsZW1lbnQubmV4dFNpYmxpbmcpOyAgLy8vXG4gIH1cblxuICByZW1vdmUoKSB7XG4gICAgdGhpcy5kb21FbGVtZW50LnJlbW92ZSgpO1xuICB9XG59XG5cbk9iamVjdC5hc3NpZ24oVGV4dEVsZW1lbnQucHJvdG90eXBlLCBlbGVtZW50TWl4aW5zKTtcblxuZXhwb3J0IGRlZmF1bHQgVGV4dEVsZW1lbnQ7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXh0RWxlbWVudCBmcm9tIFwiLi4vdGV4dEVsZW1lbnRcIjtcblxuaW1wb3J0IHsgU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRmFsc2V5RWxlbWVudHMoZWxlbWVudHMpIHtcbiAgZWxlbWVudHMgPSBlbGVtZW50cy5yZWR1Y2UoKGVsZW1lbnRzLCBlbGVtZW50KSA9PiB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnRzO1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIGVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVN0cmluZ3NXaXRoVGV4dEVsZW1lbnRzKGVsZW1lbnRzKSB7XG4gIGVsZW1lbnRzID0gZWxlbWVudHMubWFwKChlbGVtZW50KSA9PiB7ICAvLy9cbiAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT09IFNUUklORykge1xuICAgICAgY29uc3QgdGV4dCA9IGVsZW1lbnQsICAvLy9cbiAgICAgICAgICAgIHRleHRFbGVtZW50ID0gbmV3IFRleHRFbGVtZW50KHRleHQpO1xuXG4gICAgICBlbGVtZW50ID0gdGV4dEVsZW1lbnQ7IC8vL1xuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50O1xuICB9KTtcblxuICByZXR1cm4gZWxlbWVudHM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNvbWJpbmUsIHBydW5lIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9vYmplY3RcIjtcbmltcG9ydCB7IGZpcnN0LCBndWFyYW50ZWUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBjYW1lbENhc2VUb1NuYWtlQ2FzZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgeyBpc0hUTUxBdHRyaWJ1dGVOYW1lLCBpc1NWR0F0dHJpYnV0ZU5hbWUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL25hbWVcIjtcbmltcG9ydCB7IHJlbW92ZUZhbHNleUVsZW1lbnRzLCByZXBsYWNlU3RyaW5nc1dpdGhUZXh0RWxlbWVudHMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBGT1IsIENMQVNTLCBPQkpFQ1QsIEhUTUxfRk9SLCBDTEFTU19OQU1FLCBCT09MRUFOLCBGVU5DVElPTiwgU1ZHX05BTUVTUEFDRV9VUkkgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmZ1bmN0aW9uIGFwcGx5UHJvcGVydGllcyhwcm9wZXJ0aWVzLCBkZWZhdWx0UHJvcGVydGllcywgaWdub3JlZFByb3BlcnRpZXMpIHtcbiAgdGhpcy5wcm9wZXJ0aWVzID0gY29tYmluZShwcm9wZXJ0aWVzLCBkZWZhdWx0UHJvcGVydGllcyk7XG5cbiAgcHJvcGVydGllcyA9IHBydW5lKHRoaXMucHJvcGVydGllcywgaWdub3JlZFByb3BlcnRpZXMpOyAvLy9cblxuICBjb25zdCBuYW1lc3BhY2VVUkkgPSB0aGlzLmRvbUVsZW1lbnQubmFtZXNwYWNlVVJJLFxuICAgICAgICBzdmcgPSAobmFtZXNwYWNlVVJJID09PSBTVkdfTkFNRVNQQUNFX1VSSSksIC8vL1xuICAgICAgICBwcm9wZXJ0aWVzS2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLFxuICAgICAgICBuYW1lcyA9IHByb3BlcnRpZXNLZXlzOyAgLy8vPVxuXG4gIG5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IHByb3BlcnRpZXNbbmFtZV0sXG4gICAgICAgICAgbmFtZUhhbmRsZXJOYW1lID0gaXNOYW1lSGFuZGxlck5hbWUobmFtZSksXG4gICAgICAgICAgbmFtZUN1c3RvbUhhbmRsZXJOYW1lID0gaXNOYW1lQ3VzdG9tSGFuZGxlck5hbWUobmFtZSk7XG5cbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIC8vL1xuICAgIH0gZWxzZSBpZiAobmFtZUhhbmRsZXJOYW1lKSB7XG4gICAgICBhZGRIYW5kbGVyKHRoaXMsIG5hbWUsIHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKG5hbWVDdXN0b21IYW5kbGVyTmFtZSkge1xuICAgICAgYWRkQ3VzdG9tSGFuZGxlcih0aGlzLCBuYW1lLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5hbWVBdHRyaWJ1dGVOYW1lID0gaXNOYW1lQXR0cmlidXRlTmFtZShuYW1lLCBzdmcpO1xuXG4gICAgICBpZiAobmFtZUF0dHJpYnV0ZU5hbWUpIHtcbiAgICAgICAgYWRkQXR0cmlidXRlKHRoaXMsIG5hbWUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGNoaWxkRWxlbWVudHMgPSBjaGlsZEVsZW1lbnRzRnJvbUVsZW1lbnQodGhpcykgfHwgcHJvcGVydGllcy5jaGlsZEVsZW1lbnRzLCAgLy8vXG4gICAgICAgIGNvbnRleHQgPSB7fTtcblxuICBjaGlsZEVsZW1lbnRzLmZvckVhY2goKGNoaWxkRWxlbWVudCkgPT4ge1xuICAgIHVwZGF0ZUNvbnRleHQoY2hpbGRFbGVtZW50LCBjb250ZXh0KTtcblxuICAgIHRoaXMuYWRkKGNoaWxkRWxlbWVudCk7XG4gIH0pO1xuXG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIGdldFByb3BlcnRpZXMoKSB7XG4gIHJldHVybiB0aGlzLnByb3BlcnRpZXM7XG59XG5cbmZ1bmN0aW9uIGdldENvbnRleHQoKSB7XG4gIHJldHVybiB0aGlzLmNvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIGFzc2lnbkNvbnRleHQobmFtZXMsIHRoZW5EZWxldGUpIHtcbiAgY29uc3QgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICBpZiAoYXJndW1lbnRzTGVuZ3RoID09PSAxKSB7XG4gICAgY29uc3QgZmlyc3RBcmd1bWVudCA9IGZpcnN0KGFyZ3VtZW50cyk7XG5cbiAgICBpZiAodHlwZW9mIGZpcnN0QXJndW1lbnQgPT09IEJPT0xFQU4pIHtcbiAgICAgIG5hbWVzID0gT2JqZWN0LmtleXModGhpcy5jb250ZXh0KTtcblxuICAgICAgdGhlbkRlbGV0ZSA9IGZpcnN0QXJndW1lbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoZW5EZWxldGUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChhcmd1bWVudHNMZW5ndGggPT09IDApIHtcbiAgICBuYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMuY29udGV4dCk7XG5cbiAgICB0aGVuRGVsZXRlID0gdHJ1ZTtcbiAgfVxuXG4gIG5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY29udGV4dFtuYW1lXSxcbiAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSBuYW1lLCAgLy8vXG4gICAgICAgICAgZGVzY3JpcHRvciA9IHtcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICAgIH07XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTtcblxuICAgIGlmICh0aGVuRGVsZXRlKSB7XG4gICAgICBkZWxldGUgdGhpcy5jb250ZXh0W25hbWVdO1xuICAgIH1cbiAgfSwgW10pO1xufVxuXG5jb25zdCBqc3hNaXhpbnMgPSB7XG4gIGFwcGx5UHJvcGVydGllcyxcbiAgZ2V0UHJvcGVydGllcyxcbiAgZ2V0Q29udGV4dCxcbiAgYXNzaWduQ29udGV4dFxufTtcblxuZXhwb3J0IGRlZmF1bHQganN4TWl4aW5zO1xuXG5mdW5jdGlvbiBjaGlsZEVsZW1lbnRzRnJvbUVsZW1lbnQoZWxlbWVudCkge1xuICBsZXQgY2hpbGRFbGVtZW50cyA9IG51bGw7XG5cbiAgaWYgKHR5cGVvZiBlbGVtZW50LmNoaWxkRWxlbWVudHMgPT09IEZVTkNUSU9OKSB7XG4gICAgY2hpbGRFbGVtZW50cyA9IGVsZW1lbnQuY2hpbGRFbGVtZW50cy5jYWxsKGVsZW1lbnQpO1xuXG4gICAgY2hpbGRFbGVtZW50cyA9IGd1YXJhbnRlZShjaGlsZEVsZW1lbnRzKTtcblxuICAgIGNoaWxkRWxlbWVudHMgPSByZW1vdmVGYWxzZXlFbGVtZW50cyhjaGlsZEVsZW1lbnRzKTtcblxuICAgIGNoaWxkRWxlbWVudHMgPSByZXBsYWNlU3RyaW5nc1dpdGhUZXh0RWxlbWVudHMoY2hpbGRFbGVtZW50cyk7XG4gIH1cblxuICByZXR1cm4gY2hpbGRFbGVtZW50cztcbn1cblxuZnVuY3Rpb24gdXBkYXRlQ29udGV4dChjaGlsZEVsZW1lbnQsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyZW50Q29udGV4dCA9ICh0eXBlb2YgY2hpbGRFbGVtZW50LnBhcmVudENvbnRleHQgPT09IEZVTkNUSU9OKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWxlbWVudC5wYXJlbnRDb250ZXh0KCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWxlbWVudC5jb250ZXh0OyAvLy9cblxuICBPYmplY3QuYXNzaWduKGNvbnRleHQsIHBhcmVudENvbnRleHQpO1xufVxuXG5mdW5jdGlvbiBhZGRIYW5kbGVyKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IG5hbWUuc3Vic3RyaW5nKDIpLnRvTG93ZXJDYXNlKCksIC8vL1xuICAgICAgICBoYW5kbGVyID0gdmFsdWU7ICAvLy9cblxuICBlbGVtZW50Lm9uRXZlbnQoZXZlbnRUeXBlLCBoYW5kbGVyKTtcbn1cblxuZnVuY3Rpb24gYWRkQ3VzdG9tSGFuZGxlcihlbGVtZW50LCBuYW1lLCB2YWx1ZSkge1xuICBjb25zdCBjdXN0b21FdmVudFR5cGUgPSBjYW1lbENhc2VUb1NuYWtlQ2FzZShuYW1lKS5yZXBsYWNlKC9vbi1jdXN0b20tLywgXCJcIiksXG4gICAgICAgIGN1c3RvbUhhbmRsZXIgPSB2YWx1ZTsgIC8vL1xuXG4gIGVsZW1lbnQub25DdXN0b21FdmVudChjdXN0b21FdmVudFR5cGUsIGN1c3RvbUhhbmRsZXIpO1xufVxuXG5mdW5jdGlvbiBhZGRBdHRyaWJ1dGUoZWxlbWVudCwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKG5hbWUgPT09IENMQVNTX05BTUUpIHtcbiAgICBuYW1lID0gQ0xBU1M7XG4gIH1cblxuICBpZiAobmFtZSA9PT0gSFRNTF9GT1IpIHtcbiAgICBuYW1lID0gRk9SO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gT0JKRUNUKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTtcblxuICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBlbGVtZW50LmRvbUVsZW1lbnRbbmFtZV1ba2V5XSA9IHZhbHVlW2tleV07XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBCT09MRUFOKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB2YWx1ZSA9IG5hbWU7IC8vL1xuXG4gICAgICBlbGVtZW50LmFkZEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGVsZW1lbnQuYWRkQXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc05hbWVIYW5kbGVyTmFtZShuYW1lKSB7XG4gIGNvbnN0IG5hbWVIYW5kbGVyTmFtZSA9ICAvXm9uKD8hQ3VzdG9tKS8udGVzdChuYW1lKTsgIC8vL1xuXG4gIHJldHVybiBuYW1lSGFuZGxlck5hbWU7XG59XG5cbmZ1bmN0aW9uIGlzTmFtZUF0dHJpYnV0ZU5hbWUobmFtZSwgc3ZnKSB7XG4gIGNvbnN0IG5hbWVBdHRyaWJ1dGVOYW1lID0gc3ZnID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTVkdBdHRyaWJ1dGVOYW1lKG5hbWUpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0hUTUxBdHRyaWJ1dGVOYW1lKG5hbWUpO1xuXG4gIHJldHVybiBuYW1lQXR0cmlidXRlTmFtZTtcbn1cblxuZnVuY3Rpb24gaXNOYW1lQ3VzdG9tSGFuZGxlck5hbWUobmFtZSkge1xuICBjb25zdCBuYW1lQ3VzdG9tSGFuZGxlck5hbWUgPSAvXm9uQ3VzdG9tLy50ZXN0KG5hbWUpO1xuXG4gIHJldHVybiBuYW1lQ3VzdG9tSGFuZGxlck5hbWU7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBDVVRfRVZFTlRfVFlQRSA9IFwiY3V0XCI7XG5leHBvcnQgY29uc3QgQ09QWV9FVkVOVF9UWVBFID0gXCJjb3B5XCI7XG5leHBvcnQgY29uc3QgQkxVUl9FVkVOVF9UWVBFID0gXCJibHVyXCI7XG5leHBvcnQgY29uc3QgUEFTVEVfRVZFTlRfVFlQRSA9IFwicGFzdGVcIjtcbmV4cG9ydCBjb25zdCBXSEVFTF9FVkVOVF9UWVBFID0gXCJ3aGVlbFwiO1xuZXhwb3J0IGNvbnN0IElOUFVUX0VWRU5UX1RZUEUgPSBcImlucHV0XCI7XG5leHBvcnQgY29uc3QgRk9DVVNfRVZFTlRfVFlQRSA9IFwiZm9jdXNcIjtcbmV4cG9ydCBjb25zdCBDTElDS19FVkVOVF9UWVBFID0gXCJjbGlja1wiO1xuZXhwb3J0IGNvbnN0IEtFWVVQX0VWRU5UX1RZUEUgPSBcImtleXVwXCI7XG5leHBvcnQgY29uc3QgU0VMRUNUX0VWRU5UX1RZUEUgPSBcInNlbGVjdFwiO1xuZXhwb3J0IGNvbnN0IENIQU5HRV9FVkVOVF9UWVBFID0gXCJjaGFuZ2VcIjtcbmV4cG9ydCBjb25zdCBSRVNJWkVfRVZFTlRfVFlQRSA9IFwicmVzaXplXCI7XG5leHBvcnQgY29uc3QgU0NST0xMX0VWRU5UX1RZUEUgPSBcInNjcm9sbFwiO1xuZXhwb3J0IGNvbnN0IEtFWURPV05fRVZFTlRfVFlQRSA9IFwia2V5ZG93blwiO1xuZXhwb3J0IGNvbnN0IE1PVVNFVVBfRVZFTlRfVFlQRSA9IFwibW91c2V1cFwiO1xuZXhwb3J0IGNvbnN0IEFVWENMSUNLX0VWRU5UX1RZUEUgPSBcImF1eGNsaWNrXCI7XG5leHBvcnQgY29uc3QgTU9VU0VPVVRfRVZFTlRfVFlQRSA9IFwibW91c2VvdXRcIjtcbmV4cG9ydCBjb25zdCBEQkxDTElDS19FVkVOVF9UWVBFID0gXCJkYmxjbGlja1wiO1xuZXhwb3J0IGNvbnN0IE1PVVNFT1ZFUl9FVkVOVF9UWVBFID0gXCJtb3VzZW92ZXJcIjtcbmV4cG9ydCBjb25zdCBNT1VTRURPV05fRVZFTlRfVFlQRSA9IFwibW91c2Vkb3duXCI7XG5leHBvcnQgY29uc3QgTU9VU0VNT1ZFX0VWRU5UX1RZUEUgPSBcIm1vdXNlbW92ZVwiO1xuZXhwb3J0IGNvbnN0IENPTlRFWFRNRU5VX0VWRU5UX1RZUEUgPSBcImNvbnRleHRtZW51XCI7XG5leHBvcnQgY29uc3QgU0VMRUNUSU9OQ0hBTkdFX0VWRU5UX1RZUEUgPSBcInNlbGVjdGlvbmNoYW5nZVwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIENVVF9FVkVOVF9UWVBFLFxuICBDT1BZX0VWRU5UX1RZUEUsXG4gIEJMVVJfRVZFTlRfVFlQRSxcbiAgUEFTVEVfRVZFTlRfVFlQRSxcbiAgV0hFRUxfRVZFTlRfVFlQRSxcbiAgSU5QVVRfRVZFTlRfVFlQRSxcbiAgRk9DVVNfRVZFTlRfVFlQRSxcbiAgQ0xJQ0tfRVZFTlRfVFlQRSxcbiAgS0VZVVBfRVZFTlRfVFlQRSxcbiAgU0VMRUNUX0VWRU5UX1RZUEUsXG4gIENIQU5HRV9FVkVOVF9UWVBFLFxuICBSRVNJWkVfRVZFTlRfVFlQRSxcbiAgU0NST0xMX0VWRU5UX1RZUEUsXG4gIEtFWURPV05fRVZFTlRfVFlQRSxcbiAgTU9VU0VVUF9FVkVOVF9UWVBFLFxuICBBVVhDTElDS19FVkVOVF9UWVBFLFxuICBNT1VTRU9VVF9FVkVOVF9UWVBFLFxuICBEQkxDTElDS19FVkVOVF9UWVBFLFxuICBNT1VTRU9WRVJfRVZFTlRfVFlQRSxcbiAgTU9VU0VET1dOX0VWRU5UX1RZUEUsXG4gIE1PVVNFTU9WRV9FVkVOVF9UWVBFLFxuICBDT05URVhUTUVOVV9FVkVOVF9UWVBFLFxuICBTRUxFQ1RJT05DSEFOR0VfRVZFTlRfVFlQRVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgS0VZVVBfRVZFTlRfVFlQRSwgS0VZRE9XTl9FVkVOVF9UWVBFIH0gZnJvbSBcIi4uL2V2ZW50VHlwZXNcIjtcblxuZnVuY3Rpb24gb25LZXlVcChrZXlVcEhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbkV2ZW50KEtFWVVQX0VWRU5UX1RZUEUsIGtleVVwSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmS2V5VXAoa2V5VXBIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmRXZlbnQoS0VZVVBfRVZFTlRfVFlQRSwga2V5VXBIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvbktleURvd24oa2V5RG93bkhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbkV2ZW50KEtFWURPV05fRVZFTlRfVFlQRSwga2V5RG93bkhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZktleURvd24oa2V5RG93bkhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmZFdmVudChLRVlET1dOX0VWRU5UX1RZUEUsIGtleURvd25IYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5jb25zdCBrZXlNaXhpbnMgPSB7XG4gIG9uS2V5VXAsXG4gIG9mZktleVVwLFxuICBvbktleURvd24sXG4gIG9mZktleURvd25cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGtleU1peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQ0xJQ0tfRVZFTlRfVFlQRSwgREJMQ0xJQ0tfRVZFTlRfVFlQRSB9IGZyb20gXCIuLi9ldmVudFR5cGVzXCI7XG5cbmZ1bmN0aW9uIG9uQ2xpY2soY2xpY2tIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub25FdmVudChDTElDS19FVkVOVF9UWVBFLCBjbGlja0hhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZkNsaWNrKGNsaWNrSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZkV2ZW50KENMSUNLX0VWRU5UX1RZUEUsIGNsaWNrSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb25Eb3VibGVDbGljayhjbGlja0hhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbkV2ZW50KERCTENMSUNLX0VWRU5UX1RZUEUsIGNsaWNrSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmRG91YmxlQ2xpY2soY2xpY2tIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmRXZlbnQoREJMQ0xJQ0tfRVZFTlRfVFlQRSwgY2xpY2tIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5jb25zdCBjbGlja01peGlucyA9IHtcbiAgb25DbGljayxcbiAgb2ZmQ2xpY2ssXG4gIG9uRG91YmxlQ2xpY2ssXG4gIG9mZkRvdWJsZUNsaWNrXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGlja01peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gZ2V0U3RhdGUoKSB7XG4gIHJldHVybiB0aGlzLnN0YXRlO1xufVxuXG5mdW5jdGlvbiBzZXRTdGF0ZShzdGF0ZSkge1xuICB0aGlzLnN0YXRlID0gc3RhdGU7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVN0YXRlKHN0YXRlKSB7XG4gICh0aGlzLnN0YXRlID09PSB1bmRlZmluZWQpID9cbiAgICB0aGlzLnN0YXRlID0gc3RhdGUgOlxuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLnN0YXRlLCBzdGF0ZSk7XG59XG5cbmNvbnN0IHN0YXRlTWl4aW5zID0ge1xuICBnZXRTdGF0ZSxcbiAgc2V0U3RhdGUsXG4gIHVwZGF0ZVN0YXRlXG59O1xuXG5leHBvcnQgZGVmYXVsdCBzdGF0ZU1peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUkVTSVpFX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi4vZXZlbnRUeXBlc1wiO1xuaW1wb3J0IHsgT0JKRUNULCBURVhUX0hUTUwsIEFCT1VUX0JMQU5LIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gb25SZXNpemUocmVzaXplSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uRXZlbnQoUkVTSVpFX0VWRU5UX1RZUEUsIHJlc2l6ZUhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBvZmZSZXNpemUocmVzaXplSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZkV2ZW50KFJFU0laRV9FVkVOVF9UWVBFLCByZXNpemVIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBhZGRSZXNpemVPYmplY3QoKSB7XG4gIGNvbnN0IHJlc2l6ZU9iamVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoT0JKRUNUKSxcbiAgICAgICAgdHlwZSA9IFRFWFRfSFRNTCwgIC8vL1xuICAgICAgICBkYXRhID0gQUJPVVRfQkxBTkssIC8vL1xuICAgICAgICBzdHlsZSA9IGBkaXNwbGF5OiBibG9jazsgXG4gICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsgXG4gICAgICAgICAgICAgICAgIHRvcDogMDsgXG4gICAgICAgICAgICAgICAgIGxlZnQ6IDA7IFxuICAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7IFxuICAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTsgXG4gICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47IFxuICAgICAgICAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsgXG4gICAgICAgICAgICAgICAgIHotaW5kZXg6IC0xO2A7XG5cbiAgT2JqZWN0LmFzc2lnbihyZXNpemVPYmplY3QsIHtcbiAgICB0eXBlLFxuICAgIGRhdGFcbiAgfSk7XG5cbiAgcmVzaXplT2JqZWN0LnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIHN0eWxlKTtcblxuICB0aGlzLl9fcmVzaXplT2JqZWN0X18gPSByZXNpemVPYmplY3Q7IC8vL1xuXG4gIHJlc2l6ZU9iamVjdC5vbmxvYWQgPSAoKSA9PiB7XG4gICAgcmVzaXplT2JqZWN0TG9hZEhhbmRsZXIodGhpcyk7XG4gIH07XG5cbiAgdGhpcy5kb21FbGVtZW50LmFwcGVuZENoaWxkKHJlc2l6ZU9iamVjdCk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVJlc2l6ZU9iamVjdCgpIHtcbiAgY29uc3QgcmVzaXplT2JqZWN0ID0gdGhpcy5fX3Jlc2l6ZU9iamVjdF9fLCAvLy9cbiAgICAgICAgb2JqZWN0V2luZG93ID0gcmVzaXplT2JqZWN0LmNvbnRlbnREb2N1bWVudC5kZWZhdWx0VmlldzsgIC8vL1xuXG4gIG9iamVjdFdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFJFU0laRV9FVkVOVF9UWVBFLCByZXNpemVFdmVudExpc3RlbmVyKTtcblxuICB0aGlzLmRvbUVsZW1lbnQucmVtb3ZlQ2hpbGQocmVzaXplT2JqZWN0KTtcblxuICBkZWxldGUgdGhpcy5fX3Jlc2l6ZU9iamVjdF9fO1xufVxuXG5jb25zdCByZXNpemVNaXhpbnMgPSB7XG4gIG9uUmVzaXplLFxuICBvZmZSZXNpemUsXG4gIGFkZFJlc2l6ZU9iamVjdCxcbiAgcmVtb3ZlUmVzaXplT2JqZWN0XG59O1xuXG5leHBvcnQgZGVmYXVsdCByZXNpemVNaXhpbnM7XG5cbmZ1bmN0aW9uIHJlc2l6ZU9iamVjdExvYWRIYW5kbGVyKGVsZW1lbnQpIHtcbiAgY29uc3QgcmVzaXplT2JqZWN0ID0gZWxlbWVudC5fX3Jlc2l6ZU9iamVjdF9fLFxuICAgICAgICByZXNpemVPYmplY3RXaW5kb3cgPSByZXNpemVPYmplY3QuY29udGVudERvY3VtZW50LmRlZmF1bHRWaWV3OyAgLy8vXG5cbiAgcmVzaXplT2JqZWN0V2luZG93LmFkZEV2ZW50TGlzdGVuZXIoUkVTSVpFX0VWRU5UX1RZUEUsIChldmVudCkgPT4ge1xuICAgIGNvbnN0IHJlc2l6ZUV2ZW50TGlzdGVuZXJzID0gZWxlbWVudC5maW5kRXZlbnRMaXN0ZW5lcnMoUkVTSVpFX0VWRU5UX1RZUEUpO1xuXG4gICAgcmVzaXplRXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgocmVzaXplRXZlbnRMaXN0ZW5lcikgPT4ge1xuICAgICAgcmVzaXplRXZlbnRMaXN0ZW5lcihldmVudCk7XG4gICAgfSk7XG4gIH0pO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBTUEFDRSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IFJFU0laRV9FVkVOVF9UWVBFIH0gZnJvbSBcIi4uL2V2ZW50VHlwZXNcIjtcbmltcG9ydCB7IHJlbW92ZVJlc2l6ZU9iamVjdCB9IGZyb20gXCIuLi9taXhpbnMvcmVzaXplXCI7XG5cbmZ1bmN0aW9uIG9uRXZlbnQoZXZlbnRUeXBlcywgaGFuZGxlciwgZWxlbWVudCA9IHRoaXMpIHtcbiAgZXZlbnRUeXBlcyA9IGV2ZW50VHlwZXMuc3BsaXQoU1BBQ0UpOyAvLy9cblxuICBldmVudFR5cGVzLmZvckVhY2goKGV2ZW50VHlwZSkgPT4ge1xuICAgIGlmIChldmVudFR5cGUgPT09IFJFU0laRV9FVkVOVF9UWVBFKSB7XG4gICAgICBjb25zdCByZXNpemVFdmVudExpc3RlbmVycyA9IHRoaXMuZmluZEV2ZW50TGlzdGVuZXJzKFJFU0laRV9FVkVOVF9UWVBFKSxcbiAgICAgICAgICAgIHJlc2l6ZUV2ZW50TGlzdGVuZXJzTGVuZ3RoID0gcmVzaXplRXZlbnRMaXN0ZW5lcnMubGVuZ3RoO1xuXG4gICAgICBpZiAocmVzaXplRXZlbnRMaXN0ZW5lcnNMZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5hZGRSZXNpemVPYmplY3QoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBldmVudExpc3RlbmVyID0gdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG5cbiAgICB0aGlzLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGV2ZW50TGlzdGVuZXIpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gb2ZmRXZlbnQoZXZlbnRUeXBlcywgaGFuZGxlciwgZWxlbWVudCA9IHRoaXMpIHtcbiAgZXZlbnRUeXBlcyA9IGV2ZW50VHlwZXMuc3BsaXQoU1BBQ0UpOyAvLy9cblxuICBldmVudFR5cGVzLmZvckVhY2goKGV2ZW50VHlwZSkgPT4ge1xuICAgIGNvbnN0IGV2ZW50TGlzdGVuZXIgPSB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcblxuICAgIHRoaXMuZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgZXZlbnRMaXN0ZW5lcik7XG5cbiAgICBpZiAoZXZlbnRUeXBlID09PSBSRVNJWkVfRVZFTlRfVFlQRSkge1xuICAgICAgY29uc3QgcmVzaXplRXZlbnRMaXN0ZW5lcnMgPSB0aGlzLmZpbmRFdmVudExpc3RlbmVycyhSRVNJWkVfRVZFTlRfVFlQRSksXG4gICAgICAgICAgICByZXNpemVFdmVudExpc3RlbmVyc0xlbmd0aCA9IHJlc2l6ZUV2ZW50TGlzdGVuZXJzLmxlbmd0aDtcblxuICAgICAgaWYgKHJlc2l6ZUV2ZW50TGlzdGVuZXJzTGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlUmVzaXplT2JqZWN0KCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRMaXN0ZW5lciA9IHRoaXMuY3JlYXRlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xuXG4gIGlmICghdGhpcy5ldmVudExpc3RlbmVycykge1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMgPSBbXTtcbiAgfVxuXG4gIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaChldmVudExpc3RlbmVyKTtcblxuICByZXR1cm4gZXZlbnRMaXN0ZW5lcjtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRMaXN0ZW5lciA9IHRoaXMuZmluZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KSxcbiAgICAgICAgaW5kZXggPSB0aGlzLmV2ZW50TGlzdGVuZXJzLmluZGV4T2YoZXZlbnRMaXN0ZW5lciksXG4gICAgICAgIHN0YXJ0ID0gaW5kZXgsICAvLy9cbiAgICAgICAgZGVsZXRlQ291bnQgPSAxO1xuXG4gIHRoaXMuZXZlbnRMaXN0ZW5lcnMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCk7XG5cbiAgaWYgKHRoaXMuZXZlbnRMaXN0ZW5lcnMubGVuZ3RoID09PSAwKSB7XG4gICAgZGVsZXRlIHRoaXMuZXZlbnRMaXN0ZW5lcnM7XG4gIH1cblxuICByZXR1cm4gZXZlbnRMaXN0ZW5lcjtcbn1cblxuZnVuY3Rpb24gZmluZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KSB7XG4gIGNvbnN0IGV2ZW50TGlzdGVuZXIgPSB0aGlzLmV2ZW50TGlzdGVuZXJzLmZpbmQoKGV2ZW50TGlzdGVuZXIpID0+IHtcbiAgICBpZiAoKGV2ZW50TGlzdGVuZXIuZWxlbWVudCA9PT0gZWxlbWVudCkgJiYgKGV2ZW50TGlzdGVuZXIuaGFuZGxlciA9PT0gaGFuZGxlcikgJiYgKGV2ZW50TGlzdGVuZXIuZXZlbnRUeXBlID09PSBldmVudFR5cGUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBldmVudExpc3RlbmVyO1xufVxuXG5mdW5jdGlvbiBmaW5kRXZlbnRMaXN0ZW5lcnMoZXZlbnRUeXBlKSB7XG4gIGNvbnN0IGV2ZW50TGlzdGVuZXJzID0gW107XG5cbiAgaWYgKHRoaXMuZXZlbnRMaXN0ZW5lcnMpIHtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLmZvckVhY2goKGV2ZW50TGlzdGVuZXIpID0+IHtcbiAgICAgIGNvbnN0IGZvdW5kID0gKGV2ZW50TGlzdGVuZXIuZXZlbnRUeXBlID09PSBldmVudFR5cGUpO1xuXG4gICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgZXZlbnRMaXN0ZW5lcnMucHVzaChldmVudExpc3RlbmVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBldmVudExpc3RlbmVycztcbn1cblxuZnVuY3Rpb24gY3JlYXRlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgbGV0IGV2ZW50TGlzdGVuZXI7XG5cbiAgY29uc3QgaGFuZGxlckVsZW1lbnQgPSBlbGVtZW50OyAvLy9cblxuICBldmVudExpc3RlbmVyID0gKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXM7IC8vL1xuXG4gICAgaGFuZGxlci5jYWxsKGhhbmRsZXJFbGVtZW50LCBldmVudCwgZWxlbWVudCk7XG4gIH07XG5cbiAgT2JqZWN0LmFzc2lnbihldmVudExpc3RlbmVyLCB7XG4gICAgZWxlbWVudCxcbiAgICBoYW5kbGVyLFxuICAgIGV2ZW50VHlwZVxuICB9KTtcblxuICByZXR1cm4gZXZlbnRMaXN0ZW5lcjtcbn1cblxuY29uc3QgZXZlbnRNaXhpbnMgPSB7XG4gIG9uRXZlbnQsXG4gIG9mZkV2ZW50LFxuICBhZGRFdmVudExpc3RlbmVyLFxuICByZW1vdmVFdmVudExpc3RlbmVyLFxuICBmaW5kRXZlbnRMaXN0ZW5lcixcbiAgZmluZEV2ZW50TGlzdGVuZXJzLFxuICBjcmVhdGVFdmVudExpc3RlbmVyXG59O1xuXG5leHBvcnQgZGVmYXVsdCBldmVudE1peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgTU9VU0VVUF9FVkVOVF9UWVBFLFxuICAgICAgICAgTU9VU0VPVVRfRVZFTlRfVFlQRSxcbiAgICAgICAgIE1PVVNFRE9XTl9FVkVOVF9UWVBFLFxuICAgICAgICAgTU9VU0VPVkVSX0VWRU5UX1RZUEUsXG4gICAgICAgICBNT1VTRU1PVkVfRVZFTlRfVFlQRSB9IGZyb20gXCIuLi9ldmVudFR5cGVzXCI7XG5cbmZ1bmN0aW9uIG9uTW91c2VVcChtb3VzZVVwSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uRXZlbnQoTU9VU0VVUF9FVkVOVF9UWVBFLCBtb3VzZVVwSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmTW91c2VVcChtb3VzZVVwSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZkV2ZW50KE1PVVNFVVBfRVZFTlRfVFlQRSwgbW91c2VVcEhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9uTW91c2VPdXQobW91c2VPdXRIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub25FdmVudChNT1VTRU9VVF9FVkVOVF9UWVBFLCBtb3VzZU91dEhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZk1vdXNlT3V0KG1vdXNlT3V0SGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZkV2ZW50KE1PVVNFT1VUX0VWRU5UX1RZUEUsIG1vdXNlT3V0SGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb25Nb3VzZURvd24obW91c2VEb3duSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uRXZlbnQoTU9VU0VET1dOX0VWRU5UX1RZUEUsIG1vdXNlRG93bkhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZk1vdXNlRG93bihtb3VzZURvd25IYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmRXZlbnQoTU9VU0VET1dOX0VWRU5UX1RZUEUsIG1vdXNlRG93bkhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9uTW91c2VPdmVyKG1vdXNlT3ZlckhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbkV2ZW50KE1PVVNFT1ZFUl9FVkVOVF9UWVBFLCBtb3VzZU92ZXJIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZNb3VzZU92ZXIobW91c2VPdmVySGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZkV2ZW50KE1PVVNFT1ZFUl9FVkVOVF9UWVBFLCBtb3VzZU92ZXJIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvbk1vdXNlTW92ZShtb3VzZU1vdmVIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub25FdmVudChNT1VTRU1PVkVfRVZFTlRfVFlQRSwgbW91c2VNb3ZlSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmTW91c2VNb3ZlKG1vdXNlTW92ZUhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmZFdmVudChNT1VTRU1PVkVfRVZFTlRfVFlQRSwgbW91c2VNb3ZlSGFuZGxlciwgZWxlbWVudCk7IH1cblxuY29uc3QgbW91c2VNaXhpbnMgPSB7XG4gIG9uTW91c2VVcCxcbiAgb2ZmTW91c2VVcCxcbiAgb25Nb3VzZU91dCxcbiAgb2ZmTW91c2VPdXQsXG4gIG9uTW91c2VEb3duLFxuICBvZmZNb3VzZURvd24sXG4gIG9uTW91c2VPdmVyLFxuICBvZmZNb3VzZU92ZXIsXG4gIG9uTW91c2VNb3ZlLFxuICBvZmZNb3VzZU1vdmVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG1vdXNlTWl4aW5zO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBTQ1JPTExfRVZFTlRfVFlQRSB9IGZyb20gXCIuLi9ldmVudFR5cGVzXCI7XG5cbmZ1bmN0aW9uIG9uU2Nyb2xsKHNjcm9sbEhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbkV2ZW50KFNDUk9MTF9FVkVOVF9UWVBFLCBzY3JvbGxIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZTY3JvbGwoc2Nyb2xsSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZkV2ZW50KFNDUk9MTF9FVkVOVF9UWVBFLCBzY3JvbGxIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBnZXRTY3JvbGxUb3AoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuc2Nyb2xsVG9wOyB9XG5cbmZ1bmN0aW9uIGdldFNjcm9sbExlZnQoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuc2Nyb2xsTGVmdDsgfVxuXG5mdW5jdGlvbiBzZXRTY3JvbGxUb3Aoc2Nyb2xsVG9wKSB7IHRoaXMuZG9tRWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7IH1cblxuZnVuY3Rpb24gc2V0U2Nyb2xsTGVmdChzY3JvbGxMZWZ0KSB7IHRoaXMuZG9tRWxlbWVudC5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDsgfVxuXG5jb25zdCBzY3JvbGxNaXhpbnMgPSB7XG4gIG9uU2Nyb2xsLFxuICBvZmZTY3JvbGwsXG4gIGdldFNjcm9sbFRvcCxcbiAgZ2V0U2Nyb2xsTGVmdCxcbiAgc2V0U2Nyb2xsVG9wLFxuICBzZXRTY3JvbGxMZWZ0XG59O1xuXG5leHBvcnQgZGVmYXVsdCBzY3JvbGxNaXhpbnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JFYWNoKGFycmF5LCBvcGVyYXRpb24sIGRvbmUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOyAgLy8vXG5cbiAgbGV0IGNvdW50ID0gLTE7XG5cbiAgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICBjb3VudCsrO1xuXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xuXG4gICAgaWYgKHRlcm1pbmF0ZSkge1xuICAgICAgZG9uZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpbmRleCA9IGNvdW50LCAgLy8vXG4gICAgICAgICAgICBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgICBvcGVyYXRpb24oZWxlbWVudCwgbmV4dCwgZG9uZSwgY29udGV4dCwgaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIG5leHQoKTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgU1BBQ0UgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBmb3JFYWNoIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hc3luY1wiO1xuXG5mdW5jdGlvbiBvbkN1c3RvbUV2ZW50KGN1c3RvbUV2ZW50VHlwZXMsIGN1c3RvbUhhbmRsZXIsIGVsZW1lbnQgPSB0aGlzKSB7XG4gIGN1c3RvbUV2ZW50VHlwZXMgPSBjdXN0b21FdmVudFR5cGVzLnNwbGl0KFNQQUNFKTsgLy8vXG5cbiAgY3VzdG9tRXZlbnRUeXBlcy5mb3JFYWNoKChjdXN0b21FdmVudFR5cGUpID0+IHtcbiAgICB0aGlzLmFkZEN1c3RvbUV2ZW50TGlzdGVuZXIoY3VzdG9tRXZlbnRUeXBlLCBjdXN0b21IYW5kbGVyLCBlbGVtZW50KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG9mZkN1c3RvbUV2ZW50KGN1c3RvbUV2ZW50VHlwZXMsIGN1c3RvbUhhbmRsZXIsIGVsZW1lbnQgPSB0aGlzKSB7XG4gIGN1c3RvbUV2ZW50VHlwZXMgPSBjdXN0b21FdmVudFR5cGVzLnNwbGl0KFNQQUNFKTsgLy8vXG5cbiAgY3VzdG9tRXZlbnRUeXBlcy5mb3JFYWNoKChjdXN0b21FdmVudFR5cGUpID0+IHtcbiAgICB0aGlzLnJlbW92ZUN1c3RvbUV2ZW50TGlzdGVuZXIoY3VzdG9tRXZlbnRUeXBlLCBjdXN0b21IYW5kbGVyLCBlbGVtZW50KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNhbGxDdXN0b21IYW5kbGVycyhjdXN0b21FdmVudFR5cGUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICBjb25zdCBjdXN0b21FdmVudExpc3RlbmVycyA9IHRoaXMuZmluZEN1c3RvbUV2ZW50TGlzdGVuZXJzKGN1c3RvbUV2ZW50VHlwZSk7XG5cbiAgY3VzdG9tRXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoY3VzdG9tRXZlbnRMaXN0ZW5lcikgPT4ge1xuICAgIGNvbnN0IHsgY3VzdG9tSGFuZGxlciwgZWxlbWVudDogY3VzdG9tSGFuZGxlckVsZW1lbnQgfSA9IGN1c3RvbUV2ZW50TGlzdGVuZXIsXG4gICAgICAgICAgZWxlbWVudCA9IHRoaXM7IC8vL1xuXG4gICAgY3VzdG9tSGFuZGxlci5jYWxsKGN1c3RvbUhhbmRsZXJFbGVtZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMsIGVsZW1lbnQpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY2FsbEN1c3RvbUhhbmRsZXJzQXN5bmMoY3VzdG9tRXZlbnRUeXBlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgY29uc3QgY3VzdG9tRXZlbnRMaXN0ZW5lcnMgPSB0aGlzLmZpbmRDdXN0b21FdmVudExpc3RlbmVycyhjdXN0b21FdmVudFR5cGUpLFxuICAgICAgICBkb25lID0gcmVtYWluaW5nQXJndW1lbnRzLnBvcCgpOyAgLy8vXG5cbiAgZm9yRWFjaChjdXN0b21FdmVudExpc3RlbmVycywgKGN1c3RvbUV2ZW50TGlzdGVuZXIsIG5leHQpID0+IHtcbiAgICBjb25zdCB7IGN1c3RvbUhhbmRsZXIsIGVsZW1lbnQ6IGN1c3RvbUhhbmRsZXJFbGVtZW50IH0gPSBjdXN0b21FdmVudExpc3RlbmVyLFxuICAgICAgICAgIGVsZW1lbnQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBkb25lID0gbmV4dDsgIC8vL1xuXG4gICAgY3VzdG9tSGFuZGxlci5jYWxsKGN1c3RvbUhhbmRsZXJFbGVtZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMsIGVsZW1lbnQsIGRvbmUpO1xuICB9LCBkb25lKTtcbn1cblxuZnVuY3Rpb24gYWRkQ3VzdG9tRXZlbnRMaXN0ZW5lcihjdXN0b21FdmVudFR5cGUsIGN1c3RvbUhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgY3VzdG9tRXZlbnRMaXN0ZW5lciA9IHRoaXMuY3JlYXRlQ3VzdG9tRXZlbnRMaXN0ZW5lcihjdXN0b21FdmVudFR5cGUsIGN1c3RvbUhhbmRsZXIsIGVsZW1lbnQpO1xuXG4gIGlmICghdGhpcy5jdXN0b21FdmVudExpc3RlbmVycykge1xuICAgIHRoaXMuY3VzdG9tRXZlbnRMaXN0ZW5lcnMgPSBbXTtcbiAgfVxuXG4gIHRoaXMuY3VzdG9tRXZlbnRMaXN0ZW5lcnMucHVzaChjdXN0b21FdmVudExpc3RlbmVyKTtcblxuICByZXR1cm4gY3VzdG9tRXZlbnRMaXN0ZW5lcjtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ3VzdG9tRXZlbnRMaXN0ZW5lcihjdXN0b21FdmVudFR5cGUsIGN1c3RvbUhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgY3VzdG9tRXZlbnRMaXN0ZW5lciA9IHRoaXMuZmluZEN1c3RvbUV2ZW50TGlzdGVuZXIoY3VzdG9tRXZlbnRUeXBlLCBjdXN0b21IYW5kbGVyLCBlbGVtZW50KSxcbiAgICAgICAgaW5kZXggPSB0aGlzLmN1c3RvbUV2ZW50TGlzdGVuZXJzLmluZGV4T2YoY3VzdG9tRXZlbnRMaXN0ZW5lciksXG4gICAgICAgIHN0YXJ0ID0gaW5kZXgsICAvLy9cbiAgICAgICAgZGVsZXRlQ291bnQgPSAxO1xuXG4gIHRoaXMuY3VzdG9tRXZlbnRMaXN0ZW5lcnMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCk7XG5cbiAgaWYgKHRoaXMuY3VzdG9tRXZlbnRMaXN0ZW5lcnMubGVuZ3RoID09PSAwKSB7XG4gICAgZGVsZXRlIHRoaXMuY3VzdG9tRXZlbnRMaXN0ZW5lcnM7XG4gIH1cblxuICByZXR1cm4gY3VzdG9tRXZlbnRMaXN0ZW5lcjtcbn1cblxuZnVuY3Rpb24gZmluZEN1c3RvbUV2ZW50TGlzdGVuZXIoY3VzdG9tRXZlbnRUeXBlLCBjdXN0b21IYW5kbGVyLCBlbGVtZW50KSB7XG4gIGNvbnN0IGN1c3RvbUV2ZW50TGlzdGVuZXIgPSB0aGlzLmN1c3RvbUV2ZW50TGlzdGVuZXJzLmZpbmQoKGN1c3RvbUV2ZW50TGlzdGVuZXIpID0+IHtcbiAgICBpZiAoKGN1c3RvbUV2ZW50TGlzdGVuZXIuZWxlbWVudCA9PT0gZWxlbWVudCkgJiYgKGN1c3RvbUV2ZW50TGlzdGVuZXIuY3VzdG9tSGFuZGxlciA9PT0gY3VzdG9tSGFuZGxlcikgJiYgKGN1c3RvbUV2ZW50TGlzdGVuZXIuY3VzdG9tRXZlbnRUeXBlID09PSBjdXN0b21FdmVudFR5cGUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBjdXN0b21FdmVudExpc3RlbmVyO1xufVxuXG5mdW5jdGlvbiBmaW5kQ3VzdG9tRXZlbnRMaXN0ZW5lcnMoY3VzdG9tRXZlbnRUeXBlKSB7XG4gIGNvbnN0IGN1c3RvbUV2ZW50TGlzdGVuZXJzID0gW107XG5cbiAgaWYgKHRoaXMuY3VzdG9tRXZlbnRMaXN0ZW5lcnMpIHtcbiAgICB0aGlzLmN1c3RvbUV2ZW50TGlzdGVuZXJzLmZvckVhY2goKGN1c3RvbUV2ZW50TGlzdGVuZXIpID0+IHtcbiAgICAgIGNvbnN0IGZvdW5kID0gKGN1c3RvbUV2ZW50TGlzdGVuZXIuY3VzdG9tRXZlbnRUeXBlID09PSBjdXN0b21FdmVudFR5cGUpO1xuXG4gICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgY3VzdG9tRXZlbnRMaXN0ZW5lcnMucHVzaChjdXN0b21FdmVudExpc3RlbmVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBjdXN0b21FdmVudExpc3RlbmVycztcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ3VzdG9tRXZlbnRMaXN0ZW5lcihjdXN0b21FdmVudFR5cGUsIGN1c3RvbUhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgbGV0IGN1c3RvbUV2ZW50TGlzdGVuZXI7XG5cbiAgY3VzdG9tRXZlbnRMaXN0ZW5lciA9ICgpID0+IHt9OyAvLy9cblxuICBPYmplY3QuYXNzaWduKGN1c3RvbUV2ZW50TGlzdGVuZXIsIHtcbiAgICBlbGVtZW50LFxuICAgIGN1c3RvbUhhbmRsZXIsXG4gICAgY3VzdG9tRXZlbnRUeXBlXG4gIH0pO1xuXG4gIHJldHVybiBjdXN0b21FdmVudExpc3RlbmVyO1xufVxuXG5jb25zdCBjdXN0b21FdmVudE1peGlucyA9IHtcbiAgb25DdXN0b21FdmVudCxcbiAgb2ZmQ3VzdG9tRXZlbnQsXG4gIGNhbGxDdXN0b21IYW5kbGVycyxcbiAgY2FsbEN1c3RvbUhhbmRsZXJzQXN5bmMsXG4gIGFkZEN1c3RvbUV2ZW50TGlzdGVuZXIsXG4gIHJlbW92ZUN1c3RvbUV2ZW50TGlzdGVuZXIsXG4gIGZpbmRDdXN0b21FdmVudExpc3RlbmVyLFxuICBmaW5kQ3VzdG9tRXZlbnRMaXN0ZW5lcnMsXG4gIGNyZWF0ZUN1c3RvbUV2ZW50TGlzdGVuZXJcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGN1c3RvbUV2ZW50TWl4aW5zO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gbW91bnRFbGVtZW50KGVsZW1lbnQpIHtcbiAgY29uc3QgZGVzY2VuZGFudEVsZW1lbnRzID0gZWxlbWVudC5nZXREZXNjZW5kYW50RWxlbWVudHMoKSxcbiAgICAgICAgZWxlbWVudHMgPSBbXG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAuLi5kZXNjZW5kYW50RWxlbWVudHNcbiAgICAgICAgXTtcblxuICBlbGVtZW50cy5yZXZlcnNlKCk7IC8vL1xuXG4gIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICBlbGVtZW50LmRpZE1vdW50ICYmIGVsZW1lbnQuZGlkTW91bnQoKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bm1vdW50RWxlbWVudChlbGVtZW50KSB7XG4gIGNvbnN0IGRlc2NlbmRhbnRFbGVtZW50cyA9IGVsZW1lbnQuZ2V0RGVzY2VuZGFudEVsZW1lbnRzKCksXG4gICAgICAgIGVsZW1lbnRzID0gW1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgLi4uZGVzY2VuZGFudEVsZW1lbnRzXG4gICAgICAgIF07XG5cbiAgZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgIGVsZW1lbnQud2lsbFVubW91bnQgJiYgZWxlbWVudC53aWxsVW5tb3VudCgpO1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBtb3VudEVsZW1lbnQsXG4gIHVubW91bnRFbGVtZW50XG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgT2Zmc2V0IGZyb20gXCIuL29mZnNldFwiO1xuaW1wb3J0IEJvdW5kcyBmcm9tIFwiLi9ib3VuZHNcIjtcbmltcG9ydCBqc3hNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2pzeFwiO1xuaW1wb3J0IGtleU1peGlucyBmcm9tIFwiLi9taXhpbnMva2V5XCI7XG5pbXBvcnQgY2xpY2tNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2NsaWNrXCI7XG5pbXBvcnQgc3RhdGVNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL3N0YXRlXCI7XG5pbXBvcnQgZXZlbnRNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2V2ZW50XCI7XG5pbXBvcnQgbW91c2VNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL21vdXNlXCI7XG5pbXBvcnQgcmVzaXplTWl4aW5zIGZyb20gXCIuL21peGlucy9yZXNpemVcIjtcbmltcG9ydCBzY3JvbGxNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL3Njcm9sbFwiO1xuaW1wb3J0IGVsZW1lbnRNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2VsZW1lbnRcIjtcbmltcG9ydCBjdXN0b21FdmVudE1peGlucyBmcm9tIFwiLi9taXhpbnMvY3VzdG9tRXZlbnRcIjtcblxuaW1wb3J0IHsgY29tYmluZSB9IGZyb20gXCIuL3V0aWxpdGllcy9vYmplY3RcIjtcbmltcG9ydCB7IGlzU1ZHVGFnTmFtZSB9IGZyb20gXCIuL3V0aWxpdGllcy9uYW1lXCI7XG5pbXBvcnQgeyBmaXJzdCwgYXVnbWVudCB9IGZyb20gXCIuL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgbW91bnRFbGVtZW50LCB1bm1vdW50RWxlbWVudCB9IGZyb20gXCIuL3V0aWxpdGllcy9lbGVtZW50XCI7XG5pbXBvcnQgeyBOT05FLFxuICAgICAgICAgQkxPQ0ssXG4gICAgICAgICBXSURUSCxcbiAgICAgICAgIFNUUklORyxcbiAgICAgICAgIEhFSUdIVCxcbiAgICAgICAgIERJU1BMQVksXG4gICAgICAgICBESVNBQkxFRCxcbiAgICAgICAgIEVNUFRZX1NUUklORyxcbiAgICAgICAgIFNWR19OQU1FU1BBQ0VfVVJJLFxuICAgICAgICAgREVGQVVMVF9QUk9QRVJUSUVTLFxuICAgICAgICAgSUdOT1JFRF9QUk9QRVJUSUVTIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmNsYXNzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihzZWxlY3Rvcikge1xuICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgdGhpcy5kb21FbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG5cbiAgICAgIHRoaXMuZG9tRWxlbWVudC5fX2VsZW1lbnRfXyA9IHRoaXM7IC8vL1xuICAgIH1cbiAgfVxuXG4gIGdldERPTUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZG9tRWxlbWVudDtcbiAgfVxuXG4gIGdldE9mZnNldCgpIHtcbiAgICBjb25zdCB0b3AgPSB0aGlzLmRvbUVsZW1lbnQub2Zmc2V0VG9wLCAgLy8vXG4gICAgICAgICAgbGVmdCA9IHRoaXMuZG9tRWxlbWVudC5vZmZzZXRMZWZ0LCAgLy8vXG4gICAgICAgICAgb2Zmc2V0ID0gbmV3IE9mZnNldCh0b3AsIGxlZnQpO1xuXG4gICAgcmV0dXJuIG9mZnNldDtcbiAgfVxuXG4gIGdldEJvdW5kcygpIHtcbiAgICBjb25zdCBib3VuZGluZ0NsaWVudFJlY3QgPSB0aGlzLmRvbUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICAgICAgYm91bmRzID0gQm91bmRzLmZyb21Cb3VuZGluZ0NsaWVudFJlY3QoYm91bmRpbmdDbGllbnRSZWN0KTtcblxuICAgIHJldHVybiBib3VuZHM7XG4gIH1cblxuICBnZXRXaWR0aChpbmNsdWRlQm9yZGVyID0gdHJ1ZSkge1xuICAgIGNvbnN0IHdpZHRoID0gaW5jbHVkZUJvcmRlciA/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZG9tRWxlbWVudC5vZmZzZXRXaWR0aCA6XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5kb21FbGVtZW50LmNsaWVudFdpZHRoO1xuXG4gICAgcmV0dXJuIHdpZHRoO1xuICB9XG5cbiAgc2V0V2lkdGgod2lkdGgpIHtcbiAgICB3aWR0aCA9IGAke3dpZHRofXB4YDsgLy8vXG5cbiAgICB0aGlzLnN0eWxlKFdJRFRILCB3aWR0aCk7XG4gIH1cblxuICBnZXRIZWlnaHQoaW5jbHVkZUJvcmRlciA9IHRydWUpIHtcbiAgICBjb25zdCBoZWlnaHQgPSBpbmNsdWRlQm9yZGVyID9cbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9tRWxlbWVudC5vZmZzZXRIZWlnaHQgOlxuICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvbUVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuXG4gICAgcmV0dXJuIGhlaWdodDtcbiAgfVxuXG4gIHNldEhlaWdodChoZWlnaHQpIHtcbiAgICBoZWlnaHQgPSBgJHtoZWlnaHR9cHhgOyAvLy9cblxuICAgIHRoaXMuc3R5bGUoSEVJR0hULCBoZWlnaHQpO1xuICB9XG5cbiAgaGFzQXR0cmlidXRlKG5hbWUpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5oYXNBdHRyaWJ1dGUobmFtZSk7IH1cblxuICBnZXRBdHRyaWJ1dGUobmFtZSkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LmdldEF0dHJpYnV0ZShuYW1lKTsgfVxuXG4gIHNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkgeyB0aGlzLmRvbUVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTsgfVxuXG4gIGNsZWFyQXR0cmlidXRlKG5hbWUpIHsgdGhpcy5kb21FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShuYW1lKTsgfVxuXG4gIGFkZEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkgeyB0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7IH1cblxuICByZW1vdmVBdHRyaWJ1dGUobmFtZSkgeyB0aGlzLmNsZWFyQXR0cmlidXRlKG5hbWUpOyB9XG5cbiAgc2V0Q2xhc3MoY2xhc3NOYW1lKSB7IHRoaXMuZG9tRWxlbWVudC5jbGFzc05hbWUgPSBjbGFzc05hbWU7IH1cblxuICBhZGRDbGFzcyhjbGFzc05hbWUpIHsgdGhpcy5kb21FbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTsgfVxuXG4gIHJlbW92ZUNsYXNzKGNsYXNzTmFtZSkgeyB0aGlzLmRvbUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUpOyB9XG5cbiAgdG9nZ2xlQ2xhc3MoY2xhc3NOYW1lKSB7IHRoaXMuZG9tRWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKGNsYXNzTmFtZSk7IH1cblxuICBoYXNDbGFzcyhjbGFzc05hbWUpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKTsgfVxuXG4gIGNsZWFyQ2xhc3NlcygpIHsgdGhpcy5kb21FbGVtZW50LmNsYXNzTmFtZSA9IEVNUFRZX1NUUklORzsgfVxuXG4gIHByZXBlbmRUbyhwYXJlbnRFbGVtZW50KSB7IHBhcmVudEVsZW1lbnQucHJlcGVuZCh0aGlzKTsgfVxuXG4gIGFwcGVuZFRvKHBhcmVudEVsZW1lbnQpIHsgcGFyZW50RWxlbWVudC5hcHBlbmQodGhpcyk7IH1cblxuICBhZGRUbyhwYXJlbnRFbGVtZW50KSB7IHBhcmVudEVsZW1lbnQuYWRkKHRoaXMpOyB9XG5cbiAgcmVtb3ZlRnJvbShwYXJlbnRFbGVtZW50KSB7IHBhcmVudEVsZW1lbnQucmVtb3ZlKHRoaXMpOyB9XG5cbiAgaW5zZXJ0QmVmb3JlKHNpYmxpbmdFbGVtZW50KSB7XG4gICAgY29uc3QgcGFyZW50RE9NTm9kZSA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQucGFyZW50Tm9kZSwgLy8vXG4gICAgICAgICAgc2libGluZ0RPTUVsZW1lbnQgPSBzaWJsaW5nRWxlbWVudC5kb21FbGVtZW50OyAgLy8vXG5cbiAgICBwYXJlbnRET01Ob2RlLmluc2VydEJlZm9yZSh0aGlzLmRvbUVsZW1lbnQsIHNpYmxpbmdET01FbGVtZW50KTtcbiAgfVxuXG4gIGluc2VydEFmdGVyKHNpYmxpbmdFbGVtZW50KSB7XG4gICAgY29uc3QgcGFyZW50RE9NTm9kZSA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQucGFyZW50Tm9kZSwgLy8vXG4gICAgICAgICAgc2libGluZ0RPTUVsZW1lbnQgPSBzaWJsaW5nRWxlbWVudC5kb21FbGVtZW50OyAgLy8vXG5cbiAgICBwYXJlbnRET01Ob2RlLmluc2VydEJlZm9yZSh0aGlzLmRvbUVsZW1lbnQsIHNpYmxpbmdET01FbGVtZW50Lm5leHRTaWJsaW5nKTsgIC8vL1xuICB9XG5cbiAgcHJlcGVuZChlbGVtZW50KSB7XG4gICAgY29uc3QgZG9tRWxlbWVudCA9IGVsZW1lbnQuZG9tRWxlbWVudCxcbiAgICAgICAgICBmaXJzdENoaWxkRE9NRWxlbWVudCA9IHRoaXMuZG9tRWxlbWVudC5maXJzdENoaWxkOyAgLy8vXG5cbiAgICB0aGlzLmRvbUVsZW1lbnQuaW5zZXJ0QmVmb3JlKGRvbUVsZW1lbnQsIGZpcnN0Q2hpbGRET01FbGVtZW50KTtcbiAgfVxuXG4gIGFwcGVuZChlbGVtZW50KSB7XG4gICAgY29uc3QgZG9tRWxlbWVudCA9IGVsZW1lbnQuZG9tRWxlbWVudDtcblxuICAgIHRoaXMuZG9tRWxlbWVudC5pbnNlcnRCZWZvcmUoZG9tRWxlbWVudCwgbnVsbCk7IC8vL1xuICB9XG5cbiAgaW5zZXJ0KGVsZW1lbnQpIHsgdGhpcy5hcHBlbmQoZWxlbWVudCk7IH1cblxuICBhZGQoZWxlbWVudCkgeyB0aGlzLmFwcGVuZChlbGVtZW50KTsgfVxuXG4gIHJlbW92ZShlbGVtZW50KSB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGRvbUVsZW1lbnQgPSBlbGVtZW50LmRvbUVsZW1lbnQ7XG5cbiAgICAgIHRoaXMuZG9tRWxlbWVudC5yZW1vdmVDaGlsZChkb21FbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kb21FbGVtZW50LnJlbW92ZSgpO1xuICAgIH1cbiAgfVxuXG4gIG1vdW50QmVmb3JlKHNpYmxpbmdFbGVtZW50KSB7XG4gICAgdGhpcy5pbnNlcnRCZWZvcmUoc2libGluZ0VsZW1lbnQpO1xuXG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXM7IC8vL1xuXG4gICAgbW91bnRFbGVtZW50KGVsZW1lbnQpO1xuICB9XG5cbiAgbW91bnRBZnRlcihzaWJsaW5nRWxlbWVudCkge1xuICAgIHRoaXMuaW5zZXJ0QmVmb3JlKHNpYmxpbmdFbGVtZW50KTtcblxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzOyAvLy9cblxuICAgIG1vdW50RWxlbWVudChlbGVtZW50KTtcbiAgfVxuXG4gIG1vdW50KGVsZW1lbnQpIHtcbiAgICB0aGlzLmFkZChlbGVtZW50KTtcblxuICAgIG1vdW50RWxlbWVudChlbGVtZW50KTtcbiAgfVxuXG4gIHVubW91bnQoZWxlbWVudCkge1xuICAgIHVubW91bnRFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgdGhpcy5yZW1vdmUoZWxlbWVudCk7XG4gIH1cblxuICBzaG93KGRpc3BsYXlTdHlsZSA9IEJMT0NLKSB7IHRoaXMuZGlzcGxheShkaXNwbGF5U3R5bGUpOyB9XG5cbiAgaGlkZSgpIHsgdGhpcy5zdHlsZShESVNQTEFZLCBOT05FKTsgfVxuXG4gIGRpc3BsYXkoZGlzcGxheSkgeyB0aGlzLnN0eWxlKERJU1BMQVksIGRpc3BsYXkpOyB9XG5cbiAgZW5hYmxlKCkgeyB0aGlzLmNsZWFyQXR0cmlidXRlKERJU0FCTEVEKTsgfVxuXG4gIGRpc2FibGUoKSB7IHRoaXMuc2V0QXR0cmlidXRlKERJU0FCTEVELCBESVNBQkxFRCk7IH1cblxuICBpc0VuYWJsZWQoKSB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmlzRGlzYWJsZWQoKSxcbiAgICAgICAgICBlbmFibGVkID0gIWRpc2FibGVkO1xuXG4gICAgcmV0dXJuIGVuYWJsZWQ7XG4gIH1cblxuICBpc0Rpc2FibGVkKCkge1xuICAgIGNvbnN0IGRpc2FibGVkID0gdGhpcy5oYXNBdHRyaWJ1dGUoRElTQUJMRUQpO1xuXG4gICAgcmV0dXJuIGRpc2FibGVkO1xuICB9XG4gIFxuICBpc0Rpc3BsYXllZCgpIHtcbiAgICBjb25zdCBkaXNwbGF5ID0gdGhpcy5jc3MoRElTUExBWSksXG4gICAgICAgICAgZGlzcGxheWVkID0gKGRpc3BsYXkgIT09IE5PTkUpO1xuICAgIFxuICAgIHJldHVybiBkaXNwbGF5ZWQ7XG4gIH1cblxuICBpc1Nob3dpbmcoKSB7XG4gICAgY29uc3QgZGlzcGxheWVkID0gdGhpcy5pc0Rpc3BsYXllZCgpLFxuICAgICAgICAgIHNob3dpbmcgPSBkaXNwbGF5ZWQ7ICAvLy9cblxuICAgIHJldHVybiBzaG93aW5nO1xuICB9XG5cbiAgaXNIaWRkZW4oKSB7XG4gICAgY29uc3QgZGlzcGxheWVkID0gdGhpcy5pc0Rpc3BsYXllZCgpLFxuICAgICAgICAgIGhpZGRlbiA9ICFkaXNwbGF5ZWQ7XG5cbiAgICByZXR1cm4gaGlkZGVuO1xuICB9XG5cbiAgc3R5bGUobmFtZSwgdmFsdWUgPSBudWxsKSB7XG4gICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICB0aGlzLmRvbUVsZW1lbnQuc3R5bGVbbmFtZV0gPSB2YWx1ZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN0eWxlID0gdGhpcy5kb21FbGVtZW50LnN0eWxlW25hbWVdO1xuXG4gICAgcmV0dXJuIHN0eWxlO1xuICB9XG5cbiAgaHRtbChodG1sID0gbnVsbCkge1xuICAgIGlmIChodG1sICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBpbm5lckhUTUwgPSBodG1sOyAvLy9cblxuICAgICAgdGhpcy5kb21FbGVtZW50LmlubmVySFRNTCA9IGlubmVySFRNTFxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW5uZXJIVE1MID0gdGhpcy5kb21FbGVtZW50LmlubmVySFRNTDtcblxuICAgIGh0bWwgPSBpbm5lckhUTUw7IC8vL1xuXG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cblxuICBjc3MoY3NzID0gbnVsbCkge1xuICAgIGlmIChjc3MgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMuZG9tRWxlbWVudCksXG4gICAgICAgICAgICBjc3MgPSB7fTtcblxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNvbXB1dGVkU3R5bGUubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0Q29tcHV0ZWRTdHlsZSA9IGZpcnN0W2NvbXB1dGVkU3R5bGVdLFxuICAgICAgICAgICAgICBuYW1lID0gZmlyc3RDb21wdXRlZFN0eWxlLCAgLy8vXG4gICAgICAgICAgICAgIHZhbHVlID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpOyAvLy9cblxuICAgICAgICBjc3NbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNzcztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNzcyA9PT0gU1RSSU5HKSB7XG4gICAgICBsZXQgbmFtZSA9IGNzczsgLy8vXG5cbiAgICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMuZG9tRWxlbWVudCksXG4gICAgICAgICAgICB2YWx1ZSA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKTsgLy8vXG5cbiAgICAgIGNzcyA9IHZhbHVlOyAgLy8vXG5cbiAgICAgIHJldHVybiBjc3M7XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZXMgPSBPYmplY3Qua2V5cyhjc3MpOyAvLy9cblxuICAgIG5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gY3NzW25hbWVdO1xuXG4gICAgICB0aGlzLnN0eWxlKG5hbWUsIHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuICBcbiAgYmx1cigpIHsgdGhpcy5kb21FbGVtZW50LmJsdXIoKTsgfVxuXG4gIGZvY3VzKCkgeyB0aGlzLmRvbUVsZW1lbnQuZm9jdXMoKTsgfVxuXG4gIGhhc0ZvY3VzKCkge1xuICAgIGNvbnN0IGZvY3VzID0gKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMuZG9tRWxlbWVudCk7ICAvLy9cblxuICAgIHJldHVybiBmb2N1cztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ2xhc3MoQ2xhc3MsIHByb3BlcnRpZXMsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGNvbnN0IHsgdGFnTmFtZSB9ID0gQ2xhc3MsXG4gICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnRGcm9tVGFnTmFtZShDbGFzcywgdGFnTmFtZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSxcbiAgICAgICAgICBkZWZhdWx0UHJvcGVydGllcyA9IGRlZmF1bHRQcm9wZXJ0aWVzRnJvbUNsYXNzKENsYXNzKSxcbiAgICAgICAgICBpZ25vcmVkUHJvcGVydGllcyA9IGlnbm9yZWRQcm9wZXJ0aWVzRnJvbUNsYXNzKENsYXNzKTtcblxuICAgIGVsZW1lbnQuYXBwbHlQcm9wZXJ0aWVzKHByb3BlcnRpZXMsIGRlZmF1bHRQcm9wZXJ0aWVzLCBpZ25vcmVkUHJvcGVydGllcyk7XG5cbiAgICBlbGVtZW50LmluaXRpYWxpc2UgJiYgZWxlbWVudC5pbml0aWFsaXNlKCk7IC8vL1xuXG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVRhZ05hbWUodGFnTmFtZSwgcHJvcGVydGllcywgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgY29uc3QgQ2xhc3MgPSBFbGVtZW50LCAgLy8vXG4gICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnRGcm9tVGFnTmFtZShDbGFzcywgdGFnTmFtZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSxcbiAgICAgICAgICBkZWZhdWx0UHJvcGVydGllcyA9IHt9LCAvLy9cbiAgICAgICAgICBpZ25vcmVkUHJvcGVydGllcyA9IFtdOyAvLy9cblxuICAgIGVsZW1lbnQuYXBwbHlQcm9wZXJ0aWVzKHByb3BlcnRpZXMsIGRlZmF1bHRQcm9wZXJ0aWVzLCBpZ25vcmVkUHJvcGVydGllcyk7XG5cbiAgICBlbGVtZW50LmluaXRpYWxpc2UgJiYgZWxlbWVudC5pbml0aWFsaXNlKCk7IC8vL1xuXG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cbn1cblxuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwganN4TWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIGtleU1peGlucyk7XG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCBjbGlja01peGlucyk7XG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCBzdGF0ZU1peGlucyk7XG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCBldmVudE1peGlucyk7XG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCBtb3VzZU1peGlucyk7XG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCByZXNpemVNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwgc2Nyb2xsTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIGVsZW1lbnRNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwgY3VzdG9tRXZlbnRNaXhpbnMpO1xuXG5leHBvcnQgZGVmYXVsdCBFbGVtZW50O1xuXG5mdW5jdGlvbiBlbGVtZW50RnJvbVRhZ05hbWUoQ2xhc3MsIHRhZ05hbWUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICBjb25zdCBzZWxlY3RvciA9IG51bGwsXG4gICAgICAgIGVsZW1lbnQgPSBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmNhbGwoQ2xhc3MsIG51bGwsIHNlbGVjdG9yLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpKTtcblxuICBlbGVtZW50LmRvbUVsZW1lbnQgPSBpc1NWR1RhZ05hbWUodGFnTmFtZSkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfTkFNRVNQQUNFX1VSSSwgdGFnTmFtZSkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcblxuICBlbGVtZW50LmRvbUVsZW1lbnQuX19lbGVtZW50X18gPSBlbGVtZW50OyAvLy9cblxuICByZXR1cm4gZWxlbWVudDtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdFByb3BlcnRpZXNGcm9tQ2xhc3MoQ2xhc3MsIGRlZmF1bHRQcm9wZXJ0aWVzID0ge30pIHtcbiAgaWYgKENsYXNzLmhhc093blByb3BlcnR5KERFRkFVTFRfUFJPUEVSVElFUykpIHtcbiAgICBkZWZhdWx0UHJvcGVydGllcyA9IGNvbWJpbmUoZGVmYXVsdFByb3BlcnRpZXMsIENsYXNzW0RFRkFVTFRfUFJPUEVSVElFU10pO1xuICB9XG5cbiAgY29uc3Qgc3VwZXJDbGFzcyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihDbGFzcyk7ICAvLy9cblxuICBpZiAoc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIGRlZmF1bHRQcm9wZXJ0aWVzID0gZGVmYXVsdFByb3BlcnRpZXNGcm9tQ2xhc3Moc3VwZXJDbGFzcywgZGVmYXVsdFByb3BlcnRpZXMpO1xuICB9XG5cbiAgcmV0dXJuIGRlZmF1bHRQcm9wZXJ0aWVzO1xufVxuXG5mdW5jdGlvbiBpZ25vcmVkUHJvcGVydGllc0Zyb21DbGFzcyhDbGFzcywgaWdub3JlZFByb3BlcnRpZXMgPSBbXSkge1xuICBpZiAoQ2xhc3MuaGFzT3duUHJvcGVydHkoSUdOT1JFRF9QUk9QRVJUSUVTKSkge1xuICAgIGlnbm9yZWRQcm9wZXJ0aWVzID0gYXVnbWVudChpZ25vcmVkUHJvcGVydGllcywgQ2xhc3NbSUdOT1JFRF9QUk9QRVJUSUVTXSwgKGlnbm9yZWRQcm9wZXJ0eSkgPT4ge1xuICAgICAgaWYgKCFpZ25vcmVkUHJvcGVydGllcy5pbmNsdWRlcyhpZ25vcmVkUHJvcGVydHkpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY29uc3Qgc3VwZXJDbGFzcyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihDbGFzcyk7XG5cbiAgaWYgKHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICBpZ25vcmVkUHJvcGVydGllcyA9IGlnbm9yZWRQcm9wZXJ0aWVzRnJvbUNsYXNzKHN1cGVyQ2xhc3MsIGlnbm9yZWRQcm9wZXJ0aWVzKTtcbiAgfVxuXG4gIHJldHVybiBpZ25vcmVkUHJvcGVydGllcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVsZW1lbnQgZnJvbSBcIi4vZWxlbWVudFwiO1xuXG5pbXBvcnQgeyBmbGF0dGVuIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBTVFJJTkcsIEZVTkNUSU9OIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyByZW1vdmVGYWxzZXlFbGVtZW50cywgcmVwbGFjZVN0cmluZ3NXaXRoVGV4dEVsZW1lbnRzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2VsZW1lbnRzXCI7XG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQoZmlyc3RBcmd1bWVudCwgcHJvcGVydGllcywgLi4uY2hpbGRFbGVtZW50cykge1xuICBsZXQgZWxlbWVudCA9IG51bGw7XG5cbiAgaWYgKGZpcnN0QXJndW1lbnQpIHtcbiAgICBjaGlsZEVsZW1lbnRzID0gc2FuaXRpc2VDaGlsZEVsZW1lbnRzKGNoaWxkRWxlbWVudHMpO1xuXG4gICAgcHJvcGVydGllcyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgY2hpbGRFbGVtZW50c1xuICAgIH0sIHByb3BlcnRpZXMpO1xuXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICAvLy9cbiAgICB9IGVsc2UgaWYgKGlzU3ViY2xhc3NPZihmaXJzdEFyZ3VtZW50LCBFbGVtZW50KSkge1xuICAgICAgY29uc3QgQ2xhc3MgPSBmaXJzdEFyZ3VtZW50OyAgLy8vXG5cbiAgICAgIGVsZW1lbnQgPSBDbGFzcy5mcm9tQ2xhc3MoQ2xhc3MsIHByb3BlcnRpZXMpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpcnN0QXJndW1lbnQgPT09IFNUUklORykge1xuICAgICAgY29uc3QgdGFnTmFtZSA9IGZpcnN0QXJndW1lbnQ7IC8vL1xuXG4gICAgICBlbGVtZW50ID0gRWxlbWVudC5mcm9tVGFnTmFtZSh0YWdOYW1lLCBwcm9wZXJ0aWVzKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBmaXJzdEFyZ3VtZW50ID09PSBGVU5DVElPTikge1xuICAgICAgY29uc3QgZWxlbWVudEZ1bmN0aW9uID0gZmlyc3RBcmd1bWVudDsgIC8vL1xuXG4gICAgICBlbGVtZW50ID0gZWxlbWVudEZ1bmN0aW9uKHByb3BlcnRpZXMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufVxuXG5jb25zdCBSZWFjdCA9IHtcbiAgY3JlYXRlRWxlbWVudFxufTtcblxuZXhwb3J0IGRlZmF1bHQgUmVhY3Q7XG5cbmZ1bmN0aW9uIHNhbml0aXNlQ2hpbGRFbGVtZW50cyhjaGlsZEVsZW1lbnRzKSB7XG4gIGNoaWxkRWxlbWVudHMgPSBmbGF0dGVuKGNoaWxkRWxlbWVudHMpOyAvLy9cblxuICBjaGlsZEVsZW1lbnRzID0gcmVtb3ZlRmFsc2V5RWxlbWVudHMoY2hpbGRFbGVtZW50cyk7ICAvLy9cblxuICBjaGlsZEVsZW1lbnRzID0gcmVwbGFjZVN0cmluZ3NXaXRoVGV4dEVsZW1lbnRzKGNoaWxkRWxlbWVudHMpOyAgLy8vXG5cbiAgcmV0dXJuIGNoaWxkRWxlbWVudHM7XG59XG5cblxuZnVuY3Rpb24gaXNTdWJjbGFzc09mKGFyZ3VtZW50LCBDbGFzcykge1xuICBjb25zdCBzdWJjbGFzc09mID0gKGFyZ3VtZW50LnByb3RvdHlwZSBpbnN0YW5jZW9mIENsYXNzKTtcblxuICByZXR1cm4gc3ViY2xhc3NPZjtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVsZW1lbnQgZnJvbSBcIi4uL2VsZW1lbnRcIjtcblxuaW1wb3J0IHsgQk9EWSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm9keSBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihzZWxlY3RvciA9IEJPRFkpIHtcbiAgICBzdXBlcihzZWxlY3Rvcik7XG4gIH1cblxuICBzdGF0aWMgdGFnTmFtZSA9IFwiYm9keVwiO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRWxlbWVudCBmcm9tIFwiLi4vZWxlbWVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMaW5rIGV4dGVuZHMgRWxlbWVudCB7XG4gIGdldEhSZWYoKSB7IHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZShcImhyZWZcIik7IH1cblxuICBzZXRIUmVmKGhyZWYpIHsgcmV0dXJuIHRoaXMuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCBocmVmKTsgfVxuXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJhXCI7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENIQU5HRV9FVkVOVF9UWVBFIH0gZnJvbSBcIi4uL2V2ZW50VHlwZXNcIjtcblxuZnVuY3Rpb24gb25DaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uRXZlbnQoQ0hBTkdFX0VWRU5UX1RZUEUsIGNoYW5nZUhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZkNoYW5nZShjaGFuZ2VIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmRXZlbnQoQ0hBTkdFX0VWRU5UX1RZUEUsIGNoYW5nZUhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmNvbnN0IGNoYW5nZU1peGlucyA9IHtcbiAgb25DaGFuZ2UsXG4gIG9mZkNoYW5nZVxufTtcblxuZXhwb3J0IGRlZmF1bHQgY2hhbmdlTWl4aW5zO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRWxlbWVudCBmcm9tIFwiLi9lbGVtZW50XCI7XG5pbXBvcnQgY2hhbmdlTWl4aW5zIGZyb20gXCIuL21peGlucy9jaGFuZ2VcIjtcblxuaW1wb3J0IHsgQ0hBTkdFX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi9ldmVudFR5cGVzXCI7XG5cbmNsYXNzIElucHV0RWxlbWVudCBleHRlbmRzIEVsZW1lbnQge1xuICBvbkNoYW5nZShjaGFuZ2VIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub25FdmVudChDSEFOR0VfRVZFTlRfVFlQRSwgY2hhbmdlSGFuZGxlciwgZWxlbWVudCk7IH1cblxuICBvZmZDaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZkV2ZW50KENIQU5HRV9FVkVOVF9UWVBFLCBjaGFuZ2VIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG4gIG9uUmVzaXplKHJlc2l6ZUhhbmRsZXIsIGVsZW1lbnQpIHt9IC8vL1xuXG4gIG9mZlJlc2l6ZShyZXNpemVIYW5kbGVyLCBlbGVtZW50KSB7fSAgLy8vXG5cbiAgZ2V0VmFsdWUoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQudmFsdWU7IH1cblxuICBnZXRTZWxlY3Rpb25TdGFydCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5zZWxlY3Rpb25TdGFydDsgfVxuXG4gIGdldFNlbGVjdGlvbkVuZCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5zZWxlY3Rpb25FbmQ7IH1cbiAgXG4gIGlzUmVhZE9ubHkoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQucmVhZE9ubHk7IH1cblxuICBzZXRWYWx1ZSh2YWx1ZSkgeyB0aGlzLmRvbUVsZW1lbnQudmFsdWUgPSB2YWx1ZTsgfVxuXG4gIHNldFNlbGVjdGlvblN0YXJ0KHNlbGVjdGlvblN0YXJ0KSB7IHRoaXMuZG9tRWxlbWVudC5zZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvblN0YXJ0OyB9XG5cbiAgc2V0U2VsZWN0aW9uRW5kKHNlbGVjdGlvbkVuZCkgeyB0aGlzLmRvbUVsZW1lbnQuc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uRW5kOyB9XG5cbiAgc2V0UmVhZE9ubHkocmVhZE9ubHkpIHsgdGhpcy5kb21FbGVtZW50LnJlYWRPbmx5ID0gcmVhZE9ubHk7IH1cblxuICBzZWxlY3QoKSB7IHRoaXMuZG9tRWxlbWVudC5zZWxlY3QoKTsgfVxufVxuXG5PYmplY3QuYXNzaWduKElucHV0RWxlbWVudC5wcm90b3R5cGUsIGNoYW5nZU1peGlucyk7XG5cbmV4cG9ydCBkZWZhdWx0IElucHV0RWxlbWVudDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IElucHV0RWxlbWVudCBmcm9tIFwiLi4vaW5wdXRFbGVtZW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElucHV0IGV4dGVuZHMgSW5wdXRFbGVtZW50IHtcbiAgc3RhdGljIHRhZ05hbWUgPSBcImlucHV0XCI7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbGVtZW50IGZyb20gXCIuLi9lbGVtZW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIEVsZW1lbnQge1xuICBzdGF0aWMgdGFnTmFtZSA9IFwiYnV0dG9uXCI7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbGVtZW50IGZyb20gXCIuLi9lbGVtZW50XCI7XG5pbXBvcnQgY2hhbmdlTWl4aW5zIGZyb20gXCIuLi9taXhpbnMvY2hhbmdlXCI7XG5cbmNsYXNzIFNlbGVjdCBleHRlbmRzIEVsZW1lbnQge1xuICBvblJlc2l6ZShyZXNpemVIYW5kbGVyLCBlbGVtZW50KSB7fSAvLy9cblxuICBvZmZSZXNpemUocmVzaXplSGFuZGxlciwgZWxlbWVudCkge30gIC8vL1xuXG4gIGdldFZhbHVlKCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LnZhbHVlOyB9XG5cbiAgc2V0VmFsdWUodmFsdWUpIHsgdGhpcy5kb21FbGVtZW50LnZhbHVlID0gdmFsdWU7IH1cblxuICBzdGF0aWMgdGFnTmFtZSA9IFwic2VsZWN0XCI7XG59XG5cbk9iamVjdC5hc3NpZ24oU2VsZWN0LnByb3RvdHlwZSwgY2hhbmdlTWl4aW5zKTtcblxuZXhwb3J0IGRlZmF1bHQgU2VsZWN0O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRWxlbWVudCBmcm9tIFwiLi4vZWxlbWVudFwiO1xuaW1wb3J0IGNoYW5nZU1peGlucyBmcm9tIFwiLi4vbWl4aW5zL2NoYW5nZVwiO1xuXG5jbGFzcyBDaGVja2JveCBleHRlbmRzIEVsZW1lbnQge1xuICBpc0NoZWNrZWQoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuY2hlY2tlZDsgfVxuXG4gIGNoZWNrKGNoZWNrZWQgPSB0cnVlKSB7IHRoaXMuZG9tRWxlbWVudC5jaGVja2VkID0gY2hlY2tlZDsgfVxuXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJpbnB1dFwiO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICB0eXBlOiBcImNoZWNrYm94XCJcbiAgfTtcbn1cblxuT2JqZWN0LmFzc2lnbihDaGVja2JveC5wcm90b3R5cGUsIGNoYW5nZU1peGlucyk7XG5cbmV4cG9ydCBkZWZhdWx0IENoZWNrYm94O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgSW5wdXRFbGVtZW50IGZyb20gXCIuLi9pbnB1dEVsZW1lbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGV4dGFyZWEgZXh0ZW5kcyBJbnB1dEVsZW1lbnQge1xuICBzdGF0aWMgdGFnTmFtZSA9IFwidGV4dGFyZWFcIjtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgb25SZXNpemUsIG9mZlJlc2l6ZSB9IGZyb20gXCIuLi9taXhpbnMvcmVzaXplXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgb25SZXNpemUsXG4gIG9mZlJlc2l6ZVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGtleU1peGlucyBmcm9tIFwiLi9taXhpbnMva2V5XCI7XG5pbXBvcnQgZXZlbnRNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2V2ZW50XCI7XG5pbXBvcnQgbW91c2VNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL21vdXNlXCI7XG5pbXBvcnQgY2xpY2tNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2NsaWNrXCI7XG5pbXBvcnQgd2luZG93TWl4aW5zIGZyb20gXCIuL21peGlucy93aW5kb3dcIjtcbmltcG9ydCBjdXN0b21FdmVudE1peGlucyBmcm9tIFwiLi9taXhpbnMvY3VzdG9tRXZlbnRcIjtcblxuaW1wb3J0IHsgVU5ERUZJTkVEIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmNsYXNzIFdpbmRvdyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuZG9tRWxlbWVudCA9IHdpbmRvdzsgLy8vXG4gIH1cblxuICBhc3NpZ24oLi4uc291cmNlcykge1xuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuZG9tRWxlbWVudDsgLy8vXG5cbiAgICBPYmplY3QuYXNzaWduKHRhcmdldCwgLi4uc291cmNlcyk7XG4gIH1cblxuICBhZGRSZXNpemVPYmplY3QoKSB7fSAvLy9cblxuICByZW1vdmVSZXNpemVPYmplY3QoKSB7fSAvLy9cblxuICBnZXRXaWR0aCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5pbm5lcldpZHRoOyB9IC8vL1xuICBcbiAgZ2V0SGVpZ2h0KCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LmlubmVySGVpZ2h0OyB9IC8vL1xuXG4gIGdldFNjcm9sbFRvcCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5wYWdlWU9mZnNldDsgfSAgLy8vXG5cbiAgZ2V0U2Nyb2xsTGVmdCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5wYWdlWE9mZnNldDsgfSAvLy9cblxuICBnZXRTZWxlY3Rpb24oKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuZ2V0U2VsZWN0aW9uKCk7IH1cbn1cblxuT2JqZWN0LmFzc2lnbihXaW5kb3cucHJvdG90eXBlLCBrZXlNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihXaW5kb3cucHJvdG90eXBlLCBldmVudE1peGlucyk7XG5PYmplY3QuYXNzaWduKFdpbmRvdy5wcm90b3R5cGUsIG1vdXNlTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oV2luZG93LnByb3RvdHlwZSwgY2xpY2tNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihXaW5kb3cucHJvdG90eXBlLCB3aW5kb3dNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihXaW5kb3cucHJvdG90eXBlLCBjdXN0b21FdmVudE1peGlucyk7XG5cbmV4cG9ydCBkZWZhdWx0ICh0eXBlb2Ygd2luZG93ID09PSBVTkRFRklORUQpID8gdW5kZWZpbmVkIDogbmV3IFdpbmRvdygpOyAgLy8vXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFNFTEVDVElPTkNIQU5HRV9FVkVOVF9UWVBFIH0gZnJvbSBcIi4uL2V2ZW50VHlwZXNcIjtcblxuZnVuY3Rpb24gb25TZWxlY3Rpb25DaGFuZ2Uoc2VsZWN0aW9uQ2hhbmdlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uRXZlbnQoU0VMRUNUSU9OQ0hBTkdFX0VWRU5UX1RZUEUsIHNlbGVjdGlvbkNoYW5nZUhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZlNlbGVjdGlvbkNoYW5nZShzZWxlY3Rpb25DaGFuZ2VIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmRXZlbnQoU0VMRUNUSU9OQ0hBTkdFX0VWRU5UX1RZUEUsIHNlbGVjdGlvbkNoYW5nZUhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIGNyZWF0ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KSB7XG4gIGxldCBldmVudExpc3RlbmVyO1xuXG4gIGNvbnN0IGhhbmRsZXJFbGVtZW50ID0gZWxlbWVudDsgLy8vXG5cbiAgZXZlbnRMaXN0ZW5lciA9IChldmVudCkgPT4ge1xuICAgIGlmIChldmVudFR5cGUgPT09IFNFTEVDVElPTkNIQU5HRV9FVkVOVF9UWVBFKSB7XG4gICAgICBjb25zdCB7IGRvbUVsZW1lbnQgfSA9IGhhbmRsZXJFbGVtZW50LFxuICAgICAgICAgICAgeyBjdXJyZW50VGFyZ2V0IH0gPSBldmVudCxcbiAgICAgICAgICAgIHsgYWN0aXZlRWxlbWVudCB9ID0gY3VycmVudFRhcmdldDtcblxuICAgICAgaWYgKGRvbUVsZW1lbnQgIT09IGFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzOyAvLy9cblxuICAgIGhhbmRsZXIuY2FsbChoYW5kbGVyRWxlbWVudCwgZXZlbnQsIGVsZW1lbnQpO1xuICB9O1xuXG4gIE9iamVjdC5hc3NpZ24oZXZlbnRMaXN0ZW5lciwge1xuICAgIGVsZW1lbnQsXG4gICAgaGFuZGxlcixcbiAgICBldmVudFR5cGVcbiAgfSk7XG5cbiAgcmV0dXJuIGV2ZW50TGlzdGVuZXI7XG59XG5cbmNvbnN0IHNlbGVjdGlvbk1peGlucyA9IHtcbiAgb25TZWxlY3Rpb25DaGFuZ2UsXG4gIG9mZlNlbGVjdGlvbkNoYW5nZSxcbiAgY3JlYXRlRXZlbnRMaXN0ZW5lclxufTtcblxuZXhwb3J0IGRlZmF1bHQgc2VsZWN0aW9uTWl4aW5zO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQga2V5TWl4aW5zIGZyb20gXCIuL21peGlucy9rZXlcIjtcbmltcG9ydCBjbGlja01peGlucyBmcm9tIFwiLi9taXhpbnMvY2xpY2tcIjtcbmltcG9ydCBldmVudE1peGlucyBmcm9tIFwiLi9taXhpbnMvZXZlbnRcIjtcbmltcG9ydCBtb3VzZU1peGlucyBmcm9tIFwiLi9taXhpbnMvbW91c2VcIjtcbmltcG9ydCBzZWxlY3Rpb25NaXhpbnMgZnJvbSBcIi4vbWl4aW5zL3NlbGVjdGlvblwiO1xuaW1wb3J0IGN1c3RvbUV2ZW50TWl4aW5zIGZyb20gXCIuL21peGlucy9jdXN0b21FdmVudFwiO1xuXG5pbXBvcnQgeyBVTkRFRklORUQgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuY2xhc3MgRG9jdW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmRvbUVsZW1lbnQgPSBkb2N1bWVudDsgLy8vXG4gIH1cblxuICBnZXRET01FbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmRvbUVsZW1lbnQ7XG4gIH1cblxuICBjcmVhdGVSYW5nZSgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5jcmVhdGVSYW5nZSgpOyB9XG5cbiAgY3JlYXRlVGV4dE5vZGUoZGF0YSkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LmNyZWF0ZVRleHROb2RlKGRhdGEpOyB9XG59XG5cbmV4cG9ydCBkZWZhdWx0ICh0eXBlb2YgZG9jdW1lbnQgPT09IFVOREVGSU5FRCkgPyB1bmRlZmluZWQgOiBuZXcgRG9jdW1lbnQoKTsgIC8vL1xuXG5PYmplY3QuYXNzaWduKERvY3VtZW50LnByb3RvdHlwZSwga2V5TWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRG9jdW1lbnQucHJvdG90eXBlLCBjbGlja01peGlucyk7XG5PYmplY3QuYXNzaWduKERvY3VtZW50LnByb3RvdHlwZSwgZXZlbnRNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihEb2N1bWVudC5wcm90b3R5cGUsIG1vdXNlTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRG9jdW1lbnQucHJvdG90eXBlLCBzZWxlY3Rpb25NaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihEb2N1bWVudC5wcm90b3R5cGUsIGN1c3RvbUV2ZW50TWl4aW5zKTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IExFRlRfTU9VU0VfQlVUVE9OID0gMDtcbmV4cG9ydCBjb25zdCBSSUdIVF9NT1VTRV9CVVRUT04gPSAyO1xuZXhwb3J0IGNvbnN0IE1JRERMRV9NT1VTRV9CVVRUT04gPSAxO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIExFRlRfTU9VU0VfQlVUVE9OLFxuICBSSUdIVF9NT1VTRV9CVVRUT04sXG4gIE1JRERMRV9NT1VTRV9CVVRUT05cbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgUmVhY3QgfSBmcm9tIFwiLi9yZWFjdFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCb3VuZHMgfSBmcm9tIFwiLi9ib3VuZHNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgT2Zmc2V0IH0gZnJvbSBcIi4vb2Zmc2V0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgQm9keSB9IGZyb20gXCIuL2VsZW1lbnQvYm9keVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMaW5rIH0gZnJvbSBcIi4vZWxlbWVudC9saW5rXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIElucHV0IH0gZnJvbSBcIi4vaW5wdXRFbGVtZW50L2lucHV0XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJ1dHRvbiB9IGZyb20gXCIuL2VsZW1lbnQvYnV0dG9uXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNlbGVjdCB9IGZyb20gXCIuL2VsZW1lbnQvc2VsZWN0XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVsZW1lbnQgfSBmcm9tIFwiLi9lbGVtZW50XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENoZWNrYm94IH0gZnJvbSBcIi4vZWxlbWVudC9jaGVja2JveFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXh0YXJlYSB9IGZyb20gXCIuL2lucHV0RWxlbWVudC90ZXh0YXJlYVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXh0RWxlbWVudCB9IGZyb20gXCIuL3RleHRFbGVtZW50XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIElucHV0RWxlbWVudCB9IGZyb20gXCIuL2lucHV0RWxlbWVudFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHdpbmRvdyB9IGZyb20gXCIuL3dpbmRvd1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBkb2N1bWVudCB9IGZyb20gXCIuL2RvY3VtZW50XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGV2ZW50VHlwZXMgfSBmcm9tIFwiLi9ldmVudFR5cGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG1vdXNlQnV0dG9ucyB9IGZyb20gXCIuL21vdXNlQnV0dG9uc1wiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIGVsZW1lbnRVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBSZWFjdCB9IGZyb20gXCJlYXN5XCI7XG5cbk9iamVjdC5hc3NpZ24oZ2xvYmFsVGhpcywge1xuICBSZWFjdFxufSk7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBcIi4vanV4dGFwb3NlXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IHRhZ05hbWVzID0gW1xuICBcImFcIiwgXCJhYmJyXCIsIFwiYWRkcmVzc1wiLCBcImFzaWRlXCIsIFwiYXVkaW9cIixcbiAgXCJiXCIsIFwiYmFzZVwiLCBcImJkaVwiLCBcImJkb1wiLCBcImJsb2NrcXVvdGVcIiwgXCJib2R5XCIsIFwiYnJcIiwgXCJidXR0b25cIixcbiAgXCJjYW52YXNcIiwgXCJjYXB0aW9uXCIsIFwiY2l0ZVwiLCBcImNvZGVcIiwgXCJjb2xcIiwgXCJjb2xncm91cFwiLFxuICBcImRhdGFcIiwgXCJkYXRhbGlzdFwiLCBcImRkXCIsIFwiZGVsXCIsIFwiZGV0YWlsc1wiLCBcImRmblwiLCBcImRpYWxvZ1wiLCBcImRpdlwiLCBcImRsXCIsIFwiZHRcIiwgXCJlbVwiLCBcImVtYmVkXCIsIFwiZmllbGRzZXRcIiwgXCJmaWdjYXB0aW9uXCIsIFwiZmlndXJlXCIsIFwiZm9vdGVyXCIsIFwiZm9ybVwiLFxuICBcImgxXCIsIFwiaDJcIiwgXCJoM1wiLCBcImg0XCIsIFwiaDVcIiwgXCJoNlwiLCBcImhlYWRcIiwgXCJoZWFkZXJcIiwgXCJoclwiLCBcImh0bWxcIixcbiAgXCJpXCIsIFwiaWZyYW1lXCIsIFwiaW1nXCIsIFwiaW5wdXRcIiwgXCJpbnNcIiwgXCJrYmRcIiwgXCJsYWJlbFwiLCBcImxlZ2VuZFwiLCBcImxpXCIsIFwibGlua1wiLFxuICBcIm1haW5cIiwgXCJtYXBcIiwgXCJtYXJrXCIsIFwibWV0YVwiLCBcIm1ldGVyXCIsIFwibmF2XCIsIFwibm9zY3JpcHRcIixcbiAgXCJvYmplY3RcIiwgXCJvbFwiLCBcIm9wdGdyb3VwXCIsIFwib3B0aW9uXCIsIFwib3V0cHV0XCIsXG4gIFwicFwiLCBcInBhcmFtXCIsIFwicGljdHVyZVwiLCBcInByZVwiLCBcInByb2dyZXNzXCIsXG4gIFwicVwiLCBcInJwXCIsIFwicnRcIiwgXCJydWJ5XCIsXG4gIFwic1wiLCBcInNhbXBcIiwgXCJzY3JpcHRcIiwgXCJzZWN0aW9uXCIsIFwic2VsZWN0XCIsIFwic21hbGxcIiwgXCJzb3VyY2VcIiwgXCJzcGFuXCIsIFwic3Ryb25nXCIsIFwic3R5bGVcIiwgXCJzdWJcIiwgXCJzdW1tYXJ5XCIsIFwic3VwXCIsIFwic3ZnXCIsXG4gIFwidGFibGVcIiwgXCJ0Ym9keVwiLCBcInRkXCIsIFwidGVtcGxhdGVcIiwgXCJ0ZXh0YXJlYVwiLCBcInRmb290XCIsIFwidGhcIiwgXCJ0aGVhZFwiLCBcInRpbWVcIiwgXCJ0aXRsZVwiLCBcInRyXCIsIFwidHJhY2tcIixcbiAgXCJ1XCIsIFwidWxcIixcbiAgXCJ2YXJcIiwgXCJ2aWRlb1wiLFxuICBcIndiclwiXG5dO1xuXG5leHBvcnQgZGVmYXVsdCB0YWdOYW1lcztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFRSQUNFX0xFVkVMID0gXCJ0cmFjZVwiO1xuZXhwb3J0IGNvbnN0IERFQlVHX0xFVkVMID0gXCJkZWJ1Z1wiO1xuZXhwb3J0IGNvbnN0IElORk9fTEVWRUwgPSBcImluZm9cIjtcbmV4cG9ydCBjb25zdCBXQVJOSU5HX0xFVkVMID0gXCJ3YXJuaW5nXCI7XG5leHBvcnQgY29uc3QgRVJST1JfTEVWRUwgPSBcImVycm9yXCI7XG5leHBvcnQgY29uc3QgRkFUQUxfTEVWRUwgPSBcImZhdGFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgVFJBQ0VfTEVWRUwsXG4gIERFQlVHX0xFVkVMLFxuICBJTkZPX0xFVkVMLFxuICBXQVJOSU5HX0xFVkVMLFxuICBFUlJPUl9MRVZFTCxcbiAgRkFUQUxfTEVWRUxcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBHRVRfTUVUSE9EID0gXCJHRVRcIjtcbmV4cG9ydCBjb25zdCBQT1NUX01FVEhPRCA9IFwiUE9TVFwiO1xuZXhwb3J0IGNvbnN0IFBBVENIX01FVEhPRCA9IFwiUEFUQ0hcIjtcbmV4cG9ydCBjb25zdCBERUxFVEVfTUVUSE9EID0gXCJERUxFVEVcIjtcbmV4cG9ydCBjb25zdCBPUFRJT05TX01FVEhPRCA9IFwiT1BUSU9OU1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIEdFVF9NRVRIT0QsXG4gIFBPU1RfTUVUSE9ELFxuICBQQVRDSF9NRVRIT0QsXG4gIERFTEVURV9NRVRIT0QsXG4gIE9QVElPTlNfTUVUSE9EXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgUFJBR01BX0hFQURFUiA9IFwicHJhZ21hXCI7XG5leHBvcnQgY29uc3QgQUNDRVBUX0hFQURFUiA9IFwiYWNjZXB0XCI7XG5leHBvcnQgY29uc3QgTE9DQVRJT05fSEVBREVSID0gXCJsb2NhdGlvblwiO1xuZXhwb3J0IGNvbnN0IFVTRVJfQUdFTlRfSEVBREVSID0gXCJ1c2VyLWFnZW50XCI7XG5leHBvcnQgY29uc3QgQ09OVEVOVF9UWVBFX0hFQURFUiA9IFwiY29udGVudC10eXBlXCI7XG5leHBvcnQgY29uc3QgQVVUSE9SSVpBVElPTl9IRUFERVIgPSBcImF1dGhvcml6YXRpb25cIjtcbmV4cG9ydCBjb25zdCBDQUNIRV9DT05UUk9MX0hFQURFUiA9IFwiY2FjaGUtY29udHJvbFwiO1xuZXhwb3J0IGNvbnN0IENPTlRFTlRfTEVOR1RIX0hFQURFUiA9IFwiY29udGVudC1sZW5ndGhcIjtcbmV4cG9ydCBjb25zdCBUUkFOU0ZFUl9FTkNPRElOR19IRUFERVIgPSBcInRyYW5zZmVyLWVuY29kaW5nXCI7XG5leHBvcnQgY29uc3QgQ09OVEVOVF9ESVNQT1NJVElPTl9IRUFERVIgPSBcImNvbnRlbnQtZGlzcG9zaXRpb25cIjtcbmV4cG9ydCBjb25zdCBBQ0NFU1NfQ09OVFJPTF9BTExPV19PUklHSU5fSEVBREVSID0gXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW5cIjtcbmV4cG9ydCBjb25zdCBBQ0NFU1NfQ09OVFJPTF9BTExPV19NRVRIT0RTX0hFQURFUiA9IFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctbWV0aG9kc1wiO1xuZXhwb3J0IGNvbnN0IEFDQ0VTU19DT05UUk9MX0FMTE9XX0hFQURFUlNfSEVBREVSID0gXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1oZWFkZXJzXCI7XG5leHBvcnQgY29uc3QgQUNDRVNTX0NPTlRST0xfUkVRVUVTVF9NRVRIT0RfSEVBREVSID0gXCJhY2Nlc3MtY29udHJvbC1yZXF1ZXN0LW1ldGhvZFwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFBSQUdNQV9IRUFERVIsXG4gIEFDQ0VQVF9IRUFERVIsXG4gIExPQ0FUSU9OX0hFQURFUixcbiAgVVNFUl9BR0VOVF9IRUFERVIsXG4gIENPTlRFTlRfVFlQRV9IRUFERVIsXG4gIEFVVEhPUklaQVRJT05fSEVBREVSLFxuICBDQUNIRV9DT05UUk9MX0hFQURFUixcbiAgQ09OVEVOVF9MRU5HVEhfSEVBREVSLFxuICBUUkFOU0ZFUl9FTkNPRElOR19IRUFERVIsXG4gIENPTlRFTlRfRElTUE9TSVRJT05fSEVBREVSLFxuICBBQ0NFU1NfQ09OVFJPTF9BTExPV19PUklHSU5fSEVBREVSLFxuICBBQ0NFU1NfQ09OVFJPTF9BTExPV19NRVRIT0RTX0hFQURFUixcbiAgQUNDRVNTX0NPTlRST0xfQUxMT1dfSEVBREVSU19IRUFERVIsXG4gIEFDQ0VTU19DT05UUk9MX1JFUVVFU1RfTUVUSE9EX0hFQURFUlxufTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBUQUJfS0VZX0NPREUgPSA5O1xuZXhwb3J0IGNvbnN0IFNISUZUX0tFWV9DT0RFID0gMTY7XG5leHBvcnQgY29uc3QgRU5URVJfS0VZX0NPREUgPSAxMztcbmV4cG9ydCBjb25zdCBFU0NBUEVfS0VZX0NPREUgPSAyNztcbmV4cG9ydCBjb25zdCBERUxFVEVfS0VZX0NPREUgPSA0NjtcbmV4cG9ydCBjb25zdCBCQUNLU1BBQ0VfS0VZX0NPREUgPSA4O1xuZXhwb3J0IGNvbnN0IEFSUk9XX1VQX0tFWV9DT0RFID0gMzg7XG5leHBvcnQgY29uc3QgQVJST1dfRE9XTl9LRVlfQ09ERSA9IDQwO1xuZXhwb3J0IGNvbnN0IEFSUk9XX0xFRlRfS0VZX0NPREUgPSAzNztcbmV4cG9ydCBjb25zdCBBUlJPV19SSUdIVF9LRVlfQ09ERSA9IDM5O1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFRBQl9LRVlfQ09ERSxcbiAgU0hJRlRfS0VZX0NPREUsXG4gIEVOVEVSX0tFWV9DT0RFLFxuICBFU0NBUEVfS0VZX0NPREUsXG4gIERFTEVURV9LRVlfQ09ERSxcbiAgQkFDS1NQQUNFX0tFWV9DT0RFLFxuICBBUlJPV19VUF9LRVlfQ09ERSxcbiAgQVJST1dfRE9XTl9LRVlfQ09ERSxcbiAgQVJST1dfTEVGVF9LRVlfQ09ERSxcbiAgQVJST1dfUklHSFRfS0VZX0NPREVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBVVEY4X0VOQ09ESU5HID0gXCJ1dGY4XCI7XG5leHBvcnQgY29uc3QgVVRGXzhfRU5DT0RJTkcgPSBcInV0Zi04XCI7XG5leHBvcnQgY29uc3QgQkFTRTY0X0VOQ09ESU5HID0gXCJiYXNlNjRcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBVVEY4X0VOQ09ESU5HLFxuICBVVEZfOF9FTkNPRElORyxcbiAgQkFTRTY0X0VOQ09ESU5HXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgVVBfQ0hBUkFDVEVSID0gXCJcdTAwMWJbQVwiO1xuZXhwb3J0IGNvbnN0IEVUWF9DSEFSQUNURVIgPSBcIlxcdTAwMDNcIjtcbmV4cG9ydCBjb25zdCBCQVJfQ0hBUkFDVEVSID0gXCJ8XCI7XG5leHBvcnQgY29uc3QgREFTSF9DSEFSQUNURVIgPSBcIi1cIjtcbmV4cG9ydCBjb25zdCBET1dOX0NIQVJBQ1RFUiA9IFwiXHUwMDFiW0JcIjtcbmV4cG9ydCBjb25zdCBMRUZUX0NIQVJBQ1RFUiA9IFwiXHUwMDFiW0RcIjtcbmV4cG9ydCBjb25zdCBSSUdIVF9DSEFSQUNURVIgPSBcIlx1MDAxYltDXCI7XG5leHBvcnQgY29uc3QgU1BBQ0VfQ0hBUkFDVEVSID0gXCIgXCI7XG5leHBvcnQgY29uc3QgQ09NTUFfQ0hBUkFDVEVSID0gXCIsXCI7XG5leHBvcnQgY29uc3QgQ09MT05fQ0hBUkFDVEVSID0gXCI6XCI7XG5leHBvcnQgY29uc3QgUEVSSU9EX0NIQVJBQ1RFUiA9IFwiLlwiO1xuZXhwb3J0IGNvbnN0IENUUkxfQ19DSEFSQUNURVIgPSBcIl5DXCI7XG5leHBvcnQgY29uc3QgV0lMRENBUkRfQ0hBUkFDVEVSID0gXCIqXCI7XG5leHBvcnQgY29uc3QgQkFDS1RJQ0tfREVMSU1JVEVSID0gXCJgXCI7XG5leHBvcnQgY29uc3QgTkVXX0xJTkVfQ0hBUkFDVEVSID0gXCJcXG5cIjtcbmV4cG9ydCBjb25zdCBCQUNLU1BBQ0VfQ0hBUkFDVEVSID0gU3RyaW5nLmZyb21DaGFyQ29kZSgxMjcpO1xuZXhwb3J0IGNvbnN0IEFNUEVSU0FORF9DSEFSQUNURVIgPSBcIiZcIjtcbmV4cG9ydCBjb25zdCBMRVNTX1RIQU5fQ0hBUkFDVEVSID0gXCImbHQ7XCI7XG5leHBvcnQgY29uc3QgR1JFQVRFUl9USEFOX0NIQVJBQ1RFUiA9IFwiJmd0O1wiO1xuZXhwb3J0IGNvbnN0IEZPUldBUkRfU0xBU0hfQ0hBUkFDVEVSID0gXCIvXCI7XG5leHBvcnQgY29uc3QgQ0FSUklBR0VfUkVUVVJOX0NIQVJBQ1RFUiA9IFwiXFxyXCI7XG5leHBvcnQgY29uc3QgRVhDTEFNQVRJT05fTUFSS19DSEFSQUNURVIgPSBcIiFcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBVUF9DSEFSQUNURVIsXG4gIEVUWF9DSEFSQUNURVIsXG4gIEJBUl9DSEFSQUNURVIsXG4gIERBU0hfQ0hBUkFDVEVSLFxuICBET1dOX0NIQVJBQ1RFUixcbiAgTEVGVF9DSEFSQUNURVIsXG4gIFJJR0hUX0NIQVJBQ1RFUixcbiAgU1BBQ0VfQ0hBUkFDVEVSLFxuICBDT01NQV9DSEFSQUNURVIsXG4gIENPTE9OX0NIQVJBQ1RFUixcbiAgUEVSSU9EX0NIQVJBQ1RFUixcbiAgQ1RSTF9DX0NIQVJBQ1RFUixcbiAgV0lMRENBUkRfQ0hBUkFDVEVSLFxuICBCQUNLVElDS19ERUxJTUlURVIsXG4gIE5FV19MSU5FX0NIQVJBQ1RFUixcbiAgQU1QRVJTQU5EX0NIQVJBQ1RFUixcbiAgQkFDS1NQQUNFX0NIQVJBQ1RFUixcbiAgTEVTU19USEFOX0NIQVJBQ1RFUixcbiAgR1JFQVRFUl9USEFOX0NIQVJBQ1RFUixcbiAgRk9SV0FSRF9TTEFTSF9DSEFSQUNURVIsXG4gIENBUlJJQUdFX1JFVFVSTl9DSEFSQUNURVIsXG4gIEVYQ0xBTUFUSU9OX01BUktfQ0hBUkFDVEVSXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgWkVST18wX1NUQVRVU19DT0RFID0gMDtcbmV4cG9ydCBjb25zdCBPS18yMDBfU1RBVFVTX0NPREUgPSAyMDA7XG5leHBvcnQgY29uc3QgRk9VTkRfMzAyX1NUQVRVU19DT0RFID0gMzAyO1xuZXhwb3J0IGNvbnN0IENSRUFURURfMjAxX1NUQVRVU19DT0RFID0gMjAxO1xuZXhwb3J0IGNvbnN0IFNFRV9PVEhFUl8zMDNfU1RBVFVTX0NPREUgPSAzMDM7XG5leHBvcnQgY29uc3QgRk9SQklEREVOXzQwM19TVEFUVVNfQ09ERSA9IDQwMztcbmV4cG9ydCBjb25zdCBOT1RfRk9VTkRfNDA0X1NUQVRVU19DT0RFID0gNDA0O1xuZXhwb3J0IGNvbnN0IE5PX0NPTlRFTlRfMjA0X1NUQVRVU19DT0RFID0gMjA0O1xuZXhwb3J0IGNvbnN0IEJBRF9HQVRFV0FZXzUwMl9TVEFUVVNfQ09ERSA9IDUwMjtcbmV4cG9ydCBjb25zdCBCQURfUkVRVUVTVF80MDBfU1RBVFVTX0NPREUgPSA0MDA7XG5leHBvcnQgY29uc3QgVU5BVVRIT1JJWkVEXzQwMV9TVEFUVVNfQ09ERSA9IDQwMTtcbmV4cG9ydCBjb25zdCBSRVFVRVNUX1RJTUVPVVRfNDA4X1NUQVRVU19DT0RFID0gNDA4O1xuZXhwb3J0IGNvbnN0IFRPT19NQU5ZX1JFUVVFU1RTXzQyOV9TVEFUVVNfQ09ERSA9IDQyOTtcbmV4cG9ydCBjb25zdCBTRVJWSUNFX1VOQVZBSUxBQkxFXzUwM19TVEFUVVNfQ09ERSA9IDUwMztcbmV4cG9ydCBjb25zdCBJTlRFUk5BTF9TRVJWRVJfRVJST1JfNTAwX1NUQVRVU19DT0RFID0gNTAwO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFpFUk9fMF9TVEFUVVNfQ09ERSxcbiAgT0tfMjAwX1NUQVRVU19DT0RFLFxuICBGT1VORF8zMDJfU1RBVFVTX0NPREUsXG4gIENSRUFURURfMjAxX1NUQVRVU19DT0RFLFxuICBTRUVfT1RIRVJfMzAzX1NUQVRVU19DT0RFLFxuICBGT1JCSURERU5fNDAzX1NUQVRVU19DT0RFLFxuICBOT1RfRk9VTkRfNDA0X1NUQVRVU19DT0RFLFxuICBOT19DT05URU5UXzIwNF9TVEFUVVNfQ09ERSxcbiAgQkFEX0dBVEVXQVlfNTAyX1NUQVRVU19DT0RFLFxuICBCQURfUkVRVUVTVF80MDBfU1RBVFVTX0NPREUsXG4gIFVOQVVUSE9SSVpFRF80MDFfU1RBVFVTX0NPREUsXG4gIFJFUVVFU1RfVElNRU9VVF80MDhfU1RBVFVTX0NPREUsXG4gIFRPT19NQU5ZX1JFUVVFU1RTXzQyOV9TVEFUVVNfQ09ERSxcbiAgU0VSVklDRV9VTkFWQUlMQUJMRV81MDNfU1RBVFVTX0NPREUsXG4gIElOVEVSTkFMX1NFUlZFUl9FUlJPUl81MDBfU1RBVFVTX0NPREVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBURVhUX0hUTUxfQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L2h0bWxcIjtcbmV4cG9ydCBjb25zdCBURVhUX1BMQUlOX0NPTlRFTlRfVFlQRSA9IFwidGV4dC9wbGFpblwiO1xuZXhwb3J0IGNvbnN0IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG5leHBvcnQgY29uc3QgVEVYVF9IVE1MX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLThcIjtcbmV4cG9ydCBjb25zdCBURVhUX1BMQUlOX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04XCI7XG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fT0NURVRfU1RSRUFNX0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCI7XG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fWF9XV1dfRk9STV9FTkNPREVEX0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCI7XG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fSlNPTl9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiO1xuZXhwb3J0IGNvbnN0IEFQUExJQ0FUSU9OX1hfV1dXX0ZPUk1fRU5DT0RFRF9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PXV0Zi04XCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgVEVYVF9IVE1MX0NPTlRFTlRfVFlQRSxcbiAgVEVYVF9QTEFJTl9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFLFxuICBURVhUX0hUTUxfQ0hBUlNFVF9VVEZfOF9DT05URU5UX1RZUEUsXG4gIFRFWFRfUExBSU5fQ0hBUlNFVF9VVEZfOF9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX09DVEVUX1NUUkVBTV9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX0pTT05fQ0hBUlNFVF9VVEZfOF9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX1hfV1dXX0ZPUk1fRU5DT0RFRF9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX1hfV1dXX0ZPUk1fRU5DT0RFRF9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFpFUk9fMF9TVEFUVVNfTUVTU0FHRSA9IFwiXCI7XG5leHBvcnQgY29uc3QgT0tfMjAwX1NUQVRVU19NRVNTQUdFID0gXCJPS1wiO1xuZXhwb3J0IGNvbnN0IEZPVU5EXzMwMl9TVEFUVVNfTUVTU0FHRSA9IFwiRm91bmRcIjtcbmV4cG9ydCBjb25zdCBDUkVBVEVEXzIwMV9TVEFUVVNfTUVTU0FHRSA9IFwiQ3JlYXRlZFwiO1xuZXhwb3J0IGNvbnN0IFNFRV9PVEhFUl8zMDNfU1RBVFVTX01FU1NBR0UgPSBcIlNlZSBvdGhlclwiO1xuZXhwb3J0IGNvbnN0IEZPUkJJRERFTl80MDNfU1RBVFVTX01FU1NBR0UgPSBcIkZvcmJpZGRlblwiO1xuZXhwb3J0IGNvbnN0IE5PVF9GT1VORF80MDRfU1RBVFVTX01FU1NBR0UgPSBcIk5vdCBmb3VuZFwiO1xuZXhwb3J0IGNvbnN0IE5PX0NPTlRFTlRfMjA0X1NUQVRVU19NRVNTQUdFID0gXCJObyBjb250ZW50XCI7XG5leHBvcnQgY29uc3QgQkFEX0dBVEVXQVlfNTAyX1NUQVRVU19NRVNTQUdFID0gXCJCYWQgZ2F0ZXdheVwiO1xuZXhwb3J0IGNvbnN0IEJBRF9SRVFVRVNUXzQwMF9TVEFUVVNfTUVTU0FHRSA9IFwiQmFkIHJlcXVlc3RcIjtcbmV4cG9ydCBjb25zdCBVTkFVVEhPUklaRURfNDAxX1NUQVRVU19NRVNTQUdFID0gXCJVbmF1dGhvcml6ZWRcIjtcbmV4cG9ydCBjb25zdCBSRVFVRVNUX1RJTUVPVVRfNDA4X1NUQVRVU19NRVNTQUdFID0gXCJSZXF1ZXN0IHRpbWVvdXRcIjtcbmV4cG9ydCBjb25zdCBUT09fTUFOWV9SRVFVRVNUU180MjlfU1RBVFVTX01FU1NBR0UgPSBcIlRvbyBtYW55IHJlcXVlc3RzXCI7XG5leHBvcnQgY29uc3QgU0VSVklDRV9VTkFWQUlMQUJMRV81MDNfU1RBVFVTX01FU1NBR0UgPSBcIlNlcnZpY2UgdW5hdmFpbGFibGVcIjtcbmV4cG9ydCBjb25zdCBJTlRFUk5BTF9TRVJWRVJfRVJST1JfNTAwX1NUQVRVU19NRVNTQUdFID0gXCJJbnRlcm5hbCBzZXJ2ZXIgZXJyb3JcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBaRVJPXzBfU1RBVFVTX01FU1NBR0UsXG4gIE9LXzIwMF9TVEFUVVNfTUVTU0FHRSxcbiAgRk9VTkRfMzAyX1NUQVRVU19NRVNTQUdFLFxuICBDUkVBVEVEXzIwMV9TVEFUVVNfTUVTU0FHRSxcbiAgU0VFX09USEVSXzMwM19TVEFUVVNfTUVTU0FHRSxcbiAgRk9SQklEREVOXzQwM19TVEFUVVNfTUVTU0FHRSxcbiAgTk9UX0ZPVU5EXzQwNF9TVEFUVVNfTUVTU0FHRSxcbiAgTk9fQ09OVEVOVF8yMDRfU1RBVFVTX01FU1NBR0UsXG4gIEJBRF9HQVRFV0FZXzUwMl9TVEFUVVNfTUVTU0FHRSxcbiAgQkFEX1JFUVVFU1RfNDAwX1NUQVRVU19NRVNTQUdFLFxuICBVTkFVVEhPUklaRURfNDAxX1NUQVRVU19NRVNTQUdFLFxuICBSRVFVRVNUX1RJTUVPVVRfNDA4X1NUQVRVU19NRVNTQUdFLFxuICBUT09fTUFOWV9SRVFVRVNUU180MjlfU1RBVFVTX01FU1NBR0UsXG4gIFNFUlZJQ0VfVU5BVkFJTEFCTEVfNTAzX1NUQVRVU19NRVNTQUdFLFxuICBJTlRFUk5BTF9TRVJWRVJfRVJST1JfNTAwX1NUQVRVU19NRVNTQUdFXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgWkVSTyA9IFwiMFwiO1xuZXhwb3J0IGNvbnN0IERBVEEgPSBcImRhdGFcIjtcbmV4cG9ydCBjb25zdCBFUlJPUiA9IFwiZXJyb3JcIjtcbmV4cG9ydCBjb25zdCBTVFJJTkcgPSBcInN0cmluZ1wiO1xuZXhwb3J0IGNvbnN0IE5VTUJFUiA9IFwibnVtYmVyXCI7XG5leHBvcnQgY29uc3QgQk9PTEVBTiA9IFwiYm9vbGVhblwiO1xuZXhwb3J0IGNvbnN0IERFRkFVTFQgPSBcImRlZmF1bHRcIjtcbmV4cG9ydCBjb25zdCBFTlZJUk9OTUVOVCA9IFwiRU5WSVJPTk1FTlRcIjtcbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfSlNPTiA9IFwicGFja2FnZS5qc29uXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbMF07fVxuXG5leHBvcnQgZnVuY3Rpb24gc2Vjb25kKGFycmF5KSB7IHJldHVybiBhcnJheVsxXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gdGhpcmQoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzJdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3VydGgoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzNdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWZ0aChhcnJheSkgeyByZXR1cm4gYXJyYXlbNF07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpZnRoTGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gNV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvdXJ0aExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDRdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGlyZExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDNdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWNvbmRMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAyXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZmlyc3RMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gbGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGhlYWQoYXJyYXkpIHsgcmV0dXJuIGFycmF5LnNsaWNlKDAsIDEpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWlsKGFycmF5KSB7IHJldHVybiBhcnJheS5zbGljZSgxKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gYmFjayhhcnJheSkgeyByZXR1cm4gYXJyYXkuc2xpY2UoYXJyYXkubGVuZ3RoIC0gMSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb250KGFycmF5KSB7IHJldHVybiBhcnJheS5zbGljZSgwLCBNYXRoLm1heCgxLCBhcnJheS5sZW5ndGggLSAxKSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHB1c2goYXJyYXlBLCBhcnJheUIpIHsgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoYXJyYXlBLCBhcnJheUIpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnNoaWZ0KGFycmF5QSwgYXJyYXlCKSB7IEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGFycmF5QSwgYXJyYXlCKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0KGFycmF5QSwgZWxlbWVudE9yQXJyYXkyKSB7XG4gIGNvbnN0IGFycmF5QiA9IChlbGVtZW50T3JBcnJheTIgaW5zdGFuY2VvZiBBcnJheSkgP1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50T3JBcnJheTIgOlxuICAgICAgICAgICAgICAgICAgICAgWyBlbGVtZW50T3JBcnJheTIgXTtcbiAgXG4gIHB1c2goYXJyYXlBLCBhcnJheUIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXIoYXJyYXkpIHtcbiAgY29uc3Qgc3RhcnQgPSAwO1xuICBcbiAgcmV0dXJuIGFycmF5LnNwbGljZShzdGFydCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KGFycmF5QSwgYXJyYXlCKSB7XG4gIGNvbnN0IHN0YXJ0ID0gMCxcbiAgICAgICAgZGVsZXRlQ291bnQgPSBhcnJheUIubGVuZ3RoOyAgLy8vXG4gIFxuICBzcGxpY2UoYXJyYXlBLCBzdGFydCwgZGVsZXRlQ291bnQsIGFycmF5Qik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZShhcnJheUEsIGFycmF5QikgeyBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShhcnJheUEsIGFycmF5Qik7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoKGFycmF5QSwgYXJyYXlCLCBjYWxsYmFjaykge1xuICBsZXQgbWF0Y2hlcyA9IGZhbHNlO1xuXG4gIGNvbnN0IGFycmF5QUxlbmd0aCA9IGFycmF5QS5sZW5ndGgsXG4gICAgICAgIGFycmF5Qkxlbmd0aCA9IGFycmF5Qi5sZW5ndGg7XG5cbiAgaWYgKGFycmF5QUxlbmd0aCA9PT0gYXJyYXlCTGVuZ3RoKSB7XG4gICAgbWF0Y2hlcyA9IGFycmF5QS5ldmVyeSgoZWxlbWVudEEsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50QiA9IGFycmF5QltpbmRleF0sXG4gICAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50QSwgZWxlbWVudEIsIGluZGV4KTtcblxuICAgICAgaWYgKHBhc3NlZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBtYXRjaGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZChhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgZWxlbWVudHMgPSBbXTtcblxuICBmb3J3YXJkc0ZvckVhY2goYXJyYXksIChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlKGFycmF5LCBlbGVtZW50LCBjYWxsYmFjaykge1xuICBsZXQgc3RhcnQ7XG4gIFxuICBjb25zdCBmb3VuZCA9IGFycmF5LnNvbWUoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgc3RhcnQgPSBpbmRleDsgIC8vL1xuICAgICAgXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuICBcbiAgaWYgKGZvdW5kKSB7XG4gICAgY29uc3QgZGVsZXRlQ291bnQgPSAxO1xuXG4gICAgYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCwgZWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gZm91bmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGxpY2UoYXJyYXlBLCBzdGFydCwgZGVsZXRlQ291bnQgPSBJbmZpbml0eSwgYXJyYXlCID0gW10pIHtcbiAgY29uc3QgYXJncyA9IFsgc3RhcnQsIGRlbGV0ZUNvdW50LCAuLi5hcnJheUIgXSxcbiAgICAgICAgZGVsZXRlZEVsZW1lbnRzID0gQXJyYXkucHJvdG90eXBlLnNwbGljZS5hcHBseShhcnJheUEsIGFyZ3MpO1xuXG4gIHJldHVybiBkZWxldGVkRWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXIoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGRlbGV0ZWRFbGVtZW50cyA9IFtdO1xuICBcbiAgYmFja3dhcmRzRm9yRWFjaChhcnJheSwgKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKCFwYXNzZWQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gaW5kZXgsICAvLy9cbiAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMSxcbiAgICAgICAgICAgIGRlbGV0ZWRFbGVtZW50cyA9IGFycmF5LnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpLFxuICAgICAgICAgICAgZmlyc3REZWxldGVkRWxlbWVudCA9IGZpcnN0KGRlbGV0ZWRFbGVtZW50cyk7XG4gICAgICBcbiAgICAgIGRlbGV0ZWRFbGVtZW50cy51bnNoaWZ0KGZpcnN0RGVsZXRlZEVsZW1lbnQpOyAgLy8vXG4gICAgfVxuICB9KTtcbiAgXG4gIHJldHVybiBkZWxldGVkRWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcnVuZShhcnJheSwgY2FsbGJhY2spIHtcbiAgbGV0IGRlbGV0ZWRFbGVtZW50ID0gdW5kZWZpbmVkO1xuICBcbiAgYXJyYXkuc29tZSgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxLFxuICAgICAgICAgICAgZGVsZXRlZEVsZW1lbnRzID0gYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCksXG4gICAgICAgICAgICBmaXJzdERlbGV0ZWRFbGVtZW50ID0gZmlyc3QoZGVsZXRlZEVsZW1lbnRzKTtcbiAgICAgIFxuICAgICAgZGVsZXRlZEVsZW1lbnQgPSBmaXJzdERlbGV0ZWRFbGVtZW50OyAgLy8vXG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG4gIFxuICByZXR1cm4gZGVsZXRlZEVsZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0KGFycmF5LCBjYWxsYmFjaykge1xuICBsZXQgZGVsZXRlZEVsZW1lbnQgPSB1bmRlZmluZWQ7XG5cbiAgYXJyYXkuc29tZSgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICBjb25zdCBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IDEsXG4gICAgICAgICAgICBkZWxldGVkRWxlbWVudHMgPSBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KSxcbiAgICAgICAgICAgIGZpcnN0RGVsZXRlZEVsZW1lbnQgPSBmaXJzdChkZWxldGVkRWxlbWVudHMpO1xuXG4gICAgICBkZWxldGVkRWxlbWVudCA9IGZpcnN0RGVsZXRlZEVsZW1lbnQ7ICAvLy9cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZGVsZXRlZEVsZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRjaChhcnJheSwgZWxlbWVudCwgY2FsbGJhY2spIHtcbiAgY29uc3QgZm91bmQgPSBhcnJheS5zb21lKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cblxuICBpZiAoZm91bmQpIHtcbiAgICBhcnJheS5wdXNoKGVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGZvdW5kO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHJlc3MoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGxldCBpbmRleDEgPSAwLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlIChpbmRleDEgPCBsZW5ndGgpIHtcbiAgICBjb25zdCBlbGVtZW50QiA9IGFycmF5W2luZGV4MV07XG5cbiAgICBmb3IgKGxldCBpbmRleDIgPSBsZW5ndGggLSAxOyBpbmRleDIgPiBpbmRleDE7IGluZGV4Mi0tKSB7XG4gICAgICBjb25zdCBlbGVtZW50QSA9IGFycmF5W2luZGV4Ml0sXG4gICAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50QSwgZWxlbWVudEIpO1xuXG4gICAgICBpZiAocGFzc2VkKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gaW5kZXgyLCAvLy9cbiAgICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxO1xuXG4gICAgICAgIGFycmF5LnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGluZGV4MSsrO1xuXG4gICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lKGFycmF5QSwgYXJyYXlCLCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheSA9IFtcbiAgICAuLi5hcnJheUEsXG4gICAgLi4uYXJyYXlCXG4gIF07XG5cbiAgY29tcHJlc3MoYXJyYXksIGNhbGxiYWNrKTtcblxuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdWdtZW50KGFycmF5QSwgYXJyYXlCLCBjYWxsYmFjaykge1xuICBhcnJheUIuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICBhcnJheUEucHVzaChlbGVtZW50KTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VwYXJhdGUoYXJyYXksIGFycmF5QSwgYXJyYXlCLCBjYWxsYmFjaykge1xuICBhcnJheS5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIHBhc3NlZCA/XG4gICAgICBhcnJheUEucHVzaChlbGVtZW50KSA6XG4gICAgICAgIGFycmF5Qi5wdXNoKGVsZW1lbnQpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRzRmluZChhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGaW5kKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNTb21lKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgIHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcbiAgICBcbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNTb21lKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNFdmVyeShhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRXZlcnkoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGFycmF5TGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZvciAobGV0IGluZGV4ID0gYXJyYXlMZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNSZWR1Y2UoYXJyYXksIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgbGV0IHZhbHVlID0gaW5pdGlhbFZhbHVlOyAvLy9cblxuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgdmFsdWUgPSBjYWxsYmFjayh2YWx1ZSwgZWxlbWVudCwgaW5kZXgpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzUmVkdWNlKGFycmF5LCBjYWxsYmFjaywgaW5pdGlhbFZhbHVlKSB7XG4gIGxldCB2YWx1ZSA9IGluaXRpYWxWYWx1ZTsgLy8vXG5cbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSBhcnJheUxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4LS0pIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgdmFsdWUgPSBjYWxsYmFjayh2YWx1ZSwgZWxlbWVudCwgaW5kZXgpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBmaXJzdCxcbiAgc2Vjb25kLFxuICB0aGlyZCxcbiAgZm91cnRoLFxuICBmaWZ0aCxcbiAgZmlmdGhMYXN0LFxuICBmb3VydGhMYXN0LFxuICB0aGlyZExhc3QsXG4gIHNlY29uZExhc3QsXG4gIGZpcnN0TGFzdCxcbiAgbGFzdCxcbiAgaGVhZCxcbiAgdGFpbCxcbiAgYmFjayxcbiAgZnJvbnQsXG4gIHB1c2gsXG4gIHVuc2hpZnQsXG4gIGNvbmNhdCxcbiAgY2xlYXIsXG4gIGNvcHksXG4gIG1lcmdlLFxuICBtYXRjaCxcbiAgZmluZCxcbiAgcmVwbGFjZSxcbiAgc3BsaWNlLFxuICBmaWx0ZXIsXG4gIHBydW5lLFxuICBleHRyYWN0LFxuICBwYXRjaCxcbiAgY29tcHJlc3MsXG4gIGNvbWJpbmUsXG4gIGF1Z21lbnQsXG4gIHNlcGFyYXRlLFxuICBmb3J3YXJkc0ZpbmQsXG4gIGJhY2t3YXJkc0ZpbmQsXG4gIGZvcndhcmRzU29tZSxcbiAgYmFja3dhcmRzU29tZSxcbiAgZm9yd2FyZHNFdmVyeSxcbiAgYmFja3dhcmRzRXZlcnksXG4gIGZvcndhcmRzUmVkdWNlLFxuICBiYWNrd2FyZHNSZWR1Y2UsXG4gIGZvcndhcmRzRm9yRWFjaCxcbiAgYmFja3dhcmRzRm9yRWFjaFxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZmlyc3QsIHNlY29uZCwgbGFzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aE5hbWUocGF0aCkge1xuICBwYXRoID0gcGF0aC5yZXBsYWNlKC9eXFwvLywgRU1QVFlfU1RSSU5HKS5yZXBsYWNlKC9cXC8kLywgRU1QVFlfU1RSSU5HKTsgLy8vXG5cbiAgY29uc3QgcGF0aE5hbWUgPSAoL1xcLy8udGVzdChwYXRoKSA9PT0gZmFsc2UpO1xuXG4gIHJldHVybiBwYXRoTmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aFRvcG1vc3ROYW1lKHBhdGgpIHtcbiAgY29uc3QgcGF0aE5hbWUgPSBpc1BhdGhOYW1lKHBhdGgpLFxuICAgICAgICBwYXRoQWJzb2x1dGVQYXRoID0gaXNQYXRoQWJzb2x1dGVQYXRoKHBhdGgpLFxuICAgICAgICBwYXRoVG9wbW9zdE5hbWUgPSAocGF0aE5hbWUgJiYgcGF0aEFic29sdXRlUGF0aCk7XG5cbiAgcmV0dXJuIHBhdGhUb3Btb3N0TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aFJlbGF0aXZlUGF0aChwYXRoKSB7XG4gIGNvbnN0IHBhdGhSZWxhdGl2ZVBhdGggPSAhL15cXC8vLnRlc3QocGF0aCk7XG5cbiAgcmV0dXJuIHBhdGhSZWxhdGl2ZVBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BhdGhBYnNvbHV0ZVBhdGgocGF0aCkge1xuICBjb25zdCBwYXRoQWJzb2x1dGVQYXRoID0gL15cXC8vLnRlc3QocGF0aCk7XG5cbiAgcmV0dXJuIHBhdGhBYnNvbHV0ZVBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RvcG1vc3ROYW1lSW5BYnNvbHV0ZVBhdGgodG9wbW9zdE5hbWUsIGFic29sdXRlUGF0aCkge1xuICBjb25zdCByZWdFeHAgPSBuZXcgUmVnRXhwKGBeJHt0b3Btb3N0TmFtZX0oPzpcXFxcLy4rKT8kYCksXG4gICAgICAgIHRvcG1vc3ROYW1lSW5BYnNvbHV0ZVBhdGggPSByZWdFeHAudGVzdChhYnNvbHV0ZVBhdGgpO1xuXG4gIHJldHVybiB0b3Btb3N0TmFtZUluQWJzb2x1dGVQYXRoXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lUGF0aHMocGF0aCwgcmVsYXRpdmVQYXRoKSB7XG4gIGxldCBjb21iaW5lZFBhdGggPSBudWxsO1xuXG4gIGNvbnN0IHBhdGhOYW1lcyA9IHBhdGguc3BsaXQoL1xcLy8pLFxuICAgICAgICByZWxhdGl2ZVBhdGhOYW1lcyA9IHJlbGF0aXZlUGF0aC5zcGxpdCgvXFwvLyk7XG5cbiAgbGV0IGxhc3RQYXRoTmFtZSxcbiAgICAgIGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9IGZpcnN0KHJlbGF0aXZlUGF0aE5hbWVzKTtcblxuICBpZiAoZmlyc3RSZWxhdGl2ZVBhdGhOYW1lID09PSBcIi5cIikge1xuICAgIHJlbGF0aXZlUGF0aE5hbWVzLnNoaWZ0KCk7XG4gIH1cblxuICBmaXJzdFJlbGF0aXZlUGF0aE5hbWUgPSBmaXJzdChyZWxhdGl2ZVBhdGhOYW1lcyk7XG4gIGxhc3RQYXRoTmFtZSA9IGxhc3QocGF0aE5hbWVzKTtcblxuICB3aGlsZSAoKGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9PT0gXCIuLlwiKSAmJiAobGFzdFBhdGhOYW1lICE9PSB1bmRlZmluZWQpKSB7XG4gICAgcmVsYXRpdmVQYXRoTmFtZXMuc2hpZnQoKTtcbiAgICBwYXRoTmFtZXMucG9wKCk7XG5cbiAgICBmaXJzdFJlbGF0aXZlUGF0aE5hbWUgPSBmaXJzdChyZWxhdGl2ZVBhdGhOYW1lcyk7XG4gICAgbGFzdFBhdGhOYW1lID0gbGFzdChwYXRoTmFtZXMpO1xuICB9XG5cbiAgaWYgKGxhc3RQYXRoTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgY29tYmluZWRQYXRoTmFtZXMgPSBbXS5jb25jYXQocGF0aE5hbWVzKS5jb25jYXQocmVsYXRpdmVQYXRoTmFtZXMpO1xuXG4gICAgY29tYmluZWRQYXRoID0gY29tYmluZWRQYXRoTmFtZXMuam9pbihcIi9cIik7XG4gIH1cblxuICByZXR1cm4gY29tYmluZWRQYXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0ZW5hdGVQYXRocyhwYXRoLCByZWxhdGl2ZVBhdGgpIHtcbiAgcGF0aCA9IHBhdGgucmVwbGFjZSgvXFwvJC8sIEVNUFRZX1NUUklORyk7ICAvLy9cblxuICBjb25zdCBjb25jYXRlbmF0ZWRQYXRoID0gYCR7cGF0aH0vJHtyZWxhdGl2ZVBhdGh9YDtcblxuICByZXR1cm4gY29uY2F0ZW5hdGVkUGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJvdHRvbW1vc3ROYW1lRnJvbVBhdGgocGF0aCkge1xuICBsZXQgYm90dG9tbW9zdE5hbWUgPSBudWxsO1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBwYXRoLm1hdGNoKC9eLipcXC8oW15cXC9dK1xcLz8pJC8pO1xuXG4gIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyk7XG5cbiAgICBib3R0b21tb3N0TmFtZSA9IHNlY29uZE1hdGNoOyAgLy8vXG4gIH1cblxuICByZXR1cm4gYm90dG9tbW9zdE5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b3Btb3N0RGlyZWN0b3J5UGF0aEZyb21QYXRoKHBhdGgpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IHBhdGgubWF0Y2goL14oLispXFwvW15cXC9dK1xcLz8kLyksXG4gICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICB0b3Btb3N0RGlyZWN0b3J5UGF0aCA9IHNlY29uZE1hdGNoOyAvLy9cblxuICByZXR1cm4gdG9wbW9zdERpcmVjdG9yeVBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoKHBhdGgpIHtcbiAgbGV0IHRvcG1vc3REaXJlY3RvcnlOYW1lID0gbnVsbDtcblxuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXihbXlxcL10rKVxcLy4rJC8pO1xuXG4gIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyk7XG5cbiAgICB0b3Btb3N0RGlyZWN0b3J5TmFtZSA9IHNlY29uZE1hdGNoOyAgLy8vXG4gIH1cblxuICByZXR1cm4gdG9wbW9zdERpcmVjdG9yeU5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lRnJvbVBhdGgocGF0aCkge1xuICBsZXQgcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZSA9IG51bGw7XG5cbiAgY29uc3QgbWF0Y2hlcyA9IHBhdGgubWF0Y2goL14oLiopXFwvW15cXC9dK1xcLz8kLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWUgPSBzZWNvbmRNYXRjaDsgLy8vXG4gIH1cblxuICByZXR1cm4gcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aChwYXRoKSB7XG4gIGxldCBwYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lID0gbnVsbDtcblxuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXlteXFwvXStcXC8oLispJC8pO1xuXG4gIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyk7XG5cbiAgICBwYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lID0gc2Vjb25kTWF0Y2g7XG4gIH1cblxuICByZXR1cm4gcGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc1BhdGhOYW1lLFxuICBpc1BhdGhUb3Btb3N0TmFtZSxcbiAgaXNQYXRoUmVsYXRpdmVQYXRoLFxuICBpc1BhdGhBYnNvbHV0ZVBhdGgsXG4gIGlzVG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCxcbiAgY29tYmluZVBhdGhzLFxuICBjb25jYXRlbmF0ZVBhdGhzLFxuICBib3R0b21tb3N0TmFtZUZyb21QYXRoLFxuICB0b3Btb3N0RGlyZWN0b3J5UGF0aEZyb21QYXRoLFxuICB0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoLFxuICBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lRnJvbVBhdGgsXG4gIHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aFxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc2Vjb25kIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgQ09MT05fQ0hBUkFDVEVSLCBBTVBFUlNBTkRfQ0hBUkFDVEVSIH0gZnJvbSBcIi4uL2NoYXJhY3RlcnNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIG92ZXJ3cml0ZShoZWFkZXJzLCBuYW1lLCB2YWx1ZSkge1xuICBjb25zdCBsb3dlckNhc2VOYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBleGlzdGluZ05hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGVhZGVycyksICAvLy9cbiAgICAgICAgZXhpc3RpbmdOYW1lID0gZXhpc3RpbmdOYW1lcy5maW5kKChleGlzdGluZ05hbWUpID0+IHtcbiAgICAgICAgICBjb25zdCBleGlzdGluZ0xvd2VyQ2FzZU5hbWUgPSBleGlzdGluZ05hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgIGlmIChleGlzdGluZ0xvd2VyQ2FzZU5hbWUgPT09IGxvd2VyQ2FzZU5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkgfHwgbnVsbDtcblxuICBpZiAoZXhpc3RpbmdOYW1lICE9PSBudWxsKSB7XG4gICAgaGVhZGVyc1tleGlzdGluZ05hbWVdID0gdmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuZGVyd3JpdGUoaGVhZGVycywgbmFtZSwgdmFsdWUpIHtcbiAgY29uc3QgbG93ZXJDYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgZXhpc3RpbmdOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlYWRlcnMpLCAgLy8vXG4gICAgICAgIGV4aXN0aW5nTmFtZSA9IGV4aXN0aW5nTmFtZXMuZmluZCgoZXhpc3RpbmdOYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdMb3dlckNhc2VOYW1lID0gZXhpc3RpbmdOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICBpZiAoZXhpc3RpbmdMb3dlckNhc2VOYW1lID09PSBsb3dlckNhc2VOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pIHx8IG51bGw7XG5cbiAgaWYgKGV4aXN0aW5nTmFtZSA9PT0gbnVsbCkge1xuICAgIGhlYWRlcnNbbmFtZV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9ydEZyb21Ib3N0KGhvc3QpIHtcbiAgbGV0IHBvcnQ7XG5cbiAgY29uc3QgbWF0Y2hlcyA9IGhvc3QubWF0Y2goL15odHRwcz86XFwvXFwvKFteXFwvXSspLyksXG4gICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICBpbmRleCA9IHNlY29uZE1hdGNoLmluZGV4T2YoQ09MT05fQ0hBUkFDVEVSKTtcblxuICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgY29uc3Qgc2VjdXJlID0gc2VjdXJlRnJvbUhvc3QoaG9zdCk7XG5cbiAgICBwb3J0ID0gc2VjdXJlID8gNDQzIDogODA7IC8vL1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHN0YXJ0ID0gaW5kZXggKyAxLFxuICAgICAgICAgIHBvcnRTdHJpbmcgPSBzZWNvbmRNYXRjaC5zdWJzdHJpbmcoc3RhcnQpO1xuXG4gICAgcG9ydCA9IE51bWJlcihwb3J0U3RyaW5nKTtcbiAgfVxuXG4gIHJldHVybiBwb3J0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VjdXJlRnJvbUhvc3QoaG9zdCkge1xuICBjb25zdCBzZWN1cmUgPSAvXmh0dHBzOlxcL1xcLy8udGVzdChob3N0KTtcblxuICByZXR1cm4gc2VjdXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaG9zdG5hbWVGcm9tSG9zdChob3N0KSB7XG4gIGNvbnN0IG1hdGNoZXMgPSBob3N0Lm1hdGNoKC9eaHR0cHM/OlxcL1xcLyhbXjpcXC9dKykvKSxcbiAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgIGhvc3RuYW1lID0gc2Vjb25kTWF0Y2g7IC8vL1xuXG4gIHJldHVybiBob3N0bmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5U3RyaW5nRnJvbVF1ZXJ5KHF1ZXJ5KSB7XG4gIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXMocXVlcnkpLFxuICAgICAgICBuYW1lc0xlbmd0aCA9IG5hbWVzLmxlbmd0aCxcbiAgICAgICAgbGFzdEluZGV4ID0gbmFtZXNMZW5ndGggLSAxLFxuICAgICAgICBxdWVyeVN0cmluZyA9IG5hbWVzLnJlZHVjZSgocXVlcnlTdHJpbmcsIG5hbWUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBxdWVyeVtuYW1lXSxcbiAgICAgICAgICAgICAgICBlbmNvZGVkTmFtZSA9IGVuY29kZVVSSUNvbXBvbmVudChuYW1lKSxcbiAgICAgICAgICAgICAgICBlbmNvZGVkVmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpLFxuICAgICAgICAgICAgICAgIGFtcGVyc2FuZE9yTm90aGluZyA9IChpbmRleCAhPT0gbGFzdEluZGV4KSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTVBFUlNBTkRfQ0hBUkFDVEVSIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU1QVFlfU1RSSU5HO1xuICBcbiAgICAgICAgICBxdWVyeVN0cmluZyArPSBgJHtlbmNvZGVkTmFtZX09JHtlbmNvZGVkVmFsdWV9JHthbXBlcnNhbmRPck5vdGhpbmd9YDtcbiAgXG4gICAgICAgICAgcmV0dXJuIHF1ZXJ5U3RyaW5nO1xuICAgICAgICB9LCBFTVBUWV9TVFJJTkcpO1xuXG4gIHJldHVybiBxdWVyeVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVybEZyb21Ib3N0VVJJQW5kUXVlcnkoaG9zdCwgdXJpLCBxdWVyeSkge1xuICBjb25zdCBxdWVyeVN0cmluZyA9IHF1ZXJ5U3RyaW5nRnJvbVF1ZXJ5KHF1ZXJ5KSxcbiAgICAgICAgdXJsID0gKHF1ZXJ5U3RyaW5nID09PSBFTVBUWV9TVFJJTkcpID9cbiAgICAgICAgICAgICAgICBgJHtob3N0fSR7dXJpfWAgOlxuICAgICAgICAgICAgICAgICAgYCR7aG9zdH0ke3VyaX0/JHtxdWVyeVN0cmluZ31gO1xuXG4gIHJldHVybiB1cmw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgb3ZlcndyaXRlLFxuICB1bmRlcndyaXRlLFxuICBwb3J0RnJvbUhvc3QsXG4gIHNlY3VyZUZyb21Ib3N0LFxuICBob3N0bmFtZUZyb21Ib3N0LFxuICBxdWVyeVN0cmluZ0Zyb21RdWVyeSxcbiAgdXJsRnJvbUhvc3RVUklBbmRRdWVyeVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gc3RybGVuKHN0cmluZykge1xuICBsZXQgbGVuZ3RoID0gMDtcblxuICBjb25zdCBpdGVyYXRvciA9IHN0cmluZ1tTeW1ib2wuaXRlcmF0b3JdKCk7XG5cbiAgbGV0IGNoYXJhY3RlciA9IGl0ZXJhdG9yLm5leHQoKTtcblxuICB3aGlsZSAoIWNoYXJhY3Rlci5kb25lKSB7XG4gICAgY2hhcmFjdGVyID0gaXRlcmF0b3IubmV4dCgpO1xuXG4gICAgbGVuZ3RoKytcbiAgfVxuXG4gIHJldHVybiBsZW5ndGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJjbXAoc3RyaW5nQSwgc3RyaW5nQikge1xuICBsZXQgZGlmZmVyZW5jZTtcblxuICBjb25zdCBpdGVyYXRvckEgPSBzdHJpbmdBW1N5bWJvbC5pdGVyYXRvcl0oKSwgLy8vXG4gICAgICAgIGl0ZXJhdG9yQiA9IHN0cmluZ0JbU3ltYm9sLml0ZXJhdG9yXSgpOyAvLy9cblxuICBsZXQgY2hhcmFjdGVyQSA9IGl0ZXJhdG9yQS5uZXh0KCksXG4gICAgICBjaGFyYWN0ZXJCID0gaXRlcmF0b3JCLm5leHQoKSxcbiAgICAgIGNvZGVQb2ludEEsXG4gICAgICBjb2RlUG9pbnRCO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29kZVBvaW50QSA9IGNoYXJhY3RlckEudmFsdWUgPyAvLy9cbiAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJBLnZhbHVlLmNvZGVQb2ludEF0KDApIDpcbiAgICAgICAgICAgICAgICAgICAgIDA7XG4gICAgY29kZVBvaW50QiA9IGNoYXJhY3RlckIudmFsdWUgPyAvLy9cbiAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJCLnZhbHVlLmNvZGVQb2ludEF0KDApIDpcbiAgICAgICAgICAgICAgICAgICAgIDA7XG5cbiAgICBkaWZmZXJlbmNlID0gY29kZVBvaW50QiAtIGNvZGVQb2ludEE7XG5cbiAgICBpZiAoZGlmZmVyZW5jZSAhPT0gMCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKGNoYXJhY3RlckEuZG9uZSB8fCBjaGFyYWN0ZXJCLmRvbmUpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNoYXJhY3RlckEgPSBpdGVyYXRvckEubmV4dCgpO1xuICAgIGNoYXJhY3RlckIgPSBpdGVyYXRvckIubmV4dCgpO1xuICB9XG5cbiAgcmV0dXJuIGRpZmZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmRleE9mKHN0cmluZywgc2VhcmNoU3RyaW5nKSB7XG4gIGxldCBpbmRleCA9IC0xLFxuICAgICAgZm91bmQgPSBmYWxzZTtcblxuICBjb25zdCBzZWFyY2hTdHJpbmdMZW5ndGggPSBzdHJsZW4oc2VhcmNoU3RyaW5nKTtcblxuICBpZiAoc2VhcmNoU3RyaW5nTGVuZ3RoID4gMCkge1xuICAgIGxldCBjaGFyYWN0ZXI7XG5cbiAgICBjb25zdCBpdGVyYXRvciA9IHN0cmluZ1tTeW1ib2wuaXRlcmF0b3JdKCksXG4gICAgICAgICAgc2VhcmNoSXRlcmF0b3IgPSBzZWFyY2hTdHJpbmdbU3ltYm9sLml0ZXJhdG9yXSgpLFxuICAgICAgICAgIHNlYXJjaENoYXJhY3RlciA9IHNlYXJjaEl0ZXJhdG9yLm5leHQoKTtcblxuICAgIGNoYXJhY3RlciA9IGl0ZXJhdG9yLm5leHQoKTtcblxuICAgIGluZGV4Kys7XG5cbiAgICB3aGlsZSAoIWNoYXJhY3Rlci5kb25lKSB7XG4gICAgICBpZiAoY2hhcmFjdGVyLnZhbHVlID09PSBzZWFyY2hDaGFyYWN0ZXIudmFsdWUpIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgICAgICBlbmQgPSBzdGFydCArIHNlYXJjaFN0cmluZ0xlbmd0aCxcbiAgICAgICAgICAgICAgc3ViU3RyaW5nID0gc3Vic3RyaW5nKHN0cmluZywgc3RhcnQsIGVuZCksXG4gICAgICAgICAgICAgIGRpZmZlcmVuY2UgPSBzdHJjbXAoc3ViU3RyaW5nLCBzZWFyY2hTdHJpbmcpO1xuXG4gICAgICAgIGlmIChkaWZmZXJlbmNlID09PSAwKSB7XG4gICAgICAgICAgZm91bmQgPSB0cnVlO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2hhcmFjdGVyID0gaXRlcmF0b3IubmV4dCgpO1xuXG4gICAgICBpbmRleCsrXG4gICAgfVxuICB9XG5cbiAgaWYgKCFmb3VuZCkge1xuICAgIGluZGV4ID0gLTE7XG4gIH1cblxuICByZXR1cm4gaW5kZXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdHJpbmcoc3RyaW5nLCBzdGFydCwgZW5kID0gSW5maW5pdHkpIHtcbiAgbGV0IGluZGV4ID0gMDtcblxuICBjb25zdCBpdGVyYXRvciA9IHN0cmluZ1tTeW1ib2wuaXRlcmF0b3JdKCksXG4gICAgICAgIGNoYXJhY3RlcnMgPSBbXTtcblxuICBsZXQgY2hhcmFjdGVyID0gaXRlcmF0b3IubmV4dCgpO1xuXG4gIHdoaWxlICghY2hhcmFjdGVyLmRvbmUpIHtcbiAgICBpZiAoaW5kZXggPT09IGVuZCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKGluZGV4ID49IHN0YXJ0KSB7XG4gICAgICBjaGFyYWN0ZXJzLnB1c2goY2hhcmFjdGVyLnZhbHVlKTsgLy8vXG4gICAgfVxuXG4gICAgaW5kZXgrK1xuXG4gICAgY2hhcmFjdGVyID0gaXRlcmF0b3IubmV4dCgpO1xuICB9XG5cbiAgY29uc3Qgc3Vic3RyaW5nID0gY2hhcmFjdGVycy5qb2luKEVNUFRZX1NUUklORyk7XG5cbiAgcmV0dXJuIHN1YnN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBzdHJjbXAsXG4gIHN0cmxlbixcbiAgaW5kZXhPZixcbiAgc3Vic3RyaW5nXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gbWlncmF0ZShqc29uLCBtaWdyYXRpb25NYXAsIGxhdGVzdFZlcnNpb24pIHtcbiAgbGV0IHsgdmVyc2lvbiB9ID0ganNvbjtcblxuICB3aGlsZSAodmVyc2lvbiAhPT0gbGF0ZXN0VmVyc2lvbikge1xuICAgIGNvbnN0IG1pZ3JhdGVGdW5jdGlvbiA9IG1pZ3JhdGlvbk1hcFt2ZXJzaW9uXTtcblxuICAgIGpzb24gPSBtaWdyYXRlRnVuY3Rpb24oanNvbik7XG5cbiAgICAoeyB2ZXJzaW9uIH0gPSBqc29uKTtcbiAgfVxuXG4gIHJldHVybiBqc29uO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG1pZ3JhdGVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gd2hpbHN0KG9wZXJhdGlvbiwgZG9uZSwgY29udGV4dCkge1xyXG4gIGxldCBjb3VudCA9IC0xO1xyXG5cclxuICBmdW5jdGlvbiBuZXh0KCkge1xyXG4gICAgY291bnQrKztcclxuXHJcbiAgICBjb25zdCBpbmRleCA9IGNvdW50LCAgLy8vXHJcbiAgICAgICAgICB0ZXJtaW5hdGUgPSBvcGVyYXRpb24obmV4dCwgZG9uZSwgY29udGV4dCwgaW5kZXgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmV4dCgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZm9yRWFjaChhcnJheSwgb3BlcmF0aW9uLCBkb25lLCBjb250ZXh0KSB7XHJcbiAgY29uc3QgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOyAgLy8vXHJcblxyXG4gIGxldCBjb3VudCA9IC0xO1xyXG5cclxuICBmdW5jdGlvbiBuZXh0KCkge1xyXG4gICAgY291bnQrKztcclxuXHJcbiAgICBjb25zdCB0ZXJtaW5hdGUgPSAoY291bnQgPT09IGxlbmd0aCk7XHJcblxyXG4gICAgaWYgKHRlcm1pbmF0ZSkge1xyXG4gICAgICBkb25lKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBpbmRleCA9IGNvdW50LCAgLy8vXHJcbiAgICAgICAgICAgIGVsZW1lbnQgPSBhcnJheVtpbmRleF07XHJcblxyXG4gICAgICBvcGVyYXRpb24oZWxlbWVudCwgbmV4dCwgZG9uZSwgY29udGV4dCwgaW5kZXgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmV4dCgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2VxdWVuY2Uob3BlcmF0aW9ucywgZG9uZSwgY29udGV4dCkge1xyXG4gIGNvbnN0IGxlbmd0aCA9IG9wZXJhdGlvbnMubGVuZ3RoOyAgLy8vXHJcblxyXG4gIGxldCBjb3VudCA9IC0xO1xyXG5cclxuICBmdW5jdGlvbiBuZXh0KCkge1xyXG4gICAgY291bnQrKztcclxuXHJcbiAgICBjb25zdCB0ZXJtaW5hdGUgPSAoY291bnQgPT09IGxlbmd0aCk7XHJcblxyXG4gICAgaWYgKHRlcm1pbmF0ZSkge1xyXG4gICAgICBkb25lKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBpbmRleCA9IGNvdW50LCAgLy8vXHJcbiAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvbnNbaW5kZXhdO1xyXG5cclxuICAgICAgb3BlcmF0aW9uKG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGV2ZW50dWFsbHkob3BlcmF0aW9ucywgZG9uZSwgY29udGV4dCkge1xyXG4gIGNvbnN0IGxlbmd0aCA9IG9wZXJhdGlvbnMubGVuZ3RoOyAgLy8vXHJcblxyXG4gIGxldCBjb3VudCA9IDA7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gbGVuZ3RoKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9wZXJhdGlvbnMuZm9yRWFjaCgob3BlcmF0aW9uLCBpbmRleCkgPT4ge1xyXG4gICAgb3BlcmF0aW9uKG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlcGVhdGVkbHkob3BlcmF0aW9uLCBsZW5ndGgsIGRvbmUsIGNvbnRleHQpIHtcclxuICBsZXQgY291bnQgPSAwO1xyXG5cclxuICBmdW5jdGlvbiBuZXh0KCkge1xyXG4gICAgY291bnQrKztcclxuXHJcbiAgICBjb25zdCB0ZXJtaW5hdGUgPSAoY291bnQgPT09IGxlbmd0aCk7XHJcblxyXG4gICAgaWYgKHRlcm1pbmF0ZSkge1xyXG4gICAgICBkb25lKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICBvcGVyYXRpb24obmV4dCwgZG9uZSwgY29udGV4dCwgaW5kZXgpO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRzRm9yRWFjaChhcnJheSwgb3BlcmF0aW9uLCBkb25lLCBjb250ZXh0KSB7XHJcbiAgY29uc3QgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOyAgLy8vXHJcblxyXG4gIGxldCBjb3VudCA9IC0xO1xyXG5cclxuICBmdW5jdGlvbiBuZXh0KCkge1xyXG4gICAgY291bnQrKztcclxuXHJcbiAgICBjb25zdCB0ZXJtaW5hdGUgPSAoY291bnQgPT09IGxlbmd0aCk7XHJcblxyXG4gICAgaWYgKHRlcm1pbmF0ZSkge1xyXG4gICAgICBkb25lKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBpbmRleCA9IGNvdW50LCAgLy8vXHJcbiAgICAgICAgICAgIGVsZW1lbnQgPSBhcnJheVtpbmRleF07XHJcblxyXG4gICAgICBvcGVyYXRpb24oZWxlbWVudCwgbmV4dCwgZG9uZSwgY29udGV4dCwgaW5kZXgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmV4dCgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRm9yRWFjaChhcnJheSwgb3BlcmF0aW9uLCBkb25lLCBjb250ZXh0KSB7XHJcbiAgY29uc3QgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOyAgLy8vXHJcblxyXG4gIGxldCBjb3VudCA9IGxlbmd0aDtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50LS07XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSAtMSk7XHJcblxyXG4gICAgaWYgKHRlcm1pbmF0ZSkge1xyXG4gICAgICBkb25lKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBpbmRleCA9IGNvdW50LCAgLy8vXHJcbiAgICAgICAgICAgIGVsZW1lbnQgPSBhcnJheVtpbmRleF07XHJcblxyXG4gICAgICBvcGVyYXRpb24oZWxlbWVudCwgbmV4dCwgZG9uZSwgY29udGV4dCwgaW5kZXgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmV4dCgpO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgd2hpbHN0LFxyXG4gIGZvckVhY2gsXHJcbiAgc2VxdWVuY2UsXHJcbiAgZXZlbnR1YWxseSxcclxuICByZXBlYXRlZGx5LFxyXG4gIGZvcndhcmRzRm9yRWFjaCxcclxuICBiYWNrd2FyZHNGb3JFYWNoXHJcbn07XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgR0VUX01FVEhPRCwgUE9TVF9NRVRIT0QgfSBmcm9tIFwiLi4vbWV0aG9kc1wiO1xuaW1wb3J0IHsgQVBQTElDQVRJT05fSlNPTl9DT05URU5UX1RZUEUgfSBmcm9tIFwiLi4vY29udGVudFR5cGVzXCI7XG5pbXBvcnQgeyBBQ0NFUFRfSEVBREVSLCBDT05URU5UX1RZUEVfSEVBREVSIH0gZnJvbSBcIi4uL2hlYWRlcnNcIjtcbmltcG9ydCB7IHVuZGVyd3JpdGUsIHVybEZyb21Ib3N0VVJJQW5kUXVlcnkgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2h0dHBcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldChob3N0LCB1cmksIHF1ZXJ5LCBoZWFkZXJzLCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIGNhbGxiYWNrID0gaGVhZGVyczsgLy8vXG4gICAgaGVhZGVycyA9IHt9O1xuICB9XG5cbiAgY29uc3QgbWV0aG9kID0gR0VUX01FVEhPRCxcbiAgICAgICAgYWNjZXB0ID0gQVBQTElDQVRJT05fSlNPTl9DT05URU5UX1RZUEUsXG4gICAgICAgIGNvbnRlbnQgPSBudWxsO1xuXG4gIHVuZGVyd3JpdGVBY2NlcHRIZWFkZXIoaGVhZGVycywgYWNjZXB0KTtcblxuICByZXF1ZXN0KGhvc3QsIHVyaSwgcXVlcnksIG1ldGhvZCwgaGVhZGVycywgY29udGVudCwgY2FsbGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9zdChob3N0LCB1cmksIHF1ZXJ5LCBoZWFkZXJzLCBjb250ZW50LCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIGNhbGxiYWNrID0gY29udGVudDtcbiAgICBjb250ZW50ID0gaGVhZGVycztcbiAgICBoZWFkZXJzID0ge307XG4gIH1cblxuICBjb25zdCBtZXRob2QgPSBQT1NUX01FVEhPRCxcbiAgICAgICAgYWNjZXB0ID0gQVBQTElDQVRJT05fSlNPTl9DT05URU5UX1RZUEUsXG4gICAgICAgIGNvbnRlbnRUeXBlID0gQVBQTElDQVRJT05fSlNPTl9DT05URU5UX1RZUEU7XG5cbiAgdW5kZXJ3cml0ZUFjY2VwdEhlYWRlcihoZWFkZXJzLCBhY2NlcHQpO1xuXG4gIHVuZGVyd3JpdGVDb250ZW50VHlwZUhlYWRlcihoZWFkZXJzLCBjb250ZW50VHlwZSk7XG5cbiAgcmVxdWVzdChob3N0LCB1cmksIHF1ZXJ5LCBtZXRob2QsIGhlYWRlcnMsIGNvbnRlbnQsIGNhbGxiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcXVlc3QoaG9zdCwgdXJpLCBxdWVyeSwgbWV0aG9kLCBoZWFkZXJzLCBjb250ZW50LCBjYWxsYmFjaykge1xuICBjb25zdCB1cmwgPSB1cmxGcm9tSG9zdFVSSUFuZFF1ZXJ5KGhvc3QsIHVyaSwgcXVlcnkpLFxuICAgICAgICBhY2NlcHQgPSBoZWFkZXJzW0FDQ0VQVF9IRUFERVJdIHx8IG51bGwsXG4gICAgICAgIGNvbnRlbnRUeXBlID0gaGVhZGVyc1tDT05URU5UX1RZUEVfSEVBREVSXSB8fCBudWxsLFxuICAgICAgICB4bWxIdHRwUmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gIGlmIChjb250ZW50VHlwZSA9PT0gQVBQTElDQVRJT05fSlNPTl9DT05URU5UX1RZUEUpIHtcbiAgICBjb25zdCBqc29uID0gY29udGVudCwgIC8vL1xuICAgICAgICAgIGpzb25TdHJpbmcgPSBKU09OLnN0cmluZ2lmeShqc29uKTtcblxuICAgIGNvbnRlbnQgPSBqc29uU3RyaW5nOyAgLy8vXG4gIH1cblxuICB4bWxIdHRwUmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSAoKSA9PiB7XG4gICAgY29uc3QgeyByZWFkeVN0YXRlLCBzdGF0dXMsIHJlc3BvbnNlIH0gPSB4bWxIdHRwUmVxdWVzdCxcbiAgICAgICAgICBzdGF0dXNDb2RlID0gc3RhdHVzO1xuXG4gICAgaWYgKHJlYWR5U3RhdGUgPT0gNCkge1xuICAgICAgbGV0IGNvbnRlbnQgPSByZXNwb25zZTtcblxuICAgICAgaWYgKGFjY2VwdCA9PT0gQVBQTElDQVRJT05fSlNPTl9DT05URU5UX1RZUEUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBqc29uU3RyaW5nID0gY29udGVudCwgIC8vL1xuICAgICAgICAgICAgICAgIGpzb24gPSBKU09OLnBhcnNlKGpzb25TdHJpbmcpO1xuXG4gICAgICAgICAgY29udGVudCA9IGpzb247ICAvLy9cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb250ZW50ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjYWxsYmFjayhjb250ZW50LCBzdGF0dXNDb2RlKTtcbiAgICB9XG4gIH07XG5cbiAgeG1sSHR0cFJlcXVlc3Qub3BlbihtZXRob2QsIHVybCk7XG5cbiAgaWYgKGFjY2VwdCAhPT0gbnVsbCkge1xuICAgIHhtbEh0dHBSZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoQUNDRVBUX0hFQURFUiwgYWNjZXB0KTtcbiAgfVxuXG4gIGlmIChjb250ZW50VHlwZSAhPT0gbnVsbCkge1xuICAgIHhtbEh0dHBSZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoQ09OVEVOVF9UWVBFX0hFQURFUiwgY29udGVudFR5cGUpO1xuICB9XG5cbiAgKGNvbnRlbnQgIT09IG51bGwpID9cbiAgICB4bWxIdHRwUmVxdWVzdC5zZW5kKGNvbnRlbnQpIDpcbiAgICAgIHhtbEh0dHBSZXF1ZXN0LnNlbmQoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBnZXQsXG4gIHBvc3QsXG4gIHJlcXVlc3Rcbn1cblxuZnVuY3Rpb24gdW5kZXJ3cml0ZUFjY2VwdEhlYWRlcihoZWFkZXJzLCBhY2NlcHQpIHtcbiAgY29uc3QgbmFtZSA9IEFDQ0VQVF9IRUFERVIsICAvLy9cbiAgICAgICAgdmFsdWUgPSBhY2NlcHQ7IC8vL1xuXG4gIHVuZGVyd3JpdGUoaGVhZGVycywgbmFtZSwgdmFsdWUpO1xufVxuXG5mdW5jdGlvbiB1bmRlcndyaXRlQ29udGVudFR5cGVIZWFkZXIoaGVhZGVycywgY29udGVudFRZcGUpIHtcbiAgY29uc3QgbmFtZSA9IENPTlRFTlRfVFlQRV9IRUFERVIsICAvLy9cbiAgICAgICAgdmFsdWUgPSBjb250ZW50VFlwZTsgLy8vXG5cbiAgdW5kZXJ3cml0ZShoZWFkZXJzLCBuYW1lLCB2YWx1ZSk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgbGV2ZWxzIH0gZnJvbSBcIi4vbGV2ZWxzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG1ldGhvZHMgfSBmcm9tIFwiLi9tZXRob2RzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGhlYWRlcnMgfSBmcm9tIFwiLi9oZWFkZXJzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGtleUNvZGVzIH0gZnJvbSBcIi4va2V5Q29kZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZW5jb2RpbmdzIH0gZnJvbSBcIi4vZW5jb2RpbmdzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNoYXJhY3RlcnMgfSBmcm9tIFwiLi9jaGFyYWN0ZXJzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHN0YXR1c0NvZGVzIH0gZnJvbSBcIi4vc3RhdHVzQ29kZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY29udGVudFR5cGVzIH0gZnJvbSBcIi4vY29udGVudFR5cGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHN0YXR1c01lc3NhZ2VzIH0gZnJvbSBcIi4vc3RhdHVzTWVzc2FnZXNcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBwYXRoVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3BhdGhcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaHR0cFV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9odHRwXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHN0cmluZ1V0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9zdHJpbmdcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdmVyc2lvblV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy92ZXJzaW9uXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGFzeW5jaHJvbm91c1V0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9hc3luY2hyb25vdXNcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBhamF4VXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FqYXhcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuY29uc3QgeyBMRVNTX1RIQU5fQ0hBUkFDVEVSLCBBTVBFUlNBTkRfQ0hBUkFDVEVSLCBHUkVBVEVSX1RIQU5fQ0hBUkFDVEVSIH0gPSBjaGFyYWN0ZXJzO1xuXG5leHBvcnQgZnVuY3Rpb24gc2FuaXRpc2VDb250ZW50KGNvbnRlbnQpIHtcbiAgY29uc3Qgc2FuaXRpc2VkQ29udGVudCA9IGNvbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvJi9nLCBBTVBFUlNBTkRfQ0hBUkFDVEVSKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC88L2csIExFU1NfVEhBTl9DSEFSQUNURVIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLz4vZywgR1JFQVRFUl9USEFOX0NIQVJBQ1RFUik7XG5cbiAgcmV0dXJuIHNhbml0aXNlZENvbnRlbnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCB0eXBlVHlwZSA9IFwidHlwZVwiO1xuZXhwb3J0IGNvbnN0IG5hbWVUeXBlID0gXCJuYW1lXCI7XG5leHBvcnQgY29uc3QgbnVtYmVyVHlwZSA9IFwibnVtYmVyXCI7XG5leHBvcnQgY29uc3QgY29tbWVudFR5cGUgPSBcImNvbW1lbnRcIjtcbmV4cG9ydCBjb25zdCBlbmRPZkxpbmVUeXBlID0gXCJlbmQtb2YtbGluZVwiO1xuZXhwb3J0IGNvbnN0IHdoaXRlc3BhY2VUeXBlID0gXCJ3aGl0ZXNwYWNlXCI7XG5leHBvcnQgY29uc3Qgc3RyaW5nTGl0ZXJhbFR5cGUgPSBcInN0cmluZy1saXRlcmFsXCI7XG5leHBvcnQgY29uc3QgZW5kT2ZMaW5lQ29tbWVudFR5cGUgPSBgJHtlbmRPZkxpbmVUeXBlfSAke2NvbW1lbnRUeXBlfWA7XG5leHBvcnQgY29uc3Qgc2luZ2xlTGluZUNvbW1lbnRUeXBlID0gYHNpbmdsZS1saW5lICR7Y29tbWVudFR5cGV9YDtcbmV4cG9ydCBjb25zdCByZWd1bGFyRXhwcmVzc2lvblR5cGUgPSBcInJlZ3VsYXItZXhwcmVzc2lvblwiO1xuZXhwb3J0IGNvbnN0IGVuZE9mTXVsdGlMaW5lQ29tbWVudFR5cGUgPSBgZW5kLW9mLW11bHRpLWxpbmUgJHtjb21tZW50VHlwZX1gO1xuZXhwb3J0IGNvbnN0IHN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VHlwZSA9IGBzdGFydC1vZi1tdWx0aS1saW5lICR7Y29tbWVudFR5cGV9YDtcbmV4cG9ydCBjb25zdCBtaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUeXBlID0gYG1pZGRsZS1vZi1tdWx0aS1saW5lICR7Y29tbWVudFR5cGV9YDtcblxuZXhwb3J0IGRlZmF1bHQge1xuICB0eXBlVHlwZSxcbiAgbmFtZVR5cGUsXG4gIG51bWJlclR5cGUsXG4gIGNvbW1lbnRUeXBlLFxuICBlbmRPZkxpbmVUeXBlLFxuICB3aGl0ZXNwYWNlVHlwZSxcbiAgc3RyaW5nTGl0ZXJhbFR5cGUsXG4gIGVuZE9mTGluZUNvbW1lbnRUeXBlLFxuICBzaW5nbGVMaW5lQ29tbWVudFR5cGUsXG4gIHJlZ3VsYXJFeHByZXNzaW9uVHlwZSxcbiAgZW5kT2ZNdWx0aUxpbmVDb21tZW50VHlwZSxcbiAgc3RhcnRPZk11bHRpTGluZUNvbW1lbnRUeXBlLFxuICBtaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUeXBlXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzdHJpbmdVdGlsaXRpZXMsIGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgeyBzYW5pdGlzZUNvbnRlbnQgfSBmcm9tIFwiLi91dGlsaXRpZXMvY29udGVudFwiO1xuaW1wb3J0IHsgY29tbWVudFR5cGUsIGVuZE9mTGluZVR5cGUsIHdoaXRlc3BhY2VUeXBlIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IHN0cmxlbiB9ID0gc3RyaW5nVXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb2tlbiB7XG4gIGNvbnN0cnVjdG9yKHR5cGUsIGNvbnRlbnQsIHNpZ25pZmljYW50KSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50O1xuICAgIHRoaXMuc2lnbmlmaWNhbnQgPSBzaWduaWZpY2FudDtcbiAgfVxuXG4gIGdldFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuXG4gIGdldENvbnRlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudDtcbiAgfVxuICBcbiAgZ2V0Q29udGVudExlbmd0aChuYWl2ZSA9IGZhbHNlKSB7XG4gICAgY29uc3QgY29udGVudExlbmd0aCA9IG5haXZlID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnQubGVuZ3RoIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbih0aGlzLmNvbnRlbnQpOyAvLy9cblxuICAgIHJldHVybiBjb250ZW50TGVuZ3RoO1xuICB9XG5cbiAgaXNTaWduaWZpY2FudCgpIHtcbiAgICByZXR1cm4gdGhpcy5zaWduaWZpY2FudDtcbiAgfVxuICBcbiAgaXNDb21tZW50VG9rZW4oKSB7XG4gICAgY29uc3QgdHlwZUluY2x1ZGVzQ29tbWVudFR5cGUgPSB0aGlzLnR5cGUuaW5jbHVkZXMoY29tbWVudFR5cGUpLFxuICAgICAgICAgIGNvbW1lbnRUb2tlbiA9IHR5cGVJbmNsdWRlc0NvbW1lbnRUeXBlOyAvLy9cblxuICAgIHJldHVybiBjb21tZW50VG9rZW47XG4gIH1cblxuICBpc0VuZE9mTGluZVRva2VuKCkge1xuICAgIGNvbnN0IHR5cGVFbmRPZkxpbmVUeXBlID0gKHRoaXMudHlwZS5pbmNsdWRlcyhlbmRPZkxpbmVUeXBlKSksXG4gICAgICAgICAgZW5kT2ZMaW5lVG9rZW4gPSB0eXBlRW5kT2ZMaW5lVHlwZTsgLy8vXG5cbiAgICByZXR1cm4gZW5kT2ZMaW5lVG9rZW47XG4gIH1cblxuICBpc1doaXRlc3BhY2VUb2tlbigpIHtcbiAgICBjb25zdCB0eXBlV2hpdGVzcGFjZVR5cGUgPSAodGhpcy50eXBlID09PSB3aGl0ZXNwYWNlVHlwZSksXG4gICAgICAgICAgd2hpdGVzcGFjZVRva2VuID0gdHlwZVdoaXRlc3BhY2VUeXBlOyAvLy9cblxuICAgIHJldHVybiB3aGl0ZXNwYWNlVG9rZW47XG4gIH1cblxuICBtYXRjaCh0b2tlbikge1xuICAgIGNvbnN0IHR5cGUgPSB0b2tlbi5nZXRUeXBlKCksXG4gICAgICAgICAgY29udGVudCA9IHRva2VuLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBzaWduaWZpY2FudCA9IHRva2VuLmlzU2lnbmlmaWNhbnQoKSxcbiAgICAgICAgICBtYXRjaGVzID0gKCh0aGlzLnR5cGUgPT09IHR5cGUpICYmICh0aGlzLmNvbnRlbnQgPT09IGNvbnRlbnQpICYmICh0aGlzLnNpZ25pZmljYW50ID09PSBzaWduaWZpY2FudCkpO1xuXG4gICAgcmV0dXJuIG1hdGNoZXM7XG4gIH1cblxuICBhc0hUTUwoKSB7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy50eXBlLCAvLy9cbiAgICAgICAgICBzYW5pdGlzZWRDb250ZW50ID0gc2FuaXRpc2VDb250ZW50KHRoaXMuY29udGVudCksXG4gICAgICAgICAgaHRtbCA9IGA8c3BhbiBjbGFzcz1cIiR7Y2xhc3NOYW1lfVwiPiR7c2FuaXRpc2VkQ29udGVudH08L3NwYW4+YDtcblxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgc3RhdGljIG1hdGNoKENsYXNzLCBjb250ZW50LCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgbGV0IHRva2VuID0gbnVsbDtcblxuICAgIGNvbnN0IHsgcmVndWxhckV4cHJlc3Npb24gfSA9IENsYXNzLFxuICAgICAgICAgIG1hdGNoZXMgPSBjb250ZW50Lm1hdGNoKHJlZ3VsYXJFeHByZXNzaW9uKTtcblxuICAgIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB7IGluZGV4IH0gPSBtYXRjaGVzO1xuXG4gICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgY29uc3QgZmlyc3RNYXRjaCA9IGZpcnN0KG1hdGNoZXMpO1xuXG4gICAgICAgIGNvbnRlbnQgPSBmaXJzdE1hdGNoOyAvLy9cblxuICAgICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gY29udGVudC5sZW5ndGg7IC8vL1xuXG4gICAgICAgIGlmIChjb250ZW50TGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHsgdHlwZSB9ID0gQ2xhc3M7XG5cbiAgICAgICAgICB0b2tlbiA9IG5ldyBDbGFzcyh0eXBlLCBjb250ZW50LCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0b2tlbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGNvbnN0IHsgdHlwZSB9ID0gQ2xhc3MsXG4gICAgICAgICAgdG9rZW4gPSBuZXcgQ2xhc3ModHlwZSwgY29udGVudCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnRBbmRUeXBlKENsYXNzLCBjb250ZW50LCB0eXBlLCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7IHJldHVybiBuZXcgQ2xhc3ModHlwZSwgY29udGVudCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRva2VuIGZyb20gXCIuLi90b2tlblwiO1xuXG5jb25zdCBzaWduaWZpY2FudCA9IHRydWU7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpZ25pZmljYW50VG9rZW4gZXh0ZW5kcyBUb2tlbiB7XG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgaWYgKGNvbnRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGVudCA9IENsYXNzOyAgLy8vXG5cbiAgICAgIENsYXNzID0gU2lnbmlmaWNhbnRUb2tlbjsgLy8vXG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbiA9IFRva2VuLm1hdGNoKENsYXNzLCBjb250ZW50LCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBpZiAoY29udGVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb250ZW50ID0gQ2xhc3M7ICAvLy9cblxuICAgICAgQ2xhc3MgPSBTaWduaWZpY2FudFRva2VuOyAvLy9cbiAgICB9XG5cbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gVG9rZW4uZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnRBbmRUeXBlKENsYXNzLCBjb250ZW50LCB0eXBlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0eXBlID0gY29udGVudDsgLy8vXG5cbiAgICAgIGNvbnRlbnQgPSBDbGFzczsgIC8vL1xuXG4gICAgICBDbGFzcyA9IFNpZ25pZmljYW50VG9rZW47IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW4gPSBUb2tlbi5mcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW47XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFUgPSBcInVcIjtcbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IFNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgVSB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uKSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLnJlZ3VsYXJFeHByZXNzaW9uID0gcmVndWxhckV4cHJlc3Npb247XG4gIH1cbiAgXG4gIGdldFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuICBcbiAgZ2V0UmVndWxhckV4cHJlc3Npb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucmVndWxhckV4cHJlc3Npb247XG4gIH1cblxuICBtYXRjaChjb250ZW50KSB7XG4gICAgbGV0IHNpZ25pZmljYW50VG9rZW4gPSBudWxsO1xuXG4gICAgY29uc3QgbWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2godGhpcy5yZWd1bGFyRXhwcmVzc2lvbik7XG5cbiAgICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgeyBpbmRleCB9ID0gbWF0Y2hlcztcblxuICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0TWF0Y2ggPSBmaXJzdChtYXRjaGVzKTtcblxuICAgICAgICBjb250ZW50ID0gZmlyc3RNYXRjaDsgLy8vXG5cbiAgICAgICAgY29uc3QgY29udGVudExlbmd0aCA9IGNvbnRlbnQubGVuZ3RoOyAvLy9cblxuICAgICAgICBpZiAoY29udGVudExlbmd0aCA+IDApIHtcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuID0gU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudEFuZFR5cGUoY29udGVudCwgdGhpcy50eXBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuO1xuICB9XG4gIFxuICBhc0VudHJ5KCkge1xuICAgIGNvbnN0IGVudHJ5ID0ge30sXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25QYXR0ZXJuID0gYCR7dGhpcy5yZWd1bGFyRXhwcmVzc2lvbn1gO1xuXG4gICAgZW50cnlbdGhpcy50eXBlXSA9IHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybjtcblxuICAgIHJldHVybiBlbnRyeTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVG9rZW4oVG9rZW4pIHtcbiAgICBjb25zdCB7IHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uIH0gPSBUb2tlbixcbiAgICAgICAgICBydWxlID0gbmV3IFJ1bGUodHlwZSwgcmVndWxhckV4cHJlc3Npb24pO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbUVudHJ5KGVudHJ5KSB7XG4gICAgY29uc3QgZW50cnlLZXlzID0gT2JqZWN0LmtleXMoZW50cnkpLFxuICAgICAgICAgIGZpcnN0RW50cnlLZXkgPSBmaXJzdChlbnRyeUtleXMpLFxuICAgICAgICAgIHR5cGUgPSBmaXJzdEVudHJ5S2V5LCAvLy9cbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4gPSBlbnRyeVt0eXBlXSxcbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvbiA9IHJlZ3VsYXJFeHByZXNzaW9uRnJvbVJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybihyZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4pLFxuICAgICAgICAgIHJ1bGUgPSBuZXcgUnVsZSh0eXBlLCByZWd1bGFyRXhwcmVzc2lvbik7XG4gICAgICAgIFxuICAgIHJldHVybiBydWxlOyBcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVHlwZUFuZFJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybih0eXBlLCByZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4pIHtcbiAgICBjb25zdCByZWd1bGFyRXhwcmVzc2lvbiA9IHJlZ3VsYXJFeHByZXNzaW9uRnJvbVJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybihyZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4pLFxuICAgICAgICAgIHJ1bGUgPSBuZXcgUnVsZSh0eXBlLCByZWd1bGFyRXhwcmVzc2lvbik7XG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWd1bGFyRXhwcmVzc2lvbkZyb21SZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4ocmVndWxhckV4cHJlc3Npb25QYXR0ZXJuKSB7XG4gIGNvbnN0IGZsYWdzID0gVSwgIC8vL1xuICAgICAgICByZWdFeHAgPSBuZXcgUmVnRXhwKHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybiwgZmxhZ3MpLFxuICAgICAgICByZWd1bGFyRXhwcmVzc2lvbiA9IHJlZ0V4cDsgLy8vXG5cbiAgcmV0dXJuIHJlZ3VsYXJFeHByZXNzaW9uO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuZXhwb3J0IGNvbnN0IHBsdXMgPSBcIitcIjtcclxuZXhwb3J0IGNvbnN0IGVwc2lsb24gPSAnXHUwM0I1JztcclxuZXhwb3J0IGNvbnN0IHdpbGRjYXJkID0gXCIuXCI7XHJcbmV4cG9ydCBjb25zdCBhc3RlcmlzayA9IFwiKlwiO1xyXG5leHBvcnQgY29uc3QgZWxsaXBzaXMgPSBcIi4uLlwiO1xyXG5leHBvcnQgY29uc3Qgc2VwYXJhdG9yID0gXCI6Oj1cIjtcclxuZXhwb3J0IGNvbnN0IHRlcm1pbmF0b3IgPSBcIjtcIjtcclxuZXhwb3J0IGNvbnN0IHZlcnRpY2FsQmFyID0gXCJ8XCI7XHJcbmV4cG9ydCBjb25zdCBvcGVuQnJhY2tldCA9IFwiKFwiO1xyXG5leHBvcnQgY29uc3QgY2xvc2VCcmFja2V0ID0gXCIpXCI7XHJcbmV4cG9ydCBjb25zdCBxdWVzdGlvbk1hcmsgPSBcIj9cIjtcclxuZXhwb3J0IGNvbnN0IGV4Y2xhbWF0aW9uTWFyayA9IFwiIVwiO1xyXG5leHBvcnQgY29uc3QgTk9fV0hJVEVTUEFDRSA9IFwiPE5PX1dISVRFU1BBQ0U+XCI7XHJcbmV4cG9ydCBjb25zdCBFTkRfT0ZfTElORSA9IFwiPEVORF9PRl9MSU5FPlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIHBsdXMsXHJcbiAgZXBzaWxvbixcclxuICB3aWxkY2FyZCxcclxuICBhc3RlcmlzayxcclxuICBlbGxpcHNpcyxcclxuICBzZXBhcmF0b3IsXHJcbiAgdGVybWluYXRvcixcclxuICB2ZXJ0aWNhbEJhcixcclxuICBvcGVuQnJhY2tldCxcclxuICBjbG9zZUJyYWNrZXQsXHJcbiAgcXVlc3Rpb25NYXJrLFxyXG4gIGV4Y2xhbWF0aW9uTWFyayxcclxuICBOT19XSElURVNQQUNFLFxyXG4gIEVORF9PRl9MSU5FXHJcbn07XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzRnJvbUVudHJpZXMoZW50cmllcykge1xuICBjb25zdCBydWxlcyA9IGVudHJpZXMubWFwKChlbnRyeSkgPT4ge1xuICAgIGNvbnN0IHJ1bGUgPSBSdWxlLmZyb21FbnRyeShlbnRyeSk7XG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfSk7XG5cbiAgcmV0dXJuIHJ1bGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGV4ZXJGcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKSB7XG4gIGNvbnN0IEluQ29tbWVudENsYXNzZXMgPSBJbkNvbW1lbnRDbGFzc2VzRnJvbUNsYXNzKENsYXNzKSxcbiAgICAgICAgTm90SW5Db21tZW50Q2xhc3NlcyA9IE5vdEluQ29tbWVudENsYXNzZXNGcm9tQ2xhc3MoQ2xhc3MpLFxuICAgICAgICBsZXhlciA9IG5ldyBDbGFzcyhydWxlcywgSW5Db21tZW50Q2xhc3NlcywgTm90SW5Db21tZW50Q2xhc3Nlcyk7XG5cbiAgcmV0dXJuIGxleGVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHJ1bGVzRnJvbUVudHJpZXMsXG4gIGxleGVyRnJvbVJ1bGVzXG59O1xuXG5mdW5jdGlvbiBJbkNvbW1lbnRDbGFzc2VzRnJvbUNsYXNzKENsYXNzKSB7XG4gIGNvbnN0IHsgRW5kT2ZMaW5lQ29tbWVudFRva2VuLCBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSA9IENsYXNzO1xuXG4gIGNvbnN0IEluQ29tbWVudENsYXNzZXMgPSBbXG4gICAgRW5kT2ZMaW5lQ29tbWVudFRva2VuLFxuICAgIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLFxuICAgIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuXG4gIF07XG5cbiAgcmV0dXJuIEluQ29tbWVudENsYXNzZXM7XG59XG5cbmZ1bmN0aW9uIE5vdEluQ29tbWVudENsYXNzZXNGcm9tQ2xhc3MoQ2xhc3MpIHtcbiAgY29uc3QgeyBFbmRPZkxpbmVUb2tlbixcbiAgICAgICAgICBXaGl0ZXNwYWNlVG9rZW4sXG4gICAgICAgICAgU2luZ2xlTGluZUNvbW1lbnRUb2tlbixcbiAgICAgICAgICBSZWd1bGFyRXhwcmVzc2lvblRva2VuLFxuICAgICAgICAgIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sXG4gICAgICAgICAgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuLFxuICAgICAgICAgIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiB9ID0gQ2xhc3M7XG5cbiAgY29uc3QgTm90SW5Db21tZW50Q2xhc3NlcyA9IFtcbiAgICBFbmRPZkxpbmVUb2tlbixcbiAgICBXaGl0ZXNwYWNlVG9rZW4sXG4gICAgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbixcbiAgICBTaW5nbGVMaW5lQ29tbWVudFRva2VuLFxuICAgIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4sXG4gICAgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuLFxuICAgIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlblxuICBdO1xuXG4gIHJldHVybiBOb3RJbkNvbW1lbnRDbGFzc2VzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuY29uc3QgZW50cmllcyA9IFtcclxuICB7XHJcbiAgICBcInNwZWNpYWxcIjogXCJeKD86XFxcXHx8XFxcXCh8XFxcXCl8XFxcXD98XFxcXCp8XFxcXCt8XFxcXC5cXFxcLlxcXFwufFxcXFwufDo6PXwhfDt8XHUwM0I1fDxOT19XSElURVNQQUNFPnw8RU5EX09GX0xJTkU+KVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcIm51bWJlclwiOiBcIl4oPzowfFsxLTldWzAtOV0qKVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcIm5hbWVcIjogXCJeW1xcXFx3fl0rXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwidHlwZVwiOiBcIl5cXFxcW1teXFxcXF1dK1xcXFxdXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwidW5hc3NpZ25lZFwiOiBcIl5bXlxcXFxzXStcIlxyXG4gIH1cclxuXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGVudHJpZXM7XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGluQ29tbWVudEZyb21Ub2tlbkFuZEluQ29tbWVudCh0b2tlbiwgaW5Db21tZW50KSB7XG4gIGNvbnN0IHRva2VuQ29tbWVudFRva2VuID0gdG9rZW4uaXNDb21tZW50VG9rZW4oKTtcblxuICBpZiAodG9rZW5Db21tZW50VG9rZW4pIHtcbiAgICBjb25zdCBjb21tZW50VG9rZW4gPSB0b2tlbiwgLy8vXG4gICAgICAgICAgY29tbWVudFRva2VuSW5Db21tZW50UHJlc2VydmluZyA9IGNvbW1lbnRUb2tlbi5pc0luQ29tbWVudFByZXNlcnZpbmcoKTtcblxuICAgIGluQ29tbWVudCA9IGNvbW1lbnRUb2tlbkluQ29tbWVudFByZXNlcnZpbmc7ICAvLy9cbiAgfVxuXG4gIHJldHVybiBpbkNvbW1lbnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IGluQ29tbWVudEZyb21Ub2tlbkFuZEluQ29tbWVudCB9IGZyb20gXCIuLi91dGlsaXRpZXMvdG9rZW5cIjtcclxuaW1wb3J0IHsgcnVsZXNGcm9tRW50cmllcywgbGV4ZXJGcm9tUnVsZXMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2xleGVyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb21tb25MZXhlciB7XHJcbiAgY29uc3RydWN0b3IocnVsZXMsIEluQ29tbWVudENsYXNzZXMsIE5vdEluQ29tbWVudENsYXNzZXMpIHtcclxuICAgIHRoaXMucnVsZXMgPSBydWxlcztcclxuICAgIHRoaXMuSW5Db21tZW50Q2xhc3NlcyA9IEluQ29tbWVudENsYXNzZXM7XHJcbiAgICB0aGlzLk5vdEluQ29tbWVudENsYXNzZXMgPSBOb3RJbkNvbW1lbnRDbGFzc2VzO1xyXG4gIH1cclxuICBcclxuICBnZXRSdWxlcygpIHtcclxuICAgIHJldHVybiB0aGlzLnJ1bGVzO1xyXG4gIH1cclxuXHJcbiAgZ2V0SW5Db21tZW50Q2xhc3NlcygpIHtcclxuICAgIHJldHVybiB0aGlzLkluQ29tbWVudENsYXNzZXM7XHJcbiAgfVxyXG5cclxuICBnZXROb3RJbkNvbW1lbnRDbGFzc2VzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuTm90SW5Db21tZW50Q2xhc3NlcztcclxuICB9XHJcblxyXG4gIHRva2VuaXNlKGNvbnRlbnQsIGluQ29tbWVudCA9IGZhbHNlKSB7XHJcbiAgICBjb25zdCB0b2tlbnMgPSBbXTtcclxuXHJcbiAgICB3aGlsZSAoY29udGVudCAhPT0gRU1QVFlfU1RSSU5HKSB7XHJcbiAgICAgIGxldCB0b2tlbiA9IG51bGw7XHJcblxyXG4gICAgICBjb25zdCBDbGFzc2VzID0gaW5Db21tZW50ID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5JbkNvbW1lbnRDbGFzc2VzIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLk5vdEluQ29tbWVudENsYXNzZXM7XHJcblxyXG4gICAgICBDbGFzc2VzLnNvbWUoKENsYXNzKSA9PiB7XHJcbiAgICAgICAgaWYgKENsYXNzICE9PSBudWxsKSB7XHJcbiAgICAgICAgICB0b2tlbiA9IENsYXNzLm1hdGNoKGNvbnRlbnQpO1xyXG5cclxuICAgICAgICAgIGlmICh0b2tlbiAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKHRva2VuID09PSBudWxsKSB7XHJcbiAgICAgICAgbGV0IHNpZ25pZmljYW50VG9rZW4gPSBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLnJ1bGVzLnNvbWUoKHJ1bGUpID0+IHtcclxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW4gPSBydWxlLm1hdGNoKGNvbnRlbnQpO1xyXG5cclxuICAgICAgICAgIGlmIChzaWduaWZpY2FudFRva2VuICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRva2VuID0gc2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRva2VuID09PSBudWxsKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgY29udGVudCAnJHtjb250ZW50fScgY2Fubm90IGJlIHRva2VuaXNlZC5gKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xyXG5cclxuICAgICAgaW5Db21tZW50ID0gaW5Db21tZW50RnJvbVRva2VuQW5kSW5Db21tZW50KHRva2VuLCBpbkNvbW1lbnQpO1xyXG5cclxuICAgICAgY29uc3QgbmFpdmUgPSB0cnVlLFxyXG4gICAgICAgICAgICB0b2tlbkNvbnRlbnRMZW5ndGggPSB0b2tlbi5nZXRDb250ZW50TGVuZ3RoKG5haXZlKSxcclxuICAgICAgICAgICAgc3RhcnQgPSB0b2tlbkNvbnRlbnRMZW5ndGg7IC8vL1xyXG5cclxuICAgICAgY29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKHN0YXJ0KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdG9rZW5zO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKENsYXNzKSB7XHJcbiAgICBjb25zdCB7IGVudHJpZXMgfSA9IENsYXNzLFxyXG4gICAgICAgICAgcnVsZXMgPSBydWxlc0Zyb21FbnRyaWVzKGVudHJpZXMpLFxyXG4gICAgICAgICAgbGV4ZXIgPSBsZXhlckZyb21SdWxlcyhDbGFzcywgcnVsZXMpO1xyXG5cclxuICAgIHJldHVybiBsZXhlcjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBmcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKSB7XHJcbiAgICBjb25zdCBsZXhlciA9IGxleGVyRnJvbVJ1bGVzKENsYXNzLCBydWxlcyk7XHJcblxyXG4gICAgcmV0dXJuIGxleGVyO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZyb21FbnRyaWVzKENsYXNzLCBlbnRyaWVzKSB7XHJcbiAgICBjb25zdCBydWxlcyA9IHJ1bGVzRnJvbUVudHJpZXMoZW50cmllcyksXHJcbiAgICAgICAgICBsZXhlciA9IGxleGVyRnJvbVJ1bGVzKENsYXNzLCBydWxlcyk7XHJcblxyXG4gICAgcmV0dXJuIGxleGVyO1xyXG4gIH1cclxufVxyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUb2tlbiBmcm9tIFwiLi4vdG9rZW5cIjtcblxuY29uc3Qgc2lnbmlmaWNhbnQgPSBmYWxzZTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uU2lnbmlmaWNhbnRUb2tlbiBleHRlbmRzIFRva2VuIHtcbiAgc3RhdGljIG1hdGNoKENsYXNzLCBjb250ZW50KSB7IHJldHVybiBUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBUb2tlbi5mcm9tQ29udGVudChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50QW5kVHlwZShDbGFzcywgY29udGVudCwgdHlwZSkgeyByZXR1cm4gVG9rZW4uZnJvbUNvbnRlbnRBbmRUeXBlKENsYXNzLCBjb250ZW50LCB0eXBlLCBzaWduaWZpY2FudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IHdoaXRlc3BhY2VUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdoaXRlc3BhY2VUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBzdGF0aWMgdHlwZSA9IHdoaXRlc3BhY2VUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eW1xcdCBdKy87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goV2hpdGVzcGFjZVRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KFdoaXRlc3BhY2VUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uL3Rva2VuL3NpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IHJlZ3VsYXJFeHByZXNzaW9uVHlwZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWd1bGFyRXhwcmVzc2lvblRva2VuIGV4dGVuZHMgU2lnbmlmaWNhbnRUb2tlbiB7XG4gIHN0YXRpYyB0eXBlID0gcmVndWxhckV4cHJlc3Npb25UeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXFwvKD86XFxcXFteXFxzXXxbXlxcL1xcclxcbl0pKlxcLy87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4ubWF0Y2goUmVndWxhckV4cHJlc3Npb25Ub2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChSZWd1bGFyRXhwcmVzc2lvblRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgZW5kT2ZMaW5lVHlwZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGFzSFRNTCgpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXG4gICAgICAgICAgaHRtbCA9IGNvbnRlbnQ7IC8vL1xuXG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IGVuZE9mTGluZVR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14oPzpcXHJcXG58XFxyfFxcbikvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLm1hdGNoKEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3RyaW5nVXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vdG9rZW4vc2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgc3RyaW5nTGl0ZXJhbFR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuY29uc3QgeyBzdWJzdHJpbmcgfSA9IHN0cmluZ1V0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyaW5nTGl0ZXJhbFRva2VuIGV4dGVuZHMgU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGdldFN0cmluZygpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXG4gICAgICAgICAgY29udGVudExlbmd0aCA9IHRoaXMuZ2V0Q29udGVudExlbmd0aCgpLFxuICAgICAgICAgIHN0YXJ0ID0gMSxcbiAgICAgICAgICBlbmQgPSBjb250ZW50TGVuZ3RoIC0gMSxcbiAgICAgICAgICBzdHJpbmcgPSBzdWJzdHJpbmcoY29udGVudCwgc3RhcnQsIGVuZCk7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBzdHJpbmdMaXRlcmFsVHlwZTtcblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3RyaW5nTGl0ZXJhbFRva2VuIGZyb20gXCIuLi8uLi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiBleHRlbmRzIFN0cmluZ0xpdGVyYWxUb2tlbiB7XG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXCIoPzpcXFxcW15cXHNdfFteXCJcXFxcXFxyXFxuXSkqXCIvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTdHJpbmdMaXRlcmFsVG9rZW4ubWF0Y2goRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTdHJpbmdMaXRlcmFsVG9rZW4uZnJvbUNvbnRlbnQoRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IGVudHJpZXMgZnJvbSBcIi4vZW50cmllc1wiO1xyXG5pbXBvcnQgQ29tbW9uTGV4ZXIgZnJvbSBcIi4uL2NvbW1vbi9sZXhlclwiO1xyXG5pbXBvcnQgV2hpdGVzcGFjZVRva2VuIGZyb20gXCIuLi90b2tlbi9ub25TaWduaWZpY2FudC93aGl0ZXNwYWNlXCI7XHJcbmltcG9ydCBSZWd1bGFyRXhwcmVzc2lvblRva2VuIGZyb20gXCIuLi90b2tlbi9zaWduaWZpY2FudC9yZWd1bGFyRXhwcmVzc2lvblwiO1xyXG5pbXBvcnQgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvZW5kT2ZMaW5lXCI7XHJcbmltcG9ydCBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gZnJvbSBcIi4uL3Rva2VuL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWwvZG91Ymx5UXVvdGVkXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCTkZMZXhlciBleHRlbmRzIENvbW1vbkxleGVyIHtcclxuICB0b2tlbnNGcm9tQk5GKGJuZikge1xyXG4gICAgY29uc3QgY29udGVudCA9IGJuZiwgIC8vL1xyXG4gICAgICAgICAgdG9rZW5zID0gc3VwZXIudG9rZW5pc2UoY29udGVudCk7XHJcblxyXG4gICAgcmV0dXJuIHRva2VucztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBlbnRyaWVzID0gZW50cmllcztcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBXaGl0ZXNwYWNlVG9rZW4gPSBXaGl0ZXNwYWNlVG9rZW47XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiA9IFJlZ3VsYXJFeHByZXNzaW9uVG9rZW47XHJcblxyXG4gIHN0YXRpYyBTaW5nbGVMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbjtcclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbU5vdGhpbmcoQk5GTGV4ZXIpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21SdWxlcyhCTkZMZXhlciwgcnVsZXMpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhCTkZMZXhlciwgZW50cmllcyk7IH1cclxufVxyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5jb25zdCBlbnRyaWVzID0gW1xyXG4gIHtcclxuICAgIFwiZGlnaXRcIjogXCJeXFxcXGQrXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwiYnJhY2tldFwiOiBcIl4oPzpcXFxcKHxcXFxcKSlcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJvcGVyYXRvclwiOiBcIl4oPzpcXFxcK3wtfFxcXFwqfFxcXFwvKVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcInVuYXNzaWduZWRcIjogXCJeW15cXFxcc10rXCJcclxuICB9XHJcbl07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBlbnRyaWVzO1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTdHJpbmdMaXRlcmFsVG9rZW4gZnJvbSBcIi4uLy4uL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIGV4dGVuZHMgU3RyaW5nTGl0ZXJhbFRva2VuIHtcbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14nKD86XFxcXFteXFxzXXxbXidcXFxcXFxyXFxuXSkqJy87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFN0cmluZ0xpdGVyYWxUb2tlbi5tYXRjaChTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFN0cmluZ0xpdGVyYWxUb2tlbi5mcm9tQ29udGVudChTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBzaW5nbGVMaW5lQ29tbWVudFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBpc0luQ29tbWVudFByZXNlcnZpbmcoKSB7XG4gICAgY29uc3QgaW5Db21tZW50UHJlc2VydmluZyA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIGluQ29tbWVudFByZXNlcnZpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IHNpbmdsZUxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFB5dGhvblN0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIFNpbmdsZUxpbmVDb21tZW50VG9rZW4ge1xuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXiNbXlxcclxcbl0qLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU2luZ2xlTGluZUNvbW1lbnRUb2tlbi5tYXRjaChQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFNpbmdsZUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoUHl0aG9uU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgZW5kT2ZMaW5lQ29tbWVudFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lQ29tbWVudE5vblNpZ25pZmljYW50VG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCkge1xuICAgIGNvbnN0IGluQ29tbWVudFByZXNlcnZpbmcgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGluQ29tbWVudFByZXNlcnZpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IGVuZE9mTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eKD86XFxyXFxufFxccnxcXG4pLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IGVuZE9mTXVsdGlMaW5lQ29tbWVudFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCkge1xuICAgIGNvbnN0IGluQ29tbWVudFByZXNlcnZpbmcgPSBmYWxzZTtcblxuICAgIHJldHVybiBpbkNvbW1lbnRQcmVzZXJ2aW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBlbmRPZk11bHRpTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2ZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14jIyMvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5tYXRjaChQeXRob25TdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5mcm9tQ29udGVudChQeXRob25TdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgc3RhcnRPZk11bHRpTGluZUNvbW1lbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCkge1xuICAgIGNvbnN0IGluQ29tbWVudFByZXNlcnZpbmcgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGluQ29tbWVudFByZXNlcnZpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IHN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14jIyMvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLm1hdGNoKFB5dGhvblN0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5mcm9tQ29udGVudChQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBtaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGlzSW5Db21tZW50UHJlc2VydmluZygpIHtcbiAgICBjb25zdCBpbkNvbW1lbnRQcmVzZXJ2aW5nID0gdHJ1ZTtcblxuICAgIHJldHVybiBpbkNvbW1lbnRQcmVzZXJ2aW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBtaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2ZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHl0aG9uU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14oPzpbXlxcclxcbl0rPyg/PSMjIyl8W15cXHJcXG5dKykvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5tYXRjaChQeXRob25TdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5mcm9tQ29udGVudChQeXRob25TdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IGVudHJpZXMgZnJvbSBcIi4vZW50cmllc1wiO1xyXG5pbXBvcnQgQ29tbW9uTGV4ZXIgZnJvbSBcIi4uL2NvbW1vbi9sZXhlclwiO1xyXG5pbXBvcnQgV2hpdGVzcGFjZVRva2VuIGZyb20gXCIuLi90b2tlbi9ub25TaWduaWZpY2FudC93aGl0ZXNwYWNlXCI7XHJcbmltcG9ydCBSZWd1bGFyRXhwcmVzc2lvblRva2VuIGZyb20gXCIuLi90b2tlbi9zaWduaWZpY2FudC9yZWd1bGFyRXhwcmVzc2lvblwiO1xyXG5pbXBvcnQgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvZW5kT2ZMaW5lXCI7XHJcbmltcG9ydCBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gZnJvbSBcIi4uL3Rva2VuL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWwvc2luZ2x5UXVvdGVkXCI7XHJcbmltcG9ydCBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gZnJvbSBcIi4uL3Rva2VuL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWwvZG91Ymx5UXVvdGVkXCI7XHJcbmltcG9ydCBQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZS9weXRob25TdHlsZVwiO1xyXG5pbXBvcnQgRW5kT2ZMaW5lQ29tbWVudE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvZW5kT2ZMaW5lXCI7XHJcbmltcG9ydCBQeXRob25TdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZi9weXRob25TdHlsZVwiO1xyXG5pbXBvcnQgUHl0aG9uU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mL3B5dGhvblN0eWxlXCI7XHJcbmltcG9ydCBQeXRob25TdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi9weXRob25TdHlsZVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmFzaWNMZXhlciBleHRlbmRzIENvbW1vbkxleGVyIHtcclxuICBzdGF0aWMgZW50cmllcyA9IGVudHJpZXM7XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVUb2tlbiA9IEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgV2hpdGVzcGFjZVRva2VuID0gV2hpdGVzcGFjZVRva2VuO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lQ29tbWVudFRva2VuID0gRW5kT2ZMaW5lQ29tbWVudE5vblNpZ25pZmljYW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiA9IFJlZ3VsYXJFeHByZXNzaW9uVG9rZW47XHJcblxyXG4gIHN0YXRpYyBTaW5nbGVMaW5lQ29tbWVudFRva2VuID0gUHl0aG9uU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gUHl0aG9uU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gUHl0aG9uU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW47XHJcblxyXG4gIHN0YXRpYyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW47XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21Ob3RoaW5nKEJhc2ljTGV4ZXIpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21SdWxlcyhCYXNpY0xleGVyLCBydWxlcyk7IH1cclxuXHJcbiAgc3RhdGljIGZyb21FbnRyaWVzKGVudHJpZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21FbnRyaWVzKEJhc2ljTGV4ZXIsIGVudHJpZXMpOyB9XHJcbn1cclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vdG9rZW4vc2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgZW5kT2ZMaW5lVHlwZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVTaWduaWZpY2FudFRva2VuIGV4dGVuZHMgU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGFzSFRNTCgpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXG4gICAgICAgICAgaHRtbCA9IGNvbnRlbnQ7IC8vL1xuXG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IGVuZE9mTGluZVR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14oPzpcXHJcXG58XFxyfFxcbikvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLm1hdGNoKEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uL3Rva2VuL3NpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IGVuZE9mTGluZUNvbW1lbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZUNvbW1lbnRTaWduaWZpY2FudFRva2VuIGV4dGVuZHMgU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGlzSW5Db21tZW50UHJlc2VydmluZygpIHtcbiAgICBjb25zdCBpbkNvbW1lbnRQcmVzZXJ2aW5nID0gdHJ1ZTtcblxuICAgIHJldHVybiBpbkNvbW1lbnRQcmVzZXJ2aW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBlbmRPZkxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXig/OlxcclxcbnxcXHJ8XFxuKS87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4ubWF0Y2goRW5kT2ZMaW5lQ29tbWVudFNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoRW5kT2ZMaW5lQ29tbWVudFNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaW5nbGVMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ1N0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIFNpbmdsZUxpbmVDb21tZW50VG9rZW4ge1xuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXlxcL1xcL1teXFxyXFxuXSovO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTaW5nbGVMaW5lQ29tbWVudFRva2VuLm1hdGNoKENTdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFNpbmdsZUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoQ1N0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cXCpcXC8vO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5tYXRjaChDU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoQ1N0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENTdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cXC9cXCovO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLm1hdGNoKENTdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoQ1N0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14oPzpbXlxcclxcbl0rPyg/PVxcKlxcLyl8W15cXHJcXG5dKykvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5tYXRjaChDU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoQ1N0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgUnVsZSB9IGZyb20gXCIuL3J1bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdHlwZXMgfSBmcm9tIFwiLi90eXBlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCIuL3NwZWNpYWxTeW1ib2xzXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgbGV4ZXJVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvbGV4ZXJcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBCTkZMZXhlciB9IGZyb20gXCIuL2JuZi9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCYXNpY0xleGVyIH0gZnJvbSBcIi4vYmFzaWMvbGV4ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29tbW9uTGV4ZXIgfSBmcm9tIFwiLi9jb21tb24vbGV4ZXJcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTm9uU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudC9lbmRPZkxpbmVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2VuZE9mTGluZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFbmRPZkxpbmVDb21tZW50U2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL3NpZ25pZmljYW50L2NvbW1lbnQvZW5kT2ZMaW5lXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVuZE9mTGluZUNvbW1lbnROb25TaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9lbmRPZkxpbmVcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBXaGl0ZXNwYWNlVG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC93aGl0ZXNwYWNlXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3RyaW5nTGl0ZXJhbFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSZWd1bGFyRXhwcmVzc2lvblRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnQvcmVndWxhckV4cHJlc3Npb25cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9zaW5nbHlRdW90ZWRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9kb3VibHlRdW90ZWRcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaW5nbGVMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2ZcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2ZcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZlwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL2NTdHlsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mL2NTdHlsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZi9jU3R5bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ1N0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi9jU3R5bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUHl0aG9uU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL3B5dGhvblN0eWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFB5dGhvblN0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZi9weXRob25TdHlsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mL3B5dGhvblN0eWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFB5dGhvblN0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi9weXRob25TdHlsZVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuY29uc3QgZW50cmllcyA9IFtcclxuXHJcbiAgeyBcImNvbG91clwiOiBcIl4jKD86WzAtOWEtZkEtRl17Nn18WzAtOWEtZkEtRl17M30pXCIgfSxcclxuXHJcbiAgeyBcImtleXdvcmRcIjogXCJeKD86IWltcG9ydGFudHxAbWVkaWEpXCIgfSxcclxuXHJcbiAgeyBcInBlcmNlbnRhZ2VcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKSVcIiB9LFxyXG5cclxuICB7IFwiZnJlcXVlbmN5XCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKykoPzpoenxraHopXCIgfSxcclxuXHJcbiAgeyBcImZyYWN0aW9uXCI6IFwiXlsxLTldWzAtOV0qP2ZyXCIgfSxcclxuXHJcbiAgeyBcImxlbmd0aFwiOiBcIl4oPzpbMC05XSt8WzAtOV0qXFxcXC5bMC05XSspKD86cHh8Y218bW18aW58cHR8cGMpXCIgfSxcclxuXHJcbiAgeyBcImFuZ2xlXCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKykoPzpkZWd8cmFkfGdyYWQpXCIgfSxcclxuXHJcbiAgeyBcInRpbWVcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKSg/OnN8bXMpXCIgfSxcclxuXHJcbiAgeyBcInJlbXNcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKXJlbVwiIH0sXHJcblxyXG4gIHsgXCJlbXNcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKWVtXCIgfSxcclxuXHJcbiAgeyBcIm51bWJlclwiOiBcIl5bMC05XSt8WzAtOV0qXFxcXC5bMC05XStcIiB9LFxyXG5cclxuICB7IFwic3BlY2lhbFwiOiBcIl47fDo6fDp8XFxcXC58LHxcXFxcfD18fj18PXw+fFxcXFx7fFxcXFx9fFxcXFwofFxcXFwpfFxcXFxbfFxcXFxdXCIgfSxcclxuXHJcbiAgeyBcImlkZW50aWZpZXJcIjogXCJeW19hLXpBLVowLTktXStcIiB9LFxyXG5cclxuICB7IFwibG9naWNhbC1vcGVyYXRvclwiOiBcIl5eKD86YW5kfG5vdHxvbmx5KSRcIiB9LFxyXG5cclxuICB7IFwiYXJpdGhtZXRpYy1vcGVyYXRvclwiOiBcIl4tfFxcXFwqfFxcXFwrfFxcXFwvXCIgfSxcclxuXHJcbiAgeyBcInVuYXNzaWduZWRcIjogXCJeW15cXFxcc10rXCIgfVxyXG5cclxuXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGVudHJpZXM7XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IENvbW1vbkxleGVyLCBXaGl0ZXNwYWNlVG9rZW4sIEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4sIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcclxuXHJcbmltcG9ydCBlbnRyaWVzIGZyb20gXCIuL2VudHJpZXNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENTU0xleGVyIGV4dGVuZHMgQ29tbW9uTGV4ZXIge1xyXG4gIHN0YXRpYyBlbnRyaWVzID0gZW50cmllcztcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBXaGl0ZXNwYWNlVG9rZW4gPSBXaGl0ZXNwYWNlVG9rZW47XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVDb21tZW50VG9rZW4gPSBudWxsOyAvLy9cclxuXHJcbiAgc3RhdGljIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7IC8vL1xyXG5cclxuICBzdGF0aWMgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsOyAvLy9cclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsOyAvLy9cclxuXHJcbiAgc3RhdGljIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDsgLy8vXHJcblxyXG4gIHN0YXRpYyBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuO1xyXG5cclxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tTm90aGluZyhDU1NMZXhlcik7IH1cclxuXHJcbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbVJ1bGVzKENTU0xleGVyLCBydWxlcyk7IH1cclxuXHJcbiAgc3RhdGljIGZyb21FbnRyaWVzKGVudHJpZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21FbnRyaWVzKENTU0xleGVyLCBlbnRyaWVzKTsgfVxyXG59XHJcbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cbiAgICAgIGRvY3VtZW50ICAgICAgICAgICAgICAgICA6Oj0gICggcnVsZSB8IGVycm9yICkrIDtcblxuICAgICAgcnVsZSAgICAgICAgICAgICAgICAgICAgIDo6PSAgbmFtZSBhbWJpZ3VvdXNNb2RpZmllcj8gXCI6Oj1cIiBkZWZpbml0aW9ucyBcIjtcIiA7XG5cbiAgICAgIG5hbWUgICAgICAgICAgICAgICAgICAgICA6Oj0gIFtuYW1lXSA7XG5cbiAgICAgIGRlZmluaXRpb25zICAgICAgICAgICAgICA6Oj0gIGRlZmluaXRpb24gKCBcInxcIiBkZWZpbml0aW9uICkqIDtcblxuICAgICAgZGVmaW5pdGlvbiAgICAgICAgICAgICAgIDo6PSAgcGFydCsgcHJlY2VkZW5jZT8gO1xuIFxuICAgICAgcGFydCAgICAgICAgICAgICAgICAgICAgIDo6PSAgbm9uVGVybWluYWxQYXJ0IHF1YW50aWZpZXIqXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHRlcm1pbmFsUGFydCBxdWFudGlmaWVyKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBub1doaXRlc3BhY2VQYXJ0XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuICAgICAgbm9uVGVybWluYWxQYXJ0ICAgICAgICAgIDo6PSAgY2hvaWNlT2ZQYXJ0c1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBzZXF1ZW5jZU9mUGFydHNcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgcnVsZU5hbWUgbG9va0FoZWFkTW9kaWZpZXI/XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuICAgICAgdGVybWluYWxQYXJ0ICAgICAgICAgICAgIDo6PSAgc2lnbmlmaWNhbnRUb2tlblR5cGVcbiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICByZWd1bGFyRXhwcmVzc2lvblxuIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgdGVybWluYWxTeW1ib2xcbiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBlbmRPZkxpbmVcbiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB3aWxkY2FyZFxuICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIGVwc2lsb25cbiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgIG5vV2hpdGVzcGFjZVBhcnQgICAgICAgICA6Oj0gIFwiPE5PX1dISVRFU1BBQ0U+XCIgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG4gICAgICBzZXF1ZW5jZU9mUGFydHMgICAgICAgICAgOjo9ICBcIihcIiBwYXJ0IHBhcnQrIFwiKVwiIDtcblxuICAgICAgY2hvaWNlT2ZQYXJ0cyAgICAgICAgICAgIDo6PSAgXCIoXCIgcGFydENob2ljZSAoIFwifFwiIHBhcnRDaG9pY2UgKSsgXCIpXCIgO1xuXG4gICAgICBwYXJ0Q2hvaWNlICAgICAgICAgICAgICAgOjo9ICBwYXJ0IHByZWNlZGVuY2U/IDtcblxuICAgICAgcnVsZU5hbWUgICAgICAgICAgICAgICAgIDo6PSAgW25hbWVdIDtcblxuICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGUgICAgIDo6PSAgW3R5cGVdIDtcblxuICAgICAgcmVndWxhckV4cHJlc3Npb24gICAgICAgIDo6PSAgW3JlZ3VsYXItZXhwcmVzc2lvbl0gO1xuXG4gICAgICB0ZXJtaW5hbFN5bWJvbCAgICAgICAgICAgOjo9ICBbc3RyaW5nLWxpdGVyYWxdIDtcblxuICAgICAgcHJlY2VkZW5jZSAgICAgICAgICAgICAgIDo6PSAgXCIoXCIgW251bWJlcl0/IFwiKVwiIDtcbiAgICAgIFxuICAgICAgZW5kT2ZMaW5lICAgICAgICAgICAgICAgIDo6PSAgXCI8RU5EX09GX0xJTkU+XCIgO1xuICAgICAgXG4gICAgICB3aWxkY2FyZCAgICAgICAgICAgICAgICAgOjo9ICBcIi5cIiA7XG5cbiAgICAgIGVwc2lsb24gICAgICAgICAgICAgICAgICA6Oj0gIFwiXHUwM0I1XCIgO1xuXG4gICAgICBxdWFudGlmaWVyICAgICAgICAgICAgICAgOjo9ICBvcHRpb25hbFF1YW50aWZpZXJcbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG9uZU9yTW9yZVF1YW50aWZpZXJcbiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB6ZXJvT3JNb3JlUXVhbnRpZmllclxuICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuICAgICAgYW1iaWd1b3VzTW9kaWZpZXIgICAgICAgIDo6PSAgPE5PX1dISVRFU1BBQ0U+XCIhXCIgO1xuXG4gICAgICBsb29rQWhlYWRNb2RpZmllciAgICAgICAgOjo9ICA8Tk9fV0hJVEVTUEFDRT5cIi4uLlwiIDtcblxuICAgICAgb3B0aW9uYWxRdWFudGlmaWVyICAgICAgIDo6PSAgPE5PX1dISVRFU1BBQ0U+XCI/XCIgO1xuXG4gICAgICBvbmVPck1vcmVRdWFudGlmaWVyICAgICAgOjo9ICA8Tk9fV0hJVEVTUEFDRT5cIitcIiA7XG5cbiAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyICAgICA6Oj0gIDxOT19XSElURVNQQUNFPlwiKlwiIDtcblxuICAgICAgZXJyb3IhICAgICAgICAgICAgICAgICAgIDo6PSAgLiA7XG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGJuZjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNoYXJhY3RlcnMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBTUEFDRV9DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWRkaW5nRnJvbVBhZGRpbmdMZW5ndGgocGFkZGluZ0xlbmd0aCkge1xuICBsZXQgcGFkZGluZyA9IEVNUFRZX1NUUklORztcblxuICBmb3IgKGxldCBwb3NpdGlvbiA9IDA7IHBvc2l0aW9uIDwgcGFkZGluZ0xlbmd0aDsgcG9zaXRpb24rKykge1xuICAgIHBhZGRpbmcgKz0gU1BBQ0VfQ0hBUkFDVEVSO1xuICB9XG5cbiAgcmV0dXJuIHBhZGRpbmc7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHBhZGRpbmdGcm9tUGFkZGluZ0xlbmd0aCB9IGZyb20gXCIuL3V0aWxpdGllcy9zdHJpbmdcIjtcblxuY29uc3QgeyBleGNsYW1hdGlvbk1hcmsgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlIHtcbiAgY29uc3RydWN0b3IobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLmFtYmlndW91cyA9IGFtYmlndW91cztcbiAgICB0aGlzLmRlZmluaXRpb25zID0gZGVmaW5pdGlvbnM7XG4gICAgdGhpcy5Ob25UZXJtaW5hbE5vZGUgPSBOb25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBnZXROYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICBpc0FtYmlndW91cygpIHtcbiAgICByZXR1cm4gdGhpcy5hbWJpZ3VvdXM7XG4gIH1cblxuICBnZXREZWZpbml0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZpbml0aW9ucztcbiAgfVxuXG4gIGdldE5vblRlcm1pbmFsTm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5Ob25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBzZXROYW1lKG5hbWUpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgc2VBbWJpZ3VvdXMoYW1iaWd1b3VzKSB7XG4gICAgdGhpcy5hbWJpZ3VvdXMgPSBhbWJpZ3VvdXM7XG4gIH1cblxuICBzZXREZWZpbml0aW9ucyhkZWZpbml0aW9ucykge1xuICAgIHRoaXMuZGVmaW5pdGlvbnMgPSBkZWZpbml0aW9ucztcbiAgfVxuXG4gIHNldE5vblRlcm1pbmFsTm9kZShOb25UZXJtaW5hbE5vZGUpIHtcbiAgICB0aGlzLk5vblRlcm1pbmFsTm9kZSA9IE5vblRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCkge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBzYXZlZFByZWNlZGVuY2UgPSBzdGF0ZS5nZXRTYXZlZFByZWNlZGVuY2UoKTtcblxuICAgIHBhcnNlZCA9IHRoaXMuZGVmaW5pdGlvbnMuc29tZSgoZGVmaW5pdGlvbikgPT4ge1xuICAgICAgbGV0IG5vZGUsXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlO1xuXG4gICAgICBjb25zdCBydWxlTmFtZSA9IHRoaXMubmFtZSxcbiAgICAgICAgICAgIGFtYmlndW91cyA9IHRoaXMuYW1iaWd1b3VzLFxuICAgICAgICAgICAgY2hpbGROb2RlcyA9IFtdO1xuXG4gICAgICBub25UZXJtaW5hbE5vZGUgPSB0aGlzLk5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kQW1iaWd1b3VzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBhbWJpZ3VvdXMpO1xuXG4gICAgICBjb25zdCBwcmVjZWRlbmNlID0gZGVmaW5pdGlvbi5nZXRQcmVjZWRlbmNlKCk7XG5cbiAgICAgIG5vZGUgPSBub25UZXJtaW5hbE5vZGU7IC8vL1xuXG4gICAgICBub2Rlcy5wdXNoKG5vZGUpO1xuXG4gICAgICBzdGF0ZS5zZXRQcmVjZWRlbmNlKHByZWNlZGVuY2UpO1xuXG4gICAgICBjb25zdCBwYXJzZWQgPSBkZWZpbml0aW9uLnBhcnNlKGNoaWxkTm9kZXMsIHN0YXRlLCAoKSA9PiB7XG4gICAgICAgIGxldCBwYXJzZWQ7XG5cbiAgICAgICAgcGFyc2VkID0gdHJ1ZTtcblxuICAgICAgICBjb25zdCBwcmVjZWRlbmNlID0gc3RhdGUuZ2V0UHJlY2VkZW5jZSgpO1xuXG4gICAgICAgIG5vblRlcm1pbmFsTm9kZS5zZXRQcmVjZWRlbmNlKHByZWNlZGVuY2UpO1xuXG4gICAgICAgIGNvbnN0IHJld3JpdHRlbk5vblRlcm1pbmFsTm9kZSA9IG5vblRlcm1pbmFsTm9kZS5yZXdyaXRlKCk7XG5cbiAgICAgICAgaWYgKHJld3JpdHRlbk5vblRlcm1pbmFsTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgICAgIG5vZGVzLnBvcCgpO1xuXG4gICAgICAgICAgICBub2RlID0gcmV3cml0dGVuTm9uVGVybWluYWxOb2RlOyAvLy9cblxuICAgICAgICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgICAgY29uc3QgZW1wdHkgPSBub2RlLmlzRW1wdHkoKTtcblxuICAgICAgICAgIGlmIChlbXB0eSkge1xuICAgICAgICAgICAgcGFyc2VkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICAgIGNvbnN0IHVucHJlY2VkZW50ZWQgPSBub2RlLmlzVW5wcmVjZWRlbnRlZCgpO1xuXG4gICAgICAgICAgaWYgKHVucHJlY2VkZW50ZWQpIHtcbiAgICAgICAgICAgIHBhcnNlZCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgICBpZiAoY2FsbEFoZWFkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdGF0ZS5yZXNldFByZWNlZGVuY2Uoc2F2ZWRQcmVjZWRlbmNlKTtcblxuICAgICAgICAgICAgcGFyc2VkID0gY2FsbEFoZWFkKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJld3JpdHRlbk5vblRlcm1pbmFsTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgICBub2Rlcy5wb3AoKTtcblxuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG5vblRlcm1pbmFsTm9kZTsgLy8vXG5cbiAgICAgICAgICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgIH0sIGNhbGxBaGVhZCk7XG5cbiAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgIG5vZGVzLnBvcCgpO1xuXG4gICAgICAgIHN0YXRlLnJlc2V0UHJlY2VkZW5jZShzYXZlZFByZWNlZGVuY2UpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyc2VkO1xuICAgIH0pO1xuXG4gICAgaWYgKGNhbGxBaGVhZCA9PT0gbnVsbCkge1xuICAgICAgc3RhdGUucmVzZXRQcmVjZWRlbmNlKHNhdmVkUHJlY2VkZW5jZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKG1heGltdW1SdWxlTmFtZUxlbmd0aCwgbXVsdGlMaW5lID0gdHJ1ZSkge1xuICAgIGNvbnN0IGRlZmluaXRpb25zTGVuZ3RoID0gdGhpcy5kZWZpbml0aW9ucy5sZW5ndGg7XG5cbiAgICBtdWx0aUxpbmUgPSBtdWx0aUxpbmUgJiYgKGRlZmluaXRpb25zTGVuZ3RoID4gMSk7ICAvLy9cblxuICAgIGNvbnN0IG1heGltdW1QYWRkaW5nID0gcGFkZGluZ0Zyb21QYWRkaW5nTGVuZ3RoKG1heGltdW1SdWxlTmFtZUxlbmd0aCksXG4gICAgICAgICAgZGVmaW5pdGlvbnNTdHJpbmcgPSB0aGlzLmRlZmluaXRpb25zLnJlZHVjZSgoZGVmaW5pdGlvbnNTdHJpbmcsIGRlZmluaXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25TdHJpbmcgPSBkZWZpbml0aW9uLmFzU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIGlmIChkZWZpbml0aW9uc1N0cmluZyA9PT0gRU1QVFlfU1RSSU5HKSB7XG4gICAgICAgICAgICAgIGRlZmluaXRpb25zU3RyaW5nID0gZGVmaW5pdGlvblN0cmluZzsgLy8vXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBkZWZpbml0aW9uc1N0cmluZyA9IG11bHRpTGluZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2RlZmluaXRpb25zU3RyaW5nfVxuXG4ke21heGltdW1QYWRkaW5nfSAgIHwgJHtkZWZpbml0aW9uU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2RlZmluaXRpb25zU3RyaW5nfSB8ICR7ZGVmaW5pdGlvblN0cmluZ31gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZGVmaW5pdGlvbnNTdHJpbmc7XG4gICAgICAgICAgfSwgRU1QVFlfU1RSSU5HKSxcbiAgICAgICAgICBydWxlTmFtZSA9IHRoaXMubmFtZSwgLy8vXG4gICAgICAgICAgcnVsZU5hbWVMZW5ndGggPSBydWxlTmFtZS5sZW5ndGgsXG4gICAgICAgICAgYW1iaWd1b3VzU3RyaW5nID0gdGhpcy5hbWJpZ3VvdXMgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjbGFtYXRpb25NYXJrIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU1QVFlfU1RSSU5HLFxuICAgICAgICAgIGFtYmlndW91c1N0cmluZ0xlbmd0aCA9IGFtYmlndW91c1N0cmluZy5sZW5ndGgsXG4gICAgICAgICAgcGFkZGluZ0xlbmd0aCA9IG1heGltdW1SdWxlTmFtZUxlbmd0aCAtIHJ1bGVOYW1lTGVuZ3RoIC0gYW1iaWd1b3VzU3RyaW5nTGVuZ3RoLFxuICAgICAgICAgIHBhZGRpbmcgPSBwYWRkaW5nRnJvbVBhZGRpbmdMZW5ndGgocGFkZGluZ0xlbmd0aCk7XG5cbiAgICBjb25zdCBzZW1pY29sb25TdHJpbmcgPSBtdWx0aUxpbmUgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXG5cbiR7bWF4aW11bVBhZGRpbmd9ICAgO2AgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIDtcIixcbiAgICAgICAgICBzdHJpbmcgPSBgXG5cbiR7dGhpcy5uYW1lfSR7YW1iaWd1b3VzU3RyaW5nfSR7cGFkZGluZ30gOjo9ICR7ZGVmaW5pdGlvbnNTdHJpbmd9JHtzZW1pY29sb25TdHJpbmd9YDtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5hbWVBbWJpZ3VvdXNEZWZpbml0aW9uc0FuZE5vblRlcm1pbmFsTm9kZShDbGFzcywgbmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKSB7XG4gICAgaWYgKE5vblRlcm1pbmFsTm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBOb25UZXJtaW5hbE5vZGUgPSBkZWZpbml0aW9uczsgIC8vL1xuXG4gICAgICBkZWZpbml0aW9ucyA9IGFtYmlndW91czsgIC8vL1xuXG4gICAgICBhbWJpZ3VvdXMgPSBuYW1lOyAvLy9cblxuICAgICAgbmFtZSA9IENsYXNzOyAvLy9cblxuICAgICAgQ2xhc3MgPSBSdWxlOyAvLy9cbiAgICB9XG5cbiAgICBjb25zdCBydWxlID0gbmV3IENsYXNzKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBjaGFyYWN0ZXJzLCBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgbGFzdCB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IE5FV19MSU5FX0NIQVJBQ1RFUiwgU1BBQ0VfQ0hBUkFDVEVSIH0gPSBjaGFyYWN0ZXJzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXJzZVRyZWUge1xuICBjb25zdHJ1Y3RvcihsaW5lcykge1xuICAgIHRoaXMubGluZXMgPSBsaW5lcztcbiAgfVxuXG4gIGNsb25lKCkge1xuICAgIGNvbnN0IGxpbmVzID0gdGhpcy5saW5lcy5zbGljZSgpLCAgLy8vXG4gICAgICAgICAgcGFyc2VUcmVlID0gbmV3IFBhcnNlVHJlZShsaW5lcyk7XG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgZ2V0V2lkdGgoKSB7XG4gICAgbGV0IHdpZHRoO1xuXG4gICAgbGV0IGxpbmVzTGVuZ3RoID0gdGhpcy5saW5lcy5sZW5ndGg7XG5cbiAgICBpZiAobGluZXNMZW5ndGggPT09IDApIHtcbiAgICAgIHdpZHRoID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbGFzdExpbmUgPSBsYXN0KHRoaXMubGluZXMpLFxuICAgICAgICAgICAgbGFzdExpbmVMZW5ndGggPSBsYXN0TGluZS5sZW5ndGg7XG5cbiAgICAgIHdpZHRoID0gbGFzdExpbmVMZW5ndGg7IC8vL1xuICAgIH1cblxuICAgIHJldHVybiB3aWR0aDtcbiAgfVxuXG4gIGdldERlcHRoKCkge1xuICAgIGNvbnN0IGxpbmVzTGVuZ3RoID0gdGhpcy5saW5lcy5sZW5ndGgsXG4gICAgICAgICAgZGVwdGggPSBsaW5lc0xlbmd0aDsgIC8vL1xuXG4gICAgcmV0dXJuIGRlcHRoO1xuICB9XG5cbiAgZm9yRWFjaExpbmUoY2FsbGJhY2spIHtcbiAgICB0aGlzLmxpbmVzLmZvckVhY2goY2FsbGJhY2spO1xuICB9XG5cbiAgYXBwZW5kVG9Ub3AocGFyc2VUcmVlKSB7XG4gICAgcGFyc2VUcmVlLmZvckVhY2hMaW5lKChsaW5lKSA9PiB7XG4gICAgICB0aGlzLmxpbmVzLnVuc2hpZnQobGluZSk7XG4gICAgfSk7XG4gIH1cblxuICBhcHBlbmRUb0xlZnQocGFyc2VUcmVlKSB7XG4gICAgcGFyc2VUcmVlLmZvckVhY2hMaW5lKChsaW5lLCBpbmRleCkgPT4ge1xuICAgICAgdGhpcy5saW5lc1tpbmRleF0gPSBsaW5lICsgdGhpcy5saW5lc1tpbmRleF07XG4gICAgfSk7XG4gIH1cblxuICBhcHBlbmRUb1JpZ2h0KHBhcnNlVHJlZSkge1xuICAgIHBhcnNlVHJlZS5mb3JFYWNoTGluZSgobGluZSwgaW5kZXgpID0+IHtcbiAgICAgIHRoaXMubGluZXNbaW5kZXhdID0gdGhpcy5saW5lc1tpbmRleF0gKyBsaW5lO1xuICAgIH0pO1xuICB9XG5cbiAgYXBwZW5kVG9Cb3R0b20ocGFyc2VUcmVlKSB7XG4gICAgcGFyc2VUcmVlLmZvckVhY2hMaW5lKChsaW5lKSA9PiB7XG4gICAgICB0aGlzLmxpbmVzLnB1c2gobGluZSk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRUb3BNYXJnaW4odG9wTWFyZ2luRGVwdGgpIHtcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuZ2V0V2lkdGgoKSxcbiAgICAgICAgICB0b3BNYXJnaW5XaWR0aCA9IHdpZHRoLCAgLy8vXG4gICAgICAgICAgdG9wTWFyZ2luU3RyaW5nID0gbWFyZ2luU3RyaW5nRnJvbU1hcmdpbldpZHRoKHRvcE1hcmdpbldpZHRoKTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0b3BNYXJnaW5EZXB0aDsgaW5kZXgrKykge1xuICAgICAgdGhpcy5saW5lcy51bnNoaWZ0KHRvcE1hcmdpblN0cmluZyk7XG4gICAgfVxuICB9XG5cbiAgYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpIHtcbiAgICBjb25zdCBsZWZ0TWFyZ2luU3RyaW5nID0gbWFyZ2luU3RyaW5nRnJvbU1hcmdpbldpZHRoKGxlZnRNYXJnaW5XaWR0aCksXG4gICAgICAgICAgbGluZXNMZW5ndGggPSB0aGlzLmxpbmVzLmxlbmd0aDtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsaW5lc0xlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdGhpcy5saW5lc1tpbmRleF0gPSBsZWZ0TWFyZ2luU3RyaW5nICsgdGhpcy5saW5lc1tpbmRleF07XG4gICAgfVxuICB9XG5cbiAgYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCkge1xuICAgIGNvbnN0IHJpZ2h0TWFyZ2luU3RyaW5nID0gbWFyZ2luU3RyaW5nRnJvbU1hcmdpbldpZHRoKHJpZ2h0TWFyZ2luV2lkdGgpLFxuICAgICAgICAgIGxpbmVzTGVuZ3RoID0gdGhpcy5saW5lcy5sZW5ndGg7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGluZXNMZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHRoaXMubGluZXNbaW5kZXhdID0gdGhpcy5saW5lc1tpbmRleF0gKyByaWdodE1hcmdpblN0cmluZztcbiAgICB9XG4gIH1cblxuICBhZGRCb3R0b21NYXJnaW4oYm90dG9tTWFyZ2luRGVwdGgpIHtcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuZ2V0V2lkdGgoKSxcbiAgICAgICAgICBib3R0b21NYXJnaW5XaWR0aCA9IHdpZHRoLCAgLy8vXG4gICAgICAgICAgYm90dG9tTWFyZ2luU3RyaW5nID0gbWFyZ2luU3RyaW5nRnJvbU1hcmdpbldpZHRoKGJvdHRvbU1hcmdpbldpZHRoKTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBib3R0b21NYXJnaW5EZXB0aDsgaW5kZXgrKykge1xuICAgICAgdGhpcy5saW5lcy5wdXNoKGJvdHRvbU1hcmdpblN0cmluZyk7XG4gICAgfVxuICB9XG4gIFxuICBwb3BMaW5lKCkgeyByZXR1cm4gdGhpcy5saW5lcy5wb3AoKTsgfVxuICBcbiAgc2hpZnRMaW5lKCkgeyByZXR1cm4gdGhpcy5saW5lcy5zaGlmdCgpOyB9XG4gIFxuICBwdXNoTGluZShsaW5lKSB7IHRoaXMubGluZXMucHVzaChsaW5lKTsgfVxuICBcbiAgdW5zaGlmdExpbmUobGluZSkgeyB0aGlzLmxpbmVzLnVuc2hpZnQobGluZSk7IH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmxpbmVzLnJlZHVjZSgoc3RyaW5nLCBsaW5lKSA9PiB7XG4gICAgICBzdHJpbmcgKz0gbGluZSArIE5FV19MSU5FX0NIQVJBQ1RFUjtcblxuICAgICAgcmV0dXJuIHN0cmluZztcbiAgICB9LCBFTVBUWV9TVFJJTkcpO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJnaW5TdHJpbmdGcm9tTWFyZ2luV2lkdGgobWFyZ2luV2lkdGgsIHNwYWNlQ2hhcmFjdGVyKSB7XG4gIHNwYWNlQ2hhcmFjdGVyID0gc3BhY2VDaGFyYWN0ZXIgfHwgU1BBQ0VfQ0hBUkFDVEVSO1xuXG4gIGxldCBtYXJnaW5TdHJpbmcgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG1hcmdpbldpZHRoOyBpbmRleCsrKSB7XG4gICAgbWFyZ2luU3RyaW5nICs9IHNwYWNlQ2hhcmFjdGVyO1xuICB9XG5cbiAgcmV0dXJuIG1hcmdpblN0cmluZztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IFBhcnNlVHJlZSBmcm9tIFwiLi4vcGFyc2VUcmVlXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBCQVJfQ0hBUkFDVEVSIH0gPSBjaGFyYWN0ZXJzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBleHRlbmRzIFBhcnNlVHJlZSB7XG4gIGNvbnN0cnVjdG9yKGxpbmVzLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKSB7XG4gICAgc3VwZXIobGluZXMpO1xuICAgIFxuICAgIHRoaXMudmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHZlcnRpY2FsQnJhbmNoUG9zaXRpb247XG4gIH1cbiAgXG4gIGdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudmVydGljYWxCcmFuY2hQb3NpdGlvbjtcbiAgfVxuXG4gIGFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKSB7XG4gICAgc3VwZXIuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuXG4gICAgdGhpcy52ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uICs9IGxlZnRNYXJnaW5XaWR0aDsgLy8vXG4gIH1cblxuICBzdGF0aWMgZnJvbVdpZHRoKHdpZHRoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gQkFSX0NIQVJBQ1RFUixcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gMCxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLCBzdHJpbmcsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pLFxuICAgICAgICAgIGxlZnRNYXJnaW5XaWR0aCA9IE1hdGguZmxvb3Iod2lkdGgvMiksXG4gICAgICAgICAgcmlnaHRNYXJnaW5XaWR0aCA9IHdpZHRoIC0gbGVmdE1hcmdpbldpZHRoIC0gMTtcblxuICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKTtcbiAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcblxuICAgIHJldHVybiB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRGVwdGhBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKENsYXNzLCBkZXB0aCwgdmVydGljYWxCcmFuY2hQb3NpdGlvbikge1xuICAgIGNvbnN0IGxpbmVzID0gbGluZXNGcm9tRGVwdGgoZGVwdGgpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gbmV3IENsYXNzKGxpbmVzLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHJldHVybiB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihDbGFzcywgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKSB7XG4gICAgaWYgKHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHN0cmluZzsgIC8vL1xuXG4gICAgICBzdHJpbmcgPSBDbGFzczsgLy8vXG5cbiAgICAgIENsYXNzID0gUGFyc2VUcmVlOyAgLy8vXG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGxpbmUgPSBzdHJpbmcsIC8vL1xuICAgICAgICAgIGxpbmVzID0gW1xuICAgICAgICAgICAgbGluZVxuICAgICAgICAgIF0sXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBuZXcgQ2xhc3MobGluZXMsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgcmV0dXJuIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGxpbmVzRnJvbURlcHRoKGRlcHRoKSB7XG4gIGNvbnN0IGxpbmVzID0gW107XG5cbiAgbGV0IGluZGV4ID0gMDtcblxuICB3aGlsZSAoaW5kZXggPCBkZXB0aCkge1xuICAgIGxpbmVzW2luZGV4KytdID0gRU1QVFlfU1RSSU5HO1xuICB9XG5cbiAgcmV0dXJuIGxpbmVzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gdG9rZW5MaW5lSW5kZXhGcm9tVG9rZW5BbmRUb2tlbnModG9rZW4sIHRva2Vucykge1xuICBsZXQgdG9rZW5MaW5lSW5kZXggPSAwO1xuXG4gIGNvbnN0IHRva2VuSW5kZXggPSB0b2tlbnMuaW5kZXhPZih0b2tlbiksXG4gICAgICAgIHN0YXJ0ID0gMCxcbiAgICAgICAgZW5kID0gdG9rZW5JbmRleDtcblxuICB0b2tlbnMgPSB0b2tlbnMuc2xpY2Uoc3RhcnQsIGVuZCk7ICAvLy9cblxuICB0b2tlbnMuZm9yRWFjaCgodG9rZW4pID0+IHtcbiAgICBjb25zdCB0b2tlbkVuZE9mTGluZVRva2VuID0gdG9rZW4uaXNFbmRPZkxpbmVUb2tlbigpO1xuXG4gICAgaWYgKHRva2VuRW5kT2ZMaW5lVG9rZW4pIHtcbiAgICAgIHRva2VuTGluZUluZGV4Kys7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdG9rZW5MaW5lSW5kZXg7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNoYXJhY3RlcnN9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmltcG9ydCB7IHRva2VuTGluZUluZGV4RnJvbVRva2VuQW5kVG9rZW5zIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90b2tlbnNcIjtcblxuY29uc3QgeyBTUEFDRV9DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVOYW1lUGFyc2VUcmVlIGV4dGVuZHMgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbU5vblRlcm1pbmFsTm9kZUFuZFRva2Vucyhub25UZXJtaW5hbE5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgYW1iaWd1b3VzID0gbm9uVGVybWluYWxOb2RlLmlzQW1iaWd1b3VzKCksXG4gICAgICAgICAgZmlyc3RTaWduaWZpY2FudFRva2VuID0gbm9uVGVybWluYWxOb2RlLmdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbigpLFxuICAgICAgICAgIGxhc3RTaWduaWZpY2FudFRva2VuID0gbm9uVGVybWluYWxOb2RlLmdldExhc3RTaWduaWZpY2FudFRva2VuKCksXG4gICAgICAgICAgZmlyc3RTaWduaWZpY2FudFRva2VuTGluZUluZGV4ID0gdG9rZW5MaW5lSW5kZXhGcm9tVG9rZW5BbmRUb2tlbnMoZmlyc3RTaWduaWZpY2FudFRva2VuLCB0b2tlbnMpLFxuICAgICAgICAgIGxhc3RTaWduaWZpY2FudFRva2VuTGluZUluZGV4ID0gdG9rZW5MaW5lSW5kZXhGcm9tVG9rZW5BbmRUb2tlbnMobGFzdFNpZ25pZmljYW50VG9rZW4sIHRva2VucyksXG4gICAgICAgICAgdG9rZW5MaW5lSW5kZXhlcyA9IChmaXJzdFNpZ25pZmljYW50VG9rZW5MaW5lSW5kZXggIT09IGxhc3RTaWduaWZpY2FudFRva2VuTGluZUluZGV4KSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtmaXJzdFNpZ25pZmljYW50VG9rZW5MaW5lSW5kZXh9LSR7bGFzdFNpZ25pZmljYW50VG9rZW5MaW5lSW5kZXh9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2ZpcnN0U2lnbmlmaWNhbnRUb2tlbkxpbmVJbmRleH1gO1xuXG4gICAgbGV0IHN0cmluZyA9IGAke3J1bGVOYW1lfWA7XG5cbiAgICBpZiAoYW1iaWd1b3VzKSB7XG4gICAgICBzdHJpbmcgPSBgJHtzdHJpbmd9IWA7XG4gICAgfVxuXG4gICAgc3RyaW5nID0gYCR7c3RyaW5nfSBbJHt0b2tlbkxpbmVJbmRleGVzfV1gO1xuXG4gICAgbGV0IHByZWNlZGVuY2UgPSBub25UZXJtaW5hbE5vZGUuZ2V0UHJlY2VkZW5jZSgpO1xuXG4gICAgaWYgKHByZWNlZGVuY2UgIT09IG51bGwpIHtcbiAgICAgIGlmIChwcmVjZWRlbmNlID09PSBJbmZpbml0eSkge1xuICAgICAgICBwcmVjZWRlbmNlID0gU1BBQ0VfQ0hBUkFDVEVSO1xuICAgICAgfVxuXG4gICAgICBzdHJpbmcgPSBgJHtzdHJpbmd9ICgke3ByZWNlZGVuY2V9KWA7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoID0gc3RyaW5nTGVuZ3RoLCAvLy9cbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHJ1bGVOYW1lUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oUnVsZU5hbWVQYXJzZVRyZWUsIHN0cmluZywgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICBydWxlTmFtZVBhcnNlVHJlZS5hcHBlbmRUb1RvcCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSk7XG5cbiAgICByZXR1cm4gcnVsZU5hbWVQYXJzZVRyZWU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IFBhcnNlVHJlZSBmcm9tIFwiLi4vcGFyc2VUcmVlXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBEQVNIX0NIQVJBQ1RFUiB9ID0gY2hhcmFjdGVycztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZSBleHRlbmRzIFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tV2lkdGgod2lkdGgpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBzdHJpbmdGcm9tQ2hhcmFjdGVyc1dpZHRoKHdpZHRoLCBEQVNIX0NIQVJBQ1RFUiksXG4gICAgICAgICAgbGluZSA9IHN0cmluZywgLy8vXG4gICAgICAgICAgbGluZXMgPSBbXG4gICAgICAgICAgICBsaW5lXG4gICAgICAgICAgXSxcbiAgICAgICAgICBob3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlID0gbmV3IEhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUobGluZXMpO1xuXG4gICAgcmV0dXJuIGhvcml6b250YWxCcmFuY2hQYXJzZVRyZWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RyaW5nRnJvbUNoYXJhY3RlcnNXaWR0aChjaGFyYWN0ZXJzV2lkdGgsIGNoYXJhY3Rlcikge1xuICBsZXQgc3RyaW5nID0gRU1QVFlfU1RSSU5HO1xuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjaGFyYWN0ZXJzV2lkdGg7IGluZGV4KyspIHtcbiAgICBzdHJpbmcgKz0gY2hhcmFjdGVyO1xuICB9XG5cbiAgcmV0dXJuIHN0cmluZztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuaW1wb3J0IEhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUgZnJvbSBcIi4vaG9yaXpvbnRhbEJyYW5jaFwiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hpbGROb2Rlc1BhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21DaGlsZE5vZGVzQW5kVG9rZW5zKGNoaWxkTm9kZXMsIHRva2Vucykge1xuICAgIGxldCBjaGlsZE5vZGVzUGFyc2VUcmVlO1xuXG4gICAgY29uc3QgY2hpbGROb2RlUGFyc2VUcmVlcyA9IGNoaWxkTm9kZXMucmVkdWNlKChjaGlsZE5vZGVQYXJzZVRyZWVzLCBjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZVBhcnNlVHJlZSA9IGNoaWxkTm9kZS5hc1BhcnNlVHJlZSh0b2tlbnMpO1xuXG4gICAgICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzLnB1c2goY2hpbGROb2RlUGFyc2VUcmVlKTtcblxuICAgICAgICAgICAgcmV0dXJuIGNoaWxkTm9kZVBhcnNlVHJlZXM7XG4gICAgICAgICAgfSwgW10pLFxuICAgICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXNMZW5ndGggPSBjaGlsZE5vZGVQYXJzZVRyZWVzLmxlbmd0aDtcblxuICAgIGlmIChjaGlsZE5vZGVQYXJzZVRyZWVzTGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBmaXJzdENoaWxkTm9kZVBhcnNlVHJlZSA9IGZpcnN0KGNoaWxkTm9kZVBhcnNlVHJlZXMpO1xuXG4gICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlID0gZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWU7ICAvLy9cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGZpcnN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHVuZGVmaW5lZCxcbiAgICAgICAgICBsYXN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IDAsXG4gICAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlc1dpZHRoID0gMCxcbiAgICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzRGVwdGggPSAwO1xuXG4gICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzLmZvckVhY2goKGNoaWxkTm9kZVBhcnNlVHJlZSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlUGFyc2VUcmVlV2lkdGggPSBjaGlsZE5vZGVQYXJzZVRyZWUuZ2V0V2lkdGgoKSxcbiAgICAgICAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlRGVwdGggPSBjaGlsZE5vZGVQYXJzZVRyZWUuZ2V0RGVwdGgoKTtcblxuICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICBjb25zdCBmaXJzdENoaWxkTm9kZVBhcnNlVHJlZSA9IGNoaWxkTm9kZVBhcnNlVHJlZSxcbiAgICAgICAgICAgICAgICBmaXJzdENoaWxkTm9kZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBmaXJzdENoaWxkTm9kZVBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCk7XG5cbiAgICAgICAgICBmaXJzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBmaXJzdENoaWxkTm9kZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb247XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5kZXggPT09IGNoaWxkTm9kZVBhcnNlVHJlZXNMZW5ndGggLSAxKSB7XG4gICAgICAgICAgY29uc3QgbGFzdENoaWxkTm9kZVBhcnNlVHJlZSA9IGNoaWxkTm9kZVBhcnNlVHJlZSxcbiAgICAgICAgICAgICAgICBsYXN0Q2hpbGROb2RlUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IGxhc3RDaGlsZE5vZGVQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpO1xuXG4gICAgICAgICAgbGFzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gKz0gbGFzdENoaWxkTm9kZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb247XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5kZXggPCBjaGlsZE5vZGVQYXJzZVRyZWVzTGVuZ3RoIC0gMSkge1xuICAgICAgICAgIGxhc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uICs9IGNoaWxkTm9kZVBhcnNlVHJlZVdpZHRoO1xuICAgICAgICAgIGxhc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uICs9IDE7XG5cbiAgICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzV2lkdGggKz0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXNXaWR0aCArPSBjaGlsZE5vZGVQYXJzZVRyZWVXaWR0aDtcbiAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoID0gTWF0aC5tYXgoY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoLCBjaGlsZE5vZGVQYXJzZVRyZWVEZXB0aCk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgd2lkdGggPSBsYXN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiAtIGZpcnN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiArIDEsXG4gICAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh3aWR0aCksXG4gICAgICAgICAgICBob3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlID0gSG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZS5mcm9tV2lkdGgod2lkdGgpLFxuICAgICAgICAgICAgbGVmdE1hcmdpbldpZHRoID0gZmlyc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uLFxuICAgICAgICAgICAgcmlnaHRNYXJnaW5XaWR0aCA9IGNoaWxkTm9kZVBhcnNlVHJlZXNXaWR0aCAtIHdpZHRoIC0gbGVmdE1hcmdpbldpZHRoO1xuXG4gICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5hZGRMZWZ0TWFyZ2luKGxlZnRNYXJnaW5XaWR0aCk7XG4gICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcbiAgICAgIGhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgICAgaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcblxuICAgICAgY29uc3QgdmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKTtcblxuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21EZXB0aEFuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oQ2hpbGROb2Rlc1BhcnNlVHJlZSwgY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgICAgY2hpbGROb2RlUGFyc2VUcmVlcy5mb3JFYWNoKChjaGlsZE5vZGVQYXJzZVRyZWUsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZVBhcnNlVHJlZURlcHRoID0gY2hpbGROb2RlUGFyc2VUcmVlLmdldERlcHRoKCksXG4gICAgICAgICAgICAgIGNsb25lZENoaWxkTm9kZVBhcnNlVHJlZSA9IGNoaWxkTm9kZVBhcnNlVHJlZS5jbG9uZSgpO1xuXG4gICAgICAgIGlmIChpbmRleCA8IGNoaWxkTm9kZVBhcnNlVHJlZXNMZW5ndGggLSAxKSB7XG4gICAgICAgICAgY29uc3QgcmlnaHRNYXJnaW5XaWR0aCA9IDE7XG5cbiAgICAgICAgICBjbG9uZWRDaGlsZE5vZGVQYXJzZVRyZWUuYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hpbGROb2RlUGFyc2VUcmVlRGVwdGggPCBjaGlsZE5vZGVQYXJzZVRyZWVzRGVwdGgpIHtcbiAgICAgICAgICBjb25zdCBib3R0b21NYXJnaW5EZXB0aCA9IGNoaWxkTm9kZVBhcnNlVHJlZXNEZXB0aCAtIGNoaWxkTm9kZVBhcnNlVHJlZURlcHRoO1xuXG4gICAgICAgICAgY2xvbmVkQ2hpbGROb2RlUGFyc2VUcmVlLmFkZEJvdHRvbU1hcmdpbihib3R0b21NYXJnaW5EZXB0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlLmFwcGVuZFRvUmlnaHQoY2xvbmVkQ2hpbGROb2RlUGFyc2VUcmVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlLmFwcGVuZFRvVG9wKGhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUpO1xuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZS5hcHBlbmRUb1RvcCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBjaGlsZE5vZGVzUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlTmFtZVBhcnNlVHJlZSBmcm9tIFwiLi9ydWxlTmFtZVwiO1xuaW1wb3J0IENoaWxkTm9kZXNQYXJzZVRyZWUgZnJvbSBcIi4vY2hpbGROb2Rlc1wiO1xuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21Ob25UZXJtaW5hbE5vZGVBbmRUb2tlbnMobm9uVGVybWluYWxOb2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBydWxlTmFtZVBhcnNlVHJlZSA9IFJ1bGVOYW1lUGFyc2VUcmVlLmZyb21Ob25UZXJtaW5hbE5vZGVBbmRUb2tlbnMobm9uVGVybWluYWxOb2RlLCB0b2tlbnMpLFxuICAgICAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUgPSBDaGlsZE5vZGVzUGFyc2VUcmVlLmZyb21DaGlsZE5vZGVzQW5kVG9rZW5zKGNoaWxkTm9kZXMsIHRva2Vucyk7XG4gICAgXG4gICAgbGV0IHJ1bGVOYW1lUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHJ1bGVOYW1lUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKTtcbiAgICBcbiAgICBjb25zdCBjaGlsZE5vZGVzUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IGNoaWxkTm9kZXNQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZSA9IHJ1bGVOYW1lUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiAtIGNoaWxkTm9kZXNQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uO1xuICAgIFxuICAgIGxldCBsZWZ0TWFyZ2luV2lkdGggPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIC8vL1xuICAgIH0gZWxzZSBpZiAodmVydGljYWxCcmFuY2hQb3NpdGlvbnNEaWZmZXJlbmNlIDwgMCkge1xuICAgICAgbGVmdE1hcmdpbldpZHRoID0gLXZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZTtcblxuICAgICAgcnVsZU5hbWVQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgIH0gZWxzZSBpZiAodmVydGljYWxCcmFuY2hQb3NpdGlvbnNEaWZmZXJlbmNlID4gMCkge1xuICAgICAgbGVmdE1hcmdpbldpZHRoID0gK3ZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZTtcblxuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZS5hZGRMZWZ0TWFyZ2luKGxlZnRNYXJnaW5XaWR0aCk7XG4gICAgfVxuXG4gICAgY29uc3QgcnVsZU5hbWVQYXJzZVRyZWVXaWR0aCA9IHJ1bGVOYW1lUGFyc2VUcmVlLmdldFdpZHRoKCksXG4gICAgICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZVdpZHRoID0gY2hpbGROb2Rlc1BhcnNlVHJlZS5nZXRXaWR0aCgpLFxuICAgICAgICAgIHdpZHRoc0RpZmZlcmVuY2UgPSBydWxlTmFtZVBhcnNlVHJlZVdpZHRoIC0gY2hpbGROb2Rlc1BhcnNlVHJlZVdpZHRoO1xuICAgIFxuICAgIGxldCByaWdodE1hcmdpbldpZHRoID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICAvLy9cbiAgICB9IGVsc2UgaWYgKHdpZHRoc0RpZmZlcmVuY2UgPCAwKSB7XG4gICAgICByaWdodE1hcmdpbldpZHRoID0gLXdpZHRoc0RpZmZlcmVuY2U7XG4gICAgICBcbiAgICAgIHJ1bGVOYW1lUGFyc2VUcmVlLmFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpO1xuICAgIH0gZWxzZSBpZiAod2lkdGhzRGlmZmVyZW5jZSA+IDApIHtcbiAgICAgIHJpZ2h0TWFyZ2luV2lkdGggPSArd2lkdGhzRGlmZmVyZW5jZTtcblxuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcbiAgICB9XG5cbiAgICBydWxlTmFtZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBydWxlTmFtZVBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCk7XG5cbiAgICBjb25zdCBydWxlTmFtZVBhcnNlVHJlZURlcHRoID0gcnVsZU5hbWVQYXJzZVRyZWUuZ2V0RGVwdGgoKSxcbiAgICAgICAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWVEZXB0aCA9IHJ1bGVOYW1lUGFyc2VUcmVlRGVwdGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBydWxlTmFtZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24sIC8vL1xuICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21EZXB0aEFuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oTm9uVGVybWluYWxOb2RlUGFyc2VUcmVlLCBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWVEZXB0aCwgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWUuYXBwZW5kVG9SaWdodChydWxlTmFtZVBhcnNlVHJlZSk7XG5cbiAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWUuYXBwZW5kVG9Cb3R0b20oY2hpbGROb2Rlc1BhcnNlVHJlZSk7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlUGFyc2VUcmVlIGZyb20gXCIuLi9wYXJzZVRyZWUvbm9uVGVybWluYWxOb2RlXCI7XG5cbmNvbnN0IHsgZmlyc3QsIG1hdGNoLCBmb3J3YXJkc1NvbWUsIGJhY2t3YXJkc1NvbWUgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbE5vZGUge1xuICBjb25zdHJ1Y3RvcihydWxlTmFtZSwgY2hpbGROb2RlcywgYW1iaWd1b3VzLCBwcmVjZWRlbmNlKSB7XG4gICAgdGhpcy5ydWxlTmFtZSA9IHJ1bGVOYW1lO1xuICAgIHRoaXMuY2hpbGROb2RlcyA9IGNoaWxkTm9kZXM7XG4gICAgdGhpcy5hbWJpZ3VvdXMgPSBhbWJpZ3VvdXM7XG4gICAgdGhpcy5wcmVjZWRlbmNlID0gcHJlY2VkZW5jZTtcbiAgfVxuXG4gIGdldFJ1bGVOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVOYW1lO1xuICB9XG5cbiAgZ2V0Q2hpbGROb2RlcygpIHtcbiAgICByZXR1cm4gdGhpcy5jaGlsZE5vZGVzO1xuICB9XG5cbiAgaXNBbWJpZ3VvdXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuYW1iaWd1b3VzO1xuICB9XG5cbiAgZ2V0UHJlY2VkZW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcmVjZWRlbmNlO1xuICB9XG5cbiAgc2V0UnVsZU5hbWUocnVsZU5hbWUpIHtcbiAgICB0aGlzLnJ1bGVOYW1lID0gcnVsZU5hbWU7XG4gIH1cblxuICBzZXRDaGlsZE5vZGVzKGNoaWxkTm9kZXMpIHtcbiAgICB0aGlzLmNoaWxkTm9kZXMgPSBjaGlsZE5vZGVzO1xuICB9XG5cbiAgc2V0QW1iaWd1b3VzKGFtYmlndW91cykge1xuICAgIHRoaXMuYW1iaWd1b3VzID0gYW1iaWd1b3VzO1xuICB9XG5cbiAgc2V0UHJlY2VkZW5jZShwcmVjZWRlbmNlKSB7XG4gICAgdGhpcy5wcmVjZWRlbmNlID0gcHJlY2VkZW5jZTtcbiAgfVxuXG4gIGlzVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGlzTm9uVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHRydWU7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgZ2V0Rmlyc3RTaWduaWZpY2FudFRva2VuKCkge1xuICAgIGxldCBmaXJzdFNpZ25pZmljYW50VG9rZW4gPSBudWxsO1xuXG4gICAgZm9yd2FyZHNTb21lKHRoaXMuY2hpbGROb2RlcywgKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgZmlyc3RTaWduaWZpY2FudFRva2VuID0gY2hpbGROb2RlLmdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbigpO1xuXG4gICAgICBpZiAoZmlyc3RTaWduaWZpY2FudFRva2VuICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZpcnN0U2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIGdldExhc3RTaWduaWZpY2FudFRva2VuKCkge1xuICAgIGxldCBsYXN0U2lnbmlmaWNhbnRUb2tlbiA9IG51bGw7XG5cbiAgICBiYWNrd2FyZHNTb21lKHRoaXMuY2hpbGROb2RlcywgKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgbGFzdFNpZ25pZmljYW50VG9rZW4gPSBjaGlsZE5vZGUuZ2V0TGFzdFNpZ25pZmljYW50VG9rZW4oKTtcblxuICAgICAgaWYgKGxhc3RTaWduaWZpY2FudFRva2VuICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGxhc3RTaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgaXNMb3dlclByZWNlZGVuY2UocnVsZU5hbWUsIHByZWNlZGVuY2UpIHtcbiAgICBsZXQgbG93ZXJQcmVjZWRlbmNlO1xuXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICAvLy9cbiAgICB9IGVsc2UgaWYgKHRoaXMucHJlY2VkZW5jZSA9PT0gbnVsbCkge1xuICAgICAgbG93ZXJQcmVjZWRlbmNlID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByZWNlZGVuY2UgPT09IEluZmluaXR5KSB7XG4gICAgICBjb25zdCBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KHRoaXMuY2hpbGROb2Rlcyk7XG5cbiAgICAgIGxvd2VyUHJlY2VkZW5jZSA9IGZpcnN0Q2hpbGROb2RlLmlzTG93ZXJQcmVjZWRlbmNlKHJ1bGVOYW1lLCBwcmVjZWRlbmNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG93ZXJQcmVjZWRlbmNlID0gKCh0aGlzLnJ1bGVOYW1lID09PSBydWxlTmFtZSkgJiYgKHRoaXMucHJlY2VkZW5jZSA8IHByZWNlZGVuY2UpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbG93ZXJQcmVjZWRlbmNlO1xuICB9XG5cbiAgaXNVbnByZWNlZGVudGVkKCkge1xuICAgIGxldCB1bnByZWNlZGVudGVkID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5wcmVjZWRlbmNlICE9PSBudWxsKSB7XG4gICAgICB1bnByZWNlZGVudGVkID0gdGhpcy5jaGlsZE5vZGVzLnNvbWUoKGNoaWxkTm9kZSkgPT4geyAgLy8vXG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZUxvd2VyUHJlY2VkZW5jZSA9IGNoaWxkTm9kZS5pc0xvd2VyUHJlY2VkZW5jZSh0aGlzLnJ1bGVOYW1lLCB0aGlzLnByZWNlZGVuY2UpO1xuXG4gICAgICAgIGlmIChjaGlsZE5vZGVMb3dlclByZWNlZGVuY2UpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVucHJlY2VkZW50ZWQ7XG4gIH1cblxuICBpc0luY2x1ZGVkSW4obm9kZSkge1xuICAgIGxldCBpbmNsdWRlZEluID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcyA9PT0gbm9kZSkge1xuICAgICAgaW5jbHVkZWRJbiA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5vZGVOb25UZXJtaW5hbE5vZGUgPSBub2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgICAgIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG5vZGUsIC8vL1xuICAgICAgICAgICAgICBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKTtcblxuICAgICAgICBpbmNsdWRlZEluID0gY2hpbGROb2Rlcy5zb21lKChjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBpbmNsdWRlZEluQ2hpbGROb2RlID0gdGhpcy5pc0luY2x1ZGVkSW4oY2hpbGROb2RlKTtcblxuICAgICAgICAgIGlmIChpbmNsdWRlZEluQ2hpbGROb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbmNsdWRlZEluO1xuICB9XG5cbiAgaXNFbXB0eSgpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzTGVuZ3RoID0gdGhpcy5jaGlsZE5vZGVzLmxlbmd0aCxcbiAgICAgICAgICBlbXB0eSA9IChjaGlsZE5vZGVzTGVuZ3RoID09PSAwKTtcblxuICAgIHJldHVybiBlbXB0eTtcbiAgfVxuXG4gIG1hdGNoKG5vZGUsIGRlcHRoID0gSW5maW5pdHksIGV4YWN0bHkgPSBmYWxzZSkge1xuICAgIGxldCBtYXRjaGVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gICAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG5vZGUsIC8vL1xuICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTtcblxuICAgICAgaWYgKHRoaXMucnVsZU5hbWUgPT09IG5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lKSB7XG4gICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZUFtYmlndW91cyA9IG5vblRlcm1pbmFsTm9kZS5pc0FtYmlndW91cygpO1xuXG4gICAgICAgIGlmICh0aGlzLmFtYmlndW91cyA9PT0gbm9uVGVybWluYWxOb2RlQW1iaWd1b3VzKSB7XG4gICAgICAgICAgY29uc3QgcHJlY2VkZW5jZSA9IHRoaXMuZ2V0UHJlY2VkZW5jZSgpLFxuICAgICAgICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVByZWNlZGVuY2UgPSBub25UZXJtaW5hbE5vZGUuZ2V0UHJlY2VkZW5jZSgpO1xuXG4gICAgICAgICAgaWYgKHByZWNlZGVuY2UgPT09IG5vblRlcm1pbmFsTm9kZVByZWNlZGVuY2UpIHtcbiAgICAgICAgICAgIGRlcHRoLS07XG5cbiAgICAgICAgICAgIGlmIChkZXB0aCA9PT0gMCkge1xuICAgICAgICAgICAgICBtYXRjaGVzID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgICAgICAgICAgIG1hdGNoZXMgPSBtYXRjaCh0aGlzLmNoaWxkTm9kZXMsIG5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMsIChjaGlsZE5vZGUsIG5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZU1hdGNoZXNOb25UZXJtaW5hbE5vZGVDaGlsZE5vZGUgPSBjaGlsZE5vZGUubWF0Y2gobm9uVGVybWluYWxOb2RlQ2hpbGROb2RlLCBkZXB0aCwgZXhhY3RseSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoY2hpbGROb2RlTWF0Y2hlc05vblRlcm1pbmFsTm9kZUNoaWxkTm9kZSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxuXG4gIHJld3JpdGUoKSB7XG4gICAgY29uc3QgcmV3cml0dGVuTm9uVGVybWluYWxOb2RlID0gbnVsbDtcblxuICAgIHJldHVybiByZXdyaXR0ZW5Ob25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBhc1BhcnNlVHJlZSh0b2tlbnMpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSB0aGlzLCAgLy8vXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlID0gTm9uVGVybWluYWxOb2RlUGFyc2VUcmVlLmZyb21Ob25UZXJtaW5hbE5vZGVBbmRUb2tlbnMobm9uVGVybWluYWxOb2RlLCB0b2tlbnMpLFxuICAgICAgICAgIHBhcnNlVHJlZSA9IG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZTsgIC8vL1xuXG4gICAgcmV0dXJuIHBhcnNlVHJlZTtcbiAgfVxuXG4gIGNsb25lKCkge1xuICAgIGNvbnN0IENsYXNzID0gdGhpcy5jb25zdHJ1Y3RvcixcbiAgICAgICAgICBydWxlTmFtZSA9IHRoaXMucnVsZU5hbWUsXG4gICAgICAgICAgY2hpbGROb2RlcyA9IHRoaXMuY2hpbGROb2Rlcy5tYXAoKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgICAgICAgY2hpbGROb2RlID0gY2hpbGROb2RlLmNsb25lKCk7ICAvLy9cblxuICAgICAgICAgICAgcmV0dXJuIGNoaWxkTm9kZTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSB0aGlzLmFtYmlndW91cyxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gdGhpcy5wcmVjZWRlbmNlLFxuICAgICAgICAgIG5vblRlcm1pbmFsTm9kZSA9IG5ldyBDbGFzcyhydWxlTmFtZSwgY2hpbGROb2RlcywgYW1iaWd1b3VzLCBwcmVjZWRlbmNlKTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZEFtYmlndW91cyhDbGFzcywgcnVsZU5hbWUsIGNoaWxkTm9kZXMsIGFtYmlndW91cywgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgaWYgKGFtYmlndW91cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBhbWJpZ3VvdXMgPSBjaGlsZE5vZGVzOyAvLy9cblxuICAgICAgY2hpbGROb2RlcyA9IHJ1bGVOYW1lOyAgLy8vXG5cbiAgICAgIHJ1bGVOYW1lID0gQ2xhc3M7IC8vL1xuXG4gICAgICBDbGFzcyA9IE5vblRlcm1pbmFsTm9kZTsgIC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHByZWNlZGVuY2UgPSBudWxsLFxuICAgICAgICAgIG5vblRlcm1pbmFsTm9kZSA9IG5ldyBDbGFzcyhydWxlTmFtZSwgY2hpbGROb2RlcywgYW1iaWd1b3VzLCBwcmVjZWRlbmNlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsTm9kZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmFtZUJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZXROYW1lKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgbmFtZSA9IHRlcm1pbmFsTm9kZUNvbnRlbnQ7IC8vL1xuICAgIFxuICAgIHJldHVybiBuYW1lO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMocnVsZU5hbWUsIGNoaWxkTm9kZSwgYW1iaWd1b3VzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZEFtYmlndW91cyhOYW1lQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZSwgYW1iaWd1b3VzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuY29uc3QgeyBwdXNoIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpIHtcbiAgbGV0IHBhcnNlZDtcblxuICBjb25zdCBpbmRleCA9IDAsXG4gICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgIHBhcnRcbiAgICAgICAgXTtcblxuICBwYXJzZWQgPSBwYXJzZVBhcnRPZlBhcnRzKGluZGV4LCBwYXJ0cywgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKTtcblxuICByZXR1cm4gcGFyc2VkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJ0cyhwYXJ0cywgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKSB7XG4gIGxldCBwYXJzZWQ7XG5cbiAgY29uc3QgaW5kZXggPSAwO1xuXG4gIHBhcnNlZCA9IHBhcnNlUGFydE9mUGFydHMoaW5kZXgsIHBhcnRzLCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGFydE9mUGFydHMoaW5kZXgsIHBhcnRzLCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpIHtcbiAgbGV0IHBhcnNlZDtcblxuICBjb25zdCBwYXJ0c0xlbmd0aCA9IHBhcnRzLmxlbmd0aDtcblxuICBpZiAoaW5kZXggPT09IHBhcnRzTGVuZ3RoKSB7XG4gICAgcGFyc2VkID0gKGNhbGxiYWNrICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICBjYWxsYmFjaygpIDpcbiAgICAgICAgICAgICAgICAgdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBwYXJ0ID0gcGFydHNbaW5kZXhdO1xuXG4gICAgaW5kZXgrKztcblxuICAgIGlmIChjYWxsQWhlYWQgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHBhcnRMb29rQWhlYWQgPSBwYXJ0LmlzTG9va0FoZWFkKCk7XG5cbiAgICAgIGlmIChwYXJ0TG9va0FoZWFkKSB7XG4gICAgICAgIGxldCBwYXJ0Tm9kZXM7XG5cbiAgICAgICAgcGFyc2VkID0gcGFydC5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCAoKSA9PiB7XG4gICAgICAgICAgcGFydE5vZGVzID0gW107XG5cbiAgICAgICAgICBjb25zdCBub2RlcyA9IHBhcnROb2RlcywgIC8vL1xuICAgICAgICAgICAgICAgIHBhcnNlZCA9IHBhcnNlUGFydE9mUGFydHMoaW5kZXgsIHBhcnRzLCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpO1xuXG4gICAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICAgIHB1c2gobm9kZXMsIHBhcnROb2Rlcyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKTtcblxuICAgICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgICAgcGFyc2VkID0gcGFyc2VQYXJ0T2ZQYXJ0cyhpbmRleCwgcGFydHMsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VkID0gcGFydC5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCAoKSA9PiB7XG4gICAgICAgIGxldCBwYXJzZWQ7XG5cbiAgICAgICAgcGFyc2VkID0gcGFyc2VQYXJ0T2ZQYXJ0cyhpbmRleCwgcGFydHMsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCk7XG5cbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJzZWQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNoYXJhY3RlcnMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IHBhcnNlUGFydHMgfSBmcm9tIFwiLi91dGlsaXRpZXMvcGFyc2VcIjtcbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IFNQQUNFX0NIQVJBQ1RFUiB9ID0gY2hhcmFjdGVycztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHBhcnRzLCBwcmVjZWRlbmNlKSB7XG4gICAgdGhpcy5wYXJ0cyA9IHBhcnRzO1xuICAgIHRoaXMucHJlY2VkZW5jZSA9IHByZWNlZGVuY2U7XG4gIH1cblxuICBnZXRQYXJ0cygpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJ0cztcbiAgfVxuXG4gIGdldFByZWNlZGVuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJlY2VkZW5jZTtcbiAgfVxuXG4gIHBhcnNlKGNoaWxkTm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IG5vZGVzID0gY2hpbGROb2RlcywgLy8vXG4gICAgICAgICAgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKTtcblxuICAgIHBhcnNlZCA9IHBhcnNlUGFydHModGhpcy5wYXJ0cywgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKTtcblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGxldCBzdHJpbmc7XG5cbiAgICBjb25zdCBwYXJ0c1N0cmluZyA9IHRoaXMucGFydHMucmVkdWNlKChwYXJ0c1N0cmluZywgcGFydCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFydFN0cmluZyA9IHBhcnQuYXNTdHJpbmcoKTtcblxuICAgICAgICAgICAgaWYgKHBhcnRzU3RyaW5nID09PSBFTVBUWV9TVFJJTkcpIHtcbiAgICAgICAgICAgICAgcGFydHNTdHJpbmcgPSBwYXJ0U3RyaW5nOyAvLy9cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBhcnRzU3RyaW5nID0gYCR7cGFydHNTdHJpbmd9ICR7cGFydFN0cmluZ31gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcGFydHNTdHJpbmc7XG4gICAgICAgICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgIHN0cmluZyA9IHBhcnRzU3RyaW5nOyAvLy9cblxuICAgIGlmICh0aGlzLnByZWNlZGVuY2UgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHByZWNlZGVuY2UgPSAodGhpcy5wcmVjZWRlbmNlID09PSBJbmZpbml0eSkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BBQ0VfQ0hBUkFDVEVSIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVjZWRlbmNlO1xuXG4gICAgICBzdHJpbmcgPSBgJHtzdHJpbmd9ICgke3ByZWNlZGVuY2V9KWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUGFydHMoQ2xhc3MsIHBhcnRzKSB7XG4gICAgaWYgKHBhcnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcnRzID0gQ2xhc3M7ICAvLy9cblxuICAgICAgQ2xhc3MgPSBEZWZpbml0aW9uOyAvLy9cbiAgICB9XG5cbiAgICBjb25zdCBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICBkZWZpbml0aW9uID0gbmV3IENsYXNzKHBhcnRzLCBwcmVjZWRlbmNlKTtcblxuICAgIHJldHVybiBkZWZpbml0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21QYXJ0c0FuZFByZWNlZGVuY2UoQ2xhc3MsIHBhcnRzLCBwcmVjZWRlbmNlKSB7XG4gICAgaWYgKHByZWNlZGVuY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcHJlY2VkZW5jZSA9IHBhcnRzOyAvLy9cblxuICAgICAgcGFydHMgPSBDbGFzczsgIC8vL1xuXG4gICAgICBDbGFzcyA9IERlZmluaXRpb247IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IGRlZmluaXRpb24gPSBuZXcgQ2xhc3MocGFydHMsIHByZWNlZGVuY2UpO1xuXG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxQYXJ0IHtcbiAgaXNMb29rQWhlYWQoKSB7XG4gICAgY29uc3QgbG9va0FoZWFkID0gZmFsc2U7XG5cbiAgICByZXR1cm4gbG9va0FoZWFkO1xuICB9XG5cbiAgaXNOb25UZXJtaW5hbFBhcnQoKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxQYXJ0ID0gZmFsc2U7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxQYXJ0O1xuICB9XG5cbiAgaXNUZXJtaW5hbFBhcnQoKSB7XG4gICAgY29uc3QgdGVybWluYWxQYXJ0ID0gdHJ1ZTtcbiAgICBcbiAgICByZXR1cm4gdGVybWluYWxQYXJ0O1xuICB9XG5cbiAgaXNOb1doaXRlc3BhY2VQYXJ0KCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZVBhcnQgPSBmYWxzZTtcblxuICAgIHJldHVybiBub1doaXRlc3BhY2VQYXJ0O1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5pbXBvcnQgeyB0b2tlbkxpbmVJbmRleEZyb21Ub2tlbkFuZFRva2VucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvdG9rZW5zXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsTm9kZVBhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21UZXJtaW5hbE5vZGVBbmRUb2tlbnModGVybWluYWxOb2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gdGVybWluYWxOb2RlLmdldFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgICBjb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICB0eXBlID0gc2lnbmlmaWNhbnRUb2tlbi5nZXRUeXBlKCksXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlbkxpbmVJbmRleCA9IHRva2VuTGluZUluZGV4RnJvbVRva2VuQW5kVG9rZW5zKHNpZ25pZmljYW50VG9rZW4sIHRva2VucyksXG4gICAgICAgICAgc3RyaW5nID0gYFwiJHtjb250ZW50fVwiWyR7dHlwZX1dIFske3NpZ25pZmljYW50VG9rZW5MaW5lSW5kZXh9XWAsXG4gICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoID0gc3RyaW5nTGVuZ3RoLCAvLy9cbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKFRlcm1pbmFsTm9kZVBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZS5hcHBlbmRUb1RvcCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSk7XG5cbiAgICByZXR1cm4gdGVybWluYWxOb2RlUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbE5vZGVQYXJzZVRyZWUgZnJvbSBcIi4uL3BhcnNlVHJlZS90ZXJtaW5hbE5vZGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxOb2RlIHtcbiAgY29uc3RydWN0b3Ioc2lnbmlmaWNhbnRUb2tlbikge1xuICAgIHRoaXMuc2lnbmlmaWNhbnRUb2tlbiA9IHNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBnZXRTaWduaWZpY2FudFRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLnNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBnZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKSB7XG4gICAgY29uc3QgZmlyc3RTaWduaWZpY2FudFRva2VuID0gdGhpcy5zaWduaWZpY2FudFRva2VuOyAgLy8vXG5cbiAgICByZXR1cm4gZmlyc3RTaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgZ2V0TGFzdFNpZ25pZmljYW50VG9rZW4oKSB7XG4gICAgY29uc3QgbGFzdFNpZ25pZmljYW50VG9rZW4gPSB0aGlzLnNpZ25pZmljYW50VG9rZW47ICAvLy9cblxuICAgIHJldHVybiBsYXN0U2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIGlzTm9XaGl0ZXNwYWNlTm9kZSgpIHtcbiAgICBjb25zdCBub1doaXRlc3BhY2VOb2RlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlTm9kZTtcbiAgfVxuXG4gIGlzRW5kT2ZMaW5lTm9kZSgpIHtcbiAgICBjb25zdCBlbmRPZkxpbmVOb2RlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gZW5kT2ZMaW5lTm9kZTtcbiAgfVxuXG4gIGlzRXBzaWxvbk5vZGUoKSB7XG4gICAgY29uc3QgZXBzaWxvbk5vZGUgPSBmYWxzZTtcblxuICAgIHJldHVybiBlcHNpbG9uTm9kZTtcbiAgfVxuXG4gIGlzVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IHRydWU7XG4gICAgXG4gICAgcmV0dXJuIHRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGlzTm9uVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGdldFR5cGUoKSB7IHJldHVybiB0aGlzLnNpZ25pZmljYW50VG9rZW4uZ2V0VHlwZSgpOyB9XG5cbiAgZ2V0Q29udGVudCgpIHsgcmV0dXJuIHRoaXMuc2lnbmlmaWNhbnRUb2tlbi5nZXRDb250ZW50KCk7IH1cblxuICBnZXRQcmVjZWRlbmNlKCkgIHtcbiAgICBjb25zdCBwcmVjZWRlbmNlID0gbnVsbDtcblxuICAgIHJldHVybiBwcmVjZWRlbmNlO1xuICB9XG5cbiAgaXNMb3dlclByZWNlZGVuY2UocGFyZW50UnVsZU5hbWUsIHBhcmVudFByZWNlZGVuY2UpIHtcbiAgICBjb25zdCBsb3dlclByZWNlZGVuY2UgPSBmYWxzZTtcblxuICAgIHJldHVybiBsb3dlclByZWNlZGVuY2U7XG4gIH1cblxuICBpc0luY2x1ZGVkSW4obm9kZSkge1xuICAgIGxldCBpbmNsdWRlZEluID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcyA9PT0gbm9kZSkge1xuICAgICAgaW5jbHVkZWRJbiA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5vZGVOb25UZXJtaW5hbE5vZGUgPSBub2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgICAgIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG5vZGUsIC8vL1xuICAgICAgICAgICAgICBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKTtcblxuICAgICAgICBpbmNsdWRlZEluID0gY2hpbGROb2Rlcy5zb21lKChjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBpbmNsdWRlZEluQ2hpbGROb2RlID0gdGhpcy5pc0luY2x1ZGVkSW4oY2hpbGROb2RlKTtcblxuICAgICAgICAgIGlmIChpbmNsdWRlZEluQ2hpbGROb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbmNsdWRlZEluO1xuICB9XG5cbiAgbWF0Y2gobm9kZSwgZGVwdGggPSBJbmZpbml0eSwgZXhhY3RseSA9IGZhbHNlKSB7XG4gICAgbGV0IG1hdGNoZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IG5vZGVUZXJtaW5hbE5vZGUgPSBub2RlLmlzVGVybWluYWxOb2RlKCk7XG5cbiAgICBpZiAobm9kZVRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3QgdGVybWluYWxOb2RlID0gbm9kZSwgIC8vL1xuICAgICAgICAgICAgc2lnbmlmaWNhbnRUb2tlbiA9IHRlcm1pbmFsTm9kZS5nZXRTaWduaWZpY2FudFRva2VuKCk7XG5cbiAgICAgIG1hdGNoZXMgPSBleGFjdGx5ID9cbiAgICAgICAgICAgICAgICAgICh0aGlzLnNpZ25pZmljYW50VG9rZW4gPT09IHNpZ25pZmljYW50VG9rZW4pIDpcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2lnbmlmaWNhbnRUb2tlbi5tYXRjaChzaWduaWZpY2FudFRva2VuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxuXG4gIHNldFNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbikge1xuICAgIHRoaXMuc2lnbmlmaWNhbnRUb2tlbiA9IHNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBhc1BhcnNlVHJlZSh0b2tlbnMpIHtcbiAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSB0aGlzLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlUGFyc2VUcmVlID0gVGVybWluYWxOb2RlUGFyc2VUcmVlLmZyb21UZXJtaW5hbE5vZGVBbmRUb2tlbnModGVybWluYWxOb2RlLCB0b2tlbnMpLFxuICAgICAgICAgIHBhcnNlVHJlZSA9IHRlcm1pbmFsTm9kZVBhcnNlVHJlZTsgIC8vL1xuXG4gICAgcmV0dXJuIHBhcnNlVHJlZTtcbiAgfVxuXG4gIGNsb25lKCkge1xuICAgIGNvbnN0IENsYXNzID0gdGhpcy5jb25zdHJ1Y3RvcixcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuID0gdGhpcy5zaWduaWZpY2FudFRva2VuLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IG5ldyBDbGFzcyhzaWduaWZpY2FudFRva2VuKTtcblxuICAgIHJldHVybiB0ZXJtaW5hbE5vZGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoQ2xhc3MpIHtcbiAgICBpZiAoQ2xhc3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgQ2xhc3MgPSBUZXJtaW5hbE5vZGU7IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW4gPSBudWxsLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IG5ldyBDbGFzcyhzaWduaWZpY2FudFRva2VuKTtcblxuICAgIHJldHVybiB0ZXJtaW5hbE5vZGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVNpZ25pZmljYW50VG9rZW4oQ2xhc3MsIHNpZ25pZmljYW50VG9rZW4pIHtcbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzaWduaWZpY2FudFRva2VuID0gQ2xhc3M7IC8vL1xuXG4gICAgICBDbGFzcyA9IFRlcm1pbmFsTm9kZTsgLy8vXG4gICAgfVxuXG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gbmV3IENsYXNzKHNpZ25pZmljYW50VG9rZW4pO1xuICAgIFxuICAgIHJldHVybiB0ZXJtaW5hbE5vZGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IFRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS90ZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3RvcihzaWduaWZpY2FudFRva2VuVHlwZSkge1xuICAgIHN1cGVyKCk7XG4gICAgXG4gICAgdGhpcy5zaWduaWZpY2FudFRva2VuVHlwZSA9IHNpZ25pZmljYW50VG9rZW5UeXBlO1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGxldCB0ZXJtaW5hbE5vZGUgPSBudWxsO1xuICAgIFxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCksXG4gICAgICAgICAgbmV4dFNpZ25pZmljYW50VG9rZW4gPSBzdGF0ZS5nZXROZXh0U2lnbmlmaWNhbnRUb2tlbigpLFxuXHRcdFx0XHRcdHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG5cbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlblR5cGUgPSBzaWduaWZpY2FudFRva2VuLmdldFR5cGUoKTtcblxuICAgICAgaWYgKHNpZ25pZmljYW50VG9rZW5UeXBlID09PSB0aGlzLnNpZ25pZmljYW50VG9rZW5UeXBlKSB7XG4gICAgICAgIHRlcm1pbmFsTm9kZSA9IFRlcm1pbmFsTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZWQgPSAodGVybWluYWxOb2RlICE9PSBudWxsKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2godGVybWluYWxOb2RlKTtcblxuICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICBpZiAoY2FsbEFoZWFkICE9PSBudWxsKSB7XG4gICAgICAgICAgcGFyc2VkID0gY2FsbEFoZWFkKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBgWyR7dGhpcy5zaWduaWZpY2FudFRva2VuVHlwZX1dYDtcbiAgICBcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgc3RhdGljIGZyb21TaWduaWZpY2FudFRva2VuVHlwZShzaWduaWZpY2FudFRva2VuVHlwZSkge1xuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW5UeXBlUGFydCA9IG5ldyBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQoc2lnbmlmaWNhbnRUb2tlblR5cGUpO1xuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW5UeXBlUGFydDtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyB0eXBlcyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuY29uc3QgeyBuYW1lVHlwZSB9ID0gdHlwZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5hbWVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuVHlwZSA9IG5hbWVUeXBlLCAgLy8vXG4gICAgICAgICAgbmFtZVNpZ25pZmljYW50VG9rZW5UeXBlUGFydCA9IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydC5mcm9tU2lnbmlmaWNhbnRUb2tlblR5cGUoc2lnbmlmaWNhbnRUb2tlblR5cGUpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgbmFtZVNpZ25pZmljYW50VG9rZW5UeXBlUGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJlY2VkZW5jZSA9IG51bGwsXG4gICAgICAgICAgbmFtZURlZmluaXRpb24gPSBuZXcgTmFtZURlZmluaXRpb24ocGFydHMsIHByZWNlZGVuY2UpO1xuXG4gICAgcmV0dXJuIG5hbWVEZWZpbml0aW9uO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBuYW1lUnVsZU5hbWUgPSBcIm5hbWVcIjtcbmV4cG9ydCBjb25zdCBwYXJ0UnVsZU5hbWUgPSBcInBhcnRcIjtcbmV4cG9ydCBjb25zdCBydWxlUnVsZU5hbWUgPSBcInJ1bGVcIjtcbmV4cG9ydCBjb25zdCBlcnJvclJ1bGVOYW1lID0gXCJlcnJvclwiO1xuZXhwb3J0IGNvbnN0IGVwc2lsb25SdWxlTmFtZSA9IFwiZXBzaWxvblwiO1xuZXhwb3J0IGNvbnN0IHJ1bGVOYW1lUnVsZU5hbWUgPSBcInJ1bGVOYW1lXCI7XG5leHBvcnQgY29uc3QgZG9jdW1lbnRSdWxlTmFtZSA9IFwiZG9jdW1lbnRcIjtcbmV4cG9ydCBjb25zdCB3aWxkY2FyZFJ1bGVOYW1lID0gXCJ3aWxkY2FyZFwiO1xuZXhwb3J0IGNvbnN0IGVuZE9mTGluZVJ1bGVOYW1lID0gXCJlbmRPZkxpbmVcIjtcbmV4cG9ydCBjb25zdCBkZWZpbml0aW9uUnVsZU5hbWUgPSBcImRlZmluaXRpb25cIjtcbmV4cG9ydCBjb25zdCBwcmVjZWRlbmNlUnVsZU5hbWUgPSBcInByZWNlZGVuY2VcIjtcbmV4cG9ydCBjb25zdCBxdWFudGlmaWVyUnVsZU5hbWUgPSBcInF1YW50aWZpZXJcIjtcbmV4cG9ydCBjb25zdCBwYXJ0Q2hvaWNlUnVsZU5hbWUgPSBcInBhcnRDaG9pY2VcIjtcbmV4cG9ydCBjb25zdCBkZWZpbml0aW9uc1J1bGVOYW1lID0gXCJkZWZpbml0aW9uc1wiO1xuZXhwb3J0IGNvbnN0IHRlcm1pbmFsUGFydFJ1bGVOYW1lID0gXCJ0ZXJtaW5hbFBhcnRcIjtcbmV4cG9ydCBjb25zdCBjaG9pY2VPZlBhcnRzUnVsZU5hbWUgPSBcImNob2ljZU9mUGFydHNcIjtcbmV4cG9ydCBjb25zdCB0ZXJtaW5hbFN5bWJvbFJ1bGVOYW1lID0gXCJ0ZXJtaW5hbFN5bWJvbFwiO1xuZXhwb3J0IGNvbnN0IG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lID0gXCJub25UZXJtaW5hbFBhcnRcIjtcbmV4cG9ydCBjb25zdCBzZXF1ZW5jZU9mUGFydHNSdWxlTmFtZSA9IFwic2VxdWVuY2VPZlBhcnRzXCI7XG5leHBvcnQgY29uc3Qgbm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lID0gXCJub1doaXRlc3BhY2VQYXJ0XCI7XG5leHBvcnQgY29uc3QgbG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSA9IFwibG9va0FoZWFkTW9kaWZpZXJcIjtcbmV4cG9ydCBjb25zdCBhbWJpZ3VvdXNNb2RpZmllclJ1bGVOYW1lID0gXCJBbWJpZ3VvdXNNb2RpZmllclwiO1xuZXhwb3J0IGNvbnN0IHJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWUgPSBcInJlZ3VsYXJFeHByZXNzaW9uXCI7XG5leHBvcnQgY29uc3Qgb3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUgPSBcIm9wdGlvbmFsUXVhbnRpZmllclwiO1xuZXhwb3J0IGNvbnN0IG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSA9IFwib25lT3JNb3JlUXVhbnRpZmllclwiO1xuZXhwb3J0IGNvbnN0IHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgPSBcInplcm9Pck1vcmVRdWFudGlmaWVyXCI7XG5leHBvcnQgY29uc3Qgc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSA9IFwic2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IE5hbWVCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9uYW1lXCI7XG5pbXBvcnQgTmFtZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vbmFtZVwiO1xuXG5pbXBvcnQgeyBuYW1lUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5hbWVSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBuYW1lRGVmaW5pdGlvbiA9IE5hbWVEZWZpbml0aW9uLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgbmFtZSA9IG5hbWVSdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgbmFtZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IE5hbWVCTkZOb2RlLCAgLy8vXG4gICAgICAgICAgbmFtZVJ1bGUgPSBuZXcgTmFtZVJ1bGUobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiBuYW1lUnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCBsb29rQWhlYWQpIHtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMubG9va0FoZWFkID0gbG9va0FoZWFkO1xuICB9XG4gIFxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICBpc0xvb2tBaGVhZCgpIHtcbiAgICByZXR1cm4gdGhpcy5sb29rQWhlYWQ7XG4gIH1cblxuICBpc05vblRlcm1pbmFsUGFydCgpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbFBhcnQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsUGFydDtcbiAgfVxuXG4gIGlzVGVybWluYWxQYXJ0KCkge1xuICAgIGNvbnN0IHRlcm1pbmFsUGFydCA9IGZhbHNlO1xuICAgIFxuICAgIHJldHVybiB0ZXJtaW5hbFBhcnQ7XG4gIH1cblxuICBpc1J1bGVOYW1lUGFydCgpIHtcbiAgICBjb25zdCBydWxlTmFtZVBhcnQgPSBmYWxzZTtcblxuICAgIHJldHVybiBydWxlTmFtZVBhcnQ7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFJ1bGVOYW1lUGFydFR5cGUgPSBcInJ1bGVOYW1lUGFydFwiO1xuZXhwb3J0IGNvbnN0IE9wdGlvbmFsUGFydFBhcnRUeXBlID0gXCJvcHRpb25hbFBhcnRcIjtcbmV4cG9ydCBjb25zdCBDaG9pY2VPZlBhcnRzUGFydFR5cGUgPSBcImNob2ljZU9mUGFydHNcIjtcbmV4cG9ydCBjb25zdCBPbmVPck1vcmVQYXJ0c1BhcnRUeXBlID0gXCJvbmVPck1vcmVQYXJ0c1wiO1xuZXhwb3J0IGNvbnN0IFplcm9Pck1vcmVQYXJ0c1BhcnRUeXBlID0gXCJ6ZXJvT3JNb3JlUGFydHNcIjtcbmV4cG9ydCBjb25zdCBTZXF1ZW5jZU9mUGFydHNQYXJ0VHlwZSA9IFwic2VxdWVuY2VPZlBhcnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgUnVsZU5hbWVQYXJ0VHlwZSxcbiAgT3B0aW9uYWxQYXJ0UGFydFR5cGUsXG4gIENob2ljZU9mUGFydHNQYXJ0VHlwZSxcbiAgT25lT3JNb3JlUGFydHNQYXJ0VHlwZSxcbiAgWmVyb09yTW9yZVBhcnRzUGFydFR5cGUsXG4gIFNlcXVlbmNlT2ZQYXJ0c1BhcnRUeXBlXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBPcHRpb25hbFBhcnRQYXJ0VHlwZSB9IGZyb20gXCIuLi8uLi9wYXJ0VHlwZXNcIjtcblxuXG5jb25zdCB7IHF1ZXN0aW9uTWFyayB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9wdGlvbmFsUGFydFBhcnQgZXh0ZW5kcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCBsb29rQWhlYWQsIHBhcnQpIHtcbiAgICBzdXBlcih0eXBlLCBsb29rQWhlYWQpO1xuXG4gICAgdGhpcy5wYXJ0ID0gcGFydDtcbiAgfVxuXG4gIGdldFBhcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFydDtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCkge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLFxuICAgICAgICAgIG5vZGVzTGVuZ3RoID0gbm9kZXMubGVuZ3RoO1xuXG4gICAgcGFyc2VkID0gcGFyc2VPcHRpb25hbFBhcnQodGhpcy5wYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpO1xuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gbm9kZXNMZW5ndGg7ICAvLy9cblxuICAgICAgbm9kZXMuc3BsaWNlKHN0YXJ0KTtcblxuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBwYXJ0U3RyaW5nID0gdGhpcy5wYXJ0LmFzU3RyaW5nKCksXG4gICAgICAgICAgc3RyaW5nID0gYCR7cGFydFN0cmluZ30ke3F1ZXN0aW9uTWFya31gO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUGFydChwYXJ0KSB7XG4gICAgY29uc3QgdHlwZSA9IE9wdGlvbmFsUGFydFBhcnRUeXBlLFxuICAgICAgICAgIGxvb2tBaGVhZCA9IGZhbHNlLFxuICAgICAgICAgIG9wdGlvbmFsUGFydFBhcnQgPSBuZXcgT3B0aW9uYWxQYXJ0UGFydCh0eXBlLCBsb29rQWhlYWQsIHBhcnQpO1xuXG4gICAgcmV0dXJuIG9wdGlvbmFsUGFydFBhcnQ7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlT3B0aW9uYWxQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCkge1xuICBsZXQgcGFyc2VkO1xuXG4gIGlmIChjYWxsQWhlYWQgPT09IG51bGwpIHtcbiAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCk7XG5cblxuXG5cblxuICAgIHBhcnNlZCA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgcGFyc2VkID0gY2FsbEFoZWFkKCk7XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgcGFyc2VkID0gcGFydC5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpO1xuXG5cblxuXG5cblxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJzZWQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IFplcm9Pck1vcmVQYXJ0c1BhcnRUeXBlIH0gZnJvbSBcIi4uLy4uL3BhcnRUeXBlc1wiO1xuXG5cbmNvbnN0IHsgYXN0ZXJpc2sgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaZXJvT3JNb3JlUGFydHNQYXJ0IGV4dGVuZHMgTm9uVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IodHlwZSwgbG9va0FoZWFkLCBwYXJ0KSB7XG4gICAgc3VwZXIodHlwZSwgbG9va0FoZWFkKTtcblxuICAgIHRoaXMucGFydCA9IHBhcnQ7XG4gIH1cblxuICBnZXRQYXJ0KCkge1xuICAgIHJldHVybiB0aGlzLnBhcnQ7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSxcbiAgICAgICAgICBub2Rlc0xlbmd0aCA9IG5vZGVzLmxlbmd0aDtcblxuICAgIHBhcnNlZCA9IHBhcnNlWmVyb09yTW9yZVBhcnRzUGFydCh0aGlzLnBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCk7XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBub2Rlc0xlbmd0aDsgIC8vL1xuXG4gICAgICBub2Rlcy5zcGxpY2Uoc3RhcnQpO1xuXG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHBhcnRTdHJpbmcgPSB0aGlzLnBhcnQuYXNTdHJpbmcoKSxcbiAgICAgICAgICBzdHJpbmcgPSBgJHtwYXJ0U3RyaW5nfSR7YXN0ZXJpc2t9YDtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzdGF0aWMgZnJvbVBhcnQocGFydCkge1xuICAgIGNvbnN0IHR5cGUgPSBaZXJvT3JNb3JlUGFydHNQYXJ0VHlwZSxcbiAgICAgICAgICBsb29rQWhlYWQgPSBmYWxzZSxcbiAgICAgICAgICB6ZXJvT3JNb3JlUGFydHNQYXJ0ID0gbmV3IFplcm9Pck1vcmVQYXJ0c1BhcnQodHlwZSwgbG9va0FoZWFkLCBwYXJ0KTtcblxuICAgIHJldHVybiB6ZXJvT3JNb3JlUGFydHNQYXJ0O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVplcm9Pck1vcmVQYXJ0c1BhcnQocGFydCwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKSB7XG4gIGxldCBwYXJzZWQ7XG5cbiAgaWYgKGNhbGxBaGVhZCA9PT0gbnVsbCkge1xuICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHBhcnNlWmVyb09yTW9yZVBhcnRzUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpO1xuICAgIH1cblxuICAgIHBhcnNlZCA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgcGFyc2VkID0gY2FsbEFoZWFkKCk7XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgcGFyc2VkID0gcGFydC5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCAoKSA9PiB7XG4gICAgICAgIGxldCBwYXJzZWQ7XG5cbiAgICAgICAgcGFyc2VkID0gcGFyc2VaZXJvT3JNb3JlUGFydHNQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCk7XG5cbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJzZWQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IE9uZU9yTW9yZVBhcnRzUGFydFR5cGUgfSBmcm9tIFwiLi4vLi4vcGFydFR5cGVzXCI7XG5pbXBvcnQgeyBwYXJzZVplcm9Pck1vcmVQYXJ0c1BhcnQgfSBmcm9tIFwiLi96ZXJvT3JNb3JlUGFydHNcIjtcblxuY29uc3QgeyBwbHVzIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT25lT3JNb3JlUGFydHNQYXJ0IGV4dGVuZHMgTm9uVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IodHlwZSwgbG9va0FoZWFkLCBwYXJ0KSB7XG4gICAgc3VwZXIodHlwZSwgbG9va0FoZWFkKTtcblxuICAgIHRoaXMucGFydCA9IHBhcnQ7XG4gIH1cblxuICBnZXRQYXJ0KCkge1xuICAgIHJldHVybiB0aGlzLnBhcnQ7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSxcbiAgICAgICAgICBub2Rlc0xlbmd0aCA9IG5vZGVzLmxlbmd0aDtcblxuICAgIHBhcnNlZCA9IHBhcnNlT25lT3JNb3JlUGFydHNQYXJ0KHRoaXMucGFydCwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKTtcblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBjb25zdCBzdGFydCA9IG5vZGVzTGVuZ3RoOyAgLy8vXG5cbiAgICAgIG5vZGVzLnNwbGljZShzdGFydCk7XG5cbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3QgcGFydFN0cmluZyA9IHRoaXMucGFydC5hc1N0cmluZygpLFxuICAgICAgICAgIHN0cmluZyA9IGAke3BhcnRTdHJpbmd9JHtwbHVzfWA7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgc3RhdGljIGZyb21QYXJ0KHBhcnQpIHtcbiAgICBjb25zdCB0eXBlID0gT25lT3JNb3JlUGFydHNQYXJ0VHlwZSxcbiAgICAgICAgICBsb29rQWhlYWQgPSBmYWxzZSxcbiAgICAgICAgICBvbmVPck1vcmVQYXJ0c1BhcnQgPSBuZXcgT25lT3JNb3JlUGFydHNQYXJ0KHR5cGUsIGxvb2tBaGVhZCwgcGFydCk7XG5cbiAgICByZXR1cm4gb25lT3JNb3JlUGFydHNQYXJ0O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU9uZU9yTW9yZVBhcnRzUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpIHtcbiAgbGV0IHBhcnNlZDtcblxuICBpZiAoY2FsbEFoZWFkID09PSBudWxsKSB7XG4gICAgcGFyc2VkID0gcGFydC5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgcGFyc2VaZXJvT3JNb3JlUGFydHNQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCk7XG4gICAgfVxuXG5cbiAgfSBlbHNlIHtcblxuXG5cbiAgICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgKCkgPT4ge1xuICAgICAgICBsZXQgcGFyc2VkO1xuXG4gICAgICAgIHBhcnNlZCA9IHBhcnNlWmVyb09yTW9yZVBhcnRzUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpO1xuXG4gICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICB9KTtcblxuICB9XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IGxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUsIHF1YW50aWZpZXJSdWxlTmFtZSwgcnVsZU5hbWVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vZGVDaG9pY2VOb2RlKG5vZGUpIHtcbiAgbGV0IG5vZGVOb0Nob2ljZU5vZGUgPSBmYWxzZTtcblxuICBjb25zdCBub2RlVGVybWluYWxOb2RlID0gbm9kZS5pc1Rlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gbm9kZSwgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpO1xuXG4gICAgbm9kZU5vQ2hvaWNlTm9kZSA9ICh0ZXJtaW5hbE5vZGVDb250ZW50ID09PSBcInxcIik7XG4gIH1cblxuICByZXR1cm4gbm9kZU5vQ2hvaWNlTm9kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTm9kZVJ1bGVOYW1lTm9kZShub2RlKSB7XG4gIGxldCBub2RlUnVsZU5hbWVOb2RlID0gZmFsc2U7XG5cbiAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKSxcbiAgICAgICAgbm9kZU5vblRlcm1pbmFsTm9kZSA9ICFub2RlVGVybWluYWxOb2RlO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTtcblxuICAgIG5vZGVSdWxlTmFtZU5vZGUgPSAobm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPT09IHJ1bGVOYW1lUnVsZU5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVSdWxlTmFtZU5vZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vZGVRdWFudGlmaWVyTm9kZShub2RlKSB7XG4gIGxldCBub2RlUXVhbnRpZmllck5vZGUgPSBmYWxzZTtcblxuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICBydWxlTmFtZVF1YW50aWZpZXJSdWxlTmFtZSA9IChydWxlTmFtZSA9PT0gcXVhbnRpZmllclJ1bGVOYW1lKTtcblxuICAgIG5vZGVRdWFudGlmaWVyTm9kZSA9IHJ1bGVOYW1lUXVhbnRpZmllclJ1bGVOYW1lOyAgLy8vXG4gIH1cblxuICByZXR1cm4gbm9kZVF1YW50aWZpZXJOb2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOb2RlTG9va0FoZWFkTW9kaWZpZXJOb2RlKG5vZGUpIHtcbiAgbGV0IG5vZGVMb29rQWhlYWRNb2RpZmllck5vZGUgPSBmYWxzZTtcblxuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICBydWxlTmFtZUxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUgPSAocnVsZU5hbWUgPT09IGxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUpO1xuXG4gICAgbm9kZUxvb2tBaGVhZE1vZGlmaWVyTm9kZSA9IHJ1bGVOYW1lTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZTsgIC8vL1xuICB9XG5cbiAgcmV0dXJuIG5vZGVMb29rQWhlYWRNb2RpZmllck5vZGU7XG5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVOYW1lRnJvbVF1YW50aWZpZXJOb2RlKHF1YW50aWZpZXJOb2RlKSB7XG4gIGxldCBub25UZXJtaW5hbE5vZGU7XG5cbiAgbm9uVGVybWluYWxOb2RlID0gcXVhbnRpZmllck5vZGU7IC8vL1xuXG4gIGNvbnN0IGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpO1xuXG4gIG5vblRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlOyAgLy8vXG5cbiAgY29uc3QgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTtcblxuICByZXR1cm4gcnVsZU5hbWU7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5pbXBvcnQgT3B0aW9uYWxQYXJ0UGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9vcHRpb25hbFBhcnRcIjtcbmltcG9ydCBPbmVPck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvb25lT3JNb3JlUGFydHNcIjtcbmltcG9ydCBaZXJvT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL3plcm9Pck1vcmVQYXJ0c1wiO1xuXG5pbXBvcnQgeyBpc05vZGVRdWFudGlmaWVyTm9kZSwgcnVsZU5hbWVGcm9tUXVhbnRpZmllck5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2JuZlwiO1xuaW1wb3J0IHsgb3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUsIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSwgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBsYXN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFydEJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIG5vZGVzID0gY2hpbGROb2Rlcy5zbGljZSgpLFxuICAgICAgICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzKTtcblxuICAgIHJldHVybiBwYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMocnVsZU5hbWUsIGNoaWxkTm9kZXMsIGFtYmlndW91cykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMoUGFydEJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBhbWJpZ3VvdXMpOyB9XG59XG5cbmZ1bmN0aW9uIHBhcnRGcm9tTm9kZXMobm9kZXMpIHtcbiAgbGV0IHBhcnQgPSBudWxsO1xuXG4gIGNvbnN0IG5vZGVzTGVuZ3RoID0gbm9kZXMubGVuZ3RoO1xuXG4gIGlmIChub2Rlc0xlbmd0aCA9PT0gMSkge1xuICAgIGNvbnN0IG5vZGUgPSBub2Rlcy5wb3AoKSxcbiAgICAgICAgICBsb29rQWhlYWQgPSBmYWxzZTtcblxuICAgIHBhcnQgPSBub2RlLmdlbmVyYXRlUGFydChsb29rQWhlYWQpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGxhc3ROb2RlUXVhbnRpZmllck5vZGUgPSBpc0xhc3ROb2RlUXVhbnRpZmllck5vZGUobm9kZXMpO1xuXG4gICAgaWYgKGxhc3ROb2RlUXVhbnRpZmllck5vZGUpIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBub2Rlcy5wb3AoKSxcbiAgICAgICAgICAgIHF1YW50aWZpZXJOb2RlID0gbm9kZTsgIC8vL1xuXG4gICAgICBwYXJ0ID0gcGFydEZyb21Ob2Rlcyhub2Rlcyk7XG5cbiAgICAgIGNvbnN0IHJ1bGVOYW1lID0gcnVsZU5hbWVGcm9tUXVhbnRpZmllck5vZGUocXVhbnRpZmllck5vZGUpLFxuICAgICAgICAgICAgY29sbGVjdGlvbk9mUGFydHNQYXJ0ID0gY29sbGVjdGlvbk9mUGFydHNQYXJ0RnJvbVBhcnRBbmRSdWxlTmFtZShwYXJ0LCBydWxlTmFtZSk7XG5cbiAgICAgIHBhcnQgPSBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQ7IC8vL1xuICAgIH0gZWxzZSB7XG4gICAgICBub2Rlcy5zaGlmdCgpO1xuXG4gICAgICBwYXJ0ID0gcGFydEZyb21Ob2Rlcyhub2Rlcyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcnQ7XG59XG5cbmZ1bmN0aW9uIGlzTGFzdE5vZGVRdWFudGlmaWVyTm9kZShub2Rlcykge1xuICBjb25zdCBsYXN0Tm9kZSA9IGxhc3Qobm9kZXMpLFxuICAgICAgICBsYXN0Tm9kZVF1YW50aWZpZXJOb2RlID0gaXNOb2RlUXVhbnRpZmllck5vZGUobGFzdE5vZGUpO1xuXG4gIHJldHVybiBsYXN0Tm9kZVF1YW50aWZpZXJOb2RlO1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnRGcm9tUGFydEFuZFJ1bGVOYW1lKHBhcnQsIHJ1bGVOYW1lKSB7XG4gIGxldCBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQ7XG5cbiAgc3dpdGNoIChydWxlTmFtZSkge1xuICAgIGNhc2Ugb3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUgOlxuICAgICAgY29uc3Qgb3B0aW9uYWxQYXJ0UGFydCA9IE9wdGlvbmFsUGFydFBhcnQuZnJvbVBhcnQocGFydCk7XG5cbiAgICAgIGNvbGxlY3Rpb25PZlBhcnRzUGFydCA9IG9wdGlvbmFsUGFydFBhcnQ7IC8vL1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSA6XG4gICAgICBjb25zdCBvbmVPck1vcmVQYXJ0c1BhcnQgPSBPbmVPck1vcmVQYXJ0c1BhcnQuZnJvbVBhcnQocGFydCk7XG5cbiAgICAgIGNvbGxlY3Rpb25PZlBhcnRzUGFydCA9IG9uZU9yTW9yZVBhcnRzUGFydDsgLy8vXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSA6XG4gICAgICBjb25zdCB6ZXJvT3JNb3JlUGFydHNQYXJ0ID0gWmVyb09yTW9yZVBhcnRzUGFydC5mcm9tUGFydChwYXJ0KTtcblxuICAgICAgY29sbGVjdGlvbk9mUGFydHNQYXJ0ID0gemVyb09yTW9yZVBhcnRzUGFydDsgIC8vL1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gY29sbGVjdGlvbk9mUGFydHNQYXJ0O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBSdWxlTmFtZVBhcnRUeXBlIH0gZnJvbSBcIi4uLy4uL3BhcnRUeXBlc1wiO1xuXG5jb25zdCB7IGVsbGlwc2lzIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVQYXJ0IGV4dGVuZHMgTm9uVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IodHlwZSwgbG9va0FoZWFkLCBydWxlTmFtZSkge1xuICAgIHN1cGVyKHR5cGUsIGxvb2tBaGVhZCk7XG5cbiAgICB0aGlzLnJ1bGVOYW1lID0gcnVsZU5hbWU7XG4gIH1cbiAgXG4gIGdldFJ1bGVOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVOYW1lO1xuICB9XG5cbiAgaXNSdWxlTmFtZVBhcnQoKSB7XG4gICAgY29uc3QgcnVsZU5hbWVQYXJ0ID0gdHJ1ZTtcblxuICAgIHJldHVybiBydWxlTmFtZVBhcnQ7XG4gIH1cblxuICBmaW5kUnVsZShzdGF0ZSkge1xuICAgIGNvbnN0IHJ1bGVNYXAgPSBzdGF0ZS5nZXRSdWxlTWFwKCksXG4gICAgICAgICAgcnVsZSA9IHJ1bGVNYXBbdGhpcy5ydWxlTmFtZV0gfHwgbnVsbDsgIC8vL1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3QgcnVsZSA9IHRoaXMuZmluZFJ1bGUoc3RhdGUpO1xuXG4gICAgcGFyc2VkID0gKHJ1bGUgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgIHJ1bGUucGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKSA6XG4gICAgICAgICAgICAgICAgIGZhbHNlO1xuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IGxvb2tBaGVhZCA9IHRoaXMuaXNMb29rQWhlYWQoKSxcbiAgICAgICAgICBsb29rQWhlYWRTdHJpbmcgPSBsb29rQWhlYWQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxsaXBzaXMgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkcsXG4gICAgICAgICAgc3RyaW5nID0gYCR7dGhpcy5ydWxlTmFtZX0ke2xvb2tBaGVhZFN0cmluZ31gO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWUocnVsZU5hbWUpIHtcbiAgICBjb25zdCB0eXBlID0gUnVsZU5hbWVQYXJ0VHlwZSxcbiAgICAgICAgICBsb29rQWhlYWQgPSBmYWxzZSxcbiAgICAgICAgICBydWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHR5cGUsIGxvb2tBaGVhZCwgcnVsZU5hbWUpO1xuXG4gICAgcmV0dXJuIHJ1bGVOYW1lUGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTG9va0FoZWFkQW5kUnVsZU5hbWUobG9va0FoZWFkLCBydWxlTmFtZSkge1xuICAgIGNvbnN0IHR5cGUgPSBSdWxlTmFtZVBhcnRUeXBlLFxuICAgICAgICAgIHJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQodHlwZSwgbG9va0FoZWFkLCBydWxlTmFtZSk7XG5cbiAgICByZXR1cm4gcnVsZU5hbWVQYXJ0O1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVOYW1lRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBzdGF0aWMgZnJvbVJ1bGVOYW1lKHJ1bGVOYW1lKSB7XG4gICAgY29uc3QgcnVsZU5hbWVSdWxlTmFtZVBhcnQgPSBSdWxlTmFtZVBhcnQuZnJvbVJ1bGVOYW1lKHJ1bGVOYW1lKSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHJ1bGVOYW1lUnVsZU5hbWVQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICBydWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKHBhcnRzLCBwcmVjZWRlbmNlKTtcblxuICAgIHJldHVybiBydWxlTmFtZURlZmluaXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBaZXJvT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL3plcm9Pck1vcmVQYXJ0c1wiO1xuXG5pbXBvcnQgeyBxdWFudGlmaWVyUnVsZU5hbWUsIHRlcm1pbmFsUGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgcXVhbnRpZmllclJ1bGVOYW1lUGFydCA9IFJ1bGVOYW1lUGFydC5mcm9tUnVsZU5hbWUocXVhbnRpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlTmFtZVBhcnQgPSBSdWxlTmFtZVBhcnQuZnJvbVJ1bGVOYW1lKHRlcm1pbmFsUGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lUGFydHNQYXJ0ID0gWmVyb09yTW9yZVBhcnRzUGFydC5mcm9tUGFydChxdWFudGlmaWVyUnVsZU5hbWVQYXJ0KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWVQYXJ0c1BhcnRcbiAgICAgICAgICBdLFxuICAgICAgICAgIHByZWNlZGVuY2UgPSBudWxsLFxuICAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uID0gbmV3IFRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uKHBhcnRzLCBwcmVjZWRlbmNlKTtcblxuICAgIHJldHVybiB0ZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IFplcm9Pck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvemVyb09yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IHF1YW50aWZpZXJSdWxlTmFtZSwgbm9uVGVybWluYWxQYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBxdWFudGlmaWVyUnVsZU5hbWVQYXJ0ID0gUnVsZU5hbWVQYXJ0LmZyb21SdWxlTmFtZShxdWFudGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lUGFydCA9IFJ1bGVOYW1lUGFydC5mcm9tUnVsZU5hbWUobm9uVGVybWluYWxQYXJ0UnVsZU5hbWUpLFxuICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWVQYXJ0c1BhcnQgPSBaZXJvT3JNb3JlUGFydHNQYXJ0LmZyb21QYXJ0KHF1YW50aWZpZXJSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZVBhcnRzUGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJlY2VkZW5jZSA9IG51bGwsXG4gICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gPSBuZXcgTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24ocGFydHMsIHByZWNlZGVuY2UpO1xuICAgIFxuICAgIHJldHVybiBub25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFBhcnRCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9wYXJ0XCI7XG5pbXBvcnQgUnVsZU5hbWVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3J1bGVOYW1lXCI7XG5pbXBvcnQgVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcGFydFJ1bGUvdGVybWluYWxcIjtcbmltcG9ydCBOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9wYXJ0UnVsZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBwYXJ0UnVsZU5hbWUsIG5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFydFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IG5hbWUgPSBwYXJ0UnVsZU5hbWUsICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiA9IFRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gPSBOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbi5mcm9tTm90aGluZygpLFxuICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZURlZmluaXRpb24gPSBSdWxlTmFtZURlZmluaXRpb24uZnJvbVJ1bGVOYW1lKG5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZSksXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uLFxuICAgICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9uVGVybWluYWxOb2RlID0gUGFydEJORk5vZGUsICAvLy9cbiAgICAgICAgICBwYXJ0UnVsZSA9IG5ldyBQYXJ0UnVsZShuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIHBhcnRSdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmNvbnN0IHsgZmlyc3QsIHNlY29uZCwgdGhpcmQsIGZvdXJ0aCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVSdWxlKFJ1bGUpIHtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5nZXROYW1lKCksXG4gICAgICAgICAgYW1iaWd1b3VzID0gdGhpcy5pc0FtYmlndW91cygpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gdGhpcy5nZW5lcmF0ZURlZmluaXRpb25zKCksXG4gICAgICAgICAgcnVsZSA9IFJ1bGUuZnJvbU5hbWVBbWJpZ3VvdXNEZWZpbml0aW9uc0FuZE5vblRlcm1pbmFsTm9kZShuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICBpc0FtYmlndW91cygpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgc2Vjb25kQ2hpbGROb2RlID0gc2Vjb25kKGNoaWxkTm9kZXMpLFxuICAgICAgICAgIHNlY29uZENoaWxkTm9kZVRlcm1pbmFsTm9kZSA9IHNlY29uZENoaWxkTm9kZS5pc1Rlcm1pbmFsTm9kZSgpLFxuICAgICAgICAgIGFtYmlndW91cyA9ICFzZWNvbmRDaGlsZE5vZGVUZXJtaW5hbE5vZGU7XG5cbiAgICByZXR1cm4gYW1iaWd1b3VzO1xuICB9XG5cbiAgZ2V0TmFtZSgpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgICBuYW1lQk5GTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgbmFtZSA9IG5hbWVCTkZOb2RlLmdldE5hbWUoKTtcbiAgICBcbiAgICByZXR1cm4gbmFtZTtcbiAgfVxuICBcbiAgZ2VuZXJhdGVEZWZpbml0aW9ucygpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgY2hpbGROb2Rlc0xlbmd0aCA9IGNoaWxkTm9kZXMubGVuZ3RoLFxuICAgICAgICAgIHRoaXJkQ2hpbGROb2RlID0gdGhpcmQoY2hpbGROb2RlcyksXG4gICAgICAgICAgZm91cnRoQ2hpbGROb2RlID0gZm91cnRoKGNoaWxkTm9kZXMpLFxuICAgICAgICAgIGRlZmluaXRpb25zQk5GTm9kZSA9IChjaGlsZE5vZGVzTGVuZ3RoID09PSA0KSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlyZENoaWxkTm9kZSA6ICAvLy9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91cnRoQ2hpbGROb2RlLCAvLy9cbiAgICAgICAgICBkZWZpbml0aW9ucyA9IGRlZmluaXRpb25zQk5GTm9kZS5nZW5lcmF0ZURlZmluaXRpb25zKCk7XG4gICAgXG4gICAgcmV0dXJuIGRlZmluaXRpb25zO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMocnVsZU5hbWUsIGNoaWxkTm9kZXMsIGFtYmlndW91cykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMoUnVsZUJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBhbWJpZ3VvdXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWxcIjtcbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvdGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxTeW1ib2xQYXJ0IGV4dGVuZHMgVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IoY29udGVudCkge1xuICAgIHN1cGVyKCk7XG4gICAgXG4gICAgdGhpcy5jb250ZW50ID0gY29udGVudDtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCkge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBsZXQgdGVybWluYWxOb2RlID0gbnVsbDtcbiAgICBcbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLFxuICAgICAgICAgIG5leHRTaWduaWZpY2FudFRva2VuID0gc3RhdGUuZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSxcblx0XHRcdFx0XHRzaWduaWZpY2FudFRva2VuID0gbmV4dFNpZ25pZmljYW50VG9rZW47IC8vL1xuXG4gICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBzaWduaWZpY2FudFRva2VuLmdldENvbnRlbnQoKTtcblxuICAgICAgaWYgKGNvbnRlbnQgPT09IHRoaXMuY29udGVudCkge1xuICAgICAgICB0ZXJtaW5hbE5vZGUgPSBUZXJtaW5hbE5vZGUuZnJvbVNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFyc2VkID0gKHRlcm1pbmFsTm9kZSAhPT0gbnVsbCk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBub2Rlcy5wdXNoKHRlcm1pbmFsTm9kZSk7XG5cbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgaWYgKGNhbGxBaGVhZCAhPT0gbnVsbCkge1xuICAgICAgICAgIHBhcnNlZCA9IGNhbGxBaGVhZCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG4gIFxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5jb250ZW50LnJlcGxhY2UoL1xcXFwvLCBcIlxcXFxcXFxcXCIpLFxuICAgICAgICAgIHN0cmluZyA9IGBcIiR7Y29udGVudH1cImA7XG4gICAgXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7XG4gICAgY29uc3QgdGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydChjb250ZW50KTtcblxuICAgIHJldHVybiB0ZXJtaW5hbFN5bWJvbFBhcnQ7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgT3B0aW9uYWxQYXJ0UGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vcHRpb25hbFBhcnRcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuaW1wb3J0IHsgbmFtZVJ1bGVOYW1lLCBkZWZpbml0aW9uc1J1bGVOYW1lLCBhbWJpZ3VvdXNNb2RpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHNlcGFyYXRvciwgdGVybWluYXRvciB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBzZXBhcmF0b3JUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBzZXBhcmF0b3IsXG4gICAgICAgICAgdGVybWluYXRvclRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHRlcm1pbmF0b3IsXG4gICAgICAgICAgYW1iaWd1b3VzTW9kaWZpZXJSdWxlTmFtZVBhcnQgPSBSdWxlTmFtZVBhcnQuZnJvbVJ1bGVOYW1lKGFtYmlndW91c01vZGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIG5hbWVSdWxlTmFtZVBhcnQgPSBSdWxlTmFtZVBhcnQuZnJvbVJ1bGVOYW1lKG5hbWVSdWxlTmFtZSksXG4gICAgICAgICAgb3B0aW9uYWxBbWJpZ3VvdXNSdWxlTmFtZVBhcnRQYXJ0ID0gT3B0aW9uYWxQYXJ0UGFydC5mcm9tUGFydChhbWJpZ3VvdXNNb2RpZmllclJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgc2VwYXJhdG9yVGVybWluYWxTeW1ib2xQYXJ0ID0gVGVybWluYWxTeW1ib2xQYXJ0LmZyb21Db250ZW50KHNlcGFyYXRvclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgZGVmaW5pdGlvbnNSdWxlTmFtZVBhcnQgPSBSdWxlTmFtZVBhcnQuZnJvbVJ1bGVOYW1lKGRlZmluaXRpb25zUnVsZU5hbWUpLFxuICAgICAgICAgIHRlcm1pbmF0b3JUZXJtaW5hbFN5bWJvbFBhcnQgPSBUZXJtaW5hbFN5bWJvbFBhcnQuZnJvbUNvbnRlbnQodGVybWluYXRvclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBuYW1lUnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgb3B0aW9uYWxBbWJpZ3VvdXNSdWxlTmFtZVBhcnRQYXJ0LFxuICAgICAgICAgICAgc2VwYXJhdG9yVGVybWluYWxTeW1ib2xQYXJ0LFxuICAgICAgICAgICAgZGVmaW5pdGlvbnNSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICB0ZXJtaW5hdG9yVGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICBydWxlRGVmaW5pdGlvbiA9IG5ldyBSdWxlRGVmaW5pdGlvbihwYXJ0cywgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gcnVsZURlZmluaXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBSdWxlQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcnVsZVwiO1xuaW1wb3J0IFJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3J1bGVcIjtcblxuaW1wb3J0IHsgcnVsZVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgcnVsZURlZmluaXRpb24gPSBSdWxlRGVmaW5pdGlvbi5mcm9tTm90aGluZygpLFxuICAgICAgICAgIG5hbWUgPSBydWxlUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBSdWxlQk5GTm9kZSxcbiAgICAgICAgICBydWxlUnVsZSA9IG5ldyBSdWxlUnVsZShuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIHJ1bGVSdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXJyb3JCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMocnVsZU5hbWUsIGNoaWxkTm9kZXMsIGFtYmlndW91cykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMoRXJyb3JCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2RlcywgYW1iaWd1b3VzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IFRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS90ZXJtaW5hbFwiO1xuXG5jb25zdCB7IHdpbGRjYXJkIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2lsZGNhcmRQYXJ0IGV4dGVuZHMgVGVybWluYWxQYXJ0IHtcbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGxldCB0ZXJtaW5hbE5vZGUgPSBudWxsO1xuICAgIFxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCksXG4gICAgICAgICAgbmV4dFNpZ25pZmljYW50VG9rZW4gPSBzdGF0ZS5nZXROZXh0U2lnbmlmaWNhbnRUb2tlbigpLFxuXHRcdFx0XHRcdHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG5cbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgdGVybWluYWxOb2RlID0gVGVybWluYWxOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pO1xuICAgIH1cblxuICAgIHBhcnNlZCA9ICh0ZXJtaW5hbE5vZGUgIT09IG51bGwpO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgbm9kZXMucHVzaCh0ZXJtaW5hbE5vZGUpO1xuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIGlmIChjYWxsQWhlYWQgIT09IG51bGwpIHtcbiAgICAgICAgICBwYXJzZWQgPSBjYWxsQWhlYWQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IHdpbGRjYXJkOyAgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHdpbGRjYXJkUGFydCA9IG5ldyBXaWxkY2FyZFBhcnQoKTtcblxuICAgIHJldHVybiB3aWxkY2FyZFBhcnQ7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBXaWxkY2FyZFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvd2lsZGNhcmRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXJyb3JEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCB3aWxkY2FyZFBhcnQgPSBXaWxkY2FyZFBhcnQuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHdpbGRjYXJkUGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJlY2VkZW5jZSA9IG51bGwsXG4gICAgICAgICAgZXJyb3JEZWZpbml0aW9uID0gbmV3IEVycm9yRGVmaW5pdGlvbihwYXJ0cywgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gZXJyb3JEZWZpbml0aW9uO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgRXJyb3JCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9lcnJvclwiO1xuaW1wb3J0IEVycm9yRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9lcnJvclwiO1xuXG5pbXBvcnQgeyBlcnJvclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFcnJvclJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IGVycm9yRGVmaW5pdGlvbiA9IEVycm9yRGVmaW5pdGlvbi5mcm9tTm90aGluZygpLFxuICAgICAgICAgIG5hbWUgPSBlcnJvclJ1bGVOYW1lLCAvLy9cbiAgICAgICAgICBhbWJpZ3VvdXMgPSB0cnVlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZXJyb3JEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBFcnJvckJORk5vZGUsXG4gICAgICAgICAgZXJyb3JSdWxlID0gbmV3IEVycm9yUnVsZShuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIGVycm9yUnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuLi9wYXJzZVRyZWUvdmVydGljYWxCcmFuY2hcIjtcblxuY29uc3QgeyBlcHNpbG9uIH0gPSBzcGVjaWFsU3ltYm9scztcblxuY2xhc3MgRXBzaWxvbk5vZGVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBlcHNpbG9uLCAvLy9cbiAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGggPSBzdHJpbmdMZW5ndGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGgpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCksXG4gICAgICAgICAgdGVybWluYWxOb2RlUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oRXBzaWxvbk5vZGVQYXJzZVRyZWUsIHN0cmluZywgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUuYXBwZW5kVG9Ub3AodmVydGljYWxCcmFuY2hQYXJzZVRyZWUpO1xuXG4gICAgY29uc3QgZXBzaWxvbk5vZGVQYXJzZVRyZWUgPSB0ZXJtaW5hbE5vZGVQYXJzZVRyZWU7IC8vL1xuXG4gICAgcmV0dXJuIGVwc2lsb25Ob2RlUGFyc2VUcmVlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRXBzaWxvbk5vZGVQYXJzZVRyZWU7IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vdGVybWluYWxcIjtcbmltcG9ydCBFcHNpbG9uTm9kZVBhcnNlVHJlZSBmcm9tIFwiLi4vLi4vcGFyc2VUcmVlL2Vwc2lsb25Ob2RlXCI7XG5cbmNvbnN0IHsgZXBzaWxvbiB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVwc2lsb25Ob2RlIGV4dGVuZHMgVGVybWluYWxOb2RlIHtcbiAgaXNFcHNpbG9uTm9kZSgpIHtcbiAgICBjb25zdCBlcHNpbG9uTm9kZSA9IHRydWU7XG5cbiAgICByZXR1cm4gZXBzaWxvbk5vZGU7XG4gIH1cblxuICBnZXRUeXBlKCkge1xuICAgIGNvbnN0IHR5cGUgPSBudWxsOyAgLy8vXG5cbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIGdldENvbnRlbnQoKSB7XG4gICAgY29uc3QgY29udGVudCA9IGVwc2lsb247ICAvLy9cblxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgYXNQYXJzZVRyZWUodG9rZW5zKSB7XG4gICAgY29uc3QgZXBzaWxvbk5vZGVQYXJzZVRyZWUgPSBFcHNpbG9uTm9kZVBhcnNlVHJlZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHBhcnNlVHJlZSA9IGVwc2lsb25Ob2RlUGFyc2VUcmVlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgbWF0Y2gobm9kZSwgZGVwdGgpIHtcbiAgICBsZXQgbWF0Y2hlcyA9IGZhbHNlO1xuXG4gICAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKTtcblxuICAgIGlmIChub2RlVGVybWluYWxOb2RlKSB7XG4gICAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBub2RlLCAgLy8vXG4gICAgICAgICAgICB0ZXJtaW5hbE5vZGVFcHNpbG9uTm9kZSA9IHRlcm1pbmFsTm9kZS5pc0Vwc2lsb25Ob2RlKCk7XG5cbiAgICAgIGlmICh0ZXJtaW5hbE5vZGVFcHNpbG9uTm9kZSkge1xuICAgICAgICBtYXRjaGVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIFRlcm1pbmFsTm9kZS5mcm9tTm90aGluZyhFcHNpbG9uTm9kZSk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBUZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWxcIjtcbmltcG9ydCBFcHNpbG9uQk5GTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS90ZXJtaW5hbC9lcHNpbG9uXCI7XG5cbmNvbnN0IHsgZXBzaWxvbiB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVwc2lsb25QYXJ0IGV4dGVuZHMgVGVybWluYWxQYXJ0IHtcbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCksXG4gICAgICAgICAgZXBzaWxvbkJORk5vZGUgPSBFcHNpbG9uQk5GTm9kZS5mcm9tTm90aGluZygpO1xuXG4gICAgcGFyc2VkID0gKGVwc2lsb25CTkZOb2RlICE9PSBudWxsKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2goZXBzaWxvbkJORk5vZGUpO1xuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIGlmIChjYWxsQWhlYWQgIT09IG51bGwpIHtcbiAgICAgICAgICBwYXJzZWQgPSBjYWxsQWhlYWQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IGVwc2lsb247IC8vL1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBlcHNpbG9uUGFydCA9IG5ldyBFcHNpbG9uUGFydCgpO1xuXG4gICAgcmV0dXJuIGVwc2lsb25QYXJ0O1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFcHNpbG9uUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbC9lcHNpbG9uXCI7XG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVwc2lsb25CTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IGVwc2lsb25QYXJ0ID0gRXBzaWxvblBhcnQuZnJvbU5vdGhpbmcoKTtcblxuICAgIHJldHVybiBlcHNpbG9uUGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kQW1iaWd1b3VzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBhbWJpZ3VvdXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kQW1iaWd1b3VzKEVwc2lsb25CTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2RlcywgYW1iaWd1b3VzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHtcbiAgICBjb25zdCB0ZXJtaW5hbFN5bWJvbFBhcnQgPSBUZXJtaW5hbFN5bWJvbFBhcnQuZnJvbUNvbnRlbnQoY29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnRcbiAgICAgICAgICBdLFxuICAgICAgICAgIHByZWNlZGVuY2UgPSBudWxsLFxuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbiA9IG5ldyBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24ocGFydHMsIHByZWNlZGVuY2UpO1xuXG4gICAgcmV0dXJuIHRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBFcHNpbG9uQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvZXBzaWxvblwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi90ZXJtaW5hbFN5bWJvbFwiO1xuXG5pbXBvcnQgeyBlcHNpbG9uUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgZXBzaWxvbiB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVwc2lsb25SdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBjb250ZW50ID0gZXBzaWxvbiwgLy8vXG4gICAgICAgICAgZXBzaWxvblRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbiA9IFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbi5mcm9tQ29udGVudChjb250ZW50KSxcbiAgICAgICAgICBuYW1lID0gZXBzaWxvblJ1bGVOYW1lLCAvLy9cbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGVwc2lsb25UZXJtaW5hbFN5bWJvbERlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IEVwc2lsb25CTkZOb2RlLCAvLy9cbiAgICAgICAgICBlcHNpbG9uUnVsZSA9IG5ldyBFcHNpbG9uUnVsZShuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIGVwc2lsb25SdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBub2RlRnJvbUNoaWxkTm9kZXNBbmRSdWxlTmFtZShjaGlsZE5vZGVzLCBydWxlTmFtZSkge1xuICBsZXQgbm9kZSA9IG51bGw7XG5cbiAgY2hpbGROb2Rlcy5zb21lKChjaGlsZE5vZGUpID0+IHtcbiAgICBjb25zdCBjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUgPSBjaGlsZE5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgIGlmIChjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGNoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lUnVsZU5hbWUgPSAobm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPT09IHJ1bGVOYW1lKTtcblxuICAgICAgaWYgKG5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lUnVsZU5hbWUpIHtcbiAgICAgICAgbm9kZSA9IGNoaWxkTm9kZTsgLy8vXG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gbm9kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vZGVzRnJvbUNoaWxkTm9kZXNBbmRSdWxlTmFtZShjaGlsZE5vZGVzLCBydWxlTmFtZSkge1xuICBjb25zdCBub2RlcyA9IGNoaWxkTm9kZXMuZmlsdGVyKChjaGlsZE5vZGUpID0+IHtcbiAgICBjb25zdCBjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUgPSBjaGlsZE5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgIGlmIChjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGNoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lUnVsZU5hbWUgPSAobm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPT09IHJ1bGVOYW1lKTtcblxuICAgICAgaWYgKG5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lUnVsZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gbm9kZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbVwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBydWxlUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5pbXBvcnQgeyBub2Rlc0Zyb21DaGlsZE5vZGVzQW5kUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL25vZGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9jdW1lbnRCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVSdWxlcyhSdWxlKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIHJ1bGVCTkZOb2RlcyA9IG5vZGVzRnJvbUNoaWxkTm9kZXNBbmRSdWxlTmFtZShjaGlsZE5vZGVzLCBydWxlUnVsZU5hbWUpLFxuICAgICAgICAgIHJ1bGVzID0gcnVsZUJORk5vZGVzLm1hcCgocnVsZUJORk5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGUgPSBydWxlQk5GTm9kZS5nZW5lcmF0ZVJ1bGUoUnVsZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiBydWxlO1xuICAgICAgICAgIH0pO1xuICAgIFxuICAgIHJldHVybiBydWxlcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kQW1iaWd1b3VzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBhbWJpZ3VvdXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kQW1iaWd1b3VzKERvY3VtZW50Qk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMsIGFtYmlndW91cyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuY29uc3QgeyBTUEFDRV9DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhcnRDaG9pY2Uge1xuICBjb25zdHJ1Y3RvcihwYXJ0LCBwcmVjZWRlbmNlKSB7XG4gICAgdGhpcy5wYXJ0ID0gcGFydDtcbiAgICB0aGlzLnByZWNlZGVuY2UgPSBwcmVjZWRlbmNlO1xuICB9XG5cbiAgZ2V0UGFydCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJ0O1xuICB9XG5cbiAgZ2V0UHJlY2VkZW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcmVjZWRlbmNlO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgbGV0IHN0cmluZztcblxuICAgIGNvbnN0IHBhcnRTdHJpbmcgPSB0aGlzLnBhcnQuYXNTdHJpbmcoKTtcblxuICAgIHN0cmluZyA9IHBhcnRTdHJpbmc7ICAvLy9cblxuICAgIGlmICh0aGlzLnByZWNlZGVuY2UgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHByZWNlZGVuY2UgPSAodGhpcy5wcmVjZWRlbmNlID09PSBJbmZpbml0eSkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BBQ0VfQ0hBUkFDVEVSIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVjZWRlbmNlO1xuXG4gICAgICBzdHJpbmcgPSBgJHtzdHJpbmd9ICgke3ByZWNlZGVuY2V9KWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUGFydChwYXJ0KSB7XG4gICAgY29uc3QgcHJlY2VkZW5jZSA9IG51bGwsXG4gICAgICAgICAgcGFydENob2ljZSA9IG5ldyBQYXJ0Q2hvaWNlKHBhcnQsIHByZWNlZGVuY2UpO1xuXG4gICAgcmV0dXJuIHBhcnRDaG9pY2U7XG4gIH1cblxuICBzdGF0aWMgZnJvbVBhcnRBbmRQcmVjZWRlbmNlKHBhcnQsIHByZWNlZGVuY2UpIHtcbiAgICBjb25zdCBwYXJ0Q2hvaWNlID0gbmV3IFBhcnRDaG9pY2UocGFydCwgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gcGFydENob2ljZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IHBhcnNlUGFydCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvcGFyc2VcIjtcbmltcG9ydCB7IENob2ljZU9mUGFydHNQYXJ0VHlwZSB9IGZyb20gXCIuLi8uLi9wYXJ0VHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hvaWNlT2ZQYXJ0c1BhcnQgZXh0ZW5kcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCBsb29rQWhlYWQsIHBhcnRDaG9pY2VzKSB7XG4gICAgc3VwZXIodHlwZSwgbG9va0FoZWFkKTtcbiAgICBcbiAgICB0aGlzLnBhcnRDaG9pY2VzID0gcGFydENob2ljZXM7XG4gIH1cbiAgXG4gIGdldFBhcnRDaG9pY2VzKCkge1xuICAgIHJldHVybiB0aGlzLnBhcnRDaG9pY2VzO1xuICB9XG5cbiAgZ2V0UGFydHMoKSB7XG4gICAgY29uc3QgcGFydHMgPSB0aGlzLnBhcnRDaG9pY2VzLm1hcCgocGFydENob2ljZSkgPT4ge1xuICAgICAgY29uc3QgcGFydCA9IHBhcnRDaG9pY2UuZ2V0UGFydCgpO1xuXG4gICAgICByZXR1cm4gcGFydDtcbiAgICB9KTtcblxuICAgIHJldHVybiBwYXJ0cztcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCkge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBzYXZlZFByZWNlZGVuY2UgPSBzdGF0ZS5nZXRTYXZlZFByZWNlZGVuY2UoKTtcblxuICAgIHBhcnNlZCA9IHRoaXMucGFydENob2ljZXMuc29tZSgocGFydENob2ljZSkgPT4ge1xuICAgICAgbGV0IHBhcnNlZDtcblxuICAgICAgY29uc3QgcGFydCA9IHBhcnRDaG9pY2UuZ2V0UGFydCgpLFxuICAgICAgICAgICAgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSxcbiAgICAgICAgICAgIHByZWNlZGVuY2UgPSBwYXJ0Q2hvaWNlLmdldFByZWNlZGVuY2UoKSxcbiAgICAgICAgICAgIG5vZGVzTGVuZ3RoID0gbm9kZXMubGVuZ3RoO1xuXG4gICAgICBpZiAocHJlY2VkZW5jZSAhPT0gbnVsbCkge1xuICAgICAgICBzdGF0ZS5zZXRQcmVjZWRlbmNlKHByZWNlZGVuY2UpO1xuICAgICAgfVxuXG4gICAgICBjYWxsYmFjayA9IChjYWxsQWhlYWQgPT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgbnVsbCA6XG4gICAgICAgICAgICAgICAgICAgICAgKCkgPT4geyAgLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFyc2VkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQgPSBjYWxsQWhlYWQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICBwYXJzZWQgPSBwYXJzZVBhcnQocGFydCwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKTtcblxuICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBub2Rlc0xlbmd0aDsgIC8vL1xuXG4gICAgICAgIG5vZGVzLnNwbGljZShzdGFydCk7XG5cbiAgICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyc2VkO1xuICAgIH0pO1xuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLnJlc2V0UHJlY2VkZW5jZShzYXZlZFByZWNlZGVuY2UpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBwYXJ0Q2hvaWNlc1N0cmluZyA9IHRoaXMucGFydENob2ljZXMucmVkdWNlKChwYXJ0Q2hvaWNlc1N0cmluZywgcGFydENob2ljZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFydENob2ljZVN0cmluZyA9IHBhcnRDaG9pY2UuYXNTdHJpbmcoKTtcbiAgICBcbiAgICAgICAgICAgIGlmIChwYXJ0Q2hvaWNlc1N0cmluZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICBwYXJ0Q2hvaWNlc1N0cmluZyA9IHBhcnRDaG9pY2VTdHJpbmc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwYXJ0Q2hvaWNlc1N0cmluZyA9IGAke3BhcnRDaG9pY2VzU3RyaW5nfSB8ICR7cGFydENob2ljZVN0cmluZ31gO1xuICAgICAgICAgICAgfVxuICAgIFxuICAgICAgICAgICAgcmV0dXJuIHBhcnRDaG9pY2VzU3RyaW5nO1xuICAgICAgICAgIH0sIG51bGwpLFxuICAgICAgICAgIHN0cmluZyA9IGAoICR7cGFydENob2ljZXNTdHJpbmd9IClgO1xuICAgIFxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzdGF0aWMgZnJvbVBhcnRDaG9pY2VzKHBhcnRDaG9pY2VzKSB7XG4gICAgY29uc3QgdHlwZSA9IENob2ljZU9mUGFydHNQYXJ0VHlwZSxcbiAgICAgICAgICBsb29rQWhlYWQgPSBmYWxzZSxcbiAgICAgICAgICBjaG9pY2VPZlBhcnRzUGFydCA9IG5ldyBDaG9pY2VPZlBhcnRzUGFydCh0eXBlLCBsb29rQWhlYWQsIHBhcnRDaG9pY2VzKTtcblxuICAgIHJldHVybiBjaG9pY2VPZlBhcnRzUGFydDtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFBhcnRDaG9pY2UgZnJvbSBcIi4uL3BhcnRDaG9pY2VcIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9jaG9pY2VPZlBhcnRzXCI7XG5pbXBvcnQgT25lT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IHJ1bGVSdWxlTmFtZSwgZXJyb3JSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9jdW1lbnREZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBydWxlUnVsZU5hbWVQYXJ0ID0gUnVsZU5hbWVQYXJ0LmZyb21SdWxlTmFtZShydWxlUnVsZU5hbWUpLFxuICAgICAgICAgIGVycm9yUnVsZU5hbWVQYXJ0ID0gUnVsZU5hbWVQYXJ0LmZyb21SdWxlTmFtZShlcnJvclJ1bGVOYW1lKSxcbiAgICAgICAgICBydWxlUnVsZU5hbWVQYXJ0Q2hvaWNlID0gUGFydENob2ljZS5mcm9tUGFydChydWxlUnVsZU5hbWVQYXJ0KSxcbiAgICAgICAgICBlcnJvclJ1bGVOYW1lUGFydENob2ljZSA9IFBhcnRDaG9pY2UuZnJvbVBhcnQoZXJyb3JSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHBhcnRDaG9pY2VzID0gW1xuICAgICAgICAgICAgcnVsZVJ1bGVOYW1lUGFydENob2ljZSxcbiAgICAgICAgICAgIGVycm9yUnVsZU5hbWVQYXJ0Q2hvaWNlXG4gICAgICAgICAgXSxcbiAgICAgICAgICBjaG9pY2VPZlJ1bGVSdWxlTmFtZUFuZEVycm9yUnVsZU5hbWVQYXJ0c1BhcnQgPSBDaG9pY2VPZlBhcnRzUGFydC5mcm9tUGFydENob2ljZXMocGFydENob2ljZXMpLFxuICAgICAgICAgIG9uZU9yTW9yZUNob2ljZU9mUnVsZVJ1bGVOYW1lQW5kRXJyb3JSdWxlTmFtZVBhcnRzUGFydHNQYXJ0ID0gT25lT3JNb3JlUGFydHNQYXJ0LmZyb21QYXJ0KGNob2ljZU9mUnVsZVJ1bGVOYW1lQW5kRXJyb3JSdWxlTmFtZVBhcnRzUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBvbmVPck1vcmVDaG9pY2VPZlJ1bGVSdWxlTmFtZUFuZEVycm9yUnVsZU5hbWVQYXJ0c1BhcnRzUGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJlY2VkZW5jZSA9IG51bGwsXG4gICAgICAgICAgZG9jdW1lbnREZWZpbml0aW9uID0gbmV3IERvY3VtZW50RGVmaW5pdGlvbihwYXJ0cywgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gZG9jdW1lbnREZWZpbml0aW9uO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgRG9jdW1lbnRCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9kb2N1bWVudFwiO1xuaW1wb3J0IERvY3VtZW50RGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9kb2N1bWVudFwiO1xuXG5pbXBvcnQgeyBkb2N1bWVudFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb2N1bWVudFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IGRvY3VtZW50RGVmaW5pdGlvbiA9IERvY3VtZW50RGVmaW5pdGlvbi5mcm9tTm90aGluZygpLFxuICAgICAgICAgIG5hbWUgPSBkb2N1bWVudFJ1bGVOYW1lLCAgLy8vXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBkb2N1bWVudERlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IERvY3VtZW50Qk5GTm9kZSwgIC8vL1xuICAgICAgICAgIGRvY3VtZW50UnVsZSA9IG5ldyBEb2N1bWVudFJ1bGUobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiBkb2N1bWVudFJ1bGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVOYW1lQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGUgPSBmaXJzdENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIHJ1bGVOYW1lID0gdGVybWluYWxOb2RlQ29udGVudCwgLy8vXG4gICAgICAgICAgcnVsZU5hbWVQYXJ0ID0gUnVsZU5hbWVQYXJ0LmZyb21Mb29rQWhlYWRBbmRSdWxlTmFtZShsb29rQWhlYWQsIHJ1bGVOYW1lKTtcblxuICAgIHJldHVybiBydWxlTmFtZVBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZEFtYmlndW91cyhydWxlTmFtZSwgY2hpbGROb2RlcywgYW1iaWd1b3VzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZEFtYmlndW91cyhSdWxlTmFtZUJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBhbWJpZ3VvdXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgTmFtZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vbmFtZVwiO1xuaW1wb3J0IFJ1bGVOYW1lQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcnVsZU5hbWVcIjtcblxuaW1wb3J0IHsgcnVsZU5hbWVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBuYW1lRGVmaW5pdGlvbiA9IE5hbWVEZWZpbml0aW9uLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgbmFtZSA9IHJ1bGVOYW1lUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG5hbWVEZWZpbml0aW9uICAvLy9cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IFJ1bGVOYW1lQk5GTm9kZSwgIC8vL1xuICAgICAgICAgIHJ1bGVOYW1lUnVsZSA9IG5ldyBSdWxlTmFtZVJ1bGUobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiBydWxlTmFtZVJ1bGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFdpbGRjYXJkUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbC93aWxkY2FyZFwiO1xuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaWxkY2FyZEJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3Qgd2lsZGNhcmRQYXJ0ID0gV2lsZGNhcmRQYXJ0LmZyb21Ob3RoaW5nKCk7XG5cbiAgICByZXR1cm4gd2lsZGNhcmRQYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMocnVsZU5hbWUsIGNoaWxkTm9kZXMsIGFtYmlndW91cykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMoV2lsZGNhcmRCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2RlcywgYW1iaWd1b3VzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBXaWxkY2FyZEJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3dpbGRjYXJkXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmltcG9ydCB7IHdpbGRjYXJkUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgd2lsZGNhcmQgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaWxkY2FyZFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSB3aWxkY2FyZCwgLy8vXG4gICAgICAgICAgd2lsZGNhcmRUZXJtaW5hbFN5bWJvbERlZmluaXRpb24gPSBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24uZnJvbUNvbnRlbnQoY29udGVudCksXG4gICAgICAgICAgbmFtZSA9IHdpbGRjYXJkUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHdpbGRjYXJkVGVybWluYWxTeW1ib2xEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBXaWxkY2FyZEJORk5vZGUsICAvLy9cbiAgICAgICAgICB3aWxkY2FyZFJ1bGUgPSBuZXcgV2lsZGNhcmRSdWxlKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gd2lsZGNhcmRSdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXRlIHtcbiAgY29uc3RydWN0b3IoaW5kZXgsIHRva2VucywgcnVsZU1hcCwgcHJlY2VkZW5jZSkge1xuXHRcdHRoaXMuaW5kZXggPSBpbmRleDtcbiAgICB0aGlzLnRva2VucyA9IHRva2VucztcbiAgICB0aGlzLnJ1bGVNYXAgPSBydWxlTWFwO1xuICAgIHRoaXMucHJlY2VkZW5jZSA9IHByZWNlZGVuY2U7XG4gIH1cblxuICBnZXRJbmRleCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbmRleDtcbiAgfVxuXG4gIGdldFRva2VucygpIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbnM7XG4gIH1cblxuICBnZXRSdWxlTWFwKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVNYXA7XG4gIH1cblxuICBnZXRQcmVjZWRlbmNlKCkge1xuICAgIHJldHVybiB0aGlzLnByZWNlZGVuY2U7XG4gIH1cblxuICBzZXRJbmRleChpbmRleCkge1xuICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgfVxuXG4gIHNldFRva2Vucyh0b2tlbnMpIHtcbiAgICB0aGlzLnRva2VucyA9IHRva2VucztcbiAgfVxuXG4gIHNldFJ1bGVNYXAocnVsZU1hcCkge1xuICAgIHRoaXMucnVsZU1hcCA9IHJ1bGVNYXA7XG4gIH1cblxuICBzZXRQcmVjZWRlbmNlKHByZWNlZGVuY2UpIHtcbiAgICB0aGlzLnByZWNlZGVuY2UgPSBwcmVjZWRlbmNlO1xuICB9XG5cbiAgZ2V0U2F2ZWRQcmVjZWRlbmNlKCkge1xuICAgIGNvbnN0IHNhdmVkUHJlY2VkZW5jZSA9IHRoaXMucHJlY2VkZW5jZTtcblxuICAgIHJldHVybiBzYXZlZFByZWNlZGVuY2U7XG4gIH1cblxuICBnZXRTYXZlZEluZGV4KCkge1xuICAgIGNvbnN0IHNhdmVkSW5kZXggPSB0aGlzLmluZGV4OyAvLy9cbiAgXG4gICAgcmV0dXJuIHNhdmVkSW5kZXg7XG4gIH1cblxuICBnZXROZXh0VG9rZW4oKSB7XG4gICAgbGV0IG5leHRUb2tlbiA9IG51bGw7XG5cbiAgICBjb25zdCB0b2tlbnNMZW5ndGggPSB0aGlzLnRva2Vucy5sZW5ndGg7XG5cbiAgICBpZiAodGhpcy5pbmRleCA8IHRva2Vuc0xlbmd0aCkge1xuICAgICAgbmV4dFRva2VuID0gdGhpcy50b2tlbnNbdGhpcy5pbmRleCsrXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dFRva2VuO1xuICB9XG5cbiAgZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSB7XG5cdFx0bGV0IG5leHRTaWduaWZpY2FudFRva2VuID0gbnVsbDtcblxuICBcdGNvbnN0IHRva2Vuc0xlbmd0aCA9IHRoaXMudG9rZW5zLmxlbmd0aDtcblxuICBcdHdoaWxlICh0aGlzLmluZGV4IDwgdG9rZW5zTGVuZ3RoKSB7XG4gIFx0XHRjb25zdCB0b2tlbiA9IHRoaXMudG9rZW5zW3RoaXMuaW5kZXgrK10sXG5cdFx0XHRcdFx0XHR0b2tlblNpZ25pZmljYW50ID0gdG9rZW4uaXNTaWduaWZpY2FudCgpO1xuXG4gIFx0XHRpZiAodG9rZW5TaWduaWZpY2FudCkge1xuICBcdFx0ICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gdG9rZW47IC8vL1xuXG5cdFx0XHRcdG5leHRTaWduaWZpY2FudFRva2VuID0gc2lnbmlmaWNhbnRUb2tlbjtcdC8vL1xuXG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuICBcdH1cblxuXHRcdHJldHVybiBuZXh0U2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIGlzTmV4dFRva2VuV2hpdGVzcGFjZVRva2VuKCkge1xuICAgIGxldCBuZXh0VG9rZW5XaGl0ZXNwYWNlVG9rZW4gPSBmYWxzZTtcblxuICAgIGNvbnN0IHRva2Vuc0xlbmd0aCA9IHRoaXMudG9rZW5zLmxlbmd0aDtcblxuICAgIGlmICh0aGlzLmluZGV4IDwgdG9rZW5zTGVuZ3RoKSB7XG4gICAgICBjb25zdCBuZXh0VG9rZW4gPSB0aGlzLnRva2Vuc1t0aGlzLmluZGV4XTtcblxuICAgICAgbmV4dFRva2VuV2hpdGVzcGFjZVRva2VuID0gbmV4dFRva2VuLmlzV2hpdGVzcGFjZVRva2VuKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHRUb2tlbldoaXRlc3BhY2VUb2tlbjtcbiAgfVxuXG5cdGJhY2t0cmFjayhzYXZlZEluZGV4KSB7XG5cdFx0dGhpcy5pbmRleCA9IHNhdmVkSW5kZXg7ICAvLy9cblx0fVxuXG4gIHJlc2V0UHJlY2VkZW5jZShzYXZlZFByZWNlZGVuY2UpIHtcbiAgICB0aGlzLnByZWNlZGVuY2UgPSBzYXZlZFByZWNlZGVuY2U7ICAvLy9cbiAgfVxuXG4gIHN0YXRpYyBmcm9tVG9rZW5zQW5kUnVsZU1hcCh0b2tlbnMsIHJ1bGVNYXApIHtcbiAgICBjb25zdCBpbmRleCA9IDAsXG4gICAgICAgICAgcHJlY2VkZW5jZSA9IG51bGwsXG5cdFx0XHRcdFx0c3RhdGUgPSBuZXcgU3RhdGUoaW5kZXgsIHRva2VucywgcnVsZU1hcCwgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBTdGF0ZSBmcm9tIFwiLi4vc3RhdGVcIjtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmZ1bmN0aW9uIHBhcnNlKHRva2VucywgcnVsZSA9IHRoaXMuc3RhcnRSdWxlKSB7XG4gIGxldCBub2RlID0gbnVsbDtcblxuICBjb25zdCBub2RlcyA9IFtdLFxuICAgICAgICBzdGF0ZSA9IFN0YXRlLmZyb21Ub2tlbnNBbmRSdWxlTWFwKHRva2VucywgdGhpcy5ydWxlTWFwKSxcbiAgICAgICAgY2FsbGJhY2sgPSBudWxsLFxuICAgICAgICBjYWxsQWhlYWQgPSBudWxsLFxuICAgICAgICBwYXJzZWQgPSBydWxlLnBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCk7XG5cbiAgaWYgKHBhcnNlZCkge1xuICAgIGNvbnN0IGZpcnN0Tm9kZSA9IGZpcnN0KG5vZGVzKTtcblxuICAgIG5vZGUgPSBmaXJzdE5vZGU7IC8vL1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59XG5cbmNvbnN0IHBhcnNlck1peGlucyA9IHtcbiAgcGFyc2Vcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHBhcnNlck1peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5jb25zdCB7IEVORF9PRl9MSU5FIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lTm9kZVBhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IEVORF9PRl9MSU5FLCAvLy9cbiAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGggPSBzdHJpbmdMZW5ndGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGgpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCksXG4gICAgICAgICAgdGVybWluYWxOb2RlUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oRW5kT2ZMaW5lTm9kZVBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZS5hcHBlbmRUb1RvcCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSk7XG5cbiAgICBjb25zdCBlbmRPZkxpbmVOb2RlUGFyc2VUcmVlID0gdGVybWluYWxOb2RlUGFyc2VUcmVlOyAvLy9cblxuICAgIHJldHVybiBlbmRPZkxpbmVOb2RlUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uL3Rlcm1pbmFsXCI7XG5pbXBvcnQgRW5kT2ZMaW5lTm9kZVBhcnNlVHJlZSBmcm9tIFwiLi4vLi4vcGFyc2VUcmVlL2VuZE9mTGluZU5vZGVcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVOb2RlIGV4dGVuZHMgVGVybWluYWxOb2RlIHtcbiAgaXNFbmRPZkxpbmVOb2RlKCkge1xuICAgIGNvbnN0IGVuZE9mTGluZU5vZGUgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGVuZE9mTGluZU5vZGU7XG4gIH1cblxuICBnZXRDb250ZW50KGZhaXRoZnVsID0gZmFsc2UpIHtcbiAgICBjb25zdCBjb250ZW50ID0gZmFpdGhmdWwgP1xuICAgICAgICAgICAgICAgICAgICAgIHN1cGVyLmdldENvbnRlbnQoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkc7IC8vL1xuXG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBhc1BhcnNlVHJlZSh0b2tlbnMpIHtcbiAgICBjb25zdCBlbmRPZkxpbmVOb2RlUGFyc2VUcmVlID0gRW5kT2ZMaW5lTm9kZVBhcnNlVHJlZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHBhcnNlVHJlZSA9IGVuZE9mTGluZU5vZGVQYXJzZVRyZWU7ICAvLy9cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbikgeyByZXR1cm4gVGVybWluYWxOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKEVuZE9mTGluZU5vZGUsIHNpZ25pZmljYW50VG9rZW4pOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgRW5kT2ZMaW5lTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS90ZXJtaW5hbC9lbmRPZkxpbmVcIjtcblxuY29uc3QgeyBFTkRfT0ZfTElORSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZVBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgbGV0IGVuZE9mTGluZU5vZGUgPSBudWxsO1xuICAgIFxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCksXG4gICAgICAgICAgbmV4dFNpZ25pZmljYW50VG9rZW4gPSBzdGF0ZS5nZXROZXh0U2lnbmlmaWNhbnRUb2tlbigpLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG5cbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbkVuZE9mTGluZVRva2VuID0gc2lnbmlmaWNhbnRUb2tlbi5pc0VuZE9mTGluZVRva2VuKCk7XG5cbiAgICAgIGlmIChzaWduaWZpY2FudFRva2VuRW5kT2ZMaW5lVG9rZW4pIHtcbiAgICAgICAgZW5kT2ZMaW5lTm9kZSA9IEVuZE9mTGluZU5vZGUuZnJvbVNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFyc2VkID0gKGVuZE9mTGluZU5vZGUgIT09IG51bGwpO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgbm9kZXMucHVzaChlbmRPZkxpbmVOb2RlKTtcblxuICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICBpZiAoY2FsbEFoZWFkICE9PSBudWxsKSB7XG4gICAgICAgICAgcGFyc2VkID0gY2FsbEFoZWFkKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBFTkRfT0ZfTElORTsgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IGVuZE9mTGluZVBhcnQgPSBuZXcgRW5kT2ZMaW5lUGFydCgpO1xuXG4gICAgcmV0dXJuIGVuZE9mTGluZVBhcnQ7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVuZE9mTGluZVBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWwvZW5kT2ZMaW5lXCI7XG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZUJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgZW5kT2ZMaW5lUGFydCA9IEVuZE9mTGluZVBhcnQuZnJvbU5vdGhpbmcoKTtcblxuICAgIHJldHVybiBlbmRPZkxpbmVQYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMocnVsZU5hbWUsIGNoaWxkTm9kZXMsIGFtYmlndW91cykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMoRW5kT2ZMaW5lQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMsIGFtYmlndW91cyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgRW5kT2ZMaW5lQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvZW5kT2ZMaW5lXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmltcG9ydCB7IGVuZE9mTGluZVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IEVORF9PRl9MSU5FIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgY29udGVudCA9IEVORF9PRl9MSU5FLFxuICAgICAgICAgIGVuZE9mTGluZVRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbiA9IFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbi5mcm9tQ29udGVudChjb250ZW50KSxcbiAgICAgICAgICBuYW1lID0gZW5kT2ZMaW5lUnVsZU5hbWUsIC8vL1xuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZW5kT2ZMaW5lVGVybWluYWxTeW1ib2xEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBFbmRPZkxpbmVCTkZOb2RlLCAvLy9cbiAgICAgICAgICBlbmRPZkxpbmVSdWxlID0gbmV3IEVuZE9mTGluZVJ1bGUobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiBlbmRPZkxpbmVSdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBQYXJ0Q2hvaWNlIGZyb20gXCIuLi8uLi9wYXJ0Q2hvaWNlXCI7XG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IG5vZGVGcm9tQ2hpbGROb2Rlc0FuZFJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9ub2RlXCI7XG5pbXBvcnQgeyBwYXJ0UnVsZU5hbWUsIHByZWNlZGVuY2VSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFydENob2ljZUJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnRDaG9pY2UobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIHBhcnRCTkZOb2RlID0gbm9kZUZyb21DaGlsZE5vZGVzQW5kUnVsZU5hbWUoY2hpbGROb2RlcywgcGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICBwcmVjZWRlbmNlQk5GTm9kZSA9IG5vZGVGcm9tQ2hpbGROb2Rlc0FuZFJ1bGVOYW1lKGNoaWxkTm9kZXMsIHByZWNlZGVuY2VSdWxlTmFtZSk7XG5cbiAgICBsb29rQWhlYWQgPSBmYWxzZTsgIC8vL1xuXG4gICAgY29uc3QgcGFydCA9IHBhcnRCTkZOb2RlLmdlbmVyYXRlUGFydChsb29rQWhlYWQpLFxuICAgICAgICAgIHByZWNlZGVuY2UgPSAocHJlY2VkZW5jZUJORk5vZGUgPT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkZW5jZUJORk5vZGUuZ2V0UHJlY2VkZW5jZSgpLFxuICAgICAgICAgIGRlZmluaXRpb24gPSBQYXJ0Q2hvaWNlLmZyb21QYXJ0QW5kUHJlY2VkZW5jZShwYXJ0LCBwcmVjZWRlbmNlKTtcblxuICAgIHJldHVybiBkZWZpbml0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMocnVsZU5hbWUsIGNoaWxkTm9kZXMsIGFtYmlndW91cykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMoUGFydENob2ljZUJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBhbWJpZ3VvdXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgT3B0aW9uYWxQYXJ0UGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vcHRpb25hbFBhcnRcIjtcblxuaW1wb3J0IHsgcGFydFJ1bGVOYW1lLCBwcmVjZWRlbmNlUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhcnRDaG9pY2VEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBwYXJ0UnVsZU5hbWVQYXJ0ID0gUnVsZU5hbWVQYXJ0LmZyb21SdWxlTmFtZShwYXJ0UnVsZU5hbWUpLFxuICAgICAgICAgIHByZWNlZGVuY2VSdWxlTmFtZVBhcnQgPSBSdWxlTmFtZVBhcnQuZnJvbVJ1bGVOYW1lKHByZWNlZGVuY2VSdWxlTmFtZSksXG4gICAgICAgICAgb3B0aW9uYWxQcmVjZWRlbmNlUnVsZU5hbWVQYXJ0UGFydCA9IE9wdGlvbmFsUGFydFBhcnQuZnJvbVBhcnQocHJlY2VkZW5jZVJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBwYXJ0UnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgb3B0aW9uYWxQcmVjZWRlbmNlUnVsZU5hbWVQYXJ0UGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJlY2VkZW5jZSA9IG51bGwsXG4gICAgICAgICAgcGFydENob2ljZURlZmluaXRpb24gPSBuZXcgUGFydENob2ljZURlZmluaXRpb24ocGFydHMsIHByZWNlZGVuY2UpO1xuXG4gICAgcmV0dXJuIHBhcnRDaG9pY2VEZWZpbml0aW9uO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgUGFydENob2ljZUJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3BhcnRDaG9pY2VcIjtcbmltcG9ydCBQYXJ0Q2hvaWNlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9wYXJ0Q2hvaWNlXCI7XG5cbmltcG9ydCB7IHBhcnRDaG9pY2VSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFydENob2ljZVJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IG5hbWUgPSBwYXJ0Q2hvaWNlUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBwYXJ0Q2hvaWNlRGVmaW5pdGlvbiA9IFBhcnRDaG9pY2VEZWZpbml0aW9uLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBwYXJ0Q2hvaWNlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9uVGVybWluYWxOb2RlID0gUGFydENob2ljZUJORk5vZGUsICAvLy9cbiAgICAgICAgICBkZWZpbml0aW9uUnVsZSA9IG5ldyBQYXJ0Q2hvaWNlUnVsZShuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIGRlZmluaXRpb25SdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgUGFydEJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3BhcnRcIjtcbmltcG9ydCBSdWxlTmFtZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcnVsZU5hbWVcIjtcblxuaW1wb3J0IHsgcXVhbnRpZmllclJ1bGVOYW1lLCBvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSwgb25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lLCB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdWFudGlmaWVyUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgbmFtZSA9IHF1YW50aWZpZXJSdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lRGVmaW5pdGlvbiA9IFJ1bGVOYW1lRGVmaW5pdGlvbi5mcm9tUnVsZU5hbWUob3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZURlZmluaXRpb24gPSBSdWxlTmFtZURlZmluaXRpb24uZnJvbVJ1bGVOYW1lKG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSksXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZURlZmluaXRpb24gPSBSdWxlTmFtZURlZmluaXRpb24uZnJvbVJ1bGVOYW1lKHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBQYXJ0Qk5GTm9kZSwgIC8vL1xuICAgICAgICAgIHF1YW50aWZpZXJSdWxlID0gbmV3IFF1YW50aWZpZXJSdWxlKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gcXVhbnRpZmllclJ1bGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgcGFydFJ1bGVOYW1lLCBwcmVjZWRlbmNlUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5pbXBvcnQgeyBub2RlRnJvbUNoaWxkTm9kZXNBbmRSdWxlTmFtZSwgbm9kZXNGcm9tQ2hpbGROb2Rlc0FuZFJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9ub2RlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmluaXRpb25CTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVEZWZpbml0aW9uKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBwYXJ0Qk5GTm9kZXMgPSBub2Rlc0Zyb21DaGlsZE5vZGVzQW5kUnVsZU5hbWUoY2hpbGROb2RlcywgcGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICBwcmVjZWRlbmNlQk5GTm9kZSA9IG5vZGVGcm9tQ2hpbGROb2Rlc0FuZFJ1bGVOYW1lKGNoaWxkTm9kZXMsIHByZWNlZGVuY2VSdWxlTmFtZSksXG4gICAgICAgICAgbG9va0FoZWFkID0gZmFsc2UsICAvLy9cbiAgICAgICAgICBwYXJ0cyA9IHBhcnRCTkZOb2Rlcy5tYXAoKHBhcnRCTkZOb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0ID0gcGFydEJORk5vZGUuZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCk7XG4gIFxuICAgICAgICAgICAgcmV0dXJuIHBhcnQ7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcHJlY2VkZW5jZSA9IChwcmVjZWRlbmNlQk5GTm9kZSA9PT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjZWRlbmNlQk5GTm9kZS5nZXRQcmVjZWRlbmNlKCksXG4gICAgICAgICAgZGVmaW5pdGlvbiA9IERlZmluaXRpb24uZnJvbVBhcnRzQW5kUHJlY2VkZW5jZShwYXJ0cywgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kQW1iaWd1b3VzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBhbWJpZ3VvdXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kQW1iaWd1b3VzKERlZmluaXRpb25CTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2RlcywgYW1iaWd1b3VzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IE9wdGlvbmFsUGFydFBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0XCI7XG5pbXBvcnQgT25lT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IHBhcnRSdWxlTmFtZSwgcHJlY2VkZW5jZVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgcGFydFJ1bGVOYW1lUGFydCA9IFJ1bGVOYW1lUGFydC5mcm9tUnVsZU5hbWUocGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICBwcmVjZWRlbmNlUnVsZU5hbWVQYXJ0ID0gUnVsZU5hbWVQYXJ0LmZyb21SdWxlTmFtZShwcmVjZWRlbmNlUnVsZU5hbWUpLFxuICAgICAgICAgIG9uZU9yTW9yZVJ1bGVOYW1lUGFydHNQYXJ0ID0gT25lT3JNb3JlUGFydHNQYXJ0LmZyb21QYXJ0KHBhcnRSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIG9wdGlvbmFsUHJlY2VkZW5jZVJ1bGVOYW1lUGFydFBhcnQgPSBPcHRpb25hbFBhcnRQYXJ0LmZyb21QYXJ0KHByZWNlZGVuY2VSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgb25lT3JNb3JlUnVsZU5hbWVQYXJ0c1BhcnQsXG4gICAgICAgICAgICBvcHRpb25hbFByZWNlZGVuY2VSdWxlTmFtZVBhcnRQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICBkZWZpbml0aW9uRGVmaW5pdGlvbiA9IG5ldyBEZWZpbml0aW9uRGVmaW5pdGlvbihwYXJ0cywgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbkRlZmluaXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBEZWZpbml0aW9uQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvZGVmaW5pdGlvblwiO1xuaW1wb3J0IERlZmluaXRpb25EZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL2RlZmluaXRpb25cIjtcblxuaW1wb3J0IHsgZGVmaW5pdGlvblJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgbmFtZSA9IGRlZmluaXRpb25SdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIGRlZmluaXRpb25EZWZpbml0aW9uID0gRGVmaW5pdGlvbkRlZmluaXRpb24uZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGRlZmluaXRpb25EZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBEZWZpbml0aW9uQk5GTm9kZSwgIC8vL1xuICAgICAgICAgIGRlZmluaXRpb25SdWxlID0gbmV3IERlZmluaXRpb25SdWxlKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvblJ1bGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuY29uc3QgeyBzZWNvbmQgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcmVjZWRlbmNlQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdldFByZWNlZGVuY2UoKSB7XG4gICAgbGV0IHByZWNlZGVuY2UgPSBJbmZpbml0eTtcblxuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBjaGlsZE5vZGVzTGVuZ3RoID0gY2hpbGROb2Rlcy5sZW5ndGg7XG5cbiAgICBpZiAoY2hpbGROb2Rlc0xlbmd0aCA9PT0gMykge1xuICAgICAgY29uc3Qgc2Vjb25kQ2hpbGROb2RlID0gc2Vjb25kKGNoaWxkTm9kZXMpLFxuICAgICAgICAgICAgdGVybWluYWxOb2RlID0gc2Vjb25kQ2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgICBjb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKTtcblxuICAgICAgcHJlY2VkZW5jZSA9IE51bWJlcihjb250ZW50KTsgLy8vXG4gICAgfVxuXG4gICAgcmV0dXJuIHByZWNlZGVuY2U7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZEFtYmlndW91cyhydWxlTmFtZSwgY2hpbGROb2RlcywgYW1iaWd1b3VzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZEFtYmlndW91cyhQcmVjZWRlbmNlQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMsIGFtYmlndW91cyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgdHlwZXMsIHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IE9wdGlvbmFsUGFydFBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0XCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmNvbnN0IHsgbnVtYmVyVHlwZSB9ID0gdHlwZXMsXG4gICAgICB7IG9wZW5CcmFja2V0LCBjbG9zZUJyYWNrZXQgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcmVjZWRlbmNlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlblR5cGUgPSBudW1iZXJUeXBlLCAgLy8vXG4gICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBvcGVuQnJhY2tldCwgLy8vXG4gICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50ID0gY2xvc2VCcmFja2V0LCAvLy9cbiAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCA9IFRlcm1pbmFsU3ltYm9sUGFydC5mcm9tQ29udGVudChvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0ID0gVGVybWluYWxTeW1ib2xQYXJ0LmZyb21Db250ZW50KGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgbnVtYmVyU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0ID0gU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0LmZyb21TaWduaWZpY2FudFRva2VuVHlwZShzaWduaWZpY2FudFRva2VuVHlwZSksXG4gICAgICAgICAgb3B0aW9uYWxOdW1iZXJTaWduaWZpY2FudFRva2VuVHlwZVBhcnRQYXJ0ID0gT3B0aW9uYWxQYXJ0UGFydC5mcm9tUGFydChudW1iZXJTaWduaWZpY2FudFRva2VuVHlwZVBhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQsXG4gICAgICAgICAgICBvcHRpb25hbE51bWJlclNpZ25pZmljYW50VG9rZW5UeXBlUGFydFBhcnQsXG4gICAgICAgICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnRcbiAgICAgICAgICBdLFxuICAgICAgICAgIHByZWNlZGVuY2UgPSBudWxsLFxuICAgICAgICAgIHByZWNlZGVuY2VEZWZpbml0aW9uID0gbmV3IFByZWNlZGVuY2VEZWZpbml0aW9uKHBhcnRzLCBwcmVjZWRlbmNlKTtcblxuICAgIHJldHVybiBwcmVjZWRlbmNlRGVmaW5pdGlvbjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFByZWNlZGVuY2VCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9wcmVjZWRlbmNlXCI7XG5pbXBvcnQgUHJlY2VkZW5jZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcHJlY2VkZW5jZVwiO1xuXG5pbXBvcnQgeyBwcmVjZWRlbmNlUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByZWNlZGVuY2VSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBuYW1lID0gcHJlY2VkZW5jZVJ1bGVOYW1lLCAgLy8vXG4gICAgICAgICAgcHJlY2VkZW5jZURlZmluaXRpb24gPSBQcmVjZWRlbmNlRGVmaW5pdGlvbi5mcm9tTm90aGluZygpLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgcHJlY2VkZW5jZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IFByZWNlZGVuY2VCTkZOb2RlLCAgLy8vXG4gICAgICAgICAgcHJlY2VkZW5jZVJ1bGUgPSBuZXcgUHJlY2VkZW5jZVJ1bGUobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiBwcmVjZWRlbmNlUnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IGRlZmluaXRpb25SdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcbmltcG9ydCB7IG5vZGVzRnJvbUNoaWxkTm9kZXNBbmRSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvbm9kZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uc0JORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZURlZmluaXRpb25zKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBkZWZpbml0aW9uQk5GTm9kZXMgPSBub2Rlc0Zyb21DaGlsZE5vZGVzQW5kUnVsZU5hbWUoY2hpbGROb2RlcywgZGVmaW5pdGlvblJ1bGVOYW1lKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IGRlZmluaXRpb25CTkZOb2Rlcy5tYXAoKGRlZmluaXRpb25CTkZOb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZWZpbml0aW9uID0gZGVmaW5pdGlvbkJORk5vZGUuZ2VuZXJhdGVEZWZpbml0aW9uKCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgICAgICAgIH0pO1xuICAgIFxuICAgIHJldHVybiBkZWZpbml0aW9ucztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kQW1iaWd1b3VzKHJ1bGVOYW1lLCBjaGlsZE5vZGUsIGFtYmlndW91cykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMoRGVmaW5pdGlvbnNCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2RlLCBhbWJpZ3VvdXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgcGFyc2VQYXJ0cyB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvcGFyc2VcIjtcbmltcG9ydCB7IFNlcXVlbmNlT2ZQYXJ0c1BhcnRUeXBlIH0gZnJvbSBcIi4uLy4uL3BhcnRUeXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXF1ZW5jZU9mUGFydHNQYXJ0IGV4dGVuZHMgTm9uVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IodHlwZSwgbG9va0FoZWFkLCBwYXJ0cykge1xuICAgIHN1cGVyKHR5cGUsIGxvb2tBaGVhZCk7XG5cbiAgICB0aGlzLnBhcnRzID0gcGFydHM7XG4gIH1cblxuICBnZXRQYXJ0cygpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJ0cztcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCkge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLFxuICAgICAgICAgIG5vZGVzTGVuZ3RoID0gbm9kZXMubGVuZ3RoO1xuXG4gICAgY2FsbGJhY2sgPSAoY2FsbEFoZWFkID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICBudWxsIDpcbiAgICAgICAgICAgICAgICAgICAgKCkgPT4geyAgLy8vXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IHBhcnNlZDtcblxuICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZCA9IGNhbGxBaGVhZCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgIHBhcnNlZCA9IHBhcnNlUGFydHModGhpcy5wYXJ0cywgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKTtcblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBjb25zdCBzdGFydCA9IG5vZGVzTGVuZ3RoOyAgLy8vXG5cbiAgICAgIG5vZGVzLnNwbGljZShzdGFydCk7XG5cbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3QgcGFydHNTdHJpbmcgPSB0aGlzLnBhcnRzLnJlZHVjZSgocGFydHNTdHJpbmcsIHBhcnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRTdHJpbmcgPSBwYXJ0LmFzU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIGlmIChwYXJ0c1N0cmluZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICBwYXJ0c1N0cmluZyA9IHBhcnRTdHJpbmc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwYXJ0c1N0cmluZyA9IGAke3BhcnRzU3RyaW5nfSAke3BhcnRTdHJpbmd9YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHBhcnRzU3RyaW5nO1xuICAgICAgICAgIH0sIG51bGwpLFxuICAgICAgICAgIHN0cmluZyA9IGAoICR7cGFydHNTdHJpbmd9IClgO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUGFydHMocGFydHMpIHtcbiAgICBjb25zdCB0eXBlID0gU2VxdWVuY2VPZlBhcnRzUGFydFR5cGUsXG4gICAgICAgICAgbG9va0FoZWFkID0gZmFsc2UsXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUGFydCA9IG5ldyBTZXF1ZW5jZU9mUGFydHNQYXJ0KHR5cGUsIGxvb2tBaGVhZCwgcGFydHMpO1xuXG4gICAgcmV0dXJuIHNlcXVlbmNlT2ZQYXJ0c1BhcnQ7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgWmVyb09yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHNcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBkZWZpbml0aW9uUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgdmVydGljYWxCYXIgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uc0RlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGxldCBwYXJ0cztcblxuICAgIGNvbnN0IGNvbnRlbnQgPSB2ZXJ0aWNhbEJhciwgIC8vL1xuICAgICAgICAgIGRlZmluaXRpb25SdWxlTmFtZVBhcnQgPSBSdWxlTmFtZVBhcnQuZnJvbVJ1bGVOYW1lKGRlZmluaXRpb25SdWxlTmFtZSksXG4gICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFBhcnQgPSBUZXJtaW5hbFN5bWJvbFBhcnQuZnJvbUNvbnRlbnQoY29udGVudCk7XG5cbiAgICBwYXJ0cyA9IFtcbiAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xQYXJ0LFxuICAgICAgZGVmaW5pdGlvblJ1bGVOYW1lUGFydFxuICAgIF07XG5cbiAgICBjb25zdCBzZXF1ZW5jZU9mUGFydHNQYXJ0ID0gU2VxdWVuY2VPZlBhcnRzUGFydC5mcm9tUGFydHMocGFydHMpLFxuICAgICAgICAgIHplcm9Pck1vcmVTZXF1ZW5jZU9mUGFydHNQYXJ0ID0gWmVyb09yTW9yZVBhcnRzUGFydC5mcm9tUGFydChzZXF1ZW5jZU9mUGFydHNQYXJ0KTtcblxuICAgIHBhcnRzID0gW1xuICAgICAgZGVmaW5pdGlvblJ1bGVOYW1lUGFydCxcbiAgICAgIHplcm9Pck1vcmVTZXF1ZW5jZU9mUGFydHNQYXJ0XG4gICAgXTtcblxuICAgIGNvbnN0IHByZWNlZGVuY2UgPSBudWxsLFxuICAgICAgICAgIGRlZmluaXRpb25zRGVmaW5pdGlvbiA9IG5ldyBEZWZpbml0aW9uc0RlZmluaXRpb24ocGFydHMsIHByZWNlZGVuY2UpO1xuXG4gICAgcmV0dXJuIGRlZmluaXRpb25zRGVmaW5pdGlvbjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IERlZmluaXRpb25zQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvZGVmaW5pdGlvbnNcIjtcbmltcG9ydCBEZWZpbml0aW9uc0RlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vZGVmaW5pdGlvbnNcIjtcblxuaW1wb3J0IHsgZGVmaW5pdGlvbnNSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvbnNSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBkZWZpbml0aW9uc0RlZmluaXRpb24gPSBEZWZpbml0aW9uc0RlZmluaXRpb24uZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBuYW1lID0gZGVmaW5pdGlvbnNSdWxlTmFtZSwgLy8vXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBkZWZpbml0aW9uc0RlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IERlZmluaXRpb25zQk5GTm9kZSwgLy8vXG4gICAgICAgICAgZGVmaW5pdGlvbnNSdWxlID0gbmV3IERlZmluaXRpb25zUnVsZShuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIGRlZmluaXRpb25zUnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxQYXJ0Qk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgICBub2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICBwYXJ0ID0gbm9kZS5nZW5lcmF0ZVBhcnQobG9va0FoZWFkKTtcblxuICAgIHJldHVybiBwYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMocnVsZU5hbWUsIGNoaWxkTm9kZXMsIGFtYmlndW91cykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMoVGVybWluYWxQYXJ0Qk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMsIGFtYmlndW91cyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBSdWxlTmFtZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcnVsZU5hbWVcIjtcbmltcG9ydCBUZXJtaW5hbFBhcnRCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9wYXJ0L3Rlcm1pbmFsXCI7XG5cbmltcG9ydCB7IGVwc2lsb25SdWxlTmFtZSxcbiAgICAgICAgIHdpbGRjYXJkUnVsZU5hbWUsXG4gICAgICAgICBlbmRPZkxpbmVSdWxlTmFtZSxcbiAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGVOYW1lLFxuICAgICAgICAgdGVybWluYWxTeW1ib2xSdWxlTmFtZSxcbiAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWUsXG4gICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFBhcnRSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBuYW1lID0gdGVybWluYWxQYXJ0UnVsZU5hbWUsXG4gICAgICAgICAgZXBzaWxvblJ1bGVOYW1lRGVmaW5pdGlvbiA9IFJ1bGVOYW1lRGVmaW5pdGlvbi5mcm9tUnVsZU5hbWUoZXBzaWxvblJ1bGVOYW1lKSxcbiAgICAgICAgICB3aWxkY2FyZFJ1bGVOYW1lRGVmaW5pdGlvbiA9IFJ1bGVOYW1lRGVmaW5pdGlvbi5mcm9tUnVsZU5hbWUod2lsZGNhcmRSdWxlTmFtZSksXG4gICAgICAgICAgZW5kT2ZMaW5lUnVsZU5hbWVEZWZpbml0aW9uID0gUnVsZU5hbWVEZWZpbml0aW9uLmZyb21SdWxlTmFtZShlbmRPZkxpbmVSdWxlTmFtZSksXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xSdWxlTmFtZURlZmluaXRpb24gPSBSdWxlTmFtZURlZmluaXRpb24uZnJvbVJ1bGVOYW1lKHRlcm1pbmFsU3ltYm9sUnVsZU5hbWUpLFxuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWVEZWZpbml0aW9uID0gUnVsZU5hbWVEZWZpbml0aW9uLmZyb21SdWxlTmFtZShyZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lKSxcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lRGVmaW5pdGlvbiA9IFJ1bGVOYW1lRGVmaW5pdGlvbi5mcm9tUnVsZU5hbWUoc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSksXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICBlbmRPZkxpbmVSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICB3aWxkY2FyZFJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIGVwc2lsb25SdWxlTmFtZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IFRlcm1pbmFsUGFydEJORk5vZGUsXG4gICAgICAgICAgdGVybWluYWxQYXJ0UnVsZSA9IG5ldyBUZXJtaW5hbFBhcnRSdWxlKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gdGVybWluYWxQYXJ0UnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5pbXBvcnQgQ2hvaWNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvY2hvaWNlT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBwYXJ0Q2hvaWNlUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5pbXBvcnQgeyBub2Rlc0Zyb21DaGlsZE5vZGVzQW5kUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL25vZGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hvaWNlT2ZQYXJ0c0JORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIHBhcnRDaG9pY2VCTkZOb2RlcyA9IG5vZGVzRnJvbUNoaWxkTm9kZXNBbmRSdWxlTmFtZShjaGlsZE5vZGVzLCBwYXJ0Q2hvaWNlUnVsZU5hbWUpO1xuXG4gICAgbG9va0FoZWFkID0gZmFsc2U7ICAvLy9cblxuICAgIGNvbnN0IHBhcnRDaG9pY2VzID0gcGFydENob2ljZUJORk5vZGVzLm1hcCgocGFydENob2ljZUJORk5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRDaG9pY2UgPSBwYXJ0Q2hvaWNlQk5GTm9kZS5nZW5lcmF0ZVBhcnRDaG9pY2UobG9va0FoZWFkKTtcblxuICAgICAgICAgICAgcmV0dXJuIHBhcnRDaG9pY2U7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgY2hvaWNlT2ZQYXJ0c1BhcnQgPSBDaG9pY2VPZlBhcnRzUGFydC5mcm9tUGFydENob2ljZXMocGFydENob2ljZXMpLFxuICAgICAgICAgIHBhcnQgPSBjaG9pY2VPZlBhcnRzUGFydDsgLy8vXG5cbiAgICByZXR1cm4gcGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kQW1iaWd1b3VzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBhbWJpZ3VvdXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kQW1iaWd1b3VzKENob2ljZU9mUGFydHNCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2RlcywgYW1iaWd1b3VzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBPcHRpb25hbFBhcnRQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL29wdGlvbmFsUGFydFwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvc2VxdWVuY2VPZlBhcnRzXCI7XG5cbmltcG9ydCB7IHBhcnRDaG9pY2VSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyB2ZXJ0aWNhbEJhciwgb3BlbkJyYWNrZXQsIGNsb3NlQnJhY2tldCB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENob2ljZU9mUGFydHNEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBsZXQgcGFydHM7XG5cbiAgICBjb25zdCB2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHZlcnRpY2FsQmFyLCAvLy9cbiAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCA9IG9wZW5CcmFja2V0LCAvLy9cbiAgICAgICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBjbG9zZUJyYWNrZXQsIC8vL1xuICAgICAgICAgIHBhcnRDaG9pY2VSdWxlTmFtZVBhcnQgPSBSdWxlTmFtZVBhcnQuZnJvbVJ1bGVOYW1lKHBhcnRDaG9pY2VSdWxlTmFtZSksXG4gICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFBhcnQgPSBUZXJtaW5hbFN5bWJvbFBhcnQuZnJvbUNvbnRlbnQodmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0ID0gVGVybWluYWxTeW1ib2xQYXJ0LmZyb21Db250ZW50KG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQgPSBUZXJtaW5hbFN5bWJvbFBhcnQuZnJvbUNvbnRlbnQoY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50KTtcblxuICAgIHBhcnRzID0gW1xuICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFBhcnQsXG4gICAgICBwYXJ0Q2hvaWNlUnVsZU5hbWVQYXJ0XG4gICAgXTtcblxuICAgIGNvbnN0IHNlcXVlbmNlT2ZQYXJ0c1BhcnQgPSBTZXF1ZW5jZU9mUGFydHNQYXJ0LmZyb21QYXJ0cyhwYXJ0cyksXG4gICAgICAgICAgb25lT3JNb3JlU2VxdWVuY2VPZlBhcnRzUGFydCA9IE9uZU9yTW9yZVBhcnRzUGFydC5mcm9tUGFydChzZXF1ZW5jZU9mUGFydHNQYXJ0KTtcblxuICAgIHBhcnRzID0gW1xuICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQsXG4gICAgICBwYXJ0Q2hvaWNlUnVsZU5hbWVQYXJ0LFxuICAgICAgb25lT3JNb3JlU2VxdWVuY2VPZlBhcnRzUGFydCxcbiAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydFxuICAgIF07XG5cbiAgICBjb25zdCBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICBjaG9pY2VPZlBhcnRzRGVmaW5pdGlvbiA9IG5ldyBDaG9pY2VPZlBhcnRzRGVmaW5pdGlvbihwYXJ0cywgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gY2hvaWNlT2ZQYXJ0c0RlZmluaXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvY2hvaWNlT2ZQYXJ0c1wiO1xuaW1wb3J0IENob2ljZU9mUGFydHNEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL2Nob2ljZU9mUGFydHNcIjtcblxuaW1wb3J0IHsgY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaG9pY2VPZlBhcnRzUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgbmFtZSA9IGNob2ljZU9mUGFydHNSdWxlTmFtZSwgLy8vXG4gICAgICAgICAgY2hvaWNlT2ZQYXJ0c0RlZmluaXRpb24gPSBDaG9pY2VPZlBhcnRzRGVmaW5pdGlvbi5mcm9tTm90aGluZygpLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgY2hvaWNlT2ZQYXJ0c0RlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IENob2ljZU9mUGFydHNCTkZOb2RlLCAvLy9cbiAgICAgICAgICBjaG9pY2VPZlBhcnRzUnVsZSA9IG5ldyBDaG9pY2VPZlBhcnRzUnVsZShuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIGNob2ljZU9mUGFydHNSdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmNvbnN0IHsgZmlyc3QsIHNlY29uZCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsU3ltYm9sQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cIigoPzpcXFxcLnxbXlwiXFxcXF0pKilcIiQvO1xuXG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0ID0gVGVybWluYWxTeW1ib2xQYXJ0LmZyb21Db250ZW50KGNvbnRlbnQpO1xuXG4gICAgcmV0dXJuIHRlcm1pbmFsU3ltYm9sUGFydDtcbiAgfVxuXG4gIGdldENvbnRlbnQoKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2RlcyksXG4gICAgICAgICAgdGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbE5vZGVDb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBtYXRjaGVzID0gdGVybWluYWxOb2RlQ29udGVudC5tYXRjaCh0aGlzLnJlZ3VsYXJFeHByZXNzaW9uKSxcbiAgICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgICBjb250ZW50ID0gc2Vjb25kTWF0Y2gucmVwbGFjZSgvXFxcXFxcXFwvZywgXCJcXFxcXCIpLnJlcGxhY2UoL1xcXFxcIi9nLCBcIlxcXCJcIik7XG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kQW1iaWd1b3VzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBhbWJpZ3VvdXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kQW1iaWd1b3VzKFRlcm1pbmFsU3ltYm9sQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMsIGFtYmlndW91cyk7IH1cbn1cblxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgc3RhdGljIGZyb21TaWduaWZpY2FudFRva2VuVHlwZShzaWduaWZpY2FudFRva2VuVHlwZSkge1xuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW5UeXBlUGFydCA9IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydC5mcm9tU2lnbmlmaWNhbnRUb2tlblR5cGUoc2lnbmlmaWNhbnRUb2tlblR5cGUpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gPSBuZXcgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uKHBhcnRzLCBwcmVjZWRlbmNlKTtcblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgdHlwZXMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi90ZXJtaW5hbFN5bWJvbFwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG5pbXBvcnQgeyB0ZXJtaW5hbFN5bWJvbFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHN0cmluZ0xpdGVyYWxUeXBlIH0gPSB0eXBlcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxTeW1ib2xSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuVHlwZSA9IHN0cmluZ0xpdGVyYWxUeXBlLCAgLy8vXG4gICAgICAgICAgc3RyaW5nTGl0ZXJhbFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbiA9IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbi5mcm9tU2lnbmlmaWNhbnRUb2tlblR5cGUoc2lnbmlmaWNhbnRUb2tlblR5cGUpLFxuICAgICAgICAgIG5hbWUgPSB0ZXJtaW5hbFN5bWJvbFJ1bGVOYW1lLCAgLy8vXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBzdHJpbmdMaXRlcmFsU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBUZXJtaW5hbFN5bWJvbEJORk5vZGUsXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xSdWxlID0gbmV3IFRlcm1pbmFsU3ltYm9sUnVsZShuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIHRlcm1pbmFsU3ltYm9sUnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblRlcm1pbmFsUGFydEJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIG5vZGVzID0gY2hpbGROb2Rlcy5zbGljZSgpLFxuICAgICAgICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzLCBsb29rQWhlYWQpO1xuXG4gICAgcmV0dXJuIHBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZEFtYmlndW91cyhydWxlTmFtZSwgY2hpbGROb2RlcywgYW1iaWd1b3VzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZEFtYmlndW91cyhOb25UZXJtaW5hbFBhcnRCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2RlcywgYW1iaWd1b3VzKTsgfVxufVxuXG5mdW5jdGlvbiBwYXJ0RnJvbU5vZGVzKG5vZGVzLCBsb29rQWhlYWQpIHtcbiAgbGV0IHBhcnQgPSBudWxsO1xuXG4gIGNvbnN0IG5vZGVzTGVuZ3RoID0gbm9kZXMubGVuZ3RoO1xuXG4gIGlmIChub2Rlc0xlbmd0aCA9PT0gMSkge1xuICAgIGNvbnN0IG5vZGUgPSBub2Rlcy5wb3AoKTtcblxuICAgIHBhcnQgPSBub2RlLmdlbmVyYXRlUGFydChsb29rQWhlYWQpO1xuICB9IGVsc2Uge1xuICAgIG5vZGVzLnBvcCgpO1xuXG4gICAgbG9va0FoZWFkID0gdHJ1ZTtcblxuICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzLCBsb29rQWhlYWQpO1xuICB9XG5cbiAgcmV0dXJuIHBhcnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi8uLi8uLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi8uLi8uLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgT3B0aW9uYWxQYXJ0UGFydCBmcm9tIFwiLi4vLi4vLi4vcGFydC9ub25UZXJtaW5hbC9vcHRpb25hbFBhcnRcIjtcblxuaW1wb3J0IHsgcnVsZU5hbWVSdWxlTmFtZSwgbG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgcnVsZU5hbWVSdWxlTmFtZVBhcnQgPSBSdWxlTmFtZVBhcnQuZnJvbVJ1bGVOYW1lKHJ1bGVOYW1lUnVsZU5hbWUpLFxuICAgICAgICAgIGxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWVQYXJ0ID0gUnVsZU5hbWVQYXJ0LmZyb21SdWxlTmFtZShsb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICBvcHRpb25hbExvb2tBaGVhZFJ1bGVOYW1lUGFydFBhcnQgPSBPcHRpb25hbFBhcnRQYXJ0LmZyb21QYXJ0KGxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWVQYXJ0KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHJ1bGVOYW1lUnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgb3B0aW9uYWxMb29rQWhlYWRSdWxlTmFtZVBhcnRQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICBydWxlTmFtZU5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24ocGFydHMsIHByZWNlZGVuY2UpO1xuXG4gICAgcmV0dXJuIHJ1bGVOYW1lTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBSdWxlTmFtZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcnVsZU5hbWVcIjtcbmltcG9ydCBOb25UZXJtaW5hbFBhcnRCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9wYXJ0L25vblRlcm1pbmFsXCI7XG5pbXBvcnQgUnVsZU5hbWVOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9wYXJ0UnVsZS9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuXG5pbXBvcnQgeyBub25UZXJtaW5hbFBhcnRSdWxlTmFtZSwgY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lLCBzZXF1ZW5jZU9mUGFydHNSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uVGVybWluYWxQYXJ0UnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgbmFtZSA9IG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lLCAvLy9cbiAgICAgICAgICBjaG9pY2VPZlBhcnRzUnVsZU5hbWVEZWZpbml0aW9uID0gUnVsZU5hbWVEZWZpbml0aW9uLmZyb21SdWxlTmFtZShjaG9pY2VPZlBhcnRzUnVsZU5hbWUpLFxuICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lRGVmaW5pdGlvbiA9IFJ1bGVOYW1lRGVmaW5pdGlvbi5mcm9tUnVsZU5hbWUoc2VxdWVuY2VPZlBhcnRzUnVsZU5hbWUpLFxuICAgICAgICAgIHJ1bGVOYW1lTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gPSBSdWxlTmFtZU5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBjaG9pY2VPZlBhcnRzUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgcnVsZU5hbWVOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9uVGVybWluYWxOb2RlID0gTm9uVGVybWluYWxQYXJ0Qk5GTm9kZSwgLy8vXG4gICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZSA9IG5ldyBOb25UZXJtaW5hbFBhcnRSdWxlKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxQYXJ0UnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5pbXBvcnQgU2VxdWVuY2VPZlBhcnRzUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9zZXF1ZW5jZU9mUGFydHNcIjtcblxuaW1wb3J0IHsgcGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuaW1wb3J0IHsgbm9kZXNGcm9tQ2hpbGROb2Rlc0FuZFJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9ub2RlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlcXVlbmNlT2ZQYXJ0c0JORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIHBhcnRCTkZOb2RlcyA9IG5vZGVzRnJvbUNoaWxkTm9kZXNBbmRSdWxlTmFtZShjaGlsZE5vZGVzLCBwYXJ0UnVsZU5hbWUpO1xuXG4gICAgbG9va0FoZWFkID0gZmFsc2U7ICAvLy9cblxuICAgIGNvbnN0IHBhcnRzID0gcGFydEJORk5vZGVzLm1hcCgocGFydEJORk5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnQgPSBwYXJ0Qk5GTm9kZS5nZW5lcmF0ZVBhcnQobG9va0FoZWFkKTtcblxuICAgICAgICAgICAgcmV0dXJuIHBhcnQ7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUGFydCA9IFNlcXVlbmNlT2ZQYXJ0c1BhcnQuZnJvbVBhcnRzKHBhcnRzKSxcbiAgICAgICAgICBwYXJ0ID0gc2VxdWVuY2VPZlBhcnRzUGFydDsgLy8vXG5cbiAgICByZXR1cm4gcGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kQW1iaWd1b3VzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBhbWJpZ3VvdXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kQW1iaWd1b3VzKFNlcXVlbmNlT2ZQYXJ0c0JORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBhbWJpZ3VvdXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuXG5pbXBvcnQgeyBwYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgb3BlbkJyYWNrZXQsIGNsb3NlQnJhY2tldCB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50ID0gb3BlbkJyYWNrZXQsIC8vL1xuICAgICAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCA9IGNsb3NlQnJhY2tldCwgLy8vXG4gICAgICAgICAgcGFydFJ1bGVOYW1lUGFydCA9IFJ1bGVOYW1lUGFydC5mcm9tUnVsZU5hbWUocGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCA9IFRlcm1pbmFsU3ltYm9sUGFydC5mcm9tQ29udGVudChvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0ID0gVGVybWluYWxTeW1ib2xQYXJ0LmZyb21Db250ZW50KGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgb25lT3JNb3JlUGFydFJ1bGVOYW1lUGFydHNQYXJ0ID0gT25lT3JNb3JlUGFydHNQYXJ0LmZyb21QYXJ0KHBhcnRSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQsXG4gICAgICAgICAgICBwYXJ0UnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgb25lT3JNb3JlUGFydFJ1bGVOYW1lUGFydHNQYXJ0LFxuICAgICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNEZWZpbml0aW9uID0gbmV3IFNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb24ocGFydHMsIHByZWNlZGVuY2UpO1xuXG4gICAgcmV0dXJuIHNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9zZXF1ZW5jZU9mUGFydHNcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBzZXF1ZW5jZU9mUGFydHNSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VxdWVuY2VPZlBhcnRzUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgbmFtZSA9IHNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lLCAvLy9cbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNEZWZpbml0aW9uID0gU2VxdWVuY2VPZlBhcnRzRGVmaW5pdGlvbi5mcm9tTm90aGluZygpLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgc2VxdWVuY2VPZlBhcnRzRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9uVGVybWluYWxOb2RlID0gU2VxdWVuY2VPZlBhcnRzQk5GTm9kZSwgLy8vXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUnVsZSA9IG5ldyBTZXF1ZW5jZU9mUGFydHNSdWxlKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gc2VxdWVuY2VPZlBhcnRzUnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmNvbnN0IHsgTk9fV0hJVEVTUEFDRSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBOT19XSElURVNQQUNFLCAvLy9cbiAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGggPSBzdHJpbmdMZW5ndGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGgpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCksXG4gICAgICAgICAgdGVybWluYWxOb2RlUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oTm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZS5hcHBlbmRUb1RvcCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSk7XG5cbiAgICBjb25zdCBub1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlID0gdGVybWluYWxOb2RlUGFyc2VUcmVlOyAvLy9cblxuICAgIHJldHVybiBub1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uL3Rlcm1pbmFsXCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZSBmcm9tIFwiLi4vLi4vcGFyc2VUcmVlL25vV2hpdGVzcGFjZU5vZGVcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb1doaXRlc3BhY2VOb2RlIGV4dGVuZHMgVGVybWluYWxOb2RlIHtcbiAgZ2V0VHlwZSgpIHtcbiAgICBjb25zdCB0eXBlID0gbnVsbDsgIC8vL1xuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBnZXRDb250ZW50KCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBFTVBUWV9TVFJJTkc7XG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGlzTm9XaGl0ZXNwYWNlTm9kZSgpIHtcbiAgICBjb25zdCBub1doaXRlc3BhY2VOb2RlID0gdHJ1ZTtcblxuICAgIHJldHVybiBub1doaXRlc3BhY2VOb2RlO1xuICB9XG5cbiAgYXNQYXJzZVRyZWUodG9rZW5zKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZSA9IE5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSBub1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgbWF0Y2gobm9kZSwgZGVwdGgpIHtcbiAgICBsZXQgbWF0Y2hlcyA9IGZhbHNlO1xuXG4gICAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKTtcblxuICAgIGlmIChub2RlVGVybWluYWxOb2RlKSB7XG4gICAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBub2RlLCAgLy8vXG4gICAgICAgICAgICB0ZXJtaW5hbE5vZGVOb1doaXRlc3BhY2VOb2RlID0gdGVybWluYWxOb2RlLmlzTm9XaGl0ZXNwYWNlTm9kZSgpO1xuXG4gICAgICBpZiAodGVybWluYWxOb2RlTm9XaGl0ZXNwYWNlTm9kZSkge1xuICAgICAgICBtYXRjaGVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIFRlcm1pbmFsTm9kZS5mcm9tTm90aGluZyhOb1doaXRlc3BhY2VOb2RlKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZU5vZGUgZnJvbSBcIi4uLy4uL25vZGUvdGVybWluYWwvbm9XaGl0ZXNwYWNlXCI7XG5cbmNvbnN0IHsgTk9fV0hJVEVTUEFDRSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vV2hpdGVzcGFjZVBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBpc05vV2hpdGVzcGFjZVBhcnQoKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlUGFydCA9IHRydWU7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlUGFydDtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCkge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBsZXQgbm9XaGl0ZXNwYWNlTm9kZSA9IG51bGw7XG5cbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLFxuICAgICAgICAgIG5leHRUb2tlbldoaXRlc3BhY2VUb2tlbiA9IHN0YXRlLmlzTmV4dFRva2VuV2hpdGVzcGFjZVRva2VuKCk7XG5cbiAgICBpZiAoIW5leHRUb2tlbldoaXRlc3BhY2VUb2tlbikge1xuICAgICAgbm9XaGl0ZXNwYWNlTm9kZSA9IE5vV2hpdGVzcGFjZU5vZGUuZnJvbU5vdGhpbmcoKTtcbiAgICB9XG5cbiAgICBwYXJzZWQgPSAobm9XaGl0ZXNwYWNlTm9kZSAhPT0gbnVsbClcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2gobm9XaGl0ZXNwYWNlTm9kZSk7XG5cbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgaWYgKGNhbGxBaGVhZCAhPT0gbnVsbCkge1xuICAgICAgICAgIHBhcnNlZCA9IGNhbGxBaGVhZCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gTk9fV0hJVEVTUEFDRTsgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZVBhcnQgPSBuZXcgTm9XaGl0ZXNwYWNlUGFydCgpO1xuXG4gICAgcmV0dXJuIG5vV2hpdGVzcGFjZVBhcnQ7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWwvbm9XaGl0ZXNwYWNlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vV2hpdGVzcGFjZVBhcnRCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZVBhcnQgPSBOb1doaXRlc3BhY2VQYXJ0LmZyb21Ob3RoaW5nKCk7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlUGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kQW1iaWd1b3VzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBhbWJpZ3VvdXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kQW1iaWd1b3VzKE5vV2hpdGVzcGFjZVBhcnRCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2RlcywgYW1iaWd1b3VzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuY29uc3QgeyBOT19XSElURVNQQUNFIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBOT19XSElURVNQQUNFLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0ID0gVGVybWluYWxTeW1ib2xQYXJ0LmZyb21Db250ZW50KGNvbnRlbnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0RGVmaW5pdGlvbiA9IG5ldyBOb1doaXRlc3BhY2VQYXJ0RGVmaW5pdGlvbihwYXJ0cywgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0Qk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvbm9XaGl0ZXNwYWNlUGFydFwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnREZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL25vV2hpdGVzcGFjZVBhcnRcIjtcblxuaW1wb3J0IHsgbm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb1doaXRlc3BhY2VQYXJ0UnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb24gPSBOb1doaXRlc3BhY2VQYXJ0RGVmaW5pdGlvbi5mcm9tTm90aGluZygpLFxuICAgICAgICAgIG5hbWUgPSBub1doaXRlc3BhY2VQYXJ0UnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnREZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBOb1doaXRlc3BhY2VQYXJ0Qk5GTm9kZSwgIC8vL1xuICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnRSdWxlID0gbmV3IE5vV2hpdGVzcGFjZVBhcnRSdWxlKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlUGFydFJ1bGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNb2RpZmllckJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZEFtYmlndW91cyhydWxlTmFtZSwgY2hpbGROb2RlLCBhbWJpZ3VvdXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kQW1iaWd1b3VzKE1vZGlmaWVyQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZSwgYW1iaWd1b3VzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL25vV2hpdGVzcGFjZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5jb25zdCB7IGVsbGlwc2lzIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9va0FoZWFkTW9kaWZpZXJSdWxlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgY29udGVudCA9IGVsbGlwc2lzLCAgLy8vXG4gICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydCA9IE5vV2hpdGVzcGFjZVBhcnQuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnQgPSBUZXJtaW5hbFN5bWJvbFBhcnQuZnJvbUNvbnRlbnQoY29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0LFxuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICBsb29rQWhlYWRNb2RpZmllclJ1bGVEZWZpbml0aW9uID0gbmV3IExvb2tBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb24ocGFydHMsIHByZWNlZGVuY2UpO1xuXG4gICAgcmV0dXJuIGxvb2tBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBNb2RpZmllckJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL21vZGlmaWVyXCI7XG5pbXBvcnQgTG9va0FoZWFkTW9kaWZpZXJSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9sb29rQWhlYWRNb2RpZmllclJ1bGVcIjtcblxuaW1wb3J0IHsgbG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9va0FoZWFkTW9kaWZpZXJSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBuYW1lID0gbG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSwgLy8vXG4gICAgICAgICAgbG9va0FoZWFkTW9kaWZpZXJSdWxlRGVmaW5pdGlvbiA9IExvb2tBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb24uZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGxvb2tBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IE1vZGlmaWVyQk5GTm9kZSwgIC8vL1xuICAgICAgICAgIGxvb2tBaGVhZE1vZGlmaWVyUnVsZSA9IG5ldyBMb29rQWhlYWRNb2RpZmllclJ1bGUobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiBsb29rQWhlYWRNb2RpZmllclJ1bGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC9ub1doaXRlc3BhY2VcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuY29uc3QgeyBleGNsYW1hdGlvbk1hcmsgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBbWJpZ3VvdXNNb2RpZmllclJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBjb250ZW50ID0gZXhjbGFtYXRpb25NYXJrLCAgLy8vXG4gICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydCA9IE5vV2hpdGVzcGFjZVBhcnQuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnQgPSBUZXJtaW5hbFN5bWJvbFBhcnQuZnJvbUNvbnRlbnQoY29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0LFxuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICBhbWJpZ3VvdXNNb2RpZmllclJ1bGVEZWZpbml0aW9uID0gbmV3IEFtYmlndW91c01vZGlmaWVyUnVsZURlZmluaXRpb24ocGFydHMsIHByZWNlZGVuY2UpO1xuXG4gICAgcmV0dXJuIGFtYmlndW91c01vZGlmaWVyUnVsZURlZmluaXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBNb2RpZmllckJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL21vZGlmaWVyXCI7XG5pbXBvcnQgQW1iaWd1b3VzTW9kaWZpZXJSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9hbWJpZ3VvdXNNb2RpZmllclJ1bGVcIjtcblxuaW1wb3J0IHsgYW1iaWd1b3VzTW9kaWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQW1iaWd1b3VzTW9kaWZpZXJSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBuYW1lID0gYW1iaWd1b3VzTW9kaWZpZXJSdWxlTmFtZSwgLy8vXG4gICAgICAgICAgYW1iaWd1b3VzTW9kaWZpZXJSdWxlRGVmaW5pdGlvbiA9IEFtYmlndW91c01vZGlmaWVyUnVsZURlZmluaXRpb24uZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGFtYmlndW91c01vZGlmaWVyUnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IE1vZGlmaWVyQk5GTm9kZSxcbiAgICAgICAgICBhbWJpZ3VvdXNNb2RpZmllclJ1bGUgPSBuZXcgQW1iaWd1b3VzTW9kaWZpZXJSdWxlKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gYW1iaWd1b3VzTW9kaWZpZXJSdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL3Rlcm1pbmFsXCI7XG5cbmNvbnN0IHsgZmlyc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWd1bGFyRXhwcmVzc2lvblBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3RvcihyZWd1bGFyRXhwcmVzc2lvbikge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLnJlZ3VsYXJFeHByZXNzaW9uID0gcmVndWxhckV4cHJlc3Npb247XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgbGV0IHRlcm1pbmFsTm9kZSA9IG51bGw7XG4gICAgXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSxcbiAgICAgICAgICBuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IHN0YXRlLmdldE5leHRTaWduaWZpY2FudFRva2VuKCksXG5cdFx0XHRcdFx0c2lnbmlmaWNhbnRUb2tlbiA9IG5leHRTaWduaWZpY2FudFRva2VuOyAvLy9cblxuICAgIGlmIChzaWduaWZpY2FudFRva2VuICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gc2lnbmlmaWNhbnRUb2tlbi5nZXRDb250ZW50KCksXG4gICAgICAgICAgICBtYXRjaGVzID0gY29udGVudC5tYXRjaCh0aGlzLnJlZ3VsYXJFeHByZXNzaW9uKTtcblxuICAgICAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgZmlyc3RNYXRjaCA9IGZpcnN0KG1hdGNoZXMpO1xuXG4gICAgICAgIGlmIChmaXJzdE1hdGNoID09PSBjb250ZW50KSB7XG4gICAgICAgICAgdGVybWluYWxOb2RlID0gVGVybWluYWxOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFyc2VkID0gKHRlcm1pbmFsTm9kZSAhPT0gbnVsbCk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBub2Rlcy5wdXNoKHRlcm1pbmFsTm9kZSk7XG5cbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgaWYgKGNhbGxBaGVhZCAhPT0gbnVsbCkge1xuICAgICAgICAgIHBhcnNlZCA9IGNhbGxBaGVhZCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3QgcmVndWxhckV4cHJlc3Npb25TdHJpbmcgPSB0aGlzLnJlZ3VsYXJFeHByZXNzaW9uLnRvU3RyaW5nKCksXG5cdFx0ICAgICAgc3RyaW5nID0gcmVndWxhckV4cHJlc3Npb25TdHJpbmc7IC8vL1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUmVndWxhckV4cHJlc3Npb24ocmVndWxhckV4cHJlc3Npb24pIHtcbiAgICBjb25zdCByZWd1bGFyRXhwcmVzc2lvblBhcnQgPSBuZXcgUmVndWxhckV4cHJlc3Npb25QYXJ0KHJlZ3VsYXJFeHByZXNzaW9uKTtcblxuICAgIHJldHVybiByZWd1bGFyRXhwcmVzc2lvblBhcnQ7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBSZWd1bGFyRXhwcmVzc2lvblBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWwvcmVndWxhckV4cHJlc3Npb25cIjtcblxuY29uc3QgeyBmaXJzdCwgc2Vjb25kIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVndWxhckV4cHJlc3Npb25CTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgcmVndWxhckV4cHJlc3Npb24gPSAvXlxcLygoPzpcXFxcLnxbXlxcL10pKilcXC8kLztcblxuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgcmVndWxhckV4cHJlc3Npb24gPSB0aGlzLmdldFJlZ3VsYXJFeHByZXNzaW9uKCksXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25QYXJ0ID0gUmVndWxhckV4cHJlc3Npb25QYXJ0LmZyb21SZWd1bGFyRXhwcmVzc2lvbihyZWd1bGFyRXhwcmVzc2lvbik7XG5cbiAgICByZXR1cm4gcmVndWxhckV4cHJlc3Npb25QYXJ0O1xuICB9XG5cbiAgZ2V0UmVndWxhckV4cHJlc3Npb24oKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2RlcyksXG4gICAgICAgICAgdGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbE5vZGVDb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBtYXRjaGVzID0gdGVybWluYWxOb2RlQ29udGVudC5tYXRjaCh0aGlzLnJlZ3VsYXJFeHByZXNzaW9uKSxcbiAgICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgICBwYXR0ZXJuID0gc2Vjb25kTWF0Y2gsIC8vL1xuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uID0gbmV3IFJlZ0V4cChwYXR0ZXJuKTsgIC8vL1xuXG4gICAgcmV0dXJuIHJlZ3VsYXJFeHByZXNzaW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMocnVsZU5hbWUsIGNoaWxkTm9kZXMsIGFtYmlndW91cykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMoUmVndWxhckV4cHJlc3Npb25CTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2RlcywgYW1iaWd1b3VzKTsgfVxufVxuXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHR5cGVzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFJlZ3VsYXJFeHByZXNzaW9uQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcmVndWxhckV4cHJlc3Npb25cIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuaW1wb3J0IHsgcmVndWxhckV4cHJlc3Npb25SdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyByZWd1bGFyRXhwcmVzc2lvblR5cGUgfSA9IHR5cGVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWd1bGFyRXhwcmVzc2lvblJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW5UeXBlID0gcmVndWxhckV4cHJlc3Npb25UeXBlLCAgLy8vXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25TaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gPSBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24uZnJvbVNpZ25pZmljYW50VG9rZW5UeXBlKHNpZ25pZmljYW50VG9rZW5UeXBlKSxcbiAgICAgICAgICBuYW1lID0gcmVndWxhckV4cHJlc3Npb25SdWxlTmFtZSwgLy8vXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9uVGVybWluYWxOb2RlID0gUmVndWxhckV4cHJlc3Npb25CTkZOb2RlLCAvLy9cbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblJ1bGUgPSBuZXcgUmVndWxhckV4cHJlc3Npb25SdWxlKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gcmVndWxhckV4cHJlc3Npb25SdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXVhbnRpZmllckJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZEFtYmlndW91cyhydWxlTmFtZSwgY2hpbGROb2RlcywgYW1iaWd1b3VzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZEFtYmlndW91cyhRdWFudGlmaWVyQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMsIGFtYmlndW91cyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL25vV2hpdGVzcGFjZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdWFudGlmaWVyUnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgc3RhdGljIGZyb21TcGVjaWFsU3ltYm9sKHNwZWNpYWxTeW1ib2wpIHtcbiAgICBjb25zdCBjb250ZW50ID0gc3BlY2lhbFN5bWJvbCwgIC8vL1xuICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnQgPSBOb1doaXRlc3BhY2VQYXJ0LmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0ID0gVGVybWluYWxTeW1ib2xQYXJ0LmZyb21Db250ZW50KGNvbnRlbnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydCxcbiAgICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJlY2VkZW5jZSA9IG51bGwsXG4gICAgICAgICAgcXVhbnRpZmllclJ1bGVEZWZpbml0aW9uID0gbmV3IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbihwYXJ0cywgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gcXVhbnRpZmllclJ1bGVEZWZpbml0aW9uO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFF1YW50aWZpZXJCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9xdWFudGlmaWVyXCI7XG5pbXBvcnQgUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3F1YW50aWZpZXJSdWxlXCI7XG5cbmltcG9ydCB7IG9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHF1ZXN0aW9uTWFyayB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9wdGlvbmFsUXVhbnRpZmllclJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IG5hbWUgPSBvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIHNwZWNpYWxTeW1ib2wgPSBxdWVzdGlvbk1hcmssIC8vL1xuICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uID0gUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uLmZyb21TcGVjaWFsU3ltYm9sKHNwZWNpYWxTeW1ib2wpLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IFF1YW50aWZpZXJCTkZOb2RlLCAgLy8vXG4gICAgICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZSA9IG5ldyBPcHRpb25hbFF1YW50aWZpZXJSdWxlKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gb3B0aW9uYWxRdWFudGlmaWVyUnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBRdWFudGlmaWVyQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcXVhbnRpZmllclwiO1xuaW1wb3J0IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9xdWFudGlmaWVyUnVsZVwiO1xuXG5pbXBvcnQgeyBvbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgcGx1cyB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBuYW1lID0gb25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lLCAvLy9cbiAgICAgICAgICBzcGVjaWFsU3ltYm9sID0gcGx1cywgLy8vXG4gICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uID0gUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uLmZyb21TcGVjaWFsU3ltYm9sKHNwZWNpYWxTeW1ib2wpLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBRdWFudGlmaWVyQk5GTm9kZSwgIC8vL1xuICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlID0gbmV3IE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gb25lT3JNb3JlUXVhbnRpZmllclJ1bGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgUXVhbnRpZmllckJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3F1YW50aWZpZXJcIjtcbmltcG9ydCBRdWFudGlmaWVyUnVsZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcXVhbnRpZmllclJ1bGVcIjtcblxuaW1wb3J0IHsgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBhc3RlcmlzayB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFplcm9Pck1vcmVRdWFudGlmaWVyUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgbmFtZSA9IHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBzcGVjaWFsU3ltYm9sID0gYXN0ZXJpc2ssIC8vL1xuICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZURlZmluaXRpb24gPSBRdWFudGlmaWVyUnVsZURlZmluaXRpb24uZnJvbVNwZWNpYWxTeW1ib2woc3BlY2lhbFN5bWJvbCksXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBRdWFudGlmaWVyQk5GTm9kZSwgLy8vXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlID0gbmV3IFplcm9Pck1vcmVRdWFudGlmaWVyUnVsZShuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbC9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG5jb25zdCB7IGZpcnN0LCBzZWNvbmQgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaWduaWZpY2FudFRva2VuVHlwZUJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXFxbKFteXFxdXSspXSQvO1xuXG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuVHlwZSA9IHRoaXMuZ2V0U2lnbmlmaWNhbnRUb2tlblR5cGUoKSxcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVBhcnQgPSBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQuZnJvbVNpZ25pZmljYW50VG9rZW5UeXBlKHNpZ25pZmljYW50VG9rZW5UeXBlKTtcblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuVHlwZVBhcnQ7XG4gIH1cblxuICBnZXRTaWduaWZpY2FudFRva2VuVHlwZSgpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGUgPSBmaXJzdENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIG1hdGNoZXMgPSB0ZXJtaW5hbE5vZGVDb250ZW50Lm1hdGNoKHRoaXMucmVndWxhckV4cHJlc3Npb24pLFxuICAgICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlID0gc2Vjb25kTWF0Y2g7IC8vL1xuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW5UeXBlO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMocnVsZU5hbWUsIGNoaWxkTm9kZXMsIGFtYmlndW91cykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMoU2lnbmlmaWNhbnRUb2tlblR5cGVCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2RlcywgYW1iaWd1b3VzKTsgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNpZ25pZmljYW50VG9rZW5UeXBlQk5GTm9kZTtcblxuXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHR5cGVzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuaW1wb3J0IHsgc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyB0eXBlVHlwZSB9ID0gdHlwZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpZ25pZmljYW50VG9rZW5UeXBlUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlblR5cGUgPSB0eXBlVHlwZSwgIC8vL1xuICAgICAgICAgIHR5cGVTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gPSBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24uZnJvbVNpZ25pZmljYW50VG9rZW5UeXBlKHNpZ25pZmljYW50VG9rZW5UeXBlKSxcbiAgICAgICAgICBuYW1lID0gc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgdHlwZVNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9uVGVybWluYWxOb2RlID0gU2lnbmlmaWNhbnRUb2tlblR5cGVCTkZOb2RlLCAgLy8vXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlID0gbmV3IFNpZ25pZmljYW50VG9rZW5UeXBlUnVsZShuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuY29uc3QgeyBmaXJzdCwgcHJ1bmUgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlc0FzU3RyaW5nKHJ1bGVzLCBtdWx0aUxpbmUpIHtcbiAgY29uc3QgbWF4aW11bVJ1bGVOYW1lTGVuZ3RoID0gcnVsZXMucmVkdWNlKChtYXhpbXVtUnVsZU5hbWVMZW5ndGgsIHJ1bGUpID0+IHtcbiAgICAgICAgY29uc3QgcnVsZU5hbWUgPSBydWxlLmdldE5hbWUoKSxcbiAgICAgICAgICAgICAgYW1iaWd1b3VzID0gcnVsZS5pc0FtYmlndW91cygpO1xuXG4gICAgICAgIGxldCBydWxlTmFtZUxlbmd0aCA9IHJ1bGVOYW1lLmxlbmd0aDtcblxuICAgICAgICBpZiAoYW1iaWd1b3VzKSB7XG4gICAgICAgICAgcnVsZU5hbWVMZW5ndGgrKztcbiAgICAgICAgfVxuXG4gICAgICAgIG1heGltdW1SdWxlTmFtZUxlbmd0aCA9IE1hdGgubWF4KG1heGltdW1SdWxlTmFtZUxlbmd0aCwgcnVsZU5hbWVMZW5ndGgpO1xuXG4gICAgICAgIHJldHVybiBtYXhpbXVtUnVsZU5hbWVMZW5ndGg7XG4gICAgICB9LCAwKSxcbiAgICAgIHJ1bGVzU3RyaW5nID0gcnVsZXMucmVkdWNlKChydWxlc1N0cmluZywgcnVsZSkgPT4ge1xuICAgICAgICBjb25zdCBydWxlU3RyaW5nID0gcnVsZS5hc1N0cmluZyhtYXhpbXVtUnVsZU5hbWVMZW5ndGgsIG11bHRpTGluZSk7XG5cbiAgICAgICAgcnVsZXNTdHJpbmcgKz0gcnVsZVN0cmluZztcblxuICAgICAgICByZXR1cm4gcnVsZXNTdHJpbmc7XG4gICAgICB9LCBFTVBUWV9TVFJJTkcpLnJlcGxhY2UoL15cXG5cXG4vLCBFTVBUWV9TVFJJTkcpO1xuXG4gIHJldHVybiBydWxlc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVNYXBGcm9tUnVsZXMocnVsZXMpIHtcbiAgY29uc3QgcnVsZU1hcCA9IHt9O1xuXG4gIHJ1bGVzLmZvckVhY2goKHJ1bGUpID0+IHtcbiAgICBjb25zdCBydWxlTmFtZSA9IHJ1bGUuZ2V0TmFtZSgpO1xuXG4gICAgcnVsZU1hcFtydWxlTmFtZV0gPSBydWxlO1xuICB9KTtcblxuICByZXR1cm4gcnVsZU1hcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0UnVsZUZyb21SdWxlcyhydWxlcykge1xuICBjb25zdCBmaXJzdFJ1bGUgPSBmaXJzdChydWxlcyksXG4gICAgICAgIHN0YXJ0UnVsZSA9IGZpcnN0UnVsZTsgIC8vL1xuXG4gIHJldHVybiBzdGFydFJ1bGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlc0Zyb21TdGFydFJ1bGVBbmRSdWxlTWFwKHN0YXJ0UnVsZSwgcnVsZU1hcCkge1xuICBjb25zdCBydWxlcyA9IE9iamVjdC52YWx1ZXMocnVsZU1hcCksXG4gICAgICAgIHN0YXJ0UnVsZU5hbWUgPSBzdGFydFJ1bGUuZ2V0TmFtZSgpO1xuXG4gIHN0YXJ0UnVsZSA9IHBydW5lKHJ1bGVzLCAocnVsZSkgPT4geyAgLy8vXG4gICAgY29uc3QgcnVsZU5hbWUgPSBydWxlLmdldE5hbWUoKTtcblxuICAgIGlmIChydWxlTmFtZSAhPT0gc3RhcnRSdWxlTmFtZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICBydWxlcy51bnNoaWZ0KHN0YXJ0UnVsZSk7XG5cbiAgcmV0dXJuIHJ1bGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRSdWxlRnJvbVJ1bGVzQW5kU3RhcnRSdWxlTmFtZShydWxlcywgc3RhcnRSdWxlTmFtZSkge1xuICBsZXQgc3RhcnRSdWxlID0gcnVsZXMuZmluZCgocnVsZSkgPT4ge1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gcnVsZS5nZXROYW1lKCk7XG5cbiAgICBpZiAocnVsZU5hbWUgPT09IHN0YXJ0UnVsZU5hbWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSkgfHwgbnVsbDsgLy8vXG5cbiAgaWYgKHN0YXJ0UnVsZSA9PT0gbnVsbCkge1xuICAgIHN0YXJ0UnVsZSA9IHN0YXJ0UnVsZUZyb21SdWxlcyhydWxlcyk7XG4gIH1cblxuICByZXR1cm4gc3RhcnRSdWxlO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHJ1bGVzQXNTdHJpbmcsXG4gIHJ1bGVNYXBGcm9tUnVsZXMsXG4gIHN0YXJ0UnVsZUZyb21SdWxlcyxcbiAgcnVsZXNGcm9tU3RhcnRSdWxlQW5kUnVsZU1hcCxcbiAgc3RhcnRSdWxlRnJvbVJ1bGVzQW5kU3RhcnRSdWxlTmFtZVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGJuZiBmcm9tIFwiLi9ibmZcIjtcbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgTmFtZVJ1bGUgZnJvbSBcIi4uL3J1bGUvbmFtZVwiO1xuaW1wb3J0IFBhcnRSdWxlIGZyb20gXCIuLi9ydWxlL3BhcnRcIjtcbmltcG9ydCBSdWxlUnVsZSBmcm9tIFwiLi4vcnVsZS9ydWxlXCI7XG5pbXBvcnQgRXJyb3JSdWxlIGZyb20gXCIuLi9ydWxlL2Vycm9yXCI7XG5pbXBvcnQgRXBzaWxvblJ1bGUgZnJvbSBcIi4uL3J1bGUvZXBzaWxvblwiO1xuaW1wb3J0IERvY3VtZW50UnVsZSBmcm9tIFwiLi4vcnVsZS9kb2N1bWVudFwiO1xuaW1wb3J0IFJ1bGVOYW1lUnVsZSBmcm9tIFwiLi4vcnVsZS9ydWxlTmFtZVwiO1xuaW1wb3J0IFdpbGRjYXJkUnVsZSBmcm9tIFwiLi4vcnVsZS93aWxkY2FyZFwiO1xuaW1wb3J0IHBhcnNlck1peGlucyBmcm9tIFwiLi4vbWl4aW5zL3BhcnNlclwiO1xuaW1wb3J0IEVuZE9mTGluZVJ1bGUgZnJvbSBcIi4uL3J1bGUvZW5kT2ZMaW5lXCI7XG5pbXBvcnQgUGFydENob2ljZVJ1bGUgZnJvbSBcIi4uL3J1bGUvcGFydENob2ljZVwiO1xuaW1wb3J0IFF1YW50aWZpZXJSdWxlIGZyb20gXCIuLi9ydWxlL3F1YW50aWZpZXJcIjtcbmltcG9ydCBEZWZpbml0aW9uUnVsZSBmcm9tIFwiLi4vcnVsZS9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUHJlY2VkZW50c1J1bGUgZnJvbSBcIi4uL3J1bGUvcHJlY2VkZW5jZVwiO1xuaW1wb3J0IERlZmluaXRpb25zUnVsZSBmcm9tIFwiLi4vcnVsZS9kZWZpbml0aW9uc1wiO1xuaW1wb3J0IFRlcm1pbmFsUGFydFJ1bGUgZnJvbSBcIi4uL3J1bGUvdGVybWluYWxQYXJ0XCI7XG5pbXBvcnQgQ2hvaWNlT2ZQYXJ0c1J1bGUgZnJvbSBcIi4uL3J1bGUvY2hvaWNlT2ZQYXJ0c1wiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUnVsZSBmcm9tIFwiLi4vcnVsZS90ZXJtaW5hbFN5bWJvbFwiO1xuaW1wb3J0IE5vblRlcm1pbmFsUGFydFJ1bGUgZnJvbSBcIi4uL3J1bGUvbm9uVGVybWluYWxQYXJ0XCI7XG5pbXBvcnQgU2VxdWVuY2VPZlBhcnRzUnVsZSBmcm9tIFwiLi4vcnVsZS9zZXF1ZW5jZU9mUGFydHNcIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0UnVsZSBmcm9tIFwiLi4vcnVsZS9ub1doaXRlc3BhY2VQYXJ0XCI7XG5pbXBvcnQgTG9va0FoZWFkTW9kaWZpZXJSdWxlIGZyb20gXCIuLi9ydWxlL2xvb2tBaGVhZE1vZGlmaWVyXCI7XG5pbXBvcnQgQW1iaWd1b3VzTW9kaWZpZXJSdWxlIGZyb20gXCIuLi9ydWxlL2FtYmlndW91c01vZGlmaWVyXCI7XG5pbXBvcnQgUmVndWxhckV4cHJlc3Npb25SdWxlIGZyb20gXCIuLi9ydWxlL3JlZ3VsYXJFeHByZXNzaW9uXCI7XG5pbXBvcnQgT3B0aW9uYWxRdWFudGlmaWVyUnVsZSBmcm9tIFwiLi4vcnVsZS9vcHRpb25hbFF1YW50aWZpZXJcIjtcbmltcG9ydCBPbmVPck1vcmVRdWFudGlmaWVyUnVsZSBmcm9tIFwiLi4vcnVsZS9vbmVPck1vcmVRdWFudGlmaWVyXCI7XG5pbXBvcnQgWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlIGZyb20gXCIuLi9ydWxlL3plcm9Pck1vcmVRdWFudGlmaWVyXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlIGZyb20gXCIuLi9ydWxlL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmltcG9ydCB7IHJ1bGVNYXBGcm9tUnVsZXMsIHN0YXJ0UnVsZUZyb21SdWxlcyB9IGZyb20gXCIuLi91dGlsaXRpZXMvcnVsZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQk5GUGFyc2VyIHtcbiAgY29uc3RydWN0b3Ioc3RhcnRSdWxlLCBydWxlTWFwKSB7XG4gICAgdGhpcy5zdGFydFJ1bGUgPSBzdGFydFJ1bGU7XG4gICAgdGhpcy5ydWxlTWFwID0gcnVsZU1hcDtcbiAgfVxuXG4gIGdldFN0YXJ0UnVsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydFJ1bGU7XG4gIH1cblxuICBnZXRSdWxlTWFwKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVNYXA7XG4gIH1cblxuXHRydWxlc0Zyb21Ub2tlbnModG9rZW5zKSB7XG5cdCAgbGV0IHJ1bGVzO1xuXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMucGFyc2UodG9rZW5zKTtcblxuICAgIGlmIChub2RlID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGlzIG5vIG5vZGUuYCk7XG4gICAgfVxuXG4gICAgcnVsZXMgPSBub2RlLmdlbmVyYXRlUnVsZXMoUnVsZSk7XG5cbiAgICBjb25zdCBydWxlc0xlbmd0aCA9IHJ1bGVzLmxlbmd0aDtcblxuICAgIGlmIChydWxlc0xlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGVyZSBhcmUgbm8gcnVsZXMuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ1bGVzO1xuICB9XG5cbiAgc3RhdGljIGJuZiA9IGJuZjtcblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgbmFtZVJ1bGUgPSBOYW1lUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHBhcnRSdWxlID0gUGFydFJ1bGUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBydWxlUnVsZSA9IFJ1bGVSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgZXJyb3JSdWxlID0gRXJyb3JSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgZXBzaWxvblJ1bGUgPSBFcHNpbG9uUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIGRvY3VtZW50UnVsZSA9IERvY3VtZW50UnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHJ1bGVOYW1lUnVsZSA9IFJ1bGVOYW1lUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHdpbGRjYXJkUnVsZSA9IFdpbGRjYXJkUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIGVuZE9mTGluZVJ1bGUgPSBFbmRPZkxpbmVSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgcGFydENob2ljZVJ1bGUgPSBQYXJ0Q2hvaWNlUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHF1YW50aWZpZXJSdWxlID0gUXVhbnRpZmllclJ1bGUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBkZWZpbml0aW9uUnVsZSA9IERlZmluaXRpb25SdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgcHJlY2VkZW50c1J1bGUgPSBQcmVjZWRlbnRzUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIGRlZmluaXRpb25zUnVsZSA9IERlZmluaXRpb25zUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGUgPSBUZXJtaW5hbFBhcnRSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgY2hvaWNlT2ZQYXJ0c1J1bGUgPSBDaG9pY2VPZlBhcnRzUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUnVsZSA9IFRlcm1pbmFsU3ltYm9sUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGUgPSBOb25UZXJtaW5hbFBhcnRSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUnVsZSA9IFNlcXVlbmNlT2ZQYXJ0c1J1bGUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0UnVsZSA9IE5vV2hpdGVzcGFjZVBhcnRSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25SdWxlID0gUmVndWxhckV4cHJlc3Npb25SdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgbG9va0FoZWFkTW9kaWZpZXJSdWxlID0gTG9va0FoZWFkTW9kaWZpZXJSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgYW1iaWd1b3VzTW9kaWZpZXJSdWxlID0gQW1iaWd1b3VzTW9kaWZpZXJSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZSA9IE9wdGlvbmFsUXVhbnRpZmllclJ1bGUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBvbmVPck1vcmVRdWFudGlmaWVyUnVsZSA9IE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlID0gWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlID0gU2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlLmZyb21Ob3RoaW5nKCk7XG5cbiAgICBsZXQgcnVsZXMgPSBbXG4gICAgICBkb2N1bWVudFJ1bGUsXG4gICAgICBydWxlUnVsZSxcbiAgICAgIG5hbWVSdWxlLFxuICAgICAgZGVmaW5pdGlvbnNSdWxlLFxuICAgICAgZGVmaW5pdGlvblJ1bGUsXG4gICAgICBwYXJ0UnVsZSxcbiAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGUsXG4gICAgICB0ZXJtaW5hbFBhcnRSdWxlLFxuICAgICAgbm9XaGl0ZXNwYWNlUGFydFJ1bGUsXG4gICAgICBzZXF1ZW5jZU9mUGFydHNSdWxlLFxuICAgICAgY2hvaWNlT2ZQYXJ0c1J1bGUsXG4gICAgICBwYXJ0Q2hvaWNlUnVsZSxcbiAgICAgIHJ1bGVOYW1lUnVsZSxcbiAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZSxcbiAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUnVsZSxcbiAgICAgIHRlcm1pbmFsU3ltYm9sUnVsZSxcbiAgICAgIHByZWNlZGVudHNSdWxlLFxuICAgICAgZW5kT2ZMaW5lUnVsZSxcbiAgICAgIHdpbGRjYXJkUnVsZSxcbiAgICAgIGVwc2lsb25SdWxlLFxuICAgICAgcXVhbnRpZmllclJ1bGUsXG4gICAgICBhbWJpZ3VvdXNNb2RpZmllclJ1bGUsXG4gICAgICBsb29rQWhlYWRNb2RpZmllclJ1bGUsXG4gICAgICBvcHRpb25hbFF1YW50aWZpZXJSdWxlLFxuICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGUsXG4gICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGUsXG4gICAgICBlcnJvclJ1bGVcbiAgICBdO1xuXG4gICAgY29uc3Qgc3RhcnRSdWxlID0gc3RhcnRSdWxlRnJvbVJ1bGVzKHJ1bGVzKSxcbiAgICAgICAgICBydWxlTWFwID0gcnVsZU1hcEZyb21SdWxlcyhydWxlcyksXG4gICAgICAgICAgYm5mUGFyc2VyID0gbmV3IEJORlBhcnNlcihzdGFydFJ1bGUsIHJ1bGVNYXApO1xuICAgIFxuICAgIHJldHVybiBibmZQYXJzZXI7XG4gIH1cbn1cblxuT2JqZWN0LmFzc2lnbihCTkZQYXJzZXIucHJvdG90eXBlLCBwYXJzZXJNaXhpbnMpO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cbiAgICAgIGV4cHJlc3Npb24gICA6Oj0gZXhwcmVzc2lvbl8gb3BlcmF0b3IgZXhwcmVzc2lvbiBleHByZXNzaW9ufipcblxuICAgICAgICAgICAgICAgICAgICAgfCBleHByZXNzaW9uX1xuXG4gICAgICAgICAgICAgICAgICAgICA7XG5cbiAgICAgIG9wZXJhdG9yISAgICA6Oj0gXCIrXCJcblxuICAgICAgICAgICAgICAgICAgICAgfCBcIi1cIlxuXG4gICAgICAgICAgICAgICAgICAgICB8IFwiL1wiXG5cbiAgICAgICAgICAgICAgICAgICAgIHwgXCIqXCJcblxuICAgICAgICAgICAgICAgICAgICAgO1xuXG4gICAgICB0ZXJtICAgICAgICAgOjo9IC9cXFxcZCsvIDtcblxuICAgICAgZXhwcmVzc2lvbl8gIDo6PSBcIihcIiBleHByZXNzaW9uIFwiKVwiXG5cbiAgICAgICAgICAgICAgICAgICAgIHwgdGVybVxuXG4gICAgICAgICAgICAgICAgICAgICA7XG5cbiAgICAgIGV4cHJlc3Npb25+ICA6Oj0gb3BlcmF0b3IgZXhwcmVzc2lvbiA7XG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGJuZjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQk5GTGV4ZXIgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBCTkZQYXJzZXIgZnJvbSBcIi4uL2JuZi9wYXJzZXJcIjtcblxuaW1wb3J0IHsgcnVsZU1hcEZyb21SdWxlcywgc3RhcnRSdWxlRnJvbVJ1bGVzLCBzdGFydFJ1bGVGcm9tUnVsZXNBbmRTdGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9ydWxlc1wiO1xuXG5jb25zdCBibmZMZXhlciA9IEJORkxleGVyLmZyb21Ob3RoaW5nKCksXG4gICAgICBibmZQYXJzZXIgPSBCTkZQYXJzZXIuZnJvbU5vdGhpbmcoKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzRnJvbUJORihibmYpIHtcbiAgY29uc3QgdG9rZW5zID0gYm5mTGV4ZXIudG9rZW5zRnJvbUJORihibmYpLFxuICAgICAgICBydWxlcyA9IGJuZlBhcnNlci5ydWxlc0Zyb21Ub2tlbnModG9rZW5zKTtcblxuICByZXR1cm4gcnVsZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZXJGcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKSB7XG4gIGNvbnN0IHN0YXJ0UnVsZSA9IHN0YXJ0UnVsZUZyb21SdWxlcyhydWxlcyksXG4gICAgICAgIHJ1bGVNYXAgPSBydWxlTWFwRnJvbVJ1bGVzKHJ1bGVzKSxcbiAgICAgICAgcGFyc2VyID0gbmV3IENsYXNzKHN0YXJ0UnVsZSwgcnVsZU1hcCk7XG5cbiAgcmV0dXJuIHBhcnNlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlckZyb21SdWxlc0FuZFN0YXJ0UnVsZU5hbWUoQ2xhc3MsIHJ1bGVzLCBzdGFydFJ1bGVOYW1lKSB7XG4gIGNvbnN0IHN0YXJ0UnVsZSA9IHN0YXJ0UnVsZUZyb21SdWxlc0FuZFN0YXJ0UnVsZU5hbWUocnVsZXMsIHN0YXJ0UnVsZU5hbWUpLFxuICAgICAgICBydWxlTWFwID0gcnVsZU1hcEZyb21SdWxlcyhydWxlcyksXG4gICAgICAgIHBhcnNlciA9IG5ldyBDbGFzcyhzdGFydFJ1bGUsIHJ1bGVNYXApO1xuXG4gIHJldHVybiBwYXJzZXI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcnVsZXNGcm9tQk5GLFxuICBwYXJzZXJGcm9tUnVsZXMsXG4gIHBhcnNlckZyb21SdWxlc0FuZFN0YXJ0UnVsZU5hbWVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBwYXJzZXJNaXhpbnMgZnJvbSBcIi4uL21peGlucy9wYXJzZXJcIjtcblxuaW1wb3J0IHsgcnVsZXNGcm9tQk5GLCBwYXJzZXJGcm9tUnVsZXMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3BhcnNlclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb21tb25QYXJzZXIge1xuICBjb25zdHJ1Y3RvcihzdGFydFJ1bGUsIHJ1bGVNYXApIHtcbiAgICB0aGlzLnN0YXJ0UnVsZSA9IHN0YXJ0UnVsZTtcbiAgICB0aGlzLnJ1bGVNYXAgPSBydWxlTWFwO1xuICB9XG5cbiAgZ2V0U3RhcnRSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0UnVsZTtcbiAgfVxuXG4gIGdldFJ1bGVNYXAoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZU1hcDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm90aGluZyhDbGFzcykge1xuICAgIGNvbnN0IHsgYm5mIH0gPSBDbGFzcyxcbiAgICAgICAgICBydWxlcyA9IHJ1bGVzRnJvbUJORihibmYpLFxuICAgICAgICAgIHBhcnNlciA9IHBhcnNlckZyb21SdWxlcyhDbGFzcywgcnVsZXMpO1xuXG4gICAgcmV0dXJuIHBhcnNlcjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQk5GKENsYXNzLCBibmYpIHtcbiAgICBjb25zdCBydWxlcyA9IHJ1bGVzRnJvbUJORihibmYpLFxuICAgICAgICAgIHBhcnNlciA9IHBhcnNlckZyb21SdWxlcyhDbGFzcywgcnVsZXMpO1xuXG4gICAgcmV0dXJuIHBhcnNlcjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKSB7XG4gICAgY29uc3QgcGFyc2VyID0gcGFyc2VyRnJvbVJ1bGVzKENsYXNzLCBydWxlcyk7XG5cbiAgICByZXR1cm4gcGFyc2VyO1xuICB9XG59XG5cbk9iamVjdC5hc3NpZ24oQ29tbW9uUGFyc2VyLnByb3RvdHlwZSwgcGFyc2VyTWl4aW5zKTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGJuZiBmcm9tIFwiLi9ibmZcIjtcbmltcG9ydCBDb21tb25QYXJzZXIgZnJvbSBcIi4uL2NvbW1vbi9wYXJzZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmFzaWNQYXJzZXIgZXh0ZW5kcyBDb21tb25QYXJzZXIge1xuICBzdGF0aWMgYm5mID0gYm5mO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tTm90aGluZyhCYXNpY1BhcnNlcik7IH1cblxuICBzdGF0aWMgZnJvbUJORihibmYpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tQk5GKEJhc2ljUGFyc2VyLCBibmYpOyB9XG5cbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21SdWxlcyhCYXNpY1BhcnNlciwgcnVsZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFcHNpbG9uUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL2Vwc2lsb25cIjtcbmltcG9ydCBXaWxkY2FyZFBhcnQgZnJvbSBcIi4vcGFydC90ZXJtaW5hbC93aWxkY2FyZFwiO1xuaW1wb3J0IEVuZE9mTGluZVBhcnQgZnJvbSBcIi4vcGFydC90ZXJtaW5hbC9lbmRPZkxpbmVcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuaW1wb3J0IFJlZ3VsYXJFeHByZXNzaW9uUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL3JlZ3VsYXJFeHByZXNzaW9uXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0IGZyb20gXCIuL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IE9wdGlvbmFsUGFydFBhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC9vcHRpb25hbFBhcnRcIjtcbmltcG9ydCBaZXJvT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuL3BhcnQvbm9uVGVybWluYWwvemVyb09yTW9yZVBhcnRzXCI7XG5pbXBvcnQgT25lT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuL3BhcnQvbm9uVGVybWluYWwvb25lT3JNb3JlUGFydHNcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNQYXJ0IGZyb20gXCIuL3BhcnQvbm9uVGVybWluYWwvc2VxdWVuY2VPZlBhcnRzXCI7XG5pbXBvcnQgQ2hvaWNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC9jaG9pY2VPZlBhcnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgRXBzaWxvblBhcnQsXG4gIFdpbGRjYXJkUGFydCxcbiAgRW5kT2ZMaW5lUGFydCxcbiAgVGVybWluYWxTeW1ib2xQYXJ0LFxuICBSZWd1bGFyRXhwcmVzc2lvblBhcnQsXG4gIFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCxcbiAgUnVsZU5hbWVQYXJ0LFxuICBPcHRpb25hbFBhcnRQYXJ0LFxuICBaZXJvT3JNb3JlUGFydHNQYXJ0LFxuICBPbmVPck1vcmVQYXJ0c1BhcnQsXG4gIFNlcXVlbmNlT2ZQYXJ0c1BhcnQsXG4gIENob2ljZU9mUGFydHNQYXJ0XG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIEJORlBhcnNlciB9IGZyb20gXCIuL2JuZi9wYXJzZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQmFzaWNQYXJzZXIgfSBmcm9tIFwiLi9iYXNpYy9wYXJzZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29tbW9uUGFyc2VyIH0gZnJvbSBcIi4vY29tbW9uL3BhcnNlclwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHJ1bGVzVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3J1bGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHBhcnNlclV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9wYXJzZXJcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBSdWxlIH0gZnJvbSBcIi4vcnVsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQYXJ0cyB9IGZyb20gXCIuL3BhcnRzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHBhcnRUeXBlcyB9IGZyb20gXCIuL3BhcnRUeXBlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQYXJ0Q2hvaWNlIH0gZnJvbSBcIi4vcGFydENob2ljZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEZWZpbml0aW9uIH0gZnJvbSBcIi4vZGVmaW5pdGlvblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFcHNpbG9uTm9kZSB9IGZyb20gXCIuL25vZGUvdGVybWluYWwvZXBzaWxvblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXJtaW5hbE5vZGUgfSBmcm9tIFwiLi9ub2RlL3Rlcm1pbmFsXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE5vblRlcm1pbmFsTm9kZSB9IGZyb20gXCIuL25vZGUvbm9uVGVybWluYWxcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYm5mID0gYFxuXG5cblxuICAgIHN0eWxlc2hlZXQgICAgICAgICAgICAgICAgIDo6PSAoIG1lZGlhIHwgcnVsZVNldCB8IGRlY2xhcmF0aW9uIHwgZXJyb3IgKSsgO1xuXG5cblxuXG5cbiAgICBtZWRpYSAgICAgICAgICAgICAgICAgICAgICA6Oj0gXCJAbWVkaWFcIiBtZWRpYVF1ZXJpZXMgXCJ7XCIgKCBydWxlU2V0IHwgZGVjbGFyYXRpb24gKSogXCJ9XCIgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgbWVkaWFRdWVyaWVzICAgICAgICAgICAgICAgOjo9ICBtZWRpYVF1ZXJ5ICggXCIsXCIgbWVkaWFRdWVyeSApKiA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICBtZWRpYVF1ZXJ5ICAgICAgICAgICAgICAgICA6Oj0gIFwibm90XCI/ICggXCJvbmx5XCI/IG1lZGlhVHlwZSBcImFuZFwiICk/IG1lZGlhRXhwcmVzc2lvbiAoIFwiYW5kXCIgbWVkaWFFeHByZXNzaW9uICkqIDtcblxuXG4gICAgbWVkaWFUeXBlICAgICAgICAgICAgICAgICAgOjo9ICBcImFsbFwiIHwgXCJwcmludFwiIHwgXCJzY3JlZW5cIiB8IFwic3BlZWNoXCIgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgbWVkaWFFeHByZXNzaW9uICAgICAgICAgICAgOjo9ICBcIihcIiBbaWRlbnRpZmllcl0gKCBcIjpcIiBleHByZXNzaW9uICk/IFwiKVwiIDtcblxuXG5cblxuXG4gICAgcnVsZVNldCAgICAgICAgICAgICAgICAgICAgOjo9ICBzZWxlY3RvcnMgXCJ7XCIgZGVjbGFyYXRpb24qIFwifVwiIDtcbiAgICBcbiAgICBcbiAgICBzZWxlY3RvcnMgICAgICAgICAgICAgICAgICA6Oj0gIHNlbGVjdG9yICggXCIsXCIgc2VsZWN0b3IgKSogO1xuXG5cbiAgICBzZWxlY3RvciAgICAgICAgICAgICAgICAgICA6Oj0gICggY2xhc3MgfCBwc2V1ZG9DbGFzcyB8IHBzZXVkb0VsZW1lbnQgfCBhdHRyaWJ1dGUgKSsgO1xuXG5cblxuXG5cbiAgICBkZWNsYXJhdGlvbiAgICAgICAgICAgICAgICA6Oj0gIHByb3BlcnR5IFwiOlwiIGV4cHJlc3Npb24gKCBcIixcIiBleHByZXNzaW9uICkqIHByaW9yaXR5PyBcIjtcIiA7XG5cblxuICAgIGNsYXNzICAgICAgICAgICAgICAgICAgICAgIDo6PSAgXCIuXCI8Tk9fV0hJVEVTUEFDRT5baWRlbnRpZmllcl0gcGFyZW50aGVzaXNlZFNlbGVjdG9yPyA7XG5cblxuICAgIHBzZXVkb0NsYXNzICAgICAgICAgICAgICAgIDo6PSAgXCI6XCI8Tk9fV0hJVEVTUEFDRT5baWRlbnRpZmllcl0gcGFyZW50aGVzaXNlZFNlbGVjdG9yPyA7XG5cblxuICAgIHBzZXVkb0VsZW1lbnQgICAgICAgICAgICAgIDo6PSAgXCI6OlwiPE5PX1dISVRFU1BBQ0U+W2lkZW50aWZpZXJdIHBhcmVudGhlc2lzZWRTZWxlY3Rvcj8gO1xuXG5cbiAgICBwYXJlbnRoZXNpc2VkU2VsZWN0b3IgICAgICA6Oj0gIDxOT19XSElURVNQQUNFPlwiKFwiIHNlbGVjdG9yIDxOT19XSElURVNQQUNFPlwiKVwiIDtcblxuXG4gICAgYXR0cmlidXRlICAgICAgICAgICAgICAgICAgOjo9ICBcIltcIlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRlbnRpZmllcl1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggXCI9XCIgfCBcIn49XCIgfCBcInw9XCIgKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggW2lkZW50aWZpZXJdIHwgW3N0cmluZy1saXRlcmFsXSApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk/XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXVwiXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuXG4gICAgcHJvcGVydHkgICAgICAgICAgICAgICAgICAgOjo9ICBbaWRlbnRpZmllcl0gO1xuXG5cbiAgICBleHByZXNzaW9uICAgICAgICAgICAgICAgICA6Oj0gIHRlcm0gKCBcIixcIj8gdGVybSApKiA7XG5cblxuICAgIHByaW9yaXR5ICAgICAgICAgICAgICAgICAgIDo6PSAgXCIhaW1wb3J0YW50XCIgO1xuXG5cblxuXG5cbiAgICB0ZXJtICAgICAgICAgICAgICAgICAgICAgICA6Oj0gIFthcml0aG1ldGljLW9wZXJhdG9yXT9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggW3BlcmNlbnRhZ2VdIHwgW2ZyZXF1ZW5jeV0gfCBbZnJhY3Rpb25dIHwgW2xlbmd0aF0gfCBbYW5nbGVdIHwgW3JlbXNdIHwgW2Vtc10gfCBbdGltZV0gfCBbbnVtYmVyXSApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RyaW5nLWxpdGVyYWxdK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRlbnRpZmllcl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG91cl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cblxuICAgIHVyaSAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgXCJ1cmxcIjxOT19XSElURVNQQUNFPlwiKFwiIFtzdHJpbmctbGl0ZXJhbF0gXCIpXCIgO1xuXG5cbiAgICBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICA6Oj0gIFtpZGVudGlmaWVyXTxOT19XSElURVNQQUNFPlwiKFwiIGV4cHJlc3Npb24gXCIpXCIgO1xuXG5cblxuXG5cbiAgICBlcnJvciEgICAgICAgICAgICAgICAgICAgICA6Oj0gIC4gO1xuXG5cblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgYm5mO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDb21tb25QYXJzZXIgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5pbXBvcnQgYm5mIGZyb20gXCIuL2JuZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU1NQYXJzZXIgZXh0ZW5kcyBDb21tb25QYXJzZXIge1xuICBzdGF0aWMgYm5mID0gYm5mO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tTm90aGluZyhDU1NQYXJzZXIpOyB9XG5cbiAgc3RhdGljIGZyb21CTkYoYm5mKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbUJORihDU1NQYXJzZXIsIGJuZik7IH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbVJ1bGVzKENTU1BhcnNlciwgcnVsZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmV4cG9ydCBjb25zdCB7IGNsZWFyLCBwdXNoLCBzZWNvbmQsIHRoaXJkLCBmb3VydGgsIGZpZnRoIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIHRyaW0oYXJyYXksIHN0YXJ0SW5kZXgsIGVuZEluZGV4KSB7XG4gIGlmIChzdGFydEluZGV4IDwgMCkge1xuICAgIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgLy8vXG5cbiAgICBzdGFydEluZGV4ID0gbGVuZ3RoICsgc3RhcnRJbmRleDsgLy8vXG5cbiAgICBlbmRJbmRleCA9IGxlbmd0aCArIGVuZEluZGV4OyAvLy9cbiAgfVxuXG4gIGlmIChlbmRJbmRleCAhPT0gSW5maW5pdHkpIHtcbiAgICBjb25zdCBzdGFydCA9IGVuZEluZGV4ICsgMTtcblxuICAgIGFycmF5LnNwbGljZShzdGFydCk7XG4gIH1cblxuICBjb25zdCBzdGFydCA9IDAsXG4gICAgICAgIGRlbGV0ZUNvdW50ID0gc3RhcnRJbmRleDsgLy8vXG5cbiAgYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmNsdWRlcyhhcnJheSwgLi4uZWxlbWVudHMpIHtcbiAgcmV0dXJuIGVsZW1lbnRzLnNvbWUoKGVsZW1lbnQpID0+IGFycmF5LmluY2x1ZGVzKGVsZW1lbnQpKTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgY2xlYXIsIHRyaW0sIHNlY29uZCwgdGhpcmQsIGZvdXJ0aCB9IGZyb20gXCIuL3V0aWxpdGllcy9hcnJheVwiO1xuXG5jb25zdCB7IEVYQ0xBTUFUSU9OX01BUktfQ0hBUkFDVEVSIH0gPSBjaGFyYWN0ZXJzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTcHJlYWQge1xuICBjb25zdHJ1Y3RvcihzdGFydEluZGV4LCBlbmRJbmRleCwgdW5pcXVlKSB7XG4gICAgdGhpcy5zdGFydEluZGV4ID0gc3RhcnRJbmRleDtcbiAgICB0aGlzLmVuZEluZGV4ID0gZW5kSW5kZXg7XG4gICAgdGhpcy51bmlxdWUgPSB1bmlxdWU7XG4gIH1cblxuICBhZGp1c3ROb2Rlcyhub2Rlcykge1xuICAgIGlmICh0aGlzLnVuaXF1ZSkge1xuICAgICAgY29uc3Qgbm9kZXNMZW5ndGggPSBub2Rlcy5sZW5ndGg7XG5cbiAgICAgIGlmIChub2Rlc0xlbmd0aCA+IDEpIHtcbiAgICAgICAgY2xlYXIobm9kZXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0cmltKG5vZGVzLCB0aGlzLnN0YXJ0SW5kZXgsIHRoaXMuZW5kSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3ByZWFkRXhwcmVzc2lvbihzcHJlYWRFeHByZXNzaW9uKSB7XG4gICAgbGV0IHN0YXJ0SW5kZXggPSAwLFxuICAgICAgICBlbmRJbmRleCA9IEluZmluaXR5LFxuICAgICAgICB1bmlxdWUgPSBmYWxzZTtcblxuICAgIGlmIChzcHJlYWRFeHByZXNzaW9uICE9PSBudWxsKSB7XG4gICAgICBpZiAoc3ByZWFkRXhwcmVzc2lvbiA9PT0gRVhDTEFNQVRJT05fTUFSS19DSEFSQUNURVIpIHtcbiAgICAgICAgdW5pcXVlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlZ0V4cCA9IC9cXFsoLT9cXGQrKT8oXFwuXFwuXFwuKT8oLT9cXGQrKT9dLyxcbiAgICAgICAgICAgICAgbWF0Y2hlcyA9IHNwcmVhZEV4cHJlc3Npb24ubWF0Y2gocmVnRXhwKSxcbiAgICAgICAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcykgfHwgbnVsbCxcbiAgICAgICAgICAgICAgdGhpcmRNYXRjaCA9IHRoaXJkKG1hdGNoZXMpIHx8IG51bGwsXG4gICAgICAgICAgICAgIGZvdXJ0aE1hdGNoID0gZm91cnRoKG1hdGNoZXMpIHx8IG51bGw7XG5cbiAgICAgICAgaWYgKHNlY29uZE1hdGNoICE9PSBudWxsKSB7XG4gICAgICAgICAgc3RhcnRJbmRleCA9IHBhcnNlSW50KHNlY29uZE1hdGNoKTtcblxuICAgICAgICAgIGlmICh0aGlyZE1hdGNoID09PSBudWxsKSB7XG4gICAgICAgICAgICBlbmRJbmRleCA9IHN0YXJ0SW5kZXg7ICAvLy9cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm91cnRoTWF0Y2ggIT09IG51bGwpIHtcbiAgICAgICAgICBlbmRJbmRleCA9IHBhcnNlSW50KGZvdXJ0aE1hdGNoKTtcblxuICAgICAgICAgIGlmICh0aGlyZE1hdGNoID09PSBudWxsKSB7XG4gICAgICAgICAgICBzdGFydEluZGV4ID0gZW5kSW5kZXg7ICAvLy9cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzcHJlYWQgPSBuZXcgU3ByZWFkKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB1bmlxdWUpO1xuXG4gICAgcmV0dXJuIHNwcmVhZDtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBjaGFyYWN0ZXJzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgU3ByZWFkIGZyb20gXCIuL3NwcmVhZFwiO1xuXG5pbXBvcnQgeyBpbmNsdWRlcywgcHVzaCwgY2xlYXIsIHNlY29uZCwgdGhpcmQsIGZvdXJ0aCwgZmlmdGggfSBmcm9tIFwiLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuY29uc3QgeyBCQVJfQ0hBUkFDVEVSLCBXSUxEQ0FSRF9DSEFSQUNURVIsIEZPUldBUkRfU0xBU0hfQ0hBUkFDVEVSIH0gPSBjaGFyYWN0ZXJzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdWVyeSB7XG4gIGNvbnN0cnVjdG9yKHR5cGVzLCBzcHJlYWQsIHN1YlF1ZXJ5LCAgcnVsZU5hbWVzLCBtYXhpbXVtRGVwdGgsIGluZmluaXRlRGVzY2VudCwgaW50ZXJtZWRpYXRlTm9kZXMpIHtcbiAgICB0aGlzLnR5cGVzID0gdHlwZXM7XG4gICAgdGhpcy5zcHJlYWQgPSBzcHJlYWQ7XG4gICAgdGhpcy5zdWJRdWVyeSA9IHN1YlF1ZXJ5O1xuICAgIHRoaXMucnVsZU5hbWVzID0gcnVsZU5hbWVzO1xuICAgIHRoaXMubWF4aW11bURlcHRoID0gbWF4aW11bURlcHRoO1xuICAgIHRoaXMuaW5maW5pdGVEZXNjZW50ID0gaW5maW5pdGVEZXNjZW50O1xuICAgIHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMgPSBpbnRlcm1lZGlhdGVOb2RlcztcbiAgfVxuXG4gIGV4ZWN1dGUobm9kZSwgZGVwdGggPSAwLCBtYXhpbXVtRGVwdGggPSB0aGlzLm1heGltdW1EZXB0aCkge1xuICAgIGNvbnN0IG5vZGVzID0gW107XG5cbiAgICB0aGlzLmNsZWFyKCk7XG5cbiAgICB0aGlzLmZpbmQobm9kZSwgZGVwdGgsIG1heGltdW1EZXB0aCk7XG5cbiAgICB0aGlzLmFwcGx5KG5vZGVzLCBkZXB0aCwgbWF4aW11bURlcHRoKTtcblxuICAgIHJldHVybiBub2RlcztcbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIGNsZWFyKHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMpO1xuICB9XG5cbiAgZmluZChub2RlLCBkZXB0aCwgbWF4aW11bURlcHRoKSB7XG4gICAgaWYgKGRlcHRoID4gbWF4aW11bURlcHRoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKSxcbiAgICAgICAgICBub2RlTm9uVGVybWluYWxOb2RlID0gIW5vZGVUZXJtaW5hbE5vZGU7XG5cbiAgICBsZXQgZm91bmQ7XG5cbiAgICBpZiAobm9kZVRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3QgdGVybWluYWxOb2RlID0gbm9kZSwgIC8vL1xuICAgICAgICAgICAgdHlwZSA9IHRlcm1pbmFsTm9kZS5nZXRUeXBlKCk7XG5cbiAgICAgIGZvdW5kID0gaW5jbHVkZXModGhpcy50eXBlcywgdHlwZSwgV0lMRENBUkRfQ0hBUkFDVEVSKTtcbiAgICB9XG5cbiAgICBpZiAobm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgICBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpO1xuXG4gICAgICBmb3VuZCA9IGluY2x1ZGVzKHRoaXMucnVsZU5hbWVzLCBydWxlTmFtZSwgV0lMRENBUkRfQ0hBUkFDVEVSKTtcbiAgICB9XG5cbiAgICBpZiAoZm91bmQpIHtcbiAgICAgIGNvbnN0IGludGVybWVkaWF0ZU5vZGUgPSBub2RlOyAvLy9cblxuICAgICAgdGhpcy5pbnRlcm1lZGlhdGVOb2Rlcy5wdXNoKGludGVybWVkaWF0ZU5vZGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmluZmluaXRlRGVzY2VudCkge1xuICAgICAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgICAgZGVwdGgrKztcblxuICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICAgICAgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCk7XG5cbiAgICAgICAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICB0aGlzLmZpbmQoY2hpbGROb2RlLCBkZXB0aCwgbWF4aW11bURlcHRoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXBwbHkobm9kZXMsIGRlcHRoLCBtYXhpbXVtRGVwdGgpIHtcbiAgICB0aGlzLnNwcmVhZC5hZGp1c3ROb2Rlcyh0aGlzLmludGVybWVkaWF0ZU5vZGVzKTtcblxuICAgIGlmICh0aGlzLnN1YlF1ZXJ5ID09PSBudWxsKSB7XG4gICAgICBwdXNoKG5vZGVzLCB0aGlzLmludGVybWVkaWF0ZU5vZGVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbnRlcm1lZGlhdGVOb2Rlcy5mb3JFYWNoKChpbnRlcm1lZGlhdGVOb2RlKSA9PiB7XG4gICAgICAgIGNvbnN0IGludGVybWVkaWF0ZU5vZGVOb25UZXJtaW5hbE5vZGUgPSBpbnRlcm1lZGlhdGVOb2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgICAgICAgaWYgKGludGVybWVkaWF0ZU5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgICAgICBkZXB0aCsrO1xuXG4gICAgICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gaW50ZXJtZWRpYXRlTm9kZSwgLy8vXG4gICAgICAgICAgICAgICAgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCk7XG5cbiAgICAgICAgICB0aGlzLnN1YlF1ZXJ5LmNsZWFyKCk7XG5cbiAgICAgICAgICBjaGlsZE5vZGVzLmZvckVhY2goKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdWJRdWVyeS5maW5kKGNoaWxkTm9kZSwgZGVwdGgsIG1heGltdW1EZXB0aCk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB0aGlzLnN1YlF1ZXJ5LmFwcGx5KG5vZGVzLCBkZXB0aCwgbWF4aW11bURlcHRoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGZyb21FeHByZXNzaW9uKGV4cHJlc3Npb24sIG1heGltdW1EZXB0aCA9IEluZmluaXR5KSB7XG4gICAgbGV0IHF1ZXJ5ID0gbnVsbDtcblxuICAgIGlmIChleHByZXNzaW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCByZWdFeHAgPSAvXlxcLyhcXC8pPyhbXi9cXFshXSspKFxcW1teXFxdXStdfCEpPyhcXC8uKik/JC8sXG4gICAgICAgICAgICBtYXRjaGVzID0gZXhwcmVzc2lvbi5tYXRjaChyZWdFeHApLFxuICAgICAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgICAgICB0aGlyZE1hdGNoID0gdGhpcmQobWF0Y2hlcyksXG4gICAgICAgICAgICBmb3VydGhNYXRjaCA9IGZvdXJ0aChtYXRjaGVzKSxcbiAgICAgICAgICAgIGZpZnRoTWF0Y2ggPSBmaWZ0aChtYXRjaGVzKSxcbiAgICAgICAgICAgIHNlbGVjdG9ycyA9IHRoaXJkTWF0Y2guc3BsaXQoQkFSX0NIQVJBQ1RFUiksXG4gICAgICAgICAgICBzdWJFeHByZXNzaW9uID0gZmlmdGhNYXRjaCB8fCBudWxsLFxuICAgICAgICAgICAgc3ByZWFkRXhwcmVzc2lvbiA9IGZvdXJ0aE1hdGNoIHx8IG51bGwsXG4gICAgICAgICAgICB0eXBlcyA9IHR5cGVzRnJvbVNlbGVjdG9ycyhzZWxlY3RvcnMpLFxuICAgICAgICAgICAgc3ByZWFkID0gU3ByZWFkLmZyb21TcHJlYWRFeHByZXNzaW9uKHNwcmVhZEV4cHJlc3Npb24pLFxuICAgICAgICAgICAgc3ViUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihzdWJFeHByZXNzaW9uKSxcbiAgICAgICAgICAgIHJ1bGVOYW1lcyA9IHJ1bGVOYW1lc0Zyb21TZWxlY3RvcnMoc2VsZWN0b3JzKSxcbiAgICAgICAgICAgIGluZmluaXRlRGVzY2VudCA9IChzZWNvbmRNYXRjaCA9PT0gRk9SV0FSRF9TTEFTSF9DSEFSQUNURVIpLFxuICAgICAgICAgICAgaW50ZXJtZWRpYXRlTm9kZXMgPSBbXTtcblxuICAgICAgcXVlcnkgPSBuZXcgUXVlcnkodHlwZXMsIHNwcmVhZCwgc3ViUXVlcnksIHJ1bGVOYW1lcywgbWF4aW11bURlcHRoLCBpbmZpbml0ZURlc2NlbnQsIGludGVybWVkaWF0ZU5vZGVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHlwZXNGcm9tU2VsZWN0b3JzKHNlbGVjdG9ycykge1xuICBjb25zdCB0eXBlcyA9IFtdO1xuXG4gIHNlbGVjdG9ycy5mb3JFYWNoKChzZWxlY3RvcikgPT4ge1xuICAgIGNvbnN0IHNlbGVjdG9yVHlwZVNlbGVjdG9yID0gaXNTZWxlY3RvclR5cGVTZWxlY3RvcihzZWxlY3Rvcik7XG5cbiAgICBpZiAoc2VsZWN0b3JUeXBlU2VsZWN0b3IpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSBzZWxlY3Rvci5zdWJzdHJpbmcoMSk7XG5cbiAgICAgIHR5cGVzLnB1c2godHlwZSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdHlwZXM7XG59XG5cbmZ1bmN0aW9uIHJ1bGVOYW1lc0Zyb21TZWxlY3RvcnMoc2VsZWN0b3JzKSB7XG4gIGNvbnN0IHJ1bGVOYW1lcyA9IFtdO1xuXG4gIHNlbGVjdG9ycy5mb3JFYWNoKChzZWxlY3RvcikgPT4ge1xuICAgIGNvbnN0IHNlbGVjdG9yUnVsZU5hbWVTZWxlY3RvciA9IGlzU2VsZWN0b3JSdWxlTmFtZVNlbGVjdG9yKHNlbGVjdG9yKTtcblxuICAgIGlmIChzZWxlY3RvclJ1bGVOYW1lU2VsZWN0b3IpIHtcbiAgICAgIGNvbnN0IHJ1bGVOYW1lID0gc2VsZWN0b3I7ICAvLy9cblxuICAgICAgcnVsZU5hbWVzLnB1c2gocnVsZU5hbWUpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJ1bGVOYW1lcztcbn1cblxuZnVuY3Rpb24gaXNTZWxlY3RvclR5cGVTZWxlY3RvcihzZWxlY3RvcikgeyByZXR1cm4gL15ALy50ZXN0KHNlbGVjdG9yKTsgfVxuXG5mdW5jdGlvbiBpc1NlbGVjdG9yUnVsZU5hbWVTZWxlY3RvcihzZWxlY3RvcikgeyByZXR1cm4gL15bXkBdLy50ZXN0KHNlbGVjdG9yKTsgfVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUXVlcnkgZnJvbSBcIi4uL3F1ZXJ5XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeUJ5Q2xhc3Mobm9kZSwgQ2xhc3MsIG5vZGVzID0gW10pIHtcbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDbGFzcykge1xuICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gIH1cblxuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IG5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHF1ZXJ5QnlDbGFzcyhjaGlsZE5vZGUsIENsYXNzLCBub2RlcykpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlCeUNsYXNzZXMobm9kZSwgQ2xhc3Nlcywgbm9kZXMgPSBbXSkge1xuICBDbGFzc2VzLnNvbWUoKENsYXNzKSA9PiB7XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDbGFzcykge1xuICAgICAgbm9kZXMucHVzaChub2RlKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IG5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHF1ZXJ5QnlDbGFzc2VzKGNoaWxkTm9kZSwgQ2xhc3Nlcywgbm9kZXMpKTtcbiAgfVxuXG4gIHJldHVybiBub2Rlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5QnlFeHByZXNzaW9uKG5vZGUsIGV4cHJlc3Npb24sIG1heGltdW1EZXB0aCkge1xuICBjb25zdCBxdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKGV4cHJlc3Npb24sIG1heGltdW1EZXB0aCksXG4gICAgICAgIG5vZGVzID0gcXVlcnkuZXhlY3V0ZShub2RlKTtcblxuICByZXR1cm4gbm9kZXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcXVlcnlCeUNsYXNzLFxuICBxdWVyeUJ5Q2xhc3NlcyxcbiAgcXVlcnlCeUV4cHJlc3Npb25cbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgUXVlcnkgfSBmcm9tIFwiLi9xdWVyeVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBxdWVyeVV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9xdWVyeVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgSEVBRCA9IFwiaGVhZFwiO1xuZXhwb3J0IGNvbnN0IFNUWUxFID0gXCJzdHlsZVwiO1xuZXhwb3J0IGNvbnN0IENIQVJBQ1RFUlMgPSBcImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpcIjtcbmV4cG9ydCBjb25zdCBUV09fU1BBQ0VTID0gXCIgIFwiO1xuZXhwb3J0IGNvbnN0IEZPVVJfU1BBQ0VTID0gXCIgICAgXCI7XG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbmV4cG9ydCBjb25zdCBDTEFTU19OQU1FX0xFTkdUSCA9IDY7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgZmlyc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMocXVlcnksIG5vZGUsIHRva2Vucykge1xuICBsZXQgY29udGVudCA9IG51bGw7XG5cbiAgY29uc3Qgbm9kZXMgPSBxdWVyeS5leGVjdXRlKG5vZGUpLFxuICAgICAgICBub2Rlc0xlbmd0aCA9IG5vZGVzLmxlbmd0aDtcblxuICBpZiAobm9kZXNMZW5ndGggPiAwKSB7XG4gICAgY29uc3QgZmlyc3ROb2RlID0gZmlyc3Qobm9kZXMpO1xuXG4gICAgbm9kZSA9IGZpcnN0Tm9kZTsgLy8vXG5cbiAgICBjb250ZW50ID0gY29udGVudEZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucyk7XG4gIH1cblxuICByZXR1cm4gY29udGVudDtcbn1cblxuZnVuY3Rpb24gY29udGVudEZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICBjb25zdCBmaXJzdFNpZ25pZmljYW50VG9rZW4gPSBub2RlLmdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbigpLFxuICAgICAgICBsYXN0U2lnbmlmaWNhbnRUb2tlbiA9IG5vZGUuZ2V0TGFzdFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgZmlyc3RUb2tlbiA9IGZpcnN0U2lnbmlmaWNhbnRUb2tlbiwgLy8vXG4gICAgICAgIGxhc3RUb2tlbiA9IGxhc3RTaWduaWZpY2FudFRva2VuLCAvLy9cbiAgICAgICAgZmlyc3RUb2tlbkluZGV4ID0gdG9rZW5zLmluZGV4T2YoZmlyc3RUb2tlbiksXG4gICAgICAgIGxhc3RUb2tlbkluZGV4ID0gdG9rZW5zLmluZGV4T2YobGFzdFRva2VuKTtcblxuICBsZXQgY29udGVudCA9IEVNUFRZX1NUUklORztcblxuICBmb3IgKGxldCBpbmRleCA9IGZpcnN0VG9rZW5JbmRleDsgaW5kZXggPD0gbGFzdFRva2VuSW5kZXg7IGluZGV4KyspIHtcbiAgICBjb25zdCB0b2tlbiA9IHRva2Vuc1tpbmRleF0sXG4gICAgICAgICAgdG9rZW5Db250ZW50ID0gdG9rZW4uZ2V0Q29udGVudCgpO1xuXG4gICAgY29udGVudCArPSB0b2tlbkNvbnRlbnQ7XG4gIH1cblxuICByZXR1cm4gY29udGVudDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZW50XCI7XG5cbmNvbnN0IHByaW9yaXR5UXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8qL3ByaW9yaXR5XCIpLFxuICAgICAgcHJvcGVydHlRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLyovcHJvcGVydHlcIiksXG4gICAgICBleHByZXNzaW9uUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8qL2V4cHJlc3Npb25cIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlY2xhcmF0aW9uIHtcbiAgY29uc3RydWN0b3IocHJvcGVydHksIGV4cHJlc3Npb24sIHByaW9yaXR5KSB7XG4gICAgdGhpcy5wcm9wZXJ0eSA9IHByb3BlcnR5O1xuICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG4gICAgdGhpcy5wcmlvcml0eSA9IHByaW9yaXR5O1xuICB9XG5cbiAgZ2V0UHJvcGVydHkoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHk7XG4gIH1cblxuICBnZXRFeHByZXNzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLmV4cHJlc3Npb247XG4gIH1cblxuICBnZXRQcmlvcml0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcmlvcml0eTtcbiAgfVxuXG4gIGNoZWNrTWF0Y2hlcyhkZWNsYXJhdGlvbnMpIHtcbiAgICBjb25zdCBtYXRjaGVzID0gZGVjbGFyYXRpb25zLnNvbWUoKGRlY2xhcmF0aW9uKSA9PiB7XG4gICAgICBjb25zdCBwcm9wZXJ0eSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5KCksXG4gICAgICAgICAgICBwcm9wZXJ0aWVzTWF0Y2ggPSAocHJvcGVydHkgPT09IHRoaXMucHJvcGVydHkpO1xuXG4gICAgICBpZiAocHJvcGVydGllc01hdGNoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1hdGNoZXM7XG4gIH1cblxuICBhc0NTUyhpbmRlbnQsIGxhc3QpIHtcbiAgICBjb25zdCBjc3MgPSBsYXN0ID9cbiAgICAgICAgICAgICAgICBgJHtpbmRlbnR9JHt0aGlzLnByb3BlcnR5fTogJHt0aGlzLmV4cHJlc3Npb259JHt0aGlzLnByaW9yaXR5fTtgIDpcbiAgICAgICAgICAgICAgICAgIGAke2luZGVudH0ke3RoaXMucHJvcGVydHl9OiAke3RoaXMuZXhwcmVzc2lvbn0ke3RoaXMucHJpb3JpdHl9O1xcbmA7XG5cbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IHByb3BlcnR5Q29udGVudCA9IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zKHByb3BlcnR5UXVlcnksIG5vZGUsIHRva2VucyksXG4gICAgICAgICAgZXhwcmVzc2lvbkNvbnRlbnQgPSBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyhleHByZXNzaW9uUXVlcnksIG5vZGUsIHRva2VucyksXG4gICAgICAgICAgcHJpb3JpdHlDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMocHJpb3JpdHlRdWVyeSwgbm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnR5Q29udGVudCwgLy8vXG4gICAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Db250ZW50LCAvLy9cbiAgICAgICAgICBwcmlvcml0eSA9IChwcmlvcml0eUNvbnRlbnQgPT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgRU1QVFlfU1RSSU5HIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGAgJHtwcmlvcml0eUNvbnRlbnR9YCxcbiAgICAgICAgICBkZWNsYXJhdGlvbiA9IG5ldyBEZWNsYXJhdGlvbihwcm9wZXJ0eSwgZXhwcmVzc2lvbiwgcHJpb3JpdHkpO1xuXG4gICAgcmV0dXJuIGRlY2xhcmF0aW9uO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBEZWNsYXJhdGlvbiBmcm9tIFwiLi9kZWNsYXJhdGlvblwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IGRlY2xhcmF0aW9uUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8qL2RlY2xhcmF0aW9uXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWNsYXJhdGlvbnMge1xuICBjb25zdHJ1Y3RvcihhcnJheSkge1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbiAgfVxuXG4gIGZvcndhcmRzRm9yRWFjaChjYWxsYmFjaykge1xuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIGZpcnN0SW5kZXggPSAwLFxuICAgICAgICAgIGxhc3RJbmRleCA9IGxlbmd0aCAtIDE7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IGZpcnN0SW5kZXg7IGluZGV4IDw9IGxhc3RJbmRleDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSB0aGlzLmFycmF5W2luZGV4XTtcblxuICAgICAgY2FsbGJhY2soZGVjbGFyYXRpb24sIGluZGV4KTtcbiAgICB9XG4gIH1cblxuICBiYWNrd2FyZHNGb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gdGhpcy5hcnJheS5sZW5ndGgsXG4gICAgICAgICAgZmlyc3RJbmRleCA9IDAsXG4gICAgICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gbGFzdEluZGV4OyBpbmRleCA+PSBmaXJzdEluZGV4OyBpbmRleC0tKSB7XG4gICAgICBjb25zdCBkZWNsYXJhdGlvbiA9IHRoaXMuYXJyYXlbaW5kZXhdO1xuXG4gICAgICBjYWxsYmFjayhkZWNsYXJhdGlvbiwgaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHVuc2hpZnQoZGVjbGFyYXRpb25zKSB7XG4gICAgZGVjbGFyYXRpb25zLmJhY2t3YXJkc0ZvckVhY2goKGRlY2xhcmF0aW9uKSA9PiB7XG4gICAgICBjb25zdCBtYXRjaGVzID0gZGVjbGFyYXRpb24uY2hlY2tNYXRjaGVzKHRoaXMuYXJyYXkpOyAvLy9cblxuICAgICAgaWYgKCFtYXRjaGVzKSB7XG4gICAgICAgIHRoaXMuYXJyYXkudW5zaGlmdChkZWNsYXJhdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUsIGluZGVudCkge1xuICAgIGlmIChpbmRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5kZW50ID0gY2xhc3NOYW1lOyAvLy9cblxuICAgICAgY2xhc3NOYW1lID0gbnVsbDsgLy8vXG4gICAgfVxuXG4gICAgbGV0IGNzcyA9IEVNUFRZX1NUUklORztcblxuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuYXJyYXkubGVuZ3RoO1xuXG4gICAgaWYgKGxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGxhc3RJbmRleCA9IGxlbmd0aCAtIDEsXG4gICAgICAgICAgICBkZWNsYXJhdGlvbnNDU1MgPSB0aGlzLmFycmF5LnJlZHVjZSgoZGVjbGFyYXRpb25zQ1NTLCBkZWNsYXJhdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbGFzdCA9IChpbmRleCA9PT0gbGFzdEluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb25DU1MgPSBkZWNsYXJhdGlvbi5hc0NTUyhpbmRlbnQsIGxhc3QpO1xuXG4gICAgICAgICAgICAgIGRlY2xhcmF0aW9uc0NTUyArPSBkZWNsYXJhdGlvbkNTUztcblxuICAgICAgICAgICAgICByZXR1cm4gZGVjbGFyYXRpb25zQ1NTO1xuICAgICAgICAgICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gbnVsbCkge1xuICAgICAgICBjc3MgPSBkZWNsYXJhdGlvbnNDU1M7ICAvLy9cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNzcyA9IGAuJHtjbGFzc05hbWV9IHtcbiR7ZGVjbGFyYXRpb25zQ1NTfVxufVxuXG5gO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb25Ob2RlcyA9IGRlY2xhcmF0aW9uUXVlcnkuZXhlY3V0ZShub2RlKSxcbiAgICAgICAgICBhcnJheSA9IGRlY2xhcmF0aW9uTm9kZXMubWFwKChkZWNsYXJhdGlvbk5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBkZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb24gPSBEZWNsYXJhdGlvbi5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gZGVjbGFyYXRpb247XG4gICAgICAgICAgfSksXG4gICAgICAgICAgZGVjbGFyYXRpb25zID0gbmV3IERlY2xhcmF0aW9ucyhhcnJheSk7XG5cbiAgICByZXR1cm4gZGVjbGFyYXRpb25zO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBEZWNsYXJhdGlvbnMgZnJvbSBcIi4vZGVjbGFyYXRpb25zXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZW50XCI7XG5cbmNvbnN0IHNlbGVjdG9yc1F1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvL3NlbGVjdG9yc1wiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZVNldCB7XG4gIGNvbnN0cnVjdG9yKHNlbGVjdG9ycywgZGVjbGFyYXRpb25zKSB7XG4gICAgdGhpcy5zZWxlY3RvcnMgPSBzZWxlY3RvcnM7XG4gICAgdGhpcy5kZWNsYXJhdGlvbnMgPSBkZWNsYXJhdGlvbnM7XG4gIH1cblxuICBnZXRTZWxlY3RvcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0b3JzO1xuICB9XG5cbiAgZ2V0RGVjbGFyYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmRlY2xhcmF0aW9ucztcbiAgfVxuXG4gIHVuc2hpZnQocnVsZVNldCkge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9ucyA9IHJ1bGVTZXQuZ2V0RGVjbGFyYXRpb25zKCk7XG5cbiAgICB0aGlzLmRlY2xhcmF0aW9ucy51bnNoaWZ0KGRlY2xhcmF0aW9ucyk7XG4gIH1cblxuICBmaW5kTWF0Y2hpbmdSdWxlU2V0KHJ1bGVTZXRzKSB7XG4gICAgY29uc3QgbWF0Y2hpbmdSdWxlU2V0ID0gcnVsZVNldHMuZmluZCgocnVsZVNldCkgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0b3JzID0gcnVsZVNldC5nZXRTZWxlY3RvcnMoKSxcbiAgICAgICAgICAgIHNlbGVjdG9yc01hdGNoID0gKHNlbGVjdG9ycyA9PT0gdGhpcy5zZWxlY3RvcnMpLFxuICAgICAgICAgICAgcnVsZVNldHNNYXRjaCA9IHNlbGVjdG9yc01hdGNoOyAvLy9cblxuICAgICAgaWYgKHJ1bGVTZXRzTWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDsgLy8vXG5cbiAgICByZXR1cm4gbWF0Y2hpbmdSdWxlU2V0O1xuICB9XG5cbiAgYXNDU1MoY2xhc3NOYW1lLCBpbmRlbnQpIHtcbiAgICBsZXQgY3NzID0gRU1QVFlfU1RSSU5HO1xuXG4gICAgY29uc3QgZGVjbGFyYXRpb25zQ1NTID0gdGhpcy5kZWNsYXJhdGlvbnMuYXNDU1MoYCAgJHtpbmRlbnR9YCk7XG5cbiAgICBpZiAoZGVjbGFyYXRpb25zQ1NTICE9PSBFTVBUWV9TVFJJTkcpIHtcbiAgICAgICBjc3MgPSBgJHtpbmRlbnR9LiR7Y2xhc3NOYW1lfSR7dGhpcy5zZWxlY3RvcnN9IHtcbiR7ZGVjbGFyYXRpb25zQ1NTfVxuJHtpbmRlbnR9fVxuXG5gO1xuICAgIH1cblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3Qgc2VsZWN0b3JzID0gc2VsZWN0b3JzRnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBkZWNsYXJhdGlvbnMgPSBEZWNsYXJhdGlvbnMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBtZWRpYSA9IG5ldyBSdWxlU2V0KHNlbGVjdG9ycywgZGVjbGFyYXRpb25zKTtcblxuICAgIHJldHVybiBtZWRpYTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZWxlY3RvcnNGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgY29uc3Qgc2VsZWN0b3JzTm9kZUNvbnRlbnQgPSBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyhzZWxlY3RvcnNRdWVyeSwgbm9kZSwgdG9rZW5zKSxcbiAgICAgICAgc2VsZWN0b3JzID0gYCR7c2VsZWN0b3JzTm9kZUNvbnRlbnR9YDtcblxuICByZXR1cm4gc2VsZWN0b3JzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCJvY2NhbS1kb21cIjtcblxuaW1wb3J0IFJ1bGVTZXQgZnJvbSBcIi4vcnVsZVNldFwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHJ1bGVTZXRRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLyovcnVsZVNldFwiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZVNldHMge1xuICBjb25zdHJ1Y3RvcihhcnJheSkge1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbiAgfVxuXG4gIHVuc2hpZnQocnVsZVNldHMpIHtcbiAgICBydWxlU2V0cy5mb3JFYWNoKChydWxlU2V0KSA9PiB7XG4gICAgICBjb25zdCBtYXRjaGluZ1J1bGVTZXQgPSBydWxlU2V0LmZpbmRNYXRjaGluZ1J1bGVTZXQodGhpcy5hcnJheSk7IC8vL1xuXG4gICAgICAobWF0Y2hpbmdSdWxlU2V0ID09PSBudWxsKSA/XG4gICAgICAgIHRoaXMuYXJyYXkudW5zaGlmdChydWxlU2V0KSA6XG4gICAgICAgICAgbWF0Y2hpbmdSdWxlU2V0LnVuc2hpZnQocnVsZVNldCk7XG4gICAgfSk7XG4gIH1cblxuICBmb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5hcnJheS5mb3JFYWNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIGFzQ1NTKGNsYXNzTmFtZSwgaW5kZW50KSB7XG4gICAgY29uc3QgY3NzID0gdGhpcy5hcnJheS5yZWR1Y2UoKGNzcywgcnVsZVNldCkgPT4ge1xuICAgICAgY29uc3QgcnVsZVNldENTUyA9IHJ1bGVTZXQuYXNDU1MoY2xhc3NOYW1lLCBpbmRlbnQpO1xuXG4gICAgICBjc3MgKz0gcnVsZVNldENTUztcblxuICAgICAgcmV0dXJuIGNzcztcbiAgICB9LCBFTVBUWV9TVFJJTkcpO1xuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBydWxlU2V0Tm9kZXMgPSBydWxlU2V0UXVlcnkuZXhlY3V0ZShub2RlKSxcbiAgICAgICAgICBhcnJheSA9IHJ1bGVTZXROb2Rlcy5tYXAoKHJ1bGVTZXROb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gcnVsZVNldE5vZGUsIC8vL1xuICAgICAgICAgICAgICAgICAgcnVsZVNldCA9IFJ1bGVTZXQuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKTtcblxuICAgICAgICAgICAgcmV0dXJuIHJ1bGVTZXQ7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcnVsZVNldHMgPSBuZXcgUnVsZVNldHMoYXJyYXkpO1xuXG4gICAgcmV0dXJuIHJ1bGVTZXRzO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBSdWxlU2V0cyBmcm9tIFwiLi9ydWxlU2V0c1wiO1xuaW1wb3J0IERlY2xhcmF0aW9ucyBmcm9tIFwiLi9kZWNsYXJhdGlvbnNcIjtcblxuaW1wb3J0IHsgVFdPX1NQQUNFUywgRk9VUl9TUEFDRVMgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGVudFwiO1xuXG5jb25zdCBtZWRpYVF1ZXJpZXNRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiL21lZGlhL21lZGlhUXVlcmllc1wiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWVkaWEge1xuICBjb25zdHJ1Y3RvcihtZWRpYVF1ZXJpZXMsIGRlY2xhcmF0aW9ucywgcnVsZVNldHMpIHtcbiAgICB0aGlzLm1lZGlhUXVlcmllcyA9IG1lZGlhUXVlcmllcztcbiAgICB0aGlzLmRlY2xhcmF0aW9ucyA9IGRlY2xhcmF0aW9ucztcbiAgICB0aGlzLnJ1bGVTZXRzID0gcnVsZVNldHM7XG4gIH1cblxuICBnZXRNZWRpYVF1ZXJpZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVkaWFRdWVyaWVzO1xuICB9XG5cbiAgZ2V0RGVjbGFyYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmRlY2xhcmF0aW9ucztcbiAgfVxuXG4gIGdldFJ1bGVTZXRzKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVTZXRzO1xuICB9XG5cbiAgYXNDU1MoY2xhc3NOYW1lKSB7XG4gICAgbGV0IGNzcyA9IFwiXCI7XG5cbiAgICBjb25zdCBydWxlU2V0c0NTUyA9IHRoaXMucnVsZVNldHMuYXNDU1MoY2xhc3NOYW1lLCBUV09fU1BBQ0VTKSxcbiAgICAgICAgICBkZWNsYXJhdGlvbnNDU1MgPSB0aGlzLmRlY2xhcmF0aW9ucy5hc0NTUyhjbGFzc05hbWUsIEZPVVJfU1BBQ0VTKTtcblxuICAgIGlmICgocnVsZVNldHNDU1MgIT09IG51bGwpIHx8IChkZWNsYXJhdGlvbnNDU1MgIT09IG51bGwpKSB7XG4gICAgICBjc3MgPSBgQG1lZGlhICR7dGhpcy5tZWRpYVF1ZXJpZXN9IHtcbiR7ZGVjbGFyYXRpb25zQ1NTfSR7cnVsZVNldHNDU1N9XG59XG5cbmA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBtZWRpYVF1ZXJpZXMgPSBtZWRpYVF1ZXJpZXNGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIGRlY2xhcmF0aW9ucyA9IERlY2xhcmF0aW9ucy5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIHJ1bGVTZXRzID0gUnVsZVNldHMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBtZWRpYSA9IG5ldyBNZWRpYShtZWRpYVF1ZXJpZXMsIGRlY2xhcmF0aW9ucywgcnVsZVNldHMpO1xuXG4gICAgcmV0dXJuIG1lZGlhO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1lZGlhUXVlcmllc0Zyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICBjb25zdCBtZWRpYVF1ZXJpZXNOb2RlQ29udGVudCA9IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zKG1lZGlhUXVlcmllc1F1ZXJ5LCBub2RlLCB0b2tlbnMpLFxuICAgICAgICBtZWRpYVF1ZXJpZXMgPSBgJHttZWRpYVF1ZXJpZXNOb2RlQ29udGVudH1gO1xuXG4gIHJldHVybiBtZWRpYVF1ZXJpZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLWRvbVwiO1xuXG5pbXBvcnQgTWVkaWEgZnJvbSBcIi4vbWVkaWFcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBtZWRpYVF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvc3R5bGVzaGVldC9tZWRpYVwiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWVkaWFzIHtcbiAgY29uc3RydWN0b3IoYXJyYXkpIHtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG4gIH1cblxuICB1bnNoaWZ0KG1lZGlhcykge1xuICAgIG1lZGlhcy5mb3JFYWNoKChtZWRpYSkgPT4ge1xuICAgICAgdGhpcy5hcnJheS51bnNoaWZ0KG1lZGlhKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZvckVhY2goY2FsbGJhY2spIHtcbiAgICB0aGlzLmFycmF5LmZvckVhY2goY2FsbGJhY2spO1xuICB9XG5cbiAgYXNDU1MoY2xhc3NOYW1lKSB7XG4gICAgY29uc3QgY3NzID0gdGhpcy5hcnJheS5yZWR1Y2UoKGNzcywgbWVkaWEpID0+IHtcbiAgICAgIGNvbnN0IG1lZGlhQ1NTID0gbWVkaWEuYXNDU1MoY2xhc3NOYW1lKTtcblxuICAgICAgY3NzICs9IG1lZGlhQ1NTO1xuXG4gICAgICByZXR1cm4gY3NzO1xuICAgIH0sIEVNUFRZX1NUUklORyk7XG5cbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IG1lZGlhTm9kZXMgPSBtZWRpYVF1ZXJ5LmV4ZWN1dGUobm9kZSksXG4gICAgICAgICAgYXJyYXkgPSBtZWRpYU5vZGVzLm1hcCgobWVkaWFOb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gbWVkaWFOb2RlLCAvLy9cbiAgICAgICAgICAgICAgICAgIG1lZGlhID0gTWVkaWEuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKTtcblxuICAgICAgICAgICAgcmV0dXJuIG1lZGlhO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIG1lZGlhcyA9IG5ldyBNZWRpYXMoYXJyYXkpO1xuXG4gICAgcmV0dXJuIG1lZGlhcztcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBNZWRpYXMgZnJvbSBcIi4vc3R5bGUvbWVkaWFzXCI7XG5pbXBvcnQgUnVsZVNldHMgZnJvbSBcIi4vc3R5bGUvcnVsZVNldHNcIjtcbmltcG9ydCBEZWNsYXJhdGlvbnMgZnJvbSBcIi4vc3R5bGUvZGVjbGFyYXRpb25zXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0eWxlIHtcbiAgY29uc3RydWN0b3IoZGVjbGFyYXRpb25zLCBydWxlU2V0cywgbWVkaWFzKSB7XG4gICAgdGhpcy5kZWNsYXJhdGlvbnMgPSBkZWNsYXJhdGlvbnM7XG4gICAgdGhpcy5ydWxlU2V0cyA9IHJ1bGVTZXRzO1xuICAgIHRoaXMubWVkaWFzID0gbWVkaWFzO1xuICB9XG5cbiAgZ2V0RGVjbGFyYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmRlY2xhcmF0aW9ucztcbiAgfVxuXG4gIGdldFJ1bGVTZXRzKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVTZXRzO1xuICB9XG5cbiAgZ2V0TWVkaWFzKCkge1xuICAgIHJldHVybiB0aGlzLm1lZGlhcztcbiAgfVxuXG4gIGV4dGVuZHMoc3VwZXJTdHlsZSkge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9ucyA9IHN1cGVyU3R5bGUuZ2V0RGVjbGFyYXRpb25zKCksXG4gICAgICAgICAgcnVsZVNldHMgPSBzdXBlclN0eWxlLmdldFJ1bGVTZXRzKCksXG4gICAgICAgICAgbWVkaWFzID0gc3VwZXJTdHlsZS5nZXRNZWRpYXMoKTtcblxuICAgIHRoaXMudW5zaGlmdChkZWNsYXJhdGlvbnMsIHJ1bGVTZXRzLCBtZWRpYXMpO1xuICB9XG5cbiAgdW5zaGlmdChkZWNsYXJhdGlvbnMsIHJ1bGVTZXRzLCBtZWRpYXMpIHtcbiAgICB0aGlzLmRlY2xhcmF0aW9ucy51bnNoaWZ0KGRlY2xhcmF0aW9ucyk7XG4gICAgdGhpcy5ydWxlU2V0cy51bnNoaWZ0KHJ1bGVTZXRzKTtcbiAgICB0aGlzLm1lZGlhcy51bnNoaWZ0KG1lZGlhcyk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnNDU1MgPSB0aGlzLmRlY2xhcmF0aW9ucy5hc0NTUyhjbGFzc05hbWUsIFwiICBcIiksXG4gICAgICAgICAgcnVsZVNldHNDU1MgPSB0aGlzLnJ1bGVTZXRzLmFzQ1NTKGNsYXNzTmFtZSwgXCJcIiksXG4gICAgICAgICAgbWVkaWFzQ1NTID0gdGhpcy5tZWRpYXMuYXNDU1MoY2xhc3NOYW1lKSxcbiAgICAgICAgICBjc3MgPSBgJHtkZWNsYXJhdGlvbnNDU1N9JHtydWxlU2V0c0NTU30ke21lZGlhc0NTU31gO1xuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnMgPSBEZWNsYXJhdGlvbnMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBydWxlU2V0cyA9IFJ1bGVTZXRzLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgbWVkaWFzID0gTWVkaWFzLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgc3R5bGUgPSBuZXcgU3R5bGUoZGVjbGFyYXRpb25zLCBydWxlU2V0cywgbWVkaWFzKTtcblxuICAgIHJldHVybiBzdHlsZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTdHlsZSBmcm9tIFwiLi4vc3R5bGVcIjtcbmltcG9ydCBDU1NMZXhlciBmcm9tIFwiLi4vY3NzL2xleGVyXCI7XG5pbXBvcnQgQ1NTUGFyc2VyIGZyb20gXCIuLi9jc3MvcGFyc2VyXCI7XG5cbmltcG9ydCB7IEhFQUQsIFNUWUxFLCBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IGNzc0xleGVyID0gQ1NTTGV4ZXIuZnJvbU5vdGhpbmcoKSxcbiAgICAgIGNzc1BhcnNlciA9IENTU1BhcnNlci5mcm9tTm90aGluZygpO1xuXG5pZiAoIWdsb2JhbFRoaXMuc3R5bGVNYXApIHtcbiAgZ2xvYmFsVGhpcy5zdHlsZU1hcCA9IHt9O1xufVxuXG5jb25zdCB7IHN0eWxlTWFwIH0gPSBnbG9iYWxUaGlzO1xuXG5mdW5jdGlvbiByZW5kZXJTdHlsZShzdHlsZSkge1xuICBjb25zdCBoZWFkRE9NRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoSEVBRCksXG4gICAgICAgIHN0eWxlRE9NRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoU1RZTEUpLFxuICAgICAgICBpbm5lckhUTUwgPSBgXG4gICAgICAgIFxuJHtzdHlsZX1gO1xuXG4gIE9iamVjdC5hc3NpZ24oc3R5bGVET01FbGVtZW50LCB7XG4gICAgaW5uZXJIVE1MXG4gIH0pO1xuXG4gIGhlYWRET01FbGVtZW50LmFwcGVuZENoaWxkKHN0eWxlRE9NRWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclN0eWxlcygpIHtcbiAgY29uc3Qgc3R5bGVzQ1NTID0gcmV0cmlldmVTdHlsZXNDU1MoKSxcbiAgICAgICAgc3R5bGUgPSBzdHlsZXNDU1M7ICAvLy9cblxuICByZW5kZXJTdHlsZShzdHlsZSk7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU3R5bGUoYXJncywgY2xhc3NOYW1lLCBzdXBlclN0eWxlID0gbnVsbCkge1xuICBjb25zdCBzdHJpbmdzID0gYXJncy5zaGlmdCgpLFx0Ly8vXG4gICAgICAgIGNvbnRlbnQgPSBzdHJpbmdzLnJlZHVjZSgoY29udGVudCwgc3RyaW5nLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFyZyA9IGFyZ3NbaW5kZXhdO1xuXG4gICAgICAgICAgY29udGVudCA9IChhcmcgIT09IHVuZGVmaW5lZCkgP1xuICAgICAgICAgICAgICAgICAgICAgIGAke2NvbnRlbnR9JHtzdHJpbmd9JHthcmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICBgJHtjb250ZW50fSR7c3RyaW5nfWA7XG5cbiAgICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICAgICAgfSwgRU1QVFlfU1RSSU5HKSxcbiAgICAgICAgdG9rZW5zID0gY3NzTGV4ZXIudG9rZW5pc2UoY29udGVudCksXG4gICAgICAgIG5vZGUgPSBjc3NQYXJzZXIucGFyc2UodG9rZW5zKSxcbiAgICAgICAgc3R5bGUgPSBTdHlsZS5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpO1xuXG4gICAgICAgIGlmIChzdXBlclN0eWxlICE9PSBudWxsKSB7XG4gICAgICAgICAgc3R5bGUuZXh0ZW5kcyhzdXBlclN0eWxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0eWxlTWFwW2NsYXNzTmFtZV0gPSBzdHlsZTtcbn1cblxuZnVuY3Rpb24gcmV0cmlldmVTdHlsZShjbGFzc05hbWUpIHtcbiAgY29uc3Qgc3R5bGUgPSBzdHlsZU1hcFtjbGFzc05hbWVdIHx8IG51bGw7XG5cbiAgcmV0dXJuIHN0eWxlO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHJlbmRlclN0eWxlLFxuICByZW5kZXJTdHlsZXMsXG4gIGdlbmVyYXRlU3R5bGUsXG4gIHJldHJpZXZlU3R5bGVcbn07XG5cbmZ1bmN0aW9uIHJldHJpZXZlU3R5bGVzQ1NTKCkge1xuICBjb25zdCBjbGFzc05hbWVzID0gT2JqZWN0LmtleXMoc3R5bGVNYXApLFxuICAgICAgICBzdHlsZXNDU1MgPSBjbGFzc05hbWVzLnJlZHVjZSgoc3R5bGVzQ1NTLCBjbGFzc05hbWUpID0+IHtcbiAgICAgICAgICBjb25zdCBzdHlsZSA9IHJldHJpZXZlU3R5bGUoY2xhc3NOYW1lKSxcbiAgICAgICAgICAgICAgICBzdHlsZUNTUyA9IHN0eWxlLmFzQ1NTKGNsYXNzTmFtZSk7XG5cbiAgICAgICAgICBzdHlsZXNDU1MgKz0gc3R5bGVDU1M7XG5cbiAgICAgICAgICByZXR1cm4gc3R5bGVzQ1NTO1xuICAgICAgICB9LCBFTVBUWV9TVFJJTkcpO1xuXG4gIHJldHVybiBzdHlsZXNDU1M7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENIQVJBQ1RFUlMsIEVNUFRZX1NUUklORywgQ0xBU1NfTkFNRV9MRU5HVEggfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IGxlbmd0aCA9IENMQVNTX05BTUVfTEVOR1RILFxuICAgICAgY2hhcmFjdGVycyA9IENIQVJBQ1RFUlMsXG4gICAgICBjaGFyYWN0ZXJzTGVuZ3RoID0gY2hhcmFjdGVycy5sZW5ndGg7XG5cbmNvbnN0IGNsYXNzTmFtZXMgPSBbXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQ2xhc3NOYW1lKCkge1xuICBsZXQgY2xhc3NOYW1lID0gRU1QVFlfU1RSSU5HO1xuXG4gIGZvciAobGV0IGNvdW50ID0gMDsgY291bnQgPCBsZW5ndGg7IGNvdW50KyspIHtcbiAgICBjb25zdCBpbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNoYXJhY3RlcnNMZW5ndGgpLFxuICAgICAgICAgIGNoYXJhY3RlciA9IGNoYXJhY3RlcnNbaW5kZXhdO1xuXG4gICAgY2xhc3NOYW1lICs9IGNoYXJhY3RlcjtcbiAgfVxuXG4gIGNvbnN0IGNsYXNzTmFtZXNJbmNsdWRlc0NsYXNzTmFtZSA9IGNsYXNzTmFtZXMuaW5jbHVkZXMoY2xhc3NOYW1lKTtcblxuICBpZiAoIWNsYXNzTmFtZXNJbmNsdWRlc0NsYXNzTmFtZSkge1xuICAgIGNsYXNzTmFtZXMucHVzaChjbGFzc05hbWUpO1xuICB9IGVsc2Uge1xuICAgIGNsYXNzTmFtZSA9IGdlbmVyYXRlQ2xhc3NOYW1lKCk7XG4gIH1cblxuICByZXR1cm4gY2xhc3NOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0cmlldmVDbGFzc05hbWUoZWxlbWVudCkge1xuICBjb25zdCB7IGNsYXNzTmFtZSB9ID0gZWxlbWVudC5yZWFjdEZ1bmN0aW9uIHx8IGVsZW1lbnQucmVhY3RDb21wb25lbnQuY29uc3RydWN0b3I7XG5cbiAgcmV0dXJuIGNsYXNzTmFtZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBnZW5lcmF0ZUNsYXNzTmFtZSxcbiAgcmV0cmlldmVDbGFzc05hbWVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgdGFnTmFtZXMgfSBmcm9tIFwiLi90YWdOYW1lc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU1NMZXhlciB9IGZyb20gXCIuL2Nzcy9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU1NQYXJzZXIgfSBmcm9tIFwiLi9jc3MvcGFyc2VyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHN0eWxlc1V0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9zdHlsZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY2xhc3NOYW1lVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2NsYXNzTmFtZVwiO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NsYXNzKGFyZ3VtZW50KSB7IHJldHVybiBpc1N1YmNsYXNzT2YoYXJndW1lbnQsIEVsZW1lbnQpOyB9ICAvLy9cblxuZnVuY3Rpb24gaXNTdWJjbGFzc09mKGFyZ3VtZW50LCBDbGFzcykge1xuICBjb25zdCBzdWJjbGFzc09mID0gKGFyZ3VtZW50LnByb3RvdHlwZSBpbnN0YW5jZW9mIENsYXNzKTtcblxuICByZXR1cm4gc3ViY2xhc3NPZjtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IENMQVNTX05BTUUgPSBcImNsYXNzTmFtZVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBSZWFjdCB9IGZyb20gXCJlYXN5XCI7XG5pbXBvcnQgeyB0YWdOYW1lcywgc3R5bGVzVXRpbGl0aWVzLCBjbGFzc05hbWVVdGlsaXRpZXMgfSBmcm9tIFwid2l0aC1zdHlsZVwiO1xuXG5pbXBvcnQgeyBpc0NsYXNzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2NsYXNzXCI7XG5pbXBvcnQgeyBDTEFTU19OQU1FIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgZ2VuZXJhdGVDbGFzc05hbWUgfSA9IGNsYXNzTmFtZVV0aWxpdGllcyxcbiAgICAgIHsgcmVuZGVyU3R5bGUsIHJlbmRlclN0eWxlcywgZ2VuZXJhdGVTdHlsZSwgcmV0cmlldmVTdHlsZSB9ID0gc3R5bGVzVXRpbGl0aWVzO1xuXG5mdW5jdGlvbiB3aXRoU3R5bGUoQ2xhc3NPckZ1bmN0aW9uKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBjb25zdCBhcmdzID0gWyAuLi5hcmd1bWVudHMgXTsgIC8vL1xuXG4gICAgbGV0IHsgY2xhc3NOYW1lID0gbnVsbCB9ID0gQ2xhc3NPckZ1bmN0aW9uO1xuXG4gICAgY29uc3Qgc3VwZXJTdHlsZSA9IHJldHJpZXZlU3R5bGUoY2xhc3NOYW1lKTtcblxuICAgIGNsYXNzTmFtZSA9IGdlbmVyYXRlQ2xhc3NOYW1lKCk7XG5cbiAgICBnZW5lcmF0ZVN0eWxlKGFyZ3MsIGNsYXNzTmFtZSwgc3VwZXJTdHlsZSk7XG5cbiAgICBjb25zdCBDbGFzc09yRnVuY3Rpb25DbGFzcyA9IGlzQ2xhc3MoQ2xhc3NPckZ1bmN0aW9uKTtcblxuICAgIGlmIChDbGFzc09yRnVuY3Rpb25DbGFzcykge1xuICAgICAgY29uc3QgQ2xhc3MgPSBDbGFzc09yRnVuY3Rpb247ICAvLy9cblxuICAgICAgQ2xhc3NPckZ1bmN0aW9uID0gY2xhc3MgZXh0ZW5kcyBDbGFzcyB7XG4gICAgICAgIHN0YXRpYyBmcm9tQ2xhc3MoX0NsYXNzLCBwcm9wZXJ0aWVzLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzID0gYXBwZW5kQ2xhc3NOYW1lVG9Qcm9wZXJ0aWVzKGNsYXNzTmFtZSwgcHJvcGVydGllcyk7XG5cbiAgICAgICAgICByZXR1cm4gQ2xhc3MuZnJvbUNsYXNzKF9DbGFzcywgcHJvcGVydGllcywgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBGdW5jdGlvbiA9IENsYXNzT3JGdW5jdGlvbjsgLy8vXG5cbiAgICAgIENsYXNzT3JGdW5jdGlvbiA9IChwcm9wZXJ0aWVzKSA9PiB7XG4gICAgICAgIHByb3BlcnRpZXMgPSBhcHBlbmRDbGFzc05hbWVUb1Byb3BlcnRpZXMoY2xhc3NOYW1lLCBwcm9wZXJ0aWVzKTtcblxuICAgICAgICByZXR1cm4gRnVuY3Rpb24ocHJvcGVydGllcyk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIE9iamVjdC5hc3NpZ24oQ2xhc3NPckZ1bmN0aW9uLCB7XG4gICAgICBjbGFzc05hbWVcbiAgICB9KTtcblxuICAgIHJldHVybiBDbGFzc09yRnVuY3Rpb247XG4gIH07XG59XG5cbk9iamVjdC5hc3NpZ24od2l0aFN0eWxlLCB7XG4gIHJlbmRlclN0eWxlLFxuICByZW5kZXJTdHlsZXNcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGU7XG5cbnRhZ05hbWVzLmZvckVhY2goKHRhZ05hbWUpID0+IHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpdGhTdHlsZSwgdGFnTmFtZSwge1xuICAgIGdldDogKCkgPT4gZnVuY3Rpb24oKSB7XG4gICAgICBjb25zdCBhcmdzID0gWy4uLmFyZ3VtZW50c10sICAvLy9cbiAgICAgICAgICAgIGNsYXNzTmFtZSA9IGdlbmVyYXRlQ2xhc3NOYW1lKCk7XG5cbiAgICAgIGdlbmVyYXRlU3R5bGUoYXJncywgY2xhc3NOYW1lKTtcblxuICAgICAgY29uc3QgRnVuY3Rpb24gPSAocHJvcGVydGllcykgPT4ge1xuICAgICAgICBwcm9wZXJ0aWVzID0gYXBwZW5kQ2xhc3NOYW1lVG9Qcm9wZXJ0aWVzKGNsYXNzTmFtZSwgcHJvcGVydGllcyk7XG5cbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSwgcHJvcGVydGllcyk7XG4gICAgICB9O1xuXG4gICAgICBPYmplY3QuYXNzaWduKEZ1bmN0aW9uLCB7XG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBGdW5jdGlvbjtcbiAgICB9XG4gIH0pO1xufSk7XG5cbmZ1bmN0aW9uIGFwcGVuZENsYXNzTmFtZVRvUHJvcGVydGllcyhjbGFzc05hbWUsIHByb3BlcnRpZXMpIHtcbiAgcHJvcGVydGllcyA9IHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoQ0xBU1NfTkFNRSkgPyBwcm9wZXJ0aWVzIDogeyAuLi5wcm9wZXJ0aWVzLCBjbGFzc05hbWUgfTsgLy8vXG5cbiAgcmV0dXJuIHByb3BlcnRpZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcIi4vd2l0aFN0eWxlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlLmRpdmBcblxuICB3aWR0aDogMTByZW07XG4gIGJvcmRlcjogMXB4IGRhc2hlZCBibGFjaztcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBib3JkZXItcmlnaHQ6IG5vbmU7XG4gIFxuICA6bGFzdC1vZi10eXBlIHtcbiAgICBib3JkZXItcmlnaHQ6IDFweCBkYXNoZWQgYmxhY2s7XG4gIH1cblxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IGxvZ29TVkdXaWR0aCA9IFwiMjRyZW1cIlxuZXhwb3J0IGNvbnN0IG5hbWVTVkdIZWlnaHQgPSBcIjIuMXJlbVwiXG5leHBvcnQgY29uc3QgdGl0bGVTVkdIZWlnaHQgPSBcIjIuMXJlbVwiO1xuZXhwb3J0IGNvbnN0IHRvZ2dsZVNWR0hlaWdodCA9IFwiMS44cmVtXCJcbmV4cG9ydCBjb25zdCBtYXJrZXJTVkdIZWlnaHQgPSBuYW1lU1ZHSGVpZ2h0OyAvLy9cbmV4cG9ydCBjb25zdCBqdWxpYU1vbm9MaW5lSGVpZ2h0ID0gMS41O1xuZXhwb3J0IGNvbnN0IG5hbWVTVkdNYXJnaW5Cb3R0b20gPSBcIjAuNHJlbVwiO1xuZXhwb3J0IGNvbnN0IG1hcmtlclNWR01hcmdpbkxlZnQgPSBcIjIuNHJlbVwiO1xuZXhwb3J0IGNvbnN0IGZpbGVOYW1lU1ZHUGFkZGluZ0xlZnQgPSBcIjIuMnJlbVwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGxvZ29TVkdXaWR0aCxcbiAgbmFtZVNWR0hlaWdodCxcbiAgdGl0bGVTVkdIZWlnaHQsXG4gIHRvZ2dsZVNWR0hlaWdodCxcbiAgbWFya2VyU1ZHSGVpZ2h0LFxuICBqdWxpYU1vbm9MaW5lSGVpZ2h0LFxuICBuYW1lU1ZHTWFyZ2luQm90dG9tLFxuICBtYXJrZXJTVkdNYXJnaW5MZWZ0LFxuICBmaWxlTmFtZVNWR1BhZGRpbmdMZWZ0XG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3Qgc25vd1doaXRlID0gXCIjZmZmZmZmXCI7XG5leHBvcnQgY29uc3Qgc3ByaW5nV29vZCA9IFwiI2Y4ZjZmMVwiO1xuZXhwb3J0IGNvbnN0IGJpYW5jYSA9IFwiI2Y4ZjdlYlwiO1xuZXhwb3J0IGNvbnN0IGJvbmpvdXIgPSBcIiNFNUUyRTBcIjtcbmV4cG9ydCBjb25zdCBnYWluc2Jvcm91Z2ggPSBcIiNEOEQ2RDJcIjtcbmV4cG9ydCBjb25zdCBkYXduID0gXCIjQjhCM0E4XCI7XG5leHBvcnQgY29uc3Qgc3RhcmR1c3QgPSBcIiM5ZjlmOWNcIjtcbmV4cG9ydCBjb25zdCBzdG9ybUR1c3QgPSBcIiM2NDY0NjNcIjtcbmV4cG9ydCBjb25zdCBlbXBlcm9yID0gXCIjNTE1MTUwXCI7XG5leHBvcnQgY29uc3QgdHVhdGFyYSA9IFwiIzM2MzUzNFwiO1xuZXhwb3J0IGNvbnN0IGR1bmUgPSBcIiMyNDIxMWVcIjtcbmV4cG9ydCBjb25zdCB3b29kc21va2UgPSBcIiMwYzBkMGZcIjtcbmV4cG9ydCBjb25zdCBwaXRjaEJsYWNrID0gXCIjMDAwMDAwXCI7XG5cbmV4cG9ydCBjb25zdCBwb21lZ3JhbmF0ZSA9IFwiI2Y1MjkyOVwiO1xuZXhwb3J0IGNvbnN0IHN1c2hpID0gXCIjN2ZhODJmXCI7XG5leHBvcnQgY29uc3QgbGFwaXMgPSBcIiMwMDMwZTZcIjtcblxuZXhwb3J0IGNvbnN0IGh1cnJpY2FuZSA9IFwiIzkwODk4OVwiO1xuZXhwb3J0IGNvbnN0IHBhYmxvID0gXCIjNzc2ZjYxXCI7XG5leHBvcnQgY29uc3QgYXJtYWRpbGxvID0gXCIjNDk0NDNDXCI7XG5cbmV4cG9ydCBjb25zdCB3b29kbGFuZCA9IFwiIzNCNTUyYlwiO1xuZXhwb3J0IGNvbnN0IGxvZ0NhYmluID0gXCIjMmIzODIzXCI7XG5leHBvcnQgY29uc3QgYmxhY2tPbGl2ZSA9IFwiIzFjMjQxMlwiO1xuZXhwb3J0IGNvbnN0IGh1bnRlckdyZWVuID0gXCIjMTYxZDEwXCI7XG5cbmV4cG9ydCBjb25zdCBjYWRldEJsdWUgPSBcIiM1ZjllYTBcIjtcbmV4cG9ydCBjb25zdCBzcGFuaXNoR3JlZW4gPSBcIiM4NGIwN2JcIjtcblxuZXhwb3J0IGNvbnN0IHJhenptYXRhenogPSBcIiNlMzI1NmJcIjtcbmV4cG9ydCBjb25zdCB0ZXJyYWNvdHRhID0gXCIjYTgzYTI1XCI7XG5leHBvcnQgY29uc3Qga29ybWEgPSBcIiM5OTQyMGZcIjtcbmV4cG9ydCBjb25zdCB3YWxudXQgPSBcIiM1OTMzMWNcIjtcblxuZXhwb3J0IGNvbnN0IHN1bmZsb3dlciA9IFwiI2M5YmY2MlwiO1xuZXhwb3J0IGNvbnN0IGhva2V5UG9rZXkgPSBcIiNjNmI2MjRcIjtcbmV4cG9ydCBjb25zdCBjZWxlcnkgPSBcIiNiY2I4NTJcIjtcbmV4cG9ydCBjb25zdCBzeWNhbW9yZSA9IFwiIzkwOGQzOVwiO1xuZXhwb3J0IGNvbnN0IGF2b2NhZG8gPSBcIiM5MDhkNjlcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBzbm93V2hpdGUsXG4gIHNwcmluZ1dvb2QsXG4gIGJpYW5jYSxcbiAgYm9uam91cixcbiAgZ2FpbnNib3JvdWdoLFxuICBkYXduLFxuICBzdGFyZHVzdCxcbiAgaHVycmljYW5lLFxuICBzdG9ybUR1c3QsXG4gIGVtcGVyb3IsXG4gIHR1YXRhcmEsXG4gIGR1bmUsXG4gIHdvb2RzbW9rZSxcbiAgcGl0Y2hCbGFjayxcbiAgcG9tZWdyYW5hdGUsXG4gIHN1c2hpLFxuICBsYXBpcyxcbiAgcGFibG8sXG4gIGFybWFkaWxsbyxcbiAgbG9nQ2FiaW4sXG4gIGJsYWNrT2xpdmUsXG4gIGh1bnRlckdyZWVuLFxuICBjYWRldEJsdWUsXG4gIHNwYW5pc2hHcmVlbixcbiAgcmF6em1hdGF6eixcbiAgdGVycmFjb3R0YSxcbiAga29ybWEsXG4gIHdhbG51dCxcbiAgc3VuZmxvd2VyLFxuICBob2tleVBva2V5LFxuICBjZWxlcnksXG4gIHN5Y2Ftb3JlLFxuICBhdm9jYWRvXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBkdW5lLCBwYWJsbywgc3ByaW5nV29vZCwgcG9tZWdyYW5hdGUsIGdhaW5zYm9yb3VnaCB9IGZyb20gXCIuLi8uLi9jb2xvdXJzXCI7XG5cbmV4cG9ydCBjb25zdCBjb2xvdXIgPSBzcHJpbmdXb29kO1xuXG5leHBvcnQgY29uc3QgZXJyb3JDb2xvdXIgPSBnYWluc2Jvcm91Z2g7XG5cbmV4cG9ydCBjb25zdCBub25zZW5zZUNvbG91ciA9IHBhYmxvO1xuXG5leHBvcnQgY29uc3QgdW5kZXJsaW5lQ29sb3VyID0gcG9tZWdyYW5hdGU7XG5cbmV4cG9ydCBjb25zdCBiYWNrZ3JvdW5kQ29sb3VyID0gZHVuZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY29sb3VyLCBlcnJvckNvbG91ciwgbm9uc2Vuc2VDb2xvdXIsIHVuZGVybGluZUNvbG91ciwgYmFja2dyb3VuZENvbG91ciB9IGZyb20gXCIuLi8uLi9zY2hlbWUvc3ludGF4L2RlZmF1bHRcIjtcblxuY29uc3QgZGVmYXVsdFN5bnRheFN0eWxlID0gYFxuXG4gIEBrZXlmcmFtZXMgYmFja2dyb3VuZC1jb2xvci1hbmltYXRpb24ge1xuICAgIDAlICAgeyBiYWNrZ3JvdW5kLWNvbG9yOiAke2JhY2tncm91bmRDb2xvdXJ9OyB9XG4gICAgMTAwJSB7IGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9XG4gIH1cbiAgXG4gIC5zeW50YXggPiBkaXYuYW5pbWF0ZWQgeyBcbiAgICBhbmltYXRpb246IGJhY2tncm91bmQtY29sb3ItYW5pbWF0aW9uIDFzIDE7XG4gIH1cbiAgXG4gIC5zeW50YXggPiBkaXYgeyBcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuXG4gIC5zeW50YXggPiBkaXYgKiB7IFxuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgfVxuICBcbiAgLnN5bnRheCA+IGRpdiA+ICogeyBcbiAgICBjb2xvcjogJHtjb2xvdXJ9OyBcbiAgfVxuICBcbiAgLnN5bnRheCA+IGRpdiA+ICogYSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgfVxuXG4gIC5zeW50YXggPiBkaXYgPiAqIGE6aG92ZXIge1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICB9XG5cbiAgLnN5bnRheCA+IGRpdiA+IGJ1dHRvbiB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIG91dGxpbmU6IG5vbmU7XG4gICAgZGlzcGxheTogaW5saW5lO1xuICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICB9XG4gIFxuICAuc3ludGF4ID4gZGl2ID4gLmVycm9yIHtcbiAgICBjb2xvcjogJHtlcnJvckNvbG91cn07XG4gICAgdGV4dC1kZWNvcmF0aW9uLWxpbmU6IHVuZGVybGluZTtcbiAgICB0ZXh0LWRlY29yYXRpb24tY29sb3I6ICR7dW5kZXJsaW5lQ29sb3VyfTtcbiAgfSBcblxuICAuc3ludGF4ID4gZGl2ID4gLm5vbnNlbnNlIHtcbiAgICBjb2xvcjogJHtub25zZW5zZUNvbG91cn07XG4gIH0gXG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRTeW50YXhTdHlsZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3VzaGksIHBhYmxvLCBjZWxlcnksIHN5Y2Ftb3JlLCBjYWRldEJsdWUsIGh1cnJpY2FuZSwgaG9rZXlQb2tleSwgcmF6em1hdGF6eiwgZ2FpbnNib3JvdWdoIH0gZnJvbSBcIi4uLy4uL2NvbG91cnNcIjtcblxuZXhwb3J0IGNvbnN0IHR5cGVDb2xvdXIgPSBjYWRldEJsdWU7XG5cbmV4cG9ydCBjb25zdCBzcGVjaWFsQ29sb3VyID0gc3VzaGk7XG5cbmV4cG9ydCBjb25zdCBjb21tZW50Q29sb3VyID0gcGFibG87XG5cbmV4cG9ydCBjb25zdCBrZXl3b3JkQ29sb3VyID0gcmF6em1hdGF6ejtcblxuZXhwb3J0IGNvbnN0IG9wZXJhdG9yQ29sb3VyID0gc3VzaGk7XG5cbmV4cG9ydCBjb25zdCBtZXRhVHlwZUNvbG91ciA9IGdhaW5zYm9yb3VnaDtcblxuZXhwb3J0IGNvbnN0IHN0cmluZ0xpdGVyYWxDb2xvdXIgPSBob2tleVBva2V5O1xuXG5leHBvcnQgY29uc3QgY29udGV4dE5hbWVDb2xvdXIgPSBjYWRldEJsdWU7XG5cbmV4cG9ydCBjb25zdCBsYWJlbE5hbWVDb2xvdXIgPSBzeWNhbW9yZTtcblxuZXhwb3J0IGNvbnN0IGxhYmVsTmFtZUhvdmVyQ29sb3VyID0gY2VsZXJ5O1xuXG5leHBvcnQgY29uc3QgZGlzYWJsZWRMYWJlbE5hbWVDb2xvdXIgPSBwYWJsbztcblxuZXhwb3J0IGNvbnN0IGRpc2FibGVkTGFiZWxOYW1lSG92ZXJDb2xvdXIgPSBodXJyaWNhbmU7XG5cbmV4cG9ydCBjb25zdCByZWZlcmVuY2VOYW1lQ29sb3VyID0gc3ljYW1vcmU7XG5cbmV4cG9ydCBjb25zdCByZWZlcmVuY2VOYW1lSG92ZXJDb2xvdXIgPSBjZWxlcnk7XG5cbmV4cG9ydCBjb25zdCBkaXNhYmxlZFJlZmVyZW5jZU5hbWVDb2xvdXIgPSBwYWJsbztcblxuZXhwb3J0IGNvbnN0IGRpc2FibGVkUmVmZXJlbmNlTmFtZUhvdmVyQ29sb3VyID0gaHVycmljYW5lO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyB0eXBlQ29sb3VyLFxuICAgICAgICAgc3BlY2lhbENvbG91cixcbiAgICAgICAgIGNvbW1lbnRDb2xvdXIsXG4gICAgICAgICBrZXl3b3JkQ29sb3VyLFxuICAgICAgICAgb3BlcmF0b3JDb2xvdXIsXG4gICAgICAgICBtZXRhVHlwZUNvbG91cixcbiAgICAgICAgIGxhYmVsTmFtZUNvbG91cixcbiAgICAgICAgIGNvbnRleHROYW1lQ29sb3VyLFxuICAgICAgICAgcmVmZXJlbmNlTmFtZUNvbG91cixcbiAgICAgICAgIHN0cmluZ0xpdGVyYWxDb2xvdXIsXG4gICAgICAgICBsYWJlbE5hbWVIb3ZlckNvbG91cixcbiAgICAgICAgIGRpc2FibGVkTGFiZWxOYW1lQ29sb3VyLFxuICAgICAgICAgcmVmZXJlbmNlTmFtZUhvdmVyQ29sb3VyLFxuICAgICAgICAgZGlzYWJsZWRSZWZlcmVuY2VOYW1lQ29sb3VyLFxuICAgICAgICAgZGlzYWJsZWRMYWJlbE5hbWVIb3ZlckNvbG91cixcbiAgICAgICAgIGRpc2FibGVkUmVmZXJlbmNlTmFtZUhvdmVyQ29sb3VyIH0gZnJvbSBcIi4uLy4uL3NjaGVtZS9zeW50YXgvZmxvcmVuY2VcIjtcblxuY29uc3QgZmxvcmVuY2VTeW50YXhTdHlsZSA9IGBcblxuICAuZmxvcmVuY2Uuc3ludGF4ID4gZGl2ID4gLnR5cGUgeyBjb2xvcjogJHt0eXBlQ29sb3VyfTsgfVxuXG4gIC5mbG9yZW5jZS5zeW50YXggPiBkaXYgPiAuc3BlY2lhbCB7IGNvbG9yOiAke3NwZWNpYWxDb2xvdXJ9OyB9XG4gIFxuICAuZmxvcmVuY2Uuc3ludGF4ID4gZGl2ID4gLmNvbW1lbnQgeyBjb2xvcjogJHtjb21tZW50Q29sb3VyfTsgfVxuICBcbiAgLmZsb3JlbmNlLnN5bnRheCA+IGRpdiA+IC5vcGVyYXRvciB7IGNvbG9yOiAke29wZXJhdG9yQ29sb3VyfTsgfVxuICBcbiAgLmZsb3JlbmNlLnN5bnRheCA+IGRpdiA+IC5tZXRhLXR5cGUgeyBjb2xvcjogJHttZXRhVHlwZUNvbG91cn07IH1cblxuICAuZmxvcmVuY2Uuc3ludGF4ID4gZGl2ID4gLnByaW1hcnkta2V5d29yZCB7IGNvbG9yOiAke2tleXdvcmRDb2xvdXJ9OyB9XG4gIFxuICAuZmxvcmVuY2Uuc3ludGF4ID4gZGl2ID4gLnNlY29uZGFyeS1rZXl3b3JkIHsgY29sb3I6ICR7a2V5d29yZENvbG91cn07IH1cbiAgXG4gIC5mbG9yZW5jZS5zeW50YXggPiBkaXYgPiAuc3RyaW5nLWxpdGVyYWwgeyBjb2xvcjogJHtzdHJpbmdMaXRlcmFsQ29sb3VyfTsgfVxuXG4gIC5mbG9yZW5jZS5zeW50YXggPiBkaXYgPiAubmFtZS5jb250ZXh0IHsgY29sb3I6ICR7Y29udGV4dE5hbWVDb2xvdXJ9OyB9XG5cbiAgLmZsb3JlbmNlLnN5bnRheCA+IGRpdiA+IC5uYW1lLmxhYmVsIHsgY29sb3I6ICR7bGFiZWxOYW1lQ29sb3VyfTsgfVxuICBcbiAgLmZsb3JlbmNlLnN5bnRheCA+IGRpdiA+IC5uYW1lLmxhYmVsOmhvdmVyIHsgY29sb3I6ICR7bGFiZWxOYW1lSG92ZXJDb2xvdXJ9OyB9XG5cbiAgLmZsb3JlbmNlLnN5bnRheCA+IGRpdiA+IC5uYW1lLmxhYmVsLmRpc2FibGVkIHsgY29sb3I6ICR7ZGlzYWJsZWRMYWJlbE5hbWVDb2xvdXJ9OyB9XG4gIFxuICAuZmxvcmVuY2Uuc3ludGF4ID4gZGl2ID4gLm5hbWUubGFiZWwuZGlzYWJsZWQ6aG92ZXIgeyBjb2xvcjogJHtkaXNhYmxlZExhYmVsTmFtZUhvdmVyQ29sb3VyfTsgfVxuXG4gIC5mbG9yZW5jZS5zeW50YXggPiBkaXYgPiAubmFtZS5yZWZlcmVuY2UgeyBjb2xvcjogJHtyZWZlcmVuY2VOYW1lQ29sb3VyfTsgfVxuICBcbiAgLmZsb3JlbmNlLnN5bnRheCA+IGRpdiA+IC5uYW1lLnJlZmVyZW5jZTpob3ZlciB7IGNvbG9yOiAke3JlZmVyZW5jZU5hbWVIb3ZlckNvbG91cn07IH1cblxuICAuZmxvcmVuY2Uuc3ludGF4ID4gZGl2ID4gLm5hbWUucmVmZXJlbmNlLmRpc2FibGVkIHsgY29sb3I6ICR7ZGlzYWJsZWRSZWZlcmVuY2VOYW1lQ29sb3VyfTsgfVxuICBcbiAgLmZsb3JlbmNlLnN5bnRheCA+IGRpdiA+IC5uYW1lLnJlZmVyZW5jZS5kaXNhYmxlZDpob3ZlciB7IGNvbG9yOiAke2Rpc2FibGVkUmVmZXJlbmNlTmFtZUhvdmVyQ29sb3VyfTsgfVxuXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBmbG9yZW5jZVN5bnRheFN0eWxlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBnYWluc2Jvcm91Z2ggfSBmcm9tIFwiLi4vLi4vY29sb3Vyc1wiO1xuXG5leHBvcnQgY29uc3QgY29sb3VyID0gZ2FpbnNib3JvdWdoO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBjb2xvdXIgfSBmcm9tIFwiLi4vLi4vc2NoZW1lL3N5bnRheC9wbGFpblRleHRcIjtcblxuY29uc3QgcGxhaW5UZXh0U3ludGF4U3R5bGUgPSBgXG5cbiAgLm1hcmtkb3duLnN5bnRheCA+IGRpdiA+ICogeyBjb2xvcjogJHtjb2xvdXJ9OyB9XG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IHBsYWluVGV4dFN5bnRheFN0eWxlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBob2tleVBva2V5IH0gZnJvbSBcIi4uLy4uL2NvbG91cnNcIjtcblxuZXhwb3J0IGNvbnN0IHJlcG9zaXRvcnlDb2xvdXIgPSBob2tleVBva2V5O1xuXG5leHBvcnQgY29uc3Qgc3RyaW5nTGl0ZXJhbENvbG91ciA9IGhva2V5UG9rZXk7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHJlcG9zaXRvcnlDb2xvdXIsIHN0cmluZ0xpdGVyYWxDb2xvdXIgfSBmcm9tIFwiLi4vLi4vc2NoZW1lL3N5bnRheC9tZXRhSlNPTlwiO1xuXG5jb25zdCBtZXRhSlNPTlN5bnRheFN0eWxlID0gYFxuXG4gIC5tZXRhLWpzb24uc3ludGF4ID4gZGl2ID4gLnN0cmluZy1saXRlcmFsIHsgY29sb3I6ICR7c3RyaW5nTGl0ZXJhbENvbG91cn07IH1cblxuICAubWV0YS1qc29uLnN5bnRheCA+IGRpdiA+IC5yZXBvc2l0b3J5LCBcbiAgXG4gIC5tZXRhLWpzb24uc3ludGF4ID4gZGl2ID4gLnJlcG9zaXRvcnkgYSB7IGNvbG9yOiAke3JlcG9zaXRvcnlDb2xvdXJ9OyB9XG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IG1ldGFKU09OU3ludGF4U3R5bGU7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNvbG91ciB9IGZyb20gXCIuLi8uLi9zY2hlbWUvc3ludGF4L3BsYWluVGV4dFwiO1xuXG5jb25zdCBwbGFpblRleHRTeW50YXhTdHlsZSA9IGBcblxuICAucGxhaW4tdGV4dC5zeW50YXggPiBkaXYgPiAqIHsgY29sb3I6ICR7Y29sb3VyfTsgfVxuXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBwbGFpblRleHRTeW50YXhTdHlsZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2FkZXRCbHVlLCBob2tleVBva2V5LCBzcGFuaXNoR3JlZW4gfSBmcm9tIFwiLi4vLi4vY29sb3Vyc1wiO1xuXG5leHBvcnQgY29uc3QgbmFtZUNvbG91ciA9IGNhZGV0Qmx1ZTtcblxuZXhwb3J0IGNvbnN0IHR5cGVDb2xvdXIgPSBzcGFuaXNoR3JlZW47XG5cbmV4cG9ydCBjb25zdCBzdHJpbmdMaXRlcmFsQ29sb3VyID0gaG9rZXlQb2tleTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgbmFtZUNvbG91ciwgdHlwZUNvbG91ciwgc3RyaW5nTGl0ZXJhbENvbG91ciB9IGZyb20gXCIuLi8uLi9zY2hlbWUvc3ludGF4L2N1c3RvbUdyYW1tYXJCTkZcIlxuXG5jb25zdCBjdXN0b21HcmFtbWFyQk5GU3ludGF4U3R5bGUgPSBgXG5cbiAgLmN1c3RvbS1ncmFtbWFyLWJuZi5zeW50YXggPiBkaXYgPiAubmFtZSB7IGNvbG9yOiAke25hbWVDb2xvdXJ9OyB9XG5cbiAgLmN1c3RvbS1ncmFtbWFyLWJuZi5zeW50YXggPiBkaXYgPiAudHlwZSB7IGNvbG9yOiAke3R5cGVDb2xvdXJ9OyB9XG5cbiAgLmN1c3RvbS1ncmFtbWFyLWJuZi5zeW50YXggPiBkaXYgPiAuc3RyaW5nLWxpdGVyYWwgeyBjb2xvcjogJHtzdHJpbmdMaXRlcmFsQ29sb3VyfTsgfVxuICBcbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGN1c3RvbUdyYW1tYXJCTkZTeW50YXhTdHlsZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGRlZmF1bHRTeW50YXhTdHlsZSBmcm9tIFwiLi4vc3R5bGUvc3ludGF4L2RlZmF1bHRcIjtcbmltcG9ydCBmbG9yZW5jZVN5bnRheFN0eWxlIGZyb20gXCIuLi9zdHlsZS9zeW50YXgvZmxvcmVuY2VcIjtcbmltcG9ydCBtYXJrZG93blN5bnRheFN0eWxlIGZyb20gXCIuLi9zdHlsZS9zeW50YXgvbWFya2Rvd25cIjtcbmltcG9ydCBtZXRhSlNPTmVTeW50YXhTdHlsZSBmcm9tIFwiLi4vc3R5bGUvc3ludGF4L21ldGFKU09OXCI7XG5pbXBvcnQgcGxhaW5UZXh0U3ludGF4U3R5bGUgZnJvbSBcIi4uL3N0eWxlL3N5bnRheC9wbGFpblRleHRcIjtcbmltcG9ydCBjdXN0b21HcmFtbWFyQk5GTmVTeW50YXhTdHlsZSBmcm9tIFwiLi4vc3R5bGUvc3ludGF4L2N1c3RvbUdyYW1tYXJCTkZcIjtcblxuY29uc3Qgc3ludGF4U3R5bGUgPSBgXG4gICAgXG4gICR7ZGVmYXVsdFN5bnRheFN0eWxlfVxuICBcbiAgJHtmbG9yZW5jZVN5bnRheFN0eWxlfVxuICBcbiAgJHttYXJrZG93blN5bnRheFN0eWxlfVxuICBcbiAgJHttZXRhSlNPTmVTeW50YXhTdHlsZX1cblxuICAke3BsYWluVGV4dFN5bnRheFN0eWxlfVxuICBcbiAgJHtjdXN0b21HcmFtbWFyQk5GTmVTeW50YXhTdHlsZX0gXG4gIFxuYDtcblxuZXhwb3J0IGRlZmF1bHQgc3ludGF4U3R5bGU7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0hPU1QgPSBcIlwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBERUZBVUxUX0hPU1QgfSBmcm9tIFwiLi4vZGVmYXVsdHNcIjtcblxuY29uc3QganVsaWFNb25vU3R5bGUgPSAoaG9zdCA9IERFRkFVTFRfSE9TVCkgPT4gYFxuXG4gIEBmb250LWZhY2Uge1xuICAgIHNyYzogdXJsKFwiJHtob3N0fS9jc3Mvd29mZjIvSnVsaWFNb25vLVJlZ3VsYXIud29mZjJcIik7XG4gICAgZm9udC1mYW1pbHk6IFwiSnVsaWFNb25vXCI7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgfVxuICBcbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGp1bGlhTW9ub1N0eWxlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBERUZBVUxUX0hPU1QgfSBmcm9tIFwiLi4vZGVmYXVsdHNcIjtcblxuY29uc3QgY29tcHV0ZXJNb2Rlcm5TdHlsZSA9IChob3N0ID0gREVGQVVMVF9IT1NUKSA9PiBgXG5cbiAgQGZvbnQtZmFjZSB7XG4gICAgc3JjOiB1cmwoXCIke2hvc3R9L2Nzcy93b2ZmMi9jbXVucm0ud29mZjJcIik7XG4gICAgZm9udC1mYW1pbHk6IFwiQ29tcHV0ZXIgTW9kZXJuIFNlcmlmXCI7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gIH1cbiAgICBcbiAgQGZvbnQtZmFjZSB7XG4gICAgc3JjOiB1cmwoXCIke2hvc3R9L2Nzcy93b2ZmMi9jbXVudGkud29mZjJcIik7XG4gICAgZm9udC1mYW1pbHk6IFwiQ29tcHV0ZXIgTW9kZXJuIFNlcmlmXCI7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gIH1cbiAgICBcbiAgQGZvbnQtZmFjZSB7XG4gICAgc3JjOiB1cmwoXCIke2hvc3R9L2Nzcy93b2ZmMi9jbXVuYngud29mZjJcIik7XG4gICAgZm9udC1mYW1pbHk6IFwiQ29tcHV0ZXIgTW9kZXJuIFNlcmlmXCI7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB9XG4gICAgXG4gIEBmb250LWZhY2Uge1xuICAgIHNyYzogdXJsKFwiJHtob3N0fS9jc3Mvd29mZjIvY211bmJpLndvZmYyXCIpO1xuICAgIGZvbnQtZmFtaWx5OiBcIkNvbXB1dGVyIE1vZGVybiBTZXJpZlwiO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgfSAgXG4gICAgXG4gIEBmb250LWZhY2Uge1xuICAgIHNyYzogdXJsKFwiJHtob3N0fS9jc3Mvd29mZjIvY211bnNzLndvZmYyXCIpO1xuICAgIGZvbnQtZmFtaWx5OiBcIkNvbXB1dGVyIE1vZGVybiBTYW5zXCI7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gIH1cbiAgXG4gIEBmb250LWZhY2Uge1xuICAgIHNyYzogdXJsKFwiJHtob3N0fS9jc3Mvd29mZjIvY211bnNpLndvZmYyXCIpO1xuICAgIGZvbnQtZmFtaWx5OiBcIkNvbXB1dGVyIE1vZGVybiBTYW5zXCI7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gIH1cbiAgXG4gIEBmb250LWZhY2Uge1xuICAgIHNyYzogdXJsKFwiJHtob3N0fS9jc3Mvd29mZjIvY211bnN4LndvZmYyXCIpO1xuICAgIGZvbnQtZmFtaWx5OiBcIkNvbXB1dGVyIE1vZGVybiBTYW5zXCI7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB9XG4gIFxuICBAZm9udC1mYWNlIHtcbiAgICBzcmM6IHVybChcIiR7aG9zdH0vY3NzL3dvZmYyL2NtdW5zby53b2ZmMlwiKTtcbiAgICBmb250LWZhbWlseTogXCJDb21wdXRlciBNb2Rlcm4gU2Fuc1wiO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgfVxuICBcbiAgQGZvbnQtZmFjZSB7XG4gICAgc3JjOiB1cmwoXCIke2hvc3R9L2Nzcy93b2ZmMi9jbXVudHQud29mZjJcIik7XG4gICAgZm9udC1mYW1pbHk6IFwiQ29tcHV0ZXIgTW9kZXJuIFR5cGV3cml0ZXJcIjtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgfVxuICBcbiAgQGZvbnQtZmFjZSB7XG4gICAgc3JjOiB1cmwoXCIke2hvc3R9L2Nzcy93b2ZmMi9jbXVuaXQud29mZjJcIik7XG4gICAgZm9udC1mYW1pbHk6IFwiQ29tcHV0ZXIgTW9kZXJuIFR5cGV3cml0ZXJcIjtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgfVxuICAgIFxuICBAZm9udC1mYWNlIHtcbiAgICBzcmM6IHVybChcIiR7aG9zdH0vY3NzL3dvZmYyL2NtdW50Yi53b2ZmMlwiKTtcbiAgICBmb250LWZhbWlseTogXCJDb21wdXRlciBNb2Rlcm4gVHlwZXdyaXRlclwiO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgfVxuICAgIFxuICBAZm9udC1mYWNlIHtcbiAgICBzcmM6IHVybChcIiR7aG9zdH0vY3NzL3dvZmYyL2NtdW50eC53b2ZmMlwiKTtcbiAgICBmb250LWZhbWlseTogXCJDb21wdXRlciBNb2Rlcm4gVHlwZXdyaXRlclwiO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgfVxuICAgICAgXG4gIEBmb250LWZhY2Uge1xuICAgIHNyYzogdXJsKFwiJHtob3N0fS9jc3Mvd29mZjIvY211bmJtci53b2ZmMlwiKTtcbiAgICBmb250LWZhbWlseTogXCJDb21wdXRlciBNb2Rlcm4gQnJpZ2h0XCI7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gIH1cbiAgXG4gIEBmb250LWZhY2Uge1xuICAgIHNyYzogdXJsKFwiJHtob3N0fS9jc3Mvd29mZjIvY211bmJtby53b2ZmMlwiKTtcbiAgICBmb250LWZhbWlseTogXCJDb21wdXRlciBNb2Rlcm4gQnJpZ2h0XCI7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gIH1cbiAgXG4gIEBmb250LWZhY2Uge1xuICAgIHNyYzogdXJsKFwiJHtob3N0fS9jc3Mvd29mZjIvY211bmJieC53b2ZmMlwiKTtcbiAgICBmb250LWZhbWlseTogXCJDb21wdXRlciBNb2Rlcm4gQnJpZ2h0XCI7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB9XG4gIFxuICBAZm9udC1mYWNlIHtcbiAgICBzcmM6IHVybChcIiR7aG9zdH0vY3NzL3dvZmYyL2NtdW5ieG8ud29mZjJcIik7XG4gICAgZm9udC1mYW1pbHk6IFwiQ29tcHV0ZXIgTW9kZXJuIEJyaWdodFwiO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgfVxuXG4gIEBmb250LWZhY2Uge1xuICAgIHNyYzogdXJsKFwiJHtob3N0fS9jc3Mvd29mZjIvY211bm9ybS53b2ZmMlwiKTtcbiAgICBmb250LWZhbWlseTogXCJDb21wdXRlciBNb2Rlcm4gQ29uY3JldGVcIjtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgfVxuICAgIFxuICBAZm9udC1mYWNlIHtcbiAgICBzcmM6IHVybChcIiR7aG9zdH0vY3NzL3dvZmYyL2NtdW5vdGkud29mZjJcIik7XG4gICAgZm9udC1mYW1pbHk6IFwiQ29tcHV0ZXIgTW9kZXJuIENvbmNyZXRlXCI7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gIH1cbiAgICBcbiAgQGZvbnQtZmFjZSB7XG4gICAgc3JjOiB1cmwoXCIke2hvc3R9L2Nzcy93b2ZmMi9jbXVub2J4LndvZmYyXCIpO1xuICAgIGZvbnQtZmFtaWx5OiBcIkNvbXB1dGVyIE1vZGVybiBDb25jcmV0ZVwiO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgfVxuICAgIFxuICBAZm9udC1mYWNlIHtcbiAgICBzcmM6IHVybChcIiR7aG9zdH0vY3NzL3dvZmYyL2NtdW5vYmkud29mZjJcIik7XG4gICAgZm9udC1mYW1pbHk6IFwiQ29tcHV0ZXIgTW9kZXJuIENvbmNyZXRlXCI7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xuICB9XG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXB1dGVyTW9kZXJuU3R5bGU7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbW1vbkZvbnRNaXhpbiA9IGBcblxuICBmb250LXNpemU6IDEuMnJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuOHJlbTtcbiAgZm9udC1mYW1pbHk6IFwiRGVqYVZ1IFNhbnMgTW9ub1wiLCBNZW5sbywgXCJMdWNpZGEgQ29uc29sZVwiLCBNb25hY28sIHNhbnMtc2VyaWY7XG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbW1vbkZvbnRNaXhpbjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsganVsaWFNb25vTGluZUhlaWdodCB9IGZyb20gXCIuLi8uLi9zdHlsZXNcIjtcblxuY29uc3QganVsaWFNb25vRm9udE1peGluID0gYFxuXG4gIGxpbmUtaGVpZ2h0OiAke2p1bGlhTW9ub0xpbmVIZWlnaHR9O1xuICBmb250LWZhbWlseTogXCJKdWxpYU1vbm9cIjtcbiAgXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBqdWxpYU1vbm9Gb250TWl4aW47XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGRhd24sIGJvbmpvdXIsIGJpYW5jYSwgd29vZHNtb2tlLCBzdG9ybUR1c3QsIHdhbG51dCwgdHVhdGFyYSwgd29vZGxhbmQsIHN0YXJkdXN0LCBzcHJpbmdXb29kIH0gZnJvbSBcIi4uL2NvbG91cnNcIjtcblxuZXhwb3J0IGNvbnN0IGNvbW1vbkZpbGwgPSB0dWF0YXJhO1xuXG5leHBvcnQgY29uc3QgY29tbW9uQ29sb3VyID0gd29vZHNtb2tlO1xuXG5leHBvcnQgY29uc3QgY29tbW9uQm9yZGVyQ29sb3VyID0gc3Rvcm1EdXN0O1xuXG5leHBvcnQgY29uc3QgY29tbW9uQmFja2dyb3VuZENvbG91ciA9IGRhd247XG5cbmV4cG9ydCBjb25zdCBjb21tb25JbnB1dEJhY2tncm91bmRDb2xvdXIgPSBib25qb3VyO1xuXG5leHBvcnQgY29uc3QgY29tbW9uU2VsZWN0QmFja2dyb3VuZENvbG91ciA9IGJvbmpvdXI7XG5cbmV4cG9ydCBjb25zdCBjb21tb25CdXR0b25CYWNrZ3JvdW5kQ29sb3VyID0gYm9uam91cjtcblxuZXhwb3J0IGNvbnN0IGNvbW1vbkRpc2FibGVkRmlsbCA9IHN0b3JtRHVzdDtcblxuZXhwb3J0IGNvbnN0IGNvbW1vbkRpc2FibGVkSW5wdXRDb2xvdXIgPSBzdG9ybUR1c3Q7XG5cbmV4cG9ydCBjb25zdCBjb21tb25EaXNhYmxlZEJ1dHRvbkNvbG91ciA9IHN0b3JtRHVzdDtcblxuZXhwb3J0IGNvbnN0IGNvbW1vblNjcm9sbGJhclRodW1iQm9yZGVyQ29sb3VyID0gZGF3bjtcblxuZXhwb3J0IGNvbnN0IGNvbW1vblNjcm9sbGJhclRyYWNrQmFja2dyb3VuZENvbG91ciA9IGRhd247XG5cbmV4cG9ydCBjb25zdCBjb21tb25TY3JvbGxiYXJUaHVtYkJhY2tncm91bmRDb2xvdXIgPSBzdG9ybUR1c3Q7XG5cbmV4cG9ydCBjb25zdCBnbHlwaENvbG91ciA9IHN0YXJkdXN0O1xuXG5leHBvcnQgY29uc3QgY2xlYXJDb25zb2xlRmlsbCA9IHdhbG51dDtcblxuZXhwb3J0IGNvbnN0IGV4cGFuZGVkR2x5cGhDb2xvdXIgPSBzcHJpbmdXb29kO1xuXG5leHBvcnQgY29uc3Qgc2hvd1JlbGVhc2VzQ3Jvc3NGaWxsID0gd29vZGxhbmQ7XG5cbmV4cG9ydCBjb25zdCBoaWRlUmVsZWFzZXNDcm9zc0ZpbGwgPSB3YWxudXQ7XG5cbmV4cG9ydCBjb25zdCB0b29sdGlwQmFja2dyb3VuZENvbG91ciA9IGJpYW5jYTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21tb25GaWxsLFxuICBjb21tb25Db2xvdXIsXG4gIGNvbW1vbkJvcmRlckNvbG91cixcbiAgY29tbW9uQmFja2dyb3VuZENvbG91cixcbiAgY29tbW9uSW5wdXRCYWNrZ3JvdW5kQ29sb3VyLFxuICBjb21tb25TZWxlY3RCYWNrZ3JvdW5kQ29sb3VyLFxuICBjb21tb25CdXR0b25CYWNrZ3JvdW5kQ29sb3VyLFxuICBjb21tb25EaXNhYmxlZEZpbGwsXG4gIGNvbW1vbkRpc2FibGVkSW5wdXRDb2xvdXIsXG4gIGNvbW1vbkRpc2FibGVkQnV0dG9uQ29sb3VyLFxuICBjb21tb25TY3JvbGxiYXJUaHVtYkJvcmRlckNvbG91cixcbiAgY29tbW9uU2Nyb2xsYmFyVHJhY2tCYWNrZ3JvdW5kQ29sb3VyLFxuICBjb21tb25TY3JvbGxiYXJUaHVtYkJhY2tncm91bmRDb2xvdXIsXG4gIGdseXBoQ29sb3VyLFxuICBjbGVhckNvbnNvbGVGaWxsLFxuICBleHBhbmRlZEdseXBoQ29sb3VyLFxuICBzaG93UmVsZWFzZXNDcm9zc0ZpbGwsXG4gIGhpZGVSZWxlYXNlc0Nyb3NzRmlsbCxcbiAgdG9vbHRpcEJhY2tncm91bmRDb2xvdXJcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNvbW1vbkJvcmRlckNvbG91ciB9IGZyb20gXCIuLi9zY2hlbWUvY29tbW9uXCI7XG5cbmltcG9ydCB7IGRhd24sIHR1YXRhcmEsIGJvbmpvdXIsIHN0YXJkdXN0LCBzdG9ybUR1c3QsIHdvb2RzbW9rZSwgc25vd1doaXRlIH0gZnJvbSBcIi4uL2NvbG91cnNcIjtcblxuZXhwb3J0IGNvbnN0IGJvcmRlckNvbG91ciA9IGNvbW1vbkJvcmRlckNvbG91cjsgLy8vXG5cbmV4cG9ydCBjb25zdCB0YWJzQm9yZGVyQ29sb3VyID0gY29tbW9uQm9yZGVyQ29sb3VyOyAvLy9cblxuZXhwb3J0IGNvbnN0IHRhYnNSZWFkT25seUNvbG91ciA9IHR1YXRhcmE7XG5cbmV4cG9ydCBjb25zdCB0YWJzQmFja2dyb3VuZENvbG91ciA9IGRhd247XG5cbmV4cG9ydCBjb25zdCB0YWJzQXJyb3dCdXR0b25Db2xvdXIgPSB3b29kc21va2U7XG5cbmV4cG9ydCBjb25zdCB0YWJzQWN0aXZlQmFja2dyb3VuZENvbG91ciA9IHN0YXJkdXN0O1xuXG5leHBvcnQgY29uc3QgbWVudUJ1dHRvbkJhY2tncm91bmRDb2xvdXIgPSBzdG9ybUR1c3Q7XG5cbmV4cG9ydCBjb25zdCBtZW51QnV0dG9uSG92ZXJCYWNrZ3JvdW5kQ29sb3VyID0gc3RhcmR1c3Q7XG5cbmV4cG9ydCBjb25zdCBtZW51QnV0dG9uUHJldmlld0JhY2tncm91bmRDb2xvdXIgPSBzbm93V2hpdGU7XG5cbmV4cG9ydCBjb25zdCBtZW51QnV0dG9uSG92ZXJQcmV2aWV3QmFja2dyb3VuZENvbG91ciA9IGJvbmpvdXI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgYm9yZGVyQ29sb3VyLFxuICB0YWJzQm9yZGVyQ29sb3VyLFxuICB0YWJzUmVhZE9ubHlDb2xvdXIsXG4gIHRhYnNCYWNrZ3JvdW5kQ29sb3VyLFxuICB0YWJzQXJyb3dCdXR0b25Db2xvdXIsXG4gIHRhYnNBY3RpdmVCYWNrZ3JvdW5kQ29sb3VyLFxuICBtZW51QnV0dG9uQmFja2dyb3VuZENvbG91cixcbiAgbWVudUJ1dHRvbkhvdmVyQmFja2dyb3VuZENvbG91cixcbiAgbWVudUJ1dHRvblByZXZpZXdCYWNrZ3JvdW5kQ29sb3VyLFxuICBtZW51QnV0dG9uSG92ZXJQcmV2aWV3QmFja2dyb3VuZENvbG91clxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY29tbW9uQm9yZGVyQ29sb3VyIH0gZnJvbSBcIi4uL3NjaGVtZS9jb21tb25cIjtcblxuaW1wb3J0IHsgZ2FpbnNib3JvdWdoLCBodW50ZXJHcmVlbiB9IGZyb20gXCIuLi9jb2xvdXJzXCI7XG5cbmNvbnN0IGNvbnNvbGVDb2xvdXIgPSAgZ2FpbnNib3JvdWdoO1xuXG5jb25zdCBjb25zb2xlQm9yZGVyQ29sb3VyID0gIGNvbW1vbkJvcmRlckNvbG91cjsgIC8vL1xuXG5jb25zdCBjb25zb2xlQmFja2dyb3VuZENvbG91ciA9ICBodW50ZXJHcmVlbjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb25zb2xlQ29sb3VyLFxuICBjb25zb2xlQm9yZGVyQ29sb3VyLFxuICBjb25zb2xlQmFja2dyb3VuZENvbG91clxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3ByaW5nV29vZCwgd29vZHNtb2tlIH0gZnJvbSBcIi4uL2NvbG91cnNcIjtcblxuZXhwb3J0IGNvbnN0IGNvbG91ciA9IHdvb2RzbW9rZTtcblxuZXhwb3J0IGNvbnN0IGJhY2tncm91bmRDb2xvdXIgPSBzcHJpbmdXb29kO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbG91cixcbiAgYmFja2dyb3VuZENvbG91clxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsga29ybWEsIHBhYmxvLCBib25qb3VyLCBsb2dDYWJpbiwgc3Rvcm1EdXN0LCB3b29kc21va2UsIGh1cnJpY2FuZSwgYmxhY2tPbGl2ZSwgc3ByaW5nV29vZCB9IGZyb20gXCIuLi9jb2xvdXJzXCI7XG5cbmV4cG9ydCBjb25zdCBmb2xkRmlsbCA9IHdvb2RzbW9rZTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdGVkQ29sb3VyID0gc3ByaW5nV29vZDtcblxuZXhwb3J0IGNvbnN0IGZvbGRCdXR0b25TdHJva2UgPSBwYWJsbztcblxuZXhwb3J0IGNvbnN0IGJhY2tncm91bmRDb2xvdXIgPSB3b29kc21va2U7XG5cbmV4cG9ydCBjb25zdCBsaW5lTnVtYmVyc0NvbG91ciA9IHN0b3JtRHVzdDtcblxuZXhwb3J0IGNvbnN0IGZvbGRCdXR0b25Ib3ZlclN0cm9rZSA9IGh1cnJpY2FuZTtcblxuZXhwb3J0IGNvbnN0IGNhcmV0QmFja2dyb3VuZENvbG91ciA9IGJvbmpvdXI7XG5cbmV4cG9ydCBjb25zdCBndXR0ZXJCYWNrZ3JvdW5kQ29sb3VyID0gYmxhY2tPbGl2ZTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdGlvbkJhY2tncm91bmRDb2xvdXIgPSBrb3JtYTtcblxuZXhwb3J0IGNvbnN0IHNjcm9sbGJhclRodW1iQmFja2dyb3VuZENvbG91ciA9IHN0b3JtRHVzdDtcblxuZXhwb3J0IGNvbnN0IHJlbW90ZVNlbGVjdGlvbnNCYWNrZ3JvdW5kQ29sb3VyID0gbG9nQ2FiaW47XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZm9sZEZpbGwsXG4gIHNlbGVjdGVkQ29sb3VyLFxuICBmb2xkQnV0dG9uU3Ryb2tlLFxuICBiYWNrZ3JvdW5kQ29sb3VyLFxuICBsaW5lTnVtYmVyc0NvbG91cixcbiAgY2FyZXRCYWNrZ3JvdW5kQ29sb3VyLFxuICBmb2xkQnV0dG9uSG92ZXJTdHJva2UsXG4gIGd1dHRlckJhY2tncm91bmRDb2xvdXIsXG4gIHNlbGVjdGlvbkJhY2tncm91bmRDb2xvdXIsXG4gIHNjcm9sbGJhclRodW1iQmFja2dyb3VuZENvbG91cixcbiAgcmVtb3RlU2VsZWN0aW9uc0JhY2tncm91bmRDb2xvdXJcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNvbW1vbkJvcmRlckNvbG91ciB9IGZyb20gXCIuLi9zY2hlbWUvY29tbW9uXCI7XG5cbmltcG9ydCB7IGtvcm1hLCBib25qb3VyLCBodW50ZXJHcmVlbiwgZ2FpbnNib3JvdWdoIH0gZnJvbSBcIi4uL2NvbG91cnNcIjtcblxuZXhwb3J0IGNvbnN0IGxpbmtDb2xvdXIgPSBnYWluc2Jvcm91Z2g7XG5cbmV4cG9ydCBjb25zdCBib3JkZXJDb2xvdXIgPSBjb21tb25Cb3JkZXJDb2xvdXI7IC8vL1xuXG5leHBvcnQgY29uc3QgaGVhZGluZ0NvbG91ciA9IGdhaW5zYm9yb3VnaDtcblxuZXhwb3J0IGNvbnN0IGxvZ29GaWxsQ29sb3VyID0gaHVudGVyR3JlZW47XG5cbmV4cG9ydCBjb25zdCBiYWNrZ3JvdW5kQ29sb3VyID0gaHVudGVyR3JlZW47XG5cbmV4cG9ydCBjb25zdCBidWxsZXRQb2ludENvbG91ciA9IGtvcm1hO1xuXG5leHBvcnQgY29uc3QgbG9nb0JhY2tncm91bmRDb2xvdXIgPSBib25qb3VyO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGxpbmtDb2xvdXIsXG4gIGJvcmRlckNvbG91cixcbiAgaGVhZGluZ0NvbG91cixcbiAgbG9nb0ZpbGxDb2xvdXIsXG4gIGJhY2tncm91bmRDb2xvdXIsXG4gIGJ1bGxldFBvaW50Q29sb3VyLFxuICBsb2dvQmFja2dyb3VuZENvbG91clxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgbG9nb1NWR1dpZHRoIH0gZnJvbSBcIi4uL3N0eWxlc1wiO1xuXG5jb25zdCBMb2dvU1ZHID0gKHByb3BlcnRpZXMpID0+IHtcbiAgY29uc3QgeyBjbGFzc05hbWUgfSA9IHByb3BlcnRpZXM7XG5cbiAgcmV0dXJuIChcblxuICAgIDxzdmcgd2lkdGg9XCIxOTVcIiBoZWlnaHQ9XCIxOTVcIiB2aWV3Qm94PVwiMCAwIDE5NSAxOTVcIiBjbGFzc05hbWU9e2Ake2NsYXNzTmFtZX0gbG9nb2B9PlxuICAgICAgPGcgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAsIDE5NSkgc2NhbGUoMC4xLC0wLjEpXCI+XG4gICAgICAgIDxwYXRoIGQ9XCJNIDAsOTc1IFYgMCBoIDk3NSA5NzUgdiA5NzUgOTc1IEggOTc1IDAgWiBtIDE5NSw5MTUgYyAyOCwtMTAgODIsLTMxIDEyMCwtNDYgNjMsLTI1IDgyLC0yOCAxODUsLTI4IDkyLDEgMTI3LDUgMTc0LDIyIDMzLDEyIDYxLDIyIDYzLDIyIDgsMCAtMTAxLC0xMDMgLTE0NSwtMTM4IC0zOCwtMzEgLTQzLC0zMiAtNDksLTE1IC0yMCw1MiAtNzYsNzggLTEzNCw2MyAtMjEsLTYgLTQxLC0xNSAtNDUsLTIxIC0zLC02IDE0LC0zMCAzOSwtNTIgbCA0NSwtNDIgLTE1LC01MyBjIC0xMywtNDIgLTE5LC01MiAtMzIsLTQ2IC05LDQgLTM3LDkgLTYzLDEyIGwgLTQ4LDQgdiA0OSBjIDAsNDUgLTIsNDkgLTI3LDU1IC0xNiw0IC0zOCwxNCAtNTAsMjIgLTM1LDIyIC01Myw5IC01MywtMzggMCwtMzYgNCwtNDMgMzUsLTYyIDM5LC0yMiAzOSwtMzQgNSwtOTMgLTksLTE2IC0zNywtNzggLTYwLC0xMzcgLTI0LC01OSAtNDUsLTEwNiAtNDcsLTEwNCAtMiwyIDIsMzcgOCw3NyAxMiw3OSA2LDM0NSAtMTEsNDU0IC01LDMzIC0xMSw2OSAtMTIsNzkgLTIsMTAgMywyMSAxMCwyMyA2LDMgMTIsLTMgMTIsLTEyIDAsLTMxIDMwLC03NSA1MSwtNzUgMTIsMCAyOSwtMTAgMzgsLTIxIDEwLC0xMiAyMywtMjAgMzAsLTE4IDksMyA0LDE1IC0xNSwzOSBsIC0yOSwzNSAyOCwtMTggYyAzMSwtMjAgNDcsLTE2IDI4LDcgLTEwLDEyIC05LDE0IDgsOSAxMiwtMyAyMSwtMSAyMSw1IDAsMTAgLTI5LDIzIC0xMDAsNDIgLTI1LDcgLTU0LDE2IC02NSwyMSAtMzMsMTUgNDQsLTIgMTAwLC0yMSB6IG0gMTA1NSwtOSBjIDk2LC0zOSAyNzksLTM5IDQ5MiwwIDM3LDcgNzEsMTAgNzUsNiA0LC00IC02LC0zMyAtMjEsLTY0IC01MywtMTA5IC02MCwtMTQwIC02MCwtMjc4IDAsLTE3MCAyNiwtMjg3IDgxLC0zNjcgMjAsLTI5IDI2LC01MiAyOSwtMTA1IGwgMywtNjggLTEwLDU0IGMgLTksNTQgLTQ0LDExMiAtNzcsMTMwIC0xMSw2IC0yOCw0MiAtNDIsODYgLTI3LDg1IC03NywxNTMgLTEzMCwxNzUgLTM2LDE1IC0zNywyMSAtOSw0NiA0MiwzOCA1OSw4OCA1OSwxNzMgMCw2NSAtMyw3OSAtMTQsNzUgLTE2LC02IC02NiwtMTIzIC02NiwtMTU0IDAsLTI3IC0xOCwtMjUgLTIyLDMgLTMsMjQgLTIyLDI3IC05MCwxMyAtMzgsLTcgLTM4LC03IC0zNywyNiAxLDU0IDEzLDcxIDc1LDEwMyAzNSwxOCA2MCwzOCA2Miw0OSA0LDE3IC0zLDE4IC0xMjAsMTIgLTY3LC00IC0xNTMsLTkgLTE5MCwtMTIgbCAtNjgsLTYgdiAyOSBjIDAsMjggLTQsMzEgLTc3LDUzIC04NCwyNCAtMTUzLDMwIC0xOTMsMTYgLTQwLC0xNCAtMTYsNCAyNywyMCA2MCwyMyAyNTIsMTMgMzIzLC0xNSB6IG0gLTEyMywtMTc1IGMgNDMsLTE2IDk0LC0zNyAxMTIsLTQ3IDE5LC0xMSA0NSwtMjUgNTgsLTMyIDE0LC04IDY0LC04MyAxMTIsLTEzMiAxMjcsLTEyNyAyMjcsLTI3OSAyMzgsLTQwMSBsIDYsLTU2IC00MywtNiBjIC01NCwtNyAtODAsLTMxIC04MCwtNzMgMCwtNDEgMjEsLTYyIDY5LC03MCBsIDM3LC02IC03LC01MSBDIDE2MDgsNjgzIDE1NDgsNTM0IDE0NzIsNDM4IDEzNTQsMjkwIDExMjYsMTk1IDg4OSwxOTUgNzc4LDE5NSA3MjEsMjExIDYyMCwyNzEgNTExLDMzNiA0MjIsNDMzIDM2Miw1NTIgMzA1LDY2NiAyNzMsNzY1IDI2OCw4NDAgbCAtMyw0OSA0Miw3IGMgNzUsMTQgODQsMjMgODEsODIgbCAtMyw1MiAtNTcsMyBjIC0zMiwyIC01OCw1IC01OCw3IDAsMjUgMzUsMTI4IDU0LDE3MyA2NywxNjYgMjQwLDM4NyAzOTYsNDY3IDgxLDQyIDEzNCw1NCAyMzEsNTUgODEsMCAxMDgsLTQgMTc2LC0yOSB6IE0gMTgyLDEwNTAgQyAyMDEsOTgzIDE5Niw5MDkgMTYxLDc3MyAxMjYsNjM1IDEyMyw1OTMgMTQ2LDUwOCBjIDgsLTMzIDEzLC02NSAxMSwtNzEgLTksLTIzIC00OCw4NCAtNTksMTYwIC0xMSw3NSAtMTAsODMgMjIsMjAzIDQwLDE1MCA0OSwyNDcgMjYsMjk1IC0yMSw0NCAtMjAsNTYgNCwyNSAxMCwtMTQgMjUsLTQ1IDMyLC03MCB6IE0gMTc5MSw4MjEgYyAxOSwtMTUgMjgsLTM2IDM4LC05NSAxNSwtODQgMTAsLTE2OSAtMTYsLTI3OCAtMTMsLTU0IC0xNCwtNzMgLTUsLTkzIDI2LC01NiAyMiwtNTggLTk2LC01MSBsIC0xMDksNyAtMjcsLTM2IGMgLTE2LC0yMCAtMjUsLTM5IC0yMSwtNDMgNCwtNCA0MywtOSA4NywtMTEgNjIsLTIgODEsLTcgODUsLTIwIDQsLTkgMTcsLTI5IDMwLC00NCAxNCwtMTggMjMsLTQyIDIzLC02MyAwLC0zMCAtNSwtMzcgLTMyLC00OCAtNDgsLTIxIC04MiwtNyAtODgsMzUgLTgsNTcgLTMzLDYzIC0yOTAsNjkgLTIxNSw1IC0yMjIsNiAtMTYzLDE4IDY5LDE0IDE1Miw0OSAyMTYsODkgMjMyLDE0OSA0MTUsMzU4IDM5Myw0NDcgLTMsMTQgLTI0LDQ2IC00Nyw3MiAtMzEsMzYgLTM3LDQ5IC0yNyw1NSAxOCwxMiAyMiwxMSA0OSwtMTAgeiBNIDIyMCw2MDAgYyA2OCwtNzMgNTYsLTIxOCAtMjcsLTMyNiBsIC0yNywtMzYgMjEsLTM5IGMgMjYsLTQ3IDIxLC01MiAtNywtNiAtMjcsNDQgLTI1LDEwMCA3LDE2NiAzMyw2OSA0NCwxODIgMjAsMjA5IC00OSw1NiAtMzcsODYgMTMsMzIgeiBNIDU3NSwyMTEgQyA1NzUsMTg5IDQyOSwxMTIgMzM5LDg1IDIyMCw1MCAxNTMsNTQgOTMsMTAxIGMgLTMwLDIyIC0xMCwzMSA0MywxOCAyMiwtNCA1OSwtOSA4MywtOSAzOSwwIDQyLDIgMzAsMTcgLTEyLDE0IC0xMCwxNCAxMywtMSAyMSwtMTMgMzgsLTE2IDY0LC0xMSA0MSw3IDEzNiw1NiAxNzgsOTIgMzAsMjUgNzEsMjggNzEsNCB6IG0gNzcsLTg3IGMgMzUsLTkgNzksLTI2IDk4LC0zOCAzMCwtMTggNDksLTIxIDEzNSwtMjAgOTIsMSA5NywwIDY1LC0xMiBDIDg4OSwzMiA3ODcsMzcgNzAyLDY2IDYzNCw5MCA2MTYsOTIgNTQwLDg2IDQ5Myw4MyA0NDQsNzggNDMwLDc0IGMgLTQzLC05IDI3LDI3IDkwLDQ3IDcwLDIyIDU4LDIyIDEzMiwzIHpcIiAvPlxuICAgICAgICA8cGF0aCBkPVwiTSA4MDYsMTY1MiBDIDcxMiwxNjE3IDY0OCwxNTU1IDYwNywxNDYwIDQzNCwxMDY1IDQ1OCw2NzQgNjczLDQwMCA3MTYsMzQ1IDgxMywyNzIgODY4LDI1NCBjIDQzLC0xNCAxNjAsLTYgMjIxLDE2IDcwLDI0IDE2MSwxMDEgMjE3LDE4MiA4MCwxMTcgMTEwLDI1MSAxMDEsNTIyIC04LDIyNiAtNDYsNDE4IC0xMTcsNTI3IC00OCw3MyAtODYsMTA0IC0xNzUsMTQ1IC01NywyNiAtNzUsMjkgLTE1NywyOCAtNzAsMCAtMTA4LC02IC0xNTIsLTIyIHogbSA4OSwtMTcyIGMgMiwtMTEgOSwtNTAgMTYsLTg3IDYsLTM4IDE1LC02OCAxOSwtNjggNCwwIDEzLDMzIDIwLDczIDcsMzkgMTQsNzUgMTcsODAgNywxMSA0MSwtMTEgNTksLTM4IDE1LC0yMyAxNSwtMjggMCwtNjUgLTksLTIyIC0xMywtNDAgLTksLTQwIDMsMCAyMSwxMiA0MCwyNiA2Niw1MCA5MCwtNiAyNiwtNjEgLTM2LC0zMiAtNDAsLTYzIC01LC0zNyAyNywyMCA5Niw1MiAxMTIsNTIgMTYsMCA4MCwtMTMxIDgwLC0xNjMgMCwtMzUgLTMwLC0zMSAtNzQsMTIgLTM4LDM4IC00Niw0MSAtOTQsNDEgLTkyLDAgLTEzMSwtMzQgLTE3NywtMTUyIC0yNSwtNjMgLTI1LC02MyAtMTksLTE4IDMsMjUgMTksNjkgMzUsOTcgMTYsMjkgMjksNTggMjksNjUgMCwxNyAtNDUsLTI4IC02NiwtNjggLTE4LC0zNCAtMzQsLTQ0IC0zNCwtMjIgMCwyNCAtNTUsODEgLTk2LDEwMCAtNDMsMTkgLTQ1LDE5IC04NywwIC0yOSwtMTMgLTQ4LC0zMCAtNTksLTUyIC0xOSwtMzkgLTMzLC0yNCAtMjQsMjUgNCwyMSAxOSw0NCAzOSw2MCAzMCwyNCAzMSwyNiAxNCwzOSAtMjIsMTcgLTE1LDU2IDEzLDc0IDIxLDEzIDQxLC0xIDEzNywtOTIgNDksLTQ2IDYzLC00NCAzNSw1IC0zMSw1NyAtNDYsMTA5IC0zMywxMjIgOCw4IDE0LDMgMjMsLTIxIDE1LC00MCAyNCwtNDAgMzIsLTEgMTAsNTEgNywxMDQgLTksMTUwIGwgLTE1LDQ0IDI1LC0zMCBjIDE0LC0xNiAyNywtMzkgMzAsLTUwIHogbSAxMzgsLTQwNiBjIDgsLTYyIC04LC0yNDAgLTI5LC0zMjggLTIzLC0xMDAgLTcwLC0xODUgLTE0OSwtMjY5IC02MSwtNjQgLTcxLC03MiAtNzEsLTUxIDAsMTMgMjEsNTYgNDcsOTYgMTAwLDE1MiAxNjYsMzQxIDE3Niw1MDEgMyw1NiA5LDEwMiAxMywxMDIgNCwwIDEwLC0yMyAxMywtNTEgeiBtIC0yODEsLTQ2IGMgMTMsLTM1IDQ1LC00NiA1MywtMTggMTcsNTIgMTQsNTAgMzUsMjkgMjMsLTIyIDQwLC0xMDIgNDAsLTE4MyAwLC03MSAtMTAsLTEzMiAtMjEsLTEyNiAtMTMsOCAtMjEsLTEzIC0xMSwtMzEgNiwtMTAgLTEsLTM0IC0yMCwtNzQgLTE1LC0zMyAtMjgsLTY3IC0yOCwtNzUgMCwtOSAtNywtMTggLTE1LC0yMSAtOCwtNCAtMTUsLTEwIC0xNSwtMTYgMCwtNSAtMTQsLTIzIC0zMSwtNDEgbCAtMzEsLTMyIDIxLDMwIGMgMjUsMzYgNDEsODUgNDEsMTc1IDAsNjIgLTIsNjkgLTM3LDExMCAtMjAsMjMgLTU0LDg1IC03NiwxMDEgbCAtMzksMjggNTEsLTYgYyA0NywtNSA1MSwtNCA0NSwxMyAtNywxOCAtNDIsNzMgLTU0LDg0IC0xNSwxNCAtNDIsNTAgLTM4LDUwIDMsMCAyMiwtMTMgNDMsLTMwIDIwLC0xNiA0MiwtMjcgNDcsLTI0IDYsNCA4LDMzIDYsNjYgLTQsNTIgLTMsNTggOSw0MiA3LC0xMCAxOSwtMzMgMjUsLTUxIHogbSA0MDYsLTcgYyAzNCwtMTggNzUsLTYyIDk2LC0xMDMgOSwtMTggMjAsLTMzIDIzLC0zMyA0LDAgMjAsMTIgMzUsMjcgNDMsNDEgMzYsMiAtOCwtNDcgLTM3LC00MCAtMzgsLTQ3IC0xOSwtMTA2IDUsLTE3IC0xLC0yNiAtMjksLTQzIC0zNywtMjMgLTQ3LC01NSAtMjIsLTY0IDIwLC04IDQ3LC02MiA0MCwtODEgLTMsLTggLTIxLC0yMCAtMzksLTI2IC0zNiwtMTIgLTQ1LC0yNiAtNDUsLTY4IHYgLTI3IGggLTk4IGMgLTEwMiwwIC0xMjgsLTkgLTIzMSwtNzcgLTE5LC0xMiAtMzEsLTE3IC0yNywtMTAgNCw3IDQ3LDM5IDk0LDcxIDkyLDYyIDE5MiwxNTAgMTkyLDE2OSAwLDE1IC0zMCwzIC0zMSwtMTIgLTEsLTIwIC0yMDMsLTE2NiAtMjMwLC0xNjYgLTMsMCAxMCwxNyAyOSwzOCAxOSwyMCA1MSw2MSA2OSw5MCAyNSwzOSA0MCw1MiA1OCw1MiAyMSwwIDI0LDYgMjksNDUgMywyNSA5LDY1IDEyLDkwIDYsNTUgMTksNjQgMzgsMjggbCAxNCwtMjggNiwyNSBjIDMsMTQgNyw1MiA4LDg0IDMsNjYgMjQsODkgMzQsMzcgNCwtMTcgMTEsLTMxIDE2LC0zMSAzMywwIDExLDEyMCAtMjksMTU1IC0zMiwyNyAtMjUsMzIgMTUsMTEgelwiIC8+XG4gICAgICA8L2c+XG4gICAgPC9zdmc+XG5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShMb2dvU1ZHKWBcblxuICAgd2lkdGg6ICR7bG9nb1NWR1dpZHRofTtcbiAgIGhlaWdodDogYXV0bztcbiAgIFxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5cbmNsYXNzIFNWRyBleHRlbmRzIEVsZW1lbnQge1xuICBzdGF0aWMgdGFnTmFtZSA9IFwic3ZnXCI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShTVkcpYFxuXG4gIHN0cm9rZTogbm9uZTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICBcbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCBTVkcgZnJvbSBcIi4uL3N2Z1wiO1xuXG5pbXBvcnQgeyBtYXJrZXJTVkdIZWlnaHQsIG1hcmtlclNWR01hcmdpbkxlZnQgfSBmcm9tIFwiLi4vc3R5bGVzXCI7XG5cbmNsYXNzIE1hcmtlclNWRyBleHRlbmRzIFNWRyB7XG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIChcblxuICAgICAgPGc+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCI0XCIgeD1cIjJcIiB5PVwiMTZcIiAvPlxuICAgICAgPC9nPlxuXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICB2aWV3Qm94OiBcIjAgMCAyNSAyNVwiLFxuICAgIGNsYXNzTmFtZTogXCJtYXJrZXJcIlxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoTWFya2VyU1ZHKWBcblxuICB3aWR0aDogYXV0bztcbiAgaGVpZ2h0OiAke21hcmtlclNWR0hlaWdodH07XG4gIG1hcmdpbi1sZWZ0OiAke21hcmtlclNWR01hcmdpbkxlZnR9O1xuICBcbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCBTVkcgZnJvbSBcIi4uL3N2Z1wiO1xuXG5pbXBvcnQgeyBuYW1lU1ZHSGVpZ2h0LCBuYW1lU1ZHTWFyZ2luQm90dG9tIH0gZnJvbSBcIi4uL3N0eWxlc1wiO1xuXG5jbGFzcyBOYW1lU1ZHIGV4dGVuZHMgU1ZHIHtcbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDE4XCIsXG4gICAgY2xhc3NOYW1lOiBcIm5hbWVcIlxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoTmFtZVNWRylgXG5cbiAgd2lkdGg6IGF1dG87XG4gIGhlaWdodDogJHtuYW1lU1ZHSGVpZ2h0fTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW4tYm90dG9tOiAke25hbWVTVkdNYXJnaW5Cb3R0b219O1xuICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xuICBcbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCBOYW1lU1ZHIGZyb20gXCIuLi8uLi9zdmcvbmFtZVwiO1xuXG5pbXBvcnQgeyBmaWxlTmFtZVNWR1BhZGRpbmdMZWZ0IH0gZnJvbSBcIi4uLy4uL3N0eWxlc1wiO1xuXG5jbGFzcyBGaWxlTmFtZVNWRyBleHRlbmRzIE5hbWVTVkcge1xuICBjaGlsZEVsZW1lbnRzKCkge1xuICAgIHJldHVybiAoXG5cbiAgICAgIDxnPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMlwiIHg9XCIyXCIgeT1cIjE2XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiN1wiIHg9XCIxNFwiIHk9XCI5XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiMTJcIiB4PVwiMlwiIHk9XCI0XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCI3XCIgaGVpZ2h0PVwiMlwiIHg9XCIyXCIgeT1cIjJcIiAvPlxuICAgICAgICA8cGF0aCBkPVwibSA5LDIgNyw3IGggLTcgelwiIC8+XG4gICAgICA8L2c+XG5cbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJmaWxlXCJcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKEZpbGVOYW1lU1ZHKWBcblxuICBwYWRkaW5nLWxlZnQ6ICR7ZmlsZU5hbWVTVkdQYWRkaW5nTGVmdH07XG4gIFxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IFNWRyBmcm9tIFwiLi4vc3ZnXCI7XG5cbmltcG9ydCB7IHRvZ2dsZVNWR0hlaWdodCB9IGZyb20gXCIuLi9zdHlsZXNcIjtcblxuY2xhc3MgVG9nZ2xlU1ZHIGV4dGVuZHMgU1ZHIHtcbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIHZpZXdCb3g6IFwiMCAtNSAyNSAyNVwiLCAgLy8vXG4gICAgY2xhc3NOYW1lOiBcInRvZ2dsZVwiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShUb2dnbGVTVkcpYFxuXG4gIHdpZHRoOiBhdXRvO1xuICBoZWlnaHQ6ICR7dG9nZ2xlU1ZHSGVpZ2h0fTtcbiAgXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVG9nZ2xlU1ZHIGZyb20gXCIuLi8uLi9zdmcvdG9nZ2xlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVwVG9nZ2xlU1ZHIGV4dGVuZHMgVG9nZ2xlU1ZHIHtcbiAgY2hpbGRFbGVtZW50cygpIHtcbiAgICByZXR1cm4gKFxuXG4gICAgICA8Zz5cbiAgICAgICAgPHBhdGggZD1cIk0gNi42MTQ1ODMxLDE4LjUyMDgzMyBWIDcuOTM3NTAwMSBMIDE3LjE5NzkxNiwxMy4yMjkxNjYgWlwiIC8+XG4gICAgICA8L2c+XG5cbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJ1cFwiXG4gIH07XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCBTVkcgZnJvbSBcIi4uL3N2Z1wiO1xuXG5pbXBvcnQgeyBmb2xkRmlsbCB9IGZyb20gXCIuLi9zY2hlbWUvcHJldHR5UHJpbnRlclwiO1xuXG5jbGFzcyBGb2xkU1ZHIGV4dGVuZHMgU1ZHIHtcbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJmb2xkXCJcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKEZvbGRTVkcpYFxuXG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgZmlsbDogJHtmb2xkRmlsbH07XG4gIHdpZHRoOiAxMDAlO1xuICBzdHJva2U6IGluaGVyaXQ7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgRm9sZFNWRyBmcm9tIFwiLi4vLi4vc3ZnL2ZvbGRcIjtcblxuY2xhc3MgRm9sZExpbmVTVkcgZXh0ZW5kcyBGb2xkU1ZHIHtcbiAgY2hpbGRFbGVtZW50cygpIHtcbiAgICByZXR1cm4gKFxuXG4gICAgICA8Zz5cbiAgICAgICAgPHBhdGggZD1cIk0gOCwwIFYgMTZcIiBzdHlsZT1cInN0cm9rZS13aWR0aDoyLjU7XCIvPlxuICAgICAgPC9nPlxuXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIGNsYXNzTmFtZTogXCJsaW5lXCIsXG4gICAgcHJlc2VydmVBc3BlY3RSYXRpbzogXCJub25lXCJcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKEZvbGRMaW5lU1ZHKWBcblxuICBoZWlnaHQ6IDEwMCU7XG4gIFxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNWRyBmcm9tIFwiLi4vc3ZnXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZvbnRTaXplU1ZHIGV4dGVuZHMgU1ZHIHtcbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIHZpZXdCb3g6IFwiMCAwIDI1IDI1XCIsXG4gICAgY2xhc3NOYW1lOiBcImZvbnQtc2l6ZVwiXG4gIH07XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBNZW51U1ZHIGZyb20gXCIuLi8uLi9zdmcvbWVudVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGbGlwTWVudVNWRyBleHRlbmRzIE1lbnVTVkcge1xuICBjaGlsZEVsZW1lbnRzKCkge1xuICAgIHJldHVybiAoXG5cbiAgICAgIDxnPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjExXCIgaGVpZ2h0PVwiM1wiIHg9XCI2XCIgeT1cIjE2XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMVwiIGhlaWdodD1cIjNcIiB4PVwiOFwiIHk9XCI2XCIgLz5cbiAgICAgICAgPHBhdGggZD1cIk0gOCwzLjUgNCw3LjUgOCwxMS41IFpcIiAvPlxuICAgICAgICA8cGF0aCBkPVwibSAxNywxMy41IDQsNCAtNCw0IGMgMCwtMC41IDAsLTggMCwtOCB6XCIgLz5cbiAgICAgIDwvZz5cblxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcImZsaXBcIlxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVG9nZ2xlU1ZHIGZyb20gXCIuLi8uLi9zdmcvdG9nZ2xlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvd25Ub2dnbGVTVkcgZXh0ZW5kcyBUb2dnbGVTVkcge1xuICBjaGlsZEVsZW1lbnRzKCkge1xuICAgIHJldHVybiAoXG5cbiAgICAgIDxnPlxuICAgICAgICA8cGF0aCBkPVwiTSA2LjYxNDU4MzIsNy45Mzc0OTk5IEggMTcuMTk3OTE2IEwgMTEuOTA2MjUsMTguNTIwODMzIFpcIiAvPlxuICAgICAgPC9nPlxuXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwiZG93blwiXG4gIH07XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBGb2xkU1ZHIGZyb20gXCIuLi8uLi9zdmcvZm9sZFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDbG9zZWRGb2xkU1ZHIGV4dGVuZHMgRm9sZFNWRyB7XG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIChcblxuICAgICAgPGc+XG4gICAgICAgIDxwYXRoIGQ9XCJNIDIuMDQ2NTEsMi4wNDY1MSBIIDEzLjk1MzQ4OCBWIDEzLjk1MzQ4NyBIIDIuMDQ2NTEgWlwiIHN0eWxlPVwic3Ryb2tlLXdpZHRoOjQ7cGFpbnQtb3JkZXI6bWFya2VycyBzdHJva2UgZmlsbDtzdHJva2UtbGluZWpvaW46cm91bmQ7XCIgLz5cbiAgICAgICAgPHBhdGggZD1cIk0gNy45OTk5OTk4LDMuOTk5OTk5OSBWIDEyXCIgc3R5bGU9XCJzdHJva2Utd2lkdGg6M1wiIC8+XG4gICAgICAgIDxwYXRoIGQ9XCJNIDMuOTk5OTk5OSw3Ljk5OTk5OTggSCAxMlwiIHN0eWxlPVwic3Ryb2tlLXdpZHRoOjNcIiAvPlxuICAgICAgPC9nPlxuXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIGNsYXNzTmFtZTogXCJjbG9zZWRcIlxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRm9sZFNWRyBmcm9tIFwiLi4vLi4vc3ZnL2ZvbGRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9wT3BlbkZvbGRTVkcgZXh0ZW5kcyBGb2xkU1ZHIHtcbiAgY2hpbGRFbGVtZW50cygpIHtcbiAgICByZXR1cm4gKFxuXG4gICAgICA8Zz5cbiAgICAgICAgPHBhdGggZD1cIk0gNy45OTk5OTc1LDEzLjU4OTA4OSAyLjA0MjE1MDUsNy44MTU2MTk5IGMgMCwwIDAsLTUuNzczNDY5NCAwLC01Ljc3MzQ2OTQgSCAxMy45NTc4NDkgdiA1Ljc3MzQ2OTQgelwiIHN0eWxlPVwic3Ryb2tlLXdpZHRoOjQ7cGFpbnQtb3JkZXI6bWFya2VycyBzdHJva2UgZmlsbDtzdHJva2UtbGluZWpvaW46cm91bmQ7XCIgLz5cbiAgICAgICAgPHBhdGggZD1cIk0gMy45OTk5OTk5LDQuOTk5OTk5OSBIIDEyXCIgc3R5bGU9XCJzdHJva2Utd2lkdGg6M1wiIC8+XG4gICAgICA8L2c+XG5cbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgY2xhc3NOYW1lOiBcInRvcC1vcGVuXCJcbiAgfTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5hbWVTVkcgZnJvbSBcIi4uLy4uL3N2Zy9uYW1lXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpcmVjdG9yeU5hbWVTVkcgZXh0ZW5kcyBOYW1lU1ZHIHtcbiAgY2hpbGRFbGVtZW50cygpIHtcbiAgICByZXR1cm4gKFxuXG4gICAgICA8Zz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjJcIiB4PVwiMFwiIHk9XCIxNlwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjdcIiB4PVwiMTRcIiB5PVwiOVwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjdcIiB4PVwiMFwiIHk9XCI5XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjJcIiB4PVwiMFwiIHk9XCI3XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCI3XCIgaGVpZ2h0PVwiM1wiIHg9XCIwXCIgeT1cIjRcIiAvPlxuICAgICAgICA8cGF0aCBkPVwibSA3LDQgMywzIEggNyBaXCIgLz5cbiAgICAgIDwvZz5cblxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcImRpcmVjdG9yeVwiXG4gIH07XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCBTVkcgZnJvbSBcIi4uL3N2Z1wiO1xuXG5pbXBvcnQgeyB0aXRsZVNWR0hlaWdodCB9IGZyb20gXCIuLi9zdHlsZXNcIjtcblxuY2xhc3MgVGl0bGVTVkcgZXh0ZW5kcyBTVkcge1xuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgdmlld0JveDogXCIwIDAgMjUgMjVcIixcbiAgICBjbGFzc05hbWU6IFwidGl0bGVcIlxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoVGl0bGVTVkcpYFxuXG4gIHRvcDogLTFweDtcbiAgcmlnaHQ6IDA7XG4gIHdpZHRoOiBhdXRvO1xuICBoZWlnaHQ6ICR7dGl0bGVTVkdIZWlnaHR9O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIFxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRpdGxlU1ZHIGZyb20gXCIuLi8uLi9zdmcvdGl0bGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXhwYW5kZWRUaXRsZVNWRyBleHRlbmRzIFRpdGxlU1ZHIHtcbiAgY2hpbGRFbGVtZW50cygpIHtcbiAgICByZXR1cm4gKFxuXG4gICAgICA8Zz5cbiAgICAgICAgPHBhdGggZD1cIk0gNi4wMDAxNTA2LDYuMDAwMTUwNiAxMi42MTQ3MzQsMTkuMjI5MzE3IDE5LjIyOTMxNyw2LjAwMDE1MDYgWiBtIDIuNDY2NTE2MSwxLjUwODQzNSBoIDguMjk1NjE3MyBsIC00LjE0NzU1LDguMjk2MTM0NCB6XCIgLz5cbiAgICAgIDwvZz5cblxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcImV4cGFuZGVkXCJcbiAgfTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRpdGxlU1ZHIGZyb20gXCIuLi8uLi9zdmcvdGl0bGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sbGFwc2VkVGl0bGVTVkcgZXh0ZW5kcyBUaXRsZVNWRyB7XG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIChcblxuICAgICAgPGc+XG4gICAgICAgIDxwYXRoIGQ9XCJNIDE5LjIyOTMxNyA2LjAwMDE1MDYgTCA2LjAwMDE1MDYgMTIuNjE0NzM0IEwgMTkuMjI5MzE3IDE5LjIyOTMxNyBMIDE5LjIyOTMxNyA2LjAwMDE1MDYgeiBNIDE3LjcyMDg4MiA4LjQ2NjY2NjcgTCAxNy43MjA4ODIgMTYuNzYyMjg0IEwgOS40MjQ3NDc3IDEyLjYxNDczNCBMIDE3LjcyMDg4MiA4LjQ2NjY2NjcgeiBcIiAvPlxuICAgICAgPC9nPlxuXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwiY29sbGFwc2VkXCJcbiAgfTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IEZvbGRTVkcgZnJvbSBcIi4uLy4uL3N2Zy9mb2xkXCI7XG5cbmNsYXNzIEJvdHRvbU9wZW5Gb2xkU1ZHIGV4dGVuZHMgRm9sZFNWRyB7XG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIChcblxuICAgICAgPGc+XG4gICAgICAgIDxwYXRoIGQ9XCJNIDcuOTk5OTk3MSwyLjg0MzY5ODcgMi4wNDIxNSw4LjYxNzE2NzcgYyAwLDAgMCw1Ljc3MzQ3MDMgMCw1Ljc3MzQ3MDMgSCAxMy45NTc4NDkgViA4LjYxNzE2NzcgWlwiIHN0eWxlPVwic3Ryb2tlLXdpZHRoOjQ7cGFpbnQtb3JkZXI6bWFya2VycyBzdHJva2UgZmlsbDtzdHJva2UtbGluZWpvaW46IHJvdW5kO1wiIC8+XG4gICAgICAgIDxwYXRoIGQ9XCJtIDQsMTEgaCA4XCIgc3R5bGU9XCJzdHJva2Utd2lkdGg6M1wiIC8+XG4gICAgICA8L2c+XG5cbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgY2xhc3NOYW1lOiBcImJvdHRvbS1vcGVuXCJcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKEJvdHRvbU9wZW5Gb2xkU1ZHKWBcblxuICB0b3A6IHVuc2V0O1xuICBib3R0b206IDA7XG4gICBcbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBNZW51U1ZHIGZyb20gXCIuLi8uLi9zdmcvbWVudVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbWJlZGRlZE1vZGVNZW51U1ZHIGV4dGVuZHMgTWVudVNWRyB7XG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIChcblxuICAgICAgPGc+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiNlwiIGhlaWdodD1cIjJcIiB4PVwiMTZcIiB5PVwiMTRcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMlwiIHg9XCI4XCIgeT1cIjNcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCI2XCIgeD1cIjhcIiB5PVwiNVwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjlcIiB4PVwiMjBcIiB5PVwiNVwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjEwXCIgeD1cIjNcIiB5PVwiMTJcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjhcIiBoZWlnaHQ9XCIyXCIgeD1cIjVcIiB5PVwiMjBcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCIxMFwiIHg9XCIxM1wiIHk9XCIxMlwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiOFwiIGhlaWdodD1cIjJcIiB4PVwiNVwiIHk9XCIxMlwiIC8+XG4gICAgICA8L2c+XG5cbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJlbWJlZGRlZC1tb2RlXCJcbiAgfTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IFNWRyBmcm9tIFwiLi4vc3ZnXCI7XG5cbmNsYXNzIFRvb2xiYXJTVkcgZXh0ZW5kcyBTVkcge1xuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgdmlld0JveDogXCIwIDAgMjUgMjVcIixcbiAgICBjbGFzc05hbWU6IFwidG9vbGJhclwiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShUb29sYmFyU1ZHKWBcblxuICB3aWR0aDogYXV0bztcbiAgaGVpZ2h0OiAxMDAlO1xuICBcbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUb29sYmFyU1ZHIGZyb20gXCIuLi8uLi9zdmcvdG9vbGJhclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBKb2luU2Vzc2lvblRvb2xiYXJTVkcgZXh0ZW5kcyBUb29sYmFyU1ZHIHtcbiAgY2hpbGRFbGVtZW50cygpIHtcbiAgICByZXR1cm4gKFxuXG4gICAgICA8Zz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIzXCIgaGVpZ2h0PVwiMlwiIHg9XCIzXCIgeT1cIjE3XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiNFwiIHg9XCIxM1wiIHk9XCIxMVwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjZcIiB4PVwiM1wiIHk9XCIxMVwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIyXCIgeD1cIjNcIiB5PVwiOVwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiNFwiIGhlaWdodD1cIjJcIiB4PVwiM1wiIHk9XCI3XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjJcIiB4PVwiNlwiIHk9XCIyM1wiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjZcIiB4PVwiMTZcIiB5PVwiMTdcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCI2XCIgeD1cIjZcIiB5PVwiMTdcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMlwiIHg9XCI2XCIgeT1cIjE1XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCI0XCIgaGVpZ2h0PVwiMlwiIHg9XCI2XCIgeT1cIjEzXCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCI2XCIgaGVpZ2h0PVwiMlwiIHg9XCIxN1wiIHk9XCI1XCIgLz5cbiAgICAgICAgPHBhdGggZD1cIk0gMTcsMyBWIDkgTCAxNCw2IFpcIiAvPlxuICAgICAgICA8cGF0aCBkPVwiTSA3LDcgOSw5IEggNyBaXCIgLz5cbiAgICAgICAgPHBhdGggZD1cIm0gMTAsMTMgMiwyIGggLTIgelwiIC8+XG4gICAgICA8L2c+XG5cbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJqb2luLXNlc3Npb25cIlxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVG9vbGJhclNWRyBmcm9tIFwiLi4vLi4vc3ZnL3Rvb2xiYXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3luY2hyb25pc2VUb29sYmFyU1ZHIGV4dGVuZHMgVG9vbGJhclNWRyB7XG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIChcblxuICAgICAgPGcgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAuNSwgMilcIj5cbiAgICAgICAgPHBhdGggZD1cIk0gNS4yOTE2NjY2LDEwLjU4MzMzMyBIIDE5Ljg0Mzc1IFYgNy45Mzc0OTk5IEggMTAuNTgzMzMzIFYgNS4yOTE2NjY2IFpcIiAvPlxuICAgICAgICA8cGF0aCBkPVwibSA1LjI5MTY2NjYsMTQuNTUyMDgzIGMgMCwwIDE0LjU1MjA4MzQsMCAxNC41NTIwODM0LDAgMCwwIC01LjI5MTY2Nyw1LjI5MTY2NyAtNS4yOTE2NjcsNS4yOTE2NjcgMCwwIDAsLTIuNjQ1ODM0IDAsLTIuNjQ1ODM0IEggNS4yOTE2NjY2IFpcIiAvPlxuICAgICAgPC9nPlxuXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwic3luY2hyb25pc2VcIlxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVG9vbGJhclNWRyBmcm9tIFwiLi4vLi4vc3ZnL3Rvb2xiYXJcIjtcblxuaW1wb3J0IHsgc2hvd1JlbGVhc2VzQ3Jvc3NGaWxsIH0gZnJvbSBcIi4uLy4uL3NjaGVtZS9jb21tb25cIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2hvd1JlbGVhc2VzVG9vbGJhclNWRyBleHRlbmRzIFRvb2xiYXJTVkcge1xuICBjaGlsZEVsZW1lbnRzKCkge1xuICAgIHJldHVybiAoXG5cbiAgICAgIDxnPlxuICAgICAgICA8ZyBmaWxsPXtgJHtzaG93UmVsZWFzZXNDcm9zc0ZpbGx9YH0gdHJhbnNmb3JtPVwidHJhbnNsYXRlKDcsIDMpIHJvdGF0ZSg0NSlcIj5cbiAgICAgICAgICA8cmVjdCB3aWR0aD1cIjNcIiBoZWlnaHQ9XCIyXCIgeD1cIi0xXCIgeT1cIjNcIiAvPlxuICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjhcIiB4PVwiMlwiIHk9XCItM1wiIC8+XG4gICAgICAgIDwvZz5cbiAgICAgICAgPGcgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDMsIDcpXCI+XG4gICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjJcIiB4PVwiMFwiIHk9XCIxNlwiIC8+XG4gICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiM1wiIHg9XCIxNFwiIHk9XCIxM1wiIC8+XG4gICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiM1wiIHg9XCIxMlwiIHk9XCI2XCIgLz5cbiAgICAgICAgICA8cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCIzXCIgeD1cIjE4XCIgeT1cIjZcIiAvPlxuICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjdcIiB4PVwiMFwiIHk9XCI5XCIgLz5cbiAgICAgICAgICA8cmVjdCB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMlwiIHg9XCIwXCIgeT1cIjdcIiAvPlxuICAgICAgICAgIDxyZWN0IHdpZHRoPVwiN1wiIGhlaWdodD1cIjNcIiB4PVwiMFwiIHk9XCI0XCIgLz5cbiAgICAgICAgICA8cGF0aCBkPVwibSA3LDQgMywzIEggNyBaXCIgLz5cbiAgICAgICAgICA8cGF0aCBkPVwibSAxNS45NjYwNDgsMS4wMDAwMDA1IGEgMy4xMTExMTAzLDMuNDk5OTk5NSAwIDAgMCAtMy4wNzcxNTksMy4wMDAzMzM3IGggMS4zNTc4MjYgYSAxLjc3Nzc3NzQsMS45OTk5OTk2IDAgMCAxIDEuNzE5MzMzLC0xLjUwMDE2NjkgMS43Nzc3Nzc0LDEuOTk5OTk5NiAwIDAgMSAxLjcxODg3MiwxLjUwMDE2NjkgaCAxLjM2MDEyNCBBIDMuMTExMTEwMywzLjQ5OTk5OTUgMCAwIDAgMTUuOTY2MDQ4LDEuMDAwMDAwNSBaXCIgLz5cbiAgICAgICAgICA8cmVjdCB3aWR0aD1cIjcuOTk5OTk5NVwiIGhlaWdodD1cIjEuOTk5OTk5NVwiIHg9XCIxMi4wMDAwMDFcIiB5PVwiMy45OTk5OTk4XCIgLz5cbiAgICAgICAgICA8cmVjdCB3aWR0aD1cIjcuOTk5OTk5NVwiIGhlaWdodD1cIjEuOTk5OTk5NVwiIHg9XCIxMi4wMDAwMDFcIiB5PVwiOS4wMDAwMDFcIiAvPlxuICAgICAgICA8L2c+XG4gICAgICA8L2c+XG5cbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJzaG93LXJlbGVhc2VzXCJcbiAgfTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRvb2xiYXJTVkcgZnJvbSBcIi4uLy4uL3N2Zy90b29sYmFyXCI7XG5cbmltcG9ydCB7IGhpZGVSZWxlYXNlc0Nyb3NzRmlsbCB9IGZyb20gXCIuLi8uLi9zY2hlbWUvY29tbW9uXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhpZGVSZWxlYXNlc1Rvb2xiYXJTVkcgZXh0ZW5kcyBUb29sYmFyU1ZHIHtcbiAgY2hpbGRFbGVtZW50cygpIHtcbiAgICByZXR1cm4gKFxuXG4gICAgICA8Zz5cbiAgICAgICAgPGcgZmlsbD17YCR7aGlkZVJlbGVhc2VzQ3Jvc3NGaWxsfWB9IHRyYW5zZm9ybT1cInRyYW5zbGF0ZSg2LCA0KSByb3RhdGUoNDUpXCI+XG4gICAgICAgICAgPHJlY3Qgd2lkdGg9XCI4XCIgaGVpZ2h0PVwiMlwiIHg9XCItM1wiIHk9XCIwXCIgLz5cbiAgICAgICAgICA8cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCI4XCIgeD1cIjBcIiB5PVwiLTNcIiAvPlxuICAgICAgICA8L2c+XG4gICAgICAgIDxnIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgzLCA3KVwiPlxuICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIyXCIgeD1cIjBcIiB5PVwiMTZcIiAvPlxuICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjNcIiB4PVwiMTRcIiB5PVwiMTNcIiAvPlxuICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjNcIiB4PVwiMTJcIiB5PVwiNlwiIC8+XG4gICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiM1wiIHg9XCIxOFwiIHk9XCI2XCIgLz5cbiAgICAgICAgICA8cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCI3XCIgeD1cIjBcIiB5PVwiOVwiIC8+XG4gICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjJcIiB4PVwiMFwiIHk9XCI3XCIgLz5cbiAgICAgICAgICA8cmVjdCB3aWR0aD1cIjdcIiBoZWlnaHQ9XCIzXCIgeD1cIjBcIiB5PVwiNFwiIC8+XG4gICAgICAgICAgPHBhdGggZD1cIm0gNyw0IDMsMyBIIDcgWlwiIC8+XG4gICAgICAgICAgPHBhdGggZD1cIm0gMTUuOTY2MDQ4LDEuMDAwMDAwNSBhIDMuMTExMTEwMywzLjQ5OTk5OTUgMCAwIDAgLTMuMDc3MTU5LDMuMDAwMzMzNyBoIDEuMzU3ODI2IGEgMS43Nzc3Nzc0LDEuOTk5OTk5NiAwIDAgMSAxLjcxOTMzMywtMS41MDAxNjY5IDEuNzc3Nzc3NCwxLjk5OTk5OTYgMCAwIDEgMS43MTg4NzIsMS41MDAxNjY5IGggMS4zNjAxMjQgQSAzLjExMTExMDMsMy40OTk5OTk1IDAgMCAwIDE1Ljk2NjA0OCwxLjAwMDAwMDUgWlwiIC8+XG4gICAgICAgICAgPHJlY3Qgd2lkdGg9XCI3Ljk5OTk5OTVcIiBoZWlnaHQ9XCIxLjk5OTk5OTVcIiB4PVwiMTIuMDAwMDAxXCIgeT1cIjMuOTk5OTk5OFwiIC8+XG4gICAgICAgICAgPHJlY3Qgd2lkdGg9XCI3Ljk5OTk5OTVcIiBoZWlnaHQ9XCIxLjk5OTk5OTVcIiB4PVwiMTIuMDAwMDAxXCIgeT1cIjkuMDAwMDAxXCIgLz5cbiAgICAgICAgPC9nPlxuICAgICAgPC9nPlxuXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwiaGlkZS1yZWxlYXNlc1wiXG4gIH07XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUb29sYmFyU1ZHIGZyb20gXCIuLi8uLi9zdmcvdG9vbGJhclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMZWF2ZVNlc3Npb25Ub29sYmFyU1ZHIGV4dGVuZHMgVG9vbGJhclNWRyB7XG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIChcblxuICAgICAgPGc+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiM1wiIGhlaWdodD1cIjJcIiB4PVwiM1wiIHk9XCIxN1wiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjRcIiB4PVwiMTNcIiB5PVwiMTFcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCI2XCIgeD1cIjNcIiB5PVwiMTFcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMlwiIHg9XCIzXCIgeT1cIjlcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjRcIiBoZWlnaHQ9XCIyXCIgeD1cIjNcIiB5PVwiN1wiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIyXCIgeD1cIjZcIiB5PVwiMjNcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCI2XCIgeD1cIjE2XCIgeT1cIjE3XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiNlwiIHg9XCI2XCIgeT1cIjE3XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjJcIiB4PVwiNlwiIHk9XCIxNVwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiNFwiIGhlaWdodD1cIjJcIiB4PVwiNlwiIHk9XCIxM1wiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiNlwiIGhlaWdodD1cIjJcIiB4PVwiMTRcIiB5PVwiNVwiIC8+XG4gICAgICAgIDxwYXRoIGQ9XCJNIDcsNyA5LDkgSCA3IFpcIiAvPlxuICAgICAgICA8cGF0aCBkPVwibSAxMCwxMyAyLDIgaCAtMiB6XCIgLz5cbiAgICAgICAgPHBhdGggZD1cIm0gMjAsMyB2IDYgbCAzLC0zIHpcIi8+XG4gICAgICA8L2c+XG5cbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJsZWF2ZS1zZXNzaW9uXCJcbiAgfTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRvb2xiYXJTVkcgZnJvbSBcIi4uLy4uL3N2Zy90b29sYmFyXCI7XG5cbmltcG9ydCB7IGNsZWFyQ29uc29sZUZpbGwgfSBmcm9tIFwiLi4vLi4vc2NoZW1lL2NvbW1vblwiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENsZWFyQ29uc29sZVRvb2xiYXJTVkcgZXh0ZW5kcyBUb29sYmFyU1ZHIHtcbiAgY2hpbGRFbGVtZW50cygpIHtcbiAgICByZXR1cm4gKFxuXG4gICAgICA8ZyBmaWxsPXtgJHtjbGVhckNvbnNvbGVGaWxsfWB9IHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgwLCAwLjI1KVwiPlxuICAgICAgICA8cGF0aCBkPVwibSAxOS4yMTcyNjIsNS43ODIyNzY1IGEgOS40OTk4OTQ1LDkuNDk5ODk0MiAwIDAgMCAtMTMuNDM0OTg3MSw0LjYzNmUtNCA5LjQ5OTg5NDUsOS40OTk4OTQyIDAgMCAwIDVlLTcsMTMuNDM0NTE5OSA5LjQ5OTg5NDUsOS40OTk4OTQyIDAgMCAwIDEzLjQzNDk4NjYsNC42NGUtNCA5LjQ5OTg5NDUsOS40OTk4OTQyIDAgMCAwIDAsLTEzLjQzNTQ0NzUgeiBtIC0wLjk3NzUyOSwyLjc2OTY2MDggYSA2Ljk2NjU4OTMsNi45NjY1ODkyIDAgMCAxIC0wLjgxMzY4MSw4Ljg3NDU3NzcgNi45NjY1ODkzLDYuOTY2NTg5MiAwIDAgMSAtOC44NzI3MjczLDAuODExODMgeiBNIDE2LjQ0NjY3NCw2Ljc2MTY1NTYgNi43NjE2NTQyLDE2LjQ0NjY3NSBBIDYuOTY2NTg5Myw2Ljk2NjU4OTIgMCAwIDEgNy41NzM0ODI5LDcuNTczOTQ3NCA2Ljk2NjU4OTMsNi45NjY1ODkyIDAgMCAxIDE2LjQ0NjY3NCw2Ljc2MTY1NTYgWlwiIC8+XG4gICAgICA8L2c+XG5cbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJjbGVhci1jb25zb2xlXCJcbiAgfTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRvb2xiYXJTVkcgZnJvbSBcIi4uLy4uL3N2Zy90b29sYmFyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENyZWF0ZVNlc3Npb25Ub29sYmFyU1ZHIGV4dGVuZHMgVG9vbGJhclNWRyB7XG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIChcblxuICAgICAgPGc+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiM1wiIGhlaWdodD1cIjJcIiB4PVwiM1wiIHk9XCIxN1wiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjRcIiB4PVwiMTNcIiB5PVwiMTFcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCI2XCIgeD1cIjNcIiB5PVwiMTFcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMlwiIHg9XCIzXCIgeT1cIjlcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjRcIiBoZWlnaHQ9XCIyXCIgeD1cIjNcIiB5PVwiN1wiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIyXCIgeD1cIjZcIiB5PVwiMjNcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCI2XCIgeD1cIjE2XCIgeT1cIjE3XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiNlwiIHg9XCI2XCIgeT1cIjE3XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjJcIiB4PVwiNlwiIHk9XCIxNVwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiNFwiIGhlaWdodD1cIjJcIiB4PVwiNlwiIHk9XCIxM1wiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiOFwiIGhlaWdodD1cIjJcIiB4PVwiMTVcIiB5PVwiNVwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjhcIiB4PVwiMThcIiB5PVwiMlwiIC8+XG4gICAgICAgIDxwYXRoIGQ9XCJNIDcsNyA5LDkgSCA3IFpcIi8+XG4gICAgICAgIDxwYXRoIGQ9XCJtIDEwLDEzIDIsMiBoIC0yIHpcIiAvPlxuICAgICAgPC9nPlxuXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwiY3JlYXRlLXNlc3Npb25cIlxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGlyZWN0b3J5TmFtZVNWRyBmcm9tIFwiLi4vLi4vLi4vc3ZnL25hbWUvZGlyZWN0b3J5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlbGVhc2VEaXJlY3RvcnlOYW1lU1ZHIGV4dGVuZHMgRGlyZWN0b3J5TmFtZVNWRyB7XG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIChcblxuICAgICAgPGc+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIyXCIgeD1cIjBcIiB5PVwiMTZcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCIzXCIgeD1cIjE0XCIgeT1cIjEzXCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiM1wiIHg9XCIxMlwiIHk9XCI2XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiM1wiIHg9XCIxOFwiIHk9XCI2XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiN1wiIHg9XCIwXCIgeT1cIjlcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMlwiIHg9XCIwXCIgeT1cIjdcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjdcIiBoZWlnaHQ9XCIzXCIgeD1cIjBcIiB5PVwiNFwiIC8+XG4gICAgICAgIDxwYXRoIGQ9XCJtIDcsNCAzLDMgSCA3IFpcIiAvPlxuICAgICAgICA8cGF0aCBkPVwibSAxNS45NjYwNDgsMS4wMDAwMDA1IGEgMy4xMTExMTAzLDMuNDk5OTk5NSAwIDAgMCAtMy4wNzcxNTksMy4wMDAzMzM3IGggMS4zNTc4MjYgYSAxLjc3Nzc3NzQsMS45OTk5OTk2IDAgMCAxIDEuNzE5MzMzLC0xLjUwMDE2NjkgMS43Nzc3Nzc0LDEuOTk5OTk5NiAwIDAgMSAxLjcxODg3MiwxLjUwMDE2NjkgaCAxLjM2MDEyNCBBIDMuMTExMTEwMywzLjQ5OTk5OTUgMCAwIDAgMTUuOTY2MDQ4LDEuMDAwMDAwNSBaXCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCI3Ljk5OTk5OTVcIiBoZWlnaHQ9XCIxLjk5OTk5OTVcIiB4PVwiMTIuMDAwMDAxXCIgeT1cIjMuOTk5OTk5OFwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiNy45OTk5OTk1XCIgaGVpZ2h0PVwiMS45OTk5OTk1XCIgeD1cIjEyLjAwMDAwMVwiIHk9XCI5LjAwMDAwMVwiIC8+XG4gICAgICA8L2c+XG5cbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJyZWxlYXNlXCJcbiAgfTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE1lbnVTVkcgZnJvbSBcIi4uLy4uL3N2Zy9tZW51XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByZXNlbnRhdGlvbk1vZGVNZW51U1ZHIGV4dGVuZHMgTWVudVNWRyB7XG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIChcblxuICAgICAgPGc+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIyXCIgeD1cIjhcIiB5PVwiMTRcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMlwiIHg9XCI4XCIgeT1cIjNcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCI5XCIgeD1cIjhcIiB5PVwiNVwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjlcIiB4PVwiMjBcIiB5PVwiNVwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjEwXCIgeD1cIjNcIiB5PVwiMTJcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjhcIiBoZWlnaHQ9XCIyXCIgeD1cIjVcIiB5PVwiMjBcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCI1XCIgeD1cIjEzXCIgeT1cIjE3XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiMlwiIHg9XCI1XCIgeT1cIjEyXCIgLz5cbiAgICAgIDwvZz5cblxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcInByZXNlbnRhdGlvbi1tb2RlXCJcbiAgfTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE1lbnVTVkcgZnJvbSBcIi4uLy4uL3N2Zy9tZW51XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlY3JlYXNlRm9udFNpemVNZW51U1ZHIGV4dGVuZHMgTWVudVNWRyB7XG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIChcblxuICAgICAgPGc+XG4gICAgICAgIDxnIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgxLCAxKSBzY2FsZSgwLjksIDAuOSlcIj5cbiAgICAgICAgICA8cGF0aCBkPVwiTSA3LjQxMzAzODYsMjMuNDc4MjM5IEggMi4wMDAwMDI4IGwgMC4xNTIxNzM3LC0wLjgyNjA4NiBxIDAuMzkxMzAzOCwtMC4yMTczOTEgMC44MjYwODU4LC0wLjM2OTU2NCAwLjQzNDc4MiwtMC4xNzM5MTMgMC44Njk1NjQsLTAuMjYwODcgTCAxMi40NTY1MSw4LjAwMDAwMDIgaCAxLjU4Njk1NCBsIDIuNDU2NTE4LDE0LjAyMTcxODggcSAwLjQxMzA0MywwLjA4Njk2IDAuODA0MzQ3LDAuMjYwODcgMC40MTMwNDMsMC4xNzM5MTIgMC42OTU2NTEsMC4zNjk1NjQgbCAtMC4xNzM5MTMsMC44MjYwODYgaCAtNi42OTU2NDIgbCAwLjE1MjE3MywtMC44MjYwODYgcSAwLjQ1NjUyMSwtMC4yMTczOTEgMC45NTY1MjEsLTAuMzY5NTY0IDAuNTIxNzM4LC0wLjE3MzkxMyAwLjk3ODI1OSwtMC4yNjA4NyBMIDEyLjY5NTY0LDE4LjU2NTIwMyBIIDcuODkxMjk4OCBsIC0yLjA2NTIxNDUsMy40NTY1MTYgcSAwLjQ1NjUyMTEsMC4wNjUyMiAwLjkxMzA0MjIsMC4yMzkxMyAwLjQ1NjUyMTEsMC4xNTIxNzQgMC44MjYwODU4LDAuMzkxMzA0IHogbSAxLjIxNzM4OTYsLTYuMzI2MDc4IGggMy44OTEyOTg4IGwgLTAuNjA4Njk1LC00LjE1MjE2OCB2IC0xLjg2OTU2MiBoIC0wLjA0MzQ4IGwgLTAuODI2MDg2LDEuOTEzMDQgelwiIC8+XG4gICAgICAgICAgPHJlY3Qgd2lkdGg9XCI4XCIgaGVpZ2h0PVwiMlwiIHg9XCIxNVwiIHk9XCI1XCIgLz5cbiAgICAgICAgPC9nPlxuICAgICAgPC9nPlxuXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwiZGVjcmVhc2UtZm9udC1zaXplXCJcbiAgfTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE1lbnVTVkcgZnJvbSBcIi4uLy4uL3N2Zy9tZW51XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluY3JlYXNlRm9udFNpemVNZW51U1ZHIGV4dGVuZHMgTWVudVNWRyB7XG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIChcblxuICAgICAgPGc+XG4gICAgICAgIDxnIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgxLCAxKSBzY2FsZSgwLjksIDAuOSlcIj5cbiAgICAgICAgICA8cGF0aCBkPVwiTSA3LjQxMzAzODYsMjMuNDc4MjM5IEggMi4wMDAwMDI4IGwgMC4xNTIxNzM3LC0wLjgyNjA4NiBxIDAuMzkxMzAzOCwtMC4yMTczOTEgMC44MjYwODU4LC0wLjM2OTU2NCAwLjQzNDc4MiwtMC4xNzM5MTMgMC44Njk1NjQsLTAuMjYwODcgTCAxMi40NTY1MSw4LjAwMDAwMDIgaCAxLjU4Njk1NCBsIDIuNDU2NTE4LDE0LjAyMTcxODggcSAwLjQxMzA0MywwLjA4Njk2IDAuODA0MzQ3LDAuMjYwODcgMC40MTMwNDMsMC4xNzM5MTIgMC42OTU2NTEsMC4zNjk1NjQgbCAtMC4xNzM5MTMsMC44MjYwODYgaCAtNi42OTU2NDIgbCAwLjE1MjE3MywtMC44MjYwODYgcSAwLjQ1NjUyMSwtMC4yMTczOTEgMC45NTY1MjEsLTAuMzY5NTY0IDAuNTIxNzM4LC0wLjE3MzkxMyAwLjk3ODI1OSwtMC4yNjA4NyBMIDEyLjY5NTY0LDE4LjU2NTIwMyBIIDcuODkxMjk4OCBsIC0yLjA2NTIxNDUsMy40NTY1MTYgcSAwLjQ1NjUyMTEsMC4wNjUyMiAwLjkxMzA0MjIsMC4yMzkxMyAwLjQ1NjUyMTEsMC4xNTIxNzQgMC44MjYwODU4LDAuMzkxMzA0IHogbSAxLjIxNzM4OTYsLTYuMzI2MDc4IGggMy44OTEyOTg4IGwgLTAuNjA4Njk1LC00LjE1MjE2OCB2IC0xLjg2OTU2MiBoIC0wLjA0MzQ4IGwgLTAuODI2MDg2LDEuOTEzMDQgelwiIC8+XG4gICAgICAgICAgPHJlY3Qgd2lkdGg9XCI4XCIgaGVpZ2h0PVwiMlwiIHg9XCIxNVwiIHk9XCI1XCIgLz5cbiAgICAgICAgICA8cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCI4XCIgeD1cIjE4XCIgeT1cIjJcIiAvPlxuICAgICAgICA8L2c+XG4gICAgICA8L2c+XG5cbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJpbmNyZWFzZS1mb250LXNpemVcIlxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVG9vbGJhclNWRyBmcm9tIFwiLi4vLi4vc3ZnL3Rvb2xiYXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT3BlblJ1YmJpc2hCaW5Ub29sYmFyU1ZHIGV4dGVuZHMgVG9vbGJhclNWRyB7XG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIChcblxuICAgICAgPGc+XG4gICAgICAgIDxwYXRoIGQ9XCJNIDksOSAxMywxM1wiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMTNcIiBoZWlnaHQ9XCIyXCIgeD1cIjZcIiB5PVwiMjNcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCIxM1wiIHg9XCI0XCIgeT1cIjEwXCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiMTNcIiB4PVwiMTlcIiB5PVwiMTBcIiAvPlxuICAgICAgICA8cGF0aCBkPVwiTSA0LDIzIDYsMjUgdiAtMiB6XCIgLz5cbiAgICAgICAgPHBhdGggZD1cIm0gMTksMjMgdiAyIGwgMiwtMiB6XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMVwiIGhlaWdodD1cIjJcIiB4PVwiMlwiIHk9XCI0XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCI5XCIgaGVpZ2h0PVwiMlwiIHg9XCI4XCIgeT1cIjBcIiAvPlxuICAgICAgICA8cGF0aCBkPVwiTSA2LDAgNyw0IGMgMCwwIDIsMCAyLDAgTCA4LDAgWlwiIC8+XG4gICAgICAgIDxwYXRoIGQ9XCJNIDE5LDAgMTgsNCBIIDE2IEwgMTcsMCBaXCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIxXCIgaGVpZ2h0PVwiMTFcIiB4PVwiOFwiIHk9XCIxMVwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMVwiIGhlaWdodD1cIjExXCIgeD1cIjE1Ljk5OTk5OVwiIHk9XCIxMVwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMVwiIGhlaWdodD1cIjExXCIgeD1cIjEyXCIgeT1cIjExXCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIxN1wiIGhlaWdodD1cIjJcIiB4PVwiNFwiIHk9XCI4XCIgLz5cbiAgICAgIDwvZz5cblxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcIm9wZW4tcnViYmlzaC1iaW5cIlxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVG9vbGJhclNWRyBmcm9tIFwiLi4vLi4vc3ZnL3Rvb2xiYXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29weVNlc3Npb25LZXlUb29sYmFyU1ZHIGV4dGVuZHMgVG9vbGJhclNWRyB7XG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIChcblxuICAgICAgPGc+XG4gICAgICAgIDxnIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtMiwgMS41KSBzY2FsZSgxLjI1LDEuMDI1KVwiPlxuICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMi41XCIgaGVpZ2h0PVwiMTNcIiB4PVwiNlwiIHk9XCI4XCIgLz5cbiAgICAgICAgICA8cmVjdCB3aWR0aD1cIjRcIiBoZWlnaHQ9XCIyXCIgeD1cIjNcIiB5PVwiMThcIiAvPlxuICAgICAgICAgIDxyZWN0IHdpZHRoPVwiM1wiIGhlaWdodD1cIjJcIiB4PVwiM1wiIHk9XCIxNFwiIC8+XG4gICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiMlwiIHg9XCI0XCIgeT1cIjE2XCIgLz5cbiAgICAgICAgICA8cGF0aCBkPVwiTSA3LjI1MDMyMjgsMi45OTk4MTY5IEEgMy43NDk5MDU4LDMgMCAwIDAgMy41LDYuMDAwMTUwNiAzLjc0OTkwNTgsMyAwIDAgMCA3LjI1MDMyMjgsOC45OTk5Njc0IDMuNzQ5OTA1OCwzIDAgMCAwIDExLDYuMDAwMTUwNiAzLjc0OTkwNTgsMyAwIDAgMCA3LjI1MDMyMjgsMi45OTk4MTY5IFogbSAwLDIuMDAwMzk0NyBBIDEuMjQ5OTY4NCwwLjk5OTk5OTk0IDAgMCAxIDguNTAwMjE1LDYuMDAwMTUwNiAxLjI0OTk2ODQsMC45OTk5OTk5NCAwIDAgMSA3LjI1MDMyMjgsNy4wMDAwODk1IDEuMjQ5OTY4NCwwLjk5OTk5OTk0IDAgMCAxIDYuMDAwNDMwNiw2LjAwMDE1MDYgMS4yNDk5Njg0LDAuOTk5OTk5OTQgMCAwIDEgNy4yNTAzMjI4LDUuMDAwMjExNiBaXCIgLz5cbiAgICAgICAgPC9nPlxuICAgICAgICA8cGF0aCBkPVwibSAxMiwxMS4yODU3MTQgaCA4IFYgOC44NTcxNDI5IGwgNCwzLjY0Mjg1ODEgLTQsMy42NDI4NTYgdiAtMi40Mjg1NzEgaCAtOCB6XCIgLz5cbiAgICAgIDwvZz5cblxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcImNvcHktc2Vzc2lvbi1rZXlcIlxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVG9vbGJhclNWRyBmcm9tIFwiLi4vLi4vc3ZnL3Rvb2xiYXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2xvc2VkUnViYmlzaEJpblRvb2xiYXJTVkcgZXh0ZW5kcyBUb29sYmFyU1ZHIHtcbiAgY2hpbGRFbGVtZW50cygpIHtcbiAgICByZXR1cm4gKFxuXG4gICAgICA8Zz5cbiAgICAgICAgPHBhdGggZD1cIk0gOSw5IDEzLDEzXCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIxM1wiIGhlaWdodD1cIjJcIiB4PVwiNlwiIHk9XCIyM1wiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjEzXCIgeD1cIjRcIiB5PVwiMTBcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCIxM1wiIHg9XCIxOVwiIHk9XCIxMFwiIC8+XG4gICAgICAgIDxwYXRoIGQ9XCJNIDQsMjMgNiwyNSB2IC0yIHpcIiAvPlxuICAgICAgICA8cGF0aCBkPVwibSAxOSwyMyB2IDIgbCAyLC0yIHpcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjIxXCIgaGVpZ2h0PVwiMlwiIHg9XCIyXCIgeT1cIjhcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjlcIiBoZWlnaHQ9XCIyXCIgeD1cIjhcIiB5PVwiNFwiIC8+XG4gICAgICAgIDxwYXRoIGQ9XCJNIDYsNCA3LDggYyAwLDAgMiwwIDIsMCBMIDgsNCBaXCIgLz5cbiAgICAgICAgPHBhdGggZD1cIk0gMTksNCAxOCw4IEggMTYgTCAxNyw0IFpcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjFcIiBoZWlnaHQ9XCIxMVwiIHg9XCI4XCIgeT1cIjExXCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIxXCIgaGVpZ2h0PVwiMTFcIiB4PVwiMTZcIiB5PVwiMTFcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjFcIiBoZWlnaHQ9XCIxMVwiIHg9XCIxMlwiIHk9XCIxMVwiIC8+XG4gICAgICA8L2c+XG5cbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJjbG9zZWQtcnViYmlzaC1iaW5cIlxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTWVudVNWRyBmcm9tIFwiLi4vLi4vc3ZnL21lbnVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9nZ2xlUHJldmlld1BhbmVPbmx5TWVudVNWRyBleHRlbmRzIE1lbnVTVkcge1xuICBjaGlsZEVsZW1lbnRzKCkge1xuICAgIHJldHVybiAoXG5cbiAgICAgIDxnPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjEuNDk5OTk5XCIgaGVpZ2h0PVwiMTUuOTk5OTk5XCIgeD1cIjIwLjVcIiB5PVwiNC41MDAwMDA1XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIxLjQ5OTk5OTJcIiBoZWlnaHQ9XCIxNS45OTk5OTlcIiB4PVwiM1wiIHk9XCI0LjUwMDAwMDVcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjE4Ljk5OTk5OFwiIGhlaWdodD1cIjEuNDk5OTk5MlwiIHg9XCIzLjAwMDAwMDdcIiB5PVwiMy4wMDAwMDA3XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIxOC45OTk5OThcIiBoZWlnaHQ9XCIxLjQ5OTk5OTJcIiB4PVwiMy4wMDAwMDA3XCIgeT1cIjIwLjVcIiAvPlxuICAgICAgPC9nPlxuXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwidG9nZ2xlLXByZXZpZXctcGFuZS1vbmx5XCJcbiAgfTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE1lbnVTVkcgZnJvbSBcIi4uLy4uL3N2Zy9tZW51XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRvZ2dsZVByZXZpZXdQYW5lU3BsaXRNZW51U1ZHIGV4dGVuZHMgTWVudVNWRyB7XG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIChcblxuICAgICAgPGc+XG4gICAgICAgIDxwYXRoIGQ9XCJNIDQuNDk5OTgzNyA0LjQ5OTk4MzcgTCA0LjQ5OTk4MzcgMjAuNTAwMDQxIEwgMTIuNTAwMDEyIDIwLjUwMDA0MSBMIDEyLjUwMDAxMiA0LjQ5OTk4MzcgTCA0LjQ5OTk4MzcgNC40OTk5ODM3IHogTSA2LjcwNzA4NDEgNi4xNzE3MTYzIEwgOS41MzUzMzUzIDguOTk5OTY3NCBMIDguODI4NDAxNyA5LjcwNjkwMSBMIDYuNzA3MDg0MSAxMS44MjgyMTkgTCA2LjAwMDE1MDYgMTEuMTIxMjg1IEwgOC4xMjE0NjgxIDguOTk5OTY3NCBMIDYuMDAwMTUwNiA2Ljg3ODY0OTkgTCA2LjcwNzA4NDEgNi4xNzE3MTYzIHogXCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIxLjQ5OTk5OVwiIGhlaWdodD1cIjE1Ljk5OTk5OVwiIHg9XCIyMC41XCIgeT1cIjQuNTAwMDAwNVwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMS40OTk5OTkyXCIgaGVpZ2h0PVwiMTUuOTk5OTk5XCIgeD1cIjNcIiB5PVwiNC41MDAwMDA1XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIxOC45OTk5OThcIiBoZWlnaHQ9XCIxLjQ5OTk5OTJcIiB4PVwiMy4wMDAwMDA3XCIgeT1cIjMuMDAwMDAwN1wiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMTguOTk5OTk4XCIgaGVpZ2h0PVwiMS40OTk5OTkyXCIgeD1cIjMuMDAwMDAwN1wiIHk9XCIyMC41XCIgLz5cbiAgICAgIDwvZz5cblxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcInRvZ2dsZS1wcmV2aWV3LXBhbmUtc3BsaXRcIlxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVG9vbGJhclNWRyBmcm9tIFwiLi4vLi4vc3ZnL3Rvb2xiYXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmluZEluQWN0aXZlRG9jdW1lbnRUb29sYmFyU1ZHIGV4dGVuZHMgVG9vbGJhclNWRyB7XG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIChcblxuICAgICAgPGcgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAsIDEpXCI+XG4gICAgICAgIDxwYXRoIGQ9XCJtIDEzLjQ2MjkyNiwxNi4wNDg3NzUgYSA3LjQ5OTkxODEsNy40OTk5OTk1IDAgMCAxIC0wLjY1OTU1MywwLjc1NDU2NyA3LjQ5OTkxODEsNy40OTk5OTk1IDAgMCAxIC0wLjc1Njc1MSwwLjY1NzM2OCBsIDEuNDYzODA2LDEuNDYzODIzIDEuNDE0MTEzLC0xLjQxNDEyOCB6IG0gNS43MDQyMTIsNC4yOTAwNiAtMi44Mjg1ODksMi44Mjg2MiBhIDEuOTk5NTkyNCwxLjk5OTk4ODkgNDMuNDMxNjEgMCAwIDIuODI4MzA5LDguNmUtNSAxLjk5OTU5MjQsMS45OTk5ODg5IDQzLjQzMTYxIDAgMCAyLjhlLTQsLTIuODI4NzA2IHogbSAtMy41MzU0OTYsLTMuNTM1NTM0IDMuNTM1NDk1LDMuNTM1NTM0IC0yLjgyODM5NSwyLjgyODQyNiAtMy41MzU0OTYsLTMuNTM1NTMzIHogTSAxMi44MDMxMDUsNi4xOTY1NTg0IGEgNy40OTk5MTgxLDcuNDk5OTk5NSAwIDAgMCAtMTAuNjA2MjA1LDAgNy40OTk5MTgxLDcuNDk5OTk5NSAwIDAgMCAtMy42NmUtNCwxMC42MDY2ODQ2IDcuNDk5OTE4MSw3LjQ5OTk5OTUgMCAwIDAgMTAuNjA2OTM2LDAgNy40OTk5MTgxLDcuNDk5OTk5NSAwIDAgMCAtMy42NWUtNCwtMTAuNjA2Njg0NiB6IG0gLTEuNDE0MTEyLDEuNDE0MTI3MiBhIDUuNDk5OTM5OCw1LjQ5OTk5OTUgMCAwIDEgMy42NWUtNCw3Ljc3ODQyOTQgNS40OTk5Mzk4LDUuNDk5OTk5NSAwIDAgMSAtNy43Nzg3MTIsMCA1LjQ5OTkzOTgsNS40OTk5OTk1IDAgMCAxIDMuNjVlLTQsLTcuNzc4NDI5NCA1LjQ5OTkzOTgsNS40OTk5OTk1IDAgMCAxIDcuNzc3OTgyLDAgelwiIC8+XG4gICAgICAgIDxwYXRoIGQ9XCJNIDkuMDAwMDAxLDEwLjAwMDAwMSBIIDE0IFYgMTMgSCA5LjAwMDAwMSBaIG0gOWUtNywtNC4wMDAwMDA1IEggMTIuMDAwMDAyIFYgMTIgSCA5LjAwMDAwMTkgWiBNIDE1LjUsMS4zNDc4NzAyZS02IDE5Ljk5OTk5OCw0LjQ5OTk5OTYgSCAxNS41IFogTSAxMS4wMDAwMDEsNS4zMzM1ODY0ZS03IEggMTUuNSBWIDIuMDAwMDAwNiBIIDExLjAwMDAwMSBaIE0gMTEuMDAwMDAyLDIuMDAwMDAwNiBoIDEuOTk5OTk5IHYgNC45OTk5OTg4IGggLTEuOTk5OTk5IHogbSA2Ljk5OTk5OSwyLjQ5OTk5OTkgSCAyMCB2IDQuNDk5OTk5IGggLTEuOTk5OTk5IHogbSAtNCw0LjQ5OTk5OTkgSCAyMCBWIDExIGggLTUuOTk5OTk5IHpcIiAvPlxuICAgICAgPC9nPlxuXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwiZmluZC1pbi1hY3RpdmUtZG9jdW1lbnRcIlxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVG9vbGJhclNWRyBmcm9tIFwiLi4vLi4vc3ZnL3Rvb2xiYXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXhwb3J0Q3VzdG9tR3JhbW1hcnNUb29sYmFyU1ZHIGV4dGVuZHMgVG9vbGJhclNWRyB7XG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIChcblxuICAgICAgPGc+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjFcIiB4PVwiMTRcIiB5PVwiN1wiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjFcIiB4PVwiMTRcIiB5PVwiMTdcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMi41XCIgeD1cIjRcIiB5PVwiNC41XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIzXCIgaGVpZ2h0PVwiNS41XCIgeD1cIjBcIiB5PVwiMFwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSg0LCA3KSBza2V3WCgyOC41KVwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiM1wiIGhlaWdodD1cIjUuNVwiIHg9XCIwXCIgeT1cIjBcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoNywgMTIuNSkgc2tld1goLTI4LjUpXCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjIuNVwiIHg9XCI0XCIgeT1cIjE4XCIgLz5cbiAgICAgICAgPHBhdGggZD1cIm0gMTIsMTEuMjg1NzE0IGggOCBWIDguODU3MTQyOSBsIDQsMy42NDI4NTgxIC00LDMuNjQyODU2IHYgLTIuNDI4NTcxIGggLTggelwiIC8+XG4gICAgICA8L2c+XG5cbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJleHBvcnQtY3VzdG9tLWdyYW1tYXJzXCJcbiAgfTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE1lbnVTVkcgZnJvbSBcIi4uLy4uL3N2Zy9tZW51XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRvZ2dsZVByZXR0eVByaW50ZXJPbmx5TWVudVNWRyBleHRlbmRzIE1lbnVTVkcge1xuICBjaGlsZEVsZW1lbnRzKCkge1xuICAgIHJldHVybiAoXG5cbiAgICAgIDxnPlxuICAgICAgICA8cGF0aCBkPVwiTSA0LjQ5OTk4MzcgNC40OTk5ODM3IEwgNC40OTk5ODM3IDIwLjUwMDA0MSBMIDEyLjUwMDAxMiAyMC41MDAwNDEgTCAxMi41MDAwMTIgNC40OTk5ODM3IEwgNC40OTk5ODM3IDQuNDk5OTgzNyB6IE0gNi43MDcwODQxIDYuMTcxNzE2MyBMIDkuNTM1MzM1MyA4Ljk5OTk2NzQgTCA4LjgyODQwMTcgOS43MDY5MDEgTCA2LjcwNzA4NDEgMTEuODI4MjE5IEwgNi4wMDAxNTA2IDExLjEyMTI4NSBMIDguMTIxNDY4MSA4Ljk5OTk2NzQgTCA2LjAwMDE1MDYgNi44Nzg2NDk5IEwgNi43MDcwODQxIDYuMTcxNzE2MyB6IFwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiOVwiIGhlaWdodD1cIjE1Ljk5OTk5OVwiIHg9XCIxMlwiIHk9XCI0LjUwMDAwMDVcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjEuNDk5OTk5XCIgaGVpZ2h0PVwiMTUuOTk5OTk5XCIgeD1cIjIwLjVcIiB5PVwiNC41MDAwMDA1XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIxLjQ5OTk5OTJcIiBoZWlnaHQ9XCIxNS45OTk5OTlcIiB4PVwiM1wiIHk9XCI0LjUwMDAwMDVcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjE4Ljk5OTk5OFwiIGhlaWdodD1cIjEuNDk5OTk5MlwiIHg9XCIzLjAwMDAwMDdcIiB5PVwiMy4wMDAwMDA3XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIxOC45OTk5OThcIiBoZWlnaHQ9XCIxLjQ5OTk5OTJcIiB4PVwiMy4wMDAwMDA3XCIgeT1cIjIwLjVcIiAvPlxuICAgICAgPC9nPlxuXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwidG9nZ2xlLXByZXR0eS1wcmludGVyLW9ubHlcIlxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTWVudVNWRyBmcm9tIFwiLi4vLi4vc3ZnL21lbnVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9nZ2xlUHJldHR5UHJpbnRlclNwbGl0TWVudVNWRyBleHRlbmRzIE1lbnVTVkcge1xuICBjaGlsZEVsZW1lbnRzKCkge1xuICAgIHJldHVybiAoXG5cbiAgICAgIDxnPlxuICAgICAgICA8ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoOCwwKVwiPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNIDQuNDk5OTgzNyA0LjQ5OTk4MzcgTCA0LjQ5OTk4MzcgMjAuNTAwMDQxIEwgMTIuNTAwMDEyIDIwLjUwMDA0MSBMIDEyLjUwMDAxMiA0LjQ5OTk4MzcgTCA0LjQ5OTk4MzcgNC40OTk5ODM3IHogTSA2LjcwNzA4NDEgNi4xNzE3MTYzIEwgOS41MzUzMzUzIDguOTk5OTY3NCBMIDguODI4NDAxNyA5LjcwNjkwMSBMIDYuNzA3MDg0MSAxMS44MjgyMTkgTCA2LjAwMDE1MDYgMTEuMTIxMjg1IEwgOC4xMjE0NjgxIDguOTk5OTY3NCBMIDYuMDAwMTUwNiA2Ljg3ODY0OTkgTCA2LjcwNzA4NDEgNi4xNzE3MTYzIHogXCIgLz5cbiAgICAgICAgPC9nPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjEuNDk5OTk5XCIgaGVpZ2h0PVwiMTUuOTk5OTk5XCIgeD1cIjExXCIgeT1cIjQuNTAwMDAwNVwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMS40OTk5OTlcIiBoZWlnaHQ9XCIxNS45OTk5OTlcIiB4PVwiMjAuNVwiIHk9XCI0LjUwMDAwMDVcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjEuNDk5OTk5MlwiIGhlaWdodD1cIjE1Ljk5OTk5OVwiIHg9XCIzXCIgeT1cIjQuNTAwMDAwNVwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMTguOTk5OTk4XCIgaGVpZ2h0PVwiMS40OTk5OTkyXCIgeD1cIjMuMDAwMDAwN1wiIHk9XCIzLjAwMDAwMDdcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjE4Ljk5OTk5OFwiIGhlaWdodD1cIjEuNDk5OTk5MlwiIHg9XCIzLjAwMDAwMDdcIiB5PVwiMjAuNVwiIC8+XG4gICAgICA8L2c+XG5cbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJ0b2dnbGUtcHJldHR5LXByaW50ZXItc3BsaXRcIlxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVG9vbGJhclNWRyBmcm9tIFwiLi4vLi4vc3ZnL3Rvb2xiYXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3JlYXRlUHJvamVjdHNGaWxlUGF0aFRvb2xiYXJTVkcgZXh0ZW5kcyBUb29sYmFyU1ZHIHtcbiAgY2hpbGRFbGVtZW50cygpIHtcbiAgICByZXR1cm4gKFxuXG4gICAgICA8Zz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIxNC4wMDAwMDFcIiBoZWlnaHQ9XCIxLjk5OTk5OTlcIiB4PVwiNVwiIHk9XCIyM1wiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMS45OTk5OTk5XCIgaGVpZ2h0PVwiN1wiIHg9XCIxN1wiIHk9XCIxNlwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMS45OTk5OTk5XCIgaGVpZ2h0PVwiMTJcIiB4PVwiNS4wMDAwMDFcIiB5PVwiMTFcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjdcIiBoZWlnaHQ9XCIxLjk5OTk5OTlcIiB4PVwiNS4wMDAwMDFcIiB5PVwiOVwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiOFwiIGhlaWdodD1cIjJcIiB4PVwiMTVcIiB5PVwiNVwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjhcIiB4PVwiMThcIiB5PVwiMlwiIC8+XG4gICAgICAgIDxwYXRoIGQ9XCJtIDEyLjAwMDAwMSw5LjAwMDAwMDEgNyw2Ljk5OTk5OTkgaCAtNyB6XCIgLz5cbiAgICAgIDwvZz5cblxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcImNyZWF0ZS1wcm9qZWN0cy1maWxlLXBhdGhcIlxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVG9vbGJhclNWRyBmcm9tIFwiLi4vLi4vc3ZnL3Rvb2xiYXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmluZEluUHJvamVjdHNBbmRSZWxlYXNlc1Rvb2xiYXJTVkcgZXh0ZW5kcyBUb29sYmFyU1ZHIHtcbiAgY2hpbGRFbGVtZW50cygpIHtcbiAgICByZXR1cm4gKFxuXG4gICAgICA8ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMCwgMSlcIj5cbiAgICAgICAgPHBhdGggZD1cIm0gMTMuNDYyOTI2LDE2LjA0ODc3NSBhIDcuNDk5OTE4MSw3LjQ5OTk5OTUgMCAwIDEgLTAuNjU5NTUzLDAuNzU0NTY3IDcuNDk5OTE4MSw3LjQ5OTk5OTUgMCAwIDEgLTAuNzU2NzUxLDAuNjU3MzY4IGwgMS40NjM4MDYsMS40NjM4MjMgMS40MTQxMTMsLTEuNDE0MTI4IHogbSA1LjcwNDIxMiw0LjI5MDA2IC0yLjgyODU4OSwyLjgyODYyIGEgMS45OTk1OTI0LDEuOTk5OTg4OSA0My40MzE2MSAwIDAgMi44MjgzMDksOC42ZS01IDEuOTk5NTkyNCwxLjk5OTk4ODkgNDMuNDMxNjEgMCAwIDIuOGUtNCwtMi44Mjg3MDYgeiBtIC0zLjUzNTQ5NiwtMy41MzU1MzQgMy41MzU0OTUsMy41MzU1MzQgLTIuODI4Mzk1LDIuODI4NDI2IC0zLjUzNTQ5NiwtMy41MzU1MzMgeiBNIDEyLjgwMzEwNSw2LjE5NjU1ODQgYSA3LjQ5OTkxODEsNy40OTk5OTk1IDAgMCAwIC0xMC42MDYyMDUsMCA3LjQ5OTkxODEsNy40OTk5OTk1IDAgMCAwIC0zLjY2ZS00LDEwLjYwNjY4NDYgNy40OTk5MTgxLDcuNDk5OTk5NSAwIDAgMCAxMC42MDY5MzYsMCA3LjQ5OTkxODEsNy40OTk5OTk1IDAgMCAwIC0zLjY1ZS00LC0xMC42MDY2ODQ2IHogbSAtMS40MTQxMTIsMS40MTQxMjcyIGEgNS40OTk5Mzk4LDUuNDk5OTk5NSAwIDAgMSAzLjY1ZS00LDcuNzc4NDI5NCA1LjQ5OTkzOTgsNS40OTk5OTk1IDAgMCAxIC03Ljc3ODcxMiwwIDUuNDk5OTM5OCw1LjQ5OTk5OTUgMCAwIDEgMy42NWUtNCwtNy43Nzg0Mjk0IDUuNDk5OTM5OCw1LjQ5OTk5OTUgMCAwIDEgNy43Nzc5ODIsMCB6XCIgLz5cbiAgICAgICAgPHBhdGggZD1cIk0gOS4wMDAwMDEsMTAuMDAwMDAxIEggMTUgViAxMyBIIDkuMDAwMDAxIFogbSA5ZS03LC00LjAwMDAwMDUgSCAxMi4wMDAwMDIgViAxMiBIIDkuMDAwMDAxOSBaIG0gNi4wMDAwMDAxLC01LjAwMDAwMDQgMiwyIGggLTIgeiBtIC00LC0xLjZlLTcgaCAzLjk5OTk5OSBWIDIuOTk5OTk5OSBoIC00IHogbSA5LjAwMDAwMSw1LjAwMDAwMDU2IGggNCBWIDggaCAtNCB6IG0gLTYsNS45OTk5OTk1IGggOS45OTk5OTkgdiAyIEggMTQuMDAwMDAzIFogTSAxMS4wMDAwMDIsMyBoIDkuOTk5OTk5IHYgMiBoIC0xMCB6IG0gMyw4LjAwMDAwMSBIIDE2IHYgMSBoIC0xLjk5OTk5OCB6IG0gOCwtMyBoIDIuMDAwMDAxIFYgMTIgaCAtMi4wMDAwMDEgeiBtIC0xMSwtMy4wMDAwMDA2IGggMiBWIDYuOTk5OTk5IGggLTIgeiBNIDE5LjAwMDAwMSw1IGggMiB2IDQgaCAtMiB6IG0gLTUsNC4wMDAwMDA0IEggMjEgViAxMSBoIC02Ljk5OTk5OSB6XCIgLz5cbiAgICAgIDwvZz5cblxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcImZpbmQtaW4tcHJvamVjdHMtYW5kLXJlbGVhc2VzXCJcbiAgfTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRvb2xiYXJTVkcgZnJvbSBcIi4uLy4uL3N2Zy90b29sYmFyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlbG9hZFByb2plY3RzQW5kUmVsZWFzZXNUb29sYmFyU1ZHIGV4dGVuZHMgVG9vbGJhclNWRyB7XG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIChcblxuICAgICAgPGcgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAsIDEpXCI+XG4gICAgICAgIDxwYXRoIGQ9XCJtIDEzLjIyOTE2Nyw0LjYwNzU1NTEgdiAyLjU2NDg0MzQgYSA1Ljk1MzEyNDgsNS43NDA2MjQ4IDAgMCAxIDUuMjkxNjY1LDUuNzAyMjU0NSA1Ljk1MzEyNDgsNS43NDA2MjQ4IDAgMCAxIC01Ljk1MzEyNCw1Ljc0MDYyNCA1Ljk1MzEyNDgsNS43NDA2MjQ4IDAgMCAxIC01LjkxMzMzMzYsLTUuMTAyNzc2IEggMy45OTcxNzIzIGEgOC41OTg5NTc2LDguMjkyMDEzMiAwIDAgMCA4LjU3MDUzNTcsNy42NTQxNjYgOC41OTg5NTc2LDguMjkyMDEzMiAwIDAgMCA4LjU5ODk1OSwtOC4yOTIwMTQgOC41OTg5NTc2LDguMjkyMDEzMiAwIDAgMCAtNy45Mzc1LC04LjI2NzA5NzkgelwiIC8+XG4gICAgICAgIDxwYXRoIGQ9XCJNIDEzLjIyOTE2NywyLjAzMTI1MDMgViA5LjY4NTQxNzEgTCA3LjkzNzUwMDEsNS44NTgzMzM2IFpcIi8+XG4gICAgICA8L2c+XG5cbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJyZWxvYWQtcHJvamVjdHMtYW5kLXJlbGVhc2VzXCJcbiAgfTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRvb2xiYXJTVkcgZnJvbSBcIi4uLy4uL3N2Zy90b29sYmFyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlbmFtZVNlbGVjdGVkUHJvamVjdHNQYXRoVG9vbGJhclNWRyBleHRlbmRzIFRvb2xiYXJTVkcge1xuICBjaGlsZEVsZW1lbnRzKCkge1xuICAgIHJldHVybiAoXG5cbiAgICAgIDxnIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgwLjUsIDApIG1hdHJpeCgwLjYwMzYxMTc2LC0wLjYwMzYxMTc2LDAuNjAzNjExNzYsMC42MDM2MTE3NiwtNC4yODM4MDg1LDE0Ljg4MDg2NClcIj5cbiAgICAgICAgPHBhdGggZD1cIk0gNi42MTQ1ODMzLDcuOTM3NSBWIDE1Ljg3NSBIIDIxLjE2NjY2NyBWIDcuOTM3NSBaIG0gMi42NDU4MzM0LDIuNjQ1ODMzIGggOS4yNjA0MTYzIHYgMi42NDU4MzQgSCA5LjI2MDQxNjcgWlwiIC8+XG4gICAgICAgIDxwYXRoIGQ9XCJtIDIyLjQ4OTU4Myw3LjkzNzQ5OTkgaCAyLjY0NTgzMyBWIDE1Ljg3NSBoIC0yLjY0NTgzMyB6XCIgLz5cbiAgICAgICAgPHBhdGggZD1cIk0gNi42MTQ1ODMyLDcuOTM3NDk5OSAyLjY0NTgzMzMsMTEuOTA2MjUgNi42MTQ1ODMyLDE1Ljg3NSBaXCIgLz5cbiAgICAgIDwvZz5cblxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcInJlbmFtZS1zZWxlY3RlZC1wcm9qZWN0cy1wYXRoXCJcbiAgfTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRvb2xiYXJTVkcgZnJvbSBcIi4uLy4uL3N2Zy90b29sYmFyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENyZWF0ZVByb2plY3RzRGlyZWN0b3J5UGF0aFRvb2xiYXJTVkcgZXh0ZW5kcyBUb29sYmFyU1ZHIHtcbiAgY2hpbGRFbGVtZW50cygpIHtcbiAgICByZXR1cm4gKFxuXG4gICAgICA8Zz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjJcIiB4PVwiM1wiIHk9XCIyM1wiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjdcIiB4PVwiMTdcIiB5PVwiMTZcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCI3XCIgeD1cIjNcIiB5PVwiMTZcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMlwiIHg9XCIzXCIgeT1cIjE0XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCI3XCIgaGVpZ2h0PVwiM1wiIHg9XCIzXCIgeT1cIjExXCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCI4XCIgaGVpZ2h0PVwiMlwiIHg9XCIxNVwiIHk9XCI1XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiOFwiIHg9XCIxOFwiIHk9XCIyXCIgLz5cbiAgICAgICAgPHBhdGggZD1cIm0gMTAsMTEgMywzIGggLTMgelwiIC8+XG4gICAgICA8L2c+XG5cbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJjcmVhdGUtcHJvamVjdHMtZGlyZWN0b3J5LXBhdGhcIlxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHN0eWxlcyB9IGZyb20gXCIuL3N0eWxlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjb2xvdXJzIH0gZnJvbSBcIi4vY29sb3Vyc1wiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHN5bnRheFN0eWxlIH0gZnJvbSBcIi4vc3R5bGUvc3ludGF4XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGp1bGlhTW9ub1N0eWxlIH0gZnJvbSBcIi4vc3R5bGUvanVsaWFNb25vXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNvbXB1dGVyTW9kZXJuU3R5bGUgfSBmcm9tIFwiLi9zdHlsZS9jb21wdXRlck1vZGVyblwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIGNvbW1vbkZvbnRNaXhpbiB9IGZyb20gXCIuL21peGluL2ZvbnQvY29tbW9uXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGp1bGlhTW9ub0ZvbnRNaXhpbiB9IGZyb20gXCIuL21peGluL2ZvbnQvanVsaWFNb25vXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgZWRpdG9yU2NoZW1lIH0gZnJvbSBcIi4vc2NoZW1lL2VkaXRvclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjb21tb25TY2hlbWUgfSBmcm9tIFwiLi9zY2hlbWUvY29tbW9uXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNvbnNvbGVTY2hlbWUgfSBmcm9tIFwiLi9zY2hlbWUvY29uc29sZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwcmV2aWV3UGFuZVNjaGVtZSB9IGZyb20gXCIuL3NjaGVtZS9wcmV2aWV3UGFuZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwcmV0dHlQcmludGVyU2NoZW1lIH0gZnJvbSBcIi4vc2NoZW1lL3ByZXR0eVByaW50ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgd2VsY29tZVNjcmVlblNjaGVtZSB9IGZyb20gXCIuL3NjaGVtZS93ZWxjb21lU2NyZWVuXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgTG9nb1NWRyB9IGZyb20gXCIuL3N2Zy9sb2dvXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1hcmtlclNWRyB9IGZyb20gXCIuL3N2Zy9tYXJrZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRmlsZU5hbWVTVkcgfSBmcm9tIFwiLi9zdmcvbmFtZS9maWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFVwVG9nZ2xlU1ZHIH0gZnJvbSBcIi4vc3ZnL3RvZ2dsZS91cFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBGb2xkTGluZVNWRyB9IGZyb20gXCIuL3N2Zy9mb2xkL2xpbmVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRmxpcE1lbnVTVkcgfSBmcm9tIFwiLi9zdmcvbWVudS9mbGlwXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIERvd25Ub2dnbGVTVkcgfSBmcm9tIFwiLi9zdmcvdG9nZ2xlL2Rvd25cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2xvc2VkRm9sZFNWRyB9IGZyb20gXCIuL3N2Zy9mb2xkL2Nsb3NlZFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUb3BPcGVuRm9sZFNWRyB9IGZyb20gXCIuL3N2Zy9mb2xkL3RvcE9wZW5cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRGlyZWN0b3J5TmFtZVNWRyB9IGZyb20gXCIuL3N2Zy9uYW1lL2RpcmVjdG9yeVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFeHBhbmRlZFRpdGxlU1ZHIH0gZnJvbSBcIi4vc3ZnL3RpdGxlL2V4cGFuZGVkXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvbGxhcHNlZFRpdGxlU1ZHIH0gZnJvbSBcIi4vc3ZnL3RpdGxlL2NvbGxhcHNlZFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCb3R0b21PcGVuRm9sZFNWRyB9IGZyb20gXCIuL3N2Zy9mb2xkL2JvdHRvbU9wZW5cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW1iZWRkZWRNb2RlTWVudVNWRyB9IGZyb20gXCIuL3N2Zy9tZW51L2VtYmVkZGVkTW9kZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBKb2luU2Vzc2lvblRvb2xiYXJTVkcgfSBmcm9tIFwiLi9zdmcvdG9vbGJhci9qb2luU2Vzc2lvblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTeW5jaHJvbmlzZVRvb2xiYXJTVkcgfSBmcm9tIFwiLi9zdmcvdG9vbGJhci9zeW5jaHJvbmlzZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaG93UmVsZWFzZXNUb29sYmFyU1ZHIH0gZnJvbSBcIi4vc3ZnL3Rvb2xiYXIvc2hvd1JlbGVhc2VzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEhpZGVSZWxlYXNlc1Rvb2xiYXJTVkcgfSBmcm9tIFwiLi9zdmcvdG9vbGJhci9oaWRlUmVsZWFzZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTGVhdmVTZXNzaW9uVG9vbGJhclNWRyB9IGZyb20gXCIuL3N2Zy90b29sYmFyL2xlYXZlU2Vzc2lvblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDbGVhckNvbnNvbGVUb29sYmFyU1ZHIH0gZnJvbSBcIi4vc3ZnL3Rvb2xiYXIvY2xlYXJDb25zb2xlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENyZWF0ZVNlc3Npb25Ub29sYmFyU1ZHIH0gZnJvbSBcIi4vc3ZnL3Rvb2xiYXIvY3JlYXRlU2Vzc2lvblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSZWxlYXNlRGlyZWN0b3J5TmFtZVNWRyB9IGZyb20gXCIuL3N2Zy9uYW1lL2RpcmVjdG9yeS9yZWxlYXNlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFByZXNlbnRhdGlvbk1vZGVNZW51U1ZHIH0gZnJvbSBcIi4vc3ZnL21lbnUvcHJlc2VudGF0aW9uTW9kZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEZWNyZWFzZUZvbnRTaXplTWVudVNWRyB9IGZyb20gXCIuL3N2Zy9tZW51L2RlY3JlYXNlRm9udFNpemVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSW5jcmVhc2VGb250U2l6ZU1lbnVTVkcgfSBmcm9tIFwiLi9zdmcvbWVudS9pbmNyZWFzZUZvbnRTaXplXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE9wZW5SdWJiaXNoQmluVG9vbGJhclNWRyB9IGZyb20gXCIuL3N2Zy90b29sYmFyL29wZW5SdWJiaXNoQmluXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvcHlTZXNzaW9uS2V5VG9vbGJhclNWRyB9IGZyb20gXCIuL3N2Zy90b29sYmFyL2NvcHlTZXNzaW9uS2V5XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENsb3NlZFJ1YmJpc2hCaW5Ub29sYmFyU1ZHIH0gZnJvbSBcIi4vc3ZnL3Rvb2xiYXIvY2xvc2VkUnViYmlzaEJpblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUb2dnbGVQcmV2aWV3UGFuZU9ubHlNZW51U1ZHIH0gZnJvbSBcIi4vc3ZnL21lbnUvdG9nZ2xlUHJldmlld1BhbmVPbmx5XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRvZ2dsZVByZXZpZXdQYW5lU3BsaXRNZW51U1ZHIH0gZnJvbSBcIi4vc3ZnL21lbnUvdG9nZ2xlUHJldmlld1BhbmVTcGxpdFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBGaW5kSW5BY3RpdmVEb2N1bWVudFRvb2xiYXJTVkcgfSBmcm9tIFwiLi9zdmcvdG9vbGJhci9maW5kSW5BY3RpdmVEb2N1bWVudFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFeHBvcnRDdXN0b21HcmFtbWFyc1Rvb2xiYXJTVkcgfSBmcm9tIFwiLi9zdmcvdG9vbGJhci9leHBvcnRDdXN0b21HcmFtbWFyc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUb2dnbGVQcmV0dHlQcmludGVyT25seU1lbnVTVkcgfSBmcm9tIFwiLi9zdmcvbWVudS90b2dnbGVQcmV0dHlQcmludGVyT25seVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUb2dnbGVQcmV0dHlQcmludGVyU3BsaXRNZW51U1ZHIH0gZnJvbSBcIi4vc3ZnL21lbnUvdG9nZ2xlUHJldHR5UHJpbnRlclNwbGl0XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENyZWF0ZVByb2plY3RzRmlsZVBhdGhUb29sYmFyU1ZHIH0gZnJvbSBcIi4vc3ZnL3Rvb2xiYXIvY3JlYXRlUHJvamVjdHNGaWxlUGF0aFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBGaW5kSW5Qcm9qZWN0c0FuZFJlbGVhc2VzVG9vbGJhclNWRyB9IGZyb20gXCIuL3N2Zy90b29sYmFyL2ZpbmRJblByb2plY3RzQW5kUmVsZWFzZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUmVsb2FkUHJvamVjdHNBbmRSZWxlYXNlc1Rvb2xiYXJTVkcgfSBmcm9tIFwiLi9zdmcvdG9vbGJhci9yZWxvYWRQcm9qZWN0c0FuZFJlbGVhc2VzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFJlbmFtZVNlbGVjdGVkUHJvamVjdHNQYXRoVG9vbGJhclNWRyB9IGZyb20gXCIuL3N2Zy90b29sYmFyL3JlbmFtZVNlbGVjdGVkUHJvamVjdHNQYXRoXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENyZWF0ZVByb2plY3RzRGlyZWN0b3J5UGF0aFRvb2xiYXJTVkcgfSBmcm9tIFwiLi9zdmcvdG9vbGJhci9jcmVhdGVQcm9qZWN0c0RpcmVjdG9yeVBhdGhcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5cbmltcG9ydCBEaXYgZnJvbSBcIi4uL2RpdlwiO1xuXG5pbXBvcnQgeyBGbGlwTWVudVNWRyxcbiAgICAgICAgIEVtYmVkZGVkTW9kZU1lbnVTVkcsXG4gICAgICAgICBJbmNyZWFzZUZvbnRTaXplTWVudVNWRyxcbiAgICAgICAgIERlY3JlYXNlRm9udFNpemVNZW51U1ZHLFxuICAgICAgICAgUHJlc2VudGF0aW9uTW9kZU1lbnVTVkcsXG4gICAgICAgICBUb2dnbGVQcmV2aWV3UGFuZU9ubHlNZW51U1ZHLFxuICAgICAgICAgVG9nZ2xlUHJldmlld1BhbmVTcGxpdE1lbnVTVkcsXG4gICAgICAgICBUb2dnbGVQcmV0dHlQcmludGVyT25seU1lbnVTVkcsXG4gICAgICAgICBUb2dnbGVQcmV0dHlQcmludGVyU3BsaXRNZW51U1ZHIH0gZnJvbSBcIi4uLy4uLy4uL2luZGV4XCI7IC8vL1xuXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1lbnVEaXYgZXh0ZW5kcyBFbGVtZW50IHtcbiAgY2hpbGRFbGVtZW50cygpIHtcbiAgICBjb25zdCBUb29sYmFyU1ZHcyA9IFtcbiAgICAgICAgICAgIEZsaXBNZW51U1ZHLFxuICAgICAgICAgICAgRW1iZWRkZWRNb2RlTWVudVNWRyxcbiAgICAgICAgICAgIFByZXNlbnRhdGlvbk1vZGVNZW51U1ZHLFxuICAgICAgICAgICAgSW5jcmVhc2VGb250U2l6ZU1lbnVTVkcsXG4gICAgICAgICAgICBEZWNyZWFzZUZvbnRTaXplTWVudVNWRyxcbiAgICAgICAgICAgIFRvZ2dsZVByZXZpZXdQYW5lT25seU1lbnVTVkcsXG4gICAgICAgICAgICBUb2dnbGVQcmV2aWV3UGFuZVNwbGl0TWVudVNWRyxcbiAgICAgICAgICAgIFRvZ2dsZVByZXR0eVByaW50ZXJPbmx5TWVudVNWRyxcbiAgICAgICAgICAgIFRvZ2dsZVByZXR0eVByaW50ZXJTcGxpdE1lbnVTVkdcbiAgICAgICAgICBdLFxuICAgICAgICAgIGNoaWxkRWxlbWVudHMgPSBUb29sYmFyU1ZHcy5tYXAoKFRvb2xiYXJTVkcpID0+XG5cbiAgICAgICAgICAgIDxEaXY+XG4gICAgICAgICAgICAgIDxUb29sYmFyU1ZHIC8+XG4gICAgICAgICAgICA8L0Rpdj5cblxuICAgICAgICAgICk7XG5cbiAgICByZXR1cm4gY2hpbGRFbGVtZW50cztcbiAgfVxuXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJkaXZcIjtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcIm1lbnVcIlxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcImVhc3lcIjtcblxuaW1wb3J0IERpdiBmcm9tIFwiLi4vZGl2XCI7XG5cbmltcG9ydCB7IEpvaW5TZXNzaW9uVG9vbGJhclNWRyxcbiAgICAgICAgIFN5bmNocm9uaXNlVG9vbGJhclNWRyxcbiAgICAgICAgIFNob3dSZWxlYXNlc1Rvb2xiYXJTVkcsXG4gICAgICAgICBIaWRlUmVsZWFzZXNUb29sYmFyU1ZHLFxuICAgICAgICAgTGVhdmVTZXNzaW9uVG9vbGJhclNWRyxcbiAgICAgICAgIENsZWFyQ29uc29sZVRvb2xiYXJTVkcsXG4gICAgICAgICBDcmVhdGVTZXNzaW9uVG9vbGJhclNWRyxcbiAgICAgICAgIENvcHlTZXNzaW9uS2V5VG9vbGJhclNWRyxcbiAgICAgICAgIE9wZW5SdWJiaXNoQmluVG9vbGJhclNWRyxcbiAgICAgICAgIENsb3NlZFJ1YmJpc2hCaW5Ub29sYmFyU1ZHLFxuICAgICAgICAgRmluZEluQWN0aXZlRG9jdW1lbnRUb29sYmFyU1ZHLFxuICAgICAgICAgRXhwb3J0Q3VzdG9tR3JhbW1hcnNUb29sYmFyU1ZHLFxuICAgICAgICAgQ3JlYXRlUHJvamVjdHNGaWxlUGF0aFRvb2xiYXJTVkcsXG4gICAgICAgICBGaW5kSW5Qcm9qZWN0c0FuZFJlbGVhc2VzVG9vbGJhclNWRyxcbiAgICAgICAgIFJlbG9hZFByb2plY3RzQW5kUmVsZWFzZXNUb29sYmFyU1ZHLFxuICAgICAgICAgUmVuYW1lU2VsZWN0ZWRQcm9qZWN0c1BhdGhUb29sYmFyU1ZHLFxuICAgICAgICAgQ3JlYXRlUHJvamVjdHNEaXJlY3RvcnlQYXRoVG9vbGJhclNWRyB9IGZyb20gXCIuLi8uLi8uLi9pbmRleFwiOyAvLy9cblxuY2xhc3MgVG9vbGJhckRpdiBleHRlbmRzIEVsZW1lbnQge1xuICBjaGlsZEVsZW1lbnRzKCkge1xuICAgIGNvbnN0IFRvb2xiYXJTVkdzID0gW1xuICAgICAgICAgICAgT3BlblJ1YmJpc2hCaW5Ub29sYmFyU1ZHLFxuICAgICAgICAgICAgQ2xvc2VkUnViYmlzaEJpblRvb2xiYXJTVkcsXG4gICAgICAgICAgICBTeW5jaHJvbmlzZVRvb2xiYXJTVkcsXG4gICAgICAgICAgICBSZW5hbWVTZWxlY3RlZFByb2plY3RzUGF0aFRvb2xiYXJTVkcsXG4gICAgICAgICAgICBTaG93UmVsZWFzZXNUb29sYmFyU1ZHLFxuICAgICAgICAgICAgSGlkZVJlbGVhc2VzVG9vbGJhclNWRyxcbiAgICAgICAgICAgIENyZWF0ZVByb2plY3RzRGlyZWN0b3J5UGF0aFRvb2xiYXJTVkcsXG4gICAgICAgICAgICBDcmVhdGVQcm9qZWN0c0ZpbGVQYXRoVG9vbGJhclNWRyxcbiAgICAgICAgICAgIFJlbG9hZFByb2plY3RzQW5kUmVsZWFzZXNUb29sYmFyU1ZHLFxuICAgICAgICAgICAgSm9pblNlc3Npb25Ub29sYmFyU1ZHLFxuICAgICAgICAgICAgQ3JlYXRlU2Vzc2lvblRvb2xiYXJTVkcsXG4gICAgICAgICAgICBMZWF2ZVNlc3Npb25Ub29sYmFyU1ZHLFxuICAgICAgICAgICAgQ29weVNlc3Npb25LZXlUb29sYmFyU1ZHLFxuICAgICAgICAgICAgRmluZEluQWN0aXZlRG9jdW1lbnRUb29sYmFyU1ZHLFxuICAgICAgICAgICAgRmluZEluUHJvamVjdHNBbmRSZWxlYXNlc1Rvb2xiYXJTVkcsXG4gICAgICAgICAgICBFeHBvcnRDdXN0b21HcmFtbWFyc1Rvb2xiYXJTVkcsXG4gICAgICAgICAgICBDbGVhckNvbnNvbGVUb29sYmFyU1ZHXG4gICAgICAgICAgXSxcbiAgICAgICAgICBjaGlsZEVsZW1lbnRzID0gVG9vbGJhclNWR3MubWFwKChUb29sYmFyU1ZHKSA9PlxuXG4gICAgICAgICAgICA8RGl2PlxuICAgICAgICAgICAgICA8VG9vbGJhclNWRyAvPlxuICAgICAgICAgICAgPC9EaXY+XG5cbiAgICAgICAgICApO1xuXG4gICAgcmV0dXJuIGNoaWxkRWxlbWVudHM7XG4gIH1cblxuICBzdGF0aWMgdGFnTmFtZSA9IFwiZGl2XCI7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJ0b29sYmFyXCJcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFRvb2xiYXJEaXYpYFxuXG4gIG1hcmdpbi1ib3R0b206IDJyZW07XG4gIFxuYDtcbiIsICJcInVzZSBzdHJpY3RcIlxuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcImVhc3lcIjtcblxuY2xhc3MgQ29tcHV0ZXJNb2Rlcm5EaXYgZXh0ZW5kcyBFbGVtZW50IHtcbiAgY2hpbGRFbGVtZW50cygpIHtcbiAgICByZXR1cm4gKFtcblxuICAgICAgPHAgc3R5bGU9e3tcbiAgICAgICAgZm9udEZhbWlseTogXCJDb21wdXRlciBNb2Rlcm4gU2VyaWZcIixcbiAgICAgICAgZm9udFdlaWdodDogXCJub3JtYWxcIixcbiAgICAgICAgZm9udFN0eWxlOiBcIm5vcm1hbFwiXG4gICAgICB9fT5cbiAgICAgICAgQ29tcHV0ZXIgTW9kZXJuIFNlcmlmXG4gICAgICA8L3A+LFxuXG4gICAgICA8cCBzdHlsZT17e1xuICAgICAgICBmb250RmFtaWx5OiBcIkNvbXB1dGVyIE1vZGVybiBTZXJpZlwiLFxuICAgICAgICBmb250V2VpZ2h0OiBcIm5vcm1hbFwiLFxuICAgICAgICBmb250U3R5bGU6IFwiaXRhbGljXCJcbiAgICAgIH19PlxuICAgICAgICBDb21wdXRlciBNb2Rlcm4gU2VyaWYgSXRhbGljXG4gICAgICA8L3A+LFxuXG4gICAgICA8cCBzdHlsZT17e1xuICAgICAgICBmb250RmFtaWx5OiBcIkNvbXB1dGVyIE1vZGVybiBTZXJpZlwiLFxuICAgICAgICBmb250V2VpZ2h0OiBcImJvbGRcIixcbiAgICAgICAgZm9udFN0eWxlOiBcIm5vcm1hbFwiXG4gICAgICB9fT5cbiAgICAgICAgQ29tcHV0ZXIgTW9kZXJuIFNlcmlmIEJvbGRcbiAgICAgIDwvcD4sXG5cbiAgICAgIDxwIHN0eWxlPXt7XG4gICAgICAgIGZvbnRGYW1pbHk6IFwiQ29tcHV0ZXIgTW9kZXJuIFNlcmlmXCIsXG4gICAgICAgIGZvbnRXZWlnaHQ6IFwiYm9sZFwiLFxuICAgICAgICBmb250U3R5bGU6IFwiaXRhbGljXCJcbiAgICAgIH19PlxuICAgICAgICBDb21wdXRlciBNb2Rlcm4gU2VyaWYgQm9sZCBJdGFsaWNcbiAgICAgIDwvcD4sXG5cbiAgICAgIDxici8+LFxuXG4gICAgICA8cCBzdHlsZT17e1xuICAgICAgICBmb250RmFtaWx5OiBcIkNvbXB1dGVyIE1vZGVybiBTYW5zXCIsXG4gICAgICAgIGZvbnRXZWlnaHQ6IFwibm9ybWFsXCIsXG4gICAgICAgIGZvbnRTdHlsZTogXCJub3JtYWxcIlxuICAgICAgfX0+XG4gICAgICAgIENvbXB1dGVyIE1vZGVybiBTYW5zXG4gICAgICA8L3A+LFxuXG4gICAgICA8cCBzdHlsZT17e1xuICAgICAgICBmb250RmFtaWx5OiBcIkNvbXB1dGVyIE1vZGVybiBTYW5zXCIsXG4gICAgICAgIGZvbnRXZWlnaHQ6IFwibm9ybWFsXCIsXG4gICAgICAgIGZvbnRTdHlsZTogXCJpdGFsaWNcIlxuICAgICAgfX0+XG4gICAgICAgIENvbXB1dGVyIE1vZGVybiBTYW5zIEl0YWxpY1xuICAgICAgPC9wPixcblxuICAgICAgPHAgc3R5bGU9e3tcbiAgICAgICAgZm9udEZhbWlseTogXCJDb21wdXRlciBNb2Rlcm4gU2Fuc1wiLFxuICAgICAgICBmb250V2VpZ2h0OiBcImJvbGRcIixcbiAgICAgICAgZm9udFN0eWxlOiBcIm5vcm1hbFwiXG4gICAgICB9fT5cbiAgICAgICAgQ29tcHV0ZXIgTW9kZXJuIFNhbnMgQm9sZFxuICAgICAgPC9wPixcblxuICAgICAgPHAgc3R5bGU9e3tcbiAgICAgICAgZm9udEZhbWlseTogXCJDb21wdXRlciBNb2Rlcm4gU2Fuc1wiLFxuICAgICAgICBmb250V2VpZ2h0OiBcImJvbGRcIixcbiAgICAgICAgZm9udFN0eWxlOiBcIml0YWxpY1wiXG4gICAgICB9fT5cbiAgICAgICAgQ29tcHV0ZXIgTW9kZXJuIFNhbnMgQm9sZCBJdGFsaWNcbiAgICAgIDwvcD4sXG5cbiAgICAgIDxici8+LFxuXG4gICAgICA8cCBzdHlsZT17e1xuICAgICAgICBmb250RmFtaWx5OiBcIkNvbXB1dGVyIE1vZGVybiBUeXBld3JpdGVyXCIsXG4gICAgICAgIGZvbnRXZWlnaHQ6IFwibm9ybWFsXCIsXG4gICAgICAgIGZvbnRTdHlsZTogXCJub3JtYWxcIlxuICAgICAgfX0+XG4gICAgICAgIENvbXB1dGVyIE1vZGVybiBUeXBld3JpdGVyXG4gICAgICA8L3A+LFxuXG4gICAgICA8cCBzdHlsZT17e1xuICAgICAgICBmb250RmFtaWx5OiBcIkNvbXB1dGVyIE1vZGVybiBUeXBld3JpdGVyXCIsXG4gICAgICAgIGZvbnRXZWlnaHQ6IFwibm9ybWFsXCIsXG4gICAgICAgIGZvbnRTdHlsZTogXCJpdGFsaWNcIlxuICAgICAgfX0+XG4gICAgICAgIENvbXB1dGVyIE1vZGVybiBUeXBld3JpdGVyIEl0YWxpY1xuICAgICAgPC9wPixcblxuICAgICAgPHAgc3R5bGU9e3tcbiAgICAgICAgZm9udEZhbWlseTogXCJDb21wdXRlciBNb2Rlcm4gVHlwZXdyaXRlclwiLFxuICAgICAgICBmb250V2VpZ2h0OiBcImJvbGRcIixcbiAgICAgICAgZm9udFN0eWxlOiBcIm5vcm1hbFwiXG4gICAgICB9fT5cbiAgICAgICAgQ29tcHV0ZXIgTW9kZXJuIFR5cGV3cml0ZXIgQm9sZFxuICAgICAgPC9wPixcblxuICAgICAgPHAgc3R5bGU9e3tcbiAgICAgICAgZm9udEZhbWlseTogXCJDb21wdXRlciBNb2Rlcm4gVHlwZXdyaXRlclwiLFxuICAgICAgICBmb250V2VpZ2h0OiBcImJvbGRcIixcbiAgICAgICAgZm9udFN0eWxlOiBcIml0YWxpY1wiXG4gICAgICB9fT5cbiAgICAgICAgQ29tcHV0ZXIgTW9kZXJuIFR5cGV3cml0ZXIgQm9sZCBJdGFsaWNcbiAgICAgIDwvcD4sXG5cbiAgICAgIDxici8+LFxuXG4gICAgICA8cCBzdHlsZT17e1xuICAgICAgICBmb250RmFtaWx5OiBcIkNvbXB1dGVyIE1vZGVybiBCcmlnaHRcIixcbiAgICAgICAgZm9udFdlaWdodDogXCJub3JtYWxcIixcbiAgICAgICAgZm9udFN0eWxlOiBcIm5vcm1hbFwiXG4gICAgICB9fT5cbiAgICAgICAgQ29tcHV0ZXIgTW9kZXJuIEJyaWdodFxuICAgICAgPC9wPixcblxuICAgICAgPHAgc3R5bGU9e3tcbiAgICAgICAgZm9udEZhbWlseTogXCJDb21wdXRlciBNb2Rlcm4gQnJpZ2h0XCIsXG4gICAgICAgIGZvbnRXZWlnaHQ6IFwibm9ybWFsXCIsXG4gICAgICAgIGZvbnRTdHlsZTogXCJpdGFsaWNcIlxuICAgICAgfX0+XG4gICAgICAgIENvbXB1dGVyIE1vZGVybiBCcmlnaHQgSXRhbGljXG4gICAgICA8L3A+LFxuXG4gICAgICA8cCBzdHlsZT17e1xuICAgICAgICBmb250RmFtaWx5OiBcIkNvbXB1dGVyIE1vZGVybiBCcmlnaHRcIixcbiAgICAgICAgZm9udFdlaWdodDogXCJib2xkXCIsXG4gICAgICAgIGZvbnRTdHlsZTogXCJub3JtYWxcIlxuICAgICAgfX0+XG4gICAgICAgIENvbXB1dGVyIE1vZGVybiBCcmlnaHQgQm9sZFxuICAgICAgPC9wPixcblxuICAgICAgPHAgc3R5bGU9e3tcbiAgICAgICAgZm9udEZhbWlseTogXCJDb21wdXRlciBNb2Rlcm4gQnJpZ2h0XCIsXG4gICAgICAgIGZvbnRXZWlnaHQ6IFwiYm9sZFwiLFxuICAgICAgICBmb250U3R5bGU6IFwiaXRhbGljXCJcbiAgICAgIH19PlxuICAgICAgICBDb21wdXRlciBNb2Rlcm4gQnJpZ2h0IEJvbGQgSXRhbGljXG4gICAgICA8L3A+LFxuXG4gICAgICA8YnIvPixcblxuICAgICAgPHAgc3R5bGU9e3tcbiAgICAgICAgZm9udEZhbWlseTogXCJDb21wdXRlciBNb2Rlcm4gQ29uY3JldGVcIixcbiAgICAgICAgZm9udFdlaWdodDogXCJub3JtYWxcIixcbiAgICAgICAgZm9udFN0eWxlOiBcIm5vcm1hbFwiXG4gICAgICB9fT5cbiAgICAgICAgQ29tcHV0ZXIgTW9kZXJuIENvbmNyZXRlXG4gICAgICA8L3A+LFxuXG4gICAgICA8cCBzdHlsZT17e1xuICAgICAgICBmb250RmFtaWx5OiBcIkNvbXB1dGVyIE1vZGVybiBDb25jcmV0ZVwiLFxuICAgICAgICBmb250V2VpZ2h0OiBcIm5vcm1hbFwiLFxuICAgICAgICBmb250U3R5bGU6IFwiaXRhbGljXCJcbiAgICAgIH19PlxuICAgICAgICBDb21wdXRlciBNb2Rlcm4gQ29uY3JldGUgSXRhbGljXG4gICAgICA8L3A+LFxuXG4gICAgICA8cCBzdHlsZT17e1xuICAgICAgICBmb250RmFtaWx5OiBcIkNvbXB1dGVyIE1vZGVybiBDb25jcmV0ZVwiLFxuICAgICAgICBmb250V2VpZ2h0OiBcImJvbGRcIixcbiAgICAgICAgZm9udFN0eWxlOiBcIm5vcm1hbFwiXG4gICAgICB9fT5cbiAgICAgICAgQ29tcHV0ZXIgTW9kZXJuIENvbmNyZXRlIEJvbGRcbiAgICAgIDwvcD4sXG5cbiAgICAgIDxwIHN0eWxlPXt7XG4gICAgICAgIGZvbnRGYW1pbHk6IFwiQ29tcHV0ZXIgTW9kZXJuIENvbmNyZXRlXCIsXG4gICAgICAgIGZvbnRXZWlnaHQ6IFwiYm9sZFwiLFxuICAgICAgICBmb250U3R5bGU6IFwiaXRhbGljXCJcbiAgICAgIH19PlxuICAgICAgICBDb21wdXRlciBNb2Rlcm4gQ29uY3JldGUgQm9sZCBJdGFsaWNcbiAgICAgIDwvcD5cblxuICAgIF0pO1xuICB9XG5cbiAgc3RhdGljIHRhZ05hbWUgPSBcImRpdlwiXG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJjb21wdXRlci1tb2Rlcm5cIlxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShDb21wdXRlck1vZGVybkRpdilgXG5cbiAgZm9udC1zaXplOiA0cmVtO1xuICBtYXJnaW4tYm90dG9tOiAycmVtO1xuICBcbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiZWFzeVwiO1xuXG5pbXBvcnQgTWVudURpdiBmcm9tIFwiLi92aWV3L2Rpdi9tZW51XCI7XG5pbXBvcnQgVG9vbGJhckRpdiBmcm9tIFwiLi92aWV3L2Rpdi90b29sYmFyXCI7XG5pbXBvcnQgQ29tcHV0ZXJNb2Rlcm5EaXYgZnJvbSBcIi4vdmlldy9kaXYvY29tcHV0ZXJNb2Rlcm5cIjtcblxuY2xhc3MgVmlldyBleHRlbmRzIEVsZW1lbnQge1xuICBjaGlsZEVsZW1lbnRzKCkge1xuICAgIHJldHVybiAoW1xuXG4gICAgICA8TWVudURpdi8+LFxuICAgICAgPFRvb2xiYXJEaXYvPixcbiAgICAgIDxDb21wdXRlck1vZGVybkRpdi8+XG5cbiAgICBdKTtcbiAgfVxuXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJkaXZcIjtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcInZpZXdcIlxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoVmlldylgXG5cbiAgcGFkZGluZzogMnJlbTtcbiAgXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgXCJqdXh0YXBvc2VcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7XG5cbmltcG9ydCB7IEJvZHkgfSBmcm9tIFwiZWFzeVwiO1xuXG5jb25zdCB7IHJlbmRlclN0eWxlLCByZW5kZXJTdHlsZXMgfSA9IHdpdGhTdHlsZTtcblxuaW1wb3J0IFZpZXcgZnJvbSBcIi4vZXhhbXBsZS92aWV3XCI7XG5pbXBvcnQganVsaWFNb25vU3R5bGUgZnJvbSBcIi4vc3R5bGUvanVsaWFNb25vXCI7XG5pbXBvcnQgY29tcHV0ZXJNb2Rlcm5TdHlsZSBmcm9tIFwiLi9zdHlsZS9jb21wdXRlck1vZGVyblwiO1xuXG5jb25zdCBib2R5ID0gbmV3IEJvZHkoKTtcblxucmVuZGVyU3R5bGVzKCk7XG5cbnJlbmRlclN0eWxlKGNvbXB1dGVyTW9kZXJuU3R5bGUoKSk7XG5cbnJlbmRlclN0eWxlKGp1bGlhTW9ub1N0eWxlKCkpO1xuXG5ib2R5Lm1vdW50KFxuXG4gIDxWaWV3Lz5cblxuKTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7ZUFFcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTixRQUFNLFNBQU4sMkJBQUE7dUJBQ0QsS0FBSyxNQUFJO2dDQURGO0FBRWpCLGFBQUssTUFBTTtBQUNYLGFBQUssT0FBTzs7b0JBSEssU0FBQTs7VUFNbkIsS0FBQTtpQkFBQSxrQkFBQTtBQUNFLG1CQUFPLEtBQUs7Ozs7VUFHZCxLQUFBO2lCQUFBLG1CQUFBO0FBQ0UsbUJBQU8sS0FBSzs7OzthQVhLOzs7OztBQ0ZyQjs7Ozs7Ozs7ZUFFcUI7Ozs7Ozs7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aUJBQ1Y7Y0FJSCxzQkFBQSxjQUFDLEtBQUE7Z0JBQUUsT0FBTztrQkFDUixZQUFZO2tCQUNaLFlBQVk7a0JBQ1osV0FBVzs7aUJBQ1Y7Y0FJSCxzQkFBQSxjQUFDLEtBQUE7Z0JBQUUsT0FBTztrQkFDUixZQUFZO2tCQUNaLFlBQVk7a0JBQ1osV0FBVzs7aUJBQ1Y7Y0FJSCxzQkFBQSxjQUFDLE1BQUE7Y0FFRCxzQkFBQSxjQUFDLEtBQUE7Z0JBQUUsT0FBTztrQkFDUixZQUFZO2tCQUNaLFlBQVk7a0JBQ1osV0FBVzs7aUJBQ1Y7Y0FJSCxzQkFBQSxjQUFDLEtBQUE7Z0JBQUUsT0FBTztrQkFDUixZQUFZO2tCQUNaLFlBQVk7a0JBQ1osV0FBVzs7aUJBQ1Y7Y0FJSCxzQkFBQSxjQUFDLEtBQUE7Z0JBQUUsT0FBTztrQkFDUixZQUFZO2tCQUNaLFlBQVk7a0JBQ1osV0FBVzs7aUJBQ1Y7Y0FJSCxzQkFBQSxjQUFDLEtBQUE7Z0JBQUUsT0FBTztrQkFDUixZQUFZO2tCQUNaLFlBQVk7a0JBQ1osV0FBVzs7aUJBQ1Y7Y0FJSCxzQkFBQSxjQUFDLE1BQUE7Y0FFRCxzQkFBQSxjQUFDLEtBQUE7Z0JBQUUsT0FBTztrQkFDUixZQUFZO2tCQUNaLFlBQVk7a0JBQ1osV0FBVzs7aUJBQ1Y7Y0FJSCxzQkFBQSxjQUFDLEtBQUE7Z0JBQUUsT0FBTztrQkFDUixZQUFZO2tCQUNaLFlBQVk7a0JBQ1osV0FBVzs7aUJBQ1Y7Y0FJSCxzQkFBQSxjQUFDLEtBQUE7Z0JBQUUsT0FBTztrQkFDUixZQUFZO2tCQUNaLFlBQVk7a0JBQ1osV0FBVzs7aUJBQ1Y7Y0FJSCxzQkFBQSxjQUFDLEtBQUE7Z0JBQUUsT0FBTztrQkFDUixZQUFZO2tCQUNaLFlBQVk7a0JBQ1osV0FBVzs7aUJBQ1Y7Y0FJSCxzQkFBQSxjQUFDLE1BQUE7Y0FFRCxzQkFBQSxjQUFDLEtBQUE7Z0JBQUUsT0FBTztrQkFDUixZQUFZO2tCQUNaLFlBQVk7a0JBQ1osV0FBVzs7aUJBQ1Y7Y0FJSCxzQkFBQSxjQUFDLEtBQUE7Z0JBQUUsT0FBTztrQkFDUixZQUFZO2tCQUNaLFlBQVk7a0JBQ1osV0FBVzs7aUJBQ1Y7Y0FJSCxzQkFBQSxjQUFDLEtBQUE7Z0JBQUUsT0FBTztrQkFDUixZQUFZO2tCQUNaLFlBQVk7a0JBQ1osV0FBVzs7aUJBQ1Y7Y0FJSCxzQkFBQSxjQUFDLEtBQUE7Z0JBQUUsT0FBTztrQkFDUixZQUFZO2tCQUNaLFlBQVk7a0JBQ1osV0FBVzs7aUJBQ1Y7Y0FJSCxzQkFBQSxjQUFDLE1BQUE7Y0FFRCxzQkFBQSxjQUFDLEtBQUE7Z0JBQUUsT0FBTztrQkFDUixZQUFZO2tCQUNaLFlBQVk7a0JBQ1osV0FBVzs7aUJBQ1Y7Y0FJSCxzQkFBQSxjQUFDLEtBQUE7Z0JBQUUsT0FBTztrQkFDUixZQUFZO2tCQUNaLFlBQVk7a0JBQ1osV0FBVzs7aUJBQ1Y7Y0FJSCxzQkFBQSxjQUFDLEtBQUE7Z0JBQUUsT0FBTztrQkFDUixZQUFZO2tCQUNaLFlBQVk7a0JBQ1osV0FBVzs7aUJBQ1Y7Y0FJSCxzQkFBQSxjQUFDLEtBQUE7Z0JBQUUsT0FBTztrQkFDUixZQUFZO2tCQUNaLFlBQVk7a0JBQ1osV0FBVzs7aUJBQ1Y7Ozs7O2FBeEtIO3lCQUEwQixNQUFBO0FBK0s5QixxQkEvS0ksbUJBK0tHLFdBQVU7QUFFakIscUJBakxJLG1CQWlMRyxxQkFBb0I7TUFDekIsV0FBVzs7UUFJZixXQUFlLElBQUEsZUFBQSxTQUFVLG1CQUFBOzs7O0FDNUx6Qjs7Ozs7bUNBNEJBLFdBQUE7OztlQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbEJBLFFBQU0sT0FBTix5QkFBQSxTQUFBO2dCQUFNLE9BQUE7aUNBQUE7dUJBQUE7Z0NBQUE7OztvQkFBQSxPQUFBOztVQUNKLEtBQUE7aUJBQUEseUJBQUE7QUFDRSxtQkFBUTtjQUVOLHNCQUFBLGNBQUMsTUFBQSxTQUFPO2NBQ1Isc0JBQUEsY0FBQyxTQUFBLFNBQVU7Y0FDWCxzQkFBQSxjQUFDLGdCQUFBLFNBQWlCOzs7OzthQU5sQjt5QkFBYSxNQUFBO0FBV2pCLHFCQVhJLE1BV0csV0FBVTtBQUVqQixxQkFiSSxNQWFHLHFCQUFvQjtNQUN6QixXQUFXOztRQUlmLFdBQWUsSUFBQSxlQUFBLFNBQVUsTUFBQTs7OztBQzVCekI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRQSxRQUFRLGNBQThCLGVBQUEsUUFBOUI7QUFBUixRQUFxQixlQUFpQixlQUFBLFFBQWpCO0FBTXJCLFFBQU0sT0FBTyxJQUFJLE1BQUE7QUFFakI7QUFFQSxnQkFBWSxJQUFBLGdCQUFBO0FBRVosZ0JBQVksSUFBQSxXQUFBO0FBRVosU0FBSyxNQUVILHNCQUFBLGNBQUMsTUFBQSxTQUFJOzsiLAogICJuYW1lcyI6IFtdCn0K
40969
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL29mZnNldC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvYm91bmRzLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL3V0aWxpdGllcy9vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL3V0aWxpdGllcy9hcnJheS5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvdXRpbGl0aWVzL3N0cmluZy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvdXRpbGl0aWVzL25hbWUuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL3V0aWxpdGllcy9kb20uanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL21peGlucy9lbGVtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy90ZXh0RWxlbWVudC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvdXRpbGl0aWVzL2VsZW1lbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvanN4LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9ldmVudFR5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMva2V5LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvY2xpY2suanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL21peGlucy9zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL3Jlc2l6ZS5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL2V2ZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvbW91c2UuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL21peGlucy9zY3JvbGwuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL3V0aWxpdGllcy9hc3luYy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL2N1c3RvbUV2ZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy91dGlsaXRpZXMvZWxlbWVudC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvZWxlbWVudC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvcmVhY3QuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2VsZW1lbnQvYm9keS5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvZWxlbWVudC9saW5rLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9taXhpbnMvY2hhbmdlLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9pbnB1dEVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2lucHV0RWxlbWVudC9pbnB1dC5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvZWxlbWVudC9idXR0b24uanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL2VsZW1lbnQvc2VsZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9lbGVtZW50L2NoZWNrYm94LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5L3NyYy9pbnB1dEVsZW1lbnQvdGV4dGFyZWEuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL21peGlucy93aW5kb3cuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL3dpbmRvdy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvbWl4aW5zL3NlbGVjdGlvbi5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvZG9jdW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3kvc3JjL21vdXNlQnV0dG9ucy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2p1eHRhcG9zZS9zcmMvanV4dGFwb3NlLmpzIiwgIm5vZGVfbW9kdWxlcy9qdXh0YXBvc2Uvc3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy90YWdOYW1lcy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9sZXZlbHMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvbWV0aG9kcy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9oZWFkZXJzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2tleUNvZGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2VuY29kaW5ncy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9jaGFyYWN0ZXJzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3N0YXR1c0NvZGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL2NvbnRlbnRUeXBlcy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9zdGF0dXNNZXNzYWdlcy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2FycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3V0aWxpdGllcy9wYXRoLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3V0aWxpdGllcy9odHRwLmpzIiwgIm5vZGVfbW9kdWxlcy9uZWNlc3Nhcnkvc3JjL3V0aWxpdGllcy9zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL3ZlcnNpb24uanMiLCAibm9kZV9tb2R1bGVzL25lY2Vzc2FyeS9zcmMvdXRpbGl0aWVzL2FzeW5jaHJvbm91cy5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy91dGlsaXRpZXMvYWpheC5qcyIsICJub2RlX21vZHVsZXMvbmVjZXNzYXJ5L3NyYy9icm93c2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3V0aWxpdGllcy9jb250ZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3R5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL3NpZ25pZmljYW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9ydWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3NwZWNpYWxTeW1ib2xzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3V0aWxpdGllcy9sZXhlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9ibmYvZW50cmllcy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy91dGlsaXRpZXMvdG9rZW4uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvY29tbW9uL2xleGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L3doaXRlc3BhY2UuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvcmVndWxhckV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9kb3VibHlRdW90ZWQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYm5mL2xleGVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL2Jhc2ljL2VudHJpZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9zaW5nbHlRdW90ZWQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZS9weXRob25TdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L2VuZE9mTGluZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZi9weXRob25TdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2YvcHl0aG9uU3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2YuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2YvcHl0aG9uU3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvYmFzaWMvbGV4ZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vc2lnbmlmaWNhbnQvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL3NpZ25pZmljYW50L2NvbW1lbnQvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZS9jU3R5bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWxleGVycy9zcmMvdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2YvY1N0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2YvY1N0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1sZXhlcnMvc3JjL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL21pZGRsZU9mL2NTdHlsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tbGV4ZXJzL3NyYy9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvY3NzL2VudHJpZXMuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL2Nzcy9sZXhlci5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9saWIvY3NzLzw8anN4LWNvbmZpZy1wcmFnbWEuanM+PiIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYm5mL2JuZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29uc3RhbnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvc3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS92ZXJ0aWNhbEJyYW5jaC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL3Rva2Vucy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlL3J1bGVOYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvaG9yaXpvbnRhbEJyYW5jaC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlL2NoaWxkTm9kZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnNlVHJlZS9ub25UZXJtaW5hbE5vZGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvbm9uVGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL25hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3V0aWxpdGllcy9wYXJzZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC90ZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFyc2VUcmVlL3Rlcm1pbmFsTm9kZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS90ZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC90ZXJtaW5hbC9zaWduaWZpY2FudFRva2VuVHlwZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlTmFtZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvbmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC9ub25UZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydFR5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L25vblRlcm1pbmFsL29wdGlvbmFsUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvbm9uVGVybWluYWwvb25lT3JNb3JlUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3V0aWxpdGllcy9ibmYuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL3BhcnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vcnVsZU5hbWUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vcGFydFJ1bGUvdGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vcGFydFJ1bGUvbm9uVGVybWluYWwuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvcGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvcnVsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9ydWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3J1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL2Vycm9yLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L3Rlcm1pbmFsL3dpbGRjYXJkLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2Vycm9yLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2Vycm9yLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvZXBzaWxvbk5vZGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvdGVybWluYWwvZXBzaWxvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC90ZXJtaW5hbC9lcHNpbG9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9lcHNpbG9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3Rlcm1pbmFsU3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2Vwc2lsb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3V0aWxpdGllcy9ub2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9kb2N1bWVudC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydENob2ljZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC9ub25UZXJtaW5hbC9jaG9pY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2RvY3VtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2RvY3VtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9ydWxlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9ydWxlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvd2lsZGNhcmQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvd2lsZGNhcmQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3N0YXRlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9taXhpbnMvcGFyc2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvZW5kT2ZMaW5lTm9kZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS90ZXJtaW5hbC9lbmRPZkxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvdGVybWluYWwvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9lbmRPZkxpbmUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvZW5kT2ZMaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9wYXJ0Q2hvaWNlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL3BhcnRDaG9pY2UuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvcGFydENob2ljZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9xdWFudGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9kZWZpbml0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2RlZmluaXRpb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvZGVmaW5pdGlvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvcHJlY2VkZW5jZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9wcmVjZWRlbmNlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3ByZWNlZGVuY2UuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL2RlZmluaXRpb25zLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0L25vblRlcm1pbmFsL3NlcXVlbmNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9kZWZpbml0aW9ucy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9kZWZpbml0aW9ucy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvcGFydC90ZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS90ZXJtaW5hbFBhcnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL2Nob2ljZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vY2hvaWNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9jaG9pY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi90ZXJtaW5hbFN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9zaWduaWZpY2FudFRva2VuVHlwZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS90ZXJtaW5hbFN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvcGFydC9ub25UZXJtaW5hbC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9wYXJ0UnVsZS9ub25UZXJtaW5hbC9ydWxlTmFtZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9ub25UZXJtaW5hbFBhcnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL3NlcXVlbmNlT2ZQYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvZGVmaW5pdGlvbi9zZXF1ZW5jZU9mUGFydHMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvc2VxdWVuY2VPZlBhcnRzLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJzZVRyZWUvbm9XaGl0ZXNwYWNlTm9kZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS90ZXJtaW5hbC9ub1doaXRlc3BhY2UuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3BhcnQvdGVybWluYWwvbm9XaGl0ZXNwYWNlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ub2RlL2JuZi9ub1doaXRlc3BhY2VQYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL25vV2hpdGVzcGFjZVBhcnQuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvbm9XaGl0ZXNwYWNlUGFydC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvbW9kaWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vbG9va0FoZWFkTW9kaWZpZXJSdWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL2xvb2tBaGVhZE1vZGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9kZWZpbml0aW9uL2FtYmlndW91c01vZGlmaWVyUnVsZS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcnVsZS9hbWJpZ3VvdXNNb2RpZmllci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvcGFydC90ZXJtaW5hbC9yZWd1bGFyRXhwcmVzc2lvbi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvbm9kZS9ibmYvcmVndWxhckV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvcmVndWxhckV4cHJlc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL3F1YW50aWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2RlZmluaXRpb24vcXVhbnRpZmllclJ1bGUuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvb3B0aW9uYWxRdWFudGlmaWVyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL29uZU9yTW9yZVF1YW50aWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL3J1bGUvemVyb09yTW9yZVF1YW50aWZpZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL25vZGUvYm5mL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9ydWxlL3NpZ25pZmljYW50VG9rZW5UeXBlLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy91dGlsaXRpZXMvcnVsZXMuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2JuZi9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLXBhcnNlcnMvc3JjL2Jhc2ljL2JuZi5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvdXRpbGl0aWVzL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvY29tbW9uL3BhcnNlci5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvYmFzaWMvcGFyc2VyLmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1wYXJzZXJzL3NyYy9wYXJ0cy5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tcGFyc2Vycy9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL2Nzcy9ibmYuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL2Nzcy9wYXJzZXIuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvbGliL2Nzcy88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL29jY2FtLWRvbS9zcmMvdXRpbGl0aWVzL2FycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy9vY2NhbS1kb20vc3JjL3NwcmVhZC5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZG9tL3NyYy9xdWVyeS5qcyIsICJub2RlX21vZHVsZXMvb2NjYW0tZG9tL3NyYy91dGlsaXRpZXMvcXVlcnkuanMiLCAibm9kZV9tb2R1bGVzL29jY2FtLWRvbS9zcmMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL2NvbnN0YW50cy5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvdXRpbGl0aWVzL2NvbnRlbnQuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3N0eWxlL2RlY2xhcmF0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL2xpYi9zdHlsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3N0eWxlL2RlY2xhcmF0aW9ucy5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9saWIvc3R5bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9zdHlsZS9ydWxlU2V0LmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9zdHlsZS9ydWxlU2V0cy5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9saWIvc3R5bGUvPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+IiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL3NyYy9zdHlsZS9tZWRpYS5qcyIsICJub2RlX21vZHVsZXMvd2l0aC1zdHlsZS9zcmMvc3R5bGUvbWVkaWFzLmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL2xpYi9zdHlsZS88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3N0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy93aXRoLXN0eWxlL2xpYi88PGpzeC1jb25maWctcHJhZ21hLmpzPj4iLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3V0aWxpdGllcy9zdHlsZXMuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL3V0aWxpdGllcy9jbGFzc05hbWUuanMiLCAibm9kZV9tb2R1bGVzL3dpdGgtc3R5bGUvc3JjL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LXdpdGgtc3R5bGUvc3JjL3V0aWxpdGllcy9jbGFzcy5qcyIsICJub2RlX21vZHVsZXMvZWFzeS13aXRoLXN0eWxlL3NyYy9jb25zdGFudHMuanMiLCAibm9kZV9tb2R1bGVzL2Vhc3ktd2l0aC1zdHlsZS9zcmMvd2l0aFN0eWxlLmpzIiwgIm5vZGVfbW9kdWxlcy9lYXN5LXdpdGgtc3R5bGUvc3JjL2luZGV4LmpzIiwgInNyYy9zdHlsZXMuanMiLCAic3JjL2NvbG91cnMuanMiLCAic3JjL3NjaGVtZS9zeW50YXgvZGVmYXVsdC5qcyIsICJzcmMvc3R5bGUvc3ludGF4L2RlZmF1bHQuanMiLCAic3JjL3NjaGVtZS9zeW50YXgvZmxvcmVuY2UuanMiLCAic3JjL3N0eWxlL3N5bnRheC9mbG9yZW5jZS5qcyIsICJzcmMvc2NoZW1lL3N5bnRheC9wbGFpblRleHQuanMiLCAic3JjL3N0eWxlL3N5bnRheC9tYXJrZG93bi5qcyIsICJzcmMvc2NoZW1lL3N5bnRheC9tZXRhSlNPTi5qcyIsICJzcmMvc3R5bGUvc3ludGF4L21ldGFKU09OLmpzIiwgInNyYy9zdHlsZS9zeW50YXgvcGxhaW5UZXh0LmpzIiwgInNyYy9zY2hlbWUvc3ludGF4L2N1c3RvbUdyYW1tYXJCTkYuanMiLCAic3JjL3N0eWxlL3N5bnRheC9jdXN0b21HcmFtbWFyQk5GLmpzIiwgInNyYy9zdHlsZS9zeW50YXguanMiLCAic3JjL2RlZmF1bHRzLmpzIiwgInNyYy9zdHlsZS9qdWxpYU1vbm8uanMiLCAic3JjL3N0eWxlL2NvbXB1dGVyTW9kZXJuLmpzIiwgInNyYy9taXhpbi9mb250L2NvbW1vbi5qcyIsICJzcmMvbWl4aW4vZm9udC9qdWxpYU1vbm8uanMiLCAic3JjL3NjaGVtZS9jb21tb24uanMiLCAic3JjL3NjaGVtZS9lZGl0b3IuanMiLCAic3JjL3NjaGVtZS9jb25zb2xlLmpzIiwgInNyYy9zY2hlbWUvcHJldmlld1BhbmUuanMiLCAic3JjL3NjaGVtZS9wcmV0dHlQcmludGVyLmpzIiwgInNyYy9zY2hlbWUvd2VsY29tZVNjcmVlbi5qcyIsICJzcmMvc3ZnL2xvZ28uanMiLCAic3JjL3N2Zy5qcyIsICJzcmMvc3ZnL21hcmtlci5qcyIsICJzcmMvc3ZnL25hbWUuanMiLCAic3JjL3N2Zy9uYW1lL2ZpbGUuanMiLCAic3JjL3N2Zy90b2dnbGUuanMiLCAic3JjL3N2Zy90b2dnbGUvdXAuanMiLCAic3JjL3N2Zy9mb2xkLmpzIiwgInNyYy9zdmcvZm9sZC9saW5lLmpzIiwgInNyYy9zdmcvbWVudS5qcyIsICJzcmMvc3ZnL21lbnUvZmxpcC5qcyIsICJzcmMvc3ZnL3RvZ2dsZS9kb3duLmpzIiwgInNyYy9zdmcvZm9sZC9jbG9zZWQuanMiLCAic3JjL3N2Zy9mb2xkL3RvcE9wZW4uanMiLCAic3JjL3N2Zy9uYW1lL2RpcmVjdG9yeS5qcyIsICJzcmMvc3ZnL3RpdGxlLmpzIiwgInNyYy9zdmcvdGl0bGUvZXhwYW5kZWQuanMiLCAic3JjL3N2Zy90aXRsZS9jb2xsYXBzZWQuanMiLCAic3JjL3N2Zy9mb2xkL2JvdHRvbU9wZW4uanMiLCAic3JjL3N2Zy9tZW51L2VtYmVkZGVkTW9kZS5qcyIsICJzcmMvc3ZnL3Rvb2xiYXIuanMiLCAic3JjL3N2Zy90b29sYmFyL2pvaW5TZXNzaW9uLmpzIiwgInNyYy9zdmcvdG9vbGJhci9zeW5jaHJvbmlzZS5qcyIsICJzcmMvc3ZnL3Rvb2xiYXIvc2hvd1JlbGVhc2VzLmpzIiwgInNyYy9zdmcvdG9vbGJhci9oaWRlUmVsZWFzZXMuanMiLCAic3JjL3N2Zy90b29sYmFyL2xlYXZlU2Vzc2lvbi5qcyIsICJzcmMvc3ZnL3Rvb2xiYXIvY2xlYXJDb25zb2xlLmpzIiwgInNyYy9zdmcvdG9vbGJhci9jcmVhdGVTZXNzaW9uLmpzIiwgInNyYy9zdmcvbmFtZS9kaXJlY3RvcnkvcmVsZWFzZS5qcyIsICJzcmMvc3ZnL21lbnUvcHJlc2VudGF0aW9uTW9kZS5qcyIsICJzcmMvc3ZnL21lbnUvZGVjcmVhc2VGb250U2l6ZS5qcyIsICJzcmMvc3ZnL21lbnUvaW5jcmVhc2VGb250U2l6ZS5qcyIsICJzcmMvc3ZnL3Rvb2xiYXIvb3BlblJ1YmJpc2hCaW4uanMiLCAic3JjL3N2Zy90b29sYmFyL2NvcHlTZXNzaW9uS2V5LmpzIiwgInNyYy9zdmcvdG9vbGJhci9jbG9zZWRSdWJiaXNoQmluLmpzIiwgInNyYy9zdmcvbWVudS90b2dnbGVQcmV2aWV3UGFuZU9ubHkuanMiLCAic3JjL3N2Zy9tZW51L3RvZ2dsZVByZXZpZXdQYW5lU3BsaXQuanMiLCAic3JjL3N2Zy90b29sYmFyL2ZpbmRJbkFjdGl2ZURvY3VtZW50LmpzIiwgInNyYy9zdmcvdG9vbGJhci9leHBvcnRDdXN0b21HcmFtbWFycy5qcyIsICJzcmMvc3ZnL21lbnUvdG9nZ2xlUHJldHR5UHJpbnRlck9ubHkuanMiLCAic3JjL3N2Zy9tZW51L3RvZ2dsZVByZXR0eVByaW50ZXJTcGxpdC5qcyIsICJzcmMvc3ZnL3Rvb2xiYXIvY3JlYXRlUHJvamVjdHNGaWxlUGF0aC5qcyIsICJzcmMvc3ZnL3Rvb2xiYXIvZmluZEluUHJvamVjdHNBbmRSZWxlYXNlcy5qcyIsICJzcmMvc3ZnL3Rvb2xiYXIvcmVsb2FkUHJvamVjdHNBbmRSZWxlYXNlcy5qcyIsICJzcmMvc3ZnL3Rvb2xiYXIvcmVuYW1lU2VsZWN0ZWRQcm9qZWN0c1BhdGguanMiLCAic3JjL3N2Zy90b29sYmFyL2NyZWF0ZVByb2plY3RzRGlyZWN0b3J5UGF0aC5qcyIsICJzcmMvaW5kZXguanMiLCAic3JjL2V4YW1wbGUvdmlldy9kaXYuanMiLCAic3JjL2V4YW1wbGUvdmlldy9kaXYvbWVudS5qcyIsICJzcmMvZXhhbXBsZS92aWV3L2Rpdi90b29sYmFyLmpzIiwgInNyYy9leGFtcGxlL3ZpZXcvZGl2L2NvbXB1dGVyTW9kZXJuLmpzIiwgInNyYy9leGFtcGxlL3ZpZXcuanMiLCAic3JjL2V4YW1wbGUuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPZmZzZXQge1xuICBjb25zdHJ1Y3Rvcih0b3AsIGxlZnQpIHtcbiAgICB0aGlzLnRvcCA9IHRvcDtcbiAgICB0aGlzLmxlZnQgPSBsZWZ0O1xuICB9XG5cbiAgZ2V0VG9wKCkge1xuICAgIHJldHVybiB0aGlzLnRvcDtcbiAgfVxuXG4gIGdldExlZnQoKSB7XG4gICAgcmV0dXJuIHRoaXMubGVmdDtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCb3VuZHMge1xuICBjb25zdHJ1Y3Rvcih0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20pIHtcbiAgICB0aGlzLnRvcCA9IHRvcDtcbiAgICB0aGlzLmxlZnQgPSBsZWZ0O1xuICAgIHRoaXMucmlnaHQgPSByaWdodDtcbiAgICB0aGlzLmJvdHRvbSA9IGJvdHRvbTtcbiAgfVxuXG4gIGdldFRvcCgpIHtcbiAgICByZXR1cm4gdGhpcy50b3A7XG4gIH1cblxuICBnZXRMZWZ0KCkge1xuICAgIHJldHVybiB0aGlzLmxlZnQ7XG4gIH1cblxuICBnZXRSaWdodCgpIHtcbiAgICByZXR1cm4gdGhpcy5yaWdodDtcbiAgfVxuXG4gIGdldEJvdHRvbSgpIHtcbiAgICByZXR1cm4gdGhpcy5ib3R0b207XG4gIH1cblxuICBnZXRXaWR0aCgpIHtcbiAgICBjb25zdCB3aWR0aCA9ICh0aGlzLnJpZ2h0IC0gdGhpcy5sZWZ0KTtcblxuICAgIHJldHVybiB3aWR0aDtcbiAgfVxuXG4gIGdldEhlaWdodCgpIHtcbiAgICBjb25zdCBoZWlnaHQgPSAodGhpcy5ib3R0b20gLSB0aGlzLnRvcCk7XG5cbiAgICByZXR1cm4gaGVpZ2h0O1xuICB9XG4gIFxuICBzZXRUb3AodG9wKSB7XG4gICAgdGhpcy50b3AgPSB0b3A7XG4gIH1cblxuICBzZXRMZWZ0KGxlZnQpIHtcbiAgICB0aGlzLmxlZnQgPSBsZWZ0O1xuICB9XG5cbiAgc2V0UmlnaHQocmlnaHQpIHtcbiAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7XG4gIH1cblxuICBzZXRCb3R0b20oYm90dG9tKSB7XG4gICAgdGhpcy5ib3R0b20gPSBib3R0b207XG4gIH1cblxuICBzaGlmdChob3Jpem9udGFsT2Zmc2V0LCB2ZXJ0aWNhbE9mZnNldCkge1xuICAgIHRoaXMudG9wICs9IHZlcnRpY2FsT2Zmc2V0O1xuICAgIHRoaXMubGVmdCArPSBob3Jpem9udGFsT2Zmc2V0O1xuICAgIHRoaXMucmlnaHQgKz0gaG9yaXpvbnRhbE9mZnNldDtcbiAgICB0aGlzLmJvdHRvbSArPSB2ZXJ0aWNhbE9mZnNldDtcbiAgfVxuXG4gIGlzT3ZlcmxhcHBpbmdNb3VzZShtb3VzZVRvcCwgbW91c2VMZWZ0KSB7XG4gICAgcmV0dXJuICggICh0aGlzLnRvcCA8PSBtb3VzZVRvcClcbiAgICAgICAgICAgJiYgKHRoaXMubGVmdCA8PSBtb3VzZUxlZnQpXG4gICAgICAgICAgICYmICh0aGlzLnJpZ2h0ID4gbW91c2VMZWZ0KVxuICAgICAgICAgICAmJiAodGhpcy5ib3R0b20gPiBtb3VzZVRvcCkgICk7XG4gIH1cblxuICBhcmVPdmVybGFwcGluZyhib3VuZHMpIHtcbiAgICBjb25zdCBib3R0b20gPSBib3VuZHMuZ2V0Qm90dG9tKCksXG4gICAgICAgICAgcmlnaHQgPSBib3VuZHMuZ2V0UmlnaHQoKSxcbiAgICAgICAgICBsZWZ0ID0gYm91bmRzLmdldExlZnQoKSxcbiAgICAgICAgICB0b3AgPSBib3VuZHMuZ2V0VG9wKCksXG4gICAgICAgICAgb3ZlcmxhcHBpbmcgPSAoICAodGhpcy50b3AgPCBib3R0b20pXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiAodGhpcy5sZWZ0IDwgcmlnaHQpXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiAodGhpcy5yaWdodCA+IGxlZnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiAodGhpcy5ib3R0b20gPiB0b3ApICApO1xuXG4gICAgcmV0dXJuIG92ZXJsYXBwaW5nO1xuICB9XG5cbiAgc3RhdGljIGZyb21Cb3VuZGluZ0NsaWVudFJlY3QoYm91bmRpbmdDbGllbnRSZWN0KSB7XG4gICAgY29uc3Qgd2luZG93U2Nyb2xsVG9wID0gd2luZG93LnBhZ2VZT2Zmc2V0LCAvLy9cbiAgICAgICAgICB3aW5kb3dTY3JvbGxMZWZ0ID0gd2luZG93LnBhZ2VYT2Zmc2V0LCAgLy8vXG4gICAgICAgICAgdG9wID0gYm91bmRpbmdDbGllbnRSZWN0LnRvcCArIHdpbmRvd1Njcm9sbFRvcCxcbiAgICAgICAgICBsZWZ0ID0gYm91bmRpbmdDbGllbnRSZWN0LmxlZnQgKyB3aW5kb3dTY3JvbGxMZWZ0LFxuICAgICAgICAgIHJpZ2h0ID0gYm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0ICsgd2luZG93U2Nyb2xsTGVmdCxcbiAgICAgICAgICBib3R0b20gPSBib3VuZGluZ0NsaWVudFJlY3QuYm90dG9tICsgd2luZG93U2Nyb2xsVG9wLFxuICAgICAgICAgIGJvdW5kcyA9IG5ldyBCb3VuZHModG9wLCBsZWZ0LCByaWdodCwgYm90dG9tKTtcblxuICAgIHJldHVybiBib3VuZHM7XG4gIH1cblxuICBzdGF0aWMgZnJvbVRvcExlZnRXaWR0aEFuZEhlaWdodCh0b3AsIGxlZnQsIHdpZHRoLCBoZWlnaHQpIHtcbiAgICBjb25zdCBib3R0b20gPSB0b3AgKyBoZWlnaHQsXG4gICAgICAgICAgcmlnaHQgPSBsZWZ0ICsgd2lkdGgsXG4gICAgICAgICAgYm91bmRzID0gbmV3IEJvdW5kcyh0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20pO1xuXG4gICAgcmV0dXJuIGJvdW5kcztcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgRk9SID0gXCJmb3JcIjtcbmV4cG9ydCBjb25zdCBCT0RZID0gXCJib2R5XCI7XG5leHBvcnQgY29uc3QgTk9ORSA9IFwibm9uZVwiO1xuZXhwb3J0IGNvbnN0IERBU0ggPSBcIi1cIjtcbmV4cG9ydCBjb25zdCBTUEFDRSA9IFwiIFwiO1xuZXhwb3J0IGNvbnN0IENMQVNTID0gXCJjbGFzc1wiO1xuZXhwb3J0IGNvbnN0IFdJRFRIID0gXCJ3aWR0aFwiO1xuZXhwb3J0IGNvbnN0IEJMT0NLID0gXCJibG9ja1wiO1xuZXhwb3J0IGNvbnN0IEhFSUdIVCA9IFwiaGVpZ2h0XCI7XG5leHBvcnQgY29uc3QgT0JKRUNUID0gXCJvYmplY3RcIjtcbmV4cG9ydCBjb25zdCBTVFJJTkcgPSBcInN0cmluZ1wiO1xuZXhwb3J0IGNvbnN0IERJU1BMQVkgPSBcImRpc3BsYXlcIjtcbmV4cG9ydCBjb25zdCBCT09MRUFOID0gXCJib29sZWFuXCI7XG5leHBvcnQgY29uc3QgRElTQUJMRUQgPSBcImRpc2FibGVkXCI7XG5leHBvcnQgY29uc3QgRlVOQ1RJT04gPSBcImZ1bmN0aW9uXCI7XG5leHBvcnQgY29uc3QgV0lMRENBUkQgPSBcIipcIjtcbmV4cG9ydCBjb25zdCBIVE1MX0ZPUiA9IFwiaHRtbEZvclwiO1xuZXhwb3J0IGNvbnN0IFRFWFRfSFRNTCA9IFwidGV4dC9odG1sXCI7XG5leHBvcnQgY29uc3QgVU5ERUZJTkVEID0gJ3VuZGVmaW5lZCc7XG5leHBvcnQgY29uc3QgQ0xBU1NfTkFNRSA9IFwiY2xhc3NOYW1lXCI7XG5leHBvcnQgY29uc3QgQUJPVVRfQkxBTksgPSBcImFib3V0OmJsYW5rXCI7XG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbmV4cG9ydCBjb25zdCBTVkdfTkFNRVNQQUNFX1VSSSA9IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjtcbmV4cG9ydCBjb25zdCBERUZBVUxUX1BST1BFUlRJRVMgPSBcImRlZmF1bHRQcm9wZXJ0aWVzXCI7XG5leHBvcnQgY29uc3QgSUdOT1JFRF9QUk9QRVJUSUVTID0gXCJpZ25vcmVkUHJvcGVydGllc1wiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBCT09MRUFOIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZSh0YXJnZXQsIHNvdXJjZSA9IHt9KSB7XG4gIHRhcmdldCA9IHsgIC8vL1xuICAgIC4uLnRhcmdldFxuICB9O1xuXG4gIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXMoc291cmNlKTsgIC8vL1xuXG4gIG5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICBjb25zdCB0YXJnZXRWYWx1ZSA9IHRhcmdldFtuYW1lXSxcbiAgICAgICAgICBzb3VyY2VWYWx1ZSA9IHNvdXJjZVtuYW1lXSxcbiAgICAgICAgICB0YXJnZXRIYXNPd25Qcm9wZXJ0eSA9IHRhcmdldC5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcblxuICAgIHRhcmdldFtuYW1lXSA9IHRhcmdldEhhc093blByb3BlcnR5ID9cbiAgICAgICAgICAgICAgICAgICAgIGNvbWJpbmVWYWx1ZXModGFyZ2V0VmFsdWUsIHNvdXJjZVZhbHVlKSA6XG4gICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVZhbHVlOyAvLy9cbiAgfSk7XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBydW5lKHRhcmdldCwgbmFtZXMgPSBbXSkge1xuICB0YXJnZXQgPSB7ICAvLy9cbiAgICAuLi50YXJnZXRcbiAgfTtcblxuICBuYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0SGFzT3duUHJvcGVydHkgPSB0YXJnZXQuaGFzT3duUHJvcGVydHkobmFtZSk7XG5cbiAgICBpZiAodGFyZ2V0SGFzT3duUHJvcGVydHkpIHtcbiAgICAgIGRlbGV0ZSB0YXJnZXRbbmFtZV07XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBjb21iaW5lVmFsdWVzKHRhcmdldFZhbHVlLCBzb3VyY2VWYWx1ZSkge1xuICBjb25zdCB0YXJnZXRWYWx1ZUJvb2xlYW4gPSBpc1ZhbHVlQm9vbGVhbih0YXJnZXRWYWx1ZSksXG4gICAgICAgIHNvdXJjZVZhbHVlQm9vbGVhbiA9IGlzVmFsdWVCb29sZWFuKHNvdXJjZVZhbHVlKSxcbiAgICAgICAgY29tYmluZWRWYWx1ZSA9ICh0YXJnZXRWYWx1ZUJvb2xlYW4gJiYgc291cmNlVmFsdWVCb29sZWFuKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFZhbHVlIDogLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7dGFyZ2V0VmFsdWV9ICR7c291cmNlVmFsdWV9YDtcblxuICByZXR1cm4gY29tYmluZWRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gaXNWYWx1ZUJvb2xlYW4odmFsdWUpIHtcbiAgY29uc3QgdmFsdWVCb29sZWFuID0gKHR5cGVvZiB2YWx1ZSA9PT0gQk9PTEVBTik7XG5cbiAgcmV0dXJuIHZhbHVlQm9vbGVhbjtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGZpcnN0KGFycmF5KSB7IHJldHVybiBhcnJheVswXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gcHVzaChhcnJheTEsIGFycmF5MikgeyBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShhcnJheTEsIGFycmF5Mik7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGF1Z21lbnQoYXJyYXkxLCBhcnJheTIsIHRlc3QpIHtcbiAgYXJyYXkxID0gWyAuLi5hcnJheTEgXTsgLy8vXG5cbiAgYXJyYXkyLmZvckVhY2goKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gdGVzdChlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICBhcnJheTEucHVzaChlbGVtZW50KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBhcnJheTE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuKGFycmF5KSB7XG4gIHJldHVybiBhcnJheS5yZWR1Y2UoKGFycmF5LCBlbGVtZW50KSA9PiB7XG4gICAgYXJyYXkgPSBhcnJheS5jb25jYXQoZWxlbWVudCk7ICAvLy9cblxuICAgIHJldHVybiBhcnJheTtcbiAgfSwgW10pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3VhcmFudGVlKGFycmF5T3JFbGVtZW50KSB7XG4gIGFycmF5T3JFbGVtZW50ID0gYXJyYXlPckVsZW1lbnQgfHwgW107XG5cbiAgcmV0dXJuIChhcnJheU9yRWxlbWVudCBpbnN0YW5jZW9mIEFycmF5KSA/XG4gICAgICAgICAgICBhcnJheU9yRWxlbWVudCA6XG4gICAgICAgICAgICAgIFthcnJheU9yRWxlbWVudF07XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IERBU0ggfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjYW1lbENhc2VUb1NuYWtlQ2FzZShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC8oW0EtWl0pL2csIChtYXRjaCwgY2hhcmFjdGVyKSA9PiB7XG4gICAgY29uc3QgdXBwZXJDYXNlQ2hhcmFjdGVyID0gY2hhcmFjdGVyLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgc25ha2VDYXNlQ2hhcmFjdGVycyA9IGAke0RBU0h9JHt1cHBlckNhc2VDaGFyYWN0ZXJ9YDtcblxuICAgIHJldHVybiBzbmFrZUNhc2VDaGFyYWN0ZXJzO1xuICB9KTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzU1ZHVGFnTmFtZSh0YWdOYW1lKSB7XG4gIHJldHVybiBzdmdUYWdOYW1lcy5pbmNsdWRlcyh0YWdOYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU1ZHQXR0cmlidXRlTmFtZShhdHRyaWJ1dGVOYW1lKSB7XG4gIHJldHVybiBzdmdBdHRyaWJ1dGVOYW1lcy5pbmNsdWRlcyhhdHRyaWJ1dGVOYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSFRNTEF0dHJpYnV0ZU5hbWUoYXR0cmlidXRlTmFtZSkge1xuICByZXR1cm4gaHRtbEF0dHJpYnV0ZU5hbWVzLmluY2x1ZGVzKGF0dHJpYnV0ZU5hbWUpO1xufVxuXG5jb25zdCBzdmdUYWdOYW1lcyA9IFtcbiAgICAgICAgXCJhbHRHbHlwaFwiLCBcImFuaW1hdGVcIiwgXCJhbmltYXRlQ29sb3JcIiwgXCJhbmltYXRlTW90aW9uXCIsIFwiYW5pbWF0ZVRyYW5zZm9ybVwiLCBcImFuaW1hdGlvblwiLCBcImF1ZGlvXCIsXG4gICAgICAgIFwiY2lyY2xlXCIsIFwiY2xpcFBhdGhcIiwgXCJjb2xvci1wcm9maWxlXCIsIFwiY3Vyc29yXCIsXG4gICAgICAgIFwiZGVmc1wiLCBcImRlc2NcIiwgXCJkaXNjYXJkXCIsXG4gICAgICAgIFwiZWxsaXBzZVwiLFxuICAgICAgICBcImZlQmxlbmRcIiwgXCJmZUNvbG9yTWF0cml4XCIsIFwiZmVDb21wb25lbnRUcmFuc2ZlclwiLCBcImZlQ29tcG9zaXRlXCIsIFwiZmVDb252b2x2ZU1hdHJpeFwiLCBcImZlRGlmZnVzZUxpZ2h0aW5nXCIsIFwiZmVEaXNwbGFjZW1lbnRNYXBcIiwgXCJmZURpc3RhbnRMaWdodFwiLCBcImZlRHJvcFNoYWRvd1wiLCBcImZlRmxvb2RcIiwgXCJmZUZ1bmNBXCIsIFwiZmVGdW5jQlwiLCBcImZlRnVuY0dcIiwgXCJmZUZ1bmNSXCIsIFwiZmVHYXVzc2lhbkJsdXJcIiwgXCJmZUltYWdlXCIsIFwiZmVNZXJnZVwiLCBcImZlTWVyZ2VOb2RlXCIsIFwiZmVNb3JwaG9sb2d5XCIsIFwiZmVPZmZzZXRcIiwgXCJmZVBvaW50TGlnaHRcIiwgXCJmZVNwZWN1bGFyTGlnaHRpbmdcIiwgXCJmZVNwb3RMaWdodFwiLCBcImZlVGlsZVwiLCBcImZlVHVyYnVsZW5jZVwiLCBcImZpbHRlclwiLCBcImZvbnRcIiwgXCJmb250LWZhY2VcIiwgXCJmb250LWZhY2UtZm9ybWF0XCIsIFwiZm9udC1mYWNlLW5hbWVcIiwgXCJmb250LWZhY2UtdXJpXCIsIFwiZm9yZWlnbk9iamVjdFwiLFxuICAgICAgICBcImdcIiwgXCJnbHlwaFwiLCBcImdseXBoUmVmXCIsXG4gICAgICAgIFwiaGFuZGxlclwiLCBcImhhdGNoXCIsIFwiaGF0Y2hwYXRoXCIsIFwiaGtlcm5cIixcbiAgICAgICAgXCJpbWFnZVwiLCBcImxpbmVcIiwgXCJsaW5lYXJHcmFkaWVudFwiLFxuICAgICAgICBcImxpc3RlbmVyXCIsXG4gICAgICAgIFwibWFya2VyXCIsIFwibWFza1wiLCBcIm1lc2hcIiwgXCJtZXNoZ3JhZGllbnRcIiwgXCJtZXNocGF0Y2hcIiwgXCJtZXNocm93XCIsIFwibWV0YWRhdGFcIiwgXCJtaXNzaW5nLWdseXBoXCIsIFwibXBhdGhcIixcbiAgICAgICAgXCJwYXRoXCIsIFwicGF0dGVyblwiLCBcInBvbHlnb25cIiwgXCJwb2x5bGluZVwiLCBcInByZWZldGNoXCIsXG4gICAgICAgIFwicmFkaWFsR3JhZGllbnRcIiwgXCJyZWN0XCIsXG4gICAgICAgIFwic2NyaXB0XCIsIFwic2V0XCIsIFwic29saWRjb2xvclwiLCBcInN0b3BcIiwgXCJzdHlsZVwiLCBcInN2Z1wiLCBcInN3aXRjaFwiLCBcInN5bWJvbFwiLFxuICAgICAgICBcInRicmVha1wiLCBcInRleHRcIiwgXCJ0ZXh0QXJlYVwiLCBcInRleHRQYXRoXCIsIFwidGl0bGVcIiwgXCJ0cmVmXCIsIFwidHNwYW5cIixcbiAgICAgICAgXCJ1bmtub3duXCIsIFwidXNlXCIsXG4gICAgICAgIFwidmlkZW9cIiwgXCJ2aWV3XCIsIFwidmtlcm5cIlxuICAgICAgXSxcbiAgICAgIHN2Z0F0dHJpYnV0ZU5hbWVzID0gW1xuICAgICAgICBcImFjY2VudC1oZWlnaHRcIiwgXCJhY2N1bXVsYXRlXCIsIFwiYWRkaXRpdmVcIiwgXCJhbGlnbm1lbnQtYmFzZWxpbmVcIiwgXCJhbHBoYWJldGljXCIsIFwiYW1wbGl0dWRlXCIsIFwiYXJhYmljLWZvcm1cIiwgXCJhc2NlbnRcIiwgXCJhdHRyaWJ1dGVOYW1lXCIsIFwiYXR0cmlidXRlVHlwZVwiLCBcImF6aW11dGhcIixcbiAgICAgICAgXCJiYW5kd2lkdGhcIiwgXCJiYXNlRnJlcXVlbmN5XCIsIFwiYmFzZVByb2ZpbGVcIiwgXCJiYXNlbGluZS1zaGlmdFwiLCBcImJib3hcIiwgXCJiZWdpblwiLCBcImJpYXNcIiwgXCJieVwiLFxuICAgICAgICBcImNhbGNNb2RlXCIsIFwiY2FwLWhlaWdodFwiLCBcImNsaXBcIiwgXCJjbGFzc05hbWVcIiwgXCJjbGlwLXBhdGhcIiwgXCJjbGlwLXJ1bGVcIiwgXCJjbGlwUGF0aFVuaXRzXCIsIFwiY29sb3JcIiwgXCJjb2xvci1pbnRlcnBvbGF0aW9uXCIsIFwiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzXCIsIFwiY29sb3ItcHJvZmlsZVwiLCBcImNvbG9yLXJlbmRlcmluZ1wiLCBcImNvbnRlbnRTY3JpcHRUeXBlXCIsIFwiY29udGVudFN0eWxlVHlwZVwiLCBcImNyb3Nzb3JpZ2luXCIsIFwiY3Vyc29yXCIsIFwiY3hcIiwgXCJjeVwiLFxuICAgICAgICBcImRcIiwgXCJkZWZhdWx0QWN0aW9uXCIsIFwiZGVzY2VudFwiLCBcImRpZmZ1c2VDb25zdGFudFwiLCBcImRpcmVjdGlvblwiLCBcImRpc3BsYXlcIiwgXCJkaXZpc29yXCIsIFwiZG9taW5hbnQtYmFzZWxpbmVcIiwgXCJkb3dubG9hZFwiLCBcImR1clwiLCBcImR4XCIsIFwiZHlcIixcbiAgICAgICAgXCJlZGdlTW9kZVwiLCBcImVkaXRhYmxlXCIsIFwiZWxldmF0aW9uXCIsIFwiZW5hYmxlLWJhY2tncm91bmRcIiwgXCJlbmRcIiwgXCJldmVudFwiLCBcImV4cG9uZW50XCIsIFwiZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZFwiLFxuICAgICAgICBcImZpbGxcIiwgXCJmaWxsLW9wYWNpdHlcIiwgXCJmaWxsLXJ1bGVcIiwgXCJmaWx0ZXJcIiwgXCJmaWx0ZXJSZXNcIiwgXCJmaWx0ZXJVbml0c1wiLCBcImZsb29kLWNvbG9yXCIsIFwiZmxvb2Qtb3BhY2l0eVwiLCBcImZvY3VzSGlnaGxpZ2h0XCIsIFwiZm9jdXNhYmxlXCIsIFwiZm9udC1mYW1pbHlcIiwgXCJmb250LXNpemVcIiwgXCJmb250LXNpemUtYWRqdXN0XCIsIFwiZm9udC1zdHJldGNoXCIsIFwiZm9udC1zdHlsZVwiLCBcImZvbnQtdmFyaWFudFwiLCBcImZvbnQtd2VpZ2h0XCIsIFwiZm9ybWF0XCIsIFwiZnJcIiwgXCJmcm9tXCIsIFwiZnhcIiwgXCJmeVwiLFxuICAgICAgICBcImcxXCIsIFwiZzJcIiwgXCJnbHlwaC1uYW1lXCIsIFwiZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbFwiLCBcImdseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsXCIsIFwiZ2x5cGhSZWZcIiwgXCJncmFkaWVudFRyYW5zZm9ybVwiLCBcImdyYWRpZW50VW5pdHNcIixcbiAgICAgICAgXCJoYW5kbGVyXCIsIFwiaGFuZ2luZ1wiLCBcImhhdGNoQ29udGVudFVuaXRzXCIsIFwiaGF0Y2hVbml0c1wiLCBcImhlaWdodFwiLCBcImhvcml6LWFkdi14XCIsIFwiaG9yaXotb3JpZ2luLXhcIiwgXCJob3Jpei1vcmlnaW4teVwiLCBcImhyZWZcIiwgXCJocmVmbGFuZ1wiLFxuICAgICAgICBcImlkXCIsIFwiaWRlb2dyYXBoaWNcIiwgXCJpbWFnZS1yZW5kZXJpbmdcIiwgXCJpblwiLCBcImluMlwiLCBcImluaXRpYWxWaXNpYmlsaXR5XCIsIFwiaW50ZXJjZXB0XCIsXG4gICAgICAgIFwia1wiLCBcImsxXCIsIFwiazJcIiwgXCJrM1wiLCBcIms0XCIsIFwia2VybmVsTWF0cml4XCIsIFwia2VybmVsVW5pdExlbmd0aFwiLCBcImtlcm5pbmdcIiwgXCJrZXlQb2ludHNcIiwgXCJrZXlTcGxpbmVzXCIsIFwia2V5VGltZXNcIixcbiAgICAgICAgXCJsZW5ndGhBZGp1c3RcIiwgXCJsZXR0ZXItc3BhY2luZ1wiLCBcImxpZ2h0aW5nLWNvbG9yXCIsIFwibGltaXRpbmdDb25lQW5nbGVcIiwgXCJsb2NhbFwiLFxuICAgICAgICBcIm1hcmtlci1lbmRcIiwgXCJtYXJrZXItbWlkXCIsIFwibWFya2VyLXN0YXJ0XCIsIFwibWFya2VySGVpZ2h0XCIsIFwibWFya2VyVW5pdHNcIiwgXCJtYXJrZXJXaWR0aFwiLCBcIm1hc2tcIiwgXCJtYXNrQ29udGVudFVuaXRzXCIsIFwibWFza1VuaXRzXCIsIFwibWF0aGVtYXRpY2FsXCIsIFwibWF4XCIsIFwibWVkaWFcIiwgXCJtZWRpYUNoYXJhY3RlckVuY29kaW5nXCIsIFwibWVkaWFDb250ZW50RW5jb2RpbmdzXCIsIFwibWVkaWFTaXplXCIsIFwibWVkaWFUaW1lXCIsIFwibWV0aG9kXCIsIFwibWluXCIsIFwibW9kZVwiLFxuICAgICAgICBcIm5hbWVcIiwgXCJuYXYtZG93blwiLCBcIm5hdi1kb3duLWxlZnRcIiwgXCJuYXYtZG93bi1yaWdodFwiLCBcIm5hdi1sZWZ0XCIsIFwibmF2LW5leHRcIiwgXCJuYXYtcHJldlwiLCBcIm5hdi1yaWdodFwiLCBcIm5hdi11cFwiLCBcIm5hdi11cC1sZWZ0XCIsIFwibmF2LXVwLXJpZ2h0XCIsIFwibnVtT2N0YXZlc1wiLFxuICAgICAgICBcIm9ic2VydmVyXCIsIFwib2Zmc2V0XCIsIFwib3BhY2l0eVwiLCBcIm9wZXJhdG9yXCIsIFwib3JkZXJcIiwgXCJvcmllbnRcIiwgXCJvcmllbnRhdGlvblwiLCBcIm9yaWdpblwiLCBcIm92ZXJmbG93XCIsIFwib3ZlcmxheVwiLCBcIm92ZXJsaW5lLXBvc2l0aW9uXCIsIFwib3ZlcmxpbmUtdGhpY2tuZXNzXCIsXG4gICAgICAgIFwicGFub3NlLTFcIiwgXCJwYXRoXCIsIFwicGF0aExlbmd0aFwiLCBcInBhdHRlcm5Db250ZW50VW5pdHNcIiwgXCJwYXR0ZXJuVHJhbnNmb3JtXCIsIFwicGF0dGVyblVuaXRzXCIsIFwicGhhc2VcIiwgXCJwaXRjaFwiLCBcInBsYXliYWNrT3JkZXJcIiwgXCJwbGF5YmFja29yZGVyXCIsIFwicG9pbnRlci1ldmVudHNcIiwgXCJwb2ludHNcIiwgXCJwb2ludHNBdFhcIiwgXCJwb2ludHNBdFlcIiwgXCJwb2ludHNBdFpcIiwgXCJwcmVzZXJ2ZUFscGhhXCIsIFwicHJlc2VydmVBc3BlY3RSYXRpb1wiLCBcInByaW1pdGl2ZVVuaXRzXCIsIFwicHJvcGFnYXRlXCIsXG4gICAgICAgIFwiclwiLCBcInJhZGl1c1wiLCBcInJlZlhcIiwgXCJyZWZZXCIsIFwicmVuZGVyaW5nLWludGVudFwiLCBcInJlcGVhdENvdW50XCIsIFwicmVwZWF0RHVyXCIsIFwicmVxdWlyZWRFeHRlbnNpb25zXCIsIFwicmVxdWlyZWRGZWF0dXJlc1wiLCBcInJlcXVpcmVkRm9udHNcIiwgXCJyZXF1aXJlZEZvcm1hdHNcIiwgXCJyZXN0YXJ0XCIsIFwicmVzdWx0XCIsIFwicm90YXRlXCIsIFwicnhcIiwgXCJyeVwiLFxuICAgICAgICBcInNjYWxlXCIsIFwic2VlZFwiLCBcInNoYXBlLXJlbmRlcmluZ1wiLCBcInNpZGVcIiwgXCJzbG9wZVwiLCBcInNuYXBzaG90VGltZVwiLCBcInNwYWNpbmdcIiwgXCJzcGVjdWxhckNvbnN0YW50XCIsIFwic3BlY3VsYXJFeHBvbmVudFwiLCBcInNwcmVhZE1ldGhvZFwiLCBcInNyY1wiLCBcInN0YXJ0T2Zmc2V0XCIsIFwic3RkRGV2aWF0aW9uXCIsIFwic3RlbWhcIiwgXCJzdGVtdlwiLCBcInN0aXRjaFRpbGVzXCIsIFwic3RvcC1jb2xvclwiLCBcInN0b3Atb3BhY2l0eVwiLCBcInN0cmlrZXRocm91Z2gtcG9zaXRpb25cIiwgXCJzdHJpa2V0aHJvdWdoLXRoaWNrbmVzc1wiLCBcInN0cmluZ1wiLCBcInN0cm9rZVwiLCBcInN0cm9rZS1kYXNoYXJyYXlcIiwgXCJzdHJva2UtZGFzaG9mZnNldFwiLCBcInN0cm9rZS1saW5lY2FwXCIsIFwic3Ryb2tlLWxpbmVqb2luXCIsIFwic3Ryb2tlLW1pdGVybGltaXRcIiwgXCJzdHJva2Utb3BhY2l0eVwiLCBcInN0cm9rZS13aWR0aFwiLCBcInN0eWxlXCIsIFwic3VyZmFjZVNjYWxlXCIsIFwic3luY0JlaGF2aW9yXCIsIFwic3luY0JlaGF2aW9yRGVmYXVsdFwiLCBcInN5bmNNYXN0ZXJcIiwgXCJzeW5jVG9sZXJhbmNlXCIsIFwic3luY1RvbGVyYW5jZURlZmF1bHRcIiwgXCJzeXN0ZW1MYW5ndWFnZVwiLFxuICAgICAgICBcInRhYmxlVmFsdWVzXCIsIFwidGFyZ2V0XCIsIFwidGFyZ2V0WFwiLCBcInRhcmdldFlcIiwgXCJ0ZXh0LWFuY2hvclwiLCBcInRleHQtZGVjb3JhdGlvblwiLCBcInRleHQtcmVuZGVyaW5nXCIsIFwidGV4dExlbmd0aFwiLCBcInRpbWVsaW5lQmVnaW5cIiwgXCJ0aW1lbGluZWJlZ2luXCIsIFwidGl0bGVcIiwgXCJ0b1wiLCBcInRyYW5zZm9ybVwiLCBcInRyYW5zZm9ybUJlaGF2aW9yXCIsIFwidHlwZVwiLFxuICAgICAgICBcInUxXCIsIFwidTJcIiwgXCJ1bmRlcmxpbmUtcG9zaXRpb25cIiwgXCJ1bmRlcmxpbmUtdGhpY2tuZXNzXCIsIFwidW5pY29kZVwiLCBcInVuaWNvZGUtYmlkaVwiLCBcInVuaWNvZGUtcmFuZ2VcIiwgXCJ1bml0cy1wZXItZW1cIixcbiAgICAgICAgXCJ2LWFscGhhYmV0aWNcIiwgXCJ2LWhhbmdpbmdcIiwgXCJ2LWlkZW9ncmFwaGljXCIsIFwidi1tYXRoZW1hdGljYWxcIiwgXCJ2YWx1ZXNcIiwgXCJ2ZXJzaW9uXCIsIFwidmVydC1hZHYteVwiLCBcInZlcnQtb3JpZ2luLXhcIiwgXCJ2ZXJ0LW9yaWdpbi15XCIsIFwidmlld0JveFwiLCBcInZpZXdUYXJnZXRcIiwgXCJ2aXNpYmlsaXR5XCIsXG4gICAgICAgIFwid2lkdGhcIiwgXCJ3aWR0aHNcIiwgXCJ3b3JkLXNwYWNpbmdcIiwgXCJ3cml0aW5nLW1vZGVcIixcbiAgICAgICAgXCJ4XCIsIFwieC1oZWlnaHRcIiwgXCJ4MVwiLCBcIngyXCIsIFwieENoYW5uZWxTZWxlY3RvclwiLFxuICAgICAgICBcInlcIiwgXCJ5MVwiLCBcInkyXCIsIFwieUNoYW5uZWxTZWxlY3RvclwiLFxuICAgICAgICBcInpcIiwgXCJ6b29tQW5kUGFuXCJcbiAgICAgIF0sXG4gICAgICBodG1sQXR0cmlidXRlTmFtZXMgPSBbXG4gICAgICAgIFwiYWNjZXB0XCIsIFwiYWNjZXB0Q2hhcnNldFwiLCBcImFjY2Vzc0tleVwiLCBcImFjdGlvblwiLCBcImFsbG93XCIsIFwiYWxsb3dGdWxsU2NyZWVuXCIsIFwiYWxsb3dUcmFuc3BhcmVuY3lcIiwgXCJhbHRcIiwgXCJhc3luY1wiLCBcImF1dG9Db21wbGV0ZVwiLCBcImF1dG9Gb2N1c1wiLCBcImF1dG9QbGF5XCIsXG4gICAgICAgIFwiY2FwdHVyZVwiLCBcImNlbGxQYWRkaW5nXCIsIFwiY2VsbFNwYWNpbmdcIiwgXCJjaGFsbGVuZ2VcIiwgXCJjaGFyU2V0XCIsIFwiY2hlY2tlZFwiLCBcImNpdGVcIiwgXCJjbGFzc0lEXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sU3BhblwiLCBcImNvbHNcIiwgXCJjb250ZW50XCIsIFwiY29udGVudEVkaXRhYmxlXCIsIFwiY29udGV4dE1lbnVcIiwgXCJjb250cm9sc1wiLCBcImNvb3Jkc1wiLCBcImNyb3NzT3JpZ2luXCIsXG4gICAgICAgIFwiZGF0YVwiLCBcImRhdGVUaW1lXCIsIFwiZGVmYXVsdFwiLCBcImRlZmVyXCIsIFwiZGlyXCIsIFwiZGlzYWJsZWRcIiwgXCJkb3dubG9hZFwiLCBcImRyYWdnYWJsZVwiLFxuICAgICAgICBcImVuY1R5cGVcIixcbiAgICAgICAgXCJmb3JtXCIsIFwiZm9ybUFjdGlvblwiLCBcImZvcm1FbmNUeXBlXCIsIFwiZm9ybU1ldGhvZFwiLCBcImZvcm1Ob1ZhbGlkYXRlXCIsIFwiZm9ybVRhcmdldFwiLCBcImZyYW1lQm9yZGVyXCIsXG4gICAgICAgIFwiaGVhZGVyc1wiLCBcImhlaWdodFwiLCBcImhpZGRlblwiLCBcImhpZ2hcIiwgXCJocmVmXCIsIFwiaHJlZkxhbmdcIiwgXCJodG1sRm9yXCIsIFwiaHR0cEVxdWl2XCIsXG4gICAgICAgIFwiaWNvblwiLCBcImlkXCIsIFwiaW5wdXRNb2RlXCIsIFwiaW50ZWdyaXR5XCIsIFwiaXNcIixcbiAgICAgICAgXCJrZXlQYXJhbXNcIiwgXCJrZXlUeXBlXCIsIFwia2luZFwiLFxuICAgICAgICBcImxhYmVsXCIsIFwibGFuZ1wiLCBcImxpc3RcIiwgXCJsb29wXCIsIFwibG93XCIsXG4gICAgICAgIFwibWFuaWZlc3RcIiwgXCJtYXJnaW5IZWlnaHRcIiwgXCJtYXJnaW5XaWR0aFwiLCBcIm1heFwiLCBcIm1heExlbmd0aFwiLCBcIm1lZGlhXCIsIFwibWVkaWFHcm91cFwiLCBcIm1ldGhvZFwiLCBcIm1pblwiLCBcIm1pbkxlbmd0aFwiLCBcIm11bHRpcGxlXCIsIFwibXV0ZWRcIixcbiAgICAgICAgXCJuYW1lXCIsIFwibm9WYWxpZGF0ZVwiLCBcIm5vbmNlXCIsXG4gICAgICAgIFwib3BlblwiLCBcIm9wdGltdW1cIixcbiAgICAgICAgXCJwYXR0ZXJuXCIsIFwicGxhY2Vob2xkZXJcIiwgXCJwb3N0ZXJcIiwgXCJwcmVsb2FkXCIsIFwicHJvZmlsZVwiLFxuICAgICAgICBcInJhZGlvR3JvdXBcIiwgXCJyZWFkT25seVwiLCBcInJlbFwiLCBcInJlcXVpcmVkXCIsIFwicmV2ZXJzZWRcIiwgXCJyb2xlXCIsIFwicm93U3BhblwiLCBcInJvd3NcIixcbiAgICAgICAgXCJzYW5kYm94XCIsIFwic2NvcGVcIiwgXCJzY29wZWRcIiwgXCJzY3JvbGxpbmdcIiwgXCJzZWFtbGVzc1wiLCBcInNlbGVjdGVkXCIsIFwic2hhcGVcIiwgXCJzaXplXCIsIFwic2l6ZXNcIiwgXCJzcGFuXCIsIFwic3BlbGxDaGVja1wiLCBcInNyY1wiLCBcInNyY0RvY1wiLCBcInNyY0xhbmdcIiwgXCJzcmNTZXRcIiwgXCJzdGFydFwiLCBcInN0ZXBcIiwgXCJzdHlsZVwiLCBcInN1bW1hcnlcIixcbiAgICAgICAgXCJ0YWJJbmRleFwiLCBcInRhcmdldFwiLCBcInRpdGxlXCIsIFwidHlwZVwiLFxuICAgICAgICBcInVzZU1hcFwiLFxuICAgICAgICBcInZhbHVlXCIsXG4gICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgXCJ3bW9kZVwiLFxuICAgICAgICBcIndyYXBcIlxuICAgICAgXTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgcHVzaCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IFdJTERDQVJEIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gZWxlbWVudHNGcm9tRE9NRWxlbWVudHMoZG9tRWxlbWVudHMpIHtcbiAgY29uc3QgZG9tRWxlbWVudHNXaXRoRWxlbWVudHMgPSBmaWx0ZXJET01Ob2Rlcyhkb21FbGVtZW50cywgKGRvbUVsZW1lbnQpID0+IHtcbiAgICAgICAgICBpZiAoKGRvbUVsZW1lbnQuX19lbGVtZW50X18pKSB7IC8vL1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgZWxlbWVudHMgPSBkb21FbGVtZW50c1dpdGhFbGVtZW50cy5tYXAoKGRvbUVsZW1lbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9tRWxlbWVudC5fX2VsZW1lbnRfXzsgLy8vXG5cbiAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIGVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNjZW5kYW50RE9NTm9kZXNGcm9tRE9NTm9kZShkb21Ob2RlLCBoZWlnaHQsIGFzY2VuZGFudERPTU5vZGVzID0gW10pIHtcbiAgaWYgKGhlaWdodCA+IDApIHtcbiAgICBjb25zdCBwYXJlbnRET01Ob2RlID0gZG9tTm9kZS5wYXJlbnRFbGVtZW50OyAgLy8vXG5cbiAgICBpZiAocGFyZW50RE9NTm9kZSAhPT0gbnVsbCkge1xuICAgICAgYXNjZW5kYW50RE9NTm9kZXMucHVzaChwYXJlbnRET01Ob2RlKTtcblxuICAgICAgaGVpZ2h0LS07XG5cbiAgICAgIGFzY2VuZGFudERPTU5vZGVzRnJvbURPTU5vZGUocGFyZW50RE9NTm9kZSwgaGVpZ2h0LCBhc2NlbmRhbnRET01Ob2Rlcyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFzY2VuZGFudERPTU5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVzY2VuZGFudERPTU5vZGVzRnJvbURPTU5vZGUoZG9tTm9kZSwgZGVwdGgsIGRlc2NlbmRhbnRET01Ob2RlcyA9IFtdKSB7XG4gIGlmIChkZXB0aCA+IDApIHtcbiAgICBjb25zdCBjaGlsZERPTU5vZGVzID0gZG9tTm9kZS5jaGlsZE5vZGVzOyAgLy8vXG5cbiAgICBwdXNoKGRlc2NlbmRhbnRET01Ob2RlcywgY2hpbGRET01Ob2Rlcyk7XG5cbiAgICBkZXB0aC0tO1xuXG4gICAgY2hpbGRET01Ob2Rlcy5mb3JFYWNoKChjaGlsZERPTU5vZGUpID0+IHtcbiAgICAgIGRlc2NlbmRhbnRET01Ob2Rlc0Zyb21ET01Ob2RlKGNoaWxkRE9NTm9kZSwgZGVwdGgsIGRlc2NlbmRhbnRET01Ob2Rlcyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZGVzY2VuZGFudERPTU5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyRE9NTm9kZXNCeVNlbGVjdG9yKGRvbU5vZGVzLCBzZWxlY3Rvcikge1xuICBjb25zdCBmaWx0ZXJlZERPTU5vZGVzID0gZmlsdGVyRE9NTm9kZXMoZG9tTm9kZXMsIChkb21Ob2RlKSA9PiB7XG4gICAgaWYgKGRvbU5vZGVNYXRjaGVzU2VsZWN0b3IoZG9tTm9kZSwgc2VsZWN0b3IpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBmaWx0ZXJlZERPTU5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZG9tTm9kZU1hdGNoZXNTZWxlY3Rvcihkb21Ob2RlLCBzZWxlY3Rvcikge1xuICBjb25zdCBkb21Ob2RlVHlwZSA9IGRvbU5vZGUubm9kZVR5cGU7IC8vL1xuXG4gIHN3aXRjaCAoZG9tTm9kZVR5cGUpIHtcbiAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOiB7XG4gICAgICBjb25zdCBkb21FbGVtZW50ID0gZG9tTm9kZTsgLy8vXG5cbiAgICAgIHJldHVybiBkb21FbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpO1xuICAgIH1cblxuICAgIGNhc2UgTm9kZS5URVhUX05PREU6IHtcbiAgICAgIGlmIChzZWxlY3RvciA9PT0gV0lMRENBUkQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyRE9NTm9kZXMoZG9tTm9kZXMsIHRlc3QpIHtcbiAgY29uc3QgZmlsdGVyZWRET01Ob2RlcyA9IFtdLFxuICAgICAgICBkb21Ob2Rlc0xlbmd0aCA9IGRvbU5vZGVzLmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZG9tTm9kZXNMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBkb21Ob2RlID0gZG9tTm9kZXNbaW5kZXhdLFxuICAgICAgICAgIHJlc3VsdCA9IHRlc3QoZG9tTm9kZSk7XG5cbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICBmaWx0ZXJlZERPTU5vZGVzLnB1c2goZG9tTm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZpbHRlcmVkRE9NTm9kZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgV0lMRENBUkQgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBkb21Ob2RlTWF0Y2hlc1NlbGVjdG9yLCBlbGVtZW50c0Zyb21ET01FbGVtZW50cywgZmlsdGVyRE9NTm9kZXNCeVNlbGVjdG9yLCBhc2NlbmRhbnRET01Ob2Rlc0Zyb21ET01Ob2RlLCBkZXNjZW5kYW50RE9NTm9kZXNGcm9tRE9NTm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZG9tXCI7XG5cbmZ1bmN0aW9uIGdldFBhcmVudEVsZW1lbnQoc2VsZWN0b3IgPSBXSUxEQ0FSRCkge1xuICBsZXQgcGFyZW50RWxlbWVudCA9IG51bGw7XG5cbiAgY29uc3QgcGFyZW50RE9NRWxlbWVudCA9IHRoaXMuZG9tRWxlbWVudC5wYXJlbnRFbGVtZW50OyAvLy9cblxuICBpZiAocGFyZW50RE9NRWxlbWVudCAhPT0gbnVsbCkge1xuICAgIGlmIChwYXJlbnRET01FbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpKSB7XG4gICAgICBjb25zdCBwYXJlbnRET01FbGVtZW50cyA9IFtcbiAgICAgICAgICAgICAgcGFyZW50RE9NRWxlbWVudFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHBhcmVudEVsZW1lbnRzID0gZWxlbWVudHNGcm9tRE9NRWxlbWVudHMocGFyZW50RE9NRWxlbWVudHMpLFxuICAgICAgICAgICAgZmlyc3RQYXJlbnRFbGVtZW50ID0gZmlyc3QocGFyZW50RWxlbWVudHMpO1xuXG4gICAgICBwYXJlbnRFbGVtZW50ID0gZmlyc3RQYXJlbnRFbGVtZW50IHx8IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcmVudEVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGdldENoaWxkRWxlbWVudHMoc2VsZWN0b3IgPSBXSUxEQ0FSRCkge1xuICBjb25zdCBjaGlsZERPTU5vZGVzID0gdGhpcy5kb21FbGVtZW50LmNoaWxkTm9kZXMsIC8vL1xuICAgICAgICBjaGlsZERPTUVsZW1lbnRzID0gZmlsdGVyRE9NTm9kZXNCeVNlbGVjdG9yKGNoaWxkRE9NTm9kZXMsIHNlbGVjdG9yKSxcbiAgICAgICAgY2hpbGRFbGVtZW50cyA9IGVsZW1lbnRzRnJvbURPTUVsZW1lbnRzKGNoaWxkRE9NRWxlbWVudHMpO1xuXG4gIHJldHVybiBjaGlsZEVsZW1lbnRzO1xufVxuXG5mdW5jdGlvbiBnZXRBc2NlbmRhbnRFbGVtZW50cyhzZWxlY3RvciA9IFdJTERDQVJELCBtYXhpbXVtSGVpZ2h0ID0gSW5maW5pdHkpIHtcbiAgY29uc3QgaGVpZ2h0ID0gbWF4aW11bUhlaWdodCwgLy8vXG4gICAgICAgIGRvbU5vZGUgPSB0aGlzLmRvbUVsZW1lbnQsICAvLy9cbiAgICAgICAgYXNjZW5kYW50RE9NTm9kZXMgPSBhc2NlbmRhbnRET01Ob2Rlc0Zyb21ET01Ob2RlKGRvbU5vZGUsIGhlaWdodCksXG4gICAgICAgIGFzY2VuZGFudERPTUVsZW1lbnRzID0gZmlsdGVyRE9NTm9kZXNCeVNlbGVjdG9yKGFzY2VuZGFudERPTU5vZGVzLCBzZWxlY3RvciksXG4gICAgICAgIGFzY2VuZGFudEVsZW1lbnRzID0gZWxlbWVudHNGcm9tRE9NRWxlbWVudHMoYXNjZW5kYW50RE9NRWxlbWVudHMpO1xuXG4gIHJldHVybiBhc2NlbmRhbnRFbGVtZW50cztcbn1cblxuZnVuY3Rpb24gZ2V0RGVzY2VuZGFudEVsZW1lbnRzKHNlbGVjdG9yID0gV0lMRENBUkQsIG1heGltdW1EZXB0aCA9IEluZmluaXR5KSB7XG4gIGNvbnN0IGRlcHRoID0gbWF4aW11bURlcHRoLCAvLy9cbiAgICAgICAgZG9tTm9kZSA9IHRoaXMuZG9tRWxlbWVudCwgIC8vL1xuICAgICAgICBkZXNjZW5kYW50RE9NTm9kZXMgPSBkZXNjZW5kYW50RE9NTm9kZXNGcm9tRE9NTm9kZShkb21Ob2RlLCBkZXB0aCksXG4gICAgICAgIGRlc2NlbmRhbnRET01FbGVtZW50cyA9IGZpbHRlckRPTU5vZGVzQnlTZWxlY3RvcihkZXNjZW5kYW50RE9NTm9kZXMsIHNlbGVjdG9yKSxcbiAgICAgICAgZGVzY2VuZGFudEVsZW1lbnRzID0gZWxlbWVudHNGcm9tRE9NRWxlbWVudHMoZGVzY2VuZGFudERPTUVsZW1lbnRzKTtcblxuICByZXR1cm4gZGVzY2VuZGFudEVsZW1lbnRzO1xufVxuXG5mdW5jdGlvbiBnZXROZXh0U2libGluZ0VsZW1lbnQoc2VsZWN0b3IgPSBXSUxEQ0FSRCkge1xuICBsZXQgbmV4dFNpYmxpbmdFbGVtZW50ID0gbnVsbDtcblxuICBjb25zdCBuZXh0U2libGluZ0RPTU5vZGUgPSB0aGlzLmRvbUVsZW1lbnQubmV4dFNpYmxpbmc7IC8vL1xuXG4gIGlmICgobmV4dFNpYmxpbmdET01Ob2RlICE9PSBudWxsKSAmJiBkb21Ob2RlTWF0Y2hlc1NlbGVjdG9yKG5leHRTaWJsaW5nRE9NTm9kZSwgc2VsZWN0b3IpKSB7XG4gICAgbmV4dFNpYmxpbmdFbGVtZW50ID0gbmV4dFNpYmxpbmdET01Ob2RlLl9fZWxlbWVudF9fIHx8IG51bGw7XG4gIH1cblxuICByZXR1cm4gbmV4dFNpYmxpbmdFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBnZXRQcmV2aW91c1NpYmxpbmdFbGVtZW50KHNlbGVjdG9yID0gV0lMRENBUkQpIHtcbiAgbGV0IHByZXZpb3VzU2libGluZ0VsZW1lbnQgPSBudWxsO1xuXG4gIGNvbnN0IHByZXZpb3VzU2libGluZ0RPTU5vZGUgPSB0aGlzLmRvbUVsZW1lbnQucHJldmlvdXNTaWJsaW5nOyAgLy8vXG5cbiAgaWYgKChwcmV2aW91c1NpYmxpbmdET01Ob2RlICE9PSBudWxsKSAmJiBkb21Ob2RlTWF0Y2hlc1NlbGVjdG9yKHByZXZpb3VzU2libGluZ0RPTU5vZGUsIHNlbGVjdG9yKSkge1xuICAgIHByZXZpb3VzU2libGluZ0VsZW1lbnQgPSBwcmV2aW91c1NpYmxpbmdET01Ob2RlLl9fZWxlbWVudF9fIHx8IG51bGw7XG4gIH1cblxuICByZXR1cm4gcHJldmlvdXNTaWJsaW5nRWxlbWVudDtcbn1cblxuY29uc3QgZWxlbWVudE1peGlucyA9IHtcbiAgZ2V0UGFyZW50RWxlbWVudCxcbiAgZ2V0Q2hpbGRFbGVtZW50cyxcbiAgZ2V0QXNjZW5kYW50RWxlbWVudHMsXG4gIGdldERlc2NlbmRhbnRFbGVtZW50cyxcbiAgZ2V0TmV4dFNpYmxpbmdFbGVtZW50LFxuICBnZXRQcmV2aW91c1NpYmxpbmdFbGVtZW50XG59O1xuXG5leHBvcnQgZGVmYXVsdCBlbGVtZW50TWl4aW5zO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgT2Zmc2V0IGZyb20gXCIuL29mZnNldFwiO1xuaW1wb3J0IEJvdW5kcyBmcm9tIFwiLi9ib3VuZHNcIjtcbmltcG9ydCBlbGVtZW50TWl4aW5zIGZyb20gXCIuL21peGlucy9lbGVtZW50XCI7XG5cbmNsYXNzIFRleHRFbGVtZW50IHtcbiAgY29uc3RydWN0b3IodGV4dCkge1xuICAgIHRoaXMuZG9tRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpOyAvLy9cblxuICAgIHRoaXMuZG9tRWxlbWVudC5fX2VsZW1lbnRfXyA9IHRoaXM7IC8vL1xuICB9XG5cbiAgZ2V0RE9NRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5kb21FbGVtZW50O1xuICB9XG5cbiAgZ2V0VGV4dCgpIHtcbiAgICBjb25zdCBub2RlVmFsdWUgPSB0aGlzLmRvbUVsZW1lbnQubm9kZVZhbHVlLFxuICAgICAgICAgIHRleHQgPSBub2RlVmFsdWU7IC8vL1xuXG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cblxuICBzZXRUZXh0KHRleHQpIHtcbiAgICBjb25zdCBub2RlVmFsdWUgPSB0ZXh0OyAvLy9cblxuICAgIHRoaXMuZG9tRWxlbWVudC5ub2RlVmFsdWUgPSBub2RlVmFsdWU7XG4gIH1cblxuICBnZXRPZmZzZXQoKSB7XG4gICAgY29uc3QgdG9wID0gdGhpcy5kb21FbGVtZW50Lm9mZnNldFRvcCwgIC8vL1xuICAgICAgICAgIGxlZnQgPSB0aGlzLmRvbUVsZW1lbnQub2Zmc2V0TGVmdCwgIC8vL1xuICAgICAgICAgIG9mZnNldCA9IG5ldyBPZmZzZXQodG9wLCBsZWZ0KTtcblxuICAgIHJldHVybiBvZmZzZXQ7XG4gIH1cblxuICBnZXRCb3VuZHMoKSB7XG4gICAgY29uc3QgYm91bmRpbmdDbGllbnRSZWN0ID0gdGhpcy5kb21FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxuICAgICAgICAgIGJvdW5kcyA9IEJvdW5kcy5mcm9tQm91bmRpbmdDbGllbnRSZWN0KGJvdW5kaW5nQ2xpZW50UmVjdCk7XG5cbiAgICByZXR1cm4gYm91bmRzO1xuICB9XG5cbiAgZ2V0V2lkdGgoKSB7XG4gICAgY29uc3QgY2xpZW50V2lkdGggPSB0aGlzLmRvbUVsZW1lbnQuY2xpZW50V2lkdGgsXG4gICAgICAgICAgd2lkdGggPSBjbGllbnRXaWR0aDsgIC8vL1xuXG4gICAgcmV0dXJuIHdpZHRoO1xuICB9XG5cbiAgZ2V0SGVpZ2h0KCkge1xuICAgIGNvbnN0IGNsaWVudEhlaWdodCA9IHRoaXMuZG9tRWxlbWVudC5jbGllbnRIZWlnaHQsXG4gICAgICAgICAgaGVpZ2h0ID0gY2xpZW50SGVpZ2h0OyAgLy8vXG5cbiAgICByZXR1cm4gaGVpZ2h0O1xuICB9XG5cbiAgcHJlcGVuZFRvKHBhcmVudEVsZW1lbnQpIHsgcGFyZW50RWxlbWVudC5wcmVwZW5kKHRoaXMpOyB9XG5cbiAgYXBwZW5kVG8ocGFyZW50RWxlbWVudCkgeyBwYXJlbnRFbGVtZW50LmFwcGVuZCh0aGlzKTsgfVxuXG4gIGFkZFRvKHBhcmVudEVsZW1lbnQpIHsgcGFyZW50RWxlbWVudC5hZGQodGhpcyk7IH1cblxuICByZW1vdmVGcm9tKHBhcmVudEVsZW1lbnQpIHsgcGFyZW50RWxlbWVudC5yZW1vdmUodGhpcyk7IH1cblxuICBpbnNlcnRCZWZvcmUoc2libGluZ0VsZW1lbnQpIHtcbiAgICBjb25zdCBwYXJlbnRET01Ob2RlID0gc2libGluZ0VsZW1lbnQuZG9tRWxlbWVudC5wYXJlbnROb2RlLCAvLy9cbiAgICAgICAgICBzaWJsaW5nRE9NRWxlbWVudCA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQ7ICAvLy9cblxuICAgIHBhcmVudERPTU5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuZG9tRWxlbWVudCwgc2libGluZ0RPTUVsZW1lbnQpO1xuICB9XG5cbiAgaW5zZXJ0QWZ0ZXIoc2libGluZ0VsZW1lbnQpIHtcbiAgICBjb25zdCBwYXJlbnRET01Ob2RlID0gc2libGluZ0VsZW1lbnQuZG9tRWxlbWVudC5wYXJlbnROb2RlLCAvLy9cbiAgICAgICAgICBzaWJsaW5nRE9NRWxlbWVudCA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQ7ICAvLy9cblxuICAgIHBhcmVudERPTU5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuZG9tRWxlbWVudCwgc2libGluZ0RPTUVsZW1lbnQubmV4dFNpYmxpbmcpOyAgLy8vXG4gIH1cblxuICByZW1vdmUoKSB7XG4gICAgdGhpcy5kb21FbGVtZW50LnJlbW92ZSgpO1xuICB9XG59XG5cbk9iamVjdC5hc3NpZ24oVGV4dEVsZW1lbnQucHJvdG90eXBlLCBlbGVtZW50TWl4aW5zKTtcblxuZXhwb3J0IGRlZmF1bHQgVGV4dEVsZW1lbnQ7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXh0RWxlbWVudCBmcm9tIFwiLi4vdGV4dEVsZW1lbnRcIjtcblxuaW1wb3J0IHsgU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRmFsc2V5RWxlbWVudHMoZWxlbWVudHMpIHtcbiAgZWxlbWVudHMgPSBlbGVtZW50cy5yZWR1Y2UoKGVsZW1lbnRzLCBlbGVtZW50KSA9PiB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnRzO1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIGVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVN0cmluZ3NXaXRoVGV4dEVsZW1lbnRzKGVsZW1lbnRzKSB7XG4gIGVsZW1lbnRzID0gZWxlbWVudHMubWFwKChlbGVtZW50KSA9PiB7ICAvLy9cbiAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT09IFNUUklORykge1xuICAgICAgY29uc3QgdGV4dCA9IGVsZW1lbnQsICAvLy9cbiAgICAgICAgICAgIHRleHRFbGVtZW50ID0gbmV3IFRleHRFbGVtZW50KHRleHQpO1xuXG4gICAgICBlbGVtZW50ID0gdGV4dEVsZW1lbnQ7IC8vL1xuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50O1xuICB9KTtcblxuICByZXR1cm4gZWxlbWVudHM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNvbWJpbmUsIHBydW5lIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9vYmplY3RcIjtcbmltcG9ydCB7IGZpcnN0LCBndWFyYW50ZWUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBjYW1lbENhc2VUb1NuYWtlQ2FzZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgeyBpc0hUTUxBdHRyaWJ1dGVOYW1lLCBpc1NWR0F0dHJpYnV0ZU5hbWUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL25hbWVcIjtcbmltcG9ydCB7IHJlbW92ZUZhbHNleUVsZW1lbnRzLCByZXBsYWNlU3RyaW5nc1dpdGhUZXh0RWxlbWVudHMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBGT1IsIENMQVNTLCBPQkpFQ1QsIEhUTUxfRk9SLCBDTEFTU19OQU1FLCBCT09MRUFOLCBGVU5DVElPTiwgU1ZHX05BTUVTUEFDRV9VUkkgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmZ1bmN0aW9uIGFwcGx5UHJvcGVydGllcyhwcm9wZXJ0aWVzLCBkZWZhdWx0UHJvcGVydGllcywgaWdub3JlZFByb3BlcnRpZXMpIHtcbiAgdGhpcy5wcm9wZXJ0aWVzID0gY29tYmluZShwcm9wZXJ0aWVzLCBkZWZhdWx0UHJvcGVydGllcyk7XG5cbiAgcHJvcGVydGllcyA9IHBydW5lKHRoaXMucHJvcGVydGllcywgaWdub3JlZFByb3BlcnRpZXMpOyAvLy9cblxuICBjb25zdCBuYW1lc3BhY2VVUkkgPSB0aGlzLmRvbUVsZW1lbnQubmFtZXNwYWNlVVJJLFxuICAgICAgICBzdmcgPSAobmFtZXNwYWNlVVJJID09PSBTVkdfTkFNRVNQQUNFX1VSSSksIC8vL1xuICAgICAgICBwcm9wZXJ0aWVzS2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLFxuICAgICAgICBuYW1lcyA9IHByb3BlcnRpZXNLZXlzOyAgLy8vPVxuXG4gIG5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IHByb3BlcnRpZXNbbmFtZV0sXG4gICAgICAgICAgbmFtZUhhbmRsZXJOYW1lID0gaXNOYW1lSGFuZGxlck5hbWUobmFtZSksXG4gICAgICAgICAgbmFtZUN1c3RvbUhhbmRsZXJOYW1lID0gaXNOYW1lQ3VzdG9tSGFuZGxlck5hbWUobmFtZSk7XG5cbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIC8vL1xuICAgIH0gZWxzZSBpZiAobmFtZUhhbmRsZXJOYW1lKSB7XG4gICAgICBhZGRIYW5kbGVyKHRoaXMsIG5hbWUsIHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKG5hbWVDdXN0b21IYW5kbGVyTmFtZSkge1xuICAgICAgYWRkQ3VzdG9tSGFuZGxlcih0aGlzLCBuYW1lLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5hbWVBdHRyaWJ1dGVOYW1lID0gaXNOYW1lQXR0cmlidXRlTmFtZShuYW1lLCBzdmcpO1xuXG4gICAgICBpZiAobmFtZUF0dHJpYnV0ZU5hbWUpIHtcbiAgICAgICAgYWRkQXR0cmlidXRlKHRoaXMsIG5hbWUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGNoaWxkRWxlbWVudHMgPSBjaGlsZEVsZW1lbnRzRnJvbUVsZW1lbnQodGhpcykgfHwgcHJvcGVydGllcy5jaGlsZEVsZW1lbnRzLCAgLy8vXG4gICAgICAgIGNvbnRleHQgPSB7fTtcblxuICBjaGlsZEVsZW1lbnRzLmZvckVhY2goKGNoaWxkRWxlbWVudCkgPT4ge1xuICAgIHVwZGF0ZUNvbnRleHQoY2hpbGRFbGVtZW50LCBjb250ZXh0KTtcblxuICAgIHRoaXMuYWRkKGNoaWxkRWxlbWVudCk7XG4gIH0pO1xuXG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIGdldFByb3BlcnRpZXMoKSB7XG4gIHJldHVybiB0aGlzLnByb3BlcnRpZXM7XG59XG5cbmZ1bmN0aW9uIGdldENvbnRleHQoKSB7XG4gIHJldHVybiB0aGlzLmNvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIGFzc2lnbkNvbnRleHQobmFtZXMsIHRoZW5EZWxldGUpIHtcbiAgY29uc3QgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICBpZiAoYXJndW1lbnRzTGVuZ3RoID09PSAxKSB7XG4gICAgY29uc3QgZmlyc3RBcmd1bWVudCA9IGZpcnN0KGFyZ3VtZW50cyk7XG5cbiAgICBpZiAodHlwZW9mIGZpcnN0QXJndW1lbnQgPT09IEJPT0xFQU4pIHtcbiAgICAgIG5hbWVzID0gT2JqZWN0LmtleXModGhpcy5jb250ZXh0KTtcblxuICAgICAgdGhlbkRlbGV0ZSA9IGZpcnN0QXJndW1lbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoZW5EZWxldGUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChhcmd1bWVudHNMZW5ndGggPT09IDApIHtcbiAgICBuYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMuY29udGV4dCk7XG5cbiAgICB0aGVuRGVsZXRlID0gdHJ1ZTtcbiAgfVxuXG4gIG5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY29udGV4dFtuYW1lXSxcbiAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSBuYW1lLCAgLy8vXG4gICAgICAgICAgZGVzY3JpcHRvciA9IHtcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICAgIH07XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yKTtcblxuICAgIGlmICh0aGVuRGVsZXRlKSB7XG4gICAgICBkZWxldGUgdGhpcy5jb250ZXh0W25hbWVdO1xuICAgIH1cbiAgfSwgW10pO1xufVxuXG5jb25zdCBqc3hNaXhpbnMgPSB7XG4gIGFwcGx5UHJvcGVydGllcyxcbiAgZ2V0UHJvcGVydGllcyxcbiAgZ2V0Q29udGV4dCxcbiAgYXNzaWduQ29udGV4dFxufTtcblxuZXhwb3J0IGRlZmF1bHQganN4TWl4aW5zO1xuXG5mdW5jdGlvbiBjaGlsZEVsZW1lbnRzRnJvbUVsZW1lbnQoZWxlbWVudCkge1xuICBsZXQgY2hpbGRFbGVtZW50cyA9IG51bGw7XG5cbiAgaWYgKHR5cGVvZiBlbGVtZW50LmNoaWxkRWxlbWVudHMgPT09IEZVTkNUSU9OKSB7XG4gICAgY2hpbGRFbGVtZW50cyA9IGVsZW1lbnQuY2hpbGRFbGVtZW50cy5jYWxsKGVsZW1lbnQpO1xuXG4gICAgY2hpbGRFbGVtZW50cyA9IGd1YXJhbnRlZShjaGlsZEVsZW1lbnRzKTtcblxuICAgIGNoaWxkRWxlbWVudHMgPSByZW1vdmVGYWxzZXlFbGVtZW50cyhjaGlsZEVsZW1lbnRzKTtcblxuICAgIGNoaWxkRWxlbWVudHMgPSByZXBsYWNlU3RyaW5nc1dpdGhUZXh0RWxlbWVudHMoY2hpbGRFbGVtZW50cyk7XG4gIH1cblxuICByZXR1cm4gY2hpbGRFbGVtZW50cztcbn1cblxuZnVuY3Rpb24gdXBkYXRlQ29udGV4dChjaGlsZEVsZW1lbnQsIGNvbnRleHQpIHtcbiAgY29uc3QgcGFyZW50Q29udGV4dCA9ICh0eXBlb2YgY2hpbGRFbGVtZW50LnBhcmVudENvbnRleHQgPT09IEZVTkNUSU9OKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWxlbWVudC5wYXJlbnRDb250ZXh0KCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWxlbWVudC5jb250ZXh0OyAvLy9cblxuICBPYmplY3QuYXNzaWduKGNvbnRleHQsIHBhcmVudENvbnRleHQpO1xufVxuXG5mdW5jdGlvbiBhZGRIYW5kbGVyKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IG5hbWUuc3Vic3RyaW5nKDIpLnRvTG93ZXJDYXNlKCksIC8vL1xuICAgICAgICBoYW5kbGVyID0gdmFsdWU7ICAvLy9cblxuICBlbGVtZW50Lm9uRXZlbnQoZXZlbnRUeXBlLCBoYW5kbGVyKTtcbn1cblxuZnVuY3Rpb24gYWRkQ3VzdG9tSGFuZGxlcihlbGVtZW50LCBuYW1lLCB2YWx1ZSkge1xuICBjb25zdCBjdXN0b21FdmVudFR5cGUgPSBjYW1lbENhc2VUb1NuYWtlQ2FzZShuYW1lKS5yZXBsYWNlKC9vbi1jdXN0b20tLywgXCJcIiksXG4gICAgICAgIGN1c3RvbUhhbmRsZXIgPSB2YWx1ZTsgIC8vL1xuXG4gIGVsZW1lbnQub25DdXN0b21FdmVudChjdXN0b21FdmVudFR5cGUsIGN1c3RvbUhhbmRsZXIpO1xufVxuXG5mdW5jdGlvbiBhZGRBdHRyaWJ1dGUoZWxlbWVudCwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKG5hbWUgPT09IENMQVNTX05BTUUpIHtcbiAgICBuYW1lID0gQ0xBU1M7XG4gIH1cblxuICBpZiAobmFtZSA9PT0gSFRNTF9GT1IpIHtcbiAgICBuYW1lID0gRk9SO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gT0JKRUNUKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTtcblxuICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBlbGVtZW50LmRvbUVsZW1lbnRbbmFtZV1ba2V5XSA9IHZhbHVlW2tleV07XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBCT09MRUFOKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB2YWx1ZSA9IG5hbWU7IC8vL1xuXG4gICAgICBlbGVtZW50LmFkZEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGVsZW1lbnQuYWRkQXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc05hbWVIYW5kbGVyTmFtZShuYW1lKSB7XG4gIGNvbnN0IG5hbWVIYW5kbGVyTmFtZSA9ICAvXm9uKD8hQ3VzdG9tKS8udGVzdChuYW1lKTsgIC8vL1xuXG4gIHJldHVybiBuYW1lSGFuZGxlck5hbWU7XG59XG5cbmZ1bmN0aW9uIGlzTmFtZUF0dHJpYnV0ZU5hbWUobmFtZSwgc3ZnKSB7XG4gIGNvbnN0IG5hbWVBdHRyaWJ1dGVOYW1lID0gc3ZnID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTVkdBdHRyaWJ1dGVOYW1lKG5hbWUpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0hUTUxBdHRyaWJ1dGVOYW1lKG5hbWUpO1xuXG4gIHJldHVybiBuYW1lQXR0cmlidXRlTmFtZTtcbn1cblxuZnVuY3Rpb24gaXNOYW1lQ3VzdG9tSGFuZGxlck5hbWUobmFtZSkge1xuICBjb25zdCBuYW1lQ3VzdG9tSGFuZGxlck5hbWUgPSAvXm9uQ3VzdG9tLy50ZXN0KG5hbWUpO1xuXG4gIHJldHVybiBuYW1lQ3VzdG9tSGFuZGxlck5hbWU7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBDVVRfRVZFTlRfVFlQRSA9IFwiY3V0XCI7XG5leHBvcnQgY29uc3QgQ09QWV9FVkVOVF9UWVBFID0gXCJjb3B5XCI7XG5leHBvcnQgY29uc3QgQkxVUl9FVkVOVF9UWVBFID0gXCJibHVyXCI7XG5leHBvcnQgY29uc3QgUEFTVEVfRVZFTlRfVFlQRSA9IFwicGFzdGVcIjtcbmV4cG9ydCBjb25zdCBXSEVFTF9FVkVOVF9UWVBFID0gXCJ3aGVlbFwiO1xuZXhwb3J0IGNvbnN0IElOUFVUX0VWRU5UX1RZUEUgPSBcImlucHV0XCI7XG5leHBvcnQgY29uc3QgRk9DVVNfRVZFTlRfVFlQRSA9IFwiZm9jdXNcIjtcbmV4cG9ydCBjb25zdCBDTElDS19FVkVOVF9UWVBFID0gXCJjbGlja1wiO1xuZXhwb3J0IGNvbnN0IEtFWVVQX0VWRU5UX1RZUEUgPSBcImtleXVwXCI7XG5leHBvcnQgY29uc3QgU0VMRUNUX0VWRU5UX1RZUEUgPSBcInNlbGVjdFwiO1xuZXhwb3J0IGNvbnN0IENIQU5HRV9FVkVOVF9UWVBFID0gXCJjaGFuZ2VcIjtcbmV4cG9ydCBjb25zdCBSRVNJWkVfRVZFTlRfVFlQRSA9IFwicmVzaXplXCI7XG5leHBvcnQgY29uc3QgU0NST0xMX0VWRU5UX1RZUEUgPSBcInNjcm9sbFwiO1xuZXhwb3J0IGNvbnN0IEtFWURPV05fRVZFTlRfVFlQRSA9IFwia2V5ZG93blwiO1xuZXhwb3J0IGNvbnN0IE1PVVNFVVBfRVZFTlRfVFlQRSA9IFwibW91c2V1cFwiO1xuZXhwb3J0IGNvbnN0IEFVWENMSUNLX0VWRU5UX1RZUEUgPSBcImF1eGNsaWNrXCI7XG5leHBvcnQgY29uc3QgTU9VU0VPVVRfRVZFTlRfVFlQRSA9IFwibW91c2VvdXRcIjtcbmV4cG9ydCBjb25zdCBEQkxDTElDS19FVkVOVF9UWVBFID0gXCJkYmxjbGlja1wiO1xuZXhwb3J0IGNvbnN0IE1PVVNFT1ZFUl9FVkVOVF9UWVBFID0gXCJtb3VzZW92ZXJcIjtcbmV4cG9ydCBjb25zdCBNT1VTRURPV05fRVZFTlRfVFlQRSA9IFwibW91c2Vkb3duXCI7XG5leHBvcnQgY29uc3QgTU9VU0VNT1ZFX0VWRU5UX1RZUEUgPSBcIm1vdXNlbW92ZVwiO1xuZXhwb3J0IGNvbnN0IENPTlRFWFRNRU5VX0VWRU5UX1RZUEUgPSBcImNvbnRleHRtZW51XCI7XG5leHBvcnQgY29uc3QgU0VMRUNUSU9OQ0hBTkdFX0VWRU5UX1RZUEUgPSBcInNlbGVjdGlvbmNoYW5nZVwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIENVVF9FVkVOVF9UWVBFLFxuICBDT1BZX0VWRU5UX1RZUEUsXG4gIEJMVVJfRVZFTlRfVFlQRSxcbiAgUEFTVEVfRVZFTlRfVFlQRSxcbiAgV0hFRUxfRVZFTlRfVFlQRSxcbiAgSU5QVVRfRVZFTlRfVFlQRSxcbiAgRk9DVVNfRVZFTlRfVFlQRSxcbiAgQ0xJQ0tfRVZFTlRfVFlQRSxcbiAgS0VZVVBfRVZFTlRfVFlQRSxcbiAgU0VMRUNUX0VWRU5UX1RZUEUsXG4gIENIQU5HRV9FVkVOVF9UWVBFLFxuICBSRVNJWkVfRVZFTlRfVFlQRSxcbiAgU0NST0xMX0VWRU5UX1RZUEUsXG4gIEtFWURPV05fRVZFTlRfVFlQRSxcbiAgTU9VU0VVUF9FVkVOVF9UWVBFLFxuICBBVVhDTElDS19FVkVOVF9UWVBFLFxuICBNT1VTRU9VVF9FVkVOVF9UWVBFLFxuICBEQkxDTElDS19FVkVOVF9UWVBFLFxuICBNT1VTRU9WRVJfRVZFTlRfVFlQRSxcbiAgTU9VU0VET1dOX0VWRU5UX1RZUEUsXG4gIE1PVVNFTU9WRV9FVkVOVF9UWVBFLFxuICBDT05URVhUTUVOVV9FVkVOVF9UWVBFLFxuICBTRUxFQ1RJT05DSEFOR0VfRVZFTlRfVFlQRVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgS0VZVVBfRVZFTlRfVFlQRSwgS0VZRE9XTl9FVkVOVF9UWVBFIH0gZnJvbSBcIi4uL2V2ZW50VHlwZXNcIjtcblxuZnVuY3Rpb24gb25LZXlVcChrZXlVcEhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbkV2ZW50KEtFWVVQX0VWRU5UX1RZUEUsIGtleVVwSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmS2V5VXAoa2V5VXBIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmRXZlbnQoS0VZVVBfRVZFTlRfVFlQRSwga2V5VXBIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvbktleURvd24oa2V5RG93bkhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbkV2ZW50KEtFWURPV05fRVZFTlRfVFlQRSwga2V5RG93bkhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZktleURvd24oa2V5RG93bkhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmZFdmVudChLRVlET1dOX0VWRU5UX1RZUEUsIGtleURvd25IYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5jb25zdCBrZXlNaXhpbnMgPSB7XG4gIG9uS2V5VXAsXG4gIG9mZktleVVwLFxuICBvbktleURvd24sXG4gIG9mZktleURvd25cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGtleU1peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQ0xJQ0tfRVZFTlRfVFlQRSwgREJMQ0xJQ0tfRVZFTlRfVFlQRSB9IGZyb20gXCIuLi9ldmVudFR5cGVzXCI7XG5cbmZ1bmN0aW9uIG9uQ2xpY2soY2xpY2tIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub25FdmVudChDTElDS19FVkVOVF9UWVBFLCBjbGlja0hhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZkNsaWNrKGNsaWNrSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZkV2ZW50KENMSUNLX0VWRU5UX1RZUEUsIGNsaWNrSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb25Eb3VibGVDbGljayhjbGlja0hhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbkV2ZW50KERCTENMSUNLX0VWRU5UX1RZUEUsIGNsaWNrSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmRG91YmxlQ2xpY2soY2xpY2tIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmRXZlbnQoREJMQ0xJQ0tfRVZFTlRfVFlQRSwgY2xpY2tIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5jb25zdCBjbGlja01peGlucyA9IHtcbiAgb25DbGljayxcbiAgb2ZmQ2xpY2ssXG4gIG9uRG91YmxlQ2xpY2ssXG4gIG9mZkRvdWJsZUNsaWNrXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGlja01peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gZ2V0U3RhdGUoKSB7XG4gIHJldHVybiB0aGlzLnN0YXRlO1xufVxuXG5mdW5jdGlvbiBzZXRTdGF0ZShzdGF0ZSkge1xuICB0aGlzLnN0YXRlID0gc3RhdGU7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVN0YXRlKHN0YXRlKSB7XG4gICh0aGlzLnN0YXRlID09PSB1bmRlZmluZWQpID9cbiAgICB0aGlzLnN0YXRlID0gc3RhdGUgOlxuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLnN0YXRlLCBzdGF0ZSk7XG59XG5cbmNvbnN0IHN0YXRlTWl4aW5zID0ge1xuICBnZXRTdGF0ZSxcbiAgc2V0U3RhdGUsXG4gIHVwZGF0ZVN0YXRlXG59O1xuXG5leHBvcnQgZGVmYXVsdCBzdGF0ZU1peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUkVTSVpFX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi4vZXZlbnRUeXBlc1wiO1xuaW1wb3J0IHsgT0JKRUNULCBURVhUX0hUTUwsIEFCT1VUX0JMQU5LIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gb25SZXNpemUocmVzaXplSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uRXZlbnQoUkVTSVpFX0VWRU5UX1RZUEUsIHJlc2l6ZUhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBvZmZSZXNpemUocmVzaXplSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZkV2ZW50KFJFU0laRV9FVkVOVF9UWVBFLCByZXNpemVIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBhZGRSZXNpemVPYmplY3QoKSB7XG4gIGNvbnN0IHJlc2l6ZU9iamVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoT0JKRUNUKSxcbiAgICAgICAgdHlwZSA9IFRFWFRfSFRNTCwgIC8vL1xuICAgICAgICBkYXRhID0gQUJPVVRfQkxBTkssIC8vL1xuICAgICAgICBzdHlsZSA9IGBkaXNwbGF5OiBibG9jazsgXG4gICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsgXG4gICAgICAgICAgICAgICAgIHRvcDogMDsgXG4gICAgICAgICAgICAgICAgIGxlZnQ6IDA7IFxuICAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7IFxuICAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTsgXG4gICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47IFxuICAgICAgICAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsgXG4gICAgICAgICAgICAgICAgIHotaW5kZXg6IC0xO2A7XG5cbiAgT2JqZWN0LmFzc2lnbihyZXNpemVPYmplY3QsIHtcbiAgICB0eXBlLFxuICAgIGRhdGFcbiAgfSk7XG5cbiAgcmVzaXplT2JqZWN0LnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIHN0eWxlKTtcblxuICB0aGlzLl9fcmVzaXplT2JqZWN0X18gPSByZXNpemVPYmplY3Q7IC8vL1xuXG4gIHJlc2l6ZU9iamVjdC5vbmxvYWQgPSAoKSA9PiB7XG4gICAgcmVzaXplT2JqZWN0TG9hZEhhbmRsZXIodGhpcyk7XG4gIH07XG5cbiAgdGhpcy5kb21FbGVtZW50LmFwcGVuZENoaWxkKHJlc2l6ZU9iamVjdCk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVJlc2l6ZU9iamVjdCgpIHtcbiAgY29uc3QgcmVzaXplT2JqZWN0ID0gdGhpcy5fX3Jlc2l6ZU9iamVjdF9fLCAvLy9cbiAgICAgICAgb2JqZWN0V2luZG93ID0gcmVzaXplT2JqZWN0LmNvbnRlbnREb2N1bWVudC5kZWZhdWx0VmlldzsgIC8vL1xuXG4gIG9iamVjdFdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFJFU0laRV9FVkVOVF9UWVBFLCByZXNpemVFdmVudExpc3RlbmVyKTtcblxuICB0aGlzLmRvbUVsZW1lbnQucmVtb3ZlQ2hpbGQocmVzaXplT2JqZWN0KTtcblxuICBkZWxldGUgdGhpcy5fX3Jlc2l6ZU9iamVjdF9fO1xufVxuXG5jb25zdCByZXNpemVNaXhpbnMgPSB7XG4gIG9uUmVzaXplLFxuICBvZmZSZXNpemUsXG4gIGFkZFJlc2l6ZU9iamVjdCxcbiAgcmVtb3ZlUmVzaXplT2JqZWN0XG59O1xuXG5leHBvcnQgZGVmYXVsdCByZXNpemVNaXhpbnM7XG5cbmZ1bmN0aW9uIHJlc2l6ZU9iamVjdExvYWRIYW5kbGVyKGVsZW1lbnQpIHtcbiAgY29uc3QgcmVzaXplT2JqZWN0ID0gZWxlbWVudC5fX3Jlc2l6ZU9iamVjdF9fLFxuICAgICAgICByZXNpemVPYmplY3RXaW5kb3cgPSByZXNpemVPYmplY3QuY29udGVudERvY3VtZW50LmRlZmF1bHRWaWV3OyAgLy8vXG5cbiAgcmVzaXplT2JqZWN0V2luZG93LmFkZEV2ZW50TGlzdGVuZXIoUkVTSVpFX0VWRU5UX1RZUEUsIChldmVudCkgPT4ge1xuICAgIGNvbnN0IHJlc2l6ZUV2ZW50TGlzdGVuZXJzID0gZWxlbWVudC5maW5kRXZlbnRMaXN0ZW5lcnMoUkVTSVpFX0VWRU5UX1RZUEUpO1xuXG4gICAgcmVzaXplRXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgocmVzaXplRXZlbnRMaXN0ZW5lcikgPT4ge1xuICAgICAgcmVzaXplRXZlbnRMaXN0ZW5lcihldmVudCk7XG4gICAgfSk7XG4gIH0pO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBTUEFDRSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IFJFU0laRV9FVkVOVF9UWVBFIH0gZnJvbSBcIi4uL2V2ZW50VHlwZXNcIjtcbmltcG9ydCB7IHJlbW92ZVJlc2l6ZU9iamVjdCB9IGZyb20gXCIuLi9taXhpbnMvcmVzaXplXCI7XG5cbmZ1bmN0aW9uIG9uRXZlbnQoZXZlbnRUeXBlcywgaGFuZGxlciwgZWxlbWVudCA9IHRoaXMpIHtcbiAgZXZlbnRUeXBlcyA9IGV2ZW50VHlwZXMuc3BsaXQoU1BBQ0UpOyAvLy9cblxuICBldmVudFR5cGVzLmZvckVhY2goKGV2ZW50VHlwZSkgPT4ge1xuICAgIGlmIChldmVudFR5cGUgPT09IFJFU0laRV9FVkVOVF9UWVBFKSB7XG4gICAgICBjb25zdCByZXNpemVFdmVudExpc3RlbmVycyA9IHRoaXMuZmluZEV2ZW50TGlzdGVuZXJzKFJFU0laRV9FVkVOVF9UWVBFKSxcbiAgICAgICAgICAgIHJlc2l6ZUV2ZW50TGlzdGVuZXJzTGVuZ3RoID0gcmVzaXplRXZlbnRMaXN0ZW5lcnMubGVuZ3RoO1xuXG4gICAgICBpZiAocmVzaXplRXZlbnRMaXN0ZW5lcnNMZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5hZGRSZXNpemVPYmplY3QoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBldmVudExpc3RlbmVyID0gdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG5cbiAgICB0aGlzLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGV2ZW50TGlzdGVuZXIpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gb2ZmRXZlbnQoZXZlbnRUeXBlcywgaGFuZGxlciwgZWxlbWVudCA9IHRoaXMpIHtcbiAgZXZlbnRUeXBlcyA9IGV2ZW50VHlwZXMuc3BsaXQoU1BBQ0UpOyAvLy9cblxuICBldmVudFR5cGVzLmZvckVhY2goKGV2ZW50VHlwZSkgPT4ge1xuICAgIGNvbnN0IGV2ZW50TGlzdGVuZXIgPSB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcblxuICAgIHRoaXMuZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgZXZlbnRMaXN0ZW5lcik7XG5cbiAgICBpZiAoZXZlbnRUeXBlID09PSBSRVNJWkVfRVZFTlRfVFlQRSkge1xuICAgICAgY29uc3QgcmVzaXplRXZlbnRMaXN0ZW5lcnMgPSB0aGlzLmZpbmRFdmVudExpc3RlbmVycyhSRVNJWkVfRVZFTlRfVFlQRSksXG4gICAgICAgICAgICByZXNpemVFdmVudExpc3RlbmVyc0xlbmd0aCA9IHJlc2l6ZUV2ZW50TGlzdGVuZXJzLmxlbmd0aDtcblxuICAgICAgaWYgKHJlc2l6ZUV2ZW50TGlzdGVuZXJzTGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlUmVzaXplT2JqZWN0KCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRMaXN0ZW5lciA9IHRoaXMuY3JlYXRlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xuXG4gIGlmICghdGhpcy5ldmVudExpc3RlbmVycykge1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMgPSBbXTtcbiAgfVxuXG4gIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaChldmVudExpc3RlbmVyKTtcblxuICByZXR1cm4gZXZlbnRMaXN0ZW5lcjtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRMaXN0ZW5lciA9IHRoaXMuZmluZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KSxcbiAgICAgICAgaW5kZXggPSB0aGlzLmV2ZW50TGlzdGVuZXJzLmluZGV4T2YoZXZlbnRMaXN0ZW5lciksXG4gICAgICAgIHN0YXJ0ID0gaW5kZXgsICAvLy9cbiAgICAgICAgZGVsZXRlQ291bnQgPSAxO1xuXG4gIHRoaXMuZXZlbnRMaXN0ZW5lcnMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCk7XG5cbiAgaWYgKHRoaXMuZXZlbnRMaXN0ZW5lcnMubGVuZ3RoID09PSAwKSB7XG4gICAgZGVsZXRlIHRoaXMuZXZlbnRMaXN0ZW5lcnM7XG4gIH1cblxuICByZXR1cm4gZXZlbnRMaXN0ZW5lcjtcbn1cblxuZnVuY3Rpb24gZmluZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KSB7XG4gIGNvbnN0IGV2ZW50TGlzdGVuZXIgPSB0aGlzLmV2ZW50TGlzdGVuZXJzLmZpbmQoKGV2ZW50TGlzdGVuZXIpID0+IHtcbiAgICBpZiAoKGV2ZW50TGlzdGVuZXIuZWxlbWVudCA9PT0gZWxlbWVudCkgJiYgKGV2ZW50TGlzdGVuZXIuaGFuZGxlciA9PT0gaGFuZGxlcikgJiYgKGV2ZW50TGlzdGVuZXIuZXZlbnRUeXBlID09PSBldmVudFR5cGUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBldmVudExpc3RlbmVyO1xufVxuXG5mdW5jdGlvbiBmaW5kRXZlbnRMaXN0ZW5lcnMoZXZlbnRUeXBlKSB7XG4gIGNvbnN0IGV2ZW50TGlzdGVuZXJzID0gW107XG5cbiAgaWYgKHRoaXMuZXZlbnRMaXN0ZW5lcnMpIHtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLmZvckVhY2goKGV2ZW50TGlzdGVuZXIpID0+IHtcbiAgICAgIGNvbnN0IGZvdW5kID0gKGV2ZW50TGlzdGVuZXIuZXZlbnRUeXBlID09PSBldmVudFR5cGUpO1xuXG4gICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgZXZlbnRMaXN0ZW5lcnMucHVzaChldmVudExpc3RlbmVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBldmVudExpc3RlbmVycztcbn1cblxuZnVuY3Rpb24gY3JlYXRlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgbGV0IGV2ZW50TGlzdGVuZXI7XG5cbiAgY29uc3QgaGFuZGxlckVsZW1lbnQgPSBlbGVtZW50OyAvLy9cblxuICBldmVudExpc3RlbmVyID0gKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXM7IC8vL1xuXG4gICAgaGFuZGxlci5jYWxsKGhhbmRsZXJFbGVtZW50LCBldmVudCwgZWxlbWVudCk7XG4gIH07XG5cbiAgT2JqZWN0LmFzc2lnbihldmVudExpc3RlbmVyLCB7XG4gICAgZWxlbWVudCxcbiAgICBoYW5kbGVyLFxuICAgIGV2ZW50VHlwZVxuICB9KTtcblxuICByZXR1cm4gZXZlbnRMaXN0ZW5lcjtcbn1cblxuY29uc3QgZXZlbnRNaXhpbnMgPSB7XG4gIG9uRXZlbnQsXG4gIG9mZkV2ZW50LFxuICBhZGRFdmVudExpc3RlbmVyLFxuICByZW1vdmVFdmVudExpc3RlbmVyLFxuICBmaW5kRXZlbnRMaXN0ZW5lcixcbiAgZmluZEV2ZW50TGlzdGVuZXJzLFxuICBjcmVhdGVFdmVudExpc3RlbmVyXG59O1xuXG5leHBvcnQgZGVmYXVsdCBldmVudE1peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgTU9VU0VVUF9FVkVOVF9UWVBFLFxuICAgICAgICAgTU9VU0VPVVRfRVZFTlRfVFlQRSxcbiAgICAgICAgIE1PVVNFRE9XTl9FVkVOVF9UWVBFLFxuICAgICAgICAgTU9VU0VPVkVSX0VWRU5UX1RZUEUsXG4gICAgICAgICBNT1VTRU1PVkVfRVZFTlRfVFlQRSB9IGZyb20gXCIuLi9ldmVudFR5cGVzXCI7XG5cbmZ1bmN0aW9uIG9uTW91c2VVcChtb3VzZVVwSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uRXZlbnQoTU9VU0VVUF9FVkVOVF9UWVBFLCBtb3VzZVVwSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmTW91c2VVcChtb3VzZVVwSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZkV2ZW50KE1PVVNFVVBfRVZFTlRfVFlQRSwgbW91c2VVcEhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9uTW91c2VPdXQobW91c2VPdXRIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub25FdmVudChNT1VTRU9VVF9FVkVOVF9UWVBFLCBtb3VzZU91dEhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZk1vdXNlT3V0KG1vdXNlT3V0SGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZkV2ZW50KE1PVVNFT1VUX0VWRU5UX1RZUEUsIG1vdXNlT3V0SGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb25Nb3VzZURvd24obW91c2VEb3duSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uRXZlbnQoTU9VU0VET1dOX0VWRU5UX1RZUEUsIG1vdXNlRG93bkhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZk1vdXNlRG93bihtb3VzZURvd25IYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmRXZlbnQoTU9VU0VET1dOX0VWRU5UX1RZUEUsIG1vdXNlRG93bkhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9uTW91c2VPdmVyKG1vdXNlT3ZlckhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbkV2ZW50KE1PVVNFT1ZFUl9FVkVOVF9UWVBFLCBtb3VzZU92ZXJIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZNb3VzZU92ZXIobW91c2VPdmVySGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZkV2ZW50KE1PVVNFT1ZFUl9FVkVOVF9UWVBFLCBtb3VzZU92ZXJIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvbk1vdXNlTW92ZShtb3VzZU1vdmVIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub25FdmVudChNT1VTRU1PVkVfRVZFTlRfVFlQRSwgbW91c2VNb3ZlSGFuZGxlciwgZWxlbWVudCk7IH1cblxuZnVuY3Rpb24gb2ZmTW91c2VNb3ZlKG1vdXNlTW92ZUhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vZmZFdmVudChNT1VTRU1PVkVfRVZFTlRfVFlQRSwgbW91c2VNb3ZlSGFuZGxlciwgZWxlbWVudCk7IH1cblxuY29uc3QgbW91c2VNaXhpbnMgPSB7XG4gIG9uTW91c2VVcCxcbiAgb2ZmTW91c2VVcCxcbiAgb25Nb3VzZU91dCxcbiAgb2ZmTW91c2VPdXQsXG4gIG9uTW91c2VEb3duLFxuICBvZmZNb3VzZURvd24sXG4gIG9uTW91c2VPdmVyLFxuICBvZmZNb3VzZU92ZXIsXG4gIG9uTW91c2VNb3ZlLFxuICBvZmZNb3VzZU1vdmVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG1vdXNlTWl4aW5zO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBTQ1JPTExfRVZFTlRfVFlQRSB9IGZyb20gXCIuLi9ldmVudFR5cGVzXCI7XG5cbmZ1bmN0aW9uIG9uU2Nyb2xsKHNjcm9sbEhhbmRsZXIsIGVsZW1lbnQpIHsgdGhpcy5vbkV2ZW50KFNDUk9MTF9FVkVOVF9UWVBFLCBzY3JvbGxIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBvZmZTY3JvbGwoc2Nyb2xsSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZkV2ZW50KFNDUk9MTF9FVkVOVF9UWVBFLCBzY3JvbGxIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG5mdW5jdGlvbiBnZXRTY3JvbGxUb3AoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuc2Nyb2xsVG9wOyB9XG5cbmZ1bmN0aW9uIGdldFNjcm9sbExlZnQoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuc2Nyb2xsTGVmdDsgfVxuXG5mdW5jdGlvbiBzZXRTY3JvbGxUb3Aoc2Nyb2xsVG9wKSB7IHRoaXMuZG9tRWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7IH1cblxuZnVuY3Rpb24gc2V0U2Nyb2xsTGVmdChzY3JvbGxMZWZ0KSB7IHRoaXMuZG9tRWxlbWVudC5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDsgfVxuXG5jb25zdCBzY3JvbGxNaXhpbnMgPSB7XG4gIG9uU2Nyb2xsLFxuICBvZmZTY3JvbGwsXG4gIGdldFNjcm9sbFRvcCxcbiAgZ2V0U2Nyb2xsTGVmdCxcbiAgc2V0U2Nyb2xsVG9wLFxuICBzZXRTY3JvbGxMZWZ0XG59O1xuXG5leHBvcnQgZGVmYXVsdCBzY3JvbGxNaXhpbnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JFYWNoKGFycmF5LCBvcGVyYXRpb24sIGRvbmUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOyAgLy8vXG5cbiAgbGV0IGNvdW50ID0gLTE7XG5cbiAgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICBjb3VudCsrO1xuXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSBsZW5ndGgpO1xuXG4gICAgaWYgKHRlcm1pbmF0ZSkge1xuICAgICAgZG9uZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpbmRleCA9IGNvdW50LCAgLy8vXG4gICAgICAgICAgICBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgICBvcGVyYXRpb24oZWxlbWVudCwgbmV4dCwgZG9uZSwgY29udGV4dCwgaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIG5leHQoKTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgU1BBQ0UgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBmb3JFYWNoIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hc3luY1wiO1xuXG5mdW5jdGlvbiBvbkN1c3RvbUV2ZW50KGN1c3RvbUV2ZW50VHlwZXMsIGN1c3RvbUhhbmRsZXIsIGVsZW1lbnQgPSB0aGlzKSB7XG4gIGN1c3RvbUV2ZW50VHlwZXMgPSBjdXN0b21FdmVudFR5cGVzLnNwbGl0KFNQQUNFKTsgLy8vXG5cbiAgY3VzdG9tRXZlbnRUeXBlcy5mb3JFYWNoKChjdXN0b21FdmVudFR5cGUpID0+IHtcbiAgICB0aGlzLmFkZEN1c3RvbUV2ZW50TGlzdGVuZXIoY3VzdG9tRXZlbnRUeXBlLCBjdXN0b21IYW5kbGVyLCBlbGVtZW50KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG9mZkN1c3RvbUV2ZW50KGN1c3RvbUV2ZW50VHlwZXMsIGN1c3RvbUhhbmRsZXIsIGVsZW1lbnQgPSB0aGlzKSB7XG4gIGN1c3RvbUV2ZW50VHlwZXMgPSBjdXN0b21FdmVudFR5cGVzLnNwbGl0KFNQQUNFKTsgLy8vXG5cbiAgY3VzdG9tRXZlbnRUeXBlcy5mb3JFYWNoKChjdXN0b21FdmVudFR5cGUpID0+IHtcbiAgICB0aGlzLnJlbW92ZUN1c3RvbUV2ZW50TGlzdGVuZXIoY3VzdG9tRXZlbnRUeXBlLCBjdXN0b21IYW5kbGVyLCBlbGVtZW50KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNhbGxDdXN0b21IYW5kbGVycyhjdXN0b21FdmVudFR5cGUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICBjb25zdCBjdXN0b21FdmVudExpc3RlbmVycyA9IHRoaXMuZmluZEN1c3RvbUV2ZW50TGlzdGVuZXJzKGN1c3RvbUV2ZW50VHlwZSk7XG5cbiAgY3VzdG9tRXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoY3VzdG9tRXZlbnRMaXN0ZW5lcikgPT4ge1xuICAgIGNvbnN0IHsgY3VzdG9tSGFuZGxlciwgZWxlbWVudDogY3VzdG9tSGFuZGxlckVsZW1lbnQgfSA9IGN1c3RvbUV2ZW50TGlzdGVuZXIsXG4gICAgICAgICAgZWxlbWVudCA9IHRoaXM7IC8vL1xuXG4gICAgY3VzdG9tSGFuZGxlci5jYWxsKGN1c3RvbUhhbmRsZXJFbGVtZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMsIGVsZW1lbnQpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY2FsbEN1c3RvbUhhbmRsZXJzQXN5bmMoY3VzdG9tRXZlbnRUeXBlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgY29uc3QgY3VzdG9tRXZlbnRMaXN0ZW5lcnMgPSB0aGlzLmZpbmRDdXN0b21FdmVudExpc3RlbmVycyhjdXN0b21FdmVudFR5cGUpLFxuICAgICAgICBkb25lID0gcmVtYWluaW5nQXJndW1lbnRzLnBvcCgpOyAgLy8vXG5cbiAgZm9yRWFjaChjdXN0b21FdmVudExpc3RlbmVycywgKGN1c3RvbUV2ZW50TGlzdGVuZXIsIG5leHQpID0+IHtcbiAgICBjb25zdCB7IGN1c3RvbUhhbmRsZXIsIGVsZW1lbnQ6IGN1c3RvbUhhbmRsZXJFbGVtZW50IH0gPSBjdXN0b21FdmVudExpc3RlbmVyLFxuICAgICAgICAgIGVsZW1lbnQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBkb25lID0gbmV4dDsgIC8vL1xuXG4gICAgY3VzdG9tSGFuZGxlci5jYWxsKGN1c3RvbUhhbmRsZXJFbGVtZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMsIGVsZW1lbnQsIGRvbmUpO1xuICB9LCBkb25lKTtcbn1cblxuZnVuY3Rpb24gYWRkQ3VzdG9tRXZlbnRMaXN0ZW5lcihjdXN0b21FdmVudFR5cGUsIGN1c3RvbUhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgY3VzdG9tRXZlbnRMaXN0ZW5lciA9IHRoaXMuY3JlYXRlQ3VzdG9tRXZlbnRMaXN0ZW5lcihjdXN0b21FdmVudFR5cGUsIGN1c3RvbUhhbmRsZXIsIGVsZW1lbnQpO1xuXG4gIGlmICghdGhpcy5jdXN0b21FdmVudExpc3RlbmVycykge1xuICAgIHRoaXMuY3VzdG9tRXZlbnRMaXN0ZW5lcnMgPSBbXTtcbiAgfVxuXG4gIHRoaXMuY3VzdG9tRXZlbnRMaXN0ZW5lcnMucHVzaChjdXN0b21FdmVudExpc3RlbmVyKTtcblxuICByZXR1cm4gY3VzdG9tRXZlbnRMaXN0ZW5lcjtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ3VzdG9tRXZlbnRMaXN0ZW5lcihjdXN0b21FdmVudFR5cGUsIGN1c3RvbUhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgY3VzdG9tRXZlbnRMaXN0ZW5lciA9IHRoaXMuZmluZEN1c3RvbUV2ZW50TGlzdGVuZXIoY3VzdG9tRXZlbnRUeXBlLCBjdXN0b21IYW5kbGVyLCBlbGVtZW50KSxcbiAgICAgICAgaW5kZXggPSB0aGlzLmN1c3RvbUV2ZW50TGlzdGVuZXJzLmluZGV4T2YoY3VzdG9tRXZlbnRMaXN0ZW5lciksXG4gICAgICAgIHN0YXJ0ID0gaW5kZXgsICAvLy9cbiAgICAgICAgZGVsZXRlQ291bnQgPSAxO1xuXG4gIHRoaXMuY3VzdG9tRXZlbnRMaXN0ZW5lcnMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCk7XG5cbiAgaWYgKHRoaXMuY3VzdG9tRXZlbnRMaXN0ZW5lcnMubGVuZ3RoID09PSAwKSB7XG4gICAgZGVsZXRlIHRoaXMuY3VzdG9tRXZlbnRMaXN0ZW5lcnM7XG4gIH1cblxuICByZXR1cm4gY3VzdG9tRXZlbnRMaXN0ZW5lcjtcbn1cblxuZnVuY3Rpb24gZmluZEN1c3RvbUV2ZW50TGlzdGVuZXIoY3VzdG9tRXZlbnRUeXBlLCBjdXN0b21IYW5kbGVyLCBlbGVtZW50KSB7XG4gIGNvbnN0IGN1c3RvbUV2ZW50TGlzdGVuZXIgPSB0aGlzLmN1c3RvbUV2ZW50TGlzdGVuZXJzLmZpbmQoKGN1c3RvbUV2ZW50TGlzdGVuZXIpID0+IHtcbiAgICBpZiAoKGN1c3RvbUV2ZW50TGlzdGVuZXIuZWxlbWVudCA9PT0gZWxlbWVudCkgJiYgKGN1c3RvbUV2ZW50TGlzdGVuZXIuY3VzdG9tSGFuZGxlciA9PT0gY3VzdG9tSGFuZGxlcikgJiYgKGN1c3RvbUV2ZW50TGlzdGVuZXIuY3VzdG9tRXZlbnRUeXBlID09PSBjdXN0b21FdmVudFR5cGUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBjdXN0b21FdmVudExpc3RlbmVyO1xufVxuXG5mdW5jdGlvbiBmaW5kQ3VzdG9tRXZlbnRMaXN0ZW5lcnMoY3VzdG9tRXZlbnRUeXBlKSB7XG4gIGNvbnN0IGN1c3RvbUV2ZW50TGlzdGVuZXJzID0gW107XG5cbiAgaWYgKHRoaXMuY3VzdG9tRXZlbnRMaXN0ZW5lcnMpIHtcbiAgICB0aGlzLmN1c3RvbUV2ZW50TGlzdGVuZXJzLmZvckVhY2goKGN1c3RvbUV2ZW50TGlzdGVuZXIpID0+IHtcbiAgICAgIGNvbnN0IGZvdW5kID0gKGN1c3RvbUV2ZW50TGlzdGVuZXIuY3VzdG9tRXZlbnRUeXBlID09PSBjdXN0b21FdmVudFR5cGUpO1xuXG4gICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgY3VzdG9tRXZlbnRMaXN0ZW5lcnMucHVzaChjdXN0b21FdmVudExpc3RlbmVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBjdXN0b21FdmVudExpc3RlbmVycztcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ3VzdG9tRXZlbnRMaXN0ZW5lcihjdXN0b21FdmVudFR5cGUsIGN1c3RvbUhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgbGV0IGN1c3RvbUV2ZW50TGlzdGVuZXI7XG5cbiAgY3VzdG9tRXZlbnRMaXN0ZW5lciA9ICgpID0+IHt9OyAvLy9cblxuICBPYmplY3QuYXNzaWduKGN1c3RvbUV2ZW50TGlzdGVuZXIsIHtcbiAgICBlbGVtZW50LFxuICAgIGN1c3RvbUhhbmRsZXIsXG4gICAgY3VzdG9tRXZlbnRUeXBlXG4gIH0pO1xuXG4gIHJldHVybiBjdXN0b21FdmVudExpc3RlbmVyO1xufVxuXG5jb25zdCBjdXN0b21FdmVudE1peGlucyA9IHtcbiAgb25DdXN0b21FdmVudCxcbiAgb2ZmQ3VzdG9tRXZlbnQsXG4gIGNhbGxDdXN0b21IYW5kbGVycyxcbiAgY2FsbEN1c3RvbUhhbmRsZXJzQXN5bmMsXG4gIGFkZEN1c3RvbUV2ZW50TGlzdGVuZXIsXG4gIHJlbW92ZUN1c3RvbUV2ZW50TGlzdGVuZXIsXG4gIGZpbmRDdXN0b21FdmVudExpc3RlbmVyLFxuICBmaW5kQ3VzdG9tRXZlbnRMaXN0ZW5lcnMsXG4gIGNyZWF0ZUN1c3RvbUV2ZW50TGlzdGVuZXJcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGN1c3RvbUV2ZW50TWl4aW5zO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gbW91bnRFbGVtZW50KGVsZW1lbnQpIHtcbiAgY29uc3QgZGVzY2VuZGFudEVsZW1lbnRzID0gZWxlbWVudC5nZXREZXNjZW5kYW50RWxlbWVudHMoKSxcbiAgICAgICAgZWxlbWVudHMgPSBbXG4gICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAuLi5kZXNjZW5kYW50RWxlbWVudHNcbiAgICAgICAgXTtcblxuICBlbGVtZW50cy5yZXZlcnNlKCk7IC8vL1xuXG4gIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICBlbGVtZW50LmRpZE1vdW50ICYmIGVsZW1lbnQuZGlkTW91bnQoKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bm1vdW50RWxlbWVudChlbGVtZW50KSB7XG4gIGNvbnN0IGRlc2NlbmRhbnRFbGVtZW50cyA9IGVsZW1lbnQuZ2V0RGVzY2VuZGFudEVsZW1lbnRzKCksXG4gICAgICAgIGVsZW1lbnRzID0gW1xuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgLi4uZGVzY2VuZGFudEVsZW1lbnRzXG4gICAgICAgIF07XG5cbiAgZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgIGVsZW1lbnQud2lsbFVubW91bnQgJiYgZWxlbWVudC53aWxsVW5tb3VudCgpO1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBtb3VudEVsZW1lbnQsXG4gIHVubW91bnRFbGVtZW50XG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgT2Zmc2V0IGZyb20gXCIuL29mZnNldFwiO1xuaW1wb3J0IEJvdW5kcyBmcm9tIFwiLi9ib3VuZHNcIjtcbmltcG9ydCBqc3hNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2pzeFwiO1xuaW1wb3J0IGtleU1peGlucyBmcm9tIFwiLi9taXhpbnMva2V5XCI7XG5pbXBvcnQgY2xpY2tNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2NsaWNrXCI7XG5pbXBvcnQgc3RhdGVNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL3N0YXRlXCI7XG5pbXBvcnQgZXZlbnRNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2V2ZW50XCI7XG5pbXBvcnQgbW91c2VNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL21vdXNlXCI7XG5pbXBvcnQgcmVzaXplTWl4aW5zIGZyb20gXCIuL21peGlucy9yZXNpemVcIjtcbmltcG9ydCBzY3JvbGxNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL3Njcm9sbFwiO1xuaW1wb3J0IGVsZW1lbnRNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2VsZW1lbnRcIjtcbmltcG9ydCBjdXN0b21FdmVudE1peGlucyBmcm9tIFwiLi9taXhpbnMvY3VzdG9tRXZlbnRcIjtcblxuaW1wb3J0IHsgY29tYmluZSB9IGZyb20gXCIuL3V0aWxpdGllcy9vYmplY3RcIjtcbmltcG9ydCB7IGlzU1ZHVGFnTmFtZSB9IGZyb20gXCIuL3V0aWxpdGllcy9uYW1lXCI7XG5pbXBvcnQgeyBmaXJzdCwgYXVnbWVudCB9IGZyb20gXCIuL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgbW91bnRFbGVtZW50LCB1bm1vdW50RWxlbWVudCB9IGZyb20gXCIuL3V0aWxpdGllcy9lbGVtZW50XCI7XG5pbXBvcnQgeyBOT05FLFxuICAgICAgICAgQkxPQ0ssXG4gICAgICAgICBXSURUSCxcbiAgICAgICAgIFNUUklORyxcbiAgICAgICAgIEhFSUdIVCxcbiAgICAgICAgIERJU1BMQVksXG4gICAgICAgICBESVNBQkxFRCxcbiAgICAgICAgIEVNUFRZX1NUUklORyxcbiAgICAgICAgIFNWR19OQU1FU1BBQ0VfVVJJLFxuICAgICAgICAgREVGQVVMVF9QUk9QRVJUSUVTLFxuICAgICAgICAgSUdOT1JFRF9QUk9QRVJUSUVTIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmNsYXNzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihzZWxlY3Rvcikge1xuICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgdGhpcy5kb21FbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG5cbiAgICAgIHRoaXMuZG9tRWxlbWVudC5fX2VsZW1lbnRfXyA9IHRoaXM7IC8vL1xuICAgIH1cbiAgfVxuXG4gIGdldERPTUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZG9tRWxlbWVudDtcbiAgfVxuXG4gIGdldE9mZnNldCgpIHtcbiAgICBjb25zdCB0b3AgPSB0aGlzLmRvbUVsZW1lbnQub2Zmc2V0VG9wLCAgLy8vXG4gICAgICAgICAgbGVmdCA9IHRoaXMuZG9tRWxlbWVudC5vZmZzZXRMZWZ0LCAgLy8vXG4gICAgICAgICAgb2Zmc2V0ID0gbmV3IE9mZnNldCh0b3AsIGxlZnQpO1xuXG4gICAgcmV0dXJuIG9mZnNldDtcbiAgfVxuXG4gIGdldEJvdW5kcygpIHtcbiAgICBjb25zdCBib3VuZGluZ0NsaWVudFJlY3QgPSB0aGlzLmRvbUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICAgICAgYm91bmRzID0gQm91bmRzLmZyb21Cb3VuZGluZ0NsaWVudFJlY3QoYm91bmRpbmdDbGllbnRSZWN0KTtcblxuICAgIHJldHVybiBib3VuZHM7XG4gIH1cblxuICBnZXRXaWR0aChpbmNsdWRlQm9yZGVyID0gdHJ1ZSkge1xuICAgIGNvbnN0IHdpZHRoID0gaW5jbHVkZUJvcmRlciA/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZG9tRWxlbWVudC5vZmZzZXRXaWR0aCA6XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5kb21FbGVtZW50LmNsaWVudFdpZHRoO1xuXG4gICAgcmV0dXJuIHdpZHRoO1xuICB9XG5cbiAgc2V0V2lkdGgod2lkdGgpIHtcbiAgICB3aWR0aCA9IGAke3dpZHRofXB4YDsgLy8vXG5cbiAgICB0aGlzLnN0eWxlKFdJRFRILCB3aWR0aCk7XG4gIH1cblxuICBnZXRIZWlnaHQoaW5jbHVkZUJvcmRlciA9IHRydWUpIHtcbiAgICBjb25zdCBoZWlnaHQgPSBpbmNsdWRlQm9yZGVyID9cbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9tRWxlbWVudC5vZmZzZXRIZWlnaHQgOlxuICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvbUVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuXG4gICAgcmV0dXJuIGhlaWdodDtcbiAgfVxuXG4gIHNldEhlaWdodChoZWlnaHQpIHtcbiAgICBoZWlnaHQgPSBgJHtoZWlnaHR9cHhgOyAvLy9cblxuICAgIHRoaXMuc3R5bGUoSEVJR0hULCBoZWlnaHQpO1xuICB9XG5cbiAgaGFzQXR0cmlidXRlKG5hbWUpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5oYXNBdHRyaWJ1dGUobmFtZSk7IH1cblxuICBnZXRBdHRyaWJ1dGUobmFtZSkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LmdldEF0dHJpYnV0ZShuYW1lKTsgfVxuXG4gIHNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkgeyB0aGlzLmRvbUVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTsgfVxuXG4gIGNsZWFyQXR0cmlidXRlKG5hbWUpIHsgdGhpcy5kb21FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShuYW1lKTsgfVxuXG4gIGFkZEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkgeyB0aGlzLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7IH1cblxuICByZW1vdmVBdHRyaWJ1dGUobmFtZSkgeyB0aGlzLmNsZWFyQXR0cmlidXRlKG5hbWUpOyB9XG5cbiAgc2V0Q2xhc3MoY2xhc3NOYW1lKSB7IHRoaXMuZG9tRWxlbWVudC5jbGFzc05hbWUgPSBjbGFzc05hbWU7IH1cblxuICBhZGRDbGFzcyhjbGFzc05hbWUpIHsgdGhpcy5kb21FbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTsgfVxuXG4gIHJlbW92ZUNsYXNzKGNsYXNzTmFtZSkgeyB0aGlzLmRvbUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUpOyB9XG5cbiAgdG9nZ2xlQ2xhc3MoY2xhc3NOYW1lKSB7IHRoaXMuZG9tRWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKGNsYXNzTmFtZSk7IH1cblxuICBoYXNDbGFzcyhjbGFzc05hbWUpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKTsgfVxuXG4gIGNsZWFyQ2xhc3NlcygpIHsgdGhpcy5kb21FbGVtZW50LmNsYXNzTmFtZSA9IEVNUFRZX1NUUklORzsgfVxuXG4gIHByZXBlbmRUbyhwYXJlbnRFbGVtZW50KSB7IHBhcmVudEVsZW1lbnQucHJlcGVuZCh0aGlzKTsgfVxuXG4gIGFwcGVuZFRvKHBhcmVudEVsZW1lbnQpIHsgcGFyZW50RWxlbWVudC5hcHBlbmQodGhpcyk7IH1cblxuICBhZGRUbyhwYXJlbnRFbGVtZW50KSB7IHBhcmVudEVsZW1lbnQuYWRkKHRoaXMpOyB9XG5cbiAgcmVtb3ZlRnJvbShwYXJlbnRFbGVtZW50KSB7IHBhcmVudEVsZW1lbnQucmVtb3ZlKHRoaXMpOyB9XG5cbiAgaW5zZXJ0QmVmb3JlKHNpYmxpbmdFbGVtZW50KSB7XG4gICAgY29uc3QgcGFyZW50RE9NTm9kZSA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQucGFyZW50Tm9kZSwgLy8vXG4gICAgICAgICAgc2libGluZ0RPTUVsZW1lbnQgPSBzaWJsaW5nRWxlbWVudC5kb21FbGVtZW50OyAgLy8vXG5cbiAgICBwYXJlbnRET01Ob2RlLmluc2VydEJlZm9yZSh0aGlzLmRvbUVsZW1lbnQsIHNpYmxpbmdET01FbGVtZW50KTtcbiAgfVxuXG4gIGluc2VydEFmdGVyKHNpYmxpbmdFbGVtZW50KSB7XG4gICAgY29uc3QgcGFyZW50RE9NTm9kZSA9IHNpYmxpbmdFbGVtZW50LmRvbUVsZW1lbnQucGFyZW50Tm9kZSwgLy8vXG4gICAgICAgICAgc2libGluZ0RPTUVsZW1lbnQgPSBzaWJsaW5nRWxlbWVudC5kb21FbGVtZW50OyAgLy8vXG5cbiAgICBwYXJlbnRET01Ob2RlLmluc2VydEJlZm9yZSh0aGlzLmRvbUVsZW1lbnQsIHNpYmxpbmdET01FbGVtZW50Lm5leHRTaWJsaW5nKTsgIC8vL1xuICB9XG5cbiAgcHJlcGVuZChlbGVtZW50KSB7XG4gICAgY29uc3QgZG9tRWxlbWVudCA9IGVsZW1lbnQuZG9tRWxlbWVudCxcbiAgICAgICAgICBmaXJzdENoaWxkRE9NRWxlbWVudCA9IHRoaXMuZG9tRWxlbWVudC5maXJzdENoaWxkOyAgLy8vXG5cbiAgICB0aGlzLmRvbUVsZW1lbnQuaW5zZXJ0QmVmb3JlKGRvbUVsZW1lbnQsIGZpcnN0Q2hpbGRET01FbGVtZW50KTtcbiAgfVxuXG4gIGFwcGVuZChlbGVtZW50KSB7XG4gICAgY29uc3QgZG9tRWxlbWVudCA9IGVsZW1lbnQuZG9tRWxlbWVudDtcblxuICAgIHRoaXMuZG9tRWxlbWVudC5pbnNlcnRCZWZvcmUoZG9tRWxlbWVudCwgbnVsbCk7IC8vL1xuICB9XG5cbiAgaW5zZXJ0KGVsZW1lbnQpIHsgdGhpcy5hcHBlbmQoZWxlbWVudCk7IH1cblxuICBhZGQoZWxlbWVudCkgeyB0aGlzLmFwcGVuZChlbGVtZW50KTsgfVxuXG4gIHJlbW92ZShlbGVtZW50KSB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGRvbUVsZW1lbnQgPSBlbGVtZW50LmRvbUVsZW1lbnQ7XG5cbiAgICAgIHRoaXMuZG9tRWxlbWVudC5yZW1vdmVDaGlsZChkb21FbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kb21FbGVtZW50LnJlbW92ZSgpO1xuICAgIH1cbiAgfVxuXG4gIG1vdW50QmVmb3JlKHNpYmxpbmdFbGVtZW50KSB7XG4gICAgdGhpcy5pbnNlcnRCZWZvcmUoc2libGluZ0VsZW1lbnQpO1xuXG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXM7IC8vL1xuXG4gICAgbW91bnRFbGVtZW50KGVsZW1lbnQpO1xuICB9XG5cbiAgbW91bnRBZnRlcihzaWJsaW5nRWxlbWVudCkge1xuICAgIHRoaXMuaW5zZXJ0QmVmb3JlKHNpYmxpbmdFbGVtZW50KTtcblxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzOyAvLy9cblxuICAgIG1vdW50RWxlbWVudChlbGVtZW50KTtcbiAgfVxuXG4gIG1vdW50KGVsZW1lbnQpIHtcbiAgICB0aGlzLmFkZChlbGVtZW50KTtcblxuICAgIG1vdW50RWxlbWVudChlbGVtZW50KTtcbiAgfVxuXG4gIHVubW91bnQoZWxlbWVudCkge1xuICAgIHVubW91bnRFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgdGhpcy5yZW1vdmUoZWxlbWVudCk7XG4gIH1cblxuICBzaG93KGRpc3BsYXlTdHlsZSA9IEJMT0NLKSB7IHRoaXMuZGlzcGxheShkaXNwbGF5U3R5bGUpOyB9XG5cbiAgaGlkZSgpIHsgdGhpcy5zdHlsZShESVNQTEFZLCBOT05FKTsgfVxuXG4gIGRpc3BsYXkoZGlzcGxheSkgeyB0aGlzLnN0eWxlKERJU1BMQVksIGRpc3BsYXkpOyB9XG5cbiAgZW5hYmxlKCkgeyB0aGlzLmNsZWFyQXR0cmlidXRlKERJU0FCTEVEKTsgfVxuXG4gIGRpc2FibGUoKSB7IHRoaXMuc2V0QXR0cmlidXRlKERJU0FCTEVELCBESVNBQkxFRCk7IH1cblxuICBpc0VuYWJsZWQoKSB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLmlzRGlzYWJsZWQoKSxcbiAgICAgICAgICBlbmFibGVkID0gIWRpc2FibGVkO1xuXG4gICAgcmV0dXJuIGVuYWJsZWQ7XG4gIH1cblxuICBpc0Rpc2FibGVkKCkge1xuICAgIGNvbnN0IGRpc2FibGVkID0gdGhpcy5oYXNBdHRyaWJ1dGUoRElTQUJMRUQpO1xuXG4gICAgcmV0dXJuIGRpc2FibGVkO1xuICB9XG4gIFxuICBpc0Rpc3BsYXllZCgpIHtcbiAgICBjb25zdCBkaXNwbGF5ID0gdGhpcy5jc3MoRElTUExBWSksXG4gICAgICAgICAgZGlzcGxheWVkID0gKGRpc3BsYXkgIT09IE5PTkUpO1xuICAgIFxuICAgIHJldHVybiBkaXNwbGF5ZWQ7XG4gIH1cblxuICBpc1Nob3dpbmcoKSB7XG4gICAgY29uc3QgZGlzcGxheWVkID0gdGhpcy5pc0Rpc3BsYXllZCgpLFxuICAgICAgICAgIHNob3dpbmcgPSBkaXNwbGF5ZWQ7ICAvLy9cblxuICAgIHJldHVybiBzaG93aW5nO1xuICB9XG5cbiAgaXNIaWRkZW4oKSB7XG4gICAgY29uc3QgZGlzcGxheWVkID0gdGhpcy5pc0Rpc3BsYXllZCgpLFxuICAgICAgICAgIGhpZGRlbiA9ICFkaXNwbGF5ZWQ7XG5cbiAgICByZXR1cm4gaGlkZGVuO1xuICB9XG5cbiAgc3R5bGUobmFtZSwgdmFsdWUgPSBudWxsKSB7XG4gICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICB0aGlzLmRvbUVsZW1lbnQuc3R5bGVbbmFtZV0gPSB2YWx1ZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN0eWxlID0gdGhpcy5kb21FbGVtZW50LnN0eWxlW25hbWVdO1xuXG4gICAgcmV0dXJuIHN0eWxlO1xuICB9XG5cbiAgaHRtbChodG1sID0gbnVsbCkge1xuICAgIGlmIChodG1sICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBpbm5lckhUTUwgPSBodG1sOyAvLy9cblxuICAgICAgdGhpcy5kb21FbGVtZW50LmlubmVySFRNTCA9IGlubmVySFRNTFxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW5uZXJIVE1MID0gdGhpcy5kb21FbGVtZW50LmlubmVySFRNTDtcblxuICAgIGh0bWwgPSBpbm5lckhUTUw7IC8vL1xuXG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cblxuICBjc3MoY3NzID0gbnVsbCkge1xuICAgIGlmIChjc3MgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMuZG9tRWxlbWVudCksXG4gICAgICAgICAgICBjc3MgPSB7fTtcblxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNvbXB1dGVkU3R5bGUubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0Q29tcHV0ZWRTdHlsZSA9IGZpcnN0W2NvbXB1dGVkU3R5bGVdLFxuICAgICAgICAgICAgICBuYW1lID0gZmlyc3RDb21wdXRlZFN0eWxlLCAgLy8vXG4gICAgICAgICAgICAgIHZhbHVlID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpOyAvLy9cblxuICAgICAgICBjc3NbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNzcztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNzcyA9PT0gU1RSSU5HKSB7XG4gICAgICBsZXQgbmFtZSA9IGNzczsgLy8vXG5cbiAgICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMuZG9tRWxlbWVudCksXG4gICAgICAgICAgICB2YWx1ZSA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKTsgLy8vXG5cbiAgICAgIGNzcyA9IHZhbHVlOyAgLy8vXG5cbiAgICAgIHJldHVybiBjc3M7XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZXMgPSBPYmplY3Qua2V5cyhjc3MpOyAvLy9cblxuICAgIG5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gY3NzW25hbWVdO1xuXG4gICAgICB0aGlzLnN0eWxlKG5hbWUsIHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuICBcbiAgYmx1cigpIHsgdGhpcy5kb21FbGVtZW50LmJsdXIoKTsgfVxuXG4gIGZvY3VzKCkgeyB0aGlzLmRvbUVsZW1lbnQuZm9jdXMoKTsgfVxuXG4gIGhhc0ZvY3VzKCkge1xuICAgIGNvbnN0IGZvY3VzID0gKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMuZG9tRWxlbWVudCk7ICAvLy9cblxuICAgIHJldHVybiBmb2N1cztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ2xhc3MoQ2xhc3MsIHByb3BlcnRpZXMsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGNvbnN0IHsgdGFnTmFtZSB9ID0gQ2xhc3MsXG4gICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnRGcm9tVGFnTmFtZShDbGFzcywgdGFnTmFtZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSxcbiAgICAgICAgICBkZWZhdWx0UHJvcGVydGllcyA9IGRlZmF1bHRQcm9wZXJ0aWVzRnJvbUNsYXNzKENsYXNzKSxcbiAgICAgICAgICBpZ25vcmVkUHJvcGVydGllcyA9IGlnbm9yZWRQcm9wZXJ0aWVzRnJvbUNsYXNzKENsYXNzKTtcblxuICAgIGVsZW1lbnQuYXBwbHlQcm9wZXJ0aWVzKHByb3BlcnRpZXMsIGRlZmF1bHRQcm9wZXJ0aWVzLCBpZ25vcmVkUHJvcGVydGllcyk7XG5cbiAgICBlbGVtZW50LmluaXRpYWxpc2UgJiYgZWxlbWVudC5pbml0aWFsaXNlKCk7IC8vL1xuXG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVRhZ05hbWUodGFnTmFtZSwgcHJvcGVydGllcywgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgY29uc3QgQ2xhc3MgPSBFbGVtZW50LCAgLy8vXG4gICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnRGcm9tVGFnTmFtZShDbGFzcywgdGFnTmFtZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSxcbiAgICAgICAgICBkZWZhdWx0UHJvcGVydGllcyA9IHt9LCAvLy9cbiAgICAgICAgICBpZ25vcmVkUHJvcGVydGllcyA9IFtdOyAvLy9cblxuICAgIGVsZW1lbnQuYXBwbHlQcm9wZXJ0aWVzKHByb3BlcnRpZXMsIGRlZmF1bHRQcm9wZXJ0aWVzLCBpZ25vcmVkUHJvcGVydGllcyk7XG5cbiAgICBlbGVtZW50LmluaXRpYWxpc2UgJiYgZWxlbWVudC5pbml0aWFsaXNlKCk7IC8vL1xuXG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cbn1cblxuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwganN4TWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIGtleU1peGlucyk7XG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCBjbGlja01peGlucyk7XG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCBzdGF0ZU1peGlucyk7XG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCBldmVudE1peGlucyk7XG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCBtb3VzZU1peGlucyk7XG5PYmplY3QuYXNzaWduKEVsZW1lbnQucHJvdG90eXBlLCByZXNpemVNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwgc2Nyb2xsTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRWxlbWVudC5wcm90b3R5cGUsIGVsZW1lbnRNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihFbGVtZW50LnByb3RvdHlwZSwgY3VzdG9tRXZlbnRNaXhpbnMpO1xuXG5leHBvcnQgZGVmYXVsdCBFbGVtZW50O1xuXG5mdW5jdGlvbiBlbGVtZW50RnJvbVRhZ05hbWUoQ2xhc3MsIHRhZ05hbWUsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICBjb25zdCBzZWxlY3RvciA9IG51bGwsXG4gICAgICAgIGVsZW1lbnQgPSBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmNhbGwoQ2xhc3MsIG51bGwsIHNlbGVjdG9yLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpKTtcblxuICBlbGVtZW50LmRvbUVsZW1lbnQgPSBpc1NWR1RhZ05hbWUodGFnTmFtZSkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfTkFNRVNQQUNFX1VSSSwgdGFnTmFtZSkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcblxuICBlbGVtZW50LmRvbUVsZW1lbnQuX19lbGVtZW50X18gPSBlbGVtZW50OyAvLy9cblxuICByZXR1cm4gZWxlbWVudDtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdFByb3BlcnRpZXNGcm9tQ2xhc3MoQ2xhc3MsIGRlZmF1bHRQcm9wZXJ0aWVzID0ge30pIHtcbiAgaWYgKENsYXNzLmhhc093blByb3BlcnR5KERFRkFVTFRfUFJPUEVSVElFUykpIHtcbiAgICBkZWZhdWx0UHJvcGVydGllcyA9IGNvbWJpbmUoZGVmYXVsdFByb3BlcnRpZXMsIENsYXNzW0RFRkFVTFRfUFJPUEVSVElFU10pO1xuICB9XG5cbiAgY29uc3Qgc3VwZXJDbGFzcyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihDbGFzcyk7ICAvLy9cblxuICBpZiAoc3VwZXJDbGFzcyAhPT0gbnVsbCkge1xuICAgIGRlZmF1bHRQcm9wZXJ0aWVzID0gZGVmYXVsdFByb3BlcnRpZXNGcm9tQ2xhc3Moc3VwZXJDbGFzcywgZGVmYXVsdFByb3BlcnRpZXMpO1xuICB9XG5cbiAgcmV0dXJuIGRlZmF1bHRQcm9wZXJ0aWVzO1xufVxuXG5mdW5jdGlvbiBpZ25vcmVkUHJvcGVydGllc0Zyb21DbGFzcyhDbGFzcywgaWdub3JlZFByb3BlcnRpZXMgPSBbXSkge1xuICBpZiAoQ2xhc3MuaGFzT3duUHJvcGVydHkoSUdOT1JFRF9QUk9QRVJUSUVTKSkge1xuICAgIGlnbm9yZWRQcm9wZXJ0aWVzID0gYXVnbWVudChpZ25vcmVkUHJvcGVydGllcywgQ2xhc3NbSUdOT1JFRF9QUk9QRVJUSUVTXSwgKGlnbm9yZWRQcm9wZXJ0eSkgPT4ge1xuICAgICAgaWYgKCFpZ25vcmVkUHJvcGVydGllcy5pbmNsdWRlcyhpZ25vcmVkUHJvcGVydHkpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY29uc3Qgc3VwZXJDbGFzcyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihDbGFzcyk7XG5cbiAgaWYgKHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICBpZ25vcmVkUHJvcGVydGllcyA9IGlnbm9yZWRQcm9wZXJ0aWVzRnJvbUNsYXNzKHN1cGVyQ2xhc3MsIGlnbm9yZWRQcm9wZXJ0aWVzKTtcbiAgfVxuXG4gIHJldHVybiBpZ25vcmVkUHJvcGVydGllcztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVsZW1lbnQgZnJvbSBcIi4vZWxlbWVudFwiO1xuXG5pbXBvcnQgeyBmbGF0dGVuIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5pbXBvcnQgeyBTVFJJTkcsIEZVTkNUSU9OIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyByZW1vdmVGYWxzZXlFbGVtZW50cywgcmVwbGFjZVN0cmluZ3NXaXRoVGV4dEVsZW1lbnRzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2VsZW1lbnRzXCI7XG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQoZmlyc3RBcmd1bWVudCwgcHJvcGVydGllcywgLi4uY2hpbGRFbGVtZW50cykge1xuICBsZXQgZWxlbWVudCA9IG51bGw7XG5cbiAgaWYgKGZpcnN0QXJndW1lbnQpIHtcbiAgICBjaGlsZEVsZW1lbnRzID0gc2FuaXRpc2VDaGlsZEVsZW1lbnRzKGNoaWxkRWxlbWVudHMpO1xuXG4gICAgcHJvcGVydGllcyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgY2hpbGRFbGVtZW50c1xuICAgIH0sIHByb3BlcnRpZXMpO1xuXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICAvLy9cbiAgICB9IGVsc2UgaWYgKGlzU3ViY2xhc3NPZihmaXJzdEFyZ3VtZW50LCBFbGVtZW50KSkge1xuICAgICAgY29uc3QgQ2xhc3MgPSBmaXJzdEFyZ3VtZW50OyAgLy8vXG5cbiAgICAgIGVsZW1lbnQgPSBDbGFzcy5mcm9tQ2xhc3MoQ2xhc3MsIHByb3BlcnRpZXMpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpcnN0QXJndW1lbnQgPT09IFNUUklORykge1xuICAgICAgY29uc3QgdGFnTmFtZSA9IGZpcnN0QXJndW1lbnQ7IC8vL1xuXG4gICAgICBlbGVtZW50ID0gRWxlbWVudC5mcm9tVGFnTmFtZSh0YWdOYW1lLCBwcm9wZXJ0aWVzKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBmaXJzdEFyZ3VtZW50ID09PSBGVU5DVElPTikge1xuICAgICAgY29uc3QgZWxlbWVudEZ1bmN0aW9uID0gZmlyc3RBcmd1bWVudDsgIC8vL1xuXG4gICAgICBlbGVtZW50ID0gZWxlbWVudEZ1bmN0aW9uKHByb3BlcnRpZXMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufVxuXG5jb25zdCBSZWFjdCA9IHtcbiAgY3JlYXRlRWxlbWVudFxufTtcblxuZXhwb3J0IGRlZmF1bHQgUmVhY3Q7XG5cbmZ1bmN0aW9uIHNhbml0aXNlQ2hpbGRFbGVtZW50cyhjaGlsZEVsZW1lbnRzKSB7XG4gIGNoaWxkRWxlbWVudHMgPSBmbGF0dGVuKGNoaWxkRWxlbWVudHMpOyAvLy9cblxuICBjaGlsZEVsZW1lbnRzID0gcmVtb3ZlRmFsc2V5RWxlbWVudHMoY2hpbGRFbGVtZW50cyk7ICAvLy9cblxuICBjaGlsZEVsZW1lbnRzID0gcmVwbGFjZVN0cmluZ3NXaXRoVGV4dEVsZW1lbnRzKGNoaWxkRWxlbWVudHMpOyAgLy8vXG5cbiAgcmV0dXJuIGNoaWxkRWxlbWVudHM7XG59XG5cblxuZnVuY3Rpb24gaXNTdWJjbGFzc09mKGFyZ3VtZW50LCBDbGFzcykge1xuICBjb25zdCBzdWJjbGFzc09mID0gKGFyZ3VtZW50LnByb3RvdHlwZSBpbnN0YW5jZW9mIENsYXNzKTtcblxuICByZXR1cm4gc3ViY2xhc3NPZjtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVsZW1lbnQgZnJvbSBcIi4uL2VsZW1lbnRcIjtcblxuaW1wb3J0IHsgQk9EWSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm9keSBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihzZWxlY3RvciA9IEJPRFkpIHtcbiAgICBzdXBlcihzZWxlY3Rvcik7XG4gIH1cblxuICBzdGF0aWMgdGFnTmFtZSA9IFwiYm9keVwiO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRWxlbWVudCBmcm9tIFwiLi4vZWxlbWVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMaW5rIGV4dGVuZHMgRWxlbWVudCB7XG4gIGdldEhSZWYoKSB7IHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZShcImhyZWZcIik7IH1cblxuICBzZXRIUmVmKGhyZWYpIHsgcmV0dXJuIHRoaXMuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCBocmVmKTsgfVxuXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJhXCI7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENIQU5HRV9FVkVOVF9UWVBFIH0gZnJvbSBcIi4uL2V2ZW50VHlwZXNcIjtcblxuZnVuY3Rpb24gb25DaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uRXZlbnQoQ0hBTkdFX0VWRU5UX1RZUEUsIGNoYW5nZUhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZkNoYW5nZShjaGFuZ2VIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmRXZlbnQoQ0hBTkdFX0VWRU5UX1RZUEUsIGNoYW5nZUhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmNvbnN0IGNoYW5nZU1peGlucyA9IHtcbiAgb25DaGFuZ2UsXG4gIG9mZkNoYW5nZVxufTtcblxuZXhwb3J0IGRlZmF1bHQgY2hhbmdlTWl4aW5zO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRWxlbWVudCBmcm9tIFwiLi9lbGVtZW50XCI7XG5pbXBvcnQgY2hhbmdlTWl4aW5zIGZyb20gXCIuL21peGlucy9jaGFuZ2VcIjtcblxuaW1wb3J0IHsgQ0hBTkdFX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi9ldmVudFR5cGVzXCI7XG5cbmNsYXNzIElucHV0RWxlbWVudCBleHRlbmRzIEVsZW1lbnQge1xuICBvbkNoYW5nZShjaGFuZ2VIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub25FdmVudChDSEFOR0VfRVZFTlRfVFlQRSwgY2hhbmdlSGFuZGxlciwgZWxlbWVudCk7IH1cblxuICBvZmZDaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9mZkV2ZW50KENIQU5HRV9FVkVOVF9UWVBFLCBjaGFuZ2VIYW5kbGVyLCBlbGVtZW50KTsgfVxuXG4gIG9uUmVzaXplKHJlc2l6ZUhhbmRsZXIsIGVsZW1lbnQpIHt9IC8vL1xuXG4gIG9mZlJlc2l6ZShyZXNpemVIYW5kbGVyLCBlbGVtZW50KSB7fSAgLy8vXG5cbiAgZ2V0VmFsdWUoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQudmFsdWU7IH1cblxuICBnZXRTZWxlY3Rpb25TdGFydCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5zZWxlY3Rpb25TdGFydDsgfVxuXG4gIGdldFNlbGVjdGlvbkVuZCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5zZWxlY3Rpb25FbmQ7IH1cbiAgXG4gIGlzUmVhZE9ubHkoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQucmVhZE9ubHk7IH1cblxuICBzZXRWYWx1ZSh2YWx1ZSkgeyB0aGlzLmRvbUVsZW1lbnQudmFsdWUgPSB2YWx1ZTsgfVxuXG4gIHNldFNlbGVjdGlvblN0YXJ0KHNlbGVjdGlvblN0YXJ0KSB7IHRoaXMuZG9tRWxlbWVudC5zZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvblN0YXJ0OyB9XG5cbiAgc2V0U2VsZWN0aW9uRW5kKHNlbGVjdGlvbkVuZCkgeyB0aGlzLmRvbUVsZW1lbnQuc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uRW5kOyB9XG5cbiAgc2V0UmVhZE9ubHkocmVhZE9ubHkpIHsgdGhpcy5kb21FbGVtZW50LnJlYWRPbmx5ID0gcmVhZE9ubHk7IH1cblxuICBzZWxlY3QoKSB7IHRoaXMuZG9tRWxlbWVudC5zZWxlY3QoKTsgfVxufVxuXG5PYmplY3QuYXNzaWduKElucHV0RWxlbWVudC5wcm90b3R5cGUsIGNoYW5nZU1peGlucyk7XG5cbmV4cG9ydCBkZWZhdWx0IElucHV0RWxlbWVudDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IElucHV0RWxlbWVudCBmcm9tIFwiLi4vaW5wdXRFbGVtZW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElucHV0IGV4dGVuZHMgSW5wdXRFbGVtZW50IHtcbiAgc3RhdGljIHRhZ05hbWUgPSBcImlucHV0XCI7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbGVtZW50IGZyb20gXCIuLi9lbGVtZW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1dHRvbiBleHRlbmRzIEVsZW1lbnQge1xuICBzdGF0aWMgdGFnTmFtZSA9IFwiYnV0dG9uXCI7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbGVtZW50IGZyb20gXCIuLi9lbGVtZW50XCI7XG5pbXBvcnQgY2hhbmdlTWl4aW5zIGZyb20gXCIuLi9taXhpbnMvY2hhbmdlXCI7XG5cbmNsYXNzIFNlbGVjdCBleHRlbmRzIEVsZW1lbnQge1xuICBvblJlc2l6ZShyZXNpemVIYW5kbGVyLCBlbGVtZW50KSB7fSAvLy9cblxuICBvZmZSZXNpemUocmVzaXplSGFuZGxlciwgZWxlbWVudCkge30gIC8vL1xuXG4gIGdldFZhbHVlKCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LnZhbHVlOyB9XG5cbiAgc2V0VmFsdWUodmFsdWUpIHsgdGhpcy5kb21FbGVtZW50LnZhbHVlID0gdmFsdWU7IH1cblxuICBzdGF0aWMgdGFnTmFtZSA9IFwic2VsZWN0XCI7XG59XG5cbk9iamVjdC5hc3NpZ24oU2VsZWN0LnByb3RvdHlwZSwgY2hhbmdlTWl4aW5zKTtcblxuZXhwb3J0IGRlZmF1bHQgU2VsZWN0O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRWxlbWVudCBmcm9tIFwiLi4vZWxlbWVudFwiO1xuaW1wb3J0IGNoYW5nZU1peGlucyBmcm9tIFwiLi4vbWl4aW5zL2NoYW5nZVwiO1xuXG5jbGFzcyBDaGVja2JveCBleHRlbmRzIEVsZW1lbnQge1xuICBpc0NoZWNrZWQoKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuY2hlY2tlZDsgfVxuXG4gIGNoZWNrKGNoZWNrZWQgPSB0cnVlKSB7IHRoaXMuZG9tRWxlbWVudC5jaGVja2VkID0gY2hlY2tlZDsgfVxuXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJpbnB1dFwiO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICB0eXBlOiBcImNoZWNrYm94XCJcbiAgfTtcbn1cblxuT2JqZWN0LmFzc2lnbihDaGVja2JveC5wcm90b3R5cGUsIGNoYW5nZU1peGlucyk7XG5cbmV4cG9ydCBkZWZhdWx0IENoZWNrYm94O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgSW5wdXRFbGVtZW50IGZyb20gXCIuLi9pbnB1dEVsZW1lbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGV4dGFyZWEgZXh0ZW5kcyBJbnB1dEVsZW1lbnQge1xuICBzdGF0aWMgdGFnTmFtZSA9IFwidGV4dGFyZWFcIjtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgb25SZXNpemUsIG9mZlJlc2l6ZSB9IGZyb20gXCIuLi9taXhpbnMvcmVzaXplXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgb25SZXNpemUsXG4gIG9mZlJlc2l6ZVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGtleU1peGlucyBmcm9tIFwiLi9taXhpbnMva2V5XCI7XG5pbXBvcnQgZXZlbnRNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2V2ZW50XCI7XG5pbXBvcnQgbW91c2VNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL21vdXNlXCI7XG5pbXBvcnQgY2xpY2tNaXhpbnMgZnJvbSBcIi4vbWl4aW5zL2NsaWNrXCI7XG5pbXBvcnQgd2luZG93TWl4aW5zIGZyb20gXCIuL21peGlucy93aW5kb3dcIjtcbmltcG9ydCBjdXN0b21FdmVudE1peGlucyBmcm9tIFwiLi9taXhpbnMvY3VzdG9tRXZlbnRcIjtcblxuaW1wb3J0IHsgVU5ERUZJTkVEIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmNsYXNzIFdpbmRvdyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuZG9tRWxlbWVudCA9IHdpbmRvdzsgLy8vXG4gIH1cblxuICBhc3NpZ24oLi4uc291cmNlcykge1xuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuZG9tRWxlbWVudDsgLy8vXG5cbiAgICBPYmplY3QuYXNzaWduKHRhcmdldCwgLi4uc291cmNlcyk7XG4gIH1cblxuICBhZGRSZXNpemVPYmplY3QoKSB7fSAvLy9cblxuICByZW1vdmVSZXNpemVPYmplY3QoKSB7fSAvLy9cblxuICBnZXRXaWR0aCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5pbm5lcldpZHRoOyB9IC8vL1xuICBcbiAgZ2V0SGVpZ2h0KCkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LmlubmVySGVpZ2h0OyB9IC8vL1xuXG4gIGdldFNjcm9sbFRvcCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5wYWdlWU9mZnNldDsgfSAgLy8vXG5cbiAgZ2V0U2Nyb2xsTGVmdCgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5wYWdlWE9mZnNldDsgfSAvLy9cblxuICBnZXRTZWxlY3Rpb24oKSB7IHJldHVybiB0aGlzLmRvbUVsZW1lbnQuZ2V0U2VsZWN0aW9uKCk7IH1cbn1cblxuT2JqZWN0LmFzc2lnbihXaW5kb3cucHJvdG90eXBlLCBrZXlNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihXaW5kb3cucHJvdG90eXBlLCBldmVudE1peGlucyk7XG5PYmplY3QuYXNzaWduKFdpbmRvdy5wcm90b3R5cGUsIG1vdXNlTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oV2luZG93LnByb3RvdHlwZSwgY2xpY2tNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihXaW5kb3cucHJvdG90eXBlLCB3aW5kb3dNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihXaW5kb3cucHJvdG90eXBlLCBjdXN0b21FdmVudE1peGlucyk7XG5cbmV4cG9ydCBkZWZhdWx0ICh0eXBlb2Ygd2luZG93ID09PSBVTkRFRklORUQpID8gdW5kZWZpbmVkIDogbmV3IFdpbmRvdygpOyAgLy8vXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFNFTEVDVElPTkNIQU5HRV9FVkVOVF9UWVBFIH0gZnJvbSBcIi4uL2V2ZW50VHlwZXNcIjtcblxuZnVuY3Rpb24gb25TZWxlY3Rpb25DaGFuZ2Uoc2VsZWN0aW9uQ2hhbmdlSGFuZGxlciwgZWxlbWVudCkgeyB0aGlzLm9uRXZlbnQoU0VMRUNUSU9OQ0hBTkdFX0VWRU5UX1RZUEUsIHNlbGVjdGlvbkNoYW5nZUhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIG9mZlNlbGVjdGlvbkNoYW5nZShzZWxlY3Rpb25DaGFuZ2VIYW5kbGVyLCBlbGVtZW50KSB7IHRoaXMub2ZmRXZlbnQoU0VMRUNUSU9OQ0hBTkdFX0VWRU5UX1RZUEUsIHNlbGVjdGlvbkNoYW5nZUhhbmRsZXIsIGVsZW1lbnQpOyB9XG5cbmZ1bmN0aW9uIGNyZWF0ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KSB7XG4gIGxldCBldmVudExpc3RlbmVyO1xuXG4gIGNvbnN0IGhhbmRsZXJFbGVtZW50ID0gZWxlbWVudDsgLy8vXG5cbiAgZXZlbnRMaXN0ZW5lciA9IChldmVudCkgPT4ge1xuICAgIGlmIChldmVudFR5cGUgPT09IFNFTEVDVElPTkNIQU5HRV9FVkVOVF9UWVBFKSB7XG4gICAgICBjb25zdCB7IGRvbUVsZW1lbnQgfSA9IGhhbmRsZXJFbGVtZW50LFxuICAgICAgICAgICAgeyBjdXJyZW50VGFyZ2V0IH0gPSBldmVudCxcbiAgICAgICAgICAgIHsgYWN0aXZlRWxlbWVudCB9ID0gY3VycmVudFRhcmdldDtcblxuICAgICAgaWYgKGRvbUVsZW1lbnQgIT09IGFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzOyAvLy9cblxuICAgIGhhbmRsZXIuY2FsbChoYW5kbGVyRWxlbWVudCwgZXZlbnQsIGVsZW1lbnQpO1xuICB9O1xuXG4gIE9iamVjdC5hc3NpZ24oZXZlbnRMaXN0ZW5lciwge1xuICAgIGVsZW1lbnQsXG4gICAgaGFuZGxlcixcbiAgICBldmVudFR5cGVcbiAgfSk7XG5cbiAgcmV0dXJuIGV2ZW50TGlzdGVuZXI7XG59XG5cbmNvbnN0IHNlbGVjdGlvbk1peGlucyA9IHtcbiAgb25TZWxlY3Rpb25DaGFuZ2UsXG4gIG9mZlNlbGVjdGlvbkNoYW5nZSxcbiAgY3JlYXRlRXZlbnRMaXN0ZW5lclxufTtcblxuZXhwb3J0IGRlZmF1bHQgc2VsZWN0aW9uTWl4aW5zO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQga2V5TWl4aW5zIGZyb20gXCIuL21peGlucy9rZXlcIjtcbmltcG9ydCBjbGlja01peGlucyBmcm9tIFwiLi9taXhpbnMvY2xpY2tcIjtcbmltcG9ydCBldmVudE1peGlucyBmcm9tIFwiLi9taXhpbnMvZXZlbnRcIjtcbmltcG9ydCBtb3VzZU1peGlucyBmcm9tIFwiLi9taXhpbnMvbW91c2VcIjtcbmltcG9ydCBzZWxlY3Rpb25NaXhpbnMgZnJvbSBcIi4vbWl4aW5zL3NlbGVjdGlvblwiO1xuaW1wb3J0IGN1c3RvbUV2ZW50TWl4aW5zIGZyb20gXCIuL21peGlucy9jdXN0b21FdmVudFwiO1xuXG5pbXBvcnQgeyBVTkRFRklORUQgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuY2xhc3MgRG9jdW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmRvbUVsZW1lbnQgPSBkb2N1bWVudDsgLy8vXG4gIH1cblxuICBnZXRET01FbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmRvbUVsZW1lbnQ7XG4gIH1cblxuICBjcmVhdGVSYW5nZSgpIHsgcmV0dXJuIHRoaXMuZG9tRWxlbWVudC5jcmVhdGVSYW5nZSgpOyB9XG5cbiAgY3JlYXRlVGV4dE5vZGUoZGF0YSkgeyByZXR1cm4gdGhpcy5kb21FbGVtZW50LmNyZWF0ZVRleHROb2RlKGRhdGEpOyB9XG59XG5cbmV4cG9ydCBkZWZhdWx0ICh0eXBlb2YgZG9jdW1lbnQgPT09IFVOREVGSU5FRCkgPyB1bmRlZmluZWQgOiBuZXcgRG9jdW1lbnQoKTsgIC8vL1xuXG5PYmplY3QuYXNzaWduKERvY3VtZW50LnByb3RvdHlwZSwga2V5TWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRG9jdW1lbnQucHJvdG90eXBlLCBjbGlja01peGlucyk7XG5PYmplY3QuYXNzaWduKERvY3VtZW50LnByb3RvdHlwZSwgZXZlbnRNaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihEb2N1bWVudC5wcm90b3R5cGUsIG1vdXNlTWl4aW5zKTtcbk9iamVjdC5hc3NpZ24oRG9jdW1lbnQucHJvdG90eXBlLCBzZWxlY3Rpb25NaXhpbnMpO1xuT2JqZWN0LmFzc2lnbihEb2N1bWVudC5wcm90b3R5cGUsIGN1c3RvbUV2ZW50TWl4aW5zKTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IExFRlRfTU9VU0VfQlVUVE9OID0gMDtcbmV4cG9ydCBjb25zdCBSSUdIVF9NT1VTRV9CVVRUT04gPSAyO1xuZXhwb3J0IGNvbnN0IE1JRERMRV9NT1VTRV9CVVRUT04gPSAxO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIExFRlRfTU9VU0VfQlVUVE9OLFxuICBSSUdIVF9NT1VTRV9CVVRUT04sXG4gIE1JRERMRV9NT1VTRV9CVVRUT05cbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgUmVhY3QgfSBmcm9tIFwiLi9yZWFjdFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCb3VuZHMgfSBmcm9tIFwiLi9ib3VuZHNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgT2Zmc2V0IH0gZnJvbSBcIi4vb2Zmc2V0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgQm9keSB9IGZyb20gXCIuL2VsZW1lbnQvYm9keVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMaW5rIH0gZnJvbSBcIi4vZWxlbWVudC9saW5rXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIElucHV0IH0gZnJvbSBcIi4vaW5wdXRFbGVtZW50L2lucHV0XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJ1dHRvbiB9IGZyb20gXCIuL2VsZW1lbnQvYnV0dG9uXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNlbGVjdCB9IGZyb20gXCIuL2VsZW1lbnQvc2VsZWN0XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVsZW1lbnQgfSBmcm9tIFwiLi9lbGVtZW50XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENoZWNrYm94IH0gZnJvbSBcIi4vZWxlbWVudC9jaGVja2JveFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXh0YXJlYSB9IGZyb20gXCIuL2lucHV0RWxlbWVudC90ZXh0YXJlYVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXh0RWxlbWVudCB9IGZyb20gXCIuL3RleHRFbGVtZW50XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIElucHV0RWxlbWVudCB9IGZyb20gXCIuL2lucHV0RWxlbWVudFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHdpbmRvdyB9IGZyb20gXCIuL3dpbmRvd1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBkb2N1bWVudCB9IGZyb20gXCIuL2RvY3VtZW50XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGV2ZW50VHlwZXMgfSBmcm9tIFwiLi9ldmVudFR5cGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG1vdXNlQnV0dG9ucyB9IGZyb20gXCIuL21vdXNlQnV0dG9uc1wiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIGVsZW1lbnRVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBSZWFjdCB9IGZyb20gXCJlYXN5XCI7XG5cbk9iamVjdC5hc3NpZ24oZ2xvYmFsVGhpcywge1xuICBSZWFjdFxufSk7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBcIi4vanV4dGFwb3NlXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IHRhZ05hbWVzID0gW1xuICBcImFcIiwgXCJhYmJyXCIsIFwiYWRkcmVzc1wiLCBcImFzaWRlXCIsIFwiYXVkaW9cIixcbiAgXCJiXCIsIFwiYmFzZVwiLCBcImJkaVwiLCBcImJkb1wiLCBcImJsb2NrcXVvdGVcIiwgXCJib2R5XCIsIFwiYnJcIiwgXCJidXR0b25cIixcbiAgXCJjYW52YXNcIiwgXCJjYXB0aW9uXCIsIFwiY2l0ZVwiLCBcImNvZGVcIiwgXCJjb2xcIiwgXCJjb2xncm91cFwiLFxuICBcImRhdGFcIiwgXCJkYXRhbGlzdFwiLCBcImRkXCIsIFwiZGVsXCIsIFwiZGV0YWlsc1wiLCBcImRmblwiLCBcImRpYWxvZ1wiLCBcImRpdlwiLCBcImRsXCIsIFwiZHRcIiwgXCJlbVwiLCBcImVtYmVkXCIsIFwiZmllbGRzZXRcIiwgXCJmaWdjYXB0aW9uXCIsIFwiZmlndXJlXCIsIFwiZm9vdGVyXCIsIFwiZm9ybVwiLFxuICBcImgxXCIsIFwiaDJcIiwgXCJoM1wiLCBcImg0XCIsIFwiaDVcIiwgXCJoNlwiLCBcImhlYWRcIiwgXCJoZWFkZXJcIiwgXCJoclwiLCBcImh0bWxcIixcbiAgXCJpXCIsIFwiaWZyYW1lXCIsIFwiaW1nXCIsIFwiaW5wdXRcIiwgXCJpbnNcIiwgXCJrYmRcIiwgXCJsYWJlbFwiLCBcImxlZ2VuZFwiLCBcImxpXCIsIFwibGlua1wiLFxuICBcIm1haW5cIiwgXCJtYXBcIiwgXCJtYXJrXCIsIFwibWV0YVwiLCBcIm1ldGVyXCIsIFwibmF2XCIsIFwibm9zY3JpcHRcIixcbiAgXCJvYmplY3RcIiwgXCJvbFwiLCBcIm9wdGdyb3VwXCIsIFwib3B0aW9uXCIsIFwib3V0cHV0XCIsXG4gIFwicFwiLCBcInBhcmFtXCIsIFwicGljdHVyZVwiLCBcInByZVwiLCBcInByb2dyZXNzXCIsXG4gIFwicVwiLCBcInJwXCIsIFwicnRcIiwgXCJydWJ5XCIsXG4gIFwic1wiLCBcInNhbXBcIiwgXCJzY3JpcHRcIiwgXCJzZWN0aW9uXCIsIFwic2VsZWN0XCIsIFwic21hbGxcIiwgXCJzb3VyY2VcIiwgXCJzcGFuXCIsIFwic3Ryb25nXCIsIFwic3R5bGVcIiwgXCJzdWJcIiwgXCJzdW1tYXJ5XCIsIFwic3VwXCIsIFwic3ZnXCIsXG4gIFwidGFibGVcIiwgXCJ0Ym9keVwiLCBcInRkXCIsIFwidGVtcGxhdGVcIiwgXCJ0ZXh0YXJlYVwiLCBcInRmb290XCIsIFwidGhcIiwgXCJ0aGVhZFwiLCBcInRpbWVcIiwgXCJ0aXRsZVwiLCBcInRyXCIsIFwidHJhY2tcIixcbiAgXCJ1XCIsIFwidWxcIixcbiAgXCJ2YXJcIiwgXCJ2aWRlb1wiLFxuICBcIndiclwiXG5dO1xuXG5leHBvcnQgZGVmYXVsdCB0YWdOYW1lcztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFRSQUNFX0xFVkVMID0gXCJ0cmFjZVwiO1xuZXhwb3J0IGNvbnN0IERFQlVHX0xFVkVMID0gXCJkZWJ1Z1wiO1xuZXhwb3J0IGNvbnN0IElORk9fTEVWRUwgPSBcImluZm9cIjtcbmV4cG9ydCBjb25zdCBXQVJOSU5HX0xFVkVMID0gXCJ3YXJuaW5nXCI7XG5leHBvcnQgY29uc3QgRVJST1JfTEVWRUwgPSBcImVycm9yXCI7XG5leHBvcnQgY29uc3QgRkFUQUxfTEVWRUwgPSBcImZhdGFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgVFJBQ0VfTEVWRUwsXG4gIERFQlVHX0xFVkVMLFxuICBJTkZPX0xFVkVMLFxuICBXQVJOSU5HX0xFVkVMLFxuICBFUlJPUl9MRVZFTCxcbiAgRkFUQUxfTEVWRUxcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBHRVRfTUVUSE9EID0gXCJHRVRcIjtcbmV4cG9ydCBjb25zdCBQT1NUX01FVEhPRCA9IFwiUE9TVFwiO1xuZXhwb3J0IGNvbnN0IFBBVENIX01FVEhPRCA9IFwiUEFUQ0hcIjtcbmV4cG9ydCBjb25zdCBERUxFVEVfTUVUSE9EID0gXCJERUxFVEVcIjtcbmV4cG9ydCBjb25zdCBPUFRJT05TX01FVEhPRCA9IFwiT1BUSU9OU1wiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIEdFVF9NRVRIT0QsXG4gIFBPU1RfTUVUSE9ELFxuICBQQVRDSF9NRVRIT0QsXG4gIERFTEVURV9NRVRIT0QsXG4gIE9QVElPTlNfTUVUSE9EXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgUFJBR01BX0hFQURFUiA9IFwicHJhZ21hXCI7XG5leHBvcnQgY29uc3QgQUNDRVBUX0hFQURFUiA9IFwiYWNjZXB0XCI7XG5leHBvcnQgY29uc3QgTE9DQVRJT05fSEVBREVSID0gXCJsb2NhdGlvblwiO1xuZXhwb3J0IGNvbnN0IFVTRVJfQUdFTlRfSEVBREVSID0gXCJ1c2VyLWFnZW50XCI7XG5leHBvcnQgY29uc3QgQ09OVEVOVF9UWVBFX0hFQURFUiA9IFwiY29udGVudC10eXBlXCI7XG5leHBvcnQgY29uc3QgQVVUSE9SSVpBVElPTl9IRUFERVIgPSBcImF1dGhvcml6YXRpb25cIjtcbmV4cG9ydCBjb25zdCBDQUNIRV9DT05UUk9MX0hFQURFUiA9IFwiY2FjaGUtY29udHJvbFwiO1xuZXhwb3J0IGNvbnN0IENPTlRFTlRfTEVOR1RIX0hFQURFUiA9IFwiY29udGVudC1sZW5ndGhcIjtcbmV4cG9ydCBjb25zdCBUUkFOU0ZFUl9FTkNPRElOR19IRUFERVIgPSBcInRyYW5zZmVyLWVuY29kaW5nXCI7XG5leHBvcnQgY29uc3QgQ09OVEVOVF9ESVNQT1NJVElPTl9IRUFERVIgPSBcImNvbnRlbnQtZGlzcG9zaXRpb25cIjtcbmV4cG9ydCBjb25zdCBBQ0NFU1NfQ09OVFJPTF9BTExPV19PUklHSU5fSEVBREVSID0gXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW5cIjtcbmV4cG9ydCBjb25zdCBBQ0NFU1NfQ09OVFJPTF9BTExPV19NRVRIT0RTX0hFQURFUiA9IFwiYWNjZXNzLWNvbnRyb2wtYWxsb3ctbWV0aG9kc1wiO1xuZXhwb3J0IGNvbnN0IEFDQ0VTU19DT05UUk9MX0FMTE9XX0hFQURFUlNfSEVBREVSID0gXCJhY2Nlc3MtY29udHJvbC1hbGxvdy1oZWFkZXJzXCI7XG5leHBvcnQgY29uc3QgQUNDRVNTX0NPTlRST0xfUkVRVUVTVF9NRVRIT0RfSEVBREVSID0gXCJhY2Nlc3MtY29udHJvbC1yZXF1ZXN0LW1ldGhvZFwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFBSQUdNQV9IRUFERVIsXG4gIEFDQ0VQVF9IRUFERVIsXG4gIExPQ0FUSU9OX0hFQURFUixcbiAgVVNFUl9BR0VOVF9IRUFERVIsXG4gIENPTlRFTlRfVFlQRV9IRUFERVIsXG4gIEFVVEhPUklaQVRJT05fSEVBREVSLFxuICBDQUNIRV9DT05UUk9MX0hFQURFUixcbiAgQ09OVEVOVF9MRU5HVEhfSEVBREVSLFxuICBUUkFOU0ZFUl9FTkNPRElOR19IRUFERVIsXG4gIENPTlRFTlRfRElTUE9TSVRJT05fSEVBREVSLFxuICBBQ0NFU1NfQ09OVFJPTF9BTExPV19PUklHSU5fSEVBREVSLFxuICBBQ0NFU1NfQ09OVFJPTF9BTExPV19NRVRIT0RTX0hFQURFUixcbiAgQUNDRVNTX0NPTlRST0xfQUxMT1dfSEVBREVSU19IRUFERVIsXG4gIEFDQ0VTU19DT05UUk9MX1JFUVVFU1RfTUVUSE9EX0hFQURFUlxufTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBUQUJfS0VZX0NPREUgPSA5O1xuZXhwb3J0IGNvbnN0IFNISUZUX0tFWV9DT0RFID0gMTY7XG5leHBvcnQgY29uc3QgRU5URVJfS0VZX0NPREUgPSAxMztcbmV4cG9ydCBjb25zdCBFU0NBUEVfS0VZX0NPREUgPSAyNztcbmV4cG9ydCBjb25zdCBERUxFVEVfS0VZX0NPREUgPSA0NjtcbmV4cG9ydCBjb25zdCBCQUNLU1BBQ0VfS0VZX0NPREUgPSA4O1xuZXhwb3J0IGNvbnN0IEFSUk9XX1VQX0tFWV9DT0RFID0gMzg7XG5leHBvcnQgY29uc3QgQVJST1dfRE9XTl9LRVlfQ09ERSA9IDQwO1xuZXhwb3J0IGNvbnN0IEFSUk9XX0xFRlRfS0VZX0NPREUgPSAzNztcbmV4cG9ydCBjb25zdCBBUlJPV19SSUdIVF9LRVlfQ09ERSA9IDM5O1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFRBQl9LRVlfQ09ERSxcbiAgU0hJRlRfS0VZX0NPREUsXG4gIEVOVEVSX0tFWV9DT0RFLFxuICBFU0NBUEVfS0VZX0NPREUsXG4gIERFTEVURV9LRVlfQ09ERSxcbiAgQkFDS1NQQUNFX0tFWV9DT0RFLFxuICBBUlJPV19VUF9LRVlfQ09ERSxcbiAgQVJST1dfRE9XTl9LRVlfQ09ERSxcbiAgQVJST1dfTEVGVF9LRVlfQ09ERSxcbiAgQVJST1dfUklHSFRfS0VZX0NPREVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBVVEY4X0VOQ09ESU5HID0gXCJ1dGY4XCI7XG5leHBvcnQgY29uc3QgVVRGXzhfRU5DT0RJTkcgPSBcInV0Zi04XCI7XG5leHBvcnQgY29uc3QgQkFTRTY0X0VOQ09ESU5HID0gXCJiYXNlNjRcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBVVEY4X0VOQ09ESU5HLFxuICBVVEZfOF9FTkNPRElORyxcbiAgQkFTRTY0X0VOQ09ESU5HXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgVVBfQ0hBUkFDVEVSID0gXCJcdTAwMWJbQVwiO1xuZXhwb3J0IGNvbnN0IEVUWF9DSEFSQUNURVIgPSBcIlxcdTAwMDNcIjtcbmV4cG9ydCBjb25zdCBCQVJfQ0hBUkFDVEVSID0gXCJ8XCI7XG5leHBvcnQgY29uc3QgREFTSF9DSEFSQUNURVIgPSBcIi1cIjtcbmV4cG9ydCBjb25zdCBET1dOX0NIQVJBQ1RFUiA9IFwiXHUwMDFiW0JcIjtcbmV4cG9ydCBjb25zdCBMRUZUX0NIQVJBQ1RFUiA9IFwiXHUwMDFiW0RcIjtcbmV4cG9ydCBjb25zdCBSSUdIVF9DSEFSQUNURVIgPSBcIlx1MDAxYltDXCI7XG5leHBvcnQgY29uc3QgU1BBQ0VfQ0hBUkFDVEVSID0gXCIgXCI7XG5leHBvcnQgY29uc3QgQ09NTUFfQ0hBUkFDVEVSID0gXCIsXCI7XG5leHBvcnQgY29uc3QgQ09MT05fQ0hBUkFDVEVSID0gXCI6XCI7XG5leHBvcnQgY29uc3QgUEVSSU9EX0NIQVJBQ1RFUiA9IFwiLlwiO1xuZXhwb3J0IGNvbnN0IENUUkxfQ19DSEFSQUNURVIgPSBcIl5DXCI7XG5leHBvcnQgY29uc3QgV0lMRENBUkRfQ0hBUkFDVEVSID0gXCIqXCI7XG5leHBvcnQgY29uc3QgQkFDS1RJQ0tfREVMSU1JVEVSID0gXCJgXCI7XG5leHBvcnQgY29uc3QgTkVXX0xJTkVfQ0hBUkFDVEVSID0gXCJcXG5cIjtcbmV4cG9ydCBjb25zdCBCQUNLU1BBQ0VfQ0hBUkFDVEVSID0gU3RyaW5nLmZyb21DaGFyQ29kZSgxMjcpO1xuZXhwb3J0IGNvbnN0IEFNUEVSU0FORF9DSEFSQUNURVIgPSBcIiZcIjtcbmV4cG9ydCBjb25zdCBMRVNTX1RIQU5fQ0hBUkFDVEVSID0gXCImbHQ7XCI7XG5leHBvcnQgY29uc3QgR1JFQVRFUl9USEFOX0NIQVJBQ1RFUiA9IFwiJmd0O1wiO1xuZXhwb3J0IGNvbnN0IEZPUldBUkRfU0xBU0hfQ0hBUkFDVEVSID0gXCIvXCI7XG5leHBvcnQgY29uc3QgQ0FSUklBR0VfUkVUVVJOX0NIQVJBQ1RFUiA9IFwiXFxyXCI7XG5leHBvcnQgY29uc3QgRVhDTEFNQVRJT05fTUFSS19DSEFSQUNURVIgPSBcIiFcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBVUF9DSEFSQUNURVIsXG4gIEVUWF9DSEFSQUNURVIsXG4gIEJBUl9DSEFSQUNURVIsXG4gIERBU0hfQ0hBUkFDVEVSLFxuICBET1dOX0NIQVJBQ1RFUixcbiAgTEVGVF9DSEFSQUNURVIsXG4gIFJJR0hUX0NIQVJBQ1RFUixcbiAgU1BBQ0VfQ0hBUkFDVEVSLFxuICBDT01NQV9DSEFSQUNURVIsXG4gIENPTE9OX0NIQVJBQ1RFUixcbiAgUEVSSU9EX0NIQVJBQ1RFUixcbiAgQ1RSTF9DX0NIQVJBQ1RFUixcbiAgV0lMRENBUkRfQ0hBUkFDVEVSLFxuICBCQUNLVElDS19ERUxJTUlURVIsXG4gIE5FV19MSU5FX0NIQVJBQ1RFUixcbiAgQU1QRVJTQU5EX0NIQVJBQ1RFUixcbiAgQkFDS1NQQUNFX0NIQVJBQ1RFUixcbiAgTEVTU19USEFOX0NIQVJBQ1RFUixcbiAgR1JFQVRFUl9USEFOX0NIQVJBQ1RFUixcbiAgRk9SV0FSRF9TTEFTSF9DSEFSQUNURVIsXG4gIENBUlJJQUdFX1JFVFVSTl9DSEFSQUNURVIsXG4gIEVYQ0xBTUFUSU9OX01BUktfQ0hBUkFDVEVSXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgWkVST18wX1NUQVRVU19DT0RFID0gMDtcbmV4cG9ydCBjb25zdCBPS18yMDBfU1RBVFVTX0NPREUgPSAyMDA7XG5leHBvcnQgY29uc3QgRk9VTkRfMzAyX1NUQVRVU19DT0RFID0gMzAyO1xuZXhwb3J0IGNvbnN0IENSRUFURURfMjAxX1NUQVRVU19DT0RFID0gMjAxO1xuZXhwb3J0IGNvbnN0IFNFRV9PVEhFUl8zMDNfU1RBVFVTX0NPREUgPSAzMDM7XG5leHBvcnQgY29uc3QgRk9SQklEREVOXzQwM19TVEFUVVNfQ09ERSA9IDQwMztcbmV4cG9ydCBjb25zdCBOT1RfRk9VTkRfNDA0X1NUQVRVU19DT0RFID0gNDA0O1xuZXhwb3J0IGNvbnN0IE5PX0NPTlRFTlRfMjA0X1NUQVRVU19DT0RFID0gMjA0O1xuZXhwb3J0IGNvbnN0IEJBRF9HQVRFV0FZXzUwMl9TVEFUVVNfQ09ERSA9IDUwMjtcbmV4cG9ydCBjb25zdCBCQURfUkVRVUVTVF80MDBfU1RBVFVTX0NPREUgPSA0MDA7XG5leHBvcnQgY29uc3QgVU5BVVRIT1JJWkVEXzQwMV9TVEFUVVNfQ09ERSA9IDQwMTtcbmV4cG9ydCBjb25zdCBSRVFVRVNUX1RJTUVPVVRfNDA4X1NUQVRVU19DT0RFID0gNDA4O1xuZXhwb3J0IGNvbnN0IFRPT19NQU5ZX1JFUVVFU1RTXzQyOV9TVEFUVVNfQ09ERSA9IDQyOTtcbmV4cG9ydCBjb25zdCBTRVJWSUNFX1VOQVZBSUxBQkxFXzUwM19TVEFUVVNfQ09ERSA9IDUwMztcbmV4cG9ydCBjb25zdCBJTlRFUk5BTF9TRVJWRVJfRVJST1JfNTAwX1NUQVRVU19DT0RFID0gNTAwO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIFpFUk9fMF9TVEFUVVNfQ09ERSxcbiAgT0tfMjAwX1NUQVRVU19DT0RFLFxuICBGT1VORF8zMDJfU1RBVFVTX0NPREUsXG4gIENSRUFURURfMjAxX1NUQVRVU19DT0RFLFxuICBTRUVfT1RIRVJfMzAzX1NUQVRVU19DT0RFLFxuICBGT1JCSURERU5fNDAzX1NUQVRVU19DT0RFLFxuICBOT1RfRk9VTkRfNDA0X1NUQVRVU19DT0RFLFxuICBOT19DT05URU5UXzIwNF9TVEFUVVNfQ09ERSxcbiAgQkFEX0dBVEVXQVlfNTAyX1NUQVRVU19DT0RFLFxuICBCQURfUkVRVUVTVF80MDBfU1RBVFVTX0NPREUsXG4gIFVOQVVUSE9SSVpFRF80MDFfU1RBVFVTX0NPREUsXG4gIFJFUVVFU1RfVElNRU9VVF80MDhfU1RBVFVTX0NPREUsXG4gIFRPT19NQU5ZX1JFUVVFU1RTXzQyOV9TVEFUVVNfQ09ERSxcbiAgU0VSVklDRV9VTkFWQUlMQUJMRV81MDNfU1RBVFVTX0NPREUsXG4gIElOVEVSTkFMX1NFUlZFUl9FUlJPUl81MDBfU1RBVFVTX0NPREVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBURVhUX0hUTUxfQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L2h0bWxcIjtcbmV4cG9ydCBjb25zdCBURVhUX1BMQUlOX0NPTlRFTlRfVFlQRSA9IFwidGV4dC9wbGFpblwiO1xuZXhwb3J0IGNvbnN0IEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG5leHBvcnQgY29uc3QgVEVYVF9IVE1MX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLThcIjtcbmV4cG9ydCBjb25zdCBURVhUX1BMQUlOX0NIQVJTRVRfVVRGXzhfQ09OVEVOVF9UWVBFID0gXCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04XCI7XG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fT0NURVRfU1RSRUFNX0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCI7XG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fWF9XV1dfRk9STV9FTkNPREVEX0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCI7XG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05fSlNPTl9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiO1xuZXhwb3J0IGNvbnN0IEFQUExJQ0FUSU9OX1hfV1dXX0ZPUk1fRU5DT0RFRF9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRSA9IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PXV0Zi04XCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgVEVYVF9IVE1MX0NPTlRFTlRfVFlQRSxcbiAgVEVYVF9QTEFJTl9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX0pTT05fQ09OVEVOVF9UWVBFLFxuICBURVhUX0hUTUxfQ0hBUlNFVF9VVEZfOF9DT05URU5UX1RZUEUsXG4gIFRFWFRfUExBSU5fQ0hBUlNFVF9VVEZfOF9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX09DVEVUX1NUUkVBTV9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX0pTT05fQ0hBUlNFVF9VVEZfOF9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX1hfV1dXX0ZPUk1fRU5DT0RFRF9DT05URU5UX1RZUEUsXG4gIEFQUExJQ0FUSU9OX1hfV1dXX0ZPUk1fRU5DT0RFRF9DSEFSU0VUX1VURl84X0NPTlRFTlRfVFlQRVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFpFUk9fMF9TVEFUVVNfTUVTU0FHRSA9IFwiXCI7XG5leHBvcnQgY29uc3QgT0tfMjAwX1NUQVRVU19NRVNTQUdFID0gXCJPS1wiO1xuZXhwb3J0IGNvbnN0IEZPVU5EXzMwMl9TVEFUVVNfTUVTU0FHRSA9IFwiRm91bmRcIjtcbmV4cG9ydCBjb25zdCBDUkVBVEVEXzIwMV9TVEFUVVNfTUVTU0FHRSA9IFwiQ3JlYXRlZFwiO1xuZXhwb3J0IGNvbnN0IFNFRV9PVEhFUl8zMDNfU1RBVFVTX01FU1NBR0UgPSBcIlNlZSBvdGhlclwiO1xuZXhwb3J0IGNvbnN0IEZPUkJJRERFTl80MDNfU1RBVFVTX01FU1NBR0UgPSBcIkZvcmJpZGRlblwiO1xuZXhwb3J0IGNvbnN0IE5PVF9GT1VORF80MDRfU1RBVFVTX01FU1NBR0UgPSBcIk5vdCBmb3VuZFwiO1xuZXhwb3J0IGNvbnN0IE5PX0NPTlRFTlRfMjA0X1NUQVRVU19NRVNTQUdFID0gXCJObyBjb250ZW50XCI7XG5leHBvcnQgY29uc3QgQkFEX0dBVEVXQVlfNTAyX1NUQVRVU19NRVNTQUdFID0gXCJCYWQgZ2F0ZXdheVwiO1xuZXhwb3J0IGNvbnN0IEJBRF9SRVFVRVNUXzQwMF9TVEFUVVNfTUVTU0FHRSA9IFwiQmFkIHJlcXVlc3RcIjtcbmV4cG9ydCBjb25zdCBVTkFVVEhPUklaRURfNDAxX1NUQVRVU19NRVNTQUdFID0gXCJVbmF1dGhvcml6ZWRcIjtcbmV4cG9ydCBjb25zdCBSRVFVRVNUX1RJTUVPVVRfNDA4X1NUQVRVU19NRVNTQUdFID0gXCJSZXF1ZXN0IHRpbWVvdXRcIjtcbmV4cG9ydCBjb25zdCBUT09fTUFOWV9SRVFVRVNUU180MjlfU1RBVFVTX01FU1NBR0UgPSBcIlRvbyBtYW55IHJlcXVlc3RzXCI7XG5leHBvcnQgY29uc3QgU0VSVklDRV9VTkFWQUlMQUJMRV81MDNfU1RBVFVTX01FU1NBR0UgPSBcIlNlcnZpY2UgdW5hdmFpbGFibGVcIjtcbmV4cG9ydCBjb25zdCBJTlRFUk5BTF9TRVJWRVJfRVJST1JfNTAwX1NUQVRVU19NRVNTQUdFID0gXCJJbnRlcm5hbCBzZXJ2ZXIgZXJyb3JcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBaRVJPXzBfU1RBVFVTX01FU1NBR0UsXG4gIE9LXzIwMF9TVEFUVVNfTUVTU0FHRSxcbiAgRk9VTkRfMzAyX1NUQVRVU19NRVNTQUdFLFxuICBDUkVBVEVEXzIwMV9TVEFUVVNfTUVTU0FHRSxcbiAgU0VFX09USEVSXzMwM19TVEFUVVNfTUVTU0FHRSxcbiAgRk9SQklEREVOXzQwM19TVEFUVVNfTUVTU0FHRSxcbiAgTk9UX0ZPVU5EXzQwNF9TVEFUVVNfTUVTU0FHRSxcbiAgTk9fQ09OVEVOVF8yMDRfU1RBVFVTX01FU1NBR0UsXG4gIEJBRF9HQVRFV0FZXzUwMl9TVEFUVVNfTUVTU0FHRSxcbiAgQkFEX1JFUVVFU1RfNDAwX1NUQVRVU19NRVNTQUdFLFxuICBVTkFVVEhPUklaRURfNDAxX1NUQVRVU19NRVNTQUdFLFxuICBSRVFVRVNUX1RJTUVPVVRfNDA4X1NUQVRVU19NRVNTQUdFLFxuICBUT09fTUFOWV9SRVFVRVNUU180MjlfU1RBVFVTX01FU1NBR0UsXG4gIFNFUlZJQ0VfVU5BVkFJTEFCTEVfNTAzX1NUQVRVU19NRVNTQUdFLFxuICBJTlRFUk5BTF9TRVJWRVJfRVJST1JfNTAwX1NUQVRVU19NRVNTQUdFXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgWkVSTyA9IFwiMFwiO1xuZXhwb3J0IGNvbnN0IERBVEEgPSBcImRhdGFcIjtcbmV4cG9ydCBjb25zdCBFUlJPUiA9IFwiZXJyb3JcIjtcbmV4cG9ydCBjb25zdCBTVFJJTkcgPSBcInN0cmluZ1wiO1xuZXhwb3J0IGNvbnN0IE5VTUJFUiA9IFwibnVtYmVyXCI7XG5leHBvcnQgY29uc3QgQk9PTEVBTiA9IFwiYm9vbGVhblwiO1xuZXhwb3J0IGNvbnN0IERFRkFVTFQgPSBcImRlZmF1bHRcIjtcbmV4cG9ydCBjb25zdCBFTlZJUk9OTUVOVCA9IFwiRU5WSVJPTk1FTlRcIjtcbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfSlNPTiA9IFwicGFja2FnZS5qc29uXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbMF07fVxuXG5leHBvcnQgZnVuY3Rpb24gc2Vjb25kKGFycmF5KSB7IHJldHVybiBhcnJheVsxXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gdGhpcmQoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzJdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3VydGgoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzNdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWZ0aChhcnJheSkgeyByZXR1cm4gYXJyYXlbNF07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpZnRoTGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gNV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvdXJ0aExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDRdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGlyZExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDNdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWNvbmRMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAyXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZmlyc3RMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gbGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGhlYWQoYXJyYXkpIHsgcmV0dXJuIGFycmF5LnNsaWNlKDAsIDEpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWlsKGFycmF5KSB7IHJldHVybiBhcnJheS5zbGljZSgxKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gYmFjayhhcnJheSkgeyByZXR1cm4gYXJyYXkuc2xpY2UoYXJyYXkubGVuZ3RoIC0gMSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb250KGFycmF5KSB7IHJldHVybiBhcnJheS5zbGljZSgwLCBNYXRoLm1heCgxLCBhcnJheS5sZW5ndGggLSAxKSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHB1c2goYXJyYXlBLCBhcnJheUIpIHsgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoYXJyYXlBLCBhcnJheUIpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnNoaWZ0KGFycmF5QSwgYXJyYXlCKSB7IEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGFycmF5QSwgYXJyYXlCKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0KGFycmF5QSwgZWxlbWVudE9yQXJyYXkyKSB7XG4gIGNvbnN0IGFycmF5QiA9IChlbGVtZW50T3JBcnJheTIgaW5zdGFuY2VvZiBBcnJheSkgP1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50T3JBcnJheTIgOlxuICAgICAgICAgICAgICAgICAgICAgWyBlbGVtZW50T3JBcnJheTIgXTtcbiAgXG4gIHB1c2goYXJyYXlBLCBhcnJheUIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXIoYXJyYXkpIHtcbiAgY29uc3Qgc3RhcnQgPSAwO1xuICBcbiAgcmV0dXJuIGFycmF5LnNwbGljZShzdGFydCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KGFycmF5QSwgYXJyYXlCKSB7XG4gIGNvbnN0IHN0YXJ0ID0gMCxcbiAgICAgICAgZGVsZXRlQ291bnQgPSBhcnJheUIubGVuZ3RoOyAgLy8vXG4gIFxuICBzcGxpY2UoYXJyYXlBLCBzdGFydCwgZGVsZXRlQ291bnQsIGFycmF5Qik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZShhcnJheUEsIGFycmF5QikgeyBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShhcnJheUEsIGFycmF5Qik7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoKGFycmF5QSwgYXJyYXlCLCBjYWxsYmFjaykge1xuICBsZXQgbWF0Y2hlcyA9IGZhbHNlO1xuXG4gIGNvbnN0IGFycmF5QUxlbmd0aCA9IGFycmF5QS5sZW5ndGgsXG4gICAgICAgIGFycmF5Qkxlbmd0aCA9IGFycmF5Qi5sZW5ndGg7XG5cbiAgaWYgKGFycmF5QUxlbmd0aCA9PT0gYXJyYXlCTGVuZ3RoKSB7XG4gICAgbWF0Y2hlcyA9IGFycmF5QS5ldmVyeSgoZWxlbWVudEEsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50QiA9IGFycmF5QltpbmRleF0sXG4gICAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50QSwgZWxlbWVudEIsIGluZGV4KTtcblxuICAgICAgaWYgKHBhc3NlZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBtYXRjaGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZChhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgZWxlbWVudHMgPSBbXTtcblxuICBmb3J3YXJkc0ZvckVhY2goYXJyYXksIChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlKGFycmF5LCBlbGVtZW50LCBjYWxsYmFjaykge1xuICBsZXQgc3RhcnQ7XG4gIFxuICBjb25zdCBmb3VuZCA9IGFycmF5LnNvbWUoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgc3RhcnQgPSBpbmRleDsgIC8vL1xuICAgICAgXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuICBcbiAgaWYgKGZvdW5kKSB7XG4gICAgY29uc3QgZGVsZXRlQ291bnQgPSAxO1xuXG4gICAgYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCwgZWxlbWVudCk7XG4gIH1cblxuICByZXR1cm4gZm91bmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGxpY2UoYXJyYXlBLCBzdGFydCwgZGVsZXRlQ291bnQgPSBJbmZpbml0eSwgYXJyYXlCID0gW10pIHtcbiAgY29uc3QgYXJncyA9IFsgc3RhcnQsIGRlbGV0ZUNvdW50LCAuLi5hcnJheUIgXSxcbiAgICAgICAgZGVsZXRlZEVsZW1lbnRzID0gQXJyYXkucHJvdG90eXBlLnNwbGljZS5hcHBseShhcnJheUEsIGFyZ3MpO1xuXG4gIHJldHVybiBkZWxldGVkRWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXIoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGRlbGV0ZWRFbGVtZW50cyA9IFtdO1xuICBcbiAgYmFja3dhcmRzRm9yRWFjaChhcnJheSwgKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKCFwYXNzZWQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gaW5kZXgsICAvLy9cbiAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMSxcbiAgICAgICAgICAgIGRlbGV0ZWRFbGVtZW50cyA9IGFycmF5LnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpLFxuICAgICAgICAgICAgZmlyc3REZWxldGVkRWxlbWVudCA9IGZpcnN0KGRlbGV0ZWRFbGVtZW50cyk7XG4gICAgICBcbiAgICAgIGRlbGV0ZWRFbGVtZW50cy51bnNoaWZ0KGZpcnN0RGVsZXRlZEVsZW1lbnQpOyAgLy8vXG4gICAgfVxuICB9KTtcbiAgXG4gIHJldHVybiBkZWxldGVkRWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcnVuZShhcnJheSwgY2FsbGJhY2spIHtcbiAgbGV0IGRlbGV0ZWRFbGVtZW50ID0gdW5kZWZpbmVkO1xuICBcbiAgYXJyYXkuc29tZSgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxLFxuICAgICAgICAgICAgZGVsZXRlZEVsZW1lbnRzID0gYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCksXG4gICAgICAgICAgICBmaXJzdERlbGV0ZWRFbGVtZW50ID0gZmlyc3QoZGVsZXRlZEVsZW1lbnRzKTtcbiAgICAgIFxuICAgICAgZGVsZXRlZEVsZW1lbnQgPSBmaXJzdERlbGV0ZWRFbGVtZW50OyAgLy8vXG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG4gIFxuICByZXR1cm4gZGVsZXRlZEVsZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0KGFycmF5LCBjYWxsYmFjaykge1xuICBsZXQgZGVsZXRlZEVsZW1lbnQgPSB1bmRlZmluZWQ7XG5cbiAgYXJyYXkuc29tZSgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICBjb25zdCBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IDEsXG4gICAgICAgICAgICBkZWxldGVkRWxlbWVudHMgPSBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KSxcbiAgICAgICAgICAgIGZpcnN0RGVsZXRlZEVsZW1lbnQgPSBmaXJzdChkZWxldGVkRWxlbWVudHMpO1xuXG4gICAgICBkZWxldGVkRWxlbWVudCA9IGZpcnN0RGVsZXRlZEVsZW1lbnQ7ICAvLy9cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZGVsZXRlZEVsZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRjaChhcnJheSwgZWxlbWVudCwgY2FsbGJhY2spIHtcbiAgY29uc3QgZm91bmQgPSBhcnJheS5zb21lKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cblxuICBpZiAoZm91bmQpIHtcbiAgICBhcnJheS5wdXNoKGVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGZvdW5kO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHJlc3MoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGxldCBpbmRleDEgPSAwLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlIChpbmRleDEgPCBsZW5ndGgpIHtcbiAgICBjb25zdCBlbGVtZW50QiA9IGFycmF5W2luZGV4MV07XG5cbiAgICBmb3IgKGxldCBpbmRleDIgPSBsZW5ndGggLSAxOyBpbmRleDIgPiBpbmRleDE7IGluZGV4Mi0tKSB7XG4gICAgICBjb25zdCBlbGVtZW50QSA9IGFycmF5W2luZGV4Ml0sXG4gICAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50QSwgZWxlbWVudEIpO1xuXG4gICAgICBpZiAocGFzc2VkKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gaW5kZXgyLCAvLy9cbiAgICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxO1xuXG4gICAgICAgIGFycmF5LnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGluZGV4MSsrO1xuXG4gICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lKGFycmF5QSwgYXJyYXlCLCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheSA9IFtcbiAgICAuLi5hcnJheUEsXG4gICAgLi4uYXJyYXlCXG4gIF07XG5cbiAgY29tcHJlc3MoYXJyYXksIGNhbGxiYWNrKTtcblxuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdWdtZW50KGFycmF5QSwgYXJyYXlCLCBjYWxsYmFjaykge1xuICBhcnJheUIuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICBhcnJheUEucHVzaChlbGVtZW50KTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VwYXJhdGUoYXJyYXksIGFycmF5QSwgYXJyYXlCLCBjYWxsYmFjaykge1xuICBhcnJheS5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIHBhc3NlZCA/XG4gICAgICBhcnJheUEucHVzaChlbGVtZW50KSA6XG4gICAgICAgIGFycmF5Qi5wdXNoKGVsZW1lbnQpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRzRmluZChhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGaW5kKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNTb21lKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgIHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcbiAgICBcbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNTb21lKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNFdmVyeShhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRXZlcnkoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGFycmF5TGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZvciAobGV0IGluZGV4ID0gYXJyYXlMZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNSZWR1Y2UoYXJyYXksIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgbGV0IHZhbHVlID0gaW5pdGlhbFZhbHVlOyAvLy9cblxuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgdmFsdWUgPSBjYWxsYmFjayh2YWx1ZSwgZWxlbWVudCwgaW5kZXgpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzUmVkdWNlKGFycmF5LCBjYWxsYmFjaywgaW5pdGlhbFZhbHVlKSB7XG4gIGxldCB2YWx1ZSA9IGluaXRpYWxWYWx1ZTsgLy8vXG5cbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSBhcnJheUxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4LS0pIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgdmFsdWUgPSBjYWxsYmFjayh2YWx1ZSwgZWxlbWVudCwgaW5kZXgpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBmaXJzdCxcbiAgc2Vjb25kLFxuICB0aGlyZCxcbiAgZm91cnRoLFxuICBmaWZ0aCxcbiAgZmlmdGhMYXN0LFxuICBmb3VydGhMYXN0LFxuICB0aGlyZExhc3QsXG4gIHNlY29uZExhc3QsXG4gIGZpcnN0TGFzdCxcbiAgbGFzdCxcbiAgaGVhZCxcbiAgdGFpbCxcbiAgYmFjayxcbiAgZnJvbnQsXG4gIHB1c2gsXG4gIHVuc2hpZnQsXG4gIGNvbmNhdCxcbiAgY2xlYXIsXG4gIGNvcHksXG4gIG1lcmdlLFxuICBtYXRjaCxcbiAgZmluZCxcbiAgcmVwbGFjZSxcbiAgc3BsaWNlLFxuICBmaWx0ZXIsXG4gIHBydW5lLFxuICBleHRyYWN0LFxuICBwYXRjaCxcbiAgY29tcHJlc3MsXG4gIGNvbWJpbmUsXG4gIGF1Z21lbnQsXG4gIHNlcGFyYXRlLFxuICBmb3J3YXJkc0ZpbmQsXG4gIGJhY2t3YXJkc0ZpbmQsXG4gIGZvcndhcmRzU29tZSxcbiAgYmFja3dhcmRzU29tZSxcbiAgZm9yd2FyZHNFdmVyeSxcbiAgYmFja3dhcmRzRXZlcnksXG4gIGZvcndhcmRzUmVkdWNlLFxuICBiYWNrd2FyZHNSZWR1Y2UsXG4gIGZvcndhcmRzRm9yRWFjaCxcbiAgYmFja3dhcmRzRm9yRWFjaFxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZmlyc3QsIHNlY29uZCwgbGFzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aE5hbWUocGF0aCkge1xuICBwYXRoID0gcGF0aC5yZXBsYWNlKC9eXFwvLywgRU1QVFlfU1RSSU5HKS5yZXBsYWNlKC9cXC8kLywgRU1QVFlfU1RSSU5HKTsgLy8vXG5cbiAgY29uc3QgcGF0aE5hbWUgPSAoL1xcLy8udGVzdChwYXRoKSA9PT0gZmFsc2UpO1xuXG4gIHJldHVybiBwYXRoTmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aFRvcG1vc3ROYW1lKHBhdGgpIHtcbiAgY29uc3QgcGF0aE5hbWUgPSBpc1BhdGhOYW1lKHBhdGgpLFxuICAgICAgICBwYXRoQWJzb2x1dGVQYXRoID0gaXNQYXRoQWJzb2x1dGVQYXRoKHBhdGgpLFxuICAgICAgICBwYXRoVG9wbW9zdE5hbWUgPSAocGF0aE5hbWUgJiYgcGF0aEFic29sdXRlUGF0aCk7XG5cbiAgcmV0dXJuIHBhdGhUb3Btb3N0TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aFJlbGF0aXZlUGF0aChwYXRoKSB7XG4gIGNvbnN0IHBhdGhSZWxhdGl2ZVBhdGggPSAhL15cXC8vLnRlc3QocGF0aCk7XG5cbiAgcmV0dXJuIHBhdGhSZWxhdGl2ZVBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BhdGhBYnNvbHV0ZVBhdGgocGF0aCkge1xuICBjb25zdCBwYXRoQWJzb2x1dGVQYXRoID0gL15cXC8vLnRlc3QocGF0aCk7XG5cbiAgcmV0dXJuIHBhdGhBYnNvbHV0ZVBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RvcG1vc3ROYW1lSW5BYnNvbHV0ZVBhdGgodG9wbW9zdE5hbWUsIGFic29sdXRlUGF0aCkge1xuICBjb25zdCByZWdFeHAgPSBuZXcgUmVnRXhwKGBeJHt0b3Btb3N0TmFtZX0oPzpcXFxcLy4rKT8kYCksXG4gICAgICAgIHRvcG1vc3ROYW1lSW5BYnNvbHV0ZVBhdGggPSByZWdFeHAudGVzdChhYnNvbHV0ZVBhdGgpO1xuXG4gIHJldHVybiB0b3Btb3N0TmFtZUluQWJzb2x1dGVQYXRoXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lUGF0aHMocGF0aCwgcmVsYXRpdmVQYXRoKSB7XG4gIGxldCBjb21iaW5lZFBhdGggPSBudWxsO1xuXG4gIGNvbnN0IHBhdGhOYW1lcyA9IHBhdGguc3BsaXQoL1xcLy8pLFxuICAgICAgICByZWxhdGl2ZVBhdGhOYW1lcyA9IHJlbGF0aXZlUGF0aC5zcGxpdCgvXFwvLyk7XG5cbiAgbGV0IGxhc3RQYXRoTmFtZSxcbiAgICAgIGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9IGZpcnN0KHJlbGF0aXZlUGF0aE5hbWVzKTtcblxuICBpZiAoZmlyc3RSZWxhdGl2ZVBhdGhOYW1lID09PSBcIi5cIikge1xuICAgIHJlbGF0aXZlUGF0aE5hbWVzLnNoaWZ0KCk7XG4gIH1cblxuICBmaXJzdFJlbGF0aXZlUGF0aE5hbWUgPSBmaXJzdChyZWxhdGl2ZVBhdGhOYW1lcyk7XG4gIGxhc3RQYXRoTmFtZSA9IGxhc3QocGF0aE5hbWVzKTtcblxuICB3aGlsZSAoKGZpcnN0UmVsYXRpdmVQYXRoTmFtZSA9PT0gXCIuLlwiKSAmJiAobGFzdFBhdGhOYW1lICE9PSB1bmRlZmluZWQpKSB7XG4gICAgcmVsYXRpdmVQYXRoTmFtZXMuc2hpZnQoKTtcbiAgICBwYXRoTmFtZXMucG9wKCk7XG5cbiAgICBmaXJzdFJlbGF0aXZlUGF0aE5hbWUgPSBmaXJzdChyZWxhdGl2ZVBhdGhOYW1lcyk7XG4gICAgbGFzdFBhdGhOYW1lID0gbGFzdChwYXRoTmFtZXMpO1xuICB9XG5cbiAgaWYgKGxhc3RQYXRoTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgY29tYmluZWRQYXRoTmFtZXMgPSBbXS5jb25jYXQocGF0aE5hbWVzKS5jb25jYXQocmVsYXRpdmVQYXRoTmFtZXMpO1xuXG4gICAgY29tYmluZWRQYXRoID0gY29tYmluZWRQYXRoTmFtZXMuam9pbihcIi9cIik7XG4gIH1cblxuICByZXR1cm4gY29tYmluZWRQYXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0ZW5hdGVQYXRocyhwYXRoLCByZWxhdGl2ZVBhdGgpIHtcbiAgcGF0aCA9IHBhdGgucmVwbGFjZSgvXFwvJC8sIEVNUFRZX1NUUklORyk7ICAvLy9cblxuICBjb25zdCBjb25jYXRlbmF0ZWRQYXRoID0gYCR7cGF0aH0vJHtyZWxhdGl2ZVBhdGh9YDtcblxuICByZXR1cm4gY29uY2F0ZW5hdGVkUGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJvdHRvbW1vc3ROYW1lRnJvbVBhdGgocGF0aCkge1xuICBsZXQgYm90dG9tbW9zdE5hbWUgPSBudWxsO1xuXG4gIGNvbnN0IG1hdGNoZXMgPSBwYXRoLm1hdGNoKC9eLipcXC8oW15cXC9dK1xcLz8pJC8pO1xuXG4gIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyk7XG5cbiAgICBib3R0b21tb3N0TmFtZSA9IHNlY29uZE1hdGNoOyAgLy8vXG4gIH1cblxuICByZXR1cm4gYm90dG9tbW9zdE5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b3Btb3N0RGlyZWN0b3J5UGF0aEZyb21QYXRoKHBhdGgpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IHBhdGgubWF0Y2goL14oLispXFwvW15cXC9dK1xcLz8kLyksXG4gICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICB0b3Btb3N0RGlyZWN0b3J5UGF0aCA9IHNlY29uZE1hdGNoOyAvLy9cblxuICByZXR1cm4gdG9wbW9zdERpcmVjdG9yeVBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoKHBhdGgpIHtcbiAgbGV0IHRvcG1vc3REaXJlY3RvcnlOYW1lID0gbnVsbDtcblxuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXihbXlxcL10rKVxcLy4rJC8pO1xuXG4gIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyk7XG5cbiAgICB0b3Btb3N0RGlyZWN0b3J5TmFtZSA9IHNlY29uZE1hdGNoOyAgLy8vXG4gIH1cblxuICByZXR1cm4gdG9wbW9zdERpcmVjdG9yeU5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lRnJvbVBhdGgocGF0aCkge1xuICBsZXQgcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZSA9IG51bGw7XG5cbiAgY29uc3QgbWF0Y2hlcyA9IHBhdGgubWF0Y2goL14oLiopXFwvW15cXC9dK1xcLz8kLyk7XG5cbiAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKTtcblxuICAgIHBhdGhXaXRob3V0Qm90dG9tbW9zdE5hbWUgPSBzZWNvbmRNYXRjaDsgLy8vXG4gIH1cblxuICByZXR1cm4gcGF0aFdpdGhvdXRCb3R0b21tb3N0TmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aChwYXRoKSB7XG4gIGxldCBwYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lID0gbnVsbDtcblxuICBjb25zdCBtYXRjaGVzID0gcGF0aC5tYXRjaCgvXlteXFwvXStcXC8oLispJC8pO1xuXG4gIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyk7XG5cbiAgICBwYXRoV2l0aG91dFRvcG1vc3REaXJlY3RvcnlOYW1lID0gc2Vjb25kTWF0Y2g7XG4gIH1cblxuICByZXR1cm4gcGF0aFdpdGhvdXRUb3Btb3N0RGlyZWN0b3J5TmFtZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc1BhdGhOYW1lLFxuICBpc1BhdGhUb3Btb3N0TmFtZSxcbiAgaXNQYXRoUmVsYXRpdmVQYXRoLFxuICBpc1BhdGhBYnNvbHV0ZVBhdGgsXG4gIGlzVG9wbW9zdE5hbWVJbkFic29sdXRlUGF0aCxcbiAgY29tYmluZVBhdGhzLFxuICBjb25jYXRlbmF0ZVBhdGhzLFxuICBib3R0b21tb3N0TmFtZUZyb21QYXRoLFxuICB0b3Btb3N0RGlyZWN0b3J5UGF0aEZyb21QYXRoLFxuICB0b3Btb3N0RGlyZWN0b3J5TmFtZUZyb21QYXRoLFxuICBwYXRoV2l0aG91dEJvdHRvbW1vc3ROYW1lRnJvbVBhdGgsXG4gIHBhdGhXaXRob3V0VG9wbW9zdERpcmVjdG9yeU5hbWVGcm9tUGF0aFxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc2Vjb25kIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgQ09MT05fQ0hBUkFDVEVSLCBBTVBFUlNBTkRfQ0hBUkFDVEVSIH0gZnJvbSBcIi4uL2NoYXJhY3RlcnNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIG92ZXJ3cml0ZShoZWFkZXJzLCBuYW1lLCB2YWx1ZSkge1xuICBjb25zdCBsb3dlckNhc2VOYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBleGlzdGluZ05hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGVhZGVycyksICAvLy9cbiAgICAgICAgZXhpc3RpbmdOYW1lID0gZXhpc3RpbmdOYW1lcy5maW5kKChleGlzdGluZ05hbWUpID0+IHtcbiAgICAgICAgICBjb25zdCBleGlzdGluZ0xvd2VyQ2FzZU5hbWUgPSBleGlzdGluZ05hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgIGlmIChleGlzdGluZ0xvd2VyQ2FzZU5hbWUgPT09IGxvd2VyQ2FzZU5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkgfHwgbnVsbDtcblxuICBpZiAoZXhpc3RpbmdOYW1lICE9PSBudWxsKSB7XG4gICAgaGVhZGVyc1tleGlzdGluZ05hbWVdID0gdmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuZGVyd3JpdGUoaGVhZGVycywgbmFtZSwgdmFsdWUpIHtcbiAgY29uc3QgbG93ZXJDYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgZXhpc3RpbmdOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlYWRlcnMpLCAgLy8vXG4gICAgICAgIGV4aXN0aW5nTmFtZSA9IGV4aXN0aW5nTmFtZXMuZmluZCgoZXhpc3RpbmdOYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdMb3dlckNhc2VOYW1lID0gZXhpc3RpbmdOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICBpZiAoZXhpc3RpbmdMb3dlckNhc2VOYW1lID09PSBsb3dlckNhc2VOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pIHx8IG51bGw7XG5cbiAgaWYgKGV4aXN0aW5nTmFtZSA9PT0gbnVsbCkge1xuICAgIGhlYWRlcnNbbmFtZV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9ydEZyb21Ib3N0KGhvc3QpIHtcbiAgbGV0IHBvcnQ7XG5cbiAgY29uc3QgbWF0Y2hlcyA9IGhvc3QubWF0Y2goL15odHRwcz86XFwvXFwvKFteXFwvXSspLyksXG4gICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICBpbmRleCA9IHNlY29uZE1hdGNoLmluZGV4T2YoQ09MT05fQ0hBUkFDVEVSKTtcblxuICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgY29uc3Qgc2VjdXJlID0gc2VjdXJlRnJvbUhvc3QoaG9zdCk7XG5cbiAgICBwb3J0ID0gc2VjdXJlID8gNDQzIDogODA7IC8vL1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHN0YXJ0ID0gaW5kZXggKyAxLFxuICAgICAgICAgIHBvcnRTdHJpbmcgPSBzZWNvbmRNYXRjaC5zdWJzdHJpbmcoc3RhcnQpO1xuXG4gICAgcG9ydCA9IE51bWJlcihwb3J0U3RyaW5nKTtcbiAgfVxuXG4gIHJldHVybiBwb3J0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VjdXJlRnJvbUhvc3QoaG9zdCkge1xuICBjb25zdCBzZWN1cmUgPSAvXmh0dHBzOlxcL1xcLy8udGVzdChob3N0KTtcblxuICByZXR1cm4gc2VjdXJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaG9zdG5hbWVGcm9tSG9zdChob3N0KSB7XG4gIGNvbnN0IG1hdGNoZXMgPSBob3N0Lm1hdGNoKC9eaHR0cHM/OlxcL1xcLyhbXjpcXC9dKykvKSxcbiAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgIGhvc3RuYW1lID0gc2Vjb25kTWF0Y2g7IC8vL1xuXG4gIHJldHVybiBob3N0bmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5U3RyaW5nRnJvbVF1ZXJ5KHF1ZXJ5KSB7XG4gIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXMocXVlcnkpLFxuICAgICAgICBuYW1lc0xlbmd0aCA9IG5hbWVzLmxlbmd0aCxcbiAgICAgICAgbGFzdEluZGV4ID0gbmFtZXNMZW5ndGggLSAxLFxuICAgICAgICBxdWVyeVN0cmluZyA9IG5hbWVzLnJlZHVjZSgocXVlcnlTdHJpbmcsIG5hbWUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBxdWVyeVtuYW1lXSxcbiAgICAgICAgICAgICAgICBlbmNvZGVkTmFtZSA9IGVuY29kZVVSSUNvbXBvbmVudChuYW1lKSxcbiAgICAgICAgICAgICAgICBlbmNvZGVkVmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpLFxuICAgICAgICAgICAgICAgIGFtcGVyc2FuZE9yTm90aGluZyA9IChpbmRleCAhPT0gbGFzdEluZGV4KSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTVBFUlNBTkRfQ0hBUkFDVEVSIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU1QVFlfU1RSSU5HO1xuICBcbiAgICAgICAgICBxdWVyeVN0cmluZyArPSBgJHtlbmNvZGVkTmFtZX09JHtlbmNvZGVkVmFsdWV9JHthbXBlcnNhbmRPck5vdGhpbmd9YDtcbiAgXG4gICAgICAgICAgcmV0dXJuIHF1ZXJ5U3RyaW5nO1xuICAgICAgICB9LCBFTVBUWV9TVFJJTkcpO1xuXG4gIHJldHVybiBxdWVyeVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVybEZyb21Ib3N0VVJJQW5kUXVlcnkoaG9zdCwgdXJpLCBxdWVyeSkge1xuICBjb25zdCBxdWVyeVN0cmluZyA9IHF1ZXJ5U3RyaW5nRnJvbVF1ZXJ5KHF1ZXJ5KSxcbiAgICAgICAgdXJsID0gKHF1ZXJ5U3RyaW5nID09PSBFTVBUWV9TVFJJTkcpID9cbiAgICAgICAgICAgICAgICBgJHtob3N0fSR7dXJpfWAgOlxuICAgICAgICAgICAgICAgICAgYCR7aG9zdH0ke3VyaX0/JHtxdWVyeVN0cmluZ31gO1xuXG4gIHJldHVybiB1cmw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgb3ZlcndyaXRlLFxuICB1bmRlcndyaXRlLFxuICBwb3J0RnJvbUhvc3QsXG4gIHNlY3VyZUZyb21Ib3N0LFxuICBob3N0bmFtZUZyb21Ib3N0LFxuICBxdWVyeVN0cmluZ0Zyb21RdWVyeSxcbiAgdXJsRnJvbUhvc3RVUklBbmRRdWVyeVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gc3RybGVuKHN0cmluZykge1xuICBsZXQgbGVuZ3RoID0gMDtcblxuICBjb25zdCBpdGVyYXRvciA9IHN0cmluZ1tTeW1ib2wuaXRlcmF0b3JdKCk7XG5cbiAgbGV0IGNoYXJhY3RlciA9IGl0ZXJhdG9yLm5leHQoKTtcblxuICB3aGlsZSAoIWNoYXJhY3Rlci5kb25lKSB7XG4gICAgY2hhcmFjdGVyID0gaXRlcmF0b3IubmV4dCgpO1xuXG4gICAgbGVuZ3RoKytcbiAgfVxuXG4gIHJldHVybiBsZW5ndGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJjbXAoc3RyaW5nQSwgc3RyaW5nQikge1xuICBsZXQgZGlmZmVyZW5jZTtcblxuICBjb25zdCBpdGVyYXRvckEgPSBzdHJpbmdBW1N5bWJvbC5pdGVyYXRvcl0oKSwgLy8vXG4gICAgICAgIGl0ZXJhdG9yQiA9IHN0cmluZ0JbU3ltYm9sLml0ZXJhdG9yXSgpOyAvLy9cblxuICBsZXQgY2hhcmFjdGVyQSA9IGl0ZXJhdG9yQS5uZXh0KCksXG4gICAgICBjaGFyYWN0ZXJCID0gaXRlcmF0b3JCLm5leHQoKSxcbiAgICAgIGNvZGVQb2ludEEsXG4gICAgICBjb2RlUG9pbnRCO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29kZVBvaW50QSA9IGNoYXJhY3RlckEudmFsdWUgPyAvLy9cbiAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJBLnZhbHVlLmNvZGVQb2ludEF0KDApIDpcbiAgICAgICAgICAgICAgICAgICAgIDA7XG4gICAgY29kZVBvaW50QiA9IGNoYXJhY3RlckIudmFsdWUgPyAvLy9cbiAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJCLnZhbHVlLmNvZGVQb2ludEF0KDApIDpcbiAgICAgICAgICAgICAgICAgICAgIDA7XG5cbiAgICBkaWZmZXJlbmNlID0gY29kZVBvaW50QiAtIGNvZGVQb2ludEE7XG5cbiAgICBpZiAoZGlmZmVyZW5jZSAhPT0gMCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKGNoYXJhY3RlckEuZG9uZSB8fCBjaGFyYWN0ZXJCLmRvbmUpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNoYXJhY3RlckEgPSBpdGVyYXRvckEubmV4dCgpO1xuICAgIGNoYXJhY3RlckIgPSBpdGVyYXRvckIubmV4dCgpO1xuICB9XG5cbiAgcmV0dXJuIGRpZmZlcmVuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmRleE9mKHN0cmluZywgc2VhcmNoU3RyaW5nKSB7XG4gIGxldCBpbmRleCA9IC0xLFxuICAgICAgZm91bmQgPSBmYWxzZTtcblxuICBjb25zdCBzZWFyY2hTdHJpbmdMZW5ndGggPSBzdHJsZW4oc2VhcmNoU3RyaW5nKTtcblxuICBpZiAoc2VhcmNoU3RyaW5nTGVuZ3RoID4gMCkge1xuICAgIGxldCBjaGFyYWN0ZXI7XG5cbiAgICBjb25zdCBpdGVyYXRvciA9IHN0cmluZ1tTeW1ib2wuaXRlcmF0b3JdKCksXG4gICAgICAgICAgc2VhcmNoSXRlcmF0b3IgPSBzZWFyY2hTdHJpbmdbU3ltYm9sLml0ZXJhdG9yXSgpLFxuICAgICAgICAgIHNlYXJjaENoYXJhY3RlciA9IHNlYXJjaEl0ZXJhdG9yLm5leHQoKTtcblxuICAgIGNoYXJhY3RlciA9IGl0ZXJhdG9yLm5leHQoKTtcblxuICAgIGluZGV4Kys7XG5cbiAgICB3aGlsZSAoIWNoYXJhY3Rlci5kb25lKSB7XG4gICAgICBpZiAoY2hhcmFjdGVyLnZhbHVlID09PSBzZWFyY2hDaGFyYWN0ZXIudmFsdWUpIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgICAgICBlbmQgPSBzdGFydCArIHNlYXJjaFN0cmluZ0xlbmd0aCxcbiAgICAgICAgICAgICAgc3ViU3RyaW5nID0gc3Vic3RyaW5nKHN0cmluZywgc3RhcnQsIGVuZCksXG4gICAgICAgICAgICAgIGRpZmZlcmVuY2UgPSBzdHJjbXAoc3ViU3RyaW5nLCBzZWFyY2hTdHJpbmcpO1xuXG4gICAgICAgIGlmIChkaWZmZXJlbmNlID09PSAwKSB7XG4gICAgICAgICAgZm91bmQgPSB0cnVlO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2hhcmFjdGVyID0gaXRlcmF0b3IubmV4dCgpO1xuXG4gICAgICBpbmRleCsrXG4gICAgfVxuICB9XG5cbiAgaWYgKCFmb3VuZCkge1xuICAgIGluZGV4ID0gLTE7XG4gIH1cblxuICByZXR1cm4gaW5kZXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdHJpbmcoc3RyaW5nLCBzdGFydCwgZW5kID0gSW5maW5pdHkpIHtcbiAgbGV0IGluZGV4ID0gMDtcblxuICBjb25zdCBpdGVyYXRvciA9IHN0cmluZ1tTeW1ib2wuaXRlcmF0b3JdKCksXG4gICAgICAgIGNoYXJhY3RlcnMgPSBbXTtcblxuICBsZXQgY2hhcmFjdGVyID0gaXRlcmF0b3IubmV4dCgpO1xuXG4gIHdoaWxlICghY2hhcmFjdGVyLmRvbmUpIHtcbiAgICBpZiAoaW5kZXggPT09IGVuZCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKGluZGV4ID49IHN0YXJ0KSB7XG4gICAgICBjaGFyYWN0ZXJzLnB1c2goY2hhcmFjdGVyLnZhbHVlKTsgLy8vXG4gICAgfVxuXG4gICAgaW5kZXgrK1xuXG4gICAgY2hhcmFjdGVyID0gaXRlcmF0b3IubmV4dCgpO1xuICB9XG5cbiAgY29uc3Qgc3Vic3RyaW5nID0gY2hhcmFjdGVycy5qb2luKEVNUFRZX1NUUklORyk7XG5cbiAgcmV0dXJuIHN1YnN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBzdHJjbXAsXG4gIHN0cmxlbixcbiAgaW5kZXhPZixcbiAgc3Vic3RyaW5nXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gbWlncmF0ZShqc29uLCBtaWdyYXRpb25NYXAsIGxhdGVzdFZlcnNpb24pIHtcbiAgbGV0IHsgdmVyc2lvbiB9ID0ganNvbjtcblxuICB3aGlsZSAodmVyc2lvbiAhPT0gbGF0ZXN0VmVyc2lvbikge1xuICAgIGNvbnN0IG1pZ3JhdGVGdW5jdGlvbiA9IG1pZ3JhdGlvbk1hcFt2ZXJzaW9uXTtcblxuICAgIGpzb24gPSBtaWdyYXRlRnVuY3Rpb24oanNvbik7XG5cbiAgICAoeyB2ZXJzaW9uIH0gPSBqc29uKTtcbiAgfVxuXG4gIHJldHVybiBqc29uO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG1pZ3JhdGVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gd2hpbHN0KG9wZXJhdGlvbiwgZG9uZSwgY29udGV4dCkge1xyXG4gIGxldCBjb3VudCA9IC0xO1xyXG5cclxuICBmdW5jdGlvbiBuZXh0KCkge1xyXG4gICAgY291bnQrKztcclxuXHJcbiAgICBjb25zdCBpbmRleCA9IGNvdW50LCAgLy8vXHJcbiAgICAgICAgICB0ZXJtaW5hdGUgPSBvcGVyYXRpb24obmV4dCwgZG9uZSwgY29udGV4dCwgaW5kZXgpO1xyXG5cclxuICAgIGlmICh0ZXJtaW5hdGUpIHtcclxuICAgICAgZG9uZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmV4dCgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZm9yRWFjaChhcnJheSwgb3BlcmF0aW9uLCBkb25lLCBjb250ZXh0KSB7XHJcbiAgY29uc3QgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOyAgLy8vXHJcblxyXG4gIGxldCBjb3VudCA9IC0xO1xyXG5cclxuICBmdW5jdGlvbiBuZXh0KCkge1xyXG4gICAgY291bnQrKztcclxuXHJcbiAgICBjb25zdCB0ZXJtaW5hdGUgPSAoY291bnQgPT09IGxlbmd0aCk7XHJcblxyXG4gICAgaWYgKHRlcm1pbmF0ZSkge1xyXG4gICAgICBkb25lKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBpbmRleCA9IGNvdW50LCAgLy8vXHJcbiAgICAgICAgICAgIGVsZW1lbnQgPSBhcnJheVtpbmRleF07XHJcblxyXG4gICAgICBvcGVyYXRpb24oZWxlbWVudCwgbmV4dCwgZG9uZSwgY29udGV4dCwgaW5kZXgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmV4dCgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2VxdWVuY2Uob3BlcmF0aW9ucywgZG9uZSwgY29udGV4dCkge1xyXG4gIGNvbnN0IGxlbmd0aCA9IG9wZXJhdGlvbnMubGVuZ3RoOyAgLy8vXHJcblxyXG4gIGxldCBjb3VudCA9IC0xO1xyXG5cclxuICBmdW5jdGlvbiBuZXh0KCkge1xyXG4gICAgY291bnQrKztcclxuXHJcbiAgICBjb25zdCB0ZXJtaW5hdGUgPSAoY291bnQgPT09IGxlbmd0aCk7XHJcblxyXG4gICAgaWYgKHRlcm1pbmF0ZSkge1xyXG4gICAgICBkb25lKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBpbmRleCA9IGNvdW50LCAgLy8vXHJcbiAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvbnNbaW5kZXhdO1xyXG5cclxuICAgICAgb3BlcmF0aW9uKG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHQoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGV2ZW50dWFsbHkob3BlcmF0aW9ucywgZG9uZSwgY29udGV4dCkge1xyXG4gIGNvbnN0IGxlbmd0aCA9IG9wZXJhdGlvbnMubGVuZ3RoOyAgLy8vXHJcblxyXG4gIGxldCBjb3VudCA9IDA7XHJcblxyXG4gIGZ1bmN0aW9uIG5leHQoKSB7XHJcbiAgICBjb3VudCsrO1xyXG5cclxuICAgIGNvbnN0IHRlcm1pbmF0ZSA9IChjb3VudCA9PT0gbGVuZ3RoKTtcclxuXHJcbiAgICBpZiAodGVybWluYXRlKSB7XHJcbiAgICAgIGRvbmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9wZXJhdGlvbnMuZm9yRWFjaCgob3BlcmF0aW9uLCBpbmRleCkgPT4ge1xyXG4gICAgb3BlcmF0aW9uKG5leHQsIGRvbmUsIGNvbnRleHQsIGluZGV4KTtcclxuICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlcGVhdGVkbHkob3BlcmF0aW9uLCBsZW5ndGgsIGRvbmUsIGNvbnRleHQpIHtcclxuICBsZXQgY291bnQgPSAwO1xyXG5cclxuICBmdW5jdGlvbiBuZXh0KCkge1xyXG4gICAgY291bnQrKztcclxuXHJcbiAgICBjb25zdCB0ZXJtaW5hdGUgPSAoY291bnQgPT09IGxlbmd0aCk7XHJcblxyXG4gICAgaWYgKHRlcm1pbmF0ZSkge1xyXG4gICAgICBkb25lKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICBvcGVyYXRpb24obmV4dCwgZG9uZSwgY29udGV4dCwgaW5kZXgpO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRzRm9yRWFjaChhcnJheSwgb3BlcmF0aW9uLCBkb25lLCBjb250ZXh0KSB7XHJcbiAgY29uc3QgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOyAgLy8vXHJcblxyXG4gIGxldCBjb3VudCA9IC0xO1xyXG5cclxuICBmdW5jdGlvbiBuZXh0KCkge1xyXG4gICAgY291bnQrKztcclxuXHJcbiAgICBjb25zdCB0ZXJtaW5hdGUgPSAoY291bnQgPT09IGxlbmd0aCk7XHJcblxyXG4gICAgaWYgKHRlcm1pbmF0ZSkge1xyXG4gICAgICBkb25lKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBpbmRleCA9IGNvdW50LCAgLy8vXHJcbiAgICAgICAgICAgIGVsZW1lbnQgPSBhcnJheVtpbmRleF07XHJcblxyXG4gICAgICBvcGVyYXRpb24oZWxlbWVudCwgbmV4dCwgZG9uZSwgY29udGV4dCwgaW5kZXgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmV4dCgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRm9yRWFjaChhcnJheSwgb3BlcmF0aW9uLCBkb25lLCBjb250ZXh0KSB7XHJcbiAgY29uc3QgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOyAgLy8vXHJcblxyXG4gIGxldCBjb3VudCA9IGxlbmd0aDtcclxuXHJcbiAgZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgIGNvdW50LS07XHJcblxyXG4gICAgY29uc3QgdGVybWluYXRlID0gKGNvdW50ID09PSAtMSk7XHJcblxyXG4gICAgaWYgKHRlcm1pbmF0ZSkge1xyXG4gICAgICBkb25lKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBpbmRleCA9IGNvdW50LCAgLy8vXHJcbiAgICAgICAgICAgIGVsZW1lbnQgPSBhcnJheVtpbmRleF07XHJcblxyXG4gICAgICBvcGVyYXRpb24oZWxlbWVudCwgbmV4dCwgZG9uZSwgY29udGV4dCwgaW5kZXgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmV4dCgpO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgd2hpbHN0LFxyXG4gIGZvckVhY2gsXHJcbiAgc2VxdWVuY2UsXHJcbiAgZXZlbnR1YWxseSxcclxuICByZXBlYXRlZGx5LFxyXG4gIGZvcndhcmRzRm9yRWFjaCxcclxuICBiYWNrd2FyZHNGb3JFYWNoXHJcbn07XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgR0VUX01FVEhPRCwgUE9TVF9NRVRIT0QgfSBmcm9tIFwiLi4vbWV0aG9kc1wiO1xuaW1wb3J0IHsgQVBQTElDQVRJT05fSlNPTl9DT05URU5UX1RZUEUgfSBmcm9tIFwiLi4vY29udGVudFR5cGVzXCI7XG5pbXBvcnQgeyBBQ0NFUFRfSEVBREVSLCBDT05URU5UX1RZUEVfSEVBREVSIH0gZnJvbSBcIi4uL2hlYWRlcnNcIjtcbmltcG9ydCB7IHVuZGVyd3JpdGUsIHVybEZyb21Ib3N0VVJJQW5kUXVlcnkgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2h0dHBcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldChob3N0LCB1cmksIHF1ZXJ5LCBoZWFkZXJzLCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIGNhbGxiYWNrID0gaGVhZGVyczsgLy8vXG4gICAgaGVhZGVycyA9IHt9O1xuICB9XG5cbiAgY29uc3QgbWV0aG9kID0gR0VUX01FVEhPRCxcbiAgICAgICAgYWNjZXB0ID0gQVBQTElDQVRJT05fSlNPTl9DT05URU5UX1RZUEUsXG4gICAgICAgIGNvbnRlbnQgPSBudWxsO1xuXG4gIHVuZGVyd3JpdGVBY2NlcHRIZWFkZXIoaGVhZGVycywgYWNjZXB0KTtcblxuICByZXF1ZXN0KGhvc3QsIHVyaSwgcXVlcnksIG1ldGhvZCwgaGVhZGVycywgY29udGVudCwgY2FsbGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9zdChob3N0LCB1cmksIHF1ZXJ5LCBoZWFkZXJzLCBjb250ZW50LCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIGNhbGxiYWNrID0gY29udGVudDtcbiAgICBjb250ZW50ID0gaGVhZGVycztcbiAgICBoZWFkZXJzID0ge307XG4gIH1cblxuICBjb25zdCBtZXRob2QgPSBQT1NUX01FVEhPRCxcbiAgICAgICAgYWNjZXB0ID0gQVBQTElDQVRJT05fSlNPTl9DT05URU5UX1RZUEUsXG4gICAgICAgIGNvbnRlbnRUeXBlID0gQVBQTElDQVRJT05fSlNPTl9DT05URU5UX1RZUEU7XG5cbiAgdW5kZXJ3cml0ZUFjY2VwdEhlYWRlcihoZWFkZXJzLCBhY2NlcHQpO1xuXG4gIHVuZGVyd3JpdGVDb250ZW50VHlwZUhlYWRlcihoZWFkZXJzLCBjb250ZW50VHlwZSk7XG5cbiAgcmVxdWVzdChob3N0LCB1cmksIHF1ZXJ5LCBtZXRob2QsIGhlYWRlcnMsIGNvbnRlbnQsIGNhbGxiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcXVlc3QoaG9zdCwgdXJpLCBxdWVyeSwgbWV0aG9kLCBoZWFkZXJzLCBjb250ZW50LCBjYWxsYmFjaykge1xuICBjb25zdCB1cmwgPSB1cmxGcm9tSG9zdFVSSUFuZFF1ZXJ5KGhvc3QsIHVyaSwgcXVlcnkpLFxuICAgICAgICBhY2NlcHQgPSBoZWFkZXJzW0FDQ0VQVF9IRUFERVJdIHx8IG51bGwsXG4gICAgICAgIGNvbnRlbnRUeXBlID0gaGVhZGVyc1tDT05URU5UX1RZUEVfSEVBREVSXSB8fCBudWxsLFxuICAgICAgICB4bWxIdHRwUmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gIGlmIChjb250ZW50VHlwZSA9PT0gQVBQTElDQVRJT05fSlNPTl9DT05URU5UX1RZUEUpIHtcbiAgICBjb25zdCBqc29uID0gY29udGVudCwgIC8vL1xuICAgICAgICAgIGpzb25TdHJpbmcgPSBKU09OLnN0cmluZ2lmeShqc29uKTtcblxuICAgIGNvbnRlbnQgPSBqc29uU3RyaW5nOyAgLy8vXG4gIH1cblxuICB4bWxIdHRwUmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSAoKSA9PiB7XG4gICAgY29uc3QgeyByZWFkeVN0YXRlLCBzdGF0dXMsIHJlc3BvbnNlIH0gPSB4bWxIdHRwUmVxdWVzdCxcbiAgICAgICAgICBzdGF0dXNDb2RlID0gc3RhdHVzO1xuXG4gICAgaWYgKHJlYWR5U3RhdGUgPT0gNCkge1xuICAgICAgbGV0IGNvbnRlbnQgPSByZXNwb25zZTtcblxuICAgICAgaWYgKGFjY2VwdCA9PT0gQVBQTElDQVRJT05fSlNPTl9DT05URU5UX1RZUEUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBqc29uU3RyaW5nID0gY29udGVudCwgIC8vL1xuICAgICAgICAgICAgICAgIGpzb24gPSBKU09OLnBhcnNlKGpzb25TdHJpbmcpO1xuXG4gICAgICAgICAgY29udGVudCA9IGpzb247ICAvLy9cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb250ZW50ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjYWxsYmFjayhjb250ZW50LCBzdGF0dXNDb2RlKTtcbiAgICB9XG4gIH07XG5cbiAgeG1sSHR0cFJlcXVlc3Qub3BlbihtZXRob2QsIHVybCk7XG5cbiAgaWYgKGFjY2VwdCAhPT0gbnVsbCkge1xuICAgIHhtbEh0dHBSZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoQUNDRVBUX0hFQURFUiwgYWNjZXB0KTtcbiAgfVxuXG4gIGlmIChjb250ZW50VHlwZSAhPT0gbnVsbCkge1xuICAgIHhtbEh0dHBSZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoQ09OVEVOVF9UWVBFX0hFQURFUiwgY29udGVudFR5cGUpO1xuICB9XG5cbiAgKGNvbnRlbnQgIT09IG51bGwpID9cbiAgICB4bWxIdHRwUmVxdWVzdC5zZW5kKGNvbnRlbnQpIDpcbiAgICAgIHhtbEh0dHBSZXF1ZXN0LnNlbmQoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBnZXQsXG4gIHBvc3QsXG4gIHJlcXVlc3Rcbn1cblxuZnVuY3Rpb24gdW5kZXJ3cml0ZUFjY2VwdEhlYWRlcihoZWFkZXJzLCBhY2NlcHQpIHtcbiAgY29uc3QgbmFtZSA9IEFDQ0VQVF9IRUFERVIsICAvLy9cbiAgICAgICAgdmFsdWUgPSBhY2NlcHQ7IC8vL1xuXG4gIHVuZGVyd3JpdGUoaGVhZGVycywgbmFtZSwgdmFsdWUpO1xufVxuXG5mdW5jdGlvbiB1bmRlcndyaXRlQ29udGVudFR5cGVIZWFkZXIoaGVhZGVycywgY29udGVudFRZcGUpIHtcbiAgY29uc3QgbmFtZSA9IENPTlRFTlRfVFlQRV9IRUFERVIsICAvLy9cbiAgICAgICAgdmFsdWUgPSBjb250ZW50VFlwZTsgLy8vXG5cbiAgdW5kZXJ3cml0ZShoZWFkZXJzLCBuYW1lLCB2YWx1ZSk7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgbGV2ZWxzIH0gZnJvbSBcIi4vbGV2ZWxzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG1ldGhvZHMgfSBmcm9tIFwiLi9tZXRob2RzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGhlYWRlcnMgfSBmcm9tIFwiLi9oZWFkZXJzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGtleUNvZGVzIH0gZnJvbSBcIi4va2V5Q29kZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZW5jb2RpbmdzIH0gZnJvbSBcIi4vZW5jb2RpbmdzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNoYXJhY3RlcnMgfSBmcm9tIFwiLi9jaGFyYWN0ZXJzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHN0YXR1c0NvZGVzIH0gZnJvbSBcIi4vc3RhdHVzQ29kZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY29udGVudFR5cGVzIH0gZnJvbSBcIi4vY29udGVudFR5cGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHN0YXR1c01lc3NhZ2VzIH0gZnJvbSBcIi4vc3RhdHVzTWVzc2FnZXNcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBwYXRoVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3BhdGhcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaHR0cFV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9odHRwXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FycmF5XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHN0cmluZ1V0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9zdHJpbmdcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdmVyc2lvblV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy92ZXJzaW9uXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGFzeW5jaHJvbm91c1V0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9hc3luY2hyb25vdXNcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBhamF4VXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FqYXhcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuY29uc3QgeyBMRVNTX1RIQU5fQ0hBUkFDVEVSLCBBTVBFUlNBTkRfQ0hBUkFDVEVSLCBHUkVBVEVSX1RIQU5fQ0hBUkFDVEVSIH0gPSBjaGFyYWN0ZXJzO1xuXG5leHBvcnQgZnVuY3Rpb24gc2FuaXRpc2VDb250ZW50KGNvbnRlbnQpIHtcbiAgY29uc3Qgc2FuaXRpc2VkQ29udGVudCA9IGNvbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvJi9nLCBBTVBFUlNBTkRfQ0hBUkFDVEVSKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC88L2csIExFU1NfVEhBTl9DSEFSQUNURVIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLz4vZywgR1JFQVRFUl9USEFOX0NIQVJBQ1RFUik7XG5cbiAgcmV0dXJuIHNhbml0aXNlZENvbnRlbnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCB0eXBlVHlwZSA9IFwidHlwZVwiO1xuZXhwb3J0IGNvbnN0IG5hbWVUeXBlID0gXCJuYW1lXCI7XG5leHBvcnQgY29uc3QgbnVtYmVyVHlwZSA9IFwibnVtYmVyXCI7XG5leHBvcnQgY29uc3QgY29tbWVudFR5cGUgPSBcImNvbW1lbnRcIjtcbmV4cG9ydCBjb25zdCBlbmRPZkxpbmVUeXBlID0gXCJlbmQtb2YtbGluZVwiO1xuZXhwb3J0IGNvbnN0IHdoaXRlc3BhY2VUeXBlID0gXCJ3aGl0ZXNwYWNlXCI7XG5leHBvcnQgY29uc3Qgc3RyaW5nTGl0ZXJhbFR5cGUgPSBcInN0cmluZy1saXRlcmFsXCI7XG5leHBvcnQgY29uc3QgZW5kT2ZMaW5lQ29tbWVudFR5cGUgPSBgJHtlbmRPZkxpbmVUeXBlfSAke2NvbW1lbnRUeXBlfWA7XG5leHBvcnQgY29uc3Qgc2luZ2xlTGluZUNvbW1lbnRUeXBlID0gYHNpbmdsZS1saW5lICR7Y29tbWVudFR5cGV9YDtcbmV4cG9ydCBjb25zdCByZWd1bGFyRXhwcmVzc2lvblR5cGUgPSBcInJlZ3VsYXItZXhwcmVzc2lvblwiO1xuZXhwb3J0IGNvbnN0IGVuZE9mTXVsdGlMaW5lQ29tbWVudFR5cGUgPSBgZW5kLW9mLW11bHRpLWxpbmUgJHtjb21tZW50VHlwZX1gO1xuZXhwb3J0IGNvbnN0IHN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VHlwZSA9IGBzdGFydC1vZi1tdWx0aS1saW5lICR7Y29tbWVudFR5cGV9YDtcbmV4cG9ydCBjb25zdCBtaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUeXBlID0gYG1pZGRsZS1vZi1tdWx0aS1saW5lICR7Y29tbWVudFR5cGV9YDtcblxuZXhwb3J0IGRlZmF1bHQge1xuICB0eXBlVHlwZSxcbiAgbmFtZVR5cGUsXG4gIG51bWJlclR5cGUsXG4gIGNvbW1lbnRUeXBlLFxuICBlbmRPZkxpbmVUeXBlLFxuICB3aGl0ZXNwYWNlVHlwZSxcbiAgc3RyaW5nTGl0ZXJhbFR5cGUsXG4gIGVuZE9mTGluZUNvbW1lbnRUeXBlLFxuICBzaW5nbGVMaW5lQ29tbWVudFR5cGUsXG4gIHJlZ3VsYXJFeHByZXNzaW9uVHlwZSxcbiAgZW5kT2ZNdWx0aUxpbmVDb21tZW50VHlwZSxcbiAgc3RhcnRPZk11bHRpTGluZUNvbW1lbnRUeXBlLFxuICBtaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUeXBlXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzdHJpbmdVdGlsaXRpZXMsIGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgeyBzYW5pdGlzZUNvbnRlbnQgfSBmcm9tIFwiLi91dGlsaXRpZXMvY29udGVudFwiO1xuaW1wb3J0IHsgY29tbWVudFR5cGUsIGVuZE9mTGluZVR5cGUsIHdoaXRlc3BhY2VUeXBlIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IHN0cmxlbiB9ID0gc3RyaW5nVXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb2tlbiB7XG4gIGNvbnN0cnVjdG9yKHR5cGUsIGNvbnRlbnQsIHNpZ25pZmljYW50KSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50O1xuICAgIHRoaXMuc2lnbmlmaWNhbnQgPSBzaWduaWZpY2FudDtcbiAgfVxuXG4gIGdldFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuXG4gIGdldENvbnRlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudDtcbiAgfVxuICBcbiAgZ2V0Q29udGVudExlbmd0aChuYWl2ZSA9IGZhbHNlKSB7XG4gICAgY29uc3QgY29udGVudExlbmd0aCA9IG5haXZlID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnQubGVuZ3RoIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbih0aGlzLmNvbnRlbnQpOyAvLy9cblxuICAgIHJldHVybiBjb250ZW50TGVuZ3RoO1xuICB9XG5cbiAgaXNTaWduaWZpY2FudCgpIHtcbiAgICByZXR1cm4gdGhpcy5zaWduaWZpY2FudDtcbiAgfVxuICBcbiAgaXNDb21tZW50VG9rZW4oKSB7XG4gICAgY29uc3QgdHlwZUluY2x1ZGVzQ29tbWVudFR5cGUgPSB0aGlzLnR5cGUuaW5jbHVkZXMoY29tbWVudFR5cGUpLFxuICAgICAgICAgIGNvbW1lbnRUb2tlbiA9IHR5cGVJbmNsdWRlc0NvbW1lbnRUeXBlOyAvLy9cblxuICAgIHJldHVybiBjb21tZW50VG9rZW47XG4gIH1cblxuICBpc0VuZE9mTGluZVRva2VuKCkge1xuICAgIGNvbnN0IHR5cGVFbmRPZkxpbmVUeXBlID0gKHRoaXMudHlwZS5pbmNsdWRlcyhlbmRPZkxpbmVUeXBlKSksXG4gICAgICAgICAgZW5kT2ZMaW5lVG9rZW4gPSB0eXBlRW5kT2ZMaW5lVHlwZTsgLy8vXG5cbiAgICByZXR1cm4gZW5kT2ZMaW5lVG9rZW47XG4gIH1cblxuICBpc1doaXRlc3BhY2VUb2tlbigpIHtcbiAgICBjb25zdCB0eXBlV2hpdGVzcGFjZVR5cGUgPSAodGhpcy50eXBlID09PSB3aGl0ZXNwYWNlVHlwZSksXG4gICAgICAgICAgd2hpdGVzcGFjZVRva2VuID0gdHlwZVdoaXRlc3BhY2VUeXBlOyAvLy9cblxuICAgIHJldHVybiB3aGl0ZXNwYWNlVG9rZW47XG4gIH1cblxuICBtYXRjaCh0b2tlbikge1xuICAgIGNvbnN0IHR5cGUgPSB0b2tlbi5nZXRUeXBlKCksXG4gICAgICAgICAgY29udGVudCA9IHRva2VuLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBzaWduaWZpY2FudCA9IHRva2VuLmlzU2lnbmlmaWNhbnQoKSxcbiAgICAgICAgICBtYXRjaGVzID0gKCh0aGlzLnR5cGUgPT09IHR5cGUpICYmICh0aGlzLmNvbnRlbnQgPT09IGNvbnRlbnQpICYmICh0aGlzLnNpZ25pZmljYW50ID09PSBzaWduaWZpY2FudCkpO1xuXG4gICAgcmV0dXJuIG1hdGNoZXM7XG4gIH1cblxuICBhc0hUTUwoKSB7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy50eXBlLCAvLy9cbiAgICAgICAgICBzYW5pdGlzZWRDb250ZW50ID0gc2FuaXRpc2VDb250ZW50KHRoaXMuY29udGVudCksXG4gICAgICAgICAgaHRtbCA9IGA8c3BhbiBjbGFzcz1cIiR7Y2xhc3NOYW1lfVwiPiR7c2FuaXRpc2VkQ29udGVudH08L3NwYW4+YDtcblxuICAgIHJldHVybiBodG1sO1xuICB9XG5cbiAgc3RhdGljIG1hdGNoKENsYXNzLCBjb250ZW50LCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgbGV0IHRva2VuID0gbnVsbDtcblxuICAgIGNvbnN0IHsgcmVndWxhckV4cHJlc3Npb24gfSA9IENsYXNzLFxuICAgICAgICAgIG1hdGNoZXMgPSBjb250ZW50Lm1hdGNoKHJlZ3VsYXJFeHByZXNzaW9uKTtcblxuICAgIGlmIChtYXRjaGVzICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB7IGluZGV4IH0gPSBtYXRjaGVzO1xuXG4gICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgY29uc3QgZmlyc3RNYXRjaCA9IGZpcnN0KG1hdGNoZXMpO1xuXG4gICAgICAgIGNvbnRlbnQgPSBmaXJzdE1hdGNoOyAvLy9cblxuICAgICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gY29udGVudC5sZW5ndGg7IC8vL1xuXG4gICAgICAgIGlmIChjb250ZW50TGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHsgdHlwZSB9ID0gQ2xhc3M7XG5cbiAgICAgICAgICB0b2tlbiA9IG5ldyBDbGFzcyh0eXBlLCBjb250ZW50LCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0b2tlbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xuICAgIGNvbnN0IHsgdHlwZSB9ID0gQ2xhc3MsXG4gICAgICAgICAgdG9rZW4gPSBuZXcgQ2xhc3ModHlwZSwgY29udGVudCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnRBbmRUeXBlKENsYXNzLCBjb250ZW50LCB0eXBlLCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7IHJldHVybiBuZXcgQ2xhc3ModHlwZSwgY29udGVudCwgc2lnbmlmaWNhbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRva2VuIGZyb20gXCIuLi90b2tlblwiO1xuXG5jb25zdCBzaWduaWZpY2FudCA9IHRydWU7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpZ25pZmljYW50VG9rZW4gZXh0ZW5kcyBUb2tlbiB7XG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgaWYgKGNvbnRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGVudCA9IENsYXNzOyAgLy8vXG5cbiAgICAgIENsYXNzID0gU2lnbmlmaWNhbnRUb2tlbjsgLy8vXG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbiA9IFRva2VuLm1hdGNoKENsYXNzLCBjb250ZW50LCBzaWduaWZpY2FudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBpZiAoY29udGVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb250ZW50ID0gQ2xhc3M7ICAvLy9cblxuICAgICAgQ2xhc3MgPSBTaWduaWZpY2FudFRva2VuOyAvLy9cbiAgICB9XG5cbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gVG9rZW4uZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnRBbmRUeXBlKENsYXNzLCBjb250ZW50LCB0eXBlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0eXBlID0gY29udGVudDsgLy8vXG5cbiAgICAgIGNvbnRlbnQgPSBDbGFzczsgIC8vL1xuXG4gICAgICBDbGFzcyA9IFNpZ25pZmljYW50VG9rZW47IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW4gPSBUb2tlbi5mcm9tQ29udGVudEFuZFR5cGUoQ2xhc3MsIGNvbnRlbnQsIHR5cGUsIHNpZ25pZmljYW50LCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW47XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFUgPSBcInVcIjtcbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IFNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgVSB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZSB7XG4gIGNvbnN0cnVjdG9yKHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uKSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLnJlZ3VsYXJFeHByZXNzaW9uID0gcmVndWxhckV4cHJlc3Npb247XG4gIH1cbiAgXG4gIGdldFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuICBcbiAgZ2V0UmVndWxhckV4cHJlc3Npb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucmVndWxhckV4cHJlc3Npb247XG4gIH1cblxuICBtYXRjaChjb250ZW50KSB7XG4gICAgbGV0IHNpZ25pZmljYW50VG9rZW4gPSBudWxsO1xuXG4gICAgY29uc3QgbWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2godGhpcy5yZWd1bGFyRXhwcmVzc2lvbik7XG5cbiAgICBpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgeyBpbmRleCB9ID0gbWF0Y2hlcztcblxuICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0TWF0Y2ggPSBmaXJzdChtYXRjaGVzKTtcblxuICAgICAgICBjb250ZW50ID0gZmlyc3RNYXRjaDsgLy8vXG5cbiAgICAgICAgY29uc3QgY29udGVudExlbmd0aCA9IGNvbnRlbnQubGVuZ3RoOyAvLy9cblxuICAgICAgICBpZiAoY29udGVudExlbmd0aCA+IDApIHtcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuID0gU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudEFuZFR5cGUoY29udGVudCwgdGhpcy50eXBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuO1xuICB9XG4gIFxuICBhc0VudHJ5KCkge1xuICAgIGNvbnN0IGVudHJ5ID0ge30sXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25QYXR0ZXJuID0gYCR7dGhpcy5yZWd1bGFyRXhwcmVzc2lvbn1gO1xuXG4gICAgZW50cnlbdGhpcy50eXBlXSA9IHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybjtcblxuICAgIHJldHVybiBlbnRyeTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVG9rZW4oVG9rZW4pIHtcbiAgICBjb25zdCB7IHR5cGUsIHJlZ3VsYXJFeHByZXNzaW9uIH0gPSBUb2tlbixcbiAgICAgICAgICBydWxlID0gbmV3IFJ1bGUodHlwZSwgcmVndWxhckV4cHJlc3Npb24pO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbUVudHJ5KGVudHJ5KSB7XG4gICAgY29uc3QgZW50cnlLZXlzID0gT2JqZWN0LmtleXMoZW50cnkpLFxuICAgICAgICAgIGZpcnN0RW50cnlLZXkgPSBmaXJzdChlbnRyeUtleXMpLFxuICAgICAgICAgIHR5cGUgPSBmaXJzdEVudHJ5S2V5LCAvLy9cbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4gPSBlbnRyeVt0eXBlXSxcbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvbiA9IHJlZ3VsYXJFeHByZXNzaW9uRnJvbVJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybihyZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4pLFxuICAgICAgICAgIHJ1bGUgPSBuZXcgUnVsZSh0eXBlLCByZWd1bGFyRXhwcmVzc2lvbik7XG4gICAgICAgIFxuICAgIHJldHVybiBydWxlOyBcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVHlwZUFuZFJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybih0eXBlLCByZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4pIHtcbiAgICBjb25zdCByZWd1bGFyRXhwcmVzc2lvbiA9IHJlZ3VsYXJFeHByZXNzaW9uRnJvbVJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybihyZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4pLFxuICAgICAgICAgIHJ1bGUgPSBuZXcgUnVsZSh0eXBlLCByZWd1bGFyRXhwcmVzc2lvbik7XG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWd1bGFyRXhwcmVzc2lvbkZyb21SZWd1bGFyRXhwcmVzc2lvblBhdHRlcm4ocmVndWxhckV4cHJlc3Npb25QYXR0ZXJuKSB7XG4gIGNvbnN0IGZsYWdzID0gVSwgIC8vL1xuICAgICAgICByZWdFeHAgPSBuZXcgUmVnRXhwKHJlZ3VsYXJFeHByZXNzaW9uUGF0dGVybiwgZmxhZ3MpLFxuICAgICAgICByZWd1bGFyRXhwcmVzc2lvbiA9IHJlZ0V4cDsgLy8vXG5cbiAgcmV0dXJuIHJlZ3VsYXJFeHByZXNzaW9uO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuZXhwb3J0IGNvbnN0IHBsdXMgPSBcIitcIjtcclxuZXhwb3J0IGNvbnN0IGVwc2lsb24gPSAnXHUwM0I1JztcclxuZXhwb3J0IGNvbnN0IHdpbGRjYXJkID0gXCIuXCI7XHJcbmV4cG9ydCBjb25zdCBhc3RlcmlzayA9IFwiKlwiO1xyXG5leHBvcnQgY29uc3QgZWxsaXBzaXMgPSBcIi4uLlwiO1xyXG5leHBvcnQgY29uc3Qgc2VwYXJhdG9yID0gXCI6Oj1cIjtcclxuZXhwb3J0IGNvbnN0IHRlcm1pbmF0b3IgPSBcIjtcIjtcclxuZXhwb3J0IGNvbnN0IHZlcnRpY2FsQmFyID0gXCJ8XCI7XHJcbmV4cG9ydCBjb25zdCBvcGVuQnJhY2tldCA9IFwiKFwiO1xyXG5leHBvcnQgY29uc3QgY2xvc2VCcmFja2V0ID0gXCIpXCI7XHJcbmV4cG9ydCBjb25zdCBxdWVzdGlvbk1hcmsgPSBcIj9cIjtcclxuZXhwb3J0IGNvbnN0IGV4Y2xhbWF0aW9uTWFyayA9IFwiIVwiO1xyXG5leHBvcnQgY29uc3QgTk9fV0hJVEVTUEFDRSA9IFwiPE5PX1dISVRFU1BBQ0U+XCI7XHJcbmV4cG9ydCBjb25zdCBFTkRfT0ZfTElORSA9IFwiPEVORF9PRl9MSU5FPlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIHBsdXMsXHJcbiAgZXBzaWxvbixcclxuICB3aWxkY2FyZCxcclxuICBhc3RlcmlzayxcclxuICBlbGxpcHNpcyxcclxuICBzZXBhcmF0b3IsXHJcbiAgdGVybWluYXRvcixcclxuICB2ZXJ0aWNhbEJhcixcclxuICBvcGVuQnJhY2tldCxcclxuICBjbG9zZUJyYWNrZXQsXHJcbiAgcXVlc3Rpb25NYXJrLFxyXG4gIGV4Y2xhbWF0aW9uTWFyayxcclxuICBOT19XSElURVNQQUNFLFxyXG4gIEVORF9PRl9MSU5FXHJcbn07XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzRnJvbUVudHJpZXMoZW50cmllcykge1xuICBjb25zdCBydWxlcyA9IGVudHJpZXMubWFwKChlbnRyeSkgPT4ge1xuICAgIGNvbnN0IHJ1bGUgPSBSdWxlLmZyb21FbnRyeShlbnRyeSk7XG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfSk7XG5cbiAgcmV0dXJuIHJ1bGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGV4ZXJGcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKSB7XG4gIGNvbnN0IEluQ29tbWVudENsYXNzZXMgPSBJbkNvbW1lbnRDbGFzc2VzRnJvbUNsYXNzKENsYXNzKSxcbiAgICAgICAgTm90SW5Db21tZW50Q2xhc3NlcyA9IE5vdEluQ29tbWVudENsYXNzZXNGcm9tQ2xhc3MoQ2xhc3MpLFxuICAgICAgICBsZXhlciA9IG5ldyBDbGFzcyhydWxlcywgSW5Db21tZW50Q2xhc3NlcywgTm90SW5Db21tZW50Q2xhc3Nlcyk7XG5cbiAgcmV0dXJuIGxleGVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHJ1bGVzRnJvbUVudHJpZXMsXG4gIGxleGVyRnJvbVJ1bGVzXG59O1xuXG5mdW5jdGlvbiBJbkNvbW1lbnRDbGFzc2VzRnJvbUNsYXNzKENsYXNzKSB7XG4gIGNvbnN0IHsgRW5kT2ZMaW5lQ29tbWVudFRva2VuLCBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSA9IENsYXNzO1xuXG4gIGNvbnN0IEluQ29tbWVudENsYXNzZXMgPSBbXG4gICAgRW5kT2ZMaW5lQ29tbWVudFRva2VuLFxuICAgIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLFxuICAgIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuXG4gIF07XG5cbiAgcmV0dXJuIEluQ29tbWVudENsYXNzZXM7XG59XG5cbmZ1bmN0aW9uIE5vdEluQ29tbWVudENsYXNzZXNGcm9tQ2xhc3MoQ2xhc3MpIHtcbiAgY29uc3QgeyBFbmRPZkxpbmVUb2tlbixcbiAgICAgICAgICBXaGl0ZXNwYWNlVG9rZW4sXG4gICAgICAgICAgU2luZ2xlTGluZUNvbW1lbnRUb2tlbixcbiAgICAgICAgICBSZWd1bGFyRXhwcmVzc2lvblRva2VuLFxuICAgICAgICAgIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sXG4gICAgICAgICAgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuLFxuICAgICAgICAgIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiB9ID0gQ2xhc3M7XG5cbiAgY29uc3QgTm90SW5Db21tZW50Q2xhc3NlcyA9IFtcbiAgICBFbmRPZkxpbmVUb2tlbixcbiAgICBXaGl0ZXNwYWNlVG9rZW4sXG4gICAgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbixcbiAgICBTaW5nbGVMaW5lQ29tbWVudFRva2VuLFxuICAgIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4sXG4gICAgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuLFxuICAgIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlblxuICBdO1xuXG4gIHJldHVybiBOb3RJbkNvbW1lbnRDbGFzc2VzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuY29uc3QgZW50cmllcyA9IFtcclxuICB7XHJcbiAgICBcInNwZWNpYWxcIjogXCJeKD86XFxcXHx8XFxcXCh8XFxcXCl8XFxcXD98XFxcXCp8XFxcXCt8XFxcXC5cXFxcLlxcXFwufFxcXFwufDo6PXwhfDt8XHUwM0I1fDxOT19XSElURVNQQUNFPnw8RU5EX09GX0xJTkU+KVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcIm51bWJlclwiOiBcIl4oPzowfFsxLTldWzAtOV0qKVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcIm5hbWVcIjogXCJeW1xcXFx3fl0rXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwidHlwZVwiOiBcIl5cXFxcW1teXFxcXF1dK1xcXFxdXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwidW5hc3NpZ25lZFwiOiBcIl5bXlxcXFxzXStcIlxyXG4gIH1cclxuXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGVudHJpZXM7XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGluQ29tbWVudEZyb21Ub2tlbkFuZEluQ29tbWVudCh0b2tlbiwgaW5Db21tZW50KSB7XG4gIGNvbnN0IHRva2VuQ29tbWVudFRva2VuID0gdG9rZW4uaXNDb21tZW50VG9rZW4oKTtcblxuICBpZiAodG9rZW5Db21tZW50VG9rZW4pIHtcbiAgICBjb25zdCBjb21tZW50VG9rZW4gPSB0b2tlbiwgLy8vXG4gICAgICAgICAgY29tbWVudFRva2VuSW5Db21tZW50UHJlc2VydmluZyA9IGNvbW1lbnRUb2tlbi5pc0luQ29tbWVudFByZXNlcnZpbmcoKTtcblxuICAgIGluQ29tbWVudCA9IGNvbW1lbnRUb2tlbkluQ29tbWVudFByZXNlcnZpbmc7ICAvLy9cbiAgfVxuXG4gIHJldHVybiBpbkNvbW1lbnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IGluQ29tbWVudEZyb21Ub2tlbkFuZEluQ29tbWVudCB9IGZyb20gXCIuLi91dGlsaXRpZXMvdG9rZW5cIjtcclxuaW1wb3J0IHsgcnVsZXNGcm9tRW50cmllcywgbGV4ZXJGcm9tUnVsZXMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2xleGVyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb21tb25MZXhlciB7XHJcbiAgY29uc3RydWN0b3IocnVsZXMsIEluQ29tbWVudENsYXNzZXMsIE5vdEluQ29tbWVudENsYXNzZXMpIHtcclxuICAgIHRoaXMucnVsZXMgPSBydWxlcztcclxuICAgIHRoaXMuSW5Db21tZW50Q2xhc3NlcyA9IEluQ29tbWVudENsYXNzZXM7XHJcbiAgICB0aGlzLk5vdEluQ29tbWVudENsYXNzZXMgPSBOb3RJbkNvbW1lbnRDbGFzc2VzO1xyXG4gIH1cclxuICBcclxuICBnZXRSdWxlcygpIHtcclxuICAgIHJldHVybiB0aGlzLnJ1bGVzO1xyXG4gIH1cclxuXHJcbiAgZ2V0SW5Db21tZW50Q2xhc3NlcygpIHtcclxuICAgIHJldHVybiB0aGlzLkluQ29tbWVudENsYXNzZXM7XHJcbiAgfVxyXG5cclxuICBnZXROb3RJbkNvbW1lbnRDbGFzc2VzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuTm90SW5Db21tZW50Q2xhc3NlcztcclxuICB9XHJcblxyXG4gIHRva2VuaXNlKGNvbnRlbnQsIGluQ29tbWVudCA9IGZhbHNlKSB7XHJcbiAgICBjb25zdCB0b2tlbnMgPSBbXTtcclxuXHJcbiAgICB3aGlsZSAoY29udGVudCAhPT0gRU1QVFlfU1RSSU5HKSB7XHJcbiAgICAgIGxldCB0b2tlbiA9IG51bGw7XHJcblxyXG4gICAgICBjb25zdCBDbGFzc2VzID0gaW5Db21tZW50ID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5JbkNvbW1lbnRDbGFzc2VzIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLk5vdEluQ29tbWVudENsYXNzZXM7XHJcblxyXG4gICAgICBDbGFzc2VzLnNvbWUoKENsYXNzKSA9PiB7XHJcbiAgICAgICAgaWYgKENsYXNzICE9PSBudWxsKSB7XHJcbiAgICAgICAgICB0b2tlbiA9IENsYXNzLm1hdGNoKGNvbnRlbnQpO1xyXG5cclxuICAgICAgICAgIGlmICh0b2tlbiAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKHRva2VuID09PSBudWxsKSB7XHJcbiAgICAgICAgbGV0IHNpZ25pZmljYW50VG9rZW4gPSBudWxsO1xyXG5cclxuICAgICAgICB0aGlzLnJ1bGVzLnNvbWUoKHJ1bGUpID0+IHtcclxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW4gPSBydWxlLm1hdGNoKGNvbnRlbnQpO1xyXG5cclxuICAgICAgICAgIGlmIChzaWduaWZpY2FudFRva2VuICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRva2VuID0gc2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRva2VuID09PSBudWxsKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgY29udGVudCAnJHtjb250ZW50fScgY2Fubm90IGJlIHRva2VuaXNlZC5gKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xyXG5cclxuICAgICAgaW5Db21tZW50ID0gaW5Db21tZW50RnJvbVRva2VuQW5kSW5Db21tZW50KHRva2VuLCBpbkNvbW1lbnQpO1xyXG5cclxuICAgICAgY29uc3QgbmFpdmUgPSB0cnVlLFxyXG4gICAgICAgICAgICB0b2tlbkNvbnRlbnRMZW5ndGggPSB0b2tlbi5nZXRDb250ZW50TGVuZ3RoKG5haXZlKSxcclxuICAgICAgICAgICAgc3RhcnQgPSB0b2tlbkNvbnRlbnRMZW5ndGg7IC8vL1xyXG5cclxuICAgICAgY29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKHN0YXJ0KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdG9rZW5zO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKENsYXNzKSB7XHJcbiAgICBjb25zdCB7IGVudHJpZXMgfSA9IENsYXNzLFxyXG4gICAgICAgICAgcnVsZXMgPSBydWxlc0Zyb21FbnRyaWVzKGVudHJpZXMpLFxyXG4gICAgICAgICAgbGV4ZXIgPSBsZXhlckZyb21SdWxlcyhDbGFzcywgcnVsZXMpO1xyXG5cclxuICAgIHJldHVybiBsZXhlcjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBmcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKSB7XHJcbiAgICBjb25zdCBsZXhlciA9IGxleGVyRnJvbVJ1bGVzKENsYXNzLCBydWxlcyk7XHJcblxyXG4gICAgcmV0dXJuIGxleGVyO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZyb21FbnRyaWVzKENsYXNzLCBlbnRyaWVzKSB7XHJcbiAgICBjb25zdCBydWxlcyA9IHJ1bGVzRnJvbUVudHJpZXMoZW50cmllcyksXHJcbiAgICAgICAgICBsZXhlciA9IGxleGVyRnJvbVJ1bGVzKENsYXNzLCBydWxlcyk7XHJcblxyXG4gICAgcmV0dXJuIGxleGVyO1xyXG4gIH1cclxufVxyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUb2tlbiBmcm9tIFwiLi4vdG9rZW5cIjtcblxuY29uc3Qgc2lnbmlmaWNhbnQgPSBmYWxzZTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uU2lnbmlmaWNhbnRUb2tlbiBleHRlbmRzIFRva2VuIHtcbiAgc3RhdGljIG1hdGNoKENsYXNzLCBjb250ZW50KSB7IHJldHVybiBUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBUb2tlbi5mcm9tQ29udGVudChDbGFzcywgY29udGVudCwgc2lnbmlmaWNhbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50QW5kVHlwZShDbGFzcywgY29udGVudCwgdHlwZSkgeyByZXR1cm4gVG9rZW4uZnJvbUNvbnRlbnRBbmRUeXBlKENsYXNzLCBjb250ZW50LCB0eXBlLCBzaWduaWZpY2FudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IHdoaXRlc3BhY2VUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdoaXRlc3BhY2VUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBzdGF0aWMgdHlwZSA9IHdoaXRlc3BhY2VUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eW1xcdCBdKy87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goV2hpdGVzcGFjZVRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KFdoaXRlc3BhY2VUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uL3Rva2VuL3NpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IHJlZ3VsYXJFeHByZXNzaW9uVHlwZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWd1bGFyRXhwcmVzc2lvblRva2VuIGV4dGVuZHMgU2lnbmlmaWNhbnRUb2tlbiB7XG4gIHN0YXRpYyB0eXBlID0gcmVndWxhckV4cHJlc3Npb25UeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXFwvKD86XFxcXFteXFxzXXxbXlxcL1xcclxcbl0pKlxcLy87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4ubWF0Y2goUmVndWxhckV4cHJlc3Npb25Ub2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChSZWd1bGFyRXhwcmVzc2lvblRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgZW5kT2ZMaW5lVHlwZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVOb25TaWduaWZpY2FudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGFzSFRNTCgpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXG4gICAgICAgICAgaHRtbCA9IGNvbnRlbnQ7IC8vL1xuXG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IGVuZE9mTGluZVR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14oPzpcXHJcXG58XFxyfFxcbikvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLm1hdGNoKEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3RyaW5nVXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vdG9rZW4vc2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgc3RyaW5nTGl0ZXJhbFR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuY29uc3QgeyBzdWJzdHJpbmcgfSA9IHN0cmluZ1V0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyaW5nTGl0ZXJhbFRva2VuIGV4dGVuZHMgU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGdldFN0cmluZygpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXG4gICAgICAgICAgY29udGVudExlbmd0aCA9IHRoaXMuZ2V0Q29udGVudExlbmd0aCgpLFxuICAgICAgICAgIHN0YXJ0ID0gMSxcbiAgICAgICAgICBlbmQgPSBjb250ZW50TGVuZ3RoIC0gMSxcbiAgICAgICAgICBzdHJpbmcgPSBzdWJzdHJpbmcoY29udGVudCwgc3RhcnQsIGVuZCk7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBzdHJpbmdMaXRlcmFsVHlwZTtcblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3RyaW5nTGl0ZXJhbFRva2VuIGZyb20gXCIuLi8uLi9zaWduaWZpY2FudC9zdHJpbmdMaXRlcmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiBleHRlbmRzIFN0cmluZ0xpdGVyYWxUb2tlbiB7XG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXCIoPzpcXFxcW15cXHNdfFteXCJcXFxcXFxyXFxuXSkqXCIvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTdHJpbmdMaXRlcmFsVG9rZW4ubWF0Y2goRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBTdHJpbmdMaXRlcmFsVG9rZW4uZnJvbUNvbnRlbnQoRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IGVudHJpZXMgZnJvbSBcIi4vZW50cmllc1wiO1xyXG5pbXBvcnQgQ29tbW9uTGV4ZXIgZnJvbSBcIi4uL2NvbW1vbi9sZXhlclwiO1xyXG5pbXBvcnQgV2hpdGVzcGFjZVRva2VuIGZyb20gXCIuLi90b2tlbi9ub25TaWduaWZpY2FudC93aGl0ZXNwYWNlXCI7XHJcbmltcG9ydCBSZWd1bGFyRXhwcmVzc2lvblRva2VuIGZyb20gXCIuLi90b2tlbi9zaWduaWZpY2FudC9yZWd1bGFyRXhwcmVzc2lvblwiO1xyXG5pbXBvcnQgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvZW5kT2ZMaW5lXCI7XHJcbmltcG9ydCBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gZnJvbSBcIi4uL3Rva2VuL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWwvZG91Ymx5UXVvdGVkXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCTkZMZXhlciBleHRlbmRzIENvbW1vbkxleGVyIHtcclxuICB0b2tlbnNGcm9tQk5GKGJuZikge1xyXG4gICAgY29uc3QgY29udGVudCA9IGJuZiwgIC8vL1xyXG4gICAgICAgICAgdG9rZW5zID0gc3VwZXIudG9rZW5pc2UoY29udGVudCk7XHJcblxyXG4gICAgcmV0dXJuIHRva2VucztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBlbnRyaWVzID0gZW50cmllcztcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBXaGl0ZXNwYWNlVG9rZW4gPSBXaGl0ZXNwYWNlVG9rZW47XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiA9IFJlZ3VsYXJFeHByZXNzaW9uVG9rZW47XHJcblxyXG4gIHN0YXRpYyBTaW5nbGVMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiA9IERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbjtcclxuXHJcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbU5vdGhpbmcoQk5GTGV4ZXIpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21SdWxlcyhCTkZMZXhlciwgcnVsZXMpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tRW50cmllcyhlbnRyaWVzKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tRW50cmllcyhCTkZMZXhlciwgZW50cmllcyk7IH1cclxufVxyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5jb25zdCBlbnRyaWVzID0gW1xyXG4gIHtcclxuICAgIFwiZGlnaXRcIjogXCJeXFxcXGQrXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwiYnJhY2tldFwiOiBcIl4oPzpcXFxcKHxcXFxcKSlcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJvcGVyYXRvclwiOiBcIl4oPzpcXFxcK3wtfFxcXFwqfFxcXFwvKVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcInVuYXNzaWduZWRcIjogXCJeW15cXFxcc10rXCJcclxuICB9XHJcbl07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBlbnRyaWVzO1xyXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTdHJpbmdMaXRlcmFsVG9rZW4gZnJvbSBcIi4uLy4uL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIGV4dGVuZHMgU3RyaW5nTGl0ZXJhbFRva2VuIHtcbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14nKD86XFxcXFteXFxzXXxbXidcXFxcXFxyXFxuXSkqJy87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFN0cmluZ0xpdGVyYWxUb2tlbi5tYXRjaChTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFN0cmluZ0xpdGVyYWxUb2tlbi5mcm9tQ29udGVudChTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBzaW5nbGVMaW5lQ29tbWVudFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE5vblNpZ25pZmljYW50VG9rZW4ge1xuICBpc0luQ29tbWVudFByZXNlcnZpbmcoKSB7XG4gICAgY29uc3QgaW5Db21tZW50UHJlc2VydmluZyA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIGluQ29tbWVudFByZXNlcnZpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IHNpbmdsZUxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFB5dGhvblN0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIFNpbmdsZUxpbmVDb21tZW50VG9rZW4ge1xuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXiNbXlxcclxcbl0qLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gU2luZ2xlTGluZUNvbW1lbnRUb2tlbi5tYXRjaChQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFNpbmdsZUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoUHl0aG9uU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgZW5kT2ZMaW5lQ29tbWVudFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lQ29tbWVudE5vblNpZ25pZmljYW50VG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCkge1xuICAgIGNvbnN0IGluQ29tbWVudFByZXNlcnZpbmcgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGluQ29tbWVudFByZXNlcnZpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IGVuZE9mTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IC9eKD86XFxyXFxufFxccnxcXG4pLztcblxuICBzdGF0aWMgbWF0Y2goY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5mcm9tQ29udGVudChFbmRPZkxpbmVDb21tZW50Tm9uU2lnbmlmaWNhbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uLy4uL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IGVuZE9mTXVsdGlMaW5lQ29tbWVudFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vdHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCkge1xuICAgIGNvbnN0IGluQ29tbWVudFByZXNlcnZpbmcgPSBmYWxzZTtcblxuICAgIHJldHVybiBpbkNvbW1lbnRQcmVzZXJ2aW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBlbmRPZk11bHRpTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2ZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14jIyMvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5tYXRjaChQeXRob25TdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5mcm9tQ29udGVudChQeXRob25TdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgc3RhcnRPZk11bHRpTGluZUNvbW1lbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBOb25TaWduaWZpY2FudFRva2VuIHtcbiAgaXNJbkNvbW1lbnRQcmVzZXJ2aW5nKCkge1xuICAgIGNvbnN0IGluQ29tbWVudFByZXNlcnZpbmcgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGluQ29tbWVudFByZXNlcnZpbmc7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IHN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgbWF0Y2goQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4ubWF0Y2goQ2xhc3MsIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KENsYXNzLCBjb250ZW50KSB7IHJldHVybiBOb25TaWduaWZpY2FudFRva2VuLmZyb21Db250ZW50KENsYXNzLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14jIyMvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLm1hdGNoKFB5dGhvblN0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5mcm9tQ29udGVudChQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25TaWduaWZpY2FudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudFwiO1xuXG5pbXBvcnQgeyBtaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGV4dGVuZHMgTm9uU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGlzSW5Db21tZW50UHJlc2VydmluZygpIHtcbiAgICBjb25zdCBpbkNvbW1lbnRQcmVzZXJ2aW5nID0gdHJ1ZTtcblxuICAgIHJldHVybiBpbkNvbW1lbnRQcmVzZXJ2aW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBtaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUeXBlO1xuXG4gIHN0YXRpYyBtYXRjaChDbGFzcywgY29udGVudCkgeyByZXR1cm4gTm9uU2lnbmlmaWNhbnRUb2tlbi5tYXRjaChDbGFzcywgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpIHsgcmV0dXJuIE5vblNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoQ2xhc3MsIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvbWlkZGxlT2ZcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHl0aG9uU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14oPzpbXlxcclxcbl0rPyg/PSMjIyl8W15cXHJcXG5dKykvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5tYXRjaChQeXRob25TdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7IHJldHVybiBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5mcm9tQ29udGVudChQeXRob25TdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuLCBjb250ZW50KTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IGVudHJpZXMgZnJvbSBcIi4vZW50cmllc1wiO1xyXG5pbXBvcnQgQ29tbW9uTGV4ZXIgZnJvbSBcIi4uL2NvbW1vbi9sZXhlclwiO1xyXG5pbXBvcnQgV2hpdGVzcGFjZVRva2VuIGZyb20gXCIuLi90b2tlbi9ub25TaWduaWZpY2FudC93aGl0ZXNwYWNlXCI7XHJcbmltcG9ydCBSZWd1bGFyRXhwcmVzc2lvblRva2VuIGZyb20gXCIuLi90b2tlbi9zaWduaWZpY2FudC9yZWd1bGFyRXhwcmVzc2lvblwiO1xyXG5pbXBvcnQgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvZW5kT2ZMaW5lXCI7XHJcbmltcG9ydCBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gZnJvbSBcIi4uL3Rva2VuL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWwvc2luZ2x5UXVvdGVkXCI7XHJcbmltcG9ydCBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gZnJvbSBcIi4uL3Rva2VuL3NpZ25pZmljYW50L3N0cmluZ0xpdGVyYWwvZG91Ymx5UXVvdGVkXCI7XHJcbmltcG9ydCBQeXRob25TdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvc2luZ2xlTGluZS9weXRob25TdHlsZVwiO1xyXG5pbXBvcnQgRW5kT2ZMaW5lQ29tbWVudE5vblNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvZW5kT2ZMaW5lXCI7XHJcbmltcG9ydCBQeXRob25TdHlsZUVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZi9weXRob25TdHlsZVwiO1xyXG5pbXBvcnQgUHl0aG9uU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mL3B5dGhvblN0eWxlXCI7XHJcbmltcG9ydCBQeXRob25TdHlsZU1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi9weXRob25TdHlsZVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmFzaWNMZXhlciBleHRlbmRzIENvbW1vbkxleGVyIHtcclxuICBzdGF0aWMgZW50cmllcyA9IGVudHJpZXM7XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVUb2tlbiA9IEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgV2hpdGVzcGFjZVRva2VuID0gV2hpdGVzcGFjZVRva2VuO1xyXG5cclxuICBzdGF0aWMgRW5kT2ZMaW5lQ29tbWVudFRva2VuID0gRW5kT2ZMaW5lQ29tbWVudE5vblNpZ25pZmljYW50VG9rZW47IC8vL1xyXG5cclxuICBzdGF0aWMgUmVndWxhckV4cHJlc3Npb25Ub2tlbiA9IFJlZ3VsYXJFeHByZXNzaW9uVG9rZW47XHJcblxyXG4gIHN0YXRpYyBTaW5nbGVMaW5lQ29tbWVudFRva2VuID0gUHl0aG9uU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gUHl0aG9uU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gUHl0aG9uU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuOyAvLy9cclxuXHJcbiAgc3RhdGljIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gUHl0aG9uU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW47XHJcblxyXG4gIHN0YXRpYyBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBEb3VibHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW47XHJcblxyXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21Ob3RoaW5nKEJhc2ljTGV4ZXIpOyB9XHJcblxyXG4gIHN0YXRpYyBmcm9tUnVsZXMocnVsZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21SdWxlcyhCYXNpY0xleGVyLCBydWxlcyk7IH1cclxuXHJcbiAgc3RhdGljIGZyb21FbnRyaWVzKGVudHJpZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21FbnRyaWVzKEJhc2ljTGV4ZXIsIGVudHJpZXMpOyB9XHJcbn1cclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlbiBmcm9tIFwiLi4vLi4vdG9rZW4vc2lnbmlmaWNhbnRcIjtcblxuaW1wb3J0IHsgZW5kT2ZMaW5lVHlwZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVTaWduaWZpY2FudFRva2VuIGV4dGVuZHMgU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGFzSFRNTCgpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXG4gICAgICAgICAgaHRtbCA9IGNvbnRlbnQ7IC8vL1xuXG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cblxuICBzdGF0aWMgdHlwZSA9IGVuZE9mTGluZVR5cGU7XG5cbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14oPzpcXHJcXG58XFxyfFxcbikvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTaWduaWZpY2FudFRva2VuLm1hdGNoKEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoRW5kT2ZMaW5lU2lnbmlmaWNhbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNpZ25pZmljYW50VG9rZW4gZnJvbSBcIi4uLy4uLy4uL3Rva2VuL3NpZ25pZmljYW50XCI7XG5cbmltcG9ydCB7IGVuZE9mTGluZUNvbW1lbnRUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZUNvbW1lbnRTaWduaWZpY2FudFRva2VuIGV4dGVuZHMgU2lnbmlmaWNhbnRUb2tlbiB7XG4gIGlzSW5Db21tZW50UHJlc2VydmluZygpIHtcbiAgICBjb25zdCBpbkNvbW1lbnRQcmVzZXJ2aW5nID0gdHJ1ZTtcblxuICAgIHJldHVybiBpbkNvbW1lbnRQcmVzZXJ2aW5nO1xuICB9XG5cbiAgc3RhdGljIHR5cGUgPSBlbmRPZkxpbmVDb21tZW50VHlwZTtcblxuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXig/OlxcclxcbnxcXHJ8XFxuKS87XG5cbiAgc3RhdGljIG1hdGNoKGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4ubWF0Y2goRW5kT2ZMaW5lQ29tbWVudFNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFNpZ25pZmljYW50VG9rZW4uZnJvbUNvbnRlbnQoRW5kT2ZMaW5lQ29tbWVudFNpZ25pZmljYW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTaW5nbGVMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L3NpbmdsZUxpbmVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ1N0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIFNpbmdsZUxpbmVDb21tZW50VG9rZW4ge1xuICBzdGF0aWMgcmVndWxhckV4cHJlc3Npb24gPSAvXlxcL1xcL1teXFxyXFxuXSovO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTaW5nbGVMaW5lQ29tbWVudFRva2VuLm1hdGNoKENTdHlsZVNpbmdsZUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFNpbmdsZUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoQ1N0eWxlU2luZ2xlTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cXCpcXC8vO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5tYXRjaChDU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoQ1N0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENTdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gZXh0ZW5kcyBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cXC9cXCovO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuLm1hdGNoKENTdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHsgcmV0dXJuIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoQ1N0eWxlU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIGZyb20gXCIuLi8uLi8uLi8uLi8uLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiBleHRlbmRzIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuIHtcbiAgc3RhdGljIHJlZ3VsYXJFeHByZXNzaW9uID0gL14oPzpbXlxcclxcbl0rPyg/PVxcKlxcLyl8W15cXHJcXG5dKykvO1xuXG4gIHN0YXRpYyBtYXRjaChjb250ZW50KSB7IHJldHVybiBNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbi5tYXRjaChDU3R5bGVNaWRkbGVPZk11bHRpTGluZUNvbW1lbnRUb2tlbiwgY29udGVudCk7IH1cblxuICBzdGF0aWMgZnJvbUNvbnRlbnQoY29udGVudCkgeyByZXR1cm4gTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4uZnJvbUNvbnRlbnQoQ1N0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4sIGNvbnRlbnQpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgUnVsZSB9IGZyb20gXCIuL3J1bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdHlwZXMgfSBmcm9tIFwiLi90eXBlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCIuL3NwZWNpYWxTeW1ib2xzXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgbGV4ZXJVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvbGV4ZXJcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBCTkZMZXhlciB9IGZyb20gXCIuL2JuZi9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCYXNpY0xleGVyIH0gZnJvbSBcIi4vYmFzaWMvbGV4ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29tbW9uTGV4ZXIgfSBmcm9tIFwiLi9jb21tb24vbGV4ZXJcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTm9uU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVuZE9mTGluZVNpZ25pZmljYW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9zaWduaWZpY2FudC9lbmRPZkxpbmVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2VuZE9mTGluZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFbmRPZkxpbmVDb21tZW50U2lnbmlmaWNhbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL3NpZ25pZmljYW50L2NvbW1lbnQvZW5kT2ZMaW5lXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVuZE9mTGluZUNvbW1lbnROb25TaWduaWZpY2FudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9lbmRPZkxpbmVcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBXaGl0ZXNwYWNlVG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC93aGl0ZXNwYWNlXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3RyaW5nTGl0ZXJhbFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSZWd1bGFyRXhwcmVzc2lvblRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnQvcmVndWxhckV4cHJlc3Npb25cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2luZ2x5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9zaW5nbHlRdW90ZWRcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vc2lnbmlmaWNhbnQvc3RyaW5nTGl0ZXJhbC9kb3VibHlRdW90ZWRcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaW5nbGVMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVuZE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvZW5kT2ZcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3RhcnRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL3N0YXJ0T2ZcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZlwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL2NTdHlsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU3R5bGVFbmRPZk11bHRpTGluZUNvbW1lbnRUb2tlbiB9IGZyb20gXCIuL3Rva2VuL25vblNpZ25pZmljYW50L2NvbW1lbnQvbXVsdGlMaW5lL2VuZE9mL2NTdHlsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU3R5bGVTdGFydE9mTXVsdGlMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9tdWx0aUxpbmUvc3RhcnRPZi9jU3R5bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ1N0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi9jU3R5bGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUHl0aG9uU3R5bGVTaW5nbGVMaW5lQ29tbWVudFRva2VuIH0gZnJvbSBcIi4vdG9rZW4vbm9uU2lnbmlmaWNhbnQvY29tbWVudC9zaW5nbGVMaW5lL3B5dGhvblN0eWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFB5dGhvblN0eWxlRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9lbmRPZi9weXRob25TdHlsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQeXRob25TdHlsZVN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9zdGFydE9mL3B5dGhvblN0eWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFB5dGhvblN0eWxlTWlkZGxlT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gfSBmcm9tIFwiLi90b2tlbi9ub25TaWduaWZpY2FudC9jb21tZW50L211bHRpTGluZS9taWRkbGVPZi9weXRob25TdHlsZVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xyXG5cclxuY29uc3QgZW50cmllcyA9IFtcclxuXHJcbiAgeyBcImNvbG91clwiOiBcIl4jKD86WzAtOWEtZkEtRl17Nn18WzAtOWEtZkEtRl17M30pXCIgfSxcclxuXHJcbiAgeyBcImtleXdvcmRcIjogXCJeKD86IWltcG9ydGFudHxAbWVkaWEpXCIgfSxcclxuXHJcbiAgeyBcInBlcmNlbnRhZ2VcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKSVcIiB9LFxyXG5cclxuICB7IFwiZnJlcXVlbmN5XCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKykoPzpoenxraHopXCIgfSxcclxuXHJcbiAgeyBcImZyYWN0aW9uXCI6IFwiXlsxLTldWzAtOV0qP2ZyXCIgfSxcclxuXHJcbiAgeyBcImxlbmd0aFwiOiBcIl4oPzpbMC05XSt8WzAtOV0qXFxcXC5bMC05XSspKD86cHh8Y218bW18aW58cHR8cGMpXCIgfSxcclxuXHJcbiAgeyBcImFuZ2xlXCI6IFwiXig/OlswLTldK3xbMC05XSpcXFxcLlswLTldKykoPzpkZWd8cmFkfGdyYWQpXCIgfSxcclxuXHJcbiAgeyBcInRpbWVcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKSg/OnN8bXMpXCIgfSxcclxuXHJcbiAgeyBcInJlbXNcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKXJlbVwiIH0sXHJcblxyXG4gIHsgXCJlbXNcIjogXCJeKD86WzAtOV0rfFswLTldKlxcXFwuWzAtOV0rKWVtXCIgfSxcclxuXHJcbiAgeyBcIm51bWJlclwiOiBcIl5bMC05XSt8WzAtOV0qXFxcXC5bMC05XStcIiB9LFxyXG5cclxuICB7IFwic3BlY2lhbFwiOiBcIl47fDo6fDp8XFxcXC58LHxcXFxcfD18fj18PXw+fFxcXFx7fFxcXFx9fFxcXFwofFxcXFwpfFxcXFxbfFxcXFxdXCIgfSxcclxuXHJcbiAgeyBcImlkZW50aWZpZXJcIjogXCJeW19hLXpBLVowLTktXStcIiB9LFxyXG5cclxuICB7IFwibG9naWNhbC1vcGVyYXRvclwiOiBcIl5eKD86YW5kfG5vdHxvbmx5KSRcIiB9LFxyXG5cclxuICB7IFwiYXJpdGhtZXRpYy1vcGVyYXRvclwiOiBcIl4tfFxcXFwqfFxcXFwrfFxcXFwvXCIgfSxcclxuXHJcbiAgeyBcInVuYXNzaWduZWRcIjogXCJeW15cXFxcc10rXCIgfVxyXG5cclxuXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGVudHJpZXM7XHJcbiIsICJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IENvbW1vbkxleGVyLCBXaGl0ZXNwYWNlVG9rZW4sIEVuZE9mTGluZU5vblNpZ25pZmljYW50VG9rZW4sIERvdWJseVF1b3RlZFN0cmluZ0xpdGVyYWxUb2tlbiB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcclxuXHJcbmltcG9ydCBlbnRyaWVzIGZyb20gXCIuL2VudHJpZXNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENTU0xleGVyIGV4dGVuZHMgQ29tbW9uTGV4ZXIge1xyXG4gIHN0YXRpYyBlbnRyaWVzID0gZW50cmllcztcclxuXHJcbiAgc3RhdGljIEVuZE9mTGluZVRva2VuID0gRW5kT2ZMaW5lTm9uU2lnbmlmaWNhbnRUb2tlbjsgLy8vXHJcblxyXG4gIHN0YXRpYyBXaGl0ZXNwYWNlVG9rZW4gPSBXaGl0ZXNwYWNlVG9rZW47XHJcblxyXG4gIHN0YXRpYyBFbmRPZkxpbmVDb21tZW50VG9rZW4gPSBudWxsOyAvLy9cclxuXHJcbiAgc3RhdGljIFJlZ3VsYXJFeHByZXNzaW9uVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgU2luZ2xlTGluZUNvbW1lbnRUb2tlbiA9IG51bGw7IC8vL1xyXG5cclxuICBzdGF0aWMgRW5kT2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsOyAvLy9cclxuXHJcbiAgc3RhdGljIFN0YXJ0T2ZNdWx0aUxpbmVDb21tZW50VG9rZW4gPSBudWxsOyAvLy9cclxuXHJcbiAgc3RhdGljIE1pZGRsZU9mTXVsdGlMaW5lQ29tbWVudFRva2VuID0gbnVsbDsgLy8vXHJcblxyXG4gIHN0YXRpYyBTaW5nbHlRdW90ZWRTdHJpbmdMaXRlcmFsVG9rZW4gPSBudWxsO1xyXG5cclxuICBzdGF0aWMgRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuID0gRG91Ymx5UXVvdGVkU3RyaW5nTGl0ZXJhbFRva2VuO1xyXG5cclxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7IHJldHVybiBDb21tb25MZXhlci5mcm9tTm90aGluZyhDU1NMZXhlcik7IH1cclxuXHJcbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uTGV4ZXIuZnJvbVJ1bGVzKENTU0xleGVyLCBydWxlcyk7IH1cclxuXHJcbiAgc3RhdGljIGZyb21FbnRyaWVzKGVudHJpZXMpIHsgcmV0dXJuIENvbW1vbkxleGVyLmZyb21FbnRyaWVzKENTU0xleGVyLCBlbnRyaWVzKTsgfVxyXG59XHJcbiIsICJSZWFjdC5jcmVhdGVFbGVtZW50IiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cbiAgICAgIGRvY3VtZW50ICAgICAgICAgICAgICAgICA6Oj0gICggcnVsZSB8IGVycm9yICkrIDtcblxuICAgICAgcnVsZSAgICAgICAgICAgICAgICAgICAgIDo6PSAgbmFtZSBhbWJpZ3VvdXNNb2RpZmllcj8gXCI6Oj1cIiBkZWZpbml0aW9ucyBcIjtcIiA7XG5cbiAgICAgIG5hbWUgICAgICAgICAgICAgICAgICAgICA6Oj0gIFtuYW1lXSA7XG5cbiAgICAgIGRlZmluaXRpb25zICAgICAgICAgICAgICA6Oj0gIGRlZmluaXRpb24gKCBcInxcIiBkZWZpbml0aW9uICkqIDtcblxuICAgICAgZGVmaW5pdGlvbiAgICAgICAgICAgICAgIDo6PSAgcGFydCsgcHJlY2VkZW5jZT8gO1xuIFxuICAgICAgcGFydCAgICAgICAgICAgICAgICAgICAgIDo6PSAgbm9uVGVybWluYWxQYXJ0IHF1YW50aWZpZXIqXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHRlcm1pbmFsUGFydCBxdWFudGlmaWVyKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBub1doaXRlc3BhY2VQYXJ0XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuICAgICAgbm9uVGVybWluYWxQYXJ0ICAgICAgICAgIDo6PSAgY2hvaWNlT2ZQYXJ0c1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBzZXF1ZW5jZU9mUGFydHNcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgcnVsZU5hbWUgbG9va0FoZWFkTW9kaWZpZXI/XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuICAgICAgdGVybWluYWxQYXJ0ICAgICAgICAgICAgIDo6PSAgc2lnbmlmaWNhbnRUb2tlblR5cGVcbiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICByZWd1bGFyRXhwcmVzc2lvblxuIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgdGVybWluYWxTeW1ib2xcbiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBlbmRPZkxpbmVcbiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB3aWxkY2FyZFxuICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIGVwc2lsb25cbiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgIG5vV2hpdGVzcGFjZVBhcnQgICAgICAgICA6Oj0gIFwiPE5PX1dISVRFU1BBQ0U+XCIgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG4gICAgICBzZXF1ZW5jZU9mUGFydHMgICAgICAgICAgOjo9ICBcIihcIiBwYXJ0IHBhcnQrIFwiKVwiIDtcblxuICAgICAgY2hvaWNlT2ZQYXJ0cyAgICAgICAgICAgIDo6PSAgXCIoXCIgcGFydENob2ljZSAoIFwifFwiIHBhcnRDaG9pY2UgKSsgXCIpXCIgO1xuXG4gICAgICBwYXJ0Q2hvaWNlICAgICAgICAgICAgICAgOjo9ICBwYXJ0IHByZWNlZGVuY2U/IDtcblxuICAgICAgcnVsZU5hbWUgICAgICAgICAgICAgICAgIDo6PSAgW25hbWVdIDtcblxuICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGUgICAgIDo6PSAgW3R5cGVdIDtcblxuICAgICAgcmVndWxhckV4cHJlc3Npb24gICAgICAgIDo6PSAgW3JlZ3VsYXItZXhwcmVzc2lvbl0gO1xuXG4gICAgICB0ZXJtaW5hbFN5bWJvbCAgICAgICAgICAgOjo9ICBbc3RyaW5nLWxpdGVyYWxdIDtcblxuICAgICAgcHJlY2VkZW5jZSAgICAgICAgICAgICAgIDo6PSAgXCIoXCIgW251bWJlcl0/IFwiKVwiIDtcbiAgICAgIFxuICAgICAgZW5kT2ZMaW5lICAgICAgICAgICAgICAgIDo6PSAgXCI8RU5EX09GX0xJTkU+XCIgO1xuICAgICAgXG4gICAgICB3aWxkY2FyZCAgICAgICAgICAgICAgICAgOjo9ICBcIi5cIiA7XG5cbiAgICAgIGVwc2lsb24gICAgICAgICAgICAgICAgICA6Oj0gIFwiXHUwM0I1XCIgO1xuXG4gICAgICBxdWFudGlmaWVyICAgICAgICAgICAgICAgOjo9ICBvcHRpb25hbFF1YW50aWZpZXJcbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG9uZU9yTW9yZVF1YW50aWZpZXJcbiAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB6ZXJvT3JNb3JlUXVhbnRpZmllclxuICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuICAgICAgYW1iaWd1b3VzTW9kaWZpZXIgICAgICAgIDo6PSAgPE5PX1dISVRFU1BBQ0U+XCIhXCIgO1xuXG4gICAgICBsb29rQWhlYWRNb2RpZmllciAgICAgICAgOjo9ICA8Tk9fV0hJVEVTUEFDRT5cIi4uLlwiIDtcblxuICAgICAgb3B0aW9uYWxRdWFudGlmaWVyICAgICAgIDo6PSAgPE5PX1dISVRFU1BBQ0U+XCI/XCIgO1xuXG4gICAgICBvbmVPck1vcmVRdWFudGlmaWVyICAgICAgOjo9ICA8Tk9fV0hJVEVTUEFDRT5cIitcIiA7XG5cbiAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyICAgICA6Oj0gIDxOT19XSElURVNQQUNFPlwiKlwiIDtcblxuICAgICAgZXJyb3IhICAgICAgICAgICAgICAgICAgIDo6PSAgLiA7XG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGJuZjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNoYXJhY3RlcnMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBTUEFDRV9DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWRkaW5nRnJvbVBhZGRpbmdMZW5ndGgocGFkZGluZ0xlbmd0aCkge1xuICBsZXQgcGFkZGluZyA9IEVNUFRZX1NUUklORztcblxuICBmb3IgKGxldCBwb3NpdGlvbiA9IDA7IHBvc2l0aW9uIDwgcGFkZGluZ0xlbmd0aDsgcG9zaXRpb24rKykge1xuICAgIHBhZGRpbmcgKz0gU1BBQ0VfQ0hBUkFDVEVSO1xuICB9XG5cbiAgcmV0dXJuIHBhZGRpbmc7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHBhZGRpbmdGcm9tUGFkZGluZ0xlbmd0aCB9IGZyb20gXCIuL3V0aWxpdGllcy9zdHJpbmdcIjtcblxuY29uc3QgeyBleGNsYW1hdGlvbk1hcmsgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlIHtcbiAgY29uc3RydWN0b3IobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLmFtYmlndW91cyA9IGFtYmlndW91cztcbiAgICB0aGlzLmRlZmluaXRpb25zID0gZGVmaW5pdGlvbnM7XG4gICAgdGhpcy5Ob25UZXJtaW5hbE5vZGUgPSBOb25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBnZXROYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICBpc0FtYmlndW91cygpIHtcbiAgICByZXR1cm4gdGhpcy5hbWJpZ3VvdXM7XG4gIH1cblxuICBnZXREZWZpbml0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZpbml0aW9ucztcbiAgfVxuXG4gIGdldE5vblRlcm1pbmFsTm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5Ob25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBzZXROYW1lKG5hbWUpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgc2VBbWJpZ3VvdXMoYW1iaWd1b3VzKSB7XG4gICAgdGhpcy5hbWJpZ3VvdXMgPSBhbWJpZ3VvdXM7XG4gIH1cblxuICBzZXREZWZpbml0aW9ucyhkZWZpbml0aW9ucykge1xuICAgIHRoaXMuZGVmaW5pdGlvbnMgPSBkZWZpbml0aW9ucztcbiAgfVxuXG4gIHNldE5vblRlcm1pbmFsTm9kZShOb25UZXJtaW5hbE5vZGUpIHtcbiAgICB0aGlzLk5vblRlcm1pbmFsTm9kZSA9IE5vblRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCkge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBzYXZlZFByZWNlZGVuY2UgPSBzdGF0ZS5nZXRTYXZlZFByZWNlZGVuY2UoKTtcblxuICAgIHBhcnNlZCA9IHRoaXMuZGVmaW5pdGlvbnMuc29tZSgoZGVmaW5pdGlvbikgPT4ge1xuICAgICAgbGV0IG5vZGUsXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlO1xuXG4gICAgICBjb25zdCBydWxlTmFtZSA9IHRoaXMubmFtZSxcbiAgICAgICAgICAgIGFtYmlndW91cyA9IHRoaXMuYW1iaWd1b3VzLFxuICAgICAgICAgICAgY2hpbGROb2RlcyA9IFtdO1xuXG4gICAgICBub25UZXJtaW5hbE5vZGUgPSB0aGlzLk5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kQW1iaWd1b3VzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBhbWJpZ3VvdXMpO1xuXG4gICAgICBjb25zdCBwcmVjZWRlbmNlID0gZGVmaW5pdGlvbi5nZXRQcmVjZWRlbmNlKCk7XG5cbiAgICAgIG5vZGUgPSBub25UZXJtaW5hbE5vZGU7IC8vL1xuXG4gICAgICBub2Rlcy5wdXNoKG5vZGUpO1xuXG4gICAgICBzdGF0ZS5zZXRQcmVjZWRlbmNlKHByZWNlZGVuY2UpO1xuXG4gICAgICBjb25zdCBwYXJzZWQgPSBkZWZpbml0aW9uLnBhcnNlKGNoaWxkTm9kZXMsIHN0YXRlLCAoKSA9PiB7XG4gICAgICAgIGxldCBwYXJzZWQ7XG5cbiAgICAgICAgcGFyc2VkID0gdHJ1ZTtcblxuICAgICAgICBjb25zdCBwcmVjZWRlbmNlID0gc3RhdGUuZ2V0UHJlY2VkZW5jZSgpO1xuXG4gICAgICAgIG5vblRlcm1pbmFsTm9kZS5zZXRQcmVjZWRlbmNlKHByZWNlZGVuY2UpO1xuXG4gICAgICAgIGNvbnN0IHJld3JpdHRlbk5vblRlcm1pbmFsTm9kZSA9IG5vblRlcm1pbmFsTm9kZS5yZXdyaXRlKCk7XG5cbiAgICAgICAgaWYgKHJld3JpdHRlbk5vblRlcm1pbmFsTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgICAgIG5vZGVzLnBvcCgpO1xuXG4gICAgICAgICAgICBub2RlID0gcmV3cml0dGVuTm9uVGVybWluYWxOb2RlOyAvLy9cblxuICAgICAgICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgICAgY29uc3QgZW1wdHkgPSBub2RlLmlzRW1wdHkoKTtcblxuICAgICAgICAgIGlmIChlbXB0eSkge1xuICAgICAgICAgICAgcGFyc2VkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICAgIGNvbnN0IHVucHJlY2VkZW50ZWQgPSBub2RlLmlzVW5wcmVjZWRlbnRlZCgpO1xuXG4gICAgICAgICAgaWYgKHVucHJlY2VkZW50ZWQpIHtcbiAgICAgICAgICAgIHBhcnNlZCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgICBpZiAoY2FsbEFoZWFkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdGF0ZS5yZXNldFByZWNlZGVuY2Uoc2F2ZWRQcmVjZWRlbmNlKTtcblxuICAgICAgICAgICAgcGFyc2VkID0gY2FsbEFoZWFkKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJld3JpdHRlbk5vblRlcm1pbmFsTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgICAgICBub2Rlcy5wb3AoKTtcblxuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG5vblRlcm1pbmFsTm9kZTsgLy8vXG5cbiAgICAgICAgICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgIH0sIGNhbGxBaGVhZCk7XG5cbiAgICAgIGlmICghcGFyc2VkKSB7XG4gICAgICAgIG5vZGVzLnBvcCgpO1xuXG4gICAgICAgIHN0YXRlLnJlc2V0UHJlY2VkZW5jZShzYXZlZFByZWNlZGVuY2UpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyc2VkO1xuICAgIH0pO1xuXG4gICAgaWYgKGNhbGxBaGVhZCA9PT0gbnVsbCkge1xuICAgICAgc3RhdGUucmVzZXRQcmVjZWRlbmNlKHNhdmVkUHJlY2VkZW5jZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKG1heGltdW1SdWxlTmFtZUxlbmd0aCwgbXVsdGlMaW5lID0gdHJ1ZSkge1xuICAgIGNvbnN0IGRlZmluaXRpb25zTGVuZ3RoID0gdGhpcy5kZWZpbml0aW9ucy5sZW5ndGg7XG5cbiAgICBtdWx0aUxpbmUgPSBtdWx0aUxpbmUgJiYgKGRlZmluaXRpb25zTGVuZ3RoID4gMSk7ICAvLy9cblxuICAgIGNvbnN0IG1heGltdW1QYWRkaW5nID0gcGFkZGluZ0Zyb21QYWRkaW5nTGVuZ3RoKG1heGltdW1SdWxlTmFtZUxlbmd0aCksXG4gICAgICAgICAgZGVmaW5pdGlvbnNTdHJpbmcgPSB0aGlzLmRlZmluaXRpb25zLnJlZHVjZSgoZGVmaW5pdGlvbnNTdHJpbmcsIGRlZmluaXRpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb25TdHJpbmcgPSBkZWZpbml0aW9uLmFzU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIGlmIChkZWZpbml0aW9uc1N0cmluZyA9PT0gRU1QVFlfU1RSSU5HKSB7XG4gICAgICAgICAgICAgIGRlZmluaXRpb25zU3RyaW5nID0gZGVmaW5pdGlvblN0cmluZzsgLy8vXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBkZWZpbml0aW9uc1N0cmluZyA9IG11bHRpTGluZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2RlZmluaXRpb25zU3RyaW5nfVxuXG4ke21heGltdW1QYWRkaW5nfSAgIHwgJHtkZWZpbml0aW9uU3RyaW5nfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2RlZmluaXRpb25zU3RyaW5nfSB8ICR7ZGVmaW5pdGlvblN0cmluZ31gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZGVmaW5pdGlvbnNTdHJpbmc7XG4gICAgICAgICAgfSwgRU1QVFlfU1RSSU5HKSxcbiAgICAgICAgICBydWxlTmFtZSA9IHRoaXMubmFtZSwgLy8vXG4gICAgICAgICAgcnVsZU5hbWVMZW5ndGggPSBydWxlTmFtZS5sZW5ndGgsXG4gICAgICAgICAgYW1iaWd1b3VzU3RyaW5nID0gdGhpcy5hbWJpZ3VvdXMgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjbGFtYXRpb25NYXJrIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU1QVFlfU1RSSU5HLFxuICAgICAgICAgIGFtYmlndW91c1N0cmluZ0xlbmd0aCA9IGFtYmlndW91c1N0cmluZy5sZW5ndGgsXG4gICAgICAgICAgcGFkZGluZ0xlbmd0aCA9IG1heGltdW1SdWxlTmFtZUxlbmd0aCAtIHJ1bGVOYW1lTGVuZ3RoIC0gYW1iaWd1b3VzU3RyaW5nTGVuZ3RoLFxuICAgICAgICAgIHBhZGRpbmcgPSBwYWRkaW5nRnJvbVBhZGRpbmdMZW5ndGgocGFkZGluZ0xlbmd0aCk7XG5cbiAgICBjb25zdCBzZW1pY29sb25TdHJpbmcgPSBtdWx0aUxpbmUgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXG5cbiR7bWF4aW11bVBhZGRpbmd9ICAgO2AgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIDtcIixcbiAgICAgICAgICBzdHJpbmcgPSBgXG5cbiR7dGhpcy5uYW1lfSR7YW1iaWd1b3VzU3RyaW5nfSR7cGFkZGluZ30gOjo9ICR7ZGVmaW5pdGlvbnNTdHJpbmd9JHtzZW1pY29sb25TdHJpbmd9YDtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5hbWVBbWJpZ3VvdXNEZWZpbml0aW9uc0FuZE5vblRlcm1pbmFsTm9kZShDbGFzcywgbmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKSB7XG4gICAgaWYgKE5vblRlcm1pbmFsTm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBOb25UZXJtaW5hbE5vZGUgPSBkZWZpbml0aW9uczsgIC8vL1xuXG4gICAgICBkZWZpbml0aW9ucyA9IGFtYmlndW91czsgIC8vL1xuXG4gICAgICBhbWJpZ3VvdXMgPSBuYW1lOyAvLy9cblxuICAgICAgbmFtZSA9IENsYXNzOyAvLy9cblxuICAgICAgQ2xhc3MgPSBSdWxlOyAvLy9cbiAgICB9XG5cbiAgICBjb25zdCBydWxlID0gbmV3IENsYXNzKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gcnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBjaGFyYWN0ZXJzLCBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgbGFzdCB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IE5FV19MSU5FX0NIQVJBQ1RFUiwgU1BBQ0VfQ0hBUkFDVEVSIH0gPSBjaGFyYWN0ZXJzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXJzZVRyZWUge1xuICBjb25zdHJ1Y3RvcihsaW5lcykge1xuICAgIHRoaXMubGluZXMgPSBsaW5lcztcbiAgfVxuXG4gIGNsb25lKCkge1xuICAgIGNvbnN0IGxpbmVzID0gdGhpcy5saW5lcy5zbGljZSgpLCAgLy8vXG4gICAgICAgICAgcGFyc2VUcmVlID0gbmV3IFBhcnNlVHJlZShsaW5lcyk7XG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgZ2V0V2lkdGgoKSB7XG4gICAgbGV0IHdpZHRoO1xuXG4gICAgbGV0IGxpbmVzTGVuZ3RoID0gdGhpcy5saW5lcy5sZW5ndGg7XG5cbiAgICBpZiAobGluZXNMZW5ndGggPT09IDApIHtcbiAgICAgIHdpZHRoID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbGFzdExpbmUgPSBsYXN0KHRoaXMubGluZXMpLFxuICAgICAgICAgICAgbGFzdExpbmVMZW5ndGggPSBsYXN0TGluZS5sZW5ndGg7XG5cbiAgICAgIHdpZHRoID0gbGFzdExpbmVMZW5ndGg7IC8vL1xuICAgIH1cblxuICAgIHJldHVybiB3aWR0aDtcbiAgfVxuXG4gIGdldERlcHRoKCkge1xuICAgIGNvbnN0IGxpbmVzTGVuZ3RoID0gdGhpcy5saW5lcy5sZW5ndGgsXG4gICAgICAgICAgZGVwdGggPSBsaW5lc0xlbmd0aDsgIC8vL1xuXG4gICAgcmV0dXJuIGRlcHRoO1xuICB9XG5cbiAgZm9yRWFjaExpbmUoY2FsbGJhY2spIHtcbiAgICB0aGlzLmxpbmVzLmZvckVhY2goY2FsbGJhY2spO1xuICB9XG5cbiAgYXBwZW5kVG9Ub3AocGFyc2VUcmVlKSB7XG4gICAgcGFyc2VUcmVlLmZvckVhY2hMaW5lKChsaW5lKSA9PiB7XG4gICAgICB0aGlzLmxpbmVzLnVuc2hpZnQobGluZSk7XG4gICAgfSk7XG4gIH1cblxuICBhcHBlbmRUb0xlZnQocGFyc2VUcmVlKSB7XG4gICAgcGFyc2VUcmVlLmZvckVhY2hMaW5lKChsaW5lLCBpbmRleCkgPT4ge1xuICAgICAgdGhpcy5saW5lc1tpbmRleF0gPSBsaW5lICsgdGhpcy5saW5lc1tpbmRleF07XG4gICAgfSk7XG4gIH1cblxuICBhcHBlbmRUb1JpZ2h0KHBhcnNlVHJlZSkge1xuICAgIHBhcnNlVHJlZS5mb3JFYWNoTGluZSgobGluZSwgaW5kZXgpID0+IHtcbiAgICAgIHRoaXMubGluZXNbaW5kZXhdID0gdGhpcy5saW5lc1tpbmRleF0gKyBsaW5lO1xuICAgIH0pO1xuICB9XG5cbiAgYXBwZW5kVG9Cb3R0b20ocGFyc2VUcmVlKSB7XG4gICAgcGFyc2VUcmVlLmZvckVhY2hMaW5lKChsaW5lKSA9PiB7XG4gICAgICB0aGlzLmxpbmVzLnB1c2gobGluZSk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRUb3BNYXJnaW4odG9wTWFyZ2luRGVwdGgpIHtcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuZ2V0V2lkdGgoKSxcbiAgICAgICAgICB0b3BNYXJnaW5XaWR0aCA9IHdpZHRoLCAgLy8vXG4gICAgICAgICAgdG9wTWFyZ2luU3RyaW5nID0gbWFyZ2luU3RyaW5nRnJvbU1hcmdpbldpZHRoKHRvcE1hcmdpbldpZHRoKTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0b3BNYXJnaW5EZXB0aDsgaW5kZXgrKykge1xuICAgICAgdGhpcy5saW5lcy51bnNoaWZ0KHRvcE1hcmdpblN0cmluZyk7XG4gICAgfVxuICB9XG5cbiAgYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpIHtcbiAgICBjb25zdCBsZWZ0TWFyZ2luU3RyaW5nID0gbWFyZ2luU3RyaW5nRnJvbU1hcmdpbldpZHRoKGxlZnRNYXJnaW5XaWR0aCksXG4gICAgICAgICAgbGluZXNMZW5ndGggPSB0aGlzLmxpbmVzLmxlbmd0aDtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsaW5lc0xlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdGhpcy5saW5lc1tpbmRleF0gPSBsZWZ0TWFyZ2luU3RyaW5nICsgdGhpcy5saW5lc1tpbmRleF07XG4gICAgfVxuICB9XG5cbiAgYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCkge1xuICAgIGNvbnN0IHJpZ2h0TWFyZ2luU3RyaW5nID0gbWFyZ2luU3RyaW5nRnJvbU1hcmdpbldpZHRoKHJpZ2h0TWFyZ2luV2lkdGgpLFxuICAgICAgICAgIGxpbmVzTGVuZ3RoID0gdGhpcy5saW5lcy5sZW5ndGg7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGluZXNMZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHRoaXMubGluZXNbaW5kZXhdID0gdGhpcy5saW5lc1tpbmRleF0gKyByaWdodE1hcmdpblN0cmluZztcbiAgICB9XG4gIH1cblxuICBhZGRCb3R0b21NYXJnaW4oYm90dG9tTWFyZ2luRGVwdGgpIHtcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuZ2V0V2lkdGgoKSxcbiAgICAgICAgICBib3R0b21NYXJnaW5XaWR0aCA9IHdpZHRoLCAgLy8vXG4gICAgICAgICAgYm90dG9tTWFyZ2luU3RyaW5nID0gbWFyZ2luU3RyaW5nRnJvbU1hcmdpbldpZHRoKGJvdHRvbU1hcmdpbldpZHRoKTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBib3R0b21NYXJnaW5EZXB0aDsgaW5kZXgrKykge1xuICAgICAgdGhpcy5saW5lcy5wdXNoKGJvdHRvbU1hcmdpblN0cmluZyk7XG4gICAgfVxuICB9XG4gIFxuICBwb3BMaW5lKCkgeyByZXR1cm4gdGhpcy5saW5lcy5wb3AoKTsgfVxuICBcbiAgc2hpZnRMaW5lKCkgeyByZXR1cm4gdGhpcy5saW5lcy5zaGlmdCgpOyB9XG4gIFxuICBwdXNoTGluZShsaW5lKSB7IHRoaXMubGluZXMucHVzaChsaW5lKTsgfVxuICBcbiAgdW5zaGlmdExpbmUobGluZSkgeyB0aGlzLmxpbmVzLnVuc2hpZnQobGluZSk7IH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmxpbmVzLnJlZHVjZSgoc3RyaW5nLCBsaW5lKSA9PiB7XG4gICAgICBzdHJpbmcgKz0gbGluZSArIE5FV19MSU5FX0NIQVJBQ1RFUjtcblxuICAgICAgcmV0dXJuIHN0cmluZztcbiAgICB9LCBFTVBUWV9TVFJJTkcpO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJnaW5TdHJpbmdGcm9tTWFyZ2luV2lkdGgobWFyZ2luV2lkdGgsIHNwYWNlQ2hhcmFjdGVyKSB7XG4gIHNwYWNlQ2hhcmFjdGVyID0gc3BhY2VDaGFyYWN0ZXIgfHwgU1BBQ0VfQ0hBUkFDVEVSO1xuXG4gIGxldCBtYXJnaW5TdHJpbmcgPSBFTVBUWV9TVFJJTkc7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG1hcmdpbldpZHRoOyBpbmRleCsrKSB7XG4gICAgbWFyZ2luU3RyaW5nICs9IHNwYWNlQ2hhcmFjdGVyO1xuICB9XG5cbiAgcmV0dXJuIG1hcmdpblN0cmluZztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IFBhcnNlVHJlZSBmcm9tIFwiLi4vcGFyc2VUcmVlXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBCQVJfQ0hBUkFDVEVSIH0gPSBjaGFyYWN0ZXJzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBleHRlbmRzIFBhcnNlVHJlZSB7XG4gIGNvbnN0cnVjdG9yKGxpbmVzLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKSB7XG4gICAgc3VwZXIobGluZXMpO1xuICAgIFxuICAgIHRoaXMudmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHZlcnRpY2FsQnJhbmNoUG9zaXRpb247XG4gIH1cbiAgXG4gIGdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudmVydGljYWxCcmFuY2hQb3NpdGlvbjtcbiAgfVxuXG4gIGFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKSB7XG4gICAgc3VwZXIuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuXG4gICAgdGhpcy52ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uICs9IGxlZnRNYXJnaW5XaWR0aDsgLy8vXG4gIH1cblxuICBzdGF0aWMgZnJvbVdpZHRoKHdpZHRoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gQkFSX0NIQVJBQ1RFUixcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gMCxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLCBzdHJpbmcsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pLFxuICAgICAgICAgIGxlZnRNYXJnaW5XaWR0aCA9IE1hdGguZmxvb3Iod2lkdGgvMiksXG4gICAgICAgICAgcmlnaHRNYXJnaW5XaWR0aCA9IHdpZHRoIC0gbGVmdE1hcmdpbldpZHRoIC0gMTtcblxuICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmFkZExlZnRNYXJnaW4obGVmdE1hcmdpbldpZHRoKTtcbiAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcblxuICAgIHJldHVybiB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRGVwdGhBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKENsYXNzLCBkZXB0aCwgdmVydGljYWxCcmFuY2hQb3NpdGlvbikge1xuICAgIGNvbnN0IGxpbmVzID0gbGluZXNGcm9tRGVwdGgoZGVwdGgpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gbmV3IENsYXNzKGxpbmVzLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHJldHVybiB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3RyaW5nQW5kVmVydGljYWxCcmFuY2hQb3NpdGlvbihDbGFzcywgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKSB7XG4gICAgaWYgKHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHN0cmluZzsgIC8vL1xuXG4gICAgICBzdHJpbmcgPSBDbGFzczsgLy8vXG5cbiAgICAgIENsYXNzID0gUGFyc2VUcmVlOyAgLy8vXG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGxpbmUgPSBzdHJpbmcsIC8vL1xuICAgICAgICAgIGxpbmVzID0gW1xuICAgICAgICAgICAgbGluZVxuICAgICAgICAgIF0sXG4gICAgICAgICAgdmVydGljYWxCcmFuY2hQYXJzZVRyZWUgPSBuZXcgQ2xhc3MobGluZXMsIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24pO1xuXG4gICAgcmV0dXJuIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGxpbmVzRnJvbURlcHRoKGRlcHRoKSB7XG4gIGNvbnN0IGxpbmVzID0gW107XG5cbiAgbGV0IGluZGV4ID0gMDtcblxuICB3aGlsZSAoaW5kZXggPCBkZXB0aCkge1xuICAgIGxpbmVzW2luZGV4KytdID0gRU1QVFlfU1RSSU5HO1xuICB9XG5cbiAgcmV0dXJuIGxpbmVzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gdG9rZW5MaW5lSW5kZXhGcm9tVG9rZW5BbmRUb2tlbnModG9rZW4sIHRva2Vucykge1xuICBsZXQgdG9rZW5MaW5lSW5kZXggPSAwO1xuXG4gIGNvbnN0IHRva2VuSW5kZXggPSB0b2tlbnMuaW5kZXhPZih0b2tlbiksXG4gICAgICAgIHN0YXJ0ID0gMCxcbiAgICAgICAgZW5kID0gdG9rZW5JbmRleDtcblxuICB0b2tlbnMgPSB0b2tlbnMuc2xpY2Uoc3RhcnQsIGVuZCk7ICAvLy9cblxuICB0b2tlbnMuZm9yRWFjaCgodG9rZW4pID0+IHtcbiAgICBjb25zdCB0b2tlbkVuZE9mTGluZVRva2VuID0gdG9rZW4uaXNFbmRPZkxpbmVUb2tlbigpO1xuXG4gICAgaWYgKHRva2VuRW5kT2ZMaW5lVG9rZW4pIHtcbiAgICAgIHRva2VuTGluZUluZGV4Kys7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdG9rZW5MaW5lSW5kZXg7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNoYXJhY3RlcnN9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmltcG9ydCB7IHRva2VuTGluZUluZGV4RnJvbVRva2VuQW5kVG9rZW5zIH0gZnJvbSBcIi4uL3V0aWxpdGllcy90b2tlbnNcIjtcblxuY29uc3QgeyBTUEFDRV9DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVOYW1lUGFyc2VUcmVlIGV4dGVuZHMgVmVydGljYWxCcmFuY2hQYXJzZVRyZWUge1xuICBzdGF0aWMgZnJvbU5vblRlcm1pbmFsTm9kZUFuZFRva2Vucyhub25UZXJtaW5hbE5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgYW1iaWd1b3VzID0gbm9uVGVybWluYWxOb2RlLmlzQW1iaWd1b3VzKCksXG4gICAgICAgICAgZmlyc3RTaWduaWZpY2FudFRva2VuID0gbm9uVGVybWluYWxOb2RlLmdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbigpLFxuICAgICAgICAgIGxhc3RTaWduaWZpY2FudFRva2VuID0gbm9uVGVybWluYWxOb2RlLmdldExhc3RTaWduaWZpY2FudFRva2VuKCksXG4gICAgICAgICAgZmlyc3RTaWduaWZpY2FudFRva2VuTGluZUluZGV4ID0gdG9rZW5MaW5lSW5kZXhGcm9tVG9rZW5BbmRUb2tlbnMoZmlyc3RTaWduaWZpY2FudFRva2VuLCB0b2tlbnMpLFxuICAgICAgICAgIGxhc3RTaWduaWZpY2FudFRva2VuTGluZUluZGV4ID0gdG9rZW5MaW5lSW5kZXhGcm9tVG9rZW5BbmRUb2tlbnMobGFzdFNpZ25pZmljYW50VG9rZW4sIHRva2VucyksXG4gICAgICAgICAgdG9rZW5MaW5lSW5kZXhlcyA9IChmaXJzdFNpZ25pZmljYW50VG9rZW5MaW5lSW5kZXggIT09IGxhc3RTaWduaWZpY2FudFRva2VuTGluZUluZGV4KSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtmaXJzdFNpZ25pZmljYW50VG9rZW5MaW5lSW5kZXh9LSR7bGFzdFNpZ25pZmljYW50VG9rZW5MaW5lSW5kZXh9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke2ZpcnN0U2lnbmlmaWNhbnRUb2tlbkxpbmVJbmRleH1gO1xuXG4gICAgbGV0IHN0cmluZyA9IGAke3J1bGVOYW1lfWA7XG5cbiAgICBpZiAoYW1iaWd1b3VzKSB7XG4gICAgICBzdHJpbmcgPSBgJHtzdHJpbmd9IWA7XG4gICAgfVxuXG4gICAgc3RyaW5nID0gYCR7c3RyaW5nfSBbJHt0b2tlbkxpbmVJbmRleGVzfV1gO1xuXG4gICAgbGV0IHByZWNlZGVuY2UgPSBub25UZXJtaW5hbE5vZGUuZ2V0UHJlY2VkZW5jZSgpO1xuXG4gICAgaWYgKHByZWNlZGVuY2UgIT09IG51bGwpIHtcbiAgICAgIGlmIChwcmVjZWRlbmNlID09PSBJbmZpbml0eSkge1xuICAgICAgICBwcmVjZWRlbmNlID0gU1BBQ0VfQ0hBUkFDVEVSO1xuICAgICAgfVxuXG4gICAgICBzdHJpbmcgPSBgJHtzdHJpbmd9ICgke3ByZWNlZGVuY2V9KWA7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoID0gc3RyaW5nTGVuZ3RoLCAvLy9cbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHJ1bGVOYW1lUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oUnVsZU5hbWVQYXJzZVRyZWUsIHN0cmluZywgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICBydWxlTmFtZVBhcnNlVHJlZS5hcHBlbmRUb1RvcCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSk7XG5cbiAgICByZXR1cm4gcnVsZU5hbWVQYXJzZVRyZWU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IFBhcnNlVHJlZSBmcm9tIFwiLi4vcGFyc2VUcmVlXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuY29uc3QgeyBEQVNIX0NIQVJBQ1RFUiB9ID0gY2hhcmFjdGVycztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZSBleHRlbmRzIFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tV2lkdGgod2lkdGgpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBzdHJpbmdGcm9tQ2hhcmFjdGVyc1dpZHRoKHdpZHRoLCBEQVNIX0NIQVJBQ1RFUiksXG4gICAgICAgICAgbGluZSA9IHN0cmluZywgLy8vXG4gICAgICAgICAgbGluZXMgPSBbXG4gICAgICAgICAgICBsaW5lXG4gICAgICAgICAgXSxcbiAgICAgICAgICBob3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlID0gbmV3IEhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUobGluZXMpO1xuXG4gICAgcmV0dXJuIGhvcml6b250YWxCcmFuY2hQYXJzZVRyZWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RyaW5nRnJvbUNoYXJhY3RlcnNXaWR0aChjaGFyYWN0ZXJzV2lkdGgsIGNoYXJhY3Rlcikge1xuICBsZXQgc3RyaW5nID0gRU1QVFlfU1RSSU5HO1xuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjaGFyYWN0ZXJzV2lkdGg7IGluZGV4KyspIHtcbiAgICBzdHJpbmcgKz0gY2hhcmFjdGVyO1xuICB9XG5cbiAgcmV0dXJuIHN0cmluZztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuaW1wb3J0IEhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUgZnJvbSBcIi4vaG9yaXpvbnRhbEJyYW5jaFwiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hpbGROb2Rlc1BhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21DaGlsZE5vZGVzQW5kVG9rZW5zKGNoaWxkTm9kZXMsIHRva2Vucykge1xuICAgIGxldCBjaGlsZE5vZGVzUGFyc2VUcmVlO1xuXG4gICAgY29uc3QgY2hpbGROb2RlUGFyc2VUcmVlcyA9IGNoaWxkTm9kZXMucmVkdWNlKChjaGlsZE5vZGVQYXJzZVRyZWVzLCBjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZVBhcnNlVHJlZSA9IGNoaWxkTm9kZS5hc1BhcnNlVHJlZSh0b2tlbnMpO1xuXG4gICAgICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzLnB1c2goY2hpbGROb2RlUGFyc2VUcmVlKTtcblxuICAgICAgICAgICAgcmV0dXJuIGNoaWxkTm9kZVBhcnNlVHJlZXM7XG4gICAgICAgICAgfSwgW10pLFxuICAgICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXNMZW5ndGggPSBjaGlsZE5vZGVQYXJzZVRyZWVzLmxlbmd0aDtcblxuICAgIGlmIChjaGlsZE5vZGVQYXJzZVRyZWVzTGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBmaXJzdENoaWxkTm9kZVBhcnNlVHJlZSA9IGZpcnN0KGNoaWxkTm9kZVBhcnNlVHJlZXMpO1xuXG4gICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlID0gZmlyc3RDaGlsZE5vZGVQYXJzZVRyZWU7ICAvLy9cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGZpcnN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHVuZGVmaW5lZCxcbiAgICAgICAgICBsYXN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IDAsXG4gICAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlc1dpZHRoID0gMCxcbiAgICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzRGVwdGggPSAwO1xuXG4gICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzLmZvckVhY2goKGNoaWxkTm9kZVBhcnNlVHJlZSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlUGFyc2VUcmVlV2lkdGggPSBjaGlsZE5vZGVQYXJzZVRyZWUuZ2V0V2lkdGgoKSxcbiAgICAgICAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlRGVwdGggPSBjaGlsZE5vZGVQYXJzZVRyZWUuZ2V0RGVwdGgoKTtcblxuICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICBjb25zdCBmaXJzdENoaWxkTm9kZVBhcnNlVHJlZSA9IGNoaWxkTm9kZVBhcnNlVHJlZSxcbiAgICAgICAgICAgICAgICBmaXJzdENoaWxkTm9kZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBmaXJzdENoaWxkTm9kZVBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCk7XG5cbiAgICAgICAgICBmaXJzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBmaXJzdENoaWxkTm9kZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb247XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5kZXggPT09IGNoaWxkTm9kZVBhcnNlVHJlZXNMZW5ndGggLSAxKSB7XG4gICAgICAgICAgY29uc3QgbGFzdENoaWxkTm9kZVBhcnNlVHJlZSA9IGNoaWxkTm9kZVBhcnNlVHJlZSxcbiAgICAgICAgICAgICAgICBsYXN0Q2hpbGROb2RlUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IGxhc3RDaGlsZE5vZGVQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpO1xuXG4gICAgICAgICAgbGFzdFZlcnRpY2FsQnJhbmNoUG9zaXRpb24gKz0gbGFzdENoaWxkTm9kZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb247XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5kZXggPCBjaGlsZE5vZGVQYXJzZVRyZWVzTGVuZ3RoIC0gMSkge1xuICAgICAgICAgIGxhc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uICs9IGNoaWxkTm9kZVBhcnNlVHJlZVdpZHRoO1xuICAgICAgICAgIGxhc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uICs9IDE7XG5cbiAgICAgICAgICBjaGlsZE5vZGVQYXJzZVRyZWVzV2lkdGggKz0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkTm9kZVBhcnNlVHJlZXNXaWR0aCArPSBjaGlsZE5vZGVQYXJzZVRyZWVXaWR0aDtcbiAgICAgICAgY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoID0gTWF0aC5tYXgoY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoLCBjaGlsZE5vZGVQYXJzZVRyZWVEZXB0aCk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgd2lkdGggPSBsYXN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiAtIGZpcnN0VmVydGljYWxCcmFuY2hQb3NpdGlvbiArIDEsXG4gICAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh3aWR0aCksXG4gICAgICAgICAgICBob3Jpem9udGFsQnJhbmNoUGFyc2VUcmVlID0gSG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZS5mcm9tV2lkdGgod2lkdGgpLFxuICAgICAgICAgICAgbGVmdE1hcmdpbldpZHRoID0gZmlyc3RWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uLFxuICAgICAgICAgICAgcmlnaHRNYXJnaW5XaWR0aCA9IGNoaWxkTm9kZVBhcnNlVHJlZXNXaWR0aCAtIHdpZHRoIC0gbGVmdE1hcmdpbldpZHRoO1xuXG4gICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5hZGRMZWZ0TWFyZ2luKGxlZnRNYXJnaW5XaWR0aCk7XG4gICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcbiAgICAgIGhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgICAgaG9yaXpvbnRhbEJyYW5jaFBhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcblxuICAgICAgY29uc3QgdmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKTtcblxuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21EZXB0aEFuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oQ2hpbGROb2Rlc1BhcnNlVHJlZSwgY2hpbGROb2RlUGFyc2VUcmVlc0RlcHRoLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgICAgY2hpbGROb2RlUGFyc2VUcmVlcy5mb3JFYWNoKChjaGlsZE5vZGVQYXJzZVRyZWUsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZVBhcnNlVHJlZURlcHRoID0gY2hpbGROb2RlUGFyc2VUcmVlLmdldERlcHRoKCksXG4gICAgICAgICAgICAgIGNsb25lZENoaWxkTm9kZVBhcnNlVHJlZSA9IGNoaWxkTm9kZVBhcnNlVHJlZS5jbG9uZSgpO1xuXG4gICAgICAgIGlmIChpbmRleCA8IGNoaWxkTm9kZVBhcnNlVHJlZXNMZW5ndGggLSAxKSB7XG4gICAgICAgICAgY29uc3QgcmlnaHRNYXJnaW5XaWR0aCA9IDE7XG5cbiAgICAgICAgICBjbG9uZWRDaGlsZE5vZGVQYXJzZVRyZWUuYWRkUmlnaHRNYXJnaW4ocmlnaHRNYXJnaW5XaWR0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hpbGROb2RlUGFyc2VUcmVlRGVwdGggPCBjaGlsZE5vZGVQYXJzZVRyZWVzRGVwdGgpIHtcbiAgICAgICAgICBjb25zdCBib3R0b21NYXJnaW5EZXB0aCA9IGNoaWxkTm9kZVBhcnNlVHJlZXNEZXB0aCAtIGNoaWxkTm9kZVBhcnNlVHJlZURlcHRoO1xuXG4gICAgICAgICAgY2xvbmVkQ2hpbGROb2RlUGFyc2VUcmVlLmFkZEJvdHRvbU1hcmdpbihib3R0b21NYXJnaW5EZXB0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlLmFwcGVuZFRvUmlnaHQoY2xvbmVkQ2hpbGROb2RlUGFyc2VUcmVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBjaGlsZE5vZGVzUGFyc2VUcmVlLmFwcGVuZFRvVG9wKGhvcml6b250YWxCcmFuY2hQYXJzZVRyZWUpO1xuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZS5hcHBlbmRUb1RvcCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBjaGlsZE5vZGVzUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlTmFtZVBhcnNlVHJlZSBmcm9tIFwiLi9ydWxlTmFtZVwiO1xuaW1wb3J0IENoaWxkTm9kZXNQYXJzZVRyZWUgZnJvbSBcIi4vY2hpbGROb2Rlc1wiO1xuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21Ob25UZXJtaW5hbE5vZGVBbmRUb2tlbnMobm9uVGVybWluYWxOb2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBydWxlTmFtZVBhcnNlVHJlZSA9IFJ1bGVOYW1lUGFyc2VUcmVlLmZyb21Ob25UZXJtaW5hbE5vZGVBbmRUb2tlbnMobm9uVGVybWluYWxOb2RlLCB0b2tlbnMpLFxuICAgICAgICAgIGNoaWxkTm9kZXNQYXJzZVRyZWUgPSBDaGlsZE5vZGVzUGFyc2VUcmVlLmZyb21DaGlsZE5vZGVzQW5kVG9rZW5zKGNoaWxkTm9kZXMsIHRva2Vucyk7XG4gICAgXG4gICAgbGV0IHJ1bGVOYW1lUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IHJ1bGVOYW1lUGFyc2VUcmVlLmdldFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oKTtcbiAgICBcbiAgICBjb25zdCBjaGlsZE5vZGVzUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiA9IGNoaWxkTm9kZXNQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZSA9IHJ1bGVOYW1lUGFyc2VUcmVlVmVydGljYWxCcmFuY2hQb3NpdGlvbiAtIGNoaWxkTm9kZXNQYXJzZVRyZWVWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uO1xuICAgIFxuICAgIGxldCBsZWZ0TWFyZ2luV2lkdGggPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIC8vL1xuICAgIH0gZWxzZSBpZiAodmVydGljYWxCcmFuY2hQb3NpdGlvbnNEaWZmZXJlbmNlIDwgMCkge1xuICAgICAgbGVmdE1hcmdpbldpZHRoID0gLXZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZTtcblxuICAgICAgcnVsZU5hbWVQYXJzZVRyZWUuYWRkTGVmdE1hcmdpbihsZWZ0TWFyZ2luV2lkdGgpO1xuICAgIH0gZWxzZSBpZiAodmVydGljYWxCcmFuY2hQb3NpdGlvbnNEaWZmZXJlbmNlID4gMCkge1xuICAgICAgbGVmdE1hcmdpbldpZHRoID0gK3ZlcnRpY2FsQnJhbmNoUG9zaXRpb25zRGlmZmVyZW5jZTtcblxuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZS5hZGRMZWZ0TWFyZ2luKGxlZnRNYXJnaW5XaWR0aCk7XG4gICAgfVxuXG4gICAgY29uc3QgcnVsZU5hbWVQYXJzZVRyZWVXaWR0aCA9IHJ1bGVOYW1lUGFyc2VUcmVlLmdldFdpZHRoKCksXG4gICAgICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZVdpZHRoID0gY2hpbGROb2Rlc1BhcnNlVHJlZS5nZXRXaWR0aCgpLFxuICAgICAgICAgIHdpZHRoc0RpZmZlcmVuY2UgPSBydWxlTmFtZVBhcnNlVHJlZVdpZHRoIC0gY2hpbGROb2Rlc1BhcnNlVHJlZVdpZHRoO1xuICAgIFxuICAgIGxldCByaWdodE1hcmdpbldpZHRoID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICAvLy9cbiAgICB9IGVsc2UgaWYgKHdpZHRoc0RpZmZlcmVuY2UgPCAwKSB7XG4gICAgICByaWdodE1hcmdpbldpZHRoID0gLXdpZHRoc0RpZmZlcmVuY2U7XG4gICAgICBcbiAgICAgIHJ1bGVOYW1lUGFyc2VUcmVlLmFkZFJpZ2h0TWFyZ2luKHJpZ2h0TWFyZ2luV2lkdGgpO1xuICAgIH0gZWxzZSBpZiAod2lkdGhzRGlmZmVyZW5jZSA+IDApIHtcbiAgICAgIHJpZ2h0TWFyZ2luV2lkdGggPSArd2lkdGhzRGlmZmVyZW5jZTtcblxuICAgICAgY2hpbGROb2Rlc1BhcnNlVHJlZS5hZGRSaWdodE1hcmdpbihyaWdodE1hcmdpbldpZHRoKTtcbiAgICB9XG5cbiAgICBydWxlTmFtZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBydWxlTmFtZVBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCk7XG5cbiAgICBjb25zdCBydWxlTmFtZVBhcnNlVHJlZURlcHRoID0gcnVsZU5hbWVQYXJzZVRyZWUuZ2V0RGVwdGgoKSxcbiAgICAgICAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWVEZXB0aCA9IHJ1bGVOYW1lUGFyc2VUcmVlRGVwdGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSBydWxlTmFtZVBhcnNlVHJlZVZlcnRpY2FsQnJhbmNoUG9zaXRpb24sIC8vL1xuICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21EZXB0aEFuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oTm9uVGVybWluYWxOb2RlUGFyc2VUcmVlLCBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWVEZXB0aCwgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWUuYXBwZW5kVG9SaWdodChydWxlTmFtZVBhcnNlVHJlZSk7XG5cbiAgICBub25UZXJtaW5hbE5vZGVQYXJzZVRyZWUuYXBwZW5kVG9Cb3R0b20oY2hpbGROb2Rlc1BhcnNlVHJlZSk7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlUGFyc2VUcmVlIGZyb20gXCIuLi9wYXJzZVRyZWUvbm9uVGVybWluYWxOb2RlXCI7XG5cbmNvbnN0IHsgZmlyc3QsIG1hdGNoLCBmb3J3YXJkc1NvbWUsIGJhY2t3YXJkc1NvbWUgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbE5vZGUge1xuICBjb25zdHJ1Y3RvcihydWxlTmFtZSwgY2hpbGROb2RlcywgYW1iaWd1b3VzLCBwcmVjZWRlbmNlKSB7XG4gICAgdGhpcy5ydWxlTmFtZSA9IHJ1bGVOYW1lO1xuICAgIHRoaXMuY2hpbGROb2RlcyA9IGNoaWxkTm9kZXM7XG4gICAgdGhpcy5hbWJpZ3VvdXMgPSBhbWJpZ3VvdXM7XG4gICAgdGhpcy5wcmVjZWRlbmNlID0gcHJlY2VkZW5jZTtcbiAgfVxuXG4gIGdldFJ1bGVOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVOYW1lO1xuICB9XG5cbiAgZ2V0Q2hpbGROb2RlcygpIHtcbiAgICByZXR1cm4gdGhpcy5jaGlsZE5vZGVzO1xuICB9XG5cbiAgaXNBbWJpZ3VvdXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuYW1iaWd1b3VzO1xuICB9XG5cbiAgZ2V0UHJlY2VkZW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcmVjZWRlbmNlO1xuICB9XG5cbiAgc2V0UnVsZU5hbWUocnVsZU5hbWUpIHtcbiAgICB0aGlzLnJ1bGVOYW1lID0gcnVsZU5hbWU7XG4gIH1cblxuICBzZXRDaGlsZE5vZGVzKGNoaWxkTm9kZXMpIHtcbiAgICB0aGlzLmNoaWxkTm9kZXMgPSBjaGlsZE5vZGVzO1xuICB9XG5cbiAgc2V0QW1iaWd1b3VzKGFtYmlndW91cykge1xuICAgIHRoaXMuYW1iaWd1b3VzID0gYW1iaWd1b3VzO1xuICB9XG5cbiAgc2V0UHJlY2VkZW5jZShwcmVjZWRlbmNlKSB7XG4gICAgdGhpcy5wcmVjZWRlbmNlID0gcHJlY2VkZW5jZTtcbiAgfVxuXG4gIGlzVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIHRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGlzTm9uVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHRydWU7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxOb2RlO1xuICB9XG5cbiAgZ2V0Rmlyc3RTaWduaWZpY2FudFRva2VuKCkge1xuICAgIGxldCBmaXJzdFNpZ25pZmljYW50VG9rZW4gPSBudWxsO1xuXG4gICAgZm9yd2FyZHNTb21lKHRoaXMuY2hpbGROb2RlcywgKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgZmlyc3RTaWduaWZpY2FudFRva2VuID0gY2hpbGROb2RlLmdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbigpO1xuXG4gICAgICBpZiAoZmlyc3RTaWduaWZpY2FudFRva2VuICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZpcnN0U2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIGdldExhc3RTaWduaWZpY2FudFRva2VuKCkge1xuICAgIGxldCBsYXN0U2lnbmlmaWNhbnRUb2tlbiA9IG51bGw7XG5cbiAgICBiYWNrd2FyZHNTb21lKHRoaXMuY2hpbGROb2RlcywgKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgbGFzdFNpZ25pZmljYW50VG9rZW4gPSBjaGlsZE5vZGUuZ2V0TGFzdFNpZ25pZmljYW50VG9rZW4oKTtcblxuICAgICAgaWYgKGxhc3RTaWduaWZpY2FudFRva2VuICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGxhc3RTaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgaXNMb3dlclByZWNlZGVuY2UocnVsZU5hbWUsIHByZWNlZGVuY2UpIHtcbiAgICBsZXQgbG93ZXJQcmVjZWRlbmNlO1xuXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICAvLy9cbiAgICB9IGVsc2UgaWYgKHRoaXMucHJlY2VkZW5jZSA9PT0gbnVsbCkge1xuICAgICAgbG93ZXJQcmVjZWRlbmNlID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByZWNlZGVuY2UgPT09IEluZmluaXR5KSB7XG4gICAgICBjb25zdCBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KHRoaXMuY2hpbGROb2Rlcyk7XG5cbiAgICAgIGxvd2VyUHJlY2VkZW5jZSA9IGZpcnN0Q2hpbGROb2RlLmlzTG93ZXJQcmVjZWRlbmNlKHJ1bGVOYW1lLCBwcmVjZWRlbmNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG93ZXJQcmVjZWRlbmNlID0gKCh0aGlzLnJ1bGVOYW1lID09PSBydWxlTmFtZSkgJiYgKHRoaXMucHJlY2VkZW5jZSA8IHByZWNlZGVuY2UpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbG93ZXJQcmVjZWRlbmNlO1xuICB9XG5cbiAgaXNVbnByZWNlZGVudGVkKCkge1xuICAgIGxldCB1bnByZWNlZGVudGVkID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5wcmVjZWRlbmNlICE9PSBudWxsKSB7XG4gICAgICB1bnByZWNlZGVudGVkID0gdGhpcy5jaGlsZE5vZGVzLnNvbWUoKGNoaWxkTm9kZSkgPT4geyAgLy8vXG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZUxvd2VyUHJlY2VkZW5jZSA9IGNoaWxkTm9kZS5pc0xvd2VyUHJlY2VkZW5jZSh0aGlzLnJ1bGVOYW1lLCB0aGlzLnByZWNlZGVuY2UpO1xuXG4gICAgICAgIGlmIChjaGlsZE5vZGVMb3dlclByZWNlZGVuY2UpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVucHJlY2VkZW50ZWQ7XG4gIH1cblxuICBpc0luY2x1ZGVkSW4obm9kZSkge1xuICAgIGxldCBpbmNsdWRlZEluID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcyA9PT0gbm9kZSkge1xuICAgICAgaW5jbHVkZWRJbiA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5vZGVOb25UZXJtaW5hbE5vZGUgPSBub2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgICAgIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG5vZGUsIC8vL1xuICAgICAgICAgICAgICBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKTtcblxuICAgICAgICBpbmNsdWRlZEluID0gY2hpbGROb2Rlcy5zb21lKChjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBpbmNsdWRlZEluQ2hpbGROb2RlID0gdGhpcy5pc0luY2x1ZGVkSW4oY2hpbGROb2RlKTtcblxuICAgICAgICAgIGlmIChpbmNsdWRlZEluQ2hpbGROb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbmNsdWRlZEluO1xuICB9XG5cbiAgaXNFbXB0eSgpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzTGVuZ3RoID0gdGhpcy5jaGlsZE5vZGVzLmxlbmd0aCxcbiAgICAgICAgICBlbXB0eSA9IChjaGlsZE5vZGVzTGVuZ3RoID09PSAwKTtcblxuICAgIHJldHVybiBlbXB0eTtcbiAgfVxuXG4gIG1hdGNoKG5vZGUsIGRlcHRoID0gSW5maW5pdHksIGV4YWN0bHkgPSBmYWxzZSkge1xuICAgIGxldCBtYXRjaGVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gICAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG5vZGUsIC8vL1xuICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTtcblxuICAgICAgaWYgKHRoaXMucnVsZU5hbWUgPT09IG5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lKSB7XG4gICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZUFtYmlndW91cyA9IG5vblRlcm1pbmFsTm9kZS5pc0FtYmlndW91cygpO1xuXG4gICAgICAgIGlmICh0aGlzLmFtYmlndW91cyA9PT0gbm9uVGVybWluYWxOb2RlQW1iaWd1b3VzKSB7XG4gICAgICAgICAgY29uc3QgcHJlY2VkZW5jZSA9IHRoaXMuZ2V0UHJlY2VkZW5jZSgpLFxuICAgICAgICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVByZWNlZGVuY2UgPSBub25UZXJtaW5hbE5vZGUuZ2V0UHJlY2VkZW5jZSgpO1xuXG4gICAgICAgICAgaWYgKHByZWNlZGVuY2UgPT09IG5vblRlcm1pbmFsTm9kZVByZWNlZGVuY2UpIHtcbiAgICAgICAgICAgIGRlcHRoLS07XG5cbiAgICAgICAgICAgIGlmIChkZXB0aCA9PT0gMCkge1xuICAgICAgICAgICAgICBtYXRjaGVzID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgICAgICAgICAgIG1hdGNoZXMgPSBtYXRjaCh0aGlzLmNoaWxkTm9kZXMsIG5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMsIChjaGlsZE5vZGUsIG5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZU1hdGNoZXNOb25UZXJtaW5hbE5vZGVDaGlsZE5vZGUgPSBjaGlsZE5vZGUubWF0Y2gobm9uVGVybWluYWxOb2RlQ2hpbGROb2RlLCBkZXB0aCwgZXhhY3RseSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoY2hpbGROb2RlTWF0Y2hlc05vblRlcm1pbmFsTm9kZUNoaWxkTm9kZSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxuXG4gIHJld3JpdGUoKSB7XG4gICAgY29uc3QgcmV3cml0dGVuTm9uVGVybWluYWxOb2RlID0gbnVsbDtcblxuICAgIHJldHVybiByZXdyaXR0ZW5Ob25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBhc1BhcnNlVHJlZSh0b2tlbnMpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSB0aGlzLCAgLy8vXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlUGFyc2VUcmVlID0gTm9uVGVybWluYWxOb2RlUGFyc2VUcmVlLmZyb21Ob25UZXJtaW5hbE5vZGVBbmRUb2tlbnMobm9uVGVybWluYWxOb2RlLCB0b2tlbnMpLFxuICAgICAgICAgIHBhcnNlVHJlZSA9IG5vblRlcm1pbmFsTm9kZVBhcnNlVHJlZTsgIC8vL1xuXG4gICAgcmV0dXJuIHBhcnNlVHJlZTtcbiAgfVxuXG4gIGNsb25lKCkge1xuICAgIGNvbnN0IENsYXNzID0gdGhpcy5jb25zdHJ1Y3RvcixcbiAgICAgICAgICBydWxlTmFtZSA9IHRoaXMucnVsZU5hbWUsXG4gICAgICAgICAgY2hpbGROb2RlcyA9IHRoaXMuY2hpbGROb2Rlcy5tYXAoKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgICAgICAgY2hpbGROb2RlID0gY2hpbGROb2RlLmNsb25lKCk7ICAvLy9cblxuICAgICAgICAgICAgcmV0dXJuIGNoaWxkTm9kZTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSB0aGlzLmFtYmlndW91cyxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gdGhpcy5wcmVjZWRlbmNlLFxuICAgICAgICAgIG5vblRlcm1pbmFsTm9kZSA9IG5ldyBDbGFzcyhydWxlTmFtZSwgY2hpbGROb2RlcywgYW1iaWd1b3VzLCBwcmVjZWRlbmNlKTtcblxuICAgIHJldHVybiBub25UZXJtaW5hbE5vZGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZEFtYmlndW91cyhDbGFzcywgcnVsZU5hbWUsIGNoaWxkTm9kZXMsIGFtYmlndW91cywgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XG4gICAgaWYgKGFtYmlndW91cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBhbWJpZ3VvdXMgPSBjaGlsZE5vZGVzOyAvLy9cblxuICAgICAgY2hpbGROb2RlcyA9IHJ1bGVOYW1lOyAgLy8vXG5cbiAgICAgIHJ1bGVOYW1lID0gQ2xhc3M7IC8vL1xuXG4gICAgICBDbGFzcyA9IE5vblRlcm1pbmFsTm9kZTsgIC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHByZWNlZGVuY2UgPSBudWxsLFxuICAgICAgICAgIG5vblRlcm1pbmFsTm9kZSA9IG5ldyBDbGFzcyhydWxlTmFtZSwgY2hpbGROb2RlcywgYW1iaWd1b3VzLCBwcmVjZWRlbmNlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsTm9kZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmFtZUJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZXROYW1lKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlQ29udGVudCA9IHRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgbmFtZSA9IHRlcm1pbmFsTm9kZUNvbnRlbnQ7IC8vL1xuICAgIFxuICAgIHJldHVybiBuYW1lO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMocnVsZU5hbWUsIGNoaWxkTm9kZSwgYW1iaWd1b3VzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZEFtYmlndW91cyhOYW1lQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZSwgYW1iaWd1b3VzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuY29uc3QgeyBwdXNoIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpIHtcbiAgbGV0IHBhcnNlZDtcblxuICBjb25zdCBpbmRleCA9IDAsXG4gICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgIHBhcnRcbiAgICAgICAgXTtcblxuICBwYXJzZWQgPSBwYXJzZVBhcnRPZlBhcnRzKGluZGV4LCBwYXJ0cywgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKTtcblxuICByZXR1cm4gcGFyc2VkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJ0cyhwYXJ0cywgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKSB7XG4gIGxldCBwYXJzZWQ7XG5cbiAgY29uc3QgaW5kZXggPSAwO1xuXG4gIHBhcnNlZCA9IHBhcnNlUGFydE9mUGFydHMoaW5kZXgsIHBhcnRzLCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGFydE9mUGFydHMoaW5kZXgsIHBhcnRzLCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpIHtcbiAgbGV0IHBhcnNlZDtcblxuICBjb25zdCBwYXJ0c0xlbmd0aCA9IHBhcnRzLmxlbmd0aDtcblxuICBpZiAoaW5kZXggPT09IHBhcnRzTGVuZ3RoKSB7XG4gICAgcGFyc2VkID0gKGNhbGxiYWNrICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICBjYWxsYmFjaygpIDpcbiAgICAgICAgICAgICAgICAgdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBwYXJ0ID0gcGFydHNbaW5kZXhdO1xuXG4gICAgaW5kZXgrKztcblxuICAgIGlmIChjYWxsQWhlYWQgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHBhcnRMb29rQWhlYWQgPSBwYXJ0LmlzTG9va0FoZWFkKCk7XG5cbiAgICAgIGlmIChwYXJ0TG9va0FoZWFkKSB7XG4gICAgICAgIGxldCBwYXJ0Tm9kZXM7XG5cbiAgICAgICAgcGFyc2VkID0gcGFydC5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCAoKSA9PiB7XG4gICAgICAgICAgcGFydE5vZGVzID0gW107XG5cbiAgICAgICAgICBjb25zdCBub2RlcyA9IHBhcnROb2RlcywgIC8vL1xuICAgICAgICAgICAgICAgIHBhcnNlZCA9IHBhcnNlUGFydE9mUGFydHMoaW5kZXgsIHBhcnRzLCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpO1xuXG4gICAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICAgIHB1c2gobm9kZXMsIHBhcnROb2Rlcyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKTtcblxuICAgICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgICAgcGFyc2VkID0gcGFyc2VQYXJ0T2ZQYXJ0cyhpbmRleCwgcGFydHMsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VkID0gcGFydC5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCAoKSA9PiB7XG4gICAgICAgIGxldCBwYXJzZWQ7XG5cbiAgICAgICAgcGFyc2VkID0gcGFyc2VQYXJ0T2ZQYXJ0cyhpbmRleCwgcGFydHMsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCk7XG5cbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJzZWQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNoYXJhY3RlcnMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IHBhcnNlUGFydHMgfSBmcm9tIFwiLi91dGlsaXRpZXMvcGFyc2VcIjtcbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5jb25zdCB7IFNQQUNFX0NIQVJBQ1RFUiB9ID0gY2hhcmFjdGVycztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHBhcnRzLCBwcmVjZWRlbmNlKSB7XG4gICAgdGhpcy5wYXJ0cyA9IHBhcnRzO1xuICAgIHRoaXMucHJlY2VkZW5jZSA9IHByZWNlZGVuY2U7XG4gIH1cblxuICBnZXRQYXJ0cygpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJ0cztcbiAgfVxuXG4gIGdldFByZWNlZGVuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJlY2VkZW5jZTtcbiAgfVxuXG4gIHBhcnNlKGNoaWxkTm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IG5vZGVzID0gY2hpbGROb2RlcywgLy8vXG4gICAgICAgICAgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKTtcblxuICAgIHBhcnNlZCA9IHBhcnNlUGFydHModGhpcy5wYXJ0cywgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKTtcblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGxldCBzdHJpbmc7XG5cbiAgICBjb25zdCBwYXJ0c1N0cmluZyA9IHRoaXMucGFydHMucmVkdWNlKChwYXJ0c1N0cmluZywgcGFydCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFydFN0cmluZyA9IHBhcnQuYXNTdHJpbmcoKTtcblxuICAgICAgICAgICAgaWYgKHBhcnRzU3RyaW5nID09PSBFTVBUWV9TVFJJTkcpIHtcbiAgICAgICAgICAgICAgcGFydHNTdHJpbmcgPSBwYXJ0U3RyaW5nOyAvLy9cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBhcnRzU3RyaW5nID0gYCR7cGFydHNTdHJpbmd9ICR7cGFydFN0cmluZ31gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcGFydHNTdHJpbmc7XG4gICAgICAgICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgIHN0cmluZyA9IHBhcnRzU3RyaW5nOyAvLy9cblxuICAgIGlmICh0aGlzLnByZWNlZGVuY2UgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHByZWNlZGVuY2UgPSAodGhpcy5wcmVjZWRlbmNlID09PSBJbmZpbml0eSkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BBQ0VfQ0hBUkFDVEVSIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVjZWRlbmNlO1xuXG4gICAgICBzdHJpbmcgPSBgJHtzdHJpbmd9ICgke3ByZWNlZGVuY2V9KWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUGFydHMoQ2xhc3MsIHBhcnRzKSB7XG4gICAgaWYgKHBhcnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcnRzID0gQ2xhc3M7ICAvLy9cblxuICAgICAgQ2xhc3MgPSBEZWZpbml0aW9uOyAvLy9cbiAgICB9XG5cbiAgICBjb25zdCBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICBkZWZpbml0aW9uID0gbmV3IENsYXNzKHBhcnRzLCBwcmVjZWRlbmNlKTtcblxuICAgIHJldHVybiBkZWZpbml0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21QYXJ0c0FuZFByZWNlZGVuY2UoQ2xhc3MsIHBhcnRzLCBwcmVjZWRlbmNlKSB7XG4gICAgaWYgKHByZWNlZGVuY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcHJlY2VkZW5jZSA9IHBhcnRzOyAvLy9cblxuICAgICAgcGFydHMgPSBDbGFzczsgIC8vL1xuXG4gICAgICBDbGFzcyA9IERlZmluaXRpb247IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IGRlZmluaXRpb24gPSBuZXcgQ2xhc3MocGFydHMsIHByZWNlZGVuY2UpO1xuXG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxQYXJ0IHtcbiAgaXNMb29rQWhlYWQoKSB7XG4gICAgY29uc3QgbG9va0FoZWFkID0gZmFsc2U7XG5cbiAgICByZXR1cm4gbG9va0FoZWFkO1xuICB9XG5cbiAgaXNOb25UZXJtaW5hbFBhcnQoKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxQYXJ0ID0gZmFsc2U7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxQYXJ0O1xuICB9XG5cbiAgaXNUZXJtaW5hbFBhcnQoKSB7XG4gICAgY29uc3QgdGVybWluYWxQYXJ0ID0gdHJ1ZTtcbiAgICBcbiAgICByZXR1cm4gdGVybWluYWxQYXJ0O1xuICB9XG5cbiAgaXNOb1doaXRlc3BhY2VQYXJ0KCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZVBhcnQgPSBmYWxzZTtcblxuICAgIHJldHVybiBub1doaXRlc3BhY2VQYXJ0O1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5pbXBvcnQgeyB0b2tlbkxpbmVJbmRleEZyb21Ub2tlbkFuZFRva2VucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvdG9rZW5zXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsTm9kZVBhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21UZXJtaW5hbE5vZGVBbmRUb2tlbnModGVybWluYWxOb2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gdGVybWluYWxOb2RlLmdldFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgICBjb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICB0eXBlID0gc2lnbmlmaWNhbnRUb2tlbi5nZXRUeXBlKCksXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlbkxpbmVJbmRleCA9IHRva2VuTGluZUluZGV4RnJvbVRva2VuQW5kVG9rZW5zKHNpZ25pZmljYW50VG9rZW4sIHRva2VucyksXG4gICAgICAgICAgc3RyaW5nID0gYFwiJHtjb250ZW50fVwiWyR7dHlwZX1dIFske3NpZ25pZmljYW50VG9rZW5MaW5lSW5kZXh9XWAsXG4gICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoID0gc3RyaW5nTGVuZ3RoLCAvLy9cbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21XaWR0aCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZVdpZHRoKSxcbiAgICAgICAgICB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uID0gdmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZ2V0VmVydGljYWxCcmFuY2hQb3NpdGlvbigpLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZSA9IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlLmZyb21TdHJpbmdBbmRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKFRlcm1pbmFsTm9kZVBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZS5hcHBlbmRUb1RvcCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSk7XG5cbiAgICByZXR1cm4gdGVybWluYWxOb2RlUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbE5vZGVQYXJzZVRyZWUgZnJvbSBcIi4uL3BhcnNlVHJlZS90ZXJtaW5hbE5vZGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxOb2RlIHtcbiAgY29uc3RydWN0b3Ioc2lnbmlmaWNhbnRUb2tlbikge1xuICAgIHRoaXMuc2lnbmlmaWNhbnRUb2tlbiA9IHNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBnZXRTaWduaWZpY2FudFRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLnNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBnZXRGaXJzdFNpZ25pZmljYW50VG9rZW4oKSB7XG4gICAgY29uc3QgZmlyc3RTaWduaWZpY2FudFRva2VuID0gdGhpcy5zaWduaWZpY2FudFRva2VuOyAgLy8vXG5cbiAgICByZXR1cm4gZmlyc3RTaWduaWZpY2FudFRva2VuO1xuICB9XG5cbiAgZ2V0TGFzdFNpZ25pZmljYW50VG9rZW4oKSB7XG4gICAgY29uc3QgbGFzdFNpZ25pZmljYW50VG9rZW4gPSB0aGlzLnNpZ25pZmljYW50VG9rZW47ICAvLy9cblxuICAgIHJldHVybiBsYXN0U2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIGlzTm9XaGl0ZXNwYWNlTm9kZSgpIHtcbiAgICBjb25zdCBub1doaXRlc3BhY2VOb2RlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlTm9kZTtcbiAgfVxuXG4gIGlzRW5kT2ZMaW5lTm9kZSgpIHtcbiAgICBjb25zdCBlbmRPZkxpbmVOb2RlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gZW5kT2ZMaW5lTm9kZTtcbiAgfVxuXG4gIGlzRXBzaWxvbk5vZGUoKSB7XG4gICAgY29uc3QgZXBzaWxvbk5vZGUgPSBmYWxzZTtcblxuICAgIHJldHVybiBlcHNpbG9uTm9kZTtcbiAgfVxuXG4gIGlzVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IHRydWU7XG4gICAgXG4gICAgcmV0dXJuIHRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGlzTm9uVGVybWluYWxOb2RlKCkge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsTm9kZTtcbiAgfVxuXG4gIGdldFR5cGUoKSB7IHJldHVybiB0aGlzLnNpZ25pZmljYW50VG9rZW4uZ2V0VHlwZSgpOyB9XG5cbiAgZ2V0Q29udGVudCgpIHsgcmV0dXJuIHRoaXMuc2lnbmlmaWNhbnRUb2tlbi5nZXRDb250ZW50KCk7IH1cblxuICBnZXRQcmVjZWRlbmNlKCkgIHtcbiAgICBjb25zdCBwcmVjZWRlbmNlID0gbnVsbDtcblxuICAgIHJldHVybiBwcmVjZWRlbmNlO1xuICB9XG5cbiAgaXNMb3dlclByZWNlZGVuY2UocGFyZW50UnVsZU5hbWUsIHBhcmVudFByZWNlZGVuY2UpIHtcbiAgICBjb25zdCBsb3dlclByZWNlZGVuY2UgPSBmYWxzZTtcblxuICAgIHJldHVybiBsb3dlclByZWNlZGVuY2U7XG4gIH1cblxuICBpc0luY2x1ZGVkSW4obm9kZSkge1xuICAgIGxldCBpbmNsdWRlZEluID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcyA9PT0gbm9kZSkge1xuICAgICAgaW5jbHVkZWRJbiA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5vZGVOb25UZXJtaW5hbE5vZGUgPSBub2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgICAgIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG5vZGUsIC8vL1xuICAgICAgICAgICAgICBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKTtcblxuICAgICAgICBpbmNsdWRlZEluID0gY2hpbGROb2Rlcy5zb21lKChjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBpbmNsdWRlZEluQ2hpbGROb2RlID0gdGhpcy5pc0luY2x1ZGVkSW4oY2hpbGROb2RlKTtcblxuICAgICAgICAgIGlmIChpbmNsdWRlZEluQ2hpbGROb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbmNsdWRlZEluO1xuICB9XG5cbiAgbWF0Y2gobm9kZSwgZGVwdGggPSBJbmZpbml0eSwgZXhhY3RseSA9IGZhbHNlKSB7XG4gICAgbGV0IG1hdGNoZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IG5vZGVUZXJtaW5hbE5vZGUgPSBub2RlLmlzVGVybWluYWxOb2RlKCk7XG5cbiAgICBpZiAobm9kZVRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3QgdGVybWluYWxOb2RlID0gbm9kZSwgIC8vL1xuICAgICAgICAgICAgc2lnbmlmaWNhbnRUb2tlbiA9IHRlcm1pbmFsTm9kZS5nZXRTaWduaWZpY2FudFRva2VuKCk7XG5cbiAgICAgIG1hdGNoZXMgPSBleGFjdGx5ID9cbiAgICAgICAgICAgICAgICAgICh0aGlzLnNpZ25pZmljYW50VG9rZW4gPT09IHNpZ25pZmljYW50VG9rZW4pIDpcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2lnbmlmaWNhbnRUb2tlbi5tYXRjaChzaWduaWZpY2FudFRva2VuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxuXG4gIHNldFNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbikge1xuICAgIHRoaXMuc2lnbmlmaWNhbnRUb2tlbiA9IHNpZ25pZmljYW50VG9rZW47XG4gIH1cblxuICBhc1BhcnNlVHJlZSh0b2tlbnMpIHtcbiAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSB0aGlzLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxOb2RlUGFyc2VUcmVlID0gVGVybWluYWxOb2RlUGFyc2VUcmVlLmZyb21UZXJtaW5hbE5vZGVBbmRUb2tlbnModGVybWluYWxOb2RlLCB0b2tlbnMpLFxuICAgICAgICAgIHBhcnNlVHJlZSA9IHRlcm1pbmFsTm9kZVBhcnNlVHJlZTsgIC8vL1xuXG4gICAgcmV0dXJuIHBhcnNlVHJlZTtcbiAgfVxuXG4gIGNsb25lKCkge1xuICAgIGNvbnN0IENsYXNzID0gdGhpcy5jb25zdHJ1Y3RvcixcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuID0gdGhpcy5zaWduaWZpY2FudFRva2VuLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IG5ldyBDbGFzcyhzaWduaWZpY2FudFRva2VuKTtcblxuICAgIHJldHVybiB0ZXJtaW5hbE5vZGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoQ2xhc3MpIHtcbiAgICBpZiAoQ2xhc3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgQ2xhc3MgPSBUZXJtaW5hbE5vZGU7IC8vL1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW4gPSBudWxsLFxuICAgICAgICAgIHRlcm1pbmFsTm9kZSA9IG5ldyBDbGFzcyhzaWduaWZpY2FudFRva2VuKTtcblxuICAgIHJldHVybiB0ZXJtaW5hbE5vZGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVNpZ25pZmljYW50VG9rZW4oQ2xhc3MsIHNpZ25pZmljYW50VG9rZW4pIHtcbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzaWduaWZpY2FudFRva2VuID0gQ2xhc3M7IC8vL1xuXG4gICAgICBDbGFzcyA9IFRlcm1pbmFsTm9kZTsgLy8vXG4gICAgfVxuXG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gbmV3IENsYXNzKHNpZ25pZmljYW50VG9rZW4pO1xuICAgIFxuICAgIHJldHVybiB0ZXJtaW5hbE5vZGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IFRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS90ZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3RvcihzaWduaWZpY2FudFRva2VuVHlwZSkge1xuICAgIHN1cGVyKCk7XG4gICAgXG4gICAgdGhpcy5zaWduaWZpY2FudFRva2VuVHlwZSA9IHNpZ25pZmljYW50VG9rZW5UeXBlO1xuICB9XG5cbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGxldCB0ZXJtaW5hbE5vZGUgPSBudWxsO1xuICAgIFxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCksXG4gICAgICAgICAgbmV4dFNpZ25pZmljYW50VG9rZW4gPSBzdGF0ZS5nZXROZXh0U2lnbmlmaWNhbnRUb2tlbigpLFxuXHRcdFx0XHRcdHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG5cbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlblR5cGUgPSBzaWduaWZpY2FudFRva2VuLmdldFR5cGUoKTtcblxuICAgICAgaWYgKHNpZ25pZmljYW50VG9rZW5UeXBlID09PSB0aGlzLnNpZ25pZmljYW50VG9rZW5UeXBlKSB7XG4gICAgICAgIHRlcm1pbmFsTm9kZSA9IFRlcm1pbmFsTm9kZS5mcm9tU2lnbmlmaWNhbnRUb2tlbihzaWduaWZpY2FudFRva2VuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZWQgPSAodGVybWluYWxOb2RlICE9PSBudWxsKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2godGVybWluYWxOb2RlKTtcblxuICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICBpZiAoY2FsbEFoZWFkICE9PSBudWxsKSB7XG4gICAgICAgICAgcGFyc2VkID0gY2FsbEFoZWFkKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBgWyR7dGhpcy5zaWduaWZpY2FudFRva2VuVHlwZX1dYDtcbiAgICBcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgc3RhdGljIGZyb21TaWduaWZpY2FudFRva2VuVHlwZShzaWduaWZpY2FudFRva2VuVHlwZSkge1xuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW5UeXBlUGFydCA9IG5ldyBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQoc2lnbmlmaWNhbnRUb2tlblR5cGUpO1xuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW5UeXBlUGFydDtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyB0eXBlcyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuY29uc3QgeyBuYW1lVHlwZSB9ID0gdHlwZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5hbWVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuVHlwZSA9IG5hbWVUeXBlLCAgLy8vXG4gICAgICAgICAgbmFtZVNpZ25pZmljYW50VG9rZW5UeXBlUGFydCA9IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydC5mcm9tU2lnbmlmaWNhbnRUb2tlblR5cGUoc2lnbmlmaWNhbnRUb2tlblR5cGUpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgbmFtZVNpZ25pZmljYW50VG9rZW5UeXBlUGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJlY2VkZW5jZSA9IG51bGwsXG4gICAgICAgICAgbmFtZURlZmluaXRpb24gPSBuZXcgTmFtZURlZmluaXRpb24ocGFydHMsIHByZWNlZGVuY2UpO1xuXG4gICAgcmV0dXJuIG5hbWVEZWZpbml0aW9uO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBuYW1lUnVsZU5hbWUgPSBcIm5hbWVcIjtcbmV4cG9ydCBjb25zdCBwYXJ0UnVsZU5hbWUgPSBcInBhcnRcIjtcbmV4cG9ydCBjb25zdCBydWxlUnVsZU5hbWUgPSBcInJ1bGVcIjtcbmV4cG9ydCBjb25zdCBlcnJvclJ1bGVOYW1lID0gXCJlcnJvclwiO1xuZXhwb3J0IGNvbnN0IGVwc2lsb25SdWxlTmFtZSA9IFwiZXBzaWxvblwiO1xuZXhwb3J0IGNvbnN0IHJ1bGVOYW1lUnVsZU5hbWUgPSBcInJ1bGVOYW1lXCI7XG5leHBvcnQgY29uc3QgZG9jdW1lbnRSdWxlTmFtZSA9IFwiZG9jdW1lbnRcIjtcbmV4cG9ydCBjb25zdCB3aWxkY2FyZFJ1bGVOYW1lID0gXCJ3aWxkY2FyZFwiO1xuZXhwb3J0IGNvbnN0IGVuZE9mTGluZVJ1bGVOYW1lID0gXCJlbmRPZkxpbmVcIjtcbmV4cG9ydCBjb25zdCBkZWZpbml0aW9uUnVsZU5hbWUgPSBcImRlZmluaXRpb25cIjtcbmV4cG9ydCBjb25zdCBwcmVjZWRlbmNlUnVsZU5hbWUgPSBcInByZWNlZGVuY2VcIjtcbmV4cG9ydCBjb25zdCBxdWFudGlmaWVyUnVsZU5hbWUgPSBcInF1YW50aWZpZXJcIjtcbmV4cG9ydCBjb25zdCBwYXJ0Q2hvaWNlUnVsZU5hbWUgPSBcInBhcnRDaG9pY2VcIjtcbmV4cG9ydCBjb25zdCBkZWZpbml0aW9uc1J1bGVOYW1lID0gXCJkZWZpbml0aW9uc1wiO1xuZXhwb3J0IGNvbnN0IHRlcm1pbmFsUGFydFJ1bGVOYW1lID0gXCJ0ZXJtaW5hbFBhcnRcIjtcbmV4cG9ydCBjb25zdCBjaG9pY2VPZlBhcnRzUnVsZU5hbWUgPSBcImNob2ljZU9mUGFydHNcIjtcbmV4cG9ydCBjb25zdCB0ZXJtaW5hbFN5bWJvbFJ1bGVOYW1lID0gXCJ0ZXJtaW5hbFN5bWJvbFwiO1xuZXhwb3J0IGNvbnN0IG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lID0gXCJub25UZXJtaW5hbFBhcnRcIjtcbmV4cG9ydCBjb25zdCBzZXF1ZW5jZU9mUGFydHNSdWxlTmFtZSA9IFwic2VxdWVuY2VPZlBhcnRzXCI7XG5leHBvcnQgY29uc3Qgbm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lID0gXCJub1doaXRlc3BhY2VQYXJ0XCI7XG5leHBvcnQgY29uc3QgbG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSA9IFwibG9va0FoZWFkTW9kaWZpZXJcIjtcbmV4cG9ydCBjb25zdCBhbWJpZ3VvdXNNb2RpZmllclJ1bGVOYW1lID0gXCJBbWJpZ3VvdXNNb2RpZmllclwiO1xuZXhwb3J0IGNvbnN0IHJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWUgPSBcInJlZ3VsYXJFeHByZXNzaW9uXCI7XG5leHBvcnQgY29uc3Qgb3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUgPSBcIm9wdGlvbmFsUXVhbnRpZmllclwiO1xuZXhwb3J0IGNvbnN0IG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSA9IFwib25lT3JNb3JlUXVhbnRpZmllclwiO1xuZXhwb3J0IGNvbnN0IHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgPSBcInplcm9Pck1vcmVRdWFudGlmaWVyXCI7XG5leHBvcnQgY29uc3Qgc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSA9IFwic2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IE5hbWVCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9uYW1lXCI7XG5pbXBvcnQgTmFtZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vbmFtZVwiO1xuXG5pbXBvcnQgeyBuYW1lUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5hbWVSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBuYW1lRGVmaW5pdGlvbiA9IE5hbWVEZWZpbml0aW9uLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgbmFtZSA9IG5hbWVSdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgbmFtZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IE5hbWVCTkZOb2RlLCAgLy8vXG4gICAgICAgICAgbmFtZVJ1bGUgPSBuZXcgTmFtZVJ1bGUobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiBuYW1lUnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCBsb29rQWhlYWQpIHtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMubG9va0FoZWFkID0gbG9va0FoZWFkO1xuICB9XG4gIFxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICBpc0xvb2tBaGVhZCgpIHtcbiAgICByZXR1cm4gdGhpcy5sb29rQWhlYWQ7XG4gIH1cblxuICBpc05vblRlcm1pbmFsUGFydCgpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbFBhcnQgPSB0cnVlO1xuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsUGFydDtcbiAgfVxuXG4gIGlzVGVybWluYWxQYXJ0KCkge1xuICAgIGNvbnN0IHRlcm1pbmFsUGFydCA9IGZhbHNlO1xuICAgIFxuICAgIHJldHVybiB0ZXJtaW5hbFBhcnQ7XG4gIH1cblxuICBpc1J1bGVOYW1lUGFydCgpIHtcbiAgICBjb25zdCBydWxlTmFtZVBhcnQgPSBmYWxzZTtcblxuICAgIHJldHVybiBydWxlTmFtZVBhcnQ7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IFJ1bGVOYW1lUGFydFR5cGUgPSBcInJ1bGVOYW1lUGFydFwiO1xuZXhwb3J0IGNvbnN0IE9wdGlvbmFsUGFydFBhcnRUeXBlID0gXCJvcHRpb25hbFBhcnRcIjtcbmV4cG9ydCBjb25zdCBDaG9pY2VPZlBhcnRzUGFydFR5cGUgPSBcImNob2ljZU9mUGFydHNcIjtcbmV4cG9ydCBjb25zdCBPbmVPck1vcmVQYXJ0c1BhcnRUeXBlID0gXCJvbmVPck1vcmVQYXJ0c1wiO1xuZXhwb3J0IGNvbnN0IFplcm9Pck1vcmVQYXJ0c1BhcnRUeXBlID0gXCJ6ZXJvT3JNb3JlUGFydHNcIjtcbmV4cG9ydCBjb25zdCBTZXF1ZW5jZU9mUGFydHNQYXJ0VHlwZSA9IFwic2VxdWVuY2VPZlBhcnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgUnVsZU5hbWVQYXJ0VHlwZSxcbiAgT3B0aW9uYWxQYXJ0UGFydFR5cGUsXG4gIENob2ljZU9mUGFydHNQYXJ0VHlwZSxcbiAgT25lT3JNb3JlUGFydHNQYXJ0VHlwZSxcbiAgWmVyb09yTW9yZVBhcnRzUGFydFR5cGUsXG4gIFNlcXVlbmNlT2ZQYXJ0c1BhcnRUeXBlXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBPcHRpb25hbFBhcnRQYXJ0VHlwZSB9IGZyb20gXCIuLi8uLi9wYXJ0VHlwZXNcIjtcblxuXG5jb25zdCB7IHF1ZXN0aW9uTWFyayB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9wdGlvbmFsUGFydFBhcnQgZXh0ZW5kcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCBsb29rQWhlYWQsIHBhcnQpIHtcbiAgICBzdXBlcih0eXBlLCBsb29rQWhlYWQpO1xuXG4gICAgdGhpcy5wYXJ0ID0gcGFydDtcbiAgfVxuXG4gIGdldFBhcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFydDtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCkge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLFxuICAgICAgICAgIG5vZGVzTGVuZ3RoID0gbm9kZXMubGVuZ3RoO1xuXG4gICAgcGFyc2VkID0gcGFyc2VPcHRpb25hbFBhcnQodGhpcy5wYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpO1xuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gbm9kZXNMZW5ndGg7ICAvLy9cblxuICAgICAgbm9kZXMuc3BsaWNlKHN0YXJ0KTtcblxuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBwYXJ0U3RyaW5nID0gdGhpcy5wYXJ0LmFzU3RyaW5nKCksXG4gICAgICAgICAgc3RyaW5nID0gYCR7cGFydFN0cmluZ30ke3F1ZXN0aW9uTWFya31gO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUGFydChwYXJ0KSB7XG4gICAgY29uc3QgdHlwZSA9IE9wdGlvbmFsUGFydFBhcnRUeXBlLFxuICAgICAgICAgIGxvb2tBaGVhZCA9IGZhbHNlLFxuICAgICAgICAgIG9wdGlvbmFsUGFydFBhcnQgPSBuZXcgT3B0aW9uYWxQYXJ0UGFydCh0eXBlLCBsb29rQWhlYWQsIHBhcnQpO1xuXG4gICAgcmV0dXJuIG9wdGlvbmFsUGFydFBhcnQ7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlT3B0aW9uYWxQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCkge1xuICBsZXQgcGFyc2VkO1xuXG4gIGlmIChjYWxsQWhlYWQgPT09IG51bGwpIHtcbiAgICBwYXJzZWQgPSBwYXJ0LnBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCk7XG5cblxuXG5cblxuICAgIHBhcnNlZCA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgcGFyc2VkID0gY2FsbEFoZWFkKCk7XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgcGFyc2VkID0gcGFydC5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpO1xuXG5cblxuXG5cblxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJzZWQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IFplcm9Pck1vcmVQYXJ0c1BhcnRUeXBlIH0gZnJvbSBcIi4uLy4uL3BhcnRUeXBlc1wiO1xuXG5cbmNvbnN0IHsgYXN0ZXJpc2sgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaZXJvT3JNb3JlUGFydHNQYXJ0IGV4dGVuZHMgTm9uVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IodHlwZSwgbG9va0FoZWFkLCBwYXJ0KSB7XG4gICAgc3VwZXIodHlwZSwgbG9va0FoZWFkKTtcblxuICAgIHRoaXMucGFydCA9IHBhcnQ7XG4gIH1cblxuICBnZXRQYXJ0KCkge1xuICAgIHJldHVybiB0aGlzLnBhcnQ7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSxcbiAgICAgICAgICBub2Rlc0xlbmd0aCA9IG5vZGVzLmxlbmd0aDtcblxuICAgIHBhcnNlZCA9IHBhcnNlWmVyb09yTW9yZVBhcnRzUGFydCh0aGlzLnBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCk7XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBub2Rlc0xlbmd0aDsgIC8vL1xuXG4gICAgICBub2Rlcy5zcGxpY2Uoc3RhcnQpO1xuXG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHBhcnRTdHJpbmcgPSB0aGlzLnBhcnQuYXNTdHJpbmcoKSxcbiAgICAgICAgICBzdHJpbmcgPSBgJHtwYXJ0U3RyaW5nfSR7YXN0ZXJpc2t9YDtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzdGF0aWMgZnJvbVBhcnQocGFydCkge1xuICAgIGNvbnN0IHR5cGUgPSBaZXJvT3JNb3JlUGFydHNQYXJ0VHlwZSxcbiAgICAgICAgICBsb29rQWhlYWQgPSBmYWxzZSxcbiAgICAgICAgICB6ZXJvT3JNb3JlUGFydHNQYXJ0ID0gbmV3IFplcm9Pck1vcmVQYXJ0c1BhcnQodHlwZSwgbG9va0FoZWFkLCBwYXJ0KTtcblxuICAgIHJldHVybiB6ZXJvT3JNb3JlUGFydHNQYXJ0O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVplcm9Pck1vcmVQYXJ0c1BhcnQocGFydCwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKSB7XG4gIGxldCBwYXJzZWQ7XG5cbiAgaWYgKGNhbGxBaGVhZCA9PT0gbnVsbCkge1xuICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIHBhcnNlWmVyb09yTW9yZVBhcnRzUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpO1xuICAgIH1cblxuICAgIHBhcnNlZCA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgcGFyc2VkID0gY2FsbEFoZWFkKCk7XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgcGFyc2VkID0gcGFydC5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCAoKSA9PiB7XG4gICAgICAgIGxldCBwYXJzZWQ7XG5cbiAgICAgICAgcGFyc2VkID0gcGFyc2VaZXJvT3JNb3JlUGFydHNQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCk7XG5cbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJzZWQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IE9uZU9yTW9yZVBhcnRzUGFydFR5cGUgfSBmcm9tIFwiLi4vLi4vcGFydFR5cGVzXCI7XG5pbXBvcnQgeyBwYXJzZVplcm9Pck1vcmVQYXJ0c1BhcnQgfSBmcm9tIFwiLi96ZXJvT3JNb3JlUGFydHNcIjtcblxuY29uc3QgeyBwbHVzIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT25lT3JNb3JlUGFydHNQYXJ0IGV4dGVuZHMgTm9uVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IodHlwZSwgbG9va0FoZWFkLCBwYXJ0KSB7XG4gICAgc3VwZXIodHlwZSwgbG9va0FoZWFkKTtcblxuICAgIHRoaXMucGFydCA9IHBhcnQ7XG4gIH1cblxuICBnZXRQYXJ0KCkge1xuICAgIHJldHVybiB0aGlzLnBhcnQ7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSxcbiAgICAgICAgICBub2Rlc0xlbmd0aCA9IG5vZGVzLmxlbmd0aDtcblxuICAgIHBhcnNlZCA9IHBhcnNlT25lT3JNb3JlUGFydHNQYXJ0KHRoaXMucGFydCwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKTtcblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBjb25zdCBzdGFydCA9IG5vZGVzTGVuZ3RoOyAgLy8vXG5cbiAgICAgIG5vZGVzLnNwbGljZShzdGFydCk7XG5cbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3QgcGFydFN0cmluZyA9IHRoaXMucGFydC5hc1N0cmluZygpLFxuICAgICAgICAgIHN0cmluZyA9IGAke3BhcnRTdHJpbmd9JHtwbHVzfWA7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgc3RhdGljIGZyb21QYXJ0KHBhcnQpIHtcbiAgICBjb25zdCB0eXBlID0gT25lT3JNb3JlUGFydHNQYXJ0VHlwZSxcbiAgICAgICAgICBsb29rQWhlYWQgPSBmYWxzZSxcbiAgICAgICAgICBvbmVPck1vcmVQYXJ0c1BhcnQgPSBuZXcgT25lT3JNb3JlUGFydHNQYXJ0KHR5cGUsIGxvb2tBaGVhZCwgcGFydCk7XG5cbiAgICByZXR1cm4gb25lT3JNb3JlUGFydHNQYXJ0O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU9uZU9yTW9yZVBhcnRzUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpIHtcbiAgbGV0IHBhcnNlZDtcblxuICBpZiAoY2FsbEFoZWFkID09PSBudWxsKSB7XG4gICAgcGFyc2VkID0gcGFydC5wYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgcGFyc2VaZXJvT3JNb3JlUGFydHNQYXJ0KHBhcnQsIG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCk7XG4gICAgfVxuXG5cbiAgfSBlbHNlIHtcblxuXG5cbiAgICAgIHBhcnNlZCA9IHBhcnQucGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgKCkgPT4ge1xuICAgICAgICBsZXQgcGFyc2VkO1xuXG4gICAgICAgIHBhcnNlZCA9IHBhcnNlWmVyb09yTW9yZVBhcnRzUGFydChwYXJ0LCBub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpO1xuXG4gICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICB9KTtcblxuICB9XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IGxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUsIHF1YW50aWZpZXJSdWxlTmFtZSwgcnVsZU5hbWVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vZGVDaG9pY2VOb2RlKG5vZGUpIHtcbiAgbGV0IG5vZGVOb0Nob2ljZU5vZGUgPSBmYWxzZTtcblxuICBjb25zdCBub2RlVGVybWluYWxOb2RlID0gbm9kZS5pc1Rlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3QgdGVybWluYWxOb2RlID0gbm9kZSwgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpO1xuXG4gICAgbm9kZU5vQ2hvaWNlTm9kZSA9ICh0ZXJtaW5hbE5vZGVDb250ZW50ID09PSBcInxcIik7XG4gIH1cblxuICByZXR1cm4gbm9kZU5vQ2hvaWNlTm9kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTm9kZVJ1bGVOYW1lTm9kZShub2RlKSB7XG4gIGxldCBub2RlUnVsZU5hbWVOb2RlID0gZmFsc2U7XG5cbiAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKSxcbiAgICAgICAgbm9kZU5vblRlcm1pbmFsTm9kZSA9ICFub2RlVGVybWluYWxOb2RlO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTtcblxuICAgIG5vZGVSdWxlTmFtZU5vZGUgPSAobm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPT09IHJ1bGVOYW1lUnVsZU5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVSdWxlTmFtZU5vZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vZGVRdWFudGlmaWVyTm9kZShub2RlKSB7XG4gIGxldCBub2RlUXVhbnRpZmllck5vZGUgPSBmYWxzZTtcblxuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICBydWxlTmFtZVF1YW50aWZpZXJSdWxlTmFtZSA9IChydWxlTmFtZSA9PT0gcXVhbnRpZmllclJ1bGVOYW1lKTtcblxuICAgIG5vZGVRdWFudGlmaWVyTm9kZSA9IHJ1bGVOYW1lUXVhbnRpZmllclJ1bGVOYW1lOyAgLy8vXG4gIH1cblxuICByZXR1cm4gbm9kZVF1YW50aWZpZXJOb2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOb2RlTG9va0FoZWFkTW9kaWZpZXJOb2RlKG5vZGUpIHtcbiAgbGV0IG5vZGVMb29rQWhlYWRNb2RpZmllck5vZGUgPSBmYWxzZTtcblxuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICBydWxlTmFtZUxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUgPSAocnVsZU5hbWUgPT09IGxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWUpO1xuXG4gICAgbm9kZUxvb2tBaGVhZE1vZGlmaWVyTm9kZSA9IHJ1bGVOYW1lTG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZTsgIC8vL1xuICB9XG5cbiAgcmV0dXJuIG5vZGVMb29rQWhlYWRNb2RpZmllck5vZGU7XG5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVOYW1lRnJvbVF1YW50aWZpZXJOb2RlKHF1YW50aWZpZXJOb2RlKSB7XG4gIGxldCBub25UZXJtaW5hbE5vZGU7XG5cbiAgbm9uVGVybWluYWxOb2RlID0gcXVhbnRpZmllck5vZGU7IC8vL1xuXG4gIGNvbnN0IGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICBmaXJzdENoaWxkTm9kZSA9IGZpcnN0KGNoaWxkTm9kZXMpO1xuXG4gIG5vblRlcm1pbmFsTm9kZSA9IGZpcnN0Q2hpbGROb2RlOyAgLy8vXG5cbiAgY29uc3QgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTtcblxuICByZXR1cm4gcnVsZU5hbWU7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5pbXBvcnQgT3B0aW9uYWxQYXJ0UGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9vcHRpb25hbFBhcnRcIjtcbmltcG9ydCBPbmVPck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvb25lT3JNb3JlUGFydHNcIjtcbmltcG9ydCBaZXJvT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL3plcm9Pck1vcmVQYXJ0c1wiO1xuXG5pbXBvcnQgeyBpc05vZGVRdWFudGlmaWVyTm9kZSwgcnVsZU5hbWVGcm9tUXVhbnRpZmllck5vZGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2JuZlwiO1xuaW1wb3J0IHsgb3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUsIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSwgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBsYXN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFydEJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIG5vZGVzID0gY2hpbGROb2Rlcy5zbGljZSgpLFxuICAgICAgICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzKTtcblxuICAgIHJldHVybiBwYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMocnVsZU5hbWUsIGNoaWxkTm9kZXMsIGFtYmlndW91cykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMoUGFydEJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBhbWJpZ3VvdXMpOyB9XG59XG5cbmZ1bmN0aW9uIHBhcnRGcm9tTm9kZXMobm9kZXMpIHtcbiAgbGV0IHBhcnQgPSBudWxsO1xuXG4gIGNvbnN0IG5vZGVzTGVuZ3RoID0gbm9kZXMubGVuZ3RoO1xuXG4gIGlmIChub2Rlc0xlbmd0aCA9PT0gMSkge1xuICAgIGNvbnN0IG5vZGUgPSBub2Rlcy5wb3AoKSxcbiAgICAgICAgICBsb29rQWhlYWQgPSBmYWxzZTtcblxuICAgIHBhcnQgPSBub2RlLmdlbmVyYXRlUGFydChsb29rQWhlYWQpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGxhc3ROb2RlUXVhbnRpZmllck5vZGUgPSBpc0xhc3ROb2RlUXVhbnRpZmllck5vZGUobm9kZXMpO1xuXG4gICAgaWYgKGxhc3ROb2RlUXVhbnRpZmllck5vZGUpIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBub2Rlcy5wb3AoKSxcbiAgICAgICAgICAgIHF1YW50aWZpZXJOb2RlID0gbm9kZTsgIC8vL1xuXG4gICAgICBwYXJ0ID0gcGFydEZyb21Ob2Rlcyhub2Rlcyk7XG5cbiAgICAgIGNvbnN0IHJ1bGVOYW1lID0gcnVsZU5hbWVGcm9tUXVhbnRpZmllck5vZGUocXVhbnRpZmllck5vZGUpLFxuICAgICAgICAgICAgY29sbGVjdGlvbk9mUGFydHNQYXJ0ID0gY29sbGVjdGlvbk9mUGFydHNQYXJ0RnJvbVBhcnRBbmRSdWxlTmFtZShwYXJ0LCBydWxlTmFtZSk7XG5cbiAgICAgIHBhcnQgPSBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQ7IC8vL1xuICAgIH0gZWxzZSB7XG4gICAgICBub2Rlcy5zaGlmdCgpO1xuXG4gICAgICBwYXJ0ID0gcGFydEZyb21Ob2Rlcyhub2Rlcyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcnQ7XG59XG5cbmZ1bmN0aW9uIGlzTGFzdE5vZGVRdWFudGlmaWVyTm9kZShub2Rlcykge1xuICBjb25zdCBsYXN0Tm9kZSA9IGxhc3Qobm9kZXMpLFxuICAgICAgICBsYXN0Tm9kZVF1YW50aWZpZXJOb2RlID0gaXNOb2RlUXVhbnRpZmllck5vZGUobGFzdE5vZGUpO1xuXG4gIHJldHVybiBsYXN0Tm9kZVF1YW50aWZpZXJOb2RlO1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnRGcm9tUGFydEFuZFJ1bGVOYW1lKHBhcnQsIHJ1bGVOYW1lKSB7XG4gIGxldCBjb2xsZWN0aW9uT2ZQYXJ0c1BhcnQ7XG5cbiAgc3dpdGNoIChydWxlTmFtZSkge1xuICAgIGNhc2Ugb3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUgOlxuICAgICAgY29uc3Qgb3B0aW9uYWxQYXJ0UGFydCA9IE9wdGlvbmFsUGFydFBhcnQuZnJvbVBhcnQocGFydCk7XG5cbiAgICAgIGNvbGxlY3Rpb25PZlBhcnRzUGFydCA9IG9wdGlvbmFsUGFydFBhcnQ7IC8vL1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSA6XG4gICAgICBjb25zdCBvbmVPck1vcmVQYXJ0c1BhcnQgPSBPbmVPck1vcmVQYXJ0c1BhcnQuZnJvbVBhcnQocGFydCk7XG5cbiAgICAgIGNvbGxlY3Rpb25PZlBhcnRzUGFydCA9IG9uZU9yTW9yZVBhcnRzUGFydDsgLy8vXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSA6XG4gICAgICBjb25zdCB6ZXJvT3JNb3JlUGFydHNQYXJ0ID0gWmVyb09yTW9yZVBhcnRzUGFydC5mcm9tUGFydChwYXJ0KTtcblxuICAgICAgY29sbGVjdGlvbk9mUGFydHNQYXJ0ID0gemVyb09yTW9yZVBhcnRzUGFydDsgIC8vL1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gY29sbGVjdGlvbk9mUGFydHNQYXJ0O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBSdWxlTmFtZVBhcnRUeXBlIH0gZnJvbSBcIi4uLy4uL3BhcnRUeXBlc1wiO1xuXG5jb25zdCB7IGVsbGlwc2lzIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVQYXJ0IGV4dGVuZHMgTm9uVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IodHlwZSwgbG9va0FoZWFkLCBydWxlTmFtZSkge1xuICAgIHN1cGVyKHR5cGUsIGxvb2tBaGVhZCk7XG5cbiAgICB0aGlzLnJ1bGVOYW1lID0gcnVsZU5hbWU7XG4gIH1cbiAgXG4gIGdldFJ1bGVOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVOYW1lO1xuICB9XG5cbiAgaXNSdWxlTmFtZVBhcnQoKSB7XG4gICAgY29uc3QgcnVsZU5hbWVQYXJ0ID0gdHJ1ZTtcblxuICAgIHJldHVybiBydWxlTmFtZVBhcnQ7XG4gIH1cblxuICBmaW5kUnVsZShzdGF0ZSkge1xuICAgIGNvbnN0IHJ1bGVNYXAgPSBzdGF0ZS5nZXRSdWxlTWFwKCksXG4gICAgICAgICAgcnVsZSA9IHJ1bGVNYXBbdGhpcy5ydWxlTmFtZV0gfHwgbnVsbDsgIC8vL1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgY29uc3QgcnVsZSA9IHRoaXMuZmluZFJ1bGUoc3RhdGUpO1xuXG4gICAgcGFyc2VkID0gKHJ1bGUgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgIHJ1bGUucGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKSA6XG4gICAgICAgICAgICAgICAgIGZhbHNlO1xuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IGxvb2tBaGVhZCA9IHRoaXMuaXNMb29rQWhlYWQoKSxcbiAgICAgICAgICBsb29rQWhlYWRTdHJpbmcgPSBsb29rQWhlYWQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxsaXBzaXMgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkcsXG4gICAgICAgICAgc3RyaW5nID0gYCR7dGhpcy5ydWxlTmFtZX0ke2xvb2tBaGVhZFN0cmluZ31gO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWUocnVsZU5hbWUpIHtcbiAgICBjb25zdCB0eXBlID0gUnVsZU5hbWVQYXJ0VHlwZSxcbiAgICAgICAgICBsb29rQWhlYWQgPSBmYWxzZSxcbiAgICAgICAgICBydWxlTmFtZVBhcnQgPSBuZXcgUnVsZU5hbWVQYXJ0KHR5cGUsIGxvb2tBaGVhZCwgcnVsZU5hbWUpO1xuXG4gICAgcmV0dXJuIHJ1bGVOYW1lUGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTG9va0FoZWFkQW5kUnVsZU5hbWUobG9va0FoZWFkLCBydWxlTmFtZSkge1xuICAgIGNvbnN0IHR5cGUgPSBSdWxlTmFtZVBhcnRUeXBlLFxuICAgICAgICAgIHJ1bGVOYW1lUGFydCA9IG5ldyBSdWxlTmFtZVBhcnQodHlwZSwgbG9va0FoZWFkLCBydWxlTmFtZSk7XG5cbiAgICByZXR1cm4gcnVsZU5hbWVQYXJ0O1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVOYW1lRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBzdGF0aWMgZnJvbVJ1bGVOYW1lKHJ1bGVOYW1lKSB7XG4gICAgY29uc3QgcnVsZU5hbWVSdWxlTmFtZVBhcnQgPSBSdWxlTmFtZVBhcnQuZnJvbVJ1bGVOYW1lKHJ1bGVOYW1lKSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHJ1bGVOYW1lUnVsZU5hbWVQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICBydWxlTmFtZURlZmluaXRpb24gPSBuZXcgUnVsZU5hbWVEZWZpbml0aW9uKHBhcnRzLCBwcmVjZWRlbmNlKTtcblxuICAgIHJldHVybiBydWxlTmFtZURlZmluaXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBaZXJvT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsL3plcm9Pck1vcmVQYXJ0c1wiO1xuXG5pbXBvcnQgeyBxdWFudGlmaWVyUnVsZU5hbWUsIHRlcm1pbmFsUGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgcXVhbnRpZmllclJ1bGVOYW1lUGFydCA9IFJ1bGVOYW1lUGFydC5mcm9tUnVsZU5hbWUocXVhbnRpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlTmFtZVBhcnQgPSBSdWxlTmFtZVBhcnQuZnJvbVJ1bGVOYW1lKHRlcm1pbmFsUGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lUGFydHNQYXJ0ID0gWmVyb09yTW9yZVBhcnRzUGFydC5mcm9tUGFydChxdWFudGlmaWVyUnVsZU5hbWVQYXJ0KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGVOYW1lUGFydCxcbiAgICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWVQYXJ0c1BhcnRcbiAgICAgICAgICBdLFxuICAgICAgICAgIHByZWNlZGVuY2UgPSBudWxsLFxuICAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uID0gbmV3IFRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uKHBhcnRzLCBwcmVjZWRlbmNlKTtcblxuICAgIHJldHVybiB0ZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IFplcm9Pck1vcmVQYXJ0c1BhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvemVyb09yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IHF1YW50aWZpZXJSdWxlTmFtZSwgbm9uVGVybWluYWxQYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBxdWFudGlmaWVyUnVsZU5hbWVQYXJ0ID0gUnVsZU5hbWVQYXJ0LmZyb21SdWxlTmFtZShxdWFudGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lUGFydCA9IFJ1bGVOYW1lUGFydC5mcm9tUnVsZU5hbWUobm9uVGVybWluYWxQYXJ0UnVsZU5hbWUpLFxuICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWVQYXJ0c1BhcnQgPSBaZXJvT3JNb3JlUGFydHNQYXJ0LmZyb21QYXJ0KHF1YW50aWZpZXJSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZVBhcnRzUGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJlY2VkZW5jZSA9IG51bGwsXG4gICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gPSBuZXcgTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24ocGFydHMsIHByZWNlZGVuY2UpO1xuICAgIFxuICAgIHJldHVybiBub25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFBhcnRCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9wYXJ0XCI7XG5pbXBvcnQgUnVsZU5hbWVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3J1bGVOYW1lXCI7XG5pbXBvcnQgVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcGFydFJ1bGUvdGVybWluYWxcIjtcbmltcG9ydCBOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9wYXJ0UnVsZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBwYXJ0UnVsZU5hbWUsIG5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFydFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IG5hbWUgPSBwYXJ0UnVsZU5hbWUsICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiA9IFRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gPSBOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbi5mcm9tTm90aGluZygpLFxuICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZURlZmluaXRpb24gPSBSdWxlTmFtZURlZmluaXRpb24uZnJvbVJ1bGVOYW1lKG5vV2hpdGVzcGFjZVBhcnRSdWxlTmFtZSksXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBub25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uLFxuICAgICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9uVGVybWluYWxOb2RlID0gUGFydEJORk5vZGUsICAvLy9cbiAgICAgICAgICBwYXJ0UnVsZSA9IG5ldyBQYXJ0UnVsZShuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIHBhcnRSdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmNvbnN0IHsgZmlyc3QsIHNlY29uZCwgdGhpcmQsIGZvdXJ0aCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVSdWxlKFJ1bGUpIHtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5nZXROYW1lKCksXG4gICAgICAgICAgYW1iaWd1b3VzID0gdGhpcy5pc0FtYmlndW91cygpLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gdGhpcy5nZW5lcmF0ZURlZmluaXRpb25zKCksXG4gICAgICAgICAgcnVsZSA9IFJ1bGUuZnJvbU5hbWVBbWJpZ3VvdXNEZWZpbml0aW9uc0FuZE5vblRlcm1pbmFsTm9kZShuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICBpc0FtYmlndW91cygpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgc2Vjb25kQ2hpbGROb2RlID0gc2Vjb25kKGNoaWxkTm9kZXMpLFxuICAgICAgICAgIHNlY29uZENoaWxkTm9kZVRlcm1pbmFsTm9kZSA9IHNlY29uZENoaWxkTm9kZS5pc1Rlcm1pbmFsTm9kZSgpLFxuICAgICAgICAgIGFtYmlndW91cyA9ICFzZWNvbmRDaGlsZE5vZGVUZXJtaW5hbE5vZGU7XG5cbiAgICByZXR1cm4gYW1iaWd1b3VzO1xuICB9XG5cbiAgZ2V0TmFtZSgpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgICBuYW1lQk5GTm9kZSA9IGZpcnN0Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgbmFtZSA9IG5hbWVCTkZOb2RlLmdldE5hbWUoKTtcbiAgICBcbiAgICByZXR1cm4gbmFtZTtcbiAgfVxuICBcbiAgZ2VuZXJhdGVEZWZpbml0aW9ucygpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgY2hpbGROb2Rlc0xlbmd0aCA9IGNoaWxkTm9kZXMubGVuZ3RoLFxuICAgICAgICAgIHRoaXJkQ2hpbGROb2RlID0gdGhpcmQoY2hpbGROb2RlcyksXG4gICAgICAgICAgZm91cnRoQ2hpbGROb2RlID0gZm91cnRoKGNoaWxkTm9kZXMpLFxuICAgICAgICAgIGRlZmluaXRpb25zQk5GTm9kZSA9IChjaGlsZE5vZGVzTGVuZ3RoID09PSA0KSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlyZENoaWxkTm9kZSA6ICAvLy9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91cnRoQ2hpbGROb2RlLCAvLy9cbiAgICAgICAgICBkZWZpbml0aW9ucyA9IGRlZmluaXRpb25zQk5GTm9kZS5nZW5lcmF0ZURlZmluaXRpb25zKCk7XG4gICAgXG4gICAgcmV0dXJuIGRlZmluaXRpb25zO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMocnVsZU5hbWUsIGNoaWxkTm9kZXMsIGFtYmlndW91cykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMoUnVsZUJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBhbWJpZ3VvdXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWxcIjtcbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvdGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxTeW1ib2xQYXJ0IGV4dGVuZHMgVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IoY29udGVudCkge1xuICAgIHN1cGVyKCk7XG4gICAgXG4gICAgdGhpcy5jb250ZW50ID0gY29udGVudDtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCkge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBsZXQgdGVybWluYWxOb2RlID0gbnVsbDtcbiAgICBcbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLFxuICAgICAgICAgIG5leHRTaWduaWZpY2FudFRva2VuID0gc3RhdGUuZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSxcblx0XHRcdFx0XHRzaWduaWZpY2FudFRva2VuID0gbmV4dFNpZ25pZmljYW50VG9rZW47IC8vL1xuXG4gICAgaWYgKHNpZ25pZmljYW50VG9rZW4gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBzaWduaWZpY2FudFRva2VuLmdldENvbnRlbnQoKTtcblxuICAgICAgaWYgKGNvbnRlbnQgPT09IHRoaXMuY29udGVudCkge1xuICAgICAgICB0ZXJtaW5hbE5vZGUgPSBUZXJtaW5hbE5vZGUuZnJvbVNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFyc2VkID0gKHRlcm1pbmFsTm9kZSAhPT0gbnVsbCk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBub2Rlcy5wdXNoKHRlcm1pbmFsTm9kZSk7XG5cbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgaWYgKGNhbGxBaGVhZCAhPT0gbnVsbCkge1xuICAgICAgICAgIHBhcnNlZCA9IGNhbGxBaGVhZCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG4gIFxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5jb250ZW50LnJlcGxhY2UoL1xcXFwvLCBcIlxcXFxcXFxcXCIpLFxuICAgICAgICAgIHN0cmluZyA9IGBcIiR7Y29udGVudH1cImA7XG4gICAgXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29udGVudChjb250ZW50KSB7XG4gICAgY29uc3QgdGVybWluYWxTeW1ib2xQYXJ0ID0gbmV3IFRlcm1pbmFsU3ltYm9sUGFydChjb250ZW50KTtcblxuICAgIHJldHVybiB0ZXJtaW5hbFN5bWJvbFBhcnQ7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgT3B0aW9uYWxQYXJ0UGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vcHRpb25hbFBhcnRcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuaW1wb3J0IHsgbmFtZVJ1bGVOYW1lLCBkZWZpbml0aW9uc1J1bGVOYW1lLCBhbWJpZ3VvdXNNb2RpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHNlcGFyYXRvciwgdGVybWluYXRvciB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBzZXBhcmF0b3JUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBzZXBhcmF0b3IsXG4gICAgICAgICAgdGVybWluYXRvclRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHRlcm1pbmF0b3IsXG4gICAgICAgICAgYW1iaWd1b3VzTW9kaWZpZXJSdWxlTmFtZVBhcnQgPSBSdWxlTmFtZVBhcnQuZnJvbVJ1bGVOYW1lKGFtYmlndW91c01vZGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIG5hbWVSdWxlTmFtZVBhcnQgPSBSdWxlTmFtZVBhcnQuZnJvbVJ1bGVOYW1lKG5hbWVSdWxlTmFtZSksXG4gICAgICAgICAgb3B0aW9uYWxBbWJpZ3VvdXNSdWxlTmFtZVBhcnRQYXJ0ID0gT3B0aW9uYWxQYXJ0UGFydC5mcm9tUGFydChhbWJpZ3VvdXNNb2RpZmllclJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgc2VwYXJhdG9yVGVybWluYWxTeW1ib2xQYXJ0ID0gVGVybWluYWxTeW1ib2xQYXJ0LmZyb21Db250ZW50KHNlcGFyYXRvclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgZGVmaW5pdGlvbnNSdWxlTmFtZVBhcnQgPSBSdWxlTmFtZVBhcnQuZnJvbVJ1bGVOYW1lKGRlZmluaXRpb25zUnVsZU5hbWUpLFxuICAgICAgICAgIHRlcm1pbmF0b3JUZXJtaW5hbFN5bWJvbFBhcnQgPSBUZXJtaW5hbFN5bWJvbFBhcnQuZnJvbUNvbnRlbnQodGVybWluYXRvclRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBuYW1lUnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgb3B0aW9uYWxBbWJpZ3VvdXNSdWxlTmFtZVBhcnRQYXJ0LFxuICAgICAgICAgICAgc2VwYXJhdG9yVGVybWluYWxTeW1ib2xQYXJ0LFxuICAgICAgICAgICAgZGVmaW5pdGlvbnNSdWxlTmFtZVBhcnQsXG4gICAgICAgICAgICB0ZXJtaW5hdG9yVGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICBydWxlRGVmaW5pdGlvbiA9IG5ldyBSdWxlRGVmaW5pdGlvbihwYXJ0cywgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gcnVsZURlZmluaXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBSdWxlQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcnVsZVwiO1xuaW1wb3J0IFJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3J1bGVcIjtcblxuaW1wb3J0IHsgcnVsZVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSdWxlUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgcnVsZURlZmluaXRpb24gPSBSdWxlRGVmaW5pdGlvbi5mcm9tTm90aGluZygpLFxuICAgICAgICAgIG5hbWUgPSBydWxlUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBSdWxlQk5GTm9kZSxcbiAgICAgICAgICBydWxlUnVsZSA9IG5ldyBSdWxlUnVsZShuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIHJ1bGVSdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXJyb3JCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMocnVsZU5hbWUsIGNoaWxkTm9kZXMsIGFtYmlndW91cykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMoRXJyb3JCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2RlcywgYW1iaWd1b3VzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IFRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS90ZXJtaW5hbFwiO1xuXG5jb25zdCB7IHdpbGRjYXJkIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2lsZGNhcmRQYXJ0IGV4dGVuZHMgVGVybWluYWxQYXJ0IHtcbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGxldCB0ZXJtaW5hbE5vZGUgPSBudWxsO1xuICAgIFxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCksXG4gICAgICAgICAgbmV4dFNpZ25pZmljYW50VG9rZW4gPSBzdGF0ZS5nZXROZXh0U2lnbmlmaWNhbnRUb2tlbigpLFxuXHRcdFx0XHRcdHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG5cbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgdGVybWluYWxOb2RlID0gVGVybWluYWxOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pO1xuICAgIH1cblxuICAgIHBhcnNlZCA9ICh0ZXJtaW5hbE5vZGUgIT09IG51bGwpO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgbm9kZXMucHVzaCh0ZXJtaW5hbE5vZGUpO1xuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIGlmIChjYWxsQWhlYWQgIT09IG51bGwpIHtcbiAgICAgICAgICBwYXJzZWQgPSBjYWxsQWhlYWQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IHdpbGRjYXJkOyAgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHdpbGRjYXJkUGFydCA9IG5ldyBXaWxkY2FyZFBhcnQoKTtcblxuICAgIHJldHVybiB3aWxkY2FyZFBhcnQ7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBXaWxkY2FyZFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvd2lsZGNhcmRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXJyb3JEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCB3aWxkY2FyZFBhcnQgPSBXaWxkY2FyZFBhcnQuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHdpbGRjYXJkUGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJlY2VkZW5jZSA9IG51bGwsXG4gICAgICAgICAgZXJyb3JEZWZpbml0aW9uID0gbmV3IEVycm9yRGVmaW5pdGlvbihwYXJ0cywgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gZXJyb3JEZWZpbml0aW9uO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgRXJyb3JCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9lcnJvclwiO1xuaW1wb3J0IEVycm9yRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9lcnJvclwiO1xuXG5pbXBvcnQgeyBlcnJvclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFcnJvclJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IGVycm9yRGVmaW5pdGlvbiA9IEVycm9yRGVmaW5pdGlvbi5mcm9tTm90aGluZygpLFxuICAgICAgICAgIG5hbWUgPSBlcnJvclJ1bGVOYW1lLCAvLy9cbiAgICAgICAgICBhbWJpZ3VvdXMgPSB0cnVlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZXJyb3JEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBFcnJvckJORk5vZGUsXG4gICAgICAgICAgZXJyb3JSdWxlID0gbmV3IEVycm9yUnVsZShuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIGVycm9yUnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuLi9wYXJzZVRyZWUvdmVydGljYWxCcmFuY2hcIjtcblxuY29uc3QgeyBlcHNpbG9uIH0gPSBzcGVjaWFsU3ltYm9scztcblxuY2xhc3MgRXBzaWxvbk5vZGVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBlcHNpbG9uLCAvLy9cbiAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGggPSBzdHJpbmdMZW5ndGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGgpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCksXG4gICAgICAgICAgdGVybWluYWxOb2RlUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oRXBzaWxvbk5vZGVQYXJzZVRyZWUsIHN0cmluZywgdmVydGljYWxCcmFuY2hQb3NpdGlvbik7XG5cbiAgICB0ZXJtaW5hbE5vZGVQYXJzZVRyZWUuYXBwZW5kVG9Ub3AodmVydGljYWxCcmFuY2hQYXJzZVRyZWUpO1xuXG4gICAgY29uc3QgZXBzaWxvbk5vZGVQYXJzZVRyZWUgPSB0ZXJtaW5hbE5vZGVQYXJzZVRyZWU7IC8vL1xuXG4gICAgcmV0dXJuIGVwc2lsb25Ob2RlUGFyc2VUcmVlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRXBzaWxvbk5vZGVQYXJzZVRyZWU7IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vdGVybWluYWxcIjtcbmltcG9ydCBFcHNpbG9uTm9kZVBhcnNlVHJlZSBmcm9tIFwiLi4vLi4vcGFyc2VUcmVlL2Vwc2lsb25Ob2RlXCI7XG5cbmNvbnN0IHsgZXBzaWxvbiB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVwc2lsb25Ob2RlIGV4dGVuZHMgVGVybWluYWxOb2RlIHtcbiAgaXNFcHNpbG9uTm9kZSgpIHtcbiAgICBjb25zdCBlcHNpbG9uTm9kZSA9IHRydWU7XG5cbiAgICByZXR1cm4gZXBzaWxvbk5vZGU7XG4gIH1cblxuICBnZXRUeXBlKCkge1xuICAgIGNvbnN0IHR5cGUgPSBudWxsOyAgLy8vXG5cbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIGdldENvbnRlbnQoKSB7XG4gICAgY29uc3QgY29udGVudCA9IGVwc2lsb247ICAvLy9cblxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgYXNQYXJzZVRyZWUodG9rZW5zKSB7XG4gICAgY29uc3QgZXBzaWxvbk5vZGVQYXJzZVRyZWUgPSBFcHNpbG9uTm9kZVBhcnNlVHJlZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHBhcnNlVHJlZSA9IGVwc2lsb25Ob2RlUGFyc2VUcmVlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgbWF0Y2gobm9kZSwgZGVwdGgpIHtcbiAgICBsZXQgbWF0Y2hlcyA9IGZhbHNlO1xuXG4gICAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKTtcblxuICAgIGlmIChub2RlVGVybWluYWxOb2RlKSB7XG4gICAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBub2RlLCAgLy8vXG4gICAgICAgICAgICB0ZXJtaW5hbE5vZGVFcHNpbG9uTm9kZSA9IHRlcm1pbmFsTm9kZS5pc0Vwc2lsb25Ob2RlKCk7XG5cbiAgICAgIGlmICh0ZXJtaW5hbE5vZGVFcHNpbG9uTm9kZSkge1xuICAgICAgICBtYXRjaGVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIFRlcm1pbmFsTm9kZS5mcm9tTm90aGluZyhFcHNpbG9uTm9kZSk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBUZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWxcIjtcbmltcG9ydCBFcHNpbG9uQk5GTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS90ZXJtaW5hbC9lcHNpbG9uXCI7XG5cbmNvbnN0IHsgZXBzaWxvbiB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVwc2lsb25QYXJ0IGV4dGVuZHMgVGVybWluYWxQYXJ0IHtcbiAgcGFyc2Uobm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKSB7XG4gICAgbGV0IHBhcnNlZDtcblxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCksXG4gICAgICAgICAgZXBzaWxvbkJORk5vZGUgPSBFcHNpbG9uQk5GTm9kZS5mcm9tTm90aGluZygpO1xuXG4gICAgcGFyc2VkID0gKGVwc2lsb25CTkZOb2RlICE9PSBudWxsKTtcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2goZXBzaWxvbkJORk5vZGUpO1xuXG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIGlmIChjYWxsQWhlYWQgIT09IG51bGwpIHtcbiAgICAgICAgICBwYXJzZWQgPSBjYWxsQWhlYWQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBzdGF0ZS5iYWNrdHJhY2soc2F2ZWRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfVxuXG4gIGFzU3RyaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IGVwc2lsb247IC8vL1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBlcHNpbG9uUGFydCA9IG5ldyBFcHNpbG9uUGFydCgpO1xuXG4gICAgcmV0dXJuIGVwc2lsb25QYXJ0O1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFcHNpbG9uUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbC9lcHNpbG9uXCI7XG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVwc2lsb25CTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IGVwc2lsb25QYXJ0ID0gRXBzaWxvblBhcnQuZnJvbU5vdGhpbmcoKTtcblxuICAgIHJldHVybiBlcHNpbG9uUGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kQW1iaWd1b3VzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBhbWJpZ3VvdXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kQW1iaWd1b3VzKEVwc2lsb25CTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2RlcywgYW1iaWd1b3VzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQpIHtcbiAgICBjb25zdCB0ZXJtaW5hbFN5bWJvbFBhcnQgPSBUZXJtaW5hbFN5bWJvbFBhcnQuZnJvbUNvbnRlbnQoY29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnRcbiAgICAgICAgICBdLFxuICAgICAgICAgIHByZWNlZGVuY2UgPSBudWxsLFxuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbiA9IG5ldyBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24ocGFydHMsIHByZWNlZGVuY2UpO1xuXG4gICAgcmV0dXJuIHRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBFcHNpbG9uQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvZXBzaWxvblwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi90ZXJtaW5hbFN5bWJvbFwiO1xuXG5pbXBvcnQgeyBlcHNpbG9uUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgZXBzaWxvbiB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVwc2lsb25SdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBjb250ZW50ID0gZXBzaWxvbiwgLy8vXG4gICAgICAgICAgZXBzaWxvblRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbiA9IFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbi5mcm9tQ29udGVudChjb250ZW50KSxcbiAgICAgICAgICBuYW1lID0gZXBzaWxvblJ1bGVOYW1lLCAvLy9cbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGVwc2lsb25UZXJtaW5hbFN5bWJvbERlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IEVwc2lsb25CTkZOb2RlLCAvLy9cbiAgICAgICAgICBlcHNpbG9uUnVsZSA9IG5ldyBFcHNpbG9uUnVsZShuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIGVwc2lsb25SdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBub2RlRnJvbUNoaWxkTm9kZXNBbmRSdWxlTmFtZShjaGlsZE5vZGVzLCBydWxlTmFtZSkge1xuICBsZXQgbm9kZSA9IG51bGw7XG5cbiAgY2hpbGROb2Rlcy5zb21lKChjaGlsZE5vZGUpID0+IHtcbiAgICBjb25zdCBjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUgPSBjaGlsZE5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgIGlmIChjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGNoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lUnVsZU5hbWUgPSAobm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPT09IHJ1bGVOYW1lKTtcblxuICAgICAgaWYgKG5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lUnVsZU5hbWUpIHtcbiAgICAgICAgbm9kZSA9IGNoaWxkTm9kZTsgLy8vXG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gbm9kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vZGVzRnJvbUNoaWxkTm9kZXNBbmRSdWxlTmFtZShjaGlsZE5vZGVzLCBydWxlTmFtZSkge1xuICBjb25zdCBub2RlcyA9IGNoaWxkTm9kZXMuZmlsdGVyKChjaGlsZE5vZGUpID0+IHtcbiAgICBjb25zdCBjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUgPSBjaGlsZE5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgIGlmIChjaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IGNoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lUnVsZU5hbWUgPSAobm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPT09IHJ1bGVOYW1lKTtcblxuICAgICAgaWYgKG5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lUnVsZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gbm9kZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbVwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5pbXBvcnQgeyBydWxlUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5pbXBvcnQgeyBub2Rlc0Zyb21DaGlsZE5vZGVzQW5kUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL25vZGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9jdW1lbnRCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVSdWxlcyhSdWxlKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIHJ1bGVCTkZOb2RlcyA9IG5vZGVzRnJvbUNoaWxkTm9kZXNBbmRSdWxlTmFtZShjaGlsZE5vZGVzLCBydWxlUnVsZU5hbWUpLFxuICAgICAgICAgIHJ1bGVzID0gcnVsZUJORk5vZGVzLm1hcCgocnVsZUJORk5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGUgPSBydWxlQk5GTm9kZS5nZW5lcmF0ZVJ1bGUoUnVsZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiBydWxlO1xuICAgICAgICAgIH0pO1xuICAgIFxuICAgIHJldHVybiBydWxlcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kQW1iaWd1b3VzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBhbWJpZ3VvdXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kQW1iaWd1b3VzKERvY3VtZW50Qk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMsIGFtYmlndW91cyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuY29uc3QgeyBTUEFDRV9DSEFSQUNURVIgfSA9IGNoYXJhY3RlcnM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhcnRDaG9pY2Uge1xuICBjb25zdHJ1Y3RvcihwYXJ0LCBwcmVjZWRlbmNlKSB7XG4gICAgdGhpcy5wYXJ0ID0gcGFydDtcbiAgICB0aGlzLnByZWNlZGVuY2UgPSBwcmVjZWRlbmNlO1xuICB9XG5cbiAgZ2V0UGFydCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJ0O1xuICB9XG5cbiAgZ2V0UHJlY2VkZW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcmVjZWRlbmNlO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgbGV0IHN0cmluZztcblxuICAgIGNvbnN0IHBhcnRTdHJpbmcgPSB0aGlzLnBhcnQuYXNTdHJpbmcoKTtcblxuICAgIHN0cmluZyA9IHBhcnRTdHJpbmc7ICAvLy9cblxuICAgIGlmICh0aGlzLnByZWNlZGVuY2UgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHByZWNlZGVuY2UgPSAodGhpcy5wcmVjZWRlbmNlID09PSBJbmZpbml0eSkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BBQ0VfQ0hBUkFDVEVSIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVjZWRlbmNlO1xuXG4gICAgICBzdHJpbmcgPSBgJHtzdHJpbmd9ICgke3ByZWNlZGVuY2V9KWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUGFydChwYXJ0KSB7XG4gICAgY29uc3QgcHJlY2VkZW5jZSA9IG51bGwsXG4gICAgICAgICAgcGFydENob2ljZSA9IG5ldyBQYXJ0Q2hvaWNlKHBhcnQsIHByZWNlZGVuY2UpO1xuXG4gICAgcmV0dXJuIHBhcnRDaG9pY2U7XG4gIH1cblxuICBzdGF0aWMgZnJvbVBhcnRBbmRQcmVjZWRlbmNlKHBhcnQsIHByZWNlZGVuY2UpIHtcbiAgICBjb25zdCBwYXJ0Q2hvaWNlID0gbmV3IFBhcnRDaG9pY2UocGFydCwgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gcGFydENob2ljZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IHBhcnNlUGFydCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvcGFyc2VcIjtcbmltcG9ydCB7IENob2ljZU9mUGFydHNQYXJ0VHlwZSB9IGZyb20gXCIuLi8uLi9wYXJ0VHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hvaWNlT2ZQYXJ0c1BhcnQgZXh0ZW5kcyBOb25UZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3Rvcih0eXBlLCBsb29rQWhlYWQsIHBhcnRDaG9pY2VzKSB7XG4gICAgc3VwZXIodHlwZSwgbG9va0FoZWFkKTtcbiAgICBcbiAgICB0aGlzLnBhcnRDaG9pY2VzID0gcGFydENob2ljZXM7XG4gIH1cbiAgXG4gIGdldFBhcnRDaG9pY2VzKCkge1xuICAgIHJldHVybiB0aGlzLnBhcnRDaG9pY2VzO1xuICB9XG5cbiAgZ2V0UGFydHMoKSB7XG4gICAgY29uc3QgcGFydHMgPSB0aGlzLnBhcnRDaG9pY2VzLm1hcCgocGFydENob2ljZSkgPT4ge1xuICAgICAgY29uc3QgcGFydCA9IHBhcnRDaG9pY2UuZ2V0UGFydCgpO1xuXG4gICAgICByZXR1cm4gcGFydDtcbiAgICB9KTtcblxuICAgIHJldHVybiBwYXJ0cztcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCkge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBzYXZlZFByZWNlZGVuY2UgPSBzdGF0ZS5nZXRTYXZlZFByZWNlZGVuY2UoKTtcblxuICAgIHBhcnNlZCA9IHRoaXMucGFydENob2ljZXMuc29tZSgocGFydENob2ljZSkgPT4ge1xuICAgICAgbGV0IHBhcnNlZDtcblxuICAgICAgY29uc3QgcGFydCA9IHBhcnRDaG9pY2UuZ2V0UGFydCgpLFxuICAgICAgICAgICAgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSxcbiAgICAgICAgICAgIHByZWNlZGVuY2UgPSBwYXJ0Q2hvaWNlLmdldFByZWNlZGVuY2UoKSxcbiAgICAgICAgICAgIG5vZGVzTGVuZ3RoID0gbm9kZXMubGVuZ3RoO1xuXG4gICAgICBpZiAocHJlY2VkZW5jZSAhPT0gbnVsbCkge1xuICAgICAgICBzdGF0ZS5zZXRQcmVjZWRlbmNlKHByZWNlZGVuY2UpO1xuICAgICAgfVxuXG4gICAgICBjYWxsYmFjayA9IChjYWxsQWhlYWQgPT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgbnVsbCA6XG4gICAgICAgICAgICAgICAgICAgICAgKCkgPT4geyAgLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFyc2VkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQgPSBjYWxsQWhlYWQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICBwYXJzZWQgPSBwYXJzZVBhcnQocGFydCwgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKTtcblxuICAgICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBub2Rlc0xlbmd0aDsgIC8vL1xuXG4gICAgICAgIG5vZGVzLnNwbGljZShzdGFydCk7XG5cbiAgICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyc2VkO1xuICAgIH0pO1xuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLnJlc2V0UHJlY2VkZW5jZShzYXZlZFByZWNlZGVuY2UpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBwYXJ0Q2hvaWNlc1N0cmluZyA9IHRoaXMucGFydENob2ljZXMucmVkdWNlKChwYXJ0Q2hvaWNlc1N0cmluZywgcGFydENob2ljZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFydENob2ljZVN0cmluZyA9IHBhcnRDaG9pY2UuYXNTdHJpbmcoKTtcbiAgICBcbiAgICAgICAgICAgIGlmIChwYXJ0Q2hvaWNlc1N0cmluZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICBwYXJ0Q2hvaWNlc1N0cmluZyA9IHBhcnRDaG9pY2VTdHJpbmc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwYXJ0Q2hvaWNlc1N0cmluZyA9IGAke3BhcnRDaG9pY2VzU3RyaW5nfSB8ICR7cGFydENob2ljZVN0cmluZ31gO1xuICAgICAgICAgICAgfVxuICAgIFxuICAgICAgICAgICAgcmV0dXJuIHBhcnRDaG9pY2VzU3RyaW5nO1xuICAgICAgICAgIH0sIG51bGwpLFxuICAgICAgICAgIHN0cmluZyA9IGAoICR7cGFydENob2ljZXNTdHJpbmd9IClgO1xuICAgIFxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzdGF0aWMgZnJvbVBhcnRDaG9pY2VzKHBhcnRDaG9pY2VzKSB7XG4gICAgY29uc3QgdHlwZSA9IENob2ljZU9mUGFydHNQYXJ0VHlwZSxcbiAgICAgICAgICBsb29rQWhlYWQgPSBmYWxzZSxcbiAgICAgICAgICBjaG9pY2VPZlBhcnRzUGFydCA9IG5ldyBDaG9pY2VPZlBhcnRzUGFydCh0eXBlLCBsb29rQWhlYWQsIHBhcnRDaG9pY2VzKTtcblxuICAgIHJldHVybiBjaG9pY2VPZlBhcnRzUGFydDtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFBhcnRDaG9pY2UgZnJvbSBcIi4uL3BhcnRDaG9pY2VcIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9jaG9pY2VPZlBhcnRzXCI7XG5pbXBvcnQgT25lT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IHJ1bGVSdWxlTmFtZSwgZXJyb3JSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9jdW1lbnREZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBydWxlUnVsZU5hbWVQYXJ0ID0gUnVsZU5hbWVQYXJ0LmZyb21SdWxlTmFtZShydWxlUnVsZU5hbWUpLFxuICAgICAgICAgIGVycm9yUnVsZU5hbWVQYXJ0ID0gUnVsZU5hbWVQYXJ0LmZyb21SdWxlTmFtZShlcnJvclJ1bGVOYW1lKSxcbiAgICAgICAgICBydWxlUnVsZU5hbWVQYXJ0Q2hvaWNlID0gUGFydENob2ljZS5mcm9tUGFydChydWxlUnVsZU5hbWVQYXJ0KSxcbiAgICAgICAgICBlcnJvclJ1bGVOYW1lUGFydENob2ljZSA9IFBhcnRDaG9pY2UuZnJvbVBhcnQoZXJyb3JSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHBhcnRDaG9pY2VzID0gW1xuICAgICAgICAgICAgcnVsZVJ1bGVOYW1lUGFydENob2ljZSxcbiAgICAgICAgICAgIGVycm9yUnVsZU5hbWVQYXJ0Q2hvaWNlXG4gICAgICAgICAgXSxcbiAgICAgICAgICBjaG9pY2VPZlJ1bGVSdWxlTmFtZUFuZEVycm9yUnVsZU5hbWVQYXJ0c1BhcnQgPSBDaG9pY2VPZlBhcnRzUGFydC5mcm9tUGFydENob2ljZXMocGFydENob2ljZXMpLFxuICAgICAgICAgIG9uZU9yTW9yZUNob2ljZU9mUnVsZVJ1bGVOYW1lQW5kRXJyb3JSdWxlTmFtZVBhcnRzUGFydHNQYXJ0ID0gT25lT3JNb3JlUGFydHNQYXJ0LmZyb21QYXJ0KGNob2ljZU9mUnVsZVJ1bGVOYW1lQW5kRXJyb3JSdWxlTmFtZVBhcnRzUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBvbmVPck1vcmVDaG9pY2VPZlJ1bGVSdWxlTmFtZUFuZEVycm9yUnVsZU5hbWVQYXJ0c1BhcnRzUGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJlY2VkZW5jZSA9IG51bGwsXG4gICAgICAgICAgZG9jdW1lbnREZWZpbml0aW9uID0gbmV3IERvY3VtZW50RGVmaW5pdGlvbihwYXJ0cywgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gZG9jdW1lbnREZWZpbml0aW9uO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgRG9jdW1lbnRCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9kb2N1bWVudFwiO1xuaW1wb3J0IERvY3VtZW50RGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9kb2N1bWVudFwiO1xuXG5pbXBvcnQgeyBkb2N1bWVudFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb2N1bWVudFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IGRvY3VtZW50RGVmaW5pdGlvbiA9IERvY3VtZW50RGVmaW5pdGlvbi5mcm9tTm90aGluZygpLFxuICAgICAgICAgIG5hbWUgPSBkb2N1bWVudFJ1bGVOYW1lLCAgLy8vXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBkb2N1bWVudERlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IERvY3VtZW50Qk5GTm9kZSwgIC8vL1xuICAgICAgICAgIGRvY3VtZW50UnVsZSA9IG5ldyBEb2N1bWVudFJ1bGUobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiBkb2N1bWVudFJ1bGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ1bGVOYW1lQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGUgPSBmaXJzdENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIHJ1bGVOYW1lID0gdGVybWluYWxOb2RlQ29udGVudCwgLy8vXG4gICAgICAgICAgcnVsZU5hbWVQYXJ0ID0gUnVsZU5hbWVQYXJ0LmZyb21Mb29rQWhlYWRBbmRSdWxlTmFtZShsb29rQWhlYWQsIHJ1bGVOYW1lKTtcblxuICAgIHJldHVybiBydWxlTmFtZVBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZEFtYmlndW91cyhydWxlTmFtZSwgY2hpbGROb2RlcywgYW1iaWd1b3VzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZEFtYmlndW91cyhSdWxlTmFtZUJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBhbWJpZ3VvdXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgTmFtZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vbmFtZVwiO1xuaW1wb3J0IFJ1bGVOYW1lQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcnVsZU5hbWVcIjtcblxuaW1wb3J0IHsgcnVsZU5hbWVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBuYW1lRGVmaW5pdGlvbiA9IE5hbWVEZWZpbml0aW9uLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgbmFtZSA9IHJ1bGVOYW1lUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG5hbWVEZWZpbml0aW9uICAvLy9cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IFJ1bGVOYW1lQk5GTm9kZSwgIC8vL1xuICAgICAgICAgIHJ1bGVOYW1lUnVsZSA9IG5ldyBSdWxlTmFtZVJ1bGUobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiBydWxlTmFtZVJ1bGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFdpbGRjYXJkUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbC93aWxkY2FyZFwiO1xuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaWxkY2FyZEJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3Qgd2lsZGNhcmRQYXJ0ID0gV2lsZGNhcmRQYXJ0LmZyb21Ob3RoaW5nKCk7XG5cbiAgICByZXR1cm4gd2lsZGNhcmRQYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMocnVsZU5hbWUsIGNoaWxkTm9kZXMsIGFtYmlndW91cykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMoV2lsZGNhcmRCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2RlcywgYW1iaWd1b3VzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBXaWxkY2FyZEJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3dpbGRjYXJkXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmltcG9ydCB7IHdpbGRjYXJkUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgd2lsZGNhcmQgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaWxkY2FyZFJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSB3aWxkY2FyZCwgLy8vXG4gICAgICAgICAgd2lsZGNhcmRUZXJtaW5hbFN5bWJvbERlZmluaXRpb24gPSBUZXJtaW5hbFN5bWJvbERlZmluaXRpb24uZnJvbUNvbnRlbnQoY29udGVudCksXG4gICAgICAgICAgbmFtZSA9IHdpbGRjYXJkUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIHdpbGRjYXJkVGVybWluYWxTeW1ib2xEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBXaWxkY2FyZEJORk5vZGUsICAvLy9cbiAgICAgICAgICB3aWxkY2FyZFJ1bGUgPSBuZXcgV2lsZGNhcmRSdWxlKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gd2lsZGNhcmRSdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXRlIHtcbiAgY29uc3RydWN0b3IoaW5kZXgsIHRva2VucywgcnVsZU1hcCwgcHJlY2VkZW5jZSkge1xuXHRcdHRoaXMuaW5kZXggPSBpbmRleDtcbiAgICB0aGlzLnRva2VucyA9IHRva2VucztcbiAgICB0aGlzLnJ1bGVNYXAgPSBydWxlTWFwO1xuICAgIHRoaXMucHJlY2VkZW5jZSA9IHByZWNlZGVuY2U7XG4gIH1cblxuICBnZXRJbmRleCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbmRleDtcbiAgfVxuXG4gIGdldFRva2VucygpIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbnM7XG4gIH1cblxuICBnZXRSdWxlTWFwKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVNYXA7XG4gIH1cblxuICBnZXRQcmVjZWRlbmNlKCkge1xuICAgIHJldHVybiB0aGlzLnByZWNlZGVuY2U7XG4gIH1cblxuICBzZXRJbmRleChpbmRleCkge1xuICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgfVxuXG4gIHNldFRva2Vucyh0b2tlbnMpIHtcbiAgICB0aGlzLnRva2VucyA9IHRva2VucztcbiAgfVxuXG4gIHNldFJ1bGVNYXAocnVsZU1hcCkge1xuICAgIHRoaXMucnVsZU1hcCA9IHJ1bGVNYXA7XG4gIH1cblxuICBzZXRQcmVjZWRlbmNlKHByZWNlZGVuY2UpIHtcbiAgICB0aGlzLnByZWNlZGVuY2UgPSBwcmVjZWRlbmNlO1xuICB9XG5cbiAgZ2V0U2F2ZWRQcmVjZWRlbmNlKCkge1xuICAgIGNvbnN0IHNhdmVkUHJlY2VkZW5jZSA9IHRoaXMucHJlY2VkZW5jZTtcblxuICAgIHJldHVybiBzYXZlZFByZWNlZGVuY2U7XG4gIH1cblxuICBnZXRTYXZlZEluZGV4KCkge1xuICAgIGNvbnN0IHNhdmVkSW5kZXggPSB0aGlzLmluZGV4OyAvLy9cbiAgXG4gICAgcmV0dXJuIHNhdmVkSW5kZXg7XG4gIH1cblxuICBnZXROZXh0VG9rZW4oKSB7XG4gICAgbGV0IG5leHRUb2tlbiA9IG51bGw7XG5cbiAgICBjb25zdCB0b2tlbnNMZW5ndGggPSB0aGlzLnRva2Vucy5sZW5ndGg7XG5cbiAgICBpZiAodGhpcy5pbmRleCA8IHRva2Vuc0xlbmd0aCkge1xuICAgICAgbmV4dFRva2VuID0gdGhpcy50b2tlbnNbdGhpcy5pbmRleCsrXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dFRva2VuO1xuICB9XG5cbiAgZ2V0TmV4dFNpZ25pZmljYW50VG9rZW4oKSB7XG5cdFx0bGV0IG5leHRTaWduaWZpY2FudFRva2VuID0gbnVsbDtcblxuICBcdGNvbnN0IHRva2Vuc0xlbmd0aCA9IHRoaXMudG9rZW5zLmxlbmd0aDtcblxuICBcdHdoaWxlICh0aGlzLmluZGV4IDwgdG9rZW5zTGVuZ3RoKSB7XG4gIFx0XHRjb25zdCB0b2tlbiA9IHRoaXMudG9rZW5zW3RoaXMuaW5kZXgrK10sXG5cdFx0XHRcdFx0XHR0b2tlblNpZ25pZmljYW50ID0gdG9rZW4uaXNTaWduaWZpY2FudCgpO1xuXG4gIFx0XHRpZiAodG9rZW5TaWduaWZpY2FudCkge1xuICBcdFx0ICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gdG9rZW47IC8vL1xuXG5cdFx0XHRcdG5leHRTaWduaWZpY2FudFRva2VuID0gc2lnbmlmaWNhbnRUb2tlbjtcdC8vL1xuXG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuICBcdH1cblxuXHRcdHJldHVybiBuZXh0U2lnbmlmaWNhbnRUb2tlbjtcbiAgfVxuXG4gIGlzTmV4dFRva2VuV2hpdGVzcGFjZVRva2VuKCkge1xuICAgIGxldCBuZXh0VG9rZW5XaGl0ZXNwYWNlVG9rZW4gPSBmYWxzZTtcblxuICAgIGNvbnN0IHRva2Vuc0xlbmd0aCA9IHRoaXMudG9rZW5zLmxlbmd0aDtcblxuICAgIGlmICh0aGlzLmluZGV4IDwgdG9rZW5zTGVuZ3RoKSB7XG4gICAgICBjb25zdCBuZXh0VG9rZW4gPSB0aGlzLnRva2Vuc1t0aGlzLmluZGV4XTtcblxuICAgICAgbmV4dFRva2VuV2hpdGVzcGFjZVRva2VuID0gbmV4dFRva2VuLmlzV2hpdGVzcGFjZVRva2VuKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHRUb2tlbldoaXRlc3BhY2VUb2tlbjtcbiAgfVxuXG5cdGJhY2t0cmFjayhzYXZlZEluZGV4KSB7XG5cdFx0dGhpcy5pbmRleCA9IHNhdmVkSW5kZXg7ICAvLy9cblx0fVxuXG4gIHJlc2V0UHJlY2VkZW5jZShzYXZlZFByZWNlZGVuY2UpIHtcbiAgICB0aGlzLnByZWNlZGVuY2UgPSBzYXZlZFByZWNlZGVuY2U7ICAvLy9cbiAgfVxuXG4gIHN0YXRpYyBmcm9tVG9rZW5zQW5kUnVsZU1hcCh0b2tlbnMsIHJ1bGVNYXApIHtcbiAgICBjb25zdCBpbmRleCA9IDAsXG4gICAgICAgICAgcHJlY2VkZW5jZSA9IG51bGwsXG5cdFx0XHRcdFx0c3RhdGUgPSBuZXcgU3RhdGUoaW5kZXgsIHRva2VucywgcnVsZU1hcCwgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBTdGF0ZSBmcm9tIFwiLi4vc3RhdGVcIjtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmZ1bmN0aW9uIHBhcnNlKHRva2VucywgcnVsZSA9IHRoaXMuc3RhcnRSdWxlKSB7XG4gIGxldCBub2RlID0gbnVsbDtcblxuICBjb25zdCBub2RlcyA9IFtdLFxuICAgICAgICBzdGF0ZSA9IFN0YXRlLmZyb21Ub2tlbnNBbmRSdWxlTWFwKHRva2VucywgdGhpcy5ydWxlTWFwKSxcbiAgICAgICAgY2FsbGJhY2sgPSBudWxsLFxuICAgICAgICBjYWxsQWhlYWQgPSBudWxsLFxuICAgICAgICBwYXJzZWQgPSBydWxlLnBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCk7XG5cbiAgaWYgKHBhcnNlZCkge1xuICAgIGNvbnN0IGZpcnN0Tm9kZSA9IGZpcnN0KG5vZGVzKTtcblxuICAgIG5vZGUgPSBmaXJzdE5vZGU7IC8vL1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59XG5cbmNvbnN0IHBhcnNlck1peGlucyA9IHtcbiAgcGFyc2Vcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHBhcnNlck1peGlucztcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSBmcm9tIFwiLi92ZXJ0aWNhbEJyYW5jaFwiO1xuXG5jb25zdCB7IEVORF9PRl9MSU5FIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lTm9kZVBhcnNlVHJlZSBleHRlbmRzIFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHN0cmluZyA9IEVORF9PRl9MSU5FLCAvLy9cbiAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGggPSBzdHJpbmdMZW5ndGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGgpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCksXG4gICAgICAgICAgdGVybWluYWxOb2RlUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oRW5kT2ZMaW5lTm9kZVBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZS5hcHBlbmRUb1RvcCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSk7XG5cbiAgICBjb25zdCBlbmRPZkxpbmVOb2RlUGFyc2VUcmVlID0gdGVybWluYWxOb2RlUGFyc2VUcmVlOyAvLy9cblxuICAgIHJldHVybiBlbmRPZkxpbmVOb2RlUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uL3Rlcm1pbmFsXCI7XG5pbXBvcnQgRW5kT2ZMaW5lTm9kZVBhcnNlVHJlZSBmcm9tIFwiLi4vLi4vcGFyc2VUcmVlL2VuZE9mTGluZU5vZGVcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmRPZkxpbmVOb2RlIGV4dGVuZHMgVGVybWluYWxOb2RlIHtcbiAgaXNFbmRPZkxpbmVOb2RlKCkge1xuICAgIGNvbnN0IGVuZE9mTGluZU5vZGUgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGVuZE9mTGluZU5vZGU7XG4gIH1cblxuICBnZXRDb250ZW50KGZhaXRoZnVsID0gZmFsc2UpIHtcbiAgICBjb25zdCBjb250ZW50ID0gZmFpdGhmdWwgP1xuICAgICAgICAgICAgICAgICAgICAgIHN1cGVyLmdldENvbnRlbnQoKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkc7IC8vL1xuXG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBhc1BhcnNlVHJlZSh0b2tlbnMpIHtcbiAgICBjb25zdCBlbmRPZkxpbmVOb2RlUGFyc2VUcmVlID0gRW5kT2ZMaW5lTm9kZVBhcnNlVHJlZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHBhcnNlVHJlZSA9IGVuZE9mTGluZU5vZGVQYXJzZVRyZWU7ICAvLy9cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbikgeyByZXR1cm4gVGVybWluYWxOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKEVuZE9mTGluZU5vZGUsIHNpZ25pZmljYW50VG9rZW4pOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgRW5kT2ZMaW5lTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS90ZXJtaW5hbC9lbmRPZkxpbmVcIjtcblxuY29uc3QgeyBFTkRfT0ZfTElORSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZVBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgbGV0IGVuZE9mTGluZU5vZGUgPSBudWxsO1xuICAgIFxuICAgIGNvbnN0IHNhdmVkSW5kZXggPSBzdGF0ZS5nZXRTYXZlZEluZGV4KCksXG4gICAgICAgICAgbmV4dFNpZ25pZmljYW50VG9rZW4gPSBzdGF0ZS5nZXROZXh0U2lnbmlmaWNhbnRUb2tlbigpLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW4gPSBuZXh0U2lnbmlmaWNhbnRUb2tlbjsgLy8vXG5cbiAgICBpZiAoc2lnbmlmaWNhbnRUb2tlbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlbkVuZE9mTGluZVRva2VuID0gc2lnbmlmaWNhbnRUb2tlbi5pc0VuZE9mTGluZVRva2VuKCk7XG5cbiAgICAgIGlmIChzaWduaWZpY2FudFRva2VuRW5kT2ZMaW5lVG9rZW4pIHtcbiAgICAgICAgZW5kT2ZMaW5lTm9kZSA9IEVuZE9mTGluZU5vZGUuZnJvbVNpZ25pZmljYW50VG9rZW4oc2lnbmlmaWNhbnRUb2tlbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFyc2VkID0gKGVuZE9mTGluZU5vZGUgIT09IG51bGwpO1xuXG4gICAgaWYgKHBhcnNlZCkge1xuICAgICAgbm9kZXMucHVzaChlbmRPZkxpbmVOb2RlKTtcblxuICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICBpZiAoY2FsbEFoZWFkICE9PSBudWxsKSB7XG4gICAgICAgICAgcGFyc2VkID0gY2FsbEFoZWFkKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgc3RhdGUuYmFja3RyYWNrKHNhdmVkSW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBhc1N0cmluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBFTkRfT0ZfTElORTsgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IGVuZE9mTGluZVBhcnQgPSBuZXcgRW5kT2ZMaW5lUGFydCgpO1xuXG4gICAgcmV0dXJuIGVuZE9mTGluZVBhcnQ7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEVuZE9mTGluZVBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWwvZW5kT2ZMaW5lXCI7XG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZE9mTGluZUJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgZW5kT2ZMaW5lUGFydCA9IEVuZE9mTGluZVBhcnQuZnJvbU5vdGhpbmcoKTtcblxuICAgIHJldHVybiBlbmRPZkxpbmVQYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMocnVsZU5hbWUsIGNoaWxkTm9kZXMsIGFtYmlndW91cykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMoRW5kT2ZMaW5lQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMsIGFtYmlndW91cyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgRW5kT2ZMaW5lQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvZW5kT2ZMaW5lXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmltcG9ydCB7IGVuZE9mTGluZVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IEVORF9PRl9MSU5FIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5kT2ZMaW5lUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgY29udGVudCA9IEVORF9PRl9MSU5FLFxuICAgICAgICAgIGVuZE9mTGluZVRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbiA9IFRlcm1pbmFsU3ltYm9sRGVmaW5pdGlvbi5mcm9tQ29udGVudChjb250ZW50KSxcbiAgICAgICAgICBuYW1lID0gZW5kT2ZMaW5lUnVsZU5hbWUsIC8vL1xuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgZW5kT2ZMaW5lVGVybWluYWxTeW1ib2xEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBFbmRPZkxpbmVCTkZOb2RlLCAvLy9cbiAgICAgICAgICBlbmRPZkxpbmVSdWxlID0gbmV3IEVuZE9mTGluZVJ1bGUobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiBlbmRPZkxpbmVSdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBQYXJ0Q2hvaWNlIGZyb20gXCIuLi8uLi9wYXJ0Q2hvaWNlXCI7XG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IG5vZGVGcm9tQ2hpbGROb2Rlc0FuZFJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9ub2RlXCI7XG5pbXBvcnQgeyBwYXJ0UnVsZU5hbWUsIHByZWNlZGVuY2VSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFydENob2ljZUJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnRDaG9pY2UobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIHBhcnRCTkZOb2RlID0gbm9kZUZyb21DaGlsZE5vZGVzQW5kUnVsZU5hbWUoY2hpbGROb2RlcywgcGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICBwcmVjZWRlbmNlQk5GTm9kZSA9IG5vZGVGcm9tQ2hpbGROb2Rlc0FuZFJ1bGVOYW1lKGNoaWxkTm9kZXMsIHByZWNlZGVuY2VSdWxlTmFtZSk7XG5cbiAgICBsb29rQWhlYWQgPSBmYWxzZTsgIC8vL1xuXG4gICAgY29uc3QgcGFydCA9IHBhcnRCTkZOb2RlLmdlbmVyYXRlUGFydChsb29rQWhlYWQpLFxuICAgICAgICAgIHByZWNlZGVuY2UgPSAocHJlY2VkZW5jZUJORk5vZGUgPT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2VkZW5jZUJORk5vZGUuZ2V0UHJlY2VkZW5jZSgpLFxuICAgICAgICAgIGRlZmluaXRpb24gPSBQYXJ0Q2hvaWNlLmZyb21QYXJ0QW5kUHJlY2VkZW5jZShwYXJ0LCBwcmVjZWRlbmNlKTtcblxuICAgIHJldHVybiBkZWZpbml0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMocnVsZU5hbWUsIGNoaWxkTm9kZXMsIGFtYmlndW91cykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMoUGFydENob2ljZUJORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBhbWJpZ3VvdXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgT3B0aW9uYWxQYXJ0UGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vcHRpb25hbFBhcnRcIjtcblxuaW1wb3J0IHsgcGFydFJ1bGVOYW1lLCBwcmVjZWRlbmNlUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhcnRDaG9pY2VEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBwYXJ0UnVsZU5hbWVQYXJ0ID0gUnVsZU5hbWVQYXJ0LmZyb21SdWxlTmFtZShwYXJ0UnVsZU5hbWUpLFxuICAgICAgICAgIHByZWNlZGVuY2VSdWxlTmFtZVBhcnQgPSBSdWxlTmFtZVBhcnQuZnJvbVJ1bGVOYW1lKHByZWNlZGVuY2VSdWxlTmFtZSksXG4gICAgICAgICAgb3B0aW9uYWxQcmVjZWRlbmNlUnVsZU5hbWVQYXJ0UGFydCA9IE9wdGlvbmFsUGFydFBhcnQuZnJvbVBhcnQocHJlY2VkZW5jZVJ1bGVOYW1lUGFydCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBwYXJ0UnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgb3B0aW9uYWxQcmVjZWRlbmNlUnVsZU5hbWVQYXJ0UGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJlY2VkZW5jZSA9IG51bGwsXG4gICAgICAgICAgcGFydENob2ljZURlZmluaXRpb24gPSBuZXcgUGFydENob2ljZURlZmluaXRpb24ocGFydHMsIHByZWNlZGVuY2UpO1xuXG4gICAgcmV0dXJuIHBhcnRDaG9pY2VEZWZpbml0aW9uO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgUGFydENob2ljZUJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3BhcnRDaG9pY2VcIjtcbmltcG9ydCBQYXJ0Q2hvaWNlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9wYXJ0Q2hvaWNlXCI7XG5cbmltcG9ydCB7IHBhcnRDaG9pY2VSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFydENob2ljZVJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IG5hbWUgPSBwYXJ0Q2hvaWNlUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBwYXJ0Q2hvaWNlRGVmaW5pdGlvbiA9IFBhcnRDaG9pY2VEZWZpbml0aW9uLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBwYXJ0Q2hvaWNlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9uVGVybWluYWxOb2RlID0gUGFydENob2ljZUJORk5vZGUsICAvLy9cbiAgICAgICAgICBkZWZpbml0aW9uUnVsZSA9IG5ldyBQYXJ0Q2hvaWNlUnVsZShuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIGRlZmluaXRpb25SdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgUGFydEJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3BhcnRcIjtcbmltcG9ydCBSdWxlTmFtZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcnVsZU5hbWVcIjtcblxuaW1wb3J0IHsgcXVhbnRpZmllclJ1bGVOYW1lLCBvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSwgb25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lLCB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdWFudGlmaWVyUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgbmFtZSA9IHF1YW50aWZpZXJSdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lRGVmaW5pdGlvbiA9IFJ1bGVOYW1lRGVmaW5pdGlvbi5mcm9tUnVsZU5hbWUob3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZURlZmluaXRpb24gPSBSdWxlTmFtZURlZmluaXRpb24uZnJvbVJ1bGVOYW1lKG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSksXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZURlZmluaXRpb24gPSBSdWxlTmFtZURlZmluaXRpb24uZnJvbVJ1bGVOYW1lKHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUpLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBQYXJ0Qk5GTm9kZSwgIC8vL1xuICAgICAgICAgIHF1YW50aWZpZXJSdWxlID0gbmV3IFF1YW50aWZpZXJSdWxlKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gcXVhbnRpZmllclJ1bGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uLy4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgcGFydFJ1bGVOYW1lLCBwcmVjZWRlbmNlUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5pbXBvcnQgeyBub2RlRnJvbUNoaWxkTm9kZXNBbmRSdWxlTmFtZSwgbm9kZXNGcm9tQ2hpbGROb2Rlc0FuZFJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9ub2RlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmluaXRpb25CTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVEZWZpbml0aW9uKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBwYXJ0Qk5GTm9kZXMgPSBub2Rlc0Zyb21DaGlsZE5vZGVzQW5kUnVsZU5hbWUoY2hpbGROb2RlcywgcGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICBwcmVjZWRlbmNlQk5GTm9kZSA9IG5vZGVGcm9tQ2hpbGROb2Rlc0FuZFJ1bGVOYW1lKGNoaWxkTm9kZXMsIHByZWNlZGVuY2VSdWxlTmFtZSksXG4gICAgICAgICAgbG9va0FoZWFkID0gZmFsc2UsICAvLy9cbiAgICAgICAgICBwYXJ0cyA9IHBhcnRCTkZOb2Rlcy5tYXAoKHBhcnRCTkZOb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0ID0gcGFydEJORk5vZGUuZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCk7XG4gIFxuICAgICAgICAgICAgcmV0dXJuIHBhcnQ7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcHJlY2VkZW5jZSA9IChwcmVjZWRlbmNlQk5GTm9kZSA9PT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjZWRlbmNlQk5GTm9kZS5nZXRQcmVjZWRlbmNlKCksXG4gICAgICAgICAgZGVmaW5pdGlvbiA9IERlZmluaXRpb24uZnJvbVBhcnRzQW5kUHJlY2VkZW5jZShwYXJ0cywgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kQW1iaWd1b3VzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBhbWJpZ3VvdXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kQW1iaWd1b3VzKERlZmluaXRpb25CTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2RlcywgYW1iaWd1b3VzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IE9wdGlvbmFsUGFydFBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0XCI7XG5pbXBvcnQgT25lT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL29uZU9yTW9yZVBhcnRzXCI7XG5cbmltcG9ydCB7IHBhcnRSdWxlTmFtZSwgcHJlY2VkZW5jZVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgcGFydFJ1bGVOYW1lUGFydCA9IFJ1bGVOYW1lUGFydC5mcm9tUnVsZU5hbWUocGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICBwcmVjZWRlbmNlUnVsZU5hbWVQYXJ0ID0gUnVsZU5hbWVQYXJ0LmZyb21SdWxlTmFtZShwcmVjZWRlbmNlUnVsZU5hbWUpLFxuICAgICAgICAgIG9uZU9yTW9yZVJ1bGVOYW1lUGFydHNQYXJ0ID0gT25lT3JNb3JlUGFydHNQYXJ0LmZyb21QYXJ0KHBhcnRSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIG9wdGlvbmFsUHJlY2VkZW5jZVJ1bGVOYW1lUGFydFBhcnQgPSBPcHRpb25hbFBhcnRQYXJ0LmZyb21QYXJ0KHByZWNlZGVuY2VSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgb25lT3JNb3JlUnVsZU5hbWVQYXJ0c1BhcnQsXG4gICAgICAgICAgICBvcHRpb25hbFByZWNlZGVuY2VSdWxlTmFtZVBhcnRQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICBkZWZpbml0aW9uRGVmaW5pdGlvbiA9IG5ldyBEZWZpbml0aW9uRGVmaW5pdGlvbihwYXJ0cywgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbkRlZmluaXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBEZWZpbml0aW9uQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvZGVmaW5pdGlvblwiO1xuaW1wb3J0IERlZmluaXRpb25EZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL2RlZmluaXRpb25cIjtcblxuaW1wb3J0IHsgZGVmaW5pdGlvblJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgbmFtZSA9IGRlZmluaXRpb25SdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIGRlZmluaXRpb25EZWZpbml0aW9uID0gRGVmaW5pdGlvbkRlZmluaXRpb24uZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGRlZmluaXRpb25EZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBEZWZpbml0aW9uQk5GTm9kZSwgIC8vL1xuICAgICAgICAgIGRlZmluaXRpb25SdWxlID0gbmV3IERlZmluaXRpb25SdWxlKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvblJ1bGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuY29uc3QgeyBzZWNvbmQgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcmVjZWRlbmNlQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdldFByZWNlZGVuY2UoKSB7XG4gICAgbGV0IHByZWNlZGVuY2UgPSBJbmZpbml0eTtcblxuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBjaGlsZE5vZGVzTGVuZ3RoID0gY2hpbGROb2Rlcy5sZW5ndGg7XG5cbiAgICBpZiAoY2hpbGROb2Rlc0xlbmd0aCA9PT0gMykge1xuICAgICAgY29uc3Qgc2Vjb25kQ2hpbGROb2RlID0gc2Vjb25kKGNoaWxkTm9kZXMpLFxuICAgICAgICAgICAgdGVybWluYWxOb2RlID0gc2Vjb25kQ2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgICBjb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKTtcblxuICAgICAgcHJlY2VkZW5jZSA9IE51bWJlcihjb250ZW50KTsgLy8vXG4gICAgfVxuXG4gICAgcmV0dXJuIHByZWNlZGVuY2U7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZEFtYmlndW91cyhydWxlTmFtZSwgY2hpbGROb2RlcywgYW1iaWd1b3VzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZEFtYmlndW91cyhQcmVjZWRlbmNlQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMsIGFtYmlndW91cyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgdHlwZXMsIHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IE9wdGlvbmFsUGFydFBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvb3B0aW9uYWxQYXJ0XCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmNvbnN0IHsgbnVtYmVyVHlwZSB9ID0gdHlwZXMsXG4gICAgICB7IG9wZW5CcmFja2V0LCBjbG9zZUJyYWNrZXQgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcmVjZWRlbmNlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlblR5cGUgPSBudW1iZXJUeXBlLCAgLy8vXG4gICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBvcGVuQnJhY2tldCwgLy8vXG4gICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50ID0gY2xvc2VCcmFja2V0LCAvLy9cbiAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCA9IFRlcm1pbmFsU3ltYm9sUGFydC5mcm9tQ29udGVudChvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0ID0gVGVybWluYWxTeW1ib2xQYXJ0LmZyb21Db250ZW50KGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgbnVtYmVyU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0ID0gU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0LmZyb21TaWduaWZpY2FudFRva2VuVHlwZShzaWduaWZpY2FudFRva2VuVHlwZSksXG4gICAgICAgICAgb3B0aW9uYWxOdW1iZXJTaWduaWZpY2FudFRva2VuVHlwZVBhcnRQYXJ0ID0gT3B0aW9uYWxQYXJ0UGFydC5mcm9tUGFydChudW1iZXJTaWduaWZpY2FudFRva2VuVHlwZVBhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQsXG4gICAgICAgICAgICBvcHRpb25hbE51bWJlclNpZ25pZmljYW50VG9rZW5UeXBlUGFydFBhcnQsXG4gICAgICAgICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnRcbiAgICAgICAgICBdLFxuICAgICAgICAgIHByZWNlZGVuY2UgPSBudWxsLFxuICAgICAgICAgIHByZWNlZGVuY2VEZWZpbml0aW9uID0gbmV3IFByZWNlZGVuY2VEZWZpbml0aW9uKHBhcnRzLCBwcmVjZWRlbmNlKTtcblxuICAgIHJldHVybiBwcmVjZWRlbmNlRGVmaW5pdGlvbjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFByZWNlZGVuY2VCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9wcmVjZWRlbmNlXCI7XG5pbXBvcnQgUHJlY2VkZW5jZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcHJlY2VkZW5jZVwiO1xuXG5pbXBvcnQgeyBwcmVjZWRlbmNlUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByZWNlZGVuY2VSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBuYW1lID0gcHJlY2VkZW5jZVJ1bGVOYW1lLCAgLy8vXG4gICAgICAgICAgcHJlY2VkZW5jZURlZmluaXRpb24gPSBQcmVjZWRlbmNlRGVmaW5pdGlvbi5mcm9tTm90aGluZygpLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgcHJlY2VkZW5jZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IFByZWNlZGVuY2VCTkZOb2RlLCAgLy8vXG4gICAgICAgICAgcHJlY2VkZW5jZVJ1bGUgPSBuZXcgUHJlY2VkZW5jZVJ1bGUobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiBwcmVjZWRlbmNlUnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmltcG9ydCB7IGRlZmluaXRpb25SdWxlTmFtZSB9IGZyb20gXCIuLi8uLi9ydWxlTmFtZXNcIjtcbmltcG9ydCB7IG5vZGVzRnJvbUNoaWxkTm9kZXNBbmRSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvbm9kZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uc0JORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZURlZmluaXRpb25zKCkge1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBkZWZpbml0aW9uQk5GTm9kZXMgPSBub2Rlc0Zyb21DaGlsZE5vZGVzQW5kUnVsZU5hbWUoY2hpbGROb2RlcywgZGVmaW5pdGlvblJ1bGVOYW1lKSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IGRlZmluaXRpb25CTkZOb2Rlcy5tYXAoKGRlZmluaXRpb25CTkZOb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZWZpbml0aW9uID0gZGVmaW5pdGlvbkJORk5vZGUuZ2VuZXJhdGVEZWZpbml0aW9uKCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgICAgICAgIH0pO1xuICAgIFxuICAgIHJldHVybiBkZWZpbml0aW9ucztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kQW1iaWd1b3VzKHJ1bGVOYW1lLCBjaGlsZE5vZGUsIGFtYmlndW91cykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMoRGVmaW5pdGlvbnNCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2RlLCBhbWJpZ3VvdXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbFBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWxcIjtcblxuaW1wb3J0IHsgcGFyc2VQYXJ0cyB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvcGFyc2VcIjtcbmltcG9ydCB7IFNlcXVlbmNlT2ZQYXJ0c1BhcnRUeXBlIH0gZnJvbSBcIi4uLy4uL3BhcnRUeXBlc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXF1ZW5jZU9mUGFydHNQYXJ0IGV4dGVuZHMgTm9uVGVybWluYWxQYXJ0IHtcbiAgY29uc3RydWN0b3IodHlwZSwgbG9va0FoZWFkLCBwYXJ0cykge1xuICAgIHN1cGVyKHR5cGUsIGxvb2tBaGVhZCk7XG5cbiAgICB0aGlzLnBhcnRzID0gcGFydHM7XG4gIH1cblxuICBnZXRQYXJ0cygpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJ0cztcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCkge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLFxuICAgICAgICAgIG5vZGVzTGVuZ3RoID0gbm9kZXMubGVuZ3RoO1xuXG4gICAgY2FsbGJhY2sgPSAoY2FsbEFoZWFkID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICBudWxsIDpcbiAgICAgICAgICAgICAgICAgICAgKCkgPT4geyAgLy8vXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IHBhcnNlZDtcblxuICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZCA9IGNhbGxBaGVhZCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgIHBhcnNlZCA9IHBhcnNlUGFydHModGhpcy5wYXJ0cywgbm9kZXMsIHN0YXRlLCBjYWxsYmFjaywgY2FsbEFoZWFkKTtcblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICBjb25zdCBzdGFydCA9IG5vZGVzTGVuZ3RoOyAgLy8vXG5cbiAgICAgIG5vZGVzLnNwbGljZShzdGFydCk7XG5cbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3QgcGFydHNTdHJpbmcgPSB0aGlzLnBhcnRzLnJlZHVjZSgocGFydHNTdHJpbmcsIHBhcnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRTdHJpbmcgPSBwYXJ0LmFzU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIGlmIChwYXJ0c1N0cmluZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICBwYXJ0c1N0cmluZyA9IHBhcnRTdHJpbmc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwYXJ0c1N0cmluZyA9IGAke3BhcnRzU3RyaW5nfSAke3BhcnRTdHJpbmd9YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHBhcnRzU3RyaW5nO1xuICAgICAgICAgIH0sIG51bGwpLFxuICAgICAgICAgIHN0cmluZyA9IGAoICR7cGFydHNTdHJpbmd9IClgO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUGFydHMocGFydHMpIHtcbiAgICBjb25zdCB0eXBlID0gU2VxdWVuY2VPZlBhcnRzUGFydFR5cGUsXG4gICAgICAgICAgbG9va0FoZWFkID0gZmFsc2UsXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUGFydCA9IG5ldyBTZXF1ZW5jZU9mUGFydHNQYXJ0KHR5cGUsIGxvb2tBaGVhZCwgcGFydHMpO1xuXG4gICAgcmV0dXJuIHNlcXVlbmNlT2ZQYXJ0c1BhcnQ7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5pbXBvcnQgWmVyb09yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC96ZXJvT3JNb3JlUGFydHNcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBkZWZpbml0aW9uUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgdmVydGljYWxCYXIgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZpbml0aW9uc0RlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGxldCBwYXJ0cztcblxuICAgIGNvbnN0IGNvbnRlbnQgPSB2ZXJ0aWNhbEJhciwgIC8vL1xuICAgICAgICAgIGRlZmluaXRpb25SdWxlTmFtZVBhcnQgPSBSdWxlTmFtZVBhcnQuZnJvbVJ1bGVOYW1lKGRlZmluaXRpb25SdWxlTmFtZSksXG4gICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFBhcnQgPSBUZXJtaW5hbFN5bWJvbFBhcnQuZnJvbUNvbnRlbnQoY29udGVudCk7XG5cbiAgICBwYXJ0cyA9IFtcbiAgICAgIHZlcnRpY2FsQmFyVGVybWluYWxTeW1ib2xQYXJ0LFxuICAgICAgZGVmaW5pdGlvblJ1bGVOYW1lUGFydFxuICAgIF07XG5cbiAgICBjb25zdCBzZXF1ZW5jZU9mUGFydHNQYXJ0ID0gU2VxdWVuY2VPZlBhcnRzUGFydC5mcm9tUGFydHMocGFydHMpLFxuICAgICAgICAgIHplcm9Pck1vcmVTZXF1ZW5jZU9mUGFydHNQYXJ0ID0gWmVyb09yTW9yZVBhcnRzUGFydC5mcm9tUGFydChzZXF1ZW5jZU9mUGFydHNQYXJ0KTtcblxuICAgIHBhcnRzID0gW1xuICAgICAgZGVmaW5pdGlvblJ1bGVOYW1lUGFydCxcbiAgICAgIHplcm9Pck1vcmVTZXF1ZW5jZU9mUGFydHNQYXJ0XG4gICAgXTtcblxuICAgIGNvbnN0IHByZWNlZGVuY2UgPSBudWxsLFxuICAgICAgICAgIGRlZmluaXRpb25zRGVmaW5pdGlvbiA9IG5ldyBEZWZpbml0aW9uc0RlZmluaXRpb24ocGFydHMsIHByZWNlZGVuY2UpO1xuXG4gICAgcmV0dXJuIGRlZmluaXRpb25zRGVmaW5pdGlvbjtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IERlZmluaXRpb25zQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvZGVmaW5pdGlvbnNcIjtcbmltcG9ydCBEZWZpbml0aW9uc0RlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vZGVmaW5pdGlvbnNcIjtcblxuaW1wb3J0IHsgZGVmaW5pdGlvbnNSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVmaW5pdGlvbnNSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBkZWZpbml0aW9uc0RlZmluaXRpb24gPSBEZWZpbml0aW9uc0RlZmluaXRpb24uZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBuYW1lID0gZGVmaW5pdGlvbnNSdWxlTmFtZSwgLy8vXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBkZWZpbml0aW9uc0RlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IERlZmluaXRpb25zQk5GTm9kZSwgLy8vXG4gICAgICAgICAgZGVmaW5pdGlvbnNSdWxlID0gbmV3IERlZmluaXRpb25zUnVsZShuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIGRlZmluaXRpb25zUnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxQYXJ0Qk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgICBub2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICBwYXJ0ID0gbm9kZS5nZW5lcmF0ZVBhcnQobG9va0FoZWFkKTtcblxuICAgIHJldHVybiBwYXJ0O1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMocnVsZU5hbWUsIGNoaWxkTm9kZXMsIGFtYmlndW91cykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMoVGVybWluYWxQYXJ0Qk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMsIGFtYmlndW91cyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBSdWxlTmFtZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcnVsZU5hbWVcIjtcbmltcG9ydCBUZXJtaW5hbFBhcnRCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9wYXJ0L3Rlcm1pbmFsXCI7XG5cbmltcG9ydCB7IGVwc2lsb25SdWxlTmFtZSxcbiAgICAgICAgIHdpbGRjYXJkUnVsZU5hbWUsXG4gICAgICAgICBlbmRPZkxpbmVSdWxlTmFtZSxcbiAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGVOYW1lLFxuICAgICAgICAgdGVybWluYWxTeW1ib2xSdWxlTmFtZSxcbiAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWUsXG4gICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXJtaW5hbFBhcnRSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBuYW1lID0gdGVybWluYWxQYXJ0UnVsZU5hbWUsXG4gICAgICAgICAgZXBzaWxvblJ1bGVOYW1lRGVmaW5pdGlvbiA9IFJ1bGVOYW1lRGVmaW5pdGlvbi5mcm9tUnVsZU5hbWUoZXBzaWxvblJ1bGVOYW1lKSxcbiAgICAgICAgICB3aWxkY2FyZFJ1bGVOYW1lRGVmaW5pdGlvbiA9IFJ1bGVOYW1lRGVmaW5pdGlvbi5mcm9tUnVsZU5hbWUod2lsZGNhcmRSdWxlTmFtZSksXG4gICAgICAgICAgZW5kT2ZMaW5lUnVsZU5hbWVEZWZpbml0aW9uID0gUnVsZU5hbWVEZWZpbml0aW9uLmZyb21SdWxlTmFtZShlbmRPZkxpbmVSdWxlTmFtZSksXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xSdWxlTmFtZURlZmluaXRpb24gPSBSdWxlTmFtZURlZmluaXRpb24uZnJvbVJ1bGVOYW1lKHRlcm1pbmFsU3ltYm9sUnVsZU5hbWUpLFxuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWVEZWZpbml0aW9uID0gUnVsZU5hbWVEZWZpbml0aW9uLmZyb21SdWxlTmFtZShyZWd1bGFyRXhwcmVzc2lvblJ1bGVOYW1lKSxcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lRGVmaW5pdGlvbiA9IFJ1bGVOYW1lRGVmaW5pdGlvbi5mcm9tUnVsZU5hbWUoc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSksXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICBlbmRPZkxpbmVSdWxlTmFtZURlZmluaXRpb24sXG4gICAgICAgICAgICB3aWxkY2FyZFJ1bGVOYW1lRGVmaW5pdGlvbixcbiAgICAgICAgICAgIGVwc2lsb25SdWxlTmFtZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IFRlcm1pbmFsUGFydEJORk5vZGUsXG4gICAgICAgICAgdGVybWluYWxQYXJ0UnVsZSA9IG5ldyBUZXJtaW5hbFBhcnRSdWxlKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gdGVybWluYWxQYXJ0UnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5pbXBvcnQgQ2hvaWNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4uLy4uL3BhcnQvbm9uVGVybWluYWwvY2hvaWNlT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBwYXJ0Q2hvaWNlUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vcnVsZU5hbWVzXCI7XG5pbXBvcnQgeyBub2Rlc0Zyb21DaGlsZE5vZGVzQW5kUnVsZU5hbWUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL25vZGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hvaWNlT2ZQYXJ0c0JORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIHBhcnRDaG9pY2VCTkZOb2RlcyA9IG5vZGVzRnJvbUNoaWxkTm9kZXNBbmRSdWxlTmFtZShjaGlsZE5vZGVzLCBwYXJ0Q2hvaWNlUnVsZU5hbWUpO1xuXG4gICAgbG9va0FoZWFkID0gZmFsc2U7ICAvLy9cblxuICAgIGNvbnN0IHBhcnRDaG9pY2VzID0gcGFydENob2ljZUJORk5vZGVzLm1hcCgocGFydENob2ljZUJORk5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRDaG9pY2UgPSBwYXJ0Q2hvaWNlQk5GTm9kZS5nZW5lcmF0ZVBhcnRDaG9pY2UobG9va0FoZWFkKTtcblxuICAgICAgICAgICAgcmV0dXJuIHBhcnRDaG9pY2U7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgY2hvaWNlT2ZQYXJ0c1BhcnQgPSBDaG9pY2VPZlBhcnRzUGFydC5mcm9tUGFydENob2ljZXMocGFydENob2ljZXMpLFxuICAgICAgICAgIHBhcnQgPSBjaG9pY2VPZlBhcnRzUGFydDsgLy8vXG5cbiAgICByZXR1cm4gcGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kQW1iaWd1b3VzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBhbWJpZ3VvdXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kQW1iaWd1b3VzKENob2ljZU9mUGFydHNCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2RlcywgYW1iaWd1b3VzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvcnVsZU5hbWVcIjtcbmltcG9ydCBPcHRpb25hbFBhcnRQYXJ0IGZyb20gXCIuLi9wYXJ0L25vblRlcm1pbmFsL29wdGlvbmFsUGFydFwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuaW1wb3J0IFNlcXVlbmNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4uL3BhcnQvbm9uVGVybWluYWwvc2VxdWVuY2VPZlBhcnRzXCI7XG5cbmltcG9ydCB7IHBhcnRDaG9pY2VSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyB2ZXJ0aWNhbEJhciwgb3BlbkJyYWNrZXQsIGNsb3NlQnJhY2tldCB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENob2ljZU9mUGFydHNEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBsZXQgcGFydHM7XG5cbiAgICBjb25zdCB2ZXJ0aWNhbEJhclRlcm1pbmFsU3ltYm9sQ29udGVudCA9IHZlcnRpY2FsQmFyLCAvLy9cbiAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCA9IG9wZW5CcmFja2V0LCAvLy9cbiAgICAgICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbENvbnRlbnQgPSBjbG9zZUJyYWNrZXQsIC8vL1xuICAgICAgICAgIHBhcnRDaG9pY2VSdWxlTmFtZVBhcnQgPSBSdWxlTmFtZVBhcnQuZnJvbVJ1bGVOYW1lKHBhcnRDaG9pY2VSdWxlTmFtZSksXG4gICAgICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFBhcnQgPSBUZXJtaW5hbFN5bWJvbFBhcnQuZnJvbUNvbnRlbnQodmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbENvbnRlbnQpLFxuICAgICAgICAgIG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0ID0gVGVybWluYWxTeW1ib2xQYXJ0LmZyb21Db250ZW50KG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50KSxcbiAgICAgICAgICBjbG9zZUJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQgPSBUZXJtaW5hbFN5bWJvbFBhcnQuZnJvbUNvbnRlbnQoY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50KTtcblxuICAgIHBhcnRzID0gW1xuICAgICAgdmVydGljYWxCYXJUZXJtaW5hbFN5bWJvbFBhcnQsXG4gICAgICBwYXJ0Q2hvaWNlUnVsZU5hbWVQYXJ0XG4gICAgXTtcblxuICAgIGNvbnN0IHNlcXVlbmNlT2ZQYXJ0c1BhcnQgPSBTZXF1ZW5jZU9mUGFydHNQYXJ0LmZyb21QYXJ0cyhwYXJ0cyksXG4gICAgICAgICAgb25lT3JNb3JlU2VxdWVuY2VPZlBhcnRzUGFydCA9IE9uZU9yTW9yZVBhcnRzUGFydC5mcm9tUGFydChzZXF1ZW5jZU9mUGFydHNQYXJ0KTtcblxuICAgIHBhcnRzID0gW1xuICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQsXG4gICAgICBwYXJ0Q2hvaWNlUnVsZU5hbWVQYXJ0LFxuICAgICAgb25lT3JNb3JlU2VxdWVuY2VPZlBhcnRzUGFydCxcbiAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydFxuICAgIF07XG5cbiAgICBjb25zdCBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICBjaG9pY2VPZlBhcnRzRGVmaW5pdGlvbiA9IG5ldyBDaG9pY2VPZlBhcnRzRGVmaW5pdGlvbihwYXJ0cywgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gY2hvaWNlT2ZQYXJ0c0RlZmluaXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBDaG9pY2VPZlBhcnRzQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvY2hvaWNlT2ZQYXJ0c1wiO1xuaW1wb3J0IENob2ljZU9mUGFydHNEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL2Nob2ljZU9mUGFydHNcIjtcblxuaW1wb3J0IHsgY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaG9pY2VPZlBhcnRzUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgbmFtZSA9IGNob2ljZU9mUGFydHNSdWxlTmFtZSwgLy8vXG4gICAgICAgICAgY2hvaWNlT2ZQYXJ0c0RlZmluaXRpb24gPSBDaG9pY2VPZlBhcnRzRGVmaW5pdGlvbi5mcm9tTm90aGluZygpLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgY2hvaWNlT2ZQYXJ0c0RlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IENob2ljZU9mUGFydHNCTkZOb2RlLCAvLy9cbiAgICAgICAgICBjaG9pY2VPZlBhcnRzUnVsZSA9IG5ldyBDaG9pY2VPZlBhcnRzUnVsZShuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIGNob2ljZU9mUGFydHNSdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsL3Rlcm1pbmFsU3ltYm9sXCI7XG5cbmNvbnN0IHsgZmlyc3QsIHNlY29uZCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlcm1pbmFsU3ltYm9sQk5GTm9kZSBleHRlbmRzIE5vblRlcm1pbmFsTm9kZSB7XG4gIHJlZ3VsYXJFeHByZXNzaW9uID0gL15cIigoPzpcXFxcLnxbXlwiXFxcXF0pKilcIiQvO1xuXG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0ID0gVGVybWluYWxTeW1ib2xQYXJ0LmZyb21Db250ZW50KGNvbnRlbnQpO1xuXG4gICAgcmV0dXJuIHRlcm1pbmFsU3ltYm9sUGFydDtcbiAgfVxuXG4gIGdldENvbnRlbnQoKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2RlcyksXG4gICAgICAgICAgdGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbE5vZGVDb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBtYXRjaGVzID0gdGVybWluYWxOb2RlQ29udGVudC5tYXRjaCh0aGlzLnJlZ3VsYXJFeHByZXNzaW9uKSxcbiAgICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgICBjb250ZW50ID0gc2Vjb25kTWF0Y2gucmVwbGFjZSgvXFxcXFxcXFwvZywgXCJcXFxcXCIpLnJlcGxhY2UoL1xcXFxcIi9nLCBcIlxcXCJcIik7XG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kQW1iaWd1b3VzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBhbWJpZ3VvdXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kQW1iaWd1b3VzKFRlcm1pbmFsU3ltYm9sQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMsIGFtYmlndW91cyk7IH1cbn1cblxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgc3RhdGljIGZyb21TaWduaWZpY2FudFRva2VuVHlwZShzaWduaWZpY2FudFRva2VuVHlwZSkge1xuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW5UeXBlUGFydCA9IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydC5mcm9tU2lnbmlmaWNhbnRUb2tlblR5cGUoc2lnbmlmaWNhbnRUb2tlblR5cGUpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gPSBuZXcgU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uKHBhcnRzLCBwcmVjZWRlbmNlKTtcblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgdHlwZXMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgVGVybWluYWxTeW1ib2xCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi90ZXJtaW5hbFN5bWJvbFwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG5pbXBvcnQgeyB0ZXJtaW5hbFN5bWJvbFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHN0cmluZ0xpdGVyYWxUeXBlIH0gPSB0eXBlcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVybWluYWxTeW1ib2xSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuVHlwZSA9IHN0cmluZ0xpdGVyYWxUeXBlLCAgLy8vXG4gICAgICAgICAgc3RyaW5nTGl0ZXJhbFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbiA9IFNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvbi5mcm9tU2lnbmlmaWNhbnRUb2tlblR5cGUoc2lnbmlmaWNhbnRUb2tlblR5cGUpLFxuICAgICAgICAgIG5hbWUgPSB0ZXJtaW5hbFN5bWJvbFJ1bGVOYW1lLCAgLy8vXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBzdHJpbmdMaXRlcmFsU2lnbmlmaWNhbnRUb2tlblR5cGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBUZXJtaW5hbFN5bWJvbEJORk5vZGUsXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xSdWxlID0gbmV3IFRlcm1pbmFsU3ltYm9sUnVsZShuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIHRlcm1pbmFsU3ltYm9sUnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vblRlcm1pbmFsUGFydEJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIG5vZGVzID0gY2hpbGROb2Rlcy5zbGljZSgpLFxuICAgICAgICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzLCBsb29rQWhlYWQpO1xuXG4gICAgcmV0dXJuIHBhcnQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZEFtYmlndW91cyhydWxlTmFtZSwgY2hpbGROb2RlcywgYW1iaWd1b3VzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZEFtYmlndW91cyhOb25UZXJtaW5hbFBhcnRCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2RlcywgYW1iaWd1b3VzKTsgfVxufVxuXG5mdW5jdGlvbiBwYXJ0RnJvbU5vZGVzKG5vZGVzLCBsb29rQWhlYWQpIHtcbiAgbGV0IHBhcnQgPSBudWxsO1xuXG4gIGNvbnN0IG5vZGVzTGVuZ3RoID0gbm9kZXMubGVuZ3RoO1xuXG4gIGlmIChub2Rlc0xlbmd0aCA9PT0gMSkge1xuICAgIGNvbnN0IG5vZGUgPSBub2Rlcy5wb3AoKTtcblxuICAgIHBhcnQgPSBub2RlLmdlbmVyYXRlUGFydChsb29rQWhlYWQpO1xuICB9IGVsc2Uge1xuICAgIG5vZGVzLnBvcCgpO1xuXG4gICAgbG9va0FoZWFkID0gdHJ1ZTtcblxuICAgIHBhcnQgPSBwYXJ0RnJvbU5vZGVzKG5vZGVzLCBsb29rQWhlYWQpO1xuICB9XG5cbiAgcmV0dXJuIHBhcnQ7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi8uLi8uLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUnVsZU5hbWVQYXJ0IGZyb20gXCIuLi8uLi8uLi9wYXJ0L25vblRlcm1pbmFsL3J1bGVOYW1lXCI7XG5pbXBvcnQgT3B0aW9uYWxQYXJ0UGFydCBmcm9tIFwiLi4vLi4vLi4vcGFydC9ub25UZXJtaW5hbC9vcHRpb25hbFBhcnRcIjtcblxuaW1wb3J0IHsgcnVsZU5hbWVSdWxlTmFtZSwgbG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi8uLi8uLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZU5hbWVOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgcnVsZU5hbWVSdWxlTmFtZVBhcnQgPSBSdWxlTmFtZVBhcnQuZnJvbVJ1bGVOYW1lKHJ1bGVOYW1lUnVsZU5hbWUpLFxuICAgICAgICAgIGxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWVQYXJ0ID0gUnVsZU5hbWVQYXJ0LmZyb21SdWxlTmFtZShsb29rQWhlYWRNb2RpZmllclJ1bGVOYW1lKSxcbiAgICAgICAgICBvcHRpb25hbExvb2tBaGVhZFJ1bGVOYW1lUGFydFBhcnQgPSBPcHRpb25hbFBhcnRQYXJ0LmZyb21QYXJ0KGxvb2tBaGVhZE1vZGlmaWVyUnVsZU5hbWVQYXJ0KSxcbiAgICAgICAgICBwYXJ0cyA9IFtcbiAgICAgICAgICAgIHJ1bGVOYW1lUnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgb3B0aW9uYWxMb29rQWhlYWRSdWxlTmFtZVBhcnRQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICBydWxlTmFtZU5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uID0gbmV3IFJ1bGVOYW1lTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24ocGFydHMsIHByZWNlZGVuY2UpO1xuXG4gICAgcmV0dXJuIHJ1bGVOYW1lTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBSdWxlTmFtZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcnVsZU5hbWVcIjtcbmltcG9ydCBOb25UZXJtaW5hbFBhcnRCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9wYXJ0L25vblRlcm1pbmFsXCI7XG5pbXBvcnQgUnVsZU5hbWVOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9wYXJ0UnVsZS9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuXG5pbXBvcnQgeyBub25UZXJtaW5hbFBhcnRSdWxlTmFtZSwgY2hvaWNlT2ZQYXJ0c1J1bGVOYW1lLCBzZXF1ZW5jZU9mUGFydHNSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9uVGVybWluYWxQYXJ0UnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgbmFtZSA9IG5vblRlcm1pbmFsUGFydFJ1bGVOYW1lLCAvLy9cbiAgICAgICAgICBjaG9pY2VPZlBhcnRzUnVsZU5hbWVEZWZpbml0aW9uID0gUnVsZU5hbWVEZWZpbml0aW9uLmZyb21SdWxlTmFtZShjaG9pY2VPZlBhcnRzUnVsZU5hbWUpLFxuICAgICAgICAgIHNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lRGVmaW5pdGlvbiA9IFJ1bGVOYW1lRGVmaW5pdGlvbi5mcm9tUnVsZU5hbWUoc2VxdWVuY2VPZlBhcnRzUnVsZU5hbWUpLFxuICAgICAgICAgIHJ1bGVOYW1lTm9uVGVybWluYWxQYXJ0UnVsZURlZmluaXRpb24gPSBSdWxlTmFtZU5vblRlcm1pbmFsUGFydFJ1bGVEZWZpbml0aW9uLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICBjaG9pY2VPZlBhcnRzUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUnVsZU5hbWVEZWZpbml0aW9uLFxuICAgICAgICAgICAgcnVsZU5hbWVOb25UZXJtaW5hbFBhcnRSdWxlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9uVGVybWluYWxOb2RlID0gTm9uVGVybWluYWxQYXJ0Qk5GTm9kZSwgLy8vXG4gICAgICAgICAgbm9uVGVybWluYWxQYXJ0UnVsZSA9IG5ldyBOb25UZXJtaW5hbFBhcnRSdWxlKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gbm9uVGVybWluYWxQYXJ0UnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTm9uVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL25vblRlcm1pbmFsXCI7XG5pbXBvcnQgU2VxdWVuY2VPZlBhcnRzUGFydCBmcm9tIFwiLi4vLi4vcGFydC9ub25UZXJtaW5hbC9zZXF1ZW5jZU9mUGFydHNcIjtcblxuaW1wb3J0IHsgcGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuaW1wb3J0IHsgbm9kZXNGcm9tQ2hpbGROb2Rlc0FuZFJ1bGVOYW1lIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9ub2RlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlcXVlbmNlT2ZQYXJ0c0JORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIHBhcnRCTkZOb2RlcyA9IG5vZGVzRnJvbUNoaWxkTm9kZXNBbmRSdWxlTmFtZShjaGlsZE5vZGVzLCBwYXJ0UnVsZU5hbWUpO1xuXG4gICAgbG9va0FoZWFkID0gZmFsc2U7ICAvLy9cblxuICAgIGNvbnN0IHBhcnRzID0gcGFydEJORk5vZGVzLm1hcCgocGFydEJORk5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnQgPSBwYXJ0Qk5GTm9kZS5nZW5lcmF0ZVBhcnQobG9va0FoZWFkKTtcblxuICAgICAgICAgICAgcmV0dXJuIHBhcnQ7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUGFydCA9IFNlcXVlbmNlT2ZQYXJ0c1BhcnQuZnJvbVBhcnRzKHBhcnRzKSxcbiAgICAgICAgICBwYXJ0ID0gc2VxdWVuY2VPZlBhcnRzUGFydDsgLy8vXG5cbiAgICByZXR1cm4gcGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kQW1iaWd1b3VzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBhbWJpZ3VvdXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kQW1iaWd1b3VzKFNlcXVlbmNlT2ZQYXJ0c0JORk5vZGUsIHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBhbWJpZ3VvdXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvblwiO1xuaW1wb3J0IFJ1bGVOYW1lUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuaW1wb3J0IE9uZU9yTW9yZVBhcnRzUGFydCBmcm9tIFwiLi4vcGFydC9ub25UZXJtaW5hbC9vbmVPck1vcmVQYXJ0c1wiO1xuXG5pbXBvcnQgeyBwYXJ0UnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgb3BlbkJyYWNrZXQsIGNsb3NlQnJhY2tldCB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IG9wZW5CcmFja2V0VGVybWluYWxTeW1ib2xDb250ZW50ID0gb3BlbkJyYWNrZXQsIC8vL1xuICAgICAgICAgIGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCA9IGNsb3NlQnJhY2tldCwgLy8vXG4gICAgICAgICAgcGFydFJ1bGVOYW1lUGFydCA9IFJ1bGVOYW1lUGFydC5mcm9tUnVsZU5hbWUocGFydFJ1bGVOYW1lKSxcbiAgICAgICAgICBvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sUGFydCA9IFRlcm1pbmFsU3ltYm9sUGFydC5mcm9tQ29udGVudChvcGVuQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0ID0gVGVybWluYWxTeW1ib2xQYXJ0LmZyb21Db250ZW50KGNsb3NlQnJhY2tldFRlcm1pbmFsU3ltYm9sQ29udGVudCksXG4gICAgICAgICAgb25lT3JNb3JlUGFydFJ1bGVOYW1lUGFydHNQYXJ0ID0gT25lT3JNb3JlUGFydHNQYXJ0LmZyb21QYXJ0KHBhcnRSdWxlTmFtZVBhcnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgb3BlbkJyYWNrZXRUZXJtaW5hbFN5bWJvbFBhcnQsXG4gICAgICAgICAgICBwYXJ0UnVsZU5hbWVQYXJ0LFxuICAgICAgICAgICAgb25lT3JNb3JlUGFydFJ1bGVOYW1lUGFydHNQYXJ0LFxuICAgICAgICAgICAgY2xvc2VCcmFja2V0VGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNEZWZpbml0aW9uID0gbmV3IFNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb24ocGFydHMsIHByZWNlZGVuY2UpO1xuXG4gICAgcmV0dXJuIHNlcXVlbmNlT2ZQYXJ0c0RlZmluaXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9zZXF1ZW5jZU9mUGFydHNcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3NlcXVlbmNlT2ZQYXJ0c1wiO1xuXG5pbXBvcnQgeyBzZXF1ZW5jZU9mUGFydHNSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VxdWVuY2VPZlBhcnRzUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgbmFtZSA9IHNlcXVlbmNlT2ZQYXJ0c1J1bGVOYW1lLCAvLy9cbiAgICAgICAgICBzZXF1ZW5jZU9mUGFydHNEZWZpbml0aW9uID0gU2VxdWVuY2VPZlBhcnRzRGVmaW5pdGlvbi5mcm9tTm90aGluZygpLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgc2VxdWVuY2VPZlBhcnRzRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9uVGVybWluYWxOb2RlID0gU2VxdWVuY2VPZlBhcnRzQk5GTm9kZSwgLy8vXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUnVsZSA9IG5ldyBTZXF1ZW5jZU9mUGFydHNSdWxlKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gc2VxdWVuY2VPZlBhcnRzUnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlIGZyb20gXCIuL3ZlcnRpY2FsQnJhbmNoXCI7XG5cbmNvbnN0IHsgTk9fV0hJVEVTUEFDRSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWUgZXh0ZW5kcyBWZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBOT19XSElURVNQQUNFLCAvLy9cbiAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGggPSBzdHJpbmdMZW5ndGgsIC8vL1xuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVdpZHRoKHZlcnRpY2FsQnJhbmNoUGFyc2VUcmVlV2lkdGgpLFxuICAgICAgICAgIHZlcnRpY2FsQnJhbmNoUG9zaXRpb24gPSB2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZS5nZXRWZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKCksXG4gICAgICAgICAgdGVybWluYWxOb2RlUGFyc2VUcmVlID0gVmVydGljYWxCcmFuY2hQYXJzZVRyZWUuZnJvbVN0cmluZ0FuZFZlcnRpY2FsQnJhbmNoUG9zaXRpb24oTm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZSwgc3RyaW5nLCB2ZXJ0aWNhbEJyYW5jaFBvc2l0aW9uKTtcblxuICAgIHRlcm1pbmFsTm9kZVBhcnNlVHJlZS5hcHBlbmRUb1RvcCh2ZXJ0aWNhbEJyYW5jaFBhcnNlVHJlZSk7XG5cbiAgICBjb25zdCBub1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlID0gdGVybWluYWxOb2RlUGFyc2VUcmVlOyAvLy9cblxuICAgIHJldHVybiBub1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUZXJtaW5hbE5vZGUgZnJvbSBcIi4uL3Rlcm1pbmFsXCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZSBmcm9tIFwiLi4vLi4vcGFyc2VUcmVlL25vV2hpdGVzcGFjZU5vZGVcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb1doaXRlc3BhY2VOb2RlIGV4dGVuZHMgVGVybWluYWxOb2RlIHtcbiAgZ2V0VHlwZSgpIHtcbiAgICBjb25zdCB0eXBlID0gbnVsbDsgIC8vL1xuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBnZXRDb250ZW50KCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBFTVBUWV9TVFJJTkc7XG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGlzTm9XaGl0ZXNwYWNlTm9kZSgpIHtcbiAgICBjb25zdCBub1doaXRlc3BhY2VOb2RlID0gdHJ1ZTtcblxuICAgIHJldHVybiBub1doaXRlc3BhY2VOb2RlO1xuICB9XG5cbiAgYXNQYXJzZVRyZWUodG9rZW5zKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlTm9kZVBhcnNlVHJlZSA9IE5vV2hpdGVzcGFjZU5vZGVQYXJzZVRyZWUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBwYXJzZVRyZWUgPSBub1doaXRlc3BhY2VOb2RlUGFyc2VUcmVlOyAgLy8vXG5cbiAgICByZXR1cm4gcGFyc2VUcmVlO1xuICB9XG5cbiAgbWF0Y2gobm9kZSwgZGVwdGgpIHtcbiAgICBsZXQgbWF0Y2hlcyA9IGZhbHNlO1xuXG4gICAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKTtcblxuICAgIGlmIChub2RlVGVybWluYWxOb2RlKSB7XG4gICAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBub2RlLCAgLy8vXG4gICAgICAgICAgICB0ZXJtaW5hbE5vZGVOb1doaXRlc3BhY2VOb2RlID0gdGVybWluYWxOb2RlLmlzTm9XaGl0ZXNwYWNlTm9kZSgpO1xuXG4gICAgICBpZiAodGVybWluYWxOb2RlTm9XaGl0ZXNwYWNlTm9kZSkge1xuICAgICAgICBtYXRjaGVzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIFRlcm1pbmFsTm9kZS5mcm9tTm90aGluZyhOb1doaXRlc3BhY2VOb2RlKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFRlcm1pbmFsUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbFwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZU5vZGUgZnJvbSBcIi4uLy4uL25vZGUvdGVybWluYWwvbm9XaGl0ZXNwYWNlXCI7XG5cbmNvbnN0IHsgTk9fV0hJVEVTUEFDRSB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vV2hpdGVzcGFjZVBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBpc05vV2hpdGVzcGFjZVBhcnQoKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlUGFydCA9IHRydWU7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlUGFydDtcbiAgfVxuXG4gIHBhcnNlKG5vZGVzLCBzdGF0ZSwgY2FsbGJhY2ssIGNhbGxBaGVhZCkge1xuICAgIGxldCBwYXJzZWQ7XG5cbiAgICBsZXQgbm9XaGl0ZXNwYWNlTm9kZSA9IG51bGw7XG5cbiAgICBjb25zdCBzYXZlZEluZGV4ID0gc3RhdGUuZ2V0U2F2ZWRJbmRleCgpLFxuICAgICAgICAgIG5leHRUb2tlbldoaXRlc3BhY2VUb2tlbiA9IHN0YXRlLmlzTmV4dFRva2VuV2hpdGVzcGFjZVRva2VuKCk7XG5cbiAgICBpZiAoIW5leHRUb2tlbldoaXRlc3BhY2VUb2tlbikge1xuICAgICAgbm9XaGl0ZXNwYWNlTm9kZSA9IE5vV2hpdGVzcGFjZU5vZGUuZnJvbU5vdGhpbmcoKTtcbiAgICB9XG5cbiAgICBwYXJzZWQgPSAobm9XaGl0ZXNwYWNlTm9kZSAhPT0gbnVsbClcblxuICAgIGlmIChwYXJzZWQpIHtcbiAgICAgIG5vZGVzLnB1c2gobm9XaGl0ZXNwYWNlTm9kZSk7XG5cbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgaWYgKGNhbGxBaGVhZCAhPT0gbnVsbCkge1xuICAgICAgICAgIHBhcnNlZCA9IGNhbGxBaGVhZCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gTk9fV0hJVEVTUEFDRTsgLy8vXG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZVBhcnQgPSBuZXcgTm9XaGl0ZXNwYWNlUGFydCgpO1xuXG4gICAgcmV0dXJuIG5vV2hpdGVzcGFjZVBhcnQ7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWwvbm9XaGl0ZXNwYWNlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vV2hpdGVzcGFjZVBhcnRCTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgZ2VuZXJhdGVQYXJ0KGxvb2tBaGVhZCkge1xuICAgIGNvbnN0IG5vV2hpdGVzcGFjZVBhcnQgPSBOb1doaXRlc3BhY2VQYXJ0LmZyb21Ob3RoaW5nKCk7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlUGFydDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kQW1iaWd1b3VzKHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBhbWJpZ3VvdXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kQW1iaWd1b3VzKE5vV2hpdGVzcGFjZVBhcnRCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2RlcywgYW1iaWd1b3VzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuY29uc3QgeyBOT19XSElURVNQQUNFIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBOT19XSElURVNQQUNFLCAgLy8vXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0ID0gVGVybWluYWxTeW1ib2xQYXJ0LmZyb21Db250ZW50KGNvbnRlbnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0RGVmaW5pdGlvbiA9IG5ldyBOb1doaXRlc3BhY2VQYXJ0RGVmaW5pdGlvbihwYXJ0cywgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0Qk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvbm9XaGl0ZXNwYWNlUGFydFwiO1xuaW1wb3J0IE5vV2hpdGVzcGFjZVBhcnREZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL25vV2hpdGVzcGFjZVBhcnRcIjtcblxuaW1wb3J0IHsgbm9XaGl0ZXNwYWNlUGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb1doaXRlc3BhY2VQYXJ0UnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgbm9XaGl0ZXNwYWNlUGFydERlZmluaXRpb24gPSBOb1doaXRlc3BhY2VQYXJ0RGVmaW5pdGlvbi5mcm9tTm90aGluZygpLFxuICAgICAgICAgIG5hbWUgPSBub1doaXRlc3BhY2VQYXJ0UnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnREZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBOb1doaXRlc3BhY2VQYXJ0Qk5GTm9kZSwgIC8vL1xuICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnRSdWxlID0gbmV3IE5vV2hpdGVzcGFjZVBhcnRSdWxlKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gbm9XaGl0ZXNwYWNlUGFydFJ1bGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNb2RpZmllckJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZEFtYmlndW91cyhydWxlTmFtZSwgY2hpbGROb2RlLCBhbWJpZ3VvdXMpIHsgcmV0dXJuIE5vblRlcm1pbmFsTm9kZS5mcm9tUnVsZU5hbWVDaGlsZE5vZGVzQW5kQW1iaWd1b3VzKE1vZGlmaWVyQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZSwgYW1iaWd1b3VzKTsgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL25vV2hpdGVzcGFjZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5jb25zdCB7IGVsbGlwc2lzIH0gPSBzcGVjaWFsU3ltYm9scztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9va0FoZWFkTW9kaWZpZXJSdWxlRGVmaW5pdGlvbiBleHRlbmRzIERlZmluaXRpb24ge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgY29udGVudCA9IGVsbGlwc2lzLCAgLy8vXG4gICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydCA9IE5vV2hpdGVzcGFjZVBhcnQuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnQgPSBUZXJtaW5hbFN5bWJvbFBhcnQuZnJvbUNvbnRlbnQoY29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0LFxuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICBsb29rQWhlYWRNb2RpZmllclJ1bGVEZWZpbml0aW9uID0gbmV3IExvb2tBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb24ocGFydHMsIHByZWNlZGVuY2UpO1xuXG4gICAgcmV0dXJuIGxvb2tBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBNb2RpZmllckJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL21vZGlmaWVyXCI7XG5pbXBvcnQgTG9va0FoZWFkTW9kaWZpZXJSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9sb29rQWhlYWRNb2RpZmllclJ1bGVcIjtcblxuaW1wb3J0IHsgbG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9va0FoZWFkTW9kaWZpZXJSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBuYW1lID0gbG9va0FoZWFkTW9kaWZpZXJSdWxlTmFtZSwgLy8vXG4gICAgICAgICAgbG9va0FoZWFkTW9kaWZpZXJSdWxlRGVmaW5pdGlvbiA9IExvb2tBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb24uZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGxvb2tBaGVhZE1vZGlmaWVyUnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IE1vZGlmaWVyQk5GTm9kZSwgIC8vL1xuICAgICAgICAgIGxvb2tBaGVhZE1vZGlmaWVyUnVsZSA9IG5ldyBMb29rQWhlYWRNb2RpZmllclJ1bGUobmFtZSwgYW1iaWd1b3VzLCBkZWZpbml0aW9ucywgTm9uVGVybWluYWxOb2RlKTtcblxuICAgIHJldHVybiBsb29rQWhlYWRNb2RpZmllclJ1bGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgTm9XaGl0ZXNwYWNlUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC9ub1doaXRlc3BhY2VcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4uL3BhcnQvdGVybWluYWwvdGVybWluYWxTeW1ib2xcIjtcblxuY29uc3QgeyBleGNsYW1hdGlvbk1hcmsgfSA9IHNwZWNpYWxTeW1ib2xzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBbWJpZ3VvdXNNb2RpZmllclJ1bGVEZWZpbml0aW9uIGV4dGVuZHMgRGVmaW5pdGlvbiB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBjb250ZW50ID0gZXhjbGFtYXRpb25NYXJrLCAgLy8vXG4gICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydCA9IE5vV2hpdGVzcGFjZVBhcnQuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICB0ZXJtaW5hbFN5bWJvbFBhcnQgPSBUZXJtaW5hbFN5bWJvbFBhcnQuZnJvbUNvbnRlbnQoY29udGVudCksXG4gICAgICAgICAgcGFydHMgPSBbXG4gICAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0LFxuICAgICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0XG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcmVjZWRlbmNlID0gbnVsbCxcbiAgICAgICAgICBhbWJpZ3VvdXNNb2RpZmllclJ1bGVEZWZpbml0aW9uID0gbmV3IEFtYmlndW91c01vZGlmaWVyUnVsZURlZmluaXRpb24ocGFydHMsIHByZWNlZGVuY2UpO1xuXG4gICAgcmV0dXJuIGFtYmlndW91c01vZGlmaWVyUnVsZURlZmluaXRpb247XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBNb2RpZmllckJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL21vZGlmaWVyXCI7XG5pbXBvcnQgQW1iaWd1b3VzTW9kaWZpZXJSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9hbWJpZ3VvdXNNb2RpZmllclJ1bGVcIjtcblxuaW1wb3J0IHsgYW1iaWd1b3VzTW9kaWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQW1iaWd1b3VzTW9kaWZpZXJSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBuYW1lID0gYW1iaWd1b3VzTW9kaWZpZXJSdWxlTmFtZSwgLy8vXG4gICAgICAgICAgYW1iaWd1b3VzTW9kaWZpZXJSdWxlRGVmaW5pdGlvbiA9IEFtYmlndW91c01vZGlmaWVyUnVsZURlZmluaXRpb24uZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBhbWJpZ3VvdXMgPSBmYWxzZSxcbiAgICAgICAgICBkZWZpbml0aW9ucyA9IFtcbiAgICAgICAgICAgIGFtYmlndW91c01vZGlmaWVyUnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IE1vZGlmaWVyQk5GTm9kZSxcbiAgICAgICAgICBhbWJpZ3VvdXNNb2RpZmllclJ1bGUgPSBuZXcgQW1iaWd1b3VzTW9kaWZpZXJSdWxlKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gYW1iaWd1b3VzTW9kaWZpZXJSdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgVGVybWluYWxQYXJ0IGZyb20gXCIuLi8uLi9wYXJ0L3Rlcm1pbmFsXCI7XG5pbXBvcnQgVGVybWluYWxOb2RlIGZyb20gXCIuLi8uLi9ub2RlL3Rlcm1pbmFsXCI7XG5cbmNvbnN0IHsgZmlyc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWd1bGFyRXhwcmVzc2lvblBhcnQgZXh0ZW5kcyBUZXJtaW5hbFBhcnQge1xuICBjb25zdHJ1Y3RvcihyZWd1bGFyRXhwcmVzc2lvbikge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLnJlZ3VsYXJFeHByZXNzaW9uID0gcmVndWxhckV4cHJlc3Npb247XG4gIH1cblxuICBwYXJzZShub2Rlcywgc3RhdGUsIGNhbGxiYWNrLCBjYWxsQWhlYWQpIHtcbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgbGV0IHRlcm1pbmFsTm9kZSA9IG51bGw7XG4gICAgXG4gICAgY29uc3Qgc2F2ZWRJbmRleCA9IHN0YXRlLmdldFNhdmVkSW5kZXgoKSxcbiAgICAgICAgICBuZXh0U2lnbmlmaWNhbnRUb2tlbiA9IHN0YXRlLmdldE5leHRTaWduaWZpY2FudFRva2VuKCksXG5cdFx0XHRcdFx0c2lnbmlmaWNhbnRUb2tlbiA9IG5leHRTaWduaWZpY2FudFRva2VuOyAvLy9cblxuICAgIGlmIChzaWduaWZpY2FudFRva2VuICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gc2lnbmlmaWNhbnRUb2tlbi5nZXRDb250ZW50KCksXG4gICAgICAgICAgICBtYXRjaGVzID0gY29udGVudC5tYXRjaCh0aGlzLnJlZ3VsYXJFeHByZXNzaW9uKTtcblxuICAgICAgaWYgKG1hdGNoZXMgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgZmlyc3RNYXRjaCA9IGZpcnN0KG1hdGNoZXMpO1xuXG4gICAgICAgIGlmIChmaXJzdE1hdGNoID09PSBjb250ZW50KSB7XG4gICAgICAgICAgdGVybWluYWxOb2RlID0gVGVybWluYWxOb2RlLmZyb21TaWduaWZpY2FudFRva2VuKHNpZ25pZmljYW50VG9rZW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFyc2VkID0gKHRlcm1pbmFsTm9kZSAhPT0gbnVsbCk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICBub2Rlcy5wdXNoKHRlcm1pbmFsTm9kZSk7XG5cbiAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgaWYgKGNhbGxBaGVhZCAhPT0gbnVsbCkge1xuICAgICAgICAgIHBhcnNlZCA9IGNhbGxBaGVhZCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHN0YXRlLmJhY2t0cmFjayhzYXZlZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9XG5cbiAgYXNTdHJpbmcoKSB7XG4gICAgY29uc3QgcmVndWxhckV4cHJlc3Npb25TdHJpbmcgPSB0aGlzLnJlZ3VsYXJFeHByZXNzaW9uLnRvU3RyaW5nKCksXG5cdFx0ICAgICAgc3RyaW5nID0gcmVndWxhckV4cHJlc3Npb25TdHJpbmc7IC8vL1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUmVndWxhckV4cHJlc3Npb24ocmVndWxhckV4cHJlc3Npb24pIHtcbiAgICBjb25zdCByZWd1bGFyRXhwcmVzc2lvblBhcnQgPSBuZXcgUmVndWxhckV4cHJlc3Npb25QYXJ0KHJlZ3VsYXJFeHByZXNzaW9uKTtcblxuICAgIHJldHVybiByZWd1bGFyRXhwcmVzc2lvblBhcnQ7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcbmltcG9ydCBSZWd1bGFyRXhwcmVzc2lvblBhcnQgZnJvbSBcIi4uLy4uL3BhcnQvdGVybWluYWwvcmVndWxhckV4cHJlc3Npb25cIjtcblxuY29uc3QgeyBmaXJzdCwgc2Vjb25kIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVndWxhckV4cHJlc3Npb25CTkZOb2RlIGV4dGVuZHMgTm9uVGVybWluYWxOb2RlIHtcbiAgcmVndWxhckV4cHJlc3Npb24gPSAvXlxcLygoPzpcXFxcLnxbXlxcL10pKilcXC8kLztcblxuICBnZW5lcmF0ZVBhcnQobG9va0FoZWFkKSB7XG4gICAgY29uc3QgcmVndWxhckV4cHJlc3Npb24gPSB0aGlzLmdldFJlZ3VsYXJFeHByZXNzaW9uKCksXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25QYXJ0ID0gUmVndWxhckV4cHJlc3Npb25QYXJ0LmZyb21SZWd1bGFyRXhwcmVzc2lvbihyZWd1bGFyRXhwcmVzc2lvbik7XG5cbiAgICByZXR1cm4gcmVndWxhckV4cHJlc3Npb25QYXJ0O1xuICB9XG5cbiAgZ2V0UmVndWxhckV4cHJlc3Npb24oKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2RlcyksXG4gICAgICAgICAgdGVybWluYWxOb2RlID0gZmlyc3RDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICB0ZXJtaW5hbE5vZGVDb250ZW50ID0gdGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBtYXRjaGVzID0gdGVybWluYWxOb2RlQ29udGVudC5tYXRjaCh0aGlzLnJlZ3VsYXJFeHByZXNzaW9uKSxcbiAgICAgICAgICBzZWNvbmRNYXRjaCA9IHNlY29uZChtYXRjaGVzKSxcbiAgICAgICAgICBwYXR0ZXJuID0gc2Vjb25kTWF0Y2gsIC8vL1xuICAgICAgICAgIHJlZ3VsYXJFeHByZXNzaW9uID0gbmV3IFJlZ0V4cChwYXR0ZXJuKTsgIC8vL1xuXG4gICAgcmV0dXJuIHJlZ3VsYXJFeHByZXNzaW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMocnVsZU5hbWUsIGNoaWxkTm9kZXMsIGFtYmlndW91cykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMoUmVndWxhckV4cHJlc3Npb25CTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2RlcywgYW1iaWd1b3VzKTsgfVxufVxuXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHR5cGVzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFJlZ3VsYXJFeHByZXNzaW9uQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcmVndWxhckV4cHJlc3Npb25cIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuaW1wb3J0IHsgcmVndWxhckV4cHJlc3Npb25SdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyByZWd1bGFyRXhwcmVzc2lvblR5cGUgfSA9IHR5cGVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWd1bGFyRXhwcmVzc2lvblJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHNpZ25pZmljYW50VG9rZW5UeXBlID0gcmVndWxhckV4cHJlc3Npb25UeXBlLCAgLy8vXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25TaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gPSBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24uZnJvbVNpZ25pZmljYW50VG9rZW5UeXBlKHNpZ25pZmljYW50VG9rZW5UeXBlKSxcbiAgICAgICAgICBuYW1lID0gcmVndWxhckV4cHJlc3Npb25SdWxlTmFtZSwgLy8vXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9uVGVybWluYWxOb2RlID0gUmVndWxhckV4cHJlc3Npb25CTkZOb2RlLCAvLy9cbiAgICAgICAgICByZWd1bGFyRXhwcmVzc2lvblJ1bGUgPSBuZXcgUmVndWxhckV4cHJlc3Npb25SdWxlKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gcmVndWxhckV4cHJlc3Npb25SdWxlO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBOb25UZXJtaW5hbE5vZGUgZnJvbSBcIi4uLy4uL25vZGUvbm9uVGVybWluYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXVhbnRpZmllckJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZEFtYmlndW91cyhydWxlTmFtZSwgY2hpbGROb2RlcywgYW1iaWd1b3VzKSB7IHJldHVybiBOb25UZXJtaW5hbE5vZGUuZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc0FuZEFtYmlndW91cyhRdWFudGlmaWVyQk5GTm9kZSwgcnVsZU5hbWUsIGNoaWxkTm9kZXMsIGFtYmlndW91cyk7IH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IERlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb25cIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0IGZyb20gXCIuLi9wYXJ0L3Rlcm1pbmFsL25vV2hpdGVzcGFjZVwiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUGFydCBmcm9tIFwiLi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdWFudGlmaWVyUnVsZURlZmluaXRpb24gZXh0ZW5kcyBEZWZpbml0aW9uIHtcbiAgc3RhdGljIGZyb21TcGVjaWFsU3ltYm9sKHNwZWNpYWxTeW1ib2wpIHtcbiAgICBjb25zdCBjb250ZW50ID0gc3BlY2lhbFN5bWJvbCwgIC8vL1xuICAgICAgICAgIG5vV2hpdGVzcGFjZVBhcnQgPSBOb1doaXRlc3BhY2VQYXJ0LmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgdGVybWluYWxTeW1ib2xQYXJ0ID0gVGVybWluYWxTeW1ib2xQYXJ0LmZyb21Db250ZW50KGNvbnRlbnQpLFxuICAgICAgICAgIHBhcnRzID0gW1xuICAgICAgICAgICAgbm9XaGl0ZXNwYWNlUGFydCxcbiAgICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUGFydFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJlY2VkZW5jZSA9IG51bGwsXG4gICAgICAgICAgcXVhbnRpZmllclJ1bGVEZWZpbml0aW9uID0gbmV3IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbihwYXJ0cywgcHJlY2VkZW5jZSk7XG5cbiAgICByZXR1cm4gcXVhbnRpZmllclJ1bGVEZWZpbml0aW9uO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHNwZWNpYWxTeW1ib2xzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFF1YW50aWZpZXJCTkZOb2RlIGZyb20gXCIuLi9ub2RlL2JuZi9xdWFudGlmaWVyXCI7XG5pbXBvcnQgUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uIGZyb20gXCIuLi9kZWZpbml0aW9uL3F1YW50aWZpZXJSdWxlXCI7XG5cbmltcG9ydCB7IG9wdGlvbmFsUXVhbnRpZmllclJ1bGVOYW1lIH0gZnJvbSBcIi4uL3J1bGVOYW1lc1wiO1xuXG5jb25zdCB7IHF1ZXN0aW9uTWFyayB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9wdGlvbmFsUXVhbnRpZmllclJ1bGUgZXh0ZW5kcyBSdWxlIHtcbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IG5hbWUgPSBvcHRpb25hbFF1YW50aWZpZXJSdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIHNwZWNpYWxTeW1ib2wgPSBxdWVzdGlvbk1hcmssIC8vL1xuICAgICAgICAgIG9wdGlvbmFsUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uID0gUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uLmZyb21TcGVjaWFsU3ltYm9sKHNwZWNpYWxTeW1ib2wpLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZURlZmluaXRpb25cbiAgICAgICAgICBdLFxuICAgICAgICAgIE5vblRlcm1pbmFsTm9kZSA9IFF1YW50aWZpZXJCTkZOb2RlLCAgLy8vXG4gICAgICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZSA9IG5ldyBPcHRpb25hbFF1YW50aWZpZXJSdWxlKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gb3B0aW9uYWxRdWFudGlmaWVyUnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBzcGVjaWFsU3ltYm9scyB9IGZyb20gXCJvY2NhbS1sZXhlcnNcIjtcblxuaW1wb3J0IFJ1bGUgZnJvbSBcIi4uL3J1bGVcIjtcbmltcG9ydCBRdWFudGlmaWVyQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvcXVhbnRpZmllclwiO1xuaW1wb3J0IFF1YW50aWZpZXJSdWxlRGVmaW5pdGlvbiBmcm9tIFwiLi4vZGVmaW5pdGlvbi9xdWFudGlmaWVyUnVsZVwiO1xuXG5pbXBvcnQgeyBvbmVPck1vcmVRdWFudGlmaWVyUnVsZU5hbWUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmNvbnN0IHsgcGx1cyB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlIGV4dGVuZHMgUnVsZSB7XG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHtcbiAgICBjb25zdCBuYW1lID0gb25lT3JNb3JlUXVhbnRpZmllclJ1bGVOYW1lLCAvLy9cbiAgICAgICAgICBzcGVjaWFsU3ltYm9sID0gcGx1cywgLy8vXG4gICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uID0gUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uLmZyb21TcGVjaWFsU3ltYm9sKHNwZWNpYWxTeW1ib2wpLFxuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBRdWFudGlmaWVyQk5GTm9kZSwgIC8vL1xuICAgICAgICAgIG9uZU9yTW9yZVF1YW50aWZpZXJSdWxlID0gbmV3IE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlKG5hbWUsIGFtYmlndW91cywgZGVmaW5pdGlvbnMsIE5vblRlcm1pbmFsTm9kZSk7XG5cbiAgICByZXR1cm4gb25lT3JNb3JlUXVhbnRpZmllclJ1bGU7XG4gIH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3BlY2lhbFN5bWJvbHMgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgUXVhbnRpZmllckJORk5vZGUgZnJvbSBcIi4uL25vZGUvYm5mL3F1YW50aWZpZXJcIjtcbmltcG9ydCBRdWFudGlmaWVyUnVsZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vcXVhbnRpZmllclJ1bGVcIjtcblxuaW1wb3J0IHsgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyBhc3RlcmlzayB9ID0gc3BlY2lhbFN5bWJvbHM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFplcm9Pck1vcmVRdWFudGlmaWVyUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgbmFtZSA9IHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZU5hbWUsICAvLy9cbiAgICAgICAgICBzcGVjaWFsU3ltYm9sID0gYXN0ZXJpc2ssIC8vL1xuICAgICAgICAgIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZURlZmluaXRpb24gPSBRdWFudGlmaWVyUnVsZURlZmluaXRpb24uZnJvbVNwZWNpYWxTeW1ib2woc3BlY2lhbFN5bWJvbCksXG4gICAgICAgICAgYW1iaWd1b3VzID0gZmFsc2UsXG4gICAgICAgICAgZGVmaW5pdGlvbnMgPSBbXG4gICAgICAgICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGVEZWZpbml0aW9uXG4gICAgICAgICAgXSxcbiAgICAgICAgICBOb25UZXJtaW5hbE5vZGUgPSBRdWFudGlmaWVyQk5GTm9kZSwgLy8vXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlID0gbmV3IFplcm9Pck1vcmVRdWFudGlmaWVyUnVsZShuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIHplcm9Pck1vcmVRdWFudGlmaWVyUnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IE5vblRlcm1pbmFsTm9kZSBmcm9tIFwiLi4vLi4vbm9kZS9ub25UZXJtaW5hbFwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCBmcm9tIFwiLi4vLi4vcGFydC90ZXJtaW5hbC9zaWduaWZpY2FudFRva2VuVHlwZVwiO1xuXG5jb25zdCB7IGZpcnN0LCBzZWNvbmQgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaWduaWZpY2FudFRva2VuVHlwZUJORk5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICByZWd1bGFyRXhwcmVzc2lvbiA9IC9eXFxbKFteXFxdXSspXSQvO1xuXG4gIGdlbmVyYXRlUGFydChsb29rQWhlYWQpIHtcbiAgICBjb25zdCBzaWduaWZpY2FudFRva2VuVHlwZSA9IHRoaXMuZ2V0U2lnbmlmaWNhbnRUb2tlblR5cGUoKSxcbiAgICAgICAgICBzaWduaWZpY2FudFRva2VuVHlwZVBhcnQgPSBTaWduaWZpY2FudFRva2VuVHlwZVBhcnQuZnJvbVNpZ25pZmljYW50VG9rZW5UeXBlKHNpZ25pZmljYW50VG9rZW5UeXBlKTtcblxuICAgIHJldHVybiBzaWduaWZpY2FudFRva2VuVHlwZVBhcnQ7XG4gIH1cblxuICBnZXRTaWduaWZpY2FudFRva2VuVHlwZSgpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgZmlyc3RDaGlsZE5vZGUgPSBmaXJzdChjaGlsZE5vZGVzKSxcbiAgICAgICAgICB0ZXJtaW5hbE5vZGUgPSBmaXJzdENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIHRlcm1pbmFsTm9kZUNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIG1hdGNoZXMgPSB0ZXJtaW5hbE5vZGVDb250ZW50Lm1hdGNoKHRoaXMucmVndWxhckV4cHJlc3Npb24pLFxuICAgICAgICAgIHNlY29uZE1hdGNoID0gc2Vjb25kKG1hdGNoZXMpLFxuICAgICAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlID0gc2Vjb25kTWF0Y2g7IC8vL1xuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW5UeXBlO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMocnVsZU5hbWUsIGNoaWxkTm9kZXMsIGFtYmlndW91cykgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNBbmRBbWJpZ3VvdXMoU2lnbmlmaWNhbnRUb2tlblR5cGVCTkZOb2RlLCBydWxlTmFtZSwgY2hpbGROb2RlcywgYW1iaWd1b3VzKTsgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNpZ25pZmljYW50VG9rZW5UeXBlQk5GTm9kZTtcblxuXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHR5cGVzIH0gZnJvbSBcIm9jY2FtLWxleGVyc1wiO1xuXG5pbXBvcnQgUnVsZSBmcm9tIFwiLi4vcnVsZVwiO1xuaW1wb3J0IFNpZ25pZmljYW50VG9rZW5UeXBlQk5GTm9kZSBmcm9tIFwiLi4vbm9kZS9ibmYvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcbmltcG9ydCBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gZnJvbSBcIi4uL2RlZmluaXRpb24vc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcblxuaW1wb3J0IHsgc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgeyB0eXBlVHlwZSB9ID0gdHlwZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpZ25pZmljYW50VG9rZW5UeXBlUnVsZSBleHRlbmRzIFJ1bGUge1xuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3Qgc2lnbmlmaWNhbnRUb2tlblR5cGUgPSB0eXBlVHlwZSwgIC8vL1xuICAgICAgICAgIHR5cGVTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24gPSBTaWduaWZpY2FudFRva2VuVHlwZURlZmluaXRpb24uZnJvbVNpZ25pZmljYW50VG9rZW5UeXBlKHNpZ25pZmljYW50VG9rZW5UeXBlKSxcbiAgICAgICAgICBuYW1lID0gc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlTmFtZSwgIC8vL1xuICAgICAgICAgIGFtYmlndW91cyA9IGZhbHNlLFxuICAgICAgICAgIGRlZmluaXRpb25zID0gW1xuICAgICAgICAgICAgdHlwZVNpZ25pZmljYW50VG9rZW5UeXBlRGVmaW5pdGlvblxuICAgICAgICAgIF0sXG4gICAgICAgICAgTm9uVGVybWluYWxOb2RlID0gU2lnbmlmaWNhbnRUb2tlblR5cGVCTkZOb2RlLCAgLy8vXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlID0gbmV3IFNpZ25pZmljYW50VG9rZW5UeXBlUnVsZShuYW1lLCBhbWJpZ3VvdXMsIGRlZmluaXRpb25zLCBOb25UZXJtaW5hbE5vZGUpO1xuXG4gICAgcmV0dXJuIHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuY29uc3QgeyBmaXJzdCwgcHJ1bmUgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlc0FzU3RyaW5nKHJ1bGVzLCBtdWx0aUxpbmUpIHtcbiAgY29uc3QgbWF4aW11bVJ1bGVOYW1lTGVuZ3RoID0gcnVsZXMucmVkdWNlKChtYXhpbXVtUnVsZU5hbWVMZW5ndGgsIHJ1bGUpID0+IHtcbiAgICAgICAgY29uc3QgcnVsZU5hbWUgPSBydWxlLmdldE5hbWUoKSxcbiAgICAgICAgICAgICAgYW1iaWd1b3VzID0gcnVsZS5pc0FtYmlndW91cygpO1xuXG4gICAgICAgIGxldCBydWxlTmFtZUxlbmd0aCA9IHJ1bGVOYW1lLmxlbmd0aDtcblxuICAgICAgICBpZiAoYW1iaWd1b3VzKSB7XG4gICAgICAgICAgcnVsZU5hbWVMZW5ndGgrKztcbiAgICAgICAgfVxuXG4gICAgICAgIG1heGltdW1SdWxlTmFtZUxlbmd0aCA9IE1hdGgubWF4KG1heGltdW1SdWxlTmFtZUxlbmd0aCwgcnVsZU5hbWVMZW5ndGgpO1xuXG4gICAgICAgIHJldHVybiBtYXhpbXVtUnVsZU5hbWVMZW5ndGg7XG4gICAgICB9LCAwKSxcbiAgICAgIHJ1bGVzU3RyaW5nID0gcnVsZXMucmVkdWNlKChydWxlc1N0cmluZywgcnVsZSkgPT4ge1xuICAgICAgICBjb25zdCBydWxlU3RyaW5nID0gcnVsZS5hc1N0cmluZyhtYXhpbXVtUnVsZU5hbWVMZW5ndGgsIG11bHRpTGluZSk7XG5cbiAgICAgICAgcnVsZXNTdHJpbmcgKz0gcnVsZVN0cmluZztcblxuICAgICAgICByZXR1cm4gcnVsZXNTdHJpbmc7XG4gICAgICB9LCBFTVBUWV9TVFJJTkcpLnJlcGxhY2UoL15cXG5cXG4vLCBFTVBUWV9TVFJJTkcpO1xuXG4gIHJldHVybiBydWxlc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVNYXBGcm9tUnVsZXMocnVsZXMpIHtcbiAgY29uc3QgcnVsZU1hcCA9IHt9O1xuXG4gIHJ1bGVzLmZvckVhY2goKHJ1bGUpID0+IHtcbiAgICBjb25zdCBydWxlTmFtZSA9IHJ1bGUuZ2V0TmFtZSgpO1xuXG4gICAgcnVsZU1hcFtydWxlTmFtZV0gPSBydWxlO1xuICB9KTtcblxuICByZXR1cm4gcnVsZU1hcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0UnVsZUZyb21SdWxlcyhydWxlcykge1xuICBjb25zdCBmaXJzdFJ1bGUgPSBmaXJzdChydWxlcyksXG4gICAgICAgIHN0YXJ0UnVsZSA9IGZpcnN0UnVsZTsgIC8vL1xuXG4gIHJldHVybiBzdGFydFJ1bGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydWxlc0Zyb21TdGFydFJ1bGVBbmRSdWxlTWFwKHN0YXJ0UnVsZSwgcnVsZU1hcCkge1xuICBjb25zdCBydWxlcyA9IE9iamVjdC52YWx1ZXMocnVsZU1hcCksXG4gICAgICAgIHN0YXJ0UnVsZU5hbWUgPSBzdGFydFJ1bGUuZ2V0TmFtZSgpO1xuXG4gIHN0YXJ0UnVsZSA9IHBydW5lKHJ1bGVzLCAocnVsZSkgPT4geyAgLy8vXG4gICAgY29uc3QgcnVsZU5hbWUgPSBydWxlLmdldE5hbWUoKTtcblxuICAgIGlmIChydWxlTmFtZSAhPT0gc3RhcnRSdWxlTmFtZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICBydWxlcy51bnNoaWZ0KHN0YXJ0UnVsZSk7XG5cbiAgcmV0dXJuIHJ1bGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRSdWxlRnJvbVJ1bGVzQW5kU3RhcnRSdWxlTmFtZShydWxlcywgc3RhcnRSdWxlTmFtZSkge1xuICBsZXQgc3RhcnRSdWxlID0gcnVsZXMuZmluZCgocnVsZSkgPT4ge1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gcnVsZS5nZXROYW1lKCk7XG5cbiAgICBpZiAocnVsZU5hbWUgPT09IHN0YXJ0UnVsZU5hbWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSkgfHwgbnVsbDsgLy8vXG5cbiAgaWYgKHN0YXJ0UnVsZSA9PT0gbnVsbCkge1xuICAgIHN0YXJ0UnVsZSA9IHN0YXJ0UnVsZUZyb21SdWxlcyhydWxlcyk7XG4gIH1cblxuICByZXR1cm4gc3RhcnRSdWxlO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHJ1bGVzQXNTdHJpbmcsXG4gIHJ1bGVNYXBGcm9tUnVsZXMsXG4gIHN0YXJ0UnVsZUZyb21SdWxlcyxcbiAgcnVsZXNGcm9tU3RhcnRSdWxlQW5kUnVsZU1hcCxcbiAgc3RhcnRSdWxlRnJvbVJ1bGVzQW5kU3RhcnRSdWxlTmFtZVxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGJuZiBmcm9tIFwiLi9ibmZcIjtcbmltcG9ydCBSdWxlIGZyb20gXCIuLi9ydWxlXCI7XG5pbXBvcnQgTmFtZVJ1bGUgZnJvbSBcIi4uL3J1bGUvbmFtZVwiO1xuaW1wb3J0IFBhcnRSdWxlIGZyb20gXCIuLi9ydWxlL3BhcnRcIjtcbmltcG9ydCBSdWxlUnVsZSBmcm9tIFwiLi4vcnVsZS9ydWxlXCI7XG5pbXBvcnQgRXJyb3JSdWxlIGZyb20gXCIuLi9ydWxlL2Vycm9yXCI7XG5pbXBvcnQgRXBzaWxvblJ1bGUgZnJvbSBcIi4uL3J1bGUvZXBzaWxvblwiO1xuaW1wb3J0IERvY3VtZW50UnVsZSBmcm9tIFwiLi4vcnVsZS9kb2N1bWVudFwiO1xuaW1wb3J0IFJ1bGVOYW1lUnVsZSBmcm9tIFwiLi4vcnVsZS9ydWxlTmFtZVwiO1xuaW1wb3J0IFdpbGRjYXJkUnVsZSBmcm9tIFwiLi4vcnVsZS93aWxkY2FyZFwiO1xuaW1wb3J0IHBhcnNlck1peGlucyBmcm9tIFwiLi4vbWl4aW5zL3BhcnNlclwiO1xuaW1wb3J0IEVuZE9mTGluZVJ1bGUgZnJvbSBcIi4uL3J1bGUvZW5kT2ZMaW5lXCI7XG5pbXBvcnQgUGFydENob2ljZVJ1bGUgZnJvbSBcIi4uL3J1bGUvcGFydENob2ljZVwiO1xuaW1wb3J0IFF1YW50aWZpZXJSdWxlIGZyb20gXCIuLi9ydWxlL3F1YW50aWZpZXJcIjtcbmltcG9ydCBEZWZpbml0aW9uUnVsZSBmcm9tIFwiLi4vcnVsZS9kZWZpbml0aW9uXCI7XG5pbXBvcnQgUHJlY2VkZW50c1J1bGUgZnJvbSBcIi4uL3J1bGUvcHJlY2VkZW5jZVwiO1xuaW1wb3J0IERlZmluaXRpb25zUnVsZSBmcm9tIFwiLi4vcnVsZS9kZWZpbml0aW9uc1wiO1xuaW1wb3J0IFRlcm1pbmFsUGFydFJ1bGUgZnJvbSBcIi4uL3J1bGUvdGVybWluYWxQYXJ0XCI7XG5pbXBvcnQgQ2hvaWNlT2ZQYXJ0c1J1bGUgZnJvbSBcIi4uL3J1bGUvY2hvaWNlT2ZQYXJ0c1wiO1xuaW1wb3J0IFRlcm1pbmFsU3ltYm9sUnVsZSBmcm9tIFwiLi4vcnVsZS90ZXJtaW5hbFN5bWJvbFwiO1xuaW1wb3J0IE5vblRlcm1pbmFsUGFydFJ1bGUgZnJvbSBcIi4uL3J1bGUvbm9uVGVybWluYWxQYXJ0XCI7XG5pbXBvcnQgU2VxdWVuY2VPZlBhcnRzUnVsZSBmcm9tIFwiLi4vcnVsZS9zZXF1ZW5jZU9mUGFydHNcIjtcbmltcG9ydCBOb1doaXRlc3BhY2VQYXJ0UnVsZSBmcm9tIFwiLi4vcnVsZS9ub1doaXRlc3BhY2VQYXJ0XCI7XG5pbXBvcnQgTG9va0FoZWFkTW9kaWZpZXJSdWxlIGZyb20gXCIuLi9ydWxlL2xvb2tBaGVhZE1vZGlmaWVyXCI7XG5pbXBvcnQgQW1iaWd1b3VzTW9kaWZpZXJSdWxlIGZyb20gXCIuLi9ydWxlL2FtYmlndW91c01vZGlmaWVyXCI7XG5pbXBvcnQgUmVndWxhckV4cHJlc3Npb25SdWxlIGZyb20gXCIuLi9ydWxlL3JlZ3VsYXJFeHByZXNzaW9uXCI7XG5pbXBvcnQgT3B0aW9uYWxRdWFudGlmaWVyUnVsZSBmcm9tIFwiLi4vcnVsZS9vcHRpb25hbFF1YW50aWZpZXJcIjtcbmltcG9ydCBPbmVPck1vcmVRdWFudGlmaWVyUnVsZSBmcm9tIFwiLi4vcnVsZS9vbmVPck1vcmVRdWFudGlmaWVyXCI7XG5pbXBvcnQgWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlIGZyb20gXCIuLi9ydWxlL3plcm9Pck1vcmVRdWFudGlmaWVyXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlIGZyb20gXCIuLi9ydWxlL3NpZ25pZmljYW50VG9rZW5UeXBlXCI7XG5cbmltcG9ydCB7IHJ1bGVNYXBGcm9tUnVsZXMsIHN0YXJ0UnVsZUZyb21SdWxlcyB9IGZyb20gXCIuLi91dGlsaXRpZXMvcnVsZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQk5GUGFyc2VyIHtcbiAgY29uc3RydWN0b3Ioc3RhcnRSdWxlLCBydWxlTWFwKSB7XG4gICAgdGhpcy5zdGFydFJ1bGUgPSBzdGFydFJ1bGU7XG4gICAgdGhpcy5ydWxlTWFwID0gcnVsZU1hcDtcbiAgfVxuXG4gIGdldFN0YXJ0UnVsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydFJ1bGU7XG4gIH1cblxuICBnZXRSdWxlTWFwKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVNYXA7XG4gIH1cblxuXHRydWxlc0Zyb21Ub2tlbnModG9rZW5zKSB7XG5cdCAgbGV0IHJ1bGVzO1xuXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMucGFyc2UodG9rZW5zKTtcblxuICAgIGlmIChub2RlID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGlzIG5vIG5vZGUuYCk7XG4gICAgfVxuXG4gICAgcnVsZXMgPSBub2RlLmdlbmVyYXRlUnVsZXMoUnVsZSk7XG5cbiAgICBjb25zdCBydWxlc0xlbmd0aCA9IHJ1bGVzLmxlbmd0aDtcblxuICAgIGlmIChydWxlc0xlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGVyZSBhcmUgbm8gcnVsZXMuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ1bGVzO1xuICB9XG5cbiAgc3RhdGljIGJuZiA9IGJuZjtcblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgbmFtZVJ1bGUgPSBOYW1lUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHBhcnRSdWxlID0gUGFydFJ1bGUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBydWxlUnVsZSA9IFJ1bGVSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgZXJyb3JSdWxlID0gRXJyb3JSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgZXBzaWxvblJ1bGUgPSBFcHNpbG9uUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIGRvY3VtZW50UnVsZSA9IERvY3VtZW50UnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHJ1bGVOYW1lUnVsZSA9IFJ1bGVOYW1lUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHdpbGRjYXJkUnVsZSA9IFdpbGRjYXJkUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIGVuZE9mTGluZVJ1bGUgPSBFbmRPZkxpbmVSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgcGFydENob2ljZVJ1bGUgPSBQYXJ0Q2hvaWNlUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHF1YW50aWZpZXJSdWxlID0gUXVhbnRpZmllclJ1bGUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBkZWZpbml0aW9uUnVsZSA9IERlZmluaXRpb25SdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgcHJlY2VkZW50c1J1bGUgPSBQcmVjZWRlbnRzUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIGRlZmluaXRpb25zUnVsZSA9IERlZmluaXRpb25zUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHRlcm1pbmFsUGFydFJ1bGUgPSBUZXJtaW5hbFBhcnRSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgY2hvaWNlT2ZQYXJ0c1J1bGUgPSBDaG9pY2VPZlBhcnRzUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHRlcm1pbmFsU3ltYm9sUnVsZSA9IFRlcm1pbmFsU3ltYm9sUnVsZS5mcm9tTm90aGluZygpLFxuICAgICAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGUgPSBOb25UZXJtaW5hbFBhcnRSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgc2VxdWVuY2VPZlBhcnRzUnVsZSA9IFNlcXVlbmNlT2ZQYXJ0c1J1bGUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBub1doaXRlc3BhY2VQYXJ0UnVsZSA9IE5vV2hpdGVzcGFjZVBhcnRSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgcmVndWxhckV4cHJlc3Npb25SdWxlID0gUmVndWxhckV4cHJlc3Npb25SdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgbG9va0FoZWFkTW9kaWZpZXJSdWxlID0gTG9va0FoZWFkTW9kaWZpZXJSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgYW1iaWd1b3VzTW9kaWZpZXJSdWxlID0gQW1iaWd1b3VzTW9kaWZpZXJSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgb3B0aW9uYWxRdWFudGlmaWVyUnVsZSA9IE9wdGlvbmFsUXVhbnRpZmllclJ1bGUuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBvbmVPck1vcmVRdWFudGlmaWVyUnVsZSA9IE9uZU9yTW9yZVF1YW50aWZpZXJSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgemVyb09yTW9yZVF1YW50aWZpZXJSdWxlID0gWmVyb09yTW9yZVF1YW50aWZpZXJSdWxlLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgc2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlID0gU2lnbmlmaWNhbnRUb2tlblR5cGVSdWxlLmZyb21Ob3RoaW5nKCk7XG5cbiAgICBsZXQgcnVsZXMgPSBbXG4gICAgICBkb2N1bWVudFJ1bGUsXG4gICAgICBydWxlUnVsZSxcbiAgICAgIG5hbWVSdWxlLFxuICAgICAgZGVmaW5pdGlvbnNSdWxlLFxuICAgICAgZGVmaW5pdGlvblJ1bGUsXG4gICAgICBwYXJ0UnVsZSxcbiAgICAgIG5vblRlcm1pbmFsUGFydFJ1bGUsXG4gICAgICB0ZXJtaW5hbFBhcnRSdWxlLFxuICAgICAgbm9XaGl0ZXNwYWNlUGFydFJ1bGUsXG4gICAgICBzZXF1ZW5jZU9mUGFydHNSdWxlLFxuICAgICAgY2hvaWNlT2ZQYXJ0c1J1bGUsXG4gICAgICBwYXJ0Q2hvaWNlUnVsZSxcbiAgICAgIHJ1bGVOYW1lUnVsZSxcbiAgICAgIHNpZ25pZmljYW50VG9rZW5UeXBlUnVsZSxcbiAgICAgIHJlZ3VsYXJFeHByZXNzaW9uUnVsZSxcbiAgICAgIHRlcm1pbmFsU3ltYm9sUnVsZSxcbiAgICAgIHByZWNlZGVudHNSdWxlLFxuICAgICAgZW5kT2ZMaW5lUnVsZSxcbiAgICAgIHdpbGRjYXJkUnVsZSxcbiAgICAgIGVwc2lsb25SdWxlLFxuICAgICAgcXVhbnRpZmllclJ1bGUsXG4gICAgICBhbWJpZ3VvdXNNb2RpZmllclJ1bGUsXG4gICAgICBsb29rQWhlYWRNb2RpZmllclJ1bGUsXG4gICAgICBvcHRpb25hbFF1YW50aWZpZXJSdWxlLFxuICAgICAgb25lT3JNb3JlUXVhbnRpZmllclJ1bGUsXG4gICAgICB6ZXJvT3JNb3JlUXVhbnRpZmllclJ1bGUsXG4gICAgICBlcnJvclJ1bGVcbiAgICBdO1xuXG4gICAgY29uc3Qgc3RhcnRSdWxlID0gc3RhcnRSdWxlRnJvbVJ1bGVzKHJ1bGVzKSxcbiAgICAgICAgICBydWxlTWFwID0gcnVsZU1hcEZyb21SdWxlcyhydWxlcyksXG4gICAgICAgICAgYm5mUGFyc2VyID0gbmV3IEJORlBhcnNlcihzdGFydFJ1bGUsIHJ1bGVNYXApO1xuICAgIFxuICAgIHJldHVybiBibmZQYXJzZXI7XG4gIH1cbn1cblxuT2JqZWN0LmFzc2lnbihCTkZQYXJzZXIucHJvdG90eXBlLCBwYXJzZXJNaXhpbnMpO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgXG5cbiAgICAgIGV4cHJlc3Npb24gICA6Oj0gZXhwcmVzc2lvbl8gb3BlcmF0b3IgZXhwcmVzc2lvbiBleHByZXNzaW9ufipcblxuICAgICAgICAgICAgICAgICAgICAgfCBleHByZXNzaW9uX1xuXG4gICAgICAgICAgICAgICAgICAgICA7XG5cbiAgICAgIG9wZXJhdG9yISAgICA6Oj0gXCIrXCJcblxuICAgICAgICAgICAgICAgICAgICAgfCBcIi1cIlxuXG4gICAgICAgICAgICAgICAgICAgICB8IFwiL1wiXG5cbiAgICAgICAgICAgICAgICAgICAgIHwgXCIqXCJcblxuICAgICAgICAgICAgICAgICAgICAgO1xuXG4gICAgICB0ZXJtICAgICAgICAgOjo9IC9cXFxcZCsvIDtcblxuICAgICAgZXhwcmVzc2lvbl8gIDo6PSBcIihcIiBleHByZXNzaW9uIFwiKVwiXG5cbiAgICAgICAgICAgICAgICAgICAgIHwgdGVybVxuXG4gICAgICAgICAgICAgICAgICAgICA7XG5cbiAgICAgIGV4cHJlc3Npb25+ICA6Oj0gb3BlcmF0b3IgZXhwcmVzc2lvbiA7XG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGJuZjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQk5GTGV4ZXIgfSBmcm9tIFwib2NjYW0tbGV4ZXJzXCI7XG5cbmltcG9ydCBCTkZQYXJzZXIgZnJvbSBcIi4uL2JuZi9wYXJzZXJcIjtcblxuaW1wb3J0IHsgcnVsZU1hcEZyb21SdWxlcywgc3RhcnRSdWxlRnJvbVJ1bGVzLCBzdGFydFJ1bGVGcm9tUnVsZXNBbmRTdGFydFJ1bGVOYW1lIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9ydWxlc1wiO1xuXG5jb25zdCBibmZMZXhlciA9IEJORkxleGVyLmZyb21Ob3RoaW5nKCksXG4gICAgICBibmZQYXJzZXIgPSBCTkZQYXJzZXIuZnJvbU5vdGhpbmcoKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzRnJvbUJORihibmYpIHtcbiAgY29uc3QgdG9rZW5zID0gYm5mTGV4ZXIudG9rZW5zRnJvbUJORihibmYpLFxuICAgICAgICBydWxlcyA9IGJuZlBhcnNlci5ydWxlc0Zyb21Ub2tlbnModG9rZW5zKTtcblxuICByZXR1cm4gcnVsZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZXJGcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKSB7XG4gIGNvbnN0IHN0YXJ0UnVsZSA9IHN0YXJ0UnVsZUZyb21SdWxlcyhydWxlcyksXG4gICAgICAgIHJ1bGVNYXAgPSBydWxlTWFwRnJvbVJ1bGVzKHJ1bGVzKSxcbiAgICAgICAgcGFyc2VyID0gbmV3IENsYXNzKHN0YXJ0UnVsZSwgcnVsZU1hcCk7XG5cbiAgcmV0dXJuIHBhcnNlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlckZyb21SdWxlc0FuZFN0YXJ0UnVsZU5hbWUoQ2xhc3MsIHJ1bGVzLCBzdGFydFJ1bGVOYW1lKSB7XG4gIGNvbnN0IHN0YXJ0UnVsZSA9IHN0YXJ0UnVsZUZyb21SdWxlc0FuZFN0YXJ0UnVsZU5hbWUocnVsZXMsIHN0YXJ0UnVsZU5hbWUpLFxuICAgICAgICBydWxlTWFwID0gcnVsZU1hcEZyb21SdWxlcyhydWxlcyksXG4gICAgICAgIHBhcnNlciA9IG5ldyBDbGFzcyhzdGFydFJ1bGUsIHJ1bGVNYXApO1xuXG4gIHJldHVybiBwYXJzZXI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcnVsZXNGcm9tQk5GLFxuICBwYXJzZXJGcm9tUnVsZXMsXG4gIHBhcnNlckZyb21SdWxlc0FuZFN0YXJ0UnVsZU5hbWVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBwYXJzZXJNaXhpbnMgZnJvbSBcIi4uL21peGlucy9wYXJzZXJcIjtcblxuaW1wb3J0IHsgcnVsZXNGcm9tQk5GLCBwYXJzZXJGcm9tUnVsZXMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3BhcnNlclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb21tb25QYXJzZXIge1xuICBjb25zdHJ1Y3RvcihzdGFydFJ1bGUsIHJ1bGVNYXApIHtcbiAgICB0aGlzLnN0YXJ0UnVsZSA9IHN0YXJ0UnVsZTtcbiAgICB0aGlzLnJ1bGVNYXAgPSBydWxlTWFwO1xuICB9XG5cbiAgZ2V0U3RhcnRSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0UnVsZTtcbiAgfVxuXG4gIGdldFJ1bGVNYXAoKSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZU1hcDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm90aGluZyhDbGFzcykge1xuICAgIGNvbnN0IHsgYm5mIH0gPSBDbGFzcyxcbiAgICAgICAgICBydWxlcyA9IHJ1bGVzRnJvbUJORihibmYpLFxuICAgICAgICAgIHBhcnNlciA9IHBhcnNlckZyb21SdWxlcyhDbGFzcywgcnVsZXMpO1xuXG4gICAgcmV0dXJuIHBhcnNlcjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQk5GKENsYXNzLCBibmYpIHtcbiAgICBjb25zdCBydWxlcyA9IHJ1bGVzRnJvbUJORihibmYpLFxuICAgICAgICAgIHBhcnNlciA9IHBhcnNlckZyb21SdWxlcyhDbGFzcywgcnVsZXMpO1xuXG4gICAgcmV0dXJuIHBhcnNlcjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUnVsZXMoQ2xhc3MsIHJ1bGVzKSB7XG4gICAgY29uc3QgcGFyc2VyID0gcGFyc2VyRnJvbVJ1bGVzKENsYXNzLCBydWxlcyk7XG5cbiAgICByZXR1cm4gcGFyc2VyO1xuICB9XG59XG5cbk9iamVjdC5hc3NpZ24oQ29tbW9uUGFyc2VyLnByb3RvdHlwZSwgcGFyc2VyTWl4aW5zKTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGJuZiBmcm9tIFwiLi9ibmZcIjtcbmltcG9ydCBDb21tb25QYXJzZXIgZnJvbSBcIi4uL2NvbW1vbi9wYXJzZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmFzaWNQYXJzZXIgZXh0ZW5kcyBDb21tb25QYXJzZXIge1xuICBzdGF0aWMgYm5mID0gYm5mO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tTm90aGluZyhCYXNpY1BhcnNlcik7IH1cblxuICBzdGF0aWMgZnJvbUJORihibmYpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tQk5GKEJhc2ljUGFyc2VyLCBibmYpOyB9XG5cbiAgc3RhdGljIGZyb21SdWxlcyhydWxlcykgeyByZXR1cm4gQ29tbW9uUGFyc2VyLmZyb21SdWxlcyhCYXNpY1BhcnNlciwgcnVsZXMpOyB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBFcHNpbG9uUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL2Vwc2lsb25cIjtcbmltcG9ydCBXaWxkY2FyZFBhcnQgZnJvbSBcIi4vcGFydC90ZXJtaW5hbC93aWxkY2FyZFwiO1xuaW1wb3J0IEVuZE9mTGluZVBhcnQgZnJvbSBcIi4vcGFydC90ZXJtaW5hbC9lbmRPZkxpbmVcIjtcbmltcG9ydCBUZXJtaW5hbFN5bWJvbFBhcnQgZnJvbSBcIi4vcGFydC90ZXJtaW5hbC90ZXJtaW5hbFN5bWJvbFwiO1xuaW1wb3J0IFJlZ3VsYXJFeHByZXNzaW9uUGFydCBmcm9tIFwiLi9wYXJ0L3Rlcm1pbmFsL3JlZ3VsYXJFeHByZXNzaW9uXCI7XG5pbXBvcnQgU2lnbmlmaWNhbnRUb2tlblR5cGVQYXJ0IGZyb20gXCIuL3BhcnQvdGVybWluYWwvc2lnbmlmaWNhbnRUb2tlblR5cGVcIjtcbmltcG9ydCBSdWxlTmFtZVBhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC9ydWxlTmFtZVwiO1xuaW1wb3J0IE9wdGlvbmFsUGFydFBhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC9vcHRpb25hbFBhcnRcIjtcbmltcG9ydCBaZXJvT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuL3BhcnQvbm9uVGVybWluYWwvemVyb09yTW9yZVBhcnRzXCI7XG5pbXBvcnQgT25lT3JNb3JlUGFydHNQYXJ0IGZyb20gXCIuL3BhcnQvbm9uVGVybWluYWwvb25lT3JNb3JlUGFydHNcIjtcbmltcG9ydCBTZXF1ZW5jZU9mUGFydHNQYXJ0IGZyb20gXCIuL3BhcnQvbm9uVGVybWluYWwvc2VxdWVuY2VPZlBhcnRzXCI7XG5pbXBvcnQgQ2hvaWNlT2ZQYXJ0c1BhcnQgZnJvbSBcIi4vcGFydC9ub25UZXJtaW5hbC9jaG9pY2VPZlBhcnRzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgRXBzaWxvblBhcnQsXG4gIFdpbGRjYXJkUGFydCxcbiAgRW5kT2ZMaW5lUGFydCxcbiAgVGVybWluYWxTeW1ib2xQYXJ0LFxuICBSZWd1bGFyRXhwcmVzc2lvblBhcnQsXG4gIFNpZ25pZmljYW50VG9rZW5UeXBlUGFydCxcbiAgUnVsZU5hbWVQYXJ0LFxuICBPcHRpb25hbFBhcnRQYXJ0LFxuICBaZXJvT3JNb3JlUGFydHNQYXJ0LFxuICBPbmVPck1vcmVQYXJ0c1BhcnQsXG4gIFNlcXVlbmNlT2ZQYXJ0c1BhcnQsXG4gIENob2ljZU9mUGFydHNQYXJ0XG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIEJORlBhcnNlciB9IGZyb20gXCIuL2JuZi9wYXJzZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQmFzaWNQYXJzZXIgfSBmcm9tIFwiLi9iYXNpYy9wYXJzZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29tbW9uUGFyc2VyIH0gZnJvbSBcIi4vY29tbW9uL3BhcnNlclwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHJ1bGVzVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3J1bGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHBhcnNlclV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9wYXJzZXJcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBSdWxlIH0gZnJvbSBcIi4vcnVsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQYXJ0cyB9IGZyb20gXCIuL3BhcnRzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHBhcnRUeXBlcyB9IGZyb20gXCIuL3BhcnRUeXBlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQYXJ0Q2hvaWNlIH0gZnJvbSBcIi4vcGFydENob2ljZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEZWZpbml0aW9uIH0gZnJvbSBcIi4vZGVmaW5pdGlvblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFcHNpbG9uTm9kZSB9IGZyb20gXCIuL25vZGUvdGVybWluYWwvZXBzaWxvblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXJtaW5hbE5vZGUgfSBmcm9tIFwiLi9ub2RlL3Rlcm1pbmFsXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE5vblRlcm1pbmFsTm9kZSB9IGZyb20gXCIuL25vZGUvbm9uVGVybWluYWxcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgYm5mID0gYFxuXG5cblxuICAgIHN0eWxlc2hlZXQgICAgICAgICAgICAgICAgIDo6PSAoIG1lZGlhIHwgcnVsZVNldCB8IGRlY2xhcmF0aW9uIHwgZXJyb3IgKSsgO1xuXG5cblxuXG5cbiAgICBtZWRpYSAgICAgICAgICAgICAgICAgICAgICA6Oj0gXCJAbWVkaWFcIiBtZWRpYVF1ZXJpZXMgXCJ7XCIgKCBydWxlU2V0IHwgZGVjbGFyYXRpb24gKSogXCJ9XCIgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgbWVkaWFRdWVyaWVzICAgICAgICAgICAgICAgOjo9ICBtZWRpYVF1ZXJ5ICggXCIsXCIgbWVkaWFRdWVyeSApKiA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICBtZWRpYVF1ZXJ5ICAgICAgICAgICAgICAgICA6Oj0gIFwibm90XCI/ICggXCJvbmx5XCI/IG1lZGlhVHlwZSBcImFuZFwiICk/IG1lZGlhRXhwcmVzc2lvbiAoIFwiYW5kXCIgbWVkaWFFeHByZXNzaW9uICkqIDtcblxuXG4gICAgbWVkaWFUeXBlICAgICAgICAgICAgICAgICAgOjo9ICBcImFsbFwiIHwgXCJwcmludFwiIHwgXCJzY3JlZW5cIiB8IFwic3BlZWNoXCIgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgbWVkaWFFeHByZXNzaW9uICAgICAgICAgICAgOjo9ICBcIihcIiBbaWRlbnRpZmllcl0gKCBcIjpcIiBleHByZXNzaW9uICk/IFwiKVwiIDtcblxuXG5cblxuXG4gICAgcnVsZVNldCAgICAgICAgICAgICAgICAgICAgOjo9ICBzZWxlY3RvcnMgXCJ7XCIgZGVjbGFyYXRpb24qIFwifVwiIDtcbiAgICBcbiAgICBcbiAgICBzZWxlY3RvcnMgICAgICAgICAgICAgICAgICA6Oj0gIHNlbGVjdG9yICggXCIsXCIgc2VsZWN0b3IgKSogO1xuXG5cbiAgICBzZWxlY3RvciAgICAgICAgICAgICAgICAgICA6Oj0gICggY2xhc3MgfCBwc2V1ZG9DbGFzcyB8IHBzZXVkb0VsZW1lbnQgfCBhdHRyaWJ1dGUgKSsgO1xuXG5cblxuXG5cbiAgICBkZWNsYXJhdGlvbiAgICAgICAgICAgICAgICA6Oj0gIHByb3BlcnR5IFwiOlwiIGV4cHJlc3Npb24gKCBcIixcIiBleHByZXNzaW9uICkqIHByaW9yaXR5PyBcIjtcIiA7XG5cblxuICAgIGNsYXNzICAgICAgICAgICAgICAgICAgICAgIDo6PSAgXCIuXCI8Tk9fV0hJVEVTUEFDRT5baWRlbnRpZmllcl0gcGFyZW50aGVzaXNlZFNlbGVjdG9yPyA7XG5cblxuICAgIHBzZXVkb0NsYXNzICAgICAgICAgICAgICAgIDo6PSAgXCI6XCI8Tk9fV0hJVEVTUEFDRT5baWRlbnRpZmllcl0gcGFyZW50aGVzaXNlZFNlbGVjdG9yPyA7XG5cblxuICAgIHBzZXVkb0VsZW1lbnQgICAgICAgICAgICAgIDo6PSAgXCI6OlwiPE5PX1dISVRFU1BBQ0U+W2lkZW50aWZpZXJdIHBhcmVudGhlc2lzZWRTZWxlY3Rvcj8gO1xuXG5cbiAgICBwYXJlbnRoZXNpc2VkU2VsZWN0b3IgICAgICA6Oj0gIDxOT19XSElURVNQQUNFPlwiKFwiIHNlbGVjdG9yIDxOT19XSElURVNQQUNFPlwiKVwiIDtcblxuXG4gICAgYXR0cmlidXRlICAgICAgICAgICAgICAgICAgOjo9ICBcIltcIlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRlbnRpZmllcl1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggXCI9XCIgfCBcIn49XCIgfCBcInw9XCIgKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggW2lkZW50aWZpZXJdIHwgW3N0cmluZy1saXRlcmFsXSApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk/XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXVwiXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuXG4gICAgcHJvcGVydHkgICAgICAgICAgICAgICAgICAgOjo9ICBbaWRlbnRpZmllcl0gO1xuXG5cbiAgICBleHByZXNzaW9uICAgICAgICAgICAgICAgICA6Oj0gIHRlcm0gKCBcIixcIj8gdGVybSApKiA7XG5cblxuICAgIHByaW9yaXR5ICAgICAgICAgICAgICAgICAgIDo6PSAgXCIhaW1wb3J0YW50XCIgO1xuXG5cblxuXG5cbiAgICB0ZXJtICAgICAgICAgICAgICAgICAgICAgICA6Oj0gIFthcml0aG1ldGljLW9wZXJhdG9yXT9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggW3BlcmNlbnRhZ2VdIHwgW2ZyZXF1ZW5jeV0gfCBbZnJhY3Rpb25dIHwgW2xlbmd0aF0gfCBbYW5nbGVdIHwgW3JlbXNdIHwgW2Vtc10gfCBbdGltZV0gfCBbbnVtYmVyXSApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RyaW5nLWxpdGVyYWxdK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRlbnRpZmllcl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG91cl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7XG5cblxuICAgIHVyaSAgICAgICAgICAgICAgICAgICAgICAgIDo6PSAgXCJ1cmxcIjxOT19XSElURVNQQUNFPlwiKFwiIFtzdHJpbmctbGl0ZXJhbF0gXCIpXCIgO1xuXG5cbiAgICBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICA6Oj0gIFtpZGVudGlmaWVyXTxOT19XSElURVNQQUNFPlwiKFwiIGV4cHJlc3Npb24gXCIpXCIgO1xuXG5cblxuXG5cbiAgICBlcnJvciEgICAgICAgICAgICAgICAgICAgICA6Oj0gIC4gO1xuXG5cblxuYDtcblxuZXhwb3J0IGRlZmF1bHQgYm5mO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBDb21tb25QYXJzZXIgfSBmcm9tIFwib2NjYW0tcGFyc2Vyc1wiO1xuXG5pbXBvcnQgYm5mIGZyb20gXCIuL2JuZlwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU1NQYXJzZXIgZXh0ZW5kcyBDb21tb25QYXJzZXIge1xuICBzdGF0aWMgYm5mID0gYm5mO1xuXG4gIHN0YXRpYyBmcm9tTm90aGluZygpIHsgcmV0dXJuIENvbW1vblBhcnNlci5mcm9tTm90aGluZyhDU1NQYXJzZXIpOyB9XG5cbiAgc3RhdGljIGZyb21CTkYoYm5mKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbUJORihDU1NQYXJzZXIsIGJuZik7IH1cblxuICBzdGF0aWMgZnJvbVJ1bGVzKHJ1bGVzKSB7IHJldHVybiBDb21tb25QYXJzZXIuZnJvbVJ1bGVzKENTU1BhcnNlciwgcnVsZXMpOyB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmV4cG9ydCBjb25zdCB7IGNsZWFyLCBwdXNoLCBzZWNvbmQsIHRoaXJkLCBmb3VydGgsIGZpZnRoIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIHRyaW0oYXJyYXksIHN0YXJ0SW5kZXgsIGVuZEluZGV4KSB7XG4gIGlmIChzdGFydEluZGV4IDwgMCkge1xuICAgIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgLy8vXG5cbiAgICBzdGFydEluZGV4ID0gbGVuZ3RoICsgc3RhcnRJbmRleDsgLy8vXG5cbiAgICBlbmRJbmRleCA9IGxlbmd0aCArIGVuZEluZGV4OyAvLy9cbiAgfVxuXG4gIGlmIChlbmRJbmRleCAhPT0gSW5maW5pdHkpIHtcbiAgICBjb25zdCBzdGFydCA9IGVuZEluZGV4ICsgMTtcblxuICAgIGFycmF5LnNwbGljZShzdGFydCk7XG4gIH1cblxuICBjb25zdCBzdGFydCA9IDAsXG4gICAgICAgIGRlbGV0ZUNvdW50ID0gc3RhcnRJbmRleDsgLy8vXG5cbiAgYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmNsdWRlcyhhcnJheSwgLi4uZWxlbWVudHMpIHtcbiAgcmV0dXJuIGVsZW1lbnRzLnNvbWUoKGVsZW1lbnQpID0+IGFycmF5LmluY2x1ZGVzKGVsZW1lbnQpKTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2hhcmFjdGVycyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgY2xlYXIsIHRyaW0sIHNlY29uZCwgdGhpcmQsIGZvdXJ0aCB9IGZyb20gXCIuL3V0aWxpdGllcy9hcnJheVwiO1xuXG5jb25zdCB7IEVYQ0xBTUFUSU9OX01BUktfQ0hBUkFDVEVSIH0gPSBjaGFyYWN0ZXJzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTcHJlYWQge1xuICBjb25zdHJ1Y3RvcihzdGFydEluZGV4LCBlbmRJbmRleCwgdW5pcXVlKSB7XG4gICAgdGhpcy5zdGFydEluZGV4ID0gc3RhcnRJbmRleDtcbiAgICB0aGlzLmVuZEluZGV4ID0gZW5kSW5kZXg7XG4gICAgdGhpcy51bmlxdWUgPSB1bmlxdWU7XG4gIH1cblxuICBhZGp1c3ROb2Rlcyhub2Rlcykge1xuICAgIGlmICh0aGlzLnVuaXF1ZSkge1xuICAgICAgY29uc3Qgbm9kZXNMZW5ndGggPSBub2Rlcy5sZW5ndGg7XG5cbiAgICAgIGlmIChub2Rlc0xlbmd0aCA+IDEpIHtcbiAgICAgICAgY2xlYXIobm9kZXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0cmltKG5vZGVzLCB0aGlzLnN0YXJ0SW5kZXgsIHRoaXMuZW5kSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3ByZWFkRXhwcmVzc2lvbihzcHJlYWRFeHByZXNzaW9uKSB7XG4gICAgbGV0IHN0YXJ0SW5kZXggPSAwLFxuICAgICAgICBlbmRJbmRleCA9IEluZmluaXR5LFxuICAgICAgICB1bmlxdWUgPSBmYWxzZTtcblxuICAgIGlmIChzcHJlYWRFeHByZXNzaW9uICE9PSBudWxsKSB7XG4gICAgICBpZiAoc3ByZWFkRXhwcmVzc2lvbiA9PT0gRVhDTEFNQVRJT05fTUFSS19DSEFSQUNURVIpIHtcbiAgICAgICAgdW5pcXVlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlZ0V4cCA9IC9cXFsoLT9cXGQrKT8oXFwuXFwuXFwuKT8oLT9cXGQrKT9dLyxcbiAgICAgICAgICAgICAgbWF0Y2hlcyA9IHNwcmVhZEV4cHJlc3Npb24ubWF0Y2gocmVnRXhwKSxcbiAgICAgICAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcykgfHwgbnVsbCxcbiAgICAgICAgICAgICAgdGhpcmRNYXRjaCA9IHRoaXJkKG1hdGNoZXMpIHx8IG51bGwsXG4gICAgICAgICAgICAgIGZvdXJ0aE1hdGNoID0gZm91cnRoKG1hdGNoZXMpIHx8IG51bGw7XG5cbiAgICAgICAgaWYgKHNlY29uZE1hdGNoICE9PSBudWxsKSB7XG4gICAgICAgICAgc3RhcnRJbmRleCA9IHBhcnNlSW50KHNlY29uZE1hdGNoKTtcblxuICAgICAgICAgIGlmICh0aGlyZE1hdGNoID09PSBudWxsKSB7XG4gICAgICAgICAgICBlbmRJbmRleCA9IHN0YXJ0SW5kZXg7ICAvLy9cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm91cnRoTWF0Y2ggIT09IG51bGwpIHtcbiAgICAgICAgICBlbmRJbmRleCA9IHBhcnNlSW50KGZvdXJ0aE1hdGNoKTtcblxuICAgICAgICAgIGlmICh0aGlyZE1hdGNoID09PSBudWxsKSB7XG4gICAgICAgICAgICBzdGFydEluZGV4ID0gZW5kSW5kZXg7ICAvLy9cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzcHJlYWQgPSBuZXcgU3ByZWFkKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB1bmlxdWUpO1xuXG4gICAgcmV0dXJuIHNwcmVhZDtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBjaGFyYWN0ZXJzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgU3ByZWFkIGZyb20gXCIuL3NwcmVhZFwiO1xuXG5pbXBvcnQgeyBpbmNsdWRlcywgcHVzaCwgY2xlYXIsIHNlY29uZCwgdGhpcmQsIGZvdXJ0aCwgZmlmdGggfSBmcm9tIFwiLi91dGlsaXRpZXMvYXJyYXlcIjtcblxuY29uc3QgeyBCQVJfQ0hBUkFDVEVSLCBXSUxEQ0FSRF9DSEFSQUNURVIsIEZPUldBUkRfU0xBU0hfQ0hBUkFDVEVSIH0gPSBjaGFyYWN0ZXJzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdWVyeSB7XG4gIGNvbnN0cnVjdG9yKHR5cGVzLCBzcHJlYWQsIHN1YlF1ZXJ5LCAgcnVsZU5hbWVzLCBtYXhpbXVtRGVwdGgsIGluZmluaXRlRGVzY2VudCwgaW50ZXJtZWRpYXRlTm9kZXMpIHtcbiAgICB0aGlzLnR5cGVzID0gdHlwZXM7XG4gICAgdGhpcy5zcHJlYWQgPSBzcHJlYWQ7XG4gICAgdGhpcy5zdWJRdWVyeSA9IHN1YlF1ZXJ5O1xuICAgIHRoaXMucnVsZU5hbWVzID0gcnVsZU5hbWVzO1xuICAgIHRoaXMubWF4aW11bURlcHRoID0gbWF4aW11bURlcHRoO1xuICAgIHRoaXMuaW5maW5pdGVEZXNjZW50ID0gaW5maW5pdGVEZXNjZW50O1xuICAgIHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMgPSBpbnRlcm1lZGlhdGVOb2RlcztcbiAgfVxuXG4gIGV4ZWN1dGUobm9kZSwgZGVwdGggPSAwLCBtYXhpbXVtRGVwdGggPSB0aGlzLm1heGltdW1EZXB0aCkge1xuICAgIGNvbnN0IG5vZGVzID0gW107XG5cbiAgICB0aGlzLmNsZWFyKCk7XG5cbiAgICB0aGlzLmZpbmQobm9kZSwgZGVwdGgsIG1heGltdW1EZXB0aCk7XG5cbiAgICB0aGlzLmFwcGx5KG5vZGVzLCBkZXB0aCwgbWF4aW11bURlcHRoKTtcblxuICAgIHJldHVybiBub2RlcztcbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIGNsZWFyKHRoaXMuaW50ZXJtZWRpYXRlTm9kZXMpO1xuICB9XG5cbiAgZmluZChub2RlLCBkZXB0aCwgbWF4aW11bURlcHRoKSB7XG4gICAgaWYgKGRlcHRoID4gbWF4aW11bURlcHRoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKSxcbiAgICAgICAgICBub2RlTm9uVGVybWluYWxOb2RlID0gIW5vZGVUZXJtaW5hbE5vZGU7XG5cbiAgICBsZXQgZm91bmQ7XG5cbiAgICBpZiAobm9kZVRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3QgdGVybWluYWxOb2RlID0gbm9kZSwgIC8vL1xuICAgICAgICAgICAgdHlwZSA9IHRlcm1pbmFsTm9kZS5nZXRUeXBlKCk7XG5cbiAgICAgIGZvdW5kID0gaW5jbHVkZXModGhpcy50eXBlcywgdHlwZSwgV0lMRENBUkRfQ0hBUkFDVEVSKTtcbiAgICB9XG5cbiAgICBpZiAobm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgICBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpO1xuXG4gICAgICBmb3VuZCA9IGluY2x1ZGVzKHRoaXMucnVsZU5hbWVzLCBydWxlTmFtZSwgV0lMRENBUkRfQ0hBUkFDVEVSKTtcbiAgICB9XG5cbiAgICBpZiAoZm91bmQpIHtcbiAgICAgIGNvbnN0IGludGVybWVkaWF0ZU5vZGUgPSBub2RlOyAvLy9cblxuICAgICAgdGhpcy5pbnRlcm1lZGlhdGVOb2Rlcy5wdXNoKGludGVybWVkaWF0ZU5vZGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmluZmluaXRlRGVzY2VudCkge1xuICAgICAgaWYgKG5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgICAgZGVwdGgrKztcblxuICAgICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICAgICAgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCk7XG5cbiAgICAgICAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHtcbiAgICAgICAgICB0aGlzLmZpbmQoY2hpbGROb2RlLCBkZXB0aCwgbWF4aW11bURlcHRoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXBwbHkobm9kZXMsIGRlcHRoLCBtYXhpbXVtRGVwdGgpIHtcbiAgICB0aGlzLnNwcmVhZC5hZGp1c3ROb2Rlcyh0aGlzLmludGVybWVkaWF0ZU5vZGVzKTtcblxuICAgIGlmICh0aGlzLnN1YlF1ZXJ5ID09PSBudWxsKSB7XG4gICAgICBwdXNoKG5vZGVzLCB0aGlzLmludGVybWVkaWF0ZU5vZGVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbnRlcm1lZGlhdGVOb2Rlcy5mb3JFYWNoKChpbnRlcm1lZGlhdGVOb2RlKSA9PiB7XG4gICAgICAgIGNvbnN0IGludGVybWVkaWF0ZU5vZGVOb25UZXJtaW5hbE5vZGUgPSBpbnRlcm1lZGlhdGVOb2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgICAgICAgaWYgKGludGVybWVkaWF0ZU5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgICAgICBkZXB0aCsrO1xuXG4gICAgICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gaW50ZXJtZWRpYXRlTm9kZSwgLy8vXG4gICAgICAgICAgICAgICAgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCk7XG5cbiAgICAgICAgICB0aGlzLnN1YlF1ZXJ5LmNsZWFyKCk7XG5cbiAgICAgICAgICBjaGlsZE5vZGVzLmZvckVhY2goKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdWJRdWVyeS5maW5kKGNoaWxkTm9kZSwgZGVwdGgsIG1heGltdW1EZXB0aCk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB0aGlzLnN1YlF1ZXJ5LmFwcGx5KG5vZGVzLCBkZXB0aCwgbWF4aW11bURlcHRoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGZyb21FeHByZXNzaW9uKGV4cHJlc3Npb24sIG1heGltdW1EZXB0aCA9IEluZmluaXR5KSB7XG4gICAgbGV0IHF1ZXJ5ID0gbnVsbDtcblxuICAgIGlmIChleHByZXNzaW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCByZWdFeHAgPSAvXlxcLyhcXC8pPyhbXi9cXFshXSspKFxcW1teXFxdXStdfCEpPyhcXC8uKik/JC8sXG4gICAgICAgICAgICBtYXRjaGVzID0gZXhwcmVzc2lvbi5tYXRjaChyZWdFeHApLFxuICAgICAgICAgICAgc2Vjb25kTWF0Y2ggPSBzZWNvbmQobWF0Y2hlcyksXG4gICAgICAgICAgICB0aGlyZE1hdGNoID0gdGhpcmQobWF0Y2hlcyksXG4gICAgICAgICAgICBmb3VydGhNYXRjaCA9IGZvdXJ0aChtYXRjaGVzKSxcbiAgICAgICAgICAgIGZpZnRoTWF0Y2ggPSBmaWZ0aChtYXRjaGVzKSxcbiAgICAgICAgICAgIHNlbGVjdG9ycyA9IHRoaXJkTWF0Y2guc3BsaXQoQkFSX0NIQVJBQ1RFUiksXG4gICAgICAgICAgICBzdWJFeHByZXNzaW9uID0gZmlmdGhNYXRjaCB8fCBudWxsLFxuICAgICAgICAgICAgc3ByZWFkRXhwcmVzc2lvbiA9IGZvdXJ0aE1hdGNoIHx8IG51bGwsXG4gICAgICAgICAgICB0eXBlcyA9IHR5cGVzRnJvbVNlbGVjdG9ycyhzZWxlY3RvcnMpLFxuICAgICAgICAgICAgc3ByZWFkID0gU3ByZWFkLmZyb21TcHJlYWRFeHByZXNzaW9uKHNwcmVhZEV4cHJlc3Npb24pLFxuICAgICAgICAgICAgc3ViUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihzdWJFeHByZXNzaW9uKSxcbiAgICAgICAgICAgIHJ1bGVOYW1lcyA9IHJ1bGVOYW1lc0Zyb21TZWxlY3RvcnMoc2VsZWN0b3JzKSxcbiAgICAgICAgICAgIGluZmluaXRlRGVzY2VudCA9IChzZWNvbmRNYXRjaCA9PT0gRk9SV0FSRF9TTEFTSF9DSEFSQUNURVIpLFxuICAgICAgICAgICAgaW50ZXJtZWRpYXRlTm9kZXMgPSBbXTtcblxuICAgICAgcXVlcnkgPSBuZXcgUXVlcnkodHlwZXMsIHNwcmVhZCwgc3ViUXVlcnksIHJ1bGVOYW1lcywgbWF4aW11bURlcHRoLCBpbmZpbml0ZURlc2NlbnQsIGludGVybWVkaWF0ZU5vZGVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHlwZXNGcm9tU2VsZWN0b3JzKHNlbGVjdG9ycykge1xuICBjb25zdCB0eXBlcyA9IFtdO1xuXG4gIHNlbGVjdG9ycy5mb3JFYWNoKChzZWxlY3RvcikgPT4ge1xuICAgIGNvbnN0IHNlbGVjdG9yVHlwZVNlbGVjdG9yID0gaXNTZWxlY3RvclR5cGVTZWxlY3RvcihzZWxlY3Rvcik7XG5cbiAgICBpZiAoc2VsZWN0b3JUeXBlU2VsZWN0b3IpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSBzZWxlY3Rvci5zdWJzdHJpbmcoMSk7XG5cbiAgICAgIHR5cGVzLnB1c2godHlwZSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdHlwZXM7XG59XG5cbmZ1bmN0aW9uIHJ1bGVOYW1lc0Zyb21TZWxlY3RvcnMoc2VsZWN0b3JzKSB7XG4gIGNvbnN0IHJ1bGVOYW1lcyA9IFtdO1xuXG4gIHNlbGVjdG9ycy5mb3JFYWNoKChzZWxlY3RvcikgPT4ge1xuICAgIGNvbnN0IHNlbGVjdG9yUnVsZU5hbWVTZWxlY3RvciA9IGlzU2VsZWN0b3JSdWxlTmFtZVNlbGVjdG9yKHNlbGVjdG9yKTtcblxuICAgIGlmIChzZWxlY3RvclJ1bGVOYW1lU2VsZWN0b3IpIHtcbiAgICAgIGNvbnN0IHJ1bGVOYW1lID0gc2VsZWN0b3I7ICAvLy9cblxuICAgICAgcnVsZU5hbWVzLnB1c2gocnVsZU5hbWUpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJ1bGVOYW1lcztcbn1cblxuZnVuY3Rpb24gaXNTZWxlY3RvclR5cGVTZWxlY3RvcihzZWxlY3RvcikgeyByZXR1cm4gL15ALy50ZXN0KHNlbGVjdG9yKTsgfVxuXG5mdW5jdGlvbiBpc1NlbGVjdG9yUnVsZU5hbWVTZWxlY3RvcihzZWxlY3RvcikgeyByZXR1cm4gL15bXkBdLy50ZXN0KHNlbGVjdG9yKTsgfVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgUXVlcnkgZnJvbSBcIi4uL3F1ZXJ5XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeUJ5Q2xhc3Mobm9kZSwgQ2xhc3MsIG5vZGVzID0gW10pIHtcbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDbGFzcykge1xuICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gIH1cblxuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IG5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHF1ZXJ5QnlDbGFzcyhjaGlsZE5vZGUsIENsYXNzLCBub2RlcykpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlCeUNsYXNzZXMobm9kZSwgQ2xhc3Nlcywgbm9kZXMgPSBbXSkge1xuICBDbGFzc2VzLnNvbWUoKENsYXNzKSA9PiB7XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDbGFzcykge1xuICAgICAgbm9kZXMucHVzaChub2RlKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBub2RlTm9uVGVybWluYWxOb2RlID0gbm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlTm9uVGVybWluYWxOb2RlKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IG5vZGUuZ2V0Q2hpbGROb2RlcygpO1xuXG4gICAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHF1ZXJ5QnlDbGFzc2VzKGNoaWxkTm9kZSwgQ2xhc3Nlcywgbm9kZXMpKTtcbiAgfVxuXG4gIHJldHVybiBub2Rlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5QnlFeHByZXNzaW9uKG5vZGUsIGV4cHJlc3Npb24sIG1heGltdW1EZXB0aCkge1xuICBjb25zdCBxdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKGV4cHJlc3Npb24sIG1heGltdW1EZXB0aCksXG4gICAgICAgIG5vZGVzID0gcXVlcnkuZXhlY3V0ZShub2RlKTtcblxuICByZXR1cm4gbm9kZXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcXVlcnlCeUNsYXNzLFxuICBxdWVyeUJ5Q2xhc3NlcyxcbiAgcXVlcnlCeUV4cHJlc3Npb25cbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgUXVlcnkgfSBmcm9tIFwiLi9xdWVyeVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBxdWVyeVV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9xdWVyeVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3QgSEVBRCA9IFwiaGVhZFwiO1xuZXhwb3J0IGNvbnN0IFNUWUxFID0gXCJzdHlsZVwiO1xuZXhwb3J0IGNvbnN0IENIQVJBQ1RFUlMgPSBcImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpcIjtcbmV4cG9ydCBjb25zdCBUV09fU1BBQ0VTID0gXCIgIFwiO1xuZXhwb3J0IGNvbnN0IEZPVVJfU1BBQ0VTID0gXCIgICAgXCI7XG5leHBvcnQgY29uc3QgRU1QVFlfU1RSSU5HID0gXCJcIjtcbmV4cG9ydCBjb25zdCBDTEFTU19OQU1FX0xFTkdUSCA9IDY7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgZmlyc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZnVuY3Rpb24gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMocXVlcnksIG5vZGUsIHRva2Vucykge1xuICBsZXQgY29udGVudCA9IG51bGw7XG5cbiAgY29uc3Qgbm9kZXMgPSBxdWVyeS5leGVjdXRlKG5vZGUpLFxuICAgICAgICBub2Rlc0xlbmd0aCA9IG5vZGVzLmxlbmd0aDtcblxuICBpZiAobm9kZXNMZW5ndGggPiAwKSB7XG4gICAgY29uc3QgZmlyc3ROb2RlID0gZmlyc3Qobm9kZXMpO1xuXG4gICAgbm9kZSA9IGZpcnN0Tm9kZTsgLy8vXG5cbiAgICBjb250ZW50ID0gY29udGVudEZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucyk7XG4gIH1cblxuICByZXR1cm4gY29udGVudDtcbn1cblxuZnVuY3Rpb24gY29udGVudEZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICBjb25zdCBmaXJzdFNpZ25pZmljYW50VG9rZW4gPSBub2RlLmdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbigpLFxuICAgICAgICBsYXN0U2lnbmlmaWNhbnRUb2tlbiA9IG5vZGUuZ2V0TGFzdFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgZmlyc3RUb2tlbiA9IGZpcnN0U2lnbmlmaWNhbnRUb2tlbiwgLy8vXG4gICAgICAgIGxhc3RUb2tlbiA9IGxhc3RTaWduaWZpY2FudFRva2VuLCAvLy9cbiAgICAgICAgZmlyc3RUb2tlbkluZGV4ID0gdG9rZW5zLmluZGV4T2YoZmlyc3RUb2tlbiksXG4gICAgICAgIGxhc3RUb2tlbkluZGV4ID0gdG9rZW5zLmluZGV4T2YobGFzdFRva2VuKTtcblxuICBsZXQgY29udGVudCA9IEVNUFRZX1NUUklORztcblxuICBmb3IgKGxldCBpbmRleCA9IGZpcnN0VG9rZW5JbmRleDsgaW5kZXggPD0gbGFzdFRva2VuSW5kZXg7IGluZGV4KyspIHtcbiAgICBjb25zdCB0b2tlbiA9IHRva2Vuc1tpbmRleF0sXG4gICAgICAgICAgdG9rZW5Db250ZW50ID0gdG9rZW4uZ2V0Q29udGVudCgpO1xuXG4gICAgY29udGVudCArPSB0b2tlbkNvbnRlbnQ7XG4gIH1cblxuICByZXR1cm4gY29udGVudDtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZW50XCI7XG5cbmNvbnN0IHByaW9yaXR5UXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8qL3ByaW9yaXR5XCIpLFxuICAgICAgcHJvcGVydHlRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLyovcHJvcGVydHlcIiksXG4gICAgICBleHByZXNzaW9uUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8qL2V4cHJlc3Npb25cIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlY2xhcmF0aW9uIHtcbiAgY29uc3RydWN0b3IocHJvcGVydHksIGV4cHJlc3Npb24sIHByaW9yaXR5KSB7XG4gICAgdGhpcy5wcm9wZXJ0eSA9IHByb3BlcnR5O1xuICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG4gICAgdGhpcy5wcmlvcml0eSA9IHByaW9yaXR5O1xuICB9XG5cbiAgZ2V0UHJvcGVydHkoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHk7XG4gIH1cblxuICBnZXRFeHByZXNzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLmV4cHJlc3Npb247XG4gIH1cblxuICBnZXRQcmlvcml0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcmlvcml0eTtcbiAgfVxuXG4gIGNoZWNrTWF0Y2hlcyhkZWNsYXJhdGlvbnMpIHtcbiAgICBjb25zdCBtYXRjaGVzID0gZGVjbGFyYXRpb25zLnNvbWUoKGRlY2xhcmF0aW9uKSA9PiB7XG4gICAgICBjb25zdCBwcm9wZXJ0eSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5KCksXG4gICAgICAgICAgICBwcm9wZXJ0aWVzTWF0Y2ggPSAocHJvcGVydHkgPT09IHRoaXMucHJvcGVydHkpO1xuXG4gICAgICBpZiAocHJvcGVydGllc01hdGNoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1hdGNoZXM7XG4gIH1cblxuICBhc0NTUyhpbmRlbnQsIGxhc3QpIHtcbiAgICBjb25zdCBjc3MgPSBsYXN0ID9cbiAgICAgICAgICAgICAgICBgJHtpbmRlbnR9JHt0aGlzLnByb3BlcnR5fTogJHt0aGlzLmV4cHJlc3Npb259JHt0aGlzLnByaW9yaXR5fTtgIDpcbiAgICAgICAgICAgICAgICAgIGAke2luZGVudH0ke3RoaXMucHJvcGVydHl9OiAke3RoaXMuZXhwcmVzc2lvbn0ke3RoaXMucHJpb3JpdHl9O1xcbmA7XG5cbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IHByb3BlcnR5Q29udGVudCA9IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zKHByb3BlcnR5UXVlcnksIG5vZGUsIHRva2VucyksXG4gICAgICAgICAgZXhwcmVzc2lvbkNvbnRlbnQgPSBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyhleHByZXNzaW9uUXVlcnksIG5vZGUsIHRva2VucyksXG4gICAgICAgICAgcHJpb3JpdHlDb250ZW50ID0gY29udGVudEZyb21RdWVyeU5vZGVBbmRUb2tlbnMocHJpb3JpdHlRdWVyeSwgbm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnR5Q29udGVudCwgLy8vXG4gICAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Db250ZW50LCAvLy9cbiAgICAgICAgICBwcmlvcml0eSA9IChwcmlvcml0eUNvbnRlbnQgPT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgRU1QVFlfU1RSSU5HIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGAgJHtwcmlvcml0eUNvbnRlbnR9YCxcbiAgICAgICAgICBkZWNsYXJhdGlvbiA9IG5ldyBEZWNsYXJhdGlvbihwcm9wZXJ0eSwgZXhwcmVzc2lvbiwgcHJpb3JpdHkpO1xuXG4gICAgcmV0dXJuIGRlY2xhcmF0aW9uO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBEZWNsYXJhdGlvbiBmcm9tIFwiLi9kZWNsYXJhdGlvblwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IGRlY2xhcmF0aW9uUXVlcnkgPSBRdWVyeS5mcm9tRXhwcmVzc2lvbihcIi8qL2RlY2xhcmF0aW9uXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWNsYXJhdGlvbnMge1xuICBjb25zdHJ1Y3RvcihhcnJheSkge1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbiAgfVxuXG4gIGZvcndhcmRzRm9yRWFjaChjYWxsYmFjaykge1xuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIGZpcnN0SW5kZXggPSAwLFxuICAgICAgICAgIGxhc3RJbmRleCA9IGxlbmd0aCAtIDE7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IGZpcnN0SW5kZXg7IGluZGV4IDw9IGxhc3RJbmRleDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSB0aGlzLmFycmF5W2luZGV4XTtcblxuICAgICAgY2FsbGJhY2soZGVjbGFyYXRpb24sIGluZGV4KTtcbiAgICB9XG4gIH1cblxuICBiYWNrd2FyZHNGb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gdGhpcy5hcnJheS5sZW5ndGgsXG4gICAgICAgICAgZmlyc3RJbmRleCA9IDAsXG4gICAgICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gbGFzdEluZGV4OyBpbmRleCA+PSBmaXJzdEluZGV4OyBpbmRleC0tKSB7XG4gICAgICBjb25zdCBkZWNsYXJhdGlvbiA9IHRoaXMuYXJyYXlbaW5kZXhdO1xuXG4gICAgICBjYWxsYmFjayhkZWNsYXJhdGlvbiwgaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHVuc2hpZnQoZGVjbGFyYXRpb25zKSB7XG4gICAgZGVjbGFyYXRpb25zLmJhY2t3YXJkc0ZvckVhY2goKGRlY2xhcmF0aW9uKSA9PiB7XG4gICAgICBjb25zdCBtYXRjaGVzID0gZGVjbGFyYXRpb24uY2hlY2tNYXRjaGVzKHRoaXMuYXJyYXkpOyAvLy9cblxuICAgICAgaWYgKCFtYXRjaGVzKSB7XG4gICAgICAgIHRoaXMuYXJyYXkudW5zaGlmdChkZWNsYXJhdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUsIGluZGVudCkge1xuICAgIGlmIChpbmRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5kZW50ID0gY2xhc3NOYW1lOyAvLy9cblxuICAgICAgY2xhc3NOYW1lID0gbnVsbDsgLy8vXG4gICAgfVxuXG4gICAgbGV0IGNzcyA9IEVNUFRZX1NUUklORztcblxuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuYXJyYXkubGVuZ3RoO1xuXG4gICAgaWYgKGxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGxhc3RJbmRleCA9IGxlbmd0aCAtIDEsXG4gICAgICAgICAgICBkZWNsYXJhdGlvbnNDU1MgPSB0aGlzLmFycmF5LnJlZHVjZSgoZGVjbGFyYXRpb25zQ1NTLCBkZWNsYXJhdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbGFzdCA9IChpbmRleCA9PT0gbGFzdEluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb25DU1MgPSBkZWNsYXJhdGlvbi5hc0NTUyhpbmRlbnQsIGxhc3QpO1xuXG4gICAgICAgICAgICAgIGRlY2xhcmF0aW9uc0NTUyArPSBkZWNsYXJhdGlvbkNTUztcblxuICAgICAgICAgICAgICByZXR1cm4gZGVjbGFyYXRpb25zQ1NTO1xuICAgICAgICAgICAgfSwgRU1QVFlfU1RSSU5HKTtcblxuICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gbnVsbCkge1xuICAgICAgICBjc3MgPSBkZWNsYXJhdGlvbnNDU1M7ICAvLy9cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNzcyA9IGAuJHtjbGFzc05hbWV9IHtcbiR7ZGVjbGFyYXRpb25zQ1NTfVxufVxuXG5gO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb25Ob2RlcyA9IGRlY2xhcmF0aW9uUXVlcnkuZXhlY3V0ZShub2RlKSxcbiAgICAgICAgICBhcnJheSA9IGRlY2xhcmF0aW9uTm9kZXMubWFwKChkZWNsYXJhdGlvbk5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBkZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb24gPSBEZWNsYXJhdGlvbi5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gZGVjbGFyYXRpb247XG4gICAgICAgICAgfSksXG4gICAgICAgICAgZGVjbGFyYXRpb25zID0gbmV3IERlY2xhcmF0aW9ucyhhcnJheSk7XG5cbiAgICByZXR1cm4gZGVjbGFyYXRpb25zO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBEZWNsYXJhdGlvbnMgZnJvbSBcIi4vZGVjbGFyYXRpb25zXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZW50XCI7XG5cbmNvbnN0IHNlbGVjdG9yc1F1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvL3NlbGVjdG9yc1wiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZVNldCB7XG4gIGNvbnN0cnVjdG9yKHNlbGVjdG9ycywgZGVjbGFyYXRpb25zKSB7XG4gICAgdGhpcy5zZWxlY3RvcnMgPSBzZWxlY3RvcnM7XG4gICAgdGhpcy5kZWNsYXJhdGlvbnMgPSBkZWNsYXJhdGlvbnM7XG4gIH1cblxuICBnZXRTZWxlY3RvcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0b3JzO1xuICB9XG5cbiAgZ2V0RGVjbGFyYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmRlY2xhcmF0aW9ucztcbiAgfVxuXG4gIHVuc2hpZnQocnVsZVNldCkge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9ucyA9IHJ1bGVTZXQuZ2V0RGVjbGFyYXRpb25zKCk7XG5cbiAgICB0aGlzLmRlY2xhcmF0aW9ucy51bnNoaWZ0KGRlY2xhcmF0aW9ucyk7XG4gIH1cblxuICBmaW5kTWF0Y2hpbmdSdWxlU2V0KHJ1bGVTZXRzKSB7XG4gICAgY29uc3QgbWF0Y2hpbmdSdWxlU2V0ID0gcnVsZVNldHMuZmluZCgocnVsZVNldCkgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0b3JzID0gcnVsZVNldC5nZXRTZWxlY3RvcnMoKSxcbiAgICAgICAgICAgIHNlbGVjdG9yc01hdGNoID0gKHNlbGVjdG9ycyA9PT0gdGhpcy5zZWxlY3RvcnMpLFxuICAgICAgICAgICAgcnVsZVNldHNNYXRjaCA9IHNlbGVjdG9yc01hdGNoOyAvLy9cblxuICAgICAgaWYgKHJ1bGVTZXRzTWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDsgLy8vXG5cbiAgICByZXR1cm4gbWF0Y2hpbmdSdWxlU2V0O1xuICB9XG5cbiAgYXNDU1MoY2xhc3NOYW1lLCBpbmRlbnQpIHtcbiAgICBsZXQgY3NzID0gRU1QVFlfU1RSSU5HO1xuXG4gICAgY29uc3QgZGVjbGFyYXRpb25zQ1NTID0gdGhpcy5kZWNsYXJhdGlvbnMuYXNDU1MoYCAgJHtpbmRlbnR9YCk7XG5cbiAgICBpZiAoZGVjbGFyYXRpb25zQ1NTICE9PSBFTVBUWV9TVFJJTkcpIHtcbiAgICAgICBjc3MgPSBgJHtpbmRlbnR9LiR7Y2xhc3NOYW1lfSR7dGhpcy5zZWxlY3RvcnN9IHtcbiR7ZGVjbGFyYXRpb25zQ1NTfVxuJHtpbmRlbnR9fVxuXG5gO1xuICAgIH1cblxuICAgIHJldHVybiBjc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSB7XG4gICAgY29uc3Qgc2VsZWN0b3JzID0gc2VsZWN0b3JzRnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBkZWNsYXJhdGlvbnMgPSBEZWNsYXJhdGlvbnMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBtZWRpYSA9IG5ldyBSdWxlU2V0KHNlbGVjdG9ycywgZGVjbGFyYXRpb25zKTtcblxuICAgIHJldHVybiBtZWRpYTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZWxlY3RvcnNGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgY29uc3Qgc2VsZWN0b3JzTm9kZUNvbnRlbnQgPSBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyhzZWxlY3RvcnNRdWVyeSwgbm9kZSwgdG9rZW5zKSxcbiAgICAgICAgc2VsZWN0b3JzID0gYCR7c2VsZWN0b3JzTm9kZUNvbnRlbnR9YDtcblxuICByZXR1cm4gc2VsZWN0b3JzO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCJvY2NhbS1kb21cIjtcblxuaW1wb3J0IFJ1bGVTZXQgZnJvbSBcIi4vcnVsZVNldFwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHJ1bGVTZXRRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiLyovcnVsZVNldFwiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnVsZVNldHMge1xuICBjb25zdHJ1Y3RvcihhcnJheSkge1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbiAgfVxuXG4gIHVuc2hpZnQocnVsZVNldHMpIHtcbiAgICBydWxlU2V0cy5mb3JFYWNoKChydWxlU2V0KSA9PiB7XG4gICAgICBjb25zdCBtYXRjaGluZ1J1bGVTZXQgPSBydWxlU2V0LmZpbmRNYXRjaGluZ1J1bGVTZXQodGhpcy5hcnJheSk7IC8vL1xuXG4gICAgICAobWF0Y2hpbmdSdWxlU2V0ID09PSBudWxsKSA/XG4gICAgICAgIHRoaXMuYXJyYXkudW5zaGlmdChydWxlU2V0KSA6XG4gICAgICAgICAgbWF0Y2hpbmdSdWxlU2V0LnVuc2hpZnQocnVsZVNldCk7XG4gICAgfSk7XG4gIH1cblxuICBmb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5hcnJheS5mb3JFYWNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIGFzQ1NTKGNsYXNzTmFtZSwgaW5kZW50KSB7XG4gICAgY29uc3QgY3NzID0gdGhpcy5hcnJheS5yZWR1Y2UoKGNzcywgcnVsZVNldCkgPT4ge1xuICAgICAgY29uc3QgcnVsZVNldENTUyA9IHJ1bGVTZXQuYXNDU1MoY2xhc3NOYW1lLCBpbmRlbnQpO1xuXG4gICAgICBjc3MgKz0gcnVsZVNldENTUztcblxuICAgICAgcmV0dXJuIGNzcztcbiAgICB9LCBFTVBUWV9TVFJJTkcpO1xuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBydWxlU2V0Tm9kZXMgPSBydWxlU2V0UXVlcnkuZXhlY3V0ZShub2RlKSxcbiAgICAgICAgICBhcnJheSA9IHJ1bGVTZXROb2Rlcy5tYXAoKHJ1bGVTZXROb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gcnVsZVNldE5vZGUsIC8vL1xuICAgICAgICAgICAgICAgICAgcnVsZVNldCA9IFJ1bGVTZXQuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKTtcblxuICAgICAgICAgICAgcmV0dXJuIHJ1bGVTZXQ7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcnVsZVNldHMgPSBuZXcgUnVsZVNldHMoYXJyYXkpO1xuXG4gICAgcmV0dXJuIHJ1bGVTZXRzO1xuICB9XG59XG4iLCAiUmVhY3QuY3JlYXRlRWxlbWVudCIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwib2NjYW0tZG9tXCI7XG5cbmltcG9ydCBSdWxlU2V0cyBmcm9tIFwiLi9ydWxlU2V0c1wiO1xuaW1wb3J0IERlY2xhcmF0aW9ucyBmcm9tIFwiLi9kZWNsYXJhdGlvbnNcIjtcblxuaW1wb3J0IHsgVFdPX1NQQUNFUywgRk9VUl9TUEFDRVMgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBjb250ZW50RnJvbVF1ZXJ5Tm9kZUFuZFRva2VucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGVudFwiO1xuXG5jb25zdCBtZWRpYVF1ZXJpZXNRdWVyeSA9IFF1ZXJ5LmZyb21FeHByZXNzaW9uKFwiL21lZGlhL21lZGlhUXVlcmllc1wiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWVkaWEge1xuICBjb25zdHJ1Y3RvcihtZWRpYVF1ZXJpZXMsIGRlY2xhcmF0aW9ucywgcnVsZVNldHMpIHtcbiAgICB0aGlzLm1lZGlhUXVlcmllcyA9IG1lZGlhUXVlcmllcztcbiAgICB0aGlzLmRlY2xhcmF0aW9ucyA9IGRlY2xhcmF0aW9ucztcbiAgICB0aGlzLnJ1bGVTZXRzID0gcnVsZVNldHM7XG4gIH1cblxuICBnZXRNZWRpYVF1ZXJpZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVkaWFRdWVyaWVzO1xuICB9XG5cbiAgZ2V0RGVjbGFyYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmRlY2xhcmF0aW9ucztcbiAgfVxuXG4gIGdldFJ1bGVTZXRzKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVTZXRzO1xuICB9XG5cbiAgYXNDU1MoY2xhc3NOYW1lKSB7XG4gICAgbGV0IGNzcyA9IFwiXCI7XG5cbiAgICBjb25zdCBydWxlU2V0c0NTUyA9IHRoaXMucnVsZVNldHMuYXNDU1MoY2xhc3NOYW1lLCBUV09fU1BBQ0VTKSxcbiAgICAgICAgICBkZWNsYXJhdGlvbnNDU1MgPSB0aGlzLmRlY2xhcmF0aW9ucy5hc0NTUyhjbGFzc05hbWUsIEZPVVJfU1BBQ0VTKTtcblxuICAgIGlmICgocnVsZVNldHNDU1MgIT09IG51bGwpIHx8IChkZWNsYXJhdGlvbnNDU1MgIT09IG51bGwpKSB7XG4gICAgICBjc3MgPSBgQG1lZGlhICR7dGhpcy5tZWRpYVF1ZXJpZXN9IHtcbiR7ZGVjbGFyYXRpb25zQ1NTfSR7cnVsZVNldHNDU1N9XG59XG5cbmA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBtZWRpYVF1ZXJpZXMgPSBtZWRpYVF1ZXJpZXNGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIGRlY2xhcmF0aW9ucyA9IERlY2xhcmF0aW9ucy5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpLFxuICAgICAgICAgIHJ1bGVTZXRzID0gUnVsZVNldHMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBtZWRpYSA9IG5ldyBNZWRpYShtZWRpYVF1ZXJpZXMsIGRlY2xhcmF0aW9ucywgcnVsZVNldHMpO1xuXG4gICAgcmV0dXJuIG1lZGlhO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1lZGlhUXVlcmllc0Zyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICBjb25zdCBtZWRpYVF1ZXJpZXNOb2RlQ29udGVudCA9IGNvbnRlbnRGcm9tUXVlcnlOb2RlQW5kVG9rZW5zKG1lZGlhUXVlcmllc1F1ZXJ5LCBub2RlLCB0b2tlbnMpLFxuICAgICAgICBtZWRpYVF1ZXJpZXMgPSBgJHttZWRpYVF1ZXJpZXNOb2RlQ29udGVudH1gO1xuXG4gIHJldHVybiBtZWRpYVF1ZXJpZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIm9jY2FtLWRvbVwiO1xuXG5pbXBvcnQgTWVkaWEgZnJvbSBcIi4vbWVkaWFcIjtcblxuaW1wb3J0IHsgRU1QVFlfU1RSSU5HIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBtZWRpYVF1ZXJ5ID0gUXVlcnkuZnJvbUV4cHJlc3Npb24oXCIvc3R5bGVzaGVldC9tZWRpYVwiKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWVkaWFzIHtcbiAgY29uc3RydWN0b3IoYXJyYXkpIHtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG4gIH1cblxuICB1bnNoaWZ0KG1lZGlhcykge1xuICAgIG1lZGlhcy5mb3JFYWNoKChtZWRpYSkgPT4ge1xuICAgICAgdGhpcy5hcnJheS51bnNoaWZ0KG1lZGlhKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZvckVhY2goY2FsbGJhY2spIHtcbiAgICB0aGlzLmFycmF5LmZvckVhY2goY2FsbGJhY2spO1xuICB9XG5cbiAgYXNDU1MoY2xhc3NOYW1lKSB7XG4gICAgY29uc3QgY3NzID0gdGhpcy5hcnJheS5yZWR1Y2UoKGNzcywgbWVkaWEpID0+IHtcbiAgICAgIGNvbnN0IG1lZGlhQ1NTID0gbWVkaWEuYXNDU1MoY2xhc3NOYW1lKTtcblxuICAgICAgY3NzICs9IG1lZGlhQ1NTO1xuXG4gICAgICByZXR1cm4gY3NzO1xuICAgIH0sIEVNUFRZX1NUUklORyk7XG5cbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2Vucykge1xuICAgIGNvbnN0IG1lZGlhTm9kZXMgPSBtZWRpYVF1ZXJ5LmV4ZWN1dGUobm9kZSksXG4gICAgICAgICAgYXJyYXkgPSBtZWRpYU5vZGVzLm1hcCgobWVkaWFOb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gbWVkaWFOb2RlLCAvLy9cbiAgICAgICAgICAgICAgICAgIG1lZGlhID0gTWVkaWEuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKTtcblxuICAgICAgICAgICAgcmV0dXJuIG1lZGlhO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIG1lZGlhcyA9IG5ldyBNZWRpYXMoYXJyYXkpO1xuXG4gICAgcmV0dXJuIG1lZGlhcztcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBNZWRpYXMgZnJvbSBcIi4vc3R5bGUvbWVkaWFzXCI7XG5pbXBvcnQgUnVsZVNldHMgZnJvbSBcIi4vc3R5bGUvcnVsZVNldHNcIjtcbmltcG9ydCBEZWNsYXJhdGlvbnMgZnJvbSBcIi4vc3R5bGUvZGVjbGFyYXRpb25zXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0eWxlIHtcbiAgY29uc3RydWN0b3IoZGVjbGFyYXRpb25zLCBydWxlU2V0cywgbWVkaWFzKSB7XG4gICAgdGhpcy5kZWNsYXJhdGlvbnMgPSBkZWNsYXJhdGlvbnM7XG4gICAgdGhpcy5ydWxlU2V0cyA9IHJ1bGVTZXRzO1xuICAgIHRoaXMubWVkaWFzID0gbWVkaWFzO1xuICB9XG5cbiAgZ2V0RGVjbGFyYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmRlY2xhcmF0aW9ucztcbiAgfVxuXG4gIGdldFJ1bGVTZXRzKCkge1xuICAgIHJldHVybiB0aGlzLnJ1bGVTZXRzO1xuICB9XG5cbiAgZ2V0TWVkaWFzKCkge1xuICAgIHJldHVybiB0aGlzLm1lZGlhcztcbiAgfVxuXG4gIGV4dGVuZHMoc3VwZXJTdHlsZSkge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9ucyA9IHN1cGVyU3R5bGUuZ2V0RGVjbGFyYXRpb25zKCksXG4gICAgICAgICAgcnVsZVNldHMgPSBzdXBlclN0eWxlLmdldFJ1bGVTZXRzKCksXG4gICAgICAgICAgbWVkaWFzID0gc3VwZXJTdHlsZS5nZXRNZWRpYXMoKTtcblxuICAgIHRoaXMudW5zaGlmdChkZWNsYXJhdGlvbnMsIHJ1bGVTZXRzLCBtZWRpYXMpO1xuICB9XG5cbiAgdW5zaGlmdChkZWNsYXJhdGlvbnMsIHJ1bGVTZXRzLCBtZWRpYXMpIHtcbiAgICB0aGlzLmRlY2xhcmF0aW9ucy51bnNoaWZ0KGRlY2xhcmF0aW9ucyk7XG4gICAgdGhpcy5ydWxlU2V0cy51bnNoaWZ0KHJ1bGVTZXRzKTtcbiAgICB0aGlzLm1lZGlhcy51bnNoaWZ0KG1lZGlhcyk7XG4gIH1cblxuICBhc0NTUyhjbGFzc05hbWUpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnNDU1MgPSB0aGlzLmRlY2xhcmF0aW9ucy5hc0NTUyhjbGFzc05hbWUsIFwiICBcIiksXG4gICAgICAgICAgcnVsZVNldHNDU1MgPSB0aGlzLnJ1bGVTZXRzLmFzQ1NTKGNsYXNzTmFtZSwgXCJcIiksXG4gICAgICAgICAgbWVkaWFzQ1NTID0gdGhpcy5tZWRpYXMuYXNDU1MoY2xhc3NOYW1lKSxcbiAgICAgICAgICBjc3MgPSBgJHtkZWNsYXJhdGlvbnNDU1N9JHtydWxlU2V0c0NTU30ke21lZGlhc0NTU31gO1xuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnMgPSBEZWNsYXJhdGlvbnMuZnJvbU5vZGVBbmRUb2tlbnMobm9kZSwgdG9rZW5zKSxcbiAgICAgICAgICBydWxlU2V0cyA9IFJ1bGVTZXRzLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgbWVkaWFzID0gTWVkaWFzLmZyb21Ob2RlQW5kVG9rZW5zKG5vZGUsIHRva2VucyksXG4gICAgICAgICAgc3R5bGUgPSBuZXcgU3R5bGUoZGVjbGFyYXRpb25zLCBydWxlU2V0cywgbWVkaWFzKTtcblxuICAgIHJldHVybiBzdHlsZTtcbiAgfVxufVxuIiwgIlJlYWN0LmNyZWF0ZUVsZW1lbnQiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTdHlsZSBmcm9tIFwiLi4vc3R5bGVcIjtcbmltcG9ydCBDU1NMZXhlciBmcm9tIFwiLi4vY3NzL2xleGVyXCI7XG5pbXBvcnQgQ1NTUGFyc2VyIGZyb20gXCIuLi9jc3MvcGFyc2VyXCI7XG5cbmltcG9ydCB7IEhFQUQsIFNUWUxFLCBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IGNzc0xleGVyID0gQ1NTTGV4ZXIuZnJvbU5vdGhpbmcoKSxcbiAgICAgIGNzc1BhcnNlciA9IENTU1BhcnNlci5mcm9tTm90aGluZygpO1xuXG5pZiAoIWdsb2JhbFRoaXMuc3R5bGVNYXApIHtcbiAgZ2xvYmFsVGhpcy5zdHlsZU1hcCA9IHt9O1xufVxuXG5jb25zdCB7IHN0eWxlTWFwIH0gPSBnbG9iYWxUaGlzO1xuXG5mdW5jdGlvbiByZW5kZXJTdHlsZShzdHlsZSkge1xuICBjb25zdCBoZWFkRE9NRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoSEVBRCksXG4gICAgICAgIHN0eWxlRE9NRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoU1RZTEUpLFxuICAgICAgICBpbm5lckhUTUwgPSBgXG4gICAgICAgIFxuJHtzdHlsZX1gO1xuXG4gIE9iamVjdC5hc3NpZ24oc3R5bGVET01FbGVtZW50LCB7XG4gICAgaW5uZXJIVE1MXG4gIH0pO1xuXG4gIGhlYWRET01FbGVtZW50LmFwcGVuZENoaWxkKHN0eWxlRE9NRWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclN0eWxlcygpIHtcbiAgY29uc3Qgc3R5bGVzQ1NTID0gcmV0cmlldmVTdHlsZXNDU1MoKSxcbiAgICAgICAgc3R5bGUgPSBzdHlsZXNDU1M7ICAvLy9cblxuICByZW5kZXJTdHlsZShzdHlsZSk7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU3R5bGUoYXJncywgY2xhc3NOYW1lLCBzdXBlclN0eWxlID0gbnVsbCkge1xuICBjb25zdCBzdHJpbmdzID0gYXJncy5zaGlmdCgpLFx0Ly8vXG4gICAgICAgIGNvbnRlbnQgPSBzdHJpbmdzLnJlZHVjZSgoY29udGVudCwgc3RyaW5nLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFyZyA9IGFyZ3NbaW5kZXhdO1xuXG4gICAgICAgICAgY29udGVudCA9IChhcmcgIT09IHVuZGVmaW5lZCkgP1xuICAgICAgICAgICAgICAgICAgICAgIGAke2NvbnRlbnR9JHtzdHJpbmd9JHthcmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICBgJHtjb250ZW50fSR7c3RyaW5nfWA7XG5cbiAgICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICAgICAgfSwgRU1QVFlfU1RSSU5HKSxcbiAgICAgICAgdG9rZW5zID0gY3NzTGV4ZXIudG9rZW5pc2UoY29udGVudCksXG4gICAgICAgIG5vZGUgPSBjc3NQYXJzZXIucGFyc2UodG9rZW5zKSxcbiAgICAgICAgc3R5bGUgPSBTdHlsZS5mcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0b2tlbnMpO1xuXG4gICAgICAgIGlmIChzdXBlclN0eWxlICE9PSBudWxsKSB7XG4gICAgICAgICAgc3R5bGUuZXh0ZW5kcyhzdXBlclN0eWxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0eWxlTWFwW2NsYXNzTmFtZV0gPSBzdHlsZTtcbn1cblxuZnVuY3Rpb24gcmV0cmlldmVTdHlsZShjbGFzc05hbWUpIHtcbiAgY29uc3Qgc3R5bGUgPSBzdHlsZU1hcFtjbGFzc05hbWVdIHx8IG51bGw7XG5cbiAgcmV0dXJuIHN0eWxlO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHJlbmRlclN0eWxlLFxuICByZW5kZXJTdHlsZXMsXG4gIGdlbmVyYXRlU3R5bGUsXG4gIHJldHJpZXZlU3R5bGVcbn07XG5cbmZ1bmN0aW9uIHJldHJpZXZlU3R5bGVzQ1NTKCkge1xuICBjb25zdCBjbGFzc05hbWVzID0gT2JqZWN0LmtleXMoc3R5bGVNYXApLFxuICAgICAgICBzdHlsZXNDU1MgPSBjbGFzc05hbWVzLnJlZHVjZSgoc3R5bGVzQ1NTLCBjbGFzc05hbWUpID0+IHtcbiAgICAgICAgICBjb25zdCBzdHlsZSA9IHJldHJpZXZlU3R5bGUoY2xhc3NOYW1lKSxcbiAgICAgICAgICAgICAgICBzdHlsZUNTUyA9IHN0eWxlLmFzQ1NTKGNsYXNzTmFtZSk7XG5cbiAgICAgICAgICBzdHlsZXNDU1MgKz0gc3R5bGVDU1M7XG5cbiAgICAgICAgICByZXR1cm4gc3R5bGVzQ1NTO1xuICAgICAgICB9LCBFTVBUWV9TVFJJTkcpO1xuXG4gIHJldHVybiBzdHlsZXNDU1M7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IENIQVJBQ1RFUlMsIEVNUFRZX1NUUklORywgQ0xBU1NfTkFNRV9MRU5HVEggfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IGxlbmd0aCA9IENMQVNTX05BTUVfTEVOR1RILFxuICAgICAgY2hhcmFjdGVycyA9IENIQVJBQ1RFUlMsXG4gICAgICBjaGFyYWN0ZXJzTGVuZ3RoID0gY2hhcmFjdGVycy5sZW5ndGg7XG5cbmNvbnN0IGNsYXNzTmFtZXMgPSBbXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQ2xhc3NOYW1lKCkge1xuICBsZXQgY2xhc3NOYW1lID0gRU1QVFlfU1RSSU5HO1xuXG4gIGZvciAobGV0IGNvdW50ID0gMDsgY291bnQgPCBsZW5ndGg7IGNvdW50KyspIHtcbiAgICBjb25zdCBpbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNoYXJhY3RlcnNMZW5ndGgpLFxuICAgICAgICAgIGNoYXJhY3RlciA9IGNoYXJhY3RlcnNbaW5kZXhdO1xuXG4gICAgY2xhc3NOYW1lICs9IGNoYXJhY3RlcjtcbiAgfVxuXG4gIGNvbnN0IGNsYXNzTmFtZXNJbmNsdWRlc0NsYXNzTmFtZSA9IGNsYXNzTmFtZXMuaW5jbHVkZXMoY2xhc3NOYW1lKTtcblxuICBpZiAoIWNsYXNzTmFtZXNJbmNsdWRlc0NsYXNzTmFtZSkge1xuICAgIGNsYXNzTmFtZXMucHVzaChjbGFzc05hbWUpO1xuICB9IGVsc2Uge1xuICAgIGNsYXNzTmFtZSA9IGdlbmVyYXRlQ2xhc3NOYW1lKCk7XG4gIH1cblxuICByZXR1cm4gY2xhc3NOYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0cmlldmVDbGFzc05hbWUoZWxlbWVudCkge1xuICBjb25zdCB7IGNsYXNzTmFtZSB9ID0gZWxlbWVudC5yZWFjdEZ1bmN0aW9uIHx8IGVsZW1lbnQucmVhY3RDb21wb25lbnQuY29uc3RydWN0b3I7XG5cbiAgcmV0dXJuIGNsYXNzTmFtZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBnZW5lcmF0ZUNsYXNzTmFtZSxcbiAgcmV0cmlldmVDbGFzc05hbWVcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgdGFnTmFtZXMgfSBmcm9tIFwiLi90YWdOYW1lc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU1NMZXhlciB9IGZyb20gXCIuL2Nzcy9sZXhlclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDU1NQYXJzZXIgfSBmcm9tIFwiLi9jc3MvcGFyc2VyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHN0eWxlc1V0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9zdHlsZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY2xhc3NOYW1lVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2NsYXNzTmFtZVwiO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NsYXNzKGFyZ3VtZW50KSB7IHJldHVybiBpc1N1YmNsYXNzT2YoYXJndW1lbnQsIEVsZW1lbnQpOyB9ICAvLy9cblxuZnVuY3Rpb24gaXNTdWJjbGFzc09mKGFyZ3VtZW50LCBDbGFzcykge1xuICBjb25zdCBzdWJjbGFzc09mID0gKGFyZ3VtZW50LnByb3RvdHlwZSBpbnN0YW5jZW9mIENsYXNzKTtcblxuICByZXR1cm4gc3ViY2xhc3NPZjtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IENMQVNTX05BTUUgPSBcImNsYXNzTmFtZVwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBSZWFjdCB9IGZyb20gXCJlYXN5XCI7XG5pbXBvcnQgeyB0YWdOYW1lcywgc3R5bGVzVXRpbGl0aWVzLCBjbGFzc05hbWVVdGlsaXRpZXMgfSBmcm9tIFwid2l0aC1zdHlsZVwiO1xuXG5pbXBvcnQgeyBpc0NsYXNzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2NsYXNzXCI7XG5pbXBvcnQgeyBDTEFTU19OQU1FIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IHsgZ2VuZXJhdGVDbGFzc05hbWUgfSA9IGNsYXNzTmFtZVV0aWxpdGllcyxcbiAgICAgIHsgcmVuZGVyU3R5bGUsIHJlbmRlclN0eWxlcywgZ2VuZXJhdGVTdHlsZSwgcmV0cmlldmVTdHlsZSB9ID0gc3R5bGVzVXRpbGl0aWVzO1xuXG5mdW5jdGlvbiB3aXRoU3R5bGUoQ2xhc3NPckZ1bmN0aW9uKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBjb25zdCBhcmdzID0gWyAuLi5hcmd1bWVudHMgXTsgIC8vL1xuXG4gICAgbGV0IHsgY2xhc3NOYW1lID0gbnVsbCB9ID0gQ2xhc3NPckZ1bmN0aW9uO1xuXG4gICAgY29uc3Qgc3VwZXJTdHlsZSA9IHJldHJpZXZlU3R5bGUoY2xhc3NOYW1lKTtcblxuICAgIGNsYXNzTmFtZSA9IGdlbmVyYXRlQ2xhc3NOYW1lKCk7XG5cbiAgICBnZW5lcmF0ZVN0eWxlKGFyZ3MsIGNsYXNzTmFtZSwgc3VwZXJTdHlsZSk7XG5cbiAgICBjb25zdCBDbGFzc09yRnVuY3Rpb25DbGFzcyA9IGlzQ2xhc3MoQ2xhc3NPckZ1bmN0aW9uKTtcblxuICAgIGlmIChDbGFzc09yRnVuY3Rpb25DbGFzcykge1xuICAgICAgY29uc3QgQ2xhc3MgPSBDbGFzc09yRnVuY3Rpb247ICAvLy9cblxuICAgICAgQ2xhc3NPckZ1bmN0aW9uID0gY2xhc3MgZXh0ZW5kcyBDbGFzcyB7XG4gICAgICAgIHN0YXRpYyBmcm9tQ2xhc3MoX0NsYXNzLCBwcm9wZXJ0aWVzLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzID0gYXBwZW5kQ2xhc3NOYW1lVG9Qcm9wZXJ0aWVzKGNsYXNzTmFtZSwgcHJvcGVydGllcyk7XG5cbiAgICAgICAgICByZXR1cm4gQ2xhc3MuZnJvbUNsYXNzKF9DbGFzcywgcHJvcGVydGllcywgLi4ucmVtYWluaW5nQXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBGdW5jdGlvbiA9IENsYXNzT3JGdW5jdGlvbjsgLy8vXG5cbiAgICAgIENsYXNzT3JGdW5jdGlvbiA9IChwcm9wZXJ0aWVzKSA9PiB7XG4gICAgICAgIHByb3BlcnRpZXMgPSBhcHBlbmRDbGFzc05hbWVUb1Byb3BlcnRpZXMoY2xhc3NOYW1lLCBwcm9wZXJ0aWVzKTtcblxuICAgICAgICByZXR1cm4gRnVuY3Rpb24ocHJvcGVydGllcyk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIE9iamVjdC5hc3NpZ24oQ2xhc3NPckZ1bmN0aW9uLCB7XG4gICAgICBjbGFzc05hbWVcbiAgICB9KTtcblxuICAgIHJldHVybiBDbGFzc09yRnVuY3Rpb247XG4gIH07XG59XG5cbk9iamVjdC5hc3NpZ24od2l0aFN0eWxlLCB7XG4gIHJlbmRlclN0eWxlLFxuICByZW5kZXJTdHlsZXNcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGU7XG5cbnRhZ05hbWVzLmZvckVhY2goKHRhZ05hbWUpID0+IHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpdGhTdHlsZSwgdGFnTmFtZSwge1xuICAgIGdldDogKCkgPT4gZnVuY3Rpb24oKSB7XG4gICAgICBjb25zdCBhcmdzID0gWy4uLmFyZ3VtZW50c10sICAvLy9cbiAgICAgICAgICAgIGNsYXNzTmFtZSA9IGdlbmVyYXRlQ2xhc3NOYW1lKCk7XG5cbiAgICAgIGdlbmVyYXRlU3R5bGUoYXJncywgY2xhc3NOYW1lKTtcblxuICAgICAgY29uc3QgRnVuY3Rpb24gPSAocHJvcGVydGllcykgPT4ge1xuICAgICAgICBwcm9wZXJ0aWVzID0gYXBwZW5kQ2xhc3NOYW1lVG9Qcm9wZXJ0aWVzKGNsYXNzTmFtZSwgcHJvcGVydGllcyk7XG5cbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSwgcHJvcGVydGllcyk7XG4gICAgICB9O1xuXG4gICAgICBPYmplY3QuYXNzaWduKEZ1bmN0aW9uLCB7XG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBGdW5jdGlvbjtcbiAgICB9XG4gIH0pO1xufSk7XG5cbmZ1bmN0aW9uIGFwcGVuZENsYXNzTmFtZVRvUHJvcGVydGllcyhjbGFzc05hbWUsIHByb3BlcnRpZXMpIHtcbiAgcHJvcGVydGllcyA9IHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoQ0xBU1NfTkFNRSkgPyBwcm9wZXJ0aWVzIDogeyAuLi5wcm9wZXJ0aWVzLCBjbGFzc05hbWUgfTsgLy8vXG5cbiAgcmV0dXJuIHByb3BlcnRpZXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcIi4vd2l0aFN0eWxlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGNvbnN0IGxvZ29TVkdXaWR0aCA9IFwiMjRyZW1cIlxuZXhwb3J0IGNvbnN0IG5hbWVTVkdIZWlnaHQgPSBcIjIuMXJlbVwiXG5leHBvcnQgY29uc3QgdGl0bGVTVkdIZWlnaHQgPSBcIjIuMXJlbVwiO1xuZXhwb3J0IGNvbnN0IHRvZ2dsZVNWR0hlaWdodCA9IFwiMS44cmVtXCJcbmV4cG9ydCBjb25zdCBtYXJrZXJTVkdIZWlnaHQgPSBuYW1lU1ZHSGVpZ2h0OyAvLy9cbmV4cG9ydCBjb25zdCBqdWxpYU1vbm9MaW5lSGVpZ2h0ID0gMS41O1xuZXhwb3J0IGNvbnN0IG5hbWVTVkdNYXJnaW5Cb3R0b20gPSBcIjAuNHJlbVwiO1xuZXhwb3J0IGNvbnN0IG1hcmtlclNWR01hcmdpbkxlZnQgPSBcIjIuNHJlbVwiO1xuZXhwb3J0IGNvbnN0IGZpbGVOYW1lU1ZHUGFkZGluZ0xlZnQgPSBcIjIuMnJlbVwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGxvZ29TVkdXaWR0aCxcbiAgbmFtZVNWR0hlaWdodCxcbiAgdGl0bGVTVkdIZWlnaHQsXG4gIHRvZ2dsZVNWR0hlaWdodCxcbiAgbWFya2VyU1ZHSGVpZ2h0LFxuICBqdWxpYU1vbm9MaW5lSGVpZ2h0LFxuICBuYW1lU1ZHTWFyZ2luQm90dG9tLFxuICBtYXJrZXJTVkdNYXJnaW5MZWZ0LFxuICBmaWxlTmFtZVNWR1BhZGRpbmdMZWZ0XG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgY29uc3Qgc25vd1doaXRlID0gXCIjZmZmZmZmXCI7XG5leHBvcnQgY29uc3Qgc3ByaW5nV29vZCA9IFwiI2Y4ZjZmMVwiO1xuZXhwb3J0IGNvbnN0IGJpYW5jYSA9IFwiI2Y4ZjdlYlwiO1xuZXhwb3J0IGNvbnN0IGJvbmpvdXIgPSBcIiNFNUUyRTBcIjtcbmV4cG9ydCBjb25zdCBnYWluc2Jvcm91Z2ggPSBcIiNEOEQ2RDJcIjtcbmV4cG9ydCBjb25zdCBkYXduID0gXCIjQjhCM0E4XCI7XG5leHBvcnQgY29uc3Qgc3RhcmR1c3QgPSBcIiM5ZjlmOWNcIjtcbmV4cG9ydCBjb25zdCBzdG9ybUR1c3QgPSBcIiM2NDY0NjNcIjtcbmV4cG9ydCBjb25zdCBlbXBlcm9yID0gXCIjNTE1MTUwXCI7XG5leHBvcnQgY29uc3QgdHVhdGFyYSA9IFwiIzM2MzUzNFwiO1xuZXhwb3J0IGNvbnN0IGR1bmUgPSBcIiMyNDIxMWVcIjtcbmV4cG9ydCBjb25zdCB3b29kc21va2UgPSBcIiMwYzBkMGZcIjtcbmV4cG9ydCBjb25zdCBwaXRjaEJsYWNrID0gXCIjMDAwMDAwXCI7XG5cbmV4cG9ydCBjb25zdCBwb21lZ3JhbmF0ZSA9IFwiI2Y1MjkyOVwiO1xuZXhwb3J0IGNvbnN0IHN1c2hpID0gXCIjN2ZhODJmXCI7XG5leHBvcnQgY29uc3QgbGFwaXMgPSBcIiMwMDMwZTZcIjtcblxuZXhwb3J0IGNvbnN0IGh1cnJpY2FuZSA9IFwiIzkwODk4OVwiO1xuZXhwb3J0IGNvbnN0IHBhYmxvID0gXCIjNzc2ZjYxXCI7XG5leHBvcnQgY29uc3QgYXJtYWRpbGxvID0gXCIjNDk0NDNDXCI7XG5cbmV4cG9ydCBjb25zdCB3b29kbGFuZCA9IFwiIzNCNTUyYlwiO1xuZXhwb3J0IGNvbnN0IGxvZ0NhYmluID0gXCIjMmIzODIzXCI7XG5leHBvcnQgY29uc3QgYmxhY2tPbGl2ZSA9IFwiIzFjMjQxMlwiO1xuZXhwb3J0IGNvbnN0IGh1bnRlckdyZWVuID0gXCIjMTYxZDEwXCI7XG5cbmV4cG9ydCBjb25zdCBjYWRldEJsdWUgPSBcIiM1ZjllYTBcIjtcbmV4cG9ydCBjb25zdCBzcGFuaXNoR3JlZW4gPSBcIiM4NGIwN2JcIjtcblxuZXhwb3J0IGNvbnN0IHJhenptYXRhenogPSBcIiNlMzI1NmJcIjtcbmV4cG9ydCBjb25zdCB0ZXJyYWNvdHRhID0gXCIjYTgzYTI1XCI7XG5leHBvcnQgY29uc3Qga29ybWEgPSBcIiM5OTQyMGZcIjtcbmV4cG9ydCBjb25zdCB3YWxudXQgPSBcIiM1OTMzMWNcIjtcblxuZXhwb3J0IGNvbnN0IHN1bmZsb3dlciA9IFwiI2M5YmY2MlwiO1xuZXhwb3J0IGNvbnN0IGhva2V5UG9rZXkgPSBcIiNjNmI2MjRcIjtcbmV4cG9ydCBjb25zdCBjZWxlcnkgPSBcIiNiY2I4NTJcIjtcbmV4cG9ydCBjb25zdCBzeWNhbW9yZSA9IFwiIzkwOGQzOVwiO1xuZXhwb3J0IGNvbnN0IGF2b2NhZG8gPSBcIiM5MDhkNjlcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBzbm93V2hpdGUsXG4gIHNwcmluZ1dvb2QsXG4gIGJpYW5jYSxcbiAgYm9uam91cixcbiAgZ2FpbnNib3JvdWdoLFxuICBkYXduLFxuICBzdGFyZHVzdCxcbiAgaHVycmljYW5lLFxuICBzdG9ybUR1c3QsXG4gIGVtcGVyb3IsXG4gIHR1YXRhcmEsXG4gIGR1bmUsXG4gIHdvb2RzbW9rZSxcbiAgcGl0Y2hCbGFjayxcbiAgcG9tZWdyYW5hdGUsXG4gIHN1c2hpLFxuICBsYXBpcyxcbiAgcGFibG8sXG4gIGFybWFkaWxsbyxcbiAgbG9nQ2FiaW4sXG4gIGJsYWNrT2xpdmUsXG4gIGh1bnRlckdyZWVuLFxuICBjYWRldEJsdWUsXG4gIHNwYW5pc2hHcmVlbixcbiAgcmF6em1hdGF6eixcbiAgdGVycmFjb3R0YSxcbiAga29ybWEsXG4gIHdhbG51dCxcbiAgc3VuZmxvd2VyLFxuICBob2tleVBva2V5LFxuICBjZWxlcnksXG4gIHN5Y2Ftb3JlLFxuICBhdm9jYWRvXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBkdW5lLCBwYWJsbywgc3ByaW5nV29vZCwgcG9tZWdyYW5hdGUsIGdhaW5zYm9yb3VnaCB9IGZyb20gXCIuLi8uLi9jb2xvdXJzXCI7XG5cbmV4cG9ydCBjb25zdCBjb2xvdXIgPSBzcHJpbmdXb29kO1xuXG5leHBvcnQgY29uc3QgZXJyb3JDb2xvdXIgPSBnYWluc2Jvcm91Z2g7XG5cbmV4cG9ydCBjb25zdCBub25zZW5zZUNvbG91ciA9IHBhYmxvO1xuXG5leHBvcnQgY29uc3QgdW5kZXJsaW5lQ29sb3VyID0gcG9tZWdyYW5hdGU7XG5cbmV4cG9ydCBjb25zdCBiYWNrZ3JvdW5kQ29sb3VyID0gZHVuZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY29sb3VyLCBlcnJvckNvbG91ciwgbm9uc2Vuc2VDb2xvdXIsIHVuZGVybGluZUNvbG91ciwgYmFja2dyb3VuZENvbG91ciB9IGZyb20gXCIuLi8uLi9zY2hlbWUvc3ludGF4L2RlZmF1bHRcIjtcblxuY29uc3QgZGVmYXVsdFN5bnRheFN0eWxlID0gYFxuXG4gIEBrZXlmcmFtZXMgYmFja2dyb3VuZC1jb2xvci1hbmltYXRpb24ge1xuICAgIDAlICAgeyBiYWNrZ3JvdW5kLWNvbG9yOiAke2JhY2tncm91bmRDb2xvdXJ9OyB9XG4gICAgMTAwJSB7IGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9XG4gIH1cbiAgXG4gIC5zeW50YXggPiBkaXYuYW5pbWF0ZWQgeyBcbiAgICBhbmltYXRpb246IGJhY2tncm91bmQtY29sb3ItYW5pbWF0aW9uIDFzIDE7XG4gIH1cbiAgXG4gIC5zeW50YXggPiBkaXYgeyBcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuXG4gIC5zeW50YXggPiBkaXYgKiB7IFxuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgfVxuICBcbiAgLnN5bnRheCA+IGRpdiA+ICogeyBcbiAgICBjb2xvcjogJHtjb2xvdXJ9OyBcbiAgfVxuICBcbiAgLnN5bnRheCA+IGRpdiA+ICogYSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgfVxuXG4gIC5zeW50YXggPiBkaXYgPiAqIGE6aG92ZXIge1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICB9XG5cbiAgLnN5bnRheCA+IGRpdiA+IGJ1dHRvbiB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIG91dGxpbmU6IG5vbmU7XG4gICAgZGlzcGxheTogaW5saW5lO1xuICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICB9XG4gIFxuICAuc3ludGF4ID4gZGl2ID4gLmVycm9yIHtcbiAgICBjb2xvcjogJHtlcnJvckNvbG91cn07XG4gICAgdGV4dC1kZWNvcmF0aW9uLWxpbmU6IHVuZGVybGluZTtcbiAgICB0ZXh0LWRlY29yYXRpb24tY29sb3I6ICR7dW5kZXJsaW5lQ29sb3VyfTtcbiAgfSBcblxuICAuc3ludGF4ID4gZGl2ID4gLm5vbnNlbnNlIHtcbiAgICBjb2xvcjogJHtub25zZW5zZUNvbG91cn07XG4gIH0gXG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRTeW50YXhTdHlsZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3VzaGksIHBhYmxvLCBjZWxlcnksIHN5Y2Ftb3JlLCBjYWRldEJsdWUsIGh1cnJpY2FuZSwgaG9rZXlQb2tleSwgcmF6em1hdGF6eiwgZ2FpbnNib3JvdWdoIH0gZnJvbSBcIi4uLy4uL2NvbG91cnNcIjtcblxuZXhwb3J0IGNvbnN0IHR5cGVDb2xvdXIgPSBjYWRldEJsdWU7XG5cbmV4cG9ydCBjb25zdCBzcGVjaWFsQ29sb3VyID0gc3VzaGk7XG5cbmV4cG9ydCBjb25zdCBjb21tZW50Q29sb3VyID0gcGFibG87XG5cbmV4cG9ydCBjb25zdCBrZXl3b3JkQ29sb3VyID0gcmF6em1hdGF6ejtcblxuZXhwb3J0IGNvbnN0IG9wZXJhdG9yQ29sb3VyID0gc3VzaGk7XG5cbmV4cG9ydCBjb25zdCBtZXRhVHlwZUNvbG91ciA9IGdhaW5zYm9yb3VnaDtcblxuZXhwb3J0IGNvbnN0IHN0cmluZ0xpdGVyYWxDb2xvdXIgPSBob2tleVBva2V5O1xuXG5leHBvcnQgY29uc3QgY29udGV4dE5hbWVDb2xvdXIgPSBjYWRldEJsdWU7XG5cbmV4cG9ydCBjb25zdCBsYWJlbE5hbWVDb2xvdXIgPSBzeWNhbW9yZTtcblxuZXhwb3J0IGNvbnN0IGxhYmVsTmFtZUhvdmVyQ29sb3VyID0gY2VsZXJ5O1xuXG5leHBvcnQgY29uc3QgZGlzYWJsZWRMYWJlbE5hbWVDb2xvdXIgPSBwYWJsbztcblxuZXhwb3J0IGNvbnN0IGRpc2FibGVkTGFiZWxOYW1lSG92ZXJDb2xvdXIgPSBodXJyaWNhbmU7XG5cbmV4cG9ydCBjb25zdCByZWZlcmVuY2VOYW1lQ29sb3VyID0gc3ljYW1vcmU7XG5cbmV4cG9ydCBjb25zdCByZWZlcmVuY2VOYW1lSG92ZXJDb2xvdXIgPSBjZWxlcnk7XG5cbmV4cG9ydCBjb25zdCBkaXNhYmxlZFJlZmVyZW5jZU5hbWVDb2xvdXIgPSBwYWJsbztcblxuZXhwb3J0IGNvbnN0IGRpc2FibGVkUmVmZXJlbmNlTmFtZUhvdmVyQ29sb3VyID0gaHVycmljYW5lO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyB0eXBlQ29sb3VyLFxuICAgICAgICAgc3BlY2lhbENvbG91cixcbiAgICAgICAgIGNvbW1lbnRDb2xvdXIsXG4gICAgICAgICBrZXl3b3JkQ29sb3VyLFxuICAgICAgICAgb3BlcmF0b3JDb2xvdXIsXG4gICAgICAgICBtZXRhVHlwZUNvbG91cixcbiAgICAgICAgIGxhYmVsTmFtZUNvbG91cixcbiAgICAgICAgIGNvbnRleHROYW1lQ29sb3VyLFxuICAgICAgICAgcmVmZXJlbmNlTmFtZUNvbG91cixcbiAgICAgICAgIHN0cmluZ0xpdGVyYWxDb2xvdXIsXG4gICAgICAgICBsYWJlbE5hbWVIb3ZlckNvbG91cixcbiAgICAgICAgIGRpc2FibGVkTGFiZWxOYW1lQ29sb3VyLFxuICAgICAgICAgcmVmZXJlbmNlTmFtZUhvdmVyQ29sb3VyLFxuICAgICAgICAgZGlzYWJsZWRSZWZlcmVuY2VOYW1lQ29sb3VyLFxuICAgICAgICAgZGlzYWJsZWRMYWJlbE5hbWVIb3ZlckNvbG91cixcbiAgICAgICAgIGRpc2FibGVkUmVmZXJlbmNlTmFtZUhvdmVyQ29sb3VyIH0gZnJvbSBcIi4uLy4uL3NjaGVtZS9zeW50YXgvZmxvcmVuY2VcIjtcblxuY29uc3QgZmxvcmVuY2VTeW50YXhTdHlsZSA9IGBcblxuICAuZmxvcmVuY2Uuc3ludGF4ID4gZGl2ID4gLnR5cGUgeyBjb2xvcjogJHt0eXBlQ29sb3VyfTsgfVxuXG4gIC5mbG9yZW5jZS5zeW50YXggPiBkaXYgPiAuc3BlY2lhbCB7IGNvbG9yOiAke3NwZWNpYWxDb2xvdXJ9OyB9XG4gIFxuICAuZmxvcmVuY2Uuc3ludGF4ID4gZGl2ID4gLmNvbW1lbnQgeyBjb2xvcjogJHtjb21tZW50Q29sb3VyfTsgfVxuICBcbiAgLmZsb3JlbmNlLnN5bnRheCA+IGRpdiA+IC5vcGVyYXRvciB7IGNvbG9yOiAke29wZXJhdG9yQ29sb3VyfTsgfVxuICBcbiAgLmZsb3JlbmNlLnN5bnRheCA+IGRpdiA+IC5tZXRhLXR5cGUgeyBjb2xvcjogJHttZXRhVHlwZUNvbG91cn07IH1cblxuICAuZmxvcmVuY2Uuc3ludGF4ID4gZGl2ID4gLnByaW1hcnkta2V5d29yZCB7IGNvbG9yOiAke2tleXdvcmRDb2xvdXJ9OyB9XG4gIFxuICAuZmxvcmVuY2Uuc3ludGF4ID4gZGl2ID4gLnNlY29uZGFyeS1rZXl3b3JkIHsgY29sb3I6ICR7a2V5d29yZENvbG91cn07IH1cbiAgXG4gIC5mbG9yZW5jZS5zeW50YXggPiBkaXYgPiAuc3RyaW5nLWxpdGVyYWwgeyBjb2xvcjogJHtzdHJpbmdMaXRlcmFsQ29sb3VyfTsgfVxuXG4gIC5mbG9yZW5jZS5zeW50YXggPiBkaXYgPiAubmFtZS5jb250ZXh0IHsgY29sb3I6ICR7Y29udGV4dE5hbWVDb2xvdXJ9OyB9XG5cbiAgLmZsb3JlbmNlLnN5bnRheCA+IGRpdiA+IC5uYW1lLmxhYmVsIHsgY29sb3I6ICR7bGFiZWxOYW1lQ29sb3VyfTsgfVxuICBcbiAgLmZsb3JlbmNlLnN5bnRheCA+IGRpdiA+IC5uYW1lLmxhYmVsOmhvdmVyIHsgY29sb3I6ICR7bGFiZWxOYW1lSG92ZXJDb2xvdXJ9OyB9XG5cbiAgLmZsb3JlbmNlLnN5bnRheCA+IGRpdiA+IC5uYW1lLmxhYmVsLmRpc2FibGVkIHsgY29sb3I6ICR7ZGlzYWJsZWRMYWJlbE5hbWVDb2xvdXJ9OyB9XG4gIFxuICAuZmxvcmVuY2Uuc3ludGF4ID4gZGl2ID4gLm5hbWUubGFiZWwuZGlzYWJsZWQ6aG92ZXIgeyBjb2xvcjogJHtkaXNhYmxlZExhYmVsTmFtZUhvdmVyQ29sb3VyfTsgfVxuXG4gIC5mbG9yZW5jZS5zeW50YXggPiBkaXYgPiAubmFtZS5yZWZlcmVuY2UgeyBjb2xvcjogJHtyZWZlcmVuY2VOYW1lQ29sb3VyfTsgfVxuICBcbiAgLmZsb3JlbmNlLnN5bnRheCA+IGRpdiA+IC5uYW1lLnJlZmVyZW5jZTpob3ZlciB7IGNvbG9yOiAke3JlZmVyZW5jZU5hbWVIb3ZlckNvbG91cn07IH1cblxuICAuZmxvcmVuY2Uuc3ludGF4ID4gZGl2ID4gLm5hbWUucmVmZXJlbmNlLmRpc2FibGVkIHsgY29sb3I6ICR7ZGlzYWJsZWRSZWZlcmVuY2VOYW1lQ29sb3VyfTsgfVxuICBcbiAgLmZsb3JlbmNlLnN5bnRheCA+IGRpdiA+IC5uYW1lLnJlZmVyZW5jZS5kaXNhYmxlZDpob3ZlciB7IGNvbG9yOiAke2Rpc2FibGVkUmVmZXJlbmNlTmFtZUhvdmVyQ29sb3VyfTsgfVxuXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBmbG9yZW5jZVN5bnRheFN0eWxlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBnYWluc2Jvcm91Z2ggfSBmcm9tIFwiLi4vLi4vY29sb3Vyc1wiO1xuXG5leHBvcnQgY29uc3QgY29sb3VyID0gZ2FpbnNib3JvdWdoO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBjb2xvdXIgfSBmcm9tIFwiLi4vLi4vc2NoZW1lL3N5bnRheC9wbGFpblRleHRcIjtcblxuY29uc3QgcGxhaW5UZXh0U3ludGF4U3R5bGUgPSBgXG5cbiAgLm1hcmtkb3duLnN5bnRheCA+IGRpdiA+ICogeyBjb2xvcjogJHtjb2xvdXJ9OyB9XG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IHBsYWluVGV4dFN5bnRheFN0eWxlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBob2tleVBva2V5IH0gZnJvbSBcIi4uLy4uL2NvbG91cnNcIjtcblxuZXhwb3J0IGNvbnN0IHJlcG9zaXRvcnlDb2xvdXIgPSBob2tleVBva2V5O1xuXG5leHBvcnQgY29uc3Qgc3RyaW5nTGl0ZXJhbENvbG91ciA9IGhva2V5UG9rZXk7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHJlcG9zaXRvcnlDb2xvdXIsIHN0cmluZ0xpdGVyYWxDb2xvdXIgfSBmcm9tIFwiLi4vLi4vc2NoZW1lL3N5bnRheC9tZXRhSlNPTlwiO1xuXG5jb25zdCBtZXRhSlNPTlN5bnRheFN0eWxlID0gYFxuXG4gIC5tZXRhLWpzb24uc3ludGF4ID4gZGl2ID4gLnN0cmluZy1saXRlcmFsIHsgY29sb3I6ICR7c3RyaW5nTGl0ZXJhbENvbG91cn07IH1cblxuICAubWV0YS1qc29uLnN5bnRheCA+IGRpdiA+IC5yZXBvc2l0b3J5LCBcbiAgXG4gIC5tZXRhLWpzb24uc3ludGF4ID4gZGl2ID4gLnJlcG9zaXRvcnkgYSB7IGNvbG9yOiAke3JlcG9zaXRvcnlDb2xvdXJ9OyB9XG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IG1ldGFKU09OU3ludGF4U3R5bGU7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNvbG91ciB9IGZyb20gXCIuLi8uLi9zY2hlbWUvc3ludGF4L3BsYWluVGV4dFwiO1xuXG5jb25zdCBwbGFpblRleHRTeW50YXhTdHlsZSA9IGBcblxuICAucGxhaW4tdGV4dC5zeW50YXggPiBkaXYgPiAqIHsgY29sb3I6ICR7Y29sb3VyfTsgfVxuXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBwbGFpblRleHRTeW50YXhTdHlsZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY2FkZXRCbHVlLCBob2tleVBva2V5LCBzcGFuaXNoR3JlZW4gfSBmcm9tIFwiLi4vLi4vY29sb3Vyc1wiO1xuXG5leHBvcnQgY29uc3QgbmFtZUNvbG91ciA9IGNhZGV0Qmx1ZTtcblxuZXhwb3J0IGNvbnN0IHR5cGVDb2xvdXIgPSBzcGFuaXNoR3JlZW47XG5cbmV4cG9ydCBjb25zdCBzdHJpbmdMaXRlcmFsQ29sb3VyID0gaG9rZXlQb2tleTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgbmFtZUNvbG91ciwgdHlwZUNvbG91ciwgc3RyaW5nTGl0ZXJhbENvbG91ciB9IGZyb20gXCIuLi8uLi9zY2hlbWUvc3ludGF4L2N1c3RvbUdyYW1tYXJCTkZcIlxuXG5jb25zdCBjdXN0b21HcmFtbWFyQk5GU3ludGF4U3R5bGUgPSBgXG5cbiAgLmN1c3RvbS1ncmFtbWFyLWJuZi5zeW50YXggPiBkaXYgPiAubmFtZSB7IGNvbG9yOiAke25hbWVDb2xvdXJ9OyB9XG5cbiAgLmN1c3RvbS1ncmFtbWFyLWJuZi5zeW50YXggPiBkaXYgPiAudHlwZSB7IGNvbG9yOiAke3R5cGVDb2xvdXJ9OyB9XG5cbiAgLmN1c3RvbS1ncmFtbWFyLWJuZi5zeW50YXggPiBkaXYgPiAuc3RyaW5nLWxpdGVyYWwgeyBjb2xvcjogJHtzdHJpbmdMaXRlcmFsQ29sb3VyfTsgfVxuICBcbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGN1c3RvbUdyYW1tYXJCTkZTeW50YXhTdHlsZTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGRlZmF1bHRTeW50YXhTdHlsZSBmcm9tIFwiLi4vc3R5bGUvc3ludGF4L2RlZmF1bHRcIjtcbmltcG9ydCBmbG9yZW5jZVN5bnRheFN0eWxlIGZyb20gXCIuLi9zdHlsZS9zeW50YXgvZmxvcmVuY2VcIjtcbmltcG9ydCBtYXJrZG93blN5bnRheFN0eWxlIGZyb20gXCIuLi9zdHlsZS9zeW50YXgvbWFya2Rvd25cIjtcbmltcG9ydCBtZXRhSlNPTmVTeW50YXhTdHlsZSBmcm9tIFwiLi4vc3R5bGUvc3ludGF4L21ldGFKU09OXCI7XG5pbXBvcnQgcGxhaW5UZXh0U3ludGF4U3R5bGUgZnJvbSBcIi4uL3N0eWxlL3N5bnRheC9wbGFpblRleHRcIjtcbmltcG9ydCBjdXN0b21HcmFtbWFyQk5GTmVTeW50YXhTdHlsZSBmcm9tIFwiLi4vc3R5bGUvc3ludGF4L2N1c3RvbUdyYW1tYXJCTkZcIjtcblxuY29uc3Qgc3ludGF4U3R5bGUgPSBgXG4gICAgXG4gICR7ZGVmYXVsdFN5bnRheFN0eWxlfVxuICBcbiAgJHtmbG9yZW5jZVN5bnRheFN0eWxlfVxuICBcbiAgJHttYXJrZG93blN5bnRheFN0eWxlfVxuICBcbiAgJHttZXRhSlNPTmVTeW50YXhTdHlsZX1cblxuICAke3BsYWluVGV4dFN5bnRheFN0eWxlfVxuICBcbiAgJHtjdXN0b21HcmFtbWFyQk5GTmVTeW50YXhTdHlsZX0gXG4gIFxuYDtcblxuZXhwb3J0IGRlZmF1bHQgc3ludGF4U3R5bGU7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0hPU1QgPSBcIlwiO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBERUZBVUxUX0hPU1QgfSBmcm9tIFwiLi4vZGVmYXVsdHNcIjtcblxuY29uc3QganVsaWFNb25vU3R5bGUgPSAoaG9zdCA9IERFRkFVTFRfSE9TVCkgPT4gYFxuXG4gIEBmb250LWZhY2Uge1xuICAgIHNyYzogdXJsKFwiJHtob3N0fS9jc3Mvd29mZjIvSnVsaWFNb25vLVJlZ3VsYXIud29mZjJcIik7XG4gICAgZm9udC1mYW1pbHk6IFwiSnVsaWFNb25vXCI7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgfVxuICBcbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGp1bGlhTW9ub1N0eWxlO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBERUZBVUxUX0hPU1QgfSBmcm9tIFwiLi4vZGVmYXVsdHNcIjtcblxuY29uc3QgY29tcHV0ZXJNb2Rlcm5TdHlsZSA9IChob3N0ID0gREVGQVVMVF9IT1NUKSA9PiBgXG5cbiAgQGZvbnQtZmFjZSB7XG4gICAgc3JjOiB1cmwoXCIke2hvc3R9L2Nzcy93b2ZmMi9jbXVucm0ud29mZjJcIik7XG4gICAgZm9udC1mYW1pbHk6IFwiQ29tcHV0ZXIgTW9kZXJuIFNlcmlmXCI7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gIH1cbiAgICBcbiAgQGZvbnQtZmFjZSB7XG4gICAgc3JjOiB1cmwoXCIke2hvc3R9L2Nzcy93b2ZmMi9jbXVudGkud29mZjJcIik7XG4gICAgZm9udC1mYW1pbHk6IFwiQ29tcHV0ZXIgTW9kZXJuIFNlcmlmXCI7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gIH1cbiAgICBcbiAgQGZvbnQtZmFjZSB7XG4gICAgc3JjOiB1cmwoXCIke2hvc3R9L2Nzcy93b2ZmMi9jbXVuYngud29mZjJcIik7XG4gICAgZm9udC1mYW1pbHk6IFwiQ29tcHV0ZXIgTW9kZXJuIFNlcmlmXCI7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB9XG4gICAgXG4gIEBmb250LWZhY2Uge1xuICAgIHNyYzogdXJsKFwiJHtob3N0fS9jc3Mvd29mZjIvY211bmJpLndvZmYyXCIpO1xuICAgIGZvbnQtZmFtaWx5OiBcIkNvbXB1dGVyIE1vZGVybiBTZXJpZlwiO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgfSAgXG4gICAgXG4gIEBmb250LWZhY2Uge1xuICAgIHNyYzogdXJsKFwiJHtob3N0fS9jc3Mvd29mZjIvY211bnNzLndvZmYyXCIpO1xuICAgIGZvbnQtZmFtaWx5OiBcIkNvbXB1dGVyIE1vZGVybiBTYW5zXCI7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gIH1cbiAgXG4gIEBmb250LWZhY2Uge1xuICAgIHNyYzogdXJsKFwiJHtob3N0fS9jc3Mvd29mZjIvY211bnNpLndvZmYyXCIpO1xuICAgIGZvbnQtZmFtaWx5OiBcIkNvbXB1dGVyIE1vZGVybiBTYW5zXCI7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gIH1cbiAgXG4gIEBmb250LWZhY2Uge1xuICAgIHNyYzogdXJsKFwiJHtob3N0fS9jc3Mvd29mZjIvY211bnN4LndvZmYyXCIpO1xuICAgIGZvbnQtZmFtaWx5OiBcIkNvbXB1dGVyIE1vZGVybiBTYW5zXCI7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB9XG4gIFxuICBAZm9udC1mYWNlIHtcbiAgICBzcmM6IHVybChcIiR7aG9zdH0vY3NzL3dvZmYyL2NtdW5zby53b2ZmMlwiKTtcbiAgICBmb250LWZhbWlseTogXCJDb21wdXRlciBNb2Rlcm4gU2Fuc1wiO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgfVxuICBcbiAgQGZvbnQtZmFjZSB7XG4gICAgc3JjOiB1cmwoXCIke2hvc3R9L2Nzcy93b2ZmMi9jbXVudHQud29mZjJcIik7XG4gICAgZm9udC1mYW1pbHk6IFwiQ29tcHV0ZXIgTW9kZXJuIFR5cGV3cml0ZXJcIjtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgfVxuICBcbiAgQGZvbnQtZmFjZSB7XG4gICAgc3JjOiB1cmwoXCIke2hvc3R9L2Nzcy93b2ZmMi9jbXVuaXQud29mZjJcIik7XG4gICAgZm9udC1mYW1pbHk6IFwiQ29tcHV0ZXIgTW9kZXJuIFR5cGV3cml0ZXJcIjtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgfVxuICAgIFxuICBAZm9udC1mYWNlIHtcbiAgICBzcmM6IHVybChcIiR7aG9zdH0vY3NzL3dvZmYyL2NtdW50Yi53b2ZmMlwiKTtcbiAgICBmb250LWZhbWlseTogXCJDb21wdXRlciBNb2Rlcm4gVHlwZXdyaXRlclwiO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgfVxuICAgIFxuICBAZm9udC1mYWNlIHtcbiAgICBzcmM6IHVybChcIiR7aG9zdH0vY3NzL3dvZmYyL2NtdW50eC53b2ZmMlwiKTtcbiAgICBmb250LWZhbWlseTogXCJDb21wdXRlciBNb2Rlcm4gVHlwZXdyaXRlclwiO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgfVxuICAgICAgXG4gIEBmb250LWZhY2Uge1xuICAgIHNyYzogdXJsKFwiJHtob3N0fS9jc3Mvd29mZjIvY211bmJtci53b2ZmMlwiKTtcbiAgICBmb250LWZhbWlseTogXCJDb21wdXRlciBNb2Rlcm4gQnJpZ2h0XCI7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gIH1cbiAgXG4gIEBmb250LWZhY2Uge1xuICAgIHNyYzogdXJsKFwiJHtob3N0fS9jc3Mvd29mZjIvY211bmJtby53b2ZmMlwiKTtcbiAgICBmb250LWZhbWlseTogXCJDb21wdXRlciBNb2Rlcm4gQnJpZ2h0XCI7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gIH1cbiAgXG4gIEBmb250LWZhY2Uge1xuICAgIHNyYzogdXJsKFwiJHtob3N0fS9jc3Mvd29mZjIvY211bmJieC53b2ZmMlwiKTtcbiAgICBmb250LWZhbWlseTogXCJDb21wdXRlciBNb2Rlcm4gQnJpZ2h0XCI7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICB9XG4gIFxuICBAZm9udC1mYWNlIHtcbiAgICBzcmM6IHVybChcIiR7aG9zdH0vY3NzL3dvZmYyL2NtdW5ieG8ud29mZjJcIik7XG4gICAgZm9udC1mYW1pbHk6IFwiQ29tcHV0ZXIgTW9kZXJuIEJyaWdodFwiO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgfVxuXG4gIEBmb250LWZhY2Uge1xuICAgIHNyYzogdXJsKFwiJHtob3N0fS9jc3Mvd29mZjIvY211bm9ybS53b2ZmMlwiKTtcbiAgICBmb250LWZhbWlseTogXCJDb21wdXRlciBNb2Rlcm4gQ29uY3JldGVcIjtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgfVxuICAgIFxuICBAZm9udC1mYWNlIHtcbiAgICBzcmM6IHVybChcIiR7aG9zdH0vY3NzL3dvZmYyL2NtdW5vdGkud29mZjJcIik7XG4gICAgZm9udC1mYW1pbHk6IFwiQ29tcHV0ZXIgTW9kZXJuIENvbmNyZXRlXCI7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gIH1cbiAgICBcbiAgQGZvbnQtZmFjZSB7XG4gICAgc3JjOiB1cmwoXCIke2hvc3R9L2Nzcy93b2ZmMi9jbXVub2J4LndvZmYyXCIpO1xuICAgIGZvbnQtZmFtaWx5OiBcIkNvbXB1dGVyIE1vZGVybiBDb25jcmV0ZVwiO1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgfVxuICAgIFxuICBAZm9udC1mYWNlIHtcbiAgICBzcmM6IHVybChcIiR7aG9zdH0vY3NzL3dvZmYyL2NtdW5vYmkud29mZjJcIik7XG4gICAgZm9udC1mYW1pbHk6IFwiQ29tcHV0ZXIgTW9kZXJuIENvbmNyZXRlXCI7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xuICB9XG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXB1dGVyTW9kZXJuU3R5bGU7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbW1vbkZvbnRNaXhpbiA9IGBcblxuICBmb250LXNpemU6IDEuMnJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuOHJlbTtcbiAgZm9udC1mYW1pbHk6IFwiRGVqYVZ1IFNhbnMgTW9ub1wiLCBNZW5sbywgXCJMdWNpZGEgQ29uc29sZVwiLCBNb25hY28sIHNhbnMtc2VyaWY7XG5cbmA7XG5cbmV4cG9ydCBkZWZhdWx0IGNvbW1vbkZvbnRNaXhpbjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsganVsaWFNb25vTGluZUhlaWdodCB9IGZyb20gXCIuLi8uLi9zdHlsZXNcIjtcblxuY29uc3QganVsaWFNb25vRm9udE1peGluID0gYFxuXG4gIGxpbmUtaGVpZ2h0OiAke2p1bGlhTW9ub0xpbmVIZWlnaHR9O1xuICBmb250LWZhbWlseTogXCJKdWxpYU1vbm9cIjtcbiAgXG5gO1xuXG5leHBvcnQgZGVmYXVsdCBqdWxpYU1vbm9Gb250TWl4aW47XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGRhd24sIGJvbmpvdXIsIGJpYW5jYSwgd29vZHNtb2tlLCBzdG9ybUR1c3QsIHdhbG51dCwgdHVhdGFyYSwgd29vZGxhbmQsIHN0YXJkdXN0LCBzcHJpbmdXb29kIH0gZnJvbSBcIi4uL2NvbG91cnNcIjtcblxuZXhwb3J0IGNvbnN0IGNvbW1vbkZpbGwgPSB0dWF0YXJhO1xuXG5leHBvcnQgY29uc3QgY29tbW9uQ29sb3VyID0gd29vZHNtb2tlO1xuXG5leHBvcnQgY29uc3QgY29tbW9uQm9yZGVyQ29sb3VyID0gc3Rvcm1EdXN0O1xuXG5leHBvcnQgY29uc3QgY29tbW9uQmFja2dyb3VuZENvbG91ciA9IGRhd247XG5cbmV4cG9ydCBjb25zdCBjb21tb25JbnB1dEJhY2tncm91bmRDb2xvdXIgPSBib25qb3VyO1xuXG5leHBvcnQgY29uc3QgY29tbW9uU2VsZWN0QmFja2dyb3VuZENvbG91ciA9IGJvbmpvdXI7XG5cbmV4cG9ydCBjb25zdCBjb21tb25CdXR0b25CYWNrZ3JvdW5kQ29sb3VyID0gYm9uam91cjtcblxuZXhwb3J0IGNvbnN0IGNvbW1vbkRpc2FibGVkRmlsbCA9IHN0b3JtRHVzdDtcblxuZXhwb3J0IGNvbnN0IGNvbW1vbkRpc2FibGVkSW5wdXRDb2xvdXIgPSBzdG9ybUR1c3Q7XG5cbmV4cG9ydCBjb25zdCBjb21tb25EaXNhYmxlZEJ1dHRvbkNvbG91ciA9IHN0b3JtRHVzdDtcblxuZXhwb3J0IGNvbnN0IGNvbW1vblNjcm9sbGJhclRodW1iQm9yZGVyQ29sb3VyID0gZGF3bjtcblxuZXhwb3J0IGNvbnN0IGNvbW1vblNjcm9sbGJhclRyYWNrQmFja2dyb3VuZENvbG91ciA9IGRhd247XG5cbmV4cG9ydCBjb25zdCBjb21tb25TY3JvbGxiYXJUaHVtYkJhY2tncm91bmRDb2xvdXIgPSBzdG9ybUR1c3Q7XG5cbmV4cG9ydCBjb25zdCBnbHlwaENvbG91ciA9IHN0YXJkdXN0O1xuXG5leHBvcnQgY29uc3QgY2xlYXJDb25zb2xlRmlsbCA9IHdhbG51dDtcblxuZXhwb3J0IGNvbnN0IGV4cGFuZGVkR2x5cGhDb2xvdXIgPSBzcHJpbmdXb29kO1xuXG5leHBvcnQgY29uc3Qgc2hvd1JlbGVhc2VzQ3Jvc3NGaWxsID0gd29vZGxhbmQ7XG5cbmV4cG9ydCBjb25zdCBoaWRlUmVsZWFzZXNDcm9zc0ZpbGwgPSB3YWxudXQ7XG5cbmV4cG9ydCBjb25zdCB0b29sdGlwQmFja2dyb3VuZENvbG91ciA9IGJpYW5jYTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21tb25GaWxsLFxuICBjb21tb25Db2xvdXIsXG4gIGNvbW1vbkJvcmRlckNvbG91cixcbiAgY29tbW9uQmFja2dyb3VuZENvbG91cixcbiAgY29tbW9uSW5wdXRCYWNrZ3JvdW5kQ29sb3VyLFxuICBjb21tb25TZWxlY3RCYWNrZ3JvdW5kQ29sb3VyLFxuICBjb21tb25CdXR0b25CYWNrZ3JvdW5kQ29sb3VyLFxuICBjb21tb25EaXNhYmxlZEZpbGwsXG4gIGNvbW1vbkRpc2FibGVkSW5wdXRDb2xvdXIsXG4gIGNvbW1vbkRpc2FibGVkQnV0dG9uQ29sb3VyLFxuICBjb21tb25TY3JvbGxiYXJUaHVtYkJvcmRlckNvbG91cixcbiAgY29tbW9uU2Nyb2xsYmFyVHJhY2tCYWNrZ3JvdW5kQ29sb3VyLFxuICBjb21tb25TY3JvbGxiYXJUaHVtYkJhY2tncm91bmRDb2xvdXIsXG4gIGdseXBoQ29sb3VyLFxuICBjbGVhckNvbnNvbGVGaWxsLFxuICBleHBhbmRlZEdseXBoQ29sb3VyLFxuICBzaG93UmVsZWFzZXNDcm9zc0ZpbGwsXG4gIGhpZGVSZWxlYXNlc0Nyb3NzRmlsbCxcbiAgdG9vbHRpcEJhY2tncm91bmRDb2xvdXJcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNvbW1vbkJvcmRlckNvbG91ciB9IGZyb20gXCIuLi9zY2hlbWUvY29tbW9uXCI7XG5cbmltcG9ydCB7IGRhd24sIHR1YXRhcmEsIGJvbmpvdXIsIHN0YXJkdXN0LCBzdG9ybUR1c3QsIHdvb2RzbW9rZSwgc25vd1doaXRlIH0gZnJvbSBcIi4uL2NvbG91cnNcIjtcblxuZXhwb3J0IGNvbnN0IGJvcmRlckNvbG91ciA9IGNvbW1vbkJvcmRlckNvbG91cjsgLy8vXG5cbmV4cG9ydCBjb25zdCB0YWJzQm9yZGVyQ29sb3VyID0gY29tbW9uQm9yZGVyQ29sb3VyOyAvLy9cblxuZXhwb3J0IGNvbnN0IHRhYnNSZWFkT25seUNvbG91ciA9IHR1YXRhcmE7XG5cbmV4cG9ydCBjb25zdCB0YWJzQmFja2dyb3VuZENvbG91ciA9IGRhd247XG5cbmV4cG9ydCBjb25zdCB0YWJzQXJyb3dCdXR0b25Db2xvdXIgPSB3b29kc21va2U7XG5cbmV4cG9ydCBjb25zdCB0YWJzQWN0aXZlQmFja2dyb3VuZENvbG91ciA9IHN0YXJkdXN0O1xuXG5leHBvcnQgY29uc3QgbWVudUJ1dHRvbkJhY2tncm91bmRDb2xvdXIgPSBzdG9ybUR1c3Q7XG5cbmV4cG9ydCBjb25zdCBtZW51QnV0dG9uSG92ZXJCYWNrZ3JvdW5kQ29sb3VyID0gc3RhcmR1c3Q7XG5cbmV4cG9ydCBjb25zdCBtZW51QnV0dG9uUHJldmlld0JhY2tncm91bmRDb2xvdXIgPSBzbm93V2hpdGU7XG5cbmV4cG9ydCBjb25zdCBtZW51QnV0dG9uSG92ZXJQcmV2aWV3QmFja2dyb3VuZENvbG91ciA9IGJvbmpvdXI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgYm9yZGVyQ29sb3VyLFxuICB0YWJzQm9yZGVyQ29sb3VyLFxuICB0YWJzUmVhZE9ubHlDb2xvdXIsXG4gIHRhYnNCYWNrZ3JvdW5kQ29sb3VyLFxuICB0YWJzQXJyb3dCdXR0b25Db2xvdXIsXG4gIHRhYnNBY3RpdmVCYWNrZ3JvdW5kQ29sb3VyLFxuICBtZW51QnV0dG9uQmFja2dyb3VuZENvbG91cixcbiAgbWVudUJ1dHRvbkhvdmVyQmFja2dyb3VuZENvbG91cixcbiAgbWVudUJ1dHRvblByZXZpZXdCYWNrZ3JvdW5kQ29sb3VyLFxuICBtZW51QnV0dG9uSG92ZXJQcmV2aWV3QmFja2dyb3VuZENvbG91clxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgY29tbW9uQm9yZGVyQ29sb3VyIH0gZnJvbSBcIi4uL3NjaGVtZS9jb21tb25cIjtcblxuaW1wb3J0IHsgZ2FpbnNib3JvdWdoLCBodW50ZXJHcmVlbiB9IGZyb20gXCIuLi9jb2xvdXJzXCI7XG5cbmNvbnN0IGNvbnNvbGVDb2xvdXIgPSAgZ2FpbnNib3JvdWdoO1xuXG5jb25zdCBjb25zb2xlQm9yZGVyQ29sb3VyID0gIGNvbW1vbkJvcmRlckNvbG91cjsgIC8vL1xuXG5jb25zdCBjb25zb2xlQmFja2dyb3VuZENvbG91ciA9ICBodW50ZXJHcmVlbjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb25zb2xlQ29sb3VyLFxuICBjb25zb2xlQm9yZGVyQ29sb3VyLFxuICBjb25zb2xlQmFja2dyb3VuZENvbG91clxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgc3ByaW5nV29vZCwgd29vZHNtb2tlIH0gZnJvbSBcIi4uL2NvbG91cnNcIjtcblxuZXhwb3J0IGNvbnN0IGNvbG91ciA9IHdvb2RzbW9rZTtcblxuZXhwb3J0IGNvbnN0IGJhY2tncm91bmRDb2xvdXIgPSBzcHJpbmdXb29kO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbG91cixcbiAgYmFja2dyb3VuZENvbG91clxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsga29ybWEsIHBhYmxvLCBib25qb3VyLCBsb2dDYWJpbiwgc3Rvcm1EdXN0LCB3b29kc21va2UsIGh1cnJpY2FuZSwgYmxhY2tPbGl2ZSwgc3ByaW5nV29vZCB9IGZyb20gXCIuLi9jb2xvdXJzXCI7XG5cbmV4cG9ydCBjb25zdCBmb2xkRmlsbCA9IHdvb2RzbW9rZTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdGVkQ29sb3VyID0gc3ByaW5nV29vZDtcblxuZXhwb3J0IGNvbnN0IGZvbGRCdXR0b25TdHJva2UgPSBwYWJsbztcblxuZXhwb3J0IGNvbnN0IGJhY2tncm91bmRDb2xvdXIgPSB3b29kc21va2U7XG5cbmV4cG9ydCBjb25zdCBsaW5lTnVtYmVyc0NvbG91ciA9IHN0b3JtRHVzdDtcblxuZXhwb3J0IGNvbnN0IGZvbGRCdXR0b25Ib3ZlclN0cm9rZSA9IGh1cnJpY2FuZTtcblxuZXhwb3J0IGNvbnN0IGNhcmV0QmFja2dyb3VuZENvbG91ciA9IGJvbmpvdXI7XG5cbmV4cG9ydCBjb25zdCBndXR0ZXJCYWNrZ3JvdW5kQ29sb3VyID0gYmxhY2tPbGl2ZTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdGlvbkJhY2tncm91bmRDb2xvdXIgPSBrb3JtYTtcblxuZXhwb3J0IGNvbnN0IHNjcm9sbGJhclRodW1iQmFja2dyb3VuZENvbG91ciA9IHN0b3JtRHVzdDtcblxuZXhwb3J0IGNvbnN0IHJlbW90ZVNlbGVjdGlvbnNCYWNrZ3JvdW5kQ29sb3VyID0gbG9nQ2FiaW47XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZm9sZEZpbGwsXG4gIHNlbGVjdGVkQ29sb3VyLFxuICBmb2xkQnV0dG9uU3Ryb2tlLFxuICBiYWNrZ3JvdW5kQ29sb3VyLFxuICBsaW5lTnVtYmVyc0NvbG91cixcbiAgY2FyZXRCYWNrZ3JvdW5kQ29sb3VyLFxuICBmb2xkQnV0dG9uSG92ZXJTdHJva2UsXG4gIGd1dHRlckJhY2tncm91bmRDb2xvdXIsXG4gIHNlbGVjdGlvbkJhY2tncm91bmRDb2xvdXIsXG4gIHNjcm9sbGJhclRodW1iQmFja2dyb3VuZENvbG91cixcbiAgcmVtb3RlU2VsZWN0aW9uc0JhY2tncm91bmRDb2xvdXJcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNvbW1vbkJvcmRlckNvbG91ciB9IGZyb20gXCIuLi9zY2hlbWUvY29tbW9uXCI7XG5cbmltcG9ydCB7IGtvcm1hLCBib25qb3VyLCBodW50ZXJHcmVlbiwgZ2FpbnNib3JvdWdoIH0gZnJvbSBcIi4uL2NvbG91cnNcIjtcblxuZXhwb3J0IGNvbnN0IGxpbmtDb2xvdXIgPSBnYWluc2Jvcm91Z2g7XG5cbmV4cG9ydCBjb25zdCBib3JkZXJDb2xvdXIgPSBjb21tb25Cb3JkZXJDb2xvdXI7IC8vL1xuXG5leHBvcnQgY29uc3QgaGVhZGluZ0NvbG91ciA9IGdhaW5zYm9yb3VnaDtcblxuZXhwb3J0IGNvbnN0IGxvZ29GaWxsQ29sb3VyID0gaHVudGVyR3JlZW47XG5cbmV4cG9ydCBjb25zdCBiYWNrZ3JvdW5kQ29sb3VyID0gaHVudGVyR3JlZW47XG5cbmV4cG9ydCBjb25zdCBidWxsZXRQb2ludENvbG91ciA9IGtvcm1hO1xuXG5leHBvcnQgY29uc3QgbG9nb0JhY2tncm91bmRDb2xvdXIgPSBib25qb3VyO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGxpbmtDb2xvdXIsXG4gIGJvcmRlckNvbG91cixcbiAgaGVhZGluZ0NvbG91cixcbiAgbG9nb0ZpbGxDb2xvdXIsXG4gIGJhY2tncm91bmRDb2xvdXIsXG4gIGJ1bGxldFBvaW50Q29sb3VyLFxuICBsb2dvQmFja2dyb3VuZENvbG91clxufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgbG9nb1NWR1dpZHRoIH0gZnJvbSBcIi4uL3N0eWxlc1wiO1xuXG5jb25zdCBMb2dvU1ZHID0gKHByb3BlcnRpZXMpID0+IHtcbiAgY29uc3QgeyBjbGFzc05hbWUgfSA9IHByb3BlcnRpZXM7XG5cbiAgcmV0dXJuIChcblxuICAgIDxzdmcgd2lkdGg9XCIxOTVcIiBoZWlnaHQ9XCIxOTVcIiB2aWV3Qm94PVwiMCAwIDE5NSAxOTVcIiBjbGFzc05hbWU9e2Ake2NsYXNzTmFtZX0gbG9nb2B9PlxuICAgICAgPGcgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAsIDE5NSkgc2NhbGUoMC4xLC0wLjEpXCI+XG4gICAgICAgIDxwYXRoIGQ9XCJNIDAsOTc1IFYgMCBoIDk3NSA5NzUgdiA5NzUgOTc1IEggOTc1IDAgWiBtIDE5NSw5MTUgYyAyOCwtMTAgODIsLTMxIDEyMCwtNDYgNjMsLTI1IDgyLC0yOCAxODUsLTI4IDkyLDEgMTI3LDUgMTc0LDIyIDMzLDEyIDYxLDIyIDYzLDIyIDgsMCAtMTAxLC0xMDMgLTE0NSwtMTM4IC0zOCwtMzEgLTQzLC0zMiAtNDksLTE1IC0yMCw1MiAtNzYsNzggLTEzNCw2MyAtMjEsLTYgLTQxLC0xNSAtNDUsLTIxIC0zLC02IDE0LC0zMCAzOSwtNTIgbCA0NSwtNDIgLTE1LC01MyBjIC0xMywtNDIgLTE5LC01MiAtMzIsLTQ2IC05LDQgLTM3LDkgLTYzLDEyIGwgLTQ4LDQgdiA0OSBjIDAsNDUgLTIsNDkgLTI3LDU1IC0xNiw0IC0zOCwxNCAtNTAsMjIgLTM1LDIyIC01Myw5IC01MywtMzggMCwtMzYgNCwtNDMgMzUsLTYyIDM5LC0yMiAzOSwtMzQgNSwtOTMgLTksLTE2IC0zNywtNzggLTYwLC0xMzcgLTI0LC01OSAtNDUsLTEwNiAtNDcsLTEwNCAtMiwyIDIsMzcgOCw3NyAxMiw3OSA2LDM0NSAtMTEsNDU0IC01LDMzIC0xMSw2OSAtMTIsNzkgLTIsMTAgMywyMSAxMCwyMyA2LDMgMTIsLTMgMTIsLTEyIDAsLTMxIDMwLC03NSA1MSwtNzUgMTIsMCAyOSwtMTAgMzgsLTIxIDEwLC0xMiAyMywtMjAgMzAsLTE4IDksMyA0LDE1IC0xNSwzOSBsIC0yOSwzNSAyOCwtMTggYyAzMSwtMjAgNDcsLTE2IDI4LDcgLTEwLDEyIC05LDE0IDgsOSAxMiwtMyAyMSwtMSAyMSw1IDAsMTAgLTI5LDIzIC0xMDAsNDIgLTI1LDcgLTU0LDE2IC02NSwyMSAtMzMsMTUgNDQsLTIgMTAwLC0yMSB6IG0gMTA1NSwtOSBjIDk2LC0zOSAyNzksLTM5IDQ5MiwwIDM3LDcgNzEsMTAgNzUsNiA0LC00IC02LC0zMyAtMjEsLTY0IC01MywtMTA5IC02MCwtMTQwIC02MCwtMjc4IDAsLTE3MCAyNiwtMjg3IDgxLC0zNjcgMjAsLTI5IDI2LC01MiAyOSwtMTA1IGwgMywtNjggLTEwLDU0IGMgLTksNTQgLTQ0LDExMiAtNzcsMTMwIC0xMSw2IC0yOCw0MiAtNDIsODYgLTI3LDg1IC03NywxNTMgLTEzMCwxNzUgLTM2LDE1IC0zNywyMSAtOSw0NiA0MiwzOCA1OSw4OCA1OSwxNzMgMCw2NSAtMyw3OSAtMTQsNzUgLTE2LC02IC02NiwtMTIzIC02NiwtMTU0IDAsLTI3IC0xOCwtMjUgLTIyLDMgLTMsMjQgLTIyLDI3IC05MCwxMyAtMzgsLTcgLTM4LC03IC0zNywyNiAxLDU0IDEzLDcxIDc1LDEwMyAzNSwxOCA2MCwzOCA2Miw0OSA0LDE3IC0zLDE4IC0xMjAsMTIgLTY3LC00IC0xNTMsLTkgLTE5MCwtMTIgbCAtNjgsLTYgdiAyOSBjIDAsMjggLTQsMzEgLTc3LDUzIC04NCwyNCAtMTUzLDMwIC0xOTMsMTYgLTQwLC0xNCAtMTYsNCAyNywyMCA2MCwyMyAyNTIsMTMgMzIzLC0xNSB6IG0gLTEyMywtMTc1IGMgNDMsLTE2IDk0LC0zNyAxMTIsLTQ3IDE5LC0xMSA0NSwtMjUgNTgsLTMyIDE0LC04IDY0LC04MyAxMTIsLTEzMiAxMjcsLTEyNyAyMjcsLTI3OSAyMzgsLTQwMSBsIDYsLTU2IC00MywtNiBjIC01NCwtNyAtODAsLTMxIC04MCwtNzMgMCwtNDEgMjEsLTYyIDY5LC03MCBsIDM3LC02IC03LC01MSBDIDE2MDgsNjgzIDE1NDgsNTM0IDE0NzIsNDM4IDEzNTQsMjkwIDExMjYsMTk1IDg4OSwxOTUgNzc4LDE5NSA3MjEsMjExIDYyMCwyNzEgNTExLDMzNiA0MjIsNDMzIDM2Miw1NTIgMzA1LDY2NiAyNzMsNzY1IDI2OCw4NDAgbCAtMyw0OSA0Miw3IGMgNzUsMTQgODQsMjMgODEsODIgbCAtMyw1MiAtNTcsMyBjIC0zMiwyIC01OCw1IC01OCw3IDAsMjUgMzUsMTI4IDU0LDE3MyA2NywxNjYgMjQwLDM4NyAzOTYsNDY3IDgxLDQyIDEzNCw1NCAyMzEsNTUgODEsMCAxMDgsLTQgMTc2LC0yOSB6IE0gMTgyLDEwNTAgQyAyMDEsOTgzIDE5Niw5MDkgMTYxLDc3MyAxMjYsNjM1IDEyMyw1OTMgMTQ2LDUwOCBjIDgsLTMzIDEzLC02NSAxMSwtNzEgLTksLTIzIC00OCw4NCAtNTksMTYwIC0xMSw3NSAtMTAsODMgMjIsMjAzIDQwLDE1MCA0OSwyNDcgMjYsMjk1IC0yMSw0NCAtMjAsNTYgNCwyNSAxMCwtMTQgMjUsLTQ1IDMyLC03MCB6IE0gMTc5MSw4MjEgYyAxOSwtMTUgMjgsLTM2IDM4LC05NSAxNSwtODQgMTAsLTE2OSAtMTYsLTI3OCAtMTMsLTU0IC0xNCwtNzMgLTUsLTkzIDI2LC01NiAyMiwtNTggLTk2LC01MSBsIC0xMDksNyAtMjcsLTM2IGMgLTE2LC0yMCAtMjUsLTM5IC0yMSwtNDMgNCwtNCA0MywtOSA4NywtMTEgNjIsLTIgODEsLTcgODUsLTIwIDQsLTkgMTcsLTI5IDMwLC00NCAxNCwtMTggMjMsLTQyIDIzLC02MyAwLC0zMCAtNSwtMzcgLTMyLC00OCAtNDgsLTIxIC04MiwtNyAtODgsMzUgLTgsNTcgLTMzLDYzIC0yOTAsNjkgLTIxNSw1IC0yMjIsNiAtMTYzLDE4IDY5LDE0IDE1Miw0OSAyMTYsODkgMjMyLDE0OSA0MTUsMzU4IDM5Myw0NDcgLTMsMTQgLTI0LDQ2IC00Nyw3MiAtMzEsMzYgLTM3LDQ5IC0yNyw1NSAxOCwxMiAyMiwxMSA0OSwtMTAgeiBNIDIyMCw2MDAgYyA2OCwtNzMgNTYsLTIxOCAtMjcsLTMyNiBsIC0yNywtMzYgMjEsLTM5IGMgMjYsLTQ3IDIxLC01MiAtNywtNiAtMjcsNDQgLTI1LDEwMCA3LDE2NiAzMyw2OSA0NCwxODIgMjAsMjA5IC00OSw1NiAtMzcsODYgMTMsMzIgeiBNIDU3NSwyMTEgQyA1NzUsMTg5IDQyOSwxMTIgMzM5LDg1IDIyMCw1MCAxNTMsNTQgOTMsMTAxIGMgLTMwLDIyIC0xMCwzMSA0MywxOCAyMiwtNCA1OSwtOSA4MywtOSAzOSwwIDQyLDIgMzAsMTcgLTEyLDE0IC0xMCwxNCAxMywtMSAyMSwtMTMgMzgsLTE2IDY0LC0xMSA0MSw3IDEzNiw1NiAxNzgsOTIgMzAsMjUgNzEsMjggNzEsNCB6IG0gNzcsLTg3IGMgMzUsLTkgNzksLTI2IDk4LC0zOCAzMCwtMTggNDksLTIxIDEzNSwtMjAgOTIsMSA5NywwIDY1LC0xMiBDIDg4OSwzMiA3ODcsMzcgNzAyLDY2IDYzNCw5MCA2MTYsOTIgNTQwLDg2IDQ5Myw4MyA0NDQsNzggNDMwLDc0IGMgLTQzLC05IDI3LDI3IDkwLDQ3IDcwLDIyIDU4LDIyIDEzMiwzIHpcIiAvPlxuICAgICAgICA8cGF0aCBkPVwiTSA4MDYsMTY1MiBDIDcxMiwxNjE3IDY0OCwxNTU1IDYwNywxNDYwIDQzNCwxMDY1IDQ1OCw2NzQgNjczLDQwMCA3MTYsMzQ1IDgxMywyNzIgODY4LDI1NCBjIDQzLC0xNCAxNjAsLTYgMjIxLDE2IDcwLDI0IDE2MSwxMDEgMjE3LDE4MiA4MCwxMTcgMTEwLDI1MSAxMDEsNTIyIC04LDIyNiAtNDYsNDE4IC0xMTcsNTI3IC00OCw3MyAtODYsMTA0IC0xNzUsMTQ1IC01NywyNiAtNzUsMjkgLTE1NywyOCAtNzAsMCAtMTA4LC02IC0xNTIsLTIyIHogbSA4OSwtMTcyIGMgMiwtMTEgOSwtNTAgMTYsLTg3IDYsLTM4IDE1LC02OCAxOSwtNjggNCwwIDEzLDMzIDIwLDczIDcsMzkgMTQsNzUgMTcsODAgNywxMSA0MSwtMTEgNTksLTM4IDE1LC0yMyAxNSwtMjggMCwtNjUgLTksLTIyIC0xMywtNDAgLTksLTQwIDMsMCAyMSwxMiA0MCwyNiA2Niw1MCA5MCwtNiAyNiwtNjEgLTM2LC0zMiAtNDAsLTYzIC01LC0zNyAyNywyMCA5Niw1MiAxMTIsNTIgMTYsMCA4MCwtMTMxIDgwLC0xNjMgMCwtMzUgLTMwLC0zMSAtNzQsMTIgLTM4LDM4IC00Niw0MSAtOTQsNDEgLTkyLDAgLTEzMSwtMzQgLTE3NywtMTUyIC0yNSwtNjMgLTI1LC02MyAtMTksLTE4IDMsMjUgMTksNjkgMzUsOTcgMTYsMjkgMjksNTggMjksNjUgMCwxNyAtNDUsLTI4IC02NiwtNjggLTE4LC0zNCAtMzQsLTQ0IC0zNCwtMjIgMCwyNCAtNTUsODEgLTk2LDEwMCAtNDMsMTkgLTQ1LDE5IC04NywwIC0yOSwtMTMgLTQ4LC0zMCAtNTksLTUyIC0xOSwtMzkgLTMzLC0yNCAtMjQsMjUgNCwyMSAxOSw0NCAzOSw2MCAzMCwyNCAzMSwyNiAxNCwzOSAtMjIsMTcgLTE1LDU2IDEzLDc0IDIxLDEzIDQxLC0xIDEzNywtOTIgNDksLTQ2IDYzLC00NCAzNSw1IC0zMSw1NyAtNDYsMTA5IC0zMywxMjIgOCw4IDE0LDMgMjMsLTIxIDE1LC00MCAyNCwtNDAgMzIsLTEgMTAsNTEgNywxMDQgLTksMTUwIGwgLTE1LDQ0IDI1LC0zMCBjIDE0LC0xNiAyNywtMzkgMzAsLTUwIHogbSAxMzgsLTQwNiBjIDgsLTYyIC04LC0yNDAgLTI5LC0zMjggLTIzLC0xMDAgLTcwLC0xODUgLTE0OSwtMjY5IC02MSwtNjQgLTcxLC03MiAtNzEsLTUxIDAsMTMgMjEsNTYgNDcsOTYgMTAwLDE1MiAxNjYsMzQxIDE3Niw1MDEgMyw1NiA5LDEwMiAxMywxMDIgNCwwIDEwLC0yMyAxMywtNTEgeiBtIC0yODEsLTQ2IGMgMTMsLTM1IDQ1LC00NiA1MywtMTggMTcsNTIgMTQsNTAgMzUsMjkgMjMsLTIyIDQwLC0xMDIgNDAsLTE4MyAwLC03MSAtMTAsLTEzMiAtMjEsLTEyNiAtMTMsOCAtMjEsLTEzIC0xMSwtMzEgNiwtMTAgLTEsLTM0IC0yMCwtNzQgLTE1LC0zMyAtMjgsLTY3IC0yOCwtNzUgMCwtOSAtNywtMTggLTE1LC0yMSAtOCwtNCAtMTUsLTEwIC0xNSwtMTYgMCwtNSAtMTQsLTIzIC0zMSwtNDEgbCAtMzEsLTMyIDIxLDMwIGMgMjUsMzYgNDEsODUgNDEsMTc1IDAsNjIgLTIsNjkgLTM3LDExMCAtMjAsMjMgLTU0LDg1IC03NiwxMDEgbCAtMzksMjggNTEsLTYgYyA0NywtNSA1MSwtNCA0NSwxMyAtNywxOCAtNDIsNzMgLTU0LDg0IC0xNSwxNCAtNDIsNTAgLTM4LDUwIDMsMCAyMiwtMTMgNDMsLTMwIDIwLC0xNiA0MiwtMjcgNDcsLTI0IDYsNCA4LDMzIDYsNjYgLTQsNTIgLTMsNTggOSw0MiA3LC0xMCAxOSwtMzMgMjUsLTUxIHogbSA0MDYsLTcgYyAzNCwtMTggNzUsLTYyIDk2LC0xMDMgOSwtMTggMjAsLTMzIDIzLC0zMyA0LDAgMjAsMTIgMzUsMjcgNDMsNDEgMzYsMiAtOCwtNDcgLTM3LC00MCAtMzgsLTQ3IC0xOSwtMTA2IDUsLTE3IC0xLC0yNiAtMjksLTQzIC0zNywtMjMgLTQ3LC01NSAtMjIsLTY0IDIwLC04IDQ3LC02MiA0MCwtODEgLTMsLTggLTIxLC0yMCAtMzksLTI2IC0zNiwtMTIgLTQ1LC0yNiAtNDUsLTY4IHYgLTI3IGggLTk4IGMgLTEwMiwwIC0xMjgsLTkgLTIzMSwtNzcgLTE5LC0xMiAtMzEsLTE3IC0yNywtMTAgNCw3IDQ3LDM5IDk0LDcxIDkyLDYyIDE5MiwxNTAgMTkyLDE2OSAwLDE1IC0zMCwzIC0zMSwtMTIgLTEsLTIwIC0yMDMsLTE2NiAtMjMwLC0xNjYgLTMsMCAxMCwxNyAyOSwzOCAxOSwyMCA1MSw2MSA2OSw5MCAyNSwzOSA0MCw1MiA1OCw1MiAyMSwwIDI0LDYgMjksNDUgMywyNSA5LDY1IDEyLDkwIDYsNTUgMTksNjQgMzgsMjggbCAxNCwtMjggNiwyNSBjIDMsMTQgNyw1MiA4LDg0IDMsNjYgMjQsODkgMzQsMzcgNCwtMTcgMTEsLTMxIDE2LC0zMSAzMywwIDExLDEyMCAtMjksMTU1IC0zMiwyNyAtMjUsMzIgMTUsMTEgelwiIC8+XG4gICAgICA8L2c+XG4gICAgPC9zdmc+XG5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShMb2dvU1ZHKWBcblxuICAgd2lkdGg6ICR7bG9nb1NWR1dpZHRofTtcbiAgIGhlaWdodDogYXV0bztcbiAgIFxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5cbmNsYXNzIFNWRyBleHRlbmRzIEVsZW1lbnQge1xuICBzdGF0aWMgdGFnTmFtZSA9IFwic3ZnXCI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShTVkcpYFxuXG4gIHN0cm9rZTogbm9uZTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICBcbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCBTVkcgZnJvbSBcIi4uL3N2Z1wiO1xuXG5pbXBvcnQgeyBtYXJrZXJTVkdIZWlnaHQsIG1hcmtlclNWR01hcmdpbkxlZnQgfSBmcm9tIFwiLi4vc3R5bGVzXCI7XG5cbmNsYXNzIE1hcmtlclNWRyBleHRlbmRzIFNWRyB7XG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIChcblxuICAgICAgPGc+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCI0XCIgeD1cIjJcIiB5PVwiMTZcIiAvPlxuICAgICAgPC9nPlxuXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICB2aWV3Qm94OiBcIjAgMCAyNSAyNVwiLFxuICAgIGNsYXNzTmFtZTogXCJtYXJrZXJcIlxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoTWFya2VyU1ZHKWBcblxuICB3aWR0aDogYXV0bztcbiAgaGVpZ2h0OiAke21hcmtlclNWR0hlaWdodH07XG4gIG1hcmdpbi1sZWZ0OiAke21hcmtlclNWR01hcmdpbkxlZnR9O1xuICBcbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCBTVkcgZnJvbSBcIi4uL3N2Z1wiO1xuXG5pbXBvcnQgeyBuYW1lU1ZHSGVpZ2h0LCBuYW1lU1ZHTWFyZ2luQm90dG9tIH0gZnJvbSBcIi4uL3N0eWxlc1wiO1xuXG5jbGFzcyBOYW1lU1ZHIGV4dGVuZHMgU1ZHIHtcbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDE4XCIsXG4gICAgY2xhc3NOYW1lOiBcIm5hbWVcIlxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoTmFtZVNWRylgXG5cbiAgd2lkdGg6IGF1dG87XG4gIGhlaWdodDogJHtuYW1lU1ZHSGVpZ2h0fTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW4tYm90dG9tOiAke25hbWVTVkdNYXJnaW5Cb3R0b219O1xuICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xuICBcbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCBOYW1lU1ZHIGZyb20gXCIuLi8uLi9zdmcvbmFtZVwiO1xuXG5pbXBvcnQgeyBmaWxlTmFtZVNWR1BhZGRpbmdMZWZ0IH0gZnJvbSBcIi4uLy4uL3N0eWxlc1wiO1xuXG5jbGFzcyBGaWxlTmFtZVNWRyBleHRlbmRzIE5hbWVTVkcge1xuICBjaGlsZEVsZW1lbnRzKCkge1xuICAgIHJldHVybiAoXG5cbiAgICAgIDxnPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMlwiIHg9XCIyXCIgeT1cIjE2XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiN1wiIHg9XCIxNFwiIHk9XCI5XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiMTJcIiB4PVwiMlwiIHk9XCI0XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCI3XCIgaGVpZ2h0PVwiMlwiIHg9XCIyXCIgeT1cIjJcIiAvPlxuICAgICAgICA8cGF0aCBkPVwibSA5LDIgNyw3IGggLTcgelwiIC8+XG4gICAgICA8L2c+XG5cbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJmaWxlXCJcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKEZpbGVOYW1lU1ZHKWBcblxuICBwYWRkaW5nLWxlZnQ6ICR7ZmlsZU5hbWVTVkdQYWRkaW5nTGVmdH07XG4gIFxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IFNWRyBmcm9tIFwiLi4vc3ZnXCI7XG5cbmltcG9ydCB7IHRvZ2dsZVNWR0hlaWdodCB9IGZyb20gXCIuLi9zdHlsZXNcIjtcblxuY2xhc3MgVG9nZ2xlU1ZHIGV4dGVuZHMgU1ZHIHtcbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIHZpZXdCb3g6IFwiMCAtNSAyNSAyNVwiLCAgLy8vXG4gICAgY2xhc3NOYW1lOiBcInRvZ2dsZVwiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShUb2dnbGVTVkcpYFxuXG4gIHdpZHRoOiBhdXRvO1xuICBoZWlnaHQ6ICR7dG9nZ2xlU1ZHSGVpZ2h0fTtcbiAgXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVG9nZ2xlU1ZHIGZyb20gXCIuLi8uLi9zdmcvdG9nZ2xlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVwVG9nZ2xlU1ZHIGV4dGVuZHMgVG9nZ2xlU1ZHIHtcbiAgY2hpbGRFbGVtZW50cygpIHtcbiAgICByZXR1cm4gKFxuXG4gICAgICA8Zz5cbiAgICAgICAgPHBhdGggZD1cIk0gNi42MTQ1ODMxLDE4LjUyMDgzMyBWIDcuOTM3NTAwMSBMIDE3LjE5NzkxNiwxMy4yMjkxNjYgWlwiIC8+XG4gICAgICA8L2c+XG5cbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJ1cFwiXG4gIH07XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCBTVkcgZnJvbSBcIi4uL3N2Z1wiO1xuXG5pbXBvcnQgeyBmb2xkRmlsbCB9IGZyb20gXCIuLi9zY2hlbWUvcHJldHR5UHJpbnRlclwiO1xuXG5jbGFzcyBGb2xkU1ZHIGV4dGVuZHMgU1ZHIHtcbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJmb2xkXCJcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKEZvbGRTVkcpYFxuXG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgZmlsbDogJHtmb2xkRmlsbH07XG4gIHdpZHRoOiAxMDAlO1xuICBzdHJva2U6IGluaGVyaXQ7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgRm9sZFNWRyBmcm9tIFwiLi4vLi4vc3ZnL2ZvbGRcIjtcblxuY2xhc3MgRm9sZExpbmVTVkcgZXh0ZW5kcyBGb2xkU1ZHIHtcbiAgY2hpbGRFbGVtZW50cygpIHtcbiAgICByZXR1cm4gKFxuXG4gICAgICA8Zz5cbiAgICAgICAgPHBhdGggZD1cIk0gOCwwIFYgMTZcIiBzdHlsZT1cInN0cm9rZS13aWR0aDoyLjU7XCIvPlxuICAgICAgPC9nPlxuXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIGNsYXNzTmFtZTogXCJsaW5lXCIsXG4gICAgcHJlc2VydmVBc3BlY3RSYXRpbzogXCJub25lXCJcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKEZvbGRMaW5lU1ZHKWBcblxuICBoZWlnaHQ6IDEwMCU7XG4gIFxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNWRyBmcm9tIFwiLi4vc3ZnXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZvbnRTaXplU1ZHIGV4dGVuZHMgU1ZHIHtcbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIHZpZXdCb3g6IFwiMCAwIDI1IDI1XCIsXG4gICAgY2xhc3NOYW1lOiBcImZvbnQtc2l6ZVwiXG4gIH07XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBNZW51U1ZHIGZyb20gXCIuLi8uLi9zdmcvbWVudVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGbGlwTWVudVNWRyBleHRlbmRzIE1lbnVTVkcge1xuICBjaGlsZEVsZW1lbnRzKCkge1xuICAgIHJldHVybiAoXG5cbiAgICAgIDxnPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjExXCIgaGVpZ2h0PVwiM1wiIHg9XCI2XCIgeT1cIjE2XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMVwiIGhlaWdodD1cIjNcIiB4PVwiOFwiIHk9XCI2XCIgLz5cbiAgICAgICAgPHBhdGggZD1cIk0gOCwzLjUgNCw3LjUgOCwxMS41IFpcIiAvPlxuICAgICAgICA8cGF0aCBkPVwibSAxNywxMy41IDQsNCAtNCw0IGMgMCwtMC41IDAsLTggMCwtOCB6XCIgLz5cbiAgICAgIDwvZz5cblxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcImZsaXBcIlxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVG9nZ2xlU1ZHIGZyb20gXCIuLi8uLi9zdmcvdG9nZ2xlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvd25Ub2dnbGVTVkcgZXh0ZW5kcyBUb2dnbGVTVkcge1xuICBjaGlsZEVsZW1lbnRzKCkge1xuICAgIHJldHVybiAoXG5cbiAgICAgIDxnPlxuICAgICAgICA8cGF0aCBkPVwiTSA2LjYxNDU4MzIsNy45Mzc0OTk5IEggMTcuMTk3OTE2IEwgMTEuOTA2MjUsMTguNTIwODMzIFpcIiAvPlxuICAgICAgPC9nPlxuXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwiZG93blwiXG4gIH07XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBGb2xkU1ZHIGZyb20gXCIuLi8uLi9zdmcvZm9sZFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDbG9zZWRGb2xkU1ZHIGV4dGVuZHMgRm9sZFNWRyB7XG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIChcblxuICAgICAgPGc+XG4gICAgICAgIDxwYXRoIGQ9XCJNIDIuMDQ2NTEsMi4wNDY1MSBIIDEzLjk1MzQ4OCBWIDEzLjk1MzQ4NyBIIDIuMDQ2NTEgWlwiIHN0eWxlPVwic3Ryb2tlLXdpZHRoOjQ7cGFpbnQtb3JkZXI6bWFya2VycyBzdHJva2UgZmlsbDtzdHJva2UtbGluZWpvaW46cm91bmQ7XCIgLz5cbiAgICAgICAgPHBhdGggZD1cIk0gNy45OTk5OTk4LDMuOTk5OTk5OSBWIDEyXCIgc3R5bGU9XCJzdHJva2Utd2lkdGg6M1wiIC8+XG4gICAgICAgIDxwYXRoIGQ9XCJNIDMuOTk5OTk5OSw3Ljk5OTk5OTggSCAxMlwiIHN0eWxlPVwic3Ryb2tlLXdpZHRoOjNcIiAvPlxuICAgICAgPC9nPlxuXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiLFxuICAgIGNsYXNzTmFtZTogXCJjbG9zZWRcIlxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRm9sZFNWRyBmcm9tIFwiLi4vLi4vc3ZnL2ZvbGRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9wT3BlbkZvbGRTVkcgZXh0ZW5kcyBGb2xkU1ZHIHtcbiAgY2hpbGRFbGVtZW50cygpIHtcbiAgICByZXR1cm4gKFxuXG4gICAgICA8Zz5cbiAgICAgICAgPHBhdGggZD1cIk0gNy45OTk5OTc1LDEzLjU4OTA4OSAyLjA0MjE1MDUsNy44MTU2MTk5IGMgMCwwIDAsLTUuNzczNDY5NCAwLC01Ljc3MzQ2OTQgSCAxMy45NTc4NDkgdiA1Ljc3MzQ2OTQgelwiIHN0eWxlPVwic3Ryb2tlLXdpZHRoOjQ7cGFpbnQtb3JkZXI6bWFya2VycyBzdHJva2UgZmlsbDtzdHJva2UtbGluZWpvaW46cm91bmQ7XCIgLz5cbiAgICAgICAgPHBhdGggZD1cIk0gMy45OTk5OTk5LDQuOTk5OTk5OSBIIDEyXCIgc3R5bGU9XCJzdHJva2Utd2lkdGg6M1wiIC8+XG4gICAgICA8L2c+XG5cbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgY2xhc3NOYW1lOiBcInRvcC1vcGVuXCJcbiAgfTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE5hbWVTVkcgZnJvbSBcIi4uLy4uL3N2Zy9uYW1lXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpcmVjdG9yeU5hbWVTVkcgZXh0ZW5kcyBOYW1lU1ZHIHtcbiAgY2hpbGRFbGVtZW50cygpIHtcbiAgICByZXR1cm4gKFxuXG4gICAgICA8Zz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjJcIiB4PVwiMFwiIHk9XCIxNlwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjdcIiB4PVwiMTRcIiB5PVwiOVwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjdcIiB4PVwiMFwiIHk9XCI5XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjJcIiB4PVwiMFwiIHk9XCI3XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCI3XCIgaGVpZ2h0PVwiM1wiIHg9XCIwXCIgeT1cIjRcIiAvPlxuICAgICAgICA8cGF0aCBkPVwibSA3LDQgMywzIEggNyBaXCIgLz5cbiAgICAgIDwvZz5cblxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcImRpcmVjdG9yeVwiXG4gIH07XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCBTVkcgZnJvbSBcIi4uL3N2Z1wiO1xuXG5pbXBvcnQgeyB0aXRsZVNWR0hlaWdodCB9IGZyb20gXCIuLi9zdHlsZXNcIjtcblxuY2xhc3MgVGl0bGVTVkcgZXh0ZW5kcyBTVkcge1xuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgdmlld0JveDogXCIwIDAgMjUgMjVcIixcbiAgICBjbGFzc05hbWU6IFwidGl0bGVcIlxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoVGl0bGVTVkcpYFxuXG4gIHRvcDogLTFweDtcbiAgcmlnaHQ6IDA7XG4gIHdpZHRoOiBhdXRvO1xuICBoZWlnaHQ6ICR7dGl0bGVTVkdIZWlnaHR9O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIFxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRpdGxlU1ZHIGZyb20gXCIuLi8uLi9zdmcvdGl0bGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXhwYW5kZWRUaXRsZVNWRyBleHRlbmRzIFRpdGxlU1ZHIHtcbiAgY2hpbGRFbGVtZW50cygpIHtcbiAgICByZXR1cm4gKFxuXG4gICAgICA8Zz5cbiAgICAgICAgPHBhdGggZD1cIk0gNi4wMDAxNTA2LDYuMDAwMTUwNiAxMi42MTQ3MzQsMTkuMjI5MzE3IDE5LjIyOTMxNyw2LjAwMDE1MDYgWiBtIDIuNDY2NTE2MSwxLjUwODQzNSBoIDguMjk1NjE3MyBsIC00LjE0NzU1LDguMjk2MTM0NCB6XCIgLz5cbiAgICAgIDwvZz5cblxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcImV4cGFuZGVkXCJcbiAgfTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRpdGxlU1ZHIGZyb20gXCIuLi8uLi9zdmcvdGl0bGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sbGFwc2VkVGl0bGVTVkcgZXh0ZW5kcyBUaXRsZVNWRyB7XG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIChcblxuICAgICAgPGc+XG4gICAgICAgIDxwYXRoIGQ9XCJNIDE5LjIyOTMxNyA2LjAwMDE1MDYgTCA2LjAwMDE1MDYgMTIuNjE0NzM0IEwgMTkuMjI5MzE3IDE5LjIyOTMxNyBMIDE5LjIyOTMxNyA2LjAwMDE1MDYgeiBNIDE3LjcyMDg4MiA4LjQ2NjY2NjcgTCAxNy43MjA4ODIgMTYuNzYyMjg0IEwgOS40MjQ3NDc3IDEyLjYxNDczNCBMIDE3LjcyMDg4MiA4LjQ2NjY2NjcgeiBcIiAvPlxuICAgICAgPC9nPlxuXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwiY29sbGFwc2VkXCJcbiAgfTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IEZvbGRTVkcgZnJvbSBcIi4uLy4uL3N2Zy9mb2xkXCI7XG5cbmNsYXNzIEJvdHRvbU9wZW5Gb2xkU1ZHIGV4dGVuZHMgRm9sZFNWRyB7XG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIChcblxuICAgICAgPGc+XG4gICAgICAgIDxwYXRoIGQ9XCJNIDcuOTk5OTk3MSwyLjg0MzY5ODcgMi4wNDIxNSw4LjYxNzE2NzcgYyAwLDAgMCw1Ljc3MzQ3MDMgMCw1Ljc3MzQ3MDMgSCAxMy45NTc4NDkgViA4LjYxNzE2NzcgWlwiIHN0eWxlPVwic3Ryb2tlLXdpZHRoOjQ7cGFpbnQtb3JkZXI6bWFya2VycyBzdHJva2UgZmlsbDtzdHJva2UtbGluZWpvaW46IHJvdW5kO1wiIC8+XG4gICAgICAgIDxwYXRoIGQ9XCJtIDQsMTEgaCA4XCIgc3R5bGU9XCJzdHJva2Utd2lkdGg6M1wiIC8+XG4gICAgICA8L2c+XG5cbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgY2xhc3NOYW1lOiBcImJvdHRvbS1vcGVuXCJcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKEJvdHRvbU9wZW5Gb2xkU1ZHKWBcblxuICB0b3A6IHVuc2V0O1xuICBib3R0b206IDA7XG4gICBcbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBNZW51U1ZHIGZyb20gXCIuLi8uLi9zdmcvbWVudVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbWJlZGRlZE1vZGVNZW51U1ZHIGV4dGVuZHMgTWVudVNWRyB7XG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIChcblxuICAgICAgPGc+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiNlwiIGhlaWdodD1cIjJcIiB4PVwiMTZcIiB5PVwiMTRcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMlwiIHg9XCI4XCIgeT1cIjNcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCI2XCIgeD1cIjhcIiB5PVwiNVwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjlcIiB4PVwiMjBcIiB5PVwiNVwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjEwXCIgeD1cIjNcIiB5PVwiMTJcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjhcIiBoZWlnaHQ9XCIyXCIgeD1cIjVcIiB5PVwiMjBcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCIxMFwiIHg9XCIxM1wiIHk9XCIxMlwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiOFwiIGhlaWdodD1cIjJcIiB4PVwiNVwiIHk9XCIxMlwiIC8+XG4gICAgICA8L2c+XG5cbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJlbWJlZGRlZC1tb2RlXCJcbiAgfTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuaW1wb3J0IFNWRyBmcm9tIFwiLi4vc3ZnXCI7XG5cbmNsYXNzIFRvb2xiYXJTVkcgZXh0ZW5kcyBTVkcge1xuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgdmlld0JveDogXCIwIDAgMjUgMjVcIixcbiAgICBjbGFzc05hbWU6IFwidG9vbGJhclwiXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShUb29sYmFyU1ZHKWBcblxuICB3aWR0aDogYXV0bztcbiAgaGVpZ2h0OiAxMDAlO1xuICBcbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUb29sYmFyU1ZHIGZyb20gXCIuLi8uLi9zdmcvdG9vbGJhclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBKb2luU2Vzc2lvblRvb2xiYXJTVkcgZXh0ZW5kcyBUb29sYmFyU1ZHIHtcbiAgY2hpbGRFbGVtZW50cygpIHtcbiAgICByZXR1cm4gKFxuXG4gICAgICA8Zz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIzXCIgaGVpZ2h0PVwiMlwiIHg9XCIzXCIgeT1cIjE3XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiNFwiIHg9XCIxM1wiIHk9XCIxMVwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjZcIiB4PVwiM1wiIHk9XCIxMVwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIyXCIgeD1cIjNcIiB5PVwiOVwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiNFwiIGhlaWdodD1cIjJcIiB4PVwiM1wiIHk9XCI3XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjJcIiB4PVwiNlwiIHk9XCIyM1wiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjZcIiB4PVwiMTZcIiB5PVwiMTdcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCI2XCIgeD1cIjZcIiB5PVwiMTdcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMlwiIHg9XCI2XCIgeT1cIjE1XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCI0XCIgaGVpZ2h0PVwiMlwiIHg9XCI2XCIgeT1cIjEzXCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCI2XCIgaGVpZ2h0PVwiMlwiIHg9XCIxN1wiIHk9XCI1XCIgLz5cbiAgICAgICAgPHBhdGggZD1cIk0gMTcsMyBWIDkgTCAxNCw2IFpcIiAvPlxuICAgICAgICA8cGF0aCBkPVwiTSA3LDcgOSw5IEggNyBaXCIgLz5cbiAgICAgICAgPHBhdGggZD1cIm0gMTAsMTMgMiwyIGggLTIgelwiIC8+XG4gICAgICA8L2c+XG5cbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJqb2luLXNlc3Npb25cIlxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVG9vbGJhclNWRyBmcm9tIFwiLi4vLi4vc3ZnL3Rvb2xiYXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3luY2hyb25pc2VUb29sYmFyU1ZHIGV4dGVuZHMgVG9vbGJhclNWRyB7XG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIChcblxuICAgICAgPGcgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAuNSwgMilcIj5cbiAgICAgICAgPHBhdGggZD1cIk0gNS4yOTE2NjY2LDEwLjU4MzMzMyBIIDE5Ljg0Mzc1IFYgNy45Mzc0OTk5IEggMTAuNTgzMzMzIFYgNS4yOTE2NjY2IFpcIiAvPlxuICAgICAgICA8cGF0aCBkPVwibSA1LjI5MTY2NjYsMTQuNTUyMDgzIGMgMCwwIDE0LjU1MjA4MzQsMCAxNC41NTIwODM0LDAgMCwwIC01LjI5MTY2Nyw1LjI5MTY2NyAtNS4yOTE2NjcsNS4yOTE2NjcgMCwwIDAsLTIuNjQ1ODM0IDAsLTIuNjQ1ODM0IEggNS4yOTE2NjY2IFpcIiAvPlxuICAgICAgPC9nPlxuXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwic3luY2hyb25pc2VcIlxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVG9vbGJhclNWRyBmcm9tIFwiLi4vLi4vc3ZnL3Rvb2xiYXJcIjtcblxuaW1wb3J0IHsgc2hvd1JlbGVhc2VzQ3Jvc3NGaWxsIH0gZnJvbSBcIi4uLy4uL3NjaGVtZS9jb21tb25cIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2hvd1JlbGVhc2VzVG9vbGJhclNWRyBleHRlbmRzIFRvb2xiYXJTVkcge1xuICBjaGlsZEVsZW1lbnRzKCkge1xuICAgIHJldHVybiAoXG5cbiAgICAgIDxnPlxuICAgICAgICA8ZyBmaWxsPXtgJHtzaG93UmVsZWFzZXNDcm9zc0ZpbGx9YH0gdHJhbnNmb3JtPVwidHJhbnNsYXRlKDcsIDMpIHJvdGF0ZSg0NSlcIj5cbiAgICAgICAgICA8cmVjdCB3aWR0aD1cIjNcIiBoZWlnaHQ9XCIyXCIgeD1cIi0xXCIgeT1cIjNcIiAvPlxuICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjhcIiB4PVwiMlwiIHk9XCItM1wiIC8+XG4gICAgICAgIDwvZz5cbiAgICAgICAgPGcgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDMsIDcpXCI+XG4gICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjJcIiB4PVwiMFwiIHk9XCIxNlwiIC8+XG4gICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiM1wiIHg9XCIxNFwiIHk9XCIxM1wiIC8+XG4gICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiM1wiIHg9XCIxMlwiIHk9XCI2XCIgLz5cbiAgICAgICAgICA8cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCIzXCIgeD1cIjE4XCIgeT1cIjZcIiAvPlxuICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjdcIiB4PVwiMFwiIHk9XCI5XCIgLz5cbiAgICAgICAgICA8cmVjdCB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMlwiIHg9XCIwXCIgeT1cIjdcIiAvPlxuICAgICAgICAgIDxyZWN0IHdpZHRoPVwiN1wiIGhlaWdodD1cIjNcIiB4PVwiMFwiIHk9XCI0XCIgLz5cbiAgICAgICAgICA8cGF0aCBkPVwibSA3LDQgMywzIEggNyBaXCIgLz5cbiAgICAgICAgICA8cGF0aCBkPVwibSAxNS45NjYwNDgsMS4wMDAwMDA1IGEgMy4xMTExMTAzLDMuNDk5OTk5NSAwIDAgMCAtMy4wNzcxNTksMy4wMDAzMzM3IGggMS4zNTc4MjYgYSAxLjc3Nzc3NzQsMS45OTk5OTk2IDAgMCAxIDEuNzE5MzMzLC0xLjUwMDE2NjkgMS43Nzc3Nzc0LDEuOTk5OTk5NiAwIDAgMSAxLjcxODg3MiwxLjUwMDE2NjkgaCAxLjM2MDEyNCBBIDMuMTExMTEwMywzLjQ5OTk5OTUgMCAwIDAgMTUuOTY2MDQ4LDEuMDAwMDAwNSBaXCIgLz5cbiAgICAgICAgICA8cmVjdCB3aWR0aD1cIjcuOTk5OTk5NVwiIGhlaWdodD1cIjEuOTk5OTk5NVwiIHg9XCIxMi4wMDAwMDFcIiB5PVwiMy45OTk5OTk4XCIgLz5cbiAgICAgICAgICA8cmVjdCB3aWR0aD1cIjcuOTk5OTk5NVwiIGhlaWdodD1cIjEuOTk5OTk5NVwiIHg9XCIxMi4wMDAwMDFcIiB5PVwiOS4wMDAwMDFcIiAvPlxuICAgICAgICA8L2c+XG4gICAgICA8L2c+XG5cbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJzaG93LXJlbGVhc2VzXCJcbiAgfTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRvb2xiYXJTVkcgZnJvbSBcIi4uLy4uL3N2Zy90b29sYmFyXCI7XG5cbmltcG9ydCB7IGhpZGVSZWxlYXNlc0Nyb3NzRmlsbCB9IGZyb20gXCIuLi8uLi9zY2hlbWUvY29tbW9uXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhpZGVSZWxlYXNlc1Rvb2xiYXJTVkcgZXh0ZW5kcyBUb29sYmFyU1ZHIHtcbiAgY2hpbGRFbGVtZW50cygpIHtcbiAgICByZXR1cm4gKFxuXG4gICAgICA8Zz5cbiAgICAgICAgPGcgZmlsbD17YCR7aGlkZVJlbGVhc2VzQ3Jvc3NGaWxsfWB9IHRyYW5zZm9ybT1cInRyYW5zbGF0ZSg2LCA0KSByb3RhdGUoNDUpXCI+XG4gICAgICAgICAgPHJlY3Qgd2lkdGg9XCI4XCIgaGVpZ2h0PVwiMlwiIHg9XCItM1wiIHk9XCIwXCIgLz5cbiAgICAgICAgICA8cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCI4XCIgeD1cIjBcIiB5PVwiLTNcIiAvPlxuICAgICAgICA8L2c+XG4gICAgICAgIDxnIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgzLCA3KVwiPlxuICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIyXCIgeD1cIjBcIiB5PVwiMTZcIiAvPlxuICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjNcIiB4PVwiMTRcIiB5PVwiMTNcIiAvPlxuICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjNcIiB4PVwiMTJcIiB5PVwiNlwiIC8+XG4gICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiM1wiIHg9XCIxOFwiIHk9XCI2XCIgLz5cbiAgICAgICAgICA8cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCI3XCIgeD1cIjBcIiB5PVwiOVwiIC8+XG4gICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjJcIiB4PVwiMFwiIHk9XCI3XCIgLz5cbiAgICAgICAgICA8cmVjdCB3aWR0aD1cIjdcIiBoZWlnaHQ9XCIzXCIgeD1cIjBcIiB5PVwiNFwiIC8+XG4gICAgICAgICAgPHBhdGggZD1cIm0gNyw0IDMsMyBIIDcgWlwiIC8+XG4gICAgICAgICAgPHBhdGggZD1cIm0gMTUuOTY2MDQ4LDEuMDAwMDAwNSBhIDMuMTExMTEwMywzLjQ5OTk5OTUgMCAwIDAgLTMuMDc3MTU5LDMuMDAwMzMzNyBoIDEuMzU3ODI2IGEgMS43Nzc3Nzc0LDEuOTk5OTk5NiAwIDAgMSAxLjcxOTMzMywtMS41MDAxNjY5IDEuNzc3Nzc3NCwxLjk5OTk5OTYgMCAwIDEgMS43MTg4NzIsMS41MDAxNjY5IGggMS4zNjAxMjQgQSAzLjExMTExMDMsMy40OTk5OTk1IDAgMCAwIDE1Ljk2NjA0OCwxLjAwMDAwMDUgWlwiIC8+XG4gICAgICAgICAgPHJlY3Qgd2lkdGg9XCI3Ljk5OTk5OTVcIiBoZWlnaHQ9XCIxLjk5OTk5OTVcIiB4PVwiMTIuMDAwMDAxXCIgeT1cIjMuOTk5OTk5OFwiIC8+XG4gICAgICAgICAgPHJlY3Qgd2lkdGg9XCI3Ljk5OTk5OTVcIiBoZWlnaHQ9XCIxLjk5OTk5OTVcIiB4PVwiMTIuMDAwMDAxXCIgeT1cIjkuMDAwMDAxXCIgLz5cbiAgICAgICAgPC9nPlxuICAgICAgPC9nPlxuXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwiaGlkZS1yZWxlYXNlc1wiXG4gIH07XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBUb29sYmFyU1ZHIGZyb20gXCIuLi8uLi9zdmcvdG9vbGJhclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMZWF2ZVNlc3Npb25Ub29sYmFyU1ZHIGV4dGVuZHMgVG9vbGJhclNWRyB7XG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIChcblxuICAgICAgPGc+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiM1wiIGhlaWdodD1cIjJcIiB4PVwiM1wiIHk9XCIxN1wiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjRcIiB4PVwiMTNcIiB5PVwiMTFcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCI2XCIgeD1cIjNcIiB5PVwiMTFcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMlwiIHg9XCIzXCIgeT1cIjlcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjRcIiBoZWlnaHQ9XCIyXCIgeD1cIjNcIiB5PVwiN1wiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIyXCIgeD1cIjZcIiB5PVwiMjNcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCI2XCIgeD1cIjE2XCIgeT1cIjE3XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiNlwiIHg9XCI2XCIgeT1cIjE3XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjJcIiB4PVwiNlwiIHk9XCIxNVwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiNFwiIGhlaWdodD1cIjJcIiB4PVwiNlwiIHk9XCIxM1wiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiNlwiIGhlaWdodD1cIjJcIiB4PVwiMTRcIiB5PVwiNVwiIC8+XG4gICAgICAgIDxwYXRoIGQ9XCJNIDcsNyA5LDkgSCA3IFpcIiAvPlxuICAgICAgICA8cGF0aCBkPVwibSAxMCwxMyAyLDIgaCAtMiB6XCIgLz5cbiAgICAgICAgPHBhdGggZD1cIm0gMjAsMyB2IDYgbCAzLC0zIHpcIi8+XG4gICAgICA8L2c+XG5cbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJsZWF2ZS1zZXNzaW9uXCJcbiAgfTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRvb2xiYXJTVkcgZnJvbSBcIi4uLy4uL3N2Zy90b29sYmFyXCI7XG5cbmltcG9ydCB7IGNsZWFyQ29uc29sZUZpbGwgfSBmcm9tIFwiLi4vLi4vc2NoZW1lL2NvbW1vblwiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENsZWFyQ29uc29sZVRvb2xiYXJTVkcgZXh0ZW5kcyBUb29sYmFyU1ZHIHtcbiAgY2hpbGRFbGVtZW50cygpIHtcbiAgICByZXR1cm4gKFxuXG4gICAgICA8ZyBmaWxsPXtgJHtjbGVhckNvbnNvbGVGaWxsfWB9IHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgwLCAwLjI1KVwiPlxuICAgICAgICA8cGF0aCBkPVwibSAxOS4yMTcyNjIsNS43ODIyNzY1IGEgOS40OTk4OTQ1LDkuNDk5ODk0MiAwIDAgMCAtMTMuNDM0OTg3MSw0LjYzNmUtNCA5LjQ5OTg5NDUsOS40OTk4OTQyIDAgMCAwIDVlLTcsMTMuNDM0NTE5OSA5LjQ5OTg5NDUsOS40OTk4OTQyIDAgMCAwIDEzLjQzNDk4NjYsNC42NGUtNCA5LjQ5OTg5NDUsOS40OTk4OTQyIDAgMCAwIDAsLTEzLjQzNTQ0NzUgeiBtIC0wLjk3NzUyOSwyLjc2OTY2MDggYSA2Ljk2NjU4OTMsNi45NjY1ODkyIDAgMCAxIC0wLjgxMzY4MSw4Ljg3NDU3NzcgNi45NjY1ODkzLDYuOTY2NTg5MiAwIDAgMSAtOC44NzI3MjczLDAuODExODMgeiBNIDE2LjQ0NjY3NCw2Ljc2MTY1NTYgNi43NjE2NTQyLDE2LjQ0NjY3NSBBIDYuOTY2NTg5Myw2Ljk2NjU4OTIgMCAwIDEgNy41NzM0ODI5LDcuNTczOTQ3NCA2Ljk2NjU4OTMsNi45NjY1ODkyIDAgMCAxIDE2LjQ0NjY3NCw2Ljc2MTY1NTYgWlwiIC8+XG4gICAgICA8L2c+XG5cbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJjbGVhci1jb25zb2xlXCJcbiAgfTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRvb2xiYXJTVkcgZnJvbSBcIi4uLy4uL3N2Zy90b29sYmFyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENyZWF0ZVNlc3Npb25Ub29sYmFyU1ZHIGV4dGVuZHMgVG9vbGJhclNWRyB7XG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIChcblxuICAgICAgPGc+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiM1wiIGhlaWdodD1cIjJcIiB4PVwiM1wiIHk9XCIxN1wiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjRcIiB4PVwiMTNcIiB5PVwiMTFcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCI2XCIgeD1cIjNcIiB5PVwiMTFcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMlwiIHg9XCIzXCIgeT1cIjlcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjRcIiBoZWlnaHQ9XCIyXCIgeD1cIjNcIiB5PVwiN1wiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIyXCIgeD1cIjZcIiB5PVwiMjNcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCI2XCIgeD1cIjE2XCIgeT1cIjE3XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiNlwiIHg9XCI2XCIgeT1cIjE3XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjJcIiB4PVwiNlwiIHk9XCIxNVwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiNFwiIGhlaWdodD1cIjJcIiB4PVwiNlwiIHk9XCIxM1wiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiOFwiIGhlaWdodD1cIjJcIiB4PVwiMTVcIiB5PVwiNVwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjhcIiB4PVwiMThcIiB5PVwiMlwiIC8+XG4gICAgICAgIDxwYXRoIGQ9XCJNIDcsNyA5LDkgSCA3IFpcIi8+XG4gICAgICAgIDxwYXRoIGQ9XCJtIDEwLDEzIDIsMiBoIC0yIHpcIiAvPlxuICAgICAgPC9nPlxuXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwiY3JlYXRlLXNlc3Npb25cIlxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgRGlyZWN0b3J5TmFtZVNWRyBmcm9tIFwiLi4vLi4vLi4vc3ZnL25hbWUvZGlyZWN0b3J5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlbGVhc2VEaXJlY3RvcnlOYW1lU1ZHIGV4dGVuZHMgRGlyZWN0b3J5TmFtZVNWRyB7XG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIChcblxuICAgICAgPGc+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIyXCIgeD1cIjBcIiB5PVwiMTZcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCIzXCIgeD1cIjE0XCIgeT1cIjEzXCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiM1wiIHg9XCIxMlwiIHk9XCI2XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiM1wiIHg9XCIxOFwiIHk9XCI2XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiN1wiIHg9XCIwXCIgeT1cIjlcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMlwiIHg9XCIwXCIgeT1cIjdcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjdcIiBoZWlnaHQ9XCIzXCIgeD1cIjBcIiB5PVwiNFwiIC8+XG4gICAgICAgIDxwYXRoIGQ9XCJtIDcsNCAzLDMgSCA3IFpcIiAvPlxuICAgICAgICA8cGF0aCBkPVwibSAxNS45NjYwNDgsMS4wMDAwMDA1IGEgMy4xMTExMTAzLDMuNDk5OTk5NSAwIDAgMCAtMy4wNzcxNTksMy4wMDAzMzM3IGggMS4zNTc4MjYgYSAxLjc3Nzc3NzQsMS45OTk5OTk2IDAgMCAxIDEuNzE5MzMzLC0xLjUwMDE2NjkgMS43Nzc3Nzc0LDEuOTk5OTk5NiAwIDAgMSAxLjcxODg3MiwxLjUwMDE2NjkgaCAxLjM2MDEyNCBBIDMuMTExMTEwMywzLjQ5OTk5OTUgMCAwIDAgMTUuOTY2MDQ4LDEuMDAwMDAwNSBaXCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCI3Ljk5OTk5OTVcIiBoZWlnaHQ9XCIxLjk5OTk5OTVcIiB4PVwiMTIuMDAwMDAxXCIgeT1cIjMuOTk5OTk5OFwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiNy45OTk5OTk1XCIgaGVpZ2h0PVwiMS45OTk5OTk1XCIgeD1cIjEyLjAwMDAwMVwiIHk9XCI5LjAwMDAwMVwiIC8+XG4gICAgICA8L2c+XG5cbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJyZWxlYXNlXCJcbiAgfTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE1lbnVTVkcgZnJvbSBcIi4uLy4uL3N2Zy9tZW51XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByZXNlbnRhdGlvbk1vZGVNZW51U1ZHIGV4dGVuZHMgTWVudVNWRyB7XG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIChcblxuICAgICAgPGc+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIyXCIgeD1cIjhcIiB5PVwiMTRcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMlwiIHg9XCI4XCIgeT1cIjNcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCI5XCIgeD1cIjhcIiB5PVwiNVwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjlcIiB4PVwiMjBcIiB5PVwiNVwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjEwXCIgeD1cIjNcIiB5PVwiMTJcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjhcIiBoZWlnaHQ9XCIyXCIgeD1cIjVcIiB5PVwiMjBcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCI1XCIgeD1cIjEzXCIgeT1cIjE3XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiMlwiIHg9XCI1XCIgeT1cIjEyXCIgLz5cbiAgICAgIDwvZz5cblxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcInByZXNlbnRhdGlvbi1tb2RlXCJcbiAgfTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE1lbnVTVkcgZnJvbSBcIi4uLy4uL3N2Zy9tZW51XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlY3JlYXNlRm9udFNpemVNZW51U1ZHIGV4dGVuZHMgTWVudVNWRyB7XG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIChcblxuICAgICAgPGc+XG4gICAgICAgIDxnIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgxLCAxKSBzY2FsZSgwLjksIDAuOSlcIj5cbiAgICAgICAgICA8cGF0aCBkPVwiTSA3LjQxMzAzODYsMjMuNDc4MjM5IEggMi4wMDAwMDI4IGwgMC4xNTIxNzM3LC0wLjgyNjA4NiBxIDAuMzkxMzAzOCwtMC4yMTczOTEgMC44MjYwODU4LC0wLjM2OTU2NCAwLjQzNDc4MiwtMC4xNzM5MTMgMC44Njk1NjQsLTAuMjYwODcgTCAxMi40NTY1MSw4LjAwMDAwMDIgaCAxLjU4Njk1NCBsIDIuNDU2NTE4LDE0LjAyMTcxODggcSAwLjQxMzA0MywwLjA4Njk2IDAuODA0MzQ3LDAuMjYwODcgMC40MTMwNDMsMC4xNzM5MTIgMC42OTU2NTEsMC4zNjk1NjQgbCAtMC4xNzM5MTMsMC44MjYwODYgaCAtNi42OTU2NDIgbCAwLjE1MjE3MywtMC44MjYwODYgcSAwLjQ1NjUyMSwtMC4yMTczOTEgMC45NTY1MjEsLTAuMzY5NTY0IDAuNTIxNzM4LC0wLjE3MzkxMyAwLjk3ODI1OSwtMC4yNjA4NyBMIDEyLjY5NTY0LDE4LjU2NTIwMyBIIDcuODkxMjk4OCBsIC0yLjA2NTIxNDUsMy40NTY1MTYgcSAwLjQ1NjUyMTEsMC4wNjUyMiAwLjkxMzA0MjIsMC4yMzkxMyAwLjQ1NjUyMTEsMC4xNTIxNzQgMC44MjYwODU4LDAuMzkxMzA0IHogbSAxLjIxNzM4OTYsLTYuMzI2MDc4IGggMy44OTEyOTg4IGwgLTAuNjA4Njk1LC00LjE1MjE2OCB2IC0xLjg2OTU2MiBoIC0wLjA0MzQ4IGwgLTAuODI2MDg2LDEuOTEzMDQgelwiIC8+XG4gICAgICAgICAgPHJlY3Qgd2lkdGg9XCI4XCIgaGVpZ2h0PVwiMlwiIHg9XCIxNVwiIHk9XCI1XCIgLz5cbiAgICAgICAgPC9nPlxuICAgICAgPC9nPlxuXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwiZGVjcmVhc2UtZm9udC1zaXplXCJcbiAgfTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE1lbnVTVkcgZnJvbSBcIi4uLy4uL3N2Zy9tZW51XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluY3JlYXNlRm9udFNpemVNZW51U1ZHIGV4dGVuZHMgTWVudVNWRyB7XG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIChcblxuICAgICAgPGc+XG4gICAgICAgIDxnIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgxLCAxKSBzY2FsZSgwLjksIDAuOSlcIj5cbiAgICAgICAgICA8cGF0aCBkPVwiTSA3LjQxMzAzODYsMjMuNDc4MjM5IEggMi4wMDAwMDI4IGwgMC4xNTIxNzM3LC0wLjgyNjA4NiBxIDAuMzkxMzAzOCwtMC4yMTczOTEgMC44MjYwODU4LC0wLjM2OTU2NCAwLjQzNDc4MiwtMC4xNzM5MTMgMC44Njk1NjQsLTAuMjYwODcgTCAxMi40NTY1MSw4LjAwMDAwMDIgaCAxLjU4Njk1NCBsIDIuNDU2NTE4LDE0LjAyMTcxODggcSAwLjQxMzA0MywwLjA4Njk2IDAuODA0MzQ3LDAuMjYwODcgMC40MTMwNDMsMC4xNzM5MTIgMC42OTU2NTEsMC4zNjk1NjQgbCAtMC4xNzM5MTMsMC44MjYwODYgaCAtNi42OTU2NDIgbCAwLjE1MjE3MywtMC44MjYwODYgcSAwLjQ1NjUyMSwtMC4yMTczOTEgMC45NTY1MjEsLTAuMzY5NTY0IDAuNTIxNzM4LC0wLjE3MzkxMyAwLjk3ODI1OSwtMC4yNjA4NyBMIDEyLjY5NTY0LDE4LjU2NTIwMyBIIDcuODkxMjk4OCBsIC0yLjA2NTIxNDUsMy40NTY1MTYgcSAwLjQ1NjUyMTEsMC4wNjUyMiAwLjkxMzA0MjIsMC4yMzkxMyAwLjQ1NjUyMTEsMC4xNTIxNzQgMC44MjYwODU4LDAuMzkxMzA0IHogbSAxLjIxNzM4OTYsLTYuMzI2MDc4IGggMy44OTEyOTg4IGwgLTAuNjA4Njk1LC00LjE1MjE2OCB2IC0xLjg2OTU2MiBoIC0wLjA0MzQ4IGwgLTAuODI2MDg2LDEuOTEzMDQgelwiIC8+XG4gICAgICAgICAgPHJlY3Qgd2lkdGg9XCI4XCIgaGVpZ2h0PVwiMlwiIHg9XCIxNVwiIHk9XCI1XCIgLz5cbiAgICAgICAgICA8cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCI4XCIgeD1cIjE4XCIgeT1cIjJcIiAvPlxuICAgICAgICA8L2c+XG4gICAgICA8L2c+XG5cbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJpbmNyZWFzZS1mb250LXNpemVcIlxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVG9vbGJhclNWRyBmcm9tIFwiLi4vLi4vc3ZnL3Rvb2xiYXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT3BlblJ1YmJpc2hCaW5Ub29sYmFyU1ZHIGV4dGVuZHMgVG9vbGJhclNWRyB7XG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIChcblxuICAgICAgPGc+XG4gICAgICAgIDxwYXRoIGQ9XCJNIDksOSAxMywxM1wiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMTNcIiBoZWlnaHQ9XCIyXCIgeD1cIjZcIiB5PVwiMjNcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCIxM1wiIHg9XCI0XCIgeT1cIjEwXCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiMTNcIiB4PVwiMTlcIiB5PVwiMTBcIiAvPlxuICAgICAgICA8cGF0aCBkPVwiTSA0LDIzIDYsMjUgdiAtMiB6XCIgLz5cbiAgICAgICAgPHBhdGggZD1cIm0gMTksMjMgdiAyIGwgMiwtMiB6XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMVwiIGhlaWdodD1cIjJcIiB4PVwiMlwiIHk9XCI0XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCI5XCIgaGVpZ2h0PVwiMlwiIHg9XCI4XCIgeT1cIjBcIiAvPlxuICAgICAgICA8cGF0aCBkPVwiTSA2LDAgNyw0IGMgMCwwIDIsMCAyLDAgTCA4LDAgWlwiIC8+XG4gICAgICAgIDxwYXRoIGQ9XCJNIDE5LDAgMTgsNCBIIDE2IEwgMTcsMCBaXCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIxXCIgaGVpZ2h0PVwiMTFcIiB4PVwiOFwiIHk9XCIxMVwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMVwiIGhlaWdodD1cIjExXCIgeD1cIjE1Ljk5OTk5OVwiIHk9XCIxMVwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMVwiIGhlaWdodD1cIjExXCIgeD1cIjEyXCIgeT1cIjExXCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIxN1wiIGhlaWdodD1cIjJcIiB4PVwiNFwiIHk9XCI4XCIgLz5cbiAgICAgIDwvZz5cblxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcIm9wZW4tcnViYmlzaC1iaW5cIlxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVG9vbGJhclNWRyBmcm9tIFwiLi4vLi4vc3ZnL3Rvb2xiYXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29weVNlc3Npb25LZXlUb29sYmFyU1ZHIGV4dGVuZHMgVG9vbGJhclNWRyB7XG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIChcblxuICAgICAgPGc+XG4gICAgICAgIDxnIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtMiwgMS41KSBzY2FsZSgxLjI1LDEuMDI1KVwiPlxuICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMi41XCIgaGVpZ2h0PVwiMTNcIiB4PVwiNlwiIHk9XCI4XCIgLz5cbiAgICAgICAgICA8cmVjdCB3aWR0aD1cIjRcIiBoZWlnaHQ9XCIyXCIgeD1cIjNcIiB5PVwiMThcIiAvPlxuICAgICAgICAgIDxyZWN0IHdpZHRoPVwiM1wiIGhlaWdodD1cIjJcIiB4PVwiM1wiIHk9XCIxNFwiIC8+XG4gICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiMlwiIHg9XCI0XCIgeT1cIjE2XCIgLz5cbiAgICAgICAgICA8cGF0aCBkPVwiTSA3LjI1MDMyMjgsMi45OTk4MTY5IEEgMy43NDk5MDU4LDMgMCAwIDAgMy41LDYuMDAwMTUwNiAzLjc0OTkwNTgsMyAwIDAgMCA3LjI1MDMyMjgsOC45OTk5Njc0IDMuNzQ5OTA1OCwzIDAgMCAwIDExLDYuMDAwMTUwNiAzLjc0OTkwNTgsMyAwIDAgMCA3LjI1MDMyMjgsMi45OTk4MTY5IFogbSAwLDIuMDAwMzk0NyBBIDEuMjQ5OTY4NCwwLjk5OTk5OTk0IDAgMCAxIDguNTAwMjE1LDYuMDAwMTUwNiAxLjI0OTk2ODQsMC45OTk5OTk5NCAwIDAgMSA3LjI1MDMyMjgsNy4wMDAwODk1IDEuMjQ5OTY4NCwwLjk5OTk5OTk0IDAgMCAxIDYuMDAwNDMwNiw2LjAwMDE1MDYgMS4yNDk5Njg0LDAuOTk5OTk5OTQgMCAwIDEgNy4yNTAzMjI4LDUuMDAwMjExNiBaXCIgLz5cbiAgICAgICAgPC9nPlxuICAgICAgICA8cGF0aCBkPVwibSAxMiwxMS4yODU3MTQgaCA4IFYgOC44NTcxNDI5IGwgNCwzLjY0Mjg1ODEgLTQsMy42NDI4NTYgdiAtMi40Mjg1NzEgaCAtOCB6XCIgLz5cbiAgICAgIDwvZz5cblxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcImNvcHktc2Vzc2lvbi1rZXlcIlxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVG9vbGJhclNWRyBmcm9tIFwiLi4vLi4vc3ZnL3Rvb2xiYXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2xvc2VkUnViYmlzaEJpblRvb2xiYXJTVkcgZXh0ZW5kcyBUb29sYmFyU1ZHIHtcbiAgY2hpbGRFbGVtZW50cygpIHtcbiAgICByZXR1cm4gKFxuXG4gICAgICA8Zz5cbiAgICAgICAgPHBhdGggZD1cIk0gOSw5IDEzLDEzXCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIxM1wiIGhlaWdodD1cIjJcIiB4PVwiNlwiIHk9XCIyM1wiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjEzXCIgeD1cIjRcIiB5PVwiMTBcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCIxM1wiIHg9XCIxOVwiIHk9XCIxMFwiIC8+XG4gICAgICAgIDxwYXRoIGQ9XCJNIDQsMjMgNiwyNSB2IC0yIHpcIiAvPlxuICAgICAgICA8cGF0aCBkPVwibSAxOSwyMyB2IDIgbCAyLC0yIHpcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjIxXCIgaGVpZ2h0PVwiMlwiIHg9XCIyXCIgeT1cIjhcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjlcIiBoZWlnaHQ9XCIyXCIgeD1cIjhcIiB5PVwiNFwiIC8+XG4gICAgICAgIDxwYXRoIGQ9XCJNIDYsNCA3LDggYyAwLDAgMiwwIDIsMCBMIDgsNCBaXCIgLz5cbiAgICAgICAgPHBhdGggZD1cIk0gMTksNCAxOCw4IEggMTYgTCAxNyw0IFpcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjFcIiBoZWlnaHQ9XCIxMVwiIHg9XCI4XCIgeT1cIjExXCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIxXCIgaGVpZ2h0PVwiMTFcIiB4PVwiMTZcIiB5PVwiMTFcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjFcIiBoZWlnaHQ9XCIxMVwiIHg9XCIxMlwiIHk9XCIxMVwiIC8+XG4gICAgICA8L2c+XG5cbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJjbG9zZWQtcnViYmlzaC1iaW5cIlxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTWVudVNWRyBmcm9tIFwiLi4vLi4vc3ZnL21lbnVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9nZ2xlUHJldmlld1BhbmVPbmx5TWVudVNWRyBleHRlbmRzIE1lbnVTVkcge1xuICBjaGlsZEVsZW1lbnRzKCkge1xuICAgIHJldHVybiAoXG5cbiAgICAgIDxnPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjEuNDk5OTk5XCIgaGVpZ2h0PVwiMTUuOTk5OTk5XCIgeD1cIjIwLjVcIiB5PVwiNC41MDAwMDA1XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIxLjQ5OTk5OTJcIiBoZWlnaHQ9XCIxNS45OTk5OTlcIiB4PVwiM1wiIHk9XCI0LjUwMDAwMDVcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjE4Ljk5OTk5OFwiIGhlaWdodD1cIjEuNDk5OTk5MlwiIHg9XCIzLjAwMDAwMDdcIiB5PVwiMy4wMDAwMDA3XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIxOC45OTk5OThcIiBoZWlnaHQ9XCIxLjQ5OTk5OTJcIiB4PVwiMy4wMDAwMDA3XCIgeT1cIjIwLjVcIiAvPlxuICAgICAgPC9nPlxuXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwidG9nZ2xlLXByZXZpZXctcGFuZS1vbmx5XCJcbiAgfTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE1lbnVTVkcgZnJvbSBcIi4uLy4uL3N2Zy9tZW51XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRvZ2dsZVByZXZpZXdQYW5lU3BsaXRNZW51U1ZHIGV4dGVuZHMgTWVudVNWRyB7XG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIChcblxuICAgICAgPGc+XG4gICAgICAgIDxwYXRoIGQ9XCJNIDQuNDk5OTgzNyA0LjQ5OTk4MzcgTCA0LjQ5OTk4MzcgMjAuNTAwMDQxIEwgMTIuNTAwMDEyIDIwLjUwMDA0MSBMIDEyLjUwMDAxMiA0LjQ5OTk4MzcgTCA0LjQ5OTk4MzcgNC40OTk5ODM3IHogTSA2LjcwNzA4NDEgNi4xNzE3MTYzIEwgOS41MzUzMzUzIDguOTk5OTY3NCBMIDguODI4NDAxNyA5LjcwNjkwMSBMIDYuNzA3MDg0MSAxMS44MjgyMTkgTCA2LjAwMDE1MDYgMTEuMTIxMjg1IEwgOC4xMjE0NjgxIDguOTk5OTY3NCBMIDYuMDAwMTUwNiA2Ljg3ODY0OTkgTCA2LjcwNzA4NDEgNi4xNzE3MTYzIHogXCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIxLjQ5OTk5OVwiIGhlaWdodD1cIjE1Ljk5OTk5OVwiIHg9XCIyMC41XCIgeT1cIjQuNTAwMDAwNVwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMS40OTk5OTkyXCIgaGVpZ2h0PVwiMTUuOTk5OTk5XCIgeD1cIjNcIiB5PVwiNC41MDAwMDA1XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIxOC45OTk5OThcIiBoZWlnaHQ9XCIxLjQ5OTk5OTJcIiB4PVwiMy4wMDAwMDA3XCIgeT1cIjMuMDAwMDAwN1wiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMTguOTk5OTk4XCIgaGVpZ2h0PVwiMS40OTk5OTkyXCIgeD1cIjMuMDAwMDAwN1wiIHk9XCIyMC41XCIgLz5cbiAgICAgIDwvZz5cblxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcInRvZ2dsZS1wcmV2aWV3LXBhbmUtc3BsaXRcIlxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVG9vbGJhclNWRyBmcm9tIFwiLi4vLi4vc3ZnL3Rvb2xiYXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmluZEluQWN0aXZlRG9jdW1lbnRUb29sYmFyU1ZHIGV4dGVuZHMgVG9vbGJhclNWRyB7XG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIChcblxuICAgICAgPGcgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAsIDEpXCI+XG4gICAgICAgIDxwYXRoIGQ9XCJtIDEzLjQ2MjkyNiwxNi4wNDg3NzUgYSA3LjQ5OTkxODEsNy40OTk5OTk1IDAgMCAxIC0wLjY1OTU1MywwLjc1NDU2NyA3LjQ5OTkxODEsNy40OTk5OTk1IDAgMCAxIC0wLjc1Njc1MSwwLjY1NzM2OCBsIDEuNDYzODA2LDEuNDYzODIzIDEuNDE0MTEzLC0xLjQxNDEyOCB6IG0gNS43MDQyMTIsNC4yOTAwNiAtMi44Mjg1ODksMi44Mjg2MiBhIDEuOTk5NTkyNCwxLjk5OTk4ODkgNDMuNDMxNjEgMCAwIDIuODI4MzA5LDguNmUtNSAxLjk5OTU5MjQsMS45OTk5ODg5IDQzLjQzMTYxIDAgMCAyLjhlLTQsLTIuODI4NzA2IHogbSAtMy41MzU0OTYsLTMuNTM1NTM0IDMuNTM1NDk1LDMuNTM1NTM0IC0yLjgyODM5NSwyLjgyODQyNiAtMy41MzU0OTYsLTMuNTM1NTMzIHogTSAxMi44MDMxMDUsNi4xOTY1NTg0IGEgNy40OTk5MTgxLDcuNDk5OTk5NSAwIDAgMCAtMTAuNjA2MjA1LDAgNy40OTk5MTgxLDcuNDk5OTk5NSAwIDAgMCAtMy42NmUtNCwxMC42MDY2ODQ2IDcuNDk5OTE4MSw3LjQ5OTk5OTUgMCAwIDAgMTAuNjA2OTM2LDAgNy40OTk5MTgxLDcuNDk5OTk5NSAwIDAgMCAtMy42NWUtNCwtMTAuNjA2Njg0NiB6IG0gLTEuNDE0MTEyLDEuNDE0MTI3MiBhIDUuNDk5OTM5OCw1LjQ5OTk5OTUgMCAwIDEgMy42NWUtNCw3Ljc3ODQyOTQgNS40OTk5Mzk4LDUuNDk5OTk5NSAwIDAgMSAtNy43Nzg3MTIsMCA1LjQ5OTkzOTgsNS40OTk5OTk1IDAgMCAxIDMuNjVlLTQsLTcuNzc4NDI5NCA1LjQ5OTkzOTgsNS40OTk5OTk1IDAgMCAxIDcuNzc3OTgyLDAgelwiIC8+XG4gICAgICAgIDxwYXRoIGQ9XCJNIDkuMDAwMDAxLDEwLjAwMDAwMSBIIDE0IFYgMTMgSCA5LjAwMDAwMSBaIG0gOWUtNywtNC4wMDAwMDA1IEggMTIuMDAwMDAyIFYgMTIgSCA5LjAwMDAwMTkgWiBNIDE1LjUsMS4zNDc4NzAyZS02IDE5Ljk5OTk5OCw0LjQ5OTk5OTYgSCAxNS41IFogTSAxMS4wMDAwMDEsNS4zMzM1ODY0ZS03IEggMTUuNSBWIDIuMDAwMDAwNiBIIDExLjAwMDAwMSBaIE0gMTEuMDAwMDAyLDIuMDAwMDAwNiBoIDEuOTk5OTk5IHYgNC45OTk5OTg4IGggLTEuOTk5OTk5IHogbSA2Ljk5OTk5OSwyLjQ5OTk5OTkgSCAyMCB2IDQuNDk5OTk5IGggLTEuOTk5OTk5IHogbSAtNCw0LjQ5OTk5OTkgSCAyMCBWIDExIGggLTUuOTk5OTk5IHpcIiAvPlxuICAgICAgPC9nPlxuXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwiZmluZC1pbi1hY3RpdmUtZG9jdW1lbnRcIlxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVG9vbGJhclNWRyBmcm9tIFwiLi4vLi4vc3ZnL3Rvb2xiYXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXhwb3J0Q3VzdG9tR3JhbW1hcnNUb29sYmFyU1ZHIGV4dGVuZHMgVG9vbGJhclNWRyB7XG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIChcblxuICAgICAgPGc+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjFcIiB4PVwiMTRcIiB5PVwiN1wiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjFcIiB4PVwiMTRcIiB5PVwiMTdcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMi41XCIgeD1cIjRcIiB5PVwiNC41XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIzXCIgaGVpZ2h0PVwiNS41XCIgeD1cIjBcIiB5PVwiMFwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSg0LCA3KSBza2V3WCgyOC41KVwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiM1wiIGhlaWdodD1cIjUuNVwiIHg9XCIwXCIgeT1cIjBcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoNywgMTIuNSkgc2tld1goLTI4LjUpXCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjIuNVwiIHg9XCI0XCIgeT1cIjE4XCIgLz5cbiAgICAgICAgPHBhdGggZD1cIm0gMTIsMTEuMjg1NzE0IGggOCBWIDguODU3MTQyOSBsIDQsMy42NDI4NTgxIC00LDMuNjQyODU2IHYgLTIuNDI4NTcxIGggLTggelwiIC8+XG4gICAgICA8L2c+XG5cbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJleHBvcnQtY3VzdG9tLWdyYW1tYXJzXCJcbiAgfTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE1lbnVTVkcgZnJvbSBcIi4uLy4uL3N2Zy9tZW51XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRvZ2dsZVByZXR0eVByaW50ZXJPbmx5TWVudVNWRyBleHRlbmRzIE1lbnVTVkcge1xuICBjaGlsZEVsZW1lbnRzKCkge1xuICAgIHJldHVybiAoXG5cbiAgICAgIDxnPlxuICAgICAgICA8cGF0aCBkPVwiTSA0LjQ5OTk4MzcgNC40OTk5ODM3IEwgNC40OTk5ODM3IDIwLjUwMDA0MSBMIDEyLjUwMDAxMiAyMC41MDAwNDEgTCAxMi41MDAwMTIgNC40OTk5ODM3IEwgNC40OTk5ODM3IDQuNDk5OTgzNyB6IE0gNi43MDcwODQxIDYuMTcxNzE2MyBMIDkuNTM1MzM1MyA4Ljk5OTk2NzQgTCA4LjgyODQwMTcgOS43MDY5MDEgTCA2LjcwNzA4NDEgMTEuODI4MjE5IEwgNi4wMDAxNTA2IDExLjEyMTI4NSBMIDguMTIxNDY4MSA4Ljk5OTk2NzQgTCA2LjAwMDE1MDYgNi44Nzg2NDk5IEwgNi43MDcwODQxIDYuMTcxNzE2MyB6IFwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiOVwiIGhlaWdodD1cIjE1Ljk5OTk5OVwiIHg9XCIxMlwiIHk9XCI0LjUwMDAwMDVcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjEuNDk5OTk5XCIgaGVpZ2h0PVwiMTUuOTk5OTk5XCIgeD1cIjIwLjVcIiB5PVwiNC41MDAwMDA1XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIxLjQ5OTk5OTJcIiBoZWlnaHQ9XCIxNS45OTk5OTlcIiB4PVwiM1wiIHk9XCI0LjUwMDAwMDVcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjE4Ljk5OTk5OFwiIGhlaWdodD1cIjEuNDk5OTk5MlwiIHg9XCIzLjAwMDAwMDdcIiB5PVwiMy4wMDAwMDA3XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIxOC45OTk5OThcIiBoZWlnaHQ9XCIxLjQ5OTk5OTJcIiB4PVwiMy4wMDAwMDA3XCIgeT1cIjIwLjVcIiAvPlxuICAgICAgPC9nPlxuXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwidG9nZ2xlLXByZXR0eS1wcmludGVyLW9ubHlcIlxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTWVudVNWRyBmcm9tIFwiLi4vLi4vc3ZnL21lbnVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9nZ2xlUHJldHR5UHJpbnRlclNwbGl0TWVudVNWRyBleHRlbmRzIE1lbnVTVkcge1xuICBjaGlsZEVsZW1lbnRzKCkge1xuICAgIHJldHVybiAoXG5cbiAgICAgIDxnPlxuICAgICAgICA8ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoOCwwKVwiPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNIDQuNDk5OTgzNyA0LjQ5OTk4MzcgTCA0LjQ5OTk4MzcgMjAuNTAwMDQxIEwgMTIuNTAwMDEyIDIwLjUwMDA0MSBMIDEyLjUwMDAxMiA0LjQ5OTk4MzcgTCA0LjQ5OTk4MzcgNC40OTk5ODM3IHogTSA2LjcwNzA4NDEgNi4xNzE3MTYzIEwgOS41MzUzMzUzIDguOTk5OTY3NCBMIDguODI4NDAxNyA5LjcwNjkwMSBMIDYuNzA3MDg0MSAxMS44MjgyMTkgTCA2LjAwMDE1MDYgMTEuMTIxMjg1IEwgOC4xMjE0NjgxIDguOTk5OTY3NCBMIDYuMDAwMTUwNiA2Ljg3ODY0OTkgTCA2LjcwNzA4NDEgNi4xNzE3MTYzIHogXCIgLz5cbiAgICAgICAgPC9nPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjEuNDk5OTk5XCIgaGVpZ2h0PVwiMTUuOTk5OTk5XCIgeD1cIjExXCIgeT1cIjQuNTAwMDAwNVwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMS40OTk5OTlcIiBoZWlnaHQ9XCIxNS45OTk5OTlcIiB4PVwiMjAuNVwiIHk9XCI0LjUwMDAwMDVcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjEuNDk5OTk5MlwiIGhlaWdodD1cIjE1Ljk5OTk5OVwiIHg9XCIzXCIgeT1cIjQuNTAwMDAwNVwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMTguOTk5OTk4XCIgaGVpZ2h0PVwiMS40OTk5OTkyXCIgeD1cIjMuMDAwMDAwN1wiIHk9XCIzLjAwMDAwMDdcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjE4Ljk5OTk5OFwiIGhlaWdodD1cIjEuNDk5OTk5MlwiIHg9XCIzLjAwMDAwMDdcIiB5PVwiMjAuNVwiIC8+XG4gICAgICA8L2c+XG5cbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJ0b2dnbGUtcHJldHR5LXByaW50ZXItc3BsaXRcIlxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVG9vbGJhclNWRyBmcm9tIFwiLi4vLi4vc3ZnL3Rvb2xiYXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3JlYXRlUHJvamVjdHNGaWxlUGF0aFRvb2xiYXJTVkcgZXh0ZW5kcyBUb29sYmFyU1ZHIHtcbiAgY2hpbGRFbGVtZW50cygpIHtcbiAgICByZXR1cm4gKFxuXG4gICAgICA8Zz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIxNC4wMDAwMDFcIiBoZWlnaHQ9XCIxLjk5OTk5OTlcIiB4PVwiNVwiIHk9XCIyM1wiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMS45OTk5OTk5XCIgaGVpZ2h0PVwiN1wiIHg9XCIxN1wiIHk9XCIxNlwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMS45OTk5OTk5XCIgaGVpZ2h0PVwiMTJcIiB4PVwiNS4wMDAwMDFcIiB5PVwiMTFcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjdcIiBoZWlnaHQ9XCIxLjk5OTk5OTlcIiB4PVwiNS4wMDAwMDFcIiB5PVwiOVwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiOFwiIGhlaWdodD1cIjJcIiB4PVwiMTVcIiB5PVwiNVwiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjhcIiB4PVwiMThcIiB5PVwiMlwiIC8+XG4gICAgICAgIDxwYXRoIGQ9XCJtIDEyLjAwMDAwMSw5LjAwMDAwMDEgNyw2Ljk5OTk5OTkgaCAtNyB6XCIgLz5cbiAgICAgIDwvZz5cblxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcImNyZWF0ZS1wcm9qZWN0cy1maWxlLXBhdGhcIlxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgVG9vbGJhclNWRyBmcm9tIFwiLi4vLi4vc3ZnL3Rvb2xiYXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmluZEluUHJvamVjdHNBbmRSZWxlYXNlc1Rvb2xiYXJTVkcgZXh0ZW5kcyBUb29sYmFyU1ZHIHtcbiAgY2hpbGRFbGVtZW50cygpIHtcbiAgICByZXR1cm4gKFxuXG4gICAgICA8ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMCwgMSlcIj5cbiAgICAgICAgPHBhdGggZD1cIm0gMTMuNDYyOTI2LDE2LjA0ODc3NSBhIDcuNDk5OTE4MSw3LjQ5OTk5OTUgMCAwIDEgLTAuNjU5NTUzLDAuNzU0NTY3IDcuNDk5OTE4MSw3LjQ5OTk5OTUgMCAwIDEgLTAuNzU2NzUxLDAuNjU3MzY4IGwgMS40NjM4MDYsMS40NjM4MjMgMS40MTQxMTMsLTEuNDE0MTI4IHogbSA1LjcwNDIxMiw0LjI5MDA2IC0yLjgyODU4OSwyLjgyODYyIGEgMS45OTk1OTI0LDEuOTk5OTg4OSA0My40MzE2MSAwIDAgMi44MjgzMDksOC42ZS01IDEuOTk5NTkyNCwxLjk5OTk4ODkgNDMuNDMxNjEgMCAwIDIuOGUtNCwtMi44Mjg3MDYgeiBtIC0zLjUzNTQ5NiwtMy41MzU1MzQgMy41MzU0OTUsMy41MzU1MzQgLTIuODI4Mzk1LDIuODI4NDI2IC0zLjUzNTQ5NiwtMy41MzU1MzMgeiBNIDEyLjgwMzEwNSw2LjE5NjU1ODQgYSA3LjQ5OTkxODEsNy40OTk5OTk1IDAgMCAwIC0xMC42MDYyMDUsMCA3LjQ5OTkxODEsNy40OTk5OTk1IDAgMCAwIC0zLjY2ZS00LDEwLjYwNjY4NDYgNy40OTk5MTgxLDcuNDk5OTk5NSAwIDAgMCAxMC42MDY5MzYsMCA3LjQ5OTkxODEsNy40OTk5OTk1IDAgMCAwIC0zLjY1ZS00LC0xMC42MDY2ODQ2IHogbSAtMS40MTQxMTIsMS40MTQxMjcyIGEgNS40OTk5Mzk4LDUuNDk5OTk5NSAwIDAgMSAzLjY1ZS00LDcuNzc4NDI5NCA1LjQ5OTkzOTgsNS40OTk5OTk1IDAgMCAxIC03Ljc3ODcxMiwwIDUuNDk5OTM5OCw1LjQ5OTk5OTUgMCAwIDEgMy42NWUtNCwtNy43Nzg0Mjk0IDUuNDk5OTM5OCw1LjQ5OTk5OTUgMCAwIDEgNy43Nzc5ODIsMCB6XCIgLz5cbiAgICAgICAgPHBhdGggZD1cIk0gOS4wMDAwMDEsMTAuMDAwMDAxIEggMTUgViAxMyBIIDkuMDAwMDAxIFogbSA5ZS03LC00LjAwMDAwMDUgSCAxMi4wMDAwMDIgViAxMiBIIDkuMDAwMDAxOSBaIG0gNi4wMDAwMDAxLC01LjAwMDAwMDQgMiwyIGggLTIgeiBtIC00LC0xLjZlLTcgaCAzLjk5OTk5OSBWIDIuOTk5OTk5OSBoIC00IHogbSA5LjAwMDAwMSw1LjAwMDAwMDU2IGggNCBWIDggaCAtNCB6IG0gLTYsNS45OTk5OTk1IGggOS45OTk5OTkgdiAyIEggMTQuMDAwMDAzIFogTSAxMS4wMDAwMDIsMyBoIDkuOTk5OTk5IHYgMiBoIC0xMCB6IG0gMyw4LjAwMDAwMSBIIDE2IHYgMSBoIC0xLjk5OTk5OCB6IG0gOCwtMyBoIDIuMDAwMDAxIFYgMTIgaCAtMi4wMDAwMDEgeiBtIC0xMSwtMy4wMDAwMDA2IGggMiBWIDYuOTk5OTk5IGggLTIgeiBNIDE5LjAwMDAwMSw1IGggMiB2IDQgaCAtMiB6IG0gLTUsNC4wMDAwMDA0IEggMjEgViAxMSBoIC02Ljk5OTk5OSB6XCIgLz5cbiAgICAgIDwvZz5cblxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcImZpbmQtaW4tcHJvamVjdHMtYW5kLXJlbGVhc2VzXCJcbiAgfTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRvb2xiYXJTVkcgZnJvbSBcIi4uLy4uL3N2Zy90b29sYmFyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlbG9hZFByb2plY3RzQW5kUmVsZWFzZXNUb29sYmFyU1ZHIGV4dGVuZHMgVG9vbGJhclNWRyB7XG4gIGNoaWxkRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIChcblxuICAgICAgPGcgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAsIDEpXCI+XG4gICAgICAgIDxwYXRoIGQ9XCJtIDEzLjIyOTE2Nyw0LjYwNzU1NTEgdiAyLjU2NDg0MzQgYSA1Ljk1MzEyNDgsNS43NDA2MjQ4IDAgMCAxIDUuMjkxNjY1LDUuNzAyMjU0NSA1Ljk1MzEyNDgsNS43NDA2MjQ4IDAgMCAxIC01Ljk1MzEyNCw1Ljc0MDYyNCA1Ljk1MzEyNDgsNS43NDA2MjQ4IDAgMCAxIC01LjkxMzMzMzYsLTUuMTAyNzc2IEggMy45OTcxNzIzIGEgOC41OTg5NTc2LDguMjkyMDEzMiAwIDAgMCA4LjU3MDUzNTcsNy42NTQxNjYgOC41OTg5NTc2LDguMjkyMDEzMiAwIDAgMCA4LjU5ODk1OSwtOC4yOTIwMTQgOC41OTg5NTc2LDguMjkyMDEzMiAwIDAgMCAtNy45Mzc1LC04LjI2NzA5NzkgelwiIC8+XG4gICAgICAgIDxwYXRoIGQ9XCJNIDEzLjIyOTE2NywyLjAzMTI1MDMgViA5LjY4NTQxNzEgTCA3LjkzNzUwMDEsNS44NTgzMzM2IFpcIi8+XG4gICAgICA8L2c+XG5cbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJyZWxvYWQtcHJvamVjdHMtYW5kLXJlbGVhc2VzXCJcbiAgfTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRvb2xiYXJTVkcgZnJvbSBcIi4uLy4uL3N2Zy90b29sYmFyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlbmFtZVNlbGVjdGVkUHJvamVjdHNQYXRoVG9vbGJhclNWRyBleHRlbmRzIFRvb2xiYXJTVkcge1xuICBjaGlsZEVsZW1lbnRzKCkge1xuICAgIHJldHVybiAoXG5cbiAgICAgIDxnIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgwLjUsIDApIG1hdHJpeCgwLjYwMzYxMTc2LC0wLjYwMzYxMTc2LDAuNjAzNjExNzYsMC42MDM2MTE3NiwtNC4yODM4MDg1LDE0Ljg4MDg2NClcIj5cbiAgICAgICAgPHBhdGggZD1cIk0gNi42MTQ1ODMzLDcuOTM3NSBWIDE1Ljg3NSBIIDIxLjE2NjY2NyBWIDcuOTM3NSBaIG0gMi42NDU4MzM0LDIuNjQ1ODMzIGggOS4yNjA0MTYzIHYgMi42NDU4MzQgSCA5LjI2MDQxNjcgWlwiIC8+XG4gICAgICAgIDxwYXRoIGQ9XCJtIDIyLjQ4OTU4Myw3LjkzNzQ5OTkgaCAyLjY0NTgzMyBWIDE1Ljg3NSBoIC0yLjY0NTgzMyB6XCIgLz5cbiAgICAgICAgPHBhdGggZD1cIk0gNi42MTQ1ODMyLDcuOTM3NDk5OSAyLjY0NTgzMzMsMTEuOTA2MjUgNi42MTQ1ODMyLDE1Ljg3NSBaXCIgLz5cbiAgICAgIDwvZz5cblxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcInJlbmFtZS1zZWxlY3RlZC1wcm9qZWN0cy1wYXRoXCJcbiAgfTtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFRvb2xiYXJTVkcgZnJvbSBcIi4uLy4uL3N2Zy90b29sYmFyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENyZWF0ZVByb2plY3RzRGlyZWN0b3J5UGF0aFRvb2xiYXJTVkcgZXh0ZW5kcyBUb29sYmFyU1ZHIHtcbiAgY2hpbGRFbGVtZW50cygpIHtcbiAgICByZXR1cm4gKFxuXG4gICAgICA8Zz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjJcIiB4PVwiM1wiIHk9XCIyM1wiIC8+XG4gICAgICAgIDxyZWN0IHdpZHRoPVwiMlwiIGhlaWdodD1cIjdcIiB4PVwiMTdcIiB5PVwiMTZcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjJcIiBoZWlnaHQ9XCI3XCIgeD1cIjNcIiB5PVwiMTZcIiAvPlxuICAgICAgICA8cmVjdCB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMlwiIHg9XCIzXCIgeT1cIjE0XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCI3XCIgaGVpZ2h0PVwiM1wiIHg9XCIzXCIgeT1cIjExXCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCI4XCIgaGVpZ2h0PVwiMlwiIHg9XCIxNVwiIHk9XCI1XCIgLz5cbiAgICAgICAgPHJlY3Qgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiOFwiIHg9XCIxOFwiIHk9XCIyXCIgLz5cbiAgICAgICAgPHBhdGggZD1cIm0gMTAsMTEgMywzIGggLTMgelwiIC8+XG4gICAgICA8L2c+XG5cbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJjcmVhdGUtcHJvamVjdHMtZGlyZWN0b3J5LXBhdGhcIlxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHN0eWxlcyB9IGZyb20gXCIuL3N0eWxlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjb2xvdXJzIH0gZnJvbSBcIi4vY29sb3Vyc1wiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHN5bnRheFN0eWxlIH0gZnJvbSBcIi4vc3R5bGUvc3ludGF4XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGp1bGlhTW9ub1N0eWxlIH0gZnJvbSBcIi4vc3R5bGUvanVsaWFNb25vXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNvbXB1dGVyTW9kZXJuU3R5bGUgfSBmcm9tIFwiLi9zdHlsZS9jb21wdXRlck1vZGVyblwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIGNvbW1vbkZvbnRNaXhpbiB9IGZyb20gXCIuL21peGluL2ZvbnQvY29tbW9uXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGp1bGlhTW9ub0ZvbnRNaXhpbiB9IGZyb20gXCIuL21peGluL2ZvbnQvanVsaWFNb25vXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgZWRpdG9yU2NoZW1lIH0gZnJvbSBcIi4vc2NoZW1lL2VkaXRvclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjb21tb25TY2hlbWUgfSBmcm9tIFwiLi9zY2hlbWUvY29tbW9uXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNvbnNvbGVTY2hlbWUgfSBmcm9tIFwiLi9zY2hlbWUvY29uc29sZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwcmV2aWV3UGFuZVNjaGVtZSB9IGZyb20gXCIuL3NjaGVtZS9wcmV2aWV3UGFuZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwcmV0dHlQcmludGVyU2NoZW1lIH0gZnJvbSBcIi4vc2NoZW1lL3ByZXR0eVByaW50ZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgd2VsY29tZVNjcmVlblNjaGVtZSB9IGZyb20gXCIuL3NjaGVtZS93ZWxjb21lU2NyZWVuXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgTG9nb1NWRyB9IGZyb20gXCIuL3N2Zy9sb2dvXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1hcmtlclNWRyB9IGZyb20gXCIuL3N2Zy9tYXJrZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRmlsZU5hbWVTVkcgfSBmcm9tIFwiLi9zdmcvbmFtZS9maWxlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFVwVG9nZ2xlU1ZHIH0gZnJvbSBcIi4vc3ZnL3RvZ2dsZS91cFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBGb2xkTGluZVNWRyB9IGZyb20gXCIuL3N2Zy9mb2xkL2xpbmVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRmxpcE1lbnVTVkcgfSBmcm9tIFwiLi9zdmcvbWVudS9mbGlwXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIERvd25Ub2dnbGVTVkcgfSBmcm9tIFwiLi9zdmcvdG9nZ2xlL2Rvd25cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2xvc2VkRm9sZFNWRyB9IGZyb20gXCIuL3N2Zy9mb2xkL2Nsb3NlZFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUb3BPcGVuRm9sZFNWRyB9IGZyb20gXCIuL3N2Zy9mb2xkL3RvcE9wZW5cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRGlyZWN0b3J5TmFtZVNWRyB9IGZyb20gXCIuL3N2Zy9uYW1lL2RpcmVjdG9yeVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFeHBhbmRlZFRpdGxlU1ZHIH0gZnJvbSBcIi4vc3ZnL3RpdGxlL2V4cGFuZGVkXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvbGxhcHNlZFRpdGxlU1ZHIH0gZnJvbSBcIi4vc3ZnL3RpdGxlL2NvbGxhcHNlZFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCb3R0b21PcGVuRm9sZFNWRyB9IGZyb20gXCIuL3N2Zy9mb2xkL2JvdHRvbU9wZW5cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRW1iZWRkZWRNb2RlTWVudVNWRyB9IGZyb20gXCIuL3N2Zy9tZW51L2VtYmVkZGVkTW9kZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBKb2luU2Vzc2lvblRvb2xiYXJTVkcgfSBmcm9tIFwiLi9zdmcvdG9vbGJhci9qb2luU2Vzc2lvblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTeW5jaHJvbmlzZVRvb2xiYXJTVkcgfSBmcm9tIFwiLi9zdmcvdG9vbGJhci9zeW5jaHJvbmlzZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaG93UmVsZWFzZXNUb29sYmFyU1ZHIH0gZnJvbSBcIi4vc3ZnL3Rvb2xiYXIvc2hvd1JlbGVhc2VzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEhpZGVSZWxlYXNlc1Rvb2xiYXJTVkcgfSBmcm9tIFwiLi9zdmcvdG9vbGJhci9oaWRlUmVsZWFzZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTGVhdmVTZXNzaW9uVG9vbGJhclNWRyB9IGZyb20gXCIuL3N2Zy90b29sYmFyL2xlYXZlU2Vzc2lvblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDbGVhckNvbnNvbGVUb29sYmFyU1ZHIH0gZnJvbSBcIi4vc3ZnL3Rvb2xiYXIvY2xlYXJDb25zb2xlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENyZWF0ZVNlc3Npb25Ub29sYmFyU1ZHIH0gZnJvbSBcIi4vc3ZnL3Rvb2xiYXIvY3JlYXRlU2Vzc2lvblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSZWxlYXNlRGlyZWN0b3J5TmFtZVNWRyB9IGZyb20gXCIuL3N2Zy9uYW1lL2RpcmVjdG9yeS9yZWxlYXNlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFByZXNlbnRhdGlvbk1vZGVNZW51U1ZHIH0gZnJvbSBcIi4vc3ZnL21lbnUvcHJlc2VudGF0aW9uTW9kZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEZWNyZWFzZUZvbnRTaXplTWVudVNWRyB9IGZyb20gXCIuL3N2Zy9tZW51L2RlY3JlYXNlRm9udFNpemVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSW5jcmVhc2VGb250U2l6ZU1lbnVTVkcgfSBmcm9tIFwiLi9zdmcvbWVudS9pbmNyZWFzZUZvbnRTaXplXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE9wZW5SdWJiaXNoQmluVG9vbGJhclNWRyB9IGZyb20gXCIuL3N2Zy90b29sYmFyL29wZW5SdWJiaXNoQmluXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvcHlTZXNzaW9uS2V5VG9vbGJhclNWRyB9IGZyb20gXCIuL3N2Zy90b29sYmFyL2NvcHlTZXNzaW9uS2V5XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENsb3NlZFJ1YmJpc2hCaW5Ub29sYmFyU1ZHIH0gZnJvbSBcIi4vc3ZnL3Rvb2xiYXIvY2xvc2VkUnViYmlzaEJpblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUb2dnbGVQcmV2aWV3UGFuZU9ubHlNZW51U1ZHIH0gZnJvbSBcIi4vc3ZnL21lbnUvdG9nZ2xlUHJldmlld1BhbmVPbmx5XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRvZ2dsZVByZXZpZXdQYW5lU3BsaXRNZW51U1ZHIH0gZnJvbSBcIi4vc3ZnL21lbnUvdG9nZ2xlUHJldmlld1BhbmVTcGxpdFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBGaW5kSW5BY3RpdmVEb2N1bWVudFRvb2xiYXJTVkcgfSBmcm9tIFwiLi9zdmcvdG9vbGJhci9maW5kSW5BY3RpdmVEb2N1bWVudFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFeHBvcnRDdXN0b21HcmFtbWFyc1Rvb2xiYXJTVkcgfSBmcm9tIFwiLi9zdmcvdG9vbGJhci9leHBvcnRDdXN0b21HcmFtbWFyc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUb2dnbGVQcmV0dHlQcmludGVyT25seU1lbnVTVkcgfSBmcm9tIFwiLi9zdmcvbWVudS90b2dnbGVQcmV0dHlQcmludGVyT25seVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUb2dnbGVQcmV0dHlQcmludGVyU3BsaXRNZW51U1ZHIH0gZnJvbSBcIi4vc3ZnL21lbnUvdG9nZ2xlUHJldHR5UHJpbnRlclNwbGl0XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENyZWF0ZVByb2plY3RzRmlsZVBhdGhUb29sYmFyU1ZHIH0gZnJvbSBcIi4vc3ZnL3Rvb2xiYXIvY3JlYXRlUHJvamVjdHNGaWxlUGF0aFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBGaW5kSW5Qcm9qZWN0c0FuZFJlbGVhc2VzVG9vbGJhclNWRyB9IGZyb20gXCIuL3N2Zy90b29sYmFyL2ZpbmRJblByb2plY3RzQW5kUmVsZWFzZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUmVsb2FkUHJvamVjdHNBbmRSZWxlYXNlc1Rvb2xiYXJTVkcgfSBmcm9tIFwiLi9zdmcvdG9vbGJhci9yZWxvYWRQcm9qZWN0c0FuZFJlbGVhc2VzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFJlbmFtZVNlbGVjdGVkUHJvamVjdHNQYXRoVG9vbGJhclNWRyB9IGZyb20gXCIuL3N2Zy90b29sYmFyL3JlbmFtZVNlbGVjdGVkUHJvamVjdHNQYXRoXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENyZWF0ZVByb2plY3RzRGlyZWN0b3J5UGF0aFRvb2xiYXJTVkcgfSBmcm9tIFwiLi9zdmcvdG9vbGJhci9jcmVhdGVQcm9qZWN0c0RpcmVjdG9yeVBhdGhcIjtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7ICAvLy9cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlLmRpdmBcblxuICB3aWR0aDogMTByZW07XG4gIGJvcmRlcjogMXB4IGRhc2hlZCBibGFjaztcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBib3JkZXItcmlnaHQ6IG5vbmU7XG4gIFxuICA6bGFzdC1vZi10eXBlIHtcbiAgICBib3JkZXItcmlnaHQ6IDFweCBkYXNoZWQgYmxhY2s7XG4gIH1cblxuYDtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5cbmltcG9ydCBEaXYgZnJvbSBcIi4uL2RpdlwiO1xuXG5pbXBvcnQgeyBGbGlwTWVudVNWRyxcbiAgICAgICAgIEVtYmVkZGVkTW9kZU1lbnVTVkcsXG4gICAgICAgICBJbmNyZWFzZUZvbnRTaXplTWVudVNWRyxcbiAgICAgICAgIERlY3JlYXNlRm9udFNpemVNZW51U1ZHLFxuICAgICAgICAgUHJlc2VudGF0aW9uTW9kZU1lbnVTVkcsXG4gICAgICAgICBUb2dnbGVQcmV2aWV3UGFuZU9ubHlNZW51U1ZHLFxuICAgICAgICAgVG9nZ2xlUHJldmlld1BhbmVTcGxpdE1lbnVTVkcsXG4gICAgICAgICBUb2dnbGVQcmV0dHlQcmludGVyT25seU1lbnVTVkcsXG4gICAgICAgICBUb2dnbGVQcmV0dHlQcmludGVyU3BsaXRNZW51U1ZHIH0gZnJvbSBcIi4uLy4uLy4uL2luZGV4XCI7IC8vL1xuXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1lbnVEaXYgZXh0ZW5kcyBFbGVtZW50IHtcbiAgY2hpbGRFbGVtZW50cygpIHtcbiAgICBjb25zdCBUb29sYmFyU1ZHcyA9IFtcbiAgICAgICAgICAgIEZsaXBNZW51U1ZHLFxuICAgICAgICAgICAgRW1iZWRkZWRNb2RlTWVudVNWRyxcbiAgICAgICAgICAgIFByZXNlbnRhdGlvbk1vZGVNZW51U1ZHLFxuICAgICAgICAgICAgSW5jcmVhc2VGb250U2l6ZU1lbnVTVkcsXG4gICAgICAgICAgICBEZWNyZWFzZUZvbnRTaXplTWVudVNWRyxcbiAgICAgICAgICAgIFRvZ2dsZVByZXZpZXdQYW5lT25seU1lbnVTVkcsXG4gICAgICAgICAgICBUb2dnbGVQcmV2aWV3UGFuZVNwbGl0TWVudVNWRyxcbiAgICAgICAgICAgIFRvZ2dsZVByZXR0eVByaW50ZXJPbmx5TWVudVNWRyxcbiAgICAgICAgICAgIFRvZ2dsZVByZXR0eVByaW50ZXJTcGxpdE1lbnVTVkdcbiAgICAgICAgICBdLFxuICAgICAgICAgIGNoaWxkRWxlbWVudHMgPSBUb29sYmFyU1ZHcy5tYXAoKFRvb2xiYXJTVkcpID0+XG5cbiAgICAgICAgICAgIDxEaXY+XG4gICAgICAgICAgICAgIDxUb29sYmFyU1ZHIC8+XG4gICAgICAgICAgICA8L0Rpdj5cblxuICAgICAgICAgICk7XG5cbiAgICByZXR1cm4gY2hpbGRFbGVtZW50cztcbiAgfVxuXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJkaXZcIjtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcIm1lbnVcIlxuICB9O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcImVhc3lcIjtcblxuaW1wb3J0IERpdiBmcm9tIFwiLi4vZGl2XCI7XG5cbmltcG9ydCB7IEpvaW5TZXNzaW9uVG9vbGJhclNWRyxcbiAgICAgICAgIFN5bmNocm9uaXNlVG9vbGJhclNWRyxcbiAgICAgICAgIFNob3dSZWxlYXNlc1Rvb2xiYXJTVkcsXG4gICAgICAgICBIaWRlUmVsZWFzZXNUb29sYmFyU1ZHLFxuICAgICAgICAgTGVhdmVTZXNzaW9uVG9vbGJhclNWRyxcbiAgICAgICAgIENsZWFyQ29uc29sZVRvb2xiYXJTVkcsXG4gICAgICAgICBDcmVhdGVTZXNzaW9uVG9vbGJhclNWRyxcbiAgICAgICAgIENvcHlTZXNzaW9uS2V5VG9vbGJhclNWRyxcbiAgICAgICAgIE9wZW5SdWJiaXNoQmluVG9vbGJhclNWRyxcbiAgICAgICAgIENsb3NlZFJ1YmJpc2hCaW5Ub29sYmFyU1ZHLFxuICAgICAgICAgRmluZEluQWN0aXZlRG9jdW1lbnRUb29sYmFyU1ZHLFxuICAgICAgICAgRXhwb3J0Q3VzdG9tR3JhbW1hcnNUb29sYmFyU1ZHLFxuICAgICAgICAgQ3JlYXRlUHJvamVjdHNGaWxlUGF0aFRvb2xiYXJTVkcsXG4gICAgICAgICBGaW5kSW5Qcm9qZWN0c0FuZFJlbGVhc2VzVG9vbGJhclNWRyxcbiAgICAgICAgIFJlbG9hZFByb2plY3RzQW5kUmVsZWFzZXNUb29sYmFyU1ZHLFxuICAgICAgICAgUmVuYW1lU2VsZWN0ZWRQcm9qZWN0c1BhdGhUb29sYmFyU1ZHLFxuICAgICAgICAgQ3JlYXRlUHJvamVjdHNEaXJlY3RvcnlQYXRoVG9vbGJhclNWRyB9IGZyb20gXCIuLi8uLi8uLi9pbmRleFwiOyAvLy9cblxuY2xhc3MgVG9vbGJhckRpdiBleHRlbmRzIEVsZW1lbnQge1xuICBjaGlsZEVsZW1lbnRzKCkge1xuICAgIGNvbnN0IFRvb2xiYXJTVkdzID0gW1xuICAgICAgICAgICAgT3BlblJ1YmJpc2hCaW5Ub29sYmFyU1ZHLFxuICAgICAgICAgICAgQ2xvc2VkUnViYmlzaEJpblRvb2xiYXJTVkcsXG4gICAgICAgICAgICBTeW5jaHJvbmlzZVRvb2xiYXJTVkcsXG4gICAgICAgICAgICBSZW5hbWVTZWxlY3RlZFByb2plY3RzUGF0aFRvb2xiYXJTVkcsXG4gICAgICAgICAgICBTaG93UmVsZWFzZXNUb29sYmFyU1ZHLFxuICAgICAgICAgICAgSGlkZVJlbGVhc2VzVG9vbGJhclNWRyxcbiAgICAgICAgICAgIENyZWF0ZVByb2plY3RzRGlyZWN0b3J5UGF0aFRvb2xiYXJTVkcsXG4gICAgICAgICAgICBDcmVhdGVQcm9qZWN0c0ZpbGVQYXRoVG9vbGJhclNWRyxcbiAgICAgICAgICAgIFJlbG9hZFByb2plY3RzQW5kUmVsZWFzZXNUb29sYmFyU1ZHLFxuICAgICAgICAgICAgSm9pblNlc3Npb25Ub29sYmFyU1ZHLFxuICAgICAgICAgICAgQ3JlYXRlU2Vzc2lvblRvb2xiYXJTVkcsXG4gICAgICAgICAgICBMZWF2ZVNlc3Npb25Ub29sYmFyU1ZHLFxuICAgICAgICAgICAgQ29weVNlc3Npb25LZXlUb29sYmFyU1ZHLFxuICAgICAgICAgICAgRmluZEluQWN0aXZlRG9jdW1lbnRUb29sYmFyU1ZHLFxuICAgICAgICAgICAgRmluZEluUHJvamVjdHNBbmRSZWxlYXNlc1Rvb2xiYXJTVkcsXG4gICAgICAgICAgICBFeHBvcnRDdXN0b21HcmFtbWFyc1Rvb2xiYXJTVkcsXG4gICAgICAgICAgICBDbGVhckNvbnNvbGVUb29sYmFyU1ZHXG4gICAgICAgICAgXSxcbiAgICAgICAgICBjaGlsZEVsZW1lbnRzID0gVG9vbGJhclNWR3MubWFwKChUb29sYmFyU1ZHKSA9PlxuXG4gICAgICAgICAgICA8RGl2PlxuICAgICAgICAgICAgICA8VG9vbGJhclNWRyAvPlxuICAgICAgICAgICAgPC9EaXY+XG5cbiAgICAgICAgICApO1xuXG4gICAgcmV0dXJuIGNoaWxkRWxlbWVudHM7XG4gIH1cblxuICBzdGF0aWMgdGFnTmFtZSA9IFwiZGl2XCI7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJ0b29sYmFyXCJcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFRvb2xiYXJEaXYpYFxuXG4gIG1hcmdpbi1ib3R0b206IDJyZW07XG4gIFxuYDtcbiIsICJcInVzZSBzdHJpY3RcIlxuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcImVhc3lcIjtcblxuY2xhc3MgQ29tcHV0ZXJNb2Rlcm5EaXYgZXh0ZW5kcyBFbGVtZW50IHtcbiAgY2hpbGRFbGVtZW50cygpIHtcbiAgICByZXR1cm4gKFtcblxuICAgICAgPHAgc3R5bGU9e3tcbiAgICAgICAgZm9udEZhbWlseTogXCJDb21wdXRlciBNb2Rlcm4gU2VyaWZcIixcbiAgICAgICAgZm9udFdlaWdodDogXCJub3JtYWxcIixcbiAgICAgICAgZm9udFN0eWxlOiBcIm5vcm1hbFwiXG4gICAgICB9fT5cbiAgICAgICAgQ29tcHV0ZXIgTW9kZXJuIFNlcmlmXG4gICAgICA8L3A+LFxuXG4gICAgICA8cCBzdHlsZT17e1xuICAgICAgICBmb250RmFtaWx5OiBcIkNvbXB1dGVyIE1vZGVybiBTZXJpZlwiLFxuICAgICAgICBmb250V2VpZ2h0OiBcIm5vcm1hbFwiLFxuICAgICAgICBmb250U3R5bGU6IFwiaXRhbGljXCJcbiAgICAgIH19PlxuICAgICAgICBDb21wdXRlciBNb2Rlcm4gU2VyaWYgSXRhbGljXG4gICAgICA8L3A+LFxuXG4gICAgICA8cCBzdHlsZT17e1xuICAgICAgICBmb250RmFtaWx5OiBcIkNvbXB1dGVyIE1vZGVybiBTZXJpZlwiLFxuICAgICAgICBmb250V2VpZ2h0OiBcImJvbGRcIixcbiAgICAgICAgZm9udFN0eWxlOiBcIm5vcm1hbFwiXG4gICAgICB9fT5cbiAgICAgICAgQ29tcHV0ZXIgTW9kZXJuIFNlcmlmIEJvbGRcbiAgICAgIDwvcD4sXG5cbiAgICAgIDxwIHN0eWxlPXt7XG4gICAgICAgIGZvbnRGYW1pbHk6IFwiQ29tcHV0ZXIgTW9kZXJuIFNlcmlmXCIsXG4gICAgICAgIGZvbnRXZWlnaHQ6IFwiYm9sZFwiLFxuICAgICAgICBmb250U3R5bGU6IFwiaXRhbGljXCJcbiAgICAgIH19PlxuICAgICAgICBDb21wdXRlciBNb2Rlcm4gU2VyaWYgQm9sZCBJdGFsaWNcbiAgICAgIDwvcD4sXG5cbiAgICAgIDxici8+LFxuXG4gICAgICA8cCBzdHlsZT17e1xuICAgICAgICBmb250RmFtaWx5OiBcIkNvbXB1dGVyIE1vZGVybiBTYW5zXCIsXG4gICAgICAgIGZvbnRXZWlnaHQ6IFwibm9ybWFsXCIsXG4gICAgICAgIGZvbnRTdHlsZTogXCJub3JtYWxcIlxuICAgICAgfX0+XG4gICAgICAgIENvbXB1dGVyIE1vZGVybiBTYW5zXG4gICAgICA8L3A+LFxuXG4gICAgICA8cCBzdHlsZT17e1xuICAgICAgICBmb250RmFtaWx5OiBcIkNvbXB1dGVyIE1vZGVybiBTYW5zXCIsXG4gICAgICAgIGZvbnRXZWlnaHQ6IFwibm9ybWFsXCIsXG4gICAgICAgIGZvbnRTdHlsZTogXCJpdGFsaWNcIlxuICAgICAgfX0+XG4gICAgICAgIENvbXB1dGVyIE1vZGVybiBTYW5zIEl0YWxpY1xuICAgICAgPC9wPixcblxuICAgICAgPHAgc3R5bGU9e3tcbiAgICAgICAgZm9udEZhbWlseTogXCJDb21wdXRlciBNb2Rlcm4gU2Fuc1wiLFxuICAgICAgICBmb250V2VpZ2h0OiBcImJvbGRcIixcbiAgICAgICAgZm9udFN0eWxlOiBcIm5vcm1hbFwiXG4gICAgICB9fT5cbiAgICAgICAgQ29tcHV0ZXIgTW9kZXJuIFNhbnMgQm9sZFxuICAgICAgPC9wPixcblxuICAgICAgPHAgc3R5bGU9e3tcbiAgICAgICAgZm9udEZhbWlseTogXCJDb21wdXRlciBNb2Rlcm4gU2Fuc1wiLFxuICAgICAgICBmb250V2VpZ2h0OiBcImJvbGRcIixcbiAgICAgICAgZm9udFN0eWxlOiBcIml0YWxpY1wiXG4gICAgICB9fT5cbiAgICAgICAgQ29tcHV0ZXIgTW9kZXJuIFNhbnMgQm9sZCBJdGFsaWNcbiAgICAgIDwvcD4sXG5cbiAgICAgIDxici8+LFxuXG4gICAgICA8cCBzdHlsZT17e1xuICAgICAgICBmb250RmFtaWx5OiBcIkNvbXB1dGVyIE1vZGVybiBUeXBld3JpdGVyXCIsXG4gICAgICAgIGZvbnRXZWlnaHQ6IFwibm9ybWFsXCIsXG4gICAgICAgIGZvbnRTdHlsZTogXCJub3JtYWxcIlxuICAgICAgfX0+XG4gICAgICAgIENvbXB1dGVyIE1vZGVybiBUeXBld3JpdGVyXG4gICAgICA8L3A+LFxuXG4gICAgICA8cCBzdHlsZT17e1xuICAgICAgICBmb250RmFtaWx5OiBcIkNvbXB1dGVyIE1vZGVybiBUeXBld3JpdGVyXCIsXG4gICAgICAgIGZvbnRXZWlnaHQ6IFwibm9ybWFsXCIsXG4gICAgICAgIGZvbnRTdHlsZTogXCJpdGFsaWNcIlxuICAgICAgfX0+XG4gICAgICAgIENvbXB1dGVyIE1vZGVybiBUeXBld3JpdGVyIEl0YWxpY1xuICAgICAgPC9wPixcblxuICAgICAgPHAgc3R5bGU9e3tcbiAgICAgICAgZm9udEZhbWlseTogXCJDb21wdXRlciBNb2Rlcm4gVHlwZXdyaXRlclwiLFxuICAgICAgICBmb250V2VpZ2h0OiBcImJvbGRcIixcbiAgICAgICAgZm9udFN0eWxlOiBcIm5vcm1hbFwiXG4gICAgICB9fT5cbiAgICAgICAgQ29tcHV0ZXIgTW9kZXJuIFR5cGV3cml0ZXIgQm9sZFxuICAgICAgPC9wPixcblxuICAgICAgPHAgc3R5bGU9e3tcbiAgICAgICAgZm9udEZhbWlseTogXCJDb21wdXRlciBNb2Rlcm4gVHlwZXdyaXRlclwiLFxuICAgICAgICBmb250V2VpZ2h0OiBcImJvbGRcIixcbiAgICAgICAgZm9udFN0eWxlOiBcIml0YWxpY1wiXG4gICAgICB9fT5cbiAgICAgICAgQ29tcHV0ZXIgTW9kZXJuIFR5cGV3cml0ZXIgQm9sZCBJdGFsaWNcbiAgICAgIDwvcD4sXG5cbiAgICAgIDxici8+LFxuXG4gICAgICA8cCBzdHlsZT17e1xuICAgICAgICBmb250RmFtaWx5OiBcIkNvbXB1dGVyIE1vZGVybiBCcmlnaHRcIixcbiAgICAgICAgZm9udFdlaWdodDogXCJub3JtYWxcIixcbiAgICAgICAgZm9udFN0eWxlOiBcIm5vcm1hbFwiXG4gICAgICB9fT5cbiAgICAgICAgQ29tcHV0ZXIgTW9kZXJuIEJyaWdodFxuICAgICAgPC9wPixcblxuICAgICAgPHAgc3R5bGU9e3tcbiAgICAgICAgZm9udEZhbWlseTogXCJDb21wdXRlciBNb2Rlcm4gQnJpZ2h0XCIsXG4gICAgICAgIGZvbnRXZWlnaHQ6IFwibm9ybWFsXCIsXG4gICAgICAgIGZvbnRTdHlsZTogXCJpdGFsaWNcIlxuICAgICAgfX0+XG4gICAgICAgIENvbXB1dGVyIE1vZGVybiBCcmlnaHQgSXRhbGljXG4gICAgICA8L3A+LFxuXG4gICAgICA8cCBzdHlsZT17e1xuICAgICAgICBmb250RmFtaWx5OiBcIkNvbXB1dGVyIE1vZGVybiBCcmlnaHRcIixcbiAgICAgICAgZm9udFdlaWdodDogXCJib2xkXCIsXG4gICAgICAgIGZvbnRTdHlsZTogXCJub3JtYWxcIlxuICAgICAgfX0+XG4gICAgICAgIENvbXB1dGVyIE1vZGVybiBCcmlnaHQgQm9sZFxuICAgICAgPC9wPixcblxuICAgICAgPHAgc3R5bGU9e3tcbiAgICAgICAgZm9udEZhbWlseTogXCJDb21wdXRlciBNb2Rlcm4gQnJpZ2h0XCIsXG4gICAgICAgIGZvbnRXZWlnaHQ6IFwiYm9sZFwiLFxuICAgICAgICBmb250U3R5bGU6IFwiaXRhbGljXCJcbiAgICAgIH19PlxuICAgICAgICBDb21wdXRlciBNb2Rlcm4gQnJpZ2h0IEJvbGQgSXRhbGljXG4gICAgICA8L3A+LFxuXG4gICAgICA8YnIvPixcblxuICAgICAgPHAgc3R5bGU9e3tcbiAgICAgICAgZm9udEZhbWlseTogXCJDb21wdXRlciBNb2Rlcm4gQ29uY3JldGVcIixcbiAgICAgICAgZm9udFdlaWdodDogXCJub3JtYWxcIixcbiAgICAgICAgZm9udFN0eWxlOiBcIm5vcm1hbFwiXG4gICAgICB9fT5cbiAgICAgICAgQ29tcHV0ZXIgTW9kZXJuIENvbmNyZXRlXG4gICAgICA8L3A+LFxuXG4gICAgICA8cCBzdHlsZT17e1xuICAgICAgICBmb250RmFtaWx5OiBcIkNvbXB1dGVyIE1vZGVybiBDb25jcmV0ZVwiLFxuICAgICAgICBmb250V2VpZ2h0OiBcIm5vcm1hbFwiLFxuICAgICAgICBmb250U3R5bGU6IFwiaXRhbGljXCJcbiAgICAgIH19PlxuICAgICAgICBDb21wdXRlciBNb2Rlcm4gQ29uY3JldGUgSXRhbGljXG4gICAgICA8L3A+LFxuXG4gICAgICA8cCBzdHlsZT17e1xuICAgICAgICBmb250RmFtaWx5OiBcIkNvbXB1dGVyIE1vZGVybiBDb25jcmV0ZVwiLFxuICAgICAgICBmb250V2VpZ2h0OiBcImJvbGRcIixcbiAgICAgICAgZm9udFN0eWxlOiBcIm5vcm1hbFwiXG4gICAgICB9fT5cbiAgICAgICAgQ29tcHV0ZXIgTW9kZXJuIENvbmNyZXRlIEJvbGRcbiAgICAgIDwvcD4sXG5cbiAgICAgIDxwIHN0eWxlPXt7XG4gICAgICAgIGZvbnRGYW1pbHk6IFwiQ29tcHV0ZXIgTW9kZXJuIENvbmNyZXRlXCIsXG4gICAgICAgIGZvbnRXZWlnaHQ6IFwiYm9sZFwiLFxuICAgICAgICBmb250U3R5bGU6IFwiaXRhbGljXCJcbiAgICAgIH19PlxuICAgICAgICBDb21wdXRlciBNb2Rlcm4gQ29uY3JldGUgQm9sZCBJdGFsaWNcbiAgICAgIDwvcD5cblxuICAgIF0pO1xuICB9XG5cbiAgc3RhdGljIHRhZ05hbWUgPSBcImRpdlwiXG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJjb21wdXRlci1tb2Rlcm5cIlxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShDb21wdXRlck1vZGVybkRpdilgXG5cbiAgZm9udC1zaXplOiA0cmVtO1xuICBtYXJnaW4tYm90dG9tOiAycmVtO1xuICBcbmA7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB3aXRoU3R5bGUgZnJvbSBcImVhc3ktd2l0aC1zdHlsZVwiOyAgLy8vXG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tIFwiZWFzeVwiO1xuXG5pbXBvcnQgTWVudURpdiBmcm9tIFwiLi92aWV3L2Rpdi9tZW51XCI7XG5pbXBvcnQgVG9vbGJhckRpdiBmcm9tIFwiLi92aWV3L2Rpdi90b29sYmFyXCI7XG5pbXBvcnQgQ29tcHV0ZXJNb2Rlcm5EaXYgZnJvbSBcIi4vdmlldy9kaXYvY29tcHV0ZXJNb2Rlcm5cIjtcblxuY2xhc3MgVmlldyBleHRlbmRzIEVsZW1lbnQge1xuICBjaGlsZEVsZW1lbnRzKCkge1xuICAgIHJldHVybiAoW1xuXG4gICAgICA8TWVudURpdi8+LFxuICAgICAgPFRvb2xiYXJEaXYvPixcbiAgICAgIDxDb21wdXRlck1vZGVybkRpdi8+XG5cbiAgICBdKTtcbiAgfVxuXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJkaXZcIjtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gICAgY2xhc3NOYW1lOiBcInZpZXdcIlxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGUoVmlldylgXG5cbiAgcGFkZGluZzogMnJlbTtcbiAgXG5gO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgXCJqdXh0YXBvc2VcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7XG5cbmltcG9ydCB7IEJvZHkgfSBmcm9tIFwiZWFzeVwiO1xuaW1wb3J0IHsganVsaWFNb25vU3R5bGUsIGNvbXB1dGVyTW9kZXJuU3R5bGUgfSBmcm9tIFwiLi9pbmRleFwiOyAgLy8vXG5cbmNvbnN0IHsgcmVuZGVyU3R5bGUsIHJlbmRlclN0eWxlcyB9ID0gd2l0aFN0eWxlO1xuXG5pbXBvcnQgVmlldyBmcm9tIFwiLi9leGFtcGxlL3ZpZXdcIjtcblxuY29uc3QgYm9keSA9IG5ldyBCb2R5KCk7XG5cbnJlbmRlclN0eWxlcygpO1xuXG5yZW5kZXJTdHlsZShjb21wdXRlck1vZGVyblN0eWxlKCkpO1xuXG5yZW5kZXJTdHlsZShqdWxpYU1vbm9TdHlsZSgpKTtcblxuYm9keS5tb3VudChcblxuICA8Vmlldy8+XG5cbik7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7O0FBQUE7Ozs7Ozs7O2VBRXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxTQUFOLDJCQUFBO3VCQUNELEtBQUssTUFBSTtnQ0FERjtBQUVqQixhQUFLLE1BQU07QUFDWCxhQUFLLE9BQU87O29CQUhLLFNBQUE7O1VBTW5CLEtBQUE7aUJBQUEsa0JBQUE7QUFDRSxtQkFBTyxLQUFLOzs7O1VBR2QsS0FBQTtpQkFBQSxtQkFBQTtBQUNFLG1CQUFPLEtBQUs7Ozs7YUFYSzs7Ozs7QUNGckI7Ozs7Ozs7O2VBRXFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQU4sUUFBTSxTQUFOLDJCQUFBO3VC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Q1IsWUFBWTtrQkFDWixZQUFZO2tCQUNaLFdBQVc7O2lCQUNWO2NBSUgsc0JBQUEsY0FBQyxLQUFBO2dCQUFFLE9BQU87a0JBQ1IsWUFBWTtrQkFDWixZQUFZO2tCQUNaLFdBQVc7O2lCQUNWO2NBSUgsc0JBQUEsY0FBQyxNQUFBO2NBRUQsc0JBQUEsY0FBQyxLQUFBO2dCQUFFLE9BQU87a0JBQ1IsWUFBWTtrQkFDWixZQUFZO2tCQUNaLFdBQVc7O2lCQUNWO2NBSUgsc0JBQUEsY0FBQyxLQUFBO2dCQUFFLE9BQU87a0JBQ1IsWUFBWTtrQkFDWixZQUFZO2tCQUNaLFdBQVc7O2lCQUNWO2NBSUgsc0JBQUEsY0FBQyxLQUFBO2dCQUFFLE9BQU87a0JBQ1IsWUFBWTtrQkFDWixZQUFZO2tCQUNaLFdBQVc7O2lCQUNWO2NBSUgsc0JBQUEsY0FBQyxLQUFBO2dCQUFFLE9BQU87a0JBQ1IsWUFBWTtrQkFDWixZQUFZO2tCQUNaLFdBQVc7O2lCQUNWO2NBSUgsc0JBQUEsY0FBQyxNQUFBO2NBRUQsc0JBQUEsY0FBQyxLQUFBO2dCQUFFLE9BQU87a0JBQ1IsWUFBWTtrQkFDWixZQUFZO2tCQUNaLFdBQVc7O2lCQUNWO2NBSUgsc0JBQUEsY0FBQyxLQUFBO2dCQUFFLE9BQU87a0JBQ1IsWUFBWTtrQkFDWixZQUFZO2tCQUNaLFdBQVc7O2lCQUNWO2NBSUgsc0JBQUEsY0FBQyxLQUFBO2dCQUFFLE9BQU87a0JBQ1IsWUFBWTtrQkFDWixZQUFZO2tCQUNaLFdBQVc7O2lCQUNWO2NBSUgsc0JBQUEsY0FBQyxLQUFBO2dCQUFFLE9BQU87a0JBQ1IsWUFBWTtrQkFDWixZQUFZO2tCQUNaLFdBQVc7O2lCQUNWO2NBSUgsc0JBQUEsY0FBQyxNQUFBO2NBRUQsc0JBQUEsY0FBQyxLQUFBO2dCQUFFLE9BQU87a0JBQ1IsWUFBWTtrQkFDWixZQUFZO2tCQUNaLFdBQVc7O2lCQUNWO2NBSUgsc0JBQUEsY0FBQyxLQUFBO2dCQUFFLE9BQU87a0JBQ1IsWUFBWTtrQkFDWixZQUFZO2tCQUNaLFdBQVc7O2lCQUNWO2NBSUgsc0JBQUEsY0FBQyxLQUFBO2dCQUFFLE9BQU87a0JBQ1IsWUFBWTtrQkFDWixZQUFZO2tCQUNaLFdBQVc7O2lCQUNWO2NBSUgsc0JBQUEsY0FBQyxLQUFBO2dCQUFFLE9BQU87a0JBQ1IsWUFBWTtrQkFDWixZQUFZO2tCQUNaLFdBQVc7O2lCQUNWO2NBSUgsc0JBQUEsY0FBQyxNQUFBO2NBRUQsc0JBQUEsY0FBQyxLQUFBO2dCQUFFLE9BQU87a0JBQ1IsWUFBWTtrQkFDWixZQUFZO2tCQUNaLFdBQVc7O2lCQUNWO2NBSUgsc0JBQUEsY0FBQyxLQUFBO2dCQUFFLE9BQU87a0JBQ1IsWUFBWTtrQkFDWixZQUFZO2tCQUNaLFdBQVc7O2lCQUNWO2NBSUgsc0JBQUEsY0FBQyxLQUFBO2dCQUFFLE9BQU87a0JBQ1IsWUFBWTtrQkFDWixZQUFZO2tCQUNaLFdBQVc7O2lCQUNWO2NBSUgsc0JBQUEsY0FBQyxLQUFBO2dCQUFFLE9BQU87a0JBQ1IsWUFBWTtrQkFDWixZQUFZO2tCQUNaLFdBQVc7O2lCQUNWOzs7OzthQXhLSDt5QkFBMEIsTUFBQTtBQStLOUIscUJBL0tJLG1CQStLRyxXQUFVO0FBRWpCLHFCQWpMSSxtQkFpTEcscUJBQW9CO01BQ3pCLFdBQVc7O1FBSWYsV0FBZSxJQUFBLGVBQUEsU0FBVSxtQkFBQTs7OztBQzVMekI7Ozs7O21DQTRCQSxXQUFBOzs7ZUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWxCQSxRQUFNLE9BQU4seUJBQUEsU0FBQTtnQkFBTSxPQUFBO2lDQUFBO3VCQUFBO2dDQUFBOzs7b0JBQUEsT0FBQTs7VUFDSixLQUFBO2lCQUFBLHlCQUFBO0FBQ0UsbUJBQVE7Y0FFTixzQkFBQSxjQUFDLE1BQUEsU0FBTztjQUNSLHNCQUFBLGNBQUMsU0FBQSxTQUFVO2NBQ1gsc0JBQUEsY0FBQyxnQkFBQSxTQUFpQjs7Ozs7YUFObEI7eUJBQWEsTUFBQTtBQVdqQixxQkFYSSxNQVdHLFdBQVU7QUFFakIscUJBYkksTUFhRyxxQkFBb0I7TUFDekIsV0FBVzs7UUFJZixXQUFlLElBQUEsZUFBQSxTQUFVLE1BQUE7Ozs7QUM1QnpCOzs7Ozs7Ozs7Ozs7Ozs7QUFTQSxRQUFRLGNBQThCLGVBQUEsUUFBOUI7QUFBUixRQUFxQixlQUFpQixlQUFBLFFBQWpCO0FBSXJCLFFBQU0sT0FBTyxJQUFJLE1BQUE7QUFFakI7QUFFQSxnQkFBWSxJQUFBLE9BQUE7QUFFWixnQkFBWSxJQUFBLE9BQUE7QUFFWixTQUFLLE1BRUgsc0JBQUEsY0FBQyxNQUFBLFNBQUk7OyIsCiAgIm5hbWVzIjogW10KfQo=