@dolphinweex/weex-vue-render 0.1.8 → 0.2.0

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.
@@ -2985,7 +2985,7 @@ var scaleStyles = [
2985
2985
  'paddingRight',
2986
2986
  'paddingTop',
2987
2987
  'paddingBottom',
2988
- 'fontSize',
2988
+ 'fontSize', // 如果包含wx单位需要当作vp单位转化为px
2989
2989
  'lineHeight',
2990
2990
  'transform',
2991
2991
  'webkitTransform',
@@ -3033,7 +3033,8 @@ var config = {
3033
3033
  'cell',
3034
3034
  'a'
3035
3035
  ],
3036
- bindingStyleNamesForPx2Rem: allStyles
3036
+ bindingStyleNamesForPx2Rem: allStyles,
3037
+ bindingStyleNamesForPv2Px: ["fontSize", "lineHeight", "letterSpacing"]
3037
3038
  };
3038
3039
 
3039
3040
  /*
@@ -3533,6 +3534,7 @@ function getThrottleLazyload (wait, el) {
3533
3534
  */
3534
3535
 
3535
3536
  var bindingStyleNamesForPx2Rem = config.bindingStyleNamesForPx2Rem;
3537
+ var bindingStyleNamesForPv2Px = config.bindingStyleNamesForPv2Px;
3536
3538
 
3537
3539
  // whether to support using 0.5px to paint 1px width border.
3538
3540
  var _supportHairlines;
@@ -3737,7 +3739,12 @@ function styleObject2rem (style, rootValue) {
3737
3739
  var obj = {};
3738
3740
  for (var k in style) {
3739
3741
  var camK = camelize(k);
3740
- if (bindingStyleNamesForPx2Rem.indexOf(camK) > -1) {
3742
+
3743
+ if (bindingStyleNamesForPv2Px.indexOf(camK) > -1 && typeof obj[camK] =='string'
3744
+ && obj[camK].endsWith('wx') > -1) {
3745
+
3746
+ obj[camK] = px2px(style[k]);
3747
+ } else if (bindingStyleNamesForPx2Rem.indexOf(camK) > -1) {
3741
3748
  obj[camK] = px2rem(style[k] + '', rootValue);
3742
3749
  }
3743
3750
  else {
@@ -3747,11 +3754,27 @@ function styleObject2rem (style, rootValue) {
3747
3754
  return obj
3748
3755
  }
3749
3756
 
3757
+ function px2px(pv) {
3758
+ if (typeof pv == "string" && pv.endsWith("wx")) {
3759
+ const floatValue = parseFloat(pv);
3760
+ //fix:暂定不需要转换,原始值返回
3761
+ return floatValue + 'px'
3762
+ }
3763
+ if (typeof pv == "number") {
3764
+ var scale = window.weex.config.env.scale;
3765
+ return pv * scale + 'px'
3766
+ }
3767
+
3768
+ return pv;
3769
+ }
3770
+
3771
+ const ignoreSubKey = ['scale']
3750
3772
  function px2rem (px, rootValue) {
3751
3773
  // fix: 适配鸿蒙wx单位
3752
3774
  if (px.indexOf("--harmory") > -1) return px;
3753
3775
 
3754
- return px.replace(/([+-]?\d+(?:\.\d*)?)([p|w]x)?/g, function ($0, $1, $2) {
3776
+ return px.replace(/([+-]?\d+(?:\.\d*)?)([p|w]x)?/g, function ($0, $1, $2, offset, str) {
3777
+ if (ignoreSubKey.filter(k => str.slice(offset - k.length - 1, offset - 1) === k).length) return $1
3755
3778
  if ($2 === 'wx') { // 'wx' -> px
3756
3779
  // return ($midea_harmony_native ? $midea_harmony_native.vp2px($1) : $1) + 'px'
3757
3780
  // 适配鸿蒙wx
@@ -4678,6 +4701,15 @@ function watchAppearForScrollables (tagName, context) {
4678
4701
  }
4679
4702
  }
4680
4703
 
4704
+ function checkWeexRootClass () {
4705
+ var body = document.querySelector('body')
4706
+ var firstDiv = body.querySelector('div');
4707
+ // 检查第一个div节点是否包含root类
4708
+ if (firstDiv && !firstDiv.classList.contains('weex-root')) {
4709
+ firstDiv.classList.add('weex-root')
4710
+ }
4711
+ }
4712
+
4681
4713
  var base$1 = {
4682
4714
  beforeCreate: function beforeCreate () {
4683
4715
  if (!lazyloadWatched) {
@@ -4729,6 +4761,7 @@ var base$1 = {
4729
4761
  metaMt[tagName]++;
4730
4762
 
4731
4763
  watchAppearForScrollables(tagName, this);
4764
+ checkWeexRootClass();
4732
4765
 
4733
4766
  // when this is the root element of Vue instance.
4734
4767
  if (this === this.$root) {
@@ -4839,27 +4872,23 @@ var event$1 = {
4839
4872
  */
4840
4873
 
4841
4874
  var bindingStyleNamesForPx2Rem$1 = config.bindingStyleNamesForPx2Rem;
4875
+ var bindingStyleNamesForPv2Px$1 = config.bindingStyleNamesForPv2Px;
4842
4876
 
4843
4877
  var style = {
4844
4878
  methods: {
4845
4879
  _deepClone: function(obj) {
4880
+ if (obj === null) return null;
4881
+ if (obj instanceof RegExp) return new RegExp(obj);
4882
+ if (obj instanceof Date) return new Date(obj);
4846
4883
  if (typeof obj !== 'object') {
4847
- return obj; // 基本类型直接返回
4884
+ return obj;
4848
4885
  }
4849
- if (Array.isArray(obj)) {
4850
- const arrCopy = [];
4851
- for (let i = 0; i < obj.length; i++) {
4852
- arrCopy[i] = this._deepClone(obj[i]);
4853
- }
4854
- return arrCopy;
4855
- }
4856
- const objCopy = {};
4857
- for (const key in obj) {
4858
- if (obj.hasOwnProperty(key)) {
4859
- objCopy[key] = this._deepClone(obj[key]);
4860
- }
4886
+ /** * 如果obj是数组,那么 obj.constructor 是 [Function: Array] * 如果obj是对象,那么 obj.constructor 是 [Function: Object] */
4887
+ let t = new obj.constructor();
4888
+ for (let key in obj) {
4889
+ t[key] = this._deepClone(obj[key]);
4861
4890
  }
4862
- return objCopy;
4891
+ return t;
4863
4892
  },
4864
4893
  _px2rem: function _px2rem (value, rootValue) {
4865
4894
  var this$1 = this;
@@ -4874,7 +4903,11 @@ var style = {
4874
4903
  if (isPlainObject(value)) {
4875
4904
  let cloneObj = this._deepClone(value)
4876
4905
  for (var k in cloneObj) {
4906
+ // 如果是"fontSize", "lineHeight", "letterSpacing"并且值包含wx则按照vp来转化为px使用
4877
4907
  if (
4908
+ bindingStyleNamesForPv2Px$1.indexOf(k) > -1 &&typeof cloneObj[k] == "string" && cloneObj[k].endsWith('wx') > -1) {
4909
+ cloneObj[k] = px2px(cloneObj[k]);
4910
+ }else if (
4878
4911
  cloneObj.hasOwnProperty(k)
4879
4912
  && bindingStyleNamesForPx2Rem$1.indexOf(k) > -1
4880
4913
  ) {
@@ -10836,4 +10869,3 @@ if (global.Vue) {
10836
10869
  return weex;
10837
10870
 
10838
10871
  })));
10839
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY29tbW9uLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pbnRlZ2VyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVmaW5lZC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1hdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2xpYnJhcnkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19nbG9iYWwuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb3JlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtb2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4tb2JqZWN0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZXNjcmlwdG9ycy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RvbS1jcmVhdGUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pZTgtZG9tLWRlZmluZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLXByaW1pdGl2ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Byb3BlcnR5LWRlc2MuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19oaWRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGFzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdWlkLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hLWZ1bmN0aW9uLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3R4LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZXhwb3J0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlcmF0b3JzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29mLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW9iamVjdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWlvYmplY3QuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1sZW5ndGguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1hYnNvbHV0ZS1pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWluY2x1ZGVzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLWtleS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2h0bWwuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWNyZWF0ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLW9iamVjdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1ncG8uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWRlZmluZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY2FsbC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLWFycmF5LWl0ZXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jcmVhdGUtcHJvcGVydHkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jbGFzc29mLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWRldGVjdC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZyb20uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9mbi9hcnJheS9mcm9tLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcHMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtcGllLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWFzc2lnbi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9mbi9vYmplY3QvYXNzaWduLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcGQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtcHJvdG8uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ZuL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FkZC10by11bnNjb3BhYmxlcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItc3RlcC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5Lml0ZXJhdG9yLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4taW5zdGFuY2UuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mb3Itb2YuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW52b2tlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdGFzay5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21pY3JvdGFzay5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX25ldy1wcm9taXNlLWNhcGFiaWxpdHkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wZXJmb3JtLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvbWlzZS1yZXNvbHZlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUtYWxsLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXNwZWNpZXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5wcm9taXNlLmpzIiwiLi4vLi4vLi4vc3JjL2xpYi9nZXN0dXJlLmpzIiwiLi4vLi4vLi4vc3JjL2xpYi9lbnZkL3ZlcnNpb24uanMiLCIuLi8uLi8uLi9zcmMvbGliL2VudmQvcGFyYW1zLmpzIiwiLi4vLi4vLi4vc3JjL2xpYi9lbnZkL2luZGV4LmpzIiwiLi4vLi4vLi4vc3JjL3V0aWxzL3R5cGUuanMiLCIuLi8uLi8uLi9zcmMvdXRpbHMvZnVuYy5qcyIsIi4uLy4uLy4uL3NyYy93ZWV4L3ZpZXdwb3J0LmpzIiwiLi4vLi4vLi4vc3JjL3V0aWxzL2V2ZW50LmpzIiwiLi4vLi4vLi4vc3JjL2NvbmZpZy5qcyIsIi4uLy4uLy4uL3NyYy91dGlscy9jb21wb25lbnQuanMiLCIuLi8uLi8uLi9zcmMvdXRpbHMvbGF6eWxvYWQuanMiLCIuLi8uLi8uLi9zcmMvdXRpbHMvc3R5bGUuanMiLCIuLi8uLi8uLi9zcmMvdXRpbHMvaW5kZXguanMiLCIuLi8uLi8uLi9zcmMvd2VleC93eC1lbnYuanMiLCIuLi8uLi8uLi9zcmMvd2VleC9pbnN0YW5jZS5qcyIsIi4uLy4uLy4uL3NyYy9jb3JlL3N0eWxlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3d4di10cmFuc2Zvcm1lci90cmFuc2Zvcm1lci90ZXh0LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3d4di10cmFuc2Zvcm1lci90cmFuc2Zvcm1lci9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy93eHYtdHJhbnNmb3JtZXIvaW5kZXguanMiLCIuLi8uLi8uLi9zcmMvY29yZS9ub2RlLmpzIiwiLi4vLi4vLi4vc3JjL2NvcmUvaW5kZXguanMiLCIuLi8uLi8uLi9zcmMvbWl4aW5zL2Jhc2UuanMiLCIuLi8uLi8uLi9zcmMvbWl4aW5zL2V2ZW50LmpzIiwiLi4vLi4vLi4vc3JjL21peGlucy9zdHlsZS5qcyIsIi4uLy4uLy4uL3NyYy9taXhpbnMvaW5wdXQtY29tbW9uLmpzIiwiLi4vLi4vLi4vc3JjL21peGlucy9zdGlja3kuanMiLCIuLi8uLi8uLi9zcmMvbWl4aW5zL2luZGV4LmpzIiwiLi4vLi4vLi4vc3JjL3dlZXgvZ2xvYmFsLmpzIiwiLi4vLi4vLi4vc3JjL3dlZXgvcmVuZGVyLWZ1bmN0aW9uLmpzIiwiLi4vLi4vLi4vc3JjL3dlZXgvaW5kZXguanMiLCIuLi8uLi8uLi9zcmMvaW5kZXguanMiLCIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9pbnB1dC9pbmRleC5qcyIsIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3N3aXRjaC9pbmRleC5qcyIsIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3Njcm9sbGFibGUvbWl4aW5zL3Njcm9sbGFibGUuanMiLCIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9zY3JvbGxhYmxlL21peGlucy9pbmRleC5qcyIsIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3Njcm9sbGFibGUvbGlzdC5qcyIsIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3Njcm9sbGFibGUvc2Nyb2xsZXIuanMiLCIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9zY3JvbGxhYmxlL3dhdGVyZmFsbC5qcyIsIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3Njcm9sbGFibGUvaGVhZGVyLmpzIiwiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc2Nyb2xsYWJsZS9sb2FkaW5nLmpzIiwiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc2Nyb2xsYWJsZS9yZWZyZXNoLmpzIiwiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc2Nyb2xsYWJsZS9sb2FkaW5nLWluZGljYXRvci5qcyIsIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3Njcm9sbGFibGUvcmVjeWNsZS1saXN0LmpzIiwiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc2Nyb2xsYWJsZS9pbmRleC5qcyIsIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NsaWRlci9zbGlkZU1peGluLmpzIiwiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc2xpZGVyL3NsaWRlci5qcyIsIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NsaWRlci9zbGlkZXItbmVpZ2hib3IuanMiLCIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9zbGlkZXIvaW5kaWNhdG9yLmpzIiwiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc2xpZGVyL2luZGV4LmpzIiwiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdGV4dGFyZWEvaW5kZXguanMiLCIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy92aWRlby5qcyIsIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3dlYi9pbmRleC5qcyIsIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2luZGV4LmpzIiwiLi4vLi4vLi4vc3JjL21vZHVsZXMvZ2VvbG9jYXRpb24uanMiLCIuLi8uLi8uLi9zcmMvbW9kdWxlcy9zdG9yYWdlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2h0dHB1cmwvYnVpbGQvaHR0cHVybC5jb21tb24uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3RyaWN0LXVyaS1lbmNvZGUvaW5kZXguanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9xdWVyeS1zdHJpbmcvaW5kZXguanMiLCIuLi8uLi8uLi9zcmMvbW9kdWxlcy9zdHJlYW0uanMiLCIuLi8uLi8uLi9zcmMvbW9kdWxlcy9jbGlwYm9hcmQuanMiLCIuLi8uLi8uLi9zcmMvbW9kdWxlcy9ldmVudC5qcyIsIi4uLy4uLy4uL3NyYy9tb2R1bGVzL2FuaW1hdGlvbi5qcyIsIi4uLy4uLy4uL3NyYy9tb2R1bGVzL2RvbS5qcyIsIi4uLy4uLy4uL3NyYy9tb2R1bGVzL2dsb2JhbEV2ZW50LmpzIiwiLi4vLi4vLi4vc3JjL21vZHVsZXMvbW9kYWwvdG9hc3QuanMiLCIuLi8uLi8uLi9zcmMvbW9kdWxlcy9tb2RhbC9tb2RhbC5qcyIsIi4uLy4uLy4uL3NyYy9tb2R1bGVzL21vZGFsL2FsZXJ0LmpzIiwiLi4vLi4vLi4vc3JjL21vZHVsZXMvbW9kYWwvY29uZmlybS5qcyIsIi4uLy4uLy4uL3NyYy9tb2R1bGVzL21vZGFsL3Byb21wdC5qcyIsIi4uLy4uLy4uL3NyYy9tb2R1bGVzL21vZGFsL3N0eWxlLmpzIiwiLi4vLi4vLi4vc3JjL21vZHVsZXMvbW9kYWwvaW5kZXguanMiLCIuLi8uLi8uLi9zcmMvbW9kdWxlcy9uYXZpZ2F0b3IuanMiLCIuLi8uLi8uLi9zcmMvbW9kdWxlcy93ZWJ2aWV3LmpzIiwiLi4vLi4vLi4vc3JjL21vZHVsZXMvd2Vic29ja2V0L3dlYnNvY2tldC5qcyIsIi4uLy4uLy4uL3NyYy9tb2R1bGVzL3dlYnNvY2tldC9pbmRleC5qcyIsIi4uLy4uLy4uL3NyYy9tb2R1bGVzL21ldGEuanMiLCIuLi8uLi8uLi9zcmMvbW9kdWxlcy9pbmRleC5qcyIsIi4uLy4uLy4uL3NyYy9kaXJlY3RpdmVzL3Jlc2l6ZS5qcyIsIi4uLy4uLy4uL3NyYy9kaXJlY3RpdmVzL2luZGV4LmpzIiwiLi4vc3JjL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMS40IFRvSW50ZWdlclxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59O1xuIiwiLy8gNy4yLjEgUmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudClcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbi8vIHRydWUgIC0+IFN0cmluZyNhdFxuLy8gZmFsc2UgLT4gU3RyaW5nI2NvZGVQb2ludEF0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBwb3MpIHtcbiAgICB2YXIgcyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgICB2YXIgaSA9IHRvSW50ZWdlcihwb3MpO1xuICAgIHZhciBsID0gcy5sZW5ndGg7XG4gICAgdmFyIGEsIGI7XG4gICAgaWYgKGkgPCAwIHx8IGkgPj0gbCkgcmV0dXJuIFRPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgcmV0dXJuIGEgPCAweGQ4MDAgfHwgYSA+IDB4ZGJmZiB8fCBpICsgMSA9PT0gbCB8fCAoYiA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGIgPiAweGRmZmZcbiAgICAgID8gVE9fU1RSSU5HID8gcy5jaGFyQXQoaSkgOiBhXG4gICAgICA6IFRPX1NUUklORyA/IHMuc2xpY2UoaSwgaSArIDIpIDogKGEgLSAweGQ4MDAgPDwgMTApICsgKGIgLSAweGRjMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbnZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuICA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuaWYgKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpIF9fZyA9IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIiwidmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHsgdmVyc2lvbjogJzIuNS4yJyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwiLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnZGl2JyksICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iLCIvLyA3LjEuMSBUb1ByaW1pdGl2ZShpbnB1dCBbLCBQcmVmZXJyZWRUeXBlXSlcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuLy8gaW5zdGVhZCBvZiB0aGUgRVM2IHNwZWMgdmVyc2lvbiwgd2UgZGlkbid0IGltcGxlbWVudCBAQHRvUHJpbWl0aXZlIGNhc2Vcbi8vIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IC0gZmxhZyAtIHByZWZlcnJlZCB0eXBlIGlzIGEgc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUykge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGl0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKFMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICh0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAoIVMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBkUCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZFAoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIScpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkUC5mKG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iLCJ2YXIgaWQgPSAwO1xudmFyIHB4ID0gTWF0aC5yYW5kb20oKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnLmNvbmNhdChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5LCAnKV8nLCAoKytpZCArIHB4KS50b1N0cmluZygzNikpO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFNSQyA9IHJlcXVpcmUoJy4vX3VpZCcpKCdzcmMnKTtcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyICR0b1N0cmluZyA9IEZ1bmN0aW9uW1RPX1NUUklOR107XG52YXIgVFBMID0gKCcnICsgJHRvU3RyaW5nKS5zcGxpdChUT19TVFJJTkcpO1xuXG5yZXF1aXJlKCcuL19jb3JlJykuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gJHRvU3RyaW5nLmNhbGwoaXQpO1xufTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsLCBzYWZlKSB7XG4gIHZhciBpc0Z1bmN0aW9uID0gdHlwZW9mIHZhbCA9PSAnZnVuY3Rpb24nO1xuICBpZiAoaXNGdW5jdGlvbikgaGFzKHZhbCwgJ25hbWUnKSB8fCBoaWRlKHZhbCwgJ25hbWUnLCBrZXkpO1xuICBpZiAoT1trZXldID09PSB2YWwpIHJldHVybjtcbiAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsIFNSQykgfHwgaGlkZSh2YWwsIFNSQywgT1trZXldID8gJycgKyBPW2tleV0gOiBUUEwuam9pbihTdHJpbmcoa2V5KSkpO1xuICBpZiAoTyA9PT0gZ2xvYmFsKSB7XG4gICAgT1trZXldID0gdmFsO1xuICB9IGVsc2UgaWYgKCFzYWZlKSB7XG4gICAgZGVsZXRlIE9ba2V5XTtcbiAgICBoaWRlKE8sIGtleSwgdmFsKTtcbiAgfSBlbHNlIGlmIChPW2tleV0pIHtcbiAgICBPW2tleV0gPSB2YWw7XG4gIH0gZWxzZSB7XG4gICAgaGlkZShPLCBrZXksIHZhbCk7XG4gIH1cbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxufSkoRnVuY3Rpb24ucHJvdG90eXBlLCBUT19TVFJJTkcsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyAmJiB0aGlzW1NSQ10gfHwgJHRvU3RyaW5nLmNhbGwodGhpcyk7XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSBmdW5jdGlvbiEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICh0eXBlLCBuYW1lLCBzb3VyY2UpIHtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkY7XG4gIHZhciBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HO1xuICB2YXIgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuUztcbiAgdmFyIElTX1BST1RPID0gdHlwZSAmICRleHBvcnQuUDtcbiAgdmFyIElTX0JJTkQgPSB0eXBlICYgJGV4cG9ydC5CO1xuICB2YXIgdGFyZ2V0ID0gSVNfR0xPQkFMID8gZ2xvYmFsIDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIHx8IChnbG9iYWxbbmFtZV0gPSB7fSkgOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdO1xuICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuICB2YXIgZXhwUHJvdG8gPSBleHBvcnRzW1BST1RPVFlQRV0gfHwgKGV4cG9ydHNbUFJPVE9UWVBFXSA9IHt9KTtcbiAgdmFyIGtleSwgb3duLCBvdXQsIGV4cDtcbiAgaWYgKElTX0dMT0JBTCkgc291cmNlID0gbmFtZTtcbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IChvd24gPyB0YXJnZXQgOiBzb3VyY2UpW2tleV07XG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBleHAgPSBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHRlbmQgZ2xvYmFsXG4gICAgaWYgKHRhcmdldCkgcmVkZWZpbmUodGFyZ2V0LCBrZXksIG91dCwgdHlwZSAmICRleHBvcnQuVSk7XG4gICAgLy8gZXhwb3J0XG4gICAgaWYgKGV4cG9ydHNba2V5XSAhPSBvdXQpIGhpZGUoZXhwb3J0cywga2V5LCBleHApO1xuICAgIGlmIChJU19QUk9UTyAmJiBleHBQcm90b1trZXldICE9IG91dCkgZXhwUHJvdG9ba2V5XSA9IG91dDtcbiAgfVxufTtcbmdsb2JhbC5jb3JlID0gY29yZTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iLCIvLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKSA/IE9iamVjdCA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY29mKGl0KSA9PSAnU3RyaW5nJyA/IGl0LnNwbGl0KCcnKSA6IE9iamVjdChpdCk7XG59O1xuIiwiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiIsIi8vIDcuMS4xNSBUb0xlbmd0aFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgaW5kZXggPSB0b0ludGVnZXIoaW5kZXgpO1xuICByZXR1cm4gaW5kZXggPCAwID8gbWF4KGluZGV4ICsgbGVuZ3RoLCAwKSA6IG1pbihpbmRleCwgbGVuZ3RoKTtcbn07XG4iLCIvLyBmYWxzZSAtPiBBcnJheSNpbmRleE9mXG4vLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlc1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykge1xuICAgICAgaWYgKE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IChnbG9iYWxbU0hBUkVEXSA9IHt9KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHt9KTtcbn07XG4iLCJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ2tleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gc2hhcmVkW2tleV0gfHwgKHNoYXJlZFtrZXldID0gdWlkKGtleSkpO1xufTtcbiIsInZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgYXJyYXlJbmRleE9mID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKShmYWxzZSk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0lPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pIGlmIChrZXkgIT0gSUVfUFJPVE8pIGhhcyhPLCBrZXkpICYmIHJlc3VsdC5wdXNoKGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXMoTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+YXJyYXlJbmRleE9mKHJlc3VsdCwga2V5KSB8fCByZXN1bHQucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiLy8gSUUgOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSAoXG4gICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnXG4pLnNwbGl0KCcsJyk7XG4iLCIvLyAxOS4xLjIuMTQgLyAxNS4yLjMuMTQgT2JqZWN0LmtleXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXlzID0gZ2V0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaSA9IDA7XG4gIHZhciBQO1xuICB3aGlsZSAobGVuZ3RoID4gaSkgZFAuZihPLCBQID0ga2V5c1tpKytdLCBQcm9wZXJ0aWVzW1BdKTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiIsIi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZFBzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIEVtcHR5ID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgY3JlYXRlRGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnaWZyYW1lJyk7XG4gIHZhciBpID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB2YXIgbHQgPSAnPCc7XG4gIHZhciBndCA9ICc+JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgcmVxdWlyZSgnLi9faHRtbCcpLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZS5zcmMgPSAnamF2YXNjcmlwdDonOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNjcmlwdC11cmxcbiAgLy8gY3JlYXRlRGljdCA9IGlmcmFtZS5jb250ZW50V2luZG93Lk9iamVjdDtcbiAgLy8gaHRtbC5yZW1vdmVDaGlsZChpZnJhbWUpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKGx0ICsgJ3NjcmlwdCcgKyBndCArICdkb2N1bWVudC5GPU9iamVjdCcgKyBsdCArICcvc2NyaXB0JyArIGd0KTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgY3JlYXRlRGljdCA9IGlmcmFtZURvY3VtZW50LkY7XG4gIHdoaWxlIChpLS0pIGRlbGV0ZSBjcmVhdGVEaWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbaV1dO1xuICByZXR1cm4gY3JlYXRlRGljdCgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eSgpO1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IGNyZWF0ZURpY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRQcyhyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsInZhciBzdG9yZSA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCd3a3MnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5TeW1ib2w7XG52YXIgVVNFX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcblxudmFyICRleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gc3RvcmVbbmFtZV0gfHwgKHN0b3JlW25hbWVdID1cbiAgICBVU0VfU1lNQk9MICYmIFN5bWJvbFtuYW1lXSB8fCAoVVNFX1NZTUJPTCA/IFN5bWJvbCA6IHVpZCkoJ1N5bWJvbC4nICsgbmFtZSkpO1xufTtcblxuJGV4cG9ydHMuc3RvcmUgPSBzdG9yZTtcbiIsInZhciBkZWYgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgdGFnLCBzdGF0KSB7XG4gIGlmIChpdCAmJiAhaGFzKGl0ID0gc3RhdCA/IGl0IDogaXQucHJvdG90eXBlLCBUQUcpKSBkZWYoaXQsIFRBRywgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiB0YWcgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBkZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4vLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faGlkZScpKEl0ZXJhdG9yUHJvdG90eXBlLCByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBkZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgTkFNRSArICcgSXRlcmF0b3InKTtcbn07XG4iLCIvLyA3LjEuMTMgVG9PYmplY3QoYXJndW1lbnQpXG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiIsIi8vIDE5LjEuMi45IC8gMTUuMi4zLjIgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90byA6IG51bGw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyICRpdGVyQ3JlYXRlID0gcmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBCVUdHWSA9ICEoW10ua2V5cyAmJiAnbmV4dCcgaW4gW10ua2V5cygpKTsgLy8gU2FmYXJpIGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxudmFyIEZGX0lURVJBVE9SID0gJ0BAaXRlcmF0b3InO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQmFzZSwgTkFNRSwgQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gICRpdGVyQ3JlYXRlKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcbiAgdmFyIGdldE1ldGhvZCA9IGZ1bmN0aW9uIChraW5kKSB7XG4gICAgaWYgKCFCVUdHWSAmJiBraW5kIGluIHByb3RvKSByZXR1cm4gcHJvdG9ba2luZF07XG4gICAgc3dpdGNoIChraW5kKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgfSByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgfTtcbiAgdmFyIFRBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIERFRl9WQUxVRVMgPSBERUZBVUxUID09IFZBTFVFUztcbiAgdmFyIFZBTFVFU19CVUcgPSBmYWxzZTtcbiAgdmFyIHByb3RvID0gQmFzZS5wcm90b3R5cGU7XG4gIHZhciAkbmF0aXZlID0gcHJvdG9bSVRFUkFUT1JdIHx8IHByb3RvW0ZGX0lURVJBVE9SXSB8fCBERUZBVUxUICYmIHByb3RvW0RFRkFVTFRdO1xuICB2YXIgJGRlZmF1bHQgPSAkbmF0aXZlIHx8IGdldE1ldGhvZChERUZBVUxUKTtcbiAgdmFyICRlbnRyaWVzID0gREVGQVVMVCA/ICFERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoJ2VudHJpZXMnKSA6IHVuZGVmaW5lZDtcbiAgdmFyICRhbnlOYXRpdmUgPSBOQU1FID09ICdBcnJheScgPyBwcm90by5lbnRyaWVzIHx8ICRuYXRpdmUgOiAkbmF0aXZlO1xuICB2YXIgbWV0aG9kcywga2V5LCBJdGVyYXRvclByb3RvdHlwZTtcbiAgLy8gRml4IG5hdGl2ZVxuICBpZiAoJGFueU5hdGl2ZSkge1xuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoJGFueU5hdGl2ZS5jYWxsKG5ldyBCYXNlKCkpKTtcbiAgICBpZiAoSXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgSXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JQcm90b3R5cGUsIFRBRywgdHJ1ZSk7XG4gICAgICAvLyBmaXggZm9yIHNvbWUgb2xkIGVuZ2luZXNcbiAgICAgIGlmICghTElCUkFSWSAmJiAhaGFzKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUikpIGhpZGUoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICB9XG4gIH1cbiAgLy8gZml4IEFycmF5I3t2YWx1ZXMsIEBAaXRlcmF0b3J9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoREVGX1ZBTFVFUyAmJiAkbmF0aXZlICYmICRuYXRpdmUubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgVkFMVUVTX0JVRyA9IHRydWU7XG4gICAgJGRlZmF1bHQgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiAkbmF0aXZlLmNhbGwodGhpcyk7IH07XG4gIH1cbiAgLy8gRGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUxJQlJBUlkgfHwgRk9SQ0VEKSAmJiAoQlVHR1kgfHwgVkFMVUVTX0JVRyB8fCAhcHJvdG9bSVRFUkFUT1JdKSkge1xuICAgIGhpZGUocHJvdG8sIElURVJBVE9SLCAkZGVmYXVsdCk7XG4gIH1cbiAgLy8gUGx1ZyBmb3IgbGlicmFyeVxuICBJdGVyYXRvcnNbTkFNRV0gPSAkZGVmYXVsdDtcbiAgSXRlcmF0b3JzW1RBR10gPSByZXR1cm5UaGlzO1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IERFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiAkZW50cmllc1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkgZm9yIChrZXkgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKCEoa2V5IGluIHByb3RvKSkgcmVkZWZpbmUocHJvdG8sIGtleSwgbWV0aG9kc1trZXldKTtcbiAgICB9IGVsc2UgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoQlVHR1kgfHwgVkFMVUVTX0JVRyksIE5BTUUsIG1ldGhvZHMpO1xuICB9XG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuLy8gMjEuMS4zLjI3IFN0cmluZy5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgdGhpcy5fdCA9IFN0cmluZyhpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuLy8gMjEuMS41LjIuMSAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBpbmRleCA9IHRoaXMuX2k7XG4gIHZhciBwb2ludDtcbiAgaWYgKGluZGV4ID49IE8ubGVuZ3RoKSByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIHBvaW50ID0gJGF0KE8sIGluZGV4KTtcbiAgdGhpcy5faSArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiB7IHZhbHVlOiBwb2ludCwgZG9uZTogZmFsc2UgfTtcbn0pO1xuIiwiLy8gY2FsbCBzb21ldGhpbmcgb24gaXRlcmF0b3Igc3RlcCB3aXRoIHNhZmUgY2xvc2luZyBvbiBlcnJvclxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgZm4sIHZhbHVlLCBlbnRyaWVzKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGVudHJpZXMgPyBmbihhbk9iamVjdCh2YWx1ZSlbMF0sIHZhbHVlWzFdKSA6IGZuKHZhbHVlKTtcbiAgLy8gNy40LjYgSXRlcmF0b3JDbG9zZShpdGVyYXRvciwgY29tcGxldGlvbilcbiAgfSBjYXRjaCAoZSkge1xuICAgIHZhciByZXQgPSBpdGVyYXRvclsncmV0dXJuJ107XG4gICAgaWYgKHJldCAhPT0gdW5kZWZpbmVkKSBhbk9iamVjdChyZXQuY2FsbChpdGVyYXRvcikpO1xuICAgIHRocm93IGU7XG4gIH1cbn07XG4iLCIvLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvW0lURVJBVE9SXSA9PT0gaXQpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGluZGV4LCB2YWx1ZSkge1xuICBpZiAoaW5kZXggaW4gb2JqZWN0KSAkZGVmaW5lUHJvcGVydHkuZihvYmplY3QsIGluZGV4LCBjcmVhdGVEZXNjKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2luZGV4XSA9IHZhbHVlO1xufTtcbiIsIi8vIGdldHRpbmcgdGFnIGZyb20gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG4vLyBFUzMgd3JvbmcgaGVyZVxudmFyIEFSRyA9IGNvZihmdW5jdGlvbiAoKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgTywgVCwgQjtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKFQgPSB0cnlHZXQoTyA9IE9iamVjdChpdCksIFRBRykpID09ICdzdHJpbmcnID8gVFxuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQVJHID8gY29mKE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKEIgPSBjb2YoTykpID09ICdPYmplY3QnICYmIHR5cGVvZiBPLmNhbGxlZSA9PSAnZnVuY3Rpb24nID8gJ0FyZ3VtZW50cycgOiBCO1xufTtcbiIsInZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvcmUnKS5nZXRJdGVyYXRvck1ldGhvZCA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgIT0gdW5kZWZpbmVkKSByZXR1cm4gaXRbSVRFUkFUT1JdXG4gICAgfHwgaXRbJ0BAaXRlcmF0b3InXVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuIiwidmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciByaXRlciA9IFs3XVtJVEVSQVRPUl0oKTtcbiAgcml0ZXJbJ3JldHVybiddID0gZnVuY3Rpb24gKCkgeyBTQUZFX0NMT1NJTkcgPSB0cnVlOyB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdGhyb3ctbGl0ZXJhbFxuICBBcnJheS5mcm9tKHJpdGVyLCBmdW5jdGlvbiAoKSB7IHRocm93IDI7IH0pO1xufSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMsIHNraXBDbG9zaW5nKSB7XG4gIGlmICghc2tpcENsb3NpbmcgJiYgIVNBRkVfQ0xPU0lORykgcmV0dXJuIGZhbHNlO1xuICB2YXIgc2FmZSA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBhcnIgPSBbN107XG4gICAgdmFyIGl0ZXIgPSBhcnJbSVRFUkFUT1JdKCk7XG4gICAgaXRlci5uZXh0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4geyBkb25lOiBzYWZlID0gdHJ1ZSB9OyB9O1xuICAgIGFycltJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBpdGVyOyB9O1xuICAgIGV4ZWMoYXJyKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBzYWZlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi9faXRlci1jYWxsJyk7XG52YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0JykoZnVuY3Rpb24gKGl0ZXIpIHsgQXJyYXkuZnJvbShpdGVyKTsgfSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4yLjEgQXJyYXkuZnJvbShhcnJheUxpa2UsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICBmcm9tOiBmdW5jdGlvbiBmcm9tKGFycmF5TGlrZSAvKiAsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgIHZhciBDID0gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIG1hcGZuID0gYUxlbiA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGl0ZXJGbiA9IGdldEl0ZXJGbihPKTtcbiAgICB2YXIgbGVuZ3RoLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yO1xuICAgIGlmIChtYXBwaW5nKSBtYXBmbiA9IGN0eChtYXBmbiwgYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQsIDIpO1xuICAgIC8vIGlmIG9iamVjdCBpc24ndCBpdGVyYWJsZSBvciBpdCdzIGFycmF5IHdpdGggZGVmYXVsdCBpdGVyYXRvciAtIHVzZSBzaW1wbGUgY2FzZVxuICAgIGlmIChpdGVyRm4gIT0gdW5kZWZpbmVkICYmICEoQyA9PSBBcnJheSAmJiBpc0FycmF5SXRlcihpdGVyRm4pKSkge1xuICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCByZXN1bHQgPSBuZXcgQygpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGluZGV4KyspIHtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IGNhbGwoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgICBmb3IgKHJlc3VsdCA9IG5ldyBDKGxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQubGVuZ3RoID0gaW5kZXg7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2LmFycmF5LmZyb20nKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLkFycmF5LmZyb207XG4iLCJleHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwiZXhwb3J0cy5mID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjIuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlLCAuLi4pXG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciAkYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcblxuLy8gc2hvdWxkIHdvcmsgd2l0aCBzeW1ib2xzIGFuZCBzaG91bGQgaGF2ZSBkZXRlcm1pbmlzdGljIHByb3BlcnR5IG9yZGVyIChWOCBidWcpXG5tb2R1bGUuZXhwb3J0cyA9ICEkYXNzaWduIHx8IHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICB2YXIgQSA9IHt9O1xuICB2YXIgQiA9IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgdmFyIFMgPSBTeW1ib2woKTtcbiAgdmFyIEsgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuICBBW1NdID0gNztcbiAgSy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAoaykgeyBCW2tdID0gazsgfSk7XG4gIHJldHVybiAkYXNzaWduKHt9LCBBKVtTXSAhPSA3IHx8IE9iamVjdC5rZXlzKCRhc3NpZ24oe30sIEIpKS5qb2luKCcnKSAhPSBLO1xufSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICB2YXIgVCA9IHRvT2JqZWN0KHRhcmdldCk7XG4gIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIHZhciBpc0VudW0gPSBwSUUuZjtcbiAgd2hpbGUgKGFMZW4gPiBpbmRleCkge1xuICAgIHZhciBTID0gSU9iamVjdChhcmd1bWVudHNbaW5kZXgrK10pO1xuICAgIHZhciBrZXlzID0gZ2V0U3ltYm9scyA/IGdldEtleXMoUykuY29uY2F0KGdldFN5bWJvbHMoUykpIDogZ2V0S2V5cyhTKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGopIGlmIChpc0VudW0uY2FsbChTLCBrZXkgPSBrZXlzW2orK10pKSBUW2tleV0gPSBTW2tleV07XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcbiIsIi8vIDE5LjEuMy4xIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBzb3VyY2UpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiwgJ09iamVjdCcsIHsgYXNzaWduOiByZXF1aXJlKCcuL19vYmplY3QtYXNzaWduJykgfSk7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5PYmplY3QuYXNzaWduO1xuIiwidmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciBnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGdPUEQgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZ09QRChPLCBQKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXMoTywgUCkpIHJldHVybiBjcmVhdGVEZXNjKCFwSUUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbn07XG4iLCIvLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKE8sIHByb3RvKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBpZiAoIWlzT2JqZWN0KHByb3RvKSAmJiBwcm90byAhPT0gbnVsbCkgdGhyb3cgVHlwZUVycm9yKHByb3RvICsgXCI6IGNhbid0IHNldCBhcyBwcm90b3R5cGUhXCIpO1xufTtcbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgZnVuY3Rpb24gKHRlc3QsIGJ1Z2d5LCBzZXQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldCA9IHJlcXVpcmUoJy4vX2N0eCcpKEZ1bmN0aW9uLmNhbGwsIHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZihPYmplY3QucHJvdG90eXBlLCAnX19wcm90b19fJykuc2V0LCAyKTtcbiAgICAgICAgc2V0KHRlc3QsIFtdKTtcbiAgICAgICAgYnVnZ3kgPSAhKHRlc3QgaW5zdGFuY2VvZiBBcnJheSk7XG4gICAgICB9IGNhdGNoIChlKSB7IGJ1Z2d5ID0gdHJ1ZTsgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKSB7XG4gICAgICAgIGNoZWNrKE8sIHByb3RvKTtcbiAgICAgICAgaWYgKGJ1Z2d5KSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgICAgICBlbHNlIHNldChPLCBwcm90byk7XG4gICAgICAgIHJldHVybiBPO1xuICAgICAgfTtcbiAgICB9KHt9LCBmYWxzZSkgOiB1bmRlZmluZWQpLFxuICBjaGVjazogY2hlY2tcbn07XG4iLCIvLyAxOS4xLjMuMTkgT2JqZWN0LnNldFByb3RvdHlwZU9mKE8sIHByb3RvKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBzZXRQcm90b3R5cGVPZjogcmVxdWlyZSgnLi9fc2V0LXByb3RvJykuc2V0IH0pO1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LnNldC1wcm90b3R5cGUtb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLk9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgdGVzdCA9IHt9O1xudGVzdFtyZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKV0gPSAneic7XG5pZiAodGVzdCArICcnICE9ICdbb2JqZWN0IHpdJykge1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKE9iamVjdC5wcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAnW29iamVjdCAnICsgY2xhc3NvZih0aGlzKSArICddJztcbiAgfSwgdHJ1ZSk7XG59XG4iLCIvLyAyMi4xLjMuMzEgQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG52YXIgVU5TQ09QQUJMRVMgPSByZXF1aXJlKCcuL193a3MnKSgndW5zY29wYWJsZXMnKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuaWYgKEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdID09IHVuZGVmaW5lZCkgcmVxdWlyZSgnLi9faGlkZScpKEFycmF5UHJvdG8sIFVOU0NPUEFCTEVTLCB7fSk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgQXJyYXlQcm90b1tVTlNDT1BBQkxFU11ba2V5XSA9IHRydWU7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZG9uZSwgdmFsdWUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiAhIWRvbmUgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIHN0ZXAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG5cbi8vIDIyLjEuMy40IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzKClcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUua2V5cygpXG4vLyAyMi4xLjMuMjkgQXJyYXkucHJvdG90eXBlLnZhbHVlcygpXG4vLyAyMi4xLjMuMzAgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcbi8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBraW5kID0gdGhpcy5faztcbiAgdmFyIGluZGV4ID0gdGhpcy5faSsrO1xuICBpZiAoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpIHtcbiAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGVwKDEpO1xuICB9XG4gIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuIiwidmFyICRpdGVyYXRvcnMgPSByZXF1aXJlKCcuL2VzNi5hcnJheS5pdGVyYXRvcicpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xudmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xudmFyIFRPX1NUUklOR19UQUcgPSB3a3MoJ3RvU3RyaW5nVGFnJyk7XG52YXIgQXJyYXlWYWx1ZXMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIENTU1J1bGVMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogZmFsc2UsXG4gIENTU1ZhbHVlTGlzdDogZmFsc2UsXG4gIENsaWVudFJlY3RMaXN0OiBmYWxzZSxcbiAgRE9NUmVjdExpc3Q6IGZhbHNlLFxuICBET01TdHJpbmdMaXN0OiBmYWxzZSxcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBEYXRhVHJhbnNmZXJJdGVtTGlzdDogZmFsc2UsXG4gIEZpbGVMaXN0OiBmYWxzZSxcbiAgSFRNTEFsbENvbGxlY3Rpb246IGZhbHNlLFxuICBIVE1MQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxGb3JtRWxlbWVudDogZmFsc2UsXG4gIEhUTUxTZWxlY3RFbGVtZW50OiBmYWxzZSxcbiAgTWVkaWFMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgTWltZVR5cGVBcnJheTogZmFsc2UsXG4gIE5hbWVkTm9kZU1hcDogZmFsc2UsXG4gIE5vZGVMaXN0OiB0cnVlLFxuICBQYWludFJlcXVlc3RMaXN0OiBmYWxzZSxcbiAgUGx1Z2luOiBmYWxzZSxcbiAgUGx1Z2luQXJyYXk6IGZhbHNlLFxuICBTVkdMZW5ndGhMaXN0OiBmYWxzZSxcbiAgU1ZHTnVtYmVyTGlzdDogZmFsc2UsXG4gIFNWR1BhdGhTZWdMaXN0OiBmYWxzZSxcbiAgU1ZHUG9pbnRMaXN0OiBmYWxzZSxcbiAgU1ZHU3RyaW5nTGlzdDogZmFsc2UsXG4gIFNWR1RyYW5zZm9ybUxpc3Q6IGZhbHNlLFxuICBTb3VyY2VCdWZmZXJMaXN0OiBmYWxzZSxcbiAgU3R5bGVTaGVldExpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBUZXh0VHJhY2tDdWVMaXN0OiBmYWxzZSxcbiAgVGV4dFRyYWNrTGlzdDogZmFsc2UsXG4gIFRvdWNoTGlzdDogZmFsc2Vcbn07XG5cbmZvciAodmFyIGNvbGxlY3Rpb25zID0gZ2V0S2V5cyhET01JdGVyYWJsZXMpLCBpID0gMDsgaSA8IGNvbGxlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gIHZhciBOQU1FID0gY29sbGVjdGlvbnNbaV07XG4gIHZhciBleHBsaWNpdCA9IERPTUl0ZXJhYmxlc1tOQU1FXTtcbiAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbTkFNRV07XG4gIHZhciBwcm90byA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gIHZhciBrZXk7XG4gIGlmIChwcm90bykge1xuICAgIGlmICghcHJvdG9bSVRFUkFUT1JdKSBoaWRlKHByb3RvLCBJVEVSQVRPUiwgQXJyYXlWYWx1ZXMpO1xuICAgIGlmICghcHJvdG9bVE9fU1RSSU5HX1RBR10pIGhpZGUocHJvdG8sIFRPX1NUUklOR19UQUcsIE5BTUUpO1xuICAgIEl0ZXJhdG9yc1tOQU1FXSA9IEFycmF5VmFsdWVzO1xuICAgIGlmIChleHBsaWNpdCkgZm9yIChrZXkgaW4gJGl0ZXJhdG9ycykgaWYgKCFwcm90b1trZXldKSByZWRlZmluZShwcm90bywga2V5LCAkaXRlcmF0b3JzW2tleV0sIHRydWUpO1xuICB9XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgQ29uc3RydWN0b3IsIG5hbWUsIGZvcmJpZGRlbkZpZWxkKSB7XG4gIGlmICghKGl0IGluc3RhbmNlb2YgQ29uc3RydWN0b3IpIHx8IChmb3JiaWRkZW5GaWVsZCAhPT0gdW5kZWZpbmVkICYmIGZvcmJpZGRlbkZpZWxkIGluIGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihuYW1lICsgJzogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsInZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi9faXRlci1jYWxsJyk7XG52YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgQlJFQUsgPSB7fTtcbnZhciBSRVRVUk4gPSB7fTtcbnZhciBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIGVudHJpZXMsIGZuLCB0aGF0LCBJVEVSQVRPUikge1xuICB2YXIgaXRlckZuID0gSVRFUkFUT1IgPyBmdW5jdGlvbiAoKSB7IHJldHVybiBpdGVyYWJsZTsgfSA6IGdldEl0ZXJGbihpdGVyYWJsZSk7XG4gIHZhciBmID0gY3R4KGZuLCB0aGF0LCBlbnRyaWVzID8gMiA6IDEpO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGVuZ3RoLCBzdGVwLCBpdGVyYXRvciwgcmVzdWx0O1xuICBpZiAodHlwZW9mIGl0ZXJGbiAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXRlcmFibGUgKyAnIGlzIG5vdCBpdGVyYWJsZSEnKTtcbiAgLy8gZmFzdCBjYXNlIGZvciBhcnJheXMgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yXG4gIGlmIChpc0FycmF5SXRlcihpdGVyRm4pKSBmb3IgKGxlbmd0aCA9IHRvTGVuZ3RoKGl0ZXJhYmxlLmxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgcmVzdWx0ID0gZW50cmllcyA/IGYoYW5PYmplY3Qoc3RlcCA9IGl0ZXJhYmxlW2luZGV4XSlbMF0sIHN0ZXBbMV0pIDogZihpdGVyYWJsZVtpbmRleF0pO1xuICAgIGlmIChyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKSByZXR1cm4gcmVzdWx0O1xuICB9IGVsc2UgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKGl0ZXJhYmxlKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOykge1xuICAgIHJlc3VsdCA9IGNhbGwoaXRlcmF0b3IsIGYsIHN0ZXAudmFsdWUsIGVudHJpZXMpO1xuICAgIGlmIChyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKSByZXR1cm4gcmVzdWx0O1xuICB9XG59O1xuZXhwb3J0cy5CUkVBSyA9IEJSRUFLO1xuZXhwb3J0cy5SRVRVUk4gPSBSRVRVUk47XG4iLCIvLyA3LjMuMjAgU3BlY2llc0NvbnN0cnVjdG9yKE8sIGRlZmF1bHRDb25zdHJ1Y3RvcilcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIEQpIHtcbiAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvcjtcbiAgdmFyIFM7XG4gIHJldHVybiBDID09PSB1bmRlZmluZWQgfHwgKFMgPSBhbk9iamVjdChDKVtTUEVDSUVTXSkgPT0gdW5kZWZpbmVkID8gRCA6IGFGdW5jdGlvbihTKTtcbn07XG4iLCIvLyBmYXN0IGFwcGx5LCBodHRwOi8vanNwZXJmLmxua2l0LmNvbS9mYXN0LWFwcGx5LzVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCBhcmdzLCB0aGF0KSB7XG4gIHZhciB1biA9IHRoYXQgPT09IHVuZGVmaW5lZDtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIHVuID8gZm4oKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0KTtcbiAgICBjYXNlIDE6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICBjYXNlIDQ6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICB9IHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmdzKTtcbn07XG4iLCJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgaW52b2tlID0gcmVxdWlyZSgnLi9faW52b2tlJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4vX2h0bWwnKTtcbnZhciBjZWwgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHNldFRhc2sgPSBnbG9iYWwuc2V0SW1tZWRpYXRlO1xudmFyIGNsZWFyVGFzayA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcbnZhciBNZXNzYWdlQ2hhbm5lbCA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbDtcbnZhciBEaXNwYXRjaCA9IGdsb2JhbC5EaXNwYXRjaDtcbnZhciBjb3VudGVyID0gMDtcbnZhciBxdWV1ZSA9IHt9O1xudmFyIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xudmFyIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xudmFyIHJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGlkID0gK3RoaXM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgaWYgKHF1ZXVlLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgIHZhciBmbiA9IHF1ZXVlW2lkXTtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgIGZuKCk7XG4gIH1cbn07XG52YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgcnVuLmNhbGwoZXZlbnQuZGF0YSk7XG59O1xuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXRUYXNrIHx8ICFjbGVhclRhc2spIHtcbiAgc2V0VGFzayA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbikge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgdmFyIGkgPSAxO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICBpbnZva2UodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSwgYXJncyk7XG4gICAgfTtcbiAgICBkZWZlcihjb3VudGVyKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfTtcbiAgY2xlYXJUYXNrID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gU3BoZXJlIChKUyBnYW1lIGVuZ2luZSkgRGlzcGF0Y2ggQVBJXG4gIH0gZWxzZSBpZiAoRGlzcGF0Y2ggJiYgRGlzcGF0Y2gubm93KSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIERpc3BhdGNoLm5vdyhjdHgocnVuLCBpZCwgMSkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCkge1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGxpc3RlbmVyO1xuICAgIGRlZmVyID0gY3R4KHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQsIDEpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT0gJ2Z1bmN0aW9uJyAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsICcqJyk7XG4gICAgfTtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY2VsKCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNlbCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIHJ1bi5jYWxsKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChjdHgocnVuLCBpZCwgMSksIDApO1xuICAgIH07XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldFRhc2ssXG4gIGNsZWFyOiBjbGVhclRhc2tcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgbWFjcm90YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpLnNldDtcbnZhciBPYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG52YXIgaXNOb2RlID0gcmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhlYWQsIGxhc3QsIG5vdGlmeTtcblxuICB2YXIgZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmVudCwgZm47XG4gICAgaWYgKGlzTm9kZSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKSBwYXJlbnQuZXhpdCgpO1xuICAgIHdoaWxlIChoZWFkKSB7XG4gICAgICBmbiA9IGhlYWQuZm47XG4gICAgICBoZWFkID0gaGVhZC5uZXh0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm4oKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGhlYWQpIG5vdGlmeSgpO1xuICAgICAgICBlbHNlIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgIGlmIChwYXJlbnQpIHBhcmVudC5lbnRlcigpO1xuICB9O1xuXG4gIC8vIE5vZGUuanNcbiAgaWYgKGlzTm9kZSkge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xuICAgIH07XG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlciwgZXhjZXB0IGlPUyBTYWZhcmkgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMzM5XG4gIH0gZWxzZSBpZiAoT2JzZXJ2ZXIgJiYgIShnbG9iYWwubmF2aWdhdG9yICYmIGdsb2JhbC5uYXZpZ2F0b3Iuc3RhbmRhbG9uZSkpIHtcbiAgICB2YXIgdG9nZ2xlID0gdHJ1ZTtcbiAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgT2JzZXJ2ZXIoZmx1c2gpLm9ic2VydmUobm9kZSwgeyBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vZGUuZGF0YSA9IHRvZ2dsZSA9ICF0b2dnbGU7XG4gICAgfTtcbiAgLy8gZW52aXJvbm1lbnRzIHdpdGggbWF5YmUgbm9uLWNvbXBsZXRlbHkgY29ycmVjdCwgYnV0IGV4aXN0ZW50IFByb21pc2VcbiAgfSBlbHNlIGlmIChQcm9taXNlICYmIFByb21pc2UucmVzb2x2ZSkge1xuICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvbWlzZS50aGVuKGZsdXNoKTtcbiAgICB9O1xuICAvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9uOlxuICAvLyAtIHNldEltbWVkaWF0ZVxuICAvLyAtIE1lc3NhZ2VDaGFubmVsXG4gIC8vIC0gd2luZG93LnBvc3RNZXNzYWdcbiAgLy8gLSBvbnJlYWR5c3RhdGVjaGFuZ2VcbiAgLy8gLSBzZXRUaW1lb3V0XG4gIH0gZWxzZSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gc3RyYW5nZSBJRSArIHdlYnBhY2sgZGV2IHNlcnZlciBidWcgLSB1c2UgLmNhbGwoZ2xvYmFsKVxuICAgICAgbWFjcm90YXNrLmNhbGwoZ2xvYmFsLCBmbHVzaCk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoZm4pIHtcbiAgICB2YXIgdGFzayA9IHsgZm46IGZuLCBuZXh0OiB1bmRlZmluZWQgfTtcbiAgICBpZiAobGFzdCkgbGFzdC5uZXh0ID0gdGFzaztcbiAgICBpZiAoIWhlYWQpIHtcbiAgICAgIGhlYWQgPSB0YXNrO1xuICAgICAgbm90aWZ5KCk7XG4gICAgfSBsYXN0ID0gdGFzaztcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyNS40LjEuNSBOZXdQcm9taXNlQ2FwYWJpbGl0eShDKVxudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcblxuZnVuY3Rpb24gUHJvbWlzZUNhcGFiaWxpdHkoQykge1xuICB2YXIgcmVzb2x2ZSwgcmVqZWN0O1xuICB0aGlzLnByb21pc2UgPSBuZXcgQyhmdW5jdGlvbiAoJCRyZXNvbHZlLCAkJHJlamVjdCkge1xuICAgIGlmIChyZXNvbHZlICE9PSB1bmRlZmluZWQgfHwgcmVqZWN0ICE9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcignQmFkIFByb21pc2UgY29uc3RydWN0b3InKTtcbiAgICByZXNvbHZlID0gJCRyZXNvbHZlO1xuICAgIHJlamVjdCA9ICQkcmVqZWN0O1xuICB9KTtcbiAgdGhpcy5yZXNvbHZlID0gYUZ1bmN0aW9uKHJlc29sdmUpO1xuICB0aGlzLnJlamVjdCA9IGFGdW5jdGlvbihyZWplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gKEMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlQ2FwYWJpbGl0eShDKTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgZTogZmFsc2UsIHY6IGV4ZWMoKSB9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHsgZTogdHJ1ZSwgdjogZSB9O1xuICB9XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQywgeCkge1xuICBhbk9iamVjdChDKTtcbiAgaWYgKGlzT2JqZWN0KHgpICYmIHguY29uc3RydWN0b3IgPT09IEMpIHJldHVybiB4O1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKEMpO1xuICB2YXIgcmVzb2x2ZSA9IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmU7XG4gIHJlc29sdmUoeCk7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufTtcbiIsInZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgc2FmZSkge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSByZWRlZmluZSh0YXJnZXQsIGtleSwgc3JjW2tleV0sIHNhZmUpO1xuICByZXR1cm4gdGFyZ2V0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciBDID0gZ2xvYmFsW0tFWV07XG4gIGlmIChERVNDUklQVE9SUyAmJiBDICYmICFDW1NQRUNJRVNdKSBkUC5mKEMsIFNQRUNJRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRhc2sgPSByZXF1aXJlKCcuL190YXNrJykuc2V0O1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4vX3BlcmZvcm0nKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIFBST01JU0UgPSAnUHJvbWlzZSc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgJFByb21pc2UgPSBnbG9iYWxbUFJPTUlTRV07XG52YXIgaXNOb2RlID0gY2xhc3NvZihwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG52YXIgZW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgSW50ZXJuYWwsIG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSwgT3duUHJvbWlzZUNhcGFiaWxpdHksIFdyYXBwZXI7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mO1xuXG52YXIgVVNFX05BVElWRSA9ICEhZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGNvcnJlY3Qgc3ViY2xhc3Npbmcgd2l0aCBAQHNwZWNpZXMgc3VwcG9ydFxuICAgIHZhciBwcm9taXNlID0gJFByb21pc2UucmVzb2x2ZSgxKTtcbiAgICB2YXIgRmFrZVByb21pc2UgPSAocHJvbWlzZS5jb25zdHJ1Y3RvciA9IHt9KVtyZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpXSA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgICBleGVjKGVtcHR5LCBlbXB0eSk7XG4gICAgfTtcbiAgICAvLyB1bmhhbmRsZWQgcmVqZWN0aW9ucyB0cmFja2luZyBzdXBwb3J0LCBOb2RlSlMgUHJvbWlzZSB3aXRob3V0IGl0IGZhaWxzIEBAc3BlY2llcyB0ZXN0XG4gICAgcmV0dXJuIChpc05vZGUgfHwgdHlwZW9mIFByb21pc2VSZWplY3Rpb25FdmVudCA9PSAnZnVuY3Rpb24nKSAmJiBwcm9taXNlLnRoZW4oZW1wdHkpIGluc3RhbmNlb2YgRmFrZVByb21pc2U7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxufSgpO1xuXG4vLyBoZWxwZXJzXG52YXIgaXNUaGVuYWJsZSA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgdGhlbjtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiB0eXBlb2YgKHRoZW4gPSBpdC50aGVuKSA9PSAnZnVuY3Rpb24nID8gdGhlbiA6IGZhbHNlO1xufTtcbnZhciBub3RpZnkgPSBmdW5jdGlvbiAocHJvbWlzZSwgaXNSZWplY3QpIHtcbiAgaWYgKHByb21pc2UuX24pIHJldHVybjtcbiAgcHJvbWlzZS5fbiA9IHRydWU7XG4gIHZhciBjaGFpbiA9IHByb21pc2UuX2M7XG4gIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhbHVlID0gcHJvbWlzZS5fdjtcbiAgICB2YXIgb2sgPSBwcm9taXNlLl9zID09IDE7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBydW4gPSBmdW5jdGlvbiAocmVhY3Rpb24pIHtcbiAgICAgIHZhciBoYW5kbGVyID0gb2sgPyByZWFjdGlvbi5vayA6IHJlYWN0aW9uLmZhaWw7XG4gICAgICB2YXIgcmVzb2x2ZSA9IHJlYWN0aW9uLnJlc29sdmU7XG4gICAgICB2YXIgcmVqZWN0ID0gcmVhY3Rpb24ucmVqZWN0O1xuICAgICAgdmFyIGRvbWFpbiA9IHJlYWN0aW9uLmRvbWFpbjtcbiAgICAgIHZhciByZXN1bHQsIHRoZW47XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICAgIGlmIChwcm9taXNlLl9oID09IDIpIG9uSGFuZGxlVW5oYW5kbGVkKHByb21pc2UpO1xuICAgICAgICAgICAgcHJvbWlzZS5faCA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoZG9tYWluKSBkb21haW4uZXhpdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgICAgICByZWplY3QoVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgd2hpbGUgKGNoYWluLmxlbmd0aCA+IGkpIHJ1bihjaGFpbltpKytdKTsgLy8gdmFyaWFibGUgbGVuZ3RoIC0gY2FuJ3QgdXNlIGZvckVhY2hcbiAgICBwcm9taXNlLl9jID0gW107XG4gICAgcHJvbWlzZS5fbiA9IGZhbHNlO1xuICAgIGlmIChpc1JlamVjdCAmJiAhcHJvbWlzZS5faCkgb25VbmhhbmRsZWQocHJvbWlzZSk7XG4gIH0pO1xufTtcbnZhciBvblVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92O1xuICAgIHZhciB1bmhhbmRsZWQgPSBpc1VuaGFuZGxlZChwcm9taXNlKTtcbiAgICB2YXIgcmVzdWx0LCBoYW5kbGVyLCBjb25zb2xlO1xuICAgIGlmICh1bmhhbmRsZWQpIHtcbiAgICAgIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoaXNOb2RlKSB7XG4gICAgICAgICAgcHJvY2Vzcy5lbWl0KCd1bmhhbmRsZWRSZWplY3Rpb24nLCB2YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaGFuZGxlciA9IGdsb2JhbC5vbnVuaGFuZGxlZHJlamVjdGlvbikge1xuICAgICAgICAgIGhhbmRsZXIoeyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHZhbHVlIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKChjb25zb2xlID0gZ2xvYmFsLmNvbnNvbGUpICYmIGNvbnNvbGUuZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24nLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgLy8gQnJvd3NlcnMgc2hvdWxkIG5vdCB0cmlnZ2VyIGByZWplY3Rpb25IYW5kbGVkYCBldmVudCBpZiBpdCB3YXMgaGFuZGxlZCBoZXJlLCBOb2RlSlMgLSBzaG91bGRcbiAgICAgIHByb21pc2UuX2ggPSBpc05vZGUgfHwgaXNVbmhhbmRsZWQocHJvbWlzZSkgPyAyIDogMTtcbiAgICB9IHByb21pc2UuX2EgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHVuaGFuZGxlZCAmJiByZXN1bHQuZSkgdGhyb3cgcmVzdWx0LnY7XG4gIH0pO1xufTtcbnZhciBpc1VuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIGlmIChwcm9taXNlLl9oID09IDEpIHJldHVybiBmYWxzZTtcbiAgdmFyIGNoYWluID0gcHJvbWlzZS5fYSB8fCBwcm9taXNlLl9jO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZWFjdGlvbjtcbiAgd2hpbGUgKGNoYWluLmxlbmd0aCA+IGkpIHtcbiAgICByZWFjdGlvbiA9IGNoYWluW2krK107XG4gICAgaWYgKHJlYWN0aW9uLmZhaWwgfHwgIWlzVW5oYW5kbGVkKHJlYWN0aW9uLnByb21pc2UpKSByZXR1cm4gZmFsc2U7XG4gIH0gcmV0dXJuIHRydWU7XG59O1xudmFyIG9uSGFuZGxlVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciBoYW5kbGVyO1xuICAgIGlmIChpc05vZGUpIHtcbiAgICAgIHByb2Nlc3MuZW1pdCgncmVqZWN0aW9uSGFuZGxlZCcsIHByb21pc2UpO1xuICAgIH0gZWxzZSBpZiAoaGFuZGxlciA9IGdsb2JhbC5vbnJlamVjdGlvbmhhbmRsZWQpIHtcbiAgICAgIGhhbmRsZXIoeyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHByb21pc2UuX3YgfSk7XG4gICAgfVxuICB9KTtcbn07XG52YXIgJHJlamVjdCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIGlmIChwcm9taXNlLl9kKSByZXR1cm47XG4gIHByb21pc2UuX2QgPSB0cnVlO1xuICBwcm9taXNlID0gcHJvbWlzZS5fdyB8fCBwcm9taXNlOyAvLyB1bndyYXBcbiAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICBwcm9taXNlLl9zID0gMjtcbiAgaWYgKCFwcm9taXNlLl9hKSBwcm9taXNlLl9hID0gcHJvbWlzZS5fYy5zbGljZSgpO1xuICBub3RpZnkocHJvbWlzZSwgdHJ1ZSk7XG59O1xudmFyICRyZXNvbHZlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHZhciBwcm9taXNlID0gdGhpcztcbiAgdmFyIHRoZW47XG4gIGlmIChwcm9taXNlLl9kKSByZXR1cm47XG4gIHByb21pc2UuX2QgPSB0cnVlO1xuICBwcm9taXNlID0gcHJvbWlzZS5fdyB8fCBwcm9taXNlOyAvLyB1bndyYXBcbiAgdHJ5IHtcbiAgICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHRocm93IFR5cGVFcnJvcihcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpO1xuICAgIGlmICh0aGVuID0gaXNUaGVuYWJsZSh2YWx1ZSkpIHtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB3cmFwcGVyID0geyBfdzogcHJvbWlzZSwgX2Q6IGZhbHNlIH07IC8vIHdyYXBcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGVuLmNhbGwodmFsdWUsIGN0eCgkcmVzb2x2ZSwgd3JhcHBlciwgMSksIGN0eCgkcmVqZWN0LCB3cmFwcGVyLCAxKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAkcmVqZWN0LmNhbGwod3JhcHBlciwgZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9taXNlLl92ID0gdmFsdWU7XG4gICAgICBwcm9taXNlLl9zID0gMTtcbiAgICAgIG5vdGlmeShwcm9taXNlLCBmYWxzZSk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgJHJlamVjdC5jYWxsKHsgX3c6IHByb21pc2UsIF9kOiBmYWxzZSB9LCBlKTsgLy8gd3JhcFxuICB9XG59O1xuXG4vLyBjb25zdHJ1Y3RvciBwb2x5ZmlsbFxuaWYgKCFVU0VfTkFUSVZFKSB7XG4gIC8vIDI1LjQuMy4xIFByb21pc2UoZXhlY3V0b3IpXG4gICRQcm9taXNlID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIGFuSW5zdGFuY2UodGhpcywgJFByb21pc2UsIFBST01JU0UsICdfaCcpO1xuICAgIGFGdW5jdGlvbihleGVjdXRvcik7XG4gICAgSW50ZXJuYWwuY2FsbCh0aGlzKTtcbiAgICB0cnkge1xuICAgICAgZXhlY3V0b3IoY3R4KCRyZXNvbHZlLCB0aGlzLCAxKSwgY3R4KCRyZWplY3QsIHRoaXMsIDEpKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICRyZWplY3QuY2FsbCh0aGlzLCBlcnIpO1xuICAgIH1cbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIEludGVybmFsID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIHRoaXMuX2MgPSBbXTsgICAgICAgICAgICAgLy8gPC0gYXdhaXRpbmcgcmVhY3Rpb25zXG4gICAgdGhpcy5fYSA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSBjaGVja2VkIGluIGlzVW5oYW5kbGVkIHJlYWN0aW9uc1xuICAgIHRoaXMuX3MgPSAwOyAgICAgICAgICAgICAgLy8gPC0gc3RhdGVcbiAgICB0aGlzLl9kID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIGRvbmVcbiAgICB0aGlzLl92ID0gdW5kZWZpbmVkOyAgICAgIC8vIDwtIHZhbHVlXG4gICAgdGhpcy5faCA9IDA7ICAgICAgICAgICAgICAvLyA8LSByZWplY3Rpb24gc3RhdGUsIDAgLSBkZWZhdWx0LCAxIC0gaGFuZGxlZCwgMiAtIHVuaGFuZGxlZFxuICAgIHRoaXMuX24gPSBmYWxzZTsgICAgICAgICAgLy8gPC0gbm90aWZ5XG4gIH07XG4gIEludGVybmFsLnByb3RvdHlwZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpKCRQcm9taXNlLnByb3RvdHlwZSwge1xuICAgIC8vIDI1LjQuNS4zIFByb21pc2UucHJvdG90eXBlLnRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpXG4gICAgdGhlbjogZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgICAgdmFyIHJlYWN0aW9uID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsICRQcm9taXNlKSk7XG4gICAgICByZWFjdGlvbi5vayA9IHR5cGVvZiBvbkZ1bGZpbGxlZCA9PSAnZnVuY3Rpb24nID8gb25GdWxmaWxsZWQgOiB0cnVlO1xuICAgICAgcmVhY3Rpb24uZmFpbCA9IHR5cGVvZiBvblJlamVjdGVkID09ICdmdW5jdGlvbicgJiYgb25SZWplY3RlZDtcbiAgICAgIHJlYWN0aW9uLmRvbWFpbiA9IGlzTm9kZSA/IHByb2Nlc3MuZG9tYWluIDogdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fYy5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmICh0aGlzLl9hKSB0aGlzLl9hLnB1c2gocmVhY3Rpb24pO1xuICAgICAgaWYgKHRoaXMuX3MpIG5vdGlmeSh0aGlzLCBmYWxzZSk7XG4gICAgICByZXR1cm4gcmVhY3Rpb24ucHJvbWlzZTtcbiAgICB9LFxuICAgIC8vIDI1LjQuNS4xIFByb21pc2UucHJvdG90eXBlLmNhdGNoKG9uUmVqZWN0ZWQpXG4gICAgJ2NhdGNoJzogZnVuY3Rpb24gKG9uUmVqZWN0ZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBvblJlamVjdGVkKTtcbiAgICB9XG4gIH0pO1xuICBPd25Qcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBJbnRlcm5hbCgpO1xuICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gICAgdGhpcy5yZXNvbHZlID0gY3R4KCRyZXNvbHZlLCBwcm9taXNlLCAxKTtcbiAgICB0aGlzLnJlamVjdCA9IGN0eCgkcmVqZWN0LCBwcm9taXNlLCAxKTtcbiAgfTtcbiAgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKEMpIHtcbiAgICByZXR1cm4gQyA9PT0gJFByb21pc2UgfHwgQyA9PT0gV3JhcHBlclxuICAgICAgPyBuZXcgT3duUHJvbWlzZUNhcGFiaWxpdHkoQylcbiAgICAgIDogbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICB9O1xufVxuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7IFByb21pc2U6ICRQcm9taXNlIH0pO1xucmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKSgkUHJvbWlzZSwgUFJPTUlTRSk7XG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKFBST01JU0UpO1xuV3JhcHBlciA9IHJlcXVpcmUoJy4vX2NvcmUnKVtQUk9NSVNFXTtcblxuLy8gc3RhdGljc1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNSBQcm9taXNlLnJlamVjdChyKVxuICByZWplY3Q6IGZ1bmN0aW9uIHJlamVjdChyKSB7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSh0aGlzKTtcbiAgICB2YXIgJCRyZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICAkJHJlamVjdChyKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKExJQlJBUlkgfHwgIVVTRV9OQVRJVkUpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC42IFByb21pc2UucmVzb2x2ZSh4KVxuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHgpIHtcbiAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoTElCUkFSWSAmJiB0aGlzID09PSBXcmFwcGVyID8gJFByb21pc2UgOiB0aGlzLCB4KTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoVVNFX05BVElWRSAmJiByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpKGZ1bmN0aW9uIChpdGVyKSB7XG4gICRQcm9taXNlLmFsbChpdGVyKVsnY2F0Y2gnXShlbXB0eSk7XG59KSksIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjEgUHJvbWlzZS5hbGwoaXRlcmFibGUpXG4gIGFsbDogZnVuY3Rpb24gYWxsKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICB2YXIgcmVtYWluaW5nID0gMTtcbiAgICAgIGZvck9mKGl0ZXJhYmxlLCBmYWxzZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyICRpbmRleCA9IGluZGV4Kys7XG4gICAgICAgIHZhciBhbHJlYWR5Q2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHZhbHVlcy5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICAgIHJlbWFpbmluZysrO1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHZhbHVlc1skaW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lKSByZWplY3QocmVzdWx0LnYpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH0sXG4gIC8vIDI1LjQuNC40IFByb21pc2UucmFjZShpdGVyYWJsZSlcbiAgcmFjZTogZnVuY3Rpb24gcmFjZShpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGNhcGFiaWxpdHkucmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZSkgcmVqZWN0KHJlc3VsdC52KTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsIi8qXG4gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGVcbiAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uXG4gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlXG4gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlXG4gKiBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxuICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlXG4gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zXG4gKiB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgKi9cblxuJ3VzZSBzdHJpY3QnXG5cbnZhciBpc0luaXRpYWxpemVkID0gZmFsc2VcblxuLy8gbWFqb3IgZXZlbnRzIHN1cHBvcnRlZDpcbi8vICAgcGFuc3RhcnRcbi8vICAgcGFubW92ZVxuLy8gICBwYW5lbmRcbi8vICAgc3dpcGVcbi8vICAgbG9uZ3ByZXNzXG4vLyBleHRyYSBldmVudHMgc3VwcG9ydGVkOlxuLy8gICBkdWFsdG91Y2hzdGFydFxuLy8gICBkdWFsdG91Y2hcbi8vICAgZHVhbHRvdWNoZW5kXG4vLyAgIHRhcFxuLy8gICBkb3VibGV0YXBcbi8vICAgcHJlc3NlbmRcblxudmFyIGRvYyA9IHdpbmRvdy5kb2N1bWVudFxudmFyIGRvY0VsID0gZG9jLmRvY3VtZW50RWxlbWVudFxudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlXG52YXIgZ2VzdHVyZXMgPSB7fVxudmFyIGxhc3RUYXAgPSBudWxsXG5cbi8qKlxuICogZmluZCB0aGUgY2xvc2VzdCBjb21tb24gYW5jZXN0b3JcbiAqIGlmIHRoZXJlJ3Mgbm8gb25lLCByZXR1cm4gbnVsbFxuICpcbiAqIEBwYXJhbSAge0VsZW1lbnR9IGVsMSBmaXJzdCBlbGVtZW50XG4gKiBAcGFyYW0gIHtFbGVtZW50fSBlbDIgc2Vjb25kIGVsZW1lbnRcbiAqIEByZXR1cm4ge0VsZW1lbnR9ICAgICBjb21tb24gYW5jZXN0b3JcbiAqL1xuZnVuY3Rpb24gZ2V0Q29tbW9uQW5jZXN0b3IoZWwxLCBlbDIpIHtcbiAgdmFyIGVsID0gZWwxXG4gIHdoaWxlIChlbCkge1xuICAgIGlmIChlbC5jb250YWlucyhlbDIpIHx8IGVsID09IGVsMikge1xuICAgICAgcmV0dXJuIGVsXG4gICAgfVxuICAgIGVsID0gZWwucGFyZW50Tm9kZVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbi8qKlxuICogZmlyZSBhIEhUTUxFdmVudFxuICpcbiAqIEBwYXJhbSAge0VsZW1lbnR9IGVsZW1lbnQgd2hpY2ggZWxlbWVudCB0byBmaXJlIGEgZXZlbnQgb25cbiAqIEBwYXJhbSAge3N0cmluZ30gIHR5cGUgICAgdHlwZSBvZiBldmVudFxuICogQHBhcmFtICB7b2JqZWN0fSAgZXh0cmEgICBleHRyYSBkYXRhIGZvciB0aGUgZXZlbnQgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGZpcmVFdmVudChlbGVtZW50LCB0eXBlLCBleHRyYSkge1xuICB2YXIgZXZlbnQgPSBkb2MuY3JlYXRlRXZlbnQoJ0hUTUxFdmVudHMnKVxuICBldmVudC5pbml0RXZlbnQodHlwZSwgdHJ1ZSwgdHJ1ZSlcblxuICBpZiAodHlwZW9mIGV4dHJhID09PSAnb2JqZWN0Jykge1xuICAgIGZvciAodmFyIHAgaW4gZXh0cmEpIHtcbiAgICAgIGV2ZW50W3BdID0gZXh0cmFbcF1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQSBmbGFnIHRvIGRpc3Rpbmd1aXNoIHdpdGggb3RoZXIgZXZlbnRzIHdpdGggdGhlIHNhbWUgbmFtZSBnZW5lcmF0ZWRcbiAgICogYnkgYW5vdGhlciBsaWJyYXJ5IGluIHRoZSBzYW1lIHBhZ2UuXG4gICAqLyBcbiAgZXZlbnQuX2ZvciA9ICd3ZWV4J1xuXG4gIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChldmVudClcbn1cblxuLyoqXG4gKiBjYWxjIHRoZSB0cmFuc2Zvcm1cbiAqIGFzc3VtZSA0IHBvaW50cyBBQkNEIG9uIHRoZSBjb29yZGluYXRlIHN5c3RlbVxuICogPiByb3RhdGXvvJphbmdsZSByb3RhdGluZyBmcm9tIEFCIHRvIENEXG4gKiA+IHNjYWxl77yac2NhbGUgcmF0aW8gZnJvbSBBQiB0byBDRFxuICogPiB0cmFuc2xhdGXvvJp0cmFuc2xhdGUgc2hpZnQgZnJvbSBBIHRvIENcbiAqXG4gKiBAcGFyYW0gIHtudW1iZXJ9IHgxIGFic2Npc3NhIG9mIEFcbiAqIEBwYXJhbSAge251bWJlcn0geTEgb3JkaW5hdGUgb2YgQVxuICogQHBhcmFtICB7bnVtYmVyfSB4MiBhYnNjaXNzYSBvZiBCXG4gKiBAcGFyYW0gIHtudW1iZXJ9IHkyIG9yZGluYXRlIG9mIEJcbiAqIEBwYXJhbSAge251bWJlcn0geDMgYWJzY2lzc2Egb2YgQ1xuICogQHBhcmFtICB7bnVtYmVyfSB5MyBvcmRpbmF0ZSBvZiBDXG4gKiBAcGFyYW0gIHtudW1iZXJ9IHg0IGFic2Npc3NhIG9mIERcbiAqIEBwYXJhbSAge251bWJlcn0geTQgb3JkaW5hdGUgb2YgRFxuICogQHJldHVybiB7b2JqZWN0fSAgICB0cmFuc2Zvcm0gb2JqZWN0IGxpa2VcbiAqICAge3JvdGF0ZSwgc2NhbGUsIHRyYW5zbGF0ZVsyXSwgbWF0cml4WzNdWzNdfVxuICovXG5mdW5jdGlvbiBjYWxjKHgxLCB5MSwgeDIsIHkyLCB4MywgeTMsIHg0LCB5NCkge1xuICB2YXIgcm90YXRlID0gTWF0aC5hdGFuMih5NCAtIHkzLCB4NCAtIHgzKSAtIE1hdGguYXRhbjIoeTIgLSB5MSwgeDIgLSB4MSlcbiAgdmFyIHNjYWxlID0gTWF0aC5zcXJ0KChNYXRoLnBvdyh5NCAtIHkzLCAyKVxuICAgICsgTWF0aC5wb3coeDQgLSB4MywgMikpIC8gKE1hdGgucG93KHkyIC0geTEsIDIpXG4gICAgKyBNYXRoLnBvdyh4MiAtIHgxLCAyKSkpXG4gIHZhciB0cmFuc2xhdGUgPSBbXG4gICAgeDNcbiAgICAtIHNjYWxlICogeDEgKiBNYXRoLmNvcyhyb3RhdGUpXG4gICAgKyBzY2FsZSAqIHkxICogTWF0aC5zaW4ocm90YXRlKSxcbiAgICB5M1xuICAgIC0gc2NhbGUgKiB5MSAqIE1hdGguY29zKHJvdGF0ZSlcbiAgICAtIHNjYWxlICogeDEgKiBNYXRoLnNpbihyb3RhdGUpXVxuXG4gIHJldHVybiB7XG4gICAgcm90YXRlOiByb3RhdGUsXG4gICAgc2NhbGU6IHNjYWxlLFxuICAgIHRyYW5zbGF0ZTogdHJhbnNsYXRlLFxuICAgIG1hdHJpeDogW1xuICAgICAgW3NjYWxlICogTWF0aC5jb3Mocm90YXRlKSwgLXNjYWxlICogTWF0aC5zaW4ocm90YXRlKSwgdHJhbnNsYXRlWzBdXSxcbiAgICAgIFtzY2FsZSAqIE1hdGguc2luKHJvdGF0ZSksIHNjYWxlICogTWF0aC5jb3Mocm90YXRlKSwgdHJhbnNsYXRlWzFdXSxcbiAgICAgIFswLCAwLCAxXVxuICAgIF1cbiAgfVxufVxuXG4vKipcbiAqIHRha2Ugb3ZlciB0aGUgdG91Y2hzdGFydCBldmVudHMuIEFkZCBuZXcgdG91Y2hlcyB0byB0aGUgZ2VzdHVyZXMuXG4gKiBJZiB0aGVyZSBpcyBubyBwcmV2aW91cyByZWNvcmRzLCB0aGVuIGJpbmQgdG91Y2htb3ZlLCB0b2NoZW5kXG4gKiBhbmQgdG91Y2hjYW5jZWwgZXZlbnRzLlxuICogbmV3IHRvdWNoZXMgaW5pdGlhbGl6ZWQgd2l0aCBzdGF0ZSAndGFwcGluZycsIGFuZCB3aXRoaW4gNTAwIG1pbGxpc2Vjb25kc1xuICogaWYgdGhlIHN0YXRlIGlzIHN0aWxsIHRhcHBpbmcsIHRoZW4gdHJpZ2dlciBnZXN0dXJlICdwcmVzcycuXG4gKiBJZiB0aGVyZSBhcmUgdHdvIHRvdWNoZSBwb2ludHMsIHRoZW4gdGhlICdkdWFsdG91Y2hzdGFydCcgaXMgdHJpZ2dlcmQuIFRoZVxuICogbm9kZSBvZiB0aGUgdG91Y2ggZ2VzdHVyZSBpcyB0aGVpciBjbG9lc3QgY29tbW9uIGFuY2VzdG9yLlxuICpcbiAqIEBldmVudFxuICogQHBhcmFtICB7ZXZlbnR9IGV2ZW50XG4gKi9cbmZ1bmN0aW9uIHRvdWNoc3RhcnRIYW5kbGVyKGV2ZW50KSB7XG5cbiAgaWYgKE9iamVjdC5rZXlzKGdlc3R1cmVzKS5sZW5ndGggPT09IDApIHtcbiAgICBkb2NFbC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0b3VjaG1vdmVIYW5kbGVyLCB0cnVlKVxuICAgIGRvY0VsLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdG91Y2hlbmRIYW5kbGVyLCB0cnVlKVxuICAgIGRvY0VsLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoY2FuY2VsJywgdG91Y2hjYW5jZWxIYW5kbGVyLCB0cnVlKVxuICB9XG5cbiAgLy8gcmVjb3JkIGV2ZXJ5IHRvdWNoXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnQuY2hhbmdlZFRvdWNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdG91Y2ggPSBldmVudC5jaGFuZ2VkVG91Y2hlc1tpXVxuICAgIHZhciB0b3VjaFJlY29yZCA9IHt9XG5cbiAgICBmb3IgKHZhciBwIGluIHRvdWNoKSB7XG4gICAgICB0b3VjaFJlY29yZFtwXSA9IHRvdWNoW3BdXG4gICAgfVxuXG4gICAgdmFyIGdlc3R1cmUgPSB7XG4gICAgICBzdGFydFRvdWNoOiB0b3VjaFJlY29yZCxcbiAgICAgIHN0YXJ0VGltZTogRGF0ZS5ub3coKSxcbiAgICAgIHN0YXR1czogJ3RhcHBpbmcnLFxuICAgICAgZWxlbWVudDogZXZlbnQuc3JjRWxlbWVudCB8fCBldmVudC50YXJnZXQsXG4gICAgICBwcmVzc2luZ0hhbmRsZXI6IHNldFRpbWVvdXQoZnVuY3Rpb24gKGVsZW1lbnQsIHRvdWNoKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKGdlc3R1cmUuc3RhdHVzID09PSAndGFwcGluZycpIHtcbiAgICAgICAgICAgIGdlc3R1cmUuc3RhdHVzID0gJ3ByZXNzaW5nJ1xuXG4gICAgICAgICAgICBmaXJlRXZlbnQoZWxlbWVudCwgJ2xvbmdwcmVzcycsIHtcbiAgICAgICAgICAgICAgLy8gYWRkIHRvdWNoIGRhdGEgZm9yIHdlZXhcbiAgICAgICAgICAgICAgdG91Y2g6IHRvdWNoLFxuICAgICAgICAgICAgICB0b3VjaGVzOiBldmVudC50b3VjaGVzLFxuICAgICAgICAgICAgICBjaGFuZ2VkVG91Y2hlczogZXZlbnQuY2hhbmdlZFRvdWNoZXMsXG4gICAgICAgICAgICAgIHRvdWNoRXZlbnQ6IGV2ZW50XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNsZWFyVGltZW91dChnZXN0dXJlLnByZXNzaW5nSGFuZGxlcilcbiAgICAgICAgICBnZXN0dXJlLnByZXNzaW5nSGFuZGxlciA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfShldmVudC5zcmNFbGVtZW50IHx8IGV2ZW50LnRhcmdldCwgZXZlbnQuY2hhbmdlZFRvdWNoZXNbaV0pLCA1MDApXG4gICAgfVxuICAgIGdlc3R1cmVzW3RvdWNoLmlkZW50aWZpZXJdID0gZ2VzdHVyZVxuICB9XG5cbiAgaWYgKE9iamVjdC5rZXlzKGdlc3R1cmVzKS5sZW5ndGggPT0gMikge1xuICAgIHZhciBlbGVtZW50cyA9IFtdXG5cbiAgICBmb3IgKHZhciBwIGluIGdlc3R1cmVzKSB7XG4gICAgICBlbGVtZW50cy5wdXNoKGdlc3R1cmVzW3BdLmVsZW1lbnQpXG4gICAgfVxuXG4gICAgZmlyZUV2ZW50KGdldENvbW1vbkFuY2VzdG9yKGVsZW1lbnRzWzBdLCBlbGVtZW50c1sxXSksICdkdWFsdG91Y2hzdGFydCcsIHtcbiAgICAgIHRvdWNoZXM6IHNsaWNlLmNhbGwoZXZlbnQudG91Y2hlcyksXG4gICAgICB0b3VjaEV2ZW50OiBldmVudFxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiB0YWtlIG92ZXIgdG91Y2htb3ZlIGV2ZW50cywgYW5kIGhhbmRsZSBwYW4gYW5kIGR1YWwgcmVsYXRlZCBnZXN0dXJlcy5cbiAqXG4gKiAxLiB0cmF2ZXJzZSBldmVyeSB0b3VjaCBwb2ludO+8mlxuICogPiBpZiAndGFwcGluZycgYW5kIHRoZSBzaGlmdCBpcyBvdmVyIDEwIHBpeGxlcywgdGhlbiBpdCdzIGEgJ3Bhbm5pbmcnLlxuICogMi4gaWYgdGhlcmUgYXJlIHR3byB0b3VjaCBwb2ludHMsIHRoZW4gY2FsYyB0aGUgdHJhbmZvcm0gYW5kIHRyaWdnZXJcbiAqICAgJ2R1YWx0b3VjaCcuXG4gKlxuICogQGV2ZW50XG4gKiBAcGFyYW0gIHtldmVudH0gZXZlbnRcbiAqL1xuZnVuY3Rpb24gdG91Y2htb3ZlSGFuZGxlcihldmVudCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50LmNoYW5nZWRUb3VjaGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHRvdWNoID0gZXZlbnQuY2hhbmdlZFRvdWNoZXNbaV1cbiAgICB2YXIgZ2VzdHVyZSA9IGdlc3R1cmVzW3RvdWNoLmlkZW50aWZpZXJdXG5cbiAgICBpZiAoIWdlc3R1cmUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghZ2VzdHVyZS5sYXN0VG91Y2gpIHtcbiAgICAgIGdlc3R1cmUubGFzdFRvdWNoID0gZ2VzdHVyZS5zdGFydFRvdWNoXG4gICAgfVxuICAgIGlmICghZ2VzdHVyZS5sYXN0VGltZSkge1xuICAgICAgZ2VzdHVyZS5sYXN0VGltZSA9IGdlc3R1cmUuc3RhcnRUaW1lXG4gICAgfVxuICAgIGlmICghZ2VzdHVyZS52ZWxvY2l0eVgpIHtcbiAgICAgIGdlc3R1cmUudmVsb2NpdHlYID0gMFxuICAgIH1cbiAgICBpZiAoIWdlc3R1cmUudmVsb2NpdHlZKSB7XG4gICAgICBnZXN0dXJlLnZlbG9jaXR5WSA9IDBcbiAgICB9XG4gICAgaWYgKCFnZXN0dXJlLmR1cmF0aW9uKSB7XG4gICAgICBnZXN0dXJlLmR1cmF0aW9uID0gMFxuICAgIH1cblxuICAgIHZhciB0aW1lID0gIERhdGUubm93KCkgLSBnZXN0dXJlLmxhc3RUaW1lXG4gICAgdmFyIHZ4ID0gKHRvdWNoLmNsaWVudFggLSBnZXN0dXJlLmxhc3RUb3VjaC5jbGllbnRYKSAvIHRpbWVcbiAgICB2YXIgdnkgPSAodG91Y2guY2xpZW50WSAtIGdlc3R1cmUubGFzdFRvdWNoLmNsaWVudFkpIC8gdGltZVxuXG4gICAgdmFyIFJFQ09SRF9EVVJBVElPTiA9IDcwXG4gICAgaWYgKHRpbWUgPiBSRUNPUkRfRFVSQVRJT04pIHtcbiAgICAgIHRpbWUgPSBSRUNPUkRfRFVSQVRJT05cbiAgICB9XG4gICAgaWYgKGdlc3R1cmUuZHVyYXRpb24gKyB0aW1lID4gUkVDT1JEX0RVUkFUSU9OKSB7XG4gICAgICBnZXN0dXJlLmR1cmF0aW9uID0gUkVDT1JEX0RVUkFUSU9OIC0gdGltZVxuICAgIH1cblxuICAgIGdlc3R1cmUudmVsb2NpdHlYID0gKGdlc3R1cmUudmVsb2NpdHlYICogZ2VzdHVyZS5kdXJhdGlvbiArIHZ4ICogdGltZSlcbiAgICAgIC8gKGdlc3R1cmUuZHVyYXRpb24gKyB0aW1lKVxuICAgIGdlc3R1cmUudmVsb2NpdHlZID0gKGdlc3R1cmUudmVsb2NpdHlZICogZ2VzdHVyZS5kdXJhdGlvbiArIHZ5ICogdGltZSlcbiAgICAgIC8gKGdlc3R1cmUuZHVyYXRpb24gKyB0aW1lKVxuICAgIGdlc3R1cmUuZHVyYXRpb24gKz0gdGltZVxuXG4gICAgZ2VzdHVyZS5sYXN0VG91Y2ggPSB7fVxuXG4gICAgZm9yICh2YXIgcCBpbiB0b3VjaCkge1xuICAgICAgZ2VzdHVyZS5sYXN0VG91Y2hbcF0gPSB0b3VjaFtwXVxuICAgIH1cbiAgICBnZXN0dXJlLmxhc3RUaW1lID0gRGF0ZS5ub3coKVxuXG4gICAgdmFyIGRpc3BsYWNlbWVudFggPSB0b3VjaC5jbGllbnRYIC0gZ2VzdHVyZS5zdGFydFRvdWNoLmNsaWVudFhcbiAgICB2YXIgZGlzcGxhY2VtZW50WSA9IHRvdWNoLmNsaWVudFkgLSBnZXN0dXJlLnN0YXJ0VG91Y2guY2xpZW50WVxuICAgIHZhciBkaXN0YW5jZSA9IE1hdGguc3FydChNYXRoLnBvdyhkaXNwbGFjZW1lbnRYLCAyKVxuICAgICAgKyBNYXRoLnBvdyhkaXNwbGFjZW1lbnRZLCAyKSlcbiAgICB2YXIgaXNWZXJ0aWNhbCA9ICEoTWF0aC5hYnMoZGlzcGxhY2VtZW50WCkgPiBNYXRoLmFicyhkaXNwbGFjZW1lbnRZKSlcbiAgICB2YXIgZGlyZWN0aW9uID0gaXNWZXJ0aWNhbFxuICAgICAgPyBkaXNwbGFjZW1lbnRZID49IDAgPyAnZG93bicgOiAndXAnXG4gICAgICA6IGRpc3BsYWNlbWVudFggPj0gMCA/ICdyaWdodCcgOiAnbGVmdCdcblxuICAgIC8vIG1hZ2ljIG51bWJlciAxMDogbW92aW5nIDEwcHggbWVhbnMgcGFuLCBub3QgdGFwXG4gICAgaWYgKChnZXN0dXJlLnN0YXR1cyA9PT0gJ3RhcHBpbmcnIHx8IGdlc3R1cmUuc3RhdHVzID09PSAncHJlc3NpbmcnKVxuICAgICAgICAmJiBkaXN0YW5jZSA+IDEwKSB7XG4gICAgICBnZXN0dXJlLnN0YXR1cyA9ICdwYW5uaW5nJ1xuICAgICAgZ2VzdHVyZS5pc1ZlcnRpY2FsID0gaXNWZXJ0aWNhbFxuICAgICAgZ2VzdHVyZS5kaXJlY3Rpb24gPSBkaXJlY3Rpb25cblxuICAgICAgZmlyZUV2ZW50KGdlc3R1cmUuZWxlbWVudCwgJ3BhbnN0YXJ0Jywge1xuICAgICAgICB0b3VjaDogdG91Y2gsXG4gICAgICAgIHRvdWNoZXM6IGV2ZW50LnRvdWNoZXMsXG4gICAgICAgIGNoYW5nZWRUb3VjaGVzOiBldmVudC5jaGFuZ2VkVG91Y2hlcyxcbiAgICAgICAgdG91Y2hFdmVudDogZXZlbnQsXG4gICAgICAgIGlzVmVydGljYWw6IGdlc3R1cmUuaXNWZXJ0aWNhbCxcbiAgICAgICAgZGlyZWN0aW9uOiBkaXJlY3Rpb25cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKGdlc3R1cmUuc3RhdHVzID09PSAncGFubmluZycpIHtcbiAgICAgIGdlc3R1cmUucGFuVGltZSA9IERhdGUubm93KClcblxuICAgICAgZmlyZUV2ZW50KGdlc3R1cmUuZWxlbWVudCwgJ3Bhbm1vdmUnLCB7XG4gICAgICAgIGRpc3BsYWNlbWVudFg6IGRpc3BsYWNlbWVudFgsXG4gICAgICAgIGRpc3BsYWNlbWVudFk6IGRpc3BsYWNlbWVudFksXG4gICAgICAgIHRvdWNoOiB0b3VjaCxcbiAgICAgICAgdG91Y2hlczogZXZlbnQudG91Y2hlcyxcbiAgICAgICAgY2hhbmdlZFRvdWNoZXM6IGV2ZW50LmNoYW5nZWRUb3VjaGVzLFxuICAgICAgICB0b3VjaEV2ZW50OiBldmVudCxcbiAgICAgICAgaXNWZXJ0aWNhbDogZ2VzdHVyZS5pc1ZlcnRpY2FsLFxuICAgICAgICBkaXJlY3Rpb246IGRpcmVjdGlvblxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBpZiAoT2JqZWN0LmtleXMoZ2VzdHVyZXMpLmxlbmd0aCA9PSAyKSB7XG4gICAgdmFyIHBvc2l0aW9uID0gW11cbiAgICB2YXIgY3VycmVudCA9IFtdXG4gICAgdmFyIGVsZW1lbnRzID0gW11cbiAgICB2YXIgdHJhbnNmb3JtXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50LnRvdWNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB0b3VjaCA9IGV2ZW50LnRvdWNoZXNbaV1cbiAgICAgIHZhciBnZXN0dXJlID0gZ2VzdHVyZXNbdG91Y2guaWRlbnRpZmllcl1cbiAgICAgIHBvc2l0aW9uLnB1c2goW2dlc3R1cmUuc3RhcnRUb3VjaC5jbGllbnRYLCBnZXN0dXJlLnN0YXJ0VG91Y2guY2xpZW50WV0pXG4gICAgICBjdXJyZW50LnB1c2goW3RvdWNoLmNsaWVudFgsIHRvdWNoLmNsaWVudFldKVxuICAgIH1cblxuICAgIGZvciAodmFyIHAgaW4gZ2VzdHVyZXMpIHtcbiAgICAgIGVsZW1lbnRzLnB1c2goZ2VzdHVyZXNbcF0uZWxlbWVudClcbiAgICB9XG5cbiAgICB0cmFuc2Zvcm0gPSBjYWxjKFxuICAgICAgcG9zaXRpb25bMF1bMF0sXG4gICAgICBwb3NpdGlvblswXVsxXSxcbiAgICAgIHBvc2l0aW9uWzFdWzBdLFxuICAgICAgcG9zaXRpb25bMV1bMV0sXG4gICAgICBjdXJyZW50WzBdWzBdLFxuICAgICAgY3VycmVudFswXVsxXSxcbiAgICAgIGN1cnJlbnRbMV1bMF0sXG4gICAgICBjdXJyZW50WzFdWzFdXG4gICAgKVxuICAgIGZpcmVFdmVudChnZXRDb21tb25BbmNlc3RvcihlbGVtZW50c1swXSwgZWxlbWVudHNbMV0pLCAnZHVhbHRvdWNoJywge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2Zvcm0sXG4gICAgICB0b3VjaGVzOiBldmVudC50b3VjaGVzLFxuICAgICAgdG91Y2hFdmVudDogZXZlbnRcbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogaGFuZGxlIHRvdWNoZW5kIGV2ZW50XG4gKlxuICogMS4gaWYgdGhlcmUgYXJlIHRvdyB0b3VjaCBwb2ludHMsIHRoZW4gdHJpZ2dlciAnZHVhbHRvdWNoZW5kJ+WmglxuICpcbiAqIDIuIHRyYXZlcnNlIGV2ZXJ5IHRvdWNoIHBpb25077yaXG4gKiA+IGlmIHRhcHBpbmcsIHRoZW4gdHJpZ2dlciAndGFwJy5cbiAqIElmIHRoZXJlIGlzIGEgdGFwIDMwMCBtaWxsaXNlY29uZHMgYmVmb3JlLCB0aGVuIGl0J3MgYSAnZG91YmxldGFwJy5cbiAqID4gaWYgcGFkZGluZywgdGhlbiBkZWNpZGUgdG8gdHJpZ2dlciAncGFuZW5kJyBvciAnc3dpcGUnXG4gKiA+IGlmIHByZXNzaW5nLCB0aGVuIHRyaWdnZXIgJ3ByZXNzZW5kJy5cbiAqXG4gKiAzLiByZW1vdmUgbGlzdGVuZXJzLlxuICpcbiAqIEBldmVudFxuICogQHBhcmFtICB7ZXZlbnR9IGV2ZW50XG4gKi9cbmZ1bmN0aW9uIHRvdWNoZW5kSGFuZGxlcihldmVudCkge1xuXG4gIGlmIChPYmplY3Qua2V5cyhnZXN0dXJlcykubGVuZ3RoID09IDIpIHtcbiAgICB2YXIgZWxlbWVudHMgPSBbXVxuICAgIGZvciAodmFyIHAgaW4gZ2VzdHVyZXMpIHtcbiAgICAgIGVsZW1lbnRzLnB1c2goZ2VzdHVyZXNbcF0uZWxlbWVudClcbiAgICB9XG4gICAgZmlyZUV2ZW50KGdldENvbW1vbkFuY2VzdG9yKGVsZW1lbnRzWzBdLCBlbGVtZW50c1sxXSksICdkdWFsdG91Y2hlbmQnLCB7XG4gICAgICB0b3VjaGVzOiBzbGljZS5jYWxsKGV2ZW50LnRvdWNoZXMpLFxuICAgICAgdG91Y2hFdmVudDogZXZlbnRcbiAgICB9KVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudC5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB0b3VjaCA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzW2ldXG4gICAgdmFyIGlkID0gdG91Y2guaWRlbnRpZmllclxuICAgIHZhciBnZXN0dXJlID0gZ2VzdHVyZXNbaWRdXG5cbiAgICBpZiAoIWdlc3R1cmUpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgaWYgKGdlc3R1cmUucHJlc3NpbmdIYW5kbGVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQoZ2VzdHVyZS5wcmVzc2luZ0hhbmRsZXIpXG4gICAgICBnZXN0dXJlLnByZXNzaW5nSGFuZGxlciA9IG51bGxcbiAgICB9XG5cbiAgICBpZiAoZ2VzdHVyZS5zdGF0dXMgPT09ICd0YXBwaW5nJykge1xuICAgICAgZ2VzdHVyZS50aW1lc3RhbXAgPSBEYXRlLm5vdygpXG4gICAgICAvLyBmaXJlIGNsaWNrLCBub3QgdGFwLlxuICAgICAgZmlyZUV2ZW50KGdlc3R1cmUuZWxlbWVudCwgJ3dlZXgkdGFwJywge1xuICAgICAgICB0b3VjaDogdG91Y2gsXG4gICAgICAgIHRvdWNoRXZlbnQ6IGV2ZW50XG4gICAgICB9KVxuXG4gICAgICBpZiAobGFzdFRhcCAmJiBnZXN0dXJlLnRpbWVzdGFtcCAtIGxhc3RUYXAudGltZXN0YW1wIDwgMzAwKSB7XG4gICAgICAgIGZpcmVFdmVudChnZXN0dXJlLmVsZW1lbnQsICdkb3VibGV0YXAnLCB7XG4gICAgICAgICAgdG91Y2g6IHRvdWNoLFxuICAgICAgICAgIHRvdWNoRXZlbnQ6IGV2ZW50XG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGxhc3RUYXAgPSBnZXN0dXJlXG4gICAgfVxuXG4gICAgaWYgKGdlc3R1cmUuc3RhdHVzID09PSAncGFubmluZycpIHtcbiAgICAgIHZhciBub3cgPSBEYXRlLm5vdygpXG4gICAgICB2YXIgZHVyYXRpb24gPSBub3cgLSBnZXN0dXJlLnN0YXJ0VGltZVxuICAgICAgdmFyIGRpc3BsYWNlbWVudFggPSB0b3VjaC5jbGllbnRYIC0gZ2VzdHVyZS5zdGFydFRvdWNoLmNsaWVudFhcbiAgICAgIHZhciBkaXNwbGFjZW1lbnRZID0gdG91Y2guY2xpZW50WSAtIGdlc3R1cmUuc3RhcnRUb3VjaC5jbGllbnRZXG5cbiAgICAgIHZhciB2ZWxvY2l0eSA9IE1hdGguc3FydChnZXN0dXJlLnZlbG9jaXR5WSAqIGdlc3R1cmUudmVsb2NpdHlZXG4gICAgICAgICsgZ2VzdHVyZS52ZWxvY2l0eVggKiBnZXN0dXJlLnZlbG9jaXR5WClcbiAgICAgIHZhciBpc1N3aXBlID0gdmVsb2NpdHkgPiAwLjUgJiYgKG5vdyAtIGdlc3R1cmUubGFzdFRpbWUpIDwgMTAwXG4gICAgICB2YXIgZXh0cmEgPSB7XG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbixcbiAgICAgICAgaXNTd2lwZTogaXNTd2lwZSxcbiAgICAgICAgdmVsb2NpdHlYOiBnZXN0dXJlLnZlbG9jaXR5WCxcbiAgICAgICAgdmVsb2NpdHlZOiBnZXN0dXJlLnZlbG9jaXR5WSxcbiAgICAgICAgZGlzcGxhY2VtZW50WDogZGlzcGxhY2VtZW50WCxcbiAgICAgICAgZGlzcGxhY2VtZW50WTogZGlzcGxhY2VtZW50WSxcbiAgICAgICAgdG91Y2g6IHRvdWNoLFxuICAgICAgICB0b3VjaGVzOiBldmVudC50b3VjaGVzLFxuICAgICAgICBjaGFuZ2VkVG91Y2hlczogZXZlbnQuY2hhbmdlZFRvdWNoZXMsXG4gICAgICAgIHRvdWNoRXZlbnQ6IGV2ZW50LFxuICAgICAgICBpc1ZlcnRpY2FsOiBnZXN0dXJlLmlzVmVydGljYWwsXG4gICAgICAgIGRpcmVjdGlvbjogZ2VzdHVyZS5kaXJlY3Rpb25cbiAgICAgIH1cblxuICAgICAgZmlyZUV2ZW50KGdlc3R1cmUuZWxlbWVudCwgJ3BhbmVuZCcsIGV4dHJhKVxuICAgICAgaWYgKGlzU3dpcGUpIHtcbiAgICAgICAgZmlyZUV2ZW50KGdlc3R1cmUuZWxlbWVudCwgJ3N3aXBlJywgZXh0cmEpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGdlc3R1cmUuc3RhdHVzID09PSAncHJlc3NpbmcnKSB7XG4gICAgICBmaXJlRXZlbnQoZ2VzdHVyZS5lbGVtZW50LCAncHJlc3NlbmQnLCB7XG4gICAgICAgIHRvdWNoOiB0b3VjaCxcbiAgICAgICAgdG91Y2hFdmVudDogZXZlbnRcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgZGVsZXRlIGdlc3R1cmVzW2lkXVxuICB9XG5cbiAgaWYgKE9iamVjdC5rZXlzKGdlc3R1cmVzKS5sZW5ndGggPT09IDApIHtcbiAgICBkb2NFbC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0b3VjaG1vdmVIYW5kbGVyLCBmYWxzZSlcbiAgICBkb2NFbC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHRvdWNoZW5kSGFuZGxlciwgZmFsc2UpXG4gICAgZG9jRWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hjYW5jZWwnLCB0b3VjaGNhbmNlbEhhbmRsZXIsIGZhbHNlKVxuICB9XG59XG5cbi8qKlxuICogaGFuZGxlIHRvdWNoY2FuY2VsXG4gKlxuICogMS4gaWYgdGhlcmUgYXJlIHR3byB0b3VjaCBwb2ludHMsIHRoZW4gdHJpZ2dlciAnZHVhbHRvdWNoZW5kJ1xuICpcbiAqIDIuIHRyYXZlcnNlIGV2ZXJ0eSB0b3VjaCBwb2ludDpcbiAqID4gaWYgcGFubm5pZywgdGhlbiB0cmlnZ2VyICdwYW5lbmQnXG4gKiA+IGlmIHByZXNzaW5nLCB0aGVuIHRyaWdnZXIgJ3ByZXNzZW5kJ1xuICpcbiAqIDMuIHJlbW92ZSBsaXN0ZW5lcnNcbiAqXG4gKiBAZXZlbnRcbiAqIEBwYXJhbSAge2V2ZW50fSBldmVudFxuICovXG5mdW5jdGlvbiB0b3VjaGNhbmNlbEhhbmRsZXIoZXZlbnQpIHtcblxuICBpZiAoT2JqZWN0LmtleXMoZ2VzdHVyZXMpLmxlbmd0aCA9PSAyKSB7XG4gICAgdmFyIGVsZW1lbnRzID0gW11cbiAgICBmb3IgKHZhciBwIGluIGdlc3R1cmVzKSB7XG4gICAgICBlbGVtZW50cy5wdXNoKGdlc3R1cmVzW3BdLmVsZW1lbnQpXG4gICAgfVxuICAgIGZpcmVFdmVudChnZXRDb21tb25BbmNlc3RvcihlbGVtZW50c1swXSwgZWxlbWVudHNbMV0pLCAnZHVhbHRvdWNoZW5kJywge1xuICAgICAgdG91Y2hlczogc2xpY2UuY2FsbChldmVudC50b3VjaGVzKSxcbiAgICAgIHRvdWNoRXZlbnQ6IGV2ZW50XG4gICAgfSlcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnQuY2hhbmdlZFRvdWNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdG91Y2ggPSBldmVudC5jaGFuZ2VkVG91Y2hlc1tpXVxuICAgIHZhciBpZCA9IHRvdWNoLmlkZW50aWZpZXJcbiAgICB2YXIgZ2VzdHVyZSA9IGdlc3R1cmVzW2lkXVxuXG4gICAgaWYgKCFnZXN0dXJlKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGlmIChnZXN0dXJlLnByZXNzaW5nSGFuZGxlcikge1xuICAgICAgY2xlYXJUaW1lb3V0KGdlc3R1cmUucHJlc3NpbmdIYW5kbGVyKVxuICAgICAgZ2VzdHVyZS5wcmVzc2luZ0hhbmRsZXIgPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKGdlc3R1cmUuc3RhdHVzID09PSAncGFubmluZycpIHtcbiAgICAgIGZpcmVFdmVudChnZXN0dXJlLmVsZW1lbnQsICdwYW5lbmQnLCB7XG4gICAgICAgIHRvdWNoOiB0b3VjaCxcbiAgICAgICAgdG91Y2hlczogZXZlbnQudG91Y2hlcyxcbiAgICAgICAgY2hhbmdlZFRvdWNoZXM6IGV2ZW50LmNoYW5nZWRUb3VjaGVzLFxuICAgICAgICB0b3VjaEV2ZW50OiBldmVudFxuICAgICAgfSlcbiAgICB9XG4gICAgaWYgKGdlc3R1cmUuc3RhdHVzID09PSAncHJlc3NpbmcnKSB7XG4gICAgICBmaXJlRXZlbnQoZ2VzdHVyZS5lbGVtZW50LCAncHJlc3NlbmQnLCB7XG4gICAgICAgIHRvdWNoOiB0b3VjaCxcbiAgICAgICAgdG91Y2hFdmVudDogZXZlbnRcbiAgICAgIH0pXG4gICAgfVxuICAgIGRlbGV0ZSBnZXN0dXJlc1tpZF1cbiAgfVxuXG4gIGlmIChPYmplY3Qua2V5cyhnZXN0dXJlcykubGVuZ3RoID09PSAwKSB7XG4gICAgZG9jRWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdG91Y2htb3ZlSGFuZGxlciwgdHJ1ZSlcbiAgICBkb2NFbC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHRvdWNoZW5kSGFuZGxlciwgdHJ1ZSlcbiAgICBkb2NFbC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGNhbmNlbCcsIHRvdWNoY2FuY2VsSGFuZGxlciwgdHJ1ZSlcbiAgfVxufVxuXG5pZiAoIWlzSW5pdGlhbGl6ZWQpIHtcbiAgZG9jRWwuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRvdWNoc3RhcnRIYW5kbGVyLCB0cnVlKVxuICBpc0luaXRpYWxpemVkID0gdHJ1ZVxufVxuIiwiY29uc3QgbGliID0gd2luZG93LmxpYiB8fCAod2luZG93LmxpYiA9IHt9KVxuXG4vKipcbiAqIFZlcnNpb24gY2xhc3MuXG4gKiBAY2xhc3MgbGliLmVudn5WZXJzaW9uXG4gKiBAcGFyYW0ge1N0cmluZ30gdiAtIHZlcnNpb24gbnVtYmVyLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBWZXJzaW9uICh2KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAndmFsJywge1xuICAgIHZhbHVlOiB2LnRvU3RyaW5nKCksXG4gICAgZW51bWVyYWJsZTogdHJ1ZVxuICB9KVxuXG4gIC8qKlxuICAgKiBsYXJnZXIgdGhhblxuICAgKiBAbWV0aG9kIGd0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSB2IC0gdmVyc2lvblxuICAgKiBAcmV0dXJuIHtCb29sZWFufSByZXN1bHRcbiAgICogQGluc3RhbmNlXG4gICAqIEBtZW1iZXJvZiBWZXJzaW9uXG4gICAqL1xuICB0aGlzLmd0ID0gZnVuY3Rpb24gKHYpIHtcbiAgICByZXR1cm4gVmVyc2lvbi5jb21wYXJlKHRoaXMsIHYpID4gMFxuICB9XG5cbiAgLyoqXG4gICAqIGxhcmdlciB0aGFuIG9yIGVxdWFsIHRvLlxuICAgKiBAbWV0aG9kIGd0ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gdiAtIHZlcnNpb25cbiAgICogQHJldHVybiB7Qm9vbGVhbn0gcmVzdWx0XG4gICAqIEBpbnN0YW5jZVxuICAgKiBAbWVtYmVyb2YgVmVyc2lvblxuICAgKi9cbiAgdGhpcy5ndGUgPSBmdW5jdGlvbiAodikge1xuICAgIHJldHVybiBWZXJzaW9uLmNvbXBhcmUodGhpcywgdikgPj0gMFxuICB9XG5cbiAgLyoqXG4gICAqIGxlc3MgdGhhbi5cbiAgICogQG1ldGhvZCBsdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gdiAtIHZlcnNpb25cbiAgICogQHJldHVybiB7Qm9vbGVhbn0gcmVzdWx0XG4gICAqIEBpbnN0YW5jZVxuICAgKiBAbWVtYmVyb2YgVmVyc2lvblxuICAgKi9cbiAgdGhpcy5sdCA9IGZ1bmN0aW9uICh2KSB7XG4gICAgcmV0dXJuIFZlcnNpb24uY29tcGFyZSh0aGlzLCB2KSA8IDBcbiAgfVxuXG4gIC8qKlxuICAgKiBsZXNzIHRoYW4gb3IgZXF1YWwgdG8uXG4gICAqIEBtZXRob2QgbHRlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB2IC0gdmVyc2lvblxuICAgKiBAcmV0dXJuIHtCb29sZWFufSByZXN1bHRcbiAgICogQGluc3RhbmNlXG4gICAqIEBtZW1iZXJvZiBWZXJzaW9uXG4gICAqL1xuICB0aGlzLmx0ZSA9IGZ1bmN0aW9uICh2KSB7XG4gICAgcmV0dXJuIFZlcnNpb24uY29tcGFyZSh0aGlzLCB2KSA8PSAwXG4gIH1cblxuICAvKipcbiAgICogZXF1YWwgdG8uXG4gICAqIEBtZXRob2QgZXFcbiAgICogQHBhcmFtIHtTdHJpbmd9IHYgLSB2ZXJzaW9uXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IGVxdWFsIHRvXG4gICAqIEBpbnN0YW5jZVxuICAgKiBAbWVtYmVyb2YgVmVyc2lvblxuICAgKi9cbiAgdGhpcy5lcSA9IGZ1bmN0aW9uICh2KSB7XG4gICAgcmV0dXJuIFZlcnNpb24uY29tcGFyZSh0aGlzLCB2KSA9PT0gMFxuICB9XG59XG5cbi8qKlxuICogdmVyc2lvbiBudW1iZXIgc3RyaW5nLlxuICogQG1ldGhvZCB0b1N0cmluZ1xuICogQHJldHVybiB7U3RyaW5nfSBjdXJyZW50IHZlcnNpb24gbnVtYmVyIHN0cmluZy5cbiAqIEBpbnN0YW5jZVxuICogQG1lbWJlcm9mIFZlcnNpb25cbiAqL1xuVmVyc2lvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnZhbFxufVxuXG4vKipcbiAqIHJldHVybiBjdXJyZW50IHZlcnNpb24gbnVtYmVyLlxuICogQG1ldGhvZCB2YWx1ZU9mXG4gKiBAcmV0dXJuIHtCb29sZWFufSB2ZXJzaW9uIG51bWJlclxuICogQGluc3RhbmNlXG4gKiBAbWVtYmVyb2YgVmVyc2lvblxuICovXG5WZXJzaW9uLnByb3RvdHlwZS52YWx1ZU9mID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCB2ID0gdGhpcy52YWwuc3BsaXQoJy4nKVxuICBjb25zdCByID0gW11cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2Lmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IG4gPSBwYXJzZUludCh2W2ldLCAxMClcbiAgICBpZiAoaXNOYU4obikpIHtcbiAgICAgIG4gPSAwXG4gICAgfVxuICAgIGxldCBzID0gbi50b1N0cmluZygpXG4gICAgaWYgKHMubGVuZ3RoIDwgNSkge1xuICAgICAgcyA9IEFycmF5KDYgLSBzLmxlbmd0aCkuam9pbignMCcpICsgc1xuICAgIH1cbiAgICByLnB1c2gocylcbiAgICBpZiAoci5sZW5ndGggPT09IDEpIHtcbiAgICAgIHIucHVzaCgnLicpXG4gICAgfVxuICB9XG4gIHJldHVybiBwYXJzZUZsb2F0KHIuam9pbignJykpXG59XG5cbi8qKlxuICogY29tcGFyZSB0d28gdmVyc2lvbnMuXG4gKiBAbWV0aG9kIGNvbXBhcmVcbiAqIEBwYXJhbSB7U3RyaW5nfSB2MSAtIHZlcnNpb24xXG4gKiBAcGFyYW0ge1N0cmluZ30gdjIgLSB2ZXJzaW9uMlxuICogQHJldHVybiB7TnVtYmVyfSAwIGZvciBlcXVhbGl0ee+8jC0xIGZvciBsZXNzIHRoYW7vvIwxIGZvciBsYXJnZXIgdGhhbi5cbiAqIEBtZW1iZXJvZiBWZXJzaW9uXG4gKi9cblZlcnNpb24uY29tcGFyZSA9IGZ1bmN0aW9uICh2MSwgdjIpIHtcbiAgdjEgPSB2MS50b1N0cmluZygpLnNwbGl0KCcuJylcbiAgdjIgPSB2Mi50b1N0cmluZygpLnNwbGl0KCcuJylcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2MS5sZW5ndGggfHwgaSA8IHYyLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IG4xID0gcGFyc2VJbnQodjFbaV0sIDEwKVxuICAgIGxldCBuMiA9IHBhcnNlSW50KHYyW2ldLCAxMClcbiAgICBpZiAod2luZG93LmlzTmFOKG4xKSkge1xuICAgICAgbjEgPSAwXG4gICAgfVxuICAgIGlmICh3aW5kb3cuaXNOYU4objIpKSB7XG4gICAgICBuMiA9IDBcbiAgICB9XG4gICAgaWYgKG4xIDwgbjIpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgICBlbHNlIGlmIChuMSA+IG4yKSB7XG4gICAgICByZXR1cm4gMVxuICAgIH1cbiAgfVxuICByZXR1cm4gMFxufVxuXG4vKipcbiAqIOino+aekOWSjOaTjeS9nOeJiOacrOWPt1xuICogQG1ldGhvZCB2ZXJzaW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gdiAtIOmcgOimgeino+aekOeahOeJiOacrOWPt1xuICogQHJldHVybiB7bGliLmVudn5WZXJzaW9ufSBWZXJzb27lrp7kvotcbiAqIEBtZW1iZXJvZiBsaWJcbiAqL1xubGliLnZlcnNpb24gPSBmdW5jdGlvbiAodikge1xuICByZXR1cm4gbmV3IFZlcnNpb24odilcbn1cbiIsImNvbnN0IGxpYiA9IHdpbmRvdy5saWIgfHwgKHdpbmRvdy5saWIgPSB7fSlcbmNvbnN0IGVudiA9IGxpYi5lbnYgfHwgKGxpYi5lbnYgPSB7fSlcblxuY29uc3Qgc2VhcmNoID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywgJycpXG5lbnYucGFyYW1zID0ge31cbmlmIChzZWFyY2gpIHtcbiAgY29uc3QgcGFyYW1zID0gc2VhcmNoLnNwbGl0KCcmJylcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyBpKyspIHtcbiAgICBwYXJhbXNbaV0gPSBwYXJhbXNbaV0uc3BsaXQoJz0nKVxuICAgIHRyeSB7XG4gICAgICBlbnYucGFyYW1zW3BhcmFtc1tpXVswXV0gPSBkZWNvZGVVUklDb21wb25lbnQocGFyYW1zW2ldWzFdKVxuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgZW52LnBhcmFtc1twYXJhbXNbaV1bMF1dID0gcGFyYW1zW2ldWzFdXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgJy4vdmVyc2lvbidcbmltcG9ydCAnLi9wYXJhbXMnXG5cbmNvbnN0IGxpYiA9IHdpbmRvdy5saWIgfHwgKHdpbmRvdy5saWIgPSB7fSlcbmNvbnN0IGVudiA9IGxpYi5lbnYgfHwgKGxpYi5lbnYgPSB7fSlcblxuY29uc3QgdWEgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudFxubGV0IG1hdGNoXG5cbi8qKlxuICogb3NcbiAqL1xuXG5tYXRjaCA9IHVhLm1hdGNoKC9XaW5kb3dzXFxzUGhvbmVcXHMoPzpPU1xccyk/KFtcXGQuXSspLylcbmlmIChtYXRjaCkge1xuICAvKipcbiAgICogQHR5cGUge09iamVjdH1cbiAgICogQG1lbWJlcm9mIGxpYi5lbnZcbiAgICogQHByb3BlcnR5IHtTdHJpbmd9IG5hbWUgLSBvcyBuYW1lLCBlLmcuIEFuZHJvaWQvQW5kcm9pZFBhZC9pUGhvbmUvaVBvZC9pUGFkL1dpbmRvd3MgUGhvbmUvdW5rbm93biwgZXRjLlxuICAgKiBAcHJvcGVydHkge2xpYi5lbnZ+VmVyc2lvbn0gdmVyc2lvbiAtIG9zIHZlcnNpb24uXG4gICAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gaXNXaW5kb3dzUGhvbmVcbiAgICogQHByb3BlcnR5IHtCb29sZWFufSBpc0lQaG9uZSAtIGlzIGlQaG9uZS9pVG91Y2hcbiAgICogQHByb3BlcnR5IHtCb29sZWFufSBpc0lQYWRcbiAgICogQHByb3BlcnR5IHtCb29sZWFufSBpc0lPU1xuICAgKiBAcHJvcGVydHkge0Jvb2xlYW59IGlzQW5kcm9pZFxuICAgKiBAcHJvcGVydHkge0Jvb2xlYW59IGlzQW5kcm9pZFBhZFxuICAgKi9cbiAgZW52Lm9zID0ge1xuICAgIG5hbWU6ICdXaW5kb3dzIFBob25lJyxcbiAgICBpc1dpbmRvd3NQaG9uZTogdHJ1ZSxcbiAgICB2ZXJzaW9uOiBtYXRjaFsxXVxuICB9XG59XG5lbHNlIGlmICghIXVhLm1hdGNoKC9TYWZhcmkvKSAmJiAobWF0Y2ggPSB1YS5tYXRjaCgvQW5kcm9pZFtcXHMvXShbXFxkLl0rKS8pKSkge1xuICBlbnYub3MgPSB7XG4gICAgdmVyc2lvbjogbWF0Y2hbMV1cbiAgfVxuXG4gIGlmICgodWEubWF0Y2goL01vYmlsZVxccytTYWZhcmkvKSkpIHtcbiAgICBlbnYub3MubmFtZSA9ICdBbmRyb2lkJ1xuICAgIGVudi5vcy5pc0FuZHJvaWQgPSB0cnVlXG4gIH1cbiAgZWxzZSB7XG4gICAgZW52Lm9zLm5hbWUgPSAnQW5kcm9pZFBhZCdcbiAgICBlbnYub3MuaXNBbmRyb2lkUGFkID0gdHJ1ZVxuICB9XG59XG5lbHNlIGlmICgobWF0Y2ggPSB1YS5tYXRjaCgvKGlQaG9uZXxpUGFkfGlQb2QpLykpKSB7XG4gIGNvbnN0IG5hbWUgPSBtYXRjaFsxXVxuXG4gIG1hdGNoID0gdWEubWF0Y2goL09TIChbXFxkXy5dKykgbGlrZSBNYWMgT1MgWC8pXG5cbiAgZW52Lm9zID0ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgaXNJUGhvbmU6IChuYW1lID09PSAnaVBob25lJyB8fCBuYW1lID09PSAnaVBvZCcpLFxuICAgIGlzSVBhZDogbmFtZSA9PT0gJ2lQYWQnLFxuICAgIGlzSU9TOiB0cnVlLFxuICAgIHZlcnNpb246IG1hdGNoICYmIG1hdGNoWzFdLnNwbGl0KCdfJykuam9pbignLicpIHx8ICcnXG4gIH1cbn1cbmVsc2Uge1xuICBlbnYub3MgPSB7XG4gICAgbmFtZTogJ3Vua25vd24nLFxuICAgIHZlcnNpb246ICcwLjAuMCdcbiAgfVxufVxuXG5pZiAobGliLnZlcnNpb24pIHtcbiAgZW52Lm9zLnZlcnNpb24gPSBsaWIudmVyc2lvbihlbnYub3MudmVyc2lvbilcbn1cblxuLyoqXG4gKiBicm93c2VyXG4gKi9cblxubWF0Y2ggPSB1YS5tYXRjaCgvKD86VUNXRUJ8VUNCcm93c2VyXFwvKShbXFxkLl0rKS8pXG5cbmlmIChtYXRjaCkge1xuICAvKipcbiAgICogQHR5cGUge09iamVjdH1cbiAgICogQG1lbWJlcm9mIGVudlxuICAgKiBAcHJvcGVydHkge1N0cmluZ30gbmFtZSAtIGJyb3dzZXIgbmFtZe+8jGUuZy4gVUMvUVEvRmlyZWZveC9DaHJvbWUvQW5kcm9pZC9TYWZhcmkvaU9TIFdlYnZpZXcvQ2hyb21lIFdlYnZpZXcvSUUvSUVNb2JpbGUvdW5rbm93biwgZXRjLlxuICAgKiBAcHJvcGVydHkge2Vudn5WZXJzaW9ufSB2ZXJzaW9uIC0gYnJvd3NlciB2ZXJzaW9uLlxuICAgKiBAcHJvcGVydHkge0Jvb2xlYW59IGlzVUNcbiAgICogQHByb3BlcnR5IHtCb29sZWFufSBpc1FRXG4gICAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gaXNJRVxuICAgKiBAcHJvcGVydHkge0Jvb2xlYW59IGlzSUVNb2JpbGVcbiAgICogQHByb3BlcnR5IHtCb29sZWFufSBpc0lFTGlrZVdlYmtpdFxuICAgKiBAcHJvcGVydHkge0Jvb2xlYW59IGlzQ2hyb21lXG4gICAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gaXNBbmRyb2lkXG4gICAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gaXNTYWZhcmlcbiAgICogQHByb3BlcnR5IHtCb29sZWFufSBpc1dlYnZpZXdcbiAgICovXG4gIGVudi5icm93c2VyID0ge1xuICAgIG5hbWU6ICdVQycsXG4gICAgaXNVQzogdHJ1ZSxcbiAgICB2ZXJzaW9uOiBtYXRjaFsxXVxuICB9XG59XG5lbHNlIGlmICgobWF0Y2ggPSB1YS5tYXRjaCgvTVFRQnJvd3NlclxcLyhbXFxkLl0rKS8pKSkge1xuICBlbnYuYnJvd3NlciA9IHtcbiAgICBuYW1lOiAnUVEnLFxuICAgIGlzUVE6IHRydWUsXG4gICAgdmVyc2lvbjogbWF0Y2hbMV1cbiAgfVxufVxuZWxzZSBpZiAoKG1hdGNoID0gdWEubWF0Y2goL0ZpcmVmb3hcXC8oW1xcZC5dKykvKSkpIHtcbiAgZW52LmJyb3dzZXIgPSB7XG4gICAgbmFtZTogJ0ZpcmVmb3gnLFxuICAgIGlzRmlyZWZveDogdHJ1ZSxcbiAgICB2ZXJzaW9uOiBtYXRjaFsxXVxuICB9XG59XG5lbHNlIGlmICgobWF0Y2ggPSB1YS5tYXRjaCgvTVNJRVxccyhbXFxkLl0rKS8pKVxuICB8fCAobWF0Y2ggPSB1YS5tYXRjaCgvSUVNb2JpbGVcXC8oW1xcZC5dKykvKSkpIHtcbiAgZW52LmJyb3dzZXIgPSB7XG4gICAgdmVyc2lvbjogbWF0Y2hbMV1cbiAgfVxuXG4gIGlmICh1YS5tYXRjaCgvSUVNb2JpbGUvKSkge1xuICAgIGVudi5icm93c2VyLm5hbWUgPSAnSUVNb2JpbGUnXG4gICAgZW52LmJyb3dzZXIuaXNJRU1vYmlsZSA9IHRydWVcbiAgfVxuICBlbHNlIHtcbiAgICBlbnYuYnJvd3Nlci5uYW1lID0gJ0lFJ1xuICAgIGVudi5icm93c2VyLmlzSUUgPSB0cnVlXG4gIH1cblxuICBpZiAodWEubWF0Y2goL0FuZHJvaWR8aVBob25lLykpIHtcbiAgICBlbnYuYnJvd3Nlci5pc0lFTGlrZVdlYmtpdCA9IHRydWVcbiAgfVxufVxuZWxzZSBpZiAoKG1hdGNoID0gdWEubWF0Y2goLyg/OkNocm9tZXxDcmlPUylcXC8oW1xcZC5dKykvKSkpIHtcbiAgZW52LmJyb3dzZXIgPSB7XG4gICAgbmFtZTogJ0Nocm9tZScsXG4gICAgaXNDaHJvbWU6IHRydWUsXG4gICAgdmVyc2lvbjogbWF0Y2hbMV1cbiAgfVxuXG4gIGlmICh1YS5tYXRjaCgvVmVyc2lvblxcL1tcXGQrLl0rXFxzKkNocm9tZS8pKSB7XG4gICAgZW52LmJyb3dzZXIubmFtZSA9ICdDaHJvbWUgV2VidmlldydcbiAgICBlbnYuYnJvd3Nlci5pc1dlYnZpZXcgPSB0cnVlXG4gIH1cbn1cbmVsc2UgaWYgKCEhdWEubWF0Y2goL1NhZmFyaS8pICYmIChtYXRjaCA9IHVhLm1hdGNoKC9BbmRyb2lkW1xccy9dKFtcXGQuXSspLykpKSB7XG4gIGVudi5icm93c2VyID0ge1xuICAgIG5hbWU6ICdBbmRyb2lkJyxcbiAgICBpc0FuZHJvaWQ6IHRydWUsXG4gICAgdmVyc2lvbjogbWF0Y2hbMV1cbiAgfVxufVxuZWxzZSBpZiAodWEubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvKSkge1xuICBpZiAodWEubWF0Y2goL1NhZmFyaS8pKSB7XG4gICAgbWF0Y2ggPSB1YS5tYXRjaCgvVmVyc2lvblxcLyhbXFxkLl0rKS8pXG4gICAgZW52LmJyb3dzZXIgPSB7XG4gICAgICBuYW1lOiAnU2FmYXJpJyxcbiAgICAgIGlzU2FmYXJpOiB0cnVlLFxuICAgICAgdmVyc2lvbjogbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJydcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgbWF0Y2ggPSB1YS5tYXRjaCgvT1MgKFtcXGRfLl0rKSBsaWtlIE1hYyBPUyBYLylcbiAgICBlbnYuYnJvd3NlciA9IHtcbiAgICAgIG5hbWU6ICdpT1MgV2VidmlldycsXG4gICAgICBpc1dlYnZpZXc6IHRydWUsXG4gICAgICB2ZXJzaW9uOiBtYXRjaCAmJiBtYXRjaFsxXS5yZXBsYWNlKC9fL2csICcuJykgfHwgJydcbiAgICB9XG4gIH1cbn1cbmVsc2Uge1xuICBlbnYuYnJvd3NlciA9IHtcbiAgICBuYW1lOiAndW5rbm93bicsXG4gICAgdmVyc2lvbjogJzAuMC4wJ1xuICB9XG59XG5cbmlmIChsaWIudmVyc2lvbikge1xuICBlbnYuYnJvd3Nlci52ZXJzaW9uID0gbGliLnZlcnNpb24oZW52LmJyb3dzZXIudmVyc2lvbilcbn1cbiIsIi8qXG4gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGVcbiAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uXG4gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlXG4gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlXG4gKiBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxuICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlXG4gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zXG4gKiB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5jb25zdCB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdcblxuLyoqXG4gKiBTdHJpY3Qgb2JqZWN0IHR5cGUgY2hlY2suIE9ubHkgcmV0dXJucyB0cnVlXG4gKiBmb3IgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3RzLlxuICpcbiAqIEBwYXJhbSB7Kn0gb2JqXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5jb25zdCBPQkpFQ1RfU1RSSU5HID0gJ1tvYmplY3QgT2JqZWN0XSdcbmV4cG9ydCBmdW5jdGlvbiBpc1BsYWluT2JqZWN0IChvYmopIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gT0JKRUNUX1NUUklOR1xufVxuXG5jb25zdCBBUlJBWV9TVFJJTkcgPSAnW29iamVjdCBBcnJheV0nXG5leHBvcnQgZnVuY3Rpb24gaXNBcnJheSAoYXJyKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGFycikgPT09IEFSUkFZX1NUUklOR1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQcmltaXRpdmUgKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJ1xuICAgIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcidcbiAgICB8fCB0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnXG4gICAgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbidcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVmICh2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gdW5kZWZpbmVkICYmIHZhbCAhPT0gbnVsbFxufVxuIiwiLypcbiAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZVxuICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb25cbiAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGVcbiAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGVcbiAqIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXG4gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGVcbiAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnNcbiAqIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQge1xuICBpc0FycmF5XG59IGZyb20gJy4vdHlwZSdcbi8qKlxuICogTWl4IHByb3BlcnRpZXMgaW50byB0YXJnZXQgb2JqZWN0LlxuICogdGhlIHJpZ2h0ZXN0IG9iamVjdCdzIHZhbHVlIGhhcyB0aGUgaGlnaGVzdCBwcmlvcml0eS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZCAodG8sIC4uLmFyZ3MpIHtcbiAgaWYgKCFhcmdzIHx8IGFyZ3MubGVuZ3RoIDw9IDApIHtcbiAgICByZXR1cm4gdG9cbiAgfVxuICBhcmdzLmZvckVhY2goZnJvbSA9PiB7XG4gICAgaWYgKHR5cGVvZiBmcm9tICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IGluIGZyb20pIHtcbiAgICAgIHRvW2tleV0gPSBmcm9tW2tleV1cbiAgICB9XG4gIH0pXG4gIHJldHVybiB0b1xufVxuLyoqXG4gKiBNaXggdHJ1dGh5IG9yICcnIHByb3BlcnR5IHZhbHVlcyBpbnRvIHRhcmdldCBvYmplY3QuXG4gKiBtb3N0bHkgZm9yIG1lcmdpbmcgc3R5bGVzLiAodGhhdCdzIHdoeSAnJyBpcyBmYWxzeSBidXQgc3RpbGwgc2hvdWxkIGJlIGNvdW50ZWQgaW4uKVxuICogdGhlIHJpZ2h0ZXN0IG9iamVjdCdzIHZhbHVlIGhhcyB0aGUgaGlnaGVzdCBwcmlvcml0eS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZFRydXRoeSAodG8sIC4uLmFyZ3MpIHtcbiAgaWYgKCFhcmdzIHx8IGFyZ3MubGVuZ3RoIDw9IDApIHtcbiAgICByZXR1cm4gdG9cbiAgfVxuICBhcmdzLmZvckVhY2goZnJvbSA9PiB7XG4gICAgaWYgKHR5cGVvZiBmcm9tICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGxldCBpXG4gICAgZm9yIChjb25zdCBrZXkgaW4gZnJvbSkge1xuICAgICAgaWYgKCgoaSA9IGZyb21ba2V5XSkgfHwgaSA9PT0gJycgfHwgaSA9PT0gMCkgJiYgaSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdG9ba2V5XSA9IGlcbiAgICAgIH1cbiAgICB9XG4gIH0pXG4gIHJldHVybiB0b1xufVxuLyoqXG4gKiBNaXggc3BlY2lmaWVkIHByb3BlcnRpZXMgaW50byB0YXJnZXQgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kS2V5cyAodG8sIGZyb20gPSB7fSwga2V5cykge1xuICAoa2V5cyB8fCBbXSkuZm9yRWFjaChrZXkgPT4ge1xuICAgIGZyb20gJiYgKHRvW2tleV0gPSBmcm9tW2tleV0pXG4gIH0pXG4gIHJldHVybiB0b1xufVxuLyoqXG4gKiBFeHRyYWN0IHNwZWNpZmllZCBwcm9wZXJ0aWVzIGZyb20gc3JjIHRvIHRhcmdldCBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0S2V5cyAodG8sIGZyb20gPSB7fSwga2V5cykge1xuICBpZiAoIWZyb20pIHtcbiAgICByZXR1cm4gdG9cbiAgfVxuICAoa2V5cyB8fCBbXSkuZm9yRWFjaChrZXkgPT4ge1xuICAgIGZyb20gJiYgKHRvW2tleV0gPSBmcm9tW2tleV0pXG4gICAgZnJvbSAmJiAoZGVsZXRlIGZyb21ba2V5XSlcbiAgfSlcbiAgcmV0dXJuIHRvXG59XG4vKipcbiAqIFNpbXBsZSBiaW5kLCBmYXN0ZXIgdGhhbiBuYXRpdmVcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtPYmplY3R9IGN0eFxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiaW5kIChmbiwgY3R4KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoYSkge1xuICAgIGNvbnN0IGwgPSBhcmd1bWVudHMubGVuZ3RoXG4gICAgcmV0dXJuIGwgPyBsID4gMSA/IGZuLmFwcGx5KGN0eCwgYXJndW1lbnRzKSA6IGZuLmNhbGwoY3R4LCBhKSA6IGZuLmNhbGwoY3R4KVxuICB9XG59XG4vKipcbiAqIE9ubHkgY2FsbCB0aGUgZnVuYyB0aGUgbGFzdCB0aW1lIGJlZm9yZSBpdCdzIG5vdCB0aGF0IGZyZXF1ZW50bHkgY2FsbGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVib3VuY2UgKGZ1bmMsIHdhaXQpIHtcbiAgbGV0IHRpbWVySWRcbiAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVySWQpXG4gICAgdGltZXJJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gbGF0ZXIgKCkge1xuICAgICAgdGltZXJJZCA9IG51bGxcbiAgICAgIGZ1bmMuYXBwbHkobnVsbCwgYXJncylcbiAgICB9LCB3YWl0KVxuICB9XG59XG4vKipcbiAqIE9ubHkgY2FsbCB0aGUgZnVuYyB0aGUgZmlyc3QgdGltZSBiZWZvcmUgYSBzZXJpZXMgZnJlcXVlbnRseSBmdW5jdGlvbiBjYWxscyBoYXBwZW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXByZXNzIChmdW5jLCB3YWl0KSB7XG4gIGxldCB0aW1lcklkXG5cbiAgZnVuY3Rpb24gbGF0ZXIgKCkge1xuICAgIHRpbWVySWQgPSBudWxsXG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRpbWVySWQpIHtcbiAgICAgIGZ1bmMuYXBwbHkoKVxuICAgIH1cbiAgICBjbGVhclRpbWVvdXQodGltZXJJZClcbiAgICB0aW1lcklkID0gc2V0VGltZW91dChsYXRlciwgd2FpdClcbiAgfVxufVxuLyoqXG4gKiBPbmx5IGNhbGwgdGhlIGZ1bmMgZXZlcnkgdGltZSBhZnRlciBhIHdhaXQgbWlsbGlzZWNvbmRzIGlmIGl0J3MgdG9vIGZyZXF1ZW50bHkgY2FsbGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdGhyb3R0bGUgKGZ1bmMsIHdhaXQsIGNhbGxMYXN0VGltZSkge1xuICBsZXQgbGFzdCA9IDBcbiAgbGV0IGxhc3RUaW1lciA9IG51bGxcbiAgY29uc3QgbGFzdFRpbWVEdXJhdGlvbiA9IHdhaXQgKyAod2FpdCA+IDI1ID8gd2FpdCA6IDI1KSAvLyBwbHVzIGhhbGYgd2FpdCB0aW1lLlxuICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpc1xuICAgIGNvbnN0IHRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKVxuICAgIGlmICh0aW1lIC0gbGFzdCA+IHdhaXQpIHtcbiAgICAgIGlmIChjYWxsTGFzdFRpbWUpIHtcbiAgICAgICAgbGFzdFRpbWVyICYmIGNsZWFyVGltZW91dChsYXN0VGltZXIpXG4gICAgICAgIGxhc3RUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGxhc3RUaW1lciA9IG51bGxcbiAgICAgICAgICBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpXG4gICAgICAgIH0sIGxhc3RUaW1lRHVyYXRpb24pXG4gICAgICB9XG4gICAgICBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpXG4gICAgICBsYXN0ID0gdGltZVxuICAgIH1cbiAgfVxufVxuLy8gZGlyZWN0aW9uOiAnbCcgfCAncicsIGRlZmF1bHQgaXMgJ3InXG4vLyBudW06IGhvdyBtYW55IHRpbWVzIHRvIGxvb3AsIHNob3VsZCBiZSBhIHBvc2l0aXZlIGludGVnZXJcbmV4cG9ydCBmdW5jdGlvbiBsb29wQXJyYXkgKGFyciwgbnVtLCBkaXJlY3Rpb24pIHtcbiAgaWYgKCFpc0FycmF5KGFycikpIHtcbiAgICByZXR1cm5cbiAgfVxuICBsZXQgaXNMZWZ0ID0gKGRpcmVjdGlvbiArICcnKS50b0xvd2VyQ2FzZSgpID09PSAnbCdcbiAgY29uc3QgbGVuID0gYXJyLmxlbmd0aFxuICBudW0gPSBudW0gJSBsZW5cbiAgaWYgKG51bSA8IDApIHtcbiAgICBudW0gPSAtbnVtXG4gICAgaXNMZWZ0ID0gIWlzTGVmdFxuICB9XG4gIGlmIChudW0gPT09IDApIHtcbiAgICByZXR1cm4gYXJyXG4gIH1cbiAgbGV0IGxwLCBycFxuICBpZiAoaXNMZWZ0KSB7XG4gICAgbHAgPSBhcnIuc2xpY2UoMCwgbnVtKVxuICAgIHJwID0gYXJyLnNsaWNlKG51bSlcbiAgfVxuICBlbHNlIHtcbiAgICBscCA9IGFyci5zbGljZSgwLCBsZW4gLSBudW0pXG4gICAgcnAgPSBhcnIuc2xpY2UobGVuIC0gbnVtKVxuICB9XG4gIHJldHVybiBycC5jb25jYXQobHApXG59XG5cbi8qKlxuICogQ3JlYXRlIGEgY2FjaGVkIHZlcnNpb24gb2YgYSBwdXJlIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FjaGVkIChmbikge1xuICBjb25zdCBjYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbClcbiAgcmV0dXJuIGZ1bmN0aW9uIGNhY2hlZEZuIChzdHIpIHtcbiAgICBjb25zdCBoaXQgPSBjYWNoZVtzdHJdXG4gICAgcmV0dXJuIGhpdCB8fCAoY2FjaGVbc3RyXSA9IGZuKHN0cikpXG4gIH1cbn1cbi8qKlxuICogQ2FtZWxpemUgYSBoeXBoZW4tZGVsbWl0ZWQgc3RyaW5nLlxuICovXG5jb25zdCBjYW1lbGl6ZVJFID0gLy0oXFx3KS9nXG5leHBvcnQgY29uc3QgY2FtZWxpemUgPSBjYWNoZWQoc3RyID0+IHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKGNhbWVsaXplUkUsIChfLCBjKSA9PiBjLnRvVXBwZXJDYXNlKCkpXG59KVxuZXhwb3J0IGZ1bmN0aW9uIGNhbWVsaXplS2V5cyAob2JqKSB7XG4gIGNvbnN0IHJlcyA9IHt9XG4gIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgIHJlc1tjYW1lbGl6ZShrZXkpXSA9IG9ialtrZXldXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuLyoqXG4gKiBDYXBpdGFsaXplIGEgc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgY2FwaXRhbGl6ZSA9IGNhY2hlZChzdHIgPT4ge1xuICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpXG59KVxuLyoqXG4gKiBIeXBoZW5hdGUgYSBjYW1lbENhc2Ugc3RyaW5nLlxuICovXG5jb25zdCBoeXBoZW5hdGVSRSA9IC8oW14tXSkoW0EtWl0pL2dcbmV4cG9ydCBjb25zdCBoeXBoZW5hdGUgPSBjYWNoZWQoc3RyID0+IHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKGh5cGhlbmF0ZVJFLCAnJDEtJDInKS5yZXBsYWNlKGh5cGhlbmF0ZVJFLCAnJDEtJDInKS50b0xvd2VyQ2FzZSgpXG59KVxuZXhwb3J0IGZ1bmN0aW9uIGh5cGhlbmF0ZUtleXMgKG9iaikge1xuICBjb25zdCByZXMgPSB7fVxuICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICByZXNbaHlwaGVuYXRlKGtleSldID0gb2JqW2tleV1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5jb25zdCB2ZW5kb3JzUmVnID0gL3dlYmtpdC18bW96LXxvLXxtcy0vXG5leHBvcnQgZnVuY3Rpb24gaHlwaGVuYXRlU3R5bGVLZXlzIChvYmopIHtcbiAgY29uc3QgcmVzID0ge31cbiAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgY29uc3QgaGsgPSBoeXBoZW5hdGUoa2V5KS5yZXBsYWNlKHZlbmRvcnNSZWcsIGZ1bmN0aW9uICgkMCkge1xuICAgICAgcmV0dXJuICctJyArICQwXG4gICAgfSlcbiAgICByZXNbaGtdID0gb2JqW2tleV1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5leHBvcnQgZnVuY3Rpb24gY2FtZWxUb0tlYmFiIChuYW1lKSB7XG4gIGlmICghbmFtZSkge1xuICAgIHJldHVybiAnJ1xuICB9XG4gIHJldHVybiBuYW1lLnJlcGxhY2UoLyhbQS1aXSkvZywgZnVuY3Rpb24gKGcsIGcxKSB7XG4gICAgcmV0dXJuIGAtJHtnMS50b0xvd2VyQ2FzZSgpfWBcbiAgfSlcbn1cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRDc3MgKGNzcywgY3NzSWQsIHJlcGxhY2UpIHtcbiAgbGV0IHN0eWxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY3NzSWQpXG4gIGlmIChzdHlsZSAmJiByZXBsYWNlKSB7XG4gICAgc3R5bGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZSlcbiAgICBzdHlsZSA9IG51bGxcbiAgfVxuICBpZiAoIXN0eWxlKSB7XG4gICAgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpXG4gICAgc3R5bGUudHlwZSA9ICd0ZXh0L2NzcydcbiAgICBjc3NJZCAmJiAoc3R5bGUuaWQgPSBjc3NJZClcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdLmFwcGVuZENoaWxkKHN0eWxlKVxuICB9XG4gIHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpXG59XG5leHBvcnQgZnVuY3Rpb24gbmV4dEZyYW1lIChjYWxsYmFjaykge1xuICBjb25zdCBydW5uZXIgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lXG4gICAgfHwgd2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZVxuICAgIHx8IHdpbmRvdy5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbiAgICB8fCAoY2IgPT4gc2V0VGltZW91dChjYiwgMTYpKVxuICBydW5uZXIoY2FsbGJhY2spXG59XG5leHBvcnQgZnVuY3Rpb24gdG9DU1NUZXh0IChvYmplY3QpIHtcbiAgaWYgKCFvYmplY3QpIHtcbiAgICByZXR1cm5cbiAgfVxuICBjb25zdCBvYmogPSBoeXBoZW5hdGVTdHlsZUtleXMob2JqZWN0KVxuICBsZXQgY3NzVGV4dCA9ICcnXG4gIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgIGNzc1RleHQgKz0gYCR7a2V5fToke29ialtrZXldfTtgXG4gIH1cbiAgcmV0dXJuIGNzc1RleHRcbn1cbiIsIi8qXG4gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGVcbiAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uXG4gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlXG4gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlXG4gKiBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxuICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlXG4gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zXG4gKiB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tICcuLi91dGlscy9mdW5jJ1xuXG4vKipcbiAqIHZpZXdwb3J0IHByaW9yaXR5OlxuICpcbiAqIDEuIG1ldGEgd2VleC12aWV3cG9ydCAoZGV2ZWxvcGVyIGN1c3RvbSlcbiAqIDIuIHNldFZpZXdwb3J0KGNvbmZpZykgOj0gY29uZmlnLndpZHRoIChwcml2YXRlIGNvZGUpIEBkZXByZWNhdGVkXG4gKiAzLiBwcm9jZXNzLmVudi5WSUVXUE9SVF9XSURUSCAoYnVpZCB0aW1lKVxuICpcbiAqL1xubGV0IGlzSW5pdGVkID0gZmFsc2VcbmNvbnN0IERFRkFVTFRfVklFV1BPUlRfV0lEVEggPSA3NTBcblxuLyoqXG4gKiBnZXQgdmlld3BvcnQgd2lkdGggZnJvbSB3ZWV4LXZpZXdwb3J0IG1ldGEuXG4gKi9cbmNvbnN0IGVudlZpZXdwb3J0V2lkdGggPSBwYXJzZUludChwcm9jZXNzLmVudi5WSUVXUE9SVF9XSURUSClcbmxldCB3aWR0aCA9ICFpc05hTihlbnZWaWV3cG9ydFdpZHRoKSAmJiBlbnZWaWV3cG9ydFdpZHRoID4gMFxuICA/IGVudlZpZXdwb3J0V2lkdGhcbiAgOiBERUZBVUxUX1ZJRVdQT1JUX1dJRFRIXG5cbmxldCB3eFZpZXdwb3J0TWV0YSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21ldGFbbmFtZT1cIndlZXgtdmlld3BvcnRcIl0nKVxuY29uc3QgbWV0YVdpZHRoID0gd3hWaWV3cG9ydE1ldGEgJiYgcGFyc2VJbnQod3hWaWV3cG9ydE1ldGEuZ2V0QXR0cmlidXRlKCdjb250ZW50JykpXG5pZiAobWV0YVdpZHRoICYmICFpc05hTihtZXRhV2lkdGgpICYmIG1ldGFXaWR0aCA+IDApIHtcbiAgd2lkdGggPSBtZXRhV2lkdGhcbn1cblxubGV0IGRwciA9IDBcbmxldCBzY3JlZW5XaWR0aCA9IDBcbmxldCBzY3JlZW5IZWlnaHQgPSAwXG5cbmNvbnN0IGluZm8gPSB7XG4gIGRwcixcbiAgc2NhbGU6IDAsXG4gIHJvb3RWYWx1ZTogMCxcbiAgcmVtOiAwLFxuICBkZXZpY2VXaWR0aDogMCxcbiAgZGV2aWNlSGVpZ2h0OiAwXG59XG5cbi8qKlxuICogc2V0IHJvb3QgZm9udC1zaXplIGZvciByZW0gdW5pdHMuIElmIGFscmVhZHkgYmVlbiBzZXQsIGp1c3Qgc2tpcCB0aGlzLlxuICovXG5mdW5jdGlvbiBzZXRSb290Rm9udCAod2lkdGgsIHZpZXdwb3J0V2lkdGgsIGZvcmNlKSB7XG4gIGNvbnN0IGRvYyA9IHdpbmRvdy5kb2N1bWVudFxuICBjb25zdCByZW0gPSB3aWR0aCAqIDc1MCAvIHZpZXdwb3J0V2lkdGggLyAxMFxuICBpZiAoIWRvYy5kb2N1bWVudEVsZW1lbnQpIHsgcmV0dXJuIH1cbiAgY29uc3Qgcm9vdEZvbnRTaXplID0gZG9jLmRvY3VtZW50RWxlbWVudC5zdHlsZS5mb250U2l6ZVxuICBpZiAoIXJvb3RGb250U2l6ZSB8fCBmb3JjZSkge1xuICAgIGRvYy5kb2N1bWVudEVsZW1lbnQuc3R5bGUuZm9udFNpemUgPSByZW0gKyAncHgnXG4gIH1cbiAgaW5mby5yZW0gPSByZW1cbiAgaW5mby5yb290VmFsdWUgPSB2aWV3cG9ydFdpZHRoIC8gMTBcbn1cblxuZnVuY3Rpb24gc2V0TWV0YVZpZXdwb3J0ICh3aWR0aCkge1xuICBpZiAoIXd4Vmlld3BvcnRNZXRhKSB7XG4gICAgd3hWaWV3cG9ydE1ldGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtZXRhJylcbiAgICB3eFZpZXdwb3J0TWV0YS5zZXRBdHRyaWJ1dGUoJ25hbWUnLCAnd2VleC12aWV3cG9ydCcpXG4gICAgY29uc3QgZmlyc3RNZXRhID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbWV0YScpXG4gICAgY29uc3QgaGVhZCA9IGZpcnN0TWV0YSAmJiBmaXJzdE1ldGEucGFyZW50RWxlbWVudFxuICAgICAgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNoaWxkcmVuWzBdXG4gICAgZmlyc3RNZXRhXG4gICAgICA/IGhlYWQuaW5zZXJ0QmVmb3JlKHd4Vmlld3BvcnRNZXRhLCBmaXJzdE1ldGEpXG4gICAgICA6IGhlYWQuYXBwZW5kQ2hpbGQod3hWaWV3cG9ydE1ldGEpXG4gIH1cbiAgZWxzZSB7XG4gICAgY29uc3QgbWV0YVdpZHRoID0gcGFyc2VJbnQod3hWaWV3cG9ydE1ldGEuZ2V0QXR0cmlidXRlKCdjb250ZW50JykpXG4gICAgaWYgKG1ldGFXaWR0aCA9PT0gd2lkdGgpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuICB3eFZpZXdwb3J0TWV0YS5zZXRBdHRyaWJ1dGUoJ2NvbnRlbnQnLCB3aWR0aCArICcnKVxufVxuXG4vKipcbiAqIGV4cG9ydCB2aWV3cG9ydCBpbmZvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5pdCAodmlld3BvcnRXaWR0aCA9IHdpZHRoKSB7XG4gIGlmICghaXNJbml0ZWQpIHtcbiAgICBpc0luaXRlZCA9IHRydWVcblxuICAgIGNvbnN0IGRvYyA9IHdpbmRvdy5kb2N1bWVudFxuICAgIGlmICghZG9jKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbdnVlLXJlbmRlcl0gd2luZG93LmRvY3VtZW50IGlzIHVuZGZpbmVkLicpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKCFkb2MuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbdnVlLXJlbmRlcl0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IGlzIHVuZGZpbmVkLicpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBkcHIgPSBpbmZvLmRwciA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvXG4gICAgc2NyZWVuV2lkdGggPSBkb2MuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoXG4gICAgc2NyZWVuSGVpZ2h0ID0gZG9jLmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHRcblxuICAgIGNvbnN0IHJlc2V0RGV2aWNlSGVpZ2h0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgc2NyZWVuSGVpZ2h0ID0gZG9jLmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHRcbiAgICAgIGNvbnN0IGVudiA9IHdpbmRvdy53ZWV4ICYmIHdpbmRvdy53ZWV4LmNvbmZpZy5lbnZcbiAgICAgIGluZm8uZGV2aWNlSGVpZ2h0ID0gZW52LmRldmljZUhlaWdodCA9IHNjcmVlbkhlaWdodCAqIGRwclxuICAgIH1cblxuICAgIC8vIHNldCByb290IGZvbnQgZm9yIHJlbS5cbiAgICBzZXRSb290Rm9udChzY3JlZW5XaWR0aCwgdmlld3BvcnRXaWR0aClcbiAgICBzZXRNZXRhVmlld3BvcnQodmlld3BvcnRXaWR0aClcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCByZXNldERldmljZUhlaWdodClcblxuICAgIC8qKlxuICAgICAqIHdoeSBub3QgdG8gdXNlIHdpbmRvdy5zY3JlZW4ud2lkdGggdG8gZ2V0IHNjcmVlbldpZHRoID8gQmVjYXVzZSBpbiBzb21lXG4gICAgICogb2xkIHdlYmtpdCBicm93c2VyIG9uIGFuZHJvaWQgc3lzdGVtIGl0IGdldCB0aGUgZGV2aWNlIHBpeGVsIHdpZHRoLCB3aGljaFxuICAgICAqIGlzIHRoZSBzY3JlZW5XaWR0aCBtdWx0aXBseSBieSB0aGUgZGV2aWNlIHBpeGVsIHJhdGlvLlxuICAgICAqIGUuZy4gaXA2IC0+IGdldCAzNzUgZm9yIHZpcnR1YWwgc2NyZWVuIHdpZHRoLlxuICAgICAqL1xuICAgIGNvbnN0IHNjYWxlID0gc2NyZWVuV2lkdGggLyB2aWV3cG9ydFdpZHRoXG4gICAgLyoqXG4gICAgICogMS4gaWYgc2V0IGluaXRpYWwvbWF4aW11bS9taW1pbXVtLXNjYWxlIHNvbWUgaG93IHRoZSBwYWdlIHdpbGwgaGF2ZSBhIGJvdW5jZVxuICAgICAqIGVmZmVjdCB3aGVuIHVzZXIgZHJhZyB0aGUgcGFnZSB0b3dhcmRzIGhvcml6b250YWwgYXhpcy5cbiAgICAgKiAyLiBEdWUgdG8gY29tcGF0aWJpbGl0eSByZWFzb25zLCBub3QgdG8gdXNlIHZpZXdwb3J0IG1ldGEgYW55bW9yZS5cbiAgICAgKiAzLiB2aWV3cG9ydCBtZXRhIHNob3VsZCBhbHdheXMgYmU6XG4gICAgICogICAgPG1ldGEgbmFtZT1cInZpZXdwb3J0XCJcbiAgICAgKiAgICAgIGNvbnRlbnQ9XCJ3aWR0aD1kZXZpY2Utd2lkdGgsXG4gICAgICogICAgICBpbml0aWFsLXNjYWxlPTEsXG4gICAgICogICAgICBtYXhpbXVtLXNjYWxlPTEsXG4gICAgICogICAgICB1c2VyLXNjYWxhYmxlPW5vXCIgLz5cbiAgICAgKi9cbiAgICBleHRlbmQoaW5mbywge1xuICAgICAgc2NhbGUsXG4gICAgICByb290VmFsdWU6IHZpZXdwb3J0V2lkdGggLyAxMCxcbiAgICAgIGRldmljZVdpZHRoOiBzY3JlZW5XaWR0aCAqIGRwcixcbiAgICAgIGRldmljZUhlaWdodDogc2NyZWVuSGVpZ2h0ICogZHByXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiBpbmZvXG59XG5cbi8qKlxuICogcmVzZXQgdmlld3BvcnQgd2lkdGggYW5kIHNjYWxlLlxuICogQHJldHVybiBuZXcgc2NhbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNldFZpZXdwb3J0ICh2aWV3cG9ydFdpZHRoKSB7XG4gIHNldFJvb3RGb250KHNjcmVlbldpZHRoLCB2aWV3cG9ydFdpZHRoLCB0cnVlKVxuICBzZXRNZXRhVmlld3BvcnQodmlld3BvcnRXaWR0aClcbiAgY29uc3QgbmV3U2NhbGUgPSBzY3JlZW5XaWR0aCAvIHZpZXdwb3J0V2lkdGhcbiAgaW5mby5zY2FsZSA9IG5ld1NjYWxlXG4gIHJldHVybiBuZXdTY2FsZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld3BvcnRJbmZvICgpIHtcbiAgcmV0dXJuIGluZm9cbn1cbiIsIi8qXG4gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGVcbiAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uXG4gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlXG4gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlXG4gKiBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxuICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlXG4gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zXG4gKiB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5mdW5jdGlvbiBleHRlbmQgKHRvLCAuLi5hcmdzKSB7XG4gIGlmICghYXJncyB8fCBhcmdzLmxlbmd0aCA8PSAwKSB7IHJldHVybiB0byB9XG4gIGFyZ3MuZm9yRWFjaChmcm9tID0+IHtcbiAgICBpZiAodHlwZW9mIGZyb20gIT09ICdvYmplY3QnKSB7IHJldHVybiB9XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZnJvbSkge1xuICAgICAgdG9ba2V5XSA9IGZyb21ba2V5XVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIHRvXG59XG5cbi8vIGlmIHN1cHBvcnQgcGFzc2l2ZSBldmVudCBsaXN0ZW5lcnMuXG5sZXQgX3N1cHBvcnRzUGFzc2l2ZSA9IGZhbHNlXG50cnkge1xuICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5hZGRFdmVudExpc3RlbmVyKCd0ZXN0JywgXyA9PiB7fSwge1xuICAgIGdldCBwYXNzaXZlICgpIHtcbiAgICAgIF9zdXBwb3J0c1Bhc3NpdmUgPSB0cnVlXG4gICAgfVxuICB9KVxufVxuY2F0Y2ggKGUpIHtcbiAgLy8gZG8gbm90aGluZy5cbn1cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3J0c1Bhc3NpdmUgKCkge1xuICByZXR1cm4gX3N1cHBvcnRzUGFzc2l2ZVxufVxuXG4vKipcbiAqIENyZWF0ZSBFdmVudC5cbiAqIEBwYXJhbSB7RE9NU3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUV2ZW50ICh0YXJnZXQsIHR5cGUsIHByb3BzKSB7XG4gIGNvbnN0IGV2ZW50ID0gbmV3IEV2ZW50KHR5cGUsIHsgYnViYmxlczogZmFsc2UgfSlcblxuICBleHRlbmQoZXZlbnQsIHByb3BzKVxuICAvLyAgcGhhbnRvbWpzIGRvbid0IHN1cHBvcnQgY3VzdG9tZXIgZXZlbnRcbiAgaWYgKHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZigncGhhbnRvbWpzJykgIT09IC0xKSB7XG4gICAgcmV0dXJuIGV2ZW50XG4gIH1cbiAgdHJ5IHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXZlbnQsICd0YXJnZXQnLCB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IHRhcmdldFxuICAgIH0pXG4gIH1cbiAgY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBleHRlbmQoe30sIGV2ZW50LCB7IHRhcmdldDogdGFyZ2V0IH0pXG4gIH1cbiAgcmV0dXJuIGV2ZW50XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgYnViYmFibGUgRXZlbnQuXG4gKiBAcGFyYW0ge0RPTVN0cmluZ30gdHlwZVxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCdWJibGVzRXZlbnQgKHRhcmdldCwgdHlwZSwgcHJvcHMpIHtcbiAgY29uc3QgZXZlbnQgPSBuZXcgRXZlbnQodHlwZSwgeyBidWJibGVzOiB0cnVlIH0pXG4gIGV4dGVuZChldmVudCwgcHJvcHMpXG4gIC8vICBwaGFudG9tanMgZG9uJ3Qgc3VwcG9ydCBjdXN0b21lciBldmVudFxuICBpZiAod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdwaGFudG9tanMnKSAhPT0gLTEpIHtcbiAgICByZXR1cm4gZXZlbnRcbiAgfVxuICB0cnkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShldmVudCwgJ3RhcmdldCcsIHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICB2YWx1ZTogdGFyZ2V0XG4gICAgfSlcbiAgfVxuICBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIGV4dGVuZCh7fSwgZXZlbnQsIHsgdGFyZ2V0OiB0YXJnZXQgfSlcbiAgfVxuICByZXR1cm4gZXZlbnRcbn1cblxuLyoqXG4gKiBDcmVhdGUgQ3VzdG9tIEV2ZW50LlxuICogQHBhcmFtIHtET01TdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ3VzdG9tRXZlbnQgKHRhcmdldCwgdHlwZSwgcHJvcHMpIHtcbiAgLy8gY29tcGF0aWJpbGl0eTogaHR0cDovL2Nhbml1c2UuY29tLyNzZWFyY2g9Y3VzdG9tZXZlbnRcbiAgLy8gY29uc3QgZXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQodHlwZSlcbiAgY29uc3QgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnQ3VzdG9tRXZlbnQnKVxuICBldmVudC5pbml0Q3VzdG9tRXZlbnQodHlwZSwgZmFsc2UsIHRydWUsIHt9KVxuICAvLyBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gIC8vIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG5cbiAgZXh0ZW5kKGV2ZW50LCBwcm9wcylcblxuICAvLyBldmVudC50YXJnZXQgaXMgcmVhZG9ubHlcbiAgdHJ5IHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXZlbnQsICd0YXJnZXQnLCB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IHRhcmdldCB8fCBudWxsXG4gICAgfSlcbiAgfVxuICBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIGV4dGVuZCh7fSwgZXZlbnQsIHsgdGFyZ2V0OiB0YXJnZXQgfHwgbnVsbCB9KVxuICB9XG5cbiAgcmV0dXJuIGV2ZW50XG59XG5cbi8qKlxuICogZGlzcGF0Y2ggYSBldmVudCBvbiBhIEhUTUwgZWxlbWVudC5cbiAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSBlbG1cbiAqIEBwYXJhbSAge0V2ZW50fSB0eXBlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0gIHtPYmplY3R9IGRhdGEgZXh0cmEgZGF0YS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpc3BhdGNoTmF0aXZlRXZlbnQgKGVsbSwgdHlwZSwgZGF0YSkge1xuICBlbG0uZGlzcGF0Y2hFdmVudChjcmVhdGVFdmVudChlbG0sIHR5cGUsIGRhdGEpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFwRm9ybUV2ZW50cyAoY29udGV4dCkge1xuICBjb25zdCBldmVudE1hcCA9IHt9XG4gIDtbJ2lucHV0JywgJ2NoYW5nZScsICdmb2N1cycsICdibHVyJywgJ3JldHVybiddLmZvckVhY2godHlwZSA9PiB7XG4gICAgZXZlbnRNYXBbdHlwZV0gPSBldmVudCA9PiB7XG4gICAgICBpZiAoY29udGV4dC4kZWwpIHtcbiAgICAgICAgZXZlbnQudmFsdWUgPSBjb250ZXh0LiRlbC52YWx1ZVxuICAgICAgICAvLyBmb3IgdGhlIHNha2Ugb2Ygdi1tb2RlbCwgYSBpbnB1dCBldmVudCBtdXN0IGJlIGVtaXR0ZWQuXG4gICAgICAgIGlmICh0eXBlID09PSAnaW5wdXQnKSB7XG4gICAgICAgICAgY29udGV4dC4kZW1pdCh0eXBlLCBldmVudClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIGV2ZW50TWFwXG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWFwRm9ybUV2ZW50c1xufVxuIiwiLypcbiAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZVxuICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb25cbiAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGVcbiAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGVcbiAqIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXG4gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGVcbiAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnNcbiAqIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBoeXBoZW5hdGUgfSBmcm9tICcuL3V0aWxzJ1xuXG5jb25zdCBzY2FsZVN0eWxlcyA9IFtcbiAgJ3dpZHRoJyxcbiAgJ2hlaWdodCcsXG4gICdsZWZ0JyxcbiAgJ3JpZ2h0JyxcbiAgJ3RvcCcsXG4gICdib3R0b20nLFxuICAnYm9yZGVyJyxcbiAgJ2JvcmRlclJhZGl1cycsXG4gICdib3JkZXJXaWR0aCcsXG4gICdib3JkZXJMZWZ0JyxcbiAgJ2JvcmRlclJpZ2h0JyxcbiAgJ2JvcmRlclRvcCcsXG4gICdib3JkZXJCb3R0b20nLFxuICAnYm9yZGVyTGVmdFdpZHRoJyxcbiAgJ2JvcmRlclJpZ2h0V2lkdGgnLFxuICAnYm9yZGVyVG9wV2lkdGgnLFxuICAnYm9yZGVyQm90dG9tV2lkdGgnLFxuICAnbWFyZ2luJyxcbiAgJ21hcmdpbkxlZnQnLFxuICAnbWFyZ2luUmlnaHQnLFxuICAnbWFyZ2luVG9wJyxcbiAgJ21hcmdpbkJvdHRvbScsXG4gICdwYWRkaW5nJyxcbiAgJ3BhZGRpbmdMZWZ0JyxcbiAgJ3BhZGRpbmdSaWdodCcsXG4gICdwYWRkaW5nVG9wJyxcbiAgJ3BhZGRpbmdCb3R0b20nLFxuICAnZm9udFNpemUnLFxuICAnbGluZUhlaWdodCcsXG4gICd0cmFuc2Zvcm0nLFxuICAnd2Via2l0VHJhbnNmb3JtJyxcbiAgJ1dlYmtpdFRyYW5zZm9ybScsXG4gICdtb3pUcmFuc2Zvcm0nLFxuICAnTW96VHJhbnNmb3JtJyxcbiAgJ2l0ZW1TaXplJ1xuXVxuXG5jb25zdCB2ZW5kb3JSZWcgPSAvd2Via2l0fG1vei9pXG5mdW5jdGlvbiBoeXBoZW4gKGtleSkge1xuICByZXR1cm4gaHlwaGVuYXRlKGtleS5yZXBsYWNlKHZlbmRvclJlZywgZnVuY3Rpb24gKCQwKSB7XG4gICAgcmV0dXJuIGAtJHskMC50b0xvd2VyQ2FzZSgpfS1gXG4gIH0pKVxufVxuXG5mdW5jdGlvbiBnZXRBbGxTdHlsZXMgKCkge1xuICByZXR1cm4gT2JqZWN0LmtleXMoc2NhbGVTdHlsZXMucmVkdWNlKGZ1bmN0aW9uIChwcmUsIGtleSkge1xuICAgIHByZVtrZXldID0gMVxuICAgIHByZVtoeXBoZW4oa2V5KV0gPSAxXG4gICAgcmV0dXJuIHByZVxuICB9LCB7fSkpXG59XG5cbmNvbnN0IGFsbFN0eWxlcyA9IGdldEFsbFN0eWxlcygpXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgc2Nyb2xsYWJsZVR5cGVzOiBbJ3Njcm9sbGVyJywgJ2xpc3QnLCAnd2F0ZXJmYWxsJywgJ3JlY3ljbGUtbGlzdCddLFxuICBnZXN0dXJlRXZlbnRzOiBbXG4gICAgJ3BhbnN0YXJ0JyxcbiAgICAncGFubW92ZScsXG4gICAgJ3BhbmVuZCcsXG4gICAgJ3N3aXBlJyxcbiAgICAnbG9uZ3ByZXNzJyxcbiAgICAndGFwJ1xuICBdLFxuICAvLyB0aGVzZSBjb21wb25lbnRzIHNob3VsZCBub3QgYmluZCBldmVudHMgd2l0aCAubmF0aXZlLlxuICB3ZWV4QnVpbHRJbkNvbXBvbmVudHM6IFtcbiAgICAnZGl2JyxcbiAgICAnY29udGFpbmVyJyxcbiAgICAndGV4dCcsXG4gICAgJ2ltYWdlJyxcbiAgICAnZ2lmJyxcbiAgICAnaW1nJyxcbiAgICAnY2VsbCcsXG4gICAgJ2EnXG4gIF0sXG4gIGJpbmRpbmdTdHlsZU5hbWVzRm9yUHgyUmVtOiBhbGxTdHlsZXNcbn1cbiIsIi8qXG4gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGVcbiAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uXG4gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlXG4gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlXG4gKiBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxuICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlXG4gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zXG4gKiB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgdGhyb3R0bGUsIGV4dGVuZCB9IGZyb20gJy4vZnVuYydcbmltcG9ydCB7IGRpc3BhdGNoTmF0aXZlRXZlbnQgfSBmcm9tICcuL2V2ZW50J1xuaW1wb3J0IGNvbmZpZyBmcm9tICcuLi9jb25maWcnXG5cbi8qKlxuICogd2hldGhlciBjdCBjb250YWlucyBlbC5cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRhaW5lclxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gdGFyZ2V0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb250YWlucyAoY29udGFpbmVyLCB0YXJnZXQsIGluY2x1ZGVTZWxmKSB7XG4gIGlmIChpbmNsdWRlU2VsZiAmJiBjb250YWluZXIgPT09IHRhcmdldCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgcmV0dXJuIGNvbnRhaW5lci5jb250YWluc1xuICAgID8gY29udGFpbmVyLmNvbnRhaW5zKHRhcmdldCkgJiYgKGNvbnRhaW5lciAhPT0gdGFyZ2V0KVxuICAgIDogY29udGFpbmVyLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRhcmdldCkgJiAxNiAhPT0gMFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zaWRlQSAoZWwpIHtcbiAgaWYgKHR5cGVvZiBlbC5faW5zaWRlQSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgcmV0dXJuIGVsLl9pbnNpZGVBXG4gIH1cbiAgbGV0IHBhcmVudCA9IGVsLnBhcmVudEVsZW1lbnRcbiAgY29uc3QgcGFyZW50cyA9IFtdXG4gIGNvbnN0IGNoZWNrUGFyZW50cyA9IGZ1bmN0aW9uIChpbnNpZGUpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IHBhcmVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBwYXJlbnRzW2ldLl9pbnNpZGVBID0gaW5zaWRlXG4gICAgfVxuICB9XG4gIGNvbnN0IGNoZWNrID0gZnVuY3Rpb24gKGluc2lkZSkge1xuICAgIGVsLl9pbnNpZGVBID0gaW5zaWRlXG4gICAgY2hlY2tQYXJlbnRzKGluc2lkZSlcbiAgICByZXR1cm4gaW5zaWRlXG4gIH1cbiAgd2hpbGUgKHBhcmVudCAhPT0gZG9jdW1lbnQuYm9keSkge1xuICAgIGlmIChwYXJlbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnYScpIHtcbiAgICAgIHJldHVybiBjaGVjayh0cnVlKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIHBhcmVudC5faW5zaWRlQSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gY2hlY2socGFyZW50Ll9pbnNpZGVBKVxuICAgIH1cbiAgICBwYXJlbnRzLnB1c2gocGFyZW50KVxuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnRFbGVtZW50XG4gIH1cbiAgcmV0dXJuIGNoZWNrKGZhbHNlKVxufVxuXG4vKipcbiAqIGdldCBwYXJlbnQgc2Nyb2xsZXIgdkNvbXBvbmVudC5cbiAqIHJldHVybiBhIFZ1ZUNvbXBvbmVudCBvciBudWxsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50U2Nyb2xsZXIgKHZtKSB7XG4gIGlmICghdm0pIHJldHVybiBudWxsXG4gIGlmICh2bS5fcGFyZW50U2Nyb2xsZXIpIHtcbiAgICByZXR1cm4gdm0uX3BhcmVudFNjcm9sbGVyXG4gIH1cbiAgZnVuY3Rpb24gX2dldFBhcmVudFNjcm9sbGVyIChwYXJlbnQpIHtcbiAgICBpZiAoIXBhcmVudCkgeyByZXR1cm4gfVxuICAgIGlmIChjb25maWcuc2Nyb2xsYWJsZVR5cGVzLmluZGV4T2YocGFyZW50LndlZXhUeXBlKSA+IC0xKSB7XG4gICAgICB2bS5fcGFyZW50U2Nyb2xsZXIgPSBwYXJlbnRcbiAgICAgIHJldHVybiBwYXJlbnRcbiAgICB9XG4gICAgcmV0dXJuIF9nZXRQYXJlbnRTY3JvbGxlcihwYXJlbnQuJHBhcmVudClcbiAgfVxuICByZXR1cm4gX2dldFBhcmVudFNjcm9sbGVyKHZtLiRwYXJlbnQpXG59XG5cbi8qKlxuICogZ2V0IHNjcm9sbGVyJ3MgZWxlbWVudC5cbiAqIEBwYXJhbSB2bSB7SFRNTEVsZW1lbnQgfCBWdWVDT21wb25lbnR9IHZtIG9yIGVsZW1lbnQuXG4gKiByZXR1cm4gdGhlIGVsZW1lbnQgb3IgZG9jdW1lbnQuYm9keS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudFNjcm9sbGVyRWxlbWVudCAodm0pIHtcbiAgaWYgKCF2bSkgeyByZXR1cm4gbnVsbCB9XG4gIGNvbnN0IGVsID0gdm0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA/IHZtIDogdm0uJGVsXG4gIGlmICghZWwgfHwgZWwubm9kZVR5cGUgIT09IDEpIHsgcmV0dXJuIH1cbiAgaWYgKHZtLl9wYXJlbnRTY3JvbGxlcikge1xuICAgIHJldHVybiB2bS5fcGFyZW50U2Nyb2xsZXJcbiAgfVxuICBmdW5jdGlvbiBfZ2V0UGFyZW50U2Nyb2xsZXIgKHBhcmVudCkge1xuICAgIGlmICghcGFyZW50KSB7IHJldHVybiB9XG4gICAgY29uc3QgdGFnTmFtZSA9IHBhcmVudC50YWdOYW1lLnRvTG93ZXJDYXNlKClcbiAgICBpZiAodGFnTmFtZSA9PT0gJ2JvZHknXG4gICAgICB8fCAodGFnTmFtZSA9PT0gJ21haW4nXG4gICAgICAmJiBjb25maWcuc2Nyb2xsYWJsZVR5cGVzLmluZGV4T2YocGFyZW50LmdldEF0dHJpYnV0ZSgnd2VleC10eXBlJykpID4gLTEpXG4gICAgKSB7XG4gICAgICB2bS5fcGFyZW50U2Nyb2xsZXIgPSBwYXJlbnRcbiAgICAgIHJldHVybiBwYXJlbnRcbiAgICB9XG4gICAgcmV0dXJuIF9nZXRQYXJlbnRTY3JvbGxlcihwYXJlbnQucGFyZW50RWxlbWVudClcbiAgfVxuICByZXR1cm4gX2dldFBhcmVudFNjcm9sbGVyKGVsKVxufVxuXG5mdW5jdGlvbiBob3Jpem9udGFsQmFsYW5jZSAocmVjdCwgY3RSZWN0KSB7XG4gIHJldHVybiByZWN0LmxlZnQgPCBjdFJlY3QucmlnaHQgJiYgcmVjdC5yaWdodCA+IGN0UmVjdC5sZWZ0XG59XG5cbmZ1bmN0aW9uIHZlcnRpY2FsQmFsYW5jZSAocmVjdCwgY3RSZWN0KSB7XG4gIHJldHVybiByZWN0LnRvcCA8IGN0UmVjdC5ib3R0b20gJiYgcmVjdC5ib3R0b20gPiBjdFJlY3QudG9wXG59XG5cbi8qKlxuICogcmV0dXJuIGEgZGF0YSBhcnJheSB3aXRoIHR3byBib29sZWFuIHZhbHVlLCB3aGljaCBhcmU6XG4gKiAxLiB2aXNpYmxlIGluIGN1cnJlbnQgY3QncyB2aWV3cG9ydC5cbiAqIDIuIHZpc2libGUgd2l0aCBvZmZzZXQgaW4gY3VycmVudCBjdCdzIHZpZXdwb3J0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzSW50ZXJzZWN0aW9uIChyZWN0LCBjdFJlY3QsIGRpciwgb2Zmc2V0KSB7XG4gIGRpciA9IGRpciB8fCAndXAnXG4gIGNvbnN0IGlzSG9yaXpvbnRhbCA9IGRpciA9PT0gJ2xlZnQnIHx8IGRpciA9PT0gJ3JpZ2h0J1xuICBjb25zdCBpc1ZlcnRpY2FsID0gZGlyID09PSAndXAnIHx8IGRpciA9PT0gJ2Rvd24nXG4gIGlmIChpc0hvcml6b250YWwgJiYgIXZlcnRpY2FsQmFsYW5jZShyZWN0LCBjdFJlY3QpKSB7XG4gICAgcmV0dXJuIFtmYWxzZSwgZmFsc2VdXG4gIH1cbiAgaWYgKGlzVmVydGljYWwgJiYgIWhvcml6b250YWxCYWxhbmNlKHJlY3QsIGN0UmVjdCkpIHtcbiAgICByZXR1cm4gW2ZhbHNlLCBmYWxzZV1cbiAgfVxuICBvZmZzZXQgPSBvZmZzZXQgPyBwYXJzZUludChvZmZzZXQpICogd2VleC5jb25maWcuZW52LnNjYWxlIDogMFxuICBzd2l0Y2ggKGRpcikge1xuICAgIGNhc2UgJ3VwJzpcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHJlY3QudG9wIDwgY3RSZWN0LmJvdHRvbSAmJiByZWN0LmJvdHRvbSA+IGN0UmVjdC50b3AsXG4gICAgICAgIHJlY3QudG9wIDwgY3RSZWN0LmJvdHRvbSArIG9mZnNldCAmJiByZWN0LmJvdHRvbSA+IGN0UmVjdC50b3AgLSBvZmZzZXRcbiAgICAgIF1cbiAgICBjYXNlICdkb3duJzpcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHJlY3QuYm90dG9tID4gY3RSZWN0LnRvcCAmJiByZWN0LnRvcCA8IGN0UmVjdC5ib3R0b20sXG4gICAgICAgIHJlY3QuYm90dG9tID4gY3RSZWN0LnRvcCAtIG9mZnNldCAmJiByZWN0LnRvcCA8IGN0UmVjdC5ib3R0b20gKyBvZmZzZXRcbiAgICAgIF1cbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHJlY3QubGVmdCA8IGN0UmVjdC5yaWdodCAmJiByZWN0LnJpZ2h0ID4gY3RSZWN0LmxlZnQsXG4gICAgICAgIHJlY3QubGVmdCA8IGN0UmVjdC5yaWdodCArIG9mZnNldCAmJiByZWN0LnJpZ2h0ID4gY3RSZWN0LmxlZnQgLSBvZmZzZXRcbiAgICAgIF1cbiAgICBjYXNlICdyaWdodCc6XG4gICAgICByZXR1cm4gW1xuICAgICAgICByZWN0LnJpZ2h0ID4gY3RSZWN0LmxlZnQgJiYgcmVjdC5sZWZ0IDwgY3RSZWN0LnJpZ2h0LFxuICAgICAgICByZWN0LnJpZ2h0ID4gY3RSZWN0LmxlZnQgLSBvZmZzZXQgJiYgcmVjdC5sZWZ0IDwgY3RSZWN0LnJpZ2h0ICsgb2Zmc2V0XG4gICAgICBdXG4gIH1cbn1cblxuLyoqXG4gKiBpc0VsZW1lbnRWaXNpYmxlXG4gKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gIGVsICAgIGEgZG9tIGVsZW1lbnQuXG4gKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gIGNvbnRhaW5lciAgb3B0aW9uYWwsIHRoZSBjb250YWluZXIgb2YgdGhpcyBlbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRWxlbWVudFZpc2libGUgKGVsLCBjb250YWluZXIsIGRpciwgb2Zmc2V0KSB7XG4gIGlmICghZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KSB7IHJldHVybiBmYWxzZSB9XG4gIGNvbnN0IGJvZHlSZWN0ID0ge1xuICAgIHRvcDogMCxcbiAgICBsZWZ0OiAwLFxuICAgIGJvdHRvbTogd2luZG93LmlubmVySGVpZ2h0LFxuICAgIHJpZ2h0OiB3aW5kb3cuaW5uZXJXaWR0aFxuICB9XG4gIGNvbnN0IGN0UmVjdCA9IChjb250YWluZXIgPT09IHdpbmRvdyB8fCBjb250YWluZXIgPT09IGRvY3VtZW50LmJvZHkpXG4gICAgPyBib2R5UmVjdCA6IGNvbnRhaW5lclxuICAgICAgPyBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgOiBib2R5UmVjdFxuICByZXR1cm4gaGFzSW50ZXJzZWN0aW9uKGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCBjdFJlY3QsIGRpciwgb2Zmc2V0KVxufVxuXG4vLyB0byB0cmlnZ2VyIHRoZSBhcHBlYXIvZGlzYXBwZWFyIGV2ZW50LlxuZnVuY3Rpb24gdHJpZ2dlckFwcGVhckV2ZW50IChlbG0sIGV2dCwgZGlyKSB7XG4gIGRpc3BhdGNoTmF0aXZlRXZlbnQoZWxtLCBldnQsIHtcbiAgICBkaXJlY3Rpb246IGRpclxuICB9KVxufVxuXG4vKipcbiAqIGdldCBhbGwgZXZlbnQgbGlzdGVuZXJzLiBpbmNsdWRpbmcgYm91bmQgaGFuZGxlcnMgaW4gYWxsIHBhcmVudCB2bm9kZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFdmVudEhhbmRsZXJzIChjb250ZXh0KSB7XG4gIGxldCB2bm9kZSA9IGNvbnRleHQuJHZub2RlXG4gIGNvbnN0IGhhbmRsZXJzID0ge31cbiAgY29uc3QgYXR0YWNoZWRWbm9kZXMgPSBbXVxuICB3aGlsZSAodm5vZGUpIHtcbiAgICBhdHRhY2hlZFZub2Rlcy5wdXNoKHZub2RlKVxuICAgIHZub2RlID0gdm5vZGUucGFyZW50XG4gIH1cbiAgYXR0YWNoZWRWbm9kZXMuZm9yRWFjaChmdW5jdGlvbiAodm5vZGUpIHtcbiAgICBjb25zdCBwYXJlbnRMaXN0ZW5lcnMgPSB2bm9kZS5jb21wb25lbnRPcHRpb25zICYmIHZub2RlLmNvbXBvbmVudE9wdGlvbnMubGlzdGVuZXJzXG4gICAgY29uc3QgZGF0YU9uID0gdm5vZGUuZGF0YSAmJiB2bm9kZS5kYXRhLm9uXG4gICAgZXh0ZW5kKGhhbmRsZXJzLCBwYXJlbnRMaXN0ZW5lcnMsIGRhdGFPbilcbiAgfSlcbiAgcmV0dXJuIGhhbmRsZXJzXG59XG5cbmZ1bmN0aW9uIGdldEFwcGVhck9mZnNldCAoZWwpIHtcbiAgcmV0dXJuIGVsICYmIGVsLmdldEF0dHJpYnV0ZSgnYXBwZWFyLW9mZnNldCcpXG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVdhdGNoQXBwZWFyTGlzdCAoY29udGFpbmVyKSB7XG4gIGNvbnRhaW5lci5fd2F0Y2hBcHBlYXJMaXN0ID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoXG4gICAgY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ1t3ZWV4LWFwcGVhcl0nKSlcbn1cblxuLyoqXG4gKiBpbmplY3QgcmVtb3ZlQ2hpbGQgZnVuY3Rpb24gdG8gd2F0Y2ggZGlzYXBwZWFyIGFuZCBvZmZzZXREaXNhcHBlYXIgZXZlbnRzLlxuICovXG5pZiAoIXdpbmRvdy5fcm1JbmplY3RlZCkge1xuICB3aW5kb3cuX3JtSW5qZWN0ZWQgPSB0cnVlXG4gIGNvbnN0IG5hdGl2ZVJlbW92ZSA9IEhUTUxFbGVtZW50LnByb3RvdHlwZS5yZW1vdmVDaGlsZFxuICBIVE1MRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgPSBmdW5jdGlvbiAoZWwpIHtcbiAgICBlbC5fdmlzaWJsZSAmJiB0cmlnZ2VyQXBwZWFyRXZlbnQoZWwsICdkaXNhcHBlYXInLCBudWxsKVxuICAgIGVsLl9vZmZzZXRWaXNpYmxlICYmIHRyaWdnZXJBcHBlYXJFdmVudChlbCwgJ29mZnNldERpc2FwcGVhcicsIG51bGwpXG4gICAgbmF0aXZlUmVtb3ZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgfVxufVxuXG4vKipcbiAqIFdhdGNoIGVsZW1lbnQncyB2aXNpYmlsaXR5IHRvIHRlbGwgd2hldGhlciBzaG91bGQgdHJpZ2dlciBhIGFwcGVhci9kaXNhcHBlYXJcbiAqIGV2ZW50IGluIHNjcm9sbCBoYW5kbGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2F0Y2hBcHBlYXIgKGNvbnRleHQsIGZpcmVOb3cpIHtcbiAgY29uc3QgZWwgPSBjb250ZXh0ICYmIGNvbnRleHQuJGVsXG4gIGlmICghZWwgfHwgZWwubm9kZVR5cGUgIT09IDEpIHsgcmV0dXJuIH1cblxuICBsZXQgaXNXaW5kb3cgPSBmYWxzZVxuICBjb25zdCBjb250YWluZXIgPSBnZXRQYXJlbnRTY3JvbGxlckVsZW1lbnQoY29udGV4dClcbiAgaWYgKCFjb250YWluZXIpIHtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoY29udGFpbmVyID09PSBkb2N1bWVudC5ib2R5KSB7XG4gICAgaXNXaW5kb3cgPSB0cnVlXG4gIH1cbiAgLyoqXG4gICAqIENvZGUgYmVsb3cgd2lsbCBvbmx5IGV4ZWMgb25jZSBmb3IgYmluZGluZyBzY3JvbGwgaGFuZGxlciBmb3IgcGFyZW50IGNvbnRhaW5lci5cbiAgICovXG4gIGxldCBzY3JvbGxIYW5kbGVyID0gY29udGFpbmVyLl9zY3JvbGxIYW5kbGVyXG4gIGlmICghc2Nyb2xsSGFuZGxlcikge1xuICAgIHNjcm9sbEhhbmRsZXIgPSBjb250YWluZXIuX3Njcm9sbEhhbmRsZXIgPSBldmVudCA9PiB7XG4gICAgICB1cGRhdGVXYXRjaEFwcGVhckxpc3QoY29udGFpbmVyKVxuICAgICAgLyoqXG4gICAgICAgKiBkZXRlY3Qgc2Nyb2xsaW5nIGRpcmVjdGlvbi5cbiAgICAgICAqIGRpcmVjdGlvbiBvbmx5IHN1cHBvcnQgdXAgJiBkb3duIHlldC5cbiAgICAgICAqIFRPRE86IGRpcmVjdGlvbiBzdXBwb3J0IGxlZnQgJiByaWdodC5cbiAgICAgICAqL1xuICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gaXNXaW5kb3cgPyB3aW5kb3cucGFnZVlPZmZzZXQgOiBjb250YWluZXIuc2Nyb2xsVG9wXG4gICAgICBjb25zdCBwcmVUb3AgPSBjb250YWluZXIuX2xhc3RTY3JvbGxUb3BcbiAgICAgIGNvbnRhaW5lci5fbGFzdFNjcm9sbFRvcCA9IHNjcm9sbFRvcFxuICAgICAgY29uc3QgZGlyID0gKHNjcm9sbFRvcCA8IHByZVRvcFxuICAgICAgICA/ICdkb3duJyA6IHNjcm9sbFRvcCA+IHByZVRvcFxuICAgICAgICAgID8gJ3VwJyA6IGNvbnRhaW5lci5fcHJldkRpcmVjdGlvbikgfHwgbnVsbFxuICAgICAgY29udGFpbmVyLl9wcmV2RGlyZWN0aW9uID0gZGlyXG4gICAgICBjb25zdCB3YXRjaEFwcGVhckxpc3QgPSBjb250YWluZXIuX3dhdGNoQXBwZWFyTGlzdCB8fCBbXVxuICAgICAgY29uc3QgbGVuID0gd2F0Y2hBcHBlYXJMaXN0Lmxlbmd0aFxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCBlbCA9IHdhdGNoQXBwZWFyTGlzdFtpXVxuICAgICAgICBjb25zdCBhcHBlYXJPZmZzZXQgPSBnZXRBcHBlYXJPZmZzZXQoZWwpXG4gICAgICAgIGNvbnN0IHZpc2libGVEYXRhID0gaXNFbGVtZW50VmlzaWJsZShlbCwgY29udGFpbmVyLCBkaXIsIGFwcGVhck9mZnNldClcbiAgICAgICAgZGV0ZWN0QXBwZWFyKGVsLCB2aXNpYmxlRGF0YSwgZGlyKVxuICAgICAgfVxuICAgIH1cbiAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhyb3R0bGUoc2Nyb2xsSGFuZGxlciwgMTAwLCB0cnVlKSlcbiAgfVxuICBpZiAoZmlyZU5vdykge1xuICAgIGNvbnRleHQuJG5leHRUaWNrKHNjcm9sbEhhbmRsZXIpXG4gIH1cbn1cblxuLyoqXG4gKiBkZWNpZGUgd2hldGhlciB0byB0cmlnZ2VyIGEgYXBwZWFyL2Rpc2FwcGVhciBldmVudC5cbiAqIEBwYXJhbSB7VnVlQ29tcG9uZW50fSBjb250ZXh0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IHZpc2libGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdEFwcGVhciAoZWwsIHZpc2libGVEYXRhLCBkaXIgPSBudWxsLCBhcHBlYXJPZmZzZXQpIHtcbiAgaWYgKCFlbCkgeyByZXR1cm4gfVxuICBjb25zdCBbdmlzaWJsZSwgb2Zmc2V0VmlzaWJsZV0gPSB2aXNpYmxlRGF0YVxuICAvKipcbiAgICogTm8gbWF0dGVyIGl0J3MgYmluZGluZyBhcHBlYXIvZGlzYXBwZWFyIG9yIGJvdGggb2YgdGhlbS4gQWx3YXlzXG4gICAqIHNob3VsZCB0ZXN0IGl0J3MgdmlzaWJpbGl0eSBhbmQgY2hhbmdlIHRoZSBlbC5fdmlzaWJsZS5cbiAgICogSWYgbmVpZ2hlciBoYXMgYmVlbiBib3VuZCwgdGhlbiBpZ25vcmUgaXQuXG4gICAqL1xuICAvKipcbiAgICogaWYgdGhlIGNvbXBvbmVudCBoYXNuJ3QgYXBwZWFyZWQgZm9yIG9uY2UgeWV0LCB0aGVuIGl0IHNob3VsZG4ndCB0cmlnZ2VyXG4gICAqIGEgZGlzYXBwZWFyIGV2ZW50IGF0IGFsbC5cbiAgICovXG4gIGlmIChlbC5fYXBwZWFyZWRPbmNlIHx8IHZpc2libGUpIHtcbiAgICBpZiAoZWwuX3Zpc2libGUgIT09IHZpc2libGUpIHtcbiAgICAgIGVsLl92aXNpYmxlID0gdmlzaWJsZVxuICAgICAgaWYgKHZpc2libGUgJiYgIWVsLl9hcHBlYXJlZE9uY2UpIHtcbiAgICAgICAgZWwuX2FwcGVhcmVkT25jZSA9IHRydWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGV2dE5hbWUgPSB2aXNpYmxlID8gJ2FwcGVhcicgOiAnZGlzYXBwZWFyJ1xuICAgICAgaWYgKGVsLmdldEF0dHJpYnV0ZShgZGF0YS1ldnQtJHtldnROYW1lfWApID09PSAnJykge1xuICAgICAgICB0cmlnZ2VyQXBwZWFyRXZlbnQoZWwsIGV2dE5hbWUsIGRpcilcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKGVsLl9vZmZzZXRBcHBlYXJlZE9uY2UgfHwgb2Zmc2V0VmlzaWJsZSkge1xuICAgIGlmIChlbC5fb2Zmc2V0VmlzaWJsZSAhPT0gb2Zmc2V0VmlzaWJsZSkge1xuICAgICAgZWwuX29mZnNldFZpc2libGUgPSBvZmZzZXRWaXNpYmxlXG4gICAgICBpZiAob2Zmc2V0VmlzaWJsZSAmJiAhZWwuX29mZnNldEFwcGVhcmVkT25jZSkge1xuICAgICAgICBlbC5fb2Zmc2V0QXBwZWFyZWRPbmNlID0gdHJ1ZVxuICAgICAgfVxuICAgICAgY29uc3QgZXZ0ID0gb2Zmc2V0VmlzaWJsZSA/IFsnb2Zmc2V0LWFwcGVhcicsICdvZmZzZXRBcHBlYXInXSA6IFsnb2Zmc2V0LWRpc2FwcGVhcicsICdvZmZzZXREaXNhcHBlYXInXVxuICAgICAgaWYgKGVsLmdldEF0dHJpYnV0ZShgZGF0YS1ldnQtJHtldnRbMF19YCkgPT09ICcnKSB7XG4gICAgICAgIHRyaWdnZXJBcHBlYXJFdmVudChlbCwgZXZ0WzFdLCBkaXIpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvKlxuICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlXG4gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvblxuICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZVxuICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZVxuICogXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcbiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZVxuICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9uc1xuICogdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgaXNFbGVtZW50VmlzaWJsZSB9IGZyb20gJy4vY29tcG9uZW50J1xuaW1wb3J0IHsgZGlzcGF0Y2hOYXRpdmVFdmVudCB9IGZyb20gJy4vZXZlbnQnXG5pbXBvcnQgeyB0aHJvdHRsZSB9IGZyb20gJy4vZnVuYydcblxuY29uc3QgbGF6eWxvYWRBdHRyID0gJ2RhdGEtaW1nLXNyYydcbmNvbnN0IHBsYWNlaG9sZGVyQXR0ciA9ICdwbGFjZWhvbGRlcidcblxuZnVuY3Rpb24gcHJlTG9hZEltZyAoc3JjLFxuICBsb2FkQ2FsbGJhY2ssXG4gIGVycm9yQ2FsbGJhY2spIHtcbiAgY29uc3QgaW1nID0gbmV3IEltYWdlKClcbiAgaW1nLm9ubG9hZCA9IGxvYWRDYWxsYmFjayA/IGxvYWRDYWxsYmFjay5iaW5kKGltZykgOiBudWxsXG4gIGltZy5vbmVycm9yID0gZXJyb3JDYWxsYmFjayA/IGVycm9yQ2FsbGJhY2suYmluZChpbWcpIDogbnVsbFxuICBpbWcuc3JjID0gc3JjXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseVNyYyAoaXRlbSwgc3JjLCBwbGFjZWhvbGRlclNyYykge1xuICBpZiAoIXNyYykgeyByZXR1cm4gfVxuICBmdW5jdGlvbiBmaW5hbGxDYiAoKSB7XG4gICAgZGVsZXRlIGl0ZW0uX3NyY19sb2FkaW5nXG4gIH1cblxuICBpZiAod2luZG93Ll9wcm9jZXNzSW1nU3JjKSB7XG4gICAgc3JjID0gd2luZG93Ll9wcm9jZXNzSW1nU3JjKHNyYywgaXRlbSlcbiAgICBpZiAocGxhY2Vob2xkZXJTcmMpIHtcbiAgICAgIHBsYWNlaG9sZGVyU3JjID0gd2luZG93Ll9wcm9jZXNzSW1nU3JjKHBsYWNlaG9sZGVyU3JjLCBpdGVtKVxuICAgIH1cbiAgfVxuXG4gIGlmIChpdGVtLl9zcmNfbG9hZGluZyA9PT0gc3JjKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvKipcbiAgICogMS4gYXBwbHkgc3JjIGltbWVkaWF0ZWx5IGluIGNhc2UgamF2c2NyaXB0IGJsb2NrcyB0aGUgaW1hZ2UgbG9hZGluZ1xuICAgKiAgYmVmb3JlIG5leHQgdGljay5cbiAgICovXG4gIGl0ZW0uc3R5bGUuYmFja2dyb3VuZEltYWdlID0gYHVybCgke3NyYyB8fCAnJ30pYFxuICBpdGVtLnJlbW92ZUF0dHJpYnV0ZShsYXp5bG9hZEF0dHIpXG4gIC8qKlxuICAgKiAyLiB0aGVuIGxvYWQgdGhlIGltZyBzcmMgd2l0aCBJbWFnZSBjb25zdHJ1Y3RvciAoYnV0IHdvdWxkIG5vdCBwb3N0XG4gICAqICBhIHJlcXVlc3QgYWdhaW4pLCBqdXN0IHRvIHRyaWdnZXIgdGhlIGxvYWQgZXZlbnQuXG4gICAqL1xuICBpdGVtLl9zcmNfbG9hZGluZyA9IHNyY1xuICBwcmVMb2FkSW1nKHNyYywgZnVuY3Rpb24gKGV2dCkge1xuICAgIGl0ZW0uc3R5bGUuYmFja2dyb3VuZEltYWdlID0gYHVybCgke3NyYyB8fCAnJ30pYFxuICAgIGNvbnN0IHsgd2lkdGg6IG5hdHVyYWxXaWR0aCwgaGVpZ2h0OiBuYXR1cmFsSGVpZ2h0IH0gPSB0aGlzXG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgIHNpemU6IHsgbmF0dXJhbFdpZHRoLCBuYXR1cmFsSGVpZ2h0IH1cbiAgICB9XG4gICAgZGlzcGF0Y2hOYXRpdmVFdmVudChpdGVtLCAnbG9hZCcsIHBhcmFtcylcbiAgICBmaW5hbGxDYigpXG4gIH0sIGZ1bmN0aW9uIChldnQpIHtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgIHNpemU6IHsgbmF0dXJhbFdpZHRoOiAwLCBuYXR1cmFsSGVpZ2h0OiAwIH1cbiAgICB9XG4gICAgZGlzcGF0Y2hOYXRpdmVFdmVudChpdGVtLCAnbG9hZCcsIHBhcmFtcylcbiAgICBpZiAocGxhY2Vob2xkZXJTcmMpIHtcbiAgICAgIHByZUxvYWRJbWcocGxhY2Vob2xkZXJTcmMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXRlbS5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSBgdXJsKCR7cGxhY2Vob2xkZXJTcmMgfHwgJyd9KWBcbiAgICAgIH0pXG4gICAgfVxuICAgIGZpbmFsbENiKClcbiAgfSlcbn1cblxuZnVuY3Rpb24gZ2V0Q3RTY3JvbGxlciAoZWwpIHtcbiAgaWYgKCFlbCkgeyByZXR1cm4gfVxuICBsZXQgc2Nyb2xsZXIgPSBlbC5fcHRTY3JvbGxlclxuICBpZiAoIXNjcm9sbGVyKSB7XG4gICAgbGV0IHB0ID0gZWwucGFyZW50RWxlbWVudFxuICAgIHdoaWxlIChwdCAmJiBwdCAhPT0gZG9jdW1lbnQuYm9keSkge1xuICAgICAgaWYgKChwdC5jbGFzc05hbWUgKyAnJyB8fCAnJykubWF0Y2goL3dlZXgtbGlzdHx3ZWV4LXNjcm9sbGVyfHdlZXgtd2F0ZXJmYWxsLykpIHtcbiAgICAgICAgc2Nyb2xsZXIgPSBwdFxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgcHQgPSBwdC5wYXJlbnRFbGVtZW50XG4gICAgfVxuICAgIHNjcm9sbGVyID0gcHRcbiAgICBlbC5fcHRTY3JvbGxlciA9IHB0XG4gIH1cbiAgcmV0dXJuIHNjcm9sbGVyXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXJlTGF6eWxvYWQgKGVsLCBpZ25vcmVWaXNpYmlsaXR5KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGVsKSkge1xuICAgIHJldHVybiBlbC5mb3JFYWNoKGN0ID0+IGZpcmVMYXp5bG9hZChjdCkpXG4gIH1cbiAgZWwgPSBlbCB8fCBkb2N1bWVudC5ib2R5XG4gIGlmICghZWwpIHsgcmV0dXJuIH1cbiAgbGV0IGltZ3MgPSAoZWwgfHwgZG9jdW1lbnQuYm9keSkucXVlcnlTZWxlY3RvckFsbChgWyR7bGF6eWxvYWRBdHRyfV1gKVxuICBpZiAoZWwuZ2V0QXR0cmlidXRlKGxhenlsb2FkQXR0cikpIHsgaW1ncyA9IFtlbF0gfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGltZ3MubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBpbWcgPSBpbWdzW2ldXG4gICAgaWYgKHR5cGVvZiBpZ25vcmVWaXNpYmlsaXR5ID09PSAnYm9vbGVhbicgJiYgaWdub3JlVmlzaWJpbGl0eSkge1xuICAgICAgYXBwbHlTcmMoaW1nLCBpbWcuZ2V0QXR0cmlidXRlKGxhenlsb2FkQXR0ciksIGltZy5nZXRBdHRyaWJ1dGUocGxhY2Vob2xkZXJBdHRyKSlcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNFbGVtZW50VmlzaWJsZShpbWcsIGdldEN0U2Nyb2xsZXIoZWwpKVswXSkge1xuICAgICAgYXBwbHlTcmMoaW1nLCBpbWcuZ2V0QXR0cmlidXRlKGxhenlsb2FkQXR0ciksIGltZy5nZXRBdHRyaWJ1dGUocGxhY2Vob2xkZXJBdHRyKSlcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBjYWNoZSBhIHRocm90dGxlIGxhenlsb2FkIGZ1bmN0aW9uIGZvciBldmVyeSBjb250YWluZXIgZWxlbWVudFxuICogb25jZSBmb3IgZGlmZmVyZW50IHdhaXQgdGltZXMgc2VwYXJhdGUuXG4gKiAgIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhpcyBjYWNoZTpcbiAqICAgICAgY2FjaGU6IHtcbiAqICAgICAgICBlbC5pZDoge1xuICogICAgICAgICAgd2FpdDogdGhyb3R0bGVkRnVuY3Rpb24gKCkgeyAuLi4gfVxuICogICAgICAgIH1cbiAqICAgICAgfVxuICovXG5jb25zdCBjYWNoZSA9IHt9XG5sZXQgX3VpZCA9IDFcbmV4cG9ydCBmdW5jdGlvbiBnZXRUaHJvdHRsZUxhenlsb2FkICh3YWl0ID0gMTYsIGVsID0gZG9jdW1lbnQuYm9keSkge1xuICBsZXQgaWQgPSArKGVsICYmIGVsLmRhdGFzZXQudGhyb3R0bGVJZClcbiAgaWYgKGlzTmFOKGlkKSB8fCBpZCA8PSAwKSB7XG4gICAgaWQgPSBfdWlkKytcbiAgICBlbCAmJiBlbC5zZXRBdHRyaWJ1dGUoJ2RhdGEtdGhyb3R0bGUtaWQnLCBpZCArICcnKVxuICB9XG5cbiAgIWNhY2hlW2lkXSAmJiAoY2FjaGVbaWRdID0ge30pXG4gIGNvbnN0IHRocm90dGxlZCA9IGNhY2hlW2lkXVt3YWl0XSB8fFxuICAgIChjYWNoZVtpZF1bd2FpdF0gPSB0aHJvdHRsZShcbiAgICAgIGZpcmVMYXp5bG9hZC5iaW5kKHRoaXMsIGVsKSxcbiAgICAgIHBhcnNlRmxvYXQod2FpdCksXG4gICAgICAvLyB0cnVlIGZvciBjYWxsTGFzdFRpbWUuXG4gICAgICAvLyB0byB0cmlnZ2VyIG9uY2UgbW9yZSB0aW1lIGFmdGVyIHRoZSBsYXN0IHRocm90dGxlZCBmdW5jdGlvbiBjYWxsZWQgd2l0aCBhIGxpdHRsZSBtb3JlIGRlbGF5LlxuICAgICAgdHJ1ZSlcbiAgICApXG4gIHJldHVybiB0aHJvdHRsZWRcbn1cbiIsIi8qXG4gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGVcbiAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uXG4gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlXG4gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlXG4gKiBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxuICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlXG4gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zXG4gKiB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgY29uZmlnIGZyb20gJy4uL2NvbmZpZydcbmltcG9ydCB7IGNhbWVsaXplIH0gZnJvbSAnLi9mdW5jJ1xuY29uc3QgeyBiaW5kaW5nU3R5bGVOYW1lc0ZvclB4MlJlbSB9ID0gY29uZmlnXG5cbi8vIHdoZXRoZXIgdG8gc3VwcG9ydCB1c2luZyAwLjVweCB0byBwYWludCAxcHggd2lkdGggYm9yZGVyLlxubGV0IF9zdXBwb3J0SGFpcmxpbmVzXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9ydEhhaXJsaW5lcyAoKSB7XG4gIGlmICh0eXBlb2YgX3N1cHBvcnRIYWlybGluZXMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgY29uc3QgZHByID0gd2luZG93LmRldmljZVBpeGVsUmF0aW9cbiAgICBpZiAoZHByICYmIGRwciA+PSAyICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgICAgY29uc3QgZG9jRWxtID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XG4gICAgICBjb25zdCB0ZXN0RWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICAgIGNvbnN0IGZha2VCb2R5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYm9keScpXG4gICAgICBjb25zdCBiZWZvcmVOb2RlID0gZG9jRWxtLmZpcnN0RWxlbWVudENoaWxkIHx8IGRvY0VsbS5maXJzdENoaWxkXG4gICAgICB0ZXN0RWxtLnN0eWxlLmJvcmRlciA9ICcwLjVweCBzb2xpZCB0cmFuc3BhcmVudCdcbiAgICAgIGZha2VCb2R5LmFwcGVuZENoaWxkKHRlc3RFbG0pXG4gICAgICBkb2NFbG0uaW5zZXJ0QmVmb3JlKGZha2VCb2R5LCBiZWZvcmVOb2RlKVxuICAgICAgX3N1cHBvcnRIYWlybGluZXMgPSB0ZXN0RWxtLm9mZnNldEhlaWdodCA9PT0gMVxuICAgICAgZG9jRWxtLnJlbW92ZUNoaWxkKGZha2VCb2R5KVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIF9zdXBwb3J0SGFpcmxpbmVzID0gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIF9zdXBwb3J0SGFpcmxpbmVzXG59XG5cbmxldCBzdXBwb3J0ID0gbnVsbFxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9ydFN0aWNreSAoKSB7XG4gIGlmIChzdXBwb3J0ICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHN1cHBvcnRcbiAgfVxuICBjb25zdCBlbGVtZW50ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gIGNvbnN0IGVsZW1lbnRTdHlsZSA9IGVsZW1lbnQuc3R5bGVcbiAgZWxlbWVudFN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246LXdlYmtpdC1zdGlja3k7cG9zaXRpb246c3RpY2t5OydcbiAgc3VwcG9ydCA9IGVsZW1lbnRTdHlsZS5wb3NpdGlvbi5pbmRleE9mKCdzdGlja3knKSAhPT0gLTFcbiAgcmV0dXJuIHN1cHBvcnRcbn1cblxuLyoqXG4gKiBnZXQgdHJhbnNmb3JtT2JqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUcmFuc2Zvcm1PYmogKGVsbSkge1xuICBsZXQgc3R5bGVPYmogPSB7fVxuICBpZiAoIWVsbSkgeyByZXR1cm4gc3R5bGVPYmogfVxuICBjb25zdCB0cmFuc2Zvcm1TdHIgPSBlbG0uc3R5bGUud2Via2l0VHJhbnNmb3JtXG4gICAgfHwgZWxtLnN0eWxlLm1velRyYW5zZm9ybVxuICAgIHx8IGVsbS5zdHlsZS50cmFuc2Zvcm1cbiAgaWYgKHRyYW5zZm9ybVN0ciAmJiB0cmFuc2Zvcm1TdHIubWF0Y2goLyg/OiAqKD86dHJhbnNsYXRlfHJvdGF0ZXxzY2FsZSlbXihdKlxcKFteKF0rXFwpKSsvaSkpIHtcbiAgICBzdHlsZU9iaiA9IHRyYW5zZm9ybVN0ci50cmltKCkucmVwbGFjZSgvLCArL2csICcsJykuc3BsaXQoJyAnKS5yZWR1Y2UoZnVuY3Rpb24gKHByZSwgc3RyKSB7XG4gICAgICBbJ3RyYW5zbGF0ZScsICdzY2FsZScsICdyb3RhdGUnXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIGlmIChuZXcgUmVnRXhwKG5hbWUsICdpJykudGVzdChzdHIpKSB7XG4gICAgICAgICAgcHJlW25hbWVdID0gc3RyXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICByZXR1cm4gcHJlXG4gICAgfSwge30pXG4gIH1cbiAgcmV0dXJuIHN0eWxlT2JqXG59XG5cbi8qKlxuICogdHJhbnNsYXRlIGEgdHJhbnNmb3JtIHN0cmluZyBmcm9tIGEgdHJhbnNmb3JtT2JqLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHJhbnNmb3JtU3RyIChvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikucmVkdWNlKGZ1bmN0aW9uIChwcmUsIGtleSkge1xuICAgIHJldHVybiBwcmUgKyBvYmpba2V5XSArICcgJ1xuICB9LCAnJylcbn1cblxuLyoqXG4gKiBhZGQgdHJhbnNmb3JtIHN0eWxlIHRvIGVsZW1lbnQuXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbG1cbiAqIEBwYXJhbSB7b2JqZWN0fSBzdHlsZTogdHJhbnNmb3JtIG9iamVjdCwgZm9ybWF0IGlzIGxpa2UgdGhpczpcbiAqICAge1xuICogICAgIHRyYW5zbGF0ZTogJ3RyYW5zbGF0ZTNkKDJweCwgMnB4LCAycHgpJyxcbiAqICAgICBzY2FsZTogJ3NjYWxlKDAuMiknLFxuICogICAgIHJvdGF0ZTogJ3JvdGF0ZSgzMGRlZyknXG4gKiAgIH1cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVwbGFjZTogd2hldGhlciB0byByZXBsYWNlIGFsbCB0cmFuc2Zvcm0gcHJvcGVydGllcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFRyYW5zZm9ybSAoZWxtLCBzdHlsZSwgcmVwbGFjZSkge1xuICBpZiAoIXN0eWxlKSB7IHJldHVybiB9XG4gIGxldCBzdHlsZU9iaiA9IHt9XG4gIGlmICghcmVwbGFjZSkge1xuICAgIHN0eWxlT2JqID0gZ2V0VHJhbnNmb3JtT2JqKGVsbSlcbiAgfVxuICBmb3IgKGNvbnN0IGtleSBpbiBzdHlsZSkge1xuICAgIGNvbnN0IHZhbCA9IHN0eWxlW2tleV1cbiAgICBpZiAodmFsKSB7XG4gICAgICBzdHlsZU9ialtrZXldID0gdmFsXG4gICAgfVxuICB9XG4gIGNvbnN0IHJlc1N0ciA9IGdldFRyYW5zZm9ybVN0cihzdHlsZU9iailcbiAgZWxtLnN0eWxlLndlYmtpdFRyYW5zZm9ybSA9IHJlc1N0clxuICBlbG0uc3R5bGUubW96VHJhbnNmb3JtID0gcmVzU3RyXG4gIGVsbS5zdHlsZS50cmFuc2Zvcm0gPSByZXNTdHJcbn1cblxuLyoqXG4gKiBjb3B5IGEgdHJhbnNmb3JtIGJlaGF2aW91ciBmcm9tIG9uZSBlbGVtZW50IHRvIGFub3RoZXIuXG4gKiBrZXkgY291bGQgYmU6ICd0cmFuc2xhdGUnIHwgJ3NjYWxlJyB8ICdyb3RhdGUnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3B5VHJhbnNmb3JtIChmcm9tLCB0bywga2V5KSB7XG4gIGxldCBzdHJcbiAgaWYgKCFrZXkpIHtcbiAgICBzdHIgPSBmcm9tLnN0eWxlLndlYmtpdFRyYW5zZm9ybVxuICAgICAgfHwgZnJvbS5zdHlsZS5tb3pUcmFuc2Zvcm1cbiAgICAgIHx8IGZyb20uc3R5bGUudHJhbnNmb3JtXG4gIH1cbiAgZWxzZSB7XG4gICAgY29uc3QgZnJvbU9iaiA9IGdldFRyYW5zZm9ybU9iaihmcm9tKVxuICAgIGlmICghZnJvbU9ialtrZXldKSB7IHJldHVybiB9XG4gICAgY29uc3QgdG9PYmogPSBnZXRUcmFuc2Zvcm1PYmoodG8pXG4gICAgdG9PYmpba2V5XSA9IGZyb21PYmpba2V5XVxuICAgIHN0ciA9IGdldFRyYW5zZm9ybVN0cih0b09iailcbiAgfVxuICB0by5zdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSBzdHJcbiAgdG8uc3R5bGUubW96VHJhbnNmb3JtID0gc3RyXG4gIHRvLnN0eWxlLnRyYW5zZm9ybSA9IHN0clxufVxuXG4vKipcbiAqIGdldCBjb2xvcidzIHIsIGcsIGIgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3Igc3VwcG9ydCBhbGwga2luZHMgb2YgdmFsdWUgb2YgY29sb3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZ2IgKGNvbG9yKSB7XG4gIGNvbnN0IGhheFJlZyA9IC8jKFtcXGRhLWZBLUZdezJ9KShbXFxkYS1mQS1GXXsyfSkoW1xcZGEtZkEtRl17Mn0pL1xuICBjb25zdCByZ2JSZWcgPSAvcmdiXFwoKFxcZCspLFxccyooXFxkKyksXFxzKihcXGQrKVxcKS9cbiAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKVxuICBjb25zdCBib2R5ID0gZG9jdW1lbnQuYm9keVxuICBzcGFuLnN0eWxlLmNzc1RleHQgPSBgY29sb3I6ICR7Y29sb3J9OyB3aWR0aDogMHB4OyBoZWlnaHQ6IDBweDtgXG4gIGJvZHkgJiYgYm9keS5hcHBlbmRDaGlsZChzcGFuKVxuICBjb2xvciA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHNwYW4pLmNvbG9yICsgJydcbiAgYm9keSAmJiBib2R5LnJlbW92ZUNoaWxkKHNwYW4pXG5cbiAgbGV0IG1hdGNoXG4gIG1hdGNoID0gY29sb3IubWF0Y2goaGF4UmVnKVxuICBpZiAobWF0Y2gpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcjogcGFyc2VJbnQobWF0Y2hbMV0sIDE2KSxcbiAgICAgIGc6IHBhcnNlSW50KG1hdGNoWzJdLCAxNiksXG4gICAgICBiOiBwYXJzZUludChtYXRjaFszXSwgMTYpXG4gICAgfVxuICB9XG4gIG1hdGNoID0gY29sb3IubWF0Y2gocmdiUmVnKVxuICBpZiAobWF0Y2gpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcjogcGFyc2VJbnQobWF0Y2hbMV0pLFxuICAgICAgZzogcGFyc2VJbnQobWF0Y2hbMl0pLFxuICAgICAgYjogcGFyc2VJbnQobWF0Y2hbM10pXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogZ2V0IHN0eWxlIHNoZWV0IHdpdGggb3duZXIgbm9kZSdzIGlkXG4gKiBAcGFyYW0ge3N0cmluZ30gaWQgb3duZXIgbm9kZSBpZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0eWxlU2hlZXRCeUlkIChpZCkge1xuICBpZiAoIWlkKSB7IHJldHVybiB9XG4gIGNvbnN0IHN0eWxlU2hlZXRzID0gZG9jdW1lbnQuc3R5bGVTaGVldHNcbiAgY29uc3QgbGVuID0gc3R5bGVTaGVldHMubGVuZ3RoXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBjb25zdCBzdHlsZVNoZWV0ID0gc3R5bGVTaGVldHNbaV1cbiAgICBpZiAoc3R5bGVTaGVldC5vd25lck5vZGUuaWQgPT09IGlkKSB7XG4gICAgICByZXR1cm4gc3R5bGVTaGVldFxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRDaGlsZHJlblRvdGFsV2lkdGggKGNoaWxkcmVuKSB7XG4gIGNvbnN0IGxlbiA9IGNoaWxkcmVuLmxlbmd0aFxuICBsZXQgdG90YWwgPSAwXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICB0b3RhbCArPSBjaGlsZHJlbltpXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aFxuICB9XG4gIHJldHVybiB0b3RhbFxufVxuLyoqXG4gKiBnZXQgdG90YWwgY29udGVudCB3aWR0aCBvZiB0aGUgZWxlbWVudC5cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsbVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmFuZ2VXaWR0aCAoZWxtKSB7XG4gIGNvbnN0IGNoaWxkcmVuID0gZWxtLmNoaWxkcmVuXG4gIGlmICghY2hpbGRyZW4pIHtcbiAgICByZXR1cm4gZWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoXG4gIH1cbiAgaWYgKCFSYW5nZSkge1xuICAgIHJldHVybiBnZXRDaGlsZHJlblRvdGFsV2lkdGgoY2hpbGRyZW4pXG4gIH1cbiAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpXG4gIGlmICghcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKSB7XG4gICAgcmV0dXJuIGdldENoaWxkcmVuVG90YWxXaWR0aChjaGlsZHJlbilcbiAgfVxuICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWxtKVxuICByZXR1cm4gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGhcbn1cblxuLyoqXG4gKiBweDJyZW0gYW5kIGNhbWVsaXplIGtleXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHlsZU9iamVjdDJyZW0gKHN0eWxlLCByb290VmFsdWUpIHtcbiAgY29uc3Qgb2JqID0ge31cbiAgZm9yIChjb25zdCBrIGluIHN0eWxlKSB7XG4gICAgY29uc3QgY2FtSyA9IGNhbWVsaXplKGspXG4gICAgaWYgKGJpbmRpbmdTdHlsZU5hbWVzRm9yUHgyUmVtLmluZGV4T2YoY2FtSykgPiAtMSkge1xuICAgICAgb2JqW2NhbUtdID0gcHgycmVtKHN0eWxlW2tdICsgJycsIHJvb3RWYWx1ZSlcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBvYmpbY2FtS10gPSBzdHlsZVtrXVxuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBweDJyZW0gKHB4LCByb290VmFsdWUpIHtcbiAgcmV0dXJuIHB4LnJlcGxhY2UoLyhbKy1dP1xcZCsoPzouXFxkKik/KShbcHx3XXgpL2csIGZ1bmN0aW9uICgkMCwgJDEsICQyKSB7XG4gICAgaWYgKCQyID09PSAnd3gnKSB7IC8vICd3eCcgLT4gcHhcbiAgICAgIHJldHVybiAkMSArICdweCdcbiAgICB9XG4gICAgZWxzZSB7ICAvLyAncHgnIC0+IHJlbVxuICAgICAgY29uc3QgcHhWYWwgPSBwYXJzZUZsb2F0KCQxKVxuICAgICAgY29uc3Qgc2lnbiA9IHB4VmFsID4gMFxuICAgICAgICA/IDEgOiBweFZhbCA8IDAgP1xuICAgICAgICAgIC0xIDogMFxuICAgICAgaWYgKE1hdGguYWJzKHB4VmFsKSA8PSAxKSB7XG4gICAgICAgIHJldHVybiBzdXBwb3J0SGFpcmxpbmVzKClcbiAgICAgICAgICA/IGAke3NpZ24gKiAwLjV9cHhgXG4gICAgICAgICAgOiBgJHtzaWduICogMX1weGBcbiAgICAgIH1cbiAgICAgIHJldHVybiBweFZhbFxuICAgICAgICAvIChyb290VmFsdWUgfHwgd2luZG93LndlZXguY29uZmlnLmVudi5yZW0pXG4gICAgICAgICsgJ3JlbSdcbiAgICB9XG4gIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW0ycHggKHJlbSwgcm9vdFZhbHVlKSB7XG4gIHJldHVybiByZW0ucmVwbGFjZSgvKFsrLV0/XFxkKyg/Oi5cXGQqKT8pcmVtL2csIGZ1bmN0aW9uICgkMCwgJDEpIHtcbiAgICByZXR1cm4gcGFyc2VGbG9hdCgkMSlcbiAgICAgICogKHJvb3RWYWx1ZSB8fCB3aW5kb3cud2VleC5jb25maWcuZW52LnJlbSlcbiAgICAgICsgJ3B4J1xuICB9KVxufVxuIiwiLypcbiAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZVxuICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb25cbiAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGVcbiAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGVcbiAqIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXG4gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGVcbiAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnNcbiAqIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5leHBvcnQgKiBmcm9tICcuL2Z1bmMnXG5leHBvcnQgKiBmcm9tICcuL2V2ZW50J1xuZXhwb3J0ICogZnJvbSAnLi9jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xhenlsb2FkJ1xuZXhwb3J0ICogZnJvbSAnLi9zdHlsZSdcbmV4cG9ydCAqIGZyb20gJy4vdHlwZSdcbiIsIi8qXG4gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGVcbiAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uXG4gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlXG4gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlXG4gKiBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxuICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlXG4gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zXG4gKiB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0ICcuLi9saWIvZW52ZCdcblxuaW1wb3J0IHsgaW5pdCBhcyBpbml0Vmlld3BvcnQgfSBmcm9tICcuL3ZpZXdwb3J0J1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSAnLi4vdXRpbHMnXG5cbi8qKlxuICogZ2V0IFdYRW52aXJvbm1lbnQgaW5mby5cbiAqIEBwYXJhbSAge29iamVjdH0gdmlld3BvcnRJbmZvOiBpbmZvIGFib3V0IHZpZXdwb3J0LlxuICogQHBhcmFtICB7b2JqZWN0fSBlbnZJbmZvOiBpbmZvIHBhcnNlZCBmcm9tIGxpYi5lbnYuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0RW52ICh2aWV3cG9ydEluZm8sIGVudkluZm8pIHtcbiAgY29uc3QgYnJvd3Nlck5hbWUgPSBlbnZJbmZvLmJyb3dzZXIgPyBlbnZJbmZvLmJyb3dzZXIubmFtZSA6IG5hdmlnYXRvci5hcHBOYW1lXG4gIGNvbnN0IGJyb3dzZXJWZXJzaW9uID0gZW52SW5mby5icm93c2VyID8gZW52SW5mby5icm93c2VyLnZlcnNpb24udmFsIDogbnVsbFxuICBsZXQgb3NOYW1lID0gZW52SW5mby5vcy5uYW1lXG4gIGlmIChvc05hbWUubWF0Y2goLyhpUGhvbmV8aVBhZHxpUG9kKS9pKSkge1xuICAgIG9zTmFtZSA9ICdpT1MnXG4gIH1cbiAgZWxzZSBpZiAob3NOYW1lLm1hdGNoKC9BbmRyb2lkL2kpKSB7XG4gICAgb3NOYW1lID0gJ2FuZHJvaWQnXG4gIH1cbiAgY29uc3Qgb3NWZXJzaW9uID0gZW52SW5mby5vcy52ZXJzaW9uLnZhbFxuICBjb25zdCBlbnYgPSB7XG4gICAgcGxhdGZvcm06ICdXZWInLFxuICAgIHdlZXhWZXJzaW9uOiAncHJvY2Vzcy5lbnYuV0VFWF9WRVJTSU9OJyxcbiAgICBsYXlvdXREaXJlY3Rpb246ICdsdHInLFxuICAgIHVzZXJBZ2VudDogbmF2aWdhdG9yLnVzZXJBZ2VudCxcbiAgICBhcHBOYW1lOiBicm93c2VyTmFtZSxcbiAgICBhcHBWZXJzaW9uOiBicm93c2VyVmVyc2lvbixcbiAgICBvc05hbWUsXG4gICAgb3NWZXJzaW9uLFxuICAgIGRldmljZU1vZGVsOiBlbnZJbmZvLm9zLm5hbWUgfHwgbnVsbFxuICB9XG4gIC8qKlxuICAgKiB2aWV3cG9ydEluZm86IHNjYWxlLCBkZXZpY2VXaWR0aCwgZGV2aWNlSGVpZ2h0LiBkcHJcbiAgICovXG4gIHJldHVybiBleHRlbmQodmlld3BvcnRJbmZvLCBlbnYpXG59XG5cbi8vIGNvbnN0IHZpZXdwb3J0SW5mbyA9IGluaXRWaWV3cG9ydCgpXG5cbi8vIDc1MCBieSBkZWZhdWx0IGN1cnJlbnRseVxuLy8gY29uc3Qgc2NhbGUgPSB2aWV3cG9ydEluZm8uc2NhbGVcblxuLy8gY29uc3QgdW5pdHMgPSB7XG4vLyAgIFJFTTogMTIgKiBzY2FsZSxcbi8vICAgVlc6IHZpZXdwb3J0SW5mby5kZXZpY2VXaWR0aCAvIDEwMCxcbi8vICAgVkg6IHZpZXdwb3J0SW5mby5kZXZpY2VIZWlnaHQgLyAxMDAsXG4vLyAgIFZNSU46IE1hdGgubWluKHZpZXdwb3J0SW5mby5kZXZpY2VXaWR0aCwgdmlld3BvcnRJbmZvLmRldmljZUhlaWdodCkgLyAxMDAsXG4vLyAgIFZNQVg6IE1hdGgubWF4KHZpZXdwb3J0SW5mby5kZXZpY2VXaWR0aCwgdmlld3BvcnRJbmZvLmRldmljZUhlaWdodCkgLyAxMDAsXG4vLyAgIENNOiA5NiAvIDIuNTQgKiBzY2FsZSxcbi8vICAgTU06IDk2IC8gMjUuNCAqIHNjYWxlLFxuLy8gICBROiA5NiAvIDI1LjQgLyA0ICogc2NhbGUsXG4vLyAgIElOOiA5NiAqIHNjYWxlLFxuLy8gICBQVDogOTYgLyA3MiAqIHNjYWxlLFxuLy8gICBQQzogOTYgLyA2ICogc2NhbGUsXG4vLyAgIFBYOiBzY2FsZVxuLy8gfVxuXG4vLyBPYmplY3QuZnJlZXplKHVuaXRzKVxuLy8gT2JqZWN0LmZyZWV6ZShlbnYpXG5cbi8vIHdpbmRvdy5DU1NfVU5JVCA9IHVuaXRzXG53aW5kb3cuV1hFbnZpcm9ubWVudCA9IGluaXRFbnYoaW5pdFZpZXdwb3J0KCksIHdpbmRvdy5saWIuZW52KVxuIiwiLypcbiAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZVxuICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb25cbiAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGVcbiAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGVcbiAqIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXG4gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGVcbiAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnNcbiAqIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vKiBnbG9iYWwgVnVlICovXG5cbmltcG9ydCAnLi93eC1lbnYnXG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tICcuLi91dGlscydcbmltcG9ydCBjb25maWcgZnJvbSAnLi4vY29uZmlnJ1xuXG5jb25zdCB3ZWV4TW9kdWxlcyA9IHt9XG5jb25zdCBfcm9vdHMgPSBbXVxuXG5jb25zdCB3ZWV4ID0ge1xuICBfX3Z1ZV9fOiBudWxsLFxuICB1dGlscyxcbiAgLy8gdW5pdHM6IHdpbmRvdy5DU1NfVU5JVCxcbiAgY29uZmlnOiB7XG4gICAgZW52OiB3aW5kb3cuV1hFbnZpcm9ubWVudCxcbiAgICBidW5kbGVVcmw6IGxvY2F0aW9uLmhyZWZcbiAgfSxcblxuICBfY29tcG9uZW50czoge30sXG4gIF9tb2R1bGVzOiB3ZWV4TW9kdWxlcyxcblxuICBfbWV0YToge1xuICAgIG1vdW50ZWQ6IHt9LFxuICAgIHVwZGF0ZWQ6IHt9LFxuICAgIGRlc3Ryb3llZDoge30sXG4gICAgcmVxdWlyZWRNb2R1bGVzOiB7fSxcbiAgICBhcGlDYWxsZWQ6IHt9LFxuICAgIHBlcmY6IHt9XG4gIH0sXG5cbiAgZG9jdW1lbnQ6IHtcbiAgICBib2R5OiB7fVxuICB9LFxuXG4gIHJlcXVpcmVNb2R1bGUgKG1vZHVsZU5hbWUpIHtcbiAgICBjb25zdCBtZXRhTW9kID0gd2VleC5fbWV0YS5yZXF1aXJlZE1vZHVsZXNcbiAgICBpZiAoIW1ldGFNb2RbbW9kdWxlTmFtZV0pIHtcbiAgICAgIG1ldGFNb2RbbW9kdWxlTmFtZV0gPSAwXG4gICAgfVxuICAgIG1ldGFNb2RbbW9kdWxlTmFtZV0rK1xuICAgIHJldHVybiB3ZWV4TW9kdWxlc1ttb2R1bGVOYW1lXVxuICB9LFxuXG4gIHJlZ2lzdGVyTW9kdWxlICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMucmVnaXN0ZXJBcGlNb2R1bGUoLi4uYXJncylcbiAgfSxcblxuICBzdXBwb3J0IChmZWF0dXJlID0gJycpIHtcbiAgICBjb25zdCBtYXRjaCA9IChmZWF0dXJlICsgJycpLm1hdGNoKC9AKGNvbXBvbmVudHxtb2R1bGUpXFwvKFxcdyspKC5cXHcrKT8vKVxuICAgIGlmIChtYXRjaCkge1xuICAgICAgY29uc3QgdHlwZSA9IG1hdGNoWzFdXG4gICAgICBjb25zdCBtb2QgPSBtYXRjaFsyXVxuICAgICAgbGV0IG1ldGhvZCA9IG1hdGNoWzNdXG4gICAgICBtZXRob2QgPSBtZXRob2QgJiYgbWV0aG9kLnJlcGxhY2UoL15cXC4vLCAnJylcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlICdjb21wb25lbnQnOlxuICAgICAgICAgIHJldHVybiB0eXBlb2YgdGhpcy5fY29tcG9uZW50c1ttb2RdICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgfHwgY29uZmlnLndlZXhCdWlsdEluQ29tcG9uZW50cy5pbmRleE9mKG1vZCkgPj0gMFxuICAgICAgICBjYXNlICdtb2R1bGUnOlxuICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IHdlZXhNb2R1bGVzW21vZF1cbiAgICAgICAgICByZXR1cm4gbW9kdWxlICYmIG1ldGhvZCA/ICEhbW9kdWxlW21ldGhvZF0gOiAhIW1vZHVsZVxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihgW3Z1ZS1yZW5kZXJdIGludmFsaWQgYXJndW1lbnQgZm9yIHdlZXguc3VwcG9ydDogJHtmZWF0dXJlfWApXG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgfSxcblxuICBzdXBwb3J0cyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3VwcG9ydC5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gIH0sXG5cbiAgaXNSZWdpc3RlcmVkTW9kdWxlIChtb2R1bGVOYW1lLCBtZXRob2ROYW1lKSB7XG4gICAgY29uc3QgZmVhdHVyZSA9IG1ldGhvZE5hbWUgPyBgJHttb2R1bGVOYW1lfS4ke21ldGhvZE5hbWV9YCA6IG1vZHVsZU5hbWVcbiAgICByZXR1cm4gdGhpcy5zdXBwb3J0KCdAbW9kdWxlLycgKyBmZWF0dXJlKVxuICB9LFxuXG4gIGlzUmVnaXN0ZXJlZENvbXBvbmVudCAoY29tcG9uZW50TmFtZSkge1xuICAgIHJldHVybiB0aGlzLnN1cHBvcnQoJ0Bjb21wb25lbnQvJyArIGNvbXBvbmVudE5hbWUpXG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgbmV3IHZ1ZSBpbnN0YW5jZSBpbiB0aGlzIHdlZXggaW5zdGFuY2UuIFB1dCBpdHMgcm9vdCBlbGVtZW50IGludG8gd2VleC5kb2N1bWVudC5ib2R5LmNoaWxkcmVuLCBzb1xuICAgKiB0aGF0IHVzZXIgY2FuIHVzZSB3ZWV4LmRvY3VtZW50LmJvZHkgdG8gd2FsayB0aHJvdWdoIGFsbCBkb20gc3RydWN0dXJlcyBpbiBhbGwgdnVlIGluc3RhbmNlcyBpbiB0aGUgcGFnZS5cbiAgICovXG4gIHJlZ2lzdGVyVnVlSW5zdGFuY2UgKGluc3RhbmNlKSB7XG4gICAgaWYgKCFpbnN0YW5jZSBpbnN0YW5jZW9mIFZ1ZSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFt2dWUtcmVuZGVyXSByZWdpc3RlclZ1ZUluc3RhbmNlOiBpbnZhbGlkIGluc3RhbmNlLCBub3QgYSB2dWUgaW5zdGFuY2UuYClcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCByb290ID0gaW5zdGFuY2UuJHJvb3RcbiAgICBpZiAoIXJvb3QgfHwgIXJvb3QuJGVsKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgW3Z1ZS1yZW5kZXJdIHJlZ2lzdGVyVnVlSW5zdGFuY2U6IGluc3RhbmNlIGhhcyBubyByb290LmApXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5kb2N1bWVudC5ib2R5LmNoaWxkcmVuLnB1c2gocm9vdC4kZWwpXG4gIH0sXG5cbiAgLy8gQGRlcHJlY2F0ZWRcbiAgcmVxdWlyZSAoLi4uYXJncykge1xuICAgIGNvbnNvbGUubG9nKGBbVnVlIFJlbmRlcl0gXCJ3ZWV4LnJlcXVpcmVcIiBpcyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIFwid2VleC5yZXF1aXJlTW9kdWxlXCIgaW5zdGVhZC5gKVxuICAgIHJldHVybiB0aGlzLnJlcXVpcmVNb2R1bGUoLi4uYXJncylcbiAgfSxcblxuICAvLyBAZGVwcmVjYXRlZFxuICAvLyBUT0RPOiByZW5hbWUgdG8gcmVnaXN0ZXJNb2R1bGVcbiAgcmVnaXN0ZXJBcGlNb2R1bGUgKG5hbWUsIG1vZHVsZSwgbWV0YSkge1xuICAgIGlmICghd2VleE1vZHVsZXNbbmFtZV0pIHtcbiAgICAgIHdlZXhNb2R1bGVzW25hbWVdID0ge31cbiAgICB9XG4gICAgaWYgKCEhbWV0YSAmJiBtZXRhLnJlZ2lzdGVyVHlwZSA9PT0gJ2Fzc2lnbm1lbnQnKSB7XG4gICAgICB3ZWV4TW9kdWxlc1tuYW1lXSA9IG1vZHVsZVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIG1vZHVsZSkge1xuICAgICAgICBpZiAobW9kdWxlLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICB3ZWV4TW9kdWxlc1tuYW1lXVtrZXldID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgY2FsbGVkID0gd2VleC5fbWV0YS5hcGlDYWxsZWRcbiAgICAgICAgICAgIGlmICghY2FsbGVkW25hbWVdKSB7XG4gICAgICAgICAgICAgIGNhbGxlZFtuYW1lXSA9IHt9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjYWxsZWRNb2QgPSBjYWxsZWRbbmFtZV1cbiAgICAgICAgICAgIGlmICghY2FsbGVkTW9kW2tleV0pIHtcbiAgICAgICAgICAgICAgY2FsbGVkTW9kW2tleV0gPSAwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsZWRNb2Rba2V5XSsrXG4gICAgICAgICAgICByZXR1cm4gbW9kdWxlW2tleV0uYXBwbHkod2VleCwgYXJndW1lbnRzKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICByZWdpc3RlckNvbXBvbmVudCAobmFtZSwgY29tcG9uZW50KSB7XG4gICAgaWYgKCF0aGlzLl9fdnVlX18pIHtcbiAgICAgIHJldHVybiBjb25zb2xlLmxvZygnW1Z1ZSBSZW5kZXJdIFZ1ZSBpcyBub3QgZm91bmQuIFBsZWFzZSBpbXBvcnQgVnVlLmpzIGJlZm9yZSByZWdpc3RlciBhIGNvbXBvbmVudC4nKVxuICAgIH1cbiAgICB0aGlzLl9jb21wb25lbnRzW25hbWVdID0gMFxuICAgIGlmIChjb21wb25lbnQuX2Nzcykge1xuICAgICAgY29uc3QgY3NzID0gY29tcG9uZW50Ll9jc3MucmVwbGFjZSgvXFxiWystXT9bXFxkLl0rcmVtOz9cXGIvZywgZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQobSkgKiA3NSAqIHdlZXguY29uZmlnLmVudi5zY2FsZSArICdweCdcbiAgICAgIH0pXG4gICAgICB1dGlscy5hcHBlbmRDc3MoY3NzLCBgd2VleC1jbXAtJHtuYW1lfWApXG4gICAgICBkZWxldGUgY29tcG9uZW50Ll9jc3NcbiAgICB9XG4gICAgdGhpcy5fX3Z1ZV9fLmNvbXBvbmVudChuYW1lLCBjb21wb25lbnQpXG4gIH0sXG5cbiAgLy8gQGRlcHJlY2F0ZWRcbiAgZ2V0Um9vdCAoKSB7fSxcblxuICAvLyBAZGVwcmVjYXRlZFxuICBzZW5kZXI6IHtcbiAgICBwZXJmb3JtQ2FsbGJhY2sgKGNhbGxiYWNrLCBkYXRhLCBrZWVwQWxpdmUpIHtcbiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGRhdGEpXG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgfSxcblxuICAvLyBAZGVwcmVjYXRlZFxuICBpbnN0YWxsIChtb2R1bGUpIHtcbiAgICBtb2R1bGUuaW5pdCh0aGlzKVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3ZWV4LmRvY3VtZW50LmJvZHksICdjaGlsZHJlbicsIHtcbiAgZ2V0ICgpIHsgcmV0dXJuIF9yb290cyB9XG59KVxuXG47IFsnb24nLCAnb25jZScsICdvZmYnLCAnZW1pdCddLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICB3ZWV4W21ldGhvZF0gPSBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIGlmICghdGhpcy5fdnVlKSB7XG4gICAgICB0aGlzLl92dWUgPSBuZXcgdGhpcy5fX3Z1ZV9fKClcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3Z1ZVtgJCR7bWV0aG9kfWBdKC4uLmFyZ3MpXG4gIH1cbn0pXG5cbmV4cG9ydCBkZWZhdWx0IHdlZXhcbiIsIi8qXG4gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGVcbiAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uXG4gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlXG4gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlXG4gKiBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxuICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlXG4gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zXG4gKiB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHtcbiAgLy8gY2FtZWxpemVLZXlzLFxuICAvLyBoeXBoZW5hdGVLZXlzLFxuICBleHRlbmQsXG4gIGV4dGVuZFRydXRoeVxuICAvLyB0cmltQ29tbWVudCxcbiAgLy8gbm9ybWFsaXplU3R5bGUsXG4gIC8vIGF1dG9QcmVmaXgsXG4gIC8vIGlzQXJyYXksXG4gIC8vIGdldFBhcmVudFNjcm9sbGVyLFxuICAvLyBzdXBwb3J0U3RpY2t5LFxuICAvLyBhcHBlbmRDc3Ncbn0gZnJvbSAnLi4vdXRpbHMnXG5cbmZ1bmN0aW9uIGdldElubGluZVN0eWxlICh2bm9kZSkge1xuICBjb25zdCBkYXRhID0gdm5vZGUuZGF0YSB8fCB7fVxuICByZXR1cm4gZXh0ZW5kVHJ1dGh5KHt9LCBkYXRhLnN0YXRpY1N0eWxlLCBkYXRhLnN0eWxlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdENvbXBvbmVudFN0eWxlIChjb250ZXh0KSB7XG4gIHJldHVybiBnZXRDb21wb25lbnRJbmxpbmVTdHlsZShjb250ZXh0KVxuICAvLyByZXR1cm4gZ2V0Q29tcG9uZW50U3R5bGUoY29udGV4dCwgdHJ1ZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbXBvbmVudElubGluZVN0eWxlIChjb250ZXh0KSB7XG4gIGxldCB2bm9kZSA9IGNvbnRleHQgJiYgY29udGV4dC4kdm5vZGVcbiAgaWYgKCF2bm9kZSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50Jykge1xuICAgICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoJ1t2dWUtcmVuZGVyXSBnZXRDb21wb25lbnRTdHlsZSBmYWlsZWQ6IG5vICR2bm9kZSBpbiBjb250ZXh0LicpXG4gICAgfVxuICAgIHJldHVybiB7fVxuICB9XG4gIGNvbnN0IHN0eWxlID0ge31cbiAgd2hpbGUgKHZub2RlKSB7XG4gICAgZXh0ZW5kKHN0eWxlLCBnZXRJbmxpbmVTdHlsZSh2bm9kZSkpXG4gICAgdm5vZGUgPSB2bm9kZS5wYXJlbnRcbiAgfVxuICByZXR1cm4gc3R5bGVcbn1cblxuIiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gIHRyYW5zZm9ybSAoc3R5bGUpIHtcbiAgICBjb25zdCBsaW5lcyA9IHN0eWxlLmxpbmVzXG4gICAgaWYgKGxpbmVzID4gMCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oc3R5bGUsIHtcbiAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgICB0ZXh0T3ZlcmZsb3c6ICdlbGxpcHNpcycsXG4gICAgICAgIFdlYmtpdExpbmVDbGFtcDogbGluZXNcbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiBzdHlsZVxuICB9XG59XG4iLCJjb25zdCB0YWdNYXAgPSB7XG4gIHRleHQ6IHJlcXVpcmUoJy4vdGV4dCcpXG59XG5cbmV4cG9ydHMuZ2V0VHJhbnNmb3JtZXIgPSBmdW5jdGlvbiAodGFnKSB7XG4gIHJldHVybiB0YWdNYXBbdGFnXVxufVxuIiwiY29uc3QgeyBnZXRDb21waWxlciB9ID0gcmVxdWlyZSgnLi9jb21waWxlcicpXG5jb25zdCB7IGdldFRyYW5zZm9ybWVyIH0gPSByZXF1aXJlKCcuL3RyYW5zZm9ybWVyJylcblxuZXhwb3J0cy5nZXRDb21waWxlciA9IGdldENvbXBpbGVyXG5leHBvcnRzLmdldFRyYW5zZm9ybWVyID0gZ2V0VHJhbnNmb3JtZXJcbiIsIi8qXG4gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGVcbiAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uXG4gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlXG4gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlXG4gKiBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxuICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlXG4gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zXG4gKiB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgZ2V0VHJhbnNmb3JtZXIgfSBmcm9tICd3eHYtdHJhbnNmb3JtZXInXG5pbXBvcnQge1xuICBpc0FycmF5LFxuICBpc0RlZixcbiAgaXNQcmltaXRpdmUsXG4gIGRpc3BhdGNoTmF0aXZlRXZlbnRcbn0gZnJvbSAnLi4vdXRpbHMnXG5pbXBvcnQgY29uZmlnIGZyb20gJy4uL2NvbmZpZydcblxuY29uc3Qge1xuICB3ZWV4QnVpbHRJbkNvbXBvbmVudHNcbn0gPSBjb25maWdcblxuY29uc3QgYXBwZWFyRXZlbnRzTWFwID0ge1xuICBhcHBlYXI6ICdhcHBlYXInLFxuICBkaXNhcHBlYXI6ICdkaXNhcHBlYXInLFxuICBvZmZzZXRBcHBlYXI6ICdvZmZzZXQtYXBwZWFyJyxcbiAgb2Zmc2V0RGlzYXBwZWFyOiAnb2Zmc2V0LWRpc2FwcGVhcidcbn1cblxuLyoqXG4gKiByZW1vdmUgdGV4dCBub2RlcyBpbiB0aGUgbm9kZXMgYXJyYXkuXG4gKiBAcGFyYW0gIHtBcnJheX0gbm9kZXNcbiAqIEByZXR1cm4ge0FycmF5fSBub2RlcyB3aXRob3V0IHRleHQgbm9kZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmltVGV4dFZOb2RlcyAodm5vZGVzKSB7XG4gIGlmIChpc0FycmF5KHZub2RlcykpIHtcbiAgICByZXR1cm4gdm5vZGVzLmZpbHRlcih2bm9kZSA9PiAhIXZub2RlLnRhZylcbiAgfVxuICByZXR1cm4gdm5vZGVzXG59XG5cbi8qKlxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIG1ldGhvZCB0byB0cmFuc2Zvcm0gYXJncyBwYXNzZWQgdG8gY3JlYXRlRWxlbWVudFxuICogZm9yIHJlbmRlciBmdW5jdGlvbi5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuLy8gc2hvdWxkIHNoYXJlIHdpdGggcHJlY29tcGlsZXIuXG5jb25zdCBtZXRhTWFwID0ge1xuICBmaWd1cmU6IFsnaW1nJywgJ2ltYWdlJywgJ2dpZicsICdmaWd1cmUnXSxcbiAgcDogWyd0ZXh0JywgJ3AnXSxcbiAgZGl2OiBbJ2NvbnRhaW5lcicsICdkaXYnXSxcbiAgc2VjdGlvbjogWydjZWxsJywgJ2NlbGwtc2xvdCddLFxuICAncmVjeWNsZS1saXN0JzogWydyZWN5Y2xlLWxpc3QnXVxufVxuXG5jb25zdCBjaGVja01hcCA9IE9iamVjdC5rZXlzKG1ldGFNYXApLnJlZHVjZShmdW5jdGlvbiAocHJlLCB0YXJnZXRUYWcpIHtcbiAgY29uc3QgdGFnQXJyID0gbWV0YU1hcFt0YXJnZXRUYWddXG4gIHRhZ0Fyci5mb3JFYWNoKGZ1bmN0aW9uIChmcm9tVGFnKSB7XG4gICAgcHJlW2Zyb21UYWddID0gdGFyZ2V0VGFnXG4gIH0pXG4gIHJldHVybiBwcmVcbn0sIHt9KVxuXG5jb25zdCBfc3RkVGFnTWFwID0ge1xuICBwOiAndGV4dCcsXG4gIGZpZ3VyZTogJ2ltYWdlJyxcbiAgc2VjdGlvbjogJ2NlbGwnXG59XG5mdW5jdGlvbiBnZXRTdGRUYWcgKHRhZykge1xuICBjb25zdCBzdGRUYWcgPSBfc3RkVGFnTWFwW3RhZ11cbiAgcmV0dXJuIHN0ZFRhZyB8fCB0YWdcbn1cblxuY29uc3QgcHJlY29tcGlsZWRDbGFzc01hcCA9IHtcbiAgZGl2OiB7XG4gICAgJ3dlZXgtY3QnOiB0cnVlLFxuICAgICd3ZWV4LWRpdic6IHRydWVcbiAgfSxcbiAgaW1hZ2U6IHtcbiAgICAnd2VleC1lbCc6IHRydWUsXG4gICAgJ3dlZXgtaW1hZ2UnOiB0cnVlXG4gIH0sXG4gIHRleHQ6IHtcbiAgICAnd2VleC1lbCc6IHRydWUsXG4gICAgJ3dlZXgtdGV4dCc6IHRydWVcbiAgfSxcbiAgY2VsbDoge1xuICAgICd3ZWV4LWN0JzogdHJ1ZSxcbiAgICAnd2VleC1jZWxsJzogdHJ1ZVxuICB9LFxuICBhOiB7XG4gICAgJ3dlZXgtY3QnOiB0cnVlLFxuICAgICd3ZWV4LWEnOiB0cnVlXG4gIH1cbn1cblxuZnVuY3Rpb24gaXNQcmVjb21waWxlZCAodGFnKSB7XG4gIHJldHVybiBjb25maWcud2VleEJ1aWx0SW5Db21wb25lbnRzLmluZGV4T2YodGFnKSA+IC0xXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1SZW5kZXIgKGN0eCwgaCkge1xuICByZXR1cm4gZnVuY3Rpb24gKFxuICAgIHRhZyxcbiAgICBkYXRhLFxuICAgIGNoaWxkcmVuLFxuICAgIG5vcm1hbGl6YXRpb25UeXBlLFxuICAgIGFsd2F5c05vcm1hbGl6ZVxuICApIHtcbiAgICBpZiAoaXNBcnJheShkYXRhKSB8fCBpc1ByaW1pdGl2ZShkYXRhKSkge1xuICAgICAgbm9ybWFsaXphdGlvblR5cGUgPSBjaGlsZHJlblxuICAgICAgY2hpbGRyZW4gPSBkYXRhXG4gICAgICBkYXRhID0ge31cbiAgICB9XG4gICAgaWYgKCFpc0RlZihkYXRhKSkge1xuICAgICAgZGF0YSA9IHt9XG4gICAgfVxuICAgIGlmIChpc0RlZihkYXRhLmlzKSkge1xuICAgICAgdGFnID0gZGF0YS5pc1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHRhZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRhdGEgPSB0cmFuc2Zvcm1EYXRhKHRoaXMsIGRhdGEsIHRhZylcbiAgICAgIHRhZyA9IHRyYW5zZm9ybVRhZyh0aGlzLCB0YWcpXG4gICAgfVxuICAgIGVsc2UgeyAgLy8gZGlyZWN0IGNvbXBvbmVudCBvcHRpb25zIC8gY29uc3RydWN0b3JcbiAgICAgIGRhdGEgPSB0cmFuc2Zvcm1EYXRhKHRoaXMsIGRhdGEsIHVuZGVmaW5lZClcbiAgICB9XG4gICAgcmV0dXJuIGguY2FsbChcbiAgICAgIHRoaXMsXG4gICAgICB0YWcsXG4gICAgICBkYXRhLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBub3JtYWxpemF0aW9uVHlwZSxcbiAgICAgIGFsd2F5c05vcm1hbGl6ZVxuICAgIClcbiAgfS5iaW5kKGN0eClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybVRhZyAoY3R4LCB0YWcpIHtcbiAgY29uc3QgZWxlbWVudFRhZyA9IGNoZWNrTWFwW3RhZ11cbiAgcmV0dXJuIGVsZW1lbnRUYWcgfHwgdGFnXG59XG5cbi8qKlxuICogVGVsbCB3aGV0aGVyIGEgZWxlbWVudCBpcyBjb250YWluZWQgaW4gYSBlbGVtZW50IHdobyBoYXNcbiAqIGEgYXR0cmlidXRlICdidWJibGUnPXRydWUuXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbFxuICovXG4vLyBmdW5jdGlvbiBpbkJ1YmJsZSAoZWwpIHtcbi8vICAgaWYgKHR5cGVvZiBlbC5faW5CdWJibGUgPT09ICdib29sZWFuJykge1xuLy8gICAgIHJldHVybiBlbC5faW5CdWJibGVcbi8vICAgfVxuLy8gICBjb25zdCBwYXJlbnRzID0gW11cbi8vICAgbGV0IHBhcmVudCA9IGVsLnBhcmVudEVsZW1lbnRcbi8vICAgbGV0IGluQnViYmxlXG4vLyAgIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50ICE9PSBkb2N1bWVudC5ib2R5KSB7XG4vLyAgICAgaWYgKHR5cGVvZiBwYXJlbnQuX2luQnViYmxlID09PSAnYm9vbGVhbicpIHtcbi8vICAgICAgIGluQnViYmxlID0gcGFyZW50Ll9pbkJ1YmJsZVxuLy8gICAgICAgYnJlYWtcbi8vICAgICB9XG4vLyAgICAgY29uc3QgYXR0ciA9IHBhcmVudC5nZXRBdHRyaWJ1dGUoJ2J1YmJsZScpXG4vLyAgICAgaWYgKGF0dHIgIT09ICcnKSB7XG4vLyAgICAgICBpbkJ1YmJsZSA9IGF0dHIgPT09IHRydWUgfHwgYXR0ciA9PT0gJ3RydWUnXG4vLyAgICAgICBicmVha1xuLy8gICAgIH1cbi8vICAgICBwYXJlbnRzLnB1c2gocGFyZW50KVxuLy8gICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnRFbGVtZW50XG4vLyAgIH1cbi8vICAgZWwuX2luQnViYmxlID0gaW5CdWJibGVcbi8vICAgZm9yIChsZXQgaSA9IDAsIGwgPSBwYXJlbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuLy8gICAgIHBhcmVudHNbaV0uX2luQnViYmxlID0gaW5CdWJibGVcbi8vICAgfVxuLy8gICByZXR1cm4gaW5CdWJibGVcbi8vIH1cblxuZnVuY3Rpb24gYmluZEV2ZW50cyAoY3R4LCBldnRzLCBhdHRycywgdGFnLCBhcHBlYXJBdHRhY2hlZCkge1xuICBmb3IgKGNvbnN0IGtleSBpbiBldnRzKSB7XG4gICAgY29uc3QgYXBwZWFyRXZ0TmFtZSA9IGFwcGVhckV2ZW50c01hcFtrZXldXG4gICAgaWYgKGFwcGVhckV2dE5hbWUpIHtcbiAgICAgIGF0dHJzW2BkYXRhLWV2dC0ke2FwcGVhckV2dE5hbWV9YF0gPSAnJ1xuICAgICAgaWYgKCFhcHBlYXJBdHRhY2hlZC52YWx1ZSkge1xuICAgICAgICBhcHBlYXJBdHRhY2hlZC52YWx1ZSA9IHRydWVcbiAgICAgICAgYXR0cnNbJ3dlZXgtYXBwZWFyJ10gPSAnJ1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGF0dHJzW2BkYXRhLWV2dC0ke2tleX1gXSA9ICcnXG4gICAgICBpZiAoa2V5ICE9PSAnY2xpY2snKSB7XG4gICAgICAgIC8vIHNob3VsZCBzdG9wIHByb3BhZ2F0aW9uIGJ5IGRlZmF1bHQuXG4gICAgICAgIC8vIFRPRE86IHNob3VsZCB0ZXN0IGluQnViYmxlIGZpcnN0LlxuICAgICAgICBjb25zdCBoYW5kbGVyID0gZXZ0c1trZXldXG4gICAgICAgIGlmIChpc0FycmF5KGV2dHNba2V5XSkpIHtcbiAgICAgICAgICBoYW5kbGVyLnVuc2hpZnQoY3R4LiRzdG9wUHJvcGFnYXRpb24pXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZXZ0c1trZXldID0gW2N0eC4kc3RvcFByb3BhZ2F0aW9uLCBoYW5kbGVyXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChldnRzLmNsaWNrKSB7XG4gICAgZXZ0cy53ZWV4JHRhcCA9IGV2dHMuY2xpY2tcbiAgICBldnRzLmNsaWNrID0gY3R4LiRzdG9wT3V0ZXJBXG4gIH1cbiAgaWYgKGV2dHMuc2Nyb2xsKSB7XG4gICAgZXZ0cy53ZWV4JHNjcm9sbCA9IGV2dHMuc2Nyb2xsXG4gICAgZGVsZXRlIGV2dHMuc2Nyb2xsXG4gIH1cbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtT24gKGN0eCwgZGF0YSwgdGFnKSB7XG4gIGxldCB7IG9uLCBuYXRpdmVPbiB9ID0gZGF0YVxuICBpZiAod2VleEJ1aWx0SW5Db21wb25lbnRzLmluZGV4T2YodGFnKSA+IC0xKSB7XG4gICAgLyoqXG4gICAgICogZm9yIGRpdiwgaW1hZ2UsIHRleHQsIGNlbGwsIGEsIC4uLlxuICAgICAqIHVzZXIgc2hvdWxkIGJpbmQgYWxsIGV2ZW50cyB3aXRob3V0IC5uYXRpdmUuXG4gICAgICovXG4gICAgbmF0aXZlT24gPSBudWxsXG4gICAgZGVsZXRlIGRhdGEubmF0aXZlT25cbiAgfVxuICBpZiAoaXNEZWYod2VleC5fY29tcG9uZW50c1t0YWddKSkge1xuICAgIC8qKlxuICAgICAqIGZvciBzbGlkZXIsIGxpc3QsIC4uLlxuICAgICAqIHVzZXIgc2hvdWxkIGJpbmQgZXZlbnRzIHdpdGhvdXQgLm5hdGl2ZS5cbiAgICAgKiBpbiBvdXIgZXZlbnRzIGhhbmRsaW5nLCBhbGwgZXZlbnRzIHNob3VsZCB0cmFuc2ZlciB0b1xuICAgICAqIC5uYXRpdmUgYmluZGluZy5cbiAgICAgKi9cbiAgICBkZWxldGUgZGF0YS5uYXRpdmVPblxuICAgIG5hdGl2ZU9uID0gbnVsbFxuICAgIGlmIChvbikge1xuICAgICAgbmF0aXZlT24gPSBkYXRhLm5hdGl2ZU9uID0gb25cbiAgICB9XG4gICAgb24gPSBudWxsXG4gICAgZGVsZXRlIGRhdGEub25cbiAgfVxuXG4gIGxldCBhdHRycyA9IGRhdGEuYXR0cnNcbiAgaWYgKCFhdHRycykge1xuICAgIGF0dHJzID0gZGF0YS5hdHRycyA9IHt9XG4gIH1cblxuICBjb25zdCBhcHBlYXJBdHRhY2hlZCA9IHtcbiAgICB2YWx1ZTogZmFsc2VcbiAgfVxuICBpZiAob24pIHtcbiAgICBiaW5kRXZlbnRzKGN0eCwgb24sIGF0dHJzLCB0YWcsIGFwcGVhckF0dGFjaGVkKVxuICB9XG4gIGlmIChuYXRpdmVPbikge1xuICAgIGJpbmRFdmVudHMoY3R4LCBuYXRpdmVPbiwgYXR0cnMsIHRhZywgYXBwZWFyQXR0YWNoZWQpXG4gIH1cblxuICAvKipcbiAgICogYmluZGluZyBhIHdlZXgkdGFwIHRvIDxhPiBlbGVtZW50IHRvIHN0b3AgcHJvcGFnYXRpb24gaWYgdGhlcmVcbiAgICogaXMgbm8gYnViYmxlcz10cnVlIGZsYWcgc2hvd2luZyBvbiBwYXJlbnRzLlxuICAgKi9cbiAgaWYgKHRhZyA9PT0gJ2EnKSB7XG4gICAgaWYgKCFvbikge1xuICAgICAgb24gPSBkYXRhLm9uID0ge31cbiAgICB9XG4gICAgLy8gaWYgKCFjaGVja0J1YmJsZShlbCkpIHtcbiAgICBsZXQgZXZ0ID0gb25bJ3dlZXgkdGFwJ11cbiAgICBpZiAoIWV2dCkge1xuICAgICAgb25bJ3dlZXgkdGFwJ10gPSBjdHguJHN0b3BQcm9wYWdhdGlvblxuICAgIH1cbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGV2dCkpIHtcbiAgICAgIGV2dC51bnNoaWZ0KGN0eC4kc3RvcFByb3BhZ2F0aW9uKVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGV2dCA9IFtjdHguJHN0b3BQcm9wYWdhdGlvbiwgZXZ0XVxuICAgIH1cbiAgICAvLyB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtQ2xhc3MgKGRhdGEsIHRhZykge1xuICBsZXQgeyBjbGFzczogY2xhc3NEYXRhIH0gPSBkYXRhXG4gIGNvbnN0IHRhZ0NsYXNzT2JqID0gcHJlY29tcGlsZWRDbGFzc01hcFt0YWddXG4gIGlmICghY2xhc3NEYXRhKSB7XG4gICAgY2xhc3NEYXRhID0gZGF0YS5jbGFzcyA9IFtdXG4gIH1cbiAgaWYgKGNsYXNzRGF0YSAmJiBpc0FycmF5KGNsYXNzRGF0YSkpIHtcbiAgICBkYXRhLmNsYXNzID0gY2xhc3NEYXRhLmNvbmNhdChPYmplY3Qua2V5cyh0YWdDbGFzc09iaikpXG4gIH1cbiAgZWxzZSBpZiAodHlwZW9mIGNsYXNzRGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICBPYmplY3QuYXNzaWduKGNsYXNzRGF0YSwgdGFnQ2xhc3NPYmopXG4gIH1cbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtU3R5bGUgKGN0eCwgZGF0YSwgdGFnKSB7XG4gIGNvbnN0IHsgc3R5bGUgfSA9IGRhdGFcbiAgaWYgKCFzdHlsZSkgeyByZXR1cm4gfVxuICBjb25zdCB0cmFuc2Zvcm1lciA9IGdldFRyYW5zZm9ybWVyKGdldFN0ZFRhZyh0YWcpKVxuICBpZiAodHJhbnNmb3JtZXIpIHtcbiAgICBkYXRhLnN0eWxlID0gY3R4Ll9weDJyZW0odHJhbnNmb3JtZXIudHJhbnNmb3JtKHN0eWxlKSwgNzUpXG4gIH1cbiAgZWxzZSB7XG4gICAgZGF0YS5zdHlsZSA9IGN0eC5fcHgycmVtKHN0eWxlLCA3NSlcbiAgfVxufVxuXG4vKipcbiAqIHRyYW5zZm9ybUF0dHJzOlxuICogIC0gYWRkIHdlZXgtdHlwZSBhdHRycyBmb3IgcHJlY29tcGlsZWRUYWdzLlxuICogIC0gaW1hZ2UucmVzaXplOiB0cmFuc2Zvcm0gdG8gZGlyZWN0aXZlIHdlZXgtcmVzaXplLlxuICovXG5mdW5jdGlvbiB0cmFuc2Zvcm1BdHRycyAoZGF0YSwgdGFnKSB7XG4gIGxldCB7IGF0dHJzLCBkaXJlY3RpdmVzIH0gPSBkYXRhXG4gIGlmICghYXR0cnMpIHtcbiAgICBhdHRycyA9IGRhdGEuYXR0cnMgPSB7fVxuICB9XG4gIGF0dHJzWyd3ZWV4LXR5cGUnXSA9IHRhZ1xuICBpZiAodGFnID09PSAnaW1hZ2UnIHx8IHRhZyA9PT0gJ2dpZicpIHtcbiAgICBjb25zdCB7IHNyYywgcmVzaXplIH0gPSBhdHRyc1xuICAgIGlmIChzcmMpIHtcbiAgICAgIGF0dHJzWydkYXRhLWltZy1zcmMnXSA9IHNyY1xuICAgIH1cbiAgICBpZiAocmVzaXplKSB7XG4gICAgICBpZiAoIWRpcmVjdGl2ZXMpIHtcbiAgICAgICAgZGlyZWN0aXZlcyA9IGRhdGEuZGlyZWN0aXZlcyA9IFtdXG4gICAgICB9XG4gICAgICBkaXJlY3RpdmVzLnB1c2goe1xuICAgICAgICBuYW1lOiAnd2VleC1yZXNpemUnLFxuICAgICAgICB2YWx1ZTogYXR0cnMucmVzaXplXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtRGF0YSAoY3R4LCBkYXRhLCB0YWcpIHtcbiAgaWYgKGlzQXJyYXkoZGF0YSkpIHtcbiAgICAvLyBwYXJhbWV0ZXIgZGF0YSBpcyBvbW1pdGVkLlxuICAgIHJldHVybiBkYXRhXG4gIH1cbiAgY29uc3QgaXNQID0gaXNQcmVjb21waWxlZCh0YWcpXG4gIC8vIGNsYXNzXG4gIGlzUCAmJiB0cmFuc2Zvcm1DbGFzcyhkYXRhLCB0YWcpXG4gIC8vIHN0eWxlXG4gIHRyYW5zZm9ybVN0eWxlKGN0eCwgZGF0YSwgdGFnKVxuICAvLyBhdHRyc1xuICBpc1AgJiYgdHJhbnNmb3JtQXR0cnMoZGF0YSwgdGFnKVxuICAvLyBvblxuICB0cmFuc2Zvcm1PbihjdHgsIGRhdGEsIHRhZylcbiAgcmV0dXJuIGRhdGFcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcE5hdGl2ZUV2ZW50cyAoY3R4LCBtYXApIHtcbiAgY29uc3QgZXZlbnRNYXAgPSB7fVxuICBmb3IgKGNvbnN0IG9yaWdFdmVudCBpbiBtYXApIHtcbiAgICBldmVudE1hcFtvcmlnRXZlbnRdID0gZnVuY3Rpb24gKGV2dCkge1xuICAgICAgY29uc3QgZWwgPSBldnQudGFyZ2V0XG4gICAgICBkaXNwYXRjaE5hdGl2ZUV2ZW50KGVsLCBtYXBbb3JpZ0V2ZW50XSlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGV2ZW50TWFwXG59XG4iLCIvKlxuICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlXG4gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvblxuICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZVxuICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZVxuICogXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcbiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZVxuICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9uc1xuICogdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmV4cG9ydCAqIGZyb20gJy4vc3R5bGUnXG5leHBvcnQgKiBmcm9tICcuL25vZGUnXG4iLCIvKlxuICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlXG4gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvblxuICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZVxuICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZVxuICogXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcbiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZVxuICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9uc1xuICogdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7XG4gIGdldFRocm90dGxlTGF6eWxvYWQsXG4gIHdhdGNoQXBwZWFyLFxuICBkZWJvdW5jZVxufSBmcm9tICcuLi91dGlscydcblxuaW1wb3J0IGNvbmZpZyBmcm9tICcuLi9jb25maWcnXG5jb25zdCBzY3JvbGxhYmxlVHlwZXMgPSBjb25maWcuc2Nyb2xsYWJsZVR5cGVzXG5cbmxldCBsYXp5bG9hZFdhdGNoZWQgPSBmYWxzZVxuZnVuY3Rpb24gd2F0Y2hMYXp5bG9hZCAoKSB7XG4gIGxhenlsb2FkV2F0Y2hlZCA9IHRydWVcbiAgOyBbXG4gICAgJ3Njcm9sbCcsXG4gICAgLy8gJ3RyYW5zaXRpb25lbmQnLFxuICAgIC8vICd3ZWJraXRUcmFuc2l0aW9uRW5kJyxcbiAgICAvLyAnYW5pbWF0aW9uZW5kJyxcbiAgICAvLyAnd2Via2l0QW5pbWF0aW9uRW5kJyxcbiAgICAncmVzaXplJ1xuICBdLmZvckVhY2goZXZ0ID0+IHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihldnQsIGdldFRocm90dGxlTGF6eWxvYWQoMjUsIGRvY3VtZW50LmJvZHkpKVxuICB9KVxuICAvKipcbiAgICogSW4gY2FzZSB0aGUgdXNlcnMgdXNlIHRoZSBib2R5J3Mgb3ZlcmZsb3cgdG8gc2Nyb2xsLiBUaGVuIHRoZSBzY3JvbGxcbiAgICogZXZlbnQgd291bGQgbm90IGJlIHRyaWdnZXJlZCBvbiB0aGUgd2luZG93IG9iamVjdCBidXQgb24gdGhlIGJvZHkuXG4gICAqL1xuICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGdldFRocm90dGxlTGF6eWxvYWQoMjUsIGRvY3VtZW50LmJvZHkpKVxufVxuXG5sZXQgaWRDbnQgPSAwXG5sZXQgYXBwZWFyV2F0Y2hlZCA9IGZhbHNlXG5cbi8qKlxuICogZHVyaW5nIHVwZGF0aW5nLCB0aGUgYXBwZWFyIHdhdGNoZXIgYmluZGluZyBvbiB0aGUgYXBwZWFyV2F0Y2hlZCBjb250ZXh0XG4gKiBzaG91bGQgYmUgdHJpZ2dlcmVkIHdpdGhpbiBhIGRlYm91bmNlZCB3cmFwcGVyLlxuICogSWYgdGhlIHVwZGF0aW5nIGludGVydmFsIGlzIHNob3J0ZXIgdGhlbiA1MCBtcywgdGhlbiB0aGUgYXBwZWFyIGV2ZW50cyB3aWxsXG4gKiBpZ25vcmUgdGhlIGNoYW5nZSBpbiB0aGUgcHJldmlvdXMgNTAgbXMgZHVlIHRvIHRoZSBkZWJvdW5jZSB3cmFwcGVyLlxuICovXG5jb25zdCBkZWJvdW5jZWRXYXRjaEFwcGVhciA9IGRlYm91bmNlKGZ1bmN0aW9uICgpIHtcbiAgd2F0Y2hBcHBlYXIoYXBwZWFyV2F0Y2hlZCwgdHJ1ZSlcbn0sIDUwKVxuXG4vKipcbiAqIGlmIGl0J3MgYSBzY3JvbGxhYmxlIHRhZywgdGhlbiB3YXRjaCBhcHBlYXIgZXZlbnRzIGZvciBpdC5cbiAqL1xuZnVuY3Rpb24gd2F0Y2hBcHBlYXJGb3JTY3JvbGxhYmxlcyAodGFnTmFtZSwgY29udGV4dCkge1xuICAvLyB3aGVuIHRoaXMgaXMgYSBzY3JvbGxlci9saXN0L3dhdGVyZmFsbFxuICBpZiAoc2Nyb2xsYWJsZVR5cGVzLmluZGV4T2YodGFnTmFtZSkgPiAtMSkge1xuICAgIGNvbnN0IHNkID0gY29udGV4dC5zY3JvbGxEaXJlY3Rpb25cbiAgICBpZiAoIXNkIHx8IHNkICE9PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgIGFwcGVhcldhdGNoZWQgPSBjb250ZXh0XG4gICAgICB3YXRjaEFwcGVhcihjb250ZXh0LCB0cnVlKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGJlZm9yZUNyZWF0ZSAoKSB7XG4gICAgaWYgKCFsYXp5bG9hZFdhdGNoZWQpIHtcbiAgICAgIHdhdGNoTGF6eWxvYWQoKVxuICAgIH1cbiAgfSxcblxuICB1cGRhdGVkICgpIHtcbiAgICBjb25zdCBlbCA9IHRoaXMuJGVsXG4gICAgaWYgKCFlbCB8fCBlbC5ub2RlVHlwZSAhPT0gMSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICh0aGlzLl9yb290SWQpIHtcbiAgICAgIGlmIChlbC5jbGFzc05hbWUuaW5kZXhPZignd2VleC1yb290JykgPD0gLTEpIHtcbiAgICAgICAgZWwuY2xhc3NMaXN0LmFkZCgnd2VleC1yb290JylcbiAgICAgICAgZWwuY2xhc3NMaXN0LmFkZCgnd2VleC1jdCcpXG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnZGF0YS13eC1yb290LWlkJywgdGhpcy5fcm9vdElkKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHRhZ05hbWUgPSB0aGlzLiRvcHRpb25zICYmIHRoaXMuJG9wdGlvbnMuX2NvbXBvbmVudFRhZ1xuICAgIGNvbnN0IG1ldGFVcCA9IHdlZXguX21ldGEudXBkYXRlZFxuICAgIGlmICghbWV0YVVwW3RhZ05hbWVdKSB7XG4gICAgICBtZXRhVXBbdGFnTmFtZV0gPSAwXG4gICAgfVxuICAgIG1ldGFVcFt0YWdOYW1lXSsrXG4gICAgLy8gd2lsbCBjaGVjayBhcHBlYXJpbmcgd2hlbiBubyBvdGhlciBjaGFuZ2VzIGluIGxhdGVzdCA1MG1zLlxuICAgIGRlYm91bmNlZFdhdGNoQXBwZWFyKClcbiAgICAvKipcbiAgICAgKiBzaW5jZSB0aGUgdXBkYXRpbmcgb2YgY29tcG9uZW50IG1heSBhZmZlY3QgdGhlIGxheW91dCwgdGhlIGxhenlsb2FkaW5nIHNob3VsZFxuICAgICAqIGJlIGZpcmVkLlxuICAgICAqL1xuICAgIHRoaXMuX2ZpcmVMYXp5bG9hZCgpXG4gIH0sXG5cbiAgbW91bnRlZCAoKSB7XG4gICAgY29uc3QgdGFnTmFtZSA9IHRoaXMuJG9wdGlvbnMgJiYgdGhpcy4kb3B0aW9ucy5fY29tcG9uZW50VGFnXG4gICAgY29uc3QgZWwgPSB0aGlzLiRlbFxuICAgIGlmICghZWwgfHwgZWwubm9kZVR5cGUgIT09IDEpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAodHlwZW9mIHdlZXguX2NvbXBvbmVudHNbdGFnTmFtZV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB3ZWV4Ll9jb21wb25lbnRzW3RhZ05hbWVdKytcbiAgICB9XG4gICAgY29uc3QgbWV0YU10ID0gd2VleC5fbWV0YS5tb3VudGVkXG4gICAgaWYgKCFtZXRhTXRbdGFnTmFtZV0pIHtcbiAgICAgIG1ldGFNdFt0YWdOYW1lXSA9IDBcbiAgICB9XG4gICAgbWV0YU10W3RhZ05hbWVdKytcblxuICAgIHdhdGNoQXBwZWFyRm9yU2Nyb2xsYWJsZXModGFnTmFtZSwgdGhpcylcblxuICAgIC8vIHdoZW4gdGhpcyBpcyB0aGUgcm9vdCBlbGVtZW50IG9mIFZ1ZSBpbnN0YW5jZS5cbiAgICBpZiAodGhpcyA9PT0gdGhpcy4kcm9vdCkge1xuICAgICAgY29uc3Qgcm9vdElkID0gYHd4LXJvb3QtJHtpZENudCsrfWBcbiAgICAgIGlmICghd2VleC5fcm9vdCkge1xuICAgICAgICB3ZWV4Ll9yb290ID0ge31cbiAgICAgIH1cbiAgICAgIHdlZXguX3Jvb3Rbcm9vdElkXSA9IHRoaXNcbiAgICAgIHRoaXMuX3Jvb3RJZCA9IHJvb3RJZFxuICAgICAgaWYgKGVsLm5vZGVUeXBlICE9PSAxKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgZWwuY2xhc3NMaXN0LmFkZCgnd2VleC1yb290JylcbiAgICAgIGVsLmNsYXNzTGlzdC5hZGQoJ3dlZXgtY3QnKVxuICAgICAgZWwuc2V0QXR0cmlidXRlKCdkYXRhLXd4LXJvb3QtaWQnLCByb290SWQpXG5cbiAgICAgIC8qKlxuICAgICAgICogdGhlcmUncyBubyBzY3JvbGxhYmxlIGNvbXBvbmVudCBpbiB0aGlzIHBhZ2UuIFRoYXQgaXMgdG8gc2F5LFxuICAgICAgICogdGhlIHBhZ2UgaXMgdXNpbmcgYm9keSBzY3JvbGxpbmcgaW5zdGVhZCBvZiBzY3JvbGxhYmUgY29tcG9uZW50cy5cbiAgICAgICAqIFRoZW4gdGhlIGFwcGVhciB3YXRjaGVyIHNob3VsZCBiZSBhdHRhY2hlZCBvbiB0aGUgYm9keS5cbiAgICAgICAqL1xuICAgICAgaWYgKCFhcHBlYXJXYXRjaGVkKSB7XG4gICAgICAgIGFwcGVhcldhdGNoZWQgPSB0aGlzXG4gICAgICAgIHdhdGNoQXBwZWFyKHRoaXMsIHRydWUpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2ZpcmVMYXp5bG9hZChlbClcbiAgICB9XG5cbiAgICAvLyBnaXZlIHdhcm5pbmcgZm9yIG5vdCB1c2luZyAkcHJvY2Vzc1N0eWxlIGluIHZ1ZS1sb2FkZXIgY29uZmlnLlxuICAgIC8vIGlmICghd2FybmVkICYmICF3aW5kb3cuX3N0eWxlX3Byb2Nlc3NpbmdfYWRkZWQpIHtcbiAgICAvLyAgIHdhcm5Qcm9jZXNzU3R5bGUoKVxuICAgIC8vIH1cbiAgfSxcblxuICBkZXN0cm95ZWQgKCkge1xuICAgIGNvbnN0IGVsID0gdGhpcy4kZWxcbiAgICBpZiAoIWVsIHx8IGVsLm5vZGVUeXBlICE9PSAxKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgLyoqXG4gICAgICogaWYgdGhlIGRlc3Ryb3llZCBlbGVtZW50IGlzIGFib3ZlIGFub3RoZXIgcGFuZWwgd2l0aCBpbWFnZXMgaW5zaWRlLCBhbmQgdGhlIGltYWdlc1xuICAgICAqIG1vdmVkIGludG8gdGhlIHZpZXdwb3J0LCB0aGVuIHRoZSBsYXp5bG9hZGluZyBzaG91bGQgYmUgdHJpZ2dlcmVkLlxuICAgICAqL1xuICAgIGlmICh0aGlzLl9yb290SWQpIHtcbiAgICAgIGRlbGV0ZSB3ZWV4Ll9yb290W3RoaXMuX3Jvb3RJZF1cbiAgICAgIGRlbGV0ZSB0aGlzLl9yb290SWRcbiAgICB9XG4gICAgY29uc3QgdGFnTmFtZSA9IHRoaXMuJG9wdGlvbnMgJiYgdGhpcy4kb3B0aW9ucy5fY29tcG9uZW50VGFnXG4gICAgaWYgKHR5cGVvZiB3ZWV4Ll9jb21wb25lbnRzW3RhZ05hbWVdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgd2VleC5fY29tcG9uZW50c1t0YWdOYW1lXS0tXG4gICAgfVxuICAgIGNvbnN0IG1ldGFEcyA9IHdlZXguX21ldGEuZGVzdHJveWVkXG4gICAgaWYgKCFtZXRhRHNbdGFnTmFtZV0pIHtcbiAgICAgIG1ldGFEc1t0YWdOYW1lXSA9IDBcbiAgICB9XG4gICAgbWV0YURzW3RhZ05hbWVdKytcbiAgICB0aGlzLl9maXJlTGF6eWxvYWQoKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfZmlyZUxhenlsb2FkIChlbCkge1xuICAgICAgZ2V0VGhyb3R0bGVMYXp5bG9hZCgyNSwgZWwgfHwgZG9jdW1lbnQuYm9keSkoKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgaW5zaWRlQSB9IGZyb20gJy4uL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG1ldGhvZHM6IHtcbiAgICAvLyBkZXByZWNhdGVkLlxuICAgICRzdG9wT3V0dGVyQSAoZSkge1xuICAgICAgcmV0dXJuIHRoaXMuJHN0b3BPdXRlckEoZSlcbiAgICB9LFxuXG4gICAgJHN0b3BPdXRlckEgKGUpIHtcbiAgICAgIGlmIChlICYmIGUucHJldmVudERlZmF1bHQgJiYgZS50YXJnZXQpIHtcbiAgICAgICAgaWYgKGluc2lkZUEoZS50YXJnZXQpKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgJHN0b3BQcm9wYWdhdGlvbiAoZSkge1xuICAgICAgaWYgKGUgJiYgZS5zdG9wUHJvcGFnYXRpb24pIHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLypcbiAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZVxuICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb25cbiAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGVcbiAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGVcbiAqIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXG4gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGVcbiAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnNcbiAqIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IGdldFRyYW5zZm9ybWVyIH0gZnJvbSAnd3h2LXRyYW5zZm9ybWVyJ1xuaW1wb3J0IHsgaXNBcnJheSwgaXNQbGFpbk9iamVjdCB9IGZyb20gJy4uL3V0aWxzJ1xuaW1wb3J0IGNvbmZpZyBmcm9tICcuLi9jb25maWcnXG5jb25zdCB7IGJpbmRpbmdTdHlsZU5hbWVzRm9yUHgyUmVtIH0gPSBjb25maWdcblxuZXhwb3J0IGRlZmF1bHQge1xuICBtZXRob2RzOiB7XG4gICAgX3B4MnJlbSAodmFsdWUsIHJvb3RWYWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuICh2YWx1ZSArICcnKS5yZXBsYWNlKC9bKy1dP1xcZCsoPzouXFxkKik/W3B3XXgvZ2ksIGZ1bmN0aW9uICgkMCkge1xuICAgICAgICAgIHJldHVybiB3ZWV4LnV0aWxzLnB4MnJlbSgkMCwgcm9vdFZhbHVlKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIHdlZXgudXRpbHMucHgycmVtKHZhbHVlICsgJycsIHJvb3RWYWx1ZSlcbiAgICAgIH1cbiAgICAgIGlmIChpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICBmb3IgKGNvbnN0IGsgaW4gdmFsdWUpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB2YWx1ZS5oYXNPd25Qcm9wZXJ0eShrKVxuICAgICAgICAgICAgJiYgYmluZGluZ1N0eWxlTmFtZXNGb3JQeDJSZW0uaW5kZXhPZihrKSA+IC0xXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB2YWx1ZVtrXSA9IHdlZXgudXRpbHMucHgycmVtKHZhbHVlW2tdICsgJycsIHJvb3RWYWx1ZSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICB9XG4gICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICB0aGlzLl9weDJyZW0odmFsdWVbaV0sIHJvb3RWYWx1ZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX3Byb2Nlc3NFeGNsdXNpdmVTdHlsZSAoc3R5bGVPYmosIHJvb3RWYWx1ZSwgdGFnTmFtZSkge1xuICAgICAgY29uc3QgdHJhbnNmb3JtZXIgPSBnZXRUcmFuc2Zvcm1lcih0YWdOYW1lKVxuICAgICAgcmV0dXJuIHRoaXMuX3B4MnJlbShcbiAgICAgICAgdHJhbnNmb3JtZXIudHJhbnNmb3JtKHN0eWxlT2JqKSxcbiAgICAgICAgcm9vdFZhbHVlXG4gICAgICApXG4gICAgfSxcblxuICAgIF9nZXRQYXJlbnRSZWN0ICgpIHtcbiAgICAgIGNvbnN0IGVsID0gdGhpcy4kZWxcbiAgICAgIGNvbnN0IHBhcmVudCA9IGVsICYmIGVsLnBhcmVudEVsZW1lbnRcbiAgICAgIHJldHVybiBwYXJlbnQgJiYgcGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgfVxuICB9XG59XG4iLCIvKlxuICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlXG4gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvblxuICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZVxuICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZVxuICogXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcbiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZVxuICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9uc1xuICogdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLy8gaW5wdXQgYW5kIHRleHRhcmUgaGFzIHNvbWUgY29tbW9uIGFwaSBhbmQgZXZlbnRcbmltcG9ydCB7IGV4dGVuZCwgZGlzcGF0Y2hOYXRpdmVFdmVudCB9IGZyb20gJy4uL3V0aWxzJ1xuXG5jb25zdCBmaW5kRW50ZXJLZXlUeXBlID0gZnVuY3Rpb24gKGtleSkge1xuICBjb25zdCBrZXlzID0gWydkZWZhdWx0JywgJ2dvJywgJ25leHQnLCAnc2VhcmNoJywgJ3NlbmQnXVxuICBpZiAoa2V5cy5pbmRleE9mKGtleSkgPiAtMSkge1xuICAgIHJldHVybiBrZXlcbiAgfVxuICByZXR1cm4gJ2RvbmUnXG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWV0aG9kczoge1xuICAgIGZvY3VzICgpIHtcbiAgICAgIHRoaXMuJGVsICYmIHRoaXMuJGVsLmZvY3VzKClcbiAgICB9LFxuICAgIGJsdXIgKCkge1xuICAgICAgdGhpcy4kZWwgJiYgdGhpcy4kZWwuYmx1cigpXG4gICAgfSxcblxuICAgIHNldFNlbGVjdGlvblJhbmdlIChzdGFydCwgZW5kKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLiRlbC5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kKVxuICAgICAgfVxuICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKGBbdnVlLXJlbmRlcl0gc2V0U2VsZWN0aW9uUmFuZ2UgaXMgbm90IHN1cHBvcnRlZC5gKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFNlbGVjdGlvblJhbmdlIChjYWxsYmFjaykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpXG4gICAgICAgIGNvbnN0IHN0ciA9IHNlbGVjdGlvbi50b1N0cmluZygpXG4gICAgICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0ID0gdGhpcy4kZWwudmFsdWUuaW5kZXhPZihzdHIpXG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvblN0YXJ0ID09PSAtMSA/IHNlbGVjdGlvblN0YXJ0IDogc2VsZWN0aW9uU3RhcnQgKyBzdHIubGVuZ3RoXG4gICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKHtcbiAgICAgICAgICBzZWxlY3Rpb25TdGFydCxcbiAgICAgICAgICBzZWxlY3Rpb25FbmRcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKG5ldyBFcnJvcignW3Z1ZS1yZW5kZXJdIGdldFNlbGVjdGlvbiBpcyBub3Qgc3VwcG9ydGVkLicpKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRFZGl0U2VsZWN0aW9uUmFuZ2UgKGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmdldFNlbGVjdGlvblJhbmdlKGNhbGxiYWNrKVxuICAgIH0sXG5cbiAgICAvLyBzdXBwb3J0IGVudGVyIGtleSBldmVudFxuICAgIGNyZWF0ZUtleWJvYXJkRXZlbnQgKGV2ZW50cykge1xuICAgICAgY29uc3QgY3VzdG9tS2V5VHlwZSA9IHRoaXMucmV0dXJuS2V5VHlwZVxuICAgICAgaWYgKGN1c3RvbUtleVR5cGUpIHtcbiAgICAgICAgY29uc3Qga2V5Ym9hcmRFdmVudHMgPSB7XG4gICAgICAgICAgJ2tleXVwJzogZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBjb2RlID0gZXYua2V5Q29kZVxuICAgICAgICAgICAgbGV0IGtleSA9IGV2LmtleVxuICAgICAgICAgICAgaWYgKGNvZGUgPT09IDEzKSB7XG4gICAgICAgICAgICAgIGlmICgha2V5IHx8IGtleS50b0xvd2VyQ2FzZSgpID09PSAndGFiJykge1xuICAgICAgICAgICAgICAgIGtleSA9ICduZXh0J1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGRpc3BhdGNoTmF0aXZlRXZlbnQoZXYudGFyZ2V0LCAncmV0dXJuJywge1xuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICByZXR1cm5LZXlUeXBlOiBmaW5kRW50ZXJLZXlUeXBlKGN1c3RvbUtleVR5cGUpLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBldi50YXJnZXQudmFsdWVcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnRzID0gZXh0ZW5kKGV2ZW50cywga2V5Ym9hcmRFdmVudHMpXG4gICAgICB9XG4gICAgICByZXR1cm4gZXZlbnRzXG4gICAgfVxuICB9XG59XG4iLCIvKlxuICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlXG4gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvblxuICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZVxuICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZVxuICogXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcbiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZVxuICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9uc1xuICogdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7XG4gIGdldFBhcmVudFNjcm9sbGVyXG59IGZyb20gJy4uL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGRlc3Ryb3llZCAoKSB7XG4gICAgaWYgKCF0aGlzLl9zdGlja3lBZGRlZCkgeyByZXR1cm4gfVxuICAgIGNvbnN0IHNjcm9sbGVyID0gZ2V0UGFyZW50U2Nyb2xsZXIodGhpcylcbiAgICBpZiAoIXNjcm9sbGVyKSB7IHJldHVybiB9XG4gICAgZGVsZXRlIHNjcm9sbGVyLl9zdGlja3lDaGlsZHJlblt0aGlzLl91aWRdXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIF9hZGRTdGlja3kgKCkge1xuICAgICAgY29uc3QgZWwgPSB0aGlzLiRlbFxuICAgICAgaWYgKCFlbCB8fCBlbC5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBbdnVlLXJlbmRlcl0gJGVsIGRvZXNuJ3QgZXhpc3QgdG8gYWRkIHN0aWNreS5gKVxuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgZWwuY2xhc3NMaXN0LmFkZCgnc3RpY2t5JylcbiAgICAgIGlmICghdGhpcy5fcGxhY2Vob2xkZXIpIHtcbiAgICAgICAgdGhpcy5fcGxhY2Vob2xkZXIgPSBlbC5jbG9uZU5vZGUodHJ1ZSlcbiAgICAgIH1cbiAgICAgIHRoaXMuX3BsYWNlaG9sZGVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXG4gICAgICB0aGlzLl9wbGFjZWhvbGRlci5zdHlsZS53aWR0aCA9IHRoaXMuJGVsLm9mZnNldFdpZHRoICsgJ3B4J1xuICAgICAgdGhpcy5fcGxhY2Vob2xkZXIuc3R5bGUuaGVpZ2h0ID0gdGhpcy4kZWwub2Zmc2V0SGVpZ2h0ICsgJ3B4J1xuICAgICAgZWwucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5fcGxhY2Vob2xkZXIsIHRoaXMuJGVsKVxuICAgIH0sXG5cbiAgICBfcmVtb3ZlU3RpY2t5ICgpIHtcbiAgICAgIGNvbnN0IGVsID0gdGhpcy4kZWxcbiAgICAgIGlmICghZWwgfHwgZWwubm9kZVR5cGUgPT09IDEpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgW3Z1ZS1yZW5kZXJdICRlbCBkb2Vzbid0IGV4aXN0IHRvIHJlbW92ZSBzdGlja3kuYClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUoJ3N0aWNreScpXG4gICAgICBpZiAodGhpcy5fcGxhY2Vob2xkZXIpIHtcbiAgICAgICAgdGhpcy5fcGxhY2Vob2xkZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9wbGFjZWhvbGRlcilcbiAgICAgIH1cbiAgICAgIHRoaXMuX3BsYWNlaG9sZGVyID0gbnVsbFxuICAgIH1cbiAgfVxufVxuIiwiLypcbiAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZVxuICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb25cbiAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGVcbiAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGVcbiAqIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXG4gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGVcbiAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnNcbiAqIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgYmFzZSBmcm9tICcuL2Jhc2UnXG5pbXBvcnQgZXZlbnQgZnJvbSAnLi9ldmVudCdcbmltcG9ydCBzdHlsZSBmcm9tICcuL3N0eWxlJ1xuaW1wb3J0IGlucHV0Q29tbW9uIGZyb20gJy4vaW5wdXQtY29tbW9uJ1xuaW1wb3J0IHN0aWNreSBmcm9tICcuL3N0aWNreSdcblxuZXhwb3J0IHtcbiAgYmFzZSxcbiAgZXZlbnQsXG4gIHN0eWxlLFxuICBpbnB1dENvbW1vbixcbiAgc3RpY2t5XG59XG4iLCIvKlxuICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlXG4gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvblxuICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZVxuICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZVxuICogXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcbiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZVxuICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9uc1xuICogdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB3ZWV4IGZyb20gJy4vaW5zdGFuY2UnXG5pbXBvcnQgKiBhcyBjb3JlIGZyb20gJy4uL2NvcmUnXG5cbmltcG9ydCB7IGlucHV0Q29tbW9uIH0gZnJvbSAnLi4vbWl4aW5zJ1xuXG53aW5kb3cuZ2xvYmFsID0gd2luZG93XG53aW5kb3cud2VleCA9IHdlZXhcblxud2VleC5fc3R5bGVNYXAgPSB7fVxuXG47IFsnZ2V0Q29tcG9uZW50SW5saW5lU3R5bGUnLFxuICAnZXh0cmFjdENvbXBvbmVudFN0eWxlJyxcbiAgJ21hcE5hdGl2ZUV2ZW50cycsXG4gICd0cmltVGV4dFZOb2RlcyddXG4gIC5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICB3ZWV4W21ldGhvZF0gPSBjb3JlW21ldGhvZF0uYmluZCh3ZWV4KVxuICB9KVxuXG53ZWV4Lm1peGlucyA9IHtcbiAgaW5wdXRDb21tb25cbn1cbiIsIi8qXG4gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGVcbiAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uXG4gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlXG4gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlXG4gKiBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxuICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlXG4gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zXG4gKiB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHtcbiAgdHJhbnNmb3JtUmVuZGVyXG59IGZyb20gJy4uL2NvcmUvbm9kZSdcbmltcG9ydCB7IGlzRGVmIH0gZnJvbSAnLi4vdXRpbHMnXG5cbmxldCBfaW5pdGVkID0gZmFsc2VcblxuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0ICh3ZWV4KSB7XG4gICAgaWYgKF9pbml0ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBfaW5pdGVkID0gdHJ1ZVxuICAgIGNvbnN0IFZ1ZSA9IHdlZXguX192dWVfX1xuICAgIGNvbnN0IF9yZW5kZXIgPSBWdWUucHJvdG90eXBlLl9yZW5kZXJcbiAgICBWdWUucHJvdG90eXBlLl9yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgd2VleFJlbmRlciA9IHRoaXMuX3dlZXhSZW5kZXJcbiAgICAgIGNvbnN0IHRhZyA9IHRoaXMuJG9wdGlvbnMgJiYgdGhpcy4kb3B0aW9ucy5fY29tcG9uZW50VGFnXG4gICAgICBpZiAoXG4gICAgICAgICF3ZWV4UmVuZGVyXG4gICAgICAgICYmICFpc0RlZih3ZWV4Ll9jb21wb25lbnRzW3RhZ10pXG4gICAgICApIHtcbiAgICAgICAgY29uc3Qgb3JpZ1JlbmRlciA9IHRoaXMuJG9wdGlvbnMucmVuZGVyXG4gICAgICAgIHdlZXhSZW5kZXIgPSB0aGlzLl93ZWV4UmVuZGVyID0gZnVuY3Rpb24gKGgsIC4uLmFyZ3MpIHtcbiAgICAgICAgICByZXR1cm4gb3JpZ1JlbmRlci5jYWxsKHRoaXMsIHRyYW5zZm9ybVJlbmRlcih0aGlzLCBoKSwgLi4uYXJncylcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiRvcHRpb25zLnJlbmRlciA9IHdlZXhSZW5kZXJcbiAgICAgIH1cbiAgICAgIHJldHVybiBfcmVuZGVyLmNhbGwodGhpcylcbiAgICB9XG4gIH1cbn1cbiIsIi8qXG4gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGVcbiAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uXG4gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlXG4gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlXG4gKiBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxuICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlXG4gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zXG4gKiB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0ICcuLi9zdHlsZXMvcmVzZXQuY3NzJ1xuaW1wb3J0ICcuLi9zdHlsZXMvYmFzZS5jc3MnXG5cbmltcG9ydCAnY29yZS1qcy9mbi9hcnJheS9mcm9tJ1xuaW1wb3J0ICdjb3JlLWpzL2ZuL29iamVjdC9hc3NpZ24nXG5pbXBvcnQgJ2NvcmUtanMvZm4vb2JqZWN0L3NldC1wcm90b3R5cGUtb2YnXG5pbXBvcnQgJ2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZydcbmltcG9ydCAnY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3InXG5pbXBvcnQgJ2NvcmUtanMvbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJ1xuaW1wb3J0ICdjb3JlLWpzL21vZHVsZXMvZXM2LnByb21pc2UnXG5cbmltcG9ydCAnLi4vbGliL2dlc3R1cmUnXG5pbXBvcnQgJy4vZ2xvYmFsJ1xuaW1wb3J0IHJlbmRlckZ1bmN0aW9uUGx1Z2luIGZyb20gJy4vcmVuZGVyLWZ1bmN0aW9uJ1xuXG5pZiAoZ2xvYmFsLlZ1ZSkge1xuICBzZXRWdWUoZ2xvYmFsLlZ1ZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFZ1ZSAodnVlKSB7XG4gIGlmICghdnVlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdbVnVlIFJlbmRlcl0gVnVlIG5vdCBmb3VuZC4gUGxlYXNlIG1ha2Ugc3VyZSB2dWUgMi54IHJ1bnRpbWUgaXMgaW1wb3J0ZWQuJylcbiAgfVxuICBpZiAoZ2xvYmFsLndlZXguX192dWVfXykge1xuICAgIHJldHVyblxuICB9XG4gIGdsb2JhbC53ZWV4Ll9fdnVlX18gPSB2dWVcbiAgd2VleC5pbnN0YWxsKHJlbmRlckZ1bmN0aW9uUGx1Z2luKVxuICBjb25zb2xlLmxvZyhgW1Z1ZSBSZW5kZXJdIGluc3RhbGwgVnVlICR7dnVlLnZlcnNpb259LmApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHdlZXhcbiIsIi8qXG4gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGVcbiAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uXG4gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlXG4gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlXG4gKiBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxuICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlXG4gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zXG4gKiB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHdlZXggZnJvbSAnLi93ZWV4J1xuaW1wb3J0IHsgc2V0VnVlIH0gZnJvbSAnLi93ZWV4J1xuaW1wb3J0IHsgYmFzZSwgZXZlbnQsIHN0eWxlLCBzdGlja3kgfSBmcm9tICcuL21peGlucydcblxuLyoqXG4gKiBpbml0IHdlZXguXG4gKiBAcGFyYW0gIHtWdWUkMn0gVnVlOiBWdWUgQ29uc3RydWN0b3IuXG4gKiBAcGFyYW0gIHtvYmplY3R9IG9wdGlvbnM6IGV4dGVuZCB3ZWV4IHBsdWdpbnMuXG4gKiAgICAgICAgIC0gY29tcG9uZW50cy5cbiAqICAgICAgICAgLSBtb2R1bGVzLlxuICovXG5sZXQgX2luaXRlZCA9IGZhbHNlXG5mdW5jdGlvbiBpbml0IChWdWUvKiwgb3B0aW9ucyA9IHt9Ki8pIHtcbiAgaWYgKF9pbml0ZWQpIHsgcmV0dXJuIH1cbiAgX2luaXRlZCA9IHRydWVcblxuICBzZXRWdWUoVnVlKVxuXG4gIFZ1ZS5wcm90b3R5cGUuJGdldENvbmZpZyA9ICgpID0+IHtcbiAgICBjb25zb2xlLndhcm4oJ1tWdWUgUmVuZGVyXSBcInRoaXMuJGdldENvbmZpZ1wiIGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgXCJ3ZWV4LmNvbmZpZ1wiIGluc3RlYWQuJylcbiAgICByZXR1cm4gd2VleC5jb25maWdcbiAgfVxuXG4gIGNvbnN0IGh0bWxSZWdleCA9IC9eaHRtbDovaVxuICBWdWUuY29uZmlnLmlzUmVzZXJ2ZWRUYWcgPSB0YWcgPT4gaHRtbFJlZ2V4LnRlc3QodGFnKVxuICBWdWUuY29uZmlnLnBhcnNlUGxhdGZvcm1UYWdOYW1lID0gdGFnID0+IHRhZy5yZXBsYWNlKGh0bWxSZWdleCwgJycpXG5cbiAgZnVuY3Rpb24gaXNXZWV4VGFnICh0YWcpIHtcbiAgICByZXR1cm4gdHlwZW9mIHdlZXguX2NvbXBvbmVudHNbdGFnXSAhPT0gJ3VuZGVmaW5lZCdcbiAgfVxuICBjb25zdCBvbGRHZXRUYWdOYW1lc3BhY2UgPSBWdWUuY29uZmlnLmdldFRhZ05hbWVzcGFjZVxuICBWdWUuY29uZmlnLmdldFRhZ05hbWVzcGFjZSA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgICBpZiAoaXNXZWV4VGFnKHRhZykpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICByZXR1cm4gb2xkR2V0VGFnTmFtZXNwYWNlKHRhZylcbiAgfVxuXG4gIFZ1ZS5taXhpbihiYXNlKVxuICBWdWUubWl4aW4oZXZlbnQpXG4gIFZ1ZS5taXhpbihzdHlsZSlcbiAgVnVlLm1peGluKHN0aWNreSlcbn1cblxuLy8gYXV0byBpbml0IGluIGRpc3QgbW9kZS5cbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuVnVlKSB7XG4gIGluaXQod2luZG93LlZ1ZSlcbn1cblxud2VleC5pbml0ID0gaW5pdFxuXG5leHBvcnQgZGVmYXVsdCB3ZWV4XG4iLCIvKlxuICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlXG4gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvblxuICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZVxuICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZVxuICogXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcbiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZVxuICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9uc1xuICogdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLyoqXG4gKiBAZmlsZU92ZXJ2aWV3IElucHV0IGNvbXBvbmVudC5cbiAqIFN1cHBvcnQgdi1tb2RlbCBvbmx5IGlmIHZ1ZSB2ZXJzaW9uIGlzIGxhcmdlciB0aGFuIDIuMi4wXG4gKi9cbmltcG9ydCB7IGdldENvbXBvbmVudElubGluZVN0eWxlIH0gZnJvbSAnLi4vLi4vY29yZSdcblxubGV0IG1hcEZvcm1FdmVudHMsIGFwcGVuZENzc1xuXG5jb25zdCBJRF9QUkVGSVhfUExBQ0VIT0xERVJfQ09MT1IgPSAnd2lwdF9wbGNfJ1xuY29uc3QgSURfUFJFRklYX0lOUFVUID0gJ3dpcHRfJ1xubGV0IGlkQ291bnQgPSAwXG5cbmZ1bmN0aW9uIHNldFBsYWNlaG9sZGVyQ29sb3IgKGlucHV0Vm0sIHBsYWNlaG9sZGVyQ29sb3IpIHtcbiAgaWYgKCFwbGFjZWhvbGRlckNvbG9yKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgY29uc3QgdmVuZG9ycyA9IFtcbiAgICAnOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyJyxcbiAgICAnOi1tb3otcGxhY2Vob2xkZXInLFxuICAgICc6Oi1tb3otcGxhY2Vob2xkZXInLFxuICAgICc6LW1zLWlucHV0LXBsYWNlaG9sZGVyJyxcbiAgICAnOnBsYWNlaG9sZGVyLXNob3duJ1xuICBdXG4gIGNvbnN0IGlkID0gaW5wdXRWbS5faWRcbiAgYXBwZW5kQ3NzKFxuICAgIHZlbmRvcnMubWFwKGZ1bmN0aW9uICh2ZW5kb3IsIGlkeCkge1xuICAgICAgcmV0dXJuIGAjJHtJRF9QUkVGSVhfSU5QVVR9JHtpZH0ke3ZlbmRvcnNbaWR4XX17Y29sb3I6JHtwbGFjZWhvbGRlckNvbG9yfTt9YFxuICAgIH0pLmpvaW4oJycpLFxuICAgIGAke0lEX1BSRUZJWF9QTEFDRUhPTERFUl9DT0xPUn0ke2lkfWAsXG4gICAgdHJ1ZSlcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1N0eWxlICh2bSkge1xuICBjb25zdCBzdHlsZXMgPSBnZXRDb21wb25lbnRJbmxpbmVTdHlsZSh2bSlcbiAgY29uc3QgcGhDb2xvciA9IHN0eWxlcy5wbGFjZWhvbGRlckNvbG9yIHx8IHN0eWxlc1sncGxhY2Vob2xkZXItY29sb3InXVxuICBpZiAocGhDb2xvcikge1xuICAgIHNldFBsYWNlaG9sZGVyQ29sb3Iodm0sIHBoQ29sb3IpXG4gIH1cbiAgcmV0dXJuIHN0eWxlc1xufVxuXG5mdW5jdGlvbiBnZXRJbnB1dCAod2VleCkge1xuICBjb25zdCB7IGlucHV0Q29tbW9uIH0gPSB3ZWV4Lm1peGluc1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3dlZXgtaW5wdXQnLFxuICAgIG1peGluczogW2lucHV0Q29tbW9uXSxcbiAgICBwcm9wczoge1xuICAgICAgdHlwZToge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIGRlZmF1bHQ6ICd0ZXh0JyxcbiAgICAgICAgdmFsaWRhdG9yICh2YWx1ZSkge1xuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnZW1haWwnLCAnbnVtYmVyJywgJ3Bhc3N3b3JkJywgJ3NlYXJjaCcsICd0ZWwnLCAndGV4dCcsICd1cmwnLCAnZGF0ZScsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnLCAndGltZSdcbiAgICAgICAgICAgIC8vIHVuc3VwcG9ydGVkIHR5cGU6XG4gICAgICAgICAgICAvLyBidXR0b24sIGNoZWNrYm94LCBjb2xvciwgZmlsZSwgaGlkZGVuLCBpbWFnZSxcbiAgICAgICAgICAgIC8vIG1vbnRoLCByYWRpbywgcmFuZ2UsIHJlc2V0LCBzdWJtaXQsIHdlZWssXG4gICAgICAgICAgXS5pbmRleE9mKHZhbHVlKSAhPT0gLTFcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHZhbHVlOiBTdHJpbmcsXG4gICAgICBwbGFjZWhvbGRlcjogU3RyaW5nLFxuICAgICAgZGlzYWJsZWQ6IHtcbiAgICAgICAgdHlwZTogW1N0cmluZywgQm9vbGVhbl0sXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICB9LFxuICAgICAgYXV0b2ZvY3VzOiB7XG4gICAgICAgIHR5cGU6IFtTdHJpbmcsIEJvb2xlYW5dLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZVxuICAgICAgfSxcbiAgICAgIG1heGxlbmd0aDogW1N0cmluZywgTnVtYmVyXSxcbiAgICAgIHJldHVybktleVR5cGU6IFN0cmluZ1xuICAgIH0sXG5cbiAgICByZW5kZXIgKGNyZWF0ZUVsZW1lbnQpIHtcbiAgICAgIGlmICghdGhpcy5faWQpIHtcbiAgICAgICAgdGhpcy5faWQgPSBpZENvdW50KytcbiAgICAgIH1cbiAgICAgIGNvbnN0IGV2ZW50cyA9IG1hcEZvcm1FdmVudHModGhpcylcbiAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KCdodG1sOmlucHV0Jywge1xuICAgICAgICBhdHRyczoge1xuICAgICAgICAgICd3ZWV4LXR5cGUnOiAnaW5wdXQnLFxuICAgICAgICAgIGlkOiBgJHtJRF9QUkVGSVhfSU5QVVR9JHt0aGlzLl9pZH1gLFxuICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICBkaXNhYmxlZDogKHRoaXMuZGlzYWJsZWQgIT09ICdmYWxzZScgJiYgdGhpcy5kaXNhYmxlZCAhPT0gZmFsc2UpLFxuICAgICAgICAgIGF1dG9mb2N1czogKHRoaXMuYXV0b2ZvY3VzICE9PSAnZmFsc2UnICYmIHRoaXMuYXV0b2ZvY3VzICE9PSBmYWxzZSksXG4gICAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMucGxhY2Vob2xkZXIsXG4gICAgICAgICAgbWF4bGVuZ3RoOiB0aGlzLm1heGxlbmd0aCxcbiAgICAgICAgICAncmV0dXJuS2V5VHlwZSc6IHRoaXMucmV0dXJuS2V5VHlwZVxuICAgICAgICB9LFxuICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlXG4gICAgICAgIH0sXG4gICAgICAgIG9uOiB0aGlzLmNyZWF0ZUtleWJvYXJkRXZlbnQoZXZlbnRzKSxcbiAgICAgICAgc3RhdGljQ2xhc3M6ICd3ZWV4LWlucHV0IHdlZXgtZWwnLFxuICAgICAgICBzdGF0aWNTdHlsZTogcHJvY2Vzc1N0eWxlKHRoaXMpXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQgKHdlZXgpIHtcbiAgICBtYXBGb3JtRXZlbnRzID0gd2VleC51dGlscy5tYXBGb3JtRXZlbnRzXG4gICAgYXBwZW5kQ3NzID0gd2VleC51dGlscy5hcHBlbmRDc3NcblxuICAgIHdlZXgucmVnaXN0ZXJDb21wb25lbnQoJ2lucHV0JywgZ2V0SW5wdXQod2VleCkpXG4gIH1cbn1cbiIsIi8qXG4gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGVcbiAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uXG4gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlXG4gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlXG4gKiBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxuICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlXG4gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zXG4gKiB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0ICcuL3N0eWxlLmNzcydcblxuZnVuY3Rpb24gZ2V0U3dpdGNoICh3ZWV4KSB7XG4gIGNvbnN0IHsgZXh0cmFjdENvbXBvbmVudFN0eWxlIH0gPSB3ZWV4XG4gIGNvbnN0IHsgZGlzcGF0Y2hOYXRpdmVFdmVudCB9ID0gd2VleC51dGlsc1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3dlZXgtc3dpdGNoJyxcbiAgICBwcm9wczoge1xuICAgICAgY2hlY2tlZDoge1xuICAgICAgICB0eXBlOiBbQm9vbGVhbiwgU3RyaW5nXSxcbiAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgIH0sXG4gICAgICBkaXNhYmxlZDoge1xuICAgICAgICB0eXBlOiBbQm9vbGVhbiwgU3RyaW5nXSxcbiAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgIH0sXG4gICAgICAvLyBCb3JkZXIgY29sb3IgIHdoZW4gdGhlIHN3aXRjaCBpcyB0dXJuZWQgb2ZmXG4gICAgICB0aW50Q29sb3I6IFN0cmluZyxcbiAgICAgIC8vIEJhY2tncm91bmQgY29sb3Igd2hlbiB0aGUgc3dpdGNoIGlzIHR1cm5lZCBvbi5cbiAgICAgIG9uVGludENvbG9yOiBTdHJpbmcsXG4gICAgICAvLyBDb2xvciBvZiB0aGUgZm9yZWdyb3VuZCBzd2l0Y2ggZ3JpcC5cbiAgICAgIHRodW1iVGludENvbG9yOiBTdHJpbmdcbiAgICB9LFxuICAgIGRhdGEgKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNDaGVja2VkOiAodGhpcy5jaGVja2VkICE9PSAnZmFsc2UnICYmIHRoaXMuY2hlY2tlZCAhPT0gZmFsc2UpLFxuICAgICAgICBpc0Rpc2FibGVkOiAodGhpcy5kaXNhYmxlZCAhPT0gJ2ZhbHNlJyAmJiB0aGlzLmRpc2FibGVkICE9PSBmYWxzZSlcbiAgICAgIH1cbiAgICB9LFxuICAgIGNvbXB1dGVkOiB7XG4gICAgICB3cmFwcGVyQ2xhc3MgKCkge1xuICAgICAgICBjb25zdCBjbGFzc0FycmF5ID0gWyd3ZWV4LWVsJywgJ3dlZXgtc3dpdGNoJ11cbiAgICAgICAgdGhpcy5pc0NoZWNrZWQgJiYgY2xhc3NBcnJheS5wdXNoKCd3ZWV4LXN3aXRjaC1jaGVja2VkJylcbiAgICAgICAgdGhpcy5pc0Rpc2FibGVkICYmIGNsYXNzQXJyYXkucHVzaCgnd2VleC1zd2l0Y2gtZGlzYWJsZWQnKVxuICAgICAgICByZXR1cm4gY2xhc3NBcnJheS5qb2luKCcgJylcbiAgICAgIH0sXG4gICAgICBtZXJnZVN0eWxlICgpIHtcbiAgICAgICAgY29uc3Qgc3R5bGUgPSBleHRyYWN0Q29tcG9uZW50U3R5bGUodGhpcylcbiAgICAgICAgY29uc3QgeyB0aW50Q29sb3IsIG9uVGludENvbG9yLCBpc0NoZWNrZWQsIGlzRGlzYWJsZWQgfSA9IHRoaXNcblxuICAgICAgICBpZiAoIWlzQ2hlY2tlZCAmJiB0aW50Q29sb3IpIHtcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHN0eWxlLCB7XG4gICAgICAgICAgICBib3JkZXJDb2xvcjogdGludENvbG9yLFxuICAgICAgICAgICAgYm94U2hhZG93OiBgJHt0aW50Q29sb3J9IDAgMCAwIDAgaW5zZXRgXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0NoZWNrZWQgJiYgb25UaW50Q29sb3IpIHtcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHN0eWxlLCB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IG9uVGludENvbG9yLFxuICAgICAgICAgICAgY29sb3I6IG9uVGludENvbG9yLFxuICAgICAgICAgICAgYm9yZGVyQ29sb3I6IG9uVGludENvbG9yLFxuICAgICAgICAgICAgYm94U2hhZG93OiBgJHtvblRpbnRDb2xvcn0gMCAwIDAgMC41MzMzMzNyZW0gaW5zZXRgXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlzRGlzYWJsZWQgJiYgT2JqZWN0LmFzc2lnbihzdHlsZSwge1xuICAgICAgICAgIG9wYWNpdHk6IDAuM1xuICAgICAgICB9KVxuXG4gICAgICAgIHJldHVybiBzdHlsZVxuICAgICAgfSxcbiAgICAgIHNtYWxsU3R5bGUgKCkge1xuICAgICAgICBjb25zdCB7IHRodW1iVGludENvbG9yIH0gPSB0aGlzXG4gICAgICAgIGxldCBzbWFsbFN0eWxlID0ge31cblxuICAgICAgICBpZiAodGh1bWJUaW50Q29sb3IpIHtcbiAgICAgICAgICBzbWFsbFN0eWxlID0ge1xuICAgICAgICAgICAgYmFja2dyb3VuZDogdGh1bWJUaW50Q29sb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNtYWxsU3R5bGVcbiAgICAgIH1cbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgIHRvZ2dsZSAoKSB7XG4gICAgICAgIC8vIFRPRE86IGhhbmRsZSB0aGUgZXZlbnRzXG4gICAgICAgIGlmICghdGhpcy5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgdGhpcy5pc0NoZWNrZWQgPSAhdGhpcy5pc0NoZWNrZWRcbiAgICAgICAgICBkaXNwYXRjaE5hdGl2ZUV2ZW50KHRoaXMuJGVsLCAnY2hhbmdlJywgeyB2YWx1ZTogdGhpcy5pc0NoZWNrZWQgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtb3VudGVkICgpIHtcbiAgICAgIGNvbnN0IGVsID0gdGhpcy4kZWxcbiAgICAgIGlmIChlbCAmJiBlbC5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgICBpZiAoIXRoaXMuX3JlbW92ZUNsaWNrSGFuZGxlcikge1xuICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSBldnQgPT4ge1xuICAgICAgICAgICAgdGhpcy50b2dnbGUoKVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9yZW1vdmVDbGlja0hhbmRsZXIgPSBlbC5yZW1vdmVFdmVudExpc3RlbmVyLmJpbmQoZWwsICd3ZWV4JHRhcCcsIGhhbmRsZXIpXG4gICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignd2VleCR0YXAnLCBoYW5kbGVyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGJlZm9yZURlc3Ryb3kgKCkge1xuICAgICAgY29uc3Qgcm0gPSB0aGlzLl9yZW1vdmVDbGlja0hhbmRsZXJcbiAgICAgIGlmIChybSkge1xuICAgICAgICBybSgpXG4gICAgICAgIGRlbGV0ZSB0aGlzLl9yZW1vdmVDbGlja0hhbmRsZXJcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVuZGVyIChjcmVhdGVFbGVtZW50KSB7XG4gICAgICByZXR1cm4gY3JlYXRlRWxlbWVudCgnc3BhbicsIHtcbiAgICAgICAgYXR0cnM6IHsgJ3dlZXgtdHlwZSc6ICdzd2l0Y2gnIH0sXG4gICAgICAgIHN0YXRpY0NsYXNzOiB0aGlzLndyYXBwZXJDbGFzcyxcbiAgICAgICAgc3RhdGljU3R5bGU6IHRoaXMubWVyZ2VTdHlsZVxuICAgICAgfSwgW2NyZWF0ZUVsZW1lbnQoJ3NtYWxsJywge1xuICAgICAgICBzdGF0aWNDbGFzczogJ3dlZXgtc3dpdGNoLWlubmVyJyxcbiAgICAgICAgc3RhdGljU3R5bGU6IHRoaXMuc21hbGxTdHlsZVxuICAgICAgfSldKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQgKHdlZXgpIHtcbiAgICB3ZWV4LnJlZ2lzdGVyQ29tcG9uZW50KCdzd2l0Y2gnLCBnZXRTd2l0Y2god2VleCkpXG4gIH1cbn1cbiIsIi8qXG4gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGVcbiAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uXG4gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlXG4gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlXG4gKiBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxuICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlXG4gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zXG4gKiB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5jb25zdCBERUZBVUxUX09GRlNFVF9BQ0NVUkFDWSA9IDEwXG5jb25zdCBERUZBVUxUX0xPQURNT1JFX09GRlNFVCA9IDBcblxuZnVuY3Rpb24gZ2V0VGhyb3R0bGVkU2Nyb2xsIChjb250ZXh0KSB7XG4gIGNvbnN0IHNjYWxlID0gd2VleC5jb25maWcuZW52LnNjYWxlXG4gIGlmICghY29udGV4dC5fdGhyb3R0bGVTY3JvbGwpIHtcbiAgICBjb25zdCB3cmFwcGVyID0gY29udGV4dC4kcmVmcy53cmFwcGVyXG4gICAgY29uc3QgaW5uZXIgPSBjb250ZXh0LiRyZWZzLmlubmVyXG4gICAgbGV0IHByZU9mZnNldCA9IChjb250ZXh0LnNjcm9sbERpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnXG4gICAgICA/IHdyYXBwZXIuc2Nyb2xsTGVmdFxuICAgICAgOiB3cmFwcGVyLnNjcm9sbFRvcClcbiAgICAgIHx8IDBcbiAgICBjb250ZXh0Ll90aHJvdHRsZVNjcm9sbCA9IHdlZXgudXRpbHMudGhyb3R0bGUoZnVuY3Rpb24gKGV2dCkge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gY29udGV4dC5zY3JvbGxEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJ1xuICAgICAgICA/IHdyYXBwZXIuc2Nyb2xsTGVmdFxuICAgICAgICA6IHdyYXBwZXIuc2Nyb2xsVG9wXG4gICAgICBjb25zdCBpbmRlbnQgPSBwYXJzZUludChjb250ZXh0Lm9mZnNldEFjY3VyYWN5KSAqIHNjYWxlXG4gICAgICBmdW5jdGlvbiB0cmlnZ2VyU2Nyb2xsICgpIHtcbiAgICAgICAgY29uc3QgcmVjdCA9IGlubmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICAgIGNvbnN0IGV2dE9iaiA9IHtcbiAgICAgICAgICBjb250ZW50U2l6ZTogeyB3aWR0aDogcmVjdC53aWR0aCwgaGVpZ2h0OiByZWN0LmhlaWdodCB9LFxuICAgICAgICAgIGNvbnRlbnRPZmZzZXQ6IHtcbiAgICAgICAgICAgIHg6IHdyYXBwZXIuc2Nyb2xsTGVmdCxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogcG9zaXRpdmUgZGlyZWNpdG9uIGZvciB5LWF4aXMgaXMgZG93bi5cbiAgICAgICAgICAgICAqIHNvIHNob3VsZCB1c2UgbmVnYXRpdmUgb3BlcmF0aW9uIG9uIHNjcm9sbFRvcC5cbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiAgKDAsMCktLS0tLS0tLS0tLS0tLS0+IHhcbiAgICAgICAgICAgICAqICAgICAgIHxcbiAgICAgICAgICAgICAqICAgICAgIHxcbiAgICAgICAgICAgICAqICAgICAgIHxcbiAgICAgICAgICAgICAqICAgICAgIHxcbiAgICAgICAgICAgICAqICAgICAgIHYgeVxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgeTogLXdyYXBwZXIuc2Nyb2xsVG9wXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjb250ZXh0LiRlbCkge1xuICAgICAgICAgIHdlZXgudXRpbHMuZGlzcGF0Y2hOYXRpdmVFdmVudChjb250ZXh0LiRlbCwgJ3dlZXgkc2Nyb2xsJywgZXZ0T2JqKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoTWF0aC5hYnMob2Zmc2V0IC0gcHJlT2Zmc2V0KSA+PSBpbmRlbnQpIHtcbiAgICAgICAgdHJpZ2dlclNjcm9sbCgpXG4gICAgICAgIHByZU9mZnNldCA9IG9mZnNldFxuICAgICAgfVxuICAgIH0sIDE2LCB0cnVlKVxuICB9XG4gIHJldHVybiBjb250ZXh0Ll90aHJvdHRsZVNjcm9sbFxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgbG9hZG1vcmVvZmZzZXQ6IHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICBkZWZhdWx0OiBERUZBVUxUX0xPQURNT1JFX09GRlNFVCxcbiAgICAgIHZhbGlkYXRvciAodmFsdWUpIHtcbiAgICAgICAgY29uc3QgdmFsID0gcGFyc2VJbnQodmFsdWUpXG4gICAgICAgIHJldHVybiAhaXNOYU4odmFsKSAmJiB2YWwgPj0gREVGQVVMVF9MT0FETU9SRV9PRkZTRVRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb2Zmc2V0QWNjdXJhY3k6IHtcbiAgICAgIHR5cGU6IFtOdW1iZXIsIFN0cmluZ10sXG4gICAgICBkZWZhdWx0OiBERUZBVUxUX09GRlNFVF9BQ0NVUkFDWSxcbiAgICAgIHZhbGlkYXRvciAodmFsdWUpIHtcbiAgICAgICAgY29uc3QgdmFsID0gcGFyc2VJbnQodmFsdWUpXG4gICAgICAgIHJldHVybiAhaXNOYU4odmFsKSAmJiB2YWwgPj0gREVGQVVMVF9PRkZTRVRfQUNDVVJBQ1lcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCAoKSB7XG4gICAgLy8gc2hvdWxkIGNhbGwgcmVzZXRMb2FkbW9yZSgpIHRvIGVuYWJsZSBsb2FkbW9yZSBldmVudC5cbiAgICB0aGlzLl9sb2FkbW9yZVJlc2V0ID0gdHJ1ZVxuICB9LFxuXG4gIG1vdW50ZWQgKCkge1xuICAgIHRoaXMucmVsb2FkU3RpY2t5Q2hpbGRyZW4oKVxuICB9LFxuXG4gIHVwZGF0ZWQgKCkge1xuICAgIHRoaXMucmVsb2FkU3RpY2t5Q2hpbGRyZW4oKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICB1cGRhdGVMYXlvdXQgKCkge1xuICAgICAgY29uc3Qgd3JhcHBlciA9IHRoaXMuJHJlZnMud3JhcHBlclxuICAgICAgaWYgKHdyYXBwZXIpIHtcbiAgICAgICAgY29uc3QgcmVjdCA9IHdyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgdGhpcy5fd3JhcHBlcldpZHRoID0gcmVjdC53aWR0aFxuICAgICAgICB0aGlzLl93cmFwcGVySGVpZ2h0ID0gcmVjdC5oZWlnaHRcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlubmVyID0gdGhpcy4kcmVmcy5pbm5lclxuICAgICAgY29uc3QgY2hpbGRyZW4gPSBpbm5lciAmJiBpbm5lci5jaGlsZHJlblxuICAgICAgaWYgKGlubmVyKSB7XG4gICAgICAgIGNvbnN0IHJlY3QgPSBpbm5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICB0aGlzLl9pbm5lcldpZHRoID0gcmVjdC53aWR0aFxuICAgICAgICB0aGlzLl9pbm5lckhlaWdodCA9IHJlY3QuaGVpZ2h0XG4gICAgICB9XG4gICAgICBjb25zdCBsb2FkaW5nRWwgPSB0aGlzLl9sb2FkaW5nICYmIHRoaXMuX2xvYWRpbmcuJGVsXG4gICAgICBjb25zdCByZWZyZXNoRWwgPSB0aGlzLl9yZWZyZXNoICYmIHRoaXMuX3JlZnJlc2guJGVsXG4gICAgICBpZiAobG9hZGluZ0VsKSB7XG4gICAgICAgIHRoaXMuX2lubmVySGVpZ2h0IC09IGxvYWRpbmdFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHRcbiAgICAgIH1cbiAgICAgIGlmIChyZWZyZXNoRWwpIHtcbiAgICAgICAgdGhpcy5faW5uZXJIZWlnaHQgLT0gcmVmcmVzaEVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodFxuICAgICAgfVxuICAgICAgLy8gaW5uZXIgd2lkdGggaXMgYWx3YXlzIHRoZSB2aWV3cG9ydCB3aWR0aCBzb21laG93IGluIGhvcml6b250YWxcbiAgICAgIC8vIHNjb2xsZXIsIHRoZXJlZm9yZSB0aGUgaW5uZXIgd2lkdGggc2hvdWxkIGJlIHJlY2xhY3VsYXRlZC5cbiAgICAgIGlmICh0aGlzLnNjcm9sbERpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnICYmIGNoaWxkcmVuKSB7XG4gICAgICAgIHRoaXMuX2lubmVyV2lkdGggPSB3ZWV4LnV0aWxzLmdldFJhbmdlV2lkdGgoaW5uZXIpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlc2V0TG9hZG1vcmUgKCkge1xuICAgICAgdGhpcy5fbG9hZG1vcmVSZXNldCA9IHRydWVcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogcHJvY2VzcyBzdGlja3kgY2hpbGRyZW4gaW4gc2Nyb2xsYWJsZSBjb21wb25lbnRzLlxuICAgICAqIGN1cnJlbnQgb25seSBzdXBwb3J0IGxpc3QgYW5kIHZlcnRpY2FsIHNjcm9sbGVyLlxuICAgICAqL1xuICAgIHByb2Nlc3NTdGlja3kgKCkge1xuICAgICAgLyoqXG4gICAgICAgKiBjdXJyZW50IGJyb3dzZXIgc3VwcG9ydCAnc3RpY2t5JyBvciAnLXdlYmtpdC1zdGlja3knLCBzbyB0aGVyZSdzIG5vIG5lZWRcbiAgICAgICAqIHRvIGRvIGZ1cnRoZXIgbW9yZS5cbiAgICAgICAqL1xuICAgICAgY29uc3Qgc3RpY2t5Q2hpbGRyZW4gPSB0aGlzLl9zdGlja3lDaGlsZHJlblxuICAgICAgY29uc3QgbGVuID0gc3RpY2t5Q2hpbGRyZW4gJiYgc3RpY2t5Q2hpbGRyZW4ubGVuZ3RoIHx8IDBcbiAgICAgIGlmIChsZW4gPD0gMCkgeyByZXR1cm4gfVxuXG4gICAgICBjb25zdCBvcmlnU3RpY2t5ID0gd2VleC51dGlscy5zdXBwb3J0U3RpY2t5KClcbiAgICAgIC8vIGN1cnJlbnQgb25seSBzdXBwb3J0IGxpc3QgYW5kIHZlcnRpY2FsIHNjcm9sbGVyLlxuICAgICAgaWYgKHRoaXMuc2Nyb2xsRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuJGVsXG4gICAgICBpZiAoIWNvbnRhaW5lcikgeyByZXR1cm4gfVxuICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gY29udGFpbmVyLnNjcm9sbFRvcFxuXG4gICAgICBsZXQgc3RpY2t5Q2hpbGRcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgc3RpY2t5Q2hpbGQgPSBzdGlja3lDaGlsZHJlbltpXVxuICAgICAgICBpZiAob3JpZ1N0aWNreSkge1xuICAgICAgICAgIHRoaXMuYWRkU3RpY2t5KHN0aWNreUNoaWxkLCBvcmlnU3RpY2t5KVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN0aWNreUNoaWxkLl9pbml0T2Zmc2V0VG9wIDwgc2Nyb2xsVG9wKSB7XG4gICAgICAgICAgdGhpcy5hZGRTdGlja3koc3RpY2t5Q2hpbGQpXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVTdGlja3koc3RpY2t5Q2hpbGQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWRkU3RpY2t5IChlbCwgc3VwcG9ydFN0aWNreSkge1xuICAgICAgaWYgKHN1cHBvcnRTdGlja3kpIHtcbiAgICAgICAgZWwuY2xhc3NMaXN0LmFkZCgnd2VleC1pb3Mtc3RpY2t5JylcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoZWwuX3N0aWNreSA9PT0gdHJ1ZSkgcmV0dXJuXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYFt2dWUtcmVuZGVyXSBoZWFkZXIgYWRkIHN0aWNreWAsIGVsKVxuICAgICAgICB9XG4gICAgICAgIGVsLl9zdGlja3kgPSB0cnVlXG4gICAgICAgIGlmICghZWwuX3BsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgY29uc3QgcGxhY2Vob2xkZXIgPSBlbC5jbG9uZU5vZGUodHJ1ZSlcbiAgICAgICAgICBwbGFjZWhvbGRlci5fb3JpZ05vZGUgPSBlbFxuICAgICAgICAgIHBsYWNlaG9sZGVyLmNsYXNzTGlzdC5hZGQoJ3dlZXgtc3RpY2t5LXBsYWNlaG9sZGVyJylcbiAgICAgICAgICBlbC5fcGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlclxuICAgICAgICB9XG4gICAgICAgIGVsLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGVsLl9wbGFjZWhvbGRlciwgZWwpXG4gICAgICAgIGVsLnN0eWxlLndpZHRoID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpLndpZHRoXG4gICAgICAgIGVsLmNsYXNzTGlzdC5hZGQoJ3dlZXgtc3RpY2t5JylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVtb3ZlU3RpY2t5IChlbCkge1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgZWwuX3N0aWNreSA9PT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgfHwgZWwuX3N0aWNreSA9PT0gZmFsc2VcbiAgICAgICkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBbdnVlLXJlbmRlcl0gaGVhZGVyIHJlbW92ZSBzdGlja3lgLCBlbClcbiAgICAgIH1cbiAgICAgIGVsLl9zdGlja3kgPSBmYWxzZVxuICAgICAgZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbC5fcGxhY2Vob2xkZXIpXG4gICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKCd3ZWV4LXN0aWNreScpXG4gICAgfSxcblxuICAgIHJlbG9hZFN0aWNreUNoaWxkcmVuICgpIHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuJGVsXG4gICAgICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuXG4gICAgICBjb25zdCBzdGlja3lDaGlsZHJlbiA9IFtdXG4gICAgICBjb25zdCBjaGlsZHJlbiA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCdbc3RpY2t5XScpXG4gICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuW2ldXG4gICAgICAgIGlmICgvd2VleC1zdGlja3ktcGxhY2Vob2xkZXIvLnRlc3QoY2hpbGQuY2xhc3NOYW1lKSkgeyAgLy8gaXMgYSBwbGFjZWhvbGRlci5cbiAgICAgICAgICBjb25zdCBvcmlnTm9kZSA9IGNoaWxkLl9vcmlnTm9kZVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFvcmlnTm9kZVxuICAgICAgICAgICAgfHwgIW9yaWdOb2RlLnBhcmVudE5vZGVcbiAgICAgICAgICAgIHx8IG9yaWdOb2RlLnBhcmVudE5vZGUgIT09IGNoaWxkLnBhcmVudE5vZGVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNoaWxkLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY2hpbGQpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgeyAgLy8gaXMgYSBzdGlja3kgbm9kZS5cbiAgICAgICAgICBzdGlja3lDaGlsZHJlbi5wdXNoKGNoaWxkKVxuICAgICAgICAgIGlmICghY2hpbGQuX3N0aWNreSkge1xuICAgICAgICAgICAgY2hpbGQuX2luaXRPZmZzZXRUb3AgPSBjaGlsZC5vZmZzZXRUb3BcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuX3N0aWNreUNoaWxkcmVuID0gc3RpY2t5Q2hpbGRyZW5cbiAgICB9LFxuXG4gICAgaGFuZGxlU2Nyb2xsIChldmVudCkge1xuICAgICAgd2VleC51dGlscy5nZXRUaHJvdHRsZUxhenlsb2FkKDI1LCB0aGlzLiRlbCwgJ3Njcm9sbCcpKClcbiAgICAgIGdldFRocm90dGxlZFNjcm9sbCh0aGlzKShldmVudClcblxuICAgICAgdGhpcy5wcm9jZXNzU3RpY2t5KClcblxuICAgICAgLy8gZmlyZSBsb2FkbW9yZSBldmVudC5cbiAgICAgIGNvbnN0IGlubmVyID0gdGhpcy4kcmVmcy5pbm5lclxuICAgICAgaWYgKGlubmVyKSB7XG4gICAgICAgIGNvbnN0IGlubmVyTGVuZ3RoID0gdGhpcy5zY3JvbGxEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJ1xuICAgICAgICAgID8gdGhpcy5faW5uZXJXaWR0aFxuICAgICAgICAgIDogdGhpcy5faW5uZXJIZWlnaHRcbiAgICAgICAgaWYgKCF0aGlzLl9pbm5lckxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuX2lubmVyTGVuZ3RoID0gaW5uZXJMZW5ndGhcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5faW5uZXJMZW5ndGggIT09IGlubmVyTGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5faW5uZXJMZW5ndGggPSBpbm5lckxlbmd0aFxuICAgICAgICAgIHRoaXMuX2xvYWRtb3JlUmVzZXQgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2xvYWRtb3JlUmVzZXQgJiYgdGhpcy5yZWFjaEJvdHRvbSh0aGlzLmxvYWRtb3Jlb2Zmc2V0KSkge1xuICAgICAgICAgIHRoaXMuX2xvYWRtb3JlUmVzZXQgPSBmYWxzZVxuICAgICAgICAgIGNvbnN0IGVsID0gdGhpcy4kZWxcbiAgICAgICAgICBpZiAoZWwpIHtcbiAgICAgICAgICAgIHdlZXgudXRpbHMuZGlzcGF0Y2hOYXRpdmVFdmVudChlbCwgJ2xvYWRtb3JlJylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVhY2hUb3AgKCkge1xuICAgICAgY29uc3Qgd3JhcHBlciA9IHRoaXMuJHJlZnMud3JhcHBlclxuICAgICAgcmV0dXJuICghIXdyYXBwZXIpICYmICh3cmFwcGVyLnNjcm9sbFRvcCA8PSAwKVxuICAgIH0sXG5cbiAgICByZWFjaEJvdHRvbSAob2Zmc2V0KSB7XG4gICAgICBjb25zdCB3cmFwcGVyID0gdGhpcy4kcmVmcy53cmFwcGVyXG4gICAgICBjb25zdCBpbm5lciA9IHRoaXMuJHJlZnMuaW5uZXJcbiAgICAgIG9mZnNldCA9IHBhcnNlSW50KG9mZnNldCB8fCAwKSAqIHdlZXguY29uZmlnLmVudi5zY2FsZVxuXG4gICAgICBpZiAod3JhcHBlciAmJiBpbm5lcikge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLnNjcm9sbERpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnXG4gICAgICAgICAgPyAnd2lkdGgnXG4gICAgICAgICAgOiAnaGVpZ2h0J1xuICAgICAgICBjb25zdCBpbm5lckxlbmd0aCA9IHRoaXNbYF9pbm5lciR7a2V5WzBdLnRvVXBwZXJDYXNlKCl9JHtrZXkuc3Vic3RyKDEpfWBdXG4gICAgICAgIGNvbnN0IHdyYXBwZXJMZW5ndGggPSB0aGlzW2Bfd3JhcHBlciR7a2V5WzBdLnRvVXBwZXJDYXNlKCl9JHtrZXkuc3Vic3RyKDEpfWBdXG4gICAgICAgIGNvbnN0IHNjcm9sbE9mZnNldCA9IHRoaXMuc2Nyb2xsRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgICA/IHdyYXBwZXIuc2Nyb2xsTGVmdFxuICAgICAgICAgIDogd3JhcHBlci5zY3JvbGxUb3BcbiAgICAgICAgcmV0dXJuIHNjcm9sbE9mZnNldCA+PSBpbm5lckxlbmd0aCAtIHdyYXBwZXJMZW5ndGggLSBvZmZzZXRcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBoYW5kbGVUb3VjaFN0YXJ0IChldmVudCkge1xuICAgICAgaWYgKHRoaXMuX2xvYWRpbmcgfHwgdGhpcy5fcmVmcmVzaCkge1xuICAgICAgICBjb25zdCB0b3VjaCA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdXG4gICAgICAgIHRoaXMuX3RvdWNoUGFyYW1zID0ge1xuICAgICAgICAgIHJlYWNoVG9wOiB0aGlzLnJlYWNoVG9wKCksXG4gICAgICAgICAgcmVhY2hCb3R0b206IHRoaXMucmVhY2hCb3R0b20oKSxcbiAgICAgICAgICBzdGFydFRvdWNoRXZlbnQ6IHRvdWNoLFxuICAgICAgICAgIHN0YXJ0WDogdG91Y2gucGFnZVgsXG4gICAgICAgICAgc3RhcnRZOiB0b3VjaC5wYWdlWSxcbiAgICAgICAgICB0aW1lU3RhbXA6IGV2ZW50LnRpbWVTdGFtcFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGhhbmRsZVRvdWNoTW92ZSAoZXZlbnQpIHtcbiAgICAgIGlmICghdGhpcy5fdG91Y2hQYXJhbXMgfHwgIXRoaXMuX3JlZnJlc2ggJiYgIXRoaXMuX2xvYWRpbmcpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBjb25zdCBpbm5lciA9IHRoaXMuJHJlZnMuaW5uZXJcbiAgICAgIGNvbnN0IHsgc3RhcnRZLCByZWFjaFRvcCwgcmVhY2hCb3R0b20gfSA9IHRoaXMuX3RvdWNoUGFyYW1zXG4gICAgICBpZiAoaW5uZXIpIHtcbiAgICAgICAgY29uc3QgdG91Y2ggPSBldmVudC5jaGFuZ2VkVG91Y2hlc1swXVxuICAgICAgICBjb25zdCBvZmZzZXRZID0gdG91Y2gucGFnZVkgLSBzdGFydFlcbiAgICAgICAgY29uc3QgZGlyID0gb2Zmc2V0WSA+IDAgPyAnZG93bicgOiAndXAnXG4gICAgICAgIHRoaXMuX3RvdWNoUGFyYW1zLm9mZnNldFkgPSBvZmZzZXRZXG4gICAgICAgIGlmICh0aGlzLl9yZWZyZXNoICYmIChkaXIgPT09ICdkb3duJykgJiYgcmVhY2hUb3ApIHtcbiAgICAgICAgICB0aGlzLl9yZWZyZXNoLnB1bGxpbmdEb3duKG9mZnNldFkpXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5fbG9hZGluZyAmJiAoZGlyID09PSAndXAnKSAmJiByZWFjaEJvdHRvbSkge1xuICAgICAgICAgIHRoaXMuX2xvYWRpbmcucHVsbGluZ1VwKC1vZmZzZXRZKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGhhbmRsZVRvdWNoRW5kIChldmVudCkge1xuICAgICAgaWYgKCF0aGlzLl90b3VjaFBhcmFtcyB8fCAhdGhpcy5fcmVmcmVzaCAmJiAhdGhpcy5fbG9hZGluZykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNvbnN0IGlubmVyID0gdGhpcy4kcmVmcy5pbm5lclxuICAgICAgY29uc3QgeyBzdGFydFksIHJlYWNoVG9wLCByZWFjaEJvdHRvbSB9ID0gdGhpcy5fdG91Y2hQYXJhbXNcbiAgICAgIGlmIChpbm5lcikge1xuICAgICAgICBjb25zdCB0b3VjaCA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdXG4gICAgICAgIGNvbnN0IG9mZnNldFkgPSB0b3VjaC5wYWdlWSAtIHN0YXJ0WVxuICAgICAgICBjb25zdCBkaXIgPSBvZmZzZXRZID4gMCA/ICdkb3duJyA6ICd1cCdcbiAgICAgICAgdGhpcy5fdG91Y2hQYXJhbXMub2Zmc2V0WSA9IG9mZnNldFlcbiAgICAgICAgaWYgKHRoaXMuX3JlZnJlc2ggJiYgKGRpciA9PT0gJ2Rvd24nKSAmJiByZWFjaFRvcCkge1xuICAgICAgICAgIHRoaXMuX3JlZnJlc2gucHVsbGluZ0VuZCgpXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5fbG9hZGluZyAmJiAoZGlyID09PSAndXAnKSAmJiByZWFjaEJvdHRvbSkge1xuICAgICAgICAgIHRoaXMuX2xvYWRpbmcucHVsbGluZ0VuZCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGRlbGV0ZSB0aGlzLl90b3VjaFBhcmFtc1xuICAgIH1cbiAgfVxufVxuIiwiLypcbiAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZVxuICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb25cbiAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGVcbiAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGVcbiAqIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXG4gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGVcbiAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnNcbiAqIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCBzY3JvbGxhYmxlIGZyb20gJy4vc2Nyb2xsYWJsZSdcblxuZXhwb3J0IHtcbiAgc2Nyb2xsYWJsZVxufVxuIiwiLypcbiAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZVxuICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb25cbiAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGVcbiAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGVcbiAqIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXG4gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGVcbiAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnNcbiAqIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBzY3JvbGxhYmxlIH0gZnJvbSAnLi9taXhpbnMnXG5cbmZ1bmN0aW9uIGdldExpc3QgKHdlZXgpIHtcbiAgY29uc3Qge1xuICAgIGV4dHJhY3RDb21wb25lbnRTdHlsZVxuICB9ID0gd2VleFxuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3dlZXgtbGlzdCcsXG4gICAgbWl4aW5zOiBbc2Nyb2xsYWJsZV0sXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIHdyYXBwZXJDbGFzcyAoKSB7XG4gICAgICAgIGNvbnN0IGNsYXNzQXJyYXkgPSBbJ3dlZXgtbGlzdCcsICd3ZWV4LWxpc3Qtd3JhcHBlcicsICd3ZWV4LWN0J11cbiAgICAgICAgdGhpcy5fcmVmcmVzaCAmJiBjbGFzc0FycmF5LnB1c2goJ3dpdGgtcmVmcmVzaCcpXG4gICAgICAgIHRoaXMuX2xvYWRpbmcgJiYgY2xhc3NBcnJheS5wdXNoKCd3aXRoLWxvYWRpbmcnKVxuICAgICAgICByZXR1cm4gY2xhc3NBcnJheS5qb2luKCcgJylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWV0aG9kczoge1xuICAgICAgY3JlYXRlQ2hpbGRyZW4gKGgpIHtcbiAgICAgICAgY29uc3Qgc2xvdHMgPSB0aGlzLiRzbG90cy5kZWZhdWx0IHx8IFtdXG4gICAgICAgIHRoaXMuX2NlbGxzID0gc2xvdHMuZmlsdGVyKHZub2RlID0+IHtcbiAgICAgICAgICBpZiAoIXZub2RlLnRhZyAmJiAhdm5vZGUuY29tcG9uZW50T3B0aW9ucykgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBoKCdhcnRpY2xlJywge1xuICAgICAgICAgICAgcmVmOiAnaW5uZXInLFxuICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICd3ZWV4LWxpc3QtaW5uZXIgd2VleC1jdCdcbiAgICAgICAgICB9LCB0aGlzLl9jZWxscylcbiAgICAgICAgXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICByZW5kZXIgKGNyZWF0ZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMud2VleFR5cGUgPSAnbGlzdCdcblxuICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZUxheW91dCgpXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4gY3JlYXRlRWxlbWVudCgnbWFpbicsIHtcbiAgICAgICAgcmVmOiAnd3JhcHBlcicsXG4gICAgICAgIGF0dHJzOiB7ICd3ZWV4LXR5cGUnOiAnbGlzdCcgfSxcbiAgICAgICAgc3RhdGljQ2xhc3M6IHRoaXMud3JhcHBlckNsYXNzLFxuICAgICAgICBvbjoge1xuICAgICAgICAgIHNjcm9sbDogdGhpcy5oYW5kbGVTY3JvbGwsXG4gICAgICAgICAgdG91Y2hzdGFydDogdGhpcy5oYW5kbGVUb3VjaFN0YXJ0LFxuICAgICAgICAgIHRvdWNobW92ZTogdGhpcy5oYW5kbGVUb3VjaE1vdmUsXG4gICAgICAgICAgdG91Y2hlbmQ6IHRoaXMuaGFuZGxlVG91Y2hFbmRcbiAgICAgICAgfSxcbiAgICAgICAgc3RhdGljU3R5bGU6IGV4dHJhY3RDb21wb25lbnRTdHlsZSh0aGlzKVxuICAgICAgfSwgdGhpcy5jcmVhdGVDaGlsZHJlbihjcmVhdGVFbGVtZW50KSlcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0ICh3ZWV4KSB7XG4gICAgd2VleC5yZWdpc3RlckNvbXBvbmVudCgnbGlzdCcsIGdldExpc3Qod2VleCkpXG4gIH1cbn1cbiIsIi8qXG4gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGVcbiAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uXG4gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlXG4gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlXG4gKiBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxuICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlXG4gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zXG4gKiB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBzY3JvbGxhYmxlIH0gZnJvbSAnLi9taXhpbnMnXG5cbmZ1bmN0aW9uIGdldFNjcm9sbGVyICh3ZWV4KSB7XG4gIGNvbnN0IHtcbiAgICBleHRyYWN0Q29tcG9uZW50U3R5bGVcbiAgfSA9IHdlZXhcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICd3ZWV4LXNjcm9sbGVyJyxcbiAgICBtaXhpbnM6IFtzY3JvbGxhYmxlXSxcbiAgICBwcm9wczoge1xuICAgICAgc2Nyb2xsRGlyZWN0aW9uOiB7XG4gICAgICAgIHR5cGU6IFtTdHJpbmddLFxuICAgICAgICBkZWZhdWx0OiAndmVydGljYWwnLFxuICAgICAgICB2YWxpZGF0b3IgKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIFsnaG9yaXpvbnRhbCcsICd2ZXJ0aWNhbCddLmluZGV4T2YodmFsdWUpICE9PSAtMVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc2Nyb2xsYWJsZToge1xuICAgICAgICB0eXBlOiBbQm9vbGVhbl0sXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH1cbiAgICB9LFxuICAgIGNvbXB1dGVkOiB7XG4gICAgICB3cmFwcGVyQ2xhc3MgKCkge1xuICAgICAgICBjb25zdCBjbGFzc0FycmF5ID0gWyd3ZWV4LXNjcm9sbGVyJywgJ3dlZXgtc2Nyb2xsZXItd3JhcHBlcicsICd3ZWV4LWN0J11cbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsRGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICBjbGFzc0FycmF5LnB1c2goJ3dlZXgtc2Nyb2xsZXItaG9yaXpvbnRhbCcpXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY2xhc3NBcnJheS5wdXNoKCd3ZWV4LXNjcm9sbGVyLXZlcnRpY2FsJylcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuc2Nyb2xsYWJsZSkge1xuICAgICAgICAgIGNsYXNzQXJyYXkucHVzaCgnd2VleC1zY3JvbGxlci1kaXNhYmxlZCcpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsYXNzQXJyYXkuam9pbignICcpXG4gICAgICB9XG4gICAgfSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgIGNyZWF0ZUNoaWxkcmVuIChoKSB7XG4gICAgICAgIGNvbnN0IHNsb3RzID0gdGhpcy4kc2xvdHMuZGVmYXVsdCB8fCBbXVxuICAgICAgICB0aGlzLl9jZWxscyA9IHNsb3RzLmZpbHRlcih2bm9kZSA9PiB7XG4gICAgICAgICAgaWYgKCF2bm9kZS50YWcgJiYgIXZub2RlLmNvbXBvbmVudE9wdGlvbnMpIHJldHVybiBmYWxzZVxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgaCgnYXJ0aWNsZScsIHtcbiAgICAgICAgICAgIHJlZjogJ2lubmVyJyxcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAnd2VleC1zY3JvbGxlci1pbm5lciB3ZWV4LWN0J1xuICAgICAgICAgIH0sIHRoaXMuX2NlbGxzKVxuICAgICAgICBdXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlbmRlciAoY3JlYXRlRWxlbWVudCkge1xuICAgICAgdGhpcy53ZWV4VHlwZSA9ICdzY3JvbGxlcidcblxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIC8vIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50Jykge1xuICAgICAgLy8gICB2YWxpZGF0ZVN0eWxlcygnc2Nyb2xsZXInLCB0aGlzLiR2bm9kZS5kYXRhICYmIHRoaXMuJHZub2RlLmRhdGEuc3RhdGljU3R5bGUpXG4gICAgICAvLyB9XG5cbiAgICAgIHRoaXMuX2NlbGxzID0gdGhpcy4kc2xvdHMuZGVmYXVsdCB8fCBbXVxuICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZUxheW91dCgpXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4gY3JlYXRlRWxlbWVudCgnbWFpbicsIHtcbiAgICAgICAgcmVmOiAnd3JhcHBlcicsXG4gICAgICAgIGF0dHJzOiB7ICd3ZWV4LXR5cGUnOiAnc2Nyb2xsZXInIH0sXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgc2Nyb2xsOiB0aGlzLmhhbmRsZVNjcm9sbCxcbiAgICAgICAgICB0b3VjaHN0YXJ0OiB0aGlzLmhhbmRsZVRvdWNoU3RhcnQsXG4gICAgICAgICAgdG91Y2htb3ZlOiB0aGlzLmhhbmRsZVRvdWNoTW92ZSxcbiAgICAgICAgICB0b3VjaGVuZDogdGhpcy5oYW5kbGVUb3VjaEVuZFxuICAgICAgICB9LFxuICAgICAgICBzdGF0aWNDbGFzczogdGhpcy53cmFwcGVyQ2xhc3MsXG4gICAgICAgIHN0YXRpY1N0eWxlOiBleHRyYWN0Q29tcG9uZW50U3R5bGUodGhpcylcbiAgICAgIH0sIHRoaXMuY3JlYXRlQ2hpbGRyZW4oY3JlYXRlRWxlbWVudCkpXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdCAod2VleCkge1xuICAgIHdlZXgucmVnaXN0ZXJDb21wb25lbnQoJ3Njcm9sbGVyJywgZ2V0U2Nyb2xsZXIod2VleCkpXG4gIH1cbn1cbiIsIi8qXG4gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGVcbiAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uXG4gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlXG4gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlXG4gKiBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxuICogS0lORCwgIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZVxuICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9uc1xuICogdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IHdhdGVyZmFsbFxuICogTk9URTogb25seSBzdXBwb3J0IGZ1bGwgc2NyZWVuIHdpZHRoIHdhdGVyZmFsbC5cbiAqL1xuXG5pbXBvcnQgeyBzY3JvbGxhYmxlIH0gZnJvbSAnLi9taXhpbnMnXG5cbmNvbnN0IE5PUk1BTF9HQVBfU0laRSA9IDMyXG5jb25zdCBERUZBVUxUX0NPTFVNTl9DT1VOVCA9IDFcblxuZnVuY3Rpb24gZ2V0V2F0ZXJmYWxsICh3ZWV4KSB7XG4gIGNvbnN0IHtcbiAgICBleHRyYWN0Q29tcG9uZW50U3R5bGVcbiAgfSA9IHdlZXhcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICd3ZWV4LXdhdGVyZmFsbCcsXG4gICAgbWl4aW5zOiBbc2Nyb2xsYWJsZV0sXG4gICAgcHJvcHM6IHtcbiAgICAgIC8qKlxuICAgICAgICogc3BlY2lmaWVkIGdhcCBzaXplLlxuICAgICAgICogdmFsdWUgY2FuIGJlIG51bWJlciBvciAnbm9ybWFsJy4gJ25vcm1hbCcgKDMycHgpIGJ5IGRlZmF1bHQuXG4gICAgICAgKi9cbiAgICAgIGNvbHVtbkdhcDoge1xuICAgICAgICB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLFxuICAgICAgICBkZWZhdWx0OiAnbm9ybWFsJyxcbiAgICAgICAgdmFsaWRhdG9yICh2YWwpIHtcbiAgICAgICAgICBpZiAoIXZhbCB8fCB2YWwgPT09ICdub3JtYWwnKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICB2YWwgPSBwYXJzZUludCh2YWwpXG4gICAgICAgICAgcmV0dXJuICFpc05hTih2YWwpICYmIHZhbCA+IDBcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8qKlxuICAgICAgICogdGhlIG1heGltdW0gY29sdW1uIGNvdW50cy5cbiAgICAgICAqIHZhbHVlIGNhbiBiZSBudW1iZXIgb3IgJ2F1dG8nLiAxIGJ5IGRlZmF1bHQuXG4gICAgICAgKi9cbiAgICAgIGNvbHVtbkNvdW50OiB7XG4gICAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICAgIGRlZmF1bHQ6IERFRkFVTFRfQ09MVU1OX0NPVU5ULFxuICAgICAgICB2YWxpZGF0b3IgKHZhbCkge1xuICAgICAgICAgIHZhbCA9IHBhcnNlSW50KHZhbClcbiAgICAgICAgICByZXR1cm4gIWlzTmFOKHZhbCkgJiYgdmFsID4gMFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLyoqXG4gICAgICAgKiB0aGUgbWltaW11bSBjb2x1bW4gd2lkdGguXG4gICAgICAgKiB2YWx1ZSBjYW4gYmUgbnVtYmVyIG9yICdhdXRvJy4gJ2F1dG8nIGJ5IGRlZmF1bHQuXG4gICAgICAgKi9cbiAgICAgIGNvbHVtbldpZHRoOiB7XG4gICAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICAgIGRlZmF1bHQ6ICdhdXRvJyxcbiAgICAgICAgdmFsaWRhdG9yICh2YWwpIHtcbiAgICAgICAgICBpZiAoIXZhbCB8fCB2YWwgPT09ICdhdXRvJykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFsID0gcGFyc2VJbnQodmFsKVxuICAgICAgICAgIHJldHVybiAhaXNOYU4odmFsKSAmJiB2YWwgPiAwXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbW91bnRlZCAoKSB7XG4gICAgICB0aGlzLl9uZXh0VGljaygpXG4gICAgfSxcblxuICAgIHVwZGF0ZWQgKCkge1xuICAgICAgdGhpcy4kbmV4dFRpY2sodGhpcy5fbmV4dFRpY2soKSlcbiAgICB9LFxuXG4gICAgbWV0aG9kczoge1xuICAgICAgX2NyZWF0ZUNoaWxkcmVuIChoLCByb290U3R5bGUpIHtcbiAgICAgICAgY29uc3Qgc2xvdHMgPSAodGhpcy4kc2xvdHMuZGVmYXVsdCB8fCBbXSkuc2xpY2UoKVxuICAgICAgICB0aGlzLl9oZWFkZXJzID0gW11cbiAgICAgICAgdGhpcy5fZm9vdGVycyA9IFtdXG4gICAgICAgIHRoaXMuX290aGVycyA9IFtdXG4gICAgICAgIGNvbnN0IGxlbiA9IHNsb3RzLmxlbmd0aFxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBjb25zdCB2bm9kZSA9IHNsb3RzW2ldXG4gICAgICAgICAgY29uc3QgdGFnID1cbiAgICAgICAgICAgIHZub2RlLmNvbXBvbmVudE9wdGlvbnNcbiAgICAgICAgICAgICYmIHZub2RlLmNvbXBvbmVudE9wdGlvbnMudGFnXG4gICAgICAgICAgICB8fCB2bm9kZS50YWdcbiAgICAgICAgICBpZiAodGFnID09PSAncmVmcmVzaCcgfHwgdGFnID09PSAnbG9hZGluZycpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0YWcgPT09ICdzZWN0aW9uJykgeyAgLy8gY2VsbFxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRhZyA9PT0gJ2hlYWRlcicpIHtcbiAgICAgICAgICAgIHRoaXMuX2hlYWRlcnMucHVzaCh2bm9kZSlcbiAgICAgICAgICAgIHNsb3RzW2ldID0gbnVsbCAvLyBzaG91bGQgbm90IGluY2x1ZGVkIGluIGZvb3Rlci5cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gbGVuIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICBjb25zdCB2bm9kZSA9IHNsb3RzW2ldXG4gICAgICAgICAgaWYgKCF2bm9kZSkgeyBjb250aW51ZSB9ICAvLyBhbHJlYWR5IHRha2VuIGJ5IGhlYWRlci5cbiAgICAgICAgICBjb25zdCB0YWcgPVxuICAgICAgICAgICAgdm5vZGUuY29tcG9uZW50T3B0aW9uc1xuICAgICAgICAgICAgJiYgdm5vZGUuY29tcG9uZW50T3B0aW9ucy50YWdcbiAgICAgICAgICAgIHx8IHZub2RlLnRhZ1xuICAgICAgICAgIGlmICh0YWcgPT09ICdyZWZyZXNoJyB8fCB0YWcgPT09ICdsb2FkaW5nJykge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRhZyA9PT0gJ3NlY3Rpb24nKSB7IC8vIGNlbGxcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0YWcgPT09ICdoZWFkZXInKSB7XG4gICAgICAgICAgICB0aGlzLl9mb290ZXJzLnB1c2godm5vZGUpXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2VsbHMgPSBzbG90cy5maWx0ZXIodm5vZGUgPT4ge1xuICAgICAgICAgIGlmICghdm5vZGUpIHJldHVybiBmYWxzZVxuICAgICAgICAgIGNvbnN0IGNtcE9wdHMgPSB2bm9kZS5jb21wb25lbnRPcHRpb25zXG4gICAgICAgICAgaWYgKCF2bm9kZS50YWcgJiYgIWNtcE9wdHMpIHJldHVybiBmYWxzZVxuICAgICAgICAgIGNvbnN0IHRhZyA9IGNtcE9wdHMgJiYgY21wT3B0cy50YWcgfHwgdm5vZGUudGFnXG4gICAgICAgICAgaWYgKHRhZyA9PT0gJ3JlZnJlc2gnIHx8IHRhZyA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgICAgICAgICB0aGlzW2BfJHt0YWd9YF0gPSB2bm9kZVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0YWcgIT09ICdzZWN0aW9uJykge1xuICAgICAgICAgICAgdGhpcy5fb3RoZXJzLnB1c2godm5vZGUpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfSlcblxuICAgICAgICB0aGlzLl9yZUNhbGMocm9vdFN0eWxlKVxuICAgICAgICB0aGlzLl9nZW5Db2x1bW5zKGgpXG4gICAgICAgIGxldCBjaGlsZHJlbiA9IFtdXG4gICAgICAgIHRoaXMuX3JlZnJlc2ggJiYgY2hpbGRyZW4ucHVzaCh0aGlzLl9yZWZyZXNoKVxuICAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuLmNvbmNhdCh0aGlzLl9oZWFkZXJzKVxuICAgICAgICAvLyAuY29uY2F0KHRoaXMuX290aGVycylcbiAgICAgICAgY2hpbGRyZW4ucHVzaChoKCdodG1sOmRpdicsIHtcbiAgICAgICAgICByZWY6ICdjb2x1bW5zJyxcbiAgICAgICAgICBzdGF0aWNDbGFzczogJ3dlZXgtd2F0ZXJmYWxsLWlubmVyLWNvbHVtbnMgd2VleC1jdCdcbiAgICAgICAgfSwgdGhpcy5fY29sdW1ucykpXG4gICAgICAgIGNoaWxkcmVuLnB1c2goaCgnaHRtbDpkaXYnLCB7XG4gICAgICAgICAgcmVmOiAnZm9vdGVycycsXG4gICAgICAgICAgc3RhdGljQ2xhc3M6ICd3ZWV4LXdhdGVyZmFsbC1mb290ZXJzIHdlZXgtY3QnXG4gICAgICAgIH0sIHRoaXMuX2Zvb3RlcnMpKVxuICAgICAgICB0aGlzLl9sb2FkaW5nICYmIGNoaWxkcmVuLnB1c2godGhpcy5fbG9hZGluZylcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBoKCdhcnRpY2xlJywge1xuICAgICAgICAgICAgcmVmOiAnaW5uZXInLFxuICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICd3ZWV4LXdhdGVyZmFsbC1pbm5lciB3ZWV4LWN0J1xuICAgICAgICAgIH0sIGNoaWxkcmVuKVxuICAgICAgICBdXG4gICAgICB9LFxuXG4gICAgICBfcmVDYWxjIChyb290U3R5bGUpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE5PVEU6IGNvbHVtbkdhcCBhbmQgY29sdW1uV2lkdGggY2FuJ3QgYm90aCBiZSBhdXRvLlxuICAgICAgICAgKiBOT1RFOiB0aGUgZm9ybXVsYTpcbiAgICAgICAgICogIHRvdGFsV2lkdGggPSBuICogdyArIChuIC0gMSkgKiBnYXBcbiAgICAgICAgICogMS4gaWYgY29sdW1uQ291bnQgPSBuIHRoZW4gY2FsYyB3XG4gICAgICAgICAqIDIuIGlmIGNvbHVtbldpZHRoID0gdyB0aGVuIGNhbGMgblxuICAgICAgICAgKiAzLiBpZiBjb2x1bW5XaWR0aCA9IHcgYW5kIGNvbHVtbkNvdW50ID0gbiB0aGVuIGNhbGMgdG90YWxXaWR0aFxuICAgICAgICAgKiAgICAzLjEgaWYgdG90YWxXaWR0aCA8IGN0V2lkdGggdGhlbiBpbmNyZWFzZSBjb2x1bW5XaWR0aFxuICAgICAgICAgKiAgICAzLjIgaWYgdG90YWxXaWR0aCA+IGN0V2lkdGggdGhlbiBkZWNyZWFzZSBjb2x1bW5Db3VudFxuICAgICAgICAgKi9cbiAgICAgICAgbGV0IHdpZHRoLCBnYXAsIGNudCwgY3RXaWR0aFxuICAgICAgICBjb25zdCBzY2FsZSA9IHdlZXguY29uZmlnLmVudi5zY2FsZVxuICAgICAgICBjb25zdCBlbCA9IHRoaXMuJGVsXG4gICAgICAgIGZ1bmN0aW9uIGdldEN0V2lkdGggKHdpZHRoLCBzdHlsZSkge1xuICAgICAgICAgIGNvbnN0IHBhZGRpbmcgPSBzdHlsZS5wYWRkaW5nXG4gICAgICAgICAgICA/IHBhcnNlSW50KHN0eWxlLnBhZGRpbmcpICogMlxuICAgICAgICAgICAgOiBwYXJzZUludChzdHlsZS5wYWRkaW5nTGVmdCB8fCAwKSArIHBhcnNlSW50KHN0eWxlLnBhZGRpbmdSaWdodCB8fCAwKVxuICAgICAgICAgIHJldHVybiB3aWR0aCAtIHBhZGRpbmdcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWwgJiYgZWwubm9kZVR5cGUgPT09IDEpIHsgLy8gYWxyZWFkeSBtb3VudGVkXG4gICAgICAgICAgY29uc3QgY3N0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpXG4gICAgICAgICAgY3RXaWR0aCA9IGdldEN0V2lkdGgoZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgsIGNzdHlsZSlcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHsgLy8gbm90IG1vdW50ZWQuXG4gICAgICAgICAgLy8gb25seSBzdXBwb3J0IGZ1bGwgc2NyZWVuIHdpZHRoIGZvciB3YXRlcmZhbGwgY29tcG9uZW50LlxuICAgICAgICAgIGN0V2lkdGggPSBnZXRDdFdpZHRoKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCwgcm9vdFN0eWxlKVxuICAgICAgICB9XG5cbiAgICAgICAgZ2FwID0gdGhpcy5jb2x1bW5HYXBcbiAgICAgICAgaWYgKGdhcCAmJiBnYXAgIT09ICdub3JtYWwnKSB7XG4gICAgICAgICAgZ2FwID0gcGFyc2VJbnQoZ2FwKVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGdhcCA9IE5PUk1BTF9HQVBfU0laRVxuICAgICAgICB9XG4gICAgICAgIGdhcCA9IGdhcCAqIHNjYWxlXG5cbiAgICAgICAgd2lkdGggPSB0aGlzLmNvbHVtbldpZHRoXG4gICAgICAgIGNudCA9IHRoaXMuY29sdW1uQ291bnRcbiAgICAgICAgaWYgKHdpZHRoICYmIHdpZHRoICE9PSAnYXV0bycpIHtcbiAgICAgICAgICB3aWR0aCA9IHBhcnNlSW50KHdpZHRoKSAqIHNjYWxlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNudCAmJiBjbnQgIT09ICdhdXRvJykge1xuICAgICAgICAgIGNudCA9IHBhcnNlSW50KGNudClcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDAuIGlmICFjb2x1bW5Db3VudCAmJiAhY29sdW1uV2lkdGhcbiAgICAgICAgaWYgKGNudCA9PT0gJ2F1dG8nICYmIHdpZHRoID09PSAnYXV0bycpIHtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgW3Z1ZS1yZW5kZXJdIHdhdGVyZmFsbCdzIGNvbHVtbldpZHRoIGFuZCBjb2x1bW5Db3VudCBzaG91bGRuJ3RgXG4gICAgICAgICAgICArIGAgYm90aCBiZSBhdXRvIGF0IHRoZSBzYW1lIHRpbWUuYClcbiAgICAgICAgICAgIGNudCA9IERFRkFVTFRfQ09MVU1OX0NPVU5UXG4gICAgICAgICAgICB3aWR0aCA9IGN0V2lkdGhcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gMS4gaWYgY29sdW1uQ291bnQgPSBuIHRoZW4gY2FsYyB3LlxuICAgICAgICBlbHNlIGlmIChjbnQgIT09ICdhdXRvJyAmJiB3aWR0aCA9PT0gJ2F1dG8nKSB7XG4gICAgICAgICAgd2lkdGggPSAoY3RXaWR0aCAtIChjbnQgLSAxKSAqIGdhcCkgLyBjbnRcbiAgICAgICAgfVxuICAgICAgICAvLyAyLiBpZiBjb2x1bW5XaWR0aCA9IHcgdGhlbiBjYWxjIG4uXG4gICAgICAgIGVsc2UgaWYgKGNudCA9PT0gJ2F1dG8nICYmIHdpZHRoICE9PSAnYXV0bycpIHtcbiAgICAgICAgICBjbnQgPSAoY3RXaWR0aCArIGdhcCkgLyAod2lkdGggKyBnYXApXG4gICAgICAgIH1cbiAgICAgICAgLy8gMy4gaWYgY29sdW1uV2lkdGggPSB3IGFuZCBjb2x1bW5Db3VudCA9IG4gdGhlbiBjYWxjIHRvdGFsV2lkdGhcbiAgICAgICAgZWxzZSBpZiAoY250ICE9PSAnYXV0bycgJiYgd2lkdGggIT09ICdhdXRvJykge1xuICAgICAgICAgIGxldCB0b3RhbFdpZHRoXG4gICAgICAgICAgY29uc3QgYWRqdXN0Q291bnRBbmRXaWR0aCA9ICgpID0+IHtcbiAgICAgICAgICAgIHRvdGFsV2lkdGggPSBjbnQgKiB3aWR0aCArIChjbnQgLSAxKSAqIGdhcFxuICAgICAgICAgICAgaWYgKHRvdGFsV2lkdGggPCBjdFdpZHRoKSB7XG4gICAgICAgICAgICAgIHdpZHRoICs9IChjdFdpZHRoIC0gdG90YWxXaWR0aCkgLyBjbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRvdGFsV2lkdGggPiBjdFdpZHRoICYmIGNudCA+IDEpIHtcbiAgICAgICAgICAgICAgY250LS1cbiAgICAgICAgICAgICAgYWRqdXN0Q291bnRBbmRXaWR0aCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0b3RhbFdpZHRoID4gY3RXaWR0aCkgeyAgLy8gY250ID09PSAxXG4gICAgICAgICAgICAgIHdpZHRoID0gY3RXaWR0aFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBhZGp1c3RDb3VudEFuZFdpZHRoKClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jb2x1bW5Db3VudCA9IGNudFxuICAgICAgICB0aGlzLl9jb2x1bW5XaWR0aCA9IHdpZHRoXG4gICAgICAgIHRoaXMuX2NvbHVtbkdhcCA9IGdhcFxuICAgICAgfSxcblxuICAgICAgX2dlbkNvbHVtbnMgKGNyZWF0ZUVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5fY29sdW1ucyA9IFtdXG4gICAgICAgIGNvbnN0IGNlbGxzID0gdGhpcy5fY2VsbHNcbiAgICAgICAgY29uc3QgY29sdW1uQ250ID0gdGhpcy5fY29sdW1uQ291bnRcbiAgICAgICAgY29uc3QgbGVuID0gY2VsbHMubGVuZ3RoXG4gICAgICAgIGNvbnN0IGNvbHVtbkNlbGxzID0gdGhpcy5fY29sdW1uQ2VsbHMgPSBBcnJheShjb2x1bW5DbnQpLmpvaW4oJy4nKS5zcGxpdCgnLicpLm1hcChmdW5jdGlvbiAoKSB7IHJldHVybiBbXSB9KVxuICAgICAgICAvLyBzcHJlYWQgY2VsbHMgdG8gdGhlIGNvbHVtbnMgdXNpbmcgc2ltcG9sZSBwb2xsaW5nIGFsZ29yaXRobS5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIChjZWxsc1tpXS5kYXRhLmF0dHJzIHx8IChjZWxsc1tpXS5kYXRhLmF0dHJzID0ge30pKVsnZGF0YS1jZWxsJ10gPSBpXG4gICAgICAgICAgY29sdW1uQ2VsbHNbaSAlIGNvbHVtbkNudF0ucHVzaChjZWxsc1tpXSlcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbHVtbkNudDsgaSsrKSB7XG4gICAgICAgICAgdGhpcy5fY29sdW1ucy5wdXNoKGNyZWF0ZUVsZW1lbnQoJ2h0bWw6ZGl2Jywge1xuICAgICAgICAgICAgcmVmOiBgY29sdW1uJHtpfWAsXG4gICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAnZGF0YS1jb2x1bW4nOiBpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICd3ZWV4LWN0JyxcbiAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7XG4gICAgICAgICAgICAgIHdpZHRoOiB0aGlzLl9jb2x1bW5XaWR0aCArICdweCcsXG4gICAgICAgICAgICAgIG1hcmdpbkxlZnQ6IGkgPT09IDAgPyAwIDogdGhpcy5fY29sdW1uR2FwICsgJ3B4J1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIGNvbHVtbkNlbGxzW2ldKSlcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgX25leHRUaWNrICgpIHtcbiAgICAgICAgdGhpcy5fcmVMYXlvdXRDaGlsZHJlbigpXG4gICAgICB9LFxuXG4gICAgICBfcmVMYXlvdXRDaGlsZHJlbiAoKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiB0cmVhdCB0aGUgc2hvcnRlc3QgY29sdW1uIGJvdHRvbSBhcyB0aGUgbWF0Y2ggc3RhbmRhcmQuXG4gICAgICAgICAqIHdoaWNoZXZlciBjZWxsIGV4Y2VlZGVkIGl0IHdvdWxkIGJlIHJlYXJyYW5nZWQuXG4gICAgICAgICAqIDEuIG0gPSBzaG9ydGVzdCBjb2x1bW4gYm90dG9tLlxuICAgICAgICAgKiAyLiBnZXQgYWxsIGNlbGwgaWRzIHdobyBpcyBiZWxvdyBtLlxuICAgICAgICAgKiAzLiBjYWxjdWxhdGUgd2hpY2ggY2VsbCBzaG91bGQgYmUgaW4gd2hpY2ggY29sdW1uLlxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3QgY29sdW1uQ250ID0gdGhpcy5fY29sdW1uQ291bnRcbiAgICAgICAgY29uc3QgY29sdW1uRG9tcyA9IFtdXG4gICAgICAgIGNvbnN0IGNvbHVtbkFwcGVuZEZyYWdtZW50cyA9IFtdXG4gICAgICAgIGNvbnN0IGNvbHVtbkJvdHRvbXMgPSBbXVxuICAgICAgICBsZXQgbWluQm90dG9tID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcbiAgICAgICAgbGV0IG1pbkJvdHRvbUNvbHVtbkluZGV4ID0gMFxuXG4gICAgICAgIC8vIDEuIGZpbmQgdGhlIHNob3J0ZXN0IGNvbHVtbiBib3R0b20uXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1uQ250OyBpKyspIHtcbiAgICAgICAgICBjb25zdCBjb2x1bW5Eb20gPSB0aGlzLl9jb2x1bW5zW2ldLmVsbVxuICAgICAgICAgIGNvbnN0IGxhc3RDaGlsZCA9IGNvbHVtbkRvbS5sYXN0RWxlbWVudENoaWxkXG4gICAgICAgICAgY29uc3QgYm90dG9tID0gbGFzdENoaWxkID8gbGFzdENoaWxkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSA6IDBcbiAgICAgICAgICBjb2x1bW5Eb21zLnB1c2goY29sdW1uRG9tKVxuICAgICAgICAgIGNvbHVtbkJvdHRvbXNbaV0gPSBib3R0b21cbiAgICAgICAgICBjb2x1bW5BcHBlbmRGcmFnbWVudHMucHVzaChkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpXG4gICAgICAgICAgaWYgKGJvdHRvbSA8IG1pbkJvdHRvbSkge1xuICAgICAgICAgICAgbWluQm90dG9tID0gYm90dG9tXG4gICAgICAgICAgICBtaW5Cb3R0b21Db2x1bW5JbmRleCA9IGlcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyAyLiBnZXQgYWxsIGNlbGwgaWRzIHdobyBpcyBiZWxvdyBtLlxuICAgICAgICBjb25zdCBiZWxvd0NlbGxJZHMgPSBbXVxuICAgICAgICBjb25zdCBiZWxvd0NlbGxzID0ge31cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2x1bW5DbnQ7IGkrKykge1xuICAgICAgICAgIGlmIChpID09PSBtaW5Cb3R0b21Db2x1bW5JbmRleCkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgY29sdW1uRG9tID0gY29sdW1uRG9tc1tpXVxuICAgICAgICAgIGNvbnN0IGNlbGxzSW5Db2x1bW4gPSBjb2x1bW5Eb20ucXVlcnlTZWxlY3RvckFsbCgnc2VjdGlvbi53ZWV4LWNlbGwnKVxuICAgICAgICAgIGNvbnN0IGxlbiA9IGNlbGxzSW5Db2x1bW4ubGVuZ3RoXG4gICAgICAgICAgZm9yIChsZXQgaiA9IGxlbiAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgICAgICAgICBjb25zdCBjZWxsRG9tID0gY2VsbHNJbkNvbHVtbltqXVxuICAgICAgICAgICAgY29uc3QgY2VsbFJlY3QgPSBjZWxsRG9tLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICAgICAgICBpZiAoY2VsbFJlY3QudG9wID4gbWluQm90dG9tKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGlkID0gfn5jZWxsRG9tLmdldEF0dHJpYnV0ZSgnZGF0YS1jZWxsJylcbiAgICAgICAgICAgICAgYmVsb3dDZWxsSWRzLnB1c2goaWQpXG4gICAgICAgICAgICAgIGJlbG93Q2VsbHNbaWRdID0geyBlbG06IGNlbGxEb20sIGhlaWdodDogY2VsbFJlY3QuaGVpZ2h0IH1cbiAgICAgICAgICAgICAgY29sdW1uQm90dG9tc1tpXSAtPSBjZWxsUmVjdC5oZWlnaHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBjYWxjdWxhdGUgd2hpY2ggY2VsbCBzaG91bGQgYmUgaW4gd2hpY2ggY29sdW1uIGFuZCByZWFycmFuZ2UgdGhlbVxuICAgICAgICAvLyAgaW4gdGhlIGRvbSB0cmVlLlxuICAgICAgICBiZWxvd0NlbGxJZHMuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYSA+IGIgfSlcbiAgICAgICAgY29uc3QgY2VsbElkc0xlbiA9IGJlbG93Q2VsbElkcy5sZW5ndGhcbiAgICAgICAgZnVuY3Rpb24gYWRkVG9TaG9ydGVzdENvbHVtbiAoYmVsb3dDZWxsKSB7XG4gICAgICAgICAgLy8gZmluZCBzaG9ydGVzdCBib3R0b20uXG4gICAgICAgICAgbWluQm90dG9tID0gTWF0aC5taW4oLi4uY29sdW1uQm90dG9tcylcbiAgICAgICAgICBtaW5Cb3R0b21Db2x1bW5JbmRleCA9IGNvbHVtbkJvdHRvbXMuaW5kZXhPZihtaW5Cb3R0b20pXG4gICAgICAgICAgY29uc3QgeyBlbG06IGNlbGxFbG0sIGhlaWdodDogY2VsbEhlaWdodCB9ID0gYmVsb3dDZWxsXG4gICAgICAgICAgY29sdW1uQXBwZW5kRnJhZ21lbnRzW21pbkJvdHRvbUNvbHVtbkluZGV4XS5hcHBlbmRDaGlsZChjZWxsRWxtKVxuICAgICAgICAgIGNvbHVtbkJvdHRvbXNbbWluQm90dG9tQ29sdW1uSW5kZXhdICs9IGNlbGxIZWlnaHRcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNlbGxJZHNMZW47IGkrKykge1xuICAgICAgICAgIGFkZFRvU2hvcnRlc3RDb2x1bW4oYmVsb3dDZWxsc1tiZWxvd0NlbGxJZHNbaV1dKVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1uQ250OyBpKyspIHtcbiAgICAgICAgICBjb2x1bW5Eb21zW2ldLmFwcGVuZENoaWxkKGNvbHVtbkFwcGVuZEZyYWdtZW50c1tpXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICByZW5kZXIgKGNyZWF0ZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMud2VleFR5cGUgPSAnd2F0ZXJmYWxsJ1xuICAgICAgdGhpcy5fY2VsbHMgPSB0aGlzLiRzbG90cy5kZWZhdWx0IHx8IFtdXG4gICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlTGF5b3V0KClcbiAgICAgIH0pXG4gICAgICBjb25zdCBtZXJnZWRTdHlsZSA9IGV4dHJhY3RDb21wb25lbnRTdHlsZSh0aGlzKVxuICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoJ21haW4nLCB7XG4gICAgICAgIHJlZjogJ3dyYXBwZXInLFxuICAgICAgICBhdHRyczogeyAnd2VleC10eXBlJzogJ3dhdGVyZmFsbCcgfSxcbiAgICAgICAgb246IHtcbiAgICAgICAgICBzY3JvbGw6IHRoaXMuaGFuZGxlU2Nyb2xsLFxuICAgICAgICAgIHRvdWNoc3RhcnQ6IHRoaXMuaGFuZGxlVG91Y2hTdGFydCxcbiAgICAgICAgICB0b3VjaG1vdmU6IHRoaXMuaGFuZGxlVG91Y2hNb3ZlLFxuICAgICAgICAgIHRvdWNoZW5kOiB0aGlzLmhhbmRsZVRvdWNoRW5kXG4gICAgICAgIH0sXG4gICAgICAgIHN0YXRpY0NsYXNzOiAnd2VleC13YXRlcmZhbGwgd2VleC13YXRlcmZhbGwtd3JhcHBlciB3ZWV4LWN0JyxcbiAgICAgICAgc3RhdGljU3R5bGU6IG1lcmdlZFN0eWxlXG4gICAgICB9LCB0aGlzLl9jcmVhdGVDaGlsZHJlbihjcmVhdGVFbGVtZW50LCBtZXJnZWRTdHlsZSkpXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdCAod2VleCkge1xuICAgIHdlZXgucmVnaXN0ZXJDb21wb25lbnQoJ3dhdGVyZmFsbCcsIGdldFdhdGVyZmFsbCh3ZWV4KSlcbiAgfVxufVxuIiwiLypcbiAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZVxuICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb25cbiAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGVcbiAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGVcbiAqIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXG4gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGVcbiAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnNcbiAqIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmZ1bmN0aW9uIGdldEhlYWRlciAod2VleCkge1xuICBjb25zdCB7IGV4dHJhY3RDb21wb25lbnRTdHlsZSB9ID0gd2VleFxuXG4gIHJldHVybiB7XG4gICAgcmVuZGVyIChjcmVhdGVFbGVtZW50KSB7XG4gICAgICBjb25zdCBhdHRycyA9IHRoaXMuJHZub2RlLmRhdGEuYXR0cnNcbiAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KCdodG1sOmhlYWRlcicsIHtcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAnd2VleC10eXBlJzogJ2hlYWRlcicsXG4gICAgICAgICAgc3RpY2t5OiAoXG4gICAgICAgICAgICB0aGlzLiRwYXJlbnQud2VleFR5cGUgPT09ICd3YXRlcmZhbGwnXG4gICAgICAgICAgICAmJiB0eXBlb2YgYXR0cnMuc3RpY2t5ID09PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICkgPyB1bmRlZmluZWQgOiAnJ1xuICAgICAgICB9LFxuICAgICAgICByZWY6ICdoZWFkZXInLFxuICAgICAgICBzdGF0aWNDbGFzczogJ3dlZXgtaGVhZGVyIHdlZXgtY3QnLFxuICAgICAgICBzdGF0aWNTdHlsZTogZXh0cmFjdENvbXBvbmVudFN0eWxlKHRoaXMpXG4gICAgICB9LCB0aGlzLiRzbG90cy5kZWZhdWx0KVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQgKHdlZXgpIHtcbiAgICB3ZWV4LnJlZ2lzdGVyQ29tcG9uZW50KCdoZWFkZXInLCBnZXRIZWFkZXIod2VleCkpXG4gIH1cbn1cbiIsIi8qXG4gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGVcbiAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uXG4gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlXG4gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlXG4gKiBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxuICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlXG4gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zXG4gKiB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5mdW5jdGlvbiBnZXRMb2FkaW5nICgpIHtcbiAgY29uc3QgeyBleHRyYWN0Q29tcG9uZW50U3R5bGUgfSA9IHdlZXhcbiAgY29uc3QgeyBkaXNwYXRjaE5hdGl2ZUV2ZW50IH0gPSB3ZWV4LnV0aWxzXG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnd2VleC1sb2FkaW5nJyxcbiAgICBwcm9wczoge1xuICAgICAgZGlzcGxheToge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIGRlZmF1bHQ6ICdzaG93JyxcbiAgICAgICAgdmFsaWRhdG9yICh2YWx1ZSkge1xuICAgICAgICAgIHJldHVybiBbJ3Nob3cnLCAnaGlkZSddLmluZGV4T2YodmFsdWUpICE9PSAtMVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBkYXRhICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhlaWdodDogLTEsXG4gICAgICAgIHZpZXdIZWlnaHQ6IDBcbiAgICAgIH1cbiAgICB9LFxuICAgIG1vdW50ZWQgKCkge1xuICAgICAgdGhpcy52aWV3SGVpZ2h0ID0gdGhpcy4kZWwub2Zmc2V0SGVpZ2h0XG4gICAgICBpZiAodGhpcy5kaXNwbGF5ID09PSAnaGlkZScpIHtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSAwXG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnZpZXdIZWlnaHRcbiAgICAgIH1cbiAgICB9LFxuICAgIHdhdGNoOiB7XG4gICAgICBoZWlnaHQgKHZhbCkge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBgJHt2YWx9cHhgXG4gICAgICAgIHRoaXMuJGVsLnN0eWxlLmhlaWdodCA9IG9mZnNldFxuICAgICAgICB0aGlzLiRlbC5zdHlsZS5ib3R0b20gPSBvZmZzZXRcbiAgICAgIH0sXG4gICAgICBkaXNwbGF5ICh2YWwpIHtcbiAgICAgICAgaWYgKHZhbCA9PT0gJ2hpZGUnKSB7XG4gICAgICAgICAgdGhpcy5oZWlnaHQgPSAwXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLnZpZXdIZWlnaHRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgcHVsbGluZyAob2Zmc2V0WSA9IDApIHtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBvZmZzZXRZXG4gICAgICB9LFxuICAgICAgcHVsbGluZ1VwIChvZmZzZXRZKSB7XG4gICAgICAgIHRoaXMuJGVsLnN0eWxlLnRyYW5zaXRpb24gPSBgaGVpZ2h0IDBzYFxuICAgICAgICB0aGlzLnB1bGxpbmcob2Zmc2V0WSlcbiAgICAgIH0sXG4gICAgICBwdWxsaW5nRW5kICgpIHtcbiAgICAgICAgdGhpcy4kZWwgJiYgKHRoaXMuJGVsLnN0eWxlLnRyYW5zaXRpb24gPSBgaGVpZ2h0IC4yc2ApXG4gICAgICAgIGlmICh0aGlzLmhlaWdodCA+PSB0aGlzLnZpZXdIZWlnaHQpIHtcbiAgICAgICAgICB0aGlzLnB1bGxpbmcodGhpcy52aWV3SGVpZ2h0KVxuICAgICAgICAgIGlmICh0aGlzLiRlbCkge1xuICAgICAgICAgICAgZGlzcGF0Y2hOYXRpdmVFdmVudCh0aGlzLiRlbCwgJ2xvYWRpbmcnKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB0aGlzLnB1bGxpbmcoMClcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGdldENoaWxkcmVuICgpIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLiRzbG90cy5kZWZhdWx0IHx8IFtdXG4gICAgICAgIGlmICh0aGlzLmRpc3BsYXkgPT09ICdzaG93Jykge1xuICAgICAgICAgIHJldHVybiBjaGlsZHJlblxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaGlsZHJlbi5maWx0ZXIodm5vZGUgPT4ge1xuICAgICAgICAgIHJldHVybiAhKHZub2RlLmNvbXBvbmVudE9wdGlvbnNcbiAgICAgICAgICAgICYmIHZub2RlLmNvbXBvbmVudE9wdGlvbnMudGFnID09PSAnbG9hZGluZy1pbmRpY2F0b3InKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgcmVuZGVyIChjcmVhdGVFbGVtZW50KSB7XG4gICAgICB0aGlzLiRwYXJlbnQuX2xvYWRpbmcgPSB0aGlzXG4gICAgICByZXR1cm4gY3JlYXRlRWxlbWVudCgnYXNpZGUnLCB7XG4gICAgICAgIHJlZjogJ2xvYWRpbmcnLFxuICAgICAgICBhdHRyczogeyAnd2VleC10eXBlJzogJ2xvYWRpbmcnIH0sXG4gICAgICAgIHN0YXRpY0NsYXNzOiAnd2VleC1sb2FkaW5nIHdlZXgtY3QnLFxuICAgICAgICBzdGF0aWNTdHlsZTogZXh0cmFjdENvbXBvbmVudFN0eWxlKHRoaXMpXG4gICAgICB9LCB0aGlzLmdldENoaWxkcmVuKCkpXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdCAod2VleCkge1xuICAgIHdlZXgucmVnaXN0ZXJDb21wb25lbnQoJ2xvYWRpbmcnLCBnZXRMb2FkaW5nKHdlZXgpKVxuICB9XG59XG4iLCIvKlxuICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlXG4gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvblxuICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZVxuICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZVxuICogXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcbiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZVxuICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9uc1xuICogdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuZnVuY3Rpb24gZ2V0UmVmcmVzaCAod2VleCkge1xuICBjb25zdCB7IGV4dHJhY3RDb21wb25lbnRTdHlsZSB9ID0gd2VleFxuICBjb25zdCB7IGRpc3BhdGNoTmF0aXZlRXZlbnQgfSA9IHdlZXgudXRpbHNcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICd3ZWV4LXJlZnJlc2gnLFxuICAgIHByb3BzOiB7XG4gICAgICBkaXNwbGF5OiB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgZGVmYXVsdDogJ3Nob3cnLFxuICAgICAgICB2YWxpZGF0b3IgKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIFsnc2hvdycsICdoaWRlJ10uaW5kZXhPZih2YWx1ZSkgIT09IC0xXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGRhdGEgKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGFzdER5OiAwLFxuICAgICAgICB2aWV3SGVpZ2h0OiAwLFxuICAgICAgICBoZWlnaHQ6IC0xXG4gICAgICB9XG4gICAgfSxcbiAgICBtb3VudGVkICgpIHtcbiAgICAgIHRoaXMudmlld0hlaWdodCA9IHRoaXMuJGVsLm9mZnNldEhlaWdodFxuICAgICAgaWYgKHRoaXMuZGlzcGxheSA9PT0gJ2hpZGUnKSB7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gMFxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy52aWV3SGVpZ2h0XG4gICAgICB9XG4gICAgfSxcbiAgICB3YXRjaDoge1xuICAgICAgaGVpZ2h0ICh2YWwpIHtcbiAgICAgICAgdGhpcy4kZWwuc3R5bGUuaGVpZ2h0ID0gYCR7dmFsfXB4YFxuICAgICAgfSxcbiAgICAgIGRpc3BsYXkgKHZhbCkge1xuICAgICAgICBpZiAodmFsID09PSAnaGlkZScpIHtcbiAgICAgICAgICB0aGlzLmhlaWdodCA9IDBcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMudmlld0hlaWdodFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICBwdWxsaW5nIChvZmZzZXRZID0gMCkge1xuICAgICAgICB0aGlzLmhlaWdodCA9IG9mZnNldFlcbiAgICAgICAgaWYgKHRoaXMuJGVsKSB7XG4gICAgICAgICAgZGlzcGF0Y2hOYXRpdmVFdmVudCh0aGlzLiRlbCwgJ3B1bGxpbmdkb3duJywge1xuICAgICAgICAgICAgZHk6IG9mZnNldFkgLSB0aGlzLmxhc3REeSxcbiAgICAgICAgICAgIHB1bGxpbmdEaXN0YW5jZTogb2Zmc2V0WSxcbiAgICAgICAgICAgIHZpZXdIZWlnaHQ6IHRoaXMudmlld0hlaWdodFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sYXN0RHkgPSBvZmZzZXRZXG4gICAgICB9LFxuICAgICAgcHVsbGluZ0Rvd24gKG9mZnNldFkpIHtcbiAgICAgICAgdGhpcy4kZWwuc3R5bGUudHJhbnNpdGlvbiA9IGBoZWlnaHQgMHNgXG4gICAgICAgIHRoaXMucHVsbGluZyhvZmZzZXRZKVxuICAgICAgfSxcbiAgICAgIHB1bGxpbmdFbmQgKCkge1xuICAgICAgICB0aGlzLiRlbCAmJiAodGhpcy4kZWwuc3R5bGUudHJhbnNpdGlvbiA9IGBoZWlnaHQgLjJzYClcbiAgICAgICAgaWYgKHRoaXMuaGVpZ2h0ID49IHRoaXMudmlld0hlaWdodCkge1xuICAgICAgICAgIHRoaXMucHVsbGluZyh0aGlzLnZpZXdIZWlnaHQpXG4gICAgICAgICAgaWYgKHRoaXMuJGVsKSB7XG4gICAgICAgICAgICBkaXNwYXRjaE5hdGl2ZUV2ZW50KHRoaXMuJGVsLCAncmVmcmVzaCcpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHRoaXMucHVsbGluZygwKVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZ2V0Q2hpbGRyZW4gKCkge1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuJHNsb3RzLmRlZmF1bHQgfHwgW11cbiAgICAgICAgaWYgKHRoaXMuZGlzcGxheSA9PT0gJ3Nob3cnKSB7XG4gICAgICAgICAgcmV0dXJuIGNoaWxkcmVuXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmZpbHRlcih2bm9kZSA9PiB7XG4gICAgICAgICAgcmV0dXJuICEodm5vZGUuY29tcG9uZW50T3B0aW9uc1xuICAgICAgICAgICAgJiYgdm5vZGUuY29tcG9uZW50T3B0aW9ucy50YWcgPT09ICdsb2FkaW5nLWluZGljYXRvcicpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcbiAgICByZW5kZXIgKGNyZWF0ZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuJHBhcmVudC5fcmVmcmVzaCA9IHRoaXNcbiAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KCdhc2lkZScsIHtcbiAgICAgICAgcmVmOiAncmVmcmVzaCcsXG4gICAgICAgIGF0dHJzOiB7ICd3ZWV4LXR5cGUnOiAncmVmcmVzaCcgfSxcbiAgICAgICAgc3RhdGljQ2xhc3M6ICd3ZWV4LXJlZnJlc2ggd2VleC1jdCcsXG4gICAgICAgIHN0YXRpY1N0eWxlOiBleHRyYWN0Q29tcG9uZW50U3R5bGUodGhpcylcbiAgICAgIH0sIHRoaXMuZ2V0Q2hpbGRyZW4oKSlcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0ICh3ZWV4KSB7XG4gICAgd2VleC5yZWdpc3RlckNvbXBvbmVudCgncmVmcmVzaCcsIGdldFJlZnJlc2god2VleCkpXG4gIH1cbn1cbiIsIi8qXG4gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGVcbiAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uXG4gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlXG4gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlXG4gKiBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxuICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlXG4gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zXG4gKiB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xubGV0IGV4dHJhY3RDb21wb25lbnRTdHlsZSwgZ2V0UmdiLCBsb29wQXJyYXksIGdldFN0eWxlU2hlZXRCeUlkXG5cbmNvbnN0IF9jc3MgPSBgXG4ud2VleC1yZWZyZXNoLWluZGljYXRvcixcbi53ZWV4LWxvYWRpbmctaW5kaWNhdG9yIHtcbiAgd2lkdGg6IDFyZW0gIWltcG9ydGFudDtcbiAgaGVpZ2h0OiAxcmVtICFpbXBvcnRhbnQ7XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gIC1tb3otYm94LWFsaWduOiBjZW50ZXI7XG4gIC13ZWJraXQtYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAtbW96LWJveC1wYWNrOiBjZW50ZXI7XG4gIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIG92ZXJmbG93OiB2aXNpYmxlO1xuICBiYWNrZ3JvdW5kOiBub25lO1xufVxuLndlZXgtcmVmcmVzaC1pbmRpY2F0b3I6YmVmb3JlLFxuLndlZXgtbG9hZGluZy1pbmRpY2F0b3I6YmVmb3JlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGNvbnRlbnQ6ICcnO1xuICBmb250LXNpemU6IDAuMTZyZW07XG4gIHdpZHRoOiAwLjVlbTtcbiAgaGVpZ2h0OiAwLjVlbTtcbiAgbGVmdDogMDtcbiAgdG9wOiAwO1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdGV4dC1pbmRlbnQ6IC05OTk5ZW07XG4gIC13ZWJraXQtYW5pbWF0aW9uOiB3ZWV4LXNwaW5uZXIgMS4xcyBpbmZpbml0ZSBlYXNlO1xuICAtbW96LWFuaW1hdGlvbjogd2VleC1zcGlubmVyIDEuMXMgaW5maW5pdGUgZWFzZTtcbiAgYW5pbWF0aW9uOiB3ZWV4LXNwaW5uZXIgMS4xcyBpbmZpbml0ZSBlYXNlO1xufVxuXG5ALXdlYmtpdC1rZXlmcmFtZXMgd2VleC1zcGlubmVyIHtcbiAgMCUsXG4gIDEwMCUge1xuICAgIGJveC1zaGFkb3c6IDBlbSAtMS4zZW0gMGVtIDBlbSAjZmZmZmZmLCAwLjllbSAtMC45ZW0gMCAwZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpLCAxLjI1ZW0gMGVtIDAgMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgMC44NzVlbSAwLjg3NWVtIDAgMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgMGVtIDEuMjVlbSAwIDBlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMiksIC0wLjllbSAwLjllbSAwIDBlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMiksIC0xLjNlbSAwZW0gMCAwZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpLCAtMC45ZW0gLTAuOWVtIDAgMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTtcbiAgfVxuICAxMS4yNSUge1xuICAgIGJveC1zaGFkb3c6IDBlbSAtMS4zZW0gMGVtIDBlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyksIDAuOWVtIC0wLjllbSAwIDBlbSAjZmZmZmZmLCAxLjI1ZW0gMGVtIDAgMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgMC44NzVlbSAwLjg3NWVtIDAgMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgMGVtIDEuMjVlbSAwIDBlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMiksIC0wLjllbSAwLjllbSAwIDBlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMiksIC0xLjNlbSAwZW0gMCAwZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpLCAtMC45ZW0gLTAuOWVtIDAgMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcbiAgfVxuICAyNSUge1xuICAgIGJveC1zaGFkb3c6IDBlbSAtMS4zZW0gMGVtIDBlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSksIDAuOWVtIC0wLjllbSAwIDBlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyksIDEuMjVlbSAwZW0gMCAwZW0gI2ZmZmZmZiwgMC44NzVlbSAwLjg3NWVtIDAgMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgMGVtIDEuMjVlbSAwIDBlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMiksIC0wLjllbSAwLjllbSAwIDBlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMiksIC0xLjNlbSAwZW0gMCAwZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpLCAtMC45ZW0gLTAuOWVtIDAgMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTtcbiAgfVxuICAzNy41JSB7XG4gICAgYm94LXNoYWRvdzogMGVtIC0xLjNlbSAwZW0gMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgMC45ZW0gLTAuOWVtIDAgMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KSwgMS4yNWVtIDBlbSAwIDBlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyksIDAuODc1ZW0gMC44NzVlbSAwIDBlbSAjZmZmZmZmLCAwZW0gMS4yNWVtIDAgMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgLTAuOWVtIDAuOWVtIDAgMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgLTEuM2VtIDBlbSAwIDBlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMiksIC0wLjllbSAtMC45ZW0gMCAwZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpO1xuICB9XG4gIDUwJSB7XG4gICAgYm94LXNoYWRvdzogMGVtIC0xLjNlbSAwZW0gMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgMC45ZW0gLTAuOWVtIDAgMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgMS4yNWVtIDBlbSAwIDBlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSksIDAuODc1ZW0gMC44NzVlbSAwIDBlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyksIDBlbSAxLjI1ZW0gMCAwZW0gI2ZmZmZmZiwgLTAuOWVtIDAuOWVtIDAgMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgLTEuM2VtIDBlbSAwIDBlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMiksIC0wLjllbSAtMC45ZW0gMCAwZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpO1xuICB9XG4gIDYxLjI1JSB7XG4gICAgYm94LXNoYWRvdzogMGVtIC0xLjNlbSAwZW0gMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgMC45ZW0gLTAuOWVtIDAgMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgMS4yNWVtIDBlbSAwIDBlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMiksIDAuODc1ZW0gMC44NzVlbSAwIDBlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSksIDBlbSAxLjI1ZW0gMCAwZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpLCAtMC45ZW0gMC45ZW0gMCAwZW0gI2ZmZmZmZiwgLTEuM2VtIDBlbSAwIDBlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMiksIC0wLjllbSAtMC45ZW0gMCAwZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpO1xuICB9XG4gIDc1JSB7XG4gICAgYm94LXNoYWRvdzogMGVtIC0xLjNlbSAwZW0gMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgMC45ZW0gLTAuOWVtIDAgMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgMS4yNWVtIDBlbSAwIDBlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMiksIDAuODc1ZW0gMC44NzVlbSAwIDBlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMiksIDBlbSAxLjI1ZW0gMCAwZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpLCAtMC45ZW0gMC45ZW0gMCAwZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpLCAtMS4zZW0gMGVtIDAgMGVtICNmZmZmZmYsIC0wLjllbSAtMC45ZW0gMCAwZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpO1xuICB9XG4gIDg3LjUlIHtcbiAgICBib3gtc2hhZG93OiAwZW0gLTEuM2VtIDBlbSAwZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpLCAwLjllbSAtMC45ZW0gMCAwZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpLCAxLjI1ZW0gMGVtIDAgMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgMC44NzVlbSAwLjg3NWVtIDAgMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgMGVtIDEuMjVlbSAwIDBlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMiksIC0wLjllbSAwLjllbSAwIDBlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSksIC0xLjNlbSAwZW0gMCAwZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpLCAtMC45ZW0gLTAuOWVtIDAgMGVtICNmZmZmZmY7XG4gIH1cbn1cblxuQGtleWZyYW1lcyB3ZWV4LXNwaW5uZXIge1xuICAwJSxcbiAgMTAwJSB7XG4gICAgYm94LXNoYWRvdzogMGVtIC0xLjNlbSAwZW0gMGVtICNmZmZmZmYsIDAuOWVtIC0wLjllbSAwIDBlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMiksIDEuMjVlbSAwZW0gMCAwZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpLCAwLjg3NWVtIDAuODc1ZW0gMCAwZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpLCAwZW0gMS4yNWVtIDAgMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgLTAuOWVtIDAuOWVtIDAgMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgLTEuM2VtIDBlbSAwIDBlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSksIC0wLjllbSAtMC45ZW0gMCAwZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpO1xuICB9XG4gIDExLjI1JSB7XG4gICAgYm94LXNoYWRvdzogMGVtIC0xLjNlbSAwZW0gMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSwgMC45ZW0gLTAuOWVtIDAgMGVtICNmZmZmZmYsIDEuMjVlbSAwZW0gMCAwZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpLCAwLjg3NWVtIDAuODc1ZW0gMCAwZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpLCAwZW0gMS4yNWVtIDAgMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgLTAuOWVtIDAuOWVtIDAgMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgLTEuM2VtIDBlbSAwIDBlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMiksIC0wLjllbSAtMC45ZW0gMCAwZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpO1xuICB9XG4gIDI1JSB7XG4gICAgYm94LXNoYWRvdzogMGVtIC0xLjNlbSAwZW0gMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KSwgMC45ZW0gLTAuOWVtIDAgMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSwgMS4yNWVtIDBlbSAwIDBlbSAjZmZmZmZmLCAwLjg3NWVtIDAuODc1ZW0gMCAwZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpLCAwZW0gMS4yNWVtIDAgMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgLTAuOWVtIDAuOWVtIDAgMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgLTEuM2VtIDBlbSAwIDBlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMiksIC0wLjllbSAtMC45ZW0gMCAwZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpO1xuICB9XG4gIDM3LjUlIHtcbiAgICBib3gtc2hhZG93OiAwZW0gLTEuM2VtIDBlbSAwZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpLCAwLjllbSAtMC45ZW0gMCAwZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpLCAxLjI1ZW0gMGVtIDAgMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSwgMC44NzVlbSAwLjg3NWVtIDAgMGVtICNmZmZmZmYsIDBlbSAxLjI1ZW0gMCAwZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpLCAtMC45ZW0gMC45ZW0gMCAwZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpLCAtMS4zZW0gMGVtIDAgMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgLTAuOWVtIC0wLjllbSAwIDBlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7XG4gIH1cbiAgNTAlIHtcbiAgICBib3gtc2hhZG93OiAwZW0gLTEuM2VtIDBlbSAwZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpLCAwLjllbSAtMC45ZW0gMCAwZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpLCAxLjI1ZW0gMGVtIDAgMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KSwgMC44NzVlbSAwLjg3NWVtIDAgMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSwgMGVtIDEuMjVlbSAwIDBlbSAjZmZmZmZmLCAtMC45ZW0gMC45ZW0gMCAwZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpLCAtMS4zZW0gMGVtIDAgMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgLTAuOWVtIC0wLjllbSAwIDBlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7XG4gIH1cbiAgNjEuMjUlIHtcbiAgICBib3gtc2hhZG93OiAwZW0gLTEuM2VtIDBlbSAwZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpLCAwLjllbSAtMC45ZW0gMCAwZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpLCAxLjI1ZW0gMGVtIDAgMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgMC44NzVlbSAwLjg3NWVtIDAgMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KSwgMGVtIDEuMjVlbSAwIDBlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyksIC0wLjllbSAwLjllbSAwIDBlbSAjZmZmZmZmLCAtMS4zZW0gMGVtIDAgMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgLTAuOWVtIC0wLjllbSAwIDBlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7XG4gIH1cbiAgNzUlIHtcbiAgICBib3gtc2hhZG93OiAwZW0gLTEuM2VtIDBlbSAwZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpLCAwLjllbSAtMC45ZW0gMCAwZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpLCAxLjI1ZW0gMGVtIDAgMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgMC44NzVlbSAwLjg3NWVtIDAgMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgMGVtIDEuMjVlbSAwIDBlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSksIC0wLjllbSAwLjllbSAwIDBlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyksIC0xLjNlbSAwZW0gMCAwZW0gI2ZmZmZmZiwgLTAuOWVtIC0wLjllbSAwIDBlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7XG4gIH1cbiAgODcuNSUge1xuICAgIGJveC1zaGFkb3c6IDBlbSAtMS4zZW0gMGVtIDBlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMiksIDAuOWVtIC0wLjllbSAwIDBlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMiksIDEuMjVlbSAwZW0gMCAwZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpLCAwLjg3NWVtIDAuODc1ZW0gMCAwZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpLCAwZW0gMS4yNWVtIDAgMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgLTAuOWVtIDAuOWVtIDAgMGVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KSwgLTEuM2VtIDBlbSAwIDBlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyksIC0wLjllbSAtMC45ZW0gMCAwZW0gI2ZmZmZmZjtcbiAgfVxufVxuYFxuXG5mdW5jdGlvbiBnZXRTdHlsZVNoZWV0IChzcGlubmVyVm0pIHtcbiAgaWYgKHNwaW5uZXJWbS5fc3R5bGVTaGVldCkge1xuICAgIHJldHVyblxuICB9XG4gIHNwaW5uZXJWbS5fc3R5bGVTaGVldCA9IGdldFN0eWxlU2hlZXRCeUlkKCd3ZWV4LWNtcC1sb2FkaW5nLWluZGljYXRvcicpXG59XG5cbmZ1bmN0aW9uIHNldEtleWZyYW1lQ29sb3IgKHNwaW5uZXJWbSwgdmFsKSB7XG4gIGdldFN0eWxlU2hlZXQoc3Bpbm5lclZtKVxuICBjb25zdCBrZXlmcmFtZVJ1bGVzID0gY29tcHV0ZUtleUZyYW1lUnVsZXModmFsKVxuICBjb25zdCBydWxlcyA9IHNwaW5uZXJWbS5fc3R5bGVTaGVldC5ydWxlcyB8fCBzcGlubmVyVm0uX3N0eWxlU2hlZXQuY3NzUnVsZXNcbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBydWxlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBjb25zdCBpdGVtID0gcnVsZXMuaXRlbShpKVxuICAgIGlmICgoaXRlbS50eXBlID09PSBDU1NSdWxlLktFWUZSQU1FU19SVUxFXG4gICAgICAgICAgfHwgaXRlbS50eXBlID09PSBDU1NSdWxlLldFQktJVF9LRVlGUkFNRVNfUlVMRSlcbiAgICAgICAgJiYgaXRlbS5uYW1lID09PSAnd2VleC1zcGlubmVyJykge1xuICAgICAgY29uc3QgY3NzUnVsZXMgPSBpdGVtLmNzc1J1bGVzXG4gICAgICBmb3IgKGxldCBqID0gMCwgbSA9IGNzc1J1bGVzLmxlbmd0aDsgaiA8IG07IGorKykge1xuICAgICAgICBjb25zdCBrZXlmcmFtZSA9IGNzc1J1bGVzW2pdXG4gICAgICAgIGlmIChrZXlmcmFtZS50eXBlID09PSBDU1NSdWxlLktFWUZSQU1FX1JVTEVcbiAgICAgICAgICB8fCBrZXlmcmFtZS50eXBlID09PSBDU1NSdWxlLldFQktJVF9LRVlGUkFNRV9SVUxFKSB7XG4gICAgICAgICAga2V5ZnJhbWUuc3R5bGUuYm94U2hhZG93ID0ga2V5ZnJhbWVSdWxlc1tqXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVLZXlGcmFtZVJ1bGVzIChyZ2IpIHtcbiAgaWYgKCFyZ2IpIHtcbiAgICByZXR1cm5cbiAgfVxuICBjb25zdCBzY2FsZUFyciA9IFtcbiAgICAnMGVtIC0xLjNlbSAwZW0gMGVtJyxcbiAgICAnMC45ZW0gLTAuOWVtIDAgMGVtJyxcbiAgICAnMS4yNWVtIDBlbSAwIDBlbScsXG4gICAgJzAuODc1ZW0gMC44NzVlbSAwIDBlbScsXG4gICAgJzBlbSAxLjI1ZW0gMCAwZW0nLFxuICAgICctMC45ZW0gMC45ZW0gMCAwZW0nLFxuICAgICctMS4zZW0gMGVtIDAgMGVtJyxcbiAgICAnLTAuOWVtIC0wLjllbSAwIDBlbSddXG4gIGNvbnN0IGNvbG9yQXJyID0gW1xuICAgICcxJyxcbiAgICAnMC4yJyxcbiAgICAnMC4yJyxcbiAgICAnMC4yJyxcbiAgICAnMC4yJyxcbiAgICAnMC4yJyxcbiAgICAnMC41JyxcbiAgICAnMC43J11cbiAgICAubWFwKGZ1bmN0aW9uIChlKSB7XG4gICAgICByZXR1cm4gJ3JnYmEoJyArIHJnYi5yICsgJywnICsgcmdiLmcgKyAnLCcgKyByZ2IuYiArICcsJyArIGUgKyAnKSdcbiAgICB9KVxuICBjb25zdCBydWxlcyA9IFtdXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2NhbGVBcnIubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB0bXBDb2xvckFyciA9IGxvb3BBcnJheShjb2xvckFyciwgaSwgJ3InKVxuICAgIHJ1bGVzLnB1c2goc2NhbGVBcnIubWFwKGZ1bmN0aW9uIChzY2FsZVN0ciwgaSkge1xuICAgICAgcmV0dXJuIHNjYWxlU3RyICsgJyAnICsgdG1wQ29sb3JBcnJbaV1cbiAgICB9KS5qb2luKCcsICcpKVxuICB9XG4gIHJldHVybiBydWxlc1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzU3R5bGUgKHZtKSB7XG4gIGNvbnN0IHN0eWxlID0gZXh0cmFjdENvbXBvbmVudFN0eWxlKHZtKVxuICBjb25zdCBjb2xvciA9IHN0eWxlLmNvbG9yXG4gIGNvbnN0IHJnYiA9IGNvbG9yICYmIGdldFJnYihjb2xvcilcbiAgaWYgKHJnYikge1xuICAgIHNldEtleWZyYW1lQ29sb3Iodm0sIHJnYilcbiAgfVxuICByZXR1cm4gc3R5bGVcbn1cblxuY29uc3QgbG9hZGluZ0luZGljYXRvciA9IHtcbiAgbmFtZTogJ3dlZXgtbG9hZGluZy1pbmRpY2F0b3InLFxuICByZW5kZXIgKGNyZWF0ZUVsZW1lbnQpIHtcbiAgICB0aGlzLndlZXhUeXBlID0gJ2xvYWRpbmctaW5kaWNhdG9yJ1xuICAgIHJldHVybiBjcmVhdGVFbGVtZW50KCdtYXJrJywge1xuICAgICAgYXR0cnM6IHsgJ3dlZXgtdHlwZSc6ICdsb2FkaW5nLWluZGljYXRvcicgfSxcbiAgICAgIHN0YXRpY0NsYXNzOiAnd2VleC1sb2FkaW5nLWluZGljYXRvciB3ZWV4LWN0JyxcbiAgICAgIHN0YXRpY1N0eWxlOiBwcm9jZXNzU3R5bGUodGhpcylcbiAgICB9KVxuICB9LFxuICBfY3NzXG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdCAod2VleCkge1xuICAgIGV4dHJhY3RDb21wb25lbnRTdHlsZSA9IHdlZXguZXh0cmFjdENvbXBvbmVudFN0eWxlXG4gICAgZ2V0UmdiID0gd2VleC51dGlscy5nZXRSZ2JcbiAgICBsb29wQXJyYXkgPSB3ZWV4LnV0aWxzLmxvb3BBcnJheVxuICAgIGdldFN0eWxlU2hlZXRCeUlkID0gd2VleC51dGlscy5nZXRTdHlsZVNoZWV0QnlJZFxuICAgIHdlZXgucmVnaXN0ZXJDb21wb25lbnQoJ2xvYWRpbmctaW5kaWNhdG9yJywgbG9hZGluZ0luZGljYXRvcilcbiAgfVxufVxuIiwiLypcbiAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZVxuICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb25cbiAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGVcbiAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGVcbiAqIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXG4gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGVcbiAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnNcbiAqIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBzY3JvbGxhYmxlIH0gZnJvbSAnLi9taXhpbnMnXG5cbmZ1bmN0aW9uIGdldExpc3QgKHdlZXgpIHtcbiAgY29uc3Qge1xuICAgIGV4dHJhY3RDb21wb25lbnRTdHlsZVxuICB9ID0gd2VleFxuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3dlZXgtcmVjeWNsZS1saXN0JyxcbiAgICBtaXhpbnM6IFtzY3JvbGxhYmxlXSxcbiAgICBwcm9wczoge1xuICAgICAgc2Nyb2xsRGlyZWN0aW9uOiB7XG4gICAgICAgIHR5cGU6IFtTdHJpbmddLFxuICAgICAgICBkZWZhdWx0OiAndmVydGljYWwnLFxuICAgICAgICB2YWxpZGF0b3IgKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIFsnaG9yaXpvbnRhbCcsICd2ZXJ0aWNhbCddLmluZGV4T2YodmFsdWUpICE9PSAtMVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgX2l0ZW1zOiBBcnJheSxcbiAgICAgIF9zd2l0Y2g6IFN0cmluZ1xuICAgIH0sXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIHdyYXBwZXJDbGFzcyAoKSB7XG4gICAgICAgIGNvbnN0IGNsYXNzQXJyYXkgPSBbJ3dlZXgtcmVjeWNsZScsICd3ZWV4LXJlY3ljbGUtd3JhcHBlcicsICd3ZWV4LWN0J11cbiAgICAgICAgdGhpcy5fcmVmcmVzaCAmJiBjbGFzc0FycmF5LnB1c2goJ3dpdGgtcmVmcmVzaCcpXG4gICAgICAgIHRoaXMuX2xvYWRpbmcgJiYgY2xhc3NBcnJheS5wdXNoKCd3aXRoLWxvYWRpbmcnKVxuICAgICAgICBpZiAodGhpcy5zY3JvbGxEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJykge1xuICAgICAgICAgIGNsYXNzQXJyYXkucHVzaCgnd2VleC1yZWN5Y2xlLWhvcml6b250YWwnKVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNsYXNzQXJyYXkucHVzaCgnd2VleC1yZWN5Y2xlLXZlcnRpY2FsJylcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xhc3NBcnJheS5qb2luKCcgJylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWV0aG9kczoge1xuICAgICAgY3JlYXRlQ2hpbGRyZW4gKGgpIHtcbiAgICAgICAgY29uc3QgX3ZtID0gdGhpc1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIGgoJ2FydGljbGUnLCB7XG4gICAgICAgICAgICByZWY6ICdpbm5lcicsXG4gICAgICAgICAgICBzdGF0aWNDbGFzczogJ3dlZXgtcmVjeWNsZS1pbm5lciB3ZWV4LWN0J1xuICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgIF92bS5fbChfdm0uX2l0ZW1zLCBmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBfdm0uX3QoX3ZtLnNsb3RlTmFtZShpdGVtKSwgbnVsbCwge1xuICAgICAgICAgICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXSlcbiAgICAgICAgXVxuICAgICAgfSxcbiAgICAgIHNsb3RlTmFtZSAoaXRlbSkge1xuICAgICAgICBpZiAodGhpcy5fc3dpdGNoICYmIGl0ZW1bdGhpcy5fc3dpdGNoXSkge1xuICAgICAgICAgIHJldHVybiBpdGVtW3RoaXMuX3N3aXRjaF1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gJ2RlZmF1bHQnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVuZGVyIChjcmVhdGVFbGVtZW50KSB7XG4gICAgICB0aGlzLndlZXhUeXBlID0gJ2xpc3QnXG5cbiAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVMYXlvdXQoKVxuICAgICAgfSlcblxuICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoJ21haW4nLCB7XG4gICAgICAgIHJlZjogJ3dyYXBwZXInLFxuICAgICAgICBhdHRyczogeyAnd2VleC10eXBlJzogJ3JlY3ljbGUtbGlzdCcgfSxcbiAgICAgICAgc3RhdGljQ2xhc3M6IHRoaXMud3JhcHBlckNsYXNzLFxuICAgICAgICBvbjoge1xuICAgICAgICAgIHNjcm9sbDogdGhpcy5oYW5kbGVTY3JvbGwsXG4gICAgICAgICAgdG91Y2hzdGFydDogdGhpcy5oYW5kbGVUb3VjaFN0YXJ0LFxuICAgICAgICAgIHRvdWNobW92ZTogdGhpcy5oYW5kbGVUb3VjaE1vdmUsXG4gICAgICAgICAgdG91Y2hlbmQ6IHRoaXMuaGFuZGxlVG91Y2hFbmRcbiAgICAgICAgfSxcbiAgICAgICAgc3RhdGljU3R5bGU6IGV4dHJhY3RDb21wb25lbnRTdHlsZSh0aGlzKVxuICAgICAgfSwgdGhpcy5jcmVhdGVDaGlsZHJlbihjcmVhdGVFbGVtZW50KSlcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0ICh3ZWV4KSB7XG4gICAgd2VleC5yZWdpc3RlckNvbXBvbmVudCgncmVjeWNsZS1saXN0JywgZ2V0TGlzdCh3ZWV4KSlcbiAgfVxufVxuIiwiLypcbiAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZVxuICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb25cbiAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGVcbiAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGVcbiAqIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXG4gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGVcbiAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnNcbiAqIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCBsaXN0IGZyb20gJy4vbGlzdCdcbmltcG9ydCBzY3JvbGxlciBmcm9tICcuL3Njcm9sbGVyJ1xuaW1wb3J0IHdhdGVyZmFsbCBmcm9tICcuL3dhdGVyZmFsbCdcbi8vIGltcG9ydCBjZWxsIGZyb20gJy4vY2VsbCdcbmltcG9ydCBoZWFkZXIgZnJvbSAnLi9oZWFkZXInXG5pbXBvcnQgbG9hZGluZyBmcm9tICcuL2xvYWRpbmcnXG5pbXBvcnQgcmVmcmVzaCBmcm9tICcuL3JlZnJlc2gnXG5pbXBvcnQgbG9hZGluZ0luZGljYXRvciBmcm9tICcuL2xvYWRpbmctaW5kaWNhdG9yJ1xuaW1wb3J0IHJlY3ljbGVMaXN0IGZyb20gJy4vcmVjeWNsZS1saXN0J1xuXG5pbXBvcnQgJy4vc3R5bGUuY3NzJ1xuXG5jb25zdCBtb2R1bGVzID0gW1xuICBsaXN0LFxuICBzY3JvbGxlcixcbiAgd2F0ZXJmYWxsLFxuICAvLyBjZWxsLFxuICBoZWFkZXIsXG4gIGxvYWRpbmcsXG4gIHJlZnJlc2gsXG4gIGxvYWRpbmdJbmRpY2F0b3IsXG4gIHJlY3ljbGVMaXN0XG5dXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdCAod2VleCkge1xuICAgIG1vZHVsZXMuZm9yRWFjaChmdW5jdGlvbiAobW9kKSB7XG4gICAgICB3ZWV4Lmluc3RhbGwobW9kKVxuICAgIH0pXG4gIH1cbn1cbiIsIi8qXG4gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGVcbiAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uXG4gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlXG4gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlXG4gKiBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxuICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlXG4gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zXG4gKiB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuY29uc3QgVFJBTlNJVElPTl9USU1FID0gNDAwXG5jb25zdCBORUlHSEJPUl9TQ0FMRV9USU1FID0gMTAwXG5jb25zdCBNQUlOX1NMSURFX09QQUNJVFkgPSAxXG5jb25zdCBUSFJPVFRMRV9TQ1JPTExfVElNRSA9IDI1XG5jb25zdCBJTlRFUlZBTF9NSU5JTVVNID0gMjAwXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY3JlYXRlZCAoKSB7XG4gICAgdGhpcy5fY2xvbmVzID0gW11cbiAgICB0aGlzLmlubmVyT2Zmc2V0ID0gMFxuICAgIHRoaXMuX2luZGljYXRvciA9IG51bGxcbiAgfSxcblxuICBiZWZvcmVVcGRhdGUgKCkge1xuICAgIHRoaXMuX2dldFdyYXBwZXJTaXplKClcbiAgfSxcblxuICB1cGRhdGVkICgpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuJGNoaWxkcmVuXG4gICAgY29uc3QgbGVuID0gY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoXG4gICAgaWYgKGNoaWxkcmVuICYmIGxlbiA+IDApIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3Qgdm0gPSBjaGlsZHJlbltpXVxuICAgICAgICBpZiAodm0uJG9wdGlvbnMuX2NvbXBvbmVudFRhZyA9PT0gJ2luZGljYXRvcidcbiAgICAgICAgICB8fCB2bS4kdm5vZGUuZGF0YS5yZWYgPT09ICdpbmRpY2F0b3InKSB7XG4gICAgICAgICAgdm0uX3dhdGNoZXIuZ2V0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZnJhbWVDb3VudCA9IHRoaXMuZnJhbWVDb3VudFxuICAgIGlmICghdGhpcy5fcHJlRnJhbWVDb3VudCkge1xuICAgICAgdGhpcy5fcHJlRnJhbWVDb3VudCA9IGZyYW1lQ291bnRcbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5fcHJlRnJhbWVDb3VudCAhPT0gZnJhbWVDb3VudCkge1xuICAgICAgdGhpcy5fcmVzZXROb2RlcygpXG4gICAgICB0aGlzLl9wcmVGcmFtZUNvdW50ID0gZnJhbWVDb3VudFxuICAgICAgY29uc3QgcmVzZXRCbGFua0ZyYW1lID0gKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPj0gZnJhbWVDb3VudCkge1xuICAgICAgICAgIC8vIHJlc2V0IGJsYW5rIHBhZ2UuXG4gICAgICAgICAgdGhpcy5fc3RvcEF1dG9QbGF5KClcbiAgICAgICAgICB0aGlzLl9zbGlkZVRvKDApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9zbGlkaW5nKSB7XG4gICAgICAgIC8vIElmIGl0J3Mgc2xpZGluZywgdGhlbiB0aGUgY3VycmVudEluZGV4IGlzIHRoZSBsYXN0IGZyYW1lLiBUaGUgYWN0dWFsIGN1cnJlbnRJbmRleFxuICAgICAgICAvLyBzaG91bGQgYmUgdGhlIG5leHQgaW5kZXguXG4gICAgICAgIC8vIFRoYXQgaXMgdG8gc2F5LCB0aGlzIHVwZGF0aW5nIGhhcHBlbnMgQmV0d2VlbiBfcGFyZXBhcmVOb2RlcyBhbmQgX3JlYXJyYW5nZU5vZGVzLFxuICAgICAgICAvLyBhbmQgdGhlIHNsaWRpbmcgaXMgbm90IHlldCBmaW5pc2hlZCwgYW5kIHRoZSBzdGF0ZSBpcyBub3QgdXBkYXRlZCB5ZXQuXG4gICAgICAgIHNldFRpbWVvdXQocmVzZXRCbGFua0ZyYW1lLCBUUkFOU0lUSU9OX1RJTUUgKyBORUlHSEJPUl9TQ0FMRV9USU1FKVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHJlc2V0QmxhbmtGcmFtZSgpXG4gICAgICB9XG4gICAgfVxuICAgIHdlZXgudXRpbHMuZmlyZUxhenlsb2FkKHRoaXMuJGVsLCB0cnVlKVxuICAgIGlmICh0aGlzLl9wcmVJbmRleCAhPT0gdGhpcy5jdXJyZW50SW5kZXgpIHtcbiAgICAgIHRoaXMuX3NsaWRlVG8odGhpcy5jdXJyZW50SW5kZXgpXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQgKCkge1xuICAgIHRoaXMuX2dldFdyYXBwZXJTaXplKClcbiAgICB0aGlzLl9zbGlkZVRvKHRoaXMuY3VycmVudEluZGV4KVxuICAgIHdlZXgudXRpbHMuZmlyZUxhenlsb2FkKHRoaXMuJGVsLCB0cnVlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfZ2V0V3JhcHBlclNpemUgKCkge1xuICAgICAgY29uc3Qgd3JhcHBlciA9IHRoaXMuJHJlZnMud3JhcHBlclxuICAgICAgaWYgKHdyYXBwZXIpIHtcbiAgICAgICAgY29uc3QgcmVjdCA9IHdyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgdGhpcy5fd3JhcHBlcldpZHRoID0gcmVjdC53aWR0aFxuICAgICAgICB0aGlzLl93cmFwcGVySGVpZ2h0ID0gcmVjdC5oZWlnaHRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2Zvcm1hdENoaWxkcmVuIChjcmVhdGVFbGVtZW50KSB7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuJHNsb3RzLmRlZmF1bHQgfHwgW11cbiAgICAgIGxldCBpbmRpY2F0b3JWbm9kZVxuICAgICAgY29uc3QgY2VsbHMgPSBjaGlsZHJlbi5maWx0ZXIodm5vZGUgPT4ge1xuICAgICAgICBpZiAoIXZub2RlLnRhZykgcmV0dXJuIGZhbHNlXG4gICAgICAgIGlmICh2bm9kZS5jb21wb25lbnRPcHRpb25zICYmIHZub2RlLmNvbXBvbmVudE9wdGlvbnMudGFnID09PSAnaW5kaWNhdG9yJykge1xuICAgICAgICAgIGluZGljYXRvclZub2RlID0gdm5vZGVcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSkubWFwKHZub2RlID0+IHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoJ2xpJywge1xuICAgICAgICAgIHJlZjogJ2NlbGxzJyxcbiAgICAgICAgICBzdGF0aWNDbGFzczogYHdlZXgtc2xpZGVyLWNlbGwgd2VleC1jdCR7dGhpcy5pc05laWdoYm9yID8gJyBuZWlnaGJvci1jZWxsJyA6ICcnfWBcbiAgICAgICAgfSwgW3Zub2RlXSlcbiAgICAgIH0pXG4gICAgICBpZiAoaW5kaWNhdG9yVm5vZGUpIHtcbiAgICAgICAgaW5kaWNhdG9yVm5vZGUuZGF0YS5hdHRycyA9IGluZGljYXRvclZub2RlLmRhdGEuYXR0cnMgfHwge31cbiAgICAgICAgaW5kaWNhdG9yVm5vZGUuZGF0YS5hdHRycy5jb3VudCA9IGNlbGxzLmxlbmd0aFxuICAgICAgICBpbmRpY2F0b3JWbm9kZS5kYXRhLmF0dHJzLmFjdGl2ZSA9IHRoaXMuY3VycmVudEluZGV4XG4gICAgICAgIHRoaXMuX2luZGljYXRvciA9IGluZGljYXRvclZub2RlXG4gICAgICB9XG4gICAgICByZXR1cm4gY2VsbHNcbiAgICB9LFxuXG4gICAgX3JlbmRlclNsaWRlcyAoY3JlYXRlRWxlbWVudCkge1xuICAgICAgdGhpcy5fY2VsbHMgPSB0aGlzLl9mb3JtYXRDaGlsZHJlbihjcmVhdGVFbGVtZW50KVxuICAgICAgdGhpcy5mcmFtZUNvdW50ID0gdGhpcy5fY2VsbHMubGVuZ3RoXG4gICAgICByZXR1cm4gY3JlYXRlRWxlbWVudChcbiAgICAgICAgJ25hdicsXG4gICAgICAgIHtcbiAgICAgICAgICByZWY6ICd3cmFwcGVyJyxcbiAgICAgICAgICBhdHRyczogeyAnd2VleC10eXBlJzogdGhpcy5pc05laWdoYm9yID8gJ3NsaWRlci1uZWlnaGJvcicgOiAnc2xpZGVyJyB9LFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICB0b3VjaHN0YXJ0OiB0aGlzLl9oYW5kbGVUb3VjaFN0YXJ0LFxuICAgICAgICAgICAgdG91Y2htb3ZlOiB3ZWV4LnV0aWxzLnRocm90dGxlKHdlZXgudXRpbHMuYmluZCh0aGlzLl9oYW5kbGVUb3VjaE1vdmUsIHRoaXMpLCAyNSksXG4gICAgICAgICAgICB0b3VjaGVuZDogdGhpcy5faGFuZGxlVG91Y2hFbmQsXG4gICAgICAgICAgICB0b3VjaGNhbmNlbDogdGhpcy5faGFuZGxlVG91Y2hDYW5jZWxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0YXRpY0NsYXNzOiAnd2VleC1zbGlkZXIgd2VleC1zbGlkZXItd3JhcHBlciB3ZWV4LWN0JyxcbiAgICAgICAgICBzdGF0aWNTdHlsZTogd2VleC5leHRyYWN0Q29tcG9uZW50U3R5bGUodGhpcylcbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ3VsJywge1xuICAgICAgICAgICAgcmVmOiAnaW5uZXInLFxuICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICd3ZWV4LXNsaWRlci1pbm5lciB3ZWV4LWN0J1xuICAgICAgICAgIH0sIHRoaXMuX2NlbGxzKSxcbiAgICAgICAgICB0aGlzLl9pbmRpY2F0b3JcbiAgICAgICAgXVxuICAgICAgKVxuICAgIH0sXG5cbiAgICAvLyBnZXQgc3RhbmRhcmQgaW5kZXhcbiAgICBfbm9ybWFsaXplSW5kZXggKGluZGV4KSB7XG4gICAgICBjb25zdCBuZXdJbmRleCA9IChpbmRleCArIHRoaXMuZnJhbWVDb3VudCkgJSB0aGlzLmZyYW1lQ291bnRcbiAgICAgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heChuZXdJbmRleCwgMCksIHRoaXMuZnJhbWVDb3VudCAtIDEpXG4gICAgfSxcblxuICAgIF9zdGFydEF1dG9QbGF5ICgpIHtcbiAgICAgIGlmICghdGhpcy5hdXRvUGxheSB8fCB0aGlzLmF1dG9QbGF5ID09PSAnZmFsc2UnKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2F1dG9QbGF5VGltZXIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2F1dG9QbGF5VGltZXIpXG4gICAgICAgIHRoaXMuX2F1dG9QbGF5VGltZXIgPSBudWxsXG4gICAgICB9XG4gICAgICBsZXQgaW50ZXJ2YWwgPSBwYXJzZUludCh0aGlzLmludGVydmFsIC0gVFJBTlNJVElPTl9USU1FIC0gTkVJR0hCT1JfU0NBTEVfVElNRSlcbiAgICAgIGludGVydmFsID0gaW50ZXJ2YWwgPiBJTlRFUlZBTF9NSU5JTVVNID8gaW50ZXJ2YWwgOiBJTlRFUlZBTF9NSU5JTVVNXG4gICAgICB0aGlzLl9hdXRvUGxheVRpbWVyID0gc2V0VGltZW91dCh3ZWV4LnV0aWxzLmJpbmQodGhpcy5fbmV4dCwgdGhpcyksIGludGVydmFsKVxuICAgIH0sXG5cbiAgICBfc3RvcEF1dG9QbGF5ICgpIHtcbiAgICAgIGlmICh0aGlzLl9hdXRvUGxheVRpbWVyKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9hdXRvUGxheVRpbWVyKVxuICAgICAgICB0aGlzLl9hdXRvUGxheVRpbWVyID0gbnVsbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBfc2xpZGVUbyAoaW5kZXgsIGlzVG91Y2hTY3JvbGwpIHtcbiAgICAgIGlmICh0aGlzLmZyYW1lQ291bnQgPD0gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5pbmZpbml0ZSB8fCB0aGlzLmluZmluaXRlID09PSAnZmFsc2UnKSB7XG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEgfHwgaW5kZXggPiAodGhpcy5mcmFtZUNvdW50IC0gMSkpIHtcbiAgICAgICAgICB0aGlzLl9zbGlkZVRvKHRoaXMuY3VycmVudEluZGV4KVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuX3ByZUluZGV4ICYmIHRoaXMuX3ByZUluZGV4ICE9PSAwKSB7XG4gICAgICAgIGlmICh0aGlzLl9zaG93Tm9kZXMgJiYgdGhpcy5fc2hvd05vZGVzWzBdKSB7XG4gICAgICAgICAgdGhpcy5fcHJlSW5kZXggPSB0aGlzLl9zaG93Tm9kZXNbMF0uaW5kZXhcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9wcmVJbmRleCA9IHRoaXMuY3VycmVudEluZGV4XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX3NsaWRpbmcpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICB0aGlzLl9zbGlkaW5nID0gdHJ1ZVxuXG4gICAgICBjb25zdCBuZXdJbmRleCA9IHRoaXMuX25vcm1hbGl6ZUluZGV4KGluZGV4KVxuICAgICAgY29uc3QgaW5uZXIgPSB0aGlzLiRyZWZzLmlubmVyXG4gICAgICBjb25zdCBzdGVwID0gdGhpcy5fc3RlcCA9IHRoaXMuZnJhbWVDb3VudCA8PSAxID8gMCA6IHRoaXMuX3ByZUluZGV4IC0gaW5kZXhcblxuICAgICAgaWYgKGlubmVyKSB7XG4gICAgICAgIHRoaXMuX3ByZXBhcmVOb2RlcygpXG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZSA9IHdlZXgudXRpbHMuZ2V0VHJhbnNmb3JtT2JqKGlubmVyKS50cmFuc2xhdGVcbiAgICAgICAgY29uc3QgbWF0Y2ggPSB0cmFuc2xhdGUgJiYgdHJhbnNsYXRlLm1hdGNoKC90cmFuc2xhdGVbXihdK1xcKChbKy1cXGQuXSspLylcbiAgICAgICAgY29uc3QgaW5uZXJYID0gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgMFxuICAgICAgICBjb25zdCBkaXN0ID0gaW5uZXJYIC0gdGhpcy5pbm5lck9mZnNldFxuICAgICAgICB0aGlzLmlubmVyT2Zmc2V0ICs9IHN0ZXAgKiB0aGlzLl93cmFwcGVyV2lkdGhcbiAgICAgICAgLy8gdHJhbnNmb3JtIHRoZSB3aG9sZSBzbGlkZXMgZ3JvdXAuXG4gICAgICAgIGlubmVyLnN0eWxlLndlYmtpdFRyYW5zaXRpb24gPSBgLXdlYmtpdC10cmFuc2Zvcm0gJHtUUkFOU0lUSU9OX1RJTUUgLyAxMDAwfXMgZWFzZS1pbi1vdXRgXG4gICAgICAgIGlubmVyLnN0eWxlLm1velRyYW5zaXRpb24gPSBgdHJhbnNmb3JtICR7VFJBTlNJVElPTl9USU1FIC8gMTAwMH1zIGVhc2UtaW4tb3V0YFxuICAgICAgICBpbm5lci5zdHlsZS50cmFuc2l0aW9uID0gYHRyYW5zZm9ybSAke1RSQU5TSVRJT05fVElNRSAvIDEwMDB9cyBlYXNlLWluLW91dGBcbiAgICAgICAgaW5uZXIuc3R5bGUud2Via2l0VHJhbnNmb3JtID0gYHRyYW5zbGF0ZTNkKCR7dGhpcy5pbm5lck9mZnNldH1weCwgMCwgMClgXG4gICAgICAgIGlubmVyLnN0eWxlLm1velRyYW5zZm9ybSA9IGB0cmFuc2xhdGUzZCgke3RoaXMuaW5uZXJPZmZzZXR9cHgsIDAsIDApYFxuICAgICAgICBpbm5lci5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlM2QoJHt0aGlzLmlubmVyT2Zmc2V0fXB4LCAwLCAwKWBcblxuICAgICAgICAvLyBlbWl0IHNjcm9sbCBldmVudHMuXG4gICAgICAgIGlmICghaXNUb3VjaFNjcm9sbCkge1xuICAgICAgICAgIHRoaXMuX2VtaXRTY3JvbGxFdmVudCgnc2Nyb2xsc3RhcnQnKVxuICAgICAgICB9XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX3Rocm90dGxlRW1pdFNjcm9sbChkaXN0LCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0U2Nyb2xsRXZlbnQoJ3Njcm9sbGVuZCcpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSwgVEhST1RUTEVfU0NST0xMX1RJTUUpXG5cbiAgICAgICAgdGhpcy5fbG9vcFNob3dOb2RlcyhzdGVwKVxuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmlzTmVpZ2hib3IpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldE5laWdoYm9ycygpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpbm5lci5zdHlsZS53ZWJraXRUcmFuc2l0aW9uID0gJydcbiAgICAgICAgICAgIGlubmVyLnN0eWxlLm1velRyYW5zaXRpb24gPSAnJ1xuICAgICAgICAgICAgaW5uZXIuc3R5bGUudHJhbnNpdGlvbiA9ICcnXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5fc2hvd1N0YXJ0SWR4OyBpIDw9IHRoaXMuX3Nob3dFbmRJZHg7IGkrKykge1xuICAgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5fc2hvd05vZGVzW2ldXG4gICAgICAgICAgICAgIGlmICghbm9kZSkgeyBjb250aW51ZSB9XG4gICAgICAgICAgICAgIGNvbnN0IGVsbSA9IG5vZGUuZmlyc3RFbGVtZW50Q2hpbGRcbiAgICAgICAgICAgICAgZWxtLnN0eWxlLndlYmtpdFRyYW5zaXRpb24gPSAnJ1xuICAgICAgICAgICAgICBlbG0uc3R5bGUubW96VHJhbnNpdGlvbiA9ICcnXG4gICAgICAgICAgICAgIGVsbS5zdHlsZS50cmFuc2l0aW9uID0gJydcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNsZWFuIGNsb25lZCBub2RlcyBhbmQgcmVhcnJhbmdlIHNsaWRlIGNlbGxzLlxuICAgICAgICAgICAgdGhpcy5fcmVhcnJhbmdlTm9kZXMobmV3SW5kZXgpXG4gICAgICAgICAgfSwgTkVJR0hCT1JfU0NBTEVfVElNRSlcbiAgICAgICAgfSwgVFJBTlNJVElPTl9USU1FKVxuICAgICAgfVxuXG4gICAgICBpZiAobmV3SW5kZXggIT09IHRoaXMuX3ByZUluZGV4KSB7XG4gICAgICAgIHdlZXgudXRpbHMuZGlzcGF0Y2hOYXRpdmVFdmVudCh0aGlzLiRlbCwgJ2NoYW5nZScsIHtcbiAgICAgICAgICBpbmRleDogbmV3SW5kZXhcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2NsZWFyTm9kZXNPZmZzZXQgKCkge1xuICAgICAgY29uc3QgZW5kID0gdGhpcy5fc2hvd0VuZElkeFxuICAgICAgZm9yIChsZXQgaSA9IHRoaXMuX3Nob3dTdGFydElkeDsgaSA8PSBlbmQ7IGkrKykge1xuICAgICAgICBsZXQgbm9kZSA9IHRoaXMuX3Nob3dOb2Rlc1tpXVxuICAgICAgICBub2RlID0gbm9kZSAmJiBub2RlLmZpcnN0RWxlbWVudENoaWxkXG4gICAgICAgIGlmICghbm9kZSkgeyBjb250aW51ZSB9XG4gICAgICAgIHdlZXgudXRpbHMuYWRkVHJhbnNmb3JtKHRoaXMuX3Nob3dOb2Rlc1tpXS5maXJzdEVsZW1lbnRDaGlsZCwge1xuICAgICAgICAgIHRyYW5zbGF0ZTogJ3RyYW5zbGF0ZTNkKDBweCwgMHB4LCAwcHgpJ1xuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBfbG9vcFNob3dOb2RlcyAoc3RlcCkge1xuICAgICAgaWYgKCFzdGVwIHx8IHRoaXMuZnJhbWVDb3VudCA8PSAxKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY29uc3Qgc2lnbiA9IHN0ZXAgPiAwID8gMSA6IC0xXG4gICAgICBsZXQgaSA9IHN0ZXAgPD0gMCA/IHRoaXMuX3Nob3dTdGFydElkeCA6IHRoaXMuX3Nob3dFbmRJZHhcbiAgICAgIGNvbnN0IGVuZCA9IHN0ZXAgPD0gMCA/IHRoaXMuX3Nob3dFbmRJZHggOiB0aGlzLl9zaG93U3RhcnRJZHhcbiAgICAgIGZvciAoOyBpICE9PSBlbmQgLSBzaWduOyBpIC09IHNpZ24pIHtcbiAgICAgICAgY29uc3QgbmV4dElkeCA9IGkgKyBzdGVwXG4gICAgICAgIHRoaXMuX3Nob3dOb2Rlc1tuZXh0SWR4XSA9IHRoaXMuX3Nob3dOb2Rlc1tpXVxuICAgICAgICB0aGlzLl9zaG93Tm9kZXNbbmV4dElkeF0uX3Nob3dJbmRleCA9IG5leHRJZHhcbiAgICAgICAgZGVsZXRlIHRoaXMuX3Nob3dOb2Rlc1tpXVxuICAgICAgfVxuICAgICAgdGhpcy5fc2hvd1N0YXJ0SWR4ICs9IHN0ZXBcbiAgICAgIHRoaXMuX3Nob3dFbmRJZHggKz0gc3RlcFxuICAgIH0sXG5cbiAgICBfcHJlcGFyZU5vZGVzICgpIHtcbiAgICAgIC8vIHRlc3QgaWYgdGhlIG5leHQgc2xpZGUgdG93YXJkcyB0aGUgZGlyZWN0aW9uIGV4aXN0cy5cbiAgICAgIC8vIGUuZy4gY3VycmVudEluZGV4IDAgLT4gMTogc2hvdWxkIHByZXBhcmUgNCBzbGlkZXM6IC0xLCAwLCAxLCAyXG4gICAgICAvLyBpZiBub3QsIHRyYW5zbGF0ZSBhIG5vZGUgdG8gaGVyZSwgb3IganVzdCBjbG9uZSBpdC5cbiAgICAgIGNvbnN0IHN0ZXAgPSB0aGlzLl9zdGVwXG4gICAgICBpZiAoIXRoaXMuX2luaXRlZCkge1xuICAgICAgICB0aGlzLl9pbml0Tm9kZXMoKVxuICAgICAgICB0aGlzLl9pbml0ZWQgPSB0cnVlXG4gICAgICAgIHRoaXMuX3Nob3dOb2RlcyA9IHt9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5mcmFtZUNvdW50IDw9IDEpIHtcbiAgICAgICAgdGhpcy5fc2hvd1N0YXJ0SWR4ID0gdGhpcy5fc2hvd0VuZElkeCA9IDBcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuX2NlbGxzWzBdLmVsbVxuICAgICAgICBub2RlLnN0eWxlLm9wYWNpdHkgPSAxXG4gICAgICAgIG5vZGUuc3R5bGUuekluZGV4ID0gOTlcbiAgICAgICAgbm9kZS5pbmRleCA9IDBcbiAgICAgICAgdGhpcy5fc2hvd05vZGVzWzBdID0gbm9kZVxuICAgICAgICBub2RlLl9pblNob3cgPSB0cnVlXG4gICAgICAgIG5vZGUuX3Nob3dJbmRleCA9IDBcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNob3dDb3VudCA9IHRoaXMuX3Nob3dDb3VudCA9IE1hdGguYWJzKHN0ZXApICsgM1xuICAgICAgdGhpcy5fc2hvd1N0YXJ0SWR4ID0gc3RlcCA8PSAwID8gLTEgOiAyIC0gc2hvd0NvdW50XG4gICAgICB0aGlzLl9zaG93RW5kSWR4ID0gc3RlcCA8PSAwID8gc2hvd0NvdW50IC0gMiA6IDFcbiAgICAgIHRoaXMuX2NsZWFyTm9kZXNPZmZzZXQoKVxuICAgICAgdGhpcy5fcG9zaXRpb25Ob2Rlcyh0aGlzLl9zaG93U3RhcnRJZHgsIHRoaXMuX3Nob3dFbmRJZHgsIHN0ZXApXG4gICAgfSxcblxuICAgIF9jbGVhckNsb25lcyAoKSB7XG4gICAgICAvLyBjbGVhciBhbGwgY2xvbmVzLlxuICAgICAgT2JqZWN0LmtleXModGhpcy5fY2xvbmVzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIHRoaXMuX2Nsb25lc1trZXldLmZvckVhY2goY2xvbmVOb2RlID0+IHtcbiAgICAgICAgICBjbG9uZU5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjbG9uZU5vZGUpXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuX2Nsb25lc1trZXldID0gW11cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIC8vIHJlc2V0IG5vZGVzJyBpbmRleCBhbmQgX2luU2hvdyBzdGF0ZS4gQnV0IGxlYXZlIHRoZSBzdHlsZXNcbiAgICAvLyBhcyB0aGV5IGFyZSB0byBwcmV2ZW50IGRvbSByZXJlbmRlcmluZy5cbiAgICBfcmVzZXROb2RlcyAoKSB7XG4gICAgICB0aGlzLl9jbGVhckNsb25lcygpXG4gICAgICAvLyByZXNldCBzdGF0dXMuXG4gICAgICB0aGlzLl9jZWxscy5mb3JFYWNoKChjZWxsLCBpZHgpID0+IHtcbiAgICAgICAgY29uc3QgZWxtID0gY2VsbC5lbG1cbiAgICAgICAgZWxtLmluZGV4ID0gaWR4XG4gICAgICAgIGVsbS5faW5TaG93ID0gZmFsc2VcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIF9pbml0Tm9kZXMgKCkge1xuICAgICAgdGhpcy5fY2VsbHMuZm9yRWFjaCgoY2VsbCwgaWR4KSA9PiB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBjZWxsLmVsbVxuICAgICAgICBub2RlLmluZGV4ID0gaWR4XG4gICAgICAgIG5vZGUuX2luU2hvdyA9IGZhbHNlXG4gICAgICAgIG5vZGUuc3R5bGUuekluZGV4ID0gMFxuICAgICAgICBub2RlLnN0eWxlLm9wYWNpdHkgPSAwXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBfcG9zaXRpb25Ob2RlcyAoYmVnaW4sIGVuZCwgc3RlcCwgYW5pbSkge1xuICAgICAgY29uc3QgY2VsbHMgPSB0aGlzLl9jZWxsc1xuICAgICAgY29uc3Qgc3RhcnQgPSBzdGVwIDw9IDAgPyBiZWdpbiA6IGVuZFxuICAgICAgY29uc3Qgc3RvcCA9IHN0ZXAgPD0gMCA/IGVuZCA6IGJlZ2luXG4gICAgICBjb25zdCBzaWduID0gc3RlcCA8PSAwID8gLTEgOiAxXG4gICAgICBsZXQgY2VsbEluZGV4ID0gdGhpcy5fcHJlSW5kZXggKyBzaWduXG4gICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgIT09IHN0b3AgLSBzaWduOyBpID0gaSAtIHNpZ24pIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGNlbGxzW3RoaXMuX25vcm1hbGl6ZUluZGV4KGNlbGxJbmRleCldLmVsbVxuICAgICAgICBjZWxsSW5kZXggPSBjZWxsSW5kZXggLSBzaWduXG4gICAgICAgIHRoaXMuX3Bvc2l0aW9uTm9kZShub2RlLCBpKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBpbmRleDogcG9zaXRpb24gaW5kZXggaW4gdGhlIHNob3dpbmcgY2VsbHMnIHZpZXcuXG4gICAgICovXG4gICAgX3Bvc2l0aW9uTm9kZSAobm9kZSwgaW5kZXgpIHtcbiAgICAgIGNvbnN0IGhvbGRlciA9IHRoaXMuX3Nob3dOb2Rlc1tpbmRleF1cbiAgICAgIGlmIChub2RlLl9pblNob3cgJiYgKGhvbGRlciAhPT0gbm9kZSB8fCBob2xkZXIuX3Nob3dJbmRleCAhPT0gaW5kZXgpKSB7XG4gICAgICAgIGlmIChob2xkZXIgJiYgaG9sZGVyLl9pc0Nsb25lKSB7IHRoaXMuX3JlbW92ZUNsb25lKGhvbGRlcikgfVxuICAgICAgICBub2RlID0gdGhpcy5fZ2V0Q2xvbmUobm9kZS5pbmRleClcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKG5vZGUuX2luU2hvdykgeyAgLy8gaG9sZGVyID09PSBub2RlXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBub2RlLl9pblNob3cgPSB0cnVlXG4gICAgICBjb25zdCB0cmFuc2xhdGVYID0gaW5kZXggKiB0aGlzLl93cmFwcGVyV2lkdGggLSB0aGlzLmlubmVyT2Zmc2V0XG4gICAgICB3ZWV4LnV0aWxzLmFkZFRyYW5zZm9ybShub2RlLCB7XG4gICAgICAgIHRyYW5zbGF0ZTogYHRyYW5zbGF0ZTNkKCR7dHJhbnNsYXRlWH1weCwgMHB4LCAwcHgpYFxuICAgICAgfSlcbiAgICAgIG5vZGUuc3R5bGUuekluZGV4ID0gOTkgLSBNYXRoLmFicyhpbmRleClcbiAgICAgIG5vZGUuc3R5bGUub3BhY2l0eSA9IDFcbiAgICAgIG5vZGUuX3Nob3dJbmRleCA9IGluZGV4XG4gICAgICB0aGlzLl9zaG93Tm9kZXNbaW5kZXhdID0gbm9kZVxuICAgIH0sXG5cbiAgICBfZ2V0Q2xvbmUgKGluZGV4KSB7XG4gICAgICBjb25zdCBhcnIgPSB0aGlzLl9jbG9uZXNbaW5kZXhdIHx8ICh0aGlzLl9jbG9uZXNbaW5kZXhdID0gW10pXG4gICAgICBjb25zdCBvcmlnTm9kZSA9IHRoaXMuX2NlbGxzW2luZGV4XS5lbG1cbiAgICAgIGNvbnN0IGNsb25lID0gb3JpZ05vZGUuY2xvbmVOb2RlKHRydWUpXG4gICAgICBjbG9uZS5faXNDbG9uZSA9IHRydWVcbiAgICAgIGNsb25lLl9pblNob3cgPSB0cnVlXG4gICAgICAvLyBjbG9uZS5faW5TaG93ID0gb3JpZ05vZGUuX2luU2hvd1xuICAgICAgY2xvbmUuaW5kZXggPSBvcmlnTm9kZS5pbmRleFxuICAgICAgY2xvbmUuc3R5bGUub3BhY2l0eSA9IDBcbiAgICAgIGNsb25lLnN0eWxlLnpJbmRleCA9IDBcbiAgICAgIHRoaXMuJHJlZnMuaW5uZXIuYXBwZW5kQ2hpbGQoY2xvbmUpXG4gICAgICBhcnIucHVzaChjbG9uZSlcbiAgICAgIHJldHVybiBjbG9uZVxuICAgICAgLy8gdHJ5IHtcbiAgICAgIC8vICAgbGV0IGFyciA9IHRoaXMuX2Nsb25lc1tpbmRleF1cbiAgICAgIC8vICAgaWYgKCFhcnIpIHtcbiAgICAgIC8vICAgICB0aGlzLl9jbG9uZXNbaW5kZXhdID0gYXJyID0gW11cbiAgICAgIC8vICAgfVxuICAgICAgLy8gICBpZiAoYXJyLmxlbmd0aCA8PSAwKSB7XG5cbiAgICAgIC8vICAgfVxuICAgICAgLy8gICByZXR1cm4gYXJyLnBvcCgpXG4gICAgICAvLyB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vICAgY29uc29sZS5lcnJvcigndGhpcy5fY2VsbHMgLT4gJywgdGhpcy5fY2VsbHMpXG4gICAgICAvLyB9XG4gICAgfSxcblxuICAgIF9yZW1vdmVDbG9uZSAobm9kZSkge1xuICAgICAgY29uc3QgY2xvbmVBcnIgPSB0aGlzLl9jbG9uZXNbbm9kZS5pbmRleF1cbiAgICAgIGxldCBpXG4gICAgICBpZiAoY2xvbmVBcnIgJiYgKGkgPSBjbG9uZUFyci5pbmRleE9mKG5vZGUpKSA+IC0xKSB7XG4gICAgICAgIGNsb25lQXJyLnNwbGljZShpLCAxKVxuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpXG4gICAgICB9XG4gICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8vIG1heWJlIGNlbGxzIGhhcyBiZWVuIHVwZGF0ZWQgYW5kIHRoaXMgY2xvbmUgbm9kZSBpcyBhbHJlYWR5IHJlbW92ZWQgZnJvbSB0aGUgZG9tIHRyZWVcbiAgICAgICAgLy8gdGhyb3VnaHQgX2NsZWFyQ2xvbmVzIG1ldGhvZC5cbiAgICAgIH1cbiAgICAgIC8vIGNvbnN0IGlkeCA9IG5vZGUuaW5kZXhcbiAgICAgIC8vIHRoaXMuX2hpZGVOb2RlKG5vZGUpXG4gICAgICAvLyBjb25zdCBhcnIgPSB0aGlzLl9jbG9uZXNbaWR4XVxuICAgICAgLy8gYXJyLnB1c2gobm9kZSlcbiAgICB9LFxuXG4gICAgX2hpZGVOb2RlIChub2RlKSB7XG4gICAgICBub2RlLl9pblNob3cgPSBmYWxzZVxuICAgICAgbm9kZS5zdHlsZS5vcGFjaXR5ID0gMFxuICAgICAgbm9kZS5zdHlsZS56SW5kZXggPSAwXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGhpZGUgbm9kZXMgZnJvbSBiZWdpbiB0byBlbmQgaW4gc2hvd0FycmF5LlxuICAgICAqIGlmIGl0IGlzIGNsb25lIG5vZGUsIGp1c3QgbW92ZSB0aGUgY2xvbmUgbm9kZSB0byB0aGUgYnVmZmVyLlxuICAgICAqL1xuICAgIF9jbGVhck5vZGVzIChiZWdpbiwgZW5kKSB7XG4gICAgICBmb3IgKGxldCBpID0gYmVnaW47IGkgPD0gZW5kOyBpKyspIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuX3Nob3dOb2Rlc1tpXVxuICAgICAgICBpZiAoIW5vZGUpIHsgcmV0dXJuIH1cbiAgICAgICAgaWYgKG5vZGUuX2lzQ2xvbmUpIHtcbiAgICAgICAgICB0aGlzLl9yZW1vdmVDbG9uZShub2RlKVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFub2RlLl9pblNob3cpIHtcbiAgICAgICAgICB0aGlzLl9oaWRlTm9kZShub2RlKVxuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9zaG93Tm9kZXNbaV1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogY29weSBub2RlIHN0eWxlIHByb3BzIChvcGFjaXR5IGFuZCB6SW5kZXgpIGFuZCB0cmFuc2Zvcm0gc3RhdHVzIGZyb21cbiAgICAgKiBvbmUgZWxlbWVudCB0byBhbm90aGVyLlxuICAgICAqL1xuICAgIF9jb3B5U3R5bGUgKGZyb20sIHRvLCBzdHlsZXMgPSBbJ29wYWNpdHknLCAnekluZGV4J10sIHRyYW5zZm9ybUV4dHJhID0ge30pIHtcbiAgICAgIHdlZXgudXRpbHMuZXh0ZW5kS2V5cyh0by5zdHlsZSwgZnJvbS5zdHlsZSwgc3R5bGVzKVxuICAgICAgY29uc3QgdHJhbnNPYmogPSB3ZWV4LnV0aWxzLmdldFRyYW5zZm9ybU9iaihmcm9tKVxuICAgICAgZm9yIChjb25zdCBrIGluIHRyYW5zZm9ybUV4dHJhKSB7XG4gICAgICAgIHRyYW5zT2JqW2tdID0gdHJhbnNmb3JtRXh0cmFba11cbiAgICAgIH1cbiAgICAgIHdlZXgudXRpbHMuYWRkVHJhbnNmb3JtKHRvLCB0cmFuc09iailcbiAgICAgIGNvbnN0IGZyb21Jbm5lciA9IGZyb20uZmlyc3RFbGVtZW50Q2hpbGRcbiAgICAgIGNvbnN0IHRvSW5uZXIgPSB0by5maXJzdEVsZW1lbnRDaGlsZFxuICAgICAgdG9Jbm5lci5zdHlsZS5vcGFjaXR5ID0gZnJvbUlubmVyLnN0eWxlLm9wYWNpdHlcbiAgICAgIHdlZXgudXRpbHMuY29weVRyYW5zZm9ybShmcm9tSW5uZXIsIHRvSW5uZXIpXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHJlcGxhY2UgYSBjbG9uZSBub2RlIHdpdGggdGhlIG9yaWdpbmFsIG5vZGUgaWYgaXQncyBub3QgaW4gdXNlLlxuICAgICAqL1xuICAgIF9yZXBsYWNlQ2xvbmUgKGNsb25lLCBwb3MpIHtcbiAgICAgIGNvbnN0IG9yaWdDZWxsID0gdGhpcy5fY2VsbHNbY2xvbmUuaW5kZXhdXG4gICAgICBpZiAoIW9yaWdDZWxsKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY29uc3Qgb3JpZ05vZGUgPSBvcmlnQ2VsbC5lbG1cbiAgICAgIGlmIChvcmlnTm9kZS5faW5TaG93KSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY29uc3Qgb3JpZ1Nob3dJbmRleCA9IG9yaWdOb2RlLl9zaG93SW5kZXhcbiAgICAgIGNvbnN0IHN0eWxlUHJvcHMgPSBbJ29wYWNpdHknLCAnekluZGV4J11cbiAgICAgIGxldCBjbFxuICAgICAgaWYgKE1hdGguYWJzKG9yaWdTaG93SW5kZXgpIDw9IDEpIHtcbiAgICAgICAgLy8gbGVhdmUgYSBjbG9uZSB0byByZXBsYWNlIHRoZSBvcmlnTm9kZSBpbiB0aGUgc2hvdyB6b25lKC0xIH4gMSkuXG4gICAgICAgIGNsID0gdGhpcy5fZ2V0Q2xvbmUob3JpZ05vZGUuaW5kZXgpXG4gICAgICAgIHRoaXMuX2NvcHlTdHlsZShvcmlnTm9kZSwgY2wpXG4gICAgICAgIHRoaXMuX3Nob3dOb2Rlc1tvcmlnU2hvd0luZGV4XSA9IGNsXG4gICAgICB9XG4gICAgICBvcmlnTm9kZS5faW5TaG93ID0gdHJ1ZVxuICAgICAgY29uc3QgdHJhbnNPYmogPSB3ZWV4LnV0aWxzLmdldFRyYW5zZm9ybU9iaihjbG9uZSlcbiAgICAgIHRyYW5zT2JqLnRyYW5zbGF0ZSA9IHRyYW5zT2JqLnRyYW5zbGF0ZS5yZXBsYWNlKC9bKy1cXGQuXStbcHddeC8sICgkMCkgPT4ge1xuICAgICAgICByZXR1cm4gcG9zICogdGhpcy5fd3JhcHBlcldpZHRoIC0gdGhpcy5pbm5lck9mZnNldCArICdweCdcbiAgICAgIH0pXG4gICAgICB0aGlzLl9jb3B5U3R5bGUoY2xvbmUsIG9yaWdOb2RlLCBzdHlsZVByb3BzLCB0cmFuc09iailcbiAgICAgIHRoaXMuX3JlbW92ZUNsb25lKGNsb25lKVxuICAgICAgaWYgKCFjbCkge1xuICAgICAgICBkZWxldGUgdGhpcy5fc2hvd05vZGVzW29yaWdTaG93SW5kZXhdXG4gICAgICB9XG4gICAgICB0aGlzLl9zaG93Tm9kZXNbcG9zXSA9IG9yaWdOb2RlXG4gICAgICBvcmlnTm9kZS5fc2hvd0luZGV4ID0gcG9zXG4gICAgfSxcblxuICAgIF9yZWFycmFuZ2VOb2RlcyAobmV3SW5kZXgpIHtcbiAgICAgIGlmICh0aGlzLmZyYW1lQ291bnQgPD0gMSkge1xuICAgICAgICB0aGlzLl9zbGlkaW5nID0gZmFsc2VcbiAgICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSAwXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBjbGVhciBhdXRvUGxheSB0aW1lciAoYW5kIHJlc3RhcnQgYWZ0ZXIgdXBkYXRlZCBob29rKS5cbiAgICAgIHRoaXMuX3N0YXJ0QXV0b1BsYXkoKVxuXG4gICAgICAvKipcbiAgICAgICAqIGNsZWFuIG5vZGVzLiByZXBsYWNlIGN1cnJlbnQgbm9kZSB3aXRoIG5vbi1jbG9uZWQgbm9kZS5cbiAgICAgICAqIHNldCBjdXJyZW50IGluZGV4IHRvIHRoZSBuZXcgaW5kZXguXG4gICAgICAgKi9cbiAgICAgIGNvbnN0IHNob3dzID0gdGhpcy5fc2hvd05vZGVzXG4gICAgICBmb3IgKGxldCBpID0gdGhpcy5fc2hvd1N0YXJ0SWR4OyBpIDw9IHRoaXMuX3Nob3dFbmRJZHg7IGkrKykge1xuICAgICAgICBzaG93c1tpXS5faW5TaG93ID0gZmFsc2VcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAtMTsgaSA8PSAxOyBpKyspIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHNob3dzW2ldXG4gICAgICAgIGlmICghbm9kZS5faXNDbG9uZSkge1xuICAgICAgICAgIG5vZGUuX2luU2hvdyA9IHRydWVcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9yZXBsYWNlQ2xvbmUobm9kZSwgaSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9jbGVhck5vZGVzKHRoaXMuX3Nob3dTdGFydElkeCwgLTIpXG4gICAgICB0aGlzLl9zaG93U3RhcnRJZHggPSAtMVxuICAgICAgdGhpcy5fY2xlYXJOb2RlcygyLCB0aGlzLl9zaG93RW5kSWR4KVxuICAgICAgdGhpcy5fc2hvd0VuZElkeCA9IDFcbiAgICAgIHRoaXMuX3NsaWRpbmcgPSBmYWxzZVxuXG4gICAgICAvLyBzZXQgY3VycmVudCBpbmRleCB0byB0aGUgbmV3IGluZGV4LlxuICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSBuZXdJbmRleFxuICAgICAgdGhpcy5fcHJlSW5kZXggPSBuZXdJbmRleFxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBhY2NvcmRpbmcgdG8gdGhlIGF0dHJzOiBuZWlnaGJvclNjYWxlLCBuZWlnaGJvckFscGhhLCBuZWlnaGJvclNwYWNlLlxuICAgICAqIDEuIGFwcGx5IHRoZSBtYWluIGNlbGwgdHJhbnNmb3JtIGVmZmVjdHMuXG4gICAgICogMi4gc2V0IHRoZSBwcmV2aW91cyBjZWxsIGFuZCB0aGUgbmV4dCBjZWxsJ3MgcG9zaXRvbiwgc2NhbGUgYW5kIGFscGhhLlxuICAgICAqIDMuIHNldCBvdGhlciBjZWxscycgc2NhbGUgYW5kIGFscGhhLlxuICAgICAqL1xuICAgIF9zZXROZWlnaGJvcnMgKCkge1xuICAgICAgZm9yIChsZXQgaSA9IHRoaXMuX3Nob3dTdGFydElkeDsgaSA8PSB0aGlzLl9zaG93RW5kSWR4OyBpKyspIHtcbiAgICAgICAgY29uc3QgZWxtID0gdGhpcy5fc2hvd05vZGVzW2ldLmZpcnN0RWxlbWVudENoaWxkXG4gICAgICAgIGVsbS5zdHlsZS53ZWJraXRUcmFuc2l0aW9uID0gYGFsbCAke05FSUdIQk9SX1NDQUxFX1RJTUUgLyAxMDAwfXMgZWFzZWBcbiAgICAgICAgZWxtLnN0eWxlLm1velRyYW5zaXRpb24gPSBgYWxsICR7TkVJR0hCT1JfU0NBTEVfVElNRSAvIDEwMDB9cyBlYXNlYFxuICAgICAgICBlbG0uc3R5bGUudHJhbnNpdGlvbiA9IGBhbGwgJHtORUlHSEJPUl9TQ0FMRV9USU1FIC8gMTAwMH1zIGVhc2VgXG4gICAgICAgIGNvbnN0IHRyYW5zT2JqID0ge1xuICAgICAgICAgIHNjYWxlOiBgc2NhbGUoJHtpID09PSAwID8gdGhpcy5jdXJyZW50SXRlbVNjYWxlIDogdGhpcy5uZWlnaGJvclNjYWxlfSlgXG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRyYW5zbGF0ZVhcbiAgICAgICAgaWYgKCF0aGlzLl9uZWlnaGJvcldpZHRoKSB7XG4gICAgICAgICAgdGhpcy5fbmVpZ2hib3JXaWR0aCA9IHBhcnNlRmxvYXQoZWxtLnN0eWxlLndpZHRoKSB8fCBlbG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGhcbiAgICAgICAgfVxuICAgICAgICAvLyBjYWxjdWxhdGUgcG9zaXRpb24gb2Zmc2V0cyBhY2NvcmRpbmcgdG8gbmVpZ2hib3Igc2NhbGVzLlxuICAgICAgICBpZiAoTWF0aC5hYnMoaSkgPT09IDEpIHtcbiAgICAgICAgICBjb25zdCBkaXN0ID0gKCh0aGlzLl93cmFwcGVyV2lkdGggLSB0aGlzLl9uZWlnaGJvcldpZHRoICogdGhpcy5uZWlnaGJvclNjYWxlKSAvIDJcbiAgICAgICAgICAgICsgdGhpcy5uZWlnaGJvclNwYWNlICogd2VleC5jb25maWcuZW52LnNjYWxlKSAvIHRoaXMubmVpZ2hib3JTY2FsZVxuICAgICAgICAgIHRyYW5zbGF0ZVggPSAtaSAqIGRpc3RcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAvLyBjbGVhciBwb3NpdGlvbiBvZmZzZXRzLlxuICAgICAgICAgIHRyYW5zbGF0ZVggPSAwXG4gICAgICAgIH1cbiAgICAgICAgdHJhbnNPYmoudHJhbnNsYXRlID0gYHRyYW5zbGF0ZTNkKCR7dHJhbnNsYXRlWH1weCwgMHB4LCAwcHgpYFxuICAgICAgICB3ZWV4LnV0aWxzLmFkZFRyYW5zZm9ybShlbG0sIHRyYW5zT2JqKVxuICAgICAgICBlbG0uc3R5bGUub3BhY2l0eSA9IGkgPT09IDAgPyBNQUlOX1NMSURFX09QQUNJVFkgOiB0aGlzLm5laWdoYm9yQWxwaGFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX25leHQgKCkge1xuICAgICAgbGV0IG5leHQgPSB0aGlzLmN1cnJlbnRJbmRleCArIDFcbiAgICAgIGlmICh0aGlzLmZyYW1lQ291bnQgPD0gMSkge1xuICAgICAgICBuZXh0LS1cbiAgICAgIH1cbiAgICAgIHRoaXMuX3NsaWRlVG8obmV4dClcbiAgICB9LFxuXG4gICAgX3ByZXYgKCkge1xuICAgICAgbGV0IHByZXYgPSB0aGlzLmN1cnJlbnRJbmRleCAtIDFcbiAgICAgIGlmICh0aGlzLmZyYW1lQ291bnQgPD0gMSkge1xuICAgICAgICBwcmV2KytcbiAgICAgIH1cbiAgICAgIHRoaXMuX3NsaWRlVG8ocHJldilcbiAgICB9LFxuXG4gICAgX2hhbmRsZVRvdWNoU3RhcnQgKGV2ZW50KSB7XG4gICAgICBjb25zdCB0b3VjaCA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdXG4gICAgICB0aGlzLl9zdG9wQXV0b1BsYXkoKVxuICAgICAgY29uc3QgaW5uZXIgPSB0aGlzLiRyZWZzLmlubmVyXG4gICAgICB0aGlzLl90b3VjaFBhcmFtcyA9IHtcbiAgICAgICAgb3JpZ2luYWxUcmFuc2Zvcm06IGlubmVyLnN0eWxlLndlYmtpdFRyYW5zZm9ybVxuICAgICAgICAgIHx8IGlubmVyLnN0eWxlLm1velRyYW5zZm9ybVxuICAgICAgICAgIHx8IGlubmVyLnN0eWxlLnRyYW5zZm9ybSxcbiAgICAgICAgc3RhcnRUb3VjaEV2ZW50OiB0b3VjaCxcbiAgICAgICAgc3RhcnRYOiB0b3VjaC5wYWdlWCxcbiAgICAgICAgc3RhcnRZOiB0b3VjaC5wYWdlWSxcbiAgICAgICAgdGltZVN0YW1wOiBldmVudC50aW1lU3RhbXBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2hhbmRsZVRvdWNoTW92ZSAoZXZlbnQpIHtcbiAgICAgIGNvbnN0IHRwID0gdGhpcy5fdG91Y2hQYXJhbXNcbiAgICAgIGlmICghdHApIHsgcmV0dXJuIH1cbiAgICAgIGlmICh0aGlzLl9zbGlkaW5nKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50Jykge1xuICAgICAgICAgIGNvbnNvbGUud2FybihgW3Z1ZS1yZW5kZXJdIHdhcm46IGNhbid0IHNjcm9sbCB0aGUgc2xpZGVyIGR1cmluZyBzbGlkaW5nLmApXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBjb25zdCB7IHN0YXJ0WCwgc3RhcnRZIH0gPSB0aGlzLl90b3VjaFBhcmFtc1xuICAgICAgY29uc3QgdG91Y2ggPSBldmVudC5jaGFuZ2VkVG91Y2hlc1swXVxuICAgICAgY29uc3Qgb2Zmc2V0WCA9IHRvdWNoLnBhZ2VYIC0gc3RhcnRYXG4gICAgICBjb25zdCBvZmZzZXRZID0gdG91Y2gucGFnZVkgLSBzdGFydFlcbiAgICAgIHRwLm9mZnNldFggPSBvZmZzZXRYXG4gICAgICB0cC5vZmZzZXRZID0gb2Zmc2V0WVxuICAgICAgbGV0IGlzViA9IHRwLmlzVmVydGljYWxcbiAgICAgIGlmICh0eXBlb2YgaXNWID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBpc1YgPSB0cC5pc1ZlcnRpY2FsID0gTWF0aC5hYnMob2Zmc2V0WCkgPCBNYXRoLmFicyhvZmZzZXRZKVxuICAgICAgICBpZiAoIWlzVikge1xuICAgICAgICAgIHRoaXMuX2VtaXRTY3JvbGxFdmVudCgnc2Nyb2xsc3RhcnQnKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyB2ZXJ0aWNhbCBzY3JvbGwuIGp1c3QgaWdub3JlIGl0LlxuICAgICAgaWYgKGlzVikge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIC8vIGhvcml6b250YWwgc2Nyb2xsLiB0cmlnZ2VyIHNjcm9sbCBldmVudC5cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgIGNvbnN0IGlubmVyID0gdGhpcy4kcmVmcy5pbm5lclxuICAgICAgaWYgKGlubmVyICYmIG9mZnNldFgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9ub2Rlc09mZnNldENsZWFyZWQpIHtcbiAgICAgICAgICB0aGlzLl9ub2Rlc09mZnNldENsZWFyZWQgPSB0cnVlXG4gICAgICAgICAgdGhpcy5fY2xlYXJOb2Rlc09mZnNldCgpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZW1pdFNjcm9sbEV2ZW50KCd3ZWV4JHNjcm9sbCcsIHtcbiAgICAgICAgICBvZmZzZXRYUmF0aW86IG9mZnNldFggLyB0aGlzLl93cmFwcGVyV2lkdGhcbiAgICAgICAgfSlcbiAgICAgICAgaW5uZXIuc3R5bGUud2Via2l0VHJhbnNmb3JtID0gYHRyYW5zbGF0ZTNkKCR7dGhpcy5pbm5lck9mZnNldCArIG9mZnNldFh9cHgsIDAsIDApYFxuICAgICAgICBpbm5lci5zdHlsZS5tb3pUcmFuc2Zvcm0gPSBgdHJhbnNsYXRlM2QoJHt0aGlzLmlubmVyT2Zmc2V0ICsgb2Zmc2V0WH1weCwgMCwgMClgXG4gICAgICAgIGlubmVyLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUzZCgke3RoaXMuaW5uZXJPZmZzZXQgKyBvZmZzZXRYfXB4LCAwLCAwKWBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2hhbmRsZVRvdWNoRW5kIChldmVudCkge1xuICAgICAgdGhpcy5fc3RhcnRBdXRvUGxheSgpXG4gICAgICBjb25zdCB0cCA9IHRoaXMuX3RvdWNoUGFyYW1zXG4gICAgICBpZiAoIXRwKSB7IHJldHVybiB9XG4gICAgICBjb25zdCBpc1YgPSB0cC5pc1ZlcnRpY2FsXG4gICAgICBpZiAodHlwZW9mIGlzViA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBjb25zdCBpbm5lciA9IHRoaXMuJHJlZnMuaW5uZXJcbiAgICAgIGNvbnN0IHsgb2Zmc2V0WCB9ID0gdHBcbiAgICAgIGlmIChpbm5lcikge1xuICAgICAgICB0aGlzLl9ub2Rlc09mZnNldENsZWFyZWQgPSBmYWxzZVxuICAgICAgICAvLyBUT0RPOiB0ZXN0IHRoZSB2ZWxvY2l0eSBpZiBpdCdzIGxlc3MgdGhhbiAwLjIuXG4gICAgICAgIGNvbnN0IHJlc2V0ID0gTWF0aC5hYnMob2Zmc2V0WCAvIHRoaXMuX3dyYXBwZXJXaWR0aCkgPCAwLjJcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gb2Zmc2V0WCA+IDAgPyAxIDogLTFcbiAgICAgICAgY29uc3QgbmV3SW5kZXggPSByZXNldCA/IHRoaXMuY3VycmVudEluZGV4IDogKHRoaXMuY3VycmVudEluZGV4IC0gZGlyZWN0aW9uKVxuICAgICAgICB0aGlzLl9zbGlkZVRvKG5ld0luZGV4LCB0cnVlKVxuICAgICAgfVxuICAgICAgZGVsZXRlIHRoaXMuX3RvdWNoUGFyYW1zXG4gICAgfSxcblxuICAgIF9oYW5kbGVUb3VjaENhbmNlbCAoZXZlbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9oYW5kbGVUb3VjaEVuZChldmVudClcbiAgICB9LFxuXG4gICAgX2VtaXRTY3JvbGxFdmVudCAodHlwZSwgZGF0YSA9IHt9KSB7XG4gICAgICBjb25zdCBlbCA9IHRoaXMuJGVsXG4gICAgICBpZiAoZWwpIHtcbiAgICAgICAgd2VleC51dGlscy5kaXNwYXRjaE5hdGl2ZUV2ZW50KGVsLCB0eXBlLCBkYXRhKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBfdGhyb3R0bGVFbWl0U2Nyb2xsIChvZmZzZXQsIGNhbGxiYWNrKSB7XG4gICAgICBsZXQgaSA9IDBcbiAgICAgIGNvbnN0IHRocm90dGxlVGltZSA9IFRIUk9UVExFX1NDUk9MTF9USU1FXG4gICAgICBjb25zdCBjbnQgPSBwYXJzZUludChUUkFOU0lUSU9OX1RJTUUgLyB0aHJvdHRsZVRpbWUpIC0gMVxuICAgICAgY29uc3Qgc2lnbiA9IG9mZnNldCA+IDAgPyAxIDogLTFcbiAgICAgIGNvbnN0IHIgPSBNYXRoLmFicyhvZmZzZXQgLyB0aGlzLl93cmFwcGVyV2lkdGgpXG4gICAgICBjb25zdCB0aHJvdHRsZWRTY3JvbGwgPSAoKSA9PiB7XG4gICAgICAgIGlmICgrK2kgPiBjbnQpIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sgJiYgY2FsbGJhY2suY2FsbCh0aGlzKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJhdGlvID0gdGhpcy5fc3RlcCA9PT0gMFxuICAgICAgICAgID8gc2lnbiAqIHIgKiAoMSAtIGkgLyBjbnQpXG4gICAgICAgICAgOiBzaWduICogKHIgKyAoMSAtIHIpICogaSAvIGNudClcbiAgICAgICAgdGhpcy5fZW1pdFNjcm9sbEV2ZW50KCd3ZWV4JHNjcm9sbCcsIHtcbiAgICAgICAgICBvZmZzZXRYUmF0aW86IHJhdGlvXG4gICAgICAgIH0pXG4gICAgICAgIHNldFRpbWVvdXQodGhyb3R0bGVkU2Nyb2xsLCBUSFJPVFRMRV9TQ1JPTExfVElNRSlcbiAgICAgIH1cbiAgICAgIHRocm90dGxlZFNjcm9sbCgpXG4gICAgfVxuICB9XG59XG4iLCIvKlxuICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlXG4gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvblxuICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZVxuICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZVxuICogXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcbiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZVxuICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9uc1xuICogdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8vIGltcG9ydCB7IHZhbGlkYXRlU3R5bGVzIH0gZnJvbSAnLi4vLi4vdmFsaWRhdG9yJ1xuLy8gaW1wb3J0IGluZGljYXRvciBmcm9tICcuL2luZGljYXRvcidcbmltcG9ydCBzbGlkZU1peGluIGZyb20gJy4vc2xpZGVNaXhpbidcblxuY29uc3Qgc2xpZGVyID0ge1xuICBtaXhpbnM6IFtzbGlkZU1peGluXSxcbiAgcHJvcHM6IHtcbiAgICBpbmRleDoge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXSxcbiAgICAgIGRlZmF1bHQ6IDBcbiAgICB9LFxuICAgICdhdXRvLXBsYXknOiB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBCb29sZWFuXSxcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICBpbnRlcnZhbDoge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXSxcbiAgICAgIGRlZmF1bHQ6IDMwMDBcbiAgICB9LFxuICAgIGluZmluaXRlOiB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBCb29sZWFuXSxcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBpbmRleCAoKSB7XG4gICAgICB0aGlzLmN1cnJlbnRJbmRleCA9IHRoaXMuX25vcm1hbGl6ZUluZGV4KHRoaXMuaW5kZXgpXG4gICAgfVxuICB9LFxuXG4gIGRhdGEgKCkge1xuICAgIHJldHVybiB7XG4gICAgICBmcmFtZUNvdW50OiAwLFxuICAgICAgY3VycmVudEluZGV4OiB0aGlzLmluZGV4XG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZUNyZWF0ZSAoKSB7XG4gICAgdGhpcy53ZWV4VHlwZSA9ICdzbGlkZXInXG4gIH0sXG5cbiAgcmVuZGVyIChjcmVhdGVFbGVtZW50KSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAvLyBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAvLyAgIHZhbGlkYXRlU3R5bGVzKCdzbGlkZXInLCB0aGlzLiR2bm9kZS5kYXRhICYmIHRoaXMuJHZub2RlLmRhdGEuc3RhdGljU3R5bGUpXG4gICAgLy8gfVxuICAgIHJldHVybiB0aGlzLl9yZW5kZXJTbGlkZXMoY3JlYXRlRWxlbWVudClcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQgKHdlZXgpIHtcbiAgICB3ZWV4LnJlZ2lzdGVyQ29tcG9uZW50KCdzbGlkZXInLCBzbGlkZXIpXG4gICAgd2VleC5yZWdpc3RlckNvbXBvbmVudCgnY3ljbGVzbGlkZXInLCBzbGlkZXIpXG4gIH1cbn1cbiIsIi8qXG4gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGVcbiAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uXG4gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlXG4gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlXG4gKiBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxuICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlXG4gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zXG4gKiB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHNsaWRlTWl4aW4gZnJvbSAnLi9zbGlkZU1peGluJ1xuXG5jb25zdCBERUZBVUxUX05FSUdIQk9SX1NQQUNFID0gMjBcbmNvbnN0IERFRkFVTFRfTkVJR0hCT1JfQUxQSEEgPSAwLjZcbmNvbnN0IERFRkFVTFRfTkVJR0hCT1JfU0NBTEUgPSAwLjhcbmNvbnN0IERFRkFVTFRfQ1VSUkVOVF9JVEVNX1NDQUxFID0gMC45XG5cbmNvbnN0IHNsaWRlck5laWdoYm9yID0ge1xuICBtaXhpbnM6IFtzbGlkZU1peGluXSxcbiAgcHJvcHM6IHtcbiAgICBpbmRleDoge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXSxcbiAgICAgIGRlZmF1bHQ6IDBcbiAgICB9LFxuICAgIGF1dG9QbGF5OiB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBCb29sZWFuXSxcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICBpbnRlcnZhbDoge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXSxcbiAgICAgIGRlZmF1bHQ6IDMwMDBcbiAgICB9LFxuICAgIGluZmluaXRlOiB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBCb29sZWFuXSxcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIG5laWdoYm9yU3BhY2U6IHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICB2YWxpZGF0b3I6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgdmFsID0gcGFyc2VGbG9hdCh2YWwpXG4gICAgICAgIHJldHVybiAhaXNOYU4odmFsKSAmJiB2YWwgPiAwXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogREVGQVVMVF9ORUlHSEJPUl9TUEFDRVxuICAgIH0sXG4gICAgbmVpZ2hib3JBbHBoYToge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXSxcbiAgICAgIHZhbGlkYXRvcjogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICB2YWwgPSBwYXJzZUZsb2F0KHZhbClcbiAgICAgICAgcmV0dXJuICFpc05hTih2YWwpICYmIHZhbCA+PSAwICYmIHZhbCA8PSAxXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogREVGQVVMVF9ORUlHSEJPUl9BTFBIQVxuICAgIH0sXG4gICAgbmVpZ2hib3JTY2FsZToge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXSxcbiAgICAgIHZhbGlkYXRvcjogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICB2YWwgPSBwYXJzZUZsb2F0KHZhbClcbiAgICAgICAgcmV0dXJuICFpc05hTih2YWwpICYmIHZhbCA+PSAwICYmIHZhbCA8PSAxXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogREVGQVVMVF9ORUlHSEJPUl9TQ0FMRVxuICAgIH0sXG4gICAgY3VycmVudEl0ZW1TY2FsZToge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXSxcbiAgICAgIHZhbGlkYXRvcjogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICB2YWwgPSBwYXJzZUZsb2F0KHZhbClcbiAgICAgICAgcmV0dXJuICFpc05hTih2YWwpICYmIHZhbCA+PSAwICYmIHZhbCA8PSAxXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogREVGQVVMVF9DVVJSRU5UX0lURU1fU0NBTEVcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBpbmRleCAoKSB7XG4gICAgICB0aGlzLmN1cnJlbnRJbmRleCA9IHRoaXMuX25vcm1hbGl6ZUluZGV4KHRoaXMuaW5kZXgpXG4gICAgfVxuICB9LFxuXG4gIGRhdGEgKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50SW5kZXg6IHRoaXMuaW5kZXgsXG4gICAgICBmcmFtZUNvdW50OiAwXG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZUNyZWF0ZSAoKSB7XG4gICAgdGhpcy5pc05laWdoYm9yID0gdHJ1ZVxuICAgIHRoaXMud2VleFR5cGUgPSAnc2xpZGVyLW5laWdoYm9yJ1xuICB9LFxuXG4gIHJlbmRlciAoY3JlYXRlRWxlbWVudCkge1xuICAgIHJldHVybiB0aGlzLl9yZW5kZXJTbGlkZXMoY3JlYXRlRWxlbWVudClcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQgKHdlZXgpIHtcbiAgICB3ZWV4LnJlZ2lzdGVyQ29tcG9uZW50KCdzbGlkZXItbmVpZ2hib3InLCBzbGlkZXJOZWlnaGJvcilcbiAgfVxufVxuIiwiLypcbiAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZVxuICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb25cbiAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGVcbiAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGVcbiAqIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXG4gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGVcbiAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnNcbiAqIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmxldCBnZXRDb21wb25lbnRJbmxpbmVTdHlsZVxuXG5mdW5jdGlvbiBnZXRJbmRpY2F0b3JJdGVtU3R5bGUgKG1zLCBpc0FjdGl2ZSkge1xuICBjb25zdCBzdHlsZSA9IHt9XG4gIGNvbnN0IGJnQ29sb3IgPSBpc0FjdGl2ZVxuICAgID8gbXNbJ2l0ZW1TZWxlY3RlZENvbG9yJ10gfHwgbXNbJ2l0ZW0tc2VsZWN0ZWQtY29sb3InXVxuICAgIDogbXNbJ2l0ZW1Db2xvciddIHx8IG1zWydpdGVtLWNvbG9yJ11cbiAgc3R5bGVbJ2JhY2tncm91bmQtY29sb3InXSA9IGJnQ29sb3JcbiAgc3R5bGVbJ3dpZHRoJ10gPSBzdHlsZVsnaGVpZ2h0J10gPSBtc1snaXRlbVNpemUnXSB8fCBtc1snaXRlbS1zaXplJ11cbiAgcmV0dXJuIHN0eWxlXG59XG5cbmZ1bmN0aW9uIGdldFNjb3BlSWRzIChjb250ZXh0KSB7XG4gIGxldCBzY29wZUlkcyA9IGNvbnRleHQuX3Njb3BlSWRzXG4gIGlmIChzY29wZUlkcykge1xuICAgIHJldHVybiBzY29wZUlkc1xuICB9XG4gIGVsc2Uge1xuICAgIHNjb3BlSWRzID0gW11cbiAgfVxuICBsZXQgcGFyZW50ID0gY29udGV4dC4kcGFyZW50XG4gIHdoaWxlIChwYXJlbnQpIHtcbiAgICBsZXQgaVxuICAgIGlmICgoaSA9IHBhcmVudC4kb3B0aW9ucykgJiYgKGkgPSBpLl9zY29wZUlkKSkge1xuICAgICAgc2NvcGVJZHMucHVzaChpKVxuICAgIH1cbiAgICBwYXJlbnQgPSBwYXJlbnQuJHBhcmVudFxuICB9XG4gIGNvbnRleHQuX3Njb3BlSWRzID0gc2NvcGVJZHNcbiAgcmV0dXJuIHNjb3BlSWRzXG59XG5cbmZ1bmN0aW9uIF9yZW5kZXIgKGNvbnRleHQsIGgpIHtcbiAgY29uc3QgY2hpbGRyZW4gPSBbXVxuICBjb25zdCBtZXJnZWRTdHlsZSA9IGdldENvbXBvbmVudElubGluZVN0eWxlKGNvbnRleHQpXG4gIGNvbnN0IHNjb3BlSWRzID0gZ2V0U2NvcGVJZHMoY29udGV4dClcbiAgY29uc3QgYXR0cnMgPSB7fVxuICBmb3IgKGxldCBpID0gMCwgbCA9IHNjb3BlSWRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGF0dHJzW3Njb3BlSWRzW2ldXSA9ICcnXG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBOdW1iZXIoY29udGV4dC5jb3VudCk7ICsraSkge1xuICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBbJ3dlZXgtaW5kaWNhdG9yLWl0ZW0gd2VleC1lbCddXG4gICAgbGV0IGlzQWN0aXZlID0gZmFsc2VcbiAgICBpZiAoaSA9PT0gTnVtYmVyKGNvbnRleHQuYWN0aXZlKSkge1xuICAgICAgY2xhc3NOYW1lcy5wdXNoKCd3ZWV4LWluZGljYXRvci1pdGVtLWFjdGl2ZScpXG4gICAgICBpc0FjdGl2ZSA9IHRydWVcbiAgICB9XG4gICAgY2hpbGRyZW4ucHVzaChoKCdtYXJrJywge1xuICAgICAgYXR0cnMsXG4gICAgICBzdGF0aWNDbGFzczogY2xhc3NOYW1lcy5qb2luKCcgJyksXG4gICAgICBzdGF0aWNTdHlsZTogZ2V0SW5kaWNhdG9ySXRlbVN0eWxlKG1lcmdlZFN0eWxlLCBpc0FjdGl2ZSlcbiAgICB9KSlcbiAgfVxuICByZXR1cm4gaCgnbmF2Jywge1xuICAgIGF0dHJzOiB7ICd3ZWV4LXR5cGUnOiAnaW5kaWNhdG9yJyB9LFxuICAgIHN0YXRpY0NsYXNzOiAnd2VleC1pbmRpY2F0b3Igd2VleC1jdCdcbiAgfSwgW1xuICAgIC8vIHRoZSBpbmRpY2F0b3IgbmF2IG1heSBjb3ZlciB0aGUgc2xpZGVzLCBhbmQgbWF5IHN0b3AgdGhlXG4gICAgLy8gY2xpY2sgZXZlbnQgYmUgdHJpZ2dlcmVkIG9uIHRoZSBzbGlkZXMuXG4gICAgLy8gc28gYSBzbWFsbGVyIHdyYXBwZXIgaXMgbmVlZGVkIHRvIHByZXZlbnQgdGhlIG92ZXJsYXAuXG4gICAgLy8gVGhpcyB3cmFwcGVyIHdpbGwgY292ZXIgb25seSB0aGUgd2hvbGUgc2l6ZSBvZiBhbGwgdGhlXG4gICAgLy8gaW5kaWNhdG9yIHBvaW50ZXJzJyBpdGVtLXNpemVzLlxuICAgIGgoJ2RpdicsIHtcbiAgICAgIHN0YXRpY0NsYXNzOiAnd2VleC1pbmRpY2F0b3ItaW5uZXInXG4gICAgfSwgY2hpbGRyZW4pXG4gIF0pXG59XG5cbmNvbnN0IGluZGljYXRvciA9IHtcbiAgbmFtZTogJ3dlZXgtaW5kaWNhdG9yJyxcbiAgbWV0aG9kczoge1xuICAgIHNob3c6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuJGVsLnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSdcbiAgICB9XG4gIH0sXG4gIHByb3BzOiB7XG4gICAgaXRlbUNvbG9yOiBbU3RyaW5nXSxcbiAgICBpdGVtU2VsZWN0ZWRDb2xvcjogW1N0cmluZ10sXG4gICAgaXRlbVNpemU6IFtTdHJpbmddXG4gIH0sXG4gIGRhdGEgKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjb3VudDogMCxcbiAgICAgIGFjdGl2ZTogMFxuICAgIH1cbiAgfSxcbiAgcmVuZGVyIChjcmVhdGVFbGVtZW50KSB7XG4gICAgY29uc3QgeyBjb3VudCwgYWN0aXZlIH0gPSB0aGlzLiR2bm9kZS5kYXRhLmF0dHJzIHx8IHt9XG4gICAgdGhpcy5jb3VudCA9IGNvdW50XG4gICAgdGhpcy5hY3RpdmUgPSBhY3RpdmVcbiAgICBpZiAoIXRoaXMuY291bnQpIHsgcmV0dXJuIH1cbiAgICByZXR1cm4gX3JlbmRlcih0aGlzLCBjcmVhdGVFbGVtZW50KVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdCAod2VleCkge1xuICAgIGdldENvbXBvbmVudElubGluZVN0eWxlID0gd2VleC5nZXRDb21wb25lbnRJbmxpbmVTdHlsZVxuICAgIHdlZXgucmVnaXN0ZXJDb21wb25lbnQoJ2luZGljYXRvcicsIGluZGljYXRvcilcbiAgfVxufVxuIiwiLypcbiAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZVxuICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb25cbiAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGVcbiAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGVcbiAqIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXG4gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGVcbiAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnNcbiAqIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCBzbGlkZXIgZnJvbSAnLi9zbGlkZXInXG5pbXBvcnQgbmVpZ2hib3IgZnJvbSAnLi9zbGlkZXItbmVpZ2hib3InXG5pbXBvcnQgaW5kaWNhdG9yIGZyb20gJy4vaW5kaWNhdG9yJ1xuaW1wb3J0ICcuL3N0eWxlLmNzcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0ICh3ZWV4KSB7XG4gICAgd2VleC5pbnN0YWxsKHNsaWRlcilcbiAgICB3ZWV4Lmluc3RhbGwobmVpZ2hib3IpXG4gICAgd2VleC5pbnN0YWxsKGluZGljYXRvcilcbiAgfVxufVxuIiwiLypcbiAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZVxuICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb25cbiAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGVcbiAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGVcbiAqIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXG4gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGVcbiAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnNcbiAqIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgJy4vc3R5bGUuY3NzJ1xuXG5mdW5jdGlvbiBnZXRUZXh0YXJlYSAod2VleCkge1xuICBjb25zdCB7IGV4dHJhY3RDb21wb25lbnRTdHlsZSB9ID0gd2VleFxuICBjb25zdCB7IGlucHV0Q29tbW9uIH0gPSB3ZWV4Lm1peGluc1xuICBjb25zdCB7IGV4dGVuZCwgbWFwRm9ybUV2ZW50cyB9ID0gd2VleC51dGlsc1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3dlZXgtdGV4dGFyZWEnLFxuICAgIG1peGluczogW2lucHV0Q29tbW9uXSxcbiAgICBwcm9wczoge1xuICAgICAgdmFsdWU6IFN0cmluZyxcbiAgICAgIHBsYWNlaG9sZGVyOiBTdHJpbmcsXG4gICAgICBkaXNhYmxlZDoge1xuICAgICAgICB0eXBlOiBbU3RyaW5nLCBCb29sZWFuXSxcbiAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgIH0sXG4gICAgICBhdXRvZm9jdXM6IHtcbiAgICAgICAgdHlwZTogW1N0cmluZywgQm9vbGVhbl0sXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICB9LFxuICAgICAgcm93czoge1xuICAgICAgICB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLFxuICAgICAgICBkZWZhdWx0OiAyXG4gICAgICB9LFxuICAgICAgcmV0dXJuS2V5VHlwZTogU3RyaW5nXG4gICAgfSxcblxuICAgIHJlbmRlciAoY3JlYXRlRWxlbWVudCkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIC8vIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50Jykge1xuICAgICAgLy8gICB2YWxpZGF0ZVN0eWxlcygndGV4dGFyZWEnLCB0aGlzLiR2bm9kZS5kYXRhICYmIHRoaXMuJHZub2RlLmRhdGEuc3RhdGljU3R5bGUpXG4gICAgICAvLyB9XG4gICAgICBjb25zdCBldmVudHMgPSBleHRlbmQobWFwRm9ybUV2ZW50cyh0aGlzKSlcbiAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KCdodG1sOnRleHRhcmVhJywge1xuICAgICAgICBhdHRyczoge1xuICAgICAgICAgICd3ZWV4LXR5cGUnOiAndGV4dGFyZWEnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgIGRpc2FibGVkOiAodGhpcy5kaXNhYmxlZCAhPT0gJ2ZhbHNlJyAmJiB0aGlzLmRpc2FibGVkICE9PSBmYWxzZSksXG4gICAgICAgICAgYXV0b2ZvY3VzOiAodGhpcy5hdXRvZm9jdXMgIT09ICdmYWxzZScgJiYgdGhpcy5hdXRvZm9jdXMgIT09IGZhbHNlKSxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogdGhpcy5wbGFjZWhvbGRlcixcbiAgICAgICAgICByb3dzOiB0aGlzLnJvd3MsXG4gICAgICAgICAgJ3JldHVybi1rZXktdHlwZSc6IHRoaXMucmV0dXJuS2V5VHlwZVxuICAgICAgICB9LFxuICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlXG4gICAgICAgIH0sXG4gICAgICAgIG9uOiB0aGlzLmNyZWF0ZUtleWJvYXJkRXZlbnQoZXZlbnRzKSxcbiAgICAgICAgc3RhdGljQ2xhc3M6ICd3ZWV4LXRleHRhcmVhIHdlZXgtZWwnLFxuICAgICAgICBzdGF0aWNTdHlsZTogZXh0cmFjdENvbXBvbmVudFN0eWxlKHRoaXMpXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQgKHdlZXgpIHtcbiAgICB3ZWV4LnJlZ2lzdGVyQ29tcG9uZW50KCd0ZXh0YXJlYScsIGdldFRleHRhcmVhKHdlZXgpKVxuICB9XG59XG4iLCIvKlxuKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lXG4qIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZVxuKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvblxuKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlXG4qIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGVcbiogXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4qIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbipcbiogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbipcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxuKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGVcbiogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9uc1xuKiB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbmZ1bmN0aW9uIGdldFZpZGVvICh3ZWV4KSB7XG4gIGNvbnN0IHtcbiAgICBleHRyYWN0Q29tcG9uZW50U3R5bGUsXG4gICAgbWFwTmF0aXZlRXZlbnRzXG4gIH0gPSB3ZWV4XG4gIGNvbnN0IHsgZGlzcGF0Y2hOYXRpdmVFdmVudCB9ID0gd2VleC51dGlsc1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3dlZXgtdmlkZW8nLFxuICAgIHByb3BzOiB7XG4gICAgICBzcmM6IFN0cmluZyxcbiAgICAgIHBsYXlTdGF0dXM6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICBkZWZhdWx0OiAncGF1c2UnLFxuICAgICAgICB2YWxpZGF0b3IgKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIFsncGxheScsICdwYXVzZSddLmluZGV4T2YodmFsdWUpICE9PSAtMVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgYXV0b3BsYXk6IHtcbiAgICAgICAgdHlwZTogW1N0cmluZywgQm9vbGVhbl0sXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICB9LFxuICAgICAgYXV0b1BsYXk6IHtcbiAgICAgICAgdHlwZTogW1N0cmluZywgQm9vbGVhbl0sXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICB9LFxuICAgICAgcGxheXNpbmxpbmU6IHtcbiAgICAgICAgdHlwZTogW1N0cmluZywgQm9vbGVhbl0sXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH0sXG4gICAgICBjb250cm9sczoge1xuICAgICAgICB0eXBlOiBbU3RyaW5nLCBCb29sZWFuXSxcbiAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVuZGVyIChjcmVhdGVFbGVtZW50KSB7XG4gICAgICBpZiAodGhpcy5wbGF5U3RhdHVzID09PSAncGxheScpIHtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLiRlbCAmJiB0aGlzLiRlbC5wbGF5KClcbiAgICAgICAgICB9XG4gICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgZGlzcGF0Y2hOYXRpdmVFdmVudCh0aGlzICYmIHRoaXMuJGVsLCAnZXJyb3InLCB7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGVyci5tZXNzYWdlXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHRoaXMucGxheVN0YXR1cyA9PT0gJ3BhdXNlJykge1xuICAgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhpcy4kZWwgJiYgdGhpcy4kZWwucGF1c2UoKVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY3JlYXRlRWxlbWVudCgnaHRtbDp2aWRlbycsIHtcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAnd2VleC10eXBlJzogJ3ZpZGVvJyxcbiAgICAgICAgICBhdXRvcGxheTogKCh0aGlzLmF1dG9wbGF5ICE9PSAnZmFsc2UnICYmIHRoaXMuYXV0b3BsYXkgIT09IGZhbHNlKVxuICAgICAgICAgICAgfHwgKHRoaXMuYXV0b1BsYXkgIT09ICdmYWxzZScgJiYgdGhpcy5hdXRvUGxheSAhPT0gZmFsc2UpKSxcbiAgICAgICAgICAnd2Via2l0LXBsYXlzaW5saW5lJzogdGhpcy5wbGF5c2lubGluZSxcbiAgICAgICAgICBjb250cm9sczogdGhpcy5jb250cm9scyxcbiAgICAgICAgICBzcmM6IHRoaXMuc3JjXG4gICAgICAgIH0sXG4gICAgICAgIG9uOiBtYXBOYXRpdmVFdmVudHModGhpcywge1xuICAgICAgICAgIHBsYXk6ICdzdGFydCcsXG4gICAgICAgICAgZXJyb3I6ICdmYWlsJ1xuICAgICAgICB9KSxcbiAgICAgICAgc3RhdGljQ2xhc3M6ICd3ZWV4LXZpZGVvIHdlZXgtZWwnLFxuICAgICAgICBzdGF0aWNTdHlsZTogZXh0cmFjdENvbXBvbmVudFN0eWxlKHRoaXMpXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQgKHdlZXgpIHtcbiAgICB3ZWV4LnJlZ2lzdGVyQ29tcG9uZW50KCd2aWRlbycsIGdldFZpZGVvKHdlZXgpKVxuICB9XG59XG4iLCIvKlxuICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlXG4gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvblxuICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZVxuICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZVxuICogXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcbiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZVxuICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9uc1xuICogdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCAnLi9zdHlsZS5jc3MnXG5cbmZ1bmN0aW9uIGdldFdlYiAod2VleCkge1xuICBjb25zdCB7IGV4dHJhY3RDb21wb25lbnRTdHlsZSB9ID0gd2VleFxuICBjb25zdCB7IGRpc3BhdGNoTmF0aXZlRXZlbnQgfSA9IHdlZXgudXRpbHNcblxuICByZXR1cm4ge1xuICAgIGRhdGEgKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3VycmVudFNyYzogJydcbiAgICAgIH1cbiAgICB9LFxuICAgIG5hbWU6ICd3ZWV4LXdlYicsXG4gICAgcHJvcHM6IHtcbiAgICAgIHNyYzogU3RyaW5nXG4gICAgfSxcbiAgICB3YXRjaDoge1xuICAgICAgc3JjIChuZXdWYWwpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50U3JjID0gbmV3VmFsXG4gICAgICB9XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICBnb0JhY2sgKCkge1xuICAgICAgICBjb25zdCBlbCA9IHRoaXMuJGVsXG4gICAgICAgIGlmIChlbCkge1xuICAgICAgICAgIGNvbnN0IHdpbiA9IGVsLmNvbnRlbnRXaW5kb3dcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgd2luLmhpc3RvcnkuYmFjaygpXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTcmMgPSB3aW4ubG9jYXRpb24uaHJlZlxuICAgICAgICAgIH1cbiAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBkaXNwYXRjaE5hdGl2ZUV2ZW50KGVsLCAnZXJyb3InLCBlcnIpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZ29Gb3J3YXJkICgpIHtcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLiRlbFxuICAgICAgICBpZiAoZWwpIHtcbiAgICAgICAgICBjb25zdCB3aW4gPSBlbC5jb250ZW50V2luZG93XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdpbi5oaXN0b3J5LmZvcndhcmQoKVxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3JjID0gd2luLmxvY2F0aW9uLmhyZWZcbiAgICAgICAgICB9XG4gICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgZGlzcGF0Y2hOYXRpdmVFdmVudChlbCwgJ2Vycm9yJywgZXJyKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJlbG9hZCAoKSB7XG4gICAgICAgIGNvbnN0IGVsID0gdGhpcy4kZWxcbiAgICAgICAgaWYgKGVsKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGVsLmNvbnRlbnRXaW5kb3cubG9jYXRpb24ucmVsb2FkKClcbiAgICAgICAgICAgIGRpc3BhdGNoTmF0aXZlRXZlbnQoZWwsICdwYWdlc3RhcnQnLCB7IHVybDogdGhpcy5jdXJyZW50U3JjIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGRpc3BhdGNoTmF0aXZlRXZlbnQoZWwsICdlcnJvcicsIGVycilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlZCAoKSB7XG4gICAgICB0aGlzLmN1cnJlbnRTcmMgPSB0aGlzLnNyY1xuICAgIH0sXG5cbiAgICBtb3VudGVkICgpIHtcbiAgICAgIGNvbnN0IGVsID0gdGhpcy4kZWxcbiAgICAgIHRoaXMuX3ByZXZTcmMgPSB0aGlzLmN1cnJlbnRTcmNcbiAgICAgIGlmIChlbCkge1xuICAgICAgICBkaXNwYXRjaE5hdGl2ZUV2ZW50KGVsLCAncGFnZXN0YXJ0JywgeyB1cmw6IHRoaXMuY3VycmVudFNyYyB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGVkICgpIHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRTcmMgIT09IHRoaXMuX3ByZXZTcmMpIHtcbiAgICAgICAgdGhpcy5fcHJldlNyYyA9IHRoaXMuY3VycmVudFNyY1xuICAgICAgICBkaXNwYXRjaE5hdGl2ZUV2ZW50KHRoaXMuJGVsLCAncGFnZXN0YXJ0JywgeyB1cmw6IHRoaXMuY3VycmVudFNyYyB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICByZW5kZXIgKGNyZWF0ZUVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KCdpZnJhbWUnLCB7XG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgJ3dlZXgtdHlwZSc6ICd3ZWInLFxuICAgICAgICAgIHNyYzogdGhpcy5jdXJyZW50U3JjXG4gICAgICAgIH0sXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgbG9hZDogZXZlbnQgPT4ge1xuICAgICAgICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBjb25zdCBlbCA9IHRoaXMuJGVsXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaHRtbCA9IGVsLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XG4gICAgICAgICAgICAgICAgaWYgKGh0bWwpIHtcbiAgICAgICAgICAgICAgICAgIGRpc3BhdGNoTmF0aXZlRXZlbnQoZWwsICdwYWdlZmluaXNoJywgeyB1cmw6IHRoaXMuY3VycmVudFNyYyB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGRpc3BhdGNoTmF0aXZlRXZlbnQoZWwsICdlcnJvcicsIG5ldyBFcnJvcignW3Z1ZS1yZW5kZXJdOmZvdW5kIG5vIHBhZ2UgY29udGVudC4nKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGRpc3BhdGNoTmF0aXZlRXZlbnQoZWwsICdlcnJvcicsIGVycilcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHN0YXRpY0NsYXNzOiAnd2VleC13ZWIgd2VleC1lbCcsXG4gICAgICAgIHN0YXRpY1N0eWxlOiBleHRyYWN0Q29tcG9uZW50U3R5bGUodGhpcylcbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdCAod2VleCkge1xuICAgIHdlZXgucmVnaXN0ZXJDb21wb25lbnQoJ3dlYicsIGdldFdlYih3ZWV4KSlcbiAgfVxufVxuIiwiLypcbiAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZVxuICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb25cbiAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGVcbiAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGVcbiAqIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXG4gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGVcbiAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnNcbiAqIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyBpbXBvcnQgYSBmcm9tICcuL2EnXG4vLyBpbXBvcnQgZGl2IGZyb20gJy4vZGl2J1xuLy8gaW1wb3J0IGltYWdlIGZyb20gJy4vaW1hZ2UnXG5pbXBvcnQgaW5wdXQgZnJvbSAnLi9pbnB1dCdcbmltcG9ydCBfc3dpdGNoIGZyb20gJy4vc3dpdGNoJ1xuaW1wb3J0IHNjcm9sbGFibGUgZnJvbSAnLi9zY3JvbGxhYmxlJ1xuaW1wb3J0IHNsaWRlciBmcm9tICcuL3NsaWRlcidcbi8vIGltcG9ydCB0ZXh0IGZyb20gJy4vdGV4dCdcbmltcG9ydCB0ZXh0YXJlYSBmcm9tICcuL3RleHRhcmVhJ1xuaW1wb3J0IHZpZGVvIGZyb20gJy4vdmlkZW8nXG5pbXBvcnQgd2ViIGZyb20gJy4vd2ViJ1xuXG5leHBvcnQgZGVmYXVsdCBbXG4gIC8vIGEsXG4gIC8vIGRpdixcbiAgLy8gaW1hZ2UsXG4gIGlucHV0LFxuICBfc3dpdGNoLFxuICBzY3JvbGxhYmxlLFxuICBzbGlkZXIsXG4gIC8vIHRleHQsXG4gIHRleHRhcmVhLFxuICB2aWRlbyxcbiAgd2ViXG5dXG4iLCIvKlxuICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlXG4gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvblxuICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZVxuICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZVxuICogXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcbiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZVxuICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9uc1xuICogdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCBzdXBwb3J0R2VvbG9jYXRpb24gPSAnZ2VvbG9jYXRpb24nIGluIG5hdmlnYXRvclxuY29uc3QgZXJyb3JNc2cgPSBgW2g1LXJlbmRlcl06IGJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IGdlb2xvY2F0aW9uLmBcblxuY29uc3QgZ2VvbG9jYXRpb24gPSB7XG4gIC8vIG9wdGlvbnM6XG4gIC8vICAgLSBlbmFibGVIaWdoQWNjdXJhY3kgb3B0aW9uYWwsIHZhbHVlIGlzIHRydWUgb3IgZmFsc2UsIGZhbHNlIGJ5IGRlZmF1bHQuXG4gIC8vICAgLSB0aW1lb3V0IFtub25lLW5hdGl2ZV0gb3B0aW9uYWwsIHZhbHVlIGlzIGEgbnVtYmVyIChtaWxsaXNlY29uZHMpLCBkZWZhdWx0IHZhdWxlIGlzIEZJTkZJTklUWS5cbiAgLy8gICAtIG1heGltdW1BZ2UgW25vbmUtbmF0aXZlXSBvcHRpb25hbCwgdmFsdWUgaXMgYSBudW1iZXIgKG1pbGxpc2Vjb25kcyksIGRlZmF1bHQgdmFsdWUgaXMgMC5cbiAgZ2V0Q3VycmVudFBvc2l0aW9uIChzdWNjZXNzQ2JJZCwgZXJyb3JDYklkLCBvcHRpb25zKSB7XG4gICAgY29uc3Qgc3VjY2Vzc0NiID0gcG9zID0+IHRoaXMuc2VuZGVyLnBlcmZvcm1DYWxsYmFjayhzdWNjZXNzQ2JJZCwgcG9zKVxuICAgIGNvbnN0IGVycm9yQ2IgPSBlcnIgPT4gdGhpcy5zZW5kZXIucGVyZm9ybUNhbGxiYWNrKGVycm9yQ2JJZCwgZXJyKVxuICAgIGlmIChzdXBwb3J0R2VvbG9jYXRpb24pIHtcbiAgICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oc3VjY2Vzc0NiLCBlcnJvckNiLCBvcHRpb25zKVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihlcnJvck1zZylcbiAgICAgIGVycm9yQ2IobmV3IEVycm9yKGVycm9yTXNnKSlcbiAgICB9XG4gIH0sXG5cbiAgLy8gb3B0aW9uczogdGhlIHNhbWUgd2l0aCBgZ2V0Q3VycmVudFBvc2l0aW9uYC5cbiAgd2F0Y2hQb3NpdGlvbiAoc3VjY2Vzc0NiSWQsIGVycm9yQ2JJZCwgb3B0aW9ucykge1xuICAgIGNvbnN0IHN1Y2Nlc3NDYiA9IHBvcyA9PiB0aGlzLnNlbmRlci5wZXJmb3JtQ2FsbGJhY2soc3VjY2Vzc0NiSWQsIHBvcywgdHJ1ZSlcbiAgICBjb25zdCBlcnJvckNiID0gZXJyID0+IHRoaXMuc2VuZGVyLnBlcmZvcm1DYWxsYmFjayhlcnJvckNiSWQsIGVycilcbiAgICBpZiAoc3VwcG9ydEdlb2xvY2F0aW9uKSB7XG4gICAgICBjb25zdCBpZCA9IG5hdmlnYXRvci5nZW9sb2NhdGlvbi53YXRjaFBvc2l0aW9uKHBvcyA9PiB7XG4gICAgICAgIHBvcy53YXRjaElkID0gaWRcbiAgICAgICAgc3VjY2Vzc0NiKHBvcylcbiAgICAgIH0sIGVycm9yQ2IsIG9wdGlvbnMpXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKGVycm9yTXNnKVxuICAgICAgZXJyb3JDYihuZXcgRXJyb3IoZXJyb3JNc2cpKVxuICAgIH1cbiAgfSxcblxuICBjbGVhcldhdGNoICh3YXRjaElkKSB7XG4gICAgaWYgKHN1cHBvcnRHZW9sb2NhdGlvbikge1xuICAgICAgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmNsZWFyV2F0Y2god2F0Y2hJZClcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oZXJyb3JNc2cpXG4gICAgfVxuICB9XG59XG5cbmNvbnN0IG1ldGEgPSB7XG4gIGdlb2xvY2F0aW9uOiBbe1xuICAgIG5hbWU6ICdnZXRDdXJyZW50UG9zaXRpb24nLFxuICAgIGFyZ3M6IFsnZnVuY3Rpb24nLCAnZnVuY3Rpb24nLCAnb2JqZWN0J11cbiAgfSwge1xuICAgIG5hbWU6ICd3YXRjaFBvc2l0aW9uJyxcbiAgICBhcmdzOiBbJ2Z1bmN0aW9uJywgJ2Z1bmN0aW9uJywgJ29iamVjdCddXG4gIH0sIHtcbiAgICBuYW1lOiAnY2xlYXJXYXRjaCcsXG4gICAgYXJnczogWydzdHJpbmcnXVxuICB9XVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQgKFdlZXgpIHtcbiAgICBXZWV4LnJlZ2lzdGVyQXBpTW9kdWxlKCdnZW9sb2NhdGlvbicsIGdlb2xvY2F0aW9uLCBtZXRhKVxuICB9XG59XG4iLCIvKlxuICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlXG4gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvblxuICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZVxuICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZVxuICogXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcbiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZVxuICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9uc1xuICogdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qIGdsb2JhbCBsb2NhbFN0b3JhZ2UgKi9cblxuJ3VzZSBzdHJpY3QnXG5cbmxldCBzdXBwb3J0TG9jYWxTdG9yYWdlID0gZmFsc2VcbnRyeSB7XG4gIHN1cHBvcnRMb2NhbFN0b3JhZ2UgPSB0eXBlb2YgbG9jYWxTdG9yYWdlICE9PSAndW5kZWZpbmVkJ1xufVxuY2F0Y2ggKGVycikge1xuICAvLyBub3Qgc3VwcG9ydC5cbn1cblxuY29uc3QgU1VDQ0VTUyA9ICdzdWNjZXNzJ1xuY29uc3QgRkFJTEVEID0gJ2ZhaWxlZCdcbmNvbnN0IElOVkFMSURfUEFSQU0gPSAnaW52YWxpZF9wYXJhbSdcbmNvbnN0IFVOREVGSU5FRCA9ICd1bmRlZmluZWQnXG5cbmZ1bmN0aW9uIGNhbGxGYWlsIChzZW5kZXIsIGNhbGxiYWNrSWQsIGVycm9yTXNnKSB7XG4gIHNlbmRlci5wZXJmb3JtQ2FsbGJhY2soY2FsbGJhY2tJZCwge1xuICAgIHJlc3VsdDogRkFJTEVELFxuICAgIGRhdGE6IGVycm9yTXNnIHx8IFVOREVGSU5FRFxuICB9KVxufVxuXG5mdW5jdGlvbiBjYWxsTm90U3VwcG9ydEZhaWwgKHNlbmRlciwgY2FsbGJhY2tJZCkge1xuICBzZW5kZXIucGVyZm9ybUNhbGxiYWNrKGNhbGxiYWNrSWQsIHtcbiAgICByZXN1bHQ6IEZBSUxFRCxcbiAgICBkYXRhOiAnbG9jYWxTdG9yYWdlIGlzIGRpc2FibGVkIG9yIG5vdCBzdXBwb3J0ZWQuJ1xuICB9KVxufVxuXG5jb25zdCBzdG9yYWdlID0ge1xuXG4gIC8qKlxuICAgKiBXaGVuIHBhc3NlZCBhIGtleSBuYW1lIGFuZCB2YWx1ZSwgd2lsbCBhZGQgdGhhdCBrZXkgdG8gdGhlIHN0b3JhZ2UsXG4gICAqIG9yIHVwZGF0ZSB0aGF0IGtleSdzIHZhbHVlIGlmIGl0IGFscmVhZHkgZXhpc3RzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSBub3QgbnVsbCBub3IgdW5kaWZpbmVk77yMYnV0IDAgd29ya3MuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrSWRcbiAgICovXG4gIHNldEl0ZW06IGZ1bmN0aW9uIChrZXksIHZhbHVlLCBjYWxsYmFja0lkKSB7XG4gICAgY29uc3Qgc2VuZGVyID0gdGhpcy5zZW5kZXJcbiAgICBpZiAoIXN1cHBvcnRMb2NhbFN0b3JhZ2UpIHtcbiAgICAgIHJldHVybiBjYWxsTm90U3VwcG9ydEZhaWwoc2VuZGVyLCBjYWxsYmFja0lkKVxuICAgIH1cbiAgICBpZiAoIWtleSB8fCAoIXZhbHVlICYmIHZhbHVlICE9PSAwKSkge1xuICAgICAgc2VuZGVyLnBlcmZvcm1DYWxsYmFjayhjYWxsYmFja0lkLCB7XG4gICAgICAgIHJlc3VsdDogJ2ZhaWxlZCcsXG4gICAgICAgIGRhdGE6IElOVkFMSURfUEFSQU1cbiAgICAgIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgdmFsdWUpXG4gICAgICBzZW5kZXIucGVyZm9ybUNhbGxiYWNrKGNhbGxiYWNrSWQsIHtcbiAgICAgICAgcmVzdWx0OiBTVUNDRVNTLFxuICAgICAgICBkYXRhOiBVTkRFRklORURcbiAgICAgIH0pXG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAvLyBhY2NlcHQgYW55IGV4Y2VwdGlvbiB0aHJvd24gZHVyaW5nIGEgc3RvcmFnZSBhdHRlbXB0IGFzIGEgcXVvdGEgZXJyb3JcbiAgICAgIGNhbGxGYWlsKHNlbmRlciwgY2FsbGJhY2tJZClcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIFdoZW4gcGFzc2VkIGEga2V5IG5hbWUsIHdpbGwgcmV0dXJuIHRoYXQga2V5J3MgdmFsdWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tJZFxuICAgKi9cbiAgZ2V0SXRlbTogZnVuY3Rpb24gKGtleSwgY2FsbGJhY2tJZCkge1xuICAgIGNvbnN0IHNlbmRlciA9IHRoaXMuc2VuZGVyXG4gICAgaWYgKCFzdXBwb3J0TG9jYWxTdG9yYWdlKSB7XG4gICAgICByZXR1cm4gY2FsbE5vdFN1cHBvcnRGYWlsKHNlbmRlciwgY2FsbGJhY2tJZClcbiAgICB9XG4gICAgaWYgKCFrZXkpIHtcbiAgICAgIHNlbmRlci5wZXJmb3JtQ2FsbGJhY2soY2FsbGJhY2tJZCwge1xuICAgICAgICByZXN1bHQ6IEZBSUxFRCxcbiAgICAgICAgZGF0YTogSU5WQUxJRF9QQVJBTVxuICAgICAgfSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QgdmFsID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KVxuICAgICAgc2VuZGVyLnBlcmZvcm1DYWxsYmFjayhjYWxsYmFja0lkLCB7XG4gICAgICAgIHJlc3VsdDogdmFsID8gU1VDQ0VTUyA6IEZBSUxFRCxcbiAgICAgICAgZGF0YTogdmFsIHx8IFVOREVGSU5FRFxuICAgICAgfSlcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGFjY2VwdCBhbnkgZXhjZXB0aW9uIHRocm93biBkdXJpbmcgYSBzdG9yYWdlIGF0dGVtcHQgYXMgYSBxdW90YSBlcnJvclxuICAgICAgY2FsbEZhaWwoc2VuZGVyLCBjYWxsYmFja0lkKVxuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICpXaGVuIHBhc3NlZCBhIGtleSBuYW1lLCB3aWxsIHJlbW92ZSB0aGF0IGtleSBmcm9tIHRoZSBzdG9yYWdlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrSWRcbiAgICovXG4gIHJlbW92ZUl0ZW06IGZ1bmN0aW9uIChrZXksIGNhbGxiYWNrSWQpIHtcbiAgICBjb25zdCBzZW5kZXIgPSB0aGlzLnNlbmRlclxuICAgIGlmICghc3VwcG9ydExvY2FsU3RvcmFnZSkge1xuICAgICAgcmV0dXJuIGNhbGxOb3RTdXBwb3J0RmFpbChzZW5kZXIsIGNhbGxiYWNrSWQpXG4gICAgfVxuICAgIGlmICgha2V5KSB7XG4gICAgICBzZW5kZXIucGVyZm9ybUNhbGxiYWNrKGNhbGxiYWNrSWQsIHtcbiAgICAgICAgcmVzdWx0OiBGQUlMRUQsXG4gICAgICAgIGRhdGE6IElOVkFMSURfUEFSQU1cbiAgICAgIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSlcbiAgICAgIHNlbmRlci5wZXJmb3JtQ2FsbGJhY2soY2FsbGJhY2tJZCwge1xuICAgICAgICByZXN1bHQ6IFNVQ0NFU1MsXG4gICAgICAgIGRhdGE6IFVOREVGSU5FRFxuICAgICAgfSlcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGFjY2VwdCBhbnkgZXhjZXB0aW9uIHRocm93biBkdXJpbmcgYSBzdG9yYWdlIGF0dGVtcHQgYXMgYSBxdW90YSBlcnJvclxuICAgICAgY2FsbEZhaWwoc2VuZGVyLCBjYWxsYmFja0lkKVxuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogUmV0dXJucyBhbiBpbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgbnVtYmVyIG9mIGRhdGEgaXRlbXMgc3RvcmVkIGluIHRoZSBTdG9yYWdlIG9iamVjdC5cbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tJZFxuICAgKi9cbiAgbGVuZ3RoOiBmdW5jdGlvbiAoY2FsbGJhY2tJZCkge1xuICAgIGNvbnN0IHNlbmRlciA9IHRoaXMuc2VuZGVyXG4gICAgaWYgKCFzdXBwb3J0TG9jYWxTdG9yYWdlKSB7XG4gICAgICByZXR1cm4gY2FsbE5vdFN1cHBvcnRGYWlsKHNlbmRlciwgY2FsbGJhY2tJZClcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxlbiA9IGxvY2FsU3RvcmFnZS5sZW5ndGhcbiAgICAgIHNlbmRlci5wZXJmb3JtQ2FsbGJhY2soY2FsbGJhY2tJZCwge1xuICAgICAgICByZXN1bHQ6IFNVQ0NFU1MsXG4gICAgICAgIGRhdGE6IGxlblxuICAgICAgfSlcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGFjY2VwdCBhbnkgZXhjZXB0aW9uIHRocm93biBkdXJpbmcgYSBzdG9yYWdlIGF0dGVtcHQgYXMgYSBxdW90YSBlcnJvclxuICAgICAgY2FsbEZhaWwoc2VuZGVyLCBjYWxsYmFja0lkKVxuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogUmV0dXJucyBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIGFsbCBrZXlzIHN0b3JlZCBpbiBTdG9yYWdlIG9iamVjdC5cbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tJZFxuICAgKi9cbiAgZ2V0QWxsS2V5czogZnVuY3Rpb24gKGNhbGxiYWNrSWQpIHtcbiAgICBjb25zdCBzZW5kZXIgPSB0aGlzLnNlbmRlclxuICAgIGlmICghc3VwcG9ydExvY2FsU3RvcmFnZSkge1xuICAgICAgcmV0dXJuIGNhbGxOb3RTdXBwb3J0RmFpbChzZW5kZXIsIGNhbGxiYWNrSWQpXG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBfYXJyID0gW11cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbG9jYWxTdG9yYWdlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIF9hcnIucHVzaChsb2NhbFN0b3JhZ2Uua2V5KGkpKVxuICAgICAgfVxuICAgICAgc2VuZGVyLnBlcmZvcm1DYWxsYmFjayhjYWxsYmFja0lkLCB7XG4gICAgICAgIHJlc3VsdDogU1VDQ0VTUyxcbiAgICAgICAgZGF0YTogX2FyclxuICAgICAgfSlcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGFjY2VwdCBhbnkgZXhjZXB0aW9uIHRocm93biBkdXJpbmcgYSBzdG9yYWdlIGF0dGVtcHQgYXMgYSBxdW90YSBlcnJvclxuICAgICAgY2FsbEZhaWwoc2VuZGVyLCBjYWxsYmFja0lkKVxuICAgIH1cbiAgfVxufVxuXG5jb25zdCBtZXRhID0ge1xuICBzdG9yYWdlOiBbe1xuICAgIG5hbWU6ICdzZXRJdGVtJyxcbiAgICBhcmdzOiBbJ3N0cmluZycsICdzdHJpbmcnLCAnZnVuY3Rpb24nXVxuICB9LCB7XG4gICAgbmFtZTogJ2dldEl0ZW0nLFxuICAgIGFyZ3M6IFsnc3RyaW5nJywgJ2Z1bmN0aW9uJ11cbiAgfSwge1xuICAgIG5hbWU6ICdyZW1vdmVJdGVtJyxcbiAgICBhcmdzOiBbJ3N0cmluZycsICdmdW5jdGlvbiddXG4gIH0sIHtcbiAgICBuYW1lOiAnbGVuZ3RoJyxcbiAgICBhcmdzOiBbJ2Z1bmN0aW9uJ11cbiAgfSwge1xuICAgIG5hbWU6ICdnZXRBbGxLZXlzJyxcbiAgICBhcmdzOiBbJ2Z1bmN0aW9uJ11cbiAgfV1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0OiBmdW5jdGlvbiAoV2VleCkge1xuICAgIFdlZXgucmVnaXN0ZXJBcGlNb2R1bGUoJ3N0b3JhZ2UnLCBzdG9yYWdlLCBtZXRhKVxuICB9XG59XG4iLCIodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpICYmICh3aW5kb3cgPSB7Y3RybDoge30sIGxpYjoge319KTshd2luZG93LmN0cmwgJiYgKHdpbmRvdy5jdHJsID0ge30pOyF3aW5kb3cubGliICYmICh3aW5kb3cubGliID0ge30pOyFmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7dmFyIGI9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJwYXJhbXNcIix7c2V0OmZ1bmN0aW9uKGEpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBhKXtmb3IodmFyIGMgaW4gYilkZWxldGUgYltjXTtmb3IodmFyIGMgaW4gYSliW2NdPWFbY119fSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYn0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwic2VhcmNoXCIse3NldDpmdW5jdGlvbihhKXtpZihcInN0cmluZ1wiPT10eXBlb2YgYSl7MD09PWEuaW5kZXhPZihcIj9cIikmJihhPWEuc3Vic3RyKDEpKTt2YXIgYz1hLnNwbGl0KFwiJlwiKTtmb3IodmFyIGQgaW4gYilkZWxldGUgYltkXTtmb3IodmFyIGU9MDtlPGMubGVuZ3RoO2UrKyl7dmFyIGY9Y1tlXS5zcGxpdChcIj1cIik7aWYodm9pZCAwIT09ZlsxXSYmKGZbMV09ZlsxXS50b1N0cmluZygpKSxmWzBdKXRyeXtiW2RlY29kZVVSSUNvbXBvbmVudChmWzBdKV09ZGVjb2RlVVJJQ29tcG9uZW50KGZbMV0pfWNhdGNoKGcpe2JbZlswXV09ZlsxXX19fX0sZ2V0OmZ1bmN0aW9uKCl7dmFyIGE9W107Zm9yKHZhciBjIGluIGIpaWYodm9pZCAwIT09YltjXSlpZihcIlwiIT09YltjXSl0cnl7YS5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChjKStcIj1cIitlbmNvZGVVUklDb21wb25lbnQoYltjXSkpfWNhdGNoKGQpe2EucHVzaChjK1wiPVwiK2JbY10pfWVsc2UgdHJ5e2EucHVzaChlbmNvZGVVUklDb21wb25lbnQoYykpfWNhdGNoKGQpe2EucHVzaChjKX1yZXR1cm4gYS5sZW5ndGg/XCI/XCIrYS5qb2luKFwiJlwiKTpcIlwifSxlbnVtZXJhYmxlOiEwfSk7dmFyIGM7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJoYXNoXCIse3NldDpmdW5jdGlvbihhKXtcInN0cmluZ1wiPT10eXBlb2YgYSYmKGEmJmEuaW5kZXhPZihcIiNcIik8MCYmKGE9XCIjXCIrYSksYz1hfHxcIlwiKX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGN9LGVudW1lcmFibGU6ITB9KSx0aGlzLnNldD1mdW5jdGlvbihhKXthPWF8fFwiXCI7dmFyIGI7aWYoIShiPWEubWF0Y2gobmV3IFJlZ0V4cChcIl4oW2EtejAtOS1dKzopP1svXXsyfSg/OihbXkAvOj9dKykoPzo6KFteQC86XSspKT9AKT8oW146Lz8jXSspKD86WzpdKFswLTldKykpPyhbL11bXj8jO10qKT8oPzpbP10oW14jXSopKT8oWyNdW14/XSopPyRcIixcImlcIikpKSl0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyB1cmkgc2NoZW1lLlwiKTt0aGlzLnByb3RvY29sPWJbMV18fChcIm9iamVjdFwiPT10eXBlb2YgbG9jYXRpb24/bG9jYXRpb24ucHJvdG9jb2w6XCJcIiksdGhpcy51c2VybmFtZT1iWzJdfHxcIlwiLHRoaXMucGFzc3dvcmQ9YlszXXx8XCJcIix0aGlzLmhvc3RuYW1lPXRoaXMuaG9zdD1iWzRdLHRoaXMucG9ydD1iWzVdfHxcIlwiLHRoaXMucGF0aG5hbWU9Yls2XXx8XCIvXCIsdGhpcy5zZWFyY2g9Yls3XXx8XCJcIix0aGlzLmhhc2g9Yls4XXx8XCJcIix0aGlzLm9yaWdpbj10aGlzLnByb3RvY29sK1wiLy9cIit0aGlzLmhvc3RuYW1lfSx0aGlzLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wcm90b2NvbCtcIi8vXCI7cmV0dXJuIHRoaXMudXNlcm5hbWUmJihhKz10aGlzLnVzZXJuYW1lLHRoaXMucGFzc3dvcmQmJihhKz1cIjpcIit0aGlzLnBhc3N3b3JkKSxhKz1cIkBcIiksYSs9dGhpcy5ob3N0LHRoaXMucG9ydCYmXCI4MFwiIT09dGhpcy5wb3J0JiYoYSs9XCI6XCIrdGhpcy5wb3J0KSx0aGlzLnBhdGhuYW1lJiYoYSs9dGhpcy5wYXRobmFtZSksdGhpcy5zZWFyY2gmJihhKz10aGlzLnNlYXJjaCksdGhpcy5oYXNoJiYoYSs9dGhpcy5oYXNoKSxhfSxhJiZ0aGlzLnNldChhLnRvU3RyaW5nKCkpfWIuaHR0cHVybD1mdW5jdGlvbihhKXtyZXR1cm4gbmV3IGMoYSl9fSh3aW5kb3csd2luZG93LmxpYnx8KHdpbmRvdy5saWI9e30pKTs7bW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cubGliWydodHRwdXJsJ107IiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RyKSB7XG5cdHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC9bIScoKSpdL2csIGZ1bmN0aW9uIChjKSB7XG5cdFx0cmV0dXJuICclJyArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcblx0fSk7XG59O1xuIiwiLypcbm9iamVjdC1hc3NpZ25cbihjKSBTaW5kcmUgU29yaHVzXG5AbGljZW5zZSBNSVRcbiovXG5cbid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkVXNlTmF0aXZlKCkge1xuXHR0cnkge1xuXHRcdGlmICghT2JqZWN0LmFzc2lnbikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIERldGVjdCBidWdneSBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBvcmRlciBpbiBvbGRlciBWOCB2ZXJzaW9ucy5cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxMThcblx0XHR2YXIgdGVzdDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzXG5cdFx0dGVzdDFbNV0gPSAnZGUnO1xuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MSlbMF0gPT09ICc1Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDIgPSB7fTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHtcblx0XHRcdHRlc3QyWydfJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTtcblx0XHR9XG5cdFx0dmFyIG9yZGVyMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHtcblx0XHRcdHJldHVybiB0ZXN0MltuXTtcblx0XHR9KTtcblx0XHRpZiAob3JkZXIyLmpvaW4oJycpICE9PSAnMDEyMzQ1Njc4OScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QzID0ge307XG5cdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVyKSB7XG5cdFx0XHR0ZXN0M1tsZXR0ZXJdID0gbGV0dGVyO1xuXHRcdH0pO1xuXHRcdGlmIChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCB0ZXN0MykpLmpvaW4oJycpICE9PVxuXHRcdFx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdC8vIFdlIGRvbid0IGV4cGVjdCBhbnkgb2YgdGhlIGFib3ZlIHRvIHRocm93LCBidXQgYmV0dGVyIHRvIGJlIHNhZmUuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XG5cdHZhciBmcm9tO1xuXHR2YXIgdG8gPSB0b09iamVjdCh0YXJnZXQpO1xuXHR2YXIgc3ltYm9scztcblxuXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xuXHRcdGZyb20gPSBPYmplY3QoYXJndW1lbnRzW3NdKTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG5cdFx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB7XG5cdFx0XHRcdHRvW2tleV0gPSBmcm9tW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBzdHJpY3RVcmlFbmNvZGUgPSByZXF1aXJlKCdzdHJpY3QtdXJpLWVuY29kZScpO1xudmFyIG9iamVjdEFzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxuZnVuY3Rpb24gZW5jb2RlckZvckFycmF5Rm9ybWF0KG9wdHMpIHtcblx0c3dpdGNoIChvcHRzLmFycmF5Rm9ybWF0KSB7XG5cdFx0Y2FzZSAnaW5kZXgnOlxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIChrZXksIHZhbHVlLCBpbmRleCkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IG51bGwgPyBbXG5cdFx0XHRcdFx0ZW5jb2RlKGtleSwgb3B0cyksXG5cdFx0XHRcdFx0J1snLFxuXHRcdFx0XHRcdGluZGV4LFxuXHRcdFx0XHRcdCddJ1xuXHRcdFx0XHRdLmpvaW4oJycpIDogW1xuXHRcdFx0XHRcdGVuY29kZShrZXksIG9wdHMpLFxuXHRcdFx0XHRcdCdbJyxcblx0XHRcdFx0XHRlbmNvZGUoaW5kZXgsIG9wdHMpLFxuXHRcdFx0XHRcdCddPScsXG5cdFx0XHRcdFx0ZW5jb2RlKHZhbHVlLCBvcHRzKVxuXHRcdFx0XHRdLmpvaW4oJycpO1xuXHRcdFx0fTtcblxuXHRcdGNhc2UgJ2JyYWNrZXQnOlxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IGVuY29kZShrZXksIG9wdHMpIDogW1xuXHRcdFx0XHRcdGVuY29kZShrZXksIG9wdHMpLFxuXHRcdFx0XHRcdCdbXT0nLFxuXHRcdFx0XHRcdGVuY29kZSh2YWx1ZSwgb3B0cylcblx0XHRcdFx0XS5qb2luKCcnKTtcblx0XHRcdH07XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IGVuY29kZShrZXksIG9wdHMpIDogW1xuXHRcdFx0XHRcdGVuY29kZShrZXksIG9wdHMpLFxuXHRcdFx0XHRcdCc9Jyxcblx0XHRcdFx0XHRlbmNvZGUodmFsdWUsIG9wdHMpXG5cdFx0XHRcdF0uam9pbignJyk7XG5cdFx0XHR9O1xuXHR9XG59XG5cbmZ1bmN0aW9uIHBhcnNlckZvckFycmF5Rm9ybWF0KG9wdHMpIHtcblx0dmFyIHJlc3VsdDtcblxuXHRzd2l0Y2ggKG9wdHMuYXJyYXlGb3JtYXQpIHtcblx0XHRjYXNlICdpbmRleCc6XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gKGtleSwgdmFsdWUsIGFjY3VtdWxhdG9yKSB7XG5cdFx0XHRcdHJlc3VsdCA9IC9cXFsoXFxkKilcXF0kLy5leGVjKGtleSk7XG5cblx0XHRcdFx0a2V5ID0ga2V5LnJlcGxhY2UoL1xcW1xcZCpcXF0kLywgJycpO1xuXG5cdFx0XHRcdGlmICghcmVzdWx0KSB7XG5cdFx0XHRcdFx0YWNjdW11bGF0b3Jba2V5XSA9IHZhbHVlO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChhY2N1bXVsYXRvcltrZXldID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRhY2N1bXVsYXRvcltrZXldID0ge307XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRhY2N1bXVsYXRvcltrZXldW3Jlc3VsdFsxXV0gPSB2YWx1ZTtcblx0XHRcdH07XG5cblx0XHRjYXNlICdicmFja2V0Jzpcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgYWNjdW11bGF0b3IpIHtcblx0XHRcdFx0cmVzdWx0ID0gLyhcXFtcXF0pJC8uZXhlYyhrZXkpO1xuXHRcdFx0XHRrZXkgPSBrZXkucmVwbGFjZSgvXFxbXFxdJC8sICcnKTtcblxuXHRcdFx0XHRpZiAoIXJlc3VsdCkge1xuXHRcdFx0XHRcdGFjY3VtdWxhdG9yW2tleV0gPSB2YWx1ZTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0gZWxzZSBpZiAoYWNjdW11bGF0b3Jba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0YWNjdW11bGF0b3Jba2V5XSA9IFt2YWx1ZV07XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YWNjdW11bGF0b3Jba2V5XSA9IFtdLmNvbmNhdChhY2N1bXVsYXRvcltrZXldLCB2YWx1ZSk7XG5cdFx0XHR9O1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgYWNjdW11bGF0b3IpIHtcblx0XHRcdFx0aWYgKGFjY3VtdWxhdG9yW2tleV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGFjY3VtdWxhdG9yW2tleV0gPSB2YWx1ZTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRhY2N1bXVsYXRvcltrZXldID0gW10uY29uY2F0KGFjY3VtdWxhdG9yW2tleV0sIHZhbHVlKTtcblx0XHRcdH07XG5cdH1cbn1cblxuZnVuY3Rpb24gZW5jb2RlKHZhbHVlLCBvcHRzKSB7XG5cdGlmIChvcHRzLmVuY29kZSkge1xuXHRcdHJldHVybiBvcHRzLnN0cmljdCA/IHN0cmljdFVyaUVuY29kZSh2YWx1ZSkgOiBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuXHR9XG5cblx0cmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBrZXlzU29ydGVyKGlucHV0KSB7XG5cdGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuXHRcdHJldHVybiBpbnB1dC5zb3J0KCk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnb2JqZWN0Jykge1xuXHRcdHJldHVybiBrZXlzU29ydGVyKE9iamVjdC5rZXlzKGlucHV0KSkuc29ydChmdW5jdGlvbiAoYSwgYikge1xuXHRcdFx0cmV0dXJuIE51bWJlcihhKSAtIE51bWJlcihiKTtcblx0XHR9KS5tYXAoZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0cmV0dXJuIGlucHV0W2tleV07XG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gaW5wdXQ7XG59XG5cbmV4cG9ydHMuZXh0cmFjdCA9IGZ1bmN0aW9uIChzdHIpIHtcblx0cmV0dXJuIHN0ci5zcGxpdCgnPycpWzFdIHx8ICcnO1xufTtcblxuZXhwb3J0cy5wYXJzZSA9IGZ1bmN0aW9uIChzdHIsIG9wdHMpIHtcblx0b3B0cyA9IG9iamVjdEFzc2lnbih7YXJyYXlGb3JtYXQ6ICdub25lJ30sIG9wdHMpO1xuXG5cdHZhciBmb3JtYXR0ZXIgPSBwYXJzZXJGb3JBcnJheUZvcm1hdChvcHRzKTtcblxuXHQvLyBDcmVhdGUgYW4gb2JqZWN0IHdpdGggbm8gcHJvdG90eXBlXG5cdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvcXVlcnktc3RyaW5nL2lzc3Vlcy80N1xuXHR2YXIgcmV0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuXHRpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gcmV0O1xuXHR9XG5cblx0c3RyID0gc3RyLnRyaW0oKS5yZXBsYWNlKC9eKFxcP3wjfCYpLywgJycpO1xuXG5cdGlmICghc3RyKSB7XG5cdFx0cmV0dXJuIHJldDtcblx0fVxuXG5cdHN0ci5zcGxpdCgnJicpLmZvckVhY2goZnVuY3Rpb24gKHBhcmFtKSB7XG5cdFx0dmFyIHBhcnRzID0gcGFyYW0ucmVwbGFjZSgvXFwrL2csICcgJykuc3BsaXQoJz0nKTtcblx0XHQvLyBGaXJlZm94IChwcmUgNDApIGRlY29kZXMgYCUzRGAgdG8gYD1gXG5cdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9xdWVyeS1zdHJpbmcvcHVsbC8zN1xuXHRcdHZhciBrZXkgPSBwYXJ0cy5zaGlmdCgpO1xuXHRcdHZhciB2YWwgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHMuam9pbignPScpIDogdW5kZWZpbmVkO1xuXG5cdFx0Ly8gbWlzc2luZyBgPWAgc2hvdWxkIGJlIGBudWxsYDpcblx0XHQvLyBodHRwOi8vdzMub3JnL1RSLzIwMTIvV0QtdXJsLTIwMTIwNTI0LyNjb2xsZWN0LXVybC1wYXJhbWV0ZXJzXG5cdFx0dmFsID0gdmFsID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVjb2RlVVJJQ29tcG9uZW50KHZhbCk7XG5cblx0XHRmb3JtYXR0ZXIoZGVjb2RlVVJJQ29tcG9uZW50KGtleSksIHZhbCwgcmV0KTtcblx0fSk7XG5cblx0cmV0dXJuIE9iamVjdC5rZXlzKHJldCkuc29ydCgpLnJlZHVjZShmdW5jdGlvbiAocmVzdWx0LCBrZXkpIHtcblx0XHR2YXIgdmFsID0gcmV0W2tleV07XG5cdFx0aWYgKEJvb2xlYW4odmFsKSAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWwpKSB7XG5cdFx0XHQvLyBTb3J0IG9iamVjdCBrZXlzLCBub3QgdmFsdWVzXG5cdFx0XHRyZXN1bHRba2V5XSA9IGtleXNTb3J0ZXIodmFsKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVzdWx0W2tleV0gPSB2YWw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSwgT2JqZWN0LmNyZWF0ZShudWxsKSk7XG59O1xuXG5leHBvcnRzLnN0cmluZ2lmeSA9IGZ1bmN0aW9uIChvYmosIG9wdHMpIHtcblx0dmFyIGRlZmF1bHRzID0ge1xuXHRcdGVuY29kZTogdHJ1ZSxcblx0XHRzdHJpY3Q6IHRydWUsXG5cdFx0YXJyYXlGb3JtYXQ6ICdub25lJ1xuXHR9O1xuXG5cdG9wdHMgPSBvYmplY3RBc3NpZ24oZGVmYXVsdHMsIG9wdHMpO1xuXG5cdHZhciBmb3JtYXR0ZXIgPSBlbmNvZGVyRm9yQXJyYXlGb3JtYXQob3B0cyk7XG5cblx0cmV0dXJuIG9iaiA/IE9iamVjdC5rZXlzKG9iaikuc29ydCgpLm1hcChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0dmFyIHZhbCA9IG9ialtrZXldO1xuXG5cdFx0aWYgKHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXG5cdFx0aWYgKHZhbCA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIGVuY29kZShrZXksIG9wdHMpO1xuXHRcdH1cblxuXHRcdGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcblx0XHRcdHZhciByZXN1bHQgPSBbXTtcblxuXHRcdFx0dmFsLnNsaWNlKCkuZm9yRWFjaChmdW5jdGlvbiAodmFsMikge1xuXHRcdFx0XHRpZiAodmFsMiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmVzdWx0LnB1c2goZm9ybWF0dGVyKGtleSwgdmFsMiwgcmVzdWx0Lmxlbmd0aCkpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiByZXN1bHQuam9pbignJicpO1xuXHRcdH1cblxuXHRcdHJldHVybiBlbmNvZGUoa2V5LCBvcHRzKSArICc9JyArIGVuY29kZSh2YWwsIG9wdHMpO1xuXHR9KS5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcblx0XHRyZXR1cm4geC5sZW5ndGggPiAwO1xuXHR9KS5qb2luKCcmJykgOiAnJztcbn07XG4iLCIvKlxuICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlXG4gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvblxuICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZVxuICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZVxuICogXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcbiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZVxuICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9uc1xuICogdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qIGdsb2JhbCBsaWIsIFhNTEh0dHBSZXF1ZXN0ICovXG4vKiBkZXBzOiBodHRwdXJsICovXG5cbid1c2Ugc3RyaWN0J1xuXG5sZXQgdXRpbHNcblxuaW1wb3J0ICdodHRwdXJsJ1xuaW1wb3J0IHFzIGZyb20gJ3F1ZXJ5LXN0cmluZydcblxubGV0IGpzb25wQ250ID0gMFxuY29uc3QgRVJST1JfU1RBVEUgPSAtMVxuXG5mdW5jdGlvbiBfanNvbnAgKGNvbmZpZywgY2FsbGJhY2ssIHByb2dyZXNzQ2FsbGJhY2spIHtcbiAgY29uc3QgY2JOYW1lID0gY29uZmlnLmpzb25wQ2FsbGJhY2tOYW1lIHx8ICdqc29ucF8nICsgKCsranNvbnBDbnQpXG4gIGxldCB1cmxcblxuICBpZiAoIWNvbmZpZy51cmwpIHtcbiAgICBjb25zb2xlLmVycm9yKCdbaDUtcmVuZGVyXSBjb25maWcudXJsIHNob3VsZCBiZSBzZXQgaW4gX2pzb25wIGZvciBcXCdmZXRjaFxcJyBBUEkuJylcbiAgfVxuXG4gIGdsb2JhbFtjYk5hbWVdID0gKGZ1bmN0aW9uIChjYikge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGNhbGxiYWNrKHtcbiAgICAgICAgc3RhdHVzOiAyMDAsXG4gICAgICAgIG9rOiB0cnVlLFxuICAgICAgICBzdGF0dXNUZXh0OiAnT0snLFxuICAgICAgICBkYXRhOiByZXNwb25zZVxuICAgICAgfSlcbiAgICAgIGRlbGV0ZSBnbG9iYWxbY2JdXG4gICAgfVxuICB9KShjYk5hbWUpXG5cbiAgY29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0JylcbiAgdHJ5IHtcbiAgICB1cmwgPSBsaWIuaHR0cHVybChjb25maWcudXJsKVxuICB9XG4gIGNhdGNoIChlcnIpIHtcbiAgICBjb25zb2xlLmVycm9yKCdbaDUtcmVuZGVyXSBpbnZhbGlkIGNvbmZpZy51cmwgaW4gX2pzb25wIGZvciBcXCdmZXRjaFxcJyBBUEk6ICdcbiAgICAgICsgY29uZmlnLnVybClcbiAgfVxuICB1cmwucGFyYW1zLmNhbGxiYWNrID0gY2JOYW1lXG4gIHNjcmlwdC50eXBlID0gJ3RleHQvamF2YXNjcmlwdCdcbiAgc2NyaXB0LnNyYyA9IHVybC50b1N0cmluZygpXG4gIC8vIHNjcmlwdC5vbmVycm9yIGlzIG5vdCB3b3JraW5nIG9uIElFIG9yIHNhZmFyaS5cbiAgLy8gYnV0IHRoZXkgYXJlIG5vdCBjb25zaWRlcmVkIGhlcmUuXG4gIHNjcmlwdC5vbmVycm9yID0gKGZ1bmN0aW9uIChjYikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbaDUtcmVuZGVyXSB1bmV4cGVjdGVkIGVycm9yIGluIF9qc29ucCBmb3IgXFwnZmV0Y2hcXCcgQVBJJywgZXJyKVxuICAgICAgY2FsbGJhY2soe1xuICAgICAgICBzdGF0dXM6IEVSUk9SX1NUQVRFLFxuICAgICAgICBvazogZmFsc2UsXG4gICAgICAgIHN0YXR1c1RleHQ6ICcnLFxuICAgICAgICBkYXRhOiAnJ1xuICAgICAgfSlcbiAgICAgIGRlbGV0ZSBnbG9iYWxbY2JdXG4gICAgfVxuICB9KShjYk5hbWUpXG4gIGNvbnN0IGhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdXG4gIGhlYWQuaW5zZXJ0QmVmb3JlKHNjcmlwdCwgbnVsbClcbn1cblxuZnVuY3Rpb24gX3hociAoY29uZmlnLCBjYWxsYmFjaywgcHJvZ3Jlc3NDYWxsYmFjaykge1xuICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKVxuICB4aHIucmVzcG9uc2VUeXBlID0gY29uZmlnLnR5cGVcbiAgeGhyLm9wZW4oY29uZmlnLm1ldGhvZCwgY29uZmlnLnVybCwgdHJ1ZSlcblxuICAvLyBjb3JzIGNvb2tpZSBzdXBwb3J0XG4gIGlmIChjb25maWcud2l0aENyZWRlbnRpYWxzID09PSB0cnVlKSB7XG4gICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWVcbiAgfVxuXG4gIGNvbnN0IGhlYWRlcnMgPSBjb25maWcuaGVhZGVycyB8fCB7fVxuICBmb3IgKGNvbnN0IGsgaW4gaGVhZGVycykge1xuICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKGssIGhlYWRlcnNba10pXG4gIH1cblxuICB4aHIub25sb2FkID0gZnVuY3Rpb24gKHJlcykge1xuICAgIGNhbGxiYWNrKHtcbiAgICAgIHN0YXR1czogeGhyLnN0YXR1cyxcbiAgICAgIG9rOiB4aHIuc3RhdHVzID49IDIwMCAmJiB4aHIuc3RhdHVzIDwgMzAwLFxuICAgICAgc3RhdHVzVGV4dDogeGhyLnN0YXR1c1RleHQsXG4gICAgICBkYXRhOiB4aHIucmVzcG9uc2UsXG4gICAgICBoZWFkZXJzOiB4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkuc3BsaXQoJ1xcbicpXG4gICAgICAgIC5yZWR1Y2UoZnVuY3Rpb24gKG9iaiwgaGVhZGVyU3RyKSB7XG4gICAgICAgICAgY29uc3QgaGVhZGVyQXJyID0gaGVhZGVyU3RyLm1hdGNoKC8oLispOiAoLispLylcbiAgICAgICAgICBpZiAoaGVhZGVyQXJyKSB7XG4gICAgICAgICAgICBvYmpbaGVhZGVyQXJyWzFdXSA9IGhlYWRlckFyclsyXVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gb2JqXG4gICAgICAgIH0sIHt9KVxuICAgIH0pXG4gIH1cblxuICBpZiAocHJvZ3Jlc3NDYWxsYmFjaykge1xuICAgIHhoci5vbnByb2dyZXNzID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgIHByb2dyZXNzQ2FsbGJhY2soe1xuICAgICAgICByZWFkeVN0YXRlOiB4aHIucmVhZHlTdGF0ZSxcbiAgICAgICAgc3RhdHVzOiB4aHIuc3RhdHVzLFxuICAgICAgICBsZW5ndGg6IGUubG9hZGVkLFxuICAgICAgICB0b3RhbDogZS50b3RhbCxcbiAgICAgICAgc3RhdHVzVGV4dDogeGhyLnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKS5zcGxpdCgnXFxuJylcbiAgICAgICAgICAucmVkdWNlKGZ1bmN0aW9uIChvYmosIGhlYWRlclN0cikge1xuICAgICAgICAgICAgY29uc3QgaGVhZGVyQXJyID0gaGVhZGVyU3RyLm1hdGNoKC8oLispOiAoLispLylcbiAgICAgICAgICAgIGlmIChoZWFkZXJBcnIpIHtcbiAgICAgICAgICAgICAgb2JqW2hlYWRlckFyclsxXV0gPSBoZWFkZXJBcnJbMl1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvYmpcbiAgICAgICAgICB9LCB7fSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgY29uc29sZS5lcnJvcignW2g1LXJlbmRlcl0gdW5leHBlY3RlZCBlcnJvciBpbiBfeGhyIGZvciBcXCdmZXRjaFxcJyBBUEknLCBlcnIpXG4gICAgY2FsbGJhY2soe1xuICAgICAgc3RhdHVzOiBFUlJPUl9TVEFURSxcbiAgICAgIG9rOiBmYWxzZSxcbiAgICAgIHN0YXR1c1RleHQ6ICcnLFxuICAgICAgZGF0YTogJydcbiAgICB9KVxuICB9XG5cbiAgeGhyLnNlbmQoY29uZmlnLmJvZHkgfHwgbnVsbClcbn1cblxuY29uc3Qgc3RyZWFtID0ge1xuXG4gIC8qKlxuICAgKiBzZW5kSHR0cFxuICAgKiBAZGVwcmVjYXRlZFxuICAgKiBOb3RlOiBUaGlzIEFQSSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHN0cmVhbS5mZXRjaCBpbnN0ZWFkLlxuICAgKiBzZW5kIGEgaHR0cCByZXF1ZXN0IHRocm91Z2ggWEhSLlxuICAgKiBAcGFyYW0gIHtvYmp9IHBhcmFtc1xuICAgKiAgLSBtZXRob2Q6ICdHRVQnIHwgJ1BPU1QnIHwgJ1BVVCcgfCAnREVMRVRFJyB8ICdIRUFEJyB8ICdQQVRDSCcsXG4gICAqICAtIHVybDogdXJsIHJlcXVlc3RlZFxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IGNhbGxiYWNrSWRcbiAgICovXG4gIHNlbmRIdHRwOiBmdW5jdGlvbiAocGFyYW0sIGNhbGxiYWNrSWQpIHtcbiAgICBpZiAodHlwZW9mIHBhcmFtID09PSAnc3RyaW5nJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcGFyYW0gPSBKU09OLnBhcnNlKHBhcmFtKVxuICAgICAgfVxuICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcGFyYW0gIT09ICdvYmplY3QnIHx8ICFwYXJhbS51cmwpIHtcbiAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKFxuICAgICAgICAnW2g1LXJlbmRlcl0gaW52YWxpZCBjb25maWcgb3IgaW52YWxpZCBjb25maWcudXJsIGZvciBzZW5kSHR0cCBBUEknKVxuICAgIH1cblxuICAgIGNvbnN0IHNlbmRlciA9IHRoaXMuc2VuZGVyXG4gICAgY29uc3QgbWV0aG9kID0gcGFyYW0ubWV0aG9kIHx8ICdHRVQnXG4gICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KClcbiAgICB4aHIub3BlbihtZXRob2QsIHBhcmFtLnVybCwgdHJ1ZSlcbiAgICB4aHIub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgc2VuZGVyLnBlcmZvcm1DYWxsYmFjayhjYWxsYmFja0lkLCB0aGlzLnJlc3BvbnNlVGV4dClcbiAgICB9XG4gICAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKCdbaDUtcmVuZGVyXSB1bmV4cGVjdGVkIGVycm9yIGluIHNlbmRIdHRwIEFQSScsIGVycm9yKVxuICAgICAgLy8gc2VuZGVyLnBlcmZvcm1DYWxsYmFjayhcbiAgICAgIC8vICAgY2FsbGJhY2tJZCxcbiAgICAgIC8vICAgbmV3IEVycm9yKCd1bmV4cGVjdGVkIGVycm9yIGluIHNlbmRIdHRwIEFQSScpXG4gICAgICAvLyApXG4gICAgfVxuICAgIHhoci5zZW5kKClcbiAgfSxcblxuICAvKipcbiAgICogZmV0Y2hcbiAgICogdXNlIHN0cmVhbS5mZXRjaCB0byByZXF1ZXN0IGZvciBhIGpzb24gZmlsZSwgYSBwbGFpbiB0ZXh0IGZpbGUgb3JcbiAgICogYSBhcnJheWJ1ZmZlciBmb3IgYSBmaWxlIHN0cmVhbS4gKFlvdSBjYW4gdXNlIEJsb2IgYW5kIEZpbGVSZWFkZXJcbiAgICogQVBJIGltcGxlbWVudGVkIGJ5IG1vc3QgbW9kZXJuIGJyb3dzZXJzIHRvIHJlYWQgYSBhcnJheWJ1ZmZlci4pXG4gICAqIEBwYXJhbSAge29iamVjdH0gb3B0aW9ucyBjb25maWcgb3B0aW9uc1xuICAgKiAgIC0gbWV0aG9kOiAnR0VUJyB8ICdQT1NUJyB8ICdQVVQnIHwgJ0RFTEVURScgfCAnSEVBRCcgfCAnUEFUQ0gnXG4gICAqICAgLSBoZWFkZXJzIHtvYmp9XG4gICAqICAgLSB1cmwge3N0cmluZ31cbiAgICogICAtIG1vZGUge3N0cmluZ30gJ2NvcnMnIHwgJ25vLWNvcnMnIHwgJ3NhbWUtb3JpZ2luJyB8ICduYXZpZ2F0ZSdcbiAgICogICAtIHdpdGhDcmVkZW50aWFscyB7Ym9vbGVhbn1cbiAgICogICAtIGJvZHlcbiAgICogICAtIHR5cGUge3N0cmluZ30gJ2pzb24nIHwgJ2pzb25wJyB8ICd0ZXh0J1xuICAgKiBAcGFyYW0gIHtzdHJpbmd9IGNhbGxiYWNrSWRcbiAgICogQHBhcmFtICB7c3RyaW5nfSBwcm9ncmVzc0NhbGxiYWNrSWRcbiAgICovXG4gIGZldGNoOiBmdW5jdGlvbiAob3B0aW9ucywgY2FsbGJhY2tJZCwgcHJvZ3Jlc3NDYWxsYmFja0lkKSB7XG4gICAgY29uc3QgREVGQVVMVF9NRVRIT0QgPSAnR0VUJ1xuICAgIGNvbnN0IERFRkFVTFRfTU9ERSA9ICdjb3JzJ1xuICAgIGNvbnN0IERFRkFVTFRfVFlQRSA9ICd0ZXh0J1xuXG4gICAgY29uc3QgbWV0aG9kT3B0aW9ucyA9IFsnR0VUJywgJ1BPU1QnLCAnUFVUJywgJ0RFTEVURScsICdIRUFEJywgJ1BBVENIJ11cbiAgICBjb25zdCBtb2RlT3B0aW9ucyA9IFsnY29ycycsICduby1jb3JzJywgJ3NhbWUtb3JpZ2luJywgJ25hdmlnYXRlJ11cbiAgICBjb25zdCB0eXBlT3B0aW9ucyA9IFsndGV4dCcsICdqc29uJywgJ2pzb25wJywgJ2FycmF5YnVmZmVyJ11cblxuICAgIC8vIGNvbnN0IGZhbGxiYWNrID0gZmFsc2UgIC8vIGZhbGxiYWNrIGZyb20gJ2ZldGNoJyBBUEkgdG8gWEhSLlxuICAgIGNvbnN0IHNlbmRlciA9IHRoaXMuc2VuZGVyXG5cbiAgICBjb25zdCBjb25maWcgPSB1dGlscy5leHRlbmQoe30sIG9wdGlvbnMpXG5cbiAgICAvLyB2YWxpZGF0ZSBvcHRpb25zLm1ldGhvZFxuICAgIGlmICh0eXBlb2YgY29uZmlnLm1ldGhvZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbmZpZy5tZXRob2QgPSBERUZBVUxUX01FVEhPRFxuICAgICAgY29uc29sZS53YXJuKCdbaDUtcmVuZGVyXSBvcHRpb25zLm1ldGhvZCBmb3IgXFwnZmV0Y2hcXCcgQVBJIGhhcyBiZWVuIHNldCB0byAnXG4gICAgICAgICsgJ2RlZmF1bHQgdmFsdWUgXFwnJyArIGNvbmZpZy5tZXRob2QgKyAnXFwnJylcbiAgICB9XG4gICAgZWxzZSBpZiAobWV0aG9kT3B0aW9ucy5pbmRleE9mKChjb25maWcubWV0aG9kICsgJycpXG4gICAgICAudG9VcHBlckNhc2UoKSkgPT09IC0xKSB7XG4gICAgICByZXR1cm4gY29uc29sZS5lcnJvcignW2g1LXJlbmRlcl0gb3B0aW9ucy5tZXRob2QgXFwnJ1xuICAgICAgICArIGNvbmZpZy5tZXRob2RcbiAgICAgICAgKyAnXFwnIGZvciBcXCdmZXRjaFxcJyBBUEkgc2hvdWxkIGJlIG9uZSBvZiAnXG4gICAgICAgICsgbWV0aG9kT3B0aW9ucyArICcuJylcbiAgICB9XG5cbiAgICAvLyB2YWxpZGF0ZSBvcHRpb25zLnVybFxuICAgIGlmICghY29uZmlnLnVybCkge1xuICAgICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoJ1toNS1yZW5kZXJdIG9wdGlvbnMudXJsIHNob3VsZCBiZSBzZXQgZm9yIFxcJ2ZldGNoXFwnIEFQSS4nKVxuICAgIH1cblxuICAgIC8vIHZhbGlkYXRlIGJvZHkgY29udGVudCBmb3IgbWV0aG9kICdHRVQnLlxuICAgIGlmIChjb25maWcubWV0aG9kLnRvVXBwZXJDYXNlKCkgPT09ICdHRVQnKSB7XG4gICAgICBsZXQgYm9keSA9IGNvbmZpZy5ib2R5XG4gICAgICBpZiAodXRpbHMuaXNQbGFpbk9iamVjdChib2R5KSkge1xuICAgICAgICBib2R5ID0gcXMuc3RyaW5naWZ5KGJvZHkpXG4gICAgICB9XG4gICAgICBsZXQgdXJsID0gY29uZmlnLnVybFxuICAgICAgbGV0IGhhc2hJZHggPSB1cmwuaW5kZXhPZignIycpXG4gICAgICBoYXNoSWR4IDw9IC0xICYmIChoYXNoSWR4ID0gdXJsLmxlbmd0aClcbiAgICAgIGxldCBoYXNoID0gdXJsLnN1YnN0cihoYXNoSWR4KVxuICAgICAgaWYgKGhhc2ggJiYgaGFzaFswXSA9PT0gJyMnKSB7XG4gICAgICAgIGhhc2ggPSBoYXNoLnN1YnN0cigxKVxuICAgICAgfVxuICAgICAgdXJsID0gdXJsLnN1YnN0cmluZygwLCBoYXNoSWR4KVxuICAgICAgaWYgKGJvZHkpIHtcbiAgICAgICAgdXJsICs9IChjb25maWcudXJsLmluZGV4T2YoJz8nKSA8PSAtMSA/ICc/JyA6ICcmJykgKyBib2R5XG4gICAgICB9XG4gICAgICB1cmwgKz0gJyMnICsgaGFzaFxuICAgICAgY29uZmlnLnVybCA9IHVybFxuICAgIH1cblxuICAgIC8vIHZhbGlkYXRlIG9wdGlvbnMubW9kZVxuICAgIGlmICh0eXBlb2YgY29uZmlnLm1vZGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25maWcubW9kZSA9IERFRkFVTFRfTU9ERVxuICAgIH1cbiAgICBlbHNlIGlmIChtb2RlT3B0aW9ucy5pbmRleE9mKChjb25maWcubW9kZSArICcnKS50b0xvd2VyQ2FzZSgpKSA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBjb25zb2xlLmVycm9yKCdbaDUtcmVuZGVyXSBvcHRpb25zLm1vZGUgXFwnJ1xuICAgICAgICArIGNvbmZpZy5tb2RlXG4gICAgICAgICsgJ1xcJyBmb3IgXFwnZmV0Y2hcXCcgQVBJIHNob3VsZCBiZSBvbmUgb2YgJ1xuICAgICAgICArIG1vZGVPcHRpb25zICsgJy4nKVxuICAgIH1cblxuICAgIC8vIHZhbGlkYXRlIG9wdGlvbnMudHlwZVxuICAgIGlmICh0eXBlb2YgY29uZmlnLnR5cGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25maWcudHlwZSA9IERFRkFVTFRfVFlQRVxuICAgICAgY29uc29sZS53YXJuKCdbaDUtcmVuZGVyXSBvcHRpb25zLnR5cGUgZm9yIFxcJ2ZldGNoXFwnIEFQSSBoYXMgYmVlbiBzZXQgdG8gJ1xuICAgICAgICArICdkZWZhdWx0IHZhbHVlIFxcJycgKyBjb25maWcudHlwZSArICdcXCcuJylcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZU9wdGlvbnMuaW5kZXhPZigoY29uZmlnLnR5cGUgKyAnJykudG9Mb3dlckNhc2UoKSkgPT09IC0xKSB7XG4gICAgICByZXR1cm4gY29uc29sZS5lcnJvcignW2g1LXJlbmRlcl0gb3B0aW9ucy50eXBlIFxcJydcbiAgICAgICAgICArIGNvbmZpZy50eXBlXG4gICAgICAgICAgKyAnXFwnIGZvciBcXCdmZXRjaFxcJyBBUEkgc2hvdWxkIGJlIG9uZSBvZiAnXG4gICAgICAgICAgKyB0eXBlT3B0aW9ucyArICcuJylcbiAgICB9XG5cbiAgICAvLyB2YWxpZGF0ZSBvcHRpb25zLmhlYWRlcnNcbiAgICBjb25maWcuaGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzIHx8IHt9XG4gICAgaWYgKCF1dGlscy5pc1BsYWluT2JqZWN0KGNvbmZpZy5oZWFkZXJzKSkge1xuICAgICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoJ1toNS1yZW5kZXJdIG9wdGlvbnMuaGVhZGVycyBzaG91bGQgYmUgYSBwbGFpbiBvYmplY3QnKVxuICAgIH1cblxuICAgIC8vIHZhbGlkYXRlIG9wdGlvbnMudGltZW91dFxuICAgIGNvbmZpZy50aW1lb3V0ID0gcGFyc2VJbnQoY29uZmlnLnRpbWVvdXQsIDEwKSB8fCAyNTAwXG5cbiAgICBjb25zdCBfY2FsbEFyZ3MgPSBbY29uZmlnLCBmdW5jdGlvbiAocmVzKSB7XG4gICAgICBzZW5kZXIucGVyZm9ybUNhbGxiYWNrKGNhbGxiYWNrSWQsIHJlcylcbiAgICB9XVxuICAgIGlmIChwcm9ncmVzc0NhbGxiYWNrSWQpIHtcbiAgICAgIF9jYWxsQXJncy5wdXNoKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgLy8gU2V0ICdrZWVwQWxpdmUnIHRvIHRydWUgZm9yIHNlbmRpbmcgY29udGludW91cyBjYWxsYmFja3NcbiAgICAgICAgc2VuZGVyLnBlcmZvcm1DYWxsYmFjayhwcm9ncmVzc0NhbGxiYWNrSWQsIHJlcywgdHJ1ZSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy50eXBlID09PSAnanNvbnAnKSB7XG4gICAgICBfanNvbnAuYXBwbHkodGhpcywgX2NhbGxBcmdzKVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIF94aHIuYXBwbHkodGhpcywgX2NhbGxBcmdzKVxuICAgIH1cbiAgfVxuXG59XG5cbmNvbnN0IG1ldGEgPSB7XG4gIHN0cmVhbTogW3tcbiAgICBuYW1lOiAnc2VuZEh0dHAnLFxuICAgIGFyZ3M6IFsnb2JqZWN0JywgJ2Z1bmN0aW9uJ11cbiAgfSwge1xuICAgIG5hbWU6ICdmZXRjaCcsXG4gICAgYXJnczogWydvYmplY3QnLCAnZnVuY3Rpb24nLCAnZnVuY3Rpb24nXVxuICB9XVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQ6IGZ1bmN0aW9uIChXZWV4KSB7XG4gICAgdXRpbHMgPSBXZWV4LnV0aWxzXG4gICAgV2VleC5yZWdpc3RlckFwaU1vZHVsZSgnc3RyZWFtJywgc3RyZWFtLCBtZXRhKVxuICB9XG59XG4iLCIvKlxuICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlXG4gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvblxuICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZVxuICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZVxuICogXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcbiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZVxuICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9uc1xuICogdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbid1c2Ugc3RyaWN0J1xuXG4vKipcblxuQVVDVElPTjpcbnRhc2tRdWV1ZVxuQ2xpcGJvYXJkLnNldFN0cmluZygpICBOT1cgbm90IHdvcmtzLCBmYWNpbmcgdG8gdXNlci1hY3QgbG9zZSBvZiB0YXNrUXVldWUuXG5cbndvcmtzIGluIENocm9tZSBGaXJlZm94IE9wZXJhLiBidXQgbm90IGluIFNhZmFyaS5cbkBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RvY3VtZW50L2V4ZWNDb21tYW5kI0Jyb3dzZXJfY29tcGF0aWJpbGl0eVxuXG5DbGlwYm9hcmQuZ2V0U3RyaW5nKCkgdW5pbXBsZW1lbnRlZC4gVGhlcmUgaXMgbm8gZWFzeSB3YXkgdG8gZG8gcGFzdGUgZnJvbSBjbGlwYm9hcmQgdG8ganMgdmFyaWFibGUuXG5cblNvIGxvb2sgb3V0IHlvdXIgYXBwIGJlaGF2aW9yLCB3aGVuIGRvd25ncmFkZSB0byBodG1sNSByZW5kZXIuXG5BbnkgaWRlYSBpcyB3ZWxjb21lLlxuKiovXG5cbmNvbnN0IFdFRVhfQ0xJUEJPQVJEX0lEID0gJ19fd2VleF9jbGlwYm9hcmRfaWRfXydcblxuY29uc3QgY2xpcGJvYXJkID0ge1xuXG4gIGdldFN0cmluZzogZnVuY3Rpb24gKGNhbGxiYWNrSWQpIHtcbiAgICAvLyBub3Qgc3VwcG9ydGVkIGluIGh0bWw1XG4gICAgY29uc29sZS5sb2coJ2NsaXBib2FyZC5nZXRTdHJpbmcoKSBpcyBub3Qgc3VwcG9ydGVkIG5vdy4nKVxuICB9LFxuXG4gIHNldFN0cmluZzogZnVuY3Rpb24gKHRleHQpIHtcbiAgICAvLyBub3Qgc3VwcG9ydCBzYWZhcmlcbiAgICBpZiAodHlwZW9mIHRleHQgPT09ICdzdHJpbmcnICYmIHRleHQgIT09ICcnICYmIGRvY3VtZW50LmV4ZWNDb21tYW5kKSB7XG4gICAgICBjb25zdCB0ZW1wSW5wdXQgPSBlbGVtZW50KClcbiAgICAgIHRlbXBJbnB1dC52YWx1ZSA9IHRleHRcblxuICAgICAgdGVtcElucHV0LnNlbGVjdCgpXG4gICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpXG4gICAgICAvLyB2YXIgb3V0ID0gZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKFwiZXhlY0NvbW1hbmQgb3V0IGlzIFwiICsgb3V0KTtcbiAgICAgIHRlbXBJbnB1dC52YWx1ZSA9ICcnXG4gICAgICB0ZW1wSW5wdXQuYmx1cigpXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coJ29ubHkgc3VwcG9ydCBzdHJpbmcgaW5wdXQgbm93JylcbiAgICB9XG4gIH1cblxufVxuXG5mdW5jdGlvbiBlbGVtZW50ICgpIHtcbiAgbGV0IHRlbXBJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFdFRVhfQ0xJUEJPQVJEX0lEKVxuICBpZiAoIXRlbXBJbnB1dCkge1xuICAgIHRlbXBJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JylcbiAgICB0ZW1wSW5wdXQuc2V0QXR0cmlidXRlKCdpZCcsIFdFRVhfQ0xJUEJPQVJEX0lEKVxuICAgIHRlbXBJbnB1dC5zdHlsZS5jc3NUZXh0ID0gJ2hlaWdodDoxcHg7d2lkdGg6MXB4O2JvcmRlcjpub25lOydcbiAgICAvLyB0ZW1wSW5wdXQuc3R5bGUuY3NzVGV4dCA9IFwiaGVpZ2h0OjQwcHg7d2lkdGg6MzAwcHg7Ym9yZGVyOnNvbGlkO1wiXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZW1wSW5wdXQpXG4gIH1cbiAgcmV0dXJuIHRlbXBJbnB1dFxufVxuXG5jb25zdCBtZXRhID0ge1xuICBjbGlwYm9hcmQ6IFt7XG4gICAgbmFtZTogJ2dldFN0cmluZycsXG4gICAgYXJnczogWydmdW5jdGlvbiddXG4gIH0sIHtcbiAgICBuYW1lOiAnc2V0U3RyaW5nJyxcbiAgICBhcmdzOiBbJ3N0cmluZyddXG4gIH1dXG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdDogZnVuY3Rpb24gKFdlZXgpIHtcbiAgICBXZWV4LnJlZ2lzdGVyQXBpTW9kdWxlKCdjbGlwYm9hcmQnLCBjbGlwYm9hcmQsIG1ldGEpXG4gIH1cbn1cbiIsIi8qXG4gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGVcbiAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uXG4gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlXG4gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlXG4gKiBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxuICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlXG4gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zXG4gKiB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGV2ZW50ID0ge1xuICAvKipcbiAgICogb3BlblVybFxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IHVybFxuICAgKi9cbiAgb3BlblVSTDogZnVuY3Rpb24gKHVybCkge1xuICAgIGxvY2F0aW9uLmhyZWYgPSB1cmxcbiAgfVxuXG59XG5cbmNvbnN0IG1ldGEgPSB7XG4gIGV2ZW50OiBbe1xuICAgIG5hbWU6ICdvcGVuVVJMJyxcbiAgICBhcmdzOiBbJ3N0cmluZyddXG4gIH1dXG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdDogZnVuY3Rpb24gKFdlZXgpIHtcbiAgICBXZWV4LnJlZ2lzdGVyQXBpTW9kdWxlKCdldmVudCcsIGV2ZW50LCBtZXRhKVxuICB9XG59XG4iLCIvKlxuICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlXG4gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvblxuICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZVxuICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZVxuICogXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcbiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZVxuICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9uc1xuICogdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmNvbnN0IHV0aWxzID0ge31cbmxldCBlbmRFdmVudFxubGV0IHN0eWxlTmFtZVxuXG5jb25zdCBERVNJR05fUk9PVF9WQUxVRSA9IDc1XG5cbmNvbnN0IEVWRU5UX05BTUVfTUFQID0ge1xuICB0cmFuc2l0aW9uOiAndHJhbnNpdGlvbmVuZCcsXG4gIFdlYmtpdFRyYW5zaXRpb246ICd3ZWJraXRUcmFuc2l0aW9uRW5kJyxcbiAgTW96VHJhbnNpdGlvbjogJ21velRyYW5zaXRpb25FbmQnLFxuICBPVHJhbnNpdGlvbjogJ29UcmFuc2l0aW9uRW5kJyxcbiAgbXNUcmFuc2l0aW9uOiAnTVNUcmFuc2l0aW9uRW5kJ1xufVxuXG5mdW5jdGlvbiBkZXRlY3RFdmVudHMgKCkge1xuICBjb25zdCB0ZXN0RWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICBjb25zdCBzdHlsZSA9IHRlc3RFbC5zdHlsZVxuICBmb3IgKGNvbnN0IG5hbWUgaW4gRVZFTlRfTkFNRV9NQVApIHtcbiAgICBpZiAobmFtZSBpbiBzdHlsZSkge1xuICAgICAgZW5kRXZlbnQgPSBFVkVOVF9OQU1FX01BUFtuYW1lXVxuICAgICAgc3R5bGVOYW1lID0gbmFtZVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cbn1cblxuZGV0ZWN0RXZlbnRzKClcblxuZnVuY3Rpb24gdHJhbnNpdGlvbk9uY2UgKHZub2RlLCBjb25maWcsIGNhbGxiYWNrKSB7XG4gIGNvbnN0IHtcbiAgICBuZXh0RnJhbWUsXG4gICAgdG9DU1NUZXh0LFxuICAgIHN0eWxlT2JqZWN0MnJlbSxcbiAgICAvLyBub3JtYWxpemVTdHlsZSxcbiAgICBpc0FycmF5XG4gIH0gPSB1dGlsc1xuXG4gIGlmIChpc0FycmF5KHZub2RlKSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50Jykge1xuICAgICAgY29uc29sZS53YXJuKCdbdnVlLXJlbmRlcl0gdGhlIHJlZiBwYXNzZWQgdG8gYW5pbWF0aW9uLnRyYW5zaXRpb25PbmNlIGlzIGEgYXJyYXkuJylcbiAgICB9XG4gICAgdm5vZGUgPSB2bm9kZVswXVxuICB9XG5cbiAgY29uc3QgZHVyYXRpb24gPSBjb25maWcuZHVyYXRpb24gfHwgMCAvLyBtc1xuICBjb25zdCB0aW1pbmcgPSBjb25maWcudGltaW5nRnVuY3Rpb24gfHwgJ2xpbmVhcidcbiAgY29uc3QgZGVsYXkgPSBjb25maWcuZGVsYXkgfHwgMCAgLy8gbXNcblxuICAvLyBUT0RPOiBwYXJzZSB0cmFuc2l0aW9uIHByb3BlcnRpZXNcbiAgY29uc3QgdHJhbnNpdGlvblZhbHVlID0gYGFsbCAke2R1cmF0aW9ufW1zICR7dGltaW5nfSAke2RlbGF5fW1zYFxuXG4gIGNvbnN0IGRvbSA9IHZub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPyB2bm9kZSA6IHZub2RlLiRlbFxuICAvLyB0cmlnZ2VyIGltYWdlIGxhenlsb2FkaW5nIGJ5IGZvcmNlLlxuICBkb20gJiYgd2VleC51dGlscy5maXJlTGF6eWxvYWQoZG9tLCB0cnVlKVxuXG4gIGNvbnN0IHRyYW5zaXRpb25FbmRIYW5kbGVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgZXZlbnQgJiYgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICBpZiAoZW5kRXZlbnQpIHtcbiAgICAgIGRvbS5yZW1vdmVFdmVudExpc3RlbmVyKGVuZEV2ZW50LCB0cmFuc2l0aW9uRW5kSGFuZGxlcilcbiAgICAgIGRvbS5zdHlsZVtzdHlsZU5hbWVdID0gJydcbiAgICB9XG4gICAgY2FsbGJhY2soKVxuICB9XG4gIGlmIChlbmRFdmVudCkge1xuICAgIGRvbS5zdHlsZVtzdHlsZU5hbWVdID0gdHJhbnNpdGlvblZhbHVlXG4gICAgZG9tLmFkZEV2ZW50TGlzdGVuZXIoZW5kRXZlbnQsIHRyYW5zaXRpb25FbmRIYW5kbGVyKVxuICB9XG4gIG5leHRGcmFtZSgoKSA9PiB7XG4gICAgZG9tLnN0eWxlLmNzc1RleHRcbiAgICAgICs9IHRvQ1NTVGV4dChzdHlsZU9iamVjdDJyZW0oY29uZmlnLnN0eWxlcywgREVTSUdOX1JPT1RfVkFMVUUpIHx8IHt9KVxuICB9KVxufVxuXG5jb25zdCBhbmltYXRpb24gPSB7XG4gIC8qKlxuICAgKiB0cmFuc2l0aW9uXG4gICAqIEBwYXJhbSAge1N0cmluZ30gdm5vZGVcbiAgICogQHBhcmFtICB7T2JqZWN0fSBjb25maWdcbiAgICogQHBhcmFtICB7U3RyaW5nfSBjYWxsYmFja1xuICAgKi9cbiAgdHJhbnNpdGlvbiAodm5vZGUsIGNvbmZpZywgY2FsbGJhY2spIHtcbiAgICBpZiAoIWNvbmZpZy5zdHlsZXMpIHsgcmV0dXJuIH1cbiAgICByZXR1cm4gdHJhbnNpdGlvbk9uY2Uodm5vZGUsIGNvbmZpZywgKCkgPT4ge1xuICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKVxuICAgIH0pXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0ICh3ZWV4KSB7XG4gICAgY29uc3QgZXh0ZW5kS2V5cyA9IHdlZXgudXRpbHMuZXh0ZW5kS2V5c1xuICAgIGV4dGVuZEtleXModXRpbHMsIHdlZXgudXRpbHMsIFtcbiAgICAgICduZXh0RnJhbWUnLFxuICAgICAgJ3RvQ1NTVGV4dCcsXG4gICAgICAnc3R5bGVPYmplY3QycmVtJyxcbiAgICAgIC8vICdhdXRvUHJlZml4JyxcbiAgICAgIC8vICdub3JtYWxpemVTdHlsZScsXG4gICAgICAnaXNBcnJheSdcbiAgICBdKVxuXG4gICAgd2VleC5yZWdpc3Rlck1vZHVsZSgnYW5pbWF0aW9uJywgYW5pbWF0aW9uKVxuICB9XG59XG4iLCIvKlxuICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlXG4gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvblxuICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZVxuICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZVxuICogXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcbiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZVxuICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9uc1xuICogdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmNvbnN0IHV0aWxzID0ge31cblxuZnVuY3Rpb24gbm93ICgpIHtcbiAgY29uc3Qgbm93ID0gd2luZG93LnBlcmZvcm1hbmNlICYmIHdpbmRvdy5wZXJmb3JtYW5jZS5ub3dcbiAgICA/IHdpbmRvdy5wZXJmb3JtYW5jZS5ub3cuYmluZCh3aW5kb3cucGVyZm9ybWFuY2UpIDogRGF0ZS5ub3dcbiAgcmV0dXJuIG5vdygpXG59XG5cbmZ1bmN0aW9uIHNjcm9sbEVsZW1lbnQgKGRTdWZmaXgsIHBvc2l0aW9uKSB7XG4gIGlmICgodGhpcyA9PT0gZG9jdW1lbnQuYm9keSkgfHwgKHRoaXMgPT09IHdpbmRvdylcbiAgICAmJiB3aW5kb3cuc2Nyb2xsVG8pIHtcbiAgICByZXR1cm4gd2luZG93LnNjcm9sbFRvKDAsIHBvc2l0aW9uKVxuICB9XG4gIHRoaXNbYHNjcm9sbCR7ZFN1ZmZpeH1gXSA9IHBvc2l0aW9uXG59XG4vKipcbiAqIHNlbGYgaW52b2tlZCBmdW5jdGlvbiB0aGF0LCBnaXZlbiBhIGNvbnRleHQsIHN0ZXBzIHRocm91Z2ggc2Nyb2xsaW5nXG4gKiBAbWV0aG9kIHN0ZXBcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKi9cbmZ1bmN0aW9uIHN0ZXAgKGNvbnRleHQpIHtcbiAgLy8gY2FsbCBtZXRob2QgYWdhaW4gb24gbmV4dCBhdmFpbGFibGUgZnJhbWVcbiAgY29udGV4dC5mcmFtZSA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcC5iaW5kKHdpbmRvdywgY29udGV4dCkpXG4gIGNvbnN0IHRpbWUgPSBub3coKVxuICBsZXQgZWxhcHNlZCA9ICh0aW1lIC0gY29udGV4dC5zdGFydFRpbWUpIC8gNDY4XG4gIC8vIGF2b2lkIGVsYXBzZWQgdGltZXMgaGlnaGVyIHRoYW4gb25lXG4gIGVsYXBzZWQgPSBlbGFwc2VkID4gMSA/IDEgOiBlbGFwc2VkXG4gIC8vIGFwcGx5IGVhc2luZyB0byBlbGFwc2VkIHRpbWVcbiAgY29uc3QgdmFsdWUgPSBlYXNlKGVsYXBzZWQpXG4gIGNvbnN0IGN1cnJlbnRQb3NpdGlvbiA9IGNvbnRleHQuc3RhcnRQb3NpdGlvbiArIChjb250ZXh0LnBvc2l0aW9uIC0gY29udGV4dC5zdGFydFBvc2l0aW9uKSAqIHZhbHVlXG4gIGNvbnRleHQubWV0aG9kLmNhbGwoY29udGV4dC5zY3JvbGxhYmxlLCBjb250ZXh0LmRTdWZmaXgsIGN1cnJlbnRQb3NpdGlvbilcbiAgLy8gcmV0dXJuIHdoZW4gZW5kIHBvaW50cyBoYXZlIGJlZW4gcmVhY2hlZFxuICAvKipcbiAgICAqIE5PVEU6IHNob3VsZCB1c2Ugfn4gdG8gcGFyc2UgcG9zaXRpb24gbnVtYmVyIGludG8gaW50ZWdlci4gT3RoZXJ3aXNlXG4gICAgKiB0aGlzIHR3byBmbG9hdCBudW1iZXJzIG1heWJlIGhhdmUgYSBzbGljZWx5IGxpdHRsZSBkaWZmZXJlbmNlLCB3aGljaFxuICAgICogd2lsbCBjYXVzZSB0aGlzIGZ1bmN0aW9uIG5ldmVyIHRvIHN0b3AuXG4gICovXG4gIGlmICh+fmN1cnJlbnRQb3NpdGlvbiA9PT0gfn5jb250ZXh0LnBvc2l0aW9uKSB7XG4gICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKGNvbnRleHQuZnJhbWUpXG4gICAgcmV0dXJuXG4gIH1cbn1cbi8qKlxuICogcmV0dXJucyByZXN1bHQgb2YgYXBwbHlpbmcgZWFzZSBtYXRoIGZ1bmN0aW9uIHRvIGEgbnVtYmVyXG4gKiBAbWV0aG9kIGVhc2VcbiAqIEBwYXJhbSB7TnVtYmVyfSBrXG4gKiBAcmV0dXJucyB7TnVtYmVyfVxuICovXG5mdW5jdGlvbiBlYXNlIChrKSB7XG4gIHJldHVybiAwLjUgKiAoMSAtIE1hdGguY29zKE1hdGguUEkgKiBrKSlcbn1cbmNvbnN0IGRvbSA9IHtcbiAgLyoqXG4gICAqIHNjcm9sbFRvRWxlbWVudFxuICAgKiBAcGFyYW0gIHtWbm9kZSB8IFZDb21wb25lbnR9IHZub2RlXG4gICAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9ucyB7b2Zmc2V0Ok51bWJlcn1cbiAgICogICBwczogc2Nyb2xsLXRvIGhhcyAnZWFzZScgYW5kICdkdXJhdGlvbicobXMpIGFzIG9wdGlvbnMuXG4gICAqL1xuICBzY3JvbGxUb0VsZW1lbnQ6IGZ1bmN0aW9uICh2bm9kZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IHtcbiAgICAgIGlzQXJyYXksXG4gICAgICBnZXRQYXJlbnRTY3JvbGxlckVsZW1lbnRcbiAgICB9ID0gdXRpbHNcbiAgICBpZiAoaXNBcnJheSh2bm9kZSkpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50Jykge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1t2dWUtcmVuZGVyXSB0aGUgcmVmIHBhc3NlZCB0byBhbmltYXRpb24udHJhbnNpdGlvbk9uY2UgaXMgYSBhcnJheS4nKVxuICAgICAgfVxuICAgICAgdm5vZGUgPSB2bm9kZVswXVxuICAgIH1cbiAgICBjb25zdCBpc0VsZW1lbnQgPSB2bm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50XG4gICAgY29uc3QgZWwgPSBpc0VsZW1lbnQgPyB2bm9kZSA6ICh2bm9kZS4kZWwgfHwgdm5vZGUuZWxtKVxuICAgIGNvbnN0IGN0ID0gZ2V0UGFyZW50U2Nyb2xsZXJFbGVtZW50KHZub2RlKVxuICAgIGNvbnN0IHNjcm9sbGVyID0gY3QuX192dWVfX1xuICAgIGNvbnN0IGlzV2luZG93ID0gY3QgPT09IGRvY3VtZW50LmJvZHlcbiAgICBjb25zdCBzY3JvbGxEaXJlY3Rpb24gPVxuICAgICAgaXNXaW5kb3cgPyAndmVydGljYWwnXG4gICAgICAgIDogKHNjcm9sbGVyICYmIHNjcm9sbGVyLnNjcm9sbERpcmVjdGlvbiB8fCAndmVydGljYWwnKVxuICAgIGlmIChjdCAmJiBlbCkge1xuICAgICAgY29uc3QgZFN1ZmZpeCA9ICh7XG4gICAgICAgIGhvcml6b250YWw6ICdMZWZ0JyxcbiAgICAgICAgdmVydGljYWw6ICdUb3AnXG4gICAgICB9KVtzY3JvbGxEaXJlY3Rpb25dXG4gICAgICBjb25zdCBjdFJlY3QgPSBjdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgbGV0IGVsUmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICAvKipcbiAgICAgICAgKiBpZiBpdCdzIGEgd2F0ZXJmYWxsLCBhbmQgeW91IHdhbnQgdG8gc2Nyb2xsIHRvIGEgaGVhZGVyLCB0aGVuIGp1c3RcbiAgICAgICAgKiBzY3JvbGwgdG8gdGhlIHRvcC5cbiAgICAgICovXG4gICAgICBpZiAoXG4gICAgICAgICFpc0VsZW1lbnRcbiAgICAgICAgJiYgc2Nyb2xsZXJcbiAgICAgICAgJiYgc2Nyb2xsZXIud2VleFR5cGUgPT09ICd3YXRlcmZhbGwnXG4gICAgICAgICYmIHNjcm9sbGVyLl9oZWFkZXJzXG4gICAgICAgICYmIHNjcm9sbGVyLl9oZWFkZXJzLmluZGV4T2Yodm5vZGUuJHZub2RlIHx8IHZub2RlKSA+IC0xKSB7XG4gICAgICAgIC8vIGl0J3MgaW4gd2F0ZXJmYWxsLiBqdXN0IHNjcm9sbCB0byB0aGUgdG9wLlxuICAgICAgICBlbFJlY3QgPSBjdC5maXJzdEVsZW1lbnRDaGlsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgfVxuICAgICAgY29uc3QgZGlyID0gZFN1ZmZpeC50b0xvd2VyQ2FzZSgpXG4gICAgICBsZXQgb2Zmc2V0ID0gKGlzV2luZG93ID8gMCA6IGN0W2BzY3JvbGwke2RTdWZmaXh9YF0pICsgZWxSZWN0W2Rpcl0gLSBjdFJlY3RbZGlyXVxuICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgb2Zmc2V0ICs9IG9wdGlvbnMub2Zmc2V0ICYmIG9wdGlvbnMub2Zmc2V0ICogd2VleC5jb25maWcuZW52LnNjYWxlIHx8IDBcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW1Z1ZSBSZW5kZXJdIFRoZSBzZWNvbmQgcGFyYW1ldGVyIG9mIFwic2Nyb2xsVG9FbGVtZW50XCIgaXMgcmVxdWlyZWQsICdcbiAgICAgICAgKyAnb3RoZXJ3aXNlIGl0IG1heSBub3Qgd29ya3Mgd2VsbCBvbiBuYXRpdmUuJylcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuYW5pbWF0ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBzY3JvbGxFbGVtZW50LmNhbGwoY3QsIGRTdWZmaXgsIG9mZnNldClcbiAgICAgIH1cbiAgICAgIHN0ZXAoe1xuICAgICAgICBzY3JvbGxhYmxlOiBjdCxcbiAgICAgICAgc3RhcnRUaW1lOiBub3coKSxcbiAgICAgICAgZnJhbWU6IG51bGwsXG4gICAgICAgIHN0YXJ0UG9zaXRpb246IGlzV2luZG93ID8gd2luZG93LnBhZ2VZT2Zmc2V0IDogY3RbYHNjcm9sbCR7ZFN1ZmZpeH1gXSxcbiAgICAgICAgcG9zaXRpb246IG9mZnNldCxcbiAgICAgICAgbWV0aG9kOiBzY3JvbGxFbGVtZW50LFxuICAgICAgICBkU3VmZml4OiBkU3VmZml4XG4gICAgICB9KVxuICAgIH1cbiAgfSxcbiAgLyoqXG4gICAqIGdldENvbXBvbmVudFJlY3RcbiAgICogQHBhcmFtIHtTdHJpbmd9IHZub2RlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAqL1xuICBnZXRDb21wb25lbnRSZWN0OiBmdW5jdGlvbiAodm5vZGUsIGNhbGxiYWNrKSB7XG4gICAgY29uc3Qge1xuICAgICAgaXNBcnJheVxuICAgIH0gPSB1dGlsc1xuICAgIGlmIChpc0FycmF5KHZub2RlKSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW3Z1ZS1yZW5kZXJdIHRoZSByZWYgcGFzc2VkIHRvIGFuaW1hdGlvbi50cmFuc2l0aW9uT25jZSBpcyBhIGFycmF5LicpXG4gICAgICB9XG4gICAgICB2bm9kZSA9IHZub2RlWzBdXG4gICAgfVxuICAgIGNvbnN0IHNjYWxlID0gd2luZG93LndlZXguY29uZmlnLmVudi5zY2FsZVxuICAgIGNvbnN0IGluZm8gPSB7XG4gICAgICByZXN1bHQ6IGZhbHNlXG4gICAgfVxuICAgIGNvbnN0IHJlY3RLZXlzID0gWyd3aWR0aCcsICdoZWlnaHQnLCAndG9wJywgJ2JvdHRvbScsICdsZWZ0JywgJ3JpZ2h0J11cblxuICAgIGZ1bmN0aW9uIHJlY2FsYyAocmVjdCkge1xuICAgICAgY29uc3QgcmVzID0ge31cbiAgICAgIHJlY3RLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgaWYgKHJlY3Rba2V5XSkge1xuICAgICAgICAgIHJlc1trZXldID0gcmVjdFtrZXldIC8gc2NhbGVcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIHJldHVybiByZXNcbiAgICB9XG4gICAgaWYgKHZub2RlICYmIHZub2RlID09PSAndmlld3BvcnQnKSB7XG4gICAgICBpbmZvLnJlc3VsdCA9IHRydWVcbiAgICAgIGluZm8uc2l6ZSA9IHJlY2FsYyh7XG4gICAgICAgIHdpZHRoOiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsXG4gICAgICAgIGhlaWdodDogZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCxcbiAgICAgICAgdG9wOiAwLFxuICAgICAgICBsZWZ0OiAwLFxuICAgICAgICByaWdodDogZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLFxuICAgICAgICBib3R0b206IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHRcbiAgICAgIH0pXG4gICAgfVxuICAgIGVsc2UgaWYgKHZub2RlKSB7XG4gICAgICBjb25zdCBlbCA9IHZub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnRcbiAgICAgICAgPyB2bm9kZVxuICAgICAgICA6IHZub2RlLiRlbFxuICAgICAgaWYgKGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCkge1xuICAgICAgICBpbmZvLnJlc3VsdCA9IHRydWVcbiAgICAgICAgaW5mby5zaXplID0gcmVjYWxjKGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGluZm8ucmVzdWx0ID0gZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgbWVzc2FnZSA9IGluZm8ucmVzdWx0ID8gaW5mbyA6IHtcbiAgICAgIHJlc3VsdDogZmFsc2UsXG4gICAgICBlcnJNc2c6ICdJbGxlZ2FsIHBhcmFtZXRlcidcbiAgICB9XG4gICAgY2FsbGJhY2sgJiYgY2FsbGJhY2sobWVzc2FnZSlcbiAgICByZXR1cm4gbWVzc2FnZVxuICB9LFxuICAvKipcbiAgICogZ2V0TGF5b3V0RGlyZWN0aW9uXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB2bm9kZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICAgKi9cbiAgZ2V0TGF5b3V0RGlyZWN0aW9uOiBmdW5jdGlvbiAodm5vZGUsIGNhbGxiYWNrKSB7XG4gICAgY29uc3QgeyBpc0FycmF5IH0gPSB1dGlsc1xuICAgIGlmIChpc0FycmF5KHZub2RlKSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnW3Z1ZS1yZW5kZXJdIHRoZSByZWYgcGFzc2VkIHRvIGFuaW1hdGlvbi50cmFuc2l0aW9uT25jZSBpcyBhIGFycmF5LidcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgdm5vZGUgPSB2bm9kZVswXVxuICAgIH1cbiAgICBsZXQgZGlyZWN0aW9uID0gJ2x0cidcbiAgICBpZiAodm5vZGUgJiYgdm5vZGUgPT09ICd2aWV3cG9ydCcpIHtcbiAgICAgIGRpcmVjdGlvbiA9IGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVsnZGlyZWN0aW9uJ11cbiAgICB9XG4gICAgZWxzZSBpZiAodm5vZGUpIHtcbiAgICAgIGNvbnN0IGVsID0gdm5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA/IHZub2RlIDogdm5vZGUuJGVsXG4gICAgICBkaXJlY3Rpb24gPSBnZXRDb21wdXRlZFN0eWxlKGVsKVsnZGlyZWN0aW9uJ11cbiAgICB9XG4gICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soZGlyZWN0aW9uKVxuICAgIHJldHVybiBkaXJlY3Rpb25cbiAgfSxcbiAgLyoqXG4gICAqIGZvciBhZGRpbmcgZm9udEZhY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBmb250RmFjZVxuICAgKiBAcGFyYW0ge29iamVjdH0gc3R5bGVzIHJ1bGVzXG4gICAqL1xuICBhZGRSdWxlOiBmdW5jdGlvbiAoa2V5LCBzdHlsZXMpIHtcbiAgICBjb25zdCB7XG4gICAgICBjYW1lbFRvS2ViYWIsXG4gICAgICBhcHBlbmRDc3NcbiAgICB9ID0gdXRpbHNcbiAgICBrZXkgPSBjYW1lbFRvS2ViYWIoa2V5KVxuICAgIGxldCBzdHlsZXNUZXh0ID0gJydcbiAgICBmb3IgKGNvbnN0IGsgaW4gc3R5bGVzKSB7XG4gICAgICBpZiAoc3R5bGVzLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgIHN0eWxlc1RleHQgKz0gY2FtZWxUb0tlYmFiKGspICsgJzonICsgc3R5bGVzW2tdICsgJzsnXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHN0eWxlVGV4dCA9IGBAJHtrZXl9eyR7c3R5bGVzVGV4dH19YFxuICAgIGFwcGVuZENzcyhzdHlsZVRleHQsICdkb20tYWRkZWQtcnVsZXMnKVxuICB9XG59XG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQgKHdlZXgpIHtcbiAgICBjb25zdCBleHRlbmRLZXlzID0gd2VleC51dGlscy5leHRlbmRLZXlzXG4gICAgZXh0ZW5kS2V5cyh1dGlscywgd2VleC51dGlscywgWydjYW1lbFRvS2ViYWInLCAnYXBwZW5kQ3NzJywgJ2lzQXJyYXknLCAnZ2V0UGFyZW50U2Nyb2xsZXJFbGVtZW50J10pXG4gICAgd2VleC5yZWdpc3Rlck1vZHVsZSgnZG9tJywgZG9tKVxuICB9XG59XG4iLCIvKlxuICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlXG4gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvblxuICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZVxuICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZVxuICogXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcbiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZVxuICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9uc1xuICogdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qKlxuICogZ2xvYmFsRXZlbnQgQVBJOlxuICogQGRvYyBodHRwOi8vd2VleC5hcGFjaGUub3JnL2NuL3JlZmVyZW5jZXMvbW9kdWxlcy9nbG9iYWxldmVudC5odG1sXG4gKi9cbi8vIHRyYWNrIHZhcmllcyBraW5kcyBvZiBldmVudHMgYW5kIGxpc3RlbmVycy5cbmNvbnN0IGhhbmRsZXJUcmFrZXIgPSB7fVxuXG5jb25zdCBnbG9iYWxFdmVudCA9IHtcbiAgLyoqXG4gICAqIGFkZEV2ZW50TGlzdGVuZXJcbiAgICogTk9URTogb25lIGNhbGxiYWNrIGNhbiBvbmx5IGJlIGJvdW5kIHRvIHRoZSBzYW1lIGV2ZW50IG9uY2UuIEJpbmQgYSBjYWxsYmFjayB0d2ljZSBkb2Vzbid0XG4gICAqICBtZWFuIGl0IHdpbGwgYmUgY2FsbGVkIHR3aWNlIHdoZW4gdGhlIGV2ZW50IGZpcmVkIG9uY2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldnQgLSB0aGUgZXZlbnQgbmFtZSB0byBhZGQgYSBsaXN0ZW5lciBvbi5cbiAgICovXG4gIGFkZEV2ZW50TGlzdGVuZXIgKGV2dCwgY2FsbGJhY2spIHtcbiAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgW3Z1ZS1yZW5kZXJdIG1pc3NpbmcgY2FsbGJhY2sgYXJnIGluIGdsb2JhbEV2ZW50LmFkZEV2ZW50TGlzdGVuZXIuYClcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBsZXQgaGFuZGxlcnMgPSBoYW5kbGVyVHJha2VyW2V2dF1cbiAgICBpZiAoIWhhbmRsZXJzKSB7XG4gICAgICBoYW5kbGVycyA9IGhhbmRsZXJUcmFrZXJbZXZ0XSA9IFtdXG4gICAgfVxuICAgIGNvbnN0IGxlbiA9IGhhbmRsZXJzLmxlbmd0aFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmIChoYW5kbGVyc1tpXSA9PT0gY2FsbGJhY2spIHtcbiAgICAgICAgLy8gdGhpcyBjYWxsYmFjayBpcyBhbHJlYWR5IGJvdW5kLiBubyBuZWVkIHRvIGJpbmQgaXQgYWdhaW4uXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgICBoYW5kbGVycy5wdXNoKGNhbGxiYWNrKVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZ0LCBjYWxsYmFjaylcbiAgfSxcblxuICAvKipcbiAgICogcmVtb3ZlRXZlbnRMaXN0ZW5lclxuICAgKiBOT1RFOiByZW1vdmUgYWxsIHRoZSBldmVudCBoYW5kbGVycyBmb3IgdGhlIHNwZWNpZmllZCBldmVudCB0eXBlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZ0IC0gdGhlIGV2ZW50IG5hbWUgdG8gcmVtb3ZlIGEgbGlzdGVuZXIgZnJvbS5cbiAgICovXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXIgKGV2dCkge1xuICAgIGNvbnN0IGhhbmRsZXJzID0gaGFuZGxlclRyYWtlcltldnRdXG4gICAgaWYgKCFoYW5kbGVycykge1xuICAgICAgLy8gZXZ0IGhhbmRsZXJzIGhhcyBiZWVuIGFscmVhZHkgcmVtb3ZlZC5cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBoYW5kbGVycy5mb3JFYWNoKGNiID0+IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZ0LCBjYikpXG4gICAgZGVsZXRlIGhhbmRsZXJUcmFrZXJbZXZ0XVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdCAod2VleCkge1xuICAgIHdlZXgucmVnaXN0ZXJNb2R1bGUoJ2dsb2JhbEV2ZW50JywgZ2xvYmFsRXZlbnQpXG4gIH1cbn1cbiIsIi8qXG4gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGVcbiAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uXG4gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlXG4gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlXG4gKiBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxuICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlXG4gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zXG4gKiB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuY29uc3QgcXVldWUgPSBbXVxubGV0IGlzUHJvY2Vzc2luZyA9IGZhbHNlXG5sZXQgdG9hc3RXaW5cbmNvbnN0IFRPQVNUX1dJTl9DTEFTU19OQU1FID0gJ3dlZXgtdG9hc3QnXG5jb25zdCBUT0FTVF9UUkFOU0lUSU9OX0RVUkFUSU9OID0gMC40XG5cbmNvbnN0IERFRkFVTFRfRFVSQVRJT04gPSAwLjhcblxuZnVuY3Rpb24gc2hvd1RvYXN0V2luZG93IChtc2csIGNhbGxiYWNrKSB7XG4gIGlmICghdG9hc3RXaW4pIHtcbiAgICB0b2FzdFdpbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgdG9hc3RXaW4uY2xhc3NMaXN0LmFkZChUT0FTVF9XSU5fQ0xBU1NfTkFNRSlcbiAgICB0b2FzdFdpbi5jbGFzc0xpc3QuYWRkKCdoaWRlJylcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRvYXN0V2luKVxuICB9XG4gIHRvYXN0V2luLnRleHRDb250ZW50ID0gbXNnXG4gIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgIHRvYXN0V2luLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGUnKVxuICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKClcbiAgfSwgMTYpXG59XG5cbmZ1bmN0aW9uIGhpZGVUb2FzdFdpbmRvdyAoY2FsbGJhY2spIHtcbiAgaWYgKCF0b2FzdFdpbikge1xuICAgIHJldHVyblxuICB9XG4gIHRvYXN0V2luLmNsYXNzTGlzdC5hZGQoJ2hpZGUnKVxuICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpXG4gIH0sIFRPQVNUX1RSQU5TSVRJT05fRFVSQVRJT04gKiAxMDAwKVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHB1c2g6IGZ1bmN0aW9uIChtc2csIGR1cmF0aW9uKSB7XG4gICAgcXVldWUucHVzaCh7XG4gICAgICBtc2c6IG1zZyxcbiAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbiB8fCBERUZBVUxUX0RVUkFUSU9OXG4gICAgfSlcbiAgICB0aGlzLnNob3coKVxuICB9LFxuXG4gIHNob3c6IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0aGF0ID0gdGhpc1xuXG4gICAgLy8gQWxsIG1lc3NhZ2VzIGhhZCBiZWVuIHRvYXN0ZWQgYWxyZWFkeSwgc28gcmVtb3ZlIHRoZSB0b2FzdCB3aW5kb3csXG4gICAgaWYgKCFxdWV1ZS5sZW5ndGgpIHtcbiAgICAgIHRvYXN0V2luICYmIHRvYXN0V2luLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodG9hc3RXaW4pXG4gICAgICB0b2FzdFdpbiA9IG51bGxcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIHRoZSBwcmV2aW91cyB0b2FzdCBpcyBub3QgZW5kZWQgeWV0LlxuICAgIGlmIChpc1Byb2Nlc3NpbmcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpc1Byb2Nlc3NpbmcgPSB0cnVlXG5cbiAgICBjb25zdCB0b2FzdEluZm8gPSBxdWV1ZS5zaGlmdCgpXG4gICAgc2hvd1RvYXN0V2luZG93KHRvYXN0SW5mby5tc2csIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBoaWRlVG9hc3RXaW5kb3coZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlzUHJvY2Vzc2luZyA9IGZhbHNlXG4gICAgICAgICAgdGhhdC5zaG93KClcbiAgICAgICAgfSlcbiAgICAgIH0sIHRvYXN0SW5mby5kdXJhdGlvbiAqIDEwMDApXG4gICAgfSlcbiAgfVxufVxuIiwiLypcbiAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZVxuICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb25cbiAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGVcbiAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGVcbiAqIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXG4gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGVcbiAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnNcbiAqIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8vIHRoZXJlIHdpbGwgYmUgb25seSBvbmUgaW5zdGFuY2Ugb2YgbW9kYWwuXG5jb25zdCBNT0RBTF9XUkFQX0NMQVNTID0gJ3dlZXgtbW9kYWwtd3JhcCdcbmNvbnN0IE1PREFMX05PREVfQ0xBU1MgPSAnd2VleC1tb2RhbC1ub2RlJ1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNb2RhbCAoKSB7XG4gIHRoaXMud3JhcCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoTU9EQUxfV1JBUF9DTEFTUylcbiAgdGhpcy5ub2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihNT0RBTF9OT0RFX0NMQVNTKVxuICBpZiAoIXRoaXMud3JhcCkge1xuICAgIHRoaXMuY3JlYXRlV3JhcCgpXG4gIH1cbiAgaWYgKCF0aGlzLm5vZGUpIHtcbiAgICB0aGlzLmNyZWF0ZU5vZGUoKVxuICB9XG4gIHRoaXMuY2xlYXJOb2RlKClcbiAgdGhpcy5jcmVhdGVOb2RlQ29udGVudCgpXG4gIHRoaXMuYmluZEV2ZW50cygpXG59XG5cbk1vZGFsLnByb3RvdHlwZSA9IHtcblxuICBzaG93OiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy53cmFwLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXG4gICAgdGhpcy5ub2RlLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGUnKVxuICB9LFxuXG4gIGRlc3Ryb3k6IGZ1bmN0aW9uICgpIHtcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMud3JhcClcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMubm9kZSlcbiAgICB0aGlzLndyYXAgPSBudWxsXG4gICAgdGhpcy5ub2RlID0gbnVsbFxuICB9LFxuXG4gIGNyZWF0ZVdyYXA6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLndyYXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIHRoaXMud3JhcC5jbGFzc05hbWUgPSBNT0RBTF9XUkFQX0NMQVNTXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLndyYXApXG4gIH0sXG5cbiAgY3JlYXRlTm9kZTogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMubm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgdGhpcy5ub2RlLmNsYXNzTGlzdC5hZGQoTU9EQUxfTk9ERV9DTEFTUywgJ2hpZGUnKVxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5ub2RlKVxuICB9LFxuXG4gIGNsZWFyTm9kZTogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMubm9kZS5pbm5lckhUTUwgPSAnJ1xuICB9LFxuXG4gIGNyZWF0ZU5vZGVDb250ZW50OiBmdW5jdGlvbiAoKSB7XG5cbiAgICAvLyBkbyBub3RoaW5nLlxuICAgIC8vIGNoaWxkIGNsYXNzZXMgY2FuIG92ZXJyaWRlIHRoaXMgbWV0aG9kLlxuICB9LFxuXG4gIGJpbmRFdmVudHM6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLndyYXAuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfSlcbiAgfVxufVxuIiwiLypcbiAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZVxuICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb25cbiAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGVcbiAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGVcbiAqIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXG4gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGVcbiAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnNcbiAqIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgTW9kYWwgZnJvbSAnLi9tb2RhbCdcblxuY29uc3QgQ09OVEVOVF9DTEFTUyA9ICdjb250ZW50J1xuY29uc3QgTVNHX0NMQVNTID0gJ2NvbnRlbnQtbXNnJ1xuY29uc3QgQlVUVE9OX0dST1VQX0NMQVNTID0gJ2J0bi1ncm91cCdcbmNvbnN0IEJVVFRPTl9DTEFTUyA9ICdidG4nXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEFsZXJ0IChjb25maWcpIHtcbiAgdGhpcy5tc2cgPSBjb25maWcubWVzc2FnZSB8fCAnJ1xuICB0aGlzLmNhbGxiYWNrID0gY29uZmlnLmNhbGxiYWNrXG4gIHRoaXMub2tUaXRsZSA9IGNvbmZpZy5va1RpdGxlIHx8ICdPSydcbiAgTW9kYWwuY2FsbCh0aGlzKVxuICB0aGlzLm5vZGUuY2xhc3NMaXN0LmFkZCgnd2VleC1hbGVydCcpXG59XG5cbkFsZXJ0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTW9kYWwucHJvdG90eXBlKVxuXG5BbGVydC5wcm90b3R5cGUuY3JlYXRlTm9kZUNvbnRlbnQgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICBjb250ZW50LmNsYXNzTGlzdC5hZGQoQ09OVEVOVF9DTEFTUylcbiAgdGhpcy5ub2RlLmFwcGVuZENoaWxkKGNvbnRlbnQpXG5cbiAgY29uc3QgbXNnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgbXNnLmNsYXNzTGlzdC5hZGQoTVNHX0NMQVNTKVxuICBtc2cuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGhpcy5tc2cpKVxuICBjb250ZW50LmFwcGVuZENoaWxkKG1zZylcblxuICBjb25zdCBidXR0b25Hcm91cCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gIGJ1dHRvbkdyb3VwLmNsYXNzTGlzdC5hZGQoQlVUVE9OX0dST1VQX0NMQVNTKVxuICB0aGlzLm5vZGUuYXBwZW5kQ2hpbGQoYnV0dG9uR3JvdXApXG4gIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gIGJ1dHRvbi5jbGFzc0xpc3QuYWRkKEJVVFRPTl9DTEFTUywgJ2FsZXJ0LW9rJylcbiAgYnV0dG9uLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMub2tUaXRsZSkpXG4gIGJ1dHRvbkdyb3VwLmFwcGVuZENoaWxkKGJ1dHRvbilcbn1cblxuQWxlcnQucHJvdG90eXBlLmJpbmRFdmVudHMgPSBmdW5jdGlvbiAoKSB7XG4gIE1vZGFsLnByb3RvdHlwZS5iaW5kRXZlbnRzLmNhbGwodGhpcylcbiAgY29uc3QgYnV0dG9uID0gdGhpcy5ub2RlLnF1ZXJ5U2VsZWN0b3IoJy4nICsgQlVUVE9OX0NMQVNTKVxuICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5kZXN0cm95KClcbiAgICB0aGlzLmNhbGxiYWNrICYmIHRoaXMuY2FsbGJhY2soKVxuICB9LmJpbmQodGhpcykpXG59XG4iLCIvKlxuICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlXG4gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvblxuICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZVxuICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZVxuICogXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcbiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZVxuICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9uc1xuICogdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCBNb2RhbCBmcm9tICcuL21vZGFsJ1xuXG5jb25zdCBDT05URU5UX0NMQVNTID0gJ2NvbnRlbnQnXG5jb25zdCBNU0dfQ0xBU1MgPSAnY29udGVudC1tc2cnXG5jb25zdCBCVVRUT05fR1JPVVBfQ0xBU1MgPSAnYnRuLWdyb3VwJ1xuY29uc3QgQlVUVE9OX0NMQVNTID0gJ2J0bidcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ29uZmlybSAoY29uZmlnKSB7XG4gIHRoaXMubXNnID0gY29uZmlnLm1lc3NhZ2UgfHwgJydcbiAgdGhpcy5jYWxsYmFjayA9IGNvbmZpZy5jYWxsYmFja1xuICB0aGlzLm9rVGl0bGUgPSBjb25maWcub2tUaXRsZSB8fCAnT0snXG4gIHRoaXMuY2FuY2VsVGl0bGUgPSBjb25maWcuY2FuY2VsVGl0bGUgfHwgJ0NhbmNlbCdcbiAgTW9kYWwuY2FsbCh0aGlzKVxuICB0aGlzLm5vZGUuY2xhc3NMaXN0LmFkZCgnd2VleC1jb25maXJtJylcbn1cblxuQ29uZmlybS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE1vZGFsLnByb3RvdHlwZSlcblxuQ29uZmlybS5wcm90b3R5cGUuY3JlYXRlTm9kZUNvbnRlbnQgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICBjb250ZW50LmNsYXNzTGlzdC5hZGQoQ09OVEVOVF9DTEFTUylcbiAgdGhpcy5ub2RlLmFwcGVuZENoaWxkKGNvbnRlbnQpXG5cbiAgY29uc3QgbXNnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgbXNnLmNsYXNzTGlzdC5hZGQoTVNHX0NMQVNTKVxuICBtc2cuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGhpcy5tc2cpKVxuICBjb250ZW50LmFwcGVuZENoaWxkKG1zZylcblxuICBjb25zdCBidXR0b25Hcm91cCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gIGJ1dHRvbkdyb3VwLmNsYXNzTGlzdC5hZGQoQlVUVE9OX0dST1VQX0NMQVNTKVxuICB0aGlzLm5vZGUuYXBwZW5kQ2hpbGQoYnV0dG9uR3JvdXApXG4gIGNvbnN0IGJ0bk9rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgYnRuT2suYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGhpcy5va1RpdGxlKSlcbiAgYnRuT2suY2xhc3NMaXN0LmFkZCgnYnRuLW9rJywgQlVUVE9OX0NMQVNTKVxuICBjb25zdCBidG5DYW5jZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICBidG5DYW5jZWwuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGhpcy5jYW5jZWxUaXRsZSkpXG4gIGJ0bkNhbmNlbC5jbGFzc0xpc3QuYWRkKCdidG4tY2FuY2VsJywgQlVUVE9OX0NMQVNTKVxuICBidXR0b25Hcm91cC5hcHBlbmRDaGlsZChidG5PaylcbiAgYnV0dG9uR3JvdXAuYXBwZW5kQ2hpbGQoYnRuQ2FuY2VsKVxuICB0aGlzLm5vZGUuYXBwZW5kQ2hpbGQoYnV0dG9uR3JvdXApXG59XG5cbkNvbmZpcm0ucHJvdG90eXBlLmJpbmRFdmVudHMgPSBmdW5jdGlvbiAoKSB7XG4gIE1vZGFsLnByb3RvdHlwZS5iaW5kRXZlbnRzLmNhbGwodGhpcylcbiAgY29uc3QgYnRuT2sgPSB0aGlzLm5vZGUucXVlcnlTZWxlY3RvcignLicgKyBCVVRUT05fQ0xBU1MgKyAnLmJ0bi1vaycpXG4gIGNvbnN0IGJ0bkNhbmNlbCA9IHRoaXMubm9kZS5xdWVyeVNlbGVjdG9yKCcuJyArIEJVVFRPTl9DTEFTUyArICcuYnRuLWNhbmNlbCcpXG4gIGJ0bk9rLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZGVzdHJveSgpXG4gICAgdGhpcy5jYWxsYmFjayAmJiB0aGlzLmNhbGxiYWNrKHRoaXMub2tUaXRsZSlcbiAgfS5iaW5kKHRoaXMpKVxuICBidG5DYW5jZWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5kZXN0cm95KClcbiAgICB0aGlzLmNhbGxiYWNrICYmIHRoaXMuY2FsbGJhY2sodGhpcy5jYW5jZWxUaXRsZSlcbiAgfS5iaW5kKHRoaXMpKVxufVxuIiwiLypcbiAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZVxuICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb25cbiAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGVcbiAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGVcbiAqIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXG4gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGVcbiAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnNcbiAqIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgTW9kYWwgZnJvbSAnLi9tb2RhbCdcblxuY29uc3QgQ09OVEVOVF9DTEFTUyA9ICdjb250ZW50J1xuY29uc3QgTVNHX0NMQVNTID0gJ2NvbnRlbnQtbXNnJ1xuY29uc3QgQlVUVE9OX0dST1VQX0NMQVNTID0gJ2J0bi1ncm91cCdcbmNvbnN0IEJVVFRPTl9DTEFTUyA9ICdidG4nXG5jb25zdCBJTlBVVF9XUkFQX0NMQVNTID0gJ2lucHV0LXdyYXAnXG5jb25zdCBJTlBVVF9DTEFTUyA9ICdpbnB1dCdcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUHJvbXB0IChjb25maWcpIHtcbiAgdGhpcy5tc2cgPSBjb25maWcubWVzc2FnZSB8fCAnJ1xuICB0aGlzLmRlZmF1bHRNc2cgPSBjb25maWcuZGVmYXVsdCB8fCAnJ1xuICB0aGlzLmNhbGxiYWNrID0gY29uZmlnLmNhbGxiYWNrXG4gIHRoaXMub2tUaXRsZSA9IGNvbmZpZy5va1RpdGxlIHx8ICdPSydcbiAgdGhpcy5jYW5jZWxUaXRsZSA9IGNvbmZpZy5jYW5jZWxUaXRsZSB8fCAnQ2FuY2VsJ1xuICBNb2RhbC5jYWxsKHRoaXMpXG4gIHRoaXMubm9kZS5jbGFzc0xpc3QuYWRkKCd3ZWV4LXByb21wdCcpXG59XG5cblByb21wdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE1vZGFsLnByb3RvdHlwZSlcblxuUHJvbXB0LnByb3RvdHlwZS5jcmVhdGVOb2RlQ29udGVudCA9IGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgY29udGVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gIGNvbnRlbnQuY2xhc3NMaXN0LmFkZChDT05URU5UX0NMQVNTKVxuICB0aGlzLm5vZGUuYXBwZW5kQ2hpbGQoY29udGVudClcblxuICBjb25zdCBtc2cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICBtc2cuY2xhc3NMaXN0LmFkZChNU0dfQ0xBU1MpXG4gIG1zZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLm1zZykpXG4gIGNvbnRlbnQuYXBwZW5kQ2hpbGQobXNnKVxuXG4gIGNvbnN0IGlucHV0V3JhcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gIGlucHV0V3JhcC5jbGFzc0xpc3QuYWRkKElOUFVUX1dSQVBfQ0xBU1MpXG4gIGNvbnRlbnQuYXBwZW5kQ2hpbGQoaW5wdXRXcmFwKVxuICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JylcbiAgaW5wdXQuY2xhc3NMaXN0LmFkZChJTlBVVF9DTEFTUylcbiAgaW5wdXQudHlwZSA9ICd0ZXh0J1xuICBpbnB1dC5hdXRvZm9jdXMgPSB0cnVlXG4gIGlucHV0LnBsYWNlaG9sZGVyID0gdGhpcy5kZWZhdWx0TXNnXG4gIGlucHV0V3JhcC5hcHBlbmRDaGlsZChpbnB1dClcblxuICBjb25zdCBidXR0b25Hcm91cCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gIGJ1dHRvbkdyb3VwLmNsYXNzTGlzdC5hZGQoQlVUVE9OX0dST1VQX0NMQVNTKVxuICBjb25zdCBidG5PayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gIGJ0bk9rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMub2tUaXRsZSkpXG4gIGJ0bk9rLmNsYXNzTGlzdC5hZGQoJ2J0bi1vaycsIEJVVFRPTl9DTEFTUylcbiAgY29uc3QgYnRuQ2FuY2VsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgYnRuQ2FuY2VsLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMuY2FuY2VsVGl0bGUpKVxuICBidG5DYW5jZWwuY2xhc3NMaXN0LmFkZCgnYnRuLWNhbmNlbCcsIEJVVFRPTl9DTEFTUylcbiAgYnV0dG9uR3JvdXAuYXBwZW5kQ2hpbGQoYnRuT2spXG4gIGJ1dHRvbkdyb3VwLmFwcGVuZENoaWxkKGJ0bkNhbmNlbClcbiAgdGhpcy5ub2RlLmFwcGVuZENoaWxkKGJ1dHRvbkdyb3VwKVxufVxuXG5Qcm9tcHQucHJvdG90eXBlLmJpbmRFdmVudHMgPSBmdW5jdGlvbiAoKSB7XG4gIE1vZGFsLnByb3RvdHlwZS5iaW5kRXZlbnRzLmNhbGwodGhpcylcbiAgY29uc3QgYnRuT2sgPSB0aGlzLm5vZGUucXVlcnlTZWxlY3RvcignLicgKyBCVVRUT05fQ0xBU1MgKyAnLmJ0bi1vaycpXG4gIGNvbnN0IGJ0bkNhbmNlbCA9IHRoaXMubm9kZS5xdWVyeVNlbGVjdG9yKCcuJyArIEJVVFRPTl9DTEFTUyArICcuYnRuLWNhbmNlbCcpXG4gIGNvbnN0IHRoYXQgPSB0aGlzXG4gIGJ0bk9rLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHZhbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykudmFsdWVcbiAgICB0aGlzLmRlc3Ryb3koKVxuICAgIHRoaXMuY2FsbGJhY2sgJiYgdGhpcy5jYWxsYmFjayh7XG4gICAgICByZXN1bHQ6IHRoYXQub2tUaXRsZSxcbiAgICAgIGRhdGE6IHZhbFxuICAgIH0pXG4gIH0uYmluZCh0aGlzKSlcbiAgYnRuQ2FuY2VsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHZhbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykudmFsdWVcbiAgICB0aGlzLmRlc3Ryb3koKVxuICAgIHRoaXMuY2FsbGJhY2sgJiYgdGhpcy5jYWxsYmFjayh7XG4gICAgICByZXN1bHQ6IHRoYXQuY2FuY2VsVGl0bGUsXG4gICAgICBkYXRhOiB2YWxcbiAgICB9KVxuICB9LmJpbmQodGhpcykpXG59XG4iLCIvKlxuICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlXG4gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvblxuICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZVxuICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZVxuICogXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcbiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZVxuICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9uc1xuICogdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGBcbi53ZWV4LXRvYXN0IHtcbiAgZm9udC1zaXplOiAwLjQyNjY2N3JlbTtcbiAgbGluZS1oZWlnaHQ6IDAuNDI2NjY3cmVtO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHotaW5kZXg6IDE5OTk5OTk5OTk7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG1heC13aWR0aDogODAlO1xuICBib3R0b206IDUwJTtcbiAgbGVmdDogNTAlO1xuICBwYWRkaW5nOiAwLjIxMzMzM3JlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDtcbiAgY29sb3I6ICNmZmY7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgb3BhY2l0eTogMC43O1xuICAtd2Via2l0LXRyYW5zaXRpb246IGFsbCAwLjRzIGVhc2UtaW4tb3V0O1xuICAtbW96LXRyYW5zaXRpb246IGFsbCAwLjRzIGVhc2UtaW4tb3V0O1xuICAtbXMtdHJhbnNpdGlvbjogYWxsIDAuNHMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zaXRpb246IGFsbCAwLjRzIGVhc2UtaW4tb3V0O1xuICBib3JkZXItcmFkaXVzOiAwLjA2NjY2N3JlbTtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG59XG5cbi53ZWV4LXRvYXN0LmhpZGUge1xuICBvcGFjaXR5OiAwO1xufVxuXG4ud2VleC1hbGVydCAud2VleC1hbGVydC1vayB7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4ud2VleC1jb25maXJtIC5idG4tZ3JvdXAgLmJ0biB7XG4gIGZsb2F0OiBsZWZ0O1xuICB3aWR0aDogNTAlO1xufVxuXG4ud2VleC1jb25maXJtIC5idG4tZ3JvdXAgLmJ0bi5idG4tb2sge1xuICBib3JkZXItcmlnaHQ6IDAuMDEzMzMzcmVtIHNvbGlkICNkZGQ7XG59XG5cbi53ZWV4LW1vZGFsLXdyYXAge1xuICBkaXNwbGF5OiBub25lO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHotaW5kZXg6IDk5OTk5OTk5OTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwO1xuICBvcGFjaXR5OiAwLjU7XG59XG5cbi53ZWV4LW1vZGFsLW5vZGUge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHotaW5kZXg6IDk5OTk5OTk5OTk7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiA1MCU7XG4gIHdpZHRoOiA2LjY2NjY2N3JlbTtcbiAgbWluLWhlaWdodDogMi42NjY2NjdyZW07XG4gIGJvcmRlci1yYWRpdXM6IDAuMDY2NjY3cmVtO1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuXG4ud2VleC1tb2RhbC1ub2RlLmhpZGUge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4ud2VleC1tb2RhbC1ub2RlIC5jb250ZW50IHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC13ZWJraXQtZmxleDtcbiAgZGlzcGxheTogLW1vei1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIC1tb3otYm94LW9yaWVudDogdmVydGljYWw7XG4gIC1tb3otYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7XG4gIC13ZWJraXQtYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgLW1vei1ib3gtYWxpZ246IGNlbnRlcjtcbiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyO1xuICAtd2Via2l0LWp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAtbW96LWJveC1wYWNrOiBjZW50ZXI7XG4gIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4taGVpZ2h0OiAxLjg2NjY2N3JlbTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgZm9udC1zaXplOiAwLjQyNjY2N3JlbTtcbiAgbGluZS1oZWlnaHQ6IDAuNDI2NjY3cmVtO1xuICBwYWRkaW5nOiAwLjIxMzMzM3JlbTtcbiAgYm9yZGVyLWJvdHRvbTogMC4wMTMzMzNyZW0gc29saWQgI2RkZDtcbn1cblxuLndlZXgtbW9kYWwtbm9kZSAuYnRuLWdyb3VwIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMC44cmVtO1xuICBmb250LXNpemU6IDAuMzczMzMzcmVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgYm9yZGVyOiBub25lO1xufVxuXG4ud2VleC1tb2RhbC1ub2RlIC5idG4tZ3JvdXAgLmJ0biB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLndlZXgtbW9kYWwtbm9kZSAuYnRuLWdyb3VwIC5idG4ge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBoZWlnaHQ6IDAuOHJlbTtcbiAgbGluZS1oZWlnaHQ6IDAuOHJlbTtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBib3JkZXI6IG5vbmU7XG4gIGJhY2tncm91bmQ6IG5vbmU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLndlZXgtcHJvbXB0IC5pbnB1dC13cmFwIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbi10b3A6IDAuMTMzMzMzcmVtO1xuICBoZWlnaHQ6IDAuOTZyZW07XG59XG5cbi53ZWV4LXByb21wdCAuaW5wdXQtd3JhcCAuaW5wdXQge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAwLjU2cmVtO1xuICBsaW5lLWhlaWdodDogMC41NnJlbTtcbiAgZm9udC1zaXplOiAwLjQyNjY2N3JlbTtcbiAgYm9yZGVyOiAwLjAxMzMzM3JlbSBzb2xpZCAjOTk5O1xufVxuXG4ud2VleC1wcm9tcHQgLmJ0bi1ncm91cCAuYnRuIHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIHdpZHRoOiA1MCU7XG59XG5cbi53ZWV4LXByb21wdCAuYnRuLWdyb3VwIC5idG4uYnRuLW9rIHtcbiAgYm9yZGVyLXJpZ2h0OiAwLjAxMzMzM3JlbSBzb2xpZCAjZGRkO1xufVxuYFxuIiwiLypcbiAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZVxuICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb25cbiAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGVcbiAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGVcbiAqIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXG4gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGVcbiAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnNcbiAqIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgdG9hc3QgZnJvbSAnLi90b2FzdCdcbmltcG9ydCBBbGVydCBmcm9tICcuL2FsZXJ0J1xuaW1wb3J0IENvbmZpcm0gZnJvbSAnLi9jb25maXJtJ1xuaW1wb3J0IFByb21wdCBmcm9tICcuL3Byb21wdCdcbmltcG9ydCBfY3NzIGZyb20gJy4vc3R5bGUnXG5cbi8vIFRPRE86IHJld3JpdGUgdGhlIG1vZGFsIHN0eWxlc1xuY29uc3QgbW9kYWwgPSB7XG5cbiAgLy8gZHVyYXRpb246IGRlZmF1bHQgaXMgMC44IHNlY29uZHMuXG4gIHRvYXN0OiBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgdG9hc3QucHVzaChjb25maWcubWVzc2FnZSwgY29uZmlnLmR1cmF0aW9uKVxuICB9LFxuXG4gIC8vIGNvbmZpZzpcbiAgLy8gIC0gbWVzc2FnZTogc3RyaW5nXG4gIC8vICAtIG9rVGl0bGU6IHRpdGxlIG9mIG9rIGJ1dHRvblxuICAvLyAgLSBjYWxsYmFja1xuICBhbGVydDogZnVuY3Rpb24gKGNvbmZpZywgY2FsbGJhY2spIHtcbiAgICBjb25maWcuY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpXG4gICAgfVxuICAgIG5ldyBBbGVydChjb25maWcpLnNob3coKVxuICB9LFxuXG4gIC8vIGNvbmZpZzpcbiAgLy8gIC0gbWVzc2FnZTogc3RyaW5nXG4gIC8vICAtIG9rVGl0bGU6IHRpdGxlIG9mIG9rIGJ1dHRvblxuICAvLyAgLSBjYW5jZWxUaXRsZTogdGl0bGUgb2YgY2FuY2VsIGJ1dHRvblxuICAvLyAgLSBjYWxsYmFja1xuICBjb25maXJtOiBmdW5jdGlvbiAoY29uZmlnLCBjYWxsYmFjaykge1xuICAgIGNvbmZpZy5jYWxsYmFjayA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKHZhbClcbiAgICB9XG4gICAgbmV3IENvbmZpcm0oY29uZmlnKS5zaG93KClcbiAgfSxcblxuICAvLyBjb25maWc6XG4gIC8vICAtIG1lc3NhZ2U6IHN0cmluZ1xuICAvLyAgLSBva1RpdGxlOiB0aXRsZSBvZiBvayBidXR0b25cbiAgLy8gIC0gY2FuY2VsVGl0bGU6IHRpdGxlIG9mIGNhbmNlbCBidXR0b25cbiAgLy8gIC0gY2FsbGJhY2tcbiAgcHJvbXB0OiBmdW5jdGlvbiAoY29uZmlnLCBjYWxsYmFjaykge1xuICAgIGNvbmZpZy5jYWxsYmFjayA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKHZhbClcbiAgICB9XG4gICAgbmV3IFByb21wdChjb25maWcpLnNob3coKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdDogZnVuY3Rpb24gKFdlZXgpIHtcbiAgICBXZWV4LnV0aWxzLmFwcGVuZENzcyhfY3NzLCAnd2VleC1tdWQtbW9kYWwnKVxuICAgIFdlZXgucmVnaXN0ZXJNb2R1bGUoJ21vZGFsJywgbW9kYWwpXG4gIH1cbn1cbiIsIi8qXG4gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGVcbiAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uXG4gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlXG4gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlXG4gKiBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxuICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlXG4gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zXG4gKiB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vKipcbiAqIE5hdmlnYXRvciBtb2R1bGVcbiAqL1xuY29uc3QgbmF2aWdhdG9yTW9kdWxlID0ge1xuICBwdXNoOiBmdW5jdGlvbiAoY29uZmlnLCBjYWxsYmFjaykge1xuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gY29uZmlnLnVybFxuICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKClcbiAgfSxcblxuICBwb3A6IGZ1bmN0aW9uIChjb25maWcsIGNhbGxiYWNrKSB7XG4gICAgd2luZG93Lmhpc3RvcnkuYmFjaygpXG4gICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdCAod2VleCkge1xuICAgIHdlZXgucmVnaXN0ZXJNb2R1bGUoJ25hdmlnYXRvcicsIG5hdmlnYXRvck1vZHVsZSlcbiAgfVxufVxuIiwiLypcbiAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmVcbiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZVxuICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb25cbiAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGVcbiAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGVcbiAqIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXG4gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGVcbiAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnNcbiAqIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8qKlxuICogV2VidmlldyBtb2R1bGVcbiAqL1xubGV0IGlzQXJyYXlcblxuY29uc3Qgd2VidmlldyA9IHtcbiAgZ29CYWNrICh2bm9kZSkge1xuICAgIGlmIChpc0FycmF5KHZub2RlKSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW3Z1ZS1yZW5kZXJdIHRoZSByZWYgcGFzc2VkIHRvIHdlYnZpZXcuZ29CYWNrIGlzIGEgYXJyYXkuJylcbiAgICAgIH1cbiAgICAgIHZub2RlID0gdm5vZGVbMF1cbiAgICB9XG4gICAgaWYgKHZub2RlICYmIHR5cGVvZiB2bm9kZS5nb0JhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZub2RlLmdvQmFjaygpXG4gICAgfVxuICB9LFxuICBnb0ZvcndhcmQgKHZub2RlKSB7XG4gICAgaWYgKGlzQXJyYXkodm5vZGUpKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbdnVlLXJlbmRlcl0gdGhlIHJlZiBwYXNzZWQgdG8gd2Vidmlldy5nb0ZvcndhcmQgaXMgYSBhcnJheS4nKVxuICAgICAgfVxuICAgICAgdm5vZGUgPSB2bm9kZVswXVxuICAgIH1cbiAgICBpZiAodm5vZGUgJiYgdHlwZW9mIHZub2RlLmdvRm9yd2FyZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdm5vZGUuZ29Gb3J3YXJkKClcbiAgICB9XG4gIH0sXG4gIHJlbG9hZCAodm5vZGUpIHtcbiAgICBpZiAoaXNBcnJheSh2bm9kZSkpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50Jykge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1t2dWUtcmVuZGVyXSB0aGUgcmVmIHBhc3NlZCB0byB3ZWJ2aWV3LnJlbG9hZCBpcyBhIGFycmF5LicpXG4gICAgICB9XG4gICAgICB2bm9kZSA9IHZub2RlWzBdXG4gICAgfVxuICAgIGlmICh2bm9kZSAmJiB0eXBlb2Ygdm5vZGUucmVsb2FkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2bm9kZS5yZWxvYWQoKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQgKHdlZXgpIHtcbiAgICBpc0FycmF5ID0gd2VleC51dGlscy5pc0FycmF5XG4gICAgd2VleC5yZWdpc3Rlck1vZHVsZSgnd2VidmlldycsIHdlYnZpZXcpXG4gIH1cbn1cbiIsIi8qXG4gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGVcbiAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uXG4gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlXG4gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlXG4gKiBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxuICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlXG4gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zXG4gKiB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLyoqXG4gKiB3ZWJzb2NrZXQgbW9kdWxlXG4gKi9cbi8qZ2xvYmFsIFdlYlNvY2tldCovXG5leHBvcnQgZGVmYXVsdCAoZnVuY3Rpb24gKCkge1xuICBjb25zdCByZWdpc3Rlckxpc3RlbmVycyA9IFsnb25vcGVuJywgJ29ubWVzc2FnZScsICdvbmVycm9yJywgJ29uY2xvc2UnXVxuICBjb25zdCB3cyA9IHtcbiAgICBJTlNUQU5DRTogbnVsbCxcbiAgICBXZWJTb2NrZXQ6IGZ1bmN0aW9uICh1cmwsIHByb3RvY29sKSB7XG4gICAgICBpZiAoIXVybCkge1xuICAgICAgICB3cy5JTlNUQU5DRSA9IG51bGxcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoIXByb3RvY29sKSB7XG4gICAgICAgIHdzLklOU1RBTkNFID0gbmV3IFdlYlNvY2tldCh1cmwpXG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgd3MuSU5TVEFOQ0UgPSBuZXcgV2ViU29ja2V0KHVybCwgcHJvdG9jb2wpXG4gICAgICB9XG4gICAgICByZXR1cm4gd3MuSU5TVEFOQ0VcbiAgICB9LFxuICAgIHNlbmQ6IGZ1bmN0aW9uIChtZXNzYWdlcykge1xuICAgICAgd3MuSU5TVEFOQ0UgJiYgd3MuSU5TVEFOQ0Uuc2VuZChtZXNzYWdlcylcbiAgICB9LFxuICAgIGNsb3NlOiBmdW5jdGlvbiAoKSB7XG4gICAgICB3cy5JTlNUQU5DRSAmJiB3cy5JTlNUQU5DRS5jbG9zZSgpXG4gICAgfVxuICB9XG4gIGZvciAoY29uc3QgaSBpbiByZWdpc3Rlckxpc3RlbmVycykge1xuICAgIGlmIChyZWdpc3Rlckxpc3RlbmVycy5oYXNPd25Qcm9wZXJ0eShpKSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdzLCByZWdpc3Rlckxpc3RlbmVyc1tpXSwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gd3MuSU5TVEFOQ0UgJiYgd3MuSU5TVEFOQ0VbcmVnaXN0ZXJMaXN0ZW5lcnNbaV1dXG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgaWYgKHdzLklOU1RBTkNFKSB7XG4gICAgICAgICAgICB3cy5JTlNUQU5DRVtyZWdpc3Rlckxpc3RlbmVyc1tpXV0gPSBmblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHdzXG59KSgpXG4iLCIvKlxuICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlXG4gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvblxuICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZVxuICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZVxuICogXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcbiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZVxuICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9uc1xuICogdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB3ZWJzb2NrZXQgZnJvbSAnLi93ZWJzb2NrZXQnXG5cbi8vIFRPRE86IHJld3JpdGUgdGhlIG1vZHVsZSBtZXRhXG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQ6IGZ1bmN0aW9uIChXZWV4KSB7XG4gICAgV2VleC5yZWdpc3Rlck1vZHVsZSgnd2ViU29ja2V0Jywgd2Vic29ja2V0LCB7IHJlZ2lzdGVyVHlwZTogJ2Fzc2lnbm1lbnQnIH0pXG4gIH1cbn1cbiIsIi8qXG4gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGVcbiAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uXG4gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlXG4gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlXG4gKiBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxuICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlXG4gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zXG4gKiB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyByZXNldFZpZXdwb3J0IH0gZnJvbSAnLi4vd2VleC92aWV3cG9ydCdcblxuY29uc3QgbWV0YSA9IHtcbiAgLyoqXG4gICAqIHNldFZpZXdwb3J0LlxuICAgKiBDaGFuZ2luZyB2aWV3cG9ydCBkZXNpZ24gd2lkdGggYXQgcnVudGltZS5cbiAgICovXG4gIHNldFZpZXdwb3J0IChvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBbdnVlLXJlbmRlcl0gc2V0IHZpZXdwb3J0IHdpZHRoIGludmFsaWQgb3B0aW9uczogJHtvcHRpb25zfWApXG4gICAgfVxuICAgIGNvbnN0IG5ld1dpZHRoID0gcGFyc2VJbnQob3B0aW9ucy53aWR0aClcbiAgICBpZiAoIWlzTmFOKG5ld1dpZHRoKSAmJiBuZXdXaWR0aCA+IDApIHtcbiAgICAgIHJlc2V0Vmlld3BvcnQob3B0aW9ucy53aWR0aClcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBbdnVlLXJlbmRlcl0gc2V0IHZpZXdwb3J0IHdpZHRoIGludmFsaWQgb3B0aW9ucy53aWR0aDogJHtvcHRpb25zLndpZHRofWApXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdCAod2VleCkge1xuICAgIHdlZXgucmVnaXN0ZXJNb2R1bGUoJ21ldGEnLCBtZXRhKVxuICB9XG59XG4iLCIvKlxuICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlXG4gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvblxuICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZVxuICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZVxuICogXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcbiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZVxuICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9uc1xuICogdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLy8gbW9kdWxlcyBmcm9tIHJlbmRlci9icm93ZXNyIChsZWdhY3kgbW9kdWxlcylcblxuaW1wb3J0IGdlb2xvY2F0aW9uIGZyb20gJy4vZ2VvbG9jYXRpb24nXG5pbXBvcnQgc3RvcmFnZSBmcm9tICcuL3N0b3JhZ2UnXG5pbXBvcnQgc3RyZWFtIGZyb20gJy4vc3RyZWFtJ1xuaW1wb3J0IGNsaXBib2FyZCBmcm9tICcuL2NsaXBib2FyZCdcbmltcG9ydCBldmVudE1vZHVsZSBmcm9tICcuL2V2ZW50J1xuXG4vLyBjdXN0b20gbW9kdWxlc1xuaW1wb3J0IGFuaW1hdGlvbiBmcm9tICcuL2FuaW1hdGlvbidcbmltcG9ydCBkb20gZnJvbSAnLi9kb20nXG5pbXBvcnQgZ2xvYmFsRXZlbnQgZnJvbSAnLi9nbG9iYWxFdmVudCdcbmltcG9ydCBtb2RhbCBmcm9tICcuL21vZGFsJ1xuaW1wb3J0IG5hdmlnYXRvck1vZHVsZSBmcm9tICcuL25hdmlnYXRvcidcbmltcG9ydCB3ZWJ2aWV3IGZyb20gJy4vd2VidmlldydcbmltcG9ydCB3ZWJzb2NrZXQgZnJvbSAnLi93ZWJzb2NrZXQnXG5pbXBvcnQgbWV0YSBmcm9tICcuL21ldGEnXG5cbmV4cG9ydCBkZWZhdWx0IFtcbiAgZ2VvbG9jYXRpb24sXG4gIHN0b3JhZ2UsXG4gIHN0cmVhbSxcbiAgY2xpcGJvYXJkLFxuICBldmVudE1vZHVsZSxcbiAgbW9kYWwsXG4gIHdlYnNvY2tldCxcbiAgYW5pbWF0aW9uLFxuICBkb20sXG4gIGdsb2JhbEV2ZW50LFxuICBuYXZpZ2F0b3JNb2R1bGUsXG4gIHdlYnZpZXcsXG4gIG1ldGFcbl1cbiIsIi8qXG4gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lXG4gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGVcbiAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uXG4gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlXG4gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlXG4gKiBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxuICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlXG4gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zXG4gKiB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuY29uc3QgdmFsTWFwID0ge1xuICBjb250YWluOiAnY29udGFpbicsXG4gIGNvdmVyOiAnY292ZXInLFxuICBzdHJldGNoOiAnMTAwJSAxMDAlJ1xufVxuY29uc3QgdmFscyA9IE9iamVjdC5rZXlzKHZhbE1hcClcbmNvbnN0IGRlZmF1bHRWYWwgPSAnc3RyZXRjaCdcblxuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0ICh3ZWV4KSB7XG4gICAgd2VleC5fX3Z1ZV9fLmRpcmVjdGl2ZSgnd2VleC1yZXNpemUnLCBmdW5jdGlvbiAoZWwsIGJpbmRpbmcpIHtcbiAgICAgIGlmIChlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICdmaWd1cmUnKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgbGV0IHZhbHVlID0gYmluZGluZy52YWx1ZVxuICAgICAgY29uc3Qgb2xkVmFsdWUgPSBiaW5kaW5nLm9sZHZhbHVlXG4gICAgICBpZiAodmFsdWUgPT09IG9sZFZhbHVlKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKHZhbHMuaW5kZXhPZih2YWx1ZSkgPD0gLTEpIHtcbiAgICAgICAgdmFsdWUgPSBkZWZhdWx0VmFsXG4gICAgICB9XG4gICAgICBlbC5zdHlsZS5iYWNrZ3JvdW5kU2l6ZSA9IHZhbE1hcFt2YWx1ZV1cbiAgICB9KVxuICB9XG59XG4iLCIvKlxuICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZVxuICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlXG4gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvblxuICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZVxuICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZVxuICogXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcbiAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZVxuICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9uc1xuICogdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCByZXNpemUgZnJvbSAnLi9yZXNpemUnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcmVzaXplXG59XG4iLCJpbXBvcnQgd2VleCBmcm9tICcuLi8uLi8uLi9zcmMnXG5cbmltcG9ydCBjb21wb25lbnRzIGZyb20gJy4uLy4uLy4uL3NyYy9jb21wb25lbnRzJ1xuaW1wb3J0IG1vZHVsZXMgZnJvbSAnLi4vLi4vLi4vc3JjL21vZHVsZXMnXG5pbXBvcnQgZGlyZWN0aXZlcyBmcm9tICcuLi8uLi8uLi9zcmMvZGlyZWN0aXZlcydcblxuY29uc3QgcHJlSW5pdCA9IHdlZXguaW5pdFxuXG53ZWV4LmluaXQgPSBmdW5jdGlvbiAoKSB7XG4gIHByZUluaXQuYXBwbHkod2VleCwgYXJndW1lbnRzKVxuICBjb25zdCBwbHVnaW5zID0gY29tcG9uZW50cy5jb25jYXQobW9kdWxlcylcblxuICBwbHVnaW5zLmZvckVhY2goZnVuY3Rpb24gKHBsdWdpbikge1xuICAgIHdlZXguaW5zdGFsbChwbHVnaW4pXG4gIH0pXG5cbiAgZm9yIChjb25zdCBrIGluIGRpcmVjdGl2ZXMpIHtcbiAgICB3ZWV4Lmluc3RhbGwoZGlyZWN0aXZlc1trXSlcbiAgfVxufVxuXG5pZiAoZ2xvYmFsLlZ1ZSkge1xuICB3ZWV4LmluaXQoZ2xvYmFsLlZ1ZSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2VleFxuIl0sIm5hbWVzIjpbImRlZmluZWQiLCJ0b0ludGVnZXIiLCJpc09iamVjdCIsInJlcXVpcmUkJDAiLCJkb2N1bWVudCIsInJlcXVpcmUkJDEiLCJyZXF1aXJlJCQyIiwiYW5PYmplY3QiLCJ0b1ByaW1pdGl2ZSIsIklFOF9ET01fREVGSU5FIiwiZFAiLCJjcmVhdGVEZXNjIiwiaGFzIiwiaGlkZSIsImdsb2JhbCIsImFGdW5jdGlvbiIsImNvcmUiLCJjdHgiLCJyZWRlZmluZSIsImNvZiIsIklPYmplY3QiLCJtaW4iLCJ0b0lPYmplY3QiLCJ0b0xlbmd0aCIsInRvQWJzb2x1dGVJbmRleCIsInVpZCIsIklFX1BST1RPIiwiJGtleXMiLCJlbnVtQnVnS2V5cyIsImdldEtleXMiLCJQUk9UT1RZUEUiLCJkUHMiLCJjcmVhdGUiLCJkZXNjcmlwdG9yIiwic2V0VG9TdHJpbmdUYWciLCJ0b09iamVjdCIsIiRpdGVyQ3JlYXRlIiwiZ2V0UHJvdG90eXBlT2YiLCJMSUJSQVJZIiwiSXRlcmF0b3JzIiwiJGV4cG9ydCIsIklURVJBVE9SIiwiJGRlZmluZVByb3BlcnR5IiwiVEFHIiwiY2xhc3NvZiIsImdldEl0ZXJGbiIsImlzQXJyYXlJdGVyIiwiY3JlYXRlUHJvcGVydHkiLCJjYWxsIiwiZ09QUyIsInBJRSIsImFyZ3VtZW50cyIsIkFycmF5UHJvdG8iLCJzdGVwIiwiYWRkVG9VbnNjb3BhYmxlcyIsIndrcyIsIiRpdGVyYXRvcnMiLCJwcm9jZXNzIiwiaW52b2tlIiwiY2VsIiwiaHRtbCIsImlzTm9kZSIsIm5ld1Byb21pc2VDYXBhYmlsaXR5IiwiU1BFQ0lFUyIsIkRFU0NSSVBUT1JTIiwiVHlwZUVycm9yIiwibmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUiLCJwZXJmb3JtIiwiYW5JbnN0YW5jZSIsInJlcXVpcmUkJDMiLCJzcGVjaWVzQ29uc3RydWN0b3IiLCJyZXF1aXJlJCQ0IiwicmVxdWlyZSQkNSIsInJlcXVpcmUkJDYiLCJwcm9taXNlUmVzb2x2ZSIsInJlcXVpcmUkJDciLCJmb3JPZiIsImNvbnN0IiwibGliIiwibGV0IiwiZW52IiwiaSIsInRvU3RyaW5nIiwiaW5pdCIsImV4dGVuZCIsImV2ZW50IiwiX3VpZCIsImluaXRWaWV3cG9ydCIsIndlZXgiLCJ1dGlscy5hcHBlbmRDc3MiLCJ0YWdNYXAiLCJnZXRUcmFuc2Zvcm1lciIsImJpbmRpbmdTdHlsZU5hbWVzRm9yUHgyUmVtIiwidGhpcyIsIl9pbml0ZWQiLCJiYXNlIiwibWFwRm9ybUV2ZW50cyIsImFwcGVuZENzcyIsInJlY3QiLCJzY3JvbGxhYmxlIiwidm5vZGUiLCJ0YWciLCJjb2x1bW5Eb20iLCJleHRyYWN0Q29tcG9uZW50U3R5bGUiLCJnZXRSZ2IiLCJsb29wQXJyYXkiLCJnZXRTdHlsZVNoZWV0QnlJZCIsInByb2Nlc3NTdHlsZSIsImdldExpc3QiLCJsb2FkaW5nSW5kaWNhdG9yIiwic2xpZGVyIiwiZ2V0Q29tcG9uZW50SW5saW5lU3R5bGUiLCJpbmRpY2F0b3IiLCJtZXRhIiwiaGFzT3duUHJvcGVydHkiLCJ1dGlscyIsInFzIiwicXVldWUiLCJDT05URU5UX0NMQVNTIiwiTVNHX0NMQVNTIiwiQlVUVE9OX0dST1VQX0NMQVNTIiwiQlVUVE9OX0NMQVNTIiwiX2NzcyIsImlzQXJyYXkiLCJ3ZWJzb2NrZXQiLCJnZW9sb2NhdGlvbiIsInN0b3JhZ2UiLCJzdHJlYW0iLCJjbGlwYm9hcmQiLCJtb2RhbCIsImFuaW1hdGlvbiIsImRvbSIsImdsb2JhbEV2ZW50IiwibmF2aWdhdG9yTW9kdWxlIiwid2VidmlldyIsIm1vZHVsZXMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3JCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDdkIsY0FBYyxHQUFHLFVBQVUsRUFBRSxFQUFFO0VBQzdCLE9BQU8sS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztDQUMxRDs7QUNMRDtBQUNBLFlBQWMsR0FBRyxVQUFVLEVBQUUsRUFBRTtFQUM3QixJQUFJLEVBQUUsSUFBSSxTQUFTLElBQUUsTUFBTSxTQUFTLENBQUMsd0JBQXdCLEdBQUcsRUFBRSxDQUFDLEdBQUM7RUFDcEUsT0FBTyxFQUFFLENBQUM7Q0FDWDs7OztBQ0FELGFBQWMsR0FBRyxVQUFVLFNBQVMsRUFBRTtFQUNwQyxPQUFPLFVBQVUsSUFBSSxFQUFFLEdBQUcsRUFBRTtJQUMxQixJQUFJLENBQUMsR0FBRyxNQUFNLENBQUNBLFFBQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzlCLElBQUksQ0FBQyxHQUFHQyxVQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNqQixJQUFJLENBQUMsRUFBRSxDQUFD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QUNwQixFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEQsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUM3QixFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdELEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3RDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0dBQ3ZFLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztDQUMvQjs7QUNWRCxJQUFJMEMsU0FBTyxHQUFHM0MsT0FBTSxDQUFDLE9BQU8sQ0FBQztBQUM3QixJQUFJLE9BQU8sR0FBR0EsT0FBTSxDQUFDLFlBQVksQ0FBQztBQUNsQyxJQUFJLFNBQVMsR0FBR0EsT0FBTSxDQUFDLGNBQWMsQ0FBQztBQUN0QyxJQUFJLGNBQWMsR0FBR0EsT0FBTSxDQUFDLGNBQWMsQ0FBQztBQUMzQyxJQUFJLFFBQVEsR0FBR0EsT0FBTSxDQUFDLFFBQVEsQ0FBQztBQUMv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QUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0VBQzVDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUM7RUFDeEUsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDdkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDN0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUM7RUFDMUIsSUFBSSxTQUFTLEdBQUc7SUFDZCxFQUFFO01BQ0EsS0FBSyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztNQUM3QixLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO0lBQy9CLEVBQUU7TUFDQSxLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO01BQzdCLEtBQUssR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBQzs7RUFFbEMsT0FBTztJQUNMLE1BQU0sRUFBRSxNQUFNO0lBQ2QsS0FBSyxFQUFFLEtBQUs7SUFDWixTQUFTLEVBQUUsU0FBUztJQUNwQixNQUFNLEVBQUU7TUFDTixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0s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QUFHLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxHQUFDLE9BQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLE9BQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLHdIQUF3SCxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLEdBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxFQUFFLE9BQU8sUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFRLENBQUMsRUFBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLEVB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