New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@elastic/search-ui

Package Overview
Dependencies
Maintainers
43
Versions
100
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@elastic/search-ui - npm Package Compare versions

Comparing version 0.3.0 to 0.4.0

es/actions/addFilter.js

5

CHANGELOG.md

@@ -13,1 +13,6 @@ ## 0.1.0 (January 3, 2019)

- Added a "reset" action
## 0.4.0 (February 11, 2019)
- Search As You Type support via setSearchTerm with `reset: true`.
- Fixed issue where reset was not syncing to the URL

319

es/SearchDriver.js
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); }
function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); }
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

@@ -28,2 +20,5 @@

import URLManager from "./URLManager";
import RequestSequencer from "./RequestSequencer";
import DebounceManager from "./DebounceManager";
import * as actions from "./actions";

@@ -47,21 +42,2 @@ function filterSearchParameters(_ref) {

function removeSingleFilterValue(filters, name, value) {
return filters.reduce(function (acc, filter) {
if (filter[name]) {
var currentFilterValues = filter[name];
var updatedFilterValues = currentFilterValues.filter(function (filterValue) {
return !matchFilter(filterValue, value);
});
if (updatedFilterValues.length > 0) {
return acc.concat(_defineProperty({}, name, updatedFilterValues));
} else {
return acc;
}
}
return acc.concat(filter);
}, []);
}
export var DEFAULT_STATE = {

@@ -143,6 +119,2 @@ // Search Parameters -- This is state that represents the input state.

}
function matchFilter(filter1, filter2) {
return filter1 === filter2 || filter1.from && filter1.from === filter2.from && filter1.to && filter1.to === filter2.to;
}
/*

@@ -169,3 +141,5 @@ * The Driver is a framework agnostic search state manager that is capable

_ref5$trackUrlState = _ref5.trackUrlState,
trackUrlState = _ref5$trackUrlState === void 0 ? true : _ref5$trackUrlState;
trackUrlState = _ref5$trackUrlState === void 0 ? true : _ref5$trackUrlState,
_ref5$urlPushDebounce = _ref5.urlPushDebounceLength,
urlPushDebounceLength = _ref5$urlPushDebounce === void 0 ? 500 : _ref5$urlPushDebounce;

@@ -176,158 +150,10 @@ _classCallCheck(this, SearchDriver);

_defineProperty(this, "addFilter", function (name, value) {
var filters = _this.state.filters;
var existingFilterValues = (filters.find(function (f) {
return f[name];
}) || {})[name] || [];
var newFilterValues = existingFilterValues.find(function (existing) {
return matchFilter(existing, value);
}) ? existingFilterValues : existingFilterValues.concat(value);
var filtersWithoutTargetFilter = filters.filter(function (f) {
return !f[name];
});
_defineProperty(this, "_updateSearchResults", function (searchParameters) {
var _ref6 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
_ref6$skipPushToUrl = _ref6.skipPushToUrl,
skipPushToUrl = _ref6$skipPushToUrl === void 0 ? false : _ref6$skipPushToUrl,
_ref6$ignoreIsLoading = _ref6.ignoreIsLoadingCheck,
ignoreIsLoadingCheck = _ref6$ignoreIsLoading === void 0 ? false : _ref6$ignoreIsLoading;
_this._updateSearchResults({
current: 1,
filters: _toConsumableArray(filtersWithoutTargetFilter).concat([_defineProperty({}, name, newFilterValues)])
});
});
_defineProperty(this, "setFilter", function (name, value) {
var filters = _this.state.filters;
filters = filters.filter(function (filter) {
return Object.keys(filter)[0] !== name;
});
_this._updateSearchResults({
current: 1,
filters: _toConsumableArray(filters).concat([_defineProperty({}, name, [value])])
});
});
_defineProperty(this, "reset", function () {
_this._setState(_this.startingState);
});
_defineProperty(this, "removeFilter", function (name, value) {
var filters = _this.state.filters;
var updatedFilters = value ? removeSingleFilterValue(filters, name, value) : filters.filter(function (filter) {
return !filter[name];
});
_this._updateSearchResults({
current: 1,
filters: updatedFilters
});
});
_defineProperty(this, "clearFilters", function () {
var except = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var filters = _this.state.filters;
var updatedFilters = filters.filter(function (filter) {
var filterField = Object.keys(filter)[0];
return except.includes(filterField);
});
_this._updateSearchResults({
current: 1,
filters: updatedFilters
});
});
_defineProperty(this, "setResultsPerPage", function (resultsPerPage) {
_this._updateSearchResults({
current: 1,
resultsPerPage: resultsPerPage
});
});
_defineProperty(this, "setSearchTerm", function (searchTerm) {
_this._updateSearchResults({
current: 1,
filters: [],
searchTerm: searchTerm
});
});
_defineProperty(this, "setSort", function (sortField, sortDirection) {
_this._updateSearchResults({
current: 1,
sortDirection: sortDirection,
sortField: sortField
});
});
_defineProperty(this, "setCurrent", function (current) {
_this._updateSearchResults({
current: current
});
});
_defineProperty(this, "trackClickThrough", function (documentId) {
var tags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
var _this$state = _this.state,
requestId = _this$state.requestId,
searchTerm = _this$state.searchTerm;
_this.apiConnector.click({
query: searchTerm,
documentId: documentId,
requestId: requestId,
tags: tags
});
});
if (!apiConnector) {
throw Error("apiConnector required");
}
this.apiConnector = apiConnector;
this.conditionalFacets = conditionalFacets;
this.disjunctiveFacets = disjunctiveFacets;
this.disjunctiveFacetsAnalyticsTags = disjunctiveFacetsAnalyticsTags;
this.facets = facets;
this.result_fields = result_fields;
this.search_fields = search_fields;
this.subscriptions = [];
this.trackUrlState = trackUrlState;
var urlState;
if (trackUrlState) {
this.URLManager = new URLManager();
urlState = this.URLManager.getStateFromURL();
this.URLManager.onURLStateChange(function (urlState) {
_this._updateSearchResults(_objectSpread({}, DEFAULT_STATE, urlState), true);
});
} else {
urlState = {};
} // Remember the state this application is initialized into, so that we can
// reset to it later.
this.startingState = _objectSpread({}, this.state, initialState); // We filter these here to disallow anything other than valid search
// parameters to be passed in initial state, or url state. `results`, etc,
// should not be allowed to be passed in, that should be generated based on
// the results of the query
var searchParameters = filterSearchParameters(_objectSpread({}, this.startingState, urlState)); // Initialize the state without calling _setState, because we don't
// want to trigger an update callback, we're just initializing the state
// to the correct default values for the initial UI render
this.state = _objectSpread({}, this.state, searchParameters); // We'll trigger an initial search if initial parameters contain
// a search term or filters, otherwise, we'll just save their selections
// in state as initial values.
if (searchParameters.searchTerm || searchParameters.filters.length > 0) {
this._updateSearchResults(searchParameters);
}
}
_createClass(SearchDriver, [{
key: "_updateSearchResults",
value: function _updateSearchResults(searchParameters) {
var _this2 = this;
var skipPushToUrl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
var _this$state$searchPar = _objectSpread({}, this.state, searchParameters),
var _this$state$searchPar = _objectSpread({}, _this.state, searchParameters),
current = _this$state$searchPar.current,

@@ -341,7 +167,7 @@ filters = _this$state$searchPar.filters,

if (isLoading) return;
if (isLoading && !ignoreIsLoadingCheck) return;
var searchOptions = {
disjunctiveFacets: this.disjunctiveFacets,
disjunctiveFacetsAnalyticsTags: this.disjunctiveFacetsAnalyticsTags,
facets: removeConditionalFacets(this.facets, this.conditionalFacets, filters),
disjunctiveFacets: _this.disjunctiveFacets,
disjunctiveFacetsAnalyticsTags: _this.disjunctiveFacetsAnalyticsTags,
facets: removeConditionalFacets(_this.facets, _this.conditionalFacets, filters),
filters: {

@@ -354,4 +180,4 @@ all: formatORFiltersAsAND(filters)

},
result_fields: this.result_fields,
search_fields: this.search_fields
result_fields: _this.result_fields,
search_fields: _this.search_fields
};

@@ -363,3 +189,3 @@

this._setState({
_this._setState({
current: current,

@@ -375,4 +201,10 @@ error: "",

return this.apiConnector.search(searchTerm, searchOptions).then(function (resultList) {
_this2._setState({
var requestId = _this.requestSequencer.next();
return _this.apiConnector.search(searchTerm, searchOptions).then(function (resultList) {
if (_this.requestSequencer.isOldRequest(requestId)) return;
_this.requestSequencer.completed(requestId);
_this._setState({
facets: resultList.info.facets || {},

@@ -388,4 +220,7 @@ isLoading: false,

if (!skipPushToUrl && _this2.trackUrlState) {
_this2.URLManager.pushStateToURL({
if (!skipPushToUrl && _this.trackUrlState) {
// We debounce here so that we don't get a lot of intermediary
// URL state if someone is updating a UI really fast, like typing
// in a live search box for instance.
_this.debounceManager.runWithDebounce(_this.urlPushDebounceLength, _this.URLManager.pushStateToURL.bind(_this.URLManager), {
current: current,

@@ -402,8 +237,68 @@ filters: filters,

_this2._setState({
_this._setState({
error: "An unexpected error occurred: ".concat(error.message)
});
});
});
if (!apiConnector) {
throw Error("apiConnector required");
}
}, {
this.actions = Object.entries(actions).reduce(function (acc, _ref7) {
var _ref8 = _slicedToArray(_ref7, 2),
actionName = _ref8[0],
action = _ref8[1];
return _objectSpread({}, acc, _defineProperty({}, actionName, action.bind(_this)));
}, {});
Object.assign(this, this.actions);
this.requestSequencer = new RequestSequencer();
this.debounceManager = new DebounceManager();
this.apiConnector = apiConnector;
this.conditionalFacets = conditionalFacets;
this.disjunctiveFacets = disjunctiveFacets;
this.disjunctiveFacetsAnalyticsTags = disjunctiveFacetsAnalyticsTags;
this.facets = facets;
this.result_fields = result_fields;
this.search_fields = search_fields;
this.subscriptions = [];
this.trackUrlState = trackUrlState;
this.urlPushDebounceLength = urlPushDebounceLength;
var urlState;
if (trackUrlState) {
this.URLManager = new URLManager();
urlState = this.URLManager.getStateFromURL();
this.URLManager.onURLStateChange(function (urlState) {
_this._updateSearchResults(_objectSpread({}, DEFAULT_STATE, urlState), {
skipPushToUrl: true
});
});
} else {
urlState = {};
} // Remember the state this application is initialized into, so that we can
// reset to it later.
this.startingState = _objectSpread({}, this.state, initialState); // We filter these here to disallow anything other than valid search
// parameters to be passed in initial state, or url state. `results`, etc,
// should not be allowed to be passed in, that should be generated based on
// the results of the query
var _searchParameters = filterSearchParameters(_objectSpread({}, this.startingState, urlState)); // Initialize the state without calling _setState, because we don't
// want to trigger an update callback, we're just initializing the state
// to the correct default values for the initial UI render
this.state = _objectSpread({}, this.state, _searchParameters); // We'll trigger an initial search if initial parameters contain
// a search term or filters, otherwise, we'll just save their selections
// in state as initial values.
if (_searchParameters.searchTerm || _searchParameters.filters.length > 0) {
this._updateSearchResults(_searchParameters);
}
}
_createClass(SearchDriver, [{
key: "_setState",

@@ -439,14 +334,3 @@ value: function _setState(newState) {

value: function getActions() {
return {
addFilter: this.addFilter,
clearFilters: this.clearFilters,
removeFilter: this.removeFilter,
reset: this.reset,
setFilter: this.setFilter,
setResultsPerPage: this.setResultsPerPage,
setSearchTerm: this.setSearchTerm,
setSort: this.setSort,
setCurrent: this.setCurrent,
trackClickThrough: this.trackClickThrough
};
return this.actions;
}

@@ -467,11 +351,2 @@ /**

}
/**
* Filter results - Adds to current filter value
*
* Will trigger new search
*
* @param name String field name to filter on
* @param value String field value to filter on
*/
}]);

@@ -483,2 +358,2 @@

export { SearchDriver as default };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9TZWFyY2hEcml2ZXIuanMiXSwibmFtZXMiOlsiVVJMTWFuYWdlciIsImZpbHRlclNlYXJjaFBhcmFtZXRlcnMiLCJjdXJyZW50IiwiZmlsdGVycyIsInJlc3VsdHNQZXJQYWdlIiwic2VhcmNoVGVybSIsInNvcnREaXJlY3Rpb24iLCJzb3J0RmllbGQiLCJyZW1vdmVTaW5nbGVGaWx0ZXJWYWx1ZSIsIm5hbWUiLCJ2YWx1ZSIsInJlZHVjZSIsImFjYyIsImZpbHRlciIsImN1cnJlbnRGaWx0ZXJWYWx1ZXMiLCJ1cGRhdGVkRmlsdGVyVmFsdWVzIiwiZmlsdGVyVmFsdWUiLCJtYXRjaEZpbHRlciIsImxlbmd0aCIsImNvbmNhdCIsIkRFRkFVTFRfU1RBVEUiLCJlcnJvciIsImlzTG9hZGluZyIsImZhY2V0cyIsInJlcXVlc3RJZCIsInJlc3VsdHMiLCJyZXN1bHRTZWFyY2hUZXJtIiwidG90YWxQYWdlcyIsInRvdGFsUmVzdWx0cyIsIndhc1NlYXJjaGVkIiwiZm9ybWF0T1JGaWx0ZXJzQXNBTkQiLCJPYmplY3QiLCJrZXlzIiwidmFsdWVzIiwibWFwIiwidiIsInJlbW92ZUNvbmRpdGlvbmFsRmFjZXRzIiwiY29uZGl0aW9uYWxGYWNldHMiLCJlbnRyaWVzIiwiZmFjZXRLZXkiLCJmYWNldCIsImZpbHRlcjEiLCJmaWx0ZXIyIiwiZnJvbSIsInRvIiwiU2VhcmNoRHJpdmVyIiwiYXBpQ29ubmVjdG9yIiwiZGlzanVuY3RpdmVGYWNldHMiLCJkaXNqdW5jdGl2ZUZhY2V0c0FuYWx5dGljc1RhZ3MiLCJpbml0aWFsU3RhdGUiLCJyZXN1bHRfZmllbGRzIiwic2VhcmNoX2ZpZWxkcyIsInRyYWNrVXJsU3RhdGUiLCJzdGF0ZSIsImV4aXN0aW5nRmlsdGVyVmFsdWVzIiwiZmluZCIsImYiLCJuZXdGaWx0ZXJWYWx1ZXMiLCJleGlzdGluZyIsImZpbHRlcnNXaXRob3V0VGFyZ2V0RmlsdGVyIiwiX3VwZGF0ZVNlYXJjaFJlc3VsdHMiLCJfc2V0U3RhdGUiLCJzdGFydGluZ1N0YXRlIiwidXBkYXRlZEZpbHRlcnMiLCJleGNlcHQiLCJmaWx0ZXJGaWVsZCIsImluY2x1ZGVzIiwiZG9jdW1lbnRJZCIsInRhZ3MiLCJjbGljayIsInF1ZXJ5IiwiRXJyb3IiLCJzdWJzY3JpcHRpb25zIiwidXJsU3RhdGUiLCJnZXRTdGF0ZUZyb21VUkwiLCJvblVSTFN0YXRlQ2hhbmdlIiwic2VhcmNoUGFyYW1ldGVycyIsInNraXBQdXNoVG9VcmwiLCJzZWFyY2hPcHRpb25zIiwiYWxsIiwicGFnZSIsInNpemUiLCJzb3J0Iiwic2VhcmNoIiwidGhlbiIsInJlc3VsdExpc3QiLCJpbmZvIiwibWV0YSIsInJlcXVlc3RfaWQiLCJ0b3RhbF9wYWdlcyIsInRvdGFsX3Jlc3VsdHMiLCJwdXNoU3RhdGVUb1VSTCIsImNvbnNvbGUiLCJtZXNzYWdlIiwibmV3U3RhdGUiLCJmb3JFYWNoIiwic3Vic2NyaXB0aW9uIiwib25TdGF0ZUNoYW5nZSIsInB1c2giLCJhZGRGaWx0ZXIiLCJjbGVhckZpbHRlcnMiLCJyZW1vdmVGaWx0ZXIiLCJyZXNldCIsInNldEZpbHRlciIsInNldFJlc3VsdHNQZXJQYWdlIiwic2V0U2VhcmNoVGVybSIsInNldFNvcnQiLCJzZXRDdXJyZW50IiwidHJhY2tDbGlja1Rocm91Z2giXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBT0EsVUFBUCxNQUF1QixjQUF2Qjs7QUFFQSxTQUFTQyxzQkFBVCxPQU9HO0FBQUEsTUFOREMsT0FNQyxRQU5EQSxPQU1DO0FBQUEsTUFMREMsT0FLQyxRQUxEQSxPQUtDO0FBQUEsTUFKREMsY0FJQyxRQUpEQSxjQUlDO0FBQUEsTUFIREMsVUFHQyxRQUhEQSxVQUdDO0FBQUEsTUFGREMsYUFFQyxRQUZEQSxhQUVDO0FBQUEsTUFEREMsU0FDQyxRQUREQSxTQUNDO0FBQ0QsU0FBTztBQUNMTCxJQUFBQSxPQUFPLEVBQVBBLE9BREs7QUFFTEMsSUFBQUEsT0FBTyxFQUFQQSxPQUZLO0FB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QUFDRDtBQUVEOzs7Ozs7OztpQ0FLYTtBQUNYLGFBQU87QUFDTEUsUUFBQUEsU0FBUyxFQUFFLEtBQUtBLFNBRFg7QUFFTEMsUUFBQUEsWUFBWSxFQUFFLEtBQUtBLFlBRmQ7QUFHTEMsUUFBQUEsWUFBWSxFQUFFLEtBQUtBLFlBSGQ7QUFJTEMsUUFBQUEsS0FBSyxFQUFFLEtBQUtBLEtBSlA7QUFLTEMsUUFBQUEsU0FBUyxFQUFFLEtBQUtBLFNBTFg7QUFNTEMsUUFBQUEsaUJBQWlCLEVBQUUsS0FBS0EsaUJBTm5CO0FBT0xDLFFBQUFBLGFBQWEsRUFBRSxLQUFLQSxhQVBmO0FBUUxDLFFBQUFBLE9BQU8sRUFBRSxLQUFLQSxPQVJUO0FBU0xDLFFBQUFBLFVBQVUsRUFBRSxLQUFLQSxVQVRaO0FBVUxDLFFBQUFBLGlCQUFpQixFQUFFLEtBQUtBO0FBVm5CLE9BQVA7QUFZRDtBQUVEOzs7Ozs7Ozs7K0JBTVc7QUFDVDtBQUNBO0FBQ0EsK0JBQVksS0FBS3ZELEtBQWpCO0FBQ0Q7QUFFRDs7Ozs7Ozs7Ozs7Ozs7U0EzTW1CUixZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFVSTE1hbmFnZXIgZnJvbSBcIi4vVVJMTWFuYWdlclwiO1xuXG5mdW5jdGlvbiBmaWx0ZXJTZWFyY2hQYXJhbWV0ZXJzKHtcbiAgY3VycmVudCxcbiAgZmlsdGVycyxcbiAgcmVzdWx0c1BlclBhZ2UsXG4gIHNlYXJjaFRlcm0sXG4gIHNvcnREaXJlY3Rpb24sXG4gIHNvcnRGaWVsZFxufSkge1xuICByZXR1cm4ge1xuICAgIGN1cnJlbnQsXG4gICAgZmlsdGVycyxcbiAgICByZXN1bHRzUGVyUGFnZSxcbiAgICBzZWFyY2hUZXJtLFxuICAgIHNvcnREaXJlY3Rpb24sXG4gICAgc29ydEZpZWxkXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVNpbmdsZUZpbHRlclZhbHVlKGZpbHRlcnMsIG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmaWx0ZXJzLnJlZHVjZSgoYWNjLCBmaWx0ZXIpID0+IHtcbiAgICBpZiAoZmlsdGVyW25hbWVdKSB7XG4gICAgICBjb25zdCBjdXJyZW50RmlsdGVyVmFsdWVzID0gZmlsdGVyW25hbWVdO1xuICAgICAgY29uc3QgdXBkYXRlZEZpbHRlclZhbHVlcyA9IGN1cnJlbnRGaWx0ZXJWYWx1ZXMuZmlsdGVyKFxuICAgICAgICBmaWx0ZXJWYWx1ZSA9PiAhbWF0Y2hGaWx0ZXIoZmlsdGVyVmFsdWUsIHZhbHVlKVxuICAgICAgKTtcbiAgICAgIGlmICh1cGRhdGVkRmlsdGVyVmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQoe1xuICAgICAgICAgIFtuYW1lXTogdXBkYXRlZEZpbHRlclZhbHVlc1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhY2MuY29uY2F0KGZpbHRlcik7XG4gIH0sIFtdKTtcbn1cblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfU1RBVEUgPSB7XG4gIC8vIFNlYXJjaCBQYXJhbWV0ZXJzIC0tIFRoaXMgaXMgc3RhdGUgdGhhdCByZXByZXNlbnRzIHRoZSBpbnB1dCBzdGF0ZS5cbiAgY3VycmVudDogMSxcbiAgZmlsdGVyczogW10sXG4gIHJlc3VsdHNQZXJQYWdlOiAyMCxcbiAgc2VhcmNoVGVybTogXCJcIixcbiAgc29ydERpcmVjdGlvbjogXCJcIixcbiAgc29ydEZpZWxkOiBcIlwiLFxuICAvLyBSZXN1bHQgU3RhdGUgLS0gVGhpcyBzdGF0ZSByZXByZXNlbnRzIHN0YXRlIHRoYXQgaXMgdXBkYXRlZCBhdXRvbWF0aWNhbGx5XG4gIC8vIGFzIHRoZSByZXN1bHQgb2YgY2hhbmdpbmcgaW5wdXQgc3RhdGUuXG4gIGVycm9yOiBcIlwiLFxuICBpc0xvYWRpbmc6IGZhbHNlLFxuICBmYWNldHM6IHt9LFxuICByZXF1ZXN0SWQ6IFwiXCIsXG4gIHJlc3VsdHM6IFtdLFxuICByZXN1bHRTZWFyY2hUZXJtOiBcIlwiLFxuICB0b3RhbFBhZ2VzOiAwLFxuICB0b3RhbFJlc3VsdHM6IDAsXG4gIHdhc1NlYXJjaGVkOiBmYWxzZVxufTtcblxuLypcbiAqIFRoaXMgZml4ZXMgYW4gaXNzdWUgd2l0aCBmaWx0ZXJpbmcuXG4gKiBPdXIgZGF0YSBzdHJ1Y3R1cmUgZm9yIGZpbHRlcnMgYXJlIHRoZSBcIk9SXCIgZm9ybWF0IGZvciB0aGUgQXBwIFNlYXJjaFxuICogQVBJOlxuICpcbiAqICBgYGBcbiAqICBmaWx0ZXJzOiB7XG4gKiAgIGFsbDogW1xuICogICAge2F1dGhvcjogW1wiQ2xpbnRvblwiLCBcIlNoYXlcIl19XG4gKiAgIF1cbiAqICB9XG4gKiAgYGBgXG4gKlxuICogSG93ZXZlciwgdGhlIGludGVudCBpcyBmb3IgdGhlbSB0byBiZSBBTkQgZmlsdGVycy4gU28gd2UgbmVlZFxuICogdG8gZG8gYSBxdWljayBjaGFuZ2UgaW4gZm9ybWF0dGluZyBiZWZvcmUgYXBwbHlpbmcgdGhlbS5cbiAqXG4gKiAgYGBgXG4gKiAgIGZpbHRlcnM6IHtcbiAqICAgIGFsbDogW1xuICogICAgIHthdXRob3I6IFwiQ2xpbnRvblwifSxcbiAqICAgICB7YXV0aG9yOiBcIlNoYXlcIn1cbiAqICAgIF1cbiAqICAgfVxuICogIGBgYFxuICovXG5mdW5jdGlvbiBmb3JtYXRPUkZpbHRlcnNBc0FORChmaWx0ZXJzID0gW10pIHtcbiAgcmV0dXJuIGZpbHRlcnMucmVkdWNlKChhY2MsIGZpbHRlcikgPT4ge1xuICAgIGNvbnN0IG5hbWUgPSBPYmplY3Qua2V5cyhmaWx0ZXIpWzBdO1xuICAgIGNvbnN0IHZhbHVlcyA9IE9iamVjdC52YWx1ZXMoZmlsdGVyKVswXTtcbiAgICByZXR1cm4gYWNjLmNvbmNhdCh2YWx1ZXMubWFwKHYgPT4gKHsgW25hbWVdOiB2IH0pKSk7XG4gIH0sIFtdKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ29uZGl0aW9uYWxGYWNldHMoXG4gIGZhY2V0cyA9IHt9LFxuICBjb25kaXRpb25hbEZhY2V0cyA9IHt9LFxuICBmaWx0ZXJzID0gW11cbikge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZmFjZXRzKS5yZWR1Y2UoKGFjYywgW2ZhY2V0S2V5LCBmYWNldF0pID0+IHtcbiAgICBpZiAoXG4gICAgICBjb25kaXRpb25hbEZhY2V0c1tmYWNldEtleV0gJiZcbiAgICAgIHR5cGVvZiBjb25kaXRpb25hbEZhY2V0c1tmYWNldEtleV0gPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgIWNvbmRpdGlvbmFsRmFjZXRzW2ZhY2V0S2V5XSh7IGZpbHRlcnMgfSlcbiAgICApIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgYWNjW2ZhY2V0S2V5XSA9IGZhY2V0O1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hGaWx0ZXIoZmlsdGVyMSwgZmlsdGVyMikge1xuICByZXR1cm4gKFxuICAgIGZpbHRlcjEgPT09IGZpbHRlcjIgfHxcbiAgICAoZmlsdGVyMS5mcm9tICYmXG4gICAgICBmaWx0ZXIxLmZyb20gPT09IGZpbHRlcjIuZnJvbSAmJlxuICAgICAgZmlsdGVyMS50byAmJlxuICAgICAgZmlsdGVyMS50byA9PT0gZmlsdGVyMi50bylcbiAgKTtcbn1cblxuLypcbiAqIFRoZSBEcml2ZXIgaXMgYSBmcmFtZXdvcmsgYWdub3N0aWMgc2VhcmNoIHN0YXRlIG1hbmFnZXIgdGhhdCBpcyBjYXBhYmxlXG4gKiBzeW5jaW5nIHN0YXRlIHRvIHRoZSB1cmwuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlYXJjaERyaXZlciB7XG4gIHN0YXRlID0gREVGQVVMVF9TVEFURTtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgYXBpQ29ubmVjdG9yLFxuICAgIGNvbmRpdGlvbmFsRmFjZXRzLFxuICAgIGRpc2p1bmN0aXZlRmFjZXRzLFxuICAgIGRpc2p1bmN0aXZlRmFjZXRzQW5hbHl0aWNzVGFncyxcbiAgICBmYWNldHMsXG4gICAgaW5pdGlhbFN0YXRlLFxuICAgIHJlc3VsdF9maWVsZHMsXG4gICAgc2VhcmNoX2ZpZWxkcyxcbiAgICB0cmFja1VybFN0YXRlID0gdHJ1ZVxuICB9KSB7XG4gICAgaWYgKCFhcGlDb25uZWN0b3IpIHtcbiAgICAgIHRocm93IEVycm9yKFwiYXBpQ29ubmVjdG9yIHJlcXVpcmVkXCIpO1xuICAgIH1cbiAgICB0aGlzLmFwaUNvbm5lY3RvciA9IGFwaUNvbm5lY3RvcjtcbiAgICB0aGlzLmNvbmRpdGlvbmFsRmFjZXRzID0gY29uZGl0aW9uYWxGYWNldHM7XG4gICAgdGhpcy5kaXNqdW5jdGl2ZUZhY2V0cyA9IGRpc2p1bmN0aXZlRmFjZXRzO1xuICAgIHRoaXMuZGlzanVuY3RpdmVGYWNldHNBbmFseXRpY3NUYWdzID0gZGlzanVuY3RpdmVGYWNldHNBbmFseXRpY3NUYWdzO1xuICAgIHRoaXMuZmFjZXRzID0gZmFjZXRzO1xuICAgIHRoaXMucmVzdWx0X2ZpZWxkcyA9IHJlc3VsdF9maWVsZHM7XG4gICAgdGhpcy5zZWFyY2hfZmllbGRzID0gc2VhcmNoX2ZpZWxkcztcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBbXTtcbiAgICB0aGlzLnRyYWNrVXJsU3RhdGUgPSB0cmFja1VybFN0YXRlO1xuXG4gICAgbGV0IHVybFN0YXRlO1xuICAgIGlmICh0cmFja1VybFN0YXRlKSB7XG4gICAgICB0aGlzLlVSTE1hbmFnZXIgPSBuZXcgVVJMTWFuYWdlcigpO1xuICAgICAgdXJsU3RhdGUgPSB0aGlzLlVSTE1hbmFnZXIuZ2V0U3RhdGVGcm9tVVJMKCk7XG4gICAgICB0aGlzLlVSTE1hbmFnZXIub25VUkxTdGF0ZUNoYW5nZSh1cmxTdGF0ZSA9PiB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVNlYXJjaFJlc3VsdHMoeyAuLi5ERUZBVUxUX1NUQVRFLCAuLi51cmxTdGF0ZSB9LCB0cnVlKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB1cmxTdGF0ZSA9IHt9O1xuICAgIH1cblxuICAgIC8vIFJlbWVtYmVyIHRoZSBzdGF0ZSB0aGlzIGFwcGxpY2F0aW9uIGlzIGluaXRpYWxpemVkIGludG8sIHNvIHRoYXQgd2UgY2FuXG4gICAgLy8gcmVzZXQgdG8gaXQgbGF0ZXIuXG4gICAgdGhpcy5zdGFydGluZ1N0YXRlID0ge1xuICAgICAgLi4udGhpcy5zdGF0ZSxcbiAgICAgIC4uLmluaXRpYWxTdGF0ZVxuICAgIH07XG5cbiAgICAvLyBXZSBmaWx0ZXIgdGhlc2UgaGVyZSB0byBkaXNhbGxvdyBhbnl0aGluZyBvdGhlciB0aGFuIHZhbGlkIHNlYXJjaFxuICAgIC8vIHBhcmFtZXRlcnMgdG8gYmUgcGFzc2VkIGluIGluaXRpYWwgc3RhdGUsIG9yIHVybCBzdGF0ZS4gYHJlc3VsdHNgLCBldGMsXG4gICAgLy8gc2hvdWxkIG5vdCBiZSBhbGxvd2VkIHRvIGJlIHBhc3NlZCBpbiwgdGhhdCBzaG91bGQgYmUgZ2VuZXJhdGVkIGJhc2VkIG9uXG4gICAgLy8gdGhlIHJlc3VsdHMgb2YgdGhlIHF1ZXJ5XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1ldGVycyA9IGZpbHRlclNlYXJjaFBhcmFtZXRlcnMoe1xuICAgICAgLi4udGhpcy5zdGFydGluZ1N0YXRlLFxuICAgICAgLi4udXJsU3RhdGVcbiAgICB9KTtcblxuICAgIC8vIEluaXRpYWxpemUgdGhlIHN0YXRlIHdpdGhvdXQgY2FsbGluZyBfc2V0U3RhdGUsIGJlY2F1c2Ugd2UgZG9uJ3RcbiAgICAvLyB3YW50IHRvIHRyaWdnZXIgYW4gdXBkYXRlIGNhbGxiYWNrLCB3ZSdyZSBqdXN0IGluaXRpYWxpemluZyB0aGUgc3RhdGVcbiAgICAvLyB0byB0aGUgY29ycmVjdCBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIGluaXRpYWwgVUkgcmVuZGVyXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIC4uLnRoaXMuc3RhdGUsXG4gICAgICAuLi5zZWFyY2hQYXJhbWV0ZXJzXG4gICAgfTtcblxuICAgIC8vIFdlJ2xsIHRyaWdnZXIgYW4gaW5pdGlhbCBzZWFyY2ggaWYgaW5pdGlhbCBwYXJhbWV0ZXJzIGNvbnRhaW5cbiAgICAvLyBhIHNlYXJjaCB0ZXJtIG9yIGZpbHRlcnMsIG90aGVyd2lzZSwgd2UnbGwganVzdCBzYXZlIHRoZWlyIHNlbGVjdGlvbnNcbiAgICAvLyBpbiBzdGF0ZSBhcyBpbml0aWFsIHZhbHVlcy5cbiAgICBpZiAoc2VhcmNoUGFyYW1ldGVycy5zZWFyY2hUZXJtIHx8IHNlYXJjaFBhcmFtZXRlcnMuZmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLl91cGRhdGVTZWFyY2hSZXN1bHRzKHNlYXJjaFBhcmFtZXRlcnMpO1xuICAgIH1cbiAgfVxuXG4gIF91cGRhdGVTZWFyY2hSZXN1bHRzKHNlYXJjaFBhcmFtZXRlcnMsIHNraXBQdXNoVG9VcmwgPSBmYWxzZSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGN1cnJlbnQsXG4gICAgICBmaWx0ZXJzLFxuICAgICAgaXNMb2FkaW5nLFxuICAgICAgcmVzdWx0c1BlclBhZ2UsXG4gICAgICBzZWFyY2hUZXJtLFxuICAgICAgc29ydERpcmVjdGlvbixcbiAgICAgIHNvcnRGaWVsZFxuICAgIH0gPSB7XG4gICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgLi4uc2VhcmNoUGFyYW1ldGVyc1xuICAgIH07XG5cbiAgICBpZiAoaXNMb2FkaW5nKSByZXR1cm47XG5cbiAgICBjb25zdCBzZWFyY2hPcHRpb25zID0ge1xuICAgICAgZGlzanVuY3RpdmVGYWNldHM6IHRoaXMuZGlzanVuY3RpdmVGYWNldHMsXG4gICAgICBkaXNqdW5jdGl2ZUZhY2V0c0FuYWx5dGljc1RhZ3M6IHRoaXMuZGlzanVuY3RpdmVGYWNldHNBbmFseXRpY3NUYWdzLFxuICAgICAgZmFjZXRzOiByZW1vdmVDb25kaXRpb25hbEZhY2V0cyhcbiAgICAgICAgdGhpcy5mYWNldHMsXG4gICAgICAgIHRoaXMuY29uZGl0aW9uYWxGYWNldHMsXG4gICAgICAgIGZpbHRlcnNcbiAgICAgICksXG4gICAgICBmaWx0ZXJzOiB7XG4gICAgICAgIGFsbDogZm9ybWF0T1JGaWx0ZXJzQXNBTkQoZmlsdGVycylcbiAgICAgIH0sXG4gICAgICBwYWdlOiB7XG4gICAgICAgIGN1cnJlbnQsXG4gICAgICAgIHNpemU6IHJlc3VsdHNQZXJQYWdlXG4gICAgICB9LFxuICAgICAgcmVzdWx0X2ZpZWxkczogdGhpcy5yZXN1bHRfZmllbGRzLFxuICAgICAgc2VhcmNoX2ZpZWxkczogdGhpcy5zZWFyY2hfZmllbGRzXG4gICAgfTtcblxuICAgIGlmIChzb3J0RmllbGQgJiYgc29ydERpcmVjdGlvbikge1xuICAgICAgc2VhcmNoT3B0aW9ucy5zb3J0ID0ge1xuICAgICAgICBbc29ydEZpZWxkXTogc29ydERpcmVjdGlvblxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLl9zZXRTdGF0ZSh7XG4gICAgICBjdXJyZW50LFxuICAgICAgZXJyb3I6IFwiXCIsXG4gICAgICBmaWx0ZXJzLFxuICAgICAgaXNMb2FkaW5nOiB0cnVlLFxuICAgICAgcmVzdWx0c1BlclBhZ2UsXG4gICAgICBzZWFyY2hUZXJtLFxuICAgICAgc29ydERpcmVjdGlvbixcbiAgICAgIHNvcnRGaWVsZFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpQ29ubmVjdG9yLnNlYXJjaChzZWFyY2hUZXJtLCBzZWFyY2hPcHRpb25zKS50aGVuKFxuICAgICAgcmVzdWx0TGlzdCA9PiB7XG4gICAgICAgIHRoaXMuX3NldFN0YXRlKHtcbiAgICAgICAgICBmYWNldHM6IHJlc3VsdExpc3QuaW5mby5mYWNldHMgfHwge30sXG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICByZXF1ZXN0SWQ6IHJlc3VsdExpc3QuaW5mby5tZXRhLnJlcXVlc3RfaWQsXG4gICAgICAgICAgcmVzdWx0czogcmVzdWx0TGlzdC5yZXN1bHRzLFxuICAgICAgICAgIHJlc3VsdFNlYXJjaFRlcm06IHNlYXJjaFRlcm0sXG4gICAgICAgICAgdG90YWxQYWdlczogcmVzdWx0TGlzdC5pbmZvLm1ldGEucGFnZS50b3RhbF9wYWdlcyxcbiAgICAgICAgICB0b3RhbFJlc3VsdHM6IHJlc3VsdExpc3QuaW5mby5tZXRhLnBhZ2UudG90YWxfcmVzdWx0cyxcbiAgICAgICAgICB3YXNTZWFyY2hlZDogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXNraXBQdXNoVG9VcmwgJiYgdGhpcy50cmFja1VybFN0YXRlKSB7XG4gICAgICAgICAgdGhpcy5VUkxNYW5hZ2VyLnB1c2hTdGF0ZVRvVVJMKHtcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgICAgcmVzdWx0c1BlclBhZ2UsXG4gICAgICAgICAgICBzZWFyY2hUZXJtLFxuICAgICAgICAgICAgc29ydERpcmVjdGlvbixcbiAgICAgICAgICAgIHNvcnRGaWVsZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3IgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgdGhpcy5fc2V0U3RhdGUoe1xuICAgICAgICAgIGVycm9yOiBgQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cnJlZDogJHtlcnJvci5tZXNzYWdlfWBcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIF9zZXRTdGF0ZShuZXdTdGF0ZSkge1xuICAgIGNvbnN0IHN0YXRlID0geyAuLi50aGlzLnN0YXRlLCAuLi5uZXdTdGF0ZSB9O1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YnNjcmlwdGlvbiA9PiBzdWJzY3JpcHRpb24oc3RhdGUpKTtcbiAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gIH1cblxuICAvKipcbiAgICogQW55IHRpbWUgc3RhdGUgaXMgdXBkYXRlZCBpbiB0aGlzIERyaXZlciwgdGhlIHByb3ZpZGVkIGNhbGxiYWNrXG4gICAqIHdpbGwgYmUgZXhlY3V0ZWQgd2l0aCB0aGUgdXBkYXRlZCBzdGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIG9uU3RhdGVDaGFuZ2UgRnVuY3Rpb25cbiAgICovXG4gIHN1YnNjcmliZVRvU3RhdGVDaGFuZ2VzKG9uU3RhdGVDaGFuZ2UpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChvblN0YXRlQ2hhbmdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIGF2YWlsYWJsZSBhY2l0b25zXG4gICAqXG4gICAqIEByZXR1cm5zIE9iamVjdCBBbGwgYWN0aW9uc1xuICAgKi9cbiAgZ2V0QWN0aW9ucygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYWRkRmlsdGVyOiB0aGlzLmFkZEZpbHRlcixcbiAgICAgIGNsZWFyRmlsdGVyczogdGhpcy5jbGVhckZpbHRlcnMsXG4gICAgICByZW1vdmVGaWx0ZXI6IHRoaXMucmVtb3ZlRmlsdGVyLFxuICAgICAgcmVzZXQ6IHRoaXMucmVzZXQsXG4gICAgICBzZXRGaWx0ZXI6IHRoaXMuc2V0RmlsdGVyLFxuICAgICAgc2V0UmVzdWx0c1BlclBhZ2U6IHRoaXMuc2V0UmVzdWx0c1BlclBhZ2UsXG4gICAgICBzZXRTZWFyY2hUZXJtOiB0aGlzLnNldFNlYXJjaFRlcm0sXG4gICAgICBzZXRTb3J0OiB0aGlzLnNldFNvcnQsXG4gICAgICBzZXRDdXJyZW50OiB0aGlzLnNldEN1cnJlbnQsXG4gICAgICB0cmFja0NsaWNrVGhyb3VnaDogdGhpcy50cmFja0NsaWNrVGhyb3VnaFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgY3VycmVudCBzdGF0ZS4gVHlwaWNhbGx5IHVzZWQgb24gYXBwIGluaXRpYWxpemF0aW9uLiBTdWJzZXF1ZW50XG4gICAqIHN0YXRlIHVwZGF0ZXMgc2hvdWxkIGNvbWUgdGhyb3VnaCBzdWJzY3JpcHRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIE9iamVjdCBDdXJyZW50IHN0YXRlXG4gICAqL1xuICBnZXRTdGF0ZSgpIHtcbiAgICAvLyBXZSByZXR1cm4gYSBjb3B5IG9mIHN0YXRlIGhlcmUsIGJlY2F1c2Ugd2Ugd2FudCB0byBlbnN1cmUgdGhlIHN0YXRlXG4gICAgLy8gaW5zaWRlIG9mIHRoaXMgb2JqZWN0IHJlbWFpbnMgaW1tdXRhYmxlLlxuICAgIHJldHVybiB7IC4uLnRoaXMuc3RhdGUgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXIgcmVzdWx0cyAtIEFkZHMgdG8gY3VycmVudCBmaWx0ZXIgdmFsdWVcbiAgICpcbiAgICogV2lsbCB0cmlnZ2VyIG5ldyBzZWFyY2hcbiAgICpcbiAgICogQHBhcmFtIG5hbWUgU3RyaW5nIGZpZWxkIG5hbWUgdG8gZmlsdGVyIG9uXG4gICAqIEBwYXJhbSB2YWx1ZSBTdHJpbmcgZmllbGQgdmFsdWUgdG8gZmlsdGVyIG9uXG4gICAqL1xuICBhZGRGaWx0ZXIgPSAobmFtZSwgdmFsdWUpID0+IHtcbiAgICBjb25zdCB7IGZpbHRlcnMgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICBjb25zdCBleGlzdGluZ0ZpbHRlclZhbHVlcyA9IChmaWx0ZXJzLmZpbmQoZiA9PiBmW25hbWVdKSB8fCB7fSlbbmFtZV0gfHwgW107XG5cbiAgICBjb25zdCBuZXdGaWx0ZXJWYWx1ZXMgPSBleGlzdGluZ0ZpbHRlclZhbHVlcy5maW5kKGV4aXN0aW5nID0+XG4gICAgICBtYXRjaEZpbHRlcihleGlzdGluZywgdmFsdWUpXG4gICAgKVxuICAgICAgPyBleGlzdGluZ0ZpbHRlclZhbHVlc1xuICAgICAgOiBleGlzdGluZ0ZpbHRlclZhbHVlcy5jb25jYXQodmFsdWUpO1xuXG4gICAgY29uc3QgZmlsdGVyc1dpdGhvdXRUYXJnZXRGaWx0ZXIgPSBmaWx0ZXJzLmZpbHRlcihmID0+ICFmW25hbWVdKTtcblxuICAgIHRoaXMuX3VwZGF0ZVNlYXJjaFJlc3VsdHMoe1xuICAgICAgY3VycmVudDogMSxcbiAgICAgIGZpbHRlcnM6IFsuLi5maWx0ZXJzV2l0aG91dFRhcmdldEZpbHRlciwgeyBbbmFtZV06IG5ld0ZpbHRlclZhbHVlcyB9XVxuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBGaWx0ZXIgcmVzdWx0cyAtIFJlcGxhY2VzIGN1cnJlbnQgZmlsdGVyIHZhbHVlXG4gICAqXG4gICAqIFdpbGwgdHJpZ2dlciBuZXcgc2VhcmNoXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIFN0cmluZyBmaWVsZCBuYW1lIHRvIGZpbHRlciBvblxuICAgKiBAcGFyYW0gdmFsdWUgU3RyaW5nIGZpZWxkIHZhbHVlIHRvIGZpbHRlciBvblxuICAgKi9cbiAgc2V0RmlsdGVyID0gKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgbGV0IHsgZmlsdGVycyB9ID0gdGhpcy5zdGF0ZTtcbiAgICBmaWx0ZXJzID0gZmlsdGVycy5maWx0ZXIoZmlsdGVyID0+IE9iamVjdC5rZXlzKGZpbHRlcilbMF0gIT09IG5hbWUpO1xuXG4gICAgdGhpcy5fdXBkYXRlU2VhcmNoUmVzdWx0cyh7XG4gICAgICBjdXJyZW50OiAxLFxuICAgICAgZmlsdGVyczogWy4uLmZpbHRlcnMsIHsgW25hbWVdOiBbdmFsdWVdIH1dXG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlc2V0IHNlYXJjaCBleHBlcmllbmNlIHRvIGluaXRpYWwgc3RhdGVcbiAgICpcbiAgICovXG4gIHJlc2V0ID0gKCkgPT4ge1xuICAgIHRoaXMuX3NldFN0YXRlKHRoaXMuc3RhcnRpbmdTdGF0ZSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBmaWx0ZXIgZnJvbSByZXN1bHRzXG4gICAqXG4gICAqIFdpbGwgdHJpZ2dlciBuZXcgc2VhcmNoXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIFN0cmluZyBmaWVsZCBuYW1lIGZvciBmaWx0ZXIgdG8gcmVtb3ZlXG4gICAqIEBwYXJhbSB2YWx1ZSBTdHJpbmcgKE9wdGlvbmFsKSBmaWVsZCB2YWx1ZSBmb3IgZmlsdGVyIHRvIHJlbW92ZVxuICAgKi9cbiAgcmVtb3ZlRmlsdGVyID0gKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgY29uc3QgeyBmaWx0ZXJzIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgY29uc3QgdXBkYXRlZEZpbHRlcnMgPSB2YWx1ZVxuICAgICAgPyByZW1vdmVTaW5nbGVGaWx0ZXJWYWx1ZShmaWx0ZXJzLCBuYW1lLCB2YWx1ZSlcbiAgICAgIDogZmlsdGVycy5maWx0ZXIoZmlsdGVyID0+ICFmaWx0ZXJbbmFtZV0pO1xuXG4gICAgdGhpcy5fdXBkYXRlU2VhcmNoUmVzdWx0cyh7XG4gICAgICBjdXJyZW50OiAxLFxuICAgICAgZmlsdGVyczogdXBkYXRlZEZpbHRlcnNcbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogUmVtb3ZlIGFsbCBmaWx0ZXJzXG4gICAqXG4gICAqIFdpbGwgdHJpZ2dlciBuZXcgc2VhcmNoXG4gICAqXG4gICAqIEBwYXJhbSBleGNlcHQgQXJyYXlbU3RyaW5nXSBmaWVsZCBuYW1lIG9mIGFueSBmaWx0ZXJzIHRoYXQgc2hvdWxkIHJlbWFpblxuICAgKi9cbiAgY2xlYXJGaWx0ZXJzID0gKGV4Y2VwdCA9IFtdKSA9PiB7XG4gICAgY29uc3QgeyBmaWx0ZXJzIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgY29uc3QgdXBkYXRlZEZpbHRlcnMgPSBmaWx0ZXJzLmZpbHRlcihmaWx0ZXIgPT4ge1xuICAgICAgY29uc3QgZmlsdGVyRmllbGQgPSBPYmplY3Qua2V5cyhmaWx0ZXIpWzBdO1xuICAgICAgcmV0dXJuIGV4Y2VwdC5pbmNsdWRlcyhmaWx0ZXJGaWVsZCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl91cGRhdGVTZWFyY2hSZXN1bHRzKHtcbiAgICAgIGN1cnJlbnQ6IDEsXG4gICAgICBmaWx0ZXJzOiB1cGRhdGVkRmlsdGVyc1xuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTZXQgdGhlIG51bWJlciBvZiByZXN1bHRzIHRvIHNob3dcbiAgICpcbiAgICogV2lsbCB0cmlnZ2VyIG5ldyBzZWFyY2hcbiAgICpcbiAgICogQHBhcmFtIHJlc3VsdHNQZXJQYWdlIEludGVnZXJcbiAgICovXG4gIHNldFJlc3VsdHNQZXJQYWdlID0gcmVzdWx0c1BlclBhZ2UgPT4ge1xuICAgIHRoaXMuX3VwZGF0ZVNlYXJjaFJlc3VsdHMoe1xuICAgICAgY3VycmVudDogMSxcbiAgICAgIHJlc3VsdHNQZXJQYWdlXG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY3VycmVudCBzZWFyY2ggdGVybVxuICAgKlxuICAgKiBXaWxsIHRyaWdnZXIgbmV3IHNlYXJjaFxuICAgKlxuICAgKiBAcGFyYW0gc2VhcmNoVGVybSBTdHJpbmdcbiAgICovXG4gIHNldFNlYXJjaFRlcm0gPSBzZWFyY2hUZXJtID0+IHtcbiAgICB0aGlzLl91cGRhdGVTZWFyY2hSZXN1bHRzKHtcbiAgICAgIGN1cnJlbnQ6IDEsXG4gICAgICBmaWx0ZXJzOiBbXSxcbiAgICAgIHNlYXJjaFRlcm1cbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogU2V0IHRoZSBjdXJyZW50IHNvcnRcbiAgICpcbiAgICogV2lsbCB0cmlnZ2VyIG5ldyBzZWFyY2hcbiAgICpcbiAgICogQHBhcmFtIHNvcnRGaWVsZCBTdHJpbmdcbiAgICogQHBhcmFtIHNvcnREaXJlY3Rpb24gU3RyaW5nIFtcImFzY1wifFwiZGVzY1wiXVxuICAgKi9cbiAgc2V0U29ydCA9IChzb3J0RmllbGQsIHNvcnREaXJlY3Rpb24pID0+IHtcbiAgICB0aGlzLl91cGRhdGVTZWFyY2hSZXN1bHRzKHtcbiAgICAgIGN1cnJlbnQ6IDEsXG4gICAgICBzb3J0RGlyZWN0aW9uLFxuICAgICAgc29ydEZpZWxkXG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY3VycmVudCBwYWdlXG4gICAqXG4gICAqIFdpbGwgdHJpZ2dlciBuZXcgc2VhcmNoXG4gICAqXG4gICAqIEBwYXJhbSBjdXJyZW50IEludGVnZXJcbiAgICovXG4gIHNldEN1cnJlbnQgPSBjdXJyZW50ID0+IHtcbiAgICB0aGlzLl91cGRhdGVTZWFyY2hSZXN1bHRzKHtcbiAgICAgIGN1cnJlbnRcbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogUmVwb3J0IGEgY2xpY2sgdGhyb3VnaCBldmVudC4gQSBjbGljayB0aHJvdWdoIGV2ZW50IGlzIHdoZW4gYSB1c2VyXG4gICAqIGNsaWNrcyBvbiBhIHJlc3VsdCBsaW5rLiBDbGljayBldmVudHMgY2FuIGJlIHJldmlld2VkIGluIHRoZSBBcHAgU2VhcmNoXG4gICAqIEFuYWx5dGljcyBEYXNoYm9hcmQuXG4gICAqXG4gICAqIEBwYXJhbSBkb2N1bWVudElkIFN0cmluZyBUaGUgZG9jdW1lbnQgSUQgYXNzb2NpYXRlZCB3aXRoIHJlc3VsdCB0aGF0IHdhc1xuICAgKiBjbGlja2VkXG4gICAqIEBwYXJhbSB0YWcgQXJyYXlbU3RyaW5nXSBPcHRpb25hbCBUYWdzIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNhdGVnb3JpemVcbiAgICogdGhpcyBjbGljayBldmVudFxuICAgKi9cbiAgdHJhY2tDbGlja1Rocm91Z2ggPSAoZG9jdW1lbnRJZCwgdGFncyA9IFtdKSA9PiB7XG4gICAgY29uc3QgeyByZXF1ZXN0SWQsIHNlYXJjaFRlcm0gfSA9IHRoaXMuc3RhdGU7XG5cbiAgICB0aGlzLmFwaUNvbm5lY3Rvci5jbGljayh7XG4gICAgICBxdWVyeTogc2VhcmNoVGVybSxcbiAgICAgIGRvY3VtZW50SWQsXG4gICAgICByZXF1ZXN0SWQsXG4gICAgICB0YWdzXG4gICAgfSk7XG4gIH07XG59XG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9TZWFyY2hEcml2ZXIuanMiXSwibmFtZXMiOlsiVVJMTWFuYWdlciIsIlJlcXVlc3RTZXF1ZW5jZXIiLCJEZWJvdW5jZU1hbmFnZXIiLCJhY3Rpb25zIiwiZmlsdGVyU2VhcmNoUGFyYW1ldGVycyIsImN1cnJlbnQiLCJmaWx0ZXJzIiwicmVzdWx0c1BlclBhZ2UiLCJzZWFyY2hUZXJtIiwic29ydERpcmVjdGlvbiIsInNvcnRGaWVsZCIsIkRFRkFVTFRfU1RBVEUiLCJlcnJvciIsImlzTG9hZGluZyIsImZhY2V0cyIsInJlcXVlc3RJZCIsInJlc3VsdHMiLCJyZXN1bHRTZWFyY2hUZXJtIiwidG90YWxQYWdlcyIsInRvdGFsUmVzdWx0cyIsIndhc1NlYXJjaGVkIiwiZm9ybWF0T1JGaWx0ZXJzQXNBTkQiLCJyZWR1Y2UiLCJhY2MiLCJmaWx0ZXIiLCJuYW1lIiwiT2JqZWN0Iiwia2V5cyIsInZhbHVlcyIsImNvbmNhdCIsIm1hcCIsInYiLCJyZW1vdmVDb25kaXRpb25hbEZhY2V0cyIsImNvbmRpdGlvbmFsRmFjZXRzIiwiZW50cmllcyIsImZhY2V0S2V5IiwiZmFjZXQiLCJTZWFyY2hEcml2ZXIiLCJhcGlDb25uZWN0b3IiLCJkaXNqdW5jdGl2ZUZhY2V0cyIsImRpc2p1bmN0aXZlRmFjZXRzQW5hbHl0aWNzVGFncyIsImluaXRpYWxTdGF0ZSIsInJlc3VsdF9maWVsZHMiLCJzZWFyY2hfZmllbGRzIiwidHJhY2tVcmxTdGF0ZSIsInVybFB1c2hEZWJvdW5jZUxlbmd0aCIsInNlYXJjaFBhcmFtZXRlcnMiLCJza2lwUHVzaFRvVXJsIiwiaWdub3JlSXNMb2FkaW5nQ2hlY2siLCJzdGF0ZSIsInNlYXJjaE9wdGlvbnMiLCJhbGwiLCJwYWdlIiwic2l6ZSIsInNvcnQiLCJfc2V0U3RhdGUiLCJyZXF1ZXN0U2VxdWVuY2VyIiwibmV4dCIsInNlYXJjaCIsInRoZW4iLCJyZXN1bHRMaXN0IiwiaXNPbGRSZXF1ZXN0IiwiY29tcGxldGVkIiwiaW5mbyIsIm1ldGEiLCJyZXF1ZXN0X2lkIiwidG90YWxfcGFnZXMiLCJ0b3RhbF9yZXN1bHRzIiwiZGVib3VuY2VNYW5hZ2VyIiwicnVuV2l0aERlYm91bmNlIiwicHVzaFN0YXRlVG9VUkwiLCJiaW5kIiwiY29uc29sZSIsIm1lc3NhZ2UiLCJFcnJvciIsImFjdGlvbk5hbWUiLCJhY3Rpb24iLCJhc3NpZ24iLCJzdWJzY3JpcHRpb25zIiwidXJsU3RhdGUiLCJnZXRTdGF0ZUZyb21VUkwiLCJvblVSTFN0YXRlQ2hhbmdlIiwiX3VwZGF0ZVNlYXJjaFJlc3VsdHMiLCJzdGFydGluZ1N0YXRlIiwibGVuZ3RoIiwibmV3U3RhdGUiLCJmb3JFYWNoIiwic3Vic2NyaXB0aW9uIiwib25TdGF0ZUNoYW5nZSIsInB1c2giXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU9BLFVBQVAsTUFBdUIsY0FBdkI7QUFFQSxPQUFPQyxnQkFBUCxNQUE2QixvQkFBN0I7QUFDQSxPQUFPQyxlQUFQLE1BQTRCLG1CQUE1QjtBQUVBLE9BQU8sS0FBS0MsT0FBWixNQUF5QixXQUF6Qjs7QUFFQSxTQUFTQyxzQkFBVCxPQU9HO0FBQUEsTUFOREMsT0FNQyxRQU5EQSxPQU1DO0FBQUEsTUFMREMsT0FLQyxRQUxEQSxPQUtDO0FBQUEsTUFKREMsY0FJQyxRQUpEQSxjQUlDO0FBQUEsTUFIREMsVUFHQyxRQUhEQSxVQUdDO0FBQUEsTUFGREMsYUFFQyxRQUZEQSxhQUVDO0FBQUEsTUFEREMsU0FDQyxRQUREQSxTQUNDO0FBQ0QsU0FBTztBQUNMTCxJQUFBQSxPQUFPLEVBQVBBLE9BREs7QUFFTEMsSUFBQUEsT0FBTyxFQUFQQSxPQUZLO0FBR0xDLElBQUFBLGNBQWMsRUFBZEEsY0FISztBQUlMQyxJQUFBQSxVQUFVLEVBQVZBLFVBSks7QUFLTEMsSUFBQUEsYUFBYSxFQUFiQSxhQUxLO0FBTUxDLElBQUFBLFNBQVMsRUFBVEE7QUFOSyxHQUFQO0FBUUQ7O0FBRUQsT0FBTyxJQUFNQyxhQUFhLEdBQUc7QUFDM0I7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QVg7QUFDRCxLQXpDQSxDQTJDRDtBQUNBOzs7QUFDQSxTQUFLSSxhQUFMLHFCQUNLLEtBQUtsQyxLQURWLEVBRUtSLFlBRkwsRUE3Q0MsQ0FrREQ7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsUUFBTUssaUJBQWdCLEdBQUcxQyxzQkFBc0IsbUJBQzFDLEtBQUsrRSxhQURxQyxFQUUxQ0osUUFGMEMsRUFBL0MsQ0F0REMsQ0EyREQ7QUFDQTtBQUNBOzs7QUFDQSxTQUFLOUIsS0FBTCxxQkFDSyxLQUFLQSxLQURWLEVBRUtILGlCQUZMLEVBOURDLENBbUVEO0FBQ0E7QUFDQTs7QUFDQSxRQUFJQSxpQkFBZ0IsQ0FBQ3RDLFVBQWpCLElBQStCc0MsaUJBQWdCLENBQUN4QyxPQUFqQixDQUF5QjhFLE1BQXpCLEdBQWtDLENBQXJFLEVBQXdFO0FBQ3RFLFdBQUtGLG9CQUFMLENBQTBCcEMsaUJBQTFCO0FBQ0Q7QUFDRjs7Ozs4QkFzR1N1QyxRLEVBQVU7QUFDbEIsVUFBTXBDLEtBQUsscUJBQVEsS0FBS0EsS0FBYixFQUF1Qm9DLFFBQXZCLENBQVg7O0FBQ0EsV0FBS1AsYUFBTCxDQUFtQlEsT0FBbkIsQ0FBMkIsVUFBQUMsWUFBWTtBQUFBLGVBQUlBLFlBQVksQ0FBQ3RDLEtBQUQsQ0FBaEI7QUFBQSxPQUF2QztBQUNBLFdBQUtBLEtBQUwsR0FBYUEsS0FBYjtBQUNEO0FBRUQ7Ozs7Ozs7Ozs0Q0FNd0J1QyxhLEVBQWU7QUFDckMsV0FBS1YsYUFBTCxDQUFtQlcsSUFBbkIsQ0FBd0JELGFBQXhCO0FBQ0Q7QUFFRDs7Ozs7Ozs7aUNBS2E7QUFDWCxhQUFPLEtBQUtyRixPQUFaO0FBQ0Q7QUFFRDs7Ozs7Ozs7OytCQU1XO0FBQ1Q7QUFDQTtBQUNBLCtCQUFZLEtBQUs4QyxLQUFqQjtBQUNEOzs7Ozs7U0FoT2tCWixZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFVSTE1hbmFnZXIgZnJvbSBcIi4vVVJMTWFuYWdlclwiO1xuXG5pbXBvcnQgUmVxdWVzdFNlcXVlbmNlciBmcm9tIFwiLi9SZXF1ZXN0U2VxdWVuY2VyXCI7XG5pbXBvcnQgRGVib3VuY2VNYW5hZ2VyIGZyb20gXCIuL0RlYm91bmNlTWFuYWdlclwiO1xuXG5pbXBvcnQgKiBhcyBhY3Rpb25zIGZyb20gXCIuL2FjdGlvbnNcIjtcblxuZnVuY3Rpb24gZmlsdGVyU2VhcmNoUGFyYW1ldGVycyh7XG4gIGN1cnJlbnQsXG4gIGZpbHRlcnMsXG4gIHJlc3VsdHNQZXJQYWdlLFxuICBzZWFyY2hUZXJtLFxuICBzb3J0RGlyZWN0aW9uLFxuICBzb3J0RmllbGRcbn0pIHtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW50LFxuICAgIGZpbHRlcnMsXG4gICAgcmVzdWx0c1BlclBhZ2UsXG4gICAgc2VhcmNoVGVybSxcbiAgICBzb3J0RGlyZWN0aW9uLFxuICAgIHNvcnRGaWVsZFxuICB9O1xufVxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9TVEFURSA9IHtcbiAgLy8gU2VhcmNoIFBhcmFtZXRlcnMgLS0gVGhpcyBpcyBzdGF0ZSB0aGF0IHJlcHJlc2VudHMgdGhlIGlucHV0IHN0YXRlLlxuICBjdXJyZW50OiAxLFxuICBmaWx0ZXJzOiBbXSxcbiAgcmVzdWx0c1BlclBhZ2U6IDIwLFxuICBzZWFyY2hUZXJtOiBcIlwiLFxuICBzb3J0RGlyZWN0aW9uOiBcIlwiLFxuICBzb3J0RmllbGQ6IFwiXCIsXG4gIC8vIFJlc3VsdCBTdGF0ZSAtLSBUaGlzIHN0YXRlIHJlcHJlc2VudHMgc3RhdGUgdGhhdCBpcyB1cGRhdGVkIGF1dG9tYXRpY2FsbHlcbiAgLy8gYXMgdGhlIHJlc3VsdCBvZiBjaGFuZ2luZyBpbnB1dCBzdGF0ZS5cbiAgZXJyb3I6IFwiXCIsXG4gIGlzTG9hZGluZzogZmFsc2UsXG4gIGZhY2V0czoge30sXG4gIHJlcXVlc3RJZDogXCJcIixcbiAgcmVzdWx0czogW10sXG4gIHJlc3VsdFNlYXJjaFRlcm06IFwiXCIsXG4gIHRvdGFsUGFnZXM6IDAsXG4gIHRvdGFsUmVzdWx0czogMCxcbiAgd2FzU2VhcmNoZWQ6IGZhbHNlXG59O1xuXG4vKlxuICogVGhpcyBmaXhlcyBhbiBpc3N1ZSB3aXRoIGZpbHRlcmluZy5cbiAqIE91ciBkYXRhIHN0cnVjdHVyZSBmb3IgZmlsdGVycyBhcmUgdGhlIFwiT1JcIiBmb3JtYXQgZm9yIHRoZSBBcHAgU2VhcmNoXG4gKiBBUEk6XG4gKlxuICogIGBgYFxuICogIGZpbHRlcnM6IHtcbiAqICAgYWxsOiBbXG4gKiAgICB7YXV0aG9yOiBbXCJDbGludG9uXCIsIFwiU2hheVwiXX1cbiAqICAgXVxuICogIH1cbiAqICBgYGBcbiAqXG4gKiBIb3dldmVyLCB0aGUgaW50ZW50IGlzIGZvciB0aGVtIHRvIGJlIEFORCBmaWx0ZXJzLiBTbyB3ZSBuZWVkXG4gKiB0byBkbyBhIHF1aWNrIGNoYW5nZSBpbiBmb3JtYXR0aW5nIGJlZm9yZSBhcHBseWluZyB0aGVtLlxuICpcbiAqICBgYGBcbiAqICAgZmlsdGVyczoge1xuICogICAgYWxsOiBbXG4gKiAgICAge2F1dGhvcjogXCJDbGludG9uXCJ9LFxuICogICAgIHthdXRob3I6IFwiU2hheVwifVxuICogICAgXVxuICogICB9XG4gKiAgYGBgXG4gKi9cbmZ1bmN0aW9uIGZvcm1hdE9SRmlsdGVyc0FzQU5EKGZpbHRlcnMgPSBbXSkge1xuICByZXR1cm4gZmlsdGVycy5yZWR1Y2UoKGFjYywgZmlsdGVyKSA9PiB7XG4gICAgY29uc3QgbmFtZSA9IE9iamVjdC5rZXlzKGZpbHRlcilbMF07XG4gICAgY29uc3QgdmFsdWVzID0gT2JqZWN0LnZhbHVlcyhmaWx0ZXIpWzBdO1xuICAgIHJldHVybiBhY2MuY29uY2F0KHZhbHVlcy5tYXAodiA9PiAoeyBbbmFtZV06IHYgfSkpKTtcbiAgfSwgW10pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVDb25kaXRpb25hbEZhY2V0cyhcbiAgZmFjZXRzID0ge30sXG4gIGNvbmRpdGlvbmFsRmFjZXRzID0ge30sXG4gIGZpbHRlcnMgPSBbXVxuKSB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhmYWNldHMpLnJlZHVjZSgoYWNjLCBbZmFjZXRLZXksIGZhY2V0XSkgPT4ge1xuICAgIGlmIChcbiAgICAgIGNvbmRpdGlvbmFsRmFjZXRzW2ZhY2V0S2V5XSAmJlxuICAgICAgdHlwZW9mIGNvbmRpdGlvbmFsRmFjZXRzW2ZhY2V0S2V5XSA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAhY29uZGl0aW9uYWxGYWNldHNbZmFjZXRLZXldKHsgZmlsdGVycyB9KVxuICAgICkge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG5cbiAgICBhY2NbZmFjZXRLZXldID0gZmFjZXQ7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufVxuXG4vKlxuICogVGhlIERyaXZlciBpcyBhIGZyYW1ld29yayBhZ25vc3RpYyBzZWFyY2ggc3RhdGUgbWFuYWdlciB0aGF0IGlzIGNhcGFibGVcbiAqIHN5bmNpbmcgc3RhdGUgdG8gdGhlIHVybC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VhcmNoRHJpdmVyIHtcbiAgc3RhdGUgPSBERUZBVUxUX1NUQVRFO1xuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBhcGlDb25uZWN0b3IsXG4gICAgY29uZGl0aW9uYWxGYWNldHMsXG4gICAgZGlzanVuY3RpdmVGYWNldHMsXG4gICAgZGlzanVuY3RpdmVGYWNldHNBbmFseXRpY3NUYWdzLFxuICAgIGZhY2V0cyxcbiAgICBpbml0aWFsU3RhdGUsXG4gICAgcmVzdWx0X2ZpZWxkcyxcbiAgICBzZWFyY2hfZmllbGRzLFxuICAgIHRyYWNrVXJsU3RhdGUgPSB0cnVlLFxuICAgIHVybFB1c2hEZWJvdW5jZUxlbmd0aCA9IDUwMFxuICB9KSB7XG4gICAgaWYgKCFhcGlDb25uZWN0b3IpIHtcbiAgICAgIHRocm93IEVycm9yKFwiYXBpQ29ubmVjdG9yIHJlcXVpcmVkXCIpO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aW9ucyA9IE9iamVjdC5lbnRyaWVzKGFjdGlvbnMpLnJlZHVjZShcbiAgICAgIChhY2MsIFthY3Rpb25OYW1lLCBhY3Rpb25dKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uYWNjLFxuICAgICAgICAgIFthY3Rpb25OYW1lXTogYWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICB7fVxuICAgICk7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCB0aGlzLmFjdGlvbnMpO1xuXG4gICAgdGhpcy5yZXF1ZXN0U2VxdWVuY2VyID0gbmV3IFJlcXVlc3RTZXF1ZW5jZXIoKTtcbiAgICB0aGlzLmRlYm91bmNlTWFuYWdlciA9IG5ldyBEZWJvdW5jZU1hbmFnZXIoKTtcbiAgICB0aGlzLmFwaUNvbm5lY3RvciA9IGFwaUNvbm5lY3RvcjtcbiAgICB0aGlzLmNvbmRpdGlvbmFsRmFjZXRzID0gY29uZGl0aW9uYWxGYWNldHM7XG4gICAgdGhpcy5kaXNqdW5jdGl2ZUZhY2V0cyA9IGRpc2p1bmN0aXZlRmFjZXRzO1xuICAgIHRoaXMuZGlzanVuY3RpdmVGYWNldHNBbmFseXRpY3NUYWdzID0gZGlzanVuY3RpdmVGYWNldHNBbmFseXRpY3NUYWdzO1xuICAgIHRoaXMuZmFjZXRzID0gZmFjZXRzO1xuICAgIHRoaXMucmVzdWx0X2ZpZWxkcyA9IHJlc3VsdF9maWVsZHM7XG4gICAgdGhpcy5zZWFyY2hfZmllbGRzID0gc2VhcmNoX2ZpZWxkcztcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBbXTtcbiAgICB0aGlzLnRyYWNrVXJsU3RhdGUgPSB0cmFja1VybFN0YXRlO1xuICAgIHRoaXMudXJsUHVzaERlYm91bmNlTGVuZ3RoID0gdXJsUHVzaERlYm91bmNlTGVuZ3RoO1xuXG4gICAgbGV0IHVybFN0YXRlO1xuICAgIGlmICh0cmFja1VybFN0YXRlKSB7XG4gICAgICB0aGlzLlVSTE1hbmFnZXIgPSBuZXcgVVJMTWFuYWdlcigpO1xuICAgICAgdXJsU3RhdGUgPSB0aGlzLlVSTE1hbmFnZXIuZ2V0U3RhdGVGcm9tVVJMKCk7XG4gICAgICB0aGlzLlVSTE1hbmFnZXIub25VUkxTdGF0ZUNoYW5nZSh1cmxTdGF0ZSA9PiB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVNlYXJjaFJlc3VsdHMoXG4gICAgICAgICAgeyAuLi5ERUZBVUxUX1NUQVRFLCAuLi51cmxTdGF0ZSB9LFxuICAgICAgICAgIHsgc2tpcFB1c2hUb1VybDogdHJ1ZSB9XG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdXJsU3RhdGUgPSB7fTtcbiAgICB9XG5cbiAgICAvLyBSZW1lbWJlciB0aGUgc3RhdGUgdGhpcyBhcHBsaWNhdGlvbiBpcyBpbml0aWFsaXplZCBpbnRvLCBzbyB0aGF0IHdlIGNhblxuICAgIC8vIHJlc2V0IHRvIGl0IGxhdGVyLlxuICAgIHRoaXMuc3RhcnRpbmdTdGF0ZSA9IHtcbiAgICAgIC4uLnRoaXMuc3RhdGUsXG4gICAgICAuLi5pbml0aWFsU3RhdGVcbiAgICB9O1xuXG4gICAgLy8gV2UgZmlsdGVyIHRoZXNlIGhlcmUgdG8gZGlzYWxsb3cgYW55dGhpbmcgb3RoZXIgdGhhbiB2YWxpZCBzZWFyY2hcbiAgICAvLyBwYXJhbWV0ZXJzIHRvIGJlIHBhc3NlZCBpbiBpbml0aWFsIHN0YXRlLCBvciB1cmwgc3RhdGUuIGByZXN1bHRzYCwgZXRjLFxuICAgIC8vIHNob3VsZCBub3QgYmUgYWxsb3dlZCB0byBiZSBwYXNzZWQgaW4sIHRoYXQgc2hvdWxkIGJlIGdlbmVyYXRlZCBiYXNlZCBvblxuICAgIC8vIHRoZSByZXN1bHRzIG9mIHRoZSBxdWVyeVxuICAgIGNvbnN0IHNlYXJjaFBhcmFtZXRlcnMgPSBmaWx0ZXJTZWFyY2hQYXJhbWV0ZXJzKHtcbiAgICAgIC4uLnRoaXMuc3RhcnRpbmdTdGF0ZSxcbiAgICAgIC4uLnVybFN0YXRlXG4gICAgfSk7XG5cbiAgICAvLyBJbml0aWFsaXplIHRoZSBzdGF0ZSB3aXRob3V0IGNhbGxpbmcgX3NldFN0YXRlLCBiZWNhdXNlIHdlIGRvbid0XG4gICAgLy8gd2FudCB0byB0cmlnZ2VyIGFuIHVwZGF0ZSBjYWxsYmFjaywgd2UncmUganVzdCBpbml0aWFsaXppbmcgdGhlIHN0YXRlXG4gICAgLy8gdG8gdGhlIGNvcnJlY3QgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBpbml0aWFsIFVJIHJlbmRlclxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgLi4uc2VhcmNoUGFyYW1ldGVyc1xuICAgIH07XG5cbiAgICAvLyBXZSdsbCB0cmlnZ2VyIGFuIGluaXRpYWwgc2VhcmNoIGlmIGluaXRpYWwgcGFyYW1ldGVycyBjb250YWluXG4gICAgLy8gYSBzZWFyY2ggdGVybSBvciBmaWx0ZXJzLCBvdGhlcndpc2UsIHdlJ2xsIGp1c3Qgc2F2ZSB0aGVpciBzZWxlY3Rpb25zXG4gICAgLy8gaW4gc3RhdGUgYXMgaW5pdGlhbCB2YWx1ZXMuXG4gICAgaWYgKHNlYXJjaFBhcmFtZXRlcnMuc2VhcmNoVGVybSB8fCBzZWFyY2hQYXJhbWV0ZXJzLmZpbHRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5fdXBkYXRlU2VhcmNoUmVzdWx0cyhzZWFyY2hQYXJhbWV0ZXJzKTtcbiAgICB9XG4gIH1cblxuICBfdXBkYXRlU2VhcmNoUmVzdWx0cyA9IChcbiAgICBzZWFyY2hQYXJhbWV0ZXJzLFxuICAgIHsgc2tpcFB1c2hUb1VybCA9IGZhbHNlLCBpZ25vcmVJc0xvYWRpbmdDaGVjayA9IGZhbHNlIH0gPSB7fVxuICApID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjdXJyZW50LFxuICAgICAgZmlsdGVycyxcbiAgICAgIGlzTG9hZGluZyxcbiAgICAgIHJlc3VsdHNQZXJQYWdlLFxuICAgICAgc2VhcmNoVGVybSxcbiAgICAgIHNvcnREaXJlY3Rpb24sXG4gICAgICBzb3J0RmllbGRcbiAgICB9ID0ge1xuICAgICAgLi4udGhpcy5zdGF0ZSxcbiAgICAgIC4uLnNlYXJjaFBhcmFtZXRlcnNcbiAgICB9O1xuXG4gICAgaWYgKGlzTG9hZGluZyAmJiAhaWdub3JlSXNMb2FkaW5nQ2hlY2spIHJldHVybjtcblxuICAgIGNvbnN0IHNlYXJjaE9wdGlvbnMgPSB7XG4gICAgICBkaXNqdW5jdGl2ZUZhY2V0czogdGhpcy5kaXNqdW5jdGl2ZUZhY2V0cyxcbiAgICAgIGRpc2p1bmN0aXZlRmFjZXRzQW5hbHl0aWNzVGFnczogdGhpcy5kaXNqdW5jdGl2ZUZhY2V0c0FuYWx5dGljc1RhZ3MsXG4gICAgICBmYWNldHM6IHJlbW92ZUNvbmRpdGlvbmFsRmFjZXRzKFxuICAgICAgICB0aGlzLmZhY2V0cyxcbiAgICAgICAgdGhpcy5jb25kaXRpb25hbEZhY2V0cyxcbiAgICAgICAgZmlsdGVyc1xuICAgICAgKSxcbiAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgYWxsOiBmb3JtYXRPUkZpbHRlcnNBc0FORChmaWx0ZXJzKVxuICAgICAgfSxcbiAgICAgIHBhZ2U6IHtcbiAgICAgICAgY3VycmVudCxcbiAgICAgICAgc2l6ZTogcmVzdWx0c1BlclBhZ2VcbiAgICAgIH0sXG4gICAgICByZXN1bHRfZmllbGRzOiB0aGlzLnJlc3VsdF9maWVsZHMsXG4gICAgICBzZWFyY2hfZmllbGRzOiB0aGlzLnNlYXJjaF9maWVsZHNcbiAgICB9O1xuXG4gICAgaWYgKHNvcnRGaWVsZCAmJiBzb3J0RGlyZWN0aW9uKSB7XG4gICAgICBzZWFyY2hPcHRpb25zLnNvcnQgPSB7XG4gICAgICAgIFtzb3J0RmllbGRdOiBzb3J0RGlyZWN0aW9uXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuX3NldFN0YXRlKHtcbiAgICAgIGN1cnJlbnQsXG4gICAgICBlcnJvcjogXCJcIixcbiAgICAgIGZpbHRlcnMsXG4gICAgICBpc0xvYWRpbmc6IHRydWUsXG4gICAgICByZXN1bHRzUGVyUGFnZSxcbiAgICAgIHNlYXJjaFRlcm0sXG4gICAgICBzb3J0RGlyZWN0aW9uLFxuICAgICAgc29ydEZpZWxkXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXF1ZXN0SWQgPSB0aGlzLnJlcXVlc3RTZXF1ZW5jZXIubmV4dCgpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpQ29ubmVjdG9yLnNlYXJjaChzZWFyY2hUZXJtLCBzZWFyY2hPcHRpb25zKS50aGVuKFxuICAgICAgcmVzdWx0TGlzdCA9PiB7XG4gICAgICAgIGlmICh0aGlzLnJlcXVlc3RTZXF1ZW5jZXIuaXNPbGRSZXF1ZXN0KHJlcXVlc3RJZCkpIHJldHVybjtcbiAgICAgICAgdGhpcy5yZXF1ZXN0U2VxdWVuY2VyLmNvbXBsZXRlZChyZXF1ZXN0SWQpO1xuXG4gICAgICAgIHRoaXMuX3NldFN0YXRlKHtcbiAgICAgICAgICBmYWNldHM6IHJlc3VsdExpc3QuaW5mby5mYWNldHMgfHwge30sXG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICByZXF1ZXN0SWQ6IHJlc3VsdExpc3QuaW5mby5tZXRhLnJlcXVlc3RfaWQsXG4gICAgICAgICAgcmVzdWx0czogcmVzdWx0TGlzdC5yZXN1bHRzLFxuICAgICAgICAgIHJlc3VsdFNlYXJjaFRlcm06IHNlYXJjaFRlcm0sXG4gICAgICAgICAgdG90YWxQYWdlczogcmVzdWx0TGlzdC5pbmZvLm1ldGEucGFnZS50b3RhbF9wYWdlcyxcbiAgICAgICAgICB0b3RhbFJlc3VsdHM6IHJlc3VsdExpc3QuaW5mby5tZXRhLnBhZ2UudG90YWxfcmVzdWx0cyxcbiAgICAgICAgICB3YXNTZWFyY2hlZDogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXNraXBQdXNoVG9VcmwgJiYgdGhpcy50cmFja1VybFN0YXRlKSB7XG4gICAgICAgICAgLy8gV2UgZGVib3VuY2UgaGVyZSBzbyB0aGF0IHdlIGRvbid0IGdldCBhIGxvdCBvZiBpbnRlcm1lZGlhcnlcbiAgICAgICAgICAvLyBVUkwgc3RhdGUgaWYgc29tZW9uZSBpcyB1cGRhdGluZyBhIFVJIHJlYWxseSBmYXN0LCBsaWtlIHR5cGluZ1xuICAgICAgICAgIC8vIGluIGEgbGl2ZSBzZWFyY2ggYm94IGZvciBpbnN0YW5jZS5cbiAgICAgICAgICB0aGlzLmRlYm91bmNlTWFuYWdlci5ydW5XaXRoRGVib3VuY2UoXG4gICAgICAgICAgICB0aGlzLnVybFB1c2hEZWJvdW5jZUxlbmd0aCxcbiAgICAgICAgICAgIHRoaXMuVVJMTWFuYWdlci5wdXNoU3RhdGVUb1VSTC5iaW5kKHRoaXMuVVJMTWFuYWdlciksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIGZpbHRlcnMsXG4gICAgICAgICAgICAgIHJlc3VsdHNQZXJQYWdlLFxuICAgICAgICAgICAgICBzZWFyY2hUZXJtLFxuICAgICAgICAgICAgICBzb3J0RGlyZWN0aW9uLFxuICAgICAgICAgICAgICBzb3J0RmllbGRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3IgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgdGhpcy5fc2V0U3RhdGUoe1xuICAgICAgICAgIGVycm9yOiBgQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cnJlZDogJHtlcnJvci5tZXNzYWdlfWBcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgKTtcbiAgfTtcblxuICBfc2V0U3RhdGUobmV3U3RhdGUpIHtcbiAgICBjb25zdCBzdGF0ZSA9IHsgLi4udGhpcy5zdGF0ZSwgLi4ubmV3U3RhdGUgfTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWJzY3JpcHRpb24gPT4gc3Vic2NyaXB0aW9uKHN0YXRlKSk7XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFueSB0aW1lIHN0YXRlIGlzIHVwZGF0ZWQgaW4gdGhpcyBEcml2ZXIsIHRoZSBwcm92aWRlZCBjYWxsYmFja1xuICAgKiB3aWxsIGJlIGV4ZWN1dGVkIHdpdGggdGhlIHVwZGF0ZWQgc3RhdGUuXG4gICAqXG4gICAqIEBwYXJhbSBvblN0YXRlQ2hhbmdlIEZ1bmN0aW9uXG4gICAqL1xuICBzdWJzY3JpYmVUb1N0YXRlQ2hhbmdlcyhvblN0YXRlQ2hhbmdlKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2gob25TdGF0ZUNoYW5nZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCBhdmFpbGFibGUgYWNpdG9uc1xuICAgKlxuICAgKiBAcmV0dXJucyBPYmplY3QgQWxsIGFjdGlvbnNcbiAgICovXG4gIGdldEFjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBjdXJyZW50IHN0YXRlLiBUeXBpY2FsbHkgdXNlZCBvbiBhcHAgaW5pdGlhbGl6YXRpb24uIFN1YnNlcXVlbnRcbiAgICogc3RhdGUgdXBkYXRlcyBzaG91bGQgY29tZSB0aHJvdWdoIHN1YnNjcmlwdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMgT2JqZWN0IEN1cnJlbnQgc3RhdGVcbiAgICovXG4gIGdldFN0YXRlKCkge1xuICAgIC8vIFdlIHJldHVybiBhIGNvcHkgb2Ygc3RhdGUgaGVyZSwgYmVjYXVzZSB3ZSB3YW50IHRvIGVuc3VyZSB0aGUgc3RhdGVcbiAgICAvLyBpbnNpZGUgb2YgdGhpcyBvYmplY3QgcmVtYWlucyBpbW11dGFibGUuXG4gICAgcmV0dXJuIHsgLi4udGhpcy5zdGF0ZSB9O1xuICB9XG59XG4iXX0=

@@ -10,13 +10,13 @@ "use strict";

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var _RequestSequencer = _interopRequireDefault(require("./RequestSequencer"));
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }
var _DebounceManager = _interopRequireDefault(require("./DebounceManager"));
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }
var actions = _interopRequireWildcard(require("./actions"));
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }

@@ -56,21 +56,2 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function removeSingleFilterValue(filters, name, value) {
return filters.reduce(function (acc, filter) {
if (filter[name]) {
var currentFilterValues = filter[name];
var updatedFilterValues = currentFilterValues.filter(function (filterValue) {
return !matchFilter(filterValue, value);
});
if (updatedFilterValues.length > 0) {
return acc.concat(_defineProperty({}, name, updatedFilterValues));
} else {
return acc;
}
}
return acc.concat(filter);
}, []);
}
var DEFAULT_STATE = {

@@ -154,6 +135,2 @@ // Search Parameters -- This is state that represents the input state.

}
function matchFilter(filter1, filter2) {
return filter1 === filter2 || filter1.from && filter1.from === filter2.from && filter1.to && filter1.to === filter2.to;
}
/*

@@ -180,3 +157,5 @@ * The Driver is a framework agnostic search state manager that is capable

_ref5$trackUrlState = _ref5.trackUrlState,
trackUrlState = _ref5$trackUrlState === void 0 ? true : _ref5$trackUrlState;
trackUrlState = _ref5$trackUrlState === void 0 ? true : _ref5$trackUrlState,
_ref5$urlPushDebounce = _ref5.urlPushDebounceLength,
urlPushDebounceLength = _ref5$urlPushDebounce === void 0 ? 500 : _ref5$urlPushDebounce;

@@ -187,158 +166,10 @@ _classCallCheck(this, SearchDriver);

_defineProperty(this, "addFilter", function (name, value) {
var filters = _this.state.filters;
var existingFilterValues = (filters.find(function (f) {
return f[name];
}) || {})[name] || [];
var newFilterValues = existingFilterValues.find(function (existing) {
return matchFilter(existing, value);
}) ? existingFilterValues : existingFilterValues.concat(value);
var filtersWithoutTargetFilter = filters.filter(function (f) {
return !f[name];
});
_defineProperty(this, "_updateSearchResults", function (searchParameters) {
var _ref6 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
_ref6$skipPushToUrl = _ref6.skipPushToUrl,
skipPushToUrl = _ref6$skipPushToUrl === void 0 ? false : _ref6$skipPushToUrl,
_ref6$ignoreIsLoading = _ref6.ignoreIsLoadingCheck,
ignoreIsLoadingCheck = _ref6$ignoreIsLoading === void 0 ? false : _ref6$ignoreIsLoading;
_this._updateSearchResults({
current: 1,
filters: _toConsumableArray(filtersWithoutTargetFilter).concat([_defineProperty({}, name, newFilterValues)])
});
});
_defineProperty(this, "setFilter", function (name, value) {
var filters = _this.state.filters;
filters = filters.filter(function (filter) {
return Object.keys(filter)[0] !== name;
});
_this._updateSearchResults({
current: 1,
filters: _toConsumableArray(filters).concat([_defineProperty({}, name, [value])])
});
});
_defineProperty(this, "reset", function () {
_this._setState(_this.startingState);
});
_defineProperty(this, "removeFilter", function (name, value) {
var filters = _this.state.filters;
var updatedFilters = value ? removeSingleFilterValue(filters, name, value) : filters.filter(function (filter) {
return !filter[name];
});
_this._updateSearchResults({
current: 1,
filters: updatedFilters
});
});
_defineProperty(this, "clearFilters", function () {
var except = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var filters = _this.state.filters;
var updatedFilters = filters.filter(function (filter) {
var filterField = Object.keys(filter)[0];
return except.includes(filterField);
});
_this._updateSearchResults({
current: 1,
filters: updatedFilters
});
});
_defineProperty(this, "setResultsPerPage", function (resultsPerPage) {
_this._updateSearchResults({
current: 1,
resultsPerPage: resultsPerPage
});
});
_defineProperty(this, "setSearchTerm", function (searchTerm) {
_this._updateSearchResults({
current: 1,
filters: [],
searchTerm: searchTerm
});
});
_defineProperty(this, "setSort", function (sortField, sortDirection) {
_this._updateSearchResults({
current: 1,
sortDirection: sortDirection,
sortField: sortField
});
});
_defineProperty(this, "setCurrent", function (current) {
_this._updateSearchResults({
current: current
});
});
_defineProperty(this, "trackClickThrough", function (documentId) {
var tags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
var _this$state = _this.state,
requestId = _this$state.requestId,
searchTerm = _this$state.searchTerm;
_this.apiConnector.click({
query: searchTerm,
documentId: documentId,
requestId: requestId,
tags: tags
});
});
if (!apiConnector) {
throw Error("apiConnector required");
}
this.apiConnector = apiConnector;
this.conditionalFacets = conditionalFacets;
this.disjunctiveFacets = disjunctiveFacets;
this.disjunctiveFacetsAnalyticsTags = disjunctiveFacetsAnalyticsTags;
this.facets = facets;
this.result_fields = result_fields;
this.search_fields = search_fields;
this.subscriptions = [];
this.trackUrlState = trackUrlState;
var urlState;
if (trackUrlState) {
this.URLManager = new _URLManager.default();
urlState = this.URLManager.getStateFromURL();
this.URLManager.onURLStateChange(function (urlState) {
_this._updateSearchResults(_objectSpread({}, DEFAULT_STATE, urlState), true);
});
} else {
urlState = {};
} // Remember the state this application is initialized into, so that we can
// reset to it later.
this.startingState = _objectSpread({}, this.state, initialState); // We filter these here to disallow anything other than valid search
// parameters to be passed in initial state, or url state. `results`, etc,
// should not be allowed to be passed in, that should be generated based on
// the results of the query
var searchParameters = filterSearchParameters(_objectSpread({}, this.startingState, urlState)); // Initialize the state without calling _setState, because we don't
// want to trigger an update callback, we're just initializing the state
// to the correct default values for the initial UI render
this.state = _objectSpread({}, this.state, searchParameters); // We'll trigger an initial search if initial parameters contain
// a search term or filters, otherwise, we'll just save their selections
// in state as initial values.
if (searchParameters.searchTerm || searchParameters.filters.length > 0) {
this._updateSearchResults(searchParameters);
}
}
_createClass(SearchDriver, [{
key: "_updateSearchResults",
value: function _updateSearchResults(searchParameters) {
var _this2 = this;
var skipPushToUrl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
var _this$state$searchPar = _objectSpread({}, this.state, searchParameters),
var _this$state$searchPar = _objectSpread({}, _this.state, searchParameters),
current = _this$state$searchPar.current,

@@ -352,7 +183,7 @@ filters = _this$state$searchPar.filters,

if (isLoading) return;
if (isLoading && !ignoreIsLoadingCheck) return;
var searchOptions = {
disjunctiveFacets: this.disjunctiveFacets,
disjunctiveFacetsAnalyticsTags: this.disjunctiveFacetsAnalyticsTags,
facets: removeConditionalFacets(this.facets, this.conditionalFacets, filters),
disjunctiveFacets: _this.disjunctiveFacets,
disjunctiveFacetsAnalyticsTags: _this.disjunctiveFacetsAnalyticsTags,
facets: removeConditionalFacets(_this.facets, _this.conditionalFacets, filters),
filters: {

@@ -365,4 +196,4 @@ all: formatORFiltersAsAND(filters)

},
result_fields: this.result_fields,
search_fields: this.search_fields
result_fields: _this.result_fields,
search_fields: _this.search_fields
};

@@ -374,3 +205,3 @@

this._setState({
_this._setState({
current: current,

@@ -386,4 +217,10 @@ error: "",

return this.apiConnector.search(searchTerm, searchOptions).then(function (resultList) {
_this2._setState({
var requestId = _this.requestSequencer.next();
return _this.apiConnector.search(searchTerm, searchOptions).then(function (resultList) {
if (_this.requestSequencer.isOldRequest(requestId)) return;
_this.requestSequencer.completed(requestId);
_this._setState({
facets: resultList.info.facets || {},

@@ -399,4 +236,7 @@ isLoading: false,

if (!skipPushToUrl && _this2.trackUrlState) {
_this2.URLManager.pushStateToURL({
if (!skipPushToUrl && _this.trackUrlState) {
// We debounce here so that we don't get a lot of intermediary
// URL state if someone is updating a UI really fast, like typing
// in a live search box for instance.
_this.debounceManager.runWithDebounce(_this.urlPushDebounceLength, _this.URLManager.pushStateToURL.bind(_this.URLManager), {
current: current,

@@ -413,8 +253,68 @@ filters: filters,

_this2._setState({
_this._setState({
error: "An unexpected error occurred: ".concat(error.message)
});
});
});
if (!apiConnector) {
throw Error("apiConnector required");
}
}, {
this.actions = Object.entries(actions).reduce(function (acc, _ref7) {
var _ref8 = _slicedToArray(_ref7, 2),
actionName = _ref8[0],
action = _ref8[1];
return _objectSpread({}, acc, _defineProperty({}, actionName, action.bind(_this)));
}, {});
Object.assign(this, this.actions);
this.requestSequencer = new _RequestSequencer.default();
this.debounceManager = new _DebounceManager.default();
this.apiConnector = apiConnector;
this.conditionalFacets = conditionalFacets;
this.disjunctiveFacets = disjunctiveFacets;
this.disjunctiveFacetsAnalyticsTags = disjunctiveFacetsAnalyticsTags;
this.facets = facets;
this.result_fields = result_fields;
this.search_fields = search_fields;
this.subscriptions = [];
this.trackUrlState = trackUrlState;
this.urlPushDebounceLength = urlPushDebounceLength;
var urlState;
if (trackUrlState) {
this.URLManager = new _URLManager.default();
urlState = this.URLManager.getStateFromURL();
this.URLManager.onURLStateChange(function (urlState) {
_this._updateSearchResults(_objectSpread({}, DEFAULT_STATE, urlState), {
skipPushToUrl: true
});
});
} else {
urlState = {};
} // Remember the state this application is initialized into, so that we can
// reset to it later.
this.startingState = _objectSpread({}, this.state, initialState); // We filter these here to disallow anything other than valid search
// parameters to be passed in initial state, or url state. `results`, etc,
// should not be allowed to be passed in, that should be generated based on
// the results of the query
var _searchParameters = filterSearchParameters(_objectSpread({}, this.startingState, urlState)); // Initialize the state without calling _setState, because we don't
// want to trigger an update callback, we're just initializing the state
// to the correct default values for the initial UI render
this.state = _objectSpread({}, this.state, _searchParameters); // We'll trigger an initial search if initial parameters contain
// a search term or filters, otherwise, we'll just save their selections
// in state as initial values.
if (_searchParameters.searchTerm || _searchParameters.filters.length > 0) {
this._updateSearchResults(_searchParameters);
}
}
_createClass(SearchDriver, [{
key: "_setState",

@@ -450,14 +350,3 @@ value: function _setState(newState) {

value: function getActions() {
return {
addFilter: this.addFilter,
clearFilters: this.clearFilters,
removeFilter: this.removeFilter,
reset: this.reset,
setFilter: this.setFilter,
setResultsPerPage: this.setResultsPerPage,
setSearchTerm: this.setSearchTerm,
setSort: this.setSort,
setCurrent: this.setCurrent,
trackClickThrough: this.trackClickThrough
};
return this.actions;
}

@@ -478,11 +367,2 @@ /**

}
/**
* Filter results - Adds to current filter value
*
* Will trigger new search
*
* @param name String field name to filter on
* @param value String field value to filter on
*/
}]);

@@ -494,2 +374,2 @@

exports.default = SearchDriver;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9TZWFyY2hEcml2ZXIuanMiXSwibmFtZXMiOlsiZmlsdGVyU2VhcmNoUGFyYW1ldGVycyIsImN1cnJlbnQiLCJmaWx0ZXJzIiwicmVzdWx0c1BlclBhZ2UiLCJzZWFyY2hUZXJtIiwic29ydERpcmVjdGlvbiIsInNvcnRGaWVsZCIsInJlbW92ZVNpbmdsZUZpbHRlclZhbHVlIiwibmFtZSIsInZhbHVlIiwicmVkdWNlIiwiYWNjIiwiZmlsdGVyIiwiY3VycmVudEZpbHRlclZhbHVlcyIsInVwZGF0ZWRGaWx0ZXJWYWx1ZXMiLCJmaWx0ZXJWYWx1ZSIsIm1hdGNoRmlsdGVyIiwibGVuZ3RoIiwiY29uY2F0IiwiREVGQVVMVF9TVEFURSIsImVycm9yIiwiaXNMb2FkaW5nIiwiZmFjZXRzIiwicmVxdWVzdElkIiwicmVzdWx0cyIsInJlc3VsdFNlYXJjaFRlcm0iLCJ0b3RhbFBhZ2VzIiwidG90YWxSZXN1bHRzIiwid2FzU2VhcmNoZWQiLCJmb3JtYXRPUkZpbHRlcnNBc0FORCIsIk9iamVjdCIsImtleXMiLCJ2YWx1ZXMiLCJtYXAiLCJ2IiwicmVtb3ZlQ29uZGl0aW9uYWxGYWNldHMiLCJjb25kaXRpb25hbEZhY2V0cyIsImVudHJpZXMiLCJmYWNldEtleSIsImZhY2V0IiwiZmlsdGVyMSIsImZpbHRlcjIiLCJmcm9tIiwidG8iLCJTZWFyY2hEcml2ZXIiLCJhcGlDb25uZWN0b3IiLCJkaXNqdW5jdGl2ZUZhY2V0cyIsImRpc2p1bmN0aXZlRmFjZXRzQW5hbHl0aWNzVGFncyIsImluaXRpYWxTdGF0ZSIsInJlc3VsdF9maWVsZHMiLCJzZWFyY2hfZmllbGRzIiwidHJhY2tVcmxTdGF0ZSIsInN0YXRlIiwiZXhpc3RpbmdGaWx0ZXJWYWx1ZXMiLCJmaW5kIiwiZiIsIm5ld0ZpbHRlclZhbHVlcyIsImV4aXN0aW5nIiwiZmlsdGVyc1dpdGhvdXRUYXJnZXRGaWx0ZXIiLCJfdXBkYXRlU2VhcmNoUmVzdWx0cyIsIl9zZXRTdGF0ZSIsInN0YXJ0aW5nU3RhdGUiLCJ1cGRhdGVkRmlsdGVycyIsImV4Y2VwdCIsImZpbHRlckZpZWxkIiwiaW5jbHVkZXMiLCJkb2N1bWVudElkIiwidGFncyIsImNsaWNrIiwicXVlcnkiLCJFcnJvciIsInN1YnNjcmlwdGlvbnMiLCJ1cmxTdGF0ZSIsIlVSTE1hbmFnZXIiLCJnZXRTdGF0ZUZyb21VUkwiLCJvblVSTFN0YXRlQ2hhbmdlIiwic2VhcmNoUGFyYW1ldGVycyIsInNraXBQdXNoVG9VcmwiLCJzZWFyY2hPcHRpb25zIiwiYWxsIiwicGFnZSIsInNpemUiLCJzb3J0Iiwic2VhcmNoIiwidGhlbiIsInJlc3VsdExpc3QiLCJpbmZvIiwibWV0YSIsInJlcXVlc3RfaWQiLCJ0b3RhbF9wYWdlcyIsInRvdGFsX3Jlc3VsdHMiLCJwdXNoU3RhdGVUb1VSTCIsImNvbnNvbGUiLCJtZXNzYWdlIiwibmV3U3RhdGUiLCJmb3JFYWNoIiwic3Vic2NyaXB0aW9uIiwib25TdGF0ZUNoYW5nZSIsInB1c2giLCJhZGRGaWx0ZXIiLCJjbGVhckZpbHRlcnMiLCJyZW1vdmVGaWx0ZXIiLCJyZXNldCIsInNldEZpbHRlciIsInNldFJlc3VsdHNQZXJQYWdlIiwic2V0U2VhcmNoVGVybSIsInNldFNvcnQiLCJzZXRDdXJyZW50IiwidHJhY2tDbGlja1Rocm91Z2giXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsU0FBU0Esc0JBQVQsT0FPRztBQUFBLE1BTkRDLE9BTUMsUUFOREEsT0FNQztBQUFBLE1BTERDLE9BS0MsUUFMREEsT0FLQztBQUFBLE1BSkRDLGNBSUMsUUFKREEsY0FJQztBQUFBLE1BSERDLFVBR0MsUUFIREEsVUFHQztBQUFBLE1BRkRDLGFBRUMsUUFGREEsYUFFQztBQUFBLE1BRERDLFNBQ0MsUUFEREEsU0FDQztBQUNELFNBQU87QUFDTEwsSUFBQUEsT0FBTyxFQUFQQSxPQURLO0FBRUxDLElBQUFBLE9BQU8sRUFBUEEsT0FGSztBQUdMQyxJQUFBQSxjQUFj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YTtBQUNYLGFBQU87QUFDTEUsUUFBQUEsU0FBUyxFQUFFLEtBQUtBLFNBRFg7QUFFTEMsUUFBQUEsWUFBWSxFQUFFLEtBQUtBLFlBRmQ7QUFHTEMsUUFBQUEsWUFBWSxFQUFFLEtBQUtBLFlBSGQ7QUFJTEMsUUFBQUEsS0FBSyxFQUFFLEtBQUtBLEtBSlA7QUFLTEMsUUFBQUEsU0FBUyxFQUFFLEtBQUtBLFNBTFg7QUFNTEMsUUFBQUEsaUJBQWlCLEVBQUUsS0FBS0EsaUJBTm5CO0FBT0xDLFFBQUFBLGFBQWEsRUFBRSxLQUFLQSxhQVBmO0FBUUxDLFFBQUFBLE9BQU8sRUFBRSxLQUFLQSxPQVJUO0FBU0xDLFFBQUFBLFVBQVUsRUFBRSxLQUFLQSxVQVRaO0FBVUxDLFFBQUFBLGlCQUFpQixFQUFFLEtBQUtBO0FBVm5CLE9BQVA7QUFZRDtBQUVEOzs7Ozs7Ozs7K0JBTVc7QUFDVDtBQUNBO0FBQ0EsK0JBQVksS0FBS3hELEtBQWpCO0FBQ0Q7QUFFRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBVUkxNYW5hZ2VyIGZyb20gXCIuL1VSTE1hbmFnZXJcIjtcblxuZnVuY3Rpb24gZmlsdGVyU2VhcmNoUGFyYW1ldGVycyh7XG4gIGN1cnJlbnQsXG4gIGZpbHRlcnMsXG4gIHJlc3VsdHNQZXJQYWdlLFxuICBzZWFyY2hUZXJtLFxuICBzb3J0RGlyZWN0aW9uLFxuICBzb3J0RmllbGRcbn0pIHtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW50LFxuICAgIGZpbHRlcnMsXG4gICAgcmVzdWx0c1BlclBhZ2UsXG4gICAgc2VhcmNoVGVybSxcbiAgICBzb3J0RGlyZWN0aW9uLFxuICAgIHNvcnRGaWVsZFxuICB9O1xufVxuXG5mdW5jdGlvbiByZW1vdmVTaW5nbGVGaWx0ZXJWYWx1ZShmaWx0ZXJzLCBuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZmlsdGVycy5yZWR1Y2UoKGFjYywgZmlsdGVyKSA9PiB7XG4gICAgaWYgKGZpbHRlcltuYW1lXSkge1xuICAgICAgY29uc3QgY3VycmVudEZpbHRlclZhbHVlcyA9IGZpbHRlcltuYW1lXTtcbiAgICAgIGNvbnN0IHVwZGF0ZWRGaWx0ZXJWYWx1ZXMgPSBjdXJyZW50RmlsdGVyVmFsdWVzLmZpbHRlcihcbiAgICAgICAgZmlsdGVyVmFsdWUgPT4gIW1hdGNoRmlsdGVyKGZpbHRlclZhbHVlLCB2YWx1ZSlcbiAgICAgICk7XG4gICAgICBpZiAodXBkYXRlZEZpbHRlclZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBhY2MuY29uY2F0KHtcbiAgICAgICAgICBbbmFtZV06IHVwZGF0ZWRGaWx0ZXJWYWx1ZXNcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYWNjLmNvbmNhdChmaWx0ZXIpO1xuICB9LCBbXSk7XG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1NUQVRFID0ge1xuICAvLyBTZWFyY2ggUGFyYW1ldGVycyAtLSBUaGlzIGlzIHN0YXRlIHRoYXQgcmVwcmVzZW50cyB0aGUgaW5wdXQgc3RhdGUuXG4gIGN1cnJlbnQ6IDEsXG4gIGZpbHRlcnM6IFtdLFxuICByZXN1bHRzUGVyUGFnZTogMjAsXG4gIHNlYXJjaFRlcm06IFwiXCIsXG4gIHNvcnREaXJlY3Rpb246IFwiXCIsXG4gIHNvcnRGaWVsZDogXCJcIixcbiAgLy8gUmVzdWx0IFN0YXRlIC0tIFRoaXMgc3RhdGUgcmVwcmVzZW50cyBzdGF0ZSB0aGF0IGlzIHVwZGF0ZWQgYXV0b21hdGljYWxseVxuICAvLyBhcyB0aGUgcmVzdWx0IG9mIGNoYW5naW5nIGlucHV0IHN0YXRlLlxuICBlcnJvcjogXCJcIixcbiAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgZmFjZXRzOiB7fSxcbiAgcmVxdWVzdElkOiBcIlwiLFxuICByZXN1bHRzOiBbXSxcbiAgcmVzdWx0U2VhcmNoVGVybTogXCJcIixcbiAgdG90YWxQYWdlczogMCxcbiAgdG90YWxSZXN1bHRzOiAwLFxuICB3YXNTZWFyY2hlZDogZmFsc2Vcbn07XG5cbi8qXG4gKiBUaGlzIGZpeGVzIGFuIGlzc3VlIHdpdGggZmlsdGVyaW5nLlxuICogT3VyIGRhdGEgc3RydWN0dXJlIGZvciBmaWx0ZXJzIGFyZSB0aGUgXCJPUlwiIGZvcm1hdCBmb3IgdGhlIEFwcCBTZWFyY2hcbiAqIEFQSTpcbiAqXG4gKiAgYGBgXG4gKiAgZmlsdGVyczoge1xuICogICBhbGw6IFtcbiAqICAgIHthdXRob3I6IFtcIkNsaW50b25cIiwgXCJTaGF5XCJdfVxuICogICBdXG4gKiAgfVxuICogIGBgYFxuICpcbiAqIEhvd2V2ZXIsIHRoZSBpbnRlbnQgaXMgZm9yIHRoZW0gdG8gYmUgQU5EIGZpbHRlcnMuIFNvIHdlIG5lZWRcbiAqIHRvIGRvIGEgcXVpY2sgY2hhbmdlIGluIGZvcm1hdHRpbmcgYmVmb3JlIGFwcGx5aW5nIHRoZW0uXG4gKlxuICogIGBgYFxuICogICBmaWx0ZXJzOiB7XG4gKiAgICBhbGw6IFtcbiAqICAgICB7YXV0aG9yOiBcIkNsaW50b25cIn0sXG4gKiAgICAge2F1dGhvcjogXCJTaGF5XCJ9XG4gKiAgICBdXG4gKiAgIH1cbiAqICBgYGBcbiAqL1xuZnVuY3Rpb24gZm9ybWF0T1JGaWx0ZXJzQXNBTkQoZmlsdGVycyA9IFtdKSB7XG4gIHJldHVybiBmaWx0ZXJzLnJlZHVjZSgoYWNjLCBmaWx0ZXIpID0+IHtcbiAgICBjb25zdCBuYW1lID0gT2JqZWN0LmtleXMoZmlsdGVyKVswXTtcbiAgICBjb25zdCB2YWx1ZXMgPSBPYmplY3QudmFsdWVzKGZpbHRlcilbMF07XG4gICAgcmV0dXJuIGFjYy5jb25jYXQodmFsdWVzLm1hcCh2ID0+ICh7IFtuYW1lXTogdiB9KSkpO1xuICB9LCBbXSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNvbmRpdGlvbmFsRmFjZXRzKFxuICBmYWNldHMgPSB7fSxcbiAgY29uZGl0aW9uYWxGYWNldHMgPSB7fSxcbiAgZmlsdGVycyA9IFtdXG4pIHtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGZhY2V0cykucmVkdWNlKChhY2MsIFtmYWNldEtleSwgZmFjZXRdKSA9PiB7XG4gICAgaWYgKFxuICAgICAgY29uZGl0aW9uYWxGYWNldHNbZmFjZXRLZXldICYmXG4gICAgICB0eXBlb2YgY29uZGl0aW9uYWxGYWNldHNbZmFjZXRLZXldID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICFjb25kaXRpb25hbEZhY2V0c1tmYWNldEtleV0oeyBmaWx0ZXJzIH0pXG4gICAgKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cblxuICAgIGFjY1tmYWNldEtleV0gPSBmYWNldDtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoRmlsdGVyKGZpbHRlcjEsIGZpbHRlcjIpIHtcbiAgcmV0dXJuIChcbiAgICBmaWx0ZXIxID09PSBmaWx0ZXIyIHx8XG4gICAgKGZpbHRlcjEuZnJvbSAmJlxuICAgICAgZmlsdGVyMS5mcm9tID09PSBmaWx0ZXIyLmZyb20gJiZcbiAgICAgIGZpbHRlcjEudG8gJiZcbiAgICAgIGZpbHRlcjEudG8gPT09IGZpbHRlcjIudG8pXG4gICk7XG59XG5cbi8qXG4gKiBUaGUgRHJpdmVyIGlzIGEgZnJhbWV3b3JrIGFnbm9zdGljIHNlYXJjaCBzdGF0ZSBtYW5hZ2VyIHRoYXQgaXMgY2FwYWJsZVxuICogc3luY2luZyBzdGF0ZSB0byB0aGUgdXJsLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWFyY2hEcml2ZXIge1xuICBzdGF0ZSA9IERFRkFVTFRfU1RBVEU7XG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIGFwaUNvbm5lY3RvcixcbiAgICBjb25kaXRpb25hbEZhY2V0cyxcbiAgICBkaXNqdW5jdGl2ZUZhY2V0cyxcbiAgICBkaXNqdW5jdGl2ZUZhY2V0c0FuYWx5dGljc1RhZ3MsXG4gICAgZmFjZXRzLFxuICAgIGluaXRpYWxTdGF0ZSxcbiAgICByZXN1bHRfZmllbGRzLFxuICAgIHNlYXJjaF9maWVsZHMsXG4gICAgdHJhY2tVcmxTdGF0ZSA9IHRydWVcbiAgfSkge1xuICAgIGlmICghYXBpQ29ubmVjdG9yKSB7XG4gICAgICB0aHJvdyBFcnJvcihcImFwaUNvbm5lY3RvciByZXF1aXJlZFwiKTtcbiAgICB9XG4gICAgdGhpcy5hcGlDb25uZWN0b3IgPSBhcGlDb25uZWN0b3I7XG4gICAgdGhpcy5jb25kaXRpb25hbEZhY2V0cyA9IGNvbmRpdGlvbmFsRmFjZXRzO1xuICAgIHRoaXMuZGlzanVuY3RpdmVGYWNldHMgPSBkaXNqdW5jdGl2ZUZhY2V0cztcbiAgICB0aGlzLmRpc2p1bmN0aXZlRmFjZXRzQW5hbHl0aWNzVGFncyA9IGRpc2p1bmN0aXZlRmFjZXRzQW5hbHl0aWNzVGFncztcbiAgICB0aGlzLmZhY2V0cyA9IGZhY2V0cztcbiAgICB0aGlzLnJlc3VsdF9maWVsZHMgPSByZXN1bHRfZmllbGRzO1xuICAgIHRoaXMuc2VhcmNoX2ZpZWxkcyA9IHNlYXJjaF9maWVsZHM7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zID0gW107XG4gICAgdGhpcy50cmFja1VybFN0YXRlID0gdHJhY2tVcmxTdGF0ZTtcblxuICAgIGxldCB1cmxTdGF0ZTtcbiAgICBpZiAodHJhY2tVcmxTdGF0ZSkge1xuICAgICAgdGhpcy5VUkxNYW5hZ2VyID0gbmV3IFVSTE1hbmFnZXIoKTtcbiAgICAgIHVybFN0YXRlID0gdGhpcy5VUkxNYW5hZ2VyLmdldFN0YXRlRnJvbVVSTCgpO1xuICAgICAgdGhpcy5VUkxNYW5hZ2VyLm9uVVJMU3RhdGVDaGFuZ2UodXJsU3RhdGUgPT4ge1xuICAgICAgICB0aGlzLl91cGRhdGVTZWFyY2hSZXN1bHRzKHsgLi4uREVGQVVMVF9TVEFURSwgLi4udXJsU3RhdGUgfSwgdHJ1ZSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdXJsU3RhdGUgPSB7fTtcbiAgICB9XG5cbiAgICAvLyBSZW1lbWJlciB0aGUgc3RhdGUgdGhpcyBhcHBsaWNhdGlvbiBpcyBpbml0aWFsaXplZCBpbnRvLCBzbyB0aGF0IHdlIGNhblxuICAgIC8vIHJlc2V0IHRvIGl0IGxhdGVyLlxuICAgIHRoaXMuc3RhcnRpbmdTdGF0ZSA9IHtcbiAgICAgIC4uLnRoaXMuc3RhdGUsXG4gICAgICAuLi5pbml0aWFsU3RhdGVcbiAgICB9O1xuXG4gICAgLy8gV2UgZmlsdGVyIHRoZXNlIGhlcmUgdG8gZGlzYWxsb3cgYW55dGhpbmcgb3RoZXIgdGhhbiB2YWxpZCBzZWFyY2hcbiAgICAvLyBwYXJhbWV0ZXJzIHRvIGJlIHBhc3NlZCBpbiBpbml0aWFsIHN0YXRlLCBvciB1cmwgc3RhdGUuIGByZXN1bHRzYCwgZXRjLFxuICAgIC8vIHNob3VsZCBub3QgYmUgYWxsb3dlZCB0byBiZSBwYXNzZWQgaW4sIHRoYXQgc2hvdWxkIGJlIGdlbmVyYXRlZCBiYXNlZCBvblxuICAgIC8vIHRoZSByZXN1bHRzIG9mIHRoZSBxdWVyeVxuICAgIGNvbnN0IHNlYXJjaFBhcmFtZXRlcnMgPSBmaWx0ZXJTZWFyY2hQYXJhbWV0ZXJzKHtcbiAgICAgIC4uLnRoaXMuc3RhcnRpbmdTdGF0ZSxcbiAgICAgIC4uLnVybFN0YXRlXG4gICAgfSk7XG5cbiAgICAvLyBJbml0aWFsaXplIHRoZSBzdGF0ZSB3aXRob3V0IGNhbGxpbmcgX3NldFN0YXRlLCBiZWNhdXNlIHdlIGRvbid0XG4gICAgLy8gd2FudCB0byB0cmlnZ2VyIGFuIHVwZGF0ZSBjYWxsYmFjaywgd2UncmUganVzdCBpbml0aWFsaXppbmcgdGhlIHN0YXRlXG4gICAgLy8gdG8gdGhlIGNvcnJlY3QgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBpbml0aWFsIFVJIHJlbmRlclxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgLi4uc2VhcmNoUGFyYW1ldGVyc1xuICAgIH07XG5cbiAgICAvLyBXZSdsbCB0cmlnZ2VyIGFuIGluaXRpYWwgc2VhcmNoIGlmIGluaXRpYWwgcGFyYW1ldGVycyBjb250YWluXG4gICAgLy8gYSBzZWFyY2ggdGVybSBvciBmaWx0ZXJzLCBvdGhlcndpc2UsIHdlJ2xsIGp1c3Qgc2F2ZSB0aGVpciBzZWxlY3Rpb25zXG4gICAgLy8gaW4gc3RhdGUgYXMgaW5pdGlhbCB2YWx1ZXMuXG4gICAgaWYgKHNlYXJjaFBhcmFtZXRlcnMuc2VhcmNoVGVybSB8fCBzZWFyY2hQYXJhbWV0ZXJzLmZpbHRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5fdXBkYXRlU2VhcmNoUmVzdWx0cyhzZWFyY2hQYXJhbWV0ZXJzKTtcbiAgICB9XG4gIH1cblxuICBfdXBkYXRlU2VhcmNoUmVzdWx0cyhzZWFyY2hQYXJhbWV0ZXJzLCBza2lwUHVzaFRvVXJsID0gZmFsc2UpIHtcbiAgICBjb25zdCB7XG4gICAgICBjdXJyZW50LFxuICAgICAgZmlsdGVycyxcbiAgICAgIGlzTG9hZGluZyxcbiAgICAgIHJlc3VsdHNQZXJQYWdlLFxuICAgICAgc2VhcmNoVGVybSxcbiAgICAgIHNvcnREaXJlY3Rpb24sXG4gICAgICBzb3J0RmllbGRcbiAgICB9ID0ge1xuICAgICAgLi4udGhpcy5zdGF0ZSxcbiAgICAgIC4uLnNlYXJjaFBhcmFtZXRlcnNcbiAgICB9O1xuXG4gICAgaWYgKGlzTG9hZGluZykgcmV0dXJuO1xuXG4gICAgY29uc3Qgc2VhcmNoT3B0aW9ucyA9IHtcbiAgICAgIGRpc2p1bmN0aXZlRmFjZXRzOiB0aGlzLmRpc2p1bmN0aXZlRmFjZXRzLFxuICAgICAgZGlzanVuY3RpdmVGYWNldHNBbmFseXRpY3NUYWdzOiB0aGlzLmRpc2p1bmN0aXZlRmFjZXRzQW5hbHl0aWNzVGFncyxcbiAgICAgIGZhY2V0czogcmVtb3ZlQ29uZGl0aW9uYWxGYWNldHMoXG4gICAgICAgIHRoaXMuZmFjZXRzLFxuICAgICAgICB0aGlzLmNvbmRpdGlvbmFsRmFjZXRzLFxuICAgICAgICBmaWx0ZXJzXG4gICAgICApLFxuICAgICAgZmlsdGVyczoge1xuICAgICAgICBhbGw6IGZvcm1hdE9SRmlsdGVyc0FzQU5EKGZpbHRlcnMpXG4gICAgICB9LFxuICAgICAgcGFnZToge1xuICAgICAgICBjdXJyZW50LFxuICAgICAgICBzaXplOiByZXN1bHRzUGVyUGFnZVxuICAgICAgfSxcbiAgICAgIHJlc3VsdF9maWVsZHM6IHRoaXMucmVzdWx0X2ZpZWxkcyxcbiAgICAgIHNlYXJjaF9maWVsZHM6IHRoaXMuc2VhcmNoX2ZpZWxkc1xuICAgIH07XG5cbiAgICBpZiAoc29ydEZpZWxkICYmIHNvcnREaXJlY3Rpb24pIHtcbiAgICAgIHNlYXJjaE9wdGlvbnMuc29ydCA9IHtcbiAgICAgICAgW3NvcnRGaWVsZF06IHNvcnREaXJlY3Rpb25cbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5fc2V0U3RhdGUoe1xuICAgICAgY3VycmVudCxcbiAgICAgIGVycm9yOiBcIlwiLFxuICAgICAgZmlsdGVycyxcbiAgICAgIGlzTG9hZGluZzogdHJ1ZSxcbiAgICAgIHJlc3VsdHNQZXJQYWdlLFxuICAgICAgc2VhcmNoVGVybSxcbiAgICAgIHNvcnREaXJlY3Rpb24sXG4gICAgICBzb3J0RmllbGRcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmFwaUNvbm5lY3Rvci5zZWFyY2goc2VhcmNoVGVybSwgc2VhcmNoT3B0aW9ucykudGhlbihcbiAgICAgIHJlc3VsdExpc3QgPT4ge1xuICAgICAgICB0aGlzLl9zZXRTdGF0ZSh7XG4gICAgICAgICAgZmFjZXRzOiByZXN1bHRMaXN0LmluZm8uZmFjZXRzIHx8IHt9LFxuICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgcmVxdWVzdElkOiByZXN1bHRMaXN0LmluZm8ubWV0YS5yZXF1ZXN0X2lkLFxuICAgICAgICAgIHJlc3VsdHM6IHJlc3VsdExpc3QucmVzdWx0cyxcbiAgICAgICAgICByZXN1bHRTZWFyY2hUZXJtOiBzZWFyY2hUZXJtLFxuICAgICAgICAgIHRvdGFsUGFnZXM6IHJlc3VsdExpc3QuaW5mby5tZXRhLnBhZ2UudG90YWxfcGFnZXMsXG4gICAgICAgICAgdG90YWxSZXN1bHRzOiByZXN1bHRMaXN0LmluZm8ubWV0YS5wYWdlLnRvdGFsX3Jlc3VsdHMsXG4gICAgICAgICAgd2FzU2VhcmNoZWQ6IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCFza2lwUHVzaFRvVXJsICYmIHRoaXMudHJhY2tVcmxTdGF0ZSkge1xuICAgICAgICAgIHRoaXMuVVJMTWFuYWdlci5wdXNoU3RhdGVUb1VSTCh7XG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgZmlsdGVycyxcbiAgICAgICAgICAgIHJlc3VsdHNQZXJQYWdlLFxuICAgICAgICAgICAgc2VhcmNoVGVybSxcbiAgICAgICAgICAgIHNvcnREaXJlY3Rpb24sXG4gICAgICAgICAgICBzb3J0RmllbGRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVycm9yID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIHRoaXMuX3NldFN0YXRlKHtcbiAgICAgICAgICBlcnJvcjogYEFuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQ6ICR7ZXJyb3IubWVzc2FnZX1gXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBfc2V0U3RhdGUobmV3U3RhdGUpIHtcbiAgICBjb25zdCBzdGF0ZSA9IHsgLi4udGhpcy5zdGF0ZSwgLi4ubmV3U3RhdGUgfTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWJzY3JpcHRpb24gPT4gc3Vic2NyaXB0aW9uKHN0YXRlKSk7XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFueSB0aW1lIHN0YXRlIGlzIHVwZGF0ZWQgaW4gdGhpcyBEcml2ZXIsIHRoZSBwcm92aWRlZCBjYWxsYmFja1xuICAgKiB3aWxsIGJlIGV4ZWN1dGVkIHdpdGggdGhlIHVwZGF0ZWQgc3RhdGUuXG4gICAqXG4gICAqIEBwYXJhbSBvblN0YXRlQ2hhbmdlIEZ1bmN0aW9uXG4gICAqL1xuICBzdWJzY3JpYmVUb1N0YXRlQ2hhbmdlcyhvblN0YXRlQ2hhbmdlKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2gob25TdGF0ZUNoYW5nZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCBhdmFpbGFibGUgYWNpdG9uc1xuICAgKlxuICAgKiBAcmV0dXJucyBPYmplY3QgQWxsIGFjdGlvbnNcbiAgICovXG4gIGdldEFjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFkZEZpbHRlcjogdGhpcy5hZGRGaWx0ZXIsXG4gICAgICBjbGVhckZpbHRlcnM6IHRoaXMuY2xlYXJGaWx0ZXJzLFxuICAgICAgcmVtb3ZlRmlsdGVyOiB0aGlzLnJlbW92ZUZpbHRlcixcbiAgICAgIHJlc2V0OiB0aGlzLnJlc2V0LFxuICAgICAgc2V0RmlsdGVyOiB0aGlzLnNldEZpbHRlcixcbiAgICAgIHNldFJlc3VsdHNQZXJQYWdlOiB0aGlzLnNldFJlc3VsdHNQZXJQYWdlLFxuICAgICAgc2V0U2VhcmNoVGVybTogdGhpcy5zZXRTZWFyY2hUZXJtLFxuICAgICAgc2V0U29ydDogdGhpcy5zZXRTb3J0LFxuICAgICAgc2V0Q3VycmVudDogdGhpcy5zZXRDdXJyZW50LFxuICAgICAgdHJhY2tDbGlja1Rocm91Z2g6IHRoaXMudHJhY2tDbGlja1Rocm91Z2hcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGN1cnJlbnQgc3RhdGUuIFR5cGljYWxseSB1c2VkIG9uIGFwcCBpbml0aWFsaXphdGlvbi4gU3Vic2VxdWVudFxuICAgKiBzdGF0ZSB1cGRhdGVzIHNob3VsZCBjb21lIHRocm91Z2ggc3Vic2NyaXB0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyBPYmplY3QgQ3VycmVudCBzdGF0ZVxuICAgKi9cbiAgZ2V0U3RhdGUoKSB7XG4gICAgLy8gV2UgcmV0dXJuIGEgY29weSBvZiBzdGF0ZSBoZXJlLCBiZWNhdXNlIHdlIHdhbnQgdG8gZW5zdXJlIHRoZSBzdGF0ZVxuICAgIC8vIGluc2lkZSBvZiB0aGlzIG9iamVjdCByZW1haW5zIGltbXV0YWJsZS5cbiAgICByZXR1cm4geyAuLi50aGlzLnN0YXRlIH07XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVyIHJlc3VsdHMgLSBBZGRzIHRvIGN1cnJlbnQgZmlsdGVyIHZhbHVlXG4gICAqXG4gICAqIFdpbGwgdHJpZ2dlciBuZXcgc2VhcmNoXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIFN0cmluZyBmaWVsZCBuYW1lIHRvIGZpbHRlciBvblxuICAgKiBAcGFyYW0gdmFsdWUgU3RyaW5nIGZpZWxkIHZhbHVlIHRvIGZpbHRlciBvblxuICAgKi9cbiAgYWRkRmlsdGVyID0gKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgY29uc3QgeyBmaWx0ZXJzIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgY29uc3QgZXhpc3RpbmdGaWx0ZXJWYWx1ZXMgPSAoZmlsdGVycy5maW5kKGYgPT4gZltuYW1lXSkgfHwge30pW25hbWVdIHx8IFtdO1xuXG4gICAgY29uc3QgbmV3RmlsdGVyVmFsdWVzID0gZXhpc3RpbmdGaWx0ZXJWYWx1ZXMuZmluZChleGlzdGluZyA9PlxuICAgICAgbWF0Y2hGaWx0ZXIoZXhpc3RpbmcsIHZhbHVlKVxuICAgIClcbiAgICAgID8gZXhpc3RpbmdGaWx0ZXJWYWx1ZXNcbiAgICAgIDogZXhpc3RpbmdGaWx0ZXJWYWx1ZXMuY29uY2F0KHZhbHVlKTtcblxuICAgIGNvbnN0IGZpbHRlcnNXaXRob3V0VGFyZ2V0RmlsdGVyID0gZmlsdGVycy5maWx0ZXIoZiA9PiAhZltuYW1lXSk7XG5cbiAgICB0aGlzLl91cGRhdGVTZWFyY2hSZXN1bHRzKHtcbiAgICAgIGN1cnJlbnQ6IDEsXG4gICAgICBmaWx0ZXJzOiBbLi4uZmlsdGVyc1dpdGhvdXRUYXJnZXRGaWx0ZXIsIHsgW25hbWVdOiBuZXdGaWx0ZXJWYWx1ZXMgfV1cbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogRmlsdGVyIHJlc3VsdHMgLSBSZXBsYWNlcyBjdXJyZW50IGZpbHRlciB2YWx1ZVxuICAgKlxuICAgKiBXaWxsIHRyaWdnZXIgbmV3IHNlYXJjaFxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSBTdHJpbmcgZmllbGQgbmFtZSB0byBmaWx0ZXIgb25cbiAgICogQHBhcmFtIHZhbHVlIFN0cmluZyBmaWVsZCB2YWx1ZSB0byBmaWx0ZXIgb25cbiAgICovXG4gIHNldEZpbHRlciA9IChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgIGxldCB7IGZpbHRlcnMgfSA9IHRoaXMuc3RhdGU7XG4gICAgZmlsdGVycyA9IGZpbHRlcnMuZmlsdGVyKGZpbHRlciA9PiBPYmplY3Qua2V5cyhmaWx0ZXIpWzBdICE9PSBuYW1lKTtcblxuICAgIHRoaXMuX3VwZGF0ZVNlYXJjaFJlc3VsdHMoe1xuICAgICAgY3VycmVudDogMSxcbiAgICAgIGZpbHRlcnM6IFsuLi5maWx0ZXJzLCB7IFtuYW1lXTogW3ZhbHVlXSB9XVxuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXNldCBzZWFyY2ggZXhwZXJpZW5jZSB0byBpbml0aWFsIHN0YXRlXG4gICAqXG4gICAqL1xuICByZXNldCA9ICgpID0+IHtcbiAgICB0aGlzLl9zZXRTdGF0ZSh0aGlzLnN0YXJ0aW5nU3RhdGUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZW1vdmUgZmlsdGVyIGZyb20gcmVzdWx0c1xuICAgKlxuICAgKiBXaWxsIHRyaWdnZXIgbmV3IHNlYXJjaFxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSBTdHJpbmcgZmllbGQgbmFtZSBmb3IgZmlsdGVyIHRvIHJlbW92ZVxuICAgKiBAcGFyYW0gdmFsdWUgU3RyaW5nIChPcHRpb25hbCkgZmllbGQgdmFsdWUgZm9yIGZpbHRlciB0byByZW1vdmVcbiAgICovXG4gIHJlbW92ZUZpbHRlciA9IChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgIGNvbnN0IHsgZmlsdGVycyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIGNvbnN0IHVwZGF0ZWRGaWx0ZXJzID0gdmFsdWVcbiAgICAgID8gcmVtb3ZlU2luZ2xlRmlsdGVyVmFsdWUoZmlsdGVycywgbmFtZSwgdmFsdWUpXG4gICAgICA6IGZpbHRlcnMuZmlsdGVyKGZpbHRlciA9PiAhZmlsdGVyW25hbWVdKTtcblxuICAgIHRoaXMuX3VwZGF0ZVNlYXJjaFJlc3VsdHMoe1xuICAgICAgY3VycmVudDogMSxcbiAgICAgIGZpbHRlcnM6IHVwZGF0ZWRGaWx0ZXJzXG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbGwgZmlsdGVyc1xuICAgKlxuICAgKiBXaWxsIHRyaWdnZXIgbmV3IHNlYXJjaFxuICAgKlxuICAgKiBAcGFyYW0gZXhjZXB0IEFycmF5W1N0cmluZ10gZmllbGQgbmFtZSBvZiBhbnkgZmlsdGVycyB0aGF0IHNob3VsZCByZW1haW5cbiAgICovXG4gIGNsZWFyRmlsdGVycyA9IChleGNlcHQgPSBbXSkgPT4ge1xuICAgIGNvbnN0IHsgZmlsdGVycyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIGNvbnN0IHVwZGF0ZWRGaWx0ZXJzID0gZmlsdGVycy5maWx0ZXIoZmlsdGVyID0+IHtcbiAgICAgIGNvbnN0IGZpbHRlckZpZWxkID0gT2JqZWN0LmtleXMoZmlsdGVyKVswXTtcbiAgICAgIHJldHVybiBleGNlcHQuaW5jbHVkZXMoZmlsdGVyRmllbGQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fdXBkYXRlU2VhcmNoUmVzdWx0cyh7XG4gICAgICBjdXJyZW50OiAxLFxuICAgICAgZmlsdGVyczogdXBkYXRlZEZpbHRlcnNcbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogU2V0IHRoZSBudW1iZXIgb2YgcmVzdWx0cyB0byBzaG93XG4gICAqXG4gICAqIFdpbGwgdHJpZ2dlciBuZXcgc2VhcmNoXG4gICAqXG4gICAqIEBwYXJhbSByZXN1bHRzUGVyUGFnZSBJbnRlZ2VyXG4gICAqL1xuICBzZXRSZXN1bHRzUGVyUGFnZSA9IHJlc3VsdHNQZXJQYWdlID0+IHtcbiAgICB0aGlzLl91cGRhdGVTZWFyY2hSZXN1bHRzKHtcbiAgICAgIGN1cnJlbnQ6IDEsXG4gICAgICByZXN1bHRzUGVyUGFnZVxuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGN1cnJlbnQgc2VhcmNoIHRlcm1cbiAgICpcbiAgICogV2lsbCB0cmlnZ2VyIG5ldyBzZWFyY2hcbiAgICpcbiAgICogQHBhcmFtIHNlYXJjaFRlcm0gU3RyaW5nXG4gICAqL1xuICBzZXRTZWFyY2hUZXJtID0gc2VhcmNoVGVybSA9PiB7XG4gICAgdGhpcy5fdXBkYXRlU2VhcmNoUmVzdWx0cyh7XG4gICAgICBjdXJyZW50OiAxLFxuICAgICAgZmlsdGVyczogW10sXG4gICAgICBzZWFyY2hUZXJtXG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY3VycmVudCBzb3J0XG4gICAqXG4gICAqIFdpbGwgdHJpZ2dlciBuZXcgc2VhcmNoXG4gICAqXG4gICAqIEBwYXJhbSBzb3J0RmllbGQgU3RyaW5nXG4gICAqIEBwYXJhbSBzb3J0RGlyZWN0aW9uIFN0cmluZyBbXCJhc2NcInxcImRlc2NcIl1cbiAgICovXG4gIHNldFNvcnQgPSAoc29ydEZpZWxkLCBzb3J0RGlyZWN0aW9uKSA9PiB7XG4gICAgdGhpcy5fdXBkYXRlU2VhcmNoUmVzdWx0cyh7XG4gICAgICBjdXJyZW50OiAxLFxuICAgICAgc29ydERpcmVjdGlvbixcbiAgICAgIHNvcnRGaWVsZFxuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGN1cnJlbnQgcGFnZVxuICAgKlxuICAgKiBXaWxsIHRyaWdnZXIgbmV3IHNlYXJjaFxuICAgKlxuICAgKiBAcGFyYW0gY3VycmVudCBJbnRlZ2VyXG4gICAqL1xuICBzZXRDdXJyZW50ID0gY3VycmVudCA9PiB7XG4gICAgdGhpcy5fdXBkYXRlU2VhcmNoUmVzdWx0cyh7XG4gICAgICBjdXJyZW50XG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlcG9ydCBhIGNsaWNrIHRocm91Z2ggZXZlbnQuIEEgY2xpY2sgdGhyb3VnaCBldmVudCBpcyB3aGVuIGEgdXNlclxuICAgKiBjbGlja3Mgb24gYSByZXN1bHQgbGluay4gQ2xpY2sgZXZlbnRzIGNhbiBiZSByZXZpZXdlZCBpbiB0aGUgQXBwIFNlYXJjaFxuICAgKiBBbmFseXRpY3MgRGFzaGJvYXJkLlxuICAgKlxuICAgKiBAcGFyYW0gZG9jdW1lbnRJZCBTdHJpbmcgVGhlIGRvY3VtZW50IElEIGFzc29jaWF0ZWQgd2l0aCByZXN1bHQgdGhhdCB3YXNcbiAgICogY2xpY2tlZFxuICAgKiBAcGFyYW0gdGFnIEFycmF5W1N0cmluZ10gT3B0aW9uYWwgVGFncyB3aGljaCBjYW4gYmUgdXNlZCB0byBjYXRlZ29yaXplXG4gICAqIHRoaXMgY2xpY2sgZXZlbnRcbiAgICovXG4gIHRyYWNrQ2xpY2tUaHJvdWdoID0gKGRvY3VtZW50SWQsIHRhZ3MgPSBbXSkgPT4ge1xuICAgIGNvbnN0IHsgcmVxdWVzdElkLCBzZWFyY2hUZXJtIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgdGhpcy5hcGlDb25uZWN0b3IuY2xpY2soe1xuICAgICAgcXVlcnk6IHNlYXJjaFRlcm0sXG4gICAgICBkb2N1bWVudElkLFxuICAgICAgcmVxdWVzdElkLFxuICAgICAgdGFnc1xuICAgIH0pO1xuICB9O1xufVxuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9TZWFyY2hEcml2ZXIuanMiXSwibmFtZXMiOlsiZmlsdGVyU2VhcmNoUGFyYW1ldGVycyIsImN1cnJlbnQiLCJmaWx0ZXJzIiwicmVzdWx0c1BlclBhZ2UiLCJzZWFyY2hUZXJtIiwic29ydERpcmVjdGlvbiIsInNvcnRGaWVsZCIsIkRFRkFVTFRfU1RBVEUiLCJlcnJvciIsImlzTG9hZGluZyIsImZhY2V0cyIsInJlcXVlc3RJZCIsInJlc3VsdHMiLCJyZXN1bHRTZWFyY2hUZXJtIiwidG90YWxQYWdlcyIsInRvdGFsUmVzdWx0cyIsIndhc1NlYXJjaGVkIiwiZm9ybWF0T1JGaWx0ZXJzQXNBTkQiLCJyZWR1Y2UiLCJhY2MiLCJmaWx0ZXIiLCJuYW1lIiwiT2JqZWN0Iiwia2V5cyIsInZhbHVlcyIsImNvbmNhdCIsIm1hcCIsInYiLCJyZW1vdmVDb25kaXRpb25hbEZhY2V0cyIsImNvbmRpdGlvbmFsRmFjZXRzIiwiZW50cmllcyIsImZhY2V0S2V5IiwiZmFjZXQiLCJTZWFyY2hEcml2ZXIiLCJhcGlDb25uZWN0b3IiLCJkaXNqdW5jdGl2ZUZhY2V0cyIsImRpc2p1bmN0aXZlRmFjZXRzQW5hbHl0aWNzVGFncyIsImluaXRpYWxTdGF0ZSIsInJlc3VsdF9maWVsZHMiLCJzZWFyY2hfZmllbGRzIiwidHJhY2tVcmxTdGF0ZSIsInVybFB1c2hEZWJvdW5jZUxlbmd0aCIsInNlYXJjaFBhcmFtZXRlcnMiLCJza2lwUHVzaFRvVXJsIiwiaWdub3JlSXNMb2FkaW5nQ2hlY2siLCJzdGF0ZSIsInNlYXJjaE9wdGlvbnMiLCJhbGwiLCJwYWdlIiwic2l6ZSIsInNvcnQiLCJfc2V0U3RhdGUiLCJyZXF1ZXN0U2VxdWVuY2VyIiwibmV4dCIsInNlYXJjaCIsInRoZW4iLCJyZXN1bHRMaXN0IiwiaXNPbGRSZXF1ZXN0IiwiY29tcGxldGVkIiwiaW5mbyIsIm1ldGEiLCJyZXF1ZXN0X2lkIiwidG90YWxfcGFnZXMiLCJ0b3RhbF9yZXN1bHRzIiwiZGVib3VuY2VNYW5hZ2VyIiwicnVuV2l0aERlYm91bmNlIiwiVVJMTWFuYWdlciIsInB1c2hTdGF0ZVRvVVJMIiwiYmluZCIsImNvbnNvbGUiLCJtZXNzYWdlIiwiRXJyb3IiLCJhY3Rpb25zIiwiYWN0aW9uTmFtZSIsImFjdGlvbiIsImFzc2lnbiIsIlJlcXVlc3RTZXF1ZW5jZXIiLCJEZWJvdW5jZU1hbmFnZXIiLCJzdWJzY3JpcHRpb25zIiwidXJsU3RhdGUiLCJnZXRTdGF0ZUZyb21VUkwiLCJvblVSTFN0YXRlQ2hhbmdlIiwiX3VwZGF0ZVNlYXJjaFJlc3VsdHMiLCJzdGFydGluZ1N0YXRlIiwibGVuZ3RoIiwibmV3U3RhdGUiLCJmb3JFYWNoIiwic3Vic2NyaXB0aW9uIiwib25TdGF0ZUNoYW5nZSIsInB1c2giXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFFQTs7QUFDQTs7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsU0FBU0Esc0JBQVQsT0FPRztBQUFBLE1BTkRDLE9BTUMsUUFOREEsT0FNQztBQUFBLE1BTERDLE9BS0MsUUFMREEsT0FLQztBQUFBLE1BSkRDLGNBSUMsUUFKREEsY0FJQztBQUFBLE1BSERDLFVBR0MsUUFIREEsVUFHQztBQUFBLE1BRkRDLGFBRUMsUUFGREEsYUFFQztBQUFBLE1BRERDLFNBQ0MsUUFEREEsU0FDQztBQUNELFNBQU87QUFDTEwsSUFBQUEsT0FBTyxFQUFQQSxPQURLO0FBRUxDLElBQUFBLE9BQU8sRUFBUEEsT0FGSztBQUdMQyxJQUFBQSxjQUFjLEVBQWRBLGNBSEs7QUFJTEMsSUFBQUEsVUFBVSxFQUFWQSxVQUpLO0FBS0xDLElBQUFBLGFBQWEsRUFBYkEsYUFMSztBQU1MQyxJQUFBQSxTQUFTLEVBQVRBO0FBTkssR0FBUDtBQVFEOztBQUVNLElBQU1DLGFBQWEsR0FBRztBQUMzQjtBQUNBTixFQUFBQSxPQUFPLEVBQUUsQ0FGa0I7QUFHM0JDLEVBQUFBLE9BQU8sRUFBRSxFQUhrQjtBQUkzQkMsRUFBQUEsY0FBYyxFQUFFLEVBSlc7QUFLM0JD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QTs7QUFDQSxRQUFNSyxpQkFBZ0IsR0FBRzFDLHNCQUFzQixtQkFDMUMsS0FBS21GLGFBRHFDLEVBRTFDSixRQUYwQyxFQUEvQyxDQXREQyxDQTJERDtBQUNBO0FBQ0E7OztBQUNBLFNBQUtsQyxLQUFMLHFCQUNLLEtBQUtBLEtBRFYsRUFFS0gsaUJBRkwsRUE5REMsQ0FtRUQ7QUFDQTtBQUNBOztBQUNBLFFBQUlBLGlCQUFnQixDQUFDdEMsVUFBakIsSUFBK0JzQyxpQkFBZ0IsQ0FBQ3hDLE9BQWpCLENBQXlCa0YsTUFBekIsR0FBa0MsQ0FBckUsRUFBd0U7QUFDdEUsV0FBS0Ysb0JBQUwsQ0FBMEJ4QyxpQkFBMUI7QUFDRDtBQUNGOzs7OzhCQXNHUzJDLFEsRUFBVTtBQUNsQixVQUFNeEMsS0FBSyxxQkFBUSxLQUFLQSxLQUFiLEVBQXVCd0MsUUFBdkIsQ0FBWDs7QUFDQSxXQUFLUCxhQUFMLENBQW1CUSxPQUFuQixDQUEyQixVQUFBQyxZQUFZO0FBQUEsZUFBSUEsWUFBWSxDQUFDMUMsS0FBRCxDQUFoQjtBQUFBLE9BQXZDO0FBQ0EsV0FBS0EsS0FBTCxHQUFhQSxLQUFiO0FBQ0Q7QUFFRDs7Ozs7Ozs7OzRDQU13QjJDLGEsRUFBZTtBQUNyQyxXQUFLVixhQUFMLENBQW1CVyxJQUFuQixDQUF3QkQsYUFBeEI7QUFDRDtBQUVEOzs7Ozs7OztpQ0FLYTtBQUNYLGFBQU8sS0FBS2hCLE9BQVo7QUFDRDtBQUVEOzs7Ozs7Ozs7K0JBTVc7QUFDVDtBQUNBO0FBQ0EsK0JBQVksS0FBSzNCLEtBQWpCO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVVJMTWFuYWdlciBmcm9tIFwiLi9VUkxNYW5hZ2VyXCI7XG5cbmltcG9ydCBSZXF1ZXN0U2VxdWVuY2VyIGZyb20gXCIuL1JlcXVlc3RTZXF1ZW5jZXJcIjtcbmltcG9ydCBEZWJvdW5jZU1hbmFnZXIgZnJvbSBcIi4vRGVib3VuY2VNYW5hZ2VyXCI7XG5cbmltcG9ydCAqIGFzIGFjdGlvbnMgZnJvbSBcIi4vYWN0aW9uc1wiO1xuXG5mdW5jdGlvbiBmaWx0ZXJTZWFyY2hQYXJhbWV0ZXJzKHtcbiAgY3VycmVudCxcbiAgZmlsdGVycyxcbiAgcmVzdWx0c1BlclBhZ2UsXG4gIHNlYXJjaFRlcm0sXG4gIHNvcnREaXJlY3Rpb24sXG4gIHNvcnRGaWVsZFxufSkge1xuICByZXR1cm4ge1xuICAgIGN1cnJlbnQsXG4gICAgZmlsdGVycyxcbiAgICByZXN1bHRzUGVyUGFnZSxcbiAgICBzZWFyY2hUZXJtLFxuICAgIHNvcnREaXJlY3Rpb24sXG4gICAgc29ydEZpZWxkXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1NUQVRFID0ge1xuICAvLyBTZWFyY2ggUGFyYW1ldGVycyAtLSBUaGlzIGlzIHN0YXRlIHRoYXQgcmVwcmVzZW50cyB0aGUgaW5wdXQgc3RhdGUuXG4gIGN1cnJlbnQ6IDEsXG4gIGZpbHRlcnM6IFtdLFxuICByZXN1bHRzUGVyUGFnZTogMjAsXG4gIHNlYXJjaFRlcm06IFwiXCIsXG4gIHNvcnREaXJlY3Rpb246IFwiXCIsXG4gIHNvcnRGaWVsZDogXCJcIixcbiAgLy8gUmVzdWx0IFN0YXRlIC0tIFRoaXMgc3RhdGUgcmVwcmVzZW50cyBzdGF0ZSB0aGF0IGlzIHVwZGF0ZWQgYXV0b21hdGljYWxseVxuICAvLyBhcyB0aGUgcmVzdWx0IG9mIGNoYW5naW5nIGlucHV0IHN0YXRlLlxuICBlcnJvcjogXCJcIixcbiAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgZmFjZXRzOiB7fSxcbiAgcmVxdWVzdElkOiBcIlwiLFxuICByZXN1bHRzOiBbXSxcbiAgcmVzdWx0U2VhcmNoVGVybTogXCJcIixcbiAgdG90YWxQYWdlczogMCxcbiAgdG90YWxSZXN1bHRzOiAwLFxuICB3YXNTZWFyY2hlZDogZmFsc2Vcbn07XG5cbi8qXG4gKiBUaGlzIGZpeGVzIGFuIGlzc3VlIHdpdGggZmlsdGVyaW5nLlxuICogT3VyIGRhdGEgc3RydWN0dXJlIGZvciBmaWx0ZXJzIGFyZSB0aGUgXCJPUlwiIGZvcm1hdCBmb3IgdGhlIEFwcCBTZWFyY2hcbiAqIEFQSTpcbiAqXG4gKiAgYGBgXG4gKiAgZmlsdGVyczoge1xuICogICBhbGw6IFtcbiAqICAgIHthdXRob3I6IFtcIkNsaW50b25cIiwgXCJTaGF5XCJdfVxuICogICBdXG4gKiAgfVxuICogIGBgYFxuICpcbiAqIEhvd2V2ZXIsIHRoZSBpbnRlbnQgaXMgZm9yIHRoZW0gdG8gYmUgQU5EIGZpbHRlcnMuIFNvIHdlIG5lZWRcbiAqIHRvIGRvIGEgcXVpY2sgY2hhbmdlIGluIGZvcm1hdHRpbmcgYmVmb3JlIGFwcGx5aW5nIHRoZW0uXG4gKlxuICogIGBgYFxuICogICBmaWx0ZXJzOiB7XG4gKiAgICBhbGw6IFtcbiAqICAgICB7YXV0aG9yOiBcIkNsaW50b25cIn0sXG4gKiAgICAge2F1dGhvcjogXCJTaGF5XCJ9XG4gKiAgICBdXG4gKiAgIH1cbiAqICBgYGBcbiAqL1xuZnVuY3Rpb24gZm9ybWF0T1JGaWx0ZXJzQXNBTkQoZmlsdGVycyA9IFtdKSB7XG4gIHJldHVybiBmaWx0ZXJzLnJlZHVjZSgoYWNjLCBmaWx0ZXIpID0+IHtcbiAgICBjb25zdCBuYW1lID0gT2JqZWN0LmtleXMoZmlsdGVyKVswXTtcbiAgICBjb25zdCB2YWx1ZXMgPSBPYmplY3QudmFsdWVzKGZpbHRlcilbMF07XG4gICAgcmV0dXJuIGFjYy5jb25jYXQodmFsdWVzLm1hcCh2ID0+ICh7IFtuYW1lXTogdiB9KSkpO1xuICB9LCBbXSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNvbmRpdGlvbmFsRmFjZXRzKFxuICBmYWNldHMgPSB7fSxcbiAgY29uZGl0aW9uYWxGYWNldHMgPSB7fSxcbiAgZmlsdGVycyA9IFtdXG4pIHtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGZhY2V0cykucmVkdWNlKChhY2MsIFtmYWNldEtleSwgZmFjZXRdKSA9PiB7XG4gICAgaWYgKFxuICAgICAgY29uZGl0aW9uYWxGYWNldHNbZmFjZXRLZXldICYmXG4gICAgICB0eXBlb2YgY29uZGl0aW9uYWxGYWNldHNbZmFjZXRLZXldID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICFjb25kaXRpb25hbEZhY2V0c1tmYWNldEtleV0oeyBmaWx0ZXJzIH0pXG4gICAgKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cblxuICAgIGFjY1tmYWNldEtleV0gPSBmYWNldDtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59XG5cbi8qXG4gKiBUaGUgRHJpdmVyIGlzIGEgZnJhbWV3b3JrIGFnbm9zdGljIHNlYXJjaCBzdGF0ZSBtYW5hZ2VyIHRoYXQgaXMgY2FwYWJsZVxuICogc3luY2luZyBzdGF0ZSB0byB0aGUgdXJsLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWFyY2hEcml2ZXIge1xuICBzdGF0ZSA9IERFRkFVTFRfU1RBVEU7XG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIGFwaUNvbm5lY3RvcixcbiAgICBjb25kaXRpb25hbEZhY2V0cyxcbiAgICBkaXNqdW5jdGl2ZUZhY2V0cyxcbiAgICBkaXNqdW5jdGl2ZUZhY2V0c0FuYWx5dGljc1RhZ3MsXG4gICAgZmFjZXRzLFxuICAgIGluaXRpYWxTdGF0ZSxcbiAgICByZXN1bHRfZmllbGRzLFxuICAgIHNlYXJjaF9maWVsZHMsXG4gICAgdHJhY2tVcmxTdGF0ZSA9IHRydWUsXG4gICAgdXJsUHVzaERlYm91bmNlTGVuZ3RoID0gNTAwXG4gIH0pIHtcbiAgICBpZiAoIWFwaUNvbm5lY3Rvcikge1xuICAgICAgdGhyb3cgRXJyb3IoXCJhcGlDb25uZWN0b3IgcmVxdWlyZWRcIik7XG4gICAgfVxuXG4gICAgdGhpcy5hY3Rpb25zID0gT2JqZWN0LmVudHJpZXMoYWN0aW9ucykucmVkdWNlKFxuICAgICAgKGFjYywgW2FjdGlvbk5hbWUsIGFjdGlvbl0pID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgW2FjdGlvbk5hbWVdOiBhY3Rpb24uYmluZCh0aGlzKVxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIHt9XG4gICAgKTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIHRoaXMuYWN0aW9ucyk7XG5cbiAgICB0aGlzLnJlcXVlc3RTZXF1ZW5jZXIgPSBuZXcgUmVxdWVzdFNlcXVlbmNlcigpO1xuICAgIHRoaXMuZGVib3VuY2VNYW5hZ2VyID0gbmV3IERlYm91bmNlTWFuYWdlcigpO1xuICAgIHRoaXMuYXBpQ29ubmVjdG9yID0gYXBpQ29ubmVjdG9yO1xuICAgIHRoaXMuY29uZGl0aW9uYWxGYWNldHMgPSBjb25kaXRpb25hbEZhY2V0cztcbiAgICB0aGlzLmRpc2p1bmN0aXZlRmFjZXRzID0gZGlzanVuY3RpdmVGYWNldHM7XG4gICAgdGhpcy5kaXNqdW5jdGl2ZUZhY2V0c0FuYWx5dGljc1RhZ3MgPSBkaXNqdW5jdGl2ZUZhY2V0c0FuYWx5dGljc1RhZ3M7XG4gICAgdGhpcy5mYWNldHMgPSBmYWNldHM7XG4gICAgdGhpcy5yZXN1bHRfZmllbGRzID0gcmVzdWx0X2ZpZWxkcztcbiAgICB0aGlzLnNlYXJjaF9maWVsZHMgPSBzZWFyY2hfZmllbGRzO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IFtdO1xuICAgIHRoaXMudHJhY2tVcmxTdGF0ZSA9IHRyYWNrVXJsU3RhdGU7XG4gICAgdGhpcy51cmxQdXNoRGVib3VuY2VMZW5ndGggPSB1cmxQdXNoRGVib3VuY2VMZW5ndGg7XG5cbiAgICBsZXQgdXJsU3RhdGU7XG4gICAgaWYgKHRyYWNrVXJsU3RhdGUpIHtcbiAgICAgIHRoaXMuVVJMTWFuYWdlciA9IG5ldyBVUkxNYW5hZ2VyKCk7XG4gICAgICB1cmxTdGF0ZSA9IHRoaXMuVVJMTWFuYWdlci5nZXRTdGF0ZUZyb21VUkwoKTtcbiAgICAgIHRoaXMuVVJMTWFuYWdlci5vblVSTFN0YXRlQ2hhbmdlKHVybFN0YXRlID0+IHtcbiAgICAgICAgdGhpcy5fdXBkYXRlU2VhcmNoUmVzdWx0cyhcbiAgICAgICAgICB7IC4uLkRFRkFVTFRfU1RBVEUsIC4uLnVybFN0YXRlIH0sXG4gICAgICAgICAgeyBza2lwUHVzaFRvVXJsOiB0cnVlIH1cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB1cmxTdGF0ZSA9IHt9O1xuICAgIH1cblxuICAgIC8vIFJlbWVtYmVyIHRoZSBzdGF0ZSB0aGlzIGFwcGxpY2F0aW9uIGlzIGluaXRpYWxpemVkIGludG8sIHNvIHRoYXQgd2UgY2FuXG4gICAgLy8gcmVzZXQgdG8gaXQgbGF0ZXIuXG4gICAgdGhpcy5zdGFydGluZ1N0YXRlID0ge1xuICAgICAgLi4udGhpcy5zdGF0ZSxcbiAgICAgIC4uLmluaXRpYWxTdGF0ZVxuICAgIH07XG5cbiAgICAvLyBXZSBmaWx0ZXIgdGhlc2UgaGVyZSB0byBkaXNhbGxvdyBhbnl0aGluZyBvdGhlciB0aGFuIHZhbGlkIHNlYXJjaFxuICAgIC8vIHBhcmFtZXRlcnMgdG8gYmUgcGFzc2VkIGluIGluaXRpYWwgc3RhdGUsIG9yIHVybCBzdGF0ZS4gYHJlc3VsdHNgLCBldGMsXG4gICAgLy8gc2hvdWxkIG5vdCBiZSBhbGxvd2VkIHRvIGJlIHBhc3NlZCBpbiwgdGhhdCBzaG91bGQgYmUgZ2VuZXJhdGVkIGJhc2VkIG9uXG4gICAgLy8gdGhlIHJlc3VsdHMgb2YgdGhlIHF1ZXJ5XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1ldGVycyA9IGZpbHRlclNlYXJjaFBhcmFtZXRlcnMoe1xuICAgICAgLi4udGhpcy5zdGFydGluZ1N0YXRlLFxuICAgICAgLi4udXJsU3RhdGVcbiAgICB9KTtcblxuICAgIC8vIEluaXRpYWxpemUgdGhlIHN0YXRlIHdpdGhvdXQgY2FsbGluZyBfc2V0U3RhdGUsIGJlY2F1c2Ugd2UgZG9uJ3RcbiAgICAvLyB3YW50IHRvIHRyaWdnZXIgYW4gdXBkYXRlIGNhbGxiYWNrLCB3ZSdyZSBqdXN0IGluaXRpYWxpemluZyB0aGUgc3RhdGVcbiAgICAvLyB0byB0aGUgY29ycmVjdCBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIGluaXRpYWwgVUkgcmVuZGVyXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIC4uLnRoaXMuc3RhdGUsXG4gICAgICAuLi5zZWFyY2hQYXJhbWV0ZXJzXG4gICAgfTtcblxuICAgIC8vIFdlJ2xsIHRyaWdnZXIgYW4gaW5pdGlhbCBzZWFyY2ggaWYgaW5pdGlhbCBwYXJhbWV0ZXJzIGNvbnRhaW5cbiAgICAvLyBhIHNlYXJjaCB0ZXJtIG9yIGZpbHRlcnMsIG90aGVyd2lzZSwgd2UnbGwganVzdCBzYXZlIHRoZWlyIHNlbGVjdGlvbnNcbiAgICAvLyBpbiBzdGF0ZSBhcyBpbml0aWFsIHZhbHVlcy5cbiAgICBpZiAoc2VhcmNoUGFyYW1ldGVycy5zZWFyY2hUZXJtIHx8IHNlYXJjaFBhcmFtZXRlcnMuZmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLl91cGRhdGVTZWFyY2hSZXN1bHRzKHNlYXJjaFBhcmFtZXRlcnMpO1xuICAgIH1cbiAgfVxuXG4gIF91cGRhdGVTZWFyY2hSZXN1bHRzID0gKFxuICAgIHNlYXJjaFBhcmFtZXRlcnMsXG4gICAgeyBza2lwUHVzaFRvVXJsID0gZmFsc2UsIGlnbm9yZUlzTG9hZGluZ0NoZWNrID0gZmFsc2UgfSA9IHt9XG4gICkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGN1cnJlbnQsXG4gICAgICBmaWx0ZXJzLFxuICAgICAgaXNMb2FkaW5nLFxuICAgICAgcmVzdWx0c1BlclBhZ2UsXG4gICAgICBzZWFyY2hUZXJtLFxuICAgICAgc29ydERpcmVjdGlvbixcbiAgICAgIHNvcnRGaWVsZFxuICAgIH0gPSB7XG4gICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgLi4uc2VhcmNoUGFyYW1ldGVyc1xuICAgIH07XG5cbiAgICBpZiAoaXNMb2FkaW5nICYmICFpZ25vcmVJc0xvYWRpbmdDaGVjaykgcmV0dXJuO1xuXG4gICAgY29uc3Qgc2VhcmNoT3B0aW9ucyA9IHtcbiAgICAgIGRpc2p1bmN0aXZlRmFjZXRzOiB0aGlzLmRpc2p1bmN0aXZlRmFjZXRzLFxuICAgICAgZGlzanVuY3RpdmVGYWNldHNBbmFseXRpY3NUYWdzOiB0aGlzLmRpc2p1bmN0aXZlRmFjZXRzQW5hbHl0aWNzVGFncyxcbiAgICAgIGZhY2V0czogcmVtb3ZlQ29uZGl0aW9uYWxGYWNldHMoXG4gICAgICAgIHRoaXMuZmFjZXRzLFxuICAgICAgICB0aGlzLmNvbmRpdGlvbmFsRmFjZXRzLFxuICAgICAgICBmaWx0ZXJzXG4gICAgICApLFxuICAgICAgZmlsdGVyczoge1xuICAgICAgICBhbGw6IGZvcm1hdE9SRmlsdGVyc0FzQU5EKGZpbHRlcnMpXG4gICAgICB9LFxuICAgICAgcGFnZToge1xuICAgICAgICBjdXJyZW50LFxuICAgICAgICBzaXplOiByZXN1bHRzUGVyUGFnZVxuICAgICAgfSxcbiAgICAgIHJlc3VsdF9maWVsZHM6IHRoaXMucmVzdWx0X2ZpZWxkcyxcbiAgICAgIHNlYXJjaF9maWVsZHM6IHRoaXMuc2VhcmNoX2ZpZWxkc1xuICAgIH07XG5cbiAgICBpZiAoc29ydEZpZWxkICYmIHNvcnREaXJlY3Rpb24pIHtcbiAgICAgIHNlYXJjaE9wdGlvbnMuc29ydCA9IHtcbiAgICAgICAgW3NvcnRGaWVsZF06IHNvcnREaXJlY3Rpb25cbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5fc2V0U3RhdGUoe1xuICAgICAgY3VycmVudCxcbiAgICAgIGVycm9yOiBcIlwiLFxuICAgICAgZmlsdGVycyxcbiAgICAgIGlzTG9hZGluZzogdHJ1ZSxcbiAgICAgIHJlc3VsdHNQZXJQYWdlLFxuICAgICAgc2VhcmNoVGVybSxcbiAgICAgIHNvcnREaXJlY3Rpb24sXG4gICAgICBzb3J0RmllbGRcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlcXVlc3RJZCA9IHRoaXMucmVxdWVzdFNlcXVlbmNlci5uZXh0KCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlDb25uZWN0b3Iuc2VhcmNoKHNlYXJjaFRlcm0sIHNlYXJjaE9wdGlvbnMpLnRoZW4oXG4gICAgICByZXN1bHRMaXN0ID0+IHtcbiAgICAgICAgaWYgKHRoaXMucmVxdWVzdFNlcXVlbmNlci5pc09sZFJlcXVlc3QocmVxdWVzdElkKSkgcmV0dXJuO1xuICAgICAgICB0aGlzLnJlcXVlc3RTZXF1ZW5jZXIuY29tcGxldGVkKHJlcXVlc3RJZCk7XG5cbiAgICAgICAgdGhpcy5fc2V0U3RhdGUoe1xuICAgICAgICAgIGZhY2V0czogcmVzdWx0TGlzdC5pbmZvLmZhY2V0cyB8fCB7fSxcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIHJlcXVlc3RJZDogcmVzdWx0TGlzdC5pbmZvLm1ldGEucmVxdWVzdF9pZCxcbiAgICAgICAgICByZXN1bHRzOiByZXN1bHRMaXN0LnJlc3VsdHMsXG4gICAgICAgICAgcmVzdWx0U2VhcmNoVGVybTogc2VhcmNoVGVybSxcbiAgICAgICAgICB0b3RhbFBhZ2VzOiByZXN1bHRMaXN0LmluZm8ubWV0YS5wYWdlLnRvdGFsX3BhZ2VzLFxuICAgICAgICAgIHRvdGFsUmVzdWx0czogcmVzdWx0TGlzdC5pbmZvLm1ldGEucGFnZS50b3RhbF9yZXN1bHRzLFxuICAgICAgICAgIHdhc1NlYXJjaGVkOiB0cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghc2tpcFB1c2hUb1VybCAmJiB0aGlzLnRyYWNrVXJsU3RhdGUpIHtcbiAgICAgICAgICAvLyBXZSBkZWJvdW5jZSBoZXJlIHNvIHRoYXQgd2UgZG9uJ3QgZ2V0IGEgbG90IG9mIGludGVybWVkaWFyeVxuICAgICAgICAgIC8vIFVSTCBzdGF0ZSBpZiBzb21lb25lIGlzIHVwZGF0aW5nIGEgVUkgcmVhbGx5IGZhc3QsIGxpa2UgdHlwaW5nXG4gICAgICAgICAgLy8gaW4gYSBsaXZlIHNlYXJjaCBib3ggZm9yIGluc3RhbmNlLlxuICAgICAgICAgIHRoaXMuZGVib3VuY2VNYW5hZ2VyLnJ1bldpdGhEZWJvdW5jZShcbiAgICAgICAgICAgIHRoaXMudXJsUHVzaERlYm91bmNlTGVuZ3RoLFxuICAgICAgICAgICAgdGhpcy5VUkxNYW5hZ2VyLnB1c2hTdGF0ZVRvVVJMLmJpbmQodGhpcy5VUkxNYW5hZ2VyKSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgZmlsdGVycyxcbiAgICAgICAgICAgICAgcmVzdWx0c1BlclBhZ2UsXG4gICAgICAgICAgICAgIHNlYXJjaFRlcm0sXG4gICAgICAgICAgICAgIHNvcnREaXJlY3Rpb24sXG4gICAgICAgICAgICAgIHNvcnRGaWVsZFxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlcnJvciA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICB0aGlzLl9zZXRTdGF0ZSh7XG4gICAgICAgICAgZXJyb3I6IGBBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkOiAke2Vycm9yLm1lc3NhZ2V9YFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICApO1xuICB9O1xuXG4gIF9zZXRTdGF0ZShuZXdTdGF0ZSkge1xuICAgIGNvbnN0IHN0YXRlID0geyAuLi50aGlzLnN0YXRlLCAuLi5uZXdTdGF0ZSB9O1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YnNjcmlwdGlvbiA9PiBzdWJzY3JpcHRpb24oc3RhdGUpKTtcbiAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gIH1cblxuICAvKipcbiAgICogQW55IHRpbWUgc3RhdGUgaXMgdXBkYXRlZCBpbiB0aGlzIERyaXZlciwgdGhlIHByb3ZpZGVkIGNhbGxiYWNrXG4gICAqIHdpbGwgYmUgZXhlY3V0ZWQgd2l0aCB0aGUgdXBkYXRlZCBzdGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIG9uU3RhdGVDaGFuZ2UgRnVuY3Rpb25cbiAgICovXG4gIHN1YnNjcmliZVRvU3RhdGVDaGFuZ2VzKG9uU3RhdGVDaGFuZ2UpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChvblN0YXRlQ2hhbmdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIGF2YWlsYWJsZSBhY2l0b25zXG4gICAqXG4gICAqIEByZXR1cm5zIE9iamVjdCBBbGwgYWN0aW9uc1xuICAgKi9cbiAgZ2V0QWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5hY3Rpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGN1cnJlbnQgc3RhdGUuIFR5cGljYWxseSB1c2VkIG9uIGFwcCBpbml0aWFsaXphdGlvbi4gU3Vic2VxdWVudFxuICAgKiBzdGF0ZSB1cGRhdGVzIHNob3VsZCBjb21lIHRocm91Z2ggc3Vic2NyaXB0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyBPYmplY3QgQ3VycmVudCBzdGF0ZVxuICAgKi9cbiAgZ2V0U3RhdGUoKSB7XG4gICAgLy8gV2UgcmV0dXJuIGEgY29weSBvZiBzdGF0ZSBoZXJlLCBiZWNhdXNlIHdlIHdhbnQgdG8gZW5zdXJlIHRoZSBzdGF0ZVxuICAgIC8vIGluc2lkZSBvZiB0aGlzIG9iamVjdCByZW1haW5zIGltbXV0YWJsZS5cbiAgICByZXR1cm4geyAuLi50aGlzLnN0YXRlIH07XG4gIH1cbn1cbiJdfQ==
{
"name": "@elastic/search-ui",
"version": "0.3.0",
"version": "0.4.0",
"description": "A Headless Search UI library",

@@ -42,2 +42,3 @@ "license": "Apache-2.0",

"date-fns": "^1.29.0",
"debounce-fn": "^1.0.0",
"history": "^4.7.2",

@@ -44,0 +45,0 @@ "qs": "^6.5.2"

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc