@sapui5/sap.fe.controls 1.141.0 → 1.142.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/controls/.library +1 -1
  3. package/src/sap/fe/controls/easyFilter/EasyFilterBarContainer.js +3 -2
  4. package/src/sap/fe/controls/easyFilter/EasyFilterBarContainer.tsx +2 -2
  5. package/src/sap/fe/controls/easyFilter/EasyFilterInput.js +12 -5
  6. package/src/sap/fe/controls/easyFilter/EasyFilterInput.tsx +14 -6
  7. package/src/sap/fe/controls/easyFilter/utils.js +57 -12
  8. package/src/sap/fe/controls/easyFilter/utils.ts +67 -11
  9. package/src/sap/fe/controls/library.js +1 -1
  10. package/src/sap/fe/controls/messagebundle.properties +4 -4
  11. package/src/sap/fe/controls/messagebundle_ar.properties +7 -1
  12. package/src/sap/fe/controls/messagebundle_bg.properties +7 -1
  13. package/src/sap/fe/controls/messagebundle_ca.properties +7 -1
  14. package/src/sap/fe/controls/messagebundle_cnr.properties +7 -1
  15. package/src/sap/fe/controls/messagebundle_cs.properties +7 -1
  16. package/src/sap/fe/controls/messagebundle_cy.properties +7 -1
  17. package/src/sap/fe/controls/messagebundle_da.properties +7 -1
  18. package/src/sap/fe/controls/messagebundle_de.properties +7 -1
  19. package/src/sap/fe/controls/messagebundle_el.properties +7 -1
  20. package/src/sap/fe/controls/messagebundle_en.properties +7 -1
  21. package/src/sap/fe/controls/messagebundle_en_GB.properties +7 -1
  22. package/src/sap/fe/controls/messagebundle_en_US_saprigi.properties +7 -1
  23. package/src/sap/fe/controls/messagebundle_es.properties +7 -1
  24. package/src/sap/fe/controls/messagebundle_es_MX.properties +7 -1
  25. package/src/sap/fe/controls/messagebundle_et.properties +7 -1
  26. package/src/sap/fe/controls/messagebundle_fi.properties +7 -1
  27. package/src/sap/fe/controls/messagebundle_fr.properties +7 -1
  28. package/src/sap/fe/controls/messagebundle_fr_CA.properties +7 -1
  29. package/src/sap/fe/controls/messagebundle_hi.properties +7 -1
  30. package/src/sap/fe/controls/messagebundle_hr.properties +7 -1
  31. package/src/sap/fe/controls/messagebundle_hu.properties +7 -1
  32. package/src/sap/fe/controls/messagebundle_id.properties +7 -1
  33. package/src/sap/fe/controls/messagebundle_it.properties +7 -1
  34. package/src/sap/fe/controls/messagebundle_iw.properties +7 -1
  35. package/src/sap/fe/controls/messagebundle_ja.properties +7 -1
  36. package/src/sap/fe/controls/messagebundle_kk.properties +7 -1
  37. package/src/sap/fe/controls/messagebundle_ko.properties +7 -1
  38. package/src/sap/fe/controls/messagebundle_lt.properties +7 -1
  39. package/src/sap/fe/controls/messagebundle_lv.properties +7 -1
  40. package/src/sap/fe/controls/messagebundle_mk.properties +7 -1
  41. package/src/sap/fe/controls/messagebundle_ms.properties +7 -1
  42. package/src/sap/fe/controls/messagebundle_nl.properties +7 -1
  43. package/src/sap/fe/controls/messagebundle_no.properties +7 -1
  44. package/src/sap/fe/controls/messagebundle_pl.properties +7 -1
  45. package/src/sap/fe/controls/messagebundle_pt.properties +7 -1
  46. package/src/sap/fe/controls/messagebundle_pt_PT.properties +7 -1
  47. package/src/sap/fe/controls/messagebundle_ro.properties +7 -1
  48. package/src/sap/fe/controls/messagebundle_ru.properties +7 -1
  49. package/src/sap/fe/controls/messagebundle_sh.properties +7 -1
  50. package/src/sap/fe/controls/messagebundle_sk.properties +7 -1
  51. package/src/sap/fe/controls/messagebundle_sl.properties +8 -2
  52. package/src/sap/fe/controls/messagebundle_sr.properties +7 -1
  53. package/src/sap/fe/controls/messagebundle_sv.properties +7 -1
  54. package/src/sap/fe/controls/messagebundle_th.properties +7 -1
  55. package/src/sap/fe/controls/messagebundle_tr.properties +7 -1
  56. package/src/sap/fe/controls/messagebundle_uk.properties +7 -1
  57. package/src/sap/fe/controls/messagebundle_vi.properties +7 -1
  58. package/src/sap/fe/controls/messagebundle_zh_CN.properties +7 -1
  59. package/src/sap/fe/controls/messagebundle_zh_TW.properties +7 -1
@@ -150,15 +150,60 @@ sap.ui.define(["sap/base/util/deepEqual", "sap/ui/core/Lib", "sap/ui/core/format
150
150
  return value ? resourceBundle.getText("M_EASY_FILTER_SELECTED_VALUES_TRUE") : resourceBundle.getText("M_EASY_FILTER_SELECTED_VALUES_FALSE");
151
151
  }
152
152
 
153
- //This function returns true if the filter is not a valid "SingleRange" (e.g., wrong operator or too many values), and false if it is valid.
153
+ /**
154
+ * Handles the single range validation and updates for a filter value.
155
+ * @param filterCriteria The metadata for the filter
156
+ * @param filterValue The filter value to validate
157
+ * @param singleRangeTokenLabels Array to collect labels of invalid single range filters
158
+ * @param singleRangeUsage Record to track usage count of single range filters
159
+ * @returns True if processing should continue, false if it should skip
160
+ */
161
+ function handleSingleRangeFilter(filterCriteria, filterValue, singleRangeTokenLabels, singleRangeUsage) {
162
+ if (filterCriteria?.filterRestriction !== "SingleRange") {
163
+ return true;
164
+ }
165
+ const isInvalid = isInvalidSingleRange(filterValue) || (singleRangeUsage[filterValue.name] ?? 0) > 0;
166
+ singleRangeUsage[filterValue.name] = (singleRangeUsage[filterValue.name] ?? 0) + 1;
167
+ if (!isInvalid) {
168
+ return true;
169
+ }
170
+ const label = filterCriteria.label || filterCriteria.name;
171
+ if (!singleRangeTokenLabels.includes(label)) {
172
+ singleRangeTokenLabels.push(label);
173
+ }
174
+ if (filterCriteria.type === "Calendar" || filterCriteria.type === "Time") {
175
+ return false;
176
+ }
177
+ filterValue.values = [];
178
+ return true;
179
+ }
180
+
181
+ // Validates if a filter value violates the SingleRange restriction.
182
+ // Returns true if invalid, false if valid.
183
+ // Rules for SingleRange:
184
+ // - Allowed operators: EQ, LE, LT, GE, GT, BT, NB
185
+ // - Single-value operators (EQ, LE, LT, GE, GT): must have exactly 1 value
186
+ // - Range operators (BT, NB): must have exactly 2 values (lower & upper bound)
187
+ // - Only one condition/token is allowed per property (should be enforced outside)
188
+ //
154
189
  function isInvalidSingleRange(filterValue) {
155
- const allowed = [FilterOperator.EQ, FilterOperator.LE, FilterOperator.LT, FilterOperator.GE, FilterOperator.GT, FilterOperator.BT];
190
+ const singleValueOps = [FilterOperator.EQ, FilterOperator.LE, FilterOperator.LT, FilterOperator.GE, FilterOperator.GT];
191
+ const rangeOps = [FilterOperator.BT, FilterOperator.NB];
192
+ const op = filterValue.operator;
193
+ const valCount = filterValue.values?.length || 0;
194
+
195
+ // Single-value operators → must have exactly 1 value
196
+ if (singleValueOps.includes(op)) {
197
+ return valCount !== 1;
198
+ }
156
199
 
157
- // filterValue.operator !== FilterOperator.BT ensures BT is always valid.
158
- // !allowed.includes() blocks unsupported operators.
159
- // filterValue.values.length >= 2 blocks multiple values for single-range filters.
160
- // Together, this returns true when the filter is not a valid single-range.
161
- return filterValue.operator !== FilterOperator.BT && (!allowed.includes(filterValue.operator) || filterValue.values.length >= 2);
200
+ // Range operators (Between / Not Between) → must have exactly 2 values
201
+ if (rangeOps.includes(op)) {
202
+ return valCount !== 2;
203
+ }
204
+
205
+ // Anything else is not allowed for SingleRange
206
+ return true;
162
207
  }
163
208
  function formatData(tokens, filterValues, filterBarMetadata, setMessageStripForValidatedFilters) {
164
209
  if (filterValues) {
@@ -166,6 +211,7 @@ sap.ui.define(["sap/base/util/deepEqual", "sap/ui/core/Lib", "sap/ui/core/format
166
211
  const nonFilterableTokenLabels = [];
167
212
  const singleRangeTokenLabels = [];
168
213
  const hiddenFilterTokenLabels = [];
214
+ const singleRangeUsage = {};
169
215
  for (const filterValue of filterValues) {
170
216
  const filterCriteria = filterBarMetadata.find(field => field.name === filterValue.name);
171
217
  if (filterCriteria) {
@@ -179,10 +225,9 @@ sap.ui.define(["sap/base/util/deepEqual", "sap/ui/core/Lib", "sap/ui/core/format
179
225
  hiddenFilterTokenLabels.push(filterCriteria.label || filterCriteria.name);
180
226
  continue;
181
227
  }
182
- // Only apply SingleRange logic if filterRestriction is set to SingleRange
183
- if (filterCriteria?.filterRestriction === "SingleRange" && isInvalidSingleRange(filterValue)) {
184
- singleRangeTokenLabels.push(filterCriteria.label || filterCriteria.name);
185
- filterValue.values = []; // Reset values to avoid adding invalid token values
228
+ // Handles the single range validation and updates for a filter value
229
+ if (!handleSingleRangeFilter(filterCriteria, filterValue, singleRangeTokenLabels, singleRangeUsage)) {
230
+ continue;
186
231
  }
187
232
  const {
188
233
  type
@@ -258,4 +303,4 @@ sap.ui.define(["sap/base/util/deepEqual", "sap/ui/core/Lib", "sap/ui/core/format
258
303
  };
259
304
  return EasyFilterUtils;
260
305
  }, false);
261
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXNvdXJjZUJ1bmRsZSIsIkxpYiIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZGF0ZVRpbWVPZmZzZXQiLCJEYXRlVGltZU9mZnNldCIsImFyZUl0ZW1zU2FtZSIsImFycjEiLCJhcnIyIiwibGVuZ3RoIiwiaSIsIm9wZXJhdG9yIiwic2VsZWN0ZWRWYWx1ZXMiLCJldmVyeSIsInZhbHVlIiwiaW5kZXgiLCJkZWVwRXF1YWwiLCJkZXNjcmlwdGlvbiIsImFyZUFycmF5U2FtZSIsImFyZUNvZGVMaXN0c1NhbWUiLCJhcnJOZXcxIiwiZ2V0Q29kZUxpc3RBcnJheSIsImFyck5ldzIiLCJkZXNjcmlwdGlvbk5ldzEiLCJtYXAiLCJkYXRhIiwiZGVzY3JpcHRpb25OZXcyIiwidmFsdWUxIiwidmFsdWUyIiwiYXJyIiwiY29udmVydERhdGVUb1N0cmluZyIsInRva2VuVHlwZSIsImlzRGF0ZVRpbWVPZmZzZXQiLCJmb3JtYXR0ZWREYXRlVGltZSIsImZvcm1hdFZhbHVlIiwiRGF0ZUZvcm1hdCIsImdldERhdGVJbnN0YW5jZSIsImZvcm1hdCIsImdldFRpbWVJbnN0YW5jZSIsIm1hcE9wZXJhdG9yIiwibmV3VmFsdWUiLCJjb252ZXJ0Qm9vbFRvU3RyaW5nIiwiRGF0ZSIsIkZpbHRlck9wZXJhdG9yIiwiR1QiLCJMVCIsIkdFIiwiTEUiLCJFUSIsIkNvbnRhaW5zIiwiRW5kc1dpdGgiLCJTdGFydHNXaXRoIiwiTkUiLCJOb3RDb250YWlucyIsIk5vdEVuZHNXaXRoIiwiTm90U3RhcnRzV2l0aCIsInRvU3RyaW5nIiwibWFwT3BlcmF0b3JGb3JWYWx1ZUhlbHAiLCJtYXBPcGVyYXRvckZvckJldHdlZW5PcGVyYXRvciIsInZhbHVlcyIsIm5ld1ZhbHVlMSIsIm5ld1ZhbHVlMiIsIkJUIiwiaXNCZXR3ZWVuU2VsZWN0ZWRWYWx1ZXMiLCJOQiIsImdldFRleHQiLCJpc0ludmFsaWRTaW5nbGVSYW5nZSIsImZpbHRlclZhbHVlIiwiYWxsb3dlZCIsImluY2x1ZGVzIiwiZm9ybWF0RGF0YSIsInRva2VucyIsImZpbHRlclZhbHVlcyIsImZpbHRlckJhck1ldGFkYXRhIiwic2V0TWVzc2FnZVN0cmlwRm9yVmFsaWRhdGVkRmlsdGVycyIsInZpc2l0ZWRNYXBGb3JNYW5kYXRvcnlUb2tlbnMiLCJub25GaWx0ZXJhYmxlVG9rZW5MYWJlbHMiLCJzaW5nbGVSYW5nZVRva2VuTGFiZWxzIiwiaGlkZGVuRmlsdGVyVG9rZW5MYWJlbHMiLCJmaWx0ZXJDcml0ZXJpYSIsImZpbmQiLCJmaWVsZCIsIm5hbWUiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJmaWx0ZXJhYmxlIiwicHVzaCIsImxhYmVsIiwiaGlkZGVuRmlsdGVyIiwiZmlsdGVyUmVzdHJpY3Rpb24iLCJ0eXBlIiwidG9rZW5JbmRleCIsImZpbmRJbmRleCIsInRva2VuIiwia2V5Iiwia2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcyIsIkVhc3lGaWx0ZXJVdGlscyIsIm5ld1Rva2VuIiwiYnVzeSIsImN1cnJlbnRUb2tlbiIsImlzUmVxdWlyZWQiLCJtZXNzYWdlcyIsIm5vbkZpbHRlcmFibGVUb2tlbkxhYmVsIiwiam9pbiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsidXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcmltaXRpdmVUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL0VkbVwiO1xuaW1wb3J0IGRlZXBFcXVhbCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwRXF1YWxcIjtcbmltcG9ydCBMaWIgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IERhdGVGb3JtYXQgZnJvbSBcInNhcC91aS9jb3JlL2Zvcm1hdC9EYXRlRm9ybWF0XCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IERhdGVUaW1lT2Zmc2V0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdHlwZS9EYXRlVGltZU9mZnNldFwiO1xuaW1wb3J0IHR5cGUgeyBFYXN5RmlsdGVyUmVzdWx0LCBQcm9wZXJ0eU1ldGFkYXRhIH0gZnJvbSBcInV4L2VuZy9maW9yaWFpL3JldXNlL2Vhc3lmaWx0ZXIvRWFzeUZpbHRlclwiO1xuaW1wb3J0IHR5cGUge1xuXHRCZXR3ZWVuU2VsZWN0ZWRWYWx1ZXMsXG5cdENvZGVMaXN0VHlwZSxcblx0RWFzeUZpbHRlclByb3BlcnR5TWV0YWRhdGEsXG5cdFRva2VuRGVmaW5pdGlvbixcblx0VG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb24sXG5cdFRva2VuVHlwZSxcblx0VmFsdWVIZWxwQmV0d2VlblNlbGVjdGVkVmFsdWVzLFxuXHRWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25cbn0gZnJvbSBcIi4vRWFzeUZpbHRlckJhckNvbnRhaW5lclwiO1xuXG50eXBlIGNvZGVMaXN0VHlwZSA9IFByb3BlcnR5TWV0YWRhdGFbXCJjb2RlTGlzdFwiXTtcbnR5cGUgZmluYWxDb2RlTGlzdFR5cGUgPSB7IHZhbHVlOiBQcmltaXRpdmVUeXBlOyBkZXNjcmlwdGlvbj86IHN0cmluZyB9W107XG5jb25zdCByZXNvdXJjZUJ1bmRsZSA9IExpYi5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb250cm9sc1wiKSE7XG5jb25zdCBkYXRlVGltZU9mZnNldCA9IG5ldyBEYXRlVGltZU9mZnNldCgpO1xuXG5mdW5jdGlvbiBhcmVJdGVtc1NhbWUoXG5cdGFycjE6IHJlYWRvbmx5IFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10gfCBWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSxcblx0YXJyMjogcmVhZG9ubHkgVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSB8IFZhbHVlSGVscFNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdXG4pOiBib29sZWFuIHtcblx0aWYgKGFycjEubGVuZ3RoICE9PSBhcnIyLmxlbmd0aCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHQvLyBDb21wYXJlIGVsZW1lbnRzIG9mIGJvdGggYXJyYXlzXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYXJyMS5sZW5ndGg7IGkrKykge1xuXHRcdGlmIChcblx0XHRcdGFycjFbaV0ub3BlcmF0b3IgIT09IGFycjJbaV0ub3BlcmF0b3IgfHxcblx0XHRcdCFhcnIxW2ldLnNlbGVjdGVkVmFsdWVzLmV2ZXJ5KFxuXHRcdFx0XHQodmFsdWUsIGluZGV4KSA9PlxuXHRcdFx0XHRcdHZhbHVlID09PSBhcnIyW2ldLnNlbGVjdGVkVmFsdWVzW2luZGV4XSB8fFxuXHRcdFx0XHRcdCh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcblx0XHRcdFx0XHRcdGRlZXBFcXVhbCgodmFsdWUgYXMgQ29kZUxpc3RUeXBlKS52YWx1ZSwgKGFycjJbaV0uc2VsZWN0ZWRWYWx1ZXNbaW5kZXhdIGFzIENvZGVMaXN0VHlwZSkudmFsdWUpICYmXG5cdFx0XHRcdFx0XHQodmFsdWUgYXMgQ29kZUxpc3RUeXBlKS5kZXNjcmlwdGlvbiA9PT0gKGFycjJbaV0uc2VsZWN0ZWRWYWx1ZXNbaW5kZXhdIGFzIENvZGVMaXN0VHlwZSkuZGVzY3JpcHRpb24pXG5cdFx0XHQpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB0cnVlOyAvLyBBcnJheXMgYXJlIHRoZSBzYW1lXG59XG5cbmZ1bmN0aW9uIGFyZUFycmF5U2FtZShhcnIxOiByZWFkb25seSB1bmtub3duW10sIGFycjI6IHJlYWRvbmx5IHVua25vd25bXSk6IGJvb2xlYW4ge1xuXHRpZiAoYXJyMS5sZW5ndGggIT09IGFycjIubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdC8vIENvbXBhcmUgZWxlbWVudHMgb2YgYm90aCBhcnJheXNcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcnIxLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKGFycjFbaV0gIT09IGFycjJbaV0pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHRydWU7IC8vIEFycmF5cyBhcmUgdGhlIHNhbWVcbn1cblxuYXN5bmMgZnVuY3Rpb24gYXJlQ29kZUxpc3RzU2FtZShhcnIxOiBjb2RlTGlzdFR5cGUsIGFycjI6IGNvZGVMaXN0VHlwZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRjb25zdCBhcnJOZXcxOiBmaW5hbENvZGVMaXN0VHlwZSB8IHVuZGVmaW5lZCA9IGF3YWl0IGdldENvZGVMaXN0QXJyYXkoYXJyMSk7XG5cdGNvbnN0IGFyck5ldzI6IGZpbmFsQ29kZUxpc3RUeXBlIHwgdW5kZWZpbmVkID0gYXdhaXQgZ2V0Q29kZUxpc3RBcnJheShhcnIyKTtcblx0Y29uc3QgZGVzY3JpcHRpb25OZXcxID0gYXJyTmV3MT8ubWFwKChkYXRhKSA9PiBkYXRhLmRlc2NyaXB0aW9uKTtcblx0Y29uc3QgZGVzY3JpcHRpb25OZXcyID0gYXJyTmV3Mj8ubWFwKChkYXRhKSA9PiBkYXRhLmRlc2NyaXB0aW9uKTtcblxuXHRjb25zdCB2YWx1ZTEgPSBhcnJOZXcxPy5tYXAoKGRhdGEpID0+IGRhdGEudmFsdWUpO1xuXHRjb25zdCB2YWx1ZTIgPSBhcnJOZXcyPy5tYXAoKGRhdGEpID0+IGRhdGEudmFsdWUpO1xuXHRpZiAoIWRlc2NyaXB0aW9uTmV3MSB8fCAhZGVzY3JpcHRpb25OZXcyKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiBhcmVBcnJheVNhbWUoZGVzY3JpcHRpb25OZXcxLCBkZXNjcmlwdGlvbk5ldzIpICYmIGFyZUFycmF5U2FtZSh2YWx1ZTEgYXMgUHJpbWl0aXZlVHlwZSwgdmFsdWUyIGFzIFByaW1pdGl2ZVR5cGUpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRDb2RlTGlzdEFycmF5KGFycjogY29kZUxpc3RUeXBlKTogUHJvbWlzZTxmaW5hbENvZGVMaXN0VHlwZSB8IHVuZGVmaW5lZD4ge1xuXHRpZiAodHlwZW9mIGFyciA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0cmV0dXJuIGFycigpO1xuXHR9XG5cdHJldHVybiBhcnI7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnREYXRlVG9TdHJpbmcodmFsdWU6IERhdGUsIHRva2VuVHlwZTogVG9rZW5UeXBlLCBpc0RhdGVUaW1lT2Zmc2V0OiBib29sZWFuKTogc3RyaW5nIHtcblx0bGV0IGZvcm1hdHRlZERhdGVUaW1lID0gXCJcIjtcblx0aWYgKGlzRGF0ZVRpbWVPZmZzZXQpIHtcblx0XHRyZXR1cm4gZGF0ZVRpbWVPZmZzZXQuZm9ybWF0VmFsdWUodmFsdWUsIFwic3RyaW5nXCIpIGFzIHN0cmluZztcblx0fVxuXHRzd2l0Y2ggKHRva2VuVHlwZSkge1xuXHRcdGNhc2UgXCJDYWxlbmRhclwiOlxuXHRcdFx0Zm9ybWF0dGVkRGF0ZVRpbWUgPSBEYXRlRm9ybWF0LmdldERhdGVJbnN0YW5jZSgpLmZvcm1hdCh2YWx1ZSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiVGltZVwiOlxuXHRcdFx0Zm9ybWF0dGVkRGF0ZVRpbWUgPSBEYXRlRm9ybWF0LmdldFRpbWVJbnN0YW5jZSgpLmZvcm1hdCh2YWx1ZSk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdH1cblx0cmV0dXJuIGZvcm1hdHRlZERhdGVUaW1lO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgb3BlcmF0b3IgYW5kIHZhbHVlLlxuICogQHBhcmFtIG9wZXJhdG9yIFRoZSBvcGVyYXRvciB0byByZXByZXNlbnRcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmVwcmVzZW50XG4gKiBAcGFyYW0gdG9rZW5UeXBlIFRoZSB0b2tlbidzIHR5cGVcbiAqIEBwYXJhbSBpc0RhdGVUaW1lT2Zmc2V0IENoZWNrcyBpZiB0aGUgZGF0YSB0eXBlIGlzIG9mIERhdGVUaW1lT2Zmc2V0XG4gKiBAcmV0dXJucyBUaGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvcGVyYXRvciBhbmQgdmFsdWVcbiAqL1xuZnVuY3Rpb24gbWFwT3BlcmF0b3IoXG5cdG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvcixcblx0dmFsdWU6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBEYXRlLFxuXHR0b2tlblR5cGU6IFRva2VuVHlwZSxcblx0aXNEYXRlVGltZU9mZnNldDogYm9vbGVhblxuKTogc3RyaW5nIHtcblx0bGV0IG5ld1ZhbHVlOiBudW1iZXIgfCBzdHJpbmcgPSBcIlwiO1xuXHRpZiAodHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuXHRcdG5ld1ZhbHVlID0gY29udmVydEJvb2xUb1N0cmluZyh2YWx1ZSk7XG5cdH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG5cdFx0bmV3VmFsdWUgPSBjb252ZXJ0RGF0ZVRvU3RyaW5nKHZhbHVlLCB0b2tlblR5cGUsIGlzRGF0ZVRpbWVPZmZzZXQpO1xuXHR9IGVsc2Uge1xuXHRcdG5ld1ZhbHVlID0gdmFsdWU7XG5cdH1cblxuXHRzd2l0Y2ggKG9wZXJhdG9yKSB7XG5cdFx0Y2FzZSBGaWx0ZXJPcGVyYXRvci5HVDpcblx0XHRcdHJldHVybiBgPiAke25ld1ZhbHVlfWA7XG5cdFx0Y2FzZSBGaWx0ZXJPcGVyYXRvci5MVDpcblx0XHRcdHJldHVybiBgPCAke25ld1ZhbHVlfWA7XG5cdFx0Y2FzZSBGaWx0ZXJPcGVyYXRvci5HRTpcblx0XHRcdHJldHVybiBgPj0gJHtuZXdWYWx1ZX1gO1xuXHRcdGNhc2UgRmlsdGVyT3BlcmF0b3IuTEU6XG5cdFx0XHRyZXR1cm4gYDw9ICR7bmV3VmFsdWV9YDtcblx0XHRjYXNlIEZpbHRlck9wZXJhdG9yLkVROlxuXHRcdFx0cmV0dXJuIGAke25ld1ZhbHVlfWA7XG5cdFx0Y2FzZSBGaWx0ZXJPcGVyYXRvci5Db250YWluczpcblx0XHRcdHJldHVybiBgKiR7bmV3VmFsdWV9KmA7XG5cdFx0Y2FzZSBGaWx0ZXJPcGVyYXRvci5FbmRzV2l0aDpcblx0XHRcdHJldHVybiBgKiR7bmV3VmFsdWV9YDtcblx0XHRjYXNlIEZpbHRlck9wZXJhdG9yLlN0YXJ0c1dpdGg6XG5cdFx0XHRyZXR1cm4gYCR7bmV3VmFsdWV9KmA7XG5cdFx0Y2FzZSBGaWx0ZXJPcGVyYXRvci5ORTpcblx0XHRcdHJldHVybiBgIT0oJHtuZXdWYWx1ZX0pYDtcblx0XHRjYXNlIEZpbHRlck9wZXJhdG9yLk5vdENvbnRhaW5zOlxuXHRcdFx0cmV0dXJuIGAhKCoke25ld1ZhbHVlfSopYDtcblx0XHRjYXNlIEZpbHRlck9wZXJhdG9yLk5vdEVuZHNXaXRoOlxuXHRcdFx0cmV0dXJuIGAhKCoke25ld1ZhbHVlfSlgO1xuXHRcdGNhc2UgRmlsdGVyT3BlcmF0b3IuTm90U3RhcnRzV2l0aDpcblx0XHRcdHJldHVybiBgISgke25ld1ZhbHVlfSopYDtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIG5ld1ZhbHVlPy50b1N0cmluZygpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIG1hcE9wZXJhdG9yRm9yVmFsdWVIZWxwKG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvciwgdmFsdWU6IENvZGVMaXN0VHlwZSwgdG9rZW5UeXBlOiBUb2tlblR5cGUsIGlzRGF0ZVRpbWVPZmZzZXQ6IGJvb2xlYW4pOiBzdHJpbmcge1xuXHRyZXR1cm4gbWFwT3BlcmF0b3Iob3BlcmF0b3IsIHZhbHVlLmRlc2NyaXB0aW9uLCB0b2tlblR5cGUsIGlzRGF0ZVRpbWVPZmZzZXQpO1xufVxuXG5mdW5jdGlvbiBtYXBPcGVyYXRvckZvckJldHdlZW5PcGVyYXRvcihcblx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLFxuXHR2YWx1ZXM6IEJldHdlZW5TZWxlY3RlZFZhbHVlcyB8IFZhbHVlSGVscEJldHdlZW5TZWxlY3RlZFZhbHVlcyxcblx0dG9rZW5UeXBlOiBUb2tlblR5cGUsXG5cdGlzRGF0ZVRpbWVPZmZzZXQ6IGJvb2xlYW5cbik6IHN0cmluZyB7XG5cdGxldCBuZXdWYWx1ZTE6IHN0cmluZyB8IG51bWJlciB8IERhdGUgPSBcIlwiO1xuXHRsZXQgbmV3VmFsdWUyOiBzdHJpbmcgfCBudW1iZXIgfCBEYXRlID0gXCJcIjtcblx0aWYgKHR5cGVvZiB2YWx1ZXNbMF0gPT09IFwiYm9vbGVhblwiKSB7XG5cdFx0bmV3VmFsdWUxID0gY29udmVydEJvb2xUb1N0cmluZyh2YWx1ZXNbMF0pO1xuXHR9IGVsc2UgaWYgKHZhbHVlc1swXSBpbnN0YW5jZW9mIERhdGUpIHtcblx0XHRuZXdWYWx1ZTEgPSBjb252ZXJ0RGF0ZVRvU3RyaW5nKHZhbHVlc1swXSwgdG9rZW5UeXBlLCBpc0RhdGVUaW1lT2Zmc2V0KTtcblx0fSBlbHNlIGlmICh0eXBlb2YgdmFsdWVzWzBdID09PSBcIm9iamVjdFwiKSB7XG5cdFx0bmV3VmFsdWUxID0gdmFsdWVzWzBdLmRlc2NyaXB0aW9uIGFzIHN0cmluZztcblx0fSBlbHNlIHtcblx0XHRuZXdWYWx1ZTEgPSB2YWx1ZXNbMF07XG5cdH1cblxuXHRpZiAodHlwZW9mIHZhbHVlc1sxXSA9PT0gXCJib29sZWFuXCIpIHtcblx0XHRuZXdWYWx1ZTIgPSBjb252ZXJ0Qm9vbFRvU3RyaW5nKHZhbHVlc1sxXSk7XG5cdH0gZWxzZSBpZiAodmFsdWVzWzFdIGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdG5ld1ZhbHVlMiA9IGNvbnZlcnREYXRlVG9TdHJpbmcodmFsdWVzWzFdLCB0b2tlblR5cGUsIGlzRGF0ZVRpbWVPZmZzZXQpO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZXNbMF0gPT09IFwib2JqZWN0XCIpIHtcblx0XHRuZXdWYWx1ZTIgPSB2YWx1ZXNbMV0uZGVzY3JpcHRpb24gYXMgc3RyaW5nO1xuXHR9IGVsc2Uge1xuXHRcdG5ld1ZhbHVlMiA9IHZhbHVlc1sxXTtcblx0fVxuXHRpZiAob3BlcmF0b3IgPT09IEZpbHRlck9wZXJhdG9yLkJUKSB7XG5cdFx0cmV0dXJuIGAke25ld1ZhbHVlMX0uLi4ke25ld1ZhbHVlMn1gO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBgISgke25ld1ZhbHVlMX0uLi4ke25ld1ZhbHVlMn0pYDtcblx0fVxufVxuXG5mdW5jdGlvbiBpc0JldHdlZW5TZWxlY3RlZFZhbHVlcyhvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IpOiBib29sZWFuIHtcblx0cmV0dXJuIG9wZXJhdG9yID09PSBGaWx0ZXJPcGVyYXRvci5CVCB8fCBvcGVyYXRvciA9PT0gRmlsdGVyT3BlcmF0b3IuTkI7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRCb29sVG9TdHJpbmcodmFsdWU6IGJvb2xlYW4pOiBzdHJpbmcge1xuXHRyZXR1cm4gdmFsdWVcblx0XHQ/IHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1NFTEVDVEVEX1ZBTFVFU19UUlVFXCIpXG5cdFx0OiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9TRUxFQ1RFRF9WQUxVRVNfRkFMU0VcIik7XG59XG5cbi8vVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhlIGZpbHRlciBpcyBub3QgYSB2YWxpZCBcIlNpbmdsZVJhbmdlXCIgKGUuZy4sIHdyb25nIG9wZXJhdG9yIG9yIHRvbyBtYW55IHZhbHVlcyksIGFuZCBmYWxzZSBpZiBpdCBpcyB2YWxpZC5cbmZ1bmN0aW9uIGlzSW52YWxpZFNpbmdsZVJhbmdlKGZpbHRlclZhbHVlOiB7IG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvcjsgdmFsdWVzOiAoc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZSB8IGJvb2xlYW4pW10gfSk6IGJvb2xlYW4ge1xuXHRjb25zdCBhbGxvd2VkID0gW0ZpbHRlck9wZXJhdG9yLkVRLCBGaWx0ZXJPcGVyYXRvci5MRSwgRmlsdGVyT3BlcmF0b3IuTFQsIEZpbHRlck9wZXJhdG9yLkdFLCBGaWx0ZXJPcGVyYXRvci5HVCwgRmlsdGVyT3BlcmF0b3IuQlRdO1xuXG5cdC8vIFx0ZmlsdGVyVmFsdWUub3BlcmF0b3IgIT09IEZpbHRlck9wZXJhdG9yLkJUIGVuc3VyZXMgQlQgaXMgYWx3YXlzIHZhbGlkLlxuXHQvLyAhYWxsb3dlZC5pbmNsdWRlcygpIGJsb2NrcyB1bnN1cHBvcnRlZCBvcGVyYXRvcnMuXG5cdC8vIGZpbHRlclZhbHVlLnZhbHVlcy5sZW5ndGggPj0gMiBibG9ja3MgbXVsdGlwbGUgdmFsdWVzIGZvciBzaW5nbGUtcmFuZ2UgZmlsdGVycy5cblx0Ly8gVG9nZXRoZXIsIHRoaXMgcmV0dXJucyB0cnVlIHdoZW4gdGhlIGZpbHRlciBpcyBub3QgYSB2YWxpZCBzaW5nbGUtcmFuZ2UuXG5cdHJldHVybiBmaWx0ZXJWYWx1ZS5vcGVyYXRvciAhPT0gRmlsdGVyT3BlcmF0b3IuQlQgJiYgKCFhbGxvd2VkLmluY2x1ZGVzKGZpbHRlclZhbHVlLm9wZXJhdG9yKSB8fCBmaWx0ZXJWYWx1ZS52YWx1ZXMubGVuZ3RoID49IDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXREYXRhKFxuXHR0b2tlbnM6IFRva2VuRGVmaW5pdGlvbltdLFxuXHRmaWx0ZXJWYWx1ZXM6IEVhc3lGaWx0ZXJSZXN1bHRbXCJmaWx0ZXJcIl0sXG5cdGZpbHRlckJhck1ldGFkYXRhOiBFYXN5RmlsdGVyUHJvcGVydHlNZXRhZGF0YVtdLFxuXHRzZXRNZXNzYWdlU3RyaXBGb3JWYWxpZGF0ZWRGaWx0ZXJzOiAobXNnOiBzdHJpbmcpID0+IHZvaWRcbik6IHZvaWQge1xuXHRpZiAoZmlsdGVyVmFsdWVzKSB7XG5cdFx0Y29uc3QgdmlzaXRlZE1hcEZvck1hbmRhdG9yeVRva2VuczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcblx0XHRjb25zdCBub25GaWx0ZXJhYmxlVG9rZW5MYWJlbHM6IHN0cmluZ1tdID0gW107XG5cdFx0Y29uc3Qgc2luZ2xlUmFuZ2VUb2tlbkxhYmVsczogc3RyaW5nW10gPSBbXTtcblx0XHRjb25zdCBoaWRkZW5GaWx0ZXJUb2tlbkxhYmVsczogc3RyaW5nW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgZmlsdGVyVmFsdWUgb2YgZmlsdGVyVmFsdWVzKSB7XG5cdFx0XHRjb25zdCBmaWx0ZXJDcml0ZXJpYSA9IGZpbHRlckJhck1ldGFkYXRhLmZpbmQoKGZpZWxkKSA9PiBmaWVsZC5uYW1lID09PSBmaWx0ZXJWYWx1ZS5uYW1lKTtcblx0XHRcdGlmIChmaWx0ZXJDcml0ZXJpYSkge1xuXHRcdFx0XHQvLyBPbmx5IGJsb2NrIGlmIGZpbHRlcmFibGUgaXMgZmFsc2Vcblx0XHRcdFx0aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmaWx0ZXJDcml0ZXJpYSwgXCJmaWx0ZXJhYmxlXCIpICYmICFmaWx0ZXJDcml0ZXJpYT8uZmlsdGVyYWJsZSkge1xuXHRcdFx0XHRcdG5vbkZpbHRlcmFibGVUb2tlbkxhYmVscy5wdXNoKGZpbHRlckNyaXRlcmlhLmxhYmVsIHx8IGZpbHRlckNyaXRlcmlhLm5hbWUpO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIE9ubHkgYmxvY2sgaWYgaGlkZGVuRmlsdGVyIGlzIHRydWVcblx0XHRcdFx0aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmaWx0ZXJDcml0ZXJpYSwgXCJoaWRkZW5GaWx0ZXJcIikgJiYgZmlsdGVyQ3JpdGVyaWE/LmhpZGRlbkZpbHRlcikge1xuXHRcdFx0XHRcdGhpZGRlbkZpbHRlclRva2VuTGFiZWxzLnB1c2goZmlsdGVyQ3JpdGVyaWEubGFiZWwgfHwgZmlsdGVyQ3JpdGVyaWEubmFtZSk7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gT25seSBhcHBseSBTaW5nbGVSYW5nZSBsb2dpYyBpZiBmaWx0ZXJSZXN0cmljdGlvbiBpcyBzZXQgdG8gU2luZ2xlUmFuZ2Vcblx0XHRcdFx0aWYgKGZpbHRlckNyaXRlcmlhPy5maWx0ZXJSZXN0cmljdGlvbiA9PT0gXCJTaW5nbGVSYW5nZVwiICYmIGlzSW52YWxpZFNpbmdsZVJhbmdlKGZpbHRlclZhbHVlKSkge1xuXHRcdFx0XHRcdHNpbmdsZVJhbmdlVG9rZW5MYWJlbHMucHVzaChmaWx0ZXJDcml0ZXJpYS5sYWJlbCB8fCBmaWx0ZXJDcml0ZXJpYS5uYW1lKTtcblx0XHRcdFx0XHRmaWx0ZXJWYWx1ZS52YWx1ZXMgPSBbXTsgLy8gUmVzZXQgdmFsdWVzIHRvIGF2b2lkIGFkZGluZyBpbnZhbGlkIHRva2VuIHZhbHVlc1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgeyB0eXBlIH0gPSBmaWx0ZXJDcml0ZXJpYTtcblx0XHRcdFx0Y29uc3QgdG9rZW5JbmRleCA9IHRva2Vucy5maW5kSW5kZXgoKHRva2VuKSA9PiB0b2tlbi5rZXkgPT09IGZpbHRlclZhbHVlLm5hbWUpO1xuXHRcdFx0XHRjb25zdCB7IG9wZXJhdG9yLCB2YWx1ZXMgfSA9IGZpbHRlclZhbHVlO1xuXHRcdFx0XHRsZXQga2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb247XG5cdFx0XHRcdGlmIChFYXN5RmlsdGVyVXRpbHMuaXNCZXR3ZWVuU2VsZWN0ZWRWYWx1ZXMob3BlcmF0b3IpKSB7XG5cdFx0XHRcdFx0a2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcyA9IHtcblx0XHRcdFx0XHRcdG9wZXJhdG9yLFxuXHRcdFx0XHRcdFx0c2VsZWN0ZWRWYWx1ZXM6IHZhbHVlcyBhcyBCZXR3ZWVuU2VsZWN0ZWRWYWx1ZXNcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMgPSB7XG5cdFx0XHRcdFx0XHRvcGVyYXRvcjogb3BlcmF0b3IgYXMgRXhjbHVkZTxGaWx0ZXJPcGVyYXRvciwgRmlsdGVyT3BlcmF0b3IuQlQgfCBGaWx0ZXJPcGVyYXRvci5OQj4sXG5cdFx0XHRcdFx0XHRzZWxlY3RlZFZhbHVlczogdmFsdWVzIGFzIHN0cmluZ1tdIHwgRGF0ZVtdIHwgbnVtYmVyW10gfCBib29sZWFuW11cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0b2tlbkluZGV4ID09PSAtMSkge1xuXHRcdFx0XHRcdC8vIEFkZCBuZXcgdG9rZW4gaWYgaXQgZG9lc24ndCBleGlzdFxuXHRcdFx0XHRcdGNvbnN0IG5ld1Rva2VuOiBUb2tlbkRlZmluaXRpb24gPSB7XG5cdFx0XHRcdFx0XHRrZXk6IGZpbHRlclZhbHVlLm5hbWUsXG5cdFx0XHRcdFx0XHRsYWJlbDogZmlsdGVyQ3JpdGVyaWEubGFiZWwgYXMgc3RyaW5nLFxuXHRcdFx0XHRcdFx0a2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogW2tleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXNdLFxuXHRcdFx0XHRcdFx0dHlwZTogdHlwZSBhcyBFeGNsdWRlPFRva2VuVHlwZSwgXCJWYWx1ZUhlbHBcIj4sXG5cdFx0XHRcdFx0XHRidXN5OiB0eXBlID09PSBcIlZhbHVlSGVscFwiID8gdHJ1ZSA6IGZhbHNlXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR0b2tlbnMucHVzaChuZXdUb2tlbik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gVXBkYXRlIGV4aXN0aW5nIHRva2VuXG5cdFx0XHRcdFx0Y29uc3QgY3VycmVudFRva2VuID0gdG9rZW5zW3Rva2VuSW5kZXhdO1xuXHRcdFx0XHRcdC8vSWYgaXRzIGRlZmF1bHQgdmFsdWUgLCBvdmVycmlkZSBpdFxuXHRcdFx0XHRcdGlmICgoY3VycmVudFRva2VuLmlzUmVxdWlyZWQgPz8gZmFsc2UpICYmICF2aXNpdGVkTWFwRm9yTWFuZGF0b3J5VG9rZW5zW2N1cnJlbnRUb2tlbi5rZXldKSB7XG5cdFx0XHRcdFx0XHRjdXJyZW50VG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcyA9IFtrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzXTtcblx0XHRcdFx0XHRcdHZpc2l0ZWRNYXBGb3JNYW5kYXRvcnlUb2tlbnNbY3VycmVudFRva2VuLmtleV0gPSB0cnVlO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQoY3VycmVudFRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMgYXMgVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSkucHVzaChrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKG5vbkZpbHRlcmFibGVUb2tlbkxhYmVscy5sZW5ndGggPiAwIHx8IHNpbmdsZVJhbmdlVG9rZW5MYWJlbHMubGVuZ3RoID4gMCB8fCBoaWRkZW5GaWx0ZXJUb2tlbkxhYmVscy5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBtZXNzYWdlczogc3RyaW5nW10gPSBbXTtcblx0XHRcdGlmIChub25GaWx0ZXJhYmxlVG9rZW5MYWJlbHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb25zdCBub25GaWx0ZXJhYmxlVG9rZW5MYWJlbCA9IGA8c3Ryb25nPiR7bm9uRmlsdGVyYWJsZVRva2VuTGFiZWxzLmpvaW4oXCIsIFwiKX08L3N0cm9uZz5gO1xuXHRcdFx0XHRtZXNzYWdlcy5wdXNoKHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX05PTl9GSUxURVJBQkxFXCIsIFtub25GaWx0ZXJhYmxlVG9rZW5MYWJlbF0pKTtcblx0XHRcdH1cblx0XHRcdGlmIChoaWRkZW5GaWx0ZXJUb2tlbkxhYmVscy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbnN0IGxhYmVsID0gYDxzdHJvbmc+JHtoaWRkZW5GaWx0ZXJUb2tlbkxhYmVscy5qb2luKFwiLCBcIil9PC9zdHJvbmc+YDtcblx0XHRcdFx0bWVzc2FnZXMucHVzaChyZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9ISURERU5fRklMVEVSXCIsIFtsYWJlbF0pKTtcblx0XHRcdH1cblx0XHRcdGlmIChzaW5nbGVSYW5nZVRva2VuTGFiZWxzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Y29uc3QgbGFiZWwgPSBgPHN0cm9uZz4ke3NpbmdsZVJhbmdlVG9rZW5MYWJlbHMuam9pbihcIiwgXCIpfTwvc3Ryb25nPmA7XG5cdFx0XHRcdG1lc3NhZ2VzLnB1c2gocmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfU0lOR0xFX1JBTkdFXCIsIFtsYWJlbF0pKTtcblx0XHRcdH1cblx0XHRcdHNldE1lc3NhZ2VTdHJpcEZvclZhbGlkYXRlZEZpbHRlcnMobWVzc2FnZXMuam9pbihcIjxicj5cIikpO1xuXHRcdH1cblx0fVxufVxuXG5jb25zdCBFYXN5RmlsdGVyVXRpbHMgPSB7XG5cdGFyZUl0ZW1zU2FtZSxcblx0YXJlQ29kZUxpc3RzU2FtZSxcblx0Z2V0Q29kZUxpc3RBcnJheSxcblx0YXJlQXJyYXlTYW1lLFxuXHRtYXBPcGVyYXRvcixcblx0bWFwT3BlcmF0b3JGb3JCZXR3ZWVuT3BlcmF0b3IsXG5cdGlzQmV0d2VlblNlbGVjdGVkVmFsdWVzLFxuXHRmb3JtYXREYXRhLFxuXHRtYXBPcGVyYXRvckZvclZhbHVlSGVscFxufTtcblxuZXhwb3J0IGRlZmF1bHQgRWFzeUZpbHRlclV0aWxzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0VBb0JBLE1BQU1BLGNBQWMsR0FBR0MsR0FBRyxDQUFDQyxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBRTtFQUNuRSxNQUFNQyxjQUFjLEdBQUcsSUFBSUMsY0FBYyxDQUFDLENBQUM7RUFFM0MsU0FBU0MsWUFBWUEsQ0FDcEJDLElBQW9GLEVBQ3BGQyxJQUFvRixFQUMxRTtJQUNWLElBQUlELElBQUksQ0FBQ0UsTUFBTSxLQUFLRCxJQUFJLENBQUNDLE1BQU0sRUFBRTtNQUNoQyxPQUFPLEtBQUs7SUFDYjtJQUNBO0lBQ0EsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdILElBQUksQ0FBQ0UsTUFBTSxFQUFFQyxDQUFDLEVBQUUsRUFBRTtNQUNyQyxJQUNDSCxJQUFJLENBQUNHLENBQUMsQ0FBQyxDQUFDQyxRQUFRLEtBQUtILElBQUksQ0FBQ0UsQ0FBQyxDQUFDLENBQUNDLFFBQVEsSUFDckMsQ0FBQ0osSUFB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
306
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXNvdXJjZUJ1bmRsZSIsIkxpYiIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZGF0ZVRpbWVPZmZzZXQiLCJEYXRlVGltZU9mZnNldCIsImFyZUl0ZW1zU2FtZSIsImFycjEiLCJhcnIyIiwibGVuZ3RoIiwiaSIsIm9wZXJhdG9yIiwic2VsZWN0ZWRWYWx1ZXMiLCJldmVyeSIsInZhbHVlIiwiaW5kZXgiLCJkZWVwRXF1YWwiLCJkZXNjcmlwdGlvbiIsImFyZUFycmF5U2FtZSIsImFyZUNvZGVMaXN0c1NhbWUiLCJhcnJOZXcxIiwiZ2V0Q29kZUxpc3RBcnJheSIsImFyck5ldzIiLCJkZXNjcmlwdGlvbk5ldzEiLCJtYXAiLCJkYXRhIiwiZGVzY3JpcHRpb25OZXcyIiwidmFsdWUxIiwidmFsdWUyIiwiYXJyIiwiY29udmVydERhdGVUb1N0cmluZyIsInRva2VuVHlwZSIsImlzRGF0ZVRpbWVPZmZzZXQiLCJmb3JtYXR0ZWREYXRlVGltZSIsImZvcm1hdFZhbHVlIiwiRGF0ZUZvcm1hdCIsImdldERhdGVJbnN0YW5jZSIsImZvcm1hdCIsImdldFRpbWVJbnN0YW5jZSIsIm1hcE9wZXJhdG9yIiwibmV3VmFsdWUiLCJjb252ZXJ0Qm9vbFRvU3RyaW5nIiwiRGF0ZSIsIkZpbHRlck9wZXJhdG9yIiwiR1QiLCJMVCIsIkdFIiwiTEUiLCJFUSIsIkNvbnRhaW5zIiwiRW5kc1dpdGgiLCJTdGFydHNXaXRoIiwiTkUiLCJOb3RDb250YWlucyIsIk5vdEVuZHNXaXRoIiwiTm90U3RhcnRzV2l0aCIsInRvU3RyaW5nIiwibWFwT3BlcmF0b3JGb3JWYWx1ZUhlbHAiLCJtYXBPcGVyYXRvckZvckJldHdlZW5PcGVyYXRvciIsInZhbHVlcyIsIm5ld1ZhbHVlMSIsIm5ld1ZhbHVlMiIsIkJUIiwiaXNCZXR3ZWVuU2VsZWN0ZWRWYWx1ZXMiLCJOQiIsImdldFRleHQiLCJoYW5kbGVTaW5nbGVSYW5nZUZpbHRlciIsImZpbHRlckNyaXRlcmlhIiwiZmlsdGVyVmFsdWUiLCJzaW5nbGVSYW5nZVRva2VuTGFiZWxzIiwic2luZ2xlUmFuZ2VVc2FnZSIsImZpbHRlclJlc3RyaWN0aW9uIiwiaXNJbnZhbGlkIiwiaXNJbnZhbGlkU2luZ2xlUmFuZ2UiLCJuYW1lIiwibGFiZWwiLCJpbmNsdWRlcyIsInB1c2giLCJ0eXBlIiwic2luZ2xlVmFsdWVPcHMiLCJyYW5nZU9wcyIsIm9wIiwidmFsQ291bnQiLCJmb3JtYXREYXRhIiwidG9rZW5zIiwiZmlsdGVyVmFsdWVzIiwiZmlsdGVyQmFyTWV0YWRhdGEiLCJzZXRNZXNzYWdlU3RyaXBGb3JWYWxpZGF0ZWRGaWx0ZXJzIiwidmlzaXRlZE1hcEZvck1hbmRhdG9yeVRva2VucyIsIm5vbkZpbHRlcmFibGVUb2tlbkxhYmVscyIsImhpZGRlbkZpbHRlclRva2VuTGFiZWxzIiwiZmluZCIsImZpZWxkIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZmlsdGVyYWJsZSIsImhpZGRlbkZpbHRlciIsInRva2VuSW5kZXgiLCJmaW5kSW5kZXgiLCJ0b2tlbiIsImtleSIsImtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMiLCJFYXN5RmlsdGVyVXRpbHMiLCJuZXdUb2tlbiIsImJ1c3kiLCJjdXJyZW50VG9rZW4iLCJpc1JlcXVpcmVkIiwibWVzc2FnZXMiLCJub25GaWx0ZXJhYmxlVG9rZW5MYWJlbCIsImpvaW4iXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbInV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJpbWl0aXZlVHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9FZG1cIjtcbmltcG9ydCBkZWVwRXF1YWwgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcEVxdWFsXCI7XG5pbXBvcnQgTGliIGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCBEYXRlRm9ybWF0IGZyb20gXCJzYXAvdWkvY29yZS9mb3JtYXQvRGF0ZUZvcm1hdFwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcbmltcG9ydCBEYXRlVGltZU9mZnNldCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3R5cGUvRGF0ZVRpbWVPZmZzZXRcIjtcbmltcG9ydCB0eXBlIHsgRWFzeUZpbHRlclJlc3VsdCwgUHJvcGVydHlNZXRhZGF0YSB9IGZyb20gXCJ1eC9lbmcvZmlvcmlhaS9yZXVzZS9lYXN5ZmlsdGVyL0Vhc3lGaWx0ZXJcIjtcbmltcG9ydCB0eXBlIHtcblx0QmV0d2VlblNlbGVjdGVkVmFsdWVzLFxuXHRDb2RlTGlzdFR5cGUsXG5cdEVhc3lGaWx0ZXJQcm9wZXJ0eU1ldGFkYXRhLFxuXHRUb2tlbkRlZmluaXRpb24sXG5cdFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uLFxuXHRUb2tlblR5cGUsXG5cdFZhbHVlSGVscEJldHdlZW5TZWxlY3RlZFZhbHVlcyxcblx0VmFsdWVIZWxwU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uXG59IGZyb20gXCIuL0Vhc3lGaWx0ZXJCYXJDb250YWluZXJcIjtcblxudHlwZSBjb2RlTGlzdFR5cGUgPSBQcm9wZXJ0eU1ldGFkYXRhW1wiY29kZUxpc3RcIl07XG50eXBlIGZpbmFsQ29kZUxpc3RUeXBlID0geyB2YWx1ZTogUHJpbWl0aXZlVHlwZTsgZGVzY3JpcHRpb24/OiBzdHJpbmcgfVtdO1xuY29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWIuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29udHJvbHNcIikhO1xuY29uc3QgZGF0ZVRpbWVPZmZzZXQgPSBuZXcgRGF0ZVRpbWVPZmZzZXQoKTtcblxuZnVuY3Rpb24gYXJlSXRlbXNTYW1lKFxuXHRhcnIxOiByZWFkb25seSBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdIHwgVmFsdWVIZWxwU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10sXG5cdGFycjI6IHJlYWRvbmx5IFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10gfCBWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXVxuKTogYm9vbGVhbiB7XG5cdGlmIChhcnIxLmxlbmd0aCAhPT0gYXJyMi5sZW5ndGgpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0Ly8gQ29tcGFyZSBlbGVtZW50cyBvZiBib3RoIGFycmF5c1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGFycjEubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAoXG5cdFx0XHRhcnIxW2ldLm9wZXJhdG9yICE9PSBhcnIyW2ldLm9wZXJhdG9yIHx8XG5cdFx0XHQhYXJyMVtpXS5zZWxlY3RlZFZhbHVlcy5ldmVyeShcblx0XHRcdFx0KHZhbHVlLCBpbmRleCkgPT5cblx0XHRcdFx0XHR2YWx1ZSA9PT0gYXJyMltpXS5zZWxlY3RlZFZhbHVlc1tpbmRleF0gfHxcblx0XHRcdFx0XHQodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG5cdFx0XHRcdFx0XHRkZWVwRXF1YWwoKHZhbHVlIGFzIENvZGVMaXN0VHlwZSkudmFsdWUsIChhcnIyW2ldLnNlbGVjdGVkVmFsdWVzW2luZGV4XSBhcyBDb2RlTGlzdFR5cGUpLnZhbHVlKSAmJlxuXHRcdFx0XHRcdFx0KHZhbHVlIGFzIENvZGVMaXN0VHlwZSkuZGVzY3JpcHRpb24gPT09IChhcnIyW2ldLnNlbGVjdGVkVmFsdWVzW2luZGV4XSBhcyBDb2RlTGlzdFR5cGUpLmRlc2NyaXB0aW9uKVxuXHRcdFx0KVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdHJ1ZTsgLy8gQXJyYXlzIGFyZSB0aGUgc2FtZVxufVxuXG5mdW5jdGlvbiBhcmVBcnJheVNhbWUoYXJyMTogcmVhZG9ubHkgdW5rbm93bltdLCBhcnIyOiByZWFkb25seSB1bmtub3duW10pOiBib29sZWFuIHtcblx0aWYgKGFycjEubGVuZ3RoICE9PSBhcnIyLmxlbmd0aCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHQvLyBDb21wYXJlIGVsZW1lbnRzIG9mIGJvdGggYXJyYXlzXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYXJyMS5sZW5ndGg7IGkrKykge1xuXHRcdGlmIChhcnIxW2ldICE9PSBhcnIyW2ldKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB0cnVlOyAvLyBBcnJheXMgYXJlIHRoZSBzYW1lXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGFyZUNvZGVMaXN0c1NhbWUoYXJyMTogY29kZUxpc3RUeXBlLCBhcnIyOiBjb2RlTGlzdFR5cGUpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0Y29uc3QgYXJyTmV3MTogZmluYWxDb2RlTGlzdFR5cGUgfCB1bmRlZmluZWQgPSBhd2FpdCBnZXRDb2RlTGlzdEFycmF5KGFycjEpO1xuXHRjb25zdCBhcnJOZXcyOiBmaW5hbENvZGVMaXN0VHlwZSB8IHVuZGVmaW5lZCA9IGF3YWl0IGdldENvZGVMaXN0QXJyYXkoYXJyMik7XG5cdGNvbnN0IGRlc2NyaXB0aW9uTmV3MSA9IGFyck5ldzE/Lm1hcCgoZGF0YSkgPT4gZGF0YS5kZXNjcmlwdGlvbik7XG5cdGNvbnN0IGRlc2NyaXB0aW9uTmV3MiA9IGFyck5ldzI/Lm1hcCgoZGF0YSkgPT4gZGF0YS5kZXNjcmlwdGlvbik7XG5cblx0Y29uc3QgdmFsdWUxID0gYXJyTmV3MT8ubWFwKChkYXRhKSA9PiBkYXRhLnZhbHVlKTtcblx0Y29uc3QgdmFsdWUyID0gYXJyTmV3Mj8ubWFwKChkYXRhKSA9PiBkYXRhLnZhbHVlKTtcblx0aWYgKCFkZXNjcmlwdGlvbk5ldzEgfHwgIWRlc2NyaXB0aW9uTmV3Mikge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gYXJlQXJyYXlTYW1lKGRlc2NyaXB0aW9uTmV3MSwgZGVzY3JpcHRpb25OZXcyKSAmJiBhcmVBcnJheVNhbWUodmFsdWUxIGFzIFByaW1pdGl2ZVR5cGUsIHZhbHVlMiBhcyBQcmltaXRpdmVUeXBlKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0Q29kZUxpc3RBcnJheShhcnI6IGNvZGVMaXN0VHlwZSk6IFByb21pc2U8ZmluYWxDb2RlTGlzdFR5cGUgfCB1bmRlZmluZWQ+IHtcblx0aWYgKHR5cGVvZiBhcnIgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdHJldHVybiBhcnIoKTtcblx0fVxuXHRyZXR1cm4gYXJyO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0RGF0ZVRvU3RyaW5nKHZhbHVlOiBEYXRlLCB0b2tlblR5cGU6IFRva2VuVHlwZSwgaXNEYXRlVGltZU9mZnNldDogYm9vbGVhbik6IHN0cmluZyB7XG5cdGxldCBmb3JtYXR0ZWREYXRlVGltZSA9IFwiXCI7XG5cdGlmIChpc0RhdGVUaW1lT2Zmc2V0KSB7XG5cdFx0cmV0dXJuIGRhdGVUaW1lT2Zmc2V0LmZvcm1hdFZhbHVlKHZhbHVlLCBcInN0cmluZ1wiKSBhcyBzdHJpbmc7XG5cdH1cblx0c3dpdGNoICh0b2tlblR5cGUpIHtcblx0XHRjYXNlIFwiQ2FsZW5kYXJcIjpcblx0XHRcdGZvcm1hdHRlZERhdGVUaW1lID0gRGF0ZUZvcm1hdC5nZXREYXRlSW5zdGFuY2UoKS5mb3JtYXQodmFsdWUpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIlRpbWVcIjpcblx0XHRcdGZvcm1hdHRlZERhdGVUaW1lID0gRGF0ZUZvcm1hdC5nZXRUaW1lSW5zdGFuY2UoKS5mb3JtYXQodmFsdWUpO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGJyZWFrO1xuXHR9XG5cdHJldHVybiBmb3JtYXR0ZWREYXRlVGltZTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9wZXJhdG9yIGFuZCB2YWx1ZS5cbiAqIEBwYXJhbSBvcGVyYXRvciBUaGUgb3BlcmF0b3IgdG8gcmVwcmVzZW50XG4gKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHJlcHJlc2VudFxuICogQHBhcmFtIHRva2VuVHlwZSBUaGUgdG9rZW4ncyB0eXBlXG4gKiBAcGFyYW0gaXNEYXRlVGltZU9mZnNldCBDaGVja3MgaWYgdGhlIGRhdGEgdHlwZSBpcyBvZiBEYXRlVGltZU9mZnNldFxuICogQHJldHVybnMgVGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgb3BlcmF0b3IgYW5kIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIG1hcE9wZXJhdG9yKFxuXHRvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IsXG5cdHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgRGF0ZSxcblx0dG9rZW5UeXBlOiBUb2tlblR5cGUsXG5cdGlzRGF0ZVRpbWVPZmZzZXQ6IGJvb2xlYW5cbik6IHN0cmluZyB7XG5cdGxldCBuZXdWYWx1ZTogbnVtYmVyIHwgc3RyaW5nID0gXCJcIjtcblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcblx0XHRuZXdWYWx1ZSA9IGNvbnZlcnRCb29sVG9TdHJpbmcodmFsdWUpO1xuXHR9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdG5ld1ZhbHVlID0gY29udmVydERhdGVUb1N0cmluZyh2YWx1ZSwgdG9rZW5UeXBlLCBpc0RhdGVUaW1lT2Zmc2V0KTtcblx0fSBlbHNlIHtcblx0XHRuZXdWYWx1ZSA9IHZhbHVlO1xuXHR9XG5cblx0c3dpdGNoIChvcGVyYXRvcikge1xuXHRcdGNhc2UgRmlsdGVyT3BlcmF0b3IuR1Q6XG5cdFx0XHRyZXR1cm4gYD4gJHtuZXdWYWx1ZX1gO1xuXHRcdGNhc2UgRmlsdGVyT3BlcmF0b3IuTFQ6XG5cdFx0XHRyZXR1cm4gYDwgJHtuZXdWYWx1ZX1gO1xuXHRcdGNhc2UgRmlsdGVyT3BlcmF0b3IuR0U6XG5cdFx0XHRyZXR1cm4gYD49ICR7bmV3VmFsdWV9YDtcblx0XHRjYXNlIEZpbHRlck9wZXJhdG9yLkxFOlxuXHRcdFx0cmV0dXJuIGA8PSAke25ld1ZhbHVlfWA7XG5cdFx0Y2FzZSBGaWx0ZXJPcGVyYXRvci5FUTpcblx0XHRcdHJldHVybiBgJHtuZXdWYWx1ZX1gO1xuXHRcdGNhc2UgRmlsdGVyT3BlcmF0b3IuQ29udGFpbnM6XG5cdFx0XHRyZXR1cm4gYCoke25ld1ZhbHVlfSpgO1xuXHRcdGNhc2UgRmlsdGVyT3BlcmF0b3IuRW5kc1dpdGg6XG5cdFx0XHRyZXR1cm4gYCoke25ld1ZhbHVlfWA7XG5cdFx0Y2FzZSBGaWx0ZXJPcGVyYXRvci5TdGFydHNXaXRoOlxuXHRcdFx0cmV0dXJuIGAke25ld1ZhbHVlfSpgO1xuXHRcdGNhc2UgRmlsdGVyT3BlcmF0b3IuTkU6XG5cdFx0XHRyZXR1cm4gYCE9KCR7bmV3VmFsdWV9KWA7XG5cdFx0Y2FzZSBGaWx0ZXJPcGVyYXRvci5Ob3RDb250YWluczpcblx0XHRcdHJldHVybiBgISgqJHtuZXdWYWx1ZX0qKWA7XG5cdFx0Y2FzZSBGaWx0ZXJPcGVyYXRvci5Ob3RFbmRzV2l0aDpcblx0XHRcdHJldHVybiBgISgqJHtuZXdWYWx1ZX0pYDtcblx0XHRjYXNlIEZpbHRlck9wZXJhdG9yLk5vdFN0YXJ0c1dpdGg6XG5cdFx0XHRyZXR1cm4gYCEoJHtuZXdWYWx1ZX0qKWA7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBuZXdWYWx1ZT8udG9TdHJpbmcoKTtcblx0fVxufVxuXG5mdW5jdGlvbiBtYXBPcGVyYXRvckZvclZhbHVlSGVscChvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IsIHZhbHVlOiBDb2RlTGlzdFR5cGUsIHRva2VuVHlwZTogVG9rZW5UeXBlLCBpc0RhdGVUaW1lT2Zmc2V0OiBib29sZWFuKTogc3RyaW5nIHtcblx0cmV0dXJuIG1hcE9wZXJhdG9yKG9wZXJhdG9yLCB2YWx1ZS5kZXNjcmlwdGlvbiwgdG9rZW5UeXBlLCBpc0RhdGVUaW1lT2Zmc2V0KTtcbn1cblxuZnVuY3Rpb24gbWFwT3BlcmF0b3JGb3JCZXR3ZWVuT3BlcmF0b3IoXG5cdG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvcixcblx0dmFsdWVzOiBCZXR3ZWVuU2VsZWN0ZWRWYWx1ZXMgfCBWYWx1ZUhlbHBCZXR3ZWVuU2VsZWN0ZWRWYWx1ZXMsXG5cdHRva2VuVHlwZTogVG9rZW5UeXBlLFxuXHRpc0RhdGVUaW1lT2Zmc2V0OiBib29sZWFuXG4pOiBzdHJpbmcge1xuXHRsZXQgbmV3VmFsdWUxOiBzdHJpbmcgfCBudW1iZXIgfCBEYXRlID0gXCJcIjtcblx0bGV0IG5ld1ZhbHVlMjogc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZSA9IFwiXCI7XG5cdGlmICh0eXBlb2YgdmFsdWVzWzBdID09PSBcImJvb2xlYW5cIikge1xuXHRcdG5ld1ZhbHVlMSA9IGNvbnZlcnRCb29sVG9TdHJpbmcodmFsdWVzWzBdKTtcblx0fSBlbHNlIGlmICh2YWx1ZXNbMF0gaW5zdGFuY2VvZiBEYXRlKSB7XG5cdFx0bmV3VmFsdWUxID0gY29udmVydERhdGVUb1N0cmluZyh2YWx1ZXNbMF0sIHRva2VuVHlwZSwgaXNEYXRlVGltZU9mZnNldCk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlc1swXSA9PT0gXCJvYmplY3RcIikge1xuXHRcdG5ld1ZhbHVlMSA9IHZhbHVlc1swXS5kZXNjcmlwdGlvbiBhcyBzdHJpbmc7XG5cdH0gZWxzZSB7XG5cdFx0bmV3VmFsdWUxID0gdmFsdWVzWzBdO1xuXHR9XG5cblx0aWYgKHR5cGVvZiB2YWx1ZXNbMV0gPT09IFwiYm9vbGVhblwiKSB7XG5cdFx0bmV3VmFsdWUyID0gY29udmVydEJvb2xUb1N0cmluZyh2YWx1ZXNbMV0pO1xuXHR9IGVsc2UgaWYgKHZhbHVlc1sxXSBpbnN0YW5jZW9mIERhdGUpIHtcblx0XHRuZXdWYWx1ZTIgPSBjb252ZXJ0RGF0ZVRvU3RyaW5nKHZhbHVlc1sxXSwgdG9rZW5UeXBlLCBpc0RhdGVUaW1lT2Zmc2V0KTtcblx0fSBlbHNlIGlmICh0eXBlb2YgdmFsdWVzWzBdID09PSBcIm9iamVjdFwiKSB7XG5cdFx0bmV3VmFsdWUyID0gdmFsdWVzWzFdLmRlc2NyaXB0aW9uIGFzIHN0cmluZztcblx0fSBlbHNlIHtcblx0XHRuZXdWYWx1ZTIgPSB2YWx1ZXNbMV07XG5cdH1cblx0aWYgKG9wZXJhdG9yID09PSBGaWx0ZXJPcGVyYXRvci5CVCkge1xuXHRcdHJldHVybiBgJHtuZXdWYWx1ZTF9Li4uJHtuZXdWYWx1ZTJ9YDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gYCEoJHtuZXdWYWx1ZTF9Li4uJHtuZXdWYWx1ZTJ9KWA7XG5cdH1cbn1cblxuZnVuY3Rpb24gaXNCZXR3ZWVuU2VsZWN0ZWRWYWx1ZXMob3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yKTogYm9vbGVhbiB7XG5cdHJldHVybiBvcGVyYXRvciA9PT0gRmlsdGVyT3BlcmF0b3IuQlQgfHwgb3BlcmF0b3IgPT09IEZpbHRlck9wZXJhdG9yLk5CO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0Qm9vbFRvU3RyaW5nKHZhbHVlOiBib29sZWFuKTogc3RyaW5nIHtcblx0cmV0dXJuIHZhbHVlXG5cdFx0PyByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9TRUxFQ1RFRF9WQUxVRVNfVFJVRVwiKVxuXHRcdDogcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfU0VMRUNURURfVkFMVUVTX0ZBTFNFXCIpO1xufVxuXG4vKipcbiAqIEhhbmRsZXMgdGhlIHNpbmdsZSByYW5nZSB2YWxpZGF0aW9uIGFuZCB1cGRhdGVzIGZvciBhIGZpbHRlciB2YWx1ZS5cbiAqIEBwYXJhbSBmaWx0ZXJDcml0ZXJpYSBUaGUgbWV0YWRhdGEgZm9yIHRoZSBmaWx0ZXJcbiAqIEBwYXJhbSBmaWx0ZXJWYWx1ZSBUaGUgZmlsdGVyIHZhbHVlIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gc2luZ2xlUmFuZ2VUb2tlbkxhYmVscyBBcnJheSB0byBjb2xsZWN0IGxhYmVscyBvZiBpbnZhbGlkIHNpbmdsZSByYW5nZSBmaWx0ZXJzXG4gKiBAcGFyYW0gc2luZ2xlUmFuZ2VVc2FnZSBSZWNvcmQgdG8gdHJhY2sgdXNhZ2UgY291bnQgb2Ygc2luZ2xlIHJhbmdlIGZpbHRlcnNcbiAqIEByZXR1cm5zIFRydWUgaWYgcHJvY2Vzc2luZyBzaG91bGQgY29udGludWUsIGZhbHNlIGlmIGl0IHNob3VsZCBza2lwXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZVNpbmdsZVJhbmdlRmlsdGVyKFxuXHRmaWx0ZXJDcml0ZXJpYTogRWFzeUZpbHRlclByb3BlcnR5TWV0YWRhdGEsXG5cdGZpbHRlclZhbHVlOiBFYXN5RmlsdGVyUmVzdWx0W1wiZmlsdGVyXCJdWzBdLFxuXHRzaW5nbGVSYW5nZVRva2VuTGFiZWxzOiBzdHJpbmdbXSxcblx0c2luZ2xlUmFuZ2VVc2FnZTogUmVjb3JkPHN0cmluZywgbnVtYmVyPlxuKTogYm9vbGVhbiB7XG5cdGlmIChmaWx0ZXJDcml0ZXJpYT8uZmlsdGVyUmVzdHJpY3Rpb24gIT09IFwiU2luZ2xlUmFuZ2VcIikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Y29uc3QgaXNJbnZhbGlkID0gaXNJbnZhbGlkU2luZ2xlUmFuZ2UoZmlsdGVyVmFsdWUpIHx8IChzaW5nbGVSYW5nZVVzYWdlW2ZpbHRlclZhbHVlLm5hbWVdID8/IDApID4gMDtcblx0c2luZ2xlUmFuZ2VVc2FnZVtmaWx0ZXJWYWx1ZS5uYW1lXSA9IChzaW5nbGVSYW5nZVVzYWdlW2ZpbHRlclZhbHVlLm5hbWVdID8/IDApICsgMTtcblxuXHRpZiAoIWlzSW52YWxpZCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Y29uc3QgbGFiZWwgPSBmaWx0ZXJDcml0ZXJpYS5sYWJlbCB8fCBmaWx0ZXJDcml0ZXJpYS5uYW1lO1xuXHRpZiAoIXNpbmdsZVJhbmdlVG9rZW5MYWJlbHMuaW5jbHVkZXMobGFiZWwpKSB7XG5cdFx0c2luZ2xlUmFuZ2VUb2tlbkxhYmVscy5wdXNoKGxhYmVsKTtcblx0fVxuXG5cdGlmIChmaWx0ZXJDcml0ZXJpYS50eXBlID09PSBcIkNhbGVuZGFyXCIgfHwgZmlsdGVyQ3JpdGVyaWEudHlwZSA9PT0gXCJUaW1lXCIpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRmaWx0ZXJWYWx1ZS52YWx1ZXMgPSBbXTtcblx0cmV0dXJuIHRydWU7XG59XG5cbi8vIFZhbGlkYXRlcyBpZiBhIGZpbHRlciB2YWx1ZSB2aW9sYXRlcyB0aGUgU2luZ2xlUmFuZ2UgcmVzdHJpY3Rpb24uXG4vLyBSZXR1cm5zIHRydWUgaWYgaW52YWxpZCwgZmFsc2UgaWYgdmFsaWQuXG4vLyBSdWxlcyBmb3IgU2luZ2xlUmFuZ2U6XG4vLyAtIEFsbG93ZWQgb3BlcmF0b3JzOiBFUSwgTEUsIExULCBHRSwgR1QsIEJULCBOQlxuLy8gLSBTaW5nbGUtdmFsdWUgb3BlcmF0b3JzIChFUSwgTEUsIExULCBHRSwgR1QpOiBtdXN0IGhhdmUgZXhhY3RseSAxIHZhbHVlXG4vLyAtIFJhbmdlIG9wZXJhdG9ycyAoQlQsIE5CKTogbXVzdCBoYXZlIGV4YWN0bHkgMiB2YWx1ZXMgKGxvd2VyICYgdXBwZXIgYm91bmQpXG4vLyAtIE9ubHkgb25lIGNvbmRpdGlvbi90b2tlbiBpcyBhbGxvd2VkIHBlciBwcm9wZXJ0eSAoc2hvdWxkIGJlIGVuZm9yY2VkIG91dHNpZGUpXG4vL1xuZnVuY3Rpb24gaXNJbnZhbGlkU2luZ2xlUmFuZ2UoZmlsdGVyVmFsdWU6IHsgb3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yOyB2YWx1ZXM6IChzdHJpbmcgfCBudW1iZXIgfCBEYXRlIHwgYm9vbGVhbilbXSB9KTogYm9vbGVhbiB7XG5cdGNvbnN0IHNpbmdsZVZhbHVlT3BzID0gW0ZpbHRlck9wZXJhdG9yLkVRLCBGaWx0ZXJPcGVyYXRvci5MRSwgRmlsdGVyT3BlcmF0b3IuTFQsIEZpbHRlck9wZXJhdG9yLkdFLCBGaWx0ZXJPcGVyYXRvci5HVF07XG5cdGNvbnN0IHJhbmdlT3BzID0gW0ZpbHRlck9wZXJhdG9yLkJULCBGaWx0ZXJPcGVyYXRvci5OQl07XG5cblx0Y29uc3Qgb3AgPSBmaWx0ZXJWYWx1ZS5vcGVyYXRvcjtcblx0Y29uc3QgdmFsQ291bnQgPSBmaWx0ZXJWYWx1ZS52YWx1ZXM/Lmxlbmd0aCB8fCAwO1xuXG5cdC8vIFNpbmdsZS12YWx1ZSBvcGVyYXRvcnMg4oaSIG11c3QgaGF2ZSBleGFjdGx5IDEgdmFsdWVcblx0aWYgKHNpbmdsZVZhbHVlT3BzLmluY2x1ZGVzKG9wKSkge1xuXHRcdHJldHVybiB2YWxDb3VudCAhPT0gMTtcblx0fVxuXG5cdC8vIFJhbmdlIG9wZXJhdG9ycyAoQmV0d2VlbiAvIE5vdCBCZXR3ZWVuKSDihpIgbXVzdCBoYXZlIGV4YWN0bHkgMiB2YWx1ZXNcblx0aWYgKHJhbmdlT3BzLmluY2x1ZGVzKG9wKSkge1xuXHRcdHJldHVybiB2YWxDb3VudCAhPT0gMjtcblx0fVxuXG5cdC8vIEFueXRoaW5nIGVsc2UgaXMgbm90IGFsbG93ZWQgZm9yIFNpbmdsZVJhbmdlXG5cdHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBmb3JtYXREYXRhKFxuXHR0b2tlbnM6IFRva2VuRGVmaW5pdGlvbltdLFxuXHRmaWx0ZXJWYWx1ZXM6IEVhc3lGaWx0ZXJSZXN1bHRbXCJmaWx0ZXJcIl0sXG5cdGZpbHRlckJhck1ldGFkYXRhOiBFYXN5RmlsdGVyUHJvcGVydHlNZXRhZGF0YVtdLFxuXHRzZXRNZXNzYWdlU3RyaXBGb3JWYWxpZGF0ZWRGaWx0ZXJzOiAobXNnOiBzdHJpbmcpID0+IHZvaWRcbik6IHZvaWQge1xuXHRpZiAoZmlsdGVyVmFsdWVzKSB7XG5cdFx0Y29uc3QgdmlzaXRlZE1hcEZvck1hbmRhdG9yeVRva2VuczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcblx0XHRjb25zdCBub25GaWx0ZXJhYmxlVG9rZW5MYWJlbHM6IHN0cmluZ1tdID0gW107XG5cdFx0Y29uc3Qgc2luZ2xlUmFuZ2VUb2tlbkxhYmVsczogc3RyaW5nW10gPSBbXTtcblx0XHRjb25zdCBoaWRkZW5GaWx0ZXJUb2tlbkxhYmVsczogc3RyaW5nW10gPSBbXTtcblx0XHRjb25zdCBzaW5nbGVSYW5nZVVzYWdlOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGZpbHRlclZhbHVlIG9mIGZpbHRlclZhbHVlcykge1xuXHRcdFx0Y29uc3QgZmlsdGVyQ3JpdGVyaWEgPSBmaWx0ZXJCYXJNZXRhZGF0YS5maW5kKChmaWVsZCkgPT4gZmllbGQubmFtZSA9PT0gZmlsdGVyVmFsdWUubmFtZSk7XG5cdFx0XHRpZiAoZmlsdGVyQ3JpdGVyaWEpIHtcblx0XHRcdFx0Ly8gT25seSBibG9jayBpZiBmaWx0ZXJhYmxlIGlzIGZhbHNlXG5cdFx0XHRcdGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZmlsdGVyQ3JpdGVyaWEsIFwiZmlsdGVyYWJsZVwiKSAmJiAhZmlsdGVyQ3JpdGVyaWE/LmZpbHRlcmFibGUpIHtcblx0XHRcdFx0XHRub25GaWx0ZXJhYmxlVG9rZW5MYWJlbHMucHVzaChmaWx0ZXJDcml0ZXJpYS5sYWJlbCB8fCBmaWx0ZXJDcml0ZXJpYS5uYW1lKTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBPbmx5IGJsb2NrIGlmIGhpZGRlbkZpbHRlciBpcyB0cnVlXG5cdFx0XHRcdGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZmlsdGVyQ3JpdGVyaWEsIFwiaGlkZGVuRmlsdGVyXCIpICYmIGZpbHRlckNyaXRlcmlhPy5oaWRkZW5GaWx0ZXIpIHtcblx0XHRcdFx0XHRoaWRkZW5GaWx0ZXJUb2tlbkxhYmVscy5wdXNoKGZpbHRlckNyaXRlcmlhLmxhYmVsIHx8IGZpbHRlckNyaXRlcmlhLm5hbWUpO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIEhhbmRsZXMgdGhlIHNpbmdsZSByYW5nZSB2YWxpZGF0aW9uIGFuZCB1cGRhdGVzIGZvciBhIGZpbHRlciB2YWx1ZVxuXHRcdFx0XHRpZiAoIWhhbmRsZVNpbmdsZVJhbmdlRmlsdGVyKGZpbHRlckNyaXRlcmlhLCBmaWx0ZXJWYWx1ZSwgc2luZ2xlUmFuZ2VUb2tlbkxhYmVscywgc2luZ2xlUmFuZ2VVc2FnZSkpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IHsgdHlwZSB9ID0gZmlsdGVyQ3JpdGVyaWE7XG5cdFx0XHRcdGNvbnN0IHRva2VuSW5kZXggPSB0b2tlbnMuZmluZEluZGV4KCh0b2tlbikgPT4gdG9rZW4ua2V5ID09PSBmaWx0ZXJWYWx1ZS5uYW1lKTtcblx0XHRcdFx0Y29uc3QgeyBvcGVyYXRvciwgdmFsdWVzIH0gPSBmaWx0ZXJWYWx1ZTtcblx0XHRcdFx0bGV0IGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXM6IFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uO1xuXHRcdFx0XHRpZiAoRWFzeUZpbHRlclV0aWxzLmlzQmV0d2VlblNlbGVjdGVkVmFsdWVzKG9wZXJhdG9yKSkge1xuXHRcdFx0XHRcdGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMgPSB7XG5cdFx0XHRcdFx0XHRvcGVyYXRvcixcblx0XHRcdFx0XHRcdHNlbGVjdGVkVmFsdWVzOiB2YWx1ZXMgYXMgQmV0d2VlblNlbGVjdGVkVmFsdWVzXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzID0ge1xuXHRcdFx0XHRcdFx0b3BlcmF0b3I6IG9wZXJhdG9yIGFzIEV4Y2x1ZGU8RmlsdGVyT3BlcmF0b3IsIEZpbHRlck9wZXJhdG9yLkJUIHwgRmlsdGVyT3BlcmF0b3IuTkI+LFxuXHRcdFx0XHRcdFx0c2VsZWN0ZWRWYWx1ZXM6IHZhbHVlcyBhcyBzdHJpbmdbXSB8IERhdGVbXSB8IG51bWJlcltdIHwgYm9vbGVhbltdXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodG9rZW5JbmRleCA9PT0gLTEpIHtcblx0XHRcdFx0XHQvLyBBZGQgbmV3IHRva2VuIGlmIGl0IGRvZXNuJ3QgZXhpc3Rcblx0XHRcdFx0XHRjb25zdCBuZXdUb2tlbjogVG9rZW5EZWZpbml0aW9uID0ge1xuXHRcdFx0XHRcdFx0a2V5OiBmaWx0ZXJWYWx1ZS5uYW1lLFxuXHRcdFx0XHRcdFx0bGFiZWw6IGZpbHRlckNyaXRlcmlhLmxhYmVsIGFzIHN0cmluZyxcblx0XHRcdFx0XHRcdGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXM6IFtrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzXSxcblx0XHRcdFx0XHRcdHR5cGU6IHR5cGUgYXMgRXhjbHVkZTxUb2tlblR5cGUsIFwiVmFsdWVIZWxwXCI+LFxuXHRcdFx0XHRcdFx0YnVzeTogdHlwZSA9PT0gXCJWYWx1ZUhlbHBcIiA/IHRydWUgOiBmYWxzZVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0dG9rZW5zLnB1c2gobmV3VG9rZW4pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIFVwZGF0ZSBleGlzdGluZyB0b2tlblxuXHRcdFx0XHRcdGNvbnN0IGN1cnJlbnRUb2tlbiA9IHRva2Vuc1t0b2tlbkluZGV4XTtcblx0XHRcdFx0XHQvL0lmIGl0cyBkZWZhdWx0IHZhbHVlICwgb3ZlcnJpZGUgaXRcblx0XHRcdFx0XHRpZiAoKGN1cnJlbnRUb2tlbi5pc1JlcXVpcmVkID8/IGZhbHNlKSAmJiAhdmlzaXRlZE1hcEZvck1hbmRhdG9yeVRva2Vuc1tjdXJyZW50VG9rZW4ua2V5XSkge1xuXHRcdFx0XHRcdFx0Y3VycmVudFRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMgPSBba2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlc107XG5cdFx0XHRcdFx0XHR2aXNpdGVkTWFwRm9yTWFuZGF0b3J5VG9rZW5zW2N1cnJlbnRUb2tlbi5rZXldID0gdHJ1ZTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0KGN1cnJlbnRUb2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzIGFzIFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10pLnB1c2goa2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChub25GaWx0ZXJhYmxlVG9rZW5MYWJlbHMubGVuZ3RoID4gMCB8fCBzaW5nbGVSYW5nZVRva2VuTGFiZWxzLmxlbmd0aCA+IDAgfHwgaGlkZGVuRmlsdGVyVG9rZW5MYWJlbHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgbWVzc2FnZXM6IHN0cmluZ1tdID0gW107XG5cdFx0XHRpZiAobm9uRmlsdGVyYWJsZVRva2VuTGFiZWxzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Y29uc3Qgbm9uRmlsdGVyYWJsZVRva2VuTGFiZWwgPSBgPHN0cm9uZz4ke25vbkZpbHRlcmFibGVUb2tlbkxhYmVscy5qb2luKFwiLCBcIil9PC9zdHJvbmc+YDtcblx0XHRcdFx0bWVzc2FnZXMucHVzaChyZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9OT05fRklMVEVSQUJMRVwiLCBbbm9uRmlsdGVyYWJsZVRva2VuTGFiZWxdKSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoaGlkZGVuRmlsdGVyVG9rZW5MYWJlbHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb25zdCBsYWJlbCA9IGA8c3Ryb25nPiR7aGlkZGVuRmlsdGVyVG9rZW5MYWJlbHMuam9pbihcIiwgXCIpfTwvc3Ryb25nPmA7XG5cdFx0XHRcdG1lc3NhZ2VzLnB1c2gocmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfSElEREVOX0ZJTFRFUlwiLCBbbGFiZWxdKSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoc2luZ2xlUmFuZ2VUb2tlbkxhYmVscy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbnN0IGxhYmVsID0gYDxzdHJvbmc+JHtzaW5nbGVSYW5nZVRva2VuTGFiZWxzLmpvaW4oXCIsIFwiKX08L3N0cm9uZz5gO1xuXHRcdFx0XHRtZXNzYWdlcy5wdXNoKHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1NJTkdMRV9SQU5HRVwiLCBbbGFiZWxdKSk7XG5cdFx0XHR9XG5cdFx0XHRzZXRNZXNzYWdlU3RyaXBGb3JWYWxpZGF0ZWRGaWx0ZXJzKG1lc3NhZ2VzLmpvaW4oXCI8YnI+XCIpKTtcblx0XHR9XG5cdH1cbn1cblxuY29uc3QgRWFzeUZpbHRlclV0aWxzID0ge1xuXHRhcmVJdGVtc1NhbWUsXG5cdGFyZUNvZGVMaXN0c1NhbWUsXG5cdGdldENvZGVMaXN0QXJyYXksXG5cdGFyZUFycmF5U2FtZSxcblx0bWFwT3BlcmF0b3IsXG5cdG1hcE9wZXJhdG9yRm9yQmV0d2Vlbk9wZXJhdG9yLFxuXHRpc0JldHdlZW5TZWxlY3RlZFZhbHVlcyxcblx0Zm9ybWF0RGF0YSxcblx0bWFwT3BlcmF0b3JGb3JWYWx1ZUhlbHBcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEVhc3lGaWx0ZXJVdGlscztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztFQW9CQSxNQUFNQSxjQUFjLEdBQUdDLEdBQUcsQ0FBQ0Msb0JBQW9CLENBQUMsaUJBQWlCLENBQUU7RUFDbkUsTUFBTUMsY0FBYyxHQUFHLElBQUlDLGNBQWMsQ0FBQyxDQUFDO0VBRTNDLFNBQVNDLFlBQVlBLENBQ3BCQyxJQUFvRixFQUNwRkMsSUFBb0YsRUFDMUU7SUFDVixJQUFJRCxJQUFJLENBQUNFLE1BQU0sS0FBS0QsSUFBSSxDQUFDQyxNQUFNLEVBQUU7TUFDaEMsT0FBTyxLQUFLO0lBQ2I7SUFDQTtJQUNBLEtBQUssSUFBSUMsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHSCxJQUFJLENBQUNFLE1BQU0sRUFBRUMsQ0FBQyxFQUFFLEVBQUU7TUFDckMsSUFDQ0gsSUFBSSxDQUFDRyxDQUFDLENBQUMsQ0FBQ0MsUUFBUSxLQUFLSCxJQUFJLENBQUNFLENBQUMsQ0FBQyxDQUFDQyxRQUFRLElBQ3JDLENBQUNKLElBQUksQ0FBQ0csQ0FBQyxDQUFDLENBQUNFLGNBQWMsQ0FBQ0MsS0FBSyxDQUM1QixDQUFDQyxLQUFLLEVBQUVDLEtBQUssS0FDWkQsS0FBSyxLQUFLTixJQUFJLENBQUNFLENBQUMsQ0FBQyxDQUFDRSxjQUFjLENBQUNHLEtBQUssQ0FBQyxJQUN0QyxPQUFPRCxLQUFLLEtBQUss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
@@ -199,15 +199,71 @@ function convertBoolToString(value: boolean): string {
199
199
  : resourceBundle.getText("M_EASY_FILTER_SELECTED_VALUES_FALSE");
200
200
  }
201
201
 
202
- //This function returns true if the filter is not a valid "SingleRange" (e.g., wrong operator or too many values), and false if it is valid.
202
+ /**
203
+ * Handles the single range validation and updates for a filter value.
204
+ * @param filterCriteria The metadata for the filter
205
+ * @param filterValue The filter value to validate
206
+ * @param singleRangeTokenLabels Array to collect labels of invalid single range filters
207
+ * @param singleRangeUsage Record to track usage count of single range filters
208
+ * @returns True if processing should continue, false if it should skip
209
+ */
210
+ function handleSingleRangeFilter(
211
+ filterCriteria: EasyFilterPropertyMetadata,
212
+ filterValue: EasyFilterResult["filter"][0],
213
+ singleRangeTokenLabels: string[],
214
+ singleRangeUsage: Record<string, number>
215
+ ): boolean {
216
+ if (filterCriteria?.filterRestriction !== "SingleRange") {
217
+ return true;
218
+ }
219
+
220
+ const isInvalid = isInvalidSingleRange(filterValue) || (singleRangeUsage[filterValue.name] ?? 0) > 0;
221
+ singleRangeUsage[filterValue.name] = (singleRangeUsage[filterValue.name] ?? 0) + 1;
222
+
223
+ if (!isInvalid) {
224
+ return true;
225
+ }
226
+
227
+ const label = filterCriteria.label || filterCriteria.name;
228
+ if (!singleRangeTokenLabels.includes(label)) {
229
+ singleRangeTokenLabels.push(label);
230
+ }
231
+
232
+ if (filterCriteria.type === "Calendar" || filterCriteria.type === "Time") {
233
+ return false;
234
+ }
235
+
236
+ filterValue.values = [];
237
+ return true;
238
+ }
239
+
240
+ // Validates if a filter value violates the SingleRange restriction.
241
+ // Returns true if invalid, false if valid.
242
+ // Rules for SingleRange:
243
+ // - Allowed operators: EQ, LE, LT, GE, GT, BT, NB
244
+ // - Single-value operators (EQ, LE, LT, GE, GT): must have exactly 1 value
245
+ // - Range operators (BT, NB): must have exactly 2 values (lower & upper bound)
246
+ // - Only one condition/token is allowed per property (should be enforced outside)
247
+ //
203
248
  function isInvalidSingleRange(filterValue: { operator: FilterOperator; values: (string | number | Date | boolean)[] }): boolean {
204
- const allowed = [FilterOperator.EQ, FilterOperator.LE, FilterOperator.LT, FilterOperator.GE, FilterOperator.GT, FilterOperator.BT];
249
+ const singleValueOps = [FilterOperator.EQ, FilterOperator.LE, FilterOperator.LT, FilterOperator.GE, FilterOperator.GT];
250
+ const rangeOps = [FilterOperator.BT, FilterOperator.NB];
251
+
252
+ const op = filterValue.operator;
253
+ const valCount = filterValue.values?.length || 0;
205
254
 
206
- // filterValue.operator !== FilterOperator.BT ensures BT is always valid.
207
- // !allowed.includes() blocks unsupported operators.
208
- // filterValue.values.length >= 2 blocks multiple values for single-range filters.
209
- // Together, this returns true when the filter is not a valid single-range.
210
- return filterValue.operator !== FilterOperator.BT && (!allowed.includes(filterValue.operator) || filterValue.values.length >= 2);
255
+ // Single-value operators must have exactly 1 value
256
+ if (singleValueOps.includes(op)) {
257
+ return valCount !== 1;
258
+ }
259
+
260
+ // Range operators (Between / Not Between) → must have exactly 2 values
261
+ if (rangeOps.includes(op)) {
262
+ return valCount !== 2;
263
+ }
264
+
265
+ // Anything else is not allowed for SingleRange
266
+ return true;
211
267
  }
212
268
 
213
269
  function formatData(
@@ -221,6 +277,7 @@ function formatData(
221
277
  const nonFilterableTokenLabels: string[] = [];
222
278
  const singleRangeTokenLabels: string[] = [];
223
279
  const hiddenFilterTokenLabels: string[] = [];
280
+ const singleRangeUsage: Record<string, number> = {};
224
281
 
225
282
  for (const filterValue of filterValues) {
226
283
  const filterCriteria = filterBarMetadata.find((field) => field.name === filterValue.name);
@@ -235,10 +292,9 @@ function formatData(
235
292
  hiddenFilterTokenLabels.push(filterCriteria.label || filterCriteria.name);
236
293
  continue;
237
294
  }
238
- // Only apply SingleRange logic if filterRestriction is set to SingleRange
239
- if (filterCriteria?.filterRestriction === "SingleRange" && isInvalidSingleRange(filterValue)) {
240
- singleRangeTokenLabels.push(filterCriteria.label || filterCriteria.name);
241
- filterValue.values = []; // Reset values to avoid adding invalid token values
295
+ // Handles the single range validation and updates for a filter value
296
+ if (!handleSingleRangeFilter(filterCriteria, filterValue, singleRangeTokenLabels, singleRangeUsage)) {
297
+ continue;
242
298
  }
243
299
 
244
300
  const { type } = filterCriteria;
@@ -22,7 +22,7 @@ sap.ui.define(["sap/fe/base/library", "sap/fe/controls/shortcuts/ShortcutExplana
22
22
  controls: [],
23
23
  elements: [],
24
24
  // eslint-disable-next-line no-template-curly-in-string
25
- version: "1.141.0",
25
+ version: "1.142.0",
26
26
  noLibraryCSS: false
27
27
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
28
  });
@@ -62,15 +62,15 @@ M_EASY_FILTER_FILLED_STAR=Remove from Favorites
62
62
  # XMSG
63
63
  M_EASY_FILTER_EMPTY_START=Add to Favorites
64
64
  # XMSG: Text read out by the screenreader, telling users how to move to the list under the search field containing favorite queries and last used queries, if available
65
- T_EASY_FILTER_INPUT_TEXT_LINK_POPOVER_OPENED_ARIA=To move to the list of favorite queries and last used queries, press the Arrow Down key
65
+ T_EASY_FILTER_INPUT_TEXT_LINK_POPOVER_ARIA=To move to the list of favorite queries and last used queries, press the Arrow Down key
66
66
  # XMSG
67
67
  M_EASY_FILTER_SINGLE_VALUE_MESSAGE=Only one single value can be applied to the following: {0}
68
68
  # XMSG: We need to block the user from filtering on hidden, non-filterable or system-controlled properties, as doing so would conflict with the intended behavior of the app
69
- M_EASY_FILTER_NON_FILTERABLE=You can''t filter for the following property in this app: {0}
69
+ M_EASY_FILTER_NON_FILTERABLE=This specific app doesn''t support filtering on {0}.
70
70
  # XMSG: We need to block the user from filtering on hidden, non-filterable or system-controlled properties, as doing so would conflict with the intended behavior of the app
71
- M_EASY_FILTER_SINGLE_RANGE=Note that only one single condition can be applied to the following: {0}
71
+ M_EASY_FILTER_SINGLE_RANGE=Only one single condition can be applied to {0}.
72
72
  # XMSG: We need to block the user from filtering on hidden, non-filterable or system-controlled properties, as doing so would conflict with the intended behavior of the app
73
- M_EASY_FILTER_HIDDEN_FILTER=You can''t filter for the following property in this app: {0}
73
+ M_EASY_FILTER_HIDDEN_FILTER=This specific app doesn''t support filtering on {0}.
74
74
  # XTIT: Title in the shell user menu to open the shortcut dialog and the dialog title
75
75
  C_SHORTCUT_TITLE=Keyboard Shortcuts
76
76
  # XMSG,30: Placeholder message for the keyboard interaction input field
@@ -29,7 +29,7 @@ M_EASY_FILTER_POPOVER_CLOSE=\u0625\u063A\u0644\u0627\u0642
29
29
  M_EASY_FILTER_POPOVER_EMPTY_LAST_USED_TITLE=\u0644\u0627 \u062A\u0648\u062C\u062F \u0627\u0633\u062A\u0639\u0644\u0627\u0645\u0627\u062A \u0645\u0633\u062A\u062E\u062F\u0645\u0629 \u0645\u0624\u062E\u0631\u064B\u0627
30
30
  M_EASY_FILTER_FILLED_STAR=\u0625\u0632\u0627\u0644\u0629 \u0645\u0646 \u0627\u0644\u0645\u0641\u0636\u0644\u0629
31
31
  M_EASY_FILTER_EMPTY_START=\u0625\u0636\u0627\u0641\u0629 \u0625\u0644\u0649 \u0627\u0644\u0645\u0641\u0636\u0644\u0629
32
- T_EASY_FILTER_INPUT_TEXT_LINK_POPOVER_OPENED_ARIA=\u0644\u0644\u0627\u0646\u062A\u0642\u0627\u0644 \u0625\u0644\u0649 \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0627\u0633\u062A\u0639\u0644\u0627\u0645\u0627\u062A \u0627\u0644\u0645\u0641\u0636\u0644\u0629 \u0648\u0622\u062E\u0631 \u0627\u0633\u062A\u0639\u0644\u0627\u0645\u0627\u062A \u0645\u0633\u062A\u062E\u062F\u0645\u0629\u060C \u0627\u0636\u063A\u0637 \u0639\u0644\u0649 \u0627\u0644\u0645\u0641\u062A\u0627\u062D \u0633\u0647\u0645 \u0644\u0623\u0633\u0641\u0644
32
+ T_EASY_FILTER_INPUT_TEXT_LINK_POPOVER_ARIA=\u0644\u0644\u0627\u0646\u062A\u0642\u0627\u0644 \u0625\u0644\u0649 \u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0627\u0633\u062A\u0639\u0644\u0627\u0645\u0627\u062A \u0627\u0644\u0645\u0641\u0636\u0644\u0629 \u0648\u0622\u062E\u0631 \u0627\u0633\u062A\u0639\u0644\u0627\u0645\u0627\u062A \u0645\u0633\u062A\u062E\u062F\u0645\u0629\u060C \u0627\u0636\u063A\u0637 \u0639\u0644\u0649 \u0627\u0644\u0645\u0641\u062A\u0627\u062D \u0633\u0647\u0645 \u0644\u0623\u0633\u0641\u0644
33
33
  M_EASY_FILTER_SINGLE_VALUE_MESSAGE=\u064A\u0645\u0643\u0646 \u062A\u0637\u0628\u064A\u0642 \u0642\u064A\u0645\u0629 \u0648\u0627\u062D\u062F\u0629 \u0641\u0642\u0637 \u0639\u0644\u0649 \u0627\u0644\u062A\u0627\u0644\u064A\: {0}
34
34
  M_EASY_FILTER_NON_FILTERABLE=\u0644\u0627 \u064A\u0645\u0643\u0646\u0643 \u0627\u0644\u062A\u0635\u0641\u064A\u0629 \u0644\u0644\u062E\u0627\u0635\u064A\u0629 \u0627\u0644\u062A\u0627\u0644\u064A\u0629 \u0641\u064A \u0647\u0630\u0627 \u0627\u0644\u062A\u0637\u0628\u064A\u0642\: {0}
35
35
  M_EASY_FILTER_SINGLE_RANGE=\u0644\u0627\u062D\u0638 \u0623\u0646\u0647 \u0644\u0627 \u064A\u0645\u0643\u0646 \u062A\u0637\u0628\u064A\u0642 \u0633\u0648\u0649 \u0634\u0631\u0637 \u0648\u0627\u062D\u062F \u0639\u0644\u0649 \u0645\u0627 \u064A\u0644\u064A\: {0}
@@ -37,6 +37,12 @@ M_EASY_FILTER_HIDDEN_FILTER=\u0644\u0627 \u064A\u0645\u0643\u0646\u0643 \u0627\u
37
37
  C_SHORTCUT_TITLE=\u0627\u062E\u062A\u0635\u0627\u0631\u0627\u062A \u0644\u0648\u062D\u0629 \u0627\u0644\u0645\u0641\u0627\u062A\u064A\u062D
38
38
  C_SHORTCUT_PLACEHOLDER=\u0627\u0644\u0628\u062D\u062B \u0639\u0646 \u0627\u062E\u062A\u0635\u0627\u0631 \u0644\u0648\u062D\u0629 \u0645\u0641\u0627\u062A\u064A\u062D
39
39
  C_SHORTCUT_NODATA=\u062A\u0631\u0643\u064A\u0632 \u0639\u0644\u0649 \u062C\u0632\u0621 \u0645\u0646 \u0627\u0644\u0634\u0627\u0634\u0629 \u0644\u0644\u0627\u0637\u0644\u0627\u0639 \u0639\u0644\u0649 \u0627\u062E\u062A\u0635\u0627\u0631\u0627\u062A \u0644\u0648\u062D\u0629 \u0627\u0644\u0645\u0641\u0627\u062A\u064A\u062D
40
+
41
+ C_EASY_FILTER_THUMBS_UP=\u0625\u0628\u0647\u0627\u0645 \u0644\u0623\u0639\u0644\u0649 \u0644\u0633\u0647\u0648\u0644\u0629 \u0627\u0644\u062A\u0635\u0641\u064A\u0629
42
+
43
+ C_EASY_FILTER_THUMBS_DOWN=\u0625\u0628\u0647\u0627\u0645 \u0644\u0623\u0633\u0641\u0644 \u0644\u0633\u0647\u0648\u0644\u0629 \u0627\u0644\u062A\u0635\u0641\u064A\u0629
44
+
45
+ C_EASY_FILTER_FEEDBACK_SENT=\u062A\u0645 \u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u0645\u0644\u0627\u062D\u0638\u0627\u062A
40
46
  M_INLINE_EDIT_TOOLTIP_EDIT=\u062A\u062D\u0631\u064A\u0631
41
47
  M_INLINE_EDIT_TOOLTIP_SAVE=\u062D\u0641\u0638
42
48
  M_INLINE_EDIT_TOOLTIP_CANCEL=\u0625\u0644\u063A\u0627\u0621
@@ -29,7 +29,7 @@ M_EASY_FILTER_POPOVER_CLOSE=\u0417\u0430\u0442\u0432\u0430\u0440\u044F\u043D\u04
29
29
  M_EASY_FILTER_POPOVER_EMPTY_LAST_USED_TITLE=\u041D\u044F\u043C\u0430 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u043E \u0438\u0437\u043F\u043E\u043B\u0437\u0432\u0430\u043D\u0438 \u0437\u0430\u043F\u0438\u0442\u0432\u0430\u043D\u0438\u044F
30
30
  M_EASY_FILTER_FILLED_STAR=\u041F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043E\u0442 \u0444\u0430\u0432\u043E\u0440\u0438\u0442\u0438\u0442\u0435
31
31
  M_EASY_FILTER_EMPTY_START=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435 \u043A\u044A\u043C \u0444\u0430\u0432\u043E\u0440\u0438\u0442\u0438\u0442\u0435
32
- T_EASY_FILTER_INPUT_TEXT_LINK_POPOVER_OPENED_ARIA=\u0417\u0430 \u043F\u0440\u0435\u043C\u0438\u043D\u0430\u0432\u0430\u043D\u0435 \u043A\u044A\u043C \u0441\u043F\u0438\u0441\u044A\u043A\u0430 \u0441 \u043F\u0440\u0435\u0434\u043F\u043E\u0447\u0438\u0442\u0430\u043D\u0438 \u0438 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u043E \u0438\u0437\u043F\u043E\u043B\u0437\u0432\u0430\u043D\u0438 \u0437\u0430\u043F\u0438\u0442\u0432\u0430\u043D\u0438\u044F \u043D\u0430\u0442\u0438\u0441\u043D\u0435\u0442\u0435 \u043A\u043B\u0430\u0432\u0438\u0448\u0430 \u0441\u044A\u0441 \u0441\u0442\u0440\u0435\u043B\u043A\u0430 \u043D\u0430\u0434\u043E\u043B\u0443
32
+ T_EASY_FILTER_INPUT_TEXT_LINK_POPOVER_ARIA=\u0417\u0430 \u043F\u0440\u0435\u043C\u0438\u043D\u0430\u0432\u0430\u043D\u0435 \u043A\u044A\u043C \u0441\u043F\u0438\u0441\u044A\u043A\u0430 \u0441 \u043F\u0440\u0435\u0434\u043F\u043E\u0447\u0438\u0442\u0430\u043D\u0438 \u0438 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u043E \u0438\u0437\u043F\u043E\u043B\u0437\u0432\u0430\u043D\u0438 \u0437\u0430\u043F\u0438\u0442\u0432\u0430\u043D\u0438\u044F \u043D\u0430\u0442\u0438\u0441\u043D\u0435\u0442\u0435 \u043A\u043B\u0430\u0432\u0438\u0448\u0430 \u0441\u044A\u0441 \u0441\u0442\u0440\u0435\u043B\u043A\u0430 \u043D\u0430\u0434\u043E\u043B\u0443
33
33
  M_EASY_FILTER_SINGLE_VALUE_MESSAGE=\u0421\u0430\u043C\u043E \u0435\u0434\u043D\u0430 \u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442 \u043C\u043E\u0436\u0435 \u0434\u0430 \u0431\u044A\u0434\u0435 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0430 \u043A\u044A\u043C \u0441\u043B\u0435\u0434\u043D\u043E\u0442\u043E\: {0}
34
34
  M_EASY_FILTER_NON_FILTERABLE=\u0412 \u0442\u043E\u0432\u0430 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u043D\u0435 \u043C\u043E\u0436\u0435 \u0434\u0430 \u0441\u0435 \u0444\u0438\u043B\u0442\u0440\u0438\u0440\u0430 \u043F\u043E \u0441\u043B\u0435\u0434\u043D\u043E\u0442\u043E \u0441\u0432\u043E\u0439\u0441\u0442\u0432\u043E\: {0}
35
35
  M_EASY_FILTER_SINGLE_RANGE=\u0418\u043C\u0430\u0439\u0442\u0435 \u043F\u0440\u0435\u0434\u0432\u0438\u0434, \u0447\u0435 \u0441\u0430\u043C\u043E \u0435\u0434\u043D\u043E \u0443\u0441\u043B\u043E\u0432\u0438\u0435 \u043C\u043E\u0436\u0435 \u0434\u0430 \u0431\u044A\u0434\u0435 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u043E \u043A\u044A\u043C \u0441\u043B\u0435\u0434\u043D\u043E\u0442\u043E\: {0}
@@ -37,6 +37,12 @@ M_EASY_FILTER_HIDDEN_FILTER=\u0412 \u0442\u043E\u0432\u0430 \u043F\u0440\u0438\u
37
37
  C_SHORTCUT_TITLE=\u041A\u043B\u0430\u0432\u0438\u0448\u043D\u0438 \u043A\u043E\u043C\u0431\u0438\u043D\u0430\u0446\u0438\u0438
38
38
  C_SHORTCUT_PLACEHOLDER=\u0422\u044A\u0440\u0441\u0435\u043D\u0435 \u043D\u0430 \u043A\u043B\u0430\u0432\u0438\u0448\u043D\u0430 \u043A\u043E\u043C\u0431\u0438\u043D\u0430\u0446\u0438\u044F
39
39
  C_SHORTCUT_NODATA=\u0424\u043E\u043A\u0443\u0441\u0438\u0440\u0430\u0439\u0442\u0435 \u0447\u0430\u0441\u0442 \u043E\u0442 \u0435\u043A\u0440\u0430\u043D\u0430, \u0437\u0430 \u0434\u0430 \u0432\u0438\u0434\u0438\u0442\u0435 \u043A\u043B\u0430\u0432\u0438\u0448\u043D\u0438\u0442\u0435 \u043A\u043E\u043C\u0431\u0438\u043D\u0430\u0446\u0438\u0438
40
+
41
+ C_EASY_FILTER_THUMBS_UP=\u041F\u0430\u043B\u0435\u0446 \u043D\u0430\u0433\u043E\u0440\u0435 \u0437\u0430 easy filter
42
+
43
+ C_EASY_FILTER_THUMBS_DOWN=\u041F\u0430\u043B\u0435\u0446 \u043D\u0430\u0434\u043E\u043B\u0443 \u0437\u0430 easy filter
44
+
45
+ C_EASY_FILTER_FEEDBACK_SENT=\u041E\u0431\u0440\u0430\u0442\u043D\u0430\u0442\u0430 \u0432\u0440\u044A\u0437\u043A\u0430 \u0435 \u0438\u0437\u043F\u0440\u0430\u0442\u0435\u043D\u0430
40
46
  M_INLINE_EDIT_TOOLTIP_EDIT=\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u0430\u043D\u0435
41
47
  M_INLINE_EDIT_TOOLTIP_SAVE=\u0417\u0430\u043F\u0430\u0437\u0432\u0430\u043D\u0435
42
48
  M_INLINE_EDIT_TOOLTIP_CANCEL=\u041E\u0442\u043A\u0430\u0437
@@ -29,7 +29,7 @@ M_EASY_FILTER_POPOVER_CLOSE=Tancar
29
29
  M_EASY_FILTER_POPOVER_EMPTY_LAST_USED_TITLE=No hi ha \u00FAltimes consultes utilitzades
30
30
  M_EASY_FILTER_FILLED_STAR=Eliminar dels preferits
31
31
  M_EASY_FILTER_EMPTY_START=Afegir a preferits
32
- T_EASY_FILTER_INPUT_TEXT_LINK_POPOVER_OPENED_ARIA=Per a despla\u00E7ar a la llista de consultes preferides i \u00FAltimes consultes utilitzades, premeu la tecla Fletxa cap avall
32
+ T_EASY_FILTER_INPUT_TEXT_LINK_POPOVER_ARIA=Per a despla\u00E7ar a la llista de consultes preferides i \u00FAltimes consultes utilitzades, premeu la tecla Fletxa cap avall
33
33
  M_EASY_FILTER_SINGLE_VALUE_MESSAGE=Nom\u00E9s es pot aplicar un valor a l''element seg\u00FCent\: {0}
34
34
  M_EASY_FILTER_NON_FILTERABLE=No podeu filtrar per la propietat seg\u00FCent en aquesta aplicaci\u00F3\: {0}
35
35
  M_EASY_FILTER_SINGLE_RANGE=Tingueu en compte que nom\u00E9s es pot aplicar una condici\u00F3 a l''element seg\u00FCent\: {0}
@@ -37,6 +37,12 @@ M_EASY_FILTER_HIDDEN_FILTER=No podeu filtrar per la propietat seg\u00FCent en aq
37
37
  C_SHORTCUT_TITLE=Acc\u00E9s r\u00E0pid
38
38
  C_SHORTCUT_PLACEHOLDER=Cercar una drecera de teclat
39
39
  C_SHORTCUT_NODATA=Centreu-vos en una part de la pantalla per a veure les dreceres de teclat
40
+
41
+ C_EASY_FILTER_THUMBS_UP=Polzes amunt per al filtre f\u00E0cil
42
+
43
+ C_EASY_FILTER_THUMBS_DOWN=Polzes avall per al filtre f\u00E0cil
44
+
45
+ C_EASY_FILTER_FEEDBACK_SENT=Comentaris enviats
40
46
  M_INLINE_EDIT_TOOLTIP_EDIT=Editar
41
47
  M_INLINE_EDIT_TOOLTIP_SAVE=Desar
42
48
  M_INLINE_EDIT_TOOLTIP_CANCEL=Cancel\u00B7lar
@@ -29,7 +29,7 @@ M_EASY_FILTER_POPOVER_CLOSE=Zatvori
29
29
  M_EASY_FILTER_POPOVER_EMPTY_LAST_USED_TITLE=Nema posljednje kori\u0161\u0107enih upita
30
30
  M_EASY_FILTER_FILLED_STAR=Ukloni iz omiljenih
31
31
  M_EASY_FILTER_EMPTY_START=Dodaj u omiljene
32
- T_EASY_FILTER_INPUT_TEXT_LINK_POPOVER_OPENED_ARIA=Da pomjerite listu omiljenih upita i posljednje kori\u0161\u0107enih upita, pritisnite taster Strelica nadolje
32
+ T_EASY_FILTER_INPUT_TEXT_LINK_POPOVER_ARIA=Da pomjerite listu omiljenih upita i posljednje kori\u0161\u0107enih upita, pritisnite taster Strelica nadolje
33
33
  M_EASY_FILTER_SINGLE_VALUE_MESSAGE=Samo jedna vrijednost se mo\u017Ee primijeniti na sljede\u0107e\: {0}
34
34
  M_EASY_FILTER_NON_FILTERABLE=Ne mo\u017Eete filtrirati sljede\u0107e svojstvo u ovoj aplikaciji\: {0}
35
35
  M_EASY_FILTER_SINGLE_RANGE=Imajte u vidu da se samo jedan uslov mo\u017Ee primijeniti na sljede\u0107e\: {0}
@@ -37,6 +37,12 @@ M_EASY_FILTER_HIDDEN_FILTER=Ne mo\u017Eete filtrirati sljede\u0107e svojstvo u o
37
37
  C_SHORTCUT_TITLE=Pre\u010Dice na tastaturi
38
38
  C_SHORTCUT_PLACEHOLDER=Na\u0111i pre\u010Dicu na tastaturi
39
39
  C_SHORTCUT_NODATA=Fokusirajte se na odre\u0111eni dio ekrana da vidite pre\u010Dice na tastaturi
40
+
41
+ C_EASY_FILTER_THUMBS_UP=Pozitivna ocjena za lako filtriranje
42
+
43
+ C_EASY_FILTER_THUMBS_DOWN=Negativna ocjena za lako filtriranje
44
+
45
+ C_EASY_FILTER_FEEDBACK_SENT=Povratne informacije su poslate
40
46
  M_INLINE_EDIT_TOOLTIP_EDIT=Uredi
41
47
  M_INLINE_EDIT_TOOLTIP_SAVE=Sa\u010Duvaj
42
48
  M_INLINE_EDIT_TOOLTIP_CANCEL=Odustani
@@ -29,7 +29,7 @@ M_EASY_FILTER_POPOVER_CLOSE=Zav\u0159\u00EDt
29
29
  M_EASY_FILTER_POPOVER_EMPTY_LAST_USED_TITLE=Ne naposledy pou\u017Eit\u00E9 dotazy
30
30
  M_EASY_FILTER_FILLED_STAR=Odebrat z obl\u00EDben\u00FDch
31
31
  M_EASY_FILTER_EMPTY_START=P\u0159idat k obl\u00EDben\u00FDm
32
- T_EASY_FILTER_INPUT_TEXT_LINK_POPOVER_OPENED_ARIA=Pro p\u0159echod k seznamu obl\u00EDben\u00FDch dotaz\u016F a naposledy pou\u017Eit\u00FDch dotaz\u016F stiskn\u011Bte \u0161ipku dol\u016F
32
+ T_EASY_FILTER_INPUT_TEXT_LINK_POPOVER_ARIA=Pro p\u0159echod k seznamu obl\u00EDben\u00FDch dotaz\u016F a naposledy pou\u017Eit\u00FDch dotaz\u016F stiskn\u011Bte \u0161ipku dol\u016F
33
33
  M_EASY_FILTER_SINGLE_VALUE_MESSAGE=Jen jednu jednotlivou hodnotu lze pou\u017E\u00EDt pro toto\: {0}
34
34
  M_EASY_FILTER_NON_FILTERABLE=V t\u00E9to aplikaci nem\u016F\u017Eete filtrovat podle n\u00E1sleduj\u00EDc\u00ED vlastnosti\: {0}
35
35
  M_EASY_FILTER_SINGLE_RANGE=M\u011Bjte na z\u0159eteli, \u017Ee jen jednu jednotlivou podm\u00EDnku lze pou\u017E\u00EDt pro toto\: {0}
@@ -37,6 +37,12 @@ M_EASY_FILTER_HIDDEN_FILTER=V t\u00E9to aplikaci nem\u016F\u017Eete filtrovat po
37
37
  C_SHORTCUT_TITLE=Kl\u00E1vesov\u00E9 zkratky
38
38
  C_SHORTCUT_PLACEHOLDER=Najd\u011Bte kl\u00E1vesovou zkratku
39
39
  C_SHORTCUT_NODATA=Zam\u011B\u0159it se na \u010D\u00E1st obrazovky pro kl\u00E1vesov\u00E9 zkratky
40
+
41
+ C_EASY_FILTER_THUMBS_UP=Palce nahoru pro snadn\u00E9 vypln\u011Bn\u00ED
42
+
43
+ C_EASY_FILTER_THUMBS_DOWN=Palce dol\u016F pro snadn\u00FD filtr
44
+
45
+ C_EASY_FILTER_FEEDBACK_SENT=Zp\u011Btn\u00E1 vazba byla odesl\u00E1na
40
46
  M_INLINE_EDIT_TOOLTIP_EDIT=Upravit
41
47
  M_INLINE_EDIT_TOOLTIP_SAVE=Ulo\u017Eit
42
48
  M_INLINE_EDIT_TOOLTIP_CANCEL=Zru\u0161it
@@ -29,7 +29,7 @@ M_EASY_FILTER_POPOVER_CLOSE=Cau
29
29
  M_EASY_FILTER_POPOVER_EMPTY_LAST_USED_TITLE=Dim ymholiadau a ddefnyddiwyd ddiwethaf
30
30
  M_EASY_FILTER_FILLED_STAR=Tynnu o'r Ffefrynnau
31
31
  M_EASY_FILTER_EMPTY_START=Ychwanegu at y Ffefrynnau
32
- T_EASY_FILTER_INPUT_TEXT_LINK_POPOVER_OPENED_ARIA=Er mwyn symud i'r rhestr o ymholiadau ffefryn ac ymholiadau a ddefnyddiwyd ddiwethaf, pwyswch yr allwedd Saeth i Lawr
32
+ T_EASY_FILTER_INPUT_TEXT_LINK_POPOVER_ARIA=Er mwyn symud i'r rhestr o ymholiadau ffefryn ac ymholiadau a ddefnyddiwyd ddiwethaf, pwyswch yr allwedd Saeth i Lawr
33
33
  M_EASY_FILTER_SINGLE_VALUE_MESSAGE=Nodwch mai dim ond un gwerth all gael ei gymhwyso i''r canlynol\: {0}
34
34
  M_EASY_FILTER_NON_FILTERABLE=Allwch chi ddim hidlo ar gyfer y briodwedd ganlynol yn yr ap hwn\: {0}
35
35
  M_EASY_FILTER_SINGLE_RANGE=Nodwch mai dim ond un amod all gael ei gymhwyso i''r canlynol\: {0}
@@ -37,6 +37,12 @@ M_EASY_FILTER_HIDDEN_FILTER=Allwch chi ddim hidlo ar gyfer y briodwedd ganlynol
37
37
  C_SHORTCUT_TITLE=Bysellau Hwylus
38
38
  C_SHORTCUT_PLACEHOLDER=Dod o hyd i fysellau hwylus
39
39
  C_SHORTCUT_NODATA=Ffocyswch ar ran o'r sgrin i weld bysellau hwylus
40
+
41
+ C_EASY_FILTER_THUMBS_UP=Bawd i fyny am y hidlydd syml
42
+
43
+ C_EASY_FILTER_THUMBS_DOWN=Bawd i lawr am y hidlydd syml
44
+
45
+ C_EASY_FILTER_FEEDBACK_SENT=Adborth wedi'i anfon
40
46
  M_INLINE_EDIT_TOOLTIP_EDIT=Golygu
41
47
  M_INLINE_EDIT_TOOLTIP_SAVE=Cadw
42
48
  M_INLINE_EDIT_TOOLTIP_CANCEL=Canslo
@@ -29,7 +29,7 @@ M_EASY_FILTER_POPOVER_CLOSE=Luk
29
29
  M_EASY_FILTER_POPOVER_EMPTY_LAST_USED_TITLE=Ingen senest brugte foresp\u00F8rgsler
30
30
  M_EASY_FILTER_FILLED_STAR=Fjern fra foretrukne
31
31
  M_EASY_FILTER_EMPTY_START=F\u00F8j til foretrukne
32
- T_EASY_FILTER_INPUT_TEXT_LINK_POPOVER_OPENED_ARIA=Tryk p\u00E5 Pil ned for at flytte til listen over foretrukne foresp\u00F8rgsler og sidst brugte foresp\u00F8rgsler
32
+ T_EASY_FILTER_INPUT_TEXT_LINK_POPOVER_ARIA=Tryk p\u00E5 Pil ned for at flytte til listen over foretrukne foresp\u00F8rgsler og sidst brugte foresp\u00F8rgsler
33
33
  M_EASY_FILTER_SINGLE_VALUE_MESSAGE=Kun en enkelt v\u00E6rdi kan anvendes p\u00E5 f\u00F8lgende\: {0}
34
34
  M_EASY_FILTER_NON_FILTERABLE=Du kan ikke filtrere efter f\u00F8lgende egenskab i denne app\: {0}
35
35
  M_EASY_FILTER_SINGLE_RANGE=Bem\u00E6rk, at kun en enkelt betingelse kan anvendes p\u00E5 f\u00F8lgende\: {0}
@@ -37,6 +37,12 @@ M_EASY_FILTER_HIDDEN_FILTER=Du kan ikke filtrere efter f\u00F8lgende egenskab i
37
37
  C_SHORTCUT_TITLE=Tastaturgenveje
38
38
  C_SHORTCUT_PLACEHOLDER=Find en tastaturgenvej
39
39
  C_SHORTCUT_NODATA=Fokuser p\u00E5 en del af sk\u00E6rmen for at se tastaturgenvejene
40
+
41
+ C_EASY_FILTER_THUMBS_UP=Tommelfinger op til den nemme filtrering
42
+
43
+ C_EASY_FILTER_THUMBS_DOWN=Tommelfinger ned til den nemme filtrering
44
+
45
+ C_EASY_FILTER_FEEDBACK_SENT=Feedback sendt
40
46
  M_INLINE_EDIT_TOOLTIP_EDIT=Rediger
41
47
  M_INLINE_EDIT_TOOLTIP_SAVE=Gem
42
48
  M_INLINE_EDIT_TOOLTIP_CANCEL=Annuller
@@ -29,7 +29,7 @@ M_EASY_FILTER_POPOVER_CLOSE=Schlie\u00DFen
29
29
  M_EASY_FILTER_POPOVER_EMPTY_LAST_USED_TITLE=Kein zuletzt verwendeten Anfragen
30
30
  M_EASY_FILTER_FILLED_STAR=Aus Favoriten entfernen
31
31
  M_EASY_FILTER_EMPTY_START=Zu Favoriten hinzuf\u00FCgen
32
- T_EASY_FILTER_INPUT_TEXT_LINK_POPOVER_OPENED_ARIA=Um zu der Liste der Favoriten und zuletzt verwendeten Anfragen zu gelangen, dr\u00FCcken Sie die Taste "Pfeil nach unten".
32
+ T_EASY_FILTER_INPUT_TEXT_LINK_POPOVER_ARIA=Um zu der Liste der Favoriten und zuletzt verwendeten Anfragen zu gelangen, dr\u00FCcken Sie die Taste "Pfeil nach unten".
33
33
  M_EASY_FILTER_SINGLE_VALUE_MESSAGE=Es kann nur ein Einzelwert auf Folgendes angewandt werden\: {0}
34
34
  M_EASY_FILTER_NON_FILTERABLE=In dieser App k\u00F6nnen Sie nicht nach der folgenden Eigenschaft filtern\: {0}
35
35
  M_EASY_FILTER_SINGLE_RANGE=Beachten Sie, dass nur eine einzige Bedingung auf Folgendes angewandt werden kann\: {0}
@@ -37,6 +37,12 @@ M_EASY_FILTER_HIDDEN_FILTER=Sie k\u00F6nnen nicht nach der folgenden Eigenschaft
37
37
  C_SHORTCUT_TITLE=Tastaturk\u00FCrzel
38
38
  C_SHORTCUT_PLACEHOLDER=Tastaturk\u00FCrzel suchen
39
39
  C_SHORTCUT_NODATA=Setzen Sie den Fokus auf eine Stelle auf dem Bildschirm, um die Tastaturk\u00FCrzel anzuzeigen.
40
+
41
+ C_EASY_FILTER_THUMBS_UP=Daumen hoch f\u00FCr Einfachen Filter
42
+
43
+ C_EASY_FILTER_THUMBS_DOWN=Daumen runter f\u00FCr Einfachen Filter
44
+
45
+ C_EASY_FILTER_FEEDBACK_SENT=Feedback wurde gesendet
40
46
  M_INLINE_EDIT_TOOLTIP_EDIT=Bearbeiten
41
47
  M_INLINE_EDIT_TOOLTIP_SAVE=Sichern
42
48
  M_INLINE_EDIT_TOOLTIP_CANCEL=Abbrechen
@@ -29,7 +29,7 @@ M_EASY_FILTER_POPOVER_CLOSE=\u039A\u03BB\u03B5\u03AF\u03C3\u03B9\u03BC\u03BF
29
29
  M_EASY_FILTER_POPOVER_EMPTY_LAST_USED_TITLE=\u0394\u03B5\u03BD \u03C5\u03C0\u03AC\u03C1\u03C7\u03BF\u03C5\u03BD \u03C0\u03C1\u03CC\u03C3\u03C6\u03B1\u03C4\u03B1 \u03C7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B7\u03BC\u03AD\u03BD\u03B1 \u03B5\u03C1\u03C9\u03C4\u03AE\u03BC\u03B1\u03C4\u03B1
30
30
  M_EASY_FILTER_FILLED_STAR=\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE \u03B1\u03C0\u03CC \u0391\u03B3\u03B1\u03C0\u03B7\u03BC\u03AD\u03BD\u03B1
31
31
  M_EASY_FILTER_EMPTY_START=\u03A0\u03C1\u03BF\u03C3\u03B8\u03AE\u03BA\u03B7 \u03C3\u03C4\u03B1 \u0391\u03B3\u03B1\u03C0\u03B7\u03BC\u03AD\u03BD\u03B1
32
- T_EASY_FILTER_INPUT_TEXT_LINK_POPOVER_OPENED_ARIA=\u0393\u03B9\u03B1 \u03BD\u03B1 \u03BC\u03B5\u03C4\u03B1\u03BA\u03B9\u03BD\u03B7\u03B8\u03B5\u03AF\u03C4\u03B5 \u03C3\u03C4\u03B7\u03BD \u03BB\u03AF\u03C3\u03C4\u03B1 \u03BC\u03B5 \u03C4\u03B1 \u03B1\u03B3\u03B1\u03C0\u03B7\u03BC\u03AD\u03BD\u03B1 \u03B5\u03C1\u03C9\u03C4\u03AE\u03BC\u03B1\u03C4\u03B1 \u03BA\u03B1\u03B9 \u03C4\u03B1 \u03C0\u03C1\u03CC\u03C3\u03C6\u03B1\u03C4\u03B1 \u03C7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B7\u03BC\u03AD\u03BD\u03B1 \u03C0\u03B1\u03C4\u03AE\u03C3\u03C4\u03B5 \u03C4\u03BF \u03C0\u03BB\u03AE\u03BA\u03C4\u03C1\u03BF \u039A\u03AC\u03C4\u03C9 \u0392\u03AD\u03BB\u03BF\u03C2
32
+ T_EASY_FILTER_INPUT_TEXT_LINK_POPOVER_ARIA=\u0393\u03B9\u03B1 \u03BD\u03B1 \u03BC\u03B5\u03C4\u03B1\u03BA\u03B9\u03BD\u03B7\u03B8\u03B5\u03AF\u03C4\u03B5 \u03C3\u03C4\u03B7\u03BD \u03BB\u03AF\u03C3\u03C4\u03B1 \u03BC\u03B5 \u03C4\u03B1 \u03B1\u03B3\u03B1\u03C0\u03B7\u03BC\u03AD\u03BD\u03B1 \u03B5\u03C1\u03C9\u03C4\u03AE\u03BC\u03B1\u03C4\u03B1 \u03BA\u03B1\u03B9 \u03C4\u03B1 \u03C0\u03C1\u03CC\u03C3\u03C6\u03B1\u03C4\u03B1 \u03C7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B7\u03BC\u03AD\u03BD\u03B1 \u03C0\u03B1\u03C4\u03AE\u03C3\u03C4\u03B5 \u03C4\u03BF \u03C0\u03BB\u03AE\u03BA\u03C4\u03C1\u03BF \u039A\u03AC\u03C4\u03C9 \u0392\u03AD\u03BB\u03BF\u03C2
33
33
  M_EASY_FILTER_SINGLE_VALUE_MESSAGE=\u039C\u03CC\u03BD\u03BF \u03BC\u03AF\u03B1 \u03BC\u03B5\u03BC\u03BF\u03BD\u03C9\u03BC\u03AD\u03BD\u03B7 \u03C4\u03B9\u03BC\u03AE \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03B5\u03C6\u03B1\u03C1\u03BC\u03BF\u03C3\u03C4\u03B5\u03AF \u03C3\u03C4\u03B1 \u03B5\u03BE\u03AE\u03C2\: {0}
34
34
  M_EASY_FILTER_NON_FILTERABLE=\u0394\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF\u03C4\u03B5 \u03BD\u03B1 \u03C6\u03B9\u03BB\u03C4\u03C1\u03AC\u03C1\u03B5\u03C4\u03B5 \u03C4\u03B7\u03BD \u03B1\u03BA\u03CC\u03BB\u03BF\u03C5\u03B8\u03B7 \u03B9\u03B4\u03B9\u03CC\u03C4\u03B7\u03C4\u03B1 \u03C3\u03B5 \u03B1\u03C5\u03C4\u03AE\u03BD \u03C4\u03B7\u03BD \u03B5\u03C6\u03B1\u03C1\u03BC\u03BF\u03B3\u03AE\: {0}
35
35
  M_EASY_FILTER_SINGLE_RANGE=\u03A3\u03B7\u03BC\u03B5\u03B9\u03CE\u03C3\u03C4\u03B5 \u03CC\u03C4\u03B9 \u03BC\u03CC\u03BD\u03BF \u03BC\u03AF\u03B1 \u03C3\u03C5\u03BD\u03B8\u03AE\u03BA\u03B7 \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03B5\u03C6\u03B1\u03C1\u03BC\u03BF\u03C3\u03C4\u03B5\u03AF \u03C3\u03C4\u03B1 \u03B1\u03BA\u03CC\u03BB\u03BF\u03C5\u03B8\u03B1\: {0}
@@ -37,6 +37,12 @@ M_EASY_FILTER_HIDDEN_FILTER=\u0394\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03B5\u0
37
37
  C_SHORTCUT_TITLE=\u03A3\u03C5\u03BD\u03C4\u03BF\u03BC\u03B5\u03CD\u03C3\u03B5\u03B9\u03C2 \u03A0\u03BB\u03B7\u03BA\u03C4\u03C1\u03BF\u03BB\u03BF\u03B3\u03AF\u03BF\u03C5
38
38
  C_SHORTCUT_PLACEHOLDER=\u0392\u03C1\u03B5\u03AF\u03C4\u03B5 \u03BC\u03AF\u03B1 \u03C3\u03C5\u03BD\u03C4\u03CC\u03BC.\u03C0\u03BB\u03B7\u03BA\u03C4\u03C1.
39
39
  C_SHORTCUT_NODATA=\u0395\u03C3\u03C4\u03B9\u03AC\u03C3\u03C4\u03B5 \u03C3\u03B5 \u03AD\u03BD\u03B1 \u03BC\u03AD\u03C1\u03BF\u03C2 \u03C4\u03B7\u03C2 \u03BF\u03B8\u03CC\u03BD\u03B7\u03C2 \u03B3\u03B9\u03B1 \u03BD\u03B1 \u03B4\u03B5\u03AF\u03C4\u03B5 \u03C4\u03B9\u03C2 \u03C3\u03C5\u03BD\u03C4\u03BF\u03BC\u03B5\u03CD\u03C3\u03B5\u03B9\u03C2 \u03C0\u03BB\u03B7\u03BA\u03C4\u03C1\u03BF\u03BB\u03BF\u03B3\u03AF\u03BF\u03C5
40
+
41
+ C_EASY_FILTER_THUMBS_UP=\u039C\u03BF\u03C5 \u03B1\u03C1\u03AD\u03C3\u03B5\u03B9 \u03C4\u03BF \u03B5\u03CD\u03BA\u03BF\u03BB\u03BF \u03C6\u03B9\u03BB\u03C4\u03C1\u03AC\u03C1\u03B9\u03C3\u03BC\u03B1
42
+
43
+ C_EASY_FILTER_THUMBS_DOWN=\u0394\u03B5\u03BD \u03BC\u03BF\u03C5 \u03B1\u03C1\u03AD\u03C3\u03B5\u03B9 \u03C4\u03BF \u03B5\u03CD\u03BA\u03BF\u03BB\u03BF \u03C6\u03B9\u03BB\u03C4\u03C1\u03AC\u03C1\u03B9\u03C3\u03BC\u03B1
44
+
45
+ C_EASY_FILTER_FEEDBACK_SENT=\u03A3\u03C7\u03CC\u03BB\u03B9\u03BF \u03B5\u03C3\u03C4\u03AC\u03BB\u03B7
40
46
  M_INLINE_EDIT_TOOLTIP_EDIT=E\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1
41
47
  M_INLINE_EDIT_TOOLTIP_SAVE=\u0391\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7
42
48
  M_INLINE_EDIT_TOOLTIP_CANCEL=\u0391\u03BA\u03CD\u03C1\u03C9\u03C3\u03B7
@@ -29,7 +29,7 @@ M_EASY_FILTER_POPOVER_CLOSE=Close
29
29
  M_EASY_FILTER_POPOVER_EMPTY_LAST_USED_TITLE=No last used queries
30
30
  M_EASY_FILTER_FILLED_STAR=Remove from Favorites
31
31
  M_EASY_FILTER_EMPTY_START=Add to Favorites
32
- T_EASY_FILTER_INPUT_TEXT_LINK_POPOVER_OPENED_ARIA=To move to the list of favorite queries and last used queries, press the Arrow Down key
32
+ T_EASY_FILTER_INPUT_TEXT_LINK_POPOVER_ARIA=To move to the list of favorite queries and last used queries, press the Arrow Down key
33
33
  M_EASY_FILTER_SINGLE_VALUE_MESSAGE=Only one single value can be applied to the following\: {0}
34
34
  M_EASY_FILTER_NON_FILTERABLE=You can''t filter for the following property in this app\: {0}
35
35
  M_EASY_FILTER_SINGLE_RANGE=Note that only one single condition can be applied to the following\: {0}
@@ -37,6 +37,12 @@ M_EASY_FILTER_HIDDEN_FILTER=You can''t filter for the following property in this
37
37
  C_SHORTCUT_TITLE=Keyboard Shortcuts
38
38
  C_SHORTCUT_PLACEHOLDER=Find a keyboard shortcut
39
39
  C_SHORTCUT_NODATA=Focus on a part of the screen to see the keyboard shortcuts
40
+
41
+ C_EASY_FILTER_THUMBS_UP=Thumbs up for the easy filter
42
+
43
+ C_EASY_FILTER_THUMBS_DOWN=Thumbs down for the easy filter
44
+
45
+ C_EASY_FILTER_FEEDBACK_SENT=Feedback sent
40
46
  M_INLINE_EDIT_TOOLTIP_EDIT=Edit
41
47
  M_INLINE_EDIT_TOOLTIP_SAVE=Save
42
48
  M_INLINE_EDIT_TOOLTIP_CANCEL=Cancel