ng-chartjs
Version:
This is a Angular chart.js library.
118 lines • 15.8 kB
JavaScript
// Default colors
export const DefaultColors = [
[63, 81, 181],
[0, 150, 136],
[255, 152, 0],
[233, 30, 99],
[156, 39, 176],
[0, 188, 212],
[3, 169, 244],
[96, 125, 139],
[255, 193, 7],
[37, 155, 36],
[205, 220, 57],
[86, 119, 252] // Blue
];
export function rgba(colour, alpha) {
return 'rgba(' + colour.concat(alpha).join(',') + ')';
}
export function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
export function formatLineColor(colors) {
return {
backgroundColor: rgba(colors, 0.35),
borderColor: rgba(colors, 1),
pointBackgroundColor: rgba(colors, 1),
pointBorderColor: '#fff',
pointHoverBackgroundColor: '#fff',
pointHoverBorderColor: rgba(colors, 0.95)
};
}
export function formatBarColor(colors) {
return {
backgroundColor: rgba(colors, 0.75),
borderColor: rgba(colors, 1),
hoverBackgroundColor: rgba(colors, 1),
hoverBorderColor: rgba(colors, 1)
};
}
export function formatPieColors(colors) {
return {
backgroundColor: colors.map((color) => rgba(color, 0.76)),
borderColor: colors.map(() => '#fff'),
pointBackgroundColor: colors.map((color) => rgba(color, 1)),
pointBorderColor: colors.map(() => '#fff'),
pointHoverBackgroundColor: colors.map((color) => rgba(color, 1)),
pointHoverBorderColor: colors.map((color) => rgba(color, 1))
};
}
export function formatPolarAreaColors(colors) {
return {
backgroundColor: colors.map((color) => rgba(color, 0.75)),
borderColor: colors.map((color) => rgba(color, 1)),
hoverBackgroundColor: colors.map((color) => rgba(color, 1)),
hoverBorderColor: colors.map((color) => rgba(color, 1))
};
}
export function getRandomColor() {
return [getRandomInt(0, 255), getRandomInt(0, 255), getRandomInt(0, 255)];
}
/**
* @method Generate colors for line|bar charts
* @param index he index of the default color array. eg. 0, 1
* @return number[]
* @author vincent 2019-01-22
* @version 0.0.0
* @example
* @log 1. vincent,2019-01-22,done
*/
export function generateColor(index) {
return DefaultColors[index] || getRandomColor();
}
/**
* @method Generate colors for pie|doughnut charts
* @param count Length of data. eg. datasets.data.length
* @return number[][]
* @author vincent 2019-01-22
* @version 0.0.0
* @example
* @log 1. vincent,2019-01-22,done
*/
export function generateColors(count) {
const colorsArr = new Array(count);
for (let i = 0; i < count; i++) {
colorsArr[i] = DefaultColors[i] || getRandomColor();
}
return colorsArr;
}
/**
* @method Generate colors by chart type
* @param chartType The type of chart you are using. eg. line,bar
* @param index The index of the default color array. eg. DefaultColors[index]
* @param count Length of data. eg. datasets.data.length
* @return Color or number[]
* @author vincent 2019-01-22
* @version 0.0.0
* @example
* @log 1. vincent,2019-01-22,done
*/
export function getColors(chartType, index, count) {
if (chartType === 'pie' ||
chartType === 'doughnut' ||
chartType === 'bubble' ||
chartType === 'scatter') {
return formatPieColors(generateColors(count));
}
if (chartType === 'polarArea') {
return formatPolarAreaColors(generateColors(count));
}
if (chartType === 'line' || chartType === 'radar') {
return formatLineColor(generateColor(index));
}
if (chartType === 'bar' || chartType === 'horizontalBar') {
return formatBarColor(generateColor(index));
}
return generateColor(index);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY2hhcnRqcy9zcmMvbGliL2NvbG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQkEsaUJBQWlCO0FBQ2pCLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBZTtJQUNyQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBQ2IsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUNiLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDYixDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2IsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQztJQUNkLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDYixDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0lBQ2IsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztJQUNkLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO0lBQ2IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUNkLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBTyxPQUFPO0NBQy9CLENBQUM7QUFRRixNQUFNLFVBQVUsSUFBSSxDQUFDLE1BQWdCLEVBQUUsS0FBYTtJQUNoRCxPQUFPLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUQsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsR0FBVyxFQUFFLEdBQVc7SUFDakQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0QsQ0FBQztBQUVELE1BQU0sVUFBVSxlQUFlLENBQUMsTUFBZ0I7SUFDNUMsT0FBTztRQUNILGVBQWUsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztRQUNuQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDNUIsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDckMsZ0JBQWdCLEVBQUUsTUFBTTtRQUN4Qix5QkFBeUIsRUFBRSxNQUFNO1FBQ2pDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO0tBQzVDLENBQUM7QUFDTixDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FBQyxNQUFnQjtJQUMzQyxPQUFPO1FBQ0gsZUFBZSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO1FBQ25DLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUM1QixvQkFBb0IsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNyQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztLQUNwQyxDQUFDO0FBQ04sQ0FBQztBQUVELE1BQU0sVUFBVSxlQUFlLENBQUMsTUFBa0I7SUFDOUMsT0FBTztRQUNILGVBQWUsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBZSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25FLFdBQVcsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUNyQyxvQkFBb0IsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBZSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQzFDLHlCQUF5QixFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFlLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUUscUJBQXFCLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQWUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztLQUN6RSxDQUFDO0FBQ04sQ0FBQztBQUVELE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxNQUFrQjtJQUNwRCxPQUFPO1FBQ0gsZUFBZSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFlLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFlLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUQsb0JBQW9CLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQWUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNyRSxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBZSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ3BFLENBQUM7QUFDTixDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWM7SUFDMUIsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDOUUsQ0FBQztBQUdEOzs7Ozs7OztFQVFFO0FBQ0YsTUFBTSxVQUFVLGFBQWEsQ0FBQyxLQUFhO0lBQ3ZDLE9BQU8sYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLGNBQWMsRUFBRSxDQUFDO0FBQ3BELENBQUM7QUFHRDs7Ozs7Ozs7RUFRRTtBQUNGLE1BQU0sVUFBVSxjQUFjLENBQUMsS0FBYTtJQUN4QyxNQUFNLFNBQVMsR0FBZSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzVCLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksY0FBYyxFQUFFLENBQUM7S0FDdkQ7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNyQixDQUFDO0FBR0Q7Ozs7Ozs7Ozs7RUFVRTtBQUNGLE1BQU0sVUFBVSxTQUFTLENBQUMsU0FBaUIsRUFBRSxLQUFhLEVBQUUsS0FBYTtJQUNyRSxJQUFJLFNBQVMsS0FBSyxLQUFLO1FBQ25CLFNBQVMsS0FBSyxVQUFVO1FBQ3hCLFNBQVMsS0FBSyxRQUFRO1FBQ3RCLFNBQVMsS0FBSyxTQUFTLEVBQUU7UUFDekIsT0FBTyxlQUFlLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7S0FDakQ7SUFFRCxJQUFJLFNBQVMsS0FBSyxXQUFXLEVBQUU7UUFDM0IsT0FBTyxxQkFBcUIsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztLQUN2RDtJQUVELElBQUksU0FBUyxLQUFLLE1BQU0sSUFBSSxTQUFTLEtBQUssT0FBTyxFQUFFO1FBQy9DLE9BQU8sZUFBZSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0tBQ2hEO0lBRUQsSUFBSSxTQUFTLEtBQUssS0FBSyxJQUFJLFNBQVMsS0FBSyxlQUFlLEVBQUU7UUFDdEQsT0FBTyxjQUFjLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7S0FDL0M7SUFFRCxPQUFPLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBDb2xvciB7XG4gICAgYmFja2dyb3VuZENvbG9yPzogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgYm9yZGVyV2lkdGg/OiBudW1iZXIgfCBudW1iZXJbXTtcbiAgICBib3JkZXJDb2xvcj86IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIGJvcmRlckNhcFN0eWxlPzogc3RyaW5nO1xuICAgIGJvcmRlckRhc2g/OiBudW1iZXJbXTtcbiAgICBib3JkZXJEYXNoT2Zmc2V0PzogbnVtYmVyO1xuICAgIGJvcmRlckpvaW5TdHlsZT86IHN0cmluZztcblxuICAgIHBvaW50Qm9yZGVyQ29sb3I/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICBwb2ludEJhY2tncm91bmRDb2xvcj86IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIHBvaW50Qm9yZGVyV2lkdGg/OiBudW1iZXIgfCBudW1iZXJbXTtcblxuICAgIHBvaW50UmFkaXVzPzogbnVtYmVyIHwgbnVtYmVyW107XG4gICAgcG9pbnRIb3ZlclJhZGl1cz86IG51bWJlciB8IG51bWJlcltdO1xuICAgIHBvaW50SGl0UmFkaXVzPzogbnVtYmVyIHwgbnVtYmVyW107XG5cbiAgICBwb2ludEhvdmVyQmFja2dyb3VuZENvbG9yPzogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgcG9pbnRIb3ZlckJvcmRlckNvbG9yPzogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgcG9pbnRIb3ZlckJvcmRlcldpZHRoPzogbnVtYmVyIHwgbnVtYmVyW107XG4gICAgcG9pbnRTdHlsZT86IHN0cmluZyB8IHN0cmluZ1tdO1xuXG4gICAgaG92ZXJCYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICBob3ZlckJvcmRlckNvbG9yPzogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgaG92ZXJCb3JkZXJXaWR0aD86IG51bWJlcjtcbn1cblxuLy8gRGVmYXVsdCBjb2xvcnNcbmV4cG9ydCBjb25zdCBEZWZhdWx0Q29sb3JzOiBudW1iZXJbXVtdID0gW1xuICAgIFs2MywgODEsIDE4MV0sICAgICAgIC8vIEluZG9nb1xuICAgIFswLCAxNTAsIDEzNl0sICAgICAgIC8vIFRlYWxcbiAgICBbMjU1LCAxNTIsIDBdLCAgICAgICAvLyBPcmFuZ2VcbiAgICBbMjMzLCAzMCwgOTldLCAgICAgICAvLyBQaW5rXG4gICAgWzE1NiwgMzksIDE3Nl0sICAgICAgLy8gUHVycGxlXG4gICAgWzAsIDE4OCwgMjEyXSwgICAgICAgLy8gQ3lhblxuICAgIFszLCAxNjksIDI0NF0sICAgICAgIC8vIExpZ2h0IEJsdWVcbiAgICBbOTYsIDEyNSwgMTM5XSwgICAgICAvLyBCbHVlIEdyZXlcbiAgICBbMjU1LCAxOTMsIDddLCAgICAgICAvLyBBbWJlclxuICAgIFszNywgMTU1LCAzNl0sICAgICAgIC8vIEdyZWVuXG4gICAgWzIwNSwgMjIwLCA1N10sICAgICAgLy8gTGltZVxuICAgIFs4NiwgMTE5LCAyNTJdICAgICAgIC8vIEJsdWVcbl07XG5cbi8vIHBpZSB8IGRvdWdobnV0XG5leHBvcnQgaW50ZXJmYWNlIENvbG9ycyBleHRlbmRzIENvbG9yIHtcbiAgICBkYXRhPzogbnVtYmVyW107XG4gICAgbGFiZWw/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZ2JhKGNvbG91cjogbnVtYmVyW10sIGFscGhhOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiAncmdiYSgnICsgY29sb3VyLmNvbmNhdChhbHBoYSkuam9pbignLCcpICsgJyknO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmFuZG9tSW50KG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSkgKyBtaW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRMaW5lQ29sb3IoY29sb3JzOiBudW1iZXJbXSk6IENvbG9yIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHJnYmEoY29sb3JzLCAwLjM1KSxcbiAgICAgICAgYm9yZGVyQ29sb3I6IHJnYmEoY29sb3JzLCAxKSxcbiAgICAgICAgcG9pbnRCYWNrZ3JvdW5kQ29sb3I6IHJnYmEoY29sb3JzLCAxKSxcbiAgICAgICAgcG9pbnRCb3JkZXJDb2xvcjogJyNmZmYnLFxuICAgICAgICBwb2ludEhvdmVyQmFja2dyb3VuZENvbG9yOiAnI2ZmZicsXG4gICAgICAgIHBvaW50SG92ZXJCb3JkZXJDb2xvcjogcmdiYShjb2xvcnMsIDAuOTUpXG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEJhckNvbG9yKGNvbG9yczogbnVtYmVyW10pOiBDb2xvciB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiByZ2JhKGNvbG9ycywgMC43NSksXG4gICAgICAgIGJvcmRlckNvbG9yOiByZ2JhKGNvbG9ycywgMSksXG4gICAgICAgIGhvdmVyQmFja2dyb3VuZENvbG9yOiByZ2JhKGNvbG9ycywgMSksXG4gICAgICAgIGhvdmVyQm9yZGVyQ29sb3I6IHJnYmEoY29sb3JzLCAxKVxuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRQaWVDb2xvcnMoY29sb3JzOiBudW1iZXJbXVtdKTogQ29sb3JzIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9ycy5tYXAoKGNvbG9yOiBudW1iZXJbXSkgPT4gcmdiYShjb2xvciwgMC43NikpLFxuICAgICAgICBib3JkZXJDb2xvcjogY29sb3JzLm1hcCgoKSA9PiAnI2ZmZicpLFxuICAgICAgICBwb2ludEJhY2tncm91bmRDb2xvcjogY29sb3JzLm1hcCgoY29sb3I6IG51bWJlcltdKSA9PiByZ2JhKGNvbG9yLCAxKSksXG4gICAgICAgIHBvaW50Qm9yZGVyQ29sb3I6IGNvbG9ycy5tYXAoKCkgPT4gJyNmZmYnKSxcbiAgICAgICAgcG9pbnRIb3ZlckJhY2tncm91bmRDb2xvcjogY29sb3JzLm1hcCgoY29sb3I6IG51bWJlcltdKSA9PiByZ2JhKGNvbG9yLCAxKSksXG4gICAgICAgIHBvaW50SG92ZXJCb3JkZXJDb2xvcjogY29sb3JzLm1hcCgoY29sb3I6IG51bWJlcltdKSA9PiByZ2JhKGNvbG9yLCAxKSlcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UG9sYXJBcmVhQ29sb3JzKGNvbG9yczogbnVtYmVyW11bXSk6IENvbG9yIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9ycy5tYXAoKGNvbG9yOiBudW1iZXJbXSkgPT4gcmdiYShjb2xvciwgMC43NSkpLFxuICAgICAgICBib3JkZXJDb2xvcjogY29sb3JzLm1hcCgoY29sb3I6IG51bWJlcltdKSA9PiByZ2JhKGNvbG9yLCAxKSksXG4gICAgICAgIGhvdmVyQmFja2dyb3VuZENvbG9yOiBjb2xvcnMubWFwKChjb2xvcjogbnVtYmVyW10pID0+IHJnYmEoY29sb3IsIDEpKSxcbiAgICAgICAgaG92ZXJCb3JkZXJDb2xvcjogY29sb3JzLm1hcCgoY29sb3I6IG51bWJlcltdKSA9PiByZ2JhKGNvbG9yLCAxKSlcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmFuZG9tQ29sb3IoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiBbZ2V0UmFuZG9tSW50KDAsIDI1NSksIGdldFJhbmRvbUludCgwLCAyNTUpLCBnZXRSYW5kb21JbnQoMCwgMjU1KV07XG59XG5cblxuLyoqXG4qIEBtZXRob2QgR2VuZXJhdGUgY29sb3JzIGZvciBsaW5lfGJhciBjaGFydHNcbiogQHBhcmFtIGluZGV4IGhlIGluZGV4IG9mIHRoZSBkZWZhdWx0IGNvbG9yIGFycmF5LiBlZy4gMCwgMVxuKiBAcmV0dXJuIG51bWJlcltdXG4qIEBhdXRob3IgdmluY2VudCAyMDE5LTAxLTIyXG4qIEB2ZXJzaW9uIDAuMC4wXG4qIEBleGFtcGxlXG4qIEBsb2cgMS4gdmluY2VudCwyMDE5LTAxLTIyLGRvbmVcbiovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVDb2xvcihpbmRleDogbnVtYmVyKTogbnVtYmVyW10ge1xuICAgIHJldHVybiBEZWZhdWx0Q29sb3JzW2luZGV4XSB8fCBnZXRSYW5kb21Db2xvcigpO1xufVxuXG5cbi8qKlxuKiBAbWV0aG9kIEdlbmVyYXRlIGNvbG9ycyBmb3IgcGllfGRvdWdobnV0IGNoYXJ0c1xuKiBAcGFyYW0gY291bnQgTGVuZ3RoIG9mIGRhdGEuIGVnLiBkYXRhc2V0cy5kYXRhLmxlbmd0aFxuKiBAcmV0dXJuIG51bWJlcltdW11cbiogQGF1dGhvciB2aW5jZW50IDIwMTktMDEtMjJcbiogQHZlcnNpb24gMC4wLjBcbiogQGV4YW1wbGVcbiogQGxvZyAxLiB2aW5jZW50LDIwMTktMDEtMjIsZG9uZVxuKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUNvbG9ycyhjb3VudDogbnVtYmVyKTogbnVtYmVyW11bXSB7XG4gICAgY29uc3QgY29sb3JzQXJyOiBudW1iZXJbXVtdID0gbmV3IEFycmF5KGNvdW50KTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgY29sb3JzQXJyW2ldID0gRGVmYXVsdENvbG9yc1tpXSB8fCBnZXRSYW5kb21Db2xvcigpO1xuICAgIH1cbiAgICByZXR1cm4gY29sb3JzQXJyO1xufVxuXG5cbi8qKlxuKiBAbWV0aG9kIEdlbmVyYXRlIGNvbG9ycyBieSBjaGFydCB0eXBlXG4qIEBwYXJhbSBjaGFydFR5cGUgVGhlIHR5cGUgb2YgY2hhcnQgeW91IGFyZSB1c2luZy4gZWcuIGxpbmUsYmFyXG4qIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGRlZmF1bHQgY29sb3IgYXJyYXkuIGVnLiBEZWZhdWx0Q29sb3JzW2luZGV4XVxuKiBAcGFyYW0gY291bnQgTGVuZ3RoIG9mIGRhdGEuIGVnLiBkYXRhc2V0cy5kYXRhLmxlbmd0aFxuKiBAcmV0dXJuIENvbG9yIG9yIG51bWJlcltdXG4qIEBhdXRob3IgdmluY2VudCAyMDE5LTAxLTIyXG4qIEB2ZXJzaW9uIDAuMC4wXG4qIEBleGFtcGxlXG4qIEBsb2cgMS4gdmluY2VudCwyMDE5LTAxLTIyLGRvbmVcbiovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29sb3JzKGNoYXJ0VHlwZTogc3RyaW5nLCBpbmRleDogbnVtYmVyLCBjb3VudDogbnVtYmVyKTogQ29sb3IgfCBudW1iZXJbXSB7XG4gICAgaWYgKGNoYXJ0VHlwZSA9PT0gJ3BpZScgfHxcbiAgICAgICAgY2hhcnRUeXBlID09PSAnZG91Z2hudXQnIHx8XG4gICAgICAgIGNoYXJ0VHlwZSA9PT0gJ2J1YmJsZScgfHxcbiAgICAgICAgY2hhcnRUeXBlID09PSAnc2NhdHRlcicpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdFBpZUNvbG9ycyhnZW5lcmF0ZUNvbG9ycyhjb3VudCkpO1xuICAgIH1cblxuICAgIGlmIChjaGFydFR5cGUgPT09ICdwb2xhckFyZWEnKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXRQb2xhckFyZWFDb2xvcnMoZ2VuZXJhdGVDb2xvcnMoY291bnQpKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhcnRUeXBlID09PSAnbGluZScgfHwgY2hhcnRUeXBlID09PSAncmFkYXInKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXRMaW5lQ29sb3IoZ2VuZXJhdGVDb2xvcihpbmRleCkpO1xuICAgIH1cblxuICAgIGlmIChjaGFydFR5cGUgPT09ICdiYXInIHx8IGNoYXJ0VHlwZSA9PT0gJ2hvcml6b250YWxCYXInKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXRCYXJDb2xvcihnZW5lcmF0ZUNvbG9yKGluZGV4KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdlbmVyYXRlQ29sb3IoaW5kZXgpO1xufVxuIl19