@infordata-web/portal-common-component-lib
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.0.14.
74 lines • 26.5 kB
JavaScript
import { merge } from 'rxjs';
import { ComponentOutputStatus } from '../normalizzazione/component-output-status';
import { Tuple } from '../models/tuple';
import { map, scan, startWith, delay } from 'rxjs/operators';
// @dynamic
export class ComponentReducer {
static reducer2(m1, m2, isComplete, startValue) {
const cardinality = 2;
const merged = merge(ComponentReducer.ordinal(m1, 1), ComponentReducer.ordinal(m2, 2));
return ComponentReducer.reducerInternal(merged, startValue, cardinality, isComplete);
}
static reducer3(m1, m2, m3, isComplete, startValue) {
const cardinality = 3;
const merged = merge(ComponentReducer.ordinal(m1, 1), ComponentReducer.ordinal(m2, 2), ComponentReducer.ordinal(m3, 3));
return ComponentReducer.reducerInternal(merged, startValue, cardinality, isComplete);
}
static reducer4(m1, m2, m3, m4, isComplete, startValue) {
const cardinality = 4;
//TODO
// m3.subscribe(_ => console.log("m3", _))
const merged = merge(ComponentReducer.ordinal(m1, 1), ComponentReducer.ordinal(m2, 2), ComponentReducer.ordinal(m3, 3), ComponentReducer.ordinal(m4, 4));
// merged.subscribe(_ => console.log("merged", _));
return ComponentReducer.reducerInternal(merged, startValue, cardinality, isComplete);
}
static reducer5(m1, m2, m3, m4, m5, isComplete, startValue) {
const cardinality = 5;
const merged = merge(ComponentReducer.ordinal(m1, 1), ComponentReducer.ordinal(m2, 2), ComponentReducer.ordinal(m3, 3), ComponentReducer.ordinal(m4, 4), ComponentReducer.ordinal(m5, 5));
return ComponentReducer.reducerInternal(merged, startValue, cardinality, isComplete);
}
static reducer6(m1, m2, m3, m4, m5, m6, isComplete, startValue) {
const cardinality = 6;
const merged = merge(ComponentReducer.ordinal(m1, 1), ComponentReducer.ordinal(m2, 2), ComponentReducer.ordinal(m3, 3), ComponentReducer.ordinal(m4, 4), ComponentReducer.ordinal(m5, 5), ComponentReducer.ordinal(m6, 6));
return ComponentReducer.reducerInternal(merged, startValue, cardinality, isComplete);
}
static reducer7(m1, m2, m3, m4, m5, m6, m7, isComplete, startValue) {
const cardinality = 7;
const merged = merge(ComponentReducer.ordinal(m1, 1), ComponentReducer.ordinal(m2, 2), ComponentReducer.ordinal(m3, 3), ComponentReducer.ordinal(m4, 4), ComponentReducer.ordinal(m5, 5), ComponentReducer.ordinal(m6, 6), ComponentReducer.ordinal(m7, 7));
return ComponentReducer.reducerInternal(merged, startValue, cardinality, isComplete);
}
static reducer8(m1, m2, m3, m4, m5, m6, m7, m8, isComplete, startValue) {
const cardinality = 8;
const merged = merge(ComponentReducer.ordinal(m1, 1), ComponentReducer.ordinal(m2, 2), ComponentReducer.ordinal(m3, 3), ComponentReducer.ordinal(m4, 4), ComponentReducer.ordinal(m5, 5), ComponentReducer.ordinal(m6, 6), ComponentReducer.ordinal(m7, 7), ComponentReducer.ordinal(m8, 8));
return ComponentReducer.reducerInternal(merged, startValue, cardinality, isComplete);
}
static reducer9(m1, m2, m3, m4, m5, m6, m7, m8, m9, isComplete, startValue) {
const cardinality = 9;
const merged = merge(ComponentReducer.ordinal(m1, 1), ComponentReducer.ordinal(m2, 2), ComponentReducer.ordinal(m3, 3), ComponentReducer.ordinal(m4, 4), ComponentReducer.ordinal(m5, 5), ComponentReducer.ordinal(m6, 6), ComponentReducer.ordinal(m7, 7), ComponentReducer.ordinal(m8, 8), ComponentReducer.ordinal(m9, 9));
return ComponentReducer.reducerInternal(merged, startValue, cardinality, isComplete);
}
static reducerInternal(mergedMutators, startValue, cardinality, isComplete) {
const accumulatorAndValidity = Tuple.of([], startValue); // startValue è un valore normalizzato
return mergedMutators.pipe(
//TODO
// tap(_ => console.log("mergedMutators", _)),
scan((accumulator, mutator) => {
accumulator._2.mapValue(mutator._2.output);
accumulator._1[mutator._1] = mutator._2.status;
//TODO
// console.log("muttator", accumulator._2.mapValue(mutator._2.output));
// console.log("accumulator", accumulator);
return accumulator;
}, accumulatorAndValidity //valore iniziale
), map((accumulator) => {
const validities = accumulator._1;
const isValid = isComplete(accumulator._2.output) &&
validities.reduce((acc, x) => acc && (x == null || x), true);
return ComponentOutputStatus.of(isValid, accumulator._2.output);
}), delay(0), startWith(startValue));
}
static ordinal(mutator, order) {
return mutator.pipe(map(x => Tuple.of(order, x)));
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LXJlZHVjZXIuanMiLCJzb3VyY2VSb290IjoiQzovUHJvZ2V0dGkvREFHL3NvcmdlbnRpL2dpdGxhYi1zb2Z0d2FyZWZhY3RvcnkvY29tbW9uLWNvbXBvbmVudC1saWIvcHJvamVjdHMvcG9ydGFsLWNvbW1vbi1jb21wb25lbnQtbGliL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9kZXBvc2l0aS91dGlscy9jb21wb25lbnQtcmVkdWNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4QyxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEUsV0FBVztBQUNYLE1BQU0sT0FBTyxnQkFBZ0I7SUFFcEIsTUFBTSxDQUFDLFFBQVEsQ0FDcEIsRUFBeUQsRUFDekQsRUFBeUQsRUFDekQsVUFBaUMsRUFDakMsVUFBb0M7UUFDcEMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sTUFBTSxHQUF5RSxLQUFLLENBQ3hGLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQy9CLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQ2hDLENBQUE7UUFDRCxPQUFPLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRU0sTUFBTSxDQUFDLFFBQVEsQ0FDcEIsRUFBeUQsRUFDekQsRUFBeUQsRUFDekQsRUFBeUQsRUFDekQsVUFBaUMsRUFDakMsVUFBb0M7UUFDcEMsTUFBTSxXQUFXLEdB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O2dCQUNqQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUUvRCxPQUFPLHFCQUFxQixDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsRSxDQUFDLENBQUMsRUFDRixLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUN0QixDQUFDO0lBQ0osQ0FBQztJQUVPLE1BQU0sQ0FBQyxPQUFPLENBQ3BCLE9BQThELEVBQUUsS0FBYTtRQUU3RSxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQzdCLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtZXJnZSwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRPdXRwdXRTdGF0dXMgfSBmcm9tICcuLi9ub3JtYWxpenphemlvbmUvY29tcG9uZW50LW91dHB1dC1zdGF0dXMnO1xyXG5pbXBvcnQgeyBUdXBsZSB9IGZyb20gJy4uL21vZGVscy90dXBsZSc7XHJcbmltcG9ydCB7IG1hcCwgc2Nhbiwgc3RhcnRXaXRoLCBkZWxheSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuLy8gQGR5bmFtaWNcclxuZXhwb3J0IGNsYXNzIENvbXBvbmVudFJlZHVjZXIge1xyXG5cclxuICBwdWJsaWMgc3RhdGljIHJlZHVjZXIyPFQ+KFxyXG4gICAgbTE6IE9ic2VydmFibGU8Q29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogVCkgPT4gdm9pZD4+LFxyXG4gICAgbTI6IE9ic2VydmFibGU8Q29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogVCkgPT4gdm9pZD4+LFxyXG4gICAgaXNDb21wbGV0ZTogKHZhbHVlOiBUKSA9PiBib29sZWFuLFxyXG4gICAgc3RhcnRWYWx1ZTogQ29tcG9uZW50T3V0cHV0U3RhdHVzPFQ+KTogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8VD4+IHtcclxuICAgIGNvbnN0IGNhcmRpbmFsaXR5ID0gMjtcclxuICAgIGNvbnN0IG1lcmdlZDogT2JzZXJ2YWJsZTxUdXBsZTxudW1iZXIsIENvbXBvbmVudE91dHB1dFN0YXR1czwodmFsdWU6IFQpID0+IHZvaWQ+Pj4gPSBtZXJnZShcclxuICAgICAgQ29tcG9uZW50UmVkdWNlci5vcmRpbmFsKG0xLCAxKSxcclxuICAgICAgQ29tcG9uZW50UmVkdWNlci5vcmRpbmFsKG0yLCAyKSxcclxuICAgIClcclxuICAgIHJldHVybiBDb21wb25lbnRSZWR1Y2VyLnJlZHVjZXJJbnRlcm5hbChtZXJnZWQsIHN0YXJ0VmFsdWUsIGNhcmRpbmFsaXR5LCBpc0NvbXBsZXRlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgcmVkdWNlcjM8VD4oXHJcbiAgICBtMTogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4sXHJcbiAgICBtMjogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4sXHJcbiAgICBtMzogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4sXHJcbiAgICBpc0NvbXBsZXRlOiAodmFsdWU6IFQpID0+IGJvb2xlYW4sXHJcbiAgICBzdGFydFZhbHVlOiBDb21wb25lbnRPdXRwdXRTdGF0dXM8VD4pOiBPYnNlcnZhYmxlPENvbXBvbmVudE91dHB1dFN0YXR1czxUPj4ge1xyXG4gICAgY29uc3QgY2FyZGluYWxpdHkgPSAzO1xyXG4gICAgY29uc3QgbWVyZ2VkOiBPYnNlcnZhYmxlPFR1cGxlPG51bWJlciwgQ29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogVCkgPT4gdm9pZD4+PiA9IG1lcmdlKFxyXG4gICAgICBDb21wb25lbnRSZWR1Y2VyLm9yZGluYWwobTEsIDEpLFxyXG4gICAgICBDb21wb25lbnRSZWR1Y2VyLm9yZGluYWwobTIsIDIpLFxyXG4gICAgICBDb21wb25lbnRSZWR1Y2VyLm9yZGluYWwobTMsIDMpXHJcbiAgICApXHJcbiAgICByZXR1cm4gQ29tcG9uZW50UmVkdWNlci5yZWR1Y2VySW50ZXJuYWwobWVyZ2VkLCBzdGFydFZhbHVlLCBjYXJkaW5hbGl0eSwgaXNDb21wbGV0ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIHJlZHVjZXI0PFQ+KFxyXG4gICAgbTE6IE9ic2VydmFibGU8Q29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogVCkgPT4gdm9pZD4+LFxyXG4gICAgbTI6IE9ic2VydmFibGU8Q29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogVCkgPT4gdm9pZD4+LFxyXG4gICAgbTM6IE9ic2VydmFibGU8Q29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogVCkgPT4gdm9pZD4+LFxyXG4gICAgbTQ6IE9ic2VydmFibGU8Q29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogVCkgPT4gdm9pZD4+LFxyXG4gICAgaXNDb21wbGV0ZTogKHZhbHVlOiBUKSA9PiBib29sZWFuLFxyXG4gICAgc3RhcnRWYWx1ZTogQ29tcG9uZW50T3V0cHV0U3RhdHVzPFQ+KTogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8VD4+IHtcclxuICAgIGNvbnN0IGNhcmRpbmFsaXR5ID0gNDtcclxuICAgIC8vVE9ET1xyXG4gICAgLy8gbTMuc3Vic2NyaWJlKF8gPT4gY29uc29sZS5sb2coXCJtM1wiLCBfKSlcclxuICAgIGNvbnN0IG1lcmdlZDogT2JzZXJ2YWJsZTxUdXBsZTxudW1iZXIsIENvbXBvbmVudE91dHB1dFN0YXR1czwodmFsdWU6IFQpID0+IHZvaWQ+Pj4gPSBtZXJnZShcclxuICAgICAgQ29tcG9uZW50UmVkdWNlci5vcmRpbmFsKG0xLCAxKSxcclxuICAgICAgQ29tcG9uZW50UmVkdWNlci5vcmRpbmFsKG0yLCAyKSxcclxuICAgICAgQ29tcG9uZW50UmVkdWNlci5vcmRpbmFsKG0zLCAzKSxcclxuICAgICAgQ29tcG9uZW50UmVkdWNlci5vcmRpbmFsKG00LCA0KVxyXG4gICAgKVxyXG4gICAgLy8gbWVyZ2VkLnN1YnNjcmliZShfID0+IGNvbnNvbGUubG9nKFwibWVyZ2VkXCIsIF8pKTtcclxuICAgIHJldHVybiBDb21wb25lbnRSZWR1Y2VyLnJlZHVjZXJJbnRlcm5hbChtZXJnZWQsIHN0YXJ0VmFsdWUsIGNhcmRpbmFsaXR5LCBpc0NvbXBsZXRlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgcmVkdWNlcjU8VD4oXHJcbiAgICBtMTogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4sXHJcbiAgICBtMjogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4sXHJcbiAgICBtMzogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4sXHJcbiAgICBtNDogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4sXHJcbiAgICBtNTogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4sXHJcbiAgICBpc0NvbXBsZXRlOiAodmFsdWU6IFQpID0+IGJvb2xlYW4sXHJcbiAgICBzdGFydFZhbHVlOiBDb21wb25lbnRPdXRwdXRTdGF0dXM8VD4pOiBPYnNlcnZhYmxlPENvbXBvbmVudE91dHB1dFN0YXR1czxUPj4ge1xyXG4gICAgY29uc3QgY2FyZGluYWxpdHkgPSA1O1xyXG4gICAgY29uc3QgbWVyZ2VkOiBPYnNlcnZhYmxlPFR1cGxlPG51bWJlciwgQ29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogVCkgPT4gdm9pZD4+PiA9IG1lcmdlKFxyXG4gICAgICBDb21wb25lbnRSZWR1Y2VyLm9yZGluYWwobTEsIDEpLFxyXG4gICAgICBDb21wb25lbnRSZWR1Y2VyLm9yZGluYWwobTIsIDIpLFxyXG4gICAgICBDb21wb25lbnRSZWR1Y2VyLm9yZGluYWwobTMsIDMpLFxyXG4gICAgICBDb21wb25lbnRSZWR1Y2VyLm9yZGluYWwobTQsIDQpLFxyXG4gICAgICBDb21wb25lbnRSZWR1Y2VyLm9yZGluYWwobTUsIDUpXHJcbiAgICApXHJcbiAgICByZXR1cm4gQ29tcG9uZW50UmVkdWNlci5yZWR1Y2VySW50ZXJuYWwobWVyZ2VkLCBzdGFydFZhbHVlLCBjYXJkaW5hbGl0eSwgaXNDb21wbGV0ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIHJlZHVjZXI2PFQ+KFxyXG4gICAgbTE6IE9ic2VydmFibGU8Q29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogVCkgPT4gdm9pZD4+LFxyXG4gICAgbTI6IE9ic2VydmFibGU8Q29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogVCkgPT4gdm9pZD4+LFxyXG4gICAgbTM6IE9ic2VydmFibGU8Q29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogVCkgPT4gdm9pZD4+LFxyXG4gICAgbTQ6IE9ic2VydmFibGU8Q29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogVCkgPT4gdm9pZD4+LFxyXG4gICAgbTU6IE9ic2VydmFibGU8Q29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogVCkgPT4gdm9pZD4+LFxyXG4gICAgbTY6IE9ic2VydmFibGU8Q29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogVCkgPT4gdm9pZD4+LFxyXG4gICAgaXNDb21wbGV0ZTogKHZhbHVlOiBUKSA9PiBib29sZWFuLFxyXG4gICAgc3RhcnRWYWx1ZTogQ29tcG9uZW50T3V0cHV0U3RhdHVzPFQ+KTogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8VD4+IHtcclxuICAgIGNvbnN0IGNhcmRpbmFsaXR5ID0gNjtcclxuICAgIGNvbnN0IG1lcmdlZDogT2JzZXJ2YWJsZTxUdXBsZTxudW1iZXIsIENvbXBvbmVudE91dHB1dFN0YXR1czwodmFsdWU6IFQpID0+IHZvaWQ+Pj4gPSBtZXJnZShcclxuICAgICAgQ29tcG9uZW50UmVkdWNlci5vcmRpbmFsKG0xLCAxKSxcclxuICAgICAgQ29tcG9uZW50UmVkdWNlci5vcmRpbmFsKG0yLCAyKSxcclxuICAgICAgQ29tcG9uZW50UmVkdWNlci5vcmRpbmFsKG0zLCAzKSxcclxuICAgICAgQ29tcG9uZW50UmVkdWNlci5vcmRpbmFsKG00LCA0KSxcclxuICAgICAgQ29tcG9uZW50UmVkdWNlci5vcmRpbmFsKG01LCA1KSxcclxuICAgICAgQ29tcG9uZW50UmVkdWNlci5vcmRpbmFsKG02LCA2KVxyXG4gICAgKVxyXG4gICAgcmV0dXJuIENvbXBvbmVudFJlZHVjZXIucmVkdWNlckludGVybmFsKG1lcmdlZCwgc3RhcnRWYWx1ZSwgY2FyZGluYWxpdHksIGlzQ29tcGxldGUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyByZWR1Y2VyNzxUPihcclxuICAgIG0xOiBPYnNlcnZhYmxlPENvbXBvbmVudE91dHB1dFN0YXR1czwodmFsdWU6IFQpID0+IHZvaWQ+PixcclxuICAgIG0yOiBPYnNlcnZhYmxlPENvbXBvbmVudE91dHB1dFN0YXR1czwodmFsdWU6IFQpID0+IHZvaWQ+PixcclxuICAgIG0zOiBPYnNlcnZhYmxlPENvbXBvbmVudE91dHB1dFN0YXR1czwodmFsdWU6IFQpID0+IHZvaWQ+PixcclxuICAgIG00OiBPYnNlcnZhYmxlPENvbXBvbmVudE91dHB1dFN0YXR1czwodmFsdWU6IFQpID0+IHZvaWQ+PixcclxuICAgIG01OiBPYnNlcnZhYmxlPENvbXBvbmVudE91dHB1dFN0YXR1czwodmFsdWU6IFQpID0+IHZvaWQ+PixcclxuICAgIG02OiBPYnNlcnZhYmxlPENvbXBvbmVudE91dHB1dFN0YXR1czwodmFsdWU6IFQpID0+IHZvaWQ+PixcclxuICAgIG03OiBPYnNlcnZhYmxlPENvbXBvbmVudE91dHB1dFN0YXR1czwodmFsdWU6IFQpID0+IHZvaWQ+PixcclxuICAgIGlzQ29tcGxldGU6ICh2YWx1ZTogVCkgPT4gYm9vbGVhbixcclxuICAgIHN0YXJ0VmFsdWU6IENvbXBvbmVudE91dHB1dFN0YXR1czxUPik6IE9ic2VydmFibGU8Q29tcG9uZW50T3V0cHV0U3RhdHVzPFQ+PiB7XHJcbiAgICBjb25zdCBjYXJkaW5hbGl0eSA9IDc7XHJcbiAgICBjb25zdCBtZXJnZWQ6IE9ic2VydmFibGU8VHVwbGU8bnVtYmVyLCBDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4+ID0gbWVyZ2UoXHJcbiAgICAgIENvbXBvbmVudFJlZHVjZXIub3JkaW5hbChtMSwgMSksXHJcbiAgICAgIENvbXBvbmVudFJlZHVjZXIub3JkaW5hbChtMiwgMiksXHJcbiAgICAgIENvbXBvbmVudFJlZHVjZXIub3JkaW5hbChtMywgMyksXHJcbiAgICAgIENvbXBvbmVudFJlZHVjZXIub3JkaW5hbChtNCwgNCksXHJcbiAgICAgIENvbXBvbmVudFJlZHVjZXIub3JkaW5hbChtNSwgNSksXHJcbiAgICAgIENvbXBvbmVudFJlZHVjZXIub3JkaW5hbChtNiwgNiksXHJcbiAgICAgIENvbXBvbmVudFJlZHVjZXIub3JkaW5hbChtNywgNylcclxuICAgIClcclxuICAgIHJldHVybiBDb21wb25lbnRSZWR1Y2VyLnJlZHVjZXJJbnRlcm5hbChtZXJnZWQsIHN0YXJ0VmFsdWUsIGNhcmRpbmFsaXR5LCBpc0NvbXBsZXRlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgcmVkdWNlcjg8VD4oXHJcbiAgICBtMTogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4sXHJcbiAgICBtMjogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4sXHJcbiAgICBtMzogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4sXHJcbiAgICBtNDogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4sXHJcbiAgICBtNTogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4sXHJcbiAgICBtNjogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4sXHJcbiAgICBtNzogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4sXHJcbiAgICBtODogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4sXHJcbiAgICBpc0NvbXBsZXRlOiAodmFsdWU6IFQpID0+IGJvb2xlYW4sXHJcbiAgICBzdGFydFZhbHVlOiBDb21wb25lbnRPdXRwdXRTdGF0dXM8VD4pOiBPYnNlcnZhYmxlPENvbXBvbmVudE91dHB1dFN0YXR1czxUPj4ge1xyXG4gICAgY29uc3QgY2FyZGluYWxpdHkgPSA4O1xyXG4gICAgY29uc3QgbWVyZ2VkOiBPYnNlcnZhYmxlPFR1cGxlPG51bWJlciwgQ29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogVCkgPT4gdm9pZD4+PiA9IG1lcmdlKFxyXG4gICAgICBDb21wb25lbnRSZWR1Y2VyLm9yZGluYWwobTEsIDEpLFxyXG4gICAgICBDb21wb25lbnRSZWR1Y2VyLm9yZGluYWwobTIsIDIpLFxyXG4gICAgICBDb21wb25lbnRSZWR1Y2VyLm9yZGluYWwobTMsIDMpLFxyXG4gICAgICBDb21wb25lbnRSZWR1Y2VyLm9yZGluYWwobTQsIDQpLFxyXG4gICAgICBDb21wb25lbnRSZWR1Y2VyLm9yZGluYWwobTUsIDUpLFxyXG4gICAgICBDb21wb25lbnRSZWR1Y2VyLm9yZGluYWwobTYsIDYpLFxyXG4gICAgICBDb21wb25lbnRSZWR1Y2VyLm9yZGluYWwobTcsIDcpLFxyXG4gICAgICBDb21wb25lbnRSZWR1Y2VyLm9yZGluYWwobTgsIDgpXHJcbiAgICApXHJcbiAgICByZXR1cm4gQ29tcG9uZW50UmVkdWNlci5yZWR1Y2VySW50ZXJuYWwobWVyZ2VkLCBzdGFydFZhbHVlLCBjYXJkaW5hbGl0eSwgaXNDb21wbGV0ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIHJlZHVjZXI5PFQ+KFxyXG4gICAgbTE6IE9ic2VydmFibGU8Q29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogVCkgPT4gdm9pZD4+LFxyXG4gICAgbTI6IE9ic2VydmFibGU8Q29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogVCkgPT4gdm9pZD4+LFxyXG4gICAgbTM6IE9ic2VydmFibGU8Q29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogVCkgPT4gdm9pZD4+LFxyXG4gICAgbTQ6IE9ic2VydmFibGU8Q29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogVCkgPT4gdm9pZD4+LFxyXG4gICAgbTU6IE9ic2VydmFibGU8Q29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogVCkgPT4gdm9pZD4+LFxyXG4gICAgbTY6IE9ic2VydmFibGU8Q29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogVCkgPT4gdm9pZD4+LFxyXG4gICAgbTc6IE9ic2VydmFibGU8Q29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogVCkgPT4gdm9pZD4+LFxyXG4gICAgbTg6IE9ic2VydmFibGU8Q29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogVCkgPT4gdm9pZD4+LFxyXG4gICAgbTk6IE9ic2VydmFibGU8Q29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogVCkgPT4gdm9pZD4+LFxyXG4gICAgaXNDb21wbGV0ZTogKHZhbHVlOiBUKSA9PiBib29sZWFuLFxyXG4gICAgc3RhcnRWYWx1ZTogQ29tcG9uZW50T3V0cHV0U3RhdHVzPFQ+KTogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8VD4+IHtcclxuICAgIGNvbnN0IGNhcmRpbmFsaXR5ID0gOTtcclxuICAgIGNvbnN0IG1lcmdlZDogT2JzZXJ2YWJsZTxUdXBsZTxudW1iZXIsIENvbXBvbmVudE91dHB1dFN0YXR1czwodmFsdWU6IFQpID0+IHZvaWQ+Pj4gPSBtZXJnZShcclxuICAgICAgQ29tcG9uZW50UmVkdWNlci5vcmRpbmFsKG0xLCAxKSxcclxuICAgICAgQ29tcG9uZW50UmVkdWNlci5vcmRpbmFsKG0yLCAyKSxcclxuICAgICAgQ29tcG9uZW50UmVkdWNlci5vcmRpbmFsKG0zLCAzKSxcclxuICAgICAgQ29tcG9uZW50UmVkdWNlci5vcmRpbmFsKG00LCA0KSxcclxuICAgICAgQ29tcG9uZW50UmVkdWNlci5vcmRpbmFsKG01LCA1KSxcclxuICAgICAgQ29tcG9uZW50UmVkdWNlci5vcmRpbmFsKG02LCA2KSxcclxuICAgICAgQ29tcG9uZW50UmVkdWNlci5vcmRpbmFsKG03LCA3KSxcclxuICAgICAgQ29tcG9uZW50UmVkdWNlci5vcmRpbmFsKG04LCA4KSxcclxuICAgICAgQ29tcG9uZW50UmVkdWNlci5vcmRpbmFsKG05LCA5KVxyXG4gICAgKVxyXG4gICAgcmV0dXJuIENvbXBvbmVudFJlZHVjZXIucmVkdWNlckludGVybmFsKG1lcmdlZCwgc3RhcnRWYWx1ZSwgY2FyZGluYWxpdHksIGlzQ29tcGxldGUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgcmVkdWNlckludGVybmFsPFQ+KFxyXG4gICAgbWVyZ2VkTXV0YXRvcnM6IE9ic2VydmFibGU8VHVwbGU8bnVtYmVyLCBDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4+LFxyXG4gICAgc3RhcnRWYWx1ZTogQ29tcG9uZW50T3V0cHV0U3RhdHVzPFQ+LFxyXG4gICAgY2FyZGluYWxpdHk6IG51bWJlcixcclxuICAgIGlzQ29tcGxldGU6ICh2YWx1ZTogVCkgPT4gYm9vbGVhbik6XHJcbiAgICBPYnNlcnZhYmxlPENvbXBvbmVudE91dHB1dFN0YXR1czxUPj4ge1xyXG5cclxuICAgIGNvbnN0IGFjY3VtdWxhdG9yQW5kVmFsaWRpdHk6IFR1cGxlPEFycmF5PGJvb2xlYW4+LCBDb21wb25lbnRPdXRwdXRTdGF0dXM8VD4+ID1cclxuICAgICAgVHVwbGUub2YoW10sIHN0YXJ0VmFsdWUpOyAvLyBzdGFydFZhbHVlIMOoIHVuIHZhbG9yZSBub3JtYWxpenphdG9cclxuICAgIHJldHVybiBtZXJnZWRNdXRhdG9ycy5waXBlKFxyXG4gICAgICAvL1RPRE9cclxuICAgICAgLy8gdGFwKF8gPT4gY29uc29sZS5sb2coXCJtZXJnZWRNdXRhdG9yc1wiLCBfKSksXHJcbiAgICAgIHNjYW4oKFxyXG4gICAgICAgIGFjY3VtdWxhdG9yOiBUdXBsZTxBcnJheTxib29sZWFuPiwgQ29tcG9uZW50T3V0cHV0U3RhdHVzPFQ+PixcclxuICAgICAgICBtdXRhdG9yOiBUdXBsZTxudW1iZXIsIENvbXBvbmVudE91dHB1dFN0YXR1czwodmFsdWU6IFQpID0+IHZvaWQ+PlxyXG4gICAgICApID0+IHtcclxuICAgICAgICBhY2N1bXVsYXRvci5fMi5tYXBWYWx1ZShtdXRhdG9yLl8yLm91dHB1dCk7XHJcbiAgICAgICAgYWNjdW11bGF0b3IuXzFbbXV0YXRvci5fMV0gPSBtdXRhdG9yLl8yLnN0YXR1cztcclxuICAgICAgICAvL1RPRE9cclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIm11dHRhdG9yXCIsIGFjY3VtdWxhdG9yLl8yLm1hcFZhbHVlKG11dGF0b3IuXzIub3V0cHV0KSk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJhY2N1bXVsYXRvclwiLCBhY2N1bXVsYXRvcik7XHJcbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xyXG4gICAgICB9LFxyXG4gICAgICAgIGFjY3VtdWxhdG9yQW5kVmFsaWRpdHkgLy92YWxvcmUgaW5pemlhbGVcclxuICAgICAgKSxcclxuICAgICAgbWFwKChhY2N1bXVsYXRvcjogVHVwbGU8QXJyYXk8Ym9vbGVhbj4sIENvbXBvbmVudE91dHB1dFN0YXR1czxUPj4pID0+IHtcclxuXHJcbiAgICAgICAgY29uc3QgdmFsaWRpdGllczogQXJyYXk8Ym9vbGVhbj4gPSBhY2N1bXVsYXRvci5fMTtcclxuICAgICAgICBjb25zdCBpc1ZhbGlkOiBib29sZWFuID1cclxuICAgICAgICAgIGlzQ29tcGxldGUoYWNjdW11bGF0b3IuXzIub3V0cHV0KSAmJlxyXG4gICAgICAgICAgdmFsaWRpdGllcy5yZWR1Y2UoKGFjYywgeCkgPT4gYWNjICYmICh4ID09IG51bGwgfHwgeCksIHRydWUpO1xyXG5cclxuICAgICAgICByZXR1cm4gQ29tcG9uZW50T3V0cHV0U3RhdHVzLm9mKGlzVmFsaWQsIGFjY3VtdWxhdG9yLl8yLm91dHB1dCk7XHJcbiAgICAgIH0pLFxyXG4gICAgICBkZWxheSgwKSxcclxuICAgICAgc3RhcnRXaXRoKHN0YXJ0VmFsdWUpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgb3JkaW5hbDxUPihcclxuICAgIG11dGF0b3I6IE9ic2VydmFibGU8Q29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogVCkgPT4gdm9pZD4+LCBvcmRlcjogbnVtYmVyKTpcclxuICAgIE9ic2VydmFibGU8VHVwbGU8bnVtYmVyLCBDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4+IHtcclxuICAgIHJldHVybiBtdXRhdG9yLnBpcGUoXHJcbiAgICAgIG1hcCh4ID0+IFR1cGxlLm9mKG9yZGVyLCB4KSlcclxuICAgICk7XHJcbiAgfVxyXG59XHJcbiJdfQ==