-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy path1585.70509e1a.iframe.bundle.js
2 lines (2 loc) · 99.5 KB
/
1585.70509e1a.iframe.bundle.js
1
2
"use strict";(self.webpackChunkblockly_mooc=self.webpackChunkblockly_mooc||[]).push([[1585],{"./src/templates/manageStudents/manageStudentsRedux.js":(__unused_webpack_module,exports,__webpack_require__)=>{Object.defineProperty(exports,"__esModule",{value:!0}),exports.convertStudentServerData=exports.convertStudentDataToArray=exports.cancelStudentTransfer=exports.cancelEditingStudent=exports.bulkSet=exports.blankStudentTransferStatus=exports.blankStudentTransfer=exports.addStudentsSuccess=exports.addStudentsFull=exports.addStudentsFailure=exports.addStudents=exports.addMultipleRows=exports.addMultipleAddRows=exports.TransferType=exports.TransferStatus=exports.RowType=exports.PrintLoginCardsButtonMetricsCategory=exports.ParentLetterButtonMetricsCategory=exports.AddStatus=void 0,exports.default=function manageStudents(){var state=arguments.length>0&&void 0!==arguments[0]?arguments[0]:initialState,action=arguments.length>1?arguments[1]:void 0;if(action.type===SET_LOGIN_TYPE){var addRowInitialization={};return action.loginType!==_sharedConstants.SectionLoginType.word&&action.loginType!==_sharedConstants.SectionLoginType.picture||(addRowInitialization={studentData:_defineProperty({},addRowId,_objectSpread(_objectSpread({},blankAddRow),{},{loginType:action.loginType})),editingData:_defineProperty({},addRowId,_objectSpread(_objectSpread({},blankAddRow),{},{loginType:action.loginType}))}),_objectSpread(_objectSpread({},state),{},{loginType:action.loginType},addRowInitialization)}if(action.type===SET_STUDENTS){var studentData=_objectSpread({},action.studentData);return state.loginType!==_sharedConstants.SectionLoginType.word&&state.loginType!==_sharedConstants.SectionLoginType.picture||(studentData[addRowId]=_objectSpread(_objectSpread({},blankAddRow),{},{loginType:state.loginType})),_objectSpread(_objectSpread({},state),{},{studentData,addStatus:{status:null,numStudents:null},isLoadingStudents:!1})}if(action.type===SET_SECTION_INFO)return _objectSpread(_objectSpread({},state),{},{sectionId:action.sectionId});if(action.type===START_EDITING_STUDENT)return _objectSpread(_objectSpread({},state),{},{studentData:_objectSpread(_objectSpread({},state.studentData),{},_defineProperty({},action.studentId,_objectSpread(_objectSpread({},state.studentData[action.studentId]),{},{isEditing:!0}))),editingData:_objectSpread(_objectSpread({},state.editingData),{},_defineProperty({},action.studentId,_objectSpread(_objectSpread({},state.studentData[action.studentId]),{},{id:action.studentId})))});if(action.type===CANCEL_EDITING_STUDENT)return _objectSpread(_objectSpread({},state),{},{studentData:_objectSpread(_objectSpread({},state.studentData),{},_defineProperty({},action.studentId,_objectSpread(_objectSpread({},state.studentData[action.studentId]),{},{isEditing:!1}))),editingData:_lodash.default.omit(state.editingData,action.studentId)});if(action.type===START_SAVING_STUDENT)return _objectSpread(_objectSpread({},state),{},{studentData:_objectSpread(_objectSpread({},state.studentData),{},_defineProperty({},action.studentId,_objectSpread(_objectSpread({},state.studentData[action.studentId]),{},{isSaving:!0}))),editingData:_objectSpread(_objectSpread({},state.editingData),{},_defineProperty({},action.studentId,_objectSpread(_objectSpread({},state.editingData[action.studentId]),{},{isSaving:!0})))});if(action.type===SAVE_STUDENT_SUCCESS)return _objectSpread(_objectSpread({},state),{},{studentData:_objectSpread(_objectSpread({},state.studentData),{},_defineProperty({},action.studentId,_objectSpread(_objectSpread(_objectSpread({},state.studentData[action.studentId]),state.editingData[action.studentId]),{},{isEditing:!1,isSaving:!1,rowType:RowType.STUDENT}))),editingData:_lodash.default.omit(state.editingData,action.studentId)});if(action.type===ADD_STUDENT_FAILURE){for(var newState=_objectSpread(_objectSpread({},state),{},{addStatus:{status:AddStatus.FAIL,numStudents:action.numStudents}}),i=0;i<action.studentIds.length;i++)newState.studentData[action.studentIds[i]]=_objectSpread(_objectSpread({},state.studentData[action.studentIds[i]]),{},{isSaving:!1}),newState.editingData[action.studentIds[i]]=_objectSpread(_objectSpread({},state.editingData[action.studentIds[i]]),{},{isSaving:!1});return newState}if(action.type===ADD_STUDENT_FULL){for(var _newState=_objectSpread(_objectSpread({},state),{},{addStatus:_objectSpread(_objectSpread({},state.addStatus),{},{status:AddStatus.FULL,numStudents:action.numStudents,sectionCapacity:action.sectionCapacity,sectionCode:action.sectionCode,sectionStudentCount:action.sectionStudentCount})}),_i=0;_i<action.studentIds.length;_i++)_newState.studentData[action.studentIds[_i]]=_objectSpread(_objectSpread({},state.studentData[action.studentIds[_i]]),{},{isSaving:!1}),_newState.editingData[action.studentIds[_i]]=_objectSpread(_objectSpread({},state.editingData[action.studentIds[_i]]),{},{isSaving:!1});return _newState}if(action.type===ADD_STUDENT_SUCCESS){return _objectSpread(_objectSpread({},state),{},{studentData:_objectSpread(_objectSpread(_objectSpread({},_lodash.default.omit(state.studentData,action.rowIds)),action.studentData),{},_defineProperty({},addRowId,_objectSpread(_objectSpread({},blankAddRow),{},{loginType:state.loginType}))),editingData:_objectSpread(_objectSpread({},_lodash.default.omit(state.editingData,action.rowIds)),{},_defineProperty({},addRowId,_objectSpread(_objectSpread({},blankAddRow),{},{loginType:state.loginType}))),addStatus:{status:AddStatus.SUCCESS,numStudents:action.numStudents}})}if(action.type===SET_SHARING_DEFAULT){var sharingDisabled=state.editingData[action.studentId].age<13;return _objectSpread(_objectSpread({},state),{},{editingData:_objectSpread(_objectSpread({},state.editingData),{},_defineProperty({},action.studentId,_objectSpread(_objectSpread({},state.editingData[action.studentId]),{},{id:action.studentId,sharingDisabled})))})}if(action.type===EDIT_STUDENT)return _objectSpread(_objectSpread({},state),{},{editingData:_objectSpread(_objectSpread({},state.editingData),{},_defineProperty({},action.studentId,_objectSpread(_objectSpread(_objectSpread({},state.editingData[action.studentId]),action.studentData),{},{id:action.studentId})))});if(action.type===EDIT_ALL){var _newState3=_objectSpread({},state);for(var studentKey in state.studentData){var student=state.studentData[studentKey];_newState3.studentData[student.id].isEditing=!0,_newState3.editingData[student.id]=_objectSpread(_objectSpread({},_newState3.studentData[student.id]),state.editingData[student.id])}return _newState3}if(action.type===BULK_SET){var _newState4=_objectSpread({},state);for(var _studentKey in state.studentData){var _student=state.studentData[_studentKey];_newState4.studentData[_student.id].isEditing=!0,_newState4.editingData[_student.id]=_objectSpread(_objectSpread(_objectSpread({},_newState4.studentData[_student.id]),state.editingData[_student.id]),action.studentData)}return _newState4}if(action.type===UPDATE_ALL_SHARE_SETTING){var _newState5=_objectSpread({},state);for(var _studentKey2 in state.studentData){var _student2=state.studentData[_studentKey2];_newState5.editingData[_student2.id].sharingDisabled=action.disable}return _newState5}if(action.type===SET_SECRET_IMAGE)return _objectSpread(_objectSpread({},state),{},{studentData:_objectSpread(_objectSpread({},state.studentData),{},_defineProperty({},action.studentId,_objectSpread(_objectSpread({},state.studentData[action.studentId]),{},{secretPicturePath:action.image})))});if(action.type===SET_SECRET_WORDS)return _objectSpread(_objectSpread({},state),{},{studentData:_objectSpread(_objectSpread({},state.studentData),{},_defineProperty({},action.studentId,_objectSpread(_objectSpread({},state.studentData[action.studentId]),{},{secretWords:action.words})))});if(action.type===REMOVE_STUDENT){var studentId=action.studentId;if(!state.studentData[studentId])throw new Error("student does not exist");return _objectSpread(_objectSpread({},state),{},{studentData:_lodash.default.omit(state.studentData,studentId),editingData:_lodash.default.omit(state.editingData,studentId)})}if(action.type===ADD_MULTIPLE_ROWS)return _objectSpread(_objectSpread({},state),{},{studentData:_objectSpread(_objectSpread({},state.studentData),action.studentData),editingData:_objectSpread(_objectSpread({},state.editingData),action.studentData)});if(action.type===SET_SHOW_SHARING_COLUMN)return _objectSpread(_objectSpread({},state),{},{showSharingColumn:!!action.visible});if(action.type===UPDATE_STUDENT_TRANSFER)return _objectSpread(_objectSpread({},state),{},{transferData:_objectSpread(_objectSpread({},state.transferData),action.transferData),transferStatus:blankStudentTransferStatus});if(action.type===CANCEL_STUDENT_TRANSFER)return _objectSpread(_objectSpread({},state),{},{transferData:blankStudentTransfer,transferStatus:_objectSpread(_objectSpread({},state.transferStatus),{},{error:null})});if(action.type===TRANSFER_STUDENTS_SUCCESS)return _objectSpread(_objectSpread({},state),{},{transferStatus:_objectSpread(_objectSpread({},state.transferStatus),{},{status:TransferStatus.SUCCESS,type:action.transferType,numStudents:action.numStudents,sectionDisplay:action.sectionDisplay})});if(action.type===TRANSFER_STUDENTS_FULL)return _objectSpread(_objectSpread({},state),{},{transferStatus:_objectSpread(_objectSpread({},state.transferStatus),{},{status:TransferStatus.FULL,sectionCapacity:action.sectionCapacity,numStudents:action.numStudents,sectionCode:action.sectionCode,sectionStudentCount:action.sectionStudentCount,verb:action.verb})});if(action.type===TRANSFER_STUDENTS_FAILURE)return _objectSpread(_objectSpread({},state),{},{transferStatus:_objectSpread(_objectSpread({},state.transferStatus),{},{status:TransferStatus.FAIL,error:action.error})});if(action.type===TRANSFER_STUDENTS_PENDING)return _objectSpread(_objectSpread({},state),{},{transferStatus:_objectSpread(_objectSpread({},state.transferStatus),{},{status:TransferStatus.PENDING})});if(action.type===START_LOADING_STUDENTS)return _objectSpread(_objectSpread({},state),{},{isLoadingStudents:!0});if(action.type===FINISH_LOADING_STUDENTS)return _objectSpread(_objectSpread({},state),{},{isLoadingStudents:!1});return state},exports.updateStudentTransfer=exports.updateAllShareSetting=exports.transferStudentsSuccess=exports.transferStudentsPending=exports.transferStudentsFull=exports.transferStudentsFailure=exports.transferStudents=exports.startSavingStudent=exports.startLoadingStudents=exports.startEditingStudent=exports.setStudents=exports.setShowSharingColumn=exports.setSharingDefault=exports.setSectionInfo=exports.setSecretWords=exports.setSecretImage=exports.setLoginType=exports.selectAtRiskAgeGatedDate=exports.saveStudentSuccess=exports.saveStudent=exports.saveAllStudents=exports.removeStudent=exports.loadSectionStudentData=exports.handleShareSetting=exports.getStudentCount=exports.finishLoadingStudents=exports.filterAgeGatedStudents=exports.editStudent=exports.editAll=void 0;var _jquery=_interopRequireDefault(__webpack_require__("./node_modules/jquery/dist/jquery.js")),_lodash=_interopRequireDefault(__webpack_require__("./node_modules/lodash/lodash.js")),_teacherSectionsRedux=__webpack_require__("./src/templates/teacherDashboard/teacherSectionsRedux.ts"),_teacherSectionsReduxSelectors=__webpack_require__("./src/templates/teacherDashboard/teacherSectionsReduxSelectors.js"),_sharedConstants=__webpack_require__("./generated-scripts/sharedConstants.ts");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function _typeof(o){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach((function(r){_defineProperty(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function _defineProperty(e,r,t){return(r=function _toPropertyKey(t){var i=function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}(t,"string");return"symbol"==_typeof(i)?i:i+""}(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}exports.ParentLetterButtonMetricsCategory={ABOVE_TABLE:"above-table",BELOW_TABLE:"below-table"},exports.PrintLoginCardsButtonMetricsCategory={MANAGE_STUDENTS:"manage-students",LOGIN_INFO:"section-login-info"};var AddStatus=exports.AddStatus={SUCCESS:"success",FAIL:"fail",FULL:"full"},RowType=exports.RowType={ADD:"addRow",NEW_STUDENT:"newStudentRow",STUDENT:"studentRow"},TransferStatus=exports.TransferStatus={SUCCESS:"success",FAIL:"fail",FULL:"full",PENDING:"pending"},TransferType=exports.TransferType={MOVE_STUDENTS:"moveStudents",COPY_STUDENTS:"copyStudents"},blankStudentTransfer=exports.blankStudentTransfer={studentIds:[],sectionId:null,otherTeacher:!1,otherTeacherSection:"",copyStudents:!0},blankStudentTransferStatus=exports.blankStudentTransferStatus={status:null,type:null,error:null,numStudents:0,sectionDisplay:""},addRowId=0,addRowIdCounter=-1,blankAddRow={id:addRowId,name:"",age:"",gender:"",username:"",loginType:"",sharingDisabled:!0,isEditing:!0,rowType:RowType.ADD,usState:null},blankNewStudentRow={id:addRowId,name:"",age:"",gender:"",username:"",loginType:"",sharingDisabled:!0,isEditing:!0,rowType:RowType.NEW_STUDENT,usState:null},initialState={loginType:"",sectionId:null,studentData:{},editingData:{},showSharingColumn:!1,addStatus:{status:null,numStudents:null},transferData:_objectSpread({},blankStudentTransfer),transferStatus:_objectSpread({},blankStudentTransferStatus),isLoadingStudents:!0,usState:null},SET_LOGIN_TYPE="manageStudents/SET_LOGIN_TYPE",SET_STUDENTS="manageStudents/SET_STUDENTS",SET_SECTION_INFO="manageStudents/SET_SECTION_INFO",START_EDITING_STUDENT="manageStudents/START_EDITING_STUDENT",CANCEL_EDITING_STUDENT="manageStudents/CANCEL_EDITING_STUDENT",REMOVE_STUDENT="manageStudents/REMOVE_STUDENT",SET_SECRET_IMAGE="manageStudents/SET_SECRET_IMAGE",SET_SECRET_WORDS="manageStudents/SET_SECRET_WORDS",EDIT_STUDENT="manageStudents/EDIT_STUDENT",START_SAVING_STUDENT="manageStudents/START_SAVING_STUDENT",SAVE_STUDENT_SUCCESS="manageStudents/SAVE_STUDENT_SUCCESS",ADD_STUDENT_SUCCESS="manageStudents/ADD_STUDENT_SUCCESS",ADD_STUDENT_FAILURE="manageStudents/ADD_STUDENT_FAILURE",ADD_STUDENT_FULL="manageStudents/ADD_STUDENT_FULL",ADD_MULTIPLE_ROWS="manageStudents/ADD_MULTIPLE_ROWS",SET_SHOW_SHARING_COLUMN="manageStudents/SET_SHOW_SHARING_COLUMN",EDIT_ALL="manageStudents/EDIT_ALL",BULK_SET="manageStudents/BULK_SET",UPDATE_ALL_SHARE_SETTING="manageStudents/UPDATE_ALL_SHARE_SETTING",SET_SHARING_DEFAULT="manageStudents/SET_SHARING_DEFAULT",UPDATE_STUDENT_TRANSFER="manageStudents/UPDATE_STUDENT_TRANSFER",CANCEL_STUDENT_TRANSFER="manageStudents/CANCEL_STUDENT_TRANSFER",TRANSFER_STUDENTS_SUCCESS="manageStudents/TRANSFER_STUDENTS_SUCCESS",TRANSFER_STUDENTS_FAILURE="manageStudents/TRANSFER_STUDENTS_FAILURE",TRANSFER_STUDENTS_PENDING="manageStudents/TRANSFER_STUDENTS_PENDING",TRANSFER_STUDENTS_FULL="manageStudents/TRANSFER_STUDENTS_FULL",START_LOADING_STUDENTS="manageStudents/START_LOADING_STUDENTS",FINISH_LOADING_STUDENTS="manageStudents/FINISH_LOADING_STUDENTS",startLoadingStudents=exports.startLoadingStudents=function startLoadingStudents(){return{type:START_LOADING_STUDENTS}},finishLoadingStudents=exports.finishLoadingStudents=function finishLoadingStudents(){return{type:FINISH_LOADING_STUDENTS}},setStudents=(exports.setLoginType=function setLoginType(loginType){return{type:SET_LOGIN_TYPE,loginType}},exports.setStudents=function setStudents(studentData){return{type:SET_STUDENTS,studentData}}),setSectionInfo=exports.setSectionInfo=function setSectionInfo(sectionId){return{type:SET_SECTION_INFO,sectionId}},removeStudent=(exports.startEditingStudent=function startEditingStudent(studentId){return{type:START_EDITING_STUDENT,studentId}},exports.cancelEditingStudent=function cancelEditingStudent(studentId){return{type:CANCEL_EDITING_STUDENT,studentId}},exports.removeStudent=function removeStudent(studentId){return{type:REMOVE_STUDENT,studentId}}),editAll=(exports.setSecretImage=function setSecretImage(studentId,image){return{type:SET_SECRET_IMAGE,studentId,image}},exports.setSecretWords=function setSecretWords(studentId,words){return{type:SET_SECRET_WORDS,studentId,words}},exports.editStudent=function editStudent(studentId,studentData){return{type:EDIT_STUDENT,studentId,studentData}},exports.setSharingDefault=function setSharingDefault(studentId){return{type:SET_SHARING_DEFAULT,studentId}},exports.editAll=function editAll(){return{type:EDIT_ALL}}),updateAllShareSetting=(exports.bulkSet=function bulkSet(studentData){return{type:BULK_SET,studentData}},exports.updateAllShareSetting=function updateAllShareSetting(disable){return{type:UPDATE_ALL_SHARE_SETTING,disable}}),startSavingStudent=exports.startSavingStudent=function startSavingStudent(studentId){return{type:START_SAVING_STUDENT,studentId}},saveStudentSuccess=exports.saveStudentSuccess=function saveStudentSuccess(studentId){return{type:SAVE_STUDENT_SUCCESS,studentId}},transferStudentsSuccess=(exports.updateStudentTransfer=function updateStudentTransfer(transferData){return{type:UPDATE_STUDENT_TRANSFER,transferData}},exports.cancelStudentTransfer=function cancelStudentTransfer(){return{type:CANCEL_STUDENT_TRANSFER}},exports.transferStudentsSuccess=function transferStudentsSuccess(transferType,numStudents,sectionDisplay){return{type:TRANSFER_STUDENTS_SUCCESS,transferType,numStudents,sectionDisplay}}),transferStudentsFailure=exports.transferStudentsFailure=function transferStudentsFailure(error){return{type:TRANSFER_STUDENTS_FAILURE,error}},transferStudentsPending=exports.transferStudentsPending=function transferStudentsPending(){return{type:TRANSFER_STUDENTS_PENDING}},transferStudentsFull=exports.transferStudentsFull=function transferStudentsFull(_ref,copy){var sectionCapacity=_ref.sectionCapacity,numStudents=_ref.numStudents,sectionCode=_ref.sectionCode,sectionStudentCount=_ref.sectionStudentCount;return{type:TRANSFER_STUDENTS_FULL,sectionCapacity,numStudents,sectionStudentCount,sectionCode,verb:copy?"copy":"move"}},addStudentsSuccess=exports.addStudentsSuccess=function addStudentsSuccess(numStudents,rowIds,studentData){return{type:ADD_STUDENT_SUCCESS,numStudents,rowIds,studentData}},addStudentsFailure=exports.addStudentsFailure=function addStudentsFailure(numStudents,error,studentIds){return{type:ADD_STUDENT_FAILURE,numStudents,error,studentIds}},addStudentsFull=exports.addStudentsFull=function addStudentsFull(_ref2,studentIds){var sectionCapacity=_ref2.sectionCapacity,numStudents=_ref2.numStudents,sectionCode=_ref2.sectionCode,sectionStudentCount=_ref2.sectionStudentCount;return{type:ADD_STUDENT_FULL,sectionCapacity,numStudents,sectionStudentCount,sectionCode,studentIds}},addMultipleRows=exports.addMultipleRows=function addMultipleRows(studentData){return{type:ADD_MULTIPLE_ROWS,studentData}},saveStudent=(exports.setShowSharingColumn=function setShowSharingColumn(visible){return{type:SET_SHOW_SHARING_COLUMN,visible}},exports.handleShareSetting=function handleShareSetting(disable){return function(dispatch,getState){dispatch(editAll()),dispatch(updateAllShareSetting(disable))}},exports.saveStudent=function saveStudent(studentId){return function(dispatch,getState){var state=getState().manageStudents,sectionId=getState().teacherSections.selectedSectionId;dispatch(startSavingStudent(studentId)),updateStudentOnServer(state.editingData[studentId],sectionId,(function(error,data){error&&console.error(error),dispatch(saveStudentSuccess(studentId)),dispatch((0,_teacherSectionsRedux.asyncLoadSectionData)(sectionId))}))}}),addStudents=(exports.saveAllStudents=function saveAllStudents(){return function(dispatch,getState){var state=getState().manageStudents;Object.values(state.editingData).filter((function(student){return student.rowType===RowType.STUDENT})).forEach((function(student){""!==student.name&&dispatch(saveStudent(student.id))}));var newStudentsToAdd=Object.values(state.editingData).filter((function(student){return student.rowType===RowType.NEW_STUDENT&&!student.isSaving})).map((function(student){return student.id}));newStudentsToAdd.length>0&&dispatch(addStudents(newStudentsToAdd))}},exports.addStudents=function addStudents(studentIds){return function(dispatch,getState){for(var state=getState().manageStudents,sectionId=getState().teacherSections.selectedSectionId,numStudentsToAdd=studentIds.length,i=0;i<studentIds.length;i++)dispatch(startSavingStudent(studentIds[i]));var filteredData=Object.values(state.editingData).filter((function(student){return studentIds.includes(student.id)}));addStudentOnServer(filteredData,sectionId,(function(error,data){error&&data&&data.result===AddStatus.FULL?dispatch(addStudentsFull(data,studentIds)):error?(dispatch(addStudentsFailure(numStudentsToAdd,error,studentIds)),console.error(error)):(dispatch(addStudentsSuccess(numStudentsToAdd,studentIds,convertStudentServerData(data,state.loginType,sectionId))),dispatch((0,_teacherSectionsRedux.asyncLoadSectionData)(sectionId)))}))}});exports.addMultipleAddRows=function addMultipleAddRows(studentDataArray){return function(dispatch,getState){var studentData=studentDataArray.filter((function(data){return data.name})).reduce((function(accumulator,data){var newId=addRowIdCounter--;return _objectSpread(_objectSpread({},accumulator),{},_defineProperty({},newId,_objectSpread(_objectSpread({},blankNewStudentRow),{},{name:data.name,familyName:data.familyName,id:newId})))}),{});dispatch(addMultipleRows(studentData))}},exports.transferStudents=function transferStudents(onComplete){return function(dispatch,getState){dispatch(transferStudentsPending());var newSectionCode,state=getState(),currentSectionCode=(0,_teacherSectionsReduxSelectors.sectionCode)(state,state.teacherSections.selectedSectionId),_state$manageStudents=state.manageStudents.transferData,studentIds=_state$manageStudents.studentIds,newSectionId=_state$manageStudents.sectionId,otherTeacher=_state$manageStudents.otherTeacher,otherTeacherSection=_state$manageStudents.otherTeacherSection,copyStudents=_state$manageStudents.copyStudents;newSectionCode=otherTeacher&&otherTeacherSection?otherTeacherSection:(0,_teacherSectionsReduxSelectors.sectionCode)(state,newSectionId),transferStudentsOnServer(studentIds,currentSectionCode,newSectionCode,copyStudents,(function(error,data){if(error&&data&&data.result===TransferStatus.FULL)dispatch(transferStudentsFull(data,copyStudents)),onComplete();else if(error)dispatch(transferStudentsFailure(data&&data.error||error));else{copyStudents&&otherTeacher||studentIds.forEach((function(id){dispatch(removeStudent(id))}));var transferType=copyStudents?TransferType.COPY_STUDENTS:TransferType.MOVE_STUDENTS,sectionDisplay=otherTeacher?otherTeacherSection:(0,_teacherSectionsReduxSelectors.sectionName)(state,newSectionId);dispatch(transferStudentsSuccess(transferType,studentIds.length,sectionDisplay)),onComplete(),dispatch((0,_teacherSectionsRedux.asyncLoadSectionData)(state.teacherSections.selectedSectionId))}}))}};exports.getStudentCount=function getStudentCount(state){var studentData=_objectSpread({},state.manageStudents.studentData);return delete studentData[0],Object.keys(studentData).length};var convertStudentServerData=exports.convertStudentServerData=function convertStudentServerData(studentData,loginType,sectionId){for(var studentLookup={},i=0;i<studentData.length;i++){var student=studentData[i];studentLookup[student.id]={id:student.id,name:student.name,familyName:student.family_name,username:student.username,email:student.email,age:student.age||"",gender:student.gender||"",genderTeacherInput:student.gender_teacher_input||"",secretWords:student.secret_words,secretPicturePath:student.secret_picture_path,loginType,sectionId,sharingDisabled:student.sharing_disabled,hasEverSignedIn:student.has_ever_signed_in,dependsOnThisSectionForLogin:student.depends_on_this_section_for_login,isEditing:!1,isSaving:!1,rowType:RowType.STUDENT,userType:student.user_type,atRiskAgeGatedDate:student.at_risk_age_gated_date?new Date(student.at_risk_age_gated_date):null,childAccountComplianceState:student.child_account_compliance_state,latestPermissionRequestSentAt:student.latest_permission_request_sent_at&&new Date(student.latest_permission_request_sent_at),usState:student.us_state}}return studentLookup},updateStudentOnServer=(exports.convertStudentDataToArray=function convertStudentDataToArray(studentData){return Object.values(studentData).reverse()},function updateStudentOnServer(updatedStudentInfo,sectionId,onComplete){var dataToUpdate={student:{id:updatedStudentInfo.id,name:updatedStudentInfo.name,family_name:updatedStudentInfo.familyName,age:updatedStudentInfo.age,gender:updatedStudentInfo.gender,gender_teacher_input:updatedStudentInfo.genderTeacherInput,sharing_disabled:updatedStudentInfo.sharingDisabled,us_state:updatedStudentInfo.usState}};_jquery.default.ajax({url:"/dashboardapi/sections/".concat(sectionId,"/students/").concat(dataToUpdate.student.id),method:"PATCH",type:"json",contentType:"application/json;charset=UTF-8",data:JSON.stringify(dataToUpdate)}).done((function(data){onComplete(null,data)})).fail((function(jqXhr,status){onComplete(status,null)}))}),addStudentOnServer=function addStudentOnServer(updatedStudentsInfo,sectionId,onComplete){for(var studentsToAdd=[],i=0;i<updatedStudentsInfo.length;i++)studentsToAdd[i]={editing:!0,name:updatedStudentsInfo[i].name,family_name:updatedStudentsInfo[i].familyName,age:updatedStudentsInfo[i].age,gender:updatedStudentsInfo[i].gender,gender_teacher_input:updatedStudentsInfo[i].genderTeacherInput,sharing_disabled:updatedStudentsInfo[i].sharingDisabled,us_state:updatedStudentsInfo[i].usState};var students={students:studentsToAdd};_jquery.default.ajax({url:"/dashboardapi/sections/".concat(sectionId,"/students/bulk_add"),method:"POST",contentType:"application/json;charset=UTF-8",data:JSON.stringify(students)}).done((function(data){onComplete(null,data)})).fail((function(jqXhr,status){onComplete(status,jqXhr.responseJSON||null)}))},transferStudentsOnServer=function transferStudentsOnServer(studentIds,currentSectionCode,newSectionCode,stayEnrolledInCurrentSection,onComplete){var payload={student_ids:studentIds,current_section_code:currentSectionCode,new_section_code:newSectionCode,stay_enrolled_in_current_section:stayEnrolledInCurrentSection};_jquery.default.ajax({url:"/dashboardapi/sections/transfers",method:"POST",contentType:"application/json;charset=UTF-8",data:JSON.stringify(payload)}).done((function(data){onComplete(null,data)})).fail((function(jqXhr,status){onComplete(status,jqXhr.responseJSON)}))},filterAgeGatedStudents=(exports.loadSectionStudentData=function loadSectionStudentData(sectionId){return function(dispatch,getState){var state=getState().manageStudents,oldSectionId=state.sectionId;state.sectionId!==sectionId?(dispatch(setSectionInfo(sectionId)),dispatch(startLoadingStudents()),_jquery.default.ajax({method:"GET",url:"/dashboardapi/sections/".concat(sectionId,"/students"),dataType:"json"}).done((function(studentData){var convertedStudentData=convertStudentServerData(studentData,state.loginType,sectionId);dispatch(setStudents(convertedStudentData))})).fail((function(){dispatch(setSectionInfo(oldSectionId)),dispatch(finishLoadingStudents())}))):dispatch(finishLoadingStudents())}},exports.filterAgeGatedStudents=function filterAgeGatedStudents(students){return students.filter((function(student){return student.atRiskAgeGatedDate}))});exports.selectAtRiskAgeGatedDate=function selectAtRiskAgeGatedDate(students){var _filterAgeGatedStuden;return null===(_filterAgeGatedStuden=filterAgeGatedStudents(students)[0])||void 0===_filterAgeGatedStuden?void 0:_filterAgeGatedStuden.atRiskAgeGatedDate}}}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFBL0QsTUFDSnFCLFdBQVcsS0FBTXJCLEtBQ25CLElBQ0NnRSxNQUFLLFNBQUNDLE1BQU8xTyxRQUNaOEwsV0FBVzlMLE9BQVEwTyxNQUFNSyxhQUMzQixHQUNKLEVBMENhTyx3QkF4Q3NCdEksUUFBQUEsdUJBQUcsU0FBekJ1SSx1QkFBeUJuUCxXQUNwQyxPQUFPLFNBQUNnSyxTQUFVQyxVQUNoQixJQUFNMUwsTUFBUTBMLFdBQVczTCxlQUNyQjhRLGFBQWU3USxNQUFNeUIsVUFHckJ6QixNQUFNeUIsWUFBY0EsV0FFdEJnSyxTQUFTN0IsZUFBZW5JLFlBQ3hCZ0ssU0FBU2pDLHdCQUNUNkYsUUFBQUEsUUFBRUMsS0FBSyxDQUNMRyxPQUFRLE1BQ1JGLElBQUssMEJBQUZDLE9BQTRCL04sVUFBUyxhQUN4Q3FQLFNBQVUsU0FFVGpCLE1BQUssU0FBQWhQLGFBQ0osSUFBTWtRLHFCQUF1QnBFLHlCQUMzQjlMLFlBQ0FiLE1BQU1TLFVBQ05nQixXQUVGZ0ssU0FBUy9CLFlBQVlxSCxzQkFDdkIsSUFDQ2pCLE1BQUssV0FFSnJFLFNBQVM3QixlQUFlaUgsZUFDeEJwRixTQUFTaEMsd0JBQ1gsS0FFRmdDLFNBQVNoQyx3QkFFYixDQUNGLEVBUW1DcEIsUUFBQUEsdUJBQUcsU0FBekJzSSx1QkFBeUJSLFVBQ3BDLE9BQU9BLFNBQVNqSixRQUFPLFNBQUF2RCxTQUFPLE9BQUlBLFFBQVE4SyxrQkFBa0IsR0FDOUQsR0FRcUNwRyxRQUFBQSx5QkFBRyxTQUEzQjJJLHlCQUEyQmIsVUFBWSxJQUFBYyxzQkFDbEQsT0FBMEMsUUFBMUNBLHNCQUFPTix1QkFBdUJSLFVBQVUsVUFBRSxJQUFBYywyQkFBQSxFQUFuQ0Esc0JBQXFDeEMsa0JBQzlDLEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9zcmMvdGVtcGxhdGVzL21hbmFnZVN0dWRlbnRzL21hbmFnZVN0dWRlbnRzUmVkdXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB7YXN5bmNMb2FkU2VjdGlvbkRhdGF9IGZyb20gJ0BjZG8vYXBwcy90ZW1wbGF0ZXMvdGVhY2hlckRhc2hib2FyZC90ZWFjaGVyU2VjdGlvbnNSZWR1eCc7XG5pbXBvcnQge1xuICBzZWN0aW9uQ29kZSxcbiAgc2VjdGlvbk5hbWUsXG59IGZyb20gJ0BjZG8vYXBwcy90ZW1wbGF0ZXMvdGVhY2hlckRhc2hib2FyZC90ZWFjaGVyU2VjdGlvbnNSZWR1eFNlbGVjdG9ycyc7XG5pbXBvcnQge1NlY3Rpb25Mb2dpblR5cGV9IGZyb20gJ0BjZG8vZ2VuZXJhdGVkLXNjcmlwdHMvc2hhcmVkQ29uc3RhbnRzJztcblxuZXhwb3J0IGNvbnN0IFBhcmVudExldHRlckJ1dHRvbk1ldHJpY3NDYXRlZ29yeSA9IHtcbiAgQUJPVkVfVEFCTEU6ICdhYm92ZS10YWJsZScsXG4gIEJFTE9XX1RBQkxFOiAnYmVsb3ctdGFibGUnLFxufTtcblxuZXhwb3J0IGNvbnN0IFByaW50TG9naW5DYXJkc0J1dHRvbk1ldHJpY3NDYXRlZ29yeSA9IHtcbiAgTUFOQUdFX1NUVURFTlRTOiAnbWFuYWdlLXN0dWRlbnRzJyxcbiAgTE9HSU5fSU5GTzogJ3NlY3Rpb24tbG9naW4taW5mbycsXG59O1xuXG4vLyBSZXNwb25zZSBmcm9tIHNlcnZlciBhZnRlciBhZGRpbmcgYSBuZXcgc3R1ZGVudCB0byB0aGUgc2VjdGlvbi5cbmV4cG9ydCBjb25zdCBBZGRTdGF0dXMgPSB7XG4gIFNVQ0NFU1M6ICdzdWNjZXNzJyxcbiAgRkFJTDogJ2ZhaWwnLFxuICBGVUxMOiAnZnVsbCcsXG59O1xuXG4vLyBUeXBlcyBvZiByb3dzIGluIHN0dWRlbnREYXRhL2VkaXRpbmdEYXRhXG4vLyBuZXdTdHVkZW50IGxvb2tzIGxpa2UgYSBzdHVkZW50Um93IHdpdGggaXNFZGl0aW5nIHRydWUsIGJ1dFxuLy8gaXMgdXBkYXRlZCBsaWtlIGFuIGFkZCByb3csIHNpbmNlIHRoZSBzdHVkZW50IGhhcyB5ZXQgdG8gYmUgYWRkZWQuXG5leHBvcnQgY29uc3QgUm93VHlwZSA9IHtcbiAgQUREOiAnYWRkUm93JyxcbiAgTkVXX1NUVURFTlQ6ICduZXdTdHVkZW50Um93JyxcbiAgU1RVREVOVDogJ3N0dWRlbnRSb3cnLFxufTtcblxuLy8gQ29uc3RhbnRzIGFyb3VuZCBtb3Zpbmcgc3R1ZGVudHMgdG8gYW5vdGhlciBzZWN0aW9uLlxuLy8gUmVzcG9uc2UgZnJvbSBzZXJ2ZXIgYWZ0ZXIgbW92aW5nIHN0dWRlbnQocykgdG8gYSBuZXcgc2VjdGlvblxuZXhwb3J0IGNvbnN0IFRyYW5zZmVyU3RhdHVzID0ge1xuICBTVUNDRVNTOiAnc3VjY2VzcycsXG4gIEZBSUw6ICdmYWlsJyxcbiAgRlVMTDogJ2Z1bGwnLFxuICBQRU5ESU5HOiAncGVuZGluZycsXG59O1xuXG4vLyBUeXBlIG9mIHN0dWRlbnQgdHJhbnNmZXIgLSB3aGV0aGVyIHN0dWRlbnRzIGFyZSBiZWluZyBtb3ZlZCAoYW5kIHN1YnNlcXVlbnRseSByZW1vdmVkIGZyb20gY3VycmVudCBzZWN0aW9uKSBvciBjb3BpZWQgdG8gbmV3IHNlY3Rpb25cbmV4cG9ydCBjb25zdCBUcmFuc2ZlclR5cGUgPSB7XG4gIE1PVkVfU1RVREVOVFM6ICdtb3ZlU3R1ZGVudHMnLFxuICBDT1BZX1NUVURFTlRTOiAnY29weVN0dWRlbnRzJyxcbn07XG5cbi8qKiBJbml0aWFsIHN0YXRlIGZvciBtYW5hZ2VTdHVkZW50cy50cmFuc2ZlckRhdGEgcmVkdXggc3RvcmUuXG4gKiBzdHVkZW50SWRzIC0gc3R1ZGVudCBpZHMgc2VsZWN0ZWQgdG8gYmUgbW92ZWQgdG8gYW5vdGhlciBzZWN0aW9uXG4gKiBzZWN0aW9uSWQgLSBzZWN0aW9uIGlkIHRvIHdoaWNoIG5ldyBzdHVkZW50cyB3aWxsIGJlIG1vdmVkXG4gKiBvdGhlclRlYWNoZXIgLSBzdHVkZW50cyBhcmUgYmVpbmcgbW92ZWQgdG8gYSBzZWN0aW9uIG93bmVkIGJ5IGEgZGlmZmVyZW50IHRlYWNoZXJcbiAqIG90aGVyVGVhY2hlclNlY3Rpb24gLSBpZiBuZXcgc2VjdGlvbiBpcyBvd25lZCBieSBhIGRpZmZlcmVudCB0ZWFjaGVyLCBjdXJyZW50IHRlYWNoZXIgaW5wdXRzIG5ldyBzZWN0aW9uIGNvZGVcbiAqIGNvcHlTdHVkZW50cyAtIHdoZXRoZXIgb3Igbm90IHN0dWRlbnRzIHdpbGwgYmUgY29waWVkIHRvIG5ldyBzZWN0aW9uIG9yIG1vdmVkIChhbmQgc3Vic2VxdWVudGx5IHJlbW92ZWQgZnJvbSBjdXJyZW50IHNlY3Rpb24pXG4gKi9cbmV4cG9ydCBjb25zdCBibGFua1N0dWRlbnRUcmFuc2ZlciA9IHtcbiAgc3R1ZGVudElkczogW10sXG4gIHNlY3Rpb25JZDogbnVsbCxcbiAgb3RoZXJUZWFjaGVyOiBmYWxzZSxcbiAgb3RoZXJUZWFjaGVyU2VjdGlvbjogJycsXG4gIGNvcHlTdHVkZW50czogdHJ1ZSxcbn07XG5cbi8qKiBJbml0aWFsIHN0YXRlIGZvciBtYW5hZ2VTdHVkZW50cy50cmFuc2ZlclN0YXR1cyByZWR1eCBzdG9yZS5cbiAqIHN0YXR1cyAoVHJhbnNmZXJTdGF0dXMpIC0gd2hldGhlciB0cmFuc2ZlciB3YXMgc3VjY2Vzc2Z1bCBvciBmYWlsZWRcbiAqIHR5cGUgKFRyYW5zZmVyVHlwZSkgLSB3aGV0aGVyIHRyYW5zZmVyIG1vdmVkIHN0dWRlbnRzIChhbmQgc3Vic2VxdWVudGx5IHJlbW92ZWQgdGhlbSBmcm9tIGN1cnJlbnQgc2VjdGlvbikgb3IgY29waWVkIHRoZW1cbiAqIGVycm9yIC0gZXJyb3IgdGV4dCByZXR1cm5lZCBmcm9tIHNlcnZlclxuICogbnVtU3R1ZGVudHMgLSBudW1iZXIgb2Ygc3R1ZGVudHMgdHJhbnNmZXJyZWQgdG8gbmV3IHNlY3Rpb25cbiAqIHNlY3Rpb25EaXNwbGF5IC0gaG93IHNlY3Rpb24gc2hvdWxkIGJlIGRpc3BsYXllZCB0byB1c2VyLiBtb3N0IGxpa2VseSB0aGUgc2VjdGlvbiBuYW1lIG9yIHNlY3Rpb24gY29kZVxuICovXG5leHBvcnQgY29uc3QgYmxhbmtTdHVkZW50VHJhbnNmZXJTdGF0dXMgPSB7XG4gIHN0YXR1czogbnVsbCxcbiAgdHlwZTogbnVsbCxcbiAgZXJyb3I6IG51bGwsXG4gIG51bVN0dWRlbnRzOiAwLFxuICBzZWN0aW9uRGlzcGxheTogJycsXG59O1xuXG4vLyBUaGlzIGRvZXNuJ3QgZ2V0IHVzZWQgdG8gbWFrZSBhIHNlcnZlciBjYWxsLCBidXQgZG9lc1xuLy8gbmVlZCB0byBiZSB1bmlxdWUgZnJvbSB0aGUgcmVzdCBvZiB0aGUgaWRzLlxuY29uc3QgYWRkUm93SWQgPSAwO1xuXG4vLyBOdW1iZXIgdGhhdCBpcyBhdmFpbGFibGUgYXMgYSBuZXcgaWQgZm9yIGFkZGluZyBzdHVkZW50cy5cbi8vIEVhY2ggbmVlZHMgYSB1bmlxdWUgaWQsIGFuZCBjb3VudHMgYmFja3dhcmQgZnJvbSAtMS5cbmxldCBhZGRSb3dJZENvdW50ZXIgPSAtMTtcblxuLy8gQWRkIHJvdyBpcyBmb3IgYWRkaW5nIGEgc2luZ2xlIHN0dWRlbnQgZnJvbSBibGFuayBkYXRhLlxuY29uc3QgYmxhbmtBZGRSb3cgPSB7XG4gIGlkOiBhZGRSb3dJZCxcbiAgbmFtZTogJycsXG4gIGFnZTogJycsXG4gIGdlbmRlcjogJycsXG4gIHVzZXJuYW1lOiAnJyxcbiAgbG9naW5UeXBlOiAnJyxcbiAgc2hhcmluZ0Rpc2FibGVkOiB0cnVlLFxuICBpc0VkaXRpbmc6IHRydWUsXG4gIHJvd1R5cGU6IFJvd1R5cGUuQURELFxuICB1c1N0YXRlOiBudWxsLFxufTtcblxuLy8gTmV3IHN0dWRlbnQgcm93IGlzIGNyZWF0ZWQgYWZ0ZXIgYSBsaXN0IG9mIHN0dWRlbnRzIGhhdmUgYmVlblxuLy8gYWRkZWQgdG8gdGhlIHRhYmxlLCBidXQgdGhlaXIgaW5mb3JtYXRpb24gaGFzbid0IGJlZW4gc2F2ZWRcbi8vIHRvIHRoZSBzZXJ2ZXIgeWV0LlxuY29uc3QgYmxhbmtOZXdTdHVkZW50Um93ID0ge1xuICBpZDogYWRkUm93SWQsXG4gIG5hbWU6ICcnLFxuICBhZ2U6ICcnLFxuICBnZW5kZXI6ICcnLFxuICB1c2VybmFtZTogJycsXG4gIGxvZ2luVHlwZTogJycsXG4gIHNoYXJpbmdEaXNhYmxlZDogdHJ1ZSxcbiAgaXNFZGl0aW5nOiB0cnVlLFxuICByb3dUeXBlOiBSb3dUeXBlLk5FV19TVFVERU5ULFxuICB1c1N0YXRlOiBudWxsLFxufTtcblxuLyoqIEluaXRpYWwgc3RhdGUgZm9yIHRoZSBtYW5hZ2VTdHVkZW50cyByZWR1eCBzdG9yZS5cbiAqIGxvZ2luVHlwZSAtIGEgU2VjdGlvbkxvZ2luVHlwZSBmb3IgdGhlIGFjdGl2ZSBzZWN0aW9uLlxuICogc2VjdGlvbklkIC0gdGhlIHNlY3Rpb25JZCBudW1iZXIgZm9yIHRoZSBhY3RpdmUgc2VjdGlvbi5cbiAqIHN0dWRlbnREYXRhIC0gcmVwcmVzZW50cyBzdHVkZW50IGluZm9ybWF0aW9uIHBlcnNpc3RlZCBvbiB0aGUgc2VydmVyLlxuICogaWYgaXNFZGl0aW5nIChpbiBzdHVkZW50RGF0YSksIHRoZW4gZWRpdGluZ0RhdGEgcmVwcmVzZW50cyB0aGUgZGF0YVxuICogaW4gdGhlIGVkaXQgZmllbGRzIG9uIHRoZSBjbGllbnQgd2hpY2ggaGFzIG5vdCB5ZXQgYmVlbiBwZXJzaXN0ZWQgdG8gdGhlIHNlcnZlci5cbiAqIHNob3dTaGFyaW5nQ29sdW1uIC0gd2hldGhlciB0aGUgY29udHJvbCBwcm9qZWN0IHNoYXJpbmcgY29sdW1uIHNob3VsZCBiZSBoaWRkZW4gb3IgdmlzaWJsZSBpbiB0aGUgdGFibGUuXG4gKiBhZGRTdGF0dXMgLSBzdGF0dXMgaXMgb2YgdHlwZSBBZGRTdGF0dXMgYW5kIG51bVN0dWRlbnRzIGlzIGhvdyBtYW55IHN0dWRlbnRzIHdlcmUgYWRkZWQuXG4gKiB0cmFuc2ZlckRhdGEgLSBpbml0aWFsIHN0YXRlIGRlc2NyaWJlZCBhYm92ZSBpbiBibGFua1N0dWRlbnRUcmFuc2ZlciBhc3NpZ25tZW50XG4gKi9cbmNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAgbG9naW5UeXBlOiAnJyxcbiAgc2VjdGlvbklkOiBudWxsLFxuICBzdHVkZW50RGF0YToge30sXG4gIGVkaXRpbmdEYXRhOiB7fSxcbiAgc2hvd1NoYXJpbmdDb2x1bW46IGZhbHNlLFxuICBhZGRTdGF0dXM6IHtzdGF0dXM6IG51bGwsIG51bVN0dWRlbnRzOiBudWxsfSxcbiAgdHJhbnNmZXJEYXRhOiB7Li4uYmxhbmtTdHVkZW50VHJhbnNmZXJ9LFxuICB0cmFuc2ZlclN0YXR1czogey4uLmJsYW5rU3R1ZGVudFRyYW5zZmVyU3RhdHVzfSxcbiAgaXNMb2FkaW5nU3R1ZGVudHM6IHRydWUsXG4gIHVzU3RhdGU6IG51bGwsXG59O1xuXG5jb25zdCBTRVRfTE9HSU5fVFlQRSA9ICdtYW5hZ2VTdHVkZW50cy9TRVRfTE9HSU5fVFlQRSc7XG5jb25zdCBTRVRfU1RVREVOVFMgPSAnbWFuYWdlU3R1ZGVudHMvU0VUX1NUVURFTlRTJztcbmNvbnN0IFNFVF9TRUNUSU9OX0lORk8gPSAnbWFuYWdlU3R1ZGVudHMvU0VUX1NFQ1RJT05fSU5GTyc7XG5jb25zdCBTVEFSVF9FRElUSU5HX1NUVURFTlQgPSAnbWFuYWdlU3R1ZGVudHMvU1RBUlRfRURJVElOR19TVFVERU5UJztcbmNvbnN0IENBTkNFTF9FRElUSU5HX1NUVURFTlQgPSAnbWFuYWdlU3R1ZGVudHMvQ0FOQ0VMX0VESVRJTkdfU1RVREVOVCc7XG5jb25zdCBSRU1PVkVfU1RVREVOVCA9ICdtYW5hZ2VTdHVkZW50cy9SRU1PVkVfU1RVREVOVCc7XG5jb25zdCBTRVRfU0VDUkVUX0lNQUdFID0gJ21hbmFnZVN0dWRlbnRzL1NFVF9TRUNSRVRfSU1BR0UnO1xuY29uc3QgU0VUX1NFQ1JFVF9XT1JEUyA9ICdtYW5hZ2VTdHVkZW50cy9TRVRfU0VDUkVUX1dPUkRTJztcbmNvbnN0IEVESVRfU1RVREVOVCA9ICdtYW5hZ2VTdHVkZW50cy9FRElUX1NUVURFTlQnO1xuY29uc3QgU1RBUlRfU0FWSU5HX1NUVURFTlQgPSAnbWFuYWdlU3R1ZGVudHMvU1RBUlRfU0FWSU5HX1NUVURFTlQnO1xuY29uc3QgU0FWRV9TVFVERU5UX1NVQ0NFU1MgPSAnbWFuYWdlU3R1ZGVudHMvU0FWRV9TVFVERU5UX1NVQ0NFU1MnO1xuY29uc3QgQUREX1NUVURFTlRfU1VDQ0VTUyA9ICdtYW5hZ2VTdHVkZW50cy9BRERfU1RVREVOVF9TVUNDRVNTJztcbmNvbnN0IEFERF9TVFVERU5UX0ZBSUxVUkUgPSAnbWFuYWdlU3R1ZGVudHMvQUREX1NUVURFTlRfRkFJTFVSRSc7XG5jb25zdCBBRERfU1RVREVOVF9GVUxMID0gJ21hbmFnZVN0dWRlbnRzL0FERF9TVFVERU5UX0ZVTEwnO1xuY29uc3QgQUREX01VTFRJUExFX1JPV1MgPSAnbWFuYWdlU3R1ZGVudHMvQUREX01VTFRJUExFX1JPV1MnO1xuY29uc3QgU0VUX1NIT1dfU0hBUklOR19DT0xVTU4gPSAnbWFuYWdlU3R1ZGVudHMvU0VUX1NIT1dfU0hBUklOR19DT0xVTU4nO1xuY29uc3QgRURJVF9BTEwgPSAnbWFuYWdlU3R1ZGVudHMvRURJVF9BTEwnO1xuY29uc3QgQlVMS19TRVQgPSAnbWFuYWdlU3R1ZGVudHMvQlVMS19TRVQnO1xuY29uc3QgVVBEQVRFX0FMTF9TSEFSRV9TRVRUSU5HID0gJ21hbmFnZVN0dWRlbnRzL1VQREFURV9BTExfU0hBUkVfU0VUVElORyc7XG5jb25zdCBTRVRfU0hBUklOR19ERUZBVUxUID0gJ21hbmFnZVN0dWRlbnRzL1NFVF9TSEFSSU5HX0RFRkFVTFQnO1xuY29uc3QgVVBEQVRFX1NUVURFTlRfVFJBTlNGRVIgPSAnbWFuYWdlU3R1ZGVudHMvVVBEQVRFX1NUVURFTlRfVFJBTlNGRVInO1xuY29uc3QgQ0FOQ0VMX1NUVURFTlRfVFJBTlNGRVIgPSAnbWFuYWdlU3R1ZGVudHMvQ0FOQ0VMX1NUVURFTlRfVFJBTlNGRVInO1xuY29uc3QgVFJBTlNGRVJfU1RVREVOVFNfU1VDQ0VTUyA9ICdtYW5hZ2VTdHVkZW50cy9UUkFOU0ZFUl9TVFVERU5UU19TVUNDRVNTJztcbmNvbnN0IFRSQU5TRkVSX1NUVURFTlRTX0ZBSUxVUkUgPSAnbWFuYWdlU3R1ZGVudHMvVFJBTlNGRVJfU1RVREVOVFNfRkFJTFVSRSc7XG5jb25zdCBUUkFOU0ZFUl9TVFVERU5UU19QRU5ESU5HID0gJ21hbmFnZVN0dWRlbnRzL1RSQU5TRkVSX1NUVURFTlRTX1BFTkRJTkcnO1xuY29uc3QgVFJBTlNGRVJfU1RVREVOVFNfRlVMTCA9ICdtYW5hZ2VTdHVkZW50cy9UUkFOU0ZFUl9TVFVERU5UU19GVUxMJztcbmNvbnN0IFNUQVJUX0xPQURJTkdfU1RVREVOVFMgPSAnbWFuYWdlU3R1ZGVudHMvU1RBUlRfTE9BRElOR19TVFVERU5UUyc7XG5jb25zdCBGSU5JU0hfTE9BRElOR19TVFVERU5UUyA9ICdtYW5hZ2VTdHVkZW50cy9GSU5JU0hfTE9BRElOR19TVFVERU5UUyc7XG5cbi8vIEFjdGlvbiBjcmVhdG9yc1xuZXhwb3J0IGNvbnN0IHN0YXJ0TG9hZGluZ1N0dWRlbnRzID0gKCkgPT4gKHt0eXBlOiBTVEFSVF9MT0FESU5HX1NUVURFTlRTfSk7XG5leHBvcnQgY29uc3QgZmluaXNoTG9hZGluZ1N0dWRlbnRzID0gKCkgPT4gKHt0eXBlOiBGSU5JU0hfTE9BRElOR19TVFVERU5UU30pO1xuXG5leHBvcnQgY29uc3Qgc2V0TG9naW5UeXBlID0gbG9naW5UeXBlID0+ICh7dHlwZTogU0VUX0xPR0lOX1RZUEUsIGxvZ2luVHlwZX0pO1xuZXhwb3J0IGNvbnN0IHNldFN0dWRlbnRzID0gc3R1ZGVudERhdGEgPT4gKHtcbiAgdHlwZTogU0VUX1NUVURFTlRTLFxuICBzdHVkZW50RGF0YSxcbn0pO1xuZXhwb3J0IGNvbnN0IHNldFNlY3Rpb25JbmZvID0gc2VjdGlvbklkID0+ICh7XG4gIHR5cGU6IFNFVF9TRUNUSU9OX0lORk8sXG4gIHNlY3Rpb25JZCxcbn0pO1xuZXhwb3J0IGNvbnN0IHN0YXJ0RWRpdGluZ1N0dWRlbnQgPSBzdHVkZW50SWQgPT4gKHtcbiAgdHlwZTogU1RBUlRfRURJVElOR19TVFVERU5ULFxuICBzdHVkZW50SWQsXG59KTtcbmV4cG9ydCBjb25zdCBjYW5jZWxFZGl0aW5nU3R1ZGVudCA9IHN0dWRlbnRJZCA9PiAoe1xuICB0eXBlOiBDQU5DRUxfRURJVElOR19TVFVERU5ULFxuICBzdHVkZW50SWQsXG59KTtcbmV4cG9ydCBjb25zdCByZW1vdmVTdHVkZW50ID0gc3R1ZGVudElkID0+ICh7dHlwZTogUkVNT1ZFX1NUVURFTlQsIHN0dWRlbnRJZH0pO1xuZXhwb3J0IGNvbnN0IHNldFNlY3JldEltYWdlID0gKHN0dWRlbnRJZCwgaW1hZ2UpID0+ICh7XG4gIHR5cGU6IFNFVF9TRUNSRVRfSU1BR0UsXG4gIHN0dWRlbnRJZCxcbiAgaW1hZ2UsXG59KTtcbmV4cG9ydCBjb25zdCBzZXRTZWNyZXRXb3JkcyA9IChzdHVkZW50SWQsIHdvcmRzKSA9PiAoe1xuICB0eXBlOiBTRVRfU0VDUkVUX1dPUkRTLFxuICBzdHVkZW50SWQsXG4gIHdvcmRzLFxufSk7XG5leHBvcnQgY29uc3QgZWRpdFN0dWRlbnQgPSAoc3R1ZGVudElkLCBzdHVkZW50RGF0YSkgPT4gKHtcbiAgdHlwZTogRURJVF9TVFVERU5ULFxuICBzdHVkZW50SWQsXG4gIHN0dWRlbnREYXRhLFxufSk7XG5leHBvcnQgY29uc3Qgc2V0U2hhcmluZ0RlZmF1bHQgPSBzdHVkZW50SWQgPT4gKHtcbiAgdHlwZTogU0VUX1NIQVJJTkdfREVGQVVMVCxcbiAgc3R1ZGVudElkLFxufSk7XG5leHBvcnQgY29uc3QgZWRpdEFsbCA9ICgpID0+ICh7dHlwZTogRURJVF9BTEx9KTtcbmV4cG9ydCBjb25zdCBidWxrU2V0ID0gc3R1ZGVudERhdGEgPT4gKHt0eXBlOiBCVUxLX1NFVCwgc3R1ZGVudERhdGF9KTtcbmV4cG9ydCBjb25zdCB1cGRhdGVBbGxTaGFyZVNldHRpbmcgPSBkaXNhYmxlID0+ICh7XG4gIHR5cGU6IFVQREFURV9BTExfU0hBUkVfU0VUVElORyxcbiAgZGlzYWJsZSxcbn0pO1xuZXhwb3J0IGNvbnN0IHN0YXJ0U2F2aW5nU3R1ZGVudCA9IHN0dWRlbnRJZCA9PiAoe1xuICB0eXBlOiBTVEFSVF9TQVZJTkdfU1RVREVOVCxcbiAgc3R1ZGVudElkLFxufSk7XG5leHBvcnQgY29uc3Qgc2F2ZVN0dWRlbnRTdWNjZXNzID0gc3R1ZGVudElkID0+ICh7XG4gIHR5cGU6IFNBVkVfU1RVREVOVF9TVUNDRVNTLFxuICBzdHVkZW50SWQsXG59KTtcbmV4cG9ydCBjb25zdCB1cGRhdGVTdHVkZW50VHJhbnNmZXIgPSB0cmFuc2ZlckRhdGEgPT4gKHtcbiAgdHlwZTogVVBEQVRFX1NUVURFTlRfVFJBTlNGRVIsXG4gIHRyYW5zZmVyRGF0YSxcbn0pO1xuZXhwb3J0IGNvbnN0IGNhbmNlbFN0dWRlbnRUcmFuc2ZlciA9ICgpID0+ICh7dHlwZTogQ0FOQ0VMX1NUVURFTlRfVFJBTlNGRVJ9KTtcbmV4cG9ydCBjb25zdCB0cmFuc2ZlclN0dWRlbnRzU3VjY2VzcyA9IChcbiAgdHJhbnNmZXJUeXBlLFxuICBudW1TdHVkZW50cyxcbiAgc2VjdGlvbkRpc3BsYXlcbikgPT4gKHtcbiAgdHlwZTogVFJBTlNGRVJfU1RVREVOVFNfU1VDQ0VTUyxcbiAgdHJhbnNmZXJUeXBlLFxuICBudW1TdHVkZW50cyxcbiAgc2VjdGlvbkRpc3BsYXksXG59KTtcbmV4cG9ydCBjb25zdCB0cmFuc2ZlclN0dWRlbnRzRmFpbHVyZSA9IGVycm9yID0+ICh7XG4gIHR5cGU6IFRSQU5TRkVSX1NUVURFTlRTX0ZBSUxVUkUsXG4gIGVycm9yLFxufSk7XG5leHBvcnQgY29uc3QgdHJhbnNmZXJTdHVkZW50c1BlbmRpbmcgPSAoKSA9PiAoe1xuICB0eXBlOiBUUkFOU0ZFUl9TVFVERU5UU19QRU5ESU5HLFxufSk7XG5leHBvcnQgY29uc3QgdHJhbnNmZXJTdHVkZW50c0Z1bGwgPSAoXG4gIHtzZWN0aW9uQ2FwYWNpdHksIG51bVN0dWRlbnRzLCBzZWN0aW9uQ29kZSwgc2VjdGlvblN0dWRlbnRDb3VudH0sXG4gIGNvcHlcbikgPT4gKHtcbiAgdHlwZTogVFJBTlNGRVJfU1RVREVOVFNfRlVMTCxcbiAgc2VjdGlvbkNhcGFjaXR5LFxuICBudW1TdHVkZW50cyxcbiAgc2VjdGlvblN0dWRlbnRDb3VudCxcbiAgc2VjdGlvbkNvZGUsXG4gIHZlcmI6IGNvcHkgPyAnY29weScgOiAnbW92ZScsXG59KTtcbmV4cG9ydCBjb25zdCBhZGRTdHVkZW50c1N1Y2Nlc3MgPSAobnVtU3R1ZGVudHMsIHJvd0lkcywgc3R1ZGVudERhdGEpID0+ICh7XG4gIHR5cGU6IEFERF9TVFVERU5UX1NVQ0NFU1MsXG4gIG51bVN0dWRlbnRzLFxuICByb3dJZHMsXG4gIHN0dWRlbnREYXRhLFxufSk7XG5leHBvcnQgY29uc3QgYWRkU3R1ZGVudHNGYWlsdXJlID0gKG51bVN0dWRlbnRzLCBlcnJvciwgc3R1ZGVudElkcykgPT4gKHtcbiAgdHlwZTogQUREX1NUVURFTlRfRkFJTFVSRSxcbiAgbnVtU3R1ZGVudHMsXG4gIGVycm9yLFxuICBzdHVkZW50SWRzLFxufSk7XG5leHBvcnQgY29uc3QgYWRkU3R1ZGVudHNGdWxsID0gKFxuICB7c2VjdGlvbkNhcGFjaXR5LCBudW1TdHVkZW50cywgc2VjdGlvbkNvZGUsIHNlY3Rpb25TdHVkZW50Q291bnR9LFxuICBzdHVkZW50SWRzXG4pID0+ICh7XG4gIHR5cGU6IEFERF9TVFVERU5UX0ZVTEwsXG4gIHNlY3Rpb25DYXBhY2l0eSxcbiAgbnVtU3R1ZGVudHMsXG4gIHNlY3Rpb25TdHVkZW50Q291bnQsXG4gIHNlY3Rpb25Db2RlLFxuICBzdHVkZW50SWRzLFxufSk7XG5leHBvcnQgY29uc3QgYWRkTXVsdGlwbGVSb3dzID0gc3R1ZGVudERhdGEgPT4gKHtcbiAgdHlwZTogQUREX01VTFRJUExFX1JPV1MsXG4gIHN0dWRlbnREYXRhLFxufSk7XG5cbmV4cG9ydCBjb25zdCBzZXRTaG93U2hhcmluZ0NvbHVtbiA9IHZpc2libGUgPT4gKHtcbiAgdHlwZTogU0VUX1NIT1dfU0hBUklOR19DT0xVTU4sXG4gIHZpc2libGUsXG59KTtcblxuZXhwb3J0IGNvbnN0IGhhbmRsZVNoYXJlU2V0dGluZyA9IGRpc2FibGUgPT4ge1xuICByZXR1cm4gKGRpc3BhdGNoLCBnZXRTdGF0ZSkgPT4ge1xuICAgIGRpc3BhdGNoKGVkaXRBbGwoKSk7XG4gICAgZGlzcGF0Y2godXBkYXRlQWxsU2hhcmVTZXR0aW5nKGRpc2FibGUpKTtcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBzYXZlU3R1ZGVudCA9IHN0dWRlbnRJZCA9PiB7XG4gIHJldHVybiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXRTdGF0ZSgpLm1hbmFnZVN0dWRlbnRzO1xuICAgIGNvbnN0IHNlY3Rpb25JZCA9IGdldFN0YXRlKCkudGVhY2hlclNlY3Rpb25zLnNlbGVjdGVkU2VjdGlvbklkO1xuICAgIGRpc3BhdGNoKHN0YXJ0U2F2aW5nU3R1ZGVudChzdHVkZW50SWQpKTtcbiAgICB1cGRhdGVTdHVkZW50T25TZXJ2ZXIoXG4gICAgICBzdGF0ZS5lZGl0aW5nRGF0YVtzdHVkZW50SWRdLFxuICAgICAgc2VjdGlvbklkLFxuICAgICAgKGVycm9yLCBkYXRhKSA9PiB7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIGRpc3BhdGNoKHNhdmVTdHVkZW50U3VjY2VzcyhzdHVkZW50SWQpKTtcbiAgICAgICAgZGlzcGF0Y2goYXN5bmNMb2FkU2VjdGlvbkRhdGEoc2VjdGlvbklkKSk7XG4gICAgICB9XG4gICAgKTtcbiAgfTtcbn07XG5cbi8vIFNhdmVzIGFsbCBSb3dUeXBlLlNUVURFTlQgY3VycmVudGx5IGJlaW5nIGVkaXRlZCBhbmQgYWRkcyBhbGxcbi8vIFJvd1R5cGUuTkVXX1NUVURFTlQgY3VycmVudGx5IGJlaW5nIGVkaXRlZC5cbmV4cG9ydCBjb25zdCBzYXZlQWxsU3R1ZGVudHMgPSAoKSA9PiB7XG4gIHJldHVybiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXRTdGF0ZSgpLm1hbmFnZVN0dWRlbnRzO1xuXG4gICAgLy8gQ3VycmVudGx5LCBldmVyeSB1cGRhdGUgaXMgYW4gaW5kaXZpZHVhbCBjYWxsIHRvIHRoZSBzZXJ2ZXIuXG4gICAgY29uc3QgY3VycmVudGx5RWRpdGVkRGF0YSA9IE9iamVjdC52YWx1ZXMoc3RhdGUuZWRpdGluZ0RhdGEpO1xuICAgIGxldCBzdHVkZW50c1RvU2F2ZSA9IGN1cnJlbnRseUVkaXRlZERhdGEuZmlsdGVyKFxuICAgICAgc3R1ZGVudCA9PiBzdHVkZW50LnJvd1R5cGUgPT09IFJvd1R5cGUuU1RVREVOVFxuICAgICk7XG4gICAgc3R1ZGVudHNUb1NhdmUuZm9yRWFjaChzdHVkZW50ID0+IHtcbiAgICAgIGlmIChzdHVkZW50Lm5hbWUgIT09ICcnKSB7XG4gICAgICAgIGRpc3BhdGNoKHNhdmVTdHVkZW50KHN0dWRlbnQuaWQpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEFkZGluZyBzdHVkZW50cyBjYW4gYmUgc2F2ZWQgdG9nZXRoZXIuXG4gICAgLy8gT25seSBhZGQgc3R1ZGVudHMgdGhhdCBjdXJyZW50bHkgYXJlIG5vdCBpbiBwcm9ncmVzcyBzYXZpbmcuXG4gICAgY29uc3QgYXJyYXlPZkVkaXRlZERhdGEgPSBPYmplY3QudmFsdWVzKHN0YXRlLmVkaXRpbmdEYXRhKTtcbiAgICBjb25zdCBuZXdTdHVkZW50c1RvQWRkID0gYXJyYXlPZkVkaXRlZERhdGFcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIHN0dWRlbnQgPT4gc3R1ZGVudC5yb3dUeXBlID09PSBSb3dUeXBlLk5FV19TVFVERU5UICYmICFzdHVkZW50LmlzU2F2aW5nXG4gICAgICApXG4gICAgICAubWFwKHN0dWRlbnQgPT4gc3R1ZGVudC5pZCk7XG4gICAgaWYgKG5ld1N0dWRlbnRzVG9BZGQubGVuZ3RoID4gMCkge1xuICAgICAgZGlzcGF0Y2goYWRkU3R1ZGVudHMobmV3U3R1ZGVudHNUb0FkZCkpO1xuICAgIH1cbiAgfTtcbn07XG5cbi8vIEFkZHMgYSBzdHVkZW50LCB3aXRoIHRoZSBnaXZlbiByb3cgaWQgKHN0dWRlbnRJZHMpLCBmcm9tIFJvd1R5cGUuQUREIG9yXG4vLyBSb3dUeXBlLk5FV19TVFVERU5ULlxuZXhwb3J0IGNvbnN0IGFkZFN0dWRlbnRzID0gc3R1ZGVudElkcyA9PiB7XG4gIHJldHVybiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXRTdGF0ZSgpLm1hbmFnZVN0dWRlbnRzO1xuICAgIGNvbnN0IHNlY3Rpb25JZCA9IGdldFN0YXRlKCkudGVhY2hlclNlY3Rpb25zLnNlbGVjdGVkU2VjdGlvbklkO1xuICAgIGNvbnN0IG51bVN0dWRlbnRzVG9BZGQgPSBzdHVkZW50SWRzLmxlbmd0aDtcblxuICAgIC8vIFVwZGF0ZSBlYWNoIHJvdyB0byBzYXZpbmcgaW4gcHJvZ3Jlc3MuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHVkZW50SWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkaXNwYXRjaChzdGFydFNhdmluZ1N0dWRlbnQoc3R1ZGVudElkc1tpXSkpO1xuICAgIH1cblxuICAgIGNvbnN0IGFycmF5T2ZFZGl0ZWREYXRhID0gT2JqZWN0LnZhbHVlcyhzdGF0ZS5lZGl0aW5nRGF0YSk7XG4gICAgY29uc3QgZmlsdGVyZWREYXRhID0gYXJyYXlPZkVkaXRlZERhdGEuZmlsdGVyKHN0dWRlbnQgPT5cbiAgICAgIHN0dWRlbnRJZHMuaW5jbHVkZXMoc3R1ZGVudC5pZClcbiAgICApO1xuICAgIGFkZFN0dWRlbnRPblNlcnZlcihmaWx0ZXJlZERhdGEsIHNlY3Rpb25JZCwgKGVycm9yLCBkYXRhKSA9PiB7XG4gICAgICBpZiAoZXJyb3IgJiYgZGF0YSAmJiBkYXRhLnJlc3VsdCA9PT0gQWRkU3RhdHVzLkZVTEwpIHtcbiAgICAgICAgLy8gc3R1ZGVudElkcyByZXF1aXJlZCB0byBhbGxvdyBmb3IgcmVwZWF0IGJ1bGtfYWRkIGF0dGVtcHRzXG4gICAgICAgIGRpc3BhdGNoKGFkZFN0dWRlbnRzRnVsbChkYXRhLCBzdHVkZW50SWRzKSk7XG4gICAgICB9IGVsc2UgaWYgKGVycm9yKSB7XG4gICAgICAgIGRpc3BhdGNoKGFkZFN0dWRlbnRzRmFpbHVyZShudW1TdHVkZW50c1RvQWRkLCBlcnJvciwgc3R1ZGVudElkcykpO1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpc3BhdGNoKFxuICAgICAgICAgIGFkZFN0dWRlbnRzU3VjY2VzcyhcbiAgICAgICAgICAgIG51bVN0dWRlbnRzVG9BZGQsXG4gICAgICAgICAgICBzdHVkZW50SWRzLFxuICAgICAgICAgICAgY29udmVydFN0dWRlbnRTZXJ2ZXJEYXRhKGRhdGEsIHN0YXRlLmxvZ2luVHlwZSwgc2VjdGlvbklkKVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgZGlzcGF0Y2goYXN5bmNMb2FkU2VjdGlvbkRhdGEoc2VjdGlvbklkKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59O1xuXG4vLyBDcmVhdGVzIGEgbmV3IFJvd1R5cGUuTkVXX1NUVURFTlQgZm9yIGVhY2ggbmFtZSBpbiB0aGUgYXJyYXkuXG5leHBvcnQgY29uc3QgYWRkTXVsdGlwbGVBZGRSb3dzID0gc3R1ZGVudERhdGFBcnJheSA9PiB7XG4gIHJldHVybiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgY29uc3Qgc3R1ZGVudERhdGEgPSBzdHVkZW50RGF0YUFycmF5XG4gICAgICAuZmlsdGVyKGRhdGEgPT4gZGF0YS5uYW1lKVxuICAgICAgLnJlZHVjZSgoYWNjdW11bGF0b3IsIGRhdGEpID0+IHtcbiAgICAgICAgY29uc3QgbmV3SWQgPSBhZGRSb3dJZENvdW50ZXItLTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmFjY3VtdWxhdG9yLFxuICAgICAgICAgIFtuZXdJZF06IHtcbiAgICAgICAgICAgIC4uLmJsYW5rTmV3U3R1ZGVudFJvdyxcbiAgICAgICAgICAgIG5hbWU6IGRhdGEubmFtZSxcbiAgICAgICAgICAgIGZhbWlseU5hbWU6IGRhdGEuZmFtaWx5TmFtZSxcbiAgICAgICAgICAgIGlkOiBuZXdJZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfSwge30pO1xuICAgIGRpc3BhdGNoKGFkZE11bHRpcGxlUm93cyhzdHVkZW50RGF0YSkpO1xuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHRyYW5zZmVyU3R1ZGVudHMgPSBvbkNvbXBsZXRlID0+IHtcbiAgcmV0dXJuIChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgICBkaXNwYXRjaCh0cmFuc2ZlclN0dWRlbnRzUGVuZGluZygpKTtcbiAgICBjb25zdCBzdGF0ZSA9IGdldFN0YXRlKCk7XG4gICAgLy8gR2V0IHNlY3Rpb24gY29kZSBmb3IgY3VycmVudCBzZWN0aW9uIGZyb20gdGVhY2hlclNlY3Rpb25zUmVkdXhcbiAgICBjb25zdCBjdXJyZW50U2VjdGlvbkNvZGUgPSBzZWN0aW9uQ29kZShcbiAgICAgIHN0YXRlLFxuICAgICAgc3RhdGUudGVhY2hlclNlY3Rpb25zLnNlbGVjdGVkU2VjdGlvbklkXG4gICAgKTtcbiAgICBjb25zdCB7XG4gICAgICBzdHVkZW50SWRzLFxuICAgICAgc2VjdGlvbklkOiBuZXdTZWN0aW9uSWQsXG4gICAgICBvdGhlclRlYWNoZXIsXG4gICAgICBvdGhlclRlYWNoZXJTZWN0aW9uLFxuICAgICAgY29weVN0dWRlbnRzLFxuICAgIH0gPSBzdGF0ZS5tYW5hZ2VTdHVkZW50cy50cmFuc2ZlckRhdGE7XG4gICAgbGV0IG5ld1NlY3Rpb25Db2RlO1xuXG4gICAgaWYgKG90aGVyVGVhY2hlciAmJiBvdGhlclRlYWNoZXJTZWN0aW9uKSB7XG4gICAgICBuZXdTZWN0aW9uQ29kZSA9IG90aGVyVGVhY2hlclNlY3Rpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1NlY3Rpb25Db2RlID0gc2VjdGlvbkNvZGUoc3RhdGUsIG5ld1NlY3Rpb25JZCk7XG4gICAgfVxuXG4gICAgdHJhbnNmZXJTdHVkZW50c09uU2VydmVyKFxuICAgICAgc3R1ZGVudElkcyxcbiAgICAgIGN1cnJlbnRTZWN0aW9uQ29kZSxcbiAgICAgIG5ld1NlY3Rpb25Db2RlLFxuICAgICAgY29weVN0dWRlbnRzLFxuICAgICAgKGVycm9yLCBkYXRhKSA9PiB7XG4gICAgICAgIGlmIChlcnJvciAmJiBkYXRhICYmIGRhdGEucmVzdWx0ID09PSBUcmFuc2ZlclN0YXR1cy5GVUxMKSB7XG4gICAgICAgICAgZGlzcGF0Y2godHJhbnNmZXJTdHVkZW50c0Z1bGwoZGF0YSwgY29weVN0dWRlbnRzKSk7XG4gICAgICAgICAgb25Db21wbGV0ZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKGVycm9yKSB7XG4gICAgICAgICAgZGlzcGF0Y2godHJhbnNmZXJTdHVkZW50c0ZhaWx1cmUoKGRhdGEgJiYgZGF0YS5lcnJvcikgfHwgZXJyb3IpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoIWNvcHlTdHVkZW50cyB8fCAhb3RoZXJUZWFjaGVyKSB7XG4gICAgICAgICAgICBzdHVkZW50SWRzLmZvckVhY2goaWQgPT4ge1xuICAgICAgICAgICAgICBkaXNwYXRjaChyZW1vdmVTdHVkZW50KGlkKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgdHJhbnNmZXJUeXBlID0gY29weVN0dWRlbnRzXG4gICAgICAgICAgICA/IFRyYW5zZmVyVHlwZS5DT1BZX1NUVURFTlRTXG4gICAgICAgICAgICA6IFRyYW5zZmVyVHlwZS5NT1ZFX1NUVURFTlRTO1xuICAgICAgICAgIC8vIEdldCBzZWN0aW9uIG5hbWUgZm9yIG5ldyBzZWN0aW9uIGZyb20gdGVhY2hlclNlY3Rpb25zUmVkdXhcbiAgICAgICAgICBjb25zdCBzZWN0aW9uRGlzcGxheSA9IG90aGVyVGVhY2hlclxuICAgICAgICAgICAgPyBvdGhlclRlYWNoZXJTZWN0aW9uXG4gICAgICAgICAgICA6IHNlY3Rpb25OYW1lKHN0YXRlLCBuZXdTZWN0aW9uSWQpO1xuICAgICAgICAgIGRpc3BhdGNoKFxuICAgICAgICAgICAgdHJhbnNmZXJTdHVkZW50c1N1Y2Nlc3MoXG4gICAgICAgICAgICAgIHRyYW5zZmVyVHlwZSxcbiAgICAgICAgICAgICAgc3R1ZGVudElkcy5sZW5ndGgsXG4gICAgICAgICAgICAgIHNlY3Rpb25EaXNwbGF5XG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgICBvbkNvbXBsZXRlKCk7XG4gICAgICAgICAgZGlzcGF0Y2goXG4gICAgICAgICAgICBhc3luY0xvYWRTZWN0aW9uRGF0YShzdGF0ZS50ZWFjaGVyU2VjdGlvbnMuc2VsZWN0ZWRTZWN0aW9uSWQpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYW5hZ2VTdHVkZW50cyhzdGF0ZSA9IGluaXRpYWxTdGF0ZSwgYWN0aW9uKSB7XG4gIGlmIChhY3Rpb24udHlwZSA9PT0gU0VUX0xPR0lOX1RZUEUpIHtcbiAgICBsZXQgYWRkUm93SW5pdGlhbGl6YXRpb24gPSB7fTtcbiAgICBpZiAoXG4gICAgICBhY3Rpb24ubG9naW5UeXBlID09PSBTZWN0aW9uTG9naW5UeXBlLndvcmQgfHxcbiAgICAgIGFjdGlvbi5sb2dpblR5cGUgPT09IFNlY3Rpb25Mb2dpblR5cGUucGljdHVyZVxuICAgICkge1xuICAgICAgYWRkUm93SW5pdGlhbGl6YXRpb24gPSB7XG4gICAgICAgIHN0dWRlbnREYXRhOiB7XG4gICAgICAgICAgW2FkZFJvd0lkXToge1xuICAgICAgICAgICAgLi4uYmxhbmtBZGRSb3csXG4gICAgICAgICAgICBsb2dpblR5cGU6IGFjdGlvbi5sb2dpblR5cGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgZWRpdGluZ0RhdGE6IHtcbiAgICAgICAgICBbYWRkUm93SWRdOiB7XG4gICAgICAgICAgICAuLi5ibGFua0FkZFJvdyxcbiAgICAgICAgICAgIGxvZ2luVHlwZTogYWN0aW9uLmxvZ2luVHlwZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbG9naW5UeXBlOiBhY3Rpb24ubG9naW5UeXBlLFxuICAgICAgLi4uYWRkUm93SW5pdGlhbGl6YXRpb24sXG4gICAgfTtcbiAgfVxuICBpZiAoYWN0aW9uLnR5cGUgPT09IFNFVF9TVFVERU5UUykge1xuICAgIGxldCBzdHVkZW50RGF0YSA9IHtcbiAgICAgIC4uLmFjdGlvbi5zdHVkZW50RGF0YSxcbiAgICB9O1xuICAgIGlmIChcbiAgICAgIHN0YXRlLmxvZ2luVHlwZSA9PT0gU2VjdGlvbkxvZ2luVHlwZS53b3JkIHx8XG4gICAgICBzdGF0ZS5sb2dpblR5cGUgPT09IFNlY3Rpb25Mb2dpblR5cGUucGljdHVyZVxuICAgICkge1xuICAgICAgc3R1ZGVudERhdGFbYWRkUm93SWRdID0ge1xuICAgICAgICAuLi5ibGFua0FkZFJvdyxcbiAgICAgICAgbG9naW5UeXBlOiBzdGF0ZS5sb2dpblR5cGUsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBzdHVkZW50RGF0YTogc3R1ZGVudERhdGEsXG4gICAgICBhZGRTdGF0dXM6IHtzdGF0dXM6IG51bGwsIG51bVN0dWRlbnRzOiBudWxsfSxcbiAgICAgIGlzTG9hZGluZ1N0dWRlbnRzOiBmYWxzZSxcbiAgICB9O1xuICB9XG4gIGlmIChhY3Rpb24udHlwZSA9PT0gU0VUX1NFQ1RJT05fSU5GTykge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHNlY3Rpb25JZDogYWN0aW9uLnNlY3Rpb25JZCxcbiAgICB9O1xuICB9XG4gIGlmIChhY3Rpb24udHlwZSA9PT0gU1RBUlRfRURJVElOR19TVFVERU5UKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgc3R1ZGVudERhdGE6IHtcbiAgICAgICAgLi4uc3RhdGUuc3R1ZGVudERhdGEsXG4gICAgICAgIFthY3Rpb24uc3R1ZGVudElkXToge1xuICAgICAgICAgIC4uLnN0YXRlLnN0dWRlbnREYXRhW2FjdGlvbi5zdHVkZW50SWRdLFxuICAgICAgICAgIGlzRWRpdGluZzogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBlZGl0aW5nRGF0YToge1xuICAgICAgICAuLi5zdGF0ZS5lZGl0aW5nRGF0YSxcbiAgICAgICAgW2FjdGlvbi5zdHVkZW50SWRdOiB7XG4gICAgICAgICAgLi4uc3RhdGUuc3R1ZGVudERhdGFbYWN0aW9uLnN0dWRlbnRJZF0sXG4gICAgICAgICAgaWQ6IGFjdGlvbi5zdHVkZW50SWQsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH1cbiAgaWYgKGFjdGlvbi50eXBlID09PSBDQU5DRUxfRURJVElOR19TVFVERU5UKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgc3R1ZGVudERhdGE6IHtcbiAgICAgICAgLi4uc3RhdGUuc3R1ZGVudERhdGEsXG4gICAgICAgIFthY3Rpb24uc3R1ZGVudElkXToge1xuICAgICAgICAgIC4uLnN0YXRlLnN0dWRlbnREYXRhW2FjdGlvbi5zdHVkZW50SWRdLFxuICAgICAgICAgIGlzRWRpdGluZzogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgZWRpdGluZ0RhdGE6IF8ub21pdChzdGF0ZS5lZGl0aW5nRGF0YSwgYWN0aW9uLnN0dWRlbnRJZCksXG4gICAgfTtcbiAgfVxuICBpZiAoYWN0aW9uLnR5cGUgPT09IFNUQVJUX1NBVklOR19TVFVERU5UKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgc3R1ZGVudERhdGE6IHtcbiAgICAgICAgLi4uc3RhdGUuc3R1ZGVudERhdGEsXG4gICAgICAgIFthY3Rpb24uc3R1ZGVudElkXToge1xuICAgICAgICAgIC4uLnN0YXRlLnN0dWRlbnREYXRhW2FjdGlvbi5zdHVkZW50SWRdLFxuICAgICAgICAgIGlzU2F2aW5nOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGVkaXRpbmdEYXRhOiB7XG4gICAgICAgIC4uLnN0YXRlLmVkaXRpbmdEYXRhLFxuICAgICAgICBbYWN0aW9uLnN0dWRlbnRJZF06IHtcbiAgICAgICAgICAuLi5zdGF0ZS5lZGl0aW5nRGF0YVthY3Rpb24uc3R1ZGVudElkXSxcbiAgICAgICAgICBpc1NhdmluZzogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuICBpZiAoYWN0aW9uLnR5cGUgPT09IFNBVkVfU1RVREVOVF9TVUNDRVNTKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgc3R1ZGVudERhdGE6IHtcbiAgICAgICAgLi4uc3RhdGUuc3R1ZGVudERhdGEsXG4gICAgICAgIFthY3Rpb24uc3R1ZGVudElkXToge1xuICAgICAgICAgIC4uLnN0YXRlLnN0dWRlbnREYXRhW2FjdGlvbi5zdHVkZW50SWRdLFxuICAgICAgICAgIC4uLnN0YXRlLmVkaXRpbmdEYXRhW2FjdGlvbi5zdHVkZW50SWRdLFxuICAgICAgICAgIGlzRWRpdGluZzogZmFsc2UsXG4gICAgICAgICAgaXNTYXZpbmc6IGZhbHNlLFxuICAgICAgICAgIHJvd1R5cGU6IFJvd1R5cGUuU1RVREVOVCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBlZGl0aW5nRGF0YTogXy5vbWl0KHN0YXRlLmVkaXRpbmdEYXRhLCBhY3Rpb24uc3R1ZGVudElkKSxcbiAgICB9O1xuICB9XG4gIGlmIChhY3Rpb24udHlwZSA9PT0gQUREX1NUVURFTlRfRkFJTFVSRSkge1xuICAgIGxldCBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgYWRkU3RhdHVzOiB7c3RhdHVzOiBBZGRTdGF0dXMuRkFJTCwgbnVtU3R1ZGVudHM6IGFjdGlvbi5udW1TdHVkZW50c30sXG4gICAgfTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdGlvbi5zdHVkZW50SWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBuZXdTdGF0ZS5zdHVkZW50RGF0YVthY3Rpb24uc3R1ZGVudElkc1tpXV0gPSB7XG4gICAgICAgIC4uLnN0YXRlLnN0dWRlbnREYXRhW2FjdGlvbi5zdHVkZW50SWRzW2ldXSxcbiAgICAgICAgaXNTYXZpbmc6IGZhbHNlLFxuICAgICAgfTtcbiAgICAgIG5ld1N0YXRlLmVkaXRpbmdEYXRhW2FjdGlvbi5zdHVkZW50SWRzW2ldXSA9IHtcbiAgICAgICAgLi4uc3RhdGUuZWRpdGluZ0RhdGFbYWN0aW9uLnN0dWRlbnRJZHNbaV1dLFxuICAgICAgICBpc1NhdmluZzogZmFsc2UsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH1cbiAgaWYgKGFjdGlvbi50eXBlID09PSBBRERfU1RVREVOVF9GVUxMKSB7XG4gICAgbGV0IG5ld1N0YXRlID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBhZGRTdGF0dXM6IHtcbiAgICAgICAgLi4uc3RhdGUuYWRkU3RhdHVzLFxuICAgICAgICBzdGF0dXM6IEFkZFN0YXR1cy5GVUxMLFxuICAgICAgICBudW1TdHVkZW50czogYWN0aW9uLm51bVN0dWRlbnRzLFxuICAgICAgICBzZWN0aW9uQ2FwYWNpdHk6IGFjdGlvbi5zZWN0aW9uQ2FwYWNpdHksXG4gICAgICAgIHNlY3Rpb25Db2RlOiBhY3Rpb24uc2VjdGlvbkNvZGUsXG4gICAgICAgIHNlY3Rpb25TdHVkZW50Q291bnQ6IGFjdGlvbi5zZWN0aW9uU3R1ZGVudENvdW50LFxuICAgICAgfSxcbiAgICB9O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0aW9uLnN0dWRlbnRJZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG5ld1N0YXRlLnN0dWRlbnREYXRhW2FjdGlvbi5zdHVkZW50SWRzW2ldXSA9IHtcbiAgICAgICAgLi4uc3RhdGUuc3R1ZGVudERhdGFbYWN0aW9uLnN0dWRlbnRJZHNbaV1dLFxuICAgICAgICBpc1NhdmluZzogZmFsc2UsXG4gICAgICB9O1xuICAgICAgbmV3U3RhdGUuZWRpdGluZ0RhdGFbYWN0aW9uLnN0dWRlbnRJZHNbaV1dID0ge1xuICAgICAgICAuLi5zdGF0ZS5lZGl0aW5nRGF0YVthY3Rpb24uc3R1ZGVudElkc1tpXV0sXG4gICAgICAgIGlzU2F2aW5nOiBmYWxzZSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuICBpZiAoYWN0aW9uLnR5cGUgPT09IEFERF9TVFVERU5UX1NVQ0NFU1MpIHtcbiAgICBsZXQgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHN0dWRlbnREYXRhOiB7XG4gICAgICAgIC4uLl8ub21pdChzdGF0ZS5zdHVkZW50RGF0YSwgYWN0aW9uLnJvd0lkcyksXG4gICAgICAgIC4uLmFjdGlvbi5zdHVkZW50RGF0YSxcbiAgICAgICAgW2FkZFJvd0lkXToge1xuICAgICAgICAgIC4uLmJsYW5rQWRkUm93LFxuICAgICAgICAgIGxvZ2luVHlwZTogc3RhdGUubG9naW5UeXBlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGVkaXRpbmdEYXRhOiB7XG4gICAgICAgIC4uLl8ub21pdChzdGF0ZS5lZGl0aW5nRGF0YSwgYWN0aW9uLnJvd0lkcyksXG4gICAgICAgIFthZGRSb3dJZF06IHtcbiAgICAgICAgICAuLi5ibGFua0FkZFJvdyxcbiAgICAgICAgICBsb2dpblR5cGU6IHN0YXRlLmxvZ2luVHlwZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBhZGRTdGF0dXM6IHtzdGF0dXM6IEFkZFN0YXR1cy5TVUNDRVNTLCBudW1TdHVkZW50czogYWN0aW9uLm51bVN0dWRlbnRzfSxcbiAgICB9O1xuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuICBpZiAoYWN0aW9uLnR5cGUgPT09IFNFVF9TSEFSSU5HX0RFRkFVTFQpIHtcbiAgICBjb25zdCBlZGl0ZWRBZ2UgPSBzdGF0ZS5lZGl0aW5nRGF0YVthY3Rpb24uc3R1ZGVudElkXS5hZ2U7XG4gICAgLy8gRm9yIHByaXZhY3kgcmVhc29ucywgd2UgZGlzYWJsZSBzaGFyaW5nIGJ5IGRlZmF1bHQgaWYgdGhlIHN0dWRlbnQgaXMgdW5kZXIgdGhlIGFnZSBvZiAxMy5cbiAgICBjb25zdCBzaGFyaW5nRGlzYWJsZWQgPSBlZGl0ZWRBZ2UgPCAxMztcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBlZGl0aW5nRGF0YToge1xuICAgICAgICAuLi5zdGF0ZS5lZGl0aW5nRGF0YSxcbiAgICAgICAgW2FjdGlvbi5zdHVkZW50SWRdOiB7XG4gICAgICAgICAgLi4uc3RhdGUuZWRpdGluZ0RhdGFbYWN0aW9uLnN0dWRlbnRJZF0sXG4gICAgICAgICAgaWQ6IGFjdGlvbi5zdHVkZW50SWQsXG4gICAgICAgICAgc2hhcmluZ0Rpc2FibGVkOiBzaGFyaW5nRGlzYWJsZWQsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH1cbiAgaWYgKGFjdGlvbi50eXBlID09PSBFRElUX1NUVURFTlQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBlZGl0aW5nRGF0YToge1xuICAgICAgICAuLi5zdGF0ZS5lZGl0aW5nRGF0YSxcbiAgICAgICAgW2FjdGlvbi5zdHVkZW50SWRdOiB7XG4gICAgICAgICAgLi4uc3RhdGUuZWRpdGluZ0RhdGFbYWN0aW9uLnN0dWRlbnRJZF0sXG4gICAgICAgICAgLi4uYWN0aW9uLnN0dWRlbnREYXRhLFxuICAgICAgICAgIGlkOiBhY3Rpb24uc3R1ZGVudElkLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG4gIGlmIChhY3Rpb24udHlwZSA9PT0gRURJVF9BTEwpIHtcbiAgICBsZXQgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICB9O1xuICAgIGZvciAoY29uc3Qgc3R1ZGVudEtleSBpbiBzdGF0ZS5zdHVkZW50RGF0YSkge1xuICAgICAgY29uc3Qgc3R1ZGVudCA9IHN0YXRlLnN0dWRlbnREYXRhW3N0dWRlbnRLZXldO1xuICAgICAgbmV3U3RhdGUuc3R1ZGVudERhdGFbc3R1ZGVudC5pZF0uaXNFZGl0aW5nID0gdHJ1ZTtcbiAgICAgIG5ld1N0YXRlLmVkaXRpbmdEYXRhW3N0dWRlbnQuaWRdID0ge1xuICAgICAgICAuLi5uZXdTdGF0ZS5zdHVkZW50RGF0YVtzdHVkZW50LmlkXSxcbiAgICAgICAgLi4uc3RhdGUuZWRpdGluZ0RhdGFbc3R1ZGVudC5pZF0sXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH1cbiAgaWYgKGFjdGlvbi50eXBlID09PSBCVUxLX1NFVCkge1xuICAgIGxldCBuZXdTdGF0ZSA9IHsuLi5zdGF0ZX07XG4gICAgZm9yIChjb25zdCBzdHVkZW50S2V5IGluIHN0YXRlLnN0dWRlbnREYXRhKSB7XG4gICAgICBjb25zdCBzdHVkZW50ID0gc3RhdGUuc3R1ZGVudERhdGFbc3R1ZGVudEtleV07XG4gICAgICBuZXdTdGF0ZS5zdHVkZW50RGF0YVtzdHVkZW50LmlkXS5pc0VkaXRpbmcgPSB0cnVlO1xuICAgICAgbmV3U3RhdGUuZWRpdGluZ0RhdGFbc3R1ZGVudC5pZF0gPSB7XG4gICAgICAgIC4uLm5ld1N0YXRlLnN0dWRlbnREYXRhW3N0dWRlbnQuaWRdLFxuICAgICAgICAuLi5zdGF0ZS5lZGl0aW5nRGF0YVtzdHVkZW50LmlkXSxcbiAgICAgICAgLi4uYWN0aW9uLnN0dWRlbnREYXRhLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG4gIGlmIChhY3Rpb24udHlwZSA9PT0gVVBEQVRFX0FMTF9TSEFSRV9TRVRUSU5HKSB7XG4gICAgbGV0IG5ld1N0YXRlID0ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IHN0dWRlbnRLZXkgaW4gc3RhdGUuc3R1ZGVudERhdGEpIHtcbiAgICAgIGNvbnN0IHN0dWRlbnQgPSBzdGF0ZS5zdHVkZW50RGF0YVtzdHVkZW50S2V5XTtcbiAgICAgIG5ld1N0YXRlLmVkaXRpbmdEYXRhW3N0dWRlbnQuaWRdLnNoYXJpbmdEaXNhYmxlZCA9IGFjdGlvbi5kaXNhYmxlO1xuICAgIH1cbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH1cbiAgaWYgKGFjdGlvbi50eXBlID09PSBTRVRfU0VDUkVUX0lNQUdFKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgc3R1ZGVudERhdGE6IHtcbiAgICAgICAgLi4uc3RhdGUuc3R1ZGVudERhdGEsXG4gICAgICAgIFthY3Rpb24uc3R1ZGVudElkXToge1xuICAgICAgICAgIC4uLnN0YXRlLnN0dWRlbnREYXRhW2FjdGlvbi5zdHVkZW50SWRdLFxuICAgICAgICAgIHNlY3JldFBpY3R1cmVQYXRoOiBhY3Rpb24uaW1hZ2UsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH1cbiAgaWYgKGFjdGlvbi50eXBlID09PSBTRVRfU0VDUkVUX1dPUkRTKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgc3R1ZGVudERhdGE6IHtcbiAgICAgICAgLi4uc3RhdGUuc3R1ZGVudERhdGEsXG4gICAgICAgIFthY3Rpb24uc3R1ZGVudElkXToge1xuICAgICAgICAgIC4uLnN0YXRlLnN0dWRlbnREYXRhW2FjdGlvbi5zdHVkZW50SWRdLFxuICAgICAgICAgIHNlY3JldFdvcmRzOiBhY3Rpb24ud29yZHMsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH1cbiAgaWYgKGFjdGlvbi50eXBlID09PSBSRU1PVkVfU1RVREVOVCkge1xuICAgIGNvbnN0IHN0dWRlbnRJZCA9IGFjdGlvbi5zdHVkZW50SWQ7XG4gICAgY29uc3Qgc3R1ZGVudCA9IHN0YXRlLnN0dWRlbnREYXRhW3N0dWRlbnRJZF07XG4gICAgaWYgKCFzdHVkZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0dWRlbnQgZG9lcyBub3QgZXhpc3QnKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgc3R1ZGVudERhdGE6IF8ub21pdChzdGF0ZS5zdHVkZW50RGF0YSwgc3R1ZGVudElkKSxcbiAgICAgIGVkaXRpbmdEYXRhOiBfLm9taXQoc3RhdGUuZWRpdGluZ0RhdGEsIHN0dWRlbnRJZCksXG4gICAgfTtcbiAgfVxuICBpZiAoYWN0aW9uLnR5cGUgPT09IEFERF9NVUxUSVBMRV9ST1dTKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgc3R1ZGVudERhdGE6IHtcbiAgICAgICAgLi4uc3RhdGUuc3R1ZGVudERhdGEsXG4gICAgICAgIC4uLmFjdGlvbi5zdHVkZW50RGF0YSxcbiAgICAgIH0sXG4gICAgICBlZGl0aW5nRGF0YToge1xuICAgICAgICAuLi5zdGF0ZS5lZGl0aW5nRGF0YSxcbiAgICAgICAgLi4uYWN0aW9uLnN0dWRlbnREYXRhLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG4gIGlmIChhY3Rpb24udHlwZSA9PT0gU0VUX1NIT1dfU0hBUklOR19DT0xVTU4pIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBzaG93U2hhcmluZ0NvbHVtbjogISFhY3Rpb24udmlzaWJsZSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGFjdGlvbi50eXBlID09PSBVUERBVEVfU1RVREVOVF9UUkFOU0ZFUikge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHRyYW5zZmVyRGF0YToge1xuICAgICAgICAuLi5zdGF0ZS50cmFuc2ZlckRhdGEsXG4gICAgICAgIC4uLmFjdGlvbi50cmFuc2ZlckRhdGEsXG4gICAgICB9LFxuICAgICAgLy8gY2xlYXIgYW55IHByZXZpb3VzIHN0YXR1cyBpZiB0cmFuc2ZlciBkYXRhIGhhcyBjaGFuZ2VkXG4gICAgICB0cmFuc2ZlclN0YXR1czogYmxhbmtTdHVkZW50VHJhbnNmZXJTdGF0dXMsXG4gICAgfTtcbiAgfVxuICBpZiAoYWN0aW9uLnR5cGUgPT09IENBTkNFTF9TVFVERU5UX1RSQU5TRkVSKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgdHJhbnNmZXJEYXRhOiBibGFua1N0dWRlbnRUcmFuc2ZlcixcbiAgICAgIHRyYW5zZmVyU3RhdHVzOiB7XG4gICAgICAgIC4uLnN0YXRlLnRyYW5zZmVyU3RhdHVzLFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuICBpZiAoYWN0aW9uLnR5cGUgPT09IFRSQU5TRkVSX1NUVURFTlRTX1NVQ0NFU1MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICB0cmFuc2ZlclN0YXR1czoge1xuICAgICAgICAuLi5zdGF0ZS50cmFuc2ZlclN0YXR1cyxcbiAgICAgICAgc3RhdHVzOiBUcmFuc2ZlclN0YXR1cy5TVUNDRVNTLFxuICAgICAgICB0eXBlOiBhY3Rpb24udHJhbnNmZXJUeXBlLFxuICAgICAgICBudW1TdHVkZW50czogYWN0aW9uLm51bVN0dWRlbnRzLFxuICAgICAgICBzZWN0aW9uRGlzcGxheTogYWN0aW9uLnNlY3Rpb25EaXNwbGF5LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG4gIGlmIChhY3Rpb24udHlwZSA9PT0gVFJBTlNGRVJfU1RVREVOVFNfRlVMTCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHRyYW5zZmVyU3RhdHVzOiB7XG4gICAgICAgIC4uLnN0YXRlLnRyYW5zZmVyU3RhdHVzLFxuICAgICAgICBzdGF0dXM6IFRyYW5zZmVyU3RhdHVzLkZVTEwsXG4gICAgICAgIHNlY3Rpb25DYXBhY2l0eTogYWN0aW9uLnNlY3Rpb25DYXBhY2l0eSxcbiAgICAgICAgbnVtU3R1ZGVudHM6IGFjdGlvbi5udW1TdHVkZW50cyxcbiAgICAgICAgc2VjdGlvbkNvZGU6IGFjdGlvbi5zZWN0aW9uQ29kZSxcbiAgICAgICAgc2VjdGlvblN0dWRlbnRDb3VudDogYWN0aW9uLnNlY3Rpb25TdHVkZW50Q291bnQsXG4gICAgICAgIHZlcmI6IGFjdGlvbi52ZXJiLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG4gIGlmIChhY3Rpb24udHlwZSA9PT0gVFJBTlNGRVJfU1RVREVOVFNfRkFJTFVSRSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHRyYW5zZmVyU3RhdHVzOiB7XG4gICAgICAgIC4uLnN0YXRlLnRyYW5zZmVyU3RhdHVzLFxuICAgICAgICBzdGF0dXM6IFRyYW5zZmVyU3RhdHVzLkZBSUwsXG4gICAgICAgIGVycm9yOiBhY3Rpb24uZXJyb3IsXG4gICAgICB9LFxuICAgIH07XG4gIH1cbiAgaWYgKGFjdGlvbi50eXBlID09PSBUUkFOU0ZFUl9TVFVERU5UU19QRU5ESU5HKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgdHJhbnNmZXJTdGF0dXM6IHtcbiAgICAgICAgLi4uc3RhdGUudHJhbnNmZXJTdGF0dXMsXG4gICAgICAgIHN0YXR1czogVHJhbnNmZXJTdGF0dXMuUEVORElORyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuICBpZiAoYWN0aW9uLnR5cGUgPT09IFNUQVJUX0xPQURJTkdfU1RVREVOVFMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBpc0xvYWRpbmdTdHVkZW50czogdHJ1ZSxcbiAgICB9O1xuICB9XG4gIGlmIChhY3Rpb24udHlwZSA9PT0gRklOSVNIX0xPQURJTkdfU1RVREVOVFMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBpc0xvYWRpbmdTdHVkZW50czogZmFsc2UsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldFN0dWRlbnRDb3VudCA9IHN0YXRlID0+IHtcbiAgY29uc3Qgc3R1ZGVudERhdGEgPSB7Li4uc3RhdGUubWFuYWdlU3R1ZGVudHMuc3R1ZGVudERhdGF9O1xuICAvLyBEZWxldGUgcGxhY2Vob2xkZXIgcm93IGZvciBhZGRpbmcgYSBzdHVkZW50IHdoZXJlIGlkIGlzIHNldCB0byAwLlxuICBkZWxldGUgc3R1ZGVudERhdGFbMF07XG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKHN0dWRlbnREYXRhKS5sZW5ndGg7XG59O1xuXG4vLyBDb252ZXJ0cyBkYXRhIGZyb20gL2Rhc2hib2FyZGFwaS9zZWN0aW9ucy9zZWN0aW9uaWQvc3R1ZGVudHMgdG8gYSBzZXQgb2Yga2V5L3ZhbHVlXG4vLyBvYmplY3RzIGZvciB0aGUgcmVkdXggc3RvcmVcbmV4cG9ydCBjb25zdCBjb252ZXJ0U3R1ZGVudFNlcnZlckRhdGEgPSAoc3R1ZGVudERhdGEsIGxvZ2luVHlwZSwgc2VjdGlvbklkKSA9PiB7XG4gIGxldCBzdHVkZW50TG9va3VwID0ge307XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3R1ZGVudERhdGEubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgc3R1ZGVudCA9IHN0dWRlbnREYXRhW2ldO1xuICAgIHN0dWRlbnRMb29rdXBbc3R1ZGVudC5pZF0gPSB7XG4gICAgICBpZDogc3R1ZGVudC5pZCxcbiAgICAgIG5hbWU6IHN0dWRlbnQubmFtZSxcbiAgICAgIGZhbWlseU5hbWU6IHN0dWRlbnQuZmFtaWx5X25hbWUsXG4gICAgICB1c2VybmFtZTogc3R1ZGVudC51c2VybmFtZSxcbiAgICAgIGVtYWlsOiBzdHVkZW50LmVtYWlsLFxuICAgICAgYWdlOiBzdHVkZW50LmFnZSB8fCAnJyxcbiAgICAgIGdlbmRlcjogc3R1ZGVudC5nZW5kZXIgfHwgJycsXG4gICAgICBnZW5kZXJUZWFjaGVySW5wdXQ6IHN0dWRlbnQuZ2VuZGVyX3RlYWNoZXJfaW5wdXQgfHwgJycsXG4gICAgICBzZWNyZXRXb3Jkczogc3R1ZGVudC5zZWNyZXRfd29yZHMsXG4gICAgICBzZWNyZXRQaWN0dXJlUGF0aDogc3R1ZGVudC5zZWNyZXRfcGljdHVyZV9wYXRoLFxuICAgICAgbG9naW5UeXBlOiBsb2dpblR5cGUsXG4gICAgICBzZWN0aW9uSWQ6IHNlY3Rpb25JZCxcbiAgICAgIHNoYXJpbmdEaXNhYmxlZDogc3R1ZGVudC5zaGFyaW5nX2Rpc2FibGVkLFxuICAgICAgaGFzRXZlclNpZ25lZEluOiBzdHVkZW50Lmhhc19ldmVyX3NpZ25lZF9pbixcbiAgICAgIGRlcGVuZHNPblRoaXNTZWN0aW9uRm9yTG9naW46IHN0dWRlbnQuZGVwZW5kc19vbl90aGlzX3NlY3Rpb25fZm9yX2xvZ2luLFxuICAgICAgaXNFZGl0aW5nOiBmYWxzZSxcbiAgICAgIGlzU2F2aW5nOiBmYWxzZSxcbiAgICAgIHJvd1R5cGU6IFJvd1R5cGUuU1RVREVOVCxcbiAgICAgIHVzZXJUeXBlOiBzdHVkZW50LnVzZXJfdHlwZSxcbiAgICAgIGF0Umlza0FnZUdhdGVkRGF0ZTogc3R1ZGVudC5hdF9yaXNrX2FnZV9nYXRlZF9kYXRlXG4gICAgICAgID8gbmV3IERhdGUoc3R1ZGVudC5hdF9yaXNrX2FnZV9nYXRlZF9kYXRlKVxuICAgICAgICA6IG51bGwsXG4gICAgICBjaGlsZEFjY291bnRDb21wbGlhbmNlU3RhdGU6IHN0dWRlbnQuY2hpbGRfYWNjb3VudF9jb21wbGlhbmNlX3N0YXRlLFxuICAgICAgbGF0ZXN0UGVybWlzc2lvblJlcXVlc3RTZW50QXQ6XG4gICAgICAgIHN0dWRlbnQubGF0ZXN0X3Blcm1pc3Npb25fcmVxdWVzdF9zZW50X2F0ICYmXG4gICAgICAgIG5ldyBEYXRlKHN0dWRlbnQubGF0ZXN0X3Blcm1pc3Npb25fcmVxdWVzdF9zZW50X2F0KSxcbiAgICAgIHVzU3RhdGU6IHN0dWRlbnQudXNfc3RhdGUsXG4gICAgfTtcbiAgfVxuICByZXR1cm4gc3R1ZGVudExvb2t1cDtcbn07XG5cbi8vIENvbnZlcnRzIGtleS92YWx1ZSBpZC9zdHVkZW50IHBhaXJzIHRvIGFuIGFycmF5IG9mIHN0dWRlbnQgb2JqZWN0cyBmb3IgdGhlXG4vLyBjb21wb25lbnQgdG8gZGlzcGxheVxuZXhwb3J0IGNvbnN0IGNvbnZlcnRTdHVkZW50RGF0YVRvQXJyYXkgPSBzdHVkZW50RGF0YSA9PiB7XG4gIHJldHVybiBPYmplY3QudmFsdWVzKHN0dWRlbnREYXRhKS5yZXZlcnNlKCk7XG59O1xuXG4vLyBNYWtlIGEgcG9zdCByZXF1ZXN0IHRvIGVkaXQgYSBzdHVkZW50LlxuY29uc3QgdXBkYXRlU3R1ZGVudE9uU2VydmVyID0gKHVwZGF0ZWRTdHVkZW50SW5mbywgc2VjdGlvbklkLCBvbkNvbXBsZXRlKSA9PiB7XG4gIGNvbnN0IGRhdGFUb1VwZGF0ZSA9IHtcbiAgICBzdHVkZW50OiB7XG4gICAgICBpZDogdXBkYXRlZFN0dWRlbnRJbmZvLmlkLFxuICAgICAgbmFtZTogdXBkYXRlZFN0dWRlbnRJbmZvLm5hbWUsXG4gICAgICBmYW1pbHlfbmFtZTogdXBkYXRlZFN0dWRlbnRJbmZvLmZhbWlseU5hbWUsXG4gICAgICBhZ2U6IHVwZGF0ZWRTdHVkZW50SW5mby5hZ2UsXG4gICAgICBnZW5kZXI6IHVwZGF0ZWRTdHVkZW50SW5mby5nZW5kZXIsXG4gICAgICBnZW5kZXJfdGVhY2hlcl9pbnB1dDogdXBkYXRlZFN0dWRlbnRJbmZvLmdlbmRlclRlYWNoZXJJbnB1dCxcbiAgICAgIHNoYXJpbmdfZGlzYWJsZWQ6IHVwZGF0ZWRTdHVkZW50SW5mby5zaGFyaW5nRGlzYWJsZWQsXG4gICAgICB1c19zdGF0ZTogdXBkYXRlZFN0dWRlbnRJbmZvLnVzU3RhdGUsXG4gICAgfSxcbiAgfTtcbiAgJC5hamF4KHtcbiAgICB1cmw6IGAvZGFzaGJvYXJkYXBpL3NlY3Rpb25zLyR7c2VjdGlvbklkfS9zdHVkZW50cy8ke2RhdGFUb1VwZGF0ZS5zdHVkZW50LmlkfWAsXG4gICAgbWV0aG9kOiAnUEFUQ0gnLFxuICAgIHR5cGU6ICdqc29uJyxcbiAgICBjb250ZW50VHlwZTogJ2FwcGxpY2F0aW9uL2pzb247Y2hhcnNldD1VVEYtOCcsXG4gICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoZGF0YVRvVXBkYXRlKSxcbiAgfSlcbiAgICAuZG9uZShkYXRhID0+IHtcbiAgICAgIG9uQ29tcGxldGUobnVsbCwgZGF0YSk7XG4gICAgfSlcbiAgICAuZmFpbCgoanFYaHIsIHN0YXR1cykgPT4ge1xuICAgICAgb25Db21wbGV0ZShzdGF0dXMsIG51bGwpO1xuICAgIH0pO1xufTtcblxuLy8gTWFrZSBhIHBvc3QgcmVxdWVzdCB0byBhZGQgc3R1ZGVudHMuXG5jb25zdCBhZGRTdHVkZW50T25TZXJ2ZXIgPSAodXBkYXRlZFN0dWRlbnRzSW5mbywgc2VjdGlvbklkLCBvbkNvbXBsZXRlKSA9PiB7XG4gIGNvbnN0IHN0dWRlbnRzVG9BZGQgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB1cGRhdGVkU3R1ZGVudHNJbmZvLmxlbmd0aDsgaSsrKSB7XG4gICAgc3R1ZGVudHNUb0FkZFtpXSA9IHtcbiAgICAgIGVkaXRpbmc6IHRydWUsXG4gICAgICBuYW1lOiB1cGRhdGVkU3R1ZGVudHNJbmZvW2ldLm5hbWUsXG4gICAgICBmYW1pbHlfbmFtZTogdXBkYXRlZFN0dWRlbnRzSW5mb1tpXS5mYW1pbHlOYW1lLFxuICAgICAgYWdlOiB1cGRhdGVkU3R1ZGVudHNJbmZvW2ldLmFnZSxcbiAgICAgIGdlbmRlcjogdXBkYXRlZFN0dWRlbnRzSW5mb1tpXS5nZW5kZXIsXG4gICAgICBnZW5kZXJfdGVhY2hlcl9pbnB1dDogdXBkYXRlZFN0dWRlbnRzSW5mb1tpXS5nZW5kZXJUZWFjaGVySW5wdXQsXG4gICAgICBzaGFyaW5nX2Rpc2FibGVkOiB1cGRhdGVkU3R1ZGVudHNJbmZvW2ldLnNoYXJpbmdEaXNhYmxlZCxcbiAgICAgIHVzX3N0YXRlOiB1cGRhdGVkU3R1ZGVudHNJbmZvW2ldLnVzU3RhdGUsXG4gICAgfTtcbiAgfVxuICBjb25zdCBzdHVkZW50cyA9IHtcbiAgICBzdHVkZW50czogc3R1ZGVudHNUb0FkZCxcbiAgfTtcbiAgJC5hamF4KHtcbiAgICB1cmw6IGAvZGFzaGJvYXJkYXBpL3NlY3Rpb25zLyR7c2VjdGlvbklkfS9zdHVkZW50cy9idWxrX2FkZGAsXG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgY29udGVudFR5cGU6ICdhcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9VVRGLTgnLFxuICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHN0dWRlbnRzKSxcbiAgfSlcbiAgICAuZG9uZShkYXRhID0+IHtcbiAgICAgIG9uQ29tcGxldGUobnVsbCwgZGF0YSk7XG4gICAgfSlcbiAgICAuZmFpbCgoanFYaHIsIHN0YXR1cykgPT4ge1xuICAgICAgb25Db21wbGV0ZShzdGF0dXMsIGpxWGhyLnJlc3BvbnNlSlNPTiB8fCBudWxsKTtcbiAgICB9KTtcbn07XG5cbi8vIE1ha2UgYSBwb3N0IHJlcXVlc3QgdG8gdHJhbnNmZXIgc3R1ZGVudHMuXG5jb25zdCB0cmFuc2ZlclN0dWRlbnRzT25TZXJ2ZXIgPSAoXG4gIHN0dWRlbnRJZHMsXG4gIGN1cnJlbnRTZWN0aW9uQ29kZSxcbiAgbmV3U2VjdGlvbkNvZGUsXG4gIHN0YXlFbnJvbGxlZEluQ3VycmVudFNlY3Rpb24sXG4gIG9uQ29tcGxldGVcbikgPT4ge1xuICBjb25zdCBwYXlsb2FkID0ge1xuICAgIHN0dWRlbnRfaWRzOiBzdHVkZW50SWRzLFxuICAgIGN1cnJlbnRfc2VjdGlvbl9jb2RlOiBjdXJyZW50U2VjdGlvbkNvZGUsXG4gICAgbmV3X3NlY3Rpb25fY29kZTogbmV3U2VjdGlvbkNvZGUsXG4gICAgc3RheV9lbnJvbGxlZF9pbl9jdXJyZW50X3NlY3Rpb246IHN0YXlFbnJvbGxlZEluQ3VycmVudFNlY3Rpb24sXG4gIH07XG4gICQuYWpheCh7XG4gICAgdXJsOiAnL2Rhc2hib2FyZGFwaS9zZWN0aW9ucy90cmFuc2ZlcnMnLFxuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGNvbnRlbnRUeXBlOiAnYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PVVURi04JyxcbiAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShwYXlsb2FkKSxcbiAgfSlcbiAgICAuZG9uZShkYXRhID0+IHtcbiAgICAgIG9uQ29tcGxldGUobnVsbCwgZGF0YSk7XG4gICAgfSlcbiAgICAuZmFpbCgoanFYaHIsIHN0YXR1cykgPT4ge1xuICAgICAgb25Db21wbGV0ZShzdGF0dXMsIGpxWGhyLnJlc3BvbnNlSlNPTik7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgbG9hZFNlY3Rpb25TdHVkZW50RGF0YSA9IHNlY3Rpb25JZCA9PiB7XG4gIHJldHVybiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXRTdGF0ZSgpLm1hbmFnZVN0dWRlbnRzO1xuICAgIGxldCBvbGRTZWN0aW9uSWQgPSBzdGF0ZS5zZWN0aW9uSWQ7XG5cbiAgICAvLyBMb2FkIGRhdGEgb25seSBpZiBzZWN0aW9uIElkIGRvZXNuJ3QgYWxyZWFkeSBtYXRjaFxuICAgIGlmIChzdGF0ZS5zZWN0aW9uSWQgIT09IHNlY3Rpb25JZCkge1xuICAgICAgLy8gU2V0IHNlY3Rpb24gSUQgdG8gaW5kaWNhdGUgc3R1ZGVudCBkYXRhIGZvciBjdXJyZW50IHNlY3Rpb24uXG4gICAgICBkaXNwYXRjaChzZXRTZWN0aW9uSW5mbyhzZWN0aW9uSWQpKTtcbiAgICAgIGRpc3BhdGNoKHN0YXJ0TG9hZGluZ1N0dWRlbnRzKCkpO1xuICAgICAgJC5hamF4KHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgdXJsOiBgL2Rhc2hib2FyZGFwaS9zZWN0aW9ucy8ke3NlY3Rpb25JZH0vc3R1ZGVudHNgLFxuICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxuICAgICAgfSlcbiAgICAgICAgLmRvbmUoc3R1ZGVudERhdGEgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZFN0dWRlbnREYXRhID0gY29udmVydFN0dWRlbnRTZXJ2ZXJEYXRhKFxuICAgICAgICAgICAgc3R1ZGVudERhdGEsXG4gICAgICAgICAgICBzdGF0ZS5sb2dpblR5cGUsXG4gICAgICAgICAgICBzZWN0aW9uSWRcbiAgICAgICAgICApO1xuICAgICAgICAgIGRpc3BhdGNoKHNldFN0dWRlbnRzKGNvbnZlcnRlZFN0dWRlbnREYXRhKSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5mYWlsKCgpID0+IHtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gb2xkIHNlY3Rpb24gSUQgaW4gY2FzZSBvZiBmYWlsdXJlIHRvIGJhY2tlbmQgY2FsbFxuICAgICAgICAgIGRpc3BhdGNoKHNldFNlY3Rpb25JbmZvKG9sZFNlY3Rpb25JZCkpO1xuICAgICAgICAgIGRpc3BhdGNoKGZpbmlzaExvYWRpbmdTdHVkZW50cygpKTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpc3BhdGNoKGZpbmlzaExvYWRpbmdTdHVkZW50cygpKTtcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIEZpbHRlcnMgYW4gYXJyYXkgb2Ygc3R1ZGVudHMgYnkgdGhlIHByZXNlbmNlIG9mIGFuICdhdFJpc2tBZ2VHYXRlZERhdGUnIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IHN0dWRlbnRzIC0gVGhlIGFycmF5IG9mIHN0dWRlbnRzIHRvIGZpbHRlci5cbiAqIEByZXR1cm5zIHtBcnJheX0gLSBBbiBhcnJheSBvZiBzdHVkZW50cyB0aGF0IGhhdmUgdGhlICdhdFJpc2tBZ2VHYXRlZERhdGUnIHByb3BlcnR5LlxuICovXG5leHBvcnQgY29uc3QgZmlsdGVyQWdlR2F0ZWRTdHVkZW50cyA9IHN0dWRlbnRzID0+IHtcbiAgcmV0dXJuIHN0dWRlbnRzLmZpbHRlcihzdHVkZW50ID0+IHN0dWRlbnQuYXRSaXNrQWdlR2F0ZWREYXRlKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYXQtcmlzayBhZ2UgZ2F0ZWQgZGF0ZSBmb3IgdGhlIHNlbGVjdGVkIHN0dWRlbnRzLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IHN0dWRlbnRzIC0gVGhlIGFycmF5IG9mIHN0dWRlbnQgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtEYXRlfSBUaGUgYXQtcmlzayBhZ2UgZ2F0ZWQgZGF0ZSBmb3IgdGhlIHNlbGVjdGVkIHN0dWRlbnRzLCBvciB1bmRlZmluZWQgaWYgbm8gc3R1ZGVudHMgYXJlIGZvdW5kIG9yIG5vIGF0LXJpc2sgZGF0ZSBpcyBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBjb25zdCBzZWxlY3RBdFJpc2tBZ2VHYXRlZERhdGUgPSBzdHVkZW50cyA9PiB7XG4gIHJldHVybiBmaWx0ZXJBZ2VHYXRlZFN0dWRlbnRzKHN0dWRlbnRzKVswXT8uYXRSaXNrQWdlR2F0ZWREYXRlO1xufTtcbiJdLCJuYW1lcyI6WyJtYW5hZ2VTdHVkZW50cyIsInN0YXRlIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiaW5pdGlhbFN0YXRlIiwiYWN0aW9uIiwidHlwZSIsIlNFVF9MT0dJTl9UWVBFIiwiYWRkUm93SW5pdGlhbGl6YXRpb24iLCJsb2dpblR5cGUiLCJTZWN0aW9uTG9naW5UeXBlIiwid29yZCIsInBpY3R1cmUiLCJzdHVkZW50RGF0YSIsIl9kZWZpbmVQcm9wZXJ0eSIsImFkZFJvd0lkIiwiX29iamVjdFNwcmVhZCIsImJsYW5rQWRkUm93IiwiZWRpdGluZ0RhdGEiLCJTRVRfU1RVREVOVFMiLCJhZGRTdGF0dXMiLCJzdGF0dXMiLCJudW1TdHVkZW50cyIsImlzTG9hZGluZ1N0dWRlbnRzIiwiU0VUX1NFQ1RJT05fSU5GTyIsInNlY3Rpb25JZCIsIlNUQVJUX0VESVRJTkdfU1RVREVOVCIsInN0dWRlbnRJZCIsImlzRWRpdGluZyIsImlkIiwiQ0FOQ0VMX0VESVRJTkdfU1RVREVOVCIsIl8iLCJvbWl0IiwiU1RBUlRfU0FWSU5HX1NUVURFTlQiLCJpc1NhdmluZyIsIlNBVkVfU1RVREVOVF9TVUNDRVNTIiwicm93VHlwZSIsIlJvd1R5cGUiLCJTVFVERU5UIiwiQUREX1NUVURFTlRfRkFJTFVSRSIsIm5ld1N0YXRlIiwiQWRkU3RhdHVzIiwiRkFJTCIsImkiLCJzdHVkZW50SWRzIiwiQUREX1NUVURFTlRfRlVMTCIsIkZVTEwiLCJzZWN0aW9uQ2FwYWNpdHkiLCJzZWN0aW9uQ29kZSIsInNlY3Rpb25TdHVkZW50Q291bnQiLCJBRERfU1RVREVOVF9TVUNDRVNTIiwicm93SWRzIiwiU1VDQ0VTUyIsIlNFVF9TSEFSSU5HX0RFRkFVTFQiLCJzaGFyaW5nRGlzYWJsZWQiLCJhZ2UiLCJFRElUX1NUVURFTlQiLCJFRElUX0FMTCIsInN0dWRlbnRLZXkiLCJzdHVkZW50IiwiQlVMS19TRVQiLCJVUERBVEVfQUxMX1NIQVJFX1NFVFRJTkciLCJkaXNhYmxlIiwiU0VUX1NFQ1JFVF9JTUFHRSIsInNlY3JldFBpY3R1cmVQYXRoIiwiaW1hZ2UiLCJTRVRfU0VDUkVUX1dPUkRTIiwic2VjcmV0V29yZHMiLCJ3b3JkcyIsIlJFTU9WRV9TVFVERU5UIiwiRXJyb3IiLCJBRERfTVVMVElQTEVfUk9XUyIsIlNFVF9TSE9XX1NIQVJJTkdfQ09MVU1OIiwic2hvd1NoYXJpbmdDb2x1bW4iLCJ2aXNpYmxlIiwiVVBEQVRFX1NUVURFTlRfVFJBTlNGRVIiLCJ0cmFuc2ZlckRhdGEiLCJ0cmFuc2ZlclN0YXR1cyIsImJsYW5rU3R1ZGVudFRyYW5zZmVyU3RhdHVzIiwiQ0FOQ0VMX1NUVURFTlRfVFJBTlNGRVIiLCJibGFua1N0dWRlbnRUcmFuc2ZlciIsImVycm9yIiwiVFJBTlNGRVJfU1RVREVOVFNfU1VDQ0VTUyIsIlRyYW5zZmVyU3RhdHVzIiwidHJhbnNmZXJUeXBlIiwic2VjdGlvbkRpc3BsYXkiLCJUUkFOU0ZFUl9TVFVERU5UU19GVUxMIiwidmVyYiIsIlRSQU5TRkVSX1NUVURFTlRTX0ZBSUxVUkUiLCJUUkFOU0ZFUl9TVFVERU5UU19QRU5ESU5HIiwiUEVORElORyIsIlNUQVJUX0xPQURJTkdfU1RVREVOVFMiLCJGSU5JU0hfTE9BRElOR19TVFVERU5UUyIsIl9qcXVlcnkiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9sb2Rhc2giLCJfdGVhY2hlclNlY3Rpb25zUmVkdXgiLCJfdGVhY2hlclNlY3Rpb25zUmVkdXhTZWxlY3RvcnMiLCJfc2hhcmVkQ29uc3RhbnRzIiwiZSIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJvd25LZXlzIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsImZvckVhY2giLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX3RvUHJvcGVydHlLZXkiLCJfdG9QcmltaXRpdmUiLCJ0b1ByaW1pdGl2ZSIsImNhbGwiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiZXhwb3J0cyIsIkFCT1ZFX1RBQkxFIiwiQkVMT1dfVEFCTEUiLCJNQU5BR0VfU1RVREVOVFMiLCJMT0dJTl9JTkZPIiwiQUREIiwiTkVXX1NUVURFTlQiLCJUcmFuc2ZlclR5cGUiLCJNT1ZFX1NUVURFTlRTIiwiQ09QWV9TVFVERU5UUyIsIm90aGVyVGVhY2hlciIsIm90aGVyVGVhY2hlclNlY3Rpb24iLCJjb3B5U3R1ZGVudHMiLCJhZGRSb3dJZENvdW50ZXIiLCJuYW1lIiwiZ2VuZGVyIiwidXNlcm5hbWUiLCJ1c1N0YXRlIiwiYmxhbmtOZXdTdHVkZW50Um93Iiwic3RhcnRMb2FkaW5nU3R1ZGVudHMiLCJmaW5pc2hMb2FkaW5nU3R1ZGVudHMiLCJzZXRTdHVkZW50cyIsInNldExvZ2luVHlwZSIsInNldFNlY3Rpb25JbmZvIiwicmVtb3ZlU3R1ZGVudCIsInN0YXJ0RWRpdGluZ1N0dWRlbnQiLCJjYW5jZWxFZGl0aW5nU3R1ZGVudCIsImVkaXRBbGwiLCJzZXRTZWNyZXRJbWFnZSIsInNldFNlY3JldFdvcmRzIiwiZWRpdFN0dWRlbnQiLCJzZXRTaGFyaW5nRGVmYXVsdCIsInVwZGF0ZUFsbFNoYXJlU2V0dGluZyIsImJ1bGtTZXQiLCJzdGFydFNhdmluZ1N0dWRlbnQiLCJzYXZlU3R1ZGVudFN1Y2Nlc3MiLCJ0cmFuc2ZlclN0dWRlbnRzU3VjY2VzcyIsInVwZGF0ZVN0dWRlbnRUcmFuc2ZlciIsImNhbmNlbFN0dWRlbnRUcmFuc2ZlciIsInRyYW5zZmVyU3R1ZGVudHNGYWlsdXJlIiwidHJhbnNmZXJTdHVkZW50c1BlbmRpbmciLCJ0cmFuc2ZlclN0dWRlbnRzRnVsbCIsIl9yZWYiLCJjb3B5IiwiYWRkU3R1ZGVudHNTdWNjZXNzIiwiYWRkU3R1ZGVudHNGYWlsdXJlIiwiYWRkU3R1ZGVudHNGdWxsIiwiX3JlZjIiLCJhZGRNdWx0aXBsZVJvd3MiLCJzYXZlU3R1ZGVudCIsInNldFNob3dTaGFyaW5nQ29sdW1uIiwiaGFuZGxlU2hhcmVTZXR0aW5nIiwiZGlzcGF0Y2giLCJnZXRTdGF0ZSIsInRlYWNoZXJTZWN0aW9ucyIsInNlbGVjdGVkU2VjdGlvbklkIiwidXBkYXRlU3R1ZGVudE9uU2VydmVyIiwiZGF0YSIsImNvbnNvbGUiLCJhc3luY0xvYWRTZWN0aW9uRGF0YSIsImFkZFN0dWRlbnRzIiwic2F2ZUFsbFN0dWRlbnRzIiwidmFsdWVzIiwibmV3U3R1ZGVudHNUb0FkZCIsIm1hcCIsIm51bVN0dWRlbnRzVG9BZGQiLCJmaWx0ZXJlZERhdGEiLCJpbmNsdWRlcyIsImFkZFN0dWRlbnRPblNlcnZlciIsInJlc3VsdCIsImNvbnZlcnRTdHVkZW50U2VydmVyRGF0YSIsImFkZE11bHRpcGxlQWRkUm93cyIsInN0dWRlbnREYXRhQXJyYXkiLCJyZWR1Y2UiLCJhY2N1bXVsYXRvciIsIm5ld0lkIiwiZmFtaWx5TmFtZSIsInRyYW5zZmVyU3R1ZGVudHMiLCJvbkNvbXBsZXRlIiwibmV3U2VjdGlvbkNvZGUiLCJjdXJyZW50U2VjdGlvbkNvZGUiLCJfc3RhdGUkbWFuYWdlU3R1ZGVudHMiLCJuZXdTZWN0aW9uSWQiLCJ0cmFuc2ZlclN0dWRlbnRzT25TZXJ2ZXIiLCJzZWN0aW9uTmFtZSIsImdldFN0dWRlbnRDb3VudCIsInN0dWRlbnRMb29rdXAiLCJmYW1pbHlfbmFtZSIsImVtYWlsIiwiZ2VuZGVyVGVhY2hlcklucHV0IiwiZ2VuZGVyX3RlYWNoZXJfaW5wdXQiLCJzZWNyZXRfd29yZHMiLCJzZWNyZXRfcGljdHVyZV9wYXRoIiwic2hhcmluZ19kaXNhYmxlZCIsImhhc0V2ZXJTaWduZWRJbiIsImhhc19ldmVyX3NpZ25lZF9pbiIsImRlcGVuZHNPblRoaXNTZWN0aW9uRm9yTG9naW4iLCJkZXBlbmRzX29uX3RoaXNfc2VjdGlvbl9mb3JfbG9naW4iLCJ1c2VyVHlwZSIsInVzZXJfdHlwZSIsImF0Umlza0FnZUdhdGVkRGF0ZSIsImF0X3Jpc2tfYWdlX2dhdGVkX2RhdGUiLCJEYXRlIiwiY2hpbGRBY2NvdW50Q29tcGxpYW5jZVN0YXRlIiwiY2hpbGRfYWNjb3VudF9jb21wbGlhbmNlX3N0YXRlIiwibGF0ZXN0UGVybWlzc2lvblJlcXVlc3RTZW50QXQiLCJsYXRlc3RfcGVybWlzc2lvbl9yZXF1ZXN0X3NlbnRfYXQiLCJ1c19zdGF0ZSIsImNvbnZlcnRTdHVkZW50RGF0YVRvQXJyYXkiLCJyZXZlcnNlIiwidXBkYXRlZFN0dWRlbnRJbmZvIiwiZGF0YVRvVXBkYXRlIiwiJCIsImFqYXgiLCJ1cmwiLCJjb25jYXQiLCJtZXRob2QiLCJjb250ZW50VHlwZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJkb25lIiwiZmFpbCIsImpxWGhyIiwidXBkYXRlZFN0dWRlbnRzSW5mbyIsInN0dWRlbnRzVG9BZGQiLCJlZGl0aW5nIiwic3R1ZGVudHMiLCJyZXNwb25zZUpTT04iLCJzdGF5RW5yb2xsZWRJbkN1cnJlbnRTZWN0aW9uIiwicGF5bG9hZCIsInN0dWRlbnRfaWRzIiwiY3VycmVudF9zZWN0aW9uX2NvZGUiLCJuZXdfc2VjdGlvbl9jb2RlIiwic3RheV9lbnJvbGxlZF9pbl9jdXJyZW50X3NlY3Rpb24iLCJmaWx0ZXJBZ2VHYXRlZFN0dWRlbnRzIiwibG9hZFNlY3Rpb25TdHVkZW50RGF0YSIsIm9sZFNlY3Rpb25JZCIsImRhdGFUeXBlIiwiY29udmVydGVkU3R1ZGVudERhdGEiLCJzZWxlY3RBdFJpc2tBZ2VHYXRlZERhdGUiLCJfZmlsdGVyQWdlR2F0ZWRTdHVkZW4iXSwic291cmNlUm9vdCI6IiJ9