@adstore/templates 2.0.13 → 2.0.14
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/CHANGELOG.md +6 -0
- package/dist/style.css +35 -31
- package/dist/templates.es.js +46 -41
- package/dist/templates.umd.js +46 -41
- package/package.json +1 -1
package/dist/templates.es.js
CHANGED
@@ -365,30 +365,30 @@ options.diffed = function(n) {
|
|
365
365
|
var t2 = n.props, e2 = n.__e;
|
366
366
|
null != e2 && "textarea" === n.type && "value" in t2 && t2.value !== e2.value && (e2.value = null == t2.value ? "" : t2.value);
|
367
367
|
};
|
368
|
-
const root$i = "
|
369
|
-
const icon$1 = "
|
370
|
-
const iconTarget$1 = "
|
371
|
-
const body$6 = "
|
372
|
-
const bodyOpen$1 = "
|
373
|
-
const simpleGift_in = "
|
374
|
-
const close$1 = "
|
375
|
-
const arrow$1 = "
|
376
|
-
const container$2 = "
|
377
|
-
const inner$1 = "
|
378
|
-
const logo$6 = "
|
379
|
-
const text$4 = "
|
380
|
-
const button$6 = "
|
381
|
-
const buttonAnimated = "
|
382
|
-
const increase$1 = "
|
383
|
-
const
|
384
|
-
const
|
385
|
-
const
|
386
|
-
const legalText$1 = "
|
387
|
-
const legalButton$1 = "
|
388
|
-
const fadein$1 = "
|
389
|
-
const pulse$1 = "
|
390
|
-
const gradient$1 = "
|
391
|
-
const wiggle$1 = "
|
368
|
+
const root$i = "_root_f4p14_1";
|
369
|
+
const icon$1 = "_icon_f4p14_5";
|
370
|
+
const iconTarget$1 = "_iconTarget_f4p14_17";
|
371
|
+
const body$6 = "_body_f4p14_22";
|
372
|
+
const bodyOpen$1 = "_bodyOpen_f4p14_30";
|
373
|
+
const simpleGift_in = "_simpleGift_in_f4p14_1";
|
374
|
+
const close$1 = "_close_f4p14_43";
|
375
|
+
const arrow$1 = "_arrow_f4p14_57";
|
376
|
+
const container$2 = "_container_f4p14_67";
|
377
|
+
const inner$1 = "_inner_f4p14_73";
|
378
|
+
const logo$6 = "_logo_f4p14_80";
|
379
|
+
const text$4 = "_text_f4p14_87";
|
380
|
+
const button$6 = "_button_f4p14_102";
|
381
|
+
const buttonAnimated = "_buttonAnimated_f4p14_111";
|
382
|
+
const increase$1 = "_increase_f4p14_1";
|
383
|
+
const legalGap = "_legalGap_f4p14_115";
|
384
|
+
const legalOpen$1 = "_legalOpen_f4p14_119";
|
385
|
+
const legal$5 = "_legal_f4p14_115";
|
386
|
+
const legalText$1 = "_legalText_f4p14_147";
|
387
|
+
const legalButton$1 = "_legalButton_f4p14_163";
|
388
|
+
const fadein$1 = "_fadein_f4p14_1";
|
389
|
+
const pulse$1 = "_pulse_f4p14_1";
|
390
|
+
const gradient$1 = "_gradient_f4p14_1";
|
391
|
+
const wiggle$1 = "_wiggle_f4p14_1";
|
392
392
|
const styles$d = {
|
393
393
|
root: root$i,
|
394
394
|
icon: icon$1,
|
@@ -405,9 +405,9 @@ const styles$d = {
|
|
405
405
|
button: button$6,
|
406
406
|
buttonAnimated,
|
407
407
|
increase: increase$1,
|
408
|
-
|
409
|
-
legal: legal$5,
|
408
|
+
legalGap,
|
410
409
|
legalOpen: legalOpen$1,
|
410
|
+
legal: legal$5,
|
411
411
|
legalText: legalText$1,
|
412
412
|
legalButton: legalButton$1,
|
413
413
|
fadein: fadein$1,
|
@@ -1730,6 +1730,9 @@ const SimpleGift = () => {
|
|
1730
1730
|
targetRef: rootRef
|
1731
1731
|
});
|
1732
1732
|
const deviceState = useGetRules(state, device);
|
1733
|
+
if (device === "mobile") {
|
1734
|
+
set(deviceState, "container.left", -215);
|
1735
|
+
}
|
1733
1736
|
const rules = useParseRules(deviceState);
|
1734
1737
|
const onClick = useMetrics(deviceState);
|
1735
1738
|
const {
|
@@ -1800,20 +1803,19 @@ const SimpleGift = () => {
|
|
1800
1803
|
children: (_d = rules.button) == null ? void 0 : _d.children
|
1801
1804
|
})]
|
1802
1805
|
}), o("div", {
|
1803
|
-
className: styles$d.
|
1804
|
-
|
1805
|
-
|
1806
|
-
|
1807
|
-
|
1808
|
-
|
1809
|
-
|
1810
|
-
|
1811
|
-
|
1812
|
-
|
1813
|
-
|
1814
|
-
|
1815
|
-
|
1816
|
-
})
|
1806
|
+
className: styles$d.legalGap
|
1807
|
+
}), o("div", {
|
1808
|
+
className: styles$d.legal,
|
1809
|
+
style: rules.legal,
|
1810
|
+
children: o("span", {
|
1811
|
+
className: styles$d.legalText,
|
1812
|
+
children: [o("span", {
|
1813
|
+
children: (_e = rules == null ? void 0 : rules.legal) == null ? void 0 : _e.children
|
1814
|
+
}), o("span", {
|
1815
|
+
className: styles$d.legalButton,
|
1816
|
+
onClick: toggleLegalIsOpen,
|
1817
|
+
children: legalIsOpen ? (_f = rules == null ? void 0 : rules.legal) == null ? void 0 : _f.buttonOpenText : (_g = rules == null ? void 0 : rules.legal) == null ? void 0 : _g.buttonHideText
|
1818
|
+
})]
|
1817
1819
|
})
|
1818
1820
|
})]
|
1819
1821
|
})]
|
@@ -1948,6 +1950,9 @@ const ComplexGift = () => {
|
|
1948
1950
|
targetRef: rootRef
|
1949
1951
|
});
|
1950
1952
|
const deviceState = useGetRules(state, device);
|
1953
|
+
if (device === "mobile") {
|
1954
|
+
set(deviceState, "container.left", -215);
|
1955
|
+
}
|
1951
1956
|
const rules = useParseRules(deviceState);
|
1952
1957
|
useExtractFonts(deviceState);
|
1953
1958
|
const {
|
@@ -2876,4 +2881,4 @@ export {
|
|
2876
2881
|
index as WideCard,
|
2877
2882
|
modifyState
|
2878
2883
|
};
|
2879
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVzLmVzLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3QvaG9va3MvZGlzdC9ob29rcy5tb2R1bGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9kaXN0L2NvbXBhdC5tb2R1bGUuanMiLCIuLi9zcmMvaG9va3MvdXNlR2lmdE9wZW4udHMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2pzeC1ydW50aW1lL2Rpc3QvanN4UnVudGltZS5tb2R1bGUuanMiLCIuLi9zcmMvU3RhdGVDb250ZXh0LnRzeCIsIi4uL3NyYy9oZWxwZXJzL3JlbmRlci50c3giLCIuLi9zcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlLnRzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlQ2xlYXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2VxLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzb2NJbmRleE9mLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlRGVsZXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlR2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlU2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTGlzdENhY2hlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tDbGVhci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrRGVsZXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tHZXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0hhcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZyZWVHbG9iYWwuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19yb290LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3ltYm9sLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UmF3VGFnLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb2JqZWN0VG9TdHJpbmcuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNGdW5jdGlvbi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcmVKc0RhdGEuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc01hc2tlZC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3RvU291cmNlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmF0aXZlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VmFsdWUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXROYXRpdmUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXAuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVDcmVhdGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoQ2xlYXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoRGVsZXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEdldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hIYXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoU2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fSGFzaC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlQ2xlYXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleWFibGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRNYXBEYXRhLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVEZWxldGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUdldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlSGFzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVTZXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXBDYWNoZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrU2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3RhY2suanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19kZWZpbmVQcm9wZXJ0eS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBc3NpZ25WYWx1ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc2lnbk1lcmdlVmFsdWUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVCYXNlRm9yLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZvci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lQnVmZmVyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fVWludDhBcnJheS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lQXJyYXlCdWZmZXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZVR5cGVkQXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5QXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQ3JlYXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlckFyZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFByb3RvdHlwZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzUHJvdG90eXBlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lT2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdExpa2UuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNBcmd1bWVudHMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJndW1lbnRzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0xlbmd0aC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2UuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXlMaWtlT2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViRmFsc2UuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQnVmZmVyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1BsYWluT2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzVHlwZWRBcnJheS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbmFyeS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25vZGVVdGlsLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1R5cGVkQXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zYWZlR2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzaWduVmFsdWUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5T2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRpbWVzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TGlrZUtleXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzSW4uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5c0luLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlzSW4uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL3RvUGxhaW5PYmplY3QuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlTWVyZ2VEZWVwLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZU1lcmdlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pZGVudGl0eS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FwcGx5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlclJlc3QuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2NvbnN0YW50LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldFRvU3RyaW5nLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2hvcnRPdXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRUb1N0cmluZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VSZXN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJdGVyYXRlZUNhbGwuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVBc3NpZ25lci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbWVyZ2UuanMiLCIuLi8uLi91dGlscy9kb20udHMiLCIuLi8uLi91dGlscy9pdGVyYXRvci50cyIsIi4uLy4uL3V0aWxzL2luZGV4LnRzIiwiLi4vc3JjL2hlbHBlcnMvZ2V0RGV2aWNlU3RhdGUudHMiLCIuLi9zcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUudHMiLCIuLi9zcmMvaG9va3MvdXNlQ29udGFpbmVyRGV2aWNlLnRzIiwiLi4vc3JjL2hlbHBlcnMvcGFyc2VSdWxlcy50cyIsIi4uL3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQudHN4IiwiLi4vc3JjL2hvb2tzL3VzZVRvZ2dsZS50cyIsIi4uL3NyYy9jb21wb25lbnRzL0Nsb3NlSWNvbi50c3giLCIuLi9zcmMvY29tcG9uZW50cy9HaWZ0SWNvbi50c3giLCIuLi9zcmMvaG9va3MvcHJvbW9zL3VzZUdpZnRSdWxlcy50cyIsIi4uL3NyYy9oZWxwZXJzL2NvbnN0YW50cy50cyIsIi4uL3NyYy9ob29rcy91c2VNZXRyaWNzLnRzIiwiLi4vc3JjL2hvb2tzL3VzZUV4dHJhY3RGb250cy50cyIsIi4uL3NyYy9wcm9tb3MvU2ltcGxlR2lmdC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0NvbXBsZXhHaWZ0L2NvbXBvbmVudHMvQm9udXNDYXJkL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvQ29tcGxleEdpZnQvaW5kZXgudHN4IiwiLi4vc3JjL2hlbHBlcnMvc3dpdGNoVGV4dEFsaWduVG9GbGV4LnRzIiwiLi4vc3JjL3Byb21vcy9TaW1wbGVQb3B1cC9jb21wb25lbnRzL2xpbmUvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9TaW1wbGVQb3B1cC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0NvbXBsZXhQb3B1cC9jb21wb25lbnRzL0JvbnVzL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvQ29tcGxleFBvcHVwL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvRXhwcmVzc1BvcHVwL2NvbXBvbmVudHMvTWF0Y2gvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9FeHByZXNzUG9wdXAvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9Cb251c0NhcmQvY29tcG9uZW50cy9Cb251cy9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0JvbnVzQ2FyZC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL1dpZGVDYXJkL2NvbXBvbmVudHMvVGV4dC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL1dpZGVDYXJkL2NvbXBvbmVudHMvTWF0Y2hlcy9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL1dpZGVDYXJkL2NvbXBvbmVudHMvTWF0Y2hlc09uZVR3by9pbmRleC50c3giLCIuLi9zcmMvaG9va3MvdXNlQW5pbWF0ZWRMaXN0LnRzIiwiLi4vc3JjL3Byb21vcy9XaWRlQ2FyZC9pbmRleC50c3giLCIuLi9zcmMvaGVscGVycy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcblx0Q29weXJpZ2h0IChjKSAyMDE4IEplZCBXYXRzb24uXG5cdExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXG5cdGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlvL2NsYXNzbmFtZXNcbiovXG4vKiBnbG9iYWwgZGVmaW5lICovXG5cbihmdW5jdGlvbiAoKSB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgaGFzT3duID0ge30uaGFzT3duUHJvcGVydHk7XG5cdHZhciBuYXRpdmVDb2RlU3RyaW5nID0gJ1tuYXRpdmUgY29kZV0nO1xuXG5cdGZ1bmN0aW9uIGNsYXNzTmFtZXMoKSB7XG5cdFx0dmFyIGNsYXNzZXMgPSBbXTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKCFhcmcpIGNvbnRpbnVlO1xuXG5cdFx0XHR2YXIgYXJnVHlwZSA9IHR5cGVvZiBhcmc7XG5cblx0XHRcdGlmIChhcmdUeXBlID09PSAnc3RyaW5nJyB8fCBhcmdUeXBlID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRjbGFzc2VzLnB1c2goYXJnKTtcblx0XHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG5cdFx0XHRcdGlmIChhcmcubGVuZ3RoKSB7XG5cdFx0XHRcdFx0dmFyIGlubmVyID0gY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpO1xuXHRcdFx0XHRcdGlmIChpbm5lcikge1xuXHRcdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGlubmVyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoYXJnVHlwZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0aWYgKGFyZy50b1N0cmluZyAhPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAmJiAhYXJnLnRvU3RyaW5nLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1tuYXRpdmUgY29kZV0nKSkge1xuXHRcdFx0XHRcdGNsYXNzZXMucHVzaChhcmcudG9TdHJpbmcoKSk7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKHZhciBrZXkgaW4gYXJnKSB7XG5cdFx0XHRcdFx0aWYgKGhhc093bi5jYWxsKGFyZywga2V5KSAmJiBhcmdba2V5XSkge1xuXHRcdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGtleSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0Y2xhc3NOYW1lcy5kZWZhdWx0ID0gY2xhc3NOYW1lcztcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLmFtZCA9PT0gJ29iamVjdCcgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIHJlZ2lzdGVyIGFzICdjbGFzc25hbWVzJywgY29uc2lzdGVudCB3aXRoIG5wbSBwYWNrYWdlIG5hbWVcblx0XHRkZWZpbmUoJ2NsYXNzbmFtZXMnLCBbXSwgZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGNsYXNzTmFtZXM7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0d2luZG93LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzO1xuXHR9XG59KCkpO1xuIiwiaW1wb3J0e29wdGlvbnMgYXMgbn1mcm9tXCJwcmVhY3RcIjt2YXIgdCxyLHUsaSxvPTAsZj1bXSxjPVtdLGU9bi5fX2IsYT1uLl9fcix2PW4uZGlmZmVkLGw9bi5fX2MsbT1uLnVubW91bnQ7ZnVuY3Rpb24gZCh0LHUpe24uX19oJiZuLl9faChyLHQsb3x8dSksbz0wO3ZhciBpPXIuX19IfHwoci5fX0g9e19fOltdLF9faDpbXX0pO3JldHVybiB0Pj1pLl9fLmxlbmd0aCYmaS5fXy5wdXNoKHtfX1Y6Y30pLGkuX19bdF19ZnVuY3Rpb24gaChuKXtyZXR1cm4gbz0xLHMoQixuKX1mdW5jdGlvbiBzKG4sdSxpKXt2YXIgbz1kKHQrKywyKTtpZihvLnQ9biwhby5fX2MmJihvLl9fPVtpP2kodSk6Qih2b2lkIDAsdSksZnVuY3Rpb24obil7dmFyIHQ9by5fX04/by5fX05bMF06by5fX1swXSxyPW8udCh0LG4pO3QhPT1yJiYoby5fX049W3Isby5fX1sxXV0sby5fX2Muc2V0U3RhdGUoe30pKX1dLG8uX19jPXIsIXIudSkpe3ZhciBmPWZ1bmN0aW9uKG4sdCxyKXtpZighby5fX2MuX19IKXJldHVybiEwO3ZhciB1PW8uX19jLl9fSC5fXy5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIG4uX19jfSk7aWYodS5ldmVyeShmdW5jdGlvbihuKXtyZXR1cm4hbi5fX059KSlyZXR1cm4hY3x8Yy5jYWxsKHRoaXMsbix0LHIpO3ZhciBpPSExO3JldHVybiB1LmZvckVhY2goZnVuY3Rpb24obil7aWYobi5fX04pe3ZhciB0PW4uX19bMF07bi5fXz1uLl9fTixuLl9fTj12b2lkIDAsdCE9PW4uX19bMF0mJihpPSEwKX19KSwhKCFpJiZvLl9fYy5wcm9wcz09PW4pJiYoIWN8fGMuY2FsbCh0aGlzLG4sdCxyKSl9O3IudT0hMDt2YXIgYz1yLnNob3VsZENvbXBvbmVudFVwZGF0ZSxlPXIuY29tcG9uZW50V2lsbFVwZGF0ZTtyLmNvbXBvbmVudFdpbGxVcGRhdGU9ZnVuY3Rpb24obix0LHIpe2lmKHRoaXMuX19lKXt2YXIgdT1jO2M9dm9pZCAwLGYobix0LHIpLGM9dX1lJiZlLmNhbGwodGhpcyxuLHQscil9LHIuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ9cmV0dXJuIG8uX19OfHxvLl9ffWZ1bmN0aW9uIHAodSxpKXt2YXIgbz1kKHQrKywzKTshbi5fX3MmJnooby5fX0gsaSkmJihvLl9fPXUsby5pPWksci5fX0guX19oLnB1c2gobykpfWZ1bmN0aW9uIHkodSxpKXt2YXIgbz1kKHQrKyw0KTshbi5fX3MmJnooby5fX0gsaSkmJihvLl9fPXUsby5pPWksci5fX2gucHVzaChvKSl9ZnVuY3Rpb24gXyhuKXtyZXR1cm4gbz01LEYoZnVuY3Rpb24oKXtyZXR1cm57Y3VycmVudDpufX0sW10pfWZ1bmN0aW9uIEEobix0LHIpe289Nix5KGZ1bmN0aW9uKCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2Ygbj8obih0KCkpLGZ1bmN0aW9uKCl7cmV0dXJuIG4obnVsbCl9KTpuPyhuLmN1cnJlbnQ9dCgpLGZ1bmN0aW9uKCl7cmV0dXJuIG4uY3VycmVudD1udWxsfSk6dm9pZCAwfSxudWxsPT1yP3I6ci5jb25jYXQobikpfWZ1bmN0aW9uIEYobixyKXt2YXIgdT1kKHQrKyw3KTtyZXR1cm4geih1Ll9fSCxyKT8odS5fX1Y9bigpLHUuaT1yLHUuX19oPW4sdS5fX1YpOnUuX199ZnVuY3Rpb24gVChuLHQpe3JldHVybiBvPTgsRihmdW5jdGlvbigpe3JldHVybiBufSx0KX1mdW5jdGlvbiBxKG4pe3ZhciB1PXIuY29udGV4dFtuLl9fY10saT1kKHQrKyw5KTtyZXR1cm4gaS5jPW4sdT8obnVsbD09aS5fXyYmKGkuX189ITAsdS5zdWIocikpLHUucHJvcHMudmFsdWUpOm4uX199ZnVuY3Rpb24geCh0LHIpe24udXNlRGVidWdWYWx1ZSYmbi51c2VEZWJ1Z1ZhbHVlKHI/cih0KTp0KX1mdW5jdGlvbiBQKG4pe3ZhciB1PWQodCsrLDEwKSxpPWgoKTtyZXR1cm4gdS5fXz1uLHIuY29tcG9uZW50RGlkQ2F0Y2h8fChyLmNvbXBvbmVudERpZENhdGNoPWZ1bmN0aW9uKG4sdCl7dS5fXyYmdS5fXyhuLHQpLGlbMV0obil9KSxbaVswXSxmdW5jdGlvbigpe2lbMV0odm9pZCAwKX1dfWZ1bmN0aW9uIFYoKXt2YXIgbj1kKHQrKywxMSk7aWYoIW4uX18pe2Zvcih2YXIgdT1yLl9fdjtudWxsIT09dSYmIXUuX19tJiZudWxsIT09dS5fXzspdT11Ll9fO3ZhciBpPXUuX19tfHwodS5fX209WzAsMF0pO24uX189XCJQXCIraVswXStcIi1cIitpWzFdKyt9cmV0dXJuIG4uX199ZnVuY3Rpb24gYigpe2Zvcih2YXIgdDt0PWYuc2hpZnQoKTspaWYodC5fX1AmJnQuX19IKXRyeXt0Ll9fSC5fX2guZm9yRWFjaChrKSx0Ll9fSC5fX2guZm9yRWFjaCh3KSx0Ll9fSC5fX2g9W119Y2F0Y2gocil7dC5fX0guX19oPVtdLG4uX19lKHIsdC5fX3YpfX1uLl9fYj1mdW5jdGlvbihuKXtyPW51bGwsZSYmZShuKX0sbi5fX3I9ZnVuY3Rpb24obil7YSYmYShuKSx0PTA7dmFyIGk9KHI9bi5fX2MpLl9fSDtpJiYodT09PXI/KGkuX19oPVtdLHIuX19oPVtdLGkuX18uZm9yRWFjaChmdW5jdGlvbihuKXtuLl9fTiYmKG4uX189bi5fX04pLG4uX19WPWMsbi5fX049bi5pPXZvaWQgMH0pKTooaS5fX2guZm9yRWFjaChrKSxpLl9faC5mb3JFYWNoKHcpLGkuX19oPVtdKSksdT1yfSxuLmRpZmZlZD1mdW5jdGlvbih0KXt2JiZ2KHQpO3ZhciBvPXQuX19jO28mJm8uX19IJiYoby5fX0guX19oLmxlbmd0aCYmKDEhPT1mLnB1c2gobykmJmk9PT1uLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8KChpPW4ucmVxdWVzdEFuaW1hdGlvbkZyYW1lKXx8aikoYikpLG8uX19ILl9fLmZvckVhY2goZnVuY3Rpb24obil7bi5pJiYobi5fX0g9bi5pKSxuLl9fViE9PWMmJihuLl9fPW4uX19WKSxuLmk9dm9pZCAwLG4uX19WPWN9KSksdT1yPW51bGx9LG4uX19jPWZ1bmN0aW9uKHQscil7ci5zb21lKGZ1bmN0aW9uKHQpe3RyeXt0Ll9faC5mb3JFYWNoKGspLHQuX19oPXQuX19oLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4hbi5fX3x8dyhuKX0pfWNhdGNoKHUpe3Iuc29tZShmdW5jdGlvbihuKXtuLl9faCYmKG4uX19oPVtdKX0pLHI9W10sbi5fX2UodSx0Ll9fdil9fSksbCYmbCh0LHIpfSxuLnVubW91bnQ9ZnVuY3Rpb24odCl7bSYmbSh0KTt2YXIgcix1PXQuX19jO3UmJnUuX19IJiYodS5fX0guX18uZm9yRWFjaChmdW5jdGlvbihuKXt0cnl7ayhuKX1jYXRjaChuKXtyPW59fSksdS5fX0g9dm9pZCAwLHImJm4uX19lKHIsdS5fX3YpKX07dmFyIGc9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lO2Z1bmN0aW9uIGoobil7dmFyIHQscj1mdW5jdGlvbigpe2NsZWFyVGltZW91dCh1KSxnJiZjYW5jZWxBbmltYXRpb25GcmFtZSh0KSxzZXRUaW1lb3V0KG4pfSx1PXNldFRpbWVvdXQociwxMDApO2cmJih0PXJlcXVlc3RBbmltYXRpb25GcmFtZShyKSl9ZnVuY3Rpb24gayhuKXt2YXIgdD1yLHU9bi5fX2M7XCJmdW5jdGlvblwiPT10eXBlb2YgdSYmKG4uX19jPXZvaWQgMCx1KCkpLHI9dH1mdW5jdGlvbiB3KG4pe3ZhciB0PXI7bi5fX2M9bi5fXygpLHI9dH1mdW5jdGlvbiB6KG4sdCl7cmV0dXJuIW58fG4ubGVuZ3RoIT09dC5sZW5ndGh8fHQuc29tZShmdW5jdGlvbih0LHIpe3JldHVybiB0IT09bltyXX0pfWZ1bmN0aW9uIEIobix0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Qobik6dH1leHBvcnR7VCBhcyB1c2VDYWxsYmFjayxxIGFzIHVzZUNvbnRleHQseCBhcyB1c2VEZWJ1Z1ZhbHVlLHAgYXMgdXNlRWZmZWN0LFAgYXMgdXNlRXJyb3JCb3VuZGFyeSxWIGFzIHVzZUlkLEEgYXMgdXNlSW1wZXJhdGl2ZUhhbmRsZSx5IGFzIHVzZUxheW91dEVmZmVjdCxGIGFzIHVzZU1lbW8scyBhcyB1c2VSZWR1Y2VyLF8gYXMgdXNlUmVmLGggYXMgdXNlU3RhdGV9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aG9va3MubW9kdWxlLmpzLm1hcFxuIiwiaW1wb3J0e0NvbXBvbmVudCBhcyBuLGNyZWF0ZUVsZW1lbnQgYXMgdCxvcHRpb25zIGFzIGUsdG9DaGlsZEFycmF5IGFzIHIsRnJhZ21lbnQgYXMgdSxyZW5kZXIgYXMgbyxoeWRyYXRlIGFzIGksY3JlYXRlQ29udGV4dCBhcyBsLGNyZWF0ZVJlZiBhcyBjLGNsb25lRWxlbWVudCBhcyBmfWZyb21cInByZWFjdFwiO2V4cG9ydHtDb21wb25lbnQsRnJhZ21lbnQsY3JlYXRlQ29udGV4dCxjcmVhdGVFbGVtZW50LGNyZWF0ZVJlZn1mcm9tXCJwcmVhY3RcIjtpbXBvcnR7dXNlU3RhdGUgYXMgYSx1c2VJZCBhcyBzLHVzZVJlZHVjZXIgYXMgaCx1c2VFZmZlY3QgYXMgdix1c2VMYXlvdXRFZmZlY3QgYXMgZCx1c2VSZWYgYXMgcCx1c2VJbXBlcmF0aXZlSGFuZGxlIGFzIG0sdXNlTWVtbyBhcyB5LHVzZUNhbGxiYWNrIGFzIF8sdXNlQ29udGV4dCBhcyBiLHVzZURlYnVnVmFsdWUgYXMgU31mcm9tXCJwcmVhY3QvaG9va3NcIjtleHBvcnQqZnJvbVwicHJlYWN0L2hvb2tzXCI7ZnVuY3Rpb24gZyhuLHQpe2Zvcih2YXIgZSBpbiB0KW5bZV09dFtlXTtyZXR1cm4gbn1mdW5jdGlvbiBDKG4sdCl7Zm9yKHZhciBlIGluIG4paWYoXCJfX3NvdXJjZVwiIT09ZSYmIShlIGluIHQpKXJldHVybiEwO2Zvcih2YXIgciBpbiB0KWlmKFwiX19zb3VyY2VcIiE9PXImJm5bcl0hPT10W3JdKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEUobix0KXtyZXR1cm4gbj09PXQmJigwIT09bnx8MS9uPT0xL3QpfHxuIT1uJiZ0IT10fWZ1bmN0aW9uIHcobil7dGhpcy5wcm9wcz1ufWZ1bmN0aW9uIHgobixlKXtmdW5jdGlvbiByKG4pe3ZhciB0PXRoaXMucHJvcHMucmVmLHI9dD09bi5yZWY7cmV0dXJuIXImJnQmJih0LmNhbGw/dChudWxsKTp0LmN1cnJlbnQ9bnVsbCksZT8hZSh0aGlzLnByb3BzLG4pfHwhcjpDKHRoaXMucHJvcHMsbil9ZnVuY3Rpb24gdShlKXtyZXR1cm4gdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGU9cix0KG4sZSl9cmV0dXJuIHUuZGlzcGxheU5hbWU9XCJNZW1vKFwiKyhuLmRpc3BsYXlOYW1lfHxuLm5hbWUpK1wiKVwiLHUucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsdS5fX2Y9ITAsdX0ody5wcm90b3R5cGU9bmV3IG4pLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwLHcucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBDKHRoaXMucHJvcHMsbil8fEModGhpcy5zdGF0ZSx0KX07dmFyIFI9ZS5fX2I7ZS5fX2I9ZnVuY3Rpb24obil7bi50eXBlJiZuLnR5cGUuX19mJiZuLnJlZiYmKG4ucHJvcHMucmVmPW4ucmVmLG4ucmVmPW51bGwpLFImJlIobil9O3ZhciBOPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKXx8MzkxMTtmdW5jdGlvbiBrKG4pe2Z1bmN0aW9uIHQodCl7dmFyIGU9Zyh7fSx0KTtyZXR1cm4gZGVsZXRlIGUucmVmLG4oZSx0LnJlZnx8bnVsbCl9cmV0dXJuIHQuJCR0eXBlb2Y9Tix0LnJlbmRlcj10LHQucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9dC5fX2Y9ITAsdC5kaXNwbGF5TmFtZT1cIkZvcndhcmRSZWYoXCIrKG4uZGlzcGxheU5hbWV8fG4ubmFtZSkrXCIpXCIsdH12YXIgQT1mdW5jdGlvbihuLHQpe3JldHVybiBudWxsPT1uP251bGw6cihyKG4pLm1hcCh0KSl9LE89e21hcDpBLGZvckVhY2g6QSxjb3VudDpmdW5jdGlvbihuKXtyZXR1cm4gbj9yKG4pLmxlbmd0aDowfSxvbmx5OmZ1bmN0aW9uKG4pe3ZhciB0PXIobik7aWYoMSE9PXQubGVuZ3RoKXRocm93XCJDaGlsZHJlbi5vbmx5XCI7cmV0dXJuIHRbMF19LHRvQXJyYXk6cn0sVD1lLl9fZTtlLl9fZT1mdW5jdGlvbihuLHQsZSxyKXtpZihuLnRoZW4pZm9yKHZhciB1LG89dDtvPW8uX187KWlmKCh1PW8uX19jKSYmdS5fX2MpcmV0dXJuIG51bGw9PXQuX19lJiYodC5fX2U9ZS5fX2UsdC5fX2s9ZS5fX2spLHUuX19jKG4sdCk7VChuLHQsZSxyKX07dmFyIEk9ZS51bm1vdW50O2Z1bmN0aW9uIEwobix0LGUpe3JldHVybiBuJiYobi5fX2MmJm4uX19jLl9fSCYmKG4uX19jLl9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKG4pe1wiZnVuY3Rpb25cIj09dHlwZW9mIG4uX19jJiZuLl9fYygpfSksbi5fX2MuX19IPW51bGwpLG51bGwhPShuPWcoe30sbikpLl9fYyYmKG4uX19jLl9fUD09PWUmJihuLl9fYy5fX1A9dCksbi5fX2M9bnVsbCksbi5fX2s9bi5fX2smJm4uX19rLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gTChuLHQsZSl9KSksbn1mdW5jdGlvbiBVKG4sdCxlKXtyZXR1cm4gbiYmKG4uX192PW51bGwsbi5fX2s9bi5fX2smJm4uX19rLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gVShuLHQsZSl9KSxuLl9fYyYmbi5fX2MuX19QPT09dCYmKG4uX19lJiZlLmluc2VydEJlZm9yZShuLl9fZSxuLl9fZCksbi5fX2MuX19lPSEwLG4uX19jLl9fUD1lKSksbn1mdW5jdGlvbiBEKCl7dGhpcy5fX3U9MCx0aGlzLnQ9bnVsbCx0aGlzLl9fYj1udWxsfWZ1bmN0aW9uIEYobil7dmFyIHQ9bi5fXy5fX2M7cmV0dXJuIHQmJnQuX19hJiZ0Ll9fYShuKX1mdW5jdGlvbiBNKG4pe3ZhciBlLHIsdTtmdW5jdGlvbiBvKG8pe2lmKGV8fChlPW4oKSkudGhlbihmdW5jdGlvbihuKXtyPW4uZGVmYXVsdHx8bn0sZnVuY3Rpb24obil7dT1ufSksdSl0aHJvdyB1O2lmKCFyKXRocm93IGU7cmV0dXJuIHQocixvKX1yZXR1cm4gby5kaXNwbGF5TmFtZT1cIkxhenlcIixvLl9fZj0hMCxvfWZ1bmN0aW9uIFYoKXt0aGlzLnU9bnVsbCx0aGlzLm89bnVsbH1lLnVubW91bnQ9ZnVuY3Rpb24obil7dmFyIHQ9bi5fX2M7dCYmdC5fX1ImJnQuX19SKCksdCYmITA9PT1uLl9faCYmKG4udHlwZT1udWxsKSxJJiZJKG4pfSwoRC5wcm90b3R5cGU9bmV3IG4pLl9fYz1mdW5jdGlvbihuLHQpe3ZhciBlPXQuX19jLHI9dGhpcztudWxsPT1yLnQmJihyLnQ9W10pLHIudC5wdXNoKGUpO3ZhciB1PUYoci5fX3YpLG89ITEsaT1mdW5jdGlvbigpe298fChvPSEwLGUuX19SPW51bGwsdT91KGwpOmwoKSl9O2UuX19SPWk7dmFyIGw9ZnVuY3Rpb24oKXtpZighLS1yLl9fdSl7aWYoci5zdGF0ZS5fX2Epe3ZhciBuPXIuc3RhdGUuX19hO3IuX192Ll9fa1swXT1VKG4sbi5fX2MuX19QLG4uX19jLl9fTyl9dmFyIHQ7Zm9yKHIuc2V0U3RhdGUoe19fYTpyLl9fYj1udWxsfSk7dD1yLnQucG9wKCk7KXQuZm9yY2VVcGRhdGUoKX19LGM9ITA9PT10Ll9faDtyLl9fdSsrfHxjfHxyLnNldFN0YXRlKHtfX2E6ci5fX2I9ci5fX3YuX19rWzBdfSksbi50aGVuKGksaSl9LEQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dGhpcy50PVtdfSxELnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24obixlKXtpZih0aGlzLl9fYil7aWYodGhpcy5fX3YuX19rKXt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLG89dGhpcy5fX3YuX19rWzBdLl9fYzt0aGlzLl9fdi5fX2tbMF09TCh0aGlzLl9fYixyLG8uX19PPW8uX19QKX10aGlzLl9fYj1udWxsfXZhciBpPWUuX19hJiZ0KHUsbnVsbCxuLmZhbGxiYWNrKTtyZXR1cm4gaSYmKGkuX19oPW51bGwpLFt0KHUsbnVsbCxlLl9fYT9udWxsOm4uY2hpbGRyZW4pLGldfTt2YXIgVz1mdW5jdGlvbihuLHQsZSl7aWYoKytlWzFdPT09ZVswXSYmbi5vLmRlbGV0ZSh0KSxuLnByb3BzLnJldmVhbE9yZGVyJiYoXCJ0XCIhPT1uLnByb3BzLnJldmVhbE9yZGVyWzBdfHwhbi5vLnNpemUpKWZvcihlPW4udTtlOyl7Zm9yKDtlLmxlbmd0aD4zOyllLnBvcCgpKCk7aWYoZVsxXTxlWzBdKWJyZWFrO24udT1lPWVbMl19fTtmdW5jdGlvbiBQKG4pe3JldHVybiB0aGlzLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiBuLmNvbnRleHR9LG4uY2hpbGRyZW59ZnVuY3Rpb24gaihuKXt2YXIgZT10aGlzLHI9bi5pO2UuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtvKG51bGwsZS5sKSxlLmw9bnVsbCxlLmk9bnVsbH0sZS5pJiZlLmkhPT1yJiZlLmNvbXBvbmVudFdpbGxVbm1vdW50KCksbi5fX3Y/KGUubHx8KGUuaT1yLGUubD17bm9kZVR5cGU6MSxwYXJlbnROb2RlOnIsY2hpbGROb2RlczpbXSxhcHBlbmRDaGlsZDpmdW5jdGlvbihuKXt0aGlzLmNoaWxkTm9kZXMucHVzaChuKSxlLmkuYXBwZW5kQ2hpbGQobil9LGluc2VydEJlZm9yZTpmdW5jdGlvbihuLHQpe3RoaXMuY2hpbGROb2Rlcy5wdXNoKG4pLGUuaS5hcHBlbmRDaGlsZChuKX0scmVtb3ZlQ2hpbGQ6ZnVuY3Rpb24obil7dGhpcy5jaGlsZE5vZGVzLnNwbGljZSh0aGlzLmNoaWxkTm9kZXMuaW5kZXhPZihuKT4+PjEsMSksZS5pLnJlbW92ZUNoaWxkKG4pfX0pLG8odChQLHtjb250ZXh0OmUuY29udGV4dH0sbi5fX3YpLGUubCkpOmUubCYmZS5jb21wb25lbnRXaWxsVW5tb3VudCgpfWZ1bmN0aW9uIHoobixlKXt2YXIgcj10KGose19fdjpuLGk6ZX0pO3JldHVybiByLmNvbnRhaW5lckluZm89ZSxyfShWLnByb3RvdHlwZT1uZXcgbikuX19hPWZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMsZT1GKHQuX192KSxyPXQuby5nZXQobik7cmV0dXJuIHJbMF0rKyxmdW5jdGlvbih1KXt2YXIgbz1mdW5jdGlvbigpe3QucHJvcHMucmV2ZWFsT3JkZXI/KHIucHVzaCh1KSxXKHQsbixyKSk6dSgpfTtlP2Uobyk6bygpfX0sVi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKG4pe3RoaXMudT1udWxsLHRoaXMubz1uZXcgTWFwO3ZhciB0PXIobi5jaGlsZHJlbik7bi5yZXZlYWxPcmRlciYmXCJiXCI9PT1uLnJldmVhbE9yZGVyWzBdJiZ0LnJldmVyc2UoKTtmb3IodmFyIGU9dC5sZW5ndGg7ZS0tOyl0aGlzLm8uc2V0KHRbZV0sdGhpcy51PVsxLDAsdGhpcy51XSk7cmV0dXJuIG4uY2hpbGRyZW59LFYucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT1WLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3ZhciBuPXRoaXM7dGhpcy5vLmZvckVhY2goZnVuY3Rpb24odCxlKXtXKG4sZSx0KX0pfTt2YXIgQj1cInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKXx8NjAxMDMsSD0vXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlfGxldHRlcnxsaWdodGluZ3xtYXJrZXIoPyFIfFd8VSl8b3ZlcmxpbmV8cGFpbnR8cG9pbnRlcnxzaGFwZXxzdG9wfHN0cmlrZXRocm91Z2h8c3Ryb2tlfHRleHQoPyFMKXx0cmFuc2Zvcm18dW5kZXJsaW5lfHVuaWNvZGV8dW5pdHN8dnx2ZWN0b3J8dmVydHx3b3JkfHdyaXRpbmd8eCg/IUMpKVtBLVpdLyxaPS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8sWT0vW0EtWjAtOV0vZywkPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBkb2N1bWVudCxxPWZ1bmN0aW9uKG4pe3JldHVybihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sKCk/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3Qobil9O2Z1bmN0aW9uIEcobix0LGUpe3JldHVybiBudWxsPT10Ll9fayYmKHQudGV4dENvbnRlbnQ9XCJcIiksbyhuLHQpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJmUoKSxuP24uX19jOm51bGx9ZnVuY3Rpb24gSihuLHQsZSl7cmV0dXJuIGkobix0KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZlKCksbj9uLl9fYzpudWxsfW4ucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9e30sW1wiY29tcG9uZW50V2lsbE1vdW50XCIsXCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzXCIsXCJjb21wb25lbnRXaWxsVXBkYXRlXCJdLmZvckVhY2goZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tcIlVOU0FGRV9cIit0XX0sc2V0OmZ1bmN0aW9uKG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpufSl9fSl9KTt2YXIgSz1lLmV2ZW50O2Z1bmN0aW9uIFEoKXt9ZnVuY3Rpb24gWCgpe3JldHVybiB0aGlzLmNhbmNlbEJ1YmJsZX1mdW5jdGlvbiBubigpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9ZS5ldmVudD1mdW5jdGlvbihuKXtyZXR1cm4gSyYmKG49SyhuKSksbi5wZXJzaXN0PVEsbi5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1YLG4uaXNEZWZhdWx0UHJldmVudGVkPW5uLG4ubmF0aXZlRXZlbnQ9bn07dmFyIHRuLGVuPXtlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGFzc319LHJuPWUudm5vZGU7ZS52bm9kZT1mdW5jdGlvbihuKXtcInN0cmluZ1wiPT10eXBlb2Ygbi50eXBlJiZmdW5jdGlvbihuKXt2YXIgdD1uLnByb3BzLGU9bi50eXBlLHU9e307Zm9yKHZhciBvIGluIHQpe3ZhciBpPXRbb107aWYoIShcInZhbHVlXCI9PT1vJiZcImRlZmF1bHRWYWx1ZVwiaW4gdCYmbnVsbD09aXx8JCYmXCJjaGlsZHJlblwiPT09byYmXCJub3NjcmlwdFwiPT09ZXx8XCJjbGFzc1wiPT09b3x8XCJjbGFzc05hbWVcIj09PW8pKXt2YXIgbD1vLnRvTG93ZXJDYXNlKCk7XCJkZWZhdWx0VmFsdWVcIj09PW8mJlwidmFsdWVcImluIHQmJm51bGw9PXQudmFsdWU/bz1cInZhbHVlXCI6XCJkb3dubG9hZFwiPT09byYmITA9PT1pP2k9XCJcIjpcIm9uZG91YmxlY2xpY2tcIj09PWw/bz1cIm9uZGJsY2xpY2tcIjpcIm9uY2hhbmdlXCIhPT1sfHxcImlucHV0XCIhPT1lJiZcInRleHRhcmVhXCIhPT1lfHxxKHQudHlwZSk/XCJvbmZvY3VzXCI9PT1sP289XCJvbmZvY3VzaW5cIjpcIm9uYmx1clwiPT09bD9vPVwib25mb2N1c291dFwiOloudGVzdChvKT9vPWw6LTE9PT1lLmluZGV4T2YoXCItXCIpJiZILnRlc3Qobyk/bz1vLnJlcGxhY2UoWSxcIi0kJlwiKS50b0xvd2VyQ2FzZSgpOm51bGw9PT1pJiYoaT12b2lkIDApOmw9bz1cIm9uaW5wdXRcIixcIm9uaW5wdXRcIj09PWwmJnVbbz1sXSYmKG89XCJvbmlucHV0Q2FwdHVyZVwiKSx1W29dPWl9fVwic2VsZWN0XCI9PWUmJnUubXVsdGlwbGUmJkFycmF5LmlzQXJyYXkodS52YWx1ZSkmJih1LnZhbHVlPXIodC5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihuKXtuLnByb3BzLnNlbGVjdGVkPS0xIT11LnZhbHVlLmluZGV4T2Yobi5wcm9wcy52YWx1ZSl9KSksXCJzZWxlY3RcIj09ZSYmbnVsbCE9dS5kZWZhdWx0VmFsdWUmJih1LnZhbHVlPXIodC5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihuKXtuLnByb3BzLnNlbGVjdGVkPXUubXVsdGlwbGU/LTEhPXUuZGVmYXVsdFZhbHVlLmluZGV4T2Yobi5wcm9wcy52YWx1ZSk6dS5kZWZhdWx0VmFsdWU9PW4ucHJvcHMudmFsdWV9KSksdC5jbGFzcyYmIXQuY2xhc3NOYW1lPyh1LmNsYXNzPXQuY2xhc3MsT2JqZWN0LmRlZmluZVByb3BlcnR5KHUsXCJjbGFzc05hbWVcIixlbikpOih0LmNsYXNzTmFtZSYmIXQuY2xhc3N8fHQuY2xhc3MmJnQuY2xhc3NOYW1lKSYmKHUuY2xhc3M9dS5jbGFzc05hbWU9dC5jbGFzc05hbWUpLG4ucHJvcHM9dX0obiksbi4kJHR5cGVvZj1CLHJuJiZybihuKX07dmFyIHVuPWUuX19yO2UuX19yPWZ1bmN0aW9uKG4pe3VuJiZ1bihuKSx0bj1uLl9fY307dmFyIG9uPWUuZGlmZmVkO2UuZGlmZmVkPWZ1bmN0aW9uKG4pe29uJiZvbihuKTt2YXIgdD1uLnByb3BzLGU9bi5fX2U7bnVsbCE9ZSYmXCJ0ZXh0YXJlYVwiPT09bi50eXBlJiZcInZhbHVlXCJpbiB0JiZ0LnZhbHVlIT09ZS52YWx1ZSYmKGUudmFsdWU9bnVsbD09dC52YWx1ZT9cIlwiOnQudmFsdWUpLHRuPW51bGx9O3ZhciBsbj17UmVhY3RDdXJyZW50RGlzcGF0Y2hlcjp7Y3VycmVudDp7cmVhZENvbnRleHQ6ZnVuY3Rpb24obil7cmV0dXJuIHRuLl9fbltuLl9fY10ucHJvcHMudmFsdWV9fX19LGNuPVwiMTcuMC4yXCI7ZnVuY3Rpb24gZm4obil7cmV0dXJuIHQuYmluZChudWxsLG4pfWZ1bmN0aW9uIGFuKG4pe3JldHVybiEhbiYmbi4kJHR5cGVvZj09PUJ9ZnVuY3Rpb24gc24obil7cmV0dXJuIGFuKG4pP2YuYXBwbHkobnVsbCxhcmd1bWVudHMpOm59ZnVuY3Rpb24gaG4obil7cmV0dXJuISFuLl9fayYmKG8obnVsbCxuKSwhMCl9ZnVuY3Rpb24gdm4obil7cmV0dXJuIG4mJihuLmJhc2V8fDE9PT1uLm5vZGVUeXBlJiZuKXx8bnVsbH12YXIgZG49ZnVuY3Rpb24obix0KXtyZXR1cm4gbih0KX0scG49ZnVuY3Rpb24obix0KXtyZXR1cm4gbih0KX0sbW49dTtmdW5jdGlvbiB5bihuKXtuKCl9ZnVuY3Rpb24gX24obil7cmV0dXJuIG59ZnVuY3Rpb24gYm4oKXtyZXR1cm5bITEseW5dfXZhciBTbj1kO2Z1bmN0aW9uIGduKG4sdCl7dmFyIGU9dCgpLHI9YSh7aDp7X186ZSx2OnR9fSksdT1yWzBdLmgsbz1yWzFdO3JldHVybiBkKGZ1bmN0aW9uKCl7dS5fXz1lLHUudj10LEUodS5fXyx0KCkpfHxvKHtoOnV9KX0sW24sZSx0XSksdihmdW5jdGlvbigpe3JldHVybiBFKHUuX18sdS52KCkpfHxvKHtoOnV9KSxuKGZ1bmN0aW9uKCl7RSh1Ll9fLHUudigpKXx8byh7aDp1fSl9KX0sW25dKSxlfXZhciBDbj17dXNlU3RhdGU6YSx1c2VJZDpzLHVzZVJlZHVjZXI6aCx1c2VFZmZlY3Q6dix1c2VMYXlvdXRFZmZlY3Q6ZCx1c2VJbnNlcnRpb25FZmZlY3Q6U24sdXNlVHJhbnNpdGlvbjpibix1c2VEZWZlcnJlZFZhbHVlOl9uLHVzZVN5bmNFeHRlcm5hbFN0b3JlOmduLHN0YXJ0VHJhbnNpdGlvbjp5bix1c2VSZWY6cCx1c2VJbXBlcmF0aXZlSGFuZGxlOm0sdXNlTWVtbzp5LHVzZUNhbGxiYWNrOl8sdXNlQ29udGV4dDpiLHVzZURlYnVnVmFsdWU6Uyx2ZXJzaW9uOlwiMTcuMC4yXCIsQ2hpbGRyZW46TyxyZW5kZXI6RyxoeWRyYXRlOkosdW5tb3VudENvbXBvbmVudEF0Tm9kZTpobixjcmVhdGVQb3J0YWw6eixjcmVhdGVFbGVtZW50OnQsY3JlYXRlQ29udGV4dDpsLGNyZWF0ZUZhY3Rvcnk6Zm4sY2xvbmVFbGVtZW50OnNuLGNyZWF0ZVJlZjpjLEZyYWdtZW50OnUsaXNWYWxpZEVsZW1lbnQ6YW4sZmluZERPTU5vZGU6dm4sQ29tcG9uZW50Om4sUHVyZUNvbXBvbmVudDp3LG1lbW86eCxmb3J3YXJkUmVmOmssZmx1c2hTeW5jOnBuLHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzOmRuLFN0cmljdE1vZGU6bW4sU3VzcGVuc2U6RCxTdXNwZW5zZUxpc3Q6VixsYXp5Ok0sX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ6bG59O2V4cG9ydHtPIGFzIENoaWxkcmVuLHcgYXMgUHVyZUNvbXBvbmVudCxtbiBhcyBTdHJpY3RNb2RlLEQgYXMgU3VzcGVuc2UsViBhcyBTdXNwZW5zZUxpc3QsbG4gYXMgX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQsc24gYXMgY2xvbmVFbGVtZW50LGZuIGFzIGNyZWF0ZUZhY3RvcnkseiBhcyBjcmVhdGVQb3J0YWwsQ24gYXMgZGVmYXVsdCx2biBhcyBmaW5kRE9NTm9kZSxwbiBhcyBmbHVzaFN5bmMsayBhcyBmb3J3YXJkUmVmLEogYXMgaHlkcmF0ZSxhbiBhcyBpc1ZhbGlkRWxlbWVudCxNIGFzIGxhenkseCBhcyBtZW1vLEcgYXMgcmVuZGVyLHluIGFzIHN0YXJ0VHJhbnNpdGlvbixobiBhcyB1bm1vdW50Q29tcG9uZW50QXROb2RlLGRuIGFzIHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzLF9uIGFzIHVzZURlZmVycmVkVmFsdWUsU24gYXMgdXNlSW5zZXJ0aW9uRWZmZWN0LGduIGFzIHVzZVN5bmNFeHRlcm5hbFN0b3JlLGJuIGFzIHVzZVRyYW5zaXRpb24sY24gYXMgdmVyc2lvbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21wYXQubW9kdWxlLmpzLm1hcFxuIiwiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcblxuZXhwb3J0IGNvbnN0IHVzZUdpZnRPcGVuID0gKGRlbGF5ID0gMTAwMCkgPT4ge1xuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IHRpbWVyUmVmID0gdXNlUmVmKG51bGwpXG5cbiAgY29uc3Qgb25Ub2dnbGUgPSAoKSA9PiB7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVyUmVmLmN1cnJlbnQpXG4gICAgc2V0SXNPcGVuKHByZXYgPT4gIXByZXYpXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHRpbWVyUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNldElzT3Blbih0cnVlKVxuICAgIH0sIGRlbGF5KVxuXG4gICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0aW1lclJlZi5jdXJyZW50KVxuICB9LCBbZGVsYXldKVxuXG4gIHJldHVybiB7XG4gICAgaXNPcGVuLFxuICAgIG9uVG9nZ2xlXG4gIH1cbn1cbiIsImltcG9ydHtvcHRpb25zIGFzIHJ9ZnJvbVwicHJlYWN0XCI7ZXhwb3J0e0ZyYWdtZW50fWZyb21cInByZWFjdFwiO3ZhciBfPTA7ZnVuY3Rpb24gbyhvLGUsbix0LGYsbCl7dmFyIHMsdSxhPXt9O2Zvcih1IGluIGUpXCJyZWZcIj09dT9zPWVbdV06YVt1XT1lW3VdO3ZhciBpPXt0eXBlOm8scHJvcHM6YSxrZXk6bixyZWY6cyxfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fZDp2b2lkIDAsX19jOm51bGwsX19oOm51bGwsY29uc3RydWN0b3I6dm9pZCAwLF9fdjotLV8sX19zb3VyY2U6ZixfX3NlbGY6bH07aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgbyYmKHM9by5kZWZhdWx0UHJvcHMpKWZvcih1IGluIHMpdm9pZCAwPT09YVt1XSYmKGFbdV09c1t1XSk7cmV0dXJuIHIudm5vZGUmJnIudm5vZGUoaSksaX1leHBvcnR7byBhcyBqc3gsbyBhcyBqc3hERVYsbyBhcyBqc3hzfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWpzeFJ1bnRpbWUubW9kdWxlLmpzLm1hcFxuIiwiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3ByZWFjdCdcblxuZXhwb3J0IGNvbnN0IFN0YXRlID0gY3JlYXRlQ29udGV4dCgpXG5cbmNvbnN0IFN0YXRlQ29udGV4dCA9ICh7IGNoaWxkcmVuLCB2YWx1ZSB9KSA9PiB7XG4gIHJldHVybiA8U3RhdGUuUHJvdmlkZXIgdmFsdWU9e3ZhbHVlfT57Y2hpbGRyZW59PC9TdGF0ZS5Qcm92aWRlcj5cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3RhdGVDb250ZXh0XG4iLCJpbXBvcnQgeyBDb21wb25lbnRDaGlsZCwgQ29udGFpbmVyTm9kZSwgcmVuZGVyIGFzIHByZWFjdFJlbmRlciB9IGZyb20gJ3ByZWFjdCdcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnLi4vU3RhdGVDb250ZXh0J1xuXG5leHBvcnQgY29uc3QgcmVuZGVyID0gKHZOb2RlOiBDb21wb25lbnRDaGlsZCkgPT4gKHRhcmdldDogQ29udGFpbmVyTm9kZSwgc3RhdGU/OiBhbnkpID0+XG4gIHByZWFjdFJlbmRlcig8U3RhdGVDb250ZXh0IHZhbHVlPXtzdGF0ZX0+e3ZOb2RlfTwvU3RhdGVDb250ZXh0PiwgdGFyZ2V0IGFzIEhUTUxFbGVtZW50KVxuIiwiaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gXCIuLi9TdGF0ZUNvbnRleHRcIjtcblxuZXhwb3J0IGNvbnN0IHVzZUN1cnJlbnRTdGF0ZSA9IDxUVmFsdWUgPSB1bmtub3duPigpID0+IHVzZUNvbnRleHQ8VFZhbHVlPihTdGF0ZSlcbiIsIi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBbXTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVDbGVhcjtcbiIsIi8qKlxuICogUGVyZm9ybXMgYVxuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKCdhJywgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKE5hTiwgTmFOKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxO1xuIiwidmFyIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBga2V5YCBpcyBmb3VuZCBpbiBgYXJyYXlgIG9mIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBpZiAoZXEoYXJyYXlbbGVuZ3RoXVswXSwga2V5KSkge1xuICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc29jSW5kZXhPZjtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xuICBpZiAoaW5kZXggPT0gbGFzdEluZGV4KSB7XG4gICAgZGF0YS5wb3AoKTtcbiAgfSBlbHNlIHtcbiAgICBzcGxpY2UuY2FsbChkYXRhLCBpbmRleCwgMSk7XG4gIH1cbiAgLS10aGlzLnNpemU7XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZURlbGV0ZTtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBkYXRhW2luZGV4XVsxXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVHZXQ7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBhc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUhhcztcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBsaXN0IGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICArK3RoaXMuc2l6ZTtcbiAgICBkYXRhLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSBlbHNlIHtcbiAgICBkYXRhW2luZGV4XVsxXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZVNldDtcbiIsInZhciBsaXN0Q2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUNsZWFyJyksXG4gICAgbGlzdENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlRGVsZXRlJyksXG4gICAgbGlzdENhY2hlR2V0ID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlR2V0JyksXG4gICAgbGlzdENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlSGFzJyksXG4gICAgbGlzdENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBsaXN0IGNhY2hlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTGlzdENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYExpc3RDYWNoZWAuXG5MaXN0Q2FjaGUucHJvdG90eXBlLmNsZWFyID0gbGlzdENhY2hlQ2xlYXI7XG5MaXN0Q2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IGxpc3RDYWNoZURlbGV0ZTtcbkxpc3RDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbGlzdENhY2hlR2V0O1xuTGlzdENhY2hlLnByb3RvdHlwZS5oYXMgPSBsaXN0Q2FjaGVIYXM7XG5MaXN0Q2FjaGUucHJvdG90eXBlLnNldCA9IGxpc3RDYWNoZVNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBMaXN0Q2FjaGU7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqL1xuZnVuY3Rpb24gc3RhY2tDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGU7XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tDbGVhcjtcbiIsIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICByZXN1bHQgPSBkYXRhWydkZWxldGUnXShrZXkpO1xuXG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0RlbGV0ZTtcbiIsIi8qKlxuICogR2V0cyB0aGUgc3RhY2sgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrR2V0KGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0dldDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGEgc3RhY2sgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0hhcyhrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tIYXM7XG4iLCIvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZyZWVHbG9iYWw7XG4iLCJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJvb3Q7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgU3ltYm9sID0gcm9vdC5TeW1ib2w7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ltYm9sO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSxcbiAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcblxuICB0cnkge1xuICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgaWYgKHVubWFza2VkKSB7XG4gICAgaWYgKGlzT3duKSB7XG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UmF3VGFnO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb2JqZWN0VG9TdHJpbmc7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgZ2V0UmF3VGFnID0gcmVxdWlyZSgnLi9fZ2V0UmF3VGFnJyksXG4gICAgb2JqZWN0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19vYmplY3RUb1N0cmluZycpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbnVsbFRhZyA9ICdbb2JqZWN0IE51bGxdJyxcbiAgICB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICB9XG4gIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0VGFnO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3Q7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0Z1bmN0aW9uO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cbnZhciBjb3JlSnNEYXRhID0gcm9vdFsnX19jb3JlLWpzX3NoYXJlZF9fJ107XG5cbm1vZHVsZS5leHBvcnRzID0gY29yZUpzRGF0YTtcbiIsInZhciBjb3JlSnNEYXRhID0gcmVxdWlyZSgnLi9fY29yZUpzRGF0YScpO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWV0aG9kcyBtYXNxdWVyYWRpbmcgYXMgbmF0aXZlLiAqL1xudmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gIHJldHVybiB1aWQgPyAoJ1N5bWJvbChzcmMpXzEuJyArIHVpZCkgOiAnJztcbn0oKSk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTWFza2VkO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgZnVuY2AgdG8gaXRzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXG4gKi9cbmZ1bmN0aW9uIHRvU291cmNlKGZ1bmMpIHtcbiAgaWYgKGZ1bmMgIT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZnVuY1RvU3RyaW5nLmNhbGwoZnVuYyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChmdW5jICsgJycpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU291cmNlO1xuIiwidmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc01hc2tlZCA9IHJlcXVpcmUoJy4vX2lzTWFza2VkJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgdG9Tb3VyY2UgPSByZXF1aXJlKCcuL190b1NvdXJjZScpO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxuICovXG52YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXG52YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eSkucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcbik7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYXRpdmVgIHdpdGhvdXQgYmFkIHNoaW0gY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpIHx8IGlzTWFza2VkKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcGF0dGVybiA9IGlzRnVuY3Rpb24odmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcbiAgcmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc05hdGl2ZTtcbiIsIi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFZhbHVlO1xuIiwidmFyIGJhc2VJc05hdGl2ZSA9IHJlcXVpcmUoJy4vX2Jhc2VJc05hdGl2ZScpLFxuICAgIGdldFZhbHVlID0gcmVxdWlyZSgnLi9fZ2V0VmFsdWUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXROYXRpdmU7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIE1hcCA9IGdldE5hdGl2ZShyb290LCAnTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgbmF0aXZlQ3JlYXRlID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2NyZWF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUNyZWF0ZTtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIEhhc2hcbiAqL1xuZnVuY3Rpb24gaGFzaENsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmF0aXZlQ3JlYXRlID8gbmF0aXZlQ3JlYXRlKG51bGwpIDoge307XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaENsZWFyO1xuIiwiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoRGVsZXRlO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogR2V0cyB0aGUgaGFzaCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBoYXNoR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChuYXRpdmVDcmVhdGUpIHtcbiAgICB2YXIgcmVzdWx0ID0gZGF0YVtrZXldO1xuICAgIHJldHVybiByZXN1bHQgPT09IEhBU0hfVU5ERUZJTkVEID8gdW5kZWZpbmVkIDogcmVzdWx0O1xuICB9XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSkgPyBkYXRhW2tleV0gOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaEdldDtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBoYXNoIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoSGFzKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHJldHVybiBuYXRpdmVDcmVhdGUgPyAoZGF0YVtrZXldICE9PSB1bmRlZmluZWQpIDogaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hIYXM7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBTZXRzIHRoZSBoYXNoIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gaGFzaFNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgdGhpcy5zaXplICs9IHRoaXMuaGFzKGtleSkgPyAwIDogMTtcbiAgZGF0YVtrZXldID0gKG5hdGl2ZUNyZWF0ZSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSA/IEhBU0hfVU5ERUZJTkVEIDogdmFsdWU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hTZXQ7XG4iLCJ2YXIgaGFzaENsZWFyID0gcmVxdWlyZSgnLi9faGFzaENsZWFyJyksXG4gICAgaGFzaERlbGV0ZSA9IHJlcXVpcmUoJy4vX2hhc2hEZWxldGUnKSxcbiAgICBoYXNoR2V0ID0gcmVxdWlyZSgnLi9faGFzaEdldCcpLFxuICAgIGhhc2hIYXMgPSByZXF1aXJlKCcuL19oYXNoSGFzJyksXG4gICAgaGFzaFNldCA9IHJlcXVpcmUoJy4vX2hhc2hTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgaGFzaCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIEhhc2goZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgSGFzaGAuXG5IYXNoLnByb3RvdHlwZS5jbGVhciA9IGhhc2hDbGVhcjtcbkhhc2gucHJvdG90eXBlWydkZWxldGUnXSA9IGhhc2hEZWxldGU7XG5IYXNoLnByb3RvdHlwZS5nZXQgPSBoYXNoR2V0O1xuSGFzaC5wcm90b3R5cGUuaGFzID0gaGFzaEhhcztcbkhhc2gucHJvdG90eXBlLnNldCA9IGhhc2hTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gSGFzaDtcbiIsInZhciBIYXNoID0gcmVxdWlyZSgnLi9fSGFzaCcpLFxuICAgIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xuICB0aGlzLnNpemUgPSAwO1xuICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICdoYXNoJzogbmV3IEhhc2gsXG4gICAgJ21hcCc6IG5ldyAoTWFwIHx8IExpc3RDYWNoZSksXG4gICAgJ3N0cmluZyc6IG5ldyBIYXNoXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVDbGVhcjtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHVzZSBhcyB1bmlxdWUgb2JqZWN0IGtleS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleWFibGUodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXG4gICAgPyAodmFsdWUgIT09ICdfX3Byb3RvX18nKVxuICAgIDogKHZhbHVlID09PSBudWxsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0tleWFibGU7XG4iLCJ2YXIgaXNLZXlhYmxlID0gcmVxdWlyZSgnLi9faXNLZXlhYmxlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgZGF0YSBmb3IgYG1hcGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHJlZmVyZW5jZSBrZXkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWFwIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGdldE1hcERhdGEobWFwLCBrZXkpIHtcbiAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187XG4gIHJldHVybiBpc0tleWFibGUoa2V5KVxuICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXG4gICAgOiBkYXRhLm1hcDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRNYXBEYXRhO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIHJlc3VsdCA9IGdldE1hcERhdGEodGhpcywga2V5KVsnZGVsZXRlJ10oa2V5KTtcbiAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlRGVsZXRlO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUdldChrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUdldDtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlSGFzO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgbWFwIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG1hcCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IGdldE1hcERhdGEodGhpcywga2V5KSxcbiAgICAgIHNpemUgPSBkYXRhLnNpemU7XG5cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSArPSBkYXRhLnNpemUgPT0gc2l6ZSA/IDAgOiAxO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZVNldDtcbiIsInZhciBtYXBDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVDbGVhcicpLFxuICAgIG1hcENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVEZWxldGUnKSxcbiAgICBtYXBDYWNoZUdldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlR2V0JyksXG4gICAgbWFwQ2FjaGVIYXMgPSByZXF1aXJlKCcuL19tYXBDYWNoZUhhcycpLFxuICAgIG1hcENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbWFwIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIE1hcENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYE1hcENhY2hlYC5cbk1hcENhY2hlLnByb3RvdHlwZS5jbGVhciA9IG1hcENhY2hlQ2xlYXI7XG5NYXBDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbWFwQ2FjaGVEZWxldGU7XG5NYXBDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbWFwQ2FjaGVHZXQ7XG5NYXBDYWNoZS5wcm90b3R5cGUuaGFzID0gbWFwQ2FjaGVIYXM7XG5NYXBDYWNoZS5wcm90b3R5cGUuc2V0ID0gbWFwQ2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwQ2FjaGU7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyksXG4gICAgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFNldHMgdGhlIHN0YWNrIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHN0YWNrIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzdGFja1NldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBMaXN0Q2FjaGUpIHtcbiAgICB2YXIgcGFpcnMgPSBkYXRhLl9fZGF0YV9fO1xuICAgIGlmICghTWFwIHx8IChwYWlycy5sZW5ndGggPCBMQVJHRV9BUlJBWV9TSVpFIC0gMSkpIHtcbiAgICAgIHBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgIHRoaXMuc2l6ZSA9ICsrZGF0YS5zaXplO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlKHBhaXJzKTtcbiAgfVxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja1NldDtcbiIsInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBzdGFja0NsZWFyID0gcmVxdWlyZSgnLi9fc3RhY2tDbGVhcicpLFxuICAgIHN0YWNrRGVsZXRlID0gcmVxdWlyZSgnLi9fc3RhY2tEZWxldGUnKSxcbiAgICBzdGFja0dldCA9IHJlcXVpcmUoJy4vX3N0YWNrR2V0JyksXG4gICAgc3RhY2tIYXMgPSByZXF1aXJlKCcuL19zdGFja0hhcycpLFxuICAgIHN0YWNrU2V0ID0gcmVxdWlyZSgnLi9fc3RhY2tTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RhY2sgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU3RhY2soZW50cmllcykge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlKGVudHJpZXMpO1xuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTdGFja2AuXG5TdGFjay5wcm90b3R5cGUuY2xlYXIgPSBzdGFja0NsZWFyO1xuU3RhY2sucHJvdG90eXBlWydkZWxldGUnXSA9IHN0YWNrRGVsZXRlO1xuU3RhY2sucHJvdG90eXBlLmdldCA9IHN0YWNrR2V0O1xuU3RhY2sucHJvdG90eXBlLmhhcyA9IHN0YWNrSGFzO1xuU3RhY2sucHJvdG90eXBlLnNldCA9IHN0YWNrU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YWNrO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgdmFyIGZ1bmMgPSBnZXROYXRpdmUoT2JqZWN0LCAnZGVmaW5lUHJvcGVydHknKTtcbiAgICBmdW5jKHt9LCAnJywge30pO1xuICAgIHJldHVybiBmdW5jO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVQcm9wZXJ0eTtcbiIsInZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2RlZmluZVByb3BlcnR5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGFzc2lnblZhbHVlYCBhbmQgYGFzc2lnbk1lcmdlVmFsdWVgIHdpdGhvdXRcbiAqIHZhbHVlIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycgJiYgZGVmaW5lUHJvcGVydHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwge1xuICAgICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgICAnZW51bWVyYWJsZSc6IHRydWUsXG4gICAgICAndmFsdWUnOiB2YWx1ZSxcbiAgICAgICd3cml0YWJsZSc6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUFzc2lnblZhbHVlO1xuIiwidmFyIGJhc2VBc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ25WYWx1ZScpLFxuICAgIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZSBgYXNzaWduVmFsdWVgIGV4Y2VwdCB0aGF0IGl0IGRvZXNuJ3QgYXNzaWduXG4gKiBgdW5kZWZpbmVkYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgaWYgKCh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmICFlcShvYmplY3Rba2V5XSwgdmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc2lnbk1lcmdlVmFsdWU7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBiYXNlIGZ1bmN0aW9uIGZvciBtZXRob2RzIGxpa2UgYF8uZm9ySW5gIGFuZCBgXy5mb3JPd25gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VGb3IoZnJvbVJpZ2h0KSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QsIGl0ZXJhdGVlLCBrZXlzRnVuYykge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBpdGVyYWJsZSA9IE9iamVjdChvYmplY3QpLFxuICAgICAgICBwcm9wcyA9IGtleXNGdW5jKG9iamVjdCksXG4gICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgdmFyIGtleSA9IHByb3BzW2Zyb21SaWdodCA/IGxlbmd0aCA6ICsraW5kZXhdO1xuICAgICAgaWYgKGl0ZXJhdGVlKGl0ZXJhYmxlW2tleV0sIGtleSwgaXRlcmFibGUpID09PSBmYWxzZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVCYXNlRm9yO1xuIiwidmFyIGNyZWF0ZUJhc2VGb3IgPSByZXF1aXJlKCcuL19jcmVhdGVCYXNlRm9yJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGJhc2VGb3JPd25gIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYG9iamVjdGBcbiAqIHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgYGtleXNGdW5jYCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LlxuICogSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG52YXIgYmFzZUZvciA9IGNyZWF0ZUJhc2VGb3IoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRm9yO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkLFxuICAgIGFsbG9jVW5zYWZlID0gQnVmZmVyID8gQnVmZmVyLmFsbG9jVW5zYWZlIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiAgYGJ1ZmZlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZmZXIgVGhlIGJ1ZmZlciB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7QnVmZmVyfSBSZXR1cm5zIHRoZSBjbG9uZWQgYnVmZmVyLlxuICovXG5mdW5jdGlvbiBjbG9uZUJ1ZmZlcihidWZmZXIsIGlzRGVlcCkge1xuICBpZiAoaXNEZWVwKSB7XG4gICAgcmV0dXJuIGJ1ZmZlci5zbGljZSgpO1xuICB9XG4gIHZhciBsZW5ndGggPSBidWZmZXIubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gYWxsb2NVbnNhZmUgPyBhbGxvY1Vuc2FmZShsZW5ndGgpIDogbmV3IGJ1ZmZlci5jb25zdHJ1Y3RvcihsZW5ndGgpO1xuXG4gIGJ1ZmZlci5jb3B5KHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVCdWZmZXI7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgVWludDhBcnJheSA9IHJvb3QuVWludDhBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBVaW50OEFycmF5O1xuIiwidmFyIFVpbnQ4QXJyYXkgPSByZXF1aXJlKCcuL19VaW50OEFycmF5Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGBhcnJheUJ1ZmZlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXlCdWZmZXJ9IGFycmF5QnVmZmVyIFRoZSBhcnJheSBidWZmZXIgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBhcnJheSBidWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGNsb25lQXJyYXlCdWZmZXIoYXJyYXlCdWZmZXIpIHtcbiAgdmFyIHJlc3VsdCA9IG5ldyBhcnJheUJ1ZmZlci5jb25zdHJ1Y3RvcihhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKTtcbiAgbmV3IFVpbnQ4QXJyYXkocmVzdWx0KS5zZXQobmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZUFycmF5QnVmZmVyO1xuIiwidmFyIGNsb25lQXJyYXlCdWZmZXIgPSByZXF1aXJlKCcuL19jbG9uZUFycmF5QnVmZmVyJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGB0eXBlZEFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHR5cGVkQXJyYXkgVGhlIHR5cGVkIGFycmF5IHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCB0eXBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gY2xvbmVUeXBlZEFycmF5KHR5cGVkQXJyYXksIGlzRGVlcCkge1xuICB2YXIgYnVmZmVyID0gaXNEZWVwID8gY2xvbmVBcnJheUJ1ZmZlcih0eXBlZEFycmF5LmJ1ZmZlcikgOiB0eXBlZEFycmF5LmJ1ZmZlcjtcbiAgcmV0dXJuIG5ldyB0eXBlZEFycmF5LmNvbnN0cnVjdG9yKGJ1ZmZlciwgdHlwZWRBcnJheS5ieXRlT2Zmc2V0LCB0eXBlZEFycmF5Lmxlbmd0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVUeXBlZEFycmF5O1xuIiwiLyoqXG4gKiBDb3BpZXMgdGhlIHZhbHVlcyBvZiBgc291cmNlYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBzb3VyY2UgVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXk9W11dIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyB0by5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBjb3B5QXJyYXkoc291cmNlLCBhcnJheSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG5cbiAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbaW5kZXhdID0gc291cmNlW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weUFycmF5O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNyZWF0ZWAgd2l0aG91dCBzdXBwb3J0IGZvciBhc3NpZ25pbmdcbiAqIHByb3BlcnRpZXMgdG8gdGhlIGNyZWF0ZWQgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvdG8gVGhlIG9iamVjdCB0byBpbmhlcml0IGZyb20uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICovXG52YXIgYmFzZUNyZWF0ZSA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gb2JqZWN0KCkge31cbiAgcmV0dXJuIGZ1bmN0aW9uKHByb3RvKSB7XG4gICAgaWYgKCFpc09iamVjdChwcm90bykpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgaWYgKG9iamVjdENyZWF0ZSkge1xuICAgICAgcmV0dXJuIG9iamVjdENyZWF0ZShwcm90byk7XG4gICAgfVxuICAgIG9iamVjdC5wcm90b3R5cGUgPSBwcm90bztcbiAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDtcbiAgICBvYmplY3QucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VDcmVhdGU7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyQXJnO1xuIiwidmFyIG92ZXJBcmcgPSByZXF1aXJlKCcuL19vdmVyQXJnJyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIGdldFByb3RvdHlwZSA9IG92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFByb3RvdHlwZTtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgcHJvdG90eXBlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3RvdHlwZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSkge1xuICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XG5cbiAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1Byb3RvdHlwZTtcbiIsInZhciBiYXNlQ3JlYXRlID0gcmVxdWlyZSgnLi9fYmFzZUNyZWF0ZScpLFxuICAgIGdldFByb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2dldFByb3RvdHlwZScpLFxuICAgIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKTtcblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbiBvYmplY3QgY2xvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICovXG5mdW5jdGlvbiBpbml0Q2xvbmVPYmplY3Qob2JqZWN0KSB7XG4gIHJldHVybiAodHlwZW9mIG9iamVjdC5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmICFpc1Byb3RvdHlwZShvYmplY3QpKVxuICAgID8gYmFzZUNyZWF0ZShnZXRQcm90b3R5cGUob2JqZWN0KSlcbiAgICA6IHt9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluaXRDbG9uZU9iamVjdDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0TGlrZTtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzQXJndW1lbnRzO1xuIiwidmFyIGJhc2VJc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vX2Jhc2VJc0FyZ3VtZW50cycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJndW1lbnRzO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheTtcbiIsIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0xlbmd0aCgzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aCgnMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJlxuICAgIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0xlbmd0aDtcbiIsInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xuICogbm90IGEgZnVuY3Rpb24gYW5kIGhhcyBhIGB2YWx1ZS5sZW5ndGhgIHRoYXQncyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvclxuICogZXF1YWwgdG8gYDBgIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYE51bWJlci5NQVhfU0FGRV9JTlRFR0VSYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgIWlzRnVuY3Rpb24odmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXlMaWtlO1xuIiwidmFyIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pc0FycmF5TGlrZWAgZXhjZXB0IHRoYXQgaXQgYWxzbyBjaGVja3MgaWYgYHZhbHVlYFxuICogaXMgYW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LWxpa2Ugb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGlzQXJyYXlMaWtlKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5TGlrZU9iamVjdDtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgZmFsc2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLnN0dWJGYWxzZSk7XG4gKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxuICovXG5mdW5jdGlvbiBzdHViRmFsc2UoKSB7XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViRmFsc2U7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKSxcbiAgICBzdHViRmFsc2UgPSByZXF1aXJlKCcuL3N0dWJGYWxzZScpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNCdWZmZXI7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBpbmZlciB0aGUgYE9iamVjdGAgY29uc3RydWN0b3IuICovXG52YXIgb2JqZWN0Q3RvclN0cmluZyA9IGZ1bmNUb1N0cmluZy5jYWxsKE9iamVjdCk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIHRoYXQgaXMsIGFuIG9iamVjdCBjcmVhdGVkIGJ5IHRoZVxuICogYE9iamVjdGAgY29uc3RydWN0b3Igb3Igb25lIHdpdGggYSBgW1tQcm90b3R5cGVdXWAgb2YgYG51bGxgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC44LjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqIH1cbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QobmV3IEZvbyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoeyAneCc6IDAsICd5JzogMCB9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdExpa2UodmFsdWUpIHx8IGJhc2VHZXRUYWcodmFsdWUpICE9IG9iamVjdFRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcHJvdG8gPSBnZXRQcm90b3R5cGUodmFsdWUpO1xuICBpZiAocHJvdG8gPT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgQ3RvciA9IGhhc093blByb3BlcnR5LmNhbGwocHJvdG8sICdjb25zdHJ1Y3RvcicpICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuICByZXR1cm4gdHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJlxuICAgIGZ1bmNUb1N0cmluZy5jYWxsKEN0b3IpID09IG9iamVjdEN0b3JTdHJpbmc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQbGFpbk9iamVjdDtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XG50eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XG50eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNUeXBlZEFycmF5O1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmFyeWAgd2l0aG91dCBzdXBwb3J0IGZvciBzdG9yaW5nIG1ldGFkYXRhLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuYXJ5KGZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmModmFsdWUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VVbmFyeTtcbiIsInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5vZGVVdGlsO1xuIiwidmFyIGJhc2VJc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19iYXNlSXNUeXBlZEFycmF5JyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgbm9kZVV0aWwgPSByZXF1aXJlKCcuL19ub2RlVXRpbCcpO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1R5cGVkQXJyYXkgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1R5cGVkQXJyYXk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIHR5cGVkIGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gYmFzZVVuYXJ5KG5vZGVJc1R5cGVkQXJyYXkpIDogYmFzZUlzVHlwZWRBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc1R5cGVkQXJyYXk7XG4iLCIvKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgLCB1bmxlc3MgYGtleWAgaXMgXCJfX3Byb3RvX19cIiBvciBcImNvbnN0cnVjdG9yXCIuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBzYWZlR2V0KG9iamVjdCwga2V5KSB7XG4gIGlmIChrZXkgPT09ICdjb25zdHJ1Y3RvcicgJiYgdHlwZW9mIG9iamVjdFtrZXldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGtleSA9PSAnX19wcm90b19fJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiBvYmplY3Rba2V5XTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzYWZlR2V0O1xuIiwidmFyIGJhc2VBc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ25WYWx1ZScpLFxuICAgIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEFzc2lnbnMgYHZhbHVlYCB0byBga2V5YCBvZiBgb2JqZWN0YCBpZiB0aGUgZXhpc3RpbmcgdmFsdWUgaXMgbm90IGVxdWl2YWxlbnRcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xuICBpZiAoIShoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBlcShvYmpWYWx1ZSwgdmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc2lnblZhbHVlO1xuIiwidmFyIGFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduVmFsdWUnKSxcbiAgICBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKTtcblxuLyoqXG4gKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzIHRvIGNvcHkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgdG8uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGlzTmV3ID0gIW9iamVjdDtcbiAgb2JqZWN0IHx8IChvYmplY3QgPSB7fSk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdO1xuXG4gICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgPyBjdXN0b21pemVyKG9iamVjdFtrZXldLCBzb3VyY2Vba2V5XSwga2V5LCBvYmplY3QsIHNvdXJjZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XG4gICAgfVxuICAgIGlmIChpc05ldykge1xuICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weU9iamVjdDtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICovXG5mdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcblxuICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRpbWVzO1xuIiwiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzSW5kZXg7XG4iLCJ2YXIgYmFzZVRpbWVzID0gcmVxdWlyZSgnLi9fYmFzZVRpbWVzJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XG4gIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpLFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgaXNBcmd1bWVudHModmFsdWUpLFxuICAgICAgaXNCdWZmID0gIWlzQXJyICYmICFpc0FyZyAmJiBpc0J1ZmZlcih2YWx1ZSksXG4gICAgICBpc1R5cGUgPSAhaXNBcnIgJiYgIWlzQXJnICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHZhbHVlKSxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcbiAgICAgIHJlc3VsdCA9IHNraXBJbmRleGVzID8gYmFzZVRpbWVzKHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxuICAgICAgICAhKHNraXBJbmRleGVzICYmIChcbiAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIGVudW1lcmFibGUgYGFyZ3VtZW50cy5sZW5ndGhgIGluIHN0cmljdCBtb2RlLlxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcbiAgICAgICAgICAgLy8gTm9kZS5qcyAwLjEwIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIGJ1ZmZlcnMuXG4gICAgICAgICAgIChpc0J1ZmYgJiYgKGtleSA9PSAnb2Zmc2V0JyB8fCBrZXkgPT0gJ3BhcmVudCcpKSB8fFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXG4gICAgICAgICAgIChpc1R5cGUgJiYgKGtleSA9PSAnYnVmZmVyJyB8fCBrZXkgPT0gJ2J5dGVMZW5ndGgnIHx8IGtleSA9PSAnYnl0ZU9mZnNldCcpKSB8fFxuICAgICAgICAgICAvLyBTa2lwIGluZGV4IHByb3BlcnRpZXMuXG4gICAgICAgICAgIGlzSW5kZXgoa2V5LCBsZW5ndGgpXG4gICAgICAgICkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TGlrZUtleXM7XG4iLCIvKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZVxuICogW2BPYmplY3Qua2V5c2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gbmF0aXZlS2V5c0luKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChvYmplY3QgIT0gbnVsbCkge1xuICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVLZXlzSW47XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpLFxuICAgIG5hdGl2ZUtleXNJbiA9IHJlcXVpcmUoJy4vX25hdGl2ZUtleXNJbicpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNJbmAgd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5c0luKG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5c0luKG9iamVjdCk7XG4gIH1cbiAgdmFyIGlzUHJvdG8gPSBpc1Byb3RvdHlwZShvYmplY3QpLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmICghKGtleSA9PSAnY29uc3RydWN0b3InICYmIChpc1Byb3RvIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VLZXlzSW47XG4iLCJ2YXIgYXJyYXlMaWtlS2V5cyA9IHJlcXVpcmUoJy4vX2FycmF5TGlrZUtleXMnKSxcbiAgICBiYXNlS2V5c0luID0gcmVxdWlyZSgnLi9fYmFzZUtleXNJbicpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzSW4obmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYicsICdjJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqL1xuZnVuY3Rpb24ga2V5c0luKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0LCB0cnVlKSA6IGJhc2VLZXlzSW4ob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzSW47XG4iLCJ2YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBrZXlzSW4gPSByZXF1aXJlKCcuL2tleXNJbicpO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBwbGFpbiBvYmplY3QgZmxhdHRlbmluZyBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmdcbiAqIGtleWVkIHByb3BlcnRpZXMgb2YgYHZhbHVlYCB0byBvd24gcHJvcGVydGllcyBvZiB0aGUgcGxhaW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY29udmVydGVkIHBsYWluIG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5hc3NpZ24oeyAnYSc6IDEgfSwgbmV3IEZvbyk7XG4gKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAqXG4gKiBfLmFzc2lnbih7ICdhJzogMSB9LCBfLnRvUGxhaW5PYmplY3QobmV3IEZvbykpO1xuICogLy8gPT4geyAnYSc6IDEsICdiJzogMiwgJ2MnOiAzIH1cbiAqL1xuZnVuY3Rpb24gdG9QbGFpbk9iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gY29weU9iamVjdCh2YWx1ZSwga2V5c0luKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9QbGFpbk9iamVjdDtcbiIsInZhciBhc3NpZ25NZXJnZVZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduTWVyZ2VWYWx1ZScpLFxuICAgIGNsb25lQnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVCdWZmZXInKSxcbiAgICBjbG9uZVR5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19jbG9uZVR5cGVkQXJyYXknKSxcbiAgICBjb3B5QXJyYXkgPSByZXF1aXJlKCcuL19jb3B5QXJyYXknKSxcbiAgICBpbml0Q2xvbmVPYmplY3QgPSByZXF1aXJlKCcuL19pbml0Q2xvbmVPYmplY3QnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNBcnJheUxpa2VPYmplY3QgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlT2JqZWN0JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuL2lzUGxhaW5PYmplY3QnKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpLFxuICAgIHNhZmVHZXQgPSByZXF1aXJlKCcuL19zYWZlR2V0JyksXG4gICAgdG9QbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4vdG9QbGFpbk9iamVjdCcpO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZU1lcmdlYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gKiBkZWVwIG1lcmdlcyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxuICogcmVmZXJlbmNlcyB0byBiZSBtZXJnZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIG1lcmdlLlxuICogQHBhcmFtIHtudW1iZXJ9IHNyY0luZGV4IFRoZSBpbmRleCBvZiBgc291cmNlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1lcmdlRnVuYyBUaGUgZnVuY3Rpb24gdG8gbWVyZ2UgdmFsdWVzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBzb3VyY2UgdmFsdWVzIGFuZCB0aGVpciBtZXJnZWRcbiAqICBjb3VudGVycGFydHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VNZXJnZURlZXAob2JqZWN0LCBzb3VyY2UsIGtleSwgc3JjSW5kZXgsIG1lcmdlRnVuYywgY3VzdG9taXplciwgc3RhY2spIHtcbiAgdmFyIG9ialZhbHVlID0gc2FmZUdldChvYmplY3QsIGtleSksXG4gICAgICBzcmNWYWx1ZSA9IHNhZmVHZXQoc291cmNlLCBrZXkpLFxuICAgICAgc3RhY2tlZCA9IHN0YWNrLmdldChzcmNWYWx1ZSk7XG5cbiAgaWYgKHN0YWNrZWQpIHtcbiAgICBhc3NpZ25NZXJnZVZhbHVlKG9iamVjdCwga2V5LCBzdGFja2VkKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgID8gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcbiAgICA6IHVuZGVmaW5lZDtcblxuICB2YXIgaXNDb21tb24gPSBuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkO1xuXG4gIGlmIChpc0NvbW1vbikge1xuICAgIHZhciBpc0FyciA9IGlzQXJyYXkoc3JjVmFsdWUpLFxuICAgICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgaXNCdWZmZXIoc3JjVmFsdWUpLFxuICAgICAgICBpc1R5cGVkID0gIWlzQXJyICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHNyY1ZhbHVlKTtcblxuICAgIG5ld1ZhbHVlID0gc3JjVmFsdWU7XG4gICAgaWYgKGlzQXJyIHx8IGlzQnVmZiB8fCBpc1R5cGVkKSB7XG4gICAgICBpZiAoaXNBcnJheShvYmpWYWx1ZSkpIHtcbiAgICAgICAgbmV3VmFsdWUgPSBvYmpWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGlzQXJyYXlMaWtlT2JqZWN0KG9ialZhbHVlKSkge1xuICAgICAgICBuZXdWYWx1ZSA9IGNvcHlBcnJheShvYmpWYWx1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc0J1ZmYpIHtcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgICAgbmV3VmFsdWUgPSBjbG9uZUJ1ZmZlcihzcmNWYWx1ZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc1R5cGVkKSB7XG4gICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgICAgIG5ld1ZhbHVlID0gY2xvbmVUeXBlZEFycmF5KHNyY1ZhbHVlLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBuZXdWYWx1ZSA9IFtdO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHNyY1ZhbHVlKSB8fCBpc0FyZ3VtZW50cyhzcmNWYWx1ZSkpIHtcbiAgICAgIG5ld1ZhbHVlID0gb2JqVmFsdWU7XG4gICAgICBpZiAoaXNBcmd1bWVudHMob2JqVmFsdWUpKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gdG9QbGFpbk9iamVjdChvYmpWYWx1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICghaXNPYmplY3Qob2JqVmFsdWUpIHx8IGlzRnVuY3Rpb24ob2JqVmFsdWUpKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gaW5pdENsb25lT2JqZWN0KHNyY1ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBpZiAoaXNDb21tb24pIHtcbiAgICAvLyBSZWN1cnNpdmVseSBtZXJnZSBvYmplY3RzIGFuZCBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBzdGFjay5zZXQoc3JjVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICBtZXJnZUZ1bmMobmV3VmFsdWUsIHNyY1ZhbHVlLCBzcmNJbmRleCwgY3VzdG9taXplciwgc3RhY2spO1xuICAgIHN0YWNrWydkZWxldGUnXShzcmNWYWx1ZSk7XG4gIH1cbiAgYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VNZXJnZURlZXA7XG4iLCJ2YXIgU3RhY2sgPSByZXF1aXJlKCcuL19TdGFjaycpLFxuICAgIGFzc2lnbk1lcmdlVmFsdWUgPSByZXF1aXJlKCcuL19hc3NpZ25NZXJnZVZhbHVlJyksXG4gICAgYmFzZUZvciA9IHJlcXVpcmUoJy4vX2Jhc2VGb3InKSxcbiAgICBiYXNlTWVyZ2VEZWVwID0gcmVxdWlyZSgnLi9fYmFzZU1lcmdlRGVlcCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGtleXNJbiA9IHJlcXVpcmUoJy4va2V5c0luJyksXG4gICAgc2FmZUdldCA9IHJlcXVpcmUoJy4vX3NhZmVHZXQnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tZXJnZWAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHtudW1iZXJ9IHNyY0luZGV4IFRoZSBpbmRleCBvZiBgc291cmNlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIG1lcmdlZCB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIHNvdXJjZSB2YWx1ZXMgYW5kIHRoZWlyIG1lcmdlZFxuICogIGNvdW50ZXJwYXJ0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZU1lcmdlKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCwgY3VzdG9taXplciwgc3RhY2spIHtcbiAgaWYgKG9iamVjdCA9PT0gc291cmNlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGJhc2VGb3Ioc291cmNlLCBmdW5jdGlvbihzcmNWYWx1ZSwga2V5KSB7XG4gICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICBpZiAoaXNPYmplY3Qoc3JjVmFsdWUpKSB7XG4gICAgICBiYXNlTWVyZ2VEZWVwKG9iamVjdCwgc291cmNlLCBrZXksIHNyY0luZGV4LCBiYXNlTWVyZ2UsIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyXG4gICAgICAgID8gY3VzdG9taXplcihzYWZlR2V0KG9iamVjdCwga2V5KSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gc3JjVmFsdWU7XG4gICAgICB9XG4gICAgICBhc3NpZ25NZXJnZVZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9LCBrZXlzSW4pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VNZXJnZTtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgaXQgcmVjZWl2ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55IHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKlxuICogY29uc29sZS5sb2coXy5pZGVudGl0eShvYmplY3QpID09PSBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaWRlbnRpdHk7XG4iLCIvKipcbiAqIEEgZmFzdGVyIGFsdGVybmF0aXZlIHRvIGBGdW5jdGlvbiNhcHBseWAsIHRoaXMgZnVuY3Rpb24gaW52b2tlcyBgZnVuY2BcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxuICovXG5mdW5jdGlvbiBhcHBseShmdW5jLCB0aGlzQXJnLCBhcmdzKSB7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZyk7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXBwbHk7XG4iLCJ2YXIgYXBwbHkgPSByZXF1aXJlKCcuL19hcHBseScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggdHJhbnNmb3JtcyB0aGUgcmVzdCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xuICBzdGFydCA9IG5hdGl2ZU1heChzdGFydCA9PT0gdW5kZWZpbmVkID8gKGZ1bmMubGVuZ3RoIC0gMSkgOiBzdGFydCwgMCk7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcbiAgICB9XG4gICAgaW5kZXggPSAtMTtcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcbiAgICB3aGlsZSAoKytpbmRleCA8IHN0YXJ0KSB7XG4gICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07XG4gICAgfVxuICAgIG90aGVyQXJnc1tzdGFydF0gPSB0cmFuc2Zvcm0oYXJyYXkpO1xuICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG92ZXJSZXN0O1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGB2YWx1ZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJldHVybiBmcm9tIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb25zdGFudCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBfLnRpbWVzKDIsIF8uY29uc3RhbnQoeyAnYSc6IDEgfSkpO1xuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHMpO1xuICogLy8gPT4gW3sgJ2EnOiAxIH0sIHsgJ2EnOiAxIH1dXG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0c1swXSA9PT0gb2JqZWN0c1sxXSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGNvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29uc3RhbnQ7XG4iLCJ2YXIgY29uc3RhbnQgPSByZXF1aXJlKCcuL2NvbnN0YW50JyksXG4gICAgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpLFxuICAgIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXRUb1N0cmluZ2Agd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBiYXNlU2V0VG9TdHJpbmcgPSAhZGVmaW5lUHJvcGVydHkgPyBpZGVudGl0eSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuYywgJ3RvU3RyaW5nJywge1xuICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICdlbnVtZXJhYmxlJzogZmFsc2UsXG4gICAgJ3ZhbHVlJzogY29uc3RhbnQoc3RyaW5nKSxcbiAgICAnd3JpdGFibGUnOiB0cnVlXG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlU2V0VG9TdHJpbmc7XG4iLCIvKiogVXNlZCB0byBkZXRlY3QgaG90IGZ1bmN0aW9ucyBieSBudW1iZXIgb2YgY2FsbHMgd2l0aGluIGEgc3BhbiBvZiBtaWxsaXNlY29uZHMuICovXG52YXIgSE9UX0NPVU5UID0gODAwLFxuICAgIEhPVF9TUEFOID0gMTY7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVOb3cgPSBEYXRlLm5vdztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCdsbCBzaG9ydCBvdXQgYW5kIGludm9rZSBgaWRlbnRpdHlgIGluc3RlYWRcbiAqIG9mIGBmdW5jYCB3aGVuIGl0J3MgY2FsbGVkIGBIT1RfQ09VTlRgIG9yIG1vcmUgdGltZXMgaW4gYEhPVF9TUEFOYFxuICogbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZXN0cmljdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNob3J0YWJsZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gc2hvcnRPdXQoZnVuYykge1xuICB2YXIgY291bnQgPSAwLFxuICAgICAgbGFzdENhbGxlZCA9IDA7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdGFtcCA9IG5hdGl2ZU5vdygpLFxuICAgICAgICByZW1haW5pbmcgPSBIT1RfU1BBTiAtIChzdGFtcCAtIGxhc3RDYWxsZWQpO1xuXG4gICAgbGFzdENhbGxlZCA9IHN0YW1wO1xuICAgIGlmIChyZW1haW5pbmcgPiAwKSB7XG4gICAgICBpZiAoKytjb3VudCA+PSBIT1RfQ09VTlQpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1swXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY291bnQgPSAwO1xuICAgIH1cbiAgICByZXR1cm4gZnVuYy5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvcnRPdXQ7XG4iLCJ2YXIgYmFzZVNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fYmFzZVNldFRvU3RyaW5nJyksXG4gICAgc2hvcnRPdXQgPSByZXF1aXJlKCcuL19zaG9ydE91dCcpO1xuXG4vKipcbiAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGBmdW5jYCB0byByZXR1cm4gYHN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgc2V0VG9TdHJpbmcgPSBzaG9ydE91dChiYXNlU2V0VG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFRvU3RyaW5nO1xuIiwidmFyIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpLFxuICAgIG92ZXJSZXN0ID0gcmVxdWlyZSgnLi9fb3ZlclJlc3QnKSxcbiAgICBzZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFRvU3RyaW5nJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmVzdGAgd2hpY2ggZG9lc24ndCB2YWxpZGF0ZSBvciBjb2VyY2UgYXJndW1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VSZXN0KGZ1bmMsIHN0YXJ0KSB7XG4gIHJldHVybiBzZXRUb1N0cmluZyhvdmVyUmVzdChmdW5jLCBzdGFydCwgaWRlbnRpdHkpLCBmdW5jICsgJycpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VSZXN0O1xuIiwidmFyIGVxID0gcmVxdWlyZSgnLi9lcScpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIHZhbHVlIGFyZ3VtZW50LlxuICogQHBhcmFtIHsqfSBpbmRleCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIGluZGV4IG9yIGtleSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gb2JqZWN0IFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgb2JqZWN0IGFyZ3VtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSXRlcmF0ZWVDYWxsKHZhbHVlLCBpbmRleCwgb2JqZWN0KSB7XG4gIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgdHlwZSA9IHR5cGVvZiBpbmRleDtcbiAgaWYgKHR5cGUgPT0gJ251bWJlcidcbiAgICAgICAgPyAoaXNBcnJheUxpa2Uob2JqZWN0KSAmJiBpc0luZGV4KGluZGV4LCBvYmplY3QubGVuZ3RoKSlcbiAgICAgICAgOiAodHlwZSA9PSAnc3RyaW5nJyAmJiBpbmRleCBpbiBvYmplY3QpXG4gICAgICApIHtcbiAgICByZXR1cm4gZXEob2JqZWN0W2luZGV4XSwgdmFsdWUpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0l0ZXJhdGVlQ2FsbDtcbiIsInZhciBiYXNlUmVzdCA9IHJlcXVpcmUoJy4vX2Jhc2VSZXN0JyksXG4gICAgaXNJdGVyYXRlZUNhbGwgPSByZXF1aXJlKCcuL19pc0l0ZXJhdGVlQ2FsbCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmFzc2lnbmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGFzc2lnbmVyIFRoZSBmdW5jdGlvbiB0byBhc3NpZ24gdmFsdWVzLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYXNzaWduZXIgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFzc2lnbmVyKGFzc2lnbmVyKSB7XG4gIHJldHVybiBiYXNlUmVzdChmdW5jdGlvbihvYmplY3QsIHNvdXJjZXMpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gc291cmNlcy5sZW5ndGgsXG4gICAgICAgIGN1c3RvbWl6ZXIgPSBsZW5ndGggPiAxID8gc291cmNlc1tsZW5ndGggLSAxXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZ3VhcmQgPSBsZW5ndGggPiAyID8gc291cmNlc1syXSA6IHVuZGVmaW5lZDtcblxuICAgIGN1c3RvbWl6ZXIgPSAoYXNzaWduZXIubGVuZ3RoID4gMyAmJiB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nKVxuICAgICAgPyAobGVuZ3RoLS0sIGN1c3RvbWl6ZXIpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChzb3VyY2VzWzBdLCBzb3VyY2VzWzFdLCBndWFyZCkpIHtcbiAgICAgIGN1c3RvbWl6ZXIgPSBsZW5ndGggPCAzID8gdW5kZWZpbmVkIDogY3VzdG9taXplcjtcbiAgICAgIGxlbmd0aCA9IDE7XG4gICAgfVxuICAgIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICB2YXIgc291cmNlID0gc291cmNlc1tpbmRleF07XG4gICAgICBpZiAoc291cmNlKSB7XG4gICAgICAgIGFzc2lnbmVyKG9iamVjdCwgc291cmNlLCBpbmRleCwgY3VzdG9taXplcik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUFzc2lnbmVyO1xuIiwidmFyIGJhc2VNZXJnZSA9IHJlcXVpcmUoJy4vX2Jhc2VNZXJnZScpLFxuICAgIGNyZWF0ZUFzc2lnbmVyID0gcmVxdWlyZSgnLi9fY3JlYXRlQXNzaWduZXInKTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmFzc2lnbmAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgbWVyZ2VzIG93biBhbmRcbiAqIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIHNvdXJjZSBvYmplY3RzIGludG8gdGhlXG4gKiBkZXN0aW5hdGlvbiBvYmplY3QuIFNvdXJjZSBwcm9wZXJ0aWVzIHRoYXQgcmVzb2x2ZSB0byBgdW5kZWZpbmVkYCBhcmVcbiAqIHNraXBwZWQgaWYgYSBkZXN0aW5hdGlvbiB2YWx1ZSBleGlzdHMuIEFycmF5IGFuZCBwbGFpbiBvYmplY3QgcHJvcGVydGllc1xuICogYXJlIG1lcmdlZCByZWN1cnNpdmVseS4gT3RoZXIgb2JqZWN0cyBhbmQgdmFsdWUgdHlwZXMgYXJlIG92ZXJyaWRkZW4gYnlcbiAqIGFzc2lnbm1lbnQuIFNvdXJjZSBvYmplY3RzIGFyZSBhcHBsaWVkIGZyb20gbGVmdCB0byByaWdodC4gU3Vic2VxdWVudFxuICogc291cmNlcyBvdmVyd3JpdGUgcHJvcGVydHkgYXNzaWdubWVudHMgb2YgcHJldmlvdXMgc291cmNlcy5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuNS4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7XG4gKiAgICdhJzogW3sgJ2InOiAyIH0sIHsgJ2QnOiA0IH1dXG4gKiB9O1xuICpcbiAqIHZhciBvdGhlciA9IHtcbiAqICAgJ2EnOiBbeyAnYyc6IDMgfSwgeyAnZSc6IDUgfV1cbiAqIH07XG4gKlxuICogXy5tZXJnZShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IHsgJ2EnOiBbeyAnYic6IDIsICdjJzogMyB9LCB7ICdkJzogNCwgJ2UnOiA1IH1dIH1cbiAqL1xudmFyIG1lcmdlID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KSB7XG4gIGJhc2VNZXJnZShvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gbWVyZ2U7XG4iLCJcbmludGVyZmFjZSBJbmplY3RMaW5rT3B0aW9ucyB7XG4gIHJlbDogc3RyaW5nXG4gIGhyZWY6IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgaW5qZWN0TGluayA9KG9wdGlvbnM6IEluamVjdExpbmtPcHRpb25zKSA9PiB7XG4gIGNvbnN0IGhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpXG5cbiAgT2JqZWN0LmVudHJpZXMob3B0aW9ucykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiBsaW5rLnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKSlcblxuICBoZWFkLmFwcGVuZENoaWxkKGxpbmspO1xufVxuIiwiaW1wb3J0IHsgQ2FsbGJhY2sgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IHsgaXNWYWx1ZSB9IGZyb20gXCIuL2luZGV4XCI7XG5cbnR5cGUgVmlzaXRvciA9IENhbGxiYWNrPFtQcm9wZXJ0eUtleSwgdW5rbm93biwgc3RyaW5nXT5cblxuZXhwb3J0IGNvbnN0IGl0ZXJhdG9yID0gKGlucHV0OiB1bmtub3duLCB2aXNpdG9yOiBWaXNpdG9yLCBwYXRoPzogc3RyaW5nKTogYW55ID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG5cbiAgICByZXR1cm4gaW5wdXQubWFwKChlbCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IG5ld1BhdGggPSBbcGF0aCwgaW5kZXhdLmZpbHRlcihpc1ZhbHVlKS5qb2luKCcuJylcbiAgICAgIHJldHVybiBpdGVyYXRvcih2aXNpdG9yKGluZGV4LCBlbCwgbmV3UGF0aCksIHZpc2l0b3IsIG5ld1BhdGgpXG4gICAgfSlcbiAgfVxuXG4gIGlmICh0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnICYmIGlucHV0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGlucHV0KS5yZWR1Y2UoKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBjb25zdCBuZXdQYXRoID0gW3BhdGgsIGtleV0uZmlsdGVyKGlzVmFsdWUpLmpvaW4oJy4nKVxuICAgICAgYWNjW2tleV0gPSBpdGVyYXRvcih2aXNpdG9yKGtleSwgdmFsdWUsIG5ld1BhdGgpLCB2aXNpdG9yLCBuZXdQYXRoKVxuXG4gICAgICByZXR1cm4gYWNjXG4gICAgfSwge30gYXMgYW55KVxuICB9XG5cbiAgcmV0dXJuIGlucHV0XG59XG4iLCJpbXBvcnQgeyBBbnlPYmplY3QgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IGxvZGFzaE1lcmdlIGZyb20gJ2xvZGFzaC9tZXJnZSdcblxuZXhwb3J0IGNvbnN0IGlzRW1wdHlWYWx1ZSA9ICh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIG51bGwgfCB1bmRlZmluZWQgPT5cbiAgIXZhbHVlICYmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuZXhwb3J0IGNvbnN0IGlzVmFsdWUgPSA8VD4odmFsdWU6IFQpOiB2YWx1ZSBpcyBFeGNsdWRlPFQsIG51bGwgfCB1bmRlZmluZWQ+ID0+ICFpc0VtcHR5VmFsdWUodmFsdWUpXG5leHBvcnQgY29uc3Qgbm9vcCA9ICgpID0+IHVuZGVmaW5lZFxuXG5leHBvcnQgY29uc3QgaXNQcmltaXRpdmUgPSAodmFsdWU6IHVua25vd24pOiBib29sZWFuID0+XG4gICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykgfHwgdmFsdWUgPT09IG51bGxcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNvbnN0YW50cyA9IDxLIGV4dGVuZHMgc3RyaW5nPiguLi5jb25zdGFudHM6IEtbXSkgPT4ge1xuICByZXR1cm4gY29uc3RhbnRzLnJlZHVjZTx7IFtQIGluIEtdOiBQIH0+KChhY2MsIGNvbnN0YW50KSA9PiB7XG4gICAgYWNjW2NvbnN0YW50XSA9IGNvbnN0YW50XG4gICAgcmV0dXJuIGFjY1xuICB9LCB7fSBhcyB7IFtQIGluIEtdOiBQIH0pXG59XG5cbmV4cG9ydCBjb25zdCBwaWNrID0gPFRWYWx1ZSBleHRlbmRzIEFueU9iamVjdD4ob2JqOiBUVmFsdWUsIC4uLnByb3BzOiAoa2V5b2YgVFZhbHVlKVtdKSA9PiB7XG4gIHJldHVybiBwcm9wcy5yZWR1Y2UoKHJlc3VsdCwgcHJvcCkgPT4ge1xuICAgIHJlc3VsdFtwcm9wXSA9IG9ialtwcm9wXVxuICAgIHJldHVybiByZXN1bHRcbiAgfSwge30gYXMgYW55KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gb21pdDxUIGV4dGVuZHMgQW55T2JqZWN0LCBQIGV4dGVuZHMgc3RyaW5nW10+KG9iajogVCwgLi4ucHJvcHM6IFApOiBPbWl0PFQsIFBbbnVtYmVyXT4ge1xuICBjb25zdCByZXN1bHQgPSB7IC4uLm9iaiB9XG4gIHByb3BzLmZvckVhY2gocHJvcCA9PiB7XG4gICAgZGVsZXRlIHJlc3VsdFtwcm9wXVxuICB9KVxuICByZXR1cm4gcmVzdWx0XG59XG5cbmV4cG9ydCBjb25zdCBnZXQgPSAob2JqOiBBbnlPYmplY3QsIHBhdGg6IHN0cmluZywgZGVmVmFsdWU/OiB1bmtub3duKTogYW55ID0+IHtcbiAgaWYgKCFwYXRoKSByZXR1cm4gdW5kZWZpbmVkXG4gIGNvbnN0IHBhdGhBcnJheSA9IChBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aCA6IHBhdGgubWF0Y2goLyhbXlsuXFxdXSkrL2cpKSBhcyBzdHJpbmdbXVxuICBjb25zdCByZXN1bHQgPSBwYXRoQXJyYXkucmVkdWNlKChwcmV2T2JqOiBBbnlPYmplY3QsIGtleTogc3RyaW5nKSA9PiBwcmV2T2JqICYmIHByZXZPYmpba2V5XSwgb2JqKVxuICAvLyBJZiBmb3VuZCB2YWx1ZSBpcyB1bmRlZmluZWQgcmV0dXJuIGRlZmF1bHQgdmFsdWU7IG90aGVyd2lzZSByZXR1cm4gdGhlIHZhbHVlXG4gIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZlZhbHVlIDogcmVzdWx0XG59XG5cbmV4cG9ydCBjb25zdCBzZXQgPSAob2JqOiBBbnlPYmplY3QsIHBhdGg6IHN0cmluZywgdmFsdWU6IHVua25vd24pID0+IHtcbiAgY29uc3QgcGF0aEFycmF5ID0gKEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoIDogcGF0aC5tYXRjaCgvKFteWy5cXF1dKSsvZykpIGFzIHN0cmluZ1tdXG5cbiAgcmV0dXJuIHBhdGhBcnJheS5yZWR1Y2UoKGFjYywga2V5LCBpKSA9PiB7XG4gICAgaWYgKGFjY1trZXldID09PSB1bmRlZmluZWQpIGFjY1trZXldID0ge31cbiAgICBpZiAoaSA9PT0gcGF0aEFycmF5Lmxlbmd0aCAtIDEpIGFjY1trZXldID0gdmFsdWVcbiAgICByZXR1cm4gYWNjW2tleV1cbiAgfSwgb2JqKVxufVxuXG5leHBvcnQgY29uc3QgaGV4VG9SZ2IgPSAoaGV4OiBzdHJpbmcpID0+IHtcbiAgY29uc3QgY2hhcnMgPSBoZXguc2xpY2UoMSlcblxuICBpZiAoY2hhcnMubGVuZ3RoID09PSAzKSB7XG4gICAgaGV4ID0gY2hhcnNcbiAgICAgIC5zcGxpdCgnJylcbiAgICAgIC5tYXAodmFsID0+IGAke3ZhbH0ke3ZhbH1gKVxuICAgICAgLmpvaW4oJycpXG4gIH1cblxuICBjb25zdCByZXN1bHQgPSAvXiM/KFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pJC9pLmV4ZWMoaGV4KVxuXG4gIHJldHVybiByZXN1bHRcbiAgICA/IHtcbiAgICAgICAgcjogcGFyc2VJbnQocmVzdWx0WzFdLCAxNiksXG4gICAgICAgIGc6IHBhcnNlSW50KHJlc3VsdFsyXSwgMTYpLFxuICAgICAgICBiOiBwYXJzZUludChyZXN1bHRbM10sIDE2KVxuICAgICAgfVxuICAgIDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBjb25zdCBpc0pzb25TYW1lID0gKC4uLnZhbHVlczogdW5rbm93bltdKSA9PiB7XG4gIHJldHVybiB2YWx1ZXMubWFwKHZhbHVlID0+IEpTT04uc3RyaW5naWZ5KHZhbHVlKSkuZXZlcnkoKHZhbCwgXywgYXJyKSA9PiB2YWwgPT09IGFyclswXSlcbn1cblxuZXhwb3J0IGNvbnN0IHJnYlRvUmdiYSA9IChyZ2I6IHN0cmluZywgYWxwaGEgPSAxKTogc3RyaW5nID0+IHJnYi5yZXBsYWNlKCcpJywgYCwgJHthbHBoYX0pYCkucmVwbGFjZSgncmdiJywgJ3JnYmEnKVxuXG5leHBvcnQgY29uc3QgbWVyZ2UgPSBsb2Rhc2hNZXJnZVxuXG5leHBvcnQgY29uc3QgZGV2aWNlcyA9IFsnZGVza3RvcCcsICdsYXB0b3AnLCAndGFibGV0JywgJ21vYmlsZSddIGFzIGNvbnN0XG5cbmV4cG9ydCBjb25zdCBCUkVBS1BPSU5UUyA9IHtcbiAgbW9iaWxlOiAzMjAsXG4gIHRhYmxldDogNzY4LFxuICBsYXB0b3A6IDEwMjQsXG4gIGRlc2t0b3A6IDE5MjBcbn0gYXMgY29uc3RcblxuZXhwb3J0ICogZnJvbSAnLi90eXBlcydcbmV4cG9ydCAqIGZyb20gJy4vZG9tJ1xuZXhwb3J0ICogZnJvbSAnLi9pdGVyYXRvcidcbiIsImltcG9ydCB7IEFueU9iamVjdCwgRGV2aWNlLCBkZXZpY2VzLCBFeHRyYWN0UnVsZXMsIGlzVmFsdWUsIGl0ZXJhdG9yLCBMYXllciwgUnVsZSB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHsgQW55U3RhdGUgfSBmcm9tICcuLi9wcm9tb3MvU2ltcGxlR2lmdC90eXBlcydcblxuY29uc3QgaXNWYWxpZExheWVyID0gKHN0YXRlOiBBbnlPYmplY3QgPSB7fSk6IHN0YXRlIGlzIExheWVyID0+XG4gIHR5cGVvZiBzdGF0ZSA9PT0gJ29iamVjdCcgJiYgaXNWYWx1ZShzdGF0ZSkgJiYgZGV2aWNlcy5ldmVyeShkZXZpY2UgPT4gZGV2aWNlIGluIHN0YXRlKVxuXG5leHBvcnQgY29uc3QgZ2V0UnVsZXMgPSA8VFN0YXRlIGV4dGVuZHMgQW55U3RhdGUsIFREZXZpY2UgZXh0ZW5kcyBEZXZpY2UgPSAnZGVza3RvcCc+KFxuICBzdGF0ZTogVFN0YXRlLFxuICBkZXZpY2U6IFREZXZpY2Vcbik6IEV4dHJhY3RSdWxlczxUU3RhdGUsIFREZXZpY2U+ID0+IHtcbiAgaWYgKCFzdGF0ZSkgcmV0dXJuIHN0YXRlXG5cbiAgcmV0dXJuIGl0ZXJhdG9yKHN0YXRlLCAoX2tleSwgdmFsdWU6IGFueSkgPT4ge1xuICAgIGlmIChpc1ZhbGlkTGF5ZXIodmFsdWUpKSB7XG4gICAgICBjb25zdCByZXN1bHRSdWxlcyA9IHZhbHVlW2RldmljZV1cbiAgICAgIGlmICgncGFyZW50JyBpbiByZXN1bHRSdWxlcyAmJiBpc1ZhbHVlKHJlc3VsdFJ1bGVzLnBhcmVudCkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlW3Jlc3VsdFJ1bGVzLnBhcmVudF1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHRSdWxlc1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZVxuICB9KSBhcyBFeHRyYWN0UnVsZXM8VFN0YXRlLCBURGV2aWNlPlxufVxuIiwiaW1wb3J0IHsgRGV2aWNlIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgeyBnZXRSdWxlcyB9IGZyb20gJy4uL2hlbHBlcnMvZ2V0RGV2aWNlU3RhdGUnXG5pbXBvcnQgeyBBbnlTdGF0ZSB9IGZyb20gJy4uL3Byb21vcy9TaW1wbGVHaWZ0L3R5cGVzJ1xuXG5leHBvcnQgY29uc3QgdXNlR2V0UnVsZXMgPSA8VFN0YXRlIGV4dGVuZHMgQW55U3RhdGUsIFREZXZpY2UgZXh0ZW5kcyBEZXZpY2U+KHN0YXRlOiBUU3RhdGUsIGRldmljZTogVERldmljZSkgPT5cbiAgZ2V0UnVsZXM8VFN0YXRlLCBURGV2aWNlPihzdGF0ZSwgZGV2aWNlKVxuIiwiaW1wb3J0IHsgQlJFQUtQT0lOVFMsIERldmljZSB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHsgdXNlTGF5b3V0RWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgeyBNdXRhYmxlUmVmIH0gZnJvbSAncHJlYWN0L2hvb2tzJ1xuXG5pbnRlcmZhY2UgT3B0aW9ucyB7XG4gIHRhcmdldFJlZjogTXV0YWJsZVJlZjxIVE1MRGl2RWxlbWVudD5cbiAgLyoqXG4gICAqIFByb21vINCy0YHRgtGA0LDQuNCy0LDQtdGC0YHRjyDQsiDRgNCw0LfQvdGL0LUgRE9NINC4INC80Ysg0L3QtSDQt9C90LDQtdC8INGA0LDQt9C80LXRgCDQutCw0LrQvtCz0L4g0LrQvtC90YLQtdC50L3QtdGA0LBcbiAgICog0Y/QstC70Y/QtdGC0YHRjyDQvdGD0LbQvdGL0LwuINCd0LDQv9GA0LjQvNC10YAgR2lmdCog0LfQsNC90LjQvNCw0LXRgiDQstGB0LXQs9C+IDMwcHgsINC4INC90LXQvtCx0YXQvtC00LjQvNGL0Lkg0LrQvtC90YLQtdC50L3QtdGAXG4gICAqINC80L7QttC10YIg0L3QsNGF0L7QtNC40YLRjNGB0Y8g0LPQvtGA0LDQt9C00L4g0LLRi9GI0LUuXG4gICAqL1xuICBwYXJlbnRLZXk/OiBzdHJpbmdcbiAgYnJlYWtwb2ludHM/OiB0eXBlb2YgQlJFQUtQT0lOVFNcbn1cblxuZXhwb3J0IGNvbnN0IHVzZUNvbnRhaW5lckRldmljZSA9ICh7XG4gIHRhcmdldFJlZixcbiAgcGFyZW50S2V5ID0gJ2RldmljZS1jb250YWluZXInLFxuICBicmVha3BvaW50cyA9IEJSRUFLUE9JTlRTXG59OiBPcHRpb25zKSA9PiB7XG4gIGNvbnN0IFtkZXZpY2UsIHNldERldmljZV0gPSB1c2VTdGF0ZTxEZXZpY2U+KCdkZXNrdG9wJylcblxuICBjb25zdCBjaGVja0RldmljZSA9IChwYXJlbnQ6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgcGFyZW50V2lkdGggPSBwYXJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggfHwgMFxuICAgIGNvbnN0IHNvcnRlZEJyZWFrcG9pbnRzID0gT2JqZWN0LmVudHJpZXMoeyAuLi5icmVha3BvaW50cyB9KS5zb3J0KChbXzEsIHZhbHVlQV0sIFtfMiwgdmFsdWVCXSkgPT4gdmFsdWVBIC0gdmFsdWVCKVxuXG4gICAgY29uc3QgZmluZERldmljZSA9XG4gICAgICAoc29ydGVkQnJlYWtwb2ludHMuZmluZCgoW18xLCB2YWx1ZV0sIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IFtfMiwgbmV4dFZhbHVlXSA9IHNvcnRlZEJyZWFrcG9pbnRzW2luZGV4ICsgMV0gfHwgW11cblxuICAgICAgICByZXR1cm4gcGFyZW50V2lkdGggPj0gdmFsdWUgJiYgcGFyZW50V2lkdGggPCBuZXh0VmFsdWVcbiAgICAgIH0pPy5bMF0gYXMgRGV2aWNlKSB8fCAnZGVza3RvcCdcblxuICAgIHNldERldmljZShmaW5kRGV2aWNlKVxuICB9XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBwYXJlbnRFbGVtZW50ID0gdGFyZ2V0UmVmLmN1cnJlbnQuY2xvc2VzdChgW2RhdGEtJHtwYXJlbnRLZXl9XWApXG5cbiAgICBpZiAocGFyZW50RWxlbWVudCkge1xuICAgICAgY29uc3QgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gY2hlY2tEZXZpY2UocGFyZW50RWxlbWVudCkpXG4gICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKHBhcmVudEVsZW1lbnQpXG5cbiAgICAgIGNoZWNrRGV2aWNlKHBhcmVudEVsZW1lbnQpXG4gICAgfVxuICB9LCBbXSlcblxuICByZXR1cm4gZGV2aWNlXG59XG4iLCJpbXBvcnQgeyBBbnlPYmplY3QsIGRldmljZXMsIEZpdE9wdGlvbiwgaGV4VG9SZ2IsIGlzRW1wdHlWYWx1ZSwgaXNWYWx1ZSwgcmdiVG9SZ2JhIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgeyBFbWl0dGVyVHlwZSB9IGZyb20gJ3NyYy9yZW5kZXJEcml2ZXInXG5pbXBvcnQgeyBpbmplY3RTdHlsZVJ1bGVzLCBTdHlsZVJ1bGVzIH0gZnJvbSAnc3JjL3V0aWxzL2luamVjdFN0eWxlUnVsZXMnXG5pbXBvcnQgeyBpc1ZhbGlkU3R5bGVLZXkgfSBmcm9tICcuL2lzVmFsaWRTdHlsZUtleSdcblxuLyoqXG4gKiDQn9C70LDQs9C40L0g0L/RgNC40LzQtdC90Y/QtdGCINC/0YDQsNCy0LjQu9CwOiDRgdGC0LjQu9C4LCBpbm5lclRleHQgLi4uXG4gKiDQldGB0LvQuCDQutC+0L3RgtC10L3RgtCwINC90LXRgiwg0YLQviDQndC+0LTQsCDRgdC60YDRi9Cy0LDQtdGC0YHRj1xuICovXG5cbnR5cGUgQ3VzdG9tU3R5bGVzID0gUGFydGlhbDxcbiAgT21pdDxTdHlsZVJ1bGVzLCAnYm9yZGVyV2lkdGgnIHwgJ21pbkhlaWdodCcgfCAnbWluV2lkdGgnIHwgJ2ZvbnRTaXplJz4gJiB7XG4gICAgbWluSGVpZ2h0OiBudW1iZXJcbiAgICBtaW5XaWR0aDogbnVtYmVyXG4gICAgZm9udFNpemU6IG51bWJlclxuICB9XG4+XG5cbmRlY2xhcmUgbW9kdWxlICdzcmMvcmVuZGVyRHJpdmVyJyB7XG4gIGludGVyZmFjZSBSZW5kZXJEcml2ZXJSdWxlIGV4dGVuZHMgQ3VzdG9tU3R5bGVzIHtcbiAgICBpbm5lckhUTUw/OiBzdHJpbmdcbiAgICBpbm5lclRleHQ/OiBzdHJpbmdcbiAgICBjb3JuZXI/OiBudW1iZXJcbiAgICBiYWNrZ3JvdW5kRml0PzogRml0T3B0aW9uXG4gICAgYmFja2dyb3VuZENvbG9yT3BhY2l0eT86IG51bWJlclxuICAgIGlzQm9sZD86IGJvb2xlYW5cbiAgICBpc0l0YWxpYz86IGJvb2xlYW5cbiAgICBpc1Rocm91Z2g/OiBib29sZWFuXG4gICAgJGF0dHJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPlxuICB9XG59XG5cbmNvbnN0IHdyYXBUbyA9ICh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyLCB1bnRpbDogJyUnIHwgJ3B4JykgPT4gYCR7dmFsdWV9JHt1bnRpbH1gXG5cbmNvbnN0IHRvUHggPSAoa2V5OiBzdHJpbmcpID0+IGtleS5zdGFydHNXaXRoKCdweF8nKVxuY29uc3QgdG9QZXJjZW50ID0gKGtleTogc3RyaW5nKSA9PiBrZXkuc3RhcnRzV2l0aCgncGVyY2VudF8nKVxuXG5jb25zdCBmb3JtYXRSdWxlID0gKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG4gIGxldCBuZXdLZXkgPSBrZXlcbiAgbGV0IG5ld1ZhbHVlID0gdmFsdWVcblxuICBpZiAodG9QeChuZXdLZXkpKSB7XG4gICAgbmV3S2V5ID0gbmV3S2V5LnJlcGxhY2UoJ3B4XycsICcnKVxuICAgIG5ld1ZhbHVlID0gd3JhcFRvKHZhbHVlLCAncHgnKVxuICB9XG4gIGlmICh0b1BlcmNlbnQobmV3S2V5KSkge1xuICAgIG5ld0tleSA9IG5ld0tleS5yZXBsYWNlKCdwZXJjZW50XycsICcnKVxuICAgIG5ld1ZhbHVlID0gd3JhcFRvKHZhbHVlLCAnJScpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGtleTogbmV3S2V5LFxuICAgIHZhbHVlOiBuZXdWYWx1ZVxuICB9XG59XG5cbmNvbnN0IERFRkFVTFRfVE9fUFggPSBbXG4gICdib3JkZXJXaWR0aCcsXG4gICdib3JkZXJMZWZ0V2lkdGgnLFxuICAnYm9yZGVyUmlnaHRXaWR0aCcsXG4gICdib3JkZXJUb3BXaWR0aCcsXG4gICdib3JkZXJCb3R0b21XaWR0aCcsXG4gICdtaW5IZWlnaHQnLFxuICAnbWluV2lkdGgnLFxuICAnbWF4V2lkdGgnLFxuICAnbWF4SGVpZ2h0JyxcbiAgJ2ZvbnRTaXplJyxcbiAgJ2hlaWdodCcsXG4gICd3aWR0aCcsXG4gICdsZXR0ZXJTcGFjaW5nJyxcbiAgJ2ZvbnRTaXplJyxcbiAgJ2xlZnQnLFxuICAncmlnaHQnLFxuICAndG9wJyxcbiAgJ2JvdHRvbScsXG4gICdtYXJnaW5Ub3AnLFxuICAnbWFyZ2luQm90dG9tJyxcbiAgJ21hcmdpbkxlZnQnLFxuICAnbWFyZ2luUmlnaHQnLFxuICAncGFkZGluZ1RvcCcsXG4gICdwYWRkaW5nQm90dG9tJyxcbiAgJ3BhZGRpbmdMZWZ0JyxcbiAgJ3BhZGRpbmdSaWdodCdcbl1cblxuZXhwb3J0IGNvbnN0IHBhcnNlUnVsZXMgPSAocnVsZXM6IEFueU9iamVjdCwgbGF5ZXI/OiBzdHJpbmcpID0+IHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHJ1bGVzKVxuXG4gIGlmIChrZXlzLmluY2x1ZGVzKCdpbm5lckhUTUwnKSB8fCBrZXlzLmluY2x1ZGVzKCdpbm5lclRleHQnKSkge1xuICAgIGNvbnNvbGUud2FybihgV2FybmluZyEgSW5uZXJIVE1MIGFuZCBpbm5lclRleHQgaXMgZGVwcmVjYXRlZC4gVXNlIFwiY2hpbGRyZW5cIiBwcm9wZXJ0eS5gLCBsYXllcilcbiAgfVxuXG4gIGlmICh0eXBlb2YgcnVsZXMgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHJ1bGVzXG4gIH1cblxuICBpZiAoJ3R5cG9ncmFwaHknIGluIHJ1bGVzICYmICdhY2NlbnRUeXBvZ3JhcGh5JyBpbiBydWxlcykge1xuICAgIGNvbnN0IHR5cG9ncmFwaHkgPSBydWxlcy50eXBvZ3JhcGh5XG4gICAgY29uc3QgYWNjZW50VHlwb2dyYXBoeSA9IHJ1bGVzLmFjY2VudFR5cG9ncmFwaHlcblxuICAgIHJ1bGVzID0ge1xuICAgICAgLi4ucnVsZXMsXG4gICAgICAuLi50eXBvZ3JhcGh5LFxuICAgICAgJy0tZm9udC1mYW1pbHknOiBhY2NlbnRUeXBvZ3JhcGh5LmZvbnRGYW1pbHksXG4gICAgICAnLS1hY2NlbnQtY29sb3InOiBhY2NlbnRUeXBvZ3JhcGh5LmNvbG9yLFxuICAgICAgJ3B4Xy0tYWNjZW50LXNpemUnOiBhY2NlbnRUeXBvZ3JhcGh5LmZvbnRTaXplXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJ1bGVzKS5yZWR1Y2UoKGFjYywgW3Byb3BLZXksIHByb3BWYWx1ZV0pID0+IHtcbiAgICBpZiAoREVGQVVMVF9UT19QWC5pbmNsdWRlcyhwcm9wS2V5KSkge1xuICAgICAgcHJvcFZhbHVlID0gd3JhcFRvKHByb3BWYWx1ZSwgJ3B4JylcbiAgICB9XG5cbiAgICBjb25zdCB7IGtleSwgdmFsdWUgfSA9IGZvcm1hdFJ1bGUocHJvcEtleSwgcHJvcFZhbHVlKVxuICAgIGFjY1trZXldID0gdmFsdWVcblxuICAgIGlmIChrZXkgPT09ICdpbm5lckhUTUwnKSB7XG4gICAgICBhY2MuaW5uZXJIVE1MID0gaXNWYWx1ZSh2YWx1ZSkgPyBgJHt2YWx1ZX1gIDogJydcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnaW5uZXJUZXh0Jykge1xuICAgICAgYWNjLmlubmVyVGV4dCA9IGlzVmFsdWUodmFsdWUpID8gYCR7dmFsdWV9YCA6ICcnXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2NoaWxkcmVuJykge1xuICAgICAgYWNjLmNoaWxkcmVuID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IChpc1ZhbHVlKHZhbHVlKSA/IGAke3ZhbHVlfWAgOiAnJykgOiB2YWx1ZVxuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdpbm5lckhUTUwnIHx8IGtleSA9PT0gJ2lubmVyVGV4dCcgfHwga2V5ID09PSAnY2hpbGRyZW4nKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgYWNjLmRpc3BsYXkgPSAnbm9uZSdcbiAgICAgIH0gZWxzZSBpZiAoaXNFbXB0eVZhbHVlKHZhbHVlKSkge1xuICAgICAgICBhY2MuZGlzcGxheSA9ICdub25lJ1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChrZXkuaW5jbHVkZXMoJ2JvcmRlcldpZHRoJykpIHtcbiAgICAgIGFjYy5ib3JkZXJTdHlsZSA9ICdzb2xpZCdcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnY29ybmVyJykge1xuICAgICAgYWNjLmJvcmRlclJhZGl1cyA9IHdyYXBUbyh2YWx1ZSwgJ3B4JylcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnYmFja2dyb3VuZEZpdCcpIHtcbiAgICAgIGFjYy5iYWNrZ3JvdW5kU2l6ZSA9IHZhbHVlIGFzIEZpdE9wdGlvblxuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdiYWNrZ3JvdW5kSW1hZ2UnICYmIGlzVmFsdWUodmFsdWUpKSB7XG4gICAgICBhY2MuYmFja2dyb3VuZEltYWdlID0gYHVybCgke3ZhbHVlfSlgXG4gICAgICBhY2MuYmFja2dyb3VuZFJlcGVhdCA9ICduby1yZXBlYXQnXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2JhY2tncm91bmRDb2xvck9wYWNpdHknICYmIGlzVmFsdWUoYWNjLmJhY2tncm91bmRDb2xvck9wYWNpdHkpICYmIGlzVmFsdWUoYWNjLmJhY2tncm91bmRDb2xvcikpIHtcbiAgICAgIGNvbnN0IHJnYiA9IGhleFRvUmdiKGFjYy5iYWNrZ3JvdW5kQ29sb3IpXG4gICAgICBpZiAocmdiKSB7XG4gICAgICAgIGFjYy5iYWNrZ3JvdW5kQ29sb3IgPSByZ2JUb1JnYmEoYHJnYigke3JnYi5yfSwgJHtyZ2IuZ30sICR7cmdiLmJ9KWAsICthY2MuYmFja2dyb3VuZENvbG9yT3BhY2l0eSAvIDEwMClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnaXNCb2xkJykge1xuICAgICAgYWNjLmZvbnRXZWlnaHQgPSB2YWx1ZSA/ICdib2xkJyA6ICdpbml0aWFsJ1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdpc0l0YWxpYycpIHtcbiAgICAgIGFjYy5mb250U3R5bGUgPSB2YWx1ZSA/ICdpdGFsaWMnIDogJ2luaXRpYWwnXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2lzVGhyb3VnaCcpIHtcbiAgICAgIGFjYy50ZXh0RGVjb3JhdGlvbiA9IHZhbHVlID8gJ2xpbmUtdGhyb3VnaCcgOiAnaW5pdGlhbCdcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjXG4gIH0sIHJ1bGVzKVxufVxuIiwiaW1wb3J0IHsgcGFyc2VSdWxlcyB9IGZyb20gJy4uL2hlbHBlcnMvcGFyc2VSdWxlcydcbmltcG9ydCB7IEFueU9iamVjdCB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuXG5jb25zdCBpc1ZhbGlkUnVsZSA9IChydWxlOiBBbnlPYmplY3QpID0+IHR5cGVvZiBydWxlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShydWxlKSAmJiAncGFyZW50JyBpbiBydWxlXG5cbmV4cG9ydCBjb25zdCB1c2VQYXJzZVJ1bGVzID0gKHN0YXRlOiB1bmtub3duKSA9PlxuICBPYmplY3QuZW50cmllcyhzdGF0ZSkucmVkdWNlKChhY2MsIFtsYXllciwgcnVsZV0pID0+IHtcbiAgICBhY2NbbGF5ZXJdID0gaXNWYWxpZFJ1bGUocnVsZSkgPyBwYXJzZVJ1bGVzKHsgLi4uc3RhdGVbbGF5ZXJdIH0sIGxheWVyKSA6IHJ1bGVcblxuICAgIHJldHVybiBhY2NcbiAgfSwge30pXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5cbmludGVyZmFjZSBQcm9wcyB7XG4gIGNoaWxkcmVuOiBzdHJpbmdcbn1cblxuY29uc3QgRGlzcGxheVRleHQ6IEZDPFByb3BzPiA9ICh7IGNoaWxkcmVuLCAuLi5yZXN0IH0pID0+IHtcbiAgY29uc3QgZm9ybWF0VmFsdWUgPSBjaGlsZHJlbj8ucmVwbGFjZSgnc2NyaXB0JywgJycpPy5yZXBsYWNlKC97eyguKj8pfX0vZywgYDxzcGFuPiQxPC9zcGFuPmApXG5cbiAgcmV0dXJuIDxkaXYgey4uLnJlc3R9IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7IF9faHRtbDogZm9ybWF0VmFsdWUgfX0gLz5cbn1cblxuZXhwb3J0IGRlZmF1bHQgRGlzcGxheVRleHRcbiIsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcblxuZXhwb3J0IGNvbnN0IHVzZVRvZ2dsZSA9ICgpID0+IHtcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIHJldHVybiBbaXNPcGVuLCAoKSA9PiBzZXRJc09wZW4ocHJldiA9PiAhcHJldildXG59XG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5cbmNvbnN0IENsb3NlSWNvbjogRkMgPSAoKSA9PiAoXG4gIDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjAnIGhlaWdodD0nMjAnIHZpZXdCb3g9JzAgMCAyNCAyNCc+XG4gICAgPHBhdGhcbiAgICAgIGQ9J00xNy42NTkgNC45MjlhMSAxIDAgMSAxIDEuNDE0IDEuNDE0TDEzLjQxNiAxMmw1LjY1NyA1LjY1N2ExIDEgMCAwIDEtMS40MTUgMS40MTRsLTUuNjU2LTUuNjU3LTUuNjU3IDUuNjU3YTEgMSAwIDAgMS0xLjQxNC0xLjQxNEwxMC41ODcgMTIgNC45MzEgNi4zNDNBMSAxIDAgMSAxIDYuMzQ1IDQuOTNsNS42NTcgNS42NTcgNS42NTYtNS42NTdaJ1xuICAgICAgZmlsbD0nY3VycmVudENvbG9yJ1xuICAgID48L3BhdGg+XG4gIDwvc3ZnPlxuKVxuXG5leHBvcnQgZGVmYXVsdCBDbG9zZUljb25cbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcblxuY29uc3QgR2lmdEljb246IEZDID0gKCkgPT4gKFxuICA8c3ZnIHZpZXdCb3g9JzAgMCAxNiAxNic+XG4gICAgPHBhdGhcbiAgICAgIGZpbGw9J2N1cnJlbnRDb2xvcidcbiAgICAgIGZpbGxSdWxlPSdldmVub2RkJ1xuICAgICAgZD0nTTIuMTMgOEg3djcuMzFIMy4yMmExLjA5IDEuMDkgMCAwMS0xLjA5LTEuMDl6TTkgMTUuMzRoMy44MWExLjA5IDEuMDkgMCAwMDEuMDktMS4wOVY4SDl6bTUuOC05Ljk0djEuMTlhLjQ4LjQ4IDAgMDEtLjQ4LjQ4SDEuNzFhLjQ4LjQ4IDAgMDEtLjQ4LS40OFY1LjRjMC0uNTk2LjQ4NC0xLjA4IDEuMDgtMS4wOEg1YTIuNDggMi40OCAwIDAxLTEuNDctMS42NSAxLjYyIDEuNjIgMCAwMS4yNi0xLjQgMS41NyAxLjU3IDAgMDExLS41OGMuMTEtLjAxLjIyLS4wMS4zMyAwYTIuNSAyLjUgMCAwMTIgMUE5IDkgMCAwMTggMy4yMmExMC4zOCAxMC4zOCAwIDAxLjkxLTEuNTQgMi40OSAyLjQ5IDAgMDExLjkzLTFoLjM2Yy4zNjkuMDY1LjcwMi4yNi45NC41NS4zMS40MDcuNDE0LjkzNi4yOCAxLjQzYTIuNDggMi40OCAwIDAxLTEuNDUgMS42NGgyLjc3YTEuMDggMS4wOCAwIDAxMS4wMyAxLjF6TTguNjYgNGE5LjgxIDkuODEgMCAwMDEuOS0uNTUgMS41MiAxLjUyIDAgMDAuODgtMSAuNjguNjggMCAwMC0uMS0uNTkuNi42IDAgMDAtLjM0LS4yMi41OC41OCAwIDAwLS4xOCAwIDEuNTIgMS41MiAwIDAwLTEuMTcuNjNBOS4wNiA5LjA2IDAgMDA4LjY2IDR6bS0zLjMyLS41OEE5LjYyIDkuNjIgMCAwMDcuMjUgNGE4LjU5IDguNTkgMCAwMC0xLTEuNzIgMS41MSAxLjUxIDAgMDAtMS4xOC0uNjNoLS4xM2EuNjYuNjYgMCAwMC0uMzkuMjIuNjYuNjYgMCAwMC0uMDkuNTdjLjEzLjQ0My40NTMuODA0Ljg4Ljk4eidcbiAgICA+PC9wYXRoPlxuICA8L3N2Zz5cbilcblxuZXhwb3J0IGRlZmF1bHQgR2lmdEljb25cbiIsImltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICcuLi91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IHsgaXNWYWx1ZSB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuXG50eXBlIEFuaW1hdGlvbk5hbWUgPSAnZmFkZScgfCAncHVsc2UnIHwgJ3dpZ2dsZScgfCAnZ3JhZGllbnQnXG5cbmNvbnN0IGFuaW1hdGlvbnNNYXAgPSAoYW5pbWF0aW9uczogUmVjb3JkPEFuaW1hdGlvbk5hbWUsIHN0cmluZz4pID0+ICh7XG4gIGZhZGU6IGAke2FuaW1hdGlvbnMuZmFkZX0gMnMgbGluZWFyIGluZmluaXRlYCxcbiAgcHVsc2U6IGAke2FuaW1hdGlvbnMucHVsc2V9IC4zcyBsaW5lYXIgMHMgaW5maW5pdGUgYWx0ZXJuYXRlIGZvcndhcmRzYCxcbiAgd2lnZ2xlOiBgJHthbmltYXRpb25zLndpZ2dsZX0gMnMgbGluZWFyIGluZmluaXRlYCxcbiAgZ3JhZGllbnQ6IGAke2FuaW1hdGlvbnMuZ3JhZGllbnR9IDNzIGVhc2UgaW5maW5pdGVgLFxufSlcblxuZXhwb3J0IGNvbnN0IHVzZUdpZnRSdWxlcyA9IChkZXZpY2VTdGF0ZTogdW5rbm93biwgYW5pbWF0aW9uczogUmVjb3JkPEFuaW1hdGlvbk5hbWUsIHN0cmluZz4pID0+IHtcbiAgY29uc3QgZnVsbEFuaW1hdGlvbnMgPSBhbmltYXRpb25zTWFwKGFuaW1hdGlvbnMpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhkZXZpY2VTdGF0ZSlcbiAgY29uc3QgaGFzSWNvbiA9IHJ1bGVzPy5pY29uPy5oYXNJY29uXG5cbiAgY29uc3QgYXJyb3dSdWxlcyA9IHtcbiAgICBsZWZ0OiBgJHsrKGRldmljZVN0YXRlPy5jb250YWluZXI/LmxlZnQgfHwgMCkgKiAtMSArIDh9cHhgLFxuICAgIGJhY2tncm91bmRDb2xvcjogcnVsZXM/LmNvbnRhaW5lcj8uYmFja2dyb3VuZENvbG9yLFxuICAgIGJvcmRlclRvcFdpZHRoOiBydWxlcz8uY29udGFpbmVyPy5ib3JkZXJXaWR0aCxcbiAgICBib3JkZXJUb3BDb2xvcjogcnVsZXM/LmNvbnRhaW5lcj8uYm9yZGVyQ29sb3IsXG4gICAgYm9yZGVyVG9wU3R5bGU6ICdzb2xpZCcsXG4gICAgYm9yZGVyTGVmdFdpZHRoOiBydWxlcz8uY29udGFpbmVyPy5ib3JkZXJXaWR0aCxcbiAgICBib3JkZXJMZWZ0Q29sb3I6IHJ1bGVzPy5jb250YWluZXI/LmJvcmRlckNvbG9yLFxuICAgIGJvcmRlckxlZnRTdHlsZTogJ3NvbGlkJ1xuICB9XG5cbiAgY29uc3QgYm9keVJ1bGVzID0ge1xuICAgIGxlZnQ6IHJ1bGVzPy5jb250YWluZXI/LmxlZnRcbiAgfVxuXG4gIGNvbnN0IGFsbEFuaW1hdGlvbnMgPSAocnVsZXM/Lmljb24/LmFuaW1hdGlvbnMgfHwgW10pXG4gICAgLm1hcCgoYW5pbWF0aW9uOiBBbmltYXRpb25OYW1lKSA9PiBmdWxsQW5pbWF0aW9uc1thbmltYXRpb25dKVxuICAgIC5qb2luKCcsICcpXG5cbiAgY29uc3QgYmFja2dyb3VuZFN0eWxlcyA9XG4gICAgaXNWYWx1ZShydWxlcz8uaWNvbj8uZ3JhZGllbnRDb2xvcikgJiYgcnVsZXM/Lmljb24/LmFuaW1hdGlvbnMuaW5jbHVkZXMoJ2dyYWRpZW50JylcbiAgICAgID8ge1xuICAgICAgICAgIGJhY2tncm91bmQ6IGBsaW5lYXItZ3JhZGllbnQoLTkwZGVnLCAke3J1bGVzLmljb24/LmJhY2tncm91bmRDb2xvcn0gMCUsICR7cnVsZXM/Lmljb24/LmdyYWRpZW50Q29sb3J9IDEwMCUpIDAlIDAlIC8gNDAwJSA0MDAlYCxcbiAgICAgICAgICBiYWNrZ3JvdW5kU2l6ZTogJzQwMCUgNDAwJSdcbiAgICAgICAgfVxuICAgICAgOiB7fVxuXG4gIGNvbnN0IGljb25SdWxlcyA9IHtcbiAgICAuLi5ydWxlcz8uaWNvbiB8fCB7fSxcbiAgICBhbmltYXRpb246IGFsbEFuaW1hdGlvbnMsXG4gICAgLi4uYmFja2dyb3VuZFN0eWxlc1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBoYXNJY29uLFxuICAgIGFycm93UnVsZXMsXG4gICAgYm9keVJ1bGVzLFxuICAgIGljb25SdWxlc1xuICB9XG59XG4iLCJleHBvcnQgY29uc3QgYmFja2dyb3VuZE9wdGlvbnMgPSBbJ2JhY2tncm91bmRDb2xvcicsICdiYWNrZ3JvdW5kQ29sb3JPcGFjaXR5JywgJ2JhY2tncm91bmRJbWFnZScsICdiYWNrZ3JvdW5kRml0J11cblxuZXhwb3J0IGNvbnN0IHNwYWNpbmdPcHRpb25zID0gW1xuICAnbWFyZ2luVG9wJyxcbiAgJ21hcmdpbkJvdHRvbScsXG4gICdtYXJnaW5MZWZ0JyxcbiAgJ21hcmdpblJpZ2h0JyxcbiAgJ3BhZGRpbmdUb3AnLFxuICAncGFkZGluZ0JvdHRvbScsXG4gICdwYWRkaW5nTGVmdCcsXG4gICdwYWRkaW5nUmlnaHQnXG5dXG5cblxuZXhwb3J0IGNvbnN0IG5vb3BZYU1ldHJpa2EgPSAoZ29hbDogc3RyaW5nKSA9PiBjb25zb2xlLmxvZyhgTm9vcCBZYU1la3Rpa2EgcmVhY2ggZ29hbDogJHtnb2FsfWApXG5leHBvcnQgY29uc3Qgbm9vcEFkRm94ID0gKGdvYWw6IHN0cmluZykgPT4gY29uc29sZS5sb2coYE5vb3AgQWRGb3ggcmVhY2ggZ29hbDogJHtnb2FsfWApXG4iLCJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgeyBpc0pzb25TYW1lLCBwaWNrIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgeyBub29wQWRGb3gsIG5vb3BZYU1ldHJpa2EgfSBmcm9tIFwic3JjL2hlbHBlcnMvY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBjb25zdCB1c2VNZXRyaWNzID0gKHN0YXRlOiB1bmtub3duLCBsYXllck5hbWUgPSAncm9vdCcpID0+IHtcbiAgY29uc3Qgc2F2ZU1ldHJpY3MgPSB1c2VSZWYoKVxuICBjb25zdCB5YVJlYWNoR29hbCA9IHN0YXRlLnlhUmVhY2hHb2FsIHx8IG5vb3BZYU1ldHJpa2FcbiAgY29uc3QgYWRmb3hSZWFjaEdvYWwgPSBzdGF0ZS5hZGZveFJlYWNoR29hbCB8fCBub29wQWRGb3hcbiAgY29uc3QgbWV0cmljcyA9IHBpY2soc3RhdGVbbGF5ZXJOYW1lXSwgJ3lhU2hvdycsICd5YUNsaWNrJywgJ2FkZm94U2hvdycsICdhZGZveENsaWNrJylcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNKc29uU2FtZShzYXZlTWV0cmljcy5jdXJyZW50LCBtZXRyaWNzKSkge1xuICAgICAgaWYgKG1ldHJpY3MueWFTaG93KSB7XG4gICAgICAgIHlhUmVhY2hHb2FsKG1ldHJpY3MueWFTaG93KVxuICAgICAgfVxuICAgICAgaWYgKG1ldHJpY3MueWFTaG93KSB7XG4gICAgICAgIGFkZm94UmVhY2hHb2FsKG1ldHJpY3MuYWRmb3hTaG93KVxuICAgICAgfVxuICAgIH1cbiAgICBzYXZlTWV0cmljcy5jdXJyZW50ID0gbWV0cmljc1xuICB9LCBbbWV0cmljc10pXG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBpZiAobWV0cmljcy55YUNsaWNrKSB7XG4gICAgICB5YVJlYWNoR29hbChtZXRyaWNzLnlhQ2xpY2spXG4gICAgfVxuICAgIGlmIChtZXRyaWNzLmFkZm94Q2xpY2spIHtcbiAgICAgIGFkZm94UmVhY2hHb2FsKG1ldHJpY3MuYWRmb3hDbGljaylcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IGluamVjdExpbmssIGl0ZXJhdG9yIH0gZnJvbSBcIkBhZHN0b3JlL3V0aWxzXCI7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8gfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiOyAvLyBodHRwczovL2dpdGh1Yi5jb20vRG93bmxvYWQvcHJlYWN0LWhlbG1ldC9pc3N1ZXMvMzRcblxuZXhwb3J0IGNvbnN0IHVzZUV4dHJhY3RGb250cyA9IChzdGF0ZTogdW5rbm93bikgPT4ge1xuICBjb25zdCBmb250cyA9IG5ldyBTZXQoW10pXG5cbiAgaXRlcmF0b3Ioc3RhdGUsIChrZXksIHZhbHVlKSA9PiB7XG4gICAgaWYgKGtleSA9PT0gJ2ZvbnRGYW1pbHknKSB7XG4gICAgICBmb250cy5hZGQodmFsdWUpXG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlXG4gIH0pXG5cbiAgY29uc3QgZm9udExpbmtzID0gdXNlTWVtbygoKSA9PiBBcnJheS5mcm9tKGZvbnRzLnZhbHVlcygpKS5tYXAoZm9udCA9PiAoe1xuICAgIHJlbDogJ3N0eWxlc2hlZXQnLFxuICAgIGhyZWY6IGBodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9JHtmb250fTozMDAsNDAwLDUwMCw3MDAmZGlzcGxheT1zd2FwYFxuICB9KSksIFtmb250c10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBmb250TGlua3MuZm9yRWFjaCgobGluaykgPT4gaW5qZWN0TGluayhsaW5rKSlcbiAgfSwgW2ZvbnRMaW5rc10pXG59XG4iLCJpbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgRkMsIHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlR2lmdE9wZW4gfSBmcm9tICdzcmMvaG9va3MvdXNlR2lmdE9wZW4nXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdzcmMvaGVscGVycy9yZW5kZXInXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlR2V0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VDb250YWluZXJEZXZpY2UgfSBmcm9tICdzcmMvaG9va3MvdXNlQ29udGFpbmVyRGV2aWNlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IERpc3BsYXlUZXh0IGZyb20gJ3NyYy9jb21wb25lbnRzL0Rpc3BsYXlUZXh0J1xuaW1wb3J0IHsgdXNlVG9nZ2xlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVRvZ2dsZSdcbmltcG9ydCBDbG9zZUljb24gZnJvbSAnc3JjL2NvbXBvbmVudHMvQ2xvc2VJY29uJ1xuaW1wb3J0IEdpZnRJY29uIGZyb20gJ3NyYy9jb21wb25lbnRzL0dpZnRJY29uJ1xuaW1wb3J0IHsgdXNlR2lmdFJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3Byb21vcy91c2VHaWZ0UnVsZXMnXG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQgeyB1c2VNZXRyaWNzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZU1ldHJpY3MnXG5pbXBvcnQgeyB1c2VFeHRyYWN0Rm9udHMgfSBmcm9tICdzcmMvaG9va3MvdXNlRXh0cmFjdEZvbnRzJ1xuXG5jb25zdCBTaW1wbGVHaWZ0OiBGQzxTdGF0ZT4gPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3QgW2xlZ2FsSXNPcGVuLCB0b2dnbGVMZWdhbElzT3Blbl0gPSB1c2VUb2dnbGUoKVxuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZTxTdGF0ZT4oKVxuICBjb25zdCBkZXZpY2UgPSB1c2VDb250YWluZXJEZXZpY2UoeyB0YXJnZXRSZWY6IHJvb3RSZWYgfSlcbiAgY29uc3QgZGV2aWNlU3RhdGUgPSB1c2VHZXRSdWxlcyhzdGF0ZSwgZGV2aWNlKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG4gIGNvbnN0IG9uQ2xpY2sgPSB1c2VNZXRyaWNzKGRldmljZVN0YXRlKVxuICBjb25zdCB7IGlzT3Blbiwgb25Ub2dnbGUgfSA9IHVzZUdpZnRPcGVuKGRldmljZVN0YXRlPy5jb250YWluZXI/LmRlbGF5KVxuICBjb25zdCB7IGhhc0ljb24sIGljb25SdWxlcywgYm9keVJ1bGVzLCBhcnJvd1J1bGVzIH0gPSB1c2VHaWZ0UnVsZXMoZGV2aWNlU3RhdGUsIHtcbiAgICBmYWRlOiBzdHlsZXMuZmFkZWluLFxuICAgIHB1bHNlOiBzdHlsZXMucHVsc2UsXG4gICAgd2lnZ2xlOiBzdHlsZXMud2lnZ2xlLFxuICAgIGdyYWRpZW50OiBzdHlsZXMuZ3JhZGllbnRcbiAgfSlcbiAgdXNlRXh0cmFjdEZvbnRzKGRldmljZVN0YXRlKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMubGVnYWxPcGVuXTogbGVnYWxJc09wZW5cbiAgICAgIH0pfVxuICAgICAgcmVmPXtyb290UmVmfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaWNvbn0gc3R5bGU9e2ljb25SdWxlc30gb25DbGljaz17b25Ub2dnbGV9PlxuICAgICAgICB7aGFzSWNvbiAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pY29uVGFyZ2V0fT5cbiAgICAgICAgICAgIDxHaWZ0SWNvbiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMuYm9keSwgeyBbc3R5bGVzLmJvZHlPcGVuXTogaXNPcGVuIH0pfSBzdHlsZT17Ym9keVJ1bGVzfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5hcnJvd30gc3R5bGU9e2Fycm93UnVsZXN9IC8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY2xvc2V9IHN0eWxlPXtydWxlcy5jbG9zZX0gb25DbGljaz17b25Ub2dnbGV9PlxuICAgICAgICAgIDxDbG9zZUljb24gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGFpbmVyfSBzdHlsZT17cnVsZXMuY29udGFpbmVyfT5cbiAgICAgICAgICA8YSBocmVmPXtydWxlcy5yb290Py5vZmZlcn0gdGFyZ2V0PSdfYmxhbmsnIHJlbD0nbm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlcicgb25DbGljaz17b25DbGlja30+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmlubmVyfT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgICAgICAgICAgPERpc3BsYXlUZXh0IGNsYXNzTmFtZT17c3R5bGVzLnRleHR9IHN0eWxlPXtydWxlcy50ZXh0fT5cbiAgICAgICAgICAgICAgICB7cnVsZXM/LnRleHQ/LmNoaWxkcmVufVxuICAgICAgICAgICAgICA8L0Rpc3BsYXlUZXh0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMuYnV0dG9uLCB7XG4gICAgICAgICAgICAgICAgW3N0eWxlcy5idXR0b25BbmltYXRlZF06IHJ1bGVzLmJ1dHRvbi5pc0FuaW1hdGVkXG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICBzdHlsZT17cnVsZXMuYnV0dG9ufVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7cnVsZXMuYnV0dG9uPy5jaGlsZHJlbn1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsV3JhcHBlcn0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsfSBzdHlsZT17cnVsZXMubGVnYWx9PlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbFRleHR9PlxuICAgICAgICAgICAgICAgIDxzcGFuPntydWxlcz8ubGVnYWw/LmNoaWxkcmVufTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbEJ1dHRvbn0gb25DbGljaz17dG9nZ2xlTGVnYWxJc09wZW59PlxuICAgICAgICAgICAgICAgICAge2xlZ2FsSXNPcGVuID8gcnVsZXM/LmxlZ2FsPy5idXR0b25PcGVuVGV4dCA6IHJ1bGVzPy5sZWdhbD8uYnV0dG9uSGlkZVRleHR9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCByZW5kZXIoPFNpbXBsZUdpZnQgLz4pXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgRGlzcGxheVRleHQgZnJvbSAnc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQnXG5pbXBvcnQgeyB1c2VNZXRyaWNzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZU1ldHJpY3MnXG5cbmNvbnN0IEJvbnVzQ2FyZDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuICBjb25zdCBvbkNsaWNrID0gdXNlTWV0cmljcyhzdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxhXG4gICAgICBocmVmPXtydWxlcy5yb290Py5vZmZlcn1cbiAgICAgIHRhcmdldD0nX2JsYW5rJ1xuICAgICAgcmVsPSdub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyJ1xuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMudmFyaWFudDJdOiBydWxlcy5yb290Py52YXJpYW50ID09PSAndmFyaWFudDInXG4gICAgICB9KX1cbiAgICAgIHN0eWxlPXtydWxlcy5yb290fVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvZHl9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxpbmV9IHN0eWxlPXtydWxlcy5saW5lfSAvPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvZHlJbm5lcn0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRleHR9IHN0eWxlPXtydWxlcy50ZXh0fT5cbiAgICAgICAgICAgIDxEaXNwbGF5VGV4dD57cnVsZXMudGV4dD8uY2hpbGRyZW59PC9EaXNwbGF5VGV4dD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b259IHN0eWxlPXtydWxlcy5idXR0b259PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gc3R5bGU9e3J1bGVzLmxvZ299IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b25UZXh0fT57cnVsZXMuYnV0dG9uPy5jaGlsZHJlbn08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGVnYWx9IHN0eWxlPXtydWxlcy5sZWdhbH0+XG4gICAgICAgIHtydWxlcy5sZWdhbD8uY2hpbGRyZW59XG4gICAgICA8L2Rpdj5cbiAgICA8L2E+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgQm9udXNDYXJkXG4iLCJpbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VHaWZ0T3BlbiB9IGZyb20gJ3NyYy9ob29rcy91c2VHaWZ0T3BlbidcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gJ3NyYy9oZWxwZXJzL3JlbmRlcidcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VHZXRSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VEZXZpY2VTdGF0ZSdcbmltcG9ydCB7IHVzZUNvbnRhaW5lckRldmljZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDb250YWluZXJEZXZpY2UnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgQ2xvc2VJY29uIGZyb20gJ3NyYy9jb21wb25lbnRzL0Nsb3NlSWNvbidcbmltcG9ydCBHaWZ0SWNvbiBmcm9tICdzcmMvY29tcG9uZW50cy9HaWZ0SWNvbidcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnc3JjL1N0YXRlQ29udGV4dCdcbmltcG9ydCBCb251c0NhcmQgZnJvbSAnLi9jb21wb25lbnRzL0JvbnVzQ2FyZCdcbmltcG9ydCB7IHVzZUV4dHJhY3RGb250cyB9IGZyb20gJ3NyYy9ob29rcy91c2VFeHRyYWN0Rm9udHMnXG5pbXBvcnQgeyB1c2VHaWZ0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvcHJvbW9zL3VzZUdpZnRSdWxlcydcbmltcG9ydCB7IHBpY2sgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcblxuY29uc3QgQ29tcGxleEdpZnQgPSAoKSA9PiB7XG4gIGNvbnN0IHJvb3RSZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3QgeyBpc09wZW4sIG9uVG9nZ2xlIH0gPSB1c2VHaWZ0T3BlbigpXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgZGV2aWNlID0gdXNlQ29udGFpbmVyRGV2aWNlKHsgdGFyZ2V0UmVmOiByb290UmVmIH0pXG4gIGNvbnN0IGRldmljZVN0YXRlID0gdXNlR2V0UnVsZXMoc3RhdGUsIGRldmljZSlcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKGRldmljZVN0YXRlKVxuICB1c2VFeHRyYWN0Rm9udHMoZGV2aWNlU3RhdGUpXG4gIGNvbnN0IHsgaGFzSWNvbiwgaWNvblJ1bGVzLCBib2R5UnVsZXMsIGFycm93UnVsZXMgfSA9IHVzZUdpZnRSdWxlcyhkZXZpY2VTdGF0ZSwge1xuICAgIGZhZGU6IHN0eWxlcy5mYWRlaW4sXG4gICAgcHVsc2U6IHN0eWxlcy5wdWxzZSxcbiAgICB3aWdnbGU6IHN0eWxlcy53aWdnbGUsXG4gICAgZ3JhZGllbnQ6IHN0eWxlcy5ncmFkaWVudFxuICB9KVxuICBjb25zdCBoYXNUaXRsZUljb24gPSBydWxlcz8udGl0bGU/Lmhhc0ljb25cblxuICByZXR1cm4gKFxuICAgIDxkaXYgcmVmPXtyb290UmVmfSBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgIFtzdHlsZXMuZGVza3RvcF06IGRldmljZSA9PT0gJ2Rlc2t0b3AnLFxuICAgICAgW3N0eWxlcy5sYXB0b3BdOiBkZXZpY2UgPT09ICdsYXB0b3AnLFxuICAgICAgW3N0eWxlcy50YWJsZXRdOiBkZXZpY2UgPT09ICd0YWJsZXQnLFxuICAgIH0pfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaWNvbn0gc3R5bGU9e2ljb25SdWxlc30gb25DbGljaz17b25Ub2dnbGV9PlxuICAgICAgICB7aGFzSWNvbiAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pY29uVGFyZ2V0fT5cbiAgICAgICAgICAgIDxHaWZ0SWNvbiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMuYm9keSwge1xuICAgICAgICAgIFtzdHlsZXMuYm9keU9wZW5dOiBpc09wZW5cbiAgICAgICAgfSl9XG4gICAgICAgIHN0eWxlPXtib2R5UnVsZXN9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYXJyb3d9IHN0eWxlPXthcnJvd1J1bGVzfSAvPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRhaW5lcn0gc3R5bGU9e3J1bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jbG9zZX0gc3R5bGU9e3J1bGVzLmNsb3NlfSBvbkNsaWNrPXtvblRvZ2dsZX0+XG4gICAgICAgICAgICA8Q2xvc2VJY29uIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5wcm9tb3Rpb259IHN0eWxlPXtydWxlcy5wcm9tb3Rpb259PlxuICAgICAgICAgICAge3J1bGVzLnByb21vdGlvbj8uY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5oZWFkfT5cbiAgICAgICAgICAgIHtoYXNUaXRsZUljb24gJiYgKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmhlYWRJY29ufSBzdHlsZT17cGljayhydWxlcy50aXRsZSwgJ2NvbG9yJyl9PlxuICAgICAgICAgICAgICAgIDxHaWZ0SWNvbiAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmhlYWRUaXRsZX0gc3R5bGU9e3J1bGVzLnRpdGxlfT57cnVsZXMudGl0bGU/LmNoaWxkcmVufTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pbm5lcn0+XG4gICAgICAgICAgICB7KHJ1bGVzLmNoaWxkcmVuIHx8IFtdKS5tYXAoY2hpbGQgPT4gKFxuICAgICAgICAgICAgICA8U3RhdGVDb250ZXh0IHZhbHVlPXtjaGlsZH0+XG4gICAgICAgICAgICAgICAgPEJvbnVzQ2FyZCAvPlxuICAgICAgICAgICAgICA8L1N0YXRlQ29udGV4dD5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlcig8Q29tcGxleEdpZnQgLz4pXG5cbi8vIGltcG9ydCB7IEVtaXR0ZXJUeXBlIH0gZnJvbSBcInNyY1wiO1xuLy8gaW1wb3J0IHsgaXNFbXB0eVZhbHVlLCBpc1ZhbHVlIH0gZnJvbSBcIkBhZHN0b3JlL3V0aWxzXCI7XG4vL1xuXG4vL1xuLy8gZXhwb3J0IGRlZmF1bHQgKGVtaXR0ZXI6IEVtaXR0ZXJUeXBlKSA9PiB7XG4vLyAgIGVtaXR0ZXIub24oJ3JlbmRlck5vZGUnLCAoeyBydWxlLCBsYXllciB9KSA9PiB7XG4vLyAgICAgaWYgKCckYW5pbWF0aW9ucycgaW4gcnVsZSkge1xuLy8gICAgICAgY29uc3QgYWxsQW5pbWF0aW9ucyA9IHJ1bGUuJGFuaW1hdGlvbnNcbi8vICAgICAgICAgLm1hcCgoYW5pbWF0aW9uOiBrZXlvZiB0eXBlb2YgYW5pbWF0aW9uc01hcCkgPT4gYW5pbWF0aW9uc01hcFthbmltYXRpb25dKVxuLy8gICAgICAgICAuam9pbignLCAnKVxuLy9cbi8vICAgICAgIGNvbnN0IGJhY2tncm91bmRTdHlsZXMgPVxuLy8gICAgICAgICBpc1ZhbHVlKHJ1bGUuJGdyYWRpZW50Q29sb3IpICYmIHJ1bGUuJGFuaW1hdGlvbnMuaW5jbHVkZXMoJ2dyYWRpZW50Jylcbi8vICAgICAgICAgICA/IHtcbi8vICAgICAgICAgICAgIGJhY2tncm91bmQ6IGBsaW5lYXItZ3JhZGllbnQoLTkwZGVnLCAke3J1bGUuYmFja2dyb3VuZENvbG9yfSAwJSwgJHtydWxlLiRncmFkaWVudENvbG9yfSAxMDAlKWAsXG4vLyAgICAgICAgICAgICBiYWNrZ3JvdW5kU2l6ZTogJzQwMCUgNDAwJSdcbi8vICAgICAgICAgICB9XG4vLyAgICAgICAgICAgOiB7fVxuLy9cbi8vICAgICAgIGVtaXR0ZXIuZW1pdCgncnVuUmVuZGVyJywge1xuLy8gICAgICAgICBpY29uOiB7XG4vLyAgICAgICAgICAgYW5pbWF0aW9uOiBhbGxBbmltYXRpb25zLFxuLy8gICAgICAgICAgIC4uLmJhY2tncm91bmRTdHlsZXNcbi8vICAgICAgICAgfVxuLy8gICAgICAgfSlcbi8vICAgICB9XG4vL1xuLy8gICAgIGlmIChsYXllci5sYXllciA9PT0gJ2ljb24nICYmICFpc0VtcHR5VmFsdWUocnVsZS5oYXNJY29uKSkge1xuLy8gICAgICAgZW1pdHRlci5lbWl0KCdydW5SZW5kZXInLCB7XG4vLyAgICAgICAgIGljb25UYXJnZXQ6IHtcbi8vICAgICAgICAgICBkaXNwbGF5OiBydWxlLmhhc0ljb24gPyAnZmxleCcgOiAnbm9uZSdcbi8vICAgICAgICAgfVxuLy8gICAgICAgfSlcbi8vICAgICB9XG4vL1xuLy8gICAgIGlmIChsYXllci5sYXllciA9PT0gJ3RpdGxlJykge1xuLy8gICAgICAgZW1pdHRlci5lbWl0KCdydW5SZW5kZXInLCB7XG4vLyAgICAgICAgIGhlYWRlckljb246IHtcbi8vICAgICAgICAgICBkaXNwbGF5OiBydWxlLmhhc0ljb24gPyAnYmxvY2snIDogJ25vbmUnXG4vLyAgICAgICAgIH1cbi8vICAgICAgIH0pXG4vLyAgICAgfVxuLy9cbi8vICAgICBpZiAobGF5ZXIubGF5ZXIgPT09ICdjb250YWluZXInKSB7XG4vLyAgICAgICBlbWl0dGVyLmVtaXQoJ3J1blJlbmRlcicsIHtcbi8vICAgICAgICAgYm9keToge1xuLy8gICAgICAgICAgICRkZWxheTogcnVsZS5kZWxheSxcbi8vICAgICAgICAgICBsZWZ0OiBydWxlLmxlZnRcbi8vICAgICAgICAgfSxcbi8vICAgICAgICAgYXJyb3c6IHtcbi8vICAgICAgICAgICBsZWZ0OiBgJHsrKHJ1bGUubGVmdCB8fCAwKSAqIC0xICsgOH1gLFxuLy8gICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogcnVsZS5iYWNrZ3JvdW5kQ29sb3IsXG4vLyAgICAgICAgICAgYm9yZGVyVG9wV2lkdGg6IHJ1bGUuYm9yZGVyV2lkdGgsXG4vLyAgICAgICAgICAgYm9yZGVyVG9wQ29sb3I6IHJ1bGUuYm9yZGVyQ29sb3IsXG4vLyAgICAgICAgICAgYm9yZGVyVG9wU3R5bGU6ICdzb2xpZCcsXG4vLyAgICAgICAgICAgYm9yZGVyTGVmdFdpZHRoOiBydWxlLmJvcmRlcldpZHRoLFxuLy8gICAgICAgICAgIGJvcmRlckxlZnRDb2xvcjogcnVsZS5ib3JkZXJDb2xvcixcbi8vICAgICAgICAgICBib3JkZXJMZWZ0U3R5bGU6ICdzb2xpZCdcbi8vICAgICAgICAgfVxuLy8gICAgICAgfSlcbi8vICAgICB9XG4vLyAgIH0pXG4vLyB9XG4iLCJleHBvcnQgY29uc3Qgc3dpdGNoVGV4dEFsaWduVG9GbGV4ID0gKHRleHRBbGlnbj86IHN0cmluZykgPT5cbiAgdGV4dEFsaWduID8geyBsZWZ0OiAnZmxleC1zdGFydCcsIGNlbnRlcjogJ2NlbnRlcicsIHJpZ2h0OiAnZmxleC1lbmQnIH1bdGV4dEFsaWduXSA6IHRleHRBbGlnblxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgRGlzcGxheVRleHQgZnJvbSAnc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5cbmNvbnN0IExpbmU6IEZDID0gKCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucm9vdH0gc3R5bGU9e3J1bGVzLnJvb3R9PlxuICAgICAgPERpc3BsYXlUZXh0PntydWxlcz8ucm9vdD8uY2hpbGRyZW59PC9EaXNwbGF5VGV4dD5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBMaW5lXG4iLCJpbXBvcnQgeyBGQywgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyBzZXQgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gJ3NyYy9oZWxwZXJzL3JlbmRlcidcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDb250YWluZXJEZXZpY2UgfSBmcm9tICdzcmMvaG9va3MvdXNlQ29udGFpbmVyRGV2aWNlJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZUdldFJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZURldmljZVN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICdzcmMvU3RhdGVDb250ZXh0J1xuaW1wb3J0IHsgc3dpdGNoVGV4dEFsaWduVG9GbGV4IH0gZnJvbSBcInNyYy9oZWxwZXJzL3N3aXRjaFRleHRBbGlnblRvRmxleFwiO1xuaW1wb3J0IExpbmUgZnJvbSAnLi9jb21wb25lbnRzL2xpbmUnXG5pbXBvcnQgeyB1c2VNZXRyaWNzIH0gZnJvbSBcInNyYy9ob29rcy91c2VNZXRyaWNzXCI7XG5cbmNvbnN0IFNpbXBsZVBvcHVwOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgcm9vdFJlZiA9IHVzZVJlZihudWxsKVxuICBjb25zdCBkZXZpY2UgPSB1c2VDb250YWluZXJEZXZpY2UoeyB0YXJnZXRSZWY6IHJvb3RSZWYgfSlcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBkZXZpY2VTdGF0ZSA9IHVzZUdldFJ1bGVzKHN0YXRlLCBkZXZpY2UpXG4gIGNvbnN0IG9uQ2xpY2sgPSB1c2VNZXRyaWNzKGRldmljZVN0YXRlKVxuXG4gIHNldChkZXZpY2VTdGF0ZSwgJ2J1dHRvbi5wZXJjZW50X3dpZHRoJywgZGV2aWNlU3RhdGU/LmJ1dHRvbj8ud2lkdGgpXG4gIHNldChkZXZpY2VTdGF0ZSwgJ2xlZ2FsLnBlcmNlbnRfd2lkdGgnLCBkZXZpY2VTdGF0ZT8ubGVnYWw/LndpZHRoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG5cblxuICBjb25zdCBib2R5UnVsZXMgPSB7XG4gICAgYWxpZ25JdGVtczogc3dpdGNoVGV4dEFsaWduVG9GbGV4KHJ1bGVzLnJvb3Q/LmFsaWduKVxuICB9XG5cbiAgY29uc3QgYnV0dG9uUnVsZXMgPSB7XG4gICAgLi4ucnVsZXM/LmJ1dHRvbixcbiAgICBqdXN0aWZ5Q29udGVudDogc3dpdGNoVGV4dEFsaWduVG9GbGV4KHJ1bGVzLnJvb3Q/LnRleHRBbGlnbilcbiAgfVxuXG4gIGNvbnN0IGxlZ2FsUnVsZXMgPSB7XG4gICAgLi4ucnVsZXM/LmxlZ2FsLFxuICAgIGp1c3RpZnlDb250ZW50OiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8udGV4dEFsaWduKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8YVxuICAgICAgcmVmPXtyb290UmVmfVxuICAgICAgaHJlZj17cnVsZXMucm9vdD8ub2ZmZXJ9XG4gICAgICB0YXJnZXQ9J19ibGFuaydcbiAgICAgIHJlbD1cIm5vZm9sbG93IG5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMuZGVza3RvcF06IGRldmljZSA9PT0gJ2Rlc2t0b3AnLFxuICAgICAgICBbc3R5bGVzLnRhYmxldF06IGRldmljZSA9PT0gJ3RhYmxldCcsXG4gICAgICAgIFtzdHlsZXMubGFwdG9wXTogZGV2aWNlID09PSAnbGFwdG9wJ1xuICAgICAgfSl9XG4gICAgICBzdHlsZT17cnVsZXMucm9vdH1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ib2R5fSBzdHlsZT17Ym9keVJ1bGVzfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30vPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRleHR9PlxuICAgICAgICAgIHsocnVsZXM/LmNoaWxkcmVuIHx8IFtdKS5tYXAoZWwgPT4gKFxuICAgICAgICAgICAgPFN0YXRlQ29udGV4dCB2YWx1ZT17ZWx9PlxuICAgICAgICAgICAgICA8TGluZSAvPlxuICAgICAgICAgICAgPC9TdGF0ZUNvbnRleHQ+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbn0gc3R5bGU9e2J1dHRvblJ1bGVzfT5cbiAgICAgICAgICB7YnV0dG9uUnVsZXM/LmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbH0gc3R5bGU9e2xlZ2FsUnVsZXN9PlxuICAgICAgICAgIHtsZWdhbFJ1bGVzPy5jaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2E+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyKDxTaW1wbGVQb3B1cCAvPilcbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyBvbWl0LCBwaWNrIH0gZnJvbSBcIkBhZHN0b3JlL3V0aWxzXCI7XG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCBEaXNwbGF5VGV4dCBmcm9tICdzcmMvY29tcG9uZW50cy9EaXNwbGF5VGV4dCdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCB7IHNwYWNpbmdPcHRpb25zIH0gZnJvbSBcInNyYy9oZWxwZXJzL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgdXNlTWV0cmljcyB9IGZyb20gXCJzcmMvaG9va3MvdXNlTWV0cmljc1wiO1xuXG5jb25zdCBCb251czogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuICBjb25zdCBkZXZpY2UgPSBzdGF0ZT8uZGV2aWNlIHx8ICdkZXNrdG9wJ1xuICBjb25zdCBvbkNsaWNrID0gdXNlTWV0cmljcyhzdGF0ZSlcblxuXG4gIHJldHVybiAoXG4gICAgPGFcbiAgICAgIGhyZWY9e3J1bGVzLnJvb3Q/Lm9mZmVyfVxuICAgICAgdGFyZ2V0PSdfYmxhbmsnXG4gICAgICByZWw9XCJub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgICBbc3R5bGVzLmRlc2t0b3BdOiBkZXZpY2UgPT09ICdkZXNrdG9wJ1xuICAgICAgfSl9XG4gICAgICBzdHlsZT17b21pdChydWxlcy5yb290LCAuLi5zcGFjaW5nT3B0aW9ucyl9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyfSBzdHlsZT17cnVsZXMuaGVhZGVyfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250YWluZXJ9IHN0eWxlPXtwaWNrKHJ1bGVzLnJvb3QsIC4uLnNwYWNpbmdPcHRpb25zKX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYm9keX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfT48L2Rpdj5cbiAgICAgICAgICA8RGlzcGxheVRleHQgY2xhc3NOYW1lPXtzdHlsZXMudGV4dH0gc3R5bGU9e3J1bGVzLnRleHR9PlxuICAgICAgICAgICAge3J1bGVzLnRleHQ/LmNoaWxkcmVufVxuICAgICAgICAgIDwvRGlzcGxheVRleHQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9ufSBzdHlsZT17cnVsZXMuYnV0dG9ufT5cbiAgICAgICAgICAgIHtydWxlcy5idXR0b24/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGVnYWx9IHN0eWxlPXtydWxlcy5sZWdhbH0+XG4gICAgICAgICAgICB7cnVsZXMubGVnYWw/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvYT5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBCb251c1xuIiwiaW1wb3J0IHsgRkMsIHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnc3JjL2hlbHBlcnMvcmVuZGVyJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUNvbnRhaW5lckRldmljZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDb250YWluZXJEZXZpY2UnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlR2V0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJ3NyYy9TdGF0ZUNvbnRleHQnXG5pbXBvcnQgQm9udXMgZnJvbSAnLi9jb21wb25lbnRzL0JvbnVzJ1xuaW1wb3J0IHsgdXNlRXh0cmFjdEZvbnRzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUV4dHJhY3RGb250cydcblxuY29uc3QgU2ltcGxlUG9wdXA6IEZDID0gKCkgPT4ge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IGRldmljZSA9IHVzZUNvbnRhaW5lckRldmljZSh7IHRhcmdldFJlZjogcm9vdFJlZiB9KVxuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IGRldmljZVN0YXRlID0gdXNlR2V0UnVsZXMoc3RhdGUsIGRldmljZSlcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKGRldmljZVN0YXRlKVxuICB1c2VFeHRyYWN0Rm9udHMoZGV2aWNlU3RhdGUpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e3Jvb3RSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy5kZXNrdG9wXTogZGV2aWNlID09PSAnZGVza3RvcCdcbiAgICAgIH0pfVxuICAgICAgc3R5bGU9e3J1bGVzLnJvb3R9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50aXRsZX0gc3R5bGU9e3J1bGVzLnRpdGxlfT5cbiAgICAgICAge3J1bGVzLnRpdGxlPy5jaGlsZHJlbn1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy53cmFwcGVyfT5cbiAgICAgICAgeyhydWxlcy5jaGlsZHJlbiB8fCBbXSkubWFwKGNoaWxkID0+IChcbiAgICAgICAgICA8U3RhdGVDb250ZXh0IHZhbHVlPXt7IC4uLmNoaWxkLCBkZXZpY2UgfX0+XG4gICAgICAgICAgICA8Qm9udXMgLz5cbiAgICAgICAgICA8L1N0YXRlQ29udGV4dD5cbiAgICAgICAgKSl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCByZW5kZXIoPFNpbXBsZVBvcHVwIC8+KVxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IERpc3BsYXlUZXh0IGZyb20gJ3NyYy9jb21wb25lbnRzL0Rpc3BsYXlUZXh0J1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuXG5jb25zdCBNYXRjaDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuICBjb25zdCBkZXZpY2UgPSBzdGF0ZT8uZGV2aWNlIHx8ICdkZXNrdG9wJ1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgIFtzdHlsZXMuZGVza3RvcF06IGRldmljZSA9PT0gJ2Rlc2t0b3AnXG4gICAgfSl9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWZ0fT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtc30+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYm9keX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWFndWV9IHN0eWxlPXtydWxlcy5sZWFndWV9PntydWxlcy5sZWFndWU/LmNoaWxkcmVufTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubmFtZX0gc3R5bGU9e3J1bGVzLnRlYW1zfT57cnVsZXMudGVhbXM/LnRlYW1BfSDigJQge3J1bGVzLnRlYW1zPy50ZWFtQn08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucmlnaHR9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW19PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbUxvZ299IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtTmFtZX0gc3R5bGU9e3J1bGVzLnRlYW1zfT57cnVsZXMudGVhbXM/LnRlYW1BfTwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZH0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vZGRMYWJlbH0gc3R5bGU9e3J1bGVzLm9kZExhYmVsfT57cnVsZXMub2RkTGFiZWw/LmNoaWxkcmVufTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkVmFsdWV9IHN0eWxlPXtydWxlcy5vZGRWYWx1ZX0+e3J1bGVzLm9kZFZhbHVlPy5jaGlsZHJlbn08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1Mb2dvfS8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtTmFtZX0gc3R5bGU9e3J1bGVzLnRlYW1zfT57cnVsZXMudGVhbXM/LnRlYW1CfTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IE1hdGNoXG4iLCJpbXBvcnQgeyBGQywgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyBzZXQgfSBmcm9tICdAYWRzdG9yZS91dGlscydcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gJ3NyYy9oZWxwZXJzL3JlbmRlcidcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDb250YWluZXJEZXZpY2UgfSBmcm9tICdzcmMvaG9va3MvdXNlQ29udGFpbmVyRGV2aWNlJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZUdldFJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZURldmljZVN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICdzcmMvU3RhdGVDb250ZXh0J1xuaW1wb3J0IERpc3BsYXlUZXh0IGZyb20gJ3NyYy9jb21wb25lbnRzL0Rpc3BsYXlUZXh0J1xuaW1wb3J0IHsgc3dpdGNoVGV4dEFsaWduVG9GbGV4IH0gZnJvbSAnc3JjL2hlbHBlcnMvc3dpdGNoVGV4dEFsaWduVG9GbGV4J1xuaW1wb3J0IE1hdGNoIGZyb20gJy4vY29tcG9uZW50cy9NYXRjaCdcbmltcG9ydCB7IHVzZU1ldHJpY3MgfSBmcm9tICdzcmMvaG9va3MvdXNlTWV0cmljcydcblxuY29uc3QgU2ltcGxlUG9wdXA6IEZDID0gKCkgPT4ge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IGRldmljZSA9IHVzZUNvbnRhaW5lckRldmljZSh7IHRhcmdldFJlZjogcm9vdFJlZiB9KVxuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IGRldmljZVN0YXRlID0gdXNlR2V0UnVsZXMoc3RhdGUsIGRldmljZSlcbiAgc2V0KGRldmljZVN0YXRlLCAnYnV0dG9uV3JhcHBlci5wZXJjZW50X3dpZHRoJywgZGV2aWNlU3RhdGU/LmJ1dHRvbldyYXBwZXI/LndpZHRoKVxuICBzZXQoZGV2aWNlU3RhdGUsICdsZWdhbC5wZXJjZW50X3dpZHRoJywgZGV2aWNlU3RhdGU/LmxlZ2FsPy53aWR0aClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKGRldmljZVN0YXRlKVxuICBjb25zdCBvbkNsaWNrID0gdXNlTWV0cmljcyhkZXZpY2VTdGF0ZSlcblxuICBjb25zdCBib2R5UnVsZXMgPSB7XG4gICAgLi4ucnVsZXMucm9vdCxcbiAgICBhbGlnbkl0ZW1zOiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8uYWxpZ24pXG4gIH1cblxuICBjb25zdCBjb250ZW50UnVsZXMgPSB7XG4gICAgLi4ucnVsZXMuY29udGVudCxcbiAgICBhbGlnbkl0ZW1zOiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8uYWxpZ24pXG4gIH1cblxuICBjb25zdCB0ZXh0UnVsZXMgPSB7XG4gICAgLi4ucnVsZXMudGV4dCxcbiAgICB0ZXh0QWxpZ246IHJ1bGVzLnJvb3Q/LmFsaWduXG4gIH1cblxuICBjb25zdCBidXR0b25SdWxlcyA9IHtcbiAgICAuLi5ydWxlcz8uYnV0dG9uLFxuICAgIGp1c3RpZnlDb250ZW50OiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8udGV4dEFsaWduKVxuICB9XG5cbiAgY29uc3QgbGVnYWxSdWxlcyA9IHtcbiAgICAuLi5ydWxlcz8ubGVnYWwsXG4gICAganVzdGlmeUNvbnRlbnQ6IHN3aXRjaFRleHRBbGlnblRvRmxleChydWxlcy5yb290Py50ZXh0QWxpZ24pXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxhXG4gICAgICByZWY9e3Jvb3RSZWZ9XG4gICAgICBocmVmPXtydWxlcy5yb290Py5vZmZlcn1cbiAgICAgIHRhcmdldD0nX2JsYW5rJ1xuICAgICAgcmVsPSdub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyJ1xuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMuZGVza3RvcF06IGRldmljZSA9PT0gJ2Rlc2t0b3AnLFxuICAgICAgICBbc3R5bGVzLmxhcHRvcF06IGRldmljZSA9PT0gJ2xhcHRvcCcsXG4gICAgICAgIFtzdHlsZXMudGFibGV0XTogZGV2aWNlID09PSAndGFibGV0J1xuICAgICAgfSl9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYm9keX0gc3R5bGU9e2JvZHlSdWxlc30+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZH0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50aXRsZX0gc3R5bGU9e3J1bGVzLnRpdGxlfT5cbiAgICAgICAgICAgIHtydWxlcy50aXRsZT8uY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMud3JhcHBlcn0gc3R5bGU9e2NvbnRlbnRSdWxlc30+XG4gICAgICAgICAgeyhydWxlcy5jaGlsZHJlbiB8fCBbXSkubWFwKGNoaWxkID0+IChcbiAgICAgICAgICAgIDxTdGF0ZUNvbnRleHQgdmFsdWU9e3sgLi4uY2hpbGQsIGRldmljZSB9fT5cbiAgICAgICAgICAgICAgPE1hdGNoIC8+XG4gICAgICAgICAgICA8L1N0YXRlQ29udGV4dD5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPERpc3BsYXlUZXh0IGNsYXNzTmFtZT17c3R5bGVzLnRleHR9IHN0eWxlPXt0ZXh0UnVsZXN9PlxuICAgICAgICAgIHtydWxlcy50ZXh0Py5jaGlsZHJlbn1cbiAgICAgICAgPC9EaXNwbGF5VGV4dD5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b259IHN0eWxlPXtydWxlcy5idXR0b25XcmFwcGVyfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbkhlYWR9IHN0eWxlPXtydWxlcy5idXR0b25IZWFkfT5cbiAgICAgICAgICAgIHtydWxlcy5idXR0b25IZWFkPy5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvblRhcmdldH0gc3R5bGU9e2J1dHRvblJ1bGVzfT5cbiAgICAgICAgICAgIHtydWxlcy5idXR0b24/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbH0gc3R5bGU9e2xlZ2FsUnVsZXN9PlxuICAgICAgICAgIHtydWxlcy5sZWdhbD8uY2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9hPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlcig8U2ltcGxlUG9wdXAgLz4pXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgeyB1c2VUb2dnbGUgfSBmcm9tICdzcmMvaG9va3MvdXNlVG9nZ2xlJ1xuaW1wb3J0IHsgdXNlTWV0cmljcyB9IGZyb20gJ3NyYy9ob29rcy91c2VNZXRyaWNzJ1xuXG5jb25zdCBCb251czogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuICBjb25zdCBbaXNPcGVuLCB0b2dnbGVJc09wZW5dID0gdXNlVG9nZ2xlKClcbiAgY29uc3Qgb25DbGljayA9IHVzZU1ldHJpY3Moc3RhdGUpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnJvb3R9IHN0eWxlPXtydWxlcy5yb290fT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYmFja2dyb3VuZH0gc3R5bGU9e3J1bGVzLmJhY2tncm91bmR9IC8+XG4gICAgICA8YVxuICAgICAgICBocmVmPXtydWxlcy5yb290Py5vZmZlcn1cbiAgICAgICAgdGFyZ2V0PSdfYmxhbmsnXG4gICAgICAgIHJlbD0nbm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlcidcbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuYm9keX1cbiAgICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgID5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnJvd0ZpcnN0fSBzdHlsZT17cnVsZXMucm93Rmlyc3R9PlxuICAgICAgICAgICAge3J1bGVzLnJvd0ZpcnN0Py5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnJvd1NlY29uZH0gc3R5bGU9e3J1bGVzLnJvd1NlY29uZH0+XG4gICAgICAgICAgICB7cnVsZXMucm93U2Vjb25kPy5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvb2ttYWtlcn0+d2lubGluZTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b259IHN0eWxlPXtydWxlcy5idXR0b259PlxuICAgICAgICAgIHtydWxlcy5idXR0b24/LmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvYT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5sZWdhbCwge1xuICAgICAgICAgIFtzdHlsZXMubGVnYWxPcGVuXTogaXNPcGVuXG4gICAgICAgIH0pfVxuICAgICAgICBzdHlsZT17cnVsZXMubGVnYWxJbmZvfVxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbFRleHR9PlxuICAgICAgICAgIDxzcGFuPntydWxlcy5sZWdhbEluZm8/LmNoaWxkcmVufTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbEJ1dHRvbn0gc3R5bGU9e3J1bGVzLmxlZ2FsSW5mb0J1dHRvbn0gb25DbGljaz17dG9nZ2xlSXNPcGVufT5cbiAgICAgICAgICAgIHtpc09wZW4gPyBydWxlcy5sZWdhbEluZm9CdXR0b24/Lm9wZW5UZXh0IDogcnVsZXMubGVnYWxJbmZvQnV0dG9uPy5jbG9zZVRleHR9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBCb251c1xuIiwiaW1wb3J0IHsgRkMsIHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlR2V0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJ3NyYy9TdGF0ZUNvbnRleHQnXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdzcmMvaGVscGVycy9yZW5kZXInXG5pbXBvcnQgQm9udXMgZnJvbSAnLi9jb21wb25lbnRzL0JvbnVzJ1xuXG5jb25zdCBCb251c0NhcmQ6IEZDID0gKCkgPT4ge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgZGV2aWNlID0gJ2Rlc2t0b3AnXG4gIGNvbnN0IGRldmljZVN0YXRlID0gdXNlR2V0UnVsZXMoc3RhdGUsIGRldmljZSlcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKGRldmljZVN0YXRlKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e3Jvb3RSZWZ9PlxuICAgICAgeyhydWxlcz8uY2hpbGRyZW4gfHwgW10pLm1hcChjaGlsZCA9PiAoXG4gICAgICAgIDxTdGF0ZUNvbnRleHQgdmFsdWU9e2NoaWxkfT5cbiAgICAgICAgICA8Qm9udXMgLz5cbiAgICAgICAgPC9TdGF0ZUNvbnRleHQ+XG4gICAgICApKX1cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCByZW5kZXIoPEJvbnVzQ2FyZCAvPilcbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyBvbWl0IH0gZnJvbSBcIkBhZHN0b3JlL3V0aWxzXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCB7IGJhY2tncm91bmRPcHRpb25zIH0gZnJvbSBcInNyYy9oZWxwZXJzL2NvbnN0YW50c1wiO1xuXG5jb25zdCBUZXh0OiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy5kZXNrdG9wXTogc3RhdGU/LmRldmljZSA9PT0gJ2Rlc2t0b3AnXG4gICAgICB9KX1cbiAgICAgIHN0eWxlPXtvbWl0KHJ1bGVzLnJvb3QsIC4uLmJhY2tncm91bmRPcHRpb25zKX1cbiAgICA+XG4gICAgICB7cnVsZXMucm9vdD8uY2hpbGRyZW59XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGV4dFxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IG9taXQgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IHsgYmFja2dyb3VuZE9wdGlvbnMgfSBmcm9tIFwic3JjL2hlbHBlcnMvY29uc3RhbnRzXCI7XG5cbmNvbnN0IE1hdGNoZXM6IEZDID0gKCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzdGF0ZSlcblxuICBjb25zdCByb290UnVsZXMgPSBvbWl0KHJ1bGVzLnJvb3QsIC4uLmJhY2tncm91bmRPcHRpb25zKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yb290fT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vZGRMb2dvfSBzdHlsZT17cm9vdFJ1bGVzfSAvPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZExhYmVsfSBzdHlsZT17cm9vdFJ1bGVzfT57cnVsZXMucm9vdD8udmFsdWVPbmV9PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29lZn0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29lZkhlYWR9IHN0eWxlPXtydWxlcy5jb2VmfT5YPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29lZlZhbHVlfSBzdHlsZT17cm9vdFJ1bGVzfT57cnVsZXMucm9vdD8udmFsdWVYfTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMub2RkLCBzdHlsZXMub2RkUmV2ZXJzZSl9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZExvZ299IHN0eWxlPXtyb290UnVsZXN9Lz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vZGRMYWJlbH0gc3R5bGU9e3Jvb3RSdWxlc30+e3J1bGVzLnJvb3Q/LnZhbHVlVHdvfTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWF0Y2hlc1xuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IG9taXQgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IHsgYmFja2dyb3VuZE9wdGlvbnMgfSBmcm9tIFwic3JjL2hlbHBlcnMvY29uc3RhbnRzXCI7XG5cbmNvbnN0IE1hdGNoZXNPbmVUd286IEZDID0gKCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgICBbc3R5bGVzLmRlc2t0b3BdOiBzdGF0ZT8uZGV2aWNlID09PSAnZGVza3RvcCcsXG4gICAgICAgIFtzdHlsZXMubGFwdG9wXTogc3RhdGU/LmRldmljZSA9PT0gJ2xhcHRvcCcsXG4gICAgICAgIFtzdHlsZXMudGFibGV0XTogc3RhdGU/LmRldmljZSA9PT0gJ3RhYmxldCdcbiAgICAgIH0pfVxuICAgICAgc3R5bGU9e29taXQocnVsZXMucm9vdCwgLi4uYmFja2dyb3VuZE9wdGlvbnMpfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGl0bGV9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRpdGxlTGFiZWx9IHN0eWxlPXtydWxlcy50aXRsZUxhYmVsfT5cbiAgICAgICAgICB7cnVsZXMudGl0bGVMYWJlbC5jaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGl0bGVWYWx1ZX0gc3R5bGU9e3J1bGVzLnRpdGxlVmFsdWV9PlxuICAgICAgICAgIHtydWxlcy50aXRsZVZhbHVlLmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1Mb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1OYW1lfSBzdHlsZT17cnVsZXMudGVhbU5hbWV9PlxuICAgICAgICAgICAge3J1bGVzLnRlYW0xTmFtZS5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1WYWx1ZX0gc3R5bGU9e3J1bGVzLnZhbHVlfT5cbiAgICAgICAgICAgIHtydWxlcy52YWx1ZTEuY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW19PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbUxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbU5hbWV9IHN0eWxlPXtydWxlcy50ZWFtTmFtZX0+XG4gICAgICAgICAgICB7cnVsZXMudGVhbTJOYW1lLmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbVZhbHVlfSBzdHlsZT17cnVsZXMudmFsdWV9PlxuICAgICAgICAgICAge3J1bGVzLnZhbHVlMi5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBNYXRjaGVzT25lVHdvXG4iLCJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcblxuaW50ZXJmYWNlIFNsaWRlIHtcbiAgYW5pbWF0aW9uRHVyYXRpb246IG51bWJlclxufVxuXG5jb25zdCB1c2VBbmltYXRlZExpc3QgPSAoc2xpZGVzOiBTbGlkZVtdID0gW10pID0+IHtcbiAgY29uc3QgaXRlbXNDb3VudCA9IHNsaWRlcy5sZW5ndGhcbiAgY29uc3QgW2FuaW1hdGVkSWR4LCBzZXRBbmltYXRlZElkeF0gPSB1c2VTdGF0ZTxudW1iZXI+KDApXG4gIGNvbnN0IGFuaW1hdGlvbkR1cmF0aW9uID0gc2xpZGVzW2FuaW1hdGVkSWR4IHx8IDBdPy5hbmltYXRpb25EdXJhdGlvblxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZ29OZXh0ID0gKCkgPT4ge1xuICAgICAgc2V0QW5pbWF0ZWRJZHgoaW5kZXggPT4ge1xuICAgICAgICBpZiAoaW5kZXggKyAxIDwgaXRlbXNDb3VudCkgcmV0dXJuIGluZGV4ICsgMVxuICAgICAgICByZXR1cm4gMFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dChnb05leHQsIGFuaW1hdGlvbkR1cmF0aW9uKVxuXG4gICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0aW1lb3V0KVxuICB9LCBbc2V0QW5pbWF0ZWRJZHgsIGl0ZW1zQ291bnQsIGFuaW1hdGlvbkR1cmF0aW9uLCBhbmltYXRlZElkeF0pXG5cbiAgcmV0dXJuIGFuaW1hdGVkSWR4XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVzZUFuaW1hdGVkTGlzdFxuIiwiaW1wb3J0IHsgRkMsIHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgcGljayB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZUdldFJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZURldmljZVN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICdzcmMvU3RhdGVDb250ZXh0J1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnc3JjL2hlbHBlcnMvcmVuZGVyJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCBUZXh0IGZyb20gJy4vY29tcG9uZW50cy9UZXh0J1xuaW1wb3J0IE1hdGNoZXMgZnJvbSAnLi9jb21wb25lbnRzL01hdGNoZXMnXG5pbXBvcnQgTWF0Y2hlc09uZVR3byBmcm9tICcuL2NvbXBvbmVudHMvTWF0Y2hlc09uZVR3bydcbmltcG9ydCB7IHVzZUNvbnRhaW5lckRldmljZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDb250YWluZXJEZXZpY2UnXG5pbXBvcnQgdXNlQW5pbWF0ZWRMaXN0IGZyb20gJ3NyYy9ob29rcy91c2VBbmltYXRlZExpc3QnXG5pbXBvcnQgeyB1c2VNZXRyaWNzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZU1ldHJpY3MnXG5pbXBvcnQgeyBiYWNrZ3JvdW5kT3B0aW9ucyB9IGZyb20gJ3NyYy9oZWxwZXJzL2NvbnN0YW50cydcblxuY29uc3QgREVGQVVMVF9BTklNQVRJT05fU1BFRUQgPSAzNzAwXG5cbmNvbnN0IFdpZGVDYXJkOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgcm9vdFJlZiA9IHVzZVJlZihudWxsKVxuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IGRldmljZSA9IHVzZUNvbnRhaW5lckRldmljZSh7IHRhcmdldFJlZjogcm9vdFJlZiB9KVxuICBjb25zdCBkZXZpY2VTdGF0ZSA9IHVzZUdldFJ1bGVzKHN0YXRlLCBkZXZpY2UpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhkZXZpY2VTdGF0ZSlcbiAgY29uc3Qgb25DbGljayA9IHVzZU1ldHJpY3MoZGV2aWNlU3RhdGUpXG5cbiAgY29uc3QgZ2V0Q2hpbGQgPSAobmFtZTogc3RyaW5nKSA9PlxuICAgICh7XG4gICAgICB0ZXh0OiA8VGV4dCAvPixcbiAgICAgIG1hdGNoZXM6IDxNYXRjaGVzIC8+LFxuICAgICAgbWF0Y2hlc09uZVR3bzogPE1hdGNoZXNPbmVUd28gLz5cbiAgICB9W25hbWVdKVxuXG4gIGNvbnN0IHNsaWRlc0xpc3QgPSAocnVsZXMuY2hpbGRyZW4gfHwgW10pLmZpbHRlcihCb29sZWFuKS5tYXAoc2xpZGUgPT4gKHtcbiAgICAuLi5zbGlkZSxcbiAgICBhbmltYXRpb25OYW1lOiBzbGlkZT8ucm9vdD8uYW5pbWF0aW9uTmFtZSxcbiAgICBhbmltYXRpb25EdXJhdGlvbjogc2xpZGU/LnJvb3Q/LmFuaW1hdGlvbkR1cmF0aW9uIHx8IERFRkFVTFRfQU5JTUFUSU9OX1NQRUVEXG4gIH0pKVxuXG4gIGNvbnN0IGN1cnJlbnRTbGlkZSA9IHVzZUFuaW1hdGVkTGlzdChzbGlkZXNMaXN0KVxuICBjb25zdCBzbGlkZVJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzbGlkZXNMaXN0W2N1cnJlbnRTbGlkZV0gfHwge30pXG5cbiAgY29uc3QgYmFja2dyb3VuZFJ1bGVzID0gc2xpZGVSdWxlcz8ucm9vdD8uaGFzQ3VzdG9tQmFja2dyb3VuZFxuICAgID8gcGljayhzbGlkZVJ1bGVzPy5yb290IHx8IHt9LCAuLi5iYWNrZ3JvdW5kT3B0aW9ucylcbiAgICA6IHBpY2socnVsZXMuYmFja2dyb3VuZCwgLi4uYmFja2dyb3VuZE9wdGlvbnMpXG5cbiAgcmV0dXJuIChcbiAgICA8YVxuICAgICAgcmVmPXtyb290UmVmfVxuICAgICAgaHJlZj17cnVsZXMucm9vdD8ub2ZmZXJ9XG4gICAgICB0YXJnZXQ9J19ibGFuaydcbiAgICAgIHJlbD0nbm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlcidcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgICBbc3R5bGVzLmRlc2t0b3BdOiBkZXZpY2UgPT09ICdkZXNrdG9wJyxcbiAgICAgICAgW3N0eWxlcy5sYXB0b3BdOiBkZXZpY2UgPT09ICdsYXB0b3AnLFxuICAgICAgICBbc3R5bGVzLnRhYmxldF06IGRldmljZSA9PT0gJ3RhYmxldCcsXG4gICAgICAgIFtzdHlsZXMudmFyaWFudDJdOiBydWxlcy5yb290Py52YXJpYW50ID09PSAndmFyaWFudDInXG4gICAgICB9KX1cbiAgICAgIHN0eWxlPXtydWxlcy5yb290fVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJhY2tncm91bmR9IHN0eWxlPXtiYWNrZ3JvdW5kUnVsZXN9IC8+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnByb21vdGlvbn0gc3R5bGU9e3J1bGVzLnByb21vdGlvbn0+XG4gICAgICAgIHtydWxlcy5wcm9tb3Rpb24/LmNoaWxkcmVufVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGVudH0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGVmdH0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY2VudGVyfT5cbiAgICAgICAgICB7KHJ1bGVzLmNoaWxkcmVuIHx8IFtdKS5tYXAoKGNoaWxkLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5zbGlkZX1cbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBhbmltYXRpb25OYW1lOiBjdXJyZW50U2xpZGUgPT09IGluZGV4ID8gc3R5bGVzW2NoaWxkLnJvb3Q/LmFuaW1hdGlvbk5hbWUgfHwgJ2ZhZGUtaW4tb3V0J10gOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uRHVyYXRpb246IGAke2NoaWxkLnJvb3Q/LmFuaW1hdGlvbkR1cmF0aW9ufW1zYFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8U3RhdGVDb250ZXh0IHZhbHVlPXt7IC4uLmNoaWxkLCBkZXZpY2UgfX0+e2dldENoaWxkKGNoaWxkLm5hbWUpfTwvU3RhdGVDb250ZXh0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnJpZ2h0fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b25XcmFwcGVyfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9ufSBzdHlsZT17cnVsZXMuYnV0dG9ufT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgICAgICAgICAge3J1bGVzLmJ1dHRvbj8uY2hpbGRyZW59XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2E+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyKDxXaWRlQ2FyZCAvPilcbiIsImltcG9ydCB7IENhbGxiYWNrLCBkZXZpY2VzIGFzIGRldmljZXNMaXN0LCBnZXQgfSBmcm9tICdAYWRzdG9yZS91dGlscydcbmltcG9ydCB7IEFueVN0YXRlIH0gZnJvbSAnc3JjL3Byb21vcy9TaW1wbGVHaWZ0L3R5cGVzJ1xuXG5jb25zdCBtb2RpZnlTdGF0ZSA9IChcbiAgc3RhdGU6IEFueVN0YXRlLFxuICBsYXllcjogc3RyaW5nLFxuICBydWxlOiBzdHJpbmcsXG4gIHZhbHVlOiB1bmtub3duIHwgQ2FsbGJhY2s8W3ByZXZWYWx1ZTogdW5rbm93bl0+LFxuICBkZXZpY2VzID0gZGV2aWNlc0xpc3RcbikgPT4ge1xuICBjb25zdCBuZXdTdGF0ZSA9IHsgLi4uc3RhdGUgfVxuXG4gIGRldmljZXMuZm9yRWFjaChkZXZpY2UgPT4ge1xuICAgIG5ld1N0YXRlW2xheWVyXSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlW2xheWVyXSxcbiAgICAgIFtkZXZpY2VdOiB7XG4gICAgICAgIC4uLm5ld1N0YXRlW2xheWVyXVtkZXZpY2VdLFxuICAgICAgICBbcnVsZV06IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlKGdldChuZXdTdGF0ZSwgYCR7bGF5ZXJ9LiR7ZGV2aWNlfS4ke3J1bGV9YCkpIDogdmFsdWVcbiAgICAgIH1cbiAgICB9XG4gIH0pXG4gIHJldHVybiBuZXdTdGF0ZVxufVxuXG5leHBvcnQgeyBtb2RpZnlTdGF0ZSB9XG4iXSwibmFtZXMiOlsiY2xhc3NOYW1lcyIsImkiLCJpbm5lciIsIm8iLCJuIiwidCIsInUiLCJCIiwiciIsImYiLCJjIiwiZSIsIl8iLCJGIiwicSIsInciLCJnIiwibCIsInVzZUdpZnRPcGVuIiwiZGVsYXkiLCJpc09wZW4iLCJzZXRJc09wZW4iLCJ1c2VTdGF0ZSIsInRpbWVyUmVmIiwidXNlUmVmIiwib25Ub2dnbGUiLCJjbGVhclRpbWVvdXQiLCJjdXJyZW50IiwicHJldiIsInVzZUVmZmVjdCIsInNldFRpbWVvdXQiLCJzIiwiYSIsIlN0YXRlIiwiY3JlYXRlQ29udGV4dCIsIlN0YXRlQ29udGV4dCIsImNoaWxkcmVuIiwidmFsdWUiLCJfanN4IiwiUHJvdmlkZXIiLCJyZW5kZXIiLCJ2Tm9kZSIsInRhcmdldCIsInN0YXRlIiwicHJlYWN0UmVuZGVyIiwidXNlQ3VycmVudFN0YXRlIiwidXNlQ29udGV4dCIsImxpc3RDYWNoZUNsZWFyIiwiZXEiLCJyZXF1aXJlJCQwIiwiYXNzb2NJbmRleE9mIiwibGlzdENhY2hlRGVsZXRlIiwiaW5kZXgiLCJsaXN0Q2FjaGVHZXQiLCJsaXN0Q2FjaGVIYXMiLCJsaXN0Q2FjaGVTZXQiLCJyZXF1aXJlJCQxIiwicmVxdWlyZSQkMiIsInJlcXVpcmUkJDMiLCJyZXF1aXJlJCQ0IiwiTGlzdENhY2hlIiwic3RhY2tDbGVhciIsInN0YWNrRGVsZXRlIiwic3RhY2tHZXQiLCJzdGFja0hhcyIsImZyZWVHbG9iYWwiLCJnbG9iYWwiLCJyb290IiwiU3ltYm9sIiwib2JqZWN0UHJvdG8iLCJoYXNPd25Qcm9wZXJ0eSIsIm5hdGl2ZU9iamVjdFRvU3RyaW5nIiwic3ltVG9TdHJpbmdUYWciLCJnZXRSYXdUYWciLCJvYmplY3RUb1N0cmluZyIsImJhc2VHZXRUYWciLCJpc09iamVjdCIsImZ1bmNUYWciLCJpc0Z1bmN0aW9uIiwiY29yZUpzRGF0YSIsImlzTWFza2VkIiwiZnVuY1Byb3RvIiwiZnVuY1RvU3RyaW5nIiwidG9Tb3VyY2UiLCJiYXNlSXNOYXRpdmUiLCJnZXRWYWx1ZSIsImdldE5hdGl2ZSIsIk1hcCIsIm5hdGl2ZUNyZWF0ZSIsImhhc2hDbGVhciIsImhhc2hEZWxldGUiLCJIQVNIX1VOREVGSU5FRCIsImhhc2hHZXQiLCJoYXNoSGFzIiwiaGFzaFNldCIsIkhhc2giLCJtYXBDYWNoZUNsZWFyIiwiaXNLZXlhYmxlIiwiZ2V0TWFwRGF0YSIsIm1hcENhY2hlRGVsZXRlIiwibWFwQ2FjaGVHZXQiLCJtYXBDYWNoZUhhcyIsIm1hcENhY2hlU2V0IiwiTWFwQ2FjaGUiLCJzdGFja1NldCIsInJlcXVpcmUkJDUiLCJTdGFjayIsImRlZmluZVByb3BlcnR5IiwiYmFzZUFzc2lnblZhbHVlIiwiYXNzaWduTWVyZ2VWYWx1ZSIsImNyZWF0ZUJhc2VGb3IiLCJiYXNlRm9yIiwiY2xvbmVCdWZmZXIiLCJVaW50OEFycmF5IiwiY2xvbmVBcnJheUJ1ZmZlciIsImNsb25lVHlwZWRBcnJheSIsImNvcHlBcnJheSIsImJhc2VDcmVhdGUiLCJvdmVyQXJnIiwiZ2V0UHJvdG90eXBlIiwiaXNQcm90b3R5cGUiLCJpbml0Q2xvbmVPYmplY3QiLCJpc09iamVjdExpa2UiLCJhcmdzVGFnIiwiYmFzZUlzQXJndW1lbnRzIiwiaXNBcmd1bWVudHMiLCJpc0FycmF5IiwiTUFYX1NBRkVfSU5URUdFUiIsImlzTGVuZ3RoIiwiaXNBcnJheUxpa2UiLCJpc0FycmF5TGlrZU9iamVjdCIsInN0dWJGYWxzZSIsImlzQnVmZmVyIiwib2JqZWN0VGFnIiwiaXNQbGFpbk9iamVjdCIsImJhc2VJc1R5cGVkQXJyYXkiLCJiYXNlVW5hcnkiLCJub2RlVXRpbCIsImlzVHlwZWRBcnJheSIsInNhZmVHZXQiLCJhc3NpZ25WYWx1ZSIsImNvcHlPYmplY3QiLCJiYXNlVGltZXMiLCJpc0luZGV4IiwiYXJyYXlMaWtlS2V5cyIsIm5hdGl2ZUtleXNJbiIsImJhc2VLZXlzSW4iLCJrZXlzSW4iLCJ0b1BsYWluT2JqZWN0IiwicmVxdWlyZSQkNiIsInJlcXVpcmUkJDciLCJyZXF1aXJlJCQ4IiwicmVxdWlyZSQkOSIsInJlcXVpcmUkJDEwIiwicmVxdWlyZSQkMTEiLCJyZXF1aXJlJCQxMiIsInJlcXVpcmUkJDEzIiwicmVxdWlyZSQkMTQiLCJiYXNlTWVyZ2VEZWVwIiwiYmFzZU1lcmdlIiwiaWRlbnRpdHkiLCJhcHBseSIsIm92ZXJSZXN0IiwiY29uc3RhbnQiLCJiYXNlU2V0VG9TdHJpbmciLCJzaG9ydE91dCIsInNldFRvU3RyaW5nIiwiYmFzZVJlc3QiLCJpc0l0ZXJhdGVlQ2FsbCIsImNyZWF0ZUFzc2lnbmVyIiwiaW5qZWN0TGluayIsIm9wdGlvbnMiLCJoZWFkIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImxpbmsiLCJjcmVhdGVFbGVtZW50IiwiT2JqZWN0IiwiZW50cmllcyIsImZvckVhY2giLCJrZXkiLCJzZXRBdHRyaWJ1dGUiLCJhcHBlbmRDaGlsZCIsIml0ZXJhdG9yIiwiaW5wdXQiLCJ2aXNpdG9yIiwicGF0aCIsIkFycmF5IiwibWFwIiwiZWwiLCJuZXdQYXRoIiwiZmlsdGVyIiwiaXNWYWx1ZSIsImpvaW4iLCJyZWR1Y2UiLCJhY2MiLCJpc0VtcHR5VmFsdWUiLCJ1bmRlZmluZWQiLCJwaWNrIiwib2JqIiwicHJvcHMiLCJyZXN1bHQiLCJwcm9wIiwib21pdCIsImdldCIsImRlZlZhbHVlIiwicGF0aEFycmF5IiwibWF0Y2giLCJwcmV2T2JqIiwic2V0IiwibGVuZ3RoIiwiaGV4VG9SZ2IiLCJoZXgiLCJjaGFycyIsInNsaWNlIiwic3BsaXQiLCJ2YWwiLCJleGVjIiwicGFyc2VJbnQiLCJiIiwiaXNKc29uU2FtZSIsInZhbHVlcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJldmVyeSIsImFyciIsInJnYlRvUmdiYSIsInJnYiIsImFscGhhIiwicmVwbGFjZSIsImRldmljZXMiLCJCUkVBS1BPSU5UUyIsIm1vYmlsZSIsInRhYmxldCIsImxhcHRvcCIsImRlc2t0b3AiLCJpc1ZhbGlkTGF5ZXIiLCJkZXZpY2UiLCJnZXRSdWxlcyIsIl9rZXkiLCJyZXN1bHRSdWxlcyIsInBhcmVudCIsInVzZUdldFJ1bGVzIiwidXNlQ29udGFpbmVyRGV2aWNlIiwidGFyZ2V0UmVmIiwicGFyZW50S2V5IiwiYnJlYWtwb2ludHMiLCJzZXREZXZpY2UiLCJjaGVja0RldmljZSIsInBhcmVudFdpZHRoIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwid2lkdGgiLCJzb3J0ZWRCcmVha3BvaW50cyIsInNvcnQiLCJfMSIsInZhbHVlQSIsIl8yIiwidmFsdWVCIiwiZmluZERldmljZSIsImZpbmQiLCJuZXh0VmFsdWUiLCJ1c2VMYXlvdXRFZmZlY3QiLCJwYXJlbnRFbGVtZW50IiwiY2xvc2VzdCIsInJlc2l6ZU9ic2VydmVyIiwiUmVzaXplT2JzZXJ2ZXIiLCJvYnNlcnZlIiwid3JhcFRvIiwidW50aWwiLCJ0b1B4Iiwic3RhcnRzV2l0aCIsInRvUGVyY2VudCIsImZvcm1hdFJ1bGUiLCJuZXdLZXkiLCJuZXdWYWx1ZSIsIkRFRkFVTFRfVE9fUFgiLCJwYXJzZVJ1bGVzIiwicnVsZXMiLCJsYXllciIsImtleXMiLCJpbmNsdWRlcyIsIndhcm4iLCJ0eXBvZ3JhcGh5IiwiYWNjZW50VHlwb2dyYXBoeSIsImZvbnRGYW1pbHkiLCJjb2xvciIsImZvbnRTaXplIiwicHJvcEtleSIsInByb3BWYWx1ZSIsImlubmVySFRNTCIsImlubmVyVGV4dCIsImRpc3BsYXkiLCJib3JkZXJTdHlsZSIsImJvcmRlclJhZGl1cyIsImJhY2tncm91bmRTaXplIiwiYmFja2dyb3VuZEltYWdlIiwiYmFja2dyb3VuZFJlcGVhdCIsImJhY2tncm91bmRDb2xvck9wYWNpdHkiLCJiYWNrZ3JvdW5kQ29sb3IiLCJmb250V2VpZ2h0IiwiZm9udFN0eWxlIiwidGV4dERlY29yYXRpb24iLCJpc1ZhbGlkUnVsZSIsInJ1bGUiLCJ1c2VQYXJzZVJ1bGVzIiwiRGlzcGxheVRleHQiLCJyZXN0IiwiZm9ybWF0VmFsdWUiLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsIl9faHRtbCIsInVzZVRvZ2dsZSIsIkNsb3NlSWNvbiIsInhtbG5zIiwiaGVpZ2h0Iiwidmlld0JveCIsImQiLCJmaWxsIiwiR2lmdEljb24iLCJmaWxsUnVsZSIsImFuaW1hdGlvbnNNYXAiLCJhbmltYXRpb25zIiwiZmFkZSIsInB1bHNlIiwid2lnZ2xlIiwiZ3JhZGllbnQiLCJ1c2VHaWZ0UnVsZXMiLCJkZXZpY2VTdGF0ZSIsImZ1bGxBbmltYXRpb25zIiwiaGFzSWNvbiIsImljb24iLCJhcnJvd1J1bGVzIiwibGVmdCIsImNvbnRhaW5lciIsImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyV2lkdGgiLCJib3JkZXJUb3BDb2xvciIsImJvcmRlckNvbG9yIiwiYm9yZGVyVG9wU3R5bGUiLCJib3JkZXJMZWZ0V2lkdGgiLCJib3JkZXJMZWZ0Q29sb3IiLCJib3JkZXJMZWZ0U3R5bGUiLCJib2R5UnVsZXMiLCJhbGxBbmltYXRpb25zIiwiYW5pbWF0aW9uIiwiYmFja2dyb3VuZFN0eWxlcyIsImdyYWRpZW50Q29sb3IiLCJiYWNrZ3JvdW5kIiwiaWNvblJ1bGVzIiwiYmFja2dyb3VuZE9wdGlvbnMiLCJzcGFjaW5nT3B0aW9ucyIsIm5vb3BZYU1ldHJpa2EiLCJnb2FsIiwiY29uc29sZSIsImxvZyIsIm5vb3BBZEZveCIsInVzZU1ldHJpY3MiLCJsYXllck5hbWUiLCJzYXZlTWV0cmljcyIsInlhUmVhY2hHb2FsIiwiYWRmb3hSZWFjaEdvYWwiLCJtZXRyaWNzIiwieWFTaG93IiwiYWRmb3hTaG93IiwieWFDbGljayIsImFkZm94Q2xpY2siLCJ1c2VFeHRyYWN0Rm9udHMiLCJmb250cyIsIlNldCIsImFkZCIsImZvbnRMaW5rcyIsInVzZU1lbW8iLCJmcm9tIiwiZm9udCIsInJlbCIsImhyZWYiLCJTaW1wbGVHaWZ0Iiwicm9vdFJlZiIsImxlZ2FsSXNPcGVuIiwidG9nZ2xlTGVnYWxJc09wZW4iLCJvbkNsaWNrIiwic3R5bGVzIiwiZmFkZWluIiwiX2pzeHMiLCJjbGFzc05hbWUiLCJsZWdhbE9wZW4iLCJyZWYiLCJzdHlsZSIsImljb25UYXJnZXQiLCJib2R5IiwiYm9keU9wZW4iLCJhcnJvdyIsImNsb3NlIiwib2ZmZXIiLCJsb2dvIiwidGV4dCIsImJ1dHRvbiIsImJ1dHRvbkFuaW1hdGVkIiwiaXNBbmltYXRlZCIsImxlZ2FsV3JhcHBlciIsImxlZ2FsIiwibGVnYWxUZXh0IiwibGVnYWxCdXR0b24iLCJidXR0b25PcGVuVGV4dCIsImJ1dHRvbkhpZGVUZXh0IiwiQm9udXNDYXJkIiwidmFyaWFudDIiLCJ2YXJpYW50IiwibGluZSIsImJvZHlJbm5lciIsImJ1dHRvblRleHQiLCJDb21wbGV4R2lmdCIsImhhc1RpdGxlSWNvbiIsInRpdGxlIiwicHJvbW90aW9uIiwiaGVhZEljb24iLCJoZWFkVGl0bGUiLCJjaGlsZCIsInN3aXRjaFRleHRBbGlnblRvRmxleCIsInRleHRBbGlnbiIsImNlbnRlciIsInJpZ2h0IiwiTGluZSIsIlNpbXBsZVBvcHVwIiwiYWxpZ25JdGVtcyIsImFsaWduIiwiYnV0dG9uUnVsZXMiLCJqdXN0aWZ5Q29udGVudCIsImxlZ2FsUnVsZXMiLCJCb251cyIsImhlYWRlciIsIndyYXBwZXIiLCJNYXRjaCIsInRlYW1zIiwibGVhZ3VlIiwibmFtZSIsInRlYW1BIiwidGVhbUIiLCJ0ZWFtIiwidGVhbUxvZ28iLCJ0ZWFtTmFtZSIsIm9kZCIsIm9kZExhYmVsIiwib2RkVmFsdWUiLCJidXR0b25XcmFwcGVyIiwiY29udGVudFJ1bGVzIiwiY29udGVudCIsInRleHRSdWxlcyIsImJ1dHRvbkhlYWQiLCJidXR0b25UYXJnZXQiLCJ0b2dnbGVJc09wZW4iLCJyb3dGaXJzdCIsInJvd1NlY29uZCIsImJvb2ttYWtlciIsImxlZ2FsSW5mbyIsImxlZ2FsSW5mb0J1dHRvbiIsIm9wZW5UZXh0IiwiY2xvc2VUZXh0IiwiVGV4dCIsIk1hdGNoZXMiLCJyb290UnVsZXMiLCJvZGRMb2dvIiwidmFsdWVPbmUiLCJjb2VmIiwiY29lZkhlYWQiLCJjb2VmVmFsdWUiLCJ2YWx1ZVgiLCJvZGRSZXZlcnNlIiwidmFsdWVUd28iLCJNYXRjaGVzT25lVHdvIiwidGl0bGVMYWJlbCIsInRpdGxlVmFsdWUiLCJ0ZWFtMU5hbWUiLCJ0ZWFtVmFsdWUiLCJ2YWx1ZTEiLCJ0ZWFtMk5hbWUiLCJ2YWx1ZTIiLCJ1c2VBbmltYXRlZExpc3QiLCJzbGlkZXMiLCJpdGVtc0NvdW50IiwiYW5pbWF0ZWRJZHgiLCJzZXRBbmltYXRlZElkeCIsImFuaW1hdGlvbkR1cmF0aW9uIiwiZ29OZXh0IiwidGltZW91dCIsIkRFRkFVTFRfQU5JTUFUSU9OX1NQRUVEIiwiV2lkZUNhcmQiLCJnZXRDaGlsZCIsIm1hdGNoZXMiLCJtYXRjaGVzT25lVHdvIiwic2xpZGVzTGlzdCIsIkJvb2xlYW4iLCJzbGlkZSIsImFuaW1hdGlvbk5hbWUiLCJjdXJyZW50U2xpZGUiLCJzbGlkZVJ1bGVzIiwiYmFja2dyb3VuZFJ1bGVzIiwiaGFzQ3VzdG9tQmFja2dyb3VuZCIsIm1vZGlmeVN0YXRlIiwiZGV2aWNlc0xpc3QiLCJuZXdTdGF0ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPQSxHQUFDLFdBQVk7QUFHWixRQUFJLFNBQVMsQ0FBRSxFQUFDO0FBR2hCLGFBQVNBLGNBQWE7QUFDckIsVUFBSSxVQUFVLENBQUE7QUFFZCxlQUFTQyxLQUFJLEdBQUdBLEtBQUksVUFBVSxRQUFRQSxNQUFLO0FBQzFDLFlBQUksTUFBTSxVQUFVQSxFQUFDO0FBQ3JCLFlBQUksQ0FBQztBQUFLO0FBRVYsWUFBSSxVQUFVLE9BQU87QUFFckIsWUFBSSxZQUFZLFlBQVksWUFBWSxVQUFVO0FBQ2pELGtCQUFRLEtBQUssR0FBRztBQUFBLFFBQ2hCLFdBQVUsTUFBTSxRQUFRLEdBQUcsR0FBRztBQUM5QixjQUFJLElBQUksUUFBUTtBQUNmLGdCQUFJQyxTQUFRRixZQUFXLE1BQU0sTUFBTSxHQUFHO0FBQ3RDLGdCQUFJRSxRQUFPO0FBQ1Ysc0JBQVEsS0FBS0EsTUFBSztBQUFBLFlBQ2xCO0FBQUEsVUFDRDtBQUFBLFFBQ0wsV0FBYyxZQUFZLFVBQVU7QUFDaEMsY0FBSSxJQUFJLGFBQWEsT0FBTyxVQUFVLFlBQVksQ0FBQyxJQUFJLFNBQVMsU0FBUSxFQUFHLFNBQVMsZUFBZSxHQUFHO0FBQ3JHLG9CQUFRLEtBQUssSUFBSSxTQUFVLENBQUE7QUFDM0I7QUFBQSxVQUNBO0FBRUQsbUJBQVMsT0FBTyxLQUFLO0FBQ3BCLGdCQUFJLE9BQU8sS0FBSyxLQUFLLEdBQUcsS0FBSyxJQUFJLEdBQUcsR0FBRztBQUN0QyxzQkFBUSxLQUFLLEdBQUc7QUFBQSxZQUNoQjtBQUFBLFVBQ0Q7QUFBQSxRQUNEO0FBQUEsTUFDRDtBQUVELGFBQU8sUUFBUSxLQUFLLEdBQUc7QUFBQSxJQUN2QjtBQUVELFFBQXFDLE9BQU8sU0FBUztBQUNwRCxNQUFBRixZQUFXLFVBQVVBO0FBQ3JCLGFBQUEsVUFBaUJBO0FBQUEsSUFDbkIsT0FLUTtBQUNOLGFBQU8sYUFBYUE7QUFBQSxJQUNwQjtBQUFBLEVBQ0Y7OztBQzNEaUMsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFRyxNQUFFLEdBQUUsSUFBRSxDQUFBLEdBQUcsSUFBRSxJQUFHLElBQUVDLFFBQUUsS0FBSSxJQUFFQSxRQUFFLEtBQUksSUFBRUEsUUFBRSxRQUFPLElBQUVBLFFBQUUsS0FBSSxJQUFFQSxRQUFFO0FBQVEsU0FBUyxFQUFFQyxJQUFFQyxJQUFFO0FBQUNGLFVBQUUsT0FBS0EsUUFBRSxJQUFJLEdBQUVDLElBQUVGLE9BQUdHLEVBQUMsR0FBRUgsTUFBRTtBQUFFLE1BQUlGLEtBQUUsRUFBRSxRQUFNLEVBQUUsTUFBSSxFQUFDLElBQUcsSUFBRyxLQUFJLENBQUUsRUFBQTtBQUFHLFNBQU9JLE1BQUdKLEdBQUUsR0FBRyxVQUFRQSxHQUFFLEdBQUcsS0FBSyxFQUFDLEtBQUksRUFBQyxDQUFDLEdBQUVBLEdBQUUsR0FBR0ksRUFBQztBQUFDO0FBQUMsU0FBUyxFQUFFLEdBQUU7QUFBQyxTQUFPRixNQUFFLEdBQUUsRUFBRUksS0FBRSxDQUFDO0FBQUM7QUFBQyxTQUFTLEVBQUUsR0FBRUQsSUFBRUwsSUFBRTtBQUFDLE1BQUlFLEtBQUUsRUFBRSxLQUFJLENBQUM7QUFBRSxNQUFHQSxHQUFFLElBQUUsR0FBRSxDQUFDQSxHQUFFLFFBQU1BLEdBQUUsS0FBRyxDQUFDRixLQUFFQSxHQUFFSyxFQUFDLElBQUVDLElBQUUsUUFBT0QsRUFBQyxHQUFFLFNBQVNGLElBQUU7QUFBQyxRQUFJQyxLQUFFRixHQUFFLE1BQUlBLEdBQUUsSUFBSSxDQUFDLElBQUVBLEdBQUUsR0FBRyxDQUFDLEdBQUVLLEtBQUVMLEdBQUUsRUFBRUUsSUFBRUQsRUFBQztBQUFFLElBQUFDLE9BQUlHLE9BQUlMLEdBQUUsTUFBSSxDQUFDSyxJQUFFTCxHQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUVBLEdBQUUsSUFBSSxTQUFTLENBQUUsQ0FBQTtBQUFBLEVBQUUsQ0FBQyxHQUFFQSxHQUFFLE1BQUksR0FBRSxDQUFDLEVBQUUsSUFBRztBQUFDLFFBQUlNLEtBQUUsU0FBU0wsSUFBRUMsSUFBRUcsSUFBRTtBQUFDLFVBQUcsQ0FBQ0wsR0FBRSxJQUFJO0FBQUksZUFBTTtBQUFHLFVBQUlHLEtBQUVILEdBQUUsSUFBSSxJQUFJLEdBQUcsT0FBTyxTQUFTQyxJQUFFO0FBQUMsZUFBT0EsR0FBRTtBQUFBLE1BQUcsQ0FBQztBQUFFLFVBQUdFLEdBQUUsTUFBTSxTQUFTRixJQUFFO0FBQUMsZUFBTSxDQUFDQSxHQUFFO0FBQUEsTUFBRyxDQUFDO0FBQUUsZUFBTSxDQUFDTSxNQUFHQSxHQUFFLEtBQUssTUFBS04sSUFBRUMsSUFBRUcsRUFBQztBQUFFLFVBQUlQLEtBQUU7QUFBRyxhQUFPSyxHQUFFLFFBQVEsU0FBU0YsSUFBRTtBQUFDLFlBQUdBLEdBQUUsS0FBSTtBQUFDLGNBQUlDLEtBQUVELEdBQUUsR0FBRyxDQUFDO0FBQUUsVUFBQUEsR0FBRSxLQUFHQSxHQUFFLEtBQUlBLEdBQUUsTUFBSSxRQUFPQyxPQUFJRCxHQUFFLEdBQUcsQ0FBQyxNQUFJSCxLQUFFO0FBQUEsUUFBRztBQUFBLE1BQUMsQ0FBQyxHQUFFLEVBQUUsQ0FBQ0EsTUFBR0UsR0FBRSxJQUFJLFVBQVFDLFFBQUssQ0FBQ00sTUFBR0EsR0FBRSxLQUFLLE1BQUtOLElBQUVDLElBQUVHLEVBQUM7QUFBQSxJQUFFO0FBQUUsTUFBRSxJQUFFO0FBQUcsUUFBSUUsS0FBRSxFQUFFLHVCQUFzQkMsS0FBRSxFQUFFO0FBQW9CLE1BQUUsc0JBQW9CLFNBQVNQLElBQUVDLElBQUVHLElBQUU7QUFBQyxVQUFHLEtBQUssS0FBSTtBQUFDLFlBQUlGLEtBQUVJO0FBQUUsUUFBQUEsS0FBRSxRQUFPRCxHQUFFTCxJQUFFQyxJQUFFRyxFQUFDLEdBQUVFLEtBQUVKO0FBQUEsTUFBQztBQUFDLE1BQUFLLE1BQUdBLEdBQUUsS0FBSyxNQUFLUCxJQUFFQyxJQUFFRyxFQUFDO0FBQUEsSUFBQyxHQUFFLEVBQUUsd0JBQXNCQztBQUFBLEVBQUM7QUFBQyxTQUFPTixHQUFFLE9BQUtBLEdBQUU7QUFBRTtBQUFDLFNBQVMsRUFBRUcsSUFBRUwsSUFBRTtBQUFDLE1BQUlFLEtBQUUsRUFBRSxLQUFJLENBQUM7QUFBRSxHQUFDQyxRQUFFLE9BQUssRUFBRUQsR0FBRSxLQUFJRixFQUFDLE1BQUlFLEdBQUUsS0FBR0csSUFBRUgsR0FBRSxJQUFFRixJQUFFLEVBQUUsSUFBSSxJQUFJLEtBQUtFLEVBQUM7QUFBRTtBQUFDLFNBQVMsRUFBRUcsSUFBRUwsSUFBRTtBQUFDLE1BQUlFLEtBQUUsRUFBRSxLQUFJLENBQUM7QUFBRSxHQUFDQyxRQUFFLE9BQUssRUFBRUQsR0FBRSxLQUFJRixFQUFDLE1BQUlFLEdBQUUsS0FBR0csSUFBRUgsR0FBRSxJQUFFRixJQUFFLEVBQUUsSUFBSSxLQUFLRSxFQUFDO0FBQUU7QUFBQyxTQUFTUyxJQUFFLEdBQUU7QUFBQyxTQUFPVCxNQUFFLEdBQUVVLElBQUUsV0FBVTtBQUFDLFdBQU0sRUFBQyxTQUFRLEVBQUM7QUFBQSxFQUFDLEdBQUUsRUFBRTtBQUFDO0FBQXNMLFNBQVNBLElBQUUsR0FBRUwsSUFBRTtBQUFDLE1BQUlGLEtBQUUsRUFBRSxLQUFJLENBQUM7QUFBRSxTQUFPLEVBQUVBLEdBQUUsS0FBSUUsRUFBQyxLQUFHRixHQUFFLE1BQUksRUFBRyxHQUFDQSxHQUFFLElBQUVFLElBQUVGLEdBQUUsTUFBSSxHQUFFQSxHQUFFLE9BQUtBLEdBQUU7QUFBRTtBQUFzRCxTQUFTUSxJQUFFLEdBQUU7QUFBQyxNQUFJUixLQUFFLEVBQUUsUUFBUSxFQUFFLEdBQUcsR0FBRUwsS0FBRSxFQUFFLEtBQUksQ0FBQztBQUFFLFNBQU9BLEdBQUUsSUFBRSxHQUFFSyxNQUFHLFFBQU1MLEdBQUUsT0FBS0EsR0FBRSxLQUFHLE1BQUdLLEdBQUUsSUFBSSxDQUFDLElBQUdBLEdBQUUsTUFBTSxTQUFPLEVBQUU7QUFBRTtBQUE2WCxTQUFTLElBQUc7QUFBQyxXQUFRRCxJQUFFQSxLQUFFLEVBQUU7QUFBUyxRQUFHQSxHQUFFLE9BQUtBLEdBQUU7QUFBSSxVQUFHO0FBQUMsUUFBQUEsR0FBRSxJQUFJLElBQUksUUFBUSxDQUFDLEdBQUVBLEdBQUUsSUFBSSxJQUFJLFFBQVFVLEdBQUMsR0FBRVYsR0FBRSxJQUFJLE1BQUksQ0FBQTtBQUFBLE1BQUUsU0FBT0csSUFBTjtBQUFTLFFBQUFILEdBQUUsSUFBSSxNQUFJLENBQUEsR0FBR0QsUUFBRSxJQUFJSSxJQUFFSCxHQUFFLEdBQUc7QUFBQSxNQUFDO0FBQUM7QUFBQ0QsUUFBRSxNQUFJLFNBQVMsR0FBRTtBQUFDLE1BQUUsTUFBSyxLQUFHLEVBQUUsQ0FBQztBQUFDLEdBQUVBLFFBQUUsTUFBSSxTQUFTLEdBQUU7QUFBQyxPQUFHLEVBQUUsQ0FBQyxHQUFFLElBQUU7QUFBRSxNQUFJSCxNQUFHLElBQUUsRUFBRSxLQUFLO0FBQUksRUFBQUEsT0FBSSxNQUFJLEtBQUdBLEdBQUUsTUFBSSxDQUFBLEdBQUcsRUFBRSxNQUFJLENBQUEsR0FBR0EsR0FBRSxHQUFHLFFBQVEsU0FBU0csSUFBRTtBQUFDLElBQUFBLEdBQUUsUUFBTUEsR0FBRSxLQUFHQSxHQUFFLE1BQUtBLEdBQUUsTUFBSSxHQUFFQSxHQUFFLE1BQUlBLEdBQUUsSUFBRTtBQUFBLEVBQU0sQ0FBQyxNQUFJSCxHQUFFLElBQUksUUFBUSxDQUFDLEdBQUVBLEdBQUUsSUFBSSxRQUFRYyxHQUFDLEdBQUVkLEdBQUUsTUFBSSxDQUFBLEtBQUssSUFBRTtBQUFDLEdBQUVHLFFBQUUsU0FBTyxTQUFTQyxJQUFFO0FBQUMsT0FBRyxFQUFFQSxFQUFDO0FBQUUsTUFBSUYsS0FBRUUsR0FBRTtBQUFJLEVBQUFGLE1BQUdBLEdBQUUsUUFBTUEsR0FBRSxJQUFJLElBQUksV0FBUyxNQUFJLEVBQUUsS0FBS0EsRUFBQyxLQUFHLE1BQUlDLFFBQUUsMkJBQXlCLElBQUVBLFFBQUUsMEJBQXdCLEdBQUcsQ0FBQyxJQUFHRCxHQUFFLElBQUksR0FBRyxRQUFRLFNBQVMsR0FBRTtBQUFDLE1BQUUsTUFBSSxFQUFFLE1BQUksRUFBRSxJQUFHLEVBQUUsUUFBTSxNQUFJLEVBQUUsS0FBRyxFQUFFLE1BQUssRUFBRSxJQUFFLFFBQU8sRUFBRSxNQUFJO0FBQUEsRUFBQyxDQUFDLElBQUcsSUFBRSxJQUFFO0FBQUksR0FBRUMsUUFBRSxNQUFJLFNBQVNDLElBQUVHLElBQUU7QUFBQyxFQUFBQSxHQUFFLEtBQUssU0FBU0gsSUFBRTtBQUFDLFFBQUc7QUFBQyxNQUFBQSxHQUFFLElBQUksUUFBUSxDQUFDLEdBQUVBLEdBQUUsTUFBSUEsR0FBRSxJQUFJLE9BQU8sU0FBUyxHQUFFO0FBQUMsZUFBTSxDQUFDLEVBQUUsTUFBSVUsSUFBRSxDQUFDO0FBQUEsTUFBQyxDQUFDO0FBQUEsSUFBQyxTQUFPVCxJQUFOO0FBQVMsTUFBQUUsR0FBRSxLQUFLLFNBQVMsR0FBRTtBQUFDLFVBQUUsUUFBTSxFQUFFLE1BQUksQ0FBQTtBQUFBLE1BQUcsQ0FBQyxHQUFFQSxLQUFFLElBQUdKLFFBQUUsSUFBSUUsSUFBRUQsR0FBRSxHQUFHO0FBQUEsSUFBQztBQUFBLEVBQUMsQ0FBQyxHQUFFLEtBQUcsRUFBRUEsSUFBRUcsRUFBQztBQUFDLEdBQUVKLFFBQUUsVUFBUSxTQUFTQyxJQUFFO0FBQUMsT0FBRyxFQUFFQSxFQUFDO0FBQUUsTUFBSUcsSUFBRUYsS0FBRUQsR0FBRTtBQUFJLEVBQUFDLE1BQUdBLEdBQUUsUUFBTUEsR0FBRSxJQUFJLEdBQUcsUUFBUSxTQUFTLEdBQUU7QUFBQyxRQUFHO0FBQUMsUUFBRSxDQUFDO0FBQUEsSUFBQyxTQUFPRixJQUFOO0FBQVMsTUFBQUksS0FBRUo7QUFBQSxJQUFDO0FBQUEsRUFBQyxDQUFDLEdBQUVFLEdBQUUsTUFBSSxRQUFPRSxNQUFHSixRQUFFLElBQUlJLElBQUVGLEdBQUUsR0FBRztBQUFFO0FBQUUsSUFBSVUsTUFBRSxjQUFZLE9BQU87QUFBc0IsU0FBUyxFQUFFLEdBQUU7QUFBQyxNQUFJWCxJQUFFRyxLQUFFLFdBQVU7QUFBQyxpQkFBYUYsRUFBQyxHQUFFVSxPQUFHLHFCQUFxQlgsRUFBQyxHQUFFLFdBQVcsQ0FBQztBQUFBLEVBQUMsR0FBRUMsS0FBRSxXQUFXRSxJQUFFLEdBQUc7QUFBRVEsVUFBSVgsS0FBRSxzQkFBc0JHLEVBQUM7QUFBRTtBQUFDLFNBQVMsRUFBRSxHQUFFO0FBQUMsTUFBSUgsS0FBRSxHQUFFQyxLQUFFLEVBQUU7QUFBSSxnQkFBWSxPQUFPQSxPQUFJLEVBQUUsTUFBSSxRQUFPQSxHQUFHLElBQUUsSUFBRUQ7QUFBQztBQUFDLFNBQVNVLElBQUUsR0FBRTtBQUFDLE1BQUlWLEtBQUU7QUFBRSxJQUFFLE1BQUksRUFBRSxHQUFFLEdBQUcsSUFBRUE7QUFBQztBQUFDLFNBQVMsRUFBRSxHQUFFQSxJQUFFO0FBQUMsU0FBTSxDQUFDLEtBQUcsRUFBRSxXQUFTQSxHQUFFLFVBQVFBLEdBQUUsS0FBSyxTQUFTQSxJQUFFRyxJQUFFO0FBQUMsV0FBT0gsT0FBSSxFQUFFRyxFQUFDO0FBQUEsRUFBQyxDQUFDO0FBQUM7QUFBQyxTQUFTRCxJQUFFLEdBQUVGLElBQUU7QUFBQyxTQUFNLGNBQVksT0FBT0EsS0FBRUEsR0FBRSxDQUFDLElBQUVBO0FBQUM7QUNBbDVGLFNBQVMsRUFBRSxHQUFFQSxJQUFFO0FBQUMsV0FBUU0sTUFBS047QUFBRSxNQUFFTSxFQUFDLElBQUVOLEdBQUVNLEVBQUM7QUFBRSxTQUFPO0FBQUM7QUFBQyxTQUFTLEVBQUUsR0FBRU4sSUFBRTtBQUFDLFdBQVFNLE1BQUs7QUFBRSxRQUFHLGVBQWFBLE1BQUcsRUFBRUEsTUFBS047QUFBRyxhQUFNO0FBQUcsV0FBUUcsTUFBS0g7QUFBRSxRQUFHLGVBQWFHLE1BQUcsRUFBRUEsRUFBQyxNQUFJSCxHQUFFRyxFQUFDO0FBQUUsYUFBTTtBQUFHLFNBQU07QUFBRTtBQUE2RCxTQUFTLEVBQUUsR0FBRTtBQUFDLE9BQUssUUFBTTtBQUFDO0FBQUEsQ0FBaVQsRUFBRSxZQUFVLElBQUlKLGFBQUcsdUJBQXFCLE1BQUcsRUFBRSxVQUFVLHdCQUFzQixTQUFTLEdBQUVDLElBQUU7QUFBQyxTQUFPLEVBQUUsS0FBSyxPQUFNLENBQUMsS0FBRyxFQUFFLEtBQUssT0FBTUEsRUFBQztBQUFDO0FBQUUsSUFBSSxJQUFFTSxRQUFFO0FBQUlBLFFBQUUsTUFBSSxTQUFTLEdBQUU7QUFBQyxJQUFFLFFBQU0sRUFBRSxLQUFLLE9BQUssRUFBRSxRQUFNLEVBQUUsTUFBTSxNQUFJLEVBQUUsS0FBSSxFQUFFLE1BQUksT0FBTSxLQUFHLEVBQUUsQ0FBQztBQUFDO0FBQXVTLElBQTJNLElBQUVBLFFBQUU7QUFBSUEsUUFBRSxNQUFJLFNBQVMsR0FBRU4sSUFBRU0sSUFBRUgsSUFBRTtBQUFDLE1BQUcsRUFBRTtBQUFLLGFBQVFGLElBQUVILEtBQUVFLElBQUVGLEtBQUVBLEdBQUU7QUFBSSxXQUFJRyxLQUFFSCxHQUFFLFFBQU1HLEdBQUU7QUFBSSxlQUFPLFFBQU1ELEdBQUUsUUFBTUEsR0FBRSxNQUFJTSxHQUFFLEtBQUlOLEdBQUUsTUFBSU0sR0FBRSxNQUFLTCxHQUFFLElBQUksR0FBRUQsRUFBQztBQUFBO0FBQUUsSUFBRSxHQUFFQSxJQUFFTSxJQUFFSCxFQUFDO0FBQUM7QUFBRSxJQUFJLElBQUVHLFFBQUU7QUFBUSxTQUFTLEVBQUUsR0FBRU4sSUFBRU0sSUFBRTtBQUFDLFNBQU8sTUFBSSxFQUFFLE9BQUssRUFBRSxJQUFJLFFBQU0sRUFBRSxJQUFJLElBQUksR0FBRyxRQUFRLFNBQVNQLElBQUU7QUFBQyxrQkFBWSxPQUFPQSxHQUFFLE9BQUtBLEdBQUUsSUFBSztBQUFBLEVBQUEsQ0FBQyxHQUFFLEVBQUUsSUFBSSxNQUFJLE9BQU0sU0FBTyxJQUFFLEVBQUUsQ0FBQSxHQUFHLENBQUMsR0FBRyxRQUFNLEVBQUUsSUFBSSxRQUFNTyxPQUFJLEVBQUUsSUFBSSxNQUFJTixLQUFHLEVBQUUsTUFBSSxPQUFNLEVBQUUsTUFBSSxFQUFFLE9BQUssRUFBRSxJQUFJLElBQUksU0FBU0QsSUFBRTtBQUFDLFdBQU8sRUFBRUEsSUFBRUMsSUFBRU0sRUFBQztBQUFBLEVBQUMsQ0FBQyxJQUFHO0FBQUM7QUFBQyxTQUFTLEVBQUUsR0FBRU4sSUFBRU0sSUFBRTtBQUFDLFNBQU8sTUFBSSxFQUFFLE1BQUksTUFBSyxFQUFFLE1BQUksRUFBRSxPQUFLLEVBQUUsSUFBSSxJQUFJLFNBQVNQLElBQUU7QUFBQyxXQUFPLEVBQUVBLElBQUVDLElBQUVNLEVBQUM7QUFBQSxFQUFDLENBQUMsR0FBRSxFQUFFLE9BQUssRUFBRSxJQUFJLFFBQU1OLE9BQUksRUFBRSxPQUFLTSxHQUFFLGFBQWEsRUFBRSxLQUFJLEVBQUUsR0FBRyxHQUFFLEVBQUUsSUFBSSxNQUFJLE1BQUcsRUFBRSxJQUFJLE1BQUlBLE1BQUk7QUFBQztBQUFDLFNBQVMsSUFBRztBQUFDLE9BQUssTUFBSSxHQUFFLEtBQUssSUFBRSxNQUFLLEtBQUssTUFBSTtBQUFJO0FBQUMsU0FBUyxFQUFFLEdBQUU7QUFBQyxNQUFJTixLQUFFLEVBQUUsR0FBRztB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QUFBLFlBQVFULE9BQU83RyxNQUFNc0g7QUFBQUEsWUFBT3ZXLFdBQ2pERSxFQUFBLE9BQUE7QUFBQSxjQUFLeVYsV0FBV0gsU0FBT2E7QUFBQUEsY0FBTVAsT0FBTzdHLE1BQU1vSDtBQUFBQSxZQUFBQSxDQUFLLElBQzlDcEgsV0FBTXNILFdBQU50SCxtQkFBY2pQLFFBQVE7QUFBQSxVQUFBLENBQUE7QUFBQSxRQUFBLENBRXJCLENBQUE7QUFBQSxNQUFBLENBQ0YsQ0FBQTtBQUFBLElBQUEsQ0FDRixDQUFBO0FBQUEsRUFBQSxDQUNKO0FBRVI7QUFFQSxNQUFlSSxRQUFBQSxPQUFPRixFQUFDK2IsYUFBVztBQ2hHbEMsTUFBTVksY0FBY0EsQ0FDbEJ0YyxPQUNBMk8sT0FDQXlCLE1BQ0ExUSxPQUNBaU0sWUFBVTRRLFlBQ1A7QUFDSCxRQUFNQyxXQUFXO0FBQUEsSUFBRSxHQUFHeGM7QUFBQUEsRUFBQUE7QUFFdEIyTCxZQUFRbkQsUUFBUTBELENBQVUsV0FBQTtBQUN4QnNRLGFBQVM3TixLQUFLLElBQUk7QUFBQSxNQUNoQixHQUFHNk4sU0FBUzdOLEtBQUs7QUFBQSxNQUNqQixDQUFDekMsTUFBTSxHQUFHO0FBQUEsUUFDUixHQUFHc1EsU0FBUzdOLEtBQUssRUFBRXpDLE1BQU07QUFBQSxRQUN6QixDQUFDa0UsSUFBSSxHQUFHLE9BQU8xUSxVQUFVLGFBQWFBLE1BQU11SyxJQUFJdVMsVUFBVyxHQUFFN04sU0FBU3pDLFVBQVVrRSxNQUFNLENBQUMsSUFBSTFRO0FBQUFBLE1BQzdGO0FBQUEsSUFBQTtBQUFBLEVBQ0YsQ0FDRDtBQUNNOGMsU0FBQUE7QUFDVDsiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMCwxLDIsNCw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzXX0=
|
2884
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVzLmVzLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9wcmVhY3QvaG9va3MvZGlzdC9ob29rcy5tb2R1bGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9kaXN0L2NvbXBhdC5tb2R1bGUuanMiLCIuLi9zcmMvaG9va3MvdXNlR2lmdE9wZW4udHMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvcHJlYWN0L2pzeC1ydW50aW1lL2Rpc3QvanN4UnVudGltZS5tb2R1bGUuanMiLCIuLi9zcmMvU3RhdGVDb250ZXh0LnRzeCIsIi4uL3NyYy9oZWxwZXJzL3JlbmRlci50c3giLCIuLi9zcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlLnRzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlQ2xlYXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2VxLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzb2NJbmRleE9mLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlRGVsZXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlR2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlU2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTGlzdENhY2hlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tDbGVhci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrRGVsZXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tHZXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0hhcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZyZWVHbG9iYWwuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19yb290LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3ltYm9sLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UmF3VGFnLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb2JqZWN0VG9TdHJpbmcuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNGdW5jdGlvbi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcmVKc0RhdGEuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc01hc2tlZC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3RvU291cmNlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmF0aXZlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VmFsdWUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXROYXRpdmUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXAuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVDcmVhdGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoQ2xlYXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoRGVsZXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEdldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hIYXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoU2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fSGFzaC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlQ2xlYXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleWFibGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRNYXBEYXRhLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVEZWxldGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUdldC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlSGFzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVTZXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXBDYWNoZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrU2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3RhY2suanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19kZWZpbmVQcm9wZXJ0eS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBc3NpZ25WYWx1ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc2lnbk1lcmdlVmFsdWUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVCYXNlRm9yLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZvci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lQnVmZmVyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fVWludDhBcnJheS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lQXJyYXlCdWZmZXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZVR5cGVkQXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5QXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQ3JlYXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlckFyZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFByb3RvdHlwZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzUHJvdG90eXBlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lT2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdExpa2UuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNBcmd1bWVudHMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJndW1lbnRzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0xlbmd0aC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2UuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXlMaWtlT2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViRmFsc2UuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQnVmZmVyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1BsYWluT2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzVHlwZWRBcnJheS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbmFyeS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25vZGVVdGlsLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1R5cGVkQXJyYXkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zYWZlR2V0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzaWduVmFsdWUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5T2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRpbWVzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TGlrZUtleXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzSW4uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5c0luLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlzSW4uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL3RvUGxhaW5PYmplY3QuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlTWVyZ2VEZWVwLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZU1lcmdlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pZGVudGl0eS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FwcGx5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlclJlc3QuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2NvbnN0YW50LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldFRvU3RyaW5nLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2hvcnRPdXQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRUb1N0cmluZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VSZXN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJdGVyYXRlZUNhbGwuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVBc3NpZ25lci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbWVyZ2UuanMiLCIuLi8uLi91dGlscy9kb20udHMiLCIuLi8uLi91dGlscy9pdGVyYXRvci50cyIsIi4uLy4uL3V0aWxzL2luZGV4LnRzIiwiLi4vc3JjL2hlbHBlcnMvZ2V0RGV2aWNlU3RhdGUudHMiLCIuLi9zcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUudHMiLCIuLi9zcmMvaG9va3MvdXNlQ29udGFpbmVyRGV2aWNlLnRzIiwiLi4vc3JjL2hlbHBlcnMvcGFyc2VSdWxlcy50cyIsIi4uL3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQudHN4IiwiLi4vc3JjL2hvb2tzL3VzZVRvZ2dsZS50cyIsIi4uL3NyYy9jb21wb25lbnRzL0Nsb3NlSWNvbi50c3giLCIuLi9zcmMvY29tcG9uZW50cy9HaWZ0SWNvbi50c3giLCIuLi9zcmMvaG9va3MvcHJvbW9zL3VzZUdpZnRSdWxlcy50cyIsIi4uL3NyYy9oZWxwZXJzL2NvbnN0YW50cy50cyIsIi4uL3NyYy9ob29rcy91c2VNZXRyaWNzLnRzIiwiLi4vc3JjL2hvb2tzL3VzZUV4dHJhY3RGb250cy50cyIsIi4uL3NyYy9wcm9tb3MvU2ltcGxlR2lmdC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0NvbXBsZXhHaWZ0L2NvbXBvbmVudHMvQm9udXNDYXJkL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvQ29tcGxleEdpZnQvaW5kZXgudHN4IiwiLi4vc3JjL2hlbHBlcnMvc3dpdGNoVGV4dEFsaWduVG9GbGV4LnRzIiwiLi4vc3JjL3Byb21vcy9TaW1wbGVQb3B1cC9jb21wb25lbnRzL2xpbmUvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9TaW1wbGVQb3B1cC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0NvbXBsZXhQb3B1cC9jb21wb25lbnRzL0JvbnVzL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvQ29tcGxleFBvcHVwL2luZGV4LnRzeCIsIi4uL3NyYy9wcm9tb3MvRXhwcmVzc1BvcHVwL2NvbXBvbmVudHMvTWF0Y2gvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9FeHByZXNzUG9wdXAvaW5kZXgudHN4IiwiLi4vc3JjL3Byb21vcy9Cb251c0NhcmQvY29tcG9uZW50cy9Cb251cy9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL0JvbnVzQ2FyZC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL1dpZGVDYXJkL2NvbXBvbmVudHMvVGV4dC9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL1dpZGVDYXJkL2NvbXBvbmVudHMvTWF0Y2hlcy9pbmRleC50c3giLCIuLi9zcmMvcHJvbW9zL1dpZGVDYXJkL2NvbXBvbmVudHMvTWF0Y2hlc09uZVR3by9pbmRleC50c3giLCIuLi9zcmMvaG9va3MvdXNlQW5pbWF0ZWRMaXN0LnRzIiwiLi4vc3JjL3Byb21vcy9XaWRlQ2FyZC9pbmRleC50c3giLCIuLi9zcmMvaGVscGVycy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcblx0Q29weXJpZ2h0IChjKSAyMDE4IEplZCBXYXRzb24uXG5cdExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXG5cdGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlvL2NsYXNzbmFtZXNcbiovXG4vKiBnbG9iYWwgZGVmaW5lICovXG5cbihmdW5jdGlvbiAoKSB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgaGFzT3duID0ge30uaGFzT3duUHJvcGVydHk7XG5cdHZhciBuYXRpdmVDb2RlU3RyaW5nID0gJ1tuYXRpdmUgY29kZV0nO1xuXG5cdGZ1bmN0aW9uIGNsYXNzTmFtZXMoKSB7XG5cdFx0dmFyIGNsYXNzZXMgPSBbXTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKCFhcmcpIGNvbnRpbnVlO1xuXG5cdFx0XHR2YXIgYXJnVHlwZSA9IHR5cGVvZiBhcmc7XG5cblx0XHRcdGlmIChhcmdUeXBlID09PSAnc3RyaW5nJyB8fCBhcmdUeXBlID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRjbGFzc2VzLnB1c2goYXJnKTtcblx0XHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG5cdFx0XHRcdGlmIChhcmcubGVuZ3RoKSB7XG5cdFx0XHRcdFx0dmFyIGlubmVyID0gY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpO1xuXHRcdFx0XHRcdGlmIChpbm5lcikge1xuXHRcdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGlubmVyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoYXJnVHlwZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0aWYgKGFyZy50b1N0cmluZyAhPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyAmJiAhYXJnLnRvU3RyaW5nLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1tuYXRpdmUgY29kZV0nKSkge1xuXHRcdFx0XHRcdGNsYXNzZXMucHVzaChhcmcudG9TdHJpbmcoKSk7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKHZhciBrZXkgaW4gYXJnKSB7XG5cdFx0XHRcdFx0aWYgKGhhc093bi5jYWxsKGFyZywga2V5KSAmJiBhcmdba2V5XSkge1xuXHRcdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGtleSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0Y2xhc3NOYW1lcy5kZWZhdWx0ID0gY2xhc3NOYW1lcztcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLmFtZCA9PT0gJ29iamVjdCcgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIHJlZ2lzdGVyIGFzICdjbGFzc25hbWVzJywgY29uc2lzdGVudCB3aXRoIG5wbSBwYWNrYWdlIG5hbWVcblx0XHRkZWZpbmUoJ2NsYXNzbmFtZXMnLCBbXSwgZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGNsYXNzTmFtZXM7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0d2luZG93LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzO1xuXHR9XG59KCkpO1xuIiwiaW1wb3J0e29wdGlvbnMgYXMgbn1mcm9tXCJwcmVhY3RcIjt2YXIgdCxyLHUsaSxvPTAsZj1bXSxjPVtdLGU9bi5fX2IsYT1uLl9fcix2PW4uZGlmZmVkLGw9bi5fX2MsbT1uLnVubW91bnQ7ZnVuY3Rpb24gZCh0LHUpe24uX19oJiZuLl9faChyLHQsb3x8dSksbz0wO3ZhciBpPXIuX19IfHwoci5fX0g9e19fOltdLF9faDpbXX0pO3JldHVybiB0Pj1pLl9fLmxlbmd0aCYmaS5fXy5wdXNoKHtfX1Y6Y30pLGkuX19bdF19ZnVuY3Rpb24gaChuKXtyZXR1cm4gbz0xLHMoQixuKX1mdW5jdGlvbiBzKG4sdSxpKXt2YXIgbz1kKHQrKywyKTtpZihvLnQ9biwhby5fX2MmJihvLl9fPVtpP2kodSk6Qih2b2lkIDAsdSksZnVuY3Rpb24obil7dmFyIHQ9by5fX04/by5fX05bMF06by5fX1swXSxyPW8udCh0LG4pO3QhPT1yJiYoby5fX049W3Isby5fX1sxXV0sby5fX2Muc2V0U3RhdGUoe30pKX1dLG8uX19jPXIsIXIudSkpe3ZhciBmPWZ1bmN0aW9uKG4sdCxyKXtpZighby5fX2MuX19IKXJldHVybiEwO3ZhciB1PW8uX19jLl9fSC5fXy5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIG4uX19jfSk7aWYodS5ldmVyeShmdW5jdGlvbihuKXtyZXR1cm4hbi5fX059KSlyZXR1cm4hY3x8Yy5jYWxsKHRoaXMsbix0LHIpO3ZhciBpPSExO3JldHVybiB1LmZvckVhY2goZnVuY3Rpb24obil7aWYobi5fX04pe3ZhciB0PW4uX19bMF07bi5fXz1uLl9fTixuLl9fTj12b2lkIDAsdCE9PW4uX19bMF0mJihpPSEwKX19KSwhKCFpJiZvLl9fYy5wcm9wcz09PW4pJiYoIWN8fGMuY2FsbCh0aGlzLG4sdCxyKSl9O3IudT0hMDt2YXIgYz1yLnNob3VsZENvbXBvbmVudFVwZGF0ZSxlPXIuY29tcG9uZW50V2lsbFVwZGF0ZTtyLmNvbXBvbmVudFdpbGxVcGRhdGU9ZnVuY3Rpb24obix0LHIpe2lmKHRoaXMuX19lKXt2YXIgdT1jO2M9dm9pZCAwLGYobix0LHIpLGM9dX1lJiZlLmNhbGwodGhpcyxuLHQscil9LHIuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ9cmV0dXJuIG8uX19OfHxvLl9ffWZ1bmN0aW9uIHAodSxpKXt2YXIgbz1kKHQrKywzKTshbi5fX3MmJnooby5fX0gsaSkmJihvLl9fPXUsby5pPWksci5fX0guX19oLnB1c2gobykpfWZ1bmN0aW9uIHkodSxpKXt2YXIgbz1kKHQrKyw0KTshbi5fX3MmJnooby5fX0gsaSkmJihvLl9fPXUsby5pPWksci5fX2gucHVzaChvKSl9ZnVuY3Rpb24gXyhuKXtyZXR1cm4gbz01LEYoZnVuY3Rpb24oKXtyZXR1cm57Y3VycmVudDpufX0sW10pfWZ1bmN0aW9uIEEobix0LHIpe289Nix5KGZ1bmN0aW9uKCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2Ygbj8obih0KCkpLGZ1bmN0aW9uKCl7cmV0dXJuIG4obnVsbCl9KTpuPyhuLmN1cnJlbnQ9dCgpLGZ1bmN0aW9uKCl7cmV0dXJuIG4uY3VycmVudD1udWxsfSk6dm9pZCAwfSxudWxsPT1yP3I6ci5jb25jYXQobikpfWZ1bmN0aW9uIEYobixyKXt2YXIgdT1kKHQrKyw3KTtyZXR1cm4geih1Ll9fSCxyKT8odS5fX1Y9bigpLHUuaT1yLHUuX19oPW4sdS5fX1YpOnUuX199ZnVuY3Rpb24gVChuLHQpe3JldHVybiBvPTgsRihmdW5jdGlvbigpe3JldHVybiBufSx0KX1mdW5jdGlvbiBxKG4pe3ZhciB1PXIuY29udGV4dFtuLl9fY10saT1kKHQrKyw5KTtyZXR1cm4gaS5jPW4sdT8obnVsbD09aS5fXyYmKGkuX189ITAsdS5zdWIocikpLHUucHJvcHMudmFsdWUpOm4uX199ZnVuY3Rpb24geCh0LHIpe24udXNlRGVidWdWYWx1ZSYmbi51c2VEZWJ1Z1ZhbHVlKHI/cih0KTp0KX1mdW5jdGlvbiBQKG4pe3ZhciB1PWQodCsrLDEwKSxpPWgoKTtyZXR1cm4gdS5fXz1uLHIuY29tcG9uZW50RGlkQ2F0Y2h8fChyLmNvbXBvbmVudERpZENhdGNoPWZ1bmN0aW9uKG4sdCl7dS5fXyYmdS5fXyhuLHQpLGlbMV0obil9KSxbaVswXSxmdW5jdGlvbigpe2lbMV0odm9pZCAwKX1dfWZ1bmN0aW9uIFYoKXt2YXIgbj1kKHQrKywxMSk7aWYoIW4uX18pe2Zvcih2YXIgdT1yLl9fdjtudWxsIT09dSYmIXUuX19tJiZudWxsIT09dS5fXzspdT11Ll9fO3ZhciBpPXUuX19tfHwodS5fX209WzAsMF0pO24uX189XCJQXCIraVswXStcIi1cIitpWzFdKyt9cmV0dXJuIG4uX199ZnVuY3Rpb24gYigpe2Zvcih2YXIgdDt0PWYuc2hpZnQoKTspaWYodC5fX1AmJnQuX19IKXRyeXt0Ll9fSC5fX2guZm9yRWFjaChrKSx0Ll9fSC5fX2guZm9yRWFjaCh3KSx0Ll9fSC5fX2g9W119Y2F0Y2gocil7dC5fX0guX19oPVtdLG4uX19lKHIsdC5fX3YpfX1uLl9fYj1mdW5jdGlvbihuKXtyPW51bGwsZSYmZShuKX0sbi5fX3I9ZnVuY3Rpb24obil7YSYmYShuKSx0PTA7dmFyIGk9KHI9bi5fX2MpLl9fSDtpJiYodT09PXI/KGkuX19oPVtdLHIuX19oPVtdLGkuX18uZm9yRWFjaChmdW5jdGlvbihuKXtuLl9fTiYmKG4uX189bi5fX04pLG4uX19WPWMsbi5fX049bi5pPXZvaWQgMH0pKTooaS5fX2guZm9yRWFjaChrKSxpLl9faC5mb3JFYWNoKHcpLGkuX19oPVtdKSksdT1yfSxuLmRpZmZlZD1mdW5jdGlvbih0KXt2JiZ2KHQpO3ZhciBvPXQuX19jO28mJm8uX19IJiYoby5fX0guX19oLmxlbmd0aCYmKDEhPT1mLnB1c2gobykmJmk9PT1uLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8KChpPW4ucmVxdWVzdEFuaW1hdGlvbkZyYW1lKXx8aikoYikpLG8uX19ILl9fLmZvckVhY2goZnVuY3Rpb24obil7bi5pJiYobi5fX0g9bi5pKSxuLl9fViE9PWMmJihuLl9fPW4uX19WKSxuLmk9dm9pZCAwLG4uX19WPWN9KSksdT1yPW51bGx9LG4uX19jPWZ1bmN0aW9uKHQscil7ci5zb21lKGZ1bmN0aW9uKHQpe3RyeXt0Ll9faC5mb3JFYWNoKGspLHQuX19oPXQuX19oLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4hbi5fX3x8dyhuKX0pfWNhdGNoKHUpe3Iuc29tZShmdW5jdGlvbihuKXtuLl9faCYmKG4uX19oPVtdKX0pLHI9W10sbi5fX2UodSx0Ll9fdil9fSksbCYmbCh0LHIpfSxuLnVubW91bnQ9ZnVuY3Rpb24odCl7bSYmbSh0KTt2YXIgcix1PXQuX19jO3UmJnUuX19IJiYodS5fX0guX18uZm9yRWFjaChmdW5jdGlvbihuKXt0cnl7ayhuKX1jYXRjaChuKXtyPW59fSksdS5fX0g9dm9pZCAwLHImJm4uX19lKHIsdS5fX3YpKX07dmFyIGc9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lO2Z1bmN0aW9uIGoobil7dmFyIHQscj1mdW5jdGlvbigpe2NsZWFyVGltZW91dCh1KSxnJiZjYW5jZWxBbmltYXRpb25GcmFtZSh0KSxzZXRUaW1lb3V0KG4pfSx1PXNldFRpbWVvdXQociwxMDApO2cmJih0PXJlcXVlc3RBbmltYXRpb25GcmFtZShyKSl9ZnVuY3Rpb24gayhuKXt2YXIgdD1yLHU9bi5fX2M7XCJmdW5jdGlvblwiPT10eXBlb2YgdSYmKG4uX19jPXZvaWQgMCx1KCkpLHI9dH1mdW5jdGlvbiB3KG4pe3ZhciB0PXI7bi5fX2M9bi5fXygpLHI9dH1mdW5jdGlvbiB6KG4sdCl7cmV0dXJuIW58fG4ubGVuZ3RoIT09dC5sZW5ndGh8fHQuc29tZShmdW5jdGlvbih0LHIpe3JldHVybiB0IT09bltyXX0pfWZ1bmN0aW9uIEIobix0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Qobik6dH1leHBvcnR7VCBhcyB1c2VDYWxsYmFjayxxIGFzIHVzZUNvbnRleHQseCBhcyB1c2VEZWJ1Z1ZhbHVlLHAgYXMgdXNlRWZmZWN0LFAgYXMgdXNlRXJyb3JCb3VuZGFyeSxWIGFzIHVzZUlkLEEgYXMgdXNlSW1wZXJhdGl2ZUhhbmRsZSx5IGFzIHVzZUxheW91dEVmZmVjdCxGIGFzIHVzZU1lbW8scyBhcyB1c2VSZWR1Y2VyLF8gYXMgdXNlUmVmLGggYXMgdXNlU3RhdGV9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aG9va3MubW9kdWxlLmpzLm1hcFxuIiwiaW1wb3J0e0NvbXBvbmVudCBhcyBuLGNyZWF0ZUVsZW1lbnQgYXMgdCxvcHRpb25zIGFzIGUsdG9DaGlsZEFycmF5IGFzIHIsRnJhZ21lbnQgYXMgdSxyZW5kZXIgYXMgbyxoeWRyYXRlIGFzIGksY3JlYXRlQ29udGV4dCBhcyBsLGNyZWF0ZVJlZiBhcyBjLGNsb25lRWxlbWVudCBhcyBmfWZyb21cInByZWFjdFwiO2V4cG9ydHtDb21wb25lbnQsRnJhZ21lbnQsY3JlYXRlQ29udGV4dCxjcmVhdGVFbGVtZW50LGNyZWF0ZVJlZn1mcm9tXCJwcmVhY3RcIjtpbXBvcnR7dXNlU3RhdGUgYXMgYSx1c2VJZCBhcyBzLHVzZVJlZHVjZXIgYXMgaCx1c2VFZmZlY3QgYXMgdix1c2VMYXlvdXRFZmZlY3QgYXMgZCx1c2VSZWYgYXMgcCx1c2VJbXBlcmF0aXZlSGFuZGxlIGFzIG0sdXNlTWVtbyBhcyB5LHVzZUNhbGxiYWNrIGFzIF8sdXNlQ29udGV4dCBhcyBiLHVzZURlYnVnVmFsdWUgYXMgU31mcm9tXCJwcmVhY3QvaG9va3NcIjtleHBvcnQqZnJvbVwicHJlYWN0L2hvb2tzXCI7ZnVuY3Rpb24gZyhuLHQpe2Zvcih2YXIgZSBpbiB0KW5bZV09dFtlXTtyZXR1cm4gbn1mdW5jdGlvbiBDKG4sdCl7Zm9yKHZhciBlIGluIG4paWYoXCJfX3NvdXJjZVwiIT09ZSYmIShlIGluIHQpKXJldHVybiEwO2Zvcih2YXIgciBpbiB0KWlmKFwiX19zb3VyY2VcIiE9PXImJm5bcl0hPT10W3JdKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEUobix0KXtyZXR1cm4gbj09PXQmJigwIT09bnx8MS9uPT0xL3QpfHxuIT1uJiZ0IT10fWZ1bmN0aW9uIHcobil7dGhpcy5wcm9wcz1ufWZ1bmN0aW9uIHgobixlKXtmdW5jdGlvbiByKG4pe3ZhciB0PXRoaXMucHJvcHMucmVmLHI9dD09bi5yZWY7cmV0dXJuIXImJnQmJih0LmNhbGw/dChudWxsKTp0LmN1cnJlbnQ9bnVsbCksZT8hZSh0aGlzLnByb3BzLG4pfHwhcjpDKHRoaXMucHJvcHMsbil9ZnVuY3Rpb24gdShlKXtyZXR1cm4gdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGU9cix0KG4sZSl9cmV0dXJuIHUuZGlzcGxheU5hbWU9XCJNZW1vKFwiKyhuLmRpc3BsYXlOYW1lfHxuLm5hbWUpK1wiKVwiLHUucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsdS5fX2Y9ITAsdX0ody5wcm90b3R5cGU9bmV3IG4pLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwLHcucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBDKHRoaXMucHJvcHMsbil8fEModGhpcy5zdGF0ZSx0KX07dmFyIFI9ZS5fX2I7ZS5fX2I9ZnVuY3Rpb24obil7bi50eXBlJiZuLnR5cGUuX19mJiZuLnJlZiYmKG4ucHJvcHMucmVmPW4ucmVmLG4ucmVmPW51bGwpLFImJlIobil9O3ZhciBOPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKXx8MzkxMTtmdW5jdGlvbiBrKG4pe2Z1bmN0aW9uIHQodCl7dmFyIGU9Zyh7fSx0KTtyZXR1cm4gZGVsZXRlIGUucmVmLG4oZSx0LnJlZnx8bnVsbCl9cmV0dXJuIHQuJCR0eXBlb2Y9Tix0LnJlbmRlcj10LHQucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9dC5fX2Y9ITAsdC5kaXNwbGF5TmFtZT1cIkZvcndhcmRSZWYoXCIrKG4uZGlzcGxheU5hbWV8fG4ubmFtZSkrXCIpXCIsdH12YXIgQT1mdW5jdGlvbihuLHQpe3JldHVybiBudWxsPT1uP251bGw6cihyKG4pLm1hcCh0KSl9LE89e21hcDpBLGZvckVhY2g6QSxjb3VudDpmdW5jdGlvbihuKXtyZXR1cm4gbj9yKG4pLmxlbmd0aDowfSxvbmx5OmZ1bmN0aW9uKG4pe3ZhciB0PXIobik7aWYoMSE9PXQubGVuZ3RoKXRocm93XCJDaGlsZHJlbi5vbmx5XCI7cmV0dXJuIHRbMF19LHRvQXJyYXk6cn0sVD1lLl9fZTtlLl9fZT1mdW5jdGlvbihuLHQsZSxyKXtpZihuLnRoZW4pZm9yKHZhciB1LG89dDtvPW8uX187KWlmKCh1PW8uX19jKSYmdS5fX2MpcmV0dXJuIG51bGw9PXQuX19lJiYodC5fX2U9ZS5fX2UsdC5fX2s9ZS5fX2spLHUuX19jKG4sdCk7VChuLHQsZSxyKX07dmFyIEk9ZS51bm1vdW50O2Z1bmN0aW9uIEwobix0LGUpe3JldHVybiBuJiYobi5fX2MmJm4uX19jLl9fSCYmKG4uX19jLl9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKG4pe1wiZnVuY3Rpb25cIj09dHlwZW9mIG4uX19jJiZuLl9fYygpfSksbi5fX2MuX19IPW51bGwpLG51bGwhPShuPWcoe30sbikpLl9fYyYmKG4uX19jLl9fUD09PWUmJihuLl9fYy5fX1A9dCksbi5fX2M9bnVsbCksbi5fX2s9bi5fX2smJm4uX19rLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gTChuLHQsZSl9KSksbn1mdW5jdGlvbiBVKG4sdCxlKXtyZXR1cm4gbiYmKG4uX192PW51bGwsbi5fX2s9bi5fX2smJm4uX19rLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gVShuLHQsZSl9KSxuLl9fYyYmbi5fX2MuX19QPT09dCYmKG4uX19lJiZlLmluc2VydEJlZm9yZShuLl9fZSxuLl9fZCksbi5fX2MuX19lPSEwLG4uX19jLl9fUD1lKSksbn1mdW5jdGlvbiBEKCl7dGhpcy5fX3U9MCx0aGlzLnQ9bnVsbCx0aGlzLl9fYj1udWxsfWZ1bmN0aW9uIEYobil7dmFyIHQ9bi5fXy5fX2M7cmV0dXJuIHQmJnQuX19hJiZ0Ll9fYShuKX1mdW5jdGlvbiBNKG4pe3ZhciBlLHIsdTtmdW5jdGlvbiBvKG8pe2lmKGV8fChlPW4oKSkudGhlbihmdW5jdGlvbihuKXtyPW4uZGVmYXVsdHx8bn0sZnVuY3Rpb24obil7dT1ufSksdSl0aHJvdyB1O2lmKCFyKXRocm93IGU7cmV0dXJuIHQocixvKX1yZXR1cm4gby5kaXNwbGF5TmFtZT1cIkxhenlcIixvLl9fZj0hMCxvfWZ1bmN0aW9uIFYoKXt0aGlzLnU9bnVsbCx0aGlzLm89bnVsbH1lLnVubW91bnQ9ZnVuY3Rpb24obil7dmFyIHQ9bi5fX2M7dCYmdC5fX1ImJnQuX19SKCksdCYmITA9PT1uLl9faCYmKG4udHlwZT1udWxsKSxJJiZJKG4pfSwoRC5wcm90b3R5cGU9bmV3IG4pLl9fYz1mdW5jdGlvbihuLHQpe3ZhciBlPXQuX19jLHI9dGhpcztudWxsPT1yLnQmJihyLnQ9W10pLHIudC5wdXNoKGUpO3ZhciB1PUYoci5fX3YpLG89ITEsaT1mdW5jdGlvbigpe298fChvPSEwLGUuX19SPW51bGwsdT91KGwpOmwoKSl9O2UuX19SPWk7dmFyIGw9ZnVuY3Rpb24oKXtpZighLS1yLl9fdSl7aWYoci5zdGF0ZS5fX2Epe3ZhciBuPXIuc3RhdGUuX19hO3IuX192Ll9fa1swXT1VKG4sbi5fX2MuX19QLG4uX19jLl9fTyl9dmFyIHQ7Zm9yKHIuc2V0U3RhdGUoe19fYTpyLl9fYj1udWxsfSk7dD1yLnQucG9wKCk7KXQuZm9yY2VVcGRhdGUoKX19LGM9ITA9PT10Ll9faDtyLl9fdSsrfHxjfHxyLnNldFN0YXRlKHtfX2E6ci5fX2I9ci5fX3YuX19rWzBdfSksbi50aGVuKGksaSl9LEQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dGhpcy50PVtdfSxELnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24obixlKXtpZih0aGlzLl9fYil7aWYodGhpcy5fX3YuX19rKXt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLG89dGhpcy5fX3YuX19rWzBdLl9fYzt0aGlzLl9fdi5fX2tbMF09TCh0aGlzLl9fYixyLG8uX19PPW8uX19QKX10aGlzLl9fYj1udWxsfXZhciBpPWUuX19hJiZ0KHUsbnVsbCxuLmZhbGxiYWNrKTtyZXR1cm4gaSYmKGkuX19oPW51bGwpLFt0KHUsbnVsbCxlLl9fYT9udWxsOm4uY2hpbGRyZW4pLGldfTt2YXIgVz1mdW5jdGlvbihuLHQsZSl7aWYoKytlWzFdPT09ZVswXSYmbi5vLmRlbGV0ZSh0KSxuLnByb3BzLnJldmVhbE9yZGVyJiYoXCJ0XCIhPT1uLnByb3BzLnJldmVhbE9yZGVyWzBdfHwhbi5vLnNpemUpKWZvcihlPW4udTtlOyl7Zm9yKDtlLmxlbmd0aD4zOyllLnBvcCgpKCk7aWYoZVsxXTxlWzBdKWJyZWFrO24udT1lPWVbMl19fTtmdW5jdGlvbiBQKG4pe3JldHVybiB0aGlzLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiBuLmNvbnRleHR9LG4uY2hpbGRyZW59ZnVuY3Rpb24gaihuKXt2YXIgZT10aGlzLHI9bi5pO2UuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtvKG51bGwsZS5sKSxlLmw9bnVsbCxlLmk9bnVsbH0sZS5pJiZlLmkhPT1yJiZlLmNvbXBvbmVudFdpbGxVbm1vdW50KCksbi5fX3Y/KGUubHx8KGUuaT1yLGUubD17bm9kZVR5cGU6MSxwYXJlbnROb2RlOnIsY2hpbGROb2RlczpbXSxhcHBlbmRDaGlsZDpmdW5jdGlvbihuKXt0aGlzLmNoaWxkTm9kZXMucHVzaChuKSxlLmkuYXBwZW5kQ2hpbGQobil9LGluc2VydEJlZm9yZTpmdW5jdGlvbihuLHQpe3RoaXMuY2hpbGROb2Rlcy5wdXNoKG4pLGUuaS5hcHBlbmRDaGlsZChuKX0scmVtb3ZlQ2hpbGQ6ZnVuY3Rpb24obil7dGhpcy5jaGlsZE5vZGVzLnNwbGljZSh0aGlzLmNoaWxkTm9kZXMuaW5kZXhPZihuKT4+PjEsMSksZS5pLnJlbW92ZUNoaWxkKG4pfX0pLG8odChQLHtjb250ZXh0OmUuY29udGV4dH0sbi5fX3YpLGUubCkpOmUubCYmZS5jb21wb25lbnRXaWxsVW5tb3VudCgpfWZ1bmN0aW9uIHoobixlKXt2YXIgcj10KGose19fdjpuLGk6ZX0pO3JldHVybiByLmNvbnRhaW5lckluZm89ZSxyfShWLnByb3RvdHlwZT1uZXcgbikuX19hPWZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMsZT1GKHQuX192KSxyPXQuby5nZXQobik7cmV0dXJuIHJbMF0rKyxmdW5jdGlvbih1KXt2YXIgbz1mdW5jdGlvbigpe3QucHJvcHMucmV2ZWFsT3JkZXI/KHIucHVzaCh1KSxXKHQsbixyKSk6dSgpfTtlP2Uobyk6bygpfX0sVi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKG4pe3RoaXMudT1udWxsLHRoaXMubz1uZXcgTWFwO3ZhciB0PXIobi5jaGlsZHJlbik7bi5yZXZlYWxPcmRlciYmXCJiXCI9PT1uLnJldmVhbE9yZGVyWzBdJiZ0LnJldmVyc2UoKTtmb3IodmFyIGU9dC5sZW5ndGg7ZS0tOyl0aGlzLm8uc2V0KHRbZV0sdGhpcy51PVsxLDAsdGhpcy51XSk7cmV0dXJuIG4uY2hpbGRyZW59LFYucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT1WLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3ZhciBuPXRoaXM7dGhpcy5vLmZvckVhY2goZnVuY3Rpb24odCxlKXtXKG4sZSx0KX0pfTt2YXIgQj1cInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKFwicmVhY3QuZWxlbWVudFwiKXx8NjAxMDMsSD0vXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlfGxldHRlcnxsaWdodGluZ3xtYXJrZXIoPyFIfFd8VSl8b3ZlcmxpbmV8cGFpbnR8cG9pbnRlcnxzaGFwZXxzdG9wfHN0cmlrZXRocm91Z2h8c3Ryb2tlfHRleHQoPyFMKXx0cmFuc2Zvcm18dW5kZXJsaW5lfHVuaWNvZGV8dW5pdHN8dnx2ZWN0b3J8dmVydHx3b3JkfHdyaXRpbmd8eCg/IUMpKVtBLVpdLyxaPS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8sWT0vW0EtWjAtOV0vZywkPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBkb2N1bWVudCxxPWZ1bmN0aW9uKG4pe3JldHVybihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sKCk/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3Qobil9O2Z1bmN0aW9uIEcobix0LGUpe3JldHVybiBudWxsPT10Ll9fayYmKHQudGV4dENvbnRlbnQ9XCJcIiksbyhuLHQpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJmUoKSxuP24uX19jOm51bGx9ZnVuY3Rpb24gSihuLHQsZSl7cmV0dXJuIGkobix0KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZlKCksbj9uLl9fYzpudWxsfW4ucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9e30sW1wiY29tcG9uZW50V2lsbE1vdW50XCIsXCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzXCIsXCJjb21wb25lbnRXaWxsVXBkYXRlXCJdLmZvckVhY2goZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tcIlVOU0FGRV9cIit0XX0sc2V0OmZ1bmN0aW9uKG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpufSl9fSl9KTt2YXIgSz1lLmV2ZW50O2Z1bmN0aW9uIFEoKXt9ZnVuY3Rpb24gWCgpe3JldHVybiB0aGlzLmNhbmNlbEJ1YmJsZX1mdW5jdGlvbiBubigpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9ZS5ldmVudD1mdW5jdGlvbihuKXtyZXR1cm4gSyYmKG49SyhuKSksbi5wZXJzaXN0PVEsbi5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1YLG4uaXNEZWZhdWx0UHJldmVudGVkPW5uLG4ubmF0aXZlRXZlbnQ9bn07dmFyIHRuLGVuPXtlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGFzc319LHJuPWUudm5vZGU7ZS52bm9kZT1mdW5jdGlvbihuKXtcInN0cmluZ1wiPT10eXBlb2Ygbi50eXBlJiZmdW5jdGlvbihuKXt2YXIgdD1uLnByb3BzLGU9bi50eXBlLHU9e307Zm9yKHZhciBvIGluIHQpe3ZhciBpPXRbb107aWYoIShcInZhbHVlXCI9PT1vJiZcImRlZmF1bHRWYWx1ZVwiaW4gdCYmbnVsbD09aXx8JCYmXCJjaGlsZHJlblwiPT09byYmXCJub3NjcmlwdFwiPT09ZXx8XCJjbGFzc1wiPT09b3x8XCJjbGFzc05hbWVcIj09PW8pKXt2YXIgbD1vLnRvTG93ZXJDYXNlKCk7XCJkZWZhdWx0VmFsdWVcIj09PW8mJlwidmFsdWVcImluIHQmJm51bGw9PXQudmFsdWU/bz1cInZhbHVlXCI6XCJkb3dubG9hZFwiPT09byYmITA9PT1pP2k9XCJcIjpcIm9uZG91YmxlY2xpY2tcIj09PWw/bz1cIm9uZGJsY2xpY2tcIjpcIm9uY2hhbmdlXCIhPT1sfHxcImlucHV0XCIhPT1lJiZcInRleHRhcmVhXCIhPT1lfHxxKHQudHlwZSk/XCJvbmZvY3VzXCI9PT1sP289XCJvbmZvY3VzaW5cIjpcIm9uYmx1clwiPT09bD9vPVwib25mb2N1c291dFwiOloudGVzdChvKT9vPWw6LTE9PT1lLmluZGV4T2YoXCItXCIpJiZILnRlc3Qobyk/bz1vLnJlcGxhY2UoWSxcIi0kJlwiKS50b0xvd2VyQ2FzZSgpOm51bGw9PT1pJiYoaT12b2lkIDApOmw9bz1cIm9uaW5wdXRcIixcIm9uaW5wdXRcIj09PWwmJnVbbz1sXSYmKG89XCJvbmlucHV0Q2FwdHVyZVwiKSx1W29dPWl9fVwic2VsZWN0XCI9PWUmJnUubXVsdGlwbGUmJkFycmF5LmlzQXJyYXkodS52YWx1ZSkmJih1LnZhbHVlPXIodC5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihuKXtuLnByb3BzLnNlbGVjdGVkPS0xIT11LnZhbHVlLmluZGV4T2Yobi5wcm9wcy52YWx1ZSl9KSksXCJzZWxlY3RcIj09ZSYmbnVsbCE9dS5kZWZhdWx0VmFsdWUmJih1LnZhbHVlPXIodC5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihuKXtuLnByb3BzLnNlbGVjdGVkPXUubXVsdGlwbGU/LTEhPXUuZGVmYXVsdFZhbHVlLmluZGV4T2Yobi5wcm9wcy52YWx1ZSk6dS5kZWZhdWx0VmFsdWU9PW4ucHJvcHMudmFsdWV9KSksdC5jbGFzcyYmIXQuY2xhc3NOYW1lPyh1LmNsYXNzPXQuY2xhc3MsT2JqZWN0LmRlZmluZVByb3BlcnR5KHUsXCJjbGFzc05hbWVcIixlbikpOih0LmNsYXNzTmFtZSYmIXQuY2xhc3N8fHQuY2xhc3MmJnQuY2xhc3NOYW1lKSYmKHUuY2xhc3M9dS5jbGFzc05hbWU9dC5jbGFzc05hbWUpLG4ucHJvcHM9dX0obiksbi4kJHR5cGVvZj1CLHJuJiZybihuKX07dmFyIHVuPWUuX19yO2UuX19yPWZ1bmN0aW9uKG4pe3VuJiZ1bihuKSx0bj1uLl9fY307dmFyIG9uPWUuZGlmZmVkO2UuZGlmZmVkPWZ1bmN0aW9uKG4pe29uJiZvbihuKTt2YXIgdD1uLnByb3BzLGU9bi5fX2U7bnVsbCE9ZSYmXCJ0ZXh0YXJlYVwiPT09bi50eXBlJiZcInZhbHVlXCJpbiB0JiZ0LnZhbHVlIT09ZS52YWx1ZSYmKGUudmFsdWU9bnVsbD09dC52YWx1ZT9cIlwiOnQudmFsdWUpLHRuPW51bGx9O3ZhciBsbj17UmVhY3RDdXJyZW50RGlzcGF0Y2hlcjp7Y3VycmVudDp7cmVhZENvbnRleHQ6ZnVuY3Rpb24obil7cmV0dXJuIHRuLl9fbltuLl9fY10ucHJvcHMudmFsdWV9fX19LGNuPVwiMTcuMC4yXCI7ZnVuY3Rpb24gZm4obil7cmV0dXJuIHQuYmluZChudWxsLG4pfWZ1bmN0aW9uIGFuKG4pe3JldHVybiEhbiYmbi4kJHR5cGVvZj09PUJ9ZnVuY3Rpb24gc24obil7cmV0dXJuIGFuKG4pP2YuYXBwbHkobnVsbCxhcmd1bWVudHMpOm59ZnVuY3Rpb24gaG4obil7cmV0dXJuISFuLl9fayYmKG8obnVsbCxuKSwhMCl9ZnVuY3Rpb24gdm4obil7cmV0dXJuIG4mJihuLmJhc2V8fDE9PT1uLm5vZGVUeXBlJiZuKXx8bnVsbH12YXIgZG49ZnVuY3Rpb24obix0KXtyZXR1cm4gbih0KX0scG49ZnVuY3Rpb24obix0KXtyZXR1cm4gbih0KX0sbW49dTtmdW5jdGlvbiB5bihuKXtuKCl9ZnVuY3Rpb24gX24obil7cmV0dXJuIG59ZnVuY3Rpb24gYm4oKXtyZXR1cm5bITEseW5dfXZhciBTbj1kO2Z1bmN0aW9uIGduKG4sdCl7dmFyIGU9dCgpLHI9YSh7aDp7X186ZSx2OnR9fSksdT1yWzBdLmgsbz1yWzFdO3JldHVybiBkKGZ1bmN0aW9uKCl7dS5fXz1lLHUudj10LEUodS5fXyx0KCkpfHxvKHtoOnV9KX0sW24sZSx0XSksdihmdW5jdGlvbigpe3JldHVybiBFKHUuX18sdS52KCkpfHxvKHtoOnV9KSxuKGZ1bmN0aW9uKCl7RSh1Ll9fLHUudigpKXx8byh7aDp1fSl9KX0sW25dKSxlfXZhciBDbj17dXNlU3RhdGU6YSx1c2VJZDpzLHVzZVJlZHVjZXI6aCx1c2VFZmZlY3Q6dix1c2VMYXlvdXRFZmZlY3Q6ZCx1c2VJbnNlcnRpb25FZmZlY3Q6U24sdXNlVHJhbnNpdGlvbjpibix1c2VEZWZlcnJlZFZhbHVlOl9uLHVzZVN5bmNFeHRlcm5hbFN0b3JlOmduLHN0YXJ0VHJhbnNpdGlvbjp5bix1c2VSZWY6cCx1c2VJbXBlcmF0aXZlSGFuZGxlOm0sdXNlTWVtbzp5LHVzZUNhbGxiYWNrOl8sdXNlQ29udGV4dDpiLHVzZURlYnVnVmFsdWU6Uyx2ZXJzaW9uOlwiMTcuMC4yXCIsQ2hpbGRyZW46TyxyZW5kZXI6RyxoeWRyYXRlOkosdW5tb3VudENvbXBvbmVudEF0Tm9kZTpobixjcmVhdGVQb3J0YWw6eixjcmVhdGVFbGVtZW50OnQsY3JlYXRlQ29udGV4dDpsLGNyZWF0ZUZhY3Rvcnk6Zm4sY2xvbmVFbGVtZW50OnNuLGNyZWF0ZVJlZjpjLEZyYWdtZW50OnUsaXNWYWxpZEVsZW1lbnQ6YW4sZmluZERPTU5vZGU6dm4sQ29tcG9uZW50Om4sUHVyZUNvbXBvbmVudDp3LG1lbW86eCxmb3J3YXJkUmVmOmssZmx1c2hTeW5jOnBuLHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzOmRuLFN0cmljdE1vZGU6bW4sU3VzcGVuc2U6RCxTdXNwZW5zZUxpc3Q6VixsYXp5Ok0sX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ6bG59O2V4cG9ydHtPIGFzIENoaWxkcmVuLHcgYXMgUHVyZUNvbXBvbmVudCxtbiBhcyBTdHJpY3RNb2RlLEQgYXMgU3VzcGVuc2UsViBhcyBTdXNwZW5zZUxpc3QsbG4gYXMgX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQsc24gYXMgY2xvbmVFbGVtZW50LGZuIGFzIGNyZWF0ZUZhY3RvcnkseiBhcyBjcmVhdGVQb3J0YWwsQ24gYXMgZGVmYXVsdCx2biBhcyBmaW5kRE9NTm9kZSxwbiBhcyBmbHVzaFN5bmMsayBhcyBmb3J3YXJkUmVmLEogYXMgaHlkcmF0ZSxhbiBhcyBpc1ZhbGlkRWxlbWVudCxNIGFzIGxhenkseCBhcyBtZW1vLEcgYXMgcmVuZGVyLHluIGFzIHN0YXJ0VHJhbnNpdGlvbixobiBhcyB1bm1vdW50Q29tcG9uZW50QXROb2RlLGRuIGFzIHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzLF9uIGFzIHVzZURlZmVycmVkVmFsdWUsU24gYXMgdXNlSW5zZXJ0aW9uRWZmZWN0LGduIGFzIHVzZVN5bmNFeHRlcm5hbFN0b3JlLGJuIGFzIHVzZVRyYW5zaXRpb24sY24gYXMgdmVyc2lvbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21wYXQubW9kdWxlLmpzLm1hcFxuIiwiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcblxuZXhwb3J0IGNvbnN0IHVzZUdpZnRPcGVuID0gKGRlbGF5ID0gMTAwMCkgPT4ge1xuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IHRpbWVyUmVmID0gdXNlUmVmKG51bGwpXG5cbiAgY29uc3Qgb25Ub2dnbGUgPSAoKSA9PiB7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVyUmVmLmN1cnJlbnQpXG4gICAgc2V0SXNPcGVuKHByZXYgPT4gIXByZXYpXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHRpbWVyUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNldElzT3Blbih0cnVlKVxuICAgIH0sIGRlbGF5KVxuXG4gICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0aW1lclJlZi5jdXJyZW50KVxuICB9LCBbZGVsYXldKVxuXG4gIHJldHVybiB7XG4gICAgaXNPcGVuLFxuICAgIG9uVG9nZ2xlXG4gIH1cbn1cbiIsImltcG9ydHtvcHRpb25zIGFzIHJ9ZnJvbVwicHJlYWN0XCI7ZXhwb3J0e0ZyYWdtZW50fWZyb21cInByZWFjdFwiO3ZhciBfPTA7ZnVuY3Rpb24gbyhvLGUsbix0LGYsbCl7dmFyIHMsdSxhPXt9O2Zvcih1IGluIGUpXCJyZWZcIj09dT9zPWVbdV06YVt1XT1lW3VdO3ZhciBpPXt0eXBlOm8scHJvcHM6YSxrZXk6bixyZWY6cyxfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fZDp2b2lkIDAsX19jOm51bGwsX19oOm51bGwsY29uc3RydWN0b3I6dm9pZCAwLF9fdjotLV8sX19zb3VyY2U6ZixfX3NlbGY6bH07aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgbyYmKHM9by5kZWZhdWx0UHJvcHMpKWZvcih1IGluIHMpdm9pZCAwPT09YVt1XSYmKGFbdV09c1t1XSk7cmV0dXJuIHIudm5vZGUmJnIudm5vZGUoaSksaX1leHBvcnR7byBhcyBqc3gsbyBhcyBqc3hERVYsbyBhcyBqc3hzfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWpzeFJ1bnRpbWUubW9kdWxlLmpzLm1hcFxuIiwiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3ByZWFjdCdcblxuZXhwb3J0IGNvbnN0IFN0YXRlID0gY3JlYXRlQ29udGV4dCgpXG5cbmNvbnN0IFN0YXRlQ29udGV4dCA9ICh7IGNoaWxkcmVuLCB2YWx1ZSB9KSA9PiB7XG4gIHJldHVybiA8U3RhdGUuUHJvdmlkZXIgdmFsdWU9e3ZhbHVlfT57Y2hpbGRyZW59PC9TdGF0ZS5Qcm92aWRlcj5cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3RhdGVDb250ZXh0XG4iLCJpbXBvcnQgeyBDb21wb25lbnRDaGlsZCwgQ29udGFpbmVyTm9kZSwgcmVuZGVyIGFzIHByZWFjdFJlbmRlciB9IGZyb20gJ3ByZWFjdCdcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnLi4vU3RhdGVDb250ZXh0J1xuXG5leHBvcnQgY29uc3QgcmVuZGVyID0gKHZOb2RlOiBDb21wb25lbnRDaGlsZCkgPT4gKHRhcmdldDogQ29udGFpbmVyTm9kZSwgc3RhdGU/OiBhbnkpID0+XG4gIHByZWFjdFJlbmRlcig8U3RhdGVDb250ZXh0IHZhbHVlPXtzdGF0ZX0+e3ZOb2RlfTwvU3RhdGVDb250ZXh0PiwgdGFyZ2V0IGFzIEhUTUxFbGVtZW50KVxuIiwiaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gXCJwcmVhY3QvY29tcGF0XCI7XG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gXCIuLi9TdGF0ZUNvbnRleHRcIjtcblxuZXhwb3J0IGNvbnN0IHVzZUN1cnJlbnRTdGF0ZSA9IDxUVmFsdWUgPSB1bmtub3duPigpID0+IHVzZUNvbnRleHQ8VFZhbHVlPihTdGF0ZSlcbiIsIi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBbXTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVDbGVhcjtcbiIsIi8qKlxuICogUGVyZm9ybXMgYVxuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKCdhJywgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKE5hTiwgTmFOKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxO1xuIiwidmFyIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBga2V5YCBpcyBmb3VuZCBpbiBgYXJyYXlgIG9mIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBpZiAoZXEoYXJyYXlbbGVuZ3RoXVswXSwga2V5KSkge1xuICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc29jSW5kZXhPZjtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xuICBpZiAoaW5kZXggPT0gbGFzdEluZGV4KSB7XG4gICAgZGF0YS5wb3AoKTtcbiAgfSBlbHNlIHtcbiAgICBzcGxpY2UuY2FsbChkYXRhLCBpbmRleCwgMSk7XG4gIH1cbiAgLS10aGlzLnNpemU7XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZURlbGV0ZTtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBkYXRhW2luZGV4XVsxXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVHZXQ7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBhc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUhhcztcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBsaXN0IGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICArK3RoaXMuc2l6ZTtcbiAgICBkYXRhLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSBlbHNlIHtcbiAgICBkYXRhW2luZGV4XVsxXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZVNldDtcbiIsInZhciBsaXN0Q2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUNsZWFyJyksXG4gICAgbGlzdENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlRGVsZXRlJyksXG4gICAgbGlzdENhY2hlR2V0ID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlR2V0JyksXG4gICAgbGlzdENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlSGFzJyksXG4gICAgbGlzdENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBsaXN0IGNhY2hlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTGlzdENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYExpc3RDYWNoZWAuXG5MaXN0Q2FjaGUucHJvdG90eXBlLmNsZWFyID0gbGlzdENhY2hlQ2xlYXI7XG5MaXN0Q2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IGxpc3RDYWNoZURlbGV0ZTtcbkxpc3RDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbGlzdENhY2hlR2V0O1xuTGlzdENhY2hlLnByb3RvdHlwZS5oYXMgPSBsaXN0Q2FjaGVIYXM7XG5MaXN0Q2FjaGUucHJvdG90eXBlLnNldCA9IGxpc3RDYWNoZVNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBMaXN0Q2FjaGU7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqL1xuZnVuY3Rpb24gc3RhY2tDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGU7XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tDbGVhcjtcbiIsIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICByZXN1bHQgPSBkYXRhWydkZWxldGUnXShrZXkpO1xuXG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0RlbGV0ZTtcbiIsIi8qKlxuICogR2V0cyB0aGUgc3RhY2sgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrR2V0KGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0dldDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGEgc3RhY2sgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0hhcyhrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tIYXM7XG4iLCIvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZyZWVHbG9iYWw7XG4iLCJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJvb3Q7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgU3ltYm9sID0gcm9vdC5TeW1ib2w7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ltYm9sO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSxcbiAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcblxuICB0cnkge1xuICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgaWYgKHVubWFza2VkKSB7XG4gICAgaWYgKGlzT3duKSB7XG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UmF3VGFnO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb2JqZWN0VG9TdHJpbmc7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgZ2V0UmF3VGFnID0gcmVxdWlyZSgnLi9fZ2V0UmF3VGFnJyksXG4gICAgb2JqZWN0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19vYmplY3RUb1N0cmluZycpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbnVsbFRhZyA9ICdbb2JqZWN0IE51bGxdJyxcbiAgICB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICB9XG4gIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0VGFnO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3Q7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0Z1bmN0aW9uO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cbnZhciBjb3JlSnNEYXRhID0gcm9vdFsnX19jb3JlLWpzX3NoYXJlZF9fJ107XG5cbm1vZHVsZS5leHBvcnRzID0gY29yZUpzRGF0YTtcbiIsInZhciBjb3JlSnNEYXRhID0gcmVxdWlyZSgnLi9fY29yZUpzRGF0YScpO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWV0aG9kcyBtYXNxdWVyYWRpbmcgYXMgbmF0aXZlLiAqL1xudmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gIHJldHVybiB1aWQgPyAoJ1N5bWJvbChzcmMpXzEuJyArIHVpZCkgOiAnJztcbn0oKSk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTWFza2VkO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgZnVuY2AgdG8gaXRzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXG4gKi9cbmZ1bmN0aW9uIHRvU291cmNlKGZ1bmMpIHtcbiAgaWYgKGZ1bmMgIT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZnVuY1RvU3RyaW5nLmNhbGwoZnVuYyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChmdW5jICsgJycpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU291cmNlO1xuIiwidmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc01hc2tlZCA9IHJlcXVpcmUoJy4vX2lzTWFza2VkJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgdG9Tb3VyY2UgPSByZXF1aXJlKCcuL190b1NvdXJjZScpO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxuICovXG52YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXG52YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eSkucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcbik7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYXRpdmVgIHdpdGhvdXQgYmFkIHNoaW0gY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpIHx8IGlzTWFza2VkKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcGF0dGVybiA9IGlzRnVuY3Rpb24odmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcbiAgcmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc05hdGl2ZTtcbiIsIi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFZhbHVlO1xuIiwidmFyIGJhc2VJc05hdGl2ZSA9IHJlcXVpcmUoJy4vX2Jhc2VJc05hdGl2ZScpLFxuICAgIGdldFZhbHVlID0gcmVxdWlyZSgnLi9fZ2V0VmFsdWUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXROYXRpdmU7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIE1hcCA9IGdldE5hdGl2ZShyb290LCAnTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgbmF0aXZlQ3JlYXRlID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2NyZWF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUNyZWF0ZTtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIEhhc2hcbiAqL1xuZnVuY3Rpb24gaGFzaENsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmF0aXZlQ3JlYXRlID8gbmF0aXZlQ3JlYXRlKG51bGwpIDoge307XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaENsZWFyO1xuIiwiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoRGVsZXRlO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogR2V0cyB0aGUgaGFzaCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBoYXNoR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChuYXRpdmVDcmVhdGUpIHtcbiAgICB2YXIgcmVzdWx0ID0gZGF0YVtrZXldO1xuICAgIHJldHVybiByZXN1bHQgPT09IEhBU0hfVU5ERUZJTkVEID8gdW5kZWZpbmVkIDogcmVzdWx0O1xuICB9XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSkgPyBkYXRhW2tleV0gOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaEdldDtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBoYXNoIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoSGFzKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHJldHVybiBuYXRpdmVDcmVhdGUgPyAoZGF0YVtrZXldICE9PSB1bmRlZmluZWQpIDogaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hIYXM7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBTZXRzIHRoZSBoYXNoIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gaGFzaFNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgdGhpcy5zaXplICs9IHRoaXMuaGFzKGtleSkgPyAwIDogMTtcbiAgZGF0YVtrZXldID0gKG5hdGl2ZUNyZWF0ZSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSA/IEhBU0hfVU5ERUZJTkVEIDogdmFsdWU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hTZXQ7XG4iLCJ2YXIgaGFzaENsZWFyID0gcmVxdWlyZSgnLi9faGFzaENsZWFyJyksXG4gICAgaGFzaERlbGV0ZSA9IHJlcXVpcmUoJy4vX2hhc2hEZWxldGUnKSxcbiAgICBoYXNoR2V0ID0gcmVxdWlyZSgnLi9faGFzaEdldCcpLFxuICAgIGhhc2hIYXMgPSByZXF1aXJlKCcuL19oYXNoSGFzJyksXG4gICAgaGFzaFNldCA9IHJlcXVpcmUoJy4vX2hhc2hTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgaGFzaCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIEhhc2goZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgSGFzaGAuXG5IYXNoLnByb3RvdHlwZS5jbGVhciA9IGhhc2hDbGVhcjtcbkhhc2gucHJvdG90eXBlWydkZWxldGUnXSA9IGhhc2hEZWxldGU7XG5IYXNoLnByb3RvdHlwZS5nZXQgPSBoYXNoR2V0O1xuSGFzaC5wcm90b3R5cGUuaGFzID0gaGFzaEhhcztcbkhhc2gucHJvdG90eXBlLnNldCA9IGhhc2hTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gSGFzaDtcbiIsInZhciBIYXNoID0gcmVxdWlyZSgnLi9fSGFzaCcpLFxuICAgIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xuICB0aGlzLnNpemUgPSAwO1xuICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICdoYXNoJzogbmV3IEhhc2gsXG4gICAgJ21hcCc6IG5ldyAoTWFwIHx8IExpc3RDYWNoZSksXG4gICAgJ3N0cmluZyc6IG5ldyBIYXNoXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVDbGVhcjtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHVzZSBhcyB1bmlxdWUgb2JqZWN0IGtleS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleWFibGUodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXG4gICAgPyAodmFsdWUgIT09ICdfX3Byb3RvX18nKVxuICAgIDogKHZhbHVlID09PSBudWxsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0tleWFibGU7XG4iLCJ2YXIgaXNLZXlhYmxlID0gcmVxdWlyZSgnLi9faXNLZXlhYmxlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgZGF0YSBmb3IgYG1hcGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHJlZmVyZW5jZSBrZXkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWFwIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGdldE1hcERhdGEobWFwLCBrZXkpIHtcbiAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187XG4gIHJldHVybiBpc0tleWFibGUoa2V5KVxuICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXG4gICAgOiBkYXRhLm1hcDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRNYXBEYXRhO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIHJlc3VsdCA9IGdldE1hcERhdGEodGhpcywga2V5KVsnZGVsZXRlJ10oa2V5KTtcbiAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlRGVsZXRlO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUdldChrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUdldDtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlSGFzO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgbWFwIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG1hcCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IGdldE1hcERhdGEodGhpcywga2V5KSxcbiAgICAgIHNpemUgPSBkYXRhLnNpemU7XG5cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSArPSBkYXRhLnNpemUgPT0gc2l6ZSA/IDAgOiAxO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZVNldDtcbiIsInZhciBtYXBDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVDbGVhcicpLFxuICAgIG1hcENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVEZWxldGUnKSxcbiAgICBtYXBDYWNoZUdldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlR2V0JyksXG4gICAgbWFwQ2FjaGVIYXMgPSByZXF1aXJlKCcuL19tYXBDYWNoZUhhcycpLFxuICAgIG1hcENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbWFwIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIE1hcENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYE1hcENhY2hlYC5cbk1hcENhY2hlLnByb3RvdHlwZS5jbGVhciA9IG1hcENhY2hlQ2xlYXI7XG5NYXBDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbWFwQ2FjaGVEZWxldGU7XG5NYXBDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbWFwQ2FjaGVHZXQ7XG5NYXBDYWNoZS5wcm90b3R5cGUuaGFzID0gbWFwQ2FjaGVIYXM7XG5NYXBDYWNoZS5wcm90b3R5cGUuc2V0ID0gbWFwQ2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwQ2FjaGU7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyksXG4gICAgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFNldHMgdGhlIHN0YWNrIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHN0YWNrIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzdGFja1NldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBMaXN0Q2FjaGUpIHtcbiAgICB2YXIgcGFpcnMgPSBkYXRhLl9fZGF0YV9fO1xuICAgIGlmICghTWFwIHx8IChwYWlycy5sZW5ndGggPCBMQVJHRV9BUlJBWV9TSVpFIC0gMSkpIHtcbiAgICAgIHBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgIHRoaXMuc2l6ZSA9ICsrZGF0YS5zaXplO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlKHBhaXJzKTtcbiAgfVxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja1NldDtcbiIsInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBzdGFja0NsZWFyID0gcmVxdWlyZSgnLi9fc3RhY2tDbGVhcicpLFxuICAgIHN0YWNrRGVsZXRlID0gcmVxdWlyZSgnLi9fc3RhY2tEZWxldGUnKSxcbiAgICBzdGFja0dldCA9IHJlcXVpcmUoJy4vX3N0YWNrR2V0JyksXG4gICAgc3RhY2tIYXMgPSByZXF1aXJlKCcuL19zdGFja0hhcycpLFxuICAgIHN0YWNrU2V0ID0gcmVxdWlyZSgnLi9fc3RhY2tTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RhY2sgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU3RhY2soZW50cmllcykge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlKGVudHJpZXMpO1xuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTdGFja2AuXG5TdGFjay5wcm90b3R5cGUuY2xlYXIgPSBzdGFja0NsZWFyO1xuU3RhY2sucHJvdG90eXBlWydkZWxldGUnXSA9IHN0YWNrRGVsZXRlO1xuU3RhY2sucHJvdG90eXBlLmdldCA9IHN0YWNrR2V0O1xuU3RhY2sucHJvdG90eXBlLmhhcyA9IHN0YWNrSGFzO1xuU3RhY2sucHJvdG90eXBlLnNldCA9IHN0YWNrU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YWNrO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgdmFyIGZ1bmMgPSBnZXROYXRpdmUoT2JqZWN0LCAnZGVmaW5lUHJvcGVydHknKTtcbiAgICBmdW5jKHt9LCAnJywge30pO1xuICAgIHJldHVybiBmdW5jO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVQcm9wZXJ0eTtcbiIsInZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2RlZmluZVByb3BlcnR5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGFzc2lnblZhbHVlYCBhbmQgYGFzc2lnbk1lcmdlVmFsdWVgIHdpdGhvdXRcbiAqIHZhbHVlIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycgJiYgZGVmaW5lUHJvcGVydHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwge1xuICAgICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgICAnZW51bWVyYWJsZSc6IHRydWUsXG4gICAgICAndmFsdWUnOiB2YWx1ZSxcbiAgICAgICd3cml0YWJsZSc6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUFzc2lnblZhbHVlO1xuIiwidmFyIGJhc2VBc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ25WYWx1ZScpLFxuICAgIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZSBgYXNzaWduVmFsdWVgIGV4Y2VwdCB0aGF0IGl0IGRvZXNuJ3QgYXNzaWduXG4gKiBgdW5kZWZpbmVkYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgaWYgKCh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmICFlcShvYmplY3Rba2V5XSwgdmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc2lnbk1lcmdlVmFsdWU7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBiYXNlIGZ1bmN0aW9uIGZvciBtZXRob2RzIGxpa2UgYF8uZm9ySW5gIGFuZCBgXy5mb3JPd25gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VGb3IoZnJvbVJpZ2h0KSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QsIGl0ZXJhdGVlLCBrZXlzRnVuYykge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBpdGVyYWJsZSA9IE9iamVjdChvYmplY3QpLFxuICAgICAgICBwcm9wcyA9IGtleXNGdW5jKG9iamVjdCksXG4gICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgdmFyIGtleSA9IHByb3BzW2Zyb21SaWdodCA/IGxlbmd0aCA6ICsraW5kZXhdO1xuICAgICAgaWYgKGl0ZXJhdGVlKGl0ZXJhYmxlW2tleV0sIGtleSwgaXRlcmFibGUpID09PSBmYWxzZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVCYXNlRm9yO1xuIiwidmFyIGNyZWF0ZUJhc2VGb3IgPSByZXF1aXJlKCcuL19jcmVhdGVCYXNlRm9yJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGJhc2VGb3JPd25gIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYG9iamVjdGBcbiAqIHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgYGtleXNGdW5jYCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LlxuICogSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG52YXIgYmFzZUZvciA9IGNyZWF0ZUJhc2VGb3IoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRm9yO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkLFxuICAgIGFsbG9jVW5zYWZlID0gQnVmZmVyID8gQnVmZmVyLmFsbG9jVW5zYWZlIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiAgYGJ1ZmZlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZmZXIgVGhlIGJ1ZmZlciB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7QnVmZmVyfSBSZXR1cm5zIHRoZSBjbG9uZWQgYnVmZmVyLlxuICovXG5mdW5jdGlvbiBjbG9uZUJ1ZmZlcihidWZmZXIsIGlzRGVlcCkge1xuICBpZiAoaXNEZWVwKSB7XG4gICAgcmV0dXJuIGJ1ZmZlci5zbGljZSgpO1xuICB9XG4gIHZhciBsZW5ndGggPSBidWZmZXIubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gYWxsb2NVbnNhZmUgPyBhbGxvY1Vuc2FmZShsZW5ndGgpIDogbmV3IGJ1ZmZlci5jb25zdHJ1Y3RvcihsZW5ndGgpO1xuXG4gIGJ1ZmZlci5jb3B5KHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVCdWZmZXI7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgVWludDhBcnJheSA9IHJvb3QuVWludDhBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBVaW50OEFycmF5O1xuIiwidmFyIFVpbnQ4QXJyYXkgPSByZXF1aXJlKCcuL19VaW50OEFycmF5Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGBhcnJheUJ1ZmZlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXlCdWZmZXJ9IGFycmF5QnVmZmVyIFRoZSBhcnJheSBidWZmZXIgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBhcnJheSBidWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGNsb25lQXJyYXlCdWZmZXIoYXJyYXlCdWZmZXIpIHtcbiAgdmFyIHJlc3VsdCA9IG5ldyBhcnJheUJ1ZmZlci5jb25zdHJ1Y3RvcihhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKTtcbiAgbmV3IFVpbnQ4QXJyYXkocmVzdWx0KS5zZXQobmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZUFycmF5QnVmZmVyO1xuIiwidmFyIGNsb25lQXJyYXlCdWZmZXIgPSByZXF1aXJlKCcuL19jbG9uZUFycmF5QnVmZmVyJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGB0eXBlZEFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHR5cGVkQXJyYXkgVGhlIHR5cGVkIGFycmF5IHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCB0eXBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gY2xvbmVUeXBlZEFycmF5KHR5cGVkQXJyYXksIGlzRGVlcCkge1xuICB2YXIgYnVmZmVyID0gaXNEZWVwID8gY2xvbmVBcnJheUJ1ZmZlcih0eXBlZEFycmF5LmJ1ZmZlcikgOiB0eXBlZEFycmF5LmJ1ZmZlcjtcbiAgcmV0dXJuIG5ldyB0eXBlZEFycmF5LmNvbnN0cnVjdG9yKGJ1ZmZlciwgdHlwZWRBcnJheS5ieXRlT2Zmc2V0LCB0eXBlZEFycmF5Lmxlbmd0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVUeXBlZEFycmF5O1xuIiwiLyoqXG4gKiBDb3BpZXMgdGhlIHZhbHVlcyBvZiBgc291cmNlYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBzb3VyY2UgVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXk9W11dIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyB0by5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBjb3B5QXJyYXkoc291cmNlLCBhcnJheSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG5cbiAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbaW5kZXhdID0gc291cmNlW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weUFycmF5O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNyZWF0ZWAgd2l0aG91dCBzdXBwb3J0IGZvciBhc3NpZ25pbmdcbiAqIHByb3BlcnRpZXMgdG8gdGhlIGNyZWF0ZWQgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvdG8gVGhlIG9iamVjdCB0byBpbmhlcml0IGZyb20uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICovXG52YXIgYmFzZUNyZWF0ZSA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gb2JqZWN0KCkge31cbiAgcmV0dXJuIGZ1bmN0aW9uKHByb3RvKSB7XG4gICAgaWYgKCFpc09iamVjdChwcm90bykpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgaWYgKG9iamVjdENyZWF0ZSkge1xuICAgICAgcmV0dXJuIG9iamVjdENyZWF0ZShwcm90byk7XG4gICAgfVxuICAgIG9iamVjdC5wcm90b3R5cGUgPSBwcm90bztcbiAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDtcbiAgICBvYmplY3QucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VDcmVhdGU7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyQXJnO1xuIiwidmFyIG92ZXJBcmcgPSByZXF1aXJlKCcuL19vdmVyQXJnJyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIGdldFByb3RvdHlwZSA9IG92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFByb3RvdHlwZTtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgcHJvdG90eXBlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3RvdHlwZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSkge1xuICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XG5cbiAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1Byb3RvdHlwZTtcbiIsInZhciBiYXNlQ3JlYXRlID0gcmVxdWlyZSgnLi9fYmFzZUNyZWF0ZScpLFxuICAgIGdldFByb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2dldFByb3RvdHlwZScpLFxuICAgIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKTtcblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbiBvYmplY3QgY2xvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxuICovXG5mdW5jdGlvbiBpbml0Q2xvbmVPYmplY3Qob2JqZWN0KSB7XG4gIHJldHVybiAodHlwZW9mIG9iamVjdC5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmICFpc1Byb3RvdHlwZShvYmplY3QpKVxuICAgID8gYmFzZUNyZWF0ZShnZXRQcm90b3R5cGUob2JqZWN0KSlcbiAgICA6IHt9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluaXRDbG9uZU9iamVjdDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0TGlrZTtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzQXJndW1lbnRzO1xuIiwidmFyIGJhc2VJc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vX2Jhc2VJc0FyZ3VtZW50cycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJndW1lbnRzO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheTtcbiIsIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0xlbmd0aCgzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aCgnMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJlxuICAgIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0xlbmd0aDtcbiIsInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xuICogbm90IGEgZnVuY3Rpb24gYW5kIGhhcyBhIGB2YWx1ZS5sZW5ndGhgIHRoYXQncyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvclxuICogZXF1YWwgdG8gYDBgIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYE51bWJlci5NQVhfU0FGRV9JTlRFR0VSYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgIWlzRnVuY3Rpb24odmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXlMaWtlO1xuIiwidmFyIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pc0FycmF5TGlrZWAgZXhjZXB0IHRoYXQgaXQgYWxzbyBjaGVja3MgaWYgYHZhbHVlYFxuICogaXMgYW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LWxpa2Ugb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGlzQXJyYXlMaWtlKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5TGlrZU9iamVjdDtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgZmFsc2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLnN0dWJGYWxzZSk7XG4gKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxuICovXG5mdW5jdGlvbiBzdHViRmFsc2UoKSB7XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViRmFsc2U7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKSxcbiAgICBzdHViRmFsc2UgPSByZXF1aXJlKCcuL3N0dWJGYWxzZScpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNCdWZmZXI7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBpbmZlciB0aGUgYE9iamVjdGAgY29uc3RydWN0b3IuICovXG52YXIgb2JqZWN0Q3RvclN0cmluZyA9IGZ1bmNUb1N0cmluZy5jYWxsKE9iamVjdCk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIHRoYXQgaXMsIGFuIG9iamVjdCBjcmVhdGVkIGJ5IHRoZVxuICogYE9iamVjdGAgY29uc3RydWN0b3Igb3Igb25lIHdpdGggYSBgW1tQcm90b3R5cGVdXWAgb2YgYG51bGxgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC44LjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqIH1cbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QobmV3IEZvbyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoeyAneCc6IDAsICd5JzogMCB9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzUGxhaW5PYmplY3QoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdExpa2UodmFsdWUpIHx8IGJhc2VHZXRUYWcodmFsdWUpICE9IG9iamVjdFRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcHJvdG8gPSBnZXRQcm90b3R5cGUodmFsdWUpO1xuICBpZiAocHJvdG8gPT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgQ3RvciA9IGhhc093blByb3BlcnR5LmNhbGwocHJvdG8sICdjb25zdHJ1Y3RvcicpICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuICByZXR1cm4gdHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJlxuICAgIGZ1bmNUb1N0cmluZy5jYWxsKEN0b3IpID09IG9iamVjdEN0b3JTdHJpbmc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQbGFpbk9iamVjdDtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XG50eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XG50eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNUeXBlZEFycmF5O1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmFyeWAgd2l0aG91dCBzdXBwb3J0IGZvciBzdG9yaW5nIG1ldGFkYXRhLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuYXJ5KGZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmModmFsdWUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VVbmFyeTtcbiIsInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5vZGVVdGlsO1xuIiwidmFyIGJhc2VJc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19iYXNlSXNUeXBlZEFycmF5JyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgbm9kZVV0aWwgPSByZXF1aXJlKCcuL19ub2RlVXRpbCcpO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1R5cGVkQXJyYXkgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1R5cGVkQXJyYXk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIHR5cGVkIGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gYmFzZVVuYXJ5KG5vZGVJc1R5cGVkQXJyYXkpIDogYmFzZUlzVHlwZWRBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc1R5cGVkQXJyYXk7XG4iLCIvKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgLCB1bmxlc3MgYGtleWAgaXMgXCJfX3Byb3RvX19cIiBvciBcImNvbnN0cnVjdG9yXCIuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBzYWZlR2V0KG9iamVjdCwga2V5KSB7XG4gIGlmIChrZXkgPT09ICdjb25zdHJ1Y3RvcicgJiYgdHlwZW9mIG9iamVjdFtrZXldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGtleSA9PSAnX19wcm90b19fJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiBvYmplY3Rba2V5XTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzYWZlR2V0O1xuIiwidmFyIGJhc2VBc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ25WYWx1ZScpLFxuICAgIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEFzc2lnbnMgYHZhbHVlYCB0byBga2V5YCBvZiBgb2JqZWN0YCBpZiB0aGUgZXhpc3RpbmcgdmFsdWUgaXMgbm90IGVxdWl2YWxlbnRcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xuICBpZiAoIShoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBlcShvYmpWYWx1ZSwgdmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcbiAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc2lnblZhbHVlO1xuIiwidmFyIGFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduVmFsdWUnKSxcbiAgICBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKTtcblxuLyoqXG4gKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzIHRvIGNvcHkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgdG8uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGlzTmV3ID0gIW9iamVjdDtcbiAgb2JqZWN0IHx8IChvYmplY3QgPSB7fSk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdO1xuXG4gICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgPyBjdXN0b21pemVyKG9iamVjdFtrZXldLCBzb3VyY2Vba2V5XSwga2V5LCBvYmplY3QsIHNvdXJjZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XG4gICAgfVxuICAgIGlmIChpc05ldykge1xuICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weU9iamVjdDtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICovXG5mdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcblxuICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRpbWVzO1xuIiwiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzSW5kZXg7XG4iLCJ2YXIgYmFzZVRpbWVzID0gcmVxdWlyZSgnLi9fYmFzZVRpbWVzJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XG4gIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpLFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgaXNBcmd1bWVudHModmFsdWUpLFxuICAgICAgaXNCdWZmID0gIWlzQXJyICYmICFpc0FyZyAmJiBpc0J1ZmZlcih2YWx1ZSksXG4gICAgICBpc1R5cGUgPSAhaXNBcnIgJiYgIWlzQXJnICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHZhbHVlKSxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcbiAgICAgIHJlc3VsdCA9IHNraXBJbmRleGVzID8gYmFzZVRpbWVzKHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxuICAgICAgICAhKHNraXBJbmRleGVzICYmIChcbiAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIGVudW1lcmFibGUgYGFyZ3VtZW50cy5sZW5ndGhgIGluIHN0cmljdCBtb2RlLlxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcbiAgICAgICAgICAgLy8gTm9kZS5qcyAwLjEwIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIGJ1ZmZlcnMuXG4gICAgICAgICAgIChpc0J1ZmYgJiYgKGtleSA9PSAnb2Zmc2V0JyB8fCBrZXkgPT0gJ3BhcmVudCcpKSB8fFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXG4gICAgICAgICAgIChpc1R5cGUgJiYgKGtleSA9PSAnYnVmZmVyJyB8fCBrZXkgPT0gJ2J5dGVMZW5ndGgnIHx8IGtleSA9PSAnYnl0ZU9mZnNldCcpKSB8fFxuICAgICAgICAgICAvLyBTa2lwIGluZGV4IHByb3BlcnRpZXMuXG4gICAgICAgICAgIGlzSW5kZXgoa2V5LCBsZW5ndGgpXG4gICAgICAgICkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TGlrZUtleXM7XG4iLCIvKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZVxuICogW2BPYmplY3Qua2V5c2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gbmF0aXZlS2V5c0luKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChvYmplY3QgIT0gbnVsbCkge1xuICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVLZXlzSW47XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpLFxuICAgIG5hdGl2ZUtleXNJbiA9IHJlcXVpcmUoJy4vX25hdGl2ZUtleXNJbicpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNJbmAgd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5c0luKG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5c0luKG9iamVjdCk7XG4gIH1cbiAgdmFyIGlzUHJvdG8gPSBpc1Byb3RvdHlwZShvYmplY3QpLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmICghKGtleSA9PSAnY29uc3RydWN0b3InICYmIChpc1Byb3RvIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VLZXlzSW47XG4iLCJ2YXIgYXJyYXlMaWtlS2V5cyA9IHJlcXVpcmUoJy4vX2FycmF5TGlrZUtleXMnKSxcbiAgICBiYXNlS2V5c0luID0gcmVxdWlyZSgnLi9fYmFzZUtleXNJbicpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzSW4obmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYicsICdjJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqL1xuZnVuY3Rpb24ga2V5c0luKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0LCB0cnVlKSA6IGJhc2VLZXlzSW4ob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzSW47XG4iLCJ2YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBrZXlzSW4gPSByZXF1aXJlKCcuL2tleXNJbicpO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBwbGFpbiBvYmplY3QgZmxhdHRlbmluZyBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmdcbiAqIGtleWVkIHByb3BlcnRpZXMgb2YgYHZhbHVlYCB0byBvd24gcHJvcGVydGllcyBvZiB0aGUgcGxhaW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY29udmVydGVkIHBsYWluIG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5hc3NpZ24oeyAnYSc6IDEgfSwgbmV3IEZvbyk7XG4gKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAqXG4gKiBfLmFzc2lnbih7ICdhJzogMSB9LCBfLnRvUGxhaW5PYmplY3QobmV3IEZvbykpO1xuICogLy8gPT4geyAnYSc6IDEsICdiJzogMiwgJ2MnOiAzIH1cbiAqL1xuZnVuY3Rpb24gdG9QbGFpbk9iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gY29weU9iamVjdCh2YWx1ZSwga2V5c0luKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9QbGFpbk9iamVjdDtcbiIsInZhciBhc3NpZ25NZXJnZVZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduTWVyZ2VWYWx1ZScpLFxuICAgIGNsb25lQnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVCdWZmZXInKSxcbiAgICBjbG9uZVR5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19jbG9uZVR5cGVkQXJyYXknKSxcbiAgICBjb3B5QXJyYXkgPSByZXF1aXJlKCcuL19jb3B5QXJyYXknKSxcbiAgICBpbml0Q2xvbmVPYmplY3QgPSByZXF1aXJlKCcuL19pbml0Q2xvbmVPYmplY3QnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNBcnJheUxpa2VPYmplY3QgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlT2JqZWN0JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuL2lzUGxhaW5PYmplY3QnKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpLFxuICAgIHNhZmVHZXQgPSByZXF1aXJlKCcuL19zYWZlR2V0JyksXG4gICAgdG9QbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4vdG9QbGFpbk9iamVjdCcpO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZU1lcmdlYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gKiBkZWVwIG1lcmdlcyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxuICogcmVmZXJlbmNlcyB0byBiZSBtZXJnZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIG1lcmdlLlxuICogQHBhcmFtIHtudW1iZXJ9IHNyY0luZGV4IFRoZSBpbmRleCBvZiBgc291cmNlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1lcmdlRnVuYyBUaGUgZnVuY3Rpb24gdG8gbWVyZ2UgdmFsdWVzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBzb3VyY2UgdmFsdWVzIGFuZCB0aGVpciBtZXJnZWRcbiAqICBjb3VudGVycGFydHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VNZXJnZURlZXAob2JqZWN0LCBzb3VyY2UsIGtleSwgc3JjSW5kZXgsIG1lcmdlRnVuYywgY3VzdG9taXplciwgc3RhY2spIHtcbiAgdmFyIG9ialZhbHVlID0gc2FmZUdldChvYmplY3QsIGtleSksXG4gICAgICBzcmNWYWx1ZSA9IHNhZmVHZXQoc291cmNlLCBrZXkpLFxuICAgICAgc3RhY2tlZCA9IHN0YWNrLmdldChzcmNWYWx1ZSk7XG5cbiAgaWYgKHN0YWNrZWQpIHtcbiAgICBhc3NpZ25NZXJnZVZhbHVlKG9iamVjdCwga2V5LCBzdGFja2VkKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgID8gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcbiAgICA6IHVuZGVmaW5lZDtcblxuICB2YXIgaXNDb21tb24gPSBuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkO1xuXG4gIGlmIChpc0NvbW1vbikge1xuICAgIHZhciBpc0FyciA9IGlzQXJyYXkoc3JjVmFsdWUpLFxuICAgICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgaXNCdWZmZXIoc3JjVmFsdWUpLFxuICAgICAgICBpc1R5cGVkID0gIWlzQXJyICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHNyY1ZhbHVlKTtcblxuICAgIG5ld1ZhbHVlID0gc3JjVmFsdWU7XG4gICAgaWYgKGlzQXJyIHx8IGlzQnVmZiB8fCBpc1R5cGVkKSB7XG4gICAgICBpZiAoaXNBcnJheShvYmpWYWx1ZSkpIHtcbiAgICAgICAgbmV3VmFsdWUgPSBvYmpWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGlzQXJyYXlMaWtlT2JqZWN0KG9ialZhbHVlKSkge1xuICAgICAgICBuZXdWYWx1ZSA9IGNvcHlBcnJheShvYmpWYWx1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc0J1ZmYpIHtcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgICAgbmV3VmFsdWUgPSBjbG9uZUJ1ZmZlcihzcmNWYWx1ZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc1R5cGVkKSB7XG4gICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgICAgIG5ld1ZhbHVlID0gY2xvbmVUeXBlZEFycmF5KHNyY1ZhbHVlLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBuZXdWYWx1ZSA9IFtdO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHNyY1ZhbHVlKSB8fCBpc0FyZ3VtZW50cyhzcmNWYWx1ZSkpIHtcbiAgICAgIG5ld1ZhbHVlID0gb2JqVmFsdWU7XG4gICAgICBpZiAoaXNBcmd1bWVudHMob2JqVmFsdWUpKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gdG9QbGFpbk9iamVjdChvYmpWYWx1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICghaXNPYmplY3Qob2JqVmFsdWUpIHx8IGlzRnVuY3Rpb24ob2JqVmFsdWUpKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gaW5pdENsb25lT2JqZWN0KHNyY1ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBpZiAoaXNDb21tb24pIHtcbiAgICAvLyBSZWN1cnNpdmVseSBtZXJnZSBvYmplY3RzIGFuZCBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBzdGFjay5zZXQoc3JjVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICBtZXJnZUZ1bmMobmV3VmFsdWUsIHNyY1ZhbHVlLCBzcmNJbmRleCwgY3VzdG9taXplciwgc3RhY2spO1xuICAgIHN0YWNrWydkZWxldGUnXShzcmNWYWx1ZSk7XG4gIH1cbiAgYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VNZXJnZURlZXA7XG4iLCJ2YXIgU3RhY2sgPSByZXF1aXJlKCcuL19TdGFjaycpLFxuICAgIGFzc2lnbk1lcmdlVmFsdWUgPSByZXF1aXJlKCcuL19hc3NpZ25NZXJnZVZhbHVlJyksXG4gICAgYmFzZUZvciA9IHJlcXVpcmUoJy4vX2Jhc2VGb3InKSxcbiAgICBiYXNlTWVyZ2VEZWVwID0gcmVxdWlyZSgnLi9fYmFzZU1lcmdlRGVlcCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGtleXNJbiA9IHJlcXVpcmUoJy4va2V5c0luJyksXG4gICAgc2FmZUdldCA9IHJlcXVpcmUoJy4vX3NhZmVHZXQnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tZXJnZWAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHtudW1iZXJ9IHNyY0luZGV4IFRoZSBpbmRleCBvZiBgc291cmNlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIG1lcmdlZCB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIHNvdXJjZSB2YWx1ZXMgYW5kIHRoZWlyIG1lcmdlZFxuICogIGNvdW50ZXJwYXJ0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZU1lcmdlKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCwgY3VzdG9taXplciwgc3RhY2spIHtcbiAgaWYgKG9iamVjdCA9PT0gc291cmNlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGJhc2VGb3Ioc291cmNlLCBmdW5jdGlvbihzcmNWYWx1ZSwga2V5KSB7XG4gICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICBpZiAoaXNPYmplY3Qoc3JjVmFsdWUpKSB7XG4gICAgICBiYXNlTWVyZ2VEZWVwKG9iamVjdCwgc291cmNlLCBrZXksIHNyY0luZGV4LCBiYXNlTWVyZ2UsIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyXG4gICAgICAgID8gY3VzdG9taXplcihzYWZlR2V0KG9iamVjdCwga2V5KSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gc3JjVmFsdWU7XG4gICAgICB9XG4gICAgICBhc3NpZ25NZXJnZVZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9LCBrZXlzSW4pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VNZXJnZTtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgaXQgcmVjZWl2ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55IHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKlxuICogY29uc29sZS5sb2coXy5pZGVudGl0eShvYmplY3QpID09PSBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaWRlbnRpdHk7XG4iLCIvKipcbiAqIEEgZmFzdGVyIGFsdGVybmF0aXZlIHRvIGBGdW5jdGlvbiNhcHBseWAsIHRoaXMgZnVuY3Rpb24gaW52b2tlcyBgZnVuY2BcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxuICovXG5mdW5jdGlvbiBhcHBseShmdW5jLCB0aGlzQXJnLCBhcmdzKSB7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZyk7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXBwbHk7XG4iLCJ2YXIgYXBwbHkgPSByZXF1aXJlKCcuL19hcHBseScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggdHJhbnNmb3JtcyB0aGUgcmVzdCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xuICBzdGFydCA9IG5hdGl2ZU1heChzdGFydCA9PT0gdW5kZWZpbmVkID8gKGZ1bmMubGVuZ3RoIC0gMSkgOiBzdGFydCwgMCk7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcbiAgICB9XG4gICAgaW5kZXggPSAtMTtcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcbiAgICB3aGlsZSAoKytpbmRleCA8IHN0YXJ0KSB7XG4gICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07XG4gICAgfVxuICAgIG90aGVyQXJnc1tzdGFydF0gPSB0cmFuc2Zvcm0oYXJyYXkpO1xuICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG92ZXJSZXN0O1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGB2YWx1ZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJldHVybiBmcm9tIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb25zdGFudCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBfLnRpbWVzKDIsIF8uY29uc3RhbnQoeyAnYSc6IDEgfSkpO1xuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHMpO1xuICogLy8gPT4gW3sgJ2EnOiAxIH0sIHsgJ2EnOiAxIH1dXG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0c1swXSA9PT0gb2JqZWN0c1sxXSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGNvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29uc3RhbnQ7XG4iLCJ2YXIgY29uc3RhbnQgPSByZXF1aXJlKCcuL2NvbnN0YW50JyksXG4gICAgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpLFxuICAgIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXRUb1N0cmluZ2Agd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBiYXNlU2V0VG9TdHJpbmcgPSAhZGVmaW5lUHJvcGVydHkgPyBpZGVudGl0eSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuYywgJ3RvU3RyaW5nJywge1xuICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICdlbnVtZXJhYmxlJzogZmFsc2UsXG4gICAgJ3ZhbHVlJzogY29uc3RhbnQoc3RyaW5nKSxcbiAgICAnd3JpdGFibGUnOiB0cnVlXG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlU2V0VG9TdHJpbmc7XG4iLCIvKiogVXNlZCB0byBkZXRlY3QgaG90IGZ1bmN0aW9ucyBieSBudW1iZXIgb2YgY2FsbHMgd2l0aGluIGEgc3BhbiBvZiBtaWxsaXNlY29uZHMuICovXG52YXIgSE9UX0NPVU5UID0gODAwLFxuICAgIEhPVF9TUEFOID0gMTY7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVOb3cgPSBEYXRlLm5vdztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCdsbCBzaG9ydCBvdXQgYW5kIGludm9rZSBgaWRlbnRpdHlgIGluc3RlYWRcbiAqIG9mIGBmdW5jYCB3aGVuIGl0J3MgY2FsbGVkIGBIT1RfQ09VTlRgIG9yIG1vcmUgdGltZXMgaW4gYEhPVF9TUEFOYFxuICogbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZXN0cmljdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNob3J0YWJsZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gc2hvcnRPdXQoZnVuYykge1xuICB2YXIgY291bnQgPSAwLFxuICAgICAgbGFzdENhbGxlZCA9IDA7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdGFtcCA9IG5hdGl2ZU5vdygpLFxuICAgICAgICByZW1haW5pbmcgPSBIT1RfU1BBTiAtIChzdGFtcCAtIGxhc3RDYWxsZWQpO1xuXG4gICAgbGFzdENhbGxlZCA9IHN0YW1wO1xuICAgIGlmIChyZW1haW5pbmcgPiAwKSB7XG4gICAgICBpZiAoKytjb3VudCA+PSBIT1RfQ09VTlQpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1swXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY291bnQgPSAwO1xuICAgIH1cbiAgICByZXR1cm4gZnVuYy5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvcnRPdXQ7XG4iLCJ2YXIgYmFzZVNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fYmFzZVNldFRvU3RyaW5nJyksXG4gICAgc2hvcnRPdXQgPSByZXF1aXJlKCcuL19zaG9ydE91dCcpO1xuXG4vKipcbiAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGBmdW5jYCB0byByZXR1cm4gYHN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgc2V0VG9TdHJpbmcgPSBzaG9ydE91dChiYXNlU2V0VG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFRvU3RyaW5nO1xuIiwidmFyIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpLFxuICAgIG92ZXJSZXN0ID0gcmVxdWlyZSgnLi9fb3ZlclJlc3QnKSxcbiAgICBzZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFRvU3RyaW5nJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmVzdGAgd2hpY2ggZG9lc24ndCB2YWxpZGF0ZSBvciBjb2VyY2UgYXJndW1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VSZXN0KGZ1bmMsIHN0YXJ0KSB7XG4gIHJldHVybiBzZXRUb1N0cmluZyhvdmVyUmVzdChmdW5jLCBzdGFydCwgaWRlbnRpdHkpLCBmdW5jICsgJycpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VSZXN0O1xuIiwidmFyIGVxID0gcmVxdWlyZSgnLi9lcScpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIHZhbHVlIGFyZ3VtZW50LlxuICogQHBhcmFtIHsqfSBpbmRleCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIGluZGV4IG9yIGtleSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gb2JqZWN0IFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgb2JqZWN0IGFyZ3VtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSXRlcmF0ZWVDYWxsKHZhbHVlLCBpbmRleCwgb2JqZWN0KSB7XG4gIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgdHlwZSA9IHR5cGVvZiBpbmRleDtcbiAgaWYgKHR5cGUgPT0gJ251bWJlcidcbiAgICAgICAgPyAoaXNBcnJheUxpa2Uob2JqZWN0KSAmJiBpc0luZGV4KGluZGV4LCBvYmplY3QubGVuZ3RoKSlcbiAgICAgICAgOiAodHlwZSA9PSAnc3RyaW5nJyAmJiBpbmRleCBpbiBvYmplY3QpXG4gICAgICApIHtcbiAgICByZXR1cm4gZXEob2JqZWN0W2luZGV4XSwgdmFsdWUpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0l0ZXJhdGVlQ2FsbDtcbiIsInZhciBiYXNlUmVzdCA9IHJlcXVpcmUoJy4vX2Jhc2VSZXN0JyksXG4gICAgaXNJdGVyYXRlZUNhbGwgPSByZXF1aXJlKCcuL19pc0l0ZXJhdGVlQ2FsbCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmFzc2lnbmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGFzc2lnbmVyIFRoZSBmdW5jdGlvbiB0byBhc3NpZ24gdmFsdWVzLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYXNzaWduZXIgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFzc2lnbmVyKGFzc2lnbmVyKSB7XG4gIHJldHVybiBiYXNlUmVzdChmdW5jdGlvbihvYmplY3QsIHNvdXJjZXMpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gc291cmNlcy5sZW5ndGgsXG4gICAgICAgIGN1c3RvbWl6ZXIgPSBsZW5ndGggPiAxID8gc291cmNlc1tsZW5ndGggLSAxXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZ3VhcmQgPSBsZW5ndGggPiAyID8gc291cmNlc1syXSA6IHVuZGVmaW5lZDtcblxuICAgIGN1c3RvbWl6ZXIgPSAoYXNzaWduZXIubGVuZ3RoID4gMyAmJiB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nKVxuICAgICAgPyAobGVuZ3RoLS0sIGN1c3RvbWl6ZXIpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChzb3VyY2VzWzBdLCBzb3VyY2VzWzFdLCBndWFyZCkpIHtcbiAgICAgIGN1c3RvbWl6ZXIgPSBsZW5ndGggPCAzID8gdW5kZWZpbmVkIDogY3VzdG9taXplcjtcbiAgICAgIGxlbmd0aCA9IDE7XG4gICAgfVxuICAgIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICB2YXIgc291cmNlID0gc291cmNlc1tpbmRleF07XG4gICAgICBpZiAoc291cmNlKSB7XG4gICAgICAgIGFzc2lnbmVyKG9iamVjdCwgc291cmNlLCBpbmRleCwgY3VzdG9taXplcik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUFzc2lnbmVyO1xuIiwidmFyIGJhc2VNZXJnZSA9IHJlcXVpcmUoJy4vX2Jhc2VNZXJnZScpLFxuICAgIGNyZWF0ZUFzc2lnbmVyID0gcmVxdWlyZSgnLi9fY3JlYXRlQXNzaWduZXInKTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmFzc2lnbmAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgbWVyZ2VzIG93biBhbmRcbiAqIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIHNvdXJjZSBvYmplY3RzIGludG8gdGhlXG4gKiBkZXN0aW5hdGlvbiBvYmplY3QuIFNvdXJjZSBwcm9wZXJ0aWVzIHRoYXQgcmVzb2x2ZSB0byBgdW5kZWZpbmVkYCBhcmVcbiAqIHNraXBwZWQgaWYgYSBkZXN0aW5hdGlvbiB2YWx1ZSBleGlzdHMuIEFycmF5IGFuZCBwbGFpbiBvYmplY3QgcHJvcGVydGllc1xuICogYXJlIG1lcmdlZCByZWN1cnNpdmVseS4gT3RoZXIgb2JqZWN0cyBhbmQgdmFsdWUgdHlwZXMgYXJlIG92ZXJyaWRkZW4gYnlcbiAqIGFzc2lnbm1lbnQuIFNvdXJjZSBvYmplY3RzIGFyZSBhcHBsaWVkIGZyb20gbGVmdCB0byByaWdodC4gU3Vic2VxdWVudFxuICogc291cmNlcyBvdmVyd3JpdGUgcHJvcGVydHkgYXNzaWdubWVudHMgb2YgcHJldmlvdXMgc291cmNlcy5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuNS4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7XG4gKiAgICdhJzogW3sgJ2InOiAyIH0sIHsgJ2QnOiA0IH1dXG4gKiB9O1xuICpcbiAqIHZhciBvdGhlciA9IHtcbiAqICAgJ2EnOiBbeyAnYyc6IDMgfSwgeyAnZSc6IDUgfV1cbiAqIH07XG4gKlxuICogXy5tZXJnZShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IHsgJ2EnOiBbeyAnYic6IDIsICdjJzogMyB9LCB7ICdkJzogNCwgJ2UnOiA1IH1dIH1cbiAqL1xudmFyIG1lcmdlID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KSB7XG4gIGJhc2VNZXJnZShvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gbWVyZ2U7XG4iLCJcbmludGVyZmFjZSBJbmplY3RMaW5rT3B0aW9ucyB7XG4gIHJlbDogc3RyaW5nXG4gIGhyZWY6IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgaW5qZWN0TGluayA9KG9wdGlvbnM6IEluamVjdExpbmtPcHRpb25zKSA9PiB7XG4gIGNvbnN0IGhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpXG5cbiAgT2JqZWN0LmVudHJpZXMob3B0aW9ucykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiBsaW5rLnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKSlcblxuICBoZWFkLmFwcGVuZENoaWxkKGxpbmspO1xufVxuIiwiaW1wb3J0IHsgQ2FsbGJhY2sgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IHsgaXNWYWx1ZSB9IGZyb20gXCIuL2luZGV4XCI7XG5cbnR5cGUgVmlzaXRvciA9IENhbGxiYWNrPFtQcm9wZXJ0eUtleSwgdW5rbm93biwgc3RyaW5nXT5cblxuZXhwb3J0IGNvbnN0IGl0ZXJhdG9yID0gKGlucHV0OiB1bmtub3duLCB2aXNpdG9yOiBWaXNpdG9yLCBwYXRoPzogc3RyaW5nKTogYW55ID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG5cbiAgICByZXR1cm4gaW5wdXQubWFwKChlbCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IG5ld1BhdGggPSBbcGF0aCwgaW5kZXhdLmZpbHRlcihpc1ZhbHVlKS5qb2luKCcuJylcbiAgICAgIHJldHVybiBpdGVyYXRvcih2aXNpdG9yKGluZGV4LCBlbCwgbmV3UGF0aCksIHZpc2l0b3IsIG5ld1BhdGgpXG4gICAgfSlcbiAgfVxuXG4gIGlmICh0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnICYmIGlucHV0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGlucHV0KS5yZWR1Y2UoKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBjb25zdCBuZXdQYXRoID0gW3BhdGgsIGtleV0uZmlsdGVyKGlzVmFsdWUpLmpvaW4oJy4nKVxuICAgICAgYWNjW2tleV0gPSBpdGVyYXRvcih2aXNpdG9yKGtleSwgdmFsdWUsIG5ld1BhdGgpLCB2aXNpdG9yLCBuZXdQYXRoKVxuXG4gICAgICByZXR1cm4gYWNjXG4gICAgfSwge30gYXMgYW55KVxuICB9XG5cbiAgcmV0dXJuIGlucHV0XG59XG4iLCJpbXBvcnQgeyBBbnlPYmplY3QgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IGxvZGFzaE1lcmdlIGZyb20gJ2xvZGFzaC9tZXJnZSdcblxuZXhwb3J0IGNvbnN0IGlzRW1wdHlWYWx1ZSA9ICh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIG51bGwgfCB1bmRlZmluZWQgPT5cbiAgIXZhbHVlICYmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuZXhwb3J0IGNvbnN0IGlzVmFsdWUgPSA8VD4odmFsdWU6IFQpOiB2YWx1ZSBpcyBFeGNsdWRlPFQsIG51bGwgfCB1bmRlZmluZWQ+ID0+ICFpc0VtcHR5VmFsdWUodmFsdWUpXG5leHBvcnQgY29uc3Qgbm9vcCA9ICgpID0+IHVuZGVmaW5lZFxuXG5leHBvcnQgY29uc3QgaXNQcmltaXRpdmUgPSAodmFsdWU6IHVua25vd24pOiBib29sZWFuID0+XG4gICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykgfHwgdmFsdWUgPT09IG51bGxcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNvbnN0YW50cyA9IDxLIGV4dGVuZHMgc3RyaW5nPiguLi5jb25zdGFudHM6IEtbXSkgPT4ge1xuICByZXR1cm4gY29uc3RhbnRzLnJlZHVjZTx7IFtQIGluIEtdOiBQIH0+KChhY2MsIGNvbnN0YW50KSA9PiB7XG4gICAgYWNjW2NvbnN0YW50XSA9IGNvbnN0YW50XG4gICAgcmV0dXJuIGFjY1xuICB9LCB7fSBhcyB7IFtQIGluIEtdOiBQIH0pXG59XG5cbmV4cG9ydCBjb25zdCBwaWNrID0gPFRWYWx1ZSBleHRlbmRzIEFueU9iamVjdD4ob2JqOiBUVmFsdWUsIC4uLnByb3BzOiAoa2V5b2YgVFZhbHVlKVtdKSA9PiB7XG4gIHJldHVybiBwcm9wcy5yZWR1Y2UoKHJlc3VsdCwgcHJvcCkgPT4ge1xuICAgIHJlc3VsdFtwcm9wXSA9IG9ialtwcm9wXVxuICAgIHJldHVybiByZXN1bHRcbiAgfSwge30gYXMgYW55KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gb21pdDxUIGV4dGVuZHMgQW55T2JqZWN0LCBQIGV4dGVuZHMgc3RyaW5nW10+KG9iajogVCwgLi4ucHJvcHM6IFApOiBPbWl0PFQsIFBbbnVtYmVyXT4ge1xuICBjb25zdCByZXN1bHQgPSB7IC4uLm9iaiB9XG4gIHByb3BzLmZvckVhY2gocHJvcCA9PiB7XG4gICAgZGVsZXRlIHJlc3VsdFtwcm9wXVxuICB9KVxuICByZXR1cm4gcmVzdWx0XG59XG5cbmV4cG9ydCBjb25zdCBnZXQgPSAob2JqOiBBbnlPYmplY3QsIHBhdGg6IHN0cmluZywgZGVmVmFsdWU/OiB1bmtub3duKTogYW55ID0+IHtcbiAgaWYgKCFwYXRoKSByZXR1cm4gdW5kZWZpbmVkXG4gIGNvbnN0IHBhdGhBcnJheSA9IChBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aCA6IHBhdGgubWF0Y2goLyhbXlsuXFxdXSkrL2cpKSBhcyBzdHJpbmdbXVxuICBjb25zdCByZXN1bHQgPSBwYXRoQXJyYXkucmVkdWNlKChwcmV2T2JqOiBBbnlPYmplY3QsIGtleTogc3RyaW5nKSA9PiBwcmV2T2JqICYmIHByZXZPYmpba2V5XSwgb2JqKVxuICAvLyBJZiBmb3VuZCB2YWx1ZSBpcyB1bmRlZmluZWQgcmV0dXJuIGRlZmF1bHQgdmFsdWU7IG90aGVyd2lzZSByZXR1cm4gdGhlIHZhbHVlXG4gIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZlZhbHVlIDogcmVzdWx0XG59XG5cbmV4cG9ydCBjb25zdCBzZXQgPSAob2JqOiBBbnlPYmplY3QsIHBhdGg6IHN0cmluZywgdmFsdWU6IHVua25vd24pID0+IHtcbiAgY29uc3QgcGF0aEFycmF5ID0gKEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoIDogcGF0aC5tYXRjaCgvKFteWy5cXF1dKSsvZykpIGFzIHN0cmluZ1tdXG5cbiAgcmV0dXJuIHBhdGhBcnJheS5yZWR1Y2UoKGFjYywga2V5LCBpKSA9PiB7XG4gICAgaWYgKGFjY1trZXldID09PSB1bmRlZmluZWQpIGFjY1trZXldID0ge31cbiAgICBpZiAoaSA9PT0gcGF0aEFycmF5Lmxlbmd0aCAtIDEpIGFjY1trZXldID0gdmFsdWVcbiAgICByZXR1cm4gYWNjW2tleV1cbiAgfSwgb2JqKVxufVxuXG5leHBvcnQgY29uc3QgaGV4VG9SZ2IgPSAoaGV4OiBzdHJpbmcpID0+IHtcbiAgY29uc3QgY2hhcnMgPSBoZXguc2xpY2UoMSlcblxuICBpZiAoY2hhcnMubGVuZ3RoID09PSAzKSB7XG4gICAgaGV4ID0gY2hhcnNcbiAgICAgIC5zcGxpdCgnJylcbiAgICAgIC5tYXAodmFsID0+IGAke3ZhbH0ke3ZhbH1gKVxuICAgICAgLmpvaW4oJycpXG4gIH1cblxuICBjb25zdCByZXN1bHQgPSAvXiM/KFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pJC9pLmV4ZWMoaGV4KVxuXG4gIHJldHVybiByZXN1bHRcbiAgICA/IHtcbiAgICAgICAgcjogcGFyc2VJbnQocmVzdWx0WzFdLCAxNiksXG4gICAgICAgIGc6IHBhcnNlSW50KHJlc3VsdFsyXSwgMTYpLFxuICAgICAgICBiOiBwYXJzZUludChyZXN1bHRbM10sIDE2KVxuICAgICAgfVxuICAgIDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBjb25zdCBpc0pzb25TYW1lID0gKC4uLnZhbHVlczogdW5rbm93bltdKSA9PiB7XG4gIHJldHVybiB2YWx1ZXMubWFwKHZhbHVlID0+IEpTT04uc3RyaW5naWZ5KHZhbHVlKSkuZXZlcnkoKHZhbCwgXywgYXJyKSA9PiB2YWwgPT09IGFyclswXSlcbn1cblxuZXhwb3J0IGNvbnN0IHJnYlRvUmdiYSA9IChyZ2I6IHN0cmluZywgYWxwaGEgPSAxKTogc3RyaW5nID0+IHJnYi5yZXBsYWNlKCcpJywgYCwgJHthbHBoYX0pYCkucmVwbGFjZSgncmdiJywgJ3JnYmEnKVxuXG5leHBvcnQgY29uc3QgbWVyZ2UgPSBsb2Rhc2hNZXJnZVxuXG5leHBvcnQgY29uc3QgZGV2aWNlcyA9IFsnZGVza3RvcCcsICdsYXB0b3AnLCAndGFibGV0JywgJ21vYmlsZSddIGFzIGNvbnN0XG5cbmV4cG9ydCBjb25zdCBCUkVBS1BPSU5UUyA9IHtcbiAgbW9iaWxlOiAzMjAsXG4gIHRhYmxldDogNzY4LFxuICBsYXB0b3A6IDEwMjQsXG4gIGRlc2t0b3A6IDE5MjBcbn0gYXMgY29uc3RcblxuZXhwb3J0ICogZnJvbSAnLi90eXBlcydcbmV4cG9ydCAqIGZyb20gJy4vZG9tJ1xuZXhwb3J0ICogZnJvbSAnLi9pdGVyYXRvcidcbiIsImltcG9ydCB7IEFueU9iamVjdCwgRGV2aWNlLCBkZXZpY2VzLCBFeHRyYWN0UnVsZXMsIGlzVmFsdWUsIGl0ZXJhdG9yLCBMYXllciwgUnVsZSB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHsgQW55U3RhdGUgfSBmcm9tICcuLi9wcm9tb3MvU2ltcGxlR2lmdC90eXBlcydcblxuY29uc3QgaXNWYWxpZExheWVyID0gKHN0YXRlOiBBbnlPYmplY3QgPSB7fSk6IHN0YXRlIGlzIExheWVyID0+XG4gIHR5cGVvZiBzdGF0ZSA9PT0gJ29iamVjdCcgJiYgaXNWYWx1ZShzdGF0ZSkgJiYgZGV2aWNlcy5ldmVyeShkZXZpY2UgPT4gZGV2aWNlIGluIHN0YXRlKVxuXG5leHBvcnQgY29uc3QgZ2V0UnVsZXMgPSA8VFN0YXRlIGV4dGVuZHMgQW55U3RhdGUsIFREZXZpY2UgZXh0ZW5kcyBEZXZpY2UgPSAnZGVza3RvcCc+KFxuICBzdGF0ZTogVFN0YXRlLFxuICBkZXZpY2U6IFREZXZpY2Vcbik6IEV4dHJhY3RSdWxlczxUU3RhdGUsIFREZXZpY2U+ID0+IHtcbiAgaWYgKCFzdGF0ZSkgcmV0dXJuIHN0YXRlXG5cbiAgcmV0dXJuIGl0ZXJhdG9yKHN0YXRlLCAoX2tleSwgdmFsdWU6IGFueSkgPT4ge1xuICAgIGlmIChpc1ZhbGlkTGF5ZXIodmFsdWUpKSB7XG4gICAgICBjb25zdCByZXN1bHRSdWxlcyA9IHZhbHVlW2RldmljZV1cbiAgICAgIGlmICgncGFyZW50JyBpbiByZXN1bHRSdWxlcyAmJiBpc1ZhbHVlKHJlc3VsdFJ1bGVzLnBhcmVudCkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlW3Jlc3VsdFJ1bGVzLnBhcmVudF1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHRSdWxlc1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZVxuICB9KSBhcyBFeHRyYWN0UnVsZXM8VFN0YXRlLCBURGV2aWNlPlxufVxuIiwiaW1wb3J0IHsgRGV2aWNlIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgeyBnZXRSdWxlcyB9IGZyb20gJy4uL2hlbHBlcnMvZ2V0RGV2aWNlU3RhdGUnXG5pbXBvcnQgeyBBbnlTdGF0ZSB9IGZyb20gJy4uL3Byb21vcy9TaW1wbGVHaWZ0L3R5cGVzJ1xuXG5leHBvcnQgY29uc3QgdXNlR2V0UnVsZXMgPSA8VFN0YXRlIGV4dGVuZHMgQW55U3RhdGUsIFREZXZpY2UgZXh0ZW5kcyBEZXZpY2U+KHN0YXRlOiBUU3RhdGUsIGRldmljZTogVERldmljZSkgPT5cbiAgZ2V0UnVsZXM8VFN0YXRlLCBURGV2aWNlPihzdGF0ZSwgZGV2aWNlKVxuIiwiaW1wb3J0IHsgQlJFQUtQT0lOVFMsIERldmljZSB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHsgdXNlTGF5b3V0RWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgeyBNdXRhYmxlUmVmIH0gZnJvbSAncHJlYWN0L2hvb2tzJ1xuXG5pbnRlcmZhY2UgT3B0aW9ucyB7XG4gIHRhcmdldFJlZjogTXV0YWJsZVJlZjxIVE1MRGl2RWxlbWVudD5cbiAgLyoqXG4gICAqIFByb21vINCy0YHRgtGA0LDQuNCy0LDQtdGC0YHRjyDQsiDRgNCw0LfQvdGL0LUgRE9NINC4INC80Ysg0L3QtSDQt9C90LDQtdC8INGA0LDQt9C80LXRgCDQutCw0LrQvtCz0L4g0LrQvtC90YLQtdC50L3QtdGA0LBcbiAgICog0Y/QstC70Y/QtdGC0YHRjyDQvdGD0LbQvdGL0LwuINCd0LDQv9GA0LjQvNC10YAgR2lmdCog0LfQsNC90LjQvNCw0LXRgiDQstGB0LXQs9C+IDMwcHgsINC4INC90LXQvtCx0YXQvtC00LjQvNGL0Lkg0LrQvtC90YLQtdC50L3QtdGAXG4gICAqINC80L7QttC10YIg0L3QsNGF0L7QtNC40YLRjNGB0Y8g0LPQvtGA0LDQt9C00L4g0LLRi9GI0LUuXG4gICAqL1xuICBwYXJlbnRLZXk/OiBzdHJpbmdcbiAgYnJlYWtwb2ludHM/OiB0eXBlb2YgQlJFQUtQT0lOVFNcbn1cblxuZXhwb3J0IGNvbnN0IHVzZUNvbnRhaW5lckRldmljZSA9ICh7XG4gIHRhcmdldFJlZixcbiAgcGFyZW50S2V5ID0gJ2RldmljZS1jb250YWluZXInLFxuICBicmVha3BvaW50cyA9IEJSRUFLUE9JTlRTXG59OiBPcHRpb25zKSA9PiB7XG4gIGNvbnN0IFtkZXZpY2UsIHNldERldmljZV0gPSB1c2VTdGF0ZTxEZXZpY2U+KCdkZXNrdG9wJylcblxuICBjb25zdCBjaGVja0RldmljZSA9IChwYXJlbnQ6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgcGFyZW50V2lkdGggPSBwYXJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggfHwgMFxuICAgIGNvbnN0IHNvcnRlZEJyZWFrcG9pbnRzID0gT2JqZWN0LmVudHJpZXMoeyAuLi5icmVha3BvaW50cyB9KS5zb3J0KChbXzEsIHZhbHVlQV0sIFtfMiwgdmFsdWVCXSkgPT4gdmFsdWVBIC0gdmFsdWVCKVxuXG4gICAgY29uc3QgZmluZERldmljZSA9XG4gICAgICAoc29ydGVkQnJlYWtwb2ludHMuZmluZCgoW18xLCB2YWx1ZV0sIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IFtfMiwgbmV4dFZhbHVlXSA9IHNvcnRlZEJyZWFrcG9pbnRzW2luZGV4ICsgMV0gfHwgW11cblxuICAgICAgICByZXR1cm4gcGFyZW50V2lkdGggPj0gdmFsdWUgJiYgcGFyZW50V2lkdGggPCBuZXh0VmFsdWVcbiAgICAgIH0pPy5bMF0gYXMgRGV2aWNlKSB8fCAnZGVza3RvcCdcblxuICAgIHNldERldmljZShmaW5kRGV2aWNlKVxuICB9XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBwYXJlbnRFbGVtZW50ID0gdGFyZ2V0UmVmLmN1cnJlbnQuY2xvc2VzdChgW2RhdGEtJHtwYXJlbnRLZXl9XWApXG5cbiAgICBpZiAocGFyZW50RWxlbWVudCkge1xuICAgICAgY29uc3QgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gY2hlY2tEZXZpY2UocGFyZW50RWxlbWVudCkpXG4gICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKHBhcmVudEVsZW1lbnQpXG5cbiAgICAgIGNoZWNrRGV2aWNlKHBhcmVudEVsZW1lbnQpXG4gICAgfVxuICB9LCBbXSlcblxuICByZXR1cm4gZGV2aWNlXG59XG4iLCJpbXBvcnQgeyBBbnlPYmplY3QsIGRldmljZXMsIEZpdE9wdGlvbiwgaGV4VG9SZ2IsIGlzRW1wdHlWYWx1ZSwgaXNWYWx1ZSwgcmdiVG9SZ2JhIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgeyBFbWl0dGVyVHlwZSB9IGZyb20gJ3NyYy9yZW5kZXJEcml2ZXInXG5pbXBvcnQgeyBpbmplY3RTdHlsZVJ1bGVzLCBTdHlsZVJ1bGVzIH0gZnJvbSAnc3JjL3V0aWxzL2luamVjdFN0eWxlUnVsZXMnXG5pbXBvcnQgeyBpc1ZhbGlkU3R5bGVLZXkgfSBmcm9tICcuL2lzVmFsaWRTdHlsZUtleSdcblxuLyoqXG4gKiDQn9C70LDQs9C40L0g0L/RgNC40LzQtdC90Y/QtdGCINC/0YDQsNCy0LjQu9CwOiDRgdGC0LjQu9C4LCBpbm5lclRleHQgLi4uXG4gKiDQldGB0LvQuCDQutC+0L3RgtC10L3RgtCwINC90LXRgiwg0YLQviDQndC+0LTQsCDRgdC60YDRi9Cy0LDQtdGC0YHRj1xuICovXG5cbnR5cGUgQ3VzdG9tU3R5bGVzID0gUGFydGlhbDxcbiAgT21pdDxTdHlsZVJ1bGVzLCAnYm9yZGVyV2lkdGgnIHwgJ21pbkhlaWdodCcgfCAnbWluV2lkdGgnIHwgJ2ZvbnRTaXplJz4gJiB7XG4gICAgbWluSGVpZ2h0OiBudW1iZXJcbiAgICBtaW5XaWR0aDogbnVtYmVyXG4gICAgZm9udFNpemU6IG51bWJlclxuICB9XG4+XG5cbmRlY2xhcmUgbW9kdWxlICdzcmMvcmVuZGVyRHJpdmVyJyB7XG4gIGludGVyZmFjZSBSZW5kZXJEcml2ZXJSdWxlIGV4dGVuZHMgQ3VzdG9tU3R5bGVzIHtcbiAgICBpbm5lckhUTUw/OiBzdHJpbmdcbiAgICBpbm5lclRleHQ/OiBzdHJpbmdcbiAgICBjb3JuZXI/OiBudW1iZXJcbiAgICBiYWNrZ3JvdW5kRml0PzogRml0T3B0aW9uXG4gICAgYmFja2dyb3VuZENvbG9yT3BhY2l0eT86IG51bWJlclxuICAgIGlzQm9sZD86IGJvb2xlYW5cbiAgICBpc0l0YWxpYz86IGJvb2xlYW5cbiAgICBpc1Rocm91Z2g/OiBib29sZWFuXG4gICAgJGF0dHJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPlxuICB9XG59XG5cbmNvbnN0IHdyYXBUbyA9ICh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyLCB1bnRpbDogJyUnIHwgJ3B4JykgPT4gYCR7dmFsdWV9JHt1bnRpbH1gXG5cbmNvbnN0IHRvUHggPSAoa2V5OiBzdHJpbmcpID0+IGtleS5zdGFydHNXaXRoKCdweF8nKVxuY29uc3QgdG9QZXJjZW50ID0gKGtleTogc3RyaW5nKSA9PiBrZXkuc3RhcnRzV2l0aCgncGVyY2VudF8nKVxuXG5jb25zdCBmb3JtYXRSdWxlID0gKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG4gIGxldCBuZXdLZXkgPSBrZXlcbiAgbGV0IG5ld1ZhbHVlID0gdmFsdWVcblxuICBpZiAodG9QeChuZXdLZXkpKSB7XG4gICAgbmV3S2V5ID0gbmV3S2V5LnJlcGxhY2UoJ3B4XycsICcnKVxuICAgIG5ld1ZhbHVlID0gd3JhcFRvKHZhbHVlLCAncHgnKVxuICB9XG4gIGlmICh0b1BlcmNlbnQobmV3S2V5KSkge1xuICAgIG5ld0tleSA9IG5ld0tleS5yZXBsYWNlKCdwZXJjZW50XycsICcnKVxuICAgIG5ld1ZhbHVlID0gd3JhcFRvKHZhbHVlLCAnJScpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGtleTogbmV3S2V5LFxuICAgIHZhbHVlOiBuZXdWYWx1ZVxuICB9XG59XG5cbmNvbnN0IERFRkFVTFRfVE9fUFggPSBbXG4gICdib3JkZXJXaWR0aCcsXG4gICdib3JkZXJMZWZ0V2lkdGgnLFxuICAnYm9yZGVyUmlnaHRXaWR0aCcsXG4gICdib3JkZXJUb3BXaWR0aCcsXG4gICdib3JkZXJCb3R0b21XaWR0aCcsXG4gICdtaW5IZWlnaHQnLFxuICAnbWluV2lkdGgnLFxuICAnbWF4V2lkdGgnLFxuICAnbWF4SGVpZ2h0JyxcbiAgJ2ZvbnRTaXplJyxcbiAgJ2hlaWdodCcsXG4gICd3aWR0aCcsXG4gICdsZXR0ZXJTcGFjaW5nJyxcbiAgJ2ZvbnRTaXplJyxcbiAgJ2xlZnQnLFxuICAncmlnaHQnLFxuICAndG9wJyxcbiAgJ2JvdHRvbScsXG4gICdtYXJnaW5Ub3AnLFxuICAnbWFyZ2luQm90dG9tJyxcbiAgJ21hcmdpbkxlZnQnLFxuICAnbWFyZ2luUmlnaHQnLFxuICAncGFkZGluZ1RvcCcsXG4gICdwYWRkaW5nQm90dG9tJyxcbiAgJ3BhZGRpbmdMZWZ0JyxcbiAgJ3BhZGRpbmdSaWdodCdcbl1cblxuZXhwb3J0IGNvbnN0IHBhcnNlUnVsZXMgPSAocnVsZXM6IEFueU9iamVjdCwgbGF5ZXI/OiBzdHJpbmcpID0+IHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHJ1bGVzKVxuXG4gIGlmIChrZXlzLmluY2x1ZGVzKCdpbm5lckhUTUwnKSB8fCBrZXlzLmluY2x1ZGVzKCdpbm5lclRleHQnKSkge1xuICAgIGNvbnNvbGUud2FybihgV2FybmluZyEgSW5uZXJIVE1MIGFuZCBpbm5lclRleHQgaXMgZGVwcmVjYXRlZC4gVXNlIFwiY2hpbGRyZW5cIiBwcm9wZXJ0eS5gLCBsYXllcilcbiAgfVxuXG4gIGlmICh0eXBlb2YgcnVsZXMgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHJ1bGVzXG4gIH1cblxuICBpZiAoJ3R5cG9ncmFwaHknIGluIHJ1bGVzICYmICdhY2NlbnRUeXBvZ3JhcGh5JyBpbiBydWxlcykge1xuICAgIGNvbnN0IHR5cG9ncmFwaHkgPSBydWxlcy50eXBvZ3JhcGh5XG4gICAgY29uc3QgYWNjZW50VHlwb2dyYXBoeSA9IHJ1bGVzLmFjY2VudFR5cG9ncmFwaHlcblxuICAgIHJ1bGVzID0ge1xuICAgICAgLi4ucnVsZXMsXG4gICAgICAuLi50eXBvZ3JhcGh5LFxuICAgICAgJy0tZm9udC1mYW1pbHknOiBhY2NlbnRUeXBvZ3JhcGh5LmZvbnRGYW1pbHksXG4gICAgICAnLS1hY2NlbnQtY29sb3InOiBhY2NlbnRUeXBvZ3JhcGh5LmNvbG9yLFxuICAgICAgJ3B4Xy0tYWNjZW50LXNpemUnOiBhY2NlbnRUeXBvZ3JhcGh5LmZvbnRTaXplXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJ1bGVzKS5yZWR1Y2UoKGFjYywgW3Byb3BLZXksIHByb3BWYWx1ZV0pID0+IHtcbiAgICBpZiAoREVGQVVMVF9UT19QWC5pbmNsdWRlcyhwcm9wS2V5KSkge1xuICAgICAgcHJvcFZhbHVlID0gd3JhcFRvKHByb3BWYWx1ZSwgJ3B4JylcbiAgICB9XG5cbiAgICBjb25zdCB7IGtleSwgdmFsdWUgfSA9IGZvcm1hdFJ1bGUocHJvcEtleSwgcHJvcFZhbHVlKVxuICAgIGFjY1trZXldID0gdmFsdWVcblxuICAgIGlmIChrZXkgPT09ICdpbm5lckhUTUwnKSB7XG4gICAgICBhY2MuaW5uZXJIVE1MID0gaXNWYWx1ZSh2YWx1ZSkgPyBgJHt2YWx1ZX1gIDogJydcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnaW5uZXJUZXh0Jykge1xuICAgICAgYWNjLmlubmVyVGV4dCA9IGlzVmFsdWUodmFsdWUpID8gYCR7dmFsdWV9YCA6ICcnXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2NoaWxkcmVuJykge1xuICAgICAgYWNjLmNoaWxkcmVuID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IChpc1ZhbHVlKHZhbHVlKSA/IGAke3ZhbHVlfWAgOiAnJykgOiB2YWx1ZVxuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdpbm5lckhUTUwnIHx8IGtleSA9PT0gJ2lubmVyVGV4dCcgfHwga2V5ID09PSAnY2hpbGRyZW4nKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgYWNjLmRpc3BsYXkgPSAnbm9uZSdcbiAgICAgIH0gZWxzZSBpZiAoaXNFbXB0eVZhbHVlKHZhbHVlKSkge1xuICAgICAgICBhY2MuZGlzcGxheSA9ICdub25lJ1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChrZXkuaW5jbHVkZXMoJ2JvcmRlcldpZHRoJykpIHtcbiAgICAgIGFjYy5ib3JkZXJTdHlsZSA9ICdzb2xpZCdcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnY29ybmVyJykge1xuICAgICAgYWNjLmJvcmRlclJhZGl1cyA9IHdyYXBUbyh2YWx1ZSwgJ3B4JylcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnYmFja2dyb3VuZEZpdCcpIHtcbiAgICAgIGFjYy5iYWNrZ3JvdW5kU2l6ZSA9IHZhbHVlIGFzIEZpdE9wdGlvblxuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdiYWNrZ3JvdW5kSW1hZ2UnICYmIGlzVmFsdWUodmFsdWUpKSB7XG4gICAgICBhY2MuYmFja2dyb3VuZEltYWdlID0gYHVybCgke3ZhbHVlfSlgXG4gICAgICBhY2MuYmFja2dyb3VuZFJlcGVhdCA9ICduby1yZXBlYXQnXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2JhY2tncm91bmRDb2xvck9wYWNpdHknICYmIGlzVmFsdWUoYWNjLmJhY2tncm91bmRDb2xvck9wYWNpdHkpICYmIGlzVmFsdWUoYWNjLmJhY2tncm91bmRDb2xvcikpIHtcbiAgICAgIGNvbnN0IHJnYiA9IGhleFRvUmdiKGFjYy5iYWNrZ3JvdW5kQ29sb3IpXG4gICAgICBpZiAocmdiKSB7XG4gICAgICAgIGFjYy5iYWNrZ3JvdW5kQ29sb3IgPSByZ2JUb1JnYmEoYHJnYigke3JnYi5yfSwgJHtyZ2IuZ30sICR7cmdiLmJ9KWAsICthY2MuYmFja2dyb3VuZENvbG9yT3BhY2l0eSAvIDEwMClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnaXNCb2xkJykge1xuICAgICAgYWNjLmZvbnRXZWlnaHQgPSB2YWx1ZSA/ICdib2xkJyA6ICdpbml0aWFsJ1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdpc0l0YWxpYycpIHtcbiAgICAgIGFjYy5mb250U3R5bGUgPSB2YWx1ZSA/ICdpdGFsaWMnIDogJ2luaXRpYWwnXG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2lzVGhyb3VnaCcpIHtcbiAgICAgIGFjYy50ZXh0RGVjb3JhdGlvbiA9IHZhbHVlID8gJ2xpbmUtdGhyb3VnaCcgOiAnaW5pdGlhbCdcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjXG4gIH0sIHJ1bGVzKVxufVxuIiwiaW1wb3J0IHsgcGFyc2VSdWxlcyB9IGZyb20gJy4uL2hlbHBlcnMvcGFyc2VSdWxlcydcbmltcG9ydCB7IEFueU9iamVjdCB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuXG5jb25zdCBpc1ZhbGlkUnVsZSA9IChydWxlOiBBbnlPYmplY3QpID0+IHR5cGVvZiBydWxlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShydWxlKSAmJiAncGFyZW50JyBpbiBydWxlXG5cbmV4cG9ydCBjb25zdCB1c2VQYXJzZVJ1bGVzID0gKHN0YXRlOiB1bmtub3duKSA9PlxuICBPYmplY3QuZW50cmllcyhzdGF0ZSkucmVkdWNlKChhY2MsIFtsYXllciwgcnVsZV0pID0+IHtcbiAgICBhY2NbbGF5ZXJdID0gaXNWYWxpZFJ1bGUocnVsZSkgPyBwYXJzZVJ1bGVzKHsgLi4uc3RhdGVbbGF5ZXJdIH0sIGxheWVyKSA6IHJ1bGVcblxuICAgIHJldHVybiBhY2NcbiAgfSwge30pXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5cbmludGVyZmFjZSBQcm9wcyB7XG4gIGNoaWxkcmVuOiBzdHJpbmdcbn1cblxuY29uc3QgRGlzcGxheVRleHQ6IEZDPFByb3BzPiA9ICh7IGNoaWxkcmVuLCAuLi5yZXN0IH0pID0+IHtcbiAgY29uc3QgZm9ybWF0VmFsdWUgPSBjaGlsZHJlbj8ucmVwbGFjZSgnc2NyaXB0JywgJycpPy5yZXBsYWNlKC97eyguKj8pfX0vZywgYDxzcGFuPiQxPC9zcGFuPmApXG5cbiAgcmV0dXJuIDxkaXYgey4uLnJlc3R9IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7IF9faHRtbDogZm9ybWF0VmFsdWUgfX0gLz5cbn1cblxuZXhwb3J0IGRlZmF1bHQgRGlzcGxheVRleHRcbiIsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcblxuZXhwb3J0IGNvbnN0IHVzZVRvZ2dsZSA9ICgpID0+IHtcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIHJldHVybiBbaXNPcGVuLCAoKSA9PiBzZXRJc09wZW4ocHJldiA9PiAhcHJldildXG59XG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5cbmNvbnN0IENsb3NlSWNvbjogRkMgPSAoKSA9PiAoXG4gIDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjAnIGhlaWdodD0nMjAnIHZpZXdCb3g9JzAgMCAyNCAyNCc+XG4gICAgPHBhdGhcbiAgICAgIGQ9J00xNy42NTkgNC45MjlhMSAxIDAgMSAxIDEuNDE0IDEuNDE0TDEzLjQxNiAxMmw1LjY1NyA1LjY1N2ExIDEgMCAwIDEtMS40MTUgMS40MTRsLTUuNjU2LTUuNjU3LTUuNjU3IDUuNjU3YTEgMSAwIDAgMS0xLjQxNC0xLjQxNEwxMC41ODcgMTIgNC45MzEgNi4zNDNBMSAxIDAgMSAxIDYuMzQ1IDQuOTNsNS42NTcgNS42NTcgNS42NTYtNS42NTdaJ1xuICAgICAgZmlsbD0nY3VycmVudENvbG9yJ1xuICAgID48L3BhdGg+XG4gIDwvc3ZnPlxuKVxuXG5leHBvcnQgZGVmYXVsdCBDbG9zZUljb25cbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcblxuY29uc3QgR2lmdEljb246IEZDID0gKCkgPT4gKFxuICA8c3ZnIHZpZXdCb3g9JzAgMCAxNiAxNic+XG4gICAgPHBhdGhcbiAgICAgIGZpbGw9J2N1cnJlbnRDb2xvcidcbiAgICAgIGZpbGxSdWxlPSdldmVub2RkJ1xuICAgICAgZD0nTTIuMTMgOEg3djcuMzFIMy4yMmExLjA5IDEuMDkgMCAwMS0xLjA5LTEuMDl6TTkgMTUuMzRoMy44MWExLjA5IDEuMDkgMCAwMDEuMDktMS4wOVY4SDl6bTUuOC05Ljk0djEuMTlhLjQ4LjQ4IDAgMDEtLjQ4LjQ4SDEuNzFhLjQ4LjQ4IDAgMDEtLjQ4LS40OFY1LjRjMC0uNTk2LjQ4NC0xLjA4IDEuMDgtMS4wOEg1YTIuNDggMi40OCAwIDAxLTEuNDctMS42NSAxLjYyIDEuNjIgMCAwMS4yNi0xLjQgMS41NyAxLjU3IDAgMDExLS41OGMuMTEtLjAxLjIyLS4wMS4zMyAwYTIuNSAyLjUgMCAwMTIgMUE5IDkgMCAwMTggMy4yMmExMC4zOCAxMC4zOCAwIDAxLjkxLTEuNTQgMi40OSAyLjQ5IDAgMDExLjkzLTFoLjM2Yy4zNjkuMDY1LjcwMi4yNi45NC41NS4zMS40MDcuNDE0LjkzNi4yOCAxLjQzYTIuNDggMi40OCAwIDAxLTEuNDUgMS42NGgyLjc3YTEuMDggMS4wOCAwIDAxMS4wMyAxLjF6TTguNjYgNGE5LjgxIDkuODEgMCAwMDEuOS0uNTUgMS41MiAxLjUyIDAgMDAuODgtMSAuNjguNjggMCAwMC0uMS0uNTkuNi42IDAgMDAtLjM0LS4yMi41OC41OCAwIDAwLS4xOCAwIDEuNTIgMS41MiAwIDAwLTEuMTcuNjNBOS4wNiA5LjA2IDAgMDA4LjY2IDR6bS0zLjMyLS41OEE5LjYyIDkuNjIgMCAwMDcuMjUgNGE4LjU5IDguNTkgMCAwMC0xLTEuNzIgMS41MSAxLjUxIDAgMDAtMS4xOC0uNjNoLS4xM2EuNjYuNjYgMCAwMC0uMzkuMjIuNjYuNjYgMCAwMC0uMDkuNTdjLjEzLjQ0My40NTMuODA0Ljg4Ljk4eidcbiAgICA+PC9wYXRoPlxuICA8L3N2Zz5cbilcblxuZXhwb3J0IGRlZmF1bHQgR2lmdEljb25cbiIsImltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICcuLi91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IHsgaXNWYWx1ZSB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuXG50eXBlIEFuaW1hdGlvbk5hbWUgPSAnZmFkZScgfCAncHVsc2UnIHwgJ3dpZ2dsZScgfCAnZ3JhZGllbnQnXG5cbmNvbnN0IGFuaW1hdGlvbnNNYXAgPSAoYW5pbWF0aW9uczogUmVjb3JkPEFuaW1hdGlvbk5hbWUsIHN0cmluZz4pID0+ICh7XG4gIGZhZGU6IGAke2FuaW1hdGlvbnMuZmFkZX0gMnMgbGluZWFyIGluZmluaXRlYCxcbiAgcHVsc2U6IGAke2FuaW1hdGlvbnMucHVsc2V9IC4zcyBsaW5lYXIgMHMgaW5maW5pdGUgYWx0ZXJuYXRlIGZvcndhcmRzYCxcbiAgd2lnZ2xlOiBgJHthbmltYXRpb25zLndpZ2dsZX0gMnMgbGluZWFyIGluZmluaXRlYCxcbiAgZ3JhZGllbnQ6IGAke2FuaW1hdGlvbnMuZ3JhZGllbnR9IDNzIGVhc2UgaW5maW5pdGVgLFxufSlcblxuZXhwb3J0IGNvbnN0IHVzZUdpZnRSdWxlcyA9IChkZXZpY2VTdGF0ZTogdW5rbm93biwgYW5pbWF0aW9uczogUmVjb3JkPEFuaW1hdGlvbk5hbWUsIHN0cmluZz4pID0+IHtcbiAgY29uc3QgZnVsbEFuaW1hdGlvbnMgPSBhbmltYXRpb25zTWFwKGFuaW1hdGlvbnMpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhkZXZpY2VTdGF0ZSlcbiAgY29uc3QgaGFzSWNvbiA9IHJ1bGVzPy5pY29uPy5oYXNJY29uXG5cbiAgY29uc3QgYXJyb3dSdWxlcyA9IHtcbiAgICBsZWZ0OiBgJHsrKGRldmljZVN0YXRlPy5jb250YWluZXI/LmxlZnQgfHwgMCkgKiAtMSArIDh9cHhgLFxuICAgIGJhY2tncm91bmRDb2xvcjogcnVsZXM/LmNvbnRhaW5lcj8uYmFja2dyb3VuZENvbG9yLFxuICAgIGJvcmRlclRvcFdpZHRoOiBydWxlcz8uY29udGFpbmVyPy5ib3JkZXJXaWR0aCxcbiAgICBib3JkZXJUb3BDb2xvcjogcnVsZXM/LmNvbnRhaW5lcj8uYm9yZGVyQ29sb3IsXG4gICAgYm9yZGVyVG9wU3R5bGU6ICdzb2xpZCcsXG4gICAgYm9yZGVyTGVmdFdpZHRoOiBydWxlcz8uY29udGFpbmVyPy5ib3JkZXJXaWR0aCxcbiAgICBib3JkZXJMZWZ0Q29sb3I6IHJ1bGVzPy5jb250YWluZXI/LmJvcmRlckNvbG9yLFxuICAgIGJvcmRlckxlZnRTdHlsZTogJ3NvbGlkJ1xuICB9XG5cbiAgY29uc3QgYm9keVJ1bGVzID0ge1xuICAgIGxlZnQ6IHJ1bGVzPy5jb250YWluZXI/LmxlZnRcbiAgfVxuXG4gIGNvbnN0IGFsbEFuaW1hdGlvbnMgPSAocnVsZXM/Lmljb24/LmFuaW1hdGlvbnMgfHwgW10pXG4gICAgLm1hcCgoYW5pbWF0aW9uOiBBbmltYXRpb25OYW1lKSA9PiBmdWxsQW5pbWF0aW9uc1thbmltYXRpb25dKVxuICAgIC5qb2luKCcsICcpXG5cbiAgY29uc3QgYmFja2dyb3VuZFN0eWxlcyA9XG4gICAgaXNWYWx1ZShydWxlcz8uaWNvbj8uZ3JhZGllbnRDb2xvcikgJiYgcnVsZXM/Lmljb24/LmFuaW1hdGlvbnMuaW5jbHVkZXMoJ2dyYWRpZW50JylcbiAgICAgID8ge1xuICAgICAgICAgIGJhY2tncm91bmQ6IGBsaW5lYXItZ3JhZGllbnQoLTkwZGVnLCAke3J1bGVzLmljb24/LmJhY2tncm91bmRDb2xvcn0gMCUsICR7cnVsZXM/Lmljb24/LmdyYWRpZW50Q29sb3J9IDEwMCUpIDAlIDAlIC8gNDAwJSA0MDAlYCxcbiAgICAgICAgICBiYWNrZ3JvdW5kU2l6ZTogJzQwMCUgNDAwJSdcbiAgICAgICAgfVxuICAgICAgOiB7fVxuXG4gIGNvbnN0IGljb25SdWxlcyA9IHtcbiAgICAuLi5ydWxlcz8uaWNvbiB8fCB7fSxcbiAgICBhbmltYXRpb246IGFsbEFuaW1hdGlvbnMsXG4gICAgLi4uYmFja2dyb3VuZFN0eWxlc1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBoYXNJY29uLFxuICAgIGFycm93UnVsZXMsXG4gICAgYm9keVJ1bGVzLFxuICAgIGljb25SdWxlc1xuICB9XG59XG4iLCJleHBvcnQgY29uc3QgYmFja2dyb3VuZE9wdGlvbnMgPSBbJ2JhY2tncm91bmRDb2xvcicsICdiYWNrZ3JvdW5kQ29sb3JPcGFjaXR5JywgJ2JhY2tncm91bmRJbWFnZScsICdiYWNrZ3JvdW5kRml0J11cblxuZXhwb3J0IGNvbnN0IHNwYWNpbmdPcHRpb25zID0gW1xuICAnbWFyZ2luVG9wJyxcbiAgJ21hcmdpbkJvdHRvbScsXG4gICdtYXJnaW5MZWZ0JyxcbiAgJ21hcmdpblJpZ2h0JyxcbiAgJ3BhZGRpbmdUb3AnLFxuICAncGFkZGluZ0JvdHRvbScsXG4gICdwYWRkaW5nTGVmdCcsXG4gICdwYWRkaW5nUmlnaHQnXG5dXG5cblxuZXhwb3J0IGNvbnN0IG5vb3BZYU1ldHJpa2EgPSAoZ29hbDogc3RyaW5nKSA9PiBjb25zb2xlLmxvZyhgTm9vcCBZYU1la3Rpa2EgcmVhY2ggZ29hbDogJHtnb2FsfWApXG5leHBvcnQgY29uc3Qgbm9vcEFkRm94ID0gKGdvYWw6IHN0cmluZykgPT4gY29uc29sZS5sb2coYE5vb3AgQWRGb3ggcmVhY2ggZ29hbDogJHtnb2FsfWApXG4iLCJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgeyBpc0pzb25TYW1lLCBwaWNrIH0gZnJvbSAnQGFkc3RvcmUvdXRpbHMnXG5pbXBvcnQgeyBub29wQWRGb3gsIG5vb3BZYU1ldHJpa2EgfSBmcm9tIFwic3JjL2hlbHBlcnMvY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBjb25zdCB1c2VNZXRyaWNzID0gKHN0YXRlOiB1bmtub3duLCBsYXllck5hbWUgPSAncm9vdCcpID0+IHtcbiAgY29uc3Qgc2F2ZU1ldHJpY3MgPSB1c2VSZWYoKVxuICBjb25zdCB5YVJlYWNoR29hbCA9IHN0YXRlLnlhUmVhY2hHb2FsIHx8IG5vb3BZYU1ldHJpa2FcbiAgY29uc3QgYWRmb3hSZWFjaEdvYWwgPSBzdGF0ZS5hZGZveFJlYWNoR29hbCB8fCBub29wQWRGb3hcbiAgY29uc3QgbWV0cmljcyA9IHBpY2soc3RhdGVbbGF5ZXJOYW1lXSwgJ3lhU2hvdycsICd5YUNsaWNrJywgJ2FkZm94U2hvdycsICdhZGZveENsaWNrJylcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNKc29uU2FtZShzYXZlTWV0cmljcy5jdXJyZW50LCBtZXRyaWNzKSkge1xuICAgICAgaWYgKG1ldHJpY3MueWFTaG93KSB7XG4gICAgICAgIHlhUmVhY2hHb2FsKG1ldHJpY3MueWFTaG93KVxuICAgICAgfVxuICAgICAgaWYgKG1ldHJpY3MueWFTaG93KSB7XG4gICAgICAgIGFkZm94UmVhY2hHb2FsKG1ldHJpY3MuYWRmb3hTaG93KVxuICAgICAgfVxuICAgIH1cbiAgICBzYXZlTWV0cmljcy5jdXJyZW50ID0gbWV0cmljc1xuICB9LCBbbWV0cmljc10pXG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBpZiAobWV0cmljcy55YUNsaWNrKSB7XG4gICAgICB5YVJlYWNoR29hbChtZXRyaWNzLnlhQ2xpY2spXG4gICAgfVxuICAgIGlmIChtZXRyaWNzLmFkZm94Q2xpY2spIHtcbiAgICAgIGFkZm94UmVhY2hHb2FsKG1ldHJpY3MuYWRmb3hDbGljaylcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IGluamVjdExpbmssIGl0ZXJhdG9yIH0gZnJvbSBcIkBhZHN0b3JlL3V0aWxzXCI7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8gfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiOyAvLyBodHRwczovL2dpdGh1Yi5jb20vRG93bmxvYWQvcHJlYWN0LWhlbG1ldC9pc3N1ZXMvMzRcblxuZXhwb3J0IGNvbnN0IHVzZUV4dHJhY3RGb250cyA9IChzdGF0ZTogdW5rbm93bikgPT4ge1xuICBjb25zdCBmb250cyA9IG5ldyBTZXQoW10pXG5cbiAgaXRlcmF0b3Ioc3RhdGUsIChrZXksIHZhbHVlKSA9PiB7XG4gICAgaWYgKGtleSA9PT0gJ2ZvbnRGYW1pbHknKSB7XG4gICAgICBmb250cy5hZGQodmFsdWUpXG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlXG4gIH0pXG5cbiAgY29uc3QgZm9udExpbmtzID0gdXNlTWVtbygoKSA9PiBBcnJheS5mcm9tKGZvbnRzLnZhbHVlcygpKS5tYXAoZm9udCA9PiAoe1xuICAgIHJlbDogJ3N0eWxlc2hlZXQnLFxuICAgIGhyZWY6IGBodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9JHtmb250fTozMDAsNDAwLDUwMCw3MDAmZGlzcGxheT1zd2FwYFxuICB9KSksIFtmb250c10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBmb250TGlua3MuZm9yRWFjaCgobGluaykgPT4gaW5qZWN0TGluayhsaW5rKSlcbiAgfSwgW2ZvbnRMaW5rc10pXG59XG4iLCJpbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgRkMsIHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlR2lmdE9wZW4gfSBmcm9tICdzcmMvaG9va3MvdXNlR2lmdE9wZW4nXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdzcmMvaGVscGVycy9yZW5kZXInXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlR2V0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VDb250YWluZXJEZXZpY2UgfSBmcm9tICdzcmMvaG9va3MvdXNlQ29udGFpbmVyRGV2aWNlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IERpc3BsYXlUZXh0IGZyb20gJ3NyYy9jb21wb25lbnRzL0Rpc3BsYXlUZXh0J1xuaW1wb3J0IHsgdXNlVG9nZ2xlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVRvZ2dsZSdcbmltcG9ydCBDbG9zZUljb24gZnJvbSAnc3JjL2NvbXBvbmVudHMvQ2xvc2VJY29uJ1xuaW1wb3J0IEdpZnRJY29uIGZyb20gJ3NyYy9jb21wb25lbnRzL0dpZnRJY29uJ1xuaW1wb3J0IHsgdXNlR2lmdFJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3Byb21vcy91c2VHaWZ0UnVsZXMnXG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQgeyB1c2VNZXRyaWNzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZU1ldHJpY3MnXG5pbXBvcnQgeyB1c2VFeHRyYWN0Rm9udHMgfSBmcm9tICdzcmMvaG9va3MvdXNlRXh0cmFjdEZvbnRzJ1xuaW1wb3J0IHsgc2V0IH0gZnJvbSBcIkBhZHN0b3JlL3V0aWxzXCI7XG5cbmNvbnN0IFNpbXBsZUdpZnQ6IEZDPFN0YXRlPiA9ICgpID0+IHtcbiAgY29uc3Qgcm9vdFJlZiA9IHVzZVJlZihudWxsKVxuICBjb25zdCBbbGVnYWxJc09wZW4sIHRvZ2dsZUxlZ2FsSXNPcGVuXSA9IHVzZVRvZ2dsZSgpXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlPFN0YXRlPigpXG4gIGNvbnN0IGRldmljZSA9IHVzZUNvbnRhaW5lckRldmljZSh7IHRhcmdldFJlZjogcm9vdFJlZiB9KVxuICBjb25zdCBkZXZpY2VTdGF0ZSA9IHVzZUdldFJ1bGVzKHN0YXRlLCBkZXZpY2UpXG5cbiAgLyoqXG4gICAqINCd0LAg0LzQvtCx0LjQu9C1INC90YPQttC90L4g0YHQvNC10YnRj9GC0Ywg0L/QvtC00LDRgNC+0LpcbiAgICovXG4gIGlmIChkZXZpY2UgPT09ICdtb2JpbGUnKSB7XG4gICAgc2V0KGRldmljZVN0YXRlLCAnY29udGFpbmVyLmxlZnQnLCAtMjE1KVxuICB9XG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhkZXZpY2VTdGF0ZSlcbiAgY29uc3Qgb25DbGljayA9IHVzZU1ldHJpY3MoZGV2aWNlU3RhdGUpXG4gIGNvbnN0IHsgaXNPcGVuLCBvblRvZ2dsZSB9ID0gdXNlR2lmdE9wZW4oZGV2aWNlU3RhdGU/LmNvbnRhaW5lcj8uZGVsYXkpXG4gIGNvbnN0IHsgaGFzSWNvbiwgaWNvblJ1bGVzLCBib2R5UnVsZXMsIGFycm93UnVsZXMgfSA9IHVzZUdpZnRSdWxlcyhkZXZpY2VTdGF0ZSwge1xuICAgIGZhZGU6IHN0eWxlcy5mYWRlaW4sXG4gICAgcHVsc2U6IHN0eWxlcy5wdWxzZSxcbiAgICB3aWdnbGU6IHN0eWxlcy53aWdnbGUsXG4gICAgZ3JhZGllbnQ6IHN0eWxlcy5ncmFkaWVudFxuICB9KVxuICB1c2VFeHRyYWN0Rm9udHMoZGV2aWNlU3RhdGUpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy5sZWdhbE9wZW5dOiBsZWdhbElzT3BlblxuICAgICAgfSl9XG4gICAgICByZWY9e3Jvb3RSZWZ9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pY29ufSBzdHlsZT17aWNvblJ1bGVzfSBvbkNsaWNrPXtvblRvZ2dsZX0+XG4gICAgICAgIHtoYXNJY29uICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmljb25UYXJnZXR9PlxuICAgICAgICAgICAgPEdpZnRJY29uIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5ib2R5LCB7IFtzdHlsZXMuYm9keU9wZW5dOiBpc09wZW4gfSl9IHN0eWxlPXtib2R5UnVsZXN9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmFycm93fSBzdHlsZT17YXJyb3dSdWxlc30gLz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jbG9zZX0gc3R5bGU9e3J1bGVzLmNsb3NlfSBvbkNsaWNrPXtvblRvZ2dsZX0+XG4gICAgICAgICAgPENsb3NlSWNvbiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250YWluZXJ9IHN0eWxlPXtydWxlcy5jb250YWluZXJ9PlxuICAgICAgICAgIDxhIGhyZWY9e3J1bGVzLnJvb3Q/Lm9mZmVyfSB0YXJnZXQ9J19ibGFuaycgcmVsPSdub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyJyBvbkNsaWNrPXtvbkNsaWNrfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaW5uZXJ9PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICAgICAgICA8RGlzcGxheVRleHQgY2xhc3NOYW1lPXtzdHlsZXMudGV4dH0gc3R5bGU9e3J1bGVzLnRleHR9PlxuICAgICAgICAgICAgICAgIHtydWxlcz8udGV4dD8uY2hpbGRyZW59XG4gICAgICAgICAgICAgIDwvRGlzcGxheVRleHQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5idXR0b24sIHtcbiAgICAgICAgICAgICAgICBbc3R5bGVzLmJ1dHRvbkFuaW1hdGVkXTogcnVsZXMuYnV0dG9uLmlzQW5pbWF0ZWRcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIHN0eWxlPXtydWxlcy5idXR0b259XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtydWxlcy5idXR0b24/LmNoaWxkcmVufVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGVnYWxHYXB9IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbH0gc3R5bGU9e3J1bGVzLmxlZ2FsfT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmxlZ2FsVGV4dH0+XG4gICAgICAgICAgICAgIDxzcGFuPntydWxlcz8ubGVnYWw/LmNoaWxkcmVufTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMubGVnYWxCdXR0b259IG9uQ2xpY2s9e3RvZ2dsZUxlZ2FsSXNPcGVufT5cbiAgICAgICAgICAgICAgICB7bGVnYWxJc09wZW4gPyBydWxlcz8ubGVnYWw/LmJ1dHRvbk9wZW5UZXh0IDogcnVsZXM/LmxlZ2FsPy5idXR0b25IaWRlVGV4dH1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlcig8U2ltcGxlR2lmdCAvPilcbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCBEaXNwbGF5VGV4dCBmcm9tICdzcmMvY29tcG9uZW50cy9EaXNwbGF5VGV4dCdcbmltcG9ydCB7IHVzZU1ldHJpY3MgfSBmcm9tICdzcmMvaG9va3MvdXNlTWV0cmljcydcblxuY29uc3QgQm9udXNDYXJkOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG4gIGNvbnN0IG9uQ2xpY2sgPSB1c2VNZXRyaWNzKHN0YXRlKVxuXG4gIHJldHVybiAoXG4gICAgPGFcbiAgICAgIGhyZWY9e3J1bGVzLnJvb3Q/Lm9mZmVyfVxuICAgICAgdGFyZ2V0PSdfYmxhbmsnXG4gICAgICByZWw9J25vZm9sbG93IG5vb3BlbmVyIG5vcmVmZXJyZXInXG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy52YXJpYW50Ml06IHJ1bGVzLnJvb3Q/LnZhcmlhbnQgPT09ICd2YXJpYW50MidcbiAgICAgIH0pfVxuICAgICAgc3R5bGU9e3J1bGVzLnJvb3R9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYm9keX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGluZX0gc3R5bGU9e3J1bGVzLmxpbmV9IC8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYm9keUlubmVyfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGV4dH0gc3R5bGU9e3J1bGVzLnRleHR9PlxuICAgICAgICAgICAgPERpc3BsYXlUZXh0PntydWxlcy50ZXh0Py5jaGlsZHJlbn08L0Rpc3BsYXlUZXh0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbn0gc3R5bGU9e3J1bGVzLmJ1dHRvbn0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvblRleHR9PntydWxlcy5idXR0b24/LmNoaWxkcmVufTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbH0gc3R5bGU9e3J1bGVzLmxlZ2FsfT5cbiAgICAgICAge3J1bGVzLmxlZ2FsPy5jaGlsZHJlbn1cbiAgICAgIDwvZGl2PlxuICAgIDwvYT5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBCb251c0NhcmRcbiIsImltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyB1c2VSZWYgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUdpZnRPcGVuIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUdpZnRPcGVuJ1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnc3JjL2hlbHBlcnMvcmVuZGVyJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZUdldFJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZURldmljZVN0YXRlJ1xuaW1wb3J0IHsgdXNlQ29udGFpbmVyRGV2aWNlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUNvbnRhaW5lckRldmljZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCBDbG9zZUljb24gZnJvbSAnc3JjL2NvbXBvbmVudHMvQ2xvc2VJY29uJ1xuaW1wb3J0IEdpZnRJY29uIGZyb20gJ3NyYy9jb21wb25lbnRzL0dpZnRJY29uJ1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICdzcmMvU3RhdGVDb250ZXh0J1xuaW1wb3J0IEJvbnVzQ2FyZCBmcm9tICcuL2NvbXBvbmVudHMvQm9udXNDYXJkJ1xuaW1wb3J0IHsgdXNlRXh0cmFjdEZvbnRzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUV4dHJhY3RGb250cydcbmltcG9ydCB7IHVzZUdpZnRSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy9wcm9tb3MvdXNlR2lmdFJ1bGVzJ1xuaW1wb3J0IHsgcGljaywgc2V0IH0gZnJvbSBcIkBhZHN0b3JlL3V0aWxzXCI7XG5cbmNvbnN0IENvbXBsZXhHaWZ0ID0gKCkgPT4ge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IHsgaXNPcGVuLCBvblRvZ2dsZSB9ID0gdXNlR2lmdE9wZW4oKVxuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IGRldmljZSA9IHVzZUNvbnRhaW5lckRldmljZSh7IHRhcmdldFJlZjogcm9vdFJlZiB9KVxuICBjb25zdCBkZXZpY2VTdGF0ZSA9IHVzZUdldFJ1bGVzKHN0YXRlLCBkZXZpY2UpXG5cbiAgLyoqXG4gICAqINCd0LAg0LzQvtCx0LjQu9C1INC90YPQttC90L4g0YHQvNC10YnRj9GC0Ywg0L/QvtC00LDRgNC+0LpcbiAgICovXG4gIGlmIChkZXZpY2UgPT09ICdtb2JpbGUnKSB7XG4gICAgc2V0KGRldmljZVN0YXRlLCAnY29udGFpbmVyLmxlZnQnLCAtMjE1KVxuICB9XG5cbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKGRldmljZVN0YXRlKVxuICB1c2VFeHRyYWN0Rm9udHMoZGV2aWNlU3RhdGUpXG4gIGNvbnN0IHsgaGFzSWNvbiwgaWNvblJ1bGVzLCBib2R5UnVsZXMsIGFycm93UnVsZXMgfSA9IHVzZUdpZnRSdWxlcyhkZXZpY2VTdGF0ZSwge1xuICAgIGZhZGU6IHN0eWxlcy5mYWRlaW4sXG4gICAgcHVsc2U6IHN0eWxlcy5wdWxzZSxcbiAgICB3aWdnbGU6IHN0eWxlcy53aWdnbGUsXG4gICAgZ3JhZGllbnQ6IHN0eWxlcy5ncmFkaWVudFxuICB9KVxuICBjb25zdCBoYXNUaXRsZUljb24gPSBydWxlcz8udGl0bGU/Lmhhc0ljb25cblxuICByZXR1cm4gKFxuICAgIDxkaXYgcmVmPXtyb290UmVmfSBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgIFtzdHlsZXMuZGVza3RvcF06IGRldmljZSA9PT0gJ2Rlc2t0b3AnLFxuICAgICAgW3N0eWxlcy5sYXB0b3BdOiBkZXZpY2UgPT09ICdsYXB0b3AnLFxuICAgICAgW3N0eWxlcy50YWJsZXRdOiBkZXZpY2UgPT09ICd0YWJsZXQnLFxuICAgIH0pfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaWNvbn0gc3R5bGU9e2ljb25SdWxlc30gb25DbGljaz17b25Ub2dnbGV9PlxuICAgICAgICB7aGFzSWNvbiAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pY29uVGFyZ2V0fT5cbiAgICAgICAgICAgIDxHaWZ0SWNvbiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMuYm9keSwge1xuICAgICAgICAgIFtzdHlsZXMuYm9keU9wZW5dOiBpc09wZW5cbiAgICAgICAgfSl9XG4gICAgICAgIHN0eWxlPXtib2R5UnVsZXN9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYXJyb3d9IHN0eWxlPXthcnJvd1J1bGVzfSAvPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRhaW5lcn0gc3R5bGU9e3J1bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jbG9zZX0gc3R5bGU9e3J1bGVzLmNsb3NlfSBvbkNsaWNrPXtvblRvZ2dsZX0+XG4gICAgICAgICAgICA8Q2xvc2VJY29uIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5wcm9tb3Rpb259IHN0eWxlPXtydWxlcy5wcm9tb3Rpb259PlxuICAgICAgICAgICAge3J1bGVzLnByb21vdGlvbj8uY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5oZWFkfT5cbiAgICAgICAgICAgIHtoYXNUaXRsZUljb24gJiYgKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmhlYWRJY29ufSBzdHlsZT17cGljayhydWxlcy50aXRsZSwgJ2NvbG9yJyl9PlxuICAgICAgICAgICAgICAgIDxHaWZ0SWNvbiAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmhlYWRUaXRsZX0gc3R5bGU9e3J1bGVzLnRpdGxlfT57cnVsZXMudGl0bGU/LmNoaWxkcmVufTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pbm5lcn0+XG4gICAgICAgICAgICB7KHJ1bGVzLmNoaWxkcmVuIHx8IFtdKS5tYXAoY2hpbGQgPT4gKFxuICAgICAgICAgICAgICA8U3RhdGVDb250ZXh0IHZhbHVlPXtjaGlsZH0+XG4gICAgICAgICAgICAgICAgPEJvbnVzQ2FyZCAvPlxuICAgICAgICAgICAgICA8L1N0YXRlQ29udGV4dD5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlcig8Q29tcGxleEdpZnQgLz4pXG5cbi8vIGltcG9ydCB7IEVtaXR0ZXJUeXBlIH0gZnJvbSBcInNyY1wiO1xuLy8gaW1wb3J0IHsgaXNFbXB0eVZhbHVlLCBpc1ZhbHVlIH0gZnJvbSBcIkBhZHN0b3JlL3V0aWxzXCI7XG4vL1xuXG4vL1xuLy8gZXhwb3J0IGRlZmF1bHQgKGVtaXR0ZXI6IEVtaXR0ZXJUeXBlKSA9PiB7XG4vLyAgIGVtaXR0ZXIub24oJ3JlbmRlck5vZGUnLCAoeyBydWxlLCBsYXllciB9KSA9PiB7XG4vLyAgICAgaWYgKCckYW5pbWF0aW9ucycgaW4gcnVsZSkge1xuLy8gICAgICAgY29uc3QgYWxsQW5pbWF0aW9ucyA9IHJ1bGUuJGFuaW1hdGlvbnNcbi8vICAgICAgICAgLm1hcCgoYW5pbWF0aW9uOiBrZXlvZiB0eXBlb2YgYW5pbWF0aW9uc01hcCkgPT4gYW5pbWF0aW9uc01hcFthbmltYXRpb25dKVxuLy8gICAgICAgICAuam9pbignLCAnKVxuLy9cbi8vICAgICAgIGNvbnN0IGJhY2tncm91bmRTdHlsZXMgPVxuLy8gICAgICAgICBpc1ZhbHVlKHJ1bGUuJGdyYWRpZW50Q29sb3IpICYmIHJ1bGUuJGFuaW1hdGlvbnMuaW5jbHVkZXMoJ2dyYWRpZW50Jylcbi8vICAgICAgICAgICA/IHtcbi8vICAgICAgICAgICAgIGJhY2tncm91bmQ6IGBsaW5lYXItZ3JhZGllbnQoLTkwZGVnLCAke3J1bGUuYmFja2dyb3VuZENvbG9yfSAwJSwgJHtydWxlLiRncmFkaWVudENvbG9yfSAxMDAlKWAsXG4vLyAgICAgICAgICAgICBiYWNrZ3JvdW5kU2l6ZTogJzQwMCUgNDAwJSdcbi8vICAgICAgICAgICB9XG4vLyAgICAgICAgICAgOiB7fVxuLy9cbi8vICAgICAgIGVtaXR0ZXIuZW1pdCgncnVuUmVuZGVyJywge1xuLy8gICAgICAgICBpY29uOiB7XG4vLyAgICAgICAgICAgYW5pbWF0aW9uOiBhbGxBbmltYXRpb25zLFxuLy8gICAgICAgICAgIC4uLmJhY2tncm91bmRTdHlsZXNcbi8vICAgICAgICAgfVxuLy8gICAgICAgfSlcbi8vICAgICB9XG4vL1xuLy8gICAgIGlmIChsYXllci5sYXllciA9PT0gJ2ljb24nICYmICFpc0VtcHR5VmFsdWUocnVsZS5oYXNJY29uKSkge1xuLy8gICAgICAgZW1pdHRlci5lbWl0KCdydW5SZW5kZXInLCB7XG4vLyAgICAgICAgIGljb25UYXJnZXQ6IHtcbi8vICAgICAgICAgICBkaXNwbGF5OiBydWxlLmhhc0ljb24gPyAnZmxleCcgOiAnbm9uZSdcbi8vICAgICAgICAgfVxuLy8gICAgICAgfSlcbi8vICAgICB9XG4vL1xuLy8gICAgIGlmIChsYXllci5sYXllciA9PT0gJ3RpdGxlJykge1xuLy8gICAgICAgZW1pdHRlci5lbWl0KCdydW5SZW5kZXInLCB7XG4vLyAgICAgICAgIGhlYWRlckljb246IHtcbi8vICAgICAgICAgICBkaXNwbGF5OiBydWxlLmhhc0ljb24gPyAnYmxvY2snIDogJ25vbmUnXG4vLyAgICAgICAgIH1cbi8vICAgICAgIH0pXG4vLyAgICAgfVxuLy9cbi8vICAgICBpZiAobGF5ZXIubGF5ZXIgPT09ICdjb250YWluZXInKSB7XG4vLyAgICAgICBlbWl0dGVyLmVtaXQoJ3J1blJlbmRlcicsIHtcbi8vICAgICAgICAgYm9keToge1xuLy8gICAgICAgICAgICRkZWxheTogcnVsZS5kZWxheSxcbi8vICAgICAgICAgICBsZWZ0OiBydWxlLmxlZnRcbi8vICAgICAgICAgfSxcbi8vICAgICAgICAgYXJyb3c6IHtcbi8vICAgICAgICAgICBsZWZ0OiBgJHsrKHJ1bGUubGVmdCB8fCAwKSAqIC0xICsgOH1gLFxuLy8gICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogcnVsZS5iYWNrZ3JvdW5kQ29sb3IsXG4vLyAgICAgICAgICAgYm9yZGVyVG9wV2lkdGg6IHJ1bGUuYm9yZGVyV2lkdGgsXG4vLyAgICAgICAgICAgYm9yZGVyVG9wQ29sb3I6IHJ1bGUuYm9yZGVyQ29sb3IsXG4vLyAgICAgICAgICAgYm9yZGVyVG9wU3R5bGU6ICdzb2xpZCcsXG4vLyAgICAgICAgICAgYm9yZGVyTGVmdFdpZHRoOiBydWxlLmJvcmRlcldpZHRoLFxuLy8gICAgICAgICAgIGJvcmRlckxlZnRDb2xvcjogcnVsZS5ib3JkZXJDb2xvcixcbi8vICAgICAgICAgICBib3JkZXJMZWZ0U3R5bGU6ICdzb2xpZCdcbi8vICAgICAgICAgfVxuLy8gICAgICAgfSlcbi8vICAgICB9XG4vLyAgIH0pXG4vLyB9XG4iLCJleHBvcnQgY29uc3Qgc3dpdGNoVGV4dEFsaWduVG9GbGV4ID0gKHRleHRBbGlnbj86IHN0cmluZykgPT5cbiAgdGV4dEFsaWduID8geyBsZWZ0OiAnZmxleC1zdGFydCcsIGNlbnRlcjogJ2NlbnRlcicsIHJpZ2h0OiAnZmxleC1lbmQnIH1bdGV4dEFsaWduXSA6IHRleHRBbGlnblxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgRGlzcGxheVRleHQgZnJvbSAnc3JjL2NvbXBvbmVudHMvRGlzcGxheVRleHQnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5cbmNvbnN0IExpbmU6IEZDID0gKCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucm9vdH0gc3R5bGU9e3J1bGVzLnJvb3R9PlxuICAgICAgPERpc3BsYXlUZXh0PntydWxlcz8ucm9vdD8uY2hpbGRyZW59PC9EaXNwbGF5VGV4dD5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBMaW5lXG4iLCJpbXBvcnQgeyBGQywgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyBzZXQgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gJ3NyYy9oZWxwZXJzL3JlbmRlcidcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDb250YWluZXJEZXZpY2UgfSBmcm9tICdzcmMvaG9va3MvdXNlQ29udGFpbmVyRGV2aWNlJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZUdldFJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZURldmljZVN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICdzcmMvU3RhdGVDb250ZXh0J1xuaW1wb3J0IHsgc3dpdGNoVGV4dEFsaWduVG9GbGV4IH0gZnJvbSBcInNyYy9oZWxwZXJzL3N3aXRjaFRleHRBbGlnblRvRmxleFwiO1xuaW1wb3J0IExpbmUgZnJvbSAnLi9jb21wb25lbnRzL2xpbmUnXG5pbXBvcnQgeyB1c2VNZXRyaWNzIH0gZnJvbSBcInNyYy9ob29rcy91c2VNZXRyaWNzXCI7XG5cbmNvbnN0IFNpbXBsZVBvcHVwOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgcm9vdFJlZiA9IHVzZVJlZihudWxsKVxuICBjb25zdCBkZXZpY2UgPSB1c2VDb250YWluZXJEZXZpY2UoeyB0YXJnZXRSZWY6IHJvb3RSZWYgfSlcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBkZXZpY2VTdGF0ZSA9IHVzZUdldFJ1bGVzKHN0YXRlLCBkZXZpY2UpXG4gIGNvbnN0IG9uQ2xpY2sgPSB1c2VNZXRyaWNzKGRldmljZVN0YXRlKVxuXG4gIHNldChkZXZpY2VTdGF0ZSwgJ2J1dHRvbi5wZXJjZW50X3dpZHRoJywgZGV2aWNlU3RhdGU/LmJ1dHRvbj8ud2lkdGgpXG4gIHNldChkZXZpY2VTdGF0ZSwgJ2xlZ2FsLnBlcmNlbnRfd2lkdGgnLCBkZXZpY2VTdGF0ZT8ubGVnYWw/LndpZHRoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoZGV2aWNlU3RhdGUpXG5cblxuICBjb25zdCBib2R5UnVsZXMgPSB7XG4gICAgYWxpZ25JdGVtczogc3dpdGNoVGV4dEFsaWduVG9GbGV4KHJ1bGVzLnJvb3Q/LmFsaWduKVxuICB9XG5cbiAgY29uc3QgYnV0dG9uUnVsZXMgPSB7XG4gICAgLi4ucnVsZXM/LmJ1dHRvbixcbiAgICBqdXN0aWZ5Q29udGVudDogc3dpdGNoVGV4dEFsaWduVG9GbGV4KHJ1bGVzLnJvb3Q/LnRleHRBbGlnbilcbiAgfVxuXG4gIGNvbnN0IGxlZ2FsUnVsZXMgPSB7XG4gICAgLi4ucnVsZXM/LmxlZ2FsLFxuICAgIGp1c3RpZnlDb250ZW50OiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8udGV4dEFsaWduKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8YVxuICAgICAgcmVmPXtyb290UmVmfVxuICAgICAgaHJlZj17cnVsZXMucm9vdD8ub2ZmZXJ9XG4gICAgICB0YXJnZXQ9J19ibGFuaydcbiAgICAgIHJlbD1cIm5vZm9sbG93IG5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMuZGVza3RvcF06IGRldmljZSA9PT0gJ2Rlc2t0b3AnLFxuICAgICAgICBbc3R5bGVzLnRhYmxldF06IGRldmljZSA9PT0gJ3RhYmxldCcsXG4gICAgICAgIFtzdHlsZXMubGFwdG9wXTogZGV2aWNlID09PSAnbGFwdG9wJ1xuICAgICAgfSl9XG4gICAgICBzdHlsZT17cnVsZXMucm9vdH1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ib2R5fSBzdHlsZT17Ym9keVJ1bGVzfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30vPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRleHR9PlxuICAgICAgICAgIHsocnVsZXM/LmNoaWxkcmVuIHx8IFtdKS5tYXAoZWwgPT4gKFxuICAgICAgICAgICAgPFN0YXRlQ29udGV4dCB2YWx1ZT17ZWx9PlxuICAgICAgICAgICAgICA8TGluZSAvPlxuICAgICAgICAgICAgPC9TdGF0ZUNvbnRleHQ+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbn0gc3R5bGU9e2J1dHRvblJ1bGVzfT5cbiAgICAgICAgICB7YnV0dG9uUnVsZXM/LmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbH0gc3R5bGU9e2xlZ2FsUnVsZXN9PlxuICAgICAgICAgIHtsZWdhbFJ1bGVzPy5jaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2E+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyKDxTaW1wbGVQb3B1cCAvPilcbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyBvbWl0LCBwaWNrIH0gZnJvbSBcIkBhZHN0b3JlL3V0aWxzXCI7XG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCBEaXNwbGF5VGV4dCBmcm9tICdzcmMvY29tcG9uZW50cy9EaXNwbGF5VGV4dCdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCB7IHNwYWNpbmdPcHRpb25zIH0gZnJvbSBcInNyYy9oZWxwZXJzL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgdXNlTWV0cmljcyB9IGZyb20gXCJzcmMvaG9va3MvdXNlTWV0cmljc1wiO1xuXG5jb25zdCBCb251czogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuICBjb25zdCBkZXZpY2UgPSBzdGF0ZT8uZGV2aWNlIHx8ICdkZXNrdG9wJ1xuICBjb25zdCBvbkNsaWNrID0gdXNlTWV0cmljcyhzdGF0ZSlcblxuXG4gIHJldHVybiAoXG4gICAgPGFcbiAgICAgIGhyZWY9e3J1bGVzLnJvb3Q/Lm9mZmVyfVxuICAgICAgdGFyZ2V0PSdfYmxhbmsnXG4gICAgICByZWw9XCJub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgICBbc3R5bGVzLmRlc2t0b3BdOiBkZXZpY2UgPT09ICdkZXNrdG9wJ1xuICAgICAgfSl9XG4gICAgICBzdHlsZT17b21pdChydWxlcy5yb290LCAuLi5zcGFjaW5nT3B0aW9ucyl9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyfSBzdHlsZT17cnVsZXMuaGVhZGVyfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250YWluZXJ9IHN0eWxlPXtwaWNrKHJ1bGVzLnJvb3QsIC4uLnNwYWNpbmdPcHRpb25zKX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYm9keX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfT48L2Rpdj5cbiAgICAgICAgICA8RGlzcGxheVRleHQgY2xhc3NOYW1lPXtzdHlsZXMudGV4dH0gc3R5bGU9e3J1bGVzLnRleHR9PlxuICAgICAgICAgICAge3J1bGVzLnRleHQ/LmNoaWxkcmVufVxuICAgICAgICAgIDwvRGlzcGxheVRleHQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9ufSBzdHlsZT17cnVsZXMuYnV0dG9ufT5cbiAgICAgICAgICAgIHtydWxlcy5idXR0b24/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGVnYWx9IHN0eWxlPXtydWxlcy5sZWdhbH0+XG4gICAgICAgICAgICB7cnVsZXMubGVnYWw/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvYT5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBCb251c1xuIiwiaW1wb3J0IHsgRkMsIHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnc3JjL2hlbHBlcnMvcmVuZGVyJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUNvbnRhaW5lckRldmljZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDb250YWluZXJEZXZpY2UnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlR2V0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJ3NyYy9TdGF0ZUNvbnRleHQnXG5pbXBvcnQgQm9udXMgZnJvbSAnLi9jb21wb25lbnRzL0JvbnVzJ1xuaW1wb3J0IHsgdXNlRXh0cmFjdEZvbnRzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUV4dHJhY3RGb250cydcblxuY29uc3QgU2ltcGxlUG9wdXA6IEZDID0gKCkgPT4ge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IGRldmljZSA9IHVzZUNvbnRhaW5lckRldmljZSh7IHRhcmdldFJlZjogcm9vdFJlZiB9KVxuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IGRldmljZVN0YXRlID0gdXNlR2V0UnVsZXMoc3RhdGUsIGRldmljZSlcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKGRldmljZVN0YXRlKVxuICB1c2VFeHRyYWN0Rm9udHMoZGV2aWNlU3RhdGUpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e3Jvb3RSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy5kZXNrdG9wXTogZGV2aWNlID09PSAnZGVza3RvcCdcbiAgICAgIH0pfVxuICAgICAgc3R5bGU9e3J1bGVzLnJvb3R9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50aXRsZX0gc3R5bGU9e3J1bGVzLnRpdGxlfT5cbiAgICAgICAge3J1bGVzLnRpdGxlPy5jaGlsZHJlbn1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy53cmFwcGVyfT5cbiAgICAgICAgeyhydWxlcy5jaGlsZHJlbiB8fCBbXSkubWFwKGNoaWxkID0+IChcbiAgICAgICAgICA8U3RhdGVDb250ZXh0IHZhbHVlPXt7IC4uLmNoaWxkLCBkZXZpY2UgfX0+XG4gICAgICAgICAgICA8Qm9udXMgLz5cbiAgICAgICAgICA8L1N0YXRlQ29udGV4dD5cbiAgICAgICAgKSl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCByZW5kZXIoPFNpbXBsZVBvcHVwIC8+KVxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IERpc3BsYXlUZXh0IGZyb20gJ3NyYy9jb21wb25lbnRzL0Rpc3BsYXlUZXh0J1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuXG5jb25zdCBNYXRjaDogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuICBjb25zdCBkZXZpY2UgPSBzdGF0ZT8uZGV2aWNlIHx8ICdkZXNrdG9wJ1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgIFtzdHlsZXMuZGVza3RvcF06IGRldmljZSA9PT0gJ2Rlc2t0b3AnXG4gICAgfSl9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWZ0fT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtc30+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubG9nb30gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYm9keX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWFndWV9IHN0eWxlPXtydWxlcy5sZWFndWV9PntydWxlcy5sZWFndWU/LmNoaWxkcmVufTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubmFtZX0gc3R5bGU9e3J1bGVzLnRlYW1zfT57cnVsZXMudGVhbXM/LnRlYW1BfSDigJQge3J1bGVzLnRlYW1zPy50ZWFtQn08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucmlnaHR9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW19PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbUxvZ299IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtTmFtZX0gc3R5bGU9e3J1bGVzLnRlYW1zfT57cnVsZXMudGVhbXM/LnRlYW1BfTwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZH0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vZGRMYWJlbH0gc3R5bGU9e3J1bGVzLm9kZExhYmVsfT57cnVsZXMub2RkTGFiZWw/LmNoaWxkcmVufTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkVmFsdWV9IHN0eWxlPXtydWxlcy5vZGRWYWx1ZX0+e3J1bGVzLm9kZFZhbHVlPy5jaGlsZHJlbn08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1Mb2dvfS8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtTmFtZX0gc3R5bGU9e3J1bGVzLnRlYW1zfT57cnVsZXMudGVhbXM/LnRlYW1CfTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IE1hdGNoXG4iLCJpbXBvcnQgeyBGQywgdXNlUmVmIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyBzZXQgfSBmcm9tICdAYWRzdG9yZS91dGlscydcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gJ3NyYy9oZWxwZXJzL3JlbmRlcidcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDb250YWluZXJEZXZpY2UgfSBmcm9tICdzcmMvaG9va3MvdXNlQ29udGFpbmVyRGV2aWNlJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZUdldFJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZURldmljZVN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICdzcmMvU3RhdGVDb250ZXh0J1xuaW1wb3J0IERpc3BsYXlUZXh0IGZyb20gJ3NyYy9jb21wb25lbnRzL0Rpc3BsYXlUZXh0J1xuaW1wb3J0IHsgc3dpdGNoVGV4dEFsaWduVG9GbGV4IH0gZnJvbSAnc3JjL2hlbHBlcnMvc3dpdGNoVGV4dEFsaWduVG9GbGV4J1xuaW1wb3J0IE1hdGNoIGZyb20gJy4vY29tcG9uZW50cy9NYXRjaCdcbmltcG9ydCB7IHVzZU1ldHJpY3MgfSBmcm9tICdzcmMvaG9va3MvdXNlTWV0cmljcydcblxuY29uc3QgU2ltcGxlUG9wdXA6IEZDID0gKCkgPT4ge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IGRldmljZSA9IHVzZUNvbnRhaW5lckRldmljZSh7IHRhcmdldFJlZjogcm9vdFJlZiB9KVxuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IGRldmljZVN0YXRlID0gdXNlR2V0UnVsZXMoc3RhdGUsIGRldmljZSlcbiAgc2V0KGRldmljZVN0YXRlLCAnYnV0dG9uV3JhcHBlci5wZXJjZW50X3dpZHRoJywgZGV2aWNlU3RhdGU/LmJ1dHRvbldyYXBwZXI/LndpZHRoKVxuICBzZXQoZGV2aWNlU3RhdGUsICdsZWdhbC5wZXJjZW50X3dpZHRoJywgZGV2aWNlU3RhdGU/LmxlZ2FsPy53aWR0aClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKGRldmljZVN0YXRlKVxuICBjb25zdCBvbkNsaWNrID0gdXNlTWV0cmljcyhkZXZpY2VTdGF0ZSlcblxuICBjb25zdCBib2R5UnVsZXMgPSB7XG4gICAgLi4ucnVsZXMucm9vdCxcbiAgICBhbGlnbkl0ZW1zOiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8uYWxpZ24pXG4gIH1cblxuICBjb25zdCBjb250ZW50UnVsZXMgPSB7XG4gICAgLi4ucnVsZXMuY29udGVudCxcbiAgICBhbGlnbkl0ZW1zOiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8uYWxpZ24pXG4gIH1cblxuICBjb25zdCB0ZXh0UnVsZXMgPSB7XG4gICAgLi4ucnVsZXMudGV4dCxcbiAgICB0ZXh0QWxpZ246IHJ1bGVzLnJvb3Q/LmFsaWduXG4gIH1cblxuICBjb25zdCBidXR0b25SdWxlcyA9IHtcbiAgICAuLi5ydWxlcz8uYnV0dG9uLFxuICAgIGp1c3RpZnlDb250ZW50OiBzd2l0Y2hUZXh0QWxpZ25Ub0ZsZXgocnVsZXMucm9vdD8udGV4dEFsaWduKVxuICB9XG5cbiAgY29uc3QgbGVnYWxSdWxlcyA9IHtcbiAgICAuLi5ydWxlcz8ubGVnYWwsXG4gICAganVzdGlmeUNvbnRlbnQ6IHN3aXRjaFRleHRBbGlnblRvRmxleChydWxlcy5yb290Py50ZXh0QWxpZ24pXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxhXG4gICAgICByZWY9e3Jvb3RSZWZ9XG4gICAgICBocmVmPXtydWxlcy5yb290Py5vZmZlcn1cbiAgICAgIHRhcmdldD0nX2JsYW5rJ1xuICAgICAgcmVsPSdub2ZvbGxvdyBub29wZW5lciBub3JlZmVycmVyJ1xuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5yb290LCB7XG4gICAgICAgIFtzdHlsZXMuZGVza3RvcF06IGRldmljZSA9PT0gJ2Rlc2t0b3AnLFxuICAgICAgICBbc3R5bGVzLmxhcHRvcF06IGRldmljZSA9PT0gJ2xhcHRvcCcsXG4gICAgICAgIFtzdHlsZXMudGFibGV0XTogZGV2aWNlID09PSAndGFibGV0J1xuICAgICAgfSl9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYm9keX0gc3R5bGU9e2JvZHlSdWxlc30+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZH0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50aXRsZX0gc3R5bGU9e3J1bGVzLnRpdGxlfT5cbiAgICAgICAgICAgIHtydWxlcy50aXRsZT8uY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMud3JhcHBlcn0gc3R5bGU9e2NvbnRlbnRSdWxlc30+XG4gICAgICAgICAgeyhydWxlcy5jaGlsZHJlbiB8fCBbXSkubWFwKGNoaWxkID0+IChcbiAgICAgICAgICAgIDxTdGF0ZUNvbnRleHQgdmFsdWU9e3sgLi4uY2hpbGQsIGRldmljZSB9fT5cbiAgICAgICAgICAgICAgPE1hdGNoIC8+XG4gICAgICAgICAgICA8L1N0YXRlQ29udGV4dD5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPERpc3BsYXlUZXh0IGNsYXNzTmFtZT17c3R5bGVzLnRleHR9IHN0eWxlPXt0ZXh0UnVsZXN9PlxuICAgICAgICAgIHtydWxlcy50ZXh0Py5jaGlsZHJlbn1cbiAgICAgICAgPC9EaXNwbGF5VGV4dD5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b259IHN0eWxlPXtydWxlcy5idXR0b25XcmFwcGVyfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvbkhlYWR9IHN0eWxlPXtydWxlcy5idXR0b25IZWFkfT5cbiAgICAgICAgICAgIHtydWxlcy5idXR0b25IZWFkPy5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJ1dHRvblRhcmdldH0gc3R5bGU9e2J1dHRvblJ1bGVzfT5cbiAgICAgICAgICAgIHtydWxlcy5idXR0b24/LmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbH0gc3R5bGU9e2xlZ2FsUnVsZXN9PlxuICAgICAgICAgIHtydWxlcy5sZWdhbD8uY2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9hPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlbmRlcig8U2ltcGxlUG9wdXAgLz4pXG4iLCJpbXBvcnQgeyBGQyB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCB7IHVzZUN1cnJlbnRTdGF0ZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDdXJyZW50U3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgeyB1c2VUb2dnbGUgfSBmcm9tICdzcmMvaG9va3MvdXNlVG9nZ2xlJ1xuaW1wb3J0IHsgdXNlTWV0cmljcyB9IGZyb20gJ3NyYy9ob29rcy91c2VNZXRyaWNzJ1xuXG5jb25zdCBCb251czogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKHN0YXRlKVxuICBjb25zdCBbaXNPcGVuLCB0b2dnbGVJc09wZW5dID0gdXNlVG9nZ2xlKClcbiAgY29uc3Qgb25DbGljayA9IHVzZU1ldHJpY3Moc3RhdGUpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnJvb3R9IHN0eWxlPXtydWxlcy5yb290fT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYmFja2dyb3VuZH0gc3R5bGU9e3J1bGVzLmJhY2tncm91bmR9IC8+XG4gICAgICA8YVxuICAgICAgICBocmVmPXtydWxlcy5yb290Py5vZmZlcn1cbiAgICAgICAgdGFyZ2V0PSdfYmxhbmsnXG4gICAgICAgIHJlbD0nbm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlcidcbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuYm9keX1cbiAgICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgID5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnJvd0ZpcnN0fSBzdHlsZT17cnVsZXMucm93Rmlyc3R9PlxuICAgICAgICAgICAge3J1bGVzLnJvd0ZpcnN0Py5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnJvd1NlY29uZH0gc3R5bGU9e3J1bGVzLnJvd1NlY29uZH0+XG4gICAgICAgICAgICB7cnVsZXMucm93U2Vjb25kPy5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvb2ttYWtlcn0+d2lubGluZTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b259IHN0eWxlPXtydWxlcy5idXR0b259PlxuICAgICAgICAgIHtydWxlcy5idXR0b24/LmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvYT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHN0eWxlcy5sZWdhbCwge1xuICAgICAgICAgIFtzdHlsZXMubGVnYWxPcGVuXTogaXNPcGVuXG4gICAgICAgIH0pfVxuICAgICAgICBzdHlsZT17cnVsZXMubGVnYWxJbmZvfVxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbFRleHR9PlxuICAgICAgICAgIDxzcGFuPntydWxlcy5sZWdhbEluZm8/LmNoaWxkcmVufTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5sZWdhbEJ1dHRvbn0gc3R5bGU9e3J1bGVzLmxlZ2FsSW5mb0J1dHRvbn0gb25DbGljaz17dG9nZ2xlSXNPcGVufT5cbiAgICAgICAgICAgIHtpc09wZW4gPyBydWxlcy5sZWdhbEluZm9CdXR0b24/Lm9wZW5UZXh0IDogcnVsZXMubGVnYWxJbmZvQnV0dG9uPy5jbG9zZVRleHR9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBCb251c1xuIiwiaW1wb3J0IHsgRkMsIHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlR2V0UnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlRGV2aWNlU3RhdGUnXG5pbXBvcnQgeyB1c2VQYXJzZVJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZVBhcnNlUnVsZXMnXG5pbXBvcnQgU3RhdGVDb250ZXh0IGZyb20gJ3NyYy9TdGF0ZUNvbnRleHQnXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdzcmMvaGVscGVycy9yZW5kZXInXG5pbXBvcnQgQm9udXMgZnJvbSAnLi9jb21wb25lbnRzL0JvbnVzJ1xuXG5jb25zdCBCb251c0NhcmQ6IEZDID0gKCkgPT4ge1xuICBjb25zdCByb290UmVmID0gdXNlUmVmKG51bGwpXG4gIGNvbnN0IHN0YXRlID0gdXNlQ3VycmVudFN0YXRlKClcbiAgY29uc3QgZGV2aWNlID0gJ2Rlc2t0b3AnXG4gIGNvbnN0IGRldmljZVN0YXRlID0gdXNlR2V0UnVsZXMoc3RhdGUsIGRldmljZSlcbiAgY29uc3QgcnVsZXMgPSB1c2VQYXJzZVJ1bGVzKGRldmljZVN0YXRlKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e3Jvb3RSZWZ9PlxuICAgICAgeyhydWxlcz8uY2hpbGRyZW4gfHwgW10pLm1hcChjaGlsZCA9PiAoXG4gICAgICAgIDxTdGF0ZUNvbnRleHQgdmFsdWU9e2NoaWxkfT5cbiAgICAgICAgICA8Qm9udXMgLz5cbiAgICAgICAgPC9TdGF0ZUNvbnRleHQ+XG4gICAgICApKX1cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCByZW5kZXIoPEJvbnVzQ2FyZCAvPilcbiIsImltcG9ydCB7IEZDIH0gZnJvbSAncHJlYWN0L2NvbXBhdCdcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnXG5pbXBvcnQgeyBvbWl0IH0gZnJvbSBcIkBhZHN0b3JlL3V0aWxzXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLm1vZHVsZS5zY3NzJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZVBhcnNlUnVsZXMgfSBmcm9tICdzcmMvaG9va3MvdXNlUGFyc2VSdWxlcydcbmltcG9ydCB7IGJhY2tncm91bmRPcHRpb25zIH0gZnJvbSBcInNyYy9oZWxwZXJzL2NvbnN0YW50c1wiO1xuXG5jb25zdCBUZXh0OiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VDdXJyZW50U3RhdGUoKVxuICBjb25zdCBydWxlcyA9IHVzZVBhcnNlUnVsZXMoc3RhdGUpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoc3R5bGVzLnJvb3QsIHtcbiAgICAgICAgW3N0eWxlcy5kZXNrdG9wXTogc3RhdGU/LmRldmljZSA9PT0gJ2Rlc2t0b3AnXG4gICAgICB9KX1cbiAgICAgIHN0eWxlPXtvbWl0KHJ1bGVzLnJvb3QsIC4uLmJhY2tncm91bmRPcHRpb25zKX1cbiAgICA+XG4gICAgICB7cnVsZXMucm9vdD8uY2hpbGRyZW59XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGV4dFxuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IG9taXQgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IHsgYmFja2dyb3VuZE9wdGlvbnMgfSBmcm9tIFwic3JjL2hlbHBlcnMvY29uc3RhbnRzXCI7XG5cbmNvbnN0IE1hdGNoZXM6IEZDID0gKCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzdGF0ZSlcblxuICBjb25zdCByb290UnVsZXMgPSBvbWl0KHJ1bGVzLnJvb3QsIC4uLmJhY2tncm91bmRPcHRpb25zKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5yb290fT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub2RkfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vZGRMb2dvfSBzdHlsZT17cm9vdFJ1bGVzfSAvPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZExhYmVsfSBzdHlsZT17cm9vdFJ1bGVzfT57cnVsZXMucm9vdD8udmFsdWVPbmV9PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29lZn0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29lZkhlYWR9IHN0eWxlPXtydWxlcy5jb2VmfT5YPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29lZlZhbHVlfSBzdHlsZT17cm9vdFJ1bGVzfT57cnVsZXMucm9vdD8udmFsdWVYfTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMub2RkLCBzdHlsZXMub2RkUmV2ZXJzZSl9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9kZExvZ299IHN0eWxlPXtyb290UnVsZXN9Lz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vZGRMYWJlbH0gc3R5bGU9e3Jvb3RSdWxlc30+e3J1bGVzLnJvb3Q/LnZhbHVlVHdvfTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWF0Y2hlc1xuIiwiaW1wb3J0IHsgRkMgfSBmcm9tICdwcmVhY3QvY29tcGF0J1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7IG9taXQgfSBmcm9tIFwiQGFkc3RvcmUvdXRpbHNcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMubW9kdWxlLnNjc3MnXG5pbXBvcnQgeyB1c2VDdXJyZW50U3RhdGUgfSBmcm9tICdzcmMvaG9va3MvdXNlQ3VycmVudFN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IHsgYmFja2dyb3VuZE9wdGlvbnMgfSBmcm9tIFwic3JjL2hlbHBlcnMvY29uc3RhbnRzXCI7XG5cbmNvbnN0IE1hdGNoZXNPbmVUd286IEZDID0gKCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzdGF0ZSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgICBbc3R5bGVzLmRlc2t0b3BdOiBzdGF0ZT8uZGV2aWNlID09PSAnZGVza3RvcCcsXG4gICAgICAgIFtzdHlsZXMubGFwdG9wXTogc3RhdGU/LmRldmljZSA9PT0gJ2xhcHRvcCcsXG4gICAgICAgIFtzdHlsZXMudGFibGV0XTogc3RhdGU/LmRldmljZSA9PT0gJ3RhYmxldCdcbiAgICAgIH0pfVxuICAgICAgc3R5bGU9e29taXQocnVsZXMucm9vdCwgLi4uYmFja2dyb3VuZE9wdGlvbnMpfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGl0bGV9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRpdGxlTGFiZWx9IHN0eWxlPXtydWxlcy50aXRsZUxhYmVsfT5cbiAgICAgICAgICB7cnVsZXMudGl0bGVMYWJlbC5jaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGl0bGVWYWx1ZX0gc3R5bGU9e3J1bGVzLnRpdGxlVmFsdWV9PlxuICAgICAgICAgIHtydWxlcy50aXRsZVZhbHVlLmNoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50ZWFtfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1Mb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1OYW1lfSBzdHlsZT17cnVsZXMudGVhbU5hbWV9PlxuICAgICAgICAgICAge3J1bGVzLnRlYW0xTmFtZS5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW1WYWx1ZX0gc3R5bGU9e3J1bGVzLnZhbHVlfT5cbiAgICAgICAgICAgIHtydWxlcy52YWx1ZTEuY2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRlYW19PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbUxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbU5hbWV9IHN0eWxlPXtydWxlcy50ZWFtTmFtZX0+XG4gICAgICAgICAgICB7cnVsZXMudGVhbTJOYW1lLmNoaWxkcmVufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGVhbVZhbHVlfSBzdHlsZT17cnVsZXMudmFsdWV9PlxuICAgICAgICAgICAge3J1bGVzLnZhbHVlMi5jaGlsZHJlbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBNYXRjaGVzT25lVHdvXG4iLCJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcblxuaW50ZXJmYWNlIFNsaWRlIHtcbiAgYW5pbWF0aW9uRHVyYXRpb246IG51bWJlclxufVxuXG5jb25zdCB1c2VBbmltYXRlZExpc3QgPSAoc2xpZGVzOiBTbGlkZVtdID0gW10pID0+IHtcbiAgY29uc3QgaXRlbXNDb3VudCA9IHNsaWRlcy5sZW5ndGhcbiAgY29uc3QgW2FuaW1hdGVkSWR4LCBzZXRBbmltYXRlZElkeF0gPSB1c2VTdGF0ZTxudW1iZXI+KDApXG4gIGNvbnN0IGFuaW1hdGlvbkR1cmF0aW9uID0gc2xpZGVzW2FuaW1hdGVkSWR4IHx8IDBdPy5hbmltYXRpb25EdXJhdGlvblxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZ29OZXh0ID0gKCkgPT4ge1xuICAgICAgc2V0QW5pbWF0ZWRJZHgoaW5kZXggPT4ge1xuICAgICAgICBpZiAoaW5kZXggKyAxIDwgaXRlbXNDb3VudCkgcmV0dXJuIGluZGV4ICsgMVxuICAgICAgICByZXR1cm4gMFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dChnb05leHQsIGFuaW1hdGlvbkR1cmF0aW9uKVxuXG4gICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0aW1lb3V0KVxuICB9LCBbc2V0QW5pbWF0ZWRJZHgsIGl0ZW1zQ291bnQsIGFuaW1hdGlvbkR1cmF0aW9uLCBhbmltYXRlZElkeF0pXG5cbiAgcmV0dXJuIGFuaW1hdGVkSWR4XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVzZUFuaW1hdGVkTGlzdFxuIiwiaW1wb3J0IHsgRkMsIHVzZVJlZiB9IGZyb20gJ3ByZWFjdC9jb21wYXQnXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJ1xuaW1wb3J0IHsgcGljayB9IGZyb20gJ0BhZHN0b3JlL3V0aWxzJ1xuaW1wb3J0IHsgdXNlQ3VycmVudFN0YXRlIH0gZnJvbSAnc3JjL2hvb2tzL3VzZUN1cnJlbnRTdGF0ZSdcbmltcG9ydCB7IHVzZUdldFJ1bGVzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZURldmljZVN0YXRlJ1xuaW1wb3J0IHsgdXNlUGFyc2VSdWxlcyB9IGZyb20gJ3NyYy9ob29rcy91c2VQYXJzZVJ1bGVzJ1xuaW1wb3J0IFN0YXRlQ29udGV4dCBmcm9tICdzcmMvU3RhdGVDb250ZXh0J1xuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnc3JjL2hlbHBlcnMvcmVuZGVyJ1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5tb2R1bGUuc2NzcydcbmltcG9ydCBUZXh0IGZyb20gJy4vY29tcG9uZW50cy9UZXh0J1xuaW1wb3J0IE1hdGNoZXMgZnJvbSAnLi9jb21wb25lbnRzL01hdGNoZXMnXG5pbXBvcnQgTWF0Y2hlc09uZVR3byBmcm9tICcuL2NvbXBvbmVudHMvTWF0Y2hlc09uZVR3bydcbmltcG9ydCB7IHVzZUNvbnRhaW5lckRldmljZSB9IGZyb20gJ3NyYy9ob29rcy91c2VDb250YWluZXJEZXZpY2UnXG5pbXBvcnQgdXNlQW5pbWF0ZWRMaXN0IGZyb20gJ3NyYy9ob29rcy91c2VBbmltYXRlZExpc3QnXG5pbXBvcnQgeyB1c2VNZXRyaWNzIH0gZnJvbSAnc3JjL2hvb2tzL3VzZU1ldHJpY3MnXG5pbXBvcnQgeyBiYWNrZ3JvdW5kT3B0aW9ucyB9IGZyb20gJ3NyYy9oZWxwZXJzL2NvbnN0YW50cydcblxuY29uc3QgREVGQVVMVF9BTklNQVRJT05fU1BFRUQgPSAzNzAwXG5cbmNvbnN0IFdpZGVDYXJkOiBGQyA9ICgpID0+IHtcbiAgY29uc3Qgcm9vdFJlZiA9IHVzZVJlZihudWxsKVxuICBjb25zdCBzdGF0ZSA9IHVzZUN1cnJlbnRTdGF0ZSgpXG4gIGNvbnN0IGRldmljZSA9IHVzZUNvbnRhaW5lckRldmljZSh7IHRhcmdldFJlZjogcm9vdFJlZiB9KVxuICBjb25zdCBkZXZpY2VTdGF0ZSA9IHVzZUdldFJ1bGVzKHN0YXRlLCBkZXZpY2UpXG4gIGNvbnN0IHJ1bGVzID0gdXNlUGFyc2VSdWxlcyhkZXZpY2VTdGF0ZSlcbiAgY29uc3Qgb25DbGljayA9IHVzZU1ldHJpY3MoZGV2aWNlU3RhdGUpXG5cbiAgY29uc3QgZ2V0Q2hpbGQgPSAobmFtZTogc3RyaW5nKSA9PlxuICAgICh7XG4gICAgICB0ZXh0OiA8VGV4dCAvPixcbiAgICAgIG1hdGNoZXM6IDxNYXRjaGVzIC8+LFxuICAgICAgbWF0Y2hlc09uZVR3bzogPE1hdGNoZXNPbmVUd28gLz5cbiAgICB9W25hbWVdKVxuXG4gIGNvbnN0IHNsaWRlc0xpc3QgPSAocnVsZXMuY2hpbGRyZW4gfHwgW10pLmZpbHRlcihCb29sZWFuKS5tYXAoc2xpZGUgPT4gKHtcbiAgICAuLi5zbGlkZSxcbiAgICBhbmltYXRpb25OYW1lOiBzbGlkZT8ucm9vdD8uYW5pbWF0aW9uTmFtZSxcbiAgICBhbmltYXRpb25EdXJhdGlvbjogc2xpZGU/LnJvb3Q/LmFuaW1hdGlvbkR1cmF0aW9uIHx8IERFRkFVTFRfQU5JTUFUSU9OX1NQRUVEXG4gIH0pKVxuXG4gIGNvbnN0IGN1cnJlbnRTbGlkZSA9IHVzZUFuaW1hdGVkTGlzdChzbGlkZXNMaXN0KVxuICBjb25zdCBzbGlkZVJ1bGVzID0gdXNlUGFyc2VSdWxlcyhzbGlkZXNMaXN0W2N1cnJlbnRTbGlkZV0gfHwge30pXG5cbiAgY29uc3QgYmFja2dyb3VuZFJ1bGVzID0gc2xpZGVSdWxlcz8ucm9vdD8uaGFzQ3VzdG9tQmFja2dyb3VuZFxuICAgID8gcGljayhzbGlkZVJ1bGVzPy5yb290IHx8IHt9LCAuLi5iYWNrZ3JvdW5kT3B0aW9ucylcbiAgICA6IHBpY2socnVsZXMuYmFja2dyb3VuZCwgLi4uYmFja2dyb3VuZE9wdGlvbnMpXG5cbiAgcmV0dXJuIChcbiAgICA8YVxuICAgICAgcmVmPXtyb290UmVmfVxuICAgICAgaHJlZj17cnVsZXMucm9vdD8ub2ZmZXJ9XG4gICAgICB0YXJnZXQ9J19ibGFuaydcbiAgICAgIHJlbD0nbm9mb2xsb3cgbm9vcGVuZXIgbm9yZWZlcnJlcidcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhzdHlsZXMucm9vdCwge1xuICAgICAgICBbc3R5bGVzLmRlc2t0b3BdOiBkZXZpY2UgPT09ICdkZXNrdG9wJyxcbiAgICAgICAgW3N0eWxlcy5sYXB0b3BdOiBkZXZpY2UgPT09ICdsYXB0b3AnLFxuICAgICAgICBbc3R5bGVzLnRhYmxldF06IGRldmljZSA9PT0gJ3RhYmxldCcsXG4gICAgICAgIFtzdHlsZXMudmFyaWFudDJdOiBydWxlcy5yb290Py52YXJpYW50ID09PSAndmFyaWFudDInXG4gICAgICB9KX1cbiAgICAgIHN0eWxlPXtydWxlcy5yb290fVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJhY2tncm91bmR9IHN0eWxlPXtiYWNrZ3JvdW5kUnVsZXN9IC8+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnByb21vdGlvbn0gc3R5bGU9e3J1bGVzLnByb21vdGlvbn0+XG4gICAgICAgIHtydWxlcy5wcm9tb3Rpb24/LmNoaWxkcmVufVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGVudH0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGVmdH0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY2VudGVyfT5cbiAgICAgICAgICB7KHJ1bGVzLmNoaWxkcmVuIHx8IFtdKS5tYXAoKGNoaWxkLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5zbGlkZX1cbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBhbmltYXRpb25OYW1lOiBjdXJyZW50U2xpZGUgPT09IGluZGV4ID8gc3R5bGVzW2NoaWxkLnJvb3Q/LmFuaW1hdGlvbk5hbWUgfHwgJ2ZhZGUtaW4tb3V0J10gOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uRHVyYXRpb246IGAke2NoaWxkLnJvb3Q/LmFuaW1hdGlvbkR1cmF0aW9ufW1zYFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8U3RhdGVDb250ZXh0IHZhbHVlPXt7IC4uLmNoaWxkLCBkZXZpY2UgfX0+e2dldENoaWxkKGNoaWxkLm5hbWUpfTwvU3RhdGVDb250ZXh0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnJpZ2h0fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxvZ299IHN0eWxlPXtydWxlcy5sb2dvfSAvPlxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5idXR0b25XcmFwcGVyfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuYnV0dG9ufSBzdHlsZT17cnVsZXMuYnV0dG9ufT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5sb2dvfSBzdHlsZT17cnVsZXMubG9nb30gLz5cbiAgICAgICAgICAgICAge3J1bGVzLmJ1dHRvbj8uY2hpbGRyZW59XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2E+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyKDxXaWRlQ2FyZCAvPilcbiIsImltcG9ydCB7IENhbGxiYWNrLCBkZXZpY2VzIGFzIGRldmljZXNMaXN0LCBnZXQgfSBmcm9tICdAYWRzdG9yZS91dGlscydcbmltcG9ydCB7IEFueVN0YXRlIH0gZnJvbSAnc3JjL3Byb21vcy9TaW1wbGVHaWZ0L3R5cGVzJ1xuXG5jb25zdCBtb2RpZnlTdGF0ZSA9IChcbiAgc3RhdGU6IEFueVN0YXRlLFxuICBsYXllcjogc3RyaW5nLFxuICBydWxlOiBzdHJpbmcsXG4gIHZhbHVlOiB1bmtub3duIHwgQ2FsbGJhY2s8W3ByZXZWYWx1ZTogdW5rbm93bl0+LFxuICBkZXZpY2VzID0gZGV2aWNlc0xpc3RcbikgPT4ge1xuICBjb25zdCBuZXdTdGF0ZSA9IHsgLi4uc3RhdGUgfVxuXG4gIGRldmljZXMuZm9yRWFjaChkZXZpY2UgPT4ge1xuICAgIG5ld1N0YXRlW2xheWVyXSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlW2xheWVyXSxcbiAgICAgIFtkZXZpY2VdOiB7XG4gICAgICAgIC4uLm5ld1N0YXRlW2xheWVyXVtkZXZpY2VdLFxuICAgICAgICBbcnVsZV06IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlKGdldChuZXdTdGF0ZSwgYCR7bGF5ZXJ9LiR7ZGV2aWNlfS4ke3J1bGV9YCkpIDogdmFsdWVcbiAgICAgIH1cbiAgICB9XG4gIH0pXG4gIHJldHVybiBuZXdTdGF0ZVxufVxuXG5leHBvcnQgeyBtb2RpZnlTdGF0ZSB9XG4iXSwibmFtZXMiOlsiY2xhc3NOYW1lcyIsImkiLCJpbm5lciIsIm8iLCJuIiwidCIsInUiLCJCIiwiciIsImYiLCJjIiwiZSIsIl8iLCJGIiwicSIsInciLCJnIiwibCIsInVzZUdpZnRPcGVuIiwiZGVsYXkiLCJpc09wZW4iLCJzZXRJc09wZW4iLCJ1c2VTdGF0ZSIsInRpbWVyUmVmIiwidXNlUmVmIiwib25Ub2dnbGUiLCJjbGVhclRpbWVvdXQiLCJjdXJyZW50IiwicHJldiIsInVzZUVmZmVjdCIsInNldFRpbWVvdXQiLCJzIiwiYSIsIlN0YXRlIiwiY3JlYXRlQ29udGV4dCIsIlN0YXRlQ29udGV4dCIsImNoaWxkcmVuIiwidmFsdWUiLCJfanN4IiwiUHJvdmlkZXIiLCJyZW5kZXIiLCJ2Tm9kZSIsInRhcmdldCIsInN0YXRlIiwicHJlYWN0UmVuZGVyIiwidXNlQ3VycmVudFN0YXRlIiwidXNlQ29udGV4dCIsImxpc3RDYWNoZUNsZWFyIiwiZXEiLCJyZXF1aXJlJCQwIiwiYXNzb2NJbmRleE9mIiwibGlzdENhY2hlRGVsZXRlIiwiaW5kZXgiLCJsaXN0Q2FjaGVHZXQiLCJsaXN0Q2FjaGVIYXMiLCJsaXN0Q2FjaGVTZXQiLCJyZXF1aXJlJCQxIiwicmVxdWlyZSQkMiIsInJlcXVpcmUkJDMiLCJyZXF1aXJlJCQ0IiwiTGlzdENhY2hlIiwic3RhY2tDbGVhciIsInN0YWNrRGVsZXRlIiwic3RhY2tHZXQiLCJzdGFja0hhcyIsImZyZWVHbG9iYWwiLCJnbG9iYWwiLCJyb290IiwiU3ltYm9sIiwib2JqZWN0UHJvdG8iLCJoYXNPd25Qcm9wZXJ0eSIsIm5hdGl2ZU9iamVjdFRvU3RyaW5nIiwic3ltVG9TdHJpbmdUYWciLCJnZXRSYXdUYWciLCJvYmplY3RUb1N0cmluZyIsImJhc2VHZXRUYWciLCJpc09iamVjdCIsImZ1bmNUYWciLCJpc0Z1bmN0aW9uIiwiY29yZUpzRGF0YSIsImlzTWFza2VkIiwiZnVuY1Byb3RvIiwiZnVuY1RvU3RyaW5nIiwidG9Tb3VyY2UiLCJiYXNlSXNOYXRpdmUiLCJnZXRWYWx1ZSIsImdldE5hdGl2ZSIsIk1hcCIsIm5hdGl2ZUNyZWF0ZSIsImhhc2hDbGVhciIsImhhc2hEZWxldGUiLCJIQVNIX1VOREVGSU5FRCIsImhhc2hHZXQiLCJoYXNoSGFzIiwiaGFzaFNldCIsIkhhc2giLCJtYXBDYWNoZUNsZWFyIiwiaXNLZXlhYmxlIiwiZ2V0TWFwRGF0YSIsIm1hcENhY2hlRGVsZXRlIiwibWFwQ2FjaGVHZXQiLCJtYXBDYWNoZUhhcyIsIm1hcENhY2hlU2V0IiwiTWFwQ2FjaGUiLCJzdGFja1NldCIsInJlcXVpcmUkJDUiLCJTdGFjayIsImRlZmluZVByb3BlcnR5IiwiYmFzZUFzc2lnblZhbHVlIiwiYXNzaWduTWVyZ2VWYWx1ZSIsImNyZWF0ZUJhc2VGb3IiLCJiYXNlRm9yIiwiY2xvbmVCdWZmZXIiLCJVaW50OEFycmF5IiwiY2xvbmVBcnJheUJ1ZmZlciIsImNsb25lVHlwZWRBcnJheSIsImNvcHlBcnJheSIsImJhc2VDcmVhdGUiLCJvdmVyQXJnIiwiZ2V0UHJvdG90eXBlIiwiaXNQcm90b3R5cGUiLCJpbml0Q2xvbmVPYmplY3QiLCJpc09iamVjdExpa2UiLCJhcmdzVGFnIiwiYmFzZUlzQXJndW1lbnRzIiwiaXNBcmd1bWVudHMiLCJpc0FycmF5IiwiTUFYX1NBRkVfSU5URUdFUiIsImlzTGVuZ3RoIiwiaXNBcnJheUxpa2UiLCJpc0FycmF5TGlrZU9iamVjdCIsInN0dWJGYWxzZSIsImlzQnVmZmVyIiwib2JqZWN0VGFnIiwiaXNQbGFpbk9iamVjdCIsImJhc2VJc1R5cGVkQXJyYXkiLCJiYXNlVW5hcnkiLCJub2RlVXRpbCIsImlzVHlwZWRBcnJheSIsInNhZmVHZXQiLCJhc3NpZ25WYWx1ZSIsImNvcHlPYmplY3QiLCJiYXNlVGltZXMiLCJpc0luZGV4IiwiYXJyYXlMaWtlS2V5cyIsIm5hdGl2ZUtleXNJbiIsImJhc2VLZXlzSW4iLCJrZXlzSW4iLCJ0b1BsYWluT2JqZWN0IiwicmVxdWlyZSQkNiIsInJlcXVpcmUkJDciLCJyZXF1aXJlJCQ4IiwicmVxdWlyZSQkOSIsInJlcXVpcmUkJDEwIiwicmVxdWlyZSQkMTEiLCJyZXF1aXJlJCQxMiIsInJlcXVpcmUkJDEzIiwicmVxdWlyZSQkMTQiLCJiYXNlTWVyZ2VEZWVwIiwiYmFzZU1lcmdlIiwiaWRlbnRpdHkiLCJhcHBseSIsIm92ZXJSZXN0IiwiY29uc3RhbnQiLCJiYXNlU2V0VG9TdHJpbmciLCJzaG9ydE91dCIsInNldFRvU3RyaW5nIiwiYmFzZVJlc3QiLCJpc0l0ZXJhdGVlQ2FsbCIsImNyZWF0ZUFzc2lnbmVyIiwiaW5qZWN0TGluayIsIm9wdGlvbnMiLCJoZWFkIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImxpbmsiLCJjcmVhdGVFbGVtZW50IiwiT2JqZWN0IiwiZW50cmllcyIsImZvckVhY2giLCJrZXkiLCJzZXRBdHRyaWJ1dGUiLCJhcHBlbmRDaGlsZCIsIml0ZXJhdG9yIiwiaW5wdXQiLCJ2aXNpdG9yIiwicGF0aCIsIkFycmF5IiwibWFwIiwiZWwiLCJuZXdQYXRoIiwiZmlsdGVyIiwiaXNWYWx1ZSIsImpvaW4iLCJyZWR1Y2UiLCJhY2MiLCJpc0VtcHR5VmFsdWUiLCJ1bmRlZmluZWQiLCJwaWNrIiwib2JqIiwicHJvcHMiLCJyZXN1bHQiLCJwcm9wIiwib21pdCIsImdldCIsImRlZlZhbHVlIiwicGF0aEFycmF5IiwibWF0Y2giLCJwcmV2T2JqIiwic2V0IiwibGVuZ3RoIiwiaGV4VG9SZ2IiLCJoZXgiLCJjaGFycyIsInNsaWNlIiwic3BsaXQiLCJ2YWwiLCJleGVjIiwicGFyc2VJbnQiLCJiIiwiaXNKc29uU2FtZSIsInZhbHVlcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJldmVyeSIsImFyciIsInJnYlRvUmdiYSIsInJnYiIsImFscGhhIiwicmVwbGFjZSIsImRldmljZXMiLCJCUkVBS1BPSU5UUyIsIm1vYmlsZSIsInRhYmxldCIsImxhcHRvcCIsImRlc2t0b3AiLCJpc1ZhbGlkTGF5ZXIiLCJkZXZpY2UiLCJnZXRSdWxlcyIsIl9rZXkiLCJyZXN1bHRSdWxlcyIsInBhcmVudCIsInVzZUdldFJ1bGVzIiwidXNlQ29udGFpbmVyRGV2aWNlIiwidGFyZ2V0UmVmIiwicGFyZW50S2V5IiwiYnJlYWtwb2ludHMiLCJzZXREZXZpY2UiLCJjaGVja0RldmljZSIsInBhcmVudFdpZHRoIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwid2lkdGgiLCJzb3J0ZWRCcmVha3BvaW50cyIsInNvcnQiLCJfMSIsInZhbHVlQSIsIl8yIiwidmFsdWVCIiwiZmluZERldmljZSIsImZpbmQiLCJuZXh0VmFsdWUiLCJ1c2VMYXlvdXRFZmZlY3QiLCJwYXJlbnRFbGVtZW50IiwiY2xvc2VzdCIsInJlc2l6ZU9ic2VydmVyIiwiUmVzaXplT2JzZXJ2ZXIiLCJvYnNlcnZlIiwid3JhcFRvIiwidW50aWwiLCJ0b1B4Iiwic3RhcnRzV2l0aCIsInRvUGVyY2VudCIsImZvcm1hdFJ1bGUiLCJuZXdLZXkiLCJuZXdWYWx1ZSIsIkRFRkFVTFRfVE9fUFgiLCJwYXJzZVJ1bGVzIiwicnVsZXMiLCJsYXllciIsImtleXMiLCJpbmNsdWRlcyIsIndhcm4iLCJ0eXBvZ3JhcGh5IiwiYWNjZW50VHlwb2dyYXBoeSIsImZvbnRGYW1pbHkiLCJjb2xvciIsImZvbnRTaXplIiwicHJvcEtleSIsInByb3BWYWx1ZSIsImlubmVySFRNTCIsImlubmVyVGV4dCIsImRpc3BsYXkiLCJib3JkZXJTdHlsZSIsImJvcmRlclJhZGl1cyIsImJhY2tncm91bmRTaXplIiwiYmFja2dyb3VuZEltYWdlIiwiYmFja2dyb3VuZFJlcGVhdCIsImJhY2tncm91bmRDb2xvck9wYWNpdHkiLCJiYWNrZ3JvdW5kQ29sb3IiLCJmb250V2VpZ2h0IiwiZm9udFN0eWxlIiwidGV4dERlY29yYXRpb24iLCJpc1ZhbGlkUnVsZSIsInJ1bGUiLCJ1c2VQYXJzZVJ1bGVzIiwiRGlzcGxheVRleHQiLCJyZXN0IiwiZm9ybWF0VmFsdWUiLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsIl9faHRtbCIsInVzZVRvZ2dsZSIsIkNsb3NlSWNvbiIsInhtbG5zIiwiaGVpZ2h0Iiwidmlld0JveCIsImQiLCJmaWxsIiwiR2lmdEljb24iLCJmaWxsUnVsZSIsImFuaW1hdGlvbnNNYXAiLCJhbmltYXRpb25zIiwiZmFkZSIsInB1bHNlIiwid2lnZ2xlIiwiZ3JhZGllbnQiLCJ1c2VHaWZ0UnVsZXMiLCJkZXZpY2VTdGF0ZSIsImZ1bGxBbmltYXRpb25zIiwiaGFzSWNvbiIsImljb24iLCJhcnJvd1J1bGVzIiwibGVmdCIsImNvbnRhaW5lciIsImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyV2lkdGgiLCJib3JkZXJUb3BDb2xvciIsImJvcmRlckNvbG9yIiwiYm9yZGVyVG9wU3R5bGUiLCJib3JkZXJMZWZ0V2lkdGgiLCJib3JkZXJMZWZ0Q29sb3IiLCJib3JkZXJMZWZ0U3R5bGUiLCJib2R5UnVsZXMiLCJhbGxBbmltYXRpb25zIiwiYW5pbWF0aW9uIiwiYmFja2dyb3VuZFN0eWxlcyIsImdyYWRpZW50Q29sb3IiLCJiYWNrZ3JvdW5kIiwiaWNvblJ1bGVzIiwiYmFja2dyb3VuZE9wdGlvbnMiLCJzcGFjaW5nT3B0aW9ucyIsIm5vb3BZYU1ldHJpa2EiLCJnb2FsIiwiY29uc29sZSIsImxvZyIsIm5vb3BBZEZveCIsInVzZU1ldHJpY3MiLCJsYXllck5hbWUiLCJzYXZlTWV0cmljcyIsInlhUmVhY2hHb2FsIiwiYWRmb3hSZWFjaEdvYWwiLCJtZXRyaWNzIiwieWFTaG93IiwiYWRmb3hTaG93IiwieWFDbGljayIsImFkZm94Q2xpY2siLCJ1c2VFeHRyYWN0Rm9udHMiLCJmb250cyIsIlNldCIsImFkZCIsImZvbnRMaW5rcyIsInVzZU1lbW8iLCJmcm9tIiwiZm9udCIsInJlbCIsImhyZWYiLCJTaW1wbGVHaWZ0Iiwicm9vdFJlZiIsImxlZ2FsSXNPcGVuIiwidG9nZ2xlTGVnYWxJc09wZW4iLCJvbkNsaWNrIiwic3R5bGVzIiwiZmFkZWluIiwiX2pzeHMiLCJjbGFzc05hbWUiLCJsZWdhbE9wZW4iLCJyZWYiLCJzdHlsZSIsImljb25UYXJnZXQiLCJib2R5IiwiYm9keU9wZW4iLCJhcnJvdyIsImNsb3NlIiwib2ZmZXIiLCJsb2dvIiwidGV4dCIsImJ1dHRvbiIsImJ1dHRvbkFuaW1hdGVkIiwiaXNBbmltYXRlZCIsImxlZ2FsR2FwIiwibGVnYWwiLCJsZWdhbFRleHQiLCJsZWdhbEJ1dHRvbiIsImJ1dHRvbk9wZW5UZXh0IiwiYnV0dG9uSGlkZVRleHQiLCJCb251c0NhcmQiLCJ2YXJpYW50MiIsInZhcmlhbnQiLCJsaW5lIiwiYm9keUlubmVyIiwiYnV0dG9uVGV4dCIsIkNvbXBsZXhHaWZ0IiwiaGFzVGl0bGVJY29uIiwidGl0bGUiLCJwcm9tb3Rpb24iLCJoZWFkSWNvbiIsImhlYWRUaXRsZSIsImNoaWxkIiwic3dpdGNoVGV4dEFsaWduVG9GbGV4IiwidGV4dEFsaWduIiwiY2VudGVyIiwicmlnaHQiLCJMaW5lIiwiU2ltcGxlUG9wdXAiLCJhbGlnbkl0ZW1zIiwiYWxpZ24iLCJidXR0b25SdWxlcyIsImp1c3RpZnlDb250ZW50IiwibGVnYWxSdWxlcyIsIkJvbnVzIiwiaGVhZGVyIiwid3JhcHBlciIsIk1hdGNoIiwidGVhbXMiLCJsZWFndWUiLCJuYW1lIiwidGVhbUEiLCJ0ZWFtQiIsInRlYW0iLCJ0ZWFtTG9nbyIsInRlYW1OYW1lIiwib2RkIiwib2RkTGFiZWwiLCJvZGRWYWx1ZSIsImJ1dHRvbldyYXBwZXIiLCJjb250ZW50UnVsZXMiLCJjb250ZW50IiwidGV4dFJ1bGVzIiwiYnV0dG9uSGVhZCIsImJ1dHRvblRhcmdldCIsInRvZ2dsZUlzT3BlbiIsInJvd0ZpcnN0Iiwicm93U2Vjb25kIiwiYm9va21ha2VyIiwibGVnYWxJbmZvIiwibGVnYWxJbmZvQnV0dG9uIiwib3BlblRleHQiLCJjbG9zZVRleHQiLCJUZXh0IiwiTWF0Y2hlcyIsInJvb3RSdWxlcyIsIm9kZExvZ28iLCJ2YWx1ZU9uZSIsImNvZWYiLCJjb2VmSGVhZCIsImNvZWZWYWx1ZSIsInZhbHVlWCIsIm9kZFJldmVyc2UiLCJ2YWx1ZVR3byIsIk1hdGNoZXNPbmVUd28iLCJ0aXRsZUxhYmVsIiwidGl0bGVWYWx1ZSIsInRlYW0xTmFtZSIsInRlYW1WYWx1ZSIsInZhbHVlMSIsInRlYW0yTmFtZSIsInZhbHVlMiIsInVzZUFuaW1hdGVkTGlzdCIsInNsaWRlcyIsIml0ZW1zQ291bnQiLCJhbmltYXRlZElkeCIsInNldEFuaW1hdGVkSWR4IiwiYW5pbWF0aW9uRHVyYXRpb24iLCJnb05leHQiLCJ0aW1lb3V0IiwiREVGQVVMVF9BTklNQVRJT05fU1BFRUQiLCJXaWRlQ2FyZCIsImdldENoaWxkIiwibWF0Y2hlcyIsIm1hdGNoZXNPbmVUd28iLCJzbGlkZXNMaXN0IiwiQm9vbGVhbiIsInNsaWRlIiwiYW5pbWF0aW9uTmFtZSIsImN1cnJlbnRTbGlkZSIsInNsaWRlUnVsZXMiLCJiYWNrZ3JvdW5kUnVsZXMiLCJoYXNDdXN0b21CYWNrZ3JvdW5kIiwibW9kaWZ5U3RhdGUiLCJkZXZpY2VzTGlzdCIsIm5ld1N0YXRlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQU9BLEdBQUMsV0FBWTtBQUdaLFFBQUksU0FBUyxDQUFFLEVBQUM7QUFHaEIsYUFBU0EsY0FBYTtBQUNyQixVQUFJLFVBQVUsQ0FBQTtBQUVkLGVBQVNDLEtBQUksR0FBR0EsS0FBSSxVQUFVLFFBQVFBLE1BQUs7QUFDMUMsWUFBSSxNQUFNLFVBQVVBLEVBQUM7QUFDckIsWUFBSSxDQUFDO0FBQUs7QUFFVixZQUFJLFVBQVUsT0FBTztBQUVyQixZQUFJLFlBQVksWUFBWSxZQUFZLFVBQVU7QUFDakQsa0JBQVEsS0FBSyxHQUFHO0FBQUEsUUFDaEIsV0FBVSxNQUFNLFFBQVEsR0FBRyxHQUFHO0FBQzlCLGNBQUksSUFBSSxRQUFRO0FBQ2YsZ0JBQUlDLFNBQVFGLFlBQVcsTUFBTSxNQUFNLEdBQUc7QUFDdEMsZ0JBQUlFLFFBQU87QUFDVixzQkFBUSxLQUFLQSxNQUFLO0FBQUEsWUFDbEI7QUFBQSxVQUNEO0FBQUEsUUFDTCxXQUFjLFlBQVksVUFBVTtBQUNoQyxjQUFJLElBQUksYUFBYSxPQUFPLFVBQVUsWUFBWSxDQUFDLElBQUksU0FBUyxTQUFRLEVBQUcsU0FBUyxlQUFlLEdBQUc7QUFDckcsb0JBQVEsS0FBSyxJQUFJLFNBQVUsQ0FBQTtBQUMzQjtBQUFBLFVBQ0E7QUFFRCxtQkFBUyxPQUFPLEtBQUs7QUFDcEIsZ0JBQUksT0FBTyxLQUFLLEtBQUssR0FBRyxLQUFLLElBQUksR0FBRyxHQUFHO0FBQ3RDLHNCQUFRLEtBQUssR0FBRztBQUFBLFlBQ2hCO0FBQUEsVUFDRDtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBRUQsYUFBTyxRQUFRLEtBQUssR0FBRztBQUFBLElBQ3ZCO0FBRUQsUUFBcUMsT0FBTyxTQUFTO0FBQ3BELE1BQUFGLFlBQVcsVUFBVUE7QUFDckIsYUFBQSxVQUFpQkE7QUFBQSxJQUNuQixPQUtRO0FBQ04sYUFBTyxhQUFhQTtBQUFBLElBQ3BCO0FBQUEsRUFDRjs7O0FDM0RpQyxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUVHLE1BQUUsR0FBRSxJQUFFLENBQUEsR0FBRyxJQUFFLElBQUcsSUFBRUMsUUFBRSxLQUFJLElBQUVBLFFBQUUsS0FBSSxJQUFFQSxRQUFFLFFBQU8sSUFBRUEsUUFBRSxLQUFJLElBQUVBLFFBQUU7QUFBUSxTQUFTLEVBQUVDLElBQUVDLElBQUU7QUFBQ0YsVUFBRSxPQUFLQSxRQUFFLElBQUksR0FBRUMsSUFBRUYsT0FBR0csRUFBQyxHQUFFSCxNQUFFO0FBQUUsTUFBSUYsS0FBRSxFQUFFLFFBQU0sRUFBRSxNQUFJLEVBQUMsSUFBRyxJQUFHLEtBQUksQ0FBRSxFQUFBO0FBQUcsU0FBT0ksTUFBR0osR0FBRSxHQUFHLFVBQVFBLEdBQUUsR0FBRyxLQUFLLEVBQUMsS0FBSSxFQUFDLENBQUMsR0FBRUEsR0FBRSxHQUFHSSxFQUFDO0FBQUM7QUFBQyxTQUFTLEVBQUUsR0FBRTtBQUFDLFNBQU9GLE1BQUUsR0FBRSxFQUFFSSxLQUFFLENBQUM7QUFBQztBQUFDLFNBQVMsRUFBRSxHQUFFRCxJQUFFTCxJQUFFO0FBQUMsTUFBSUUsS0FBRSxFQUFFLEtBQUksQ0FBQztBQUFFLE1BQUdBLEdBQUUsSUFBRSxHQUFFLENBQUNBLEdBQUUsUUFBTUEsR0FBRSxLQUFHLENBQUNGLEtBQUVBLEdBQUVLLEVBQUMsSUFBRUMsSUFBRSxRQUFPRCxFQUFDLEdBQUUsU0FBU0YsSUFBRTtBQUFDLFFBQUlDLEtBQUVGLEdBQUUsTUFBSUEsR0FBRSxJQUFJLENBQUMsSUFBRUEsR0FBRSxHQUFHLENBQUMsR0FBRUssS0FBRUwsR0FBRSxFQUFFRSxJQUFFRCxFQUFDO0FBQUUsSUFBQUMsT0FBSUcsT0FBSUwsR0FBRSxNQUFJLENBQUNLLElBQUVMLEdBQUUsR0FBRyxDQUFDLENBQUMsR0FBRUEsR0FBRSxJQUFJLFNBQVMsQ0FBRSxDQUFBO0FBQUEsRUFBRSxDQUFDLEdBQUVBLEdBQUUsTUFBSSxHQUFFLENBQUMsRUFBRSxJQUFHO0FBQUMsUUFBSU0sS0FBRSxTQUFTTCxJQUFFQyxJQUFFRyxJQUFFO0FBQUMsVUFBRyxDQUFDTCxHQUFFLElBQUk7QUFBSSxlQUFNO0FBQUcsVUFBSUcsS0FBRUgsR0FBRSxJQUFJLElBQUksR0FBRyxPQUFPLFNBQVNDLElBQUU7QUFBQyxlQUFPQSxHQUFFO0FBQUEsTUFBRyxDQUFDO0FBQUUsVUFBR0UsR0FBRSxNQUFNLFNBQVNGLElBQUU7QUFBQyxlQUFNLENBQUNBLEdBQUU7QUFBQSxNQUFHLENBQUM7QUFBRSxlQUFNLENBQUNNLE1BQUdBLEdBQUUsS0FBSyxNQUFLTixJQUFFQyxJQUFFRyxFQUFDO0FBQUUsVUFBSVAsS0FBRTtBQUFHLGFBQU9LLEdBQUUsUUFBUSxTQUFTRixJQUFFO0FBQUMsWUFBR0EsR0FBRSxLQUFJO0FBQUMsY0FBSUMsS0FBRUQsR0FBRSxHQUFHLENBQUM7QUFBRSxVQUFBQSxHQUFFLEtBQUdBLEdBQUUsS0FBSUEsR0FBRSxNQUFJLFFBQU9DLE9BQUlELEdBQUUsR0FBRyxDQUFDLE1BQUlILEtBQUU7QUFBQSxRQUFHO0FBQUEsTUFBQyxDQUFDLEdBQUUsRUFBRSxDQUFDQSxNQUFHRSxHQUFFLElBQUksVUFBUUMsUUFBSyxDQUFDTSxNQUFHQSxHQUFFLEtBQUssTUFBS04sSUFBRUMsSUFBRUcsRUFBQztBQUFBLElBQUU7QUFBRSxNQUFFLElBQUU7QUFBRyxRQUFJRSxLQUFFLEVBQUUsdUJBQXNCQyxLQUFFLEVBQUU7QUFBb0IsTUFBRSxzQkFBb0IsU0FBU1AsSUFBRUMsSUFBRUcsSUFBRTtBQUFDLFVBQUcsS0FBSyxLQUFJO0FBQUMsWUFBSUYsS0FBRUk7QUFBRSxRQUFBQSxLQUFFLFFBQU9ELEdBQUVMLElBQUVDLElBQUVHLEVBQUMsR0FBRUUsS0FBRUo7QUFBQSxNQUFDO0FBQUMsTUFBQUssTUFBR0EsR0FBRSxLQUFLLE1BQUtQLElBQUVDLElBQUVHLEVBQUM7QUFBQSxJQUFDLEdBQUUsRUFBRSx3QkFBc0JDO0FBQUEsRUFBQztBQUFDLFNBQU9OLEdBQUUsT0FBS0EsR0FBRTtBQUFFO0FBQUMsU0FBUyxFQUFFRyxJQUFFTCxJQUFFO0FBQUMsTUFBSUUsS0FBRSxFQUFFLEtBQUksQ0FBQztBQUFFLEdBQUNDLFFBQUUsT0FBSyxFQUFFRCxHQUFFLEtBQUlGLEVBQUMsTUFBSUUsR0FBRSxLQUFHRyxJQUFFSCxHQUFFLElBQUVGLElBQUUsRUFBRSxJQUFJLElBQUksS0FBS0UsRUFBQztBQUFFO0FBQUMsU0FBUyxFQUFFRyxJQUFFTCxJQUFFO0FBQUMsTUFBSUUsS0FBRSxFQUFFLEtBQUksQ0FBQztBQUFFLEdBQUNDLFFBQUUsT0FBSyxFQUFFRCxHQUFFLEtBQUlGLEVBQUMsTUFBSUUsR0FBRSxLQUFHRyxJQUFFSCxHQUFFLElBQUVGLElBQUUsRUFBRSxJQUFJLEtBQUtFLEVBQUM7QUFBRTtBQUFDLFNBQVNTLElBQUUsR0FBRTtBQUFDLFNBQU9ULE1BQUUsR0FBRVUsSUFBRSxXQUFVO0FBQUMsV0FBTSxFQUFDLFNBQVEsRUFBQztBQUFBLEVBQUMsR0FBRSxFQUFFO0FBQUM7QUFBc0wsU0FBU0EsSUFBRSxHQUFFTCxJQUFFO0FBQUMsTUFBSUYsS0FBRSxFQUFFLEtBQUksQ0FBQztBQUFFLFNBQU8sRUFBRUEsR0FBRSxLQUFJRSxFQUFDLEtBQUdGLEdBQUUsTUFBSSxFQUFHLEdBQUNBLEdBQUUsSUFBRUUsSUFBRUYsR0FBRSxNQUFJLEdBQUVBLEdBQUUsT0FBS0EsR0FBRTtBQUFFO0FBQXNELFNBQVNRLElBQUUsR0FBRTtBQUFDLE1BQUlSLEtBQUUsRUFBRSxRQUFRLEVBQUUsR0FBRyxHQUFFTCxLQUFFLEVBQUUsS0FBSSxDQUFDO0FBQUUsU0FBT0EsR0FBRSxJQUFFLEdBQUVLLE1BQUcsUUFBTUwsR0FBRSxPQUFLQSxHQUFFLEtBQUcsTUFBR0ssR0FBRSxJQUFJLENBQUMsSUFBR0EsR0FBRSxNQUFNLFNBQU8sRUFBRTtBQUFFO0FBQTZYLFNBQVMsSUFBRztBQUFDLFdBQVFELElBQUVBLEtBQUUsRUFBRTtBQUFTLFFBQUdBLEdBQUUsT0FBS0EsR0FBRTtBQUFJLFVBQUc7QUFBQyxRQUFBQSxHQUFFLElBQUks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QUUsTUFBSSxFQUFFLE9BQUssRUFBRSxJQUFJLElBQUksU0FBU1AsSUFBRTtBQUFDLFdBQU8sRUFBRUEsSUFBRUMsSUFBRU0sRUFBQztBQUFBLEVBQUMsQ0FBQyxHQUFFLEVBQUUsT0FBSyxFQUFFLElBQUksUUFBTU4sT0FBSSxFQUFFLE9BQUtNLEdBQUUsYUFBYSxFQUFFLEtBQUksRUFBRSxHQUFHLEdBQUUsRUFBRSxJQUFJLE1BQUksTUFBRyxFQUFFLElBQUksTUFBSUEsTUFBSTtBQUFDO0FBQUMsU0FBUyxJQUFHO0FBQUMsT0FBSyxNQUFJLEdBQUUsS0FBSyxJQUFFLE1BQUssS0FBSyxNQUFJO0FBQUk7QUFBQyxTQUFTLEVBQUUsR0FBRTtBQUFDLE1BQUlOLEtBQUUsRUFBRSxHQUFHO0FBQUksU0FBT0EsTUFBR0EsR0FBRSxPQUFLQSxHQUFFLElBQUksQ0FBQztBQUFDO0FBQXFMLFNBQVMsSUFBRztBQUFDLE9BQUssSUFBRSxNQUFLLEtBQUssSUFBRTtBQUFJO0FBQUNNLFFBQUUsVUFBUSxTQUFTLEdBQUU7QUFBQyxNQUFJTixLQUFFLEVBQUU7QUFBSSxFQUFBQSxNQUFHQSxHQUFFLE9BQUtBLEdBQUUsSUFBRyxHQUFHQSxNQUFHLFNBQUssRUFBRSxRQUFNLEVBQUUsT0FBSyxPQUFNLEtBQUcsRUFBRSxDQUFDO0FBQUMsSUFBRyxFQUFFLFlBQVUsSUFBSUQsYUFBRyxNQUFJLFNBQVMsR0FBRUMsSUFBRTtBQUFDLE1BQUlNLEtBQUVOLEdBQUUsS0FBSUcsS0FBRTtBQUFLLFVBQU1BLEdBQUUsTUFBSUEsR0FBRSxJQUFFLENBQUUsSUFBRUEsR0FBRSxFQUFFLEtBQUtHLEVBQUM7QUFBRSxNQUFJTCxLQUFFLEVBQUVFLEdBQUUsR0FBRyxHQUFFTCxLQUFFLE9BQUdGLEtBQUUsV0FBVTtBQUFDLElBQUFFLE9BQUlBLEtBQUUsTUFBR1EsR0FBRSxNQUFJLE1BQUtMLEtBQUVBLEdBQUVXLEVBQUMsSUFBRUEsR0FBQztBQUFBLEVBQUc7QUFBRSxFQUFBTixHQUFFLE1BQUlWO0FBQUUsTUFBSWdCLEtBQUUsV0FBVTtBQUFDLFFBQUcsQ0FBQyxFQUFFVCxHQUFFLEtBQUk7QUFBQyxVQUFHQSxHQUFFLE1BQU0sS0FBSTtBQUFDLFlBQUlKLEtBQUVJLEdBQUUsTUFBTTtBQUFJLFFBQUFBLEdBQUUsSUFBSSxJQUFJLENBQUMsSUFBRSxFQUFFSixJQUFFQSxHQUFFLElBQUksS0FBSUEsR0FBRSxJQUFJLEdBQUc7QUFBQSxNQUFDO0FBQUMsVUFBSUM7QUFBRSxXQUFJRyxHQUFFLFNBQVMsRUFBQyxLQUFJQSxHQUFFLE1BQUksS0FBSSxDQUFDLEdBQUVILEtBQUVHLEdBQUUsRUFBRSxJQUFHO0FBQUksUUFBQUgsR0FBRTtJQUFhO0FBQUEsRUFBQyxHQUFFSyxLQUFFLFNBQUtMLEdBQUU7QUFBSSxFQUFBRyxHQUFFLFNBQU9FLE1BQUdGLEdBQUUsU0FBUyxFQUFDLEtBQUlBLEdBQUUsTUFBSUEsR0FBRSxJQUFJLElBQUksQ0FBQyxFQUFDLENBQUMsR0FBRSxFQUFFLEtBQUtQLElBQUVBLEVBQUM7QUFBQyxHQUFFLEVBQUUsVUFBVSx1QkFBcUIsV0FBVTtBQUFDLE9BQUssSUFBRSxDQUFFO0FBQUEsR0FBRSxFQUFFLFVBQVUsU0FBTyxTQUFTLEdBQUVVLElBQUU7QUFBQyxNQUFHLEtBQUssS0FBSTtBQUFDLFFBQUcsS0FBSyxJQUFJLEtBQUk7QUFBQyxVQUFJSCxLQUFFLFNBQVMsY0FBYyxLQUFLLEdBQUVMLEtBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxFQUFFO0FBQUksV0FBSyxJQUFJLElBQUksQ0FBQyxJQUFFLEVBQUUsS0FBSyxLQUFJSyxJQUFFTCxHQUFFLE1BQUlBLEdBQUUsR0FBRztBQUFBLElBQUM7QUFBQyxTQUFLLE1BQUk7QUFBQSxFQUFJO0FBQUMsTUFBSUYsS0FBRVUsR0FBRSxPQUFLTixjQUFFQyxVQUFFLE1BQUssRUFBRSxRQUFRO0FBQUUsU0FBT0wsT0FBSUEsR0FBRSxNQUFJLE9BQU0sQ0FBQ0ksY0FBRUMsVUFBRSxNQUFLSyxHQUFFLE1BQUksT0FBSyxFQUFFLFFBQVEsR0FBRVYsRUFBQztBQUFDO0FBQUUsSUFBSSxJQUFFLFNBQVMsR0FBRUksSUFBRU0sSUFBRTtBQUFDLE1BQUcsRUFBRUEsR0FBRSxDQUFDLE1BQUlBLEdBQUUsQ0FBQyxLQUFHLEVBQUUsRUFBRSxPQUFPTixFQUFDLEdBQUUsRUFBRSxNQUFNLGdCQUFjLFFBQU0sRUFBRSxNQUFNLFlBQVksQ0FBQyxLQUFHLENBQUMsRUFBRSxFQUFFO0FBQU0sU0FBSU0sS0FBRSxFQUFFLEdBQUVBLE1BQUc7QUFBQyxhQUFLQSxHQUFFLFNBQU87QUFBRyxRQUFBQSxHQUFFLElBQUcsRUFBSTtBQUFDLFVBQUdBLEdBQUUsQ0FBQyxJQUFFQSxHQUFFLENBQUM7QUFBRTtBQUFNLFFBQUUsSUFBRUEsS0FBRUEsR0FBRSxDQUFDO0FBQUEsSUFBQztBQUFDO0FBQUEsQ0FBbXBCLEVBQUUsWUFBVSxJQUFJUCxhQUFHLE1BQUksU0FBUyxHQUFFO0FBQUMsTUFBSUMsS0FBRSxNQUFLTSxLQUFFLEVBQUVOLEdBQUUsR0FBRyxHQUFFRyxLQUFFSCxHQUFFLEVBQUUsSUFBSSxDQUFDO0FBQUUsU0FBT0csR0FBRSxDQUFDLEtBQUksU0FBU0YsSUFBRTtBQUFDLFFBQUlILEtBQUUsV0FBVTtBQUFDLE1BQUFFLEdBQUUsTUFBTSxlQUFhRyxHQUFFLEtBQUtGLEVBQUMsR0FBRSxFQUFFRCxJQUFFLEdBQUVHLEVBQUMsS0FBR0YsR0FBQztBQUFBLElBQUU7QUFBRSxJQUFBSyxLQUFFQSxHQUFFUixFQUFDLElBQUVBO0VBQUc7QUFBQyxHQUFFLEVBQUUsVUFBVSxTQUFPLFNBQVMsR0FBRTtBQUFDLE9BQUssSUFBRSxNQUFLLEtBQUssSUFBRSxvQkFBSTtBQUFJLE1BQUlFLEtBQUVHLGFBQUUsRUFBRSxRQUFRO0FBQUUsSUFBRSxlQUFhLFFBQU0sRUFBRSxZQUFZLENBQUMsS0FBR0gsR0FBRSxRQUFPO0FBQUcsV0FBUU0sS0FBRU4sR0FBRSxRQUFPTTtBQUFLLFNBQUssRUFBRSxJQUFJTixHQUFFTSxFQUFDLEdBQUUsS0FBSyxJQUFFLENBQUMsR0FBRSxHQUFFLEtBQUssQ0FBQyxDQUFDO0FBQUUsU0FBTyxFQUFFO0FBQVEsR0FBRSxFQUFFLFVBQVUscUJBQW1CLEVBQUUsVUFBVSxvQkFBa0IsV0FBVTtBQUFDLE1BQUksSUFBRTtBQUFLLE9BQUssRUFBRSxRQUFRLFNBQVNOLElBQUVNLElBQUU7QUFBQyxNQUFFLEdBQUVBLElBQUVOLEVBQUM7QUFBQSxFQUFDLENBQUM7QUFBQztBQUFFLElBQUksSUFBRSxlQUFhLE9BQU8sVUFBUSxPQUFPLE9BQUssT0FBTyxJQUFJLGVBQWUsS0FBRyxPQUFNLElBQUUsMlJBQTBSLElBQUUsb0NBQW1DLElBQUUsYUFBWSxJQUFFLGVBQWEsT0FBTyxVQUFTLElBQUUsU0FBUyxHQUFFO0FBQUMsVUFBTyxlQUFhLE9BQU8sVUFBUSxZQUFVLE9BQU8sT0FBTSxJQUFHLGdCQUFjLGNBQWMsS0FBSyxDQUFDO0FBQUM7QUFBZ0xELFVBQUUsVUFBVSxtQkFBaUIsQ0FBRSxHQUFDLENBQUMsc0JBQXFCLDZCQUE0QixxQkFBcUIsRUFBRSxRQUFRLFNBQVNDLElBQUU7QUFBQyxTQUFPLGVBQWVELFVBQUUsV0FBVUMsSUFBRSxFQUFDLGNBQWEsTUFBRyxLQUFJLFdBQVU7QUFBQyxXQUFPLEtBQUssWUFBVUEsRUFBQztBQUFBLEVBQUMsR0FBRSxLQUFJLFNBQVMsR0FBRTtBQUFDLFdBQU8sZUFBZSxNQUFLQSxJQUFFLEVBQUMsY0FBYSxNQUFHLFVBQVMsTUFBRyxPQUFNLEVBQUMsQ0FBQztBQUFBLEVBQUMsRUFBQyxDQUFDO0FBQUMsQ0FBQztBQUFFLElBQUksSUFBRU0sUUFBRTtBQUFNLFNBQVMsSUFBRzs7QUFBRSxTQUFTLElBQUc7QUFBQyxTQUFPLEtBQUs7QUFBWTtBQUFDLFNBQVMsS0FBSTtBQUFDLFNBQU8sS0FBSztBQUFnQjtBQUFDQSxRQUFFLFFBQU0sU0FBUyxHQUFFO0FBQUMsU0FBTyxNQUFJLElBQUUsRUFBRSxDQUFDLElBQUcsRUFBRSxVQUFRLEdBQUUsRUFBRSx1QkFBcUIsR0FBRSxFQUFFLHFCQUFtQixJQUFHLEVBQUUsY0FBWTtBQUFDO0FBQUssSUFBSSxLQUFHLEVBQUMsWUFBVyxPQUFHLGNBQWEsTUFBRyxLQUFJLFdBQVU7QUFBQyxTQUFPLEtBQUs7QUFBSyxFQUFDLEdBQUUsS0FBR0EsUUFBRTtBQUFNQSxRQUFFLFFBQU0sU0FBUyxHQUFFO0FBQUMsY0FBVSxPQUFPLEVBQUUsUUFBTSxTQUFTUCxJQUFFO0FBQUMsUUFBSUMsS0FBRUQsR0FBRSxPQUFNTyxLQUFFUCxHQUFFLE1BQUtFLEtBQUUsQ0FBRTtBQUFDLGFBQVFILE1BQUtFLElBQUU7QUFBQyxVQUFJSixLQUFFSSxHQUFFRixFQUFDO0FBQUUsVUFBRyxFQUFFLFlBQVVBLE1BQUcsa0JBQWlCRSxNQUFHLFFBQU1KLE1BQUcsS0FBRyxlQUFhRSxNQUFHLGVBQWFRLE1BQUcsWUFBVVIsTUFBRyxnQkFBY0EsS0FBRztBQUFDLFlBQUljLEtBQUVkLEdBQUUsWUFBYTtBQUFDLDJCQUFpQkEsTUFBRyxXQUFVRSxNQUFHLFFBQU1BLEdBQUUsUUFBTUYsS0FBRSxVQUFRLGVBQWFBLE1BQUcsU0FBS0YsS0FBRUEsS0FBRSxLQUFHLG9CQUFrQmdCLEtBQUVkLEtBQUUsZUFBYSxlQUFhYyxNQUFHLFlBQVVOLE1BQUcsZUFBYUEsTUFBRyxFQUFFTixHQUFFLElBQUksSUFBRSxjQUFZWSxLQUFFZCxLQUFFLGNBQVksYUFBV2MsS0FBRWQsS0FBRSxlQUFhLEVBQUUsS0FBS0EsRUFBQyxJQUFFQSxLQUFFYyxLQUFFLE9BQUtOLEdBQUUsUUFBUSxHQUFHLEtBQUcsRUFBRSxLQUFLUixFQUFDLElBQUVBLEtBQUVBLEdBQUUsUUFBUSxHQUFFLEtBQUssRUFBRSxZQUFXLElBQUcsU0FBT0YsT0FBSUEsS0FBRSxVQUFRZ0IsS0FBRWQsS0FBRSxXQUFVLGNBQVljLE1BQUdYLEdBQUVILEtBQUVjLEVBQUMsTUFBSWQsS0FBRSxtQkFBa0JHLEdBQUVILEVBQUMsSUFBRUY7QUFBQSxNQUFDO0FBQUEsSUFBQztBQUFDLGdCQUFVVSxNQUFHTCxHQUFFLFlBQVUsTUFBTSxRQUFRQSxHQUFFLEtBQUssTUFBSUEsR0FBRSxRQUFNRSxhQUFFSCxHQUFFLFFBQVEsRUFBRSxRQUFRLFNBQVNELElBQUU7QUFBQyxNQUFBQSxHQUFFLE1BQU0sV0FBUyxNQUFJRSxHQUFFLE1BQU0sUUFBUUYsR0FBRSxNQUFNLEtBQUs7QUFBQSxJQUFDLENBQUMsSUFBRyxZQUFVTyxNQUFHLFFBQU1MLEdBQUUsaUJBQWVBLEdBQUUsUUFBTUUsYUFBRUgsR0FBRSxRQUFRLEVBQUUsUUFBUSxTQUFTRCxJQUFFO0FBQUMsTUFBQUEsR0FBRSxNQUFNLFdBQVNFLEdBQUUsV0FBUyxNQUFJQSxHQUFFLGFBQWEsUUFBUUYsR0FBRSxNQUFNLEtBQUssSUFBRUUsR0FBRSxnQkFBY0YsR0FBRSxNQUFNO0FBQUEsSUFBSyxDQUFDLElBQUdDLEdBQUUsU0FBTyxDQUFDQSxHQUFFLGFBQVdDLEdBQUUsUUFBTUQsR0FBRSxPQUFNLE9BQU8sZUFBZUMsSUFBRSxhQUFZLEVBQUUsTUFBSUQsR0FBRSxhQUFXLENBQUNBLEdBQUUsU0FBT0EsR0FBRSxTQUFPQSxHQUFFLGVBQWFDLEdBQUUsUUFBTUEsR0FBRSxZQUFVRCxHQUFFLFlBQVdELEdBQUUsUUFBTUU7QUFBQSxFQUFDLEVBQUUsQ0FBQyxHQUFFLEVBQUUsV0FBUyxHQUFFLE1BQUksR0FBRyxDQUFDO0FBQUM7QUFBRSxJQUFJLEtBQUdLLFFBQUU7QUFBSUEsUUFBRSxNQUFJLFNBQVMsR0FBRTtBQUFDLFFBQUksR0FBRyxDQUFDLEdBQUssRUFBRTtBQUFHO0FBQUUsSUFBSSxLQUFHQSxRQUFFO0FBQU9BLFFBQUUsU0FBTyxTQUFTLEdBQUU7QUFBQyxRQUFJLEdBQUcsQ0FBQztBQUFFLE1BQUlOLEtBQUUsRUFBRSxPQUFNTSxLQUFFLEVBQUU7QUFBSSxVQUFNQSxNQUFHLGVBQWEsRUFBRSxRQUFNLFdBQVVOLE1BQUdBLEdBQUUsVUFBUU0sR0FBRSxVQUFRQSxHQUFFLFFBQU0sUUFBTU4sR0FBRSxRQUFNLEtBQUdBLEdBQUU7QUFBYzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDRXY4T2EsTUFBQUEsY0FBY0EsQ0FBQ0MsUUFBUSxRQUFTO0FBQzNDLFFBQU0sQ0FBQ0MsUUFBUUMsU0FBUyxJQUFJQyxFQUFTLEtBQUs7QUFDcENDLFFBQUFBLFdBQVdDLElBQU8sSUFBSTtBQUU1QixRQUFNQyxXQUFXQSxNQUFNO0FBQ3JCQyxpQkFBYUgsU0FBU0ksT0FBTztBQUNuQkMsY0FBQUEsQ0FBQUEsU0FBUSxDQUFDQSxJQUFJO0FBQUEsRUFBQTtBQUd6QkMsSUFBVSxNQUFNO0FBQ0xGLGFBQUFBLFVBQVVHLFdBQVcsTUFBTTtBQUNsQ1QsZ0JBQVUsSUFBSTtBQUFBLE9BQ2JGLEtBQUs7QUFFRCxXQUFBLE1BQU1PLGFBQWFILFNBQVNJLE9BQU87QUFBQSxFQUFBLEdBQ3pDLENBQUNSLEtBQUssQ0FBQztBQUVILFNBQUE7QUFBQSxJQUNMQztBQUFBQSxJQUNBSztBQUFBQSxFQUFBQTtBQUVKO0FDdkI4RCxJQUFJLElBQUU7QUFBRSxTQUFTLEVBQUV0QixJQUFFUSxJQUFFLEdBQUVOLElBQUVJLElBQUVRLElBQUU7QUFBQyxNQUFJYyxJQUFFekIsSUFBRTBCLEtBQUUsQ0FBQTtBQUFHLE9BQUkxQixNQUFLSztBQUFFLGFBQU9MLEtBQUV5QixLQUFFcEIsR0FBRUwsRUFBQyxJQUFFMEIsR0FBRTFCLEVBQUMsSUFBRUssR0FBRUwsRUFBQztBQUFFLE1BQUlMLEtBQUUsRUFBQyxNQUFLRSxJQUFFLE9BQU02QixJQUFFLEtBQUksR0FBRSxLQUFJRCxJQUFFLEtBQUksTUFBSyxJQUFHLE1BQUssS0FBSSxHQUFFLEtBQUksTUFBSyxLQUFJLFFBQU8sS0FBSSxNQUFLLEtBQUksTUFBSyxhQUFZLFFBQU8sS0FBSSxFQUFFLEdBQUUsVUFBU3RCLElBQUUsUUFBT1EsR0FBQztBQUFFLE1BQUcsY0FBWSxPQUFPZCxPQUFJNEIsS0FBRTVCLEdBQUU7QUFBYyxTQUFJRyxNQUFLeUI7QUFBRSxpQkFBU0MsR0FBRTFCLEVBQUMsTUFBSTBCLEdBQUUxQixFQUFDLElBQUV5QixHQUFFekIsRUFBQztBQUFHLFNBQU9FLFFBQUUsU0FBT0EsUUFBRSxNQUFNUCxFQUFDLEdBQUVBO0FBQUM7QUNFdFksTUFBTWdDLFFBQVFDLGNBQWU7QUFFcEMsTUFBTUMsZUFBZUEsQ0FBQztBQUFBLEVBQUVDO0FBQUFBLEVBQVVDO0FBQU0sTUFBTTtBQUNyQ0MsU0FBQUEsRUFBQ0wsTUFBTU0sVUFBUTtBQUFBLElBQUNGO0FBQUFBLElBQWFEO0FBQUFBLEVBQUFBLENBQTRCO0FBQ2xFO0FDSGFJLE1BQUFBLFNBQVNBLENBQUNDLFVBQTBCLENBQUNDLFFBQXVCQyxVQUN2RUMsU0FBYU4sRUFBQ0gsY0FBWTtBQUFBLEVBQUNFLE9BQU9NO0FBQUFBLEVBQU1QLFVBQUVLO0FBQUssQ0FBQSxHQUFrQkMsTUFBc0I7QUNENUVHLE1BQUFBLGtCQUFrQixNQUF3QkMsSUFBbUJiLEtBQUs7QUNJL0UsU0FBU2MsbUJBQWlCO0FBQ3hCLE9BQUssV0FBVztBQUNoQixPQUFLLE9BQU87QUFDZDtBQUVBLElBQUEsa0JBQWlCQTtBQ29CakIsU0FBU0MsS0FBRyxPQUFPLE9BQU87QUFDeEIsU0FBTyxVQUFVLFNBQVUsVUFBVSxTQUFTLFVBQVU7QUFDMUQ7QUFFQSxJQUFBLE9BQWlCQTtBQ3BDakIsSUFBSUEsT0FBS0M7QUFVVCxTQUFTQyxlQUFhLE9BQU8sS0FBSztBQUNoQyxNQUFJLFNBQVMsTUFBTTtBQUNuQixTQUFPLFVBQVU7QUFDZixRQUFJRixLQUFHLE1BQU0sTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUc7QUFDN0IsYUFBTztBQUFBLElBQ1I7QUFBQSxFQUNGO0FBQ0QsU0FBTztBQUNUO0FBRUEsSUFBQSxnQkFBaUJFO0FDcEJqQixJQUFJQSxpQkFBZUQ7QUFHbkIsSUFBSSxhQUFhLE1BQU07QUFHdkIsSUFBSSxTQUFTLFdBQVc7QUFXeEIsU0FBU0Usa0JBQWdCLEtBQUs7QUFDNUIsTUFBSSxPQUFPLEtBQUssVUFDWkMsU0FBUUYsZUFBYSxNQUFNLEdBQUc7QUFFbEMsTUFBSUUsU0FBUSxHQUFHO0FBQ2IsV0FBTztBQUFBLEVBQ1I7QUFDRCxNQUFJLFlBQVksS0FBSyxTQUFTO0FBQzlCLE1BQUlBLFVBQVMsV0FBVztBQUN0QixTQUFLLElBQUc7QUFBQSxFQUNaLE9BQVM7QUFDTCxXQUFPLEtBQUssTUFBTUEsUUFBTyxDQUFDO0FBQUEsRUFDM0I7QUFDRCxJQUFFLEtBQUs7QUFDUCxTQUFPO0FBQ1Q7QUFFQSxJQUFBLG1CQUFpQkQ7QUNsQ2pCLElBQUlELGlCQUFlRDtBQVduQixTQUFTSSxlQUFhLEtBQUs7QUFDekIsTUFBSSxPQUFPLEtBQUssVUFDWkQsU0FBUUYsZUFBYSxNQUFNLEdBQUc7QUFFbEMsU0FBT0UsU0FBUSxJQUFJLFNBQVksS0FBS0EsTUFBSyxFQUFFLENBQUM7QUFDOUM7QUFFQSxJQUFBLGdCQUFpQkM7QUNsQmpCLElBQUlILGlCQUFlRDtBQVduQixTQUFTSyxlQUFhLEtBQUs7QUFDekIsU0FBT0osZUFBYSxLQUFLLFVBQVUsR0FBRyxJQUFJO0FBQzVDO0FBRUEsSUFBQSxnQkFBaUJJO0FDZmpCLElBQUksZUFBZUw7QUFZbkIsU0FBU00sZUFBYSxLQUFLLE9BQU87QUFDaEMsTUFBSSxPQUFPLEtBQUssVUFDWkgsU0FBUSxhQUFhLE1BQU0sR0FBRztBQUVsQyxNQUFJQSxTQUFRLEdBQUc7QUFDYixNQUFFLEtBQUs7QUFDUCxTQUFLLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQztBQUFBLEVBQzFCLE9BQVM7QUFDTCxTQUFLQSxNQUFLLEVBQUUsQ0FBQyxJQUFJO0FBQUEsRUFDbEI7QUFDRCxTQUFPO0FBQ1Q7QUFFQSxJQUFBLGdCQUFpQkc7QUN6QmpCLElBQUksaUJBQWlCTixpQkFDakIsa0JBQWtCTyxrQkFDbEIsZUFBZUMsZUFDZixlQUFlQyxlQUNmLGVBQWVDO0FBU25CLFNBQVNDLFlBQVUsU0FBUztBQUMxQixNQUFJUixTQUFRLElBQ1IsU0FBUyxXQUFXLE9BQU8sSUFBSSxRQUFRO0FBRTNDLE9BQUssTUFBSztBQUNWLFNBQU8sRUFBRUEsU0FBUSxRQUFRO0FBQ3ZCLFFBQUksUUFBUSxRQUFRQSxNQUFLO0FBQ3pCLFNBQUssSUFBSSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztBQUFBLEVBQzVCO0FBQ0g7QUFHQVEsWUFBVSxVQUFVLFFBQVE7QUFDNUJBLFlBQVUsVUFBVSxRQUFRLElBQUk7QUFDaENBLFlBQVUsVUFBVSxNQUFNO0FBQzFCQSxZQUFVLFVBQVUsTUFBTTtBQUMxQkEsWUFBVSxVQUFVLE1BQU07QUFFMUIsSUFBQSxhQUFpQkE7QUMvQmpCLElBQUlBLGNBQVlYO0FBU2hCLFNBQVNZLGVBQWE7QUFDcEIsT0FBSyxXQUFXLElBQUlEO0FBQ3BCLE9BQUssT0FBTztBQUNkO0FBRUEsSUFBQSxjQUFpQkM7QUNMakIsU0FBU0MsY0FBWSxLQUFLO0FBQ3hCLE1BQUksT0FBTyxLQUFLLFVBQ1osU0FBUyxLQUFLLFFBQVEsRUFBRSxHQUFHO0FBRS9CLE9BQUssT0FBTyxLQUFLO0FBQ2pCLFNBQU87QUFDVDtBQUVBLElBQUEsZUFBaUJBO0FDUmpCLFNBQVNDLFdBQVMsS0FBSztBQUNyQixTQUFPLEtBQUssU0FBUyxJQUFJLEdBQUc7QUFDOUI7QUFFQSxJQUFBLFlBQWlCQTtBQ0pqQixTQUFTQyxXQUFTLEtBQUs7QUFDckIsU0FBTyxLQUFLLFNBQVMsSUFBSSxHQUFHO0FBQzlCO0FBRUEsSUFBQSxZQUFpQkE7QUNaakIsSUFBSUMsZUFBYSxPQUFPQyxrQkFBVSxZQUFZQSxrQkFBVUEsZUFBTyxXQUFXLFVBQVVBO0FBRXBGLElBQUEsY0FBaUJEO0FDSGpCLElBQUksYUFBYWhCO0FBR2pCLElBQUksV0FBVyxPQUFPLFFBQVEsWUFBWSxRQUFRLEtBQUssV0FBVyxVQUFVO0FBRzVFLElBQUlrQixTQUFPLGNBQWMsWUFBWSxTQUFTLGFBQWEsRUFBQztBQUU1RCxJQUFBLFFBQWlCQTtBQ1JqQixJQUFJQSxTQUFPbEI7QUFHWCxJQUFJbUIsV0FBU0QsT0FBSztBQUVsQixJQUFBLFVBQWlCQztBQ0xqQixJQUFJQSxXQUFTbkI7QUFHYixJQUFJb0IsZ0JBQWMsT0FBTztBQUd6QixJQUFJQyxtQkFBaUJELGNBQVk7QUFPakMsSUFBSUUseUJBQXVCRixjQUFZO0FBR3ZDLElBQUlHLG1CQUFpQkosV0FBU0EsU0FBTyxjQUFjO0FBU25ELFNBQVNLLFlBQVUsT0FBTztBQUN4QixNQUFJLFFBQVFILGlCQUFlLEtBQUssT0FBT0UsZ0JBQWMsR0FDakQsTUFBTSxNQUFNQSxnQkFBYztBQUU5QixNQUFJO0FBQ0YsVUFBTUEsZ0JBQWMsSUFBSTtBQUN4QixRQUFJLFdBQVc7QUFBQSxFQUNuQixTQUFXN0QsSUFBUDtBQUFBLEVBQVk7QUFFZCxNQUFJLFNBQVM0RCx1QkFBcUIsS0FBSyxLQUFLO0FBQzVDLE1BQUksVUFBVTtBQUNaLFFBQUksT0FBTztBQUNULFlBQU1DLGdCQUFjLElBQUk7QUFBQSxJQUM5QixPQUFXO0FBQ0wsYUFBTyxNQUFNQSxnQkFBYztBQUFBLElBQzVCO0FBQUEsRUFDRjtBQUNELFNBQU87QUFDVDtBQUVBLElBQUEsYUFBaUJDO0FDNUNqQixJQUFJSixnQkFBYyxPQUFPO0FBT3pCLElBQUksdUJBQXVCQSxjQUFZO0FBU3ZDLFNBQVNLLGlCQUFlLE9BQU87QUFDN0IsU0FBTyxxQkFBcUIsS0FBSyxLQUFLO0FBQ3hDO0FBRUEsSUFBQSxrQkFBaUJBO0FDckJqQixJQUFJTixXQUFTbkIsU0FDVCxZQUFZTyxZQUNaLGlCQUFpQkM7QUFHckIsSUFBSSxVQUFVLGlCQUNWLGVBQWU7QUFHbkIsSUFBSSxpQkFBaUJXLFdBQVNBLFNBQU8sY0FBYztBQVNuRCxTQUFTTyxhQUFXLE9BQU87QUFDekIsTUFBSSxTQUFTLE1BQU07QUFDakIsV0FBTyxVQUFVLFNBQVksZUFBZTtBQUFBLEVBQzdDO0FBQ0QsU0FBUSxrQkFBa0Isa0JBQWtCLE9BQU8sS0FBSyxJQUNwRCxVQUFVLEtBQUssSUFDZixlQUFlLEtBQUs7QUFDMUI7QUFFQSxJQUFBLGNBQWlCQTtBQ0ZqQixTQUFTQyxXQUFTLE9BQU87QUFDdkIsTUFBSSxPQUFPLE9BQU87QUFDbEIsU0FBTyxTQUFTLFNBQVMsUUFBUSxZQUFZLFFBQVE7QUFDdkQ7QUFFQSxJQUFBLGFBQWlCQTtBQzlCakIsSUFBSUQsZUFBYTFCLGFBQ2IyQixhQUFXcEI7QUFHZixJQUFJLFdBQVcsMEJBQ1hxQixZQUFVLHFCQUNWLFNBQVMsOEJBQ1QsV0FBVztBQW1CZixTQUFTQyxhQUFXLE9BQU87QUFDekIsTUFBSSxDQUFDRixXQUFTLEtBQUssR0FBRztBQUNwQixXQUFPO0FBQUEsRUFDUjtBQUdELE1BQUksTUFBTUQsYUFBVyxLQUFLO0FBQzFCLFNBQU8sT0FBT0UsYUFBVyxPQUFPLFVBQVUsT0FBTyxZQUFZLE9BQU87QUFDdEU7QUFFQSxJQUFBLGVBQWlCQztBQ3BDakIsSUFBSVgsU0FBT2xCO0FBR1gsSUFBSThCLGVBQWFaLE9BQUssb0JBQW9CO0FBRTFDLElBQUEsY0FBaUJZO0FDTGpCLElBQUksYUFBYTlCO0FBR2pCLElBQUksYUFBYyxXQUFXO0FBQzNCLE1BQUksTUFBTSxTQUFTLEtBQUssY0FBYyxXQUFXLFFBQVEsV0FBVyxLQUFLLFlBQVksRUFBRTtBQUN2RixTQUFPLE1BQU8sbUJBQW1CLE1BQU87QUFDMUMsRUFBQztBQVNELFNBQVMrQixXQUFTLE1BQU07QUFDdEIsU0FBTyxDQUFDLENBQUMsY0FBZSxjQUFjO0FBQ3hDO0FBRUEsSUFBQSxZQUFpQkE7QUNsQmpCLElBQUlDLGNBQVksU0FBUztBQUd6QixJQUFJQyxpQkFBZUQsWUFBVTtBQVM3QixTQUFTRSxXQUFTLE1BQU07QUFDdEIsTUFBSSxRQUFRLE1BQU07QUFDaEIsUUFBSTtBQUNGLGFBQU9ELGVBQWEsS0FBSyxJQUFJO0FBQUEsSUFDbkMsU0FBYXZFLElBQVA7QUFBQSxJQUFZO0FBQ2QsUUFBSTtBQUNGLGFBQVEsT0FBTztBQUFBLElBQ3JCLFNBQWFBLElBQVA7QUFBQSxJQUFZO0FBQUEsRUFDZjtBQUNELFNBQU87QUFDVDtBQUVBLElBQUEsWUFBaUJ3RTtBQ3pCakIsSUFBSUwsZUFBYTdCLGNBQ2IsV0FBV08sV0FDWG9CLGFBQVduQixZQUNYLFdBQVdDO0FBTWYsSUFBSSxlQUFlO0FBR25CLElBQUksZUFBZTtBQUduQixJQUFJdUIsY0FBWSxTQUFTLFdBQ3JCWixnQkFBYyxPQUFPO0FBR3pCLElBQUlhLGlCQUFlRCxZQUFVO0FBRzdCLElBQUlYLG1CQUFpQkQsY0FBWTtBQUdqQyxJQUFJLGFBQWE7QUFBQSxFQUFPLE1BQ3RCYSxlQUFhLEtBQUtaLGdCQUFjLEVBQUUsUUFBUSxjQUFjLE1BQU0sRUFDN0QsUUFBUSwwREFBMEQsT0FBTyxJQUFJO0FBQ2hGO0FBVUEsU0FBU2MsZUFBYSxPQUFPO0FBQzNCLE1BQUksQ0FBQ1IsV0FBUyxLQUFLLEtBQUssU0FBUyxLQUFLLEdBQUc7QUFDdkMsV0FBTztBQUFBLEVBQ1I7QUFDRCxNQUFJLFVBQVVFLGFBQVcsS0FBSyxJQUFJLGFBQWE7QUFDL0MsU0FBTyxRQUFRLEtBQUssU0FBUyxLQUFLLENBQUM7QUFDckM7QUFFQSxJQUFBLGdCQUFpQk07QUN0Q2pCLFNBQVNDLFdBQVMsUUFBUSxLQUFLO0FBQzdCLFNBQU8sVUFBVSxPQUFPLFNBQVksT0FBTyxHQUFHO0FBQ2hEO0FBRUEsSUFBQSxZQUFpQkE7QUNaakIsSUFBSSxlQUFlcEMsZUFDZixXQUFXTztBQVVmLFNBQVM4QixZQUFVLFFBQVEsS0FBSztBQUM5QixNQUFJLFFBQVEsU0FBUyxRQUFRLEdBQUc7QUFDaEMsU0FBTyxhQUFhLEtBQUssSUFBSSxRQUFRO0FBQ3ZDO0FBRUEsSUFBQSxhQUFpQkE7QUNoQmpCLElBQUlBLGNBQVlyQyxZQUNaa0IsU0FBT1g7QUFHWCxJQUFJK0IsUUFBTUQsWUFBVW5CLFFBQU0sS0FBSztBQUUvQixJQUFBLE9BQWlCb0I7QUNOakIsSUFBSUQsY0FBWXJDO0FBR2hCLElBQUl1QyxpQkFBZUYsWUFBVSxRQUFRLFFBQVE7QUFFN0MsSUFBQSxnQkFBaUJFO0FDTGpCLElBQUlBLGlCQUFldkM7QUFTbkIsU0FBU3dDLGNBQVk7QUFDbkIsT0FBSyxXQUFXRCxpQkFBZUEsZUFBYSxJQUFJLElBQUksQ0FBQTtBQUNwRCxPQUFLLE9BQU87QUFDZDtBQUVBLElBQUEsYUFBaUJDO0FDSmpCLFNBQVNDLGFBQVcsS0FBSztBQUN2QixNQUFJLFNBQVMsS0FBSyxJQUFJLEdBQUcsS0FBSyxPQUFPLEtBQUssU0FBUyxHQUFHO0FBQ3RELE9BQUssUUFBUSxTQUFTLElBQUk7QUFDMUIsU0FBTztBQUNUO0FBRUEsSUFBQSxjQUFpQkE7QUNoQmpCLElBQUlGLGlCQUFldkM7QUFHbkIsSUFBSTBDLG1CQUFpQjtBQUdyQixJQUFJdEIsZ0JBQWMsT0FBTztBQUd6QixJQUFJQyxtQkFBaUJELGNBQVk7QUFXakMsU0FBU3VCLFVBQVEsS0FBSztBQUNwQixNQUFJLE9BQU8sS0FBSztBQUNoQixNQUFJSixnQkFBYztBQUNoQixRQUFJLFNBQVMsS0FBSyxHQUFHO0FBQ3JCLFdBQU8sV0FBV0csbUJBQWlCLFNBQVk7QUFBQSxFQUNoRDtBQUNELFNBQU9yQixpQkFBZSxLQUFLLE1BQU0sR0FBRyxJQUFJLEtBQUssR0FBRyxJQUFJO0FBQ3REO0FBRUEsSUFBQSxXQUFpQnNCO0FDN0JqQixJQUFJSixpQkFBZXZDO0FBR25CLElBQUlvQixnQkFBYyxPQUFPO0FBR3pCLElBQUlDLG1CQUFpQkQsY0FBWTtBQVdqQyxTQUFTd0IsVUFBUSxLQUFLO0FBQ3BCLE1BQUksT0FBTyxLQUFLO0FBQ2hCLFNBQU9MLGlCQUFnQixLQUFLLEdBQUcsTUFBTSxTQUFhbEIsaUJBQWUsS0FBSyxNQUFNLEdBQUc7QUFDakY7QUFFQSxJQUFBLFdBQWlCdUI7QUN0QmpCLElBQUksZUFBZTVDO0FBR25CLElBQUksaUJBQWlCO0FBWXJCLFNBQVM2QyxVQUFRLEtBQUssT0FBTztBQUMzQixNQUFJLE9BQU8sS0FBSztBQUNoQixPQUFLLFFBQVEsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJO0FBQ2pDLE9BQUssR0FBRyxJQUFLLGdCQUFnQixVQUFVLFNBQWEsaUJBQWlCO0FBQ3JFLFNBQU87QUFDVDtBQUVBLElBQUEsV0FBaUJBO0FDdEJqQixJQUFJLFlBQVk3QyxZQUNaLGFBQWFPLGFBQ2IsVUFBVUMsVUFDVixVQUFVQyxVQUNWLFVBQVVDO0FBU2QsU0FBU29DLE9BQUssU0FBUztBQUNyQixNQUFJM0MsU0FBUSxJQUNSLFNBQVMsV0FBVyxPQUFPLElBQUksUUFBUTtBQUUzQyxPQUFLLE1BQUs7QUFDVixTQUFPLEVBQUVBLFNBQVEsUUFBUTtBQUN2QixRQUFJLFFBQVEsUUFBUUEsTUFBSztBQUN6QixTQUFLLElBQUksTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFBQSxFQUM1QjtBQUNIO0FBR0EyQyxPQUFLLFVBQVUsUUFBUTtBQUN2QkEsT0FBSyxVQUFVLFFBQVEsSUFBSTtBQUMzQkEsT0FBSyxVQUFVLE1BQU07QUFDckJBLE9BQUssVUFBVSxNQUFNO0FBQ3JCQSxPQUFLLFVBQVUsTUFBTTtBQUVyQixJQUFBLFFBQWlCQTtBQy9CakIsSUFBSSxPQUFPOUMsT0FDUFcsY0FBWUosWUFDWitCLFFBQU05QjtBQVNWLFNBQVN1QyxrQkFBZ0I7QUFDdkIsT0FBSyxPQUFPO0FBQ1osT0FBSyxXQUFXO0FBQUEsSUFDZCxRQUFRLElBQUk7QUFBQSxJQUNaLE9BQU8sS0FBS1QsU0FBTzNCO0FBQUFBLElBQ25CLFVBQVUsSUFBSTtBQUFBLEVBQ2xCO0FBQ0E7QUFFQSxJQUFBLGlCQUFpQm9DO0FDYmpCLFNBQVNDLFlBQVUsT0FBTztBQUN4QixNQUFJLE9BQU8sT0FBTztBQUNsQixTQUFRLFFBQVEsWUFBWSxRQUFRLFlBQVksUUFBUSxZQUFZLFFBQVEsWUFDdkUsVUFBVSxjQUNWLFVBQVU7QUFDakI7QUFFQSxJQUFBLGFBQWlCQTtBQ2RqQixJQUFJLFlBQVloRDtBQVVoQixTQUFTaUQsYUFBVyxLQUFLLEtBQUs7QUFDNUIsTUFBSSxPQUFPLElBQUk7QUFDZixTQUFPLFVBQVUsR0FBRyxJQUNoQixLQUFLLE9BQU8sT0FBTyxXQUFXLFdBQVcsTUFBTSxJQUMvQyxLQUFLO0FBQ1g7QUFFQSxJQUFBLGNBQWlCQTtBQ2pCakIsSUFBSUEsZUFBYWpEO0FBV2pCLFNBQVNrRCxpQkFBZSxLQUFLO0FBQzNCLE1BQUksU0FBU0QsYUFBVyxNQUFNLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRztBQUNoRCxPQUFLLFFBQVEsU0FBUyxJQUFJO0FBQzFCLFNBQU87QUFDVDtBQUVBLElBQUEsa0JBQWlCQztBQ2pCakIsSUFBSUQsZUFBYWpEO0FBV2pCLFNBQVNtRCxjQUFZLEtBQUs7QUFDeEIsU0FBT0YsYUFBVyxNQUFNLEdBQUcsRUFBRSxJQUFJLEdBQUc7QUFDdEM7QUFFQSxJQUFBLGVBQWlCRTtBQ2ZqQixJQUFJRixlQUFhakQ7QUFXakIsU0FBU29ELGNBQVksS0FBSztBQUN4QixTQUFPSCxhQUFXLE1BQU0sR0FBRyxFQUFFLElBQUksR0FBRztBQUN0QztBQUVBLElBQUEsZUFBaUJHO0FDZmpCLElBQUksYUFBYXBEO0FBWWpCLFNBQVNxRCxjQUFZLEtBQUssT0FBTztBQUMvQixNQUFJLE9BQU8sV0FBVyxNQUFNLEdBQUcsR0FDM0IsT0FBTyxLQUFLO0FBRWhCLE9BQUssSUFBSSxLQUFLLEtBQUs7QUFDbkIsT0FBSyxRQUFRLEtBQUssUUFBUSxPQUFPLElBQUk7QUFDckMsU0FBTztBQUNUO0FBRUEsSUFBQSxlQUFpQkE7QUNyQmpCLElBQUksZ0JBQWdCckQsZ0JBQ2hCLGlCQUFpQk8saUJBQ2pCLGNBQWNDLGNBQ2QsY0FBY0MsY0FDZCxjQUFjQztBQVNsQixTQUFTNEMsV0FBUyxTQUFTO0FBQ3pCLE1BQUluRCxTQUFRLElBQ1IsU0FBUyxXQUFXLE9BQU8sSUFBSSxRQUFRO0FBRTNDLE9BQUssTUFBSztBQUNWLFNBQU8sRUFBRUEsU0FBUSxRQUFRO0FBQ3ZCLFFBQUksUUFBUSxRQUFRQSxNQUFLO0FBQ3pCLFNBQUssSUFBSSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztBQUFBLEVBQzVCO0FBQ0g7QUFHQW1ELFdBQVMsVUFBVSxRQUFRO0FBQzNCQSxXQUFTLFVBQVUsUUFBUSxJQUFJO0FBQy9CQSxXQUFTLFVBQVUsTUFBTTtBQUN6QkEsV0FBUyxVQUFVLE1BQU07QUFDekJBLFdBQVMsVUFBVSxNQUFNO0FBRXpCLElBQUEsWUFBaUJBO0FDL0JqQixJQUFJM0MsY0FBWVgsWUFDWnNDLFFBQU0vQixNQUNOLFdBQVdDO0FBR2YsSUFBSSxtQkFBbUI7QUFZdkIsU0FBUytDLFdBQVMsS0FBSyxPQUFPO0FBQzVCLE1BQUksT0FBTyxLQUFLO0FBQ2hCLE1BQUksZ0JBQWdCNUMsYUFBVztBQUM3QixRQUFJLFFBQVEsS0FBSztBQUNqQixRQUFJLENBQUMyQixTQUFRLE1BQU0sU0FBUyxtQkFBbUIsR0FBSTtBQUNqRCxZQUFNLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQztBQUN2QixXQUFLLE9BQU8sRUFBRSxLQUFLO0FBQ25CLGFBQU87QUFBQSxJQUNSO0FBQ0QsV0FBTyxLQUFLLFdBQVcsSUFBSSxTQUFTLEtBQUs7QUFBQSxFQUMxQztBQUNELE9BQUssSUFBSSxLQUFLLEtBQUs7QUFDbkIsT0FBSyxPQUFPLEtBQUs7QUFDakIsU0FBTztBQUNUO0FBRUEsSUFBQSxZQUFpQmlCO0FDakNqQixJQUFJLFlBQVl2RCxZQUNaLGFBQWFPLGFBQ2IsY0FBY0MsY0FDZCxXQUFXQyxXQUNYLFdBQVdDLFdBQ1gsV0FBVzhDO0FBU2YsU0FBU0MsUUFBTSxTQUFTO0FBQ3RCLE1BQUksT0FBTyxLQUFLLFdBQVcsSUFBSSxVQUFVLE9BQU87QUFDaEQsT0FBSyxPQUFPLEtBQUs7QUFDbkI7QUFHQUEsUUFBTSxVQUFVLFFBQVE7QUFDeEJBLFFBQU0sVUFBVSxRQUFRLElBQUk7QUFDNUJBLFFBQU0sVUFBVSxNQUFNO0FBQ3RCQSxRQUFNLFVBQVUsTUFBTTtBQUN0QkEsUUFBTSxVQUFVLE1BQU07QUFFdEIsSUFBQSxTQUFpQkE7QUMxQmpCLElBQUksWUFBWXpEO0FBRWhCLElBQUkwRCxtQkFBa0IsV0FBVztBQUMvQixNQUFJO0FBQ0YsUUFBSSxPQUFPLFVBQVUsUUFBUSxnQkFBZ0I7QUFDN0MsU0FBSyxDQUFFLEdBQUUsSUFBSSxDQUFBLENBQUU7QUFDZixXQUFPO0FBQUEsRUFDWCxTQUFXaEcsSUFBUDtBQUFBLEVBQVk7QUFDaEIsRUFBQztBQUVELElBQUEsa0JBQWlCZ0c7QUNWakIsSUFBSUEsbUJBQWlCMUQ7QUFXckIsU0FBUzJELGtCQUFnQixRQUFRLEtBQUssT0FBTztBQUMzQyxNQUFJLE9BQU8sZUFBZUQsa0JBQWdCO0FBQ3hDQSxxQkFBZSxRQUFRLEtBQUs7QUFBQSxNQUMxQixnQkFBZ0I7QUFBQSxNQUNoQixjQUFjO0FBQUEsTUFDZCxTQUFTO0FBQUEsTUFDVCxZQUFZO0FBQUEsSUFDbEIsQ0FBSztBQUFBLEVBQ0wsT0FBUztBQUNMLFdBQU8sR0FBRyxJQUFJO0FBQUEsRUFDZjtBQUNIO0FBRUEsSUFBQSxtQkFBaUJDO0FDeEJqQixJQUFJQSxvQkFBa0IzRCxrQkFDbEJELE9BQUtRO0FBV1QsU0FBU3FELG1CQUFpQixRQUFRLEtBQUssT0FBTztBQUM1QyxNQUFLLFVBQVUsVUFBYSxDQUFDN0QsS0FBRyxPQUFPLEdBQUcsR0FBRyxLQUFLLEtBQzdDLFVBQVUsVUFBYSxFQUFFLE9BQU8sU0FBVTtBQUM3QzRELHNCQUFnQixRQUFRLEtBQUssS0FBSztBQUFBLEVBQ25DO0FBQ0g7QUFFQSxJQUFBLG9CQUFpQkM7QUNaakIsU0FBU0MsZ0JBQWMsV0FBVztBQUNoQyxTQUFPLFNBQVMsUUFBUSxVQUFVLFVBQVU7QUFDMUMsUUFBSTFELFNBQVEsSUFDUixXQUFXLE9BQU8sTUFBTSxHQUN4QixRQUFRLFNBQVMsTUFBTSxHQUN2QixTQUFTLE1BQU07QUFFbkIsV0FBTyxVQUFVO0FBQ2YsVUFBSSxNQUFNLE1BQU0sWUFBWSxTQUFTLEVBQUVBLE1BQUs7QUFDNUMsVUFBSSxTQUFTLFNBQVMsR0FBRyxHQUFHLEtBQUssUUFBUSxNQUFNLE9BQU87QUFDcEQ7QUFBQSxNQUNEO0FBQUEsSUFDRjtBQUNELFdBQU87QUFBQSxFQUNYO0FBQ0E7QUFFQSxJQUFBLGlCQUFpQjBEO0FDeEJqQixJQUFJLGdCQUFnQjdEO0FBYXBCLElBQUk4RCxZQUFVLGNBQWE7QUFFM0IsSUFBQSxXQUFpQkE7Ozs7Ozs7Ozs7O0FDZmpCLE1BQUk1QyxRQUFPbEI7QUFHWCxNQUFJLGNBQTRDLFdBQVcsQ0FBQyxRQUFRLFlBQVk7QUFHaEYsTUFBSSxhQUFhLGVBQWUsUUFBNkIsVUFBVSxDQUFDLE9BQU8sWUFBWTtBQUczRixNQUFJLGdCQUFnQixjQUFjLFdBQVcsWUFBWTtBQUd6RCxNQUFJLFNBQVMsZ0JBQWdCa0IsTUFBSyxTQUFTLFFBQ3ZDLGNBQWMsU0FBUyxPQUFPLGNBQWM7QUFVaEQsV0FBUzZDLGFBQVksUUFBUSxRQUFRO0FBQ25DLFFBQUksUUFBUTtBQUNWLGFBQU8sT0FBTztJQUNmO0FBQ0QsUUFBSSxTQUFTLE9BQU8sUUFDaEIsU0FBUyxjQUFjLFlBQVksTUFBTSxJQUFJLElBQUksT0FBTyxZQUFZLE1BQU07QUFFOUUsV0FBTyxLQUFLLE1BQU07QUFDbEIsV0FBTztBQUFBLEVBQ1I7QUFFRCxTQUFBLFVBQWlCQTs7QUNsQ2pCLElBQUk3QyxTQUFPbEI7QUFHWCxJQUFJZ0UsZUFBYTlDLE9BQUs7QUFFdEIsSUFBQSxjQUFpQjhDO0FDTGpCLElBQUksYUFBYWhFO0FBU2pCLFNBQVNpRSxtQkFBaUIsYUFBYTtBQUNyQyxNQUFJLFNBQVMsSUFBSSxZQUFZLFlBQVksWUFBWSxVQUFVO0FBQy9ELE1BQUksV0FBVyxNQUFNLEVBQUUsSUFBSSxJQUFJLFdBQVcsV0FBVyxDQUFDO0FBQ3RELFNBQU87QUFDVDtBQUVBLElBQUEsb0JBQWlCQTtBQ2ZqQixJQUFJLG1CQUFtQmpFO0FBVXZCLFNBQVNrRSxrQkFBZ0IsWUFBWSxRQUFRO0FBQzNDLE1BQUksU0FBUyxTQUFTLGlCQUFpQixXQUFXLE1BQU0sSUFBSSxXQUFXO0FBQ3ZFLFNBQU8sSUFBSSxXQUFXLFlBQVksUUFBUSxXQUFXLFlBQVksV0FBVyxNQUFNO0FBQ3BGO0FBRUEsSUFBQSxtQkFBaUJBO0FDUGpCLFNBQVNDLFlBQVUsUUFBUSxPQUFPO0FBQ2hDLE1BQUloRSxTQUFRLElBQ1IsU0FBUyxPQUFPO0FBRXBCLFlBQVUsUUFBUSxNQUFNLE1BQU07QUFDOUIsU0FBTyxFQUFFQSxTQUFRLFFBQVE7QUFDdkIsVUFBTUEsTUFBSyxJQUFJLE9BQU9BLE1BQUs7QUFBQSxFQUM1QjtBQUNELFNBQU87QUFDVDtBQUVBLElBQUEsYUFBaUJnRTtBQ25CakIsSUFBSXhDLGFBQVczQjtBQUdmLElBQUksZUFBZSxPQUFPO0FBVTFCLElBQUlvRSxlQUFjLFdBQVc7QUFDM0IsV0FBUyxTQUFTO0FBQUEsRUFBRTtBQUNwQixTQUFPLFNBQVMsT0FBTztBQUNyQixRQUFJLENBQUN6QyxXQUFTLEtBQUssR0FBRztBQUNwQixhQUFPO0lBQ1I7QUFDRCxRQUFJLGNBQWM7QUFDaEIsYUFBTyxhQUFhLEtBQUs7QUFBQSxJQUMxQjtBQUNELFdBQU8sWUFBWTtBQUNuQixRQUFJLFNBQVMsSUFBSTtBQUNqQixXQUFPLFlBQVk7QUFDbkIsV0FBTztBQUFBLEVBQ1g7QUFDQSxFQUFDO0FBRUQsSUFBQSxjQUFpQnlDO0FDckJqQixTQUFTQyxVQUFRLE1BQU0sV0FBVztBQUNoQyxTQUFPLFNBQVMsS0FBSztBQUNuQixXQUFPLEtBQUssVUFBVSxHQUFHLENBQUM7QUFBQSxFQUM5QjtBQUNBO0FBRUEsSUFBQSxXQUFpQkE7QUNkakIsSUFBSSxVQUFVckU7QUFHZCxJQUFJc0UsaUJBQWUsUUFBUSxPQUFPLGdCQUFnQixNQUFNO0FBRXhELElBQUEsZ0JBQWlCQTtBQ0pqQixJQUFJbEQsZ0JBQWMsT0FBTztBQVN6QixTQUFTbUQsY0FBWSxPQUFPO0FBQzFCLE1BQUksT0FBTyxTQUFTLE1BQU0sYUFDdEIsUUFBUyxPQUFPLFFBQVEsY0FBYyxLQUFLLGFBQWNuRDtBQUU3RCxTQUFPLFVBQVU7QUFDbkI7QUFFQSxJQUFBLGVBQWlCbUQ7QUNqQmpCLElBQUksYUFBYXZFLGFBQ2JzRSxpQkFBZS9ELGVBQ2ZnRSxnQkFBYy9EO0FBU2xCLFNBQVNnRSxrQkFBZ0IsUUFBUTtBQUMvQixTQUFRLE9BQU8sT0FBTyxlQUFlLGNBQWMsQ0FBQ0QsY0FBWSxNQUFNLElBQ2xFLFdBQVdELGVBQWEsTUFBTSxDQUFDLElBQy9CO0FBQ047QUFFQSxJQUFBLG1CQUFpQkU7QUNPakIsU0FBU0MsZUFBYSxPQUFPO0FBQzNCLFNBQU8sU0FBUyxRQUFRLE9BQU8sU0FBUztBQUMxQztBQUVBLElBQUEsaUJBQWlCQTtBQzVCakIsSUFBSS9DLGVBQWExQixhQUNieUUsaUJBQWVsRTtBQUduQixJQUFJbUUsWUFBVTtBQVNkLFNBQVNDLGtCQUFnQixPQUFPO0FBQzlCLFNBQU9GLGVBQWEsS0FBSyxLQUFLL0MsYUFBVyxLQUFLLEtBQUtnRDtBQUNyRDtBQUVBLElBQUEsbUJBQWlCQztBQ2pCakIsSUFBSSxrQkFBa0IzRSxrQkFDbEJ5RSxpQkFBZWxFO0FBR25CLElBQUlhLGdCQUFjLE9BQU87QUFHekIsSUFBSUMsbUJBQWlCRCxjQUFZO0FBR2pDLElBQUksdUJBQXVCQSxjQUFZO0FBb0J2QyxJQUFJd0QsZ0JBQWMsZ0JBQWdCLFdBQVc7QUFBRSxTQUFPO0FBQVUsR0FBSSxJQUFJLGtCQUFrQixTQUFTLE9BQU87QUFDeEcsU0FBT0gsZUFBYSxLQUFLLEtBQUtwRCxpQkFBZSxLQUFLLE9BQU8sUUFBUSxLQUMvRCxDQUFDLHFCQUFxQixLQUFLLE9BQU8sUUFBUTtBQUM5QztBQUVBLElBQUEsZ0JBQWlCdUQ7QUNaakIsSUFBSUMsWUFBVSxNQUFNO0FBRXBCLElBQUEsWUFBaUJBO0FDeEJqQixJQUFJQyxxQkFBbUI7QUE0QnZCLFNBQVNDLFdBQVMsT0FBTztBQUN2QixTQUFPLE9BQU8sU0FBUyxZQUNyQixRQUFRLE1BQU0sUUFBUSxLQUFLLEtBQUssU0FBU0Q7QUFDN0M7QUFFQSxJQUFBLGFBQWlCQztBQ2xDakIsSUFBSWxELGVBQWE3QixjQUNiK0UsYUFBV3hFO0FBMkJmLFNBQVN5RSxjQUFZLE9BQU87QUFDMUIsU0FBTyxTQUFTLFFBQVFELFdBQVMsTUFBTSxNQUFNLEtBQUssQ0FBQ2xELGFBQVcsS0FBSztBQUNyRTtBQUVBLElBQUEsZ0JBQWlCbUQ7QUNoQ2pCLElBQUlBLGdCQUFjaEYsZUFDZHlFLGlCQUFlbEU7QUEyQm5CLFNBQVMwRSxvQkFBa0IsT0FBTztBQUNoQyxTQUFPUixlQUFhLEtBQUssS0FBS08sY0FBWSxLQUFLO0FBQ2pEO0FBRUEsSUFBQSxzQkFBaUJDOzs7Ozs7Ozs7O0FDbkJqQixTQUFTLFlBQVk7QUFDbkIsU0FBTztBQUNUO0FBRUEsSUFBQSxjQUFpQjtBQUFBO0FDakJqQixNQUFJL0QsUUFBT2xCLE9BQ1BrRixhQUFZM0U7QUFHaEIsTUFBSSxjQUE0QyxXQUFXLENBQUMsUUFBUSxZQUFZO0FBR2hGLE1BQUksYUFBYSxlQUFlLFFBQTZCLFVBQVUsQ0FBQyxPQUFPLFlBQVk7QUFHM0YsTUFBSSxnQkFBZ0IsY0FBYyxXQUFXLFlBQVk7QUFHekQsTUFBSSxTQUFTLGdCQUFnQlcsTUFBSyxTQUFTO0FBRzNDLE1BQUksaUJBQWlCLFNBQVMsT0FBTyxXQUFXO0FBbUJoRCxNQUFJaUUsWUFBVyxrQkFBa0JEO0FBRWpDLFNBQUEsVUFBaUJDOztBQ3JDakIsSUFBSXpELGVBQWExQixhQUNiLGVBQWVPLGVBQ2ZrRSxpQkFBZWpFO0FBR25CLElBQUk0RSxjQUFZO0FBR2hCLElBQUksWUFBWSxTQUFTLFdBQ3JCaEUsZ0JBQWMsT0FBTztBQUd6QixJQUFJLGVBQWUsVUFBVTtBQUc3QixJQUFJQyxtQkFBaUJELGNBQVk7QUFHakMsSUFBSSxtQkFBbUIsYUFBYSxLQUFLLE1BQU07QUE4Qi9DLFNBQVNpRSxnQkFBYyxPQUFPO0FBQzVCLE1BQUksQ0FBQ1osZUFBYSxLQUFLLEtBQUsvQyxhQUFXLEtBQUssS0FBSzBELGFBQVc7QUFDMUQsV0FBTztBQUFBLEVBQ1I7QUFDRCxNQUFJLFFBQVEsYUFBYSxLQUFLO0FBQzlCLE1BQUksVUFBVSxNQUFNO0FBQ2xCLFdBQU87QUFBQSxFQUNSO0FBQ0QsTUFBSSxPQUFPL0QsaUJBQWUsS0FBSyxPQUFPLGFBQWEsS0FBSyxNQUFNO0FBQzlELFNBQU8sT0FBTyxRQUFRLGNBQWMsZ0JBQWdCLFFBQ2xELGFBQWEsS0FBSyxJQUFJLEtBQUs7QUFDL0I7QUFFQSxJQUFBLGtCQUFpQmdFO0FDN0RqQixJQUFJLGFBQWFyRixhQUNiLFdBQVdPLFlBQ1gsZUFBZUM7QUFHbkIsSUFBSSxVQUFVLHNCQUNWLFdBQVcsa0JBQ1gsVUFBVSxvQkFDVixVQUFVLGlCQUNWLFdBQVcsa0JBQ1gsVUFBVSxxQkFDVixTQUFTLGdCQUNULFlBQVksbUJBQ1osWUFBWSxtQkFDWixZQUFZLG1CQUNaLFNBQVMsZ0JBQ1QsWUFBWSxtQkFDWixhQUFhO0FBRWpCLElBQUksaUJBQWlCLHdCQUNqQixjQUFjLHFCQUNkLGFBQWEseUJBQ2IsYUFBYSx5QkFDYixVQUFVLHNCQUNWLFdBQVcsdUJBQ1gsV0FBVyx1QkFDWCxXQUFXLHVCQUNYLGtCQUFrQiw4QkFDbEIsWUFBWSx3QkFDWixZQUFZO0FBR2hCLElBQUksaUJBQWlCLENBQUE7QUFDckIsZUFBZSxVQUFVLElBQUksZUFBZSxVQUFVLElBQ3RELGVBQWUsT0FBTyxJQUFJLGVBQWUsUUFBUSxJQUNqRCxlQUFlLFFBQVEsSUFBSSxlQUFlLFFBQVEsSUFDbEQsZUFBZSxlQUFlLElBQUksZUFBZSxTQUFTLElBQzFELGVBQWUsU0FBUyxJQUFJO0FBQzVCLGVBQWUsT0FBTyxJQUFJLGVBQWUsUUFBUSxJQUNqRCxlQUFlLGNBQWMsSUFBSSxlQUFlLE9BQU8sSUFDdkQsZUFBZSxXQUFXLElBQUksZUFBZSxPQUFPLElBQ3BELGVBQWUsUUFBUSxJQUFJLGVBQWUsT0FBTyxJQUNqRCxlQUFlLE1BQU0sSUFBSSxlQUFlLFNBQVMsSUFDakQsZUFBZSxTQUFTLElBQUksZUFBZSxTQUFTLElBQ3BELGVBQWUsTUFBTSxJQUFJLGVBQWUsU0FBUyxJQUNqRCxlQUFlLFVBQVUsSUFBSTtBQVM3QixTQUFTOEUsbUJBQWlCLE9BQU87QUFDL0IsU0FBTyxhQUFhLEtBQUssS0FDdkIsU0FBUyxNQUFNLE1BQU0sS0FBSyxDQUFDLENBQUMsZUFBZSxXQUFXLEtBQUssQ0FBQztBQUNoRTtBQUVBLElBQUEsb0JBQWlCQTtBQ3BEakIsU0FBU0MsWUFBVSxNQUFNO0FBQ3ZCLFNBQU8sU0FBUyxPQUFPO0FBQ3JCLFdBQU8sS0FBSyxLQUFLO0FBQUEsRUFDckI7QUFDQTtBQUVBLElBQUEsYUFBaUJBOzs7Ozs7Ozs7OztBQ2JqQixNQUFJdkUsY0FBYWhCO0FBR2pCLE1BQUksY0FBNEMsV0FBVyxDQUFDLFFBQVEsWUFBWTtBQUdoRixNQUFJLGFBQWEsZUFBZSxRQUE2QixVQUFVLENBQUMsT0FBTyxZQUFZO0FBRzNGLE1BQUksZ0JBQWdCLGNBQWMsV0FBVyxZQUFZO0FBR3pELE1BQUksY0FBYyxpQkFBaUJnQixZQUFXO0FBRzlDLE1BQUl3RSxZQUFZLFdBQVc7QUFDekIsUUFBSTtBQUVGLFVBQUksUUFBUSxjQUFjLFdBQVcsV0FBVyxXQUFXLFFBQVEsTUFBTSxFQUFFO0FBRTNFLFVBQUksT0FBTztBQUNULGVBQU87QUFBQSxNQUNSO0FBR0QsYUFBTyxlQUFlLFlBQVksV0FBVyxZQUFZLFFBQVEsTUFBTTtBQUFBLElBQzNFLFNBQVc5SCxJQUFQO0FBQUEsSUFBWTtBQUFBLEVBQ2YsRUFBQTtBQUVELFNBQUEsVUFBaUI4SDs7QUM3QmpCLElBQUksbUJBQW1CeEYsbUJBQ25CLFlBQVlPLFlBQ1osV0FBV0M7QUFHZixJQUFJLG1CQUFtQixZQUFZLFNBQVM7QUFtQjVDLElBQUlpRixpQkFBZSxtQkFBbUIsVUFBVSxnQkFBZ0IsSUFBSTtBQUVwRSxJQUFBLGlCQUFpQkE7QUNsQmpCLFNBQVNDLFVBQVEsUUFBUSxLQUFLO0FBQzVCLE1BQUksUUFBUSxpQkFBaUIsT0FBTyxPQUFPLEdBQUcsTUFBTSxZQUFZO0FBQzlEO0FBQUEsRUFDRDtBQUVELE1BQUksT0FBTyxhQUFhO0FBQ3RCO0FBQUEsRUFDRDtBQUVELFNBQU8sT0FBTyxHQUFHO0FBQ25CO0FBRUEsSUFBQSxXQUFpQkE7QUNwQmpCLElBQUkvQixvQkFBa0IzRCxrQkFDbEJELE9BQUtRO0FBR1QsSUFBSWEsZ0JBQWMsT0FBTztBQUd6QixJQUFJQyxtQkFBaUJELGNBQVk7QUFZakMsU0FBU3VFLGNBQVksUUFBUSxLQUFLLE9BQU87QUFDdkMsTUFBSSxXQUFXLE9BQU8sR0FBRztBQUN6QixNQUFJLEVBQUV0RSxpQkFBZSxLQUFLLFFBQVEsR0FBRyxLQUFLdEIsS0FBRyxVQUFVLEtBQUssTUFDdkQsVUFBVSxVQUFhLEVBQUUsT0FBTyxTQUFVO0FBQzdDNEQsc0JBQWdCLFFBQVEsS0FBSyxLQUFLO0FBQUEsRUFDbkM7QUFDSDtBQUVBLElBQUEsZUFBaUJnQztBQzNCakIsSUFBSSxjQUFjM0YsY0FDZCxrQkFBa0JPO0FBWXRCLFNBQVNxRixhQUFXLFFBQVEsT0FBTyxRQUFRLFlBQVk7QUFDckQsTUFBSSxRQUFRLENBQUM7QUFDYixhQUFXLFNBQVMsQ0FBQTtBQUVwQixNQUFJekYsU0FBUSxJQUNSLFNBQVMsTUFBTTtBQUVuQixTQUFPLEVBQUVBLFNBQVEsUUFBUTtBQUN2QixRQUFJLE1BQU0sTUFBTUEsTUFBSztBQUVyQixRQUFJLFdBQVcsYUFDWCxXQUFXLE9BQU8sR0FBRyxHQUFHLE9BQU8sR0FBRyxHQUFHLEtBQUssUUFBUSxNQUFNLElBQ3hEO0FBRUosUUFBSSxhQUFhLFFBQVc7QUFDMUIsaUJBQVcsT0FBTyxHQUFHO0FBQUEsSUFDdEI7QUFDRCxRQUFJLE9BQU87QUFDVCxzQkFBZ0IsUUFBUSxLQUFLLFFBQVE7QUFBQSxJQUMzQyxPQUFXO0FBQ0wsa0JBQVksUUFBUSxLQUFLLFFBQVE7QUFBQSxJQUNsQztBQUFBLEVBQ0Y7QUFDRCxTQUFPO0FBQ1Q7QUFFQSxJQUFBLGNBQWlCeUY7QUM5QmpCLFNBQVNDLFlBQVUsR0FBRyxVQUFVO0FBQzlCLE1BQUkxRixTQUFRLElBQ1IsU0FBUyxNQUFNLENBQUM7QUFFcEIsU0FBTyxFQUFFQSxTQUFRLEdBQUc7QUFDbEIsV0FBT0EsTUFBSyxJQUFJLFNBQVNBLE1BQUs7QUFBQSxFQUMvQjtBQUNELFNBQU87QUFDVDtBQUVBLElBQUEsYUFBaUIwRjtBQ2xCakIsSUFBSSxtQkFBbUI7QUFHdkIsSUFBSSxXQUFXO0FBVWYsU0FBU0MsVUFBUSxPQUFPLFFBQVE7QUFDOUIsTUFBSSxPQUFPLE9BQU87QUFDbEIsV0FBUyxVQUFVLE9BQU8sbUJBQW1CO0FBRTdDLFNBQU8sQ0FBQyxDQUFDLFdBQ04sUUFBUSxZQUNOLFFBQVEsWUFBWSxTQUFTLEtBQUssS0FBSyxPQUNyQyxRQUFRLE1BQU0sUUFBUSxLQUFLLEtBQUssUUFBUTtBQUNqRDtBQUVBLElBQUEsV0FBaUJBO0FDeEJqQixJQUFJLFlBQVk5RixZQUNaNEUsZ0JBQWNyRSxlQUNkc0UsWUFBVXJFLFdBQ1YyRSxhQUFXMUUsaUJBQ1hxRixZQUFVcEYsVUFDVitFLGlCQUFlakM7QUFHbkIsSUFBSXBDLGdCQUFjLE9BQU87QUFHekIsSUFBSUMsbUJBQWlCRCxjQUFZO0FBVWpDLFNBQVMyRSxnQkFBYyxPQUFPLFdBQVc7QUFDdkMsTUFBSSxRQUFRbEIsVUFBUSxLQUFLLEdBQ3JCLFFBQVEsQ0FBQyxTQUFTRCxjQUFZLEtBQUssR0FDbkMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTTyxXQUFTLEtBQUssR0FDM0MsU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsVUFBVU0sZUFBYSxLQUFLLEdBQzFELGNBQWMsU0FBUyxTQUFTLFVBQVUsUUFDMUMsU0FBUyxjQUFjLFVBQVUsTUFBTSxRQUFRLE1BQU0sSUFBSSxDQUFFLEdBQzNELFNBQVMsT0FBTztBQUVwQixXQUFTLE9BQU8sT0FBTztBQUNyQixTQUFLLGFBQWFwRSxpQkFBZSxLQUFLLE9BQU8sR0FBRyxNQUM1QyxFQUFFO0FBQUEsS0FFQyxPQUFPO0FBQUEsSUFFTixXQUFXLE9BQU8sWUFBWSxPQUFPO0FBQUEsSUFFckMsV0FBVyxPQUFPLFlBQVksT0FBTyxnQkFBZ0IsT0FBTztBQUFBLElBRTdEeUUsVUFBUSxLQUFLLE1BQU0sS0FDbEI7QUFDTixhQUFPLEtBQUssR0FBRztBQUFBLElBQ2hCO0FBQUEsRUFDRjtBQUNELFNBQU87QUFDVDtBQUVBLElBQUEsaUJBQWlCQztBQ3ZDakIsU0FBU0MsZUFBYSxRQUFRO0FBQzVCLE1BQUksU0FBUyxDQUFBO0FBQ2IsTUFBSSxVQUFVLE1BQU07QUFDbEIsYUFBUyxPQUFPLE9BQU8sTUFBTSxHQUFHO0FBQzlCLGFBQU8sS0FBSyxHQUFHO0FBQUEsSUFDaEI7QUFBQSxFQUNGO0FBQ0QsU0FBTztBQUNUO0FBRUEsSUFBQSxnQkFBaUJBO0FDbkJqQixJQUFJckUsYUFBVzNCLFlBQ1gsY0FBY08sY0FDZCxlQUFlQztBQUduQixJQUFJLGNBQWMsT0FBTztBQUd6QixJQUFJLGlCQUFpQixZQUFZO0FBU2pDLFNBQVN5RixhQUFXLFFBQVE7QUFDMUIsTUFBSSxDQUFDdEUsV0FBUyxNQUFNLEdBQUc7QUFDckIsV0FBTyxhQUFhLE1BQU07QUFBQSxFQUMzQjtBQUNELE1BQUksVUFBVSxZQUFZLE1BQU0sR0FDNUIsU0FBUyxDQUFBO0FBRWIsV0FBUyxPQUFPLFFBQVE7QUFDdEIsUUFBSSxFQUFFLE9BQU8sa0JBQWtCLFdBQVcsQ0FBQyxlQUFlLEtBQUssUUFBUSxHQUFHLEtBQUs7QUFDN0UsYUFBTyxLQUFLLEdBQUc7QUFBQSxJQUNoQjtBQUFBLEVBQ0Y7QUFDRCxTQUFPO0FBQ1Q7QUFFQSxJQUFBLGNBQWlCc0U7QUNoQ2pCLElBQUksZ0JBQWdCakcsZ0JBQ2hCLGFBQWFPLGFBQ2J5RSxnQkFBY3hFO0FBeUJsQixTQUFTMEYsU0FBTyxRQUFRO0FBQ3RCLFNBQU9sQixjQUFZLE1BQU0sSUFBSSxjQUFjLFFBQVEsSUFBSSxJQUFJLFdBQVcsTUFBTTtBQUM5RTtBQUVBLElBQUEsV0FBaUJrQjtBQy9CakIsSUFBSSxhQUFhbEcsYUFDYmtHLFdBQVMzRjtBQTBCYixTQUFTNEYsZ0JBQWMsT0FBTztBQUM1QixTQUFPLFdBQVcsT0FBT0QsU0FBTyxLQUFLLENBQUM7QUFDeEM7QUFFQSxJQUFBLGtCQUFpQkM7QUMvQmpCLElBQUl2QyxxQkFBbUI1RCxtQkFDbkIsY0FBY08scUJBQ2Qsa0JBQWtCQyxrQkFDbEIsWUFBWUMsWUFDWixrQkFBa0JDLGtCQUNsQixjQUFjOEMsZUFDZCxVQUFVNEMsV0FDVixvQkFBb0JDLHFCQUNwQixXQUFXQyxpQkFDWCxhQUFhQyxjQUNiNUUsYUFBVzZFLFlBQ1gsZ0JBQWdCQyxpQkFDaEIsZUFBZUMsZ0JBQ2ZoQixZQUFVaUIsVUFDVixnQkFBZ0JDO0FBaUJwQixTQUFTQyxnQkFBYyxRQUFRLFFBQVEsS0FBSyxVQUFVLFdBQVcsWUFBWSxPQUFPO0FBQ2xGLE1BQUksV0FBV25CLFVBQVEsUUFBUSxHQUFHLEdBQzlCLFdBQVdBLFVBQVEsUUFBUSxHQUFHLEdBQzlCLFVBQVUsTUFBTSxJQUFJLFFBQVE7QUFFaEMsTUFBSSxTQUFTO0FBQ1g5Qix1QkFBaUIsUUFBUSxLQUFLLE9BQU87QUFDckM7QUFBQSxFQUNEO0FBQ0QsTUFBSSxXQUFXLGFBQ1gsV0FBVyxVQUFVLFVBQVcsTUFBTSxJQUFLLFFBQVEsUUFBUSxLQUFLLElBQ2hFO0FBRUosTUFBSSxXQUFXLGFBQWE7QUFFNUIsTUFBSSxVQUFVO0FBQ1osUUFBSSxRQUFRLFFBQVEsUUFBUSxHQUN4QixTQUFTLENBQUMsU0FBUyxTQUFTLFFBQVEsR0FDcEMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxVQUFVLGFBQWEsUUFBUTtBQUV4RCxlQUFXO0FBQ1gsUUFBSSxTQUFTLFVBQVUsU0FBUztBQUM5QixVQUFJLFFBQVEsUUFBUSxHQUFHO0FBQ3JCLG1CQUFXO0FBQUEsTUFDWixXQUNRLGtCQUFrQixRQUFRLEdBQUc7QUFDcEMsbUJBQVcsVUFBVSxRQUFRO0FBQUEsTUFDOUIsV0FDUSxRQUFRO0FBQ2YsbUJBQVc7QUFDWCxtQkFBVyxZQUFZLFVBQVUsSUFBSTtBQUFBLE1BQ3RDLFdBQ1EsU0FBUztBQUNoQixtQkFBVztBQUNYLG1CQUFXLGdCQUFnQixVQUFVLElBQUk7QUFBQSxNQUMxQyxPQUNJO0FBQ0gsbUJBQVcsQ0FBQTtBQUFBLE1BQ1o7QUFBQSxJQUNGLFdBQ1EsY0FBYyxRQUFRLEtBQUssWUFBWSxRQUFRLEdBQUc7QUFDekQsaUJBQVc7QUFDWCxVQUFJLFlBQVksUUFBUSxHQUFHO0FBQ3pCLG1CQUFXLGNBQWMsUUFBUTtBQUFBLE1BQ2xDLFdBQ1EsQ0FBQ2pDLFdBQVMsUUFBUSxLQUFLLFdBQVcsUUFBUSxHQUFHO0FBQ3BELG1CQUFXLGdCQUFnQixRQUFRO0FBQUEsTUFDcEM7QUFBQSxJQUNGLE9BQ0k7QUFDSCxpQkFBVztBQUFBLElBQ1o7QUFBQSxFQUNGO0FBQ0QsTUFBSSxVQUFVO0FBRVosVUFBTSxJQUFJLFVBQVUsUUFBUTtBQUM1QixjQUFVLFVBQVUsVUFBVSxVQUFVLFlBQVksS0FBSztBQUN6RCxVQUFNLFFBQVEsRUFBRSxRQUFRO0FBQUEsRUFDekI7QUFDRGlDLHFCQUFpQixRQUFRLEtBQUssUUFBUTtBQUN4QztBQUVBLElBQUEsaUJBQWlCaUQ7QUM3RmpCLElBQUksUUFBUTdHLFFBQ1IsbUJBQW1CTyxtQkFDbkIsVUFBVUMsVUFDVixnQkFBZ0JDLGdCQUNoQmtCLGFBQVdqQixZQUNYLFNBQVM4QyxVQUNULFVBQVU0QztBQWFkLFNBQVNVLFlBQVUsUUFBUSxRQUFRLFVBQVUsWUFBWSxPQUFPO0FBQzlELE1BQUksV0FBVyxRQUFRO0FBQ3JCO0FBQUEsRUFDRDtBQUNELFVBQVEsUUFBUSxTQUFTLFVBQVUsS0FBSztBQUN0QyxjQUFVLFFBQVEsSUFBSTtBQUN0QixRQUFJbkYsV0FBUyxRQUFRLEdBQUc7QUFDdEIsb0JBQWMsUUFBUSxRQUFRLEtBQUssVUFBVW1GLGFBQVcsWUFBWSxLQUFLO0FBQUEsSUFDMUUsT0FDSTtBQUNILFVBQUksV0FBVyxhQUNYLFdBQVcsUUFBUSxRQUFRLEdBQUcsR0FBRyxVQUFXLE1BQU0sSUFBSyxRQUFRLFFBQVEsS0FBSyxJQUM1RTtBQUVKLFVBQUksYUFBYSxRQUFXO0FBQzFCLG1CQUFXO0FBQUEsTUFDWjtBQUNELHVCQUFpQixRQUFRLEtBQUssUUFBUTtBQUFBLElBQ3ZDO0FBQUEsRUFDRixHQUFFLE1BQU07QUFDWDtBQUVBLElBQUEsYUFBaUJBO0FDekJqQixTQUFTQyxXQUFTLE9BQU87QUFDdkIsU0FBTztBQUNUO0FBRUEsSUFBQSxhQUFpQkE7QUNWakIsU0FBU0MsUUFBTSxNQUFNLFNBQVMsTUFBTTtBQUNsQyxVQUFRLEtBQUssUUFBTTtBQUFBLElBQ2pCLEtBQUs7QUFBRyxhQUFPLEtBQUssS0FBSyxPQUFPO0FBQUEsSUFDaEMsS0FBSztBQUFHLGFBQU8sS0FBSyxLQUFLLFNBQVMsS0FBSyxDQUFDLENBQUM7QUFBQSxJQUN6QyxLQUFLO0FBQUcsYUFBTyxLQUFLLEtBQUssU0FBUyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUFBLElBQ2xELEtBQUs7QUFBRyxhQUFPLEtBQUssS0FBSyxTQUFTLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQUEsRUFDNUQ7QUFDRCxTQUFPLEtBQUssTUFBTSxTQUFTLElBQUk7QUFDakM7QUFFQSxJQUFBLFNBQWlCQTtBQ3BCakIsSUFBSSxRQUFRaEg7QUFHWixJQUFJLFlBQVksS0FBSztBQVdyQixTQUFTaUgsV0FBUyxNQUFNLE9BQU8sV0FBVztBQUN4QyxVQUFRLFVBQVUsVUFBVSxTQUFhLEtBQUssU0FBUyxJQUFLLE9BQU8sQ0FBQztBQUNwRSxTQUFPLFdBQVc7QUFDaEIsUUFBSSxPQUFPLFdBQ1A5RyxTQUFRLElBQ1IsU0FBUyxVQUFVLEtBQUssU0FBUyxPQUFPLENBQUMsR0FDekMsUUFBUSxNQUFNLE1BQU07QUFFeEIsV0FBTyxFQUFFQSxTQUFRLFFBQVE7QUFDdkIsWUFBTUEsTUFBSyxJQUFJLEtBQUssUUFBUUEsTUFBSztBQUFBLElBQ2xDO0FBQ0QsSUFBQUEsU0FBUTtBQUNSLFFBQUksWUFBWSxNQUFNLFFBQVEsQ0FBQztBQUMvQixXQUFPLEVBQUVBLFNBQVEsT0FBTztBQUN0QixnQkFBVUEsTUFBSyxJQUFJLEtBQUtBLE1BQUs7QUFBQSxJQUM5QjtBQUNELGNBQVUsS0FBSyxJQUFJLFVBQVUsS0FBSztBQUNsQyxXQUFPLE1BQU0sTUFBTSxNQUFNLFNBQVM7QUFBQSxFQUN0QztBQUNBO0FBRUEsSUFBQSxZQUFpQjhHO0FDaEJqQixTQUFTQyxXQUFTLE9BQU87QUFDdkIsU0FBTyxXQUFXO0FBQ2hCLFdBQU87QUFBQSxFQUNYO0FBQ0E7QUFFQSxJQUFBLGFBQWlCQTtBQ3pCakIsSUFBSSxXQUFXbEgsWUFDWCxpQkFBaUJPLGlCQUNqQndHLGFBQVd2RztBQVVmLElBQUkyRyxvQkFBa0IsQ0FBQyxpQkFBaUJKLGFBQVcsU0FBUyxNQUFNLFFBQVE7QUFDeEUsU0FBTyxlQUFlLE1BQU0sWUFBWTtBQUFBLElBQ3RDLGdCQUFnQjtBQUFBLElBQ2hCLGNBQWM7QUFBQSxJQUNkLFNBQVMsU0FBUyxNQUFNO0FBQUEsSUFDeEIsWUFBWTtBQUFBLEVBQ2hCLENBQUc7QUFDSDtBQUVBLElBQUEsbUJBQWlCSTtBQ3BCakIsSUFBSSxZQUFZLEtBQ1osV0FBVztBQUdmLElBQUksWUFBWSxLQUFLO0FBV3JCLFNBQVNDLFdBQVMsTUFBTTtBQUN0QixNQUFJLFFBQVEsR0FDUixhQUFhO0FBRWpCLFNBQU8sV0FBVztBQUNoQixRQUFJLFFBQVEsVUFBVyxHQUNuQixZQUFZLFlBQVksUUFBUTtBQUVwQyxpQkFBYTtBQUNiLFFBQUksWUFBWSxHQUFHO0FBQ2pCLFVBQUksRUFBRSxTQUFTLFdBQVc7QUFDeEIsZUFBTyxVQUFVLENBQUM7QUFBQSxNQUNuQjtBQUFBLElBQ1AsT0FBVztBQUNMLGNBQVE7QUFBQSxJQUNUO0FBQ0QsV0FBTyxLQUFLLE1BQU0sUUFBVyxTQUFTO0FBQUEsRUFDMUM7QUFDQTtBQUVBLElBQUEsWUFBaUJBO0FDcENqQixJQUFJLGtCQUFrQnBILGtCQUNsQixXQUFXTztBQVVmLElBQUk4RyxnQkFBYyxTQUFTLGVBQWU7QUFFMUMsSUFBQSxlQUFpQkE7QUNiakIsSUFBSSxXQUFXckgsWUFDWCxXQUFXTyxXQUNYLGNBQWNDO0FBVWxCLFNBQVM4RyxXQUFTLE1BQU0sT0FBTztBQUM3QixTQUFPLFlBQVksU0FBUyxNQUFNLE9BQU8sUUFBUSxHQUFHLE9BQU8sRUFBRTtBQUMvRDtBQUVBLElBQUEsWUFBaUJBO0FDaEJqQixJQUFJLEtBQUt0SCxNQUNMLGNBQWNPLGVBQ2QsVUFBVUMsVUFDVixXQUFXQztBQVlmLFNBQVM4RyxpQkFBZSxPQUFPcEgsUUFBTyxRQUFRO0FBQzVDLE1BQUksQ0FBQyxTQUFTLE1BQU0sR0FBRztBQUNyQixXQUFPO0FBQUEsRUFDUjtBQUNELE1BQUksT0FBTyxPQUFPQTtBQUNsQixNQUFJLFFBQVEsV0FDSCxZQUFZLE1BQU0sS0FBSyxRQUFRQSxRQUFPLE9BQU8sTUFBTSxJQUNuRCxRQUFRLFlBQVlBLFVBQVMsUUFDaEM7QUFDSixXQUFPLEdBQUcsT0FBT0EsTUFBSyxHQUFHLEtBQUs7QUFBQSxFQUMvQjtBQUNELFNBQU87QUFDVDtBQUVBLElBQUEsa0JBQWlCb0g7QUM3QmpCLElBQUksV0FBV3ZILFdBQ1gsaUJBQWlCTztBQVNyQixTQUFTaUgsaUJBQWUsVUFBVTtBQUNoQyxTQUFPLFNBQVMsU0FBUyxRQUFRLFNBQVM7QUFDeEMsUUFBSXJILFNBQVEsSUFDUixTQUFTLFFBQVEsUUFDakIsYUFBYSxTQUFTLElBQUksUUFBUSxTQUFTLENBQUMsSUFBSSxRQUNoRCxRQUFRLFNBQVMsSUFBSSxRQUFRLENBQUMsSUFBSTtBQUV0QyxpQkFBYyxTQUFTLFNBQVMsS0FBSyxPQUFPLGNBQWMsY0FDckQsVUFBVSxjQUNYO0FBRUosUUFBSSxTQUFTLGVBQWUsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsS0FBSyxHQUFHO0FBQzFELG1CQUFhLFNBQVMsSUFBSSxTQUFZO0FBQ3RDLGVBQVM7QUFBQSxJQUNWO0FBQ0QsYUFBUyxPQUFPLE1BQU07QUFDdEIsV0FBTyxFQUFFQSxTQUFRLFFBQVE7QUFDdkIsVUFBSSxTQUFTLFFBQVFBLE1BQUs7QUFDMUIsVUFBSSxRQUFRO0FBQ1YsaUJBQVMsUUFBUSxRQUFRQSxRQUFPLFVBQVU7QUFBQSxNQUMzQztBQUFBLElBQ0Y7QUFDRCxXQUFPO0FBQUEsRUFDWCxDQUFHO0FBQ0g7QUFFQSxJQUFBLGtCQUFpQnFIO0FDcENqQixJQUFJLFlBQVl4SCxZQUNaLGlCQUFpQk87QUFpQ1QsZUFBZSxTQUFTLFFBQVEsUUFBUSxVQUFVO0FBQzVELFlBQVUsUUFBUSxRQUFRLFFBQVE7QUFDcEMsQ0FBQztBQzlCWWtILE1BQUFBLGFBQVlBLENBQUNDLGFBQStCO0FBQ3ZELFFBQU1DLFFBQU9DLFNBQVNDLHFCQUFxQixNQUFNLEVBQUUsQ0FBQztBQUM5Q0MsUUFBQUEsT0FBT0YsU0FBU0csY0FBYyxNQUFNO0FBRTFDQyxTQUFPQyxRQUFRUCxRQUFPLEVBQUVRLFFBQVEsQ0FBQyxDQUFDQyxLQUFLL0ksS0FBSyxNQUFNMEksS0FBS00sYUFBYUQsS0FBSy9JLEtBQUssQ0FBQztBQUUvRXVJLEVBQUFBLE1BQUtVLFlBQVlQLElBQUk7QUFDdkI7QUNSTyxNQUFNUSxXQUFXQSxDQUFDQyxPQUFnQkMsU0FBa0JDLFNBQXVCO0FBQzVFQyxNQUFBQSxNQUFNN0QsUUFBUTBELEtBQUssR0FBRztBQUV4QixXQUFPQSxNQUFNSSxJQUFJLENBQUNDLElBQUl6SSxXQUFVO0FBQ3hCMEksWUFBQUEsVUFBVSxDQUFDSixNQUFNdEksTUFBSyxFQUFFMkksT0FBT0MsT0FBTyxFQUFFQyxLQUFLLEdBQUc7QUFDdEQsYUFBT1YsU0FBU0UsUUFBUXJJLFFBQU95SSxJQUFJQyxPQUFPLEdBQUdMLFNBQVNLLE9BQU87QUFBQSxJQUFBLENBQzlEO0FBQUEsRUFDSDtBQUVJLE1BQUEsT0FBT04sVUFBVSxZQUFZQSxPQUFPO0FBQy9CUCxXQUFBQSxPQUFPQyxRQUFRTSxLQUFLLEVBQUVVLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDZixLQUFLL0ksS0FBSyxNQUFNO0FBQ25EeUosWUFBQUEsVUFBVSxDQUFDSixNQUFNTixHQUFHLEVBQUVXLE9BQU9DLE9BQU8sRUFBRUMsS0FBSyxHQUFHO0FBQ2hEYixVQUFBQSxHQUFHLElBQUlHLFNBQVNFLFFBQVFMLEtBQUsvSSxPQUFPeUosT0FBTyxHQUFHTCxTQUFTSyxPQUFPO0FBRTNESyxhQUFBQTtBQUFBQSxJQUNULEdBQUcsQ0FBVSxDQUFBO0FBQUEsRUFDZjtBQUVPWCxTQUFBQTtBQUNUO0FDckJPLE1BQU1ZLGVBQWVBLENBQUMvSixVQUMzQixDQUFDQSxVQUFVQSxVQUFVLFFBQVFBLFVBQVVnSztBQUNsQyxNQUFNTCxVQUFVLENBQUkzSixVQUFvRCxDQUFDK0osYUFBYS9KLEtBQUs7QUFhckZpSyxNQUFBQSxPQUFPLENBQTJCQyxRQUFnQkMsVUFBNEI7QUFDekYsU0FBT0EsTUFBTU4sT0FBTyxDQUFDTyxRQUFRQyxTQUFTO0FBQzdCQSxXQUFBQSxJQUFJLElBQUlILElBQUlHLElBQUk7QUFDaEJELFdBQUFBO0FBQUFBLEVBQ1QsR0FBRyxDQUFVLENBQUE7QUFDZjtBQUVnQkUsU0FBQUEsS0FBOENKLFFBQVdDLE9BQThCO0FBQ3JHLFFBQU1DLFNBQVM7QUFBQSxJQUFFLEdBQUdGO0FBQUFBLEVBQUFBO0FBQ3BCQyxRQUFNckIsUUFBUXVCLENBQVEsU0FBQTtBQUNwQixXQUFPRCxPQUFPQyxJQUFJO0FBQUEsRUFBQSxDQUNuQjtBQUNNRCxTQUFBQTtBQUNUO0FBRU8sTUFBTUcsTUFBTUEsQ0FBQ0wsS0FBZ0JiLE1BQWNtQixhQUE0QjtBQUM1RSxNQUFJLENBQUNuQjtBQUFhVyxXQUFBQTtBQUNaUyxRQUFBQSxZQUFhbkIsTUFBTTdELFFBQVE0RCxJQUFJLElBQUlBLE9BQU9BLEtBQUtxQixNQUFNLGFBQWE7QUFDbEVOLFFBQUFBLFNBQVNLLFVBQVVaLE9BQU8sQ0FBQ2MsU0FBb0I1QixRQUFnQjRCLFdBQVdBLFFBQVE1QixHQUFHLEdBQUdtQixHQUFHO0FBRTFGRSxTQUFBQSxXQUFXSixTQUFZUSxXQUFXSjtBQUMzQztBQUVPLE1BQU1RLE1BQU1BLENBQUNWLEtBQWdCYixNQUFjckosVUFBbUI7QUFDN0R5SyxRQUFBQSxZQUFhbkIsTUFBTTdELFFBQVE0RCxJQUFJLElBQUlBLE9BQU9BLEtBQUtxQixNQUFNLGFBQWE7QUFFeEUsU0FBT0QsVUFBVVosT0FBTyxDQUFDQyxLQUFLZixLQUFLbkwsT0FBTTtBQUNuQ2tNLFFBQUFBLElBQUlmLEdBQUcsTUFBTWlCO0FBQWVqQixVQUFBQSxHQUFHLElBQUk7QUFDbkNuTCxRQUFBQSxPQUFNNk0sVUFBVUksU0FBUztBQUFHZixVQUFJZixHQUFHLElBQUkvSTtBQUMzQyxXQUFPOEosSUFBSWYsR0FBRztBQUFBLEtBQ2JtQixHQUFHO0FBQ1I7QUFFYVksTUFBQUEsV0FBV0EsQ0FBQ0MsUUFBZ0I7QUFDakNDLFFBQUFBLFFBQVFELElBQUlFLE1BQU0sQ0FBQztBQUVyQkQsTUFBQUEsTUFBTUgsV0FBVyxHQUFHO0FBQ2hCRyxVQUFBQSxNQUNIRSxNQUFNLEVBQUUsRUFDUjNCLElBQUk0QixDQUFRLFFBQUEsR0FBRUEsTUFBTUEsS0FBSyxFQUN6QnZCLEtBQUssRUFBRTtBQUFBLEVBQ1o7QUFFTVEsUUFBQUEsU0FBUyw0Q0FBNENnQixLQUFLTCxHQUFHO0FBRW5FLFNBQU9YLFNBQ0g7QUFBQSxJQUNFak0sR0FBR2tOLFNBQVNqQixPQUFPLENBQUMsR0FBRyxFQUFFO0FBQUEsSUFDekJ6TCxHQUFHME0sU0FBU2pCLE9BQU8sQ0FBQyxHQUFHLEVBQUU7QUFBQSxJQUN6QmtCLEdBQUdELFNBQVNqQixPQUFPLENBQUMsR0FBRyxFQUFFO0FBQUEsRUFFM0JKLElBQUFBO0FBQ047QUFFYXVCLE1BQUFBLGFBQWFBLElBQUlDLFdBQXNCO0FBQ2xELFNBQU9BLE9BQU9qQyxJQUFJdkosQ0FBQUEsVUFBU3lMLEtBQUtDLFVBQVUxTCxLQUFLLENBQUMsRUFBRTJMLE1BQU0sQ0FBQ1IsS0FBSzVNLElBQUdxTixRQUFRVCxRQUFRUyxJQUFJLENBQUMsQ0FBQztBQUN6RjtBQUVPLE1BQU1DLFlBQVlBLENBQUNDLEtBQWFDLFFBQVEsTUFBY0QsSUFBSUUsUUFBUSxLQUFNLEtBQUlELFFBQVEsRUFBRUMsUUFBUSxPQUFPLE1BQU07QUFJM0csTUFBTUMsVUFBVSxDQUFDLFdBQVcsVUFBVSxVQUFVLFFBQVE7QUFFeEQsTUFBTUMsY0FBYztBQUFBLEVBQ3pCQyxRQUFRO0FBQUEsRUFDUkMsUUFBUTtBQUFBLEVBQ1JDLFFBQVE7QUFBQSxFQUNSQyxTQUFTO0FBQ1g7QUNwRkEsTUFBTUMsZUFBZUEsQ0FBQ2pNLFFBQW1CLENBQUEsTUFDdkMsT0FBT0EsVUFBVSxZQUFZcUosUUFBUXJKLEtBQUssS0FBSzJMLFFBQVFOLE1BQU1hLENBQUFBLFdBQVVBLFVBQVVsTSxLQUFLO0FBRTNFbU0sTUFBQUEsV0FBVyxDQUN0Qm5NLE9BQ0FrTSxXQUNrQztBQUNsQyxNQUFJLENBQUNsTTtBQUFjQSxXQUFBQTtBQUVuQixTQUFPNEksU0FBUzVJLE9BQU8sQ0FBQ29NLE1BQU0xTSxVQUFlO0FBQ3ZDdU0sUUFBQUEsYUFBYXZNLEtBQUssR0FBRztBQUNqQjJNLFlBQUFBLGNBQWMzTSxNQUFNd00sTUFBTTtBQUNoQyxVQUFJLFlBQVlHLGVBQWVoRCxRQUFRZ0QsWUFBWUMsTUFBTSxHQUFHO0FBQ25ENU0sZUFBQUEsTUFBTTJNLFlBQVlDLE1BQU07QUFBQSxNQUNqQztBQUNPRCxhQUFBQTtBQUFBQSxJQUNUO0FBRU8zTSxXQUFBQTtBQUFBQSxFQUFBQSxDQUNSO0FBQ0g7QUNuQk8sTUFBTTZNLGNBQWMsQ0FBa0R2TSxPQUFla00sV0FDMUZDLFNBQTBCbk0sT0FBT2tNLE1BQU07QUNVbEMsTUFBTU0scUJBQXFCQSxDQUFDO0FBQUEsRUFDakNDO0FBQUFBLEVBQ0FDLFlBQVk7QUFBQSxFQUNaQyxjQUFjZjtBQUNQLE1BQU07QUFDYixRQUFNLENBQUNNLFFBQVFVLFNBQVMsSUFBSWpPLEVBQWlCLFNBQVM7QUFFaERrTyxRQUFBQSxjQUFjQSxDQUFDUCxXQUF3Qjs7QUFDM0MsVUFBTVEsY0FBY1IsT0FBT1Msc0JBQXVCLEVBQUNDLFNBQVM7QUFDdERDLFVBQUFBLG9CQUFvQjNFLE9BQU9DLFFBQVE7QUFBQSxNQUFFLEdBQUdvRTtBQUFBQSxJQUFhLENBQUEsRUFBRU8sS0FBSyxDQUFDLENBQUNDLElBQUlDLE1BQU0sR0FBRyxDQUFDQyxJQUFJQyxNQUFNLE1BQU1GLFNBQVNFLE1BQU07QUFFM0dDLFVBQUFBLGVBQ0hOLHVCQUFrQk8sS0FBSyxDQUFDLENBQUNMLElBQUl6TixLQUFLLEdBQUdlLFdBQVU7QUFDeEMsWUFBQSxDQUFDNE0sSUFBSUksU0FBUyxJQUFJUixrQkFBa0J4TSxTQUFRLENBQUMsS0FBSztBQUVqRHFNLGFBQUFBLGVBQWVwTixTQUFTb04sY0FBY1c7QUFBQUEsSUFBQUEsQ0FDOUMsTUFKQVIsbUJBSUksT0FBaUI7QUFFeEJMLGNBQVVXLFVBQVU7QUFBQSxFQUFBO0FBR3RCRyxJQUFnQixNQUFNO0FBQ3BCLFVBQU1DLGdCQUFnQmxCLFVBQVV6TixRQUFRNE8sUUFBUyxTQUFRbEIsWUFBWTtBQUVyRSxRQUFJaUIsZUFBZTtBQUNqQixZQUFNRSxpQkFBaUIsSUFBSUMsZUFBZSxNQUFNakIsWUFBWWMsYUFBYSxDQUFDO0FBQzFFRSxxQkFBZUUsUUFBUUosYUFBYTtBQUVwQ2Qsa0JBQVljLGFBQWE7QUFBQSxJQUMzQjtBQUFBLEVBQ0YsR0FBRyxDQUFFLENBQUE7QUFFRXpCLFNBQUFBO0FBQ1Q7QUNoQkEsTUFBTThCLFNBQVNBLENBQUN0TyxPQUF3QnVPLFVBQXVCLEdBQUV2TyxRQUFRdU87QUFFekUsTUFBTUMsT0FBT0EsQ0FBQ3pGLFFBQWdCQSxJQUFJMEYsV0FBVyxLQUFLO0FBQ2xELE1BQU1DLFlBQVlBLENBQUMzRixRQUFnQkEsSUFBSTBGLFdBQVcsVUFBVTtBQUU1RCxNQUFNRSxhQUFhQSxDQUFDNUYsS0FBYS9JLFVBQTJCO0FBQzFELE1BQUk0TyxTQUFTN0Y7QUFDYixNQUFJOEYsV0FBVzdPO0FBRVh3TyxNQUFBQSxLQUFLSSxNQUFNLEdBQUc7QUFDUEEsYUFBQUEsT0FBTzVDLFFBQVEsT0FBTyxFQUFFO0FBQ3RCc0MsZUFBQUEsT0FBT3RPLE9BQU8sSUFBSTtBQUFBLEVBQy9CO0FBQ0kwTyxNQUFBQSxVQUFVRSxNQUFNLEdBQUc7QUFDWkEsYUFBQUEsT0FBTzVDLFFBQVEsWUFBWSxFQUFFO0FBQzNCc0MsZUFBQUEsT0FBT3RPLE9BQU8sR0FBRztBQUFBLEVBQzlCO0FBRU8sU0FBQTtBQUFBLElBQ0wrSSxLQUFLNkY7QUFBQUEsSUFDTDVPLE9BQU82TztBQUFBQSxFQUFBQTtBQUVYO0FBRUEsTUFBTUMsZ0JBQWdCLENBQ3BCLGVBQ0EsbUJBQ0Esb0JBQ0Esa0JBQ0EscUJBQ0EsYUFDQSxZQUNBLFlBQ0EsYUFDQSxZQUNBLFVBQ0EsU0FDQSxpQkFDQSxZQUNBLFFBQ0EsU0FDQSxPQUNBLFVBQ0EsYUFDQSxnQkFDQSxjQUNBLGVBQ0EsY0FDQSxpQkFDQSxlQUNBLGNBQWM7QUFHSEMsTUFBQUEsYUFBYUEsQ0FBQ0MsT0FBa0JDLFVBQW1CO0FBQ3hEQyxRQUFBQSxPQUFPdEcsT0FBT3NHLEtBQUtGLEtBQUs7QUFFOUIsTUFBSUUsS0FBS0MsU0FBUyxXQUFXLEtBQUtELEtBQUtDLFNBQVMsV0FBVyxHQUFHO0FBQ3BEQyxZQUFBQSxLQUFNLDRFQUEyRUgsS0FBSztBQUFBLEVBQ2hHO0FBRUksTUFBQSxPQUFPRCxVQUFVLFVBQVU7QUFDdEJBLFdBQUFBO0FBQUFBLEVBQ1Q7QUFFSSxNQUFBLGdCQUFnQkEsU0FBUyxzQkFBc0JBLE9BQU87QUFDeEQsVUFBTUssYUFBYUwsTUFBTUs7QUFDekIsVUFBTUMsbUJBQW1CTixNQUFNTTtBQUV2QixZQUFBO0FBQUEsTUFDTixHQUFHTjtBQUFBQSxNQUNILEdBQUdLO0FBQUFBLE1BQ0gsaUJBQWlCQyxpQkFBaUJDO0FBQUFBLE1BQ2xDLGtCQUFrQkQsaUJBQWlCRTtBQUFBQSxNQUNuQyxvQkFBb0JGLGlCQUFpQkc7QUFBQUEsSUFBQUE7QUFBQUEsRUFFekM7QUFFTzdHLFNBQUFBLE9BQU9DLFFBQVFtRyxLQUFLLEVBQUVuRixPQUFPLENBQUNDLEtBQUssQ0FBQzRGLFNBQVNDLFNBQVMsTUFBTTtBQUM3RGIsUUFBQUEsY0FBY0ssU0FBU08sT0FBTyxHQUFHO0FBQ3ZCcEIsa0JBQUFBLE9BQU9xQixXQUFXLElBQUk7QUFBQSxJQUNwQztBQUVNLFVBQUE7QUFBQSxNQUFFNUc7QUFBQUEsTUFBSy9JO0FBQUFBLElBQUFBLElBQVUyTyxXQUFXZSxTQUFTQyxTQUFTO0FBQ3BEN0YsUUFBSWYsR0FBRyxJQUFJL0k7QUFFWCxRQUFJK0ksUUFBUSxhQUFhO0FBQ3ZCZSxVQUFJOEYsWUFBWWpHLFFBQVEzSixLQUFLLElBQUssR0FBRUEsVUFBVTtBQUFBLElBQ2hEO0FBRUEsUUFBSStJLFFBQVEsYUFBYTtBQUN2QmUsVUFBSStGLFlBQVlsRyxRQUFRM0osS0FBSyxJQUFLLEdBQUVBLFVBQVU7QUFBQSxJQUNoRDtBQUVBLFFBQUkrSSxRQUFRLFlBQVk7QUFDbEJoSixVQUFBQSxXQUFXLE9BQU9DLFVBQVUsV0FBWTJKLFFBQVEzSixLQUFLLElBQUssR0FBRUEsVUFBVSxLQUFNQTtBQUFBQSxJQUNsRjtBQUVBLFFBQUkrSSxRQUFRLGVBQWVBLFFBQVEsZUFBZUEsUUFBUSxZQUFZO0FBQ3BFLFVBQUksT0FBTy9JLFVBQVUsWUFBWUEsTUFBTTZLLFdBQVcsR0FBRztBQUNuRGYsWUFBSWdHLFVBQVU7QUFBQSxNQUFBLFdBQ0wvRixhQUFhL0osS0FBSyxHQUFHO0FBQzlCOEosWUFBSWdHLFVBQVU7QUFBQSxNQUNoQjtBQUFBLElBQ0Y7QUFFSS9HLFFBQUFBLElBQUlvRyxTQUFTLGFBQWEsR0FBRztBQUMvQnJGLFVBQUlpRyxjQUFjO0FBQUEsSUFDcEI7QUFFQSxRQUFJaEgsUUFBUSxVQUFVO0FBQ2hCaUgsVUFBQUEsZUFBZTFCLE9BQU90TyxPQUFPLElBQUk7QUFBQSxJQUN2QztBQUVBLFFBQUkrSSxRQUFRLGlCQUFpQjtBQUMzQmUsVUFBSW1HLGlCQUFpQmpRO0FBQUFBLElBQ3ZCO0FBRUEsUUFBSStJLFFBQVEscUJBQXFCWSxRQUFRM0osS0FBSyxHQUFHO0FBQy9DOEosVUFBSW9HLGtCQUFtQixPQUFNbFE7QUFDN0I4SixVQUFJcUcsbUJBQW1CO0FBQUEsSUFDekI7QUFFSXBILFFBQUFBLFFBQVEsNEJBQTRCWSxRQUFRRyxJQUFJc0csc0JBQXNCLEtBQUt6RyxRQUFRRyxJQUFJdUcsZUFBZSxHQUFHO0FBQ3JHdkUsWUFBQUEsTUFBTWhCLFNBQVNoQixJQUFJdUcsZUFBZTtBQUN4QyxVQUFJdkUsS0FBSztBQUNQaEMsWUFBSXVHLGtCQUFrQnhFLFVBQVcsT0FBTUMsSUFBSTNOLE1BQU0yTixJQUFJbk4sTUFBTW1OLElBQUlSLE1BQU0sQ0FBQ3hCLElBQUlzRyx5QkFBeUIsR0FBRztBQUFBLE1BQ3hHO0FBQUEsSUFDRjtBQUVBLFFBQUlySCxRQUFRLFVBQVU7QUFDaEJ1SCxVQUFBQSxhQUFhdFEsUUFBUSxTQUFTO0FBQUEsSUFDcEM7QUFFQSxRQUFJK0ksUUFBUSxZQUFZO0FBQ2xCd0gsVUFBQUEsWUFBWXZRLFFBQVEsV0FBVztBQUFBLElBQ3JDO0FBRUEsUUFBSStJLFFBQVEsYUFBYTtBQUNuQnlILFVBQUFBLGlCQUFpQnhRLFFBQVEsaUJBQWlCO0FBQUEsSUFDaEQ7QUFFTzhKLFdBQUFBO0FBQUFBLEtBQ05rRixLQUFLO0FBQ1Y7QUM1S0EsTUFBTXlCLGNBQWNBLENBQUNDLFNBQW9CLE9BQU9BLFNBQVMsWUFBWSxDQUFDcEgsTUFBTTdELFFBQVFpTCxJQUFJLEtBQUssWUFBWUE7QUFFbEcsTUFBTUMsZ0JBQWdCQSxDQUFDclEsVUFDNUJzSSxPQUFPQyxRQUFRdkksS0FBSyxFQUFFdUosT0FBTyxDQUFDQyxLQUFLLENBQUNtRixPQUFPeUIsSUFBSSxNQUFNO0FBQ25ENUcsTUFBSW1GLEtBQUssSUFBSXdCLFlBQVlDLElBQUksSUFBSTNCLFdBQVc7QUFBQSxJQUFFLEdBQUd6TyxNQUFNMk8sS0FBSztBQUFBLEVBQUEsR0FBS0EsS0FBSyxJQUFJeUI7QUFFbkU1RyxTQUFBQTtBQUNULEdBQUcsRUFBRTtBQ0pQLE1BQU04RyxjQUF5QkEsQ0FBQztBQUFBLEVBQUU3UTtBQUFBQSxFQUFVLEdBQUc4UTtBQUFLLE1BQU07O0FBQ2xEQyxRQUFBQSxlQUFjL1EsMENBQVVpTSxRQUFRLFVBQVUsUUFBNUJqTSxtQkFBaUNpTSxRQUFRLGNBQWU7QUFFNUUsU0FBTy9MLEVBQUEsT0FBQTtBQUFBLElBQUEsR0FBUzRRO0FBQUFBLElBQU1FLHlCQUF5QjtBQUFBLE1BQUVDLFFBQVFGO0FBQUFBLElBQVk7QUFBQSxFQUFBLENBQUs7QUFDNUU7QUNSTyxNQUFNRyxZQUFZQSxNQUFNO0FBQzdCLFFBQU0sQ0FBQ2xTLFFBQVFDLFNBQVMsSUFBSUMsRUFBUyxLQUFLO0FBRTFDLFNBQU8sQ0FBQ0YsUUFBUSxNQUFNQyxVQUFVTyxDQUFRLFNBQUEsQ0FBQ0EsSUFBSSxDQUFDO0FBQ2hEO0FDSkEsTUFBTTJSLFlBQWdCQSxNQUNwQmpSLEVBQUEsT0FBQTtBQUFBLEVBQUtrUixPQUFNO0FBQUEsRUFBNkI3RCxPQUFNO0FBQUEsRUFBSzhELFFBQU87QUFBQSxFQUFLQyxTQUFRO0FBQUEsRUFBV3RSLFVBQ2hGRSxFQUFBLFFBQUE7QUFBQSxJQUNFcVIsR0FBRTtBQUFBLElBQ0ZDLE1BQUs7QUFBQSxFQUFBLENBQWM7QUFDYixDQUVYO0FDUEQsTUFBTUMsV0FBZUEsTUFDbkJ2UixFQUFBLE9BQUE7QUFBQSxFQUFLb1IsU0FBUTtBQUFBLEVBQVd0UixVQUN0QkUsRUFBQSxRQUFBO0FBQUEsSUFDRXNSLE1BQUs7QUFBQSxJQUNMRSxVQUFTO0FBQUEsSUFDVEgsR0FBRTtBQUFBLEVBQUEsQ0FBK3RCO0FBQzN0QixDQUVYO0FDTEQsTUFBTUksZ0JBQWdCQSxDQUFDQyxnQkFBK0M7QUFBQSxFQUNwRUMsTUFBTyxHQUFFRCxXQUFXQztBQUFBQSxFQUNwQkMsT0FBUSxHQUFFRixXQUFXRTtBQUFBQSxFQUNyQkMsUUFBUyxHQUFFSCxXQUFXRztBQUFBQSxFQUN0QkMsVUFBVyxHQUFFSixXQUFXSTtBQUMxQjtBQUVhQyxNQUFBQSxlQUFlQSxDQUFDQyxhQUFzQk4sZUFBOEM7O0FBQ3pGTyxRQUFBQSxpQkFBaUJSLGNBQWNDLFVBQVU7QUFDekMzQyxRQUFBQSxRQUFRMkIsY0FBY3NCLFdBQVc7QUFDakNFLFFBQUFBLFdBQVVuRCxvQ0FBT29ELFNBQVBwRCxtQkFBYW1EO0FBRTdCLFFBQU1FLGFBQWE7QUFBQSxJQUNqQkMsTUFBTyxHQUFFLElBQUVMLGdEQUFhTSxjQUFiTixtQkFBd0JLLFNBQVEsS0FBSyxLQUFLO0FBQUEsSUFDckRqQyxrQkFBaUJyQixvQ0FBT3VELGNBQVB2RCxtQkFBa0JxQjtBQUFBQSxJQUNuQ21DLGlCQUFnQnhELG9DQUFPdUQsY0FBUHZELG1CQUFrQnlEO0FBQUFBLElBQ2xDQyxpQkFBZ0IxRCxvQ0FBT3VELGNBQVB2RCxtQkFBa0IyRDtBQUFBQSxJQUNsQ0MsZ0JBQWdCO0FBQUEsSUFDaEJDLGtCQUFpQjdELG9DQUFPdUQsY0FBUHZELG1CQUFrQnlEO0FBQUFBLElBQ25DSyxrQkFBaUI5RCxvQ0FBT3VELGNBQVB2RCxtQkFBa0IyRDtBQUFBQSxJQUNuQ0ksaUJBQWlCO0FBQUEsRUFBQTtBQUduQixRQUFNQyxZQUFZO0FBQUEsSUFDaEJWLE9BQU10RCxvQ0FBT3VELGNBQVB2RCxtQkFBa0JzRDtBQUFBQSxFQUFBQTtBQUcxQixRQUFNVyxtQkFBaUJqRSxvQ0FBT29ELFNBQVBwRCxtQkFBYTJDLGVBQWMsQ0FBQSxHQUMvQ3BJLElBQUksQ0FBQzJKLGNBQTZCaEIsZUFBZWdCLFNBQVMsQ0FBQyxFQUMzRHRKLEtBQUssSUFBSTtBQUVOdUosUUFBQUEsbUJBQ0p4SixTQUFRcUYsb0NBQU9vRCxTQUFQcEQsbUJBQWFvRSxhQUFhLE9BQUtwRSxvQ0FBT29ELFNBQVBwRCxtQkFBYTJDLFdBQVd4QyxTQUFTLGVBQ3BFO0FBQUEsSUFDRWtFLFlBQWEsNEJBQTBCckUsV0FBTW9ELFNBQU5wRCxtQkFBWXFCLHdCQUF1QnJCLG9DQUFPb0QsU0FBUHBELG1CQUFhb0U7QUFBQUEsSUFDdkZuRCxnQkFBZ0I7QUFBQSxNQUVsQjtBQUVOLFFBQU1xRCxZQUFZO0FBQUEsSUFDaEIsSUFBR3RFLCtCQUFPb0QsU0FBUSxDQUFDO0FBQUEsSUFDbkJjLFdBQVdEO0FBQUFBLElBQ1gsR0FBR0U7QUFBQUEsRUFBQUE7QUFHRSxTQUFBO0FBQUEsSUFDTGhCO0FBQUFBLElBQ0FFO0FBQUFBLElBQ0FXO0FBQUFBLElBQ0FNO0FBQUFBLEVBQUFBO0FBRUo7QUN4RE8sTUFBTUMsb0JBQW9CLENBQUMsbUJBQW1CLDBCQUEwQixtQkFBbUIsZUFBZTtBQUVwR0MsTUFBQUEsaUJBQWlCLENBQzVCLGFBQ0EsZ0JBQ0EsY0FDQSxlQUNBLGNBQ0EsaUJBQ0EsZUFDQSxjQUFjO0FBSVQsTUFBTUMsZ0JBQWdCQSxDQUFDQyxTQUFpQkMsUUFBUUMsSUFBSyw4QkFBNkJGLE1BQU07QUFDeEYsTUFBTUcsWUFBWUEsQ0FBQ0gsU0FBaUJDLFFBQVFDLElBQUssMEJBQXlCRixNQUFNO0FDWGhGLE1BQU1JLGFBQWFBLENBQUN4VCxPQUFnQnlULFlBQVksV0FBVztBQUNoRSxRQUFNQyxjQUFjN1U7QUFDZDhVLFFBQUFBLGNBQWMzVCxNQUFNMlQsZUFBZVI7QUFDbkNTLFFBQUFBLGlCQUFpQjVULE1BQU00VCxrQkFBa0JMO0FBQ3pDTSxRQUFBQSxVQUFVbEssS0FBSzNKLE1BQU15VCxTQUFTLEdBQUcsVUFBVSxXQUFXLGFBQWEsWUFBWTtBQUVyRnZVLElBQVUsTUFBTTtBQUNkLFFBQUksQ0FBQytMLFdBQVd5SSxZQUFZMVUsU0FBUzZVLE9BQU8sR0FBRztBQUM3QyxVQUFJQSxRQUFRQyxRQUFRO0FBQ2xCSCxvQkFBWUUsUUFBUUMsTUFBTTtBQUFBLE1BQzVCO0FBQ0EsVUFBSUQsUUFBUUMsUUFBUTtBQUNsQkYsdUJBQWVDLFFBQVFFLFNBQVM7QUFBQSxNQUNsQztBQUFBLElBQ0Y7QUFDQUwsZ0JBQVkxVSxVQUFVNlU7QUFBQUEsRUFBQUEsR0FDckIsQ0FBQ0EsT0FBTyxDQUFDO0FBRVosU0FBTyxNQUFNO0FBQ1gsUUFBSUEsUUFBUUcsU0FBUztBQUNuQkwsa0JBQVlFLFFBQVFHLE9BQU87QUFBQSxJQUM3QjtBQUNBLFFBQUlILFFBQVFJLFlBQVk7QUFDdEJMLHFCQUFlQyxRQUFRSSxVQUFVO0FBQUEsSUFDbkM7QUFBQSxFQUFBO0FBRUo7QUMzQmFDLE1BQUFBLGtCQUFrQkEsQ0FBQ2xVLFVBQW1CO0FBQ2pELFFBQU1tVSxRQUFRLG9CQUFJQyxJQUFJLENBQUEsQ0FBRTtBQUVmcFUsV0FBQUEsT0FBTyxDQUFDeUksS0FBSy9JLFVBQVU7QUFDOUIsUUFBSStJLFFBQVEsY0FBYztBQUN4QjBMLFlBQU1FLElBQUkzVSxLQUFLO0FBQUEsSUFDakI7QUFFT0EsV0FBQUE7QUFBQUEsRUFBQUEsQ0FDUjtBQUVLNFUsUUFBQUEsWUFBWUMsSUFBUSxNQUFNdkwsTUFBTXdMLEtBQUtMLE1BQU1qSixRQUFRLEVBQUVqQyxJQUFJd0wsQ0FBUyxVQUFBO0FBQUEsSUFDdEVDLEtBQUs7QUFBQSxJQUNMQyxNQUFPLDJDQUEwQ0Y7QUFBQUEsRUFBQUEsRUFDakQsR0FBRyxDQUFDTixLQUFLLENBQUM7QUFFWmpWLElBQVUsTUFBTTtBQUNkb1YsY0FBVTlMLFFBQVNKLENBQUFBLFNBQVNMLFdBQVdLLElBQUksQ0FBQztBQUFBLEVBQUEsR0FDM0MsQ0FBQ2tNLFNBQVMsQ0FBQztBQUNoQjtBQ0hBLE1BQU1NLGFBQXdCQSxNQUFNOztBQUM1QkMsUUFBQUEsVUFBVWhXLElBQU8sSUFBSTtBQUMzQixRQUFNLENBQUNpVyxhQUFhQyxpQkFBaUIsSUFBSXBFLFVBQVc7QUFDcEQsUUFBTTNRLFFBQVFFO0FBQ2QsUUFBTWdNLFNBQVNNLG1CQUFtQjtBQUFBLElBQUVDLFdBQVdvSTtBQUFBQSxFQUFBQSxDQUFTO0FBQ2xEbEQsUUFBQUEsY0FBY3BGLFlBQVl2TSxPQUFPa00sTUFBTTtBQUs3QyxNQUFJQSxXQUFXLFVBQVU7QUFDbkJ5RixRQUFBQSxhQUFhLGtCQUFrQixJQUFJO0FBQUEsRUFDekM7QUFDTWpELFFBQUFBLFFBQVEyQixjQUFjc0IsV0FBVztBQUNqQ3FELFFBQUFBLFVBQVV4QixXQUFXN0IsV0FBVztBQUNoQyxRQUFBO0FBQUEsSUFBRWxUO0FBQUFBLElBQVFLO0FBQUFBLEVBQWFQLElBQUFBLGFBQVlvVCxnREFBYU0sY0FBYk4sbUJBQXdCblQsS0FBSztBQUNoRSxRQUFBO0FBQUEsSUFBRXFUO0FBQUFBLElBQVNtQjtBQUFBQSxJQUFXTjtBQUFBQSxJQUFXWDtBQUFBQSxFQUFBQSxJQUFlTCxhQUFhQyxhQUFhO0FBQUEsSUFDOUVMLE1BQU0yRCxTQUFPQztBQUFBQSxJQUNiM0QsT0FBTzBELFNBQU8xRDtBQUFBQSxJQUNkQyxRQUFReUQsU0FBT3pEO0FBQUFBLElBQ2ZDLFVBQVV3RCxTQUFPeEQ7QUFBQUEsRUFBQUEsQ0FDbEI7QUFDRHlDLGtCQUFnQnZDLFdBQVc7QUFFM0IsU0FDRXdELEVBQUEsT0FBQTtBQUFBLElBQ0VDLFdBQVcvWCxXQUFXNFgsU0FBT3pULE1BQU07QUFBQSxNQUNqQyxDQUFDeVQsU0FBT0ksU0FBUyxHQUFHUDtBQUFBQSxJQUFBQSxDQUNyQjtBQUFBLElBQ0RRLEtBQUtUO0FBQUFBLElBQVFwVixXQUViRSxFQUFBLE9BQUE7QUFBQSxNQUFLeVYsV0FBV0gsU0FBT25EO0FBQUFBLE1BQU15RCxPQUFPdkM7QUFBQUEsTUFBV2dDLFNBQVNsVztBQUFBQSxNQUFTVyxVQUM5RG9TLFdBQ0NsUyxFQUFBLE9BQUE7QUFBQSxRQUFLeVYsV0FBV0gsU0FBT087QUFBQUEsUUFBVy9WLFVBQ2hDRSxFQUFDdVIsVUFBUSxFQUFBO0FBQUEsTUFBQSxDQUFHO0FBQUEsSUFBQSxDQUVmLEdBRUhpRSxFQUFBLE9BQUE7QUFBQSxNQUFLQyxXQUFXL1gsV0FBVzRYLFNBQU9RLE1BQU07QUFBQSxRQUFFLENBQUNSLFNBQU9TLFFBQVEsR0FBR2pYO0FBQUFBLE1BQUFBLENBQVE7QUFBQSxNQUFHOFcsT0FBTzdDO0FBQUFBLE1BQVVqVCxXQUN2RkUsRUFBQSxPQUFBO0FBQUEsUUFBS3lWLFdBQVdILFNBQU9VO0FBQUFBLFFBQU9KLE9BQU94RDtBQUFBQSxNQUFBQSxDQUFXLEdBQ2hEcFMsRUFBQSxPQUFBO0FBQUEsUUFBS3lWLFdBQVdILFNBQU9XO0FBQUFBLFFBQU9MLE9BQU83RyxNQUFNa0g7QUFBQUEsUUFBT1osU0FBU2xXO0FBQUFBLFFBQVNXLFVBQ2xFRSxFQUFDaVIsV0FBUyxFQUFBO0FBQUEsTUFBQSxDQUFHLEdBRWZ1RSxFQUFBLE9BQUE7QUFBQSxRQUFLQyxXQUFXSCxTQUFPaEQ7QUFBQUEsUUFBV3NELE9BQU83RyxNQUFNdUQ7QUFBQUEsUUFBVXhTLFdBQ3ZEMFYsRUFBQSxLQUFBO0FBQUEsVUFBR1IsT0FBTWpHLFdBQU1sTixTQUFOa04sbUJBQVltSDtBQUFBQSxVQUFPOVYsUUFBTztBQUFBLFVBQVMyVSxLQUFJO0FBQUEsVUFBK0JNO0FBQUFBLFVBQWlCdlYsV0FDOUYwVixFQUFBLE9BQUE7QUFBQSxZQUFLQyxXQUFXSCxTQUFPMVg7QUFBQUEsWUFBTWtDLFdBQzNCRSxFQUFBLE9BQUE7QUFBQSxjQUFLeVYsV0FBV0gsU0FBT2E7QUFBQUEsY0FBTVAsT0FBTzdHLE1BQU1vSDtBQUFBQSxZQUFBQSxDQUFRLEdBQ2xEblcsRUFBQzJRLGFBQVc7QUFBQSxjQUFDOEUsV0FBV0gsU0FBT2M7QUFBQUEsY0FBTVIsT0FBTzdHLE1BQU1xSDtBQUFBQSxjQUFLdFcsV0FDcERpUCxvQ0FBT3FILFNBQVBySCxtQkFBYWpQO0FBQUFBLFlBQUFBLENBQ0YsQ0FBQTtBQUFBLFVBQUEsQ0FBQSxHQUVoQkUsRUFBQSxPQUFBO0FBQUEsWUFDRXlWLFdBQVcvWCxXQUFXNFgsU0FBT2UsUUFBUTtBQUFBLGNBQ25DLENBQUNmLFNBQU9nQixjQUFjLEdBQUd2SCxNQUFNc0gsT0FBT0U7QUFBQUEsWUFBQUEsQ0FDdkM7QUFBQSxZQUNEWCxPQUFPN0csTUFBTXNIO0FBQUFBLFlBQU92VyxXQUVuQmlQLFdBQU1zSCxXQUFOdEgsbUJBQWNqUDtBQUFBQSxVQUFBQSxDQUNYLENBQUE7QUFBQSxRQUFBLENBQUEsR0FFUkUsRUFBQSxPQUFBO0FBQUEsVUFBS3lWLFdBQVdILFNBQU9rQjtBQUFBQSxRQUFBQSxDQUFTLEdBQ2hDeFcsRUFBQSxPQUFBO0FBQUEsVUFBS3lWLFdBQVdILFNBQU9tQjtBQUFBQSxVQUFPYixPQUFPN0csTUFBTTBIO0FBQUFBLFVBQU0zVyxVQUMvQzBWLEVBQUEsUUFBQTtBQUFBLFlBQU1DLFdBQVdILFNBQU9vQjtBQUFBQSxZQUFVNVcsV0FDaENFLEVBQUEsUUFBQTtBQUFBLGNBQUFGLFdBQU9pUCxvQ0FBTzBILFVBQVAxSCxtQkFBY2pQO0FBQUFBLFlBQUFBLENBQVEsR0FDN0JFLEVBQUEsUUFBQTtBQUFBLGNBQU15VixXQUFXSCxTQUFPcUI7QUFBQUEsY0FBYXRCLFNBQVNEO0FBQUFBLGNBQWtCdFYsVUFDN0RxVixlQUFjcEcsb0NBQU8wSCxVQUFQMUgsbUJBQWM2SCxrQkFBaUI3SCxvQ0FBTzBILFVBQVAxSCxtQkFBYzhIO0FBQUFBLFlBQUFBLENBQ3ZELENBQUE7QUFBQSxVQUFBLENBQUE7QUFBQSxRQUFBLENBRUwsQ0FBQTtBQUFBLE1BQUEsQ0FDRixDQUFBO0FBQUEsSUFBQSxDQUNGLENBQUE7QUFBQSxFQUFBLENBQ0Y7QUFFVjtBQUVBLE1BQWUzVyxVQUFBQSxPQUFPRixFQUFDaVYsZUFBYTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3RGcEMsTUFBTTZCLGNBQWdCQSxNQUFNOztBQUMxQixRQUFNelcsUUFBUUU7QUFDUndPLFFBQUFBLFFBQVEyQixjQUFjclEsS0FBSztBQUMzQmdWLFFBQUFBLFVBQVV4QixXQUFXeFQsS0FBSztBQUVoQyxTQUNFbVYsRUFBQSxLQUFBO0FBQUEsSUFDRVIsT0FBTWpHLFdBQU1sTixTQUFOa04sbUJBQVltSDtBQUFBQSxJQUNsQjlWLFFBQU87QUFBQSxJQUNQMlUsS0FBSTtBQUFBLElBQ0pVLFdBQVcvWCxXQUFXNFgsU0FBT3pULE1BQU07QUFBQSxNQUNqQyxDQUFDeVQsU0FBT3lCLFFBQVEsS0FBR2hJLFdBQU1sTixTQUFOa04sbUJBQVlpSSxhQUFZO0FBQUEsSUFBQSxDQUM1QztBQUFBLElBQ0RwQixPQUFPN0csTUFBTWxOO0FBQUFBLElBQ2J3VDtBQUFBQSxJQUFpQnZWLFdBRWpCMFYsRUFBQSxPQUFBO0FBQUEsTUFBS0MsV0FBV0gsU0FBT1E7QUFBQUEsTUFBS2hXLFdBQzFCRSxFQUFBLE9BQUE7QUFBQSxRQUFLeVYsV0FBV0gsU0FBTzJCO0FBQUFBLFFBQU1yQixPQUFPN0csTUFBTWtJO0FBQUFBLE1BQUFBLENBQUssR0FDL0N6QixFQUFBLE9BQUE7QUFBQSxRQUFLQyxXQUFXSCxTQUFPNEI7QUFBQUEsUUFBVXBYLFdBQy9CRSxFQUFBLE9BQUE7QUFBQSxVQUFLeVYsV0FBV0gsU0FBT2E7QUFBQUEsVUFBTVAsT0FBTzdHLE1BQU1vSDtBQUFBQSxRQUFBQSxDQUFLLEdBQy9DblcsRUFBQSxPQUFBO0FBQUEsVUFBS3lWLFdBQVdILFNBQU9jO0FBQUFBLFVBQU1SLE9BQU83RyxNQUFNcUg7QUFBQUEsVUFBS3RXLFVBQzdDRSxFQUFDMlEsYUFBVztBQUFBLFlBQUE3USxXQUFFaVAsV0FBTXFILFNBQU5ySCxtQkFBWWpQO0FBQUFBLFVBQUFBLENBQVE7QUFBQSxRQUFBLENBQzlCLENBQUE7QUFBQSxNQUFBLENBQUEsR0FHUjBWLEVBQUEsT0FBQTtBQUFBLFFBQUtDLFdBQVdILFNBQU9lO0FBQUFBLFFBQVFULE9BQU83RyxNQUFNc0g7QUFBQUEsUUFBT3ZXLFdBQ2pERSxFQUFBLE9BQUE7QUFBQSxVQUFLeVYsV0FBV0gsU0FBT2E7QUFBQUEsVUFBTVAsT0FBTzdHLE1BQU1vSDtBQUFBQSxRQUFBQSxDQUFLLEdBQy9DblcsRUFBQSxPQUFBO0FBQUEsVUFBS3lWLFdBQVdILFNBQU82QjtBQUFBQSxVQUFXclgsV0FBRWlQLFdBQU1zSCxXQUFOdEgsbUJBQWNqUDtBQUFBQSxRQUFBQSxDQUFlLENBQUE7QUFBQSxNQUFBLENBQzdELENBQUE7QUFBQSxJQUFBLENBQUEsR0FFUkUsRUFBQSxPQUFBO0FBQUEsTUFBS3lWLFdBQVdILFNBQU9tQjtBQUFBQSxNQUFPYixPQUFPN0csTUFBTTBIO0FBQUFBLE1BQU0zVyxXQUM5Q2lQLFdBQU0wSCxVQUFOMUgsbUJBQWFqUDtBQUFBQSxJQUFBQSxDQUNWLENBQUE7QUFBQSxFQUFBLENBQ0o7QUFFUjtBQzFCQSxNQUFNc1gsY0FBY0EsTUFBTTs7QUFDbEJsQyxRQUFBQSxVQUFVaFcsSUFBTyxJQUFJO0FBQ3JCLFFBQUE7QUFBQSxJQUFFSjtBQUFBQSxJQUFRSztBQUFBQSxNQUFhUCxZQUFhO0FBQzFDLFFBQU15QixRQUFRRTtBQUNkLFFBQU1nTSxTQUFTTSxtQkFBbUI7QUFBQSxJQUFFQyxXQUFXb0k7QUFBQUEsRUFBQUEsQ0FBUztBQUNsRGxELFFBQUFBLGNBQWNwRixZQUFZdk0sT0FBT2tNLE1BQU07QUFLN0MsTUFBSUEsV0FBVyxVQUFVO0FBQ25CeUYsUUFBQUEsYUFBYSxrQkFBa0IsSUFBSTtBQUFBLEVBQ3pDO0FBRU1qRCxRQUFBQSxRQUFRMkIsY0FBY3NCLFdBQVc7QUFDdkN1QyxrQkFBZ0J2QyxXQUFXO0FBQ3JCLFFBQUE7QUFBQSxJQUFFRTtBQUFBQSxJQUFTbUI7QUFBQUEsSUFBV047QUFBQUEsSUFBV1g7QUFBQUEsRUFBQUEsSUFBZUwsYUFBYUMsYUFBYTtBQUFBLElBQzlFTCxNQUFNMkQsU0FBT0M7QUFBQUEsSUFDYjNELE9BQU8wRCxTQUFPMUQ7QUFBQUEsSUFDZEMsUUFBUXlELFNBQU96RDtBQUFBQSxJQUNmQyxVQUFVd0QsU0FBT3hEO0FBQUFBLEVBQUFBLENBQ2xCO0FBQ0t1RixRQUFBQSxnQkFBZXRJLG9DQUFPdUksVUFBUHZJLG1CQUFjbUQ7QUFFbkMsU0FDRXNELEVBQUEsT0FBQTtBQUFBLElBQUtHLEtBQUtUO0FBQUFBLElBQVNPLFdBQVcvWCxXQUFXNFgsU0FBT3pULE1BQU07QUFBQSxNQUNwRCxDQUFDeVQsU0FBT2pKLE9BQU8sR0FBR0UsV0FBVztBQUFBLE1BQzdCLENBQUMrSSxTQUFPbEosTUFBTSxHQUFHRyxXQUFXO0FBQUEsTUFDNUIsQ0FBQytJLFNBQU9uSixNQUFNLEdBQUdJLFdBQVc7QUFBQSxJQUFBLENBQzdCO0FBQUEsSUFBRXpNLFdBQ0RFLEVBQUEsT0FBQTtBQUFBLE1BQUt5VixXQUFXSCxTQUFPbkQ7QUFBQUEsTUFBTXlELE9BQU92QztBQUFBQSxNQUFXZ0MsU0FBU2xXO0FBQUFBLE1BQVNXLFVBQzlEb1MsV0FDQ2xTLEVBQUEsT0FBQTtBQUFBLFFBQUt5VixXQUFXSCxTQUFPTztBQUFBQSxRQUFXL1YsVUFDaENFLEVBQUN1UixVQUFRLEVBQUE7QUFBQSxNQUFBLENBQUc7QUFBQSxJQUFBLENBRWYsR0FFSGlFLEVBQUEsT0FBQTtBQUFBLE1BQ0VDLFdBQVcvWCxXQUFXNFgsU0FBT1EsTUFBTTtBQUFBLFFBQ2pDLENBQUNSLFNBQU9TLFFBQVEsR0FBR2pYO0FBQUFBLE1BQUFBLENBQ3BCO0FBQUEsTUFDRDhXLE9BQU83QztBQUFBQSxNQUFValQsV0FFakJFLEVBQUEsT0FBQTtBQUFBLFFBQUt5VixXQUFXSCxTQUFPVTtBQUFBQSxRQUFPSixPQUFPeEQ7QUFBQUEsTUFBQUEsQ0FBVyxHQUNoRG9ELEVBQUEsT0FBQTtBQUFBLFFBQUtDLFdBQVdILFNBQU9oRDtBQUFBQSxRQUFXc0QsT0FBTzdHLE1BQU11RDtBQUFBQSxRQUFVeFMsV0FDdkRFLEVBQUEsT0FBQTtBQUFBLFVBQUt5VixXQUFXSCxTQUFPVztBQUFBQSxVQUFPTCxPQUFPN0csTUFBTWtIO0FBQUFBLFVBQU9aLFNBQVNsVztBQUFBQSxVQUFTVyxVQUNsRUUsRUFBQ2lSLFdBQVMsRUFBQTtBQUFBLFFBQUEsQ0FBRyxHQUVmalIsRUFBQSxPQUFBO0FBQUEsVUFBS3lWLFdBQVdILFNBQU9pQztBQUFBQSxVQUFXM0IsT0FBTzdHLE1BQU13STtBQUFBQSxVQUFVelgsV0FDdERpUCxXQUFNd0ksY0FBTnhJLG1CQUFpQmpQO0FBQUFBLFFBQUFBLENBQVEsR0FFNUIwVixFQUFBLE9BQUE7QUFBQSxVQUFLQyxXQUFXSCxTQUFPaE47QUFBQUEsVUFBS3hJLFVBQUEsQ0FDekJ1WCxnQkFDQ3JYLEVBQUEsT0FBQTtBQUFBLFlBQUt5VixXQUFXSCxTQUFPa0M7QUFBQUEsWUFBVTVCLE9BQU81TCxLQUFLK0UsTUFBTXVJLE9BQU8sT0FBTztBQUFBLFlBQUV4WCxVQUNqRUUsRUFBQ3VSLFVBQVEsRUFBQTtBQUFBLFVBQUEsQ0FBRyxHQUdoQnZSLEVBQUEsT0FBQTtBQUFBLFlBQUt5VixXQUFXSCxTQUFPbUM7QUFBQUEsWUFBVzdCLE9BQU83RyxNQUFNdUk7QUFBQUEsWUFBTXhYLFdBQUVpUCxXQUFNdUksVUFBTnZJLG1CQUFhalA7QUFBQUEsVUFBQUEsQ0FBZSxDQUFBO0FBQUEsUUFBQSxDQUFBLEdBR3JGRSxFQUFBLE9BQUE7QUFBQSxVQUFLeVYsV0FBV0gsU0FBTzFYO0FBQUFBLFVBQU1rQyxXQUN6QmlQLE1BQU1qUCxZQUFZLENBQUEsR0FBSXdKLElBQUlvTyxDQUFBQSxVQUMxQjFYLEVBQUNILGNBQVk7QUFBQSxZQUFDRSxPQUFPMlg7QUFBQUEsWUFBTTVYLFVBQ3pCRSxFQUFDOFcsYUFBUyxFQUFBO0FBQUEsVUFBQSxDQUViLENBQUE7QUFBQSxRQUFBLENBQ0csQ0FBQTtBQUFBLE1BQUEsQ0FDRixDQUFBO0FBQUEsSUFBQSxDQUNGLENBQUE7QUFBQSxFQUFBLENBQ0Y7QUFFVjtBQUVBLE1BQWU1VyxVQUFBQSxPQUFPRixFQUFDb1gsZ0JBQWM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzFGeEJPLE1BQUFBLHdCQUF3QkEsQ0FBQ0MsY0FDcENBLFlBQVk7QUFBQSxFQUFFdkYsTUFBTTtBQUFBLEVBQWN3RixRQUFRO0FBQUEsRUFBVUMsT0FBTztBQUFXLEVBQUVGLFNBQVMsSUFBSUE7Ozs7O0FDS3ZGLE1BQU1HLE9BQVdBLE1BQU07O0FBQ3JCLFFBQU0xWCxRQUFRRTtBQUNSd08sUUFBQUEsUUFBUTJCLGNBQWNyUSxLQUFLO0FBRWpDLFNBQ0VMLEVBQUEsT0FBQTtBQUFBLElBQUt5VixXQUFXSCxTQUFPelQ7QUFBQUEsSUFBTStULE9BQU83RyxNQUFNbE47QUFBQUEsSUFBSy9CLFVBQzdDRSxFQUFDMlEsYUFBVztBQUFBLE1BQUE3USxXQUFFaVAsb0NBQU9sTixTQUFQa04sbUJBQWFqUDtBQUFBQSxJQUFBQSxDQUFRO0FBQUEsRUFBQSxDQUMvQjtBQUVWO0FDREEsTUFBTWtZLGdCQUFrQkEsTUFBTTs7QUFDdEI5QyxRQUFBQSxVQUFVaFcsSUFBTyxJQUFJO0FBQzNCLFFBQU1xTixTQUFTTSxtQkFBbUI7QUFBQSxJQUFFQyxXQUFXb0k7QUFBQUEsRUFBQUEsQ0FBUztBQUN4RCxRQUFNN1UsUUFBUUU7QUFDUnlSLFFBQUFBLGNBQWNwRixZQUFZdk0sT0FBT2tNLE1BQU07QUFDdkM4SSxRQUFBQSxVQUFVeEIsV0FBVzdCLFdBQVc7QUFFdENySCxNQUFJcUgsYUFBYSx5QkFBd0JBLGdEQUFhcUUsV0FBYnJFLG1CQUFxQjNFLEtBQUs7QUFDbkUxQyxNQUFJcUgsYUFBYSx3QkFBdUJBLGdEQUFheUUsVUFBYnpFLG1CQUFvQjNFLEtBQUs7QUFDM0QwQixRQUFBQSxRQUFRMkIsY0FBY3NCLFdBQVc7QUFHdkMsUUFBTWUsWUFBWTtBQUFBLElBQ2hCa0YsWUFBWU4sdUJBQXNCNUksV0FBTWxOLFNBQU5rTixtQkFBWW1KLEtBQUs7QUFBQSxFQUFBO0FBR3JELFFBQU1DLGNBQWM7QUFBQSxJQUNsQixHQUFHcEosK0JBQU9zSDtBQUFBQSxJQUNWK0IsZ0JBQWdCVCx1QkFBc0I1SSxXQUFNbE4sU0FBTmtOLG1CQUFZNkksU0FBUztBQUFBLEVBQUE7QUFHN0QsUUFBTVMsYUFBYTtBQUFBLElBQ2pCLEdBQUd0SiwrQkFBTzBIO0FBQUFBLElBQ1YyQixnQkFBZ0JULHVCQUFzQjVJLFdBQU1sTixTQUFOa04sbUJBQVk2SSxTQUFTO0FBQUEsRUFBQTtBQUc3RCxTQUNFNVgsRUFBQSxLQUFBO0FBQUEsSUFDRTJWLEtBQUtUO0FBQUFBLElBQ0xGLE9BQU1qRyxXQUFNbE4sU0FBTmtOLG1CQUFZbUg7QUFBQUEsSUFDbEI5VixRQUFPO0FBQUEsSUFDUDJVLEtBQUk7QUFBQSxJQUNKVSxXQUFXL1gsV0FBVzRYLFNBQU96VCxNQUFNO0FBQUEsTUFDakMsQ0FBQ3lULFNBQU9qSixPQUFPLEdBQUdFLFdBQVc7QUFBQSxNQUM3QixDQUFDK0ksU0FBT25KLE1BQU0sR0FBR0ksV0FBVztBQUFBLE1BQzVCLENBQUMrSSxTQUFPbEosTUFBTSxHQUFHRyxXQUFXO0FBQUEsSUFBQSxDQUM3QjtBQUFBLElBQ0RxSixPQUFPN0csTUFBTWxOO0FBQUFBLElBQ2J3VDtBQUFBQSxJQUFpQnZWLFVBRWpCMFYsRUFBQSxPQUFBO0FBQUEsTUFBS0MsV0FBV0gsU0FBT1E7QUFBQUEsTUFBTUYsT0FBTzdDO0FBQUFBLE1BQVVqVCxXQUM1Q0UsRUFBQSxPQUFBO0FBQUEsUUFBS3lWLFdBQVdILFNBQU9hO0FBQUFBLFFBQU1QLE9BQU83RyxNQUFNb0g7QUFBQUEsTUFBQUEsQ0FBSyxHQUMvQ25XLEVBQUEsT0FBQTtBQUFBLFFBQUt5VixXQUFXSCxTQUFPYztBQUFBQSxRQUFLdFcsWUFDeEJpUCwrQkFBT2pQLGFBQVksQ0FBQSxHQUFJd0osSUFBSUMsQ0FBQUEsT0FDM0J2SixFQUFDSCxjQUFZO0FBQUEsVUFBQ0UsT0FBT3dKO0FBQUFBLFVBQUd6SixVQUN0QkUsRUFBQytYLE1BQUksRUFBQTtBQUFBLFFBQUEsQ0FFUixDQUFBO0FBQUEsTUFBQSxDQUFDLEdBRUovWCxFQUFBLE9BQUE7QUFBQSxRQUFLeVYsV0FBV0gsU0FBT2U7QUFBQUEsUUFBUVQsT0FBT3VDO0FBQUFBLFFBQVlyWSxVQUMvQ3FZLDJDQUFhclk7QUFBQUEsTUFBQUEsQ0FBUSxHQUV4QkUsRUFBQSxPQUFBO0FBQUEsUUFBS3lWLFdBQVdILFNBQU9tQjtBQUFBQSxRQUFPYixPQUFPeUM7QUFBQUEsUUFBV3ZZLFVBQzdDdVkseUNBQVl2WTtBQUFBQSxNQUFBQSxDQUNULENBQUE7QUFBQSxJQUFBLENBQUE7QUFBQSxFQUFBLENBRU47QUFFUjtBQUVBLE1BQWVJLFVBQUFBLE9BQU9GLEVBQUNnWSxrQkFBYzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2hFckMsTUFBTU0sVUFBWUEsTUFBTTs7QUFDdEIsUUFBTWpZLFFBQVFFO0FBQ1J3TyxRQUFBQSxRQUFRMkIsY0FBY3JRLEtBQUs7QUFDM0JrTSxRQUFBQSxVQUFTbE0sK0JBQU9rTSxXQUFVO0FBQzFCOEksUUFBQUEsVUFBVXhCLFdBQVd4VCxLQUFLO0FBR2hDLFNBQ0VtVixFQUFBLEtBQUE7QUFBQSxJQUNFUixPQUFNakcsV0FBTWxOLFNBQU5rTixtQkFBWW1IO0FBQUFBLElBQ2xCOVYsUUFBTztBQUFBLElBQ1AyVSxLQUFJO0FBQUEsSUFDSlUsV0FBVy9YLFdBQVc0WCxTQUFPelQsTUFBTTtBQUFBLE1BQ2pDLENBQUN5VCxTQUFPakosT0FBTyxHQUFHRSxXQUFXO0FBQUEsSUFBQSxDQUM5QjtBQUFBLElBQ0RxSixPQUFPdkwsS0FBSzBFLE1BQU1sTixNQUFNLEdBQUcwUixjQUFjO0FBQUEsSUFDekM4QjtBQUFBQSxJQUFpQnZWLFdBRWpCRSxFQUFBLE9BQUE7QUFBQSxNQUFLeVYsV0FBV0gsU0FBT2lEO0FBQUFBLE1BQVEzQyxPQUFPN0csTUFBTXdKO0FBQUFBLE1BQU96WSxVQUNqREUsRUFBQSxPQUFBO0FBQUEsUUFBS3lWLFdBQVdILFNBQU9hO0FBQUFBLFFBQU1QLE9BQU83RyxNQUFNb0g7QUFBQUEsTUFBQUEsQ0FBSztBQUFBLElBQUEsQ0FBRyxHQUVwRFgsRUFBQSxPQUFBO0FBQUEsTUFBS0MsV0FBV0gsU0FBT2hEO0FBQUFBLE1BQVdzRCxPQUFPNUwsS0FBSytFLE1BQU1sTixNQUFNLEdBQUcwUixjQUFjO0FBQUEsTUFBRXpULFdBQzNFMFYsRUFBQSxPQUFBO0FBQUEsUUFBS0MsV0FBV0gsU0FBT1E7QUFBQUEsUUFBS2hXLFdBQzFCRSxFQUFBLE9BQUE7QUFBQSxVQUFLeVYsV0FBV0gsU0FBT2E7QUFBQUEsUUFBQUEsQ0FBWSxHQUNuQ25XLEVBQUMyUSxhQUFXO0FBQUEsVUFBQzhFLFdBQVdILFNBQU9jO0FBQUFBLFVBQU1SLE9BQU83RyxNQUFNcUg7QUFBQUEsVUFBS3RXLFdBQ3BEaVAsV0FBTXFILFNBQU5ySCxtQkFBWWpQO0FBQUFBLFFBQUFBLENBQ0QsQ0FBQTtBQUFBLE1BQUEsQ0FBQSxHQUVoQjBWLEVBQUEsT0FBQTtBQUFBLFFBQUExVixXQUNFRSxFQUFBLE9BQUE7QUFBQSxVQUFLeVYsV0FBV0gsU0FBT2U7QUFBQUEsVUFBUVQsT0FBTzdHLE1BQU1zSDtBQUFBQSxVQUFPdlcsV0FDaERpUCxXQUFNc0gsV0FBTnRILG1CQUFjalA7QUFBQUEsUUFBQUEsQ0FBUSxHQUV6QkUsRUFBQSxPQUFBO0FBQUEsVUFBS3lWLFdBQVdILFNBQU9tQjtBQUFBQSxVQUFPYixPQUFPN0csTUFBTTBIO0FBQUFBLFVBQU0zVyxXQUM5Q2lQLFdBQU0wSCxVQUFOMUgsbUJBQWFqUDtBQUFBQSxRQUFBQSxDQUNWLENBQUE7QUFBQSxNQUFBLENBQ0YsQ0FBQTtBQUFBLElBQUEsQ0FDRixDQUFBO0FBQUEsRUFBQSxDQUNKO0FBRVI7QUNyQ0EsTUFBTWtZLGdCQUFrQkEsTUFBTTs7QUFDdEI5QyxRQUFBQSxVQUFVaFcsSUFBTyxJQUFJO0FBQzNCLFFBQU1xTixTQUFTTSxtQkFBbUI7QUFBQSxJQUFFQyxXQUFXb0k7QUFBQUEsRUFBQUEsQ0FBUztBQUN4RCxRQUFNN1UsUUFBUUU7QUFDUnlSLFFBQUFBLGNBQWNwRixZQUFZdk0sT0FBT2tNLE1BQU07QUFDdkN3QyxRQUFBQSxRQUFRMkIsY0FBY3NCLFdBQVc7QUFDdkN1QyxrQkFBZ0J2QyxXQUFXO0FBRTNCLFNBQ0V3RCxFQUFBLE9BQUE7QUFBQSxJQUNFRyxLQUFLVDtBQUFBQSxJQUNMTyxXQUFXL1gsV0FBVzRYLFNBQU96VCxNQUFNO0FBQUEsTUFDakMsQ0FBQ3lULFNBQU9qSixPQUFPLEdBQUdFLFdBQVc7QUFBQSxJQUFBLENBQzlCO0FBQUEsSUFDRHFKLE9BQU83RyxNQUFNbE47QUFBQUEsSUFBSy9CLFdBRWxCRSxFQUFBLE9BQUE7QUFBQSxNQUFLeVYsV0FBV0gsU0FBT2dDO0FBQUFBLE1BQU8xQixPQUFPN0csTUFBTXVJO0FBQUFBLE1BQU14WCxXQUM5Q2lQLFdBQU11SSxVQUFOdkksbUJBQWFqUDtBQUFBQSxJQUFBQSxDQUFRLEdBRXhCRSxFQUFBLE9BQUE7QUFBQSxNQUFLeVYsV0FBV0gsU0FBT2tEO0FBQUFBLE1BQVExWSxXQUMzQmlQLE1BQU1qUCxZQUFZLENBQUEsR0FBSXdKLElBQUlvTyxDQUFBQSxVQUMxQjFYLEVBQUNILGNBQVk7QUFBQSxRQUFDRSxPQUFPO0FBQUEsVUFBRSxHQUFHMlg7QUFBQUEsVUFBT25MO0FBQUFBLFFBQU87QUFBQSxRQUFFek0sVUFDeENFLEVBQUNzWSxTQUFLLEVBQUE7QUFBQSxNQUFBLENBRVQsQ0FBQTtBQUFBLElBQUEsQ0FDRyxDQUFBO0FBQUEsRUFBQSxDQUNGO0FBRVY7QUFFQSxNQUFlcFksVUFBQUEsT0FBT0YsRUFBQ2dZLGtCQUFjOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbkNyQyxNQUFNUyxRQUFZQSxNQUFNOztBQUN0QixRQUFNcFksUUFBUUU7QUFDUndPLFFBQUFBLFFBQVEyQixjQUFjclEsS0FBSztBQUMzQmtNLFFBQUFBLFVBQVNsTSwrQkFBT2tNLFdBQVU7QUFFaEMsU0FDRWlKLEVBQUEsT0FBQTtBQUFBLElBQUtDLFdBQVcvWCxXQUFXNFgsU0FBT3pULE1BQU07QUFBQSxNQUN0QyxDQUFDeVQsU0FBT2pKLE9BQU8sR0FBR0UsV0FBVztBQUFBLElBQUEsQ0FDOUI7QUFBQSxJQUFFek0sV0FDRDBWLEVBQUEsT0FBQTtBQUFBLE1BQUtDLFdBQVdILFNBQU9qRDtBQUFBQSxNQUFLdlMsV0FDMUIwVixFQUFBLE9BQUE7QUFBQSxRQUFLQyxXQUFXSCxTQUFPb0Q7QUFBQUEsUUFBTTVZLFdBQzNCRSxFQUFBLE9BQUE7QUFBQSxVQUFLeVYsV0FBV0gsU0FBT2E7QUFBQUEsUUFBQUEsQ0FBSyxHQUM1Qm5XLEVBQUEsT0FBQTtBQUFBLFVBQUt5VixXQUFXSCxTQUFPYTtBQUFBQSxRQUFBQSxDQUFRLENBQUE7QUFBQSxNQUFBLENBQUEsR0FFakNYLEVBQUEsT0FBQTtBQUFBLFFBQUtDLFdBQVdILFNBQU9RO0FBQUFBLFFBQUtoVyxXQUMxQkUsRUFBQSxPQUFBO0FBQUEsVUFBS3lWLFdBQVdILFNBQU9xRDtBQUFBQSxVQUFRL0MsT0FBTzdHLE1BQU00SjtBQUFBQSxVQUFPN1ksV0FBRWlQLFdBQU00SixXQUFONUosbUJBQWNqUDtBQUFBQSxRQUFBQSxDQUFRLEdBQzNFMFYsRUFBQSxPQUFBO0FBQUEsVUFBS0MsV0FBV0gsU0FBT3NEO0FBQUFBLFVBQU1oRCxPQUFPN0csTUFBTTJKO0FBQUFBLFVBQU01WSxVQUFBLEVBQUVpUCxXQUFNMkosVUFBTjNKLG1CQUFhOEosT0FBSyxRQUFLOUosV0FBTTJKLFVBQU4zSixtQkFBYStKLEtBQUs7QUFBQSxRQUFBLENBQU8sQ0FBQTtBQUFBLE1BQUEsQ0FDOUYsQ0FBQTtBQUFBLElBQUEsQ0FBQSxHQUVSdEQsRUFBQSxPQUFBO0FBQUEsTUFBS0MsV0FBV0gsU0FBT3dDO0FBQUFBLE1BQU1oWSxXQUMzQjBWLEVBQUEsT0FBQTtBQUFBLFFBQUtDLFdBQVdILFNBQU95RDtBQUFBQSxRQUFLalosV0FDMUJFLEVBQUEsT0FBQTtBQUFBLFVBQUt5VixXQUFXSCxTQUFPMEQ7QUFBQUEsUUFBQUEsQ0FBUyxHQUNoQ2haLEVBQUEsT0FBQTtBQUFBLFVBQUt5VixXQUFXSCxTQUFPMkQ7QUFBQUEsVUFBVXJELE9BQU83RyxNQUFNMko7QUFBQUEsVUFBTTVZLFdBQUVpUCxXQUFNMkosVUFBTjNKLG1CQUFhOEo7QUFBQUEsUUFBQUEsQ0FBWSxDQUFBO0FBQUEsTUFBQSxDQUFBLEdBR2pGckQsRUFBQSxPQUFBO0FBQUEsUUFBS0MsV0FBV0gsU0FBTzREO0FBQUFBLFFBQUlwWixXQUN6QkUsRUFBQSxPQUFBO0FBQUEsVUFBS3lWLFdBQVdILFNBQU82RDtBQUFBQSxVQUFVdkQsT0FBTzdHLE1BQU1vSztBQUFBQSxVQUFTclosV0FBRWlQLFdBQU1vSyxhQUFOcEssbUJBQWdCalA7QUFBQUEsUUFBQUEsQ0FBUSxHQUNqRkUsRUFBQSxPQUFBO0FBQUEsVUFBS3lWLFdBQVdILFNBQU84RDtBQUFBQSxVQUFVeEQsT0FBTzdHLE1BQU1xSztBQUFBQSxVQUFTdFosV0FBRWlQLFdBQU1xSyxhQUFOckssbUJBQWdCalA7QUFBQUEsUUFBQUEsQ0FBZSxDQUFBO0FBQUEsTUFBQSxDQUFBLEdBRzFGMFYsRUFBQSxPQUFBO0FBQUEsUUFBS0MsV0FBV0gsU0FBT3lEO0FBQUFBLFFBQUtqWixXQUMxQkUsRUFBQSxPQUFBO0FBQUEsVUFBS3lWLFdBQVdILFNBQU8wRDtBQUFBQSxRQUFBQSxDQUFTLEdBQ2hDaFosRUFBQSxPQUFBO0FBQUEsVUFBS3lWLFdBQVdILFNBQU8yRDtBQUFBQSxVQUFVckQsT0FBTzdHLE1BQU0ySjtBQUFBQSxVQUFNNVksV0FBRWlQLFdBQU0ySixVQUFOM0osbUJBQWErSjtBQUFBQSxRQUFBQSxDQUFZLENBQUE7QUFBQSxNQUFBLENBQzNFLENBQUE7QUFBQSxJQUFBLENBQ0YsQ0FBQTtBQUFBLEVBQUEsQ0FDRjtBQUVWO0FDN0JBLE1BQU1kLGNBQWtCQSxNQUFNOztBQUN0QjlDLFFBQUFBLFVBQVVoVyxJQUFPLElBQUk7QUFDM0IsUUFBTXFOLFNBQVNNLG1CQUFtQjtBQUFBLElBQUVDLFdBQVdvSTtBQUFBQSxFQUFBQSxDQUFTO0FBQ3hELFFBQU03VSxRQUFRRTtBQUNSeVIsUUFBQUEsY0FBY3BGLFlBQVl2TSxPQUFPa00sTUFBTTtBQUM3QzVCLE1BQUlxSCxhQUFhLGdDQUErQkEsZ0RBQWFxSCxrQkFBYnJILG1CQUE0QjNFLEtBQUs7QUFDakYxQyxNQUFJcUgsYUFBYSx3QkFBdUJBLGdEQUFheUUsVUFBYnpFLG1CQUFvQjNFLEtBQUs7QUFDM0QwQixRQUFBQSxRQUFRMkIsY0FBY3NCLFdBQVc7QUFDakNxRCxRQUFBQSxVQUFVeEIsV0FBVzdCLFdBQVc7QUFFdEMsUUFBTWUsWUFBWTtBQUFBLElBQ2hCLEdBQUdoRSxNQUFNbE47QUFBQUEsSUFDVG9XLFlBQVlOLHVCQUFzQjVJLFdBQU1sTixTQUFOa04sbUJBQVltSixLQUFLO0FBQUEsRUFBQTtBQUdyRCxRQUFNb0IsZUFBZTtBQUFBLElBQ25CLEdBQUd2SyxNQUFNd0s7QUFBQUEsSUFDVHRCLFlBQVlOLHVCQUFzQjVJLFdBQU1sTixTQUFOa04sbUJBQVltSixLQUFLO0FBQUEsRUFBQTtBQUdyRCxRQUFNc0IsWUFBWTtBQUFBLElBQ2hCLEdBQUd6SyxNQUFNcUg7QUFBQUEsSUFDVHdCLFlBQVc3SSxXQUFNbE4sU0FBTmtOLG1CQUFZbUo7QUFBQUEsRUFBQUE7QUFHekIsUUFBTUMsY0FBYztBQUFBLElBQ2xCLEdBQUdwSiwrQkFBT3NIO0FBQUFBLElBQ1YrQixnQkFBZ0JULHVCQUFzQjVJLFdBQU1sTixTQUFOa04sbUJBQVk2SSxTQUFTO0FBQUEsRUFBQTtBQUc3RCxRQUFNUyxhQUFhO0FBQUEsSUFDakIsR0FBR3RKLCtCQUFPMEg7QUFBQUEsSUFDVjJCLGdCQUFnQlQsdUJBQXNCNUksV0FBTWxOLFNBQU5rTixtQkFBWTZJLFNBQVM7QUFBQSxFQUFBO0FBRzdELFNBQ0U1WCxFQUFBLEtBQUE7QUFBQSxJQUNFMlYsS0FBS1Q7QUFBQUEsSUFDTEYsT0FBTWpHLFdBQU1sTixTQUFOa04sbUJBQVltSDtBQUFBQSxJQUNsQjlWLFFBQU87QUFBQSxJQUNQMlUsS0FBSTtBQUFBLElBQ0pVLFdBQVcvWCxXQUFXNFgsU0FBT3pULE1BQU07QUFBQSxNQUNqQyxDQUFDeVQsU0FBT2pKLE9BQU8sR0FBR0UsV0FBVztBQUFBLE1BQzdCLENBQUMrSSxTQUFPbEosTUFBTSxHQUFHRyxXQUFXO0FBQUEsTUFDNUIsQ0FBQytJLFNBQU9uSixNQUFNLEdBQUdJLFdBQVc7QUFBQSxJQUFBLENBQzdCO0FBQUEsSUFDRDhJO0FBQUFBLElBQWlCdlYsVUFFakIwVixFQUFBLE9BQUE7QUFBQSxNQUFLQyxXQUFXSCxTQUFPUTtBQUFBQSxNQUFNRixPQUFPN0M7QUFBQUEsTUFBVWpULFdBQzVDMFYsRUFBQSxPQUFBO0FBQUEsUUFBS0MsV0FBV0gsU0FBT2hOO0FBQUFBLFFBQUt4SSxXQUMxQkUsRUFBQSxPQUFBO0FBQUEsVUFBS3lWLFdBQVdILFNBQU9nQztBQUFBQSxVQUFPMUIsT0FBTzdHLE1BQU11STtBQUFBQSxVQUFNeFgsV0FDOUNpUCxXQUFNdUksVUFBTnZJLG1CQUFhalA7QUFBQUEsUUFBQUEsQ0FBUSxHQUV4QkUsRUFBQSxPQUFBO0FBQUEsVUFBS3lWLFdBQVdILFNBQU9hO0FBQUFBLFVBQU1QLE9BQU83RyxNQUFNb0g7QUFBQUEsUUFBQUEsQ0FBUSxDQUFBO0FBQUEsTUFBQSxDQUFBLEdBRXBEblcsRUFBQSxPQUFBO0FBQUEsUUFBS3lWLFdBQVdILFNBQU9rRDtBQUFBQSxRQUFTNUMsT0FBTzBEO0FBQUFBLFFBQWF4WixXQUNoRGlQLE1BQU1qUCxZQUFZLENBQUEsR0FBSXdKLElBQUlvTyxDQUFBQSxVQUMxQjFYLEVBQUNILGNBQVk7QUFBQSxVQUFDRSxPQUFPO0FBQUEsWUFBRSxHQUFHMlg7QUFBQUEsWUFBT25MO0FBQUFBLFVBQU87QUFBQSxVQUFFek0sVUFDeENFLEVBQUN5WSxPQUFLLEVBQUE7QUFBQSxRQUFBLENBRVQsQ0FBQTtBQUFBLE1BQUEsQ0FDRyxHQUVOelksRUFBQzJRLGFBQVc7QUFBQSxRQUFDOEUsV0FBV0gsU0FBT2M7QUFBQUEsUUFBTVIsT0FBTzREO0FBQUFBLFFBQVUxWixXQUNuRGlQLFdBQU1xSCxTQUFOckgsbUJBQVlqUDtBQUFBQSxNQUFBQSxDQUFRLEdBRXZCMFYsRUFBQSxPQUFBO0FBQUEsUUFBS0MsV0FBV0gsU0FBT2U7QUFBQUEsUUFBUVQsT0FBTzdHLE1BQU1zSztBQUFBQSxRQUFjdlosV0FDeERFLEVBQUEsT0FBQTtBQUFBLFVBQUt5VixXQUFXSCxTQUFPbUU7QUFBQUEsVUFBWTdELE9BQU83RyxNQUFNMEs7QUFBQUEsVUFBVzNaLFdBQ3hEaVAsV0FBTTBLLGVBQU4xSyxtQkFBa0JqUDtBQUFBQSxRQUFBQSxDQUFRLEdBRTdCRSxFQUFBLE9BQUE7QUFBQSxVQUFLeVYsV0FBV0gsU0FBT29FO0FBQUFBLFVBQWM5RCxPQUFPdUM7QUFBQUEsVUFBWXJZLFdBQ3JEaVAsV0FBTXNILFdBQU50SCxtQkFBY2pQO0FBQUFBLFFBQUFBLENBQ1gsQ0FBQTtBQUFBLE1BQUEsQ0FBQSxHQUVSRSxFQUFBLE9BQUE7QUFBQSxRQUFLeVYsV0FBV0gsU0FBT21CO0FBQUFBLFFBQU9iLE9BQU95QztBQUFBQSxRQUFXdlksV0FDN0NpUCxXQUFNMEgsVUFBTjFILG1CQUFhalA7QUFBQUEsTUFBQUEsQ0FDVixDQUFBO0FBQUEsSUFBQSxDQUFBO0FBQUEsRUFBQSxDQUVOO0FBRVI7QUFFQSxNQUFlSSxVQUFBQSxPQUFPRixFQUFDZ1ksZ0JBQWM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN6RnJDLE1BQU1NLFFBQVlBLE1BQU07O0FBQ3RCLFFBQU1qWSxRQUFRRTtBQUNSd08sUUFBQUEsUUFBUTJCLGNBQWNyUSxLQUFLO0FBQ2pDLFFBQU0sQ0FBQ3ZCLFFBQVE2YSxZQUFZLElBQUkzSSxVQUFXO0FBQ3BDcUUsUUFBQUEsVUFBVXhCLFdBQVd4VCxLQUFLO0FBRWhDLFNBQ0VtVixFQUFBLE9BQUE7QUFBQSxJQUFLQyxXQUFXSCxTQUFPelQ7QUFBQUEsSUFBTStULE9BQU83RyxNQUFNbE47QUFBQUEsSUFBSy9CLFdBQzdDRSxFQUFBLE9BQUE7QUFBQSxNQUFLeVYsV0FBV0gsU0FBT2xDO0FBQUFBLE1BQVl3QyxPQUFPN0csTUFBTXFFO0FBQUFBLElBQUFBLENBQVcsR0FDM0RvQyxFQUFBLEtBQUE7QUFBQSxNQUNFUixPQUFNakcsV0FBTWxOLFNBQU5rTixtQkFBWW1IO0FBQUFBLE1BQ2xCOVYsUUFBTztBQUFBLE1BQ1AyVSxLQUFJO0FBQUEsTUFDSlUsV0FBV0gsU0FBT1E7QUFBQUEsTUFDbEJUO0FBQUFBLE1BQWlCdlYsV0FFakIwVixFQUFBLE9BQUE7QUFBQSxRQUFBMVYsV0FDRUUsRUFBQSxPQUFBO0FBQUEsVUFBS3lWLFdBQVdILFNBQU9zRTtBQUFBQSxVQUFVaEUsT0FBTzdHLE1BQU02SztBQUFBQSxVQUFTOVosV0FDcERpUCxXQUFNNkssYUFBTjdLLG1CQUFnQmpQO0FBQUFBLFFBQUFBLENBQVEsR0FFM0JFLEVBQUEsT0FBQTtBQUFBLFVBQUt5VixXQUFXSCxTQUFPdUU7QUFBQUEsVUFBV2pFLE9BQU83RyxNQUFNOEs7QUFBQUEsVUFBVS9aLFdBQ3REaVAsV0FBTThLLGNBQU45SyxtQkFBaUJqUDtBQUFBQSxRQUFBQSxDQUFRLEdBRTVCRSxFQUFBLE9BQUE7QUFBQSxVQUFLeVYsV0FBV0gsU0FBT3dFO0FBQUFBLFVBQVVoYSxVQUFBO0FBQUEsUUFBQSxDQUFjLENBQUE7QUFBQSxNQUFBLENBQUEsR0FFakRFLEVBQUEsT0FBQTtBQUFBLFFBQUt5VixXQUFXSCxTQUFPZTtBQUFBQSxRQUFRVCxPQUFPN0csTUFBTXNIO0FBQUFBLFFBQU92VyxXQUNoRGlQLFdBQU1zSCxXQUFOdEgsbUJBQWNqUDtBQUFBQSxNQUFBQSxDQUNYLENBQUE7QUFBQSxJQUFBLENBQUEsR0FFUkUsRUFBQSxPQUFBO0FBQUEsTUFDRXlWLFdBQVcvWCxXQUFXNFgsU0FBT21CLE9BQU87QUFBQSxRQUNsQyxDQUFDbkIsU0FBT0ksU0FBUyxHQUFHNVc7QUFBQUEsTUFBQUEsQ0FDckI7QUFBQSxNQUNEOFcsT0FBTzdHLE1BQU1nTDtBQUFBQSxNQUFVamEsVUFFdkIwVixFQUFBLFFBQUE7QUFBQSxRQUFNQyxXQUFXSCxTQUFPb0I7QUFBQUEsUUFBVTVXLFdBQ2hDRSxFQUFBLFFBQUE7QUFBQSxVQUFBRixXQUFPaVAsV0FBTWdMLGNBQU5oTCxtQkFBaUJqUDtBQUFBQSxRQUFBQSxDQUFRLEdBQ2hDRSxFQUFBLFFBQUE7QUFBQSxVQUFNeVYsV0FBV0gsU0FBT3FCO0FBQUFBLFVBQWFmLE9BQU83RyxNQUFNaUw7QUFBQUEsVUFBaUIzRSxTQUFTc0U7QUFBQUEsVUFBYTdaLFVBQ3RGaEIsVUFBU2lRLFdBQU1pTCxvQkFBTmpMLG1CQUF1QmtMLFlBQVdsTCxXQUFNaUwsb0JBQU5qTCxtQkFBdUJtTDtBQUFBQSxRQUFBQSxDQUM5RCxDQUFBO0FBQUEsTUFBQSxDQUFBO0FBQUEsSUFBQSxDQUVMLENBQUE7QUFBQSxFQUFBLENBQ0Y7QUFFVjtBQzVDQSxNQUFNcEQsWUFBZ0JBLE1BQU07QUFDcEI1QixRQUFBQSxVQUFVaFcsSUFBTyxJQUFJO0FBQzNCLFFBQU1tQixRQUFRRTtBQUNkLFFBQU1nTSxTQUFTO0FBQ1R5RixRQUFBQSxjQUFjcEYsWUFBWXZNLE9BQU9rTSxNQUFNO0FBQ3ZDd0MsUUFBQUEsUUFBUTJCLGNBQWNzQixXQUFXO0FBRXZDLFNBQ0VoUyxFQUFBLE9BQUE7QUFBQSxJQUFLMlYsS0FBS1Q7QUFBQUEsSUFBUXBWLFlBQ2RpUCwrQkFBT2pQLGFBQVksQ0FBQSxHQUFJd0osSUFBSW9PLENBQUFBLFVBQzNCMVgsRUFBQ0gsY0FBWTtBQUFBLE1BQUNFLE9BQU8yWDtBQUFBQSxNQUFNNVgsVUFDekJFLEVBQUNzWSxPQUFLLEVBQUE7QUFBQSxJQUFBLENBRVQsQ0FBQTtBQUFBLEVBQUEsQ0FDRztBQUVWO0FBRUEsTUFBZXBZLFVBQUFBLE9BQU9GLEVBQUM4VyxjQUFZOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNsQm5DLE1BQU1xRCxPQUFXQSxNQUFNOztBQUNyQixRQUFNOVosUUFBUUU7QUFDUndPLFFBQUFBLFFBQVEyQixjQUFjclEsS0FBSztBQUVqQyxTQUNFTCxFQUFBLE9BQUE7QUFBQSxJQUNFeVYsV0FBVy9YLFdBQVc0WCxTQUFPelQsTUFBTTtBQUFBLE1BQ2pDLENBQUN5VCxTQUFPakosT0FBTyxJQUFHaE0sK0JBQU9rTSxZQUFXO0FBQUEsSUFBQSxDQUNyQztBQUFBLElBQ0RxSixPQUFPdkwsS0FBSzBFLE1BQU1sTixNQUFNLEdBQUd5UixpQkFBaUI7QUFBQSxJQUFFeFQsV0FFN0NpUCxXQUFNbE4sU0FBTmtOLG1CQUFZalA7QUFBQUEsRUFBQUEsQ0FDVDtBQUVWOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDZEEsTUFBTXNhLFVBQWNBLE1BQU07O0FBQ3hCLFFBQU0vWixRQUFRRTtBQUNSd08sUUFBQUEsUUFBUTJCLGNBQWNyUSxLQUFLO0FBRWpDLFFBQU1nYSxZQUFZaFEsS0FBSzBFLE1BQU1sTixNQUFNLEdBQUd5UixpQkFBaUI7QUFFdkQsU0FDRWtDLEVBQUEsT0FBQTtBQUFBLElBQUtDLFdBQVdILFNBQU96VDtBQUFBQSxJQUFLL0IsV0FDMUIwVixFQUFBLE9BQUE7QUFBQSxNQUFLQyxXQUFXSCxTQUFPNEQ7QUFBQUEsTUFBSXBaLFdBQ3pCRSxFQUFBLE9BQUE7QUFBQSxRQUFLeVYsV0FBV0gsU0FBT2dGO0FBQUFBLFFBQVMxRSxPQUFPeUU7QUFBQUEsTUFBQUEsQ0FBVSxHQUNqRHJhLEVBQUEsT0FBQTtBQUFBLFFBQUt5VixXQUFXSCxTQUFPNkQ7QUFBQUEsUUFBVXZELE9BQU95RTtBQUFBQSxRQUFVdmEsV0FBRWlQLFdBQU1sTixTQUFOa04sbUJBQVl3TDtBQUFBQSxNQUFBQSxDQUFlLENBQUE7QUFBQSxJQUFBLENBQUEsR0FFakYvRSxFQUFBLE9BQUE7QUFBQSxNQUFLQyxXQUFXSCxTQUFPa0Y7QUFBQUEsTUFBSzFhLFdBQzFCRSxFQUFBLE9BQUE7QUFBQSxRQUFLeVYsV0FBV0gsU0FBT21GO0FBQUFBLFFBQVU3RSxPQUFPN0csTUFBTXlMO0FBQUFBLFFBQUsxYSxVQUFBO0FBQUEsTUFBQSxDQUFBLEdBQ25ERSxFQUFBLE9BQUE7QUFBQSxRQUFLeVYsV0FBV0gsU0FBT29GO0FBQUFBLFFBQVc5RSxPQUFPeUU7QUFBQUEsUUFBVXZhLFdBQUVpUCxXQUFNbE4sU0FBTmtOLG1CQUFZNEw7QUFBQUEsTUFBQUEsQ0FBYSxDQUFBO0FBQUEsSUFBQSxDQUFBLEdBRWhGbkYsRUFBQSxPQUFBO0FBQUEsTUFBS0MsV0FBVy9YLFdBQVc0WCxTQUFPNEQsS0FBSzVELFNBQU9zRixVQUFVO0FBQUEsTUFBRTlhLFdBQ3hERSxFQUFBLE9BQUE7QUFBQSxRQUFLeVYsV0FBV0gsU0FBT2dGO0FBQUFBLFFBQVMxRSxPQUFPeUU7QUFBQUEsTUFBQUEsQ0FBVSxHQUNqRHJhLEVBQUEsT0FBQTtBQUFBLFFBQUt5VixXQUFXSCxTQUFPNkQ7QUFBQUEsUUFBVXZELE9BQU95RTtBQUFBQSxRQUFVdmEsV0FBRWlQLFdBQU1sTixTQUFOa04sbUJBQVk4TDtBQUFBQSxNQUFBQSxDQUFlLENBQUE7QUFBQSxJQUFBLENBQzNFLENBQUE7QUFBQSxFQUFBLENBQ0Y7QUFFVjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3RCQSxNQUFNQyxnQkFBb0JBLE1BQU07QUFDOUIsUUFBTXphLFFBQVFFO0FBQ1J3TyxRQUFBQSxRQUFRMkIsY0FBY3JRLEtBQUs7QUFFakMsU0FDRW1WLEVBQUEsT0FBQTtBQUFBLElBQ0VDLFdBQVcvWCxXQUFXNFgsT0FBT3pULE1BQU07QUFBQSxNQUNqQyxDQUFDeVQsT0FBT2pKLE9BQU8sSUFBR2hNLCtCQUFPa00sWUFBVztBQUFBLE1BQ3BDLENBQUMrSSxPQUFPbEosTUFBTSxJQUFHL0wsK0JBQU9rTSxZQUFXO0FBQUEsTUFDbkMsQ0FBQytJLE9BQU9uSixNQUFNLElBQUc5TCwrQkFBT2tNLFlBQVc7QUFBQSxJQUFBLENBQ3BDO0FBQUEsSUFDRHFKLE9BQU92TCxLQUFLMEUsTUFBTWxOLE1BQU0sR0FBR3lSLGlCQUFpQjtBQUFBLElBQUV4VCxXQUU5QzBWLEVBQUEsT0FBQTtBQUFBLE1BQUtDLFdBQVdILE9BQU9nQztBQUFBQSxNQUFNeFgsV0FDM0JFLEVBQUEsT0FBQTtBQUFBLFFBQUt5VixXQUFXSCxPQUFPeUY7QUFBQUEsUUFBWW5GLE9BQU83RyxNQUFNZ007QUFBQUEsUUFBV2piLFVBQ3hEaVAsTUFBTWdNLFdBQVdqYjtBQUFBQSxNQUFBQSxDQUFRLEdBRTVCRSxFQUFBLE9BQUE7QUFBQSxRQUFLeVYsV0FBV0gsT0FBTzBGO0FBQUFBLFFBQVlwRixPQUFPN0csTUFBTWlNO0FBQUFBLFFBQVdsYixVQUN4RGlQLE1BQU1pTSxXQUFXbGI7QUFBQUEsTUFBQUEsQ0FDZCxDQUFBO0FBQUEsSUFBQSxDQUFBLEdBRVIwVixFQUFBLE9BQUE7QUFBQSxNQUFBMVYsV0FDRTBWLEVBQUEsT0FBQTtBQUFBLFFBQUtDLFdBQVdILE9BQU95RDtBQUFBQSxRQUFLalosV0FDMUJFLEVBQUEsT0FBQTtBQUFBLFVBQUt5VixXQUFXSCxPQUFPMEQ7QUFBQUEsVUFBVXBELE9BQU83RyxNQUFNb0g7QUFBQUEsUUFBQUEsQ0FBSyxHQUNuRG5XLEVBQUEsT0FBQTtBQUFBLFVBQUt5VixXQUFXSCxPQUFPMkQ7QUFBQUEsVUFBVXJELE9BQU83RyxNQUFNa0s7QUFBQUEsVUFBU25aLFVBQ3BEaVAsTUFBTWtNLFVBQVVuYjtBQUFBQSxRQUFBQSxDQUFRLEdBRTNCRSxFQUFBLE9BQUE7QUFBQSxVQUFLeVYsV0FBV0gsT0FBTzRGO0FBQUFBLFVBQVd0RixPQUFPN0csTUFBTWhQO0FBQUFBLFVBQU1ELFVBQ2xEaVAsTUFBTW9NLE9BQU9yYjtBQUFBQSxRQUFBQSxDQUNWLENBQUE7QUFBQSxNQUFBLENBQUEsR0FFUjBWLEVBQUEsT0FBQTtBQUFBLFFBQUtDLFdBQVdILE9BQU95RDtBQUFBQSxRQUFLalosV0FDMUJFLEVBQUEsT0FBQTtBQUFBLFVBQUt5VixXQUFXSCxPQUFPMEQ7QUFBQUEsVUFBVXBELE9BQU83RyxNQUFNb0g7QUFBQUEsUUFBQUEsQ0FBSyxHQUNuRG5XLEVBQUEsT0FBQTtBQUFBLFVBQUt5VixXQUFXSCxPQUFPMkQ7QUFBQUEsVUFBVXJELE9BQU83RyxNQUFNa0s7QUFBQUEsVUFBU25aLFVBQ3BEaVAsTUFBTXFNLFVBQVV0YjtBQUFBQSxRQUFBQSxDQUFRLEdBRTNCRSxFQUFBLE9BQUE7QUFBQSxVQUFLeVYsV0FBV0gsT0FBTzRGO0FBQUFBLFVBQVd0RixPQUFPN0csTUFBTWhQO0FBQUFBLFVBQU1ELFVBQ2xEaVAsTUFBTXNNLE9BQU92YjtBQUFBQSxRQUFBQSxDQUNWLENBQUE7QUFBQSxNQUFBLENBQ0YsQ0FBQTtBQUFBLElBQUEsQ0FDRixDQUFBO0FBQUEsRUFBQSxDQUNGO0FBRVY7QUM3Q0EsTUFBTXdiLGtCQUFrQkEsQ0FBQ0MsU0FBa0IsT0FBTzs7QUFDaEQsUUFBTUMsYUFBYUQsT0FBTzNRO0FBQzFCLFFBQU0sQ0FBQzZRLGFBQWFDLGNBQWMsSUFBSTFjLEVBQWlCLENBQUM7QUFDeEQsUUFBTTJjLHFCQUFvQkosWUFBT0UsZUFBZSxDQUFDLE1BQXZCRixtQkFBMEJJO0FBRXBEcGMsSUFBVSxNQUFNO0FBQ2QsVUFBTXFjLFNBQVNBLE1BQU07QUFDbkJGLHFCQUFlNWEsQ0FBU0EsV0FBQTtBQUN0QixZQUFJQSxTQUFRLElBQUkwYTtBQUFZLGlCQUFPMWEsU0FBUTtBQUNwQyxlQUFBO0FBQUEsTUFBQSxDQUNSO0FBQUEsSUFBQTtBQUdHK2EsVUFBQUEsVUFBVXJjLFdBQVdvYyxRQUFRRCxpQkFBaUI7QUFFN0MsV0FBQSxNQUFNdmMsYUFBYXljLE9BQU87QUFBQSxLQUNoQyxDQUFDSCxnQkFBZ0JGLFlBQVlHLG1CQUFtQkYsV0FBVyxDQUFDO0FBRXhEQSxTQUFBQTtBQUNUO0FDUkEsTUFBTUssMEJBQTBCO0FBRWhDLE1BQU1DLFdBQWVBLE1BQU07O0FBQ25CN0csUUFBQUEsVUFBVWhXLElBQU8sSUFBSTtBQUMzQixRQUFNbUIsUUFBUUU7QUFDZCxRQUFNZ00sU0FBU00sbUJBQW1CO0FBQUEsSUFBRUMsV0FBV29JO0FBQUFBLEVBQUFBLENBQVM7QUFDbERsRCxRQUFBQSxjQUFjcEYsWUFBWXZNLE9BQU9rTSxNQUFNO0FBQ3ZDd0MsUUFBQUEsUUFBUTJCLGNBQWNzQixXQUFXO0FBQ2pDcUQsUUFBQUEsVUFBVXhCLFdBQVc3QixXQUFXO0FBRWhDZ0ssUUFBQUEsV0FBV0EsQ0FBQ3BELFdBQ2Y7QUFBQSxJQUNDeEMsTUFBTXBXLEVBQUNtYSxNQUFPLEVBQUE7QUFBQSxJQUNkOEIsU0FBU2pjLEVBQUNvYSxTQUFVLEVBQUE7QUFBQSxJQUNwQjhCLGVBQWVsYyxFQUFDOGEsZUFBYSxFQUFBO0FBQUEsS0FDN0JsQyxLQUFJO0FBRUZ1RCxRQUFBQSxjQUFjcE4sTUFBTWpQLFlBQVksQ0FBQSxHQUFJMkosT0FBTzJTLE9BQU8sRUFBRTlTLElBQUkrUyxDQUFVQSxXQUFBOztBQUFBO0FBQUEsTUFDdEUsR0FBR0E7QUFBQUEsTUFDSEMsZ0JBQWVELE1BQUFBLFVBQUFBLGdCQUFBQSxPQUFPeGEsU0FBUHdhLGdCQUFBQSxJQUFhQztBQUFBQSxNQUM1QlgscUJBQW1CVSxNQUFBQSxVQUFBQSxnQkFBQUEsT0FBT3hhLFNBQVB3YSxnQkFBQUEsSUFBYVYsc0JBQXFCRztBQUFBQSxJQUNyRDtBQUFBLEdBQUE7QUFFSVMsUUFBQUEsZUFBZWpCLGdCQUFnQmEsVUFBVTtBQUMvQyxRQUFNSyxhQUFhOUwsY0FBY3lMLFdBQVdJLFlBQVksS0FBSyxDQUFFLENBQUE7QUFFL0QsUUFBTUUsb0JBQWtCRCw4Q0FBWTNhLFNBQVoyYSxtQkFBa0JFLHVCQUN0QzFTLE1BQUt3Uyx5Q0FBWTNhLFNBQVEsQ0FBSSxHQUFBLEdBQUd5UixpQkFBaUIsSUFDakR0SixLQUFLK0UsTUFBTXFFLFlBQVksR0FBR0UsaUJBQWlCO0FBRS9DLFNBQ0VrQyxFQUFBLEtBQUE7QUFBQSxJQUNFRyxLQUFLVDtBQUFBQSxJQUNMRixPQUFNakcsV0FBTWxOLFNBQU5rTixtQkFBWW1IO0FBQUFBLElBQ2xCOVYsUUFBTztBQUFBLElBQ1AyVSxLQUFJO0FBQUEsSUFDSlUsV0FBVy9YLFdBQVc0WCxTQUFPelQsTUFBTTtBQUFBLE1BQ2pDLENBQUN5VCxTQUFPakosT0FBTyxHQUFHRSxXQUFXO0FBQUEsTUFDN0IsQ0FBQytJLFNBQU9sSixNQUFNLEdBQUdHLFdBQVc7QUFBQSxNQUM1QixDQUFDK0ksU0FBT25KLE1BQU0sR0FBR0ksV0FBVztBQUFBLE1BQzVCLENBQUMrSSxTQUFPeUIsUUFBUSxLQUFHaEksV0FBTWxOLFNBQU5rTixtQkFBWWlJLGFBQVk7QUFBQSxJQUFBLENBQzVDO0FBQUEsSUFDRHBCLE9BQU83RyxNQUFNbE47QUFBQUEsSUFDYndUO0FBQUFBLElBQWlCdlYsV0FFakJFLEVBQUEsT0FBQTtBQUFBLE1BQUt5VixXQUFXSCxTQUFPbEM7QUFBQUEsTUFBWXdDLE9BQU82RztBQUFBQSxJQUFBQSxDQUFnQixHQUMxRHpjLEVBQUEsT0FBQTtBQUFBLE1BQUt5VixXQUFXSCxTQUFPaUM7QUFBQUEsTUFBVzNCLE9BQU83RyxNQUFNd0k7QUFBQUEsTUFBVXpYLFdBQ3REaVAsV0FBTXdJLGNBQU54SSxtQkFBaUJqUDtBQUFBQSxJQUFBQSxDQUFRLEdBRzVCMFYsRUFBQSxPQUFBO0FBQUEsTUFBS0MsV0FBV0gsU0FBT2lFO0FBQUFBLE1BQVF6WixXQUM3QkUsRUFBQSxPQUFBO0FBQUEsUUFBS3lWLFdBQVdILFNBQU9qRDtBQUFBQSxRQUFLdlMsVUFDMUJFLEVBQUEsT0FBQTtBQUFBLFVBQUt5VixXQUFXSCxTQUFPYTtBQUFBQSxVQUFNUCxPQUFPN0csTUFBTW9IO0FBQUFBLFFBQUFBLENBQUs7QUFBQSxNQUFBLENBQUcsR0FFcERuVyxFQUFBLE9BQUE7QUFBQSxRQUFLeVYsV0FBV0gsU0FBT3VDO0FBQUFBLFFBQU8vWCxXQUMxQmlQLE1BQU1qUCxZQUFZLENBQUEsR0FBSXdKLElBQUksQ0FBQ29PLE9BQU81Vzs7QUFDbENkLG1CQUFBLE9BQUE7QUFBQSxZQUNFeVYsV0FBV0gsU0FBTytHO0FBQUFBLFlBQ2xCekcsT0FBTztBQUFBLGNBQ0wwRyxlQUFlQyxpQkFBaUJ6YixTQUFRd1UsV0FBT29DLE1BQUFBLE1BQU03VixTQUFONlYsZ0JBQUFBLElBQVk0RSxrQkFBaUIsYUFBYSxJQUFJO0FBQUEsY0FDN0ZYLG1CQUFvQixJQUFFakUsTUFBQUEsTUFBTTdWLFNBQU42VixnQkFBQUEsSUFBWWlFO0FBQUFBLFlBQ3BDO0FBQUEsWUFBRTdiLFVBRUZFLEVBQUNILGNBQVk7QUFBQSxjQUFDRSxPQUFPO0FBQUEsZ0JBQUUsR0FBRzJYO0FBQUFBLGdCQUFPbkw7QUFBQUEsY0FBTztBQUFBLGNBQUV6TSxVQUFFa2MsU0FBU3RFLE1BQU1rQixJQUFJO0FBQUEsWUFBQSxDQUFDO0FBQUEsVUFBQSxDQUVuRTtBQUFBLFNBQUE7QUFBQSxNQUFBLENBQUMsR0FFSnBELEVBQUEsT0FBQTtBQUFBLFFBQUtDLFdBQVdILFNBQU93QztBQUFBQSxRQUFNaFksV0FDM0JFLEVBQUEsT0FBQTtBQUFBLFVBQUt5VixXQUFXSCxTQUFPYTtBQUFBQSxVQUFNUCxPQUFPN0csTUFBTW9IO0FBQUFBLFFBQUFBLENBQUssR0FFL0NuVyxFQUFBLE9BQUE7QUFBQSxVQUFLeVYsV0FBV0gsU0FBTytEO0FBQUFBLFVBQWN2WixVQUNuQzBWLEVBQUEsT0FBQTtBQUFBLFlBQUtDLFdBQVdILFNBQU9lO0FBQUFBLFlBQVFULE9BQU83RyxNQUFNc0g7QUFBQUEsWUFBT3ZXLFdBQ2pERSxFQUFBLE9BQUE7QUFBQSxjQUFLeVYsV0FBV0gsU0FBT2E7QUFBQUEsY0FBTVAsT0FBTzdHLE1BQU1vSDtBQUFBQSxZQUFBQSxDQUFLLElBQzlDcEgsV0FBTXNILFdBQU50SCxtQkFBY2pQLFFBQVE7QUFBQSxVQUFBLENBQUE7QUFBQSxRQUFBLENBRXJCLENBQUE7QUFBQSxNQUFBLENBQ0YsQ0FBQTtBQUFBLElBQUEsQ0FDRixDQUFBO0FBQUEsRUFBQSxDQUNKO0FBRVI7QUFFQSxNQUFlSSxRQUFBQSxPQUFPRixFQUFDK2IsYUFBVztBQ2hHbEMsTUFBTVksY0FBY0EsQ0FDbEJ0YyxPQUNBMk8sT0FDQXlCLE1BQ0ExUSxPQUNBaU0sWUFBVTRRLFlBQ1A7QUFDSCxRQUFNQyxXQUFXO0FBQUEsSUFBRSxHQUFHeGM7QUFBQUEsRUFBQUE7QUFFdEIyTCxZQUFRbkQsUUFBUTBELENBQVUsV0FBQTtBQUN4QnNRLGFBQVM3TixLQUFLLElBQUk7QUFBQSxNQUNoQixHQUFHNk4sU0FBUzdOLEtBQUs7QUFBQSxNQUNqQixDQUFDekMsTUFBTSxHQUFHO0FBQUEsUUFDUixHQUFHc1EsU0FBUzdOLEtBQUssRUFBRXpDLE1BQU07QUFBQSxRQUN6QixDQUFDa0UsSUFBSSxHQUFHLE9BQU8xUSxVQUFVLGFBQWFBLE1BQU11SyxJQUFJdVMsVUFBVyxHQUFFN04sU0FBU3pDLFVBQVVrRSxNQUFNLENBQUMsSUFBSTFRO0FBQUFBLE1BQzdGO0FBQUEsSUFBQTtBQUFBLEVBQ0YsQ0FDRDtBQUNNOGMsU0FBQUE7QUFDVDsiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMCwxLDIsNCw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzXX0=
|