@hxui/angular
Version:
* * *
484 lines • 29.1 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc
*/
import { Injectable } from '@angular/core';
var SelectizeConfig = /** @class */ (function () {
function SelectizeConfig() {
var _this = this;
/**
* Form label text
*
* Default: 'Selectize Label'
*/
this.label = 'Selectize Label';
/**
* Helper text shown on focus or error
*
* Default: 'Selectize help text'
*/
this.help = 'Selectize help text';
/**
* Force caret to show.
* Only applies to multi select.
*
* Default: false
*/
this.hasCaret = false;
/**
* Mandatory boolean controls whether the * is shown in the label or not.
* Has nothing to do with formControl.
*
* * Default: false
*/
this.mandatory = false;
/**
* Array of css class names that can be appended to the input control element
*
* Default: []
*/
this.inputControlClasses = [];
/**
* The string to separate items by. When typing an item in a multi-selection control
* allowing creation, then the delimiter, the item is added. If you paste
* delimiter-separated items in such control, the items are added at once.
* The delimiter is also used in the getValue API call on a text <input> tag to
* separate the multiple values.
*
* Default: ','
*/
this.delimiter = ',';
/**
* Allows the user to create new items that aren't in the initial list of options.
* This setting can be any of the following: true, false (disabled), or a function
* to process input. The function can take one of two forms: synchronous
* (with signature function(input){} or asynchronous
* (with signature function(input, callback). In the synchronous case, the function
* should return an object for the options
* (eg, with defaults: return { 'value': value, 'text': text };).
* The asynchronous version should invoke the callback with the result in the same
* format as the object above (eg, callback( { 'value': value, 'text': text});)
*
* Default: false
*/
this.create = false;
/**
* If true, when user exits the field (clicks outside of input), a new option
* is created and selected (if create setting is enabled).
*
* Default: false
*/
this.createOnBlur = false;
/**
* Specifies a RegExp or a string containing a regular expression that the current
* search filter must match to be allowed to be created. May also be a predicate
* function that takes the filter text and returns whether it is allowed.
*
* Default: null
*/
this.createFilter = null;
/**
* Toggles match highlighting within the dropdown menu.
*
* Default: true
*/
this.highlight = true;
/**
* If false, items created by the user will not show up as available options once
* they are unselected.
*
* Default: false
*/
this.persist = true;
/**
* Show the dropdown immediately when the control receives focus.
*
* Default: true
*/
this.openOnFocus = true;
/**
* The max number of items to render at once in the dropdown list of options.
*
* Default: 1000
*/
this.maxOptions = 1000;
/**
* The max number of items the user can select. 1 makes the control mono-selection,
* null allows an unlimited number of items.
*
* Default: 1
*/
this.maxItems = 1;
/**
* If true, the items that are currently selected will not be shown in the dropdown
* list of available options.
*
* Default: false
*/
this.hideSelected = false;
/**
* If true, the dropdown will be closed after a selection is made.
*
* Default: false
*/
this.closeAfterSelect = false;
/**
* If true, Selectize will treat any options with a "" value like normal.
* This defaults to false to accomodate the common <select> practice of
* having the first empty option to act as a placeholder.
*
* Default: false
*/
this.allowEmptyOption = false;
/**
* The animation duration (in milliseconds) of the scroll animation
* triggered when going [up] and [down] in the options dropdown.
*
* Default: 60
*/
this.scrollDuration = 60;
/**
* The number of milliseconds to wait before requesting options from the
* server or null. If null, throttling is disabled. Useful when loading
* options dynamically while the user types a search / filter expression.
*
* Default: 300
*/
this.loadThrottle = 300;
/**
* The class name added to the wrapper element while awaiting the
* fulfillment of load requests.
*
* Default: 'loading'
*/
this.loadingClass = 'loading';
/**
* The placeholder of the control (displayed when nothing is selected / typed).
* Defaults to input element's placeholder, unless this one is specified.
*
* Default: null
*/
this.placeholder = null;
/**
* If true, the load function will be called upon control
* initialization (with an empty search).
*
* Default: false
*/
this.preload = false;
/**
* The element the dropdown menu is appended to. This should be 'body' or null.
* If null, the dropdown will be appended as a child of the Selectize control.
*
* Default: null
*/
this.dropdownParent = null;
/**
* If true, the "Add..." option is the default selection in the dropdown.
*
* Default: false
*/
this.addPrecedence = false;
/**
* If true, the tab key will choose the currently selected item.
*
* Default: false
*/
this.selectOnTab = false;
/**
* Enable or disable international character support.
*
* Default: true
*/
this.diacritics = true;
/**
* The property name of the label in the options array
*
* Default: 'label'
*/
this.labelField = 'label';
/**
* The property name of the value in the options array
*
* Default: 'value'
*/
this.valueField = 'value';
/**
* An array of property names to analyze when filtering options.
*/
this.searchField = ['label'];
/**
* Default override item render function
*/
this.render = {
item: function (item, escape) {
/** @type {?} */
var multi = "<span class=\"hx-badge is-medium\">\n <span class=\"hx-badge-content\">"
+ escape(item.label) +
"</span>\n </span>";
/** @type {?} */
var single = "<div class=\"item\">" + escape(item.label) + "</div>";
return (!_this.maxItems) ? multi : single;
}
};
/**
* Selectize plugins to use
*/
this.plugins = {
'remove_button': {
label: '',
title: 'Remove',
className: 'hx-delete',
append: true
}
};
}
SelectizeConfig.decorators = [
{ type: Injectable },
];
return SelectizeConfig;
}());
export { SelectizeConfig };
if (false) {
/**
* Form label text
*
* Default: 'Selectize Label'
* @type {?}
*/
SelectizeConfig.prototype.label;
/**
* Helper text shown on focus or error
*
* Default: 'Selectize help text'
* @type {?}
*/
SelectizeConfig.prototype.help;
/**
* Force caret to show.
* Only applies to multi select.
*
* Default: false
* @type {?}
*/
SelectizeConfig.prototype.hasCaret;
/**
* Mandatory boolean controls whether the * is shown in the label or not.
* Has nothing to do with formControl.
*
* * Default: false
* @type {?}
*/
SelectizeConfig.prototype.mandatory;
/**
* Array of css class names that can be appended to the input control element
*
* Default: []
* @type {?}
*/
SelectizeConfig.prototype.inputControlClasses;
/**
* The string to separate items by. When typing an item in a multi-selection control
* allowing creation, then the delimiter, the item is added. If you paste
* delimiter-separated items in such control, the items are added at once.
* The delimiter is also used in the getValue API call on a text <input> tag to
* separate the multiple values.
*
* Default: ','
* @type {?}
*/
SelectizeConfig.prototype.delimiter;
/**
* Allows the user to create new items that aren't in the initial list of options.
* This setting can be any of the following: true, false (disabled), or a function
* to process input. The function can take one of two forms: synchronous
* (with signature function(input){} or asynchronous
* (with signature function(input, callback). In the synchronous case, the function
* should return an object for the options
* (eg, with defaults: return { 'value': value, 'text': text };).
* The asynchronous version should invoke the callback with the result in the same
* format as the object above (eg, callback( { 'value': value, 'text': text});)
*
* Default: false
* @type {?}
*/
SelectizeConfig.prototype.create;
/**
* If true, when user exits the field (clicks outside of input), a new option
* is created and selected (if create setting is enabled).
*
* Default: false
* @type {?}
*/
SelectizeConfig.prototype.createOnBlur;
/**
* Specifies a RegExp or a string containing a regular expression that the current
* search filter must match to be allowed to be created. May also be a predicate
* function that takes the filter text and returns whether it is allowed.
*
* Default: null
* @type {?}
*/
SelectizeConfig.prototype.createFilter;
/**
* Toggles match highlighting within the dropdown menu.
*
* Default: true
* @type {?}
*/
SelectizeConfig.prototype.highlight;
/**
* If false, items created by the user will not show up as available options once
* they are unselected.
*
* Default: false
* @type {?}
*/
SelectizeConfig.prototype.persist;
/**
* Show the dropdown immediately when the control receives focus.
*
* Default: true
* @type {?}
*/
SelectizeConfig.prototype.openOnFocus;
/**
* The max number of items to render at once in the dropdown list of options.
*
* Default: 1000
* @type {?}
*/
SelectizeConfig.prototype.maxOptions;
/**
* The max number of items the user can select. 1 makes the control mono-selection,
* null allows an unlimited number of items.
*
* Default: 1
* @type {?}
*/
SelectizeConfig.prototype.maxItems;
/**
* If true, the items that are currently selected will not be shown in the dropdown
* list of available options.
*
* Default: false
* @type {?}
*/
SelectizeConfig.prototype.hideSelected;
/**
* If true, the dropdown will be closed after a selection is made.
*
* Default: false
* @type {?}
*/
SelectizeConfig.prototype.closeAfterSelect;
/**
* If true, Selectize will treat any options with a "" value like normal.
* This defaults to false to accomodate the common <select> practice of
* having the first empty option to act as a placeholder.
*
* Default: false
* @type {?}
*/
SelectizeConfig.prototype.allowEmptyOption;
/**
* The animation duration (in milliseconds) of the scroll animation
* triggered when going [up] and [down] in the options dropdown.
*
* Default: 60
* @type {?}
*/
SelectizeConfig.prototype.scrollDuration;
/**
* The number of milliseconds to wait before requesting options from the
* server or null. If null, throttling is disabled. Useful when loading
* options dynamically while the user types a search / filter expression.
*
* Default: 300
* @type {?}
*/
SelectizeConfig.prototype.loadThrottle;
/**
* The class name added to the wrapper element while awaiting the
* fulfillment of load requests.
*
* Default: 'loading'
* @type {?}
*/
SelectizeConfig.prototype.loadingClass;
/**
* The placeholder of the control (displayed when nothing is selected / typed).
* Defaults to input element's placeholder, unless this one is specified.
*
* Default: null
* @type {?}
*/
SelectizeConfig.prototype.placeholder;
/**
* If true, the load function will be called upon control
* initialization (with an empty search).
*
* Default: false
* @type {?}
*/
SelectizeConfig.prototype.preload;
/**
* The element the dropdown menu is appended to. This should be 'body' or null.
* If null, the dropdown will be appended as a child of the Selectize control.
*
* Default: null
* @type {?}
*/
SelectizeConfig.prototype.dropdownParent;
/**
* If true, the "Add..." option is the default selection in the dropdown.
*
* Default: false
* @type {?}
*/
SelectizeConfig.prototype.addPrecedence;
/**
* If true, the tab key will choose the currently selected item.
*
* Default: false
* @type {?}
*/
SelectizeConfig.prototype.selectOnTab;
/**
* Enable or disable international character support.
*
* Default: true
* @type {?}
*/
SelectizeConfig.prototype.diacritics;
/**
* The property name of the label in the options array
*
* Default: 'label'
* @type {?}
*/
SelectizeConfig.prototype.labelField;
/**
* The property name of the value in the options array
*
* Default: 'value'
* @type {?}
*/
SelectizeConfig.prototype.valueField;
/**
* An array of property names to analyze when filtering options.
* @type {?}
*/
SelectizeConfig.prototype.searchField;
/**
* Default override item render function
* @type {?}
*/
SelectizeConfig.prototype.render;
/**
* Selectize plugins to use
* @type {?}
*/
SelectizeConfig.prototype.plugins;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aXplLmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BoeHVpL2FuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvc2VsZWN0aXplL3NlbGVjdGl6ZS5jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0M7SUFBQTtRQUFBLGlCQXNRQzs7Ozs7O1FBOVBDLFVBQUssR0FBRyxpQkFBaUIsQ0FBQzs7Ozs7O1FBTzFCLFNBQUksR0FBRyxxQkFBcUIsQ0FBQzs7Ozs7OztRQVE3QixhQUFRLEdBQUcsS0FBSyxDQUFDOzs7Ozs7O1FBUWpCLGNBQVMsR0FBRyxLQUFLLENBQUM7Ozs7OztRQVFsQix3QkFBbUIsR0FBRyxFQUFFLENBQUM7Ozs7Ozs7Ozs7UUFXekIsY0FBUyxHQUFHLEdBQUcsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7UUFlaEIsV0FBTSxHQUF1QixLQUFLLENBQUM7Ozs7Ozs7UUFRbkMsaUJBQVksR0FBRyxLQUFLLENBQUM7Ozs7Ozs7O1FBU3JCLGlCQUFZLEdBQVcsSUFBSSxDQUFDOzs7Ozs7UUFPNUIsY0FBUyxHQUFHLElBQUksQ0FBQzs7Ozs7OztRQVFqQixZQUFPLEdBQUcsSUFBSSxDQUFDOzs7Ozs7UUFPZixnQkFBVyxHQUFHLElBQUksQ0FBQzs7Ozs7O1FBT25CLGVBQVUsR0FBRyxJQUFJLENBQUM7Ozs7Ozs7UUFRbEIsYUFBUSxHQUFHLENBQUMsQ0FBQzs7Ozs7OztRQVFiLGlCQUFZLEdBQUcsS0FBSyxDQUFDOzs7Ozs7UUFPckIscUJBQWdCLEdBQUcsS0FBSyxDQUFDOzs7Ozs7OztRQVN6QixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7Ozs7Ozs7UUFRekIsbUJBQWMsR0FBRyxFQUFFLENBQUM7Ozs7Ozs7O1FBU3BCLGlCQUFZLEdBQUcsR0FBRyxDQUFDOzs7Ozs7O1FBUVgsaUJBQVksR0FBRyxTQUFTLENBQUM7Ozs7Ozs7UUFRekIsZ0JBQVcsR0FBVyxJQUFJLENBQUM7Ozs7Ozs7UUFRbkMsWUFBTyxHQUFHLEtBQUssQ0FBQzs7Ozs7OztRQVFoQixtQkFBYyxHQUFXLElBQUksQ0FBQzs7Ozs7O1FBTzlCLGtCQUFhLEdBQUcsS0FBSyxDQUFDOzs7Ozs7UUFPZCxnQkFBVyxHQUFHLEtBQUssQ0FBQzs7Ozs7O1FBT3BCLGVBQVUsR0FBRyxJQUFJLENBQUM7Ozs7OztRQU9uQixlQUFVLEdBQUcsT0FBTyxDQUFDOzs7Ozs7UUFPckIsZUFBVSxHQUFHLE9BQU8sQ0FBQzs7OztRQUtyQixnQkFBVyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7Ozs7UUFLeEIsV0FBTSxHQUFHO1lBQ2QsSUFBSSxFQUFFLFVBQUMsSUFBb0IsRUFBRSxNQUFnQjs7b0JBQ3JDLEtBQUssR0FBRyx3RkFDNEI7c0JBQzFCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO29CQUN4QixnQ0FDTTs7b0JBQ1YsTUFBTSxHQUFHLHNCQUFvQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUTtnQkFDbkUsT0FBTyxDQUFDLENBQUMsS0FBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUMzQyxDQUFDO1NBQ0YsQ0FBQzs7OztRQU1NLFlBQU8sR0FBRztZQUNoQixlQUFlLEVBQUU7Z0JBQ2YsS0FBSyxFQUFPLEVBQUU7Z0JBQ2QsS0FBSyxFQUFPLFFBQVE7Z0JBQ3BCLFNBQVMsRUFBRyxXQUFXO2dCQUN2QixNQUFNLEVBQU0sSUFBSTthQUNqQjtTQUNGLENBQUM7SUFFSixDQUFDOztnQkF0UUEsVUFBVTs7SUFzUVgsc0JBQUM7Q0FBQSxBQXRRRCxJQXNRQztTQXJRWSxlQUFlOzs7Ozs7OztJQU8xQixnQ0FBMEI7Ozs7Ozs7SUFPMUIsK0JBQTZCOzs7Ozs7OztJQVE3QixtQ0FBaUI7Ozs7Ozs7O0lBUWpCLG9DQUFrQjs7Ozs7OztJQVFsQiw4Q0FBeUI7Ozs7Ozs7Ozs7O0lBV3pCLG9DQUFnQjs7Ozs7Ozs7Ozs7Ozs7O0lBZWhCLGlDQUFtQzs7Ozs7Ozs7SUFRbkMsdUNBQXFCOzs7Ozs7Ozs7SUFTckIsdUNBQTRCOzs7Ozs7O0lBTzVCLG9DQUFpQjs7Ozs7Ozs7SUFRakIsa0NBQWU7Ozs7Ozs7SUFPZixzQ0FBbUI7Ozs7Ozs7SUFPbkIscUNBQWtCOzs7Ozs7OztJQVFsQixtQ0FBYTs7Ozs7Ozs7SUFRYix1Q0FBcUI7Ozs7Ozs7SUFPckIsMkNBQXlCOzs7Ozs7Ozs7SUFTekIsMkNBQXlCOzs7Ozs7OztJQVF6Qix5Q0FBb0I7Ozs7Ozs7OztJQVNwQix1Q0FBbUI7Ozs7Ozs7O0lBUW5CLHVDQUFpQzs7Ozs7Ozs7SUFRakMsc0NBQW1DOzs7Ozs7OztJQVFuQyxrQ0FBZ0I7Ozs7Ozs7O0lBUWhCLHlDQUE4Qjs7Ozs7OztJQU85Qix3Q0FBc0I7Ozs7Ozs7SUFPdEIsc0NBQTRCOzs7Ozs7O0lBTzVCLHFDQUEwQjs7Ozs7OztJQU8xQixxQ0FBNEI7Ozs7Ozs7SUFPNUIscUNBQTRCOzs7OztJQUs1QixzQ0FBK0I7Ozs7O0lBSy9CLGlDQVVFOzs7OztJQU1GLGtDQU9FIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0lTZWxlY3RpemVJdGVtfSBmcm9tICcuL3NlbGVjdGl6ZS1pdGVtLmludGVyZmFjZSc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RpemVDb25maWcgIHtcclxuXHJcbiAgLyoqXHJcbiAgICogRm9ybSBsYWJlbCB0ZXh0XHJcbiAgICpcclxuICAgKiBEZWZhdWx0OiAnU2VsZWN0aXplIExhYmVsJ1xyXG4gICAqL1xyXG4gIGxhYmVsID0gJ1NlbGVjdGl6ZSBMYWJlbCc7XHJcblxyXG4gIC8qKlxyXG4gICAqIEhlbHBlciB0ZXh0IHNob3duIG9uIGZvY3VzIG9yIGVycm9yXHJcbiAgICpcclxuICAgKiBEZWZhdWx0OiAnU2VsZWN0aXplIGhlbHAgdGV4dCdcclxuICAgKi9cclxuICBoZWxwID0gJ1NlbGVjdGl6ZSBoZWxwIHRleHQnO1xyXG5cclxuICAvKipcclxuICAgKiBGb3JjZSBjYXJldCB0byBzaG93LlxyXG4gICAqIE9ubHkgYXBwbGllcyB0byBtdWx0aSBzZWxlY3QuXHJcbiAgICpcclxuICAgKiBEZWZhdWx0OiBmYWxzZVxyXG4gICAqL1xyXG4gIGhhc0NhcmV0ID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIE1hbmRhdG9yeSBib29sZWFuIGNvbnRyb2xzIHdoZXRoZXIgdGhlICogaXMgc2hvd24gaW4gdGhlIGxhYmVsIG9yIG5vdC5cclxuICAgKiBIYXMgbm90aGluZyB0byBkbyB3aXRoIGZvcm1Db250cm9sLlxyXG4gICAqXHJcbiAgICogICogRGVmYXVsdDogZmFsc2VcclxuICAgKi9cclxuICBtYW5kYXRvcnkgPSBmYWxzZTtcclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEFycmF5IG9mIGNzcyBjbGFzcyBuYW1lcyB0aGF0IGNhbiBiZSBhcHBlbmRlZCB0byB0aGUgaW5wdXQgY29udHJvbCBlbGVtZW50XHJcbiAgICpcclxuICAgKiBEZWZhdWx0OiBbXVxyXG4gICAqL1xyXG4gIGlucHV0Q29udHJvbENsYXNzZXMgPSBbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogIFRoZSBzdHJpbmcgdG8gc2VwYXJhdGUgaXRlbXMgYnkuIFdoZW4gdHlwaW5nIGFuIGl0ZW0gaW4gYSBtdWx0aS1zZWxlY3Rpb24gY29udHJvbFxyXG4gICAqICBhbGxvd2luZyBjcmVhdGlvbiwgdGhlbiB0aGUgZGVsaW1pdGVyLCB0aGUgaXRlbSBpcyBhZGRlZC4gSWYgeW91IHBhc3RlXHJcbiAgICogIGRlbGltaXRlci1zZXBhcmF0ZWQgaXRlbXMgaW4gc3VjaCBjb250cm9sLCB0aGUgaXRlbXMgYXJlIGFkZGVkIGF0IG9uY2UuXHJcbiAgICogIFRoZSBkZWxpbWl0ZXIgaXMgYWxzbyB1c2VkIGluIHRoZSBnZXRWYWx1ZSBBUEkgY2FsbCBvbiBhIHRleHQgPGlucHV0PiB0YWcgdG9cclxuICAgKiAgc2VwYXJhdGUgdGhlIG11bHRpcGxlIHZhbHVlcy5cclxuICAgKlxyXG4gICAqICBEZWZhdWx0OiAnLCdcclxuICAgKi9cclxuICBkZWxpbWl0ZXIgPSAnLCc7XHJcblxyXG4gIC8qKlxyXG4gICAqICBBbGxvd3MgdGhlIHVzZXIgdG8gY3JlYXRlIG5ldyBpdGVtcyB0aGF0IGFyZW4ndCBpbiB0aGUgaW5pdGlhbCBsaXN0IG9mIG9wdGlvbnMuXHJcbiAgICogIFRoaXMgc2V0dGluZyBjYW4gYmUgYW55IG9mIHRoZSBmb2xsb3dpbmc6IHRydWUsIGZhbHNlIChkaXNhYmxlZCksIG9yIGEgZnVuY3Rpb25cclxuICAgKiAgdG8gcHJvY2VzcyBpbnB1dC4gVGhlIGZ1bmN0aW9uIGNhbiB0YWtlIG9uZSBvZiB0d28gZm9ybXM6IHN5bmNocm9ub3VzXHJcbiAgICogICh3aXRoIHNpZ25hdHVyZSBmdW5jdGlvbihpbnB1dCl7fSBvciBhc3luY2hyb25vdXNcclxuICAgKiAgKHdpdGggc2lnbmF0dXJlIGZ1bmN0aW9uKGlucHV0LCBjYWxsYmFjaykuIEluIHRoZSBzeW5jaHJvbm91cyBjYXNlLCB0aGUgZnVuY3Rpb25cclxuICAgKiAgc2hvdWxkIHJldHVybiBhbiBvYmplY3QgZm9yIHRoZSBvcHRpb25zXHJcbiAgICogIChlZywgd2l0aCBkZWZhdWx0czogcmV0dXJuIHsgJ3ZhbHVlJzogdmFsdWUsICd0ZXh0JzogdGV4dCB9OykuXHJcbiAgICogIFRoZSBhc3luY2hyb25vdXMgdmVyc2lvbiBzaG91bGQgaW52b2tlIHRoZSBjYWxsYmFjayB3aXRoIHRoZSByZXN1bHQgaW4gdGhlIHNhbWVcclxuICAgKiAgZm9ybWF0IGFzIHRoZSBvYmplY3QgYWJvdmUgKGVnLCBjYWxsYmFjayggeyAndmFsdWUnOiB2YWx1ZSwgJ3RleHQnOiB0ZXh0fSk7KVxyXG4gICAqXHJcbiAgICogIERlZmF1bHQ6IGZhbHNlXHJcbiAgICovXHJcbiAgY3JlYXRlOiBib29sZWFuIHwgRnVuY3Rpb24gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogIElmIHRydWUsIHdoZW4gdXNlciBleGl0cyB0aGUgZmllbGQgKGNsaWNrcyBvdXRzaWRlIG9mIGlucHV0KSwgYSBuZXcgb3B0aW9uXHJcbiAgICogIGlzIGNyZWF0ZWQgYW5kIHNlbGVjdGVkIChpZiBjcmVhdGUgc2V0dGluZyBpcyBlbmFibGVkKS5cclxuICAgKlxyXG4gICAqICBEZWZhdWx0OiBmYWxzZVxyXG4gICAqL1xyXG4gIGNyZWF0ZU9uQmx1ciA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiAgU3BlY2lmaWVzIGEgUmVnRXhwIG9yIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCB0aGUgY3VycmVudFxyXG4gICAqICBzZWFyY2ggZmlsdGVyIG11c3QgbWF0Y2ggdG8gYmUgYWxsb3dlZCB0byBiZSBjcmVhdGVkLiBNYXkgYWxzbyBiZSBhIHByZWRpY2F0ZVxyXG4gICAqICBmdW5jdGlvbiB0aGF0IHRha2VzIHRoZSBmaWx0ZXIgdGV4dCBhbmQgcmV0dXJucyB3aGV0aGVyIGl0IGlzIGFsbG93ZWQuXHJcbiAgICpcclxuICAgKiAgRGVmYXVsdDogbnVsbFxyXG4gICAqL1xyXG4gIGNyZWF0ZUZpbHRlcjogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgLyoqXHJcbiAgICogIFRvZ2dsZXMgbWF0Y2ggaGlnaGxpZ2h0aW5nIHdpdGhpbiB0aGUgZHJvcGRvd24gbWVudS5cclxuICAgKlxyXG4gICAqICBEZWZhdWx0OiB0cnVlXHJcbiAgICovXHJcbiAgaGlnaGxpZ2h0ID0gdHJ1ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogIElmIGZhbHNlLCBpdGVtcyBjcmVhdGVkIGJ5IHRoZSB1c2VyIHdpbGwgbm90IHNob3cgdXAgYXMgYXZhaWxhYmxlIG9wdGlvbnMgb25jZVxyXG4gICAqICB0aGV5IGFyZSB1bnNlbGVjdGVkLlxyXG4gICAqXHJcbiAgICogIERlZmF1bHQ6IGZhbHNlXHJcbiAgICovXHJcbiAgcGVyc2lzdCA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqICBTaG93IHRoZSBkcm9wZG93biBpbW1lZGlhdGVseSB3aGVuIHRoZSBjb250cm9sIHJlY2VpdmVzIGZvY3VzLlxyXG4gICAqXHJcbiAgICogIERlZmF1bHQ6IHRydWVcclxuICAgKi9cclxuICBvcGVuT25Gb2N1cyA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqICBUaGUgbWF4IG51bWJlciBvZiBpdGVtcyB0byByZW5kZXIgYXQgb25jZSBpbiB0aGUgZHJvcGRvd24gbGlzdCBvZiBvcHRpb25zLlxyXG4gICAqXHJcbiAgICogIERlZmF1bHQ6IDEwMDBcclxuICAgKi9cclxuICBtYXhPcHRpb25zID0gMTAwMDtcclxuXHJcbiAgLyoqXHJcbiAgICogIFRoZSBtYXggbnVtYmVyIG9mIGl0ZW1zIHRoZSB1c2VyIGNhbiBzZWxlY3QuIDEgbWFrZXMgdGhlIGNvbnRyb2wgbW9uby1zZWxlY3Rpb24sXHJcbiAgICogIG51bGwgYWxsb3dzIGFuIHVubGltaXRlZCBudW1iZXIgb2YgaXRlbXMuXHJcbiAgICpcclxuICAgKiAgRGVmYXVsdDogMVxyXG4gICAqL1xyXG4gIG1heEl0ZW1zID0gMTtcclxuXHJcbiAgLyoqXHJcbiAgICogIElmIHRydWUsIHRoZSBpdGVtcyB0aGF0IGFyZSBjdXJyZW50bHkgc2VsZWN0ZWQgd2lsbCBub3QgYmUgc2hvd24gaW4gdGhlIGRyb3Bkb3duXHJcbiAgICogIGxpc3Qgb2YgYXZhaWxhYmxlIG9wdGlvbnMuXHJcbiAgICpcclxuICAgKiAgRGVmYXVsdDogZmFsc2VcclxuICAgKi9cclxuICBoaWRlU2VsZWN0ZWQgPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogIElmIHRydWUsIHRoZSBkcm9wZG93biB3aWxsIGJlIGNsb3NlZCBhZnRlciBhIHNlbGVjdGlvbiBpcyBtYWRlLlxyXG4gICAqXHJcbiAgICogIERlZmF1bHQ6IGZhbHNlXHJcbiAgICovXHJcbiAgY2xvc2VBZnRlclNlbGVjdCA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiAgSWYgdHJ1ZSwgU2VsZWN0aXplIHdpbGwgdHJlYXQgYW55IG9wdGlvbnMgd2l0aCBhIFwiXCIgdmFsdWUgbGlrZSBub3JtYWwuXHJcbiAgICogIFRoaXMgZGVmYXVsdHMgdG8gZmFsc2UgdG8gYWNjb21vZGF0ZSB0aGUgY29tbW9uIDxzZWxlY3Q+IHByYWN0aWNlIG9mXHJcbiAgICogIGhhdmluZyB0aGUgZmlyc3QgZW1wdHkgb3B0aW9uIHRvIGFjdCBhcyBhIHBsYWNlaG9sZGVyLlxyXG4gICAqXHJcbiAgICogIERlZmF1bHQ6IGZhbHNlXHJcbiAgICovXHJcbiAgYWxsb3dFbXB0eU9wdGlvbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiAgVGhlIGFuaW1hdGlvbiBkdXJhdGlvbiAoaW4gbWlsbGlzZWNvbmRzKSBvZiB0aGUgc2Nyb2xsIGFuaW1hdGlvblxyXG4gICAqICB0cmlnZ2VyZWQgd2hlbiBnb2luZyBbdXBdIGFuZCBbZG93bl0gaW4gdGhlIG9wdGlvbnMgZHJvcGRvd24uXHJcbiAgICpcclxuICAgKiAgRGVmYXVsdDogNjBcclxuICAgKi9cclxuICBzY3JvbGxEdXJhdGlvbiA9IDYwO1xyXG5cclxuICAvKipcclxuICAgKiAgVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgcmVxdWVzdGluZyBvcHRpb25zIGZyb20gdGhlXHJcbiAgICogIHNlcnZlciBvciBudWxsLiBJZiBudWxsLCB0aHJvdHRsaW5nIGlzIGRpc2FibGVkLiBVc2VmdWwgd2hlbiBsb2FkaW5nXHJcbiAgICogIG9wdGlvbnMgZHluYW1pY2FsbHkgd2hpbGUgdGhlIHVzZXIgdHlwZXMgYSBzZWFyY2ggLyBmaWx0ZXIgZXhwcmVzc2lvbi5cclxuICAgKlxyXG4gICAqICBEZWZhdWx0OiAzMDBcclxuICAgKi9cclxuICBsb2FkVGhyb3R0bGUgPSAzMDA7XHJcblxyXG4gIC8qKlxyXG4gICAqICBUaGUgY2xhc3MgbmFtZSBhZGRlZCB0byB0aGUgd3JhcHBlciBlbGVtZW50IHdoaWxlIGF3YWl0aW5nIHRoZVxyXG4gICAqICBmdWxmaWxsbWVudCBvZiBsb2FkIHJlcXVlc3RzLlxyXG4gICAqXHJcbiAgICogIERlZmF1bHQ6ICdsb2FkaW5nJ1xyXG4gICAqL1xyXG4gIHByaXZhdGUgbG9hZGluZ0NsYXNzID0gJ2xvYWRpbmcnO1xyXG5cclxuICAvKipcclxuICAgKiAgVGhlIHBsYWNlaG9sZGVyIG9mIHRoZSBjb250cm9sIChkaXNwbGF5ZWQgd2hlbiBub3RoaW5nIGlzIHNlbGVjdGVkIC8gdHlwZWQpLlxyXG4gICAqICBEZWZhdWx0cyB0byBpbnB1dCBlbGVtZW50J3MgcGxhY2Vob2xkZXIsIHVubGVzcyB0aGlzIG9uZSBpcyBzcGVjaWZpZWQuXHJcbiAgICpcclxuICAgKiAgRGVmYXVsdDogbnVsbFxyXG4gICAqL1xyXG4gIHByaXZhdGUgcGxhY2Vob2xkZXI6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqICBJZiB0cnVlLCB0aGUgbG9hZCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB1cG9uIGNvbnRyb2xcclxuICAgKiAgaW5pdGlhbGl6YXRpb24gKHdpdGggYW4gZW1wdHkgc2VhcmNoKS5cclxuICAgKlxyXG4gICAqICBEZWZhdWx0OiBmYWxzZVxyXG4gICAqL1xyXG4gIHByZWxvYWQgPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogIFRoZSBlbGVtZW50IHRoZSBkcm9wZG93biBtZW51IGlzIGFwcGVuZGVkIHRvLiBUaGlzIHNob3VsZCBiZSAnYm9keScgb3IgbnVsbC5cclxuICAgKiAgSWYgbnVsbCwgdGhlIGRyb3Bkb3duIHdpbGwgYmUgYXBwZW5kZWQgYXMgYSBjaGlsZCBvZiB0aGUgU2VsZWN0aXplIGNvbnRyb2wuXHJcbiAgICpcclxuICAgKiAgRGVmYXVsdDogbnVsbFxyXG4gICAqL1xyXG4gIGRyb3Bkb3duUGFyZW50OiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiAgSWYgdHJ1ZSwgdGhlIFwiQWRkLi4uXCIgb3B0aW9uIGlzIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBpbiB0aGUgZHJvcGRvd24uXHJcbiAgICpcclxuICAgKiAgRGVmYXVsdDogZmFsc2VcclxuICAgKi9cclxuICBhZGRQcmVjZWRlbmNlID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqICBJZiB0cnVlLCB0aGUgdGFiIGtleSB3aWxsIGNob29zZSB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW0uXHJcbiAgICpcclxuICAgKiAgRGVmYXVsdDogZmFsc2VcclxuICAgKi9cclxuICBwcml2YXRlIHNlbGVjdE9uVGFiID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqICBFbmFibGUgb3IgZGlzYWJsZSBpbnRlcm5hdGlvbmFsIGNoYXJhY3RlciBzdXBwb3J0LlxyXG4gICAqXHJcbiAgICogIERlZmF1bHQ6IHRydWVcclxuICAgKi9cclxuICBwcml2YXRlIGRpYWNyaXRpY3MgPSB0cnVlO1xyXG5cclxuICAvKipcclxuICAgKiAgVGhlIHByb3BlcnR5IG5hbWUgb2YgdGhlIGxhYmVsIGluIHRoZSBvcHRpb25zIGFycmF5XHJcbiAgICpcclxuICAgKiAgRGVmYXVsdDogJ2xhYmVsJ1xyXG4gICAqL1xyXG4gIHB1YmxpYyBsYWJlbEZpZWxkID0gJ2xhYmVsJztcclxuXHJcbiAgLyoqXHJcbiAgICogIFRoZSBwcm9wZXJ0eSBuYW1lIG9mIHRoZSB2YWx1ZSBpbiB0aGUgb3B0aW9ucyBhcnJheVxyXG4gICAqXHJcbiAgICogIERlZmF1bHQ6ICd2YWx1ZSdcclxuICAgKi9cclxuICBwdWJsaWMgdmFsdWVGaWVsZCA9ICd2YWx1ZSc7XHJcblxyXG4gIC8qKlxyXG4gICAqIEFuIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIHRvIGFuYWx5emUgd2hlbiBmaWx0ZXJpbmcgb3B0aW9ucy5cclxuICAgKi9cclxuICBwdWJsaWMgc2VhcmNoRmllbGQgPSBbJ2xhYmVsJ107XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmF1bHQgb3ZlcnJpZGUgaXRlbSByZW5kZXIgZnVuY3Rpb25cclxuICAgKi9cclxuICBwdWJsaWMgcmVuZGVyID0ge1xyXG4gICAgaXRlbTogKGl0ZW06IElTZWxlY3RpemVJdGVtLCBlc2NhcGU6IEZ1bmN0aW9uKTogc3RyaW5nID0+IHtcclxuICAgICAgY29uc3QgbXVsdGkgPSBgPHNwYW4gY2xhc3M9XCJoeC1iYWRnZSBpcy1tZWRpdW1cIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaHgtYmFkZ2UtY29udGVudFwiPmBcclxuICAgICAgICAgICAgICAgICAgICArIGVzY2FwZShpdGVtLmxhYmVsKSArXHJcbiAgICAgICAgICAgICAgICBgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5gO1xyXG4gICAgICBjb25zdCBzaW5nbGUgPSBgPGRpdiBjbGFzcz1cIml0ZW1cIj5gICsgZXNjYXBlKGl0ZW0ubGFiZWwpICsgYDwvZGl2PmA7XHJcbiAgICAgIHJldHVybiAoIXRoaXMubWF4SXRlbXMpID8gbXVsdGkgOiBzaW5nbGU7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qKlxyXG4gICAqICBTZWxlY3RpemUgcGx1Z2lucyB0byB1c2VcclxuICAgKi9cclxuICBwcml2YXRlIHBsdWdpbnMgPSB7XHJcbiAgICAncmVtb3ZlX2J1dHRvbic6IHtcclxuICAgICAgbGFiZWwgICAgIDogJycsXHJcbiAgICAgIHRpdGxlICAgICA6ICdSZW1vdmUnLFxyXG4gICAgICBjbGFzc05hbWUgOiAnaHgtZGVsZXRlJyxcclxuICAgICAgYXBwZW5kICAgIDogdHJ1ZVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG59XHJcbiJdfQ==