{"version":3,"file":"js44d.mjs","sources":["../../src/js44D/base64.ts","../../src/js44D/utf8.ts","../../src/js44D/JSFourDInterface.ts","../../src/js44D/JSFourDCollection.ts","../../src/js44D/JSFourDModel.ts","../../src/fourD.module.ts","../../src/containers/queryBand.ts","../../src/angular2-modal/models/ModalDialogInstance.ts","../../src/containers/advancedQuery.ts","../../src/containers/advancedQuery.html","../../src/dataGrid/dataGrid.ts","../../src/angular2-modal/models/ModalConfig.ts","../../src/angular2-modal/providers/Modal.ts","../../src/dialogs/listSelectorDialog.ts","../../src/containers/recordList.ts","../../src/containers/recordEditWindow.ts","../../src/containers/tabs.ts","../../src/login/login.ts","../../src/containers/webAppContainer.ts","../../src/controls/fourDDropDown.ts","../../src/controls/quickFindInput.ts","../../src/pipes/Base64ImageRef.pipe.ts","../../src/pipes/FourDDateToString.pipe.ts","../../src/controls/fourDRegistryInput.ts","../../src/js44D.module.ts","../../src/angular2-modal/commonModals/okOnlyModal.ts","../../src/angular2-modal/commonModals/yesNoModal.ts","../../src/angular2-modal/models/ICustomModal.ts","../../src/modal.module.ts","../../src/angular2-modal/models/ICustomModalComponent.ts","../../js44d.ts"],"sourcesContent":["/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n// @dynamic\nexport class Base64 {\n\n\n\t/*--------------------------------------------------------------------------*/\n\n\tInvalidCharacterError = function (message) {\n\t\tthis.message = message;\n\t};\n\n\tprivate static error = function (message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new this.InvalidCharacterError(message);\n\t};\n\n\tprivate static TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tprivate static REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tpublic static decode(input): string {\n\t\tinput = String(input)\n\t\t\t.replace(Base64.REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\tBase64.error(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = Base64.TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tpublic static encode(input): string {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\tBase64.error(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tBase64.TABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tBase64.TABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tBase64.TABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tBase64.TABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tBase64.TABLE.charAt(buffer >> 10) +\n\t\t\t\tBase64.TABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tBase64.TABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tBase64.TABLE.charAt(buffer >> 2) +\n\t\t\t\tBase64.TABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\n}\n","/*! https://mths.be/utf8js v2.1.2 by @mathias */\n// @dynamic\nexport class Utf8 {\n\n\n\t// Taken from https://mths.be/punycode\n\tprivate static ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tprivate static ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += String.fromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += String.fromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tprivate static checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tprivate static createByte(codePoint, shift) {\n\t\treturn String.fromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tprivate static encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn String.fromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = String.fromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tUtf8.checkScalarValue(codePoint);\n\t\t\tsymbol = String.fromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += Utf8.createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = String.fromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += Utf8.createByte(codePoint, 12);\n\t\t\tsymbol += Utf8.createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += String.fromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tpublic static utf8encode(string) {\n\t\tvar codePoints = Utf8.ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += Utf8.encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tprivate static readContinuationByte() {\n\t\tif (Utf8.byteIndex >= Utf8.byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = Utf8.byteArray[Utf8.byteIndex] & 0xFF;\n\t\tUtf8.byteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tprivate static decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (Utf8.byteIndex > Utf8.byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (Utf8.byteIndex == Utf8.byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = Utf8.byteArray[Utf8.byteIndex] & 0xFF;\n\t\tUtf8.byteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tbyte2 = Utf8.readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = Utf8.readContinuationByte();\n\t\t\tbyte3 = Utf8.readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tUtf8.checkScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = Utf8.readContinuationByte();\n\t\t\tbyte3 = Utf8.readContinuationByte();\n\t\t\tbyte4 = Utf8.readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tprivate static byteArray;\n\tprivate static byteCount;\n\tprivate static byteIndex;\n\n\tpublic static utf8decode(byteString) {\n\n\t\tUtf8.byteArray = Utf8.ucs2decode(byteString);\n\t\tUtf8.byteCount = Utf8.byteArray.length;\n\t\tUtf8.byteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = Utf8.decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn Utf8.ucs2encode(codePoints);\n\t}\n\n\n}\n","import { Injectable, Inject, EventEmitter } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { Base64 } from './base64';\nimport { Utf8 } from './utf8';\n\n\n//\n// Various Utility Functions useb by the code above\n//\n/**\n * convert object to encoded url string\n */\n\nexport let convertObjectToURL = function (obj: any) {\n    const str: Array<any> = [];\n    for (const p in obj) {\n        if (obj.hasOwnProperty(p)) {\n            str.push(encodeURIComponent(p) + '=' + encodeURIComponent(obj[p]));\n        }\n    }\n    return str.join('&');\n};\n\n/* tslint:disable: no-use-before-declare */\n/**\n * Calculates hash code from URL string or POST form data\n */\nexport let calculateHash = function (formData: any) {\n    let value = '';\n    for (const key in formData) {\n        if (formData.hasOwnProperty(key)) {\n            if (value !== '') { value += ','; }\n            value += key + '=' + formData[key];\n        }\n    }\n\n    // console.log('hash:' + value);\n    return MD5.md5(value);\n};\n/* tslint */\n\n\n\n/**\n * Main 4D backend interface code\n */\n// @dynamic\n@Injectable()\nexport class FourDInterface {\n    //\n    // Global Properties\n    //\n    public static interfaceInstance:FourDInterface;\n\n    /**\n     * The Authentication object received from 4D after user sign's in.\n     * \n     * It holds the Session Key, user privileges and attributes.\n     */\n    public static authentication: any;\n\n    /** name of current user logged into 4D */\n    public static currentUser = '';\n    \n    /** ID of current user logged into 4D */\n    public static currentUserID = 0;\n\n    /** password of current user logged into 4D */\n    public static currentUserPassword = '';\n\n    /**\n      * 4D Web Server URL\n      */\n    private static _fourDUrl = 'http://localhost:8080'; // defaults to the initiator URL, can be modified by the main app during development\n    public static get fourDUrl():string {return FourDInterface._fourDUrl}\n    public static set fourDUrl (url) {\n        FourDInterface._fourDUrl = url;\n        if (FourDInterface.interfaceInstance) {\n            FourDInterface.interfaceInstance.call4DRESTMethod('REST_GetAPIVersion',{}, {responseType:'text'})\n            .subscribe((v) => {FourDInterface.fourdAPIVersion = v;});\n        }\n    }\n\n    /**\n     * current FourDREST API version\n     */\n    public static fourdAPIVersion = '';\n\n    /**\n     * current session key used in all http requests\n     */\n    public static sessionKey = '';\n\n    /**\n     * indicates if web app is running standalone or inside a workspace\n     */\n    public static runningInsideWorkspace = false;\n\n    /**\n     * Event emitted when user has successfully signed into 4D\n     */\n    public static userHasSignedIn: EventEmitter<any> = new EventEmitter();\n\n    /** 4D lists entries are cached to optimize traffic to/from 4D</b></p> */\n    private static _listCache: any = {};\n\n    /** Registry entries are cached to optimize traffic to/from 4D</b></p> */\n    private static _registryCache: Array<any> = [];\n\n     /**\n      * Inject HTTPClient service we'll use\n      */\n    constructor(@Inject(HttpClient) private httpClient:HttpClient) {\n        FourDInterface.interfaceInstance = this;\n    }\n\n\n    /**\n     * Generic function to call 4D backend using Angular5 HTTPClient. <p>A Session Key and payload hash code with be added to each request as required by FourDRESTApi.</p>\n     * \n     * \t@param fourdMethod 4D method name to call, one of the FourDRESTApi entry points\n     * \t@param body the request body to send to 4D, an object that will be converted to URLSearchParams\n     * \t@param options additional, optional, HTTPClient post options\n     * \n     * @returns returns an Observable for the database operation; caller can subscribe to it and act upon the request completion\n     */\n    public call4DRESTMethod(fourdMethod: string, body: any, options?: any, acceptHeader:string = null): Observable<any> {\n        let contentHeaders = { 'Content-Type': 'application/x-www-form-urlencoded' };\n        if (acceptHeader) {\n            contentHeaders['Accept'] = acceptHeader;\n        } else {\n            contentHeaders['Accept'] = 'text/json;text/html,application/xhtml+xml,application/xml,application/json;q=0.9,image/webp,*/*;q=0.8'; // need all this crap for 4D V15!!\n        }\n\n        if (options) {\n            options.headers = new HttpHeaders(contentHeaders);\n        } else options = { headers: new HttpHeaders(contentHeaders) };\n\n        body.Sessionkey = FourDInterface.sessionKey;\n        body.hash = calculateHash(body);\n\n        return this.httpClient.post(FourDInterface.fourDUrl + '/4DAction/' + fourdMethod, convertObjectToURL(body), options);\n\n    }\n\n    /**\n     * Call 4D backend REST_ProxyHTTPGet entry point to proxy a URL request thru 4D in order to avoid CORS issues \n     * \n     * \t@param url: the URL request to proxy thru 4D\n     * \n     * @returns returns an Observable for the database operation\n     */\n    public proxyURLThru4D(url: string): Observable<any> {\n        const body: any = { url: Base64.encode(Utf8.utf8encode(url)) };\n        body.Sessionkey = FourDInterface.sessionKey;\n        body.hash = calculateHash(body);\n\n        return this.httpClient.post(FourDInterface.fourDUrl + '/4DAction/REST_ProxyHTTPGet',\n            convertObjectToURL(body), {});\n\n    }\n\n\n    /**\n     * Sign in to 4D backend \n     * \n     * \t@param user: user name\n     * \t@param pwd: MD5 password digest\n     * \n     * @returns returns a Promise that can be subscribed to to handle the request completion; the Promise result is the Authentication object returned by 4D\n     * \n     */\n    public signIn(user, pwd): Promise<any> {\n        FourDInterface.currentUser = user;\n        FourDInterface.currentUserPassword = pwd;\n\n        // clean up previous authentication data\n        FourDInterface.authentication = null; \n        FourDInterface.currentUserID = 0;\n        FourDInterface.sessionKey = ''; \n\n        const body = { username: Base64.encode(Utf8.utf8encode(user)), password: Base64.encode(Utf8.utf8encode(pwd)) };\n\n        return new Promise((resolve, reject) => {\n            this.call4DRESTMethod('REST_Authenticate', body)\n                .subscribe(resultJSON => {\n                    if (resultJSON.valid) {\n                        FourDInterface.currentUser = user;\n                        FourDInterface.currentUserPassword = pwd;\n                        FourDInterface.authentication = resultJSON.session; // save authentication\n                        FourDInterface.currentUserID = resultJSON.session.options._userID;\n                        FourDInterface.sessionKey = resultJSON.session.key; // and the session ID we'll use from now on...\n\n                        FourDInterface.userHasSignedIn.emit(FourDInterface.currentUser);\n\n                        resolve(FourDInterface.authentication);\n\n                    } else {\n                        reject('Invalid username or password! ==> ' + resultJSON);\n                    }\n                },\n                error => {\n                    console.log('error:' + JSON.stringify(error));\n                    reject(error);\n                }\n                );\n\n        });\n    }\n\n\n    /**\n     * Get Record count based on a supplied query+filter\n     * \n     *  @param tableName the table to get the resulting record count\n     *  @param query the FourDQuery object that defines the query to be used for determining\n     *  @param filter optional, FourDQuery to further filter records\n     *\n     * @returns returns a Promise for the database operation, whose result is the # of records selected\n     */\n    public getRecordCount(tableName:string, query: FourDQuery, filter: string = null): Promise<number> {\n        let body: any = { TableName: tableName, QueryString: JSON.stringify(query)};\n        if (filter) { body.FilterOptions = filter; }\n\n        return new Promise((resolve, reject) => {\n            // const me = this;\n            this.call4DRESTMethod('REST_CountRecords', body)\n                .subscribe(resultJSON => {\n                    if (resultJSON && resultJSON.valid) {\n                        resolve(resultJSON.selected);\n                    } else reject(resultJSON.message)\n\n                },\n                    error => {\n                        console.log('error:' + error);\n                        reject(error);\n                    });\n        });\n\n    }\n\n    /**\n     * Gets the values of a 4D Choice List. <p><i>4D lists entries are cached to optimize traffic to/from 4D</i></p>\n     * \n     * \t@param listName the 4D Choice List name\n     * \n     * @returns returns a Promise for the database operation, whose result is a string Array with all the choice list values\n     * \n     **/\n    public get4DList(listName: string): Promise<Array<string>> {\n        if (FourDInterface._listCache[listName]) {\n            return new Promise((resolve, reject) => { resolve(FourDInterface._listCache[listName]); });\n        }\n\n        const body: any = { list: listName };\n\n        return new Promise((resolve, reject) => {\n            this.call4DRESTMethod('REST_Get4DList', body)\n                .subscribe(resultJSON => {\n                    const listValues = resultJSON.values;\n                    FourDInterface._listCache[listName] = listValues;\n                    resolve(listValues);\n                },\n                error => {\n                    console.log('error:' + JSON.stringify(error));\n                    reject(error);\n                });\n\n        });\n\n    }\n\n    /**\n     * Update values of a 4D Choice List\n     * \n     * @param listName 4D choice list name\n     * @param listValues array of list values to update on 4D side\n     */\n    public update4DList(listName: string, listItems: Array<string>): Promise<any> {\n        const body: any = { listName: listName, listValues: Base64.encode(Utf8.utf8encode(JSON.stringify({ items: listItems }))) };\n\n        return new Promise((resolve, reject) => {\n            this.call4DRESTMethod('REST_Update4DList', body, { responseType: 'text' })\n                .subscribe(\n                response => { resolve(null); },\n                error => {\n                    console.log('error:' + JSON.stringify(error));\n                    reject(error);\n                });\n\n        });\n\n    }\n\n    /**\n     * Retrieve a filtered 4D List from 4C-TV. Used to access a single level of a hierarchical 4D List.\n     * \n      * \n     * @param listName 4D list name\n     * @param selector the hierarchical selector, only items under that selector in the hierarchy will be returned\n     * @returns returns a Promise for the database operation\n     * \n     */\n    public getFiltered4DList(listName: string, selector: string): Promise<Array<string>> {\n\n        const body: any = { Listname: listName, Selector: selector };\n\n        return new Promise((resolve, reject) => {\n            this.call4DRESTMethod('REST_GetFiltered4DList', body)\n                .subscribe(resultJSON => {\n                    resolve(resultJSON.values);\n                },\n                error => {\n                    console.log('error:' + JSON.stringify(error));\n                    reject(error);\n                });\n\n        });\n\n    }\n\n    /**\n     *  Get current Registry entry value. <p><i>Registry entries are cached to optimize traffic to/from 4D</i></p>\n     * \n     * @param theClass the Registry Class to retrieve\n     * @param theParameter the Registry Parameter to retrieve (optional, if blank gets all values for the Registry Class)\n     * @param theDefaultValue a default value to return, in case the Registry entry is not defined in 4D\n     * @param theSelector the Registry Selector to retrieve (optional, if blank gets all values for the Registry Class/Parameter)\n     * \n     * @returns returns a Promise for the database operation\n     * \n     * <b>Retrieved Registry entries are cached in to optimize traffic to/from 4D </b>\n     * \n     */\n    public getRegistryValue(theClass: string,\n        theParameter: string,\n        theDefaultValue: string = '',\n        theSelector: string = ''): Promise<string> {\n        let item: any = {};\n        for (item of FourDInterface._registryCache) {\n            if (item.class === theClass && item.parameter === theParameter && item.selector === theSelector) {\n                return new Promise((resolve, reject) => { resolve(item.registryValue); });\n            }\n        }\n\n        const body: any = { class: theClass, parameter: theParameter, defaultValue: theDefaultValue, selector: theSelector };\n\n        return new Promise((resolve, reject) => {\n            this.call4DRESTMethod('REST_GetRegistryValue', body, { responseType: 'text' })\n                .subscribe(\n                response => {\n                    body.registryValue = response;\n                    FourDInterface._registryCache.push(body);\n                    resolve(body.registryValue);\n                },\n                error => {\n                    console.log('error:' + JSON.stringify(error));\n                    reject(error);\n                });\n\n        });\n\n    }\n\n\n    /**\n     * Sets a Registry entry value\n     * \n     * @param theClass the Registry Class to set\n     * @param theParameter the Registry Parameter to set\n     * @param theValue a Registry value to set\n     * @param theSelector the Registry Selector to set (optional)\n     * \n    */\n    public setRegistryValue(theClass: string, theParameter: string, theValue: string, theSelector: string = ''): Promise<any> {\n        const body: any = { class: theClass, parameter: theParameter, value: theValue, selector: theSelector };\n\n        return new Promise((resolve, reject) => {\n            this.call4DRESTMethod('REST_SetRegistryValue', body, { responseType: 'text' })\n                .subscribe(\n                response => {\n                    FourDInterface._registryCache = []; // need to reset cache when user changes any registry entry\n                    resolve(null);\n                },\n                error => {\n                    console.log('error:' + JSON.stringify(error));\n                    reject(error);\n                });\n\n        });\n\n    }\n\n    /**\n     * Converts a DOM date to 4D format (YYYYMMDD).\n     *  \n     * @param theDate a DOM date value\n     * @returns a 4D formatted date string (YYYYMMDD)\n     * \n     */\n    public dateTo4DFormat(theDate: Date): string {\n\n        return (theDate && !isNaN(<any>theDate))?theDate.toJSON().substr(0, 10).replace(/-/g, ''):'00000000';\n    }\n\n    /**\n     * Converts a 4D YMD date to DOM format .\n     *  \n     * @param theDate a 4D date value, formatted as string (YYYYMMDD)\n     * @returns a DOM date \n     * \n     */\n    public dateToDOMFormat(theDate: string): Date {\n        if (theDate && theDate != '') {\n            const dateValue = theDate.substr(0,4)+'/'+theDate.substr(4,2)+'/'+theDate.substr(6,2);\n            return new Date(dateValue);\n        } else {\n            return null;\n        }\n    }\n\n    /**\n     * Converts a DOM Time to 4D format (hh:mm:ss).\n     *  \n     * @param theDate a DOM date-time value\n     * @returns a 4D formatted date string (hh:mm:ss)\n     * \n     */\n    public timeTo4DFormat(theDate: Date): string {\n        if (theDate && !isNaN(<any>theDate)) {\n            let theTime:string = (theDate.getHours() < 10)?'0'+theDate.getHours():theDate.getHours().toString();\n            theTime += (theDate.getMinutes() < 10)?':0'+theDate.getMinutes():':'+theDate.getMinutes();\n            theTime += (theDate.getSeconds() < 10)?':0'+theDate.getSeconds():':'+theDate.getSeconds();\n            return theTime;\n        } else {\n            return '00:00:00';\n        }\n    }\n\n    /**\n     * Converts a 4D HH:MM:SS time to DOM format .\n     *  \n     * @param theTime a 4D time value, formatted as string (HH:MM:SS)\n     * @returns a DOM date \n     * \n     */\n    public timeToDOMFormat(theTime: string): Date {\n        if (theTime && theTime != '') {\n            const hh = +theTime.substr(0,2);\n            const mm = +theTime.substr(3,2);\n            const ss = +theTime.substr(6,2);\n            return new Date(0,0,0,hh,mm,ss);\n        } else {\n            return null;\n        }\n    }\n\n        \n    /**\n     * assemble an URL request string with session & hash tokens \n     * @param req the URL request root\n     * @param args query parameters as a URLVariables object\n     * @return the assembled URL string\n     * \n     */\n    public assembleURLWithHash(req:string, args:any):string {\n    args.Sessionkey=FourDInterface.sessionKey;\n    \n    var str:String = \"\";\n    for (const item in args) {\n        str += ((str == '')?'?':'&')+item+\"=\"+escape(args[item]); \t\t\n    }\n    \n    return req + str + \"&hash=\"+calculateHash(args);\n    \n    }\n\t    \n}\n\n\n/**\n * MD5 has calculation\n */\nexport class MD5 {\n\n    static hex_chr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];// '0123456789abcdef'.split('');\n\n    static md5cycle(x, k) {\n        let a = x[0], b = x[1], c = x[2], d = x[3];\n\n        a = MD5.ff(a, b, c, d, k[0], 7, -680876936);\n        d = MD5.ff(d, a, b, c, k[1], 12, -389564586);\n        c = MD5.ff(c, d, a, b, k[2], 17, 606105819);\n        b = MD5.ff(b, c, d, a, k[3], 22, -1044525330);\n        a = MD5.ff(a, b, c, d, k[4], 7, -176418897);\n        d = MD5.ff(d, a, b, c, k[5], 12, 1200080426);\n        c = MD5.ff(c, d, a, b, k[6], 17, -1473231341);\n        b = MD5.ff(b, c, d, a, k[7], 22, -45705983);\n        a = MD5.ff(a, b, c, d, k[8], 7, 1770035416);\n        d = MD5.ff(d, a, b, c, k[9], 12, -1958414417);\n        c = MD5.ff(c, d, a, b, k[10], 17, -42063);\n        b = MD5.ff(b, c, d, a, k[11], 22, -1990404162);\n        a = MD5.ff(a, b, c, d, k[12], 7, 1804603682);\n        d = MD5.ff(d, a, b, c, k[13], 12, -40341101);\n        c = MD5.ff(c, d, a, b, k[14], 17, -1502002290);\n        b = MD5.ff(b, c, d, a, k[15], 22, 1236535329);\n\n        a = MD5.gg(a, b, c, d, k[1], 5, -165796510);\n        d = MD5.gg(d, a, b, c, k[6], 9, -1069501632);\n        c = MD5.gg(c, d, a, b, k[11], 14, 643717713);\n        b = MD5.gg(b, c, d, a, k[0], 20, -373897302);\n        a = MD5.gg(a, b, c, d, k[5], 5, -701558691);\n        d = MD5.gg(d, a, b, c, k[10], 9, 38016083);\n        c = MD5.gg(c, d, a, b, k[15], 14, -660478335);\n        b = MD5.gg(b, c, d, a, k[4], 20, -405537848);\n        a = MD5.gg(a, b, c, d, k[9], 5, 568446438);\n        d = MD5.gg(d, a, b, c, k[14], 9, -1019803690);\n        c = MD5.gg(c, d, a, b, k[3], 14, -187363961);\n        b = MD5.gg(b, c, d, a, k[8], 20, 1163531501);\n        a = MD5.gg(a, b, c, d, k[13], 5, -1444681467);\n        d = MD5.gg(d, a, b, c, k[2], 9, -51403784);\n        c = MD5.gg(c, d, a, b, k[7], 14, 1735328473);\n        b = MD5.gg(b, c, d, a, k[12], 20, -1926607734);\n\n        a = MD5.hh(a, b, c, d, k[5], 4, -378558);\n        d = MD5.hh(d, a, b, c, k[8], 11, -2022574463);\n        c = MD5.hh(c, d, a, b, k[11], 16, 1839030562);\n        b = MD5.hh(b, c, d, a, k[14], 23, -35309556);\n        a = MD5.hh(a, b, c, d, k[1], 4, -1530992060);\n        d = MD5.hh(d, a, b, c, k[4], 11, 1272893353);\n        c = MD5.hh(c, d, a, b, k[7], 16, -155497632);\n        b = MD5.hh(b, c, d, a, k[10], 23, -1094730640);\n        a = MD5.hh(a, b, c, d, k[13], 4, 681279174);\n        d = MD5.hh(d, a, b, c, k[0], 11, -358537222);\n        c = MD5.hh(c, d, a, b, k[3], 16, -722521979);\n        b = MD5.hh(b, c, d, a, k[6], 23, 76029189);\n        a = MD5.hh(a, b, c, d, k[9], 4, -640364487);\n        d = MD5.hh(d, a, b, c, k[12], 11, -421815835);\n        c = MD5.hh(c, d, a, b, k[15], 16, 530742520);\n        b = MD5.hh(b, c, d, a, k[2], 23, -995338651);\n\n        a = MD5.ii(a, b, c, d, k[0], 6, -198630844);\n        d = MD5.ii(d, a, b, c, k[7], 10, 1126891415);\n        c = MD5.ii(c, d, a, b, k[14], 15, -1416354905);\n        b = MD5.ii(b, c, d, a, k[5], 21, -57434055);\n        a = MD5.ii(a, b, c, d, k[12], 6, 1700485571);\n        d = MD5.ii(d, a, b, c, k[3], 10, -1894986606);\n        c = MD5.ii(c, d, a, b, k[10], 15, -1051523);\n        b = MD5.ii(b, c, d, a, k[1], 21, -2054922799);\n        a = MD5.ii(a, b, c, d, k[8], 6, 1873313359);\n        d = MD5.ii(d, a, b, c, k[15], 10, -30611744);\n        c = MD5.ii(c, d, a, b, k[6], 15, -1560198380);\n        b = MD5.ii(b, c, d, a, k[13], 21, 1309151649);\n        a = MD5.ii(a, b, c, d, k[4], 6, -145523070);\n        d = MD5.ii(d, a, b, c, k[11], 10, -1120210379);\n        c = MD5.ii(c, d, a, b, k[2], 15, 718787259);\n        b = MD5.ii(b, c, d, a, k[9], 21, -343485551);\n\n        x[0] = MD5.add32(a, x[0]);\n        x[1] = MD5.add32(b, x[1]);\n        x[2] = MD5.add32(c, x[2]);\n        x[3] = MD5.add32(d, x[3]);\n\n    }\n\n    static cmn(q, a, b, x, s, t) {\n        a = MD5.add32(MD5.add32(a, q), MD5.add32(x, t));\n        return MD5.add32((a << s) | (a >>> (32 - s)), b);\n    }\n\n    static ff(a, b, c, d, x, s, t) {\n        return MD5.cmn((b & c) | ((~b) & d), a, b, x, s, t);\n    }\n\n    static gg(a, b, c, d, x, s, t) {\n        return MD5.cmn((b & d) | (c & (~d)), a, b, x, s, t);\n    }\n\n    static hh(a, b, c, d, x, s, t) {\n        return MD5.cmn(b ^ c ^ d, a, b, x, s, t);\n    }\n\n    static ii(a, b, c, d, x, s, t) {\n        return MD5.cmn(c ^ (b | (~d)), a, b, x, s, t);\n    }\n\n    static md51(s) {\n        const n = s.length;\n        const state = [1732584193, -271733879, -1732584194, 271733878];\n        let i;\n        for (i = 64; i <= s.length; i += 64) {\n            MD5.md5cycle(state, MD5.md5blk(s.substring(i - 64, i)));\n        }\n        s = s.substring(i - 64);\n        const tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n        for (i = 0; i < s.length; i++) { tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3); }\n        tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n        if (i > 55) {\n            MD5.md5cycle(state, tail);\n            for (i = 0; i < 16; i++) { tail[i] = 0; }\n        }\n        tail[14] = n * 8;\n        MD5.md5cycle(state, tail);\n        return state;\n    }\n\n    /* there needs to be support for Unicode here,\n     * unless we pretend that we can redefine the MD-5\n     * algorithm for multi-byte characters (perhaps\n     * by adding every four 16-bit characters and\n     * shortening the sum to 32 bits). Otherwise\n     * I suggest performing MD-5 as if every character\n     * was two bytes--e.g., 0040 0025 = @%--but then\n     * how will an ordinary MD-5 sum be matched?\n     * There is no way to standardize text to something\n     * like UTF-8 before transformation; speed cost is\n     * utterly prohibitive. The JavaScript standard\n     * itself needs to look at this: it should start\n     * providing access to strings as preformed UTF-8\n     * 8-bit unsigned value arrays.\n     */\n    static md5blk(s) { /* I figured global was faster.   */\n        const md5blks = []; /* Andy King said do it this way. */\n        for (let i = 0; i < 64; i += 4) {\n            md5blks[i >> 2] = s.charCodeAt(i)\n                + (s.charCodeAt(i + 1) << 8)\n                + (s.charCodeAt(i + 2) << 16)\n                + (s.charCodeAt(i + 3) << 24);\n        }\n        return md5blks;\n    }\n\n    static rhex(n) {\n        let s = '', j = 0;\n        for (; j < 4; j++) {\n            s += MD5.hex_chr[(n >> (j * 8 + 4)) & 0x0F]\n                + MD5.hex_chr[(n >> (j * 8)) & 0x0F];\n        }\n        return s;\n    }\n\n    static hex(x) {\n        for (let i = 0; i < x.length; i++) { x[i] = MD5.rhex(x[i]); }\n        return x.join('');\n    }\n\n    static md5(s) {\n        return MD5.hex(MD5.md51(MD5.str2rstr_utf8(s)));\n    }\n\n    /* this function is much faster,\n     so if possible we use it. Some IEs\n     are the only ones I know of that\n     need the idiotic second function,\n     generated by an if clause.  */\n\n    static add32(a, b) {\n        return (a + b) & 0xFFFFFFFF;\n    }\n\n\n    /*\n    * Encode a string as utf-8.\n    * For efficiency, this assumes the input is valid utf-16.\n    */\n    static str2rstr_utf8(input: string): string {\n        let output = '';\n        let i = -1;\n        let x: number, y: number;\n\n        while (++i < input.length) {\n            /* Decode utf-16 surrogate pairs */\n            x = input.charCodeAt(i);\n            y = i + 1 < input.length ? input.charCodeAt(i + 1) : 0;\n            if (0xD800 <= x && x <= 0xDBFF && 0xDC00 <= y && y <= 0xDFFF) {\n                x = 0x10000 + ((x & 0x03FF) << 10) + (y & 0x03FF);\n                i++;\n            }\n\n            /* Encode output as utf-8 */\n            if (x <= 0x7F) {\n                output += String.fromCharCode(x);\n            } else if (x <= 0x7FF) {\n                output += String.fromCharCode(0xC0 | ((x >>> 6) & 0x1F),\n                    0x80 | (x & 0x3F));\n            } else if (x <= 0xFFFF) {\n                output += String.fromCharCode(0xE0 | ((x >>> 12) & 0x0F),\n                    0x80 | ((x >>> 6) & 0x3F),\n                    0x80 | (x & 0x3F));\n            } else if (x <= 0x1FFFFF) {\n                output += String.fromCharCode(0xF0 | ((x >>> 18) & 0x07),\n                    0x80 | ((x >>> 12) & 0x3F),\n                    0x80 | ((x >>> 6) & 0x3F),\n                    0x80 | (x & 0x3F));\n            }\n        }\n        return output;\n    }\n\n}\n\n/**\n * Describes the properties of a 4D Query String  - [see RESTApi documentation](https://github.com/fourctv/FourDRESTApi/wiki/The-JS44D-Query-String)\n */\nexport class FourDQuery {\n    /** Value is a string Array that corresponds to a simple 4D query. The items in the query terms array are similar to 4D Query lines and have the following format: <b>table.field; comparator ; argument; [and, or]</b>.  */\n    query?: Array<any>;\n    /** Value is a SQL Where clause string, that is used on a QUERY BY SQL on 4D side */\n    sql?: string;\n    /** An union of multiple queries, value is a FourDQuery instances Array. Results from each query are combined in a set union */\n    union?: Array<any>;\n    /** An intersection of multiple queries, value is a FourDQuery instances Array. Results from each query are combined in a set intersection */\n    intersection?: Array<any>;\n    /** Value is a string that corresponds to a 4D method name. Method is called to perform the query. Other properties in the FourDQuery instance are sent to the method to determine the query to perform */\n    custom?: string;\n    /** Sets a join between a related tabled; query terms are applied to the join table and <b>joinPK</b> and <b>joinFK</b> establishes the links between the two tables */\n    join?: string;\n    /** A join query property. This is the join table, a table name */\n    joinTable?: string;\n    /** A join query property. The join table primary key used to establish the join */\n    joinPK?: string;\n    /** A join query property. The main table foreign key used to establish the join */\n    joinFK?: string;\n}\n","import { Injectable } from '@angular/core';\nimport { Base64 } from './base64';\nimport { Utf8 } from './utf8';\n\nimport { FourDInterface, FourDQuery } from './JSFourDInterface';\nimport { FourDModel } from './JSFourDModel';\n\n/**\n * This class represents a Collection of FourDModels and provides functionality to populate the Collection, fetching records from a 4D Database\n */\n@Injectable()\nexport class FourDCollection {\n\n    //\n    // FourDCollection properties\n    //\n    /** the model this collection is based on */\n    public model: any;\n    /** array of models in the collection */\n    public models: Array<any> = [];\n    /** default order by string */\n    public orderBy: string;\n    /** default query string */\n    public queryString: FourDQuery = null;\n    /** default filter to be applied on all queries */\n    public filterOptions: string;\n\n    /** the default list of field/column names to be populated on each Collection record data */\n    public columns: Array<any> = [];\n\n    /** holds current record from the current selection */\n    public currentRecord: FourDModel;\n    /** holds the total # of records found on the latest query */\n    public totalRecordCount = 0;\n\n    /** injected FourDInterface service */\n    private fourD: FourDInterface;\n\n    //\n    // constructor: initialize collection properties\n    //\n    constructor() {\n        // inject FourDInterface\n        this.fourD = FourDInterface.interfaceInstance;\n    }\n\n    /**\n     * prepares the JSON field description to send to 4D, listing the columns to retrieve\n     * \n     *  @param columns a string Array with the list of field/column names to retrieve for each record; if null, the default list of columns defined in the Collection will be retrieved\n     * \n     *  @returns a JSON string listing the fields/columns to retrieve for each record\n     */\n    public getColumnListJSON(columns: Array<any>): string {\n        if (!columns) { columns = this.columns; }\n        const colList: Array<any> = [];\n        const modelDef = <any>(this.model);\n        let theModel: FourDModel = <any>(new modelDef());\n        let fld: any;\n        for (const col of columns) {\n            if (typeof (col) === 'string') {\n                if (col.indexOf('.') > 0) { // is this a longname field?\n                    colList.push({ name: col.substr(col.indexOf('.') + 1), field: col });\n                } else { // nope, so let's see if we have it in our datamodel\n                    fld = theModel.getFieldProperties(col);\n                    if (fld) { // field in our datamodel, use its properties\n                        if (fld.formula) {\n                            colList.push({ name: fld.name, formula: fld.formula });\n                        } else if (fld.longname) { colList.push({ name: fld.name, field: fld.longname }); }\n                    }\n                }\n            } else if (col.field) {\n                theModel = <any>(new modelDef());\n                fld = theModel.getFieldProperties(col.field);\n                if (fld) {\n                    if (fld.formula) {\n                        colList.push({ name: fld.name, formula: fld.formula });\n                    } else if (fld.longname) { colList.push({ name: fld.name, field: fld.longname }); }\n                }\n            } else {\n                if (col.formula) {\n                    colList.push({ name: col.name, formula: col.formula });\n                } else if (col.name && col.longname) { colList.push({ name: col.name, field: col.longname }); }\n            }\n        }\n\n        return JSON.stringify(colList);\n\n    }\n\n    /**\n     * Retrieves a list of records using a query string \n     * \n     *  @param query the FourDQuery object that defines the query to be used for retrieving from 4D\n     * \t@param columns custom column list to retrieve, JSON array of the columns to retrieve. <p>if informed, only the columns listed will be retrieved instead of the whole record</p>\n     * \t@param startRec the starting record number to retrieve, used for paging.\n     * \t@param numOfRecords the number of records to retrieve, the default -1 will retrieve all records in the resulting query.\n     *  @param filter optional, FourDQuery to further filter records to he retrieved\n     *  @param orderby optional order By clause to retrieve records in a set order. <p> in the format:</p><p>    &gt;table.field : to sort records by table.field in ascending order</p><p>    &lt;table.field : to sort records by table.field in descending order</p>\n     *  \n     * @returns returns a Promise for the database operation, whose result is an Array of FourDModel records returned by 4D\n     */\n    public getRecords(query: FourDQuery = null, columns: Array<string> = null, startRec: number = 0, numOfRecords: number = -1, filter: string = null, orderby: string = null): Promise<Array<FourDModel>> {\n        if (!query) {\n            query = this.queryString;\n        }\n        if (columns) {\n            this.columns = columns;\n        }\n        if (!filter || filter === '') {\n            filter = this.filterOptions;\n        }\n        if (!orderby || orderby === '') {\n            orderby = this.orderBy;\n        }\n\n        const body: any = { Username: FourDInterface.currentUser };\n        const modelDef = <any>(this.model);\n        let newModel: FourDModel = <any>(new modelDef());\n        body.TableName = newModel.tableName;\n        body.StartRec = startRec;\n        body.NumRecs = numOfRecords;\n\n        body.QueryString = JSON.stringify(query);\n        body.Columns = Base64.encode(Utf8.utf8encode((columns) ? this.getColumnListJSON(columns) : this.getColumnListJSON(newModel.getColumnList())));\n\n        if (filter) { body.FilterOptions = filter; }\n        if (orderby) { body.OrderBy = orderby; }\n\n        return new Promise((resolve, reject) => {\n            // const me = this;\n            this.fourD.call4DRESTMethod('REST_GetRecords', body)\n                .subscribe(resultJSON => {\n                    this.totalRecordCount = 0;\n                    this.models = [];\n                    if (resultJSON && resultJSON['selected'] && resultJSON['records']) {\n                        this.totalRecordCount = parseInt(resultJSON['selected']);\n                        const recList: Array<any> = resultJSON['records'];\n                        recList.forEach(record => {\n                            newModel = <any>(new modelDef());\n                            newModel.populateModelData(record);\n                            newModel.clearRecordDirtyFlag();\n                            this.models.push(newModel);\n                        });\n                    }\n\n                    resolve(<any>this.models);\n                },\n                    error => {\n                        console.log('error:' + error);\n                        reject(error);\n                    });\n        });\n\n    }\n\n\n    /**\n     * Delete a selection of records based on a supplied query+filter\n     * \n     *  @param query the FourDQuery object that defines the query to be used for retrieving from 4D\n     *  @param filter optional, FourDQuery to further filter records to he retrieved\n     *\n     * @returns returns a Promise for the database operation, whose result is the # of records deleted\n     */\n    public bulkDelete(query: FourDQuery, filter: string = null): Promise<number> {\n        const modelDef = <any>(this.model);\n        const newModel: FourDModel = <any>(new modelDef());\n        let body: any = { TableName: newModel.tableName };\n        body.QueryString = JSON.stringify(query);\n        if (filter) { body.FilterOptions = filter; }\n\n        return new Promise((resolve, reject) => {\n            // const me = this;\n            this.fourD.call4DRESTMethod('REST_BulkDelete', body)\n                .subscribe(resultJSON => {\n                    if (resultJSON && resultJSON.valid) {\n                        resolve(resultJSON.deleted);\n                    } else reject(resultJSON.message)\n\n                },\n                    error => {\n                        console.log('error:' + error);\n                        reject(error);\n                    });\n        });\n\n    }\n\n    /**\n    * Update a selection of records on a FourDCollection\n    *\n    * @returns returns a Promise for the database operation, blank means all records have been updated\n    */\n    public bulkUpdate(): Promise<string> {\n        let recordList = [];\n        //\n        // build list of records to update, with the modified fields data\n        //\n        for (const record of (this.models as Array<FourDModel>)) {\n            if (record.recordIsDirty()) {\n                recordList.push({ table: record.tableName, recnum: record.recordNumber, fields: Base64.encode(Utf8.utf8encode(record.recordToJSON('update', false)))});\n            }\n        }\n\n        if (recordList.length > 0) { // do we have any record to update?\n\n            return new Promise((resolve, reject) => {\n                // const me = this;\n                this.fourD.call4DRESTMethod('REST_BulkUpdate', { recordList: Base64.encode(Utf8.utf8encode(JSON.stringify(recordList)))})\n                    .subscribe(resultJSON => {\n                        if (resultJSON && resultJSON.valid) {\n                            resolve('');\n                        } else reject(resultJSON.message)\n\n                    },\n                        error => {\n                            console.log('error:' + error);\n                            reject(error);\n                        });\n            });\n        \n        } else {\n            return new Promise((resolve, reject) => {\n                resolve('No records have been modified!');\n            });\n        }\n\n    }\n\n\n    /**\n     * returns the length of the Collection, or the # of records loaded in\n     */\n    public get length(): number {\n        return this.models.length;\n    }\n\n    /**\n     * Convert Collection Data Models into a 'simple' array\n     */\n    public toArray(): Array<any> {\n        let ret = [];\n        this.models.forEach((element:FourDModel) => {\n            ret.push(element.extractModelData());\n        });\n        return ret;\n    }\n}\n\n","import { Injectable } from '@angular/core';\nimport { Base64 } from './base64';\nimport { Utf8 } from './utf8';\n\n\nimport { FourDInterface, FourDQuery } from './JSFourDInterface';\nimport { FourDCollection } from './JSFourDCollection';\n\n/**\n * This is the description for each field in a Data Model\n */\nexport interface IFieldDescription {\n    /** the field name, must be unique in the Data Model */\n    name: string;\n    /** the field dot long name, in the format 'table.field', applicable if a database field */\n    longname: string;\n    /** the field type, possible values are: string, number, Number, Date, time, boolean, blob, json, picture */\n    type: string;\n    /** if field is a calculated value, this is a 4D expresstion that returns the field contents */\n    formula: string;\n    /** if field is a subtable <i>(related many table)</i>, this is the FourDModel that represents records in that table */\n    subTable: FourDModel;\n    /** not used */\n    className: string;\n    /** if field is a subtable, this is the foreign key field in the main table */\n    joinFK: string;\n    /** if field is a subtable, this is the primary key field in the related many table */\n    joinPK: string;\n    /** indicates field comes from a related table */\n    isrelated: boolean;\n    /** if field is a foreign key that relates to a one table, this is the related one field name in dot long format */\n    relatesTo: string;\n    /** indicates field is read only, and can't me modified */\n    readonly: boolean;\n    /** the choice list associated to the field */\n    list: string;\n    /** field is a required field, cannot be empty or null */\n    required: boolean;\n    /** indicates that the field is indexed on 4D side */\n    indexed: boolean;\n    /** field is unique */\n    unique: boolean;\n    /** if an alpha field, the field length as defined in the 4D Structure */\n    length: number;\n}\n\n/**\n * Individual 4D Datamodel that replicates a 4D Table's structure and provides a CRUD API to 4D data\n */\n@Injectable()\nexport class FourDModel {\n    /** 4D's Table name */\n    public tableName = '';\n    /** 4D's table number */\n    public tableNumber = 0;\n    /** Table's primary key field name */\n    public primaryKey_: string;\n\n    /** record number field/attribute name, usually '_recnum' */\n    public idAttribute = '_recnum';\n\n    /** Table definition, array describing all fields in the Data Model and how they map to the 4D Structure */\n    public fields: Array<IFieldDescription> = [];\n\n    /** callback method to be executed on 4D side before a Save operation */\n    public fourdSaveCallbackMethod_: string;\n    /** callback method to be executed on 4D side before a Delete operation */\n    public fourdDeleteCallbackMethod_: string;\n\n    // injected FourDInterface service\n    public fourD: FourDInterface;\n\n    // -----------------------\n    // Private variables\n    // -----------------------\n    // current record number\n    private _recnum = -3;\n    // keeps all attributes for the current model\n    private _attributes: any = {};\n    // keep a list of modified fields, to optimize Updates, only modified data is set to 4D\n    private _modified: any = {};\n\n\n    /** \n     * constructor: initialize model properties\n    */\n    constructor() {\n        // inject FourDInterface\n        this.fourD = FourDInterface.interfaceInstance;\n    }\n\n\n    /**\n     * Get a field value\n     */\n    get(field: string): any {\n        if (this._attributes[field] === null && this._attributes[field] === undefined) {\n            return null;\n        }\n        if (this.getFieldProperties(field)) {\n            if (this.getFieldDescription(field).type === 'Date') {\n                if (typeof (this._attributes[field]) === 'string' || this._attributes[field] === '') {\n                    return null;\n                }\n            }\n            if (this.getFieldDescription(field).type === 'Time') {\n                if (typeof (this._attributes[field]) === 'string' || this._attributes[field] === '') {\n                    return null;\n                }\n            }\n        }\n\n        return this._attributes[field];\n    }\n\n    /**\n     * Set a field value, updates field modified flag\n     */\n    set(field: string, value: any) {\n        if (this.getFieldProperties(field)) {\n            if (this.getFieldDescription(field).type === 'Date') {\n                if (typeof (value) === 'string' && value !== '') {\n                    value = new Date(value.replace(/-/g, '\\/'));\n                }\n            } else if (this.getFieldDescription(field).type === 'Time') {\n                if (typeof (value) === 'string' && value !== '') {\n                    const hh = +value.substr(0,2);\n                    const mm = +value.substr(3,2);\n                    const ss = +value.substr(6,2);\n                    value = new Date(0,0,0,hh,mm,ss);\n                }\n            }\n            if (this._attributes.hasOwnProperty(field)) {\n                // we are updating an attribute\n                if (this._attributes[field] !== value) {\n                    // make sure value is indeed changing...\n                    this._attributes[field] = value;\n                    this._modified[field] = true; // mark field as modified\n                }\n            } else {\n                // setting a new attribute\n                this._attributes[field] = value;\n                this._modified[field] = true; // mark field as modified\n            }\n        } else {\n            this._attributes[field] = value;\n        }\n    }\n\n    /**\n     * Returns the description for a given field\n     * \n     * @param fieldName the field name to get properties for\n     * \n     * @returns the field name properties, an IFieldDescription instance\n     * \n     */\n    getFieldProperties(fieldName): IFieldDescription {\n        let ret: IFieldDescription = null;\n        for (const col of this.fields) {\n            if (col.name === fieldName) { ret = col; }\n        };\n        return ret;\n    }\n\n\n    /**\n     * Clears up all record fields\n     */\n    clearRecord() {\n        for (const field of this.fields) {\n            switch (field.type) {\n                case 'date':\n                case 'Date':\n                    this[field.name] = null;\n                    break;\n\n                case 'time':\n                case 'Time':\n                    this[field.name] = null;\n                    break;\n\n                case 'boolean':\n                    this[field.name] = false;\n                    break;\n\n                case 'string':\n                case 'text':\n                    this[field.name] = '';\n                    break;\n\n                case 'number':\n                    this[field.name] = 0;\n                    break;\n\n                case 'json':\n                    this[field.name] = {};\n                    break;\n\n                case 'blob':\n                case 'picture':\n                    this[field.name] = null;\n                    break;\n\n                default:\n                    this[field.name] = '';\n                    break;\n            }\n        };\n\n    }\n\n    /**\n     * Serializes record data into its JSON representation as used in 4D\n     *\n     * @param mode can be 'insert' or 'update', if mode is 'update' the JSON string will contain only fields that have been modified\n     * @param noAudit 'no audit' flag to be sent to 4D, if 'true' record audit log will be disabled \n     * \n     * @returns record contents as JSON string\n     *\n     */\n    recordToJSON(mode: string, noAudit: boolean): string {\n        const recordData: any = { table: this.tableName, recnum: this.recordNumber };\n        // set callback methods\n        if (this.fourdSaveCallbackMethod_) {\n            recordData['saveCallback'] = this.fourdSaveCallbackMethod_; // set save callback method if set\n        }\n\n        recordData['noAudit'] = noAudit;    // disable audit log for this record\n\n        if ((mode === 'update') && this.hasOwnProperty('TimeStamp')) {\n            recordData['timeStamp'] = this['TimeStamp'];\n        } // if updating, add current record's timestamp attribute\n\n        recordData['fields'] = {}; // initialize fields propriety\n        for (const field of this.fields) {\n            const fieldName: string = field.name;\n            if (!this.isCalculatedField(field) &&\n                !this.isSubtable(field) &&\n                !this.isRelatedField(field) &&\n                (!this.isReadOnly(field) || (mode === 'insert')) &&\t\t\t// May/15/09 send all non-read only fields, empty or not\n                (this.isModifiedField(fieldName) || (mode === 'insert'))) { \t// Nov 18/09 send ONLY fields that have indeed been modified\n                let value = '';\n                if (((this[fieldName] !== null) && (this[fieldName] !== undefined)) || (field.type === 'boolean') || (mode === 'update')) {\n                    // send back only fields that do have some value and that belong to the table\n                    // ignore calculated or related fields\n                    switch (field.type) {\n                        case 'Date':\n                        case 'date':\n                            if ((this[fieldName] === null) || (this[fieldName] === undefined)) {\n                                recordData['fields'][field.longname] = '';\n                            } else if (typeof (this[fieldName]) === 'string') {\n                                recordData['fields'][field.longname] = this[fieldName];\n                            } else {\n                                const dateValue: Date = this[fieldName];\n                                value = dateValue.getFullYear().toString();\n                                if (dateValue.getMonth() < 9) { value += '0'; }\n                                value += (dateValue.getMonth() + 1).toString();\n                                if (dateValue.getDate() < 10) { value += '0'; }\n                                value += dateValue.getDate().toString();\n                                recordData['fields'][field.longname] = value;\n                            }\n                            break;\n\n                        case 'time':\n                        case 'Time':\n                            if ((this[fieldName] === null) || (this[fieldName] === undefined)) {\n                                recordData['fields'][field.longname] = '';\n                            } else {\n                                const timeValue: Date = this[fieldName];\n                                value = this.fourD.timeTo4DFormat(timeValue);\n                                recordData['fields'][field.longname] = value;\n                            }\n                            break;\n\n                        case 'number':\n                        case 'Number':\n                            if ((this[fieldName] === null) || (this[fieldName] === undefined)) {\n                                recordData['fields'][field.longname] = '';\n                            } else recordData['fields'][field.longname] = +this[fieldName];\n                            break;\n\n                        case 'boolean':\n                            recordData['fields'][field.longname] = (this[fieldName]) ? true : false;\n                            break;\n\n                        case 'string':\n                        case 'text':\n                            if ((this[fieldName] === null) || (this[fieldName] === undefined)) {\n                                recordData['fields'][field.longname] = '';\n                            } else if (typeof (this[fieldName]) === 'string') {\n                                // if text, trim extra whitespace\n                                recordData['fields'][field.longname] = this[fieldName].trim();\n                            } else {\n                                recordData['fields'][field.longname] = this[fieldName].toString();\n                            }\n                            break;\n\n                        case 'json':\n                            recordData['fields'][field.longname] = JSON.stringify(this[fieldName]);\n                            break;\n\n                        case 'blob':\n                        case 'picture':\n                            /* TODO: add support for encoding BLOB fields */\n                            /*\n                             if (this[fieldName] != null) { // encode byte array does not handle null!\n                             var ba:ByteArray = this[fieldName] as ByteArray\n                             value = '<![CDATA['+Base64.encodeByteArray(ba)+']]>'; // if blob, wrap data inside a cdata\n                             }\n                             */\n                            recordData['fields'][field.longname] = this[fieldName];\n                            break;\n\n                        default:\n                            if ((this[fieldName] === null) || (this[fieldName] === undefined)) {\n                                recordData['fields'][field.longname] = '';\n                            } else recordData['fields'][field.longname] = this[fieldName];\n                            break;\n                    }\n                }\n\n\n            }\n        };\n\n        return JSON.stringify(recordData);\n\n    }\n\n\n    /**\n     * Retrieve a record from 4D and populates the Data Model.\n     *\n     * @param recordNumber the record # to retrieve (optional, it defaults to the currentRecordNumber property)\n     * @param recordID primary key value for the record to retrieve (optional, it defaults to the currentRecordNumber property)\n     *    if specified the record is retrieved by querying on its primary key field\n     * @param query query string for the record to retrieve (optional, it defaults to the currentRecordNumber property)\n     * \n     * @returns returns a Promise for the database operation, whose result is the FourDModel instance\n     *\n     *\n     */\n    public getRecord(recordNumber: number = null, recordID: string = null, query: FourDQuery = null): Promise<FourDModel> {\n        if (query) {\n            // if we have a query, use it...\n        } else if (recordID && FourDInterface.fourdAPIVersion < '1.18.06.17a') { // get record using its record ID\n            // build query for record\n            if (!this.primaryKey_) {\n                // uh-oh no primary key field for this record, duh!\n                alert('No Primary Key specified for ' + this.tableName);\n            } else {\n                // getting a record based on its primary key\n                query = { query: [this.tableName + '.' + this.primaryKey_ + ';=;' + recordID] }; // build query on record id\n            }\n\n        } else if (recordNumber >= 0 || this.recordNumber >= 0 || (recordID && FourDInterface.fourdAPIVersion >= '1.18.06.17a' && this.primaryKey_)) {\n            // if we have a record number, use it directly then\n            if (recordNumber >= 0) { this.recordNumber = recordNumber; }\n\n            // build request body with record number to retrieve\n            const body: any = { Username: FourDInterface.currentUser };\n            body.TableName = this.tableName;\n            if (recordID) {\n                body.RecordID = recordID; // if querying record using record ID...             \n            } else {\n                body.RecordNum = this.recordNumber;\n            }\n            body.VariablesList = Base64.encode(Utf8.utf8encode(this.getColumnListJSON()));\n\n            return new Promise((resolve, reject) => {\n                // const me = this;\n                this.fourD.call4DRESTMethod('REST_LoadData', body)\n                    .subscribe(resultJSON => {\n                        this.clearRecord();\n                        this.populateModelData(resultJSON);\n                        this.clearRecordDirtyFlag();\n                        resolve(this);\n                    },\n                        error => {\n                            console.log('error:' + JSON.stringify(error));\n                            reject(error);\n                        });\n            });\n\n        } else { \n            return new Promise((resolve, reject) => {\n                reject('No current record number set, and no query specified!');\n            });\n\n        }\n\n        const theModel: any = this.constructor.valueOf();\n        const records: FourDCollection = new FourDCollection();\n        records.model = theModel;\n        const me = this;\n\n        // first we send to query to 4D to get all records that match the query criteria\n        // then if at lest 1 record is returned by 4D, we use it's record number to refresh to complete record contents\n        return new Promise((resolve, reject) => {\n            records.getRecords(query, [this.primaryKey_])\n                .then((reclist) => {\n                    if (records.models.length > 0) {\n                        me.recordNumber = records.models[0].recordNumber; // set the record number and refresh it\n                        me.refresh().then((rec) => { rec.clearRecordDirtyFlag(); resolve(me); }).catch((error) => { reject(error); });\n                    } else { reject('recordNotFound'); }\n                })\n                .catch((error) => { reject(error); });\n        });\n\n\n    }\n\n    /**\n     * Refresh current record, grab a fresh copy from 4D\n     *\n     * @returns returns a Promise for the database operation, whose result is the FourDModel instance\n     *\n     */\n    public refresh(): Promise<FourDModel> {\n        if (this.recordNumber >= 0) {\n            return this.getRecord(this.recordNumber);\n        } else {\n            return new Promise((resolve, reject) => {\n                reject('No current record number set!');\n            });\n        }\n\n    }\n\n\n    /**\n     * Insert a new record in the database.\n     *\n     * @returns returns a Promise for the database operation, whose result is the FourDModel instance. <p><i>the primary key property is set after the record is inserted</i></p>\n     *\n     */\n    public insertRecord(): Promise<string> {\n        const body: any = { Username: FourDInterface.currentUser };\n        body.TableName = this.tableName;\n        body.RecordNum = this.recordNumber;\n        if (this.fourdSaveCallbackMethod_) { body.CallBackMethod = this.fourdSaveCallbackMethod_; }\n        body.Action = 'add';\n        body.RecordData = Base64.encode(Utf8.utf8encode(this.recordToJSON('add', false)));\n\n        return new Promise((resolve, reject) => {\n            const me = this;\n            this.fourD.call4DRESTMethod('REST_PostData', body)\n                .subscribe(resultJSON => {\n                    if (resultJSON.returnCode === 'OK') {\n                        // insert record went OK, retrieve calculated return code & record ID\n                        me.recordNumber = resultJSON['recordNum'];\n                        if (me.primaryKey_ && me.primaryKey_ !== '') { me[me.primaryKey_] = resultJSON['recordID']; }\n                        me.clearRecordDirtyFlag(); // clean up modified fields\n                        resolve(<any>me);\n                    } else { reject(resultJSON.returnCode); }\n                },\n                    error => {\n                        console.log('error:' + JSON.stringify(error));\n                        reject(error.text());\n                    });\n        });\n\n\n    }\n\n    /**\n     * Update record in the database.\n     *\n     * @returns returns a Promise for the database operation, whose result is the FourDModel instance\n     *\n     */\n    public updateRecord(): Promise<string> {\n        if (this.recordNumber >= 0) {\n            if (this.recordIsDirty()) { // make sure we do have dirty fields to update\n                const body: any = { Username: FourDInterface.currentUser };\n                body.TableName = this.tableName;\n                body.RecordNum = this.recordNumber;\n                if (this.fourdSaveCallbackMethod_) { body.CallBackMethod = this.fourdSaveCallbackMethod_; }\n                body.Action = 'update';\n                body.RecordData = Base64.encode(Utf8.utf8encode(this.recordToJSON('update', false)));\n    \n                return new Promise((resolve, reject) => {\n                    const me = this;\n                    this.fourD.call4DRESTMethod('REST_PostData', body)\n                        .subscribe(resultJSON => {\n                            if (resultJSON.returnCode === 'OK') {\n                                // update record went OK\n                                me.clearRecordDirtyFlag(); // clean up modified fields\n                                resolve(<any>me);\n                            } else { reject(resultJSON.returnCode); }\n                        },\n                            error => {\n                                console.log('error:' + JSON.stringify(error));\n                                reject(error);\n                            });\n                });\n                \n            } else {\n                return new Promise((resolve, reject) => {\n                    resolve(<any>this);;\n                });\n            }\n\n\n        } else {\n            return new Promise((resolve, reject) => {\n                reject('No current record number set!');\n            });\n        }\n    }\n\n    /**\n     * Delete record from the database\n     *\n     * @param cascade true|false indicates if 4D should perform a cascade delete (optional, default=false)\n     *\n     * @returns returns a Promise for the database operation, whose result is the FourDModel instance\n     *\n     */\n    public deleteRecord(cascade: boolean = false): Promise<string> {\n        if (this.recordNumber >= 0) {\n            const body: any = { Username: FourDInterface.currentUser };\n            body.TableName = this.tableName;\n            body.RecordNum = this.recordNumber;\n            if (this.fourdDeleteCallbackMethod_) { body.CallBackMethod = this.fourdDeleteCallbackMethod_; }\n            body.Action = 'delete';\n            if (cascade) { body.cascadeDelete = cascade; }\n\n            return new Promise((resolve, reject) => {\n                const me = this;\n                this.fourD.call4DRESTMethod('REST_PostData', body)\n                    .subscribe(resultJSON => {\n                        if (resultJSON.returnCode === 'OK') {\n                            // delete record went OK\n                            resolve(<any>me);\n                        } else { reject(resultJSON.returnCode); }\n                    },\n                        error => {\n                            console.log('error:' + JSON.stringify(error));\n                            reject(error);\n                        });\n            });\n\n\n\n        } else {\n            return new Promise((resolve, reject) => {\n                reject('No current record number set, and no query specified!');\n            });\n        }\n\n    }\n\n    /**\n     * Populates model with attributes/properties from a json Object\n     *\n     *  @param recordData json object whose properties will be used to populate the Data Model\n     */\n    public populateModelData(recordData: any) {\n        if (recordData.hasOwnProperty('_recnum')) { this.recordNumber = recordData['_recnum']; }\n        for (const field in recordData) {\n            if (field !== '_recnum' && this.getFieldProperties(field)) {\n                switch (this.getFieldProperties(field).type ) {\n                    case 'json':\n                        this[field] = (recordData[field] && recordData[field] != '')?JSON.parse(recordData[field]):{}; \n                        break;\n                    \n                    case 'string':\n                    case 'text':\n                        if (recordData[field]) {\n                            this[field] = recordData[field];\n                        } else {\n                            this[field] = ''; // if we get a null value for a text field, set it as blank!\n                        }\n                        break;\n                                \n                    case 'number':\n                        if (recordData[field]) {\n                            this[field] = recordData[field];\n                        } else {\n                            this[field] = 0; // if we get a null value for a number field, set it as zero!\n                        }\n                        break;\n                                \n                    case 'boolean':\n                        if (recordData[field]) {\n                            this[field] = recordData[field];\n                        } else {\n                            this[field] = false; // if we get a null value for a boolean field, set it as false!\n                        }\n                        break;\n                \n                    default:\n                        this[field] = recordData[field];\n                        break;\n                }\n            }\n        }\n\n    }\n\n    public extractModelData(): any {\n        let data = { _recnum: this._recnum };\n        for (const field of this.fields) {\n            data[field.name] = this[field.name];\n        }\n\n        return data;\n    }\n\n    /**\n     * Retrieves a list of records using a query string\n     *\n     *  @param query the FourDQuery object that defines the query to be used for retrieving from 4D\n     * \t@param columns custom column list to retrieve, JSON array of the columns to retrieve. <p>if informed, only the columns listed will be retrieved instead of the whole record</p>\n     * \t@param startRec the starting record number to retrieve, used for paging.\n     * \t@param numOfRecords the number of records to retrieve, the default -1 will retrieve all records in the resulting query.\n     *  @param filter optional, FourDQuery to further filter records to he retrieved\n     *  @param orderby optional order By clause to retrieve records in a set order. <p> in the format:</p><p>    &gt;table.field : to sort records by table.field in ascending order</p><p>    &lt;table.field : to sort records by table.field in descending order</p>\n     *\n     *\n     * @returns returns a Promise for the database operation, whose result is a FourDCollection with the query results\n     */\n    public getRecords(query: FourDQuery = null,\n        columns: Array<string> = null,\n        startRec: number = 0, numOfRecords: number = -1,\n        filter: string = null,\n        orderby: string = null): Promise<FourDCollection> {\n        const theModel: any = this.constructor.valueOf();\n        const records: FourDCollection = new FourDCollection();\n        records.model = theModel;\n        return new Promise((resolve, reject) => {\n            records.getRecords(query, (columns) ? columns : this.getColumnList(), startRec, numOfRecords, filter, orderby)\n                .then((reclist) => { resolve(records); })\n                .catch((error) => { reject(error); });\n        });\n\n    }\n\n    /**\n     * Retrieves a set of variables or 4D execute formula values\n     * \n     * @param values an Array of objects with the following format: {formula: 'a 4d formula', value:'the resulting value returned by 4D'}\n     * @param method the name of a 4D method to be called before processing the formulas\n     *\n     * @returns returns a Promise for the database operation, whose result is the values Array populated by 4D\n     */\n    public getValuesFrom4D(values: Array<any>, method: string = ''): Promise<Array<any>> {\n        const body: any = { VariablesList: Base64.encode(Utf8.utf8encode(JSON.stringify(values))) };\n        if (method && method != '') {\n            body.CallbackMethod = method;\n        }\n        return new Promise((resolve, reject) => {\n            // const me = this;\n            this.fourD.call4DRESTMethod('REST_GetValues', body)\n                .subscribe(result => {\n                    resolve(result);\n                },\n                    error => {\n                        console.log('error:' + JSON.stringify(error));\n                        reject(error);\n                    });\n        });\n\n    }\n    /**\n     * Get the current record's record number\n     * \n     *  @returns current record number (4D's record number, equivalent to ROWID)\n     *\n     */\n    public get recordNumber(): number {\n        return this._recnum;\n    }\n    public set recordNumber(v: number) { this._recnum = v; }\n\n    /**\n     * Checks to see if a record is currently loaded\n     *\n     * @returns true if a record is loaded into this FourDModel instance\n     *\n     */\n    public isRecordLoaded(): boolean {\n        return (this.recordNumber >= 0);\n    }\n\n\n    /**\n     * Clears record modified flag.\n     * \n     * This can be used when one changes a record programmatically, but does not want to set the record modified flag.\n     * For example on record initialization.\n     *\n     */\n    public clearRecordDirtyFlag() {\n        this._modified = {};\t\t\t\t\t// clear modified fields list\n    }\n\n\n    /**\n     * Check if current record has been modified.\n     *\n     * @returns true indicates that record contents have been modified.\n     *\n     */\n    public recordIsDirty(): boolean {\n        for (const field of this.fields) {\n            if (this._modified.hasOwnProperty(field.name)) { return true; }\n        }\n        return false;\n    }\n\n\n    /**\n     * Prepares the record's JSON field description to send to 4D\n     * \n     * @returns JSON string representing all fields in the Data Model\n     */\n    public getColumnListJSON(): string {\n        const colList: Array<any> = [];\n        const fields: Array<IFieldDescription> = this.fields;\n        for (const col of fields) {\n            if (col.formula) {\n                colList.push({ name: col.name, formula: col.formula });\n            } else if (col.subTable) {\n                const subFields: Array<any> = [];\n                for (const sub of col.subTable.fields) {\n                    if (sub.formula) { // add support for formulas in subfields\n                        subFields.push({ name: sub.name, formula: sub.formula });\n                    } else {\n                        subFields.push({ name: sub.name, field: sub.longname });\n                    }\n                };\n                colList.push({\n                    name: col.name,\n                    subTable: col.subTable.tableName,\n                    joinFK: col.joinFK,\n                    joinPK: col.joinPK,\n                    subFields: subFields\n                });\n\n            } else if (col.longname) { colList.push({ name: col.name, field: col.longname }); }\n        }\n\n        return JSON.stringify(colList);\n\n    }\n\n    /**\n     * Gets a list of fields in the Data Model\n     * \n     * @param includeSubTables if 'true', includes fields in subtables defined in the Data Model\n     * \n     * @returns an array with all fields defined for this data model\n     */\n    public getColumnList(includeSubTables: boolean = false): Array<any> {\n        const cols: Array<any> = [];\n        const fields: Array<IFieldDescription> = this.fields;\n        for (const col of fields) {\n            if (!this.isSubtable(col) || includeSubTables) {\n                if (col.formula) {\n                    cols.push(col);\n                } else { cols.push(col.name); }\n            }\n        };\n        return cols;\n    }\n\n    /**\n     * Returns a field's longname, given its field name\n     * \n     * @param fieldName the field name\n     * \n     * @returns the field dot longname, as 'table.field'\n     */\n    public getLongname(fieldName: string): string {\n        for (const field of this.fields) {\n            if (field.name === fieldName) { return field.longname; }\n        }\n\n        // not found, assume table.field\n        return this.tableName + '.' + fieldName;\n    }\n\n    // -----------------------\n    // Private methods\n    // -----------------------\n\n    /**\n     * Returns a field's data model description\n     * \n     * @param fieldName the field name\n     * \n     * @returns the field's iFieldDescription\n     */\n    private getFieldDescription(fieldName: string): IFieldDescription {\n        for (const field of this.fields) {\n            if (field.name === fieldName) { return field; }\n        }\n\n        return null;\n    }\n\n    /**\n     * Checks to see if a field is from a related table\n     *\n     * @param field field description for the Class definition\n     * @return true if field is on a related table\n     *\n     */\n    private isRelatedField(field: IFieldDescription): boolean {\n        return field.isrelated;\n    }\n\n    /**\n     * Checks to see if a field contents have been modified\n     *\n     * @param field field/property name\n     * @returns true if field has been modified\n     *\n     */\n    private isModifiedField(field: string): boolean {\n        return this._modified.hasOwnProperty(field);\n    }\n\n    /**\n     * Checks to see if a field is a calculated field\n     *\n     * @param field field description from the Data Model\n     * \n     * @returns true if field is formula, a calculated field\n     *\n     */\n    private isCalculatedField(field: IFieldDescription): boolean {\n        return (field.formula !== undefined);\n    }\n\n    /**\n     * Checks to see if a field is a related many subtable\n     *\n     * @param field field description from the Data Model\n     * @returna true if field is a related many subtable\n     *\n     */\n    private isSubtable(field: IFieldDescription): boolean {\n        return (field.subTable !== undefined);\n    }\n\n    /**\n     * Checks to see if a field is read only\n     *\n     * @param field field description from the Data Model\n     * @returns true if field is read only\n     *\n     */\n    private isReadOnly(field: IFieldDescription): boolean {\n        return field.readonly;\n    }\n\n\n\n}\n\n","// angular\nimport { NgModule } from '@angular/core';\nimport { HttpClient, HttpClientModule } from '@angular/common/http';\n\nimport { FourDInterface } from './js44D/JSFourDInterface';\nimport { FourDModel } from './js44D/JSFourDModel';\nimport { FourDCollection } from './js44D/JSFourDCollection';\n\n@NgModule({\n      imports: [HttpClientModule],\n      providers: [HttpClient, FourDInterface, FourDModel, FourDCollection],\n      exports: [HttpClientModule]\n})\nexport class FourDModule { }\n","import { Directive, Component, EventEmitter, ElementRef, ContentChild, Input, Output } from '@angular/core';\n\n@Directive({\n    selector: 'queryband'\n})\nexport class QueryBandDirective {\n    /**\n     * Get access to the embedded custom query band\n     */\n    @ContentChild('customQueryBand') theCustomQuery: any;\n\n}\n@Directive({\n    selector: 'custombuttonbar'\n})\nexport class CustomButtonBarDirective { }\n\n\n@Component({\n    selector: 'query-band',\n    template: `\n    <div class=\"btn-group btn-group-md query-band\">\n        <div style=\"display:inline-block\">\n            <a role=\"button\" class=\"btn\" (click)=\"switchState()\"><span class=\"glyphicon\" [ngClass]=\"openStateIcon\"></span></a>\n            <a role=\"button\" class=\"btn\" [ngClass]=\"enableButton('QBE')\" (click)=\"doQBE()\"><span class=\"quickFinder-icon quickFinder-query-icon\" title=\"advanced query\"></span></a>\n            <a role=\"button\" class=\"btn\" [ngClass]=\"enableButton('QFF')\" (click)=\"doQFF()\"><span class=\"quickFinder-icon quickFinder-qff-icon\" title=\"query using a text file\"></span></a>\n            <a role=\"button\" class=\"btn\" [ngClass]=\"enableButton('Sets')\" (click)=\"toggleDropDown()\"><span class=\"quickFinder-icon quickFinder-manageSets-icon\" title=\"search sets management\"></span></a>\n                <ul #dropDownMenu class=\"dropdown-menu\" [ngStyle]=\"{'display': dropDownIsOpen}\">\n                    <li role=\"menuitem\"><a class=\"dropdown-item\" (click)=\"doManageSets('selectHighlited')\">Select Highlighted</a></li>\n                    <li class=\"divider dropdown-divider\"></li>\n                    <li role=\"menuitem\"><a class=\"dropdown-item\" (click)=\"doManageSets('reuseSearch')\">Reuse a Saved Search</a></li>\n                    <li role=\"menuitem\"><a class=\"dropdown-item\" (click)=\"doManageSets('restoreSet')\">Restore a Saved Record Set</a></li>\n                    <!-- <li role=\"menuitem\"><a class=\"dropdown-item\" (click)=\"doManageSets('combineSearches')\">Combine Searches</a></li> -->\n                    <li class=\"divider dropdown-divider\"></li>\n                    <li *ngIf=\"doWehaveAQuery()\" role=\"menuitem\"><a class=\"dropdown-item\" (click)=\"doManageSets('saveSearch')\">Save Current Search</a></li>\n                    <li role=\"menuitem\"><a class=\"dropdown-item\" (click)=\"doManageSets('saveSet')\">Save Record Set</a></li>\n                    <li class=\"divider dropdown-divider\"></li>\n                    <li role=\"menuitem\"><a class=\"dropdown-item\" (click)=\"doManageSets('manageSearches')\">Manage Saved Searches</a></li>\n                    <li role=\"menuitem\"><a class=\"dropdown-item\" (click)=\"doManageSets('manageSets')\">Manage Saved Sets</a></li>\n                </ul>\n            <a role=\"button\" class=\"btn\" (click)=\"doRefresh()\"><span class=\"quickFinder-icon quickFinder-refresh-icon\" title=\"refresh query\"></span></a>\n            <!-- <a role=\"button\" class=\"btn\" [ngClass]=\"enableButton('Sort')\" (click)=\"doSort()\"><span class=\"quickFinder-icon quickFinder-sort-icon\" title=\"multi-column sort\"></span></a> -->\n            <a role=\"button\" class=\"btn\" (click)=\"doClear()\"><span class=\"quickFinder-icon quickFinder-clear-icon\" title=\"clear query form\"></span></a>\n            <a role=\"button\" class=\"btn\" [ngClass]=\"enableButton('Export')\" (click)=\"doExportGrid()\"><span class=\"quickFinder-icon quickFinder-export-icon\" title=\"export grid data\"></span></a>\n        </div>\n\n        <div class=\"custom-button-bar\">\n            <ng-content select=\"custombuttonbar\"></ng-content>\n            <button type=\"button\" class=\"regularButton mat-raised-button mat-primary\" color=\"primary\" style=\"width:70px;margin-left: 5px;\" (click)=\"doAddRecord()\" [ngClass]=\"enableButton('ADD')\">Add</button>\n            <button type=\"button\" class=\"regularButton mat-raised-button mat-primary\" color=\"primary\" style=\"width:70px;margin-left: 5px;\" (click)=\"doEditRecord()\" [ngClass]=\"enableButton('EDIT')\">Edit</button>\n            <button type=\"button\" class=\"regularButton mat-raised-button mat-warn\" color=\"warn\" style=\"width:70px;margin-left: 5px;\" (click)=\"doDeleteRecord()\" [ngClass]=\"enableButton('DEL')\">Delete</button>\n        </div>\n    </div>\n    <div [hidden]=\"!queryBandIsOpen\" class=\"custom-query-band\">\n        <ng-content select=\"queryband\"></ng-content>\n    </div>\n\n    `,\n    styles: [`\n    .quickFinder-icon {\n        border-color: transparent;\n        width: 24px;\n        height: 24px;\n        display:inline-block;\n    }\n    \n    .hidden {\n        display:none;\n    }\n       \n    .query-band {\n        width:100%;\n        padding-top:5px;\n        height:40px;\n    }\n\n    .custom-query-band {\n        margin-bottom:10px;\n        margin-left:5px;\n        margin-top:5px;\n        padding: 5px;\n        border: 2px;\n        border-style: groove;\n        border-radius: 5px;\n    }\n\n    .custom-button-bar {\n        position:absolute;\n        right:20px;\n    }\n    `]\n})\n\nexport class QueryBand {\n\n    /**\n     * enable QBE button, default is true\n     **/\n    @Input() public enableQBE = true;\n\n    /**\n     * enable QFF (query from file) button, default is false\n     **/\n    @Input() public enableQFF = false;\n\n    /**\n     * enable Save/Load Searches/Set buttons, default is true\n     **/\n    @Input() public enableSETS = true;\n\n    /**\n     * enable Combine Searches buttons, default is true\n     **/\n    @Input() public enableCombiSearch = true;\n\n    /**\n     * enable Multicolumn Sort button, default is false\n     **/\n    @Input() public enableSort = false;\n\n    /**\n     * enable Export To Excel button, default is true\n     **/\n    @Input() public enableExportGrid = true;\n\n    /**\n     * Enable Record Edit Button bar, default is false\n     */\n    @Input() public enableButtonBar = false;\n\n    /**\n     * Enable Add record button, default is false\n     */\n    @Input() public enableAddRecord = false;\n\n    /**\n     * Enable Edit record button, default is true\n     */\n    @Input() public enableEditRecord = true;\n\n    /**\n     * Enable Delete record button, default is false\n     */\n    @Input() public enableDeleteRecord = false;\n\n    /**\n     * Cascade Delete record if Delete is enabled, default is false\n     */\n    @Input() public cascadeDeleteRecord = false;\n\n    //\n    // Events emitted by the QueryBand\n    //\n    @Output() queryFromQBE: EventEmitter<any> = new EventEmitter();\n    @Output() queryFromFile: EventEmitter<any> = new EventEmitter();\n    @Output() queryRefresh: EventEmitter<any> = new EventEmitter();\n    @Output() querySortGrid: EventEmitter<any> = new EventEmitter();\n    @Output() queryExportGrid: EventEmitter<any> = new EventEmitter();\n\n    @Output() queryManageSets: EventEmitter<any> = new EventEmitter();\n\n    //\n    // Events emitted by the QueryBand's Button Bar\n    //\n    @Output() queryAddRecord: EventEmitter<any> = new EventEmitter();\n    @Output() queryEditRecord: EventEmitter<any> = new EventEmitter();\n    @Output() queryDeleteRecord: EventEmitter<any> = new EventEmitter();\n\n    //\n    // Internal variables\n    //\n    public openStateIcon = 'glyphicon-triangle-right';\n\n    public queryBandIsOpen = false;\n\n    public dropDownIsOpen = 'none';\n\n    /**\n     * Get access to the embedded custom query band\n     */\n    @ContentChild(QueryBandDirective) theQueryBand: any;\n\n    constructor(private elementRef: ElementRef) {\n    }\n\n\n    public switchState() {\n        this.queryBandIsOpen = !this.queryBandIsOpen;\n        this.openStateIcon = (this.queryBandIsOpen) ? 'glyphicon-triangle-bottom' : 'glyphicon-triangle-right';\n    }\n\n    public enableButton(btn: string): string {\n        switch (btn) {\n            case 'QBE':\n                return (this.enableQBE) ? '' : 'hidden';\n\n            case 'QFF':\n                return (this.enableQFF) ? '' : 'hidden';\n\n            case 'Sets':\n                return (this.enableSETS) ? '' : 'hidden';\n\n            case 'Sort':\n                return (this.enableSort) ? '' : 'hidden';\n\n            case 'Export':\n                return (this.enableExportGrid) ? '' : 'hidden';\n\n            case 'ADD':\n                return (this.enableButtonBar && this.enableAddRecord) ? '' : 'hidden';\n\n            case 'EDIT':\n                return (this.enableButtonBar && this.enableEditRecord) ? '' : 'hidden';\n\n            case 'DEL':\n                return (this.enableButtonBar && this.enableDeleteRecord) ? '' : 'hidden';\n        }\n\n        return '';\n    }\n\n    public doQBE() {\n        this.queryFromQBE.emit();\n    }\n\n    public doQFF() {\n        this.queryFromFile.emit(null);\n    }\n\n    public toggleDropDown() {\n        this.dropDownIsOpen = (this.dropDownIsOpen === 'none')?'block':'none';\n    }\n\n    public doManageSets(action) {\n        this.dropDownIsOpen = 'none';\n        this.queryManageSets.emit(action);\n    }\n\n    public doRefresh() {\n        if (this.theQueryBand.theCustomQuery) { this.queryRefresh.emit(this.theQueryBand.theCustomQuery.currentQuery); }\n    }\n\n    public doSort() {\n        this.querySortGrid.emit(null);\n    }\n\n    public doClear() {\n        if (this.theQueryBand.theCustomQuery.clearQueryForm) { // if a clearForm method exists in the custome query band\n            this.theQueryBand.theCustomQuery.clearQueryForm(); // call it to clear the query form\n        } else {\n            // if no clear form method exists, use DOM reset form function\n            const theForm: any = this.elementRef.nativeElement.getElementsByTagName('form');\n            if (theForm && theForm.length > 0) { theForm[0].reset(); }\n        }\n    }\n\n    public doExportGrid() {\n        this.queryExportGrid.emit(null);\n    }\n\n    public doAddRecord() {\n        this.queryAddRecord.emit(null);\n    }\n\n    public doEditRecord() {\n        this.queryEditRecord.emit(null);\n    }\n\n    public doDeleteRecord() {\n        this.queryDeleteRecord.emit(null);\n    }\n\n    public doWehaveAQuery(): boolean {\n        return (this.theQueryBand.theCustomQuery.currentQuery && this.theQueryBand.theCustomQuery.currentQuery !== '');\n    }\n}\n","import { ComponentRef, Injectable } from '@angular/core';\n\n\nclass Deferred<T> {\n\n    promise: Promise<T>;\n    resolve: (value?: T | PromiseLike<T>) => void;\n    reject: (reason?: any) => void;\n\n    constructor() {\n        this.promise = new Promise<T>((resolve, reject) => {\n            this.resolve = resolve;\n            this.reject = reject;\n        });\n    }\n}\n/**\n * API to an open modal window.\n */\n@Injectable()\nexport class ModalDialogInstance {\n    contentRef: ComponentRef<any>;\n\n    kendoDialog: any;\n    /**\n     * States if the modal is inside a specific element.\n     */\n    public inElement: boolean;\n\n    private _bootstrapRef: ComponentRef<any>;\n    private _backdropRef: ComponentRef<any>;\n    private _resultDefered: any;\n\n    constructor() {\n        this._resultDefered = new Deferred(); // PromiseWrapper.completer();\n    }\n\n    set backdropRef(value: ComponentRef<any>) {\n        this._backdropRef = value;\n    }\n    set bootstrapRef(value: ComponentRef<any>) {\n        this._bootstrapRef = value;\n    }\n\n    /**\n     * A Promise that is resolved on a close event and rejected on a dismiss event.\n     * @returns Promise<T>|any|*|Promise<any>\n     */\n    get result(): Promise<any> {\n        return this._resultDefered.promise;\n    }\n\n    /**\n     * set the dialog title\n     */\n    setTitle(title: string) {\n        const dialog = $(this.contentRef.location.nativeElement).data('kendoWindow');\n        dialog.title(title);\n    }\n\n    /**\n     * before dismiss function, which is called when user closes the dialog\n     * \n     * @returns true, to proceed wih the dialog close, or \n     */\n    public set beforeDismiss(v:Function) {\n        this.contentRef.instance.beforeDismiss = v;\n    }\n    public get beforeDismiss():Function {\n        return this.contentRef.instance.beforeDismiss;\n    }\n    \n    /**\n     *  Close the modal with a return value, i.e: result.\n     */\n    close(result: any = null) {\n        if (this.contentRef && this.contentRef.instance) {\n            if (this.contentRef.instance.beforeClose &&\n                this.contentRef.instance.beforeClose() === true) { return; }\n            //        this.dispose();\n            const dialog = $(this.contentRef.location.nativeElement).data('kendoWindow');\n            dialog.close();\n        }\n        this._resultDefered.resolve(result);\n    }\n\n    /**\n     *  Close the modal without a return value, i.e: cancelled.\n     *  This call is automatically invoked when a user either:\n     *  - Presses an exit keyboard key (if configured).\n     *  - Clicks outside of the modal window (if configured).\n     *  Usually, dismiss represent a Cancel button or a X button.\n     */\n    dismiss() {\n        if (this.contentRef.instance.beforeDismiss &&\n            this.contentRef.instance.beforeDismiss() === true) { return; }\n//        this.dispose();\n        const dialog = $(this.contentRef.location.nativeElement).data('kendoWindow');\n        dialog.close();\n        this._resultDefered.reject();\n    }\n\n    private dispose() {\n        if (this._bootstrapRef) { this._bootstrapRef.destroy(); }\n        if (this._backdropRef) { this._backdropRef.destroy(); }\n        if (this.contentRef) { this.contentRef.destroy(); }\n    }\n}\n\n","import { Component, ElementRef, ViewContainerRef, AfterViewInit, Input } from '@angular/core';\n\nimport { ModalDialogInstance } from '../angular2-modal/models/ModalDialogInstance';\nimport { ICustomModal } from '../angular2-modal/models/ICustomModal';\nimport { ICustomModalComponent } from '../angular2-modal/models/ICustomModalComponent';\nimport { ModalConfig } from '../angular2-modal/models/ModalConfig';\nimport { FourDInterface } from '../js44D/JSFourDInterface';\n\n@Component({\n    selector: 'advanced-query',\n    templateUrl: 'advancedQuery.html',\n    styles: [`\n    /* Main Navigation */\n    \n     \n    ul#navigation {\n        margin:0px auto;\n        position:relative;\n        float:left;\n    }\n     \n    ul#navigation li {\n        display:inline;\n        float:left;\n    \n    }\n     \n    ul#navigation li h5 {\n        padding:5px 5px 5px 15px;\n        display:inline-block;\n        margin: 5px 0 0 0;\n        width: 100%;\n    }\n     \n    ul#navigation li h5:hover {\n        background:#f8f8f8;\n        color:#282828;\n    }\n     \n    \n     \n    ul#navigation li:hover > a {\n        background:#fff;\n    }\n    /* Drop-Down Navigation */\n    ul#navigation li:hover > ul\n    {\n    /*these 2 styles are very important,\n    being the ones which make the drop-down to appear on hover */\n        visibility:visible;\n        opacity:1;\n    }\n     \n    ul#navigation ul, ul#navigation ul li ul {\n        list-style: none;\n        margin-left: 10px;\n        padding: 0;\n    /*the next 2 styles are very important,\n    being the ones which make the drop-down to stay hidden */\n        visibility:hidden;\n        opacity:0;\n        position: absolute;\n        z-index: 99999;\n        width:180px;\n        background:#ddd;\n        box-shadow:1px 1px 3px #ccc;\n    /* css3 transitions for smooth hover effect */\n        -webkit-transition:opacity 0.2s linear, visibility 0.2s linear;\n        -moz-transition:opacity 0.2s linear, visibility 0.2s linear;\n        -o-transition:opacity 0.2s linear, visibility 0.2s linear;\n        transition:opacity 0.2s linear, visibility 0.2s linear;\n    }\n     \n    ul#navigation ul {\n        top: 25px;\n        left: 10px;\n    }\n     \n    ul#navigation ul li ul {\n        top: 0;\n        left: 181px; /* strong related to width:180px; from above */\n    }\n     \n    ul#navigation ul li {\n        clear:both;\n        width:100%;\n        border:0 none;\n        border-bottom:1px solid #c9c9c9;\n    }\n        \n    `]\n})\n\nexport class AdvancedQueryComponent implements ICustomModalComponent, AfterViewInit {\n    public static dialogConfig: ModalConfig = <ModalConfig>{\n        size: 'sm',\n        selfCentered: true,\n        isResizable: false,\n        isModal: true,\n        isBlocking: true,\n        title: 'Advanced Query',\n        width: 570, height: 100\n    };\n\n    @Input() public fieldList: Array<any> = [];\n    @Input() public comparatorList = ['=', '!=', '>', '>=', '<', '<=', 'begins with', 'contains', 'ends with'];\n    @Input() public queryFieldList = [{ id: 'query0', field: { type: 'string', name: '' }, comparator: '=', value: '', connector: 'And', queryTable: '', listOfFields: this.fieldList }];\n    @Input() public relatedOneTables = [];\n\n    private currentTable = '';\n    private windowHeight = 100;\n    private windowWidth = 570;\n\n    public set modelContentData(v: any) {\n        this.fieldList = [];\n        v.model.fields.forEach(field => {\n            if (!field.related && field.longname && field.longname !== '') { this.fieldList.push(field) }\n        });\n        this.currentTable = v.model.tableName;\n        if (v.previousQuery) {\n            this.queryFieldList = v.previousQuery;\n        } else {\n            this.queryFieldList = [{ id: 'query0', field: { type: 'string', name: '' }, comparator: '=', value: '', connector: 'And', queryTable: '', listOfFields: this.fieldList }];\n        }\n        this.relatedOneTables = [this.currentTable];\n        for (let index = 0; index < this.fieldList.length; index++) {\n            const element = this.fieldList[index];\n            if (element.relatesTo && element.relatesTo !== '') {\n                this.relatedOneTables.push(element.relatesTo.split('.')[0]);\n            }\n\n        }\n    }\n\n    constructor(private fourD: FourDInterface, public dialog: ModalDialogInstance) { }\n\n\n    ngAfterViewInit() {\n        this.dialog.setTitle('Advanced Query: ' + this.currentTable);\n        this.windowHeight += 35 * (this.queryFieldList.length - 1);\n        this.windowWidth = (this.queryFieldList.length > 1) ? 630 : 570;\n        this.dialog.kendoDialog.setOptions({ height: this.windowHeight, width: this.windowWidth });\n    }\n\n    selectField(event, queryField) {\n        if (event.target.selectedIndex > 0) {\n            queryField.field = queryField.listOfFields[event.target.selectedIndex - 1];\n        } else {\n            queryField.field = { type: 'string', name: '' };\n        }\n    }\n\n    isItemSelected(field: any, queryField: any): string {\n        return (queryField.name === field.name) ? 'selected' : '';\n    }\n\n    doQuery() {\n        const queryItems = [];\n        this.queryFieldList.forEach(element => {\n            if (element.field.name !== '' && element.comparator !== '') {\n                const theField: any = element.field;\n                if (element.comparator === '!=') { element.comparator = '#'; }\n                const theValue = (theField.type === 'Date')?element.value.replace(/-/g,''):element.value;\n                queryItems.push(theField.longname + ';' + element.comparator + ';' + theValue + ';' + element.connector);\n            }\n        });\n        this.dialog.close({ query: queryItems, queryFields: this.queryFieldList });\n    }\n\n    moreLines() {\n        const queryID = 'query' + this.queryFieldList.length;\n        this.queryFieldList.push({ id: queryID, field: { type: 'string', name: '' }, comparator: '=', value: '', connector: ' And', queryTable: this.currentTable, listOfFields: this.fieldList }); // add a new query line\n        this.windowHeight += 35;\n        this.windowWidth = (this.queryFieldList.length > 1) ? 630 : 570;\n        this.dialog.kendoDialog.setOptions({ height: this.windowHeight, width: this.windowWidth });\n    }\n\n    lessLines() {\n        this.queryFieldList.pop(); // remove last item\n        this.windowHeight -= 35;\n        this.windowWidth = (this.queryFieldList.length > 1) ? 630 : 570;\n        this.dialog.kendoDialog.setOptions({ height: this.windowHeight, width: this.windowWidth });\n    }\n\n    showRelatedTable(event, queryField: any) {\n        queryField.queryTable = event.target.textContent;\n        this.fourD.call4DRESTMethod('REST_GetFieldsInTable', { TableName: queryField.queryTable })\n            .subscribe(resultJSON => {\n                queryField.listOfFields = resultJSON.fieldList;\n            });\n    }\n}\n","<form>\n    <div *ngFor='let queryField of queryFieldList' style=\"display: inline-flex; margin: 5px; height: 30px;\">\n        <div style=\"align-self: center;\">\n            <nav id=\"nav\">\n                <ul id=\"navigation\">\n                    <li style=\"margin-left: -40px;\">\n                        <h4 href=\"#\" [hidden]=\"relatedOneTables.length < 2\">&raquo;</h4>\n                        <ul>\n                            <li *ngFor='let relatedTable of relatedOneTables'\n                                (click)=\"showRelatedTable($event,queryField)\">\n                                <h5>{{relatedTable}}</h5>\n                            </li>\n                        </ul>\n                    </li>\n                </ul>\n            </nav>\n        </div>\n        <div style=\"margin-left: -25px; align-self: center;\">\n            <select class='fourDDropdown' name=\"queryfieldselect\" (change)='selectField($event,queryField)'\n                [value]=\"queryField.field.name\" style=\"width:250px;height:20px;\">\n                <option value=''></option>\n                <option *ngFor='let field of queryField.listOfFields' [value]='field.name'>{{field.longname}}</option>\n            </select>\n        </div>\n        <div style=\"margin-left: 5px; align-self: center;\">\n            <select name=\"querycomparator\" (change)=\"queryField.comparator = $event.target['value']\"\n                [(ngModel)]='queryField.comparator' style=\"height:20px;\">\n                <option *ngFor='let item of comparatorList' value='{{item}}'>{{item}}</option>\n            </select>\n        </div>\n        <div [ngSwitch]=\"queryField.field.type\" style=\"margin-left: 5px; align-self: center;\">\n            <input *ngSwitchCase=\"'string'\" [name]=\"queryField.id\" type=\"text\" class=\"fieldEntry\"\n                style=\"width:180px;height:20px;\" [(ngModel)]=\"queryField.value\" />\n            <input *ngSwitchCase=\"'Date'\" [name]=\"queryField.id\" type=\"date\" class=\"fieldEntry\"\n                style=\"width:125px;height:20px;\" [(ngModel)]=\"queryField.value\" />\n            <input *ngSwitchCase=\"'time'\" [name]=\"queryField.id\" type=\"time\" class=\"fieldEntry\"\n                style=\"width:100px;height:20px;\" [(ngModel)]=\"queryField.value\" />\n            <input *ngSwitchCase=\"'Time'\" [name]=\"queryField.id\" type=\"time\" class=\"fieldEntry\"\n                style=\"width:100px;height:20px;\" [(ngModel)]=\"queryField.value\" />\n            <input *ngSwitchCase=\"'number'\" [name]=\"queryField.id\" type=\"number\" class=\"fieldEntry\"\n                style=\"width:80px;height:20px;\" [(ngModel)]=\"queryField.value\" />\n            <input *ngSwitchCase=\"'Number'\" [name]=\"queryField.id\" type=\"number\" class=\"fieldEntry\"\n                style=\"width:80px;height:20px;\" [(ngModel)]=\"queryField.value\" />\n            <input *ngSwitchCase=\"'float'\" [name]=\"queryField.id\" type=\"number\" class=\"fieldEntry\"\n                style=\"width:80px;height:20px;\" [(ngModel)]=\"queryField.value\" />\n            <input *ngSwitchCase=\"'boolean'\" [name]=\"queryField.id\" type=\"checkbox\" class=\"fieldEntry\"\n                style=\"width:80px;height:20px;\" [(ngModel)]=\"queryField.value\" />\n            <label *ngSwitchCase=\"'any'\" class=\"fieldEntry\">Can't query on Object fields</label>\n            <label *ngSwitchCase=\"'json'\" class=\"fieldEntry\">Can't query on Object fields</label>\n            <label *ngSwitchCase=\"'blob'\" class=\"fieldEntry\">Can't query on Blob fields</label>\n            <label *ngSwitchCase=\"'Blob'\" class=\"fieldEntry\">Can't query on Blob fields</label>\n            <label *ngSwitchCase=\"'picture'\" class=\"fieldEntry\">Can't query on Picture fields</label>\n        </div>\n        <div style=\"margin-left: 5px; align-self: center;\"\n            [hidden]=\"queryFieldList.length < 2 || queryField.id === 'query0'\">\n            <select (change)='queryField.connector = $event.target[\"value\"]' [value]='queryField.connector'\n                style=\"height:20px;\">\n                <option value='And'>And</option>\n                <option value='Or'>Or</option>\n            </select>\n        </div>\n    </div>\n\n    <div style=\"margin: 10px; width:550px; display: inline-flex;\">\n        <div style=\"flex-grow: 1;\">\n            <button class=\"regularButton mat-raised-button mat-primary\" style=\"width:100px;\"\n                (click)=\"moreLines()\">More...</button>\n            <button class=\"regularButton mat-raised-button mat-primary\" style=\"width:100px;\" (click)=\"lessLines()\"\n                [hidden]=\"queryFieldList.length < 2\">Less...</button>\n        </div>\n        <button class=\"regularButton mat-raised-button mat-primary\" style=\"width:100px;\"\n            (click)=\"doQuery()\">Query</button>\n    </div>\n\n</form>","// ****************************\n// Datagrid Directive \n//    based on kendoui-grid: http://demos.telerik.com/kendo-ui/grid/index\n// ****************************\n\nimport { Component, EventEmitter, ViewChild, AfterViewInit, Input, Output, Inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\n\n\nimport { FourDModel } from '../js44D/JSFourDModel';\nimport { FourDCollection } from '../js44D/JSFourDCollection';\nimport { FourDInterface, FourDQuery } from '../js44D/JSFourDInterface';\nimport { LOCATION_INITIALIZED } from '../../node_modules/@angular/common';\n\n@Component({\n    selector: 'datagrid',\n    template: `\n    <div #theGrid style=\"height:100%;border-width: 0;\">\n    </div>`,\n    providers: [HttpClient, FourDInterface]\n})\n\nexport class DataGrid implements AfterViewInit {\n    //\n    // Declare kendui-grid configuration\n    //\n    /**\n     * Grid columns definition, follows kendo-ui format\n     */\n    @Input() public columns: any[] = [];\n\n    /**\n     * defines if grid rows are selectable\n     */\n    @Input() public selectable = true;\n\n    /**\n     * defines how grid selection should work (defaults to single, row)\n     */\n    @Input() public selectionMode = 'single,row';\n\n    /**\n     * flag to indicate if grid is editable, individual columns can have their own setting (defaults to false)\n     */\n    @Input() public editable = 'false';\n\n    /**\n     * flag to indicate if grid is filterable, individual columns can have their own setting (defaults to true)\n     */\n    @Input() public filterable = true;\n\n    /**\n     * flag to indicate if grid is sortable, individual columns can have their own setting (defaults to true)\n     */\n    @Input() public sortable = { mode: 'multiple', allowUnsort: true, showIndexes: true };\n\n    /**\n     * flag to indicate if the column reordering is enabled (defaults to true)\n     */\n    @Input() public reorderable = true;\n\n    /**\n     * flag to indicate if the column menu should be active for all columns on the grid (defaults to true)\n     */\n    @Input() public columnMenu = true;\n\n    /**\n     * Grid height\n     */\n    @Input() public height = '100%';\n\n    /**\n     * Filename to use when exporting to Excel\n     */\n    @Input() public excelFilename: string = null;\n\n    /**\n     * Various pageable options\n     */\n    /**\n     * enable the paging bar (default true)\n     */\n    @Input() public pageable = true;\n\n    /**\n     * enable refresh button on the paging bar (default true)\n     */\n    @Input() public pageableRefresh = true;\n\n    /**\n     * to display page sizes drop down on the paging toolbar (default true)\n     */\n    @Input() public pageableSizes = true;\n\n    /**\n     * defines max number of buttons to display on the paging toolbar (default 5) \n     */\n    @Input() public pageableButtonCount = 5;\n\n    /**\n     * defines message pattern to display on the paging toolbar\n     */\n    @Input() public pageableMessage = '{0} - {1} of {2} items';\n    @Input() public pageableMessageCustom = { display: this.pageableMessage };\n\n    /**    \n    * the associated data model for the records to be retrieved\n    */\n    @Input() set model(v: FourDModel) { this._model = v; if (this.dataProvider) { this.dataProvider.model = <any>v; } }\n    get model(): FourDModel { return this._model; }\n\n    /**\n     * option to use lazyloading, leaving paging to be done on server side (defaults to true)\n     */\n    @Input() public useLazyLoading = true; // defaults to true\n\n\n    /**\n     * if using a FourDModel, this flag will optimize the loading of data, by bringing only the columns used on the grid\n     * thus avoiding bringing data that is not used on the grid\n     * only meaningful if using a dataClass\n     */\n    @Input() public optimizeGridLoading = false;\n\n    /**\n     * if using lazyloading, define the max # of records to retrieve from 4D\n     */\n    @Input() public pageSize = 50;\n\n    /**\n     * controls if header tooltip is enabled for all column headers\n     * if a column definition includes a 'headerTemplate' or a 'headerAttributes' attribute, then generic header tooltip is disabled\n     * that is to avoid conflict between this generic header tooltip and a possible user defined tooltip\n     */\n    @Input() public enableHeaderTooltip = true;\n\n    /**\n     * Callback function to determine the css class to aply to a row\n     * this functions gets called for each row data, after datagrid row data is set\n     * it must return a string that represents a css class\n     * the function must take 2 arguments:\n     * @rowData: is the row data toc test and validate\n     * @element: is the HTML element, which can be use to set/change attributes\n     * \n     */\n    @Input() public setRowClass: (rowData: any, element:any) => string;\n\n    /**\n     * indicate that the grid should be resized when the browser window resizes (default is true)\n     */\n    @Input() public autoResize = true;\n\n    //\n    // events emitted by the DataGrid\n    //\n    @Output() initialized: EventEmitter<any> = new EventEmitter();\n    @Output() rowSelected: EventEmitter<any> = new EventEmitter();\n    @Output() recordSelected: EventEmitter<any> = new EventEmitter();\n    @Output() loadDataComplete: EventEmitter<any> = new EventEmitter();\n\n    //\n    // private stuff\n    //\n    private _model: FourDModel = null;\n\n    //\n    // this is the datamodel interface to 4D backend\n    //\n    public dataProvider: FourDCollection; // this is the FourDCollection instalce used to bring in records\n\n    //\n    // this is the kendoui grid object\n    //\n    public gridObject: kendo.ui.Grid;\n\n    //\n    // define the dataSource used to populate/handle the grid's interface to 4D\n    //\n    private fourDTransport = {\n        read: (options: kendo.data.DataSourceTransportOptions) => {\n            // console.log(options);\n            const modelDef = <any>(this.model);\n            const newModel: FourDModel = <any>(new modelDef());\n    \n            const start = (options.data.pageSize && options.data.pageSize > 0 && (this.useLazyLoading || this.pageable)) ? options.data.skip : 0;\n            const numrecs = (options.data.pageSize && options.data.pageSize > 0 && (this.useLazyLoading || this.pageable)) ? options.data.pageSize : -1;\n            // now build filter if anything set on the grid\n            let filter = null;\n            if (options.data.filter) {\n                filter = this.parseKendoFilters(options.data.filter); // update code to properly deal with multiple column filters\n            }\n    \n            let gridOrderBy = this.dataProvider.orderBy; // defaults to the Collection Order By\n            // if any sorting set on the grid, rebuild Order By using grid options\n            if (options.data.sort && options.data.sort.length > 0) {\n                gridOrderBy = '';\n                options.data.sort.forEach((item: kendo.data.DataSourceSortItem) => {\n                    gridOrderBy += (item.dir === 'asc') ? '>' : '<';\n                    gridOrderBy += newModel.getLongname(item.field) + '%';\n                });\n            }\n    \n            let query: FourDQuery = this.dataProvider.queryString;\n    \n            if (filter) {\n                if (this.dataProvider.queryString) {\n                    query = { intersection: [query, filter] };\n                } else {\n                    query = filter;\n                }\n            }\n            // let me = this;\n            this.dataProvider.getRecords(query, (this.optimizeGridLoading) ? this.columns : null, start, numrecs, this.dataProvider.filterOptions, gridOrderBy)\n                .then((reclist) => {\n                    let data = [];\n                    reclist.forEach(element => {\n                        data.push(element.extractModelData())\n                    });\n                    options.success(data);\n                    this.resize();\n                    this.loadDataComplete.emit(data.length);\n                });\n    \n        },\n        destroy: (options) => {\n            console.log('delete', options);\n        },\n        update: (options) => {\n            console.log('update', options);\n        },\n        create: (options) => {\n            console.log('create', options);\n        },\n        parameterMap: (options, operation) => {\n            console.log('map', options);\n            if (operation !== 'read' && options.models) {\n                return { models: kendo.stringify(options.models) };\n            } else { return options; }\n        }\n\n    }\n\n    //\n    // parse Kendo Grid filter and generate corresponding 4D Query\n    //\n    private parseKendoFilters(filter:kendo.data.DataSourceFilters):any {\n        const modelDef = <any>(this.model);\n        const newModel: FourDModel = <any>(new modelDef());\n\n        let query:any = null;\n        if (filter.filters && filter.filters.length > 0) { // make sure we do have filters\n            switch (filter.logic) {\n                case 'or':\n                    query = {query:[]}\n                    filter.filters.forEach((item:kendo.data.DataSourceFilterItem) => {\n                        let comparator = '=';\n                        switch (item.operator) {\n                            case 'eq':\n                                comparator = '=';\n                                break;\n                            case 'neq':\n                                comparator = '#';\n                                break;\n                            case 'gte':\n                                comparator = '>=';\n                                break;\n                            case 'gt':\n                                comparator = '>';\n                                break;\n                            case 'lte':\n                                comparator = '<=';\n                                break;\n                            case 'lt':\n                                comparator = '<';\n                                break;\n                            case 'startswith':\n                                comparator = 'begins with';\n                                break;\n                            case 'endswith':\n                                comparator = 'ends with';\n                                break;\n                            case 'isempty':\n                            case 'isnull':\n                                comparator = '=';\n                                item.value = '';\n                                break;\n                            case 'isnotnull':\n                            case 'isnotempty':\n                                comparator = '#';\n                                item.value = '';\n                                break;\n\n                            default:\n                                comparator = <any>item.operator;\n                                break;\n                        }\n                        if (item.value instanceof Date) {\n                            query.query.push(newModel.getLongname(item.field) + ';' + comparator + ';' + this.fourD.dateTo4DFormat(item.value) + ';OR');\n                        } else {\n                            query.query.push(newModel.getLongname(item.field) + ';' + comparator + ';' + item.value + ';OR');\n                        }\n                      });\n                    break;\n            \n                case 'and':\n                    if (filter.filters.length === 1) { // do we have a single filter?\n                        if ((filter.filters[0])['filters']) {\n                            query = this.parseKendoFilters(<any>filter.filters); // if filter is of an 'or' type\n                        } else {\n                            query = this.parseKendoFilters({logic: 'or', filters:<any>filter.filters}); // this is a single filter option\n                        }\n                    } else {\n                        query = {intersection:[]};\n                        filter.filters.forEach((item:any) => {\n                            if (item.filters) {\n                                query.intersection.push(this.parseKendoFilters(item)); // if filter is of an 'or' type\n                            } else {\n                                query.intersection.push(this.parseKendoFilters({ logic: 'or', filters: [item] })); // this is a single filter option\n                            }\n                        });\n                    }\n                    break;\n                        \n                    default:\n                        query = this.parseKendoFilters({ logic: 'or', filters: <any>filter.filters }); // this is a single filter option\n                    break;\n            }\n        }\n        return query;\n    }\n\n\n    private dataSource = new kendo.data.DataSource({\n        transport: this.fourDTransport,\n        schema: {\n\n            total: (response) => {\n                // console.log('total');\n                return this.dataProvider.totalRecordCount;\n            }\n        },\n        serverPaging: true,\n        serverSorting: this.pageable || this.useLazyLoading,\n        serverFiltering: this.pageable || this.useLazyLoading,\n        serverGrouping: this.pageable || this.useLazyLoading,\n        pageSize: this.pageSize\n    });\n\n    /**\n     * if using an external datasource, this field will hold it and be not null\n     */\n    private externalDataSource: kendo.data.DataSource = null;\n\n\n    constructor(@Inject(HttpClient) private http: HttpClient, @Inject(FourDInterface) private fourD: FourDInterface) { }\n\n    @ViewChild('theGrid') public theGrid: any;\n\n    //\n    // Declare data provider properties\n    //\n    set queryString(v: FourDQuery) { if (this.dataProvider) { this.dataProvider.queryString = v; } }\n    set orderBy(v: string) { if (this.dataProvider) { this.dataProvider.orderBy = v; } }\n    set filterQuery(v: string) { if (this.dataProvider) { this.dataProvider.filterOptions = v; } }\n\n    /**\n     * currently selected record on the grid\n     */\n    get currentRecord(): FourDModel {\n        if (this.dataProvider && this.dataProvider.currentRecord) {\n            if (this.dataProvider.currentRecord.tableName === '') {\n                this.dataProvider.currentRecord.tableName = (<any>this.model).prototype.tableName;\n                this.dataProvider.currentRecord.tableNumber = (<any>this.model).prototype.tableNumber;\n                this.dataProvider.currentRecord.fields = (<any>this.model).prototype.fields;\n            }\n            return this.dataProvider.currentRecord;\n        } else { return null; }\n    }\n    set currentRecord(v: FourDModel) { this.dataProvider.currentRecord = v; }\n\n    /**\n     * record count on the current selection\n     */\n    get recordCount(): number { return (this.dataProvider) ? this.dataProvider.totalRecordCount : ((this.gridObject.dataSource) ? this.gridObject.dataSource.data().length : 0); }\n\n\n    /**\n     * after our view gets initialized, instantiate the grid and its dataProvider\n     */\n    ngAfterViewInit() {\n        this.initializeGrid();\n\n        $(this.theGrid.nativeElement).on('dblclick', 'tr.k-state-selected', ($event) => { this.dblClickRow($event); });\n\n        this.initialized.emit();\n    }\n\n    /**\n     * Populates the grid with the result of a 4D query\n     * @param query: the query string to send to 4D\n     * @param filter: filter options to send to 4D, to be applied to the query result\n     * @param orderby: order by statement to send to 4D, defining the record sort order\n     */\n    loadData(query: FourDQuery = null, filter: string = null, orderby: string = null) {\n        if (this.dataProvider) {\n            if (query) { this.queryString = query; }\n            if (filter) { this.filterQuery = filter; }\n            if (orderby) { this.orderBy = orderby; }\n\n            // if paging is enabled, make sure we go back to page 1, after reloading grid data\n            if (this.pageable) {\n                if (this.gridObject.pager.page() != 1) {\n                    this.gridObject.pager.page(1); // this function reloads page 1, so no need to do a fetch!\n                } else {\n                    this.dataSource.fetch()\n                        .then(() => {\n                            this.resize(); // force grid refresh\n                        });\n                }\n            } else {\n                this.dataSource.fetch()\n                    .then(() => {\n                        this.resize(); // force grid refresh\n                    });\n            }\n        }\n    }\n\n    setModel(newModel: FourDModel) {\n        this.model = newModel;\n        if (!this.dataProvider) {\n            this.dataProvider = new FourDCollection(); // this is the data model used to bring in records\n            this.dataProvider.model = this._model;\n        }\n    }\n\n    setDataSource(data: Array<any>) {\n        this.gridObject.dataSource.data(data);\n        setTimeout(() => {\n            this.resize(); // force grid refresh, but need to let grid redraw first, so give it a millisecond \n        }, 1);\n    }\n\n    setOptions(options: kendo.ui.GridOptions) {\n        if (this.gridObject) { this.gridObject.setOptions(options); }\n    }\n\n    rowClicked(event) {\n        // console.log('click',event);\n        if (this.dataProvider && this.gridObject) {\n            const item = this.gridObject.dataItem(this.gridObject.select());\n            this.dataProvider.currentRecord = this.findRecordForThisItem(item);\n            this.rowSelected.emit(this.dataProvider.currentRecord);\n        } else {\n            if (this.gridObject.select()) {\n                this.rowSelected.emit(this.gridObject.dataItem(this.gridObject.select()));\n            }\n        }\n    }\n\n    dblClickRow(event) {\n        // console.log('dblclick', event);\n        if (this.dataProvider && this.dataProvider.currentRecord) {\n            this.recordSelected.emit(this.dataProvider.currentRecord);\n        } else {\n            if (this.gridObject.select()) {\n                this.recordSelected.emit(this.gridObject.dataItem(this.gridObject.select()));\n            }\n        }\n    }\n\n\n    refresh() {\n        this.loadData();\n    }\n\n    resize() {\n        if (this.gridObject && this.gridObject.element) this.gridObject.resize();  // make sure grid is active\n        //\n        // if a row class callback function is set, call it for each row\n        //\n        if (this.setRowClass) {\n            setTimeout(() => {\n                this.gridObject.dataSource.data().forEach(row => {\n                    const element = $('tr[data-uid=\"' + row['uid'] + '\"] ');\n                    if (element) {\n                        const newClass = this.setRowClass(row, element);\n                        if (newClass && newClass != '') { // do we have a css class to assign?\n                            element.addClass(newClass);\n                        }\n                    }\n                });\n            }, 1);\n        }\n    }\n\n    /**\n     * return currently selected grid row\n     */\n    selectedRow(): any {\n        if (this.gridObject && this.gridObject.table) {\n            if (this.gridObject.select()) {\n                return this.gridObject.dataItem(this.gridObject.select());\n            } else { return null; }\n        } else { return null; }\n    }\n\n    /**\n     * Update currently selected row with data from a \n     * @param newData updated data record to be used to update current selected row\n     */\n    updateSelectedRowData(newData?:FourDModel) {\n        if (!newData) newData = this.currentRecord;\n        let row:any = this.selectedRow();\n        if (row && newData) {\n            this.columns.forEach(col => {\n                if (col.field) {\n                    row[col.field] = newData[col.field]\n                }\n            });\n            this.gridObject.refresh();\n        }\n    }\n\n\n    /**\n     * select a specific row on the grid\n     * @param index row index to select\n     * @param scrollTo flag to indicate if the grid should auto scroll to the selected row\n     */\n    selectThisRow(index, scrollTo = true) {\n        if (index <= this.recordCount) {\n            if (this.selectionMode.includes('single')) { // if selection mode is single row, then clear currently selected row\n                const cur = this.gridObject.select();\n                if (cur.length > 0) {\n                    let row = $(cur[0]);\n                    if (row.hasClass(\"k-state-selected\")) {\n                        row.removeClass(\"k-state-selected\"); // this is a trick to unselect a row!! weird!!\n                    }\n                }\n            }\n            if (index > 0) {\n                this.gridObject.select('tr:eq(' + (index - 1) + ')');\n                if (scrollTo) {\n                    const scrollContentOffset = this.gridObject.element.find(\"tbody\").offset().top;\n                    const selectContentOffset = this.gridObject.select().offset().top;\n                    const distance = selectContentOffset - scrollContentOffset;\n                    this.gridObject.element.find(\".k-grid-content\").animate({ scrollTop: distance }, 0);\n                }\n                if (this.dataProvider) {\n                    const item = this.gridObject.dataItem(this.gridObject.select());\n                    this.dataProvider.currentRecord = this.findRecordForThisItem(item);\n                }\n            }\n        }\n    }\n\n    /**\n     * clear current grid selection\n     */\n    clearCurrentSelection():void {\n        const cur = this.gridObject.select();\n        if (cur.length > 0) {\n            let row = $(cur[0]);\n            if (row.hasClass(\"k-state-selected\")) {\n                row.removeClass(\"k-state-selected\"); // this is a trick to unselect a row!! weird!!\n            }\n        }\n        this.currentRecord = null;\n    }\n\n    /**\n     * return currently selected grid row index\n     */\n    selectedRowIndex(): number {\n        if (this.gridObject && this.gridObject.table) {\n            if (this.gridObject.select()) {\n                let ret = -1;\n                const rows = this.gridObject.select();\n                if (rows.length > 0) {\n                    ret = rows[0]['rowIndex'];\n                } else {\n                    const item = this.gridObject.dataItem(this.gridObject.select());\n                    if (this.dataProvider) {\n                        this.dataProvider.models.forEach((element, index) => {\n                            if (element['_recnum'] === item['_recnum']) { ret = index; }\n                        });\n                    } else if ((<any>this.gridObject).dataItems().length > 0 && this._model && this._model.primaryKey_ && this._model.primaryKey_ !== '') {\n                        (<any>this.gridObject).dataItems().forEach((element, index) => {\n                            if (element[this._model.primaryKey_] === item[this._model.primaryKey_]) { ret = index; }\n                        });\n                    }\n                }\n\n                return ret;\n            } else { return -1; }\n        } else { return -1; }\n    }\n\n    /**\n     * return currently selected rows indices, if multiple selection allowed\n     */\n    selectedRows(): Array<number> {\n        if (this.gridObject) {\n            const rows = this.gridObject.select();\n            let selectedRecords = [];\n            for (let index = 0; index < rows.length; index++) {\n                selectedRecords.push(rows[index]['rowIndex']);\n            };\n\n            return selectedRecords;\n\n        } else {\n            return [];\n        }\n    }\n\n    /**\n     * return currently selected records, if multiple selection allowed\n     */\n    selectedRecords(): Array<FourDModel> {\n        if (this.gridObject) {\n            const rows = this.gridObject.select();\n            let selectedRecs = [];\n            if (this.dataProvider) {\n                for (let index = 0; index < rows.length; index++) {\n                    let rowIndex = rows[index]['rowIndex'];\n                    selectedRecs.push(this.dataProvider.models[rowIndex]);\n                };\n            } else {\n                for (let index = 0; index < rows.length; index++) {\n                    selectedRecs.push(this.gridObject.dataItem(rows[index]));\n                };\n            }\n\n            return selectedRecs;\n        } else {\n            return [];\n        }\n    }\n\n    /**\n     * Export grid data to Excel\n     */\n    exportGridToExcel() {\n        if (this.excelFilename) {\n            this.gridObject.setOptions({ excel: { fileName: this.excelFilename } });\n        }\n        if (this.externalDataSource) {\n            // if an external datasource is set, use its transport\n            this.gridObject.setDataSource(this.externalDataSource);\n        }\n\n        this.gridObject.saveAsExcel();\n    }\n\n    /**\n     * Find grid item in the data provider\n     */\n    findRecordForThisItem(item: any): FourDModel {\n        if (!item) { return null; } // nothing selected...\n\n        let ret = null;\n        if (this.dataProvider) {\n            this.dataProvider.models.forEach(element => {\n                if (element['_recnum'] === item['_recnum']) { ret = element; }\n            });\n        } else if ((<any>this.gridObject).dataItems().length > 0 && this._model && this._model.primaryKey_ && this._model.primaryKey_ !== '') {\n            (<any>this.gridObject).dataItems().forEach(element => {\n                if (element[this._model.primaryKey_] === item[this._model.primaryKey_]) { ret = element; }\n            });\n\n        }\n        return ret;\n    }\n\n    /**\n     * Remove row from grid\n     */\n    removeRow(row: number) {\n        if (this.dataProvider && this.dataProvider.models.length > row) {\n            // if we have a data provider and a valid row index \n            this.dataProvider.models.splice(row, 1);\n        } else if ((<any>this.gridObject).dataItems().length > row) {\n            (<any>this.gridObject).dataItems().splice(row, 1);\n            this.gridObject.refresh();\n        }\n    }\n\n    setColumnConfig(columns) {\n        if (this.gridObject) this.gridObject.destroy();\n        $(this.theGrid.nativeElement).empty();\n        // $(this.theGrid.nativeElement).remove();\n\n        if (this.dataProvider) this.dataProvider.columns = this.columns;\n        this.columns = columns;\n        this.initializeGrid();\n    }\n\n    setExternalDataSource(dataSource, columns) {\n        if (this.theGrid && this.gridObject) {\n            this.gridObject.destroy();\n            $(this.theGrid.nativeElement).empty();\n\n            this.externalDataSource = dataSource;\n            this.columns = columns;\n            this.initializeGrid();\n        }\n    }\n\n    getDataProvider() { return this.dataProvider; }\n\n\n    private initializeGrid() {\n        if (this._model) {\n            this.dataProvider = new FourDCollection(); // this is the data model used to bring in records\n            this.dataProvider.model = this._model;\n            this.dataProvider.columns = this.columns;\n        }\n\n        if (this.pageable) this.useLazyLoading = false; // need to do this to avoid confusion and cause awkward grid behaviour\n\n        if (this.enableHeaderTooltip) { \n            // if we are enabling header tooltip generically, we need to include specific headerAttributes, in case there are none\n            for (const col of this.columns) {\n                if (!col.hasOwnProperty('headerTemplate') && col.hasOwnProperty('title') && !col.hidden) {\n                    // ignore columns with their own headerTemplate\n                    if (col.hasOwnProperty('headerAttributes')) {\n                        if (!col.headerAttributes.hasOwnProperty('title')) {\n                            col.headerAttributes.title = col.title;\n                        }\n                    } else {\n                        col.headerAttributes = {title: col.title}\n                    }\n                }\n            }\n        }\n\n        if (this.filterable && this.dataProvider && this.dataSource && this._model) {\n            let schemaModel:any = {fields :{}};\n            const modelDef = <any>(this._model);\n            const recModel: FourDModel = <any>(new modelDef());\n            this.columns.forEach(element => {\n                if (element.field) {\n                    const field = recModel.getFieldProperties(element.field);\n                    if (field) {\n                        switch (field.type) {\n                            case 'date':\n                            case 'Date':\n                                schemaModel.fields[element.field] = {type:'date'};\n                                break;\n                        \n                            case 'boolean':\n                                schemaModel.fields[element.field] = {type:'boolean'};\n                                break;\n                        \n                            case 'number':\n                                schemaModel.fields[element.field] = {type:'number'};\n                                break;\n                        \n                            default:\n                                break;\n                        }\n                    }\n                }\n            });\n\n            let newDS = new kendo.data.DataSource({\n                transport: this.fourDTransport,\n                schema: {\n                    model: schemaModel,\n                    total: (response) => {\n                        // console.log('total');\n                        return this.dataProvider.totalRecordCount;\n                    }\n                },\n                serverPaging: true,\n                serverSorting: this.pageable || this.useLazyLoading,\n                serverFiltering: this.pageable || this.useLazyLoading,\n                serverGrouping: this.pageable || this.useLazyLoading,\n                pageSize: this.pageSize\n            });\n\n            if (this.externalDataSource) {\n                // if an external datasource is set, use its transport\n                newDS['transport'] = this.externalDataSource['transport'];\n            }\n            this.dataSource = newDS;\n        }\n\n        $(this.theGrid.nativeElement).kendoGrid(<any>{\n            dataSource: (this.dataProvider) ? this.dataSource : null,\n            excel: { allPages: true, filterable: true },\n            change: ($event) => { this.rowClicked($event); },\n            autoBind: false,\n            pageable: (this.pageable) ? {\n                refresh: this.pageableRefresh,\n                pageSize: this.pageSize,\n                pageSizes: this.pageableSizes,\n                buttonCount: this.pageableButtonCount,\n                messages: this.pageableMessageCustom\n            } : false,\n            scrollable: (this.useLazyLoading)?{ virtual: this.useLazyLoading }:true,\n            resizable: true,\n            selectable: (this.selectable) ? this.selectionMode : false,\n            editable: this.editable,\n            filterable: this.filterable,\n            sortable: this.sortable,\n            height: this.height,\n            reorderable: this.reorderable,\n            columnMenu: this.columnMenu,\n            columns: this.columns\n        });\n\n        this.gridObject = $(this.theGrid.nativeElement).data('kendoGrid');\n\n        if (this.autoResize) {\n            window.onresize = () => {this.resize();}\n        }\n    }\n}\n","import { Injectable } from '@angular/core';\nlet _defaultConfig: ModalConfig;\n\n\n/**\n * A configuration definition object.\n * Instruction for how to show a modal.\n */\n@Injectable()\nexport class ModalConfig {\n    /**\n     * Size of the modal.\n     * 'lg', 'sm' or 'custom'.\n     * NOTE: No validation.\n     * Default to 'lg'\n     */\n    size: string;\n\n    /**\n     * Width of the modal.\n     * used only if size is 'custom'.\n     * NOTE: No validation.\n     */\n    customStyle: string;\n\n    /**\n     * Describes if the modal is blocking modal.\n     * A Blocking modal is not closable by clicking outside of the modal window.\n     * Defaults to false.\n     */\n    isBlocking: boolean;\n\n    /**\n     * Keyboard value/s that close the modal.\n     * Accepts either a single numeric value or an array of numeric values.\n     * A modal closed by a keyboard stroke will result in a 'reject' notification from the promise.\n     * Defaults to 27, set `null` implicitly to disable.\n     */\n    keyboard: Array<number> | number;\n\n    width: any = null;\n    minWidth = 50;\n\n    height: any = null;\n    minHeight = 50;\n\n    position = { top: 100, left: 100 };\n\n    selfCentered = true;\n\n    isModal = true;\n\n    isDraggable = true;\n\n    isResizable = true;\n\n    title = '';\n\n    actions: Array<string> = ['Close'];\n\n    /**\n      * Makes a ModalConfig instance valid.\n      * @param config\n      * @param defaultConfig A Default config to use as master, optional.\n      * @returns ModalConfig The same config instance sent.\n      */\n    static makeValid(config: ModalConfig, defaultConfig?: ModalConfig) {\n        defaultConfig = (defaultConfig) ? defaultConfig : _defaultConfig;\n\n        if (!config.size) { config.size = defaultConfig.size; }\n\n        if (config.isBlocking !== false) { config.isBlocking = true; }\n\n        if (config.keyboard !== null) {\n            if (Array.isArray(<Array<number>>config.keyboard)) {\n                config.keyboard = (<Array<number>>config.keyboard).length === 0\n                    ? defaultConfig.keyboard : config.keyboard;\n            } else if (!isNaN(<number>config.keyboard)) {\n                config.keyboard = [<number>config.keyboard];\n            } else {\n                config.keyboard = defaultConfig.keyboard;\n            }\n        }\n\n        return config;\n    }\n\n    constructor() {\n        this.size = 'ls';\n        this.isBlocking = true;\n        this.keyboard = [27];\n    }\n\n\n}\n\n_defaultConfig = new ModalConfig();\n","import {\n    Type,\n    ComponentFactoryResolver,\n    ViewContainerRef,\n    Injectable,\n    Optional\n} from '@angular/core';\n\n\nimport { ModalConfig } from '../models/ModalConfig';\nimport { ModalDialogInstance } from '../models/ModalDialogInstance';\n\n\nlet _config: ModalConfig;\n\n// @dynamic\n@Injectable()\nexport class Modal {\n\n    public static hostViewRef: ViewContainerRef;\n    public static openDialogList = [];\n\n    public theDialog: any;\n\n    constructor(private componentFactoryResolver: ComponentFactoryResolver, private appRef: ViewContainerRef,\n        @Optional() defaultConfig: ModalConfig) {\n        // The Modal class should be an application wide service (i.e: singleton).\n        // This will run once in most applications...\n        // If the user provides a ModalConfig instance to the DI,\n        // the custom config will be the default one.\n        _config = (defaultConfig) ? ModalConfig.makeValid(defaultConfig) : new ModalConfig();\n    }\n\n    /**\n     * Opens a modal window blocking the whole screen.\n     * @param componentType The angular Component to render as modal.\n     * @param parameters parameters to be passed to the dialog instance.\n     * @param config A Modal Configuration object.\n     * @param allowMultiple indicates if multiple version of the same dialog are allowed.\n     * @param dialogID a dialog identification token to control multiple occurrences.\n     * @returns Promise<ModalDialogInstance>\n     */\n    public open(componentType: any, parameters?: any,\n        config?: ModalConfig, allowMultiple: boolean = false, dialogID: string = ''): Promise<string> {\n        // TODO: appRef.injector.get(APP_COMPONENT) Doesn't work.\n        // When it does replace with the hack below.\n        // let viewRef = this.appRef.element.nativeElement.location;\n        // let viewRef: viewRef = this.appRef['_rootComponents'][0].location;\n\n        return this.openInside(componentType, (Modal.hostViewRef) ? Modal.hostViewRef : this.appRef, parameters, config, allowMultiple, dialogID);\n    }\n\n    /**\n     * Opens a modal window inside an existing component.\n     * @param componentType The angular Component to render as modal.\n     * @param viewRef The element to block using the modal.\n     * @param parameters parameters to be passed to the dialog instance.\n     * @param config A Modal Configuration object.\n     * @param allowMultiple indicates if multiple version of the same dialog are allowed.\n     * @param dialogID a dialog identification token to control multiple occurrences.\n     * @returns Promise<ModalDialogInstance>\n     */\n    public openInside(componentType: Type<any>, viewRef: ViewContainerRef,\n        parameters: any,\n        config?: ModalConfig,\n        allowMultiple: boolean = false,\n        dialogID: string = ''): Promise<string> {\n\n        config = (config) ? ModalConfig.makeValid(config, _config) : _config;\n\n        if (!allowMultiple) {\n            for (let index = 0; index < Modal.openDialogList.length; index++) {\n                const item = Modal.openDialogList[index];\n                const id = (dialogID && dialogID !== '') ? dialogID : config.title;\n                if (item.component === id) {\n                    item.dialog.kendoDialog.toFront(); // bring dialog to front\n                    return item.dialog.result;\n                }\n            }\n        }\n\n        const dialogComponentFactory = this.componentFactoryResolver.resolveComponentFactory(componentType);\n        const dialogComponentRef = viewRef.createComponent(dialogComponentFactory);\n        const dialogInstance = dialogComponentRef.instance.dialog = new ModalDialogInstance();\n        dialogComponentRef.instance.modelContentData = parameters;\n\n        this.theDialog = $(dialogComponentRef.location.nativeElement).kendoWindow({\n            actions: config.actions,\n            title: config.title,\n            width: config.width,\n            minWidth: config.minWidth,\n            height: config.height,\n            minHeight: config.minHeight,\n            position: config.position,\n            draggable: config.isDraggable,\n            modal: config.isModal,\n            pinned: false,\n            resizable: config.isResizable,\n            close: (event) => { this.closeDialog(event, dialogInstance); }\n        }).data('kendoWindow');\n        if (config.selfCentered) {\n            this.theDialog.center().open();\n        } else { this.theDialog.open(); }\n\n        dialogInstance.contentRef = dialogComponentRef;\n        dialogInstance.kendoDialog = this.theDialog;\n\n        // trick to avoid angular2 error \"Expression has changed after it was checked\"\n        dialogComponentRef.changeDetectorRef.detectChanges(); // need this to avoid NG2 error/warning\n\n        // if multiples not allowed, save this instance\n        if (!allowMultiple) {\n            const id = (dialogID && dialogID !== '') ? dialogID : componentType['name'];\n            Modal.openDialogList.push({ component: id, dialog: dialogInstance });\n        }\n\n        return dialogInstance.result;\n\n    }\n\n    public closeDialog(event, theDialogInstance:ModalDialogInstance) {\n        // console.log(event, theDialog);\n        for (let index = 0; index < Modal.openDialogList.length; index++) {\n            const item = Modal.openDialogList[index];\n            if (item.dialog === theDialogInstance) {\n                Modal.openDialogList.splice(index);\n            }\n        }\n\n        if (theDialogInstance.contentRef.instance.beforeDismiss) theDialogInstance.contentRef.instance.beforeDismiss();\n        theDialogInstance.kendoDialog.destroy();\n        theDialogInstance.contentRef.destroy();\n    }\n\n    /**\n     * Opens a modal window blocking the whole screen.\n     * @param componentType The angular Component to render as modal.\n     * @param parameters parameters to be passed to the dialog instance.\n     * @param allowMultiple indicates if multiple version of the same dialog are allowed.\n     * @param dialogID a dialog identification token to control multiple occurrences.\n     * @returns Promise<ModalDialogInstance>\n     */\n    public openDialog(component: any, parameters: any, allowMultiple: boolean = false, dialogID: string = ''): Promise<string> {\n\n        return this.open(<any>component, parameters, component.dialogConfig, allowMultiple, dialogID);\n    }\n\n}\n","import { Component, ContentChild, ElementRef, ViewContainerRef, OnInit, Input } from '@angular/core';\n\nimport { Modal } from '../angular2-modal/providers/Modal';\nimport { ModalDialogInstance } from '../angular2-modal/models/ModalDialogInstance';\nimport { ICustomModalComponent } from '../angular2-modal/models/ICustomModalComponent';\nimport { ModalConfig } from '../angular2-modal/models/ModalConfig';\n\n@Component({\n    selector: 'list-selector',\n    template: `\n        <div style=\"display:flex;flex-direction:column;margin:10px;height:calc(100% - 30px);\">\n            <select size=\"20\" class=\"largeFieldEntry\" style=\"height:90%;padding:5px;margin-bottom:10px;\" (change)=\"changeSelection($event)\" (dblclick)=\"ok($event)\">\n                <option *ngFor='let item of itemsList; let i=index' value=\"{{item}}\" title=\"{{tipsList[i]}}\" class=\"selectorItem\">{{item}}</option>\n            </select>\n            <div >\n                <label [hidden]=\"message == ''\">{{message}}</label>\n                <button class=\"regularButton mat-raised-button mat-primary\" style=\"width:70px;float:right;margin-right:5px;\" (click)=\"ok($event)\">{{buttonText}}</button>\n            </div>\n        </div>\n   `,\n    providers: [Modal]\n})\n\nexport class ListSelectorDialog implements ICustomModalComponent {\n    public static dialogConfig: ModalConfig = <ModalConfig>{\n        size: 'sm',\n        selfCentered: true,\n        isResizable: true,\n        isModal: true,\n        isBlocking: true,\n        title: 'Select...',\n        width: 400, height: 350\n    };\n\n    @Input() public itemsList: string[] = [];\n    @Input() public tipsList: string[] = [];\n    @Input() public buttonText = 'Select';\n    @Input() public message = '';\n\n    public set height(v) { ListSelectorDialog.dialogConfig.height = v };\n    public set width(v) { ListSelectorDialog.dialogConfig.width = v };\n    public set title(v) { ListSelectorDialog.dialogConfig.title = v };\n\n\n    public set modelContentData(v) {\n        this.itemsList = v.list;\n        this.tipsList = v.tips;\n        if (v.buttonLabel) { this.buttonText = v.buttonLabel; }\n        if (v.message) { this.message = v.message; }\n    }\n\n\n    private selectedIndex = -1;\n\n\n    constructor(public dialog: ModalDialogInstance, private modal: Modal, private viewRef:ViewContainerRef) {\n  \n    }\n\n    /**\n     * Show Me - show the list selector dialog and return a Promise\n     */\n    public show(list: string[], tips?: string[], message?: string, buttonLabel?: string): Promise<number> {\n        if (!tips) { tips = list; }\n\n        return <any>this.modal.openInside(ListSelectorDialog, this.viewRef, { list: list, tips: tips, message: message, buttonLabel: buttonLabel }, ListSelectorDialog.dialogConfig);\n    }\n\n    changeSelection(ev) {\n        this.selectedIndex = ev.target.selectedIndex;\n    }\n\n    ok($event) {\n        $event.stopPropagation();\n        this.dialog.close(this.selectedIndex);\n    }\n\n}\n\n","import { Component, ContentChild, ElementRef, ViewContainerRef, AfterContentInit, Input, HostListener } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\n\nimport { FourDInterface } from '../js44D/JSFourDInterface';\nimport { QueryBand } from './queryBand';\nimport { AdvancedQueryComponent } from './advancedQuery';\nimport { DataGrid } from '../dataGrid/dataGrid';\nimport { Modal } from '../angular2-modal/providers/Modal';\nimport { ICustomModalComponent } from '../angular2-modal/models/ICustomModalComponent';\nimport { ModalDialogInstance } from '../angular2-modal/models/ModalDialogInstance';\nimport { ModalConfig } from '../angular2-modal/models/ModalConfig';\nimport { ListSelectorDialog } from '../dialogs/listSelectorDialog';\n\n@Component({\n    selector: 'record-list',\n    template: '<div class=\"recordList\" (resize)=\"windowResized($event)\"><ng-content></ng-content></div>',\n    providers: [HttpClient, FourDInterface, ListSelectorDialog, Modal]\n})\n\nexport class RecordList implements AfterContentInit {\n\n    /**\n     * this is the associated record list dialog, if set we use it to handle window resize\n     */\n    @Input() public dialogInstance: ModalDialogInstance = null;\n\n    /**\n     * this is the associated record edit dialog, if set dbl-cliking a row or hitting the Add/Edit buttons will open it\n     */\n    @Input() public editWindow: ICustomModalComponent = null;\n\n    /**\n     * get the associated Query band and Datagrid object instances\n     */\n    @ContentChild(QueryBand) queryBand: QueryBand;\n    @ContentChild(DataGrid) theGrid: DataGrid;\n\n    /**\n     * return the currently selected records from the grid\n     */\n    public get selectedRecords():Array<any> {\n        let selection = [];\n        if (this.theGrid && this.theGrid.getDataProvider()) {\n            const gridRows = this.theGrid.getDataProvider().models;\n            const selectedRows = this.theGrid.selectedRows();\n            for (let index = 0; index < selectedRows.length; index++) {\n                const rowIndex: any = selectedRows[index];\n                selection.push(gridRows[rowIndex]);\n            };  \n        }\n        \n        return selection;\n    }\n    /**\n     * Save Edit Window Configuration\n     */\n    private _editWindowConfig: ModalConfig;\n\n    public _previousQuery: Object;\n    private _previousAdvancedQuery: any;\n\n    //\n    // We need access to a Modal dialog component, to open an associated Record Edit Form \n    //\n    constructor(private modal: Modal, private elementRef: ElementRef, private viewRef: ViewContainerRef, private selectList: ListSelectorDialog) {\n    }\n\n    /**\n     * AFter our view gets initialized, subscribe to various events on the Query band and the Grid\n     */\n    ngAfterContentInit() {\n        // if we have a query band, then subscribe to the query refresh and export to excel buttons\n        if (this.queryBand) {\n            // if user hits Refresh button, call grid refresh method\n            this.queryBand.queryRefresh.subscribe((query: Object) => { this.refreshGrid(query); });\n            // if user hits Advanced Query button, call advanced query method\n            if (this.queryBand.enableQBE) {\n                this.queryBand.queryFromQBE.subscribe((query: Object) => { this.showAdvancedQuery(); });\n            }\n            // if user hits Set Management button, call corresponding method method\n            if (this.queryBand.enableSETS) {\n                this.queryBand.queryManageSets.subscribe((action: string) => { this.doManageSets(action); });\n            }\n            // if user hits Export to Excel, call grid's excel export method\n            this.queryBand.queryExportGrid.subscribe(() => { if (this.theGrid) { this.theGrid.exportGridToExcel(); } });\n\n            if (this.editWindow) {\n                this.queryBand.queryAddRecord.subscribe(() => { this.showEditWindow('add'); });\n                this.queryBand.queryEditRecord.subscribe(() => { this.showEditWindow('edit'); });\n            }\n\n            this.queryBand.queryDeleteRecord.subscribe(() => { this.deleteRecord(); });\n\n        }\n\n        // if we have a grid and an associated edit record form, subscribe to the record select event\n        if (this.theGrid && this.editWindow) {\n            this.theGrid.recordSelected.subscribe((record: any) => { this.showEditWindow('edit'); });\n        }\n\n        if (this.editWindow && this.editWindow['dialogConfig']) {\n            this._editWindowConfig = this.editWindow['dialogConfig'];\n        }\n\n        if (this.dialogInstance) {\n            //            console.log(this.dialogInstance)\n            const dialog: any = $(this.dialogInstance.contentRef.location.nativeElement).data('kendoWindow');\n            dialog.resizing._draggable.userEvents.bind('release', (event) => { this.windowResized(event) });\n        }\n    }\n\n    /**\n     * Clear all previous queries\n     */\n    public clearQuery() {\n        this._previousAdvancedQuery = null;\n        this._previousQuery = null;\n    }\n\n\n    /**\n     * Refresh teh Grid, run query on 4D side and get records to display\n     * @param query: the query string to send to 4D to select records to display on the grid\n     */\n    public refreshGrid(query?: Object) {\n        if (!query) { query = this._previousQuery; } // if no query given, try previous\n        if (query && this.theGrid) { this.theGrid.loadData(query); }\n        this._previousQuery = query; // save last queryDeleteRecord\n    }\n\n    /**\n     * Handle browser window resize and resize grid\n     */\n    @HostListener('window:resize') onResize() {\n        this.windowResized(null);\n    }\n\n    /**\n     * Intercept Dialog Window resize event and resize the Grid to fit the entire window\n     * @param event \n     */\n    public windowResized(event) {\n        this.theGrid.resize(); // refresh datagrid to adjust it to the window size\n    }\n\n    /**\n     * Show record edit window, to either edit or add a new record\n     */\n    public showEditWindow(mode: string) {\n        // if editing a record, and we do have a record selected and an edit dialog does exist\n        if (this.theGrid && this.editWindow && mode === 'edit' && this.theGrid.currentRecord) {\n            if (this.theGrid.optimizeGridLoading) { // if we are optimizing the grid, then we need to refresh selected record\n                kendo.ui.progress($(this.elementRef.nativeElement), true); // show loading progress icon\n                this.theGrid.currentRecord.refresh().then(() => { // refresh current record\n                    kendo.ui.progress($(this.elementRef.nativeElement), false); // clear loading progress icon\n                    this.modal.openInside(<any>this.editWindow, this.viewRef, this.theGrid.currentRecord, this._editWindowConfig, true)\n                        .then(result => { this.editWindowHandler(result); }); // open edit dialog\n                });\n            } else {\n                // if not optimizing the grid loading, then we have a complete record loaded already\n                this.modal.openInside(<any>this.editWindow, this.viewRef, this.theGrid.currentRecord, this._editWindowConfig, true)\n                    .then(result => { this.editWindowHandler(result); }); // open edit dialog\n            }\n        }\n\n        if (this.theGrid && this.editWindow && mode === 'add') {\n            // if we are adding a new record\n            const modelDef = <any>(this.theGrid.model);\n            const newModel = <any>(new modelDef());\n            // show edit dialog to insert new record\n            this.modal.openInside(<any>this.editWindow, this.viewRef, newModel, this._editWindowConfig, true)\n                .then(result => { this.editWindowHandler(result); }); // open edit dialog\n        }\n    }\n\n    /** \n     * Delete Selected Record(s)\n     */\n    public deleteRecord() {\n        if (this.theGrid && this.theGrid.currentRecord) {\n            if (confirm((this.queryBand.cascadeDeleteRecord) ? 'Really delete selected record and all its associated data records?' : 'Really delete selected record?')) {\n                this.theGrid.currentRecord.deleteRecord(this.queryBand.cascadeDeleteRecord)\n                    .then((message) => { alert('Record Deleted'); this.theGrid.refresh(); })\n                    .catch((reason) => { alert(reason); });\n            }\n        }\n    }\n\n    /**\n     * private method to deal with edit window close\n     */\n    private editWindowHandler(result: string) {\n        if (result === 'recordSaved') { this.theGrid.refresh(); }\n    }\n\n    /**\n     * deal with advanced Query dialog\n     */\n    private showAdvancedQuery() {\n        const advancedQuery = AdvancedQueryComponent;\n        const modelDef = <any>(this.theGrid.model);\n        const newModel = <any>(new modelDef());\n        this.modal.openInside(AdvancedQueryComponent, this.viewRef, { previousQuery: this._previousAdvancedQuery, model: (newModel.tableName !== '') ? newModel : (<any>this.theGrid.model).prototype }, advancedQuery['dialogConfig'])\n            .then((result: any) => {\n                if (result.query.length > 0) {\n                    this._previousAdvancedQuery = result.queryFields;\n                    this.refreshGrid({ query: result.query }); // open edit dialog\n                }\n            });\n\n    }\n\n    /**\n     * Handle Manage Sets dropdown menu and act upon user selected action\n     */\n    private doManageSets(action: string) {\n        const modelDef = <any>(this.theGrid.model);\n        const newModel = <any>(new modelDef());\n        const tableName = (newModel.tableName !== '') ? newModel.tableName : (<any>this.theGrid.model).prototype.tableName;\n        const pk = (newModel.tableName !== '') ? newModel.primaryKey_ : (<any>this.theGrid.model).prototype.primaryKey_;\n        let gridRows:any[] = <any>this.theGrid.gridObject.dataSource.data();\n        let savedSearches: Array<any>;\n        let savedSets: Array<any>;\n        let selectedRecords = [];\n        let setList = [];\n        let searchList = [];\n\n        switch (action) {\n            case 'selectHighlited':\n                if (pk && pk !== '') {\n                    const selectedRows = this.theGrid.selectedRows();\n                    selectedRecords = [];\n                    for (let index = 0; index < selectedRows.length; index++) {\n                        const rowIndex: any = selectedRows[index];\n                        selectedRecords.push(gridRows[rowIndex][pk]);\n                    };\n                    this.restoreSet(selectedRecords);\n                }\n\n                break;\n\n            case 'saveSearch':\n                kendo.prompt('Please, enter a name for this Search:', '').then((searchName) => {\n                    if (searchName !== '') {\n                        savedSearches = JSON.parse(localStorage.getItem(tableName + '_savedSearches')) || [];\n                        savedSearches.push({ name: searchName, search: this._previousQuery });\n                        localStorage.setItem(tableName + '_savedSearches', JSON.stringify(savedSearches));\n                    }\n                }, function () {\n                    // cancelled...\n                })\n                break;\n\n            case 'saveSet':\n                if (pk && pk !== '' && gridRows.length > 0) {\n                    kendo.prompt('Please, enter a name for this Record Set:', '').then((setName) => {\n                        if (setName !== '') {\n                            savedSets = JSON.parse(localStorage.getItem(tableName + '_savedSets')) || [];\n\n                            gridRows = <any>this.theGrid.gridObject.dataSource.data();\n                            selectedRecords = [];\n                            for (let row = 0; row < gridRows.length; row++) {\n                                selectedRecords.push(gridRows[row][pk]);\n                            };\n\n                            savedSets.push({ name: setName, set: selectedRecords });\n                            localStorage.setItem(tableName + '_savedSets', JSON.stringify(savedSets));\n                        }\n                    }, function () {\n                        // cancelled...\n                    })\n                }\n                break;\n\n            case 'reuseSearch':\n                savedSearches = JSON.parse(localStorage.getItem(tableName + '_savedSearches')) || [];\n                searchList = [];\n                savedSearches.forEach(element => {\n                    searchList.push(element.name);\n                });\n                if (searchList.length > 0) {\n                    this.selectList.title = 'Select Saved Search';\n                    this.selectList.show(searchList)\n                        .then(result => {\n                            const query = savedSearches[result].search;\n                            this.refreshGrid(query);\n                        }); // open list selector dialog\n                }\n                break;\n\n            case 'restoreSet':\n                savedSets = JSON.parse(localStorage.getItem(tableName + '_savedSets')) || [];\n                setList = [];\n                savedSets.forEach(element => {\n                    setList.push(element.name);\n                });\n                if (setList.length > 0) {\n                    this.selectList.title = 'Select Saved Set';\n                    this.selectList.show(setList)\n                        .then(result => {\n                            const set = savedSets[result].set;\n                            this.restoreSet(set);\n                        }); // open list selector dialog\n                }\n                break;\n\n            case 'combineSearches':\n\n                break;\n\n            case 'manageSearches':\n                savedSearches = JSON.parse(localStorage.getItem(tableName + '_savedSearches')) || [];\n                searchList = [];\n                savedSearches.forEach(element => {\n                    searchList.push(element.name);\n                });\n                if (searchList.length > 0) {\n                    this.selectList.title = 'Delete Saved Search';\n                    this.selectList.show(searchList, null, 'items deleted immediately', 'Delete')\n                        .then(result => {\n                            savedSearches.splice(result, 1);\n                            localStorage.setItem(tableName + '_savedSearches', JSON.stringify(savedSearches));\n                        }); // open list selector dialog\n                }\n\n                break;\n\n            case 'manageSets':\n                savedSets = JSON.parse(localStorage.getItem(tableName + '_savedSets')) || [];\n                setList = [];\n                savedSets.forEach(element => {\n                    setList.push(element.name);\n                });\n                if (setList.length > 0) {\n                    this.selectList.title = 'Delete Saved Set';\n                    this.selectList.show(setList, null, 'items deleted immediately', 'Delete')\n                        .then(result => {\n                            savedSets.splice(result, 1);\n                            localStorage.setItem(tableName + '_savedSets', JSON.stringify(savedSets));\n                        }); // open list selector dialog\n                }\n                break;\n        }\n    }\n\n    private restoreSet(records: Array<number>) {\n        const modelDef = <any>(this.theGrid.model);\n        const newModel = <any>(new modelDef());\n        const tableName = (newModel.tableName !== '') ? newModel.tableName : (<any>this.theGrid.model).prototype.tableName;\n        const pkField = (newModel.tableName !== '') ? newModel.primaryKey_ : (<any>this.theGrid.model).prototype.primaryKey_;\n        if (pkField && pkField !== '' && tableName && tableName !== '') {\n            const queryItems = [];\n            records.forEach(id => {\n                queryItems.push(tableName + '.' + pkField + ';=;' + id + ';OR');\n            });\n            this.refreshGrid({ query: queryItems });\n        }\n\n    }\n}\n","import { Component, Input } from '@angular/core';\n\nimport { FourDModel } from '../js44D/JSFourDModel';\nimport { ICustomModal } from '../angular2-modal/models/ICustomModal';\nimport { ICustomModalComponent } from '../angular2-modal/models/ICustomModalComponent';\nimport { ModalDialogInstance } from '../angular2-modal/models/ModalDialogInstance';\n\n@Component({\n    selector: 'record-edit-window',\n    template: ''\n})\n\nexport class RecordEditWindow implements ICustomModalComponent {\n\n    @Input() public currentRecord: any; // the Record Edit Window FourDModel\n\n\n    public dialog: ModalDialogInstance;\n\n\n    public set modelContentData(v: ICustomModal) {\n        this.currentRecord = <FourDModel>v;\n    }\n\n    saveRecord() {\n        if (this.currentRecord.isRecordLoaded()) {\n            this.currentRecord.updateRecord()\n                .then(() => { this.dialog.close('recordSaved'); })\n                .catch((reason) => { alert(reason); });\n        } else {\n            this.currentRecord.insertRecord()\n                .then((recnum) => { this.dialog.close('recordSaved'); })\n                .catch((reason) => { alert(reason); });\n        };\n    }\n\n}\n","import { Component, Injectable, Input, Output, EventEmitter } from '@angular/core';\n\n\n@Component({\n  selector: 'tabs',\n  template: `\n    <ul class=\"nav nav-tabs\">\n      <li *ngFor=\"let tab of tabs\" (click)=\"selectTab($event,tab)\" [class.active]=\"tab.active\">\n        <a href=\"#\">{{tab.title}}</a>\n      </li>\n    </ul>\n    <ng-content></ng-content>\n  `\n})\n@Injectable()\nexport class Tabs {\n\n  @Output() public change: EventEmitter<any> = new EventEmitter();\n\n  tabs: Tab[] = [];\n\n  public selectTab(event, tab) {\n    event.preventDefault();\n\n    this.selectThisTab(tab);\n\n  }\n\n  public selectThisTab(tab) {\n    this.tabs.forEach((tabItem) => tabItem.active = false);\n    tab.active = true;\n\n    this.change.emit();\n  }\n\n\n  public addTab(tab: Tab) {\n    if (this.tabs.length === 0) {\n      tab.active = true;\n    }\n    this.tabs.push(tab);\n  }\n\n  public get selectedIndex():number {\n    let selected = -1;\n    for (let index = 0; index < this.tabs.length; index++) {\n      if (this.tabs[index].active) selected = index;\n    }\n    return selected;\n  }\n}\n\n@Component({\n  selector: 'tab',\n  template: `\n    <div  [hidden]=\"!active\"  class=\"tabPane\">\n      <ng-content></ng-content>\n    </div>\n  `\n})\n@Injectable()\nexport class Tab {\n  @Input() title: string;\n  @Input() active: Boolean = false;\n\n  constructor(tabs: Tabs) {\n\n    tabs.addTab(this);\n\n  }\n}\n\n","import { Component, Input } from '@angular/core';\n\nimport { ModalDialogInstance } from '../angular2-modal/models/ModalDialogInstance';\nimport { ICustomModalComponent } from '../angular2-modal/models/ICustomModalComponent';\nimport { ICustomModal } from '../angular2-modal/models/ICustomModal';\nimport { ModalConfig } from '../angular2-modal/models/ModalConfig';\n\nimport { FourDInterface, MD5 } from '../js44D/JSFourDInterface';\n\n\n@Component({\n    selector: 'log-in',\n    template: `\n    <div class=\"login container\">\n    <form class=\"form-vertical\" role=\"form\" (submit)=\"login()\">\n        <label style=\"padding-bottom:40px;font-size:32pt;font-weight:bold;color:#7F7F6F;\">Welcome, Please Login</label>\n        <div class=\"form-group\" style=\"margin-left: 20px;\">\n            <label class=\"fieldPrompt\" style=\"font-weight:bold;width:90px;\" for=\"username\">User Name</label>\n            <input type=\"text\" class=\"fieldEntry\" style=\"width:300px;\" id=\"username\" name=\"username\" placeholder=\"Username\" [(ngModel)]=\"username\" (focus)=\"showError = false;\">\n        </div>\n        <div class=\"form-group\" style=\"margin-left: 20px;\">\n            <label class=\"fieldPrompt\" style=\"font-weight:bold;width:90px;\" for=\"password\">Password</label>\n            <input type=\"password\" class=\"fieldEntry\" style=\"width:300px;\" id=\"password\" name=\"password\" placeholder=\"Password\" [(ngModel)]=\"password\">\n        </div>\n        <button type=\"submit\" class=\"regularButton\" style=\"width:100px;margin-left: 30px;\">Login</button>\n    </form>\n    <div class=\"alert alert-warning\" style=\"width: 500px;\" [hidden]=\"!showError\">Sorry, the username and/or password was incorrect</div>\n\n    <div style=\"color:green;margin-top:100px;\">4D: {{fourDVersion}}, web: {{webAppVersion}}</div>\n</div>\n\n    `,\n    styles: [`\n    .login {\n        width: 1070px !important;\n        background: url(\"/assets/login_splash.png\");\n        background-repeat: no-repeat;\n        height: 670px !important;\n        padding-left: 200px;\n        padding-top: 200px;\n    }\n    `]\n})\nexport class LoginCmp implements ICustomModalComponent {\n    public static dialogConfig: ModalConfig = <ModalConfig>{\n        size: 'sm',\n        selfCentered: true,\n        isResizable: false,\n        isModal: true,\n        isBlocking: true,\n        title: 'Login',\n        width: 1063, height: 667\n    };\n\n    @Input() public username = '';\n    @Input() public password = '';\n    @Input() public showError = false;\n    @Input() public fourDVersion = '';\n    @Input() public webAppVersion = '1.18.02.16a';\n\n\n    public set modelContentData(parms: ICustomModal) {\n        if (parms) {\n            if (parms.hasOwnProperty('version')) {\n                this.webAppVersion = parms['version'];\n            }\n        }\n    }\n\n    constructor(public dialog: ModalDialogInstance, private fourD: FourDInterface) {\n        this.fourD.call4DRESTMethod('REST_GetApplicationVersion', {}, { responseType: 'text' })\n            .subscribe((v) => {\n                this.fourDVersion = v;\n            });\n    }\n\n    login() {\n        // event.preventDefault();\n        const md5pwd: string = MD5.md5(this.password);\n        this.fourD.signIn(this.username, md5pwd.toUpperCase())\n            .then((authentication) => {\n                if (FourDInterface.authentication) {\n                    //  console.log('authenticated');\n\n                    this.showError = false;\n                    if (this.dialog) { this.dialog.close('loggedin'); }\n                } else {\n                    console.log('oops');\n                    this.showError = true;\n                }\n            })\n            .catch((e) => {\n                //console.log(e);\n                this.showError = true;\n            });\n    }\n}\n","import { Component, ViewEncapsulation, ViewContainerRef, EventEmitter, AfterContentInit, Input, Output } from '@angular/core';\n\nimport { LoginCmp } from '../login/login';\nimport { Modal } from '../angular2-modal/providers/Modal';\nimport { FourDInterface } from '../js44D/JSFourDInterface';\n\n@Component({\n    selector: 'web-application',\n    template: '<section class=\"webComponent\" [hidden]=\"!userIsLoggedIn\"><ng-content></ng-content></section>',\n    encapsulation: ViewEncapsulation.None,\n    providers: [Modal]\n})\n\n\nexport class WebAppContainer implements AfterContentInit {\n\n    @Input() public userIsLoggedIn = false;\n\n    @Output() public userHasLoggedIn: EventEmitter<any> = new EventEmitter();\n\n    private urlSearchParms: any = {};\n\n    constructor(public modal: Modal, private elementRef: ViewContainerRef, private fourD: FourDInterface/*, private win:WindowService*/) {\n        const win = window;\n        if (win && win.location && win.location.search) {\n            const url = win.location.search.substr(1); // get incoming url and parse search params\n            url.split('&').forEach(element => {\n                const item = element.split('=');\n                if (item.length === 2) {\n                    this.urlSearchParms[item[0]] = item[1];\n                } else {\n                    this.urlSearchParms[element] = true;\n                }\n            });\n        }\n    }\n\n    showLoginDialog() {\n        this.modal.openInside(<any>LoginCmp, this.elementRef, null, LoginCmp.dialogConfig)\n            .then((result) => {\n                this.userIsLoggedIn = true;\n                this.userHasLoggedIn.emit(FourDInterface.currentUser);\n            });\n\n\n    }\n\n    ngAfterContentInit() {\n        if (!FourDInterface.authentication) {\n            if (this.urlSearchParms.hasOwnProperty('key')) {\n                try {\n                    const key = JSON.parse(atob(this.urlSearchParms['key']));\n                    this.fourD.signIn(key.username, key.password)\n                        .then((authentication) => {\n                            if (FourDInterface.authentication) {\n                                this.userIsLoggedIn = true;\n                                this.userHasLoggedIn.emit(FourDInterface.currentUser);\n                            }\n                        })\n                        .catch(e => { this.showLoginDialog(); });\n                } catch (error) {\n                    this.showLoginDialog();\n                }\n            } else {\n                // no predefined user, login...\n                this.showLoginDialog();\n            }\n        } else {\n            this.userIsLoggedIn = true;\n            this.userHasLoggedIn.emit(FourDInterface.currentUser);\n        }\n    }\n\n}\n","import { Component, Input, Injectable, AfterViewInit } from '@angular/core';\n\n\nimport { FourDInterface } from '../js44D/JSFourDInterface';\n\n@Component({\n    selector: 'fourd-dropdown',\n    styles: [`.fourDDropdown {\n                margin: inherit;\n                width: inherit;\n                padding: inherit;\n                font-size: inherit;\n                border: 1px solid #ccc;\n                height: inherit;\n                }\n            `],\n    template: `\n        <select  #selector class='fourDDropdown' (change)=\"selectedValue = $event.target['value']\" [value]='selectedValue' [disabled]=\"disabled\">\n            <option *ngFor='let item of listOptions' value='{{item}}' [selected]='isItemSelected(item)'>{{item}}</option>\n        </select>\n       `\n})\n\n@Injectable()\nexport class FourDDropDown implements AfterViewInit {\n    @Input() public listName: string;\n    @Input() public selectedValue: string;\n    @Input() public disabled: boolean = false;\n    @Input() public listOptions: Array<string> = [];\n\n    constructor(private fourD: FourDInterface) { }\n\n    ngAfterViewInit() {\n        if (FourDInterface.authentication !== undefined && FourDInterface.authentication !== null) {\n            this.loadListFrom4D();\n        } else {\n            FourDInterface.userHasSignedIn.subscribe(user => {\n                this.loadListFrom4D();\n            })\n        }\n    }\n\n    isItemSelected(item: string): string {\n        return (item === this.selectedValue) ? 'selected' : '';\n    }\n\n    private loadListFrom4D() {\n        if (this.listName) {\n            this.fourD.get4DList(this.listName)\n                .then((values) => {\n                    this.listOptions = ['', ...values];\n                })\n                .catch((reason) => { console.log('error', reason); });\n        }\n\n    }\n\n}\n","\nimport {debounceTime, distinctUntilChanged} from 'rxjs/operators';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { UntypedFormControl } from '@angular/forms';\n\n\n\n\n@Component({\n    selector: 'quickfind-input',\n    template: `<input type=\"search\" name=\"quickFind\" [formControl]=\"quickFind\"/>`\n})\n\nexport class QuickFindInput {\n\n    @Input() public quickFind = new UntypedFormControl();\n\n    @Output() public runQuickFinder: EventEmitter<any> = new EventEmitter();\n\n    constructor() {\n        this.quickFind.valueChanges.pipe(distinctUntilChanged(),debounceTime(1500)).subscribe(query => {\n            this.runQuickFinder.emit(query);\n        });\n    }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\n\n/*\n * Convert a Base64 Image string into an embedded Image URL \n * Usage:\n *   value | base64ImageRef {:type}\n * Parameters:\n *   optional image type parameter, default is \"jpeg\"\n*/\n@Pipe({name: 'base64ImageRef'})\nexport class Base64ImageRef implements PipeTransform {\n  transform(value: string, imageType: string = 'jpeg'): SafeResourceUrl {\n    return this.sanitizer.bypassSecurityTrustResourceUrl('data:image/'+imageType+';base64,'+value);\n  }\n\n  constructor(private sanitizer: DomSanitizer) {}\n}","import { Pipe, PipeTransform } from \"@angular/core\";\n\n/*\n * Convert a 4D Date string into Locale Date String \n * Usage:\n *   value | fourDDateToLocaleString \n * \n*/\n@Pipe({name: 'fourDDateToString'})\nexport class FourDDateToString implements PipeTransform {\n    transform(value): string {\n        if (value) {\n            if (typeof (value) === 'string' && value !== '') {\n                const date = new Date(value.replace(/-/g, '\\/'));\n                return date.toLocaleDateString();\n            } else return value.toLocaleDateString();\n        } else return ''; // handle case where date field is null/undefined\n      }\n}\n","import { Component, Input, Injectable, AfterViewInit } from '@angular/core';\n\n\nimport { FourDInterface } from '../js44D/JSFourDInterface';\n\n@Component({\n    selector: 'fourd-registry-input',\n    template: `\n        <span [ngSwitch]=\"inputType\" style=\"width:inherit\">\n            <input *ngSwitchCase=\"'text'\"  type=\"text\" [(ngModel)]=\"textValue\" (change)=\"valueChanged()\" style=\"width:inherit\"/>\n            <input *ngSwitchCase=\"'checkbox'\"  type=\"checkbox\" [(ngModel)]=\"booleanValue\" (change)=\"valueChanged()\" style=\"width:inherit\"/>\n        </span>\n       `\n})\n\n@Injectable()\nexport class FourDRegistryInput implements AfterViewInit {\n\n    @Input() public className: string;\n    @Input() public parameterValue: string;\n    @Input() public selectorValue: string;\n    @Input() public defaultValue: string;\n    @Input() public inputType: string;\n    \n    public textValue: string = '';\n    public booleanValue: boolean = false;\n    private originalValue: string = '';\n    \n    constructor(private fourD: FourDInterface) { }\n\n    ngAfterViewInit() {\n        if (FourDInterface.authentication !== undefined && FourDInterface.authentication !== null) {\n            this.loadValueFrom4D();\n        } else {\n            FourDInterface.userHasSignedIn.subscribe(() => {\n                this.loadValueFrom4D();\n            })\n        }\n    }\n\n    public valueChanged() {\n        if (this.inputType === 'checkbox') {\n            this.textValue = (this.booleanValue)?'Y':'N';\n        }\n        if (this.originalValue != this.textValue) {\n            this.fourD.setRegistryValue(this.className, this.parameterValue, this.textValue, this.selectorValue)\n                .then (v => {this.originalValue = this.textValue;});\n        }\n    }\n\n    private loadValueFrom4D() {\n        if (this.className && this.className != '' && this.parameterValue && this.parameterValue != '') {\n            this.fourD.getRegistryValue(this.className, this.parameterValue, this.defaultValue, this.selectorValue)\n                .then((value) => {\n                    this.originalValue = this.textValue = value;\n                    this.booleanValue = (value.toUpperCase() == \"Y\");\n                })\n                .catch((reason) => { console.log('error', reason); });\n        }\n\n    }\n\n}\n","// angular\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { HttpClient, HttpClientModule } from '@angular/common/http';\n\nimport { FourDModule } from './fourD.module';\nimport { FourDInterface } from './js44D/JSFourDInterface';\n\nimport { QueryBand, CustomButtonBarDirective, QueryBandDirective } from './containers/queryBand';\nimport { AdvancedQueryComponent } from './containers/advancedQuery';\nimport { RecordList } from './containers/recordList';\nimport { RecordEditWindow } from './containers/recordEditWindow';\nimport { Tabs, Tab } from './containers/tabs';\nimport { WebAppContainer } from './containers/webAppContainer';\nimport { FourDDropDown } from './controls/fourDDropDown';\nimport { QuickFindInput } from './controls/quickFindInput';\nimport { DataGrid } from './dataGrid/dataGrid';\nimport { LoginCmp } from './login/login';\nimport { ListSelectorDialog } from './dialogs/listSelectorDialog';\n\nimport { Base64ImageRef } from './pipes/Base64ImageRef.pipe';\nimport { FourDDateToString } from './pipes/FourDDateToString.pipe';\nimport { FourDRegistryInput } from './controls/fourDRegistryInput';\n\n\n@NgModule({\n    imports: [FormsModule, ReactiveFormsModule, CommonModule, HttpClientModule, FourDModule],\n    declarations: [\n        QueryBand, CustomButtonBarDirective, QueryBandDirective, AdvancedQueryComponent,\n        RecordEditWindow, RecordList, Tabs, Tab, WebAppContainer,\n        FourDDropDown, QuickFindInput, FourDRegistryInput,\n        DataGrid,\n        ListSelectorDialog,\n        Base64ImageRef,\n        FourDDateToString,\n        LoginCmp\n    ],\n    providers: [HttpClient, FourDInterface],\n    exports: [\n        QueryBand, CustomButtonBarDirective, QueryBandDirective, AdvancedQueryComponent,\n        RecordEditWindow, RecordList, Tabs, Tab, WebAppContainer,\n        FourDDropDown, QuickFindInput, FourDRegistryInput,\n        DataGrid,\n        ListSelectorDialog,\n        Base64ImageRef,\n        FourDDateToString,\n        LoginCmp\n    ]\n})\nexport class JS44DModule { }\n","import { Component } from '@angular/core';\n\nimport { ICustomModal } from '../models/ICustomModal';\nimport { ICustomModalComponent } from '../models/ICustomModalComponent';\nimport { ModalDialogInstance } from '../models/ModalDialogInstance';\n\n/**\n * Data definition\n */\nexport class OKOnlyContent {\n    constructor(\n        public title: string = 'Hello World Title',\n        public body: string = 'Hello World Body!',\n        public okText: string = 'OK'\n    ) { }\n}\n\n/**\n * A 2 state bootstrap modal window, representing 2 possible answer, true/false.\n */\n@Component({\n    selector: 'modal-content',\n    template:\n        `<div class=\"modal-header\">\n        <h3 class=\"modal-title\">{{context.title}}</h3>\n        </div>\n        <div class=\"modal-body\">{{context.body}}</div>\n        <div class=\"modal-footer\">\n            <button class=\"btn btn-primary\" (click)=\"ok()\">{{context.okText}}</button>\n        </div>`\n})\nexport class OKOnlyModal implements ICustomModalComponent {\n    dialog: ModalDialogInstance;\n    context: OKOnlyContent;\n\n    public set modelContentData(parms: ICustomModal) {\n        if (parms) {\n            this.context = <OKOnlyContent>parms;\n        }\n    }\n    constructor(dialog: ModalDialogInstance) {\n        this.dialog = dialog;\n    }\n\n    ok() {\n        this.dialog.close(true);\n    }\n}\n","import { Component } from '@angular/core';\n\n\nimport { ICustomModal } from '../models/ICustomModal';\nimport { ICustomModalComponent } from '../models/ICustomModalComponent';\nimport { ModalDialogInstance } from '../models/ModalDialogInstance';\n\n/**\n * Data definition\n */\nexport class YesNoModalContent {\n    constructor(\n        public title: string = 'Hello World Title',\n        public body: string = 'Hello World Body!',\n        public hideNo: boolean = false,\n        public yesText: string = 'YES',\n        public noText: string = 'NO'\n    ) { }\n}\n\n/**\n * A 2 state bootstrap modal window, representing 2 possible answer, true/false.\n */\n@Component({\n    selector: 'modal-content',\n    /* tslint:disable */ template:\n        `<div class=\"modal-header\">\n        <h3 class=\"modal-title\">{{context.title}}</h3>\n        </div>\n        <div class=\"modal-body\">{{context.body}}</div>\n        <div class=\"modal-footer\">\n            <button class=\"btn btn-primary\" (click)=\"ok($event)\">{{context.yesText}}</button>\n            <button [hidden]=\"context.hideNo\" class=\"btn btn-warning\" (click)=\"cancel()\">{{context.noText}}</button>\n        </div>`\n})\nexport class YesNoModal implements ICustomModalComponent {\n    dialog: ModalDialogInstance;\n    context: YesNoModalContent;\n\n    public set modelContentData(parms: ICustomModal) {\n        if (parms) {\n            this.context = <YesNoModalContent>parms;\n        }\n    }\n\n    constructor(dialog: ModalDialogInstance, ) {\n        this.dialog = dialog;\n    }\n\n    ok($event) {\n        $event.stopPropagation();\n        this.dialog.close(true);\n    }\n\n    cancel() {\n        this.dialog.close(false);\n    }\n}\n","\n/**\n * A Type used as a binding key for dialog window Components\n */\nexport class ICustomModal { }\n\n","// angular\nimport { NgModule } from '@angular/core';\n\nimport { ModalDialogInstance } from './angular2-modal/models/ModalDialogInstance';\nimport { Modal } from './angular2-modal/providers/Modal';\nimport { OKOnlyModal } from './angular2-modal/commonModals/okOnlyModal';\nimport { YesNoModal } from './angular2-modal/commonModals/yesNoModal';\nimport { ICustomModal } from './angular2-modal/models/ICustomModal';\n\n@NgModule({\n    declarations: [\n        OKOnlyModal, YesNoModal\n    ],\n    exports: [\n        OKOnlyModal, YesNoModal\n    ],\n    providers: [Modal, ModalDialogInstance, ICustomModal]\n})\nexport class ModalModule { }\n","import { ModalDialogInstance } from '../models/ModalDialogInstance';\n\n/**\n * A Type used as a binding key for dialog window Components\n */\n\nexport class ICustomModalComponent {\n    dialog: ModalDialogInstance;\n\n    /**\n     * Invoked before a modal is dismissed, return true to cancel dismissal.\n     */\n    beforeDismiss?(): boolean;\n\n    /**\n     * Invoked before a modal is closed, return true to cancel closing.\n     */\n    beforeClose?(): boolean;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1","i1.FourDInterface","i2.ModalDialogInstance","i1.ModalConfig","i1.ModalDialogInstance","i2.Modal","i1.Modal","i2.ListSelectorDialog","i2.FourDInterface","i2","i3"],"mappings":";;;;;;;;;;;AAAA;AACA;MACa,MAAM,CAAA;AAAnB,IAAA,WAAA,GAAA;;AAKC,QAAA,IAAqB,CAAA,qBAAA,GAAG,UAAU,OAAO,EAAA;AACxC,YAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACxB,SAAC,CAAC;KAkHF;;;;;IAlGO,OAAO,MAAM,CAAC,KAAK,EAAA;AACzB,QAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AACnB,aAAA,OAAO,CAAC,MAAM,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;AAC7C,QAAA,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAC1B,QAAA,IAAI,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE;YACpB,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAClC,YAAA,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AACtB,SAAA;AACD,QAAA,IACC,MAAM,GAAG,CAAC,IAAI,CAAC;;AAEf,YAAA,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAC3B;AACD,YAAA,MAAM,CAAC,KAAK,CACX,uEAAuE,CACvE,CAAC;AACF,SAAA;QACD,IAAI,UAAU,GAAG,CAAC,CAAC;AACnB,QAAA,IAAI,UAAU,CAAC;AACf,QAAA,IAAI,MAAM,CAAC;QACX,IAAI,MAAM,GAAG,EAAE,CAAC;AAChB,QAAA,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;AAClB,QAAA,OAAO,EAAE,QAAQ,GAAG,MAAM,EAAE;AAC3B,YAAA,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AACtD,YAAA,UAAU,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,EAAE,GAAG,MAAM,GAAG,MAAM,CAAC;;AAEhE,YAAA,IAAI,UAAU,EAAE,GAAG,CAAC,EAAE;;AAErB,gBAAA,MAAM,IAAI,MAAM,CAAC,YAAY,CAC5B,IAAI,GAAG,UAAU,KAAK,CAAC,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC,CAC1C,CAAC;AACF,aAAA;AACD,SAAA;AACD,QAAA,OAAO,MAAM,CAAC;KACd;;;;IAIM,OAAO,MAAM,CAAC,KAAK,EAAA;AACzB,QAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AACtB,QAAA,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;;;YAG7B,MAAM,CAAC,KAAK,CACX,8DAA8D;AAC9D,gBAAA,eAAe,CACf,CAAC;AACF,SAAA;AACD,QAAA,IAAI,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAC/B,IAAI,MAAM,GAAG,EAAE,CAAC;AAChB,QAAA,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;AAClB,QAAA,IAAI,CAAC,CAAC;AACN,QAAA,IAAI,CAAC,CAAC;AACN,QAAA,IAAI,CAAC,CAAC;AACN,QAAA,IAAI,CAAC,CAAC;AACN,QAAA,IAAI,MAAM,CAAC;;AAEX,QAAA,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC;AAEpC,QAAA,OAAO,EAAE,QAAQ,GAAG,MAAM,EAAE;;YAE3B,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACrC,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YACtC,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAC;AACjC,YAAA,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;;;AAGnB,YAAA,MAAM,KACL,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,GAAG,IAAI,CAAC;gBACxC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,GAAG,IAAI,CAAC;gBACxC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC;gBACvC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAClC,CAAC;AACF,SAAA;QAED,IAAI,OAAO,IAAI,CAAC,EAAE;YACjB,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACpC,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAC;AACjC,YAAA,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;YACf,MAAM,KACL,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;AACjC,gBAAA,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC;AACzC,gBAAA,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC;AACzC,gBAAA,GAAG,CACH,CAAC;AACF,SAAA;aAAM,IAAI,OAAO,IAAI,CAAC,EAAE;AACxB,YAAA,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACpC,MAAM,KACL,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;AAChC,gBAAA,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC;AACzC,gBAAA,IAAI,CACJ,CAAC;AACF,SAAA;AAED,QAAA,OAAO,MAAM,CAAC;KACd;;;AA7Gc,MAAK,CAAA,KAAA,GAAG,UAAU,OAAO,EAAA;;;AAGvC,IAAA,MAAM,IAAI,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEa,MAAK,CAAA,KAAA,GAAG,kEAAkE,CAAC;AAC1F;AACe,MAAsB,CAAA,sBAAA,GAAG,cAAc;;ACnBvD;AACA;MACa,IAAI,CAAA;;IAIR,OAAO,UAAU,CAAC,MAAM,EAAA;QAC/B,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,OAAO,GAAG,CAAC,CAAC;AAChB,QAAA,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAC3B,QAAA,IAAI,KAAK,CAAC;AACV,QAAA,IAAI,KAAK,CAAC;QACV,OAAO,OAAO,GAAG,MAAM,EAAE;YACxB,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;YACrC,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,OAAO,GAAG,MAAM,EAAE;;gBAE3D,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;gBACrC,IAAI,CAAC,KAAK,GAAG,MAAM,KAAK,MAAM,EAAE;oBAC/B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,KAAK,EAAE,KAAK,KAAK,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC;AACjE,iBAAA;AAAM,qBAAA;;;AAGN,oBAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnB,oBAAA,OAAO,EAAE,CAAC;AACV,iBAAA;AACD,aAAA;AAAM,iBAAA;AACN,gBAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnB,aAAA;AACD,SAAA;AACD,QAAA,OAAO,MAAM,CAAC;KACd;;IAGO,OAAO,UAAU,CAAC,KAAK,EAAA;AAC9B,QAAA,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAC1B,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;AACf,QAAA,IAAI,KAAK,CAAC;QACV,IAAI,MAAM,GAAG,EAAE,CAAC;AAChB,QAAA,OAAO,EAAE,KAAK,GAAG,MAAM,EAAE;AACxB,YAAA,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;YACrB,IAAI,KAAK,GAAG,MAAM,EAAE;gBACnB,KAAK,IAAI,OAAO,CAAC;AACjB,gBAAA,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,KAAK,EAAE,GAAG,KAAK,GAAG,MAAM,CAAC,CAAC;AAC7D,gBAAA,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;AAC/B,aAAA;AACD,YAAA,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACrC,SAAA;AACD,QAAA,OAAO,MAAM,CAAC;KACd;IAEO,OAAO,gBAAgB,CAAC,SAAS,EAAA;AACxC,QAAA,IAAI,SAAS,IAAI,MAAM,IAAI,SAAS,IAAI,MAAM,EAAE;AAC/C,YAAA,MAAM,KAAK,CACV,mBAAmB,GAAG,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE;AAC1D,gBAAA,wBAAwB,CACxB,CAAC;AACF,SAAA;KACD;;AAGO,IAAA,OAAO,UAAU,CAAC,SAAS,EAAE,KAAK,EAAA;AACzC,QAAA,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC;KACjE;IAEO,OAAO,eAAe,CAAC,SAAS,EAAA;QACvC,IAAI,CAAC,SAAS,GAAG,UAAU,KAAK,CAAC,EAAE;AAClC,YAAA,OAAO,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;AACtC,SAAA;QACD,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,SAAS,GAAG,UAAU,KAAK,CAAC,EAAE;AAClC,YAAA,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC;AAC/D,SAAA;aACI,IAAI,CAAC,SAAS,GAAG,UAAU,KAAK,CAAC,EAAE;AACvC,YAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;AACjC,YAAA,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC;YAChE,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AACxC,SAAA;aACI,IAAI,CAAC,SAAS,GAAG,UAAU,KAAK,CAAC,EAAE;AACvC,YAAA,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC;YAChE,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YACzC,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AACxC,SAAA;AACD,QAAA,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC;AACzD,QAAA,OAAO,MAAM,CAAC;KACd;IAEM,OAAO,UAAU,CAAC,MAAM,EAAA;QAC9B,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AACzC,QAAA,IAAI,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;AAC/B,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;AACf,QAAA,IAAI,SAAS,CAAC;QACd,IAAI,UAAU,GAAG,EAAE,CAAC;AACpB,QAAA,OAAO,EAAE,KAAK,GAAG,MAAM,EAAE;AACxB,YAAA,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;AAC9B,YAAA,UAAU,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;AAC9C,SAAA;AACD,QAAA,OAAO,UAAU,CAAC;KAClB;;AAIO,IAAA,OAAO,oBAAoB,GAAA;AAClC,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE;AACrC,YAAA,MAAM,KAAK,CAAC,oBAAoB,CAAC,CAAC;AAClC,SAAA;AAED,QAAA,IAAI,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;QAC7D,IAAI,CAAC,SAAS,EAAE,CAAC;AAEjB,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,KAAK,IAAI,EAAE;YACtC,OAAO,gBAAgB,GAAG,IAAI,CAAC;AAC/B,SAAA;;AAGD,QAAA,MAAM,KAAK,CAAC,2BAA2B,CAAC,CAAC;KACzC;AAEO,IAAA,OAAO,YAAY,GAAA;AAC1B,QAAA,IAAI,KAAK,CAAC;AACV,QAAA,IAAI,KAAK,CAAC;AACV,QAAA,IAAI,KAAK,CAAC;AACV,QAAA,IAAI,KAAK,CAAC;AACV,QAAA,IAAI,SAAS,CAAC;AAEd,QAAA,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AACpC,YAAA,MAAM,KAAK,CAAC,oBAAoB,CAAC,CAAC;AAClC,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE;AACrC,YAAA,OAAO,KAAK,CAAC;AACb,SAAA;;QAGD,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;QAC9C,IAAI,CAAC,SAAS,EAAE,CAAC;;AAGjB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE;AACxB,YAAA,OAAO,KAAK,CAAC;AACb,SAAA;;AAGD,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,IAAI,EAAE;AAC3B,YAAA,KAAK,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AACpC,YAAA,SAAS,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC;YAC1C,IAAI,SAAS,IAAI,IAAI,EAAE;AACtB,gBAAA,OAAO,SAAS,CAAC;AACjB,aAAA;AAAM,iBAAA;AACN,gBAAA,MAAM,KAAK,CAAC,2BAA2B,CAAC,CAAC;AACzC,aAAA;AACD,SAAA;;AAGD,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,IAAI,EAAE;AAC3B,YAAA,KAAK,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AACpC,YAAA,KAAK,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AACpC,YAAA,SAAS,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC;YAC1D,IAAI,SAAS,IAAI,MAAM,EAAE;AACxB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;AACjC,gBAAA,OAAO,SAAS,CAAC;AACjB,aAAA;AAAM,iBAAA;AACN,gBAAA,MAAM,KAAK,CAAC,2BAA2B,CAAC,CAAC;AACzC,aAAA;AACD,SAAA;;AAGD,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,IAAI,EAAE;AAC3B,YAAA,KAAK,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AACpC,YAAA,KAAK,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AACpC,YAAA,KAAK,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AACpC,YAAA,SAAS,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC;AACrD,iBAAC,KAAK,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC;AACzB,YAAA,IAAI,SAAS,IAAI,QAAQ,IAAI,SAAS,IAAI,QAAQ,EAAE;AACnD,gBAAA,OAAO,SAAS,CAAC;AACjB,aAAA;AACD,SAAA;AAED,QAAA,MAAM,KAAK,CAAC,wBAAwB,CAAC,CAAC;KACtC;IAMM,OAAO,UAAU,CAAC,UAAU,EAAA;QAElC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;AACvC,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,UAAU,GAAG,EAAE,CAAC;AACpB,QAAA,IAAI,GAAG,CAAC;QACR,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM,KAAK,EAAE;AAC7C,YAAA,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrB,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;KACnC;AAGD;;AC/LD;AACA;AACA;AACA;;AAEG;AAEI,IAAI,kBAAkB,GAAG,UAAU,GAAQ,EAAA;IAC9C,MAAM,GAAG,GAAe,EAAE,CAAC;AAC3B,IAAA,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE;AACjB,QAAA,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;AACvB,YAAA,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE,SAAA;AACJ,KAAA;AACD,IAAA,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC,CAAC;AAEF;AACA;;AAEG;AACI,IAAI,aAAa,GAAG,UAAU,QAAa,EAAA;IAC9C,IAAI,KAAK,GAAG,EAAE,CAAC;AACf,IAAA,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE;AACxB,QAAA,IAAI,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;YAC9B,IAAI,KAAK,KAAK,EAAE,EAAE;gBAAE,KAAK,IAAI,GAAG,CAAC;AAAE,aAAA;YACnC,KAAK,IAAI,GAAG,GAAG,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;AACtC,SAAA;AACJ,KAAA;;AAGD,IAAA,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC,CAAC;AACF;AAIA;;AAEG;AACH;MAEa,cAAc,CAAA;AA6DtB;;AAEG;AACJ,IAAA,WAAA,CAAwC,UAAqB,EAAA;AAArB,QAAA,IAAU,CAAA,UAAA,GAAV,UAAU,CAAW;AACzD,QAAA,cAAc,CAAC,iBAAiB,GAAG,IAAI,CAAC;KAC3C;IAxCM,WAAW,QAAQ,GAAW,EAAA,OAAO,cAAc,CAAC,SAAS,CAAA,EAAC;IAC9D,WAAW,QAAQ,CAAE,GAAG,EAAA;AAC3B,QAAA,cAAc,CAAC,SAAS,GAAG,GAAG,CAAC;QAC/B,IAAI,cAAc,CAAC,iBAAiB,EAAE;AAClC,YAAA,cAAc,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,oBAAoB,EAAC,EAAE,EAAE,EAAC,YAAY,EAAC,MAAM,EAAC,CAAC;AAChG,iBAAA,SAAS,CAAC,CAAC,CAAC,KAAM,EAAA,cAAc,CAAC,eAAe,GAAG,CAAC,CAAC,EAAC,CAAC,CAAC;AAC5D,SAAA;KACJ;AAoCD;;;;;;;;AAQG;IACI,gBAAgB,CAAC,WAAmB,EAAE,IAAS,EAAE,OAAa,EAAE,eAAsB,IAAI,EAAA;AAC7F,QAAA,IAAI,cAAc,GAAG,EAAE,cAAc,EAAE,mCAAmC,EAAE,CAAC;AAC7E,QAAA,IAAI,YAAY,EAAE;AACd,YAAA,cAAc,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAC;AAC3C,SAAA;AAAM,aAAA;AACH,YAAA,cAAc,CAAC,QAAQ,CAAC,GAAG,uGAAuG,CAAC;AACtI,SAAA;AAED,QAAA,IAAI,OAAO,EAAE;YACT,OAAO,CAAC,OAAO,GAAG,IAAI,WAAW,CAAC,cAAc,CAAC,CAAC;AACrD,SAAA;;YAAM,OAAO,GAAG,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC;AAE9D,QAAA,IAAI,CAAC,UAAU,GAAG,cAAc,CAAC,UAAU,CAAC;AAC5C,QAAA,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QAEhC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,GAAG,YAAY,GAAG,WAAW,EAAE,kBAAkB,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;KAExH;AAED;;;;;;AAMG;AACI,IAAA,cAAc,CAAC,GAAW,EAAA;AAC7B,QAAA,MAAM,IAAI,GAAQ,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;AAC/D,QAAA,IAAI,CAAC,UAAU,GAAG,cAAc,CAAC,UAAU,CAAC;AAC5C,QAAA,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;AAEhC,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,GAAG,6BAA6B,EAC/E,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;KAErC;AAGD;;;;;;;;AAQG;IACI,MAAM,CAAC,IAAI,EAAE,GAAG,EAAA;AACnB,QAAA,cAAc,CAAC,WAAW,GAAG,IAAI,CAAC;AAClC,QAAA,cAAc,CAAC,mBAAmB,GAAG,GAAG,CAAC;;AAGzC,QAAA,cAAc,CAAC,cAAc,GAAG,IAAI,CAAC;AACrC,QAAA,cAAc,CAAC,aAAa,GAAG,CAAC,CAAC;AACjC,QAAA,cAAc,CAAC,UAAU,GAAG,EAAE,CAAC;AAE/B,QAAA,MAAM,IAAI,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAE/G,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACnC,YAAA,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,IAAI,CAAC;iBAC3C,SAAS,CAAC,UAAU,IAAG;gBACpB,IAAI,UAAU,CAAC,KAAK,EAAE;AAClB,oBAAA,cAAc,CAAC,WAAW,GAAG,IAAI,CAAC;AAClC,oBAAA,cAAc,CAAC,mBAAmB,GAAG,GAAG,CAAC;oBACzC,cAAc,CAAC,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC;oBACnD,cAAc,CAAC,aAAa,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;oBAClE,cAAc,CAAC,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC;oBAEnD,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;AAEhE,oBAAA,OAAO,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;AAE1C,iBAAA;AAAM,qBAAA;AACH,oBAAA,MAAM,CAAC,oCAAoC,GAAG,UAAU,CAAC,CAAC;AAC7D,iBAAA;aACJ,EACD,KAAK,IAAG;AACJ,gBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC9C,MAAM,CAAC,KAAK,CAAC,CAAC;AAClB,aAAC,CACA,CAAC;AAEV,SAAC,CAAC,CAAC;KACN;AAGD;;;;;;;;AAQG;AACI,IAAA,cAAc,CAAC,SAAgB,EAAE,KAAiB,EAAE,SAAiB,IAAI,EAAA;AAC5E,QAAA,IAAI,IAAI,GAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAC,CAAC;AAC5E,QAAA,IAAI,MAAM,EAAE;AAAE,YAAA,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;AAAE,SAAA;QAE5C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;;AAEnC,YAAA,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,IAAI,CAAC;iBAC3C,SAAS,CAAC,UAAU,IAAG;AACpB,gBAAA,IAAI,UAAU,IAAI,UAAU,CAAC,KAAK,EAAE;AAChC,oBAAA,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAChC,iBAAA;;AAAM,oBAAA,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;aAEpC,EACG,KAAK,IAAG;AACJ,gBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC;gBAC9B,MAAM,CAAC,KAAK,CAAC,CAAC;AAClB,aAAC,CAAC,CAAC;AACf,SAAC,CAAC,CAAC;KAEN;AAED;;;;;;;AAOI;AACG,IAAA,SAAS,CAAC,QAAgB,EAAA;AAC7B,QAAA,IAAI,cAAc,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;YACrC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAO,EAAA,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC9F,SAAA;AAED,QAAA,MAAM,IAAI,GAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAErC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACnC,YAAA,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,IAAI,CAAC;iBACxC,SAAS,CAAC,UAAU,IAAG;AACpB,gBAAA,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC;AACrC,gBAAA,cAAc,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC;gBACjD,OAAO,CAAC,UAAU,CAAC,CAAC;aACvB,EACD,KAAK,IAAG;AACJ,gBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC9C,MAAM,CAAC,KAAK,CAAC,CAAC;AAClB,aAAC,CAAC,CAAC;AAEX,SAAC,CAAC,CAAC;KAEN;AAED;;;;;AAKG;IACI,YAAY,CAAC,QAAgB,EAAE,SAAwB,EAAA;AAC1D,QAAA,MAAM,IAAI,GAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAE3H,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACnC,YAAA,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;AACrE,iBAAA,SAAS,CACV,QAAQ,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAC9B,KAAK,IAAG;AACJ,gBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC9C,MAAM,CAAC,KAAK,CAAC,CAAC;AAClB,aAAC,CAAC,CAAC;AAEX,SAAC,CAAC,CAAC;KAEN;AAED;;;;;;;;AAQG;IACI,iBAAiB,CAAC,QAAgB,EAAE,QAAgB,EAAA;QAEvD,MAAM,IAAI,GAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;QAE7D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACnC,YAAA,IAAI,CAAC,gBAAgB,CAAC,wBAAwB,EAAE,IAAI,CAAC;iBAChD,SAAS,CAAC,UAAU,IAAG;AACpB,gBAAA,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;aAC9B,EACD,KAAK,IAAG;AACJ,gBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC9C,MAAM,CAAC,KAAK,CAAC,CAAC;AAClB,aAAC,CAAC,CAAC;AAEX,SAAC,CAAC,CAAC;KAEN;AAED;;;;;;;;;;;;AAYG;IACI,gBAAgB,CAAC,QAAgB,EACpC,YAAoB,EACpB,eAA0B,GAAA,EAAE,EAC5B,WAAA,GAAsB,EAAE,EAAA;QACxB,IAAI,IAAI,GAAQ,EAAE,CAAC;AACnB,QAAA,KAAK,IAAI,IAAI,cAAc,CAAC,cAAc,EAAE;AACxC,YAAA,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,KAAK,YAAY,IAAI,IAAI,CAAC,QAAQ,KAAK,WAAW,EAAE;gBAC7F,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI,EAAG,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;AAC7E,aAAA;AACJ,SAAA;AAED,QAAA,MAAM,IAAI,GAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;QAErH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACnC,YAAA,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;iBACzE,SAAS,CACV,QAAQ,IAAG;AACP,gBAAA,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;AAC9B,gBAAA,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzC,gBAAA,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;aAC/B,EACD,KAAK,IAAG;AACJ,gBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC9C,MAAM,CAAC,KAAK,CAAC,CAAC;AAClB,aAAC,CAAC,CAAC;AAEX,SAAC,CAAC,CAAC;KAEN;AAGD;;;;;;;;AAQE;IACK,gBAAgB,CAAC,QAAgB,EAAE,YAAoB,EAAE,QAAgB,EAAE,cAAsB,EAAE,EAAA;AACtG,QAAA,MAAM,IAAI,GAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;QAEvG,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACnC,YAAA,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;iBACzE,SAAS,CACV,QAAQ,IAAG;AACP,gBAAA,cAAc,CAAC,cAAc,GAAG,EAAE,CAAC;gBACnC,OAAO,CAAC,IAAI,CAAC,CAAC;aACjB,EACD,KAAK,IAAG;AACJ,gBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC9C,MAAM,CAAC,KAAK,CAAC,CAAC;AAClB,aAAC,CAAC,CAAC;AAEX,SAAC,CAAC,CAAC;KAEN;AAED;;;;;;AAMG;AACI,IAAA,cAAc,CAAC,OAAa,EAAA;AAE/B,QAAA,OAAO,CAAC,OAAO,IAAI,CAAC,KAAK,CAAM,OAAO,CAAC,IAAE,OAAO,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,GAAC,UAAU,CAAC;KACxG;AAED;;;;;;AAMG;AACI,IAAA,eAAe,CAAC,OAAe,EAAA;AAClC,QAAA,IAAI,OAAO,IAAI,OAAO,IAAI,EAAE,EAAE;AAC1B,YAAA,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAC,CAAC,CAAC,GAAC,GAAG,GAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAC,CAAC,CAAC,GAAC,GAAG,GAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;AACtF,YAAA,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;AAC9B,SAAA;AAAM,aAAA;AACH,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;KACJ;AAED;;;;;;AAMG;AACI,IAAA,cAAc,CAAC,OAAa,EAAA;AAC/B,QAAA,IAAI,OAAO,IAAI,CAAC,KAAK,CAAM,OAAO,CAAC,EAAE;AACjC,YAAA,IAAI,OAAO,GAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAE,GAAG,GAAC,OAAO,CAAC,QAAQ,EAAE,GAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC;YACpG,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,EAAE,IAAE,IAAI,GAAC,OAAO,CAAC,UAAU,EAAE,GAAC,GAAG,GAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YAC1F,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,EAAE,IAAE,IAAI,GAAC,OAAO,CAAC,UAAU,EAAE,GAAC,GAAG,GAAC,OAAO,CAAC,UAAU,EAAE,CAAC;AAC1F,YAAA,OAAO,OAAO,CAAC;AAClB,SAAA;AAAM,aAAA;AACH,YAAA,OAAO,UAAU,CAAC;AACrB,SAAA;KACJ;AAED;;;;;;AAMG;AACI,IAAA,eAAe,CAAC,OAAe,EAAA;AAClC,QAAA,IAAI,OAAO,IAAI,OAAO,IAAI,EAAE,EAAE;YAC1B,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;YAChC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;YAChC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;AAChC,YAAA,OAAO,IAAI,IAAI,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,CAAC,CAAC;AACnC,SAAA;AAAM,aAAA;AACH,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;KACJ;AAGD;;;;;;AAMG;IACI,mBAAmB,CAAC,GAAU,EAAE,IAAQ,EAAA;AAC/C,QAAA,IAAI,CAAC,UAAU,GAAC,cAAc,CAAC,UAAU,CAAC;QAE1C,IAAI,GAAG,GAAU,EAAE,CAAC;AACpB,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;AACrB,YAAA,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,IAAE,GAAG,GAAC,GAAG,IAAE,IAAI,GAAC,GAAG,GAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5D,SAAA;QAED,OAAO,GAAG,GAAG,GAAG,GAAG,QAAQ,GAAC,aAAa,CAAC,IAAI,CAAC,CAAC;KAE/C;;AA9ZD;AACc,cAAW,CAAA,WAAA,GAAG,EAAG,CAAA;AAE/B;AACc,cAAa,CAAA,aAAA,GAAG,CAAE,CAAA;AAEhC;AACc,cAAmB,CAAA,mBAAA,GAAG,EAAG,CAAA;AAEvC;;AAEI;AACW,cAAA,CAAA,SAAS,GAAG,uBAAwB,CAAA;AAUnD;;AAEG;AACW,cAAe,CAAA,eAAA,GAAG,EAAG,CAAA;AAEnC;;AAEG;AACW,cAAU,CAAA,UAAA,GAAG,EAAG,CAAA;AAE9B;;AAEG;AACW,cAAsB,CAAA,sBAAA,GAAG,KAAM,CAAA;AAE7C;;AAEG;AACW,cAAA,CAAA,eAAe,GAAsB,IAAI,YAAY,EAAG,CAAA;AAEtE;AACe,cAAU,CAAA,UAAA,GAAQ,EAAG,CAAA;AAEpC;AACe,cAAc,CAAA,cAAA,GAAe,EAAG,CAAA;AA3DtC,cAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,kBAgEH,UAAU,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;gHAhErB,cAAc,EAAA,CAAA,CAAA;4FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B,UAAU;;;8BAiEM,MAAM;+BAAC,UAAU,CAAA;;;AAgXlC;;AAEG;MACU,GAAG,CAAA;AAIZ,IAAA,OAAO,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAA;QAChB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAE3C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;QAC5C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;QAC7C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;QAC5C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;QAC5C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;QAC7C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;QAC5C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;QAC5C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;QAC7C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;QAC7C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;QAE9C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;QAC5C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;QAC7C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;QAC7C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;QAC7C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;QAC5C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC3C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;QAC9C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;QAC7C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QAC3C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;QAC7C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;QAC7C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;QAC3C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;QAC7C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;QAE/C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;QAC7C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;QAC7C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;QAC7C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;QAC7C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QAC5C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;QAC7C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;QAC7C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC3C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;QAC5C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;QAC9C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;QAC7C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;QAE7C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;QAC5C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;QAC7C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;QAC5C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;QAC7C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;QAC5C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;QAC5C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;QAC7C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;QAC5C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;QAC/C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;QAC5C,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;AAE7C,QAAA,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,QAAA,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,QAAA,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,QAAA,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAE7B;AAED,IAAA,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAA;QACvB,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAChD,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;KACpD;AAED,IAAA,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAA;AACzB,QAAA,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;KACvD;AAED,IAAA,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAA;AACzB,QAAA,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;KACvD;AAED,IAAA,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAA;QACzB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;KAC5C;AAED,IAAA,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAA;QACzB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;KACjD;IAED,OAAO,IAAI,CAAC,CAAC,EAAA;AACT,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;AACnB,QAAA,MAAM,KAAK,GAAG,CAAC,UAAU,EAAE,CAAC,SAAS,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AAC/D,QAAA,IAAI,CAAC,CAAC;AACN,QAAA,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACjC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3D,SAAA;QACD,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AACxB,QAAA,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9D,QAAA,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAAE,SAAA;AACrF,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QACvC,IAAI,CAAC,GAAG,EAAE,EAAE;AACR,YAAA,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC1B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;AAAE,gBAAA,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAAE,aAAA;AAC5C,SAAA;AACD,QAAA,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACjB,QAAA,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC1B,QAAA,OAAO,KAAK,CAAC;KAChB;AAED;;;;;;;;;;;;;;AAcG;IACH,OAAO,MAAM,CAAC,CAAC,EAAA;AACX,QAAA,MAAM,OAAO,GAAG,EAAE,CAAC;AACnB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;YAC5B,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;mBAC1B,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;mBACzB,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;mBAC1B,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AACrC,SAAA;AACD,QAAA,OAAO,OAAO,CAAC;KAClB;IAED,OAAO,IAAI,CAAC,CAAC,EAAA;AACT,QAAA,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AAClB,QAAA,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACf,YAAA,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;AACrC,kBAAA,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;AAC5C,SAAA;AACD,QAAA,OAAO,CAAC,CAAC;KACZ;IAED,OAAO,GAAG,CAAC,CAAC,EAAA;AACR,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAAE,YAAA,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAAE,SAAA;AAC7D,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KACrB;IAED,OAAO,GAAG,CAAC,CAAC,EAAA;AACR,QAAA,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAClD;AAED;;;;AAI+B;AAE/B,IAAA,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC,EAAA;AACb,QAAA,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC;KAC/B;AAGD;;;AAGE;IACF,OAAO,aAAa,CAAC,KAAa,EAAA;QAC9B,IAAI,MAAM,GAAG,EAAE,CAAC;AAChB,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACX,IAAI,CAAS,EAAE,CAAS,CAAC;AAEzB,QAAA,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE;;AAEvB,YAAA,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACxB,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACvD,YAAA,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE;AAC1D,gBAAA,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC,GAAG,MAAM,KAAK,EAAE,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;AAClD,gBAAA,CAAC,EAAE,CAAC;AACP,aAAA;;YAGD,IAAI,CAAC,IAAI,IAAI,EAAE;AACX,gBAAA,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AACpC,aAAA;iBAAM,IAAI,CAAC,IAAI,KAAK,EAAE;gBACnB,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,EACnD,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AAC1B,aAAA;iBAAM,IAAI,CAAC,IAAI,MAAM,EAAE;AACpB,gBAAA,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,EACpD,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,EACzB,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AAC1B,aAAA;iBAAM,IAAI,CAAC,IAAI,QAAQ,EAAE;gBACtB,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,EACpD,IAAI,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,EAC1B,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,EACzB,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AAC1B,aAAA;AACJ,SAAA;AACD,QAAA,OAAO,MAAM,CAAC;KACjB;;AApNM,GAAA,CAAA,OAAO,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAwNtG;;AAEG;MACU,UAAU,CAAA;AAmBtB;;AC7sBD;;AAEG;MAEU,eAAe,CAAA;;;;AA8BxB,IAAA,WAAA,GAAA;;AAtBO,QAAA,IAAM,CAAA,MAAA,GAAe,EAAE,CAAC;;AAIxB,QAAA,IAAW,CAAA,WAAA,GAAe,IAAI,CAAC;;AAK/B,QAAA,IAAO,CAAA,OAAA,GAAe,EAAE,CAAC;;AAKzB,QAAA,IAAgB,CAAA,gBAAA,GAAG,CAAC,CAAC;;AAUxB,QAAA,IAAI,CAAC,KAAK,GAAG,cAAc,CAAC,iBAAiB,CAAC;KACjD;AAED;;;;;;AAMG;AACI,IAAA,iBAAiB,CAAC,OAAmB,EAAA;QACxC,IAAI,CAAC,OAAO,EAAE;AAAE,YAAA,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAAE,SAAA;QACzC,MAAM,OAAO,GAAe,EAAE,CAAC;AAC/B,QAAA,MAAM,QAAQ,IAAS,IAAI,CAAC,KAAK,CAAC,CAAC;AACnC,QAAA,IAAI,QAAQ,IAAqB,IAAI,QAAQ,EAAE,CAAC,CAAC;AACjD,QAAA,IAAI,GAAQ,CAAC;AACb,QAAA,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;AACvB,YAAA,IAAI,QAAQ,GAAG,CAAC,KAAK,QAAQ,EAAE;gBAC3B,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;oBACtB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;AACxE,iBAAA;AAAM,qBAAA;AACH,oBAAA,GAAG,GAAG,QAAQ,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;oBACvC,IAAI,GAAG,EAAE;wBACL,IAAI,GAAG,CAAC,OAAO,EAAE;AACb,4BAAA,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;AAC1D,yBAAA;6BAAM,IAAI,GAAG,CAAC,QAAQ,EAAE;AAAE,4BAAA,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AAAE,yBAAA;AACtF,qBAAA;AACJ,iBAAA;AACJ,aAAA;iBAAM,IAAI,GAAG,CAAC,KAAK,EAAE;AAClB,gBAAA,QAAQ,IAAS,IAAI,QAAQ,EAAE,CAAC,CAAC;gBACjC,GAAG,GAAG,QAAQ,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC7C,gBAAA,IAAI,GAAG,EAAE;oBACL,IAAI,GAAG,CAAC,OAAO,EAAE;AACb,wBAAA,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;AAC1D,qBAAA;yBAAM,IAAI,GAAG,CAAC,QAAQ,EAAE;AAAE,wBAAA,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AAAE,qBAAA;AACtF,iBAAA;AACJ,aAAA;AAAM,iBAAA;gBACH,IAAI,GAAG,CAAC,OAAO,EAAE;AACb,oBAAA,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;AAC1D,iBAAA;AAAM,qBAAA,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,QAAQ,EAAE;AAAE,oBAAA,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AAAE,iBAAA;AAClG,aAAA;AACJ,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;KAElC;AAED;;;;;;;;;;;AAWG;IACI,UAAU,CAAC,KAAoB,GAAA,IAAI,EAAE,OAAyB,GAAA,IAAI,EAAE,QAAmB,GAAA,CAAC,EAAE,YAAA,GAAuB,CAAC,CAAC,EAAE,SAAiB,IAAI,EAAE,UAAkB,IAAI,EAAA;QACrK,IAAI,CAAC,KAAK,EAAE;AACR,YAAA,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;AAC5B,SAAA;AACD,QAAA,IAAI,OAAO,EAAE;AACT,YAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AAC1B,SAAA;AACD,QAAA,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,EAAE,EAAE;AAC1B,YAAA,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;AAC/B,SAAA;AACD,QAAA,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,EAAE,EAAE;AAC5B,YAAA,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAC1B,SAAA;QAED,MAAM,IAAI,GAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,WAAW,EAAE,CAAC;AAC3D,QAAA,MAAM,QAAQ,IAAS,IAAI,CAAC,KAAK,CAAC,CAAC;AACnC,QAAA,IAAI,QAAQ,IAAqB,IAAI,QAAQ,EAAE,CAAC,CAAC;AACjD,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;AACpC,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC;QAE5B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACzC,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;AAE9I,QAAA,IAAI,MAAM,EAAE;AAAE,YAAA,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;AAAE,SAAA;AAC5C,QAAA,IAAI,OAAO,EAAE;AAAE,YAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AAAE,SAAA;QAExC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;;YAEnC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,IAAI,CAAC;iBAC/C,SAAS,CAAC,UAAU,IAAG;AACpB,gBAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;AAC1B,gBAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;gBACjB,IAAI,UAAU,IAAI,UAAU,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE;oBAC/D,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;AACzD,oBAAA,MAAM,OAAO,GAAe,UAAU,CAAC,SAAS,CAAC,CAAC;AAClD,oBAAA,OAAO,CAAC,OAAO,CAAC,MAAM,IAAG;AACrB,wBAAA,QAAQ,IAAS,IAAI,QAAQ,EAAE,CAAC,CAAC;AACjC,wBAAA,QAAQ,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;wBACnC,QAAQ,CAAC,oBAAoB,EAAE,CAAC;AAChC,wBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC/B,qBAAC,CAAC,CAAC;AACN,iBAAA;AAED,gBAAA,OAAO,CAAM,IAAI,CAAC,MAAM,CAAC,CAAC;aAC7B,EACG,KAAK,IAAG;AACJ,gBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC;gBAC9B,MAAM,CAAC,KAAK,CAAC,CAAC;AAClB,aAAC,CAAC,CAAC;AACf,SAAC,CAAC,CAAC;KAEN;AAGD;;;;;;;AAOG;AACI,IAAA,UAAU,CAAC,KAAiB,EAAE,MAAA,GAAiB,IAAI,EAAA;AACtD,QAAA,MAAM,QAAQ,IAAS,IAAI,CAAC,KAAK,CAAC,CAAC;AACnC,QAAA,MAAM,QAAQ,IAAqB,IAAI,QAAQ,EAAE,CAAC,CAAC;QACnD,IAAI,IAAI,GAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC;QAClD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACzC,QAAA,IAAI,MAAM,EAAE;AAAE,YAAA,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;AAAE,SAAA;QAE5C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;;YAEnC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,IAAI,CAAC;iBAC/C,SAAS,CAAC,UAAU,IAAG;AACpB,gBAAA,IAAI,UAAU,IAAI,UAAU,CAAC,KAAK,EAAE;AAChC,oBAAA,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAC/B,iBAAA;;AAAM,oBAAA,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;aAEpC,EACG,KAAK,IAAG;AACJ,gBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC;gBAC9B,MAAM,CAAC,KAAK,CAAC,CAAC;AAClB,aAAC,CAAC,CAAC;AACf,SAAC,CAAC,CAAC;KAEN;AAED;;;;AAIE;IACK,UAAU,GAAA;QACb,IAAI,UAAU,GAAG,EAAE,CAAC;;;;AAIpB,QAAA,KAAK,MAAM,MAAM,IAAK,IAAI,CAAC,MAA4B,EAAE;AACrD,YAAA,IAAI,MAAM,CAAC,aAAa,EAAE,EAAE;AACxB,gBAAA,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC;AAC1J,aAAA;AACJ,SAAA;AAED,QAAA,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YAEvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;;gBAEnC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,EAAC,CAAC;qBACpH,SAAS,CAAC,UAAU,IAAG;AACpB,oBAAA,IAAI,UAAU,IAAI,UAAU,CAAC,KAAK,EAAE;wBAChC,OAAO,CAAC,EAAE,CAAC,CAAC;AACf,qBAAA;;AAAM,wBAAA,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;iBAEpC,EACG,KAAK,IAAG;AACJ,oBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC;oBAC9B,MAAM,CAAC,KAAK,CAAC,CAAC;AAClB,iBAAC,CAAC,CAAC;AACf,aAAC,CAAC,CAAC;AAEN,SAAA;AAAM,aAAA;YACH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;gBACnC,OAAO,CAAC,gCAAgC,CAAC,CAAC;AAC9C,aAAC,CAAC,CAAC;AACN,SAAA;KAEJ;AAGD;;AAEG;AACH,IAAA,IAAW,MAAM,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;KAC7B;AAED;;AAEG;IACI,OAAO,GAAA;QACV,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAkB,KAAI;YACvC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;AACzC,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,GAAG,CAAC;KACd;;6GA5OQ,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;iHAAf,eAAe,EAAA,CAAA,CAAA;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;;;ACoCX;;AAEG;MAEU,UAAU,CAAA;AAiCnB;;AAEE;AACF,IAAA,WAAA,GAAA;;AAlCO,QAAA,IAAS,CAAA,SAAA,GAAG,EAAE,CAAC;;AAEf,QAAA,IAAW,CAAA,WAAA,GAAG,CAAC,CAAC;;AAKhB,QAAA,IAAW,CAAA,WAAA,GAAG,SAAS,CAAC;;AAGxB,QAAA,IAAM,CAAA,MAAA,GAA6B,EAAE,CAAC;;;;;AAcrC,QAAA,IAAO,CAAA,OAAA,GAAG,CAAC,CAAC,CAAC;;AAEb,QAAA,IAAW,CAAA,WAAA,GAAQ,EAAE,CAAC;;AAEtB,QAAA,IAAS,CAAA,SAAA,GAAQ,EAAE,CAAC;;AAQxB,QAAA,IAAI,CAAC,KAAK,GAAG,cAAc,CAAC,iBAAiB,CAAC;KACjD;AAGD;;AAEG;AACH,IAAA,GAAG,CAAC,KAAa,EAAA;AACb,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE;AAC3E,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE;YAChC,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE;gBACjD,IAAI,QAAQ,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE;AACjF,oBAAA,OAAO,IAAI,CAAC;AACf,iBAAA;AACJ,aAAA;YACD,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE;gBACjD,IAAI,QAAQ,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE;AACjF,oBAAA,OAAO,IAAI,CAAC;AACf,iBAAA;AACJ,aAAA;AACJ,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;KAClC;AAED;;AAEG;IACH,GAAG,CAAC,KAAa,EAAE,KAAU,EAAA;AACzB,QAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE;YAChC,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE;gBACjD,IAAI,QAAQ,KAAK,CAAC,KAAK,QAAQ,IAAI,KAAK,KAAK,EAAE,EAAE;AAC7C,oBAAA,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAC/C,iBAAA;AACJ,aAAA;iBAAM,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE;gBACxD,IAAI,QAAQ,KAAK,CAAC,KAAK,QAAQ,IAAI,KAAK,KAAK,EAAE,EAAE;oBAC7C,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;oBAC9B,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;oBAC9B,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;AAC9B,oBAAA,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,CAAC,CAAC;AACpC,iBAAA;AACJ,aAAA;YACD,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;;gBAExC,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE;;AAEnC,oBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;oBAChC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;AAChC,iBAAA;AACJ,aAAA;AAAM,iBAAA;;AAEH,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;gBAChC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;AAChC,aAAA;AACJ,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;AACnC,SAAA;KACJ;AAED;;;;;;;AAOG;AACH,IAAA,kBAAkB,CAAC,SAAS,EAAA;QACxB,IAAI,GAAG,GAAsB,IAAI,CAAC;AAClC,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE;AAC3B,YAAA,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE;gBAAE,GAAG,GAAG,GAAG,CAAC;AAAE,aAAA;AAC7C,SAAA;QAAA,CAAC;AACF,QAAA,OAAO,GAAG,CAAC;KACd;AAGD;;AAEG;IACH,WAAW,GAAA;AACP,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;YAC7B,QAAQ,KAAK,CAAC,IAAI;AACd,gBAAA,KAAK,MAAM,CAAC;AACZ,gBAAA,KAAK,MAAM;AACP,oBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;oBACxB,MAAM;AAEV,gBAAA,KAAK,MAAM,CAAC;AACZ,gBAAA,KAAK,MAAM;AACP,oBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;oBACxB,MAAM;AAEV,gBAAA,KAAK,SAAS;AACV,oBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;oBACzB,MAAM;AAEV,gBAAA,KAAK,QAAQ,CAAC;AACd,gBAAA,KAAK,MAAM;AACP,oBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;oBACtB,MAAM;AAEV,gBAAA,KAAK,QAAQ;AACT,oBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACrB,MAAM;AAEV,gBAAA,KAAK,MAAM;AACP,oBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;oBACtB,MAAM;AAEV,gBAAA,KAAK,MAAM,CAAC;AACZ,gBAAA,KAAK,SAAS;AACV,oBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;oBACxB,MAAM;AAEV,gBAAA;AACI,oBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;oBACtB,MAAM;AACb,aAAA;AACJ,SAAA;QAAA,CAAC;KAEL;AAED;;;;;;;;AAQG;IACH,YAAY,CAAC,IAAY,EAAE,OAAgB,EAAA;AACvC,QAAA,MAAM,UAAU,GAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;;QAE7E,IAAI,IAAI,CAAC,wBAAwB,EAAE;YAC/B,UAAU,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,wBAAwB,CAAC;AAC9D,SAAA;AAED,QAAA,UAAU,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;AAEhC,QAAA,IAAI,CAAC,IAAI,KAAK,QAAQ,KAAK,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE;YACzD,UAAU,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;AAC/C,SAAA;AAED,QAAA,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;AAC1B,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;AAC7B,YAAA,MAAM,SAAS,GAAW,KAAK,CAAC,IAAI,CAAC;AACrC,YAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAC9B,gBAAA,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;AACvB,gBAAA,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;AAC3B,iBAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,QAAQ,CAAC,CAAC;AAChD,iBAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,IAAI,KAAK,QAAQ,CAAC,CAAC,EAAE;gBAC1D,IAAI,KAAK,GAAG,EAAE,CAAC;AACf,gBAAA,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,KAAK,IAAI,KAAK,QAAQ,CAAC,EAAE;;;oBAGtH,QAAQ,KAAK,CAAC,IAAI;AACd,wBAAA,KAAK,MAAM,CAAC;AACZ,wBAAA,KAAK,MAAM;AACP,4BAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,SAAS,CAAC,EAAE;gCAC/D,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;AAC7C,6BAAA;iCAAM,IAAI,QAAQ,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,QAAQ,EAAE;AAC9C,gCAAA,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;AAC1D,6BAAA;AAAM,iCAAA;AACH,gCAAA,MAAM,SAAS,GAAS,IAAI,CAAC,SAAS,CAAC,CAAC;gCACxC,KAAK,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC;AAC3C,gCAAA,IAAI,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE;oCAAE,KAAK,IAAI,GAAG,CAAC;AAAE,iCAAA;AAC/C,gCAAA,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC;AAC/C,gCAAA,IAAI,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;oCAAE,KAAK,IAAI,GAAG,CAAC;AAAE,iCAAA;gCAC/C,KAAK,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;gCACxC,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;AAChD,6BAAA;4BACD,MAAM;AAEV,wBAAA,KAAK,MAAM,CAAC;AACZ,wBAAA,KAAK,MAAM;AACP,4BAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,SAAS,CAAC,EAAE;gCAC/D,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;AAC7C,6BAAA;AAAM,iCAAA;AACH,gCAAA,MAAM,SAAS,GAAS,IAAI,CAAC,SAAS,CAAC,CAAC;gCACxC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;gCAC7C,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;AAChD,6BAAA;4BACD,MAAM;AAEV,wBAAA,KAAK,QAAQ,CAAC;AACd,wBAAA,KAAK,QAAQ;AACT,4BAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,SAAS,CAAC,EAAE;gCAC/D,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;AAC7C,6BAAA;;AAAM,gCAAA,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;4BAC/D,MAAM;AAEV,wBAAA,KAAK,SAAS;4BACV,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,GAAG,KAAK,CAAC;4BACxE,MAAM;AAEV,wBAAA,KAAK,QAAQ,CAAC;AACd,wBAAA,KAAK,MAAM;AACP,4BAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,SAAS,CAAC,EAAE;gCAC/D,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;AAC7C,6BAAA;iCAAM,IAAI,QAAQ,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,QAAQ,EAAE;;AAE9C,gCAAA,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;AACjE,6BAAA;AAAM,iCAAA;AACH,gCAAA,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC;AACrE,6BAAA;4BACD,MAAM;AAEV,wBAAA,KAAK,MAAM;AACP,4BAAA,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;4BACvE,MAAM;AAEV,wBAAA,KAAK,MAAM,CAAC;AACZ,wBAAA,KAAK,SAAS;;AAEV;;;;;AAKG;AACH,4BAAA,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;4BACvD,MAAM;AAEV,wBAAA;AACI,4BAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,SAAS,CAAC,EAAE;gCAC/D,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;AAC7C,6BAAA;;AAAM,gCAAA,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;4BAC9D,MAAM;AACb,qBAAA;AACJ,iBAAA;AAGJ,aAAA;AACJ,SAAA;QAAA,CAAC;AAEF,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;KAErC;AAGD;;;;;;;;;;;AAWG;IACI,SAAS,CAAC,eAAuB,IAAI,EAAE,WAAmB,IAAI,EAAE,QAAoB,IAAI,EAAA;AAC3F,QAAA,IAAI,KAAK,EAAE;;AAEV,SAAA;aAAM,IAAI,QAAQ,IAAI,cAAc,CAAC,eAAe,GAAG,aAAa,EAAE;;AAEnE,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;;AAEnB,gBAAA,KAAK,CAAC,+BAA+B,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;AAC3D,aAAA;AAAM,iBAAA;;gBAEH,KAAK,GAAG,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC,WAAW,GAAG,KAAK,GAAG,QAAQ,CAAC,EAAE,CAAC;AACnF,aAAA;AAEJ,SAAA;aAAM,IAAI,YAAY,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,KAAK,QAAQ,IAAI,cAAc,CAAC,eAAe,IAAI,aAAa,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE;;YAEzI,IAAI,YAAY,IAAI,CAAC,EAAE;AAAE,gBAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AAAE,aAAA;;YAG5D,MAAM,IAAI,GAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,WAAW,EAAE,CAAC;AAC3D,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AAChC,YAAA,IAAI,QAAQ,EAAE;AACV,gBAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAC5B,aAAA;AAAM,iBAAA;AACH,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC;AACtC,aAAA;AACD,YAAA,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;YAE9E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;;gBAEnC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,eAAe,EAAE,IAAI,CAAC;qBAC7C,SAAS,CAAC,UAAU,IAAG;oBACpB,IAAI,CAAC,WAAW,EAAE,CAAC;AACnB,oBAAA,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;oBACnC,IAAI,CAAC,oBAAoB,EAAE,CAAC;oBAC5B,OAAO,CAAC,IAAI,CAAC,CAAC;iBACjB,EACG,KAAK,IAAG;AACJ,oBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC9C,MAAM,CAAC,KAAK,CAAC,CAAC;AAClB,iBAAC,CAAC,CAAC;AACf,aAAC,CAAC,CAAC;AAEN,SAAA;AAAM,aAAA;YACH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;gBACnC,MAAM,CAAC,uDAAuD,CAAC,CAAC;AACpE,aAAC,CAAC,CAAC;AAEN,SAAA;QAED,MAAM,QAAQ,GAAQ,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;AACjD,QAAA,MAAM,OAAO,GAAoB,IAAI,eAAe,EAAE,CAAC;AACvD,QAAA,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC;QACzB,MAAM,EAAE,GAAG,IAAI,CAAC;;;QAIhB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;YACnC,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACxC,iBAAA,IAAI,CAAC,CAAC,OAAO,KAAI;AACd,gBAAA,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,oBAAA,EAAE,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;AACjD,oBAAA,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,KAAI,EAAG,GAAG,CAAC,oBAAoB,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAO,EAAA,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AACjH,iBAAA;AAAM,qBAAA;oBAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAAE,iBAAA;AACxC,aAAC,CAAC;AACD,iBAAA,KAAK,CAAC,CAAC,KAAK,KAAO,EAAA,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AAC9C,SAAC,CAAC,CAAC;KAGN;AAED;;;;;AAKG;IACI,OAAO,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,EAAE;YACxB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC5C,SAAA;AAAM,aAAA;YACH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;gBACnC,MAAM,CAAC,+BAA+B,CAAC,CAAC;AAC5C,aAAC,CAAC,CAAC;AACN,SAAA;KAEJ;AAGD;;;;;AAKG;IACI,YAAY,GAAA;QACf,MAAM,IAAI,GAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,WAAW,EAAE,CAAC;AAC3D,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AAChC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC;QACnC,IAAI,IAAI,CAAC,wBAAwB,EAAE;AAAE,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,wBAAwB,CAAC;AAAE,SAAA;AAC3F,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QAElF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;YACnC,MAAM,EAAE,GAAG,IAAI,CAAC;YAChB,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,eAAe,EAAE,IAAI,CAAC;iBAC7C,SAAS,CAAC,UAAU,IAAG;AACpB,gBAAA,IAAI,UAAU,CAAC,UAAU,KAAK,IAAI,EAAE;;AAEhC,oBAAA,EAAE,CAAC,YAAY,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;oBAC1C,IAAI,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,WAAW,KAAK,EAAE,EAAE;wBAAE,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;AAAE,qBAAA;AAC7F,oBAAA,EAAE,CAAC,oBAAoB,EAAE,CAAC;oBAC1B,OAAO,CAAM,EAAE,CAAC,CAAC;AACpB,iBAAA;AAAM,qBAAA;AAAE,oBAAA,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAAE,iBAAA;aAC5C,EACG,KAAK,IAAG;AACJ,gBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9C,gBAAA,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AACzB,aAAC,CAAC,CAAC;AACf,SAAC,CAAC,CAAC;KAGN;AAED;;;;;AAKG;IACI,YAAY,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,EAAE;AACxB,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;gBACtB,MAAM,IAAI,GAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,WAAW,EAAE,CAAC;AAC3D,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AAChC,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC;gBACnC,IAAI,IAAI,CAAC,wBAAwB,EAAE;AAAE,oBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,wBAAwB,CAAC;AAAE,iBAAA;AAC3F,gBAAA,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;gBACvB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;gBAErF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;oBACnC,MAAM,EAAE,GAAG,IAAI,CAAC;oBAChB,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,eAAe,EAAE,IAAI,CAAC;yBAC7C,SAAS,CAAC,UAAU,IAAG;AACpB,wBAAA,IAAI,UAAU,CAAC,UAAU,KAAK,IAAI,EAAE;;AAEhC,4BAAA,EAAE,CAAC,oBAAoB,EAAE,CAAC;4BAC1B,OAAO,CAAM,EAAE,CAAC,CAAC;AACpB,yBAAA;AAAM,6BAAA;AAAE,4BAAA,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAAE,yBAAA;qBAC5C,EACG,KAAK,IAAG;AACJ,wBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;wBAC9C,MAAM,CAAC,KAAK,CAAC,CAAC;AAClB,qBAAC,CAAC,CAAC;AACf,iBAAC,CAAC,CAAC;AAEN,aAAA;AAAM,iBAAA;gBACH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;oBACnC,OAAO,CAAM,IAAI,CAAC,CAAC;oBAAA,CAAC;AACxB,iBAAC,CAAC,CAAC;AACN,aAAA;AAGJ,SAAA;AAAM,aAAA;YACH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;gBACnC,MAAM,CAAC,+BAA+B,CAAC,CAAC;AAC5C,aAAC,CAAC,CAAC;AACN,SAAA;KACJ;AAED;;;;;;;AAOG;IACI,YAAY,CAAC,UAAmB,KAAK,EAAA;AACxC,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,EAAE;YACxB,MAAM,IAAI,GAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,WAAW,EAAE,CAAC;AAC3D,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AAChC,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC;YACnC,IAAI,IAAI,CAAC,0BAA0B,EAAE;AAAE,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,0BAA0B,CAAC;AAAE,aAAA;AAC/F,YAAA,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;AACvB,YAAA,IAAI,OAAO,EAAE;AAAE,gBAAA,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;AAAE,aAAA;YAE9C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;gBACnC,MAAM,EAAE,GAAG,IAAI,CAAC;gBAChB,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,eAAe,EAAE,IAAI,CAAC;qBAC7C,SAAS,CAAC,UAAU,IAAG;AACpB,oBAAA,IAAI,UAAU,CAAC,UAAU,KAAK,IAAI,EAAE;;wBAEhC,OAAO,CAAM,EAAE,CAAC,CAAC;AACpB,qBAAA;AAAM,yBAAA;AAAE,wBAAA,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAAE,qBAAA;iBAC5C,EACG,KAAK,IAAG;AACJ,oBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC9C,MAAM,CAAC,KAAK,CAAC,CAAC;AAClB,iBAAC,CAAC,CAAC;AACf,aAAC,CAAC,CAAC;AAIN,SAAA;AAAM,aAAA;YACH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;gBACnC,MAAM,CAAC,uDAAuD,CAAC,CAAC;AACpE,aAAC,CAAC,CAAC;AACN,SAAA;KAEJ;AAED;;;;AAIG;AACI,IAAA,iBAAiB,CAAC,UAAe,EAAA;AACpC,QAAA,IAAI,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;AAAE,YAAA,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;AAAE,SAAA;AACxF,QAAA,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE;YAC5B,IAAI,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE;gBACvD,QAAQ,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,IAAI;AACvC,oBAAA,KAAK,MAAM;AACP,wBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,IAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,GAAC,EAAE,CAAC;wBAC9F,MAAM;AAEV,oBAAA,KAAK,QAAQ,CAAC;AACd,oBAAA,KAAK,MAAM;AACP,wBAAA,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE;4BACnB,IAAI,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;AACnC,yBAAA;AAAM,6BAAA;AACH,4BAAA,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;AACpB,yBAAA;wBACD,MAAM;AAEV,oBAAA,KAAK,QAAQ;AACT,wBAAA,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE;4BACnB,IAAI,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;AACnC,yBAAA;AAAM,6BAAA;AACH,4BAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACnB,yBAAA;wBACD,MAAM;AAEV,oBAAA,KAAK,SAAS;AACV,wBAAA,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE;4BACnB,IAAI,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;AACnC,yBAAA;AAAM,6BAAA;AACH,4BAAA,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;AACvB,yBAAA;wBACD,MAAM;AAEV,oBAAA;wBACI,IAAI,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;wBAChC,MAAM;AACb,iBAAA;AACJ,aAAA;AACJ,SAAA;KAEJ;IAEM,gBAAgB,GAAA;QACnB,IAAI,IAAI,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;AACrC,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;AAC7B,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACvC,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACf;AAED;;;;;;;;;;;;AAYG;IACI,UAAU,CAAC,KAAoB,GAAA,IAAI,EACtC,OAAyB,GAAA,IAAI,EAC7B,QAAmB,GAAA,CAAC,EAAE,YAAA,GAAuB,CAAC,CAAC,EAC/C,SAAiB,IAAI,EACrB,UAAkB,IAAI,EAAA;QACtB,MAAM,QAAQ,GAAQ,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;AACjD,QAAA,MAAM,OAAO,GAAoB,IAAI,eAAe,EAAE,CAAC;AACvD,QAAA,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC;QACzB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;YACnC,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,OAAO,IAAI,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC;AACzG,iBAAA,IAAI,CAAC,CAAC,OAAO,KAAI,EAAG,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;AACxC,iBAAA,KAAK,CAAC,CAAC,KAAK,KAAO,EAAA,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AAC9C,SAAC,CAAC,CAAC;KAEN;AAED;;;;;;;AAOG;AACI,IAAA,eAAe,CAAC,MAAkB,EAAE,MAAA,GAAiB,EAAE,EAAA;QAC1D,MAAM,IAAI,GAAQ,EAAE,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5F,QAAA,IAAI,MAAM,IAAI,MAAM,IAAI,EAAE,EAAE;AACxB,YAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;AAChC,SAAA;QACD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;;YAEnC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,IAAI,CAAC;iBAC9C,SAAS,CAAC,MAAM,IAAG;gBAChB,OAAO,CAAC,MAAM,CAAC,CAAC;aACnB,EACG,KAAK,IAAG;AACJ,gBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC9C,MAAM,CAAC,KAAK,CAAC,CAAC;AAClB,aAAC,CAAC,CAAC;AACf,SAAC,CAAC,CAAC;KAEN;AACD;;;;;AAKG;AACH,IAAA,IAAW,YAAY,GAAA;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC;KACvB;IACD,IAAW,YAAY,CAAC,CAAS,EAAI,EAAA,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE;AAExD;;;;;AAKG;IACI,cAAc,GAAA;AACjB,QAAA,QAAQ,IAAI,CAAC,YAAY,IAAI,CAAC,EAAE;KACnC;AAGD;;;;;;AAMG;IACI,oBAAoB,GAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACvB;AAGD;;;;;AAKG;IACI,aAAa,GAAA;AAChB,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;YAC7B,IAAI,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AAAE,gBAAA,OAAO,IAAI,CAAC;AAAE,aAAA;AAClE,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;AAGD;;;;AAIG;IACI,iBAAiB,GAAA;QACpB,MAAM,OAAO,GAAe,EAAE,CAAC;AAC/B,QAAA,MAAM,MAAM,GAA6B,IAAI,CAAC,MAAM,CAAC;AACrD,QAAA,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;YACtB,IAAI,GAAG,CAAC,OAAO,EAAE;AACb,gBAAA,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;AAC1D,aAAA;iBAAM,IAAI,GAAG,CAAC,QAAQ,EAAE;gBACrB,MAAM,SAAS,GAAe,EAAE,CAAC;gBACjC,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE;AACnC,oBAAA,IAAI,GAAG,CAAC,OAAO,EAAE;AACb,wBAAA,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;AAC5D,qBAAA;AAAM,yBAAA;AACH,wBAAA,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC3D,qBAAA;AACJ,iBAAA;gBAAA,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC;oBACT,IAAI,EAAE,GAAG,CAAC,IAAI;AACd,oBAAA,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,SAAS;oBAChC,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,MAAM,EAAE,GAAG,CAAC,MAAM;AAClB,oBAAA,SAAS,EAAE,SAAS;AACvB,iBAAA,CAAC,CAAC;AAEN,aAAA;iBAAM,IAAI,GAAG,CAAC,QAAQ,EAAE;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AAAE,aAAA;AACtF,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;KAElC;AAED;;;;;;AAMG;IACI,aAAa,CAAC,mBAA4B,KAAK,EAAA;QAClD,MAAM,IAAI,GAAe,EAAE,CAAC;AAC5B,QAAA,MAAM,MAAM,GAA6B,IAAI,CAAC,MAAM,CAAC;AACrD,QAAA,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;YACtB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,gBAAgB,EAAE;gBAC3C,IAAI,GAAG,CAAC,OAAO,EAAE;AACb,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClB,iBAAA;AAAM,qBAAA;AAAE,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAAE,iBAAA;AAClC,aAAA;AACJ,SAAA;QAAA,CAAC;AACF,QAAA,OAAO,IAAI,CAAC;KACf;AAED;;;;;;AAMG;AACI,IAAA,WAAW,CAAC,SAAiB,EAAA;AAChC,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;AAC7B,YAAA,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE;gBAAE,OAAO,KAAK,CAAC,QAAQ,CAAC;AAAE,aAAA;AAC3D,SAAA;;AAGD,QAAA,OAAO,IAAI,CAAC,SAAS,GAAG,GAAG,GAAG,SAAS,CAAC;KAC3C;;;;AAMD;;;;;;AAMG;AACK,IAAA,mBAAmB,CAAC,SAAiB,EAAA;AACzC,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;AAC7B,YAAA,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE;AAAE,gBAAA,OAAO,KAAK,CAAC;AAAE,aAAA;AAClD,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACf;AAED;;;;;;AAMG;AACK,IAAA,cAAc,CAAC,KAAwB,EAAA;QAC3C,OAAO,KAAK,CAAC,SAAS,CAAC;KAC1B;AAED;;;;;;AAMG;AACK,IAAA,eAAe,CAAC,KAAa,EAAA;QACjC,OAAO,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;KAC/C;AAED;;;;;;;AAOG;AACK,IAAA,iBAAiB,CAAC,KAAwB,EAAA;AAC9C,QAAA,QAAQ,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE;KACxC;AAED;;;;;;AAMG;AACK,IAAA,UAAU,CAAC,KAAwB,EAAA;AACvC,QAAA,QAAQ,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE;KACzC;AAED;;;;;;AAMG;AACK,IAAA,UAAU,CAAC,KAAwB,EAAA;QACvC,OAAO,KAAK,CAAC,QAAQ,CAAC;KACzB;;wGAxyBQ,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;4GAAV,UAAU,EAAA,CAAA,CAAA;4FAAV,UAAU,EAAA,UAAA,EAAA,CAAA;kBADtB,UAAU;;;ACjDX;MAaa,WAAW,CAAA;;yGAAX,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;0GAAX,WAAW,EAAA,OAAA,EAAA,CAJR,gBAAgB,CAAA,EAAA,OAAA,EAAA,CAEhB,gBAAgB,CAAA,EAAA,CAAA,CAAA;AAEnB,WAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,EAHP,SAAA,EAAA,CAAC,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,CAAC,EAD1D,OAAA,EAAA,CAAA,gBAAgB,EAEhB,gBAAgB,CAAA,EAAA,CAAA,CAAA;4FAEnB,WAAW,EAAA,UAAA,EAAA,CAAA;kBALvB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACJ,OAAO,EAAE,CAAC,gBAAgB,CAAC;oBAC3B,SAAS,EAAE,CAAC,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,CAAC;oBACpE,OAAO,EAAE,CAAC,gBAAgB,CAAC;iBAChC,CAAA;;;MCPY,kBAAkB,CAAA;;gHAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;oGAAlB,kBAAkB,EAAA,QAAA,EAAA,WAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,WAAW;iBACxB,CAAA;8BAKoC,cAAc,EAAA,CAAA;sBAA9C,YAAY;uBAAC,iBAAiB,CAAA;;MAMtB,wBAAwB,CAAA;;sHAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;0GAAxB,wBAAwB,EAAA,QAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;4FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,iBAAiB;iBAC9B,CAAA;;MA+EY,SAAS,CAAA;AAyFlB,IAAA,WAAA,CAAoB,UAAsB,EAAA;AAAtB,QAAA,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;AAvF1C;;AAEI;AACY,QAAA,IAAS,CAAA,SAAA,GAAG,IAAI,CAAC;AAEjC;;AAEI;AACY,QAAA,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;AAElC;;AAEI;AACY,QAAA,IAAU,CAAA,UAAA,GAAG,IAAI,CAAC;AAElC;;AAEI;AACY,QAAA,IAAiB,CAAA,iBAAA,GAAG,IAAI,CAAC;AAEzC;;AAEI;AACY,QAAA,IAAU,CAAA,UAAA,GAAG,KAAK,CAAC;AAEnC;;AAEI;AACY,QAAA,IAAgB,CAAA,gBAAA,GAAG,IAAI,CAAC;AAExC;;AAEG;AACa,QAAA,IAAe,CAAA,eAAA,GAAG,KAAK,CAAC;AAExC;;AAEG;AACa,QAAA,IAAe,CAAA,eAAA,GAAG,KAAK,CAAC;AAExC;;AAEG;AACa,QAAA,IAAgB,CAAA,gBAAA,GAAG,IAAI,CAAC;AAExC;;AAEG;AACa,QAAA,IAAkB,CAAA,kBAAA,GAAG,KAAK,CAAC;AAE3C;;AAEG;AACa,QAAA,IAAmB,CAAA,mBAAA,GAAG,KAAK,CAAC;;;;AAKlC,QAAA,IAAA,CAAA,YAAY,GAAsB,IAAI,YAAY,EAAE,CAAC;AACrD,QAAA,IAAA,CAAA,aAAa,GAAsB,IAAI,YAAY,EAAE,CAAC;AACtD,QAAA,IAAA,CAAA,YAAY,GAAsB,IAAI,YAAY,EAAE,CAAC;AACrD,QAAA,IAAA,CAAA,aAAa,GAAsB,IAAI,YAAY,EAAE,CAAC;AACtD,QAAA,IAAA,CAAA,eAAe,GAAsB,IAAI,YAAY,EAAE,CAAC;AAExD,QAAA,IAAA,CAAA,eAAe,GAAsB,IAAI,YAAY,EAAE,CAAC;;;;AAKxD,QAAA,IAAA,CAAA,cAAc,GAAsB,IAAI,YAAY,EAAE,CAAC;AACvD,QAAA,IAAA,CAAA,eAAe,GAAsB,IAAI,YAAY,EAAE,CAAC;AACxD,QAAA,IAAA,CAAA,iBAAiB,GAAsB,IAAI,YAAY,EAAE,CAAC;;;;AAK7D,QAAA,IAAa,CAAA,aAAA,GAAG,0BAA0B,CAAC;AAE3C,QAAA,IAAe,CAAA,eAAA,GAAG,KAAK,CAAC;AAExB,QAAA,IAAc,CAAA,cAAA,GAAG,MAAM,CAAC;KAQ9B;IAGM,WAAW,GAAA;AACd,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC;AAC7C,QAAA,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,eAAe,IAAI,2BAA2B,GAAG,0BAA0B,CAAC;KAC1G;AAEM,IAAA,YAAY,CAAC,GAAW,EAAA;AAC3B,QAAA,QAAQ,GAAG;AACP,YAAA,KAAK,KAAK;AACN,gBAAA,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,GAAG,QAAQ,CAAC;AAE5C,YAAA,KAAK,KAAK;AACN,gBAAA,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,GAAG,QAAQ,CAAC;AAE5C,YAAA,KAAK,MAAM;AACP,gBAAA,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,GAAG,QAAQ,CAAC;AAE7C,YAAA,KAAK,MAAM;AACP,gBAAA,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,GAAG,QAAQ,CAAC;AAE7C,YAAA,KAAK,QAAQ;AACT,gBAAA,OAAO,CAAC,IAAI,CAAC,gBAAgB,IAAI,EAAE,GAAG,QAAQ,CAAC;AAEnD,YAAA,KAAK,KAAK;AACN,gBAAA,OAAO,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,IAAI,EAAE,GAAG,QAAQ,CAAC;AAE1E,YAAA,KAAK,MAAM;AACP,gBAAA,OAAO,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,gBAAgB,IAAI,EAAE,GAAG,QAAQ,CAAC;AAE3E,YAAA,KAAK,KAAK;AACN,gBAAA,OAAO,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,kBAAkB,IAAI,EAAE,GAAG,QAAQ,CAAC;AAChF,SAAA;AAED,QAAA,OAAO,EAAE,CAAC;KACb;IAEM,KAAK,GAAA;AACR,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;KAC5B;IAEM,KAAK,GAAA;AACR,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACjC;IAEM,cAAc,GAAA;AACjB,QAAA,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,cAAc,KAAK,MAAM,IAAE,OAAO,GAAC,MAAM,CAAC;KACzE;AAEM,IAAA,YAAY,CAAC,MAAM,EAAA;AACtB,QAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;AAC7B,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KACrC;IAEM,SAAS,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE;AAAE,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;AAAE,SAAA;KACnH;IAEM,MAAM,GAAA;AACT,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACjC;IAEM,OAAO,GAAA;QACV,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,cAAc,EAAE;YACjD,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC;AACrD,SAAA;AAAM,aAAA;;AAEH,YAAA,MAAM,OAAO,GAAQ,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAChF,YAAA,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AAAE,gBAAA,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;AAAE,aAAA;AAC7D,SAAA;KACJ;IAEM,YAAY,GAAA;AACf,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACnC;IAEM,WAAW,GAAA;AACd,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAClC;IAEM,YAAY,GAAA;AACf,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACnC;IAEM,cAAc,GAAA;AACjB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACrC;IAEM,cAAc,GAAA;AACjB,QAAA,QAAQ,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,YAAY,KAAK,EAAE,EAAE;KAClH;;uGArLQ,SAAS,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;2FAAT,SAAS,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAuFJ,kBAAkB,EAhKtB,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,qVAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FAoCQ,SAAS,EAAA,UAAA,EAAA,CAAA;kBA3ErB,SAAS;YACI,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EACZ,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCT,IAAA,CAAA,EAAA,MAAA,EAAA,CAAA,qVAAA,CAAA,EAAA,CAAA;iGAyCe,SAAS,EAAA,CAAA;sBAAxB,KAAK;gBAKU,SAAS,EAAA,CAAA;sBAAxB,KAAK;gBAKU,UAAU,EAAA,CAAA;sBAAzB,KAAK;gBAKU,iBAAiB,EAAA,CAAA;sBAAhC,KAAK;gBAKU,UAAU,EAAA,CAAA;sBAAzB,KAAK;gBAKU,gBAAgB,EAAA,CAAA;sBAA/B,KAAK;gBAKU,eAAe,EAAA,CAAA;sBAA9B,KAAK;gBAKU,eAAe,EAAA,CAAA;sBAA9B,KAAK;gBAKU,gBAAgB,EAAA,CAAA;sBAA/B,KAAK;gBAKU,kBAAkB,EAAA,CAAA;sBAAjC,KAAK;gBAKU,mBAAmB,EAAA,CAAA;sBAAlC,KAAK;gBAKI,YAAY,EAAA,CAAA;sBAArB,MAAM;gBACG,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBACG,YAAY,EAAA,CAAA;sBAArB,MAAM;gBACG,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBACG,eAAe,EAAA,CAAA;sBAAxB,MAAM;gBAEG,eAAe,EAAA,CAAA;sBAAxB,MAAM;gBAKG,cAAc,EAAA,CAAA;sBAAvB,MAAM;gBACG,eAAe,EAAA,CAAA;sBAAxB,MAAM;gBACG,iBAAiB,EAAA,CAAA;sBAA1B,MAAM;gBAc2B,YAAY,EAAA,CAAA;sBAA7C,YAAY;uBAAC,kBAAkB,CAAA;;;ACjLpC,MAAM,QAAQ,CAAA;AAMV,IAAA,WAAA,GAAA;QACI,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,KAAI;AAC9C,YAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACvB,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACzB,SAAC,CAAC,CAAC;KACN;AACJ,CAAA;AACD;;AAEG;MAEU,mBAAmB,CAAA;AAa5B,IAAA,WAAA,GAAA;QACI,IAAI,CAAC,cAAc,GAAG,IAAI,QAAQ,EAAE,CAAC;KACxC;IAED,IAAI,WAAW,CAAC,KAAwB,EAAA;AACpC,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;KAC7B;IACD,IAAI,YAAY,CAAC,KAAwB,EAAA;AACrC,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;KAC9B;AAED;;;AAGG;AACH,IAAA,IAAI,MAAM,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;KACtC;AAED;;AAEG;AACH,IAAA,QAAQ,CAAC,KAAa,EAAA;AAClB,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAC7E,QAAA,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;KACvB;AAED;;;;AAIG;IACH,IAAW,aAAa,CAAC,CAAU,EAAA;QAC/B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,GAAG,CAAC,CAAC;KAC9C;AACD,IAAA,IAAW,aAAa,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC;KACjD;AAED;;AAEG;IACH,KAAK,CAAC,SAAc,IAAI,EAAA;QACpB,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;AAC7C,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,WAAW;gBACpC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE;gBAAE,OAAO;AAAE,aAAA;;AAEhE,YAAA,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC7E,MAAM,CAAC,KAAK,EAAE,CAAC;AAClB,SAAA;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;KACvC;AAED;;;;;;AAMG;IACH,OAAO,GAAA;AACH,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa;YACtC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE;YAAE,OAAO;AAAE,SAAA;;AAElE,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC7E,MAAM,CAAC,KAAK,EAAE,CAAC;AACf,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;KAChC;IAEO,OAAO,GAAA;QACX,IAAI,IAAI,CAAC,aAAa,EAAE;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;AAAE,SAAA;QACzD,IAAI,IAAI,CAAC,YAAY,EAAE;AAAE,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;AAAE,SAAA;QACvD,IAAI,IAAI,CAAC,UAAU,EAAE;AAAE,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;AAAE,SAAA;KACtD;;iHAtFQ,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;qHAAnB,mBAAmB,EAAA,CAAA,CAAA;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,UAAU;;;MC0EE,sBAAsB,CAAA;IAyC/B,WAAoB,CAAA,KAAqB,EAAS,MAA2B,EAAA;AAAzD,QAAA,IAAK,CAAA,KAAA,GAAL,KAAK,CAAgB;AAAS,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAqB;AA9B7D,QAAA,IAAS,CAAA,SAAA,GAAe,EAAE,CAAC;QAC3B,IAAc,CAAA,cAAA,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QAC3F,IAAA,CAAA,cAAc,GAAG,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;AACrK,QAAA,IAAgB,CAAA,gBAAA,GAAG,EAAE,CAAC;AAE9B,QAAA,IAAY,CAAA,YAAA,GAAG,EAAE,CAAC;AAClB,QAAA,IAAY,CAAA,YAAA,GAAG,GAAG,CAAC;AACnB,QAAA,IAAW,CAAA,WAAA,GAAG,GAAG,CAAC;KAuBwD;IArBlF,IAAW,gBAAgB,CAAC,CAAM,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAG;AAC3B,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,EAAE,EAAE;AAAE,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAAE,aAAA;AACjG,SAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;QACtC,IAAI,CAAC,CAAC,aAAa,EAAE;AACjB,YAAA,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,aAAa,CAAC;AACzC,SAAA;AAAM,aAAA;YACH,IAAI,CAAC,cAAc,GAAG,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;AAC7K,SAAA;QACD,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC5C,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACxD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACtC,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,KAAK,EAAE,EAAE;AAC/C,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/D,aAAA;AAEJ,SAAA;KACJ;IAKD,eAAe,GAAA;QACX,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;AAC7D,QAAA,IAAI,CAAC,YAAY,IAAI,EAAE,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;KAC9F;IAED,WAAW,CAAC,KAAK,EAAE,UAAU,EAAA;AACzB,QAAA,IAAI,KAAK,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,EAAE;AAChC,YAAA,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;AAC9E,SAAA;AAAM,aAAA;AACH,YAAA,UAAU,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACnD,SAAA;KACJ;IAED,cAAc,CAAC,KAAU,EAAE,UAAe,EAAA;AACtC,QAAA,OAAO,CAAC,UAAU,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,UAAU,GAAG,EAAE,CAAC;KAC7D;IAED,OAAO,GAAA;QACH,MAAM,UAAU,GAAG,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,IAAG;AAClC,YAAA,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,EAAE,IAAI,OAAO,CAAC,UAAU,KAAK,EAAE,EAAE;AACxD,gBAAA,MAAM,QAAQ,GAAQ,OAAO,CAAC,KAAK,CAAC;AACpC,gBAAA,IAAI,OAAO,CAAC,UAAU,KAAK,IAAI,EAAE;AAAE,oBAAA,OAAO,CAAC,UAAU,GAAG,GAAG,CAAC;AAAE,iBAAA;AAC9D,gBAAA,MAAM,QAAQ,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,MAAM,IAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAC,EAAE,CAAC,GAAC,OAAO,CAAC,KAAK,CAAC;gBACzF,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,GAAG,GAAG,OAAO,CAAC,UAAU,GAAG,GAAG,GAAG,QAAQ,GAAG,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;AAC5G,aAAA;AACL,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;KAC9E;IAED,SAAS,GAAA;QACL,MAAM,OAAO,GAAG,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;QACrD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE,YAAY,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;AAC3L,QAAA,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;KAC9F;IAED,SAAS,GAAA;AACL,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;KAC9F;IAED,gBAAgB,CAAC,KAAK,EAAE,UAAe,EAAA;QACnC,UAAU,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC;AACjD,QAAA,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,uBAAuB,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,UAAU,EAAE,CAAC;aACrF,SAAS,CAAC,UAAU,IAAG;AACpB,YAAA,UAAU,CAAC,YAAY,GAAG,UAAU,CAAC,SAAS,CAAC;AACnD,SAAC,CAAC,CAAC;KACV;;AAhGa,sBAAA,CAAA,YAAY,GAA6B;AACnD,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,YAAY,EAAE,IAAI;AAClB,IAAA,WAAW,EAAE,KAAK;AAClB,IAAA,OAAO,EAAE,IAAI;AACb,IAAA,UAAU,EAAE,IAAI;AAChB,IAAA,KAAK,EAAE,gBAAgB;AACvB,IAAA,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG;CACzB,CAAA;oHATO,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,sBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,oMC7FnC,mzJA0EO,EAAA,MAAA,EAAA,CAAA,8vBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FDmBM,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBArFlC,SAAS;+BACI,gBAAgB,EAAA,QAAA,EAAA,mzJAAA,EAAA,MAAA,EAAA,CAAA,8vBAAA,CAAA,EAAA,CAAA;iIA+FV,SAAS,EAAA,CAAA;sBAAxB,KAAK;gBACU,cAAc,EAAA,CAAA;sBAA7B,KAAK;gBACU,cAAc,EAAA,CAAA;sBAA7B,KAAK;gBACU,gBAAgB,EAAA,CAAA;sBAA/B,KAAK;;;AE3GV;MAsBa,QAAQ,CAAA;IA4UjB,WAAwC,CAAA,IAAgB,EAAkC,KAAqB,EAAA;AAAvE,QAAA,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAY;AAAkC,QAAA,IAAK,CAAA,KAAA,GAAL,KAAK,CAAgB;;;;AAxU/G;;AAEG;AACa,QAAA,IAAO,CAAA,OAAA,GAAU,EAAE,CAAC;AAEpC;;AAEG;AACa,QAAA,IAAU,CAAA,UAAA,GAAG,IAAI,CAAC;AAElC;;AAEG;AACa,QAAA,IAAa,CAAA,aAAA,GAAG,YAAY,CAAC;AAE7C;;AAEG;AACa,QAAA,IAAQ,CAAA,QAAA,GAAG,OAAO,CAAC;AAEnC;;AAEG;AACa,QAAA,IAAU,CAAA,UAAA,GAAG,IAAI,CAAC;AAElC;;AAEG;AACa,QAAA,IAAA,CAAA,QAAQ,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AAEtF;;AAEG;AACa,QAAA,IAAW,CAAA,WAAA,GAAG,IAAI,CAAC;AAEnC;;AAEG;AACa,QAAA,IAAU,CAAA,UAAA,GAAG,IAAI,CAAC;AAElC;;AAEG;AACa,QAAA,IAAM,CAAA,MAAA,GAAG,MAAM,CAAC;AAEhC;;AAEG;AACa,QAAA,IAAa,CAAA,aAAA,GAAW,IAAI,CAAC;AAE7C;;AAEG;AACH;;AAEG;AACa,QAAA,IAAQ,CAAA,QAAA,GAAG,IAAI,CAAC;AAEhC;;AAEG;AACa,QAAA,IAAe,CAAA,eAAA,GAAG,IAAI,CAAC;AAEvC;;AAEG;AACa,QAAA,IAAa,CAAA,aAAA,GAAG,IAAI,CAAC;AAErC;;AAEG;AACa,QAAA,IAAmB,CAAA,mBAAA,GAAG,CAAC,CAAC;AAExC;;AAEG;AACa,QAAA,IAAe,CAAA,eAAA,GAAG,wBAAwB,CAAC;QAC3C,IAAqB,CAAA,qBAAA,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;AAQ1E;;AAEG;AACa,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC;AAGtC;;;;AAIG;AACa,QAAA,IAAmB,CAAA,mBAAA,GAAG,KAAK,CAAC;AAE5C;;AAEG;AACa,QAAA,IAAQ,CAAA,QAAA,GAAG,EAAE,CAAC;AAE9B;;;;AAIG;AACa,QAAA,IAAmB,CAAA,mBAAA,GAAG,IAAI,CAAC;AAa3C;;AAEG;AACa,QAAA,IAAU,CAAA,UAAA,GAAG,IAAI,CAAC;;;;AAKxB,QAAA,IAAA,CAAA,WAAW,GAAsB,IAAI,YAAY,EAAE,CAAC;AACpD,QAAA,IAAA,CAAA,WAAW,GAAsB,IAAI,YAAY,EAAE,CAAC;AACpD,QAAA,IAAA,CAAA,cAAc,GAAsB,IAAI,YAAY,EAAE,CAAC;AACvD,QAAA,IAAA,CAAA,gBAAgB,GAAsB,IAAI,YAAY,EAAE,CAAC;;;;AAK3D,QAAA,IAAM,CAAA,MAAA,GAAe,IAAI,CAAC;;;;QAe1B,IAAA,CAAA,cAAc,GAAG;AACrB,YAAA,IAAI,EAAE,CAAC,OAA8C,KAAI;;AAErD,gBAAA,MAAM,QAAQ,IAAS,IAAI,CAAC,KAAK,CAAC,CAAC;AACnC,gBAAA,MAAM,QAAQ,IAAqB,IAAI,QAAQ,EAAE,CAAC,CAAC;AAEnD,gBAAA,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,KAAK,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;AACrI,gBAAA,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,KAAK,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;;gBAE5I,IAAI,MAAM,GAAG,IAAI,CAAC;AAClB,gBAAA,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE;AACrB,oBAAA,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACxD,iBAAA;gBAED,IAAI,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;;AAE5C,gBAAA,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;oBACnD,WAAW,GAAG,EAAE,CAAC;oBACjB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAmC,KAAI;AAC9D,wBAAA,WAAW,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,KAAK,IAAI,GAAG,GAAG,GAAG,CAAC;wBAChD,WAAW,IAAI,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;AAC1D,qBAAC,CAAC,CAAC;AACN,iBAAA;AAED,gBAAA,IAAI,KAAK,GAAe,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;AAEtD,gBAAA,IAAI,MAAM,EAAE;AACR,oBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;wBAC/B,KAAK,GAAG,EAAE,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;AAC7C,qBAAA;AAAM,yBAAA;wBACH,KAAK,GAAG,MAAM,CAAC;AAClB,qBAAA;AACJ,iBAAA;;AAED,gBAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,WAAW,CAAC;AAC9I,qBAAA,IAAI,CAAC,CAAC,OAAO,KAAI;oBACd,IAAI,IAAI,GAAG,EAAE,CAAC;AACd,oBAAA,OAAO,CAAC,OAAO,CAAC,OAAO,IAAG;wBACtB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAA;AACzC,qBAAC,CAAC,CAAC;AACH,oBAAA,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBACtB,IAAI,CAAC,MAAM,EAAE,CAAC;oBACd,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5C,iBAAC,CAAC,CAAC;aAEV;AACD,YAAA,OAAO,EAAE,CAAC,OAAO,KAAI;AACjB,gBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;aAClC;AACD,YAAA,MAAM,EAAE,CAAC,OAAO,KAAI;AAChB,gBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;aAClC;AACD,YAAA,MAAM,EAAE,CAAC,OAAO,KAAI;AAChB,gBAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;aAClC;AACD,YAAA,YAAY,EAAE,CAAC,OAAO,EAAE,SAAS,KAAI;AACjC,gBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC5B,gBAAA,IAAI,SAAS,KAAK,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE;AACxC,oBAAA,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;AACtD,iBAAA;AAAM,qBAAA;AAAE,oBAAA,OAAO,OAAO,CAAC;AAAE,iBAAA;aAC7B;SAEJ,CAAA;QA4FO,IAAA,CAAA,UAAU,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;YAC3C,SAAS,EAAE,IAAI,CAAC,cAAc;AAC9B,YAAA,MAAM,EAAE;AAEJ,gBAAA,KAAK,EAAE,CAAC,QAAQ,KAAI;;AAEhB,oBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC;iBAC7C;AACJ,aAAA;AACD,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,aAAa,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,cAAc;AACnD,YAAA,eAAe,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,cAAc;AACrD,YAAA,cAAc,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,cAAc;YACpD,QAAQ,EAAE,IAAI,CAAC,QAAQ;AAC1B,SAAA,CAAC,CAAC;AAEH;;AAEG;AACK,QAAA,IAAkB,CAAA,kBAAA,GAA0B,IAAI,CAAC;KAG2D;AAzPpH;;AAEE;IACF,IAAa,KAAK,CAAC,CAAa,EAAA;AAAI,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAAC,IAAI,IAAI,CAAC,YAAY,EAAE;AAAE,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,GAAQ,CAAC,CAAC;AAAE,SAAA;KAAE;IACnH,IAAI,KAAK,KAAiB,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE;;;;AAwIvC,IAAA,iBAAiB,CAAC,MAAmC,EAAA;AACzD,QAAA,MAAM,QAAQ,IAAS,IAAI,CAAC,KAAK,CAAC,CAAC;AACnC,QAAA,MAAM,QAAQ,IAAqB,IAAI,QAAQ,EAAE,CAAC,CAAC;QAEnD,IAAI,KAAK,GAAO,IAAI,CAAC;AACrB,QAAA,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7C,QAAQ,MAAM,CAAC,KAAK;AAChB,gBAAA,KAAK,IAAI;AACL,oBAAA,KAAK,GAAG,EAAC,KAAK,EAAC,EAAE,EAAC,CAAA;oBAClB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAoC,KAAI;wBAC5D,IAAI,UAAU,GAAG,GAAG,CAAC;wBACrB,QAAQ,IAAI,CAAC,QAAQ;AACjB,4BAAA,KAAK,IAAI;gCACL,UAAU,GAAG,GAAG,CAAC;gCACjB,MAAM;AACV,4BAAA,KAAK,KAAK;gCACN,UAAU,GAAG,GAAG,CAAC;gCACjB,MAAM;AACV,4BAAA,KAAK,KAAK;gCACN,UAAU,GAAG,IAAI,CAAC;gCAClB,MAAM;AACV,4BAAA,KAAK,IAAI;gCACL,UAAU,GAAG,GAAG,CAAC;gCACjB,MAAM;AACV,4BAAA,KAAK,KAAK;gCACN,UAAU,GAAG,IAAI,CAAC;gCAClB,MAAM;AACV,4BAAA,KAAK,IAAI;gCACL,UAAU,GAAG,GAAG,CAAC;gCACjB,MAAM;AACV,4BAAA,KAAK,YAAY;gCACb,UAAU,GAAG,aAAa,CAAC;gCAC3B,MAAM;AACV,4BAAA,KAAK,UAAU;gCACX,UAAU,GAAG,WAAW,CAAC;gCACzB,MAAM;AACV,4BAAA,KAAK,SAAS,CAAC;AACf,4BAAA,KAAK,QAAQ;gCACT,UAAU,GAAG,GAAG,CAAC;AACjB,gCAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;gCAChB,MAAM;AACV,4BAAA,KAAK,WAAW,CAAC;AACjB,4BAAA,KAAK,YAAY;gCACb,UAAU,GAAG,GAAG,CAAC;AACjB,gCAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;gCAChB,MAAM;AAEV,4BAAA;AACI,gCAAA,UAAU,GAAQ,IAAI,CAAC,QAAQ,CAAC;gCAChC,MAAM;AACb,yBAAA;AACD,wBAAA,IAAI,IAAI,CAAC,KAAK,YAAY,IAAI,EAAE;AAC5B,4BAAA,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;AAC/H,yBAAA;AAAM,6BAAA;4BACH,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;AACpG,yBAAA;AACH,qBAAC,CAAC,CAAC;oBACL,MAAM;AAEV,gBAAA,KAAK,KAAK;oBACN,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;wBAC7B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE;4BAChC,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAM,MAAM,CAAC,OAAO,CAAC,CAAC;AACvD,yBAAA;AAAM,6BAAA;AACH,4BAAA,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAM,MAAM,CAAC,OAAO,EAAC,CAAC,CAAC;AAC9E,yBAAA;AACJ,qBAAA;AAAM,yBAAA;AACH,wBAAA,KAAK,GAAG,EAAC,YAAY,EAAC,EAAE,EAAC,CAAC;wBAC1B,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAQ,KAAI;4BAChC,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,gCAAA,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;AACzD,6BAAA;AAAM,iCAAA;gCACH,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACrF,6BAAA;AACL,yBAAC,CAAC,CAAC;AACN,qBAAA;oBACD,MAAM;AAEN,gBAAA;AACI,oBAAA,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAO,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;oBAClF,MAAM;AACb,aAAA;AACJ,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;;;;IAgCD,IAAI,WAAW,CAAC,CAAa,EAAA;QAAI,IAAI,IAAI,CAAC,YAAY,EAAE;AAAE,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,CAAC,CAAC;AAAE,SAAA;KAAE;IAChG,IAAI,OAAO,CAAC,CAAS,EAAA;QAAI,IAAI,IAAI,CAAC,YAAY,EAAE;AAAE,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,CAAC,CAAC;AAAE,SAAA;KAAE;IACpF,IAAI,WAAW,CAAC,CAAS,EAAA;QAAI,IAAI,IAAI,CAAC,YAAY,EAAE;AAAE,YAAA,IAAI,CAAC,YAAY,CAAC,aAAa,GAAG,CAAC,CAAC;AAAE,SAAA;KAAE;AAE9F;;AAEG;AACH,IAAA,IAAI,aAAa,GAAA;QACb,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE;YACtD,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,SAAS,KAAK,EAAE,EAAE;AAClD,gBAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,SAAS,GAAS,IAAI,CAAC,KAAM,CAAC,SAAS,CAAC,SAAS,CAAC;AAClF,gBAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,WAAW,GAAS,IAAI,CAAC,KAAM,CAAC,SAAS,CAAC,WAAW,CAAC;AACtF,gBAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,GAAS,IAAI,CAAC,KAAM,CAAC,SAAS,CAAC,MAAM,CAAC;AAC/E,aAAA;AACD,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;AAC1C,SAAA;AAAM,aAAA;AAAE,YAAA,OAAO,IAAI,CAAC;AAAE,SAAA;KAC1B;AACD,IAAA,IAAI,aAAa,CAAC,CAAa,EAAA,EAAI,IAAI,CAAC,YAAY,CAAC,aAAa,GAAG,CAAC,CAAC,EAAE;AAEzE;;AAEG;IACH,IAAI,WAAW,KAAa,OAAO,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE;AAG9K;;AAEG;IACH,eAAe,GAAA;QACX,IAAI,CAAC,cAAc,EAAE,CAAC;AAEtB,QAAA,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,UAAU,EAAE,qBAAqB,EAAE,CAAC,MAAM,KAAO,EAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AAE/G,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;KAC3B;AAED;;;;;AAKG;IACH,QAAQ,CAAC,QAAoB,IAAI,EAAE,SAAiB,IAAI,EAAE,UAAkB,IAAI,EAAA;QAC5E,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,IAAI,KAAK,EAAE;AAAE,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AAAE,aAAA;AACxC,YAAA,IAAI,MAAM,EAAE;AAAE,gBAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;AAAE,aAAA;AAC1C,YAAA,IAAI,OAAO,EAAE;AAAE,gBAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AAAE,aAAA;;YAGxC,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;oBACnC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjC,iBAAA;AAAM,qBAAA;AACH,oBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;yBAClB,IAAI,CAAC,MAAK;AACP,wBAAA,IAAI,CAAC,MAAM,EAAE,CAAC;AAClB,qBAAC,CAAC,CAAC;AACV,iBAAA;AACJ,aAAA;AAAM,iBAAA;AACH,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;qBAClB,IAAI,CAAC,MAAK;AACP,oBAAA,IAAI,CAAC,MAAM,EAAE,CAAC;AAClB,iBAAC,CAAC,CAAC;AACV,aAAA;AACJ,SAAA;KACJ;AAED,IAAA,QAAQ,CAAC,QAAoB,EAAA;AACzB,QAAA,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACpB,IAAI,CAAC,YAAY,GAAG,IAAI,eAAe,EAAE,CAAC;YAC1C,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;AACzC,SAAA;KACJ;AAED,IAAA,aAAa,CAAC,IAAgB,EAAA;QAC1B,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,UAAU,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,MAAM,EAAE,CAAC;SACjB,EAAE,CAAC,CAAC,CAAC;KACT;AAED,IAAA,UAAU,CAAC,OAA6B,EAAA;QACpC,IAAI,IAAI,CAAC,UAAU,EAAE;AAAE,YAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAAE,SAAA;KAChE;AAED,IAAA,UAAU,CAAC,KAAK,EAAA;;AAEZ,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,EAAE;AACtC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;YAChE,IAAI,CAAC,YAAY,CAAC,aAAa,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;YACnE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;AAC1D,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE;AAC1B,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAC7E,aAAA;AACJ,SAAA;KACJ;AAED,IAAA,WAAW,CAAC,KAAK,EAAA;;QAEb,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE;YACtD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;AAC7D,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE;AAC1B,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAChF,aAAA;AACJ,SAAA;KACJ;IAGD,OAAO,GAAA;QACH,IAAI,CAAC,QAAQ,EAAE,CAAC;KACnB;IAED,MAAM,GAAA;QACF,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO;AAAE,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;;;;QAIzE,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,UAAU,CAAC,MAAK;AACZ,gBAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,IAAG;AAC5C,oBAAA,MAAM,OAAO,GAAG,CAAC,CAAC,eAAe,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;AACxD,oBAAA,IAAI,OAAO,EAAE;wBACT,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAChD,wBAAA,IAAI,QAAQ,IAAI,QAAQ,IAAI,EAAE,EAAE;AAC5B,4BAAA,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC9B,yBAAA;AACJ,qBAAA;AACL,iBAAC,CAAC,CAAC;aACN,EAAE,CAAC,CAAC,CAAC;AACT,SAAA;KACJ;AAED;;AAEG;IACH,WAAW,GAAA;QACP,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;AAC1C,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE;AAC1B,gBAAA,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;AAC7D,aAAA;AAAM,iBAAA;AAAE,gBAAA,OAAO,IAAI,CAAC;AAAE,aAAA;AAC1B,SAAA;AAAM,aAAA;AAAE,YAAA,OAAO,IAAI,CAAC;AAAE,SAAA;KAC1B;AAED;;;AAGG;AACH,IAAA,qBAAqB,CAAC,OAAmB,EAAA;AACrC,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC;AAC3C,QAAA,IAAI,GAAG,GAAO,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,IAAI,GAAG,IAAI,OAAO,EAAE;AAChB,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,IAAG;gBACvB,IAAI,GAAG,CAAC,KAAK,EAAE;AACX,oBAAA,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;AACtC,iBAAA;AACL,aAAC,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;AAC7B,SAAA;KACJ;AAGD;;;;AAIG;AACH,IAAA,aAAa,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,EAAA;AAChC,QAAA,IAAI,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE;YAC3B,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;gBACvC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;AACrC,gBAAA,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;oBAChB,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACpB,oBAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE;AAClC,wBAAA,GAAG,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;AACvC,qBAAA;AACJ,iBAAA;AACJ,aAAA;YACD,IAAI,KAAK,GAAG,CAAC,EAAE;AACX,gBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;AACrD,gBAAA,IAAI,QAAQ,EAAE;AACV,oBAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC;AAC/E,oBAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC;AAClE,oBAAA,MAAM,QAAQ,GAAG,mBAAmB,GAAG,mBAAmB,CAAC;oBAC3D,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;AACvF,iBAAA;gBACD,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,oBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;oBAChE,IAAI,CAAC,YAAY,CAAC,aAAa,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;AACtE,iBAAA;AACJ,aAAA;AACJ,SAAA;KACJ;AAED;;AAEG;IACH,qBAAqB,GAAA;QACjB,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;AACrC,QAAA,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;YAChB,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACpB,YAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE;AAClC,gBAAA,GAAG,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;AACvC,aAAA;AACJ,SAAA;AACD,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;KAC7B;AAED;;AAEG;IACH,gBAAgB,GAAA;QACZ,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;AAC1C,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE;AAC1B,gBAAA,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;gBACb,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;AACtC,gBAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;oBACjB,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;AAC7B,iBAAA;AAAM,qBAAA;AACH,oBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;oBAChE,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,wBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,KAAI;4BAChD,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE;gCAAE,GAAG,GAAG,KAAK,CAAC;AAAE,6BAAA;AAChE,yBAAC,CAAC,CAAC;AACN,qBAAA;AAAM,yBAAA,IAAU,IAAI,CAAC,UAAW,CAAC,SAAS,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,EAAE,EAAE;AAC5H,wBAAA,IAAI,CAAC,UAAW,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,KAAI;AAC1D,4BAAA,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;gCAAE,GAAG,GAAG,KAAK,CAAC;AAAE,6BAAA;AAC5F,yBAAC,CAAC,CAAC;AACN,qBAAA;AACJ,iBAAA;AAED,gBAAA,OAAO,GAAG,CAAC;AACd,aAAA;AAAM,iBAAA;gBAAE,OAAO,CAAC,CAAC,CAAC;AAAE,aAAA;AACxB,SAAA;AAAM,aAAA;YAAE,OAAO,CAAC,CAAC,CAAC;AAAE,SAAA;KACxB;AAED;;AAEG;IACH,YAAY,GAAA;QACR,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YACtC,IAAI,eAAe,GAAG,EAAE,CAAC;AACzB,YAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBAC9C,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AACjD,aAAA;YAAA,CAAC;AAEF,YAAA,OAAO,eAAe,CAAC;AAE1B,SAAA;AAAM,aAAA;AACH,YAAA,OAAO,EAAE,CAAC;AACb,SAAA;KACJ;AAED;;AAEG;IACH,eAAe,GAAA;QACX,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YACtC,IAAI,YAAY,GAAG,EAAE,CAAC;YACtB,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,gBAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;oBAC9C,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC;AACvC,oBAAA,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AACzD,iBAAA;gBAAA,CAAC;AACL,aAAA;AAAM,iBAAA;AACH,gBAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;AAC9C,oBAAA,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC5D,iBAAA;gBAAA,CAAC;AACL,aAAA;AAED,YAAA,OAAO,YAAY,CAAC;AACvB,SAAA;AAAM,aAAA;AACH,YAAA,OAAO,EAAE,CAAC;AACb,SAAA;KACJ;AAED;;AAEG;IACH,iBAAiB,GAAA;QACb,IAAI,IAAI,CAAC,aAAa,EAAE;AACpB,YAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;AAC3E,SAAA;QACD,IAAI,IAAI,CAAC,kBAAkB,EAAE;;YAEzB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;AAC1D,SAAA;AAED,QAAA,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;KACjC;AAED;;AAEG;AACH,IAAA,qBAAqB,CAAC,IAAS,EAAA;QAC3B,IAAI,CAAC,IAAI,EAAE;AAAE,YAAA,OAAO,IAAI,CAAC;AAAE,SAAA;QAE3B,IAAI,GAAG,GAAG,IAAI,CAAC;QACf,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,IAAG;gBACvC,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE;oBAAE,GAAG,GAAG,OAAO,CAAC;AAAE,iBAAA;AAClE,aAAC,CAAC,CAAC;AACN,SAAA;AAAM,aAAA,IAAU,IAAI,CAAC,UAAW,CAAC,SAAS,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,EAAE,EAAE;YAC5H,IAAI,CAAC,UAAW,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,OAAO,IAAG;AACjD,gBAAA,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;oBAAE,GAAG,GAAG,OAAO,CAAC;AAAE,iBAAA;AAC9F,aAAC,CAAC,CAAC;AAEN,SAAA;AACD,QAAA,OAAO,GAAG,CAAC;KACd;AAED;;AAEG;AACH,IAAA,SAAS,CAAC,GAAW,EAAA;AACjB,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE;;YAE5D,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAC3C,SAAA;aAAM,IAAU,IAAI,CAAC,UAAW,CAAC,SAAS,EAAE,CAAC,MAAM,GAAG,GAAG,EAAE;AAClD,YAAA,IAAI,CAAC,UAAW,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAClD,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;AAC7B,SAAA;KACJ;AAED,IAAA,eAAe,CAAC,OAAO,EAAA;QACnB,IAAI,IAAI,CAAC,UAAU;AAAE,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QAC/C,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,CAAC;;QAGtC,IAAI,IAAI,CAAC,YAAY;YAAE,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAChE,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,cAAc,EAAE,CAAC;KACzB;IAED,qBAAqB,CAAC,UAAU,EAAE,OAAO,EAAA;AACrC,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE;AACjC,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YAC1B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,CAAC;AAEtC,YAAA,IAAI,CAAC,kBAAkB,GAAG,UAAU,CAAC;AACrC,YAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YACvB,IAAI,CAAC,cAAc,EAAE,CAAC;AACzB,SAAA;KACJ;AAED,IAAA,eAAe,KAAK,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE;IAGvC,cAAc,GAAA;QAClB,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,CAAC,YAAY,GAAG,IAAI,eAAe,EAAE,CAAC;YAC1C,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;YACtC,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAC5C,SAAA;QAED,IAAI,IAAI,CAAC,QAAQ;AAAE,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAE/C,IAAI,IAAI,CAAC,mBAAmB,EAAE;;AAE1B,YAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE;AAC5B,gBAAA,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;;AAErF,oBAAA,IAAI,GAAG,CAAC,cAAc,CAAC,kBAAkB,CAAC,EAAE;wBACxC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;4BAC/C,GAAG,CAAC,gBAAgB,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;AAC1C,yBAAA;AACJ,qBAAA;AAAM,yBAAA;wBACH,GAAG,CAAC,gBAAgB,GAAG,EAAC,KAAK,EAAE,GAAG,CAAC,KAAK,EAAC,CAAA;AAC5C,qBAAA;AACJ,iBAAA;AACJ,aAAA;AACJ,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,EAAE;AACxE,YAAA,IAAI,WAAW,GAAO,EAAC,MAAM,EAAE,EAAE,EAAC,CAAC;AACnC,YAAA,MAAM,QAAQ,IAAS,IAAI,CAAC,MAAM,CAAC,CAAC;AACpC,YAAA,MAAM,QAAQ,IAAqB,IAAI,QAAQ,EAAE,CAAC,CAAC;AACnD,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,IAAG;gBAC3B,IAAI,OAAO,CAAC,KAAK,EAAE;oBACf,MAAM,KAAK,GAAG,QAAQ,CAAC,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACzD,oBAAA,IAAI,KAAK,EAAE;wBACP,QAAQ,KAAK,CAAC,IAAI;AACd,4BAAA,KAAK,MAAM,CAAC;AACZ,4BAAA,KAAK,MAAM;AACP,gCAAA,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAC,IAAI,EAAC,MAAM,EAAC,CAAC;gCAClD,MAAM;AAEV,4BAAA,KAAK,SAAS;AACV,gCAAA,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAC,IAAI,EAAC,SAAS,EAAC,CAAC;gCACrD,MAAM;AAEV,4BAAA,KAAK,QAAQ;AACT,gCAAA,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAC,IAAI,EAAC,QAAQ,EAAC,CAAC;gCACpD,MAAM;AAEV,4BAAA;gCACI,MAAM;AACb,yBAAA;AACJ,qBAAA;AACJ,iBAAA;AACL,aAAC,CAAC,CAAC;YAEH,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;gBAClC,SAAS,EAAE,IAAI,CAAC,cAAc;AAC9B,gBAAA,MAAM,EAAE;AACJ,oBAAA,KAAK,EAAE,WAAW;AAClB,oBAAA,KAAK,EAAE,CAAC,QAAQ,KAAI;;AAEhB,wBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC;qBAC7C;AACJ,iBAAA;AACD,gBAAA,YAAY,EAAE,IAAI;AAClB,gBAAA,aAAa,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,cAAc;AACnD,gBAAA,eAAe,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,cAAc;AACrD,gBAAA,cAAc,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,cAAc;gBACpD,QAAQ,EAAE,IAAI,CAAC,QAAQ;AAC1B,aAAA,CAAC,CAAC;YAEH,IAAI,IAAI,CAAC,kBAAkB,EAAE;;gBAEzB,KAAK,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;AAC7D,aAAA;AACD,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AAC3B,SAAA;QAED,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,SAAS,CAAM;AACzC,YAAA,UAAU,EAAE,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI;YACxD,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE;AAC3C,YAAA,MAAM,EAAE,CAAC,MAAM,KAAO,EAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE;AAChD,YAAA,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI;gBACxB,OAAO,EAAE,IAAI,CAAC,eAAe;gBAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,SAAS,EAAE,IAAI,CAAC,aAAa;gBAC7B,WAAW,EAAE,IAAI,CAAC,mBAAmB;gBACrC,QAAQ,EAAE,IAAI,CAAC,qBAAqB;aACvC,GAAG,KAAK;AACT,YAAA,UAAU,EAAE,CAAC,IAAI,CAAC,cAAc,IAAE,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,GAAC,IAAI;AACvE,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,UAAU,EAAE,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,aAAa,GAAG,KAAK;YAC1D,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,OAAO,EAAE,IAAI,CAAC,OAAO;AACxB,SAAA,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAElE,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,MAAM,CAAC,QAAQ,GAAG,MAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,EAAC,CAAA;AAC3C,SAAA;KACJ;;sGA7xBQ,QAAQ,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EA4UG,UAAU,EAAA,EAAA,EAAA,KAAA,EAAoC,cAAc,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA5UvE,QAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,QAAQ,w2BAHN,CAAC,UAAU,EAAE,cAAc,CAAC,EAH7B,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;AAEH,UAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;4FAIE,QAAQ,EAAA,UAAA,EAAA,CAAA;kBARpB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,QAAQ,EAAE,CAAA;;AAEH,UAAA,CAAA;AACP,oBAAA,SAAS,EAAE,CAAC,UAAU,EAAE,cAAc,CAAC;iBAC1C,CAAA;;;8BA8UgB,MAAM;+BAAC,UAAU,CAAA;;8BAA6B,MAAM;+BAAC,cAAc,CAAA;;yBArUhE,OAAO,EAAA,CAAA;sBAAtB,KAAK;gBAKU,UAAU,EAAA,CAAA;sBAAzB,KAAK;gBAKU,aAAa,EAAA,CAAA;sBAA5B,KAAK;gBAKU,QAAQ,EAAA,CAAA;sBAAvB,KAAK;gBAKU,UAAU,EAAA,CAAA;sBAAzB,KAAK;gBAKU,QAAQ,EAAA,CAAA;sBAAvB,KAAK;gBAKU,WAAW,EAAA,CAAA;sBAA1B,KAAK;gBAKU,UAAU,EAAA,CAAA;sBAAzB,KAAK;gBAKU,MAAM,EAAA,CAAA;sBAArB,KAAK;gBAKU,aAAa,EAAA,CAAA;sBAA5B,KAAK;gBAQU,QAAQ,EAAA,CAAA;sBAAvB,KAAK;gBAKU,eAAe,EAAA,CAAA;sBAA9B,KAAK;gBAKU,aAAa,EAAA,CAAA;sBAA5B,KAAK;gBAKU,mBAAmB,EAAA,CAAA;sBAAlC,KAAK;gBAKU,eAAe,EAAA,CAAA;sBAA9B,KAAK;gBACU,qBAAqB,EAAA,CAAA;sBAApC,KAAK;gBAKO,KAAK,EAAA,CAAA;sBAAjB,KAAK;gBAMU,cAAc,EAAA,CAAA;sBAA7B,KAAK;gBAQU,mBAAmB,EAAA,CAAA;sBAAlC,KAAK;gBAKU,QAAQ,EAAA,CAAA;sBAAvB,KAAK;gBAOU,mBAAmB,EAAA,CAAA;sBAAlC,KAAK;gBAWU,WAAW,EAAA,CAAA;sBAA1B,KAAK;gBAKU,UAAU,EAAA,CAAA;sBAAzB,KAAK;gBAKI,WAAW,EAAA,CAAA;sBAApB,MAAM;gBACG,WAAW,EAAA,CAAA;sBAApB,MAAM;gBACG,cAAc,EAAA,CAAA;sBAAvB,MAAM;gBACG,gBAAgB,EAAA,CAAA;sBAAzB,MAAM;gBAsMsB,OAAO,EAAA,CAAA;sBAAnC,SAAS;uBAAC,SAAS,CAAA;;;ACnWxB,IAAI,cAA2B,CAAC;AAGhC;;;AAGG;MAEU,WAAW,CAAA;AA8EpB,IAAA,WAAA,GAAA;AA/CA,QAAA,IAAK,CAAA,KAAA,GAAQ,IAAI,CAAC;AAClB,QAAA,IAAQ,CAAA,QAAA,GAAG,EAAE,CAAC;AAEd,QAAA,IAAM,CAAA,MAAA,GAAQ,IAAI,CAAC;AACnB,QAAA,IAAS,CAAA,SAAA,GAAG,EAAE,CAAC;AAEf,QAAA,IAAQ,CAAA,QAAA,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AAEnC,QAAA,IAAY,CAAA,YAAA,GAAG,IAAI,CAAC;AAEpB,QAAA,IAAO,CAAA,OAAA,GAAG,IAAI,CAAC;AAEf,QAAA,IAAW,CAAA,WAAA,GAAG,IAAI,CAAC;AAEnB,QAAA,IAAW,CAAA,WAAA,GAAG,IAAI,CAAC;AAEnB,QAAA,IAAK,CAAA,KAAA,GAAG,EAAE,CAAC;AAEX,QAAA,IAAA,CAAA,OAAO,GAAkB,CAAC,OAAO,CAAC,CAAC;AA8B/B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACvB,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC;KACxB;AA/BD;;;;;AAKI;AACJ,IAAA,OAAO,SAAS,CAAC,MAAmB,EAAE,aAA2B,EAAA;AAC7D,QAAA,aAAa,GAAG,CAAC,aAAa,IAAI,aAAa,GAAG,cAAc,CAAC;AAEjE,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AAAE,YAAA,MAAM,CAAC,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC;AAAE,SAAA;AAEvD,QAAA,IAAI,MAAM,CAAC,UAAU,KAAK,KAAK,EAAE;AAAE,YAAA,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;AAAE,SAAA;AAE9D,QAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,EAAE;YAC1B,IAAI,KAAK,CAAC,OAAO,CAAgB,MAAM,CAAC,QAAQ,CAAC,EAAE;gBAC/C,MAAM,CAAC,QAAQ,GAAmB,MAAM,CAAC,QAAS,CAAC,MAAM,KAAK,CAAC;sBACzD,aAAa,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAClD,aAAA;AAAM,iBAAA,IAAI,CAAC,KAAK,CAAS,MAAM,CAAC,QAAQ,CAAC,EAAE;gBACxC,MAAM,CAAC,QAAQ,GAAG,CAAS,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC/C,aAAA;AAAM,iBAAA;AACH,gBAAA,MAAM,CAAC,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;AAC5C,aAAA;AACJ,SAAA;AAED,QAAA,OAAO,MAAM,CAAC;KACjB;;yGA5EQ,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;6GAAX,WAAW,EAAA,CAAA,CAAA;4FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB,UAAU;;AAwFX,cAAc,GAAG,IAAI,WAAW,EAAE;;ACnFlC,IAAI,OAAoB,CAAC;AAEzB;MAEa,KAAK,CAAA;AAOd,IAAA,WAAA,CAAoB,wBAAkD,EAAU,MAAwB,EACxF,aAA0B,EAAA;AADtB,QAAA,IAAwB,CAAA,wBAAA,GAAxB,wBAAwB,CAA0B;AAAU,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAkB;;;;;AAMpG,QAAA,OAAO,GAAG,CAAC,aAAa,IAAI,WAAW,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,IAAI,WAAW,EAAE,CAAC;KACxF;AAED;;;;;;;;AAQG;AACI,IAAA,IAAI,CAAC,aAAkB,EAAE,UAAgB,EAC5C,MAAoB,EAAE,aAAyB,GAAA,KAAK,EAAE,QAAA,GAAmB,EAAE,EAAA;;;;;AAM3E,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;KAC7I;AAED;;;;;;;;;AASG;AACI,IAAA,UAAU,CAAC,aAAwB,EAAE,OAAyB,EACjE,UAAe,EACf,MAAoB,EACpB,aAAA,GAAyB,KAAK,EAC9B,WAAmB,EAAE,EAAA;AAErB,QAAA,MAAM,GAAG,CAAC,MAAM,IAAI,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC;QAErE,IAAI,CAAC,aAAa,EAAE;AAChB,YAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBAC9D,MAAM,IAAI,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AACzC,gBAAA,MAAM,EAAE,GAAG,CAAC,QAAQ,IAAI,QAAQ,KAAK,EAAE,IAAI,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC;AACnE,gBAAA,IAAI,IAAI,CAAC,SAAS,KAAK,EAAE,EAAE;oBACvB,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;AAClC,oBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AAC7B,iBAAA;AACJ,aAAA;AACJ,SAAA;QAED,MAAM,sBAAsB,GAAG,IAAI,CAAC,wBAAwB,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAC;QACpG,MAAM,kBAAkB,GAAG,OAAO,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC;QAC3E,MAAM,cAAc,GAAG,kBAAkB,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,mBAAmB,EAAE,CAAC;AACtF,QAAA,kBAAkB,CAAC,QAAQ,CAAC,gBAAgB,GAAG,UAAU,CAAC;AAE1D,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,WAAW,CAAC;YACtE,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,SAAS,EAAE,MAAM,CAAC,WAAW;YAC7B,KAAK,EAAE,MAAM,CAAC,OAAO;AACrB,YAAA,MAAM,EAAE,KAAK;YACb,SAAS,EAAE,MAAM,CAAC,WAAW;AAC7B,YAAA,KAAK,EAAE,CAAC,KAAK,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,EAAE;AACjE,SAAA,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACvB,IAAI,MAAM,CAAC,YAAY,EAAE;YACrB,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;AAClC,SAAA;AAAM,aAAA;AAAE,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;AAAE,SAAA;AAEjC,QAAA,cAAc,CAAC,UAAU,GAAG,kBAAkB,CAAC;AAC/C,QAAA,cAAc,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC;;AAG5C,QAAA,kBAAkB,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;;QAGrD,IAAI,CAAC,aAAa,EAAE;YAChB,MAAM,EAAE,GAAG,CAAC,QAAQ,IAAI,QAAQ,KAAK,EAAE,IAAI,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;AAC5E,YAAA,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;AACxE,SAAA;QAED,OAAO,cAAc,CAAC,MAAM,CAAC;KAEhC;IAEM,WAAW,CAAC,KAAK,EAAE,iBAAqC,EAAA;;AAE3D,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC9D,MAAM,IAAI,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AACzC,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,iBAAiB,EAAE;AACnC,gBAAA,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACtC,aAAA;AACJ,SAAA;AAED,QAAA,IAAI,iBAAiB,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa;AAAE,YAAA,iBAAiB,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;AAC/G,QAAA,iBAAiB,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;AACxC,QAAA,iBAAiB,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;KAC1C;AAED;;;;;;;AAOG;IACI,UAAU,CAAC,SAAc,EAAE,UAAe,EAAE,aAAyB,GAAA,KAAK,EAAE,QAAA,GAAmB,EAAE,EAAA;AAEpG,QAAA,OAAO,IAAI,CAAC,IAAI,CAAM,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC,YAAY,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;KACjG;;AA7Ha,KAAc,CAAA,cAAA,GAAG,EAAG,CAAA;mGAHzB,KAAK,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;uGAAL,KAAK,EAAA,CAAA,CAAA;4FAAL,KAAK,EAAA,UAAA,EAAA,CAAA;kBADjB,UAAU;;;8BASF,QAAQ;;;;MCFJ,kBAAkB,CAAA;AAgC3B,IAAA,WAAA,CAAmB,MAA2B,EAAU,KAAY,EAAU,OAAwB,EAAA;AAAnF,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAqB;AAAU,QAAA,IAAK,CAAA,KAAA,GAAL,KAAK,CAAO;AAAU,QAAA,IAAO,CAAA,OAAA,GAAP,OAAO,CAAiB;AArBtF,QAAA,IAAS,CAAA,SAAA,GAAa,EAAE,CAAC;AACzB,QAAA,IAAQ,CAAA,QAAA,GAAa,EAAE,CAAC;AACxB,QAAA,IAAU,CAAA,UAAA,GAAG,QAAQ,CAAC;AACtB,QAAA,IAAO,CAAA,OAAA,GAAG,EAAE,CAAC;AAerB,QAAA,IAAa,CAAA,aAAA,GAAG,CAAC,CAAC,CAAC;KAK1B;AAlBD,IAAA,IAAW,MAAM,CAAC,CAAC,EAAA,EAAI,kBAAkB,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAA,EAAE;;AACnE,IAAA,IAAW,KAAK,CAAC,CAAC,EAAA,EAAI,kBAAkB,CAAC,YAAY,CAAC,KAAK,GAAG,CAAC,CAAA,EAAE;;AACjE,IAAA,IAAW,KAAK,CAAC,CAAC,EAAA,EAAI,kBAAkB,CAAC,YAAY,CAAC,KAAK,GAAG,CAAC,CAAA,EAAE;;IAGjE,IAAW,gBAAgB,CAAC,CAAC,EAAA;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,CAAC,WAAW,EAAE;AAAE,YAAA,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,WAAW,CAAC;AAAE,SAAA;QACvD,IAAI,CAAC,CAAC,OAAO,EAAE;AAAE,YAAA,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;AAAE,SAAA;KAC/C;AAUD;;AAEG;AACI,IAAA,IAAI,CAAC,IAAc,EAAE,IAAe,EAAE,OAAgB,EAAE,WAAoB,EAAA;QAC/E,IAAI,CAAC,IAAI,EAAE;YAAE,IAAI,GAAG,IAAI,CAAC;AAAE,SAAA;AAE3B,QAAA,OAAY,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,kBAAkB,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC;KAChL;AAED,IAAA,eAAe,CAAC,EAAE,EAAA;QACd,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC;KAChD;AAED,IAAA,EAAE,CAAC,MAAM,EAAA;QACL,MAAM,CAAC,eAAe,EAAE,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;KACzC;;AAnDa,kBAAA,CAAA,YAAY,GAA6B;AACnD,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,YAAY,EAAE,IAAI;AAClB,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,OAAO,EAAE,IAAI;AACb,IAAA,UAAU,EAAE,IAAI;AAChB,IAAA,KAAK,EAAE,WAAW;AAClB,IAAA,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG;CACzB,CAAA;gHATO,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,KAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,kBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,EAHhB,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,CAAC,KAAK,CAAC,EAXR,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;AAUV,GAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FAIS,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAhB9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;AAUV,GAAA,CAAA;oBACA,SAAS,EAAE,CAAC,KAAK,CAAC;iBACrB,CAAA;uJAamB,SAAS,EAAA,CAAA;sBAAxB,KAAK;gBACU,QAAQ,EAAA,CAAA;sBAAvB,KAAK;gBACU,UAAU,EAAA,CAAA;sBAAzB,KAAK;gBACU,OAAO,EAAA,CAAA;sBAAtB,KAAK;;;MClBG,UAAU,CAAA;;;;AA6CnB,IAAA,WAAA,CAAoB,KAAY,EAAU,UAAsB,EAAU,OAAyB,EAAU,UAA8B,EAAA;AAAvH,QAAA,IAAK,CAAA,KAAA,GAAL,KAAK,CAAO;AAAU,QAAA,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;AAAU,QAAA,IAAO,CAAA,OAAA,GAAP,OAAO,CAAkB;AAAU,QAAA,IAAU,CAAA,UAAA,GAAV,UAAU,CAAoB;AA3C3I;;AAEG;AACa,QAAA,IAAc,CAAA,cAAA,GAAwB,IAAI,CAAC;AAE3D;;AAEG;AACa,QAAA,IAAU,CAAA,UAAA,GAA0B,IAAI,CAAC;KAoCxD;AA5BD;;AAEG;AACH,IAAA,IAAW,eAAe,GAAA;QACtB,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE;YAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC;YACvD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;AACjD,YAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;AACtD,gBAAA,MAAM,QAAQ,GAAQ,YAAY,CAAC,KAAK,CAAC,CAAC;gBAC1C,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AACtC,aAAA;YAAA,CAAC;AACL,SAAA;AAED,QAAA,OAAO,SAAS,CAAC;KACpB;AAeD;;AAEG;IACH,kBAAkB,GAAA;;QAEd,IAAI,IAAI,CAAC,SAAS,EAAE;;YAEhB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAa,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;;AAEvF,YAAA,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;gBAC1B,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAa,KAAO,EAAA,IAAI,CAAC,iBAAiB,EAAE,CAAC,EAAE,CAAC,CAAC;AAC3F,aAAA;;AAED,YAAA,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;gBAC3B,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,MAAc,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AAChG,aAAA;;YAED,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,MAAK;gBAAG,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,oBAAA,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;AAAE,iBAAA;AAAC,aAAC,CAAC,CAAC;YAE5G,IAAI,IAAI,CAAC,UAAU,EAAE;gBACjB,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC,MAAK,EAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC/E,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,MAAK,EAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AACpF,aAAA;AAED,YAAA,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,SAAS,CAAC,MAAQ,EAAA,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC;AAE9E,SAAA;;AAGD,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE;YACjC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,MAAW,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AAC5F,SAAA;QAED,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE;YACpD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AAC5D,SAAA;QAED,IAAI,IAAI,CAAC,cAAc,EAAE;;AAErB,YAAA,MAAM,MAAM,GAAQ,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACjG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,KAAI,EAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA,EAAE,CAAC,CAAC;AACnG,SAAA;KACJ;AAED;;AAEG;IACI,UAAU,GAAA;AACb,QAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;AACnC,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;KAC9B;AAGD;;;AAGG;AACI,IAAA,WAAW,CAAC,KAAc,EAAA;QAC7B,IAAI,CAAC,KAAK,EAAE;AAAE,YAAA,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC;AAAE,SAAA;AAC5C,QAAA,IAAI,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAAE,SAAA;AAC5D,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;KAC/B;AAED;;AAEG;IAC4B,QAAQ,GAAA;AACnC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;KAC5B;AAED;;;AAGG;AACI,IAAA,aAAa,CAAC,KAAK,EAAA;AACtB,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;KACzB;AAED;;AAEG;AACI,IAAA,cAAc,CAAC,IAAY,EAAA;;AAE9B,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;AAClF,YAAA,IAAI,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE;AAClC,gBAAA,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,CAAC;gBAC1D,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAK;AAC3C,oBAAA,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,CAAC;oBAC3D,IAAI,CAAC,KAAK,CAAC,UAAU,CAAM,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC;AAC9G,yBAAA,IAAI,CAAC,MAAM,IAAG,EAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AAC7D,iBAAC,CAAC,CAAC;AACN,aAAA;AAAM,iBAAA;;gBAEH,IAAI,CAAC,KAAK,CAAC,UAAU,CAAM,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC;AAC9G,qBAAA,IAAI,CAAC,MAAM,IAAG,EAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AAC5D,aAAA;AACJ,SAAA;QAED,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,KAAK,KAAK,EAAE;;YAEnD,MAAM,QAAQ,IAAS,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC3C,YAAA,MAAM,QAAQ,IAAS,IAAI,QAAQ,EAAE,CAAC,CAAC;;YAEvC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAM,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC;AAC5F,iBAAA,IAAI,CAAC,MAAM,IAAG,EAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AAC5D,SAAA;KACJ;AAED;;AAEG;IACI,YAAY,GAAA;QACf,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;AAC5C,YAAA,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,mBAAmB,IAAI,oEAAoE,GAAG,gCAAgC,CAAC,EAAE;AACzJ,gBAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC;qBACtE,IAAI,CAAC,CAAC,OAAO,KAAO,EAAA,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;AACvE,qBAAA,KAAK,CAAC,CAAC,MAAM,KAAO,EAAA,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AAC9C,aAAA;AACJ,SAAA;KACJ;AAED;;AAEG;AACK,IAAA,iBAAiB,CAAC,MAAc,EAAA;QACpC,IAAI,MAAM,KAAK,aAAa,EAAE;AAAE,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;AAAE,SAAA;KAC5D;AAED;;AAEG;IACK,iBAAiB,GAAA;QACrB,MAAM,aAAa,GAAG,sBAAsB,CAAC;QAC7C,MAAM,QAAQ,IAAS,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC3C,QAAA,MAAM,QAAQ,IAAS,IAAI,QAAQ,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,sBAAsB,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,sBAAsB,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,SAAS,KAAK,EAAE,IAAI,QAAQ,GAAS,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,SAAS,EAAE,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;AAC1N,aAAA,IAAI,CAAC,CAAC,MAAW,KAAI;AAClB,YAAA,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACzB,gBAAA,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,WAAW,CAAC;AACjD,gBAAA,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7C,aAAA;AACL,SAAC,CAAC,CAAC;KAEV;AAED;;AAEG;AACK,IAAA,YAAY,CAAC,MAAc,EAAA;QAC/B,MAAM,QAAQ,IAAS,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC3C,QAAA,MAAM,QAAQ,IAAS,IAAI,QAAQ,EAAE,CAAC,CAAC;QACvC,MAAM,SAAS,GAAG,CAAC,QAAQ,CAAC,SAAS,KAAK,EAAE,IAAI,QAAQ,CAAC,SAAS,GAAS,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,SAAS,CAAC,SAAS,CAAC;QACnH,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,SAAS,KAAK,EAAE,IAAI,QAAQ,CAAC,WAAW,GAAS,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,SAAS,CAAC,WAAW,CAAC;AAChH,QAAA,IAAI,QAAQ,GAAc,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;AACpE,QAAA,IAAI,aAAyB,CAAC;AAC9B,QAAA,IAAI,SAAqB,CAAC;QAC1B,IAAI,eAAe,GAAG,EAAE,CAAC;QACzB,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,UAAU,GAAG,EAAE,CAAC;AAEpB,QAAA,QAAQ,MAAM;AACV,YAAA,KAAK,iBAAiB;AAClB,gBAAA,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;oBACjB,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;oBACjD,eAAe,GAAG,EAAE,CAAC;AACrB,oBAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;AACtD,wBAAA,MAAM,QAAQ,GAAQ,YAAY,CAAC,KAAK,CAAC,CAAC;wBAC1C,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAChD,qBAAA;oBAAA,CAAC;AACF,oBAAA,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,iBAAA;gBAED,MAAM;AAEV,YAAA,KAAK,YAAY;AACb,gBAAA,KAAK,CAAC,MAAM,CAAC,uCAAuC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,KAAI;oBAC1E,IAAI,UAAU,KAAK,EAAE,EAAE;AACnB,wBAAA,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,GAAG,gBAAgB,CAAC,CAAC,IAAI,EAAE,CAAC;AACrF,wBAAA,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;AACtE,wBAAA,YAAY,CAAC,OAAO,CAAC,SAAS,GAAG,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC;AACrF,qBAAA;AACL,iBAAC,EAAE,YAAA;;AAEH,iBAAC,CAAC,CAAA;gBACF,MAAM;AAEV,YAAA,KAAK,SAAS;gBACV,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACxC,oBAAA,KAAK,CAAC,MAAM,CAAC,2CAA2C,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAI;wBAC3E,IAAI,OAAO,KAAK,EAAE,EAAE;AAChB,4BAAA,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,GAAG,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC;4BAE7E,QAAQ,GAAQ,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;4BAC1D,eAAe,GAAG,EAAE,CAAC;AACrB,4BAAA,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;gCAC5C,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3C,6BAAA;4BAAA,CAAC;AAEF,4BAAA,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,CAAC,CAAC;AACxD,4BAAA,YAAY,CAAC,OAAO,CAAC,SAAS,GAAG,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;AAC7E,yBAAA;AACL,qBAAC,EAAE,YAAA;;AAEH,qBAAC,CAAC,CAAA;AACL,iBAAA;gBACD,MAAM;AAEV,YAAA,KAAK,aAAa;AACd,gBAAA,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,GAAG,gBAAgB,CAAC,CAAC,IAAI,EAAE,CAAC;gBACrF,UAAU,GAAG,EAAE,CAAC;AAChB,gBAAA,aAAa,CAAC,OAAO,CAAC,OAAO,IAAG;AAC5B,oBAAA,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAClC,iBAAC,CAAC,CAAC;AACH,gBAAA,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACvB,oBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,qBAAqB,CAAC;AAC9C,oBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;yBAC3B,IAAI,CAAC,MAAM,IAAG;wBACX,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;AAC3C,wBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;qBAC3B,CAAC,CAAC;AACV,iBAAA;gBACD,MAAM;AAEV,YAAA,KAAK,YAAY;AACb,gBAAA,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,GAAG,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC7E,OAAO,GAAG,EAAE,CAAC;AACb,gBAAA,SAAS,CAAC,OAAO,CAAC,OAAO,IAAG;AACxB,oBAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC/B,iBAAC,CAAC,CAAC;AACH,gBAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACpB,oBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,kBAAkB,CAAC;AAC3C,oBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;yBACxB,IAAI,CAAC,MAAM,IAAG;wBACX,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC;AAClC,wBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;qBACxB,CAAC,CAAC;AACV,iBAAA;gBACD,MAAM;AAEV,YAAA,KAAK,iBAAiB;gBAElB,MAAM;AAEV,YAAA,KAAK,gBAAgB;AACjB,gBAAA,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,GAAG,gBAAgB,CAAC,CAAC,IAAI,EAAE,CAAC;gBACrF,UAAU,GAAG,EAAE,CAAC;AAChB,gBAAA,aAAa,CAAC,OAAO,CAAC,OAAO,IAAG;AAC5B,oBAAA,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAClC,iBAAC,CAAC,CAAC;AACH,gBAAA,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACvB,oBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,qBAAqB,CAAC;AAC9C,oBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,2BAA2B,EAAE,QAAQ,CAAC;yBACxE,IAAI,CAAC,MAAM,IAAG;AACX,wBAAA,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAChC,wBAAA,YAAY,CAAC,OAAO,CAAC,SAAS,GAAG,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC;qBACrF,CAAC,CAAC;AACV,iBAAA;gBAED,MAAM;AAEV,YAAA,KAAK,YAAY;AACb,gBAAA,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,GAAG,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC7E,OAAO,GAAG,EAAE,CAAC;AACb,gBAAA,SAAS,CAAC,OAAO,CAAC,OAAO,IAAG;AACxB,oBAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC/B,iBAAC,CAAC,CAAC;AACH,gBAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACpB,oBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,kBAAkB,CAAC;AAC3C,oBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,2BAA2B,EAAE,QAAQ,CAAC;yBACrE,IAAI,CAAC,MAAM,IAAG;AACX,wBAAA,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAC5B,wBAAA,YAAY,CAAC,OAAO,CAAC,SAAS,GAAG,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;qBAC7E,CAAC,CAAC;AACV,iBAAA;gBACD,MAAM;AACb,SAAA;KACJ;AAEO,IAAA,UAAU,CAAC,OAAsB,EAAA;QACrC,MAAM,QAAQ,IAAS,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC3C,QAAA,MAAM,QAAQ,IAAS,IAAI,QAAQ,EAAE,CAAC,CAAC;QACvC,MAAM,SAAS,GAAG,CAAC,QAAQ,CAAC,SAAS,KAAK,EAAE,IAAI,QAAQ,CAAC,SAAS,GAAS,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,SAAS,CAAC,SAAS,CAAC;QACnH,MAAM,OAAO,GAAG,CAAC,QAAQ,CAAC,SAAS,KAAK,EAAE,IAAI,QAAQ,CAAC,WAAW,GAAS,IAAI,CAAC,OAAO,CAAC,KAAM,CAAC,SAAS,CAAC,WAAW,CAAC;QACrH,IAAI,OAAO,IAAI,OAAO,KAAK,EAAE,IAAI,SAAS,IAAI,SAAS,KAAK,EAAE,EAAE;YAC5D,MAAM,UAAU,GAAG,EAAE,CAAC;AACtB,YAAA,OAAO,CAAC,OAAO,CAAC,EAAE,IAAG;AACjB,gBAAA,UAAU,CAAC,IAAI,CAAC,SAAS,GAAG,GAAG,GAAG,OAAO,GAAG,KAAK,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC;AACpE,aAAC,CAAC,CAAC;YACH,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;AAC3C,SAAA;KAEJ;;wGAnVQ,UAAU,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,KAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAV,UAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,UAAU,EAHR,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,eAAA,EAAA,YAAA,EAAA,EAAA,EAAA,SAAA,EAAA,CAAC,UAAU,EAAE,cAAc,EAAE,kBAAkB,EAAE,KAAK,CAAC,EAkBpD,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,SAAS,EACT,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,QAAQ,gDApBZ,0FAA0F,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;4FAI3F,UAAU,EAAA,UAAA,EAAA,CAAA;kBANtB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,QAAQ,EAAE,0FAA0F;oBACpG,SAAS,EAAE,CAAC,UAAU,EAAE,cAAc,EAAE,kBAAkB,EAAE,KAAK,CAAC;iBACrE,CAAA;+KAOmB,cAAc,EAAA,CAAA;sBAA7B,KAAK;gBAKU,UAAU,EAAA,CAAA;sBAAzB,KAAK;gBAKmB,SAAS,EAAA,CAAA;sBAAjC,YAAY;uBAAC,SAAS,CAAA;gBACC,OAAO,EAAA,CAAA;sBAA9B,YAAY;uBAAC,QAAQ,CAAA;gBAkGS,QAAQ,EAAA,CAAA;sBAAtC,YAAY;uBAAC,eAAe,CAAA;;;MCzHpB,gBAAgB,CAAA;IAQzB,IAAW,gBAAgB,CAAC,CAAe,EAAA;AACvC,QAAA,IAAI,CAAC,aAAa,GAAe,CAAC,CAAC;KACtC;IAED,UAAU,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,EAAE;AACrC,YAAA,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;AAC5B,iBAAA,IAAI,CAAC,MAAK,EAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;AACjD,iBAAA,KAAK,CAAC,CAAC,MAAM,KAAO,EAAA,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AAC9C,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;AAC5B,iBAAA,IAAI,CAAC,CAAC,MAAM,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;AACvD,iBAAA,KAAK,CAAC,CAAC,MAAM,KAAO,EAAA,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AAC9C,SAAA;QAAA,CAAC;KACL;;8GAtBQ,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,gBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,sGAHf,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;4FAGH,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAL5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,QAAQ,EAAE,EAAE;iBACf,CAAA;8BAImB,aAAa,EAAA,CAAA;sBAA5B,KAAK;;;MCCG,IAAI,CAAA;AAZjB,IAAA,WAAA,GAAA;AAcmB,QAAA,IAAA,CAAA,MAAM,GAAsB,IAAI,YAAY,EAAE,CAAC;AAEhE,QAAA,IAAI,CAAA,IAAA,GAAU,EAAE,CAAC;KA+BlB;IA7BQ,SAAS,CAAC,KAAK,EAAE,GAAG,EAAA;QACzB,KAAK,CAAC,cAAc,EAAE,CAAC;AAEvB,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;KAEzB;AAEM,IAAA,aAAa,CAAC,GAAG,EAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;AACvD,QAAA,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;AAElB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;KACpB;AAGM,IAAA,MAAM,CAAC,GAAQ,EAAA;AACpB,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1B,YAAA,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;AACnB,SAAA;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACrB;AAED,IAAA,IAAW,aAAa,GAAA;AACtB,QAAA,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;AAClB,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;AACrD,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM;gBAAE,QAAQ,GAAG,KAAK,CAAC;AAC/C,SAAA;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB;;kGAlCU,IAAI,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAJ,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,IAAI,EAVL,QAAA,EAAA,MAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;AAOT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAP,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;sGAGU,IAAI,EAAA,CAAA,CAAA;4FAAJ,IAAI,EAAA,UAAA,EAAA,CAAA;kBAZhB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,MAAM;AAChB,oBAAA,QAAQ,EAAE,CAAA;;;;;;;AAOT,EAAA,CAAA;iBACF,CAAA;;kBACA,UAAU;8BAGQ,MAAM,EAAA,CAAA;sBAAtB,MAAM;;MA4CI,GAAG,CAAA;AAId,IAAA,WAAA,CAAY,IAAU,EAAA;AAFb,QAAA,IAAM,CAAA,MAAA,GAAY,KAAK,CAAC;AAI/B,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;KAEnB;;iGARU,GAAG,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAH,GAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,GAAG,EAPJ,QAAA,EAAA,KAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;qGAGU,GAAG,EAAA,CAAA,CAAA;4FAAH,GAAG,EAAA,UAAA,EAAA,CAAA;kBATf,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,KAAK;AACf,oBAAA,QAAQ,EAAE,CAAA;;;;AAIT,EAAA,CAAA;iBACF,CAAA;;kBACA,UAAU;wFAEA,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;;;MCpBK,QAAQ,CAAA;IA0BjB,WAAmB,CAAA,MAA2B,EAAU,KAAqB,EAAA;AAA1D,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAqB;AAAU,QAAA,IAAK,CAAA,KAAA,GAAL,KAAK,CAAgB;AAf7D,QAAA,IAAQ,CAAA,QAAA,GAAG,EAAE,CAAC;AACd,QAAA,IAAQ,CAAA,QAAA,GAAG,EAAE,CAAC;AACd,QAAA,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;AAClB,QAAA,IAAY,CAAA,YAAA,GAAG,EAAE,CAAC;AAClB,QAAA,IAAa,CAAA,aAAA,GAAG,aAAa,CAAC;AAY1C,QAAA,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,4BAA4B,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;AAClF,aAAA,SAAS,CAAC,CAAC,CAAC,KAAI;AACb,YAAA,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;AAC1B,SAAC,CAAC,CAAC;KACV;IAbD,IAAW,gBAAgB,CAAC,KAAmB,EAAA;AAC3C,QAAA,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE;AACjC,gBAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;AACzC,aAAA;AACJ,SAAA;KACJ;IASD,KAAK,GAAA;;QAED,MAAM,MAAM,GAAW,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9C,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC;AACjD,aAAA,IAAI,CAAC,CAAC,cAAc,KAAI;YACrB,IAAI,cAAc,CAAC,cAAc,EAAE;;AAG/B,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;gBACvB,IAAI,IAAI,CAAC,MAAM,EAAE;AAAE,oBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AAAE,iBAAA;AACtD,aAAA;AAAM,iBAAA;AACH,gBAAA,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACpB,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACzB,aAAA;AACL,SAAC,CAAC;AACD,aAAA,KAAK,CAAC,CAAC,CAAC,KAAI;;AAET,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AAC1B,SAAC,CAAC,CAAC;KACV;;AAnDa,QAAA,CAAA,YAAY,GAA6B;AACnD,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,YAAY,EAAE,IAAI;AAClB,IAAA,WAAW,EAAE,KAAK;AAClB,IAAA,OAAO,EAAE,IAAI;AACb,IAAA,UAAU,EAAE,IAAI;AAChB,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG;CAC1B,CAAA;sGATO,QAAQ,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAI,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAI,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAR,QAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,QAAQ,EA/BP,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;AAmBT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,mKAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FAYQ,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAjCpB,SAAS;YACI,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,QAAQ,EACR,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;AAmBT,IAAA,CAAA,EAAA,MAAA,EAAA,CAAA,mKAAA,CAAA,EAAA,CAAA;iIAuBe,QAAQ,EAAA,CAAA;sBAAvB,KAAK;gBACU,QAAQ,EAAA,CAAA;sBAAvB,KAAK;gBACU,SAAS,EAAA,CAAA;sBAAxB,KAAK;gBACU,YAAY,EAAA,CAAA;sBAA3B,KAAK;gBACU,aAAa,EAAA,CAAA;sBAA5B,KAAK;;;MC5CG,eAAe,CAAA;AAQxB,IAAA,WAAA,CAAmB,KAAY,EAAU,UAA4B,EAAU,KAAqB,kCAA+B;AAAhH,QAAA,IAAK,CAAA,KAAA,GAAL,KAAK,CAAO;AAAU,QAAA,IAAU,CAAA,UAAA,GAAV,UAAU,CAAkB;AAAU,QAAA,IAAK,CAAA,KAAA,GAAL,KAAK,CAAgB;AANpF,QAAA,IAAc,CAAA,cAAA,GAAG,KAAK,CAAC;AAEtB,QAAA,IAAA,CAAA,eAAe,GAAsB,IAAI,YAAY,EAAE,CAAC;AAEjE,QAAA,IAAc,CAAA,cAAA,GAAQ,EAAE,CAAC;QAG7B,MAAM,GAAG,GAAG,MAAM,CAAC;QACnB,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE;AAC5C,YAAA,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC1C,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,IAAG;gBAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAChC,gBAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACnB,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAC1C,iBAAA;AAAM,qBAAA;AACH,oBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;AACvC,iBAAA;AACL,aAAC,CAAC,CAAC;AACN,SAAA;KACJ;IAED,eAAe,GAAA;AACX,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAM,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC;AAC7E,aAAA,IAAI,CAAC,CAAC,MAAM,KAAI;AACb,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;AAC1D,SAAC,CAAC,CAAC;KAGV;IAED,kBAAkB,GAAA;AACd,QAAA,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE;YAChC,IAAI,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;gBAC3C,IAAI;AACA,oBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACzD,oBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC;AACxC,yBAAA,IAAI,CAAC,CAAC,cAAc,KAAI;wBACrB,IAAI,cAAc,CAAC,cAAc,EAAE;AAC/B,4BAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;4BAC3B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;AACzD,yBAAA;AACL,qBAAC,CAAC;AACD,yBAAA,KAAK,CAAC,CAAC,IAAM,EAAA,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,CAAC;AAChD,iBAAA;AAAC,gBAAA,OAAO,KAAK,EAAE;oBACZ,IAAI,CAAC,eAAe,EAAE,CAAC;AAC1B,iBAAA;AACJ,aAAA;AAAM,iBAAA;;gBAEH,IAAI,CAAC,eAAe,EAAE,CAAC;AAC1B,aAAA;AACJ,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;AACzD,SAAA;KACJ;;6GAzDQ,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAF,KAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,eAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,EAJb,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,SAAA,EAAA,CAAC,KAAK,CAAC,0BAFR,8FAA8F,EAAA,QAAA,EAAA,IAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4FAM/F,eAAe,EAAA,UAAA,EAAA,CAAA;kBAR3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,QAAQ,EAAE,8FAA8F;oBACxG,aAAa,EAAE,iBAAiB,CAAC,IAAI;oBACrC,SAAS,EAAE,CAAC,KAAK,CAAC;iBACrB,CAAA;kJAKmB,cAAc,EAAA,CAAA;sBAA7B,KAAK;gBAEW,eAAe,EAAA,CAAA;sBAA/B,MAAM;;;MCME,aAAa,CAAA;AAMtB,IAAA,WAAA,CAAoB,KAAqB,EAAA;AAArB,QAAA,IAAK,CAAA,KAAA,GAAL,KAAK,CAAgB;AAHzB,QAAA,IAAQ,CAAA,QAAA,GAAY,KAAK,CAAC;AAC1B,QAAA,IAAW,CAAA,WAAA,GAAkB,EAAE,CAAC;KAEF;IAE9C,eAAe,GAAA;QACX,IAAI,cAAc,CAAC,cAAc,KAAK,SAAS,IAAI,cAAc,CAAC,cAAc,KAAK,IAAI,EAAE;YACvF,IAAI,CAAC,cAAc,EAAE,CAAC;AACzB,SAAA;AAAM,aAAA;AACH,YAAA,cAAc,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,IAAG;gBAC5C,IAAI,CAAC,cAAc,EAAE,CAAC;AAC1B,aAAC,CAAC,CAAA;AACL,SAAA;KACJ;AAED,IAAA,cAAc,CAAC,IAAY,EAAA;AACvB,QAAA,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,aAAa,IAAI,UAAU,GAAG,EAAE,CAAC;KAC1D;IAEO,cAAc,GAAA;QAClB,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC9B,iBAAA,IAAI,CAAC,CAAC,MAAM,KAAI;gBACb,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC;AACvC,aAAC,CAAC;AACD,iBAAA,KAAK,CAAC,CAAC,MAAM,KAAI,EAAG,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AAC7D,SAAA;KAEJ;;2GA/BQ,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAP,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAb,aAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,aAAa,EARZ,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,eAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;AAIN,OAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,uHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAQ,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;+GAIK,aAAa,EAAA,CAAA,CAAA;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAnBzB,SAAS;YACI,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAUhB,QAAA,EAAA,CAAA;;;;AAIN,OAAA,CAAA,EAAA,MAAA,EAAA,CAAA,uHAAA,CAAA,EAAA,CAAA;;kBAGP,UAAU;kGAES,QAAQ,EAAA,CAAA;sBAAvB,KAAK;gBACU,aAAa,EAAA,CAAA;sBAA5B,KAAK;gBACU,QAAQ,EAAA,CAAA;sBAAvB,KAAK;gBACU,WAAW,EAAA,CAAA;sBAA1B,KAAK;;;MCfG,cAAc,CAAA;AAMvB,IAAA,WAAA,GAAA;AAJgB,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAEpC,QAAA,IAAA,CAAA,cAAc,GAAsB,IAAI,YAAY,EAAE,CAAC;QAGpE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,IAAG;AAC1F,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpC,SAAC,CAAC,CAAC;KACN;;4GAVQ,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,cAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,cAAc,0IAHb,CAAmE,iEAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAV,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FAGpE,cAAc,EAAA,UAAA,EAAA,CAAA;kBAL1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,QAAQ,EAAE,CAAmE,iEAAA,CAAA;iBAChF,CAAA;0EAImB,SAAS,EAAA,CAAA;sBAAxB,KAAK;gBAEW,cAAc,EAAA,CAAA;sBAA9B,MAAM;;;ACdX;;;;;;AAME;MAEW,cAAc,CAAA;AAKzB,IAAA,WAAA,CAAoB,SAAuB,EAAA;AAAvB,QAAA,IAAS,CAAA,SAAA,GAAT,SAAS,CAAc;KAAI;AAJ/C,IAAA,SAAS,CAAC,KAAa,EAAE,SAAA,GAAoB,MAAM,EAAA;AACjD,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,8BAA8B,CAAC,aAAa,GAAC,SAAS,GAAC,UAAU,GAAC,KAAK,CAAC,CAAC;KAChG;;4GAHU,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;0GAAd,cAAc,EAAA,IAAA,EAAA,gBAAA,EAAA,CAAA,CAAA;4FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B,IAAI;mBAAC,EAAC,IAAI,EAAE,gBAAgB,EAAC,CAAA;;;ACR9B;;;;;AAKE;MAEW,iBAAiB,CAAA;AAC1B,IAAA,SAAS,CAAC,KAAK,EAAA;AACX,QAAA,IAAI,KAAK,EAAE;YACP,IAAI,QAAQ,KAAK,CAAC,KAAK,QAAQ,IAAI,KAAK,KAAK,EAAE,EAAE;AAC7C,gBAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AACjD,gBAAA,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC;AACpC,aAAA;;AAAM,gBAAA,OAAO,KAAK,CAAC,kBAAkB,EAAE,CAAC;AAC5C,SAAA;;YAAM,OAAO,EAAE,CAAC;KAClB;;+GARM,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAjB,iBAAiB,EAAA,IAAA,EAAA,mBAAA,EAAA,CAAA,CAAA;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B,IAAI;mBAAC,EAAC,IAAI,EAAE,mBAAmB,EAAC,CAAA;;;MCQpB,kBAAkB,CAAA;AAY3B,IAAA,WAAA,CAAoB,KAAqB,EAAA;AAArB,QAAA,IAAK,CAAA,KAAA,GAAL,KAAK,CAAgB;AAJlC,QAAA,IAAS,CAAA,SAAA,GAAW,EAAE,CAAC;AACvB,QAAA,IAAY,CAAA,YAAA,GAAY,KAAK,CAAC;AAC7B,QAAA,IAAa,CAAA,aAAA,GAAW,EAAE,CAAC;KAEW;IAE9C,eAAe,GAAA;QACX,IAAI,cAAc,CAAC,cAAc,KAAK,SAAS,IAAI,cAAc,CAAC,cAAc,KAAK,IAAI,EAAE;YACvF,IAAI,CAAC,eAAe,EAAE,CAAC;AAC1B,SAAA;AAAM,aAAA;AACH,YAAA,cAAc,CAAC,eAAe,CAAC,SAAS,CAAC,MAAK;gBAC1C,IAAI,CAAC,eAAe,EAAE,CAAC;AAC3B,aAAC,CAAC,CAAA;AACL,SAAA;KACJ;IAEM,YAAY,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,UAAU,EAAE;AAC/B,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,YAAY,IAAE,GAAG,GAAC,GAAG,CAAC;AAChD,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,SAAS,EAAE;YACtC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC;AAC/F,iBAAA,IAAI,CAAE,CAAC,IAAG,EAAE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,EAAC,CAAC,CAAC;AAC3D,SAAA;KACJ;IAEO,eAAe,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,IAAI,EAAE,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,IAAI,EAAE,EAAE;YAC5F,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC;AAClG,iBAAA,IAAI,CAAC,CAAC,KAAK,KAAI;gBACZ,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;gBAC5C,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,GAAG,CAAC,CAAC;AACrD,aAAC,CAAC;AACD,iBAAA,KAAK,CAAC,CAAC,MAAM,KAAI,EAAG,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AAC7D,SAAA;KAEJ;;gHA5CQ,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,kBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,EATjB,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;AAKN,OAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAQ,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;oHAIK,kBAAkB,EAAA,CAAA,CAAA;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAX9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,QAAQ,EAAE,CAAA;;;;;AAKN,OAAA,CAAA;iBACP,CAAA;;kBAEA,UAAU;kGAGS,SAAS,EAAA,CAAA;sBAAxB,KAAK;gBACU,cAAc,EAAA,CAAA;sBAA7B,KAAK;gBACU,aAAa,EAAA,CAAA;sBAA5B,KAAK;gBACU,YAAY,EAAA,CAAA;sBAA3B,KAAK;gBACU,SAAS,EAAA,CAAA;sBAAxB,KAAK;;;ACtBV;MAkDa,WAAW,CAAA;;yGAAX,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAX,WAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,iBArBhB,SAAS,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,sBAAsB;AAC/E,QAAA,gBAAgB,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,eAAe;QACxD,aAAa,EAAE,cAAc,EAAE,kBAAkB;QACjD,QAAQ;QACR,kBAAkB;QAClB,cAAc;QACd,iBAAiB;QACjB,QAAQ,aATF,WAAW,EAAE,mBAAmB,EAAE,YAAY,EAAE,gBAAgB,EAAE,WAAW,aAanF,SAAS,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,sBAAsB;AAC/E,QAAA,gBAAgB,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,eAAe;QACxD,aAAa,EAAE,cAAc,EAAE,kBAAkB;QACjD,QAAQ;QACR,kBAAkB;QAClB,cAAc;QACd,iBAAiB;QACjB,QAAQ,CAAA,EAAA,CAAA,CAAA;AAGH,WAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,EAZT,SAAA,EAAA,CAAC,UAAU,EAAE,cAAc,CAAC,EAAA,OAAA,EAAA,CAX7B,WAAW,EAAE,mBAAmB,EAAE,YAAY,EAAE,gBAAgB,EAAE,WAAW,CAAA,EAAA,CAAA,CAAA;4FAuB9E,WAAW,EAAA,UAAA,EAAA,CAAA;kBAxBvB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,WAAW,EAAE,mBAAmB,EAAE,YAAY,EAAE,gBAAgB,EAAE,WAAW,CAAC;AACxF,oBAAA,YAAY,EAAE;AACV,wBAAA,SAAS,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,sBAAsB;AAC/E,wBAAA,gBAAgB,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,eAAe;wBACxD,aAAa,EAAE,cAAc,EAAE,kBAAkB;wBACjD,QAAQ;wBACR,kBAAkB;wBAClB,cAAc;wBACd,iBAAiB;wBACjB,QAAQ;AACX,qBAAA;AACD,oBAAA,SAAS,EAAE,CAAC,UAAU,EAAE,cAAc,CAAC;AACvC,oBAAA,OAAO,EAAE;AACL,wBAAA,SAAS,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,sBAAsB;AAC/E,wBAAA,gBAAgB,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,eAAe;wBACxD,aAAa,EAAE,cAAc,EAAE,kBAAkB;wBACjD,QAAQ;wBACR,kBAAkB;wBAClB,cAAc;wBACd,iBAAiB;wBACjB,QAAQ;AACX,qBAAA;iBACJ,CAAA;;;AC3CD;;AAEG;MACU,aAAa,CAAA;IACtB,WACW,CAAA,QAAgB,mBAAmB,EACnC,OAAe,mBAAmB,EAClC,SAAiB,IAAI,EAAA;AAFrB,QAAA,IAAK,CAAA,KAAA,GAAL,KAAK,CAA8B;AACnC,QAAA,IAAI,CAAA,IAAA,GAAJ,IAAI,CAA8B;AAClC,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAe;KAC3B;AACR,CAAA;AAED;;AAEG;MAYU,WAAW,CAAA;AASpB,IAAA,WAAA,CAAY,MAA2B,EAAA;AACnC,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;KACxB;IAPD,IAAW,gBAAgB,CAAC,KAAmB,EAAA;AAC3C,QAAA,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,OAAO,GAAkB,KAAK,CAAC;AACvC,SAAA;KACJ;IAKD,EAAE,GAAA;AACE,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;KAC3B;;yGAfQ,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAN,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAX,WAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,WAAW,EARhB,QAAA,EAAA,eAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;AAMO,cAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;4FAEF,WAAW,EAAA,UAAA,EAAA,CAAA;kBAXvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,QAAQ,EACJ,CAAA;;;;;;AAMO,cAAA,CAAA;iBACd,CAAA;;;ACvBD;;AAEG;MACU,iBAAiB,CAAA;AAC1B,IAAA,WAAA,CACW,KAAgB,GAAA,mBAAmB,EACnC,IAAA,GAAe,mBAAmB,EAClC,MAAkB,GAAA,KAAK,EACvB,OAAA,GAAkB,KAAK,EACvB,SAAiB,IAAI,EAAA;AAJrB,QAAA,IAAK,CAAA,KAAA,GAAL,KAAK,CAA8B;AACnC,QAAA,IAAI,CAAA,IAAA,GAAJ,IAAI,CAA8B;AAClC,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAiB;AACvB,QAAA,IAAO,CAAA,OAAA,GAAP,OAAO,CAAgB;AACvB,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAe;KAC3B;AACR,CAAA;AAED;;AAEG;MAaU,UAAU,CAAA;AAUnB,IAAA,WAAA,CAAY,MAA2B,EAAA;AACnC,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;KACxB;IARD,IAAW,gBAAgB,CAAC,KAAmB,EAAA;AAC3C,QAAA,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,OAAO,GAAsB,KAAK,CAAC;AAC3C,SAAA;KACJ;AAMD,IAAA,EAAE,CAAC,MAAM,EAAA;QACL,MAAM,CAAC,eAAe,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;KAC3B;IAED,MAAM,GAAA;AACF,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;KAC5B;;wGArBQ,UAAU,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAV,UAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,UAAU,EATf,QAAA,EAAA,eAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;AAOO,cAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;4FAEF,UAAU,EAAA,UAAA,EAAA,CAAA;kBAZtB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,eAAe;yCACJ,QAAQ,EACzB,CAAA;;;;;;;AAOO,cAAA,CAAA;iBACd,CAAA;;;ACjCD;;AAEG;MACU,YAAY,CAAA;AAAI;;ACJ7B;MAkBa,WAAW,CAAA;;yGAAX,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAX,WAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,iBAPhB,WAAW,EAAE,UAAU,CAGvB,EAAA,OAAA,EAAA,CAAA,WAAW,EAAE,UAAU,CAAA,EAAA,CAAA,CAAA;AAIlB,WAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,aAFT,CAAC,KAAK,EAAE,mBAAmB,EAAE,YAAY,CAAC,EAAA,CAAA,CAAA;4FAE5C,WAAW,EAAA,UAAA,EAAA,CAAA;kBATvB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,YAAY,EAAE;AACV,wBAAA,WAAW,EAAE,UAAU;AAC1B,qBAAA;AACD,oBAAA,OAAO,EAAE;AACL,wBAAA,WAAW,EAAE,UAAU;AAC1B,qBAAA;AACD,oBAAA,SAAS,EAAE,CAAC,KAAK,EAAE,mBAAmB,EAAE,YAAY,CAAC;iBACxD,CAAA;;;ACfD;;AAEG;MAEU,qBAAqB,CAAA;AAYjC;;AClBD;;AAEG;;;;"}