UNPKG

@pavankalyan.c/quiz

Version:

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 11.1.2.

273 lines (269 loc) 20.3 kB
import { Component, Input, Output, EventEmitter } from '@angular/core'; export class QuizComponent { constructor() { this.answerData = new EventEmitter(); this.currentQuestionIndex = 0; this.answers = {}; this.answeredAll = false; } ngOnInit() { this.currentQuestion = this.questionData[0]; } selectQuestion(id) { this.currentQuestionIndex = id; this.currentQuestion = this.questionData[id]; } goToNextQuestion() { if (this.currentQuestionIndex === this.questionData.length - 1) { return; } this.currentQuestionIndex++; this.currentQuestion = this.questionData[this.currentQuestionIndex]; } saveAnswer(qid, aid) { this.answers[qid] = aid; this.goToNextQuestion(); if (Object.keys(this.answers).length === this.questionData.length) { this.answeredAll = true; } } submitAnswers() { this.answerData.emit(this.answers); } } QuizComponent.decorators = [ { type: Component, args: [{ selector: 'lib-quiz', template: ` <div class="root-div"> <div class="quiz"> <div class="divLast d-flex justify-content-between"> <div *ngFor="let question of questionData; let i = index"> <div *ngIf="i == 0"> <div class="left-end col-12" (click)="selectQuestion(i)"> <div class="col-3 le"></div> <div class="dot col-6" [class.attempted]="answers[question.questionId] != null" [class]=" currentQuestion.questionId == question.questionId ? 'selected' : '' " > {{ i + 1 }} </div> <div class="col-3"></div> </div> </div> <div *ngIf="i == questionData.length - 1"> <div class="right-end col-12" (click)="selectQuestion(i)"> <div class="col-3"></div> <div class="dot col-6" [class.attempted]="answers[question.questionId] != null" [class]=" currentQuestion.questionId == question.questionId ? 'selected' : '' " > {{ i + 1 }} </div> <div class="col-3 re"></div> </div> </div> <div *ngIf="i != 0 && i != questionData.length - 1"> <div class="dot-outer" (click)="selectQuestion(i)"> <div class="dot" [class.attempted]="answers[question.questionId] != null" [class]=" currentQuestion.questionId == question.questionId ? 'selected' : '' " > {{ i + 1 }} </div> </div> </div> </div> </div> <div class="question"> <div class="mt-4"> {{ currentQuestionIndex + 1 }}. {{ currentQuestion.questionText }} </div> <div class="options mt-4"> <div class="mx-2 my-2 option p-3 mb-5" *ngFor="let option of currentQuestion.options" (click)="saveAnswer(currentQuestion.questionId, option.optionId)" [class]=" answers[currentQuestion.questionId] === option.optionId ? 'selectedOption' : '' " > <span>{{ option.optionText }}</span> </div> </div> </div> </div> <div class="submit d-flex justify-content-center"> <button [disabled]="!answeredAll" (click)="submitAnswers()" class="btnSubmit btn btn-lg shadow-none" > Submit </button> </div> </div> `, styles: [` .divLast { height: 60px; border-bottom: 3px solid #cecece; margin-left: 10%; margin-right: 10%; } .dot:hover { height: 25px; width: 25px; position: relative; top: 45px; background-color: rgb(41, 212, 41); font-size: 18px; text-align: center; font-weight: 700; } .attempted { background-color: rgb(41, 212, 41) !important; } .dot-outer { width: 30px; display: flex; justify-content: center; font-size: 18px; text-align: center; font-weight: 700; } .dot { position: relative; cursor: pointer; top: 51px; height: 14px; width: 14px; background-color: #bbb; border-radius: 50%; display: inline-block; color: white; font-size: 0px; } .left-end { width: 30px; display: flex; justify-content: center; } .right-end { width: 30px; display: flex; justify-content: center; } .selected { height: 25px; width: 25px; position: relative; top: 45px; background-color: rgb(41, 212, 41); font-size: 18px; text-align: center; font-weight: 700; } .question { flex-direction: column; display: flex; margin-left: 10%; margin-right: 10%; } .options { display: flex; flex-flow: wrap; flex-direction: row; } .option { background-color: rgb(255, 255, 255); z-index: 0; width: 40%; border-radius: 10px; box-shadow: 0 14px 21px rgba(0, 0, 0, 0.25), 0 0px 1px rgba(0, 0, 0, 0.22); cursor: pointer; } .option:hover { transform: scale(1.05); transition: all 0.2s ease-out; //animation: 1s ease-out 0s 1 normal none running fadeIn; box-shadow: 0 2.8px 2.2px rgba(0, 0, 0, 0.034), 0 6.7px 5.3px rgba(0, 0, 0, 0.048), 0 12.5px 10px rgba(0, 0, 0, 0.06), 0 22.3px 17.9px rgba(0, 0, 0, 0.072), 0 41.8px 33.4px rgba(0, 0, 0, 0.086), 0 25px 20px rgba(0, 0, 0, 0.12); background-color: rgb(41, 212, 41); color: white; } .quiz { background-color: rgb(250, 250, 250); height: 90%; overflow: auto; } @media only screen and (max-width: 500px) { .options { flex-direction: column; } .option { width: 100%; } .divLast { display: none !important; } } .submit { width: 100%; height: 10%; } .btnSubmit { height: 50px; margin: auto; background-color: rgb(41, 212, 41); color: white; } .btn:focus, .btn:active { outline: none !important; box-shadow: none !important; } .selectedOption { background-color: rgb(41, 212, 41); color: white; transform: scale(1.025); } .root-div { height: 100vh; font-family: 'Trebuchet MS', sans-serif; } .re, .le { background-color: #fafafa; position: relative; top: 51px; } `] },] } ]; QuizComponent.ctorParameters = () => []; QuizComponent.propDecorators = { questionData: [{ type: Input }], answerData: [{ type: Output }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpei5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9xdWl6L3NyYy9saWIvcXVpei5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQTRPL0UsTUFBTSxPQUFPLGFBQWE7SUFheEI7UUFWVSxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQU0sQ0FBQztRQUU5Qyx5QkFBb0IsR0FBRyxDQUFDLENBQUM7UUFDekIsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLGdCQUFXLEdBQVksS0FBSyxDQUFDO0lBTWQsQ0FBQztJQUVoQixRQUFRO1FBQ04sSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxjQUFjLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDOUQsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxVQUFVLENBQUMsR0FBRyxFQUFFLEdBQUc7UUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFeEIsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUU7WUFDakUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7U0FDekI7SUFDSCxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNyQyxDQUFDOzs7WUF0UkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxVQUFVO2dCQUNwQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVGVDt5QkFFQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0E0SUM7YUFFSjs7OzsyQkFFRSxLQUFLO3lCQUVMLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gJy4vcXVlc3Rpb24ubW9kZWwnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXF1aXonLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJyb290LWRpdlwiPlxuICAgICAgPGRpdiBjbGFzcz1cInF1aXpcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRpdkxhc3QgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcXVlc3Rpb24gb2YgcXVlc3Rpb25EYXRhOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaSA9PSAwXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0LWVuZCBjb2wtMTJcIiAoY2xpY2spPVwic2VsZWN0UXVlc3Rpb24oaSlcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTMgbGVcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImRvdCBjb2wtNlwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuYXR0ZW1wdGVkXT1cImFuc3dlcnNbcXVlc3Rpb24ucXVlc3Rpb25JZF0gIT0gbnVsbFwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRRdWVzdGlvbi5xdWVzdGlvbklkID09IHF1ZXN0aW9uLnF1ZXN0aW9uSWRcbiAgICAgICAgICAgICAgICAgICAgICA/ICdzZWxlY3RlZCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IGkgKyAxIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaSA9PSBxdWVzdGlvbkRhdGEubGVuZ3RoIC0gMVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmlnaHQtZW5kIGNvbC0xMlwiIChjbGljayk9XCJzZWxlY3RRdWVzdGlvbihpKVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZG90IGNvbC02XCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5hdHRlbXB0ZWRdPVwiYW5zd2Vyc1txdWVzdGlvbi5xdWVzdGlvbklkXSAhPSBudWxsXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFF1ZXN0aW9uLnF1ZXN0aW9uSWQgPT0gcXVlc3Rpb24ucXVlc3Rpb25JZFxuICAgICAgICAgICAgICAgICAgICAgID8gJ3NlbGVjdGVkJ1xuICAgICAgICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgaSArIDEgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTMgcmVcIj48L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpICE9IDAgJiYgaSAhPSBxdWVzdGlvbkRhdGEubGVuZ3RoIC0gMVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG90LW91dGVyXCIgKGNsaWNrKT1cInNlbGVjdFF1ZXN0aW9uKGkpXCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkb3RcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmF0dGVtcHRlZF09XCJhbnN3ZXJzW3F1ZXN0aW9uLnF1ZXN0aW9uSWRdICE9IG51bGxcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UXVlc3Rpb24ucXVlc3Rpb25JZCA9PSBxdWVzdGlvbi5xdWVzdGlvbklkXG4gICAgICAgICAgICAgICAgICAgICAgPyAnc2VsZWN0ZWQnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyBpICsgMSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwicXVlc3Rpb25cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxuICAgICAgICAgICAge3sgY3VycmVudFF1ZXN0aW9uSW5kZXggKyAxIH19LiB7eyBjdXJyZW50UXVlc3Rpb24ucXVlc3Rpb25UZXh0IH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbnMgbXQtNFwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cIm14LTIgbXktMiBvcHRpb24gcC0zIG1iLTVcIlxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGN1cnJlbnRRdWVzdGlvbi5vcHRpb25zXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVBbnN3ZXIoY3VycmVudFF1ZXN0aW9uLnF1ZXN0aW9uSWQsIG9wdGlvbi5vcHRpb25JZClcIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgYW5zd2Vyc1tjdXJyZW50UXVlc3Rpb24ucXVlc3Rpb25JZF0gPT09IG9wdGlvbi5vcHRpb25JZFxuICAgICAgICAgICAgICAgICAgPyAnc2VsZWN0ZWRPcHRpb24nXG4gICAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IG9wdGlvbi5vcHRpb25UZXh0IH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwic3VibWl0IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIWFuc3dlcmVkQWxsXCJcbiAgICAgICAgICAoY2xpY2spPVwic3VibWl0QW5zd2VycygpXCJcbiAgICAgICAgICBjbGFzcz1cImJ0blN1Ym1pdCBidG4gYnRuLWxnIHNoYWRvdy1ub25lXCJcbiAgICAgICAgPlxuICAgICAgICAgIFN1Ym1pdFxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICAuZGl2TGFzdCB7XG4gICAgICAgIGhlaWdodDogNjBweDtcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogM3B4IHNvbGlkICNjZWNlY2U7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAxMCU7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMTAlO1xuICAgICAgfVxuICAgICAgLmRvdDpob3ZlciB7XG4gICAgICAgIGhlaWdodDogMjVweDtcbiAgICAgICAgd2lkdGg6IDI1cHg7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgdG9wOiA0NXB4O1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoNDEsIDIxMiwgNDEpO1xuICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIH1cbiAgICAgIC5hdHRlbXB0ZWQge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoNDEsIDIxMiwgNDEpICFpbXBvcnRhbnQ7XG4gICAgICB9XG4gICAgICAuZG90LW91dGVyIHtcbiAgICAgICAgd2lkdGg6IDMwcHg7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIH1cbiAgICAgIC5kb3Qge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgdG9wOiA1MXB4O1xuICAgICAgICBoZWlnaHQ6IDE0cHg7XG4gICAgICAgIHdpZHRoOiAxNHB4O1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmJiO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgICBmb250LXNpemU6IDBweDtcbiAgICAgIH1cbiAgICAgIC5sZWZ0LWVuZCB7XG4gICAgICAgIHdpZHRoOiAzMHB4O1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIH1cbiAgICAgIC5yaWdodC1lbmQge1xuICAgICAgICB3aWR0aDogMzBweDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICB9XG4gICAgICAuc2VsZWN0ZWQge1xuICAgICAgICBoZWlnaHQ6IDI1cHg7XG4gICAgICAgIHdpZHRoOiAyNXB4O1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHRvcDogNDVweDtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDQxLCAyMTIsIDQxKTtcbiAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICB9XG4gICAgICAucXVlc3Rpb24ge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBtYXJnaW4tbGVmdDogMTAlO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwJTtcbiAgICAgIH1cbiAgICAgIC5vcHRpb25zIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1mbG93OiB3cmFwO1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgfVxuXG4gICAgICAub3B0aW9uIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMjU1LCAyNTUpO1xuICAgICAgICB6LWluZGV4OiAwO1xuICAgICAgICB3aWR0aDogNDAlO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICAgICAgICBib3gtc2hhZG93OiAwIDE0cHggMjFweCByZ2JhKDAsIDAsIDAsIDAuMjUpLFxuICAgICAgICAgIDAgMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMjIpO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB9XG4gICAgICAub3B0aW9uOmhvdmVyIHtcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjA1KTtcblxuICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlLW91dDtcbiAgICAgICAgLy9hbmltYXRpb246IDFzIGVhc2Utb3V0IDBzIDEgbm9ybWFsIG5vbmUgcnVubmluZyBmYWRlSW47XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMi44cHggMi4ycHggcmdiYSgwLCAwLCAwLCAwLjAzNCksXG4gICAgICAgICAgMCA2LjdweCA1LjNweCByZ2JhKDAsIDAsIDAsIDAuMDQ4KSwgMCAxMi41cHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMDYpLFxuICAgICAgICAgIDAgMjIuM3B4IDE3LjlweCByZ2JhKDAsIDAsIDAsIDAuMDcyKSxcbiAgICAgICAgICAwIDQxLjhweCAzMy40cHggcmdiYSgwLCAwLCAwLCAwLjA4NiksIDAgMjVweCAyMHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYig0MSwgMjEyLCA0MSk7XG4gICAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgIH1cbiAgICAgIC5xdWl6IHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1MCwgMjUwLCAyNTApO1xuICAgICAgICBoZWlnaHQ6IDkwJTtcbiAgICAgICAgb3ZlcmZsb3c6IGF1dG87XG4gICAgICB9XG4gICAgICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDUwMHB4KSB7XG4gICAgICAgIC5vcHRpb25zIHtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICB9XG4gICAgICAgIC5vcHRpb24ge1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB9XG4gICAgICAgIC5kaXZMYXN0IHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC5zdWJtaXQge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiAxMCU7XG4gICAgICB9XG4gICAgICAuYnRuU3VibWl0IHtcbiAgICAgICAgaGVpZ2h0OiA1MHB4O1xuICAgICAgICBtYXJnaW46IGF1dG87XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYig0MSwgMjEyLCA0MSk7XG4gICAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgIH1cblxuICAgICAgLmJ0bjpmb2N1cyxcbiAgICAgIC5idG46YWN0aXZlIHtcbiAgICAgICAgb3V0bGluZTogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XG4gICAgICB9XG4gICAgICAuc2VsZWN0ZWRPcHRpb24ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoNDEsIDIxMiwgNDEpO1xuICAgICAgICBjb2xvcjogd2hpdGU7XG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wMjUpO1xuICAgICAgfVxuICAgICAgLnJvb3QtZGl2IHtcbiAgICAgICAgaGVpZ2h0OiAxMDB2aDtcbiAgICAgICAgZm9udC1mYW1pbHk6ICdUcmVidWNoZXQgTVMnLCBzYW5zLXNlcmlmO1xuICAgICAgfVxuICAgICAgLnJlLFxuICAgICAgLmxlIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB0b3A6IDUxcHg7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgUXVpekNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHF1ZXN0aW9uRGF0YTogUXVlc3Rpb25bXTtcblxuICBAT3V0cHV0KCkgYW5zd2VyRGF0YSA9IG5ldyBFdmVudEVtaXR0ZXI8e30+KCk7XG5cbiAgY3VycmVudFF1ZXN0aW9uSW5kZXggPSAwO1xuICBhbnN3ZXJzID0ge307XG4gIGFuc3dlcmVkQWxsOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy9jdXJyZW50UXVlc3Rpb25JZCA9ICcxJztcblxuICBjdXJyZW50UXVlc3Rpb246IFF1ZXN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbiA9IHRoaXMucXVlc3Rpb25EYXRhWzBdO1xuICB9XG5cbiAgc2VsZWN0UXVlc3Rpb24oaWQpIHtcbiAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbkluZGV4ID0gaWQ7XG4gICAgdGhpcy5jdXJyZW50UXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uRGF0YVtpZF07XG4gIH1cblxuICBnb1RvTmV4dFF1ZXN0aW9uKCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRRdWVzdGlvbkluZGV4ID09PSB0aGlzLnF1ZXN0aW9uRGF0YS5sZW5ndGggLSAxKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UXVlc3Rpb25JbmRleCsrO1xuICAgIHRoaXMuY3VycmVudFF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbkRhdGFbdGhpcy5jdXJyZW50UXVlc3Rpb25JbmRleF07XG4gIH1cblxuICBzYXZlQW5zd2VyKHFpZCwgYWlkKSB7XG4gICAgdGhpcy5hbnN3ZXJzW3FpZF0gPSBhaWQ7XG4gICAgdGhpcy5nb1RvTmV4dFF1ZXN0aW9uKCk7XG5cbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy5hbnN3ZXJzKS5sZW5ndGggPT09IHRoaXMucXVlc3Rpb25EYXRhLmxlbmd0aCkge1xuICAgICAgdGhpcy5hbnN3ZXJlZEFsbCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgc3VibWl0QW5zd2VycygpIHtcbiAgICB0aGlzLmFuc3dlckRhdGEuZW1pdCh0aGlzLmFuc3dlcnMpO1xuICB9XG59XG4iXX0=