oxygen-cli 1.43.2-beta.1 → 1.43.2-beta.2

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.
@@ -32,7 +32,7 @@ module.exports = function (filePath, mode, fileType) {
32
32
  self.currentRow = self.mode === 'random' ? random(0, self.table.length) : 0;
33
33
  return null;
34
34
  }).catch(function (err) {
35
- throw new _OxygenError.default(errHelper.errorCode.PARAMETERS_ERROR, `Unable to load parameters file: ${err.message}`);
35
+ throw new _OxygenError.default(errHelper.errorCode.PARAMETERS_ERROR, `Unable to load parameters file "${path.basename(filePath)}": ${err.message}`);
36
36
  });
37
37
  };
38
38
  module.getMode = function () {
@@ -68,4 +68,4 @@ module.exports = function (filePath, mode, fileType) {
68
68
  }
69
69
  return module;
70
70
  };
71
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfT3h5Z2VuRXJyb3IiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIm1vZHVsZSIsImV4cG9ydHMiLCJmaWxlUGF0aCIsIm1vZGUiLCJmaWxlVHlwZSIsInBhdGgiLCJFeGNlbFJlYWRlciIsIkNzdlJlYWRlciIsIkpzb25SZWFkZXIiLCJlcnJIZWxwZXIiLCJpbml0IiwiZXh0IiwiZXh0bmFtZSIsInJlYWRlciIsInNlbGYiLCJQcm9taXNlIiwicmVqZWN0IiwiT3hFcnJvciIsImVycm9yQ29kZSIsIlBBUkFNRVRFUlNfRVJST1IiLCJyZWFkIiwidGhlbiIsInJlc3VsdCIsInRhYmxlIiwiY3VycmVudFJvdyIsInJhbmRvbSIsImxlbmd0aCIsImNhdGNoIiwiZXJyIiwibWVzc2FnZSIsImdldE1vZGUiLCJyZWFkTmV4dCIsInByZXZSb3ciLCJyZWFkUHJldiIsImdldFZhbHVlcyIsIl9fZGVmaW5lR2V0dGVyX18iLCJtaW4iLCJtYXgiLCJNYXRoIiwiZmxvb3IiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3BhcmFtLW1hbmFnZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcbmltcG9ydCBPeEVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZpbGVQYXRoLCBtb2RlLCBmaWxlVHlwZSAvKm9wdGlvbmFsKi8pIHtcclxuICAgIHZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xyXG4gICAgdmFyIEV4Y2VsUmVhZGVyID0gcmVxdWlyZSgnLi9wYXJhbS1yZWFkZXItZXhjZWwnKTtcclxuICAgIHZhciBDc3ZSZWFkZXIgPSByZXF1aXJlKCcuL3BhcmFtLXJlYWRlci1jc3YnKTtcclxuICAgIHZhciBKc29uUmVhZGVyID0gcmVxdWlyZSgnLi9wYXJhbS1yZWFkZXItanNvbicpO1xyXG4gICAgdmFyIGVyckhlbHBlciA9IHJlcXVpcmUoJy4uL2Vycm9ycy9oZWxwZXInKTtcclxuICAgIHZhciBtb2R1bGUgPSB7fTtcclxuXHJcbiAgICBtb2R1bGUuaW5pdCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBleHQgPSBwYXRoLmV4dG5hbWUoZmlsZVBhdGgpO1xyXG5cclxuICAgICAgICBpZiAoZmlsZVR5cGUpIHtcclxuICAgICAgICAgICAgZXh0ID0gZmlsZVR5cGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByZWFkZXIgPSBudWxsO1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAvLyBjaG9vc2UgdGhlIHJpZ2h0IGNvbnZlcnRlciBiYXNlZCBvbiBlaXRoZXIgeGxzIG9yIHhsc3ggZmlsZSBleHRlbnNpb25cclxuICAgICAgICBpZiAoZXh0ID09PSAnLnhsc3gnIHx8IGV4dCA9PT0gJy54bHMnKSB7XHJcbiAgICAgICAgICAgIHJlYWRlciA9IG5ldyBFeGNlbFJlYWRlcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChleHQgPT09ICcuY3N2JyB8fCBleHQgPT09ICcudHh0Jykge1xyXG4gICAgICAgICAgICByZWFkZXIgPSBuZXcgQ3N2UmVhZGVyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGV4dCA9PT0gJy5qc29uJyB8fCBleHQgPT09ICcuanMnKSB7XHJcbiAgICAgICAgICAgIHJlYWRlciA9IG5ldyBKc29uUmVhZGVyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5QQVJBTUVURVJTX0VSUk9SLCAnVW5zdXBwb3J0ZWQgcGFyYW1ldGVycyBmaWxlIHR5cGU6ICcgKyBleHQpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSA9IG1vZGU7XHJcblxyXG4gICAgICAgIHJldHVybiByZWFkZXIucmVhZChmaWxlUGF0aCwgZmlsZVR5cGUgfHwgbnVsbClcclxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnRhYmxlID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBjdXJyZW50Um93IGFjY29yZGluZyB3aXRoIHBhcmFtZXRlciByZWFkaW5nIG1vZGUgKHJhbmRvbSBvciBzZXF1ZW50aWFsKVxyXG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50Um93ID0gc2VsZi5tb2RlID09PSAncmFuZG9tJyA/IHJhbmRvbSgwLCBzZWxmLnRhYmxlLmxlbmd0aCkgOiAwO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbihlcnIpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuUEFSQU1FVEVSU19FUlJPUiwgYFVuYWJsZSB0byBsb2FkIHBhcmFtZXRlcnMgZmlsZTogJHtlcnIubWVzc2FnZX1gKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIG1vZHVsZS5nZXRNb2RlID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZTtcclxuICAgIH07XHJcblxyXG4gICAgbW9kdWxlLnJlYWROZXh0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMucHJldlJvdyA9IHRoaXMuY3VycmVudFJvdztcclxuICAgICAgICBpZiAodGhpcy5tb2RlID09PSAncmFuZG9tJykge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRSb3cgPSByYW5kb20oMCwgdGhpcy50YWJsZS5sZW5ndGgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFJvdysrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFJvdyA+IHRoaXMudGFibGUubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRSb3cgPSAwO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgbW9kdWxlLnJlYWRQcmV2ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcmV2Um93ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRSb3cgPSB0aGlzLnByZXZSb3c7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBtb2R1bGUuZ2V0VmFsdWVzID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnRhYmxlIHx8IHRoaXMudGFibGUubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuUEFSQU1FVEVSU19FUlJPUiwgJ1BhcmFtZXRlcnMgdGFibGUgaXMgZW1wdHknKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVbdGhpcy5jdXJyZW50Um93XTtcclxuICAgIH07XHJcblxyXG4gICAgbW9kdWxlLl9fZGVmaW5lR2V0dGVyX18oJ3Jvd3MnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50YWJsZS5sZW5ndGg7XHJcbiAgICB9KTtcclxuXHJcbiAgICBmdW5jdGlvbiByYW5kb20obWluLCBtYXgpIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikpICsgbWluO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBtb2R1bGU7XHJcbn07XHJcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBUUEsSUFBQUEsWUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQTRDLFNBQUFELHVCQUFBRSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBQzVDRyxNQUFNLENBQUNDLE9BQU8sR0FBRyxVQUFVQyxRQUFRLEVBQUVDLElBQUksRUFBRUMsUUFBUSxFQUFlO0VBQzlELElBQUlDLElBQUksR0FBR1QsT0FBTyxDQUFDLE1BQU0sQ0FBQztFQUMxQixJQUFJVSxXQUFXLEdBQUdWLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQztFQUNqRCxJQUFJVyxTQUFTLEdBQUdYLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQztFQUM3QyxJQUFJWSxVQUFVLEdBQUdaLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQztFQUMvQyxJQUFJYSxTQUFTLEdBQUdiLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztFQUMzQyxJQUFJSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0VBRWZBLE1BQU0sQ0FBQ1UsSUFBSSxHQUFHLFlBQVc7SUFDckIsSUFBSUMsR0FBRyxHQUFHTixJQUFJLENBQUNPLE9BQU8sQ0FBQ1YsUUFBUSxDQUFDO0lBRWhDLElBQUlFLFFBQVEsRUFBRTtNQUNWTyxHQUFHLEdBQUdQLFFBQVE7SUFDbEI7SUFDQSxJQUFJUyxNQUFNLEdBQUcsSUFBSTtJQUNqQixJQUFJQyxJQUFJLEdBQUcsSUFBSTtJQUVmLElBQUlILEdBQUcsS0FBSyxPQUFPLElBQUlBLEdBQUcsS0FBSyxNQUFNLEVBQUU7TUFDbkNFLE1BQU0sR0FBRyxJQUFJUCxXQUFXLENBQUMsQ0FBQztJQUM5QixDQUFDLE1BQ0ksSUFBSUssR0FBRyxLQUFLLE1BQU0sSUFBSUEsR0FBRyxLQUFLLE1BQU0sRUFBRTtNQUN2Q0UsTUFBTSxHQUFHLElBQUlOLFNBQVMsQ0FBQyxDQUFDO0lBQzVCLENBQUMsTUFDSSxJQUFJSSxHQUFHLEtBQUssT0FBTyxJQUFJQSxHQUFHLEtBQUssS0FBSyxFQUFFO01BQ3ZDRSxNQUFNLEdBQUcsSUFBSUwsVUFBVSxDQUFDLENBQUM7SUFDN0IsQ0FBQyxNQUNJO01BQ0QsT0FBT08sT0FBTyxDQUFDQyxNQUFNLENBQUMsSUFBSUMsb0JBQU8sQ0FBQ1IsU0FBUyxDQUFDUyxTQUFTLENBQUNDLGdCQUFnQixFQUFFLG9DQUFvQyxHQUFHUixHQUFHLENBQUMsQ0FBQztJQUN4SDtJQUVBLElBQUksQ0FBQ1IsSUFBSSxHQUFHQSxJQUFJO0lBRWhCLE9BQU9VLE1BQU0sQ0FBQ08sSUFBSSxDQUFDbEIsUUFBUSxFQUFFRSxRQUFRLElBQUksSUFBSSxDQUFDLENBQ3pDaUIsSUFBSSxDQUFDLFVBQVNDLE1BQU0sRUFBRTtNQUNuQlIsSUFBSSxDQUFDUyxLQUFLLEdBQUdELE1BQU07TUFFbkJSLElBQUksQ0FBQ1UsVUFBVSxHQUFHVixJQUFJLENBQUNYLElBQUksS0FBSyxRQUFRLEdBQUdzQixNQUFNLENBQUMsQ0FBQyxFQUFFWCxJQUFJLENBQUNTLEtBQUssQ0FBQ0csTUFBTSxDQUFDLEdBQUcsQ0FBQztNQUMzRSxPQUFPLElBQUk7SUFDZixDQUFDLENBQUMsQ0FDREMsS0FBSyxDQUFDLFVBQVNDLEdBQUcsRUFBRTtNQUNqQixNQUFNLElBQUlYLG9CQUFPLENBQUNSLFNBQVMsQ0FBQ1MsU0FBUyxDQUFDQyxnQkFBZ0IsRUFBRSxtQ0FBbUNTLEdBQUcsQ0FBQ0MsT0FBTyxFQUFFLENBQUM7SUFDN0csQ0FBQyxDQUFDO0VBQ1YsQ0FBQztFQUVEN0IsTUFBTSxDQUFDOEIsT0FBTyxHQUFHLFlBQVc7SUFDeEIsT0FBTyxJQUFJLENBQUMzQixJQUFJO0VBQ3BCLENBQUM7RUFFREgsTUFBTSxDQUFDK0IsUUFBUSxHQUFHLFlBQVk7SUFDMUIsSUFBSSxDQUFDQyxPQUFPLEdBQUcsSUFBSSxDQUFDUixVQUFVO0lBQzlCLElBQUksSUFBSSxDQUFDckIsSUFBSSxLQUFLLFFBQVEsRUFBRTtNQUN4QixJQUFJLENBQUNxQixVQUFVLEdBQUdDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDRixLQUFLLENBQUNHLE1BQU0sQ0FBQztJQUNsRCxDQUFDLE1BQU07TUFDSCxJQUFJLENBQUNGLFVBQVUsRUFBRTtJQUNyQjtJQUVBLElBQUksSUFBSSxDQUFDQSxVQUFVLEdBQUcsSUFBSSxDQUFDRCxLQUFLLENBQUNHLE1BQU0sR0FBRyxDQUFDLEVBQUU7TUFDekMsSUFBSSxDQUFDRixVQUFVLEdBQUcsQ0FBQztJQUN2QjtFQUNKLENBQUM7RUFFRHhCLE1BQU0sQ0FBQ2lDLFFBQVEsR0FBRyxZQUFZO0lBQzFCLElBQUksT0FBTyxJQUFJLENBQUNELE9BQU8sS0FBSyxXQUFXLEVBQUU7TUFDckMsSUFBSSxDQUFDUixVQUFVLEdBQUcsSUFBSSxDQUFDUSxPQUFPO0lBQ2xDO0VBQ0osQ0FBQztFQUVEaEMsTUFBTSxDQUFDa0MsU0FBUyxHQUFHLFlBQVc7SUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQ1gsS0FBSyxJQUFJLElBQUksQ0FBQ0EsS0FBSyxDQUFDRyxNQUFNLEtBQUssQ0FBQyxFQUFFO01BQ3hDLE1BQU0sSUFBSVQsb0JBQU8sQ0FBQ1IsU0FBUyxDQUFDUyxTQUFTLENBQUNDLGdCQUFnQixFQUFFLDJCQUEyQixDQUFDO0lBQ3hGO0lBQ0EsT0FBTyxJQUFJLENBQUNJLEtBQUssQ0FBQyxJQUFJLENBQUNDLFVBQVUsQ0FBQztFQUN0QyxDQUFDO0VBRUR4QixNQUFNLENBQUNtQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsWUFBVztJQUN2QyxPQUFPLElBQUksQ0FBQ1osS0FBSyxDQUFDRyxNQUFNO0VBQzVCLENBQUMsQ0FBQztFQUVGLFNBQVNELE1BQU1BLENBQUNXLEdBQUcsRUFBRUMsR0FBRyxFQUFFO0lBQ3RCLE9BQU9DLElBQUksQ0FBQ0MsS0FBSyxDQUFDRCxJQUFJLENBQUNiLE1BQU0sQ0FBQyxDQUFDLElBQUlZLEdBQUcsR0FBR0QsR0FBRyxDQUFDLENBQUMsR0FBR0EsR0FBRztFQUN4RDtFQUVBLE9BQU9wQyxNQUFNO0FBQ2pCLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
71
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfT3h5Z2VuRXJyb3IiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIm1vZHVsZSIsImV4cG9ydHMiLCJmaWxlUGF0aCIsIm1vZGUiLCJmaWxlVHlwZSIsInBhdGgiLCJFeGNlbFJlYWRlciIsIkNzdlJlYWRlciIsIkpzb25SZWFkZXIiLCJlcnJIZWxwZXIiLCJpbml0IiwiZXh0IiwiZXh0bmFtZSIsInJlYWRlciIsInNlbGYiLCJQcm9taXNlIiwicmVqZWN0IiwiT3hFcnJvciIsImVycm9yQ29kZSIsIlBBUkFNRVRFUlNfRVJST1IiLCJyZWFkIiwidGhlbiIsInJlc3VsdCIsInRhYmxlIiwiY3VycmVudFJvdyIsInJhbmRvbSIsImxlbmd0aCIsImNhdGNoIiwiZXJyIiwiYmFzZW5hbWUiLCJtZXNzYWdlIiwiZ2V0TW9kZSIsInJlYWROZXh0IiwicHJldlJvdyIsInJlYWRQcmV2IiwiZ2V0VmFsdWVzIiwiX19kZWZpbmVHZXR0ZXJfXyIsIm1pbiIsIm1heCIsIk1hdGgiLCJmbG9vciJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvcGFyYW0tbWFuYWdlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuaW1wb3J0IE94RXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZmlsZVBhdGgsIG1vZGUsIGZpbGVUeXBlIC8qb3B0aW9uYWwqLykge1xyXG4gICAgdmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XHJcbiAgICB2YXIgRXhjZWxSZWFkZXIgPSByZXF1aXJlKCcuL3BhcmFtLXJlYWRlci1leGNlbCcpO1xyXG4gICAgdmFyIENzdlJlYWRlciA9IHJlcXVpcmUoJy4vcGFyYW0tcmVhZGVyLWNzdicpO1xyXG4gICAgdmFyIEpzb25SZWFkZXIgPSByZXF1aXJlKCcuL3BhcmFtLXJlYWRlci1qc29uJyk7XHJcbiAgICB2YXIgZXJySGVscGVyID0gcmVxdWlyZSgnLi4vZXJyb3JzL2hlbHBlcicpO1xyXG4gICAgdmFyIG1vZHVsZSA9IHt9O1xyXG5cclxuICAgIG1vZHVsZS5pbml0ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIGV4dCA9IHBhdGguZXh0bmFtZShmaWxlUGF0aCk7XHJcblxyXG4gICAgICAgIGlmIChmaWxlVHlwZSkge1xyXG4gICAgICAgICAgICBleHQgPSBmaWxlVHlwZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJlYWRlciA9IG51bGw7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIC8vIGNob29zZSB0aGUgcmlnaHQgY29udmVydGVyIGJhc2VkIG9uIGVpdGhlciB4bHMgb3IgeGxzeCBmaWxlIGV4dGVuc2lvblxyXG4gICAgICAgIGlmIChleHQgPT09ICcueGxzeCcgfHwgZXh0ID09PSAnLnhscycpIHtcclxuICAgICAgICAgICAgcmVhZGVyID0gbmV3IEV4Y2VsUmVhZGVyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGV4dCA9PT0gJy5jc3YnIHx8IGV4dCA9PT0gJy50eHQnKSB7XHJcbiAgICAgICAgICAgIHJlYWRlciA9IG5ldyBDc3ZSZWFkZXIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZXh0ID09PSAnLmpzb24nIHx8IGV4dCA9PT0gJy5qcycpIHtcclxuICAgICAgICAgICAgcmVhZGVyID0gbmV3IEpzb25SZWFkZXIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlBBUkFNRVRFUlNfRVJST1IsICdVbnN1cHBvcnRlZCBwYXJhbWV0ZXJzIGZpbGUgdHlwZTogJyArIGV4dCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5tb2RlID0gbW9kZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlYWRlci5yZWFkKGZpbGVQYXRoLCBmaWxlVHlwZSB8fCBudWxsKVxyXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYudGFibGUgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAvLyBpbml0aWFsaXplIGN1cnJlbnRSb3cgYWNjb3JkaW5nIHdpdGggcGFyYW1ldGVyIHJlYWRpbmcgbW9kZSAocmFuZG9tIG9yIHNlcXVlbnRpYWwpXHJcbiAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRSb3cgPSBzZWxmLm1vZGUgPT09ICdyYW5kb20nID8gcmFuZG9tKDAsIHNlbGYudGFibGUubGVuZ3RoKSA6IDA7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uKGVycikge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5QQVJBTUVURVJTX0VSUk9SLCBgVW5hYmxlIHRvIGxvYWQgcGFyYW1ldGVycyBmaWxlIFwiJHtwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKX1cIjogJHtlcnIubWVzc2FnZX1gKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIG1vZHVsZS5nZXRNb2RlID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZTtcclxuICAgIH07XHJcblxyXG4gICAgbW9kdWxlLnJlYWROZXh0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMucHJldlJvdyA9IHRoaXMuY3VycmVudFJvdztcclxuICAgICAgICBpZiAodGhpcy5tb2RlID09PSAncmFuZG9tJykge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRSb3cgPSByYW5kb20oMCwgdGhpcy50YWJsZS5sZW5ndGgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFJvdysrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFJvdyA+IHRoaXMudGFibGUubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRSb3cgPSAwO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgbW9kdWxlLnJlYWRQcmV2ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcmV2Um93ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRSb3cgPSB0aGlzLnByZXZSb3c7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBtb2R1bGUuZ2V0VmFsdWVzID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnRhYmxlIHx8IHRoaXMudGFibGUubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuUEFSQU1FVEVSU19FUlJPUiwgJ1BhcmFtZXRlcnMgdGFibGUgaXMgZW1wdHknKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVbdGhpcy5jdXJyZW50Um93XTtcclxuICAgIH07XHJcblxyXG4gICAgbW9kdWxlLl9fZGVmaW5lR2V0dGVyX18oJ3Jvd3MnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50YWJsZS5sZW5ndGg7XHJcbiAgICB9KTtcclxuXHJcbiAgICBmdW5jdGlvbiByYW5kb20obWluLCBtYXgpIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikpICsgbWluO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBtb2R1bGU7XHJcbn07XHJcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBUUEsSUFBQUEsWUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQTRDLFNBQUFELHVCQUFBRSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBQzVDRyxNQUFNLENBQUNDLE9BQU8sR0FBRyxVQUFVQyxRQUFRLEVBQUVDLElBQUksRUFBRUMsUUFBUSxFQUFlO0VBQzlELElBQUlDLElBQUksR0FBR1QsT0FBTyxDQUFDLE1BQU0sQ0FBQztFQUMxQixJQUFJVSxXQUFXLEdBQUdWLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQztFQUNqRCxJQUFJVyxTQUFTLEdBQUdYLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQztFQUM3QyxJQUFJWSxVQUFVLEdBQUdaLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQztFQUMvQyxJQUFJYSxTQUFTLEdBQUdiLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztFQUMzQyxJQUFJSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0VBRWZBLE1BQU0sQ0FBQ1UsSUFBSSxHQUFHLFlBQVc7SUFDckIsSUFBSUMsR0FBRyxHQUFHTixJQUFJLENBQUNPLE9BQU8sQ0FBQ1YsUUFBUSxDQUFDO0lBRWhDLElBQUlFLFFBQVEsRUFBRTtNQUNWTyxHQUFHLEdBQUdQLFFBQVE7SUFDbEI7SUFDQSxJQUFJUyxNQUFNLEdBQUcsSUFBSTtJQUNqQixJQUFJQyxJQUFJLEdBQUcsSUFBSTtJQUVmLElBQUlILEdBQUcsS0FBSyxPQUFPLElBQUlBLEdBQUcsS0FBSyxNQUFNLEVBQUU7TUFDbkNFLE1BQU0sR0FBRyxJQUFJUCxXQUFXLENBQUMsQ0FBQztJQUM5QixDQUFDLE1BQ0ksSUFBSUssR0FBRyxLQUFLLE1BQU0sSUFBSUEsR0FBRyxLQUFLLE1BQU0sRUFBRTtNQUN2Q0UsTUFBTSxHQUFHLElBQUlOLFNBQVMsQ0FBQyxDQUFDO0lBQzVCLENBQUMsTUFDSSxJQUFJSSxHQUFHLEtBQUssT0FBTyxJQUFJQSxHQUFHLEtBQUssS0FBSyxFQUFFO01BQ3ZDRSxNQUFNLEdBQUcsSUFBSUwsVUFBVSxDQUFDLENBQUM7SUFDN0IsQ0FBQyxNQUNJO01BQ0QsT0FBT08sT0FBTyxDQUFDQyxNQUFNLENBQUMsSUFBSUMsb0JBQU8sQ0FBQ1IsU0FBUyxDQUFDUyxTQUFTLENBQUNDLGdCQUFnQixFQUFFLG9DQUFvQyxHQUFHUixHQUFHLENBQUMsQ0FBQztJQUN4SDtJQUVBLElBQUksQ0FBQ1IsSUFBSSxHQUFHQSxJQUFJO0lBRWhCLE9BQU9VLE1BQU0sQ0FBQ08sSUFBSSxDQUFDbEIsUUFBUSxFQUFFRSxRQUFRLElBQUksSUFBSSxDQUFDLENBQ3pDaUIsSUFBSSxDQUFDLFVBQVNDLE1BQU0sRUFBRTtNQUNuQlIsSUFBSSxDQUFDUyxLQUFLLEdBQUdELE1BQU07TUFFbkJSLElBQUksQ0FBQ1UsVUFBVSxHQUFHVixJQUFJLENBQUNYLElBQUksS0FBSyxRQUFRLEdBQUdzQixNQUFNLENBQUMsQ0FBQyxFQUFFWCxJQUFJLENBQUNTLEtBQUssQ0FBQ0csTUFBTSxDQUFDLEdBQUcsQ0FBQztNQUMzRSxPQUFPLElBQUk7SUFDZixDQUFDLENBQUMsQ0FDREMsS0FBSyxDQUFDLFVBQVNDLEdBQUcsRUFBRTtNQUNqQixNQUFNLElBQUlYLG9CQUFPLENBQUNSLFNBQVMsQ0FBQ1MsU0FBUyxDQUFDQyxnQkFBZ0IsRUFBRSxtQ0FBbUNkLElBQUksQ0FBQ3dCLFFBQVEsQ0FBQzNCLFFBQVEsQ0FBQyxNQUFNMEIsR0FBRyxDQUFDRSxPQUFPLEVBQUUsQ0FBQztJQUMxSSxDQUFDLENBQUM7RUFDVixDQUFDO0VBRUQ5QixNQUFNLENBQUMrQixPQUFPLEdBQUcsWUFBVztJQUN4QixPQUFPLElBQUksQ0FBQzVCLElBQUk7RUFDcEIsQ0FBQztFQUVESCxNQUFNLENBQUNnQyxRQUFRLEdBQUcsWUFBWTtJQUMxQixJQUFJLENBQUNDLE9BQU8sR0FBRyxJQUFJLENBQUNULFVBQVU7SUFDOUIsSUFBSSxJQUFJLENBQUNyQixJQUFJLEtBQUssUUFBUSxFQUFFO01BQ3hCLElBQUksQ0FBQ3FCLFVBQVUsR0FBR0MsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUNGLEtBQUssQ0FBQ0csTUFBTSxDQUFDO0lBQ2xELENBQUMsTUFBTTtNQUNILElBQUksQ0FBQ0YsVUFBVSxFQUFFO0lBQ3JCO0lBRUEsSUFBSSxJQUFJLENBQUNBLFVBQVUsR0FBRyxJQUFJLENBQUNELEtBQUssQ0FBQ0csTUFBTSxHQUFHLENBQUMsRUFBRTtNQUN6QyxJQUFJLENBQUNGLFVBQVUsR0FBRyxDQUFDO0lBQ3ZCO0VBQ0osQ0FBQztFQUVEeEIsTUFBTSxDQUFDa0MsUUFBUSxHQUFHLFlBQVk7SUFDMUIsSUFBSSxPQUFPLElBQUksQ0FBQ0QsT0FBTyxLQUFLLFdBQVcsRUFBRTtNQUNyQyxJQUFJLENBQUNULFVBQVUsR0FBRyxJQUFJLENBQUNTLE9BQU87SUFDbEM7RUFDSixDQUFDO0VBRURqQyxNQUFNLENBQUNtQyxTQUFTLEdBQUcsWUFBVztJQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDWixLQUFLLElBQUksSUFBSSxDQUFDQSxLQUFLLENBQUNHLE1BQU0sS0FBSyxDQUFDLEVBQUU7TUFDeEMsTUFBTSxJQUFJVCxvQkFBTyxDQUFDUixTQUFTLENBQUNTLFNBQVMsQ0FBQ0MsZ0JBQWdCLEVBQUUsMkJBQTJCLENBQUM7SUFDeEY7SUFDQSxPQUFPLElBQUksQ0FBQ0ksS0FBSyxDQUFDLElBQUksQ0FBQ0MsVUFBVSxDQUFDO0VBQ3RDLENBQUM7RUFFRHhCLE1BQU0sQ0FBQ29DLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxZQUFXO0lBQ3ZDLE9BQU8sSUFBSSxDQUFDYixLQUFLLENBQUNHLE1BQU07RUFDNUIsQ0FBQyxDQUFDO0VBRUYsU0FBU0QsTUFBTUEsQ0FBQ1ksR0FBRyxFQUFFQyxHQUFHLEVBQUU7SUFDdEIsT0FBT0MsSUFBSSxDQUFDQyxLQUFLLENBQUNELElBQUksQ0FBQ2QsTUFBTSxDQUFDLENBQUMsSUFBSWEsR0FBRyxHQUFHRCxHQUFHLENBQUMsQ0FBQyxHQUFHQSxHQUFHO0VBQ3hEO0VBRUEsT0FBT3JDLE1BQU07QUFDakIsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
@@ -121,7 +121,7 @@ class MobileModule extends _WebDriverModule.default {
121
121
  async init(caps, appiumUrl) {
122
122
  // if reopenSession is true - reinitilize the module
123
123
  if (this.isInitialized) {
124
- if (this.options.reopenSession !== false) {
124
+ if (this.driver && this.options.reopenSession !== false) {
125
125
  // true or false if explisitly set. true on null or undefined.
126
126
  this.logger.debug('reopenSession is true - reloading the session...');
127
127
  this.driver.reloadSession();
@@ -226,12 +226,18 @@ class MobileModule extends _WebDriverModule.default {
226
226
  connectionRetryCount: 1
227
227
  };
228
228
  let provider = _utils.default.determineProvider(wdioOpts);
229
+
230
+ // use larger timeout for BS (because test can wait in BS queue if there are no slots avalable at that moment)
231
+ if (provider === _utils.default.provider.BROWSERSTACK) {
232
+ wdioOpts.connectionRetryTimeout = 10 * 60 * 1000;
233
+ }
229
234
  const name = _utils.default.enrichProviderWdioOptions(provider, wdioOpts);
230
235
  this.wdioOpts = wdioOpts;
231
236
 
232
237
  // init webdriver
233
238
  try {
234
239
  this.driver = await wdio.remote(wdioOpts);
240
+ this.logger.info(`Session ID ${this.driver.sessionId}`);
235
241
  this.driver.provider = provider;
236
242
  if (this.options.seleniumBrowserTimeout) {
237
243
  this.driver.seleniumBrowserTimeout = this.options.seleniumBrowserTimeout;
@@ -251,6 +257,7 @@ class MobileModule extends _WebDriverModule.default {
251
257
  await this.reportingClient.testStart(name);
252
258
  }
253
259
  } catch (e) {
260
+ this.driver = null;
254
261
  throw _helper.default.getAppiumInitError(e);
255
262
  }
256
263
  this.appContext = await this.driver.getContext();
@@ -294,21 +301,19 @@ class MobileModule extends _WebDriverModule.default {
294
301
  await this.reportingClient.testStop({
295
302
  status: status === 'PASSED' ? _perfectoReporting.default.Constants.results.passed : _perfectoReporting.default.Constants.results.failed
296
303
  });
304
+ await this.deleteSession();
297
305
  } else if (this.driver.provider === _utils.default.provider.BROWSERSTACK) {
298
306
  await this._setBrowserStackResultStatus(status);
299
307
  await this.deleteSession();
300
- }
301
- try {
308
+ } else {
302
309
  if (!['CANCELED', 'FAILED'].includes(status)) {
303
310
  if (this.seleniumSessionTimeout) {
304
311
  // ignore
305
312
  // deleteSession will take 5 min to call
306
313
  } else {
307
- await this.driver.deleteSession();
314
+ await this.deleteSession();
308
315
  }
309
316
  }
310
- } catch (e) {
311
- this.logger.warn('Error disposing driver: ' + e); // ignore any errors at disposal stage
312
317
  }
313
318
  this.driver = null;
314
319
  this.lastNavigationStartTime = null;
@@ -456,13 +461,6 @@ class MobileModule extends _WebDriverModule.default {
456
461
  }
457
462
  }
458
463
  }
459
-
460
- // _getLogs(name) {
461
- // if (!NO_LOGS_COMMANDS.includes(name)) {
462
- // return this.getLogs();
463
- // }
464
- // }
465
-
466
464
  _adjustAppiumLog(log, src) {
467
465
  if (!log || typeof log !== 'object') {
468
466
  return null;
@@ -506,7 +504,7 @@ class MobileModule extends _WebDriverModule.default {
506
504
  }
507
505
 
508
506
  // collect all the browser logs for this session
509
- if (this.options.collectBrowserLogs) {
507
+ if (this.options.collectBrowserLogs && this.driver && this.driver.provider !== _utils.default.provider.BROWSERSTACK) {
510
508
  try {
511
509
  const logs = await this.getBrowserLogs();
512
510
  if (logs && Array.isArray(logs)) {
@@ -534,7 +532,7 @@ class MobileModule extends _WebDriverModule.default {
534
532
  this.logger.error('Cannot retrieve Appium logs.', e);
535
533
  }
536
534
  }
537
- if (this.driver.provider === _utils.default.provider.BROWSERSTACK) {
535
+ if (this.driver && this.driver.provider === _utils.default.provider.BROWSERSTACK) {
538
536
  var resultUrl = await this._getBrowserStackResultUrl();
539
537
  if (resultUrl) {
540
538
  // FIXME: this should be written to context.resultData instead
@@ -612,6 +610,7 @@ class MobileModule extends _WebDriverModule.default {
612
610
  // https://www.browserstack.com/docs/automate/api-reference/selenium/session#set-test-status
613
611
  // https://www.browserstack.com/docs/app-automate/api-reference/appium/sessions#update-session-status
614
612
  const bsApiUrl = this.wdioOpts.capabilities['appium:app'] ? `https://api-cloud.browserstack.com/app-automate/sessions/${this.driver.sessionId}.json` : `https://api.browserstack.com/automate/sessions/${this.driver.sessionId}.json`;
613
+ this.logger.info(`Setting BS test result status to ${status}: ${bsApiUrl}`);
615
614
  try {
616
615
  // set test status
617
616
  (0, _request.default)({
@@ -645,6 +644,7 @@ class MobileModule extends _WebDriverModule.default {
645
644
  // https://www.browserstack.com/docs/automate/api-reference/selenium/session#set-test-status
646
645
  // https://www.browserstack.com/docs/app-automate/api-reference/appium/sessions#update-session-status
647
646
  const bsApiUrl = this.wdioOpts.capabilities['appium:app'] ? `https://api-cloud.browserstack.com/app-automate/sessions/${this.driver.sessionId}.json` : `https://api.browserstack.com/automate/sessions/${this.driver.sessionId}.json`;
647
+ this.logger.info(`Getting BS test result details: ${bsApiUrl}`);
648
648
  try {
649
649
  // retreive BS test result url
650
650
  (0, _request.default)({
@@ -672,4 +672,4 @@ class MobileModule extends _WebDriverModule.default {
672
672
  }
673
673
  }
674
674
  exports.default = MobileModule;
675
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImRlZmF1bHQiLCJyZXF1aXJlIiwiX3VybCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJ3ZGlvIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfV2ViRHJpdmVyTW9kdWxlIiwiX3V0aWxzIiwiX2hlbHBlciIsIl9PeHlnZW5FcnJvciIsIl9wZXJmZWN0b1JlcG9ydGluZyIsIl9yZXF1ZXN0IiwiX2ltZ01lcmdlIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiTU9EVUxFX05BTUUiLCJERUZBVUxUX0FQUElVTV9VUkwiLCJERUZBVUxUX0JST1dTRVJfTkFNRSIsIk5PX1NDUkVFTlNIT1RfQ09NTUFORFMiLCJOT19TTkFQU0hPVF9DT01NQU5EUyIsIkFDVElPTl9DT01NQU5EUyIsIkRFRkFVTFRfV0FJVF9USU1FT1VUIiwiTW9iaWxlTW9kdWxlIiwiV2ViRHJpdmVyTW9kdWxlIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwiY29udGV4dCIsInJzIiwibG9nZ2VyIiwibW9kdWxlcyIsInNlcnZpY2VzIiwidHJhbnNhY3Rpb25zIiwibGFzdE5hdmlnYXRpb25TdGFydFRpbWUiLCJuZXR3b3JrUmVxdWVzdHMiLCJoZWxwZXJzIiwiYXBwQ29udGV4dCIsIl9sb2FkSGVscGVyRnVuY3Rpb25zIiwiT3hFcnJvciIsImVyckhlbHBlciIsIndhaXRGb3JUaW1lb3V0IiwibmFtZSIsImdldERyaXZlciIsImdldENhcGFiaWxpdGllcyIsImNhcHMiLCJpbml0IiwiYXBwaXVtVXJsIiwiaXNJbml0aWFsaXplZCIsInJlb3BlblNlc3Npb24iLCJkZWJ1ZyIsImRyaXZlciIsInJlbG9hZFNlc3Npb24iLCJfaXNJbml0aWFsaXplZCIsImN0eCIsInBsYXRmb3JtTmFtZSIsInBsYXRmb3JtVmVyc2lvbiIsImRldmljZU5hbWUiLCJicm93c2VyTmFtZSIsImF1dG9tYXRpb25OYW1lIiwidWRpZCIsImFwcCIsImVuYWJsZUFwcGl1bUJlaGF2aW9yIiwidXNlQXBwaXVtRm9yV2ViIiwiY29sbGVjdERldmljZUxvZ3MiLCJhcHBQYWNrYWdlIiwiYnVuZGxlSWQiLCJ0b0xvd2VyQ2FzZSIsInJlY29yZEhBUiIsImJyb3dzZXIiLCJwZXJmb3JtYW5jZSIsInVybCIsIlVSTCIsInBhcnNlIiwicHJvdG9jb2wiLCJyZXBsYWNlIiwiaG9zdCIsImhvc3RuYW1lIiwicG9ydCIsInBhcnNlSW50IiwicGF0aCIsInBhdGhuYW1lIiwiYXV0aCIsInNwbGl0Iiwid2Rpb09wdHMiLCJ1c2VyIiwia2V5IiwiY2FwYWJpbGl0aWVzIiwibG9nTGV2ZWwiLCJydW5uZXIiLCJ3YWl0Zm9yVGltZW91dCIsImNvbm5lY3Rpb25SZXRyeVRpbWVvdXQiLCJjb25uZWN0aW9uUmV0cnlDb3VudCIsInByb3ZpZGVyIiwibW9kVXRpbHMiLCJkZXRlcm1pbmVQcm92aWRlciIsImVucmljaFByb3ZpZGVyV2Rpb09wdGlvbnMiLCJyZW1vdGUiLCJzZWxlbml1bUJyb3dzZXJUaW1lb3V0Iiwic2VsZW5pdW1UaW1lb3V0IiwiUEVSRkVDVE8iLCJwZXJmZWN0b0V4ZWN1dGlvbkNvbnRleHQiLCJwZXJmZWN0b1JlcG9ydGluZyIsIlBlcmZlY3RvIiwiUGVyZmVjdG9FeGVjdXRpb25Db250ZXh0Iiwid2ViZHJpdmVyIiwiZXhlY3V0ZVNjcmlwdCIsImNvbW1hbmQiLCJwYXJhbXMiLCJleGVjdXRlIiwicmVwb3J0aW5nQ2xpZW50IiwiUGVyZmVjdG9SZXBvcnRpbmdDbGllbnQiLCJ0ZXN0U3RhcnQiLCJnZXRBcHBpdW1Jbml0RXJyb3IiLCJnZXRDb250ZXh0Iiwic2V0V2ViVmlld0NvbnRleHQiLCJCUk9XU0VSU1RBQ0siLCJzZXRUaW1lb3V0Iiwib3ZlcndyaXRlV2Rpb0NvbW1hbmRzIiwiZGlzcG9zZSIsInN0YXR1cyIsInN0ZXBzIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiZmFpbGVkRmluZGVkIiwiZmluZCIsIml0ZW0iLCJ0b1VwcGVyQ2FzZSIsInRlc3RTdG9wIiwiQ29uc3RhbnRzIiwicmVzdWx0cyIsInBhc3NlZCIsImZhaWxlZCIsIl9zZXRCcm93c2VyU3RhY2tSZXN1bHRTdGF0dXMiLCJkZWxldGVTZXNzaW9uIiwiaW5jbHVkZXMiLCJzZWxlbml1bVNlc3Npb25UaW1lb3V0Iiwid2FybiIsInRyYW5zYWN0aW9uIiwidG9TdHJpbmciLCJzbGljZSIsImdsb2JhbCIsIl9sYXN0VHJhbnNhY3Rpb25OYW1lIiwiX2lzQWN0aW9uIiwiX3Rha2VTY3JlZW5zaG90U2lsZW50IiwiZXJyb3IiLCJfdGhpcyRkcml2ZXIiLCJ0YWtlU2NyZWVuc2hvdCIsInJldHZhbCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0Iiwid2FpdFVudGlsUmV0VmFsIiwid2FpdFVudGlsIiwiaW1hZ2VzIiwicHVzaEltYWdlVG9JbWFnZXMiLCJmZXRjaFRpdGxlIiwiaW1hZ2UiLCJ0aXRsZSIsImdldFRpdGxlIiwidGV4dFRvSW1hZ2UiLCJ0aXRsZUltYWdlIiwiZ2VuZXJhdGUiLCJwdXNoIiwiaXNXZWJWaWV3Q29udGV4dCIsImhhbmRsZXMiLCJnZXRXaW5kb3dIYW5kbGVzIiwiaGFuZGxlIiwic3dpdGNoVG9XaW5kb3ciLCJtZXJnZWRJbWFnZSIsIm1lcmdlSW1hZ2VzIiwiZGlyZWN0aW9uIiwidGltZW91dCIsInRoZW4iLCJjYXRjaCIsImVyciIsIl90YWtlU25hcHNob3RTaWxlbnQiLCJnZXRQYWdlU291cmNlIiwicmVzdWx0IiwiX2FkanVzdEFwcGl1bUxvZyIsImxvZyIsInNyYyIsInRpbWUiLCJ0aW1lc3RhbXAiLCJtc2ciLCJtZXNzYWdlIiwibGV2ZWwiLCJfaXRlcmF0aW9uU3RhcnQiLCJfaXRlcmF0aW9uRW5kIiwidHlwZSIsImVycm9ySGVscGVyIiwiZXJyb3JDb2RlIiwiQVBQSVVNX1NFU1NJT05fVElNRU9VVCIsImxvZ3MiLCJnZXREZXZpY2VMb2dzIiwiY29sbGVjdEJyb3dzZXJMb2dzIiwiZ2V0QnJvd3NlckxvZ3MiLCJjb2xsZWN0QXBwaXVtTG9ncyIsImdldEFwcGl1bUxvZ3MiLCJsb2dFbnRyeSIsInJlc3VsdFVybCIsIl9nZXRCcm93c2VyU3RhY2tSZXN1bHRVcmwiLCJhdHRyaWJ1dGVzIiwiX2dldFdkaW9Mb2NhdG9yIiwibG9jYXRvciIsIlNDUklQVF9FUlJPUiIsImluZGV4T2YiLCJwbGF0Zm9ybSIsInN1YnN0ciIsImdldFdkaW9Mb2NhdG9yIiwibWF0Y2hQYXR0ZXJuIiwiZ2V0RWxlbWVudCIsImdldEVsZW1lbnRzIiwiZ2V0Q2hpbGRFbGVtZW50IiwiZ2V0Q2hpbGRFbGVtZW50cyIsInNldFRpbWVvdXRJbXBsaWNpdCIsInJlc3RvcmVUaW1lb3V0SW1wbGljaXQiLCJhc3NlcnRBcmd1bWVudCIsImFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmciLCJhc3NlcnRBcmd1bWVudE51bWJlciIsImFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUiLCJhc3NlcnRBcmd1bWVudEJvb2wiLCJhc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbCIsImFzc2VydEFyZ3VtZW50VGltZW91dCIsImFzc2VydENvbnRleHQiLCJjb250ZXh0TGlzdCIsImdldExvZ1R5cGVzIiwiYnNBcGlVcmwiLCJzZXNzaW9uSWQiLCJyZXF1ZXN0IiwibWV0aG9kIiwianNvbiIsInJlamVjdFVuYXV0aG9yaXplZCIsImJvZHkiLCJ1c2VyTmFtZSIsImFjY2Vzc0tleSIsInJlcyIsIl9ib2R5JGF1dG9tYXRpb25fc2VzcyIsImF1dG9tYXRpb25fc2Vzc2lvbiIsImJyb3dzZXJfdXJsIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL294X21vZHVsZXMvbW9kdWxlLW1vYi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbid1c2Ugc3RyaWN0JztcclxuLyoqXHJcbiAqIEBuYW1lIG1vYlxyXG4gKiBAZGVzY3JpcHRpb24gUHJvdmlkZXMgbWV0aG9kcyBmb3IgbW9iaWxlIGF1dG9tYXRpb24uXHJcbiAqIEBzYW1wbGUgKipMb2NhdG9yczoqKiAgXHJcbiAqIFxyXG4gKiBOYXRpdmUgYXBwbGljYXRpb24gbG9jYXRvcnMgZm9yIVtdKC4uLy4uLy5naXRib29rL2Fzc2V0cy9hbmRyb2lkLnBuZykgIFxyXG4gKiAqIGAvWFBBVEhgIC0gTG9jYXRlcyBlbGVtZW50IHVzaW5nIGFuIFhQYXRoIDEuMCBleHByZXNzaW9uLlxyXG4gKiAqIGB+QUNDRVNTSUJJTElUWV9JRGAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIEFjY2Vzc2liaWxpdHkgSWQuXHJcbiAqICogYGlkPUlEYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgaWQuXHJcbiAqICogYGNsYXNzPUNMQVNTYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgY2xhc3MuXHJcbiAqICogYHRleHQ9VEVYVGAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIHZpc2libGUgdGV4dC5cclxuICogKiBgdGV4dC1jb250YWlucz1URVhUYCAtIExvY2F0ZXMgZWxlbWVudCB3aG9zZSB2aXNpYmxlIHRleHQgY29udGFpbnMgdGhlIHNwZWNpZmllZCBzdHJpbmcuXHJcbiAqICogYGRlc2M9REVTQ1JJUFRJT05gIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBkZXNjcmlwdGlvbi5cclxuICogKiBgZGVzYy1jb250YWlucz1ERVNDUklQVElPTmAgLSBMb2NhdGVzIGVsZW1lbnQgd2hvc2UgZGVzY3JpcHRpb24gY29udGFpbnMgdGhlIHNwZWNpZmllZCBzdHJpbmcuXHJcbiAqICogYHNjcm9sbGFibGVgIC0gTG9jYXRlcyBlbGVtZW50cyB0aGF0IGFyZSBzY3JvbGxhYmxlLiAgXHJcbiAqICBcclxuICogTmF0aXZlIGFwcGxpY2F0aW9uIGxvY2F0b3JzIGZvciFbXSguLi8uLi8uZ2l0Ym9vay9hc3NldHMvYXBwbGUucG5nKSAgXHJcbiAqICBcclxuICogKiBgL1hQQVRIYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhbiBYUGF0aCAxLjAgZXhwcmVzc2lvbi5cclxuICogKiBgaWQ9SURgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBJRC5cclxuICogKiBgfkFDQ0VTU0lCSUxJVFlfSURgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBBY2Nlc3NpYmlsaXR5IElkLiAgXHJcbiAqICogYC1pb3MgcHJlZGljYXRlIHN0cmluZzpQUkVESUNBVEVfU1RSSU5HYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhIFtwcmVkaWNhdGUgcXVlcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9va2FyY2hpdmUvV2ViRHJpdmVyQWdlbnQvd2lraS9QcmVkaWNhdGUtUXVlcmllcy1Db25zdHJ1Y3Rpb24tUnVsZXMpLiAgXHJcbiAqICogYC1pb3MgY2xhc3MgY2hhaW46Q0xBU1NfQ0hBSU5gIC0gTG9jYXRlcyBlbGVtZW50IHVzaW5nIGEgW2NsYXNzIGNoYWluIGV4cHJlc3Npb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9va2FyY2hpdmUvV2ViRHJpdmVyQWdlbnQvd2lraS9DbGFzcy1DaGFpbi1RdWVyaWVzLUNvbnN0cnVjdGlvbi1SdWxlcykuICBcclxuICogIFxyXG4gKiBIeWJyaWQhW10oLi4vLi4vLmdpdGJvb2svYXNzZXRzL2h5YnJpZC5wbmcpICBhbmQgV2ViIVtdKC4uLy4uLy5naXRib29rL2Fzc2V0cy93ZWIucG5nKSAgYXBwbGljYXRpb24gbG9jYXRvcnMgZm9yIVtdKC4uLy4uLy5naXRib29rL2Fzc2V0cy9hbmRyb2lkLnBuZykgICFbXSguLi8uLi8uZ2l0Ym9vay9hc3NldHMvYXBwbGUucG5nKSAgXHJcbiAqICBcclxuICogKiBgL1hQQVRIYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhbiBYUGF0aCAxLjAgZXhwcmVzc2lvbi5cclxuICogKiBgaWQ9SURgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBpZC5cclxuICogKiBgbmFtZT1OQU1FYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgbmFtZSBhdHRyaWJ1dGUuXHJcbiAqICogYHRhZz1OQU1FYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgdGFnIG5hbWUuXHJcbiAqICogYGxpbms9VEVYVGAgLSBMb2NhdGVzIGFuY2hvciBlbGVtZW50IHdob3NlIHRleHQgbWF0Y2hlcyB0aGUgZ2l2ZW4gc3RyaW5nLlxyXG4gKiAqIGBsaW5rLWNvbnRhaW5zPVRFWFRgIC0gTG9jYXRlcyBhbmNob3IgZWxlbWVudCB3aG9zZSB0ZXh0IGNvbnRhaW5zIHRoZSBnaXZlbiBzdHJpbmcuXHJcbiAqICogYGNzcz1DU1NfU0VMRUNUT1JgIC0gTG9jYXRlcyBlbGVtZW50IHVzaW5nIGEgQ1NTIHNlbGVjdG9yLlxyXG4gKiBcclxuICogKipQYXR0ZXJuIGFyZ3VtZW50czoqKlxyXG4gKiBcclxuICogQ29tbWFuZHMgd2hpY2ggZXhwZWN0IGEgc3RyaW5nIG1hdGNoaW5nIHBhdHRlcm4gaW4gdGhlaXIgYXJndW1lbnRzLCBzdXBwb3J0IGZvbGxvd2luZyBwYXR0ZXJucyB1bmxlc3Mgc3BlY2lmaWVkIG90aGVyd2lzZTpcclxuICogXHJcbiAqICogYHJlZ2V4OlBBVFRFUk5gIC0gTWF0Y2ggdXNpbmcgcmVndWxhciBleHByZXNzaW9uLlxyXG4gKiAqIGBQQVRURVJOYCAtIFZlcmJhdGltIG1hdGNoaW5nLlxyXG4gKiBcclxuICovXHJcbmltcG9ydCBVUkwgZnJvbSAndXJsJztcclxuaW1wb3J0ICogYXMgd2RpbyBmcm9tICd3ZWJkcml2ZXJpbyc7XHJcbmltcG9ydCBXZWJEcml2ZXJNb2R1bGUgZnJvbSAnLi4vY29yZS9XZWJEcml2ZXJNb2R1bGUnO1xyXG5pbXBvcnQgbW9kVXRpbHMgZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCBlcnJIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcbmltcG9ydCBPeEVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbmltcG9ydCBwZXJmZWN0b1JlcG9ydGluZyBmcm9tICdwZXJmZWN0by1yZXBvcnRpbmcnO1xyXG5pbXBvcnQgcmVxdWVzdCBmcm9tICdyZXF1ZXN0JztcclxuaW1wb3J0IG1lcmdlSW1hZ2VzIGZyb20gJy4uL2xpYi9pbWctbWVyZ2UnO1xyXG5pbXBvcnQgZXJyb3JIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcblxyXG5jb25zdCBNT0RVTEVfTkFNRSA9ICdtb2InO1xyXG5jb25zdCBERUZBVUxUX0FQUElVTV9VUkwgPSAnaHR0cDovL2xvY2FsaG9zdDo0NzIzL3dkL2h1Yic7XHJcbmNvbnN0IERFRkFVTFRfQlJPV1NFUl9OQU1FID0gJ2RlZmF1bHQnO1xyXG5jb25zdCBOT19TQ1JFRU5TSE9UX0NPTU1BTkRTID0gWydpbml0JywgJ2Fzc2VydEFsZXJ0JywgJ2Rpc3Bvc2UnXTtcclxuY29uc3QgTk9fU05BUFNIT1RfQ09NTUFORFMgPSBbJ2luaXQnLCAnYXNzZXJ0QWxlcnQnLCAnZGlzcG9zZSddO1xyXG5jb25zdCBBQ1RJT05fQ09NTUFORFMgPSBbJ29wZW4nLCd0YXAnLCdjbGljaycsJ3N3aXBlJywnc3VibWl0Jywnc2V0VmFsdWUnXTtcclxuY29uc3QgREVGQVVMVF9XQUlUX1RJTUVPVVQgPSA2MCAqIDEwMDA7ICAgICAgICAgICAgLy8gZGVmYXVsdCA2MHMgd2FpdCB0aW1lb3V0XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNb2JpbGVNb2R1bGUgZXh0ZW5kcyBXZWJEcml2ZXJNb2R1bGUge1xyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpIHtcclxuICAgICAgICBzdXBlcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcyk7XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbnMgPSB7fTtcclxuICAgICAgICB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lID0gbnVsbDtcclxuICAgICAgICB0aGlzLm5ldHdvcmtSZXF1ZXN0cyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzID0ge307XHJcbiAgICAgICAgdGhpcy5hcHBDb250ZXh0ID0gJ05BVElWRV9BUFAnO1xyXG4gICAgICAgIHRoaXMuX2xvYWRIZWxwZXJGdW5jdGlvbnMoKTtcclxuICAgICAgICAvLyBzdXBwb3J0IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKHNvbWUgbW9kdWxlIGNvbW1hbmRzIG1pZ2h0IHJlZmVyIHRvIHRoaXMuT3hFcnJvciBhbmQgdGhpcy5lcnJIZWxwZXIpXHJcbiAgICAgICAgdGhpcy5PeEVycm9yID0gT3hFcnJvcjtcclxuICAgICAgICB0aGlzLmVyckhlbHBlciA9IGVyckhlbHBlcjtcclxuICAgICAgICAvLyBob2xkcyBlbGVtZW50IG9wZXJhdGlvbiB0aW1lb3V0IHZhbHVlXHJcbiAgICAgICAgdGhpcy53YWl0Rm9yVGltZW91dCA9IERFRkFVTFRfV0FJVF9USU1FT1VUO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBuYW1lKCkge1xyXG4gICAgICAgIHJldHVybiBNT0RVTEVfTkFNRTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBnZXREcml2ZXJcclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgdGhlIHVuZGVybHlpbmcgV0RJTyBkcml2ZXIuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFdESU8gZHJpdmVyLlxyXG4gICAgICovXHJcbiAgICBnZXREcml2ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldERyaXZlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGdldENhcGFiaWxpdGllc1xyXG4gICAgICogQHN1bW1hcnkgUmV0dXJucyBjdXJyZW50bHkgZGVmaW5lZCBjYXBhYmlsaXRpZXMuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEN1cnJlbnQgY2FwYWJpbGl0aWVzIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZ2V0Q2FwYWJpbGl0aWVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhcHMgfHwgc3VwZXIuZ2V0Q2FwYWJpbGl0aWVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gaW5pdFxyXG4gICAgICogQHN1bW1hcnkgSW5pdGlhbGl6ZXMgYSBuZXcgQXBwaXVtIHNlc3Npb24uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IGNhcHMgLSBEZXNpcmVkIGNhcGFiaWxpdGllcy4gSWYgbm90IHNwZWNpZmllZCBjYXBhYmlsaXRpZXMgd2lsbCBiZSB0YWtlbiBmcm9tIHN1aXRlIGRlZmluaXRpb24uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IGFwcGl1bVVybCAtIFJlbW90ZSBBcHBpdW0gc2VydmVyIFVSTCAoZGVmYXVsdDogaHR0cDovL2xvY2FsaG9zdDo0NzIzL3dkL2h1YikuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGluaXQoY2FwcywgYXBwaXVtVXJsKSB7XHJcbiAgICAgICAgLy8gaWYgcmVvcGVuU2Vzc2lvbiBpcyB0cnVlIC0gcmVpbml0aWxpemUgdGhlIG1vZHVsZVxyXG4gICAgICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yZW9wZW5TZXNzaW9uICE9PSBmYWxzZSkgeyAvLyB0cnVlIG9yIGZhbHNlIGlmIGV4cGxpc2l0bHkgc2V0LiB0cnVlIG9uIG51bGwgb3IgdW5kZWZpbmVkLlxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ3Jlb3BlblNlc3Npb24gaXMgdHJ1ZSAtIHJlbG9hZGluZyB0aGUgc2Vzc2lvbi4uLicpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIucmVsb2FkU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnbW9iLmluaXQgd2FzIGNhbGxlZCBmb3IgYWxyZWFkeSBpbml0aWFsaXplZCBtb2R1bGUuIHJlb3BlblNlc3Npb24gaXMgZmFsc2Ugc28gdGhlIGNhbGwgaXMgaWdub3JlZC4nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgYmUgcmVmYWN0b3JlZFxyXG4gICAgICAgIGlmICh0aGlzLmN0eC5jYXBzICYmIHRoaXMuY3R4LmNhcHNbJ3BlcmZlY3RvTW9iaWxlOm9wdGlvbnMnXSkge1xyXG4gICAgICAgICAgICBpZiAoY2Fwcykge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGNhcHMucGxhdGZvcm1OYW1lO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGNhcHMucGxhdGZvcm1WZXJzaW9uO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGNhcHMuZGV2aWNlTmFtZTtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBjYXBzLmJyb3dzZXJOYW1lO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGNhcHMuYXV0b21hdGlvbk5hbWU7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgY2Fwcy51ZGlkO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjYXBzLmFwcCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhcHMuZW5hYmxlQXBwaXVtQmVoYXZpb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXBzLnVzZUFwcGl1bUZvcldlYiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY2Fwcy5lbmFibGVBcHBpdW1CZWhhdmlvciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eC5jYXBzLnVzZUFwcGl1bUZvcldlYiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eC5jYXBzLmVuYWJsZUFwcGl1bUJlaGF2aW9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFhcHBpdW1VcmwpIHtcclxuICAgICAgICAgICAgYXBwaXVtVXJsID0gdGhpcy5vcHRpb25zLmFwcGl1bVVybCB8fCBERUZBVUxUX0FQUElVTV9VUkw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBtZXJnZSBjYXBhYmlsaXRpZXMgZnJvbSBjb250ZXh0IGFuZCBmcm9tIGluaXQgZnVuY3Rpb24gYXJndW1lbnQsIGdpdmUgcHJlZmVyZW5jZSB0byBjb250ZXh0LXBhc3NlZCBjYXBhYmlsaXRpZXNcclxuICAgICAgICB0aGlzLmNhcHMgPSB7fTtcclxuICAgICAgICBpZiAodGhpcy5jdHguY2Fwcykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMgPSB7IC4uLnRoaXMuY3R4LmNhcHMgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNhcHMpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzID0geyAuLi50aGlzLmNhcHMsIC4uLmNhcHMgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIG1ha2Ugc3VyZSB0byBjbGVhciB0aGUgZXhpc3RpbmcgZGV2aWNlIGxvZ3MsIGlmIGNvbGxlY3REZXZpY2VMb2dzIG9wdGlvbiBpcyB0cnVlICh3ZSB3YW50IHRvIGluY2x1ZGUgbG9ncyBvbmx5IHJlbGV2YW50IGZvciB0aGlzIHNlc3Npb24pXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb2xsZWN0RGV2aWNlTG9ncykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHNbJ2NsZWFyRGV2aWNlTG9nc09uU3RhcnQnXSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBpZiBib3RoIGJyb3dzZXJOYW1lIGFuZCBhcHBQYWNrYWdlL2FwcC9idW5kbGVJZCB3ZXJlIHNwZWNpZmllZCAtIGFzc3VtZSB3ZSB3YW50IHRvIHJ1biB0aGUgYXBwbGljYXRpb24gYW5kIHJlbW92ZSBicm93c2VyTmFtZVxyXG4gICAgICAgIGlmICh0aGlzLmNhcHMuYnJvd3Nlck5hbWUgJiYgKHRoaXMuY2Fwcy5hcHBQYWNrYWdlIHx8IHRoaXMuY2Fwcy5hcHAgfHwgdGhpcy5jYXBzLmJ1bmRsZUlkKSkge1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5jYXBzLmJyb3dzZXJOYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZiBubyBhcHBQYWNrYWdlL2FwcC9idW5kbGVJZCBjYXBhYmlsaXR5IG5vciBicm93c2VyTmFtZSBhcmUgZGVmaW5lZCwgYXNzdW1lIHdlIHdhbnQgdG8gcnVuIHRoZSB0ZXN0IGFnYWluc3QgZGVmYXVsdCBicm93c2VyXHJcbiAgICAgICAgZWxzZSBpZiAoIXRoaXMuY2Fwcy5icm93c2VyTmFtZSAmJiAhdGhpcy5jYXBzLmFwcFBhY2thZ2UgJiYgIXRoaXMuY2Fwcy5hcHAgJiYgIXRoaXMuY2Fwcy5idW5kbGVJZCkge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPSBERUZBVUxUX0JST1dTRVJfTkFNRTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gd2ViZHJpdmVyIGV4cGVjdHMgbG93ZXIgY2FzZSBuYW1lc1xyXG4gICAgICAgIGlmICh0aGlzLmNhcHMuYnJvd3Nlck5hbWUgJiYgdHlwZW9mIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID0gdGhpcy5jYXBzLmJyb3dzZXJOYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGFkanVzdCBjYXBhYmlsaXRpZXMgdG8gZW5hYmxlIGNvbGxlY3RpbmcgYnJvd3NlciBhbmQgcGVyZm9ybWFuY2Ugc3RhdHMgaW4gQ2hyb21lIFxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVjb3JkSEFSICYmIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gJ2Nocm9tZScpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzWydnb29nOmxvZ2dpbmdQcmVmcyddID0geyAgICAgLy8gZm9yIENocm9tZURyaXZlciA+PSA3NVxyXG4gICAgICAgICAgICAgICAgYnJvd3NlcjogJ0FMTCcsXHJcbiAgICAgICAgICAgICAgICBwZXJmb3JtYW5jZTogJ0FMTCdcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHBvcHVsYXRlIFdESU8gb3B0aW9uc1xyXG4gICAgICAgIGNvbnN0IHVybCA9IFVSTC5wYXJzZShhcHBpdW1VcmwpO1xyXG4gICAgICAgIGNvbnN0IHByb3RvY29sID0gdXJsLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpO1xyXG4gICAgICAgIGNvbnN0IGhvc3QgPSB1cmwuaG9zdG5hbWU7XHJcbiAgICAgICAgY29uc3QgcG9ydCA9IHBhcnNlSW50KHVybC5wb3J0IHx8IChwcm90b2NvbCA9PT0gJ2h0dHBzJyA/IDQ0MyA6IDgwKSk7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHVybC5wYXRobmFtZTtcclxuXHJcbiAgICAgICAgLy8gYXV0aCBpcyBuZWVkZWQgbW9zdGx5IGZvciBjbG91ZCBwcm92aWRlcnMgc3VjaCBhcyBMYW1iZGFUZXN0XHJcbiAgICAgICAgaWYgKHVybC5hdXRoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGF1dGggPSB1cmwuYXV0aC5zcGxpdCgnOicpO1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMud2Rpb09wdHMgPSB7XHJcbiAgICAgICAgICAgICAgICB1c2VyOiBhdXRoWzBdLFxyXG4gICAgICAgICAgICAgICAga2V5OiBhdXRoWzFdXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgd2Rpb09wdHMgPSB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMub3B0aW9ucy53ZGlvT3B0cyB8fCB7fSxcclxuICAgICAgICAgICAgcHJvdG9jb2w6IHByb3RvY29sLFxyXG4gICAgICAgICAgICBob3N0bmFtZTogaG9zdCxcclxuICAgICAgICAgICAgcG9ydDogcG9ydCxcclxuICAgICAgICAgICAgcGF0aDogcGF0aCxcclxuICAgICAgICAgICAgY2FwYWJpbGl0aWVzOiB0aGlzLmNhcHMsXHJcbiAgICAgICAgICAgIGxvZ0xldmVsOiAnc2lsZW50JyxcclxuICAgICAgICAgICAgcnVubmVyOiAncmVwbCcsXHJcbiAgICAgICAgICAgIHdhaXRmb3JUaW1lb3V0OiA1MDAwLCAvLyBpbmNyZWFzZSB0aGUgZGVmYXVsdCAzMDAwXHJcbiAgICAgICAgICAgIGNvbm5lY3Rpb25SZXRyeVRpbWVvdXQ6IDMxMCoxMDAwLFxyXG4gICAgICAgICAgICBjb25uZWN0aW9uUmV0cnlDb3VudDogMVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGxldCBwcm92aWRlciA9IG1vZFV0aWxzLmRldGVybWluZVByb3ZpZGVyKHdkaW9PcHRzKTtcclxuICAgICAgICBjb25zdCBuYW1lID0gbW9kVXRpbHMuZW5yaWNoUHJvdmlkZXJXZGlvT3B0aW9ucyhwcm92aWRlciwgd2Rpb09wdHMpO1xyXG5cclxuICAgICAgICB0aGlzLndkaW9PcHRzID0gd2Rpb09wdHM7XHJcblxyXG4gICAgICAgIC8vIGluaXQgd2ViZHJpdmVyXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy5kcml2ZXIgPSBhd2FpdCB3ZGlvLnJlbW90ZSh3ZGlvT3B0cyk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRyaXZlci5wcm92aWRlciA9IHByb3ZpZGVyO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zZWxlbml1bUJyb3dzZXJUaW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5zZWxlbml1bUJyb3dzZXJUaW1lb3V0ID0gdGhpcy5vcHRpb25zLnNlbGVuaXVtQnJvd3NlclRpbWVvdXQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2VsZW5pdW1UaW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5zZWxlbml1bVRpbWVvdXQgPSB0aGlzLm9wdGlvbnMuc2VsZW5pdW1UaW1lb3V0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLlBFUkZFQ1RPKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwZXJmZWN0b0V4ZWN1dGlvbkNvbnRleHQgPSBhd2FpdCBuZXcgcGVyZmVjdG9SZXBvcnRpbmcuUGVyZmVjdG8uUGVyZmVjdG9FeGVjdXRpb25Db250ZXh0KHtcclxuICAgICAgICAgICAgICAgICAgICB3ZWJkcml2ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZVNjcmlwdDogYXN5bmMgKGNvbW1hbmQsIHBhcmFtcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZHJpdmVyLmV4ZWN1dGUoY29tbWFuZCwgcGFyYW1zKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRpbmdDbGllbnQgPSBuZXcgcGVyZmVjdG9SZXBvcnRpbmcuUGVyZmVjdG8uUGVyZmVjdG9SZXBvcnRpbmdDbGllbnQocGVyZmVjdG9FeGVjdXRpb25Db250ZXh0KTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVwb3J0aW5nQ2xpZW50LnRlc3RTdGFydChuYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgZXJySGVscGVyLmdldEFwcGl1bUluaXRFcnJvcihlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYXBwQ29udGV4dCA9IGF3YWl0IHRoaXMuZHJpdmVyLmdldENvbnRleHQoKTtcclxuXHJcbiAgICAgICAgLy8gaWYgd2UgYXJlIHJ1bm5pbmcgb24gQW5kcm9pZCA3KyBlbXVsYXRvciwgYW5kIHRodXMvb3IgdXNpbmcgYSBXZWJWaWV3IEJyb3dzZXIgVGVzdGVyIC1cclxuICAgICAgICAvLyBwZXJmb3JtIGFuIGFjdHVhbCBhcHBDb250ZXh0IHN3aXRjaCB0byBXRUJcclxuICAgICAgICAvLyBzbyBBcHBpdW0gd2lsbCBkZWxlZ2F0ZSBjb21tYW5kcyB0byBDaHJvbWUgRHJpdmVyIGluc3RlYWQgb2YgQXBwaXVtIERyaXZlclxyXG4gICAgICAgIGlmICh0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPT09ICAnY2hyb21pdW0td2VidmlldycpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXRXZWJWaWV3Q29udGV4dCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5CUk9XU0VSU1RBQ0spIHtcclxuICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgIC8vIGZhaWxzIG9uIGJyb3dzZXJzdGFja1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLnNldFRpbWVvdXQoeyAnaW1wbGljaXQnOiB0aGlzLndhaXRGb3JUaW1lb3V0IH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgbW9kVXRpbHMub3ZlcndyaXRlV2Rpb0NvbW1hbmRzKHRoaXMuZHJpdmVyKTtcclxuXHJcbiAgICAgICAgc3VwZXIuaW5pdCh0aGlzLmRyaXZlcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gZGlzcG9zZVxyXG4gICAgICogQHN1bW1hcnkgRW5kcyB0aGUgY3VycmVudCBzZXNzaW9uLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBzdGF0dXMgLSBUZXN0IHN0YXR1cywgZWl0aGVyIGBwYXNzZWRgIG9yIGBmYWlsZWRgLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBkaXNwb3NlKHN0YXR1cykge1xyXG4gICAgICAgIGlmICghc3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHN0YXR1cyA9ICdwYXNzZWQnO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMucnMuc3RlcHMgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnJzLnN0ZXBzKSAmJiB0aGlzLnJzLnN0ZXBzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZhaWxlZEZpbmRlZCA9IHRoaXMucnMuc3RlcHMuZmluZCgoaXRlbSkgPT4gaXRlbS5zdGF0dXMgPT09ICdmYWlsZWQnKTtcclxuICAgICAgICAgICAgICAgIGlmIChmYWlsZWRGaW5kZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAnZmFpbGVkJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZHJpdmVyICYmIHRoaXMuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICBzdGF0dXMgPSBzdGF0dXMudG9VcHBlckNhc2UoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRyaXZlci5wcm92aWRlciA9PT0gbW9kVXRpbHMucHJvdmlkZXIuUEVSRkVDVE8pIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVwb3J0aW5nQ2xpZW50LnRlc3RTdG9wKHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyA9PT0gJ1BBU1NFRCcgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZlY3RvUmVwb3J0aW5nLkNvbnN0YW50cy5yZXN1bHRzLnBhc3NlZCA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyZmVjdG9SZXBvcnRpbmcuQ29uc3RhbnRzLnJlc3VsdHMuZmFpbGVkXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRyaXZlci5wcm92aWRlciA9PT0gbW9kVXRpbHMucHJvdmlkZXIuQlJPV1NFUlNUQUNLKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9zZXRCcm93c2VyU3RhY2tSZXN1bHRTdGF0dXMoc3RhdHVzKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFbJ0NBTkNFTEVEJywgJ0ZBSUxFRCddLmluY2x1ZGVzKHN0YXR1cykpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlbml1bVNlc3Npb25UaW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkZWxldGVTZXNzaW9uIHdpbGwgdGFrZSA1IG1pbiB0byBjYWxsXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuZGVsZXRlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybignRXJyb3IgZGlzcG9zaW5nIGRyaXZlcjogJyArIGUpOyAgICAvLyBpZ25vcmUgYW55IGVycm9ycyBhdCBkaXNwb3NhbCBzdGFnZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZHJpdmVyID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5sYXN0TmF2aWdhdGlvblN0YXJ0VGltZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHN1cGVyLmRpc3Bvc2UoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgT3BlbnMgbmV3IHRyYW5zYWN0aW9uLlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSB0cmFuc2FjdGlvbiB3aWxsIHBlcnNpc3QgdGlsbCBhIG5ldyBvbmUgaXMgb3BlbmVkLiBUcmFuc2FjdGlvbiBuYW1lcyBtdXN0IGJlIHVuaXF1ZS5cclxuICAgICAqIEBmdW5jdGlvbiB0cmFuc2FjdGlvblxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgLSBUaGUgdHJhbnNhY3Rpb24gbmFtZS5cclxuICAgICAqIEBmb3IgYW5kcm9pZCwgaW9zLCBoeWJyaWQsIHdlYlxyXG4gICAgICovXHJcbiAgICB0cmFuc2FjdGlvbihuYW1lKSB7XHJcbiAgICAgICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8ganVzdCBpbiBjYXNlIHVzZXIgcGFzc2VkIGEgY29tcGxleCBvYmplY3QgYnkgbWlzdGFrZVxyXG4gICAgICAgIG5hbWUgPSBuYW1lLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICAgIC8vIGxpbWl0IHRoZSBuYW1lIGxlbmd0aCAoc2luY2Ugd2UgY2FuJ3Qgc3RvcmUgdmFsdWVzIGxhcmdlciB0aGFuIDUxMkIgaW4gdGhlIGRhdGFiYXNlKVxyXG4gICAgICAgIG5hbWUgPSBuYW1lLnNsaWNlKDAsIDUxMik7XHJcblxyXG4gICAgICAgIGdsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZSA9IG5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIFByaXZhdGVcclxuICAgICAqL1xyXG5cclxuICAgIF9pc0FjdGlvbihuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIEFDVElPTl9DT01NQU5EUy5pbmNsdWRlcyhuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBfdGFrZVNjcmVlbnNob3RTaWxlbnQobmFtZSkge1xyXG4gICAgICAgIGlmICghTk9fU0NSRUVOU0hPVF9DT01NQU5EUy5pbmNsdWRlcyhuYW1lKSkge1xyXG4gICAgICAgICAgICBsZXQgZXJyb3I7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kcml2ZXI/LnRha2VTY3JlZW5zaG90KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJldHZhbDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5jYWxsKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhaXRVbnRpbFJldFZhbCA9IHRoaXMuZHJpdmVyLndhaXRVbnRpbChhc3luYygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW1hZ2VzID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwdXNoSW1hZ2VUb0ltYWdlcyA9IGFzeW5jKGZldGNoVGl0bGUgPSB0cnVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWFnZSA9IGF3YWl0IHRoaXMuZHJpdmVyLnRha2VTY3JlZW5zaG90KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmV0Y2hUaXRsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0VGl0bGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGl0bGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dFRvSW1hZ2UgPSByZXF1aXJlKCcuLi9saWIvdGV4dC10by1pbWFnZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGVJbWFnZSA9IGF3YWl0IHRleHRUb0ltYWdlLmdlbmVyYXRlKHRpdGxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpdGxlSW1hZ2UgJiYgdHlwZW9mIHRpdGxlSW1hZ2UgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZUltYWdlID0gdGl0bGVJbWFnZS5yZXBsYWNlKCdkYXRhOmltYWdlL3BuZztiYXNlNjQsJywgJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzLnB1c2godGl0bGVJbWFnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzLnB1c2goaW1hZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNXZWJWaWV3Q29udGV4dCA9IGF3YWl0IHRoaXMuaXNXZWJWaWV3Q29udGV4dCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNXZWJWaWV3Q29udGV4dCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29sbGVjdCBhbGwgKHNjcmVlbnNob3QgYW5kIHRpdGxlKSBpbWFnZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZXMgPSBhd2FpdCB0aGlzLmRyaXZlci5nZXRXaW5kb3dIYW5kbGVzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoaGFuZGxlcykgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaGFuZGxlIG9mIGhhbmRsZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuc3dpdGNoVG9XaW5kb3coaGFuZGxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgcHVzaEltYWdlVG9JbWFnZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBwdXNoSW1hZ2VUb0ltYWdlcyhmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1lcmdlIGFsbCBpbWFnZXMgaW50byBvbmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVyZ2VkSW1hZ2UgPSBhd2FpdCBtZXJnZUltYWdlcyhpbWFnZXMsIHsgZGlyZWN0aW9uOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVyZ2VkSW1hZ2UgJiYgdHlwZW9mIG1lcmdlZEltYWdlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gbWVyZ2VkSW1hZ2UucmVwbGFjZSgnZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCwnLCAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgdGltZW91dDogMzAqMTAwMCB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2FpdFVudGlsUmV0VmFsICYmIHdhaXRVbnRpbFJldFZhbC50aGVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdFVudGlsUmV0VmFsLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgZ2V0IHNjcmVlbnNob3QnLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzY3JlZW5zaG90JywgZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzY3JlZW5zaG90IGlubmVyIGVycm9yJywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX3Rha2VTbmFwc2hvdFNpbGVudChuYW1lKSB7XHJcbiAgICAgICAgaWYgKCFOT19TTkFQU0hPVF9DT01NQU5EUy5pbmNsdWRlcyhuYW1lKSkge1xyXG4gICAgICAgICAgICBsZXQgZXJyb3I7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIgJiZcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5nZXRQYWdlU291cmNlXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmV0dmFsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLmNhbGwoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuZ2V0UGFnZVNvdXJjZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gcmVzdWx0OyByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzbmFwc2hvdCAoMSknLCBlcnJvcik7IHJlamVjdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgZ2V0IHNuYXBzaG90ICgyKScsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgZ2V0IHNuYXBzaG90ICgzKScsIGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc25hcHNob3QgaW5uZXIgZXJyb3InLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBfZ2V0TG9ncyhuYW1lKSB7XHJcbiAgICAvLyAgICAgaWYgKCFOT19MT0dTX0NPTU1BTkRTLmluY2x1ZGVzKG5hbWUpKSB7XHJcbiAgICAvLyAgICAgICAgIHJldHVybiB0aGlzLmdldExvZ3MoKTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyB9XHJcblxyXG4gICAgX2FkanVzdEFwcGl1bUxvZyhsb2csIHNyYykge1xyXG4gICAgICAgIGlmICghbG9nIHx8IHR5cGVvZiBsb2cgIT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUT0RPOiBjb252ZXJ0IGxvZy50aW1lc3RhbXAgZnJvbSB0aGUgZGV2aWNlIHRpbWUgem9uZSB0byB0aGUgbG9jYWwgb25lIChzbyB3ZSBjYW4gbGF0ZXIgY29ycmVsYXRlIGJldHdlZW4gc3RlcHMgYW5kIGxvZ3MpICAgICAgICBcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB0aW1lOiBsb2cudGltZXN0YW1wLFxyXG4gICAgICAgICAgICBtc2c6IGxvZy5tZXNzYWdlLFxyXG4gICAgICAgICAgICBsZXZlbDogbG9nLmxldmVsLFxyXG4gICAgICAgICAgICBzcmM6IHNyY1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgX2l0ZXJhdGlvblN0YXJ0KCkge1xyXG4gICAgICAgIC8vIGNsZWFyIHRyYW5zYWN0aW9uIG5hbWUgc2F2ZWQgaW4gcHJldmlvdXMgaXRlcmF0aW9uIGlmIGFueVxyXG4gICAgICAgIGdsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2l0ZXJhdGlvbkVuZChlcnJvcikge1xyXG4gICAgICAgIGlmIChlcnJvciAmJiBlcnJvci50eXBlID09PSBlcnJvckhlbHBlci5lcnJvckNvZGUuQVBQSVVNX1NFU1NJT05fVElNRU9VVCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVuaXVtU2Vzc2lvblRpbWVvdXQgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlbml1bVNlc3Npb25UaW1lb3V0ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGlnbm9yZSB0aGUgcmVzdCBpZiBtb2IgbW9kdWxlIGlzIG5vdCBpbml0aWFsaXplZFxyXG4gICAgICAgIGlmICghdGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29sbGVjdCBhbGwgdGhlIGRldmljZSBsb2dzIGZvciB0aGlzIHNlc3Npb25cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNvbGxlY3REZXZpY2VMb2dzKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsb2dzID0gYXdhaXQgdGhpcy5nZXREZXZpY2VMb2dzKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobG9ncyAmJiBBcnJheS5pc0FycmF5KGxvZ3MpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgbG9nIG9mIGxvZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ycy5sb2dzLnB1c2godGhpcy5fYWRqdXN0QXBwaXVtTG9nKGxvZywgJ2RldmljZScpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnNcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgcmV0cmlldmUgZGV2aWNlIGxvZ3MuJywgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGNvbGxlY3QgYWxsIHRoZSBicm93c2VyIGxvZ3MgZm9yIHRoaXMgc2Vzc2lvblxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29sbGVjdEJyb3dzZXJMb2dzKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsb2dzID0gYXdhaXQgdGhpcy5nZXRCcm93c2VyTG9ncygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvZ3MgJiYgQXJyYXkuaXNBcnJheShsb2dzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGxvZyBvZiBsb2dzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucnMubG9ncy5wdXNoKHRoaXMuX2FkanVzdEFwcGl1bUxvZyhsb2csICdicm93c2VyJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCByZXRyaWV2ZSBicm93c2VyIGxvZ3MuJywgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGNvbGxlY3QgYWxsIEFwcGl1bSBsb2dzIGZvciB0aGlzIHNlc3Npb25cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNvbGxlY3RBcHBpdW1Mb2dzKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsb2dzID0gdGhpcy5nZXRBcHBpdW1Mb2dzKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobG9ncyAmJiBBcnJheS5pc0FycmF5KGxvZ3MpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbG9nRW50cnkgb2YgbG9ncykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJzLmxvZ3MucHVzaCh0aGlzLl9hZGp1c3RBcHBpdW1Mb2cobG9nRW50cnksICdhcHBpdW0nKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3JzXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IHJldHJpZXZlIEFwcGl1bSBsb2dzLicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5kcml2ZXIucHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLkJST1dTRVJTVEFDSykge1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0VXJsID0gYXdhaXQgdGhpcy5fZ2V0QnJvd3NlclN0YWNrUmVzdWx0VXJsKCk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHRVcmwpIHtcclxuICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSB3cml0dGVuIHRvIGNvbnRleHQucmVzdWx0RGF0YSBpbnN0ZWFkXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJzLmF0dHJpYnV0ZXNbJ0Jyb3dzZXJTdGFja1VybCddID0gcmVzdWx0VXJsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9nZXRXZGlvTG9jYXRvcihsb2NhdG9yKSB7XHJcbiAgICAgICAgaWYgKCFsb2NhdG9yKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCAnSW52YWxpZCBhcmd1bWVudCAtIGxvY2F0b3Igbm90IHNwZWNpZmllZCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIGxvY2F0b3IgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBsb2NhdG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobG9jYXRvci5pbmRleE9mKCcvJykgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGxvY2F0b3I7IC8vIGxlYXZlIHhwYXRoIGxvY2F0b3IgYXMgaXNcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcGxhdGZvcm0gPSB0aGlzLmNhcHMgJiYgdGhpcy5jYXBzLnBsYXRmb3JtTmFtZSA/IHRoaXMuY2Fwcy5wbGF0Zm9ybU5hbWUudG9Mb3dlckNhc2UoKSA6IG51bGw7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmFwcENvbnRleHQgPT09ICdOQVRJVkVfQVBQJyAmJiBwbGF0Zm9ybSA9PT0gJ2FuZHJvaWQnKSB7XHJcbiAgICAgICAgICAgIGlmIChsb2NhdG9yLmluZGV4T2YoJ2lkPScpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBwcmVwZW5kIHBhY2thZ2UgbmFtZSBpZiBpdCdzIG5vdCBzcGVjaWZpZWRcclxuICAgICAgICAgICAgICAgIC8vIE5PVEU6IGdldEN1cnJlbnRQYWNrYWdlKCkgc2VlbXMgdG8gY3Jhc2ggcG9zc2libHkgZHVlIHRvIGEgd2RpbyBidWcuIFxyXG4gICAgICAgICAgICAgICAgLy8gICAgICAgc28gd2UgZ2V0IHBhY2thZ2UgbmFtZSBmcm9tIGNhcHMgaW5zdGVhZC5cclxuICAgICAgICAgICAgICAgIGxvY2F0b3IgPSBsb2NhdG9yLnN1YnN0cignaWQ9Jy5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvY2F0b3IuaW5kZXhPZignOmlkLycpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvY2F0b3IgPSB0aGlzLmNhcHMuYXBwUGFja2FnZSArICc6aWQvJyArIGxvY2F0b3I7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2FuZHJvaWQ9bmV3IFVpU2VsZWN0b3IoKS5yZXNvdXJjZUlkKFwiJyArIGxvY2F0b3IgKyAnXCIpJztcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ2NsYXNzPScpID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdhbmRyb2lkPW5ldyBVaVNlbGVjdG9yKCkuY2xhc3NOYW1lKFwiJyArIGxvY2F0b3Iuc3Vic3RyKCdjbGFzcz0nLmxlbmd0aCkgKyAnXCIpJztcclxuICAgICAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCd0ZXh0PScpID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdhbmRyb2lkPW5ldyBVaVNlbGVjdG9yKCkudGV4dChcIicgKyBsb2NhdG9yLnN1YnN0cigndGV4dD0nLmxlbmd0aCkgKyAnXCIpJztcclxuICAgICAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCd0ZXh0LWNvbnRhaW5zPScpID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdhbmRyb2lkPW5ldyBVaVNlbGVjdG9yKCkudGV4dENvbnRhaW5zKFwiJyArIGxvY2F0b3Iuc3Vic3RyKCd0ZXh0LWNvbnRhaW5zPScubGVuZ3RoKSArICdcIiknO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ2Rlc2M9JykgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2FuZHJvaWQ9bmV3IFVpU2VsZWN0b3IoKS5kZXNjcmlwdGlvbihcIicgKyBsb2NhdG9yLnN1YnN0cignZGVzYz0nLmxlbmd0aCkgKyAnXCIpJztcclxuICAgICAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdkZXNjLWNvbnRhaW5zPScpID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdhbmRyb2lkPW5ldyBVaVNlbGVjdG9yKCkuZGVzY3JpcHRpb25Db250YWlucyhcIicgKyBsb2NhdG9yLnN1YnN0cignZGVzYy1jb250YWlucz0nLmxlbmd0aCkgKyAnXCIpJztcclxuICAgICAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdzY3JvbGxhYmxlJykgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2FuZHJvaWQ9bmV3IFVpU2VsZWN0b3IoKS5zY3JvbGxhYmxlKHRydWUpJztcclxuICAgICAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCd+JykgPT09IDApICAgIC8vIGFjY2Vzc2liaWxpdHkgaWRcclxuICAgICAgICAgICAgICAgIHJldHVybiBsb2NhdG9yO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5hcHBDb250ZXh0ID09PSAnTkFUSVZFX0FQUCcgJiYgcGxhdGZvcm0gPT09ICdpb3MnKSB7XHJcbiAgICAgICAgICAgIGlmIChsb2NhdG9yLmluZGV4T2YoJ34nKSA9PT0gMCkgLy8gYWNjZXNzaWJpbGl0eSBpZFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2F0b3I7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmFwcENvbnRleHQgIT09ICdOQVRJVkVfQVBQJykgeyAgICAgICAgICAgIC8vIEh5YnJpZCBvciBXZWIgYXBwbGljYXRpb25cclxuICAgICAgICAgICAgaWYgKGxvY2F0b3IuaW5kZXhPZignaWQ9JykgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJyMnICsgbG9jYXRvci5zdWJzdHIoJ2lkPScubGVuZ3RoKTsgICAgICAvLyBjb252ZXJ0ICdpZD0nIHRvICcjJ1xyXG4gICAgICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ25hbWU9JykgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1tuYW1lPScgKyBsb2NhdG9yLnN1YnN0cignbmFtZT0nLmxlbmd0aCkgKyAnXSc7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignbGluaz0nKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiAnPScgKyBsb2NhdG9yLnN1YnN0cignbGluaz0nLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignbGluay1jb250YWlucz0nKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiAnKj0nICsgbG9jYXRvci5zdWJzdHIoJ2xpbms9Jy5sZW5ndGgpO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ2Nzcz0nKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiBsb2NhdG9yLnN1YnN0cignY3NzPScubGVuZ3RoKTsgICAgICAgICAgIC8vIGluIGNhc2Ugb2YgY3NzLCBqdXN0IHJlbW92ZSBjc3M9IHByZWZpeFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGxvY2F0b3I7XHJcbiAgICB9XHJcblxyXG4gICAgX2xvYWRIZWxwZXJGdW5jdGlvbnMoKSB7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldFdkaW9Mb2NhdG9yID0gdGhpcy5fZ2V0V2Rpb0xvY2F0b3I7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLm1hdGNoUGF0dGVybiA9IG1vZFV0aWxzLm1hdGNoUGF0dGVybjtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0RWxlbWVudCA9IG1vZFV0aWxzLmdldEVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldEVsZW1lbnRzID0gbW9kVXRpbHMuZ2V0RWxlbWVudHM7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldENoaWxkRWxlbWVudCA9IG1vZFV0aWxzLmdldENoaWxkRWxlbWVudDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0Q2hpbGRFbGVtZW50cyA9IG1vZFV0aWxzLmdldENoaWxkRWxlbWVudHM7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLnNldFRpbWVvdXRJbXBsaWNpdCA9IG1vZFV0aWxzLnNldFRpbWVvdXRJbXBsaWNpdDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdCA9IG1vZFV0aWxzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50ID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmcgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudE51bWJlciA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZTtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRCb29sID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnRCb29sO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudFRpbWVvdXQgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudFRpbWVvdXQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydENvbnRleHQgPSBtb2RVdGlscy5hc3NlcnRDb250ZXh0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5jb250ZXh0TGlzdCA9IG1vZFV0aWxzLmNvbnRleHRMaXN0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRMb2dUeXBlcyA9IG1vZFV0aWxzLmdldExvZ1R5cGVzO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRlbGV0ZVNlc3Npb24oKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZHJpdmVyICYmIHRoaXMuZHJpdmVyLmRlbGV0ZVNlc3Npb24pIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLmRlbGV0ZVNlc3Npb24oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ2RlbGV0ZVNlc3Npb24gZXJyb3InLCBlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3NldEJyb3dzZXJTdGFja1Jlc3VsdFN0YXR1cyhzdGF0dXMpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAvLyBkaWZmZXJlbnQgQVBJcyBhcmUgdXNlZCBkZXBlbmRpbmcgb24gdGVzdCB0eXBlLlxyXG4gICAgICAgICAgICAvLyBodHRwczovL3d3dy5icm93c2Vyc3RhY2suY29tL2RvY3MvYXV0b21hdGUvYXBpLXJlZmVyZW5jZS9zZWxlbml1bS9zZXNzaW9uI3NldC10ZXN0LXN0YXR1c1xyXG4gICAgICAgICAgICAvLyBodHRwczovL3d3dy5icm93c2Vyc3RhY2suY29tL2RvY3MvYXBwLWF1dG9tYXRlL2FwaS1yZWZlcmVuY2UvYXBwaXVtL3Nlc3Npb25zI3VwZGF0ZS1zZXNzaW9uLXN0YXR1c1xyXG4gICAgICAgICAgICBjb25zdCBic0FwaVVybCA9IHRoaXMud2Rpb09wdHMuY2FwYWJpbGl0aWVzWydhcHBpdW06YXBwJ10gP1xyXG4gICAgICAgICAgICAgIGBodHRwczovL2FwaS1jbG91ZC5icm93c2Vyc3RhY2suY29tL2FwcC1hdXRvbWF0ZS9zZXNzaW9ucy8ke3RoaXMuZHJpdmVyLnNlc3Npb25JZH0uanNvbmAgOlxyXG4gICAgICAgICAgICAgIGBodHRwczovL2FwaS5icm93c2Vyc3RhY2suY29tL2F1dG9tYXRlL3Nlc3Npb25zLyR7dGhpcy5kcml2ZXIuc2Vzc2lvbklkfS5qc29uYDtcclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAvLyBzZXQgdGVzdCBzdGF0dXNcclxuICAgICAgICAgICAgICAgIHJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIHVybDogYnNBcGlVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUFVUJyxcclxuICAgICAgICAgICAgICAgICAgICBqc29uOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9keToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyA9PT0gJ1BBU1NFRCcgPyAncGFzc2VkJyA6ICdmYWlsZWQnXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAnYXV0aCc6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3VzZXInOiB0aGlzLndkaW9PcHRzLmNhcGFiaWxpdGllc1snYnN0YWNrOm9wdGlvbnMnXS51c2VyTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3Bhc3MnOiB0aGlzLndkaW9PcHRzLmNhcGFiaWxpdGllc1snYnN0YWNrOm9wdGlvbnMnXS5hY2Nlc3NLZXksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdzZW5kSW1tZWRpYXRlbHknOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sIChlcnIsIHJlcywgYm9keSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Vycm9yIHNldHRpbmcgQnJvd3NlclN0YWNrIHRlc3QgcmVzdWx0IHN0YXR1czogJyArIGVyci50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdFcnJvciBzZXR0aW5nIEJyb3dzZXJTdGFjayB0ZXN0IHJlc3VsdCBzdGF0dXM6ICcgKyBlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2dldEJyb3dzZXJTdGFja1Jlc3VsdFVybCgpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAvLyBkaWZmZXJlbnQgQVBJcyBhcmUgdXNlZCBkZXBlbmRpbmcgb24gdGVzdCB0eXBlLlxyXG4gICAgICAgICAgICAvLyBodHRwczovL3d3dy5icm93c2Vyc3RhY2suY29tL2RvY3MvYXV0b21hdGUvYXBpLXJlZmVyZW5jZS9zZWxlbml1bS9zZXNzaW9uI3NldC10ZXN0LXN0YXR1c1xyXG4gICAgICAgICAgICAvLyBodHRwczovL3d3dy5icm93c2Vyc3RhY2suY29tL2RvY3MvYXBwLWF1dG9tYXRlL2FwaS1yZWZlcmVuY2UvYXBwaXVtL3Nlc3Npb25zI3VwZGF0ZS1zZXNzaW9uLXN0YXR1c1xyXG4gICAgICAgICAgICBjb25zdCBic0FwaVVybCA9IHRoaXMud2Rpb09wdHMuY2FwYWJpbGl0aWVzWydhcHBpdW06YXBwJ10gP1xyXG4gICAgICAgICAgICAgIGBodHRwczovL2FwaS1jbG91ZC5icm93c2Vyc3RhY2suY29tL2FwcC1hdXRvbWF0ZS9zZXNzaW9ucy8ke3RoaXMuZHJpdmVyLnNlc3Npb25JZH0uanNvbmAgOlxyXG4gICAgICAgICAgICAgIGBodHRwczovL2FwaS5icm93c2Vyc3RhY2suY29tL2F1dG9tYXRlL3Nlc3Npb25zLyR7dGhpcy5kcml2ZXIuc2Vzc2lvbklkfS5qc29uYDtcclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAvLyByZXRyZWl2ZSBCUyB0ZXN0IHJlc3VsdCB1cmxcclxuICAgICAgICAgICAgICAgIHJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIHVybDogYnNBcGlVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICAgICAgICAgICAgICBqc29uOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2F1dGgnOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICd1c2VyJzogdGhpcy53ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpvcHRpb25zJ10udXNlck5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdwYXNzJzogdGhpcy53ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpvcHRpb25zJ10uYWNjZXNzS2V5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnc2VuZEltbWVkaWF0ZWx5JzogZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LCAoZXJyLCByZXMsIGJvZHkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdFcnJvciBnZXR0aW5nIEJyb3dzZXJTdGFjayB0ZXN0IHJlc3VsdCB1cmw6ICcgKyBlcnIudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGJvZHk/LmF1dG9tYXRpb25fc2Vzc2lvbj8uYnJvd3Nlcl91cmwpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRXJyb3IgZ2V0dGluZyBCcm93c2VyU3RhY2sgdGVzdCByZXN1bHQgdXJsOiAnICsgZS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxZQUFZOztBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXpDQUEsTUFBQSxDQUFBQyxjQUFBLENBQUFDLE9BQUE7RUFBQUMsS0FBQTtBQUFBO0FBQUFELE9BQUEsQ0FBQUUsT0FBQTtBQUFBQyxPQUFBO0FBMENBLElBQUFDLElBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLElBQUEsR0FBQUMsdUJBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFLLGdCQUFBLEdBQUFILHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBTSxNQUFBLEdBQUFKLHNCQUFB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
675
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImRlZmF1bHQiLCJyZXF1aXJlIiwiX3VybCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJ3ZGlvIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfV2ViRHJpdmVyTW9kdWxlIiwiX3V0aWxzIiwiX2hlbHBlciIsIl9PeHlnZW5FcnJvciIsIl9wZXJmZWN0b1JlcG9ydGluZyIsIl9yZXF1ZXN0IiwiX2ltZ01lcmdlIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiTU9EVUxFX05BTUUiLCJERUZBVUxUX0FQUElVTV9VUkwiLCJERUZBVUxUX0JST1dTRVJfTkFNRSIsIk5PX1NDUkVFTlNIT1RfQ09NTUFORFMiLCJOT19TTkFQU0hPVF9DT01NQU5EUyIsIkFDVElPTl9DT01NQU5EUyIsIkRFRkFVTFRfV0FJVF9USU1FT1VUIiwiTW9iaWxlTW9kdWxlIiwiV2ViRHJpdmVyTW9kdWxlIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwiY29udGV4dCIsInJzIiwibG9nZ2VyIiwibW9kdWxlcyIsInNlcnZpY2VzIiwidHJhbnNhY3Rpb25zIiwibGFzdE5hdmlnYXRpb25TdGFydFRpbWUiLCJuZXR3b3JrUmVxdWVzdHMiLCJoZWxwZXJzIiwiYXBwQ29udGV4dCIsIl9sb2FkSGVscGVyRnVuY3Rpb25zIiwiT3hFcnJvciIsImVyckhlbHBlciIsIndhaXRGb3JUaW1lb3V0IiwibmFtZSIsImdldERyaXZlciIsImdldENhcGFiaWxpdGllcyIsImNhcHMiLCJpbml0IiwiYXBwaXVtVXJsIiwiaXNJbml0aWFsaXplZCIsImRyaXZlciIsInJlb3BlblNlc3Npb24iLCJkZWJ1ZyIsInJlbG9hZFNlc3Npb24iLCJfaXNJbml0aWFsaXplZCIsImN0eCIsInBsYXRmb3JtTmFtZSIsInBsYXRmb3JtVmVyc2lvbiIsImRldmljZU5hbWUiLCJicm93c2VyTmFtZSIsImF1dG9tYXRpb25OYW1lIiwidWRpZCIsImFwcCIsImVuYWJsZUFwcGl1bUJlaGF2aW9yIiwidXNlQXBwaXVtRm9yV2ViIiwiY29sbGVjdERldmljZUxvZ3MiLCJhcHBQYWNrYWdlIiwiYnVuZGxlSWQiLCJ0b0xvd2VyQ2FzZSIsInJlY29yZEhBUiIsImJyb3dzZXIiLCJwZXJmb3JtYW5jZSIsInVybCIsIlVSTCIsInBhcnNlIiwicHJvdG9jb2wiLCJyZXBsYWNlIiwiaG9zdCIsImhvc3RuYW1lIiwicG9ydCIsInBhcnNlSW50IiwicGF0aCIsInBhdGhuYW1lIiwiYXV0aCIsInNwbGl0Iiwid2Rpb09wdHMiLCJ1c2VyIiwia2V5IiwiY2FwYWJpbGl0aWVzIiwibG9nTGV2ZWwiLCJydW5uZXIiLCJ3YWl0Zm9yVGltZW91dCIsImNvbm5lY3Rpb25SZXRyeVRpbWVvdXQiLCJjb25uZWN0aW9uUmV0cnlDb3VudCIsInByb3ZpZGVyIiwibW9kVXRpbHMiLCJkZXRlcm1pbmVQcm92aWRlciIsIkJST1dTRVJTVEFDSyIsImVucmljaFByb3ZpZGVyV2Rpb09wdGlvbnMiLCJyZW1vdGUiLCJpbmZvIiwic2Vzc2lvbklkIiwic2VsZW5pdW1Ccm93c2VyVGltZW91dCIsInNlbGVuaXVtVGltZW91dCIsIlBFUkZFQ1RPIiwicGVyZmVjdG9FeGVjdXRpb25Db250ZXh0IiwicGVyZmVjdG9SZXBvcnRpbmciLCJQZXJmZWN0byIsIlBlcmZlY3RvRXhlY3V0aW9uQ29udGV4dCIsIndlYmRyaXZlciIsImV4ZWN1dGVTY3JpcHQiLCJjb21tYW5kIiwicGFyYW1zIiwiZXhlY3V0ZSIsInJlcG9ydGluZ0NsaWVudCIsIlBlcmZlY3RvUmVwb3J0aW5nQ2xpZW50IiwidGVzdFN0YXJ0IiwiZ2V0QXBwaXVtSW5pdEVycm9yIiwiZ2V0Q29udGV4dCIsInNldFdlYlZpZXdDb250ZXh0Iiwic2V0VGltZW91dCIsIm92ZXJ3cml0ZVdkaW9Db21tYW5kcyIsImRpc3Bvc2UiLCJzdGF0dXMiLCJzdGVwcyIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsImZhaWxlZEZpbmRlZCIsImZpbmQiLCJpdGVtIiwidG9VcHBlckNhc2UiLCJ0ZXN0U3RvcCIsIkNvbnN0YW50cyIsInJlc3VsdHMiLCJwYXNzZWQiLCJmYWlsZWQiLCJkZWxldGVTZXNzaW9uIiwiX3NldEJyb3dzZXJTdGFja1Jlc3VsdFN0YXR1cyIsImluY2x1ZGVzIiwic2VsZW5pdW1TZXNzaW9uVGltZW91dCIsInRyYW5zYWN0aW9uIiwidG9TdHJpbmciLCJzbGljZSIsImdsb2JhbCIsIl9sYXN0VHJhbnNhY3Rpb25OYW1lIiwiX2lzQWN0aW9uIiwiX3Rha2VTY3JlZW5zaG90U2lsZW50IiwiZXJyb3IiLCJfdGhpcyRkcml2ZXIiLCJ0YWtlU2NyZWVuc2hvdCIsInJldHZhbCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0Iiwid2FpdFVudGlsUmV0VmFsIiwid2FpdFVudGlsIiwiaW1hZ2VzIiwicHVzaEltYWdlVG9JbWFnZXMiLCJmZXRjaFRpdGxlIiwiaW1hZ2UiLCJ0aXRsZSIsImdldFRpdGxlIiwidGV4dFRvSW1hZ2UiLCJ0aXRsZUltYWdlIiwiZ2VuZXJhdGUiLCJwdXNoIiwiaXNXZWJWaWV3Q29udGV4dCIsImhhbmRsZXMiLCJnZXRXaW5kb3dIYW5kbGVzIiwiaGFuZGxlIiwic3dpdGNoVG9XaW5kb3ciLCJtZXJnZWRJbWFnZSIsIm1lcmdlSW1hZ2VzIiwiZGlyZWN0aW9uIiwidGltZW91dCIsInRoZW4iLCJjYXRjaCIsImVyciIsIl90YWtlU25hcHNob3RTaWxlbnQiLCJnZXRQYWdlU291cmNlIiwicmVzdWx0IiwiX2FkanVzdEFwcGl1bUxvZyIsImxvZyIsInNyYyIsInRpbWUiLCJ0aW1lc3RhbXAiLCJtc2ciLCJtZXNzYWdlIiwibGV2ZWwiLCJfaXRlcmF0aW9uU3RhcnQiLCJfaXRlcmF0aW9uRW5kIiwidHlwZSIsImVycm9ySGVscGVyIiwiZXJyb3JDb2RlIiwiQVBQSVVNX1NFU1NJT05fVElNRU9VVCIsImxvZ3MiLCJnZXREZXZpY2VMb2dzIiwiY29sbGVjdEJyb3dzZXJMb2dzIiwiZ2V0QnJvd3NlckxvZ3MiLCJjb2xsZWN0QXBwaXVtTG9ncyIsImdldEFwcGl1bUxvZ3MiLCJsb2dFbnRyeSIsInJlc3VsdFVybCIsIl9nZXRCcm93c2VyU3RhY2tSZXN1bHRVcmwiLCJhdHRyaWJ1dGVzIiwiX2dldFdkaW9Mb2NhdG9yIiwibG9jYXRvciIsIlNDUklQVF9FUlJPUiIsImluZGV4T2YiLCJwbGF0Zm9ybSIsInN1YnN0ciIsImdldFdkaW9Mb2NhdG9yIiwibWF0Y2hQYXR0ZXJuIiwiZ2V0RWxlbWVudCIsImdldEVsZW1lbnRzIiwiZ2V0Q2hpbGRFbGVtZW50IiwiZ2V0Q2hpbGRFbGVtZW50cyIsInNldFRpbWVvdXRJbXBsaWNpdCIsInJlc3RvcmVUaW1lb3V0SW1wbGljaXQiLCJhc3NlcnRBcmd1bWVudCIsImFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmciLCJhc3NlcnRBcmd1bWVudE51bWJlciIsImFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUiLCJhc3NlcnRBcmd1bWVudEJvb2wiLCJhc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbCIsImFzc2VydEFyZ3VtZW50VGltZW91dCIsImFzc2VydENvbnRleHQiLCJjb250ZXh0TGlzdCIsImdldExvZ1R5cGVzIiwiYnNBcGlVcmwiLCJyZXF1ZXN0IiwibWV0aG9kIiwianNvbiIsInJlamVjdFVuYXV0aG9yaXplZCIsImJvZHkiLCJ1c2VyTmFtZSIsImFjY2Vzc0tleSIsInJlcyIsIl9ib2R5JGF1dG9tYXRpb25fc2VzcyIsImF1dG9tYXRpb25fc2Vzc2lvbiIsImJyb3dzZXJfdXJsIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL294X21vZHVsZXMvbW9kdWxlLW1vYi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbid1c2Ugc3RyaWN0JztcclxuLyoqXHJcbiAqIEBuYW1lIG1vYlxyXG4gKiBAZGVzY3JpcHRpb24gUHJvdmlkZXMgbWV0aG9kcyBmb3IgbW9iaWxlIGF1dG9tYXRpb24uXHJcbiAqIEBzYW1wbGUgKipMb2NhdG9yczoqKiAgXHJcbiAqIFxyXG4gKiBOYXRpdmUgYXBwbGljYXRpb24gbG9jYXRvcnMgZm9yIVtdKC4uLy4uLy5naXRib29rL2Fzc2V0cy9hbmRyb2lkLnBuZykgIFxyXG4gKiAqIGAvWFBBVEhgIC0gTG9jYXRlcyBlbGVtZW50IHVzaW5nIGFuIFhQYXRoIDEuMCBleHByZXNzaW9uLlxyXG4gKiAqIGB+QUNDRVNTSUJJTElUWV9JRGAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIEFjY2Vzc2liaWxpdHkgSWQuXHJcbiAqICogYGlkPUlEYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgaWQuXHJcbiAqICogYGNsYXNzPUNMQVNTYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgY2xhc3MuXHJcbiAqICogYHRleHQ9VEVYVGAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIHZpc2libGUgdGV4dC5cclxuICogKiBgdGV4dC1jb250YWlucz1URVhUYCAtIExvY2F0ZXMgZWxlbWVudCB3aG9zZSB2aXNpYmxlIHRleHQgY29udGFpbnMgdGhlIHNwZWNpZmllZCBzdHJpbmcuXHJcbiAqICogYGRlc2M9REVTQ1JJUFRJT05gIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBkZXNjcmlwdGlvbi5cclxuICogKiBgZGVzYy1jb250YWlucz1ERVNDUklQVElPTmAgLSBMb2NhdGVzIGVsZW1lbnQgd2hvc2UgZGVzY3JpcHRpb24gY29udGFpbnMgdGhlIHNwZWNpZmllZCBzdHJpbmcuXHJcbiAqICogYHNjcm9sbGFibGVgIC0gTG9jYXRlcyBlbGVtZW50cyB0aGF0IGFyZSBzY3JvbGxhYmxlLiAgXHJcbiAqICBcclxuICogTmF0aXZlIGFwcGxpY2F0aW9uIGxvY2F0b3JzIGZvciFbXSguLi8uLi8uZ2l0Ym9vay9hc3NldHMvYXBwbGUucG5nKSAgXHJcbiAqICBcclxuICogKiBgL1hQQVRIYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhbiBYUGF0aCAxLjAgZXhwcmVzc2lvbi5cclxuICogKiBgaWQ9SURgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBJRC5cclxuICogKiBgfkFDQ0VTU0lCSUxJVFlfSURgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBBY2Nlc3NpYmlsaXR5IElkLiAgXHJcbiAqICogYC1pb3MgcHJlZGljYXRlIHN0cmluZzpQUkVESUNBVEVfU1RSSU5HYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhIFtwcmVkaWNhdGUgcXVlcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9va2FyY2hpdmUvV2ViRHJpdmVyQWdlbnQvd2lraS9QcmVkaWNhdGUtUXVlcmllcy1Db25zdHJ1Y3Rpb24tUnVsZXMpLiAgXHJcbiAqICogYC1pb3MgY2xhc3MgY2hhaW46Q0xBU1NfQ0hBSU5gIC0gTG9jYXRlcyBlbGVtZW50IHVzaW5nIGEgW2NsYXNzIGNoYWluIGV4cHJlc3Npb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9va2FyY2hpdmUvV2ViRHJpdmVyQWdlbnQvd2lraS9DbGFzcy1DaGFpbi1RdWVyaWVzLUNvbnN0cnVjdGlvbi1SdWxlcykuICBcclxuICogIFxyXG4gKiBIeWJyaWQhW10oLi4vLi4vLmdpdGJvb2svYXNzZXRzL2h5YnJpZC5wbmcpICBhbmQgV2ViIVtdKC4uLy4uLy5naXRib29rL2Fzc2V0cy93ZWIucG5nKSAgYXBwbGljYXRpb24gbG9jYXRvcnMgZm9yIVtdKC4uLy4uLy5naXRib29rL2Fzc2V0cy9hbmRyb2lkLnBuZykgICFbXSguLi8uLi8uZ2l0Ym9vay9hc3NldHMvYXBwbGUucG5nKSAgXHJcbiAqICBcclxuICogKiBgL1hQQVRIYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhbiBYUGF0aCAxLjAgZXhwcmVzc2lvbi5cclxuICogKiBgaWQ9SURgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBpZC5cclxuICogKiBgbmFtZT1OQU1FYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgbmFtZSBhdHRyaWJ1dGUuXHJcbiAqICogYHRhZz1OQU1FYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgdGFnIG5hbWUuXHJcbiAqICogYGxpbms9VEVYVGAgLSBMb2NhdGVzIGFuY2hvciBlbGVtZW50IHdob3NlIHRleHQgbWF0Y2hlcyB0aGUgZ2l2ZW4gc3RyaW5nLlxyXG4gKiAqIGBsaW5rLWNvbnRhaW5zPVRFWFRgIC0gTG9jYXRlcyBhbmNob3IgZWxlbWVudCB3aG9zZSB0ZXh0IGNvbnRhaW5zIHRoZSBnaXZlbiBzdHJpbmcuXHJcbiAqICogYGNzcz1DU1NfU0VMRUNUT1JgIC0gTG9jYXRlcyBlbGVtZW50IHVzaW5nIGEgQ1NTIHNlbGVjdG9yLlxyXG4gKiBcclxuICogKipQYXR0ZXJuIGFyZ3VtZW50czoqKlxyXG4gKiBcclxuICogQ29tbWFuZHMgd2hpY2ggZXhwZWN0IGEgc3RyaW5nIG1hdGNoaW5nIHBhdHRlcm4gaW4gdGhlaXIgYXJndW1lbnRzLCBzdXBwb3J0IGZvbGxvd2luZyBwYXR0ZXJucyB1bmxlc3Mgc3BlY2lmaWVkIG90aGVyd2lzZTpcclxuICogXHJcbiAqICogYHJlZ2V4OlBBVFRFUk5gIC0gTWF0Y2ggdXNpbmcgcmVndWxhciBleHByZXNzaW9uLlxyXG4gKiAqIGBQQVRURVJOYCAtIFZlcmJhdGltIG1hdGNoaW5nLlxyXG4gKiBcclxuICovXHJcbmltcG9ydCBVUkwgZnJvbSAndXJsJztcclxuaW1wb3J0ICogYXMgd2RpbyBmcm9tICd3ZWJkcml2ZXJpbyc7XHJcbmltcG9ydCBXZWJEcml2ZXJNb2R1bGUgZnJvbSAnLi4vY29yZS9XZWJEcml2ZXJNb2R1bGUnO1xyXG5pbXBvcnQgbW9kVXRpbHMgZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCBlcnJIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcbmltcG9ydCBPeEVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbmltcG9ydCBwZXJmZWN0b1JlcG9ydGluZyBmcm9tICdwZXJmZWN0by1yZXBvcnRpbmcnO1xyXG5pbXBvcnQgcmVxdWVzdCBmcm9tICdyZXF1ZXN0JztcclxuaW1wb3J0IG1lcmdlSW1hZ2VzIGZyb20gJy4uL2xpYi9pbWctbWVyZ2UnO1xyXG5pbXBvcnQgZXJyb3JIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcblxyXG5jb25zdCBNT0RVTEVfTkFNRSA9ICdtb2InO1xyXG5jb25zdCBERUZBVUxUX0FQUElVTV9VUkwgPSAnaHR0cDovL2xvY2FsaG9zdDo0NzIzL3dkL2h1Yic7XHJcbmNvbnN0IERFRkFVTFRfQlJPV1NFUl9OQU1FID0gJ2RlZmF1bHQnO1xyXG5jb25zdCBOT19TQ1JFRU5TSE9UX0NPTU1BTkRTID0gWydpbml0JywgJ2Fzc2VydEFsZXJ0JywgJ2Rpc3Bvc2UnXTtcclxuY29uc3QgTk9fU05BUFNIT1RfQ09NTUFORFMgPSBbJ2luaXQnLCAnYXNzZXJ0QWxlcnQnLCAnZGlzcG9zZSddO1xyXG5jb25zdCBBQ1RJT05fQ09NTUFORFMgPSBbJ29wZW4nLCd0YXAnLCdjbGljaycsJ3N3aXBlJywnc3VibWl0Jywnc2V0VmFsdWUnXTtcclxuY29uc3QgREVGQVVMVF9XQUlUX1RJTUVPVVQgPSA2MCAqIDEwMDA7ICAgICAgICAgICAgLy8gZGVmYXVsdCA2MHMgd2FpdCB0aW1lb3V0XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNb2JpbGVNb2R1bGUgZXh0ZW5kcyBXZWJEcml2ZXJNb2R1bGUge1xyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpIHtcclxuICAgICAgICBzdXBlcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcyk7XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbnMgPSB7fTtcclxuICAgICAgICB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lID0gbnVsbDtcclxuICAgICAgICB0aGlzLm5ldHdvcmtSZXF1ZXN0cyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzID0ge307XHJcbiAgICAgICAgdGhpcy5hcHBDb250ZXh0ID0gJ05BVElWRV9BUFAnO1xyXG4gICAgICAgIHRoaXMuX2xvYWRIZWxwZXJGdW5jdGlvbnMoKTtcclxuICAgICAgICAvLyBzdXBwb3J0IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKHNvbWUgbW9kdWxlIGNvbW1hbmRzIG1pZ2h0IHJlZmVyIHRvIHRoaXMuT3hFcnJvciBhbmQgdGhpcy5lcnJIZWxwZXIpXHJcbiAgICAgICAgdGhpcy5PeEVycm9yID0gT3hFcnJvcjtcclxuICAgICAgICB0aGlzLmVyckhlbHBlciA9IGVyckhlbHBlcjtcclxuICAgICAgICAvLyBob2xkcyBlbGVtZW50IG9wZXJhdGlvbiB0aW1lb3V0IHZhbHVlXHJcbiAgICAgICAgdGhpcy53YWl0Rm9yVGltZW91dCA9IERFRkFVTFRfV0FJVF9USU1FT1VUO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBuYW1lKCkge1xyXG4gICAgICAgIHJldHVybiBNT0RVTEVfTkFNRTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBnZXREcml2ZXJcclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgdGhlIHVuZGVybHlpbmcgV0RJTyBkcml2ZXIuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFdESU8gZHJpdmVyLlxyXG4gICAgICovXHJcbiAgICBnZXREcml2ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldERyaXZlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGdldENhcGFiaWxpdGllc1xyXG4gICAgICogQHN1bW1hcnkgUmV0dXJucyBjdXJyZW50bHkgZGVmaW5lZCBjYXBhYmlsaXRpZXMuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEN1cnJlbnQgY2FwYWJpbGl0aWVzIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZ2V0Q2FwYWJpbGl0aWVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhcHMgfHwgc3VwZXIuZ2V0Q2FwYWJpbGl0aWVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gaW5pdFxyXG4gICAgICogQHN1bW1hcnkgSW5pdGlhbGl6ZXMgYSBuZXcgQXBwaXVtIHNlc3Npb24uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IGNhcHMgLSBEZXNpcmVkIGNhcGFiaWxpdGllcy4gSWYgbm90IHNwZWNpZmllZCBjYXBhYmlsaXRpZXMgd2lsbCBiZSB0YWtlbiBmcm9tIHN1aXRlIGRlZmluaXRpb24uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IGFwcGl1bVVybCAtIFJlbW90ZSBBcHBpdW0gc2VydmVyIFVSTCAoZGVmYXVsdDogaHR0cDovL2xvY2FsaG9zdDo0NzIzL3dkL2h1YikuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGluaXQoY2FwcywgYXBwaXVtVXJsKSB7XHJcbiAgICAgICAgLy8gaWYgcmVvcGVuU2Vzc2lvbiBpcyB0cnVlIC0gcmVpbml0aWxpemUgdGhlIG1vZHVsZVxyXG4gICAgICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZHJpdmVyICYmIHRoaXMub3B0aW9ucy5yZW9wZW5TZXNzaW9uICE9PSBmYWxzZSkgeyAvLyB0cnVlIG9yIGZhbHNlIGlmIGV4cGxpc2l0bHkgc2V0LiB0cnVlIG9uIG51bGwgb3IgdW5kZWZpbmVkLlxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ3Jlb3BlblNlc3Npb24gaXMgdHJ1ZSAtIHJlbG9hZGluZyB0aGUgc2Vzc2lvbi4uLicpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIucmVsb2FkU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnbW9iLmluaXQgd2FzIGNhbGxlZCBmb3IgYWxyZWFkeSBpbml0aWFsaXplZCBtb2R1bGUuIHJlb3BlblNlc3Npb24gaXMgZmFsc2Ugc28gdGhlIGNhbGwgaXMgaWdub3JlZC4nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgYmUgcmVmYWN0b3JlZFxyXG4gICAgICAgIGlmICh0aGlzLmN0eC5jYXBzICYmIHRoaXMuY3R4LmNhcHNbJ3BlcmZlY3RvTW9iaWxlOm9wdGlvbnMnXSkge1xyXG4gICAgICAgICAgICBpZiAoY2Fwcykge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGNhcHMucGxhdGZvcm1OYW1lO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGNhcHMucGxhdGZvcm1WZXJzaW9uO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGNhcHMuZGV2aWNlTmFtZTtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBjYXBzLmJyb3dzZXJOYW1lO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGNhcHMuYXV0b21hdGlvbk5hbWU7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgY2Fwcy51ZGlkO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjYXBzLmFwcCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhcHMuZW5hYmxlQXBwaXVtQmVoYXZpb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXBzLnVzZUFwcGl1bUZvcldlYiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY2Fwcy5lbmFibGVBcHBpdW1CZWhhdmlvciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eC5jYXBzLnVzZUFwcGl1bUZvcldlYiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0eC5jYXBzLmVuYWJsZUFwcGl1bUJlaGF2aW9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFhcHBpdW1VcmwpIHtcclxuICAgICAgICAgICAgYXBwaXVtVXJsID0gdGhpcy5vcHRpb25zLmFwcGl1bVVybCB8fCBERUZBVUxUX0FQUElVTV9VUkw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBtZXJnZSBjYXBhYmlsaXRpZXMgZnJvbSBjb250ZXh0IGFuZCBmcm9tIGluaXQgZnVuY3Rpb24gYXJndW1lbnQsIGdpdmUgcHJlZmVyZW5jZSB0byBjb250ZXh0LXBhc3NlZCBjYXBhYmlsaXRpZXNcclxuICAgICAgICB0aGlzLmNhcHMgPSB7fTtcclxuICAgICAgICBpZiAodGhpcy5jdHguY2Fwcykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMgPSB7IC4uLnRoaXMuY3R4LmNhcHMgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNhcHMpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzID0geyAuLi50aGlzLmNhcHMsIC4uLmNhcHMgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIG1ha2Ugc3VyZSB0byBjbGVhciB0aGUgZXhpc3RpbmcgZGV2aWNlIGxvZ3MsIGlmIGNvbGxlY3REZXZpY2VMb2dzIG9wdGlvbiBpcyB0cnVlICh3ZSB3YW50IHRvIGluY2x1ZGUgbG9ncyBvbmx5IHJlbGV2YW50IGZvciB0aGlzIHNlc3Npb24pXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb2xsZWN0RGV2aWNlTG9ncykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHNbJ2NsZWFyRGV2aWNlTG9nc09uU3RhcnQnXSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBpZiBib3RoIGJyb3dzZXJOYW1lIGFuZCBhcHBQYWNrYWdlL2FwcC9idW5kbGVJZCB3ZXJlIHNwZWNpZmllZCAtIGFzc3VtZSB3ZSB3YW50IHRvIHJ1biB0aGUgYXBwbGljYXRpb24gYW5kIHJlbW92ZSBicm93c2VyTmFtZVxyXG4gICAgICAgIGlmICh0aGlzLmNhcHMuYnJvd3Nlck5hbWUgJiYgKHRoaXMuY2Fwcy5hcHBQYWNrYWdlIHx8IHRoaXMuY2Fwcy5hcHAgfHwgdGhpcy5jYXBzLmJ1bmRsZUlkKSkge1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5jYXBzLmJyb3dzZXJOYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZiBubyBhcHBQYWNrYWdlL2FwcC9idW5kbGVJZCBjYXBhYmlsaXR5IG5vciBicm93c2VyTmFtZSBhcmUgZGVmaW5lZCwgYXNzdW1lIHdlIHdhbnQgdG8gcnVuIHRoZSB0ZXN0IGFnYWluc3QgZGVmYXVsdCBicm93c2VyXHJcbiAgICAgICAgZWxzZSBpZiAoIXRoaXMuY2Fwcy5icm93c2VyTmFtZSAmJiAhdGhpcy5jYXBzLmFwcFBhY2thZ2UgJiYgIXRoaXMuY2Fwcy5hcHAgJiYgIXRoaXMuY2Fwcy5idW5kbGVJZCkge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPSBERUZBVUxUX0JST1dTRVJfTkFNRTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gd2ViZHJpdmVyIGV4cGVjdHMgbG93ZXIgY2FzZSBuYW1lc1xyXG4gICAgICAgIGlmICh0aGlzLmNhcHMuYnJvd3Nlck5hbWUgJiYgdHlwZW9mIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID0gdGhpcy5jYXBzLmJyb3dzZXJOYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGFkanVzdCBjYXBhYmlsaXRpZXMgdG8gZW5hYmxlIGNvbGxlY3RpbmcgYnJvd3NlciBhbmQgcGVyZm9ybWFuY2Ugc3RhdHMgaW4gQ2hyb21lIFxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVjb3JkSEFSICYmIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gJ2Nocm9tZScpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzWydnb29nOmxvZ2dpbmdQcmVmcyddID0geyAgICAgLy8gZm9yIENocm9tZURyaXZlciA+PSA3NVxyXG4gICAgICAgICAgICAgICAgYnJvd3NlcjogJ0FMTCcsXHJcbiAgICAgICAgICAgICAgICBwZXJmb3JtYW5jZTogJ0FMTCdcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHBvcHVsYXRlIFdESU8gb3B0aW9uc1xyXG4gICAgICAgIGNvbnN0IHVybCA9IFVSTC5wYXJzZShhcHBpdW1VcmwpO1xyXG4gICAgICAgIGNvbnN0IHByb3RvY29sID0gdXJsLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpO1xyXG4gICAgICAgIGNvbnN0IGhvc3QgPSB1cmwuaG9zdG5hbWU7XHJcbiAgICAgICAgY29uc3QgcG9ydCA9IHBhcnNlSW50KHVybC5wb3J0IHx8IChwcm90b2NvbCA9PT0gJ2h0dHBzJyA/IDQ0MyA6IDgwKSk7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHVybC5wYXRobmFtZTtcclxuXHJcbiAgICAgICAgLy8gYXV0aCBpcyBuZWVkZWQgbW9zdGx5IGZvciBjbG91ZCBwcm92aWRlcnMgc3VjaCBhcyBMYW1iZGFUZXN0XHJcbiAgICAgICAgaWYgKHVybC5hdXRoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGF1dGggPSB1cmwuYXV0aC5zcGxpdCgnOicpO1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMud2Rpb09wdHMgPSB7XHJcbiAgICAgICAgICAgICAgICB1c2VyOiBhdXRoWzBdLFxyXG4gICAgICAgICAgICAgICAga2V5OiBhdXRoWzFdXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgd2Rpb09wdHMgPSB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMub3B0aW9ucy53ZGlvT3B0cyB8fCB7fSxcclxuICAgICAgICAgICAgcHJvdG9jb2w6IHByb3RvY29sLFxyXG4gICAgICAgICAgICBob3N0bmFtZTogaG9zdCxcclxuICAgICAgICAgICAgcG9ydDogcG9ydCxcclxuICAgICAgICAgICAgcGF0aDogcGF0aCxcclxuICAgICAgICAgICAgY2FwYWJpbGl0aWVzOiB0aGlzLmNhcHMsXHJcbiAgICAgICAgICAgIGxvZ0xldmVsOiAnc2lsZW50JyxcclxuICAgICAgICAgICAgcnVubmVyOiAncmVwbCcsXHJcbiAgICAgICAgICAgIHdhaXRmb3JUaW1lb3V0OiA1MDAwLCAvLyBpbmNyZWFzZSB0aGUgZGVmYXVsdCAzMDAwXHJcbiAgICAgICAgICAgIGNvbm5lY3Rpb25SZXRyeVRpbWVvdXQ6IDMxMCoxMDAwLFxyXG4gICAgICAgICAgICBjb25uZWN0aW9uUmV0cnlDb3VudDogMVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGxldCBwcm92aWRlciA9IG1vZFV0aWxzLmRldGVybWluZVByb3ZpZGVyKHdkaW9PcHRzKTtcclxuXHJcbiAgICAgICAgLy8gdXNlIGxhcmdlciB0aW1lb3V0IGZvciBCUyAoYmVjYXVzZSB0ZXN0IGNhbiB3YWl0IGluIEJTIHF1ZXVlIGlmIHRoZXJlIGFyZSBubyBzbG90cyBhdmFsYWJsZSBhdCB0aGF0IG1vbWVudClcclxuICAgICAgICBpZiAocHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLkJST1dTRVJTVEFDSykge1xyXG4gICAgICAgICAgICB3ZGlvT3B0cy5jb25uZWN0aW9uUmV0cnlUaW1lb3V0ID0gMTAqNjAqMTAwMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG5hbWUgPSBtb2RVdGlscy5lbnJpY2hQcm92aWRlcldkaW9PcHRpb25zKHByb3ZpZGVyLCB3ZGlvT3B0cyk7XHJcblxyXG4gICAgICAgIHRoaXMud2Rpb09wdHMgPSB3ZGlvT3B0cztcclxuXHJcbiAgICAgICAgLy8gaW5pdCB3ZWJkcml2ZXJcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLmRyaXZlciA9IGF3YWl0IHdkaW8ucmVtb3RlKHdkaW9PcHRzKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmluZm8oYFNlc3Npb24gSUQgJHt0aGlzLmRyaXZlci5zZXNzaW9uSWR9YCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRyaXZlci5wcm92aWRlciA9IHByb3ZpZGVyO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zZWxlbml1bUJyb3dzZXJUaW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5zZWxlbml1bUJyb3dzZXJUaW1lb3V0ID0gdGhpcy5vcHRpb25zLnNlbGVuaXVtQnJvd3NlclRpbWVvdXQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2VsZW5pdW1UaW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5zZWxlbml1bVRpbWVvdXQgPSB0aGlzLm9wdGlvbnMuc2VsZW5pdW1UaW1lb3V0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLlBFUkZFQ1RPKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwZXJmZWN0b0V4ZWN1dGlvbkNvbnRleHQgPSBhd2FpdCBuZXcgcGVyZmVjdG9SZXBvcnRpbmcuUGVyZmVjdG8uUGVyZmVjdG9FeGVjdXRpb25Db250ZXh0KHtcclxuICAgICAgICAgICAgICAgICAgICB3ZWJkcml2ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZVNjcmlwdDogYXN5bmMgKGNvbW1hbmQsIHBhcmFtcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZHJpdmVyLmV4ZWN1dGUoY29tbWFuZCwgcGFyYW1zKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRpbmdDbGllbnQgPSBuZXcgcGVyZmVjdG9SZXBvcnRpbmcuUGVyZmVjdG8uUGVyZmVjdG9SZXBvcnRpbmdDbGllbnQocGVyZmVjdG9FeGVjdXRpb25Db250ZXh0KTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVwb3J0aW5nQ2xpZW50LnRlc3RTdGFydChuYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5kcml2ZXIgPSBudWxsO1xyXG4gICAgICAgICAgICB0aHJvdyBlcnJIZWxwZXIuZ2V0QXBwaXVtSW5pdEVycm9yKGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hcHBDb250ZXh0ID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0Q29udGV4dCgpO1xyXG5cclxuICAgICAgICAvLyBpZiB3ZSBhcmUgcnVubmluZyBvbiBBbmRyb2lkIDcrIGVtdWxhdG9yLCBhbmQgdGh1cy9vciB1c2luZyBhIFdlYlZpZXcgQnJvd3NlciBUZXN0ZXIgLVxyXG4gICAgICAgIC8vIHBlcmZvcm0gYW4gYWN0dWFsIGFwcENvbnRleHQgc3dpdGNoIHRvIFdFQlxyXG4gICAgICAgIC8vIHNvIEFwcGl1bSB3aWxsIGRlbGVnYXRlIGNvbW1hbmRzIHRvIENocm9tZSBEcml2ZXIgaW5zdGVhZCBvZiBBcHBpdW0gRHJpdmVyXHJcbiAgICAgICAgaWYgKHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gICdjaHJvbWl1bS13ZWJ2aWV3Jykge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNldFdlYlZpZXdDb250ZXh0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLkJST1dTRVJTVEFDSykge1xyXG4gICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgLy8gZmFpbHMgb24gYnJvd3NlcnN0YWNrXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuc2V0VGltZW91dCh7ICdpbXBsaWNpdCc6IHRoaXMud2FpdEZvclRpbWVvdXQgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCBtb2RVdGlscy5vdmVyd3JpdGVXZGlvQ29tbWFuZHModGhpcy5kcml2ZXIpO1xyXG5cclxuICAgICAgICBzdXBlci5pbml0KHRoaXMuZHJpdmVyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBkaXNwb3NlXHJcbiAgICAgKiBAc3VtbWFyeSBFbmRzIHRoZSBjdXJyZW50IHNlc3Npb24uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IHN0YXR1cyAtIFRlc3Qgc3RhdHVzLCBlaXRoZXIgYHBhc3NlZGAgb3IgYGZhaWxlZGAuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGRpc3Bvc2Uoc3RhdHVzKSB7XHJcbiAgICAgICAgaWYgKCFzdGF0dXMpIHtcclxuICAgICAgICAgICAgc3RhdHVzID0gJ3Bhc3NlZCc7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5ycy5zdGVwcyAmJiBBcnJheS5pc0FycmF5KHRoaXMucnMuc3RlcHMpICYmIHRoaXMucnMuc3RlcHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmFpbGVkRmluZGVkID0gdGhpcy5ycy5zdGVwcy5maW5kKChpdGVtKSA9PiBpdGVtLnN0YXR1cyA9PT0gJ2ZhaWxlZCcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZhaWxlZEZpbmRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9ICdmYWlsZWQnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5kcml2ZXIgJiYgdGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHN0YXR1cyA9IHN0YXR1cy50b1VwcGVyQ2FzZSgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZHJpdmVyLnByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5QRVJGRUNUTykge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXBvcnRpbmdDbGllbnQudGVzdFN0b3Aoe1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogc3RhdHVzID09PSAnUEFTU0VEJyA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyZmVjdG9SZXBvcnRpbmcuQ29uc3RhbnRzLnJlc3VsdHMucGFzc2VkIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJmZWN0b1JlcG9ydGluZy5Db25zdGFudHMucmVzdWx0cy5mYWlsZWRcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcml2ZXIucHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLkJST1dTRVJTVEFDSykge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fc2V0QnJvd3NlclN0YWNrUmVzdWx0U3RhdHVzKHN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICghWydDQU5DRUxFRCcsICdGQUlMRUQnXS5pbmNsdWRlcyhzdGF0dXMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZW5pdW1TZXNzaW9uVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVsZXRlU2Vzc2lvbiB3aWxsIHRha2UgNSBtaW4gdG8gY2FsbFxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5kcml2ZXIgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lID0gbnVsbDtcclxuICAgICAgICAgICAgc3VwZXIuZGlzcG9zZSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBPcGVucyBuZXcgdHJhbnNhY3Rpb24uXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIHRyYW5zYWN0aW9uIHdpbGwgcGVyc2lzdCB0aWxsIGEgbmV3IG9uZSBpcyBvcGVuZWQuIFRyYW5zYWN0aW9uIG5hbWVzIG11c3QgYmUgdW5pcXVlLlxyXG4gICAgICogQGZ1bmN0aW9uIHRyYW5zYWN0aW9uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSAtIFRoZSB0cmFuc2FjdGlvbiBuYW1lLlxyXG4gICAgICogQGZvciBhbmRyb2lkLCBpb3MsIGh5YnJpZCwgd2ViXHJcbiAgICAgKi9cclxuICAgIHRyYW5zYWN0aW9uKG5hbWUpIHtcclxuICAgICAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBqdXN0IGluIGNhc2UgdXNlciBwYXNzZWQgYSBjb21wbGV4IG9iamVjdCBieSBtaXN0YWtlXHJcbiAgICAgICAgbmFtZSA9IG5hbWUudG9TdHJpbmcoKTtcclxuXHJcbiAgICAgICAgLy8gbGltaXQgdGhlIG5hbWUgbGVuZ3RoIChzaW5jZSB3ZSBjYW4ndCBzdG9yZSB2YWx1ZXMgbGFyZ2VyIHRoYW4gNTEyQiBpbiB0aGUgZGF0YWJhc2UpXHJcbiAgICAgICAgbmFtZSA9IG5hbWUuc2xpY2UoMCwgNTEyKTtcclxuXHJcbiAgICAgICAgZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lID0gbmFtZTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogUHJpdmF0ZVxyXG4gICAgICovXHJcblxyXG4gICAgX2lzQWN0aW9uKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gQUNUSU9OX0NPTU1BTkRTLmluY2x1ZGVzKG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIF90YWtlU2NyZWVuc2hvdFNpbGVudChuYW1lKSB7XHJcbiAgICAgICAgaWYgKCFOT19TQ1JFRU5TSE9UX0NPTU1BTkRTLmluY2x1ZGVzKG5hbWUpKSB7XHJcbiAgICAgICAgICAgIGxldCBlcnJvcjtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRyaXZlcj8udGFrZVNjcmVlbnNob3QpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmV0dmFsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLmNhbGwoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2FpdFVudGlsUmV0VmFsID0gdGhpcy5kcml2ZXIud2FpdFVudGlsKGFzeW5jKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWFnZXMgPSBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHB1c2hJbWFnZVRvSW1hZ2VzID0gYXN5bmMoZmV0Y2hUaXRsZSA9IHRydWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlID0gYXdhaXQgdGhpcy5kcml2ZXIudGFrZVNjcmVlbnNob3QoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmZXRjaFRpdGxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGl0bGUgPSBhd2FpdCB0aGlzLmRyaXZlci5nZXRUaXRsZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aXRsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0VG9JbWFnZSA9IHJlcXVpcmUoJy4uL2xpYi90ZXh0LXRvLWltYWdlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZUltYWdlID0gYXdhaXQgdGV4dFRvSW1hZ2UuZ2VuZXJhdGUodGl0bGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGl0bGVJbWFnZSAmJiB0eXBlb2YgdGl0bGVJbWFnZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlSW1hZ2UgPSB0aXRsZUltYWdlLnJlcGxhY2UoJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwnLCAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXMucHVzaCh0aXRsZUltYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXMucHVzaChpbWFnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1dlYlZpZXdDb250ZXh0ID0gYXdhaXQgdGhpcy5pc1dlYlZpZXdDb250ZXh0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1dlYlZpZXdDb250ZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb2xsZWN0IGFsbCAoc2NyZWVuc2hvdCBhbmQgdGl0bGUpIGltYWdlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlcyA9IGF3YWl0IHRoaXMuZHJpdmVyLmdldFdpbmRvd0hhbmRsZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShoYW5kbGVzKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBoYW5kbGUgb2YgaGFuZGxlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5zd2l0Y2hUb1dpbmRvdyhoYW5kbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBwdXNoSW1hZ2VUb0ltYWdlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHB1c2hJbWFnZVRvSW1hZ2VzKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWVyZ2UgYWxsIGltYWdlcyBpbnRvIG9uZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXJnZWRJbWFnZSA9IGF3YWl0IG1lcmdlSW1hZ2VzKGltYWdlcywgeyBkaXJlY3Rpb246IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXJnZWRJbWFnZSAmJiB0eXBlb2YgbWVyZ2VkSW1hZ2UgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBtZXJnZWRJbWFnZS5yZXBsYWNlKCdkYXRhOmltYWdlL2pwZWc7YmFzZTY0LCcsICcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB0aW1lb3V0OiAzMCoxMDAwIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3YWl0VW50aWxSZXRWYWwgJiYgd2FpdFVudGlsUmV0VmFsLnRoZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0VW50aWxSZXRWYWwudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc2NyZWVuc2hvdCcsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgZ2V0IHNjcmVlbnNob3QnLCBlKTtcclxuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgZ2V0IHNjcmVlbnNob3QgaW5uZXIgZXJyb3InLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfdGFrZVNuYXBzaG90U2lsZW50KG5hbWUpIHtcclxuICAgICAgICBpZiAoIU5PX1NOQVBTSE9UX0NPTU1BTkRTLmluY2x1ZGVzKG5hbWUpKSB7XHJcbiAgICAgICAgICAgIGxldCBlcnJvcjtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlciAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLmdldFBhZ2VTb3VyY2VcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZXR2YWw7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuY2FsbCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5nZXRQYWdlU291cmNlKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSByZXN1bHQ7IHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgZ2V0IHNuYXBzaG90ICgxKScsIGVycm9yKTsgcmVqZWN0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc25hcHNob3QgKDIpJywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc25hcHNob3QgKDMpJywgZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzbmFwc2hvdCBpbm5lciBlcnJvcicsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9hZGp1c3RBcHBpdW1Mb2cobG9nLCBzcmMpIHtcclxuICAgICAgICBpZiAoIWxvZyB8fCB0eXBlb2YgbG9nICE9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVE9ETzogY29udmVydCBsb2cudGltZXN0YW1wIGZyb20gdGhlIGRldmljZSB0aW1lIHpvbmUgdG8gdGhlIGxvY2FsIG9uZSAoc28gd2UgY2FuIGxhdGVyIGNvcnJlbGF0ZSBiZXR3ZWVuIHN0ZXBzIGFuZCBsb2dzKSAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdGltZTogbG9nLnRpbWVzdGFtcCxcclxuICAgICAgICAgICAgbXNnOiBsb2cubWVzc2FnZSxcclxuICAgICAgICAgICAgbGV2ZWw6IGxvZy5sZXZlbCxcclxuICAgICAgICAgICAgc3JjOiBzcmNcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIF9pdGVyYXRpb25TdGFydCgpIHtcclxuICAgICAgICAvLyBjbGVhciB0cmFuc2FjdGlvbiBuYW1lIHNhdmVkIGluIHByZXZpb3VzIGl0ZXJhdGlvbiBpZiBhbnlcclxuICAgICAgICBnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9pdGVyYXRpb25FbmQoZXJyb3IpIHtcclxuICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IudHlwZSA9PT0gZXJyb3JIZWxwZXIuZXJyb3JDb2RlLkFQUElVTV9TRVNTSU9OX1RJTUVPVVQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlbml1bVNlc3Npb25UaW1lb3V0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZW5pdW1TZXNzaW9uVGltZW91dCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZ25vcmUgdGhlIHJlc3QgaWYgbW9iIG1vZHVsZSBpcyBub3QgaW5pdGlhbGl6ZWRcclxuICAgICAgICBpZiAoIXRoaXMuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbGxlY3QgYWxsIHRoZSBkZXZpY2UgbG9ncyBmb3IgdGhpcyBzZXNzaW9uXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb2xsZWN0RGV2aWNlTG9ncykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9ncyA9IGF3YWl0IHRoaXMuZ2V0RGV2aWNlTG9ncygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvZ3MgJiYgQXJyYXkuaXNBcnJheShsb2dzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGxvZyBvZiBsb2dzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucnMubG9ncy5wdXNoKHRoaXMuX2FkanVzdEFwcGl1bUxvZyhsb2csICdkZXZpY2UnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3JzXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IHJldHJpZXZlIGRldmljZSBsb2dzLicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBjb2xsZWN0IGFsbCB0aGUgYnJvd3NlciBsb2dzIGZvciB0aGlzIHNlc3Npb25cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNvbGxlY3RCcm93c2VyTG9ncyAmJiB0aGlzLmRyaXZlciAmJiB0aGlzLmRyaXZlci5wcm92aWRlciAhPT0gbW9kVXRpbHMucHJvdmlkZXIuQlJPV1NFUlNUQUNLKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsb2dzID0gYXdhaXQgdGhpcy5nZXRCcm93c2VyTG9ncygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvZ3MgJiYgQXJyYXkuaXNBcnJheShsb2dzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGxvZyBvZiBsb2dzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucnMubG9ncy5wdXNoKHRoaXMuX2FkanVzdEFwcGl1bUxvZyhsb2csICdicm93c2VyJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCByZXRyaWV2ZSBicm93c2VyIGxvZ3MuJywgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGNvbGxlY3QgYWxsIEFwcGl1bSBsb2dzIGZvciB0aGlzIHNlc3Npb25cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNvbGxlY3RBcHBpdW1Mb2dzKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsb2dzID0gdGhpcy5nZXRBcHBpdW1Mb2dzKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobG9ncyAmJiBBcnJheS5pc0FycmF5KGxvZ3MpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbG9nRW50cnkgb2YgbG9ncykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJzLmxvZ3MucHVzaCh0aGlzLl9hZGp1c3RBcHBpdW1Mb2cobG9nRW50cnksICdhcHBpdW0nKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3JzXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IHJldHJpZXZlIEFwcGl1bSBsb2dzLicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5kcml2ZXIgJiYgdGhpcy5kcml2ZXIucHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLkJST1dTRVJTVEFDSykge1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0VXJsID0gYXdhaXQgdGhpcy5fZ2V0QnJvd3NlclN0YWNrUmVzdWx0VXJsKCk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHRVcmwpIHtcclxuICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSB3cml0dGVuIHRvIGNvbnRleHQucmVzdWx0RGF0YSBpbnN0ZWFkXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJzLmF0dHJpYnV0ZXNbJ0Jyb3dzZXJTdGFja1VybCddID0gcmVzdWx0VXJsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9nZXRXZGlvTG9jYXRvcihsb2NhdG9yKSB7XHJcbiAgICAgICAgaWYgKCFsb2NhdG9yKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCAnSW52YWxpZCBhcmd1bWVudCAtIGxvY2F0b3Igbm90IHNwZWNpZmllZCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIGxvY2F0b3IgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBsb2NhdG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobG9jYXRvci5pbmRleE9mKCcvJykgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGxvY2F0b3I7IC8vIGxlYXZlIHhwYXRoIGxvY2F0b3IgYXMgaXNcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcGxhdGZvcm0gPSB0aGlzLmNhcHMgJiYgdGhpcy5jYXBzLnBsYXRmb3JtTmFtZSA/IHRoaXMuY2Fwcy5wbGF0Zm9ybU5hbWUudG9Mb3dlckNhc2UoKSA6IG51bGw7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmFwcENvbnRleHQgPT09ICdOQVRJVkVfQVBQJyAmJiBwbGF0Zm9ybSA9PT0gJ2FuZHJvaWQnKSB7XHJcbiAgICAgICAgICAgIGlmIChsb2NhdG9yLmluZGV4T2YoJ2lkPScpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBwcmVwZW5kIHBhY2thZ2UgbmFtZSBpZiBpdCdzIG5vdCBzcGVjaWZpZWRcclxuICAgICAgICAgICAgICAgIC8vIE5PVEU6IGdldEN1cnJlbnRQYWNrYWdlKCkgc2VlbXMgdG8gY3Jhc2ggcG9zc2libHkgZHVlIHRvIGEgd2RpbyBidWcuIFxyXG4gICAgICAgICAgICAgICAgLy8gICAgICAgc28gd2UgZ2V0IHBhY2thZ2UgbmFtZSBmcm9tIGNhcHMgaW5zdGVhZC5cclxuICAgICAgICAgICAgICAgIGxvY2F0b3IgPSBsb2NhdG9yLnN1YnN0cignaWQ9Jy5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvY2F0b3IuaW5kZXhPZignOmlkLycpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvY2F0b3IgPSB0aGlzLmNhcHMuYXBwUGFja2FnZSArICc6aWQvJyArIGxvY2F0b3I7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2FuZHJvaWQ9bmV3IFVpU2VsZWN0b3IoKS5yZXNvdXJjZUlkKFwiJyArIGxvY2F0b3IgKyAnXCIpJztcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ2NsYXNzPScpID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdhbmRyb2lkPW5ldyBVaVNlbGVjdG9yKCkuY2xhc3NOYW1lKFwiJyArIGxvY2F0b3Iuc3Vic3RyKCdjbGFzcz0nLmxlbmd0aCkgKyAnXCIpJztcclxuICAgICAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCd0ZXh0PScpID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdhbmRyb2lkPW5ldyBVaVNlbGVjdG9yKCkudGV4dChcIicgKyBsb2NhdG9yLnN1YnN0cigndGV4dD0nLmxlbmd0aCkgKyAnXCIpJztcclxuICAgICAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCd0ZXh0LWNvbnRhaW5zPScpID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdhbmRyb2lkPW5ldyBVaVNlbGVjdG9yKCkudGV4dENvbnRhaW5zKFwiJyArIGxvY2F0b3Iuc3Vic3RyKCd0ZXh0LWNvbnRhaW5zPScubGVuZ3RoKSArICdcIiknO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ2Rlc2M9JykgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2FuZHJvaWQ9bmV3IFVpU2VsZWN0b3IoKS5kZXNjcmlwdGlvbihcIicgKyBsb2NhdG9yLnN1YnN0cignZGVzYz0nLmxlbmd0aCkgKyAnXCIpJztcclxuICAgICAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdkZXNjLWNvbnRhaW5zPScpID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdhbmRyb2lkPW5ldyBVaVNlbGVjdG9yKCkuZGVzY3JpcHRpb25Db250YWlucyhcIicgKyBsb2NhdG9yLnN1YnN0cignZGVzYy1jb250YWlucz0nLmxlbmd0aCkgKyAnXCIpJztcclxuICAgICAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdzY3JvbGxhYmxlJykgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2FuZHJvaWQ9bmV3IFVpU2VsZWN0b3IoKS5zY3JvbGxhYmxlKHRydWUpJztcclxuICAgICAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCd+JykgPT09IDApICAgIC8vIGFjY2Vzc2liaWxpdHkgaWRcclxuICAgICAgICAgICAgICAgIHJldHVybiBsb2NhdG9yO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5hcHBDb250ZXh0ID09PSAnTkFUSVZFX0FQUCcgJiYgcGxhdGZvcm0gPT09ICdpb3MnKSB7XHJcbiAgICAgICAgICAgIGlmIChsb2NhdG9yLmluZGV4T2YoJ34nKSA9PT0gMCkgLy8gYWNjZXNzaWJpbGl0eSBpZFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2F0b3I7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmFwcENvbnRleHQgIT09ICdOQVRJVkVfQVBQJykgeyAgICAgICAgICAgIC8vIEh5YnJpZCBvciBXZWIgYXBwbGljYXRpb25cclxuICAgICAgICAgICAgaWYgKGxvY2F0b3IuaW5kZXhPZignaWQ9JykgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJyMnICsgbG9jYXRvci5zdWJzdHIoJ2lkPScubGVuZ3RoKTsgICAgICAvLyBjb252ZXJ0ICdpZD0nIHRvICcjJ1xyXG4gICAgICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ25hbWU9JykgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1tuYW1lPScgKyBsb2NhdG9yLnN1YnN0cignbmFtZT0nLmxlbmd0aCkgKyAnXSc7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignbGluaz0nKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiAnPScgKyBsb2NhdG9yLnN1YnN0cignbGluaz0nLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignbGluay1jb250YWlucz0nKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiAnKj0nICsgbG9jYXRvci5zdWJzdHIoJ2xpbms9Jy5sZW5ndGgpO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ2Nzcz0nKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiBsb2NhdG9yLnN1YnN0cignY3NzPScubGVuZ3RoKTsgICAgICAgICAgIC8vIGluIGNhc2Ugb2YgY3NzLCBqdXN0IHJlbW92ZSBjc3M9IHByZWZpeFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGxvY2F0b3I7XHJcbiAgICB9XHJcblxyXG4gICAgX2xvYWRIZWxwZXJGdW5jdGlvbnMoKSB7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldFdkaW9Mb2NhdG9yID0gdGhpcy5fZ2V0V2Rpb0xvY2F0b3I7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLm1hdGNoUGF0dGVybiA9IG1vZFV0aWxzLm1hdGNoUGF0dGVybjtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0RWxlbWVudCA9IG1vZFV0aWxzLmdldEVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldEVsZW1lbnRzID0gbW9kVXRpbHMuZ2V0RWxlbWVudHM7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldENoaWxkRWxlbWVudCA9IG1vZFV0aWxzLmdldENoaWxkRWxlbWVudDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0Q2hpbGRFbGVtZW50cyA9IG1vZFV0aWxzLmdldENoaWxkRWxlbWVudHM7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLnNldFRpbWVvdXRJbXBsaWNpdCA9IG1vZFV0aWxzLnNldFRpbWVvdXRJbXBsaWNpdDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdCA9IG1vZFV0aWxzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50ID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmcgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudE51bWJlciA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZTtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRCb29sID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnRCb29sO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudFRpbWVvdXQgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudFRpbWVvdXQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydENvbnRleHQgPSBtb2RVdGlscy5hc3NlcnRDb250ZXh0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5jb250ZXh0TGlzdCA9IG1vZFV0aWxzLmNvbnRleHRMaXN0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRMb2dUeXBlcyA9IG1vZFV0aWxzLmdldExvZ1R5cGVzO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRlbGV0ZVNlc3Npb24oKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZHJpdmVyICYmIHRoaXMuZHJpdmVyLmRlbGV0ZVNlc3Npb24pIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLmRlbGV0ZVNlc3Npb24oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ2RlbGV0ZVNlc3Npb24gZXJyb3InLCBlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3NldEJyb3dzZXJTdGFja1Jlc3VsdFN0YXR1cyhzdGF0dXMpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAvLyBkaWZmZXJlbnQgQVBJcyBhcmUgdXNlZCBkZXBlbmRpbmcgb24gdGVzdCB0eXBlLlxyXG4gICAgICAgICAgICAvLyBodHRwczovL3d3dy5icm93c2Vyc3RhY2suY29tL2RvY3MvYXV0b21hdGUvYXBpLXJlZmVyZW5jZS9zZWxlbml1bS9zZXNzaW9uI3NldC10ZXN0LXN0YXR1c1xyXG4gICAgICAgICAgICAvLyBodHRwczovL3d3dy5icm93c2Vyc3RhY2suY29tL2RvY3MvYXBwLWF1dG9tYXRlL2FwaS1yZWZlcmVuY2UvYXBwaXVtL3Nlc3Npb25zI3VwZGF0ZS1zZXNzaW9uLXN0YXR1c1xyXG4gICAgICAgICAgICBjb25zdCBic0FwaVVybCA9IHRoaXMud2Rpb09wdHMuY2FwYWJpbGl0aWVzWydhcHBpdW06YXBwJ10gP1xyXG4gICAgICAgICAgICAgIGBodHRwczovL2FwaS1jbG91ZC5icm93c2Vyc3RhY2suY29tL2FwcC1hdXRvbWF0ZS9zZXNzaW9ucy8ke3RoaXMuZHJpdmVyLnNlc3Npb25JZH0uanNvbmAgOlxyXG4gICAgICAgICAgICAgIGBodHRwczovL2FwaS5icm93c2Vyc3RhY2suY29tL2F1dG9tYXRlL3Nlc3Npb25zLyR7dGhpcy5kcml2ZXIuc2Vzc2lvbklkfS5qc29uYDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmluZm8oYFNldHRpbmcgQlMgdGVzdCByZXN1bHQgc3RhdHVzIHRvICR7c3RhdHVzfTogJHtic0FwaVVybH1gKTtcclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAvLyBzZXQgdGVzdCBzdGF0dXNcclxuICAgICAgICAgICAgICAgIHJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIHVybDogYnNBcGlVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUFVUJyxcclxuICAgICAgICAgICAgICAgICAgICBqc29uOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9keToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyA9PT0gJ1BBU1NFRCcgPyAncGFzc2VkJyA6ICdmYWlsZWQnXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAnYXV0aCc6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3VzZXInOiB0aGlzLndkaW9PcHRzLmNhcGFiaWxpdGllc1snYnN0YWNrOm9wdGlvbnMnXS51c2VyTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3Bhc3MnOiB0aGlzLndkaW9PcHRzLmNhcGFiaWxpdGllc1snYnN0YWNrOm9wdGlvbnMnXS5hY2Nlc3NLZXksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdzZW5kSW1tZWRpYXRlbHknOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sIChlcnIsIHJlcywgYm9keSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Vycm9yIHNldHRpbmcgQnJvd3NlclN0YWNrIHRlc3QgcmVzdWx0IHN0YXR1czogJyArIGVyci50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdFcnJvciBzZXR0aW5nIEJyb3dzZXJTdGFjayB0ZXN0IHJlc3VsdCBzdGF0dXM6ICcgKyBlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2dldEJyb3dzZXJTdGFja1Jlc3VsdFVybCgpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAvLyBkaWZmZXJlbnQgQVBJcyBhcmUgdXNlZCBkZXBlbmRpbmcgb24gdGVzdCB0eXBlLlxyXG4gICAgICAgICAgICAvLyBodHRwczovL3d3dy5icm93c2Vyc3RhY2suY29tL2RvY3MvYXV0b21hdGUvYXBpLXJlZmVyZW5jZS9zZWxlbml1bS9zZXNzaW9uI3NldC10ZXN0LXN0YXR1c1xyXG4gICAgICAgICAgICAvLyBodHRwczovL3d3dy5icm93c2Vyc3RhY2suY29tL2RvY3MvYXBwLWF1dG9tYXRlL2FwaS1yZWZlcmVuY2UvYXBwaXVtL3Nlc3Npb25zI3VwZGF0ZS1zZXNzaW9uLXN0YXR1c1xyXG4gICAgICAgICAgICBjb25zdCBic0FwaVVybCA9IHRoaXMud2Rpb09wdHMuY2FwYWJpbGl0aWVzWydhcHBpdW06YXBwJ10gP1xyXG4gICAgICAgICAgICAgIGBodHRwczovL2FwaS1jbG91ZC5icm93c2Vyc3RhY2suY29tL2FwcC1hdXRvbWF0ZS9zZXNzaW9ucy8ke3RoaXMuZHJpdmVyLnNlc3Npb25JZH0uanNvbmAgOlxyXG4gICAgICAgICAgICAgIGBodHRwczovL2FwaS5icm93c2Vyc3RhY2suY29tL2F1dG9tYXRlL3Nlc3Npb25zLyR7dGhpcy5kcml2ZXIuc2Vzc2lvbklkfS5qc29uYDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmluZm8oYEdldHRpbmcgQlMgdGVzdCByZXN1bHQgZGV0YWlsczogJHtic0FwaVVybH1gKTtcclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAvLyByZXRyZWl2ZSBCUyB0ZXN0IHJlc3VsdCB1cmxcclxuICAgICAgICAgICAgICAgIHJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIHVybDogYnNBcGlVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICAgICAgICAgICAgICBqc29uOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2F1dGgnOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICd1c2VyJzogdGhpcy53ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpvcHRpb25zJ10udXNlck5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdwYXNzJzogdGhpcy53ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpvcHRpb25zJ10uYWNjZXNzS2V5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnc2VuZEltbWVkaWF0ZWx5JzogZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LCAoZXJyLCByZXMsIGJvZHkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdFcnJvciBnZXR0aW5nIEJyb3dzZXJTdGFjayB0ZXN0IHJlc3VsdCB1cmw6ICcgKyBlcnIudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGJvZHk/LmF1dG9tYXRpb25fc2Vzc2lvbj8uYnJvd3Nlcl91cmwpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRXJyb3IgZ2V0dGluZyBCcm93c2VyU3RhY2sgdGVzdCByZXN1bHQgdXJsOiAnICsgZS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxZQUFZOztBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXpDQUEsTUFBQSxDQUFBQyxjQUFBLENBQUFDLE9BQUE7RUFBQUMsS0FBQTtBQUFBO0FBQUFELE9BQUEsQ0FBQUUsT0FBQTtBQUFBQyxPQUFBO0FBMENBLElBQUFDLElBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLElBQUEsR0FBQUMsdUJBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFLLGdCQUFBLEdBQUFILHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBTSxNQUFBLEdBQUFKLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBTyxPQUFBLEdBQUFMLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBUSxZQUFBLEdBQUFOLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBUyxrQkFBQSxHQUFBUCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVUsUUFBQSxHQUFBUixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVcsU0FBQSxHQUFBVCxzQkFBQSxDQUFBRixPQUFBO0FBQTJDLFNBQUFJLHdCQUFBUSxDQUFBLEVBQUFDLENBQUEsNkJBQUFDLE9BQUEsTUFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBVix1QkFBQSxZQUFBQSxDQUFBUSxDQUFBLEVBQUFDLENBQUEsU0FBQUEsQ0FBQSxJQUFBRCxDQUFBLElBQUFBLENBQUEsQ0FBQUssVUFBQSxTQUFBTCxDQUFBLE1BQUFNLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLEtBQUFDLFNBQUEsUUFBQXRCLE9BQUEsRUFBQWEsQ0FBQSxpQkFBQUEsQ0FBQSx1QkFBQUEsQ0FBQSx5QkFBQUEsQ0FBQSxTQUFBUSxDQUFBLE1BQUFGLENBQUEsR0FBQUwsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsUUFBQUcsQ0FBQSxDQUFBSSxHQUFBLENBQUFWLENBQUEsVUFBQU0sQ0FBQSxDQUFBSyxHQUFBLENBQUFYLENBQUEsR0FBQU0sQ0FBQSxDQUFBTSxHQUFBLENBQUFaLENBQUEsRUFBQVEsQ0FBQSxnQkFBQVAsQ0FBQSxJQUFBRCxDQUFBLGdCQUFBQyxDQUFBLE9BQUFZLGNBQUEsQ0FBQUMsSUFBQSxDQUFBZCxDQUFBLEVBQUFDLENBQUEsT0FBQU0sQ0FBQSxJQUFBRCxDQUFBLEdBQUF2QixNQUFBLENBQUFDLGNBQUEsS0FBQUQsTUFBQSxDQUFBZ0Msd0JBQUEsQ0FBQWYsQ0FBQSxFQUFBQyxDQUFBLE9BQUFNLENBQUEsQ0FBQUksR0FBQSxJQUFBSixDQUFBLENBQUFLLEdBQUEsSUFBQU4sQ0FBQSxDQUFBRSxDQUFBLEVBQUFQLENBQUEsRUFBQU0sQ0FBQSxJQUFBQyxDQUFBLENBQUFQLENBQUEsSUFBQUQsQ0FBQSxDQUFBQyxDQUFBLFdBQUFPLENBQUEsS0FBQVIsQ0FBQSxFQUFBQyxDQUFBO0FBQUEsU0FBQVgsdUJBQUFVLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFLLFVBQUEsR0FBQUwsQ0FBQSxLQUFBYixPQUFBLEVBQUFhLENBQUE7QUFHM0MsTUFBTWdCLFdBQVcsR0FBRyxLQUFLO0FBQ3pCLE1BQU1DLGtCQUFrQixHQUFHLDhCQUE4QjtBQUN6RCxNQUFNQyxvQkFBb0IsR0FBRyxTQUFTO0FBQ3RDLE1BQU1DLHNCQUFzQixHQUFHLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxTQUFTLENBQUM7QUFDakUsTUFBTUMsb0JBQW9CLEdBQUcsQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLFNBQVMsQ0FBQztBQUMvRCxNQUFNQyxlQUFlLEdBQUcsQ0FBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLE9BQU8sRUFBQyxPQUFPLEVBQUMsUUFBUSxFQUFDLFVBQVUsQ0FBQztBQUMxRSxNQUFNQyxvQkFBb0IsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQVk7O0FBRXBDLE1BQU1DLFlBQVksU0FBU0Msd0JBQWUsQ0FBQztFQUN0REMsV0FBV0EsQ0FBQ0MsT0FBTyxFQUFFQyxPQUFPLEVBQUVDLEVBQUUsRUFBRUMsTUFBTSxFQUFFQyxPQUFPLEVBQUVDLFFBQVEsRUFBRTtJQUN6RCxLQUFLLENBQUNMLE9BQU8sRUFBRUMsT0FBTyxFQUFFQyxFQUFFLEVBQUVDLE1BQU0sRUFBRUMsT0FBTyxFQUFFQyxRQUFRLENBQUM7SUFDdEQsSUFBSSxDQUFDQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBQ3RCLElBQUksQ0FBQ0MsdUJBQXVCLEdBQUcsSUFBSTtJQUNuQyxJQUFJLENBQUNDLGVBQWUsR0FBRyxJQUFJO0lBQzNCLElBQUksQ0FBQ0MsT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNqQixJQUFJLENBQUNDLFVBQVUsR0FBRyxZQUFZO0lBQzlCLElBQUksQ0FBQ0Msb0JBQW9CLENBQUMsQ0FBQztJQUMzQjtJQUNBLElBQUksQ0FBQ0MsT0FBTyxHQUFHQSxvQkFBTztJQUN0QixJQUFJLENBQUNDLFNBQVMsR0FBR0EsZUFBUztJQUMxQjtJQUNBLElBQUksQ0FBQ0MsY0FBYyxHQUFHbEIsb0JBQW9CO0VBQzlDO0VBRUEsSUFBSW1CLElBQUlBLENBQUEsRUFBRztJQUNQLE9BQU96QixXQUFXO0VBQ3RCOztFQUVBO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7RUFDSTBCLFNBQVNBLENBQUEsRUFBRztJQUNSLE9BQU8sS0FBSyxDQUFDQSxTQUFTLENBQUMsQ0FBQztFQUM1Qjs7RUFFQTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0VBQ0lDLGVBQWVBLENBQUEsRUFBRztJQUNkLE9BQU8sSUFBSSxDQUFDQyxJQUFJLElBQUksS0FBSyxDQUFDRCxlQUFlLENBQUMsQ0FBQztFQUMvQzs7RUFFQTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDSSxNQUFNRSxJQUFJQSxDQUFDRCxJQUFJLEVBQUVFLFNBQVMsRUFBRTtJQUN4QjtJQUNBLElBQUksSUFBSSxDQUFDQyxhQUFhLEVBQUU7TUFDcEIsSUFBSSxJQUFJLENBQUNDLE1BQU0sSUFBSSxJQUFJLENBQUN0QixPQUFPLENBQUN1QixhQUFhLEtBQUssS0FBSyxFQUFFO1FBQUU7UUFDdkQsSUFBSSxDQUFDcEIsTUFBTSxDQUFDcUIsS0FBSyxDQUFDLGtEQUFrRCxDQUFDO1FBQ3JFLElBQUksQ0FBQ0YsTUFBTSxDQUFDRyxhQUFhLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUNDLGNBQWMsR0FBRyxJQUFJO01BQzlCLENBQUMsTUFBTTtRQUNILElBQUksQ0FBQ3ZCLE1BQU0sQ0FBQ3FCLEtBQUssQ0FBQyxvR0FBb0csQ0FBQztNQUMzSDtNQUNBO0lBQ0o7O0lBRUE7SUFDQSxJQUFJLElBQUksQ0FBQ0csR0FBRyxDQUFDVCxJQUFJLElBQUksSUFBSSxDQUFDUyxHQUFHLENBQUNULElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFO01BQzFELElBQUlBLElBQUksRUFBRTtRQUNOLE9BQU9BLElBQUksQ0FBQ1UsWUFBWTtRQUN4QixPQUFPVixJQUFJLENBQUNXLGVBQWU7UUFDM0IsT0FBT1gsSUFBSSxDQUFDWSxVQUFVO1FBQ3RCLE9BQU9aLElBQUksQ0FBQ2EsV0FBVztRQUN2QixPQUFPYixJQUFJLENBQUNjLGNBQWM7UUFDMUIsT0FBT2QsSUFBSSxDQUFDZSxJQUFJO1FBRWhCLElBQUlmLElBQUksQ0FBQ2dCLEdBQUcsRUFBRTtVQUNWaEIsSUFBSSxDQUFDaUIsb0JBQW9CLEdBQUcsSUFBSTtRQUNwQyxDQUFDLE1BQU07VUFDSGpCLElBQUksQ0FBQ2tCLGVBQWUsR0FBRyxJQUFJO1VBQzNCbEIsSUFBSSxDQUFDaUIsb0JBQW9CLEdBQUcsSUFBSTtRQUNwQztNQUNKLENBQUMsTUFBTTtRQUNILElBQUksQ0FBQ1IsR0FBRyxDQUFDVCxJQUFJLENBQUNrQixlQUFlLEdBQUcsSUFBSTtRQUNwQyxJQUFJLENBQUNULEdBQUcsQ0FBQ1QsSUFBSSxDQUFDaUIsb0JBQW9CLEdBQUcsSUFBSTtNQUM3QztJQUNKO0lBRUEsSUFBSSxDQUFDZixTQUFTLEVBQUU7TUFDWkEsU0FBUyxHQUFHLElBQUksQ0FBQ3BCLE9BQU8sQ0FBQ29CLFNBQVMsSUFBSTdCLGtCQUFrQjtJQUM1RDs7SUFFQTtJQUNBLElBQUksQ0FBQzJCLElBQUksR0FBRyxDQUFDLENBQUM7SUFDZCxJQUFJLElBQUksQ0FBQ1MsR0FBRyxDQUFDVCxJQUFJLEVBQUU7TUFDZixJQUFJLENBQUNBLElBQUksR0FBRztRQUFFLEdBQUcsSUFBSSxDQUFDUyxHQUFHLENBQUNUO01BQUssQ0FBQztJQUNwQztJQUNBLElBQUlBLElBQUksRUFBRTtNQUNOLElBQUksQ0FBQ0EsSUFBSSxHQUFHO1FBQUUsR0FBRyxJQUFJLENBQUNBLElBQUk7UUFBRSxHQUFHQTtNQUFLLENBQUM7SUFDekM7O0lBRUE7SUFDQSxJQUFJLElBQUksQ0FBQ2xCLE9BQU8sQ0FBQ3FDLGlCQUFpQixFQUFFO01BQ2hDLElBQUksQ0FBQ25CLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLElBQUk7SUFDOUM7O0lBRUE7SUFDQSxJQUFJLElBQUksQ0FBQ0EsSUFBSSxDQUFDYSxXQUFXLEtBQUssSUFBSSxDQUFDYixJQUFJLENBQUNvQixVQUFVLElBQUksSUFBSSxDQUFDcEIsSUFBSSxDQUFDZ0IsR0FBRyxJQUFJLElBQUksQ0FBQ2hCLElBQUksQ0FBQ3FCLFFBQVEsQ0FBQyxFQUFFO01BQ3hGLE9BQU8sSUFBSSxDQUFDckIsSUFBSSxDQUFDYSxXQUFXO0lBQ2hDO0lBQ0E7SUFBQSxLQUNLLElBQUksQ0FBQyxJQUFJLENBQUNiLElBQUksQ0FBQ2EsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDYixJQUFJLENBQUNvQixVQUFVLElBQUksQ0FBQyxJQUFJLENBQUNwQixJQUFJLENBQUNnQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUNoQixJQUFJLENBQUNxQixRQUFRLEVBQUU7TUFDL0YsSUFBSSxDQUFDckIsSUFBSSxDQUFDYSxXQUFXLEdBQUd2QyxvQkFBb0I7SUFDaEQ7SUFDQTtJQUNBLElBQUksSUFBSSxDQUFDMEIsSUFBSSxDQUFDYSxXQUFXLElBQUksT0FBTyxJQUFJLENBQUNiLElBQUksQ0FBQ2EsV0FBVyxLQUFLLFFBQVEsRUFBRTtNQUNwRSxJQUFJLENBQUNiLElBQUksQ0FBQ2EsV0FBVyxHQUFHLElBQUksQ0FBQ2IsSUFBSSxDQUFDYSxXQUFXLENBQUNTLFdBQVcsQ0FBQyxDQUFDO0lBQy9EO0lBQ0E7SUFDQSxJQUFJLElBQUksQ0FBQ3hDLE9BQU8sQ0FBQ3lDLFNBQVMsSUFBSSxJQUFJLENBQUN2QixJQUFJLENBQUNhLFdBQVcsS0FBSyxRQUFRLEVBQUU7TUFDOUQsSUFBSSxDQUFDYixJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRztRQUFNO1FBQ25Dd0IsT0FBTyxFQUFFLEtBQUs7UUFDZEMsV0FBVyxFQUFFO01BQ2pCLENBQUM7SUFDTDs7SUFFQTtJQUNBLE1BQU1DLEdBQUcsR0FBR0MsWUFBRyxDQUFDQyxLQUFLLENBQUMxQixTQUFTLENBQUM7SUFDaEMsTUFBTTJCLFFBQVEsR0FBR0gsR0FBRyxDQUFDRyxRQUFRLENBQUNDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO0lBQy9DLE1BQU1DLElBQUksR0FBR0wsR0FBRyxDQUFDTSxRQUFRO0lBQ3pCLE1BQU1DLElBQUksR0FBR0MsUUFBUSxDQUFDUixHQUFHLENBQUNPLElBQUksS0FBS0osUUFBUSxLQUFLLE9BQU8sR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDcEUsTUFBTU0sSUFBSSxHQUFHVCxHQUFHLENBQUNVLFFBQVE7O0lBRXpCO0lBQ0EsSUFBSVYsR0FBRyxDQUFDVyxJQUFJLEVBQUU7TUFDVixNQUFNQSxJQUFJLEdBQUdYLEdBQUcsQ0FBQ1csSUFBSSxDQUFDQyxLQUFLLENBQUMsR0FBRyxDQUFDO01BQ2hDLElBQUksQ0FBQ3hELE9BQU8sQ0FBQ3lELFFBQVEsR0FBRztRQUNwQkMsSUFBSSxFQUFFSCxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2JJLEdBQUcsRUFBRUosSUFBSSxDQUFDLENBQUM7TUFDZixDQUFDO0lBQ0w7SUFFQSxJQUFJRSxRQUFRLEdBQUc7TUFDWCxJQUFHLElBQUksQ0FBQ3pELE9BQU8sQ0FBQ3lELFFBQVEsSUFBSSxDQUFDLENBQUM7TUFDOUJWLFFBQVEsRUFBRUEsUUFBUTtNQUNsQkcsUUFBUSxFQUFFRCxJQUFJO01BQ2RFLElBQUksRUFBRUEsSUFBSTtNQUNWRSxJQUFJLEVBQUVBLElBQUk7TUFDVk8sWUFBWSxFQUFFLElBQUksQ0FBQzFDLElBQUk7TUFDdkIyQyxRQUFRLEVBQUUsUUFBUTtNQUNsQkMsTUFBTSxFQUFFLE1BQU07TUFDZEMsY0FBYyxFQUFFLElBQUk7TUFBRTtNQUN0QkMsc0JBQXNCLEVBQUUsR0FBRyxHQUFDLElBQUk7TUFDaENDLG9CQUFvQixFQUFFO0lBQzFCLENBQUM7SUFFRCxJQUFJQyxRQUFRLEdBQUdDLGNBQVEsQ0FBQ0MsaUJBQWlCLENBQUNYLFFBQVEsQ0FBQzs7SUFFbkQ7SUFDQSxJQUFJUyxRQUFRLEtBQUtDLGNBQVEsQ0FBQ0QsUUFBUSxDQUFDRyxZQUFZLEVBQUU7TUFDN0NaLFFBQVEsQ0FBQ08sc0JBQXNCLEdBQUcsRUFBRSxHQUFDLEVBQUUsR0FBQyxJQUFJO0lBQ2hEO0lBRUEsTUFBTWpELElBQUksR0FBR29ELGNBQVEsQ0FBQ0cseUJBQXlCLENBQUNKLFFBQVEsRUFBRVQsUUFBUSxDQUFDO0lBRW5FLElBQUksQ0FBQ0EsUUFBUSxHQUFHQSxRQUFROztJQUV4QjtJQUNBLElBQUk7TUFDQSxJQUFJLENBQUNuQyxNQUFNLEdBQUcsTUFBTXpELElBQUksQ0FBQzBHLE1BQU0sQ0FBQ2QsUUFBUSxDQUFDO01BRXpDLElBQUksQ0FBQ3RELE1BQU0sQ0FBQ3FFLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQ2xELE1BQU0sQ0FBQ21ELFNBQVMsRUFBRSxDQUFDO01BRXZELElBQUksQ0FBQ25ELE1BQU0sQ0FBQzRDLFFBQVEsR0FBR0EsUUFBUTtNQUUvQixJQUFJLElBQUksQ0FBQ2xFLE9BQU8sQ0FBQzBFLHNCQUFzQixFQUFFO1FBQ3JDLElBQUksQ0FBQ3BELE1BQU0sQ0FBQ29ELHNCQUFzQixHQUFHLElBQUksQ0FBQzFFLE9BQU8sQ0FBQzBFLHNCQUFzQjtNQUM1RTtNQUVBLElBQUksSUFBSSxDQUFDMUUsT0FBTyxDQUFDMkUsZUFBZSxFQUFFO1FBQzlCLElBQUksQ0FBQ3JELE1BQU0sQ0FBQ3FELGVBQWUsR0FBRyxJQUFJLENBQUMzRSxPQUFPLENBQUMyRSxlQUFlO01BQzlEO01BRUEsSUFBSVQsUUFBUSxLQUFLQyxjQUFRLENBQUNELFFBQVEsQ0FBQ1UsUUFBUSxFQUFFO1FBQ3pDLE1BQU1DLHdCQUF3QixHQUFHLE1BQU0sSUFBSUMsMEJBQWlCLENBQUNDLFFBQVEsQ0FBQ0Msd0JBQXdCLENBQUM7VUFDM0ZDLFNBQVMsRUFBRTtZQUNQQyxhQUFhLEVBQUUsTUFBQUEsQ0FBT0MsT0FBTyxFQUFFQyxNQUFNLEtBQUs7Y0FDdEMsT0FBTyxNQUFNLElBQUksQ0FBQzlELE1BQU0sQ0FBQytELE9BQU8sQ0FBQ0YsT0FBTyxFQUFFQyxNQUFNLENBQUM7WUFDckQ7VUFDSjtRQUNKLENBQUMsQ0FBQztRQUNGLElBQUksQ0FBQ0UsZUFBZSxHQUFHLElBQUlSLDBCQUFpQixDQUFDQyxRQUFRLENBQUNRLHVCQUF1QixDQUFDVix3QkFBd0IsQ0FBQztRQUN2RyxNQUFNLElBQUksQ0FBQ1MsZUFBZSxDQUFDRSxTQUFTLENBQUN6RSxJQUFJLENBQUM7TUFDOUM7SUFDSixDQUFDLENBQUMsT0FBT3pDLENBQUMsRUFBRTtNQUNSLElBQUksQ0FBQ2dELE1BQU0sR0FBRyxJQUFJO01BQ2xCLE1BQU1ULGVBQVMsQ0FBQzRFLGtCQUFrQixDQUFDbkgsQ0FBQyxDQUFDO0lBQ3pDO0lBRUEsSUFBSSxDQUFDb0MsVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDWSxNQUFNLENBQUNvRSxVQUFVLENBQUMsQ0FBQzs7SUFFaEQ7SUFDQTtJQUNBO0lBQ0EsSUFBSSxJQUFJLENBQUN4RSxJQUFJLENBQUNhLFdBQVcsS0FBTSxrQkFBa0IsRUFBRTtNQUMvQyxNQUFNLElBQUksQ0FBQzRELGlCQUFpQixDQUFDLENBQUM7SUFDbEM7SUFFQSxJQUFJekIsUUFBUSxLQUFLQyxjQUFRLENBQUNELFFBQVEsQ0FBQ0csWUFBWSxFQUFFO01BQzdDO01BQ0E7SUFBQSxDQUNILE1BQU07TUFDSCxNQUFNLElBQUksQ0FBQy9DLE1BQU0sQ0FBQ3NFLFVBQVUsQ0FBQztRQUFFLFVBQVUsRUFBRSxJQUFJLENBQUM5RTtNQUFlLENBQUMsQ0FBQztJQUNyRTtJQUVBLE1BQU1xRCxjQUFRLENBQUMwQixxQkFBcUIsQ0FBQyxJQUFJLENBQUN2RSxNQUFNLENBQUM7SUFFakQsS0FBSyxDQUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDRyxNQUFNLENBQUM7RUFDM0I7O0VBRUE7QUFDSjtBQUNBO0FBQ0E7QUFDQTtFQUNJLE1BQU13RSxPQUFPQSxDQUFDQyxNQUFNLEVBQUU7SUFDbEIsSUFBSSxDQUFDQSxNQUFNLEVBQUU7TUFDVEEsTUFBTSxHQUFHLFFBQVE7TUFFakIsSUFBSSxJQUFJLENBQUM3RixFQUFFLENBQUM4RixLQUFLLElBQUlDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBQ2hHLEVBQUUsQ0FBQzhGLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQzlGLEVBQUUsQ0FBQzhGLEtBQUssQ0FBQ0csTUFBTSxHQUFHLENBQUMsRUFBRTtRQUMzRSxNQUFNQyxZQUFZLEdBQUcsSUFBSSxDQUFDbEcsRUFBRSxDQUFDOEYsS0FBSyxDQUFDSyxJQUFJLENBQUVDLElBQUksSUFBS0EsSUFBSSxDQUFDUCxNQUFNLEtBQUssUUFBUSxDQUFDO1FBQzNFLElBQUlLLFlBQVksRUFBRTtVQUNkTCxNQUFNLEdBQUcsUUFBUTtRQUNyQjtNQUNKO0lBQ0o7SUFFQSxJQUFJLElBQUksQ0FBQ3pFLE1BQU0sSUFBSSxJQUFJLENBQUNELGFBQWEsRUFBRTtNQUNuQzBFLE1BQU0sR0FBR0EsTUFBTSxDQUFDUSxXQUFXLENBQUMsQ0FBQztNQUU3QixJQUFJLElBQUksQ0FBQ2pGLE1BQU0sQ0FBQzRDLFFBQVEsS0FBS0MsY0FBUSxDQUFDRCxRQUFRLENBQUNVLFFBQVEsRUFBRTtRQUNyRCxNQUFNLElBQUksQ0FBQ1UsZUFBZSxDQUFDa0IsUUFBUSxDQUFDO1VBQ2hDVCxNQUFNLEVBQUVBLE1BQU0sS0FBSyxRQUFRLEdBQ2ZqQiwwQkFBaUIsQ0FBQzJCLFNBQVMsQ0FBQ0MsT0FBTyxDQUFDQyxNQUFNLEdBQzFDN0IsMEJBQWlCLENBQUMyQixTQUFTLENBQUNDLE9BQU8sQ0FBQ0U7UUFDcEQsQ0FBQyxDQUFDO1FBQ0YsTUFBTSxJQUFJLENBQUNDLGFBQWEsQ0FBQyxDQUFDO01BQzlCLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQ3ZGLE1BQU0sQ0FBQzRDLFFBQVEsS0FBS0MsY0FBUSxDQUFDRCxRQUFRLENBQUNHLFlBQVksRUFBRTtRQUNoRSxNQUFNLElBQUksQ0FBQ3lDLDRCQUE0QixDQUFDZixNQUFNLENBQUM7UUFDL0MsTUFBTSxJQUFJLENBQUNjLGFBQWEsQ0FBQyxDQUFDO01BQzlCLENBQUMsTUFBTTtRQUNILElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQ0UsUUFBUSxDQUFDaEIsTUFBTSxDQUFDLEVBQUU7VUFDMUMsSUFBSSxJQUFJLENBQUNpQixzQkFBc0IsRUFBRTtZQUM3QjtZQUNBO1VBQUEsQ0FDSCxNQUFNO1lBQ0gsTUFBTSxJQUFJLENBQUNILGFBQWEsQ0FBQyxDQUFDO1VBQzlCO1FBQ0o7TUFDSjtNQUVBLElBQUksQ0FBQ3ZGLE1BQU0sR0FBRyxJQUFJO01BQ2xCLElBQUksQ0FBQ2YsdUJBQXVCLEdBQUcsSUFBSTtNQUNuQyxLQUFLLENBQUN1RixPQUFPLENBQUMsQ0FBQztJQUNuQixDQUFDLE1BQU07TUFDSDtJQUNKO0VBQ0o7O0VBRUE7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDSW1CLFdBQVdBLENBQUNsRyxJQUFJLEVBQUU7SUFDZCxJQUFJLENBQUNBLElBQUksRUFBRTtNQUNQO0lBQ0o7SUFDQTtJQUNBQSxJQUFJLEdBQUdBLElBQUksQ0FBQ21HLFFBQVEsQ0FBQyxDQUFDOztJQUV0QjtJQUNBbkcsSUFBSSxHQUFHQSxJQUFJLENBQUNvRyxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztJQUV6QkMsTUFBTSxDQUFDQyxvQkFBb0IsR0FBR3RHLElBQUk7RUFDdEM7O0VBRUE7QUFDSjtBQUNBOztFQUVJdUcsU0FBU0EsQ0FBQ3ZHLElBQUksRUFBRTtJQUNaLE9BQU9wQixlQUFlLENBQUNvSCxRQUFRLENBQUNoRyxJQUFJLENBQUM7RUFDekM7RUFFQXdHLHFCQUFxQkEsQ0FBQ3hHLElBQUksRUFBRTtJQUN4QixJQUFJLENBQUN0QixzQkFBc0IsQ0FBQ3NILFFBQVEsQ0FBQ2hHLElBQUksQ0FBQyxFQUFFO01BQ3hDLElBQUl5RyxLQUFLO01BQ1QsSUFBSTtRQUFBLElBQUFDLFlBQUE7UUFDQSxLQUFBQSxZQUFBLEdBQUksSUFBSSxDQUFDbkcsTUFBTSxjQUFBbUcsWUFBQSxlQUFYQSxZQUFBLENBQWFDLGNBQWMsRUFBRTtVQUM3QixJQUFJQyxNQUFNO1VBQ1YsSUFBSSxDQUFDckcsTUFBTSxDQUFDbEMsSUFBSSxDQUFDLE1BQU07WUFDbkIsT0FBTyxJQUFJd0ksT0FBTyxDQUFDLENBQUNDLE9BQU8sRUFBRUMsTUFBTSxLQUFLO2NBQ3BDLE1BQU1DLGVBQWUsR0FBRyxJQUFJLENBQUN6RyxNQUFNLENBQUMwRyxTQUFTLENBQUMsWUFBVztnQkFDckQsSUFBSTtrQkFDQSxJQUFJQyxNQUFNLEdBQUcsRUFBRTtrQkFFZixNQUFNQyxpQkFBaUIsR0FBRyxNQUFBQSxDQUFNQyxVQUFVLEdBQUcsSUFBSSxLQUFLO29CQUNsRCxNQUFNQyxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUM5RyxNQUFNLENBQUNvRyxjQUFjLENBQUMsQ0FBQztvQkFDaEQsSUFBSVMsVUFBVSxFQUFFO3NCQUNaLE1BQU1FLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQy9HLE1BQU0sQ0FBQ2dILFFBQVEsQ0FBQyxDQUFDO3NCQUMxQyxJQUFJRCxLQUFLLEVBQUU7d0JBQ1AsTUFBTUUsV0FBVyxHQUFHN0ssT0FBTyxDQUFDLHNCQUFzQixDQUFDO3dCQUNuRCxJQUFJOEssVUFBVSxHQUFHLE1BQU1ELFdBQVcsQ0FBQ0UsUUFBUSxDQUFDSixLQUFLLENBQUM7d0JBQ2xELElBQUlHLFVBQVUsSUFBSSxPQUFPQSxVQUFVLEtBQUssUUFBUSxFQUFFOzBCQUM5Q0EsVUFBVSxHQUFHQSxVQUFVLENBQUN4RixPQUFPLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxDQUFDOzBCQUM3RGlGLE1BQU0sQ0FBQ1MsSUFBSSxDQUFDRixVQUFVLENBQUM7d0JBQzNCO3NCQUNKO29CQUNKO29CQUVBUCxNQUFNLENBQUNTLElBQUksQ0FBQ04sS0FBSyxDQUFDO2tCQUN0QixDQUFDO2tCQUVELE1BQU1PLGdCQUFnQixHQUFHLE1BQU0sSUFBSSxDQUFDQSxnQkFBZ0IsQ0FBQyxDQUFDO2tCQUN0RCxJQUFJQSxnQkFBZ0IsRUFBRTtvQkFDbEI7b0JBQ0EsTUFBTUMsT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDdEgsTUFBTSxDQUFDdUgsZ0JBQWdCLENBQUMsQ0FBQztvQkFDcEQsSUFDSUQsT0FBTyxJQUNQM0MsS0FBSyxDQUFDQyxPQUFPLENBQUMwQyxPQUFPLENBQUMsSUFDdEJBLE9BQU8sQ0FBQ3pDLE1BQU0sR0FBRyxDQUFDLEVBQ3BCO3NCQUNFLEtBQUssTUFBTTJDLE1BQU0sSUFBSUYsT0FBTyxFQUFFO3dCQUMxQixNQUFNLElBQUksQ0FBQ3RILE1BQU0sQ0FBQ3lILGNBQWMsQ0FBQ0QsTUFBTSxDQUFDO3dCQUN4QyxNQUFNWixpQkFBaUIsQ0FBQyxDQUFDO3NCQUM3QjtvQkFDSjtrQkFDSixDQUFDLE1BQU07b0JBQ0gsTUFBTUEsaUJBQWlCLENBQUMsS0FBSyxDQUFDO2tCQUNsQzs7a0JBRUE7a0JBQ0EsTUFBTWMsV0FBVyxHQUFHLE1BQU0sSUFBQUMsaUJBQVcsRUFBQ2hCLE1BQU0sRUFBRTtvQkFBRWlCLFNBQVMsRUFBRTtrQkFBSyxDQUFDLENBQUM7a0JBQ2xFLElBQUlGLFdBQVcsSUFBSSxPQUFPQSxXQUFXLEtBQUssUUFBUSxFQUFFO29CQUNoRHJCLE1BQU0sR0FBR3FCLFdBQVcsQ0FBQ2hHLE9BQU8sQ0FBQyx5QkFBeUIsRUFBRSxFQUFFLENBQUM7a0JBQy9EO2tCQUVBLE9BQU8sSUFBSTtnQkFDZixDQUFDLENBQUMsT0FBTzFFLENBQUMsRUFBRTtrQkFDUmtKLEtBQUssR0FBR2xKLENBQUM7a0JBQ1QsT0FBTyxLQUFLO2dCQUNoQjtjQUNKLENBQUMsRUFDRDtnQkFBRTZLLE9BQU8sRUFBRSxFQUFFLEdBQUM7Y0FBSyxDQUFDLENBQUM7Y0FFckIsSUFBSXBCLGVBQWUsSUFBSUEsZUFBZSxDQUFDcUIsSUFBSSxFQUFFO2dCQUN6Q3JCLGVBQWUsQ0FBQ3FCLElBQUksQ0FBQyxNQUFNO2tCQUN2QnZCLE9BQU8sQ0FBQyxDQUFDO2dCQUNiLENBQUMsQ0FBQyxDQUFDd0IsS0FBSyxDQUFFQyxHQUFHLElBQUs7a0JBQ2R4QixNQUFNLENBQUN3QixHQUFHLENBQUM7Z0JBQ2YsQ0FBQyxDQUFDO2NBQ04sQ0FBQyxNQUFNO2dCQUNIekIsT0FBTyxDQUFDLENBQUM7Y0FDYjtZQUNKLENBQUMsQ0FBQztVQUNOLENBQUMsQ0FBQztVQUVGLElBQUlMLEtBQUssRUFBRTtZQUNQLElBQUksQ0FBQ3JILE1BQU0sQ0FBQ3FILEtBQUssQ0FBQyx1QkFBdUIsRUFBRUEsS0FBSyxDQUFDO1VBQ3JEO1VBRUEsT0FBT0csTUFBTTtRQUNqQjtNQUNKLENBQUMsQ0FBQyxPQUFPckosQ0FBQyxFQUFFO1FBQ1IsSUFBSSxDQUFDNkIsTUFBTSxDQUFDcUgsS0FBSyxDQUFDLHVCQUF1QixFQUFFbEosQ0FBQyxDQUFDO1FBQzdDLElBQUlrSixLQUFLLEVBQUU7VUFDUCxJQUFJLENBQUNySCxNQUFNLENBQUNxSCxLQUFLLENBQUMsbUNBQW1DLEVBQUVBLEtBQUssQ0FBQztRQUNqRTtRQUNBO01BQ0o7SUFDSjtFQUNKO0VBRUErQixtQkFBbUJBLENBQUN4SSxJQUFJLEVBQUU7SUFDdEIsSUFBSSxDQUFDckIsb0JBQW9CLENBQUNxSCxRQUFRLENBQUNoRyxJQUFJLENBQUMsRUFBRTtNQUN0QyxJQUFJeUcsS0FBSztNQUNULElBQUk7UUFDQSxJQUNJLElBQUksQ0FBQ2xHLE1BQU0sSUFDWCxJQUFJLENBQUNBLE1BQU0sQ0FBQ2tJLGFBQWEsRUFDM0I7VUFDRSxJQUFJN0IsTUFBTTtVQUNWLElBQUksQ0FBQ3JHLE1BQU0sQ0FBQ2xDLElBQUksQ0FBQyxNQUFNO1lBQ25CLE9BQU8sSUFBSXdJLE9BQU8sQ0FBQyxDQUFDQyxPQUFPLEVBQUVDLE1BQU0sS0FBSztjQUNwQyxJQUFJLENBQUN4RyxNQUFNLENBQUNrSSxhQUFhLENBQUMsQ0FBQyxDQUN0QkosSUFBSSxDQUFDSyxNQUFNLElBQUk7Z0JBQ1o5QixNQUFNLEdBQUc4QixNQUFNO2dCQUFFNUIsT0FBTyxDQUFDLENBQUM7Y0FDOUIsQ0FBQyxDQUFDLENBQ0R3QixLQUFLLENBQUM3QixLQUFLLElBQUk7Z0JBQ1osSUFBSSxDQUFDckgsTUFBTSxDQUFDcUgsS0FBSyxDQUFDLHlCQUF5QixFQUFFQSxLQUFLLENBQUM7Z0JBQUVNLE1BQU0sQ0FBQyxDQUFDO2NBQ2pFLENBQUMsQ0FBQztZQUNWLENBQUMsQ0FBQztVQUNOLENBQUMsQ0FBQztVQUVGLElBQUlOLEtBQUssRUFBRTtZQUNQLElBQUksQ0FBQ3JILE1BQU0sQ0FBQ3FILEtBQUssQ0FBQyx5QkFBeUIsRUFBRUEsS0FBSyxDQUFDO1VBQ3ZEO1VBRUEsT0FBT0csTUFBTTtRQUNqQjtNQUNKLENBQUMsQ0FBQyxPQUFPckosQ0FBQyxFQUFFO1FBQ1IsSUFBSSxDQUFDNkIsTUFBTSxDQUFDcUgsS0FBSyxDQUFDLHlCQUF5QixFQUFFbEosQ0FBQyxDQUFDO1FBQy9DLElBQUlrSixLQUFLLEVBQUU7VUFDUCxJQUFJLENBQUNySCxNQUFNLENBQUNxSCxLQUFLLENBQUMsaUNBQWlDLEVBQUVBLEtBQUssQ0FBQztRQUMvRDtRQUNBO01BQ0o7SUFDSjtFQUNKO0VBRUFrQyxnQkFBZ0JBLENBQUNDLEdBQUcsRUFBRUMsR0FBRyxFQUFFO0lBQ3ZCLElBQUksQ0FBQ0QsR0FBRyxJQUFJLE9BQU9BLEdBQUcsS0FBSyxRQUFRLEVBQUU7TUFDakMsT0FBTyxJQUFJO0lBQ2Y7SUFDQTtJQUNBLE9BQU87TUFDSEUsSUFBSSxFQUFFRixHQUFHLENBQUNHLFNBQVM7TUFDbkJDLEdBQUcsRUFBRUosR0FBRyxDQUFDSyxPQUFPO01BQ2hCQyxLQUFLLEVBQUVOLEdBQUcsQ0FBQ00sS0FBSztNQUNoQkwsR0FBRyxFQUFFQTtJQUNULENBQUM7RUFDTDtFQUVBTSxlQUFlQSxDQUFBLEVBQUc7SUFDZDtJQUNBOUMsTUFBTSxDQUFDQyxvQkFBb0IsR0FBRyxJQUFJO0VBQ3RDO0VBRUEsTUFBTThDLGFBQWFBLENBQUMzQyxLQUFLLEVBQUU7SUFDdkIsSUFBSUEsS0FBSyxJQUFJQSxLQUFLLENBQUM0QyxJQUFJLEtBQUtDLGVBQVcsQ0FBQ0MsU0FBUyxDQUFDQyxzQkFBc0IsRUFBRTtNQUN0RSxJQUFJLENBQUN2RCxzQkFBc0IsR0FBRyxJQUFJO01BQ2xDO0lBQ0osQ0FBQyxNQUFNO01BQ0gsSUFBSSxDQUFDQSxzQkFBc0IsR0FBRyxLQUFLO0lBQ3ZDO0lBQ0E7SUFDQSxJQUFJLENBQUMsSUFBSSxDQUFDM0YsYUFBYSxFQUFFO01BQ3JCO0lBQ0o7SUFDQTtJQUNBLElBQUksSUFBSSxDQUFDckIsT0FBTyxDQUFDcUMsaUJBQWlCLEVBQUU7TUFDaEMsSUFBSTtRQUNBLE1BQU1tSSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUNDLGFBQWEsQ0FBQyxDQUFDO1FBQ3ZDLElBQUlELElBQUksSUFBSXZFLEtBQUssQ0FBQ0MsT0FBTyxDQUFDc0UsSUFBSSxDQUFDLEVBQUU7VUFDN0IsS0FBSyxJQUFJYixHQUFHLElBQUlhLElBQUksRUFBRTtZQUNsQixJQUFJLENBQUN0SyxFQUFFLENBQUNzSyxJQUFJLENBQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDZ0IsZ0JBQWdCLENBQUNDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztVQUMzRDtRQUNKO01BQ0osQ0FBQyxDQUNELE9BQU9yTCxDQUFDLEVBQUU7UUFDTjtRQUNBLElBQUksQ0FBQzZCLE1BQU0sQ0FBQ3FILEtBQUssQ0FBQyw4QkFBOEIsRUFBRWxKLENBQUMsQ0FBQztNQUN4RDtJQUNKOztJQUVBO0lBQ0EsSUFBSSxJQUFJLENBQUMwQixPQUFPLENBQUMwSyxrQkFBa0IsSUFBSSxJQUFJLENBQUNwSixNQUFNLElBQUksSUFBSSxDQUFDQSxNQUFNLENBQUM0QyxRQUFRLEtBQUtDLGNBQVEsQ0FBQ0QsUUFBUSxDQUFDRyxZQUFZLEVBQUU7TUFDM0csSUFBSTtRQUNBLE1BQU1tRyxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUNHLGNBQWMsQ0FBQyxDQUFDO1FBQ3hDLElBQUlILElBQUksSUFBSXZFLEtBQUssQ0FBQ0MsT0FBTyxDQUFDc0UsSUFBSSxDQUFDLEVBQUU7VUFDN0IsS0FBSyxJQUFJYixHQUFHLElBQUlhLElBQUksRUFBRTtZQUNsQixJQUFJLENBQUN0SyxFQUFFLENBQUNzSyxJQUFJLENBQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDZ0IsZ0JBQWdCLENBQUNDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztVQUM1RDtRQUNKO01BQ0osQ0FBQyxDQUNELE9BQU9yTCxDQUFDLEVBQUU7UUFDTjtRQUNBLElBQUksQ0FBQzZCLE1BQU0sQ0FBQ3FILEtBQUssQ0FBQywrQkFBK0IsRUFBRWxKLENBQUMsQ0FBQztNQUN6RDtJQUNKOztJQUVBO0lBQ0EsSUFBSSxJQUFJLENBQUMwQixPQUFPLENBQUM0SyxpQkFBaUIsRUFBRTtNQUNoQyxJQUFJO1FBQ0EsTUFBTUosSUFBSSxHQUFHLElBQUksQ0FBQ0ssYUFBYSxDQUFDLENBQUM7UUFDakMsSUFBSUwsSUFBSSxJQUFJdkUsS0FBSyxDQUFDQyxPQUFPLENBQUNzRSxJQUFJLENBQUMsRUFBRTtVQUM3QixLQUFLLElBQUlNLFFBQVEsSUFBSU4sSUFBSSxFQUFFO1lBQ3ZCLElBQUksQ0FBQ3RLLEVBQUUsQ0FBQ3NLLElBQUksQ0FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUNnQixnQkFBZ0IsQ0FBQ29CLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztVQUNoRTtRQUNKO01BQ0osQ0FBQyxDQUNELE9BQU94TSxDQUFDLEVBQUU7UUFDTjtRQUNBLElBQUksQ0FBQzZCLE1BQU0sQ0FBQ3FILEtBQUssQ0FBQyw4QkFBOEIsRUFBRWxKLENBQUMsQ0FBQztNQUN4RDtJQUNKO0lBRUEsSUFBSSxJQUFJLENBQUNnRCxNQUFNLElBQUksSUFBSSxDQUFDQSxNQUFNLENBQUM0QyxRQUFRLEtBQUtDLGNBQVEsQ0FBQ0QsUUFBUSxDQUFDRyxZQUFZLEVBQUU7TUFDeEUsSUFBSTBHLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQ0MseUJBQXlCLENBQUMsQ0FBQztNQUN0RCxJQUFJRCxTQUFTLEVBQUU7UUFDWDtRQUNBLElBQUksQ0FBQzdLLEVBQUUsQ0FBQytLLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHRixTQUFTO01BQ3JEO0lBQ0o7RUFDSjtFQUVBRyxlQUFlQSxDQUFDQyxPQUFPLEVBQUU7SUFDckIsSUFBSSxDQUFDQSxPQUFPLEVBQUU7TUFDVixNQUFNLElBQUl2SyxvQkFBTyxDQUFDQyxlQUFTLENBQUN5SixTQUFTLENBQUNjLFlBQVksRUFBRSwwQ0FBMEMsQ0FBQztJQUNuRztJQUNBLElBQUksT0FBT0QsT0FBTyxLQUFLLFFBQVEsRUFBRTtNQUM3QixPQUFPQSxPQUFPO0lBQ2xCO0lBQ0EsSUFBSUEsT0FBTyxDQUFDRSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO01BQzVCLE9BQU9GLE9BQU8sQ0FBQyxDQUFDO0lBQ3BCO0lBQ0EsTUFBTUcsUUFBUSxHQUFHLElBQUksQ0FBQ3BLLElBQUksSUFBSSxJQUFJLENBQUNBLElBQUksQ0FBQ1UsWUFBWSxHQUFHLElBQUksQ0FBQ1YsSUFBSSxDQUFDVSxZQUFZLENBQUNZLFdBQVcsQ0FBQyxDQUFDLEdBQUcsSUFBSTtJQUVsRyxJQUFJLElBQUksQ0FBQzlCLFVBQVUsS0FBSyxZQUFZLElBQUk0SyxRQUFRLEtBQUssU0FBUyxFQUFFO01BQzVELElBQUlILE9BQU8sQ0FBQ0UsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUM5QjtRQUNBO1FBQ0E7UUFDQUYsT0FBTyxHQUFHQSxPQUFPLENBQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUNwRixNQUFNLENBQUM7UUFDdEMsSUFBSWdGLE9BQU8sQ0FBQ0UsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1VBQ2hDRixPQUFPLEdBQUcsSUFBSSxDQUFDakssSUFBSSxDQUFDb0IsVUFBVSxHQUFHLE1BQU0sR0FBRzZJLE9BQU87UUFDckQ7UUFDQSxPQUFPLHVDQUF1QyxHQUFHQSxPQUFPLEdBQUcsSUFBSTtNQUNuRSxDQUFDLE1BQU0sSUFBSUEsT0FBTyxDQUFDRSxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUN0QyxPQUFPLHNDQUFzQyxHQUFHRixPQUFPLENBQUNJLE1BQU0sQ0FBQyxRQUFRLENBQUNwRixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FDdEYsSUFBSWdGLE9BQU8sQ0FBQ0UsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFDbkMsT0FBTyxpQ0FBaUMsR0FBR0YsT0FBTyxDQUFDSSxNQUFNLENBQUMsT0FBTyxDQUFDcEYsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQ2hGLElBQUlnRixPQUFPLENBQUNFLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsRUFDNUMsT0FBTyx5Q0FBeUMsR0FBR0YsT0FBTyxDQUFDSSxNQUFNLENBQUMsZ0JBQWdCLENBQUNwRixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FDakcsSUFBSWdGLE9BQU8sQ0FBQ0UsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFDbkMsT0FBTyx3Q0FBd0MsR0FBR0YsT0FBTyxDQUFDSSxNQUFNLENBQUMsT0FBTyxDQUFDcEYsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQ3ZGLElBQUlnRixPQUFPLENBQUNFLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsRUFDNUMsT0FBTyxnREFBZ0QsR0FBR0YsT0FBTyxDQUFDSSxNQUFNLENBQUMsZ0JBQWdCLENBQUNwRixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FDeEcsSUFBSWdGLE9BQU8sQ0FBQ0UsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFDeEMsT0FBTywyQ0FBMkMsQ0FBQyxLQUNsRCxJQUFJRixPQUFPLENBQUNFLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQUs7UUFDcEMsT0FBT0YsT0FBTztJQUN0QixDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUN6SyxVQUFVLEtBQUssWUFBWSxJQUFJNEssUUFBUSxLQUFLLEtBQUssRUFBRTtNQUMvRCxJQUFJSCxPQUFPLENBQUNFLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQUU7UUFDNUIsT0FBT0YsT0FBTztJQUN0QixDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUN6SyxVQUFVLEtBQUssWUFBWSxFQUFFO01BQWE7TUFDdEQsSUFBSXlLLE9BQU8sQ0FBQ0UsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFDNUIsT0FBTyxHQUFHLEdBQUdGLE9BQU8sQ0FBQ0ksTUFBTSxDQUFDLEtBQUssQ0FBQ3BGLE1BQU0sQ0FBQyxDQUFDLENBQU07TUFBQSxLQUMvQyxJQUFJZ0YsT0FBTyxDQUFDRSxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUNuQyxPQUFPLFFBQVEsR0FBR0YsT0FBTyxDQUFDSSxNQUFNLENBQUMsT0FBTyxDQUFDcEYsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQ3RELElBQUlnRixPQUFPLENBQUNFLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQ25DLE9BQU8sR0FBRyxHQUFHRixPQUFPLENBQUNJLE1BQU0sQ0FBQyxPQUFPLENBQUNwRixNQUFNLENBQUMsQ0FBQyxLQUMzQyxJQUFJZ0YsT0FBTyxDQUFDRSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQzVDLE9BQU8sSUFBSSxHQUFHRixPQUFPLENBQUNJLE1BQU0sQ0FBQyxPQUFPLENBQUNwRixNQUFNLENBQUMsQ0FBQyxLQUM1QyxJQUFJZ0YsT0FBTyxDQUFDRSxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUNsQyxPQUFPRixPQUFPLENBQUNJLE1BQU0sQ0FBQyxNQUFNLENBQUNwRixNQUFNLENBQUMsQ0FBQyxDQUFXO0lBQ3hEO0lBRUEsT0FBT2dGLE9BQU87RUFDbEI7RUFFQXhLLG9CQUFvQkEsQ0FBQSxFQUFHO0lBQ25CLElBQUksQ0FBQ0YsT0FBTyxDQUFDK0ssY0FBYyxHQUFHLElBQUksQ0FBQ04sZUFBZTtJQUNsRCxJQUFJLENBQUN6SyxPQUFPLENBQUNnTCxZQUFZLEdBQUd0SCxjQUFRLENBQUNzSCxZQUFZO0lBQ2pELElBQUksQ0FBQ2hMLE9BQU8sQ0FBQ2lMLFVBQVUsR0FBR3ZILGNBQVEsQ0FBQ3VILFVBQVU7SUFDN0MsSUFBSSxDQUFDakwsT0FBTyxDQUFDa0wsV0FBVyxHQUFHeEgsY0FBUSxDQUFDd0gsV0FBVztJQUMvQyxJQUFJLENBQUNsTCxPQUFPLENBQUNtTCxlQUFlLEdBQUd6SCxjQUFRLENBQUN5SCxlQUFlO0lBQ3ZELElBQUksQ0FBQ25MLE9BQU8sQ0FBQ29MLGdCQUFnQixHQUFHMUgsY0FBUSxDQUFDMEgsZ0JBQWdCO0lBQ3pELElBQUksQ0FBQ3BMLE9BQU8sQ0FBQ3FMLGtCQUFrQixHQUFHM0gsY0FBUSxDQUFDMkgsa0JBQWtCO0lBQzdELElBQUksQ0FBQ3JMLE9BQU8sQ0FBQ3NMLHNCQUFzQixHQUFHNUgsY0FBUSxDQUFDNEgsc0JBQXNCO0lBQ3JFLElBQUksQ0FBQ3RMLE9BQU8sQ0FBQ3VMLGNBQWMsR0FBRzdILGNBQVEsQ0FBQzZILGNBQWM7SUFDckQsSUFBSSxDQUFDdkwsT0FBTyxDQUFDd0wsNEJBQTRCLEdBQUc5SCxjQUFRLENBQUM4SCw0QkFBNEI7SUFDakYsSUFBSSxDQUFDeEwsT0FBTyxDQUFDeUwsb0JBQW9CLEdBQUcvSCxjQUFRLENBQUMrSCxvQkFBb0I7SUFDakUsSUFBSSxDQUFDekwsT0FBTyxDQUFDMEwsK0JBQStCLEdBQUdoSSxjQUFRLENBQUNnSSwrQkFBK0I7SUFDdkYsSUFBSSxDQUFDMUwsT0FBTyxDQUFDMkwsa0JBQWtCLEdBQUdqSSxjQUFRLENBQUNpSSxrQkFBa0I7SUFDN0QsSUFBSSxDQUFDM0wsT0FBTyxDQUFDNEwsMEJBQTBCLEdBQUdsSSxjQUFRLENBQUNrSSwwQkFBMEI7SUFDN0UsSUFBSSxDQUFDNUwsT0FBTyxDQUFDNkwscUJBQXFCLEdBQUduSSxjQUFRLENBQUNtSSxxQkFBcUI7SUFDbkUsSUFBSSxDQUFDN0wsT0FBTyxDQUFDOEwsYUFBYSxHQUFHcEksY0FBUSxDQUFDb0ksYUFBYTtJQUNuRCxJQUFJLENBQUM5TCxPQUFPLENBQUMrTCxXQUFXLEdBQUdySSxjQUFRLENBQUNxSSxXQUFXO0lBQy9DLElBQUksQ0FBQy9MLE9BQU8sQ0FBQ2dNLFdBQVcsR0FBR3RJLGNBQVEsQ0FBQ3NJLFdBQVc7RUFDbkQ7RUFFQSxNQUFNNUYsYUFBYUEsQ0FBQSxFQUFHO0lBQ2xCLElBQUk7TUFDQSxJQUFJLElBQUksQ0FBQ3ZGLE1BQU0sSUFBSSxJQUFJLENBQUNBLE1BQU0sQ0FBQ3VGLGFBQWEsRUFBRTtRQUMxQyxNQUFNLElBQUksQ0FBQ3ZGLE1BQU0sQ0FBQ3VGLGFBQWEsQ0FBQyxDQUFDO01BQ3JDO0lBQ0osQ0FBQyxDQUFDLE9BQU92SSxDQUFDLEVBQUU7TUFDUixJQUFJLENBQUM2QixNQUFNLENBQUNxSCxLQUFLLENBQUMscUJBQXFCLEVBQUVsSixDQUFDLENBQUM7SUFDL0M7RUFDSjtFQUVBLE1BQU13SSw0QkFBNEJBLENBQUNmLE1BQU0sRUFBRTtJQUN2QyxPQUFPLElBQUk2QixPQUFPLENBQUMsQ0FBQ0MsT0FBTyxFQUFFQyxNQUFNLEtBQUs7TUFDcEM7TUFDQTtNQUNBO01BQ0EsTUFBTTRFLFFBQVEsR0FBRyxJQUFJLENBQUNqSixRQUFRLENBQUNHLFlBQVksQ0FBQyxZQUFZLENBQUMsR0FDdkQsNERBQTRELElBQUksQ0FBQ3RDLE1BQU0sQ0FBQ21ELFNBQVMsT0FBTyxHQUN4RixrREFBa0QsSUFBSSxDQUFDbkQsTUFBTSxDQUFDbUQsU0FBUyxPQUFPO01BRWhGLElBQUksQ0FBQ3RFLE1BQU0sQ0FBQ3FFLElBQUksQ0FBQyxvQ0FBb0N1QixNQUFNLEtBQUsyRyxRQUFRLEVBQUUsQ0FBQztNQUUzRSxJQUFJO1FBQ0E7UUFDQSxJQUFBQyxnQkFBTyxFQUFDO1VBQ0ovSixHQUFHLEVBQUU4SixRQUFRO1VBQ2JFLE1BQU0sRUFBRSxLQUFLO1VBQ2JDLElBQUksRUFBRSxJQUFJO1VBQ1ZDLGtCQUFrQixFQUFFLEtBQUs7VUFDekJDLElBQUksRUFBRTtZQUNGaEgsTUFBTSxFQUFFQSxNQUFNLEtBQUssUUFBUSxHQUFHLFFBQVEsR0FBRztVQUM3QyxDQUFDO1VBQ0QsTUFBTSxFQUFFO1lBQ0osTUFBTSxFQUFFLElBQUksQ0FBQ3RDLFFBQVEsQ0FBQ0csWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUNvSixRQUFRO1lBQzdELE1BQU0sRUFBRSxJQUFJLENBQUN2SixRQUFRLENBQUNHLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDcUosU0FBUztZQUM5RCxpQkFBaUIsRUFBRTtVQUN2QjtRQUNKLENBQUMsRUFBRSxDQUFDM0QsR0FBRyxFQUFFNEQsR0FBRyxFQUFFSCxJQUFJLEtBQUs7VUFDbkIsSUFBSXpELEdBQUcsRUFBRTtZQUNMLElBQUksQ0FBQ25KLE1BQU0sQ0FBQ3FILEtBQUssQ0FBQyxpREFBaUQsR0FBRzhCLEdBQUcsQ0FBQ3BDLFFBQVEsQ0FBQyxDQUFDLENBQUM7VUFDekY7VUFDQVcsT0FBTyxDQUFDLENBQUM7UUFDYixDQUFDLENBQUM7TUFDTixDQUFDLENBQUMsT0FBT3ZKLENBQUMsRUFBRTtRQUNSLElBQUksQ0FBQzZCLE1BQU0sQ0FBQ3FILEtBQUssQ0FBQyxpREFBaUQsR0FBR2xKLENBQUMsQ0FBQzRJLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDbkZXLE9BQU8sQ0FBQyxDQUFDO01BQ2I7SUFDSixDQUFDLENBQUM7RUFDTjtFQUVBLE1BQU1tRCx5QkFBeUJBLENBQUEsRUFBRztJQUM5QixPQUFPLElBQUlwRCxPQUFPLENBQUMsQ0FBQ0MsT0FBTyxFQUFFQyxNQUFNLEtBQUs7TUFDcEM7TUFDQTtNQUNBO01BQ0EsTUFBTTRFLFFBQVEsR0FBRyxJQUFJLENBQUNqSixRQUFRLENBQUNHLFlBQVksQ0FBQyxZQUFZLENBQUMsR0FDdkQsNERBQTRELElBQUksQ0FBQ3RDLE1BQU0sQ0FBQ21ELFNBQVMsT0FBTyxHQUN4RixrREFBa0QsSUFBSSxDQUFDbkQsTUFBTSxDQUFDbUQsU0FBUyxPQUFPO01BRWhGLElBQUksQ0FBQ3RFLE1BQU0sQ0FBQ3FFLElBQUksQ0FBQyxtQ0FBbUNrSSxRQUFRLEVBQUUsQ0FBQztNQUUvRCxJQUFJO1FBQ0E7UUFDQSxJQUFBQyxnQkFBTyxFQUFDO1VBQ0ovSixHQUFHLEVBQUU4SixRQUFRO1VBQ2JFLE1BQU0sRUFBRSxLQUFLO1VBQ2JDLElBQUksRUFBRSxJQUFJO1VBQ1ZDLGtCQUFrQixFQUFFLEtBQUs7VUFDekIsTUFBTSxFQUFFO1lBQ0osTUFBTSxFQUFFLElBQUksQ0FBQ3JKLFFBQVEsQ0FBQ0csWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUNvSixRQUFRO1lBQzdELE1BQU0sRUFBRSxJQUFJLENBQUN2SixRQUFRLENBQUNHLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDcUosU0FBUztZQUM5RCxpQkFBaUIsRUFBRTtVQUN2QjtRQUNKLENBQUMsRUFBRSxDQUFDM0QsR0FBRyxFQUFFNEQsR0FBRyxFQUFFSCxJQUFJLEtBQUs7VUFBQSxJQUFBSSxxQkFBQTtVQUNuQixJQUFJN0QsR0FBRyxFQUFFO1lBQ0wsSUFBSSxDQUFDbkosTUFBTSxDQUFDcUgsS0FBSyxDQUFDLDhDQUE4QyxHQUFHOEIsR0FBRyxDQUFDcEMsUUFBUSxDQUFDLENBQUMsQ0FBQztVQUN0RjtVQUVBVyxPQUFPLENBQUNrRixJQUFJLGFBQUpBLElBQUksd0JBQUFJLHFCQUFBLEdBQUpKLElBQUksQ0FBRUssa0JBQWtCLGNBQUFELHFCQUFBLHVCQUF4QkEscUJBQUEsQ0FBMEJFLFdBQVcsQ0FBQztRQUNsRCxDQUFDLENBQUM7TUFFTixDQUFDLENBQUMsT0FBTy9PLENBQUMsRUFBRTtRQUNSLElBQUksQ0FBQzZCLE1BQU0sQ0FBQ3FILEtBQUssQ0FBQyw4Q0FBOEMsR0FBR2xKLENBQUMsQ0FBQzRJLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDaEZXLE9BQU8sQ0FBQyxDQUFDO01BQ2I7SUFDSixDQUFDLENBQUM7RUFDTjtBQUNKO0FBQUN0SyxPQUFBLENBQUFFLE9BQUEsR0FBQW9DLFlBQUEiLCJpZ25vcmVMaXN0IjpbXX0=