@elite.framework/ng.ui.core 1.0.95 → 1.0.97

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.
@@ -1 +1 @@
1
- {"version":3,"file":"elite.framework-ng.ui.core-generic-search-advanced.mjs","sources":["../tmp-esm2022/generic-search-advanced/lib/generic-search-advanced-module.js","../tmp-esm2022/generic-search-advanced/lib/query-builder.service.js","../tmp-esm2022/generic-search-advanced/lib/generic-search-advanced.js","../tmp-esm2022/generic-search-advanced/lib/sort-builder.component.js","../tmp-esm2022/generic-search-advanced/lib/query-builder.component.js","../tmp-esm2022/generic-search-advanced/lib/tab-type.component.js","../tmp-esm2022/generic-search-advanced/lib/columns-builder.component.js","../tmp-esm2022/generic-search-advanced/lib/group-builder.component.js","../tmp-esm2022/generic-search-advanced/lib/group.component.js","../tmp-esm2022/generic-search-advanced/lib/formly-config.js","../tmp-esm2022/generic-search-advanced/elite.framework-ng.ui.core-generic-search-advanced.js"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport * as i0 from \"@angular/core\";\nexport class GenericSearchAdvancedModule {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSearchAdvancedModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSearchAdvancedModule, imports: [CommonModule] });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSearchAdvancedModule, imports: [CommonModule] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSearchAdvancedModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1zZWFyY2gtYWR2YW5jZWQtbW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy51aS5jb3JlL2dlbmVyaWMtc2VhcmNoLWFkdmFuY2VkL3NyYy9saWIvZ2VuZXJpYy1zZWFyY2gtYWR2YW5jZWQtbW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUsvQyxNQUFNLE9BQU8sMkJBQTJCO3VHQUEzQiwyQkFBMkI7d0dBQTNCLDJCQUEyQixZQUY1QixZQUFZO3dHQUVYLDJCQUEyQixZQUY1QixZQUFZOzsyRkFFWCwyQkFBMkI7a0JBSHZDLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUN4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgR2VuZXJpY1NlYXJjaEFkdmFuY2VkTW9kdWxlIHt9XG4iXX0=","// query-builder.service.ts\nimport { inject, Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { QueryParser } from '@elite.framework/ng.core/services';\nimport * as i0 from \"@angular/core\";\nexport class QueryBuilderService {\n translate = inject(TranslateService);\n // Field type configuration that matches QueryBuilderComponent\n fieldTypeConfig = {\n 'input': { defaultOperator: 'contains', defaultValue: '', operators: ['eq', 'ne', 'contains', 'startswith', 'endswith'] },\n 'number': { defaultOperator: 'eq', defaultValue: null, operators: ['eq', 'ne', 'gt', 'ge', 'lt', 'le'] },\n 'datepicker': { defaultOperator: 'eq', defaultValue: null, operators: ['eq', 'ne', 'gt', 'ge', 'lt', 'le'] },\n 'select': { defaultOperator: 'eq', defaultValue: '', operators: ['eq', 'ne', 'in', 'notin'] },\n 'checkbox': { defaultOperator: 'eq', defaultValue: null, operators: ['eq', 'ne'] },\n 'generic-selector': { defaultOperator: 'eq', defaultValue: null, operators: ['eq', 'ne', 'in', 'notin'] },\n 'switch': { defaultOperator: 'eq', defaultValue: null, operators: ['eq', 'ne'] },\n 'radio': { defaultOperator: 'eq', defaultValue: '', operators: ['eq', 'ne'] },\n 'textarea': { defaultOperator: 'contains', defaultValue: '', operators: ['eq', 'ne', 'contains', 'startswith', 'endswith'] }\n };\n buildQueryUIFields(fields, enableSelect, enableGroup) {\n return [\n {\n type: 'tab-type',\n props: {\n tabViewClass: 'advanced-query-tabs',\n scrollable: false,\n lazy: true,\n activeIndex: 0\n },\n fieldGroup: this.getQueryTabs(fields, enableSelect, enableGroup)\n }\n ];\n }\n getQueryTabs(fields, enableSelect, enableGroup) {\n const tabs = [\n {\n type: 'group',\n props: {\n tabLabel: 'FILTERS',\n // label: 'FILTERS',\n leftIcon: 'pi pi-filter',\n badge: (field) => {\n const fieldGroup = (field?.fieldGroup ?? [])[0];\n return (fieldGroup?.model?.advancedFilters ?? [])[0]?.conditions?.length || 0;\n },\n },\n fieldGroup: this.getFilterTabFields(fields)\n },\n {\n type: 'group',\n props: {\n tabLabel: 'SORTING',\n // label: 'SORTING',\n leftIcon: 'pi pi-sort-alt',\n badge: (field) => {\n const fieldGroup = (field?.fieldGroup ?? [])[0];\n return (fieldGroup?.model?.sorting ?? [])?.length || 0;\n },\n },\n fieldGroup: this.getSortingTabFields(fields)\n },\n enableGroup && {\n type: 'group',\n props: {\n tabLabel: 'GROUPING',\n // label: 'GROUPING',\n leftIcon: 'pi pi-table',\n badge: (field) => {\n const fieldGroup = (field?.fieldGroup ?? [])[0];\n return (fieldGroup?.model?.grouping ?? [])?.length || 0;\n },\n },\n fieldGroup: this.getGroupingTabFields(fields)\n },\n enableSelect && {\n type: 'group',\n props: {\n tabLabel: 'COLUMNS',\n // label: 'COLUMNS',\n leftIcon: 'pi pi-list',\n badge: (field) => {\n const fieldGroup = (field?.fieldGroup ?? [])[0];\n const columns = fieldGroup?.model?.columns;\n // Handle both array and object formats for columns\n if (Array.isArray(columns)) {\n return columns.filter((col) => col?.isVisible)?.length || 0;\n }\n else if (columns && typeof columns === 'object') {\n // If columns is an object, count the visible ones\n return Object.values(columns).filter((col) => col?.isVisible)?.length || 0;\n }\n return 0;\n },\n },\n fieldGroup: this.getColumnsTabFields(fields)\n },\n {\n type: 'group',\n props: {\n tabLabel: 'PAGINATION',\n // label: 'PAGINATION',\n leftIcon: 'pi pi-cog',\n badge: (field) => {\n return field?.model?.pagination && field?.model?.pagination?.top ? 1 : 0;\n },\n },\n fieldGroup: this.getPaginationTabFields()\n }\n ];\n return tabs.filter(Boolean);\n }\n getFilterTabFields(fields) {\n return [\n {\n key: 'advancedFilters',\n type: 'query-builder',\n props: {\n label: 'فلاتر متقدمة',\n description: 'أنشئ فلاتر معقدة باستخدام مشغلين منطقيين',\n fields: this.extractFilterableFields(fields)\n }\n }\n ];\n }\n getSortingTabFields(fields) {\n return [\n {\n key: 'sorting',\n type: 'sort-builder',\n props: {\n label: 'ترتيب النتائج',\n description: 'حدد أولوية وعرض ترتيب البيانات',\n fields: this.extractSortableFields(fields)\n }\n }\n ];\n }\n getGroupingTabFields(fields) {\n return [\n {\n key: 'grouping',\n type: 'group-builder',\n props: {\n label: 'تجميع البيانات',\n description: 'قم بتجميع البيانات حسب الحقول المطلوبة',\n fields: this.extractGroupableFields(fields),\n maxGroups: 3\n }\n }\n ];\n }\n getColumnsTabFields(fields) {\n return [\n {\n key: 'columns',\n type: 'columns-builder',\n props: {\n label: 'إدارة الأعمدة',\n description: 'اختر الحقول المراد عرضها وتخصيص التجميع',\n fields: this.extractSelectableFields(fields)\n }\n }\n ];\n }\n getPaginationTabFields() {\n return [\n {\n key: 'pagination',\n type: 'group',\n props: {\n label: '',\n description: '',\n collapsible: false,\n showFieldCount: true,\n variant: 'card'\n },\n fieldGroup: [\n {\n key: 'top',\n type: 'input',\n props: {\n type: 'number',\n label: 'الحد الأقصى للسجلات',\n min: 1,\n max: 1000,\n description: 'أقصى عدد للسجلات المراد عرضها'\n }\n },\n {\n key: 'skip',\n type: 'input',\n props: {\n type: 'number',\n label: 'تخطي السجلات',\n min: 0,\n description: 'عدد السجلات التي سيتم تخطيها'\n }\n },\n {\n key: 'includeCount',\n type: 'checkbox',\n props: {\n label: 'تضمين العدد الإجمالي',\n description: 'تضمين عدد السجلات الإجمالي في الاستجابة'\n }\n }\n ]\n }\n ];\n }\n extractFilterableFields(fields) {\n const filterableFields = [];\n this.traverseFields(fields, (field) => {\n if (field.key && field.props && ((field.props['filter'] && field.props['filter'].hidden == false) || !field.props['filter']) && !field.props?.hidden) {\n const fieldType = this.mapFieldType(field.type);\n const fieldConfig = this.fieldTypeConfig[fieldType] || this.fieldTypeConfig.input;\n filterableFields.push({\n key: field.props['entityKey'] ? field.props['entityKey'] : field.key,\n label: this.translate.instant(field.props.label || field.key),\n type: fieldType,\n props: { ...field.props },\n operators: fieldConfig.operators,\n defaultOperator: fieldConfig.defaultOperator,\n defaultValue: fieldConfig.defaultValue\n });\n }\n });\n return filterableFields;\n }\n extractSortableFields(fields) {\n const sortableFields = [];\n this.traverseFields(fields, (field) => {\n if (field.key && field.props && ((field.props['sort'] && field.props['sort'].hidden == false) || !field.props['sort']) && !field.props?.hidden) {\n sortableFields.push({\n key: field.props['entityKey'] ? field.props['entityKey'] : field.key,\n label: this.translate.instant(field.props.label || field.key)\n });\n }\n });\n return sortableFields;\n }\n extractGroupableFields(fields) {\n const groupableFields = [];\n this.traverseFields(fields, (field) => {\n if (field.key && field.props && ((field.props['group'] && field.props['group'].hidden == false) || !field.props['group']) && !field.props?.hidden) {\n groupableFields.push({\n key: field.props['entityKey'] ? field.props['entityKey'] : field.key,\n label: this.translate.instant(field.props.label || field.key),\n dataType: this.getDataType(field.type)\n });\n }\n });\n return groupableFields;\n }\n extractSelectableFields(fields) {\n const tempFields = [];\n this.traverseFields(fields, (field) => {\n if (field.key &&\n field.props &&\n // ((field.props['select'] && field.props['select'].hidden === false) || !field.props['select']) &&\n ((field.props['report'] && field.props['report'].hidden === false) || !field.props['report']) &&\n !field.props?.hidden) {\n const isNumeric = ['number', 'currency'].includes(field.type);\n const tableConfig = field.props['table'] ?? {};\n const mergedProps = { ...field.props, ...(tableConfig.props ?? {}) };\n const order = tableConfig.order ??\n tableConfig.props?.order ??\n mergedProps['order'] ??\n Number.MAX_SAFE_INTEGER;\n tempFields.push({\n key: field.props['entityKey'] ? field.props['entityKey'] : field.key,\n label: this.translate.instant(field.props.label || field.key),\n dataType: this.getDataType(field.type),\n isNumeric,\n defaultVisible: field.props['defaultVisible'] !== false,\n aggregatable: isNumeric && field.props['aggregatable'] !== false,\n order\n });\n }\n });\n return tempFields\n .sort((a, b) => a.order - b.order)\n .map(({ order, ...rest }) => rest); // remove order after sorting\n }\n traverseFields(fields, callback) {\n fields.forEach(field => {\n callback(field);\n if (field.fieldGroup) {\n this.traverseFields(field.fieldGroup, callback);\n }\n });\n }\n getAppliedFiltersCount(model) {\n const breakdown = {\n filters: 0,\n sorting: 0,\n grouping: 0,\n columns: 0,\n pagination: 0,\n expand: 0\n };\n // Advanced filters\n if (model?.advancedFilters && Array.isArray(model.advancedFilters)) {\n model.advancedFilters.forEach((filterGroup) => {\n if (filterGroup.conditions && Array.isArray(filterGroup.conditions)) {\n breakdown.filters += filterGroup.conditions.length;\n }\n });\n }\n // Sorting\n if (model?.sorting && Array.isArray(model.sorting)) {\n breakdown.sorting = model.sorting.length;\n }\n // Grouping\n if (model?.grouping && Array.isArray(model.grouping)) {\n breakdown.grouping = model.grouping.length;\n }\n // Columns\n if (model?.columns) {\n if (Array.isArray(model.columns)) {\n breakdown.columns = model.columns.filter((col) => col.isVisible).length;\n }\n else if (typeof model.columns === 'object') {\n breakdown.columns = Object.values(model.columns).filter((col) => col?.isVisible).length;\n }\n }\n // Pagination\n if (model?.pagination) {\n if (model.pagination.top)\n breakdown.pagination += 1;\n if (model.pagination.skip)\n breakdown.pagination += 1;\n if (model.pagination.includeCount)\n breakdown.pagination += 1;\n }\n // Expand\n if (model?.expand && Array.isArray(model.expand)) {\n breakdown.expand = model.expand.length;\n }\n return {\n total: Object.values(breakdown).reduce((sum, count) => sum + count, 0),\n breakdown\n };\n }\n mapFieldType(type) {\n const typeMap = {\n 'input': 'input',\n 'number': 'number',\n 'datepicker': 'datepicker',\n 'select': 'select',\n 'checkbox': 'checkbox',\n 'generic-selector': 'generic-selector',\n 'switch': 'switch',\n 'radio': 'radio',\n 'textarea': 'textarea',\n 'currency': 'number'\n };\n return typeMap[type || 'input'] || 'input';\n }\n getDataType(type) {\n const dataTypeMap = {\n 'input': 'string',\n 'number': 'number',\n 'datepicker': 'date',\n 'select': 'string',\n 'checkbox': 'boolean',\n 'generic-selector': 'string',\n 'switch': 'boolean',\n 'radio': 'string',\n 'textarea': 'string',\n 'currency': 'number'\n };\n return dataTypeMap[type || 'input'] || 'string';\n }\n getOperatorsForType(type) {\n const fieldType = this.mapFieldType(type);\n const config = this.fieldTypeConfig[fieldType];\n return config ? config.operators : ['eq', 'ne'];\n }\n // Enhanced OData methods with GroupBy and Select support\n buildODataFromQueryModel(model, originalFields) {\n const params = {\n filters: [],\n orderBy: [],\n groupBy: [],\n select: [],\n aggregates: [],\n expand: model.expand || [],\n includeCount: model.pagination?.includeCount || false\n };\n // Quick search\n if (model.filter) {\n const searchableFields = this.extractSelectableFields(originalFields); // TODO get all strings filters\n const quickSearchConditions = searchableFields.map(field => ({\n field: field.key,\n operator: 'contains',\n value: model.filter\n }));\n if (quickSearchConditions.length > 0) {\n params.filters.push({\n logicalOperator: 'or',\n conditions: quickSearchConditions\n });\n }\n }\n // Advanced filters\n if (model.advancedFilters && Array.isArray(model.advancedFilters)) {\n params.filters.push(...model.advancedFilters);\n }\n // Sorting\n if (model.sorting && Array.isArray(model.sorting)) {\n params.orderBy = model.sorting\n .filter((sort) => sort.field && sort.direction)\n .map((sort) => ({\n field: sort.field,\n direction: sort.direction\n }));\n }\n // Grouping\n if (model.grouping && Array.isArray(model.grouping)) {\n params.groupBy = model.grouping\n .filter((group) => group.field)\n .map((group, index) => ({\n propertyName: group.field,\n displayName: group.displayName || group.field,\n showTotal: group.showTotal !== false,\n order: index\n }));\n }\n // Columns/Select - Handle both array and object formats\n // extractSelectableFields\n if (model.columns) {\n let visibleColumns = [];\n // Handle array format: [{field: 'name', isVisible: true, ...}, ...]\n if (Array.isArray(model.columns)) {\n visibleColumns = model.columns.filter((col) => col.isVisible);\n }\n // Handle object format: {field1: {isVisible: true, displayName: 'Name', ...}, field2: {...}}\n else if (typeof model.columns === 'object') {\n visibleColumns = Object.entries(model.columns)\n .filter(([key, col]) => col.isVisible)\n .map(([key, col]) => ({\n field: key, // Use the object key as field name\n ...col // Spread the column properties\n }));\n }\n // Process visible columns for select and aggregates\n if (visibleColumns.length > 0) {\n params.select = visibleColumns.map((col, index) => ({\n propertyName: col.field || col.key, // Support both 'field' and 'key' properties\n displayName: col.displayName || col.field || col.key || col.label,\n aggregateFunction: col.aggregateFunction,\n isVisible: true,\n order: index\n }));\n // Extract aggregates from columns with aggregate functions\n const aggregateColumns = visibleColumns.filter((col) => col.aggregateFunction);\n params.aggregates = aggregateColumns.map((col) => ({\n propertyName: col.field || col.key,\n aggregateFunction: col.aggregateFunction,\n alias: `${col.aggregateFunction}_${col.field || col.key}`\n }));\n }\n }\n else {\n // Fallback: auto-generate from formly fields\n const selectableFields = this.extractSelectableFields(originalFields);\n // Ensure a column for the ID field exists\n // if (!selectableFields.some(f => f.key === this.idField)) {\n // selectableFields.unshift({\n // key: this.idField,\n // label: this.translate.instant(this.idField),\n // dataType: 'number', // or the correct type\n // isNumeric: false,\n // defaultVisible: true,\n // aggregatable: false\n // });\n // }\n params.select = selectableFields.map((f, i) => ({\n propertyName: f.key,\n displayName: f.label,\n isVisible: f.defaultVisible,\n order: i\n }));\n params.aggregates = selectableFields\n .filter(f => f.aggregatable)\n .map(f => ({\n propertyName: f.key,\n aggregateFunction: 'sum',\n alias: `sum_${f.key}`\n }));\n }\n // Pagination\n if (model.pagination) {\n if (model.pagination.top) {\n params.top = Number(model.pagination.top);\n }\n if (model.pagination.skip) {\n params.skip = Number(model.pagination.skip);\n }\n if (model.pagination.includeCount !== undefined) {\n params.includeCount = model.pagination.includeCount;\n }\n }\n return params;\n }\n toODataQueryString(params) {\n return QueryParser.toString(params);\n }\n parseODataQuery(queryString) {\n return QueryParser.parse(queryString);\n }\n // Helper method to get field configuration\n getFieldConfig(fieldKey, fields) {\n return fields.find(f => f.key === fieldKey);\n }\n // Helper to get available aggregate functions for numeric fields\n getAggregateFunctions() {\n return [\n { label: 'مجموع', value: 'sum' },\n { label: 'متوسط', value: 'avg' },\n { label: 'عدد', value: 'count' },\n { label: 'الحد الأدنى', value: 'min' },\n { label: 'الحد الأقصى', value: 'max' }\n ];\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: QueryBuilderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: QueryBuilderService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: QueryBuilderService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktYnVpbGRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy51aS5jb3JlL2dlbmVyaWMtc2VhcmNoLWFkdmFuY2VkL3NyYy9saWIvcXVlcnktYnVpbGRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJCQUEyQjtBQUMzQixPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUduRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQW9DLFdBQVcsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOztBQUtsRyxNQUFNLE9BQU8sbUJBQW1CO0lBQzlCLFNBQVMsR0FBcUIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFFdkQsOERBQThEO0lBQ3RELGVBQWUsR0FBRztRQUN4QixPQUFPLEVBQUUsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFVBQVUsQ0FBQyxFQUFFO1FBQ3pILFFBQVEsRUFBRSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFO1FBQ3hHLFlBQVksRUFBRSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFO1FBQzVHLFFBQVEsRUFBRSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsWUFBWSxF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O1FBQ2pDLE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBR0QsMkNBQTJDO0lBQzNDLGNBQWMsQ0FBQyxRQUFnQixFQUFFLE1BQWE7UUFDNUMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsaUVBQWlFO0lBQ2pFLHFCQUFxQjtRQUNuQixPQUFPO1lBQ0wsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDaEMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDaEMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7WUFDaEMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDdEMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7U0FDdkMsQ0FBQztJQUNKLENBQUM7dUdBamtCVSxtQkFBbUI7MkdBQW5CLG1CQUFtQixjQUZsQixNQUFNOzsyRkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gcXVlcnktYnVpbGRlci5zZXJ2aWNlLnRzXHJcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtbHlGaWVsZENvbmZpZyB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xyXG5pbXBvcnQgeyBRdWVyeUJ1aWxkZXJGaWVsZCwgU29ydEJ1aWxkZXJGaWVsZCwgR3JvdXBCeUZpZWxkLCBTZWxlY3RGaWVsZCB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgRmlsdGVyQ29uZGl0aW9uLCBRdWVyeVBhcmFtZXRlcnMsIFF1ZXJ5UGFyc2VyIH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL3NlcnZpY2VzJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFF1ZXJ5QnVpbGRlclNlcnZpY2Uge1xyXG4gIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcclxuXHJcbiAgLy8gRmllbGQgdHlwZSBjb25maWd1cmF0aW9uIHRoYXQgbWF0Y2hlcyBRdWVyeUJ1aWxkZXJDb21wb25lbnRcclxuICBwcml2YXRlIGZpZWxkVHlwZUNvbmZpZyA9IHtcclxuICAgICdpbnB1dCc6IHsgZGVmYXVsdE9wZXJhdG9yOiAnY29udGFpbnMnLCBkZWZhdWx0VmFsdWU6ICcnLCBvcGVyYXRvcnM6IFsnZXEnLCAnbmUnLCAnY29udGFpbnMnLCAnc3RhcnRzd2l0aCcsICdlbmRzd2l0aCddIH0sXHJcbiAgICAnbnVtYmVyJzogeyBkZWZhdWx0T3BlcmF0b3I6ICdlcScsIGRlZmF1bHRWYWx1ZTogbnVsbCwgb3BlcmF0b3JzOiBbJ2VxJywgJ25lJywgJ2d0JywgJ2dlJywgJ2x0JywgJ2xlJ10gfSxcclxuICAgICdkYXRlcGlja2VyJzogeyBkZWZhdWx0T3BlcmF0b3I6ICdlcScsIGRlZmF1bHRWYWx1ZTogbnVsbCwgb3BlcmF0b3JzOiBbJ2VxJywgJ25lJywgJ2d0JywgJ2dlJywgJ2x0JywgJ2xlJ10gfSxcclxuICAgICdzZWxlY3QnOiB7IGRlZmF1bHRPcGVyYXRvcjogJ2VxJywgZGVmYXVsdFZhbHVlOiAnJywgb3BlcmF0b3JzOiBbJ2VxJywgJ25lJywgJ2luJywgJ25vdGluJ10gfSxcclxuICAgICdjaGVja2JveCc6IHsgZGVmYXVsdE9wZXJhdG9yOiAnZXEnLCBkZWZhdWx0VmFsdWU6IG51bGwsIG9wZXJhdG9yczogWydlcScsICduZSddIH0sXHJcbiAgICAnZ2VuZXJpYy1zZWxlY3Rvcic6IHsgZGVmYXVsdE9wZXJhdG9yOiAnZXEnLCBkZWZhdWx0VmFsdWU6IG51bGwsIG9wZXJhdG9yczogWydlcScsICduZScsICdpbicsICdub3RpbiddIH0sXHJcbiAgICAnc3dpdGNoJzogeyBkZWZhdWx0T3BlcmF0b3I6ICdlcScsIGRlZmF1bHRWYWx1ZTogbnVsbCwgb3BlcmF0b3JzOiBbJ2VxJywgJ25lJ10gfSxcclxuICAgICdyYWRpbyc6IHsgZGVmYXVsdE9wZXJhdG9yOiAnZXEnLCBkZWZhdWx0VmFsdWU6ICcnLCBvcGVyYXRvcnM6IFsnZXEnLCAnbmUnXSB9LFxyXG4gICAgJ3RleHRhcmVhJzogeyBkZWZhdWx0T3BlcmF0b3I6ICdjb250YWlucycsIGRlZmF1bHRWYWx1ZTogJycsIG9wZXJhdG9yczogWydlcScsICduZScsICdjb250YWlucycsICdzdGFydHN3aXRoJywgJ2VuZHN3aXRoJ10gfVxyXG4gIH07XHJcblxyXG4gIGJ1aWxkUXVlcnlVSUZpZWxkcyhmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10sZW5hYmxlU2VsZWN0OmJvb2xlYW4sZW5hYmxlR3JvdXA6Ym9vbGVhbik6IEZvcm1seUZpZWxkQ29uZmlnW10ge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAge1xyXG4gICAgICAgIHR5cGU6ICd0YWItdHlwZScsXHJcbiAgICAgICAgcHJvcHM6IHtcclxuICAgICAgICAgIHRhYlZpZXdDbGFzczogJ2FkdmFuY2VkLXF1ZXJ5LXRhYnMnLFxyXG4gICAgICAgICAgc2Nyb2xsYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICBsYXp5OiB0cnVlLFxyXG4gICAgICAgICAgYWN0aXZlSW5kZXg6IDBcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZpZWxkR3JvdXA6IHRoaXMuZ2V0UXVlcnlUYWJzKGZpZWxkcyxlbmFibGVTZWxlY3QsZW5hYmxlR3JvdXApXHJcbiAgICAgIH1cclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFF1ZXJ5VGFicyhmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10sZW5hYmxlU2VsZWN0OmJvb2xlYW4sZW5hYmxlR3JvdXA6Ym9vbGVhbik6IEZvcm1seUZpZWxkQ29uZmlnW10ge1xyXG4gICAgIGNvbnN0IHRhYnM6IChGb3JtbHlGaWVsZENvbmZpZyB8IGZhbHNlKVtdID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgdHlwZTogJ2dyb3VwJyxcclxuICAgICAgICBwcm9wczoge1xyXG4gICAgICAgICAgdGFiTGFiZWw6ICdGSUxURVJTJyxcclxuICAgICAgICAgIC8vIGxhYmVsOiAnRklMVEVSUycsXHJcbiAgICAgICAgICBsZWZ0SWNvbjogJ3BpIHBpLWZpbHRlcicsXHJcbiAgICAgICAgICBiYWRnZTogKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZykgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmaWVsZEdyb3VwID0gKGZpZWxkPy5maWVsZEdyb3VwID8/IFtdKVswXSBhcyBhbnk7XHJcbiAgICAgICAgICAgIHJldHVybiAoZmllbGRHcm91cD8ubW9kZWw/LmFkdmFuY2VkRmlsdGVycyA/PyBbXSlbMF0/LmNvbmRpdGlvbnM/Lmxlbmd0aCB8fCAwO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZpZWxkR3JvdXA6IHRoaXMuZ2V0RmlsdGVyVGFiRmllbGRzKGZpZWxkcylcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHR5cGU6ICdncm91cCcsXHJcbiAgICAgICAgcHJvcHM6IHtcclxuICAgICAgICAgIHRhYkxhYmVsOiAnU09SVElORycsXHJcbiAgICAgICAgICAvLyBsYWJlbDogJ1NPUlRJTkcnLFxyXG4gICAgICAgICAgbGVmdEljb246ICdwaSBwaS1zb3J0LWFsdCcsXHJcbiAgICAgICAgICBiYWRnZTogKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZykgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmaWVsZEdyb3VwID0gKGZpZWxkPy5maWVsZEdyb3VwID8/IFtdKVswXSBhcyBhbnk7XHJcbiAgICAgICAgICAgIHJldHVybiAoZmllbGRHcm91cD8ubW9kZWw/LnNvcnRpbmcgPz8gW10pPy5sZW5ndGggfHwgMDtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICBmaWVsZEdyb3VwOiB0aGlzLmdldFNvcnRpbmdUYWJGaWVsZHMoZmllbGRzKVxyXG4gICAgICB9LFxyXG4gICAgICBlbmFibGVHcm91cCAmJiB7XHJcbiAgICAgICAgdHlwZTogJ2dyb3VwJyxcclxuICAgICAgICBwcm9wczoge1xyXG4gICAgICAgICAgdGFiTGFiZWw6ICdHUk9VUElORycsXHJcbiAgICAgICAgICAvLyBsYWJlbDogJ0dST1VQSU5HJyxcclxuICAgICAgICAgIGxlZnRJY29uOiAncGkgcGktdGFibGUnLFxyXG4gICAgICAgICAgYmFkZ2U6IChmaWVsZDogRm9ybWx5RmllbGRDb25maWcpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZmllbGRHcm91cCA9IChmaWVsZD8uZmllbGRHcm91cCA/PyBbXSlbMF0gYXMgYW55O1xyXG4gICAgICAgICAgICByZXR1cm4gKGZpZWxkR3JvdXA/Lm1vZGVsPy5ncm91cGluZyA/PyBbXSk/Lmxlbmd0aCB8fCAwO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZpZWxkR3JvdXA6IHRoaXMuZ2V0R3JvdXBpbmdUYWJGaWVsZHMoZmllbGRzKVxyXG4gICAgICB9LFxyXG4gICAgICBlbmFibGVTZWxlY3QgJiYge1xyXG4gICAgICAgIHR5cGU6ICdncm91cCcsXHJcbiAgICAgICAgcHJvcHM6IHtcclxuICAgICAgICAgIHRhYkxhYmVsOiAnQ09MVU1OUycsXHJcbiAgICAgICAgICAvLyBsYWJlbDogJ0NPTFVNTlMnLFxyXG4gICAgICAgICAgbGVmdEljb246ICdwaSBwaS1saXN0JyxcclxuICAgICAgICAgIGJhZGdlOiAoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKSA9PiB7XHJcbiAgICAgICAgICAgICBjb25zdCBmaWVsZEdyb3VwID0gKGZpZWxkPy5maWVsZEdyb3VwID8/IFtdKVswXSBhcyBhbnk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbnMgPSBmaWVsZEdyb3VwPy5tb2RlbD8uY29sdW1ucztcclxuXHJcbiAgICAgICAgICAgIC8vIEhhbmRsZSBib3RoIGFycmF5IGFuZCBvYmplY3QgZm9ybWF0cyBmb3IgY29sdW1uc1xyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjb2x1bW5zKSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBjb2x1bW5zLmZpbHRlcigoY29sOiBhbnkpID0+IGNvbD8uaXNWaXNpYmxlKT8ubGVuZ3RoIHx8IDA7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1ucyAmJiB0eXBlb2YgY29sdW1ucyA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgICAvLyBJZiBjb2x1bW5zIGlzIGFuIG9iamVjdCwgY291bnQgdGhlIHZpc2libGUgb25lc1xyXG4gICAgICAgICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKGNvbHVtbnMpLmZpbHRlcigoY29sOiBhbnkpID0+IGNvbD8uaXNWaXNpYmxlKT8ubGVuZ3RoIHx8IDA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZpZWxkR3JvdXA6IHRoaXMuZ2V0Q29sdW1uc1RhYkZpZWxkcyhmaWVsZHMpXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICB0eXBlOiAnZ3JvdXAnLFxyXG4gICAgICAgIHByb3BzOiB7XHJcbiAgICAgICAgICB0YWJMYWJlbDogJ1BBR0lOQVRJT04nLFxyXG4gICAgICAgICAgLy8gbGFiZWw6ICdQQUdJTkFUSU9OJyxcclxuICAgICAgICAgIGxlZnRJY29uOiAncGkgcGktY29nJyxcclxuICAgICAgICAgIGJhZGdlOiAoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBmaWVsZD8ubW9kZWw/LnBhZ2luYXRpb24gJiYgZmllbGQ/Lm1vZGVsPy5wYWdpbmF0aW9uPy50b3AgPyAxIDogMDtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICBmaWVsZEdyb3VwOiB0aGlzLmdldFBhZ2luYXRpb25UYWJGaWVsZHMoKVxyXG4gICAgICB9XHJcbiAgICBdO1xyXG4gICAgcmV0dXJuIHRhYnMuZmlsdGVyKEJvb2xlYW4pIGFzIEZvcm1seUZpZWxkQ29uZmlnW107XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEZpbHRlclRhYkZpZWxkcyhmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10pOiBGb3JtbHlGaWVsZENvbmZpZ1tdIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6ICdhZHZhbmNlZEZpbHRlcnMnLFxyXG4gICAgICAgIHR5cGU6ICdxdWVyeS1idWlsZGVyJyxcclxuICAgICAgICBwcm9wczoge1xyXG4gICAgICAgICAgbGFiZWw6ICfZgdmE2KfYqtixINmF2KrZgtiv2YXYqScsXHJcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ9ij2YbYtNimINmB2YTYp9iq2LEg2YXYudmC2K/YqSDYqNin2LPYqtiu2K/Yp9mFINmF2LTYutmE2YrZhiDZhdmG2LfZgtmK2YrZhicsXHJcbiAgICAgICAgICBmaWVsZHM6IHRoaXMuZXh0cmFjdEZpbHRlcmFibGVGaWVsZHMoZmllbGRzKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0U29ydGluZ1RhYkZpZWxkcyhmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10pOiBGb3JtbHlGaWVsZENvbmZpZ1tdIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6ICdzb3J0aW5nJyxcclxuICAgICAgICB0eXBlOiAnc29ydC1idWlsZGVyJyxcclxuICAgICAgICBwcm9wczoge1xyXG4gICAgICAgICAgbGFiZWw6ICfYqtix2KrZitioINin2YTZhtiq2KfYptisJyxcclxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAn2K3Yr9ivINij2YjZhNmI2YrYqSDZiNi52LHYtiDYqtix2KrZitioINin2YTYqNmK2KfZhtin2KonLFxyXG4gICAgICAgICAgZmllbGRzOiB0aGlzLmV4dHJhY3RTb3J0YWJsZUZpZWxkcyhmaWVsZHMpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRHcm91cGluZ1RhYkZpZWxkcyhmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10pOiBGb3JtbHlGaWVsZENvbmZpZ1tdIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6ICdncm91cGluZycsXHJcbiAgICAgICAgdHlwZTogJ2dyb3VwLWJ1aWxkZXInLFxyXG4gICAgICAgIHByb3BzOiB7XHJcbiAgICAgICAgICBsYWJlbDogJ9iq2KzZhdmK2Lkg2KfZhNio2YrYp9mG2KfYqicsXHJcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ9mC2YUg2KjYqtis2YXZiti5INin2YTYqNmK2KfZhtin2Kog2K3Ys9ioINin2YTYrdmC2YjZhCDYp9mE2YXYt9mE2YjYqNipJyxcclxuICAgICAgICAgIGZpZWxkczogdGhpcy5leHRyYWN0R3JvdXBhYmxlRmllbGRzKGZpZWxkcyksXHJcbiAgICAgICAgICBtYXhHcm91cHM6IDNcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENvbHVtbnNUYWJGaWVsZHMoZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdKTogRm9ybWx5RmllbGRDb25maWdbXSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiAnY29sdW1ucycsXHJcbiAgICAgICAgdHlwZTogJ2NvbHVtbnMtYnVpbGRlcicsXHJcbiAgICAgICAgcHJvcHM6IHtcclxuICAgICAgICAgIGxhYmVsOiAn2KXYr9in2LHYqSDYp9mE2KPYudmF2K/YqScsXHJcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ9in2K7YqtixINin2YTYrdmC2YjZhCDYp9mE2YXYsdin2K8g2LnYsdi22YfYpyDZiNiq2K7YtdmK2LUg2KfZhNiq2KzZhdmK2LknLFxyXG4gICAgICAgICAgZmllbGRzOiB0aGlzLmV4dHJhY3RTZWxlY3RhYmxlRmllbGRzKGZpZWxkcylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFBhZ2luYXRpb25UYWJGaWVsZHMoKTogRm9ybWx5RmllbGRDb25maWdbXSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiAncGFnaW5hdGlvbicsXHJcbiAgICAgICAgdHlwZTogJ2dyb3VwJyxcclxuICAgICAgICBwcm9wczoge1xyXG4gICAgICAgICAgbGFiZWw6ICcnLFxyXG4gICAgICAgICAgZGVzY3JpcHRpb246ICcnLFxyXG4gICAgICAgICAgY29sbGFwc2libGU6IGZhbHNlLFxyXG4gICAgICAgICAgc2hvd0ZpZWxkQ291bnQ6IHRydWUsXHJcbiAgICAgICAgICB2YXJpYW50OiAnY2FyZCdcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZpZWxkR3JvdXA6IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAga2V5OiAndG9wJyxcclxuICAgICAgICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgICAgICAgcHJvcHM6IHtcclxuICAgICAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcclxuICAgICAgICAgICAgICBsYWJlbDogJ9in2YTYrdivINin2YTYo9mC2LXZiSDZhNmE2LPYrNmE2KfYqicsXHJcbiAgICAgICAgICAgICAgbWluOiAxLFxyXG4gICAgICAgICAgICAgIG1heDogMTAwMCxcclxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ9ij2YLYtdmJINi52K/YryDZhNmE2LPYrNmE2KfYqiDYp9mE2YXYsdin2K8g2LnYsdi22YfYpydcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAga2V5OiAnc2tpcCcsXHJcbiAgICAgICAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgICAgICAgIHByb3BzOiB7XHJcbiAgICAgICAgICAgICAgdHlwZTogJ251bWJlcicsXHJcbiAgICAgICAgICAgICAgbGFiZWw6ICfYqtiu2LfZiiDYp9mE2LPYrNmE2KfYqicsXHJcbiAgICAgICAgICAgICAgbWluOiAwLFxyXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAn2LnYr9ivINin2YTYs9is2YTYp9iqINin2YTYqtmKINiz2YrYqtmFINiq2K7Yt9mK2YfYpydcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAga2V5OiAnaW5jbHVkZUNvdW50JyxcclxuICAgICAgICAgICAgdHlwZTogJ2NoZWNrYm94JyxcclxuICAgICAgICAgICAgcHJvcHM6IHtcclxuICAgICAgICAgICAgICBsYWJlbDogJ9iq2LbZhdmK2YYg2KfZhNi52K/YryDYp9mE2KXYrNmF2KfZhNmKJyxcclxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ9iq2LbZhdmK2YYg2LnYr9ivINin2YTYs9is2YTYp9iqINin2YTYpdis2YXYp9mE2Yog2YHZiiDYp9mE2KfYs9iq2KzYp9io2KknXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICBdXHJcbiAgICAgIH1cclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4dHJhY3RGaWx0ZXJhYmxlRmllbGRzKGZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSk6IFF1ZXJ5QnVpbGRlckZpZWxkW10ge1xyXG4gICAgY29uc3QgZmlsdGVyYWJsZUZpZWxkczogUXVlcnlCdWlsZGVyRmllbGRbXSA9IFtdO1xyXG5cclxuICAgIHRoaXMudHJhdmVyc2VGaWVsZHMoZmllbGRzLCAoZmllbGQpID0+IHtcclxuICAgICAgaWYgKGZpZWxkLmtleSAmJiBmaWVsZC5wcm9wcyAmJiAoKGZpZWxkLnByb3BzWydmaWx0ZXInXSAmJiBmaWVsZC5wcm9wc1snZmlsdGVyJ10uaGlkZGVuID09IGZhbHNlKSB8fCAhZmllbGQucHJvcHNbJ2ZpbHRlciddKSAmJiAhZmllbGQucHJvcHM/LmhpZGRlbikge1xyXG4gICAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IHRoaXMubWFwRmllbGRUeXBlKGZpZWxkLnR5cGUgYXMgc3RyaW5nKTtcclxuICAgICAgICBjb25zdCBmaWVsZENvbmZpZyA9IHRoaXMuZmllbGRUeXBlQ29uZmlnW2ZpZWxkVHlwZSBhcyBrZXlvZiB0eXBlb2YgdGhpcy5maWVsZFR5cGVDb25maWddIHx8IHRoaXMuZmllbGRUeXBlQ29uZmlnLmlucHV0O1xyXG5cclxuICAgICAgICBmaWx0ZXJhYmxlRmllbGRzLnB1c2goe1xyXG4gICAgICAgICAga2V5OiBmaWVsZC5wcm9wc1snZW50aXR5S2V5J10gPyBmaWVsZC5wcm9wc1snZW50aXR5S2V5J10gYXMgc3RyaW5nIDogZmllbGQua2V5IGFzIHN0cmluZyxcclxuICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGZpZWxkLnByb3BzLmxhYmVsIHx8IChmaWVsZC5rZXkgYXMgc3RyaW5nKSksXHJcbiAgICAgICAgICB0eXBlOiBmaWVsZFR5cGUsXHJcbiAgICAgICAgICBwcm9wczogeyAuLi5maWVsZC5wcm9wcyB9LFxyXG4gICAgICAgICAgb3BlcmF0b3JzOiBmaWVsZENvbmZpZy5vcGVyYXRvcnMsXHJcbiAgICAgICAgICBkZWZhdWx0T3BlcmF0b3I6IGZpZWxkQ29uZmlnLmRlZmF1bHRPcGVyYXRvcixcclxuICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZmllbGRDb25maWcuZGVmYXVsdFZhbHVlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBmaWx0ZXJhYmxlRmllbGRzO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgZXh0cmFjdFNvcnRhYmxlRmllbGRzKGZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSk6IFNvcnRCdWlsZGVyRmllbGRbXSB7XHJcbiAgICBjb25zdCBzb3J0YWJsZUZpZWxkczogU29ydEJ1aWxkZXJGaWVsZFtdID0gW107XHJcblxyXG4gICAgdGhpcy50cmF2ZXJzZUZpZWxkcyhmaWVsZHMsIChmaWVsZCkgPT4ge1xyXG4gICAgICBpZiAoZmllbGQua2V5ICYmIGZpZWxkLnByb3BzICYmICgoZmllbGQucHJvcHNbJ3NvcnQnXSAmJiBmaWVsZC5wcm9wc1snc29ydCddLmhpZGRlbiA9PSBmYWxzZSkgfHwgIWZpZWxkLnByb3BzWydzb3J0J10pJiYgIWZpZWxkLnByb3BzPy5oaWRkZW4pIHtcclxuICAgICAgICBzb3J0YWJsZUZpZWxkcy5wdXNoKHtcclxuICAgICAgICAgIGtleTogZmllbGQucHJvcHNbJ2VudGl0eUtleSddID8gZmllbGQucHJvcHNbJ2VudGl0eUtleSddIGFzIHN0cmluZyA6IGZpZWxkLmtleSBhcyBzdHJpbmcsXHJcbiAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChmaWVsZC5wcm9wcy5sYWJlbCB8fCBmaWVsZC5rZXkgYXMgc3RyaW5nKVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gc29ydGFibGVGaWVsZHM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4dHJhY3RHcm91cGFibGVGaWVsZHMoZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdKTogR3JvdXBCeUZpZWxkW10ge1xyXG4gICAgY29uc3QgZ3JvdXBhYmxlRmllbGRzOiBHcm91cEJ5RmllbGRbXSA9IFtdO1xyXG5cclxuICAgIHRoaXMudHJhdmVyc2VGaWVsZHMoZmllbGRzLCAoZmllbGQpID0+IHtcclxuICAgICAgaWYgKGZpZWxkLmtleSAmJiBmaWVsZC5wcm9wcyAmJiAoKGZpZWxkLnByb3BzWydncm91cCddICYmIGZpZWxkLnByb3BzWydncm91cCddLmhpZGRlbiA9PSBmYWxzZSkgfHwgIWZpZWxkLnByb3BzWydncm91cCddKSAmJiAhZmllbGQucHJvcHM/LmhpZGRlbikge1xyXG4gICAgICAgIGdyb3VwYWJsZUZpZWxkcy5wdXNoKHtcclxuICAgICAgICAgIGtleTogZmllbGQucHJvcHNbJ2VudGl0eUtleSddID8gZmllbGQucHJvcHNbJ2VudGl0eUtleSddIGFzIHN0cmluZyA6IGZpZWxkLmtleSBhcyBzdHJpbmcsXHJcbiAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChmaWVsZC5wcm9wcy5sYWJlbCB8fCBmaWVsZC5rZXkgYXMgc3RyaW5nKSxcclxuICAgICAgICAgIGRhdGFUeXBlOiB0aGlzLmdldERhdGFUeXBlKGZpZWxkLnR5cGUgYXMgc3RyaW5nKVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gZ3JvdXBhYmxlRmllbGRzO1xyXG4gIH1cclxuXHJcbnByaXZhdGUgZXh0cmFjdFNlbGVjdGFibGVGaWVsZHMoZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdKTogU2VsZWN0RmllbGRbXSB7XHJcbiAgY29uc3QgdGVtcEZpZWxkczogKFNlbGVjdEZpZWxkICYgeyBvcmRlcjogbnVtYmVyIH0pW10gPSBbXTtcclxuXHJcbiAgdGhpcy50cmF2ZXJzZUZpZWxkcyhmaWVsZHMsIChmaWVsZCkgPT4ge1xyXG4gICAgaWYgKFxyXG4gICAgICBmaWVsZC5rZXkgJiZcclxuICAgICAgZmllbGQucHJvcHMgJiZcclxuICAgICAgLy8gKChmaWVsZC5wcm9wc1snc2VsZWN0J10gJiYgZmllbGQucHJvcHNbJ3NlbGVjdCddLmhpZGRlbiA9PT0gZmFsc2UpIHx8ICFmaWVsZC5wcm9wc1snc2VsZWN0J10pICYmXHJcbiAgICAgICgoZmllbGQucHJvcHNbJ3JlcG9ydCddICYmIGZpZWxkLnByb3BzWydyZXBvcnQnXS5oaWRkZW4gPT09IGZhbHNlKSB8fCAhZmllbGQucHJvcHNbJ3JlcG9ydCddKSAmJlxyXG4gICAgICAhZmllbGQucHJvcHM/LmhpZGRlblxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnN0IGlzTnVtZXJpYyA9IFsnbnVtYmVyJywgJ2N1cnJlbmN5J10uaW5jbHVkZXMoZmllbGQudHlwZSBhcyBzdHJpbmcpO1xyXG5cclxuICAgICAgY29uc3QgdGFibGVDb25maWcgPSBmaWVsZC5wcm9wc1sndGFibGUnXSA/PyB7fTtcclxuICAgICAgY29uc3QgbWVyZ2VkUHJvcHMgPSB7IC4uLmZpZWxkLnByb3BzLCAuLi4odGFibGVDb25maWcucHJvcHMgPz8ge30pIH07XHJcbiAgICAgIGNvbnN0IG9yZGVyOiBudW1iZXIgPVxyXG4gICAgICAgICh0YWJsZUNvbmZpZy5vcmRlciBhcyBudW1iZXIgfCB1bmRlZmluZWQpID8/XHJcbiAgICAgICAgKHRhYmxlQ29uZmlnLnByb3BzPy5vcmRlciBhcyBudW1iZXIgfCB1bmRlZmluZWQpID8/XHJcbiAgICAgICAgKG1lcmdlZFByb3BzWydvcmRlciddIGFzIG51bWJlciB8IHVuZGVmaW5lZCkgPz9cclxuICAgICAgICBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcclxuXHJcbiAgICAgIHRlbXBGaWVsZHMucHVzaCh7XHJcbiAgICAgICAga2V5OiBmaWVsZC5wcm9wc1snZW50aXR5S2V5J10gPyAoZmllbGQucHJvcHNbJ2VudGl0eUtleSddIGFzIHN0cmluZykgOiAoZmllbGQua2V5IGFzIHN0cmluZyksXHJcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoZmllbGQucHJvcHMubGFiZWwgfHwgKGZpZWxkLmtleSBhcyBzdHJpbmcpKSxcclxuICAgICAgICBkYXRhVHlwZTogdGhpcy5nZXREYXRhVHlwZShmaWVsZC50eXBlIGFzIHN0cmluZyksXHJcbiAgICAgICAgaXNOdW1lcmljLFxyXG4gICAgICAgIGRlZmF1bHRWaXNpYmxlOiBmaWVsZC5wcm9wc1snZGVmYXVsdFZpc2libGUnXSAhPT0gZmFsc2UsXHJcbiAgICAgICAgYWdncmVnYXRhYmxlOiBpc051bWVyaWMgJiYgZmllbGQucHJvcHNbJ2FnZ3JlZ2F0YWJsZSddICE9PSBmYWxzZSxcclxuICAgICAgICBvcmRlclxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIHRlbXBGaWVsZHNcclxuICAgIC5zb3J0KChhLCBiKSA9PiBhLm9yZGVyIC0gYi5vcmRlcilcclxuICAgIC5tYXAoKHsgb3JkZXIsIC4uLnJlc3QgfSkgPT4gcmVzdCBhcyBTZWxlY3RGaWVsZCk7IC8vIHJlbW92ZSBvcmRlciBhZnRlciBzb3J0aW5nXHJcbn1cclxuXHJcbiAgcHJpdmF0ZSB0cmF2ZXJzZUZpZWxkcyhmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10sIGNhbGxiYWNrOiAoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICBmaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgIGNhbGxiYWNrKGZpZWxkKTtcclxuICAgICAgaWYgKGZpZWxkLmZpZWxkR3JvdXApIHtcclxuICAgICAgICB0aGlzLnRyYXZlcnNlRmllbGRzKGZpZWxkLmZpZWxkR3JvdXAsIGNhbGxiYWNrKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5nZXRBcHBsaWVkRmlsdGVyc0NvdW50KG1vZGVsOiBhbnkpOiB7IHRvdGFsOiBudW1iZXI7IGJyZWFrZG93bjogYW55IH0ge1xyXG4gIGNvbnN0IGJyZWFrZG93biA9IHtcclxuICAgIGZpbHRlcnM6IDAsXHJcbiAgICBzb3J0aW5nOiAwLFxyXG4gICAgZ3JvdXBpbmc6IDAsXHJcbiAgICBjb2x1bW5zOiAwLFxyXG4gICAgcGFnaW5hdGlvbjogMCxcclxuICAgIGV4cGFuZDogMFxyXG4gIH07XHJcblxyXG4gIC8vIEFkdmFuY2VkIGZpbHRlcnNcclxuICBpZiAobW9kZWw/LmFkdmFuY2VkRmlsdGVycyAmJiBBcnJheS5pc0FycmF5KG1vZGVsLmFkdmFuY2VkRmlsdGVycykpIHtcclxuICAgIG1vZGVsLmFkdmFuY2VkRmlsdGVycy5mb3JFYWNoKChmaWx0ZXJHcm91cDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChmaWx0ZXJHcm91cC5jb25kaXRpb25zICYmIEFycmF5LmlzQXJyYXkoZmlsdGVyR3JvdXAuY29uZGl0aW9ucykpIHtcclxuICAgICAgICBicmVha2Rvd24uZmlsdGVycyArPSBmaWx0ZXJHcm91cC5jb25kaXRpb25zLmxlbmd0aDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBTb3J0aW5nXHJcbiAgaWYgKG1vZGVsPy5zb3J0aW5nICYmIEFycmF5LmlzQXJyYXkobW9kZWwuc29ydGluZykpIHtcclxuICAgIGJyZWFrZG93bi5zb3J0aW5nID0gbW9kZWwuc29ydGluZy5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICAvLyBHcm91cGluZ1xyXG4gIGlmIChtb2RlbD8uZ3JvdXBpbmcgJiYgQXJyYXkuaXNBcnJheShtb2RlbC5ncm91cGluZykpIHtcclxuICAgIGJyZWFrZG93bi5ncm91cGluZyA9IG1vZGVsLmdyb3VwaW5nLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIC8vIENvbHVtbnNcclxuICBpZiAobW9kZWw/LmNvbHVtbnMpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KG1vZGVsLmNvbHVtbnMpKSB7XHJcbiAgICAgIGJyZWFrZG93bi5jb2x1bW5zID0gbW9kZWwuY29sdW1ucy5maWx0ZXIoKGNvbDogYW55KSA9PiBjb2wuaXNWaXNpYmxlKS5sZW5ndGg7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtb2RlbC5jb2x1bW5zID09PSAnb2JqZWN0Jykge1xyXG4gICAgICBicmVha2Rvd24uY29sdW1ucyA9IE9iamVjdC52YWx1ZXMobW9kZWwuY29sdW1ucykuZmlsdGVyKChjb2w6IGFueSkgPT4gY29sPy5pc1Zpc2libGUpLmxlbmd0aDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFBhZ2luYXRpb25cclxuICBpZiAobW9kZWw/LnBhZ2luYXRpb24pIHtcclxuICAgIGlmIChtb2RlbC5wYWdpbmF0aW9uLnRvcCkgYnJlYWtkb3duLnBhZ2luYXRpb24gKz0gMTtcclxuICAgIGlmIChtb2RlbC5wYWdpbmF0aW9uLnNraXApIGJyZWFrZG93bi5wYWdpbmF0aW9uICs9IDE7XHJcbiAgICBpZiAobW9kZWwucGFnaW5hdGlvbi5pbmNsdWRlQ291bnQpIGJyZWFrZG93bi5wYWdpbmF0aW9uICs9IDE7XHJcbiAgfVxyXG5cclxuICAvLyBFeHBhbmRcclxuICBpZiAobW9kZWw/LmV4cGFuZCAmJiBBcnJheS5pc0FycmF5KG1vZGVsLmV4cGFuZCkpIHtcclxuICAgIGJyZWFrZG93bi5leHBhbmQgPSBtb2RlbC5leHBhbmQubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIHRvdGFsOiBPYmplY3QudmFsdWVzKGJyZWFrZG93bikucmVkdWNlKChzdW0sIGNvdW50KSA9PiBzdW0gKyBjb3VudCwgMCksXHJcbiAgICBicmVha2Rvd25cclxuICB9O1xyXG59XHJcbiAgcHJpdmF0ZSBtYXBGaWVsZFR5cGUodHlwZT86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCB0eXBlTWFwOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xyXG4gICAgICAnaW5wdXQnOiAnaW5wdXQnLFxyXG4gICAgICAnbnVtYmVyJzogJ251bWJlcicsXHJcbiAgICAgICdkYXRlcGlja2VyJzogJ2RhdGVwaWNrZXInLFxyXG4gICAgICAnc2VsZWN0JzogJ3NlbGVjdCcsXHJcbiAgICAgICdjaGVja2JveCc6ICdjaGVja2JveCcsXHJcbiAgICAgICdnZW5lcmljLXNlbGVjdG9yJzogJ2dlbmVyaWMtc2VsZWN0b3InLFxyXG4gICAgICAnc3dpdGNoJzogJ3N3aXRjaCcsXHJcbiAgICAgICdyYWRpbyc6ICdyYWRpbycsXHJcbiAgICAgICd0ZXh0YXJlYSc6ICd0ZXh0YXJlYScsXHJcbiAgICAgICdjdXJyZW5jeSc6ICdudW1iZXInXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0eXBlTWFwW3R5cGUgfHwgJ2lucHV0J10gfHwgJ2lucHV0JztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RGF0YVR5cGUodHlwZT86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBkYXRhVHlwZU1hcDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcclxuICAgICAgJ2lucHV0JzogJ3N0cmluZycsXHJcbiAgICAgICdudW1iZXInOiAnbnVtYmVyJyxcclxuICAgICAgJ2RhdGVwaWNrZXInOiAnZGF0ZScsXHJcbiAgICAgICdzZWxlY3QnOiAnc3RyaW5nJyxcclxuICAgICAgJ2NoZWNrYm94JzogJ2Jvb2xlYW4nLFxyXG4gICAgICAnZ2VuZXJpYy1zZWxlY3Rvcic6ICdzdHJpbmcnLFxyXG4gICAgICAnc3dpdGNoJzogJ2Jvb2xlYW4nLFxyXG4gICAgICAncmFkaW8nOiAnc3RyaW5nJyxcclxuICAgICAgJ3RleHRhcmVhJzogJ3N0cmluZycsXHJcbiAgICAgICdjdXJyZW5jeSc6ICdudW1iZXInXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBkYXRhVHlwZU1hcFt0eXBlIHx8ICdpbnB1dCddIHx8ICdzdHJpbmcnO1xyXG4gIH1cclxuXHJcbnByaXZhdGUgZ2V0T3BlcmF0b3JzRm9yVHlwZSh0eXBlPzogc3RyaW5nKTogc3RyaW5nW10ge1xyXG4gICAgY29uc3QgZmllbGRUeXBlID0gdGhpcy5tYXBGaWVsZFR5cGUodHlwZSk7XHJcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmZpZWxkVHlwZUNvbmZpZ1tmaWVsZFR5cGUgYXMga2V5b2YgdHlwZW9mIHRoaXMuZmllbGRUeXBlQ29uZmlnXTtcclxuICAgIHJldHVybiBjb25maWcgPyBjb25maWcub3BlcmF0b3JzIDogWydlcScsICduZSddO1xyXG4gIH1cclxuXHJcbiAgLy8gRW5oYW5jZWQgT0RhdGEgbWV0aG9kcyB3aXRoIEdyb3VwQnkgYW5kIFNlbGVjdCBzdXBwb3J0XHJcbiAgYnVpbGRPRGF0YUZyb21RdWVyeU1vZGVsKG1vZGVsOiBhbnksIG9yaWdpbmFsRmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdKTogUXVlcnlQYXJhbWV0ZXJzIHtcclxuXHJcbiAgICBjb25zdCBwYXJhbXM6IFF1ZXJ5UGFyYW1ldGVycyA9IHtcclxuICAgICAgZmlsdGVyczogW10sXHJcbiAgICAgIG9yZGVyQnk6IFtdLFxyXG4gICAgICBncm91cEJ5OiBbXSxcclxuICAgICAgc2VsZWN0OiBbXSxcclxuICAgICAgYWdncmVnYXRlczogW10sXHJcbiAgICAgIGV4cGFuZDogbW9kZWwuZXhwYW5kIHx8IFtdLFxyXG4gICAgICBpbmNsdWRlQ291bnQ6IG1vZGVsLnBhZ2luYXRpb24/LmluY2x1ZGVDb3VudCB8fCBmYWxzZVxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBRdWljayBzZWFyY2hcclxuICAgIGlmIChtb2RlbC5maWx0ZXIpIHtcclxuICAgICAgY29uc3Qgc2VhcmNoYWJsZUZpZWxkcyA9IHRoaXMuZXh0cmFjdFNlbGVjdGFibGVGaWVsZHMob3JpZ2luYWxGaWVsZHMpOyAvLyBUT0RPIGdldCBhbGwgc3RyaW5ncyBmaWx0ZXJzXHJcbiAgICAgIGNvbnN0IHF1aWNrU2VhcmNoQ29uZGl0aW9uczogRmlsdGVyQ29uZGl0aW9uW10gPSBzZWFyY2hhYmxlRmllbGRzLm1hcChmaWVsZCA9PiAoe1xyXG4gICAgICAgIGZpZWxkOiBmaWVsZC5rZXksXHJcbiAgICAgICAgb3BlcmF0b3I6ICdjb250YWlucycsXHJcbiAgICAgICAgdmFsdWU6IG1vZGVsLmZpbHRlclxyXG4gICAgICB9KSk7XHJcblxyXG4gICAgICBpZiAocXVpY2tTZWFyY2hDb25kaXRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBwYXJhbXMuZmlsdGVycy5wdXNoKHtcclxuICAgICAgICAgIGxvZ2ljYWxPcGVyYXRvcjogJ29yJyxcclxuICAgICAgICAgIGNvbmRpdGlvbnM6IHF1aWNrU2VhcmNoQ29uZGl0aW9uc1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQWR2YW5jZWQgZmlsdGVyc1xyXG4gICAgaWYgKG1vZGVsLmFkdmFuY2VkRmlsdGVycyAmJiBBcnJheS5pc0FycmF5KG1vZGVsLmFkdmFuY2VkRmlsdGVycykpIHtcclxuICAgICAgcGFyYW1zLmZpbHRlcnMucHVzaCguLi5tb2RlbC5hZHZhbmNlZEZpbHRlcnMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFNvcnRpbmdcclxuICAgIGlmIChtb2RlbC5zb3J0aW5nICYmIEFycmF5LmlzQXJyYXkobW9kZWwuc29ydGluZykpIHtcclxuICAgICAgcGFyYW1zLm9yZGVyQnkgPSBtb2RlbC5zb3J0aW5nXHJcbiAgICAgICAgLmZpbHRlcigoc29ydDogYW55KSA9PiBzb3J0LmZpZWxkICYmIHNvcnQuZGlyZWN0aW9uKVxyXG4gICAgICAgIC5tYXAoKHNvcnQ6IGFueSkgPT4gKHtcclxuICAgICAgICAgIGZpZWxkOiBzb3J0LmZpZWxkLFxyXG4gICAgICAgICAgZGlyZWN0aW9uOiBzb3J0LmRpcmVjdGlvblxyXG4gICAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBHcm91cGluZ1xyXG4gICAgaWYgKG1vZGVsLmdyb3VwaW5nICYmIEFycmF5LmlzQXJyYXkobW9kZWwuZ3JvdXBpbmcpKSB7XHJcbiAgICAgIHBhcmFtcy5ncm91cEJ5ID0gbW9kZWwuZ3JvdXBpbmdcclxuICAgICAgICAuZmlsdGVyKChncm91cDogYW55KSA9PiBncm91cC5maWVsZClcclxuICAgICAgICAubWFwKChncm91cDogYW55LCBpbmRleDogbnVtYmVyKSA9PiAoe1xyXG4gICAgICAgICAgcHJvcGVydHlOYW1lOiBncm91cC5maWVsZCxcclxuICAgICAgICAgIGRpc3BsYXlOYW1lOiBncm91cC5kaXNwbGF5TmFtZSB8fCBncm91cC5maWVsZCxcclxuICAgICAgICAgIHNob3dUb3RhbDogZ3JvdXAuc2hvd1RvdGFsICE9PSBmYWxzZSxcclxuICAgICAgICAgIG9yZGVyOiBpbmRleFxyXG4gICAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAvLyBDb2x1bW5zL1NlbGVjdCAtIEhhbmRsZSBib3RoIGFycmF5IGFuZCBvYmplY3QgZm9ybWF0c1xyXG4gICAvLyBleHRyYWN0U2VsZWN0YWJsZUZpZWxkc1xyXG5pZiAobW9kZWwuY29sdW1ucykge1xyXG4gIGxldCB2aXNpYmxlQ29sdW1uczogYW55W10gPSBbXTtcclxuXHJcbiAgLy8gSGFuZGxlIGFycmF5IGZvcm1hdDogW3tmaWVsZDogJ25hbWUnLCBpc1Zpc2libGU6IHRydWUsIC4uLn0sIC4uLl1cclxuICBpZiAoQXJyYXkuaXNBcnJheShtb2RlbC5jb2x1bW5zKSkge1xyXG4gICAgdmlzaWJsZUNvbHVtbnMgPSBtb2RlbC5jb2x1bW5zLmZpbHRlcigoY29sOiBhbnkpID0+IGNvbC5pc1Zpc2libGUpO1xyXG4gIH1cclxuICAvLyBIYW5kbGUgb2JqZWN0IGZvcm1hdDoge2ZpZWxkMToge2lzVmlzaWJsZTogdHJ1ZSwgZGlzcGxheU5hbWU6ICdOYW1lJywgLi4ufSwgZmllbGQyOiB7Li4ufX1cclxuICBlbHNlIGlmICh0eXBlb2YgbW9kZWwuY29sdW1ucyA9PT0gJ29iamVjdCcpIHtcclxuICAgIHZpc2libGVDb2x1bW5zID0gT2JqZWN0LmVudHJpZXMobW9kZWwuY29sdW1ucylcclxuICAgICAgLmZpbHRlcigoW2tleSwgY29sXTogW3N0cmluZywgYW55XSkgPT4gY29sLmlzVmlzaWJsZSlcclxuICAgICAgLm1hcCgoW2tleSwgY29sXTogW3N0cmluZywgYW55XSkgPT4gKHtcclxuICAgICAgICBmaWVsZDoga2V5LCAvLyBVc2UgdGhlIG9iamVjdCBrZXkgYXMgZmllbGQgbmFtZVxyXG4gICAgICAgIC4uLmNvbCAvLyBTcHJlYWQgdGhlIGNvbHVtbiBwcm9wZXJ0aWVzXHJcbiAgICAgIH0pKTtcclxuICB9XHJcblxyXG4gIC8vIFByb2Nlc3MgdmlzaWJsZSBjb2x1bW5zIGZvciBzZWxlY3QgYW5kIGFnZ3JlZ2F0ZXNcclxuICBpZiAodmlzaWJsZUNvbHVtbnMubGVuZ3RoID4gMCkge1xyXG4gICAgcGFyYW1zLnNlbGVjdCA9IHZpc2libGVDb2x1bW5zLm1hcCgoY29sOiBhbnksIGluZGV4OiBudW1iZXIpID0+ICh7XHJcbiAgICAgIHByb3BlcnR5TmFtZTogY29sLmZpZWxkIHx8IGNvbC5rZXksIC8vIFN1cHBvcnQgYm90aCAnZmllbGQnIGFuZCAna2V5JyBwcm9wZXJ0aWVzXHJcbiAgICAgIGRpc3BsYXlOYW1lOiBjb2wuZGlzcGxheU5hbWUgfHwgY29sLmZpZWxkIHx8IGNvbC5rZXkgfHwgY29sLmxhYmVsLFxyXG4gICAgICBhZ2dyZWdhdGVGdW5jdGlvbjogY29sLmFnZ3JlZ2F0ZUZ1bmN0aW9uLFxyXG4gICAgICBpc1Zpc2libGU6IHRydWUsXHJcbiAgICAgIG9yZGVyOiBpbmRleFxyXG4gICAgfSkpO1xyXG5cclxuICAgIC8vIEV4dHJhY3QgYWdncmVnYXRlcyBmcm9tIGNvbHVtbnMgd2l0aCBhZ2dyZWdhdGUgZnVuY3Rpb25zXHJcbiAgICBjb25zdCBhZ2dyZWdhdGVDb2x1bW5zID0gdmlzaWJsZUNvbHVtbnMuZmlsdGVyKChjb2w6IGFueSkgPT4gY29sLmFnZ3JlZ2F0ZUZ1bmN0aW9uKTtcclxuICAgIHBhcmFtcy5hZ2dyZWdhdGVzID0gYWdncmVnYXRlQ29sdW1ucy5tYXAoKGNvbDogYW55KSA9PiAoe1xyXG4gICAgICBwcm9wZXJ0eU5hbWU6IGNvbC5maWVsZCB8fCBjb2wua2V5LFxyXG4gICAgICBhZ2dyZWdhdGVGdW5jdGlvbjogY29sLmFnZ3JlZ2F0ZUZ1bmN0aW9uLFxyXG4gICAgICBhbGlhczogYCR7Y29sLmFnZ3JlZ2F0ZUZ1bmN0aW9ufV8ke2NvbC5maWVsZCB8fCBjb2wua2V5fWBcclxuICAgIH0pKTtcclxuICB9XHJcbn1cclxuZWxzZXtcclxuICAgLy8gRmFsbGJhY2s6IGF1dG8tZ2VuZXJhdGUgZnJvbSBmb3JtbHkgZmllbGRzXHJcbiAgY29uc3Qgc2VsZWN0YWJsZUZpZWxkcyA9IHRoaXMuZXh0cmFjdFNlbGVjdGFibGVGaWVsZHMob3JpZ2luYWxGaWVsZHMpO1xyXG4gIC8vIEVuc3VyZSBhIGNvbHVtbiBmb3IgdGhlIElEIGZpZWxkIGV4aXN0c1xyXG4vLyBpZiAoIXNlbGVjdGFibGVGaWVsZHMuc29tZShmID0+IGYua2V5ID09PSB0aGlzLmlkRmllbGQpKSB7XHJcbi8vICAgc2VsZWN0YWJsZUZpZWxkcy51bnNoaWZ0KHtcclxuLy8gICAgIGtleTogdGhpcy5pZEZpZWxkLFxyXG4vLyAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQodGhpcy5pZEZpZWxkKSxcclxuLy8gICAgIGRhdGFUeXBlOiAnbnVtYmVyJywgLy8gb3IgdGhlIGNvcnJlY3QgdHlwZVxyXG4vLyAgICAgaXNOdW1lcmljOiBmYWxzZSxcclxuLy8gICAgIGRlZmF1bHRWaXNpYmxlOiB0cnVlLFxyXG4vLyAgICAgYWdncmVnYXRhYmxlOiBmYWxzZVxyXG4vLyAgIH0pO1xyXG4vLyB9XHJcblxyXG4gIHBhcmFtcy5zZWxlY3QgPSBzZWxlY3RhYmxlRmllbGRzLm1hcCgoZiwgaSkgPT4gKHtcclxuICAgIHByb3BlcnR5TmFtZTogZi5rZXksXHJcbiAgICBkaXNwbGF5TmFtZTogZi5sYWJlbCxcclxuICAgIGlzVmlzaWJsZTogZi5kZWZhdWx0VmlzaWJsZSxcclxuICAgIG9yZGVyOiBpXHJcbiAgfSkpO1xyXG5cclxuICBwYXJhbXMuYWdncmVnYXRlcyA9IHNlbGVjdGFibGVGaWVsZHNcclxuICAgIC5maWx0ZXIoZiA9PiBmLmFnZ3JlZ2F0YWJsZSlcclxuICAgIC5tYXAoZiA9PiAoe1xyXG4gICAgICBwcm9wZXJ0eU5hbWU6IGYua2V5LFxyXG4gICAgICBhZ2dyZWdhdGVGdW5jdGlvbjogJ3N1bScsXHJcbiAgICAgIGFsaWFzOiBgc3VtXyR7Zi5rZXl9YFxyXG4gICAgfSkpO1xyXG59XHJcblxyXG4gICAgLy8gUGFnaW5hdGlvblxyXG4gICAgaWYgKG1vZGVsLnBhZ2luYXRpb24pIHtcclxuICAgICAgaWYgKG1vZGVsLnBhZ2luYXRpb24udG9wKSB7XHJcbiAgICAgICAgcGFyYW1zLnRvcCA9IE51bWJlcihtb2RlbC5wYWdpbmF0aW9uLnRvcCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG1vZGVsLnBhZ2luYXRpb24uc2tpcCkge1xyXG4gICAgICAgIHBhcmFtcy5za2lwID0gTnVtYmVyKG1vZGVsLnBhZ2luYXRpb24uc2tpcCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG1vZGVsLnBhZ2luYXRpb24uaW5jbHVkZUNvdW50ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBwYXJhbXMuaW5jbHVkZUNvdW50ID0gbW9kZWwucGFnaW5hdGlvbi5pbmNsdWRlQ291bnQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcGFyYW1zO1xyXG4gIH1cclxuXHJcbiAgdG9PRGF0YVF1ZXJ5U3RyaW5nKHBhcmFtczogUXVlcnlQYXJhbWV0ZXJzKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBRdWVyeVBhcnNlci50b1N0cmluZyhwYXJhbXMpO1xyXG4gIH1cclxuXHJcbiAgcGFyc2VPRGF0YVF1ZXJ5KHF1ZXJ5U3RyaW5nOiBzdHJpbmcpOiBRdWVyeVBhcmFtZXRlcnMge1xyXG4gICAgcmV0dXJuIFF1ZXJ5UGFyc2VyLnBhcnNlKHF1ZXJ5U3RyaW5nKTtcclxuICB9XHJcblxyXG5cclxuICAvLyBIZWxwZXIgbWV0aG9kIHRvIGdldCBmaWVsZCBjb25maWd1cmF0aW9uXHJcbiAgZ2V0RmllbGRDb25maWcoZmllbGRLZXk6IHN0cmluZywgZmllbGRzOiBhbnlbXSk6IGFueSB7XHJcbiAgICByZXR1cm4gZmllbGRzLmZpbmQoZiA9PiBmLmtleSA9PT0gZmllbGRLZXkpO1xyXG4gIH1cclxuXHJcbiAgLy8gSGVscGVyIHRvIGdldCBhdmFpbGFibGUgYWdncmVnYXRlIGZ1bmN0aW9ucyBmb3IgbnVtZXJpYyBmaWVsZHNcclxuICBnZXRBZ2dyZWdhdGVGdW5jdGlvbnMoKTogeyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nOyB9W10ge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgeyBsYWJlbDogJ9mF2KzZhdmI2LknLCB2YWx1ZTogJ3N1bScgfSxcclxuICAgICAgeyBsYWJlbDogJ9mF2KrZiNiz2LcnLCB2YWx1ZTogJ2F2ZycgfSxcclxuICAgICAgeyBsYWJlbDogJ9i52K/YrycsIHZhbHVlOiAnY291bnQnIH0sXHJcbiAgICAgIHsgbGFiZWw6ICfYp9mE2K3YryDYp9mE2KPYr9mG2YknLCB2YWx1ZTogJ21pbicgfSxcclxuICAgICAgeyBsYWJlbDogJ9in2YTYrdivINin2YTYo9mC2LXZiScsIHZhbHVlOiAnbWF4JyB9XHJcbiAgICBdO1xyXG4gIH1cclxufVxyXG4iXX0=","// generic-search.component.ts\nimport { Component, EventEmitter, Input, Output, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { FormlyForm } from '@ngx-formly/core';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { ToolbarModule } from 'primeng/toolbar';\nimport { ButtonModule } from 'primeng/button';\nimport { InputIconModule } from 'primeng/inputicon';\nimport { IconFieldModule } from 'primeng/iconfield';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { DrawerModule } from 'primeng/drawer';\nimport { QueryBuilderService } from './query-builder.service';\nimport { InputGroupAddonModule } from 'primeng/inputgroupaddon';\nimport { InputGroupModule } from 'primeng/inputgroup';\nimport { BadgeModule } from 'primeng/badge';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"primeng/api\";\nimport * as i3 from \"primeng/button\";\nimport * as i4 from \"@angular/forms\";\nimport * as i5 from \"primeng/inputtext\";\nimport * as i6 from \"primeng/drawer\";\nimport * as i7 from \"primeng/inputgroup\";\nimport * as i8 from \"primeng/inputgroupaddon\";\nimport * as i9 from \"primeng/badge\";\nimport * as i10 from \"@ngx-translate/core\";\nexport class GenericSearchAdvanced {\n translate = inject(TranslateService);\n queryBuilder = inject(QueryBuilderService);\n drawerVisible = false;\n search = new EventEmitter();\n paginationChange = new EventEmitter();\n odataSearch = new EventEmitter();\n form = new FormGroup({});\n model = {};\n options = {};\n fields = [];\n fields_ = [];\n enableSelect = false;\n enableGroup = false;\n odataConfig = {};\n ngOnInit() {\n this.buildQueryUIFields();\n }\n get filterCount() {\n const filters = ((this.model?.advancedFilters ?? [])[0]?.conditions?.length || 0) +\n ((this.model?.sorting ?? [])?.length || 0) +\n (this.model?.pagination && this.model?.pagination?.top ? 1 : 0);\n return filters;\n }\n buildQueryUIFields() {\n this.fields_ = this.queryBuilder.buildQueryUIFields(this.fields, this.enableSelect, this.enableGroup);\n }\n onSubmit() {\n // Use the new QueryBuilderService methods\n const odataParams = this.queryBuilder.buildODataFromQueryModel(this.model, this.fields);\n // Generate query string using the unified method\n const queryString = this.queryBuilder.toODataQueryString(odataParams);\n if (this.model?.pagination && this.model?.pagination?.top) {\n this.paginationChange.emit({\n top: this.model?.pagination?.top,\n // skip:,\n });\n }\n this.search.emit({\n filter: this.model['filter'],\n query: queryString,\n // sorting:,\n // top:,\n // skip:,\n });\n }\n onReset() {\n this.model = {};\n this.form.reset();\n // this.paginationChange.emit({\n // top:10,\n // // skip:,\n // });\n // this.search.emit(this.model);\n const odataParams = this.queryBuilder.buildODataFromQueryModel(this.model, this.fields);\n // this.odataSearch.emit(odataParams);\n // Generate query string using the unified method\n const queryString = this.queryBuilder.toODataQueryString(odataParams);\n this.search.emit({\n filter: this.model['filter'],\n query: queryString,\n // sorting:,\n top: 10,\n // skip:,\n });\n }\n // Toggle drawer visibility\n toggleDrawer() {\n this.drawerVisible = !this.drawerVisible;\n }\n // Close drawer\n closeDrawer() {\n this.drawerVisible = false;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSearchAdvanced, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.8\", type: GenericSearchAdvanced, isStandalone: true, selector: \"lib-generic-search-advanced\", inputs: { model: \"model\", fields: \"fields\", enableSelect: \"enableSelect\", enableGroup: \"enableGroup\", odataConfig: \"odataConfig\" }, outputs: { search: \"search\", paginationChange: \"paginationChange\", odataSearch: \"odataSearch\" }, ngImport: i0, template: \"<div class=\\\"flex flex-wrap items-center gap-3 w-full\\\">\\r\\n <!-- Search Input with Icon -->\\r\\n <p-inputgroup class=\\\"w-full\\\">\\r\\n <input\\r\\n pInputText\\r\\n type=\\\"text\\\"\\r\\n [(ngModel)]=\\\"model['filter']\\\"\\r\\n placeholder=\\\"{{ 'SEARCH' | translate }}\\\"\\r\\n (keyup.enter)=\\\"onSubmit()\\\"\\r\\n />\\r\\n\\r\\n\\r\\n <p-inputgroup-addon>\\r\\n <p-button\\r\\n icon=\\\"pi pi-search\\\"\\r\\n severity=\\\"secondary\\\"\\r\\n (click)=\\\"onSubmit()\\\"\\r\\n ></p-button>\\r\\n </p-inputgroup-addon>\\r\\n<p-inputgroup-addon>\\r\\n <div class=\\\"relative inline-flex\\\">\\r\\n <p-button\\r\\n icon=\\\"pi pi-filter\\\"\\r\\n severity=\\\"secondary\\\"\\r\\n (onClick)=\\\"drawerVisible = true\\\">\\r\\n </p-button>\\r\\n\\r\\n <p-badge\\r\\n *ngIf=\\\"filterCount > 0\\\"\\r\\n [value]=\\\"filterCount\\\"\\r\\n severity=\\\"warn\\\"\\r\\n size=\\\"small\\\"\\r\\n class=\\\"absolute -top-0 -right-0\\\">\\r\\n </p-badge>\\r\\n </div>\\r\\n</p-inputgroup-addon>\\r\\n\\r\\n <p-inputgroup-addon *ngIf=\\\"model['filter'] || filterCount > 0\\\">\\r\\n <p-button\\r\\n icon=\\\"pi pi-times\\\"\\r\\n severity=\\\"danger\\\"\\r\\n (click)=\\\"model['filter']=''; onReset()\\\"\\r\\n ></p-button>\\r\\n </p-inputgroup-addon>\\r\\n</p-inputgroup>\\r\\n\\r\\n\\r\\n</div>\\r\\n\\r\\n<!-- Drawer for Advanced Multi-field Search -->\\r\\n @if(drawerVisible){\\r\\n<p-drawer\\r\\n [(visible)]=\\\"drawerVisible\\\"\\r\\n position=\\\"right\\\"\\r\\n [styleClass]=\\\"'!w-full md:!w-80 lg:!w-[40rem] !h-full' \\\"\\r\\n [modal]=\\\"true\\\"\\r\\n [dismissible]=\\\"true\\\"\\r\\n styleClass=\\\"p-4 w-full max-w-md max-h-[90vh] flex flex-col\\\"\\r\\n>\\r\\n <!-- Entire form wrapper -->\\r\\n <form [formGroup]=\\\"form\\\" (ngSubmit)=\\\"onSubmit(); drawerVisible=false\\\" class=\\\"flex flex-col flex-1\\\">\\r\\n <!-- Scrollable Form -->\\r\\n <div class=\\\"flex-1 overflow-auto\\\">\\r\\n <formly-form\\r\\n [form]=\\\"form\\\"\\r\\n [fields]=\\\"fields_\\\"\\r\\n [model]=\\\"model\\\"\\r\\n [options]=\\\"options\\\"\\r\\n >\\r\\n </formly-form>\\r\\n </div>\\r\\n\\r\\n </form>\\r\\n <!-- Action Buttons -->\\r\\n <ng-template pTemplate=\\\"footer\\\">\\r\\n <div class=\\\"flex justify-end mt-2 space-x-2 flex-none\\\">\\r\\n <button\\r\\n type=\\\"submit\\\"\\r\\n pButton size=\\\"small\\\"\\r\\n (click)=\\\" onSubmit(); drawerVisible=false\\\"\\r\\n label=\\\"{{ 'SEARCH' | translate }}\\\">\\r\\n </button>\\r\\n <button\\r\\n type=\\\"button\\\"\\r\\n pButton\\r\\n size=\\\"small\\\"\\r\\n class=\\\"p-button-text\\\"\\r\\n (click)=\\\"onReset(); drawerVisible=false\\\"\\r\\n >\\r\\n {{ 'CLEAR' | translate }}\\r\\n </button>\\r\\n </div>\\r\\n </ng-template>\\r\\n</p-drawer>\\r\\n\\r\\n }\\r\\n\", dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: FormlyForm, selector: \"formly-form\", inputs: [\"form\", \"model\", \"fields\", \"options\"], outputs: [\"modelChange\"] }, { kind: \"ngmodule\", type: TranslateModule }, { kind: \"ngmodule\", type: ToolbarModule }, { kind: \"directive\", type: i2.PrimeTemplate, selector: \"[pTemplate]\", inputs: [\"type\", \"pTemplate\"] }, { kind: \"ngmodule\", type: ButtonModule }, { kind: \"directive\", type: i3.ButtonDirective, selector: \"[pButton]\", inputs: [\"iconPos\", \"loadingIcon\", \"loading\", \"severity\", \"raised\", \"rounded\", \"text\", \"outlined\", \"size\", \"plain\", \"fluid\", \"label\", \"icon\", \"buttonProps\"] }, { kind: \"component\", type: i3.Button, selector: \"p-button\", inputs: [\"type\", \"iconPos\", \"icon\", \"badge\", \"label\", \"disabled\", \"loading\", \"loadingIcon\", \"raised\", \"rounded\", \"text\", \"plain\", \"severity\", \"outlined\", \"link\", \"tabindex\", \"size\", \"variant\", \"style\", \"styleClass\", \"badgeClass\", \"badgeSeverity\", \"ariaLabel\", \"buttonProps\", \"autofocus\", \"fluid\"], outputs: [\"onClick\", \"onFocus\", \"onBlur\"] }, { kind: \"ngmodule\", type: ReactiveFormsModule }, { kind: \"directive\", type: i4.ɵNgNoValidate, selector: \"form:not([ngNoForm]):not([ngNativeValidate])\" }, { kind: \"directive\", type: i4.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i4.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i4.NgControlStatusGroup, selector: \"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]\" }, { kind: \"directive\", type: i4.FormGroupDirective, selector: \"[formGroup]\", inputs: [\"formGroup\"], outputs: [\"ngSubmit\"], exportAs: [\"ngForm\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i4.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"ngmodule\", type: InputIconModule }, { kind: \"ngmodule\", type: IconFieldModule }, { kind: \"ngmodule\", type: InputTextModule }, { kind: \"directive\", type: i5.InputText, selector: \"[pInputText]\", inputs: [\"pSize\", \"variant\", \"fluid\", \"invalid\"] }, { kind: \"ngmodule\", type: DrawerModule }, { kind: \"component\", type: i6.Drawer, selector: \"p-drawer\", inputs: [\"appendTo\", \"blockScroll\", \"style\", \"styleClass\", \"ariaCloseLabel\", \"autoZIndex\", \"baseZIndex\", \"modal\", \"closeButtonProps\", \"dismissible\", \"showCloseIcon\", \"closeOnEscape\", \"transitionOptions\", \"visible\", \"position\", \"fullScreen\", \"header\", \"maskStyle\", \"closable\"], outputs: [\"onShow\", \"onHide\", \"visibleChange\"] }, { kind: \"ngmodule\", type: InputGroupModule }, { kind: \"component\", type: i7.InputGroup, selector: \"p-inputgroup, p-inputGroup, p-input-group\", inputs: [\"styleClass\"] }, { kind: \"ngmodule\", type: InputGroupAddonModule }, { kind: \"component\", type: i8.InputGroupAddon, selector: \"p-inputgroup-addon, p-inputGroupAddon\", inputs: [\"style\", \"styleClass\"] }, { kind: \"ngmodule\", type: BadgeModule }, { kind: \"component\", type: i9.Badge, selector: \"p-badge\", inputs: [\"styleClass\", \"badgeSize\", \"size\", \"severity\", \"value\", \"badgeDisabled\"] }, { kind: \"pipe\", type: i10.TranslatePipe, name: \"translate\" }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSearchAdvanced, decorators: [{\n type: Component,\n args: [{ selector: 'lib-generic-search-advanced', standalone: true, imports: [\n CommonModule,\n FormlyForm,\n TranslateModule,\n ToolbarModule,\n ButtonModule,\n ReactiveFormsModule,\n FormsModule,\n InputIconModule,\n IconFieldModule,\n InputTextModule,\n DrawerModule,\n InputGroupModule,\n InputGroupAddonModule,\n BadgeModule\n ], template: \"<div class=\\\"flex flex-wrap items-center gap-3 w-full\\\">\\r\\n <!-- Search Input with Icon -->\\r\\n <p-inputgroup class=\\\"w-full\\\">\\r\\n <input\\r\\n pInputText\\r\\n type=\\\"text\\\"\\r\\n [(ngModel)]=\\\"model['filter']\\\"\\r\\n placeholder=\\\"{{ 'SEARCH' | translate }}\\\"\\r\\n (keyup.enter)=\\\"onSubmit()\\\"\\r\\n />\\r\\n\\r\\n\\r\\n <p-inputgroup-addon>\\r\\n <p-button\\r\\n icon=\\\"pi pi-search\\\"\\r\\n severity=\\\"secondary\\\"\\r\\n (click)=\\\"onSubmit()\\\"\\r\\n ></p-button>\\r\\n </p-inputgroup-addon>\\r\\n<p-inputgroup-addon>\\r\\n <div class=\\\"relative inline-flex\\\">\\r\\n <p-button\\r\\n icon=\\\"pi pi-filter\\\"\\r\\n severity=\\\"secondary\\\"\\r\\n (onClick)=\\\"drawerVisible = true\\\">\\r\\n </p-button>\\r\\n\\r\\n <p-badge\\r\\n *ngIf=\\\"filterCount > 0\\\"\\r\\n [value]=\\\"filterCount\\\"\\r\\n severity=\\\"warn\\\"\\r\\n size=\\\"small\\\"\\r\\n class=\\\"absolute -top-0 -right-0\\\">\\r\\n </p-badge>\\r\\n </div>\\r\\n</p-inputgroup-addon>\\r\\n\\r\\n <p-inputgroup-addon *ngIf=\\\"model['filter'] || filterCount > 0\\\">\\r\\n <p-button\\r\\n icon=\\\"pi pi-times\\\"\\r\\n severity=\\\"danger\\\"\\r\\n (click)=\\\"model['filter']=''; onReset()\\\"\\r\\n ></p-button>\\r\\n </p-inputgroup-addon>\\r\\n</p-inputgroup>\\r\\n\\r\\n\\r\\n</div>\\r\\n\\r\\n<!-- Drawer for Advanced Multi-field Search -->\\r\\n @if(drawerVisible){\\r\\n<p-drawer\\r\\n [(visible)]=\\\"drawerVisible\\\"\\r\\n position=\\\"right\\\"\\r\\n [styleClass]=\\\"'!w-full md:!w-80 lg:!w-[40rem] !h-full' \\\"\\r\\n [modal]=\\\"true\\\"\\r\\n [dismissible]=\\\"true\\\"\\r\\n styleClass=\\\"p-4 w-full max-w-md max-h-[90vh] flex flex-col\\\"\\r\\n>\\r\\n <!-- Entire form wrapper -->\\r\\n <form [formGroup]=\\\"form\\\" (ngSubmit)=\\\"onSubmit(); drawerVisible=false\\\" class=\\\"flex flex-col flex-1\\\">\\r\\n <!-- Scrollable Form -->\\r\\n <div class=\\\"flex-1 overflow-auto\\\">\\r\\n <formly-form\\r\\n [form]=\\\"form\\\"\\r\\n [fields]=\\\"fields_\\\"\\r\\n [model]=\\\"model\\\"\\r\\n [options]=\\\"options\\\"\\r\\n >\\r\\n </formly-form>\\r\\n </div>\\r\\n\\r\\n </form>\\r\\n <!-- Action Buttons -->\\r\\n <ng-template pTemplate=\\\"footer\\\">\\r\\n <div class=\\\"flex justify-end mt-2 space-x-2 flex-none\\\">\\r\\n <button\\r\\n type=\\\"submit\\\"\\r\\n pButton size=\\\"small\\\"\\r\\n (click)=\\\" onSubmit(); drawerVisible=false\\\"\\r\\n label=\\\"{{ 'SEARCH' | translate }}\\\">\\r\\n </button>\\r\\n <button\\r\\n type=\\\"button\\\"\\r\\n pButton\\r\\n size=\\\"small\\\"\\r\\n class=\\\"p-button-text\\\"\\r\\n (click)=\\\"onReset(); drawerVisible=false\\\"\\r\\n >\\r\\n {{ 'CLEAR' | translate }}\\r\\n </button>\\r\\n </div>\\r\\n </ng-template>\\r\\n</p-drawer>\\r\\n\\r\\n }\\r\\n\" }]\n }], propDecorators: { search: [{\n type: Output\n }], paginationChange: [{\n type: Output\n }], odataSearch: [{\n type: Output\n }], model: [{\n type: Input\n }], fields: [{\n type: Input\n }], enableSelect: [{\n type: Input\n }], enableGroup: [{\n type: Input\n }], odataConfig: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1zZWFyY2gtYWR2YW5jZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLnVpLmNvcmUvZ2VuZXJpYy1zZWFyY2gtYWR2YW5jZWQvc3JjL2xpYi9nZW5lcmljLXNlYXJjaC1hZHZhbmNlZC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLXNlYXJjaC1hZHZhbmNlZC9zcmMvbGliL2dlbmVyaWMtc2VhcmNoLWFkdmFuY2VkLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsOEJBQThCO0FBQzlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQWEsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdFLE9BQU8sRUFBcUIsVUFBVSxFQUFxQixNQUFNLGtCQUFrQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5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QVU7d0JBQ1YsZUFBZTt3QkFDZixhQUFhO3dCQUNiLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixXQUFXO3dCQUNYLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZixlQUFlO3dCQUNmLFlBQVk7d0JBQ1osZ0JBQWdCO3dCQUNoQixxQkFBcUI7d0JBQ3JCLFdBQVc7cUJBQ1o7OEJBU1MsTUFBTTtzQkFBZixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUdFLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUs7Z0JBR0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBnZW5lcmljLXNlYXJjaC5jb21wb25lbnQudHNcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZvcm1seUZpZWxkQ29uZmlnLCBGb3JtbHlGb3JtLCBGb3JtbHlGb3JtT3B0aW9ucyB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBUb29sYmFyTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b29sYmFyJztcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcbmltcG9ydCB7IElucHV0SWNvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvaW5wdXRpY29uJztcbmltcG9ydCB7IEljb25GaWVsZE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvaWNvbmZpZWxkJztcbmltcG9ydCB7IElucHV0VGV4dE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvaW5wdXR0ZXh0JztcbmltcG9ydCB7IERyYXdlck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZHJhd2VyJztcbmltcG9ydCB7IFF1ZXJ5QnVpbGRlclNlcnZpY2UgfSBmcm9tICcuL3F1ZXJ5LWJ1aWxkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBJbnB1dEdyb3VwQWRkb25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2lucHV0Z3JvdXBhZGRvbic7XG5pbXBvcnQgeyBJbnB1dEdyb3VwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pbnB1dGdyb3VwJztcbmltcG9ydCB7IFF1ZXJ5UGFyYW1ldGVycyB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBCYWRnZU1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYmFkZ2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItZ2VuZXJpYy1zZWFyY2gtYWR2YW5jZWQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1seUZvcm0sXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIFRvb2xiYXJNb2R1bGUsXG4gICAgQnV0dG9uTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgSW5wdXRJY29uTW9kdWxlLFxuICAgIEljb25GaWVsZE1vZHVsZSxcbiAgICBJbnB1dFRleHRNb2R1bGUsXG4gICAgRHJhd2VyTW9kdWxlLFxuICAgIElucHV0R3JvdXBNb2R1bGUsXG4gICAgSW5wdXRHcm91cEFkZG9uTW9kdWxlLFxuICAgIEJhZGdlTW9kdWxlXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9nZW5lcmljLXNlYXJjaC1hZHZhbmNlZC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgR2VuZXJpY1NlYXJjaEFkdmFuY2VkIGltcGxlbWVudHMgT25Jbml0IHtcbiAgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICBwcml2YXRlIHF1ZXJ5QnVpbGRlciA9IGluamVjdChRdWVyeUJ1aWxkZXJTZXJ2aWNlKTtcblxuICBkcmF3ZXJWaXNpYmxlID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIHNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgcGFnaW5hdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb2RhdGFTZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyPFF1ZXJ5UGFyYW1ldGVycz4oKTtcblxuICBmb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gIEBJbnB1dCgpIG1vZGVsOiBhbnkgPSB7fTtcbiAgb3B0aW9uczogRm9ybWx5Rm9ybU9wdGlvbnMgPSB7fTtcbiAgQElucHV0KCkgZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW107XG4gIGZpZWxkc186IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXTtcblxuICBASW5wdXQoKSBlbmFibGVTZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZW5hYmxlR3JvdXA6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgb2RhdGFDb25maWc6IGFueSA9IHt9O1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuYnVpbGRRdWVyeVVJRmllbGRzKCk7XG4gIH1cblxuICBnZXQgZmlsdGVyQ291bnQoKXtcbiAgICBjb25zdCBmaWx0ZXJzID0gKCh0aGlzLm1vZGVsPy5hZHZhbmNlZEZpbHRlcnMgPz8gW10pWzBdPy5jb25kaXRpb25zPy5sZW5ndGggfHwgMCkgK1xuICAgICgodGhpcy5tb2RlbD8uc29ydGluZyA/PyBbXSk/Lmxlbmd0aCB8fCAwKSArXG4gICAgKHRoaXMubW9kZWw/LnBhZ2luYXRpb24gJiYgdGhpcy5tb2RlbD8ucGFnaW5hdGlvbj8udG9wID8gMSA6IDApO1xuICAgIHJldHVybiBmaWx0ZXJzO1xuICB9XG4gIHByaXZhdGUgYnVpbGRRdWVyeVVJRmllbGRzKCkge1xuICAgIHRoaXMuZmllbGRzXyA9IHRoaXMucXVlcnlCdWlsZGVyLmJ1aWxkUXVlcnlVSUZpZWxkcyh0aGlzLmZpZWxkcyx0aGlzLmVuYWJsZVNlbGVjdCx0aGlzLmVuYWJsZUdyb3VwKTtcblxuICB9XG5cbiAgb25TdWJtaXQoKSB7XG4gICAgLy8gVXNlIHRoZSBuZXcgUXVlcnlCdWlsZGVyU2VydmljZSBtZXRob2RzXG4gICAgY29uc3Qgb2RhdGFQYXJhbXMgPSB0aGlzLnF1ZXJ5QnVpbGRlci5idWlsZE9EYXRhRnJvbVF1ZXJ5TW9kZWwodGhpcy5tb2RlbCwgdGhpcy5maWVsZHMpO1xuICAgIC8vIEdlbmVyYXRlIHF1ZXJ5IHN0cmluZyB1c2luZyB0aGUgdW5pZmllZCBtZXRob2RcbiAgICBjb25zdCBxdWVyeVN0cmluZyA9IHRoaXMucXVlcnlCdWlsZGVyLnRvT0RhdGFRdWVyeVN0cmluZyhvZGF0YVBhcmFtcyk7XG4gICAgaWYodGhpcy5tb2RlbD8ucGFnaW5hdGlvbiAmJiB0aGlzLm1vZGVsPy5wYWdpbmF0aW9uPy50b3Ape1xuICAgIHRoaXMucGFnaW5hdGlvbkNoYW5nZS5lbWl0KHtcbiAgICAgIHRvcDp0aGlzLm1vZGVsPy5wYWdpbmF0aW9uPy50b3AsXG4gICAgICAgIC8vIHNraXA6LFxuICAgIH0pO1xuICB9XG4gICAgdGhpcy5zZWFyY2guZW1pdChcbiAgICAgIHtcbiAgICAgICAgZmlsdGVyOnRoaXMubW9kZWxbJ2ZpbHRlciddLFxuICAgICAgICBxdWVyeTpxdWVyeVN0cmluZyxcbiAgICAgICAgLy8gc29ydGluZzosXG4gICAgICAgIC8vIHRvcDosXG4gICAgICAgIC8vIHNraXA6LFxuXG4gICAgfVxuICApO1xuXG4gIH1cblxuICBvblJlc2V0KCkge1xuICAgIHRoaXMubW9kZWwgPSB7fTtcbiAgICB0aGlzLmZvcm0ucmVzZXQoKTtcbiAgICAvLyB0aGlzLnBhZ2luYXRpb25DaGFuZ2UuZW1pdCh7XG4gICAgLy8gICB0b3A6MTAsXG4gICAgLy8gICAgIC8vIHNraXA6LFxuICAgIC8vIH0pO1xuICAgIC8vIHRoaXMuc2VhcmNoLmVtaXQodGhpcy5tb2RlbCk7XG4gICAgIGNvbnN0IG9kYXRhUGFyYW1zID0gdGhpcy5xdWVyeUJ1aWxkZXIuYnVpbGRPRGF0YUZyb21RdWVyeU1vZGVsKHRoaXMubW9kZWwsIHRoaXMuZmllbGRzKTtcbiAgICAvLyB0aGlzLm9kYXRhU2VhcmNoLmVtaXQob2RhdGFQYXJhbXMpO1xuXG4gICAgLy8gR2VuZXJhdGUgcXVlcnkgc3RyaW5nIHVzaW5nIHRoZSB1bmlmaWVkIG1ldGhvZFxuICAgICBjb25zdCBxdWVyeVN0cmluZyA9IHRoaXMucXVlcnlCdWlsZGVyLnRvT0RhdGFRdWVyeVN0cmluZyhvZGF0YVBhcmFtcyk7XG4gICAgIHRoaXMuc2VhcmNoLmVtaXQoXG4gICAgICB7XG4gICAgICAgIGZpbHRlcjp0aGlzLm1vZGVsWydmaWx0ZXInXSxcbiAgICAgICAgcXVlcnk6cXVlcnlTdHJpbmcsXG4gICAgICAgIC8vIHNvcnRpbmc6LFxuICAgICAgICB0b3A6MTAsXG4gICAgICAgIC8vIHNraXA6LFxuXG4gICAgfVxuICApO1xuXG4gIH1cblxuXG5cbiAgLy8gVG9nZ2xlIGRyYXdlciB2aXNpYmlsaXR5XG4gIHRvZ2dsZURyYXdlcigpIHtcbiAgICB0aGlzLmRyYXdlclZpc2libGUgPSAhdGhpcy5kcmF3ZXJWaXNpYmxlO1xuICB9XG5cbiAgLy8gQ2xvc2UgZHJhd2VyXG4gIGNsb3NlRHJhd2VyKCkge1xuICAgIHRoaXMuZHJhd2VyVmlzaWJsZSA9IGZhbHNlO1xuICB9XG5cblxufVxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAtMyB3LWZ1bGxcIj5cclxuICA8IS0tIFNlYXJjaCBJbnB1dCB3aXRoIEljb24gLS0+XHJcbiAgPHAtaW5wdXRncm91cCBjbGFzcz1cInctZnVsbFwiPlxyXG4gIDxpbnB1dFxyXG4gICAgcElucHV0VGV4dFxyXG4gICAgdHlwZT1cInRleHRcIlxyXG4gICAgWyhuZ01vZGVsKV09XCJtb2RlbFsnZmlsdGVyJ11cIlxyXG4gICAgcGxhY2Vob2xkZXI9XCJ7eyAnU0VBUkNIJyB8IHRyYW5zbGF0ZSB9fVwiXHJcbiAgICAoa2V5dXAuZW50ZXIpPVwib25TdWJtaXQoKVwiXHJcbiAgLz5cclxuXHJcblxyXG4gIDxwLWlucHV0Z3JvdXAtYWRkb24+XHJcbiAgICA8cC1idXR0b25cclxuICAgICAgaWNvbj1cInBpIHBpLXNlYXJjaFwiXHJcbiAgICAgIHNldmVyaXR5PVwic2Vjb25kYXJ5XCJcclxuICAgICAgKGNsaWNrKT1cIm9uU3VibWl0KClcIlxyXG4gICAgPjwvcC1idXR0b24+XHJcbiAgPC9wLWlucHV0Z3JvdXAtYWRkb24+XHJcbjxwLWlucHV0Z3JvdXAtYWRkb24+XHJcbiAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIGlubGluZS1mbGV4XCI+XHJcbiAgICA8cC1idXR0b25cclxuICAgICAgaWNvbj1cInBpIHBpLWZpbHRlclwiXHJcbiAgICAgIHNldmVyaXR5PVwic2Vjb25kYXJ5XCJcclxuICAgICAgKG9uQ2xpY2spPVwiZHJhd2VyVmlzaWJsZSA9IHRydWVcIj5cclxuICAgIDwvcC1idXR0b24+XHJcblxyXG4gICAgPHAtYmFkZ2VcclxuICAgICAgKm5nSWY9XCJmaWx0ZXJDb3VudCA+IDBcIlxyXG4gICAgICBbdmFsdWVdPVwiZmlsdGVyQ291bnRcIlxyXG4gICAgICBzZXZlcml0eT1cIndhcm5cIlxyXG4gICAgICBzaXplPVwic21hbGxcIlxyXG4gICAgICBjbGFzcz1cImFic29sdXRlIC10b3AtMCAtcmlnaHQtMFwiPlxyXG4gICAgPC9wLWJhZGdlPlxyXG4gIDwvZGl2PlxyXG48L3AtaW5wdXRncm91cC1hZGRvbj5cclxuXHJcbiAgPHAtaW5wdXRncm91cC1hZGRvbiAqbmdJZj1cIm1vZGVsWydmaWx0ZXInXSB8fCBmaWx0ZXJDb3VudCA+IDBcIj5cclxuICAgIDxwLWJ1dHRvblxyXG4gICAgICBpY29uPVwicGkgcGktdGltZXNcIlxyXG4gICAgICBzZXZlcml0eT1cImRhbmdlclwiXHJcbiAgICAgIChjbGljayk9XCJtb2RlbFsnZmlsdGVyJ109Jyc7IG9uUmVzZXQoKVwiXHJcbiAgICA+PC9wLWJ1dHRvbj5cclxuICA8L3AtaW5wdXRncm91cC1hZGRvbj5cclxuPC9wLWlucHV0Z3JvdXA+XHJcblxyXG5cclxuPC9kaXY+XHJcblxyXG48IS0tIERyYXdlciBmb3IgQWR2YW5jZWQgTXVsdGktZmllbGQgU2VhcmNoIC0tPlxyXG4gQGlmKGRyYXdlclZpc2libGUpe1xyXG48cC1kcmF3ZXJcclxuICBbKHZpc2libGUpXT1cImRyYXdlclZpc2libGVcIlxyXG4gIHBvc2l0aW9uPVwicmlnaHRcIlxyXG4gIFtzdHlsZUNsYXNzXT1cIichdy1mdWxsIG1kOiF3LTgwIGxnOiF3LVs0MHJlbV0gIWgtZnVsbCcgXCJcclxuICBbbW9kYWxdPVwidHJ1ZVwiXHJcbiAgW2Rpc21pc3NpYmxlXT1cInRydWVcIlxyXG4gIHN0eWxlQ2xhc3M9XCJwLTQgdy1mdWxsIG1heC13LW1kIG1heC1oLVs5MHZoXSBmbGV4IGZsZXgtY29sXCJcclxuPlxyXG4gIDwhLS0gRW50aXJlIGZvcm0gd3JhcHBlciAtLT5cclxuICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIiAobmdTdWJtaXQpPVwib25TdWJtaXQoKTsgZHJhd2VyVmlzaWJsZT1mYWxzZVwiIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBmbGV4LTFcIj5cclxuICAgIDwhLS0gU2Nyb2xsYWJsZSBGb3JtIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXgtMSBvdmVyZmxvdy1hdXRvXCI+XHJcbiAgICAgIDxmb3JtbHktZm9ybVxyXG4gICAgICAgIFtmb3JtXT1cImZvcm1cIlxyXG4gICAgICAgIFtmaWVsZHNdPVwiZmllbGRzX1wiXHJcbiAgICAgICAgW21vZGVsXT1cIm1vZGVsXCJcclxuICAgICAgICBbb3B0aW9uc109XCJvcHRpb25zXCJcclxuICAgICAgPlxyXG4gICAgICA8L2Zvcm1seS1mb3JtPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gIDwvZm9ybT5cclxuICA8IS0tIEFjdGlvbiBCdXR0b25zIC0tPlxyXG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZm9vdGVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZCBtdC0yIHNwYWNlLXgtMiBmbGV4LW5vbmVcIj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICB0eXBlPVwic3VibWl0XCJcclxuICAgICAgIHBCdXR0b24gc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAoY2xpY2spPVwiIG9uU3VibWl0KCk7IGRyYXdlclZpc2libGU9ZmFsc2VcIlxyXG4gICAgICAgbGFiZWw9XCJ7eyAnU0VBUkNIJyB8IHRyYW5zbGF0ZSB9fVwiPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIHBCdXR0b25cclxuICAgICAgICBzaXplPVwic21hbGxcIlxyXG4gICAgICAgIGNsYXNzPVwicC1idXR0b24tdGV4dFwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uUmVzZXQoKTsgZHJhd2VyVmlzaWJsZT1mYWxzZVwiXHJcbiAgICAgID5cclxuICAgICAgICB7eyAnQ0xFQVInIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG48L3AtZHJhd2VyPlxyXG5cclxuIH1cclxuIl19","// sort-builder.component.ts\nimport { Component } from '@angular/core';\nimport { FieldType } from '@ngx-formly/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { SelectModule } from 'primeng/select';\nimport { ButtonModule } from 'primeng/button';\nimport { DragDropModule } from 'primeng/dragdrop';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { TranslateModule } from '@ngx-translate/core';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@angular/forms\";\nimport * as i3 from \"primeng/select\";\nimport * as i4 from \"primeng/button\";\nimport * as i5 from \"primeng/dragdrop\";\nimport * as i6 from \"primeng/tooltip\";\nimport * as i7 from \"@ngx-translate/core\";\nexport class SortBuilderComponent extends FieldType {\n sorts = [];\n directionOptions = [\n { label: 'تصاعدي (أ → ي)', value: 'asc' },\n { label: 'تنازلي (ي → أ)', value: 'desc' }\n ];\n dragStartIndex = -1;\n ngOnInit() {\n if (this.formControl.value && Array.isArray(this.formControl.value)) {\n this.sorts = this.formControl.value.map((sort) => ({\n field: sort.field || '',\n direction: sort.direction || 'asc'\n }));\n }\n }\n addSort() {\n this.sorts.push({ field: '', direction: 'asc' });\n this.updateValue();\n }\n removeSort(index) {\n this.sorts.splice(index, 1);\n this.updateValue();\n }\n moveSort(fromIndex, toIndex) {\n if (toIndex >= 0 && toIndex < this.sorts.length) {\n const movedItem = this.sorts.splice(fromIndex, 1)[0];\n this.sorts.splice(toIndex, 0, movedItem);\n this.updateValue();\n }\n }\n onDragStart(index) {\n this.dragStartIndex = index;\n }\n onDrop(event, dropIndex) {\n if (this.dragStartIndex !== -1 && this.dragStartIndex !== dropIndex) {\n this.moveSort(this.dragStartIndex, dropIndex);\n }\n this.dragStartIndex = -1;\n }\n reverseSorts() {\n this.sorts.forEach(sort => {\n sort.direction = sort.direction === 'asc' ? 'desc' : 'asc';\n });\n this.updateValue();\n }\n clearAll() {\n this.sorts = [];\n this.updateValue();\n }\n getAvailableFields(currentField) {\n const usedFields = this.sorts.map(s => s.field).filter(f => f && f !== currentField);\n return this.props['fields'].filter((field) => !usedFields.includes(field.key) || field.key === currentField);\n }\n getFieldLabel(fieldKey) {\n const field = this.props['fields'].find((f) => f.key === fieldKey);\n return field?.label || fieldKey;\n }\n getDirectionIcon(direction) {\n return direction === 'asc' ? 'pi pi-sort-up' : 'pi pi-sort-down';\n }\n getDirectionColor(direction) {\n return direction === 'asc' ? 'text-green-500' : 'text-red-500';\n }\n updateValue() {\n // Filter out empty sorts and update value\n const validSorts = this.sorts.filter(sort => sort.field && sort.direction);\n this.formControl.setValue(validSorts);\n }\n // Helper to check if it's the last item\n get isLast() {\n return false; // This is used in template context\n }\n // Method to get current sort configuration\n getSortConfiguration() {\n return this.sorts.filter(sort => sort.field && sort.direction);\n }\n // Method to load sort configuration\n loadSortConfiguration(sortConfig) {\n if (sortConfig && Array.isArray(sortConfig)) {\n this.sorts = sortConfig.map(sort => ({\n field: sort.field || '',\n direction: sort.direction || 'asc'\n }));\n this.updateValue();\n }\n }\n // Method to check if a field is already used in sorting\n isFieldUsed(fieldKey) {\n return this.sorts.some(sort => sort.field === fieldKey);\n }\n // Get the next available field\n getNextAvailableField() {\n const availableFields = this.props['fields'].filter((field) => !this.isFieldUsed(field.key));\n return availableFields.length > 0 ? availableFields[0].key : '';\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SortBuilderComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.1.8\", type: SortBuilderComponent, isStandalone: true, selector: \"formly-sort-builder\", usesInheritance: true, ngImport: i0, template: `<div class=\"sort-builder p-3 border-round border-1 surface-border\">\r\n <div class=\"mb-6\">\r\n <h5 class=\"text-lg font-semibold text-gray-900 mb-2\">{{ props.label || ('SORTING' | translate) }}</h5>\r\n <p class=\"text-gray-600 text-sm\">{{ ('PRIORITY_HINT' | translate) }}</p>\r\n </div>\r\n\r\n <!-- Sort List -->\r\n <div *ngIf=\"sorts.length > 0\" class=\"sort-list space-y-2 mb-3\">\r\n <div\r\n *ngFor=\"let sort of sorts; let i = index; let isFirst = first; let isLast = last\"\r\n class=\"sort-row p-2 border-round surface-card\"\r\n pDraggable\r\n pDroppable\r\n (onDragStart)=\"onDragStart(i)\"\r\n (onDrop)=\"onDrop($event, i)\"\r\n [ngClass]=\"{'border-left-3 border-primary': isFirst, 'border-left-3 border-200': !isFirst}\">\r\n\r\n <div class=\"grid grid-cols-4 align-items-center gap-2\">\r\n <!-- Drag Handle -->\r\n <div class=\"col-span-2 flex\">\r\n <button\r\n pButton\r\n icon=\"pi pi-bars\"\r\n type=\"button\"\r\n class=\"p-button-text p-button-plain cursor-move\"\r\n [pTooltip]=\"'DRAG_TOOLTIP' | translate\"\r\n tooltipPosition=\"top\">\r\n </button>\r\n <p-select\r\n [options]=\"getAvailableFields(sort.field)\"\r\n optionLabel=\"label\"\r\n optionValue=\"key\"\r\n [(ngModel)]=\"sort.field\"\r\n (onChange)=\"updateValue()\"\r\n [placeholder]=\"'SELECT_FIELD_SORT' | translate\"\r\n [showClear]=\"true\"\r\n appendTo=\"body\"\r\n styleClass=\"w-full\">\r\n </p-select>\r\n </div>\r\n\r\n <!-- Direction Selector -->\r\n <div class=\"col-fixed\">\r\n <p-select\r\n [options]=\"directionOptions\"\r\n [(ngModel)]=\"sort.direction\"\r\n (onChange)=\"updateValue()\"\r\n [placeholder]=\"'DIRECTION' | translate\"\r\n appendTo=\"body\"\r\n styleClass=\"w-full\">\r\n </p-select>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"col-fixed flex gap-2\" style=\"justify-content: flex-end;\">\r\n <!-- Move Up -->\r\n <button\r\n outlined\r\n style=\"width: var(--p-button-icon-only-width);\"\r\n *ngIf=\"!isFirst\"\r\n pButton\r\n icon=\"pi pi-arrow-up\"\r\n type=\"button\"\r\n class=\"p-button-sm p-button-success\"\r\n (click)=\"moveSort(i, i - 1)\"\r\n [pTooltip]=\"'MOVE_UP' | translate\"\r\n tooltipPosition=\"top\">\r\n </button>\r\n\r\n <!-- Move Down -->\r\n <button\r\n outlined\r\n style=\"width: var(--p-button-icon-only-width);\"\r\n *ngIf=\"!isLast\"\r\n pButton\r\n icon=\"pi pi-arrow-down\"\r\n type=\"button\"\r\n class=\"p-button-sm p-button-success\"\r\n (click)=\"moveSort(i, i + 1)\"\r\n [pTooltip]=\"'MOVE_DOWN' | translate\"\r\n tooltipPosition=\"top\">\r\n </button>\r\n\r\n <!-- Remove -->\r\n <button\r\n style=\"width: var(--p-button-icon-only-width);\"\r\n pButton\r\n icon=\"pi pi-times\"\r\n type=\"button\"\r\n class=\"p-button-sm p-button-danger\"\r\n (click)=\"removeSort(i)\"\r\n [pTooltip]=\"'REMOVE_SORT' | translate\"\r\n tooltipPosition=\"top\">\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Empty State -->\r\n <div *ngIf=\"sorts.length === 0\" class=\"empty-state text-center p-4 border-round surface-section\">\r\n <i class=\"pi pi-sort-alt text-4xl text-500 mb-3\"></i>\r\n <p class=\"text-500 mb-3\">{{ 'NO_SORT_RULES' | translate }}</p>\r\n <p class=\"text-400 text-sm mb-3\">{{ 'DEFAULT_ORDER' | translate }}</p>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"flex gap-2\">\r\n <button\r\n pButton\r\n icon=\"pi pi-sort-alt\"\r\n [label]=\"'ADD_SORT' | translate\"\r\n type=\"button\"\r\n class=\"p-button-outlined flex-1\"\r\n (click)=\"addSort()\">\r\n </button>\r\n\r\n <button\r\n *ngIf=\"sorts.length > 1\"\r\n pButton\r\n icon=\"pi pi-random\"\r\n [label]=\"'REVERSE_ORDER' | translate\"\r\n type=\"button\"\r\n class=\"p-button-outlined\"\r\n (click)=\"reverseSorts()\"\r\n [pTooltip]=\"'REVERSE_TOOLTIP' | translate\"\r\n tooltipPosition=\"top\">\r\n </button>\r\n\r\n <button\r\n *ngIf=\"sorts.length > 0\"\r\n pButton\r\n icon=\"pi pi-trash\"\r\n type=\"button\"\r\n class=\"p-button-outlined p-button-danger\"\r\n (click)=\"clearAll()\"\r\n [pTooltip]=\"'CLEAR_ALL_TOOLTIP' | translate\"\r\n tooltipPosition=\"top\">\r\n </button>\r\n </div>\r\n\r\n <!-- Summary -->\r\n <div *ngIf=\"sorts.length > 0\" class=\"sort-summary mt-3 p-2 border-round surface-ground\">\r\n <h5 class=\"mt-0 mb-2 text-sm\">{{ 'SORT_SUMMARY' | translate }}:</h5>\r\n <div class=\"text-sm text-500\">\r\n <span *ngFor=\"let sort of sorts; let i = index\" class=\"sort-step\">\r\n <span class=\"font-semibold\">{{ getFieldLabel(sort.field) }}</span>\r\n <span class=\"direction-badge\" [ngClass]=\"sort.direction === 'asc' ? 'bg-green-100 text-green-800' : 'bg-red-100 text-red-800'\">\r\n {{ sort.direction === 'asc' ? '▲' : '▼' }}\r\n </span>\r\n <span *ngIf=\"!isLast\"> {{ 'THEN' | translate }} </span>\r\n </span>\r\n </div>\r\n </div>\r\n</div>`, isInline: true, styles: [\"\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i2.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"ngmodule\", type: SelectModule }, { kind: \"component\", type: i3.Select, selector: \"p-select\", inputs: [\"id\", \"scrollHeight\", \"filter\", \"panelStyle\", \"styleClass\", \"panelStyleClass\", \"readonly\", \"editable\", \"tabindex\", \"placeholder\", \"loadingIcon\", \"filterPlaceholder\", \"filterLocale\", \"inputId\", \"dataKey\", \"filterBy\", \"filterFields\", \"autofocus\", \"resetFilterOnHide\", \"checkmark\", \"dropdownIcon\", \"loading\", \"optionLabel\", \"optionValue\", \"optionDisabled\", \"optionGroupLabel\", \"optionGroupChildren\", \"group\", \"showClear\", \"emptyFilterMessage\", \"emptyMessage\", \"lazy\", \"virtualScroll\", \"virtualScrollItemSize\", \"virtualScrollOptions\", \"overlayOptions\", \"ariaFilterLabel\", \"ariaLabel\", \"ariaLabelledBy\", \"filterMatchMode\", \"tooltip\", \"tooltipPosition\", \"tooltipPositionStyle\", \"tooltipStyleClass\", \"focusOnHover\", \"selectOnFocus\", \"autoOptionFocus\", \"autofocusFilter\", \"filterValue\", \"options\", \"appendTo\"], outputs: [\"onChange\", \"onFilter\", \"onFocus\", \"onBlur\", \"onClick\", \"onShow\", \"onHide\", \"onClear\", \"onLazyLoad\"] }, { kind: \"ngmodule\", type: ButtonModule }, { kind: \"directive\", type: i4.ButtonDirective, selector: \"[pButton]\", inputs: [\"iconPos\", \"loadingIcon\", \"loading\", \"severity\", \"raised\", \"rounded\", \"text\", \"outlined\", \"size\", \"plain\", \"fluid\", \"label\", \"icon\", \"buttonProps\"] }, { kind: \"ngmodule\", type: DragDropModule }, { kind: \"directive\", type: i5.Draggable, selector: \"[pDraggable]\", inputs: [\"pDraggable\", \"dragEffect\", \"dragHandle\", \"pDraggableDisabled\"], outputs: [\"onDragStart\", \"onDragEnd\", \"onDrag\"] }, { kind: \"directive\", type: i5.Droppable, selector: \"[pDroppable]\", inputs: [\"pDroppable\", \"pDroppableDisabled\", \"dropEffect\"], outputs: [\"onDragEnter\", \"onDragLeave\", \"onDrop\"] }, { kind: \"ngmodule\", type: TooltipModule }, { kind: \"directive\", type: i6.Tooltip, selector: \"[pTooltip]\", inputs: [\"tooltipPosition\", \"tooltipEvent\", \"positionStyle\", \"tooltipStyleClass\", \"tooltipZIndex\", \"escape\", \"showDelay\", \"hideDelay\", \"life\", \"positionTop\", \"positionLeft\", \"autoHide\", \"fitContent\", \"hideOnEscape\", \"pTooltip\", \"tooltipDisabled\", \"tooltipOptions\", \"appendTo\"] }, { kind: \"ngmodule\", type: TranslateModule }, { kind: \"pipe\", type: i7.TranslatePipe, name: \"translate\" }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SortBuilderComponent, decorators: [{\n type: Component,\n args: [{ selector: 'formly-sort-builder', standalone: true, imports: [\n CommonModule,\n FormsModule,\n SelectModule,\n ButtonModule,\n DragDropModule,\n TooltipModule,\n TranslateModule\n ], template: `<div class=\"sort-builder p-3 border-round border-1 surface-border\">\r\n <div class=\"mb-6\">\r\n <h5 class=\"text-lg font-semibold text-gray-900 mb-2\">{{ props.label || ('SORTING' | translate) }}</h5>\r\n <p class=\"text-gray-600 text-sm\">{{ ('PRIORITY_HINT' | translate) }}</p>\r\n </div>\r\n\r\n <!-- Sort List -->\r\n <div *ngIf=\"sorts.length > 0\" class=\"sort-list space-y-2 mb-3\">\r\n <div\r\n *ngFor=\"let sort of sorts; let i = index; let isFirst = first; let isLast = last\"\r\n class=\"sort-row p-2 border-round surface-card\"\r\n pDraggable\r\n pDroppable\r\n (onDragStart)=\"onDragStart(i)\"\r\n (onDrop)=\"onDrop($event, i)\"\r\n [ngClass]=\"{'border-left-3 border-primary': isFirst, 'border-left-3 border-200': !isFirst}\">\r\n\r\n <div class=\"grid grid-cols-4 align-items-center gap-2\">\r\n <!-- Drag Handle -->\r\n <div class=\"col-span-2 flex\">\r\n <button\r\n pButton\r\n icon=\"pi pi-bars\"\r\n type=\"button\"\r\n class=\"p-button-text p-button-plain cursor-move\"\r\n [pTooltip]=\"'DRAG_TOOLTIP' | translate\"\r\n tooltipPosition=\"top\">\r\n </button>\r\n <p-select\r\n [options]=\"getAvailableFields(sort.field)\"\r\n optionLabel=\"label\"\r\n optionValue=\"key\"\r\n [(ngModel)]=\"sort.field\"\r\n (onChange)=\"updateValue()\"\r\n [placeholder]=\"'SELECT_FIELD_SORT' | translate\"\r\n [showClear]=\"true\"\r\n appendTo=\"body\"\r\n styleClass=\"w-full\">\r\n </p-select>\r\n </div>\r\n\r\n <!-- Direction Selector -->\r\n <div class=\"col-fixed\">\r\n <p-select\r\n [options]=\"directionOptions\"\r\n [(ngModel)]=\"sort.direction\"\r\n (onChange)=\"updateValue()\"\r\n [placeholder]=\"'DIRECTION' | translate\"\r\n appendTo=\"body\"\r\n styleClass=\"w-full\">\r\n </p-select>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"col-fixed flex gap-2\" style=\"justify-content: flex-end;\">\r\n <!-- Move Up -->\r\n <button\r\n outlined\r\n style=\"width: var(--p-button-icon-only-width);\"\r\n *ngIf=\"!isFirst\"\r\n pButton\r\n icon=\"pi pi-arrow-up\"\r\n type=\"button\"\r\n class=\"p-button-sm p-button-success\"\r\n (click)=\"moveSort(i, i - 1)\"\r\n [pTooltip]=\"'MOVE_UP' | translate\"\r\n tooltipPosition=\"top\">\r\n </button>\r\n\r\n <!-- Move Down -->\r\n <button\r\n outlined\r\n style=\"width: var(--p-button-icon-only-width);\"\r\n *ngIf=\"!isLast\"\r\n pButton\r\n icon=\"pi pi-arrow-down\"\r\n type=\"button\"\r\n class=\"p-button-sm p-button-success\"\r\n (click)=\"moveSort(i, i + 1)\"\r\n [pTooltip]=\"'MOVE_DOWN' | translate\"\r\n tooltipPosition=\"top\">\r\n </button>\r\n\r\n <!-- Remove -->\r\n <button\r\n style=\"width: var(--p-button-icon-only-width);\"\r\n pButton\r\n icon=\"pi pi-times\"\r\n type=\"button\"\r\n class=\"p-button-sm p-button-danger\"\r\n (click)=\"removeSort(i)\"\r\n [pTooltip]=\"'REMOVE_SORT' | translate\"\r\n tooltipPosition=\"top\">\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Empty State -->\r\n <div *ngIf=\"sorts.length === 0\" class=\"empty-state text-center p-4 border-round surface-section\">\r\n <i class=\"pi pi-sort-alt text-4xl text-500 mb-3\"></i>\r\n <p class=\"text-500 mb-3\">{{ 'NO_SORT_RULES' | translate }}</p>\r\n <p class=\"text-400 text-sm mb-3\">{{ 'DEFAULT_ORDER' | translate }}</p>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"flex gap-2\">\r\n <button\r\n pButton\r\n icon=\"pi pi-sort-alt\"\r\n [label]=\"'ADD_SORT' | translate\"\r\n type=\"button\"\r\n class=\"p-button-outlined flex-1\"\r\n (click)=\"addSort()\">\r\n </button>\r\n\r\n <button\r\n *ngIf=\"sorts.length > 1\"\r\n pButton\r\n icon=\"pi pi-random\"\r\n [label]=\"'REVERSE_ORDER' | translate\"\r\n type=\"button\"\r\n class=\"p-button-outlined\"\r\n (click)=\"reverseSorts()\"\r\n [pTooltip]=\"'REVERSE_TOOLTIP' | translate\"\r\n tooltipPosition=\"top\">\r\n </button>\r\n\r\n <button\r\n *ngIf=\"sorts.length > 0\"\r\n pButton\r\n icon=\"pi pi-trash\"\r\n type=\"button\"\r\n class=\"p-button-outlined p-button-danger\"\r\n (click)=\"clearAll()\"\r\n [pTooltip]=\"'CLEAR_ALL_TOOLTIP' | translate\"\r\n tooltipPosition=\"top\">\r\n </button>\r\n </div>\r\n\r\n <!-- Summary -->\r\n <div *ngIf=\"sorts.length > 0\" class=\"sort-summary mt-3 p-2 border-round surface-ground\">\r\n <h5 class=\"mt-0 mb-2 text-sm\">{{ 'SORT_SUMMARY' | translate }}:</h5>\r\n <div class=\"text-sm text-500\">\r\n <span *ngFor=\"let sort of sorts; let i = index\" class=\"sort-step\">\r\n <span class=\"font-semibold\">{{ getFieldLabel(sort.field) }}</span>\r\n <span class=\"direction-badge\" [ngClass]=\"sort.direction === 'asc' ? 'bg-green-100 text-green-800' : 'bg-red-100 text-red-800'\">\r\n {{ sort.direction === 'asc' ? '▲' : '▼' }}\r\n </span>\r\n <span *ngIf=\"!isLast\"> {{ 'THEN' | translate }} </span>\r\n </span>\r\n </div>\r\n </div>\r\n</div>` }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydC1idWlsZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLXNlYXJjaC1hZHZhbmNlZC9zcmMvbGliL3NvcnQtYnVpbGRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNEJBQTRCO0FBQzVCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBbUIsTUFBTSxrQkFBa0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7OztBQTJLdEQsTUFBTSxPQUFPLG9CQUFxQixTQUFRLFNBQTBCO0lBQ2xFLEtBQUssR0FBVSxFQUFFLENBQUM7SUFDbEIsZ0JBQWdCLEdBQUc7UUFDakIsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRTtRQUN6QyxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO0tBQzNDLENBQUM7SUFFTSxjQUFjLEdBQVcsQ0FBQyxDQUFDLENBQUM7SUFFcEMsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJ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VkFDWixXQUFXLDhWQUNYLFlBQVksdy9CQUNaLFlBQVksb1FBQ1osY0FBYyxrWkFDZCxhQUFhLHFYQUNiLGVBQWU7OzJGQStKTixvQkFBb0I7a0JBektoQyxTQUFTOytCQUNFLHFCQUFxQixjQUNuQixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLFlBQVk7d0JBQ1osWUFBWTt3QkFDWixjQUFjO3dCQUNkLGFBQWE7d0JBQ2IsZUFBZTtxQkFDaEIsWUFFUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQTBKTCIsInNvdXJjZXNDb250ZW50IjpbIi8vIHNvcnQtYnVpbGRlci5jb21wb25lbnQudHNcclxuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZpZWxkVHlwZSwgRmllbGRUeXBlQ29uZmlnIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTZWxlY3RNb2R1bGUgfSBmcm9tICdwcmltZW5nL3NlbGVjdCc7XHJcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcclxuaW1wb3J0IHsgRHJhZ0Ryb3BNb2R1bGUgfSBmcm9tICdwcmltZW5nL2RyYWdkcm9wJztcclxuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9vbHRpcCc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdmb3JtbHktc29ydC1idWlsZGVyJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgU2VsZWN0TW9kdWxlLFxyXG4gICAgQnV0dG9uTW9kdWxlLFxyXG4gICAgRHJhZ0Ryb3BNb2R1bGUsXHJcbiAgICBUb29sdGlwTW9kdWxlLFxyXG4gICAgVHJhbnNsYXRlTW9kdWxlXHJcbiAgXSxcclxuICBzdHlsZVVybHM6WycuL3NvcnQtYnVpbGRlci5jb21wb25lbnQuY3NzJ10sXHJcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwic29ydC1idWlsZGVyIHAtMyBib3JkZXItcm91bmQgYm9yZGVyLTEgc3VyZmFjZS1ib3JkZXJcIj5cclxuICAgPGRpdiBjbGFzcz1cIm1iLTZcIj5cclxuICAgIDxoNSBjbGFzcz1cInRleHQtbGcgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTAwIG1iLTJcIj57eyBwcm9wcy5sYWJlbCB8fCAoJ1NPUlRJTkcnIHwgdHJhbnNsYXRlKSB9fTwvaDU+XHJcbiAgICA8cCBjbGFzcz1cInRleHQtZ3JheS02MDAgdGV4dC1zbVwiPnt7ICAoJ1BSSU9SSVRZX0hJTlQnIHwgdHJhbnNsYXRlKSB9fTwvcD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBTb3J0IExpc3QgLS0+XHJcbiAgPGRpdiAqbmdJZj1cInNvcnRzLmxlbmd0aCA+IDBcIiBjbGFzcz1cInNvcnQtbGlzdCBzcGFjZS15LTIgbWItM1wiPlxyXG4gICAgPGRpdlxyXG4gICAgICAqbmdGb3I9XCJsZXQgc29ydCBvZiBzb3J0czsgbGV0IGkgPSBpbmRleDsgbGV0IGlzRmlyc3QgPSBmaXJzdDsgbGV0IGlzTGFzdCA9IGxhc3RcIlxyXG4gICAgICBjbGFzcz1cInNvcnQtcm93IHAtMiBib3JkZXItcm91bmQgc3VyZmFjZS1jYXJkXCJcclxuICAgICAgcERyYWdnYWJsZVxyXG4gICAgICBwRHJvcHBhYmxlXHJcbiAgICAgIChvbkRyYWdTdGFydCk9XCJvbkRyYWdTdGFydChpKVwiXHJcbiAgICAgIChvbkRyb3ApPVwib25Ecm9wKCRldmVudCwgaSlcIlxyXG4gICAgICBbbmdDbGFzc109XCJ7J2JvcmRlci1sZWZ0LTMgYm9yZGVyLXByaW1hcnknOiBpc0ZpcnN0LCAnYm9yZGVyLWxlZnQtMyBib3JkZXItMjAwJzogIWlzRmlyc3R9XCI+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBncmlkLWNvbHMtNCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICA8IS0tIERyYWcgSGFuZGxlIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc3Bhbi0yIGZsZXhcIj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgcEJ1dHRvblxyXG4gICAgICAgICAgICBpY29uPVwicGkgcGktYmFyc1wiXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXRleHQgcC1idXR0b24tcGxhaW4gY3Vyc29yLW1vdmVcIlxyXG4gICAgICAgICAgICBbcFRvb2x0aXBdPVwiJ0RSQUdfVE9PTFRJUCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPHAtc2VsZWN0XHJcbiAgICAgICAgICAgIFtvcHRpb25zXT1cImdldEF2YWlsYWJsZUZpZWxkcyhzb3J0LmZpZWxkKVwiXHJcbiAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibGFiZWxcIlxyXG4gICAgICAgICAgICBvcHRpb25WYWx1ZT1cImtleVwiXHJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwic29ydC5maWVsZFwiXHJcbiAgICAgICAgICAgIChvbkNoYW5nZSk9XCJ1cGRhdGVWYWx1ZSgpXCJcclxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTRUxFQ1RfRklFTERfU09SVCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICBbc2hvd0NsZWFyXT1cInRydWVcIlxyXG4gICAgICAgICAgICBhcHBlbmRUbz1cImJvZHlcIlxyXG4gICAgICAgICAgICBzdHlsZUNsYXNzPVwidy1mdWxsXCI+XHJcbiAgICAgICAgICA8L3Atc2VsZWN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIERpcmVjdGlvbiBTZWxlY3RvciAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWZpeGVkXCI+XHJcbiAgICAgICAgICA8cC1zZWxlY3RcclxuICAgICAgICAgICAgW29wdGlvbnNdPVwiZGlyZWN0aW9uT3B0aW9uc1wiXHJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwic29ydC5kaXJlY3Rpb25cIlxyXG4gICAgICAgICAgICAob25DaGFuZ2UpPVwidXBkYXRlVmFsdWUoKVwiXHJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInRElSRUNUSU9OJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgIGFwcGVuZFRvPVwiYm9keVwiXHJcbiAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIj5cclxuICAgICAgICAgIDwvcC1zZWxlY3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gQWN0aW9ucyAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWZpeGVkIGZsZXggZ2FwLTJcIiBzdHlsZT1cImp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XCI+XHJcbiAgICAgICAgICA8IS0tIE1vdmUgVXAgLS0+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIG91dGxpbmVkXHJcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IHZhcigtLXAtYnV0dG9uLWljb24tb25seS13aWR0aCk7XCJcclxuICAgICAgICAgICAgKm5nSWY9XCIhaXNGaXJzdFwiXHJcbiAgICAgICAgICAgIHBCdXR0b25cclxuICAgICAgICAgICAgaWNvbj1cInBpIHBpLWFycm93LXVwXCJcclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tc20gcC1idXR0b24tc3VjY2Vzc1wiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJtb3ZlU29ydChpLCBpIC0gMSlcIlxyXG4gICAgICAgICAgICBbcFRvb2x0aXBdPVwiJ01PVkVfVVAnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICA8IS0tIE1vdmUgRG93biAtLT5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgb3V0bGluZWRcclxuICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogdmFyKC0tcC1idXR0b24taWNvbi1vbmx5LXdpZHRoKTtcIlxyXG4gICAgICAgICAgICAqbmdJZj1cIiFpc0xhc3RcIlxyXG4gICAgICAgICAgICBwQnV0dG9uXHJcbiAgICAgICAgICAgIGljb249XCJwaSBwaS1hcnJvdy1kb3duXCJcclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tc20gcC1idXR0b24tc3VjY2Vzc1wiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJtb3ZlU29ydChpLCBpICsgMSlcIlxyXG4gICAgICAgICAgICBbcFRvb2x0aXBdPVwiJ01PVkVfRE9XTicgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgIDwhLS0gUmVtb3ZlIC0tPlxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICBzdHlsZT1cIndpZHRoOiB2YXIoLS1wLWJ1dHRvbi1pY29uLW9ubHktd2lkdGgpO1wiXHJcbiAgICAgICAgICAgIHBCdXR0b25cclxuICAgICAgICAgICAgaWNvbj1cInBpIHBpLXRpbWVzXCJcclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tc20gcC1idXR0b24tZGFuZ2VyXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZVNvcnQoaSlcIlxyXG4gICAgICAgICAgICBbcFRvb2x0aXBdPVwiJ1JFTU9WRV9TT1JUJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gRW1wdHkgU3RhdGUgLS0+XHJcbiAgPGRpdiAqbmdJZj1cInNvcnRzLmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwiZW1wdHktc3RhdGUgdGV4dC1jZW50ZXIgcC00IGJvcmRlci1yb3VuZCBzdXJmYWNlLXNlY3Rpb25cIj5cclxuICAgIDxpIGNsYXNzPVwicGkgcGktc29ydC1hbHQgdGV4dC00eGwgdGV4dC01MDAgbWItM1wiPjwvaT5cclxuICAgIDxwIGNsYXNzPVwidGV4dC01MDAgbWItM1wiPnt7ICdOT19TT1JUX1JVTEVTJyB8IHRyYW5zbGF0ZSB9fTwvcD5cclxuICAgIDxwIGNsYXNzPVwidGV4dC00MDAgdGV4dC1zbSBtYi0zXCI+e3sgJ0RFRkFVTFRfT1JERVInIHwgdHJhbnNsYXRlIH19PC9wPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIEFjdGlvbnMgLS0+XHJcbiAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTJcIj5cclxuICAgIDxidXR0b25cclxuICAgICAgcEJ1dHRvblxyXG4gICAgICBpY29uPVwicGkgcGktc29ydC1hbHRcIlxyXG4gICAgICBbbGFiZWxdPVwiJ0FERF9TT1JUJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBjbGFzcz1cInAtYnV0dG9uLW91dGxpbmVkIGZsZXgtMVwiXHJcbiAgICAgIChjbGljayk9XCJhZGRTb3J0KClcIj5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDxidXR0b25cclxuICAgICAgKm5nSWY9XCJzb3J0cy5sZW5ndGggPiAxXCJcclxuICAgICAgcEJ1dHRvblxyXG4gICAgICBpY29uPVwicGkgcGktcmFuZG9tXCJcclxuICAgICAgW2xhYmVsXT1cIidSRVZFUlNFX09SREVSJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBjbGFzcz1cInAtYnV0dG9uLW91dGxpbmVkXCJcclxuICAgICAgKGNsaWNrKT1cInJldmVyc2VTb3J0cygpXCJcclxuICAgICAgW3BUb29sdGlwXT1cIidSRVZFUlNFX1RPT0xUSVAnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8YnV0dG9uXHJcbiAgICAgICpuZ0lmPVwic29ydHMubGVuZ3RoID4gMFwiXHJcbiAgICAgIHBCdXR0b25cclxuICAgICAgaWNvbj1cInBpIHBpLXRyYXNoXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGNsYXNzPVwicC1idXR0b24tb3V0bGluZWQgcC1idXR0b24tZGFuZ2VyXCJcclxuICAgICAgKGNsaWNrKT1cImNsZWFyQWxsKClcIlxyXG4gICAgICBbcFRvb2x0aXBdPVwiJ0NMRUFSX0FMTF9UT09MVElQJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gU3VtbWFyeSAtLT5cclxuICA8ZGl2ICpuZ0lmPVwic29ydHMubGVuZ3RoID4gMFwiIGNsYXNzPVwic29ydC1zdW1tYXJ5IG10LTMgcC0yIGJvcmRlci1yb3VuZCBzdXJmYWNlLWdyb3VuZFwiPlxyXG4gICAgPGg1IGNsYXNzPVwibXQtMCBtYi0yIHRleHQtc21cIj57eyAnU09SVF9TVU1NQVJZJyB8IHRyYW5zbGF0ZSB9fTo8L2g1PlxyXG4gICAgPGRpdiBjbGFzcz1cInRleHQtc20gdGV4dC01MDBcIj5cclxuICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IHNvcnQgb2Ygc29ydHM7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cInNvcnQtc3RlcFwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1zZW1pYm9sZFwiPnt7IGdldEZpZWxkTGFiZWwoc29ydC5maWVsZCkgfX08L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJkaXJlY3Rpb24tYmFkZ2VcIiBbbmdDbGFzc109XCJzb3J0LmRpcmVjdGlvbiA9PT0gJ2FzYycgPyAnYmctZ3JlZW4tMTAwIHRleHQtZ3JlZW4tODAwJyA6ICdiZy1yZWQtMTAwIHRleHQtcmVkLTgwMCdcIj5cclxuICAgICAgICAgIHt7IHNvcnQuZGlyZWN0aW9uID09PSAnYXNjJyA/ICfilrInIDogJ+KWvCcgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCIhaXNMYXN0XCI+IHt7ICdUSEVOJyB8IHRyYW5zbGF0ZSB9fSA8L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5gXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTb3J0QnVpbGRlckNvbXBvbmVudCBleHRlbmRzIEZpZWxkVHlwZTxGaWVsZFR5cGVDb25maWc+IHtcclxuICBzb3J0czogYW55W10gPSBbXTtcclxuICBkaXJlY3Rpb25PcHRpb25zID0gW1xyXG4gICAgeyBsYWJlbDogJ9iq2LXYp9i52K/ZiiAo2KMg4oaSINmKKScsIHZhbHVlOiAnYXNjJyB9LFxyXG4gICAgeyBsYWJlbDogJ9iq2YbYp9iy2YTZiiAo2Yog4oaSINijKScsIHZhbHVlOiAnZGVzYycgfVxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgZHJhZ1N0YXJ0SW5kZXg6IG51bWJlciA9IC0xO1xyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICh0aGlzLmZvcm1Db250cm9sLnZhbHVlICYmIEFycmF5LmlzQXJyYXkodGhpcy5mb3JtQ29udHJvbC52YWx1ZSkpIHtcclxuICAgICAgdGhpcy5zb3J0cyA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUubWFwKChzb3J0OiBhbnkpID0+ICh7XHJcbiAgICAgICAgZmllbGQ6IHNvcnQuZmllbGQgfHwgJycsXHJcbiAgICAgICAgZGlyZWN0aW9uOiBzb3J0LmRpcmVjdGlvbiB8fCAnYXNjJ1xyXG4gICAgICB9KSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRTb3J0KCkge1xyXG4gICAgdGhpcy5zb3J0cy5wdXNoKHsgZmllbGQ6ICcnLCBkaXJlY3Rpb246ICdhc2MnIH0pO1xyXG4gICAgdGhpcy51cGRhdGVWYWx1ZSgpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlU29ydChpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnNvcnRzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7XHJcbiAgfVxyXG5cclxuICBtb3ZlU29ydChmcm9tSW5kZXg6IG51bWJlciwgdG9JbmRleDogbnVtYmVyKSB7XHJcbiAgICBpZiAodG9JbmRleCA+PSAwICYmIHRvSW5kZXggPCB0aGlzLnNvcnRzLmxlbmd0aCkge1xyXG4gICAgICBjb25zdCBtb3ZlZEl0ZW0gPSB0aGlzLnNvcnRzLnNwbGljZShmcm9tSW5kZXgsIDEpWzBdO1xyXG4gICAgICB0aGlzLnNvcnRzLnNwbGljZSh0b0luZGV4LCAwLCBtb3ZlZEl0ZW0pO1xyXG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkRyYWdTdGFydChpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmRyYWdTdGFydEluZGV4ID0gaW5kZXg7XHJcbiAgfVxyXG5cclxuICBvbkRyb3AoZXZlbnQ6IGFueSwgZHJvcEluZGV4OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLmRyYWdTdGFydEluZGV4ICE9PSAtMSAmJiB0aGlzLmRyYWdTdGFydEluZGV4ICE9PSBkcm9wSW5kZXgpIHtcclxuICAgICAgdGhpcy5tb3ZlU29ydCh0aGlzLmRyYWdTdGFydEluZGV4LCBkcm9wSW5kZXgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kcmFnU3RhcnRJbmRleCA9IC0xO1xyXG4gIH1cclxuXHJcbiAgcmV2ZXJzZVNvcnRzKCkge1xyXG4gICAgdGhpcy5zb3J0cy5mb3JFYWNoKHNvcnQgPT4ge1xyXG4gICAgICBzb3J0LmRpcmVjdGlvbiA9IHNvcnQuZGlyZWN0aW9uID09PSAnYXNjJyA/ICdkZXNjJyA6ICdhc2MnO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7XHJcbiAgfVxyXG5cclxuICBjbGVhckFsbCgpIHtcclxuICAgIHRoaXMuc29ydHMgPSBbXTtcclxuICAgIHRoaXMudXBkYXRlVmFsdWUoKTtcclxuICB9XHJcblxyXG4gIGdldEF2YWlsYWJsZUZpZWxkcyhjdXJyZW50RmllbGQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgdXNlZEZpZWxkcyA9IHRoaXMuc29ydHMubWFwKHMgPT4gcy5maWVsZCkuZmlsdGVyKGYgPT4gZiAmJiBmICE9PSBjdXJyZW50RmllbGQpO1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHNbJ2ZpZWxkcyddLmZpbHRlcigoZmllbGQ6IGFueSkgPT5cclxuICAgICAgIXVzZWRGaWVsZHMuaW5jbHVkZXMoZmllbGQua2V5KSB8fCBmaWVsZC5rZXkgPT09IGN1cnJlbnRGaWVsZFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldEZpZWxkTGFiZWwoZmllbGRLZXk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMucHJvcHNbJ2ZpZWxkcyddLmZpbmQoKGY6IGFueSkgPT4gZi5rZXkgPT09IGZpZWxkS2V5KTtcclxuICAgIHJldHVybiBmaWVsZD8ubGFiZWwgfHwgZmllbGRLZXk7XHJcbiAgfVxyXG5cclxuICBnZXREaXJlY3Rpb25JY29uKGRpcmVjdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBkaXJlY3Rpb24gPT09ICdhc2MnID8gJ3BpIHBpLXNvcnQtdXAnIDogJ3BpIHBpLXNvcnQtZG93bic7XHJcbiAgfVxyXG5cclxuICBnZXREaXJlY3Rpb25Db2xvcihkaXJlY3Rpb246IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gZGlyZWN0aW9uID09PSAnYXNjJyA/ICd0ZXh0LWdyZWVuLTUwMCcgOiAndGV4dC1yZWQtNTAwJztcclxuICB9XHJcblxyXG4gIHVwZGF0ZVZhbHVlKCkge1xyXG4gICAgLy8gRmlsdGVyIG91dCBlbXB0eSBzb3J0cyBhbmQgdXBkYXRlIHZhbHVlXHJcbiAgICBjb25zdCB2YWxpZFNvcnRzID0gdGhpcy5zb3J0cy5maWx0ZXIoc29ydCA9PiBzb3J0LmZpZWxkICYmIHNvcnQuZGlyZWN0aW9uKTtcclxuICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsaWRTb3J0cyk7XHJcbiAgfVxyXG5cclxuICAvLyBIZWxwZXIgdG8gY2hlY2sgaWYgaXQncyB0aGUgbGFzdCBpdGVtXHJcbiAgZ2V0IGlzTGFzdCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBmYWxzZTsgLy8gVGhpcyBpcyB1c2VkIGluIHRlbXBsYXRlIGNvbnRleHRcclxuICB9XHJcblxyXG4gIC8vIE1ldGhvZCB0byBnZXQgY3VycmVudCBzb3J0IGNvbmZpZ3VyYXRpb25cclxuICBnZXRTb3J0Q29uZmlndXJhdGlvbigpOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5zb3J0cy5maWx0ZXIoc29ydCA9PiBzb3J0LmZpZWxkICYmIHNvcnQuZGlyZWN0aW9uKTtcclxuICB9XHJcblxyXG4gIC8vIE1ldGhvZCB0byBsb2FkIHNvcnQgY29uZmlndXJhdGlvblxyXG4gIGxvYWRTb3J0Q29uZmlndXJhdGlvbihzb3J0Q29uZmlnOiBhbnlbXSkge1xyXG4gICAgaWYgKHNvcnRDb25maWcgJiYgQXJyYXkuaXNBcnJheShzb3J0Q29uZmlnKSkge1xyXG4gICAgICB0aGlzLnNvcnRzID0gc29ydENvbmZpZy5tYXAoc29ydCA9PiAoe1xyXG4gICAgICAgIGZpZWxkOiBzb3J0LmZpZWxkIHx8ICcnLFxyXG4gICAgICAgIGRpcmVjdGlvbjogc29ydC5kaXJlY3Rpb24gfHwgJ2FzYydcclxuICAgICAgfSkpO1xyXG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBNZXRob2QgdG8gY2hlY2sgaWYgYSBmaWVsZCBpcyBhbHJlYWR5IHVzZWQgaW4gc29ydGluZ1xyXG4gIGlzRmllbGRVc2VkKGZpZWxkS2V5OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnNvcnRzLnNvbWUoc29ydCA9PiBzb3J0LmZpZWxkID09PSBmaWVsZEtleSk7XHJcbiAgfVxyXG5cclxuICAvLyBHZXQgdGhlIG5leHQgYXZhaWxhYmxlIGZpZWxkXHJcbiAgZ2V0TmV4dEF2YWlsYWJsZUZpZWxkKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBhdmFpbGFibGVGaWVsZHMgPSB0aGlzLnByb3BzWydmaWVsZHMnXS5maWx0ZXIoKGZpZWxkOiBhbnkpID0+XHJcbiAgICAgICF0aGlzLmlzRmllbGRVc2VkKGZpZWxkLmtleSlcclxuICAgICk7XHJcbiAgICByZXR1cm4gYXZhaWxhYmxlRmllbGRzLmxlbmd0aCA+IDAgPyBhdmFpbGFibGVGaWVsZHNbMF0ua2V5IDogJyc7XHJcbiAgfVxyXG59XHJcbiJdfQ==","// query-builder.component.ts\nimport { ListboxModule } from 'primeng/listbox';\nimport { ChangeDetectorRef, Component, inject, } from '@angular/core';\nimport { FieldType, FormlyForm } from '@ngx-formly/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { ButtonModule } from 'primeng/button';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { SelectModule } from 'primeng/select';\nimport { DatePickerModule } from 'primeng/datepicker';\nimport { RadioButtonModule } from 'primeng/radiobutton';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { QueryBuilderService } from './query-builder.service';\nimport { MenuModule } from 'primeng/menu';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { InputGroupAddonModule } from 'primeng/inputgroupaddon';\nimport { InputGroupModule } from 'primeng/inputgroup';\nimport { PopoverModule } from 'primeng/popover';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@angular/forms\";\nimport * as i3 from \"primeng/api\";\nimport * as i4 from \"primeng/button\";\nimport * as i5 from \"primeng/tooltip\";\nimport * as i6 from \"primeng/popover\";\nimport * as i7 from \"primeng/listbox\";\nimport * as i8 from \"@ngx-translate/core\";\nexport class QueryBuilderComponent extends FieldType {\n queryBuilderService = inject(QueryBuilderService);\n cdr = inject(ChangeDetectorRef);\n translate = inject(TranslateService);\n groups = [];\n logicalOperators = [\n { label: this.translate.instant('and'), value: 'and' },\n { label: this.translate.instant('or'), value: 'or' }\n ];\n showAppliedFilters = false;\n ngOnInit() {\n // Initialize with existing value or default group with conditions\n if (this.formControl.value && (Array.isArray(this.formControl.value) && this.formControl.value.length > 0)) {\n this.initializeAppliedConditionsWithFieldConfigs();\n this.initializeDefaultConditions();\n }\n else {\n // Start with default conditions for important fields\n this.initializeDefaultConditions();\n }\n }\n initializeAppliedConditionsWithFieldConfigs() {\n this.groups = this.formControl.value.map((group, groupIndex) => ({\n logicalOperator: group.logicalOperator || 'and',\n groupLogicalOperator: group.groupLogicalOperator || 'and',\n conditions: this.initializeConditionsWithFieldConfigs(group.conditions || [], groupIndex)\n }));\n }\n initializeConditionsWithFieldConfigs(conditions, groupIndex) {\n return conditions.map((condition, conditionIndex) => ({\n ...condition,\n operatorsForField: this.getOperatorsForField(condition.field),\n valueFieldConfig: condition.field ?\n this.generateValueFieldConfig(condition, groupIndex, conditionIndex) :\n null\n }));\n }\n initializeDefaultConditions() {\n // Get default fields using the service logic\n const defaultFields = this.getDefaultFields();\n const defaultConditions = [];\n for (let i = 0; i < defaultFields.length; i++) {\n const field = defaultFields[i];\n defaultConditions.push(this.createDefaultCondition(field, 0, i, field.props?.operator));\n }\n // this.groups = [{\n // logicalOperator: 'and',\n // groupLogicalOperator: 'and',\n // conditions: defaultConditions\n // }];\n this.groups = [{\n logicalOperator: 'and',\n groupLogicalOperator: 'and',\n conditions: defaultConditions.filter(dc => !this.groups?.some(g => g.conditions?.some((c) => c.field === dc.field &&\n c.operator === dc.operator)))\n }];\n this.updateValue();\n }\n toggleAppliedFilters() {\n if (this.showAppliedFilters == true) {\n this.initializeAppliedConditionsWithFieldConfigs();\n this.initializeDefaultConditions();\n }\n else {\n this.initializeAppliedConditionsWithFieldConfigs();\n }\n this.showAppliedFilters = !this.showAppliedFilters;\n }\n onAndClick(group, event) {\n group.logicalOperator = 'and';\n this.updateValue();\n }\n onOrClick(group, event) {\n group.logicalOperator = 'or';\n this.updateValue();\n }\n getLogicalOperatorText(operator) {\n const operatorMap = {\n 'and': this.translate.instant('and'),\n 'or': this.translate.instant('or'),\n 'not': this.translate.instant('not')\n };\n return operatorMap[operator] || operator;\n }\n getDefaultFields() {\n // Get all filterable fields\n const filterableFields = this.props['fields'].filter((field) => field.filterable !== false && field.key && this.isSupportedFieldType(field.type));\n // If no filterable fields, return empty array\n if (filterableFields.length === 0) {\n return [];\n }\n const selectedFields = filterableFields;\n return selectedFields;\n }\n isSupportedFieldType(fieldType) {\n // Only include field types that make sense for filtering\n const supportedTypes = ['input', 'number', 'datepicker', 'custom-datepicker', 'select', 'checkbox', 'generic-selector', 'switch', 'radio', 'textarea'];\n return supportedTypes.includes(fieldType);\n }\n getFieldLabel(key) {\n const f = this.props['fields']?.find((x) => x.key === key);\n return f ? f.label : '';\n }\n createDefaultCondition(field, groupIndex, conditionIndex, operator) {\n const defaultCondition = {\n field: field.key,\n operator: operator ? operator : this.getDefaultOperator(field.type),\n value: this.getDefaultValue(field.type),\n valueFieldConfig: null,\n operatorsForField: this.getOperatorsForField(field),\n };\n // Generate field config for this condition\n defaultCondition.valueFieldConfig = this.generateValueFieldConfig(defaultCondition, groupIndex, conditionIndex);\n return defaultCondition;\n }\n get filterCount() {\n const filters = ((this.model?.advancedFilters ?? [])[0]?.conditions?.length || 0) +\n ((this.model?.sorting ?? [])?.length || 0) +\n (this.model?.pagination && this.model?.pagination?.top ? 1 : 0);\n return filters;\n }\n // Field type and operator methods that use QueryBuilderService logic\n getFieldType(fieldKey) {\n const field = this.props['fields'].find((f) => f.key === fieldKey);\n return field?.type || 'input';\n }\n getOperatorsForField(field) {\n if (!field)\n return [];\n let fieldKey;\n if (typeof field === 'object' && field !== null) {\n fieldKey = field['key'];\n }\n else {\n fieldKey = field;\n }\n const field_ = this.props['fields'].find((f) => f.key === fieldKey);\n // Use operators from the field configuration\n const operators = field_?.operators || this.queryBuilderService['getOperatorsForType'](field_?.type);\n return operators.map((op) => ({\n label: this.getOperatorLabel(op).label,\n icon: this.getOperatorLabel(op).icon,\n value: op\n }));\n }\n getOperatorLabel(operator) {\n const map = {\n eq: { label: this.translate.instant('eq'), icon: 'pi pi-equals' },\n ne: { label: this.translate.instant('ne'), icon: 'pi pi-hashtag' },\n contains: { label: this.translate.instant('contains'), icon: 'pi pi-search' },\n startswith: { label: this.translate.instant('startswith'), icon: 'pi pi-arrow-right' },\n endswith: { label: this.translate.instant('endswith'), icon: 'pi pi-arrow-left' },\n gt: { label: this.translate.instant('gt'), icon: 'pi pi-chevron-right' },\n ge: { label: this.translate.instant('ge'), icon: 'pi pi-angle-double-right' },\n lt: { label: this.translate.instant('lt'), icon: 'pi pi-chevron-left' },\n le: { label: this.translate.instant('le'), icon: 'pi pi-angle-double-left' },\n in: { label: this.translate.instant('in'), icon: 'pi pi-list' },\n notin: { label: this.translate.instant('notin'), icon: 'pi pi-ban' },\n };\n return map[operator] || { label: operator, icon: 'pi pi-question' };\n }\n getDefaultOperator(fieldType) {\n // Use service's field type config\n const fieldConfig = this.queryBuilderService['fieldTypeConfig'][fieldType];\n return fieldConfig ? fieldConfig.defaultOperator : 'contains';\n }\n getDefaultValue(fieldType) {\n // Use service's field type config\n const fieldConfig = this.queryBuilderService['fieldTypeConfig'][fieldType];\n return fieldConfig ? fieldConfig.defaultValue : '';\n }\n getFieldProps(fieldKey) {\n const field = this.props['fields'].find((f) => f.key === fieldKey);\n // Return props without label to avoid duplication\n const props = { ...field?.props };\n delete props.label;\n delete props.loadDefault;\n return props;\n }\n generateValueFieldConfig(condition, groupIndex, conditionIndex) {\n const fieldType = this.getFieldType(condition.field);\n const fieldProps = this.getFieldProps(condition.field);\n const fieldKey = this.getConditionValueKey(groupIndex, conditionIndex);\n return {\n key: fieldKey,\n type: fieldType,\n wrappers: [],\n props: {\n ...fieldProps, // Include all other props from the original field\n placeholder: '',\n loadDefault: false,\n change: (field, event) => {\n this.updateValue();\n }\n },\n hooks: {\n onInit: (field) => {\n if (field.formControl && condition.value !== undefined) {\n field.formControl.setValue(condition.value, { emitEvent: false });\n }\n }\n },\n modelOptions: {\n updateOn: 'change'\n }\n };\n }\n getConditionValueKey(groupIndex, conditionIndex) {\n return `condition_${groupIndex}_${conditionIndex}_value`;\n }\n // Group Management\n addGroup() {\n this.groups.push({\n logicalOperator: 'and',\n groupLogicalOperator: 'and',\n conditions: []\n });\n this.updateValue();\n }\n // removeGroup(groupIndex: number) {\n // this.groups.splice(groupIndex, 1);\n // this.updateValue();\n // }\n removeGroup(groupIndex) {\n if (this.groups[groupIndex]) {\n // Get all field keys for this group before deleting\n const fieldKeysToRemove = [];\n // Collect all condition field keys in this group\n if (this.groups[groupIndex].conditions) {\n for (let c = 0; c < this.groups[groupIndex].conditions.length; c++) {\n const fieldKey = this.getConditionValueKey(groupIndex, c);\n fieldKeysToRemove.push(fieldKey);\n }\n }\n // Remove the group\n this.groups.splice(groupIndex, 1);\n // Remove all associated fields from model\n this.removeMultipleFromModel(fieldKeysToRemove);\n this.updateValue();\n }\n }\n // Remove multiple fields from formly model\n removeMultipleFromModel(fieldKeys) {\n fieldKeys.forEach(fieldKey => {\n this.removeFromModel(fieldKey);\n });\n }\n // Condition Management\n addCondition(groupIndex = 0) {\n if (!this.groups[groupIndex]) {\n this.addGroup();\n }\n const newCondition = {\n field: '',\n operator: 'eq',\n value: '',\n valueFieldConfig: {}\n };\n const conditionIndex = this.groups[groupIndex].conditions.length;\n newCondition.valueFieldConfig = this.generateValueFieldConfig(newCondition, groupIndex, conditionIndex);\n this.groups[groupIndex].conditions.push(newCondition);\n this.updateValue();\n }\n onFieldChange(condition, groupIndex, conditionIndex) {\n condition.operator = this.getDefaultOperator(this.getFieldType(condition.field));\n condition.value = this.getDefaultValue(this.getFieldType(condition.field));\n // Generate and store the field config when field changes\n condition.valueFieldConfig = this.generateValueFieldConfig(condition, groupIndex, conditionIndex);\n condition.operatorsForField = this.getOperatorsForField(condition.field);\n this.updateValue();\n }\n addConditionToLastGroup() {\n const lastGroupIndex = this.groups.length - 1;\n if (lastGroupIndex >= 0) {\n this.addCondition(lastGroupIndex);\n }\n else {\n this.addGroup();\n this.addCondition(0);\n }\n }\n removeCondition(groupIndex, conditionIndex) {\n if (this.groups[groupIndex]) {\n // Get the field key before deleting so we can remove from model\n const fieldKey = this.getConditionValueKey(groupIndex, conditionIndex);\n // Using delete operator (sets to undefined, then we filter)\n delete this.groups[groupIndex].conditions[conditionIndex];\n // Remove the undefined entries from conditions array\n this.groups[groupIndex].conditions = this.groups[groupIndex].conditions.filter((condition) => condition !== undefined);\n // Remove empty groups\n if (this.groups[groupIndex].conditions.length === 0 && this.groups.length > 1) {\n delete this.groups[groupIndex];\n // Remove undefined groups from array\n this.groups = this.groups.filter(group => group !== undefined);\n }\n // Remove from formly model\n this.removeFromModel(fieldKey);\n this.updateValue();\n }\n }\n // Remove the field from formly model\n removeFromModel(fieldKey) {\n if (this.model && this.model.hasOwnProperty(fieldKey)) {\n delete this.model[fieldKey];\n }\n // Also update the form control to ensure sync\n if (this.formControl.value && this.formControl.value.hasOwnProperty(fieldKey)) {\n const updatedValue = { ...this.formControl.value };\n delete updatedValue[fieldKey];\n this.formControl.setValue(updatedValue);\n }\n }\n // Value Management\n updateValue() {\n // Sync condition values from form model with safe access\n for (let g = 0; g < this.groups.length; g++) {\n const group = this.groups[g];\n for (let c = 0; c < group.conditions.length; c++) {\n const condition = group.conditions[c];\n const fieldKey = this.getConditionValueKey(g, c);\n try {\n const modelValue = this.model?.[fieldKey];\n if (modelValue !== undefined) {\n condition.value = modelValue;\n }\n }\n catch (error) {\n }\n }\n }\n const filteredGroups = [];\n for (let g = 0; g < this.groups.length; g++) {\n const group = this.groups[g];\n const validConditions = [];\n for (let c = 0; c < group.conditions.length; c++) {\n const condition = group.conditions[c];\n if (condition.field &&\n condition.operator &&\n condition.value !== undefined &&\n condition.value !== null &&\n condition.value !== '') {\n validConditions.push(condition);\n }\n }\n if (validConditions.length > 0) {\n filteredGroups.push({ ...group, conditions: validConditions });\n }\n }\n this.formControl.setValue(filteredGroups);\n this.cdr.detectChanges();\n }\n clearAll() {\n this.groups = [];\n // Completely reset the form and model\n this.form.reset();\n // Manually set model to empty object\n Object.keys(this.model).forEach(key => {\n delete this.model[key];\n });\n this.addGroup();\n }\n // Helper methods\n getQueryStructure() {\n return this.groups;\n }\n loadQueryStructure(queryStructure) {\n if (queryStructure && Array.isArray(queryStructure)) {\n this.groups = queryStructure.map((group, groupIndex) => ({\n logicalOperator: group.logicalOperator || 'and',\n groupLogicalOperator: group.groupLogicalOperator || 'and',\n conditions: this.initializeConditionsWithFieldConfigs(group.conditions || [], groupIndex)\n }));\n this.updateValue();\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: QueryBuilderComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.8\", type: QueryBuilderComponent, isStandalone: true, selector: \"formly-query-builder\", usesInheritance: true, ngImport: i0, template: \"<div>\\r\\n\\r\\n <!-- Groups Container with Connecting Lines -->\\r\\n <div class=\\\"groups-container\\\" #groupsContainer>\\r\\n <div *ngFor=\\\"let group of groups; let groupIndex = index\\\"\\r\\n class=\\\"group-wrapper relative\\\"\\r\\n #groupElement>\\r\\n\\r\\n <!-- Vertical Connector Line from Previous Group -->\\r\\n<div *ngIf=\\\"groupIndex > 0\\\" class=\\\"vertical-connector\\\">\\r\\n <div class=\\\"vertical-line\\\"></div>\\r\\n\\r\\n <!-- Operator Button -->\\r\\n <button\\r\\n type=\\\"button\\\"\\r\\n class=\\\"group-logical-operator-box\\\"\\r\\n [class.and]=\\\"group.groupLogicalOperator === 'and'\\\"\\r\\n [class.or]=\\\"group.groupLogicalOperator === 'or'\\\"\\r\\n (click)=\\\"opPopover.toggle($event)\\\">\\r\\n <span class=\\\"operator-text\\\">\\r\\n {{ getLogicalOperatorText(group.groupLogicalOperator || 'and') }}\\r\\n </span>\\r\\n <div class=\\\"connector-arrow\\\"></div>\\r\\n </button>\\r\\n\\r\\n <!-- Popover -->\\r\\n <p-popover #opPopover appendTo=\\\"body\\\">\\r\\n <div class=\\\"w-12rem\\\">\\r\\n <p-listbox\\r\\n [options]=\\\"logicalOperators\\\"\\r\\n optionLabel=\\\"label\\\"\\r\\n optionValue=\\\"value\\\"\\r\\n [(ngModel)]=\\\"group.groupLogicalOperator\\\"\\r\\n (onChange)=\\\" opPopover.toggle($event)\\\"\\r\\n [style]=\\\"{ width: '100%' }\\\">\\r\\n </p-listbox>\\r\\n </div>\\r\\n </p-popover>\\r\\n</div>\\r\\n\\r\\n <div class=\\\"group-container mb-6 p-1 bg-white rounded-lg border-l-4 border-t-1 border-b-1 border-r-1 shadow-sm transition-all duration-300 relative\\\"\\r\\n [class.border-blue-500]=\\\"group.logicalOperator === 'and'\\\"\\r\\n [class.border-or-500]=\\\"group.logicalOperator === 'or'\\\"\\r\\n [class.pulse]=\\\"groupIndex === 0\\\">\\r\\n\\r\\n <!-- Rounded Button for \\\"\\u0631\\u0628\\u0637 \\u0627\\u0644\\u0634\\u0631\\u0648\\u0637\\\" on left border -->\\r\\n<div\\r\\n class=\\\"absolute -left-4 top-1/2 transform -translate-y-1/2 z-10 transition-all duration-300\\\"\\r\\n\\r\\n>\\r\\n\\r\\n\\r\\n\\r\\n<!-- Logical Operator Popover Button -->\\r\\n<p-button\\r\\n [severity]=\\\"group.logicalOperator === 'and' ? 'success' : 'info'\\\"\\r\\n [styleClass]=\\\"group.logicalOperator === 'and'\\r\\n ? 'p-button-icon-only p-button-rounded p-button-sm logical-and'\\r\\n : 'p-button-icon-only p-button-rounded p-button-sm logical-or'\\\"\\r\\n (click)=\\\"opPopover.toggle($event)\\\">\\r\\n {{group.logicalOperator === 'and' ? ('and' | translate) : ('or' | translate)}}\\r\\n</p-button>\\r\\n\\r\\n<!-- Popover for Operator Selection -->\\r\\n<p-popover #opPopover appendTo=\\\"body\\\">\\r\\n <div class=\\\"w-10rem\\\">\\r\\n <p-listbox\\r\\n [options]=\\\"[\\r\\n { label: 'and' | translate, value: 'and' },\\r\\n { label: 'or' | translate, value: 'or' }\\r\\n ]\\\"\\r\\n optionLabel=\\\"label\\\"\\r\\n optionValue=\\\"value\\\"\\r\\n [(ngModel)]=\\\"group.logicalOperator\\\"\\r\\n (onChange)=\\\"updateValue(); opPopover.toggle($event)\\\"\\r\\n [style]=\\\"{ width: '100%' }\\\">\\r\\n <ng-template let-item pTemplate=\\\"item\\\">\\r\\n {{ item.label }}\\r\\n </ng-template>\\r\\n </p-listbox>\\r\\n </div>\\r\\n</p-popover>\\r\\n\\r\\n</div>\\r\\n\\r\\n\\r\\n\\r\\n <!-- Group Header -->\\r\\n <div class=\\\"group-header-wrapper mb-4 pl-8\\\">\\r\\n <div class=\\\"group-header flex justify-between items-center\\\">\\r\\n\\r\\n <div class=\\\"flex gap-1\\\">\\r\\n <button\\r\\n pButton\\r\\n icon=\\\"pi pi-plus\\\"\\r\\n type=\\\"button\\\"\\r\\n class=\\\"p-button-success p-button p-button-sm !p-1.5 rounded-md transition-colors\\\"\\r\\n (click)=\\\"addCondition(groupIndex)\\\"\\r\\n pTooltip=\\\"{{ 'ADD_CONDITION' | translate }}\\\"\\r\\n tooltipPosition=\\\"top\\\">\\r\\n </button>\\r\\n @if (filterCount > 0) {\\r\\n <button\\r\\n pButton\\r\\n type=\\\"button\\\"\\r\\n icon=\\\"pi pi-filter\\\"\\r\\n class=\\\"p-button-outlined p-button-sm\\\"\\r\\n (click)=\\\"toggleAppliedFilters()\\\">\\r\\n {{ (showAppliedFilters ? 'SHOW_ALL' : 'SHOW_APPLIED') | translate }}\\r\\n </button>\\r\\n }\\r\\n <button\\r\\n *ngIf=\\\"groups.length > 1\\\"\\r\\n pButton\\r\\n icon=\\\"pi pi-times\\\"\\r\\n type=\\\"button\\\"\\r\\n class=\\\"p-button-danger p-button p-button-sm !p-1.5 rounded-md transition-colors\\\"\\r\\n (click)=\\\"removeGroup(groupIndex)\\\"\\r\\n pTooltip=\\\"{{ 'DELETE_GROUP' | translate }}\\\"\\r\\n tooltipPosition=\\\"top\\\">\\r\\n </button>\\r\\n</div>\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n <!-- Conditions in this group -->\\r\\n <div *ngFor=\\\"let condition of group.conditions; let conditionIndex = index\\\"\\r\\n class=\\\"p-1 bg-gray-50 \\\">\\r\\n <div class=\\\"grid grid-cols-1 gap-1 items-center\\\">\\r\\n <!-- Field Selector -->\\r\\n <div class=\\\"md:col-span-2\\\">\\r\\n <div class=\\\"flex w-full rounded-md overflow-hidden border border-gray-300 bg-white shadow-sm\\\">\\r\\n <!-- Field Selector Button -->\\r\\n <div style=\\\"align-items: center;display: flex; min-width: 130px;max-width: 130px;\\\" class=\\\"flex-shrink-0 \\\">\\r\\n <button\\r\\n type=\\\"button\\\"\\r\\n style=\\\"height: -webkit-fill-available;\\\"\\r\\n class=\\\"flex items-center justify-between w-full px-3 py-2 text-sm bg-white hover:bg-gray-50 focus:outline-none focus:ring-2 focus:z-10\\\"\\r\\n (click)=\\\"overlay.toggle($event)\\\">\\r\\n <span style=\\\"\\r\\n display: inline-block;\\r\\n max-width: 100px;\\r\\n overflow: hidden;\\r\\n text-overflow: ellipsis;\\r\\n white-space: nowrap;\\r\\n \\\">{{ getFieldLabel(condition.field) || ('SELECT_FIELD' | translate) }}</span>\\r\\n <i class=\\\"pi pi-chevron-down mr-2 ml-2 text-xs\\\"></i>\\r\\n </button>\\r\\n\\r\\n <!-- Overlay Content -->\\r\\n <p-popover #overlay appendTo=\\\"body\\\">\\r\\n <div class=\\\"w-60\\\">\\r\\n <p-listbox\\r\\n tabindex=\\\"0\\\"\\r\\n [options]=\\\"props['fields']\\\"\\r\\n optionLabel=\\\"label\\\"\\r\\n optionValue=\\\"key\\\"\\r\\n [(ngModel)]=\\\"condition.field\\\"\\r\\n (onChange)=\\\"onFieldChange(condition, groupIndex, conditionIndex); overlay.toggle($event)\\\"\\r\\n [style]=\\\"{ width: '100%' }\\\">\\r\\n </p-listbox>\\r\\n </div>\\r\\n </p-popover>\\r\\n </div>\\r\\n <!-- Operator Button -->\\r\\n <div style=\\\"align-items: center;display: flex;\\\" class=\\\"flex-shrink-0 border-l border-r border-gray-300\\\">\\r\\n <button\\r\\n type=\\\"button\\\"\\r\\n class=\\\"flex items-center justify-center w-full px-3 py-2 text-sm bg-gray-50 hover:bg-gray-100 focus:outline-none focus:ring-2 focus:z-10\\\"\\r\\n style=\\\"height: -webkit-fill-available;\\\"\\r\\n pTooltip=\\\"{{ getOperatorLabel(condition.operator).label }}\\\"\\r\\n (click)=\\\"opPopover.toggle($event)\\\">\\r\\n <i [class]=\\\"getOperatorLabel(condition.operator).icon\\\"></i>\\r\\n </button>\\r\\n\\r\\n <p-popover #opPopover appendTo=\\\"body\\\">\\r\\n <div class=\\\"w-60\\\">\\r\\n <p-listbox\\r\\n [options]=\\\"condition.operatorsForField\\\"\\r\\n optionLabel=\\\"label\\\"\\r\\n optionValue=\\\"value\\\"\\r\\n [(ngModel)]=\\\"condition.operator\\\"\\r\\n (onChange)=\\\"updateValue();opPopover.toggle($event)\\\"\\r\\n [style]=\\\"{ width: '100%' }\\\">\\r\\n </p-listbox>\\r\\n </div>\\r\\n </p-popover>\\r\\n </div>\\r\\n <!-- Form Field -->\\r\\n <div style=\\\"background: #f9fafb\\\" class=\\\"flex-grow p-1\\\">\\r\\n <formly-form\\r\\n [form]=\\\"form\\\"\\r\\n [fields]=\\\"[condition.valueFieldConfig]\\\"\\r\\n [model]=\\\"model\\\">\\r\\n </formly-form>\\r\\n </div>\\r\\n\\r\\n\\r\\n\\r\\n <!-- Delete Button -->\\r\\n <div style=\\\"align-items: center;display: flex;\\\" class=\\\"flex-shrink-0\\\">\\r\\n <button\\r\\n style=\\\"height: -webkit-fill-available;\\\"\\r\\n class=\\\"flex items-center justify-center w-full px-3 py-2 text-sm bg-red-50 text-red-600 hover:bg-red-100 focus:outline-none focus:ring-2 focus:ring-red-500 focus:z-10\\\"\\r\\n type=\\\"button\\\"\\r\\n (click)=\\\"removeCondition(groupIndex, conditionIndex)\\\"\\r\\n pTooltip=\\\"\\u062D\\u0630\\u0641 \\u0627\\u0644\\u0634\\u0631\\u0637\\\"\\r\\n tooltipPosition=\\\"top\\\">\\r\\n <i class=\\\"pi pi-times\\\"></i>\\r\\n </button>\\r\\n </div>\\r\\n</div>\\r\\n </div>\\r\\n\\r\\n\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n <!-- Group Footer -->\\r\\n <div class=\\\"group-footer flex justify-between items-center mt-3 pt-3 border-t border-gray-200 \\\">\\r\\n <small class=\\\"text-gray-500\\\">\\r\\n {{ group.conditions.length }} \\u0634\\u0631\\u0637 \\u0641\\u064A \\u0647\\u0630\\u0647 \\u0627\\u0644\\u0645\\u062C\\u0645\\u0648\\u0639\\u0629\\r\\n </small>\\r\\n <small class=\\\"text-gray-500\\\">\\r\\n <span *ngIf=\\\"groupIndex > 0\\\">\\r\\n \\u0645\\u0631\\u062A\\u0628\\u0637 \\u0645\\u0639 \\u0627\\u0644\\u0633\\u0627\\u0628\\u0642\\u0629 \\u0628\\u0640 <strong [class.text-blue-600]=\\\"group.groupLogicalOperator === 'and'\\\"\\r\\n [class.text-amber-600]=\\\"group.groupLogicalOperator === 'or'\\\">\\r\\n {{ group.groupLogicalOperator === 'and' ? '\\u0648' : '\\u0623\\u0648' }}\\r\\n </strong>\\r\\n </span>\\r\\n </small>\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n <!-- Actions -->\\r\\n<div class=\\\"flex flex-wrap gap-3 mt-6\\\">\\r\\n <button\\r\\n pButton\\r\\n type=\\\"button\\\"\\r\\n icon=\\\"pi pi-plus\\\"\\r\\n [label]=\\\"'GROUP' | translate\\\"\\r\\n class=\\\"p-button-outlined p-button-sm !bg-white !border !border-blue-500 !text-blue-600 hover:!bg-blue-50 transition-colors flex items-center gap-2\\\"\\r\\n (click)=\\\"addGroup();\\\">\\r\\n </button>\\r\\n\\r\\n <button\\r\\n pButton\\r\\n type=\\\"button\\\"\\r\\n icon=\\\"pi pi-plus\\\"\\r\\n [label]=\\\"'CONDITION' | translate\\\"\\r\\n class=\\\"p-button-outlined p-button-sm !bg-white !border !border-blue-500 !text-blue-600 hover:!bg-blue-50 transition-colors flex items-center gap-2\\\"\\r\\n (click)=\\\"addConditionToLastGroup()\\\">\\r\\n </button>\\r\\n\\r\\n <button\\r\\n *ngIf=\\\"groups.length > 0\\\"\\r\\n pButton\\r\\n type=\\\"button\\\"\\r\\n icon=\\\"pi pi-trash\\\"\\r\\n [label]=\\\"'CLEAR' | translate\\\"\\r\\n class=\\\"p-button-danger p-button-outlined p-button-sm !bg-white !border !border-red-500 !text-red-600 hover:!bg-red-50 transition-colors flex items-center gap-2\\\"\\r\\n (click)=\\\"clearAll()\\\">\\r\\n </button>\\r\\n</div>\\r\\n\\r\\n<!-- Empty State -->\\r\\n<div *ngIf=\\\"groups.length === 0\\\" class=\\\"empty-state text-center p-6 border-2 border-dashed border-gray-300 rounded-xl bg-gray-50\\\">\\r\\n <i class=\\\"pi pi-search text-4xl text-gray-400 mb-3\\\"></i>\\r\\n <p class=\\\"text-gray-500 mb-4\\\">{{ 'NO_SEARCH_CONDITIONS' | translate }}</p>\\r\\n <button\\r\\n pButton\\r\\n type=\\\"button\\\"\\r\\n icon=\\\"pi pi-plus\\\"\\r\\n [label]=\\\"'ADD_SEARCH_CONDITION' | translate\\\"\\r\\n class=\\\"p-button-outlined !px-4 !py-2\\\"\\r\\n (click)=\\\"addGroup()\\\">\\r\\n </button>\\r\\n</div>\\r\\n</div>\\r\\n\", styles: [\".vertical-connector{position:relative;display:flex;justify-content:center;margin-bottom:1rem}.vertical-line{position:absolute;top:-1rem;height:1rem;width:2px;background-color:#d1d5db}.group-logical-operator-box{position:relative;padding:.25rem .75rem;border-radius:.375rem;font-weight:500;font-size:.75rem;z-index:10;transition:all .3s ease}.group-logical-operator-box.and{background-color:#dbeafe;color:#1d4ed8;border:1px solid #93c5fd}.group-logical-operator-box.or{background-color:#fef3c7;color:#92400e;border:1px solid #fcd34d}.connector-arrow{position:absolute;top:100%;left:50%;transform:translate(-50%);width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent}.group-logical-operator-box.and .connector-arrow{border-top:6px solid #93c5fd}.group-logical-operator-box.or .connector-arrow{border-top:6px solid #fcd34d}.border-blue-500{border-color:#93c5fd}.border-or-500{border-color:#fcd34d}.border-t-1{border-top-width:1px}.border-b-1{border-bottom-width:1px}.border-r-1{border-right-width:1px}.p-popover-content{padding:5px!important}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i2.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"ngmodule\", type: ReactiveFormsModule }, { kind: \"ngmodule\", type: SelectModule }, { kind: \"directive\", type: i3.PrimeTemplate, selector: \"[pTemplate]\", inputs: [\"type\", \"pTemplate\"] }, { kind: \"ngmodule\", type: InputTextModule }, { kind: \"ngmodule\", type: ButtonModule }, { kind: \"directive\", type: i4.ButtonDirective, selector: \"[pButton]\", inputs: [\"iconPos\", \"loadingIcon\", \"loading\", \"severity\", \"raised\", \"rounded\", \"text\", \"outlined\", \"size\", \"plain\", \"fluid\", \"label\", \"icon\", \"buttonProps\"] }, { kind: \"component\", type: i4.Button, selector: \"p-button\", inputs: [\"type\", \"iconPos\", \"icon\", \"badge\", \"label\", \"disabled\", \"loading\", \"loadingIcon\", \"raised\", \"rounded\", \"text\", \"plain\", \"severity\", \"outlined\", \"link\", \"tabindex\", \"size\", \"variant\", \"style\", \"styleClass\", \"badgeClass\", \"badgeSeverity\", \"ariaLabel\", \"buttonProps\", \"autofocus\", \"fluid\"], outputs: [\"onClick\", \"onFocus\", \"onBlur\"] }, { kind: \"ngmodule\", type: DatePickerModule }, { kind: \"ngmodule\", type: CheckboxModule }, { kind: \"ngmodule\", type: RadioButtonModule }, { kind: \"component\", type: FormlyForm, selector: \"formly-form\", inputs: [\"form\", \"model\", \"fields\", \"options\"], outputs: [\"modelChange\"] }, { kind: \"ngmodule\", type: TooltipModule }, { kind: \"directive\", type: i5.Tooltip, selector: \"[pTooltip]\", inputs: [\"tooltipPosition\", \"tooltipEvent\", \"positionStyle\", \"tooltipStyleClass\", \"tooltipZIndex\", \"escape\", \"showDelay\", \"hideDelay\", \"life\", \"positionTop\", \"positionLeft\", \"autoHide\", \"fitContent\", \"hideOnEscape\", \"pTooltip\", \"tooltipDisabled\", \"tooltipOptions\", \"appendTo\"] }, { kind: \"ngmodule\", type: MenuModule }, { kind: \"ngmodule\", type: TranslateModule }, { kind: \"ngmodule\", type: InputGroupModule }, { kind: \"ngmodule\", type: InputGroupAddonModule }, { kind: \"ngmodule\", type: PopoverModule }, { kind: \"component\", type: i6.Popover, selector: \"p-popover\", inputs: [\"ariaLabel\", \"ariaLabelledBy\", \"dismissable\", \"style\", \"styleClass\", \"appendTo\", \"autoZIndex\", \"ariaCloseLabel\", \"baseZIndex\", \"focusOnShow\", \"showTransitionOptions\", \"hideTransitionOptions\"], outputs: [\"onShow\", \"onHide\"] }, { kind: \"ngmodule\", type: ListboxModule }, { kind: \"component\", type: i7.Listbox, selector: \"p-listbox, p-listBox, p-list-box\", inputs: [\"id\", \"searchMessage\", \"emptySelectionMessage\", \"selectionMessage\", \"autoOptionFocus\", \"ariaLabel\", \"selectOnFocus\", \"searchLocale\", \"focusOnHover\", \"filterMessage\", \"filterFields\", \"lazy\", \"virtualScroll\", \"virtualScrollItemSize\", \"virtualScrollOptions\", \"scrollHeight\", \"tabindex\", \"multiple\", \"styleClass\", \"listStyle\", \"listStyleClass\", \"readonly\", \"checkbox\", \"filter\", \"filterBy\", \"filterMatchMode\", \"filterLocale\", \"metaKeySelection\", \"dataKey\", \"showToggleAll\", \"optionLabel\", \"optionValue\", \"optionGroupChildren\", \"optionGroupLabel\", \"optionDisabled\", \"ariaFilterLabel\", \"filterPlaceHolder\", \"emptyFilterMessage\", \"emptyMessage\", \"group\", \"options\", \"filterValue\", \"selectAll\", \"striped\", \"highlightOnSelect\", \"checkmark\", \"dragdrop\", \"fluid\"], outputs: [\"onChange\", \"onClick\", \"onDblClick\", \"onFilter\", \"onFocus\", \"onBlur\", \"onSelectAllChange\", \"onLazyLoad\", \"onDrop\"] }, { kind: \"pipe\", type: i8.TranslatePipe, name: \"translate\" }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: QueryBuilderComponent, decorators: [{\n type: Component,\n args: [{ selector: 'formly-query-builder', standalone: true, imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n SelectModule,\n InputTextModule,\n ButtonModule,\n DatePickerModule,\n CheckboxModule,\n RadioButtonModule,\n FormlyForm,\n TooltipModule,\n MenuModule,\n TranslateModule,\n InputGroupModule,\n InputGroupAddonModule,\n PopoverModule,\n ListboxModule\n ], template: \"<div>\\r\\n\\r\\n <!-- Groups Container with Connecting Lines -->\\r\\n <div class=\\\"groups-container\\\" #groupsContainer>\\r\\n <div *ngFor=\\\"let group of groups; let groupIndex = index\\\"\\r\\n class=\\\"group-wrapper relative\\\"\\r\\n #groupElement>\\r\\n\\r\\n <!-- Vertical Connector Line from Previous Group -->\\r\\n<div *ngIf=\\\"groupIndex > 0\\\" class=\\\"vertical-connector\\\">\\r\\n <div class=\\\"vertical-line\\\"></div>\\r\\n\\r\\n <!-- Operator Button -->\\r\\n <button\\r\\n type=\\\"button\\\"\\r\\n class=\\\"group-logical-operator-box\\\"\\r\\n [class.and]=\\\"group.groupLogicalOperator === 'and'\\\"\\r\\n [class.or]=\\\"group.groupLogicalOperator === 'or'\\\"\\r\\n (click)=\\\"opPopover.toggle($event)\\\">\\r\\n <span class=\\\"operator-text\\\">\\r\\n {{ getLogicalOperatorText(group.groupLogicalOperator || 'and') }}\\r\\n </span>\\r\\n <div class=\\\"connector-arrow\\\"></div>\\r\\n </button>\\r\\n\\r\\n <!-- Popover -->\\r\\n <p-popover #opPopover appendTo=\\\"body\\\">\\r\\n <div class=\\\"w-12rem\\\">\\r\\n <p-listbox\\r\\n [options]=\\\"logicalOperators\\\"\\r\\n optionLabel=\\\"label\\\"\\r\\n optionValue=\\\"value\\\"\\r\\n [(ngModel)]=\\\"group.groupLogicalOperator\\\"\\r\\n (onChange)=\\\" opPopover.toggle($event)\\\"\\r\\n [style]=\\\"{ width: '100%' }\\\">\\r\\n </p-listbox>\\r\\n </div>\\r\\n </p-popover>\\r\\n</div>\\r\\n\\r\\n <div class=\\\"group-container mb-6 p-1 bg-white rounded-lg border-l-4 border-t-1 border-b-1 border-r-1 shadow-sm transition-all duration-300 relative\\\"\\r\\n [class.border-blue-500]=\\\"group.logicalOperator === 'and'\\\"\\r\\n [class.border-or-500]=\\\"group.logicalOperator === 'or'\\\"\\r\\n [class.pulse]=\\\"groupIndex === 0\\\">\\r\\n\\r\\n <!-- Rounded Button for \\\"\\u0631\\u0628\\u0637 \\u0627\\u0644\\u0634\\u0631\\u0648\\u0637\\\" on left border -->\\r\\n<div\\r\\n class=\\\"absolute -left-4 top-1/2 transform -translate-y-1/2 z-10 transition-all duration-300\\\"\\r\\n\\r\\n>\\r\\n\\r\\n\\r\\n\\r\\n<!-- Logical Operator Popover Button -->\\r\\n<p-button\\r\\n [severity]=\\\"group.logicalOperator === 'and' ? 'success' : 'info'\\\"\\r\\n [styleClass]=\\\"group.logicalOperator === 'and'\\r\\n ? 'p-button-icon-only p-button-rounded p-button-sm logical-and'\\r\\n : 'p-button-icon-only p-button-rounded p-button-sm logical-or'\\\"\\r\\n (click)=\\\"opPopover.toggle($event)\\\">\\r\\n {{group.logicalOperator === 'and' ? ('and' | translate) : ('or' | translate)}}\\r\\n</p-button>\\r\\n\\r\\n<!-- Popover for Operator Selection -->\\r\\n<p-popover #opPopover appendTo=\\\"body\\\">\\r\\n <div class=\\\"w-10rem\\\">\\r\\n <p-listbox\\r\\n [options]=\\\"[\\r\\n { label: 'and' | translate, value: 'and' },\\r\\n { label: 'or' | translate, value: 'or' }\\r\\n ]\\\"\\r\\n optionLabel=\\\"label\\\"\\r\\n optionValue=\\\"value\\\"\\r\\n [(ngModel)]=\\\"group.logicalOperator\\\"\\r\\n (onChange)=\\\"updateValue(); opPopover.toggle($event)\\\"\\r\\n [style]=\\\"{ width: '100%' }\\\">\\r\\n <ng-template let-item pTemplate=\\\"item\\\">\\r\\n {{ item.label }}\\r\\n </ng-template>\\r\\n </p-listbox>\\r\\n </div>\\r\\n</p-popover>\\r\\n\\r\\n</div>\\r\\n\\r\\n\\r\\n\\r\\n <!-- Group Header -->\\r\\n <div class=\\\"group-header-wrapper mb-4 pl-8\\\">\\r\\n <div class=\\\"group-header flex justify-between items-center\\\">\\r\\n\\r\\n <div class=\\\"flex gap-1\\\">\\r\\n <button\\r\\n pButton\\r\\n icon=\\\"pi pi-plus\\\"\\r\\n type=\\\"button\\\"\\r\\n class=\\\"p-button-success p-button p-button-sm !p-1.5 rounded-md transition-colors\\\"\\r\\n (click)=\\\"addCondition(groupIndex)\\\"\\r\\n pTooltip=\\\"{{ 'ADD_CONDITION' | translate }}\\\"\\r\\n tooltipPosition=\\\"top\\\">\\r\\n </button>\\r\\n @if (filterCount > 0) {\\r\\n <button\\r\\n pButton\\r\\n type=\\\"button\\\"\\r\\n icon=\\\"pi pi-filter\\\"\\r\\n class=\\\"p-button-outlined p-button-sm\\\"\\r\\n (click)=\\\"toggleAppliedFilters()\\\">\\r\\n {{ (showAppliedFilters ? 'SHOW_ALL' : 'SHOW_APPLIED') | translate }}\\r\\n </button>\\r\\n }\\r\\n <button\\r\\n *ngIf=\\\"groups.length > 1\\\"\\r\\n pButton\\r\\n icon=\\\"pi pi-times\\\"\\r\\n type=\\\"button\\\"\\r\\n class=\\\"p-button-danger p-button p-button-sm !p-1.5 rounded-md transition-colors\\\"\\r\\n (click)=\\\"removeGroup(groupIndex)\\\"\\r\\n pTooltip=\\\"{{ 'DELETE_GROUP' | translate }}\\\"\\r\\n tooltipPosition=\\\"top\\\">\\r\\n </button>\\r\\n</div>\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n <!-- Conditions in this group -->\\r\\n <div *ngFor=\\\"let condition of group.conditions; let conditionIndex = index\\\"\\r\\n class=\\\"p-1 bg-gray-50 \\\">\\r\\n <div class=\\\"grid grid-cols-1 gap-1 items-center\\\">\\r\\n <!-- Field Selector -->\\r\\n <div class=\\\"md:col-span-2\\\">\\r\\n <div class=\\\"flex w-full rounded-md overflow-hidden border border-gray-300 bg-white shadow-sm\\\">\\r\\n <!-- Field Selector Button -->\\r\\n <div style=\\\"align-items: center;display: flex; min-width: 130px;max-width: 130px;\\\" class=\\\"flex-shrink-0 \\\">\\r\\n <button\\r\\n type=\\\"button\\\"\\r\\n style=\\\"height: -webkit-fill-available;\\\"\\r\\n class=\\\"flex items-center justify-between w-full px-3 py-2 text-sm bg-white hover:bg-gray-50 focus:outline-none focus:ring-2 focus:z-10\\\"\\r\\n (click)=\\\"overlay.toggle($event)\\\">\\r\\n <span style=\\\"\\r\\n display: inline-block;\\r\\n max-width: 100px;\\r\\n overflow: hidden;\\r\\n text-overflow: ellipsis;\\r\\n white-space: nowrap;\\r\\n \\\">{{ getFieldLabel(condition.field) || ('SELECT_FIELD' | translate) }}</span>\\r\\n <i class=\\\"pi pi-chevron-down mr-2 ml-2 text-xs\\\"></i>\\r\\n </button>\\r\\n\\r\\n <!-- Overlay Content -->\\r\\n <p-popover #overlay appendTo=\\\"body\\\">\\r\\n <div class=\\\"w-60\\\">\\r\\n <p-listbox\\r\\n tabindex=\\\"0\\\"\\r\\n [options]=\\\"props['fields']\\\"\\r\\n optionLabel=\\\"label\\\"\\r\\n optionValue=\\\"key\\\"\\r\\n [(ngModel)]=\\\"condition.field\\\"\\r\\n (onChange)=\\\"onFieldChange(condition, groupIndex, conditionIndex); overlay.toggle($event)\\\"\\r\\n [style]=\\\"{ width: '100%' }\\\">\\r\\n </p-listbox>\\r\\n </div>\\r\\n </p-popover>\\r\\n </div>\\r\\n <!-- Operator Button -->\\r\\n <div style=\\\"align-items: center;display: flex;\\\" class=\\\"flex-shrink-0 border-l border-r border-gray-300\\\">\\r\\n <button\\r\\n type=\\\"button\\\"\\r\\n class=\\\"flex items-center justify-center w-full px-3 py-2 text-sm bg-gray-50 hover:bg-gray-100 focus:outline-none focus:ring-2 focus:z-10\\\"\\r\\n style=\\\"height: -webkit-fill-available;\\\"\\r\\n pTooltip=\\\"{{ getOperatorLabel(condition.operator).label }}\\\"\\r\\n (click)=\\\"opPopover.toggle($event)\\\">\\r\\n <i [class]=\\\"getOperatorLabel(condition.operator).icon\\\"></i>\\r\\n </button>\\r\\n\\r\\n <p-popover #opPopover appendTo=\\\"body\\\">\\r\\n <div class=\\\"w-60\\\">\\r\\n <p-listbox\\r\\n [options]=\\\"condition.operatorsForField\\\"\\r\\n optionLabel=\\\"label\\\"\\r\\n optionValue=\\\"value\\\"\\r\\n [(ngModel)]=\\\"condition.operator\\\"\\r\\n (onChange)=\\\"updateValue();opPopover.toggle($event)\\\"\\r\\n [style]=\\\"{ width: '100%' }\\\">\\r\\n </p-listbox>\\r\\n </div>\\r\\n </p-popover>\\r\\n </div>\\r\\n <!-- Form Field -->\\r\\n <div style=\\\"background: #f9fafb\\\" class=\\\"flex-grow p-1\\\">\\r\\n <formly-form\\r\\n [form]=\\\"form\\\"\\r\\n [fields]=\\\"[condition.valueFieldConfig]\\\"\\r\\n [model]=\\\"model\\\">\\r\\n </formly-form>\\r\\n </div>\\r\\n\\r\\n\\r\\n\\r\\n <!-- Delete Button -->\\r\\n <div style=\\\"align-items: center;display: flex;\\\" class=\\\"flex-shrink-0\\\">\\r\\n <button\\r\\n style=\\\"height: -webkit-fill-available;\\\"\\r\\n class=\\\"flex items-center justify-center w-full px-3 py-2 text-sm bg-red-50 text-red-600 hover:bg-red-100 focus:outline-none focus:ring-2 focus:ring-red-500 focus:z-10\\\"\\r\\n type=\\\"button\\\"\\r\\n (click)=\\\"removeCondition(groupIndex, conditionIndex)\\\"\\r\\n pTooltip=\\\"\\u062D\\u0630\\u0641 \\u0627\\u0644\\u0634\\u0631\\u0637\\\"\\r\\n tooltipPosition=\\\"top\\\">\\r\\n <i class=\\\"pi pi-times\\\"></i>\\r\\n </button>\\r\\n </div>\\r\\n</div>\\r\\n </div>\\r\\n\\r\\n\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n <!-- Group Footer -->\\r\\n <div class=\\\"group-footer flex justify-between items-center mt-3 pt-3 border-t border-gray-200 \\\">\\r\\n <small class=\\\"text-gray-500\\\">\\r\\n {{ group.conditions.length }} \\u0634\\u0631\\u0637 \\u0641\\u064A \\u0647\\u0630\\u0647 \\u0627\\u0644\\u0645\\u062C\\u0645\\u0648\\u0639\\u0629\\r\\n </small>\\r\\n <small class=\\\"text-gray-500\\\">\\r\\n <span *ngIf=\\\"groupIndex > 0\\\">\\r\\n \\u0645\\u0631\\u062A\\u0628\\u0637 \\u0645\\u0639 \\u0627\\u0644\\u0633\\u0627\\u0628\\u0642\\u0629 \\u0628\\u0640 <strong [class.text-blue-600]=\\\"group.groupLogicalOperator === 'and'\\\"\\r\\n [class.text-amber-600]=\\\"group.groupLogicalOperator === 'or'\\\">\\r\\n {{ group.groupLogicalOperator === 'and' ? '\\u0648' : '\\u0623\\u0648' }}\\r\\n </strong>\\r\\n </span>\\r\\n </small>\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n <!-- Actions -->\\r\\n<div class=\\\"flex flex-wrap gap-3 mt-6\\\">\\r\\n <button\\r\\n pButton\\r\\n type=\\\"button\\\"\\r\\n icon=\\\"pi pi-plus\\\"\\r\\n [label]=\\\"'GROUP' | translate\\\"\\r\\n class=\\\"p-button-outlined p-button-sm !bg-white !border !border-blue-500 !text-blue-600 hover:!bg-blue-50 transition-colors flex items-center gap-2\\\"\\r\\n (click)=\\\"addGroup();\\\">\\r\\n </button>\\r\\n\\r\\n <button\\r\\n pButton\\r\\n type=\\\"button\\\"\\r\\n icon=\\\"pi pi-plus\\\"\\r\\n [label]=\\\"'CONDITION' | translate\\\"\\r\\n class=\\\"p-button-outlined p-button-sm !bg-white !border !border-blue-500 !text-blue-600 hover:!bg-blue-50 transition-colors flex items-center gap-2\\\"\\r\\n (click)=\\\"addConditionToLastGroup()\\\">\\r\\n </button>\\r\\n\\r\\n <button\\r\\n *ngIf=\\\"groups.length > 0\\\"\\r\\n pButton\\r\\n type=\\\"button\\\"\\r\\n icon=\\\"pi pi-trash\\\"\\r\\n [label]=\\\"'CLEAR' | translate\\\"\\r\\n class=\\\"p-button-danger p-button-outlined p-button-sm !bg-white !border !border-red-500 !text-red-600 hover:!bg-red-50 transition-colors flex items-center gap-2\\\"\\r\\n (click)=\\\"clearAll()\\\">\\r\\n </button>\\r\\n</div>\\r\\n\\r\\n<!-- Empty State -->\\r\\n<div *ngIf=\\\"groups.length === 0\\\" class=\\\"empty-state text-center p-6 border-2 border-dashed border-gray-300 rounded-xl bg-gray-50\\\">\\r\\n <i class=\\\"pi pi-search text-4xl text-gray-400 mb-3\\\"></i>\\r\\n <p class=\\\"text-gray-500 mb-4\\\">{{ 'NO_SEARCH_CONDITIONS' | translate }}</p>\\r\\n <button\\r\\n pButton\\r\\n type=\\\"button\\\"\\r\\n icon=\\\"pi pi-plus\\\"\\r\\n [label]=\\\"'ADD_SEARCH_CONDITION' | translate\\\"\\r\\n class=\\\"p-button-outlined !px-4 !py-2\\\"\\r\\n (click)=\\\"addGroup()\\\">\\r\\n </button>\\r\\n</div>\\r\\n</div>\\r\\n\", styles: [\".vertical-connector{position:relative;display:flex;justify-content:center;margin-bottom:1rem}.vertical-line{position:absolute;top:-1rem;height:1rem;width:2px;background-color:#d1d5db}.group-logical-operator-box{position:relative;padding:.25rem .75rem;border-radius:.375rem;font-weight:500;font-size:.75rem;z-index:10;transition:all .3s ease}.group-logical-operator-box.and{background-color:#dbeafe;color:#1d4ed8;border:1px solid #93c5fd}.group-logical-operator-box.or{background-color:#fef3c7;color:#92400e;border:1px solid #fcd34d}.connector-arrow{position:absolute;top:100%;left:50%;transform:translate(-50%);width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent}.group-logical-operator-box.and .connector-arrow{border-top:6px solid #93c5fd}.group-logical-operator-box.or .connector-arrow{border-top:6px solid #fcd34d}.border-blue-500{border-color:#93c5fd}.border-or-500{border-color:#fcd34d}.border-t-1{border-top-width:1px}.border-b-1{border-bottom-width:1px}.border-r-1{border-right-width:1px}.p-popover-content{padding:5px!important}\\n\"] }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktYnVpbGRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLnVpLmNvcmUvZ2VuZXJpYy1zZWFyY2gtYWR2YW5jZWQvc3JjL2xpYi9xdWVyeS1idWlsZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLXNlYXJjaC1hZHZhbmNlZC9zcmMvbGliL3F1ZXJ5LWJ1aWxkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNkJBQTZCO0FBQzdCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFHLE1BQU0sR0FBWSxNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQUUsU0FBUyxFQUFzQyxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0s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QUFXLEVBQUUsQ0FBQztRQUNyQixDQUFDO0lBQ0gsQ0FBQzt1R0EzY1UscUJBQXFCOzJGQUFyQixxQkFBcUIsdUdDN0NsQyw2OFVBeVJBLDBtQ0RqUUksWUFBWSwrUEFDWixXQUFXLDhWQUNYLG1CQUFtQiw4QkFDbkIsWUFBWSxxSUFDWixlQUFlLDhCQUNmLFlBQVksdXBCQUNaLGdCQUFnQiw4QkFDaEIsY0FBYyw4QkFDZCxpQkFBaUIsK0JBQ2pCLFVBQVUsaUlBQ1YsYUFBYSxxWEFDYixVQUFVLDhCQUNWLGVBQWUsOEJBQ2QsZ0JBQWdCLDhCQUNqQixxQkFBcUIsOEJBQ3JCLGFBQWEsdVVBQ2IsYUFBYTs7MkZBS0oscUJBQXFCO2tCQXpCakMsU0FBUzsrQkFDRSxzQkFBc0IsY0FDcEIsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixZQUFZO3dCQUNaLGdCQUFnQjt3QkFDaEIsY0FBYzt3QkFDZCxpQkFBaUI7d0JBQ2pCLFVBQVU7d0JBQ1YsYUFBYTt3QkFDYixVQUFVO3dCQUNWLGVBQWU7d0JBQ2QsZ0JBQWdCO3dCQUNqQixxQkFBcUI7d0JBQ3JCLGFBQWE7d0JBQ2IsYUFBYTtxQkFDZCIsInNvdXJjZXNDb250ZW50IjpbIi8vIHF1ZXJ5LWJ1aWxkZXIuY29tcG9uZW50LnRzXHJcbmltcG9ydCB7IExpc3Rib3hNb2R1bGUgfSBmcm9tICdwcmltZW5nL2xpc3Rib3gnO1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCAgaW5qZWN0LCBPbkluaXQsICB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGaWVsZFR5cGUsIEZpZWxkVHlwZUNvbmZpZywgRm9ybWx5RmllbGRDb25maWcsIEZvcm1seUZvcm0gfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IElucHV0VGV4dE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvaW5wdXR0ZXh0JztcclxuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xyXG5pbXBvcnQgeyBDaGVja2JveE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvY2hlY2tib3gnO1xyXG5pbXBvcnQgeyBTZWxlY3RNb2R1bGUgfSBmcm9tICdwcmltZW5nL3NlbGVjdCc7XHJcbmltcG9ydCB7IERhdGVQaWNrZXJNb2R1bGUgfSBmcm9tICdwcmltZW5nL2RhdGVwaWNrZXInO1xyXG5pbXBvcnQgeyBSYWRpb0J1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvcmFkaW9idXR0b24nO1xyXG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b29sdGlwJztcclxuaW1wb3J0IHsgUXVlcnlCdWlsZGVyU2VydmljZSB9IGZyb20gJy4vcXVlcnktYnVpbGRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWVudU1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvbWVudSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBJbnB1dEdyb3VwQWRkb25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2lucHV0Z3JvdXBhZGRvbic7XHJcbmltcG9ydCB7IElucHV0R3JvdXBNb2R1bGUgfSBmcm9tICdwcmltZW5nL2lucHV0Z3JvdXAnO1xyXG5pbXBvcnQgeyBQb3BvdmVyTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9wb3BvdmVyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZm9ybWx5LXF1ZXJ5LWJ1aWxkZXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgU2VsZWN0TW9kdWxlLFxyXG4gICAgSW5wdXRUZXh0TW9kdWxlLFxyXG4gICAgQnV0dG9uTW9kdWxlLFxyXG4gICAgRGF0ZVBpY2tlck1vZHVsZSxcclxuICAgIENoZWNrYm94TW9kdWxlLFxyXG4gICAgUmFkaW9CdXR0b25Nb2R1bGUsXHJcbiAgICBGb3JtbHlGb3JtLFxyXG4gICAgVG9vbHRpcE1vZHVsZSxcclxuICAgIE1lbnVNb2R1bGUsXHJcbiAgICBUcmFuc2xhdGVNb2R1bGUsXHJcbiAgICAgSW5wdXRHcm91cE1vZHVsZSxcclxuICAgIElucHV0R3JvdXBBZGRvbk1vZHVsZSxcclxuICAgIFBvcG92ZXJNb2R1bGUsXHJcbiAgICBMaXN0Ym94TW9kdWxlXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vcXVlcnktYnVpbGRlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcXVlcnktYnVpbGRlci5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFF1ZXJ5QnVpbGRlckNvbXBvbmVudCBleHRlbmRzIEZpZWxkVHlwZTxGaWVsZFR5cGVDb25maWc+IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBwcml2YXRlIHF1ZXJ5QnVpbGRlclNlcnZpY2UgPSBpbmplY3QoUXVlcnlCdWlsZGVyU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gIHByaXZhdGUgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xyXG5cclxuICBncm91cHM6IGFueVtdID0gW107XHJcblxyXG4gIGxvZ2ljYWxPcGVyYXRvcnMgPSBbXHJcbiAgIHsgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2FuZCcpLCB2YWx1ZTogJ2FuZCcgfSxcclxuICB7IGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdvcicpLCB2YWx1ZTogJ29yJyB9XHJcbiAgXTtcclxuXHJcbiAgc2hvd0FwcGxpZWRGaWx0ZXJzID0gZmFsc2U7XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgLy8gSW5pdGlhbGl6ZSB3aXRoIGV4aXN0aW5nIHZhbHVlIG9yIGRlZmF1bHQgZ3JvdXAgd2l0aCBjb25kaXRpb25zXHJcbiAgICBpZiAodGhpcy5mb3JtQ29udHJvbC52YWx1ZSAmJiAoQXJyYXkuaXNBcnJheSh0aGlzLmZvcm1Db250cm9sLnZhbHVlKSAmJiB0aGlzLmZvcm1Db250cm9sLnZhbHVlLmxlbmd0aCA+IDApKSB7XHJcblxyXG4gICAgICB0aGlzLmluaXRpYWxpemVBcHBsaWVkQ29uZGl0aW9uc1dpdGhGaWVsZENvbmZpZ3MoKTtcclxuICAgICAgdGhpcy5pbml0aWFsaXplRGVmYXVsdENvbmRpdGlvbnMoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFN0YXJ0IHdpdGggZGVmYXVsdCBjb25kaXRpb25zIGZvciBpbXBvcnRhbnQgZmllbGRzXHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZURlZmF1bHRDb25kaXRpb25zKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRpYWxpemVBcHBsaWVkQ29uZGl0aW9uc1dpdGhGaWVsZENvbmZpZ3MoKSB7XHJcbiAgIHRoaXMuZ3JvdXBzID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZS5tYXAoKGdyb3VwOiBhbnksIGdyb3VwSW5kZXg6IG51bWJlcikgPT4gKHtcclxuICAgICAgICBsb2dpY2FsT3BlcmF0b3I6IGdyb3VwLmxvZ2ljYWxPcGVyYXRvciB8fCAnYW5kJyxcclxuICAgICAgICBncm91cExvZ2ljYWxPcGVyYXRvcjogZ3JvdXAuZ3JvdXBMb2dpY2FsT3BlcmF0b3IgfHwgJ2FuZCcsXHJcbiAgICAgICAgY29uZGl0aW9uczogdGhpcy5pbml0aWFsaXplQ29uZGl0aW9uc1dpdGhGaWVsZENvbmZpZ3MoZ3JvdXAuY29uZGl0aW9ucyB8fCBbXSwgZ3JvdXBJbmRleClcclxuICAgICAgfSkpO1xyXG4gIH1cclxucHJpdmF0ZSBpbml0aWFsaXplQ29uZGl0aW9uc1dpdGhGaWVsZENvbmZpZ3MoY29uZGl0aW9uczogYW55W10sIGdyb3VwSW5kZXg6IG51bWJlcik6IGFueVtdIHtcclxuICAgIHJldHVybiBjb25kaXRpb25zLm1hcCgoY29uZGl0aW9uLCBjb25kaXRpb25JbmRleCkgPT4gKHtcclxuICAgICAgLi4uY29uZGl0aW9uLFxyXG4gICAgICBvcGVyYXRvcnNGb3JGaWVsZCA6IHRoaXMuZ2V0T3BlcmF0b3JzRm9yRmllbGQoY29uZGl0aW9uLmZpZWxkKSxcclxuICAgICAgdmFsdWVGaWVsZENvbmZpZzogY29uZGl0aW9uLmZpZWxkID9cclxuICAgICAgICB0aGlzLmdlbmVyYXRlVmFsdWVGaWVsZENvbmZpZyhjb25kaXRpb24sIGdyb3VwSW5kZXgsIGNvbmRpdGlvbkluZGV4KSA6XHJcbiAgICAgICAgbnVsbFxyXG4gICAgfSkpO1xyXG4gIH1cclxuICAgcHJpdmF0ZSBpbml0aWFsaXplRGVmYXVsdENvbmRpdGlvbnMoKTogdm9pZCB7XHJcbiAgICAvLyBHZXQgZGVmYXVsdCBmaWVsZHMgdXNpbmcgdGhlIHNlcnZpY2UgbG9naWNcclxuICAgIGNvbnN0IGRlZmF1bHRGaWVsZHMgPSB0aGlzLmdldERlZmF1bHRGaWVsZHMoKTtcclxuXHJcbiAgICBjb25zdCBkZWZhdWx0Q29uZGl0aW9ucyA9IFtdO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZWZhdWx0RmllbGRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGZpZWxkID0gZGVmYXVsdEZpZWxkc1tpXTtcclxuICAgICAgZGVmYXVsdENvbmRpdGlvbnMucHVzaCh0aGlzLmNyZWF0ZURlZmF1bHRDb25kaXRpb24oZmllbGQsIDAsIGksZmllbGQucHJvcHM/Lm9wZXJhdG9yKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdGhpcy5ncm91cHMgPSBbe1xyXG4gICAgLy8gICBsb2dpY2FsT3BlcmF0b3I6ICdhbmQnLFxyXG4gICAgLy8gICBncm91cExvZ2ljYWxPcGVyYXRvcjogJ2FuZCcsXHJcbiAgICAvLyAgIGNvbmRpdGlvbnM6IGRlZmF1bHRDb25kaXRpb25zXHJcbiAgICAvLyB9XTtcclxuICAgIHRoaXMuZ3JvdXBzID0gW3tcclxuICBsb2dpY2FsT3BlcmF0b3I6ICdhbmQnLFxyXG4gIGdyb3VwTG9naWNhbE9wZXJhdG9yOiAnYW5kJyxcclxuICBjb25kaXRpb25zOiBkZWZhdWx0Q29uZGl0aW9ucy5maWx0ZXIoZGMgPT5cclxuICAgICF0aGlzLmdyb3Vwcz8uc29tZShnID0+XHJcbiAgICAgIGcuY29uZGl0aW9ucz8uc29tZSgoYzphbnkpID0+XHJcbiAgICAgICAgYy5maWVsZCA9PT0gZGMuZmllbGQgJiZcclxuICAgICAgICBjLm9wZXJhdG9yID09PSBkYy5vcGVyYXRvclxyXG4gICAgICApXHJcbiAgICApXHJcbiAgKVxyXG59XTtcclxuXHJcblxyXG4gICAgdGhpcy51cGRhdGVWYWx1ZSgpO1xyXG4gIH1cclxuIHRvZ2dsZUFwcGxpZWRGaWx0ZXJzKCkge1xyXG4gICAgaWYgKHRoaXMuc2hvd0FwcGxpZWRGaWx0ZXJzID09IHRydWUpIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplQXBwbGllZENvbmRpdGlvbnNXaXRoRmllbGRDb25maWdzKCk7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZURlZmF1bHRDb25kaXRpb25zKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgIHRoaXMuaW5pdGlhbGl6ZUFwcGxpZWRDb25kaXRpb25zV2l0aEZpZWxkQ29uZmlncygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zaG93QXBwbGllZEZpbHRlcnMgPSAhdGhpcy5zaG93QXBwbGllZEZpbHRlcnM7XHJcbiAgfVxyXG5vbkFuZENsaWNrKGdyb3VwOiBhbnksIGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICBncm91cC5sb2dpY2FsT3BlcmF0b3IgPSAnYW5kJztcclxuICB0aGlzLnVwZGF0ZVZhbHVlKCk7XHJcbn1cclxuXHJcbm9uT3JDbGljayhncm91cDogYW55LCBldmVudDogYW55KTogdm9pZCB7XHJcbiAgZ3JvdXAubG9naWNhbE9wZXJhdG9yID0gJ29yJztcclxuICB0aGlzLnVwZGF0ZVZhbHVlKCk7XHJcbn1cclxuXHJcblxyXG4gIGdldExvZ2ljYWxPcGVyYXRvclRleHQob3BlcmF0b3I6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgY29uc3Qgb3BlcmF0b3JNYXA6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XHJcbiAgJ2FuZCc6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2FuZCcpLFxyXG4gICdvcic6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ29yJyksXHJcbiAgJ25vdCc6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ25vdCcpXHJcbn07XHJcbiAgICByZXR1cm4gb3BlcmF0b3JNYXBbb3BlcmF0b3JdIHx8IG9wZXJhdG9yO1xyXG4gIH1cclxuXHJcblxyXG5cclxuXHJcbiAgcHJpdmF0ZSBnZXREZWZhdWx0RmllbGRzKCk6IGFueVtdIHtcclxuICAgIC8vIEdldCBhbGwgZmlsdGVyYWJsZSBmaWVsZHNcclxuICAgIGNvbnN0IGZpbHRlcmFibGVGaWVsZHMgPSB0aGlzLnByb3BzWydmaWVsZHMnXS5maWx0ZXIoKGZpZWxkOiBhbnkpID0+XHJcbiAgICAgIGZpZWxkLmZpbHRlcmFibGUgIT09IGZhbHNlICYmIGZpZWxkLmtleSAmJiB0aGlzLmlzU3VwcG9ydGVkRmllbGRUeXBlKGZpZWxkLnR5cGUpXHJcbiAgICApO1xyXG5cclxuICAgIC8vIElmIG5vIGZpbHRlcmFibGUgZmllbGRzLCByZXR1cm4gZW1wdHkgYXJyYXlcclxuICAgIGlmIChmaWx0ZXJhYmxlRmllbGRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0ZWRGaWVsZHMgPSBmaWx0ZXJhYmxlRmllbGRzO1xyXG4gICAgcmV0dXJuIHNlbGVjdGVkRmllbGRzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc1N1cHBvcnRlZEZpZWxkVHlwZShmaWVsZFR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgLy8gT25seSBpbmNsdWRlIGZpZWxkIHR5cGVzIHRoYXQgbWFrZSBzZW5zZSBmb3IgZmlsdGVyaW5nXHJcbiAgICBjb25zdCBzdXBwb3J0ZWRUeXBlcyA9IFsnaW5wdXQnLCAnbnVtYmVyJywgJ2RhdGVwaWNrZXInLCdjdXN0b20tZGF0ZXBpY2tlcicsICdzZWxlY3QnLCAnY2hlY2tib3gnLCAnZ2VuZXJpYy1zZWxlY3RvcicsICdzd2l0Y2gnLCAncmFkaW8nLCAndGV4dGFyZWEnXTtcclxuICAgIHJldHVybiBzdXBwb3J0ZWRUeXBlcy5pbmNsdWRlcyhmaWVsZFR5cGUpO1xyXG4gIH1cclxuZ2V0RmllbGRMYWJlbChrZXk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgY29uc3QgZiA9IHRoaXMucHJvcHNbJ2ZpZWxkcyddPy5maW5kKCh4OiBhbnkpID0+IHgua2V5ID09PSBrZXkpO1xyXG4gIHJldHVybiBmID8gZi5sYWJlbCA6ICcnO1xyXG59XHJcbiAgcHJpdmF0ZSBjcmVhdGVEZWZhdWx0Q29uZGl0aW9uKGZpZWxkOiBhbnksIGdyb3VwSW5kZXg6IG51bWJlciwgY29uZGl0aW9uSW5kZXg6IG51bWJlcixvcGVyYXRvcj86c3RyaW5nKTogYW55IHtcclxuICAgIGNvbnN0IGRlZmF1bHRDb25kaXRpb24gPSB7XHJcbiAgICAgIGZpZWxkOiBmaWVsZC5rZXksXHJcbiAgICAgIG9wZXJhdG9yOm9wZXJhdG9yID9vcGVyYXRvciA6IHRoaXMuZ2V0RGVmYXVsdE9wZXJhdG9yKGZpZWxkLnR5cGUpLFxyXG4gICAgICB2YWx1ZTogdGhpcy5nZXREZWZhdWx0VmFsdWUoZmllbGQudHlwZSksXHJcbiAgICAgIHZhbHVlRmllbGRDb25maWc6IG51bGwsXHJcbiAgICAgIG9wZXJhdG9yc0ZvckZpZWxkIDogdGhpcy5nZXRPcGVyYXRvcnNGb3JGaWVsZChmaWVsZCksXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIEdlbmVyYXRlIGZpZWxkIGNvbmZpZyBmb3IgdGhpcyBjb25kaXRpb25cclxuICAgIGRlZmF1bHRDb25kaXRpb24udmFsdWVGaWVsZENvbmZpZyA9IHRoaXMuZ2VuZXJhdGVWYWx1ZUZpZWxkQ29uZmlnKFxyXG4gICAgICBkZWZhdWx0Q29uZGl0aW9uLFxyXG4gICAgICBncm91cEluZGV4LFxyXG4gICAgICBjb25kaXRpb25JbmRleFxyXG4gICAgKSBhcyBhbnk7XHJcblxyXG4gICAgcmV0dXJuIGRlZmF1bHRDb25kaXRpb247XHJcbiAgfVxyXG5cclxuZ2V0IGZpbHRlckNvdW50KCl7XHJcbiAgICBjb25zdCBmaWx0ZXJzID0gKCh0aGlzLm1vZGVsPy5hZHZhbmNlZEZpbHRlcnMgPz8gW10pWzBdPy5jb25kaXRpb25zPy5sZW5ndGggfHwgMCkgK1xyXG4gICAgKCh0aGlzLm1vZGVsPy5zb3J0aW5nID8/IFtdKT8ubGVuZ3RoIHx8IDApICtcclxuICAgICh0aGlzLm1vZGVsPy5wYWdpbmF0aW9uICYmIHRoaXMubW9kZWw/LnBhZ2luYXRpb24/LnRvcCA/IDEgOiAwKTtcclxuICAgIHJldHVybiBmaWx0ZXJzO1xyXG4gIH1cclxuICAvLyBGaWVsZCB0eXBlIGFuZCBvcGVyYXRvciBtZXRob2RzIHRoYXQgdXNlIFF1ZXJ5QnVpbGRlclNlcnZpY2UgbG9naWNcclxuICBnZXRGaWVsZFR5cGUoZmllbGRLZXk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMucHJvcHNbJ2ZpZWxkcyddLmZpbmQoKGY6IGFueSkgPT4gZi5rZXkgPT09IGZpZWxkS2V5KTtcclxuICAgIHJldHVybiBmaWVsZD8udHlwZSB8fCAnaW5wdXQnO1xyXG4gIH1cclxuXHJcbiAgIGdldE9wZXJhdG9yc0ZvckZpZWxkKGZpZWxkOiBhbnkpOiBhbnlbXSB7XHJcbiAgICBpZiAoIWZpZWxkKSByZXR1cm4gW107XHJcblxyXG4gICAgbGV0IGZpZWxkS2V5OiBzdHJpbmc7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBmaWVsZCA9PT0gJ29iamVjdCcgJiYgZmllbGQgIT09IG51bGwpIHtcclxuICAgICAgICBmaWVsZEtleSA9IGZpZWxkWydrZXknXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZmllbGRLZXkgPSBmaWVsZDtcclxuICAgIH1cclxuICAgIGNvbnN0IGZpZWxkXyA9IHRoaXMucHJvcHNbJ2ZpZWxkcyddLmZpbmQoKGY6IGFueSkgPT4gZi5rZXkgPT09IGZpZWxkS2V5KTtcclxuICAgIC8vIFVzZSBvcGVyYXRvcnMgZnJvbSB0aGUgZmllbGQgY29uZmlndXJhdGlvblxyXG4gICAgY29uc3Qgb3BlcmF0b3JzID0gZmllbGRfPy5vcGVyYXRvcnMgfHwgdGhpcy5xdWVyeUJ1aWxkZXJTZXJ2aWNlWydnZXRPcGVyYXRvcnNGb3JUeXBlJ10oZmllbGRfPy50eXBlKTtcclxuXHJcbiAgICByZXR1cm4gb3BlcmF0b3JzLm1hcCgob3A6IHN0cmluZykgPT4gKHtcclxuICAgICAgbGFiZWw6IHRoaXMuZ2V0T3BlcmF0b3JMYWJlbChvcCkubGFiZWwsXHJcbiAgICAgIGljb246IHRoaXMuZ2V0T3BlcmF0b3JMYWJlbChvcCkuaWNvbixcclxuICAgICAgdmFsdWU6IG9wXHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuXHJcbmdldE9wZXJhdG9yTGFiZWwob3BlcmF0b3I6IHN0cmluZyk6IHsgbGFiZWw6IHN0cmluZzsgaWNvbjogc3RyaW5nIH0ge1xyXG4gIGNvbnN0IG1hcDogeyBba2V5OiBzdHJpbmddOiB7IGxhYmVsOiBzdHJpbmc7IGljb246IHN0cmluZyB9IH0gPSB7XHJcbiAgICBlcTogeyBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZXEnKSwgaWNvbjogJ3BpIHBpLWVxdWFscycgfSxcclxuICAgIG5lOiB7IGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCduZScpLCBpY29uOiAncGkgcGktaGFzaHRhZycgfSxcclxuICAgIGNvbnRhaW5zOiB7IGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdjb250YWlucycpLCBpY29uOiAncGkgcGktc2VhcmNoJyB9LFxyXG4gICAgc3RhcnRzd2l0aDogeyBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnc3RhcnRzd2l0aCcpLCBpY29uOiAncGkgcGktYXJyb3ctcmlnaHQnIH0sXHJcbiAgICBlbmRzd2l0aDogeyBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW5kc3dpdGgnKSwgaWNvbjogJ3BpIHBpLWFycm93LWxlZnQnIH0sXHJcbiAgICBndDogeyBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZ3QnKSwgaWNvbjogJ3BpIHBpLWNoZXZyb24tcmlnaHQnIH0sXHJcbiAgICBnZTogeyBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZ2UnKSwgaWNvbjogJ3BpIHBpLWFuZ2xlLWRvdWJsZS1yaWdodCcgfSxcclxuICAgIGx0OiB7IGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdsdCcpLCBpY29uOiAncGkgcGktY2hldnJvbi1sZWZ0JyB9LFxyXG4gICAgbGU6IHsgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2xlJyksIGljb246ICdwaSBwaS1hbmdsZS1kb3VibGUtbGVmdCcgfSxcclxuICAgIGluOiB7IGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdpbicpLCBpY29uOiAncGkgcGktbGlzdCcgfSxcclxuICAgIG5vdGluOiB7IGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdub3RpbicpLCBpY29uOiAncGkgcGktYmFuJyB9LFxyXG4gIH07XHJcblxyXG4gIHJldHVybiBtYXBbb3BlcmF0b3JdIHx8IHsgbGFiZWw6IG9wZXJhdG9yLCBpY29uOiAncGkgcGktcXVlc3Rpb24nIH07XHJcbn1cclxuXHJcblxyXG5cclxuICAgZ2V0RGVmYXVsdE9wZXJhdG9yKGZpZWxkVHlwZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIC8vIFVzZSBzZXJ2aWNlJ3MgZmllbGQgdHlwZSBjb25maWdcclxuICAgIGNvbnN0IGZpZWxkQ29uZmlnID0gdGhpcy5xdWVyeUJ1aWxkZXJTZXJ2aWNlWydmaWVsZFR5cGVDb25maWcnXVtmaWVsZFR5cGUgYXMga2V5b2YgdHlwZW9mIHRoaXMucXVlcnlCdWlsZGVyU2VydmljZVsnZmllbGRUeXBlQ29uZmlnJ11dO1xyXG4gICAgcmV0dXJuIGZpZWxkQ29uZmlnID8gZmllbGRDb25maWcuZGVmYXVsdE9wZXJhdG9yIDogJ2NvbnRhaW5zJztcclxuICB9XHJcblxyXG4gIGdldERlZmF1bHRWYWx1ZShmaWVsZFR5cGU6IHN0cmluZyk6IGFueSB7XHJcbiAgICAvLyBVc2Ugc2VydmljZSdzIGZpZWxkIHR5cGUgY29uZmlnXHJcbiAgICBjb25zdCBmaWVsZENvbmZpZyA9IHRoaXMucXVlcnlCdWlsZGVyU2VydmljZVsnZmllbGRUeXBlQ29uZmlnJ11bZmllbGRUeXBlIGFzIGtleW9mIHR5cGVvZiB0aGlzLnF1ZXJ5QnVpbGRlclNlcnZpY2VbJ2ZpZWxkVHlwZUNvbmZpZyddXTtcclxuICAgIHJldHVybiBmaWVsZENvbmZpZyA/IGZpZWxkQ29uZmlnLmRlZmF1bHRWYWx1ZSA6ICcnO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICBnZXRGaWVsZFByb3BzKGZpZWxkS2V5OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgY29uc3QgZmllbGQgPSB0aGlzLnByb3BzWydmaWVsZHMnXS5maW5kKChmOiBhbnkpID0+IGYua2V5ID09PSBmaWVsZEtleSk7XHJcbiAgICAvLyBSZXR1cm4gcHJvcHMgd2l0aG91dCBsYWJlbCB0byBhdm9pZCBkdXBsaWNhdGlvblxyXG4gICAgY29uc3QgcHJvcHMgPSB7IC4uLmZpZWxkPy5wcm9wcyB9O1xyXG4gICAgZGVsZXRlIHByb3BzLmxhYmVsO1xyXG4gICAgZGVsZXRlIHByb3BzLmxvYWREZWZhdWx0O1xyXG4gICAgcmV0dXJuIHByb3BzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZVZhbHVlRmllbGRDb25maWcoY29uZGl0aW9uOiBhbnksIGdyb3VwSW5kZXg6IG51bWJlciwgY29uZGl0aW9uSW5kZXg6IG51bWJlcik6IEZvcm1seUZpZWxkQ29uZmlnIHtcclxuICAgIGNvbnN0IGZpZWxkVHlwZSA9IHRoaXMuZ2V0RmllbGRUeXBlKGNvbmRpdGlvbi5maWVsZCk7XHJcbiAgICBjb25zdCBmaWVsZFByb3BzID0gdGhpcy5nZXRGaWVsZFByb3BzKGNvbmRpdGlvbi5maWVsZCk7XHJcbiAgICBjb25zdCBmaWVsZEtleSA9IHRoaXMuZ2V0Q29uZGl0aW9uVmFsdWVLZXkoZ3JvdXBJbmRleCwgY29uZGl0aW9uSW5kZXgpO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGtleTogZmllbGRLZXksXHJcbiAgICAgIHR5cGU6IGZpZWxkVHlwZSxcclxuICAgICAgd3JhcHBlcnM6W10sXHJcbiAgICAgIHByb3BzOiB7XHJcbiAgICAgICAgLi4uZmllbGRQcm9wcywgLy8gSW5jbHVkZSBhbGwgb3RoZXIgcHJvcHMgZnJvbSB0aGUgb3JpZ2luYWwgZmllbGRcclxuICAgICAgICBwbGFjZWhvbGRlcjonJyxcclxuICAgICAgICBsb2FkRGVmYXVsdDpmYWxzZSxcclxuICAgICAgICBjaGFuZ2U6IChmaWVsZDogRm9ybWx5RmllbGRDb25maWcsIGV2ZW50PzogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBob29rczoge1xyXG4gICAgICAgIG9uSW5pdDogKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZykgPT4ge1xyXG4gICAgICAgICAgaWYgKGZpZWxkLmZvcm1Db250cm9sICYmIGNvbmRpdGlvbi52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGZpZWxkLmZvcm1Db250cm9sLnNldFZhbHVlKGNvbmRpdGlvbi52YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgbW9kZWxPcHRpb25zOiB7XHJcbiAgICAgICAgdXBkYXRlT246ICdjaGFuZ2UnXHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXRDb25kaXRpb25WYWx1ZUtleShncm91cEluZGV4OiBudW1iZXIsIGNvbmRpdGlvbkluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGBjb25kaXRpb25fJHtncm91cEluZGV4fV8ke2NvbmRpdGlvbkluZGV4fV92YWx1ZWA7XHJcbiAgfVxyXG5cclxuICAvLyBHcm91cCBNYW5hZ2VtZW50XHJcbiAgYWRkR3JvdXAoKSB7XHJcbiAgICB0aGlzLmdyb3Vwcy5wdXNoKHtcclxuICAgICAgbG9naWNhbE9wZXJhdG9yOiAnYW5kJyxcclxuICAgICAgZ3JvdXBMb2dpY2FsT3BlcmF0b3I6ICdhbmQnLFxyXG4gICAgICBjb25kaXRpb25zOiBbXVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7XHJcbiAgfVxyXG5cclxuICAvLyByZW1vdmVHcm91cChncm91cEluZGV4OiBudW1iZXIpIHtcclxuICAvLyAgIHRoaXMuZ3JvdXBzLnNwbGljZShncm91cEluZGV4LCAxKTtcclxuICAvLyAgIHRoaXMudXBkYXRlVmFsdWUoKTtcclxuICAvLyB9XHJcbnJlbW92ZUdyb3VwKGdyb3VwSW5kZXg6IG51bWJlcikge1xyXG4gIGlmICh0aGlzLmdyb3Vwc1tncm91cEluZGV4XSkge1xyXG4gICAgLy8gR2V0IGFsbCBmaWVsZCBrZXlzIGZvciB0aGlzIGdyb3VwIGJlZm9yZSBkZWxldGluZ1xyXG4gICAgY29uc3QgZmllbGRLZXlzVG9SZW1vdmU6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgLy8gQ29sbGVjdCBhbGwgY29uZGl0aW9uIGZpZWxkIGtleXMgaW4gdGhpcyBncm91cFxyXG4gICAgaWYgKHRoaXMuZ3JvdXBzW2dyb3VwSW5kZXhdLmNvbmRpdGlvbnMpIHtcclxuICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmdyb3Vwc1tncm91cEluZGV4XS5jb25kaXRpb25zLmxlbmd0aDsgYysrKSB7XHJcbiAgICAgICAgY29uc3QgZmllbGRLZXkgPSB0aGlzLmdldENvbmRpdGlvblZhbHVlS2V5KGdyb3VwSW5kZXgsIGMpO1xyXG4gICAgICAgIGZpZWxkS2V5c1RvUmVtb3ZlLnB1c2goZmllbGRLZXkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVtb3ZlIHRoZSBncm91cFxyXG4gICAgdGhpcy5ncm91cHMuc3BsaWNlKGdyb3VwSW5kZXgsIDEpO1xyXG5cclxuICAgIC8vIFJlbW92ZSBhbGwgYXNzb2NpYXRlZCBmaWVsZHMgZnJvbSBtb2RlbFxyXG4gICAgdGhpcy5yZW1vdmVNdWx0aXBsZUZyb21Nb2RlbChmaWVsZEtleXNUb1JlbW92ZSk7XHJcblxyXG4gICAgdGhpcy51cGRhdGVWYWx1ZSgpO1xyXG4gIH1cclxufVxyXG5cclxuLy8gUmVtb3ZlIG11bHRpcGxlIGZpZWxkcyBmcm9tIGZvcm1seSBtb2RlbFxyXG5yZW1vdmVNdWx0aXBsZUZyb21Nb2RlbChmaWVsZEtleXM6IHN0cmluZ1tdKSB7XHJcbiAgZmllbGRLZXlzLmZvckVhY2goZmllbGRLZXkgPT4ge1xyXG4gICAgdGhpcy5yZW1vdmVGcm9tTW9kZWwoZmllbGRLZXkpO1xyXG4gIH0pO1xyXG59XHJcbiAgLy8gQ29uZGl0aW9uIE1hbmFnZW1lbnRcclxuICBhZGRDb25kaXRpb24oZ3JvdXBJbmRleDogbnVtYmVyID0gMCkge1xyXG4gICAgaWYgKCF0aGlzLmdyb3Vwc1tncm91cEluZGV4XSkge1xyXG4gICAgICB0aGlzLmFkZEdyb3VwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbmV3Q29uZGl0aW9uID0ge1xyXG4gICAgICBmaWVsZDogJycsXHJcbiAgICAgIG9wZXJhdG9yOiAnZXEnLFxyXG4gICAgICB2YWx1ZTogJycsXHJcbiAgICAgIHZhbHVlRmllbGRDb25maWc6IHt9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGNvbmRpdGlvbkluZGV4ID0gdGhpcy5ncm91cHNbZ3JvdXBJbmRleF0uY29uZGl0aW9ucy5sZW5ndGg7XHJcbiAgICBuZXdDb25kaXRpb24udmFsdWVGaWVsZENvbmZpZyA9IHRoaXMuZ2VuZXJhdGVWYWx1ZUZpZWxkQ29uZmlnKG5ld0NvbmRpdGlvbiwgZ3JvdXBJbmRleCwgY29uZGl0aW9uSW5kZXgpO1xyXG5cclxuICAgIHRoaXMuZ3JvdXBzW2dyb3VwSW5kZXhdLmNvbmRpdGlvbnMucHVzaChuZXdDb25kaXRpb24pO1xyXG4gICAgdGhpcy51cGRhdGVWYWx1ZSgpO1xyXG4gIH1cclxuXHJcbiAgb25GaWVsZENoYW5nZShjb25kaXRpb246IGFueSwgZ3JvdXBJbmRleDogbnVtYmVyLCBjb25kaXRpb25JbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25kaXRpb24ub3BlcmF0b3IgPSB0aGlzLmdldERlZmF1bHRPcGVyYXRvcih0aGlzLmdldEZpZWxkVHlwZShjb25kaXRpb24uZmllbGQpKTtcclxuICAgIGNvbmRpdGlvbi52YWx1ZSA9IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKHRoaXMuZ2V0RmllbGRUeXBlKGNvbmRpdGlvbi5maWVsZCkpO1xyXG5cclxuICAgIC8vIEdlbmVyYXRlIGFuZCBzdG9yZSB0aGUgZmllbGQgY29uZmlnIHdoZW4gZmllbGQgY2hhbmdlc1xyXG4gICAgY29uZGl0aW9uLnZhbHVlRmllbGRDb25maWcgPSB0aGlzLmdlbmVyYXRlVmFsdWVGaWVsZENvbmZpZyhjb25kaXRpb24sIGdyb3VwSW5kZXgsIGNvbmRpdGlvbkluZGV4KTtcclxuICAgIGNvbmRpdGlvbi5vcGVyYXRvcnNGb3JGaWVsZCA9IHRoaXMuZ2V0T3BlcmF0b3JzRm9yRmllbGQoY29uZGl0aW9uLmZpZWxkKTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7XHJcbiAgfVxyXG5cclxuICBhZGRDb25kaXRpb25Ub0xhc3RHcm91cCgpIHtcclxuICAgIGNvbnN0IGxhc3RHcm91cEluZGV4ID0gdGhpcy5ncm91cHMubGVuZ3RoIC0gMTtcclxuICAgIGlmIChsYXN0R3JvdXBJbmRleCA+PSAwKSB7XHJcbiAgICAgIHRoaXMuYWRkQ29uZGl0aW9uKGxhc3RHcm91cEluZGV4KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWRkR3JvdXAoKTtcclxuICAgICAgdGhpcy5hZGRDb25kaXRpb24oMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVDb25kaXRpb24oZ3JvdXBJbmRleDogbnVtYmVyLCBjb25kaXRpb25JbmRleDogbnVtYmVyKSB7XHJcbiAgaWYgKHRoaXMuZ3JvdXBzW2dyb3VwSW5kZXhdKSB7XHJcblxyXG4gICAgLy8gR2V0IHRoZSBmaWVsZCBrZXkgYmVmb3JlIGRlbGV0aW5nIHNvIHdlIGNhbiByZW1vdmUgZnJvbSBtb2RlbFxyXG4gICAgY29uc3QgZmllbGRLZXkgPSB0aGlzLmdldENvbmRpdGlvblZhbHVlS2V5KGdyb3VwSW5kZXgsIGNvbmRpdGlvbkluZGV4KTtcclxuXHJcbiAgICAvLyBVc2luZyBkZWxldGUgb3BlcmF0b3IgKHNldHMgdG8gdW5kZWZpbmVkLCB0aGVuIHdlIGZpbHRlcilcclxuICAgIGRlbGV0ZSB0aGlzLmdyb3Vwc1tncm91cEluZGV4XS5jb25kaXRpb25zW2NvbmRpdGlvbkluZGV4XTtcclxuXHJcbiAgICAvLyBSZW1vdmUgdGhlIHVuZGVmaW5lZCBlbnRyaWVzIGZyb20gY29uZGl0aW9ucyBhcnJheVxyXG4gICAgdGhpcy5ncm91cHNbZ3JvdXBJbmRleF0uY29uZGl0aW9ucyA9IHRoaXMuZ3JvdXBzW2dyb3VwSW5kZXhdLmNvbmRpdGlvbnMuZmlsdGVyKChjb25kaXRpb246IGFueSkgPT4gY29uZGl0aW9uICE9PSB1bmRlZmluZWQpO1xyXG5cclxuICAgIC8vIFJlbW92ZSBlbXB0eSBncm91cHNcclxuICAgIGlmICh0aGlzLmdyb3Vwc1tncm91cEluZGV4XS5jb25kaXRpb25zLmxlbmd0aCA9PT0gMCAmJiB0aGlzLmdyb3Vwcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgIGRlbGV0ZSB0aGlzLmdyb3Vwc1tncm91cEluZGV4XTtcclxuICAgICAgLy8gUmVtb3ZlIHVuZGVmaW5lZCBncm91cHMgZnJvbSBhcnJheVxyXG4gICAgICB0aGlzLmdyb3VwcyA9IHRoaXMuZ3JvdXBzLmZpbHRlcihncm91cCA9PiBncm91cCAhPT0gdW5kZWZpbmVkKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZW1vdmUgZnJvbSBmb3JtbHkgbW9kZWxcclxuICAgIHRoaXMucmVtb3ZlRnJvbU1vZGVsKGZpZWxkS2V5KTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7XHJcbiAgfVxyXG59XHJcblxyXG4vLyBSZW1vdmUgdGhlIGZpZWxkIGZyb20gZm9ybWx5IG1vZGVsXHJcbnJlbW92ZUZyb21Nb2RlbChmaWVsZEtleTogc3RyaW5nKSB7XHJcbiAgaWYgKHRoaXMubW9kZWwgJiYgdGhpcy5tb2RlbC5oYXNPd25Qcm9wZXJ0eShmaWVsZEtleSkpIHtcclxuICAgIGRlbGV0ZSB0aGlzLm1vZGVsW2ZpZWxkS2V5XTtcclxuICB9XHJcblxyXG4gIC8vIEFsc28gdXBkYXRlIHRoZSBmb3JtIGNvbnRyb2wgdG8gZW5zdXJlIHN5bmNcclxuICBpZiAodGhpcy5mb3JtQ29udHJvbC52YWx1ZSAmJiB0aGlzLmZvcm1Db250cm9sLnZhbHVlLmhhc093blByb3BlcnR5KGZpZWxkS2V5KSkge1xyXG4gICAgY29uc3QgdXBkYXRlZFZhbHVlID0geyAuLi50aGlzLmZvcm1Db250cm9sLnZhbHVlIH07XHJcbiAgICBkZWxldGUgdXBkYXRlZFZhbHVlW2ZpZWxkS2V5XTtcclxuICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUodXBkYXRlZFZhbHVlKTtcclxuICB9XHJcbn1cclxuXHJcbiAgLy8gVmFsdWUgTWFuYWdlbWVudFxyXG4gIHVwZGF0ZVZhbHVlKCkge1xyXG4gICAgLy8gU3luYyBjb25kaXRpb24gdmFsdWVzIGZyb20gZm9ybSBtb2RlbCB3aXRoIHNhZmUgYWNjZXNzXHJcbiAgICBmb3IgKGxldCBnID0gMDsgZyA8IHRoaXMuZ3JvdXBzLmxlbmd0aDsgZysrKSB7XHJcbiAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5ncm91cHNbZ107XHJcbiAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgZ3JvdXAuY29uZGl0aW9ucy5sZW5ndGg7IGMrKykge1xyXG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbiA9IGdyb3VwLmNvbmRpdGlvbnNbY107XHJcbiAgICAgICAgY29uc3QgZmllbGRLZXkgPSB0aGlzLmdldENvbmRpdGlvblZhbHVlS2V5KGcsIGMpO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc3QgbW9kZWxWYWx1ZSA9IHRoaXMubW9kZWw/LltmaWVsZEtleV07XHJcblxyXG4gICAgICAgIGlmIChtb2RlbFZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGNvbmRpdGlvbi52YWx1ZSA9IG1vZGVsVmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGZpbHRlcmVkR3JvdXBzID0gW107XHJcbiAgICBmb3IgKGxldCBnID0gMDsgZyA8IHRoaXMuZ3JvdXBzLmxlbmd0aDsgZysrKSB7XHJcbiAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5ncm91cHNbZ107XHJcbiAgICAgIGNvbnN0IHZhbGlkQ29uZGl0aW9ucyA9IFtdO1xyXG5cclxuICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBncm91cC5jb25kaXRpb25zLmxlbmd0aDsgYysrKSB7XHJcbiAgICAgICAgY29uc3QgY29uZGl0aW9uID0gZ3JvdXAuY29uZGl0aW9uc1tjXTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBjb25kaXRpb24uZmllbGQgJiZcclxuICAgICAgICAgIGNvbmRpdGlvbi5vcGVyYXRvciAmJlxyXG4gICAgICAgICAgY29uZGl0aW9uLnZhbHVlICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgIGNvbmRpdGlvbi52YWx1ZSAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgY29uZGl0aW9uLnZhbHVlICE9PSAnJ1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdmFsaWRDb25kaXRpb25zLnB1c2goY29uZGl0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh2YWxpZENvbmRpdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGZpbHRlcmVkR3JvdXBzLnB1c2goeyAuLi5ncm91cCwgY29uZGl0aW9uczogdmFsaWRDb25kaXRpb25zIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShmaWx0ZXJlZEdyb3Vwcyk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBjbGVhckFsbCgpIHtcclxuICB0aGlzLmdyb3VwcyA9IFtdO1xyXG5cclxuICAvLyBDb21wbGV0ZWx5IHJlc2V0IHRoZSBmb3JtIGFuZCBtb2RlbFxyXG4gIHRoaXMuZm9ybS5yZXNldCgpO1xyXG5cclxuICAvLyBNYW51YWxseSBzZXQgbW9kZWwgdG8gZW1wdHkgb2JqZWN0XHJcbiAgT2JqZWN0LmtleXModGhpcy5tb2RlbCkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgZGVsZXRlIHRoaXMubW9kZWxba2V5XTtcclxuICB9KTtcclxuICB0aGlzLmFkZEdyb3VwKCk7XHJcbn1cclxuXHJcbiAgLy8gSGVscGVyIG1ldGhvZHNcclxuICBnZXRRdWVyeVN0cnVjdHVyZSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuZ3JvdXBzO1xyXG4gIH1cclxuXHJcbiAgbG9hZFF1ZXJ5U3RydWN0dXJlKHF1ZXJ5U3RydWN0dXJlOiBhbnlbXSkge1xyXG4gICAgaWYgKHF1ZXJ5U3RydWN0dXJlICYmIEFycmF5LmlzQXJyYXkocXVlcnlTdHJ1Y3R1cmUpKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBzID0gcXVlcnlTdHJ1Y3R1cmUubWFwKChncm91cCwgZ3JvdXBJbmRleCkgPT4gKHtcclxuICAgICAgICBsb2dpY2FsT3BlcmF0b3I6IGdyb3VwLmxvZ2ljYWxPcGVyYXRvciB8fCAnYW5kJyxcclxuICAgICAgICBncm91cExvZ2ljYWxPcGVyYXRvcjogZ3JvdXAuZ3JvdXBMb2dpY2FsT3BlcmF0b3IgfHwgJ2FuZCcsXHJcbiAgICAgICAgY29uZGl0aW9uczogdGhpcy5pbml0aWFsaXplQ29uZGl0aW9uc1dpdGhGaWVsZENvbmZpZ3MoZ3JvdXAuY29uZGl0aW9ucyB8fCBbXSwgZ3JvdXBJbmRleClcclxuICAgICAgfSkpO1xyXG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXY+XHJcblxyXG4gIDwhLS0gR3JvdXBzIENvbnRhaW5lciB3aXRoIENvbm5lY3RpbmcgTGluZXMgLS0+XHJcbiAgPGRpdiBjbGFzcz1cImdyb3Vwcy1jb250YWluZXJcIiAjZ3JvdXBzQ29udGFpbmVyPlxyXG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgZ3JvdXBzOyBsZXQgZ3JvdXBJbmRleCA9IGluZGV4XCJcclxuICAgICAgICAgY2xhc3M9XCJncm91cC13cmFwcGVyIHJlbGF0aXZlXCJcclxuICAgICAgICAgI2dyb3VwRWxlbWVudD5cclxuXHJcbiAgICAgPCEtLSBWZXJ0aWNhbCBDb25uZWN0b3IgTGluZSBmcm9tIFByZXZpb3VzIEdyb3VwIC0tPlxyXG48ZGl2ICpuZ0lmPVwiZ3JvdXBJbmRleCA+IDBcIiBjbGFzcz1cInZlcnRpY2FsLWNvbm5lY3RvclwiPlxyXG4gIDxkaXYgY2xhc3M9XCJ2ZXJ0aWNhbC1saW5lXCI+PC9kaXY+XHJcblxyXG4gIDwhLS0gT3BlcmF0b3IgQnV0dG9uIC0tPlxyXG4gIDxidXR0b25cclxuICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgY2xhc3M9XCJncm91cC1sb2dpY2FsLW9wZXJhdG9yLWJveFwiXHJcbiAgICBbY2xhc3MuYW5kXT1cImdyb3VwLmdyb3VwTG9naWNhbE9wZXJhdG9yID09PSAnYW5kJ1wiXHJcbiAgICBbY2xhc3Mub3JdPVwiZ3JvdXAuZ3JvdXBMb2dpY2FsT3BlcmF0b3IgPT09ICdvcidcIlxyXG4gICAgKGNsaWNrKT1cIm9wUG9wb3Zlci50b2dnbGUoJGV2ZW50KVwiPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJvcGVyYXRvci10ZXh0XCI+XHJcbiAgICAgIHt7IGdldExvZ2ljYWxPcGVyYXRvclRleHQoZ3JvdXAuZ3JvdXBMb2dpY2FsT3BlcmF0b3IgfHwgJ2FuZCcpIH19XHJcbiAgICA8L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29ubmVjdG9yLWFycm93XCI+PC9kaXY+XHJcbiAgPC9idXR0b24+XHJcblxyXG4gIDwhLS0gUG9wb3ZlciAtLT5cclxuICA8cC1wb3BvdmVyICNvcFBvcG92ZXIgYXBwZW5kVG89XCJib2R5XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidy0xMnJlbVwiPlxyXG4gICAgICA8cC1saXN0Ym94XHJcbiAgICAgICAgW29wdGlvbnNdPVwibG9naWNhbE9wZXJhdG9yc1wiXHJcbiAgICAgICAgb3B0aW9uTGFiZWw9XCJsYWJlbFwiXHJcbiAgICAgICAgb3B0aW9uVmFsdWU9XCJ2YWx1ZVwiXHJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJncm91cC5ncm91cExvZ2ljYWxPcGVyYXRvclwiXHJcbiAgICAgICAgKG9uQ2hhbmdlKT1cIiBvcFBvcG92ZXIudG9nZ2xlKCRldmVudClcIlxyXG4gICAgICAgIFtzdHlsZV09XCJ7IHdpZHRoOiAnMTAwJScgfVwiPlxyXG4gICAgICA8L3AtbGlzdGJveD5cclxuICAgIDwvZGl2PlxyXG4gIDwvcC1wb3BvdmVyPlxyXG48L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJncm91cC1jb250YWluZXIgbWItNiBwLTEgYmctd2hpdGUgcm91bmRlZC1sZyBib3JkZXItbC00IGJvcmRlci10LTEgYm9yZGVyLWItMSBib3JkZXItci0xICBzaGFkb3ctc20gdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMzAwIHJlbGF0aXZlXCJcclxuICAgICAgICAgICBbY2xhc3MuYm9yZGVyLWJsdWUtNTAwXT1cImdyb3VwLmxvZ2ljYWxPcGVyYXRvciA9PT0gJ2FuZCdcIlxyXG4gICAgICAgICAgIFtjbGFzcy5ib3JkZXItb3ItNTAwXT1cImdyb3VwLmxvZ2ljYWxPcGVyYXRvciA9PT0gJ29yJ1wiXHJcbiAgICAgICAgICAgW2NsYXNzLnB1bHNlXT1cImdyb3VwSW5kZXggPT09IDBcIj5cclxuXHJcbiAgICAgICAgPCEtLSBSb3VuZGVkIEJ1dHRvbiBmb3IgXCLYsdio2Lcg2KfZhNi02LHZiNi3XCIgb24gbGVmdCBib3JkZXIgLS0+XHJcbjxkaXZcclxuICBjbGFzcz1cImFic29sdXRlIC1sZWZ0LTQgdG9wLTEvMiB0cmFuc2Zvcm0gLXRyYW5zbGF0ZS15LTEvMiB6LTEwIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMFwiXHJcblxyXG4+XHJcblxyXG5cclxuXHJcbjwhLS0gTG9naWNhbCBPcGVyYXRvciBQb3BvdmVyIEJ1dHRvbiAtLT5cclxuPHAtYnV0dG9uXHJcbiAgW3NldmVyaXR5XT1cImdyb3VwLmxvZ2ljYWxPcGVyYXRvciA9PT0gJ2FuZCcgPyAnc3VjY2VzcycgOiAnaW5mbydcIlxyXG4gIFtzdHlsZUNsYXNzXT1cImdyb3VwLmxvZ2ljYWxPcGVyYXRvciA9PT0gJ2FuZCdcclxuICAgID8gJ3AtYnV0dG9uLWljb24tb25seSBwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXNtIGxvZ2ljYWwtYW5kJ1xyXG4gICAgOiAncC1idXR0b24taWNvbi1vbmx5IHAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tc20gbG9naWNhbC1vcidcIlxyXG4gIChjbGljayk9XCJvcFBvcG92ZXIudG9nZ2xlKCRldmVudClcIj5cclxuICB7e2dyb3VwLmxvZ2ljYWxPcGVyYXRvciA9PT0gJ2FuZCcgPyAoJ2FuZCcgfCB0cmFuc2xhdGUpIDogKCdvcicgfCB0cmFuc2xhdGUpfX1cclxuPC9wLWJ1dHRvbj5cclxuXHJcbjwhLS0gUG9wb3ZlciBmb3IgT3BlcmF0b3IgU2VsZWN0aW9uIC0tPlxyXG48cC1wb3BvdmVyICNvcFBvcG92ZXIgYXBwZW5kVG89XCJib2R5XCI+XHJcbiAgPGRpdiBjbGFzcz1cInctMTByZW1cIj5cclxuICAgIDxwLWxpc3Rib3hcclxuICAgICAgW29wdGlvbnNdPVwiW1xyXG4gICAgICAgIHsgbGFiZWw6ICdhbmQnIHwgdHJhbnNsYXRlLCB2YWx1ZTogJ2FuZCcgfSxcclxuICAgICAgICB7IGxhYmVsOiAnb3InIHwgdHJhbnNsYXRlLCB2YWx1ZTogJ29yJyB9XHJcbiAgICAgIF1cIlxyXG4gICAgICBvcHRpb25MYWJlbD1cImxhYmVsXCJcclxuICAgICAgb3B0aW9uVmFsdWU9XCJ2YWx1ZVwiXHJcbiAgICAgIFsobmdNb2RlbCldPVwiZ3JvdXAubG9naWNhbE9wZXJhdG9yXCJcclxuICAgICAgKG9uQ2hhbmdlKT1cInVwZGF0ZVZhbHVlKCk7IG9wUG9wb3Zlci50b2dnbGUoJGV2ZW50KVwiXHJcbiAgICAgIFtzdHlsZV09XCJ7IHdpZHRoOiAnMTAwJScgfVwiPlxyXG4gICAgICA8bmctdGVtcGxhdGUgbGV0LWl0ZW0gcFRlbXBsYXRlPVwiaXRlbVwiPlxyXG4gICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvcC1saXN0Ym94PlxyXG4gIDwvZGl2PlxyXG48L3AtcG9wb3Zlcj5cclxuXHJcbjwvZGl2PlxyXG5cclxuXHJcblxyXG4gICAgICAgIDwhLS0gR3JvdXAgSGVhZGVyIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJncm91cC1oZWFkZXItd3JhcHBlciBtYi00IHBsLThcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJncm91cC1oZWFkZXIgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyXCI+XHJcblxyXG4gICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0xXCI+XHJcbiAgPGJ1dHRvblxyXG4gICAgcEJ1dHRvblxyXG4gICAgaWNvbj1cInBpIHBpLXBsdXNcIlxyXG4gICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICBjbGFzcz1cInAtYnV0dG9uLXN1Y2Nlc3MgcC1idXR0b24gcC1idXR0b24tc20gIXAtMS41IHJvdW5kZWQtbWQgdHJhbnNpdGlvbi1jb2xvcnNcIlxyXG4gICAgKGNsaWNrKT1cImFkZENvbmRpdGlvbihncm91cEluZGV4KVwiXHJcbiAgICBwVG9vbHRpcD1cInt7ICdBRERfQ09ORElUSU9OJyB8IHRyYW5zbGF0ZSB9fVwiXHJcbiAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cclxuICA8L2J1dHRvbj5cclxuICBAaWYgKGZpbHRlckNvdW50ID4gMCkge1xyXG4gICAgIDxidXR0b25cclxuICAgIHBCdXR0b25cclxuICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgaWNvbj1cInBpIHBpLWZpbHRlclwiXHJcbiAgICBjbGFzcz1cInAtYnV0dG9uLW91dGxpbmVkIHAtYnV0dG9uLXNtXCJcclxuICAgIChjbGljayk9XCJ0b2dnbGVBcHBsaWVkRmlsdGVycygpXCI+XHJcbiAgICB7eyAoc2hvd0FwcGxpZWRGaWx0ZXJzID8gJ1NIT1dfQUxMJyA6ICdTSE9XX0FQUExJRUQnKSB8IHRyYW5zbGF0ZSB9fVxyXG4gIDwvYnV0dG9uPlxyXG4gIH1cclxuICA8YnV0dG9uXHJcbiAgICAqbmdJZj1cImdyb3Vwcy5sZW5ndGggPiAxXCJcclxuICAgIHBCdXR0b25cclxuICAgIGljb249XCJwaSBwaS10aW1lc1wiXHJcbiAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgIGNsYXNzPVwicC1idXR0b24tZGFuZ2VyIHAtYnV0dG9uIHAtYnV0dG9uLXNtICFwLTEuNSByb3VuZGVkLW1kIHRyYW5zaXRpb24tY29sb3JzXCJcclxuICAgIChjbGljayk9XCJyZW1vdmVHcm91cChncm91cEluZGV4KVwiXHJcbiAgICBwVG9vbHRpcD1cInt7ICdERUxFVEVfR1JPVVAnIHwgdHJhbnNsYXRlIH19XCJcclxuICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxyXG4gIDwvYnV0dG9uPlxyXG48L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIENvbmRpdGlvbnMgaW4gdGhpcyBncm91cCAtLT5cclxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb25kaXRpb24gb2YgZ3JvdXAuY29uZGl0aW9uczsgbGV0IGNvbmRpdGlvbkluZGV4ID0gaW5kZXhcIlxyXG4gICAgICAgICAgICAgY2xhc3M9XCJwLTEgYmctZ3JheS01MCAgXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBncmlkLWNvbHMtMSAgZ2FwLTEgaXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDwhLS0gRmllbGQgU2VsZWN0b3IgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZDpjb2wtc3Bhbi0yXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCByb3VuZGVkLW1kIG92ZXJmbG93LWhpZGRlbiBib3JkZXIgYm9yZGVyLWdyYXktMzAwIGJnLXdoaXRlIHNoYWRvdy1zbVwiPlxyXG4gIDwhLS0gRmllbGQgU2VsZWN0b3IgQnV0dG9uIC0tPlxyXG4gIDxkaXYgc3R5bGU9XCJhbGlnbi1pdGVtczogY2VudGVyO2Rpc3BsYXk6IGZsZXg7ICAgIG1pbi13aWR0aDogMTMwcHg7bWF4LXdpZHRoOiAxMzBweDtcIiBjbGFzcz1cImZsZXgtc2hyaW5rLTAgXCI+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBzdHlsZT1cImhlaWdodDogLXdlYmtpdC1maWxsLWF2YWlsYWJsZTtcIlxyXG4gICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiB3LWZ1bGwgcHgtMyBweS0yIHRleHQtc20gYmctd2hpdGUgaG92ZXI6YmctZ3JheS01MCBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0yICBmb2N1czp6LTEwXCJcclxuICAgICAgKGNsaWNrKT1cIm92ZXJsYXkudG9nZ2xlKCRldmVudClcIj5cclxuICAgICAgPHNwYW4gIHN0eWxlPVwiXHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICBtYXgtd2lkdGg6IDEwMHB4O1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xyXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcclxuICBcIj57eyBnZXRGaWVsZExhYmVsKGNvbmRpdGlvbi5maWVsZCkgfHwgKCdTRUxFQ1RfRklFTEQnIHwgdHJhbnNsYXRlKSB9fTwvc3Bhbj5cclxuICAgICAgPGkgY2xhc3M9XCJwaSBwaS1jaGV2cm9uLWRvd24gbXItMiBtbC0yIHRleHQteHNcIj48L2k+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8IS0tIE92ZXJsYXkgQ29udGVudCAtLT5cclxuICAgIDxwLXBvcG92ZXIgI292ZXJsYXkgYXBwZW5kVG89XCJib2R5XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3LTYwXCI+XHJcbiAgICAgICAgPHAtbGlzdGJveFxyXG4gICAgICAgIHRhYmluZGV4PVwiMFwiXHJcbiAgICAgICAgICBbb3B0aW9uc109XCJwcm9wc1snZmllbGRzJ11cIlxyXG4gICAgICAgICAgb3B0aW9uTGFiZWw9XCJsYWJlbFwiXHJcbiAgICAgICAgICBvcHRpb25WYWx1ZT1cImtleVwiXHJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbmRpdGlvbi5maWVsZFwiXHJcbiAgICAgICAgICAob25DaGFuZ2UpPVwib25GaWVsZENoYW5nZShjb25kaXRpb24sIGdyb3VwSW5kZXgsIGNvbmRpdGlvbkluZGV4KTsgb3ZlcmxheS50b2dnbGUoJGV2ZW50KVwiXHJcbiAgICAgICAgICBbc3R5bGVdPVwieyB3aWR0aDogJzEwMCUnIH1cIj5cclxuICAgICAgICA8L3AtbGlzdGJveD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L3AtcG9wb3Zlcj5cclxuICA8L2Rpdj5cclxuIDwhLS0gT3BlcmF0b3IgQnV0dG9uIC0tPlxyXG4gIDxkaXYgc3R5bGU9XCJhbGlnbi1pdGVtczogY2VudGVyO2Rpc3BsYXk6IGZsZXg7XCIgIGNsYXNzPVwiZmxleC1zaHJpbmstMCBib3JkZXItbCBib3JkZXItciBib3JkZXItZ3JheS0zMDBcIj5cclxuICAgIDxidXR0b25cclxuICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctZnVsbCBweC0zIHB5LTIgdGV4dC1zbSBiZy1ncmF5LTUwIGhvdmVyOmJnLWdyYXktMTAwIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTIgIGZvY3VzOnotMTBcIlxyXG4gICAgICBzdHlsZT1cImhlaWdodDogLXdlYmtpdC1maWxsLWF2YWlsYWJsZTtcIlxyXG4gICAgICBwVG9vbHRpcD1cInt7IGdldE9wZXJhdG9yTGFiZWwoY29uZGl0aW9uLm9wZXJhdG9yKS5sYWJlbCB9fVwiXHJcbiAgICAgIChjbGljayk9XCJvcFBvcG92ZXIudG9nZ2xlKCRldmVudClcIj5cclxuICAgICAgPGkgW2NsYXNzXT1cImdldE9wZXJhdG9yTGFiZWwoY29uZGl0aW9uLm9wZXJhdG9yKS5pY29uXCI+PC9pPlxyXG4gICAgPC9idXR0b24+XHJcblxyXG4gICAgPHAtcG9wb3ZlciAjb3BQb3BvdmVyIGFwcGVuZFRvPVwiYm9keVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidy02MFwiPlxyXG4gICAgICAgIDxwLWxpc3Rib3hcclxuICAgICAgICAgIFtvcHRpb25zXT1cImNvbmRpdGlvbi5vcGVyYXRvcnNGb3JGaWVsZFwiXHJcbiAgICAgICAgICBvcHRpb25MYWJlbD1cImxhYmVsXCJcclxuICAgICAgICAgIG9wdGlvblZhbHVlPVwidmFsdWVcIlxyXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJjb25kaXRpb24ub3BlcmF0b3JcIlxyXG4gICAgICAgICAgKG9uQ2hhbmdlKT1cInVwZGF0ZVZhbHVlKCk7b3BQb3BvdmVyLnRvZ2dsZSgkZXZlbnQpXCJcclxuICAgICAgICAgIFtzdHlsZV09XCJ7IHdpZHRoOiAnMTAwJScgfVwiPlxyXG4gICAgICAgIDwvcC1saXN0Ym94PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvcC1wb3BvdmVyPlxyXG4gIDwvZGl2PlxyXG4gIDwhLS0gRm9ybSBGaWVsZCAtLT5cclxuICA8ZGl2IHN0eWxlPVwiYmFja2dyb3VuZDogI2Y5ZmFmYlwiIGNsYXNzPVwiZmxleC1ncm93IHAtMVwiPlxyXG4gICAgPGZvcm1seS1mb3JtXHJcbiAgICAgIFtmb3JtXT1cImZvcm1cIlxyXG4gICAgICBbZmllbGRzXT1cIltjb25kaXRpb24udmFsdWVGaWVsZENvbmZpZ11cIlxyXG4gICAgICBbbW9kZWxdPVwibW9kZWxcIj5cclxuICAgIDwvZm9ybWx5LWZvcm0+XHJcbiAgPC9kaXY+XHJcblxyXG5cclxuXHJcbiAgPCEtLSBEZWxldGUgQnV0dG9uIC0tPlxyXG4gIDxkaXYgc3R5bGU9XCJhbGlnbi1pdGVtczogY2VudGVyO2Rpc3BsYXk6IGZsZXg7XCIgY2xhc3M9XCJmbGV4LXNocmluay0wXCI+XHJcbiAgICA8YnV0dG9uXHJcbiAgICBzdHlsZT1cImhlaWdodDogLXdlYmtpdC1maWxsLWF2YWlsYWJsZTtcIlxyXG4gICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctZnVsbCBweC0zIHB5LTIgdGV4dC1zbSBiZy1yZWQtNTAgdGV4dC1yZWQtNjAwIGhvdmVyOmJnLXJlZC0xMDAgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLXJlZC01MDAgZm9jdXM6ei0xMFwiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAoY2xpY2spPVwicmVtb3ZlQ29uZGl0aW9uKGdyb3VwSW5kZXgsIGNvbmRpdGlvbkluZGV4KVwiXHJcbiAgICAgIHBUb29sdGlwPVwi2K3YsNmBINin2YTYtNix2LdcIlxyXG4gICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cclxuICAgICAgPGkgY2xhc3M9XCJwaSBwaS10aW1lc1wiPjwvaT5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIEdyb3VwIEZvb3RlciAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXAtZm9vdGVyIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBtdC0zIHB0LTMgYm9yZGVyLXQgYm9yZGVyLWdyYXktMjAwIFwiPlxyXG4gICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1ncmF5LTUwMFwiPlxyXG4gICAgICAgICAgICB7eyBncm91cC5jb25kaXRpb25zLmxlbmd0aCB9fSDYtNix2Lcg2YHZiiDZh9iw2Ycg2KfZhNmF2KzZhdmI2LnYqVxyXG4gICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtZ3JheS01MDBcIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJncm91cEluZGV4ID4gMFwiPlxyXG4gICAgICAgICAgICAgINmF2LHYqtio2Lcg2YXYuSDYp9mE2LPYp9io2YLYqSDYqNmAIDxzdHJvbmcgW2NsYXNzLnRleHQtYmx1ZS02MDBdPVwiZ3JvdXAuZ3JvdXBMb2dpY2FsT3BlcmF0b3IgPT09ICdhbmQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRleHQtYW1iZXItNjAwXT1cImdyb3VwLmdyb3VwTG9naWNhbE9wZXJhdG9yID09PSAnb3InXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBncm91cC5ncm91cExvZ2ljYWxPcGVyYXRvciA9PT0gJ2FuZCcgPyAn2YgnIDogJ9ij2YgnIH19XHJcbiAgICAgICAgICAgICAgPC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gPCEtLSBBY3Rpb25zIC0tPlxyXG48ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgZ2FwLTMgbXQtNlwiPlxyXG4gIDxidXR0b25cclxuICAgIHBCdXR0b25cclxuICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgaWNvbj1cInBpIHBpLXBsdXNcIlxyXG4gICAgW2xhYmVsXT1cIidHUk9VUCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgY2xhc3M9XCJwLWJ1dHRvbi1vdXRsaW5lZCBwLWJ1dHRvbi1zbSAhYmctd2hpdGUgIWJvcmRlciAhYm9yZGVyLWJsdWUtNTAwICF0ZXh0LWJsdWUtNjAwIGhvdmVyOiFiZy1ibHVlLTUwIHRyYW5zaXRpb24tY29sb3JzIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCJcclxuICAgIChjbGljayk9XCJhZGRHcm91cCgpO1wiPlxyXG4gIDwvYnV0dG9uPlxyXG5cclxuICA8YnV0dG9uXHJcbiAgICBwQnV0dG9uXHJcbiAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgIGljb249XCJwaSBwaS1wbHVzXCJcclxuICAgIFtsYWJlbF09XCInQ09ORElUSU9OJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICBjbGFzcz1cInAtYnV0dG9uLW91dGxpbmVkIHAtYnV0dG9uLXNtICFiZy13aGl0ZSAhYm9yZGVyICFib3JkZXItYmx1ZS01MDAgIXRleHQtYmx1ZS02MDAgaG92ZXI6IWJnLWJsdWUtNTAgdHJhbnNpdGlvbi1jb2xvcnMgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIlxyXG4gICAgKGNsaWNrKT1cImFkZENvbmRpdGlvblRvTGFzdEdyb3VwKClcIj5cclxuICA8L2J1dHRvbj5cclxuXHJcbiAgPGJ1dHRvblxyXG4gICAgKm5nSWY9XCJncm91cHMubGVuZ3RoID4gMFwiXHJcbiAgICBwQnV0dG9uXHJcbiAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgIGljb249XCJwaSBwaS10cmFzaFwiXHJcbiAgICBbbGFiZWxdPVwiJ0NMRUFSJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICBjbGFzcz1cInAtYnV0dG9uLWRhbmdlciBwLWJ1dHRvbi1vdXRsaW5lZCBwLWJ1dHRvbi1zbSAhYmctd2hpdGUgIWJvcmRlciAhYm9yZGVyLXJlZC01MDAgIXRleHQtcmVkLTYwMCBob3ZlcjohYmctcmVkLTUwIHRyYW5zaXRpb24tY29sb3JzIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCJcclxuICAgIChjbGljayk9XCJjbGVhckFsbCgpXCI+XHJcbiAgPC9idXR0b24+XHJcbjwvZGl2PlxyXG5cclxuPCEtLSBFbXB0eSBTdGF0ZSAtLT5cclxuPGRpdiAqbmdJZj1cImdyb3Vwcy5sZW5ndGggPT09IDBcIiBjbGFzcz1cImVtcHR5LXN0YXRlIHRleHQtY2VudGVyIHAtNiBib3JkZXItMiBib3JkZXItZGFzaGVkIGJvcmRlci1ncmF5LTMwMCByb3VuZGVkLXhsIGJnLWdyYXktNTBcIj5cclxuICA8aSBjbGFzcz1cInBpIHBpLXNlYXJjaCB0ZXh0LTR4bCB0ZXh0LWdyYXktNDAwIG1iLTNcIj48L2k+XHJcbiAgPHAgY2xhc3M9XCJ0ZXh0LWdyYXktNTAwIG1iLTRcIj57eyAnTk9fU0VBUkNIX0NPTkRJVElPTlMnIHwgdHJhbnNsYXRlIH19PC9wPlxyXG4gIDxidXR0b25cclxuICAgIHBCdXR0b25cclxuICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgaWNvbj1cInBpIHBpLXBsdXNcIlxyXG4gICAgW2xhYmVsXT1cIidBRERfU0VBUkNIX0NPTkRJVElPTicgfCB0cmFuc2xhdGVcIlxyXG4gICAgY2xhc3M9XCJwLWJ1dHRvbi1vdXRsaW5lZCAhcHgtNCAhcHktMlwiXHJcbiAgICAoY2xpY2spPVwiYWRkR3JvdXAoKVwiPlxyXG4gIDwvYnV0dG9uPlxyXG48L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==","// tab-type.component.ts\nimport { Component } from '@angular/core';\nimport { FieldType, FormlyField } from '@ngx-formly/core';\nimport { CommonModule } from '@angular/common';\nimport { TabsModule } from 'primeng/tabs';\nimport { BadgeModule } from 'primeng/badge';\nimport { TranslateModule } from '@ngx-translate/core';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"primeng/tabs\";\nimport * as i3 from \"primeng/badge\";\nimport * as i4 from \"@ngx-translate/core\";\nexport class TabTypeComponent extends FieldType {\n activeTabValue = '0';\n ngOnInit() {\n if (this.props['activeIndex'] !== undefined) {\n this.activeTabValue = this.props['activeIndex'].toString();\n }\n }\n resolveBadge(tab) {\n const badge = tab.props?.['badge'];\n if (typeof badge === 'function') {\n const result = badge(tab);\n return result == 0 ? null : result;\n }\n return badge ?? null;\n }\n onTabChange(newValue) {\n this.activeTabValue = newValue;\n if (this.props['onTabChange']) {\n this.props['onTabChange']({\n activeIndex: parseInt(newValue),\n tab: this.field.fieldGroup?.[parseInt(newValue)]\n });\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: TabTypeComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.8\", type: TabTypeComponent, isStandalone: true, selector: \"formly-tab-type\", usesInheritance: true, ngImport: i0, template: `\r\n <p-tabs\r\n [value]=\"activeTabValue\"\r\n [scrollable]=\"props['scrollable'] !== false\"\r\n [lazy]=\"props['lazy'] !== false\"\r\n (valueChange)=\"onTabChange($event)\">\r\n\r\n <p-tablist>\r\n <p-tab\r\n *ngFor=\"let tab of field.fieldGroup; let i = index\"\r\n [value]=\"i.toString()\"\r\n [disabled]=\"tab.props?.disabled\">\r\n\r\n @if(tab.props){\r\n <div class=\"flex align-items-center gap-2\">\r\n <!-- Left Icon -->\r\n <i *ngIf=\"tab.props['leftIcon']\" [class]=\"tab.props['leftIcon']\" class=\"text-sm\"></i>\r\n\r\n <!-- Label -->\r\n <span>{{ (tab.props['tabLabel'] ?? '') | translate }}</span>\r\n\r\n <!-- Badge -->\r\n\r\n <p-badge\r\n *ngIf=\"resolveBadge(tab) !== null\"\r\n [value]=\"resolveBadge(tab)\"\r\n size=\"small\">\r\n </p-badge>\r\n\r\n <!-- Right Icon -->\r\n <i *ngIf=\"tab.props['rightIcon']\" [class]=\"tab.props['rightIcon']\" class=\"text-sm\"></i>\r\n </div>\r\n }\r\n </p-tab>\r\n </p-tablist>\r\n\r\n <p-tabpanels style=\"padding: 0;\">\r\n <p-tabpanel\r\n *ngFor=\"let tab of field.fieldGroup; let i = index\"\r\n [value]=\"i.toString()\">\r\n\r\n <div class=\"p-3\">\r\n <formly-field [field]=\"tab\"></formly-field>\r\n\r\n <!-- Empty state -->\r\n <div\r\n *ngIf=\"!tab.fieldGroup || tab.fieldGroup.length === 0\"\r\n class=\"empty-tab text-center p-4 text-500\">\r\n <i class=\"pi pi-inbox text-2xl mb-2\"></i>\r\n <p>لا توجد حقول في هذه التبويبة</p>\r\n </div>\r\n </div>\r\n </p-tabpanel>\r\n </p-tabpanels>\r\n </p-tabs>\r\n `, isInline: true, dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"ngmodule\", type: TabsModule }, { kind: \"component\", type: i2.Tabs, selector: \"p-tabs\", inputs: [\"value\", \"scrollable\", \"lazy\", \"selectOnFocus\", \"showNavigators\", \"tabindex\"], outputs: [\"valueChange\"] }, { kind: \"component\", type: i2.TabPanels, selector: \"p-tabpanels\" }, { kind: \"component\", type: i2.TabPanel, selector: \"p-tabpanel\", inputs: [\"value\"], outputs: [\"valueChange\"] }, { kind: \"component\", type: i2.TabList, selector: \"p-tablist\" }, { kind: \"component\", type: i2.Tab, selector: \"p-tab\", inputs: [\"value\", \"disabled\"], outputs: [\"valueChange\"] }, { kind: \"ngmodule\", type: BadgeModule }, { kind: \"component\", type: i3.Badge, selector: \"p-badge\", inputs: [\"styleClass\", \"badgeSize\", \"size\", \"severity\", \"value\", \"badgeDisabled\"] }, { kind: \"component\", type: FormlyField, selector: \"formly-field\", inputs: [\"field\"] }, { kind: \"ngmodule\", type: TranslateModule }, { kind: \"pipe\", type: i4.TranslatePipe, name: \"translate\" }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: TabTypeComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'formly-tab-type',\n template: `\r\n <p-tabs\r\n [value]=\"activeTabValue\"\r\n [scrollable]=\"props['scrollable'] !== false\"\r\n [lazy]=\"props['lazy'] !== false\"\r\n (valueChange)=\"onTabChange($event)\">\r\n\r\n <p-tablist>\r\n <p-tab\r\n *ngFor=\"let tab of field.fieldGroup; let i = index\"\r\n [value]=\"i.toString()\"\r\n [disabled]=\"tab.props?.disabled\">\r\n\r\n @if(tab.props){\r\n <div class=\"flex align-items-center gap-2\">\r\n <!-- Left Icon -->\r\n <i *ngIf=\"tab.props['leftIcon']\" [class]=\"tab.props['leftIcon']\" class=\"text-sm\"></i>\r\n\r\n <!-- Label -->\r\n <span>{{ (tab.props['tabLabel'] ?? '') | translate }}</span>\r\n\r\n <!-- Badge -->\r\n\r\n <p-badge\r\n *ngIf=\"resolveBadge(tab) !== null\"\r\n [value]=\"resolveBadge(tab)\"\r\n size=\"small\">\r\n </p-badge>\r\n\r\n <!-- Right Icon -->\r\n <i *ngIf=\"tab.props['rightIcon']\" [class]=\"tab.props['rightIcon']\" class=\"text-sm\"></i>\r\n </div>\r\n }\r\n </p-tab>\r\n </p-tablist>\r\n\r\n <p-tabpanels style=\"padding: 0;\">\r\n <p-tabpanel\r\n *ngFor=\"let tab of field.fieldGroup; let i = index\"\r\n [value]=\"i.toString()\">\r\n\r\n <div class=\"p-3\">\r\n <formly-field [field]=\"tab\"></formly-field>\r\n\r\n <!-- Empty state -->\r\n <div\r\n *ngIf=\"!tab.fieldGroup || tab.fieldGroup.length === 0\"\r\n class=\"empty-tab text-center p-4 text-500\">\r\n <i class=\"pi pi-inbox text-2xl mb-2\"></i>\r\n <p>لا توجد حقول في هذه التبويبة</p>\r\n </div>\r\n </div>\r\n </p-tabpanel>\r\n </p-tabpanels>\r\n </p-tabs>\r\n `,\n standalone: true,\n imports: [CommonModule, TabsModule, BadgeModule, FormlyField, TranslateModule]\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLXR5cGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy51aS5jb3JlL2dlbmVyaWMtc2VhcmNoLWFkdmFuY2VkL3NyYy9saWIvdGFiLXR5cGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHdCQUF3QjtBQUN4QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFxQixNQUFNLGtCQUFrQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7QUErRHRELE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxTQUE0QjtJQUNoRSxjQUFjLEdBQVcsR0FBRyxDQUFDO0lBRTdCLFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzdELENBQUM7SUFDSCxDQUFDO0lBQ0YsWUFBWSxDQUFDLEdBQXNCO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQyxJQUFJLE9BQU8sS0FBSyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQixPQUFPLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ3JDLENBQUM7UUFDRCxPQUFPLEtBQUssSUFBSSxJQUFJLENBQUM7SUFDdkIsQ0FBQztJQUNELFdBQVcsQ0FBQyxRQUFhO1FBQ3ZCLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO1FBRS9CLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ3hCLFdBQVcsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDO2dCQUMvQixHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDakQsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7dUdBekJVLGdCQUFnQjsyRkFBaEIsZ0JBQWdCLGtHQTNEakI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1RFQsMkRBRVMsWUFBWSwrUEFBRSxVQUFVLDhpQkFBRSxXQUFXLDhLQUFDLFdBQVcsMkVBQUMsZUFBZTs7MkZBRWhFLGdCQUFnQjtrQkE3RDVCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdURUO29CQUNELFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBQyxXQUFXLEVBQUMsZUFBZSxDQUFDO2lCQUM3RSIsInNvdXJjZXNDb250ZW50IjpbIi8vIHRhYi10eXBlLmNvbXBvbmVudC50c1xyXG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRmllbGRUeXBlLCBGb3JtbHlGaWVsZCwgRm9ybWx5RmllbGRDb25maWcgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgVGFic01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdGFicyc7XHJcbmltcG9ydCB7IEJhZGdlTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9iYWRnZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdmb3JtbHktdGFiLXR5cGUnLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8cC10YWJzXHJcbiAgICAgIFt2YWx1ZV09XCJhY3RpdmVUYWJWYWx1ZVwiXHJcbiAgICAgIFtzY3JvbGxhYmxlXT1cInByb3BzWydzY3JvbGxhYmxlJ10gIT09IGZhbHNlXCJcclxuICAgICAgW2xhenldPVwicHJvcHNbJ2xhenknXSAhPT0gZmFsc2VcIlxyXG4gICAgICAodmFsdWVDaGFuZ2UpPVwib25UYWJDaGFuZ2UoJGV2ZW50KVwiPlxyXG5cclxuICAgICAgPHAtdGFibGlzdD5cclxuICAgICAgICA8cC10YWJcclxuICAgICAgICAgICpuZ0Zvcj1cImxldCB0YWIgb2YgZmllbGQuZmllbGRHcm91cDsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICBbdmFsdWVdPVwiaS50b1N0cmluZygpXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCJ0YWIucHJvcHM/LmRpc2FibGVkXCI+XHJcblxyXG4gICAgICAgICAgQGlmKHRhYi5wcm9wcyl7XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICAgICAgPCEtLSBMZWZ0IEljb24gLS0+XHJcbiAgICAgICAgICAgIDxpICpuZ0lmPVwidGFiLnByb3BzWydsZWZ0SWNvbiddXCIgW2NsYXNzXT1cInRhYi5wcm9wc1snbGVmdEljb24nXVwiIGNsYXNzPVwidGV4dC1zbVwiPjwvaT5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gTGFiZWwgLS0+XHJcbiAgICAgICAgICAgIDxzcGFuPnt7ICh0YWIucHJvcHNbJ3RhYkxhYmVsJ10gPz8gJycpIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBCYWRnZSAtLT5cclxuXHJcbiAgICAgICAgICAgICA8cC1iYWRnZVxyXG4gICAgICAgICAgICAgICpuZ0lmPVwicmVzb2x2ZUJhZGdlKHRhYikgIT09IG51bGxcIlxyXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJyZXNvbHZlQmFkZ2UodGFiKVwiXHJcbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCI+XHJcbiAgICAgICAgICAgIDwvcC1iYWRnZT5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gUmlnaHQgSWNvbiAtLT5cclxuICAgICAgICAgICAgPGkgKm5nSWY9XCJ0YWIucHJvcHNbJ3JpZ2h0SWNvbiddXCIgW2NsYXNzXT1cInRhYi5wcm9wc1sncmlnaHRJY29uJ11cIiBjbGFzcz1cInRleHQtc21cIj48L2k+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L3AtdGFiPlxyXG4gICAgICA8L3AtdGFibGlzdD5cclxuXHJcbiAgICAgIDxwLXRhYnBhbmVscyBzdHlsZT1cInBhZGRpbmc6IDA7XCI+XHJcbiAgICAgICAgPHAtdGFicGFuZWxcclxuICAgICAgICAgICpuZ0Zvcj1cImxldCB0YWIgb2YgZmllbGQuZmllbGRHcm91cDsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICBbdmFsdWVdPVwiaS50b1N0cmluZygpXCI+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInAtM1wiPlxyXG4gICAgICAgICAgICA8Zm9ybWx5LWZpZWxkIFtmaWVsZF09XCJ0YWJcIj48L2Zvcm1seS1maWVsZD5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gRW1wdHkgc3RhdGUgLS0+XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAqbmdJZj1cIiF0YWIuZmllbGRHcm91cCB8fCB0YWIuZmllbGRHcm91cC5sZW5ndGggPT09IDBcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZW1wdHktdGFiIHRleHQtY2VudGVyIHAtNCB0ZXh0LTUwMFwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktaW5ib3ggdGV4dC0yeGwgbWItMlwiPjwvaT5cclxuICAgICAgICAgICAgICA8cD7ZhNinINiq2YjYrNivINit2YLZiNmEINmB2Yog2YfYsNmHINin2YTYqtio2YjZitio2Kk8L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9wLXRhYnBhbmVsPlxyXG4gICAgICA8L3AtdGFicGFuZWxzPlxyXG4gICAgPC9wLXRhYnM+XHJcbiAgYCxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFRhYnNNb2R1bGUsIEJhZGdlTW9kdWxlLEZvcm1seUZpZWxkLFRyYW5zbGF0ZU1vZHVsZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFRhYlR5cGVDb21wb25lbnQgZXh0ZW5kcyBGaWVsZFR5cGU8Rm9ybWx5RmllbGRDb25maWc+IHtcclxuICBhY3RpdmVUYWJWYWx1ZTogc3RyaW5nID0gJzAnO1xyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICh0aGlzLnByb3BzWydhY3RpdmVJbmRleCddICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5hY3RpdmVUYWJWYWx1ZSA9IHRoaXMucHJvcHNbJ2FjdGl2ZUluZGV4J10udG9TdHJpbmcoKTtcclxuICAgIH1cclxuICB9XHJcbiByZXNvbHZlQmFkZ2UodGFiOiBGb3JtbHlGaWVsZENvbmZpZyk6IGFueSB7XHJcbiAgICBjb25zdCBiYWRnZSA9IHRhYi5wcm9wcz8uWydiYWRnZSddO1xyXG4gICAgaWYgKHR5cGVvZiBiYWRnZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSBiYWRnZSh0YWIpO1xyXG4gICAgICByZXR1cm4gcmVzdWx0ID09IDAgPyBudWxsIDogcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJhZGdlID8/IG51bGw7XHJcbiAgfVxyXG4gIG9uVGFiQ2hhbmdlKG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMuYWN0aXZlVGFiVmFsdWUgPSBuZXdWYWx1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5wcm9wc1snb25UYWJDaGFuZ2UnXSkge1xyXG4gICAgICB0aGlzLnByb3BzWydvblRhYkNoYW5nZSddKHtcclxuICAgICAgICBhY3RpdmVJbmRleDogcGFyc2VJbnQobmV3VmFsdWUpLFxyXG4gICAgICAgIHRhYjogdGhpcy5maWVsZC5maWVsZEdyb3VwPy5bcGFyc2VJbnQobmV3VmFsdWUpXVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19","// columns-builder.component.ts\nimport { Component } from '@angular/core';\nimport { FieldType, FormlyForm } from '@ngx-formly/core';\nimport { FormGroup, FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ButtonModule } from 'primeng/button';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { DatePickerModule } from 'primeng/datepicker';\nimport { InputGroupModule } from 'primeng/inputgroup';\nimport { InputGroupAddonModule } from 'primeng/inputgroupaddon';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { ListboxModule } from 'primeng/listbox';\nimport { MenuModule } from 'primeng/menu';\nimport { PopoverModule } from 'primeng/popover';\nimport { RadioButtonModule } from 'primeng/radiobutton';\nimport { SelectModule } from 'primeng/select';\nimport { TooltipModule } from 'primeng/tooltip';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@angular/forms\";\nimport * as i3 from \"primeng/checkbox\";\nimport * as i4 from \"@ngx-translate/core\";\nexport class ColumnsBuilderComponent extends FieldType {\n dragStartIndex = -1;\n _columnsForm;\n aggregateFunctions = [\n { label: 'Sum', value: 'sum' },\n { label: 'Average', value: 'avg' },\n { label: 'Count', value: 'count' },\n { label: 'Minimum', value: 'min' },\n { label: 'Maximum', value: 'max' }\n ];\n get columns() {\n return this.props['fields'] || [];\n }\n get columnsForm() {\n return this._columnsForm;\n }\n get visibleColumnsCount() {\n return this.columns.filter(col => this.isColumnVisible(col.key)).length;\n }\n get numericColumnsCount() {\n return this.columns.filter(col => col.isNumeric).length;\n }\n get aggregatedColumnsCount() {\n return this.columns.filter(col => this.hasAggregateFunction(col.key)).length;\n }\n ngOnInit() {\n this.initializeForm();\n this.setupValueChanges();\n }\n // Form Methods\n initializeForm() {\n const parentForm = this.form;\n const fieldKey = this.field.key;\n if (!fieldKey)\n return;\n // Get or create the FormGroup in the parent form\n let formGroup = parentForm.get(fieldKey);\n if (!formGroup || !(formGroup instanceof FormGroup)) {\n // Create new FormGroup\n formGroup = new FormGroup({});\n parentForm.setControl(fieldKey, formGroup);\n // Initialize with existing model data\n const initialModel = this.model[fieldKey] || {};\n this.columns.forEach(column => {\n const columnConfig = initialModel[column.key] || {};\n const columnGroup = new FormGroup({\n isVisible: new FormControl(columnConfig.isVisible ?? column.defaultVisible),\n displayName: new FormControl(columnConfig.displayName ?? column.label),\n aggregateFunction: new FormControl(columnConfig.aggregateFunction ?? ''),\n order: new FormControl(columnConfig.order ?? 0)\n });\n formGroup.addControl(column.key, columnGroup);\n });\n }\n // Store the FormGroup reference\n this._columnsForm = formGroup;\n // Initialize the model with current form values\n this.updateModel();\n }\n setupValueChanges() {\n // Listen to form changes and update the model\n this.columnsForm.valueChanges.subscribe(() => {\n this.updateModel();\n });\n }\n updateModel() {\n const fieldKey = this.field.key;\n if (fieldKey) {\n // Update the model with current form values\n this.model[fieldKey] = this.columnsForm.value;\n // Trigger form control update to notify Formly\n this.formControl.setValue(this.columnsForm.value);\n }\n }\n // Called when form controls change\n onFormChange() {\n this.updateModel();\n }\n // Drag & Drop Methods\n onDragStart(event, index) {\n this.dragStartIndex = index;\n event.dataTransfer?.setData('text/plain', index.toString());\n }\n onDragOver(event) {\n event.preventDefault();\n }\n onDrop(event, dropIndex) {\n event.preventDefault();\n const dragIndex = this.dragStartIndex;\n if (dragIndex !== -1 && dragIndex !== dropIndex) {\n // Reorder the columns array\n const movedItem = this.columns[dragIndex];\n const newColumns = [...this.columns];\n newColumns.splice(dragIndex, 1);\n newColumns.splice(dropIndex, 0, movedItem);\n // Update the props to trigger change detection\n this.props['fields'] = newColumns;\n // Update order in form controls\n this.updateColumnOrders();\n // Update model after reordering\n this.updateModel();\n }\n this.removeDragStyles(event);\n }\n onDragEnter(event) {\n event.currentTarget.classList.add('border-blue-500', 'bg-blue-50');\n }\n onDragLeave(event) {\n this.removeDragStyles(event);\n }\n removeDragStyles(event) {\n event.currentTarget.classList.remove('border-blue-500', 'bg-blue-50');\n }\n updateColumnOrders() {\n // Store the order in form controls\n this.columns.forEach((column, index) => {\n const orderControl = this.getColumnControl(column.key, 'order');\n if (!orderControl) {\n const columnGroup = this.columnsForm.get(column.key);\n if (columnGroup && !columnGroup.get('order')) {\n columnGroup.addControl('order', new FormControl(index));\n }\n }\n else {\n orderControl.setValue(index);\n }\n });\n }\n getColumnControl(columnKey, controlName) {\n const columnGroup = this.columnsForm.get(columnKey);\n if (!columnGroup) {\n const fallbackControl = new FormControl(this.getDefaultValue(controlName));\n return fallbackControl;\n }\n const control = columnGroup.get(controlName);\n if (!control) {\n const fallbackControl = new FormControl(this.getDefaultValue(controlName));\n columnGroup.addControl(controlName, fallbackControl);\n return fallbackControl;\n }\n return control;\n }\n getDefaultValue(controlName) {\n switch (controlName) {\n case 'isVisible': return true;\n case 'displayName': return '';\n case 'aggregateFunction': return '';\n case 'order': return 0;\n default: return null;\n }\n }\n isColumnVisible(columnKey) {\n const control = this.getColumnControl(columnKey, 'isVisible');\n return control?.value === true;\n }\n hasAggregateFunction(columnKey) {\n const control = this.getColumnControl(columnKey, 'aggregateFunction');\n return !!control?.value;\n }\n getAggregateFunctionValue(columnKey) {\n const control = this.getColumnControl(columnKey, 'aggregateFunction');\n return control?.value || '';\n }\n toggleAll(visible) {\n this.columns.forEach(column => {\n const visibleControl = this.getColumnControl(column.key, 'isVisible');\n if (visibleControl) {\n visibleControl.setValue(visible);\n }\n });\n this.updateModel();\n }\n resetToDefault() {\n this.columns.forEach((column, index) => {\n const columnGroup = this.columnsForm.get(column.key);\n if (columnGroup) {\n columnGroup.get('isVisible')?.setValue(column.defaultVisible);\n columnGroup.get('displayName')?.setValue(column.label);\n columnGroup.get('aggregateFunction')?.setValue('');\n columnGroup.get('order')?.setValue(index);\n }\n });\n this.updateModel();\n }\n getAggregateLabel(functionName) {\n const func = this.aggregateFunctions.find(f => f.value === functionName);\n return func ? func.label : functionName;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: ColumnsBuilderComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.1.8\", type: ColumnsBuilderComponent, isStandalone: true, selector: \"formly-columns-builder\", usesInheritance: true, ngImport: i0, template: `\r\n <div>\r\n <!-- Header -->\r\n <div class=\"mb-6\">\r\n <h5 class=\"text-lg font-semibold text-gray-900 mb-2\">{{ props.label || ('COLUMNS_MANAGEMENT' | translate) }}</h5>\r\n <p class=\"text-gray-600 text-sm\">{{ props.description || ('COLUMNS_DESCRIPTION' | translate) }}</p>\r\n </div>\r\n\r\n <!-- Quick Actions -->\r\n <div class=\"flex flex-wrap gap-2 mb-6\">\r\n <button\r\n type=\"button\"\r\n (click)=\"toggleAll(true)\"\r\n class=\"inline-flex items-center gap-2 px-3 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors\"\r\n >\r\n <i class=\"pi pi-eye\"></i>\r\n {{ 'SHOW_ALL' | translate }}\r\n </button>\r\n <button\r\n type=\"button\"\r\n (click)=\"toggleAll(false)\"\r\n class=\"inline-flex items-center gap-2 px-3 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors\"\r\n >\r\n <i class=\"pi pi-eye-slash\"></i>\r\n {{ 'HIDE_ALL' | translate }}\r\n </button>\r\n <button\r\n type=\"button\"\r\n (click)=\"resetToDefault()\"\r\n class=\"inline-flex items-center gap-2 px-3 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors\"\r\n >\r\n <i class=\"pi pi-refresh\"></i>\r\n {{ 'RESET_TO_DEFAULT' | translate }}\r\n </button>\r\n </div>\r\n\r\n <!-- Drag Info -->\r\n <div class=\"mb-4 p-2 bg-blue-50 border border-blue-200 rounded text-sm text-blue-700\">\r\n <i class=\"pi pi-info-circle mr-2\"></i>\r\n {{ 'DRAG_COLUMNS_INFO' | translate }}\r\n </div>\r\n\r\n <!-- Columns List -->\r\n <div class=\"space-y-3\">\r\n <div *ngIf=\"columns.length === 0\" class=\"text-center py-8 px-4 border-2 border-dashed border-gray-300 rounded-lg bg-gray-50\">\r\n <i class=\"pi pi-table text-4xl text-gray-400 mb-3\"></i>\r\n <p class=\"text-gray-500\">{{ 'NO_COLUMNS_AVAILABLE' | translate }}</p>\r\n </div>\r\n\r\n <div *ngFor=\"let column of columns; let i = index\"\r\n class=\"bg-gray-50 rounded-lg border border-gray-200 p-1 transition-colors hover:bg-gray-100\"\r\n draggable=\"true\"\r\n (dragstart)=\"onDragStart($event, i)\"\r\n (dragover)=\"onDragOver($event)\"\r\n (drop)=\"onDrop($event, i)\"\r\n (dragenter)=\"onDragEnter($event)\"\r\n (dragleave)=\"onDragLeave($event)\">\r\n\r\n <div class=\"grid grid-cols-12 gap-4 items-center\">\r\n <!-- Drag Handle -->\r\n <div class=\"col-span-1 flex justify-center cursor-move text-gray-400 hover:text-gray-600\"\r\n draggable=\"true\"\r\n (dragstart)=\"onDragStart($event, i)\">\r\n <i class=\"pi pi-bars\"></i>\r\n </div>\r\n\r\n <!-- Visibility Toggle -->\r\n <div class=\"col-span-1 flex justify-center\">\r\n <p-checkbox\r\n [binary]=\"true\"\r\n [formControl]=\"getColumnControl(column.key, 'isVisible')\"\r\n [inputId]=\"'visible_' + column.key\"\r\n styleClass=\"[&>div]:border-gray-300 [&>div]:hover:border-gray-400\"\r\n (onChange)=\"onFormChange()\"\r\n >\r\n </p-checkbox>\r\n </div>\r\n\r\n <!-- Column Info -->\r\n <div class=\"col-span-12 md:col-span-4\">\r\n <label [for]=\"'visible_' + column.key\" class=\"block font-medium text-gray-900 cursor-pointer hover:text-blue-600\">\r\n {{ column.label }}\r\n </label>\r\n <p class=\"text-xs text-gray-500 mt-1\">{{ column.key }}</p>\r\n </div>\r\n\r\n <!-- Display Name -->\r\n <div class=\"col-span-12 md:col-span-3\">\r\n <input\r\n *ngIf=\"isColumnVisible(column.key)\"\r\n type=\"text\"\r\n [formControl]=\"getColumnControl(column.key, 'displayName')\"\r\n [placeholder]=\"column.label\"\r\n class=\"w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 text-sm\"\r\n (blur)=\"onFormChange()\"\r\n >\r\n </div>\r\n\r\n <!-- Aggregate Function -->\r\n <!-- <div class=\"col-span-12 md:col-span-3\">\r\n <div *ngIf=\"column.aggregatable && isColumnVisible(column.key)\">\r\n <p-select\r\n [options]=\"aggregateFunctions\"\r\n optionLabel=\"label\"\r\n optionValue=\"value\"\r\n [formControl]=\"getColumnControl(column.key, 'aggregateFunction')\"\r\n [placeholder]=\"'SELECT_AGGREGATE' | translate\"\r\n [showClear]=\"true\"\r\n styleClass=\"w-full\"\r\n (onChange)=\"onFormChange()\"\r\n >\r\n </p-select>\r\n </div>\r\n <span *ngIf=\"!column.aggregatable && isColumnVisible(column.key)\" class=\"text-xs text-gray-500\">\r\n {{ 'NO_AGGREGATES_AVAILABLE' | translate }}\r\n </span>\r\n </div> -->\r\n </div>\r\n\r\n <!-- Aggregate Info -->\r\n <div *ngIf=\"hasAggregateFunction(column.key) && isColumnVisible(column.key)\"\r\n class=\"mt-3 p-3 bg-blue-50 border border-blue-200 rounded-lg\">\r\n <div class=\"flex items-center gap-2\">\r\n <i class=\"pi pi-info-circle text-blue-500 text-sm\"></i>\r\n <span class=\"text-sm text-blue-800\">\r\n {{ 'AGGREGATE_INFO' | translate:{function: getAggregateLabel(getAggregateFunctionValue(column.key))} }}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Summary -->\r\n <div class=\"flex flex-col sm:flex-row justify-between items-center gap-4 mt-6 pt-4 border-t border-gray-200\">\r\n <span class=\"text-sm text-gray-600\">\r\n {{ 'COLUMNS_VISIBLE_COUNT' | translate:{visible: visibleColumnsCount, total: columns.length} }}\r\n </span>\r\n <!-- <div class=\"flex gap-4 text-sm\">\r\n <span class=\"inline-flex items-center gap-1 text-green-600\">\r\n <i class=\"pi pi-chart-line\"></i>\r\n {{ numericColumnsCount }} {{ 'NUMERIC' | translate }}\r\n </span>\r\n <span class=\"inline-flex items-center gap-1 text-blue-600\">\r\n <i class=\"pi pi-calculator\"></i>\r\n {{ aggregatedColumnsCount }} {{ 'AGGREGATED' | translate }}\r\n </span>\r\n </div> -->\r\n </div>\r\n</div>\r\n `, isInline: true, dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i2.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i2.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"ngmodule\", type: ReactiveFormsModule }, { kind: \"directive\", type: i2.FormControlDirective, selector: \"[formControl]\", inputs: [\"formControl\", \"disabled\", \"ngModel\"], outputs: [\"ngModelChange\"], exportAs: [\"ngForm\"] }, { kind: \"ngmodule\", type: SelectModule }, { kind: \"ngmodule\", type: InputTextModule }, { kind: \"ngmodule\", type: ButtonModule }, { kind: \"ngmodule\", type: DatePickerModule }, { kind: \"ngmodule\", type: CheckboxModule }, { kind: \"component\", type: i3.Checkbox, selector: \"p-checkbox, p-checkBox, p-check-box\", inputs: [\"value\", \"binary\", \"ariaLabelledBy\", \"ariaLabel\", \"tabindex\", \"inputId\", \"inputStyle\", \"styleClass\", \"inputClass\", \"indeterminate\", \"formControl\", \"checkboxIcon\", \"readonly\", \"autofocus\", \"trueValue\", \"falseValue\", \"variant\", \"size\"], outputs: [\"onChange\", \"onFocus\", \"onBlur\"] }, { kind: \"ngmodule\", type: RadioButtonModule }, { kind: \"ngmodule\", type: TooltipModule }, { kind: \"ngmodule\", type: MenuModule }, { kind: \"ngmodule\", type: TranslateModule }, { kind: \"ngmodule\", type: InputGroupModule }, { kind: \"ngmodule\", type: InputGroupAddonModule }, { kind: \"ngmodule\", type: PopoverModule }, { kind: \"ngmodule\", type: ListboxModule }, { kind: \"pipe\", type: i4.TranslatePipe, name: \"translate\" }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: ColumnsBuilderComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'formly-columns-builder',\n template: `\r\n <div>\r\n <!-- Header -->\r\n <div class=\"mb-6\">\r\n <h5 class=\"text-lg font-semibold text-gray-900 mb-2\">{{ props.label || ('COLUMNS_MANAGEMENT' | translate) }}</h5>\r\n <p class=\"text-gray-600 text-sm\">{{ props.description || ('COLUMNS_DESCRIPTION' | translate) }}</p>\r\n </div>\r\n\r\n <!-- Quick Actions -->\r\n <div class=\"flex flex-wrap gap-2 mb-6\">\r\n <button\r\n type=\"button\"\r\n (click)=\"toggleAll(true)\"\r\n class=\"inline-flex items-center gap-2 px-3 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors\"\r\n >\r\n <i class=\"pi pi-eye\"></i>\r\n {{ 'SHOW_ALL' | translate }}\r\n </button>\r\n <button\r\n type=\"button\"\r\n (click)=\"toggleAll(false)\"\r\n class=\"inline-flex items-center gap-2 px-3 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors\"\r\n >\r\n <i class=\"pi pi-eye-slash\"></i>\r\n {{ 'HIDE_ALL' | translate }}\r\n </button>\r\n <button\r\n type=\"button\"\r\n (click)=\"resetToDefault()\"\r\n class=\"inline-flex items-center gap-2 px-3 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors\"\r\n >\r\n <i class=\"pi pi-refresh\"></i>\r\n {{ 'RESET_TO_DEFAULT' | translate }}\r\n </button>\r\n </div>\r\n\r\n <!-- Drag Info -->\r\n <div class=\"mb-4 p-2 bg-blue-50 border border-blue-200 rounded text-sm text-blue-700\">\r\n <i class=\"pi pi-info-circle mr-2\"></i>\r\n {{ 'DRAG_COLUMNS_INFO' | translate }}\r\n </div>\r\n\r\n <!-- Columns List -->\r\n <div class=\"space-y-3\">\r\n <div *ngIf=\"columns.length === 0\" class=\"text-center py-8 px-4 border-2 border-dashed border-gray-300 rounded-lg bg-gray-50\">\r\n <i class=\"pi pi-table text-4xl text-gray-400 mb-3\"></i>\r\n <p class=\"text-gray-500\">{{ 'NO_COLUMNS_AVAILABLE' | translate }}</p>\r\n </div>\r\n\r\n <div *ngFor=\"let column of columns; let i = index\"\r\n class=\"bg-gray-50 rounded-lg border border-gray-200 p-1 transition-colors hover:bg-gray-100\"\r\n draggable=\"true\"\r\n (dragstart)=\"onDragStart($event, i)\"\r\n (dragover)=\"onDragOver($event)\"\r\n (drop)=\"onDrop($event, i)\"\r\n (dragenter)=\"onDragEnter($event)\"\r\n (dragleave)=\"onDragLeave($event)\">\r\n\r\n <div class=\"grid grid-cols-12 gap-4 items-center\">\r\n <!-- Drag Handle -->\r\n <div class=\"col-span-1 flex justify-center cursor-move text-gray-400 hover:text-gray-600\"\r\n draggable=\"true\"\r\n (dragstart)=\"onDragStart($event, i)\">\r\n <i class=\"pi pi-bars\"></i>\r\n </div>\r\n\r\n <!-- Visibility Toggle -->\r\n <div class=\"col-span-1 flex justify-center\">\r\n <p-checkbox\r\n [binary]=\"true\"\r\n [formControl]=\"getColumnControl(column.key, 'isVisible')\"\r\n [inputId]=\"'visible_' + column.key\"\r\n styleClass=\"[&>div]:border-gray-300 [&>div]:hover:border-gray-400\"\r\n (onChange)=\"onFormChange()\"\r\n >\r\n </p-checkbox>\r\n </div>\r\n\r\n <!-- Column Info -->\r\n <div class=\"col-span-12 md:col-span-4\">\r\n <label [for]=\"'visible_' + column.key\" class=\"block font-medium text-gray-900 cursor-pointer hover:text-blue-600\">\r\n {{ column.label }}\r\n </label>\r\n <p class=\"text-xs text-gray-500 mt-1\">{{ column.key }}</p>\r\n </div>\r\n\r\n <!-- Display Name -->\r\n <div class=\"col-span-12 md:col-span-3\">\r\n <input\r\n *ngIf=\"isColumnVisible(column.key)\"\r\n type=\"text\"\r\n [formControl]=\"getColumnControl(column.key, 'displayName')\"\r\n [placeholder]=\"column.label\"\r\n class=\"w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 text-sm\"\r\n (blur)=\"onFormChange()\"\r\n >\r\n </div>\r\n\r\n <!-- Aggregate Function -->\r\n <!-- <div class=\"col-span-12 md:col-span-3\">\r\n <div *ngIf=\"column.aggregatable && isColumnVisible(column.key)\">\r\n <p-select\r\n [options]=\"aggregateFunctions\"\r\n optionLabel=\"label\"\r\n optionValue=\"value\"\r\n [formControl]=\"getColumnControl(column.key, 'aggregateFunction')\"\r\n [placeholder]=\"'SELECT_AGGREGATE' | translate\"\r\n [showClear]=\"true\"\r\n styleClass=\"w-full\"\r\n (onChange)=\"onFormChange()\"\r\n >\r\n </p-select>\r\n </div>\r\n <span *ngIf=\"!column.aggregatable && isColumnVisible(column.key)\" class=\"text-xs text-gray-500\">\r\n {{ 'NO_AGGREGATES_AVAILABLE' | translate }}\r\n </span>\r\n </div> -->\r\n </div>\r\n\r\n <!-- Aggregate Info -->\r\n <div *ngIf=\"hasAggregateFunction(column.key) && isColumnVisible(column.key)\"\r\n class=\"mt-3 p-3 bg-blue-50 border border-blue-200 rounded-lg\">\r\n <div class=\"flex items-center gap-2\">\r\n <i class=\"pi pi-info-circle text-blue-500 text-sm\"></i>\r\n <span class=\"text-sm text-blue-800\">\r\n {{ 'AGGREGATE_INFO' | translate:{function: getAggregateLabel(getAggregateFunctionValue(column.key))} }}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Summary -->\r\n <div class=\"flex flex-col sm:flex-row justify-between items-center gap-4 mt-6 pt-4 border-t border-gray-200\">\r\n <span class=\"text-sm text-gray-600\">\r\n {{ 'COLUMNS_VISIBLE_COUNT' | translate:{visible: visibleColumnsCount, total: columns.length} }}\r\n </span>\r\n <!-- <div class=\"flex gap-4 text-sm\">\r\n <span class=\"inline-flex items-center gap-1 text-green-600\">\r\n <i class=\"pi pi-chart-line\"></i>\r\n {{ numericColumnsCount }} {{ 'NUMERIC' | translate }}\r\n </span>\r\n <span class=\"inline-flex items-center gap-1 text-blue-600\">\r\n <i class=\"pi pi-calculator\"></i>\r\n {{ aggregatedColumnsCount }} {{ 'AGGREGATED' | translate }}\r\n </span>\r\n </div> -->\r\n </div>\r\n</div>\r\n `,\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n SelectModule,\n InputTextModule,\n ButtonModule,\n DatePickerModule,\n CheckboxModule,\n RadioButtonModule,\n FormlyForm,\n TooltipModule,\n MenuModule,\n TranslateModule,\n InputGroupModule,\n InputGroupAddonModule,\n PopoverModule,\n ListboxModule\n ]\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1ucy1idWlsZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLXNlYXJjaC1hZHZhbmNlZC9zcmMvbGliL2NvbHVtbnMtYnVpbGRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBbUIsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDMUUsT0FBTyxFQUFFLFNBQVMsRUFBYSxXQUFXLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUpUO29CQUNELE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsWUFBWTt3QkFDWixnQkFBZ0I7d0JBQ2hCLGNBQWM7d0JBQ2QsaUJBQWlCO3dCQUNqQixVQUFVO3dCQUNWLGFBQWE7d0JBQ2IsVUFBVTt3QkFDVixlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIscUJBQXFCO3dCQUNyQixhQUFhO3dCQUNiLGFBQWE7cUJBQ2Q7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBjb2x1bW5zLWJ1aWxkZXIuY29tcG9uZW50LnRzXHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZpZWxkVHlwZSwgRmllbGRUeXBlQ29uZmlnLCBGb3JtbHlGb3JtIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUFycmF5LCBGb3JtQ29udHJvbCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFNlbGVjdEZpZWxkIH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcclxuaW1wb3J0IHsgQ2hlY2tib3hNb2R1bGUgfSBmcm9tICdwcmltZW5nL2NoZWNrYm94JztcclxuaW1wb3J0IHsgRGF0ZVBpY2tlck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZGF0ZXBpY2tlcic7XHJcbmltcG9ydCB7IElucHV0R3JvdXBNb2R1bGUgfSBmcm9tICdwcmltZW5nL2lucHV0Z3JvdXAnO1xyXG5pbXBvcnQgeyBJbnB1dEdyb3VwQWRkb25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2lucHV0Z3JvdXBhZGRvbic7XHJcbmltcG9ydCB7IElucHV0VGV4dE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvaW5wdXR0ZXh0JztcclxuaW1wb3J0IHsgTGlzdGJveE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvbGlzdGJveCc7XHJcbmltcG9ydCB7IE1lbnVNb2R1bGUgfSBmcm9tICdwcmltZW5nL21lbnUnO1xyXG5pbXBvcnQgeyBQb3BvdmVyTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9wb3BvdmVyJztcclxuaW1wb3J0IHsgUmFkaW9CdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL3JhZGlvYnV0dG9uJztcclxuaW1wb3J0IHsgU2VsZWN0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy9zZWxlY3QnO1xyXG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b29sdGlwJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZm9ybWx5LWNvbHVtbnMtYnVpbGRlcicsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgPGRpdj5cclxuICA8IS0tIEhlYWRlciAtLT5cclxuICA8ZGl2IGNsYXNzPVwibWItNlwiPlxyXG4gICAgPGg1IGNsYXNzPVwidGV4dC1sZyBmb250LXNlbWlib2xkIHRleHQtZ3JheS05MDAgbWItMlwiPnt7IHByb3BzLmxhYmVsIHx8ICgnQ09MVU1OU19NQU5BR0VNRU5UJyB8IHRyYW5zbGF0ZSkgfX08L2g1PlxyXG4gICAgPHAgY2xhc3M9XCJ0ZXh0LWdyYXktNjAwIHRleHQtc21cIj57eyBwcm9wcy5kZXNjcmlwdGlvbiB8fCAoJ0NPTFVNTlNfREVTQ1JJUFRJT04nIHwgdHJhbnNsYXRlKSB9fTwvcD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBRdWljayBBY3Rpb25zIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBnYXAtMiBtYi02XCI+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAoY2xpY2spPVwidG9nZ2xlQWxsKHRydWUpXCJcclxuICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMyBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCBiZy13aGl0ZSBib3JkZXIgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWQtbGcgaG92ZXI6YmctZ3JheS01MCB0cmFuc2l0aW9uLWNvbG9yc1wiXHJcbiAgICA+XHJcbiAgICAgIDxpIGNsYXNzPVwicGkgcGktZXllXCI+PC9pPlxyXG4gICAgICB7eyAnU0hPV19BTEwnIHwgdHJhbnNsYXRlIH19XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b25cclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIChjbGljayk9XCJ0b2dnbGVBbGwoZmFsc2UpXCJcclxuICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMyBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCBiZy13aGl0ZSBib3JkZXIgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWQtbGcgaG92ZXI6YmctZ3JheS01MCB0cmFuc2l0aW9uLWNvbG9yc1wiXHJcbiAgICA+XHJcbiAgICAgIDxpIGNsYXNzPVwicGkgcGktZXllLXNsYXNoXCI+PC9pPlxyXG4gICAgICB7eyAnSElERV9BTEwnIHwgdHJhbnNsYXRlIH19XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b25cclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIChjbGljayk9XCJyZXNldFRvRGVmYXVsdCgpXCJcclxuICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMyBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCBiZy13aGl0ZSBib3JkZXIgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWQtbGcgaG92ZXI6YmctZ3JheS01MCB0cmFuc2l0aW9uLWNvbG9yc1wiXHJcbiAgICA+XHJcbiAgICAgIDxpIGNsYXNzPVwicGkgcGktcmVmcmVzaFwiPjwvaT5cclxuICAgICAge3sgJ1JFU0VUX1RPX0RFRkFVTFQnIHwgdHJhbnNsYXRlIH19XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBEcmFnIEluZm8gLS0+XHJcbiAgPGRpdiBjbGFzcz1cIm1iLTQgcC0yIGJnLWJsdWUtNTAgYm9yZGVyIGJvcmRlci1ibHVlLTIwMCByb3VuZGVkIHRleHQtc20gdGV4dC1ibHVlLTcwMFwiPlxyXG4gICAgPGkgY2xhc3M9XCJwaSBwaS1pbmZvLWNpcmNsZSBtci0yXCI+PC9pPlxyXG4gICAge3sgJ0RSQUdfQ09MVU1OU19JTkZPJyB8IHRyYW5zbGF0ZSB9fVxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIENvbHVtbnMgTGlzdCAtLT5cclxuICA8ZGl2IGNsYXNzPVwic3BhY2UteS0zXCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiY29sdW1ucy5sZW5ndGggPT09IDBcIiBjbGFzcz1cInRleHQtY2VudGVyIHB5LTggcHgtNCBib3JkZXItMiBib3JkZXItZGFzaGVkIGJvcmRlci1ncmF5LTMwMCByb3VuZGVkLWxnIGJnLWdyYXktNTBcIj5cclxuICAgICAgPGkgY2xhc3M9XCJwaSBwaS10YWJsZSB0ZXh0LTR4bCB0ZXh0LWdyYXktNDAwIG1iLTNcIj48L2k+XHJcbiAgICAgIDxwIGNsYXNzPVwidGV4dC1ncmF5LTUwMFwiPnt7ICdOT19DT0xVTU5TX0FWQUlMQUJMRScgfCB0cmFuc2xhdGUgfX08L3A+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uczsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgIGNsYXNzPVwiYmctZ3JheS01MCByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcC0xIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLWdyYXktMTAwXCJcclxuICAgICAgICAgZHJhZ2dhYmxlPVwidHJ1ZVwiXHJcbiAgICAgICAgIChkcmFnc3RhcnQpPVwib25EcmFnU3RhcnQoJGV2ZW50LCBpKVwiXHJcbiAgICAgICAgIChkcmFnb3Zlcik9XCJvbkRyYWdPdmVyKCRldmVudClcIlxyXG4gICAgICAgICAoZHJvcCk9XCJvbkRyb3AoJGV2ZW50LCBpKVwiXHJcbiAgICAgICAgIChkcmFnZW50ZXIpPVwib25EcmFnRW50ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgIChkcmFnbGVhdmUpPVwib25EcmFnTGVhdmUoJGV2ZW50KVwiPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImdyaWQgZ3JpZC1jb2xzLTEyIGdhcC00IGl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgIDwhLS0gRHJhZyBIYW5kbGUgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zcGFuLTEgZmxleCBqdXN0aWZ5LWNlbnRlciBjdXJzb3ItbW92ZSB0ZXh0LWdyYXktNDAwIGhvdmVyOnRleHQtZ3JheS02MDBcIlxyXG4gICAgICAgICAgICAgZHJhZ2dhYmxlPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAoZHJhZ3N0YXJ0KT1cIm9uRHJhZ1N0YXJ0KCRldmVudCwgaSlcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktYmFyc1wiPjwvaT5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBWaXNpYmlsaXR5IFRvZ2dsZSAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNwYW4tMSBmbGV4IGp1c3RpZnktY2VudGVyXCI+XHJcbiAgICAgICAgICA8cC1jaGVja2JveFxyXG4gICAgICAgICAgICBbYmluYXJ5XT1cInRydWVcIlxyXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZ2V0Q29sdW1uQ29udHJvbChjb2x1bW4ua2V5LCAnaXNWaXNpYmxlJylcIlxyXG4gICAgICAgICAgICBbaW5wdXRJZF09XCIndmlzaWJsZV8nICsgY29sdW1uLmtleVwiXHJcbiAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJbJj5kaXZdOmJvcmRlci1ncmF5LTMwMCBbJj5kaXZdOmhvdmVyOmJvcmRlci1ncmF5LTQwMFwiXHJcbiAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvbkZvcm1DaGFuZ2UoKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICA8L3AtY2hlY2tib3g+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gQ29sdW1uIEluZm8gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zcGFuLTEyIG1kOmNvbC1zcGFuLTRcIj5cclxuICAgICAgICAgIDxsYWJlbCBbZm9yXT1cIid2aXNpYmxlXycgKyBjb2x1bW4ua2V5XCIgY2xhc3M9XCJibG9jayBmb250LW1lZGl1bSB0ZXh0LWdyYXktOTAwIGN1cnNvci1wb2ludGVyIGhvdmVyOnRleHQtYmx1ZS02MDBcIj5cclxuICAgICAgICAgICAge3sgY29sdW1uLmxhYmVsIH19XHJcbiAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXhzIHRleHQtZ3JheS01MDAgbXQtMVwiPnt7IGNvbHVtbi5rZXkgfX08L3A+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gRGlzcGxheSBOYW1lIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc3Bhbi0xMiBtZDpjb2wtc3Bhbi0zXCI+XHJcbiAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgKm5nSWY9XCJpc0NvbHVtblZpc2libGUoY29sdW1uLmtleSlcIlxyXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJnZXRDb2x1bW5Db250cm9sKGNvbHVtbi5rZXksICdkaXNwbGF5TmFtZScpXCJcclxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNvbHVtbi5sYWJlbFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsIHB4LTMgcHktMiBib3JkZXIgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWQtbGcgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctYmx1ZS01MDAgZm9jdXM6Ym9yZGVyLWJsdWUtNTAwIHRleHQtc21cIlxyXG4gICAgICAgICAgICAoYmx1cik9XCJvbkZvcm1DaGFuZ2UoKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gQWdncmVnYXRlIEZ1bmN0aW9uIC0tPlxyXG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNvbC1zcGFuLTEyIG1kOmNvbC1zcGFuLTNcIj5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2x1bW4uYWdncmVnYXRhYmxlICYmIGlzQ29sdW1uVmlzaWJsZShjb2x1bW4ua2V5KVwiPlxyXG4gICAgICAgICAgICA8cC1zZWxlY3RcclxuICAgICAgICAgICAgICBbb3B0aW9uc109XCJhZ2dyZWdhdGVGdW5jdGlvbnNcIlxyXG4gICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibGFiZWxcIlxyXG4gICAgICAgICAgICAgIG9wdGlvblZhbHVlPVwidmFsdWVcIlxyXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJnZXRDb2x1bW5Db250cm9sKGNvbHVtbi5rZXksICdhZ2dyZWdhdGVGdW5jdGlvbicpXCJcclxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NFTEVDVF9BR0dSRUdBVEUnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICBbc2hvd0NsZWFyXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIlxyXG4gICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvbkZvcm1DaGFuZ2UoKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9wLXNlbGVjdD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCIhY29sdW1uLmFnZ3JlZ2F0YWJsZSAmJiBpc0NvbHVtblZpc2libGUoY29sdW1uLmtleSlcIiBjbGFzcz1cInRleHQteHMgdGV4dC1ncmF5LTUwMFwiPlxyXG4gICAgICAgICAgICB7eyAnTk9fQUdHUkVHQVRFU19BVkFJTEFCTEUnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gQWdncmVnYXRlIEluZm8gLS0+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJoYXNBZ2dyZWdhdGVGdW5jdGlvbihjb2x1bW4ua2V5KSAmJiBpc0NvbHVtblZpc2libGUoY29sdW1uLmtleSlcIlxyXG4gICAgICAgICAgIGNsYXNzPVwibXQtMyBwLTMgYmctYmx1ZS01MCBib3JkZXIgYm9yZGVyLWJsdWUtMjAwIHJvdW5kZWQtbGdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktaW5mby1jaXJjbGUgdGV4dC1ibHVlLTUwMCB0ZXh0LXNtXCI+PC9pPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtIHRleHQtYmx1ZS04MDBcIj5cclxuICAgICAgICAgICAge3sgJ0FHR1JFR0FURV9JTkZPJyB8IHRyYW5zbGF0ZTp7ZnVuY3Rpb246IGdldEFnZ3JlZ2F0ZUxhYmVsKGdldEFnZ3JlZ2F0ZUZ1bmN0aW9uVmFsdWUoY29sdW1uLmtleSkpfSB9fVxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIFN1bW1hcnkgLS0+XHJcbiAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgc206ZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBnYXAtNCBtdC02IHB0LTQgYm9yZGVyLXQgYm9yZGVyLWdyYXktMjAwXCI+XHJcbiAgICA8c3BhbiBjbGFzcz1cInRleHQtc20gdGV4dC1ncmF5LTYwMFwiPlxyXG4gICAgICB7eyAnQ09MVU1OU19WSVNJQkxFX0NPVU5UJyB8IHRyYW5zbGF0ZTp7dmlzaWJsZTogdmlzaWJsZUNvbHVtbnNDb3VudCwgdG90YWw6IGNvbHVtbnMubGVuZ3RofSB9fVxyXG4gICAgPC9zcGFuPlxyXG4gICAgPCEtLSA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtNCB0ZXh0LXNtXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHRleHQtZ3JlZW4tNjAwXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1jaGFydC1saW5lXCI+PC9pPlxyXG4gICAgICAgIHt7IG51bWVyaWNDb2x1bW5zQ291bnQgfX0ge3sgJ05VTUVSSUMnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgdGV4dC1ibHVlLTYwMFwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwicGkgcGktY2FsY3VsYXRvclwiPjwvaT5cclxuICAgICAgICB7eyBhZ2dyZWdhdGVkQ29sdW1uc0NvdW50IH19IHt7ICdBR0dSRUdBVEVEJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2Rpdj4gLS0+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4gIGAsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgU2VsZWN0TW9kdWxlLFxyXG4gICAgSW5wdXRUZXh0TW9kdWxlLFxyXG4gICAgQnV0dG9uTW9kdWxlLFxyXG4gICAgRGF0ZVBpY2tlck1vZHVsZSxcclxuICAgIENoZWNrYm94TW9kdWxlLFxyXG4gICAgUmFkaW9CdXR0b25Nb2R1bGUsXHJcbiAgICBGb3JtbHlGb3JtLFxyXG4gICAgVG9vbHRpcE1vZHVsZSxcclxuICAgIE1lbnVNb2R1bGUsXHJcbiAgICBUcmFuc2xhdGVNb2R1bGUsXHJcbiAgICBJbnB1dEdyb3VwTW9kdWxlLFxyXG4gICAgSW5wdXRHcm91cEFkZG9uTW9kdWxlLFxyXG4gICAgUG9wb3Zlck1vZHVsZSxcclxuICAgIExpc3Rib3hNb2R1bGVcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb2x1bW5zQnVpbGRlckNvbXBvbmVudCBleHRlbmRzIEZpZWxkVHlwZTxGaWVsZFR5cGVDb25maWc+IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBkcmFnU3RhcnRJbmRleDogbnVtYmVyID0gLTE7XHJcbiAgcHJpdmF0ZSBfY29sdW1uc0Zvcm0hOiBGb3JtR3JvdXA7XHJcblxyXG4gIGFnZ3JlZ2F0ZUZ1bmN0aW9ucyA9IFtcclxuICAgIHsgbGFiZWw6ICdTdW0nLCB2YWx1ZTogJ3N1bScgfSxcclxuICAgIHsgbGFiZWw6ICdBdmVyYWdlJywgdmFsdWU6ICdhdmcnIH0sXHJcbiAgICB7IGxhYmVsOiAnQ291bnQnLCB2YWx1ZTogJ2NvdW50JyB9LFxyXG4gICAgeyBsYWJlbDogJ01pbmltdW0nLCB2YWx1ZTogJ21pbicgfSxcclxuICAgIHsgbGFiZWw6ICdNYXhpbXVtJywgdmFsdWU6ICdtYXgnIH1cclxuICBdO1xyXG5cclxuICBnZXQgY29sdW1ucygpOiBTZWxlY3RGaWVsZFtdIHtcclxuICAgIHJldHVybiB0aGlzLnByb3BzWydmaWVsZHMnXSB8fCBbXTtcclxuICB9XHJcblxyXG4gIGdldCBjb2x1bW5zRm9ybSgpOiBGb3JtR3JvdXAge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbnNGb3JtO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHZpc2libGVDb2x1bW5zQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbCA9PlxyXG4gICAgICB0aGlzLmlzQ29sdW1uVmlzaWJsZShjb2wua2V5KVxyXG4gICAgKS5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBnZXQgbnVtZXJpY0NvbHVtbnNDb3VudCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5pc051bWVyaWMpLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIGdldCBhZ2dyZWdhdGVkQ29sdW1uc0NvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2wgPT5cclxuICAgICAgdGhpcy5oYXNBZ2dyZWdhdGVGdW5jdGlvbihjb2wua2V5KVxyXG4gICAgKS5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm0oKTtcclxuICAgIHRoaXMuc2V0dXBWYWx1ZUNoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8vIEZvcm0gTWV0aG9kc1xyXG4gIGluaXRpYWxpemVGb3JtKCkge1xyXG4gICAgY29uc3QgcGFyZW50Rm9ybSA9IHRoaXMuZm9ybSBhcyBGb3JtR3JvdXA7XHJcbiAgICBjb25zdCBmaWVsZEtleSA9IHRoaXMuZmllbGQua2V5IGFzIHN0cmluZztcclxuXHJcbiAgICBpZiAoIWZpZWxkS2V5KSByZXR1cm47XHJcblxyXG4gICAgLy8gR2V0IG9yIGNyZWF0ZSB0aGUgRm9ybUdyb3VwIGluIHRoZSBwYXJlbnQgZm9ybVxyXG4gICAgbGV0IGZvcm1Hcm91cCA9IHBhcmVudEZvcm0uZ2V0KGZpZWxkS2V5KSBhcyBGb3JtR3JvdXA7XHJcblxyXG4gICAgaWYgKCFmb3JtR3JvdXAgfHwgIShmb3JtR3JvdXAgaW5zdGFuY2VvZiBGb3JtR3JvdXApKSB7XHJcbiAgICAgIC8vIENyZWF0ZSBuZXcgRm9ybUdyb3VwXHJcbiAgICAgIGZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gICAgICBwYXJlbnRGb3JtLnNldENvbnRyb2woZmllbGRLZXksIGZvcm1Hcm91cCk7XHJcblxyXG4gICAgICAvLyBJbml0aWFsaXplIHdpdGggZXhpc3RpbmcgbW9kZWwgZGF0YVxyXG4gICAgICBjb25zdCBpbml0aWFsTW9kZWwgPSB0aGlzLm1vZGVsW2ZpZWxkS2V5XSB8fCB7fTtcclxuXHJcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XHJcbiAgICAgICAgY29uc3QgY29sdW1uQ29uZmlnID0gaW5pdGlhbE1vZGVsW2NvbHVtbi5rZXldIHx8IHt9O1xyXG4gICAgICAgIGNvbnN0IGNvbHVtbkdyb3VwID0gbmV3IEZvcm1Hcm91cCh7XHJcbiAgICAgICAgICBpc1Zpc2libGU6IG5ldyBGb3JtQ29udHJvbChjb2x1bW5Db25maWcuaXNWaXNpYmxlID8/IGNvbHVtbi5kZWZhdWx0VmlzaWJsZSksXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZTogbmV3IEZvcm1Db250cm9sKGNvbHVtbkNvbmZpZy5kaXNwbGF5TmFtZSA/PyBjb2x1bW4ubGFiZWwpLFxyXG4gICAgICAgICAgYWdncmVnYXRlRnVuY3Rpb246IG5ldyBGb3JtQ29udHJvbChjb2x1bW5Db25maWcuYWdncmVnYXRlRnVuY3Rpb24gPz8gJycpLFxyXG4gICAgICAgICAgb3JkZXI6IG5ldyBGb3JtQ29udHJvbChjb2x1bW5Db25maWcub3JkZXIgPz8gMClcclxuICAgICAgICB9KTtcclxuICAgICAgICBmb3JtR3JvdXAuYWRkQ29udHJvbChjb2x1bW4ua2V5LCBjb2x1bW5Hcm91cCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFN0b3JlIHRoZSBGb3JtR3JvdXAgcmVmZXJlbmNlXHJcbiAgICB0aGlzLl9jb2x1bW5zRm9ybSA9IGZvcm1Hcm91cDtcclxuXHJcbiAgICAvLyBJbml0aWFsaXplIHRoZSBtb2RlbCB3aXRoIGN1cnJlbnQgZm9ybSB2YWx1ZXNcclxuICAgIHRoaXMudXBkYXRlTW9kZWwoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBWYWx1ZUNoYW5nZXMoKSB7XHJcbiAgICAvLyBMaXN0ZW4gdG8gZm9ybSBjaGFuZ2VzIGFuZCB1cGRhdGUgdGhlIG1vZGVsXHJcbiAgICB0aGlzLmNvbHVtbnNGb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLnVwZGF0ZU1vZGVsKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlTW9kZWwoKSB7XHJcbiAgICBjb25zdCBmaWVsZEtleSA9IHRoaXMuZmllbGQua2V5IGFzIHN0cmluZztcclxuICAgIGlmIChmaWVsZEtleSkge1xyXG4gICAgICAvLyBVcGRhdGUgdGhlIG1vZGVsIHdpdGggY3VycmVudCBmb3JtIHZhbHVlc1xyXG4gICAgICB0aGlzLm1vZGVsW2ZpZWxkS2V5XSA9IHRoaXMuY29sdW1uc0Zvcm0udmFsdWU7XHJcblxyXG4gICAgICAvLyBUcmlnZ2VyIGZvcm0gY29udHJvbCB1cGRhdGUgdG8gbm90aWZ5IEZvcm1seVxyXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMuY29sdW1uc0Zvcm0udmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gQ2FsbGVkIHdoZW4gZm9ybSBjb250cm9scyBjaGFuZ2VcclxuICBvbkZvcm1DaGFuZ2UoKSB7XHJcbiAgICB0aGlzLnVwZGF0ZU1vZGVsKCk7XHJcbiAgfVxyXG5cclxuICAvLyBEcmFnICYgRHJvcCBNZXRob2RzXHJcbiAgb25EcmFnU3RhcnQoZXZlbnQ6IERyYWdFdmVudCwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5kcmFnU3RhcnRJbmRleCA9IGluZGV4O1xyXG4gICAgZXZlbnQuZGF0YVRyYW5zZmVyPy5zZXREYXRhKCd0ZXh0L3BsYWluJywgaW5kZXgudG9TdHJpbmcoKSk7XHJcbiAgfVxyXG5cclxuICBvbkRyYWdPdmVyKGV2ZW50OiBEcmFnRXZlbnQpIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG5cclxuICBvbkRyb3AoZXZlbnQ6IERyYWdFdmVudCwgZHJvcEluZGV4OiBudW1iZXIpIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBjb25zdCBkcmFnSW5kZXggPSB0aGlzLmRyYWdTdGFydEluZGV4O1xyXG5cclxuICAgIGlmIChkcmFnSW5kZXggIT09IC0xICYmIGRyYWdJbmRleCAhPT0gZHJvcEluZGV4KSB7XHJcbiAgICAgIC8vIFJlb3JkZXIgdGhlIGNvbHVtbnMgYXJyYXlcclxuICAgICAgY29uc3QgbW92ZWRJdGVtID0gdGhpcy5jb2x1bW5zW2RyYWdJbmRleF07XHJcbiAgICAgIGNvbnN0IG5ld0NvbHVtbnMgPSBbLi4udGhpcy5jb2x1bW5zXTtcclxuICAgICAgbmV3Q29sdW1ucy5zcGxpY2UoZHJhZ0luZGV4LCAxKTtcclxuICAgICAgbmV3Q29sdW1ucy5zcGxpY2UoZHJvcEluZGV4LCAwLCBtb3ZlZEl0ZW0pO1xyXG5cclxuICAgICAgLy8gVXBkYXRlIHRoZSBwcm9wcyB0byB0cmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb25cclxuICAgICAgdGhpcy5wcm9wc1snZmllbGRzJ10gPSBuZXdDb2x1bW5zO1xyXG5cclxuICAgICAgLy8gVXBkYXRlIG9yZGVyIGluIGZvcm0gY29udHJvbHNcclxuICAgICAgdGhpcy51cGRhdGVDb2x1bW5PcmRlcnMoKTtcclxuXHJcbiAgICAgIC8vIFVwZGF0ZSBtb2RlbCBhZnRlciByZW9yZGVyaW5nXHJcbiAgICAgIHRoaXMudXBkYXRlTW9kZWwoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbW92ZURyYWdTdHlsZXMoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgb25EcmFnRW50ZXIoZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgKGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdC5hZGQoJ2JvcmRlci1ibHVlLTUwMCcsICdiZy1ibHVlLTUwJyk7XHJcbiAgfVxyXG5cclxuICBvbkRyYWdMZWF2ZShldmVudDogRHJhZ0V2ZW50KSB7XHJcbiAgICB0aGlzLnJlbW92ZURyYWdTdHlsZXMoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVEcmFnU3R5bGVzKGV2ZW50OiBEcmFnRXZlbnQpIHtcclxuICAgIChldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbGFzc0xpc3QucmVtb3ZlKCdib3JkZXItYmx1ZS01MDAnLCAnYmctYmx1ZS01MCcpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVDb2x1bW5PcmRlcnMoKSB7XHJcbiAgICAvLyBTdG9yZSB0aGUgb3JkZXIgaW4gZm9ybSBjb250cm9sc1xyXG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbiwgaW5kZXgpID0+IHtcclxuICAgICAgY29uc3Qgb3JkZXJDb250cm9sID0gdGhpcy5nZXRDb2x1bW5Db250cm9sKGNvbHVtbi5rZXksICdvcmRlcicpO1xyXG4gICAgICBpZiAoIW9yZGVyQ29udHJvbCkge1xyXG4gICAgICAgIGNvbnN0IGNvbHVtbkdyb3VwID0gdGhpcy5jb2x1bW5zRm9ybS5nZXQoY29sdW1uLmtleSkgYXMgRm9ybUdyb3VwO1xyXG4gICAgICAgIGlmIChjb2x1bW5Hcm91cCAmJiAhY29sdW1uR3JvdXAuZ2V0KCdvcmRlcicpKSB7XHJcbiAgICAgICAgICBjb2x1bW5Hcm91cC5hZGRDb250cm9sKCdvcmRlcicsIG5ldyBGb3JtQ29udHJvbChpbmRleCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBvcmRlckNvbnRyb2wuc2V0VmFsdWUoaW5kZXgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldENvbHVtbkNvbnRyb2woY29sdW1uS2V5OiBzdHJpbmcsIGNvbnRyb2xOYW1lOiBzdHJpbmcpOiBGb3JtQ29udHJvbCB7XHJcbiAgICBjb25zdCBjb2x1bW5Hcm91cCA9IHRoaXMuY29sdW1uc0Zvcm0uZ2V0KGNvbHVtbktleSkgYXMgRm9ybUdyb3VwO1xyXG4gICAgaWYgKCFjb2x1bW5Hcm91cCkge1xyXG4gICAgICBjb25zdCBmYWxsYmFja0NvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2wodGhpcy5nZXREZWZhdWx0VmFsdWUoY29udHJvbE5hbWUpKTtcclxuICAgICAgcmV0dXJuIGZhbGxiYWNrQ29udHJvbDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjb250cm9sID0gY29sdW1uR3JvdXAuZ2V0KGNvbnRyb2xOYW1lKSBhcyBGb3JtQ29udHJvbDtcclxuICAgIGlmICghY29udHJvbCkge1xyXG4gICAgICBjb25zdCBmYWxsYmFja0NvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2wodGhpcy5nZXREZWZhdWx0VmFsdWUoY29udHJvbE5hbWUpKTtcclxuICAgICAgY29sdW1uR3JvdXAuYWRkQ29udHJvbChjb250cm9sTmFtZSwgZmFsbGJhY2tDb250cm9sKTtcclxuICAgICAgcmV0dXJuIGZhbGxiYWNrQ29udHJvbDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY29udHJvbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RGVmYXVsdFZhbHVlKGNvbnRyb2xOYW1lOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgc3dpdGNoIChjb250cm9sTmFtZSkge1xyXG4gICAgICBjYXNlICdpc1Zpc2libGUnOiByZXR1cm4gdHJ1ZTtcclxuICAgICAgY2FzZSAnZGlzcGxheU5hbWUnOiByZXR1cm4gJyc7XHJcbiAgICAgIGNhc2UgJ2FnZ3JlZ2F0ZUZ1bmN0aW9uJzogcmV0dXJuICcnO1xyXG4gICAgICBjYXNlICdvcmRlcic6IHJldHVybiAwO1xyXG4gICAgICBkZWZhdWx0OiByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzQ29sdW1uVmlzaWJsZShjb2x1bW5LZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZ2V0Q29sdW1uQ29udHJvbChjb2x1bW5LZXksICdpc1Zpc2libGUnKTtcclxuICAgIHJldHVybiBjb250cm9sPy52YWx1ZSA9PT0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGhhc0FnZ3JlZ2F0ZUZ1bmN0aW9uKGNvbHVtbktleTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5nZXRDb2x1bW5Db250cm9sKGNvbHVtbktleSwgJ2FnZ3JlZ2F0ZUZ1bmN0aW9uJyk7XHJcbiAgICByZXR1cm4gISFjb250cm9sPy52YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldEFnZ3JlZ2F0ZUZ1bmN0aW9uVmFsdWUoY29sdW1uS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZ2V0Q29sdW1uQ29udHJvbChjb2x1bW5LZXksICdhZ2dyZWdhdGVGdW5jdGlvbicpO1xyXG4gICAgcmV0dXJuIGNvbnRyb2w/LnZhbHVlIHx8ICcnO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlQWxsKHZpc2libGU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XHJcbiAgICAgIGNvbnN0IHZpc2libGVDb250cm9sID0gdGhpcy5nZXRDb2x1bW5Db250cm9sKGNvbHVtbi5rZXksICdpc1Zpc2libGUnKTtcclxuICAgICAgaWYgKHZpc2libGVDb250cm9sKSB7XHJcbiAgICAgICAgdmlzaWJsZUNvbnRyb2wuc2V0VmFsdWUodmlzaWJsZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy51cGRhdGVNb2RlbCgpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXRUb0RlZmF1bHQoKSB7XHJcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uLCBpbmRleCkgPT4ge1xyXG4gICAgICBjb25zdCBjb2x1bW5Hcm91cCA9IHRoaXMuY29sdW1uc0Zvcm0uZ2V0KGNvbHVtbi5rZXkpIGFzIEZvcm1Hcm91cDtcclxuICAgICAgaWYgKGNvbHVtbkdyb3VwKSB7XHJcbiAgICAgICAgY29sdW1uR3JvdXAuZ2V0KCdpc1Zpc2libGUnKT8uc2V0VmFsdWUoY29sdW1uLmRlZmF1bHRWaXNpYmxlKTtcclxuICAgICAgICBjb2x1bW5Hcm91cC5nZXQoJ2Rpc3BsYXlOYW1lJyk/LnNldFZhbHVlKGNvbHVtbi5sYWJlbCk7XHJcbiAgICAgICAgY29sdW1uR3JvdXAuZ2V0KCdhZ2dyZWdhdGVGdW5jdGlvbicpPy5zZXRWYWx1ZSgnJyk7XHJcbiAgICAgICAgY29sdW1uR3JvdXAuZ2V0KCdvcmRlcicpPy5zZXRWYWx1ZShpbmRleCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy51cGRhdGVNb2RlbCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWdncmVnYXRlTGFiZWwoZnVuY3Rpb25OYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZnVuYyA9IHRoaXMuYWdncmVnYXRlRnVuY3Rpb25zLmZpbmQoZiA9PiBmLnZhbHVlID09PSBmdW5jdGlvbk5hbWUpO1xyXG4gICAgcmV0dXJuIGZ1bmMgPyBmdW5jLmxhYmVsIDogZnVuY3Rpb25OYW1lO1xyXG4gIH1cclxufVxyXG4iXX0=","// group-builder.component.ts\nimport { Component } from '@angular/core';\nimport { FieldType, FormlyForm } from '@ngx-formly/core';\nimport { FormGroup, FormArray, FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ButtonModule } from 'primeng/button';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { DatePickerModule } from 'primeng/datepicker';\nimport { InputGroupModule } from 'primeng/inputgroup';\nimport { InputGroupAddonModule } from 'primeng/inputgroupaddon';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { ListboxModule } from 'primeng/listbox';\nimport { MenuModule } from 'primeng/menu';\nimport { PopoverModule } from 'primeng/popover';\nimport { RadioButtonModule } from 'primeng/radiobutton';\nimport { SelectModule } from 'primeng/select';\nimport { TooltipModule } from 'primeng/tooltip';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@angular/forms\";\nimport * as i3 from \"primeng/select\";\nimport * as i4 from \"primeng/api\";\nimport * as i5 from \"primeng/inputtext\";\nimport * as i6 from \"primeng/checkbox\";\nimport * as i7 from \"primeng/tooltip\";\nimport * as i8 from \"@ngx-translate/core\";\nexport class GroupBuilderComponent extends FieldType {\n _groups;\n dragStartIndex = -1;\n get groups() {\n return this._groups;\n }\n get availableFields() {\n return this.props['fields'] || [];\n }\n get maxGroups() {\n return this.props['maxGroups'] || 3;\n }\n ngOnInit() {\n this.initializeFormArray();\n this.setupValueChanges();\n }\n initializeFormArray() {\n const parentForm = this.form;\n const fieldKey = this.field.key;\n if (!fieldKey)\n return;\n // Get or create the FormArray in the parent form\n let formArray = parentForm.get(fieldKey);\n if (!formArray || !(formArray instanceof FormArray)) {\n // Create new FormArray\n formArray = new FormArray([]);\n parentForm.setControl(fieldKey, formArray);\n // Initialize with existing model data\n const initialValue = this.model[fieldKey];\n if (Array.isArray(initialValue)) {\n initialValue.forEach(group => {\n formArray.push(this.createGroupControl(group));\n });\n }\n }\n // Store the FormArray reference\n this._groups = formArray;\n }\n setupValueChanges() {\n // Listen to form array changes and update the model\n this.groups.valueChanges.subscribe(() => {\n this.updateModel();\n });\n }\n updateModel() {\n const fieldKey = this.field.key;\n if (fieldKey) {\n // Update the model with current form values\n this.model[fieldKey] = this.groups.value;\n // Trigger form control update to notify Formly\n this.formControl.setValue(this.groups.value);\n // Mark form control as touched/dirty if needed\n this.formControl.markAsTouched();\n this.formControl.markAsDirty();\n }\n }\n // Called when form controls change\n onFormChange() {\n this.updateModel();\n }\n createGroupControl(group) {\n return new FormGroup({\n field: new FormControl(group?.field || ''),\n displayName: new FormControl(group?.displayName || ''),\n showTotal: new FormControl(group?.showTotal !== false)\n });\n }\n addGroup() {\n if (this.canAddMoreGroups()) {\n this.groups.push(this.createGroupControl());\n this.updateModel();\n }\n }\n removeGroup(index) {\n this.groups.removeAt(index);\n this.updateModel();\n }\n // Drag & Drop Methods\n onDragStart(event, index) {\n this.dragStartIndex = index;\n event.dataTransfer?.setData('text/plain', index.toString());\n event.currentTarget.classList.add('opacity-50', 'border-blue-300');\n }\n onDragOver(event) {\n event.preventDefault();\n }\n onDrop(event, dropIndex) {\n event.preventDefault();\n const dragIndex = this.dragStartIndex;\n if (dragIndex !== -1 && dragIndex !== dropIndex) {\n this.moveGroup(dragIndex, dropIndex);\n }\n this.removeDragStyles(event);\n }\n onDragEnter(event) {\n event.currentTarget.classList.add('border-blue-500', 'bg-blue-50', 'border-2');\n }\n onDragLeave(event) {\n this.removeDragStyles(event);\n }\n onDragEnd(event) {\n this.removeDragStyles(event);\n this.dragStartIndex = -1;\n }\n removeDragStyles(event) {\n const element = event.currentTarget;\n element.classList.remove('border-blue-500', 'bg-blue-50', 'opacity-50', 'border-blue-300', 'border-2');\n }\n moveGroup(fromIndex, toIndex) {\n const movedGroup = this.groups.at(fromIndex);\n this.groups.removeAt(fromIndex);\n this.groups.insert(toIndex, movedGroup);\n this.updateModel();\n }\n getGroupControl(index, controlName) {\n const group = this.groups.at(index);\n return group.get(controlName);\n }\n onFieldChange(index, fieldKey) {\n const displayNameControl = this.getGroupControl(index, 'displayName');\n if (!displayNameControl.value && fieldKey) {\n const field = this.availableFields.find(f => f.key === fieldKey);\n if (field) {\n displayNameControl.setValue(field.label);\n }\n }\n this.updateModel();\n }\n getFieldLabel(fieldKey) {\n const field = this.availableFields.find(f => f.key === fieldKey);\n return field ? field.label : fieldKey;\n }\n canAddMoreGroups() {\n return this.groups.length < this.maxGroups;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GroupBuilderComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.1.8\", type: GroupBuilderComponent, isStandalone: true, selector: \"formly-group-builder\", usesInheritance: true, ngImport: i0, template: `<div>\r\n <!-- Header -->\r\n <div class=\"mb-6\">\r\n <h5 class=\"text-lg font-semibold text-gray-900 mb-2\">{{ props.label || ('DATA_GROUPING' | translate) }}</h5>\r\n <p class=\"text-gray-600 text-sm\">{{ props.description || ('GROUP_DESCRIPTION' | translate) }}</p>\r\n </div>\r\n\r\n <!-- Group Configuration -->\r\n <div class=\"space-y-4\">\r\n <div class=\"flex items-center justify-between\">\r\n <span class=\"font-medium text-gray-700\">{{ 'GROUP_LEVELS' | translate }}</span>\r\n <button\r\n type=\"button\"\r\n *ngIf=\"canAddMoreGroups()\"\r\n (click)=\"addGroup()\"\r\n [disabled]=\"!canAddMoreGroups()\"\r\n class=\"inline-flex items-center gap-2 px-3 py-2 text-sm font-medium text-blue-700 bg-blue-50 rounded-lg hover:bg-blue-100 disabled:opacity-50 disabled:cursor-not-allowed transition-colors\"\r\n >\r\n <i class=\"pi pi-plus\"></i>\r\n {{ 'ADD_GROUP_LEVEL' | translate }}\r\n </button>\r\n </div>\r\n\r\n <!-- Drag Info -->\r\n <div *ngIf=\"groups.length > 1\" class=\"mb-4 p-2 bg-blue-50 border border-blue-200 rounded text-sm text-blue-700\">\r\n <i class=\"pi pi-info-circle mr-2\"></i>\r\n {{ 'DRAG_INFO' | translate }}\r\n </div>\r\n\r\n <!-- Empty State -->\r\n <div *ngIf=\"groups.length === 0\" class=\"text-center py-8 px-4 border-2 border-dashed border-gray-300 rounded-lg bg-gray-50\">\r\n <i class=\"pi pi-layer-group text-4xl text-gray-400 mb-3\"></i>\r\n <p class=\"text-gray-500 mb-4\">{{ 'NO_GROUPING_LEVELS' | translate }}</p>\r\n <button\r\n type=\"button\"\r\n (click)=\"addGroup()\"\r\n class=\"inline-flex items-center gap-2 px-4 py-2 text-sm font-medium text-white bg-blue-600 rounded-lg hover:bg-blue-700 transition-colors\"\r\n >\r\n <i class=\"pi pi-plus\"></i>\r\n {{ 'ADD_FIRST_GROUP_LEVEL' | translate }}\r\n </button>\r\n </div>\r\n\r\n <!-- Groups List with Drag & Drop -->\r\n <div class=\"space-y-3\">\r\n <div *ngFor=\"let group of groups.controls; let i = index\"\r\n class=\"bg-gray-50 rounded-lg border border-gray-200 p-4 transition-colors hover:bg-gray-100\"\r\n draggable=\"true\"\r\n (dragstart)=\"onDragStart($event, i)\"\r\n (dragover)=\"onDragOver($event)\"\r\n (drop)=\"onDrop($event, i)\"\r\n (dragenter)=\"onDragEnter($event)\"\r\n (dragleave)=\"onDragLeave($event)\"\r\n (dragend)=\"onDragEnd($event)\">\r\n\r\n <div class=\"grid grid-cols-12 gap-4 items-start\">\r\n <!-- Drag Handle -->\r\n <div *ngIf=\"groups.length > 1\"\r\n class=\"col-span-1 flex justify-center cursor-move text-gray-400 hover:text-gray-600 pt-2\"\r\n draggable=\"true\"\r\n (dragstart)=\"onDragStart($event, i)\">\r\n <i class=\"pi pi-bars\"></i>\r\n </div>\r\n\r\n <!-- Group Content -->\r\n <div class=\"col-span-11\">\r\n <div class=\"flex items-center justify-between mb-3\">\r\n <div class=\"flex items-center gap-2\">\r\n <i class=\"pi pi-sort-alt text-gray-500\"></i>\r\n <span class=\"font-medium text-gray-700\">{{ 'GROUP_LEVEL' | translate }} {{ i + 1 }}</span>\r\n </div>\r\n <div class=\"flex items-center gap-1\">\r\n <button\r\n type=\"button\"\r\n (click)=\"removeGroup(i)\"\r\n class=\"p-1 text-red-500 hover:text-red-700 hover:bg-red-50 rounded transition-colors\"\r\n [pTooltip]=\"'REMOVE' | translate\"\r\n >\r\n <i class=\"pi pi-times\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n <!-- Field Selection -->\r\n <div>\r\n <label class=\"block text-sm font-medium text-gray-700 mb-2\">{{ 'FIELD' | translate }}</label>\r\n <p-select\r\n [options]=\"availableFields\"\r\n optionLabel=\"label\"\r\n optionValue=\"key\"\r\n [formControl]=\"getGroupControl(i, 'field')\"\r\n [placeholder]=\"'SELECT_FIELD' | translate\"\r\n [showClear]=\"true\"\r\n (onChange)=\"onFieldChange(i, $event.value)\"\r\n styleClass=\"w-full\"\r\n >\r\n <ng-template pTemplate=\"selectedItem\">\r\n <span *ngIf=\"getGroupControl(i, 'field').value\" class=\"text-gray-900\">\r\n {{ getFieldLabel(getGroupControl(i, 'field').value) }}\r\n </span>\r\n <span *ngIf=\"!getGroupControl(i, 'field').value\" class=\"text-gray-500\">{{ 'SELECT_FIELD' | translate }}</span>\r\n </ng-template>\r\n </p-select>\r\n </div>\r\n\r\n <!-- Display Name -->\r\n <div>\r\n <label class=\"block text-sm font-medium text-gray-700 mb-2\">{{ 'DISPLAY_NAME' | translate }}</label>\r\n <input\r\n type=\"text\"\r\n pInputText\r\n [formControl]=\"getGroupControl(i, 'displayName')\"\r\n [placeholder]=\"'DISPLAY_NAME_PLACEHOLDER' | translate\"\r\n class=\"w-full text-gray-900\"\r\n (blur)=\"onFormChange()\"\r\n >\r\n </div>\r\n </div>\r\n\r\n <!-- Show Total Toggle -->\r\n <div class=\"flex items-center gap-2 mt-3\">\r\n <p-checkbox\r\n [binary]=\"true\"\r\n [formControl]=\"getGroupControl(i, 'showTotal')\"\r\n [inputId]=\"'showTotal' + i\"\r\n styleClass=\"[&>div]:border-gray-300 [&>div]:hover:border-gray-400\"\r\n (onChange)=\"onFormChange()\"\r\n >\r\n </p-checkbox>\r\n <label [for]=\"'showTotal' + i\" class=\"text-sm text-gray-700 cursor-pointer hover:text-gray-900\">\r\n {{ 'SHOW_TOTAL' | translate }}\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Grouping Tips -->\r\n <div *ngIf=\"groups.length > 0\" class=\"mt-4 p-4 bg-blue-50 border border-blue-200 rounded-lg\">\r\n <div class=\"flex items-center gap-3\">\r\n <i class=\"pi pi-info-circle text-blue-500\"></i>\r\n <div>\r\n <p class=\"text-sm text-blue-800\">\r\n {{ 'GROUPING_TIPS' | translate }}\r\n {{ groups.length }} {{ 'LEVELS_DEFINED' | translate:{count: groups.length} }}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n</div>`, isInline: true, dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i2.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i2.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"ngmodule\", type: ReactiveFormsModule }, { kind: \"directive\", type: i2.FormControlDirective, selector: \"[formControl]\", inputs: [\"formControl\", \"disabled\", \"ngModel\"], outputs: [\"ngModelChange\"], exportAs: [\"ngForm\"] }, { kind: \"ngmodule\", type: SelectModule }, { kind: \"component\", type: i3.Select, selector: \"p-select\", inputs: [\"id\", \"scrollHeight\", \"filter\", \"panelStyle\", \"styleClass\", \"panelStyleClass\", \"readonly\", \"editable\", \"tabindex\", \"placeholder\", \"loadingIcon\", \"filterPlaceholder\", \"filterLocale\", \"inputId\", \"dataKey\", \"filterBy\", \"filterFields\", \"autofocus\", \"resetFilterOnHide\", \"checkmark\", \"dropdownIcon\", \"loading\", \"optionLabel\", \"optionValue\", \"optionDisabled\", \"optionGroupLabel\", \"optionGroupChildren\", \"group\", \"showClear\", \"emptyFilterMessage\", \"emptyMessage\", \"lazy\", \"virtualScroll\", \"virtualScrollItemSize\", \"virtualScrollOptions\", \"overlayOptions\", \"ariaFilterLabel\", \"ariaLabel\", \"ariaLabelledBy\", \"filterMatchMode\", \"tooltip\", \"tooltipPosition\", \"tooltipPositionStyle\", \"tooltipStyleClass\", \"focusOnHover\", \"selectOnFocus\", \"autoOptionFocus\", \"autofocusFilter\", \"filterValue\", \"options\", \"appendTo\"], outputs: [\"onChange\", \"onFilter\", \"onFocus\", \"onBlur\", \"onClick\", \"onShow\", \"onHide\", \"onClear\", \"onLazyLoad\"] }, { kind: \"directive\", type: i4.PrimeTemplate, selector: \"[pTemplate]\", inputs: [\"type\", \"pTemplate\"] }, { kind: \"ngmodule\", type: InputTextModule }, { kind: \"directive\", type: i5.InputText, selector: \"[pInputText]\", inputs: [\"pSize\", \"variant\", \"fluid\", \"invalid\"] }, { kind: \"ngmodule\", type: ButtonModule }, { kind: \"ngmodule\", type: DatePickerModule }, { kind: \"ngmodule\", type: CheckboxModule }, { kind: \"component\", type: i6.Checkbox, selector: \"p-checkbox, p-checkBox, p-check-box\", inputs: [\"value\", \"binary\", \"ariaLabelledBy\", \"ariaLabel\", \"tabindex\", \"inputId\", \"inputStyle\", \"styleClass\", \"inputClass\", \"indeterminate\", \"formControl\", \"checkboxIcon\", \"readonly\", \"autofocus\", \"trueValue\", \"falseValue\", \"variant\", \"size\"], outputs: [\"onChange\", \"onFocus\", \"onBlur\"] }, { kind: \"ngmodule\", type: RadioButtonModule }, { kind: \"ngmodule\", type: TooltipModule }, { kind: \"directive\", type: i7.Tooltip, selector: \"[pTooltip]\", inputs: [\"tooltipPosition\", \"tooltipEvent\", \"positionStyle\", \"tooltipStyleClass\", \"tooltipZIndex\", \"escape\", \"showDelay\", \"hideDelay\", \"life\", \"positionTop\", \"positionLeft\", \"autoHide\", \"fitContent\", \"hideOnEscape\", \"pTooltip\", \"tooltipDisabled\", \"tooltipOptions\", \"appendTo\"] }, { kind: \"ngmodule\", type: MenuModule }, { kind: \"ngmodule\", type: TranslateModule }, { kind: \"ngmodule\", type: InputGroupModule }, { kind: \"ngmodule\", type: InputGroupAddonModule }, { kind: \"ngmodule\", type: PopoverModule }, { kind: \"ngmodule\", type: ListboxModule }, { kind: \"pipe\", type: i8.TranslatePipe, name: \"translate\" }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GroupBuilderComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'formly-group-builder',\n template: `<div>\r\n <!-- Header -->\r\n <div class=\"mb-6\">\r\n <h5 class=\"text-lg font-semibold text-gray-900 mb-2\">{{ props.label || ('DATA_GROUPING' | translate) }}</h5>\r\n <p class=\"text-gray-600 text-sm\">{{ props.description || ('GROUP_DESCRIPTION' | translate) }}</p>\r\n </div>\r\n\r\n <!-- Group Configuration -->\r\n <div class=\"space-y-4\">\r\n <div class=\"flex items-center justify-between\">\r\n <span class=\"font-medium text-gray-700\">{{ 'GROUP_LEVELS' | translate }}</span>\r\n <button\r\n type=\"button\"\r\n *ngIf=\"canAddMoreGroups()\"\r\n (click)=\"addGroup()\"\r\n [disabled]=\"!canAddMoreGroups()\"\r\n class=\"inline-flex items-center gap-2 px-3 py-2 text-sm font-medium text-blue-700 bg-blue-50 rounded-lg hover:bg-blue-100 disabled:opacity-50 disabled:cursor-not-allowed transition-colors\"\r\n >\r\n <i class=\"pi pi-plus\"></i>\r\n {{ 'ADD_GROUP_LEVEL' | translate }}\r\n </button>\r\n </div>\r\n\r\n <!-- Drag Info -->\r\n <div *ngIf=\"groups.length > 1\" class=\"mb-4 p-2 bg-blue-50 border border-blue-200 rounded text-sm text-blue-700\">\r\n <i class=\"pi pi-info-circle mr-2\"></i>\r\n {{ 'DRAG_INFO' | translate }}\r\n </div>\r\n\r\n <!-- Empty State -->\r\n <div *ngIf=\"groups.length === 0\" class=\"text-center py-8 px-4 border-2 border-dashed border-gray-300 rounded-lg bg-gray-50\">\r\n <i class=\"pi pi-layer-group text-4xl text-gray-400 mb-3\"></i>\r\n <p class=\"text-gray-500 mb-4\">{{ 'NO_GROUPING_LEVELS' | translate }}</p>\r\n <button\r\n type=\"button\"\r\n (click)=\"addGroup()\"\r\n class=\"inline-flex items-center gap-2 px-4 py-2 text-sm font-medium text-white bg-blue-600 rounded-lg hover:bg-blue-700 transition-colors\"\r\n >\r\n <i class=\"pi pi-plus\"></i>\r\n {{ 'ADD_FIRST_GROUP_LEVEL' | translate }}\r\n </button>\r\n </div>\r\n\r\n <!-- Groups List with Drag & Drop -->\r\n <div class=\"space-y-3\">\r\n <div *ngFor=\"let group of groups.controls; let i = index\"\r\n class=\"bg-gray-50 rounded-lg border border-gray-200 p-4 transition-colors hover:bg-gray-100\"\r\n draggable=\"true\"\r\n (dragstart)=\"onDragStart($event, i)\"\r\n (dragover)=\"onDragOver($event)\"\r\n (drop)=\"onDrop($event, i)\"\r\n (dragenter)=\"onDragEnter($event)\"\r\n (dragleave)=\"onDragLeave($event)\"\r\n (dragend)=\"onDragEnd($event)\">\r\n\r\n <div class=\"grid grid-cols-12 gap-4 items-start\">\r\n <!-- Drag Handle -->\r\n <div *ngIf=\"groups.length > 1\"\r\n class=\"col-span-1 flex justify-center cursor-move text-gray-400 hover:text-gray-600 pt-2\"\r\n draggable=\"true\"\r\n (dragstart)=\"onDragStart($event, i)\">\r\n <i class=\"pi pi-bars\"></i>\r\n </div>\r\n\r\n <!-- Group Content -->\r\n <div class=\"col-span-11\">\r\n <div class=\"flex items-center justify-between mb-3\">\r\n <div class=\"flex items-center gap-2\">\r\n <i class=\"pi pi-sort-alt text-gray-500\"></i>\r\n <span class=\"font-medium text-gray-700\">{{ 'GROUP_LEVEL' | translate }} {{ i + 1 }}</span>\r\n </div>\r\n <div class=\"flex items-center gap-1\">\r\n <button\r\n type=\"button\"\r\n (click)=\"removeGroup(i)\"\r\n class=\"p-1 text-red-500 hover:text-red-700 hover:bg-red-50 rounded transition-colors\"\r\n [pTooltip]=\"'REMOVE' | translate\"\r\n >\r\n <i class=\"pi pi-times\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n <!-- Field Selection -->\r\n <div>\r\n <label class=\"block text-sm font-medium text-gray-700 mb-2\">{{ 'FIELD' | translate }}</label>\r\n <p-select\r\n [options]=\"availableFields\"\r\n optionLabel=\"label\"\r\n optionValue=\"key\"\r\n [formControl]=\"getGroupControl(i, 'field')\"\r\n [placeholder]=\"'SELECT_FIELD' | translate\"\r\n [showClear]=\"true\"\r\n (onChange)=\"onFieldChange(i, $event.value)\"\r\n styleClass=\"w-full\"\r\n >\r\n <ng-template pTemplate=\"selectedItem\">\r\n <span *ngIf=\"getGroupControl(i, 'field').value\" class=\"text-gray-900\">\r\n {{ getFieldLabel(getGroupControl(i, 'field').value) }}\r\n </span>\r\n <span *ngIf=\"!getGroupControl(i, 'field').value\" class=\"text-gray-500\">{{ 'SELECT_FIELD' | translate }}</span>\r\n </ng-template>\r\n </p-select>\r\n </div>\r\n\r\n <!-- Display Name -->\r\n <div>\r\n <label class=\"block text-sm font-medium text-gray-700 mb-2\">{{ 'DISPLAY_NAME' | translate }}</label>\r\n <input\r\n type=\"text\"\r\n pInputText\r\n [formControl]=\"getGroupControl(i, 'displayName')\"\r\n [placeholder]=\"'DISPLAY_NAME_PLACEHOLDER' | translate\"\r\n class=\"w-full text-gray-900\"\r\n (blur)=\"onFormChange()\"\r\n >\r\n </div>\r\n </div>\r\n\r\n <!-- Show Total Toggle -->\r\n <div class=\"flex items-center gap-2 mt-3\">\r\n <p-checkbox\r\n [binary]=\"true\"\r\n [formControl]=\"getGroupControl(i, 'showTotal')\"\r\n [inputId]=\"'showTotal' + i\"\r\n styleClass=\"[&>div]:border-gray-300 [&>div]:hover:border-gray-400\"\r\n (onChange)=\"onFormChange()\"\r\n >\r\n </p-checkbox>\r\n <label [for]=\"'showTotal' + i\" class=\"text-sm text-gray-700 cursor-pointer hover:text-gray-900\">\r\n {{ 'SHOW_TOTAL' | translate }}\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Grouping Tips -->\r\n <div *ngIf=\"groups.length > 0\" class=\"mt-4 p-4 bg-blue-50 border border-blue-200 rounded-lg\">\r\n <div class=\"flex items-center gap-3\">\r\n <i class=\"pi pi-info-circle text-blue-500\"></i>\r\n <div>\r\n <p class=\"text-sm text-blue-800\">\r\n {{ 'GROUPING_TIPS' | translate }}\r\n {{ groups.length }} {{ 'LEVELS_DEFINED' | translate:{count: groups.length} }}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n</div>`,\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n SelectModule,\n InputTextModule,\n ButtonModule,\n DatePickerModule,\n CheckboxModule,\n RadioButtonModule,\n FormlyForm,\n TooltipModule,\n MenuModule,\n TranslateModule,\n InputGroupModule,\n InputGroupAddonModule,\n PopoverModule,\n ListboxModule\n ]\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtYnVpbGRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLnVpLmNvcmUvZ2VuZXJpYy1zZWFyY2gtYWR2YW5jZWQvc3JjL2xpYi9ncm91cC1idWlsZGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw2QkFBNkI7QUFDN0IsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFtQixVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJB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QXJCLHFCQUFxQix1R0E3S3RCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXdKTCwyREFFSCxZQUFZLCtQQUNaLFdBQVcsc1pBQ1gsbUJBQW1CLGlOQUNuQixZQUFZLCtsQ0FDWixlQUFlLHFKQUNmLFlBQVksOEJBQ1osZ0JBQWdCLDhCQUNoQixjQUFjLHlaQUNkLGlCQUFpQiw4QkFFakIsYUFBYSxxWEFDYixVQUFVLDhCQUNWLGVBQWUsOEJBQ2YsZ0JBQWdCLDhCQUNoQixxQkFBcUIsOEJBQ3JCLGFBQWEsOEJBQ2IsYUFBYTs7MkZBR0oscUJBQXFCO2tCQS9LakMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsc0JBQXNCO29CQUNoQyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Bd0pMO29CQUNMLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsWUFBWTt3QkFDWixnQkFBZ0I7d0JBQ2hCLGNBQWM7d0JBQ2QsaUJBQWlCO3dCQUNqQixVQUFVO3dCQUNWLGFBQWE7d0JBQ2IsVUFBVTt3QkFDVixlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIscUJBQXFCO3dCQUNyQixhQUFhO3dCQUNiLGFBQWE7cUJBQ2Q7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBncm91cC1idWlsZGVyLmNvbXBvbmVudC50c1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGaWVsZFR5cGUsIEZpZWxkVHlwZUNvbmZpZywgRm9ybWx5Rm9ybSB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBHcm91cEJ5RmllbGQgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xyXG5pbXBvcnQgeyBDaGVja2JveE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvY2hlY2tib3gnO1xyXG5pbXBvcnQgeyBEYXRlUGlja2VyTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9kYXRlcGlja2VyJztcclxuaW1wb3J0IHsgSW5wdXRHcm91cE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvaW5wdXRncm91cCc7XHJcbmltcG9ydCB7IElucHV0R3JvdXBBZGRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvaW5wdXRncm91cGFkZG9uJztcclxuaW1wb3J0IHsgSW5wdXRUZXh0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pbnB1dHRleHQnO1xyXG5pbXBvcnQgeyBMaXN0Ym94TW9kdWxlIH0gZnJvbSAncHJpbWVuZy9saXN0Ym94JztcclxuaW1wb3J0IHsgTWVudU1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvbWVudSc7XHJcbmltcG9ydCB7IFBvcG92ZXJNb2R1bGUgfSBmcm9tICdwcmltZW5nL3BvcG92ZXInO1xyXG5pbXBvcnQgeyBSYWRpb0J1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvcmFkaW9idXR0b24nO1xyXG5pbXBvcnQgeyBTZWxlY3RNb2R1bGUgfSBmcm9tICdwcmltZW5nL3NlbGVjdCc7XHJcbmltcG9ydCB7IFRvb2x0aXBNb2R1bGUgfSBmcm9tICdwcmltZW5nL3Rvb2x0aXAnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdmb3JtbHktZ3JvdXAtYnVpbGRlcicsXHJcbiAgdGVtcGxhdGU6IGA8ZGl2PlxyXG4gIDwhLS0gSGVhZGVyIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJtYi02XCI+XHJcbiAgICA8aDUgY2xhc3M9XCJ0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTkwMCBtYi0yXCI+e3sgcHJvcHMubGFiZWwgfHwgKCdEQVRBX0dST1VQSU5HJyB8IHRyYW5zbGF0ZSkgfX08L2g1PlxyXG4gICAgPHAgY2xhc3M9XCJ0ZXh0LWdyYXktNjAwIHRleHQtc21cIj57eyBwcm9wcy5kZXNjcmlwdGlvbiB8fCAoJ0dST1VQX0RFU0NSSVBUSU9OJyB8IHRyYW5zbGF0ZSkgfX08L3A+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gR3JvdXAgQ29uZmlndXJhdGlvbiAtLT5cclxuICA8ZGl2IGNsYXNzPVwic3BhY2UteS00XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMFwiPnt7ICdHUk9VUF9MRVZFTFMnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgKm5nSWY9XCJjYW5BZGRNb3JlR3JvdXBzKClcIlxyXG4gICAgICAgIChjbGljayk9XCJhZGRHcm91cCgpXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiIWNhbkFkZE1vcmVHcm91cHMoKVwiXHJcbiAgICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMyBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ibHVlLTcwMCBiZy1ibHVlLTUwIHJvdW5kZWQtbGcgaG92ZXI6YmctYmx1ZS0xMDAgZGlzYWJsZWQ6b3BhY2l0eS01MCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgdHJhbnNpdGlvbi1jb2xvcnNcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1wbHVzXCI+PC9pPlxyXG4gICAgICAgIHt7ICdBRERfR1JPVVBfTEVWRUwnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBEcmFnIEluZm8gLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiZ3JvdXBzLmxlbmd0aCA+IDFcIiBjbGFzcz1cIm1iLTQgcC0yIGJnLWJsdWUtNTAgYm9yZGVyIGJvcmRlci1ibHVlLTIwMCByb3VuZGVkIHRleHQtc20gdGV4dC1ibHVlLTcwMFwiPlxyXG4gICAgICA8aSBjbGFzcz1cInBpIHBpLWluZm8tY2lyY2xlIG1yLTJcIj48L2k+XHJcbiAgICAgIHt7ICdEUkFHX0lORk8nIHwgdHJhbnNsYXRlIH19XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIEVtcHR5IFN0YXRlIC0tPlxyXG4gICAgPGRpdiAqbmdJZj1cImdyb3Vwcy5sZW5ndGggPT09IDBcIiBjbGFzcz1cInRleHQtY2VudGVyIHB5LTggcHgtNCBib3JkZXItMiBib3JkZXItZGFzaGVkIGJvcmRlci1ncmF5LTMwMCByb3VuZGVkLWxnIGJnLWdyYXktNTBcIj5cclxuICAgICAgPGkgY2xhc3M9XCJwaSBwaS1sYXllci1ncm91cCB0ZXh0LTR4bCB0ZXh0LWdyYXktNDAwIG1iLTNcIj48L2k+XHJcbiAgICAgIDxwIGNsYXNzPVwidGV4dC1ncmF5LTUwMCBtYi00XCI+e3sgJ05PX0dST1VQSU5HX0xFVkVMUycgfCB0cmFuc2xhdGUgfX08L3A+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAoY2xpY2spPVwiYWRkR3JvdXAoKVwiXHJcbiAgICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtNCBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC13aGl0ZSBiZy1ibHVlLTYwMCByb3VuZGVkLWxnIGhvdmVyOmJnLWJsdWUtNzAwIHRyYW5zaXRpb24tY29sb3JzXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxpIGNsYXNzPVwicGkgcGktcGx1c1wiPjwvaT5cclxuICAgICAgICB7eyAnQUREX0ZJUlNUX0dST1VQX0xFVkVMJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gR3JvdXBzIExpc3Qgd2l0aCBEcmFnICYgRHJvcCAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJzcGFjZS15LTNcIj5cclxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgZ3JvdXBzLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgICAgICBjbGFzcz1cImJnLWdyYXktNTAgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHAtNCB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1ncmF5LTEwMFwiXHJcbiAgICAgICAgICAgZHJhZ2dhYmxlPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgKGRyYWdzdGFydCk9XCJvbkRyYWdTdGFydCgkZXZlbnQsIGkpXCJcclxuICAgICAgICAgICAoZHJhZ292ZXIpPVwib25EcmFnT3ZlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAoZHJvcCk9XCJvbkRyb3AoJGV2ZW50LCBpKVwiXHJcbiAgICAgICAgICAgKGRyYWdlbnRlcik9XCJvbkRyYWdFbnRlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAoZHJhZ2xlYXZlKT1cIm9uRHJhZ0xlYXZlKCRldmVudClcIlxyXG4gICAgICAgICAgIChkcmFnZW5kKT1cIm9uRHJhZ0VuZCgkZXZlbnQpXCI+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGdyaWQtY29scy0xMiBnYXAtNCBpdGVtcy1zdGFydFwiPlxyXG4gICAgICAgICAgPCEtLSBEcmFnIEhhbmRsZSAtLT5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJncm91cHMubGVuZ3RoID4gMVwiXHJcbiAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLXNwYW4tMSBmbGV4IGp1c3RpZnktY2VudGVyIGN1cnNvci1tb3ZlIHRleHQtZ3JheS00MDAgaG92ZXI6dGV4dC1ncmF5LTYwMCBwdC0yXCJcclxuICAgICAgICAgICAgICAgZHJhZ2dhYmxlPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgIChkcmFnc3RhcnQpPVwib25EcmFnU3RhcnQoJGV2ZW50LCBpKVwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWJhcnNcIj48L2k+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8IS0tIEdyb3VwIENvbnRlbnQgLS0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNwYW4tMTFcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXNvcnQtYWx0IHRleHQtZ3JheS01MDBcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtbWVkaXVtIHRleHQtZ3JheS03MDBcIj57eyAnR1JPVVBfTEVWRUwnIHwgdHJhbnNsYXRlIH19IHt7IGkgKyAxIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUdyb3VwKGkpXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLTEgdGV4dC1yZWQtNTAwIGhvdmVyOnRleHQtcmVkLTcwMCBob3ZlcjpiZy1yZWQtNTAgcm91bmRlZCB0cmFuc2l0aW9uLWNvbG9yc1wiXHJcbiAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCInUkVNT1ZFJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktdGltZXNcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBncmlkLWNvbHMtMSBtZDpncmlkLWNvbHMtMiBnYXAtNFwiPlxyXG4gICAgICAgICAgICAgIDwhLS0gRmllbGQgU2VsZWN0aW9uIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJibG9jayB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS03MDAgbWItMlwiPnt7ICdGSUVMRCcgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPHAtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImF2YWlsYWJsZUZpZWxkc1wiXHJcbiAgICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICBvcHRpb25WYWx1ZT1cImtleVwiXHJcbiAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJnZXRHcm91cENvbnRyb2woaSwgJ2ZpZWxkJylcIlxyXG4gICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NFTEVDVF9GSUVMRCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICBbc2hvd0NsZWFyXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25GaWVsZENoYW5nZShpLCAkZXZlbnQudmFsdWUpXCJcclxuICAgICAgICAgICAgICAgICAgc3R5bGVDbGFzcz1cInctZnVsbFwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJzZWxlY3RlZEl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImdldEdyb3VwQ29udHJvbChpLCAnZmllbGQnKS52YWx1ZVwiIGNsYXNzPVwidGV4dC1ncmF5LTkwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgZ2V0RmllbGRMYWJlbChnZXRHcm91cENvbnRyb2woaSwgJ2ZpZWxkJykudmFsdWUpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWdldEdyb3VwQ29udHJvbChpLCAnZmllbGQnKS52YWx1ZVwiIGNsYXNzPVwidGV4dC1ncmF5LTUwMFwiPnt7ICdTRUxFQ1RfRklFTEQnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPC9wLXNlbGVjdD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBEaXNwbGF5IE5hbWUgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCBtYi0yXCI+e3sgJ0RJU1BMQVlfTkFNRScgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgcElucHV0VGV4dFxyXG4gICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZ2V0R3JvdXBDb250cm9sKGksICdkaXNwbGF5TmFtZScpXCJcclxuICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidESVNQTEFZX05BTUVfUExBQ0VIT0xERVInIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgdGV4dC1ncmF5LTkwMFwiXHJcbiAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uRm9ybUNoYW5nZSgpXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIFNob3cgVG90YWwgVG9nZ2xlIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgbXQtM1wiPlxyXG4gICAgICAgICAgICAgIDxwLWNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICBbYmluYXJ5XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImdldEdyb3VwQ29udHJvbChpLCAnc2hvd1RvdGFsJylcIlxyXG4gICAgICAgICAgICAgICAgW2lucHV0SWRdPVwiJ3Nob3dUb3RhbCcgKyBpXCJcclxuICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJbJj5kaXZdOmJvcmRlci1ncmF5LTMwMCBbJj5kaXZdOmhvdmVyOmJvcmRlci1ncmF5LTQwMFwiXHJcbiAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25Gb3JtQ2hhbmdlKClcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8L3AtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIFtmb3JdPVwiJ3Nob3dUb3RhbCcgKyBpXCIgY2xhc3M9XCJ0ZXh0LXNtIHRleHQtZ3JheS03MDAgY3Vyc29yLXBvaW50ZXIgaG92ZXI6dGV4dC1ncmF5LTkwMFwiPlxyXG4gICAgICAgICAgICAgICAge3sgJ1NIT1dfVE9UQUwnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBHcm91cGluZyBUaXBzIC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJncm91cHMubGVuZ3RoID4gMFwiIGNsYXNzPVwibXQtNCBwLTQgYmctYmx1ZS01MCBib3JkZXIgYm9yZGVyLWJsdWUtMjAwIHJvdW5kZWQtbGdcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtM1wiPlxyXG4gICAgICA8aSBjbGFzcz1cInBpIHBpLWluZm8tY2lyY2xlIHRleHQtYmx1ZS01MDBcIj48L2k+XHJcbiAgICAgIDxkaXY+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXNtIHRleHQtYmx1ZS04MDBcIj5cclxuICAgICAgICAgIHt7ICdHUk9VUElOR19USVBTJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAge3sgZ3JvdXBzLmxlbmd0aCB9fSB7eyAnTEVWRUxTX0RFRklORUQnIHwgdHJhbnNsYXRlOntjb3VudDogZ3JvdXBzLmxlbmd0aH0gfX1cclxuICAgICAgICA8L3A+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PmAsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgU2VsZWN0TW9kdWxlLFxyXG4gICAgSW5wdXRUZXh0TW9kdWxlLFxyXG4gICAgQnV0dG9uTW9kdWxlLFxyXG4gICAgRGF0ZVBpY2tlck1vZHVsZSxcclxuICAgIENoZWNrYm94TW9kdWxlLFxyXG4gICAgUmFkaW9CdXR0b25Nb2R1bGUsXHJcbiAgICBGb3JtbHlGb3JtLFxyXG4gICAgVG9vbHRpcE1vZHVsZSxcclxuICAgIE1lbnVNb2R1bGUsXHJcbiAgICBUcmFuc2xhdGVNb2R1bGUsXHJcbiAgICBJbnB1dEdyb3VwTW9kdWxlLFxyXG4gICAgSW5wdXRHcm91cEFkZG9uTW9kdWxlLFxyXG4gICAgUG9wb3Zlck1vZHVsZSxcclxuICAgIExpc3Rib3hNb2R1bGVcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHcm91cEJ1aWxkZXJDb21wb25lbnQgZXh0ZW5kcyBGaWVsZFR5cGU8RmllbGRUeXBlQ29uZmlnPiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgcHJpdmF0ZSBfZ3JvdXBzITogRm9ybUFycmF5O1xyXG4gIGRyYWdTdGFydEluZGV4OiBudW1iZXIgPSAtMTtcclxuXHJcbiAgZ2V0IGdyb3VwcygpOiBGb3JtQXJyYXkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2dyb3VwcztcclxuICB9XHJcblxyXG4gIGdldCBhdmFpbGFibGVGaWVsZHMoKTogR3JvdXBCeUZpZWxkW10ge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHNbJ2ZpZWxkcyddIHx8IFtdO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG1heEdyb3VwcygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHNbJ21heEdyb3VwcyddIHx8IDM7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm1BcnJheSgpO1xyXG4gICAgdGhpcy5zZXR1cFZhbHVlQ2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0aWFsaXplRm9ybUFycmF5KCkge1xyXG4gICAgY29uc3QgcGFyZW50Rm9ybSA9IHRoaXMuZm9ybSBhcyBGb3JtR3JvdXA7XHJcbiAgICBjb25zdCBmaWVsZEtleSA9IHRoaXMuZmllbGQua2V5IGFzIHN0cmluZztcclxuXHJcbiAgICBpZiAoIWZpZWxkS2V5KSByZXR1cm47XHJcblxyXG4gICAgLy8gR2V0IG9yIGNyZWF0ZSB0aGUgRm9ybUFycmF5IGluIHRoZSBwYXJlbnQgZm9ybVxyXG4gICAgbGV0IGZvcm1BcnJheSA9IHBhcmVudEZvcm0uZ2V0KGZpZWxkS2V5KSBhcyBGb3JtQXJyYXk7XHJcblxyXG4gICAgaWYgKCFmb3JtQXJyYXkgfHwgIShmb3JtQXJyYXkgaW5zdGFuY2VvZiBGb3JtQXJyYXkpKSB7XHJcbiAgICAgIC8vIENyZWF0ZSBuZXcgRm9ybUFycmF5XHJcbiAgICAgIGZvcm1BcnJheSA9IG5ldyBGb3JtQXJyYXk8YW55PihbXSk7XHJcbiAgICAgIHBhcmVudEZvcm0uc2V0Q29udHJvbChmaWVsZEtleSwgZm9ybUFycmF5KTtcclxuXHJcbiAgICAgIC8vIEluaXRpYWxpemUgd2l0aCBleGlzdGluZyBtb2RlbCBkYXRhXHJcbiAgICAgIGNvbnN0IGluaXRpYWxWYWx1ZSA9IHRoaXMubW9kZWxbZmllbGRLZXldO1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShpbml0aWFsVmFsdWUpKSB7XHJcbiAgICAgICAgaW5pdGlhbFZhbHVlLmZvckVhY2goZ3JvdXAgPT4ge1xyXG4gICAgICAgICAgZm9ybUFycmF5LnB1c2godGhpcy5jcmVhdGVHcm91cENvbnRyb2woZ3JvdXApKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFN0b3JlIHRoZSBGb3JtQXJyYXkgcmVmZXJlbmNlXHJcbiAgICB0aGlzLl9ncm91cHMgPSBmb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldHVwVmFsdWVDaGFuZ2VzKCkge1xyXG4gICAgLy8gTGlzdGVuIHRvIGZvcm0gYXJyYXkgY2hhbmdlcyBhbmQgdXBkYXRlIHRoZSBtb2RlbFxyXG4gICAgdGhpcy5ncm91cHMudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMudXBkYXRlTW9kZWwoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVNb2RlbCgpIHtcclxuICAgIGNvbnN0IGZpZWxkS2V5ID0gdGhpcy5maWVsZC5rZXkgYXMgc3RyaW5nO1xyXG4gICAgaWYgKGZpZWxkS2V5KSB7XHJcbiAgICAgIC8vIFVwZGF0ZSB0aGUgbW9kZWwgd2l0aCBjdXJyZW50IGZvcm0gdmFsdWVzXHJcbiAgICAgIHRoaXMubW9kZWxbZmllbGRLZXldID0gdGhpcy5ncm91cHMudmFsdWU7XHJcblxyXG4gICAgICAvLyBUcmlnZ2VyIGZvcm0gY29udHJvbCB1cGRhdGUgdG8gbm90aWZ5IEZvcm1seVxyXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMuZ3JvdXBzLnZhbHVlKTtcclxuXHJcbiAgICAgIC8vIE1hcmsgZm9ybSBjb250cm9sIGFzIHRvdWNoZWQvZGlydHkgaWYgbmVlZGVkXHJcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc0RpcnR5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBDYWxsZWQgd2hlbiBmb3JtIGNvbnRyb2xzIGNoYW5nZVxyXG4gIG9uRm9ybUNoYW5nZSgpIHtcclxuICAgIHRoaXMudXBkYXRlTW9kZWwoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlR3JvdXBDb250cm9sKGdyb3VwPzogYW55KTogRm9ybUdyb3VwIHtcclxuICAgIHJldHVybiBuZXcgRm9ybUdyb3VwKHtcclxuICAgICAgZmllbGQ6IG5ldyBGb3JtQ29udHJvbChncm91cD8uZmllbGQgfHwgJycpLFxyXG4gICAgICBkaXNwbGF5TmFtZTogbmV3IEZvcm1Db250cm9sKGdyb3VwPy5kaXNwbGF5TmFtZSB8fCAnJyksXHJcbiAgICAgIHNob3dUb3RhbDogbmV3IEZvcm1Db250cm9sKGdyb3VwPy5zaG93VG90YWwgIT09IGZhbHNlKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhZGRHcm91cCgpIHtcclxuICAgIGlmICh0aGlzLmNhbkFkZE1vcmVHcm91cHMoKSkge1xyXG4gICAgICB0aGlzLmdyb3Vwcy5wdXNoKHRoaXMuY3JlYXRlR3JvdXBDb250cm9sKCkpO1xyXG4gICAgICB0aGlzLnVwZGF0ZU1vZGVsKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVHcm91cChpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmdyb3Vwcy5yZW1vdmVBdChpbmRleCk7XHJcbiAgICB0aGlzLnVwZGF0ZU1vZGVsKCk7XHJcbiAgfVxyXG5cclxuICAvLyBEcmFnICYgRHJvcCBNZXRob2RzXHJcbiAgb25EcmFnU3RhcnQoZXZlbnQ6IERyYWdFdmVudCwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5kcmFnU3RhcnRJbmRleCA9IGluZGV4O1xyXG4gICAgZXZlbnQuZGF0YVRyYW5zZmVyPy5zZXREYXRhKCd0ZXh0L3BsYWluJywgaW5kZXgudG9TdHJpbmcoKSk7XHJcbiAgICAoZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xhc3NMaXN0LmFkZCgnb3BhY2l0eS01MCcsICdib3JkZXItYmx1ZS0zMDAnKTtcclxuICB9XHJcblxyXG4gIG9uRHJhZ092ZXIoZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcblxyXG4gIG9uRHJvcChldmVudDogRHJhZ0V2ZW50LCBkcm9wSW5kZXg6IG51bWJlcikge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGNvbnN0IGRyYWdJbmRleCA9IHRoaXMuZHJhZ1N0YXJ0SW5kZXg7XHJcblxyXG4gICAgaWYgKGRyYWdJbmRleCAhPT0gLTEgJiYgZHJhZ0luZGV4ICE9PSBkcm9wSW5kZXgpIHtcclxuICAgICAgdGhpcy5tb3ZlR3JvdXAoZHJhZ0luZGV4LCBkcm9wSW5kZXgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVtb3ZlRHJhZ1N0eWxlcyhldmVudCk7XHJcbiAgfVxyXG5cclxuICBvbkRyYWdFbnRlcihldmVudDogRHJhZ0V2ZW50KSB7XHJcbiAgICAoZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xhc3NMaXN0LmFkZCgnYm9yZGVyLWJsdWUtNTAwJywgJ2JnLWJsdWUtNTAnLCAnYm9yZGVyLTInKTtcclxuICB9XHJcblxyXG4gIG9uRHJhZ0xlYXZlKGV2ZW50OiBEcmFnRXZlbnQpIHtcclxuICAgIHRoaXMucmVtb3ZlRHJhZ1N0eWxlcyhldmVudCk7XHJcbiAgfVxyXG5cclxuICBvbkRyYWdFbmQoZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgdGhpcy5yZW1vdmVEcmFnU3R5bGVzKGV2ZW50KTtcclxuICAgIHRoaXMuZHJhZ1N0YXJ0SW5kZXggPSAtMTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlRHJhZ1N0eWxlcyhldmVudDogRHJhZ0V2ZW50KSB7XHJcbiAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnYm9yZGVyLWJsdWUtNTAwJywgJ2JnLWJsdWUtNTAnLCAnb3BhY2l0eS01MCcsICdib3JkZXItYmx1ZS0zMDAnLCAnYm9yZGVyLTInKTtcclxuICB9XHJcblxyXG4gIG1vdmVHcm91cChmcm9tSW5kZXg6IG51bWJlciwgdG9JbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBtb3ZlZEdyb3VwID0gdGhpcy5ncm91cHMuYXQoZnJvbUluZGV4KTtcclxuICAgIHRoaXMuZ3JvdXBzLnJlbW92ZUF0KGZyb21JbmRleCk7XHJcbiAgICB0aGlzLmdyb3Vwcy5pbnNlcnQodG9JbmRleCwgbW92ZWRHcm91cCk7XHJcbiAgICB0aGlzLnVwZGF0ZU1vZGVsKCk7XHJcbiAgfVxyXG5cclxuICBnZXRHcm91cENvbnRyb2woaW5kZXg6IG51bWJlciwgY29udHJvbE5hbWU6IHN0cmluZyk6IEZvcm1Db250cm9sIHtcclxuICAgIGNvbnN0IGdyb3VwID0gdGhpcy5ncm91cHMuYXQoaW5kZXgpIGFzIEZvcm1Hcm91cDtcclxuICAgIHJldHVybiBncm91cC5nZXQoY29udHJvbE5hbWUpIGFzIEZvcm1Db250cm9sO1xyXG4gIH1cclxuXHJcbiAgb25GaWVsZENoYW5nZShpbmRleDogbnVtYmVyLCBmaWVsZEtleTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBkaXNwbGF5TmFtZUNvbnRyb2wgPSB0aGlzLmdldEdyb3VwQ29udHJvbChpbmRleCwgJ2Rpc3BsYXlOYW1lJyk7XHJcbiAgICBpZiAoIWRpc3BsYXlOYW1lQ29udHJvbC52YWx1ZSAmJiBmaWVsZEtleSkge1xyXG4gICAgICBjb25zdCBmaWVsZCA9IHRoaXMuYXZhaWxhYmxlRmllbGRzLmZpbmQoZiA9PiBmLmtleSA9PT0gZmllbGRLZXkpO1xyXG4gICAgICBpZiAoZmllbGQpIHtcclxuICAgICAgICBkaXNwbGF5TmFtZUNvbnRyb2wuc2V0VmFsdWUoZmllbGQubGFiZWwpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZU1vZGVsKCk7XHJcbiAgfVxyXG5cclxuICBnZXRGaWVsZExhYmVsKGZpZWxkS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZmllbGQgPSB0aGlzLmF2YWlsYWJsZUZpZWxkcy5maW5kKGYgPT4gZi5rZXkgPT09IGZpZWxkS2V5KTtcclxuICAgIHJldHVybiBmaWVsZCA/IGZpZWxkLmxhYmVsIDogZmllbGRLZXk7XHJcbiAgfVxyXG5cclxuICBjYW5BZGRNb3JlR3JvdXBzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ3JvdXBzLmxlbmd0aCA8IHRoaXMubWF4R3JvdXBzO1xyXG4gIH1cclxufVxyXG4iXX0=","// group-type.component.ts\nimport { Component } from '@angular/core';\nimport { FieldType, FormlyField } from '@ngx-formly/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { BadgeModule } from 'primeng/badge';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"primeng/button\";\nimport * as i3 from \"primeng/tooltip\";\nexport class GroupTypeComponent extends FieldType {\n collapsed = this.props.collapsedByDefault ?? false;\n get showValidation() {\n return this.props.showValidation !== false &&\n this.formControl.invalid && (this.formControl.dirty || this.formControl.touched);\n }\n get validationIcon() {\n if (this.formControl.valid)\n return 'pi pi-check-circle text-green-500';\n if (this.formControl.invalid)\n return 'pi pi-exclamation-circle text-red-500';\n return 'pi pi-circle text-500';\n }\n get validationText() {\n return this.formControl.valid ? 'جميع الحقول صالحة' : 'هناك أخطاء في بعض الحقول';\n }\n get groupClass() {\n const v = this.props.variant || 'default';\n const map = {\n default: 'border-round border-1 border-200 bg-white mb-3',\n card: 'border-round surface-card shadow-sm mb-3',\n bordered: 'border-round border-1 border-300 surface-section mb-3',\n transparent: 'border-0 bg-transparent mb-3'\n };\n return map[v];\n }\n get gridClass() {\n const cols = this.props.columns || 1;\n const gap = this.props.gap || 'normal';\n const gaps = { none: 'gap-0', small: 'gap-2', normal: 'gap-3', large: 'gap-4' };\n return `grid grid-cols-1 ${cols > 1 ? 'md:grid-cols-' + cols : ''} ${gaps[gap]}`;\n }\n toggle() {\n this.collapsed = !this.collapsed;\n }\n isRequired() {\n return this.field.fieldGroup?.some(f => f.props?.required || f.validators?.['required']) ?? false;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GroupTypeComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.1.8\", type: GroupTypeComponent, isStandalone: true, selector: \"formly-group-type\", usesInheritance: true, ngImport: i0, template: `\r\n <div [class]=\"groupClass\">\r\n <div *ngIf=\"props.label || props.collapsible\" class=\"flex justify-between items-center p-2\"\r\n (click)=\"props.collapsible && toggle()\">\r\n <div class=\"flex items-center gap-2\">\r\n <i *ngIf=\"props.collapsible\" [class]=\"collapsed ? 'pi pi-chevron-down' : 'pi pi-chevron-up'\"></i>\r\n <label *ngIf=\"props.label\" class=\"font-semibold\">{{ props.label }}</label>\r\n <i *ngIf=\"isRequired()\" class=\"pi pi-asterisk text-red-500 text-xs\" pTooltip=\"حقل مطلوب\"></i>\r\n </div>\r\n <div class=\"flex gap-2\">\r\n <i *ngIf=\"props.description && !collapsed\" class=\"pi pi-info-circle text-500\"\r\n pTooltip=\"{{ props.description }}\"></i>\r\n <i *ngIf=\"showValidation\" [class]=\"validationIcon\" [pTooltip]=\"validationText\"></i>\r\n <button *ngFor=\"let a of props.actions || []\" pButton type=\"button\" class=\"p-button-text p-button-sm\"\r\n [icon]=\"a.icon\" [pTooltip]=\"a.tooltip\" [ngClass]=\"a.styleClass\"\r\n (click)=\"a.handler?.(field, form, this); $event.stopPropagation()\"></button>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!collapsed\" class=\"p-3 pt-0\" [ngClass]=\"props.compact ? 'compact-layout' : ''\">\r\n <p *ngIf=\"props.description && props.showDescription\" class=\"text-500 text-sm mb-2\">{{ props.description }}</p>\r\n\r\n <div [ngClass]=\"gridClass\">\r\n <ng-container *ngFor=\"let f of field.fieldGroup\">\r\n <formly-field [field]=\"f\"></formly-field>\r\n <small *ngIf=\"f.props?.description\"\r\n class=\"block text-500 text-xs mt-1 ml-1\">\r\n {{ f.props?.description }}\r\n </small>\r\n </ng-container>\r\n</div>\r\n\r\n\r\n <div *ngIf=\"!field.fieldGroup?.length\" class=\"text-center p-4 surface-section border-round\">\r\n <i class=\"pi pi-inbox text-4xl text-500 mb-2\"></i>\r\n <p class=\"text-500\">لا توجد حقول</p>\r\n </div>\r\n </div>\r\n </div>\r\n `, isInline: true, dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: FormlyField, selector: \"formly-field\", inputs: [\"field\"] }, { kind: \"ngmodule\", type: ButtonModule }, { kind: \"directive\", type: i2.ButtonDirective, selector: \"[pButton]\", inputs: [\"iconPos\", \"loadingIcon\", \"loading\", \"severity\", \"raised\", \"rounded\", \"text\", \"outlined\", \"size\", \"plain\", \"fluid\", \"label\", \"icon\", \"buttonProps\"] }, { kind: \"ngmodule\", type: TooltipModule }, { kind: \"directive\", type: i3.Tooltip, selector: \"[pTooltip]\", inputs: [\"tooltipPosition\", \"tooltipEvent\", \"positionStyle\", \"tooltipStyleClass\", \"tooltipZIndex\", \"escape\", \"showDelay\", \"hideDelay\", \"life\", \"positionTop\", \"positionLeft\", \"autoHide\", \"fitContent\", \"hideOnEscape\", \"pTooltip\", \"tooltipDisabled\", \"tooltipOptions\", \"appendTo\"] }, { kind: \"ngmodule\", type: BadgeModule }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GroupTypeComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'formly-group-type',\n standalone: true,\n imports: [CommonModule, FormlyField, ButtonModule, TooltipModule, BadgeModule],\n template: `\r\n <div [class]=\"groupClass\">\r\n <div *ngIf=\"props.label || props.collapsible\" class=\"flex justify-between items-center p-2\"\r\n (click)=\"props.collapsible && toggle()\">\r\n <div class=\"flex items-center gap-2\">\r\n <i *ngIf=\"props.collapsible\" [class]=\"collapsed ? 'pi pi-chevron-down' : 'pi pi-chevron-up'\"></i>\r\n <label *ngIf=\"props.label\" class=\"font-semibold\">{{ props.label }}</label>\r\n <i *ngIf=\"isRequired()\" class=\"pi pi-asterisk text-red-500 text-xs\" pTooltip=\"حقل مطلوب\"></i>\r\n </div>\r\n <div class=\"flex gap-2\">\r\n <i *ngIf=\"props.description && !collapsed\" class=\"pi pi-info-circle text-500\"\r\n pTooltip=\"{{ props.description }}\"></i>\r\n <i *ngIf=\"showValidation\" [class]=\"validationIcon\" [pTooltip]=\"validationText\"></i>\r\n <button *ngFor=\"let a of props.actions || []\" pButton type=\"button\" class=\"p-button-text p-button-sm\"\r\n [icon]=\"a.icon\" [pTooltip]=\"a.tooltip\" [ngClass]=\"a.styleClass\"\r\n (click)=\"a.handler?.(field, form, this); $event.stopPropagation()\"></button>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!collapsed\" class=\"p-3 pt-0\" [ngClass]=\"props.compact ? 'compact-layout' : ''\">\r\n <p *ngIf=\"props.description && props.showDescription\" class=\"text-500 text-sm mb-2\">{{ props.description }}</p>\r\n\r\n <div [ngClass]=\"gridClass\">\r\n <ng-container *ngFor=\"let f of field.fieldGroup\">\r\n <formly-field [field]=\"f\"></formly-field>\r\n <small *ngIf=\"f.props?.description\"\r\n class=\"block text-500 text-xs mt-1 ml-1\">\r\n {{ f.props?.description }}\r\n </small>\r\n </ng-container>\r\n</div>\r\n\r\n\r\n <div *ngIf=\"!field.fieldGroup?.length\" class=\"text-center p-4 surface-section border-round\">\r\n <i class=\"pi pi-inbox text-4xl text-500 mb-2\"></i>\r\n <p class=\"text-500\">لا توجد حقول</p>\r\n </div>\r\n </div>\r\n </div>\r\n `\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy51aS5jb3JlL2dlbmVyaWMtc2VhcmNoLWFkdmFuY2VkL3NyYy9saWIvZ3JvdXAuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBCQUEwQjtBQUMxQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQXFCLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7O0FBb0U1QyxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsU0FBNEM7SUFDbEYsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLElBQUksS0FBSyxDQUFDO0lBR25ELElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxLQUFLLEtBQUs7WUFDeEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUs7WUFBRSxPQUFPLG1DQUFtQyxDQUFDO1FBQ3ZFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPO1lBQUUsT0FBTyx1Q0FBdUMsQ0FBQztRQUM3RSxPQUFPLHVCQUF1QixDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDO0lBQ25GLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxTQUFTLENBQUM7UUFDMUMsTUFBTSxHQUFHLEdBQVE7WUFDZixPQUFPLEVBQUUsZ0RBQWdEO1lBQ3pELElBQUksRUFBRSwwQ0FBMEM7WUFDaEQsUUFBUSxFQUFFLHVEQUF1RDtZQUNqRSxXQUFXLEVBQUUsOEJBQThCO1NBQzVDLENBQUM7UUFDRixPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQztRQUN2QyxNQUFNLElBQUksR0FBUSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUNyRixPQUFPLG9CQUFvQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDbkYsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxRQUFRLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO0lBQ3BHLENBQUM7dUdBM0NVLGtCQUFrQjsyRkFBbEIsa0JBQWtCLG9HQXpDbkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVDVCwyREF4Q1MsWUFBWSw4VkFBRSxXQUFXLDJFQUFFLFlBQVksb1FBQUUsYUFBYSxxWEFBRSxXQUFXOzsyRkEwQ2xFLGtCQUFrQjtrQkE3QzlCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxXQUFXLENBQUM7b0JBQzlFLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUNUO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZ3JvdXAtdHlwZS5jb21wb25lbnQudHNcclxuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZpZWxkVHlwZSwgRm9ybWx5RmllbGRDb25maWcsIEZvcm1seUZpZWxkIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcclxuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9vbHRpcCc7XHJcbmltcG9ydCB7IEJhZGdlTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9iYWRnZSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwVHlwZVByb3BzIHtcclxuICBsYWJlbD86IHN0cmluZztcclxuICBkZXNjcmlwdGlvbj86IHN0cmluZztcclxuICBjb2xsYXBzaWJsZT86IGJvb2xlYW47XHJcbiAgY29sbGFwc2VkQnlEZWZhdWx0PzogYm9vbGVhbjtcclxuICBzaG93RmllbGRDb3VudD86IGJvb2xlYW47XHJcbiAgc2hvd0Rlc2NyaXB0aW9uPzogYm9vbGVhbjtcclxuICBzaG93U3VtbWFyeT86IGJvb2xlYW47XHJcbiAgc2hvd1ZhbGlkYXRpb24/OiBib29sZWFuO1xyXG4gIGNvbXBhY3Q/OiBib29sZWFuO1xyXG4gIHZhcmlhbnQ/OiAnZGVmYXVsdCcgfCAnY2FyZCcgfCAnYm9yZGVyZWQnIHwgJ3RyYW5zcGFyZW50JztcclxuICBjb2x1bW5zPzogbnVtYmVyO1xyXG4gIGdhcD86ICdub25lJyB8ICdzbWFsbCcgfCAnbm9ybWFsJyB8ICdsYXJnZSc7XHJcbiAgYWN0aW9ucz86IHtcclxuICAgIGljb246IHN0cmluZztcclxuICAgIHRvb2x0aXA6IHN0cmluZztcclxuICAgIHN0eWxlQ2xhc3M/OiBzdHJpbmc7XHJcbiAgICBoYW5kbGVyPzogKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZywgZm9ybTogYW55LCBjb21wb25lbnQ6IGFueSkgPT4gdm9pZDtcclxuICB9W107XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZm9ybWx5LWdyb3VwLXR5cGUnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybWx5RmllbGQsIEJ1dHRvbk1vZHVsZSwgVG9vbHRpcE1vZHVsZSwgQmFkZ2VNb2R1bGVdLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8ZGl2IFtjbGFzc109XCJncm91cENsYXNzXCI+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJwcm9wcy5sYWJlbCB8fCBwcm9wcy5jb2xsYXBzaWJsZVwiIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIHAtMlwiXHJcbiAgICAgICAgICAgKGNsaWNrKT1cInByb3BzLmNvbGxhcHNpYmxlICYmIHRvZ2dsZSgpXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XHJcbiAgICAgICAgICA8aSAqbmdJZj1cInByb3BzLmNvbGxhcHNpYmxlXCIgW2NsYXNzXT1cImNvbGxhcHNlZCA/ICdwaSBwaS1jaGV2cm9uLWRvd24nIDogJ3BpIHBpLWNoZXZyb24tdXAnXCI+PC9pPlxyXG4gICAgICAgICAgPGxhYmVsICpuZ0lmPVwicHJvcHMubGFiZWxcIiBjbGFzcz1cImZvbnQtc2VtaWJvbGRcIj57eyBwcm9wcy5sYWJlbCB9fTwvbGFiZWw+XHJcbiAgICAgICAgICA8aSAqbmdJZj1cImlzUmVxdWlyZWQoKVwiIGNsYXNzPVwicGkgcGktYXN0ZXJpc2sgdGV4dC1yZWQtNTAwIHRleHQteHNcIiBwVG9vbHRpcD1cItit2YLZhCDZhdi32YTZiNioXCI+PC9pPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0yXCI+XHJcbiAgICAgICAgICA8aSAqbmdJZj1cInByb3BzLmRlc2NyaXB0aW9uICYmICFjb2xsYXBzZWRcIiBjbGFzcz1cInBpIHBpLWluZm8tY2lyY2xlIHRleHQtNTAwXCJcclxuICAgICAgICAgICAgIHBUb29sdGlwPVwie3sgcHJvcHMuZGVzY3JpcHRpb24gfX1cIj48L2k+XHJcbiAgICAgICAgICA8aSAqbmdJZj1cInNob3dWYWxpZGF0aW9uXCIgW2NsYXNzXT1cInZhbGlkYXRpb25JY29uXCIgW3BUb29sdGlwXT1cInZhbGlkYXRpb25UZXh0XCI+PC9pPlxyXG4gICAgICAgICAgPGJ1dHRvbiAqbmdGb3I9XCJsZXQgYSBvZiBwcm9wcy5hY3Rpb25zIHx8IFtdXCIgcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXNtXCJcclxuICAgICAgICAgICAgICAgICAgW2ljb25dPVwiYS5pY29uXCIgW3BUb29sdGlwXT1cImEudG9vbHRpcFwiIFtuZ0NsYXNzXT1cImEuc3R5bGVDbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhLmhhbmRsZXI/LihmaWVsZCwgZm9ybSwgdGhpcyk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPjwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgKm5nSWY9XCIhY29sbGFwc2VkXCIgY2xhc3M9XCJwLTMgcHQtMFwiIFtuZ0NsYXNzXT1cInByb3BzLmNvbXBhY3QgPyAnY29tcGFjdC1sYXlvdXQnIDogJydcIj5cclxuICAgICAgICA8cCAqbmdJZj1cInByb3BzLmRlc2NyaXB0aW9uICYmIHByb3BzLnNob3dEZXNjcmlwdGlvblwiIGNsYXNzPVwidGV4dC01MDAgdGV4dC1zbSBtYi0yXCI+e3sgcHJvcHMuZGVzY3JpcHRpb24gfX08L3A+XHJcblxyXG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwiZ3JpZENsYXNzXCI+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZiBvZiBmaWVsZC5maWVsZEdyb3VwXCI+XHJcbiAgICA8Zm9ybWx5LWZpZWxkIFtmaWVsZF09XCJmXCI+PC9mb3JtbHktZmllbGQ+XHJcbiAgICA8c21hbGwgKm5nSWY9XCJmLnByb3BzPy5kZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgY2xhc3M9XCJibG9jayB0ZXh0LTUwMCB0ZXh0LXhzIG10LTEgbWwtMVwiPlxyXG4gICAgICB7eyBmLnByb3BzPy5kZXNjcmlwdGlvbiAgfX1cclxuICAgIDwvc21hbGw+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiFmaWVsZC5maWVsZEdyb3VwPy5sZW5ndGhcIiBjbGFzcz1cInRleHQtY2VudGVyIHAtNCBzdXJmYWNlLXNlY3Rpb24gYm9yZGVyLXJvdW5kXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWluYm94IHRleHQtNHhsIHRleHQtNTAwIG1iLTJcIj48L2k+XHJcbiAgICAgICAgICA8cCBjbGFzcz1cInRleHQtNTAwXCI+2YTYpyDYqtmI2KzYryDYrdmC2YjZhDwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICBgXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHcm91cFR5cGVDb21wb25lbnQgZXh0ZW5kcyBGaWVsZFR5cGU8Rm9ybWx5RmllbGRDb25maWc8R3JvdXBUeXBlUHJvcHM+PiB7XHJcbiAgY29sbGFwc2VkID0gdGhpcy5wcm9wcy5jb2xsYXBzZWRCeURlZmF1bHQgPz8gZmFsc2U7XHJcblxyXG5cclxuICBnZXQgc2hvd1ZhbGlkYXRpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zaG93VmFsaWRhdGlvbiAhPT0gZmFsc2UgJiZcclxuICAgICAgdGhpcy5mb3JtQ29udHJvbC5pbnZhbGlkICYmICh0aGlzLmZvcm1Db250cm9sLmRpcnR5IHx8IHRoaXMuZm9ybUNvbnRyb2wudG91Y2hlZCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdmFsaWRhdGlvbkljb24oKSB7XHJcbiAgICBpZiAodGhpcy5mb3JtQ29udHJvbC52YWxpZCkgcmV0dXJuICdwaSBwaS1jaGVjay1jaXJjbGUgdGV4dC1ncmVlbi01MDAnO1xyXG4gICAgaWYgKHRoaXMuZm9ybUNvbnRyb2wuaW52YWxpZCkgcmV0dXJuICdwaSBwaS1leGNsYW1hdGlvbi1jaXJjbGUgdGV4dC1yZWQtNTAwJztcclxuICAgIHJldHVybiAncGkgcGktY2lyY2xlIHRleHQtNTAwJztcclxuICB9XHJcblxyXG4gIGdldCB2YWxpZGF0aW9uVGV4dCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1Db250cm9sLnZhbGlkID8gJ9is2YXZiti5INin2YTYrdmC2YjZhCDYtdin2YTYrdipJyA6ICfZh9mG2KfZgyDYo9iu2LfYp9ihINmB2Yog2KjYudi2INin2YTYrdmC2YjZhCc7XHJcbiAgfVxyXG5cclxuICBnZXQgZ3JvdXBDbGFzcygpIHtcclxuICAgIGNvbnN0IHYgPSB0aGlzLnByb3BzLnZhcmlhbnQgfHwgJ2RlZmF1bHQnO1xyXG4gICAgY29uc3QgbWFwOiBhbnkgPSB7XHJcbiAgICAgIGRlZmF1bHQ6ICdib3JkZXItcm91bmQgYm9yZGVyLTEgYm9yZGVyLTIwMCBiZy13aGl0ZSBtYi0zJyxcclxuICAgICAgY2FyZDogJ2JvcmRlci1yb3VuZCBzdXJmYWNlLWNhcmQgc2hhZG93LXNtIG1iLTMnLFxyXG4gICAgICBib3JkZXJlZDogJ2JvcmRlci1yb3VuZCBib3JkZXItMSBib3JkZXItMzAwIHN1cmZhY2Utc2VjdGlvbiBtYi0zJyxcclxuICAgICAgdHJhbnNwYXJlbnQ6ICdib3JkZXItMCBiZy10cmFuc3BhcmVudCBtYi0zJ1xyXG4gICAgfTtcclxuICAgIHJldHVybiBtYXBbdl07XHJcbiAgfVxyXG5cclxuICBnZXQgZ3JpZENsYXNzKCkge1xyXG4gICAgY29uc3QgY29scyA9IHRoaXMucHJvcHMuY29sdW1ucyB8fCAxO1xyXG4gICAgY29uc3QgZ2FwID0gdGhpcy5wcm9wcy5nYXAgfHwgJ25vcm1hbCc7XHJcbiAgICBjb25zdCBnYXBzOiBhbnkgPSB7IG5vbmU6ICdnYXAtMCcsIHNtYWxsOiAnZ2FwLTInLCBub3JtYWw6ICdnYXAtMycsIGxhcmdlOiAnZ2FwLTQnIH07XHJcbiAgICByZXR1cm4gYGdyaWQgZ3JpZC1jb2xzLTEgJHtjb2xzID4gMSA/ICdtZDpncmlkLWNvbHMtJyArIGNvbHMgOiAnJ30gJHtnYXBzW2dhcF19YDtcclxuICB9XHJcblxyXG4gIHRvZ2dsZSgpIHtcclxuICAgIHRoaXMuY29sbGFwc2VkID0gIXRoaXMuY29sbGFwc2VkO1xyXG4gIH1cclxuXHJcbiAgaXNSZXF1aXJlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZpZWxkLmZpZWxkR3JvdXA/LnNvbWUoZiA9PiBmLnByb3BzPy5yZXF1aXJlZCB8fCBmLnZhbGlkYXRvcnM/LlsncmVxdWlyZWQnXSkgPz8gZmFsc2U7XHJcbiAgfVxyXG59XHJcbiJdfQ==","import { provideFormlyConfig } from '@ngx-formly/core';\nimport { QueryBuilderComponent } from './query-builder.component';\nimport { SortBuilderComponent } from './sort-builder.component';\nimport { GroupTypeComponent } from './group.component';\nimport { TabTypeComponent } from './tab-type.component';\nimport { GroupBuilderComponent } from './group-builder.component';\nimport { ColumnsBuilderComponent } from './columns-builder.component';\nexport const formlyConfig = provideFormlyConfig({\n types: [\n {\n name: 'tab-type',\n component: TabTypeComponent\n },\n {\n name: 'query-builder',\n component: QueryBuilderComponent\n },\n {\n name: 'sort-builder',\n component: SortBuilderComponent\n },\n {\n name: 'group-builder',\n component: GroupBuilderComponent\n },\n {\n name: 'columns-builder',\n component: ColumnsBuilderComponent\n },\n { name: 'group', component: GroupTypeComponent },\n ],\n});\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLXNlYXJjaC1hZHZhbmNlZC9zcmMvbGliL2Zvcm1seS1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFHLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFdEUsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLG1CQUFtQixDQUFDO0lBQzlDLEtBQUssRUFBRTtRQUVMO1lBQ00sSUFBSSxFQUFFLFVBQVU7WUFDaEIsU0FBUyxFQUFFLGdCQUFnQjtTQUM1QjtRQUNGO1lBQ0csSUFBSSxFQUFFLGVBQWU7WUFDckIsU0FBUyxFQUFFLHFCQUFxQjtTQUNqQztRQUNEO1lBQ0UsSUFBSSxFQUFFLGNBQWM7WUFDcEIsU0FBUyxFQUFFLG9CQUFvQjtTQUNoQztRQUNEO1lBQ0UsSUFBSSxFQUFFLGVBQWU7WUFDckIsU0FBUyxFQUFFLHFCQUFxQjtTQUNqQztRQUNEO1lBQ0UsSUFBSSxFQUFFLGlCQUFpQjtZQUN2QixTQUFTLEVBQUUsdUJBQXVCO1NBQ25DO1FBQ0QsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRTtLQUdyRDtDQUVGLENBRUEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ICBwcm92aWRlRm9ybWx5Q29uZmlnIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XHJcbmltcG9ydCB7IFF1ZXJ5QnVpbGRlckNvbXBvbmVudCB9IGZyb20gJy4vcXVlcnktYnVpbGRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTb3J0QnVpbGRlckNvbXBvbmVudCB9IGZyb20gJy4vc29ydC1idWlsZGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEdyb3VwVHlwZUNvbXBvbmVudCB9IGZyb20gJy4vZ3JvdXAuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGFiVHlwZUNvbXBvbmVudCB9IGZyb20gJy4vdGFiLXR5cGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgR3JvdXBCdWlsZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9ncm91cC1idWlsZGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvbHVtbnNCdWlsZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9jb2x1bW5zLWJ1aWxkZXIuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCBjb25zdCBmb3JtbHlDb25maWcgPSBwcm92aWRlRm9ybWx5Q29uZmlnKHtcclxuICB0eXBlczogW1xyXG5cclxuICAgIHtcclxuICAgICAgICAgIG5hbWU6ICd0YWItdHlwZScsXHJcbiAgICAgICAgICBjb21wb25lbnQ6IFRhYlR5cGVDb21wb25lbnRcclxuICAgICAgICB9LFxyXG4gICAgICAge1xyXG4gICAgICAgICAgbmFtZTogJ3F1ZXJ5LWJ1aWxkZXInLFxyXG4gICAgICAgICAgY29tcG9uZW50OiBRdWVyeUJ1aWxkZXJDb21wb25lbnRcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6ICdzb3J0LWJ1aWxkZXInLFxyXG4gICAgICAgICAgY29tcG9uZW50OiBTb3J0QnVpbGRlckNvbXBvbmVudFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogJ2dyb3VwLWJ1aWxkZXInLFxyXG4gICAgICAgICAgY29tcG9uZW50OiBHcm91cEJ1aWxkZXJDb21wb25lbnRcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6ICdjb2x1bW5zLWJ1aWxkZXInLFxyXG4gICAgICAgICAgY29tcG9uZW50OiBDb2x1bW5zQnVpbGRlckNvbXBvbmVudFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgeyBuYW1lOiAnZ3JvdXAnLCBjb21wb25lbnQ6IEdyb3VwVHlwZUNvbXBvbmVudCB9LFxyXG5cclxuXHJcbiAgXSxcclxuXHJcbn0sXHJcblxyXG4pO1xyXG5cclxuXHJcblxyXG5cclxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxpdGUuZnJhbWV3b3JrLW5nLnVpLmNvcmUtZ2VuZXJpYy1zZWFyY2gtYWR2YW5jZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25nLnVpLmNvcmUvZ2VuZXJpYy1zZWFyY2gtYWR2YW5jZWQvc3JjL2VsaXRlLmZyYW1ld29yay1uZy51aS5jb3JlLWdlbmVyaWMtc2VhcmNoLWFkdmFuY2VkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":["i3","i4","i10","i2","i5","i6","i7","i8"],"mappings":"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C,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE;AACvE;AACA,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;AAChL,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,oBAAoB,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,qBAAqB,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC;AACtN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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AO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,UAAU,EAAE,CAAC;AACjI,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,QAAQ,EAAE,wBAAwB;AACtD,oBAAoB,QAAQ,EAAE,CAAC;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,CAAC;AACH,oBAAoB,OAAO,EAAE;AAC7B,wBAAwB,YAAY;AACpC,wBAAwB,WAAW;AACnC,wBAAwB,mBAAmB;AAC3C,wBAAwB,YAAY;AACpC,wBAAwB,eAAe;AACvC,wBAAwB,YAAY;AACpC,wBAAwB,gBAAgB;AACxC,wBAAwB,cAAc;AACtC,wBAAwB,iBAAiB;AACzC,wBAAwB,UAAU;AAClC,wBAAwB,aAAa;AACrC,wBAAwB,UAAU;AAClC,wBAAwB,eA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EAAE,sBAAsB,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC;AACxN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,cAAc,EAAE,eAAe,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,EAAE,EAAE,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"}
1
+ {"version":3,"file":"elite.framework-ng.ui.core-generic-search-advanced.mjs","sources":["../tmp-esm2022/generic-search-advanced/lib/generic-search-advanced-module.js","../tmp-esm2022/generic-search-advanced/lib/query-builder.service.js","../tmp-esm2022/generic-search-advanced/lib/generic-search-advanced.js","../tmp-esm2022/generic-search-advanced/lib/sort-builder.component.js","../tmp-esm2022/generic-search-advanced/lib/query-builder.component.js","../tmp-esm2022/generic-search-advanced/lib/tab-type.component.js","../tmp-esm2022/generic-search-advanced/lib/columns-builder.component.js","../tmp-esm2022/generic-search-advanced/lib/group-builder.component.js","../tmp-esm2022/generic-search-advanced/lib/group.component.js","../tmp-esm2022/generic-search-advanced/lib/formly-config.js","../tmp-esm2022/generic-search-advanced/elite.framework-ng.ui.core-generic-search-advanced.js"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport * as i0 from \"@angular/core\";\nexport class GenericSearchAdvancedModule {\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSearchAdvancedModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSearchAdvancedModule, imports: [CommonModule] });\n static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSearchAdvancedModule, imports: [CommonModule] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSearchAdvancedModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1zZWFyY2gtYWR2YW5jZWQtbW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy51aS5jb3JlL2dlbmVyaWMtc2VhcmNoLWFkdmFuY2VkL3NyYy9saWIvZ2VuZXJpYy1zZWFyY2gtYWR2YW5jZWQtbW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUsvQyxNQUFNLE9BQU8sMkJBQTJCO3VHQUEzQiwyQkFBMkI7d0dBQTNCLDJCQUEyQixZQUY1QixZQUFZO3dHQUVYLDJCQUEyQixZQUY1QixZQUFZOzsyRkFFWCwyQkFBMkI7a0JBSHZDLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUN4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgR2VuZXJpY1NlYXJjaEFkdmFuY2VkTW9kdWxlIHt9XG4iXX0=","// query-builder.service.ts\nimport { inject, Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { QueryParser } from '@elite.framework/ng.core/services';\nimport * as i0 from \"@angular/core\";\nexport class QueryBuilderService {\n translate = inject(TranslateService);\n // Field type configuration that matches QueryBuilderComponent\n fieldTypeConfig = {\n 'input': { defaultOperator: 'contains', defaultValue: '', operators: ['eq', 'ne', 'contains', 'startswith', 'endswith'] },\n 'number': { defaultOperator: 'eq', defaultValue: null, operators: ['eq', 'ne', 'gt', 'ge', 'lt', 'le'] },\n 'datepicker': { defaultOperator: 'eq', defaultValue: null, operators: ['eq', 'ne', 'gt', 'ge', 'lt', 'le'] },\n 'select': { defaultOperator: 'eq', defaultValue: '', operators: ['eq', 'ne', 'in', 'notin'] },\n 'checkbox': { defaultOperator: 'eq', defaultValue: null, operators: ['eq', 'ne'] },\n 'generic-selector': { defaultOperator: 'eq', defaultValue: null, operators: ['eq', 'ne', 'in', 'notin'] },\n 'switch': { defaultOperator: 'eq', defaultValue: null, operators: ['eq', 'ne'] },\n 'radio': { defaultOperator: 'eq', defaultValue: '', operators: ['eq', 'ne'] },\n 'textarea': { defaultOperator: 'contains', defaultValue: '', operators: ['eq', 'ne', 'contains', 'startswith', 'endswith'] }\n };\n buildQueryUIFields(fields, enableSelect, enableGroup) {\n return [\n {\n type: 'tab-type',\n props: {\n tabViewClass: 'advanced-query-tabs',\n scrollable: false,\n lazy: true,\n activeIndex: 0\n },\n fieldGroup: this.getQueryTabs(fields, enableSelect, enableGroup)\n }\n ];\n }\n getQueryTabs(fields, enableSelect, enableGroup) {\n const tabs = [\n {\n type: 'group',\n props: {\n tabLabel: 'FILTERS',\n // label: 'FILTERS',\n leftIcon: 'pi pi-filter',\n badge: (field) => {\n const fieldGroup = (field?.fieldGroup ?? [])[0];\n return (fieldGroup?.model?.advancedFilters ?? [])[0]?.conditions?.length || 0;\n },\n },\n fieldGroup: this.getFilterTabFields(fields)\n },\n {\n type: 'group',\n props: {\n tabLabel: 'SORTING',\n // label: 'SORTING',\n leftIcon: 'pi pi-sort-alt',\n badge: (field) => {\n const fieldGroup = (field?.fieldGroup ?? [])[0];\n return (fieldGroup?.model?.sorting ?? [])?.length || 0;\n },\n },\n fieldGroup: this.getSortingTabFields(fields)\n },\n enableGroup && {\n type: 'group',\n props: {\n tabLabel: 'GROUPING',\n // label: 'GROUPING',\n leftIcon: 'pi pi-table',\n badge: (field) => {\n const fieldGroup = (field?.fieldGroup ?? [])[0];\n return (fieldGroup?.model?.grouping ?? [])?.length || 0;\n },\n },\n fieldGroup: this.getGroupingTabFields(fields)\n },\n enableSelect && {\n type: 'group',\n props: {\n tabLabel: 'COLUMNS',\n // label: 'COLUMNS',\n leftIcon: 'pi pi-list',\n badge: (field) => {\n const fieldGroup = (field?.fieldGroup ?? [])[0];\n const columns = fieldGroup?.model?.columns;\n // Handle both array and object formats for columns\n if (Array.isArray(columns)) {\n return columns.filter((col) => col?.isVisible)?.length || 0;\n }\n else if (columns && typeof columns === 'object') {\n // If columns is an object, count the visible ones\n return Object.values(columns).filter((col) => col?.isVisible)?.length || 0;\n }\n return 0;\n },\n },\n fieldGroup: this.getColumnsTabFields(fields)\n },\n {\n type: 'group',\n props: {\n tabLabel: 'PAGINATION',\n // label: 'PAGINATION',\n leftIcon: 'pi pi-cog',\n badge: (field) => {\n return field?.model?.pagination && field?.model?.pagination?.top ? 1 : 0;\n },\n },\n fieldGroup: this.getPaginationTabFields()\n }\n ];\n return tabs.filter(Boolean);\n }\n getFilterTabFields(fields) {\n return [\n {\n key: 'advancedFilters',\n type: 'query-builder',\n props: {\n label: 'فلاتر متقدمة',\n description: 'أنشئ فلاتر معقدة باستخدام مشغلين منطقيين',\n fields: this.extractFilterableFields(fields)\n }\n }\n ];\n }\n getSortingTabFields(fields) {\n return [\n {\n key: 'sorting',\n type: 'sort-builder',\n props: {\n label: 'ترتيب النتائج',\n description: 'حدد أولوية وعرض ترتيب البيانات',\n fields: this.extractSortableFields(fields)\n }\n }\n ];\n }\n getGroupingTabFields(fields) {\n return [\n {\n key: 'grouping',\n type: 'group-builder',\n props: {\n label: 'تجميع البيانات',\n description: 'قم بتجميع البيانات حسب الحقول المطلوبة',\n fields: this.extractGroupableFields(fields),\n maxGroups: 3\n }\n }\n ];\n }\n getColumnsTabFields(fields) {\n return [\n {\n key: 'columns',\n type: 'columns-builder',\n props: {\n label: 'إدارة الأعمدة',\n description: 'اختر الحقول المراد عرضها وتخصيص التجميع',\n fields: this.extractSelectableFields(fields)\n }\n }\n ];\n }\n getPaginationTabFields() {\n return [\n {\n key: 'pagination',\n type: 'group',\n props: {\n label: '',\n description: '',\n collapsible: false,\n showFieldCount: true,\n variant: 'card'\n },\n fieldGroup: [\n {\n key: 'top',\n type: 'input',\n props: {\n type: 'number',\n label: 'الحد الأقصى للسجلات',\n min: 1,\n max: 1000,\n description: 'أقصى عدد للسجلات المراد عرضها'\n }\n },\n {\n key: 'skip',\n type: 'input',\n props: {\n type: 'number',\n label: 'تخطي السجلات',\n min: 0,\n description: 'عدد السجلات التي سيتم تخطيها'\n }\n },\n {\n key: 'includeCount',\n type: 'checkbox',\n props: {\n label: 'تضمين العدد الإجمالي',\n description: 'تضمين عدد السجلات الإجمالي في الاستجابة'\n }\n }\n ]\n }\n ];\n }\n extractFilterableFields(fields) {\n const filterableFields = [];\n this.traverseFields(fields, (field) => {\n if (field.key && field.props && ((field.props['filter'] && field.props['filter'].hidden == false) || !field.props['filter']) && !field.props?.hidden) {\n const fieldType = this.mapFieldType(field.type);\n const fieldConfig = this.fieldTypeConfig[fieldType] || this.fieldTypeConfig.input;\n filterableFields.push({\n key: field.props['entityKey'] ? field.props['entityKey'] : field.key,\n label: this.translate.instant(field.props.label || field.key),\n type: fieldType,\n props: { ...field.props },\n operators: fieldConfig.operators,\n defaultOperator: fieldConfig.defaultOperator,\n defaultValue: fieldConfig.defaultValue\n });\n }\n });\n return filterableFields;\n }\n extractSortableFields(fields) {\n const sortableFields = [];\n this.traverseFields(fields, (field) => {\n if (field.key && field.props && ((field.props['sort'] && field.props['sort'].hidden == false) || !field.props['sort']) && !field.props?.hidden) {\n sortableFields.push({\n key: field.props['entityKey'] ? field.props['entityKey'] : field.key,\n label: this.translate.instant(field.props.label || field.key)\n });\n }\n });\n return sortableFields;\n }\n extractGroupableFields(fields) {\n const groupableFields = [];\n this.traverseFields(fields, (field) => {\n if (field.key && field.props && ((field.props['group'] && field.props['group'].hidden == false) || !field.props['group']) && !field.props?.hidden) {\n groupableFields.push({\n key: field.props['entityKey'] ? field.props['entityKey'] : field.key,\n label: this.translate.instant(field.props.label || field.key),\n dataType: this.getDataType(field.type)\n });\n }\n });\n return groupableFields;\n }\n extractSelectableFields(fields) {\n const tempFields = [];\n this.traverseFields(fields, (field) => {\n if (field.key &&\n field.props &&\n // ((field.props['select'] && field.props['select'].hidden === false) || !field.props['select']) &&\n ((field.props['report'] && field.props['report'].hidden === false) || !field.props['report']) &&\n !field.props?.hidden) {\n const isNumeric = ['number', 'currency'].includes(field.type);\n const tableConfig = field.props['table'] ?? {};\n const mergedProps = { ...field.props, ...(tableConfig.props ?? {}) };\n const order = tableConfig.order ??\n tableConfig.props?.order ??\n mergedProps['order'] ??\n Number.MAX_SAFE_INTEGER;\n tempFields.push({\n key: field.props['entityKey'] ? field.props['entityKey'] : field.key,\n label: this.translate.instant(field.props.label || field.key),\n dataType: this.getDataType(field.type),\n isNumeric,\n defaultVisible: field.props['defaultVisible'] !== false,\n aggregatable: isNumeric && field.props['aggregatable'] !== false,\n order\n });\n }\n });\n return tempFields\n .sort((a, b) => a.order - b.order)\n .map(({ order, ...rest }) => rest); // remove order after sorting\n }\n traverseFields(fields, callback) {\n fields.forEach(field => {\n callback(field);\n if (field.fieldGroup) {\n this.traverseFields(field.fieldGroup, callback);\n }\n });\n }\n getAppliedFiltersCount(model) {\n const breakdown = {\n filters: 0,\n sorting: 0,\n grouping: 0,\n columns: 0,\n pagination: 0,\n expand: 0\n };\n // Advanced filters\n if (model?.advancedFilters && Array.isArray(model.advancedFilters)) {\n model.advancedFilters.forEach((filterGroup) => {\n if (filterGroup.conditions && Array.isArray(filterGroup.conditions)) {\n breakdown.filters += filterGroup.conditions.length;\n }\n });\n }\n // Sorting\n if (model?.sorting && Array.isArray(model.sorting)) {\n breakdown.sorting = model.sorting.length;\n }\n // Grouping\n if (model?.grouping && Array.isArray(model.grouping)) {\n breakdown.grouping = model.grouping.length;\n }\n // Columns\n if (model?.columns) {\n if (Array.isArray(model.columns)) {\n breakdown.columns = model.columns.filter((col) => col.isVisible).length;\n }\n else if (typeof model.columns === 'object') {\n breakdown.columns = Object.values(model.columns).filter((col) => col?.isVisible).length;\n }\n }\n // Pagination\n if (model?.pagination) {\n if (model.pagination.top)\n breakdown.pagination += 1;\n if (model.pagination.skip)\n breakdown.pagination += 1;\n if (model.pagination.includeCount)\n breakdown.pagination += 1;\n }\n // Expand\n if (model?.expand && Array.isArray(model.expand)) {\n breakdown.expand = model.expand.length;\n }\n return {\n total: Object.values(breakdown).reduce((sum, count) => sum + count, 0),\n breakdown\n };\n }\n mapFieldType(type) {\n const typeMap = {\n 'input': 'input',\n 'number': 'number',\n 'datepicker': 'datepicker',\n 'select': 'select',\n 'checkbox': 'checkbox',\n 'generic-selector': 'generic-selector',\n 'switch': 'switch',\n 'radio': 'radio',\n 'textarea': 'textarea',\n 'currency': 'number'\n };\n return typeMap[type || 'input'] || 'input';\n }\n getDataType(type) {\n const dataTypeMap = {\n 'input': 'string',\n 'number': 'number',\n 'datepicker': 'date',\n 'select': 'string',\n 'checkbox': 'boolean',\n 'generic-selector': 'string',\n 'switch': 'boolean',\n 'radio': 'string',\n 'textarea': 'string',\n 'currency': 'number'\n };\n return dataTypeMap[type || 'input'] || 'string';\n }\n getOperatorsForType(type) {\n const fieldType = this.mapFieldType(type);\n const config = this.fieldTypeConfig[fieldType];\n return config ? config.operators : ['eq', 'ne'];\n }\n // Enhanced OData methods with GroupBy and Select support\n buildODataFromQueryModel(model, originalFields) {\n const params = {\n filters: [],\n orderBy: [],\n groupBy: [],\n select: [],\n aggregates: [],\n expand: model.expand || [],\n includeCount: model.pagination?.includeCount || false\n };\n // Quick search\n if (model.filter) {\n const searchableFields = this.extractSelectableFields(originalFields); // TODO get all strings filters\n const quickSearchConditions = searchableFields.map(field => ({\n field: field.key,\n operator: 'contains',\n value: model.filter\n }));\n if (quickSearchConditions.length > 0) {\n params.filters.push({\n logicalOperator: 'or',\n conditions: quickSearchConditions\n });\n }\n }\n // Advanced filters\n if (model.advancedFilters && Array.isArray(model.advancedFilters)) {\n params.filters.push(...model.advancedFilters);\n }\n // Sorting\n if (model.sorting && Array.isArray(model.sorting)) {\n params.orderBy = model.sorting\n .filter((sort) => sort.field && sort.direction)\n .map((sort) => ({\n field: sort.field,\n direction: sort.direction\n }));\n }\n // Grouping\n if (model.grouping && Array.isArray(model.grouping)) {\n params.groupBy = model.grouping\n .filter((group) => group.field)\n .map((group, index) => ({\n propertyName: group.field,\n displayName: group.displayName || group.field,\n showTotal: group.showTotal !== false,\n order: index\n }));\n }\n // Columns/Select - Handle both array and object formats\n // extractSelectableFields\n if (model.columns) {\n let visibleColumns = [];\n // Handle array format: [{field: 'name', isVisible: true, ...}, ...]\n if (Array.isArray(model.columns)) {\n visibleColumns = model.columns.filter((col) => col.isVisible);\n }\n // Handle object format: {field1: {isVisible: true, displayName: 'Name', ...}, field2: {...}}\n else if (typeof model.columns === 'object') {\n visibleColumns = Object.entries(model.columns)\n .filter(([key, col]) => col.isVisible)\n .map(([key, col]) => ({\n field: key, // Use the object key as field name\n ...col // Spread the column properties\n }));\n }\n // Process visible columns for select and aggregates\n if (visibleColumns.length > 0) {\n params.select = visibleColumns.map((col, index) => ({\n propertyName: col.field || col.key, // Support both 'field' and 'key' properties\n displayName: col.displayName || col.field || col.key || col.label,\n aggregateFunction: col.aggregateFunction,\n isVisible: true,\n order: index\n }));\n // Extract aggregates from columns with aggregate functions\n const aggregateColumns = visibleColumns.filter((col) => col.aggregateFunction);\n params.aggregates = aggregateColumns.map((col) => ({\n propertyName: col.field || col.key,\n aggregateFunction: col.aggregateFunction,\n alias: `${col.aggregateFunction}_${col.field || col.key}`\n }));\n }\n }\n else {\n // Fallback: auto-generate from formly fields\n const selectableFields = this.extractSelectableFields(originalFields);\n // Ensure a column for the ID field exists\n // if (!selectableFields.some(f => f.key === this.idField)) {\n // selectableFields.unshift({\n // key: this.idField,\n // label: this.translate.instant(this.idField),\n // dataType: 'number', // or the correct type\n // isNumeric: false,\n // defaultVisible: true,\n // aggregatable: false\n // });\n // }\n params.select = selectableFields.map((f, i) => ({\n propertyName: f.key,\n displayName: f.label,\n isVisible: f.defaultVisible,\n order: i\n }));\n params.aggregates = selectableFields\n .filter(f => f.aggregatable)\n .map(f => ({\n propertyName: f.key,\n aggregateFunction: 'sum',\n alias: `sum_${f.key}`\n }));\n }\n // Pagination\n if (model.pagination) {\n if (model.pagination.top) {\n params.top = Number(model.pagination.top);\n }\n if (model.pagination.skip) {\n params.skip = Number(model.pagination.skip);\n }\n if (model.pagination.includeCount !== undefined) {\n params.includeCount = model.pagination.includeCount;\n }\n }\n return params;\n }\n toODataQueryString(params) {\n return QueryParser.toString(params);\n }\n parseODataQuery(queryString) {\n return QueryParser.parse(queryString);\n }\n // Helper method to get field configuration\n getFieldConfig(fieldKey, fields) {\n return fields.find(f => f.key === fieldKey);\n }\n // Helper to get available aggregate functions for numeric fields\n getAggregateFunctions() {\n return [\n { label: 'مجموع', value: 'sum' },\n { label: 'متوسط', value: 'avg' },\n { label: 'عدد', value: 'count' },\n { label: 'الحد الأدنى', value: 'min' },\n { label: 'الحد الأقصى', value: 'max' }\n ];\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: QueryBuilderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: QueryBuilderService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: QueryBuilderService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktYnVpbGRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy51aS5jb3JlL2dlbmVyaWMtc2VhcmNoLWFkdmFuY2VkL3NyYy9saWIvcXVlcnktYnVpbGRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJCQUEyQjtBQUMzQixPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUduRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQW9DLFdBQVcsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOztBQUtsRyxNQUFNLE9BQU8sbUJBQW1CO0lBQzlCLFNBQVMsR0FBcUIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFFdkQsOERBQThEO0lBQ3RELGVBQWUsR0FBRztRQUN4QixPQUFPLEVBQUUsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFVBQVUsQ0FBQyxFQUFFO1FBQ3pILFFBQVEsRUFBRSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFO1FBQ3hHLFlBQVksRUFBRSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFO1FBQzVHLFFBQVEsRUFBRSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsWUFBWSxF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O1FBQ2pDLE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBR0QsMkNBQTJDO0lBQzNDLGNBQWMsQ0FBQyxRQUFnQixFQUFFLE1BQWE7UUFDNUMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsaUVBQWlFO0lBQ2pFLHFCQUFxQjtRQUNuQixPQUFPO1lBQ0wsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDaEMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDaEMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7WUFDaEMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDdEMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7U0FDdkMsQ0FBQztJQUNKLENBQUM7dUdBamtCVSxtQkFBbUI7MkdBQW5CLG1CQUFtQixjQUZsQixNQUFNOzsyRkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiLy8gcXVlcnktYnVpbGRlci5zZXJ2aWNlLnRzXHJcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtbHlGaWVsZENvbmZpZyB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xyXG5pbXBvcnQgeyBRdWVyeUJ1aWxkZXJGaWVsZCwgU29ydEJ1aWxkZXJGaWVsZCwgR3JvdXBCeUZpZWxkLCBTZWxlY3RGaWVsZCB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgRmlsdGVyQ29uZGl0aW9uLCBRdWVyeVBhcmFtZXRlcnMsIFF1ZXJ5UGFyc2VyIH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL3NlcnZpY2VzJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFF1ZXJ5QnVpbGRlclNlcnZpY2Uge1xyXG4gIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcclxuXHJcbiAgLy8gRmllbGQgdHlwZSBjb25maWd1cmF0aW9uIHRoYXQgbWF0Y2hlcyBRdWVyeUJ1aWxkZXJDb21wb25lbnRcclxuICBwcml2YXRlIGZpZWxkVHlwZUNvbmZpZyA9IHtcclxuICAgICdpbnB1dCc6IHsgZGVmYXVsdE9wZXJhdG9yOiAnY29udGFpbnMnLCBkZWZhdWx0VmFsdWU6ICcnLCBvcGVyYXRvcnM6IFsnZXEnLCAnbmUnLCAnY29udGFpbnMnLCAnc3RhcnRzd2l0aCcsICdlbmRzd2l0aCddIH0sXHJcbiAgICAnbnVtYmVyJzogeyBkZWZhdWx0T3BlcmF0b3I6ICdlcScsIGRlZmF1bHRWYWx1ZTogbnVsbCwgb3BlcmF0b3JzOiBbJ2VxJywgJ25lJywgJ2d0JywgJ2dlJywgJ2x0JywgJ2xlJ10gfSxcclxuICAgICdkYXRlcGlja2VyJzogeyBkZWZhdWx0T3BlcmF0b3I6ICdlcScsIGRlZmF1bHRWYWx1ZTogbnVsbCwgb3BlcmF0b3JzOiBbJ2VxJywgJ25lJywgJ2d0JywgJ2dlJywgJ2x0JywgJ2xlJ10gfSxcclxuICAgICdzZWxlY3QnOiB7IGRlZmF1bHRPcGVyYXRvcjogJ2VxJywgZGVmYXVsdFZhbHVlOiAnJywgb3BlcmF0b3JzOiBbJ2VxJywgJ25lJywgJ2luJywgJ25vdGluJ10gfSxcclxuICAgICdjaGVja2JveCc6IHsgZGVmYXVsdE9wZXJhdG9yOiAnZXEnLCBkZWZhdWx0VmFsdWU6IG51bGwsIG9wZXJhdG9yczogWydlcScsICduZSddIH0sXHJcbiAgICAnZ2VuZXJpYy1zZWxlY3Rvcic6IHsgZGVmYXVsdE9wZXJhdG9yOiAnZXEnLCBkZWZhdWx0VmFsdWU6IG51bGwsIG9wZXJhdG9yczogWydlcScsICduZScsICdpbicsICdub3RpbiddIH0sXHJcbiAgICAnc3dpdGNoJzogeyBkZWZhdWx0T3BlcmF0b3I6ICdlcScsIGRlZmF1bHRWYWx1ZTogbnVsbCwgb3BlcmF0b3JzOiBbJ2VxJywgJ25lJ10gfSxcclxuICAgICdyYWRpbyc6IHsgZGVmYXVsdE9wZXJhdG9yOiAnZXEnLCBkZWZhdWx0VmFsdWU6ICcnLCBvcGVyYXRvcnM6IFsnZXEnLCAnbmUnXSB9LFxyXG4gICAgJ3RleHRhcmVhJzogeyBkZWZhdWx0T3BlcmF0b3I6ICdjb250YWlucycsIGRlZmF1bHRWYWx1ZTogJycsIG9wZXJhdG9yczogWydlcScsICduZScsICdjb250YWlucycsICdzdGFydHN3aXRoJywgJ2VuZHN3aXRoJ10gfVxyXG4gIH07XHJcblxyXG4gIGJ1aWxkUXVlcnlVSUZpZWxkcyhmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10sZW5hYmxlU2VsZWN0OmJvb2xlYW4sZW5hYmxlR3JvdXA6Ym9vbGVhbik6IEZvcm1seUZpZWxkQ29uZmlnW10ge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAge1xyXG4gICAgICAgIHR5cGU6ICd0YWItdHlwZScsXHJcbiAgICAgICAgcHJvcHM6IHtcclxuICAgICAgICAgIHRhYlZpZXdDbGFzczogJ2FkdmFuY2VkLXF1ZXJ5LXRhYnMnLFxyXG4gICAgICAgICAgc2Nyb2xsYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICBsYXp5OiB0cnVlLFxyXG4gICAgICAgICAgYWN0aXZlSW5kZXg6IDBcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZpZWxkR3JvdXA6IHRoaXMuZ2V0UXVlcnlUYWJzKGZpZWxkcyxlbmFibGVTZWxlY3QsZW5hYmxlR3JvdXApXHJcbiAgICAgIH1cclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFF1ZXJ5VGFicyhmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10sZW5hYmxlU2VsZWN0OmJvb2xlYW4sZW5hYmxlR3JvdXA6Ym9vbGVhbik6IEZvcm1seUZpZWxkQ29uZmlnW10ge1xyXG4gICAgIGNvbnN0IHRhYnM6IChGb3JtbHlGaWVsZENvbmZpZyB8IGZhbHNlKVtdID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgdHlwZTogJ2dyb3VwJyxcclxuICAgICAgICBwcm9wczoge1xyXG4gICAgICAgICAgdGFiTGFiZWw6ICdGSUxURVJTJyxcclxuICAgICAgICAgIC8vIGxhYmVsOiAnRklMVEVSUycsXHJcbiAgICAgICAgICBsZWZ0SWNvbjogJ3BpIHBpLWZpbHRlcicsXHJcbiAgICAgICAgICBiYWRnZTogKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZykgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmaWVsZEdyb3VwID0gKGZpZWxkPy5maWVsZEdyb3VwID8/IFtdKVswXSBhcyBhbnk7XHJcbiAgICAgICAgICAgIHJldHVybiAoZmllbGRHcm91cD8ubW9kZWw/LmFkdmFuY2VkRmlsdGVycyA/PyBbXSlbMF0/LmNvbmRpdGlvbnM/Lmxlbmd0aCB8fCAwO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZpZWxkR3JvdXA6IHRoaXMuZ2V0RmlsdGVyVGFiRmllbGRzKGZpZWxkcylcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHR5cGU6ICdncm91cCcsXHJcbiAgICAgICAgcHJvcHM6IHtcclxuICAgICAgICAgIHRhYkxhYmVsOiAnU09SVElORycsXHJcbiAgICAgICAgICAvLyBsYWJlbDogJ1NPUlRJTkcnLFxyXG4gICAgICAgICAgbGVmdEljb246ICdwaSBwaS1zb3J0LWFsdCcsXHJcbiAgICAgICAgICBiYWRnZTogKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZykgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmaWVsZEdyb3VwID0gKGZpZWxkPy5maWVsZEdyb3VwID8/IFtdKVswXSBhcyBhbnk7XHJcbiAgICAgICAgICAgIHJldHVybiAoZmllbGRHcm91cD8ubW9kZWw/LnNvcnRpbmcgPz8gW10pPy5sZW5ndGggfHwgMDtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICBmaWVsZEdyb3VwOiB0aGlzLmdldFNvcnRpbmdUYWJGaWVsZHMoZmllbGRzKVxyXG4gICAgICB9LFxyXG4gICAgICBlbmFibGVHcm91cCAmJiB7XHJcbiAgICAgICAgdHlwZTogJ2dyb3VwJyxcclxuICAgICAgICBwcm9wczoge1xyXG4gICAgICAgICAgdGFiTGFiZWw6ICdHUk9VUElORycsXHJcbiAgICAgICAgICAvLyBsYWJlbDogJ0dST1VQSU5HJyxcclxuICAgICAgICAgIGxlZnRJY29uOiAncGkgcGktdGFibGUnLFxyXG4gICAgICAgICAgYmFkZ2U6IChmaWVsZDogRm9ybWx5RmllbGRDb25maWcpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZmllbGRHcm91cCA9IChmaWVsZD8uZmllbGRHcm91cCA/PyBbXSlbMF0gYXMgYW55O1xyXG4gICAgICAgICAgICByZXR1cm4gKGZpZWxkR3JvdXA/Lm1vZGVsPy5ncm91cGluZyA/PyBbXSk/Lmxlbmd0aCB8fCAwO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZpZWxkR3JvdXA6IHRoaXMuZ2V0R3JvdXBpbmdUYWJGaWVsZHMoZmllbGRzKVxyXG4gICAgICB9LFxyXG4gICAgICBlbmFibGVTZWxlY3QgJiYge1xyXG4gICAgICAgIHR5cGU6ICdncm91cCcsXHJcbiAgICAgICAgcHJvcHM6IHtcclxuICAgICAgICAgIHRhYkxhYmVsOiAnQ09MVU1OUycsXHJcbiAgICAgICAgICAvLyBsYWJlbDogJ0NPTFVNTlMnLFxyXG4gICAgICAgICAgbGVmdEljb246ICdwaSBwaS1saXN0JyxcclxuICAgICAgICAgIGJhZGdlOiAoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKSA9PiB7XHJcbiAgICAgICAgICAgICBjb25zdCBmaWVsZEdyb3VwID0gKGZpZWxkPy5maWVsZEdyb3VwID8/IFtdKVswXSBhcyBhbnk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbnMgPSBmaWVsZEdyb3VwPy5tb2RlbD8uY29sdW1ucztcclxuXHJcbiAgICAgICAgICAgIC8vIEhhbmRsZSBib3RoIGFycmF5IGFuZCBvYmplY3QgZm9ybWF0cyBmb3IgY29sdW1uc1xyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjb2x1bW5zKSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBjb2x1bW5zLmZpbHRlcigoY29sOiBhbnkpID0+IGNvbD8uaXNWaXNpYmxlKT8ubGVuZ3RoIHx8IDA7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1ucyAmJiB0eXBlb2YgY29sdW1ucyA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgICAvLyBJZiBjb2x1bW5zIGlzIGFuIG9iamVjdCwgY291bnQgdGhlIHZpc2libGUgb25lc1xyXG4gICAgICAgICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKGNvbHVtbnMpLmZpbHRlcigoY29sOiBhbnkpID0+IGNvbD8uaXNWaXNpYmxlKT8ubGVuZ3RoIHx8IDA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZpZWxkR3JvdXA6IHRoaXMuZ2V0Q29sdW1uc1RhYkZpZWxkcyhmaWVsZHMpXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICB0eXBlOiAnZ3JvdXAnLFxyXG4gICAgICAgIHByb3BzOiB7XHJcbiAgICAgICAgICB0YWJMYWJlbDogJ1BBR0lOQVRJT04nLFxyXG4gICAgICAgICAgLy8gbGFiZWw6ICdQQUdJTkFUSU9OJyxcclxuICAgICAgICAgIGxlZnRJY29uOiAncGkgcGktY29nJyxcclxuICAgICAgICAgIGJhZGdlOiAoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBmaWVsZD8ubW9kZWw/LnBhZ2luYXRpb24gJiYgZmllbGQ/Lm1vZGVsPy5wYWdpbmF0aW9uPy50b3AgPyAxIDogMDtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICBmaWVsZEdyb3VwOiB0aGlzLmdldFBhZ2luYXRpb25UYWJGaWVsZHMoKVxyXG4gICAgICB9XHJcbiAgICBdO1xyXG4gICAgcmV0dXJuIHRhYnMuZmlsdGVyKEJvb2xlYW4pIGFzIEZvcm1seUZpZWxkQ29uZmlnW107XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEZpbHRlclRhYkZpZWxkcyhmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10pOiBGb3JtbHlGaWVsZENvbmZpZ1tdIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6ICdhZHZhbmNlZEZpbHRlcnMnLFxyXG4gICAgICAgIHR5cGU6ICdxdWVyeS1idWlsZGVyJyxcclxuICAgICAgICBwcm9wczoge1xyXG4gICAgICAgICAgbGFiZWw6ICfZgdmE2KfYqtixINmF2KrZgtiv2YXYqScsXHJcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ9ij2YbYtNimINmB2YTYp9iq2LEg2YXYudmC2K/YqSDYqNin2LPYqtiu2K/Yp9mFINmF2LTYutmE2YrZhiDZhdmG2LfZgtmK2YrZhicsXHJcbiAgICAgICAgICBmaWVsZHM6IHRoaXMuZXh0cmFjdEZpbHRlcmFibGVGaWVsZHMoZmllbGRzKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0U29ydGluZ1RhYkZpZWxkcyhmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10pOiBGb3JtbHlGaWVsZENvbmZpZ1tdIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6ICdzb3J0aW5nJyxcclxuICAgICAgICB0eXBlOiAnc29ydC1idWlsZGVyJyxcclxuICAgICAgICBwcm9wczoge1xyXG4gICAgICAgICAgbGFiZWw6ICfYqtix2KrZitioINin2YTZhtiq2KfYptisJyxcclxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAn2K3Yr9ivINij2YjZhNmI2YrYqSDZiNi52LHYtiDYqtix2KrZitioINin2YTYqNmK2KfZhtin2KonLFxyXG4gICAgICAgICAgZmllbGRzOiB0aGlzLmV4dHJhY3RTb3J0YWJsZUZpZWxkcyhmaWVsZHMpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRHcm91cGluZ1RhYkZpZWxkcyhmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10pOiBGb3JtbHlGaWVsZENvbmZpZ1tdIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6ICdncm91cGluZycsXHJcbiAgICAgICAgdHlwZTogJ2dyb3VwLWJ1aWxkZXInLFxyXG4gICAgICAgIHByb3BzOiB7XHJcbiAgICAgICAgICBsYWJlbDogJ9iq2KzZhdmK2Lkg2KfZhNio2YrYp9mG2KfYqicsXHJcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ9mC2YUg2KjYqtis2YXZiti5INin2YTYqNmK2KfZhtin2Kog2K3Ys9ioINin2YTYrdmC2YjZhCDYp9mE2YXYt9mE2YjYqNipJyxcclxuICAgICAgICAgIGZpZWxkczogdGhpcy5leHRyYWN0R3JvdXBhYmxlRmllbGRzKGZpZWxkcyksXHJcbiAgICAgICAgICBtYXhHcm91cHM6IDNcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENvbHVtbnNUYWJGaWVsZHMoZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdKTogRm9ybWx5RmllbGRDb25maWdbXSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiAnY29sdW1ucycsXHJcbiAgICAgICAgdHlwZTogJ2NvbHVtbnMtYnVpbGRlcicsXHJcbiAgICAgICAgcHJvcHM6IHtcclxuICAgICAgICAgIGxhYmVsOiAn2KXYr9in2LHYqSDYp9mE2KPYudmF2K/YqScsXHJcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ9in2K7YqtixINin2YTYrdmC2YjZhCDYp9mE2YXYsdin2K8g2LnYsdi22YfYpyDZiNiq2K7YtdmK2LUg2KfZhNiq2KzZhdmK2LknLFxyXG4gICAgICAgICAgZmllbGRzOiB0aGlzLmV4dHJhY3RTZWxlY3RhYmxlRmllbGRzKGZpZWxkcylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFBhZ2luYXRpb25UYWJGaWVsZHMoKTogRm9ybWx5RmllbGRDb25maWdbXSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiAncGFnaW5hdGlvbicsXHJcbiAgICAgICAgdHlwZTogJ2dyb3VwJyxcclxuICAgICAgICBwcm9wczoge1xyXG4gICAgICAgICAgbGFiZWw6ICcnLFxyXG4gICAgICAgICAgZGVzY3JpcHRpb246ICcnLFxyXG4gICAgICAgICAgY29sbGFwc2libGU6IGZhbHNlLFxyXG4gICAgICAgICAgc2hvd0ZpZWxkQ291bnQ6IHRydWUsXHJcbiAgICAgICAgICB2YXJpYW50OiAnY2FyZCdcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZpZWxkR3JvdXA6IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAga2V5OiAndG9wJyxcclxuICAgICAgICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgICAgICAgcHJvcHM6IHtcclxuICAgICAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcclxuICAgICAgICAgICAgICBsYWJlbDogJ9in2YTYrdivINin2YTYo9mC2LXZiSDZhNmE2LPYrNmE2KfYqicsXHJcbiAgICAgICAgICAgICAgbWluOiAxLFxyXG4gICAgICAgICAgICAgIG1heDogMTAwMCxcclxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ9ij2YLYtdmJINi52K/YryDZhNmE2LPYrNmE2KfYqiDYp9mE2YXYsdin2K8g2LnYsdi22YfYpydcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAga2V5OiAnc2tpcCcsXHJcbiAgICAgICAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgICAgICAgIHByb3BzOiB7XHJcbiAgICAgICAgICAgICAgdHlwZTogJ251bWJlcicsXHJcbiAgICAgICAgICAgICAgbGFiZWw6ICfYqtiu2LfZiiDYp9mE2LPYrNmE2KfYqicsXHJcbiAgICAgICAgICAgICAgbWluOiAwLFxyXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAn2LnYr9ivINin2YTYs9is2YTYp9iqINin2YTYqtmKINiz2YrYqtmFINiq2K7Yt9mK2YfYpydcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAga2V5OiAnaW5jbHVkZUNvdW50JyxcclxuICAgICAgICAgICAgdHlwZTogJ2NoZWNrYm94JyxcclxuICAgICAgICAgICAgcHJvcHM6IHtcclxuICAgICAgICAgICAgICBsYWJlbDogJ9iq2LbZhdmK2YYg2KfZhNi52K/YryDYp9mE2KXYrNmF2KfZhNmKJyxcclxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ9iq2LbZhdmK2YYg2LnYr9ivINin2YTYs9is2YTYp9iqINin2YTYpdis2YXYp9mE2Yog2YHZiiDYp9mE2KfYs9iq2KzYp9io2KknXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICBdXHJcbiAgICAgIH1cclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4dHJhY3RGaWx0ZXJhYmxlRmllbGRzKGZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSk6IFF1ZXJ5QnVpbGRlckZpZWxkW10ge1xyXG4gICAgY29uc3QgZmlsdGVyYWJsZUZpZWxkczogUXVlcnlCdWlsZGVyRmllbGRbXSA9IFtdO1xyXG5cclxuICAgIHRoaXMudHJhdmVyc2VGaWVsZHMoZmllbGRzLCAoZmllbGQpID0+IHtcclxuICAgICAgaWYgKGZpZWxkLmtleSAmJiBmaWVsZC5wcm9wcyAmJiAoKGZpZWxkLnByb3BzWydmaWx0ZXInXSAmJiBmaWVsZC5wcm9wc1snZmlsdGVyJ10uaGlkZGVuID09IGZhbHNlKSB8fCAhZmllbGQucHJvcHNbJ2ZpbHRlciddKSAmJiAhZmllbGQucHJvcHM/LmhpZGRlbikge1xyXG4gICAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IHRoaXMubWFwRmllbGRUeXBlKGZpZWxkLnR5cGUgYXMgc3RyaW5nKTtcclxuICAgICAgICBjb25zdCBmaWVsZENvbmZpZyA9IHRoaXMuZmllbGRUeXBlQ29uZmlnW2ZpZWxkVHlwZSBhcyBrZXlvZiB0eXBlb2YgdGhpcy5maWVsZFR5cGVDb25maWddIHx8IHRoaXMuZmllbGRUeXBlQ29uZmlnLmlucHV0O1xyXG5cclxuICAgICAgICBmaWx0ZXJhYmxlRmllbGRzLnB1c2goe1xyXG4gICAgICAgICAga2V5OiBmaWVsZC5wcm9wc1snZW50aXR5S2V5J10gPyBmaWVsZC5wcm9wc1snZW50aXR5S2V5J10gYXMgc3RyaW5nIDogZmllbGQua2V5IGFzIHN0cmluZyxcclxuICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGZpZWxkLnByb3BzLmxhYmVsIHx8IChmaWVsZC5rZXkgYXMgc3RyaW5nKSksXHJcbiAgICAgICAgICB0eXBlOiBmaWVsZFR5cGUsXHJcbiAgICAgICAgICBwcm9wczogeyAuLi5maWVsZC5wcm9wcyB9LFxyXG4gICAgICAgICAgb3BlcmF0b3JzOiBmaWVsZENvbmZpZy5vcGVyYXRvcnMsXHJcbiAgICAgICAgICBkZWZhdWx0T3BlcmF0b3I6IGZpZWxkQ29uZmlnLmRlZmF1bHRPcGVyYXRvcixcclxuICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZmllbGRDb25maWcuZGVmYXVsdFZhbHVlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBmaWx0ZXJhYmxlRmllbGRzO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgZXh0cmFjdFNvcnRhYmxlRmllbGRzKGZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSk6IFNvcnRCdWlsZGVyRmllbGRbXSB7XHJcbiAgICBjb25zdCBzb3J0YWJsZUZpZWxkczogU29ydEJ1aWxkZXJGaWVsZFtdID0gW107XHJcblxyXG4gICAgdGhpcy50cmF2ZXJzZUZpZWxkcyhmaWVsZHMsIChmaWVsZCkgPT4ge1xyXG4gICAgICBpZiAoZmllbGQua2V5ICYmIGZpZWxkLnByb3BzICYmICgoZmllbGQucHJvcHNbJ3NvcnQnXSAmJiBmaWVsZC5wcm9wc1snc29ydCddLmhpZGRlbiA9PSBmYWxzZSkgfHwgIWZpZWxkLnByb3BzWydzb3J0J10pJiYgIWZpZWxkLnByb3BzPy5oaWRkZW4pIHtcclxuICAgICAgICBzb3J0YWJsZUZpZWxkcy5wdXNoKHtcclxuICAgICAgICAgIGtleTogZmllbGQucHJvcHNbJ2VudGl0eUtleSddID8gZmllbGQucHJvcHNbJ2VudGl0eUtleSddIGFzIHN0cmluZyA6IGZpZWxkLmtleSBhcyBzdHJpbmcsXHJcbiAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChmaWVsZC5wcm9wcy5sYWJlbCB8fCBmaWVsZC5rZXkgYXMgc3RyaW5nKVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gc29ydGFibGVGaWVsZHM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4dHJhY3RHcm91cGFibGVGaWVsZHMoZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdKTogR3JvdXBCeUZpZWxkW10ge1xyXG4gICAgY29uc3QgZ3JvdXBhYmxlRmllbGRzOiBHcm91cEJ5RmllbGRbXSA9IFtdO1xyXG5cclxuICAgIHRoaXMudHJhdmVyc2VGaWVsZHMoZmllbGRzLCAoZmllbGQpID0+IHtcclxuICAgICAgaWYgKGZpZWxkLmtleSAmJiBmaWVsZC5wcm9wcyAmJiAoKGZpZWxkLnByb3BzWydncm91cCddICYmIGZpZWxkLnByb3BzWydncm91cCddLmhpZGRlbiA9PSBmYWxzZSkgfHwgIWZpZWxkLnByb3BzWydncm91cCddKSAmJiAhZmllbGQucHJvcHM/LmhpZGRlbikge1xyXG4gICAgICAgIGdyb3VwYWJsZUZpZWxkcy5wdXNoKHtcclxuICAgICAgICAgIGtleTogZmllbGQucHJvcHNbJ2VudGl0eUtleSddID8gZmllbGQucHJvcHNbJ2VudGl0eUtleSddIGFzIHN0cmluZyA6IGZpZWxkLmtleSBhcyBzdHJpbmcsXHJcbiAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChmaWVsZC5wcm9wcy5sYWJlbCB8fCBmaWVsZC5rZXkgYXMgc3RyaW5nKSxcclxuICAgICAgICAgIGRhdGFUeXBlOiB0aGlzLmdldERhdGFUeXBlKGZpZWxkLnR5cGUgYXMgc3RyaW5nKVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gZ3JvdXBhYmxlRmllbGRzO1xyXG4gIH1cclxuXHJcbnByaXZhdGUgZXh0cmFjdFNlbGVjdGFibGVGaWVsZHMoZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdKTogU2VsZWN0RmllbGRbXSB7XHJcbiAgY29uc3QgdGVtcEZpZWxkczogKFNlbGVjdEZpZWxkICYgeyBvcmRlcjogbnVtYmVyIH0pW10gPSBbXTtcclxuXHJcbiAgdGhpcy50cmF2ZXJzZUZpZWxkcyhmaWVsZHMsIChmaWVsZCkgPT4ge1xyXG4gICAgaWYgKFxyXG4gICAgICBmaWVsZC5rZXkgJiZcclxuICAgICAgZmllbGQucHJvcHMgJiZcclxuICAgICAgLy8gKChmaWVsZC5wcm9wc1snc2VsZWN0J10gJiYgZmllbGQucHJvcHNbJ3NlbGVjdCddLmhpZGRlbiA9PT0gZmFsc2UpIHx8ICFmaWVsZC5wcm9wc1snc2VsZWN0J10pICYmXHJcbiAgICAgICgoZmllbGQucHJvcHNbJ3JlcG9ydCddICYmIGZpZWxkLnByb3BzWydyZXBvcnQnXS5oaWRkZW4gPT09IGZhbHNlKSB8fCAhZmllbGQucHJvcHNbJ3JlcG9ydCddKSAmJlxyXG4gICAgICAhZmllbGQucHJvcHM/LmhpZGRlblxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnN0IGlzTnVtZXJpYyA9IFsnbnVtYmVyJywgJ2N1cnJlbmN5J10uaW5jbHVkZXMoZmllbGQudHlwZSBhcyBzdHJpbmcpO1xyXG5cclxuICAgICAgY29uc3QgdGFibGVDb25maWcgPSBmaWVsZC5wcm9wc1sndGFibGUnXSA/PyB7fTtcclxuICAgICAgY29uc3QgbWVyZ2VkUHJvcHMgPSB7IC4uLmZpZWxkLnByb3BzLCAuLi4odGFibGVDb25maWcucHJvcHMgPz8ge30pIH07XHJcbiAgICAgIGNvbnN0IG9yZGVyOiBudW1iZXIgPVxyXG4gICAgICAgICh0YWJsZUNvbmZpZy5vcmRlciBhcyBudW1iZXIgfCB1bmRlZmluZWQpID8/XHJcbiAgICAgICAgKHRhYmxlQ29uZmlnLnByb3BzPy5vcmRlciBhcyBudW1iZXIgfCB1bmRlZmluZWQpID8/XHJcbiAgICAgICAgKG1lcmdlZFByb3BzWydvcmRlciddIGFzIG51bWJlciB8IHVuZGVmaW5lZCkgPz9cclxuICAgICAgICBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcclxuXHJcbiAgICAgIHRlbXBGaWVsZHMucHVzaCh7XHJcbiAgICAgICAga2V5OiBmaWVsZC5wcm9wc1snZW50aXR5S2V5J10gPyAoZmllbGQucHJvcHNbJ2VudGl0eUtleSddIGFzIHN0cmluZykgOiAoZmllbGQua2V5IGFzIHN0cmluZyksXHJcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoZmllbGQucHJvcHMubGFiZWwgfHwgKGZpZWxkLmtleSBhcyBzdHJpbmcpKSxcclxuICAgICAgICBkYXRhVHlwZTogdGhpcy5nZXREYXRhVHlwZShmaWVsZC50eXBlIGFzIHN0cmluZyksXHJcbiAgICAgICAgaXNOdW1lcmljLFxyXG4gICAgICAgIGRlZmF1bHRWaXNpYmxlOiBmaWVsZC5wcm9wc1snZGVmYXVsdFZpc2libGUnXSAhPT0gZmFsc2UsXHJcbiAgICAgICAgYWdncmVnYXRhYmxlOiBpc051bWVyaWMgJiYgZmllbGQucHJvcHNbJ2FnZ3JlZ2F0YWJsZSddICE9PSBmYWxzZSxcclxuICAgICAgICBvcmRlclxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIHRlbXBGaWVsZHNcclxuICAgIC5zb3J0KChhLCBiKSA9PiBhLm9yZGVyIC0gYi5vcmRlcilcclxuICAgIC5tYXAoKHsgb3JkZXIsIC4uLnJlc3QgfSkgPT4gcmVzdCBhcyBTZWxlY3RGaWVsZCk7IC8vIHJlbW92ZSBvcmRlciBhZnRlciBzb3J0aW5nXHJcbn1cclxuXHJcbiAgcHJpdmF0ZSB0cmF2ZXJzZUZpZWxkcyhmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10sIGNhbGxiYWNrOiAoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICBmaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgIGNhbGxiYWNrKGZpZWxkKTtcclxuICAgICAgaWYgKGZpZWxkLmZpZWxkR3JvdXApIHtcclxuICAgICAgICB0aGlzLnRyYXZlcnNlRmllbGRzKGZpZWxkLmZpZWxkR3JvdXAsIGNhbGxiYWNrKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5nZXRBcHBsaWVkRmlsdGVyc0NvdW50KG1vZGVsOiBhbnkpOiB7IHRvdGFsOiBudW1iZXI7IGJyZWFrZG93bjogYW55IH0ge1xyXG4gIGNvbnN0IGJyZWFrZG93biA9IHtcclxuICAgIGZpbHRlcnM6IDAsXHJcbiAgICBzb3J0aW5nOiAwLFxyXG4gICAgZ3JvdXBpbmc6IDAsXHJcbiAgICBjb2x1bW5zOiAwLFxyXG4gICAgcGFnaW5hdGlvbjogMCxcclxuICAgIGV4cGFuZDogMFxyXG4gIH07XHJcblxyXG4gIC8vIEFkdmFuY2VkIGZpbHRlcnNcclxuICBpZiAobW9kZWw/LmFkdmFuY2VkRmlsdGVycyAmJiBBcnJheS5pc0FycmF5KG1vZGVsLmFkdmFuY2VkRmlsdGVycykpIHtcclxuICAgIG1vZGVsLmFkdmFuY2VkRmlsdGVycy5mb3JFYWNoKChmaWx0ZXJHcm91cDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChmaWx0ZXJHcm91cC5jb25kaXRpb25zICYmIEFycmF5LmlzQXJyYXkoZmlsdGVyR3JvdXAuY29uZGl0aW9ucykpIHtcclxuICAgICAgICBicmVha2Rvd24uZmlsdGVycyArPSBmaWx0ZXJHcm91cC5jb25kaXRpb25zLmxlbmd0aDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBTb3J0aW5nXHJcbiAgaWYgKG1vZGVsPy5zb3J0aW5nICYmIEFycmF5LmlzQXJyYXkobW9kZWwuc29ydGluZykpIHtcclxuICAgIGJyZWFrZG93bi5zb3J0aW5nID0gbW9kZWwuc29ydGluZy5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICAvLyBHcm91cGluZ1xyXG4gIGlmIChtb2RlbD8uZ3JvdXBpbmcgJiYgQXJyYXkuaXNBcnJheShtb2RlbC5ncm91cGluZykpIHtcclxuICAgIGJyZWFrZG93bi5ncm91cGluZyA9IG1vZGVsLmdyb3VwaW5nLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIC8vIENvbHVtbnNcclxuICBpZiAobW9kZWw/LmNvbHVtbnMpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KG1vZGVsLmNvbHVtbnMpKSB7XHJcbiAgICAgIGJyZWFrZG93bi5jb2x1bW5zID0gbW9kZWwuY29sdW1ucy5maWx0ZXIoKGNvbDogYW55KSA9PiBjb2wuaXNWaXNpYmxlKS5sZW5ndGg7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtb2RlbC5jb2x1bW5zID09PSAnb2JqZWN0Jykge1xyXG4gICAgICBicmVha2Rvd24uY29sdW1ucyA9IE9iamVjdC52YWx1ZXMobW9kZWwuY29sdW1ucykuZmlsdGVyKChjb2w6IGFueSkgPT4gY29sPy5pc1Zpc2libGUpLmxlbmd0aDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFBhZ2luYXRpb25cclxuICBpZiAobW9kZWw/LnBhZ2luYXRpb24pIHtcclxuICAgIGlmIChtb2RlbC5wYWdpbmF0aW9uLnRvcCkgYnJlYWtkb3duLnBhZ2luYXRpb24gKz0gMTtcclxuICAgIGlmIChtb2RlbC5wYWdpbmF0aW9uLnNraXApIGJyZWFrZG93bi5wYWdpbmF0aW9uICs9IDE7XHJcbiAgICBpZiAobW9kZWwucGFnaW5hdGlvbi5pbmNsdWRlQ291bnQpIGJyZWFrZG93bi5wYWdpbmF0aW9uICs9IDE7XHJcbiAgfVxyXG5cclxuICAvLyBFeHBhbmRcclxuICBpZiAobW9kZWw/LmV4cGFuZCAmJiBBcnJheS5pc0FycmF5KG1vZGVsLmV4cGFuZCkpIHtcclxuICAgIGJyZWFrZG93bi5leHBhbmQgPSBtb2RlbC5leHBhbmQubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIHRvdGFsOiBPYmplY3QudmFsdWVzKGJyZWFrZG93bikucmVkdWNlKChzdW0sIGNvdW50KSA9PiBzdW0gKyBjb3VudCwgMCksXHJcbiAgICBicmVha2Rvd25cclxuICB9O1xyXG59XHJcbiAgcHJpdmF0ZSBtYXBGaWVsZFR5cGUodHlwZT86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCB0eXBlTWFwOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xyXG4gICAgICAnaW5wdXQnOiAnaW5wdXQnLFxyXG4gICAgICAnbnVtYmVyJzogJ251bWJlcicsXHJcbiAgICAgICdkYXRlcGlja2VyJzogJ2RhdGVwaWNrZXInLFxyXG4gICAgICAnc2VsZWN0JzogJ3NlbGVjdCcsXHJcbiAgICAgICdjaGVja2JveCc6ICdjaGVja2JveCcsXHJcbiAgICAgICdnZW5lcmljLXNlbGVjdG9yJzogJ2dlbmVyaWMtc2VsZWN0b3InLFxyXG4gICAgICAnc3dpdGNoJzogJ3N3aXRjaCcsXHJcbiAgICAgICdyYWRpbyc6ICdyYWRpbycsXHJcbiAgICAgICd0ZXh0YXJlYSc6ICd0ZXh0YXJlYScsXHJcbiAgICAgICdjdXJyZW5jeSc6ICdudW1iZXInXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0eXBlTWFwW3R5cGUgfHwgJ2lucHV0J10gfHwgJ2lucHV0JztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RGF0YVR5cGUodHlwZT86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBkYXRhVHlwZU1hcDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcclxuICAgICAgJ2lucHV0JzogJ3N0cmluZycsXHJcbiAgICAgICdudW1iZXInOiAnbnVtYmVyJyxcclxuICAgICAgJ2RhdGVwaWNrZXInOiAnZGF0ZScsXHJcbiAgICAgICdzZWxlY3QnOiAnc3RyaW5nJyxcclxuICAgICAgJ2NoZWNrYm94JzogJ2Jvb2xlYW4nLFxyXG4gICAgICAnZ2VuZXJpYy1zZWxlY3Rvcic6ICdzdHJpbmcnLFxyXG4gICAgICAnc3dpdGNoJzogJ2Jvb2xlYW4nLFxyXG4gICAgICAncmFkaW8nOiAnc3RyaW5nJyxcclxuICAgICAgJ3RleHRhcmVhJzogJ3N0cmluZycsXHJcbiAgICAgICdjdXJyZW5jeSc6ICdudW1iZXInXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBkYXRhVHlwZU1hcFt0eXBlIHx8ICdpbnB1dCddIHx8ICdzdHJpbmcnO1xyXG4gIH1cclxuXHJcbnByaXZhdGUgZ2V0T3BlcmF0b3JzRm9yVHlwZSh0eXBlPzogc3RyaW5nKTogc3RyaW5nW10ge1xyXG4gICAgY29uc3QgZmllbGRUeXBlID0gdGhpcy5tYXBGaWVsZFR5cGUodHlwZSk7XHJcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmZpZWxkVHlwZUNvbmZpZ1tmaWVsZFR5cGUgYXMga2V5b2YgdHlwZW9mIHRoaXMuZmllbGRUeXBlQ29uZmlnXTtcclxuICAgIHJldHVybiBjb25maWcgPyBjb25maWcub3BlcmF0b3JzIDogWydlcScsICduZSddO1xyXG4gIH1cclxuXHJcbiAgLy8gRW5oYW5jZWQgT0RhdGEgbWV0aG9kcyB3aXRoIEdyb3VwQnkgYW5kIFNlbGVjdCBzdXBwb3J0XHJcbiAgYnVpbGRPRGF0YUZyb21RdWVyeU1vZGVsKG1vZGVsOiBhbnksIG9yaWdpbmFsRmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdKTogUXVlcnlQYXJhbWV0ZXJzIHtcclxuXHJcbiAgICBjb25zdCBwYXJhbXM6IFF1ZXJ5UGFyYW1ldGVycyA9IHtcclxuICAgICAgZmlsdGVyczogW10sXHJcbiAgICAgIG9yZGVyQnk6IFtdLFxyXG4gICAgICBncm91cEJ5OiBbXSxcclxuICAgICAgc2VsZWN0OiBbXSxcclxuICAgICAgYWdncmVnYXRlczogW10sXHJcbiAgICAgIGV4cGFuZDogbW9kZWwuZXhwYW5kIHx8IFtdLFxyXG4gICAgICBpbmNsdWRlQ291bnQ6IG1vZGVsLnBhZ2luYXRpb24/LmluY2x1ZGVDb3VudCB8fCBmYWxzZVxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBRdWljayBzZWFyY2hcclxuICAgIGlmIChtb2RlbC5maWx0ZXIpIHtcclxuICAgICAgY29uc3Qgc2VhcmNoYWJsZUZpZWxkcyA9IHRoaXMuZXh0cmFjdFNlbGVjdGFibGVGaWVsZHMob3JpZ2luYWxGaWVsZHMpOyAvLyBUT0RPIGdldCBhbGwgc3RyaW5ncyBmaWx0ZXJzXHJcbiAgICAgIGNvbnN0IHF1aWNrU2VhcmNoQ29uZGl0aW9uczogRmlsdGVyQ29uZGl0aW9uW10gPSBzZWFyY2hhYmxlRmllbGRzLm1hcChmaWVsZCA9PiAoe1xyXG4gICAgICAgIGZpZWxkOiBmaWVsZC5rZXksXHJcbiAgICAgICAgb3BlcmF0b3I6ICdjb250YWlucycsXHJcbiAgICAgICAgdmFsdWU6IG1vZGVsLmZpbHRlclxyXG4gICAgICB9KSk7XHJcblxyXG4gICAgICBpZiAocXVpY2tTZWFyY2hDb25kaXRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBwYXJhbXMuZmlsdGVycy5wdXNoKHtcclxuICAgICAgICAgIGxvZ2ljYWxPcGVyYXRvcjogJ29yJyxcclxuICAgICAgICAgIGNvbmRpdGlvbnM6IHF1aWNrU2VhcmNoQ29uZGl0aW9uc1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQWR2YW5jZWQgZmlsdGVyc1xyXG4gICAgaWYgKG1vZGVsLmFkdmFuY2VkRmlsdGVycyAmJiBBcnJheS5pc0FycmF5KG1vZGVsLmFkdmFuY2VkRmlsdGVycykpIHtcclxuICAgICAgcGFyYW1zLmZpbHRlcnMucHVzaCguLi5tb2RlbC5hZHZhbmNlZEZpbHRlcnMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFNvcnRpbmdcclxuICAgIGlmIChtb2RlbC5zb3J0aW5nICYmIEFycmF5LmlzQXJyYXkobW9kZWwuc29ydGluZykpIHtcclxuICAgICAgcGFyYW1zLm9yZGVyQnkgPSBtb2RlbC5zb3J0aW5nXHJcbiAgICAgICAgLmZpbHRlcigoc29ydDogYW55KSA9PiBzb3J0LmZpZWxkICYmIHNvcnQuZGlyZWN0aW9uKVxyXG4gICAgICAgIC5tYXAoKHNvcnQ6IGFueSkgPT4gKHtcclxuICAgICAgICAgIGZpZWxkOiBzb3J0LmZpZWxkLFxyXG4gICAgICAgICAgZGlyZWN0aW9uOiBzb3J0LmRpcmVjdGlvblxyXG4gICAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBHcm91cGluZ1xyXG4gICAgaWYgKG1vZGVsLmdyb3VwaW5nICYmIEFycmF5LmlzQXJyYXkobW9kZWwuZ3JvdXBpbmcpKSB7XHJcbiAgICAgIHBhcmFtcy5ncm91cEJ5ID0gbW9kZWwuZ3JvdXBpbmdcclxuICAgICAgICAuZmlsdGVyKChncm91cDogYW55KSA9PiBncm91cC5maWVsZClcclxuICAgICAgICAubWFwKChncm91cDogYW55LCBpbmRleDogbnVtYmVyKSA9PiAoe1xyXG4gICAgICAgICAgcHJvcGVydHlOYW1lOiBncm91cC5maWVsZCxcclxuICAgICAgICAgIGRpc3BsYXlOYW1lOiBncm91cC5kaXNwbGF5TmFtZSB8fCBncm91cC5maWVsZCxcclxuICAgICAgICAgIHNob3dUb3RhbDogZ3JvdXAuc2hvd1RvdGFsICE9PSBmYWxzZSxcclxuICAgICAgICAgIG9yZGVyOiBpbmRleFxyXG4gICAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAvLyBDb2x1bW5zL1NlbGVjdCAtIEhhbmRsZSBib3RoIGFycmF5IGFuZCBvYmplY3QgZm9ybWF0c1xyXG4gICAvLyBleHRyYWN0U2VsZWN0YWJsZUZpZWxkc1xyXG5pZiAobW9kZWwuY29sdW1ucykge1xyXG4gIGxldCB2aXNpYmxlQ29sdW1uczogYW55W10gPSBbXTtcclxuXHJcbiAgLy8gSGFuZGxlIGFycmF5IGZvcm1hdDogW3tmaWVsZDogJ25hbWUnLCBpc1Zpc2libGU6IHRydWUsIC4uLn0sIC4uLl1cclxuICBpZiAoQXJyYXkuaXNBcnJheShtb2RlbC5jb2x1bW5zKSkge1xyXG4gICAgdmlzaWJsZUNvbHVtbnMgPSBtb2RlbC5jb2x1bW5zLmZpbHRlcigoY29sOiBhbnkpID0+IGNvbC5pc1Zpc2libGUpO1xyXG4gIH1cclxuICAvLyBIYW5kbGUgb2JqZWN0IGZvcm1hdDoge2ZpZWxkMToge2lzVmlzaWJsZTogdHJ1ZSwgZGlzcGxheU5hbWU6ICdOYW1lJywgLi4ufSwgZmllbGQyOiB7Li4ufX1cclxuICBlbHNlIGlmICh0eXBlb2YgbW9kZWwuY29sdW1ucyA9PT0gJ29iamVjdCcpIHtcclxuICAgIHZpc2libGVDb2x1bW5zID0gT2JqZWN0LmVudHJpZXMobW9kZWwuY29sdW1ucylcclxuICAgICAgLmZpbHRlcigoW2tleSwgY29sXTogW3N0cmluZywgYW55XSkgPT4gY29sLmlzVmlzaWJsZSlcclxuICAgICAgLm1hcCgoW2tleSwgY29sXTogW3N0cmluZywgYW55XSkgPT4gKHtcclxuICAgICAgICBmaWVsZDoga2V5LCAvLyBVc2UgdGhlIG9iamVjdCBrZXkgYXMgZmllbGQgbmFtZVxyXG4gICAgICAgIC4uLmNvbCAvLyBTcHJlYWQgdGhlIGNvbHVtbiBwcm9wZXJ0aWVzXHJcbiAgICAgIH0pKTtcclxuICB9XHJcblxyXG4gIC8vIFByb2Nlc3MgdmlzaWJsZSBjb2x1bW5zIGZvciBzZWxlY3QgYW5kIGFnZ3JlZ2F0ZXNcclxuICBpZiAodmlzaWJsZUNvbHVtbnMubGVuZ3RoID4gMCkge1xyXG4gICAgcGFyYW1zLnNlbGVjdCA9IHZpc2libGVDb2x1bW5zLm1hcCgoY29sOiBhbnksIGluZGV4OiBudW1iZXIpID0+ICh7XHJcbiAgICAgIHByb3BlcnR5TmFtZTogY29sLmZpZWxkIHx8IGNvbC5rZXksIC8vIFN1cHBvcnQgYm90aCAnZmllbGQnIGFuZCAna2V5JyBwcm9wZXJ0aWVzXHJcbiAgICAgIGRpc3BsYXlOYW1lOiBjb2wuZGlzcGxheU5hbWUgfHwgY29sLmZpZWxkIHx8IGNvbC5rZXkgfHwgY29sLmxhYmVsLFxyXG4gICAgICBhZ2dyZWdhdGVGdW5jdGlvbjogY29sLmFnZ3JlZ2F0ZUZ1bmN0aW9uLFxyXG4gICAgICBpc1Zpc2libGU6IHRydWUsXHJcbiAgICAgIG9yZGVyOiBpbmRleFxyXG4gICAgfSkpO1xyXG5cclxuICAgIC8vIEV4dHJhY3QgYWdncmVnYXRlcyBmcm9tIGNvbHVtbnMgd2l0aCBhZ2dyZWdhdGUgZnVuY3Rpb25zXHJcbiAgICBjb25zdCBhZ2dyZWdhdGVDb2x1bW5zID0gdmlzaWJsZUNvbHVtbnMuZmlsdGVyKChjb2w6IGFueSkgPT4gY29sLmFnZ3JlZ2F0ZUZ1bmN0aW9uKTtcclxuICAgIHBhcmFtcy5hZ2dyZWdhdGVzID0gYWdncmVnYXRlQ29sdW1ucy5tYXAoKGNvbDogYW55KSA9PiAoe1xyXG4gICAgICBwcm9wZXJ0eU5hbWU6IGNvbC5maWVsZCB8fCBjb2wua2V5LFxyXG4gICAgICBhZ2dyZWdhdGVGdW5jdGlvbjogY29sLmFnZ3JlZ2F0ZUZ1bmN0aW9uLFxyXG4gICAgICBhbGlhczogYCR7Y29sLmFnZ3JlZ2F0ZUZ1bmN0aW9ufV8ke2NvbC5maWVsZCB8fCBjb2wua2V5fWBcclxuICAgIH0pKTtcclxuICB9XHJcbn1cclxuZWxzZXtcclxuICAgLy8gRmFsbGJhY2s6IGF1dG8tZ2VuZXJhdGUgZnJvbSBmb3JtbHkgZmllbGRzXHJcbiAgY29uc3Qgc2VsZWN0YWJsZUZpZWxkcyA9IHRoaXMuZXh0cmFjdFNlbGVjdGFibGVGaWVsZHMob3JpZ2luYWxGaWVsZHMpO1xyXG4gIC8vIEVuc3VyZSBhIGNvbHVtbiBmb3IgdGhlIElEIGZpZWxkIGV4aXN0c1xyXG4vLyBpZiAoIXNlbGVjdGFibGVGaWVsZHMuc29tZShmID0+IGYua2V5ID09PSB0aGlzLmlkRmllbGQpKSB7XHJcbi8vICAgc2VsZWN0YWJsZUZpZWxkcy51bnNoaWZ0KHtcclxuLy8gICAgIGtleTogdGhpcy5pZEZpZWxkLFxyXG4vLyAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQodGhpcy5pZEZpZWxkKSxcclxuLy8gICAgIGRhdGFUeXBlOiAnbnVtYmVyJywgLy8gb3IgdGhlIGNvcnJlY3QgdHlwZVxyXG4vLyAgICAgaXNOdW1lcmljOiBmYWxzZSxcclxuLy8gICAgIGRlZmF1bHRWaXNpYmxlOiB0cnVlLFxyXG4vLyAgICAgYWdncmVnYXRhYmxlOiBmYWxzZVxyXG4vLyAgIH0pO1xyXG4vLyB9XHJcblxyXG4gIHBhcmFtcy5zZWxlY3QgPSBzZWxlY3RhYmxlRmllbGRzLm1hcCgoZiwgaSkgPT4gKHtcclxuICAgIHByb3BlcnR5TmFtZTogZi5rZXksXHJcbiAgICBkaXNwbGF5TmFtZTogZi5sYWJlbCxcclxuICAgIGlzVmlzaWJsZTogZi5kZWZhdWx0VmlzaWJsZSxcclxuICAgIG9yZGVyOiBpXHJcbiAgfSkpO1xyXG5cclxuICBwYXJhbXMuYWdncmVnYXRlcyA9IHNlbGVjdGFibGVGaWVsZHNcclxuICAgIC5maWx0ZXIoZiA9PiBmLmFnZ3JlZ2F0YWJsZSlcclxuICAgIC5tYXAoZiA9PiAoe1xyXG4gICAgICBwcm9wZXJ0eU5hbWU6IGYua2V5LFxyXG4gICAgICBhZ2dyZWdhdGVGdW5jdGlvbjogJ3N1bScsXHJcbiAgICAgIGFsaWFzOiBgc3VtXyR7Zi5rZXl9YFxyXG4gICAgfSkpO1xyXG59XHJcblxyXG4gICAgLy8gUGFnaW5hdGlvblxyXG4gICAgaWYgKG1vZGVsLnBhZ2luYXRpb24pIHtcclxuICAgICAgaWYgKG1vZGVsLnBhZ2luYXRpb24udG9wKSB7XHJcbiAgICAgICAgcGFyYW1zLnRvcCA9IE51bWJlcihtb2RlbC5wYWdpbmF0aW9uLnRvcCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG1vZGVsLnBhZ2luYXRpb24uc2tpcCkge1xyXG4gICAgICAgIHBhcmFtcy5za2lwID0gTnVtYmVyKG1vZGVsLnBhZ2luYXRpb24uc2tpcCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG1vZGVsLnBhZ2luYXRpb24uaW5jbHVkZUNvdW50ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBwYXJhbXMuaW5jbHVkZUNvdW50ID0gbW9kZWwucGFnaW5hdGlvbi5pbmNsdWRlQ291bnQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcGFyYW1zO1xyXG4gIH1cclxuXHJcbiAgdG9PRGF0YVF1ZXJ5U3RyaW5nKHBhcmFtczogUXVlcnlQYXJhbWV0ZXJzKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBRdWVyeVBhcnNlci50b1N0cmluZyhwYXJhbXMpO1xyXG4gIH1cclxuXHJcbiAgcGFyc2VPRGF0YVF1ZXJ5KHF1ZXJ5U3RyaW5nOiBzdHJpbmcpOiBRdWVyeVBhcmFtZXRlcnMge1xyXG4gICAgcmV0dXJuIFF1ZXJ5UGFyc2VyLnBhcnNlKHF1ZXJ5U3RyaW5nKTtcclxuICB9XHJcblxyXG5cclxuICAvLyBIZWxwZXIgbWV0aG9kIHRvIGdldCBmaWVsZCBjb25maWd1cmF0aW9uXHJcbiAgZ2V0RmllbGRDb25maWcoZmllbGRLZXk6IHN0cmluZywgZmllbGRzOiBhbnlbXSk6IGFueSB7XHJcbiAgICByZXR1cm4gZmllbGRzLmZpbmQoZiA9PiBmLmtleSA9PT0gZmllbGRLZXkpO1xyXG4gIH1cclxuXHJcbiAgLy8gSGVscGVyIHRvIGdldCBhdmFpbGFibGUgYWdncmVnYXRlIGZ1bmN0aW9ucyBmb3IgbnVtZXJpYyBmaWVsZHNcclxuICBnZXRBZ2dyZWdhdGVGdW5jdGlvbnMoKTogeyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nOyB9W10ge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgeyBsYWJlbDogJ9mF2KzZhdmI2LknLCB2YWx1ZTogJ3N1bScgfSxcclxuICAgICAgeyBsYWJlbDogJ9mF2KrZiNiz2LcnLCB2YWx1ZTogJ2F2ZycgfSxcclxuICAgICAgeyBsYWJlbDogJ9i52K/YrycsIHZhbHVlOiAnY291bnQnIH0sXHJcbiAgICAgIHsgbGFiZWw6ICfYp9mE2K3YryDYp9mE2KPYr9mG2YknLCB2YWx1ZTogJ21pbicgfSxcclxuICAgICAgeyBsYWJlbDogJ9in2YTYrdivINin2YTYo9mC2LXZiScsIHZhbHVlOiAnbWF4JyB9XHJcbiAgICBdO1xyXG4gIH1cclxufVxyXG4iXX0=","// generic-search.component.ts\nimport { Component, EventEmitter, Input, Output, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { FormlyForm } from '@ngx-formly/core';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { ToolbarModule } from 'primeng/toolbar';\nimport { ButtonModule } from 'primeng/button';\nimport { InputIconModule } from 'primeng/inputicon';\nimport { IconFieldModule } from 'primeng/iconfield';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { DrawerModule } from 'primeng/drawer';\nimport { QueryBuilderService } from './query-builder.service';\nimport { InputGroupAddonModule } from 'primeng/inputgroupaddon';\nimport { InputGroupModule } from 'primeng/inputgroup';\nimport { BadgeModule } from 'primeng/badge';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"primeng/api\";\nimport * as i3 from \"primeng/button\";\nimport * as i4 from \"@angular/forms\";\nimport * as i5 from \"primeng/inputtext\";\nimport * as i6 from \"primeng/drawer\";\nimport * as i7 from \"primeng/inputgroup\";\nimport * as i8 from \"primeng/inputgroupaddon\";\nimport * as i9 from \"primeng/badge\";\nimport * as i10 from \"@ngx-translate/core\";\nexport class GenericSearchAdvanced {\n translate = inject(TranslateService);\n queryBuilder = inject(QueryBuilderService);\n drawerVisible = false;\n search = new EventEmitter();\n paginationChange = new EventEmitter();\n odataSearch = new EventEmitter();\n form = new FormGroup({});\n model = {};\n options = {};\n fields = [];\n fields_ = [];\n enableSelect = false;\n enableGroup = false;\n odataConfig = {};\n ngOnInit() {\n this.buildQueryUIFields();\n }\n get filterCount() {\n const filters = ((this.model?.advancedFilters ?? [])[0]?.conditions?.length || 0) +\n ((this.model?.sorting ?? [])?.length || 0) +\n (this.model?.pagination && this.model?.pagination?.top ? 1 : 0);\n return filters;\n }\n buildQueryUIFields() {\n this.fields_ = this.queryBuilder.buildQueryUIFields(this.fields, this.enableSelect, this.enableGroup);\n }\n onSubmit() {\n // Use the new QueryBuilderService methods\n const odataParams = this.queryBuilder.buildODataFromQueryModel(this.model, this.fields);\n // Generate query string using the unified method\n const queryString = this.queryBuilder.toODataQueryString(odataParams);\n if (this.model?.pagination && this.model?.pagination?.top) {\n this.paginationChange.emit({\n top: this.model?.pagination?.top,\n // skip:,\n });\n }\n this.search.emit({\n filter: this.model['filter'],\n query: queryString,\n // sorting:,\n // top:,\n // skip:,\n });\n }\n onReset() {\n this.model = {};\n this.form.reset();\n // this.paginationChange.emit({\n // top:10,\n // // skip:,\n // });\n // this.search.emit(this.model);\n const odataParams = this.queryBuilder.buildODataFromQueryModel(this.model, this.fields);\n // this.odataSearch.emit(odataParams);\n // Generate query string using the unified method\n const queryString = this.queryBuilder.toODataQueryString(odataParams);\n this.search.emit({\n filter: this.model['filter'],\n query: queryString,\n // sorting:,\n top: 10,\n // skip:,\n });\n }\n // Toggle drawer visibility\n toggleDrawer() {\n this.drawerVisible = !this.drawerVisible;\n }\n // Close drawer\n closeDrawer() {\n this.drawerVisible = false;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSearchAdvanced, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.8\", type: GenericSearchAdvanced, isStandalone: true, selector: \"lib-generic-search-advanced\", inputs: { model: \"model\", fields: \"fields\", enableSelect: \"enableSelect\", enableGroup: \"enableGroup\", odataConfig: \"odataConfig\" }, outputs: { search: \"search\", paginationChange: \"paginationChange\", odataSearch: \"odataSearch\" }, ngImport: i0, template: \"<div class=\\\"flex flex-wrap items-center gap-3 w-full\\\">\\r\\n <!-- Search Input with Icon -->\\r\\n <p-inputgroup class=\\\"w-full\\\">\\r\\n <input\\r\\n pInputText\\r\\n type=\\\"text\\\"\\r\\n [(ngModel)]=\\\"model['filter']\\\"\\r\\n placeholder=\\\"{{ 'SEARCH' | translate }}\\\"\\r\\n (keyup.enter)=\\\"onSubmit()\\\"\\r\\n />\\r\\n\\r\\n\\r\\n <p-inputgroup-addon>\\r\\n <p-button\\r\\n icon=\\\"pi pi-search\\\"\\r\\n severity=\\\"secondary\\\"\\r\\n (click)=\\\"onSubmit()\\\"\\r\\n ></p-button>\\r\\n </p-inputgroup-addon>\\r\\n<p-inputgroup-addon>\\r\\n <div class=\\\"relative inline-flex\\\">\\r\\n <p-button\\r\\n icon=\\\"pi pi-filter\\\"\\r\\n severity=\\\"secondary\\\"\\r\\n (onClick)=\\\"drawerVisible = true\\\">\\r\\n </p-button>\\r\\n\\r\\n <p-badge\\r\\n *ngIf=\\\"filterCount > 0\\\"\\r\\n [value]=\\\"filterCount\\\"\\r\\n severity=\\\"warn\\\"\\r\\n size=\\\"small\\\"\\r\\n class=\\\"absolute -top-0 -right-0\\\">\\r\\n </p-badge>\\r\\n </div>\\r\\n</p-inputgroup-addon>\\r\\n\\r\\n <p-inputgroup-addon *ngIf=\\\"model['filter'] || filterCount > 0\\\">\\r\\n <p-button\\r\\n icon=\\\"pi pi-times\\\"\\r\\n severity=\\\"danger\\\"\\r\\n (click)=\\\"model['filter']=''; onReset()\\\"\\r\\n ></p-button>\\r\\n </p-inputgroup-addon>\\r\\n</p-inputgroup>\\r\\n\\r\\n\\r\\n</div>\\r\\n\\r\\n<!-- Drawer for Advanced Multi-field Search -->\\r\\n @if(drawerVisible){\\r\\n<p-drawer\\r\\n [(visible)]=\\\"drawerVisible\\\"\\r\\n position=\\\"right\\\"\\r\\n [styleClass]=\\\"'!w-full md:!w-80 lg:!w-[40rem] !h-full' \\\"\\r\\n [modal]=\\\"true\\\"\\r\\n [dismissible]=\\\"true\\\"\\r\\n styleClass=\\\"p-4 w-full max-w-md max-h-[90vh] flex flex-col\\\"\\r\\n>\\r\\n <!-- Entire form wrapper -->\\r\\n <form [formGroup]=\\\"form\\\" (ngSubmit)=\\\"onSubmit(); drawerVisible=false\\\" class=\\\"flex flex-col flex-1\\\">\\r\\n <!-- Scrollable Form -->\\r\\n <div class=\\\"flex-1 overflow-auto\\\">\\r\\n <formly-form\\r\\n [form]=\\\"form\\\"\\r\\n [fields]=\\\"fields_\\\"\\r\\n [model]=\\\"model\\\"\\r\\n [options]=\\\"options\\\"\\r\\n >\\r\\n </formly-form>\\r\\n </div>\\r\\n\\r\\n </form>\\r\\n <!-- Action Buttons -->\\r\\n <ng-template pTemplate=\\\"footer\\\">\\r\\n <div class=\\\"flex justify-end mt-2 space-x-2 flex-none\\\">\\r\\n <button\\r\\n type=\\\"submit\\\"\\r\\n pButton size=\\\"small\\\"\\r\\n (click)=\\\" onSubmit(); drawerVisible=false\\\"\\r\\n label=\\\"{{ 'SEARCH' | translate }}\\\">\\r\\n </button>\\r\\n <button\\r\\n type=\\\"button\\\"\\r\\n pButton\\r\\n size=\\\"small\\\"\\r\\n class=\\\"p-button-text\\\"\\r\\n (click)=\\\"onReset(); drawerVisible=false\\\"\\r\\n >\\r\\n {{ 'CLEAR' | translate }}\\r\\n </button>\\r\\n </div>\\r\\n </ng-template>\\r\\n</p-drawer>\\r\\n\\r\\n }\\r\\n\", dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: FormlyForm, selector: \"formly-form\", inputs: [\"form\", \"model\", \"fields\", \"options\"], outputs: [\"modelChange\"] }, { kind: \"ngmodule\", type: TranslateModule }, { kind: \"ngmodule\", type: ToolbarModule }, { kind: \"directive\", type: i2.PrimeTemplate, selector: \"[pTemplate]\", inputs: [\"type\", \"pTemplate\"] }, { kind: \"ngmodule\", type: ButtonModule }, { kind: \"directive\", type: i3.ButtonDirective, selector: \"[pButton]\", inputs: [\"iconPos\", \"loadingIcon\", \"loading\", \"severity\", \"raised\", \"rounded\", \"text\", \"outlined\", \"size\", \"plain\", \"fluid\", \"label\", \"icon\", \"buttonProps\"] }, { kind: \"component\", type: i3.Button, selector: \"p-button\", inputs: [\"type\", \"iconPos\", \"icon\", \"badge\", \"label\", \"disabled\", \"loading\", \"loadingIcon\", \"raised\", \"rounded\", \"text\", \"plain\", \"severity\", \"outlined\", \"link\", \"tabindex\", \"size\", \"variant\", \"style\", \"styleClass\", \"badgeClass\", \"badgeSeverity\", \"ariaLabel\", \"buttonProps\", \"autofocus\", \"fluid\"], outputs: [\"onClick\", \"onFocus\", \"onBlur\"] }, { kind: \"ngmodule\", type: ReactiveFormsModule }, { kind: \"directive\", type: i4.ɵNgNoValidate, selector: \"form:not([ngNoForm]):not([ngNativeValidate])\" }, { kind: \"directive\", type: i4.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i4.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i4.NgControlStatusGroup, selector: \"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]\" }, { kind: \"directive\", type: i4.FormGroupDirective, selector: \"[formGroup]\", inputs: [\"formGroup\"], outputs: [\"ngSubmit\"], exportAs: [\"ngForm\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i4.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"ngmodule\", type: InputIconModule }, { kind: \"ngmodule\", type: IconFieldModule }, { kind: \"ngmodule\", type: InputTextModule }, { kind: \"directive\", type: i5.InputText, selector: \"[pInputText]\", inputs: [\"pSize\", \"variant\", \"fluid\", \"invalid\"] }, { kind: \"ngmodule\", type: DrawerModule }, { kind: \"component\", type: i6.Drawer, selector: \"p-drawer\", inputs: [\"appendTo\", \"blockScroll\", \"style\", \"styleClass\", \"ariaCloseLabel\", \"autoZIndex\", \"baseZIndex\", \"modal\", \"closeButtonProps\", \"dismissible\", \"showCloseIcon\", \"closeOnEscape\", \"transitionOptions\", \"visible\", \"position\", \"fullScreen\", \"header\", \"maskStyle\", \"closable\"], outputs: [\"onShow\", \"onHide\", \"visibleChange\"] }, { kind: \"ngmodule\", type: InputGroupModule }, { kind: \"component\", type: i7.InputGroup, selector: \"p-inputgroup, p-inputGroup, p-input-group\", inputs: [\"styleClass\"] }, { kind: \"ngmodule\", type: InputGroupAddonModule }, { kind: \"component\", type: i8.InputGroupAddon, selector: \"p-inputgroup-addon, p-inputGroupAddon\", inputs: [\"style\", \"styleClass\"] }, { kind: \"ngmodule\", type: BadgeModule }, { kind: \"component\", type: i9.Badge, selector: \"p-badge\", inputs: [\"styleClass\", \"badgeSize\", \"size\", \"severity\", \"value\", \"badgeDisabled\"] }, { kind: \"pipe\", type: i10.TranslatePipe, name: \"translate\" }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GenericSearchAdvanced, decorators: [{\n type: Component,\n args: [{ selector: 'lib-generic-search-advanced', standalone: true, imports: [\n CommonModule,\n FormlyForm,\n TranslateModule,\n ToolbarModule,\n ButtonModule,\n ReactiveFormsModule,\n FormsModule,\n InputIconModule,\n IconFieldModule,\n InputTextModule,\n DrawerModule,\n InputGroupModule,\n InputGroupAddonModule,\n BadgeModule\n ], template: \"<div class=\\\"flex flex-wrap items-center gap-3 w-full\\\">\\r\\n <!-- Search Input with Icon -->\\r\\n <p-inputgroup class=\\\"w-full\\\">\\r\\n <input\\r\\n pInputText\\r\\n type=\\\"text\\\"\\r\\n [(ngModel)]=\\\"model['filter']\\\"\\r\\n placeholder=\\\"{{ 'SEARCH' | translate }}\\\"\\r\\n (keyup.enter)=\\\"onSubmit()\\\"\\r\\n />\\r\\n\\r\\n\\r\\n <p-inputgroup-addon>\\r\\n <p-button\\r\\n icon=\\\"pi pi-search\\\"\\r\\n severity=\\\"secondary\\\"\\r\\n (click)=\\\"onSubmit()\\\"\\r\\n ></p-button>\\r\\n </p-inputgroup-addon>\\r\\n<p-inputgroup-addon>\\r\\n <div class=\\\"relative inline-flex\\\">\\r\\n <p-button\\r\\n icon=\\\"pi pi-filter\\\"\\r\\n severity=\\\"secondary\\\"\\r\\n (onClick)=\\\"drawerVisible = true\\\">\\r\\n </p-button>\\r\\n\\r\\n <p-badge\\r\\n *ngIf=\\\"filterCount > 0\\\"\\r\\n [value]=\\\"filterCount\\\"\\r\\n severity=\\\"warn\\\"\\r\\n size=\\\"small\\\"\\r\\n class=\\\"absolute -top-0 -right-0\\\">\\r\\n </p-badge>\\r\\n </div>\\r\\n</p-inputgroup-addon>\\r\\n\\r\\n <p-inputgroup-addon *ngIf=\\\"model['filter'] || filterCount > 0\\\">\\r\\n <p-button\\r\\n icon=\\\"pi pi-times\\\"\\r\\n severity=\\\"danger\\\"\\r\\n (click)=\\\"model['filter']=''; onReset()\\\"\\r\\n ></p-button>\\r\\n </p-inputgroup-addon>\\r\\n</p-inputgroup>\\r\\n\\r\\n\\r\\n</div>\\r\\n\\r\\n<!-- Drawer for Advanced Multi-field Search -->\\r\\n @if(drawerVisible){\\r\\n<p-drawer\\r\\n [(visible)]=\\\"drawerVisible\\\"\\r\\n position=\\\"right\\\"\\r\\n [styleClass]=\\\"'!w-full md:!w-80 lg:!w-[40rem] !h-full' \\\"\\r\\n [modal]=\\\"true\\\"\\r\\n [dismissible]=\\\"true\\\"\\r\\n styleClass=\\\"p-4 w-full max-w-md max-h-[90vh] flex flex-col\\\"\\r\\n>\\r\\n <!-- Entire form wrapper -->\\r\\n <form [formGroup]=\\\"form\\\" (ngSubmit)=\\\"onSubmit(); drawerVisible=false\\\" class=\\\"flex flex-col flex-1\\\">\\r\\n <!-- Scrollable Form -->\\r\\n <div class=\\\"flex-1 overflow-auto\\\">\\r\\n <formly-form\\r\\n [form]=\\\"form\\\"\\r\\n [fields]=\\\"fields_\\\"\\r\\n [model]=\\\"model\\\"\\r\\n [options]=\\\"options\\\"\\r\\n >\\r\\n </formly-form>\\r\\n </div>\\r\\n\\r\\n </form>\\r\\n <!-- Action Buttons -->\\r\\n <ng-template pTemplate=\\\"footer\\\">\\r\\n <div class=\\\"flex justify-end mt-2 space-x-2 flex-none\\\">\\r\\n <button\\r\\n type=\\\"submit\\\"\\r\\n pButton size=\\\"small\\\"\\r\\n (click)=\\\" onSubmit(); drawerVisible=false\\\"\\r\\n label=\\\"{{ 'SEARCH' | translate }}\\\">\\r\\n </button>\\r\\n <button\\r\\n type=\\\"button\\\"\\r\\n pButton\\r\\n size=\\\"small\\\"\\r\\n class=\\\"p-button-text\\\"\\r\\n (click)=\\\"onReset(); drawerVisible=false\\\"\\r\\n >\\r\\n {{ 'CLEAR' | translate }}\\r\\n </button>\\r\\n </div>\\r\\n </ng-template>\\r\\n</p-drawer>\\r\\n\\r\\n }\\r\\n\" }]\n }], propDecorators: { search: [{\n type: Output\n }], paginationChange: [{\n type: Output\n }], odataSearch: [{\n type: Output\n }], model: [{\n type: Input\n }], fields: [{\n type: Input\n }], enableSelect: [{\n type: Input\n }], enableGroup: [{\n type: Input\n }], odataConfig: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1zZWFyY2gtYWR2YW5jZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLnVpLmNvcmUvZ2VuZXJpYy1zZWFyY2gtYWR2YW5jZWQvc3JjL2xpYi9nZW5lcmljLXNlYXJjaC1hZHZhbmNlZC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLXNlYXJjaC1hZHZhbmNlZC9zcmMvbGliL2dlbmVyaWMtc2VhcmNoLWFkdmFuY2VkLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsOEJBQThCO0FBQzlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQWEsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdFLE9BQU8sRUFBcUIsVUFBVSxFQUFxQixNQUFNLGtCQUFrQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5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QVU7d0JBQ1YsZUFBZTt3QkFDZixhQUFhO3dCQUNiLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixXQUFXO3dCQUNYLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZixlQUFlO3dCQUNmLFlBQVk7d0JBQ1osZ0JBQWdCO3dCQUNoQixxQkFBcUI7d0JBQ3JCLFdBQVc7cUJBQ1o7OEJBU1MsTUFBTTtzQkFBZixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUdFLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUs7Z0JBR0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBnZW5lcmljLXNlYXJjaC5jb21wb25lbnQudHNcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZvcm1seUZpZWxkQ29uZmlnLCBGb3JtbHlGb3JtLCBGb3JtbHlGb3JtT3B0aW9ucyB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBUb29sYmFyTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b29sYmFyJztcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcbmltcG9ydCB7IElucHV0SWNvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvaW5wdXRpY29uJztcbmltcG9ydCB7IEljb25GaWVsZE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvaWNvbmZpZWxkJztcbmltcG9ydCB7IElucHV0VGV4dE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvaW5wdXR0ZXh0JztcbmltcG9ydCB7IERyYXdlck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZHJhd2VyJztcbmltcG9ydCB7IFF1ZXJ5QnVpbGRlclNlcnZpY2UgfSBmcm9tICcuL3F1ZXJ5LWJ1aWxkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBJbnB1dEdyb3VwQWRkb25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2lucHV0Z3JvdXBhZGRvbic7XG5pbXBvcnQgeyBJbnB1dEdyb3VwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pbnB1dGdyb3VwJztcbmltcG9ydCB7IFF1ZXJ5UGFyYW1ldGVycyB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBCYWRnZU1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYmFkZ2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItZ2VuZXJpYy1zZWFyY2gtYWR2YW5jZWQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1seUZvcm0sXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIFRvb2xiYXJNb2R1bGUsXG4gICAgQnV0dG9uTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgSW5wdXRJY29uTW9kdWxlLFxuICAgIEljb25GaWVsZE1vZHVsZSxcbiAgICBJbnB1dFRleHRNb2R1bGUsXG4gICAgRHJhd2VyTW9kdWxlLFxuICAgIElucHV0R3JvdXBNb2R1bGUsXG4gICAgSW5wdXRHcm91cEFkZG9uTW9kdWxlLFxuICAgIEJhZGdlTW9kdWxlXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9nZW5lcmljLXNlYXJjaC1hZHZhbmNlZC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgR2VuZXJpY1NlYXJjaEFkdmFuY2VkIGltcGxlbWVudHMgT25Jbml0IHtcbiAgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICBwcml2YXRlIHF1ZXJ5QnVpbGRlciA9IGluamVjdChRdWVyeUJ1aWxkZXJTZXJ2aWNlKTtcblxuICBkcmF3ZXJWaXNpYmxlID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIHNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgcGFnaW5hdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb2RhdGFTZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyPFF1ZXJ5UGFyYW1ldGVycz4oKTtcblxuICBmb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gIEBJbnB1dCgpIG1vZGVsOiBhbnkgPSB7fTtcbiAgb3B0aW9uczogRm9ybWx5Rm9ybU9wdGlvbnMgPSB7fTtcbiAgQElucHV0KCkgZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW107XG4gIGZpZWxkc186IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXTtcblxuICBASW5wdXQoKSBlbmFibGVTZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZW5hYmxlR3JvdXA6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgb2RhdGFDb25maWc6IGFueSA9IHt9O1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuYnVpbGRRdWVyeVVJRmllbGRzKCk7XG4gIH1cblxuICBnZXQgZmlsdGVyQ291bnQoKXtcbiAgICBjb25zdCBmaWx0ZXJzID0gKCh0aGlzLm1vZGVsPy5hZHZhbmNlZEZpbHRlcnMgPz8gW10pWzBdPy5jb25kaXRpb25zPy5sZW5ndGggfHwgMCkgK1xuICAgICgodGhpcy5tb2RlbD8uc29ydGluZyA/PyBbXSk/Lmxlbmd0aCB8fCAwKSArXG4gICAgKHRoaXMubW9kZWw/LnBhZ2luYXRpb24gJiYgdGhpcy5tb2RlbD8ucGFnaW5hdGlvbj8udG9wID8gMSA6IDApO1xuICAgIHJldHVybiBmaWx0ZXJzO1xuICB9XG4gIHByaXZhdGUgYnVpbGRRdWVyeVVJRmllbGRzKCkge1xuICAgIHRoaXMuZmllbGRzXyA9IHRoaXMucXVlcnlCdWlsZGVyLmJ1aWxkUXVlcnlVSUZpZWxkcyh0aGlzLmZpZWxkcyx0aGlzLmVuYWJsZVNlbGVjdCx0aGlzLmVuYWJsZUdyb3VwKTtcblxuICB9XG5cbiAgb25TdWJtaXQoKSB7XG4gICAgLy8gVXNlIHRoZSBuZXcgUXVlcnlCdWlsZGVyU2VydmljZSBtZXRob2RzXG4gICAgY29uc3Qgb2RhdGFQYXJhbXMgPSB0aGlzLnF1ZXJ5QnVpbGRlci5idWlsZE9EYXRhRnJvbVF1ZXJ5TW9kZWwodGhpcy5tb2RlbCwgdGhpcy5maWVsZHMpO1xuICAgIC8vIEdlbmVyYXRlIHF1ZXJ5IHN0cmluZyB1c2luZyB0aGUgdW5pZmllZCBtZXRob2RcbiAgICBjb25zdCBxdWVyeVN0cmluZyA9IHRoaXMucXVlcnlCdWlsZGVyLnRvT0RhdGFRdWVyeVN0cmluZyhvZGF0YVBhcmFtcyk7XG4gICAgaWYodGhpcy5tb2RlbD8ucGFnaW5hdGlvbiAmJiB0aGlzLm1vZGVsPy5wYWdpbmF0aW9uPy50b3Ape1xuICAgIHRoaXMucGFnaW5hdGlvbkNoYW5nZS5lbWl0KHtcbiAgICAgIHRvcDp0aGlzLm1vZGVsPy5wYWdpbmF0aW9uPy50b3AsXG4gICAgICAgIC8vIHNraXA6LFxuICAgIH0pO1xuICB9XG4gICAgdGhpcy5zZWFyY2guZW1pdChcbiAgICAgIHtcbiAgICAgICAgZmlsdGVyOnRoaXMubW9kZWxbJ2ZpbHRlciddLFxuICAgICAgICBxdWVyeTpxdWVyeVN0cmluZyxcbiAgICAgICAgLy8gc29ydGluZzosXG4gICAgICAgIC8vIHRvcDosXG4gICAgICAgIC8vIHNraXA6LFxuXG4gICAgfVxuICApO1xuXG4gIH1cblxuICBvblJlc2V0KCkge1xuICAgIHRoaXMubW9kZWwgPSB7fTtcbiAgICB0aGlzLmZvcm0ucmVzZXQoKTtcbiAgICAvLyB0aGlzLnBhZ2luYXRpb25DaGFuZ2UuZW1pdCh7XG4gICAgLy8gICB0b3A6MTAsXG4gICAgLy8gICAgIC8vIHNraXA6LFxuICAgIC8vIH0pO1xuICAgIC8vIHRoaXMuc2VhcmNoLmVtaXQodGhpcy5tb2RlbCk7XG4gICAgIGNvbnN0IG9kYXRhUGFyYW1zID0gdGhpcy5xdWVyeUJ1aWxkZXIuYnVpbGRPRGF0YUZyb21RdWVyeU1vZGVsKHRoaXMubW9kZWwsIHRoaXMuZmllbGRzKTtcbiAgICAvLyB0aGlzLm9kYXRhU2VhcmNoLmVtaXQob2RhdGFQYXJhbXMpO1xuXG4gICAgLy8gR2VuZXJhdGUgcXVlcnkgc3RyaW5nIHVzaW5nIHRoZSB1bmlmaWVkIG1ldGhvZFxuICAgICBjb25zdCBxdWVyeVN0cmluZyA9IHRoaXMucXVlcnlCdWlsZGVyLnRvT0RhdGFRdWVyeVN0cmluZyhvZGF0YVBhcmFtcyk7XG4gICAgIHRoaXMuc2VhcmNoLmVtaXQoXG4gICAgICB7XG4gICAgICAgIGZpbHRlcjp0aGlzLm1vZGVsWydmaWx0ZXInXSxcbiAgICAgICAgcXVlcnk6cXVlcnlTdHJpbmcsXG4gICAgICAgIC8vIHNvcnRpbmc6LFxuICAgICAgICB0b3A6MTAsXG4gICAgICAgIC8vIHNraXA6LFxuXG4gICAgfVxuICApO1xuXG4gIH1cblxuXG5cbiAgLy8gVG9nZ2xlIGRyYXdlciB2aXNpYmlsaXR5XG4gIHRvZ2dsZURyYXdlcigpIHtcbiAgICB0aGlzLmRyYXdlclZpc2libGUgPSAhdGhpcy5kcmF3ZXJWaXNpYmxlO1xuICB9XG5cbiAgLy8gQ2xvc2UgZHJhd2VyXG4gIGNsb3NlRHJhd2VyKCkge1xuICAgIHRoaXMuZHJhd2VyVmlzaWJsZSA9IGZhbHNlO1xuICB9XG5cblxufVxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAtMyB3LWZ1bGxcIj5cclxuICA8IS0tIFNlYXJjaCBJbnB1dCB3aXRoIEljb24gLS0+XHJcbiAgPHAtaW5wdXRncm91cCBjbGFzcz1cInctZnVsbFwiPlxyXG4gIDxpbnB1dFxyXG4gICAgcElucHV0VGV4dFxyXG4gICAgdHlwZT1cInRleHRcIlxyXG4gICAgWyhuZ01vZGVsKV09XCJtb2RlbFsnZmlsdGVyJ11cIlxyXG4gICAgcGxhY2Vob2xkZXI9XCJ7eyAnU0VBUkNIJyB8IHRyYW5zbGF0ZSB9fVwiXHJcbiAgICAoa2V5dXAuZW50ZXIpPVwib25TdWJtaXQoKVwiXHJcbiAgLz5cclxuXHJcblxyXG4gIDxwLWlucHV0Z3JvdXAtYWRkb24+XHJcbiAgICA8cC1idXR0b25cclxuICAgICAgaWNvbj1cInBpIHBpLXNlYXJjaFwiXHJcbiAgICAgIHNldmVyaXR5PVwic2Vjb25kYXJ5XCJcclxuICAgICAgKGNsaWNrKT1cIm9uU3VibWl0KClcIlxyXG4gICAgPjwvcC1idXR0b24+XHJcbiAgPC9wLWlucHV0Z3JvdXAtYWRkb24+XHJcbjxwLWlucHV0Z3JvdXAtYWRkb24+XHJcbiAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIGlubGluZS1mbGV4XCI+XHJcbiAgICA8cC1idXR0b25cclxuICAgICAgaWNvbj1cInBpIHBpLWZpbHRlclwiXHJcbiAgICAgIHNldmVyaXR5PVwic2Vjb25kYXJ5XCJcclxuICAgICAgKG9uQ2xpY2spPVwiZHJhd2VyVmlzaWJsZSA9IHRydWVcIj5cclxuICAgIDwvcC1idXR0b24+XHJcblxyXG4gICAgPHAtYmFkZ2VcclxuICAgICAgKm5nSWY9XCJmaWx0ZXJDb3VudCA+IDBcIlxyXG4gICAgICBbdmFsdWVdPVwiZmlsdGVyQ291bnRcIlxyXG4gICAgICBzZXZlcml0eT1cIndhcm5cIlxyXG4gICAgICBzaXplPVwic21hbGxcIlxyXG4gICAgICBjbGFzcz1cImFic29sdXRlIC10b3AtMCAtcmlnaHQtMFwiPlxyXG4gICAgPC9wLWJhZGdlPlxyXG4gIDwvZGl2PlxyXG48L3AtaW5wdXRncm91cC1hZGRvbj5cclxuXHJcbiAgPHAtaW5wdXRncm91cC1hZGRvbiAqbmdJZj1cIm1vZGVsWydmaWx0ZXInXSB8fCBmaWx0ZXJDb3VudCA+IDBcIj5cclxuICAgIDxwLWJ1dHRvblxyXG4gICAgICBpY29uPVwicGkgcGktdGltZXNcIlxyXG4gICAgICBzZXZlcml0eT1cImRhbmdlclwiXHJcbiAgICAgIChjbGljayk9XCJtb2RlbFsnZmlsdGVyJ109Jyc7IG9uUmVzZXQoKVwiXHJcbiAgICA+PC9wLWJ1dHRvbj5cclxuICA8L3AtaW5wdXRncm91cC1hZGRvbj5cclxuPC9wLWlucHV0Z3JvdXA+XHJcblxyXG5cclxuPC9kaXY+XHJcblxyXG48IS0tIERyYXdlciBmb3IgQWR2YW5jZWQgTXVsdGktZmllbGQgU2VhcmNoIC0tPlxyXG4gQGlmKGRyYXdlclZpc2libGUpe1xyXG48cC1kcmF3ZXJcclxuICBbKHZpc2libGUpXT1cImRyYXdlclZpc2libGVcIlxyXG4gIHBvc2l0aW9uPVwicmlnaHRcIlxyXG4gIFtzdHlsZUNsYXNzXT1cIichdy1mdWxsIG1kOiF3LTgwIGxnOiF3LVs0MHJlbV0gIWgtZnVsbCcgXCJcclxuICBbbW9kYWxdPVwidHJ1ZVwiXHJcbiAgW2Rpc21pc3NpYmxlXT1cInRydWVcIlxyXG4gIHN0eWxlQ2xhc3M9XCJwLTQgdy1mdWxsIG1heC13LW1kIG1heC1oLVs5MHZoXSBmbGV4IGZsZXgtY29sXCJcclxuPlxyXG4gIDwhLS0gRW50aXJlIGZvcm0gd3JhcHBlciAtLT5cclxuICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIiAobmdTdWJtaXQpPVwib25TdWJtaXQoKTsgZHJhd2VyVmlzaWJsZT1mYWxzZVwiIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBmbGV4LTFcIj5cclxuICAgIDwhLS0gU2Nyb2xsYWJsZSBGb3JtIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXgtMSBvdmVyZmxvdy1hdXRvXCI+XHJcbiAgICAgIDxmb3JtbHktZm9ybVxyXG4gICAgICAgIFtmb3JtXT1cImZvcm1cIlxyXG4gICAgICAgIFtmaWVsZHNdPVwiZmllbGRzX1wiXHJcbiAgICAgICAgW21vZGVsXT1cIm1vZGVsXCJcclxuICAgICAgICBbb3B0aW9uc109XCJvcHRpb25zXCJcclxuICAgICAgPlxyXG4gICAgICA8L2Zvcm1seS1mb3JtPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gIDwvZm9ybT5cclxuICA8IS0tIEFjdGlvbiBCdXR0b25zIC0tPlxyXG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZm9vdGVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZCBtdC0yIHNwYWNlLXgtMiBmbGV4LW5vbmVcIj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICB0eXBlPVwic3VibWl0XCJcclxuICAgICAgIHBCdXR0b24gc2l6ZT1cInNtYWxsXCJcclxuICAgICAgICAoY2xpY2spPVwiIG9uU3VibWl0KCk7IGRyYXdlclZpc2libGU9ZmFsc2VcIlxyXG4gICAgICAgbGFiZWw9XCJ7eyAnU0VBUkNIJyB8IHRyYW5zbGF0ZSB9fVwiPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIHBCdXR0b25cclxuICAgICAgICBzaXplPVwic21hbGxcIlxyXG4gICAgICAgIGNsYXNzPVwicC1idXR0b24tdGV4dFwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uUmVzZXQoKTsgZHJhd2VyVmlzaWJsZT1mYWxzZVwiXHJcbiAgICAgID5cclxuICAgICAgICB7eyAnQ0xFQVInIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG48L3AtZHJhd2VyPlxyXG5cclxuIH1cclxuIl19","// sort-builder.component.ts\nimport { Component } from '@angular/core';\nimport { FieldType } from '@ngx-formly/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { SelectModule } from 'primeng/select';\nimport { ButtonModule } from 'primeng/button';\nimport { DragDropModule } from 'primeng/dragdrop';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { TranslateModule } from '@ngx-translate/core';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@angular/forms\";\nimport * as i3 from \"primeng/select\";\nimport * as i4 from \"primeng/button\";\nimport * as i5 from \"primeng/dragdrop\";\nimport * as i6 from \"primeng/tooltip\";\nimport * as i7 from \"@ngx-translate/core\";\nexport class SortBuilderComponent extends FieldType {\n sorts = [];\n directionOptions = [\n { label: 'تصاعدي (أ → ي)', value: 'asc' },\n { label: 'تنازلي (ي → أ)', value: 'desc' }\n ];\n dragStartIndex = -1;\n ngOnInit() {\n if (this.formControl.value && Array.isArray(this.formControl.value)) {\n this.sorts = this.formControl.value.map((sort) => ({\n field: sort.field || '',\n direction: sort.direction || 'asc'\n }));\n }\n }\n addSort() {\n this.sorts.push({ field: '', direction: 'asc' });\n this.updateValue();\n }\n removeSort(index) {\n this.sorts.splice(index, 1);\n this.updateValue();\n }\n moveSort(fromIndex, toIndex) {\n if (toIndex >= 0 && toIndex < this.sorts.length) {\n const movedItem = this.sorts.splice(fromIndex, 1)[0];\n this.sorts.splice(toIndex, 0, movedItem);\n this.updateValue();\n }\n }\n onDragStart(index) {\n this.dragStartIndex = index;\n }\n onDrop(event, dropIndex) {\n if (this.dragStartIndex !== -1 && this.dragStartIndex !== dropIndex) {\n this.moveSort(this.dragStartIndex, dropIndex);\n }\n this.dragStartIndex = -1;\n }\n reverseSorts() {\n this.sorts.forEach(sort => {\n sort.direction = sort.direction === 'asc' ? 'desc' : 'asc';\n });\n this.updateValue();\n }\n clearAll() {\n this.sorts = [];\n this.updateValue();\n }\n getAvailableFields(currentField) {\n const usedFields = this.sorts.map(s => s.field).filter(f => f && f !== currentField);\n return this.props['fields'].filter((field) => !usedFields.includes(field.key) || field.key === currentField);\n }\n getFieldLabel(fieldKey) {\n const field = this.props['fields'].find((f) => f.key === fieldKey);\n return field?.label || fieldKey;\n }\n getDirectionIcon(direction) {\n return direction === 'asc' ? 'pi pi-sort-up' : 'pi pi-sort-down';\n }\n getDirectionColor(direction) {\n return direction === 'asc' ? 'text-green-500' : 'text-red-500';\n }\n updateValue() {\n // Filter out empty sorts and update value\n const validSorts = this.sorts.filter(sort => sort.field && sort.direction);\n this.formControl.setValue(validSorts);\n }\n // Helper to check if it's the last item\n get isLast() {\n return false; // This is used in template context\n }\n // Method to get current sort configuration\n getSortConfiguration() {\n return this.sorts.filter(sort => sort.field && sort.direction);\n }\n // Method to load sort configuration\n loadSortConfiguration(sortConfig) {\n if (sortConfig && Array.isArray(sortConfig)) {\n this.sorts = sortConfig.map(sort => ({\n field: sort.field || '',\n direction: sort.direction || 'asc'\n }));\n this.updateValue();\n }\n }\n // Method to check if a field is already used in sorting\n isFieldUsed(fieldKey) {\n return this.sorts.some(sort => sort.field === fieldKey);\n }\n // Get the next available field\n getNextAvailableField() {\n const availableFields = this.props['fields'].filter((field) => !this.isFieldUsed(field.key));\n return availableFields.length > 0 ? availableFields[0].key : '';\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SortBuilderComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.1.8\", type: SortBuilderComponent, isStandalone: true, selector: \"formly-sort-builder\", usesInheritance: true, ngImport: i0, template: `<div class=\"sort-builder p-3 border-round border-1 surface-border\">\r\n <div class=\"mb-6\">\r\n <h5 class=\"text-lg font-semibold text-gray-900 mb-2\">{{ props.label || ('SORTING' | translate) }}</h5>\r\n <p class=\"text-gray-600 text-sm\">{{ ('PRIORITY_HINT' | translate) }}</p>\r\n </div>\r\n\r\n <!-- Sort List -->\r\n <div *ngIf=\"sorts.length > 0\" class=\"sort-list space-y-2 mb-3\">\r\n <div\r\n *ngFor=\"let sort of sorts; let i = index; let isFirst = first; let isLast = last\"\r\n class=\"sort-row p-2 border-round surface-card\"\r\n pDraggable\r\n pDroppable\r\n (onDragStart)=\"onDragStart(i)\"\r\n (onDrop)=\"onDrop($event, i)\"\r\n [ngClass]=\"{'border-left-3 border-primary': isFirst, 'border-left-3 border-200': !isFirst}\">\r\n\r\n <div class=\"grid grid-cols-4 align-items-center gap-2\">\r\n <!-- Drag Handle -->\r\n <div class=\"col-span-2 flex\">\r\n <button\r\n pButton\r\n icon=\"pi pi-bars\"\r\n type=\"button\"\r\n class=\"p-button-text p-button-plain cursor-move\"\r\n [pTooltip]=\"'DRAG_TOOLTIP' | translate\"\r\n tooltipPosition=\"top\">\r\n </button>\r\n <p-select\r\n [options]=\"getAvailableFields(sort.field)\"\r\n optionLabel=\"label\"\r\n optionValue=\"key\"\r\n [(ngModel)]=\"sort.field\"\r\n (onChange)=\"updateValue()\"\r\n [placeholder]=\"'SELECT_FIELD_SORT' | translate\"\r\n [showClear]=\"true\"\r\n appendTo=\"body\"\r\n styleClass=\"w-full\">\r\n </p-select>\r\n </div>\r\n\r\n <!-- Direction Selector -->\r\n <div class=\"col-fixed\">\r\n <p-select\r\n [options]=\"directionOptions\"\r\n [(ngModel)]=\"sort.direction\"\r\n (onChange)=\"updateValue()\"\r\n [placeholder]=\"'DIRECTION' | translate\"\r\n appendTo=\"body\"\r\n styleClass=\"w-full\">\r\n </p-select>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"col-fixed flex gap-2\" style=\"justify-content: flex-end;\">\r\n <!-- Move Up -->\r\n <button\r\n outlined\r\n style=\"width: var(--p-button-icon-only-width);\"\r\n *ngIf=\"!isFirst\"\r\n pButton\r\n icon=\"pi pi-arrow-up\"\r\n type=\"button\"\r\n class=\"p-button-sm p-button-success\"\r\n (click)=\"moveSort(i, i - 1)\"\r\n [pTooltip]=\"'MOVE_UP' | translate\"\r\n tooltipPosition=\"top\">\r\n </button>\r\n\r\n <!-- Move Down -->\r\n <button\r\n outlined\r\n style=\"width: var(--p-button-icon-only-width);\"\r\n *ngIf=\"!isLast\"\r\n pButton\r\n icon=\"pi pi-arrow-down\"\r\n type=\"button\"\r\n class=\"p-button-sm p-button-success\"\r\n (click)=\"moveSort(i, i + 1)\"\r\n [pTooltip]=\"'MOVE_DOWN' | translate\"\r\n tooltipPosition=\"top\">\r\n </button>\r\n\r\n <!-- Remove -->\r\n <button\r\n style=\"width: var(--p-button-icon-only-width);\"\r\n pButton\r\n icon=\"pi pi-times\"\r\n type=\"button\"\r\n class=\"p-button-sm p-button-danger\"\r\n (click)=\"removeSort(i)\"\r\n [pTooltip]=\"'REMOVE_SORT' | translate\"\r\n tooltipPosition=\"top\">\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Empty State -->\r\n <div *ngIf=\"sorts.length === 0\" class=\"empty-state text-center p-4 border-round surface-section\">\r\n <i class=\"pi pi-sort-alt text-4xl text-500 mb-3\"></i>\r\n <p class=\"text-500 mb-3\">{{ 'NO_SORT_RULES' | translate }}</p>\r\n <p class=\"text-400 text-sm mb-3\">{{ 'DEFAULT_ORDER' | translate }}</p>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"flex gap-2\">\r\n <button\r\n pButton\r\n icon=\"pi pi-sort-alt\"\r\n [label]=\"'ADD_SORT' | translate\"\r\n type=\"button\"\r\n class=\"p-button-outlined flex-1\"\r\n (click)=\"addSort()\">\r\n </button>\r\n\r\n <button\r\n *ngIf=\"sorts.length > 1\"\r\n pButton\r\n icon=\"pi pi-random\"\r\n [label]=\"'REVERSE_ORDER' | translate\"\r\n type=\"button\"\r\n class=\"p-button-outlined\"\r\n (click)=\"reverseSorts()\"\r\n [pTooltip]=\"'REVERSE_TOOLTIP' | translate\"\r\n tooltipPosition=\"top\">\r\n </button>\r\n\r\n <button\r\n *ngIf=\"sorts.length > 0\"\r\n pButton\r\n icon=\"pi pi-trash\"\r\n type=\"button\"\r\n class=\"p-button-outlined p-button-danger\"\r\n (click)=\"clearAll()\"\r\n [pTooltip]=\"'CLEAR_ALL_TOOLTIP' | translate\"\r\n tooltipPosition=\"top\">\r\n </button>\r\n </div>\r\n\r\n <!-- Summary -->\r\n <div *ngIf=\"sorts.length > 0\" class=\"sort-summary mt-3 p-2 border-round surface-ground\">\r\n <h5 class=\"mt-0 mb-2 text-sm\">{{ 'SORT_SUMMARY' | translate }}:</h5>\r\n <div class=\"text-sm text-500\">\r\n <span *ngFor=\"let sort of sorts; let i = index\" class=\"sort-step\">\r\n <span class=\"font-semibold\">{{ getFieldLabel(sort.field) }}</span>\r\n <span class=\"direction-badge\" [ngClass]=\"sort.direction === 'asc' ? 'bg-green-100 text-green-800' : 'bg-red-100 text-red-800'\">\r\n {{ sort.direction === 'asc' ? '▲' : '▼' }}\r\n </span>\r\n <span *ngIf=\"!isLast\"> {{ 'THEN' | translate }} </span>\r\n </span>\r\n </div>\r\n </div>\r\n</div>`, isInline: true, styles: [\"\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i2.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"ngmodule\", type: SelectModule }, { kind: \"component\", type: i3.Select, selector: \"p-select\", inputs: [\"id\", \"scrollHeight\", \"filter\", \"panelStyle\", \"styleClass\", \"panelStyleClass\", \"readonly\", \"editable\", \"tabindex\", \"placeholder\", \"loadingIcon\", \"filterPlaceholder\", \"filterLocale\", \"inputId\", \"dataKey\", \"filterBy\", \"filterFields\", \"autofocus\", \"resetFilterOnHide\", \"checkmark\", \"dropdownIcon\", \"loading\", \"optionLabel\", \"optionValue\", \"optionDisabled\", \"optionGroupLabel\", \"optionGroupChildren\", \"group\", \"showClear\", \"emptyFilterMessage\", \"emptyMessage\", \"lazy\", \"virtualScroll\", \"virtualScrollItemSize\", \"virtualScrollOptions\", \"overlayOptions\", \"ariaFilterLabel\", \"ariaLabel\", \"ariaLabelledBy\", \"filterMatchMode\", \"tooltip\", \"tooltipPosition\", \"tooltipPositionStyle\", \"tooltipStyleClass\", \"focusOnHover\", \"selectOnFocus\", \"autoOptionFocus\", \"autofocusFilter\", \"filterValue\", \"options\", \"appendTo\"], outputs: [\"onChange\", \"onFilter\", \"onFocus\", \"onBlur\", \"onClick\", \"onShow\", \"onHide\", \"onClear\", \"onLazyLoad\"] }, { kind: \"ngmodule\", type: ButtonModule }, { kind: \"directive\", type: i4.ButtonDirective, selector: \"[pButton]\", inputs: [\"iconPos\", \"loadingIcon\", \"loading\", \"severity\", \"raised\", \"rounded\", \"text\", \"outlined\", \"size\", \"plain\", \"fluid\", \"label\", \"icon\", \"buttonProps\"] }, { kind: \"ngmodule\", type: DragDropModule }, { kind: \"directive\", type: i5.Draggable, selector: \"[pDraggable]\", inputs: [\"pDraggable\", \"dragEffect\", \"dragHandle\", \"pDraggableDisabled\"], outputs: [\"onDragStart\", \"onDragEnd\", \"onDrag\"] }, { kind: \"directive\", type: i5.Droppable, selector: \"[pDroppable]\", inputs: [\"pDroppable\", \"pDroppableDisabled\", \"dropEffect\"], outputs: [\"onDragEnter\", \"onDragLeave\", \"onDrop\"] }, { kind: \"ngmodule\", type: TooltipModule }, { kind: \"directive\", type: i6.Tooltip, selector: \"[pTooltip]\", inputs: [\"tooltipPosition\", \"tooltipEvent\", \"positionStyle\", \"tooltipStyleClass\", \"tooltipZIndex\", \"escape\", \"showDelay\", \"hideDelay\", \"life\", \"positionTop\", \"positionLeft\", \"autoHide\", \"fitContent\", \"hideOnEscape\", \"pTooltip\", \"tooltipDisabled\", \"tooltipOptions\", \"appendTo\"] }, { kind: \"ngmodule\", type: TranslateModule }, { kind: \"pipe\", type: i7.TranslatePipe, name: \"translate\" }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SortBuilderComponent, decorators: [{\n type: Component,\n args: [{ selector: 'formly-sort-builder', standalone: true, imports: [\n CommonModule,\n FormsModule,\n SelectModule,\n ButtonModule,\n DragDropModule,\n TooltipModule,\n TranslateModule\n ], template: `<div class=\"sort-builder p-3 border-round border-1 surface-border\">\r\n <div class=\"mb-6\">\r\n <h5 class=\"text-lg font-semibold text-gray-900 mb-2\">{{ props.label || ('SORTING' | translate) }}</h5>\r\n <p class=\"text-gray-600 text-sm\">{{ ('PRIORITY_HINT' | translate) }}</p>\r\n </div>\r\n\r\n <!-- Sort List -->\r\n <div *ngIf=\"sorts.length > 0\" class=\"sort-list space-y-2 mb-3\">\r\n <div\r\n *ngFor=\"let sort of sorts; let i = index; let isFirst = first; let isLast = last\"\r\n class=\"sort-row p-2 border-round surface-card\"\r\n pDraggable\r\n pDroppable\r\n (onDragStart)=\"onDragStart(i)\"\r\n (onDrop)=\"onDrop($event, i)\"\r\n [ngClass]=\"{'border-left-3 border-primary': isFirst, 'border-left-3 border-200': !isFirst}\">\r\n\r\n <div class=\"grid grid-cols-4 align-items-center gap-2\">\r\n <!-- Drag Handle -->\r\n <div class=\"col-span-2 flex\">\r\n <button\r\n pButton\r\n icon=\"pi pi-bars\"\r\n type=\"button\"\r\n class=\"p-button-text p-button-plain cursor-move\"\r\n [pTooltip]=\"'DRAG_TOOLTIP' | translate\"\r\n tooltipPosition=\"top\">\r\n </button>\r\n <p-select\r\n [options]=\"getAvailableFields(sort.field)\"\r\n optionLabel=\"label\"\r\n optionValue=\"key\"\r\n [(ngModel)]=\"sort.field\"\r\n (onChange)=\"updateValue()\"\r\n [placeholder]=\"'SELECT_FIELD_SORT' | translate\"\r\n [showClear]=\"true\"\r\n appendTo=\"body\"\r\n styleClass=\"w-full\">\r\n </p-select>\r\n </div>\r\n\r\n <!-- Direction Selector -->\r\n <div class=\"col-fixed\">\r\n <p-select\r\n [options]=\"directionOptions\"\r\n [(ngModel)]=\"sort.direction\"\r\n (onChange)=\"updateValue()\"\r\n [placeholder]=\"'DIRECTION' | translate\"\r\n appendTo=\"body\"\r\n styleClass=\"w-full\">\r\n </p-select>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"col-fixed flex gap-2\" style=\"justify-content: flex-end;\">\r\n <!-- Move Up -->\r\n <button\r\n outlined\r\n style=\"width: var(--p-button-icon-only-width);\"\r\n *ngIf=\"!isFirst\"\r\n pButton\r\n icon=\"pi pi-arrow-up\"\r\n type=\"button\"\r\n class=\"p-button-sm p-button-success\"\r\n (click)=\"moveSort(i, i - 1)\"\r\n [pTooltip]=\"'MOVE_UP' | translate\"\r\n tooltipPosition=\"top\">\r\n </button>\r\n\r\n <!-- Move Down -->\r\n <button\r\n outlined\r\n style=\"width: var(--p-button-icon-only-width);\"\r\n *ngIf=\"!isLast\"\r\n pButton\r\n icon=\"pi pi-arrow-down\"\r\n type=\"button\"\r\n class=\"p-button-sm p-button-success\"\r\n (click)=\"moveSort(i, i + 1)\"\r\n [pTooltip]=\"'MOVE_DOWN' | translate\"\r\n tooltipPosition=\"top\">\r\n </button>\r\n\r\n <!-- Remove -->\r\n <button\r\n style=\"width: var(--p-button-icon-only-width);\"\r\n pButton\r\n icon=\"pi pi-times\"\r\n type=\"button\"\r\n class=\"p-button-sm p-button-danger\"\r\n (click)=\"removeSort(i)\"\r\n [pTooltip]=\"'REMOVE_SORT' | translate\"\r\n tooltipPosition=\"top\">\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Empty State -->\r\n <div *ngIf=\"sorts.length === 0\" class=\"empty-state text-center p-4 border-round surface-section\">\r\n <i class=\"pi pi-sort-alt text-4xl text-500 mb-3\"></i>\r\n <p class=\"text-500 mb-3\">{{ 'NO_SORT_RULES' | translate }}</p>\r\n <p class=\"text-400 text-sm mb-3\">{{ 'DEFAULT_ORDER' | translate }}</p>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"flex gap-2\">\r\n <button\r\n pButton\r\n icon=\"pi pi-sort-alt\"\r\n [label]=\"'ADD_SORT' | translate\"\r\n type=\"button\"\r\n class=\"p-button-outlined flex-1\"\r\n (click)=\"addSort()\">\r\n </button>\r\n\r\n <button\r\n *ngIf=\"sorts.length > 1\"\r\n pButton\r\n icon=\"pi pi-random\"\r\n [label]=\"'REVERSE_ORDER' | translate\"\r\n type=\"button\"\r\n class=\"p-button-outlined\"\r\n (click)=\"reverseSorts()\"\r\n [pTooltip]=\"'REVERSE_TOOLTIP' | translate\"\r\n tooltipPosition=\"top\">\r\n </button>\r\n\r\n <button\r\n *ngIf=\"sorts.length > 0\"\r\n pButton\r\n icon=\"pi pi-trash\"\r\n type=\"button\"\r\n class=\"p-button-outlined p-button-danger\"\r\n (click)=\"clearAll()\"\r\n [pTooltip]=\"'CLEAR_ALL_TOOLTIP' | translate\"\r\n tooltipPosition=\"top\">\r\n </button>\r\n </div>\r\n\r\n <!-- Summary -->\r\n <div *ngIf=\"sorts.length > 0\" class=\"sort-summary mt-3 p-2 border-round surface-ground\">\r\n <h5 class=\"mt-0 mb-2 text-sm\">{{ 'SORT_SUMMARY' | translate }}:</h5>\r\n <div class=\"text-sm text-500\">\r\n <span *ngFor=\"let sort of sorts; let i = index\" class=\"sort-step\">\r\n <span class=\"font-semibold\">{{ getFieldLabel(sort.field) }}</span>\r\n <span class=\"direction-badge\" [ngClass]=\"sort.direction === 'asc' ? 'bg-green-100 text-green-800' : 'bg-red-100 text-red-800'\">\r\n {{ sort.direction === 'asc' ? '▲' : '▼' }}\r\n </span>\r\n <span *ngIf=\"!isLast\"> {{ 'THEN' | translate }} </span>\r\n </span>\r\n </div>\r\n </div>\r\n</div>` }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydC1idWlsZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLXNlYXJjaC1hZHZhbmNlZC9zcmMvbGliL3NvcnQtYnVpbGRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNEJBQTRCO0FBQzVCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBbUIsTUFBTSxrQkFBa0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7OztBQTJLdEQsTUFBTSxPQUFPLG9CQUFxQixTQUFRLFNBQTBCO0lBQ2xFLEtBQUssR0FBVSxFQUFFLENBQUM7SUFDbEIsZ0JBQWdCLEdBQUc7UUFDakIsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRTtRQUN6QyxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO0tBQzNDLENBQUM7SUFFTSxjQUFjLEdBQVcsQ0FBQyxDQUFDLENBQUM7SUFFcEMsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJ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VkFDWixXQUFXLDhWQUNYLFlBQVksdy9CQUNaLFlBQVksb1FBQ1osY0FBYyxrWkFDZCxhQUFhLHFYQUNiLGVBQWU7OzJGQStKTixvQkFBb0I7a0JBektoQyxTQUFTOytCQUNFLHFCQUFxQixjQUNuQixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLFlBQVk7d0JBQ1osWUFBWTt3QkFDWixjQUFjO3dCQUNkLGFBQWE7d0JBQ2IsZUFBZTtxQkFDaEIsWUFFUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQTBKTCIsInNvdXJjZXNDb250ZW50IjpbIi8vIHNvcnQtYnVpbGRlci5jb21wb25lbnQudHNcclxuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZpZWxkVHlwZSwgRmllbGRUeXBlQ29uZmlnIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTZWxlY3RNb2R1bGUgfSBmcm9tICdwcmltZW5nL3NlbGVjdCc7XHJcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcclxuaW1wb3J0IHsgRHJhZ0Ryb3BNb2R1bGUgfSBmcm9tICdwcmltZW5nL2RyYWdkcm9wJztcclxuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9vbHRpcCc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdmb3JtbHktc29ydC1idWlsZGVyJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgU2VsZWN0TW9kdWxlLFxyXG4gICAgQnV0dG9uTW9kdWxlLFxyXG4gICAgRHJhZ0Ryb3BNb2R1bGUsXHJcbiAgICBUb29sdGlwTW9kdWxlLFxyXG4gICAgVHJhbnNsYXRlTW9kdWxlXHJcbiAgXSxcclxuICBzdHlsZVVybHM6WycuL3NvcnQtYnVpbGRlci5jb21wb25lbnQuY3NzJ10sXHJcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwic29ydC1idWlsZGVyIHAtMyBib3JkZXItcm91bmQgYm9yZGVyLTEgc3VyZmFjZS1ib3JkZXJcIj5cclxuICAgPGRpdiBjbGFzcz1cIm1iLTZcIj5cclxuICAgIDxoNSBjbGFzcz1cInRleHQtbGcgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTAwIG1iLTJcIj57eyBwcm9wcy5sYWJlbCB8fCAoJ1NPUlRJTkcnIHwgdHJhbnNsYXRlKSB9fTwvaDU+XHJcbiAgICA8cCBjbGFzcz1cInRleHQtZ3JheS02MDAgdGV4dC1zbVwiPnt7ICAoJ1BSSU9SSVRZX0hJTlQnIHwgdHJhbnNsYXRlKSB9fTwvcD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBTb3J0IExpc3QgLS0+XHJcbiAgPGRpdiAqbmdJZj1cInNvcnRzLmxlbmd0aCA+IDBcIiBjbGFzcz1cInNvcnQtbGlzdCBzcGFjZS15LTIgbWItM1wiPlxyXG4gICAgPGRpdlxyXG4gICAgICAqbmdGb3I9XCJsZXQgc29ydCBvZiBzb3J0czsgbGV0IGkgPSBpbmRleDsgbGV0IGlzRmlyc3QgPSBmaXJzdDsgbGV0IGlzTGFzdCA9IGxhc3RcIlxyXG4gICAgICBjbGFzcz1cInNvcnQtcm93IHAtMiBib3JkZXItcm91bmQgc3VyZmFjZS1jYXJkXCJcclxuICAgICAgcERyYWdnYWJsZVxyXG4gICAgICBwRHJvcHBhYmxlXHJcbiAgICAgIChvbkRyYWdTdGFydCk9XCJvbkRyYWdTdGFydChpKVwiXHJcbiAgICAgIChvbkRyb3ApPVwib25Ecm9wKCRldmVudCwgaSlcIlxyXG4gICAgICBbbmdDbGFzc109XCJ7J2JvcmRlci1sZWZ0LTMgYm9yZGVyLXByaW1hcnknOiBpc0ZpcnN0LCAnYm9yZGVyLWxlZnQtMyBib3JkZXItMjAwJzogIWlzRmlyc3R9XCI+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBncmlkLWNvbHMtNCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICA8IS0tIERyYWcgSGFuZGxlIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc3Bhbi0yIGZsZXhcIj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgcEJ1dHRvblxyXG4gICAgICAgICAgICBpY29uPVwicGkgcGktYmFyc1wiXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXRleHQgcC1idXR0b24tcGxhaW4gY3Vyc29yLW1vdmVcIlxyXG4gICAgICAgICAgICBbcFRvb2x0aXBdPVwiJ0RSQUdfVE9PTFRJUCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPHAtc2VsZWN0XHJcbiAgICAgICAgICAgIFtvcHRpb25zXT1cImdldEF2YWlsYWJsZUZpZWxkcyhzb3J0LmZpZWxkKVwiXHJcbiAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibGFiZWxcIlxyXG4gICAgICAgICAgICBvcHRpb25WYWx1ZT1cImtleVwiXHJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwic29ydC5maWVsZFwiXHJcbiAgICAgICAgICAgIChvbkNoYW5nZSk9XCJ1cGRhdGVWYWx1ZSgpXCJcclxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTRUxFQ1RfRklFTERfU09SVCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICBbc2hvd0NsZWFyXT1cInRydWVcIlxyXG4gICAgICAgICAgICBhcHBlbmRUbz1cImJvZHlcIlxyXG4gICAgICAgICAgICBzdHlsZUNsYXNzPVwidy1mdWxsXCI+XHJcbiAgICAgICAgICA8L3Atc2VsZWN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIERpcmVjdGlvbiBTZWxlY3RvciAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWZpeGVkXCI+XHJcbiAgICAgICAgICA8cC1zZWxlY3RcclxuICAgICAgICAgICAgW29wdGlvbnNdPVwiZGlyZWN0aW9uT3B0aW9uc1wiXHJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwic29ydC5kaXJlY3Rpb25cIlxyXG4gICAgICAgICAgICAob25DaGFuZ2UpPVwidXBkYXRlVmFsdWUoKVwiXHJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInRElSRUNUSU9OJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgIGFwcGVuZFRvPVwiYm9keVwiXHJcbiAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIj5cclxuICAgICAgICAgIDwvcC1zZWxlY3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gQWN0aW9ucyAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWZpeGVkIGZsZXggZ2FwLTJcIiBzdHlsZT1cImp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XCI+XHJcbiAgICAgICAgICA8IS0tIE1vdmUgVXAgLS0+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIG91dGxpbmVkXHJcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IHZhcigtLXAtYnV0dG9uLWljb24tb25seS13aWR0aCk7XCJcclxuICAgICAgICAgICAgKm5nSWY9XCIhaXNGaXJzdFwiXHJcbiAgICAgICAgICAgIHBCdXR0b25cclxuICAgICAgICAgICAgaWNvbj1cInBpIHBpLWFycm93LXVwXCJcclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tc20gcC1idXR0b24tc3VjY2Vzc1wiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJtb3ZlU29ydChpLCBpIC0gMSlcIlxyXG4gICAgICAgICAgICBbcFRvb2x0aXBdPVwiJ01PVkVfVVAnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICA8IS0tIE1vdmUgRG93biAtLT5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgb3V0bGluZWRcclxuICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogdmFyKC0tcC1idXR0b24taWNvbi1vbmx5LXdpZHRoKTtcIlxyXG4gICAgICAgICAgICAqbmdJZj1cIiFpc0xhc3RcIlxyXG4gICAgICAgICAgICBwQnV0dG9uXHJcbiAgICAgICAgICAgIGljb249XCJwaSBwaS1hcnJvdy1kb3duXCJcclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tc20gcC1idXR0b24tc3VjY2Vzc1wiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJtb3ZlU29ydChpLCBpICsgMSlcIlxyXG4gICAgICAgICAgICBbcFRvb2x0aXBdPVwiJ01PVkVfRE9XTicgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgIDwhLS0gUmVtb3ZlIC0tPlxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICBzdHlsZT1cIndpZHRoOiB2YXIoLS1wLWJ1dHRvbi1pY29uLW9ubHktd2lkdGgpO1wiXHJcbiAgICAgICAgICAgIHBCdXR0b25cclxuICAgICAgICAgICAgaWNvbj1cInBpIHBpLXRpbWVzXCJcclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tc20gcC1idXR0b24tZGFuZ2VyXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZVNvcnQoaSlcIlxyXG4gICAgICAgICAgICBbcFRvb2x0aXBdPVwiJ1JFTU9WRV9TT1JUJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gRW1wdHkgU3RhdGUgLS0+XHJcbiAgPGRpdiAqbmdJZj1cInNvcnRzLmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwiZW1wdHktc3RhdGUgdGV4dC1jZW50ZXIgcC00IGJvcmRlci1yb3VuZCBzdXJmYWNlLXNlY3Rpb25cIj5cclxuICAgIDxpIGNsYXNzPVwicGkgcGktc29ydC1hbHQgdGV4dC00eGwgdGV4dC01MDAgbWItM1wiPjwvaT5cclxuICAgIDxwIGNsYXNzPVwidGV4dC01MDAgbWItM1wiPnt7ICdOT19TT1JUX1JVTEVTJyB8IHRyYW5zbGF0ZSB9fTwvcD5cclxuICAgIDxwIGNsYXNzPVwidGV4dC00MDAgdGV4dC1zbSBtYi0zXCI+e3sgJ0RFRkFVTFRfT1JERVInIHwgdHJhbnNsYXRlIH19PC9wPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIEFjdGlvbnMgLS0+XHJcbiAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTJcIj5cclxuICAgIDxidXR0b25cclxuICAgICAgcEJ1dHRvblxyXG4gICAgICBpY29uPVwicGkgcGktc29ydC1hbHRcIlxyXG4gICAgICBbbGFiZWxdPVwiJ0FERF9TT1JUJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBjbGFzcz1cInAtYnV0dG9uLW91dGxpbmVkIGZsZXgtMVwiXHJcbiAgICAgIChjbGljayk9XCJhZGRTb3J0KClcIj5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDxidXR0b25cclxuICAgICAgKm5nSWY9XCJzb3J0cy5sZW5ndGggPiAxXCJcclxuICAgICAgcEJ1dHRvblxyXG4gICAgICBpY29uPVwicGkgcGktcmFuZG9tXCJcclxuICAgICAgW2xhYmVsXT1cIidSRVZFUlNFX09SREVSJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBjbGFzcz1cInAtYnV0dG9uLW91dGxpbmVkXCJcclxuICAgICAgKGNsaWNrKT1cInJldmVyc2VTb3J0cygpXCJcclxuICAgICAgW3BUb29sdGlwXT1cIidSRVZFUlNFX1RPT0xUSVAnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8YnV0dG9uXHJcbiAgICAgICpuZ0lmPVwic29ydHMubGVuZ3RoID4gMFwiXHJcbiAgICAgIHBCdXR0b25cclxuICAgICAgaWNvbj1cInBpIHBpLXRyYXNoXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGNsYXNzPVwicC1idXR0b24tb3V0bGluZWQgcC1idXR0b24tZGFuZ2VyXCJcclxuICAgICAgKGNsaWNrKT1cImNsZWFyQWxsKClcIlxyXG4gICAgICBbcFRvb2x0aXBdPVwiJ0NMRUFSX0FMTF9UT09MVElQJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gU3VtbWFyeSAtLT5cclxuICA8ZGl2ICpuZ0lmPVwic29ydHMubGVuZ3RoID4gMFwiIGNsYXNzPVwic29ydC1zdW1tYXJ5IG10LTMgcC0yIGJvcmRlci1yb3VuZCBzdXJmYWNlLWdyb3VuZFwiPlxyXG4gICAgPGg1IGNsYXNzPVwibXQtMCBtYi0yIHRleHQtc21cIj57eyAnU09SVF9TVU1NQVJZJyB8IHRyYW5zbGF0ZSB9fTo8L2g1PlxyXG4gICAgPGRpdiBjbGFzcz1cInRleHQtc20gdGV4dC01MDBcIj5cclxuICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IHNvcnQgb2Ygc29ydHM7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cInNvcnQtc3RlcFwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1zZW1pYm9sZFwiPnt7IGdldEZpZWxkTGFiZWwoc29ydC5maWVsZCkgfX08L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJkaXJlY3Rpb24tYmFkZ2VcIiBbbmdDbGFzc109XCJzb3J0LmRpcmVjdGlvbiA9PT0gJ2FzYycgPyAnYmctZ3JlZW4tMTAwIHRleHQtZ3JlZW4tODAwJyA6ICdiZy1yZWQtMTAwIHRleHQtcmVkLTgwMCdcIj5cclxuICAgICAgICAgIHt7IHNvcnQuZGlyZWN0aW9uID09PSAnYXNjJyA/ICfilrInIDogJ+KWvCcgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCIhaXNMYXN0XCI+IHt7ICdUSEVOJyB8IHRyYW5zbGF0ZSB9fSA8L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5gXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTb3J0QnVpbGRlckNvbXBvbmVudCBleHRlbmRzIEZpZWxkVHlwZTxGaWVsZFR5cGVDb25maWc+IHtcclxuICBzb3J0czogYW55W10gPSBbXTtcclxuICBkaXJlY3Rpb25PcHRpb25zID0gW1xyXG4gICAgeyBsYWJlbDogJ9iq2LXYp9i52K/ZiiAo2KMg4oaSINmKKScsIHZhbHVlOiAnYXNjJyB9LFxyXG4gICAgeyBsYWJlbDogJ9iq2YbYp9iy2YTZiiAo2Yog4oaSINijKScsIHZhbHVlOiAnZGVzYycgfVxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgZHJhZ1N0YXJ0SW5kZXg6IG51bWJlciA9IC0xO1xyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICh0aGlzLmZvcm1Db250cm9sLnZhbHVlICYmIEFycmF5LmlzQXJyYXkodGhpcy5mb3JtQ29udHJvbC52YWx1ZSkpIHtcclxuICAgICAgdGhpcy5zb3J0cyA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUubWFwKChzb3J0OiBhbnkpID0+ICh7XHJcbiAgICAgICAgZmllbGQ6IHNvcnQuZmllbGQgfHwgJycsXHJcbiAgICAgICAgZGlyZWN0aW9uOiBzb3J0LmRpcmVjdGlvbiB8fCAnYXNjJ1xyXG4gICAgICB9KSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRTb3J0KCkge1xyXG4gICAgdGhpcy5zb3J0cy5wdXNoKHsgZmllbGQ6ICcnLCBkaXJlY3Rpb246ICdhc2MnIH0pO1xyXG4gICAgdGhpcy51cGRhdGVWYWx1ZSgpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlU29ydChpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnNvcnRzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7XHJcbiAgfVxyXG5cclxuICBtb3ZlU29ydChmcm9tSW5kZXg6IG51bWJlciwgdG9JbmRleDogbnVtYmVyKSB7XHJcbiAgICBpZiAodG9JbmRleCA+PSAwICYmIHRvSW5kZXggPCB0aGlzLnNvcnRzLmxlbmd0aCkge1xyXG4gICAgICBjb25zdCBtb3ZlZEl0ZW0gPSB0aGlzLnNvcnRzLnNwbGljZShmcm9tSW5kZXgsIDEpWzBdO1xyXG4gICAgICB0aGlzLnNvcnRzLnNwbGljZSh0b0luZGV4LCAwLCBtb3ZlZEl0ZW0pO1xyXG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkRyYWdTdGFydChpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmRyYWdTdGFydEluZGV4ID0gaW5kZXg7XHJcbiAgfVxyXG5cclxuICBvbkRyb3AoZXZlbnQ6IGFueSwgZHJvcEluZGV4OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLmRyYWdTdGFydEluZGV4ICE9PSAtMSAmJiB0aGlzLmRyYWdTdGFydEluZGV4ICE9PSBkcm9wSW5kZXgpIHtcclxuICAgICAgdGhpcy5tb3ZlU29ydCh0aGlzLmRyYWdTdGFydEluZGV4LCBkcm9wSW5kZXgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kcmFnU3RhcnRJbmRleCA9IC0xO1xyXG4gIH1cclxuXHJcbiAgcmV2ZXJzZVNvcnRzKCkge1xyXG4gICAgdGhpcy5zb3J0cy5mb3JFYWNoKHNvcnQgPT4ge1xyXG4gICAgICBzb3J0LmRpcmVjdGlvbiA9IHNvcnQuZGlyZWN0aW9uID09PSAnYXNjJyA/ICdkZXNjJyA6ICdhc2MnO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7XHJcbiAgfVxyXG5cclxuICBjbGVhckFsbCgpIHtcclxuICAgIHRoaXMuc29ydHMgPSBbXTtcclxuICAgIHRoaXMudXBkYXRlVmFsdWUoKTtcclxuICB9XHJcblxyXG4gIGdldEF2YWlsYWJsZUZpZWxkcyhjdXJyZW50RmllbGQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgdXNlZEZpZWxkcyA9IHRoaXMuc29ydHMubWFwKHMgPT4gcy5maWVsZCkuZmlsdGVyKGYgPT4gZiAmJiBmICE9PSBjdXJyZW50RmllbGQpO1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHNbJ2ZpZWxkcyddLmZpbHRlcigoZmllbGQ6IGFueSkgPT5cclxuICAgICAgIXVzZWRGaWVsZHMuaW5jbHVkZXMoZmllbGQua2V5KSB8fCBmaWVsZC5rZXkgPT09IGN1cnJlbnRGaWVsZFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldEZpZWxkTGFiZWwoZmllbGRLZXk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMucHJvcHNbJ2ZpZWxkcyddLmZpbmQoKGY6IGFueSkgPT4gZi5rZXkgPT09IGZpZWxkS2V5KTtcclxuICAgIHJldHVybiBmaWVsZD8ubGFiZWwgfHwgZmllbGRLZXk7XHJcbiAgfVxyXG5cclxuICBnZXREaXJlY3Rpb25JY29uKGRpcmVjdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBkaXJlY3Rpb24gPT09ICdhc2MnID8gJ3BpIHBpLXNvcnQtdXAnIDogJ3BpIHBpLXNvcnQtZG93bic7XHJcbiAgfVxyXG5cclxuICBnZXREaXJlY3Rpb25Db2xvcihkaXJlY3Rpb246IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gZGlyZWN0aW9uID09PSAnYXNjJyA/ICd0ZXh0LWdyZWVuLTUwMCcgOiAndGV4dC1yZWQtNTAwJztcclxuICB9XHJcblxyXG4gIHVwZGF0ZVZhbHVlKCkge1xyXG4gICAgLy8gRmlsdGVyIG91dCBlbXB0eSBzb3J0cyBhbmQgdXBkYXRlIHZhbHVlXHJcbiAgICBjb25zdCB2YWxpZFNvcnRzID0gdGhpcy5zb3J0cy5maWx0ZXIoc29ydCA9PiBzb3J0LmZpZWxkICYmIHNvcnQuZGlyZWN0aW9uKTtcclxuICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsaWRTb3J0cyk7XHJcbiAgfVxyXG5cclxuICAvLyBIZWxwZXIgdG8gY2hlY2sgaWYgaXQncyB0aGUgbGFzdCBpdGVtXHJcbiAgZ2V0IGlzTGFzdCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBmYWxzZTsgLy8gVGhpcyBpcyB1c2VkIGluIHRlbXBsYXRlIGNvbnRleHRcclxuICB9XHJcblxyXG4gIC8vIE1ldGhvZCB0byBnZXQgY3VycmVudCBzb3J0IGNvbmZpZ3VyYXRpb25cclxuICBnZXRTb3J0Q29uZmlndXJhdGlvbigpOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5zb3J0cy5maWx0ZXIoc29ydCA9PiBzb3J0LmZpZWxkICYmIHNvcnQuZGlyZWN0aW9uKTtcclxuICB9XHJcblxyXG4gIC8vIE1ldGhvZCB0byBsb2FkIHNvcnQgY29uZmlndXJhdGlvblxyXG4gIGxvYWRTb3J0Q29uZmlndXJhdGlvbihzb3J0Q29uZmlnOiBhbnlbXSkge1xyXG4gICAgaWYgKHNvcnRDb25maWcgJiYgQXJyYXkuaXNBcnJheShzb3J0Q29uZmlnKSkge1xyXG4gICAgICB0aGlzLnNvcnRzID0gc29ydENvbmZpZy5tYXAoc29ydCA9PiAoe1xyXG4gICAgICAgIGZpZWxkOiBzb3J0LmZpZWxkIHx8ICcnLFxyXG4gICAgICAgIGRpcmVjdGlvbjogc29ydC5kaXJlY3Rpb24gfHwgJ2FzYydcclxuICAgICAgfSkpO1xyXG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBNZXRob2QgdG8gY2hlY2sgaWYgYSBmaWVsZCBpcyBhbHJlYWR5IHVzZWQgaW4gc29ydGluZ1xyXG4gIGlzRmllbGRVc2VkKGZpZWxkS2V5OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnNvcnRzLnNvbWUoc29ydCA9PiBzb3J0LmZpZWxkID09PSBmaWVsZEtleSk7XHJcbiAgfVxyXG5cclxuICAvLyBHZXQgdGhlIG5leHQgYXZhaWxhYmxlIGZpZWxkXHJcbiAgZ2V0TmV4dEF2YWlsYWJsZUZpZWxkKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBhdmFpbGFibGVGaWVsZHMgPSB0aGlzLnByb3BzWydmaWVsZHMnXS5maWx0ZXIoKGZpZWxkOiBhbnkpID0+XHJcbiAgICAgICF0aGlzLmlzRmllbGRVc2VkKGZpZWxkLmtleSlcclxuICAgICk7XHJcbiAgICByZXR1cm4gYXZhaWxhYmxlRmllbGRzLmxlbmd0aCA+IDAgPyBhdmFpbGFibGVGaWVsZHNbMF0ua2V5IDogJyc7XHJcbiAgfVxyXG59XHJcbiJdfQ==","// query-builder.component.ts\nimport { ListboxModule } from 'primeng/listbox';\nimport { ChangeDetectorRef, Component, inject, } from '@angular/core';\nimport { FieldType, FormlyForm } from '@ngx-formly/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { ButtonModule } from 'primeng/button';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { SelectModule } from 'primeng/select';\nimport { DatePickerModule } from 'primeng/datepicker';\nimport { RadioButtonModule } from 'primeng/radiobutton';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { QueryBuilderService } from './query-builder.service';\nimport { MenuModule } from 'primeng/menu';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\nimport { InputGroupAddonModule } from 'primeng/inputgroupaddon';\nimport { InputGroupModule } from 'primeng/inputgroup';\nimport { PopoverModule } from 'primeng/popover';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@angular/forms\";\nimport * as i3 from \"primeng/api\";\nimport * as i4 from \"primeng/button\";\nimport * as i5 from \"primeng/tooltip\";\nimport * as i6 from \"primeng/popover\";\nimport * as i7 from \"primeng/listbox\";\nimport * as i8 from \"@ngx-translate/core\";\nexport class QueryBuilderComponent extends FieldType {\n queryBuilderService = inject(QueryBuilderService);\n cdr = inject(ChangeDetectorRef);\n translate = inject(TranslateService);\n groups = [];\n logicalOperators = [\n { label: this.translate.instant('and'), value: 'and' },\n { label: this.translate.instant('or'), value: 'or' }\n ];\n showAppliedFilters = false;\n ngOnInit() {\n // Initialize with existing value or default group with conditions\n if (this.formControl.value && (Array.isArray(this.formControl.value) && this.formControl.value.length > 0)) {\n this.initializeAppliedConditionsWithFieldConfigs();\n this.initializeDefaultConditions();\n }\n else {\n // Start with default conditions for important fields\n this.initializeDefaultConditions();\n }\n }\n initializeAppliedConditionsWithFieldConfigs() {\n this.groups = this.formControl.value.map((group, groupIndex) => ({\n logicalOperator: group.logicalOperator || 'and',\n groupLogicalOperator: group.groupLogicalOperator || 'and',\n conditions: this.initializeConditionsWithFieldConfigs(group.conditions || [], groupIndex)\n }));\n }\n initializeConditionsWithFieldConfigs(conditions, groupIndex) {\n return conditions.map((condition, conditionIndex) => ({\n ...condition,\n operatorsForField: this.getOperatorsForField(condition.field),\n valueFieldConfig: condition.field ?\n this.generateValueFieldConfig(condition, groupIndex, conditionIndex) :\n null\n }));\n }\n initializeDefaultConditions() {\n // Get default fields using the service logic\n const defaultFields = this.getDefaultFields();\n const defaultConditions = [];\n for (let i = 0; i < defaultFields.length; i++) {\n const field = defaultFields[i];\n defaultConditions.push(this.createDefaultCondition(field, 0, i, field.props?.operator));\n }\n // this.groups = [{\n // logicalOperator: 'and',\n // groupLogicalOperator: 'and',\n // conditions: defaultConditions\n // }];\n this.groups = [{\n logicalOperator: 'and',\n groupLogicalOperator: 'and',\n conditions: defaultConditions.filter(dc => !this.groups?.some(g => g.conditions?.some((c) => c.field === dc.field &&\n c.operator === dc.operator)))\n }];\n this.updateValue();\n }\n toggleAppliedFilters() {\n if (this.showAppliedFilters == true) {\n this.initializeAppliedConditionsWithFieldConfigs();\n this.initializeDefaultConditions();\n }\n else {\n this.initializeAppliedConditionsWithFieldConfigs();\n }\n this.showAppliedFilters = !this.showAppliedFilters;\n }\n onAndClick(group, event) {\n group.logicalOperator = 'and';\n this.updateValue();\n }\n onOrClick(group, event) {\n group.logicalOperator = 'or';\n this.updateValue();\n }\n getLogicalOperatorText(operator) {\n const operatorMap = {\n 'and': this.translate.instant('and'),\n 'or': this.translate.instant('or'),\n 'not': this.translate.instant('not')\n };\n return operatorMap[operator] || operator;\n }\n getDefaultFields() {\n // Get all filterable fields\n const filterableFields = this.props['fields'].filter((field) => field.filterable !== false && field.key && this.isSupportedFieldType(field.type));\n // If no filterable fields, return empty array\n if (filterableFields.length === 0) {\n return [];\n }\n const selectedFields = filterableFields;\n return selectedFields;\n }\n isSupportedFieldType(fieldType) {\n // Only include field types that make sense for filtering\n const supportedTypes = ['input', 'number', 'datepicker', 'custom-datepicker', 'select', 'checkbox', 'generic-selector', 'switch', 'radio', 'textarea'];\n return supportedTypes.includes(fieldType);\n }\n getFieldLabel(key) {\n const f = this.props['fields']?.find((x) => x.key === key);\n return f ? f.label : '';\n }\n createDefaultCondition(field, groupIndex, conditionIndex, operator) {\n const defaultCondition = {\n field: field.key,\n operator: operator ? operator : this.getDefaultOperator(field.type),\n value: this.getDefaultValue(field.type),\n valueFieldConfig: null,\n operatorsForField: this.getOperatorsForField(field),\n };\n // Generate field config for this condition\n defaultCondition.valueFieldConfig = this.generateValueFieldConfig(defaultCondition, groupIndex, conditionIndex);\n return defaultCondition;\n }\n get filterCount() {\n const filters = ((this.model?.advancedFilters ?? [])[0]?.conditions?.length || 0) +\n ((this.model?.sorting ?? [])?.length || 0) +\n (this.model?.pagination && this.model?.pagination?.top ? 1 : 0);\n return filters;\n }\n // Field type and operator methods that use QueryBuilderService logic\n getFieldType(fieldKey) {\n const field = this.props['fields'].find((f) => f.key === fieldKey);\n return field?.type || 'input';\n }\n getOperatorsForField(field) {\n if (!field)\n return [];\n let fieldKey;\n if (typeof field === 'object' && field !== null) {\n fieldKey = field['key'];\n }\n else {\n fieldKey = field;\n }\n const field_ = this.props['fields'].find((f) => f.key === fieldKey);\n // Use operators from the field configuration\n const operators = field_?.operators || this.queryBuilderService['getOperatorsForType'](field_?.type);\n return operators.map((op) => ({\n label: this.getOperatorLabel(op).label,\n icon: this.getOperatorLabel(op).icon,\n value: op\n }));\n }\n getOperatorLabel(operator) {\n const map = {\n eq: { label: this.translate.instant('eq'), icon: 'pi pi-equals' },\n ne: { label: this.translate.instant('ne'), icon: 'pi pi-hashtag' },\n contains: { label: this.translate.instant('contains'), icon: 'pi pi-search' },\n startswith: { label: this.translate.instant('startswith'), icon: 'pi pi-arrow-right' },\n endswith: { label: this.translate.instant('endswith'), icon: 'pi pi-arrow-left' },\n gt: { label: this.translate.instant('gt'), icon: 'pi pi-chevron-right' },\n ge: { label: this.translate.instant('ge'), icon: 'pi pi-angle-double-right' },\n lt: { label: this.translate.instant('lt'), icon: 'pi pi-chevron-left' },\n le: { label: this.translate.instant('le'), icon: 'pi pi-angle-double-left' },\n in: { label: this.translate.instant('in'), icon: 'pi pi-list' },\n notin: { label: this.translate.instant('notin'), icon: 'pi pi-ban' },\n };\n return map[operator] || { label: operator, icon: 'pi pi-question' };\n }\n getDefaultOperator(fieldType) {\n // Use service's field type config\n const fieldConfig = this.queryBuilderService['fieldTypeConfig'][fieldType];\n return fieldConfig ? fieldConfig.defaultOperator : 'contains';\n }\n getDefaultValue(fieldType) {\n // Use service's field type config\n const fieldConfig = this.queryBuilderService['fieldTypeConfig'][fieldType];\n return fieldConfig ? fieldConfig.defaultValue : '';\n }\n getFieldProps(fieldKey) {\n const field = this.props['fields'].find((f) => f.key === fieldKey);\n // Return props without label to avoid duplication\n const props = { ...field?.props };\n delete props.label;\n delete props.loadDefault;\n return props;\n }\n generateValueFieldConfig(condition, groupIndex, conditionIndex) {\n const fieldType = this.getFieldType(condition.field);\n const fieldProps = this.getFieldProps(condition.field);\n const fieldKey = this.getConditionValueKey(groupIndex, conditionIndex);\n return {\n key: fieldKey,\n type: fieldType,\n wrappers: [],\n props: {\n ...fieldProps, // Include all other props from the original field\n placeholder: '',\n loadDefault: false,\n change: (field, event) => {\n this.updateValue();\n }\n },\n hooks: {\n onInit: (field) => {\n if (field.formControl && condition.value !== undefined) {\n field.formControl.setValue(condition.value, { emitEvent: false });\n }\n }\n },\n modelOptions: {\n updateOn: 'change'\n }\n };\n }\n getConditionValueKey(groupIndex, conditionIndex) {\n return `condition_${groupIndex}_${conditionIndex}_value`;\n }\n // Group Management\n addGroup() {\n this.groups.push({\n logicalOperator: 'and',\n groupLogicalOperator: 'and',\n conditions: []\n });\n this.updateValue();\n }\n // removeGroup(groupIndex: number) {\n // this.groups.splice(groupIndex, 1);\n // this.updateValue();\n // }\n removeGroup(groupIndex) {\n if (this.groups[groupIndex]) {\n // Get all field keys for this group before deleting\n const fieldKeysToRemove = [];\n // Collect all condition field keys in this group\n if (this.groups[groupIndex].conditions) {\n for (let c = 0; c < this.groups[groupIndex].conditions.length; c++) {\n const fieldKey = this.getConditionValueKey(groupIndex, c);\n fieldKeysToRemove.push(fieldKey);\n }\n }\n // Remove the group\n this.groups.splice(groupIndex, 1);\n // Remove all associated fields from model\n this.removeMultipleFromModel(fieldKeysToRemove);\n this.updateValue();\n }\n }\n // Remove multiple fields from formly model\n removeMultipleFromModel(fieldKeys) {\n fieldKeys.forEach(fieldKey => {\n this.removeFromModel(fieldKey);\n });\n }\n // Condition Management\n addCondition(groupIndex = 0) {\n if (!this.groups[groupIndex]) {\n this.addGroup();\n }\n const newCondition = {\n field: '',\n operator: 'eq',\n value: '',\n valueFieldConfig: {}\n };\n const conditionIndex = this.groups[groupIndex].conditions.length;\n newCondition.valueFieldConfig = this.generateValueFieldConfig(newCondition, groupIndex, conditionIndex);\n this.groups[groupIndex].conditions.push(newCondition);\n this.updateValue();\n }\n onFieldChange(condition, groupIndex, conditionIndex) {\n condition.operator = this.getDefaultOperator(this.getFieldType(condition.field));\n condition.value = this.getDefaultValue(this.getFieldType(condition.field));\n // Generate and store the field config when field changes\n condition.valueFieldConfig = this.generateValueFieldConfig(condition, groupIndex, conditionIndex);\n condition.operatorsForField = this.getOperatorsForField(condition.field);\n this.updateValue();\n }\n addConditionToLastGroup() {\n const lastGroupIndex = this.groups.length - 1;\n if (lastGroupIndex >= 0) {\n this.addCondition(lastGroupIndex);\n }\n else {\n this.addGroup();\n this.addCondition(0);\n }\n }\n removeCondition(groupIndex, conditionIndex) {\n if (this.groups[groupIndex]) {\n // Get the field key before deleting so we can remove from model\n const fieldKey = this.getConditionValueKey(groupIndex, conditionIndex);\n // Using delete operator (sets to undefined, then we filter)\n delete this.groups[groupIndex].conditions[conditionIndex];\n // Remove the undefined entries from conditions array\n this.groups[groupIndex].conditions = this.groups[groupIndex].conditions.filter((condition) => condition !== undefined);\n // Remove empty groups\n if (this.groups[groupIndex].conditions.length === 0 && this.groups.length > 1) {\n delete this.groups[groupIndex];\n // Remove undefined groups from array\n this.groups = this.groups.filter(group => group !== undefined);\n }\n // Remove from formly model\n this.removeFromModel(fieldKey);\n this.updateValue();\n }\n }\n // Remove the field from formly model\n removeFromModel(fieldKey) {\n if (this.model && this.model.hasOwnProperty(fieldKey)) {\n delete this.model[fieldKey];\n }\n // Also update the form control to ensure sync\n if (this.formControl.value && this.formControl.value.hasOwnProperty(fieldKey)) {\n const updatedValue = { ...this.formControl.value };\n delete updatedValue[fieldKey];\n this.formControl.setValue(updatedValue);\n }\n }\n // Value Management\n updateValue() {\n // Sync condition values from form model with safe access\n for (let g = 0; g < this.groups.length; g++) {\n const group = this.groups[g];\n for (let c = 0; c < group.conditions.length; c++) {\n const condition = group.conditions[c];\n const fieldKey = this.getConditionValueKey(g, c);\n try {\n const modelValue = this.model?.[fieldKey];\n if (modelValue !== undefined) {\n condition.value = modelValue;\n }\n }\n catch (error) {\n }\n }\n }\n const filteredGroups = [];\n for (let g = 0; g < this.groups.length; g++) {\n const group = this.groups[g];\n const validConditions = [];\n for (let c = 0; c < group.conditions.length; c++) {\n const condition = group.conditions[c];\n if (condition.field &&\n condition.operator &&\n condition.value !== undefined &&\n condition.value !== null &&\n condition.value !== '') {\n validConditions.push(condition);\n }\n }\n if (validConditions.length > 0) {\n filteredGroups.push({ ...group, conditions: validConditions });\n }\n }\n this.formControl.setValue(filteredGroups);\n this.cdr.detectChanges();\n }\n clearAll() {\n this.groups = [];\n // Completely reset the form and model\n this.form.reset();\n // Manually set model to empty object\n Object.keys(this.model).forEach(key => {\n delete this.model[key];\n });\n this.addGroup();\n }\n // Helper methods\n getQueryStructure() {\n return this.groups;\n }\n loadQueryStructure(queryStructure) {\n if (queryStructure && Array.isArray(queryStructure)) {\n this.groups = queryStructure.map((group, groupIndex) => ({\n logicalOperator: group.logicalOperator || 'and',\n groupLogicalOperator: group.groupLogicalOperator || 'and',\n conditions: this.initializeConditionsWithFieldConfigs(group.conditions || [], groupIndex)\n }));\n this.updateValue();\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: QueryBuilderComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.1.8\", type: QueryBuilderComponent, isStandalone: true, selector: \"formly-query-builder\", usesInheritance: true, ngImport: i0, template: \"<div>\\r\\n\\r\\n <!-- Groups Container with Connecting Lines -->\\r\\n <div class=\\\"groups-container\\\" #groupsContainer>\\r\\n <div *ngFor=\\\"let group of groups; let groupIndex = index\\\"\\r\\n class=\\\"group-wrapper relative\\\"\\r\\n #groupElement>\\r\\n\\r\\n <!-- Vertical Connector Line from Previous Group -->\\r\\n<div *ngIf=\\\"groupIndex > 0\\\" class=\\\"vertical-connector\\\">\\r\\n <div class=\\\"vertical-line\\\"></div>\\r\\n\\r\\n <!-- Operator Button -->\\r\\n <button\\r\\n type=\\\"button\\\"\\r\\n class=\\\"group-logical-operator-box\\\"\\r\\n [class.and]=\\\"group.groupLogicalOperator === 'and'\\\"\\r\\n [class.or]=\\\"group.groupLogicalOperator === 'or'\\\"\\r\\n (click)=\\\"opPopover.toggle($event)\\\">\\r\\n <span class=\\\"operator-text\\\">\\r\\n {{ getLogicalOperatorText(group.groupLogicalOperator || 'and') }}\\r\\n </span>\\r\\n <div class=\\\"connector-arrow\\\"></div>\\r\\n </button>\\r\\n\\r\\n <!-- Popover -->\\r\\n <p-popover #opPopover appendTo=\\\"body\\\">\\r\\n <div class=\\\"w-12rem\\\">\\r\\n <p-listbox\\r\\n [options]=\\\"logicalOperators\\\"\\r\\n optionLabel=\\\"label\\\"\\r\\n optionValue=\\\"value\\\"\\r\\n [(ngModel)]=\\\"group.groupLogicalOperator\\\"\\r\\n (onChange)=\\\" opPopover.toggle($event)\\\"\\r\\n [style]=\\\"{ width: '100%' }\\\">\\r\\n </p-listbox>\\r\\n </div>\\r\\n </p-popover>\\r\\n</div>\\r\\n\\r\\n <div class=\\\"group-container mb-6 p-1 bg-white rounded-lg border-l-4 border-t-1 border-b-1 border-r-1 shadow-sm transition-all duration-300 relative\\\"\\r\\n [class.border-blue-500]=\\\"group.logicalOperator === 'and'\\\"\\r\\n [class.border-or-500]=\\\"group.logicalOperator === 'or'\\\"\\r\\n [class.pulse]=\\\"groupIndex === 0\\\">\\r\\n\\r\\n <!-- Rounded Button for \\\"\\u0631\\u0628\\u0637 \\u0627\\u0644\\u0634\\u0631\\u0648\\u0637\\\" on left border -->\\r\\n<div\\r\\n class=\\\"absolute -left-4 top-1/2 transform -translate-y-1/2 z-10 transition-all duration-300\\\"\\r\\n\\r\\n>\\r\\n\\r\\n\\r\\n\\r\\n<!-- Logical Operator Popover Button -->\\r\\n<p-button\\r\\n [severity]=\\\"group.logicalOperator === 'and' ? 'success' : 'info'\\\"\\r\\n [styleClass]=\\\"group.logicalOperator === 'and'\\r\\n ? 'p-button-icon-only p-button-rounded p-button-sm logical-and'\\r\\n : 'p-button-icon-only p-button-rounded p-button-sm logical-or'\\\"\\r\\n (click)=\\\"opPopover.toggle($event)\\\">\\r\\n {{group.logicalOperator === 'and' ? ('and' | translate) : ('or' | translate)}}\\r\\n</p-button>\\r\\n\\r\\n<!-- Popover for Operator Selection -->\\r\\n<p-popover #opPopover appendTo=\\\"body\\\">\\r\\n <div class=\\\"w-10rem\\\">\\r\\n <p-listbox\\r\\n [options]=\\\"[\\r\\n { label: 'and' | translate, value: 'and' },\\r\\n { label: 'or' | translate, value: 'or' }\\r\\n ]\\\"\\r\\n optionLabel=\\\"label\\\"\\r\\n optionValue=\\\"value\\\"\\r\\n [(ngModel)]=\\\"group.logicalOperator\\\"\\r\\n (onChange)=\\\"updateValue(); opPopover.toggle($event)\\\"\\r\\n [style]=\\\"{ width: '100%' }\\\">\\r\\n <ng-template let-item pTemplate=\\\"item\\\">\\r\\n {{ item.label }}\\r\\n </ng-template>\\r\\n </p-listbox>\\r\\n </div>\\r\\n</p-popover>\\r\\n\\r\\n</div>\\r\\n\\r\\n\\r\\n\\r\\n <!-- Group Header -->\\r\\n <div class=\\\"group-header-wrapper mb-4 pl-8\\\">\\r\\n <div class=\\\"group-header flex justify-between items-center\\\">\\r\\n\\r\\n <div class=\\\"flex gap-1\\\">\\r\\n <button\\r\\n pButton\\r\\n icon=\\\"pi pi-plus\\\"\\r\\n type=\\\"button\\\"\\r\\n class=\\\"p-button-success p-button p-button-sm !p-1.5 rounded-md transition-colors\\\"\\r\\n (click)=\\\"addCondition(groupIndex)\\\"\\r\\n pTooltip=\\\"{{ 'ADD_CONDITION' | translate }}\\\"\\r\\n tooltipPosition=\\\"top\\\">\\r\\n </button>\\r\\n <!-- @if (filterCount > 0) {\\r\\n <button\\r\\n pButton\\r\\n type=\\\"button\\\"\\r\\n icon=\\\"pi pi-filter\\\"\\r\\n class=\\\"p-button-outlined p-button-sm\\\"\\r\\n (click)=\\\"toggleAppliedFilters()\\\">\\r\\n {{ (showAppliedFilters ? 'SHOW_ALL' : 'SHOW_APPLIED') | translate }}\\r\\n </button>\\r\\n } -->\\r\\n <button\\r\\n *ngIf=\\\"groups.length > 1\\\"\\r\\n pButton\\r\\n icon=\\\"pi pi-times\\\"\\r\\n type=\\\"button\\\"\\r\\n class=\\\"p-button-danger p-button p-button-sm !p-1.5 rounded-md transition-colors\\\"\\r\\n (click)=\\\"removeGroup(groupIndex)\\\"\\r\\n pTooltip=\\\"{{ 'DELETE_GROUP' | translate }}\\\"\\r\\n tooltipPosition=\\\"top\\\">\\r\\n </button>\\r\\n</div>\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n <!-- Conditions in this group -->\\r\\n <div *ngFor=\\\"let condition of group.conditions; let conditionIndex = index\\\"\\r\\n class=\\\"p-1 bg-gray-50 \\\">\\r\\n <div class=\\\"grid grid-cols-1 gap-1 items-center\\\">\\r\\n <!-- Field Selector -->\\r\\n <div class=\\\"md:col-span-2\\\">\\r\\n <div class=\\\"flex w-full rounded-md overflow-hidden border border-gray-300 bg-white shadow-sm\\\">\\r\\n <!-- Field Selector Button -->\\r\\n <div style=\\\"align-items: center;display: flex; min-width: 130px;max-width: 130px;\\\" class=\\\"flex-shrink-0 \\\">\\r\\n <button\\r\\n type=\\\"button\\\"\\r\\n style=\\\"height: -webkit-fill-available;\\\"\\r\\n class=\\\"flex items-center justify-between w-full px-3 py-2 text-sm bg-white hover:bg-gray-50 focus:outline-none focus:ring-2 focus:z-10\\\"\\r\\n (click)=\\\"overlay.toggle($event)\\\">\\r\\n <span style=\\\"\\r\\n display: inline-block;\\r\\n max-width: 100px;\\r\\n overflow: hidden;\\r\\n text-overflow: ellipsis;\\r\\n white-space: nowrap;\\r\\n \\\">{{ getFieldLabel(condition.field) || ('SELECT_FIELD' | translate) }}</span>\\r\\n <i class=\\\"pi pi-chevron-down mr-2 ml-2 text-xs\\\"></i>\\r\\n </button>\\r\\n\\r\\n <!-- Overlay Content -->\\r\\n <p-popover #overlay appendTo=\\\"body\\\">\\r\\n <div class=\\\"w-60\\\">\\r\\n <p-listbox\\r\\n tabindex=\\\"0\\\"\\r\\n [options]=\\\"props['fields']\\\"\\r\\n optionLabel=\\\"label\\\"\\r\\n optionValue=\\\"key\\\"\\r\\n [(ngModel)]=\\\"condition.field\\\"\\r\\n (onChange)=\\\"onFieldChange(condition, groupIndex, conditionIndex); overlay.toggle($event)\\\"\\r\\n [style]=\\\"{ width: '100%' }\\\">\\r\\n </p-listbox>\\r\\n </div>\\r\\n </p-popover>\\r\\n </div>\\r\\n <!-- Operator Button -->\\r\\n <div style=\\\"align-items: center;display: flex;\\\" class=\\\"flex-shrink-0 border-l border-r border-gray-300\\\">\\r\\n <button\\r\\n type=\\\"button\\\"\\r\\n class=\\\"flex items-center justify-center w-full px-3 py-2 text-sm bg-gray-50 hover:bg-gray-100 focus:outline-none focus:ring-2 focus:z-10\\\"\\r\\n style=\\\"height: -webkit-fill-available;\\\"\\r\\n pTooltip=\\\"{{ getOperatorLabel(condition.operator).label }}\\\"\\r\\n (click)=\\\"opPopover.toggle($event)\\\">\\r\\n <i [class]=\\\"getOperatorLabel(condition.operator).icon\\\"></i>\\r\\n </button>\\r\\n\\r\\n <p-popover #opPopover appendTo=\\\"body\\\">\\r\\n <div class=\\\"w-60\\\">\\r\\n <p-listbox\\r\\n [options]=\\\"condition.operatorsForField\\\"\\r\\n optionLabel=\\\"label\\\"\\r\\n optionValue=\\\"value\\\"\\r\\n [(ngModel)]=\\\"condition.operator\\\"\\r\\n (onChange)=\\\"updateValue();opPopover.toggle($event)\\\"\\r\\n [style]=\\\"{ width: '100%' }\\\">\\r\\n </p-listbox>\\r\\n </div>\\r\\n </p-popover>\\r\\n </div>\\r\\n <!-- Form Field -->\\r\\n <div style=\\\"background: #f9fafb\\\" class=\\\"flex-grow p-1\\\">\\r\\n <formly-form\\r\\n [form]=\\\"form\\\"\\r\\n [fields]=\\\"[condition.valueFieldConfig]\\\"\\r\\n [model]=\\\"model\\\">\\r\\n </formly-form>\\r\\n </div>\\r\\n\\r\\n\\r\\n\\r\\n <!-- Delete Button -->\\r\\n <div style=\\\"align-items: center;display: flex;\\\" class=\\\"flex-shrink-0\\\">\\r\\n <button\\r\\n style=\\\"height: -webkit-fill-available;\\\"\\r\\n class=\\\"flex items-center justify-center w-full px-3 py-2 text-sm bg-red-50 text-red-600 hover:bg-red-100 focus:outline-none focus:ring-2 focus:ring-red-500 focus:z-10\\\"\\r\\n type=\\\"button\\\"\\r\\n (click)=\\\"removeCondition(groupIndex, conditionIndex)\\\"\\r\\n pTooltip=\\\"\\u062D\\u0630\\u0641 \\u0627\\u0644\\u0634\\u0631\\u0637\\\"\\r\\n tooltipPosition=\\\"top\\\">\\r\\n <i class=\\\"pi pi-times\\\"></i>\\r\\n </button>\\r\\n </div>\\r\\n</div>\\r\\n </div>\\r\\n\\r\\n\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n <!-- Group Footer -->\\r\\n <div class=\\\"group-footer flex justify-between items-center mt-3 pt-3 border-t border-gray-200 \\\">\\r\\n <small class=\\\"text-gray-500\\\">\\r\\n {{ group.conditions.length }} \\u0634\\u0631\\u0637 \\u0641\\u064A \\u0647\\u0630\\u0647 \\u0627\\u0644\\u0645\\u062C\\u0645\\u0648\\u0639\\u0629\\r\\n </small>\\r\\n <small class=\\\"text-gray-500\\\">\\r\\n <span *ngIf=\\\"groupIndex > 0\\\">\\r\\n \\u0645\\u0631\\u062A\\u0628\\u0637 \\u0645\\u0639 \\u0627\\u0644\\u0633\\u0627\\u0628\\u0642\\u0629 \\u0628\\u0640 <strong [class.text-blue-600]=\\\"group.groupLogicalOperator === 'and'\\\"\\r\\n [class.text-amber-600]=\\\"group.groupLogicalOperator === 'or'\\\">\\r\\n {{ group.groupLogicalOperator === 'and' ? '\\u0648' : '\\u0623\\u0648' }}\\r\\n </strong>\\r\\n </span>\\r\\n </small>\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n <!-- Actions -->\\r\\n<div class=\\\"flex flex-wrap gap-3 mt-6\\\">\\r\\n <button\\r\\n pButton\\r\\n type=\\\"button\\\"\\r\\n icon=\\\"pi pi-plus\\\"\\r\\n [label]=\\\"'GROUP' | translate\\\"\\r\\n class=\\\"p-button-outlined p-button-sm !bg-white !border !border-blue-500 !text-blue-600 hover:!bg-blue-50 transition-colors flex items-center gap-2\\\"\\r\\n (click)=\\\"addGroup();\\\">\\r\\n </button>\\r\\n\\r\\n <button\\r\\n pButton\\r\\n type=\\\"button\\\"\\r\\n icon=\\\"pi pi-plus\\\"\\r\\n [label]=\\\"'CONDITION' | translate\\\"\\r\\n class=\\\"p-button-outlined p-button-sm !bg-white !border !border-blue-500 !text-blue-600 hover:!bg-blue-50 transition-colors flex items-center gap-2\\\"\\r\\n (click)=\\\"addConditionToLastGroup()\\\">\\r\\n </button>\\r\\n\\r\\n <button\\r\\n *ngIf=\\\"groups.length > 0\\\"\\r\\n pButton\\r\\n type=\\\"button\\\"\\r\\n icon=\\\"pi pi-trash\\\"\\r\\n [label]=\\\"'CLEAR' | translate\\\"\\r\\n class=\\\"p-button-danger p-button-outlined p-button-sm !bg-white !border !border-red-500 !text-red-600 hover:!bg-red-50 transition-colors flex items-center gap-2\\\"\\r\\n (click)=\\\"clearAll()\\\">\\r\\n </button>\\r\\n</div>\\r\\n\\r\\n<!-- Empty State -->\\r\\n<div *ngIf=\\\"groups.length === 0\\\" class=\\\"empty-state text-center p-6 border-2 border-dashed border-gray-300 rounded-xl bg-gray-50\\\">\\r\\n <i class=\\\"pi pi-search text-4xl text-gray-400 mb-3\\\"></i>\\r\\n <p class=\\\"text-gray-500 mb-4\\\">{{ 'NO_SEARCH_CONDITIONS' | translate }}</p>\\r\\n <button\\r\\n pButton\\r\\n type=\\\"button\\\"\\r\\n icon=\\\"pi pi-plus\\\"\\r\\n [label]=\\\"'ADD_SEARCH_CONDITION' | translate\\\"\\r\\n class=\\\"p-button-outlined !px-4 !py-2\\\"\\r\\n (click)=\\\"addGroup()\\\">\\r\\n </button>\\r\\n</div>\\r\\n</div>\\r\\n\", styles: [\".vertical-connector{position:relative;display:flex;justify-content:center;margin-bottom:1rem}.vertical-line{position:absolute;top:-1rem;height:1rem;width:2px;background-color:#d1d5db}.group-logical-operator-box{position:relative;padding:.25rem .75rem;border-radius:.375rem;font-weight:500;font-size:.75rem;z-index:10;transition:all .3s ease}.group-logical-operator-box.and{background-color:#dbeafe;color:#1d4ed8;border:1px solid #93c5fd}.group-logical-operator-box.or{background-color:#fef3c7;color:#92400e;border:1px solid #fcd34d}.connector-arrow{position:absolute;top:100%;left:50%;transform:translate(-50%);width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent}.group-logical-operator-box.and .connector-arrow{border-top:6px solid #93c5fd}.group-logical-operator-box.or .connector-arrow{border-top:6px solid #fcd34d}.border-blue-500{border-color:#93c5fd}.border-or-500{border-color:#fcd34d}.border-t-1{border-top-width:1px}.border-b-1{border-bottom-width:1px}.border-r-1{border-right-width:1px}.p-popover-content{padding:5px!important}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i2.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"ngmodule\", type: ReactiveFormsModule }, { kind: \"ngmodule\", type: SelectModule }, { kind: \"directive\", type: i3.PrimeTemplate, selector: \"[pTemplate]\", inputs: [\"type\", \"pTemplate\"] }, { kind: \"ngmodule\", type: InputTextModule }, { kind: \"ngmodule\", type: ButtonModule }, { kind: \"directive\", type: i4.ButtonDirective, selector: \"[pButton]\", inputs: [\"iconPos\", \"loadingIcon\", \"loading\", \"severity\", \"raised\", \"rounded\", \"text\", \"outlined\", \"size\", \"plain\", \"fluid\", \"label\", \"icon\", \"buttonProps\"] }, { kind: \"component\", type: i4.Button, selector: \"p-button\", inputs: [\"type\", \"iconPos\", \"icon\", \"badge\", \"label\", \"disabled\", \"loading\", \"loadingIcon\", \"raised\", \"rounded\", \"text\", \"plain\", \"severity\", \"outlined\", \"link\", \"tabindex\", \"size\", \"variant\", \"style\", \"styleClass\", \"badgeClass\", \"badgeSeverity\", \"ariaLabel\", \"buttonProps\", \"autofocus\", \"fluid\"], outputs: [\"onClick\", \"onFocus\", \"onBlur\"] }, { kind: \"ngmodule\", type: DatePickerModule }, { kind: \"ngmodule\", type: CheckboxModule }, { kind: \"ngmodule\", type: RadioButtonModule }, { kind: \"component\", type: FormlyForm, selector: \"formly-form\", inputs: [\"form\", \"model\", \"fields\", \"options\"], outputs: [\"modelChange\"] }, { kind: \"ngmodule\", type: TooltipModule }, { kind: \"directive\", type: i5.Tooltip, selector: \"[pTooltip]\", inputs: [\"tooltipPosition\", \"tooltipEvent\", \"positionStyle\", \"tooltipStyleClass\", \"tooltipZIndex\", \"escape\", \"showDelay\", \"hideDelay\", \"life\", \"positionTop\", \"positionLeft\", \"autoHide\", \"fitContent\", \"hideOnEscape\", \"pTooltip\", \"tooltipDisabled\", \"tooltipOptions\", \"appendTo\"] }, { kind: \"ngmodule\", type: MenuModule }, { kind: \"ngmodule\", type: TranslateModule }, { kind: \"ngmodule\", type: InputGroupModule }, { kind: \"ngmodule\", type: InputGroupAddonModule }, { kind: \"ngmodule\", type: PopoverModule }, { kind: \"component\", type: i6.Popover, selector: \"p-popover\", inputs: [\"ariaLabel\", \"ariaLabelledBy\", \"dismissable\", \"style\", \"styleClass\", \"appendTo\", \"autoZIndex\", \"ariaCloseLabel\", \"baseZIndex\", \"focusOnShow\", \"showTransitionOptions\", \"hideTransitionOptions\"], outputs: [\"onShow\", \"onHide\"] }, { kind: \"ngmodule\", type: ListboxModule }, { kind: \"component\", type: i7.Listbox, selector: \"p-listbox, p-listBox, p-list-box\", inputs: [\"id\", \"searchMessage\", \"emptySelectionMessage\", \"selectionMessage\", \"autoOptionFocus\", \"ariaLabel\", \"selectOnFocus\", \"searchLocale\", \"focusOnHover\", \"filterMessage\", \"filterFields\", \"lazy\", \"virtualScroll\", \"virtualScrollItemSize\", \"virtualScrollOptions\", \"scrollHeight\", \"tabindex\", \"multiple\", \"styleClass\", \"listStyle\", \"listStyleClass\", \"readonly\", \"checkbox\", \"filter\", \"filterBy\", \"filterMatchMode\", \"filterLocale\", \"metaKeySelection\", \"dataKey\", \"showToggleAll\", \"optionLabel\", \"optionValue\", \"optionGroupChildren\", \"optionGroupLabel\", \"optionDisabled\", \"ariaFilterLabel\", \"filterPlaceHolder\", \"emptyFilterMessage\", \"emptyMessage\", \"group\", \"options\", \"filterValue\", \"selectAll\", \"striped\", \"highlightOnSelect\", \"checkmark\", \"dragdrop\", \"fluid\"], outputs: [\"onChange\", \"onClick\", \"onDblClick\", \"onFilter\", \"onFocus\", \"onBlur\", \"onSelectAllChange\", \"onLazyLoad\", \"onDrop\"] }, { kind: \"pipe\", type: i8.TranslatePipe, name: \"translate\" }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: QueryBuilderComponent, decorators: [{\n type: Component,\n args: [{ selector: 'formly-query-builder', standalone: true, imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n SelectModule,\n InputTextModule,\n ButtonModule,\n DatePickerModule,\n CheckboxModule,\n RadioButtonModule,\n FormlyForm,\n TooltipModule,\n MenuModule,\n TranslateModule,\n InputGroupModule,\n InputGroupAddonModule,\n PopoverModule,\n ListboxModule\n ], template: \"<div>\\r\\n\\r\\n <!-- Groups Container with Connecting Lines -->\\r\\n <div class=\\\"groups-container\\\" #groupsContainer>\\r\\n <div *ngFor=\\\"let group of groups; let groupIndex = index\\\"\\r\\n class=\\\"group-wrapper relative\\\"\\r\\n #groupElement>\\r\\n\\r\\n <!-- Vertical Connector Line from Previous Group -->\\r\\n<div *ngIf=\\\"groupIndex > 0\\\" class=\\\"vertical-connector\\\">\\r\\n <div class=\\\"vertical-line\\\"></div>\\r\\n\\r\\n <!-- Operator Button -->\\r\\n <button\\r\\n type=\\\"button\\\"\\r\\n class=\\\"group-logical-operator-box\\\"\\r\\n [class.and]=\\\"group.groupLogicalOperator === 'and'\\\"\\r\\n [class.or]=\\\"group.groupLogicalOperator === 'or'\\\"\\r\\n (click)=\\\"opPopover.toggle($event)\\\">\\r\\n <span class=\\\"operator-text\\\">\\r\\n {{ getLogicalOperatorText(group.groupLogicalOperator || 'and') }}\\r\\n </span>\\r\\n <div class=\\\"connector-arrow\\\"></div>\\r\\n </button>\\r\\n\\r\\n <!-- Popover -->\\r\\n <p-popover #opPopover appendTo=\\\"body\\\">\\r\\n <div class=\\\"w-12rem\\\">\\r\\n <p-listbox\\r\\n [options]=\\\"logicalOperators\\\"\\r\\n optionLabel=\\\"label\\\"\\r\\n optionValue=\\\"value\\\"\\r\\n [(ngModel)]=\\\"group.groupLogicalOperator\\\"\\r\\n (onChange)=\\\" opPopover.toggle($event)\\\"\\r\\n [style]=\\\"{ width: '100%' }\\\">\\r\\n </p-listbox>\\r\\n </div>\\r\\n </p-popover>\\r\\n</div>\\r\\n\\r\\n <div class=\\\"group-container mb-6 p-1 bg-white rounded-lg border-l-4 border-t-1 border-b-1 border-r-1 shadow-sm transition-all duration-300 relative\\\"\\r\\n [class.border-blue-500]=\\\"group.logicalOperator === 'and'\\\"\\r\\n [class.border-or-500]=\\\"group.logicalOperator === 'or'\\\"\\r\\n [class.pulse]=\\\"groupIndex === 0\\\">\\r\\n\\r\\n <!-- Rounded Button for \\\"\\u0631\\u0628\\u0637 \\u0627\\u0644\\u0634\\u0631\\u0648\\u0637\\\" on left border -->\\r\\n<div\\r\\n class=\\\"absolute -left-4 top-1/2 transform -translate-y-1/2 z-10 transition-all duration-300\\\"\\r\\n\\r\\n>\\r\\n\\r\\n\\r\\n\\r\\n<!-- Logical Operator Popover Button -->\\r\\n<p-button\\r\\n [severity]=\\\"group.logicalOperator === 'and' ? 'success' : 'info'\\\"\\r\\n [styleClass]=\\\"group.logicalOperator === 'and'\\r\\n ? 'p-button-icon-only p-button-rounded p-button-sm logical-and'\\r\\n : 'p-button-icon-only p-button-rounded p-button-sm logical-or'\\\"\\r\\n (click)=\\\"opPopover.toggle($event)\\\">\\r\\n {{group.logicalOperator === 'and' ? ('and' | translate) : ('or' | translate)}}\\r\\n</p-button>\\r\\n\\r\\n<!-- Popover for Operator Selection -->\\r\\n<p-popover #opPopover appendTo=\\\"body\\\">\\r\\n <div class=\\\"w-10rem\\\">\\r\\n <p-listbox\\r\\n [options]=\\\"[\\r\\n { label: 'and' | translate, value: 'and' },\\r\\n { label: 'or' | translate, value: 'or' }\\r\\n ]\\\"\\r\\n optionLabel=\\\"label\\\"\\r\\n optionValue=\\\"value\\\"\\r\\n [(ngModel)]=\\\"group.logicalOperator\\\"\\r\\n (onChange)=\\\"updateValue(); opPopover.toggle($event)\\\"\\r\\n [style]=\\\"{ width: '100%' }\\\">\\r\\n <ng-template let-item pTemplate=\\\"item\\\">\\r\\n {{ item.label }}\\r\\n </ng-template>\\r\\n </p-listbox>\\r\\n </div>\\r\\n</p-popover>\\r\\n\\r\\n</div>\\r\\n\\r\\n\\r\\n\\r\\n <!-- Group Header -->\\r\\n <div class=\\\"group-header-wrapper mb-4 pl-8\\\">\\r\\n <div class=\\\"group-header flex justify-between items-center\\\">\\r\\n\\r\\n <div class=\\\"flex gap-1\\\">\\r\\n <button\\r\\n pButton\\r\\n icon=\\\"pi pi-plus\\\"\\r\\n type=\\\"button\\\"\\r\\n class=\\\"p-button-success p-button p-button-sm !p-1.5 rounded-md transition-colors\\\"\\r\\n (click)=\\\"addCondition(groupIndex)\\\"\\r\\n pTooltip=\\\"{{ 'ADD_CONDITION' | translate }}\\\"\\r\\n tooltipPosition=\\\"top\\\">\\r\\n </button>\\r\\n <!-- @if (filterCount > 0) {\\r\\n <button\\r\\n pButton\\r\\n type=\\\"button\\\"\\r\\n icon=\\\"pi pi-filter\\\"\\r\\n class=\\\"p-button-outlined p-button-sm\\\"\\r\\n (click)=\\\"toggleAppliedFilters()\\\">\\r\\n {{ (showAppliedFilters ? 'SHOW_ALL' : 'SHOW_APPLIED') | translate }}\\r\\n </button>\\r\\n } -->\\r\\n <button\\r\\n *ngIf=\\\"groups.length > 1\\\"\\r\\n pButton\\r\\n icon=\\\"pi pi-times\\\"\\r\\n type=\\\"button\\\"\\r\\n class=\\\"p-button-danger p-button p-button-sm !p-1.5 rounded-md transition-colors\\\"\\r\\n (click)=\\\"removeGroup(groupIndex)\\\"\\r\\n pTooltip=\\\"{{ 'DELETE_GROUP' | translate }}\\\"\\r\\n tooltipPosition=\\\"top\\\">\\r\\n </button>\\r\\n</div>\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n <!-- Conditions in this group -->\\r\\n <div *ngFor=\\\"let condition of group.conditions; let conditionIndex = index\\\"\\r\\n class=\\\"p-1 bg-gray-50 \\\">\\r\\n <div class=\\\"grid grid-cols-1 gap-1 items-center\\\">\\r\\n <!-- Field Selector -->\\r\\n <div class=\\\"md:col-span-2\\\">\\r\\n <div class=\\\"flex w-full rounded-md overflow-hidden border border-gray-300 bg-white shadow-sm\\\">\\r\\n <!-- Field Selector Button -->\\r\\n <div style=\\\"align-items: center;display: flex; min-width: 130px;max-width: 130px;\\\" class=\\\"flex-shrink-0 \\\">\\r\\n <button\\r\\n type=\\\"button\\\"\\r\\n style=\\\"height: -webkit-fill-available;\\\"\\r\\n class=\\\"flex items-center justify-between w-full px-3 py-2 text-sm bg-white hover:bg-gray-50 focus:outline-none focus:ring-2 focus:z-10\\\"\\r\\n (click)=\\\"overlay.toggle($event)\\\">\\r\\n <span style=\\\"\\r\\n display: inline-block;\\r\\n max-width: 100px;\\r\\n overflow: hidden;\\r\\n text-overflow: ellipsis;\\r\\n white-space: nowrap;\\r\\n \\\">{{ getFieldLabel(condition.field) || ('SELECT_FIELD' | translate) }}</span>\\r\\n <i class=\\\"pi pi-chevron-down mr-2 ml-2 text-xs\\\"></i>\\r\\n </button>\\r\\n\\r\\n <!-- Overlay Content -->\\r\\n <p-popover #overlay appendTo=\\\"body\\\">\\r\\n <div class=\\\"w-60\\\">\\r\\n <p-listbox\\r\\n tabindex=\\\"0\\\"\\r\\n [options]=\\\"props['fields']\\\"\\r\\n optionLabel=\\\"label\\\"\\r\\n optionValue=\\\"key\\\"\\r\\n [(ngModel)]=\\\"condition.field\\\"\\r\\n (onChange)=\\\"onFieldChange(condition, groupIndex, conditionIndex); overlay.toggle($event)\\\"\\r\\n [style]=\\\"{ width: '100%' }\\\">\\r\\n </p-listbox>\\r\\n </div>\\r\\n </p-popover>\\r\\n </div>\\r\\n <!-- Operator Button -->\\r\\n <div style=\\\"align-items: center;display: flex;\\\" class=\\\"flex-shrink-0 border-l border-r border-gray-300\\\">\\r\\n <button\\r\\n type=\\\"button\\\"\\r\\n class=\\\"flex items-center justify-center w-full px-3 py-2 text-sm bg-gray-50 hover:bg-gray-100 focus:outline-none focus:ring-2 focus:z-10\\\"\\r\\n style=\\\"height: -webkit-fill-available;\\\"\\r\\n pTooltip=\\\"{{ getOperatorLabel(condition.operator).label }}\\\"\\r\\n (click)=\\\"opPopover.toggle($event)\\\">\\r\\n <i [class]=\\\"getOperatorLabel(condition.operator).icon\\\"></i>\\r\\n </button>\\r\\n\\r\\n <p-popover #opPopover appendTo=\\\"body\\\">\\r\\n <div class=\\\"w-60\\\">\\r\\n <p-listbox\\r\\n [options]=\\\"condition.operatorsForField\\\"\\r\\n optionLabel=\\\"label\\\"\\r\\n optionValue=\\\"value\\\"\\r\\n [(ngModel)]=\\\"condition.operator\\\"\\r\\n (onChange)=\\\"updateValue();opPopover.toggle($event)\\\"\\r\\n [style]=\\\"{ width: '100%' }\\\">\\r\\n </p-listbox>\\r\\n </div>\\r\\n </p-popover>\\r\\n </div>\\r\\n <!-- Form Field -->\\r\\n <div style=\\\"background: #f9fafb\\\" class=\\\"flex-grow p-1\\\">\\r\\n <formly-form\\r\\n [form]=\\\"form\\\"\\r\\n [fields]=\\\"[condition.valueFieldConfig]\\\"\\r\\n [model]=\\\"model\\\">\\r\\n </formly-form>\\r\\n </div>\\r\\n\\r\\n\\r\\n\\r\\n <!-- Delete Button -->\\r\\n <div style=\\\"align-items: center;display: flex;\\\" class=\\\"flex-shrink-0\\\">\\r\\n <button\\r\\n style=\\\"height: -webkit-fill-available;\\\"\\r\\n class=\\\"flex items-center justify-center w-full px-3 py-2 text-sm bg-red-50 text-red-600 hover:bg-red-100 focus:outline-none focus:ring-2 focus:ring-red-500 focus:z-10\\\"\\r\\n type=\\\"button\\\"\\r\\n (click)=\\\"removeCondition(groupIndex, conditionIndex)\\\"\\r\\n pTooltip=\\\"\\u062D\\u0630\\u0641 \\u0627\\u0644\\u0634\\u0631\\u0637\\\"\\r\\n tooltipPosition=\\\"top\\\">\\r\\n <i class=\\\"pi pi-times\\\"></i>\\r\\n </button>\\r\\n </div>\\r\\n</div>\\r\\n </div>\\r\\n\\r\\n\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n <!-- Group Footer -->\\r\\n <div class=\\\"group-footer flex justify-between items-center mt-3 pt-3 border-t border-gray-200 \\\">\\r\\n <small class=\\\"text-gray-500\\\">\\r\\n {{ group.conditions.length }} \\u0634\\u0631\\u0637 \\u0641\\u064A \\u0647\\u0630\\u0647 \\u0627\\u0644\\u0645\\u062C\\u0645\\u0648\\u0639\\u0629\\r\\n </small>\\r\\n <small class=\\\"text-gray-500\\\">\\r\\n <span *ngIf=\\\"groupIndex > 0\\\">\\r\\n \\u0645\\u0631\\u062A\\u0628\\u0637 \\u0645\\u0639 \\u0627\\u0644\\u0633\\u0627\\u0628\\u0642\\u0629 \\u0628\\u0640 <strong [class.text-blue-600]=\\\"group.groupLogicalOperator === 'and'\\\"\\r\\n [class.text-amber-600]=\\\"group.groupLogicalOperator === 'or'\\\">\\r\\n {{ group.groupLogicalOperator === 'and' ? '\\u0648' : '\\u0623\\u0648' }}\\r\\n </strong>\\r\\n </span>\\r\\n </small>\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n <!-- Actions -->\\r\\n<div class=\\\"flex flex-wrap gap-3 mt-6\\\">\\r\\n <button\\r\\n pButton\\r\\n type=\\\"button\\\"\\r\\n icon=\\\"pi pi-plus\\\"\\r\\n [label]=\\\"'GROUP' | translate\\\"\\r\\n class=\\\"p-button-outlined p-button-sm !bg-white !border !border-blue-500 !text-blue-600 hover:!bg-blue-50 transition-colors flex items-center gap-2\\\"\\r\\n (click)=\\\"addGroup();\\\">\\r\\n </button>\\r\\n\\r\\n <button\\r\\n pButton\\r\\n type=\\\"button\\\"\\r\\n icon=\\\"pi pi-plus\\\"\\r\\n [label]=\\\"'CONDITION' | translate\\\"\\r\\n class=\\\"p-button-outlined p-button-sm !bg-white !border !border-blue-500 !text-blue-600 hover:!bg-blue-50 transition-colors flex items-center gap-2\\\"\\r\\n (click)=\\\"addConditionToLastGroup()\\\">\\r\\n </button>\\r\\n\\r\\n <button\\r\\n *ngIf=\\\"groups.length > 0\\\"\\r\\n pButton\\r\\n type=\\\"button\\\"\\r\\n icon=\\\"pi pi-trash\\\"\\r\\n [label]=\\\"'CLEAR' | translate\\\"\\r\\n class=\\\"p-button-danger p-button-outlined p-button-sm !bg-white !border !border-red-500 !text-red-600 hover:!bg-red-50 transition-colors flex items-center gap-2\\\"\\r\\n (click)=\\\"clearAll()\\\">\\r\\n </button>\\r\\n</div>\\r\\n\\r\\n<!-- Empty State -->\\r\\n<div *ngIf=\\\"groups.length === 0\\\" class=\\\"empty-state text-center p-6 border-2 border-dashed border-gray-300 rounded-xl bg-gray-50\\\">\\r\\n <i class=\\\"pi pi-search text-4xl text-gray-400 mb-3\\\"></i>\\r\\n <p class=\\\"text-gray-500 mb-4\\\">{{ 'NO_SEARCH_CONDITIONS' | translate }}</p>\\r\\n <button\\r\\n pButton\\r\\n type=\\\"button\\\"\\r\\n icon=\\\"pi pi-plus\\\"\\r\\n [label]=\\\"'ADD_SEARCH_CONDITION' | translate\\\"\\r\\n class=\\\"p-button-outlined !px-4 !py-2\\\"\\r\\n (click)=\\\"addGroup()\\\">\\r\\n </button>\\r\\n</div>\\r\\n</div>\\r\\n\", styles: [\".vertical-connector{position:relative;display:flex;justify-content:center;margin-bottom:1rem}.vertical-line{position:absolute;top:-1rem;height:1rem;width:2px;background-color:#d1d5db}.group-logical-operator-box{position:relative;padding:.25rem .75rem;border-radius:.375rem;font-weight:500;font-size:.75rem;z-index:10;transition:all .3s ease}.group-logical-operator-box.and{background-color:#dbeafe;color:#1d4ed8;border:1px solid #93c5fd}.group-logical-operator-box.or{background-color:#fef3c7;color:#92400e;border:1px solid #fcd34d}.connector-arrow{position:absolute;top:100%;left:50%;transform:translate(-50%);width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent}.group-logical-operator-box.and .connector-arrow{border-top:6px solid #93c5fd}.group-logical-operator-box.or .connector-arrow{border-top:6px solid #fcd34d}.border-blue-500{border-color:#93c5fd}.border-or-500{border-color:#fcd34d}.border-t-1{border-top-width:1px}.border-b-1{border-bottom-width:1px}.border-r-1{border-right-width:1px}.p-popover-content{padding:5px!important}\\n\"] }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktYnVpbGRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLnVpLmNvcmUvZ2VuZXJpYy1zZWFyY2gtYWR2YW5jZWQvc3JjL2xpYi9xdWVyeS1idWlsZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLXNlYXJjaC1hZHZhbmNlZC9zcmMvbGliL3F1ZXJ5LWJ1aWxkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNkJBQTZCO0FBQzdCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFHLE1BQU0sR0FBWSxNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQUUsU0FBUyxFQUFzQyxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0s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QUFXLEVBQUUsQ0FBQztRQUNyQixDQUFDO0lBQ0gsQ0FBQzt1R0EzY1UscUJBQXFCOzJGQUFyQixxQkFBcUIsdUdDN0NsQyxzOVVBeVJBLDBtQ0RqUUksWUFBWSwrUEFDWixXQUFXLDhWQUNYLG1CQUFtQiw4QkFDbkIsWUFBWSxxSUFDWixlQUFlLDhCQUNmLFlBQVksdXBCQUNaLGdCQUFnQiw4QkFDaEIsY0FBYyw4QkFDZCxpQkFBaUIsK0JBQ2pCLFVBQVUsaUlBQ1YsYUFBYSxxWEFDYixVQUFVLDhCQUNWLGVBQWUsOEJBQ2QsZ0JBQWdCLDhCQUNqQixxQkFBcUIsOEJBQ3JCLGFBQWEsdVVBQ2IsYUFBYTs7MkZBS0oscUJBQXFCO2tCQXpCakMsU0FBUzsrQkFDRSxzQkFBc0IsY0FDcEIsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixZQUFZO3dCQUNaLGdCQUFnQjt3QkFDaEIsY0FBYzt3QkFDZCxpQkFBaUI7d0JBQ2pCLFVBQVU7d0JBQ1YsYUFBYTt3QkFDYixVQUFVO3dCQUNWLGVBQWU7d0JBQ2QsZ0JBQWdCO3dCQUNqQixxQkFBcUI7d0JBQ3JCLGFBQWE7d0JBQ2IsYUFBYTtxQkFDZCIsInNvdXJjZXNDb250ZW50IjpbIi8vIHF1ZXJ5LWJ1aWxkZXIuY29tcG9uZW50LnRzXHJcbmltcG9ydCB7IExpc3Rib3hNb2R1bGUgfSBmcm9tICdwcmltZW5nL2xpc3Rib3gnO1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCAgaW5qZWN0LCBPbkluaXQsICB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGaWVsZFR5cGUsIEZpZWxkVHlwZUNvbmZpZywgRm9ybWx5RmllbGRDb25maWcsIEZvcm1seUZvcm0gfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IElucHV0VGV4dE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvaW5wdXR0ZXh0JztcclxuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xyXG5pbXBvcnQgeyBDaGVja2JveE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvY2hlY2tib3gnO1xyXG5pbXBvcnQgeyBTZWxlY3RNb2R1bGUgfSBmcm9tICdwcmltZW5nL3NlbGVjdCc7XHJcbmltcG9ydCB7IERhdGVQaWNrZXJNb2R1bGUgfSBmcm9tICdwcmltZW5nL2RhdGVwaWNrZXInO1xyXG5pbXBvcnQgeyBSYWRpb0J1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvcmFkaW9idXR0b24nO1xyXG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b29sdGlwJztcclxuaW1wb3J0IHsgUXVlcnlCdWlsZGVyU2VydmljZSB9IGZyb20gJy4vcXVlcnktYnVpbGRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWVudU1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvbWVudSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBJbnB1dEdyb3VwQWRkb25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2lucHV0Z3JvdXBhZGRvbic7XHJcbmltcG9ydCB7IElucHV0R3JvdXBNb2R1bGUgfSBmcm9tICdwcmltZW5nL2lucHV0Z3JvdXAnO1xyXG5pbXBvcnQgeyBQb3BvdmVyTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9wb3BvdmVyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZm9ybWx5LXF1ZXJ5LWJ1aWxkZXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgU2VsZWN0TW9kdWxlLFxyXG4gICAgSW5wdXRUZXh0TW9kdWxlLFxyXG4gICAgQnV0dG9uTW9kdWxlLFxyXG4gICAgRGF0ZVBpY2tlck1vZHVsZSxcclxuICAgIENoZWNrYm94TW9kdWxlLFxyXG4gICAgUmFkaW9CdXR0b25Nb2R1bGUsXHJcbiAgICBGb3JtbHlGb3JtLFxyXG4gICAgVG9vbHRpcE1vZHVsZSxcclxuICAgIE1lbnVNb2R1bGUsXHJcbiAgICBUcmFuc2xhdGVNb2R1bGUsXHJcbiAgICAgSW5wdXRHcm91cE1vZHVsZSxcclxuICAgIElucHV0R3JvdXBBZGRvbk1vZHVsZSxcclxuICAgIFBvcG92ZXJNb2R1bGUsXHJcbiAgICBMaXN0Ym94TW9kdWxlXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vcXVlcnktYnVpbGRlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcXVlcnktYnVpbGRlci5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFF1ZXJ5QnVpbGRlckNvbXBvbmVudCBleHRlbmRzIEZpZWxkVHlwZTxGaWVsZFR5cGVDb25maWc+IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBwcml2YXRlIHF1ZXJ5QnVpbGRlclNlcnZpY2UgPSBpbmplY3QoUXVlcnlCdWlsZGVyU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gIHByaXZhdGUgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xyXG5cclxuICBncm91cHM6IGFueVtdID0gW107XHJcblxyXG4gIGxvZ2ljYWxPcGVyYXRvcnMgPSBbXHJcbiAgIHsgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2FuZCcpLCB2YWx1ZTogJ2FuZCcgfSxcclxuICB7IGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdvcicpLCB2YWx1ZTogJ29yJyB9XHJcbiAgXTtcclxuXHJcbiAgc2hvd0FwcGxpZWRGaWx0ZXJzID0gZmFsc2U7XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgLy8gSW5pdGlhbGl6ZSB3aXRoIGV4aXN0aW5nIHZhbHVlIG9yIGRlZmF1bHQgZ3JvdXAgd2l0aCBjb25kaXRpb25zXHJcbiAgICBpZiAodGhpcy5mb3JtQ29udHJvbC52YWx1ZSAmJiAoQXJyYXkuaXNBcnJheSh0aGlzLmZvcm1Db250cm9sLnZhbHVlKSAmJiB0aGlzLmZvcm1Db250cm9sLnZhbHVlLmxlbmd0aCA+IDApKSB7XHJcblxyXG4gICAgICB0aGlzLmluaXRpYWxpemVBcHBsaWVkQ29uZGl0aW9uc1dpdGhGaWVsZENvbmZpZ3MoKTtcclxuICAgICAgdGhpcy5pbml0aWFsaXplRGVmYXVsdENvbmRpdGlvbnMoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFN0YXJ0IHdpdGggZGVmYXVsdCBjb25kaXRpb25zIGZvciBpbXBvcnRhbnQgZmllbGRzXHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZURlZmF1bHRDb25kaXRpb25zKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRpYWxpemVBcHBsaWVkQ29uZGl0aW9uc1dpdGhGaWVsZENvbmZpZ3MoKSB7XHJcbiAgIHRoaXMuZ3JvdXBzID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZS5tYXAoKGdyb3VwOiBhbnksIGdyb3VwSW5kZXg6IG51bWJlcikgPT4gKHtcclxuICAgICAgICBsb2dpY2FsT3BlcmF0b3I6IGdyb3VwLmxvZ2ljYWxPcGVyYXRvciB8fCAnYW5kJyxcclxuICAgICAgICBncm91cExvZ2ljYWxPcGVyYXRvcjogZ3JvdXAuZ3JvdXBMb2dpY2FsT3BlcmF0b3IgfHwgJ2FuZCcsXHJcbiAgICAgICAgY29uZGl0aW9uczogdGhpcy5pbml0aWFsaXplQ29uZGl0aW9uc1dpdGhGaWVsZENvbmZpZ3MoZ3JvdXAuY29uZGl0aW9ucyB8fCBbXSwgZ3JvdXBJbmRleClcclxuICAgICAgfSkpO1xyXG4gIH1cclxucHJpdmF0ZSBpbml0aWFsaXplQ29uZGl0aW9uc1dpdGhGaWVsZENvbmZpZ3MoY29uZGl0aW9uczogYW55W10sIGdyb3VwSW5kZXg6IG51bWJlcik6IGFueVtdIHtcclxuICAgIHJldHVybiBjb25kaXRpb25zLm1hcCgoY29uZGl0aW9uLCBjb25kaXRpb25JbmRleCkgPT4gKHtcclxuICAgICAgLi4uY29uZGl0aW9uLFxyXG4gICAgICBvcGVyYXRvcnNGb3JGaWVsZCA6IHRoaXMuZ2V0T3BlcmF0b3JzRm9yRmllbGQoY29uZGl0aW9uLmZpZWxkKSxcclxuICAgICAgdmFsdWVGaWVsZENvbmZpZzogY29uZGl0aW9uLmZpZWxkID9cclxuICAgICAgICB0aGlzLmdlbmVyYXRlVmFsdWVGaWVsZENvbmZpZyhjb25kaXRpb24sIGdyb3VwSW5kZXgsIGNvbmRpdGlvbkluZGV4KSA6XHJcbiAgICAgICAgbnVsbFxyXG4gICAgfSkpO1xyXG4gIH1cclxuICAgcHJpdmF0ZSBpbml0aWFsaXplRGVmYXVsdENvbmRpdGlvbnMoKTogdm9pZCB7XHJcbiAgICAvLyBHZXQgZGVmYXVsdCBmaWVsZHMgdXNpbmcgdGhlIHNlcnZpY2UgbG9naWNcclxuICAgIGNvbnN0IGRlZmF1bHRGaWVsZHMgPSB0aGlzLmdldERlZmF1bHRGaWVsZHMoKTtcclxuXHJcbiAgICBjb25zdCBkZWZhdWx0Q29uZGl0aW9ucyA9IFtdO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZWZhdWx0RmllbGRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGZpZWxkID0gZGVmYXVsdEZpZWxkc1tpXTtcclxuICAgICAgZGVmYXVsdENvbmRpdGlvbnMucHVzaCh0aGlzLmNyZWF0ZURlZmF1bHRDb25kaXRpb24oZmllbGQsIDAsIGksZmllbGQucHJvcHM/Lm9wZXJhdG9yKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdGhpcy5ncm91cHMgPSBbe1xyXG4gICAgLy8gICBsb2dpY2FsT3BlcmF0b3I6ICdhbmQnLFxyXG4gICAgLy8gICBncm91cExvZ2ljYWxPcGVyYXRvcjogJ2FuZCcsXHJcbiAgICAvLyAgIGNvbmRpdGlvbnM6IGRlZmF1bHRDb25kaXRpb25zXHJcbiAgICAvLyB9XTtcclxuICAgIHRoaXMuZ3JvdXBzID0gW3tcclxuICBsb2dpY2FsT3BlcmF0b3I6ICdhbmQnLFxyXG4gIGdyb3VwTG9naWNhbE9wZXJhdG9yOiAnYW5kJyxcclxuICBjb25kaXRpb25zOiBkZWZhdWx0Q29uZGl0aW9ucy5maWx0ZXIoZGMgPT5cclxuICAgICF0aGlzLmdyb3Vwcz8uc29tZShnID0+XHJcbiAgICAgIGcuY29uZGl0aW9ucz8uc29tZSgoYzphbnkpID0+XHJcbiAgICAgICAgYy5maWVsZCA9PT0gZGMuZmllbGQgJiZcclxuICAgICAgICBjLm9wZXJhdG9yID09PSBkYy5vcGVyYXRvclxyXG4gICAgICApXHJcbiAgICApXHJcbiAgKVxyXG59XTtcclxuXHJcblxyXG4gICAgdGhpcy51cGRhdGVWYWx1ZSgpO1xyXG4gIH1cclxuIHRvZ2dsZUFwcGxpZWRGaWx0ZXJzKCkge1xyXG4gICAgaWYgKHRoaXMuc2hvd0FwcGxpZWRGaWx0ZXJzID09IHRydWUpIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplQXBwbGllZENvbmRpdGlvbnNXaXRoRmllbGRDb25maWdzKCk7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZURlZmF1bHRDb25kaXRpb25zKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgIHRoaXMuaW5pdGlhbGl6ZUFwcGxpZWRDb25kaXRpb25zV2l0aEZpZWxkQ29uZmlncygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zaG93QXBwbGllZEZpbHRlcnMgPSAhdGhpcy5zaG93QXBwbGllZEZpbHRlcnM7XHJcbiAgfVxyXG5vbkFuZENsaWNrKGdyb3VwOiBhbnksIGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICBncm91cC5sb2dpY2FsT3BlcmF0b3IgPSAnYW5kJztcclxuICB0aGlzLnVwZGF0ZVZhbHVlKCk7XHJcbn1cclxuXHJcbm9uT3JDbGljayhncm91cDogYW55LCBldmVudDogYW55KTogdm9pZCB7XHJcbiAgZ3JvdXAubG9naWNhbE9wZXJhdG9yID0gJ29yJztcclxuICB0aGlzLnVwZGF0ZVZhbHVlKCk7XHJcbn1cclxuXHJcblxyXG4gIGdldExvZ2ljYWxPcGVyYXRvclRleHQob3BlcmF0b3I6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgY29uc3Qgb3BlcmF0b3JNYXA6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XHJcbiAgJ2FuZCc6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2FuZCcpLFxyXG4gICdvcic6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ29yJyksXHJcbiAgJ25vdCc6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ25vdCcpXHJcbn07XHJcbiAgICByZXR1cm4gb3BlcmF0b3JNYXBbb3BlcmF0b3JdIHx8IG9wZXJhdG9yO1xyXG4gIH1cclxuXHJcblxyXG5cclxuXHJcbiAgcHJpdmF0ZSBnZXREZWZhdWx0RmllbGRzKCk6IGFueVtdIHtcclxuICAgIC8vIEdldCBhbGwgZmlsdGVyYWJsZSBmaWVsZHNcclxuICAgIGNvbnN0IGZpbHRlcmFibGVGaWVsZHMgPSB0aGlzLnByb3BzWydmaWVsZHMnXS5maWx0ZXIoKGZpZWxkOiBhbnkpID0+XHJcbiAgICAgIGZpZWxkLmZpbHRlcmFibGUgIT09IGZhbHNlICYmIGZpZWxkLmtleSAmJiB0aGlzLmlzU3VwcG9ydGVkRmllbGRUeXBlKGZpZWxkLnR5cGUpXHJcbiAgICApO1xyXG5cclxuICAgIC8vIElmIG5vIGZpbHRlcmFibGUgZmllbGRzLCByZXR1cm4gZW1wdHkgYXJyYXlcclxuICAgIGlmIChmaWx0ZXJhYmxlRmllbGRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0ZWRGaWVsZHMgPSBmaWx0ZXJhYmxlRmllbGRzO1xyXG4gICAgcmV0dXJuIHNlbGVjdGVkRmllbGRzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc1N1cHBvcnRlZEZpZWxkVHlwZShmaWVsZFR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgLy8gT25seSBpbmNsdWRlIGZpZWxkIHR5cGVzIHRoYXQgbWFrZSBzZW5zZSBmb3IgZmlsdGVyaW5nXHJcbiAgICBjb25zdCBzdXBwb3J0ZWRUeXBlcyA9IFsnaW5wdXQnLCAnbnVtYmVyJywgJ2RhdGVwaWNrZXInLCdjdXN0b20tZGF0ZXBpY2tlcicsICdzZWxlY3QnLCAnY2hlY2tib3gnLCAnZ2VuZXJpYy1zZWxlY3RvcicsICdzd2l0Y2gnLCAncmFkaW8nLCAndGV4dGFyZWEnXTtcclxuICAgIHJldHVybiBzdXBwb3J0ZWRUeXBlcy5pbmNsdWRlcyhmaWVsZFR5cGUpO1xyXG4gIH1cclxuZ2V0RmllbGRMYWJlbChrZXk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgY29uc3QgZiA9IHRoaXMucHJvcHNbJ2ZpZWxkcyddPy5maW5kKCh4OiBhbnkpID0+IHgua2V5ID09PSBrZXkpO1xyXG4gIHJldHVybiBmID8gZi5sYWJlbCA6ICcnO1xyXG59XHJcbiAgcHJpdmF0ZSBjcmVhdGVEZWZhdWx0Q29uZGl0aW9uKGZpZWxkOiBhbnksIGdyb3VwSW5kZXg6IG51bWJlciwgY29uZGl0aW9uSW5kZXg6IG51bWJlcixvcGVyYXRvcj86c3RyaW5nKTogYW55IHtcclxuICAgIGNvbnN0IGRlZmF1bHRDb25kaXRpb24gPSB7XHJcbiAgICAgIGZpZWxkOiBmaWVsZC5rZXksXHJcbiAgICAgIG9wZXJhdG9yOm9wZXJhdG9yID9vcGVyYXRvciA6IHRoaXMuZ2V0RGVmYXVsdE9wZXJhdG9yKGZpZWxkLnR5cGUpLFxyXG4gICAgICB2YWx1ZTogdGhpcy5nZXREZWZhdWx0VmFsdWUoZmllbGQudHlwZSksXHJcbiAgICAgIHZhbHVlRmllbGRDb25maWc6IG51bGwsXHJcbiAgICAgIG9wZXJhdG9yc0ZvckZpZWxkIDogdGhpcy5nZXRPcGVyYXRvcnNGb3JGaWVsZChmaWVsZCksXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIEdlbmVyYXRlIGZpZWxkIGNvbmZpZyBmb3IgdGhpcyBjb25kaXRpb25cclxuICAgIGRlZmF1bHRDb25kaXRpb24udmFsdWVGaWVsZENvbmZpZyA9IHRoaXMuZ2VuZXJhdGVWYWx1ZUZpZWxkQ29uZmlnKFxyXG4gICAgICBkZWZhdWx0Q29uZGl0aW9uLFxyXG4gICAgICBncm91cEluZGV4LFxyXG4gICAgICBjb25kaXRpb25JbmRleFxyXG4gICAgKSBhcyBhbnk7XHJcblxyXG4gICAgcmV0dXJuIGRlZmF1bHRDb25kaXRpb247XHJcbiAgfVxyXG5cclxuZ2V0IGZpbHRlckNvdW50KCl7XHJcbiAgICBjb25zdCBmaWx0ZXJzID0gKCh0aGlzLm1vZGVsPy5hZHZhbmNlZEZpbHRlcnMgPz8gW10pWzBdPy5jb25kaXRpb25zPy5sZW5ndGggfHwgMCkgK1xyXG4gICAgKCh0aGlzLm1vZGVsPy5zb3J0aW5nID8/IFtdKT8ubGVuZ3RoIHx8IDApICtcclxuICAgICh0aGlzLm1vZGVsPy5wYWdpbmF0aW9uICYmIHRoaXMubW9kZWw/LnBhZ2luYXRpb24/LnRvcCA/IDEgOiAwKTtcclxuICAgIHJldHVybiBmaWx0ZXJzO1xyXG4gIH1cclxuICAvLyBGaWVsZCB0eXBlIGFuZCBvcGVyYXRvciBtZXRob2RzIHRoYXQgdXNlIFF1ZXJ5QnVpbGRlclNlcnZpY2UgbG9naWNcclxuICBnZXRGaWVsZFR5cGUoZmllbGRLZXk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMucHJvcHNbJ2ZpZWxkcyddLmZpbmQoKGY6IGFueSkgPT4gZi5rZXkgPT09IGZpZWxkS2V5KTtcclxuICAgIHJldHVybiBmaWVsZD8udHlwZSB8fCAnaW5wdXQnO1xyXG4gIH1cclxuXHJcbiAgIGdldE9wZXJhdG9yc0ZvckZpZWxkKGZpZWxkOiBhbnkpOiBhbnlbXSB7XHJcbiAgICBpZiAoIWZpZWxkKSByZXR1cm4gW107XHJcblxyXG4gICAgbGV0IGZpZWxkS2V5OiBzdHJpbmc7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBmaWVsZCA9PT0gJ29iamVjdCcgJiYgZmllbGQgIT09IG51bGwpIHtcclxuICAgICAgICBmaWVsZEtleSA9IGZpZWxkWydrZXknXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZmllbGRLZXkgPSBmaWVsZDtcclxuICAgIH1cclxuICAgIGNvbnN0IGZpZWxkXyA9IHRoaXMucHJvcHNbJ2ZpZWxkcyddLmZpbmQoKGY6IGFueSkgPT4gZi5rZXkgPT09IGZpZWxkS2V5KTtcclxuICAgIC8vIFVzZSBvcGVyYXRvcnMgZnJvbSB0aGUgZmllbGQgY29uZmlndXJhdGlvblxyXG4gICAgY29uc3Qgb3BlcmF0b3JzID0gZmllbGRfPy5vcGVyYXRvcnMgfHwgdGhpcy5xdWVyeUJ1aWxkZXJTZXJ2aWNlWydnZXRPcGVyYXRvcnNGb3JUeXBlJ10oZmllbGRfPy50eXBlKTtcclxuXHJcbiAgICByZXR1cm4gb3BlcmF0b3JzLm1hcCgob3A6IHN0cmluZykgPT4gKHtcclxuICAgICAgbGFiZWw6IHRoaXMuZ2V0T3BlcmF0b3JMYWJlbChvcCkubGFiZWwsXHJcbiAgICAgIGljb246IHRoaXMuZ2V0T3BlcmF0b3JMYWJlbChvcCkuaWNvbixcclxuICAgICAgdmFsdWU6IG9wXHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuXHJcbmdldE9wZXJhdG9yTGFiZWwob3BlcmF0b3I6IHN0cmluZyk6IHsgbGFiZWw6IHN0cmluZzsgaWNvbjogc3RyaW5nIH0ge1xyXG4gIGNvbnN0IG1hcDogeyBba2V5OiBzdHJpbmddOiB7IGxhYmVsOiBzdHJpbmc7IGljb246IHN0cmluZyB9IH0gPSB7XHJcbiAgICBlcTogeyBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZXEnKSwgaWNvbjogJ3BpIHBpLWVxdWFscycgfSxcclxuICAgIG5lOiB7IGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCduZScpLCBpY29uOiAncGkgcGktaGFzaHRhZycgfSxcclxuICAgIGNvbnRhaW5zOiB7IGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdjb250YWlucycpLCBpY29uOiAncGkgcGktc2VhcmNoJyB9LFxyXG4gICAgc3RhcnRzd2l0aDogeyBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnc3RhcnRzd2l0aCcpLCBpY29uOiAncGkgcGktYXJyb3ctcmlnaHQnIH0sXHJcbiAgICBlbmRzd2l0aDogeyBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW5kc3dpdGgnKSwgaWNvbjogJ3BpIHBpLWFycm93LWxlZnQnIH0sXHJcbiAgICBndDogeyBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZ3QnKSwgaWNvbjogJ3BpIHBpLWNoZXZyb24tcmlnaHQnIH0sXHJcbiAgICBnZTogeyBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZ2UnKSwgaWNvbjogJ3BpIHBpLWFuZ2xlLWRvdWJsZS1yaWdodCcgfSxcclxuICAgIGx0OiB7IGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdsdCcpLCBpY29uOiAncGkgcGktY2hldnJvbi1sZWZ0JyB9LFxyXG4gICAgbGU6IHsgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2xlJyksIGljb246ICdwaSBwaS1hbmdsZS1kb3VibGUtbGVmdCcgfSxcclxuICAgIGluOiB7IGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdpbicpLCBpY29uOiAncGkgcGktbGlzdCcgfSxcclxuICAgIG5vdGluOiB7IGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdub3RpbicpLCBpY29uOiAncGkgcGktYmFuJyB9LFxyXG4gIH07XHJcblxyXG4gIHJldHVybiBtYXBbb3BlcmF0b3JdIHx8IHsgbGFiZWw6IG9wZXJhdG9yLCBpY29uOiAncGkgcGktcXVlc3Rpb24nIH07XHJcbn1cclxuXHJcblxyXG5cclxuICAgZ2V0RGVmYXVsdE9wZXJhdG9yKGZpZWxkVHlwZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIC8vIFVzZSBzZXJ2aWNlJ3MgZmllbGQgdHlwZSBjb25maWdcclxuICAgIGNvbnN0IGZpZWxkQ29uZmlnID0gdGhpcy5xdWVyeUJ1aWxkZXJTZXJ2aWNlWydmaWVsZFR5cGVDb25maWcnXVtmaWVsZFR5cGUgYXMga2V5b2YgdHlwZW9mIHRoaXMucXVlcnlCdWlsZGVyU2VydmljZVsnZmllbGRUeXBlQ29uZmlnJ11dO1xyXG4gICAgcmV0dXJuIGZpZWxkQ29uZmlnID8gZmllbGRDb25maWcuZGVmYXVsdE9wZXJhdG9yIDogJ2NvbnRhaW5zJztcclxuICB9XHJcblxyXG4gIGdldERlZmF1bHRWYWx1ZShmaWVsZFR5cGU6IHN0cmluZyk6IGFueSB7XHJcbiAgICAvLyBVc2Ugc2VydmljZSdzIGZpZWxkIHR5cGUgY29uZmlnXHJcbiAgICBjb25zdCBmaWVsZENvbmZpZyA9IHRoaXMucXVlcnlCdWlsZGVyU2VydmljZVsnZmllbGRUeXBlQ29uZmlnJ11bZmllbGRUeXBlIGFzIGtleW9mIHR5cGVvZiB0aGlzLnF1ZXJ5QnVpbGRlclNlcnZpY2VbJ2ZpZWxkVHlwZUNvbmZpZyddXTtcclxuICAgIHJldHVybiBmaWVsZENvbmZpZyA/IGZpZWxkQ29uZmlnLmRlZmF1bHRWYWx1ZSA6ICcnO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICBnZXRGaWVsZFByb3BzKGZpZWxkS2V5OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgY29uc3QgZmllbGQgPSB0aGlzLnByb3BzWydmaWVsZHMnXS5maW5kKChmOiBhbnkpID0+IGYua2V5ID09PSBmaWVsZEtleSk7XHJcbiAgICAvLyBSZXR1cm4gcHJvcHMgd2l0aG91dCBsYWJlbCB0byBhdm9pZCBkdXBsaWNhdGlvblxyXG4gICAgY29uc3QgcHJvcHMgPSB7IC4uLmZpZWxkPy5wcm9wcyB9O1xyXG4gICAgZGVsZXRlIHByb3BzLmxhYmVsO1xyXG4gICAgZGVsZXRlIHByb3BzLmxvYWREZWZhdWx0O1xyXG4gICAgcmV0dXJuIHByb3BzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZVZhbHVlRmllbGRDb25maWcoY29uZGl0aW9uOiBhbnksIGdyb3VwSW5kZXg6IG51bWJlciwgY29uZGl0aW9uSW5kZXg6IG51bWJlcik6IEZvcm1seUZpZWxkQ29uZmlnIHtcclxuICAgIGNvbnN0IGZpZWxkVHlwZSA9IHRoaXMuZ2V0RmllbGRUeXBlKGNvbmRpdGlvbi5maWVsZCk7XHJcbiAgICBjb25zdCBmaWVsZFByb3BzID0gdGhpcy5nZXRGaWVsZFByb3BzKGNvbmRpdGlvbi5maWVsZCk7XHJcbiAgICBjb25zdCBmaWVsZEtleSA9IHRoaXMuZ2V0Q29uZGl0aW9uVmFsdWVLZXkoZ3JvdXBJbmRleCwgY29uZGl0aW9uSW5kZXgpO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGtleTogZmllbGRLZXksXHJcbiAgICAgIHR5cGU6IGZpZWxkVHlwZSxcclxuICAgICAgd3JhcHBlcnM6W10sXHJcbiAgICAgIHByb3BzOiB7XHJcbiAgICAgICAgLi4uZmllbGRQcm9wcywgLy8gSW5jbHVkZSBhbGwgb3RoZXIgcHJvcHMgZnJvbSB0aGUgb3JpZ2luYWwgZmllbGRcclxuICAgICAgICBwbGFjZWhvbGRlcjonJyxcclxuICAgICAgICBsb2FkRGVmYXVsdDpmYWxzZSxcclxuICAgICAgICBjaGFuZ2U6IChmaWVsZDogRm9ybWx5RmllbGRDb25maWcsIGV2ZW50PzogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBob29rczoge1xyXG4gICAgICAgIG9uSW5pdDogKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZykgPT4ge1xyXG4gICAgICAgICAgaWYgKGZpZWxkLmZvcm1Db250cm9sICYmIGNvbmRpdGlvbi52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGZpZWxkLmZvcm1Db250cm9sLnNldFZhbHVlKGNvbmRpdGlvbi52YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgbW9kZWxPcHRpb25zOiB7XHJcbiAgICAgICAgdXBkYXRlT246ICdjaGFuZ2UnXHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXRDb25kaXRpb25WYWx1ZUtleShncm91cEluZGV4OiBudW1iZXIsIGNvbmRpdGlvbkluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGBjb25kaXRpb25fJHtncm91cEluZGV4fV8ke2NvbmRpdGlvbkluZGV4fV92YWx1ZWA7XHJcbiAgfVxyXG5cclxuICAvLyBHcm91cCBNYW5hZ2VtZW50XHJcbiAgYWRkR3JvdXAoKSB7XHJcbiAgICB0aGlzLmdyb3Vwcy5wdXNoKHtcclxuICAgICAgbG9naWNhbE9wZXJhdG9yOiAnYW5kJyxcclxuICAgICAgZ3JvdXBMb2dpY2FsT3BlcmF0b3I6ICdhbmQnLFxyXG4gICAgICBjb25kaXRpb25zOiBbXVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7XHJcbiAgfVxyXG5cclxuICAvLyByZW1vdmVHcm91cChncm91cEluZGV4OiBudW1iZXIpIHtcclxuICAvLyAgIHRoaXMuZ3JvdXBzLnNwbGljZShncm91cEluZGV4LCAxKTtcclxuICAvLyAgIHRoaXMudXBkYXRlVmFsdWUoKTtcclxuICAvLyB9XHJcbnJlbW92ZUdyb3VwKGdyb3VwSW5kZXg6IG51bWJlcikge1xyXG4gIGlmICh0aGlzLmdyb3Vwc1tncm91cEluZGV4XSkge1xyXG4gICAgLy8gR2V0IGFsbCBmaWVsZCBrZXlzIGZvciB0aGlzIGdyb3VwIGJlZm9yZSBkZWxldGluZ1xyXG4gICAgY29uc3QgZmllbGRLZXlzVG9SZW1vdmU6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgLy8gQ29sbGVjdCBhbGwgY29uZGl0aW9uIGZpZWxkIGtleXMgaW4gdGhpcyBncm91cFxyXG4gICAgaWYgKHRoaXMuZ3JvdXBzW2dyb3VwSW5kZXhdLmNvbmRpdGlvbnMpIHtcclxuICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmdyb3Vwc1tncm91cEluZGV4XS5jb25kaXRpb25zLmxlbmd0aDsgYysrKSB7XHJcbiAgICAgICAgY29uc3QgZmllbGRLZXkgPSB0aGlzLmdldENvbmRpdGlvblZhbHVlS2V5KGdyb3VwSW5kZXgsIGMpO1xyXG4gICAgICAgIGZpZWxkS2V5c1RvUmVtb3ZlLnB1c2goZmllbGRLZXkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVtb3ZlIHRoZSBncm91cFxyXG4gICAgdGhpcy5ncm91cHMuc3BsaWNlKGdyb3VwSW5kZXgsIDEpO1xyXG5cclxuICAgIC8vIFJlbW92ZSBhbGwgYXNzb2NpYXRlZCBmaWVsZHMgZnJvbSBtb2RlbFxyXG4gICAgdGhpcy5yZW1vdmVNdWx0aXBsZUZyb21Nb2RlbChmaWVsZEtleXNUb1JlbW92ZSk7XHJcblxyXG4gICAgdGhpcy51cGRhdGVWYWx1ZSgpO1xyXG4gIH1cclxufVxyXG5cclxuLy8gUmVtb3ZlIG11bHRpcGxlIGZpZWxkcyBmcm9tIGZvcm1seSBtb2RlbFxyXG5yZW1vdmVNdWx0aXBsZUZyb21Nb2RlbChmaWVsZEtleXM6IHN0cmluZ1tdKSB7XHJcbiAgZmllbGRLZXlzLmZvckVhY2goZmllbGRLZXkgPT4ge1xyXG4gICAgdGhpcy5yZW1vdmVGcm9tTW9kZWwoZmllbGRLZXkpO1xyXG4gIH0pO1xyXG59XHJcbiAgLy8gQ29uZGl0aW9uIE1hbmFnZW1lbnRcclxuICBhZGRDb25kaXRpb24oZ3JvdXBJbmRleDogbnVtYmVyID0gMCkge1xyXG4gICAgaWYgKCF0aGlzLmdyb3Vwc1tncm91cEluZGV4XSkge1xyXG4gICAgICB0aGlzLmFkZEdyb3VwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbmV3Q29uZGl0aW9uID0ge1xyXG4gICAgICBmaWVsZDogJycsXHJcbiAgICAgIG9wZXJhdG9yOiAnZXEnLFxyXG4gICAgICB2YWx1ZTogJycsXHJcbiAgICAgIHZhbHVlRmllbGRDb25maWc6IHt9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGNvbmRpdGlvbkluZGV4ID0gdGhpcy5ncm91cHNbZ3JvdXBJbmRleF0uY29uZGl0aW9ucy5sZW5ndGg7XHJcbiAgICBuZXdDb25kaXRpb24udmFsdWVGaWVsZENvbmZpZyA9IHRoaXMuZ2VuZXJhdGVWYWx1ZUZpZWxkQ29uZmlnKG5ld0NvbmRpdGlvbiwgZ3JvdXBJbmRleCwgY29uZGl0aW9uSW5kZXgpO1xyXG5cclxuICAgIHRoaXMuZ3JvdXBzW2dyb3VwSW5kZXhdLmNvbmRpdGlvbnMucHVzaChuZXdDb25kaXRpb24pO1xyXG4gICAgdGhpcy51cGRhdGVWYWx1ZSgpO1xyXG4gIH1cclxuXHJcbiAgb25GaWVsZENoYW5nZShjb25kaXRpb246IGFueSwgZ3JvdXBJbmRleDogbnVtYmVyLCBjb25kaXRpb25JbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25kaXRpb24ub3BlcmF0b3IgPSB0aGlzLmdldERlZmF1bHRPcGVyYXRvcih0aGlzLmdldEZpZWxkVHlwZShjb25kaXRpb24uZmllbGQpKTtcclxuICAgIGNvbmRpdGlvbi52YWx1ZSA9IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKHRoaXMuZ2V0RmllbGRUeXBlKGNvbmRpdGlvbi5maWVsZCkpO1xyXG5cclxuICAgIC8vIEdlbmVyYXRlIGFuZCBzdG9yZSB0aGUgZmllbGQgY29uZmlnIHdoZW4gZmllbGQgY2hhbmdlc1xyXG4gICAgY29uZGl0aW9uLnZhbHVlRmllbGRDb25maWcgPSB0aGlzLmdlbmVyYXRlVmFsdWVGaWVsZENvbmZpZyhjb25kaXRpb24sIGdyb3VwSW5kZXgsIGNvbmRpdGlvbkluZGV4KTtcclxuICAgIGNvbmRpdGlvbi5vcGVyYXRvcnNGb3JGaWVsZCA9IHRoaXMuZ2V0T3BlcmF0b3JzRm9yRmllbGQoY29uZGl0aW9uLmZpZWxkKTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7XHJcbiAgfVxyXG5cclxuICBhZGRDb25kaXRpb25Ub0xhc3RHcm91cCgpIHtcclxuICAgIGNvbnN0IGxhc3RHcm91cEluZGV4ID0gdGhpcy5ncm91cHMubGVuZ3RoIC0gMTtcclxuICAgIGlmIChsYXN0R3JvdXBJbmRleCA+PSAwKSB7XHJcbiAgICAgIHRoaXMuYWRkQ29uZGl0aW9uKGxhc3RHcm91cEluZGV4KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWRkR3JvdXAoKTtcclxuICAgICAgdGhpcy5hZGRDb25kaXRpb24oMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVDb25kaXRpb24oZ3JvdXBJbmRleDogbnVtYmVyLCBjb25kaXRpb25JbmRleDogbnVtYmVyKSB7XHJcbiAgaWYgKHRoaXMuZ3JvdXBzW2dyb3VwSW5kZXhdKSB7XHJcblxyXG4gICAgLy8gR2V0IHRoZSBmaWVsZCBrZXkgYmVmb3JlIGRlbGV0aW5nIHNvIHdlIGNhbiByZW1vdmUgZnJvbSBtb2RlbFxyXG4gICAgY29uc3QgZmllbGRLZXkgPSB0aGlzLmdldENvbmRpdGlvblZhbHVlS2V5KGdyb3VwSW5kZXgsIGNvbmRpdGlvbkluZGV4KTtcclxuXHJcbiAgICAvLyBVc2luZyBkZWxldGUgb3BlcmF0b3IgKHNldHMgdG8gdW5kZWZpbmVkLCB0aGVuIHdlIGZpbHRlcilcclxuICAgIGRlbGV0ZSB0aGlzLmdyb3Vwc1tncm91cEluZGV4XS5jb25kaXRpb25zW2NvbmRpdGlvbkluZGV4XTtcclxuXHJcbiAgICAvLyBSZW1vdmUgdGhlIHVuZGVmaW5lZCBlbnRyaWVzIGZyb20gY29uZGl0aW9ucyBhcnJheVxyXG4gICAgdGhpcy5ncm91cHNbZ3JvdXBJbmRleF0uY29uZGl0aW9ucyA9IHRoaXMuZ3JvdXBzW2dyb3VwSW5kZXhdLmNvbmRpdGlvbnMuZmlsdGVyKChjb25kaXRpb246IGFueSkgPT4gY29uZGl0aW9uICE9PSB1bmRlZmluZWQpO1xyXG5cclxuICAgIC8vIFJlbW92ZSBlbXB0eSBncm91cHNcclxuICAgIGlmICh0aGlzLmdyb3Vwc1tncm91cEluZGV4XS5jb25kaXRpb25zLmxlbmd0aCA9PT0gMCAmJiB0aGlzLmdyb3Vwcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgIGRlbGV0ZSB0aGlzLmdyb3Vwc1tncm91cEluZGV4XTtcclxuICAgICAgLy8gUmVtb3ZlIHVuZGVmaW5lZCBncm91cHMgZnJvbSBhcnJheVxyXG4gICAgICB0aGlzLmdyb3VwcyA9IHRoaXMuZ3JvdXBzLmZpbHRlcihncm91cCA9PiBncm91cCAhPT0gdW5kZWZpbmVkKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZW1vdmUgZnJvbSBmb3JtbHkgbW9kZWxcclxuICAgIHRoaXMucmVtb3ZlRnJvbU1vZGVsKGZpZWxkS2V5KTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7XHJcbiAgfVxyXG59XHJcblxyXG4vLyBSZW1vdmUgdGhlIGZpZWxkIGZyb20gZm9ybWx5IG1vZGVsXHJcbnJlbW92ZUZyb21Nb2RlbChmaWVsZEtleTogc3RyaW5nKSB7XHJcbiAgaWYgKHRoaXMubW9kZWwgJiYgdGhpcy5tb2RlbC5oYXNPd25Qcm9wZXJ0eShmaWVsZEtleSkpIHtcclxuICAgIGRlbGV0ZSB0aGlzLm1vZGVsW2ZpZWxkS2V5XTtcclxuICB9XHJcblxyXG4gIC8vIEFsc28gdXBkYXRlIHRoZSBmb3JtIGNvbnRyb2wgdG8gZW5zdXJlIHN5bmNcclxuICBpZiAodGhpcy5mb3JtQ29udHJvbC52YWx1ZSAmJiB0aGlzLmZvcm1Db250cm9sLnZhbHVlLmhhc093blByb3BlcnR5KGZpZWxkS2V5KSkge1xyXG4gICAgY29uc3QgdXBkYXRlZFZhbHVlID0geyAuLi50aGlzLmZvcm1Db250cm9sLnZhbHVlIH07XHJcbiAgICBkZWxldGUgdXBkYXRlZFZhbHVlW2ZpZWxkS2V5XTtcclxuICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUodXBkYXRlZFZhbHVlKTtcclxuICB9XHJcbn1cclxuXHJcbiAgLy8gVmFsdWUgTWFuYWdlbWVudFxyXG4gIHVwZGF0ZVZhbHVlKCkge1xyXG4gICAgLy8gU3luYyBjb25kaXRpb24gdmFsdWVzIGZyb20gZm9ybSBtb2RlbCB3aXRoIHNhZmUgYWNjZXNzXHJcbiAgICBmb3IgKGxldCBnID0gMDsgZyA8IHRoaXMuZ3JvdXBzLmxlbmd0aDsgZysrKSB7XHJcbiAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5ncm91cHNbZ107XHJcbiAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgZ3JvdXAuY29uZGl0aW9ucy5sZW5ndGg7IGMrKykge1xyXG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbiA9IGdyb3VwLmNvbmRpdGlvbnNbY107XHJcbiAgICAgICAgY29uc3QgZmllbGRLZXkgPSB0aGlzLmdldENvbmRpdGlvblZhbHVlS2V5KGcsIGMpO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc3QgbW9kZWxWYWx1ZSA9IHRoaXMubW9kZWw/LltmaWVsZEtleV07XHJcblxyXG4gICAgICAgIGlmIChtb2RlbFZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGNvbmRpdGlvbi52YWx1ZSA9IG1vZGVsVmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGZpbHRlcmVkR3JvdXBzID0gW107XHJcbiAgICBmb3IgKGxldCBnID0gMDsgZyA8IHRoaXMuZ3JvdXBzLmxlbmd0aDsgZysrKSB7XHJcbiAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5ncm91cHNbZ107XHJcbiAgICAgIGNvbnN0IHZhbGlkQ29uZGl0aW9ucyA9IFtdO1xyXG5cclxuICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBncm91cC5jb25kaXRpb25zLmxlbmd0aDsgYysrKSB7XHJcbiAgICAgICAgY29uc3QgY29uZGl0aW9uID0gZ3JvdXAuY29uZGl0aW9uc1tjXTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBjb25kaXRpb24uZmllbGQgJiZcclxuICAgICAgICAgIGNvbmRpdGlvbi5vcGVyYXRvciAmJlxyXG4gICAgICAgICAgY29uZGl0aW9uLnZhbHVlICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgIGNvbmRpdGlvbi52YWx1ZSAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgY29uZGl0aW9uLnZhbHVlICE9PSAnJ1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdmFsaWRDb25kaXRpb25zLnB1c2goY29uZGl0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh2YWxpZENvbmRpdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGZpbHRlcmVkR3JvdXBzLnB1c2goeyAuLi5ncm91cCwgY29uZGl0aW9uczogdmFsaWRDb25kaXRpb25zIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShmaWx0ZXJlZEdyb3Vwcyk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBjbGVhckFsbCgpIHtcclxuICB0aGlzLmdyb3VwcyA9IFtdO1xyXG5cclxuICAvLyBDb21wbGV0ZWx5IHJlc2V0IHRoZSBmb3JtIGFuZCBtb2RlbFxyXG4gIHRoaXMuZm9ybS5yZXNldCgpO1xyXG5cclxuICAvLyBNYW51YWxseSBzZXQgbW9kZWwgdG8gZW1wdHkgb2JqZWN0XHJcbiAgT2JqZWN0LmtleXModGhpcy5tb2RlbCkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgZGVsZXRlIHRoaXMubW9kZWxba2V5XTtcclxuICB9KTtcclxuICB0aGlzLmFkZEdyb3VwKCk7XHJcbn1cclxuXHJcbiAgLy8gSGVscGVyIG1ldGhvZHNcclxuICBnZXRRdWVyeVN0cnVjdHVyZSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuZ3JvdXBzO1xyXG4gIH1cclxuXHJcbiAgbG9hZFF1ZXJ5U3RydWN0dXJlKHF1ZXJ5U3RydWN0dXJlOiBhbnlbXSkge1xyXG4gICAgaWYgKHF1ZXJ5U3RydWN0dXJlICYmIEFycmF5LmlzQXJyYXkocXVlcnlTdHJ1Y3R1cmUpKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBzID0gcXVlcnlTdHJ1Y3R1cmUubWFwKChncm91cCwgZ3JvdXBJbmRleCkgPT4gKHtcclxuICAgICAgICBsb2dpY2FsT3BlcmF0b3I6IGdyb3VwLmxvZ2ljYWxPcGVyYXRvciB8fCAnYW5kJyxcclxuICAgICAgICBncm91cExvZ2ljYWxPcGVyYXRvcjogZ3JvdXAuZ3JvdXBMb2dpY2FsT3BlcmF0b3IgfHwgJ2FuZCcsXHJcbiAgICAgICAgY29uZGl0aW9uczogdGhpcy5pbml0aWFsaXplQ29uZGl0aW9uc1dpdGhGaWVsZENvbmZpZ3MoZ3JvdXAuY29uZGl0aW9ucyB8fCBbXSwgZ3JvdXBJbmRleClcclxuICAgICAgfSkpO1xyXG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXY+XHJcblxyXG4gIDwhLS0gR3JvdXBzIENvbnRhaW5lciB3aXRoIENvbm5lY3RpbmcgTGluZXMgLS0+XHJcbiAgPGRpdiBjbGFzcz1cImdyb3Vwcy1jb250YWluZXJcIiAjZ3JvdXBzQ29udGFpbmVyPlxyXG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgZ3JvdXBzOyBsZXQgZ3JvdXBJbmRleCA9IGluZGV4XCJcclxuICAgICAgICAgY2xhc3M9XCJncm91cC13cmFwcGVyIHJlbGF0aXZlXCJcclxuICAgICAgICAgI2dyb3VwRWxlbWVudD5cclxuXHJcbiAgICAgPCEtLSBWZXJ0aWNhbCBDb25uZWN0b3IgTGluZSBmcm9tIFByZXZpb3VzIEdyb3VwIC0tPlxyXG48ZGl2ICpuZ0lmPVwiZ3JvdXBJbmRleCA+IDBcIiBjbGFzcz1cInZlcnRpY2FsLWNvbm5lY3RvclwiPlxyXG4gIDxkaXYgY2xhc3M9XCJ2ZXJ0aWNhbC1saW5lXCI+PC9kaXY+XHJcblxyXG4gIDwhLS0gT3BlcmF0b3IgQnV0dG9uIC0tPlxyXG4gIDxidXR0b25cclxuICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgY2xhc3M9XCJncm91cC1sb2dpY2FsLW9wZXJhdG9yLWJveFwiXHJcbiAgICBbY2xhc3MuYW5kXT1cImdyb3VwLmdyb3VwTG9naWNhbE9wZXJhdG9yID09PSAnYW5kJ1wiXHJcbiAgICBbY2xhc3Mub3JdPVwiZ3JvdXAuZ3JvdXBMb2dpY2FsT3BlcmF0b3IgPT09ICdvcidcIlxyXG4gICAgKGNsaWNrKT1cIm9wUG9wb3Zlci50b2dnbGUoJGV2ZW50KVwiPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJvcGVyYXRvci10ZXh0XCI+XHJcbiAgICAgIHt7IGdldExvZ2ljYWxPcGVyYXRvclRleHQoZ3JvdXAuZ3JvdXBMb2dpY2FsT3BlcmF0b3IgfHwgJ2FuZCcpIH19XHJcbiAgICA8L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29ubmVjdG9yLWFycm93XCI+PC9kaXY+XHJcbiAgPC9idXR0b24+XHJcblxyXG4gIDwhLS0gUG9wb3ZlciAtLT5cclxuICA8cC1wb3BvdmVyICNvcFBvcG92ZXIgYXBwZW5kVG89XCJib2R5XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidy0xMnJlbVwiPlxyXG4gICAgICA8cC1saXN0Ym94XHJcbiAgICAgICAgW29wdGlvbnNdPVwibG9naWNhbE9wZXJhdG9yc1wiXHJcbiAgICAgICAgb3B0aW9uTGFiZWw9XCJsYWJlbFwiXHJcbiAgICAgICAgb3B0aW9uVmFsdWU9XCJ2YWx1ZVwiXHJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJncm91cC5ncm91cExvZ2ljYWxPcGVyYXRvclwiXHJcbiAgICAgICAgKG9uQ2hhbmdlKT1cIiBvcFBvcG92ZXIudG9nZ2xlKCRldmVudClcIlxyXG4gICAgICAgIFtzdHlsZV09XCJ7IHdpZHRoOiAnMTAwJScgfVwiPlxyXG4gICAgICA8L3AtbGlzdGJveD5cclxuICAgIDwvZGl2PlxyXG4gIDwvcC1wb3BvdmVyPlxyXG48L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJncm91cC1jb250YWluZXIgbWItNiBwLTEgYmctd2hpdGUgcm91bmRlZC1sZyBib3JkZXItbC00IGJvcmRlci10LTEgYm9yZGVyLWItMSBib3JkZXItci0xICBzaGFkb3ctc20gdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMzAwIHJlbGF0aXZlXCJcclxuICAgICAgICAgICBbY2xhc3MuYm9yZGVyLWJsdWUtNTAwXT1cImdyb3VwLmxvZ2ljYWxPcGVyYXRvciA9PT0gJ2FuZCdcIlxyXG4gICAgICAgICAgIFtjbGFzcy5ib3JkZXItb3ItNTAwXT1cImdyb3VwLmxvZ2ljYWxPcGVyYXRvciA9PT0gJ29yJ1wiXHJcbiAgICAgICAgICAgW2NsYXNzLnB1bHNlXT1cImdyb3VwSW5kZXggPT09IDBcIj5cclxuXHJcbiAgICAgICAgPCEtLSBSb3VuZGVkIEJ1dHRvbiBmb3IgXCLYsdio2Lcg2KfZhNi02LHZiNi3XCIgb24gbGVmdCBib3JkZXIgLS0+XHJcbjxkaXZcclxuICBjbGFzcz1cImFic29sdXRlIC1sZWZ0LTQgdG9wLTEvMiB0cmFuc2Zvcm0gLXRyYW5zbGF0ZS15LTEvMiB6LTEwIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMFwiXHJcblxyXG4+XHJcblxyXG5cclxuXHJcbjwhLS0gTG9naWNhbCBPcGVyYXRvciBQb3BvdmVyIEJ1dHRvbiAtLT5cclxuPHAtYnV0dG9uXHJcbiAgW3NldmVyaXR5XT1cImdyb3VwLmxvZ2ljYWxPcGVyYXRvciA9PT0gJ2FuZCcgPyAnc3VjY2VzcycgOiAnaW5mbydcIlxyXG4gIFtzdHlsZUNsYXNzXT1cImdyb3VwLmxvZ2ljYWxPcGVyYXRvciA9PT0gJ2FuZCdcclxuICAgID8gJ3AtYnV0dG9uLWljb24tb25seSBwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXNtIGxvZ2ljYWwtYW5kJ1xyXG4gICAgOiAncC1idXR0b24taWNvbi1vbmx5IHAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tc20gbG9naWNhbC1vcidcIlxyXG4gIChjbGljayk9XCJvcFBvcG92ZXIudG9nZ2xlKCRldmVudClcIj5cclxuICB7e2dyb3VwLmxvZ2ljYWxPcGVyYXRvciA9PT0gJ2FuZCcgPyAoJ2FuZCcgfCB0cmFuc2xhdGUpIDogKCdvcicgfCB0cmFuc2xhdGUpfX1cclxuPC9wLWJ1dHRvbj5cclxuXHJcbjwhLS0gUG9wb3ZlciBmb3IgT3BlcmF0b3IgU2VsZWN0aW9uIC0tPlxyXG48cC1wb3BvdmVyICNvcFBvcG92ZXIgYXBwZW5kVG89XCJib2R5XCI+XHJcbiAgPGRpdiBjbGFzcz1cInctMTByZW1cIj5cclxuICAgIDxwLWxpc3Rib3hcclxuICAgICAgW29wdGlvbnNdPVwiW1xyXG4gICAgICAgIHsgbGFiZWw6ICdhbmQnIHwgdHJhbnNsYXRlLCB2YWx1ZTogJ2FuZCcgfSxcclxuICAgICAgICB7IGxhYmVsOiAnb3InIHwgdHJhbnNsYXRlLCB2YWx1ZTogJ29yJyB9XHJcbiAgICAgIF1cIlxyXG4gICAgICBvcHRpb25MYWJlbD1cImxhYmVsXCJcclxuICAgICAgb3B0aW9uVmFsdWU9XCJ2YWx1ZVwiXHJcbiAgICAgIFsobmdNb2RlbCldPVwiZ3JvdXAubG9naWNhbE9wZXJhdG9yXCJcclxuICAgICAgKG9uQ2hhbmdlKT1cInVwZGF0ZVZhbHVlKCk7IG9wUG9wb3Zlci50b2dnbGUoJGV2ZW50KVwiXHJcbiAgICAgIFtzdHlsZV09XCJ7IHdpZHRoOiAnMTAwJScgfVwiPlxyXG4gICAgICA8bmctdGVtcGxhdGUgbGV0LWl0ZW0gcFRlbXBsYXRlPVwiaXRlbVwiPlxyXG4gICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvcC1saXN0Ym94PlxyXG4gIDwvZGl2PlxyXG48L3AtcG9wb3Zlcj5cclxuXHJcbjwvZGl2PlxyXG5cclxuXHJcblxyXG4gICAgICAgIDwhLS0gR3JvdXAgSGVhZGVyIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJncm91cC1oZWFkZXItd3JhcHBlciBtYi00IHBsLThcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJncm91cC1oZWFkZXIgZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyXCI+XHJcblxyXG4gICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0xXCI+XHJcbiAgPGJ1dHRvblxyXG4gICAgcEJ1dHRvblxyXG4gICAgaWNvbj1cInBpIHBpLXBsdXNcIlxyXG4gICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICBjbGFzcz1cInAtYnV0dG9uLXN1Y2Nlc3MgcC1idXR0b24gcC1idXR0b24tc20gIXAtMS41IHJvdW5kZWQtbWQgdHJhbnNpdGlvbi1jb2xvcnNcIlxyXG4gICAgKGNsaWNrKT1cImFkZENvbmRpdGlvbihncm91cEluZGV4KVwiXHJcbiAgICBwVG9vbHRpcD1cInt7ICdBRERfQ09ORElUSU9OJyB8IHRyYW5zbGF0ZSB9fVwiXHJcbiAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cclxuICA8L2J1dHRvbj5cclxuICA8IS0tIEBpZiAoZmlsdGVyQ291bnQgPiAwKSB7XHJcbiAgICAgPGJ1dHRvblxyXG4gICAgcEJ1dHRvblxyXG4gICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICBpY29uPVwicGkgcGktZmlsdGVyXCJcclxuICAgIGNsYXNzPVwicC1idXR0b24tb3V0bGluZWQgcC1idXR0b24tc21cIlxyXG4gICAgKGNsaWNrKT1cInRvZ2dsZUFwcGxpZWRGaWx0ZXJzKClcIj5cclxuICAgIHt7IChzaG93QXBwbGllZEZpbHRlcnMgPyAnU0hPV19BTEwnIDogJ1NIT1dfQVBQTElFRCcpIHwgdHJhbnNsYXRlIH19XHJcbiAgPC9idXR0b24+XHJcbiAgfSAtLT5cclxuICA8YnV0dG9uXHJcbiAgICAqbmdJZj1cImdyb3Vwcy5sZW5ndGggPiAxXCJcclxuICAgIHBCdXR0b25cclxuICAgIGljb249XCJwaSBwaS10aW1lc1wiXHJcbiAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgIGNsYXNzPVwicC1idXR0b24tZGFuZ2VyIHAtYnV0dG9uIHAtYnV0dG9uLXNtICFwLTEuNSByb3VuZGVkLW1kIHRyYW5zaXRpb24tY29sb3JzXCJcclxuICAgIChjbGljayk9XCJyZW1vdmVHcm91cChncm91cEluZGV4KVwiXHJcbiAgICBwVG9vbHRpcD1cInt7ICdERUxFVEVfR1JPVVAnIHwgdHJhbnNsYXRlIH19XCJcclxuICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxyXG4gIDwvYnV0dG9uPlxyXG48L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIENvbmRpdGlvbnMgaW4gdGhpcyBncm91cCAtLT5cclxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb25kaXRpb24gb2YgZ3JvdXAuY29uZGl0aW9uczsgbGV0IGNvbmRpdGlvbkluZGV4ID0gaW5kZXhcIlxyXG4gICAgICAgICAgICAgY2xhc3M9XCJwLTEgYmctZ3JheS01MCAgXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBncmlkLWNvbHMtMSAgZ2FwLTEgaXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDwhLS0gRmllbGQgU2VsZWN0b3IgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZDpjb2wtc3Bhbi0yXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCByb3VuZGVkLW1kIG92ZXJmbG93LWhpZGRlbiBib3JkZXIgYm9yZGVyLWdyYXktMzAwIGJnLXdoaXRlIHNoYWRvdy1zbVwiPlxyXG4gIDwhLS0gRmllbGQgU2VsZWN0b3IgQnV0dG9uIC0tPlxyXG4gIDxkaXYgc3R5bGU9XCJhbGlnbi1pdGVtczogY2VudGVyO2Rpc3BsYXk6IGZsZXg7ICAgIG1pbi13aWR0aDogMTMwcHg7bWF4LXdpZHRoOiAxMzBweDtcIiBjbGFzcz1cImZsZXgtc2hyaW5rLTAgXCI+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBzdHlsZT1cImhlaWdodDogLXdlYmtpdC1maWxsLWF2YWlsYWJsZTtcIlxyXG4gICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiB3LWZ1bGwgcHgtMyBweS0yIHRleHQtc20gYmctd2hpdGUgaG92ZXI6YmctZ3JheS01MCBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0yICBmb2N1czp6LTEwXCJcclxuICAgICAgKGNsaWNrKT1cIm92ZXJsYXkudG9nZ2xlKCRldmVudClcIj5cclxuICAgICAgPHNwYW4gIHN0eWxlPVwiXHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICBtYXgtd2lkdGg6IDEwMHB4O1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xyXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcclxuICBcIj57eyBnZXRGaWVsZExhYmVsKGNvbmRpdGlvbi5maWVsZCkgfHwgKCdTRUxFQ1RfRklFTEQnIHwgdHJhbnNsYXRlKSB9fTwvc3Bhbj5cclxuICAgICAgPGkgY2xhc3M9XCJwaSBwaS1jaGV2cm9uLWRvd24gbXItMiBtbC0yIHRleHQteHNcIj48L2k+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8IS0tIE92ZXJsYXkgQ29udGVudCAtLT5cclxuICAgIDxwLXBvcG92ZXIgI292ZXJsYXkgYXBwZW5kVG89XCJib2R5XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3LTYwXCI+XHJcbiAgICAgICAgPHAtbGlzdGJveFxyXG4gICAgICAgIHRhYmluZGV4PVwiMFwiXHJcbiAgICAgICAgICBbb3B0aW9uc109XCJwcm9wc1snZmllbGRzJ11cIlxyXG4gICAgICAgICAgb3B0aW9uTGFiZWw9XCJsYWJlbFwiXHJcbiAgICAgICAgICBvcHRpb25WYWx1ZT1cImtleVwiXHJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbmRpdGlvbi5maWVsZFwiXHJcbiAgICAgICAgICAob25DaGFuZ2UpPVwib25GaWVsZENoYW5nZShjb25kaXRpb24sIGdyb3VwSW5kZXgsIGNvbmRpdGlvbkluZGV4KTsgb3ZlcmxheS50b2dnbGUoJGV2ZW50KVwiXHJcbiAgICAgICAgICBbc3R5bGVdPVwieyB3aWR0aDogJzEwMCUnIH1cIj5cclxuICAgICAgICA8L3AtbGlzdGJveD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L3AtcG9wb3Zlcj5cclxuICA8L2Rpdj5cclxuIDwhLS0gT3BlcmF0b3IgQnV0dG9uIC0tPlxyXG4gIDxkaXYgc3R5bGU9XCJhbGlnbi1pdGVtczogY2VudGVyO2Rpc3BsYXk6IGZsZXg7XCIgIGNsYXNzPVwiZmxleC1zaHJpbmstMCBib3JkZXItbCBib3JkZXItciBib3JkZXItZ3JheS0zMDBcIj5cclxuICAgIDxidXR0b25cclxuICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctZnVsbCBweC0zIHB5LTIgdGV4dC1zbSBiZy1ncmF5LTUwIGhvdmVyOmJnLWdyYXktMTAwIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTIgIGZvY3VzOnotMTBcIlxyXG4gICAgICBzdHlsZT1cImhlaWdodDogLXdlYmtpdC1maWxsLWF2YWlsYWJsZTtcIlxyXG4gICAgICBwVG9vbHRpcD1cInt7IGdldE9wZXJhdG9yTGFiZWwoY29uZGl0aW9uLm9wZXJhdG9yKS5sYWJlbCB9fVwiXHJcbiAgICAgIChjbGljayk9XCJvcFBvcG92ZXIudG9nZ2xlKCRldmVudClcIj5cclxuICAgICAgPGkgW2NsYXNzXT1cImdldE9wZXJhdG9yTGFiZWwoY29uZGl0aW9uLm9wZXJhdG9yKS5pY29uXCI+PC9pPlxyXG4gICAgPC9idXR0b24+XHJcblxyXG4gICAgPHAtcG9wb3ZlciAjb3BQb3BvdmVyIGFwcGVuZFRvPVwiYm9keVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidy02MFwiPlxyXG4gICAgICAgIDxwLWxpc3Rib3hcclxuICAgICAgICAgIFtvcHRpb25zXT1cImNvbmRpdGlvbi5vcGVyYXRvcnNGb3JGaWVsZFwiXHJcbiAgICAgICAgICBvcHRpb25MYWJlbD1cImxhYmVsXCJcclxuICAgICAgICAgIG9wdGlvblZhbHVlPVwidmFsdWVcIlxyXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJjb25kaXRpb24ub3BlcmF0b3JcIlxyXG4gICAgICAgICAgKG9uQ2hhbmdlKT1cInVwZGF0ZVZhbHVlKCk7b3BQb3BvdmVyLnRvZ2dsZSgkZXZlbnQpXCJcclxuICAgICAgICAgIFtzdHlsZV09XCJ7IHdpZHRoOiAnMTAwJScgfVwiPlxyXG4gICAgICAgIDwvcC1saXN0Ym94PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvcC1wb3BvdmVyPlxyXG4gIDwvZGl2PlxyXG4gIDwhLS0gRm9ybSBGaWVsZCAtLT5cclxuICA8ZGl2IHN0eWxlPVwiYmFja2dyb3VuZDogI2Y5ZmFmYlwiIGNsYXNzPVwiZmxleC1ncm93IHAtMVwiPlxyXG4gICAgPGZvcm1seS1mb3JtXHJcbiAgICAgIFtmb3JtXT1cImZvcm1cIlxyXG4gICAgICBbZmllbGRzXT1cIltjb25kaXRpb24udmFsdWVGaWVsZENvbmZpZ11cIlxyXG4gICAgICBbbW9kZWxdPVwibW9kZWxcIj5cclxuICAgIDwvZm9ybWx5LWZvcm0+XHJcbiAgPC9kaXY+XHJcblxyXG5cclxuXHJcbiAgPCEtLSBEZWxldGUgQnV0dG9uIC0tPlxyXG4gIDxkaXYgc3R5bGU9XCJhbGlnbi1pdGVtczogY2VudGVyO2Rpc3BsYXk6IGZsZXg7XCIgY2xhc3M9XCJmbGV4LXNocmluay0wXCI+XHJcbiAgICA8YnV0dG9uXHJcbiAgICBzdHlsZT1cImhlaWdodDogLXdlYmtpdC1maWxsLWF2YWlsYWJsZTtcIlxyXG4gICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctZnVsbCBweC0zIHB5LTIgdGV4dC1zbSBiZy1yZWQtNTAgdGV4dC1yZWQtNjAwIGhvdmVyOmJnLXJlZC0xMDAgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLXJlZC01MDAgZm9jdXM6ei0xMFwiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAoY2xpY2spPVwicmVtb3ZlQ29uZGl0aW9uKGdyb3VwSW5kZXgsIGNvbmRpdGlvbkluZGV4KVwiXHJcbiAgICAgIHBUb29sdGlwPVwi2K3YsNmBINin2YTYtNix2LdcIlxyXG4gICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cclxuICAgICAgPGkgY2xhc3M9XCJwaSBwaS10aW1lc1wiPjwvaT5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIEdyb3VwIEZvb3RlciAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXAtZm9vdGVyIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBtdC0zIHB0LTMgYm9yZGVyLXQgYm9yZGVyLWdyYXktMjAwIFwiPlxyXG4gICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1ncmF5LTUwMFwiPlxyXG4gICAgICAgICAgICB7eyBncm91cC5jb25kaXRpb25zLmxlbmd0aCB9fSDYtNix2Lcg2YHZiiDZh9iw2Ycg2KfZhNmF2KzZhdmI2LnYqVxyXG4gICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtZ3JheS01MDBcIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJncm91cEluZGV4ID4gMFwiPlxyXG4gICAgICAgICAgICAgINmF2LHYqtio2Lcg2YXYuSDYp9mE2LPYp9io2YLYqSDYqNmAIDxzdHJvbmcgW2NsYXNzLnRleHQtYmx1ZS02MDBdPVwiZ3JvdXAuZ3JvdXBMb2dpY2FsT3BlcmF0b3IgPT09ICdhbmQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRleHQtYW1iZXItNjAwXT1cImdyb3VwLmdyb3VwTG9naWNhbE9wZXJhdG9yID09PSAnb3InXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBncm91cC5ncm91cExvZ2ljYWxPcGVyYXRvciA9PT0gJ2FuZCcgPyAn2YgnIDogJ9ij2YgnIH19XHJcbiAgICAgICAgICAgICAgPC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gPCEtLSBBY3Rpb25zIC0tPlxyXG48ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgZ2FwLTMgbXQtNlwiPlxyXG4gIDxidXR0b25cclxuICAgIHBCdXR0b25cclxuICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgaWNvbj1cInBpIHBpLXBsdXNcIlxyXG4gICAgW2xhYmVsXT1cIidHUk9VUCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgY2xhc3M9XCJwLWJ1dHRvbi1vdXRsaW5lZCBwLWJ1dHRvbi1zbSAhYmctd2hpdGUgIWJvcmRlciAhYm9yZGVyLWJsdWUtNTAwICF0ZXh0LWJsdWUtNjAwIGhvdmVyOiFiZy1ibHVlLTUwIHRyYW5zaXRpb24tY29sb3JzIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCJcclxuICAgIChjbGljayk9XCJhZGRHcm91cCgpO1wiPlxyXG4gIDwvYnV0dG9uPlxyXG5cclxuICA8YnV0dG9uXHJcbiAgICBwQnV0dG9uXHJcbiAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgIGljb249XCJwaSBwaS1wbHVzXCJcclxuICAgIFtsYWJlbF09XCInQ09ORElUSU9OJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICBjbGFzcz1cInAtYnV0dG9uLW91dGxpbmVkIHAtYnV0dG9uLXNtICFiZy13aGl0ZSAhYm9yZGVyICFib3JkZXItYmx1ZS01MDAgIXRleHQtYmx1ZS02MDAgaG92ZXI6IWJnLWJsdWUtNTAgdHJhbnNpdGlvbi1jb2xvcnMgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIlxyXG4gICAgKGNsaWNrKT1cImFkZENvbmRpdGlvblRvTGFzdEdyb3VwKClcIj5cclxuICA8L2J1dHRvbj5cclxuXHJcbiAgPGJ1dHRvblxyXG4gICAgKm5nSWY9XCJncm91cHMubGVuZ3RoID4gMFwiXHJcbiAgICBwQnV0dG9uXHJcbiAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgIGljb249XCJwaSBwaS10cmFzaFwiXHJcbiAgICBbbGFiZWxdPVwiJ0NMRUFSJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICBjbGFzcz1cInAtYnV0dG9uLWRhbmdlciBwLWJ1dHRvbi1vdXRsaW5lZCBwLWJ1dHRvbi1zbSAhYmctd2hpdGUgIWJvcmRlciAhYm9yZGVyLXJlZC01MDAgIXRleHQtcmVkLTYwMCBob3ZlcjohYmctcmVkLTUwIHRyYW5zaXRpb24tY29sb3JzIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCJcclxuICAgIChjbGljayk9XCJjbGVhckFsbCgpXCI+XHJcbiAgPC9idXR0b24+XHJcbjwvZGl2PlxyXG5cclxuPCEtLSBFbXB0eSBTdGF0ZSAtLT5cclxuPGRpdiAqbmdJZj1cImdyb3Vwcy5sZW5ndGggPT09IDBcIiBjbGFzcz1cImVtcHR5LXN0YXRlIHRleHQtY2VudGVyIHAtNiBib3JkZXItMiBib3JkZXItZGFzaGVkIGJvcmRlci1ncmF5LTMwMCByb3VuZGVkLXhsIGJnLWdyYXktNTBcIj5cclxuICA8aSBjbGFzcz1cInBpIHBpLXNlYXJjaCB0ZXh0LTR4bCB0ZXh0LWdyYXktNDAwIG1iLTNcIj48L2k+XHJcbiAgPHAgY2xhc3M9XCJ0ZXh0LWdyYXktNTAwIG1iLTRcIj57eyAnTk9fU0VBUkNIX0NPTkRJVElPTlMnIHwgdHJhbnNsYXRlIH19PC9wPlxyXG4gIDxidXR0b25cclxuICAgIHBCdXR0b25cclxuICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgaWNvbj1cInBpIHBpLXBsdXNcIlxyXG4gICAgW2xhYmVsXT1cIidBRERfU0VBUkNIX0NPTkRJVElPTicgfCB0cmFuc2xhdGVcIlxyXG4gICAgY2xhc3M9XCJwLWJ1dHRvbi1vdXRsaW5lZCAhcHgtNCAhcHktMlwiXHJcbiAgICAoY2xpY2spPVwiYWRkR3JvdXAoKVwiPlxyXG4gIDwvYnV0dG9uPlxyXG48L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==","// tab-type.component.ts\nimport { Component } from '@angular/core';\nimport { FieldType, FormlyField } from '@ngx-formly/core';\nimport { CommonModule } from '@angular/common';\nimport { TabsModule } from 'primeng/tabs';\nimport { BadgeModule } from 'primeng/badge';\nimport { TranslateModule } from '@ngx-translate/core';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"primeng/tabs\";\nimport * as i3 from \"primeng/badge\";\nimport * as i4 from \"@ngx-translate/core\";\nexport class TabTypeComponent extends FieldType {\n activeTabValue = '0';\n ngOnInit() {\n if (this.props['activeIndex'] !== undefined) {\n this.activeTabValue = this.props['activeIndex'].toString();\n }\n }\n resolveBadge(tab) {\n const badge = tab.props?.['badge'];\n if (typeof badge === 'function') {\n const result = badge(tab);\n return result == 0 ? null : result;\n }\n return badge ?? null;\n }\n onTabChange(newValue) {\n this.activeTabValue = newValue;\n if (this.props['onTabChange']) {\n this.props['onTabChange']({\n activeIndex: parseInt(newValue),\n tab: this.field.fieldGroup?.[parseInt(newValue)]\n });\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: TabTypeComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.8\", type: TabTypeComponent, isStandalone: true, selector: \"formly-tab-type\", usesInheritance: true, ngImport: i0, template: `\r\n <p-tabs\r\n [value]=\"activeTabValue\"\r\n [scrollable]=\"props['scrollable'] !== false\"\r\n [lazy]=\"props['lazy'] !== false\"\r\n (valueChange)=\"onTabChange($event)\">\r\n\r\n <p-tablist>\r\n <p-tab\r\n *ngFor=\"let tab of field.fieldGroup; let i = index\"\r\n [value]=\"i.toString()\"\r\n [disabled]=\"tab.props?.disabled\">\r\n\r\n @if(tab.props){\r\n <div class=\"flex align-items-center gap-2\">\r\n <!-- Left Icon -->\r\n <i *ngIf=\"tab.props['leftIcon']\" [class]=\"tab.props['leftIcon']\" class=\"text-sm\"></i>\r\n\r\n <!-- Label -->\r\n <span>{{ (tab.props['tabLabel'] ?? '') | translate }}</span>\r\n\r\n <!-- Badge -->\r\n\r\n <p-badge\r\n *ngIf=\"resolveBadge(tab) !== null\"\r\n [value]=\"resolveBadge(tab)\"\r\n size=\"small\">\r\n </p-badge>\r\n\r\n <!-- Right Icon -->\r\n <i *ngIf=\"tab.props['rightIcon']\" [class]=\"tab.props['rightIcon']\" class=\"text-sm\"></i>\r\n </div>\r\n }\r\n </p-tab>\r\n </p-tablist>\r\n\r\n <p-tabpanels style=\"padding: 0;\">\r\n <p-tabpanel\r\n *ngFor=\"let tab of field.fieldGroup; let i = index\"\r\n [value]=\"i.toString()\">\r\n\r\n <div class=\"p-3\">\r\n <formly-field [field]=\"tab\"></formly-field>\r\n\r\n <!-- Empty state -->\r\n <div\r\n *ngIf=\"!tab.fieldGroup || tab.fieldGroup.length === 0\"\r\n class=\"empty-tab text-center p-4 text-500\">\r\n <i class=\"pi pi-inbox text-2xl mb-2\"></i>\r\n <p>لا توجد حقول في هذه التبويبة</p>\r\n </div>\r\n </div>\r\n </p-tabpanel>\r\n </p-tabpanels>\r\n </p-tabs>\r\n `, isInline: true, dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"ngmodule\", type: TabsModule }, { kind: \"component\", type: i2.Tabs, selector: \"p-tabs\", inputs: [\"value\", \"scrollable\", \"lazy\", \"selectOnFocus\", \"showNavigators\", \"tabindex\"], outputs: [\"valueChange\"] }, { kind: \"component\", type: i2.TabPanels, selector: \"p-tabpanels\" }, { kind: \"component\", type: i2.TabPanel, selector: \"p-tabpanel\", inputs: [\"value\"], outputs: [\"valueChange\"] }, { kind: \"component\", type: i2.TabList, selector: \"p-tablist\" }, { kind: \"component\", type: i2.Tab, selector: \"p-tab\", inputs: [\"value\", \"disabled\"], outputs: [\"valueChange\"] }, { kind: \"ngmodule\", type: BadgeModule }, { kind: \"component\", type: i3.Badge, selector: \"p-badge\", inputs: [\"styleClass\", \"badgeSize\", \"size\", \"severity\", \"value\", \"badgeDisabled\"] }, { kind: \"component\", type: FormlyField, selector: \"formly-field\", inputs: [\"field\"] }, { kind: \"ngmodule\", type: TranslateModule }, { kind: \"pipe\", type: i4.TranslatePipe, name: \"translate\" }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: TabTypeComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'formly-tab-type',\n template: `\r\n <p-tabs\r\n [value]=\"activeTabValue\"\r\n [scrollable]=\"props['scrollable'] !== false\"\r\n [lazy]=\"props['lazy'] !== false\"\r\n (valueChange)=\"onTabChange($event)\">\r\n\r\n <p-tablist>\r\n <p-tab\r\n *ngFor=\"let tab of field.fieldGroup; let i = index\"\r\n [value]=\"i.toString()\"\r\n [disabled]=\"tab.props?.disabled\">\r\n\r\n @if(tab.props){\r\n <div class=\"flex align-items-center gap-2\">\r\n <!-- Left Icon -->\r\n <i *ngIf=\"tab.props['leftIcon']\" [class]=\"tab.props['leftIcon']\" class=\"text-sm\"></i>\r\n\r\n <!-- Label -->\r\n <span>{{ (tab.props['tabLabel'] ?? '') | translate }}</span>\r\n\r\n <!-- Badge -->\r\n\r\n <p-badge\r\n *ngIf=\"resolveBadge(tab) !== null\"\r\n [value]=\"resolveBadge(tab)\"\r\n size=\"small\">\r\n </p-badge>\r\n\r\n <!-- Right Icon -->\r\n <i *ngIf=\"tab.props['rightIcon']\" [class]=\"tab.props['rightIcon']\" class=\"text-sm\"></i>\r\n </div>\r\n }\r\n </p-tab>\r\n </p-tablist>\r\n\r\n <p-tabpanels style=\"padding: 0;\">\r\n <p-tabpanel\r\n *ngFor=\"let tab of field.fieldGroup; let i = index\"\r\n [value]=\"i.toString()\">\r\n\r\n <div class=\"p-3\">\r\n <formly-field [field]=\"tab\"></formly-field>\r\n\r\n <!-- Empty state -->\r\n <div\r\n *ngIf=\"!tab.fieldGroup || tab.fieldGroup.length === 0\"\r\n class=\"empty-tab text-center p-4 text-500\">\r\n <i class=\"pi pi-inbox text-2xl mb-2\"></i>\r\n <p>لا توجد حقول في هذه التبويبة</p>\r\n </div>\r\n </div>\r\n </p-tabpanel>\r\n </p-tabpanels>\r\n </p-tabs>\r\n `,\n standalone: true,\n imports: [CommonModule, TabsModule, BadgeModule, FormlyField, TranslateModule]\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLXR5cGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy51aS5jb3JlL2dlbmVyaWMtc2VhcmNoLWFkdmFuY2VkL3NyYy9saWIvdGFiLXR5cGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHdCQUF3QjtBQUN4QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFxQixNQUFNLGtCQUFrQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7QUErRHRELE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxTQUE0QjtJQUNoRSxjQUFjLEdBQVcsR0FBRyxDQUFDO0lBRTdCLFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzdELENBQUM7SUFDSCxDQUFDO0lBQ0YsWUFBWSxDQUFDLEdBQXNCO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQyxJQUFJLE9BQU8sS0FBSyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQixPQUFPLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ3JDLENBQUM7UUFDRCxPQUFPLEtBQUssSUFBSSxJQUFJLENBQUM7SUFDdkIsQ0FBQztJQUNELFdBQVcsQ0FBQyxRQUFhO1FBQ3ZCLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO1FBRS9CLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ3hCLFdBQVcsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDO2dCQUMvQixHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDakQsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7dUdBekJVLGdCQUFnQjsyRkFBaEIsZ0JBQWdCLGtHQTNEakI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1RFQsMkRBRVMsWUFBWSwrUEFBRSxVQUFVLDhpQkFBRSxXQUFXLDhLQUFDLFdBQVcsMkVBQUMsZUFBZTs7MkZBRWhFLGdCQUFnQjtrQkE3RDVCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdURUO29CQUNELFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBQyxXQUFXLEVBQUMsZUFBZSxDQUFDO2lCQUM3RSIsInNvdXJjZXNDb250ZW50IjpbIi8vIHRhYi10eXBlLmNvbXBvbmVudC50c1xyXG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRmllbGRUeXBlLCBGb3JtbHlGaWVsZCwgRm9ybWx5RmllbGRDb25maWcgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgVGFic01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdGFicyc7XHJcbmltcG9ydCB7IEJhZGdlTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9iYWRnZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdmb3JtbHktdGFiLXR5cGUnLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8cC10YWJzXHJcbiAgICAgIFt2YWx1ZV09XCJhY3RpdmVUYWJWYWx1ZVwiXHJcbiAgICAgIFtzY3JvbGxhYmxlXT1cInByb3BzWydzY3JvbGxhYmxlJ10gIT09IGZhbHNlXCJcclxuICAgICAgW2xhenldPVwicHJvcHNbJ2xhenknXSAhPT0gZmFsc2VcIlxyXG4gICAgICAodmFsdWVDaGFuZ2UpPVwib25UYWJDaGFuZ2UoJGV2ZW50KVwiPlxyXG5cclxuICAgICAgPHAtdGFibGlzdD5cclxuICAgICAgICA8cC10YWJcclxuICAgICAgICAgICpuZ0Zvcj1cImxldCB0YWIgb2YgZmllbGQuZmllbGRHcm91cDsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICBbdmFsdWVdPVwiaS50b1N0cmluZygpXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCJ0YWIucHJvcHM/LmRpc2FibGVkXCI+XHJcblxyXG4gICAgICAgICAgQGlmKHRhYi5wcm9wcyl7XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICAgICAgPCEtLSBMZWZ0IEljb24gLS0+XHJcbiAgICAgICAgICAgIDxpICpuZ0lmPVwidGFiLnByb3BzWydsZWZ0SWNvbiddXCIgW2NsYXNzXT1cInRhYi5wcm9wc1snbGVmdEljb24nXVwiIGNsYXNzPVwidGV4dC1zbVwiPjwvaT5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gTGFiZWwgLS0+XHJcbiAgICAgICAgICAgIDxzcGFuPnt7ICh0YWIucHJvcHNbJ3RhYkxhYmVsJ10gPz8gJycpIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBCYWRnZSAtLT5cclxuXHJcbiAgICAgICAgICAgICA8cC1iYWRnZVxyXG4gICAgICAgICAgICAgICpuZ0lmPVwicmVzb2x2ZUJhZGdlKHRhYikgIT09IG51bGxcIlxyXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJyZXNvbHZlQmFkZ2UodGFiKVwiXHJcbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCI+XHJcbiAgICAgICAgICAgIDwvcC1iYWRnZT5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gUmlnaHQgSWNvbiAtLT5cclxuICAgICAgICAgICAgPGkgKm5nSWY9XCJ0YWIucHJvcHNbJ3JpZ2h0SWNvbiddXCIgW2NsYXNzXT1cInRhYi5wcm9wc1sncmlnaHRJY29uJ11cIiBjbGFzcz1cInRleHQtc21cIj48L2k+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L3AtdGFiPlxyXG4gICAgICA8L3AtdGFibGlzdD5cclxuXHJcbiAgICAgIDxwLXRhYnBhbmVscyBzdHlsZT1cInBhZGRpbmc6IDA7XCI+XHJcbiAgICAgICAgPHAtdGFicGFuZWxcclxuICAgICAgICAgICpuZ0Zvcj1cImxldCB0YWIgb2YgZmllbGQuZmllbGRHcm91cDsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICBbdmFsdWVdPVwiaS50b1N0cmluZygpXCI+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInAtM1wiPlxyXG4gICAgICAgICAgICA8Zm9ybWx5LWZpZWxkIFtmaWVsZF09XCJ0YWJcIj48L2Zvcm1seS1maWVsZD5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gRW1wdHkgc3RhdGUgLS0+XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAqbmdJZj1cIiF0YWIuZmllbGRHcm91cCB8fCB0YWIuZmllbGRHcm91cC5sZW5ndGggPT09IDBcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZW1wdHktdGFiIHRleHQtY2VudGVyIHAtNCB0ZXh0LTUwMFwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktaW5ib3ggdGV4dC0yeGwgbWItMlwiPjwvaT5cclxuICAgICAgICAgICAgICA8cD7ZhNinINiq2YjYrNivINit2YLZiNmEINmB2Yog2YfYsNmHINin2YTYqtio2YjZitio2Kk8L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9wLXRhYnBhbmVsPlxyXG4gICAgICA8L3AtdGFicGFuZWxzPlxyXG4gICAgPC9wLXRhYnM+XHJcbiAgYCxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFRhYnNNb2R1bGUsIEJhZGdlTW9kdWxlLEZvcm1seUZpZWxkLFRyYW5zbGF0ZU1vZHVsZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFRhYlR5cGVDb21wb25lbnQgZXh0ZW5kcyBGaWVsZFR5cGU8Rm9ybWx5RmllbGRDb25maWc+IHtcclxuICBhY3RpdmVUYWJWYWx1ZTogc3RyaW5nID0gJzAnO1xyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICh0aGlzLnByb3BzWydhY3RpdmVJbmRleCddICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5hY3RpdmVUYWJWYWx1ZSA9IHRoaXMucHJvcHNbJ2FjdGl2ZUluZGV4J10udG9TdHJpbmcoKTtcclxuICAgIH1cclxuICB9XHJcbiByZXNvbHZlQmFkZ2UodGFiOiBGb3JtbHlGaWVsZENvbmZpZyk6IGFueSB7XHJcbiAgICBjb25zdCBiYWRnZSA9IHRhYi5wcm9wcz8uWydiYWRnZSddO1xyXG4gICAgaWYgKHR5cGVvZiBiYWRnZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSBiYWRnZSh0YWIpO1xyXG4gICAgICByZXR1cm4gcmVzdWx0ID09IDAgPyBudWxsIDogcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJhZGdlID8/IG51bGw7XHJcbiAgfVxyXG4gIG9uVGFiQ2hhbmdlKG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMuYWN0aXZlVGFiVmFsdWUgPSBuZXdWYWx1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5wcm9wc1snb25UYWJDaGFuZ2UnXSkge1xyXG4gICAgICB0aGlzLnByb3BzWydvblRhYkNoYW5nZSddKHtcclxuICAgICAgICBhY3RpdmVJbmRleDogcGFyc2VJbnQobmV3VmFsdWUpLFxyXG4gICAgICAgIHRhYjogdGhpcy5maWVsZC5maWVsZEdyb3VwPy5bcGFyc2VJbnQobmV3VmFsdWUpXVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19","// columns-builder.component.ts\nimport { Component } from '@angular/core';\nimport { FieldType, FormlyForm } from '@ngx-formly/core';\nimport { FormGroup, FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ButtonModule } from 'primeng/button';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { DatePickerModule } from 'primeng/datepicker';\nimport { InputGroupModule } from 'primeng/inputgroup';\nimport { InputGroupAddonModule } from 'primeng/inputgroupaddon';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { ListboxModule } from 'primeng/listbox';\nimport { MenuModule } from 'primeng/menu';\nimport { PopoverModule } from 'primeng/popover';\nimport { RadioButtonModule } from 'primeng/radiobutton';\nimport { SelectModule } from 'primeng/select';\nimport { TooltipModule } from 'primeng/tooltip';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@angular/forms\";\nimport * as i3 from \"primeng/checkbox\";\nimport * as i4 from \"@ngx-translate/core\";\nexport class ColumnsBuilderComponent extends FieldType {\n dragStartIndex = -1;\n _columnsForm;\n aggregateFunctions = [\n { label: 'Sum', value: 'sum' },\n { label: 'Average', value: 'avg' },\n { label: 'Count', value: 'count' },\n { label: 'Minimum', value: 'min' },\n { label: 'Maximum', value: 'max' }\n ];\n get columns() {\n return this.props['fields'] || [];\n }\n get columnsForm() {\n return this._columnsForm;\n }\n get visibleColumnsCount() {\n return this.columns.filter(col => this.isColumnVisible(col.key)).length;\n }\n get numericColumnsCount() {\n return this.columns.filter(col => col.isNumeric).length;\n }\n get aggregatedColumnsCount() {\n return this.columns.filter(col => this.hasAggregateFunction(col.key)).length;\n }\n ngOnInit() {\n this.initializeForm();\n this.setupValueChanges();\n }\n // Form Methods\n initializeForm() {\n const parentForm = this.form;\n const fieldKey = this.field.key;\n if (!fieldKey)\n return;\n // Get or create the FormGroup in the parent form\n let formGroup = parentForm.get(fieldKey);\n if (!formGroup || !(formGroup instanceof FormGroup)) {\n // Create new FormGroup\n formGroup = new FormGroup({});\n parentForm.setControl(fieldKey, formGroup);\n // Initialize with existing model data\n const initialModel = this.model[fieldKey] || {};\n this.columns.forEach(column => {\n const columnConfig = initialModel[column.key] || {};\n const columnGroup = new FormGroup({\n isVisible: new FormControl(columnConfig.isVisible ?? column.defaultVisible),\n displayName: new FormControl(columnConfig.displayName ?? column.label),\n aggregateFunction: new FormControl(columnConfig.aggregateFunction ?? ''),\n order: new FormControl(columnConfig.order ?? 0)\n });\n formGroup.addControl(column.key, columnGroup);\n });\n }\n // Store the FormGroup reference\n this._columnsForm = formGroup;\n // Initialize the model with current form values\n this.updateModel();\n }\n setupValueChanges() {\n // Listen to form changes and update the model\n this.columnsForm.valueChanges.subscribe(() => {\n this.updateModel();\n });\n }\n updateModel() {\n const fieldKey = this.field.key;\n if (fieldKey) {\n // Update the model with current form values\n this.model[fieldKey] = this.columnsForm.value;\n // Trigger form control update to notify Formly\n this.formControl.setValue(this.columnsForm.value);\n }\n }\n // Called when form controls change\n onFormChange() {\n this.updateModel();\n }\n // Drag & Drop Methods\n onDragStart(event, index) {\n this.dragStartIndex = index;\n event.dataTransfer?.setData('text/plain', index.toString());\n }\n onDragOver(event) {\n event.preventDefault();\n }\n onDrop(event, dropIndex) {\n event.preventDefault();\n const dragIndex = this.dragStartIndex;\n if (dragIndex !== -1 && dragIndex !== dropIndex) {\n // Reorder the columns array\n const movedItem = this.columns[dragIndex];\n const newColumns = [...this.columns];\n newColumns.splice(dragIndex, 1);\n newColumns.splice(dropIndex, 0, movedItem);\n // Update the props to trigger change detection\n this.props['fields'] = newColumns;\n // Update order in form controls\n this.updateColumnOrders();\n // Update model after reordering\n this.updateModel();\n }\n this.removeDragStyles(event);\n }\n onDragEnter(event) {\n event.currentTarget.classList.add('border-blue-500', 'bg-blue-50');\n }\n onDragLeave(event) {\n this.removeDragStyles(event);\n }\n removeDragStyles(event) {\n event.currentTarget.classList.remove('border-blue-500', 'bg-blue-50');\n }\n updateColumnOrders() {\n // Store the order in form controls\n this.columns.forEach((column, index) => {\n const orderControl = this.getColumnControl(column.key, 'order');\n if (!orderControl) {\n const columnGroup = this.columnsForm.get(column.key);\n if (columnGroup && !columnGroup.get('order')) {\n columnGroup.addControl('order', new FormControl(index));\n }\n }\n else {\n orderControl.setValue(index);\n }\n });\n }\n getColumnControl(columnKey, controlName) {\n const columnGroup = this.columnsForm.get(columnKey);\n if (!columnGroup) {\n const fallbackControl = new FormControl(this.getDefaultValue(controlName));\n return fallbackControl;\n }\n const control = columnGroup.get(controlName);\n if (!control) {\n const fallbackControl = new FormControl(this.getDefaultValue(controlName));\n columnGroup.addControl(controlName, fallbackControl);\n return fallbackControl;\n }\n return control;\n }\n getDefaultValue(controlName) {\n switch (controlName) {\n case 'isVisible': return true;\n case 'displayName': return '';\n case 'aggregateFunction': return '';\n case 'order': return 0;\n default: return null;\n }\n }\n isColumnVisible(columnKey) {\n const control = this.getColumnControl(columnKey, 'isVisible');\n return control?.value === true;\n }\n hasAggregateFunction(columnKey) {\n const control = this.getColumnControl(columnKey, 'aggregateFunction');\n return !!control?.value;\n }\n getAggregateFunctionValue(columnKey) {\n const control = this.getColumnControl(columnKey, 'aggregateFunction');\n return control?.value || '';\n }\n toggleAll(visible) {\n this.columns.forEach(column => {\n const visibleControl = this.getColumnControl(column.key, 'isVisible');\n if (visibleControl) {\n visibleControl.setValue(visible);\n }\n });\n this.updateModel();\n }\n resetToDefault() {\n this.columns.forEach((column, index) => {\n const columnGroup = this.columnsForm.get(column.key);\n if (columnGroup) {\n columnGroup.get('isVisible')?.setValue(column.defaultVisible);\n columnGroup.get('displayName')?.setValue(column.label);\n columnGroup.get('aggregateFunction')?.setValue('');\n columnGroup.get('order')?.setValue(index);\n }\n });\n this.updateModel();\n }\n getAggregateLabel(functionName) {\n const func = this.aggregateFunctions.find(f => f.value === functionName);\n return func ? func.label : functionName;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: ColumnsBuilderComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.1.8\", type: ColumnsBuilderComponent, isStandalone: true, selector: \"formly-columns-builder\", usesInheritance: true, ngImport: i0, template: `\r\n <div>\r\n <!-- Header -->\r\n <div class=\"mb-6\">\r\n <h5 class=\"text-lg font-semibold text-gray-900 mb-2\">{{ props.label || ('COLUMNS_MANAGEMENT' | translate) }}</h5>\r\n <p class=\"text-gray-600 text-sm\">{{ props.description || ('COLUMNS_DESCRIPTION' | translate) }}</p>\r\n </div>\r\n\r\n <!-- Quick Actions -->\r\n <div class=\"flex flex-wrap gap-2 mb-6\">\r\n <button\r\n type=\"button\"\r\n (click)=\"toggleAll(true)\"\r\n class=\"inline-flex items-center gap-2 px-3 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors\"\r\n >\r\n <i class=\"pi pi-eye\"></i>\r\n {{ 'SHOW_ALL' | translate }}\r\n </button>\r\n <button\r\n type=\"button\"\r\n (click)=\"toggleAll(false)\"\r\n class=\"inline-flex items-center gap-2 px-3 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors\"\r\n >\r\n <i class=\"pi pi-eye-slash\"></i>\r\n {{ 'HIDE_ALL' | translate }}\r\n </button>\r\n <button\r\n type=\"button\"\r\n (click)=\"resetToDefault()\"\r\n class=\"inline-flex items-center gap-2 px-3 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors\"\r\n >\r\n <i class=\"pi pi-refresh\"></i>\r\n {{ 'RESET_TO_DEFAULT' | translate }}\r\n </button>\r\n </div>\r\n\r\n <!-- Drag Info -->\r\n <div class=\"mb-4 p-2 bg-blue-50 border border-blue-200 rounded text-sm text-blue-700\">\r\n <i class=\"pi pi-info-circle mr-2\"></i>\r\n {{ 'DRAG_COLUMNS_INFO' | translate }}\r\n </div>\r\n\r\n <!-- Columns List -->\r\n <div class=\"space-y-3\">\r\n <div *ngIf=\"columns.length === 0\" class=\"text-center py-8 px-4 border-2 border-dashed border-gray-300 rounded-lg bg-gray-50\">\r\n <i class=\"pi pi-table text-4xl text-gray-400 mb-3\"></i>\r\n <p class=\"text-gray-500\">{{ 'NO_COLUMNS_AVAILABLE' | translate }}</p>\r\n </div>\r\n\r\n <div *ngFor=\"let column of columns; let i = index\"\r\n class=\"bg-gray-50 rounded-lg border border-gray-200 p-1 transition-colors hover:bg-gray-100\"\r\n draggable=\"true\"\r\n (dragstart)=\"onDragStart($event, i)\"\r\n (dragover)=\"onDragOver($event)\"\r\n (drop)=\"onDrop($event, i)\"\r\n (dragenter)=\"onDragEnter($event)\"\r\n (dragleave)=\"onDragLeave($event)\">\r\n\r\n <div class=\"grid grid-cols-12 gap-4 items-center\">\r\n <!-- Drag Handle -->\r\n <div class=\"col-span-1 flex justify-center cursor-move text-gray-400 hover:text-gray-600\"\r\n draggable=\"true\"\r\n (dragstart)=\"onDragStart($event, i)\">\r\n <i class=\"pi pi-bars\"></i>\r\n </div>\r\n\r\n <!-- Visibility Toggle -->\r\n <div class=\"col-span-1 flex justify-center\">\r\n <p-checkbox\r\n [binary]=\"true\"\r\n [formControl]=\"getColumnControl(column.key, 'isVisible')\"\r\n [inputId]=\"'visible_' + column.key\"\r\n styleClass=\"[&>div]:border-gray-300 [&>div]:hover:border-gray-400\"\r\n (onChange)=\"onFormChange()\"\r\n >\r\n </p-checkbox>\r\n </div>\r\n\r\n <!-- Column Info -->\r\n <div class=\"col-span-12 md:col-span-4\">\r\n <label [for]=\"'visible_' + column.key\" class=\"block font-medium text-gray-900 cursor-pointer hover:text-blue-600\">\r\n {{ column.label }}\r\n </label>\r\n <p class=\"text-xs text-gray-500 mt-1\">{{ column.key }}</p>\r\n </div>\r\n\r\n <!-- Display Name -->\r\n <div class=\"col-span-12 md:col-span-3\">\r\n <input\r\n *ngIf=\"isColumnVisible(column.key)\"\r\n type=\"text\"\r\n [formControl]=\"getColumnControl(column.key, 'displayName')\"\r\n [placeholder]=\"column.label\"\r\n class=\"w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 text-sm\"\r\n (blur)=\"onFormChange()\"\r\n >\r\n </div>\r\n\r\n <!-- Aggregate Function -->\r\n <!-- <div class=\"col-span-12 md:col-span-3\">\r\n <div *ngIf=\"column.aggregatable && isColumnVisible(column.key)\">\r\n <p-select\r\n [options]=\"aggregateFunctions\"\r\n optionLabel=\"label\"\r\n optionValue=\"value\"\r\n [formControl]=\"getColumnControl(column.key, 'aggregateFunction')\"\r\n [placeholder]=\"'SELECT_AGGREGATE' | translate\"\r\n [showClear]=\"true\"\r\n styleClass=\"w-full\"\r\n (onChange)=\"onFormChange()\"\r\n >\r\n </p-select>\r\n </div>\r\n <span *ngIf=\"!column.aggregatable && isColumnVisible(column.key)\" class=\"text-xs text-gray-500\">\r\n {{ 'NO_AGGREGATES_AVAILABLE' | translate }}\r\n </span>\r\n </div> -->\r\n </div>\r\n\r\n <!-- Aggregate Info -->\r\n <div *ngIf=\"hasAggregateFunction(column.key) && isColumnVisible(column.key)\"\r\n class=\"mt-3 p-3 bg-blue-50 border border-blue-200 rounded-lg\">\r\n <div class=\"flex items-center gap-2\">\r\n <i class=\"pi pi-info-circle text-blue-500 text-sm\"></i>\r\n <span class=\"text-sm text-blue-800\">\r\n {{ 'AGGREGATE_INFO' | translate:{function: getAggregateLabel(getAggregateFunctionValue(column.key))} }}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Summary -->\r\n <div class=\"flex flex-col sm:flex-row justify-between items-center gap-4 mt-6 pt-4 border-t border-gray-200\">\r\n <span class=\"text-sm text-gray-600\">\r\n {{ 'COLUMNS_VISIBLE_COUNT' | translate:{visible: visibleColumnsCount, total: columns.length} }}\r\n </span>\r\n <!-- <div class=\"flex gap-4 text-sm\">\r\n <span class=\"inline-flex items-center gap-1 text-green-600\">\r\n <i class=\"pi pi-chart-line\"></i>\r\n {{ numericColumnsCount }} {{ 'NUMERIC' | translate }}\r\n </span>\r\n <span class=\"inline-flex items-center gap-1 text-blue-600\">\r\n <i class=\"pi pi-calculator\"></i>\r\n {{ aggregatedColumnsCount }} {{ 'AGGREGATED' | translate }}\r\n </span>\r\n </div> -->\r\n </div>\r\n</div>\r\n `, isInline: true, dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i2.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i2.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"ngmodule\", type: ReactiveFormsModule }, { kind: \"directive\", type: i2.FormControlDirective, selector: \"[formControl]\", inputs: [\"formControl\", \"disabled\", \"ngModel\"], outputs: [\"ngModelChange\"], exportAs: [\"ngForm\"] }, { kind: \"ngmodule\", type: SelectModule }, { kind: \"ngmodule\", type: InputTextModule }, { kind: \"ngmodule\", type: ButtonModule }, { kind: \"ngmodule\", type: DatePickerModule }, { kind: \"ngmodule\", type: CheckboxModule }, { kind: \"component\", type: i3.Checkbox, selector: \"p-checkbox, p-checkBox, p-check-box\", inputs: [\"value\", \"binary\", \"ariaLabelledBy\", \"ariaLabel\", \"tabindex\", \"inputId\", \"inputStyle\", \"styleClass\", \"inputClass\", \"indeterminate\", \"formControl\", \"checkboxIcon\", \"readonly\", \"autofocus\", \"trueValue\", \"falseValue\", \"variant\", \"size\"], outputs: [\"onChange\", \"onFocus\", \"onBlur\"] }, { kind: \"ngmodule\", type: RadioButtonModule }, { kind: \"ngmodule\", type: TooltipModule }, { kind: \"ngmodule\", type: MenuModule }, { kind: \"ngmodule\", type: TranslateModule }, { kind: \"ngmodule\", type: InputGroupModule }, { kind: \"ngmodule\", type: InputGroupAddonModule }, { kind: \"ngmodule\", type: PopoverModule }, { kind: \"ngmodule\", type: ListboxModule }, { kind: \"pipe\", type: i4.TranslatePipe, name: \"translate\" }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: ColumnsBuilderComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'formly-columns-builder',\n template: `\r\n <div>\r\n <!-- Header -->\r\n <div class=\"mb-6\">\r\n <h5 class=\"text-lg font-semibold text-gray-900 mb-2\">{{ props.label || ('COLUMNS_MANAGEMENT' | translate) }}</h5>\r\n <p class=\"text-gray-600 text-sm\">{{ props.description || ('COLUMNS_DESCRIPTION' | translate) }}</p>\r\n </div>\r\n\r\n <!-- Quick Actions -->\r\n <div class=\"flex flex-wrap gap-2 mb-6\">\r\n <button\r\n type=\"button\"\r\n (click)=\"toggleAll(true)\"\r\n class=\"inline-flex items-center gap-2 px-3 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors\"\r\n >\r\n <i class=\"pi pi-eye\"></i>\r\n {{ 'SHOW_ALL' | translate }}\r\n </button>\r\n <button\r\n type=\"button\"\r\n (click)=\"toggleAll(false)\"\r\n class=\"inline-flex items-center gap-2 px-3 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors\"\r\n >\r\n <i class=\"pi pi-eye-slash\"></i>\r\n {{ 'HIDE_ALL' | translate }}\r\n </button>\r\n <button\r\n type=\"button\"\r\n (click)=\"resetToDefault()\"\r\n class=\"inline-flex items-center gap-2 px-3 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors\"\r\n >\r\n <i class=\"pi pi-refresh\"></i>\r\n {{ 'RESET_TO_DEFAULT' | translate }}\r\n </button>\r\n </div>\r\n\r\n <!-- Drag Info -->\r\n <div class=\"mb-4 p-2 bg-blue-50 border border-blue-200 rounded text-sm text-blue-700\">\r\n <i class=\"pi pi-info-circle mr-2\"></i>\r\n {{ 'DRAG_COLUMNS_INFO' | translate }}\r\n </div>\r\n\r\n <!-- Columns List -->\r\n <div class=\"space-y-3\">\r\n <div *ngIf=\"columns.length === 0\" class=\"text-center py-8 px-4 border-2 border-dashed border-gray-300 rounded-lg bg-gray-50\">\r\n <i class=\"pi pi-table text-4xl text-gray-400 mb-3\"></i>\r\n <p class=\"text-gray-500\">{{ 'NO_COLUMNS_AVAILABLE' | translate }}</p>\r\n </div>\r\n\r\n <div *ngFor=\"let column of columns; let i = index\"\r\n class=\"bg-gray-50 rounded-lg border border-gray-200 p-1 transition-colors hover:bg-gray-100\"\r\n draggable=\"true\"\r\n (dragstart)=\"onDragStart($event, i)\"\r\n (dragover)=\"onDragOver($event)\"\r\n (drop)=\"onDrop($event, i)\"\r\n (dragenter)=\"onDragEnter($event)\"\r\n (dragleave)=\"onDragLeave($event)\">\r\n\r\n <div class=\"grid grid-cols-12 gap-4 items-center\">\r\n <!-- Drag Handle -->\r\n <div class=\"col-span-1 flex justify-center cursor-move text-gray-400 hover:text-gray-600\"\r\n draggable=\"true\"\r\n (dragstart)=\"onDragStart($event, i)\">\r\n <i class=\"pi pi-bars\"></i>\r\n </div>\r\n\r\n <!-- Visibility Toggle -->\r\n <div class=\"col-span-1 flex justify-center\">\r\n <p-checkbox\r\n [binary]=\"true\"\r\n [formControl]=\"getColumnControl(column.key, 'isVisible')\"\r\n [inputId]=\"'visible_' + column.key\"\r\n styleClass=\"[&>div]:border-gray-300 [&>div]:hover:border-gray-400\"\r\n (onChange)=\"onFormChange()\"\r\n >\r\n </p-checkbox>\r\n </div>\r\n\r\n <!-- Column Info -->\r\n <div class=\"col-span-12 md:col-span-4\">\r\n <label [for]=\"'visible_' + column.key\" class=\"block font-medium text-gray-900 cursor-pointer hover:text-blue-600\">\r\n {{ column.label }}\r\n </label>\r\n <p class=\"text-xs text-gray-500 mt-1\">{{ column.key }}</p>\r\n </div>\r\n\r\n <!-- Display Name -->\r\n <div class=\"col-span-12 md:col-span-3\">\r\n <input\r\n *ngIf=\"isColumnVisible(column.key)\"\r\n type=\"text\"\r\n [formControl]=\"getColumnControl(column.key, 'displayName')\"\r\n [placeholder]=\"column.label\"\r\n class=\"w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 text-sm\"\r\n (blur)=\"onFormChange()\"\r\n >\r\n </div>\r\n\r\n <!-- Aggregate Function -->\r\n <!-- <div class=\"col-span-12 md:col-span-3\">\r\n <div *ngIf=\"column.aggregatable && isColumnVisible(column.key)\">\r\n <p-select\r\n [options]=\"aggregateFunctions\"\r\n optionLabel=\"label\"\r\n optionValue=\"value\"\r\n [formControl]=\"getColumnControl(column.key, 'aggregateFunction')\"\r\n [placeholder]=\"'SELECT_AGGREGATE' | translate\"\r\n [showClear]=\"true\"\r\n styleClass=\"w-full\"\r\n (onChange)=\"onFormChange()\"\r\n >\r\n </p-select>\r\n </div>\r\n <span *ngIf=\"!column.aggregatable && isColumnVisible(column.key)\" class=\"text-xs text-gray-500\">\r\n {{ 'NO_AGGREGATES_AVAILABLE' | translate }}\r\n </span>\r\n </div> -->\r\n </div>\r\n\r\n <!-- Aggregate Info -->\r\n <div *ngIf=\"hasAggregateFunction(column.key) && isColumnVisible(column.key)\"\r\n class=\"mt-3 p-3 bg-blue-50 border border-blue-200 rounded-lg\">\r\n <div class=\"flex items-center gap-2\">\r\n <i class=\"pi pi-info-circle text-blue-500 text-sm\"></i>\r\n <span class=\"text-sm text-blue-800\">\r\n {{ 'AGGREGATE_INFO' | translate:{function: getAggregateLabel(getAggregateFunctionValue(column.key))} }}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Summary -->\r\n <div class=\"flex flex-col sm:flex-row justify-between items-center gap-4 mt-6 pt-4 border-t border-gray-200\">\r\n <span class=\"text-sm text-gray-600\">\r\n {{ 'COLUMNS_VISIBLE_COUNT' | translate:{visible: visibleColumnsCount, total: columns.length} }}\r\n </span>\r\n <!-- <div class=\"flex gap-4 text-sm\">\r\n <span class=\"inline-flex items-center gap-1 text-green-600\">\r\n <i class=\"pi pi-chart-line\"></i>\r\n {{ numericColumnsCount }} {{ 'NUMERIC' | translate }}\r\n </span>\r\n <span class=\"inline-flex items-center gap-1 text-blue-600\">\r\n <i class=\"pi pi-calculator\"></i>\r\n {{ aggregatedColumnsCount }} {{ 'AGGREGATED' | translate }}\r\n </span>\r\n </div> -->\r\n </div>\r\n</div>\r\n `,\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n SelectModule,\n InputTextModule,\n ButtonModule,\n DatePickerModule,\n CheckboxModule,\n RadioButtonModule,\n FormlyForm,\n TooltipModule,\n MenuModule,\n TranslateModule,\n InputGroupModule,\n InputGroupAddonModule,\n PopoverModule,\n ListboxModule\n ]\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1ucy1idWlsZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLXNlYXJjaC1hZHZhbmNlZC9zcmMvbGliL2NvbHVtbnMtYnVpbGRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBbUIsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDMUUsT0FBTyxFQUFFLFNBQVMsRUFBYSxXQUFXLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUpUO29CQUNELE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsWUFBWTt3QkFDWixnQkFBZ0I7d0JBQ2hCLGNBQWM7d0JBQ2QsaUJBQWlCO3dCQUNqQixVQUFVO3dCQUNWLGFBQWE7d0JBQ2IsVUFBVTt3QkFDVixlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIscUJBQXFCO3dCQUNyQixhQUFhO3dCQUNiLGFBQWE7cUJBQ2Q7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBjb2x1bW5zLWJ1aWxkZXIuY29tcG9uZW50LnRzXHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZpZWxkVHlwZSwgRmllbGRUeXBlQ29uZmlnLCBGb3JtbHlGb3JtIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUFycmF5LCBGb3JtQ29udHJvbCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFNlbGVjdEZpZWxkIH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcclxuaW1wb3J0IHsgQ2hlY2tib3hNb2R1bGUgfSBmcm9tICdwcmltZW5nL2NoZWNrYm94JztcclxuaW1wb3J0IHsgRGF0ZVBpY2tlck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZGF0ZXBpY2tlcic7XHJcbmltcG9ydCB7IElucHV0R3JvdXBNb2R1bGUgfSBmcm9tICdwcmltZW5nL2lucHV0Z3JvdXAnO1xyXG5pbXBvcnQgeyBJbnB1dEdyb3VwQWRkb25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2lucHV0Z3JvdXBhZGRvbic7XHJcbmltcG9ydCB7IElucHV0VGV4dE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvaW5wdXR0ZXh0JztcclxuaW1wb3J0IHsgTGlzdGJveE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvbGlzdGJveCc7XHJcbmltcG9ydCB7IE1lbnVNb2R1bGUgfSBmcm9tICdwcmltZW5nL21lbnUnO1xyXG5pbXBvcnQgeyBQb3BvdmVyTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9wb3BvdmVyJztcclxuaW1wb3J0IHsgUmFkaW9CdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL3JhZGlvYnV0dG9uJztcclxuaW1wb3J0IHsgU2VsZWN0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy9zZWxlY3QnO1xyXG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b29sdGlwJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZm9ybWx5LWNvbHVtbnMtYnVpbGRlcicsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgPGRpdj5cclxuICA8IS0tIEhlYWRlciAtLT5cclxuICA8ZGl2IGNsYXNzPVwibWItNlwiPlxyXG4gICAgPGg1IGNsYXNzPVwidGV4dC1sZyBmb250LXNlbWlib2xkIHRleHQtZ3JheS05MDAgbWItMlwiPnt7IHByb3BzLmxhYmVsIHx8ICgnQ09MVU1OU19NQU5BR0VNRU5UJyB8IHRyYW5zbGF0ZSkgfX08L2g1PlxyXG4gICAgPHAgY2xhc3M9XCJ0ZXh0LWdyYXktNjAwIHRleHQtc21cIj57eyBwcm9wcy5kZXNjcmlwdGlvbiB8fCAoJ0NPTFVNTlNfREVTQ1JJUFRJT04nIHwgdHJhbnNsYXRlKSB9fTwvcD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBRdWljayBBY3Rpb25zIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBnYXAtMiBtYi02XCI+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAoY2xpY2spPVwidG9nZ2xlQWxsKHRydWUpXCJcclxuICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMyBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCBiZy13aGl0ZSBib3JkZXIgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWQtbGcgaG92ZXI6YmctZ3JheS01MCB0cmFuc2l0aW9uLWNvbG9yc1wiXHJcbiAgICA+XHJcbiAgICAgIDxpIGNsYXNzPVwicGkgcGktZXllXCI+PC9pPlxyXG4gICAgICB7eyAnU0hPV19BTEwnIHwgdHJhbnNsYXRlIH19XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b25cclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIChjbGljayk9XCJ0b2dnbGVBbGwoZmFsc2UpXCJcclxuICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMyBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCBiZy13aGl0ZSBib3JkZXIgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWQtbGcgaG92ZXI6YmctZ3JheS01MCB0cmFuc2l0aW9uLWNvbG9yc1wiXHJcbiAgICA+XHJcbiAgICAgIDxpIGNsYXNzPVwicGkgcGktZXllLXNsYXNoXCI+PC9pPlxyXG4gICAgICB7eyAnSElERV9BTEwnIHwgdHJhbnNsYXRlIH19XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b25cclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIChjbGljayk9XCJyZXNldFRvRGVmYXVsdCgpXCJcclxuICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMyBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCBiZy13aGl0ZSBib3JkZXIgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWQtbGcgaG92ZXI6YmctZ3JheS01MCB0cmFuc2l0aW9uLWNvbG9yc1wiXHJcbiAgICA+XHJcbiAgICAgIDxpIGNsYXNzPVwicGkgcGktcmVmcmVzaFwiPjwvaT5cclxuICAgICAge3sgJ1JFU0VUX1RPX0RFRkFVTFQnIHwgdHJhbnNsYXRlIH19XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBEcmFnIEluZm8gLS0+XHJcbiAgPGRpdiBjbGFzcz1cIm1iLTQgcC0yIGJnLWJsdWUtNTAgYm9yZGVyIGJvcmRlci1ibHVlLTIwMCByb3VuZGVkIHRleHQtc20gdGV4dC1ibHVlLTcwMFwiPlxyXG4gICAgPGkgY2xhc3M9XCJwaSBwaS1pbmZvLWNpcmNsZSBtci0yXCI+PC9pPlxyXG4gICAge3sgJ0RSQUdfQ09MVU1OU19JTkZPJyB8IHRyYW5zbGF0ZSB9fVxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIENvbHVtbnMgTGlzdCAtLT5cclxuICA8ZGl2IGNsYXNzPVwic3BhY2UteS0zXCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiY29sdW1ucy5sZW5ndGggPT09IDBcIiBjbGFzcz1cInRleHQtY2VudGVyIHB5LTggcHgtNCBib3JkZXItMiBib3JkZXItZGFzaGVkIGJvcmRlci1ncmF5LTMwMCByb3VuZGVkLWxnIGJnLWdyYXktNTBcIj5cclxuICAgICAgPGkgY2xhc3M9XCJwaSBwaS10YWJsZSB0ZXh0LTR4bCB0ZXh0LWdyYXktNDAwIG1iLTNcIj48L2k+XHJcbiAgICAgIDxwIGNsYXNzPVwidGV4dC1ncmF5LTUwMFwiPnt7ICdOT19DT0xVTU5TX0FWQUlMQUJMRScgfCB0cmFuc2xhdGUgfX08L3A+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uczsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgIGNsYXNzPVwiYmctZ3JheS01MCByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcC0xIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLWdyYXktMTAwXCJcclxuICAgICAgICAgZHJhZ2dhYmxlPVwidHJ1ZVwiXHJcbiAgICAgICAgIChkcmFnc3RhcnQpPVwib25EcmFnU3RhcnQoJGV2ZW50LCBpKVwiXHJcbiAgICAgICAgIChkcmFnb3Zlcik9XCJvbkRyYWdPdmVyKCRldmVudClcIlxyXG4gICAgICAgICAoZHJvcCk9XCJvbkRyb3AoJGV2ZW50LCBpKVwiXHJcbiAgICAgICAgIChkcmFnZW50ZXIpPVwib25EcmFnRW50ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgIChkcmFnbGVhdmUpPVwib25EcmFnTGVhdmUoJGV2ZW50KVwiPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImdyaWQgZ3JpZC1jb2xzLTEyIGdhcC00IGl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgIDwhLS0gRHJhZyBIYW5kbGUgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zcGFuLTEgZmxleCBqdXN0aWZ5LWNlbnRlciBjdXJzb3ItbW92ZSB0ZXh0LWdyYXktNDAwIGhvdmVyOnRleHQtZ3JheS02MDBcIlxyXG4gICAgICAgICAgICAgZHJhZ2dhYmxlPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAoZHJhZ3N0YXJ0KT1cIm9uRHJhZ1N0YXJ0KCRldmVudCwgaSlcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktYmFyc1wiPjwvaT5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBWaXNpYmlsaXR5IFRvZ2dsZSAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNwYW4tMSBmbGV4IGp1c3RpZnktY2VudGVyXCI+XHJcbiAgICAgICAgICA8cC1jaGVja2JveFxyXG4gICAgICAgICAgICBbYmluYXJ5XT1cInRydWVcIlxyXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZ2V0Q29sdW1uQ29udHJvbChjb2x1bW4ua2V5LCAnaXNWaXNpYmxlJylcIlxyXG4gICAgICAgICAgICBbaW5wdXRJZF09XCIndmlzaWJsZV8nICsgY29sdW1uLmtleVwiXHJcbiAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJbJj5kaXZdOmJvcmRlci1ncmF5LTMwMCBbJj5kaXZdOmhvdmVyOmJvcmRlci1ncmF5LTQwMFwiXHJcbiAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvbkZvcm1DaGFuZ2UoKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICA8L3AtY2hlY2tib3g+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gQ29sdW1uIEluZm8gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zcGFuLTEyIG1kOmNvbC1zcGFuLTRcIj5cclxuICAgICAgICAgIDxsYWJlbCBbZm9yXT1cIid2aXNpYmxlXycgKyBjb2x1bW4ua2V5XCIgY2xhc3M9XCJibG9jayBmb250LW1lZGl1bSB0ZXh0LWdyYXktOTAwIGN1cnNvci1wb2ludGVyIGhvdmVyOnRleHQtYmx1ZS02MDBcIj5cclxuICAgICAgICAgICAge3sgY29sdW1uLmxhYmVsIH19XHJcbiAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXhzIHRleHQtZ3JheS01MDAgbXQtMVwiPnt7IGNvbHVtbi5rZXkgfX08L3A+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gRGlzcGxheSBOYW1lIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc3Bhbi0xMiBtZDpjb2wtc3Bhbi0zXCI+XHJcbiAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgKm5nSWY9XCJpc0NvbHVtblZpc2libGUoY29sdW1uLmtleSlcIlxyXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJnZXRDb2x1bW5Db250cm9sKGNvbHVtbi5rZXksICdkaXNwbGF5TmFtZScpXCJcclxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNvbHVtbi5sYWJlbFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsIHB4LTMgcHktMiBib3JkZXIgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWQtbGcgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctYmx1ZS01MDAgZm9jdXM6Ym9yZGVyLWJsdWUtNTAwIHRleHQtc21cIlxyXG4gICAgICAgICAgICAoYmx1cik9XCJvbkZvcm1DaGFuZ2UoKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gQWdncmVnYXRlIEZ1bmN0aW9uIC0tPlxyXG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNvbC1zcGFuLTEyIG1kOmNvbC1zcGFuLTNcIj5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2x1bW4uYWdncmVnYXRhYmxlICYmIGlzQ29sdW1uVmlzaWJsZShjb2x1bW4ua2V5KVwiPlxyXG4gICAgICAgICAgICA8cC1zZWxlY3RcclxuICAgICAgICAgICAgICBbb3B0aW9uc109XCJhZ2dyZWdhdGVGdW5jdGlvbnNcIlxyXG4gICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibGFiZWxcIlxyXG4gICAgICAgICAgICAgIG9wdGlvblZhbHVlPVwidmFsdWVcIlxyXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJnZXRDb2x1bW5Db250cm9sKGNvbHVtbi5rZXksICdhZ2dyZWdhdGVGdW5jdGlvbicpXCJcclxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NFTEVDVF9BR0dSRUdBVEUnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICBbc2hvd0NsZWFyXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIlxyXG4gICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvbkZvcm1DaGFuZ2UoKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9wLXNlbGVjdD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCIhY29sdW1uLmFnZ3JlZ2F0YWJsZSAmJiBpc0NvbHVtblZpc2libGUoY29sdW1uLmtleSlcIiBjbGFzcz1cInRleHQteHMgdGV4dC1ncmF5LTUwMFwiPlxyXG4gICAgICAgICAgICB7eyAnTk9fQUdHUkVHQVRFU19BVkFJTEFCTEUnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gQWdncmVnYXRlIEluZm8gLS0+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJoYXNBZ2dyZWdhdGVGdW5jdGlvbihjb2x1bW4ua2V5KSAmJiBpc0NvbHVtblZpc2libGUoY29sdW1uLmtleSlcIlxyXG4gICAgICAgICAgIGNsYXNzPVwibXQtMyBwLTMgYmctYmx1ZS01MCBib3JkZXIgYm9yZGVyLWJsdWUtMjAwIHJvdW5kZWQtbGdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktaW5mby1jaXJjbGUgdGV4dC1ibHVlLTUwMCB0ZXh0LXNtXCI+PC9pPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtIHRleHQtYmx1ZS04MDBcIj5cclxuICAgICAgICAgICAge3sgJ0FHR1JFR0FURV9JTkZPJyB8IHRyYW5zbGF0ZTp7ZnVuY3Rpb246IGdldEFnZ3JlZ2F0ZUxhYmVsKGdldEFnZ3JlZ2F0ZUZ1bmN0aW9uVmFsdWUoY29sdW1uLmtleSkpfSB9fVxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIFN1bW1hcnkgLS0+XHJcbiAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgc206ZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBnYXAtNCBtdC02IHB0LTQgYm9yZGVyLXQgYm9yZGVyLWdyYXktMjAwXCI+XHJcbiAgICA8c3BhbiBjbGFzcz1cInRleHQtc20gdGV4dC1ncmF5LTYwMFwiPlxyXG4gICAgICB7eyAnQ09MVU1OU19WSVNJQkxFX0NPVU5UJyB8IHRyYW5zbGF0ZTp7dmlzaWJsZTogdmlzaWJsZUNvbHVtbnNDb3VudCwgdG90YWw6IGNvbHVtbnMubGVuZ3RofSB9fVxyXG4gICAgPC9zcGFuPlxyXG4gICAgPCEtLSA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtNCB0ZXh0LXNtXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHRleHQtZ3JlZW4tNjAwXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1jaGFydC1saW5lXCI+PC9pPlxyXG4gICAgICAgIHt7IG51bWVyaWNDb2x1bW5zQ291bnQgfX0ge3sgJ05VTUVSSUMnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgdGV4dC1ibHVlLTYwMFwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwicGkgcGktY2FsY3VsYXRvclwiPjwvaT5cclxuICAgICAgICB7eyBhZ2dyZWdhdGVkQ29sdW1uc0NvdW50IH19IHt7ICdBR0dSRUdBVEVEJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2Rpdj4gLS0+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4gIGAsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgU2VsZWN0TW9kdWxlLFxyXG4gICAgSW5wdXRUZXh0TW9kdWxlLFxyXG4gICAgQnV0dG9uTW9kdWxlLFxyXG4gICAgRGF0ZVBpY2tlck1vZHVsZSxcclxuICAgIENoZWNrYm94TW9kdWxlLFxyXG4gICAgUmFkaW9CdXR0b25Nb2R1bGUsXHJcbiAgICBGb3JtbHlGb3JtLFxyXG4gICAgVG9vbHRpcE1vZHVsZSxcclxuICAgIE1lbnVNb2R1bGUsXHJcbiAgICBUcmFuc2xhdGVNb2R1bGUsXHJcbiAgICBJbnB1dEdyb3VwTW9kdWxlLFxyXG4gICAgSW5wdXRHcm91cEFkZG9uTW9kdWxlLFxyXG4gICAgUG9wb3Zlck1vZHVsZSxcclxuICAgIExpc3Rib3hNb2R1bGVcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb2x1bW5zQnVpbGRlckNvbXBvbmVudCBleHRlbmRzIEZpZWxkVHlwZTxGaWVsZFR5cGVDb25maWc+IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBkcmFnU3RhcnRJbmRleDogbnVtYmVyID0gLTE7XHJcbiAgcHJpdmF0ZSBfY29sdW1uc0Zvcm0hOiBGb3JtR3JvdXA7XHJcblxyXG4gIGFnZ3JlZ2F0ZUZ1bmN0aW9ucyA9IFtcclxuICAgIHsgbGFiZWw6ICdTdW0nLCB2YWx1ZTogJ3N1bScgfSxcclxuICAgIHsgbGFiZWw6ICdBdmVyYWdlJywgdmFsdWU6ICdhdmcnIH0sXHJcbiAgICB7IGxhYmVsOiAnQ291bnQnLCB2YWx1ZTogJ2NvdW50JyB9LFxyXG4gICAgeyBsYWJlbDogJ01pbmltdW0nLCB2YWx1ZTogJ21pbicgfSxcclxuICAgIHsgbGFiZWw6ICdNYXhpbXVtJywgdmFsdWU6ICdtYXgnIH1cclxuICBdO1xyXG5cclxuICBnZXQgY29sdW1ucygpOiBTZWxlY3RGaWVsZFtdIHtcclxuICAgIHJldHVybiB0aGlzLnByb3BzWydmaWVsZHMnXSB8fCBbXTtcclxuICB9XHJcblxyXG4gIGdldCBjb2x1bW5zRm9ybSgpOiBGb3JtR3JvdXAge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbnNGb3JtO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHZpc2libGVDb2x1bW5zQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbCA9PlxyXG4gICAgICB0aGlzLmlzQ29sdW1uVmlzaWJsZShjb2wua2V5KVxyXG4gICAgKS5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBnZXQgbnVtZXJpY0NvbHVtbnNDb3VudCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5pc051bWVyaWMpLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIGdldCBhZ2dyZWdhdGVkQ29sdW1uc0NvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2wgPT5cclxuICAgICAgdGhpcy5oYXNBZ2dyZWdhdGVGdW5jdGlvbihjb2wua2V5KVxyXG4gICAgKS5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm0oKTtcclxuICAgIHRoaXMuc2V0dXBWYWx1ZUNoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8vIEZvcm0gTWV0aG9kc1xyXG4gIGluaXRpYWxpemVGb3JtKCkge1xyXG4gICAgY29uc3QgcGFyZW50Rm9ybSA9IHRoaXMuZm9ybSBhcyBGb3JtR3JvdXA7XHJcbiAgICBjb25zdCBmaWVsZEtleSA9IHRoaXMuZmllbGQua2V5IGFzIHN0cmluZztcclxuXHJcbiAgICBpZiAoIWZpZWxkS2V5KSByZXR1cm47XHJcblxyXG4gICAgLy8gR2V0IG9yIGNyZWF0ZSB0aGUgRm9ybUdyb3VwIGluIHRoZSBwYXJlbnQgZm9ybVxyXG4gICAgbGV0IGZvcm1Hcm91cCA9IHBhcmVudEZvcm0uZ2V0KGZpZWxkS2V5KSBhcyBGb3JtR3JvdXA7XHJcblxyXG4gICAgaWYgKCFmb3JtR3JvdXAgfHwgIShmb3JtR3JvdXAgaW5zdGFuY2VvZiBGb3JtR3JvdXApKSB7XHJcbiAgICAgIC8vIENyZWF0ZSBuZXcgRm9ybUdyb3VwXHJcbiAgICAgIGZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gICAgICBwYXJlbnRGb3JtLnNldENvbnRyb2woZmllbGRLZXksIGZvcm1Hcm91cCk7XHJcblxyXG4gICAgICAvLyBJbml0aWFsaXplIHdpdGggZXhpc3RpbmcgbW9kZWwgZGF0YVxyXG4gICAgICBjb25zdCBpbml0aWFsTW9kZWwgPSB0aGlzLm1vZGVsW2ZpZWxkS2V5XSB8fCB7fTtcclxuXHJcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XHJcbiAgICAgICAgY29uc3QgY29sdW1uQ29uZmlnID0gaW5pdGlhbE1vZGVsW2NvbHVtbi5rZXldIHx8IHt9O1xyXG4gICAgICAgIGNvbnN0IGNvbHVtbkdyb3VwID0gbmV3IEZvcm1Hcm91cCh7XHJcbiAgICAgICAgICBpc1Zpc2libGU6IG5ldyBGb3JtQ29udHJvbChjb2x1bW5Db25maWcuaXNWaXNpYmxlID8/IGNvbHVtbi5kZWZhdWx0VmlzaWJsZSksXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZTogbmV3IEZvcm1Db250cm9sKGNvbHVtbkNvbmZpZy5kaXNwbGF5TmFtZSA/PyBjb2x1bW4ubGFiZWwpLFxyXG4gICAgICAgICAgYWdncmVnYXRlRnVuY3Rpb246IG5ldyBGb3JtQ29udHJvbChjb2x1bW5Db25maWcuYWdncmVnYXRlRnVuY3Rpb24gPz8gJycpLFxyXG4gICAgICAgICAgb3JkZXI6IG5ldyBGb3JtQ29udHJvbChjb2x1bW5Db25maWcub3JkZXIgPz8gMClcclxuICAgICAgICB9KTtcclxuICAgICAgICBmb3JtR3JvdXAuYWRkQ29udHJvbChjb2x1bW4ua2V5LCBjb2x1bW5Hcm91cCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFN0b3JlIHRoZSBGb3JtR3JvdXAgcmVmZXJlbmNlXHJcbiAgICB0aGlzLl9jb2x1bW5zRm9ybSA9IGZvcm1Hcm91cDtcclxuXHJcbiAgICAvLyBJbml0aWFsaXplIHRoZSBtb2RlbCB3aXRoIGN1cnJlbnQgZm9ybSB2YWx1ZXNcclxuICAgIHRoaXMudXBkYXRlTW9kZWwoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBWYWx1ZUNoYW5nZXMoKSB7XHJcbiAgICAvLyBMaXN0ZW4gdG8gZm9ybSBjaGFuZ2VzIGFuZCB1cGRhdGUgdGhlIG1vZGVsXHJcbiAgICB0aGlzLmNvbHVtbnNGb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLnVwZGF0ZU1vZGVsKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlTW9kZWwoKSB7XHJcbiAgICBjb25zdCBmaWVsZEtleSA9IHRoaXMuZmllbGQua2V5IGFzIHN0cmluZztcclxuICAgIGlmIChmaWVsZEtleSkge1xyXG4gICAgICAvLyBVcGRhdGUgdGhlIG1vZGVsIHdpdGggY3VycmVudCBmb3JtIHZhbHVlc1xyXG4gICAgICB0aGlzLm1vZGVsW2ZpZWxkS2V5XSA9IHRoaXMuY29sdW1uc0Zvcm0udmFsdWU7XHJcblxyXG4gICAgICAvLyBUcmlnZ2VyIGZvcm0gY29udHJvbCB1cGRhdGUgdG8gbm90aWZ5IEZvcm1seVxyXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMuY29sdW1uc0Zvcm0udmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gQ2FsbGVkIHdoZW4gZm9ybSBjb250cm9scyBjaGFuZ2VcclxuICBvbkZvcm1DaGFuZ2UoKSB7XHJcbiAgICB0aGlzLnVwZGF0ZU1vZGVsKCk7XHJcbiAgfVxyXG5cclxuICAvLyBEcmFnICYgRHJvcCBNZXRob2RzXHJcbiAgb25EcmFnU3RhcnQoZXZlbnQ6IERyYWdFdmVudCwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5kcmFnU3RhcnRJbmRleCA9IGluZGV4O1xyXG4gICAgZXZlbnQuZGF0YVRyYW5zZmVyPy5zZXREYXRhKCd0ZXh0L3BsYWluJywgaW5kZXgudG9TdHJpbmcoKSk7XHJcbiAgfVxyXG5cclxuICBvbkRyYWdPdmVyKGV2ZW50OiBEcmFnRXZlbnQpIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG5cclxuICBvbkRyb3AoZXZlbnQ6IERyYWdFdmVudCwgZHJvcEluZGV4OiBudW1iZXIpIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBjb25zdCBkcmFnSW5kZXggPSB0aGlzLmRyYWdTdGFydEluZGV4O1xyXG5cclxuICAgIGlmIChkcmFnSW5kZXggIT09IC0xICYmIGRyYWdJbmRleCAhPT0gZHJvcEluZGV4KSB7XHJcbiAgICAgIC8vIFJlb3JkZXIgdGhlIGNvbHVtbnMgYXJyYXlcclxuICAgICAgY29uc3QgbW92ZWRJdGVtID0gdGhpcy5jb2x1bW5zW2RyYWdJbmRleF07XHJcbiAgICAgIGNvbnN0IG5ld0NvbHVtbnMgPSBbLi4udGhpcy5jb2x1bW5zXTtcclxuICAgICAgbmV3Q29sdW1ucy5zcGxpY2UoZHJhZ0luZGV4LCAxKTtcclxuICAgICAgbmV3Q29sdW1ucy5zcGxpY2UoZHJvcEluZGV4LCAwLCBtb3ZlZEl0ZW0pO1xyXG5cclxuICAgICAgLy8gVXBkYXRlIHRoZSBwcm9wcyB0byB0cmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb25cclxuICAgICAgdGhpcy5wcm9wc1snZmllbGRzJ10gPSBuZXdDb2x1bW5zO1xyXG5cclxuICAgICAgLy8gVXBkYXRlIG9yZGVyIGluIGZvcm0gY29udHJvbHNcclxuICAgICAgdGhpcy51cGRhdGVDb2x1bW5PcmRlcnMoKTtcclxuXHJcbiAgICAgIC8vIFVwZGF0ZSBtb2RlbCBhZnRlciByZW9yZGVyaW5nXHJcbiAgICAgIHRoaXMudXBkYXRlTW9kZWwoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbW92ZURyYWdTdHlsZXMoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgb25EcmFnRW50ZXIoZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgKGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdC5hZGQoJ2JvcmRlci1ibHVlLTUwMCcsICdiZy1ibHVlLTUwJyk7XHJcbiAgfVxyXG5cclxuICBvbkRyYWdMZWF2ZShldmVudDogRHJhZ0V2ZW50KSB7XHJcbiAgICB0aGlzLnJlbW92ZURyYWdTdHlsZXMoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVEcmFnU3R5bGVzKGV2ZW50OiBEcmFnRXZlbnQpIHtcclxuICAgIChldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbGFzc0xpc3QucmVtb3ZlKCdib3JkZXItYmx1ZS01MDAnLCAnYmctYmx1ZS01MCcpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVDb2x1bW5PcmRlcnMoKSB7XHJcbiAgICAvLyBTdG9yZSB0aGUgb3JkZXIgaW4gZm9ybSBjb250cm9sc1xyXG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbiwgaW5kZXgpID0+IHtcclxuICAgICAgY29uc3Qgb3JkZXJDb250cm9sID0gdGhpcy5nZXRDb2x1bW5Db250cm9sKGNvbHVtbi5rZXksICdvcmRlcicpO1xyXG4gICAgICBpZiAoIW9yZGVyQ29udHJvbCkge1xyXG4gICAgICAgIGNvbnN0IGNvbHVtbkdyb3VwID0gdGhpcy5jb2x1bW5zRm9ybS5nZXQoY29sdW1uLmtleSkgYXMgRm9ybUdyb3VwO1xyXG4gICAgICAgIGlmIChjb2x1bW5Hcm91cCAmJiAhY29sdW1uR3JvdXAuZ2V0KCdvcmRlcicpKSB7XHJcbiAgICAgICAgICBjb2x1bW5Hcm91cC5hZGRDb250cm9sKCdvcmRlcicsIG5ldyBGb3JtQ29udHJvbChpbmRleCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBvcmRlckNvbnRyb2wuc2V0VmFsdWUoaW5kZXgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldENvbHVtbkNvbnRyb2woY29sdW1uS2V5OiBzdHJpbmcsIGNvbnRyb2xOYW1lOiBzdHJpbmcpOiBGb3JtQ29udHJvbCB7XHJcbiAgICBjb25zdCBjb2x1bW5Hcm91cCA9IHRoaXMuY29sdW1uc0Zvcm0uZ2V0KGNvbHVtbktleSkgYXMgRm9ybUdyb3VwO1xyXG4gICAgaWYgKCFjb2x1bW5Hcm91cCkge1xyXG4gICAgICBjb25zdCBmYWxsYmFja0NvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2wodGhpcy5nZXREZWZhdWx0VmFsdWUoY29udHJvbE5hbWUpKTtcclxuICAgICAgcmV0dXJuIGZhbGxiYWNrQ29udHJvbDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjb250cm9sID0gY29sdW1uR3JvdXAuZ2V0KGNvbnRyb2xOYW1lKSBhcyBGb3JtQ29udHJvbDtcclxuICAgIGlmICghY29udHJvbCkge1xyXG4gICAgICBjb25zdCBmYWxsYmFja0NvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2wodGhpcy5nZXREZWZhdWx0VmFsdWUoY29udHJvbE5hbWUpKTtcclxuICAgICAgY29sdW1uR3JvdXAuYWRkQ29udHJvbChjb250cm9sTmFtZSwgZmFsbGJhY2tDb250cm9sKTtcclxuICAgICAgcmV0dXJuIGZhbGxiYWNrQ29udHJvbDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY29udHJvbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RGVmYXVsdFZhbHVlKGNvbnRyb2xOYW1lOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgc3dpdGNoIChjb250cm9sTmFtZSkge1xyXG4gICAgICBjYXNlICdpc1Zpc2libGUnOiByZXR1cm4gdHJ1ZTtcclxuICAgICAgY2FzZSAnZGlzcGxheU5hbWUnOiByZXR1cm4gJyc7XHJcbiAgICAgIGNhc2UgJ2FnZ3JlZ2F0ZUZ1bmN0aW9uJzogcmV0dXJuICcnO1xyXG4gICAgICBjYXNlICdvcmRlcic6IHJldHVybiAwO1xyXG4gICAgICBkZWZhdWx0OiByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzQ29sdW1uVmlzaWJsZShjb2x1bW5LZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZ2V0Q29sdW1uQ29udHJvbChjb2x1bW5LZXksICdpc1Zpc2libGUnKTtcclxuICAgIHJldHVybiBjb250cm9sPy52YWx1ZSA9PT0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGhhc0FnZ3JlZ2F0ZUZ1bmN0aW9uKGNvbHVtbktleTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5nZXRDb2x1bW5Db250cm9sKGNvbHVtbktleSwgJ2FnZ3JlZ2F0ZUZ1bmN0aW9uJyk7XHJcbiAgICByZXR1cm4gISFjb250cm9sPy52YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldEFnZ3JlZ2F0ZUZ1bmN0aW9uVmFsdWUoY29sdW1uS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZ2V0Q29sdW1uQ29udHJvbChjb2x1bW5LZXksICdhZ2dyZWdhdGVGdW5jdGlvbicpO1xyXG4gICAgcmV0dXJuIGNvbnRyb2w/LnZhbHVlIHx8ICcnO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlQWxsKHZpc2libGU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XHJcbiAgICAgIGNvbnN0IHZpc2libGVDb250cm9sID0gdGhpcy5nZXRDb2x1bW5Db250cm9sKGNvbHVtbi5rZXksICdpc1Zpc2libGUnKTtcclxuICAgICAgaWYgKHZpc2libGVDb250cm9sKSB7XHJcbiAgICAgICAgdmlzaWJsZUNvbnRyb2wuc2V0VmFsdWUodmlzaWJsZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy51cGRhdGVNb2RlbCgpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXRUb0RlZmF1bHQoKSB7XHJcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uLCBpbmRleCkgPT4ge1xyXG4gICAgICBjb25zdCBjb2x1bW5Hcm91cCA9IHRoaXMuY29sdW1uc0Zvcm0uZ2V0KGNvbHVtbi5rZXkpIGFzIEZvcm1Hcm91cDtcclxuICAgICAgaWYgKGNvbHVtbkdyb3VwKSB7XHJcbiAgICAgICAgY29sdW1uR3JvdXAuZ2V0KCdpc1Zpc2libGUnKT8uc2V0VmFsdWUoY29sdW1uLmRlZmF1bHRWaXNpYmxlKTtcclxuICAgICAgICBjb2x1bW5Hcm91cC5nZXQoJ2Rpc3BsYXlOYW1lJyk/LnNldFZhbHVlKGNvbHVtbi5sYWJlbCk7XHJcbiAgICAgICAgY29sdW1uR3JvdXAuZ2V0KCdhZ2dyZWdhdGVGdW5jdGlvbicpPy5zZXRWYWx1ZSgnJyk7XHJcbiAgICAgICAgY29sdW1uR3JvdXAuZ2V0KCdvcmRlcicpPy5zZXRWYWx1ZShpbmRleCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy51cGRhdGVNb2RlbCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWdncmVnYXRlTGFiZWwoZnVuY3Rpb25OYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZnVuYyA9IHRoaXMuYWdncmVnYXRlRnVuY3Rpb25zLmZpbmQoZiA9PiBmLnZhbHVlID09PSBmdW5jdGlvbk5hbWUpO1xyXG4gICAgcmV0dXJuIGZ1bmMgPyBmdW5jLmxhYmVsIDogZnVuY3Rpb25OYW1lO1xyXG4gIH1cclxufVxyXG4iXX0=","// group-builder.component.ts\nimport { Component } from '@angular/core';\nimport { FieldType, FormlyForm } from '@ngx-formly/core';\nimport { FormGroup, FormArray, FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ButtonModule } from 'primeng/button';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { DatePickerModule } from 'primeng/datepicker';\nimport { InputGroupModule } from 'primeng/inputgroup';\nimport { InputGroupAddonModule } from 'primeng/inputgroupaddon';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { ListboxModule } from 'primeng/listbox';\nimport { MenuModule } from 'primeng/menu';\nimport { PopoverModule } from 'primeng/popover';\nimport { RadioButtonModule } from 'primeng/radiobutton';\nimport { SelectModule } from 'primeng/select';\nimport { TooltipModule } from 'primeng/tooltip';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@angular/forms\";\nimport * as i3 from \"primeng/select\";\nimport * as i4 from \"primeng/api\";\nimport * as i5 from \"primeng/inputtext\";\nimport * as i6 from \"primeng/checkbox\";\nimport * as i7 from \"primeng/tooltip\";\nimport * as i8 from \"@ngx-translate/core\";\nexport class GroupBuilderComponent extends FieldType {\n _groups;\n dragStartIndex = -1;\n get groups() {\n return this._groups;\n }\n get availableFields() {\n return this.props['fields'] || [];\n }\n get maxGroups() {\n return this.props['maxGroups'] || 3;\n }\n ngOnInit() {\n this.initializeFormArray();\n this.setupValueChanges();\n }\n initializeFormArray() {\n const parentForm = this.form;\n const fieldKey = this.field.key;\n if (!fieldKey)\n return;\n // Get or create the FormArray in the parent form\n let formArray = parentForm.get(fieldKey);\n if (!formArray || !(formArray instanceof FormArray)) {\n // Create new FormArray\n formArray = new FormArray([]);\n parentForm.setControl(fieldKey, formArray);\n // Initialize with existing model data\n const initialValue = this.model[fieldKey];\n if (Array.isArray(initialValue)) {\n initialValue.forEach(group => {\n formArray.push(this.createGroupControl(group));\n });\n }\n }\n // Store the FormArray reference\n this._groups = formArray;\n }\n setupValueChanges() {\n // Listen to form array changes and update the model\n this.groups.valueChanges.subscribe(() => {\n this.updateModel();\n });\n }\n updateModel() {\n const fieldKey = this.field.key;\n if (fieldKey) {\n // Update the model with current form values\n this.model[fieldKey] = this.groups.value;\n // Trigger form control update to notify Formly\n this.formControl.setValue(this.groups.value);\n // Mark form control as touched/dirty if needed\n this.formControl.markAsTouched();\n this.formControl.markAsDirty();\n }\n }\n // Called when form controls change\n onFormChange() {\n this.updateModel();\n }\n createGroupControl(group) {\n return new FormGroup({\n field: new FormControl(group?.field || ''),\n displayName: new FormControl(group?.displayName || ''),\n showTotal: new FormControl(group?.showTotal !== false)\n });\n }\n addGroup() {\n if (this.canAddMoreGroups()) {\n this.groups.push(this.createGroupControl());\n this.updateModel();\n }\n }\n removeGroup(index) {\n this.groups.removeAt(index);\n this.updateModel();\n }\n // Drag & Drop Methods\n onDragStart(event, index) {\n this.dragStartIndex = index;\n event.dataTransfer?.setData('text/plain', index.toString());\n event.currentTarget.classList.add('opacity-50', 'border-blue-300');\n }\n onDragOver(event) {\n event.preventDefault();\n }\n onDrop(event, dropIndex) {\n event.preventDefault();\n const dragIndex = this.dragStartIndex;\n if (dragIndex !== -1 && dragIndex !== dropIndex) {\n this.moveGroup(dragIndex, dropIndex);\n }\n this.removeDragStyles(event);\n }\n onDragEnter(event) {\n event.currentTarget.classList.add('border-blue-500', 'bg-blue-50', 'border-2');\n }\n onDragLeave(event) {\n this.removeDragStyles(event);\n }\n onDragEnd(event) {\n this.removeDragStyles(event);\n this.dragStartIndex = -1;\n }\n removeDragStyles(event) {\n const element = event.currentTarget;\n element.classList.remove('border-blue-500', 'bg-blue-50', 'opacity-50', 'border-blue-300', 'border-2');\n }\n moveGroup(fromIndex, toIndex) {\n const movedGroup = this.groups.at(fromIndex);\n this.groups.removeAt(fromIndex);\n this.groups.insert(toIndex, movedGroup);\n this.updateModel();\n }\n getGroupControl(index, controlName) {\n const group = this.groups.at(index);\n return group.get(controlName);\n }\n onFieldChange(index, fieldKey) {\n const displayNameControl = this.getGroupControl(index, 'displayName');\n if (!displayNameControl.value && fieldKey) {\n const field = this.availableFields.find(f => f.key === fieldKey);\n if (field) {\n displayNameControl.setValue(field.label);\n }\n }\n this.updateModel();\n }\n getFieldLabel(fieldKey) {\n const field = this.availableFields.find(f => f.key === fieldKey);\n return field ? field.label : fieldKey;\n }\n canAddMoreGroups() {\n return this.groups.length < this.maxGroups;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GroupBuilderComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.1.8\", type: GroupBuilderComponent, isStandalone: true, selector: \"formly-group-builder\", usesInheritance: true, ngImport: i0, template: `<div>\r\n <!-- Header -->\r\n <div class=\"mb-6\">\r\n <h5 class=\"text-lg font-semibold text-gray-900 mb-2\">{{ props.label || ('DATA_GROUPING' | translate) }}</h5>\r\n <p class=\"text-gray-600 text-sm\">{{ props.description || ('GROUP_DESCRIPTION' | translate) }}</p>\r\n </div>\r\n\r\n <!-- Group Configuration -->\r\n <div class=\"space-y-4\">\r\n <div class=\"flex items-center justify-between\">\r\n <span class=\"font-medium text-gray-700\">{{ 'GROUP_LEVELS' | translate }}</span>\r\n <button\r\n type=\"button\"\r\n *ngIf=\"canAddMoreGroups()\"\r\n (click)=\"addGroup()\"\r\n [disabled]=\"!canAddMoreGroups()\"\r\n class=\"inline-flex items-center gap-2 px-3 py-2 text-sm font-medium text-blue-700 bg-blue-50 rounded-lg hover:bg-blue-100 disabled:opacity-50 disabled:cursor-not-allowed transition-colors\"\r\n >\r\n <i class=\"pi pi-plus\"></i>\r\n {{ 'ADD_GROUP_LEVEL' | translate }}\r\n </button>\r\n </div>\r\n\r\n <!-- Drag Info -->\r\n <div *ngIf=\"groups.length > 1\" class=\"mb-4 p-2 bg-blue-50 border border-blue-200 rounded text-sm text-blue-700\">\r\n <i class=\"pi pi-info-circle mr-2\"></i>\r\n {{ 'DRAG_INFO' | translate }}\r\n </div>\r\n\r\n <!-- Empty State -->\r\n <div *ngIf=\"groups.length === 0\" class=\"text-center py-8 px-4 border-2 border-dashed border-gray-300 rounded-lg bg-gray-50\">\r\n <i class=\"pi pi-layer-group text-4xl text-gray-400 mb-3\"></i>\r\n <p class=\"text-gray-500 mb-4\">{{ 'NO_GROUPING_LEVELS' | translate }}</p>\r\n <button\r\n type=\"button\"\r\n (click)=\"addGroup()\"\r\n class=\"inline-flex items-center gap-2 px-4 py-2 text-sm font-medium text-white bg-blue-600 rounded-lg hover:bg-blue-700 transition-colors\"\r\n >\r\n <i class=\"pi pi-plus\"></i>\r\n {{ 'ADD_FIRST_GROUP_LEVEL' | translate }}\r\n </button>\r\n </div>\r\n\r\n <!-- Groups List with Drag & Drop -->\r\n <div class=\"space-y-3\">\r\n <div *ngFor=\"let group of groups.controls; let i = index\"\r\n class=\"bg-gray-50 rounded-lg border border-gray-200 p-4 transition-colors hover:bg-gray-100\"\r\n draggable=\"true\"\r\n (dragstart)=\"onDragStart($event, i)\"\r\n (dragover)=\"onDragOver($event)\"\r\n (drop)=\"onDrop($event, i)\"\r\n (dragenter)=\"onDragEnter($event)\"\r\n (dragleave)=\"onDragLeave($event)\"\r\n (dragend)=\"onDragEnd($event)\">\r\n\r\n <div class=\"grid grid-cols-12 gap-4 items-start\">\r\n <!-- Drag Handle -->\r\n <div *ngIf=\"groups.length > 1\"\r\n class=\"col-span-1 flex justify-center cursor-move text-gray-400 hover:text-gray-600 pt-2\"\r\n draggable=\"true\"\r\n (dragstart)=\"onDragStart($event, i)\">\r\n <i class=\"pi pi-bars\"></i>\r\n </div>\r\n\r\n <!-- Group Content -->\r\n <div class=\"col-span-11\">\r\n <div class=\"flex items-center justify-between mb-3\">\r\n <div class=\"flex items-center gap-2\">\r\n <i class=\"pi pi-sort-alt text-gray-500\"></i>\r\n <span class=\"font-medium text-gray-700\">{{ 'GROUP_LEVEL' | translate }} {{ i + 1 }}</span>\r\n </div>\r\n <div class=\"flex items-center gap-1\">\r\n <button\r\n type=\"button\"\r\n (click)=\"removeGroup(i)\"\r\n class=\"p-1 text-red-500 hover:text-red-700 hover:bg-red-50 rounded transition-colors\"\r\n [pTooltip]=\"'REMOVE' | translate\"\r\n >\r\n <i class=\"pi pi-times\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n <!-- Field Selection -->\r\n <div>\r\n <label class=\"block text-sm font-medium text-gray-700 mb-2\">{{ 'FIELD' | translate }}</label>\r\n <p-select\r\n [options]=\"availableFields\"\r\n optionLabel=\"label\"\r\n optionValue=\"key\"\r\n [formControl]=\"getGroupControl(i, 'field')\"\r\n [placeholder]=\"'SELECT_FIELD' | translate\"\r\n [showClear]=\"true\"\r\n (onChange)=\"onFieldChange(i, $event.value)\"\r\n styleClass=\"w-full\"\r\n >\r\n <ng-template pTemplate=\"selectedItem\">\r\n <span *ngIf=\"getGroupControl(i, 'field').value\" class=\"text-gray-900\">\r\n {{ getFieldLabel(getGroupControl(i, 'field').value) }}\r\n </span>\r\n <span *ngIf=\"!getGroupControl(i, 'field').value\" class=\"text-gray-500\">{{ 'SELECT_FIELD' | translate }}</span>\r\n </ng-template>\r\n </p-select>\r\n </div>\r\n\r\n <!-- Display Name -->\r\n <div>\r\n <label class=\"block text-sm font-medium text-gray-700 mb-2\">{{ 'DISPLAY_NAME' | translate }}</label>\r\n <input\r\n type=\"text\"\r\n pInputText\r\n [formControl]=\"getGroupControl(i, 'displayName')\"\r\n [placeholder]=\"'DISPLAY_NAME_PLACEHOLDER' | translate\"\r\n class=\"w-full text-gray-900\"\r\n (blur)=\"onFormChange()\"\r\n >\r\n </div>\r\n </div>\r\n\r\n <!-- Show Total Toggle -->\r\n <div class=\"flex items-center gap-2 mt-3\">\r\n <p-checkbox\r\n [binary]=\"true\"\r\n [formControl]=\"getGroupControl(i, 'showTotal')\"\r\n [inputId]=\"'showTotal' + i\"\r\n styleClass=\"[&>div]:border-gray-300 [&>div]:hover:border-gray-400\"\r\n (onChange)=\"onFormChange()\"\r\n >\r\n </p-checkbox>\r\n <label [for]=\"'showTotal' + i\" class=\"text-sm text-gray-700 cursor-pointer hover:text-gray-900\">\r\n {{ 'SHOW_TOTAL' | translate }}\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Grouping Tips -->\r\n <div *ngIf=\"groups.length > 0\" class=\"mt-4 p-4 bg-blue-50 border border-blue-200 rounded-lg\">\r\n <div class=\"flex items-center gap-3\">\r\n <i class=\"pi pi-info-circle text-blue-500\"></i>\r\n <div>\r\n <p class=\"text-sm text-blue-800\">\r\n {{ 'GROUPING_TIPS' | translate }}\r\n {{ groups.length }} {{ 'LEVELS_DEFINED' | translate:{count: groups.length} }}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n</div>`, isInline: true, dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i2.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i2.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"ngmodule\", type: ReactiveFormsModule }, { kind: \"directive\", type: i2.FormControlDirective, selector: \"[formControl]\", inputs: [\"formControl\", \"disabled\", \"ngModel\"], outputs: [\"ngModelChange\"], exportAs: [\"ngForm\"] }, { kind: \"ngmodule\", type: SelectModule }, { kind: \"component\", type: i3.Select, selector: \"p-select\", inputs: [\"id\", \"scrollHeight\", \"filter\", \"panelStyle\", \"styleClass\", \"panelStyleClass\", \"readonly\", \"editable\", \"tabindex\", \"placeholder\", \"loadingIcon\", \"filterPlaceholder\", \"filterLocale\", \"inputId\", \"dataKey\", \"filterBy\", \"filterFields\", \"autofocus\", \"resetFilterOnHide\", \"checkmark\", \"dropdownIcon\", \"loading\", \"optionLabel\", \"optionValue\", \"optionDisabled\", \"optionGroupLabel\", \"optionGroupChildren\", \"group\", \"showClear\", \"emptyFilterMessage\", \"emptyMessage\", \"lazy\", \"virtualScroll\", \"virtualScrollItemSize\", \"virtualScrollOptions\", \"overlayOptions\", \"ariaFilterLabel\", \"ariaLabel\", \"ariaLabelledBy\", \"filterMatchMode\", \"tooltip\", \"tooltipPosition\", \"tooltipPositionStyle\", \"tooltipStyleClass\", \"focusOnHover\", \"selectOnFocus\", \"autoOptionFocus\", \"autofocusFilter\", \"filterValue\", \"options\", \"appendTo\"], outputs: [\"onChange\", \"onFilter\", \"onFocus\", \"onBlur\", \"onClick\", \"onShow\", \"onHide\", \"onClear\", \"onLazyLoad\"] }, { kind: \"directive\", type: i4.PrimeTemplate, selector: \"[pTemplate]\", inputs: [\"type\", \"pTemplate\"] }, { kind: \"ngmodule\", type: InputTextModule }, { kind: \"directive\", type: i5.InputText, selector: \"[pInputText]\", inputs: [\"pSize\", \"variant\", \"fluid\", \"invalid\"] }, { kind: \"ngmodule\", type: ButtonModule }, { kind: \"ngmodule\", type: DatePickerModule }, { kind: \"ngmodule\", type: CheckboxModule }, { kind: \"component\", type: i6.Checkbox, selector: \"p-checkbox, p-checkBox, p-check-box\", inputs: [\"value\", \"binary\", \"ariaLabelledBy\", \"ariaLabel\", \"tabindex\", \"inputId\", \"inputStyle\", \"styleClass\", \"inputClass\", \"indeterminate\", \"formControl\", \"checkboxIcon\", \"readonly\", \"autofocus\", \"trueValue\", \"falseValue\", \"variant\", \"size\"], outputs: [\"onChange\", \"onFocus\", \"onBlur\"] }, { kind: \"ngmodule\", type: RadioButtonModule }, { kind: \"ngmodule\", type: TooltipModule }, { kind: \"directive\", type: i7.Tooltip, selector: \"[pTooltip]\", inputs: [\"tooltipPosition\", \"tooltipEvent\", \"positionStyle\", \"tooltipStyleClass\", \"tooltipZIndex\", \"escape\", \"showDelay\", \"hideDelay\", \"life\", \"positionTop\", \"positionLeft\", \"autoHide\", \"fitContent\", \"hideOnEscape\", \"pTooltip\", \"tooltipDisabled\", \"tooltipOptions\", \"appendTo\"] }, { kind: \"ngmodule\", type: MenuModule }, { kind: \"ngmodule\", type: TranslateModule }, { kind: \"ngmodule\", type: InputGroupModule }, { kind: \"ngmodule\", type: InputGroupAddonModule }, { kind: \"ngmodule\", type: PopoverModule }, { kind: \"ngmodule\", type: ListboxModule }, { kind: \"pipe\", type: i8.TranslatePipe, name: \"translate\" }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GroupBuilderComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'formly-group-builder',\n template: `<div>\r\n <!-- Header -->\r\n <div class=\"mb-6\">\r\n <h5 class=\"text-lg font-semibold text-gray-900 mb-2\">{{ props.label || ('DATA_GROUPING' | translate) }}</h5>\r\n <p class=\"text-gray-600 text-sm\">{{ props.description || ('GROUP_DESCRIPTION' | translate) }}</p>\r\n </div>\r\n\r\n <!-- Group Configuration -->\r\n <div class=\"space-y-4\">\r\n <div class=\"flex items-center justify-between\">\r\n <span class=\"font-medium text-gray-700\">{{ 'GROUP_LEVELS' | translate }}</span>\r\n <button\r\n type=\"button\"\r\n *ngIf=\"canAddMoreGroups()\"\r\n (click)=\"addGroup()\"\r\n [disabled]=\"!canAddMoreGroups()\"\r\n class=\"inline-flex items-center gap-2 px-3 py-2 text-sm font-medium text-blue-700 bg-blue-50 rounded-lg hover:bg-blue-100 disabled:opacity-50 disabled:cursor-not-allowed transition-colors\"\r\n >\r\n <i class=\"pi pi-plus\"></i>\r\n {{ 'ADD_GROUP_LEVEL' | translate }}\r\n </button>\r\n </div>\r\n\r\n <!-- Drag Info -->\r\n <div *ngIf=\"groups.length > 1\" class=\"mb-4 p-2 bg-blue-50 border border-blue-200 rounded text-sm text-blue-700\">\r\n <i class=\"pi pi-info-circle mr-2\"></i>\r\n {{ 'DRAG_INFO' | translate }}\r\n </div>\r\n\r\n <!-- Empty State -->\r\n <div *ngIf=\"groups.length === 0\" class=\"text-center py-8 px-4 border-2 border-dashed border-gray-300 rounded-lg bg-gray-50\">\r\n <i class=\"pi pi-layer-group text-4xl text-gray-400 mb-3\"></i>\r\n <p class=\"text-gray-500 mb-4\">{{ 'NO_GROUPING_LEVELS' | translate }}</p>\r\n <button\r\n type=\"button\"\r\n (click)=\"addGroup()\"\r\n class=\"inline-flex items-center gap-2 px-4 py-2 text-sm font-medium text-white bg-blue-600 rounded-lg hover:bg-blue-700 transition-colors\"\r\n >\r\n <i class=\"pi pi-plus\"></i>\r\n {{ 'ADD_FIRST_GROUP_LEVEL' | translate }}\r\n </button>\r\n </div>\r\n\r\n <!-- Groups List with Drag & Drop -->\r\n <div class=\"space-y-3\">\r\n <div *ngFor=\"let group of groups.controls; let i = index\"\r\n class=\"bg-gray-50 rounded-lg border border-gray-200 p-4 transition-colors hover:bg-gray-100\"\r\n draggable=\"true\"\r\n (dragstart)=\"onDragStart($event, i)\"\r\n (dragover)=\"onDragOver($event)\"\r\n (drop)=\"onDrop($event, i)\"\r\n (dragenter)=\"onDragEnter($event)\"\r\n (dragleave)=\"onDragLeave($event)\"\r\n (dragend)=\"onDragEnd($event)\">\r\n\r\n <div class=\"grid grid-cols-12 gap-4 items-start\">\r\n <!-- Drag Handle -->\r\n <div *ngIf=\"groups.length > 1\"\r\n class=\"col-span-1 flex justify-center cursor-move text-gray-400 hover:text-gray-600 pt-2\"\r\n draggable=\"true\"\r\n (dragstart)=\"onDragStart($event, i)\">\r\n <i class=\"pi pi-bars\"></i>\r\n </div>\r\n\r\n <!-- Group Content -->\r\n <div class=\"col-span-11\">\r\n <div class=\"flex items-center justify-between mb-3\">\r\n <div class=\"flex items-center gap-2\">\r\n <i class=\"pi pi-sort-alt text-gray-500\"></i>\r\n <span class=\"font-medium text-gray-700\">{{ 'GROUP_LEVEL' | translate }} {{ i + 1 }}</span>\r\n </div>\r\n <div class=\"flex items-center gap-1\">\r\n <button\r\n type=\"button\"\r\n (click)=\"removeGroup(i)\"\r\n class=\"p-1 text-red-500 hover:text-red-700 hover:bg-red-50 rounded transition-colors\"\r\n [pTooltip]=\"'REMOVE' | translate\"\r\n >\r\n <i class=\"pi pi-times\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n <!-- Field Selection -->\r\n <div>\r\n <label class=\"block text-sm font-medium text-gray-700 mb-2\">{{ 'FIELD' | translate }}</label>\r\n <p-select\r\n [options]=\"availableFields\"\r\n optionLabel=\"label\"\r\n optionValue=\"key\"\r\n [formControl]=\"getGroupControl(i, 'field')\"\r\n [placeholder]=\"'SELECT_FIELD' | translate\"\r\n [showClear]=\"true\"\r\n (onChange)=\"onFieldChange(i, $event.value)\"\r\n styleClass=\"w-full\"\r\n >\r\n <ng-template pTemplate=\"selectedItem\">\r\n <span *ngIf=\"getGroupControl(i, 'field').value\" class=\"text-gray-900\">\r\n {{ getFieldLabel(getGroupControl(i, 'field').value) }}\r\n </span>\r\n <span *ngIf=\"!getGroupControl(i, 'field').value\" class=\"text-gray-500\">{{ 'SELECT_FIELD' | translate }}</span>\r\n </ng-template>\r\n </p-select>\r\n </div>\r\n\r\n <!-- Display Name -->\r\n <div>\r\n <label class=\"block text-sm font-medium text-gray-700 mb-2\">{{ 'DISPLAY_NAME' | translate }}</label>\r\n <input\r\n type=\"text\"\r\n pInputText\r\n [formControl]=\"getGroupControl(i, 'displayName')\"\r\n [placeholder]=\"'DISPLAY_NAME_PLACEHOLDER' | translate\"\r\n class=\"w-full text-gray-900\"\r\n (blur)=\"onFormChange()\"\r\n >\r\n </div>\r\n </div>\r\n\r\n <!-- Show Total Toggle -->\r\n <div class=\"flex items-center gap-2 mt-3\">\r\n <p-checkbox\r\n [binary]=\"true\"\r\n [formControl]=\"getGroupControl(i, 'showTotal')\"\r\n [inputId]=\"'showTotal' + i\"\r\n styleClass=\"[&>div]:border-gray-300 [&>div]:hover:border-gray-400\"\r\n (onChange)=\"onFormChange()\"\r\n >\r\n </p-checkbox>\r\n <label [for]=\"'showTotal' + i\" class=\"text-sm text-gray-700 cursor-pointer hover:text-gray-900\">\r\n {{ 'SHOW_TOTAL' | translate }}\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Grouping Tips -->\r\n <div *ngIf=\"groups.length > 0\" class=\"mt-4 p-4 bg-blue-50 border border-blue-200 rounded-lg\">\r\n <div class=\"flex items-center gap-3\">\r\n <i class=\"pi pi-info-circle text-blue-500\"></i>\r\n <div>\r\n <p class=\"text-sm text-blue-800\">\r\n {{ 'GROUPING_TIPS' | translate }}\r\n {{ groups.length }} {{ 'LEVELS_DEFINED' | translate:{count: groups.length} }}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n</div>`,\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n SelectModule,\n InputTextModule,\n ButtonModule,\n DatePickerModule,\n CheckboxModule,\n RadioButtonModule,\n FormlyForm,\n TooltipModule,\n MenuModule,\n TranslateModule,\n InputGroupModule,\n InputGroupAddonModule,\n PopoverModule,\n ListboxModule\n ]\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtYnVpbGRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLnVpLmNvcmUvZ2VuZXJpYy1zZWFyY2gtYWR2YW5jZWQvc3JjL2xpYi9ncm91cC1idWlsZGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw2QkFBNkI7QUFDN0IsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFtQixVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJB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QXJCLHFCQUFxQix1R0E3S3RCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXdKTCwyREFFSCxZQUFZLCtQQUNaLFdBQVcsc1pBQ1gsbUJBQW1CLGlOQUNuQixZQUFZLCtsQ0FDWixlQUFlLHFKQUNmLFlBQVksOEJBQ1osZ0JBQWdCLDhCQUNoQixjQUFjLHlaQUNkLGlCQUFpQiw4QkFFakIsYUFBYSxxWEFDYixVQUFVLDhCQUNWLGVBQWUsOEJBQ2YsZ0JBQWdCLDhCQUNoQixxQkFBcUIsOEJBQ3JCLGFBQWEsOEJBQ2IsYUFBYTs7MkZBR0oscUJBQXFCO2tCQS9LakMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsc0JBQXNCO29CQUNoQyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Bd0pMO29CQUNMLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsWUFBWTt3QkFDWixnQkFBZ0I7d0JBQ2hCLGNBQWM7d0JBQ2QsaUJBQWlCO3dCQUNqQixVQUFVO3dCQUNWLGFBQWE7d0JBQ2IsVUFBVTt3QkFDVixlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIscUJBQXFCO3dCQUNyQixhQUFhO3dCQUNiLGFBQWE7cUJBQ2Q7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBncm91cC1idWlsZGVyLmNvbXBvbmVudC50c1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGaWVsZFR5cGUsIEZpZWxkVHlwZUNvbmZpZywgRm9ybWx5Rm9ybSB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBHcm91cEJ5RmllbGQgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xyXG5pbXBvcnQgeyBDaGVja2JveE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvY2hlY2tib3gnO1xyXG5pbXBvcnQgeyBEYXRlUGlja2VyTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9kYXRlcGlja2VyJztcclxuaW1wb3J0IHsgSW5wdXRHcm91cE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvaW5wdXRncm91cCc7XHJcbmltcG9ydCB7IElucHV0R3JvdXBBZGRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvaW5wdXRncm91cGFkZG9uJztcclxuaW1wb3J0IHsgSW5wdXRUZXh0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pbnB1dHRleHQnO1xyXG5pbXBvcnQgeyBMaXN0Ym94TW9kdWxlIH0gZnJvbSAncHJpbWVuZy9saXN0Ym94JztcclxuaW1wb3J0IHsgTWVudU1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvbWVudSc7XHJcbmltcG9ydCB7IFBvcG92ZXJNb2R1bGUgfSBmcm9tICdwcmltZW5nL3BvcG92ZXInO1xyXG5pbXBvcnQgeyBSYWRpb0J1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvcmFkaW9idXR0b24nO1xyXG5pbXBvcnQgeyBTZWxlY3RNb2R1bGUgfSBmcm9tICdwcmltZW5nL3NlbGVjdCc7XHJcbmltcG9ydCB7IFRvb2x0aXBNb2R1bGUgfSBmcm9tICdwcmltZW5nL3Rvb2x0aXAnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdmb3JtbHktZ3JvdXAtYnVpbGRlcicsXHJcbiAgdGVtcGxhdGU6IGA8ZGl2PlxyXG4gIDwhLS0gSGVhZGVyIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJtYi02XCI+XHJcbiAgICA8aDUgY2xhc3M9XCJ0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTkwMCBtYi0yXCI+e3sgcHJvcHMubGFiZWwgfHwgKCdEQVRBX0dST1VQSU5HJyB8IHRyYW5zbGF0ZSkgfX08L2g1PlxyXG4gICAgPHAgY2xhc3M9XCJ0ZXh0LWdyYXktNjAwIHRleHQtc21cIj57eyBwcm9wcy5kZXNjcmlwdGlvbiB8fCAoJ0dST1VQX0RFU0NSSVBUSU9OJyB8IHRyYW5zbGF0ZSkgfX08L3A+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gR3JvdXAgQ29uZmlndXJhdGlvbiAtLT5cclxuICA8ZGl2IGNsYXNzPVwic3BhY2UteS00XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMFwiPnt7ICdHUk9VUF9MRVZFTFMnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgKm5nSWY9XCJjYW5BZGRNb3JlR3JvdXBzKClcIlxyXG4gICAgICAgIChjbGljayk9XCJhZGRHcm91cCgpXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiIWNhbkFkZE1vcmVHcm91cHMoKVwiXHJcbiAgICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMyBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ibHVlLTcwMCBiZy1ibHVlLTUwIHJvdW5kZWQtbGcgaG92ZXI6YmctYmx1ZS0xMDAgZGlzYWJsZWQ6b3BhY2l0eS01MCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgdHJhbnNpdGlvbi1jb2xvcnNcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1wbHVzXCI+PC9pPlxyXG4gICAgICAgIHt7ICdBRERfR1JPVVBfTEVWRUwnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBEcmFnIEluZm8gLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiZ3JvdXBzLmxlbmd0aCA+IDFcIiBjbGFzcz1cIm1iLTQgcC0yIGJnLWJsdWUtNTAgYm9yZGVyIGJvcmRlci1ibHVlLTIwMCByb3VuZGVkIHRleHQtc20gdGV4dC1ibHVlLTcwMFwiPlxyXG4gICAgICA8aSBjbGFzcz1cInBpIHBpLWluZm8tY2lyY2xlIG1yLTJcIj48L2k+XHJcbiAgICAgIHt7ICdEUkFHX0lORk8nIHwgdHJhbnNsYXRlIH19XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIEVtcHR5IFN0YXRlIC0tPlxyXG4gICAgPGRpdiAqbmdJZj1cImdyb3Vwcy5sZW5ndGggPT09IDBcIiBjbGFzcz1cInRleHQtY2VudGVyIHB5LTggcHgtNCBib3JkZXItMiBib3JkZXItZGFzaGVkIGJvcmRlci1ncmF5LTMwMCByb3VuZGVkLWxnIGJnLWdyYXktNTBcIj5cclxuICAgICAgPGkgY2xhc3M9XCJwaSBwaS1sYXllci1ncm91cCB0ZXh0LTR4bCB0ZXh0LWdyYXktNDAwIG1iLTNcIj48L2k+XHJcbiAgICAgIDxwIGNsYXNzPVwidGV4dC1ncmF5LTUwMCBtYi00XCI+e3sgJ05PX0dST1VQSU5HX0xFVkVMUycgfCB0cmFuc2xhdGUgfX08L3A+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAoY2xpY2spPVwiYWRkR3JvdXAoKVwiXHJcbiAgICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtNCBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC13aGl0ZSBiZy1ibHVlLTYwMCByb3VuZGVkLWxnIGhvdmVyOmJnLWJsdWUtNzAwIHRyYW5zaXRpb24tY29sb3JzXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxpIGNsYXNzPVwicGkgcGktcGx1c1wiPjwvaT5cclxuICAgICAgICB7eyAnQUREX0ZJUlNUX0dST1VQX0xFVkVMJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gR3JvdXBzIExpc3Qgd2l0aCBEcmFnICYgRHJvcCAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJzcGFjZS15LTNcIj5cclxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgZ3JvdXBzLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgICAgICBjbGFzcz1cImJnLWdyYXktNTAgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHAtNCB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1ncmF5LTEwMFwiXHJcbiAgICAgICAgICAgZHJhZ2dhYmxlPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgKGRyYWdzdGFydCk9XCJvbkRyYWdTdGFydCgkZXZlbnQsIGkpXCJcclxuICAgICAgICAgICAoZHJhZ292ZXIpPVwib25EcmFnT3ZlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAoZHJvcCk9XCJvbkRyb3AoJGV2ZW50LCBpKVwiXHJcbiAgICAgICAgICAgKGRyYWdlbnRlcik9XCJvbkRyYWdFbnRlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAoZHJhZ2xlYXZlKT1cIm9uRHJhZ0xlYXZlKCRldmVudClcIlxyXG4gICAgICAgICAgIChkcmFnZW5kKT1cIm9uRHJhZ0VuZCgkZXZlbnQpXCI+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGdyaWQtY29scy0xMiBnYXAtNCBpdGVtcy1zdGFydFwiPlxyXG4gICAgICAgICAgPCEtLSBEcmFnIEhhbmRsZSAtLT5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJncm91cHMubGVuZ3RoID4gMVwiXHJcbiAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLXNwYW4tMSBmbGV4IGp1c3RpZnktY2VudGVyIGN1cnNvci1tb3ZlIHRleHQtZ3JheS00MDAgaG92ZXI6dGV4dC1ncmF5LTYwMCBwdC0yXCJcclxuICAgICAgICAgICAgICAgZHJhZ2dhYmxlPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgIChkcmFnc3RhcnQpPVwib25EcmFnU3RhcnQoJGV2ZW50LCBpKVwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWJhcnNcIj48L2k+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8IS0tIEdyb3VwIENvbnRlbnQgLS0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNwYW4tMTFcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXNvcnQtYWx0IHRleHQtZ3JheS01MDBcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtbWVkaXVtIHRleHQtZ3JheS03MDBcIj57eyAnR1JPVVBfTEVWRUwnIHwgdHJhbnNsYXRlIH19IHt7IGkgKyAxIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUdyb3VwKGkpXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLTEgdGV4dC1yZWQtNTAwIGhvdmVyOnRleHQtcmVkLTcwMCBob3ZlcjpiZy1yZWQtNTAgcm91bmRlZCB0cmFuc2l0aW9uLWNvbG9yc1wiXHJcbiAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCInUkVNT1ZFJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktdGltZXNcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBncmlkLWNvbHMtMSBtZDpncmlkLWNvbHMtMiBnYXAtNFwiPlxyXG4gICAgICAgICAgICAgIDwhLS0gRmllbGQgU2VsZWN0aW9uIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJibG9jayB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS03MDAgbWItMlwiPnt7ICdGSUVMRCcgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPHAtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImF2YWlsYWJsZUZpZWxkc1wiXHJcbiAgICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICBvcHRpb25WYWx1ZT1cImtleVwiXHJcbiAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJnZXRHcm91cENvbnRyb2woaSwgJ2ZpZWxkJylcIlxyXG4gICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NFTEVDVF9GSUVMRCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICBbc2hvd0NsZWFyXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25GaWVsZENoYW5nZShpLCAkZXZlbnQudmFsdWUpXCJcclxuICAgICAgICAgICAgICAgICAgc3R5bGVDbGFzcz1cInctZnVsbFwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJzZWxlY3RlZEl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImdldEdyb3VwQ29udHJvbChpLCAnZmllbGQnKS52YWx1ZVwiIGNsYXNzPVwidGV4dC1ncmF5LTkwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgZ2V0RmllbGRMYWJlbChnZXRHcm91cENvbnRyb2woaSwgJ2ZpZWxkJykudmFsdWUpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWdldEdyb3VwQ29udHJvbChpLCAnZmllbGQnKS52YWx1ZVwiIGNsYXNzPVwidGV4dC1ncmF5LTUwMFwiPnt7ICdTRUxFQ1RfRklFTEQnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPC9wLXNlbGVjdD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBEaXNwbGF5IE5hbWUgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCBtYi0yXCI+e3sgJ0RJU1BMQVlfTkFNRScgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgcElucHV0VGV4dFxyXG4gICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZ2V0R3JvdXBDb250cm9sKGksICdkaXNwbGF5TmFtZScpXCJcclxuICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidESVNQTEFZX05BTUVfUExBQ0VIT0xERVInIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgdGV4dC1ncmF5LTkwMFwiXHJcbiAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uRm9ybUNoYW5nZSgpXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIFNob3cgVG90YWwgVG9nZ2xlIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgbXQtM1wiPlxyXG4gICAgICAgICAgICAgIDxwLWNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICBbYmluYXJ5XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImdldEdyb3VwQ29udHJvbChpLCAnc2hvd1RvdGFsJylcIlxyXG4gICAgICAgICAgICAgICAgW2lucHV0SWRdPVwiJ3Nob3dUb3RhbCcgKyBpXCJcclxuICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJbJj5kaXZdOmJvcmRlci1ncmF5LTMwMCBbJj5kaXZdOmhvdmVyOmJvcmRlci1ncmF5LTQwMFwiXHJcbiAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25Gb3JtQ2hhbmdlKClcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8L3AtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIFtmb3JdPVwiJ3Nob3dUb3RhbCcgKyBpXCIgY2xhc3M9XCJ0ZXh0LXNtIHRleHQtZ3JheS03MDAgY3Vyc29yLXBvaW50ZXIgaG92ZXI6dGV4dC1ncmF5LTkwMFwiPlxyXG4gICAgICAgICAgICAgICAge3sgJ1NIT1dfVE9UQUwnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBHcm91cGluZyBUaXBzIC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJncm91cHMubGVuZ3RoID4gMFwiIGNsYXNzPVwibXQtNCBwLTQgYmctYmx1ZS01MCBib3JkZXIgYm9yZGVyLWJsdWUtMjAwIHJvdW5kZWQtbGdcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtM1wiPlxyXG4gICAgICA8aSBjbGFzcz1cInBpIHBpLWluZm8tY2lyY2xlIHRleHQtYmx1ZS01MDBcIj48L2k+XHJcbiAgICAgIDxkaXY+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXNtIHRleHQtYmx1ZS04MDBcIj5cclxuICAgICAgICAgIHt7ICdHUk9VUElOR19USVBTJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAge3sgZ3JvdXBzLmxlbmd0aCB9fSB7eyAnTEVWRUxTX0RFRklORUQnIHwgdHJhbnNsYXRlOntjb3VudDogZ3JvdXBzLmxlbmd0aH0gfX1cclxuICAgICAgICA8L3A+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PmAsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgU2VsZWN0TW9kdWxlLFxyXG4gICAgSW5wdXRUZXh0TW9kdWxlLFxyXG4gICAgQnV0dG9uTW9kdWxlLFxyXG4gICAgRGF0ZVBpY2tlck1vZHVsZSxcclxuICAgIENoZWNrYm94TW9kdWxlLFxyXG4gICAgUmFkaW9CdXR0b25Nb2R1bGUsXHJcbiAgICBGb3JtbHlGb3JtLFxyXG4gICAgVG9vbHRpcE1vZHVsZSxcclxuICAgIE1lbnVNb2R1bGUsXHJcbiAgICBUcmFuc2xhdGVNb2R1bGUsXHJcbiAgICBJbnB1dEdyb3VwTW9kdWxlLFxyXG4gICAgSW5wdXRHcm91cEFkZG9uTW9kdWxlLFxyXG4gICAgUG9wb3Zlck1vZHVsZSxcclxuICAgIExpc3Rib3hNb2R1bGVcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHcm91cEJ1aWxkZXJDb21wb25lbnQgZXh0ZW5kcyBGaWVsZFR5cGU8RmllbGRUeXBlQ29uZmlnPiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgcHJpdmF0ZSBfZ3JvdXBzITogRm9ybUFycmF5O1xyXG4gIGRyYWdTdGFydEluZGV4OiBudW1iZXIgPSAtMTtcclxuXHJcbiAgZ2V0IGdyb3VwcygpOiBGb3JtQXJyYXkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2dyb3VwcztcclxuICB9XHJcblxyXG4gIGdldCBhdmFpbGFibGVGaWVsZHMoKTogR3JvdXBCeUZpZWxkW10ge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHNbJ2ZpZWxkcyddIHx8IFtdO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG1heEdyb3VwcygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHNbJ21heEdyb3VwcyddIHx8IDM7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm1BcnJheSgpO1xyXG4gICAgdGhpcy5zZXR1cFZhbHVlQ2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0aWFsaXplRm9ybUFycmF5KCkge1xyXG4gICAgY29uc3QgcGFyZW50Rm9ybSA9IHRoaXMuZm9ybSBhcyBGb3JtR3JvdXA7XHJcbiAgICBjb25zdCBmaWVsZEtleSA9IHRoaXMuZmllbGQua2V5IGFzIHN0cmluZztcclxuXHJcbiAgICBpZiAoIWZpZWxkS2V5KSByZXR1cm47XHJcblxyXG4gICAgLy8gR2V0IG9yIGNyZWF0ZSB0aGUgRm9ybUFycmF5IGluIHRoZSBwYXJlbnQgZm9ybVxyXG4gICAgbGV0IGZvcm1BcnJheSA9IHBhcmVudEZvcm0uZ2V0KGZpZWxkS2V5KSBhcyBGb3JtQXJyYXk7XHJcblxyXG4gICAgaWYgKCFmb3JtQXJyYXkgfHwgIShmb3JtQXJyYXkgaW5zdGFuY2VvZiBGb3JtQXJyYXkpKSB7XHJcbiAgICAgIC8vIENyZWF0ZSBuZXcgRm9ybUFycmF5XHJcbiAgICAgIGZvcm1BcnJheSA9IG5ldyBGb3JtQXJyYXk8YW55PihbXSk7XHJcbiAgICAgIHBhcmVudEZvcm0uc2V0Q29udHJvbChmaWVsZEtleSwgZm9ybUFycmF5KTtcclxuXHJcbiAgICAgIC8vIEluaXRpYWxpemUgd2l0aCBleGlzdGluZyBtb2RlbCBkYXRhXHJcbiAgICAgIGNvbnN0IGluaXRpYWxWYWx1ZSA9IHRoaXMubW9kZWxbZmllbGRLZXldO1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShpbml0aWFsVmFsdWUpKSB7XHJcbiAgICAgICAgaW5pdGlhbFZhbHVlLmZvckVhY2goZ3JvdXAgPT4ge1xyXG4gICAgICAgICAgZm9ybUFycmF5LnB1c2godGhpcy5jcmVhdGVHcm91cENvbnRyb2woZ3JvdXApKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFN0b3JlIHRoZSBGb3JtQXJyYXkgcmVmZXJlbmNlXHJcbiAgICB0aGlzLl9ncm91cHMgPSBmb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldHVwVmFsdWVDaGFuZ2VzKCkge1xyXG4gICAgLy8gTGlzdGVuIHRvIGZvcm0gYXJyYXkgY2hhbmdlcyBhbmQgdXBkYXRlIHRoZSBtb2RlbFxyXG4gICAgdGhpcy5ncm91cHMudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMudXBkYXRlTW9kZWwoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVNb2RlbCgpIHtcclxuICAgIGNvbnN0IGZpZWxkS2V5ID0gdGhpcy5maWVsZC5rZXkgYXMgc3RyaW5nO1xyXG4gICAgaWYgKGZpZWxkS2V5KSB7XHJcbiAgICAgIC8vIFVwZGF0ZSB0aGUgbW9kZWwgd2l0aCBjdXJyZW50IGZvcm0gdmFsdWVzXHJcbiAgICAgIHRoaXMubW9kZWxbZmllbGRLZXldID0gdGhpcy5ncm91cHMudmFsdWU7XHJcblxyXG4gICAgICAvLyBUcmlnZ2VyIGZvcm0gY29udHJvbCB1cGRhdGUgdG8gbm90aWZ5IEZvcm1seVxyXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMuZ3JvdXBzLnZhbHVlKTtcclxuXHJcbiAgICAgIC8vIE1hcmsgZm9ybSBjb250cm9sIGFzIHRvdWNoZWQvZGlydHkgaWYgbmVlZGVkXHJcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc0RpcnR5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBDYWxsZWQgd2hlbiBmb3JtIGNvbnRyb2xzIGNoYW5nZVxyXG4gIG9uRm9ybUNoYW5nZSgpIHtcclxuICAgIHRoaXMudXBkYXRlTW9kZWwoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlR3JvdXBDb250cm9sKGdyb3VwPzogYW55KTogRm9ybUdyb3VwIHtcclxuICAgIHJldHVybiBuZXcgRm9ybUdyb3VwKHtcclxuICAgICAgZmllbGQ6IG5ldyBGb3JtQ29udHJvbChncm91cD8uZmllbGQgfHwgJycpLFxyXG4gICAgICBkaXNwbGF5TmFtZTogbmV3IEZvcm1Db250cm9sKGdyb3VwPy5kaXNwbGF5TmFtZSB8fCAnJyksXHJcbiAgICAgIHNob3dUb3RhbDogbmV3IEZvcm1Db250cm9sKGdyb3VwPy5zaG93VG90YWwgIT09IGZhbHNlKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhZGRHcm91cCgpIHtcclxuICAgIGlmICh0aGlzLmNhbkFkZE1vcmVHcm91cHMoKSkge1xyXG4gICAgICB0aGlzLmdyb3Vwcy5wdXNoKHRoaXMuY3JlYXRlR3JvdXBDb250cm9sKCkpO1xyXG4gICAgICB0aGlzLnVwZGF0ZU1vZGVsKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVHcm91cChpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmdyb3Vwcy5yZW1vdmVBdChpbmRleCk7XHJcbiAgICB0aGlzLnVwZGF0ZU1vZGVsKCk7XHJcbiAgfVxyXG5cclxuICAvLyBEcmFnICYgRHJvcCBNZXRob2RzXHJcbiAgb25EcmFnU3RhcnQoZXZlbnQ6IERyYWdFdmVudCwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5kcmFnU3RhcnRJbmRleCA9IGluZGV4O1xyXG4gICAgZXZlbnQuZGF0YVRyYW5zZmVyPy5zZXREYXRhKCd0ZXh0L3BsYWluJywgaW5kZXgudG9TdHJpbmcoKSk7XHJcbiAgICAoZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xhc3NMaXN0LmFkZCgnb3BhY2l0eS01MCcsICdib3JkZXItYmx1ZS0zMDAnKTtcclxuICB9XHJcblxyXG4gIG9uRHJhZ092ZXIoZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcblxyXG4gIG9uRHJvcChldmVudDogRHJhZ0V2ZW50LCBkcm9wSW5kZXg6IG51bWJlcikge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGNvbnN0IGRyYWdJbmRleCA9IHRoaXMuZHJhZ1N0YXJ0SW5kZXg7XHJcblxyXG4gICAgaWYgKGRyYWdJbmRleCAhPT0gLTEgJiYgZHJhZ0luZGV4ICE9PSBkcm9wSW5kZXgpIHtcclxuICAgICAgdGhpcy5tb3ZlR3JvdXAoZHJhZ0luZGV4LCBkcm9wSW5kZXgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVtb3ZlRHJhZ1N0eWxlcyhldmVudCk7XHJcbiAgfVxyXG5cclxuICBvbkRyYWdFbnRlcihldmVudDogRHJhZ0V2ZW50KSB7XHJcbiAgICAoZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xhc3NMaXN0LmFkZCgnYm9yZGVyLWJsdWUtNTAwJywgJ2JnLWJsdWUtNTAnLCAnYm9yZGVyLTInKTtcclxuICB9XHJcblxyXG4gIG9uRHJhZ0xlYXZlKGV2ZW50OiBEcmFnRXZlbnQpIHtcclxuICAgIHRoaXMucmVtb3ZlRHJhZ1N0eWxlcyhldmVudCk7XHJcbiAgfVxyXG5cclxuICBvbkRyYWdFbmQoZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgdGhpcy5yZW1vdmVEcmFnU3R5bGVzKGV2ZW50KTtcclxuICAgIHRoaXMuZHJhZ1N0YXJ0SW5kZXggPSAtMTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlRHJhZ1N0eWxlcyhldmVudDogRHJhZ0V2ZW50KSB7XHJcbiAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnYm9yZGVyLWJsdWUtNTAwJywgJ2JnLWJsdWUtNTAnLCAnb3BhY2l0eS01MCcsICdib3JkZXItYmx1ZS0zMDAnLCAnYm9yZGVyLTInKTtcclxuICB9XHJcblxyXG4gIG1vdmVHcm91cChmcm9tSW5kZXg6IG51bWJlciwgdG9JbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBtb3ZlZEdyb3VwID0gdGhpcy5ncm91cHMuYXQoZnJvbUluZGV4KTtcclxuICAgIHRoaXMuZ3JvdXBzLnJlbW92ZUF0KGZyb21JbmRleCk7XHJcbiAgICB0aGlzLmdyb3Vwcy5pbnNlcnQodG9JbmRleCwgbW92ZWRHcm91cCk7XHJcbiAgICB0aGlzLnVwZGF0ZU1vZGVsKCk7XHJcbiAgfVxyXG5cclxuICBnZXRHcm91cENvbnRyb2woaW5kZXg6IG51bWJlciwgY29udHJvbE5hbWU6IHN0cmluZyk6IEZvcm1Db250cm9sIHtcclxuICAgIGNvbnN0IGdyb3VwID0gdGhpcy5ncm91cHMuYXQoaW5kZXgpIGFzIEZvcm1Hcm91cDtcclxuICAgIHJldHVybiBncm91cC5nZXQoY29udHJvbE5hbWUpIGFzIEZvcm1Db250cm9sO1xyXG4gIH1cclxuXHJcbiAgb25GaWVsZENoYW5nZShpbmRleDogbnVtYmVyLCBmaWVsZEtleTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBkaXNwbGF5TmFtZUNvbnRyb2wgPSB0aGlzLmdldEdyb3VwQ29udHJvbChpbmRleCwgJ2Rpc3BsYXlOYW1lJyk7XHJcbiAgICBpZiAoIWRpc3BsYXlOYW1lQ29udHJvbC52YWx1ZSAmJiBmaWVsZEtleSkge1xyXG4gICAgICBjb25zdCBmaWVsZCA9IHRoaXMuYXZhaWxhYmxlRmllbGRzLmZpbmQoZiA9PiBmLmtleSA9PT0gZmllbGRLZXkpO1xyXG4gICAgICBpZiAoZmllbGQpIHtcclxuICAgICAgICBkaXNwbGF5TmFtZUNvbnRyb2wuc2V0VmFsdWUoZmllbGQubGFiZWwpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZU1vZGVsKCk7XHJcbiAgfVxyXG5cclxuICBnZXRGaWVsZExhYmVsKGZpZWxkS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZmllbGQgPSB0aGlzLmF2YWlsYWJsZUZpZWxkcy5maW5kKGYgPT4gZi5rZXkgPT09IGZpZWxkS2V5KTtcclxuICAgIHJldHVybiBmaWVsZCA/IGZpZWxkLmxhYmVsIDogZmllbGRLZXk7XHJcbiAgfVxyXG5cclxuICBjYW5BZGRNb3JlR3JvdXBzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ3JvdXBzLmxlbmd0aCA8IHRoaXMubWF4R3JvdXBzO1xyXG4gIH1cclxufVxyXG4iXX0=","// group-type.component.ts\nimport { Component } from '@angular/core';\nimport { FieldType, FormlyField } from '@ngx-formly/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { BadgeModule } from 'primeng/badge';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"primeng/button\";\nimport * as i3 from \"primeng/tooltip\";\nexport class GroupTypeComponent extends FieldType {\n collapsed = this.props.collapsedByDefault ?? false;\n get showValidation() {\n return this.props.showValidation !== false &&\n this.formControl.invalid && (this.formControl.dirty || this.formControl.touched);\n }\n get validationIcon() {\n if (this.formControl.valid)\n return 'pi pi-check-circle text-green-500';\n if (this.formControl.invalid)\n return 'pi pi-exclamation-circle text-red-500';\n return 'pi pi-circle text-500';\n }\n get validationText() {\n return this.formControl.valid ? 'جميع الحقول صالحة' : 'هناك أخطاء في بعض الحقول';\n }\n get groupClass() {\n const v = this.props.variant || 'default';\n const map = {\n default: 'border-round border-1 border-200 bg-white mb-3',\n card: 'border-round surface-card shadow-sm mb-3',\n bordered: 'border-round border-1 border-300 surface-section mb-3',\n transparent: 'border-0 bg-transparent mb-3'\n };\n return map[v];\n }\n get gridClass() {\n const cols = this.props.columns || 1;\n const gap = this.props.gap || 'normal';\n const gaps = { none: 'gap-0', small: 'gap-2', normal: 'gap-3', large: 'gap-4' };\n return `grid grid-cols-1 ${cols > 1 ? 'md:grid-cols-' + cols : ''} ${gaps[gap]}`;\n }\n toggle() {\n this.collapsed = !this.collapsed;\n }\n isRequired() {\n return this.field.fieldGroup?.some(f => f.props?.required || f.validators?.['required']) ?? false;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GroupTypeComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.1.8\", type: GroupTypeComponent, isStandalone: true, selector: \"formly-group-type\", usesInheritance: true, ngImport: i0, template: `\r\n <div [class]=\"groupClass\">\r\n <div *ngIf=\"props.label || props.collapsible\" class=\"flex justify-between items-center p-2\"\r\n (click)=\"props.collapsible && toggle()\">\r\n <div class=\"flex items-center gap-2\">\r\n <i *ngIf=\"props.collapsible\" [class]=\"collapsed ? 'pi pi-chevron-down' : 'pi pi-chevron-up'\"></i>\r\n <label *ngIf=\"props.label\" class=\"font-semibold\">{{ props.label }}</label>\r\n <i *ngIf=\"isRequired()\" class=\"pi pi-asterisk text-red-500 text-xs\" pTooltip=\"حقل مطلوب\"></i>\r\n </div>\r\n <div class=\"flex gap-2\">\r\n <i *ngIf=\"props.description && !collapsed\" class=\"pi pi-info-circle text-500\"\r\n pTooltip=\"{{ props.description }}\"></i>\r\n <i *ngIf=\"showValidation\" [class]=\"validationIcon\" [pTooltip]=\"validationText\"></i>\r\n <button *ngFor=\"let a of props.actions || []\" pButton type=\"button\" class=\"p-button-text p-button-sm\"\r\n [icon]=\"a.icon\" [pTooltip]=\"a.tooltip\" [ngClass]=\"a.styleClass\"\r\n (click)=\"a.handler?.(field, form, this); $event.stopPropagation()\"></button>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!collapsed\" class=\"p-3 pt-0\" [ngClass]=\"props.compact ? 'compact-layout' : ''\">\r\n <p *ngIf=\"props.description && props.showDescription\" class=\"text-500 text-sm mb-2\">{{ props.description }}</p>\r\n\r\n <div [ngClass]=\"gridClass\">\r\n <ng-container *ngFor=\"let f of field.fieldGroup\">\r\n <formly-field [field]=\"f\"></formly-field>\r\n <small *ngIf=\"f.props?.description\"\r\n class=\"block text-500 text-xs mt-1 ml-1\">\r\n {{ f.props?.description }}\r\n </small>\r\n </ng-container>\r\n</div>\r\n\r\n\r\n <div *ngIf=\"!field.fieldGroup?.length\" class=\"text-center p-4 surface-section border-round\">\r\n <i class=\"pi pi-inbox text-4xl text-500 mb-2\"></i>\r\n <p class=\"text-500\">لا توجد حقول</p>\r\n </div>\r\n </div>\r\n </div>\r\n `, isInline: true, dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i1.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { kind: \"directive\", type: i1.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { kind: \"component\", type: FormlyField, selector: \"formly-field\", inputs: [\"field\"] }, { kind: \"ngmodule\", type: ButtonModule }, { kind: \"directive\", type: i2.ButtonDirective, selector: \"[pButton]\", inputs: [\"iconPos\", \"loadingIcon\", \"loading\", \"severity\", \"raised\", \"rounded\", \"text\", \"outlined\", \"size\", \"plain\", \"fluid\", \"label\", \"icon\", \"buttonProps\"] }, { kind: \"ngmodule\", type: TooltipModule }, { kind: \"directive\", type: i3.Tooltip, selector: \"[pTooltip]\", inputs: [\"tooltipPosition\", \"tooltipEvent\", \"positionStyle\", \"tooltipStyleClass\", \"tooltipZIndex\", \"escape\", \"showDelay\", \"hideDelay\", \"life\", \"positionTop\", \"positionLeft\", \"autoHide\", \"fitContent\", \"hideOnEscape\", \"pTooltip\", \"tooltipDisabled\", \"tooltipOptions\", \"appendTo\"] }, { kind: \"ngmodule\", type: BadgeModule }] });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: GroupTypeComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'formly-group-type',\n standalone: true,\n imports: [CommonModule, FormlyField, ButtonModule, TooltipModule, BadgeModule],\n template: `\r\n <div [class]=\"groupClass\">\r\n <div *ngIf=\"props.label || props.collapsible\" class=\"flex justify-between items-center p-2\"\r\n (click)=\"props.collapsible && toggle()\">\r\n <div class=\"flex items-center gap-2\">\r\n <i *ngIf=\"props.collapsible\" [class]=\"collapsed ? 'pi pi-chevron-down' : 'pi pi-chevron-up'\"></i>\r\n <label *ngIf=\"props.label\" class=\"font-semibold\">{{ props.label }}</label>\r\n <i *ngIf=\"isRequired()\" class=\"pi pi-asterisk text-red-500 text-xs\" pTooltip=\"حقل مطلوب\"></i>\r\n </div>\r\n <div class=\"flex gap-2\">\r\n <i *ngIf=\"props.description && !collapsed\" class=\"pi pi-info-circle text-500\"\r\n pTooltip=\"{{ props.description }}\"></i>\r\n <i *ngIf=\"showValidation\" [class]=\"validationIcon\" [pTooltip]=\"validationText\"></i>\r\n <button *ngFor=\"let a of props.actions || []\" pButton type=\"button\" class=\"p-button-text p-button-sm\"\r\n [icon]=\"a.icon\" [pTooltip]=\"a.tooltip\" [ngClass]=\"a.styleClass\"\r\n (click)=\"a.handler?.(field, form, this); $event.stopPropagation()\"></button>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!collapsed\" class=\"p-3 pt-0\" [ngClass]=\"props.compact ? 'compact-layout' : ''\">\r\n <p *ngIf=\"props.description && props.showDescription\" class=\"text-500 text-sm mb-2\">{{ props.description }}</p>\r\n\r\n <div [ngClass]=\"gridClass\">\r\n <ng-container *ngFor=\"let f of field.fieldGroup\">\r\n <formly-field [field]=\"f\"></formly-field>\r\n <small *ngIf=\"f.props?.description\"\r\n class=\"block text-500 text-xs mt-1 ml-1\">\r\n {{ f.props?.description }}\r\n </small>\r\n </ng-container>\r\n</div>\r\n\r\n\r\n <div *ngIf=\"!field.fieldGroup?.length\" class=\"text-center p-4 surface-section border-round\">\r\n <i class=\"pi pi-inbox text-4xl text-500 mb-2\"></i>\r\n <p class=\"text-500\">لا توجد حقول</p>\r\n </div>\r\n </div>\r\n </div>\r\n `\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy51aS5jb3JlL2dlbmVyaWMtc2VhcmNoLWFkdmFuY2VkL3NyYy9saWIvZ3JvdXAuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBCQUEwQjtBQUMxQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQXFCLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7O0FBb0U1QyxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsU0FBNEM7SUFDbEYsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLElBQUksS0FBSyxDQUFDO0lBR25ELElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxLQUFLLEtBQUs7WUFDeEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUs7WUFBRSxPQUFPLG1DQUFtQyxDQUFDO1FBQ3ZFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPO1lBQUUsT0FBTyx1Q0FBdUMsQ0FBQztRQUM3RSxPQUFPLHVCQUF1QixDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDO0lBQ25GLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxTQUFTLENBQUM7UUFDMUMsTUFBTSxHQUFHLEdBQVE7WUFDZixPQUFPLEVBQUUsZ0RBQWdEO1lBQ3pELElBQUksRUFBRSwwQ0FBMEM7WUFDaEQsUUFBUSxFQUFFLHVEQUF1RDtZQUNqRSxXQUFXLEVBQUUsOEJBQThCO1NBQzVDLENBQUM7UUFDRixPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQztRQUN2QyxNQUFNLElBQUksR0FBUSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUNyRixPQUFPLG9CQUFvQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDbkYsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxRQUFRLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO0lBQ3BHLENBQUM7dUdBM0NVLGtCQUFrQjsyRkFBbEIsa0JBQWtCLG9HQXpDbkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVDVCwyREF4Q1MsWUFBWSw4VkFBRSxXQUFXLDJFQUFFLFlBQVksb1FBQUUsYUFBYSxxWEFBRSxXQUFXOzsyRkEwQ2xFLGtCQUFrQjtrQkE3QzlCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxXQUFXLENBQUM7b0JBQzlFLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUNUO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZ3JvdXAtdHlwZS5jb21wb25lbnQudHNcclxuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZpZWxkVHlwZSwgRm9ybWx5RmllbGRDb25maWcsIEZvcm1seUZpZWxkIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcclxuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9vbHRpcCc7XHJcbmltcG9ydCB7IEJhZGdlTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9iYWRnZSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwVHlwZVByb3BzIHtcclxuICBsYWJlbD86IHN0cmluZztcclxuICBkZXNjcmlwdGlvbj86IHN0cmluZztcclxuICBjb2xsYXBzaWJsZT86IGJvb2xlYW47XHJcbiAgY29sbGFwc2VkQnlEZWZhdWx0PzogYm9vbGVhbjtcclxuICBzaG93RmllbGRDb3VudD86IGJvb2xlYW47XHJcbiAgc2hvd0Rlc2NyaXB0aW9uPzogYm9vbGVhbjtcclxuICBzaG93U3VtbWFyeT86IGJvb2xlYW47XHJcbiAgc2hvd1ZhbGlkYXRpb24/OiBib29sZWFuO1xyXG4gIGNvbXBhY3Q/OiBib29sZWFuO1xyXG4gIHZhcmlhbnQ/OiAnZGVmYXVsdCcgfCAnY2FyZCcgfCAnYm9yZGVyZWQnIHwgJ3RyYW5zcGFyZW50JztcclxuICBjb2x1bW5zPzogbnVtYmVyO1xyXG4gIGdhcD86ICdub25lJyB8ICdzbWFsbCcgfCAnbm9ybWFsJyB8ICdsYXJnZSc7XHJcbiAgYWN0aW9ucz86IHtcclxuICAgIGljb246IHN0cmluZztcclxuICAgIHRvb2x0aXA6IHN0cmluZztcclxuICAgIHN0eWxlQ2xhc3M/OiBzdHJpbmc7XHJcbiAgICBoYW5kbGVyPzogKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZywgZm9ybTogYW55LCBjb21wb25lbnQ6IGFueSkgPT4gdm9pZDtcclxuICB9W107XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZm9ybWx5LWdyb3VwLXR5cGUnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybWx5RmllbGQsIEJ1dHRvbk1vZHVsZSwgVG9vbHRpcE1vZHVsZSwgQmFkZ2VNb2R1bGVdLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8ZGl2IFtjbGFzc109XCJncm91cENsYXNzXCI+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJwcm9wcy5sYWJlbCB8fCBwcm9wcy5jb2xsYXBzaWJsZVwiIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIHAtMlwiXHJcbiAgICAgICAgICAgKGNsaWNrKT1cInByb3BzLmNvbGxhcHNpYmxlICYmIHRvZ2dsZSgpXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XHJcbiAgICAgICAgICA8aSAqbmdJZj1cInByb3BzLmNvbGxhcHNpYmxlXCIgW2NsYXNzXT1cImNvbGxhcHNlZCA/ICdwaSBwaS1jaGV2cm9uLWRvd24nIDogJ3BpIHBpLWNoZXZyb24tdXAnXCI+PC9pPlxyXG4gICAgICAgICAgPGxhYmVsICpuZ0lmPVwicHJvcHMubGFiZWxcIiBjbGFzcz1cImZvbnQtc2VtaWJvbGRcIj57eyBwcm9wcy5sYWJlbCB9fTwvbGFiZWw+XHJcbiAgICAgICAgICA8aSAqbmdJZj1cImlzUmVxdWlyZWQoKVwiIGNsYXNzPVwicGkgcGktYXN0ZXJpc2sgdGV4dC1yZWQtNTAwIHRleHQteHNcIiBwVG9vbHRpcD1cItit2YLZhCDZhdi32YTZiNioXCI+PC9pPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0yXCI+XHJcbiAgICAgICAgICA8aSAqbmdJZj1cInByb3BzLmRlc2NyaXB0aW9uICYmICFjb2xsYXBzZWRcIiBjbGFzcz1cInBpIHBpLWluZm8tY2lyY2xlIHRleHQtNTAwXCJcclxuICAgICAgICAgICAgIHBUb29sdGlwPVwie3sgcHJvcHMuZGVzY3JpcHRpb24gfX1cIj48L2k+XHJcbiAgICAgICAgICA8aSAqbmdJZj1cInNob3dWYWxpZGF0aW9uXCIgW2NsYXNzXT1cInZhbGlkYXRpb25JY29uXCIgW3BUb29sdGlwXT1cInZhbGlkYXRpb25UZXh0XCI+PC9pPlxyXG4gICAgICAgICAgPGJ1dHRvbiAqbmdGb3I9XCJsZXQgYSBvZiBwcm9wcy5hY3Rpb25zIHx8IFtdXCIgcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXNtXCJcclxuICAgICAgICAgICAgICAgICAgW2ljb25dPVwiYS5pY29uXCIgW3BUb29sdGlwXT1cImEudG9vbHRpcFwiIFtuZ0NsYXNzXT1cImEuc3R5bGVDbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhLmhhbmRsZXI/LihmaWVsZCwgZm9ybSwgdGhpcyk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPjwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgKm5nSWY9XCIhY29sbGFwc2VkXCIgY2xhc3M9XCJwLTMgcHQtMFwiIFtuZ0NsYXNzXT1cInByb3BzLmNvbXBhY3QgPyAnY29tcGFjdC1sYXlvdXQnIDogJydcIj5cclxuICAgICAgICA8cCAqbmdJZj1cInByb3BzLmRlc2NyaXB0aW9uICYmIHByb3BzLnNob3dEZXNjcmlwdGlvblwiIGNsYXNzPVwidGV4dC01MDAgdGV4dC1zbSBtYi0yXCI+e3sgcHJvcHMuZGVzY3JpcHRpb24gfX08L3A+XHJcblxyXG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwiZ3JpZENsYXNzXCI+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZiBvZiBmaWVsZC5maWVsZEdyb3VwXCI+XHJcbiAgICA8Zm9ybWx5LWZpZWxkIFtmaWVsZF09XCJmXCI+PC9mb3JtbHktZmllbGQ+XHJcbiAgICA8c21hbGwgKm5nSWY9XCJmLnByb3BzPy5kZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgY2xhc3M9XCJibG9jayB0ZXh0LTUwMCB0ZXh0LXhzIG10LTEgbWwtMVwiPlxyXG4gICAgICB7eyBmLnByb3BzPy5kZXNjcmlwdGlvbiAgfX1cclxuICAgIDwvc21hbGw+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiFmaWVsZC5maWVsZEdyb3VwPy5sZW5ndGhcIiBjbGFzcz1cInRleHQtY2VudGVyIHAtNCBzdXJmYWNlLXNlY3Rpb24gYm9yZGVyLXJvdW5kXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWluYm94IHRleHQtNHhsIHRleHQtNTAwIG1iLTJcIj48L2k+XHJcbiAgICAgICAgICA8cCBjbGFzcz1cInRleHQtNTAwXCI+2YTYpyDYqtmI2KzYryDYrdmC2YjZhDwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICBgXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHcm91cFR5cGVDb21wb25lbnQgZXh0ZW5kcyBGaWVsZFR5cGU8Rm9ybWx5RmllbGRDb25maWc8R3JvdXBUeXBlUHJvcHM+PiB7XHJcbiAgY29sbGFwc2VkID0gdGhpcy5wcm9wcy5jb2xsYXBzZWRCeURlZmF1bHQgPz8gZmFsc2U7XHJcblxyXG5cclxuICBnZXQgc2hvd1ZhbGlkYXRpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5zaG93VmFsaWRhdGlvbiAhPT0gZmFsc2UgJiZcclxuICAgICAgdGhpcy5mb3JtQ29udHJvbC5pbnZhbGlkICYmICh0aGlzLmZvcm1Db250cm9sLmRpcnR5IHx8IHRoaXMuZm9ybUNvbnRyb2wudG91Y2hlZCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdmFsaWRhdGlvbkljb24oKSB7XHJcbiAgICBpZiAodGhpcy5mb3JtQ29udHJvbC52YWxpZCkgcmV0dXJuICdwaSBwaS1jaGVjay1jaXJjbGUgdGV4dC1ncmVlbi01MDAnO1xyXG4gICAgaWYgKHRoaXMuZm9ybUNvbnRyb2wuaW52YWxpZCkgcmV0dXJuICdwaSBwaS1leGNsYW1hdGlvbi1jaXJjbGUgdGV4dC1yZWQtNTAwJztcclxuICAgIHJldHVybiAncGkgcGktY2lyY2xlIHRleHQtNTAwJztcclxuICB9XHJcblxyXG4gIGdldCB2YWxpZGF0aW9uVGV4dCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1Db250cm9sLnZhbGlkID8gJ9is2YXZiti5INin2YTYrdmC2YjZhCDYtdin2YTYrdipJyA6ICfZh9mG2KfZgyDYo9iu2LfYp9ihINmB2Yog2KjYudi2INin2YTYrdmC2YjZhCc7XHJcbiAgfVxyXG5cclxuICBnZXQgZ3JvdXBDbGFzcygpIHtcclxuICAgIGNvbnN0IHYgPSB0aGlzLnByb3BzLnZhcmlhbnQgfHwgJ2RlZmF1bHQnO1xyXG4gICAgY29uc3QgbWFwOiBhbnkgPSB7XHJcbiAgICAgIGRlZmF1bHQ6ICdib3JkZXItcm91bmQgYm9yZGVyLTEgYm9yZGVyLTIwMCBiZy13aGl0ZSBtYi0zJyxcclxuICAgICAgY2FyZDogJ2JvcmRlci1yb3VuZCBzdXJmYWNlLWNhcmQgc2hhZG93LXNtIG1iLTMnLFxyXG4gICAgICBib3JkZXJlZDogJ2JvcmRlci1yb3VuZCBib3JkZXItMSBib3JkZXItMzAwIHN1cmZhY2Utc2VjdGlvbiBtYi0zJyxcclxuICAgICAgdHJhbnNwYXJlbnQ6ICdib3JkZXItMCBiZy10cmFuc3BhcmVudCBtYi0zJ1xyXG4gICAgfTtcclxuICAgIHJldHVybiBtYXBbdl07XHJcbiAgfVxyXG5cclxuICBnZXQgZ3JpZENsYXNzKCkge1xyXG4gICAgY29uc3QgY29scyA9IHRoaXMucHJvcHMuY29sdW1ucyB8fCAxO1xyXG4gICAgY29uc3QgZ2FwID0gdGhpcy5wcm9wcy5nYXAgfHwgJ25vcm1hbCc7XHJcbiAgICBjb25zdCBnYXBzOiBhbnkgPSB7IG5vbmU6ICdnYXAtMCcsIHNtYWxsOiAnZ2FwLTInLCBub3JtYWw6ICdnYXAtMycsIGxhcmdlOiAnZ2FwLTQnIH07XHJcbiAgICByZXR1cm4gYGdyaWQgZ3JpZC1jb2xzLTEgJHtjb2xzID4gMSA/ICdtZDpncmlkLWNvbHMtJyArIGNvbHMgOiAnJ30gJHtnYXBzW2dhcF19YDtcclxuICB9XHJcblxyXG4gIHRvZ2dsZSgpIHtcclxuICAgIHRoaXMuY29sbGFwc2VkID0gIXRoaXMuY29sbGFwc2VkO1xyXG4gIH1cclxuXHJcbiAgaXNSZXF1aXJlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZpZWxkLmZpZWxkR3JvdXA/LnNvbWUoZiA9PiBmLnByb3BzPy5yZXF1aXJlZCB8fCBmLnZhbGlkYXRvcnM/LlsncmVxdWlyZWQnXSkgPz8gZmFsc2U7XHJcbiAgfVxyXG59XHJcbiJdfQ==","import { provideFormlyConfig } from '@ngx-formly/core';\nimport { QueryBuilderComponent } from './query-builder.component';\nimport { SortBuilderComponent } from './sort-builder.component';\nimport { GroupTypeComponent } from './group.component';\nimport { TabTypeComponent } from './tab-type.component';\nimport { GroupBuilderComponent } from './group-builder.component';\nimport { ColumnsBuilderComponent } from './columns-builder.component';\nexport const formlyConfig = provideFormlyConfig({\n types: [\n {\n name: 'tab-type',\n component: TabTypeComponent\n },\n {\n name: 'query-builder',\n component: QueryBuilderComponent\n },\n {\n name: 'sort-builder',\n component: SortBuilderComponent\n },\n {\n name: 'group-builder',\n component: GroupBuilderComponent\n },\n {\n name: 'columns-builder',\n component: ColumnsBuilderComponent\n },\n { name: 'group', component: GroupTypeComponent },\n ],\n});\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcudWkuY29yZS9nZW5lcmljLXNlYXJjaC1hZHZhbmNlZC9zcmMvbGliL2Zvcm1seS1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFHLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFdEUsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLG1CQUFtQixDQUFDO0lBQzlDLEtBQUssRUFBRTtRQUVMO1lBQ00sSUFBSSxFQUFFLFVBQVU7WUFDaEIsU0FBUyxFQUFFLGdCQUFnQjtTQUM1QjtRQUNGO1lBQ0csSUFBSSxFQUFFLGVBQWU7WUFDckIsU0FBUyxFQUFFLHFCQUFxQjtTQUNqQztRQUNEO1lBQ0UsSUFBSSxFQUFFLGNBQWM7WUFDcEIsU0FBUyxFQUFFLG9CQUFvQjtTQUNoQztRQUNEO1lBQ0UsSUFBSSxFQUFFLGVBQWU7WUFDckIsU0FBUyxFQUFFLHFCQUFxQjtTQUNqQztRQUNEO1lBQ0UsSUFBSSxFQUFFLGlCQUFpQjtZQUN2QixTQUFTLEVBQUUsdUJBQXVCO1NBQ25DO1FBQ0QsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRTtLQUdyRDtDQUVGLENBRUEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ICBwcm92aWRlRm9ybWx5Q29uZmlnIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XHJcbmltcG9ydCB7IFF1ZXJ5QnVpbGRlckNvbXBvbmVudCB9IGZyb20gJy4vcXVlcnktYnVpbGRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTb3J0QnVpbGRlckNvbXBvbmVudCB9IGZyb20gJy4vc29ydC1idWlsZGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEdyb3VwVHlwZUNvbXBvbmVudCB9IGZyb20gJy4vZ3JvdXAuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGFiVHlwZUNvbXBvbmVudCB9IGZyb20gJy4vdGFiLXR5cGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgR3JvdXBCdWlsZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9ncm91cC1idWlsZGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvbHVtbnNCdWlsZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9jb2x1bW5zLWJ1aWxkZXIuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCBjb25zdCBmb3JtbHlDb25maWcgPSBwcm92aWRlRm9ybWx5Q29uZmlnKHtcclxuICB0eXBlczogW1xyXG5cclxuICAgIHtcclxuICAgICAgICAgIG5hbWU6ICd0YWItdHlwZScsXHJcbiAgICAgICAgICBjb21wb25lbnQ6IFRhYlR5cGVDb21wb25lbnRcclxuICAgICAgICB9LFxyXG4gICAgICAge1xyXG4gICAgICAgICAgbmFtZTogJ3F1ZXJ5LWJ1aWxkZXInLFxyXG4gICAgICAgICAgY29tcG9uZW50OiBRdWVyeUJ1aWxkZXJDb21wb25lbnRcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6ICdzb3J0LWJ1aWxkZXInLFxyXG4gICAgICAgICAgY29tcG9uZW50OiBTb3J0QnVpbGRlckNvbXBvbmVudFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogJ2dyb3VwLWJ1aWxkZXInLFxyXG4gICAgICAgICAgY29tcG9uZW50OiBHcm91cEJ1aWxkZXJDb21wb25lbnRcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6ICdjb2x1bW5zLWJ1aWxkZXInLFxyXG4gICAgICAgICAgY29tcG9uZW50OiBDb2x1bW5zQnVpbGRlckNvbXBvbmVudFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgeyBuYW1lOiAnZ3JvdXAnLCBjb21wb25lbnQ6IEdyb3VwVHlwZUNvbXBvbmVudCB9LFxyXG5cclxuXHJcbiAgXSxcclxuXHJcbn0sXHJcblxyXG4pO1xyXG5cclxuXHJcblxyXG5cclxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxpdGUuZnJhbWV3b3JrLW5nLnVpLmNvcmUtZ2VuZXJpYy1zZWFyY2gtYWR2YW5jZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25nLnVpLmNvcmUvZ2VuZXJpYy1zZWFyY2gtYWR2YW5jZWQvc3JjL2VsaXRlLmZyYW1ld29yay1uZy51aS5jb3JlLWdlbmVyaWMtc2VhcmNoLWFkdmFuY2VkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":["i3","i4","i10","i2","i5","i6","i7","i8"],"mappings":"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C,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE;AACvE;AACA,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;AAChL,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,oBAAoB,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,qBAAqB,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC;AACtN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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AO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,UAAU,EAAE,CAAC;AACjI,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,QAAQ,EAAE,wBAAwB;AACtD,oBAAoB,QAAQ,EAAE,CAAC;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,CAAC;AACH,oBAAoB,OAAO,EAAE;AAC7B,wBAAwB,YAAY;AACpC,wBAAwB,WAAW;AACnC,wBAAwB,mBAAmB;AAC3C,wBAAwB,YAAY;AACpC,wBAAwB,eAAe;AACvC,wBAAwB,YAAY;AACpC,wBAAwB,gBAAgB;AACxC,wBAAwB,cAAc;AACtC,wBAAwB,iBAAiB;AACzC,wBAAwB,UAAU;AAClC,wBAAwB,aAAa;AACrC,wBAAwB,UAAU;AAClC,wBAAwB,eA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EAAE,sBAAsB,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC;AACxN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,cAAc,EAAE,eAAe,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,EAAE,EAAE,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"}