ngx-forms-typed
Version:
Angular Forms Typed provides types and helper functions fully compatible with original Angular forms
37 lines • 13.7 kB
JavaScript
import { UntypedFormArray, UntypedFormControl, UntypedFormGroup, } from '@angular/forms';
/**
* A helper function to create a `TypedFormControl`. It only calls the constructor of FormControl, but **strongly types** the result.
* @param v the value to initialize our `TypedFormControl` with - same as in `new FormControl(v, validators, asyncValidators)`
* @param validators validators - same as in new `FormControl(v, validators, asyncValidators)`
* @param asyncValidators async validators - same as in `new FormControl(v, validators, asyncValidators)`
*
* @example
* const c = typedFormControl<string>(): TypedFormControl<string>;
* c.valueChanges // Observable<string>
* c.patchValue('s') // expects string
* c.patchValue(1) // COMPILE TIME! type error!
*/
export function typedFormControl(v, validatorsOrOptions, asyncValidators) {
return new UntypedFormControl(v, validatorsOrOptions, asyncValidators);
}
/**
* A helper function to create a `TypedFormArray`. It only calls the constructor of FormArray, but **strongly types** the result.
* @param v the value to initialize our `TypedFormArray` with - same as in `new TypedFormArray(v, validators, asyncValidators)`
* @param validators validators - same as in new `TypedFormArray(v, validators, asyncValidators)`
* @param asyncValidators async validators - same as in `new TypedFormArray(v, validators, asyncValidators)`
*
* @example
* const c = typedFormArray<string>([typedFormControl('of type string')]): TypedFormArray<string[], string>;
* c.valueChanges // Observable<string[]>
* c.patchValue(['s']) // expects string[]
* c.patchValue(1) // COMPILE TIME! type error!
*/
export function typedFormArray(controls, validatorOrOptions, asyncValidators) {
return new UntypedFormArray(controls, validatorOrOptions, asyncValidators);
}
export function typedFormGroup(controls, validatorOrOpts, asyncValidator) {
const f = new UntypedFormGroup(controls, validatorOrOpts, asyncValidator);
f.keys = Object.keys(controls).reduce((acc, k) => ({ ...acc, [k]: k }), {});
return f;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybXMtdHlwZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3Jtcy9zcmMvbGliL2Zvcm1zLXR5cGVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFJTCxnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLGdCQUFnQixHQUVqQixNQUFNLGdCQUFnQixDQUFDO0FBdUN4Qjs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsQ0FBdUMsRUFDdkMsbUJBQTBFLEVBQzFFLGVBQXVEO0lBRXZELE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDekUsQ0FBQztBQXVCRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQzVCLFFBQW9DLEVBQ3BDLGtCQUFnRixFQUNoRixlQUE4RDtJQUU5RCxPQUFPLElBQUksZ0JBQWdCLENBQUMsUUFBUSxFQUFFLGtCQUFrQixFQUFFLGVBQWUsQ0FBUSxDQUFDO0FBQ3BGLENBQUM7QUEwQkQsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsUUFBd0MsRUFDeEMsZUFBNkUsRUFDN0UsY0FBNkQ7SUFFN0QsTUFBTSxDQUFDLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsZUFBZSxFQUFFLGNBQWMsQ0FBUSxDQUFDO0lBQ2pGLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzVFLE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWJzdHJhY3RDb250cm9sLFxyXG4gIEFic3RyYWN0Q29udHJvbE9wdGlvbnMsXHJcbiAgQXN5bmNWYWxpZGF0b3JGbixcclxuICBVbnR5cGVkRm9ybUFycmF5LFxyXG4gIFVudHlwZWRGb3JtQ29udHJvbCxcclxuICBVbnR5cGVkRm9ybUdyb3VwLFxyXG4gIFZhbGlkYXRvckZuLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuLyoqXHJcbiAqIFR5cGUgZW5jYXBzdWxhdGluZyB0aGUgQW5ndWxhciBGb3JtIG9wdGlvbnM6XHJcbiAqIGBlbWl0RXZlbnRgIC0gZG8gd2UgZW1pdCBldmVudDtcclxuICogYG9ubHlTZWxmYCAtIGRvIHdlIGJ1YmJsZSB1cCB0byBwYXJlbnRcclxuICogYGVtaXRNb2RlbFRvVmlld0NoYW5nZWAgLSBXaGVuIHRydWUgb3Igbm90IHN1cHBsaWVkICh0aGUgZGVmYXVsdCksIGVhY2ggY2hhbmdlIHRyaWdnZXJzIGFuIG9uQ2hhbmdlIGV2ZW50IHRvIHVwZGF0ZSB0aGUgdmlldy5cclxuICogYGVtaXRWaWV3VG9Nb2RlbENoYW5nZWAgLSBXaGVuIHRydWUgb3Igbm90IHN1cHBsaWVkICh0aGUgZGVmYXVsdCksIGVhY2ggY2hhbmdlIHRyaWdnZXJzIGFuIG5nTW9kZWxDaGFuZ2UgZXZlbnQgdG8gdXBkYXRlIHRoZSBtb2RlbC5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgRm9ybUV2ZW50T3B0aW9ucyB7XHJcbiAgZW1pdEV2ZW50PzogYm9vbGVhbjtcclxuICBvbmx5U2VsZj86IGJvb2xlYW47XHJcbiAgZW1pdE1vZGVsVG9WaWV3Q2hhbmdlPzogYm9vbGVhbjtcclxuICBlbWl0Vmlld1RvTW9kZWxDaGFuZ2U/OiBib29sZWFuO1xyXG59XHJcblxyXG4vKipcclxuICogQSB0eXBlIHdyYXBwZXIgYXJvdW5kIHRoZSByZXNldCB2YWx1ZS4gSXQgY291bGQgYmUgcGFydGlhbCBvZiB0aGUgdHlwZSBvZiB0aGUgZm9ybS4gT3IgZXZlbiBkZXNjcmliZSB3aGljaCBmb3JtIGZpZWxkcyBhcmUgdG8gYmUgZGlzYWJsZWRcclxuICovXHJcbmV4cG9ydCB0eXBlIFJlc2V0VmFsdWU8Sz4gPSBQYXJ0aWFsPHsgW2tleSBpbiBrZXlvZiBLXTogS1trZXldIHwgeyB2YWx1ZTogS1trZXldOyBkaXNhYmxlZDogYm9vbGVhbiB9IH0+O1xyXG5cclxuLyoqXHJcbiAqIFR5cGVkIGZvcm0gY29udHJvbCBpcyBhbiBgQWJzdHJhY3RDb250cm9sYCB3aXRoIHN0cm9uZyB0eXBlZCBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzLiBDYW4gYmUgY3JlYXRlZCB1c2luZyBgdHlwZWRGb3JtQ29udHJvbGAgZnVuY3Rpb25cclxuICpcclxuICogQGV4YW1wbGVcclxuICogY29uc3QgYyA9IHR5cGVkRm9ybUNvbnRyb2w8c3RyaW5nPigpOiBUeXBlZEZvcm1Db250cm9sPHN0cmluZz47XHJcbiAqIGMudmFsdWVDaGFuZ2VzIC8vIE9ic2VydmFibGU8c3RyaW5nPlxyXG4gKiBjLnBhdGNoVmFsdWUoJ3MnKSAvLyBleHBlY3RzIHN0cmluZ1xyXG4gKiBjLnBhdGNoVmFsdWUoMSkgLy8gIENPTVBJTEUgVElNRSEgdHlwZSBlcnJvciFcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgVHlwZWRGb3JtQ29udHJvbDxLPiBleHRlbmRzIFVudHlwZWRGb3JtQ29udHJvbCwgQWJzdHJhY3RDb250cm9sIHtcclxuICB2YWx1ZUNoYW5nZXM6IE9ic2VydmFibGU8Sz47XHJcbiAgc3RhdHVzQ2hhbmdlczogT2JzZXJ2YWJsZTwnVkFMSUQnIHwgJ0lOVkFMSUQnIHwgJ1BFTkRJTkcnIHwgJ0RJU0FCTEVEJz47XHJcbiAgcGF0Y2hWYWx1ZTogKHY6IFBhcnRpYWw8Sz4sIG9wdGlvbnM/OiBGb3JtRXZlbnRPcHRpb25zKSA9PiB2b2lkO1xyXG4gIHNldFZhbHVlOiAodjogSywgb3B0aW9ucz86IEZvcm1FdmVudE9wdGlvbnMpID0+IHZvaWQ7XHJcbiAgdmFsdWU6IEs7XHJcbiAgcmVzZXQ6ICh2YWx1ZT86IFJlc2V0VmFsdWU8Sz4sIG9wdHM/OiBGb3JtRXZlbnRPcHRpb25zKSA9PiB2b2lkO1xyXG59XHJcbi8qKlxyXG4gKiBBIGhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBgVHlwZWRGb3JtQ29udHJvbGAuIEl0IG9ubHkgY2FsbHMgdGhlIGNvbnN0cnVjdG9yIG9mIEZvcm1Db250cm9sLCBidXQgKipzdHJvbmdseSB0eXBlcyoqIHRoZSByZXN1bHQuXHJcbiAqIEBwYXJhbSB2IHRoZSB2YWx1ZSB0byBpbml0aWFsaXplIG91ciBgVHlwZWRGb3JtQ29udHJvbGAgd2l0aCAtIHNhbWUgYXMgaW4gYG5ldyBGb3JtQ29udHJvbCh2LCB2YWxpZGF0b3JzLCBhc3luY1ZhbGlkYXRvcnMpYFxyXG4gKiBAcGFyYW0gdmFsaWRhdG9ycyB2YWxpZGF0b3JzIC0gc2FtZSBhcyBpbiBuZXcgYEZvcm1Db250cm9sKHYsIHZhbGlkYXRvcnMsIGFzeW5jVmFsaWRhdG9ycylgXHJcbiAqIEBwYXJhbSBhc3luY1ZhbGlkYXRvcnMgYXN5bmMgdmFsaWRhdG9ycyAtIHNhbWUgYXMgaW4gYG5ldyBGb3JtQ29udHJvbCh2LCB2YWxpZGF0b3JzLCBhc3luY1ZhbGlkYXRvcnMpYFxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBjb25zdCBjID0gdHlwZWRGb3JtQ29udHJvbDxzdHJpbmc+KCk6IFR5cGVkRm9ybUNvbnRyb2w8c3RyaW5nPjtcclxuICogYy52YWx1ZUNoYW5nZXMgLy8gT2JzZXJ2YWJsZTxzdHJpbmc+XHJcbiAqIGMucGF0Y2hWYWx1ZSgncycpIC8vIGV4cGVjdHMgc3RyaW5nXHJcbiAqIGMucGF0Y2hWYWx1ZSgxKSAvLyAgQ09NUElMRSBUSU1FISB0eXBlIGVycm9yIVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVkRm9ybUNvbnRyb2w8VD4oXHJcbiAgdj86IFQgfCB7IHZhbHVlOiBUOyBkaXNhYmxlZDogYm9vbGVhbiB9LFxyXG4gIHZhbGlkYXRvcnNPck9wdGlvbnM/OiBWYWxpZGF0b3JGbiB8IFZhbGlkYXRvckZuW10gfCBBYnN0cmFjdENvbnRyb2xPcHRpb25zLFxyXG4gIGFzeW5jVmFsaWRhdG9ycz86IEFzeW5jVmFsaWRhdG9yRm4gfCBBc3luY1ZhbGlkYXRvckZuW11cclxuKTogVHlwZWRGb3JtQ29udHJvbDxUPiB7XHJcbiAgcmV0dXJuIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wodiwgdmFsaWRhdG9yc09yT3B0aW9ucywgYXN5bmNWYWxpZGF0b3JzKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFR5cGVkIGZvcm0gY29udHJvbCBpcyBhbiBgRm9ybUFycmF5YCB3aXRoIHN0cm9uZyB0eXBlZCBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzLiBDYW4gYmUgY3JlYXRlZCB1c2luZyBgdHlwZWRGb3JtQXJyYXlgIGZ1bmN0aW9uXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGNvbnN0IGMgPSB0eXBlZEZvcm1BcnJheTxzdHJpbmc+KFt0eXBlZEZvcm1Db250cm9sKCdvZiB0eXBlIHN0cmluZycpXSk6IFR5cGVkRm9ybUFycmF5PHN0cmluZ1tdLCBzdHJpbmc+O1xyXG4gKiBjLnZhbHVlQ2hhbmdlcyAvLyBPYnNlcnZhYmxlPHN0cmluZ1tdPlxyXG4gKiBjLnBhdGNoVmFsdWUoWydzJ10pIC8vIGV4cGVjdHMgc3RyaW5nW11cclxuICogYy5wYXRjaFZhbHVlKDEpIC8vICBDT01QSUxFIFRJTUUhIHR5cGUgZXJyb3IhXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVkRm9ybUFycmF5PEsgZXh0ZW5kcyBBcnJheTxUPiA9IGFueVtdLCBUID0gYW55PiBleHRlbmRzIFVudHlwZWRGb3JtQXJyYXkge1xyXG4gIHZhbHVlQ2hhbmdlczogT2JzZXJ2YWJsZTxLPjtcclxuICBzdGF0dXNDaGFuZ2VzOiBPYnNlcnZhYmxlPCdWQUxJRCcgfCAnSU5WQUxJRCcgfCAnUEVORElORycgfCAnRElTQUJMRUQnPjtcclxuICBwYXRjaFZhbHVlOiAodjogSywgb3B0aW9ucz86IEZvcm1FdmVudE9wdGlvbnMpID0+IHZvaWQ7XHJcbiAgc2V0VmFsdWU6ICh2OiBLLCBvcHRpb25zPzogRm9ybUV2ZW50T3B0aW9ucykgPT4gdm9pZDtcclxuICBjb250cm9sczogQXJyYXk8VHlwZWRGb3JtQ29udHJvbDxUPj47XHJcbiAgcHVzaDogKGNvbnRyb2w6IFR5cGVkRm9ybUNvbnRyb2w8VD4pID0+IHZvaWQ7XHJcbiAgaW5zZXJ0OiAoaW5kZXg6IG51bWJlciwgY29udHJvbDogVHlwZWRGb3JtQ29udHJvbDxUPikgPT4gdm9pZDtcclxuICBhdDogKGluZGV4OiBudW1iZXIpID0+IFR5cGVkRm9ybUNvbnRyb2w8VD47XHJcbiAgc2V0Q29udHJvbDogKGluZGV4OiBudW1iZXIsIGNvbnRyb2w6IFR5cGVkRm9ybUNvbnRyb2w8VD4pID0+IHZvaWQ7XHJcbiAgdmFsdWU6IEs7XHJcbn1cclxuLyoqXHJcbiAqIEEgaGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIGBUeXBlZEZvcm1BcnJheWAuIEl0IG9ubHkgY2FsbHMgdGhlIGNvbnN0cnVjdG9yIG9mIEZvcm1BcnJheSwgYnV0ICoqc3Ryb25nbHkgdHlwZXMqKiB0aGUgcmVzdWx0LlxyXG4gKiBAcGFyYW0gdiB0aGUgdmFsdWUgdG8gaW5pdGlhbGl6ZSBvdXIgYFR5cGVkRm9ybUFycmF5YCB3aXRoIC0gc2FtZSBhcyBpbiBgbmV3IFR5cGVkRm9ybUFycmF5KHYsIHZhbGlkYXRvcnMsIGFzeW5jVmFsaWRhdG9ycylgXHJcbiAqIEBwYXJhbSB2YWxpZGF0b3JzIHZhbGlkYXRvcnMgLSBzYW1lIGFzIGluIG5ldyBgVHlwZWRGb3JtQXJyYXkodiwgdmFsaWRhdG9ycywgYXN5bmNWYWxpZGF0b3JzKWBcclxuICogQHBhcmFtIGFzeW5jVmFsaWRhdG9ycyBhc3luYyB2YWxpZGF0b3JzIC0gc2FtZSBhcyBpbiBgbmV3IFR5cGVkRm9ybUFycmF5KHYsIHZhbGlkYXRvcnMsIGFzeW5jVmFsaWRhdG9ycylgXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGNvbnN0IGMgPSB0eXBlZEZvcm1BcnJheTxzdHJpbmc+KFt0eXBlZEZvcm1Db250cm9sKCdvZiB0eXBlIHN0cmluZycpXSk6IFR5cGVkRm9ybUFycmF5PHN0cmluZ1tdLCBzdHJpbmc+O1xyXG4gKiBjLnZhbHVlQ2hhbmdlcyAvLyBPYnNlcnZhYmxlPHN0cmluZ1tdPlxyXG4gKiBjLnBhdGNoVmFsdWUoWydzJ10pIC8vIGV4cGVjdHMgc3RyaW5nW11cclxuICogYy5wYXRjaFZhbHVlKDEpIC8vICBDT01QSUxFIFRJTUUhIHR5cGUgZXJyb3IhXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gdHlwZWRGb3JtQXJyYXk8VCA9IGFueSwgSyBleHRlbmRzIEFycmF5PFQ+ID0gVFtdPihcclxuICBjb250cm9sczogQXJyYXk8VHlwZWRGb3JtQ29udHJvbDxUPj4sXHJcbiAgdmFsaWRhdG9yT3JPcHRpb25zPzogVmFsaWRhdG9yRm4gfCBWYWxpZGF0b3JGbltdIHwgQWJzdHJhY3RDb250cm9sT3B0aW9ucyB8IG51bGwsXHJcbiAgYXN5bmNWYWxpZGF0b3JzPzogQXN5bmNWYWxpZGF0b3JGbiB8IEFzeW5jVmFsaWRhdG9yRm5bXSB8IG51bGxcclxuKTogVHlwZWRGb3JtQXJyYXk8SywgVD4ge1xyXG4gIHJldHVybiBuZXcgVW50eXBlZEZvcm1BcnJheShjb250cm9scywgdmFsaWRhdG9yT3JPcHRpb25zLCBhc3luY1ZhbGlkYXRvcnMpIGFzIGFueTtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgQ29udHJvbHM8Sz4gPVxyXG4gIHwgVHlwZWRDb250cm9sc0luPEs+XHJcbiAgfCB7XHJcbiAgICAgIFtrIGluIGtleW9mIEtdOiBLW2tdIGV4dGVuZHMgQXJyYXk8aW5mZXIgVD5cclxuICAgICAgICA/IFR5cGVkRm9ybUNvbnRyb2w8S1trXT4gfCBUeXBlZEZvcm1Hcm91cDxLW2tdPiB8IFR5cGVkRm9ybUFycmF5PEtba10sIFQ+XHJcbiAgICAgICAgOiBUeXBlZEZvcm1Db250cm9sPEtba10+IHwgVHlwZWRGb3JtR3JvdXA8S1trXT47XHJcbiAgICB9O1xyXG5cclxudHlwZSBOb25Hcm91cCA9IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBGdW5jdGlvbiB8IG51bGwgfCB1bmRlZmluZWQgfCBuZXZlcjtcclxuLyoqXHJcbiAqIFRoaXMgaXMgYSBzdHJvbmdseSB0eXBlZCB0aGluIHdyYXBwZXIgdHlwZSBhcm91bmQgYEZvcm1Hcm91cGAuXHJcbiAqIENhbiBiZSBjcmVhdGVkIHVzaW5nIHRoZSBgdHlwZWRGb3JtR3JvdXBgIGZ1bmN0aW9uXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBUeXBlZEZvcm1Hcm91cDxLLCBDIGV4dGVuZHMgQ29udHJvbHM8Sz4gPSBUeXBlZENvbnRyb2xzSW48Sz4+ID0gSyBleHRlbmRzIE5vbkdyb3VwID8gbmV2ZXIgOiBVbnR5cGVkRm9ybUdyb3VwICYgVHlwZWRGb3JtQ29udHJvbDxLPiAmIHtcclxuICBjb250cm9sczogSyBleHRlbmRzIE5vbkdyb3VwID8gbmV2ZXIgOiBDO1xyXG4gIHZhbHVlQ2hhbmdlczogT2JzZXJ2YWJsZTxLPjtcclxuICBzdGF0dXNDaGFuZ2VzOiBPYnNlcnZhYmxlPCdWQUxJRCcgfCAnSU5WQUxJRCcgfCAnUEVORElORycgfCAnRElTQUJMRUQnPjtcclxuICBwYXRjaFZhbHVlOiAodjogUGFydGlhbDxLPiwgb3B0aW9ucz86IEZvcm1FdmVudE9wdGlvbnMpID0+IHZvaWQ7XHJcbiAgc2V0VmFsdWU6ICh2OiBLLCBvcHRpb25zPzogRm9ybUV2ZW50T3B0aW9ucykgPT4gdm9pZDtcclxuICB2YWx1ZTogSztcclxuICBzZXRDb250cm9sOiA8VCBleHRlbmRzIGtleW9mIEM+KG5hbWU6IFQgZXh0ZW5kcyBzdHJpbmcgPyBUIDogbmV2ZXIsIGNvbnRyb2w6IENbVF0pID0+IHZvaWQ7XHJcbiAgcmVzZXQ6ICh2YWx1ZT86IFJlc2V0VmFsdWU8Sz4sIG9wdGlvbnM/OiBGb3JtRXZlbnRPcHRpb25zKSA9PiB2b2lkO1xyXG4gIGdldFJhd1ZhbHVlOiAoKSA9PiBLO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiB0eXBlZEZvcm1Hcm91cDxLLCBDIGV4dGVuZHMgQ29udHJvbHM8Sz4gPSBUeXBlZENvbnRyb2xzSW48Sz4sIEtleSBleHRlbmRzIGtleW9mIEsgPSBrZXlvZiBLPihcclxuICBjb250cm9sczogSyBleHRlbmRzIE5vbkdyb3VwID8gbmV2ZXIgOiBDLFxyXG4gIHZhbGlkYXRvck9yT3B0cz86IFZhbGlkYXRvckZuIHwgVmFsaWRhdG9yRm5bXSB8IEFic3RyYWN0Q29udHJvbE9wdGlvbnMgfCBudWxsLFxyXG4gIGFzeW5jVmFsaWRhdG9yPzogQXN5bmNWYWxpZGF0b3JGbiB8IEFzeW5jVmFsaWRhdG9yRm5bXSB8IG51bGxcclxuKTogVHlwZWRGb3JtR3JvdXA8SywgQz4gJiB7IGtleXM6IFJlY29yZDxLZXksIHN0cmluZz4gfSB7XHJcbiAgY29uc3QgZiA9IG5ldyBVbnR5cGVkRm9ybUdyb3VwKGNvbnRyb2xzLCB2YWxpZGF0b3JPck9wdHMsIGFzeW5jVmFsaWRhdG9yKSBhcyBhbnk7XHJcbiAgZi5rZXlzID0gT2JqZWN0LmtleXMoY29udHJvbHMpLnJlZHVjZSgoYWNjLCBrKSA9PiAoeyAuLi5hY2MsIFtrXTogayB9KSwge30pO1xyXG4gIHJldHVybiBmO1xyXG59XHJcblxyXG4vKipcclxuICogSGVscGVyIHR5cGUgZm9yIHNwZWNpZnlpbmcgd2hhdCBjb250cm9sIHdlIGV4cGVjdCBmb3IgZWFjaCBwcm9wZXJ0eSBmcm9tIHRoZSBtb2RlbC5cclxuICovXHJcbmV4cG9ydCB0eXBlIFR5cGVkQ29udHJvbHNJbjxLLCBncm91cHMgZXh0ZW5kcyBrZXlvZiBLID0gbmV2ZXIsIGFycmF5cyBleHRlbmRzIGtleW9mIEsgPSBuZXZlcj4gPSB7XHJcbiAgW2tleSBpbiBrZXlvZiBLXS0/OiBrZXkgZXh0ZW5kcyBncm91cHNcclxuICAgID8gVHlwZWRGb3JtR3JvdXA8S1trZXldPlxyXG4gICAgOiBrZXkgZXh0ZW5kcyBhcnJheXNcclxuICAgID8gS1trZXldIGV4dGVuZHMgQXJyYXk8aW5mZXIgVD5cclxuICAgICAgPyBUeXBlZEZvcm1BcnJheTxUW10sIFQ+XHJcbiAgICAgIDogbmV2ZXJcclxuICAgIDogVHlwZWRGb3JtQ29udHJvbDxLW2tleV0+O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNob3J0aGFuZCBmb3IgYSBtb2RlbCB3aXRoIGBUeXBlZEZvcm1Db250cm9sYHMgYW5kIGBUeXBlZEZvcm1BcnJheWBzIG9ubHkgKGkuZS4gbm8gYFR5cGVkRm9ybUdyb3VwYHMgaW4pXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBUeXBlZEFycmF5c0luPEssIGFycmF5cyBleHRlbmRzIGtleW9mIEs+ID0gVHlwZWRDb250cm9sc0luPEssIG5ldmVyLCBhcnJheXM+O1xyXG4vKipcclxuICogU2hvcnRoYW5kIGZvciBhIG1vZGVsIHdpdGggYFR5cGVkRm9ybUNvbnRyb2xgcyBhbmQgYFR5cGVkRm9ybUdyb3VwYHMgb25seSAgKGkuZS4gbm8gYFR5cGVkRm9ybUFycmF5YHMgaW4pXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBUeXBlZEdyb3Vwc0luPEssIGdyb3VwcyBleHRlbmRzIGtleW9mIEs+ID0gVHlwZWRDb250cm9sc0luPEssIGdyb3VwcywgbmV2ZXI+O1xyXG4iXX0=