@palerock/exam-qa 1.0.4 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["webpack:///./src/App.vue?2b06","webpack:///./src/App.vue","webpack:///src/App.vue","webpack:///./src/utils/index.js","webpack:///./src/db/index.js","webpack:///./src/dao/index.js","webpack:///./src/config/index.js","webpack:///src/components/home-pages/HomeIndex.vue","webpack:///./src/components/home-pages/HomeIndex.vue?f9ed","webpack:///./src/components/home-pages/HomeIndex.vue","webpack:///src/components/HelloWorld.vue","webpack:///./src/components/HelloWorld.vue?3534","webpack:///./src/components/HelloWorld.vue","webpack:///src/components/HomePage.vue","webpack:///./src/components/HomePage.vue?7fc5","webpack:///./src/components/HomePage.vue","webpack:///src/components/exam/DoExamPage.vue","webpack:///./src/components/exam/DoExamPage.vue?3d1a","webpack:///./src/components/exam/DoExamPage.vue","webpack:///./src/router/index.js","webpack:///./src/plugins/index.js","webpack:///./src/main.js"],"names":["selectortype_template_index_0_src_App","render","_h","this","$createElement","_c","_self","attrs","id","name","direction","staticClass","staticRenderFns","src_App","__webpack_require__","normalizeComponent","data","watch","$route","to","from","toDepth","path","split","length","fromDepth","ssrContext","utils","getHashCode","obj","getStrHashCode","getMessage","concat","getPropertyNames","join","_this","deep","arguments","undefined","includes","typeof_default","Date","flat","entries_default","map","_ref","_ref2","slicedToArray_default","key","value","filter","r","_this2","toString","keys_default","str","i","len","hash","charCodeAt","arr","Infinity","ret","dirty","forEach","item","is_array_default","push","apply","toConsumableArray_default","fromEntries","result","a","Array","storage","getItem","itemStr","localStorage","JSON","parse","e","console","log","setItem","stringify_default","removeItem","groupArray","groupedBy","_this3","array","hashCode","checkedMap","checkItem","Object","groupBy","_objectSpread","checkedHashCode","hashArr","find","values_default","duplicateRemoval","g","randomSort","sort","Math","random","dexieDB","Dexie","version","stores","config","question","bank","historyRecord","configDB","questionDB","bankDB","historyRecordDB","BaseDao","db","defaultEntry","classCallCheck_default","hook","primKey","createDate","now_default","modifyDate","changed","origin","dao__objectSpread","records","bulkPut","put","field","where","query","equals","first","keys","bulkDelete","delete","ConfigDao","possibleConstructorReturn_default","getPrototypeOf_default","call","QuestionDao","describe","type","BankDao","title","questions","HistoryRecordDao","rightTimes","errorTimes","maxTime","minTime","totalTime","hashCodeList","anyOf","toArray","configDao","questionDao","bankDao","historyRecordDao","vue_esm","use","dialog","cell","cell_group","es_button","popup","grid","grid_item","es_checkbox","checkbox_group","existsMap","HomeIndex","isShowImporter","isShowOption","isFromOnline","onlineLibs","onlineSelects","questionLib","examList","currentCategory","categories","optionInfo","canReviewError","canDoExam","canClear","computed","selectedLibs","res","lib","HomeIndex__objectSpread","inCategory","methods","doExam","isReviewError","dao_bankDao","then","exam","promise_default","all","q","toArray_default","slice","$router","params","examConfig","alert","message","clearHistory","queryByHashCode","initExamList","showOption","hasHistoryError","selectLib","s","showImporter","importFromExist","_this4","fetchOnlineLib","catch","_fetchOnlineLib","asyncToGenerator_default","regenerator_default","mark","_callee","maps","promises","_this5","wrap","_context","prev","next","$http","get","t0","sent","exist","abrupt","stop","importLib","_importLib","_callee3","_this6","_context3","_ref3","_callee2","l","_context2","importSingleLib","_x","_importSingleLib","_callee4","_context4","upsert","_x2","intoCategory","_intoCategory","_callee5","category","_this7","_args5","_context5","notEqual","banks","sortBy","errorMap","record","relatedQuestion","times","b","_initExamList","_callee6","_this8","_context6","reduce","ac","syncDataToIndexDB","exams","questionSet","historyRecords","_ref4","_ref5","_ref5$","mounted","home_pages_HomeIndex","_vm","icon","clickable","on","click","$event","slot","_v","_l","_s","model","callback","$$v","expression","staticStyle","max-height","overflow-y","oi","_e","label","placeholder","rows","size","block","position","components_home_pages_HomeIndex","HomeIndex_normalizeComponent","components_HelloWorld","HelloWorld_normalizeComponent","msg","nav_bar","tabbar","tabbar_item","HomePage","activeTabIndex","pages","api","activePage","components_HomePage","fixed","tag","color","width","page","src_components_HomePage","HomePage_normalizeComponent","row","col","radio_group","es_radio","defaultQuestionInfo","required","score","usingScore","answerOptions","isRight","defaultExamInfo","panel","DoExamPage","answers","questionNum","isShowResult","letterIndex","examInfo","hasSubmit","examHashCode","historyExams","showAcButtons","totalNum","historyErrorHashCodes","DoExamPage__objectSpread","active","questionsInfo","results","single","multi","apis","answer","orderNum","isMulti","opt","getQuestionTitle","getQuestionDesc","errorExam","totalTimes","toFixed","setAnswer","ai","toggleAnswer","checkResult","rightAnswers","option","isMistake","isAnswered","isChecked","isPass","turnTo","confirmSubmit","confirm","submit","answeredNum","requireAllDone","rightNum","rightRate","codeInfo","adaptExamConfig","checkNoAnswer","resultAnswers","checks","invalid","loadHistoryExamInfo","getOptionColor","isPractice","queryMany","swipe","evt","props","default","Boolean","isNew","plus","device","setWakelock","destroyed","exam_DoExamPage","directives","rawName","arg","left-arrow","right-text","click-left","back","click-right","stopPropagation","span","class","exam-right","exam-error","exam-current","style","dblclick","desc","$set","right-answer","error-answer","custom-title","checked-color","components_exam_DoExamPage","DoExamPage_normalizeComponent","Vue","Router","router","routes","component","AlloyFingerPlugin","AlloyFinger","prototype","axios","jsonp","Utils","define_property_default","enumerable","productionTip","el","components","App","template"],"mappings":"kRAGeA,GADEC,OAFjB,WAA0B,IAAaC,EAAbC,KAAaC,eAA0BC,EAAvCF,KAAuCG,MAAAD,IAAAH,EAAwB,OAAAG,EAAA,OAAiBE,OAAOC,GAAA,SAAYH,EAAA,cAAmBE,OAAOE,KAA7HN,KAA6HO,aAAsBL,EAAA,eAAoBM,YAAA,aAAsB,QAEtMC,oBCCjB,IAuBeC,EAvBUC,EAAQ,OAcjCC,ECPAN,KAAA,MACAO,KAAA,kBACAN,UAAA,gBAEAO,OACAC,OADA,SACAC,EAAAC,GACA,IAAAC,EAAAF,EAAAG,KAAAC,MAAA,KAAAC,OACAC,EAAAL,EAAAE,KAAAC,MAAA,KAAAC,OACA,MAAAL,EAAAG,KACAnB,KAAAO,UAAA,cACA,MAAAU,EAAAE,KACAnB,KAAAO,UAAA,aAEAP,KAAAO,UAAAW,EAAAI,EAAA,8BDJEzB,GATF,EAVA,SAAA0B,GACEZ,EAAQ,SAaV,KAEA,MAUgC,g1BE1BjB,IAAAa,IACXC,YADW,SACCC,GACR,OAAO1B,KAAK2B,eAAe3B,KAAK4B,WAAWF,GAAKG,OAAO7B,KAAK8B,iBAAiBJ,IAAMK,KAAK,MAE5FD,iBAJW,SAIM3B,GAAkB,IAAA6B,EAAAhC,KAAXiC,EAAWC,UAAAb,OAAA,QAAAc,IAAAD,UAAA,GAAAA,UAAA,GAAJ,GAC3B,OAAID,GAAQ,EACD,IAEN9B,IAAU,SAAU,SAAU,UAAW,YAAYiC,SAA5CC,KAA4DlC,KAAUA,aAAiBmC,KAC1F,GAEJtC,KAAKuC,KACRC,IAAerC,GAAOsC,IAAI,SAAAC,GAAA,IAAAC,EAAAC,IAAAF,EAAA,GAAEG,EAAFF,EAAA,GAAOG,EAAPH,EAAA,UAAmBE,EAAKb,EAAKF,iBAAiBgB,EAAOb,SACjFc,OAAO,SAAAC,GAAC,OAAS,MAALA,GAAmB,KAANA,KAE/BpB,WAfW,SAeAzB,EAAO8B,GAAM,IAAAgB,EAAAjD,KAEpB,OADQ,MAARiC,IAAiBA,EAAO,IACpBA,GAAQ,EACD,IAEN9B,IAAU,SAAU,SAAU,UAAW,YAAYiC,SAA5CC,KAA4DlC,KAAUA,aAAiBmC,MAChF,MAATnC,EAAgBA,EAAM+C,WAAa,IAExClD,KAAKuC,KACRY,IAAYhD,GAAOsC,IAAI,SAAAI,GACnB,OAAOI,EAAKrB,WAAWzB,EAAM0C,GAAMZ,QAEzCc,OAAO,SAAAC,GAAC,OAAS,MAALA,GAAmB,KAANA,KAE/BrB,eA7BW,SA6BIyB,GACX,IAAcC,EAAQC,EAAlBC,EAAO,EACX,GAAmB,IAAfH,EAAI/B,OAAc,OAAOkC,EAC7B,IAAKF,EAAI,EAAGC,EAAMF,EAAI/B,OAAQgC,EAAIC,EAAKD,IAEnCE,GAASA,GAAQ,GAAKA,EADhBH,EAAII,WAAWH,GAErBE,GAAQ,EAEZ,OAAOA,EAAO,IAElBhB,KAvCW,SAuCNkB,GAAsB,IAAjBxB,EAAiBC,UAAAb,OAAA,QAAAc,IAAAD,UAAA,GAAAA,UAAA,GAAVwB,IACTC,KACAC,GAAQ,EASZ,OARAH,EAAII,QAAQ,SAAAC,GACJC,IAAcD,IACdF,GAAQ,EACRD,EAAIK,KAAJC,MAAAN,EAAGO,IAASJ,KAEZH,EAAIK,KAAKF,KAGVF,GAAS3B,EAAO,EAAIjC,KAAKuC,KAAKoB,EAAK1B,KAAU0B,GAExDQ,YApDW,SAoDCV,GACR,IAAIW,KAMJ,OALAX,EAAII,QAAQ,SAAAQ,GACJA,aAAaC,QACbF,EAAOC,EAAE,IAAMA,EAAE,MAGlBD,GAEXG,SACIC,QADK,SACG3B,GACJ,IAAI4B,EAAUC,aAAaF,QAAQ,aAAe3B,GAC9CuB,EAAS,KACb,IACIA,EAASO,KAAKC,MAAMH,GACtB,MAAOI,GACLC,QAAQC,IAAR,0BAAAlD,OAAsCgB,EAAtC,yBAEJ,OAAOuB,GAEXY,QAXK,SAWGnC,EAAKC,GACT,IAAIsB,EAAS,KACb,IACIA,EAASa,IAAenC,GACxB4B,aAAaM,QAAQ,aAAenC,EAAKuB,GAC3C,MAAOS,GACLC,QAAQC,IAAR,2BAAAlD,OAAuCgB,EAAvC,gBAGRqC,WApBK,SAoBMrC,GACP6B,aAAaQ,WAAW,aAAerC,KAG/CsC,WArFW,SAqFA1B,EAAK2B,GAAW,IAAAC,EAAArF,KACnBsF,EAAQ7B,EAAIhB,IAAI,SAAA4B,GAAC,OAAMkB,SAAUF,EAAK5D,YAAY4C,GAAIP,KAAMO,KAC1De,aAAqBd,QACvBc,GAAaA,IAEjB,IAMII,KASJ,OAfiBF,EAAM7C,IAAI,SAAA4B,GAAC,OACxBkB,SAAUlB,EAAEkB,SACZE,UAAWC,OAAOvB,YACdiB,EAAU3C,IAAI,SAAAkD,GAAO,OAAKA,GAAUtB,EAAEP,UAAY6B,UAEtDlD,IAAI,SAAA4B,GAAC,0NAAAuB,IAASvB,GAAGwB,gBAAiBR,EAAK5D,YAAY4C,EAAEoB,eAE9C5B,QAAQ,SAAAQ,GACf,IAAIyB,EAAUN,EAAWnB,EAAEwB,iBACtBC,IACDA,MAEJA,EAAQ9B,KAAKsB,EAAMS,KAAK,SAAAtC,GAAG,OAAIA,EAAI8B,WAAalB,EAAEkB,WAAUzB,MAC5D0B,EAAWnB,EAAEwB,iBAAmBC,IAE7BE,IAAcR,IAEzBS,iBA3GW,SA2GMxC,GACb,IAAI6B,EAAQ7B,EAAIhB,IAAI,SAAA4B,GAAC,OAAMP,KAAMO,KAEjC,OADcrE,KAAKmF,WAAWG,EAAO,QACtB7C,IAAI,SAAAyD,GAAC,OAAIA,EAAE,GAAGpC,QAEjCqC,WAhHW,SAgHA1C,GACP,OAAOA,EAAI2C,KAAK,WACZ,OAAOC,KAAKC,SAAW,uJChH7BC,GAAU,cAAIC,GAAM,UAC1BD,GAAQE,QAAQ,GAAGC,QACfC,OAAQ,qCACRC,SAAU,mDACVC,KAAM,sDACNC,cAAe,iGAEnBP,GAAQE,QAAQ,GAAGC,QACfG,KAAM,kEAEV,IAAME,GAAWR,GAAO,OAClBS,GAAaT,GAAO,SACpBU,GAASV,GAAO,KAChBW,GAAkBX,GAAO,+WCbzBY,cACF,SAAAA,EAAYC,EAAIC,GAAcC,KAAAtH,KAAAmH,GAC1BnH,KAAKoH,GAAKA,EACVpH,KAAKqH,aAAeA,MACpBrH,KAAKoH,GAAGG,KAAK,WAAY,SAACC,EAAS9F,GAC/BA,EAAI+F,WAAaC,OACjBhG,EAAIiG,WAAaD,SAErB1H,KAAKoH,GAAGG,KAAK,WAAY,SAACK,EAAS/E,EAAKgF,GAMpC,OALAD,EAAO,aAAmBF,OACrBG,EAAM,cACPD,EAAO,YAAkBF,QAE7B5C,QAAQC,IAAR+C,MAAgBF,IACTA,gFAIFG,mFACLA,aAAmBzD,gDACZtE,KAAKoH,GAAGY,QAAQD,EAAQtF,IAAI,SAAAO,GAAC,OAAA8E,MAAS9F,EAAKqF,gBAAiBrE,uCAEhEhD,KAAKoH,GAAGa,IAARH,MAAgB9H,KAAKqH,gBAAiBU,sIAG3CG,GACF,OAAOlI,KAAKoH,GAAGe,MAAMD,2CAGT3C,GACZ,OAAOvF,KAAKoI,MAAM,YAAYC,OAAO9C,GAAU+C,uEAGtCC,wEACLA,aAAgBjE,gDACTtE,KAAKoH,GAAGoB,WAAWD,oCAEvBvI,KAAKoH,GAAGqB,OAAOF,gHAKxBG,eACF,SAAAA,IAAc,OAAApB,KAAAtH,KAAA0I,GAAAC,KAAA3I,KAAA4I,KAAAF,GAAAG,KAAA7I,KACJ+G,IAAWjE,MAAO,4BAFRqE,IAMlB2B,eACF,SAAAA,IAAc,OAAAxB,KAAAtH,KAAA8I,GAAAH,KAAA3I,KAAA4I,KAAAE,GAAAD,KAAA7I,KACJgH,IACF+B,SAAU,GACVC,KAAM,kCAJQ7B,IASpB8B,eACF,SAAAA,IAAc,OAAA3B,KAAAtH,KAAAiJ,GAAAN,KAAA3I,KAAA4I,KAAAK,GAAAJ,KAAA7I,KACJiH,IACFiC,MAAO,GACPC,oCAJUhC,IAShBiC,eACF,SAAAA,IAAc,OAAA9B,KAAAtH,KAAAoJ,GAAAT,KAAA3I,KAAA4I,KAAAQ,GAAAP,KAAA7I,KACJkH,IACFmC,WAAY,EAAGC,WAAY,EAAGC,QAAS,EAAGC,QAAS,EAAGC,UAAW,oEAIzDlE,GACZ,OAAOvF,KAAKoI,MAAM,mBAAmBC,OAAO9C,GAAU+C,0CAGhDoB,GACN,OAAO1J,KAAKoI,MAAM,mBAAmBuB,MAAMD,GAAcE,iBAZlCzC,IAgBzB0C,GAAY,IAAInB,GAChBoB,GAAc,IAAIhB,GAClBiB,GAAU,IAAId,GACde,GAAmB,IAAIZ,GCvFdzC,GACF,qWC8FbsD,EAAA,EAAAC,IAAAC,EAAA,GACAF,EAAA,EAAAC,IAAAhC,EAAA,GAAAgC,IAAAE,EAAA,GAAAF,IAAAG,EAAA,GACAJ,EAAA,EAAAC,IAAAI,EAAA,GACAL,EAAA,EAAAC,IAAAK,EAAA,GACAN,EAAA,EAAAC,IAAAM,EAAA,GAAAN,IAAAO,EAAA,GACAR,EAAA,EAAAC,IAAAQ,EAAA,GAAAR,IAAAS,EAAA,GAEA,IAAAC,GAAA,sDACAC,IACAvK,KAAA,YACAO,KAFA,WAGA,OACAiK,gBAAA,EACAC,cAAA,EACAC,cAAA,EACAC,cACAC,iBACAC,YAAA,GACAC,YACAC,gBAAA,GACAC,cACAC,YACAC,gBAAA,EACAC,WAAA,EACAC,UAAA,EACAnG,SAAA,MAIAoG,UACAC,aADA,WACA,IAAA5J,EAAAhC,KACA6L,EAAA7L,KAAAiL,WAAAlI,OAAA,SAAA+I,GAAA,OAAA9J,EAAAkJ,cAAA9I,SAAA0J,EAAAvG,YAAA9C,IAAA,SAAAqJ,GAAA,OAAAC,MAAAD,KAIA,OAHAD,EAAAhI,QAAA,SAAAb,UACAA,EAAAuC,WAEAsG,GAEAG,WARA,WASA,QAAAhM,KAAAqL,kBAGAY,SACAC,OADA,SACA3G,GAAA,IAAAtC,EAAAjD,KAAAmM,EAAAjK,UAAAb,OAAA,QAAAc,IAAAD,UAAA,IAAAA,UAAA,GAEAkK,GAAAhE,MAAA,YAAAC,OAAA9C,GAAA+C,QACA+D,KAAA,SAAAC,GACA,OAAAC,EAAAlI,EAAAmI,KAAAF,GAAAzK,OAAAqC,IAAAoI,EAAAnD,UAAA1G,IAAA,SAAAgK,GAAA,OAAA3C,GAAA1B,MAAA,YAAAC,OAAAoE,GAAAnE,eAEA+D,KAAA,SAAA3J,GAAA,IAAAC,EAAA+J,IAAAhK,GAAA4J,EAAA3J,EAAA,GAAAwG,EAAAxG,EAAAgK,MAAA,GACAL,EAAAnD,YACAmD,EAIArJ,EAAA2J,QAAA5I,MACA1D,KAAA,aACAuM,QACAC,WAAAR,EACAH,mBAPUhC,EAAA,EAAV4C,OAAAC,QAAA,eAYAC,aAtBA,SAsBA1H,GAAA,IAAAF,EAAArF,KACAoM,GAAAc,gBAAA3H,GACA8G,KAAA,SAAAtC,GAEA,OADAA,QACAC,GAAAvB,OAAAsB,EAAAZ,iBACAkD,KAAA,WACAvH,QAAAC,IAAA,uBACAM,EAAA0F,cAAA,EACA1F,EAAA8H,kBAIAC,WAlCA,SAkCAd,GAEAA,EAAAe,iBACArN,KAAAuL,WAAAhG,SAAA+G,EAAA/G,SACAvF,KAAA+K,cAAA,GAEA/K,KAAAkM,OAAAI,EAAA/G,WAGA+H,UA3CA,SA2CAxB,GACA9L,KAAAkL,cAAA9I,SAAA0J,EAAAvG,UAAAvF,KAAAkL,cAAAlL,KAAAkL,cAAAnI,OAAA,SAAAwK,GAAA,OAAAA,IAAAzB,EAAAvG,WAAAvF,KAAAkL,iBAAArJ,OAAAqC,IAAAlE,KAAAkL,gBAAAY,EAAAvG,WACAvF,KAAAmL,YAAAlG,IAAAjF,KAAA4L,eAEA4B,aA/CA,WAgDAxN,KAAA8K,gBAAA,EACA9K,KAAAgL,cAAA,GAEAyC,gBAnDA,WAmDA,IAAAC,EAAA1N,KACAA,KAAAgL,cAAA,EACAhL,KAAA2N,iBAAAtB,KAAA,SAAAR,GACA6B,EAAAzC,WAAAY,EAAA9I,OAAA,SAAAC,GAAA,OAAAA,EAAAnC,OAAA4B,IAAA,SAAAO,GAAA,OAAA+I,MACA/I,EAAAnC,MAAA0E,SAAA/D,GAAAC,YAAAuB,EAAAnC,YAEA+M,MAAA,SAAA/I,GACAC,QAAAC,IAAAF,GACAkI,MAAA,gBACAW,EAAA5C,gBAAA,KAGA6C,eA/DA,eAAAE,EAAAC,IAAAC,EAAA1J,EAAA2J,KAAA,SAAAC,IAAA,IAAAC,EAAAC,EAAAC,EAAApO,KAAA,OAAA+N,EAAA1J,EAAAgK,KAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,cAAAF,EAAAE,KAAA,EAgEAxO,KAAAyO,MAAAC,IAAA9D,GAAA,aAhEA,UAAA0D,EAAAK,GAAAL,EAAAM,KAgEA/N,KAhEAyN,EAAAK,GAAA,CAAAL,EAAAE,KAAA,QAAAF,EAAAK,MAAA,cAgEAT,EAhEAI,EAAAK,GAiEAR,EAAAD,EAAAzL,IAAA,SAAAoM,GAAA,OAAAT,EAAAK,MAAAC,IAAA9D,GAAA,IAAAiE,KAjEAP,EAAAQ,OAAA,SAkEAvC,EAAAlI,EAAAmI,IAAA2B,IAlEA,wBAAAG,EAAAS,SAAAd,EAAAjO,SAAA,yBAAA6N,EAAA5J,MAAAjE,KAAAkC,YAAA,GAoEA8M,UApEA,eAAAC,EAAAnB,IAAAC,EAAA1J,EAAA2J,KAAA,SAAAkB,IAAA,IAAApD,EAAAqD,EAAAnP,KAAA,OAAA+N,EAAA1J,EAAAgK,KAAA,SAAAe,GAAA,cAAAA,EAAAb,KAAAa,EAAAZ,MAAA,UAAAY,EAAAb,KAAA,KAsEAzC,EAAAnH,KAAAC,MAAA5E,KAAAmL,wBACA7G,OAvEA,CAAA8K,EAAAZ,KAAA,eAAAY,EAAAZ,KAAA,EAwEAjC,EAAAlI,EAAAmI,IAAAV,EAAArJ,IAAA,eAAA4M,EAAAvB,IAAkBC,EAAA1J,EAAA2J,KAAlB,SAAAsB,EAAAC,GAAA,OAAAxB,EAAA1J,EAAAgK,KAAA,SAAAmB,GAAA,cAAAA,EAAAjB,KAAAiB,EAAAhB,MAAA,cAAAgB,EAAAhB,KAAA,EACAW,EAAAM,gBAAAF,GADA,wBAAAC,EAAAT,SAAAO,MAAA,gBAAAI,GAAA,OAAAL,EAAApL,MAAAjE,KAAAkC,YAAA,KAxEA,OAAAkN,EAAAZ,KAAA,sBAAAY,EAAAZ,KAAA,EA4EAxO,KAAAyP,gBAAA3D,GA5EA,OAAAsD,EAAAZ,KAAA,iBAAAY,EAAAb,KAAA,GAAAa,EAAAT,GAAAS,EAAA,SA+EArC,MAAA,UAAAlL,OAAAL,GAAAI,WAAAwN,EAAAT,MA/EA,eAAAS,EAAAZ,KAAA,GAiFAxO,KAAAmN,eAjFA,QAkFAnN,KAAA8K,gBAAA,EACA9K,KAAAmL,YAAA,GAnFA,yBAAAiE,EAAAL,SAAAG,EAAAlP,OAAA,oCAAAiP,EAAAhL,MAAAjE,KAAAkC,YAAA,GAqFAuN,gBArFA,eAAAE,EAAA7B,IAAAC,EAAA1J,EAAA2J,KAAA,SAAA4B,EAqFA9D,GArFA,IAAAjF,EAAA,OAAAkH,EAAA1J,EAAAgK,KAAA,SAAAwB,GAAA,cAAAA,EAAAtB,KAAAsB,EAAArB,MAAA,UAsFA1C,EAAA3C,WAAA,IAAA2C,EAAA3C,UAAA9H,OAtFA,CAAAwO,EAAArB,KAAA,eAAAqB,EAAAf,OAAA,UAuFA,GAvFA,cAyFAhD,EAAA3C,UAAAtF,QAAA,SAAA4I,GACAA,EAAAlH,SAAA/D,GAAAC,YAAAgL,MAEA5F,EA5FAkF,MA6FAD,GACA3C,UAAA2C,EAAA3C,UAAA1G,IAAA,SAAAgK,GAAA,OAAAA,EAAAlH,cAEAA,SAAA/D,GAAAC,YAAAoF,GAhGAgJ,EAAArB,KAAA,EAiGA1E,GAAAgG,OAAAhE,EAAA3C,WACAkD,KAAA,WACA,OAAAD,GAAA0D,QAAAjJ,MAnGA,cAAAgJ,EAAAf,OAAA,UAqGA,GArGA,wBAAAe,EAAAd,SAAAa,MAAA,gBAAAG,GAAA,OAAAJ,EAAA1L,MAAAjE,KAAAkC,YAAA,GAuGA8N,aAvGA,eAAAC,EAAAnC,IAAAC,EAAA1J,EAAA2J,KAAA,SAAAkC,IAAA,IAAAC,EAAAC,EAAApQ,KAAAqQ,EAAAnO,UAAA,OAAA6L,EAAA1J,EAAAgK,KAAA,SAAAiC,GAAA,cAAAA,EAAA/B,KAAA+B,EAAA9B,MAAA,cAuGA2B,EAvGAE,EAAAhP,OAAA,QAAAc,IAAAkO,EAAA,GAAAA,EAAA,GAuGA,UACArQ,KAAAqL,gBAAA8E,EACAnQ,KAAAoL,YAzGAkF,EAAA9B,KAAA,EA0GApC,GAAAhE,MAAA,YAAAmI,SAAA,IAAA3G,UAAAyC,KAAA,SAAAmE,GACA,IAAArC,EAAAqC,EAAA/N,IAAA,SAAAoE,GACA,OAAAmD,GAAA5B,MAAA,mBAAAuB,MAAA9C,EAAAsC,WAAAsH,OAAA,cACApE,KAAA,SAAAtE,GACA,IAAA2I,EAAAhL,OAAAvB,YAAA4D,EAAAtF,IAAA,SAAAkO,GAAA,OAAAA,EAAAC,gBAAA7E,MACA4E,GAAAE,MAAAF,EAAArH,iBAEA+D,IAAArH,IAAA0K,GAAA3K,KAAA,SAAA0G,GAAA,OAAAA,EAAAoE,MAAA,IACA,OAAA9E,MAAAlF,GAAA6J,WAAArD,wBAGA,OAAAd,EAAAlI,EAAAmI,IAAA2B,KACA9B,KAAA,SAAAmE,GACAA,IAAA/N,IAAA,SAAAqO,GAEA,OADAA,EAAAX,SAAAW,EAAAX,UAAA,UACAW,IAEAV,EAAAhF,SAAAoF,EAAAzN,OAAA,SAAA+N,GAAA,OAAAA,EAAAX,iBA3HA,wBAAAG,EAAAvB,SAAAmB,EAAAlQ,SAAA,yBAAAiQ,EAAAhM,MAAAjE,KAAAkC,YAAA,GA8HAiL,aA9HA,eAAA4D,EAAAjD,IAAAC,EAAA1J,EAAA2J,KAAA,SAAAgD,IAAA,IAAAC,EAAAjR,KAAA,OAAA+N,EAAA1J,EAAAgK,KAAA,SAAA6C,GAAA,cAAAA,EAAA3C,KAAA2C,EAAA1C,MAAA,cAAA0C,EAAA1C,KAAA,EA+HApC,GAAAhE,MAAA,YAAAmI,SAAA,IAAA3G,UAAAyC,KAAA,SAAAmE,GACAA,IAAA/N,IAAA,SAAAqO,GAEA,OADAA,EAAAX,SAAAW,EAAAX,UAAA,UACAW,IAEAG,EAAA3F,WAAAkF,EAAAW,OAAA,SAAAC,EAAAtN,GAIA,OAHAsN,EAAAhP,SAAA0B,EAAAqM,WACAiB,EAAApN,KAAAF,EAAAqM,UAEAiB,SAxIA,OA2IApR,KAAAqL,iBACArL,KAAAgQ,aAAAhQ,KAAAqL,iBA5IA,wBAAA6F,EAAAnC,SAAAiC,EAAAhR,SAAA,yBAAA+Q,EAAA9M,MAAAjE,KAAAkC,YAAA,GA+IAmP,kBA/IA,WAgJA,IAAAC,EAAA3M,KAAAC,MAAAK,IAAAjF,KAAAoL,WACA3I,IAAA,SAAAoC,GAAA,OAAAkH,MAAAlH,GAAAgC,KAAArF,GAAA+C,QAAAC,QAAAK,EAAAU,cACA9C,IAAA,SAAAoC,GAAA,OAAAkH,MACAlH,GACA0M,YAAA1M,EAAAgC,KAAAsC,UACAtC,KAAAkF,MACAlH,EAAAgC,MAAAtB,SAAA/D,GAAAC,YAAAoD,EAAAgC,MACAsC,UAAAtE,EAAAgC,KAAAsC,UAAA1G,IAAA,SAAAgK,GAAA,OAAAjL,GAAAC,YAAAgL,OAEA+E,eAAAhP,IAAAqC,EAAA6L,UACAjO,IAAA,SAAAgP,GAAA,IAAAC,EAAA9O,IAAA6O,EAAA,GAAAb,EAAAc,EAAA,GAAAC,EAAAD,EAAA,GAAAb,EAAAc,EAAAd,MAAA,OACAD,kBAAAvH,WADAsI,EAAAtI,WACAC,WAAAuH,SAGA/G,GAAAgG,OACAtO,GAAAe,KAAA+O,EAAA7O,IAAA,SAAAoC,GAAA,OAAAA,EAAA0M,YAAA9O,IAAA,SAAAgK,GAAA,OAAAV,MACAU,GACAlH,SAAA/D,GAAAC,YAAAgL,SACA,IACAJ,KAAA,WACA,OAAAD,GAAA0D,OAAAwB,EAAA7O,IAAA,SAAAoC,GAAA,OAAAA,EAAAgC,UACAwF,KAAA,WACA,OAAArC,GAAA8F,OAAAtO,GAAAe,KAAA+O,EAAA7O,IAAA,SAAAoC,GAAA,OAAAA,EAAA2M,iBAAA,MACAnF,KAAA,WACA,OAAAxC,GAAAiG,QAAAjN,IAAA,UAAAC,OAAA,MACAuJ,KAAA,WACAvH,QAAAC,IAAA,mBACA6I,MAAA,SAAA/I,GACAC,QAAAC,IAAAF,OAKA+M,QAlNA,WAmNA5R,KAAAmN,iBCvTe0E,IADE/R,OAFP,WAAgB,IAAAgS,EAAA9R,KAAaD,EAAA+R,EAAA7R,eAA0BC,EAAA4R,EAAA3R,MAAAD,IAAAH,EAAwB,OAAAG,EAAA,OAAA4R,EAAA9F,WAAglB9L,EAAA,YAAAA,EAAA,iBAAyCE,OAAO2R,KAAA,UAAAC,UAAA,IAAgCC,IAAKC,MAAA,SAAAC,GAAyBL,EAAAzG,gBAAA,SAA6BnL,EAAA,OAAYM,YAAA,wCAAAJ,OAA2DgS,KAAA,QAAcA,KAAA,SAAaN,EAAAO,GAAA,UAAAP,EAAAO,GAAA,KAAAP,EAAAQ,GAAAR,EAAA,kBAAAxF,GAAoE,OAAApM,EAAA,iBAA2B2C,IAAAyJ,EAAA/G,SAAAnF,OAAyB2R,KAAA,UAAAC,UAAA,IAAgCC,IAAKC,MAAA,SAAAC,GAAyB,OAAAL,EAAA1E,WAAAd,OAA8BpM,EAAA,OAAYM,YAAA,wCAAAJ,OAA2DgS,KAAA,QAAcA,KAAA,SAAaN,EAAAO,GAAAP,EAAAS,GAAAjG,EAAApD,eAAiC,GAAppChJ,EAAA,YAAAA,EAAA,iBAAsEE,OAAO2R,KAAA,UAAAC,UAAA,IAAgCC,IAAKC,MAAAJ,EAAAtE,gBAA0BtN,EAAA,OAAYM,YAAA,wCAAAJ,OAA2DgS,KAAA,QAAcA,KAAA,SAAaN,EAAAO,GAAA,gBAAAP,EAAAO,GAAA,KAAAP,EAAAQ,GAAAR,EAAA,oBAAA3B,GAAgF,OAAAjQ,EAAA,iBAA2B2C,IAAAsN,EAAA/P,OAAoB2R,KAAA,UAAAC,UAAA,IAAgCC,IAAKC,MAAA,SAAAC,GAAyB,OAAAL,EAAA9B,aAAAG,OAAoCjQ,EAAA,OAAYM,YAAA,wCAAAJ,OAA2DgS,KAAA,QAAcA,KAAA,SAAaN,EAAAO,GAAAP,EAAAS,GAAApC,WAA+B,GAAokB2B,EAAAO,GAAA,KAAAnS,EAAA,aAAkCsS,OAAO1P,MAAAgP,EAAA,eAAAW,SAAA,SAAAC,GAAoDZ,EAAAhH,eAAA4H,GAAuBC,WAAA,oBAA8BzS,EAAA,OAAYM,YAAA,oBAA8BsR,EAAA,aAAA5R,EAAA,OAA+B0S,aAAaC,aAAA,QAAAC,aAAA,UAA0C5S,EAAA,sBAA2BsS,OAAO1P,MAAAgP,EAAA,cAAAW,SAAA,SAAAC,GAAmDZ,EAAA5G,cAAAwH,GAAsBC,WAAA,mBAA6BzS,EAAA,iBAAA4R,EAAAQ,GAAAR,EAAA,oBAAAhG,EAAAiH,GAA+D,OAAA7S,EAAA,YAAsB2C,IAAAkQ,EAAA3S,OAAc4R,UAAA,IAAeC,IAAKC,MAAA,SAAAC,GAAyB,OAAAL,EAAAxE,UAAAxB,OAA4B5L,EAAA,YAAiBkS,KAAA,UAAalS,EAAA,QAAA4R,EAAAO,GAAAP,EAAAS,GAAAzG,EAAA5C,YAAA4I,EAAAO,GAAA,KAAAnS,EAAA,gBAA0EE,OAAOgS,KAAA,aAAA9R,KAAAwL,EAAAvG,UAAwC6M,KAAA,gBAAmB,KAAM,WAAAN,EAAAkB,KAAAlB,EAAAO,GAAA,KAAAP,EAAA9G,aAAqR8G,EAAAkB,KAArR9S,EAAA,OAAAA,EAAA,kBAAAA,EAAA,aAAqGE,OAAO6S,MAAA,KAAAjK,KAAA,WAAAkK,YAAA,QAAAC,KAAA,MAAiEX,OAAQ1P,MAAAgP,EAAA,YAAAW,SAAA,SAAAC,GAAiDZ,EAAA3G,YAAAuH,GAAoBC,WAAA,kBAA2B,OAAAb,EAAAO,GAAA,KAAAnS,EAAA,OAAAA,EAAA,cAA0DE,OAAO4I,KAAA,OAAAoK,KAAA,QAAAC,MAAA,IAAwCpB,IAAKC,MAAAJ,EAAA9C,aAAuB8C,EAAAO,GAAA,cAAAP,EAAAO,GAAA,KAAAnS,EAAA,OAA6CM,YAAA,qBAA+BN,EAAA,cAAmBE,OAAO4I,KAAA,UAAAoK,KAAA,QAAAC,MAAA,IAA2CpB,IAAKC,MAAAJ,EAAArE,mBAA6BqE,EAAAO,GAAA,oBAAAP,EAAAO,GAAA,KAAAnS,EAAA,aAAyDE,OAAOkT,SAAA,UAAoBd,OAAQ1P,MAAAgP,EAAA,aAAAW,SAAA,SAAAC,GAAkDZ,EAAA/G,aAAA2H,GAAqBC,WAAA,kBAA4BzS,EAAA,UAAaA,EAAA,cAAmBE,OAAO4I,KAAA,UAAAqK,MAAA,IAA4BpB,IAAKC,MAAA,SAAAC,GAAyB,OAAAL,EAAA5F,OAAA4F,EAAAvG,WAAAhG,cAA6CuM,EAAAO,GAAA,wBAAAP,EAAAO,GAAA,KAAAnS,EAAA,cAA8DE,OAAO4I,KAAA,OAAAqK,MAAA,IAAyBpB,IAAKC,MAAA,SAAAC,GAAyB,OAAAL,EAAA5F,OAAA4F,EAAAvG,WAAAhG,UAAA,OAAkDuM,EAAAO,GAAA,wBAAAP,EAAAO,GAAA,KAAAnS,EAAA,cAA8DE,OAAO4I,KAAA,SAAAqK,MAAA,IAA2BpB,IAAKC,MAAA,SAAAC,GAAyB,OAAAL,EAAA7E,aAAA6E,EAAAvG,WAAAhG,cAAmDuM,EAAAO,GAAA,mCAE5rG5R,oBCChC,IAuBe8S,GAvBU5S,EAAQ,OAcjB6S,CACd3I,GACAgH,IAT6B,EAV/B,SAAoBtQ,GAClBZ,EAAQ,SAaS,kBAEU,MAUG,QCZhCsJ,EAAA,EAAAC,IAAAI,EAAA,GAEA,ICbemJ,IADE3T,OAFP,WAAgB,IAAAgS,EAAA9R,KAAaD,EAAA+R,EAAA7R,eAA0BC,EAAA4R,EAAA3R,MAAAD,IAAAH,EAAwB,OAAAG,EAAA,OAAAA,EAAA,cAAkCE,OAAO4I,KAAA,aAAkB8I,EAAAO,GAAA,UAAAP,EAAAO,GAAA,KAAAnS,EAAA,cAAgDE,OAAO4I,KAAA,aAAkB8I,EAAAO,GAAA,UAAAP,EAAAO,GAAA,KAAAnS,EAAA,cAAgDE,OAAO4I,KAAA,UAAe8I,EAAAO,GAAA,UAAAP,EAAAO,GAAA,KAAAnS,EAAA,cAAgDE,OAAO4I,KAAA,aAAkB8I,EAAAO,GAAA,UAAAP,EAAAO,GAAA,KAAAnS,EAAA,cAAgDE,OAAO4I,KAAA,YAAiB8I,EAAAO,GAAA,eAEpZ5R,oBCFPE,EAAQ,OAcjB+S,EFGhBpT,KAAA,aACAO,KAFA,WAGA,OACA8S,IAAA,gCEJEF,IAT6B,EAEb,KAEC,KAEU,MAUG,QCChCxJ,EAAA,EAAAC,IAAA0J,EAAA,GAAA1J,IAAA2J,EAAA,GAAA3J,IAAA4J,EAAA,GAEA,IAAAC,IACAzT,KAAA,WACAO,KAFA,WAGA,OACAmT,eAAA,EACAC,QACA/K,MAAA,KAAA+J,MAAA,OAAAiB,IAAAX,GAAAxB,KAAA,aAOApG,UACAwI,WADA,WAEA,OAAAnU,KAAAiU,MAAAjU,KAAAgU,qBAEAvN,QAJA,WAKA,OAAAE,MCzCeyN,IADEtU,OAFP,WAAgB,IAAAgS,EAAA9R,KAAaD,EAAA+R,EAAA7R,eAA0BC,EAAA4R,EAAA3R,MAAAD,IAAAH,EAAwB,OAAAG,EAAA,OAAAA,EAAA,eAAmCE,OAAO8I,MAAA4I,EAAAqC,WAAAlB,MAAAoB,MAAA,MAAyCvC,EAAAO,GAAA,KAAAnS,EAAA,OAAwBM,YAAA,gBAA0BN,EAAA4R,EAAAqC,WAAAD,KAAyBI,IAAA,cAAgBxC,EAAAO,GAAA,KAAAnS,EAAA,KAAsBM,YAAA,gCAAAoS,aAAyD2B,MAAA,UAAAC,MAAA,UAAkC1C,EAAAO,GAAAP,EAAAS,GAAAT,EAAArL,aAAA,GAAAqL,EAAAO,GAAA,KAAAnS,EAAA,cAAiEsS,OAAO1P,MAAAgP,EAAA,eAAAW,SAAA,SAAAC,GAAoDZ,EAAAkC,eAAAtB,GAAuBC,WAAA,mBAA8Bb,EAAAQ,GAAAR,EAAA,eAAA2C,EAAApR,GAAqC,OAAAnD,EAAA,mBAA6B2C,IAAAQ,EAAAjD,OAAa2R,KAAA0C,EAAA1C,QAAkBD,EAAAO,GAAAP,EAAAS,GAAAkC,EAAAxB,YAA+B,QAEzoBxS,oBCChC,IAuBeiU,GAvBU/T,EAAQ,OAcjBgU,CACdZ,GACAK,IAT6B,EAV/B,SAAoB7S,GAClBZ,EAAQ,SAaS,kBAEU,MAUG,keCkEhCsJ,EAAA,EAAAC,IAAA0K,GAAA,GAAA1K,IAAA2K,GAAA,GAEA5K,EAAA,EAAAC,IAAAC,EAAA,GACAF,EAAA,EAAAC,IAAAQ,EAAA,GAAAR,IAAAS,EAAA,GACAV,EAAA,EAAAC,IAAA4K,GAAA,GACA7K,EAAA,EAAAC,IAAA6K,GAAA,GACA9K,EAAA,EAAAC,IAAAE,EAAA,GAAAF,IAAAG,EAAA,GAEA,IAAA2K,IACAC,UAAA,EACAC,MAAA,EACAC,YAAA,EACAnM,KAAA,SACAD,SAAA,sMACAqM,gBACAlB,IAAA,IAAAnL,SAAA,MAAAsM,SAAA,IACAnB,IAAA,IAAAnL,SAAA,QAIAuM,IACApM,MAAA,OACAC,WAAA6L,KAGA/K,EAAA,EAAAC,IAAA0J,EAAA,GAAA1J,IAAAqL,GAAA,GAAArL,IAAAI,EAAA,GAEA,IAAAkL,IACAlV,KAAA,aACAO,KAFA,WAGA,OACA4U,WACAC,YAAA,EACAC,cAAA,EACAC,YAAA1R,IAAA,8BACA2R,YACAC,WAAA,EACAC,aAAA,EACAC,gBACAC,eAAA,IAGAtK,UACAuK,SADA,WAEA,OAAAlW,KAAAmJ,UAAA9H,QAEA8H,UAJA,WAIA,IAAAnH,EAAAhC,KACA,OAAAA,KAAA6V,SAAA1M,eAAApG,OACA,SAAA0J,GAAA,OAAAzK,EAAAmK,eAAAnK,EAAAmU,sBAAA/T,SAAAqK,EAAAlH,YACA9C,IAAA,SAAAgK,EAAApJ,GAAA,OAAA+S,MAAA3J,GAAA4J,OAAAhT,IAAArB,EAAA0T,iBAEAY,cATA,WASA,IAAArT,EAAAjD,KACA,OAAAA,KAAAmJ,UAAA1G,IACA,SAAAgK,EAAApJ,GAIA,OAHAJ,EAAAwS,QAAApS,KACAJ,EAAAwS,QAAApS,IAAAkT,aAAAC,UAAAC,OAAAC,WAEAN,MACA3J,GACAkK,OAAA1T,EAAAwS,QAAApS,OACAuT,SAAAvT,EAAA,EACAwT,QAAApK,EAAA2I,cAAArS,OAAA,SAAA+T,GAAA,OAAAA,EAAAzB,UAAAhU,OAAA,OAKA8U,sBAxBA,WAyBA,OAAAnW,KAAAgW,aAAAjT,OAAA,SAAAuJ,GAAA,OAAAA,EAAAhD,WAAA,IAAA7G,IAAA,SAAA6J,GAAA,OAAAA,EAAA/G,aAGA0G,SACA8K,iBADA,SACAnQ,GACA,WAAA/E,OAAA7B,KAAA0V,YAAA,OAAA7T,OAAA7B,KAAAkW,SAAA,KAAAtP,EAAAmC,UAAAhH,KAAA,MAEAiV,gBAJA,SAIApQ,GACA,IAAAxC,EAAA,GACAwC,EAAAqO,WACA7Q,GAAA,QAEA,WAAAwC,EAAAoC,OACApC,EAAAiQ,QACAzS,GAAA,MAEAA,GAAA,OAGA,IAAA6S,EAAAjX,KAAAgW,aAAAjQ,KAAA,SAAAuG,GAAA,OAAAA,EAAA/G,WAAAqB,EAAArB,WACA,GAAA0R,EAAA,CACAjX,KAAAmM,eACA8K,EAAA3N,aACAlF,GAAA,WAAAvC,OAAAoV,EAAA3N,WAAA,MAGA,IAAA4N,EAAAD,EAAA3N,WAAA2N,EAAA5N,WACA6N,EAAA,IACA9S,GAAA,UAAAvC,QAAAoV,EAAA5N,WAAA6N,EAAA,KAAAC,QAAA,UAGA,OAAA/S,GAMAgT,UAlCA,SAkCA/T,EAAA6Q,GACAlU,KAAAyV,QAAAvR,IAAAlE,KAAAyV,SAAAhT,IAAA,SAAAkU,EAAAU,GAMA,OALAA,IAAAhU,IACAsT,EAAAJ,QAAArC,EAAAzR,IAAA,SAAA4B,GAAA,OAAA6P,IAAA7P,KACAsS,EAAAH,OAAAtC,MAAA,GACAyC,EAAAF,MAAAC,KAAAxC,GAEAyC,KAGAW,aA5CA,SA4CAjU,EAAA6Q,GACA,IAAAwC,EAAA1W,KAAAyV,QAAApS,GAAAoT,MAAAC,KACAA,EAAAtU,SAAA8R,GACAwC,IAAA3T,OAAA,SAAAsB,GAAA,OAAAA,IAAA6P,KAEAwC,EAAA1S,KAAAkQ,GACAwC,EAAAxS,IAAAwS,IAEA1W,KAAAoX,UAAA/T,EAAAqT,IAEAa,YAtDA,SAsDAlU,GAAA,IAAAgC,EAAArF,KACAA,KAAAyV,QAAAvR,IAAAlE,KAAAyV,SAAAhT,IAAA,SAAAkU,EAAAU,GACA,GAAAhU,IAAAgU,GAAA,MAAAhU,EACA,OAAAsT,EAEA,IACAa,EADAnS,EAAA8D,UAAAkO,GACAjC,cAAArS,OAAA,SAAA0U,GAAA,OAAAA,EAAApC,UAAA5S,IAAA,SAAAgV,GAAA,OAAAA,EAAAvD,MAUA,OATAyC,EAAAJ,QAAA1S,QAAA,SAAAgI,GACAA,EAAA6L,WAAAF,EAAApV,SAAAyJ,EAAAqI,OAEAyC,EAAAgB,WAAAhB,EAAAJ,QAAAxT,OAAA,SAAA8I,GAAA,OAAAA,EAAAqI,MAAA7S,OAAA,GACAsV,EAAAiB,WAAAjB,EAAAgB,aACAhB,EAAAe,UAAAf,EAAAJ,QAAAlV,SAAAmW,EAAAnW,UAAAsV,EAAAJ,QAAAxQ,KAAA,SAAA8F,GAAA,OAAAA,EAAA6L,YACAf,EAAAkB,OAAAlB,EAAAgB,aAAAhB,EAAAe,UACAf,EAAAiB,WAAA,GAEAjB,KAGAmB,OAzEA,SAyEAzU,GACArD,KAAA0V,YAAArS,GAEA0U,cA5EA,WA4EA,IAAArK,EAAA1N,KACMmK,EAAA,EAAN6N,SACA9O,MAAA,OACA8D,QAAA,UACAX,KAAA,WACAqB,EAAAuK,WACArK,MAAA,SAAA/I,GACAC,QAAAC,IAAAF,MAGAoT,OAtFA,WAuFAjY,KAAAuX,cACA,IAAAW,EAAAlY,KAAAsW,cAAAvT,OAAA,SAAA0J,GAAA,OAAAA,EAAAkK,OAAAgB,aAAAtW,OACA,GAAA6W,EAAAlY,KAAAkW,UAAAlW,KAAAmY,eACQhO,EAAA,EAAR4C,OAAAC,QAAA,cAAAnL,OAAAqW,EAAA,KAAArW,OAAA7B,KAAAkW,gBADA,CAIA,IAAAkC,EAAApY,KAAAsW,cAAAvT,OAAA,SAAA0J,GAAA,OAAAA,EAAAkK,OAAAkB,SAAAxW,OACAgX,EAAAD,EAAApY,KAAAkW,SAAA,QAGAlW,KAAAsW,cAAAvT,OAAA,SAAA0J,GAAA,OAAAA,EAAAkK,OAAAiB,YACA/T,QAAA,SAAA+C,GACAoD,GAAAkD,gBAAAtG,EAAArB,UAAA8G,KACA,SAAAiM,GACAA,IACAA,GAAA1H,gBAAAhK,EAAArB,SAAA+D,WAAA,IAEA1C,EAAA+P,OAAAkB,OACAS,EAAAjP,aAEAiP,EAAAhP,aAEAU,GAAA8F,OAAAwI,GACAjM,KAAA,WACAvH,QAAAC,IAAA,iBAOA/E,KAAA2V,cAAA,EACMxL,EAAA,EAAN4C,OAAAC,QAAA,mBAAAnL,OAAAuW,EAAA,QAAAvW,OAAA7B,KAAAkW,SAAA,UAAArU,OAAAwW,EAAA,OACArY,KAAA8V,WAAA,IAEAyC,gBA1HA,WA2HA,IAAA1C,EAAAO,MAAAd,MAAAtV,KAAA8M,YACA+I,EAAA1M,UAAA0M,EAAA1M,UAAA1G,IAAA,SAAAgK,GAAA,OAAA2J,MACApB,MAAAvI,GAAAlH,SAAAkH,EAAAlH,SACA6P,cAAA3I,EAAA2I,cAAA3I,EAAA2I,cAAA3S,IAAA,SAAA4B,GAAA,OAAA+R,MACA/R,GACA6P,IAAA1S,GAAAC,YAAA4C,GAAA,cAEAtB,OAAA,SAAA0J,GACA,IAAAA,EAAA1D,UAAA,IAAA0D,EAAA2I,cAAA/T,OAEA,OADAyD,QAAAC,IAAA,kBAAA0H,IACA,EAGA,IAAA+L,EAAAhX,GAAA2D,WAAAsH,EAAA2I,cAAA,WACA,OAAAoD,EAAAnX,SAAAmX,EAAA,MAAAnD,QAEA,OADAvQ,QAAAC,IAAA,gBAAA0H,IACA,EAGA,IACAgM,EADAjX,GAAA2D,WAAAsH,EAAA2I,cAAA,YACA3S,IAAA,SAAAiW,GACA,GAAAA,EAAArX,OAAA,GACA,IAAA+C,EAAAgS,MAAAsC,EAAA,IAIA,OAHAlX,GAAA2D,WAAAuT,EAAA,WAAArX,SAAAqX,EAAArX,SACA+C,EAAAuU,SAAA,GAEAvU,EAEA,OAAAsU,EAAA,KAGA,OAAAD,EAAA1S,KAAA,SAAA/C,GAAA,OAAAA,EAAA2V,WACA7T,QAAAC,IAAA,wBAAA0H,IACA,IAEAA,EAAA2I,cAAA5T,GAAA2E,WAAAsS,IACA,KAEA5C,EAAA1M,UAAA3H,GAAA2E,WAAA0P,EAAA1M,WAEAnJ,KAAA6V,WACA7V,KAAA+V,aAAA/V,KAAA8M,WAAAvH,SACAvF,KAAA4Y,uBAEAC,eAvKA,SAuKAjS,EAAA6Q,GACA,OAAAzX,KAAA2V,cAAA3V,KAAA8Y,YAAAlS,EAAA+P,OAAAiB,UACAhR,EAAA+P,OAAAJ,QAAA9T,IAAA,SAAAoJ,GAAA,OAAAA,EAAAqI,MAAA9R,SAAAqV,EAAAvD,MAAAuD,EAAApC,QAAA,oBAEA,WAEAuD,oBA7KA,WA6KA,IAAAxK,EAAApO,KACAgK,GAAA+O,UAAA/Y,KAAA8M,WAAA3D,UAAA1G,IAAA,SAAAgK,GAAA,OAAAA,EAAAlH,YACA8G,KAAA,SAAAtE,GAEAqG,EAAA4H,aAAAjO,EAAAtF,IAAA,SAAAO,GAAA,OAAAoT,MAAApT,GAAAuC,SAAAvC,EAAA4N,uBASAoI,MAAA,SAAAC,GACA,OAAAA,EAAA1Y,WACA,WACAP,KAAA0V,YAAA1V,KAAAkW,SAAA,GACAlW,KAAA8X,OAAA9X,KAAA0V,YAAA,GAEA,MACA,YACA1V,KAAA0V,YAAA,GACA1V,KAAA8X,OAAA9X,KAAA0V,YAAA,GAEA,MACA,SACA1V,KAAAiW,eAAA,EACA,MACA,WACAjW,KAAAiW,eAAA,KAMAiD,OACApM,YACA9D,KAAAtD,OACAyT,QAFA,WAGA,OAAA7D,KAGAnJ,eACAnD,KAAAoQ,QACAD,SAAA,GAEAE,OACArQ,KAAAoQ,QACAD,SAAA,GAEAhB,gBACAnP,KAAAoQ,QACAD,SAAA,GAEAL,YACA9P,KAAAoQ,QACAD,SAAA,IAGArY,OACAgM,WADA,WAEA9M,KAAAuY,oBAGA3G,QAxRA,WAyRA5R,KAAAuY,kBACAzT,QAAAC,IAAA,QACA,IACAuU,KAAAC,OAAAC,aAAA,GACA1U,QAAAC,IAAA,UACA,MAAAF,MAIA4U,UAlSA,WAmSA3U,QAAAC,IAAA,QACA,IACAuU,KAAAC,OAAAC,aAAA,GACA1U,QAAAC,IAAA,UACA,MAAAF,OC3Ze6U,IADE5Z,OAFP,WAAgB,IAAAgS,EAAA9R,KAAaD,EAAA+R,EAAA7R,eAA0BC,EAAA4R,EAAA3R,MAAAD,IAAAH,EAAwB,OAAAG,EAAA,OAAiByZ,aAAarZ,KAAA,SAAAsZ,QAAA,iBAAA9W,MAAAgP,EAAA,MAAAa,WAAA,QAAAkH,IAAA,UAAwFrZ,YAAA,cAA0BN,EAAA,eAAoBE,OAAO8I,MAAA4I,EAAA+D,SAAA3M,MAAAmL,MAAA,GAAAyF,aAAA,GAAAC,aAAA,MAAwE9H,IAAK+H,aAAA,SAAA7H,GAA8B,OAAAL,EAAAlF,QAAAqN,QAA0BC,cAAA,SAAA/H,GAAgCL,EAAAmE,eAAAnE,EAAAmE,kBAAyCnE,EAAAO,GAAA,KAAAnS,EAAA,OAAwByZ,aAAarZ,KAAA,OAAAsZ,QAAA,SAAA9W,MAAAgP,EAAA,cAAAa,WAAA,kBAAkFnS,YAAA,iBAAAyR,IAAmCC,MAAA,SAAAC,GAAyBA,EAAAgI,kBAAyBrI,EAAAmE,eAAA,MAA4B/V,EAAA,OAAYM,YAAA,4BAAAyR,IAA4CC,MAAA,SAAAC,GAAyBA,EAAAgI,sBAA4Bja,EAAA,UAAA4R,EAAAQ,GAAAR,EAAA,uBAAAlL,EAAAvD,GAA+D,OAAAnD,EAAA,WAAqB2C,IAAAQ,EAAAjD,OAAaga,KAAA,OAAYla,EAAA,OAAYM,YAAA,wBAAA6Z,OAA2CC,aAAA1T,EAAA+P,OAAAkB,SAAA/F,EAAA6D,cAAA/O,EAAA+P,OAAAiB,WAAA9F,EAAAgH,YAAAyB,aAAA3T,EAAA+P,OAAAe,YAAA5F,EAAA6D,cAAA/O,EAAA+P,OAAAiB,WAAA9F,EAAAgH,YAAA0B,eAAA1I,EAAA4D,cAAArS,GAAmP4O,IAAKC,MAAA,SAAAC,GAAyB,OAAAL,EAAAgG,OAAAzU,OAAuByO,EAAAO,GAAA,6BAAAP,EAAAS,GAAAlP,EAAA,mCAAkF,SAAAyO,EAAAO,GAAA,KAAAnS,EAAA,OAAiCM,YAAA,eAAAia,MAAA,cAAA3I,EAAAoE,SAAA,yBAAuE,KAAApE,EAAA4D,YAAA5D,EAAAoE,SAAA,OAAAjE,IAA2EyI,SAAA,SAAAvI,GAA4BA,EAAAgI,kBAAyBrI,EAAAmE,eAAA,KAA2BnE,EAAAQ,GAAAR,EAAA,uBAAAlL,EAAAvD,GAAiD,OAAAnD,EAAA,OAAiB2C,IAAA+D,EAAArB,SAAA/E,YAAA,kBAAkDN,EAAA,aAAkBE,OAAO8I,MAAA4I,EAAAiF,iBAAAnQ,GAAA+T,KAAA7I,EAAAkF,gBAAApQ,MAA6EA,EAAA,QAAA1G,EAAA,OAAAA,EAAA,sBAAwD+R,IAAIC,MAAA,SAAAC,GAAyBA,EAAAgI,mBAA0BO,SAAA,SAAAvI,GAA6BA,EAAAgI,oBAA2B3H,OAAQ1P,MAAA8D,EAAA+P,OAAAF,MAAA,KAAAhE,SAAA,SAAAC,GAA4DZ,EAAA8I,KAAAhU,EAAA+P,OAAAF,MAAA,OAAA/D,IAA6CC,WAAA,gCAA0CzS,EAAA,iBAAA4R,EAAAQ,GAAA1L,EAAA,uBAAA6Q,EAAA1E,GAA0E,OAAA7S,EAAA,YAAsB2C,IAAAkQ,EAAA3S,OAAc4R,UAAA,IAAeC,IAAKC,MAAA,SAAAC,GAAyB,OAAAL,EAAAwF,aAAAjU,EAAAoU,EAAAvD,SAAyChU,EAAA,YAAiBkS,KAAA,UAAalS,EAAA,QAAama,OAAOQ,eAAApD,EAAApC,SAAAvD,EAAA6D,cAAA8B,EAAApC,SAAAzO,EAAA+P,OAAAiB,WAAA9F,EAAAgH,WAAAgC,gBAAArD,EAAApC,SAAAvD,EAAA6D,eAAA8B,EAAApC,SAAAzO,EAAA+P,OAAAgB,YAAA7F,EAAAgH,WAAAiC,gBAAA,KAAkPjJ,EAAAO,GAAAP,EAAAS,GAAAT,EAAA8D,YAAA7C,GAAA,KAAA0E,EAAA1O,eAAA+I,EAAAO,GAAA,KAAAnS,EAAA,gBAAkGE,OAAOgS,KAAA,aAAA9R,KAAAmX,EAAAvD,IAAA8G,gBAAAlJ,EAAA+G,eAAAjS,EAAA6Q,IAA0FrF,KAAA,gBAAmB,KAAM,WAAAN,EAAAkB,KAAAlB,EAAAO,GAAA,KAAAzL,EAAAiQ,QAAg7B/E,EAAAkB,KAAh7B9S,EAAA,OAAAA,EAAA,mBAAsFsS,OAAO1P,MAAA8D,EAAA+P,OAAAH,OAAA,IAAA/D,SAAA,SAAAC,GAA4DZ,EAAA8I,KAAAhU,EAAA+P,OAAAH,OAAA,MAAA9D,IAA6CC,WAAA,gCAA0CzS,EAAA,iBAAA4R,EAAAQ,GAAA1L,EAAA,uBAAA6Q,EAAA1E,GAA0E,OAAA7S,EAAA,YAAsB2C,IAAAkQ,EAAA3S,OAAc4R,UAAA,IAAeC,IAAKC,MAAA,SAAAC,GAAyB,OAAAL,EAAAsF,UAAA/T,GAAAoU,EAAAvD,UAAwChU,EAAA,YAAiBkS,KAAA,UAAalS,EAAA,QAAama,OAAOQ,eAAApD,EAAApC,SAAAvD,EAAA6D,cAAA8B,EAAApC,SAAAzO,EAAA+P,OAAAiB,WAAA9F,EAAAgH,WAAAgC,gBAAArD,EAAApC,SAAAvD,EAAA6D,eAAA8B,EAAApC,SAAAzO,EAAA+P,OAAAgB,YAAA7F,EAAAgH,WAAAiC,gBAAA,KAAkPjJ,EAAAO,GAAAP,EAAAS,GAAAT,EAAA8D,YAAA7C,GAAA,KAAA0E,EAAA1O,eAAA+I,EAAAO,GAAA,KAAAnS,EAAA,aAA+FE,OAAOgS,KAAA,aAAA9R,KAAAmX,EAAAvD,IAAA8G,gBAAAlJ,EAAA+G,eAAAjS,EAAA6Q,IAA0FrF,KAAA,gBAAmB,KAAM,mBAA4B,GAAAN,EAAAO,GAAA,KAAAP,EAAAwE,cAAAxE,EAAA4D,aAAAxV,EAAA,OAAgEM,YAAA,iCAA2CsR,EAAA4D,YAAA,EAAAxV,EAAA,cAAuCE,OAAOgT,KAAA,SAAenB,IAAKC,MAAA,SAAAC,GAAyB,OAAAL,EAAAgG,OAAAhG,EAAA4D,YAAA,OAAuC5D,EAAAO,GAAA,SAAAP,EAAAkB,KAAAlB,EAAAO,GAAA,KAAAP,EAAA4D,YAAA5D,EAAAoE,SAAA,EAAAhW,EAAA,cAAyFE,OAAOgT,KAAA,QAAApK,KAAA,QAA6BiJ,IAAKC,MAAA,SAAAC,GAAyB,OAAAL,EAAAgG,OAAAhG,EAAA4D,YAAA,OAAuC5D,EAAAO,GAAA,mBAAAP,EAAAkB,KAAAlB,EAAAO,GAAA,KAAAP,EAAAgH,aAAAhH,EAAAwE,cAAAxE,EAAA4D,aAAAiB,OAAAiB,UAAA1X,EAAA,cAAyIE,OAAOgT,KAAA,QAAApK,KAAA,WAAgCiJ,IAAKC,MAAA,SAAAC,GAAyB,OAAAL,EAAAyF,YAAAzF,EAAA4D,iBAA0C5D,EAAAO,GAAA,sBAAAP,EAAAkB,KAAAlB,EAAAO,GAAA,KAAAP,EAAAgE,UAA6JhE,EAAAkB,KAA7J9S,EAAA,cAAsFE,OAAOgT,KAAA,QAAApK,KAAA,WAAgCiJ,IAAKC,MAAAJ,EAAAiG,iBAA2BjG,EAAAO,GAAA,sBAAAP,EAAAkB,MAAA,IAExhJvS,oBCChC,IAuBewa,GAvBUta,EAAQ,OAcjBua,CACd1F,GACAkE,IAT6B,EAV/B,SAAoBnY,GAClBZ,EAAQ,SAaS,kBAEU,MAUG,QCrBhCwa,IAAIjR,IAAIkR,KAEO,IAAAC,GAAA,IAAID,KACfE,SAEQna,KAAM,IACNb,KAAM,WACNib,UAAWxH,KAGX5S,KAAM,QACNb,KAAM,aACNib,UAAW/F,GACX0D,OAAO,kHCAnB,GAXAiC,IAAIjR,IAAIsR,MACJC,mBAGJN,IAAIO,UAAUjN,MAAQkN,KACtBR,IAAIO,UAAUjN,MAAMmN,MAAQA,KAEvBlW,OAAOvB,cACRuB,OAAOvB,YAAc0X,GAAM1X,cAG1BG,MAAMoX,UAAUnZ,KACjB,IACIuZ,IAAsBxX,MAAMoX,UAAW,QACnC5Y,MAAO,SAAUb,GACb,OAAO4Z,GAAMtZ,KAAKvC,KAAMiC,IAE5B8Z,YAAY,IAElB,MAAOlX,GACLP,MAAMoX,UAAUnZ,KAAO,SAAUN,GAC7B,OAAO4Z,GAAMtZ,KAAKvC,KAAMiC,ICpBpCkZ,IAAIxU,OAAOqV,eAAgB,EAG3B,IAAIb,KACFc,GAAI,OACJZ,UACAa,YAAcC,OACdC,SAAU","file":"static/js/app.bb356da473121a6a22a4.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('transition',{attrs:{\"name\":_vm.direction}},[_c('router-view',{staticClass:\"appView\"})],1)],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-70ce3a13\",\"hasScoped\":false,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/App.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-70ce3a13\\\",\\\"scoped\\\":false,\\\"hasInlineConfig\\\":false}!../node_modules/vue-loader/lib/selector?type=styles&index=0!./App.vue\")\n}\nvar normalizeComponent = require(\"!../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../node_modules/vue-loader/lib/selector?type=script&index=0!./App.vue\"\nimport __vue_script__ from \"!!babel-loader!../node_modules/vue-loader/lib/selector?type=script&index=0!./App.vue\"\n/* template */\nimport __vue_template__ from \"!!../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-70ce3a13\\\",\\\"hasScoped\\\":false,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../node_modules/vue-loader/lib/selector?type=template&index=0!./App.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/App.vue\n// module id = null\n// module chunks = ","<template>\n <div id=\"app\">\n <transition :name=\"direction\">\n <router-view class=\"appView\"/>\n </transition>\n </div>\n</template>\n\n<script>\n export default {\n name: 'App',\n data: () => ({\n direction: \"slide-right\"\n }),\n watch: {\n $route(to, from) {\n const toDepth = to.path.split(\"/\").length;\n const fromDepth = from.path.split(\"/\").length;\n if (to.path === \"/\") {\n this.direction = \"slide-right\";\n } else if (from.path === \"/\") {\n this.direction = \"slide-left\";\n } else {\n this.direction = toDepth < fromDepth ? \"slide-right\" : \"slide-left\";\n }\n }\n }\n }\n</script>\n\n<style>\n #app {\n font-family: 'Avenir', Helvetica, Arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n color: #2c3e50;\n margin-top: 60px;\n }\n\n .appView {\n position: absolute;\n width: 100%;\n transition: left .3s ease-out;\n left: 0;\n }\n\n .slide-left-enter {\n /*transform: translate(100%, 0);*/\n left: 100%;\n }\n\n .slide-left-leave-active {\n /*transform: translate(-50%, 0);*/\n left: -50%;\n }\n\n .slide-right-enter {\n /*transform: translate(-50%, 0);*/\n left: -50%;\n z-index: 20;\n }\n\n .slide-right-leave-active {\n /*transform: translate(100%, 0);*/\n left: 100%;\n z-index: 20;\n }\n</style>\n\n\n\n// WEBPACK FOOTER //\n// src/App.vue","export default {\n getHashCode(obj) {\n return this.getStrHashCode(this.getMessage(obj).concat(this.getPropertyNames(obj)).join(''));\n },\n getPropertyNames(_self, deep = 10) {\n if (deep <= 0) {\n return '';\n }\n if (!_self || ['string', 'number', 'boolean', 'function'].includes(typeof _self) || _self instanceof Date) {\n return '';\n }\n return this.flat(\n Object.entries(_self).map(([key, value]) => [key, this.getPropertyNames(value, deep--)])\n ).filter(r => r != null && r !== '')\n },\n getMessage(_self, deep) {\n deep == null && (deep = 10);\n if (deep <= 0) {\n return '';\n }\n if (!_self || ['string', 'number', 'boolean', 'function'].includes(typeof _self) || _self instanceof Date) {\n return [_self != null ? _self.toString() : ''];\n }\n return this.flat(\n Object.keys(_self).map(key => {\n return this.getMessage(_self[key], deep--);\n })\n ).filter(r => r != null && r !== '');\n },\n getStrHashCode(str) {\n let hash = 0, i, chr, len;\n if (str.length === 0) return hash;\n for (i = 0, len = str.length; i < len; i++) {\n chr = str.charCodeAt(i);\n hash = ((hash << 5) - hash) + chr;\n hash |= 0; // Convert to 32bit integer\n }\n return hash + '';\n },\n flat(arr, deep = Infinity) {\n let ret = [];\n let dirty = false;\n arr.forEach(item => {\n if (Array.isArray(item)) {\n dirty = true;\n ret.push(...item)\n } else {\n ret.push(item)\n }\n });\n return dirty && deep > 0 ? this.flat(ret, deep--) : ret\n },\n fromEntries(arr) {\n let result = {};\n arr.forEach(a => {\n if (a instanceof Array) {\n result[a[0]] = a[1];\n }\n });\n return result;\n },\n storage: {\n getItem(key) {\n let itemStr = localStorage.getItem('__exam_s0_' + key);\n let result = null;\n try {\n result = JSON.parse(itemStr);\n } catch (e) {\n console.log(`No valid item for key [${key}] to get in storage.`);\n }\n return result;\n },\n setItem(key, value) {\n let result = null;\n try {\n result = JSON.stringify(value);\n localStorage.setItem('__exam_s0_' + key, result);\n } catch (e) {\n console.log(`Not valid item for key [${key}] to set.`);\n }\n },\n removeItem(key) {\n localStorage.removeItem('__exam_s0_' + key);\n },\n },\n groupArray(arr, groupedBy) {\n let array = arr.map(a => ({hashCode: this.getHashCode(a), item: a}));\n if (!(groupedBy instanceof Array)) {\n groupedBy = [groupedBy];\n }\n let checkedArr = array.map(a => ({\n hashCode: a.hashCode,\n checkItem: Object.fromEntries(\n groupedBy.map(groupBy => [groupBy, (a.item || {})[groupBy]])\n )\n })).map(a => ({...a, checkedHashCode: this.getHashCode(a.checkItem)}));\n let checkedMap = {};\n checkedArr.forEach(a => {\n let hashArr = checkedMap[a.checkedHashCode];\n if (!hashArr) {\n hashArr = [];\n }\n hashArr.push(array.find(arr => arr.hashCode === a.hashCode).item);\n checkedMap[a.checkedHashCode] = hashArr;\n });\n return Object.values(checkedMap);\n },\n duplicateRemoval(arr) {\n let array = arr.map(a => ({item: a}));\n let grouped = this.groupArray(array, 'item');\n return grouped.map(g => g[0].item);\n },\n randomSort(arr) {\n return arr.sort(() => {\n return Math.random() - 0.5;\n })\n }\n}\n\n\n// WEBPACK FOOTER //\n// ./src/utils/index.js","import Dexie from \"dexie\";\n\nconst dexieDB = new Dexie('_qa_db');\ndexieDB.version(1).stores({\n config: 'key, value, createDate, modifyDate',\n question: 'hashCode, describe, type, createDate, modifyDate',\n bank: 'hashCode, title, *questions, createDate, modifyDate',\n historyRecord: 'relatedQuestion, rightTimes, errorTimes, maxTime, minTime, totalTime, createDate, modifyDate'\n});\ndexieDB.version(2).stores({\n bank: 'hashCode, title, *questions, category, createDate, modifyDate',\n});\nconst configDB = dexieDB['config'];\nconst questionDB = dexieDB['question'];\nconst bankDB = dexieDB['bank'];\nconst historyRecordDB = dexieDB['historyRecord'];\n\nexport {dexieDB, configDB, questionDB, bankDB, historyRecordDB};\n\n\n// WEBPACK FOOTER //\n// ./src/db/index.js","import {dexieDB, configDB, questionDB, bankDB, historyRecordDB} from '../db';\n\nclass BaseDao {\n constructor(db, defaultEntry) {\n this.db = db;\n this.defaultEntry = defaultEntry || {};\n this.db.hook('creating', (primKey, obj) => {\n obj.createDate = Date.now();\n obj.modifyDate = Date.now();\n });\n this.db.hook('updating', (changed, key, origin) => {\n changed['modifiedDate'] = Date.now();\n if (!origin['createdDate']) {\n changed['createdDate'] = Date.now();\n }\n console.log({...changed});\n return changed;\n })\n }\n\n async upsert(records) {\n if (records instanceof Array) {\n return this.db.bulkPut(records.map(r => ({...this.defaultEntry, ...r})));\n }\n return this.db.put({...this.defaultEntry, ...records});\n }\n\n query(field) {\n return this.db.where(field);\n }\n\n queryByHashCode(hashCode) {\n return this.query('hashCode').equals(hashCode).first();\n }\n\n async delete(keys) {\n if (keys instanceof Array) {\n return this.db.bulkDelete(keys);\n }\n return this.db.delete(keys);\n }\n}\n\n\nclass ConfigDao extends BaseDao {\n constructor() {\n super(configDB, {value: null});\n }\n}\n\nclass QuestionDao extends BaseDao {\n constructor() {\n super(questionDB, {\n describe: '',\n type: 'picklist'\n });\n }\n}\n\nclass BankDao extends BaseDao {\n constructor() {\n super(bankDB, {\n title: '',\n questions: []\n });\n }\n}\n\nclass HistoryRecordDao extends BaseDao {\n constructor() {\n super(historyRecordDB, {\n rightTimes: 0, errorTimes: 0, maxTime: 0, minTime: 0, totalTime: 0\n });\n }\n\n queryByHashCode(hashCode) {\n return this.query('relatedQuestion').equals(hashCode).first();\n }\n\n queryMany(hashCodeList) {\n return this.query('relatedQuestion').anyOf(hashCodeList).toArray();\n }\n}\n\nconst configDao = new ConfigDao();\nconst questionDao = new QuestionDao();\nconst bankDao = new BankDao();\nconst historyRecordDao = new HistoryRecordDao();\n\nexport {configDao, questionDao, bankDao, historyRecordDao}\n\n\n// WEBPACK FOOTER //\n// ./src/dao/index.js","export default {\n version: '1.0.5',\n domain:'//palerock.cn',\n // domain:'//localhost'\n}\n\n\n// WEBPACK FOOTER //\n// ./src/config/index.js","<template>\n <div>\n <van-grid v-if=\"!inCategory\">\n <van-grid-item\n icon=\"notes-o\"\n clickable\n @click=\"showImporter\">\n <div slot=\"text\" class=\"van-grid-item__text text-align-center\">开始答题(导入)</div>\n </van-grid-item>\n <van-grid-item\n v-for=\"category in categories\"\n :key=\"category\"\n icon=\"notes-o\"\n clickable\n @click=\"intoCategory(category)\">\n <div slot=\"text\" class=\"van-grid-item__text text-align-center\">{{ category }}</div>\n </van-grid-item>\n </van-grid>\n <van-grid v-else>\n <van-grid-item\n icon=\"notes-o\"\n clickable\n @click=\"currentCategory = null\">\n <div slot=\"text\" class=\"van-grid-item__text text-align-center\">返回</div>\n </van-grid-item>\n <van-grid-item\n v-for=\"exam in examList\"\n :key=\"exam.hashCode\"\n icon=\"notes-o\"\n clickable\n @click=\"showOption(exam)\">\n <div slot=\"text\" class=\"van-grid-item__text text-align-center\">{{ exam.title }}</div>\n </van-grid-item>\n </van-grid>\n <van-popup v-model=\"isShowImporter\">\n <div class=\"exam-import-box\">\n <div v-if=\"isFromOnline\" style=\"max-height: 300px;overflow-y: auto;\">\n <van-checkbox-group v-model=\"onlineSelects\">\n <van-cell-group>\n <van-cell v-for=\"(lib, oi) in onlineLibs\"\n clickable\n @click=\"selectLib(lib)\"\n :key=\"oi\">\n <template slot=\"title\">\n <span>{{ lib.title }}</span>\n </template>\n <van-checkbox slot=\"right-icon\" :name=\"lib.hashCode\"></van-checkbox>\n </van-cell>\n </van-cell-group>\n </van-checkbox-group>\n </div>\n <div v-if=\"!isFromOnline\">\n <van-cell-group>\n <van-field\n v-model=\"questionLib\"\n label=\"题库\"\n type=\"textarea\"\n placeholder=\"请输入题库\"\n rows=\"10\"></van-field>\n </van-cell-group>\n </div>\n <div>\n <van-button type=\"info\" size=\"small\" block @click=\"importLib\">导入题库</van-button>\n </div>\n <div class=\"exam-m-top-small\">\n <van-button type=\"primary\" size=\"small\" block @click=\"importFromExist\">获取在线题库</van-button>\n </div>\n </div>\n </van-popup>\n <van-popup v-model=\"isShowOption\" position=\"bottom\">\n <div class=\"\">\n <van-button type=\"primary\" block @click=\"doExam(optionInfo.hashCode)\">重新测试\n </van-button>\n <van-button type=\"info\" block @click=\"doExam(optionInfo.hashCode,true)\">复习错题\n </van-button>\n <van-button type=\"danger\" block @click=\"clearHistory(optionInfo.hashCode)\">清空错题\n </van-button>\n </div>\n </van-popup>\n </div>\n</template>\n\n<script>\nimport Vue from 'vue';\nimport {Grid, GridItem} from 'vant';\nimport {Popup} from 'vant';\nimport {Button} from 'vant';\nimport {Field} from 'vant';\nimport {Cell, CellGroup} from 'vant';\nimport utils from '../../utils';\nimport {questionDao, historyRecordDao, bankDao, configDao} from '../../dao';\nimport {Dialog} from 'vant';\nimport config from \"@/config\";\nimport {Checkbox, CheckboxGroup} from 'vant';\n\nVue.use(Dialog);\nVue.use(Field).use(Cell).use(CellGroup);\nVue.use(Button);\nVue.use(Popup);\nVue.use(Grid).use(GridItem);\nVue.use(Checkbox).use(CheckboxGroup);\n\nconst existsMap = 'https://unpkg.com/@palerock/exam-qa@latest/lib-json';\nexport default {\n name: \"HomeIndex\",\n data() {\n return {\n isShowImporter: false,\n isShowOption: false,\n isFromOnline: false,\n onlineLibs: [],\n onlineSelects: [],\n questionLib: '',\n examList: [],\n currentCategory: '',\n categories: [],\n optionInfo: {\n canReviewError: true,\n canDoExam: true,\n canClear: true,\n hashCode: ''\n }\n }\n },\n computed: {\n selectedLibs() {\n let res = this.onlineLibs.filter(lib => this.onlineSelects.includes(lib.hashCode)).map(lib => ({...lib}));\n res.forEach(r => {\n delete r.hashCode;\n });\n return res;\n },\n inCategory() {\n return !!this.currentCategory\n }\n },\n methods: {\n doExam(hashCode, isReviewError = false) {\n // let exam = utils.storage.getItem(hashCode);\n bankDao.query('hashCode').equals(hashCode).first()\n .then(exam => {\n return Promise.all([exam, ...exam.questions.map(q => questionDao.query('hashCode').equals(q).first())])\n })\n .then(([exam, ...questions]) => {\n exam.questions = questions;\n if (!exam) {\n Dialog.alert({message: '该题库已失效!'});\n return;\n }\n this.$router.push({\n name: 'DoExamPage',\n params: {\n examConfig: exam,\n isReviewError\n }\n })\n });\n },\n clearHistory(hashCode) {\n bankDao.queryByHashCode(hashCode)\n .then(bankDao => {\n bankDao = bankDao || {};\n return historyRecordDao.delete(bankDao.questions || []);\n }).then(() => {\n console.log('remove the history.');\n this.isShowOption = false;\n this.initExamList();\n }\n );\n },\n showOption(exam) {\n // console.log(exam.hashCode);\n if (exam.hasHistoryError) {\n this.optionInfo.hashCode = exam.hashCode;\n this.isShowOption = true;\n } else {\n this.doExam(exam.hashCode);\n }\n },\n selectLib(lib) {\n this.onlineSelects.includes(lib.hashCode) ? (this.onlineSelects = this.onlineSelects.filter(s => s !== lib.hashCode)) : (this.onlineSelects = [...this.onlineSelects, lib.hashCode])\n this.questionLib = JSON.stringify(this.selectedLibs);\n },\n showImporter() {\n this.isShowImporter = true;\n this.isFromOnline = false;\n },\n importFromExist() {\n this.isFromOnline = true;\n this.fetchOnlineLib().then(res => {\n this.onlineLibs = res.filter(r => r.data).map(r => ({\n ...r.data, hashCode: utils.getHashCode(r.data)\n }));\n }).catch(e => {\n console.log(e)\n alert('获取失败,请尝试自行录入');\n this.isShowImporter = false;\n })\n },\n async fetchOnlineLib() {\n const maps = (await this.$http.get(existsMap + \"/map.json\")).data || []\n const promises = maps.map(exist => this.$http.get(existsMap + \"/\" + exist));\n return Promise.all(promises);\n },\n async importLib() {\n try {\n let lib = JSON.parse(this.questionLib);\n if (lib instanceof Array) {\n await Promise.all(lib.map(async l => {\n await this.importSingleLib(l);\n }))\n } else {\n await this.importSingleLib(lib);\n }\n } catch (e) {\n alert(`题库格式错误:${utils.getMessage(e)}`)\n }\n await this.initExamList();\n this.isShowImporter = false;\n this.questionLib = ''\n },\n async importSingleLib(lib) {\n if (!lib.questions || lib.questions.length === 0) {\n return false;\n }\n lib.questions.forEach(q=>{\n q.hashCode = utils.getHashCode(q)\n })\n const bank = {\n ...lib,\n questions: lib.questions.map(q=>q.hashCode)\n }\n bank.hashCode = utils.getHashCode(bank)\n await questionDao.upsert(lib.questions)\n .then(()=>{\n return bankDao.upsert([bank]);\n })\n return true;\n },\n async intoCategory(category = 'default') {\n this.currentCategory = category\n this.examList = []\n await bankDao.query('hashCode').notEqual('').toArray().then(banks => {\n const promises = banks.map(bank => {\n return historyRecordDao.query('relatedQuestion').anyOf(bank.questions).sortBy('createDate')\n .then(records => {\n const errorMap = Object.fromEntries(records.map(record => [record.relatedQuestion, {\n ...record, times: record.errorTimes\n }]));\n const hasHistoryError = !!Object.values(errorMap).find(q => q.times > 0);\n return {...bank, errorMap, hasHistoryError}\n });\n });\n return Promise.all(promises);\n }).then(banks => {\n banks = banks.map(b => {\n b.category = b.category || 'default'\n return b\n })\n this.examList = banks.filter(b => b.category === category);\n })\n },\n async initExamList() {\n await bankDao.query('hashCode').notEqual('').toArray().then(banks => {\n banks = banks.map(b => {\n b.category = b.category || 'default'\n return b\n })\n this.categories = banks.reduce((ac, item) => {\n if (!ac.includes(item.category)) {\n ac.push(item.category)\n }\n return ac\n }, [])\n })\n if (this.currentCategory) {\n this.intoCategory(this.currentCategory)\n }\n },\n syncDataToIndexDB() {\n let exams = JSON.parse(JSON.stringify(this.examList))\n .map(e => ({...e, bank: utils.storage.getItem(e.hashCode)}))\n .map(e => ({\n ...e,\n questionSet: e.bank.questions,\n bank: {\n ...e.bank, hashCode: utils.getHashCode(e.bank),\n questions: e.bank.questions.map(q => utils.getHashCode(q))\n },\n historyRecords: Object.entries(e.errorMap)\n .map(([relatedQuestion, {times, rightTimes}]) => ({\n relatedQuestion, rightTimes, errorTimes: times\n }))\n }));\n questionDao.upsert(\n utils.flat(exams.map(e => e.questionSet.map(q => ({\n ...q,\n hashCode: utils.getHashCode(q),\n }))), 2)\n ).then(() => {\n return bankDao.upsert(exams.map(e => e.bank));\n }).then(() => {\n return historyRecordDao.upsert(utils.flat(exams.map(e => e.historyRecords), 2));\n }).then(() => {\n return configDao.upsert({key: 'hasSync', value: true});\n }).then(() => {\n console.log('sync success.');\n }).catch(e => {\n console.log(e);\n });\n // console.log(exams);\n }\n },\n mounted() {\n this.initExamList();\n // configDao.query('key').equals('hasSync').first()\n // .then(hasSync => {\n // hasSync = !!hasSync;\n // if (!hasSync) {\n // this.syncDataToIndexDB();\n // }\n // });\n }\n}\n</script>\n\n<style scoped>\n.exam-import-box {\n width: 20rem;\n padding: 1rem;\n}\n</style>\n\n\n// WEBPACK FOOTER //\n// src/components/home-pages/HomeIndex.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(!_vm.inCategory)?_c('van-grid',[_c('van-grid-item',{attrs:{\"icon\":\"notes-o\",\"clickable\":\"\"},on:{\"click\":_vm.showImporter}},[_c('div',{staticClass:\"van-grid-item__text text-align-center\",attrs:{\"slot\":\"text\"},slot:\"text\"},[_vm._v(\"开始答题(导入)\")])]),_vm._v(\" \"),_vm._l((_vm.categories),function(category){return _c('van-grid-item',{key:category,attrs:{\"icon\":\"notes-o\",\"clickable\":\"\"},on:{\"click\":function($event){return _vm.intoCategory(category)}}},[_c('div',{staticClass:\"van-grid-item__text text-align-center\",attrs:{\"slot\":\"text\"},slot:\"text\"},[_vm._v(_vm._s(category))])])})],2):_c('van-grid',[_c('van-grid-item',{attrs:{\"icon\":\"notes-o\",\"clickable\":\"\"},on:{\"click\":function($event){_vm.currentCategory = null}}},[_c('div',{staticClass:\"van-grid-item__text text-align-center\",attrs:{\"slot\":\"text\"},slot:\"text\"},[_vm._v(\"返回\")])]),_vm._v(\" \"),_vm._l((_vm.examList),function(exam){return _c('van-grid-item',{key:exam.hashCode,attrs:{\"icon\":\"notes-o\",\"clickable\":\"\"},on:{\"click\":function($event){return _vm.showOption(exam)}}},[_c('div',{staticClass:\"van-grid-item__text text-align-center\",attrs:{\"slot\":\"text\"},slot:\"text\"},[_vm._v(_vm._s(exam.title))])])})],2),_vm._v(\" \"),_c('van-popup',{model:{value:(_vm.isShowImporter),callback:function ($$v) {_vm.isShowImporter=$$v},expression:\"isShowImporter\"}},[_c('div',{staticClass:\"exam-import-box\"},[(_vm.isFromOnline)?_c('div',{staticStyle:{\"max-height\":\"300px\",\"overflow-y\":\"auto\"}},[_c('van-checkbox-group',{model:{value:(_vm.onlineSelects),callback:function ($$v) {_vm.onlineSelects=$$v},expression:\"onlineSelects\"}},[_c('van-cell-group',_vm._l((_vm.onlineLibs),function(lib,oi){return _c('van-cell',{key:oi,attrs:{\"clickable\":\"\"},on:{\"click\":function($event){return _vm.selectLib(lib)}}},[_c('template',{slot:\"title\"},[_c('span',[_vm._v(_vm._s(lib.title))])]),_vm._v(\" \"),_c('van-checkbox',{attrs:{\"slot\":\"right-icon\",\"name\":lib.hashCode},slot:\"right-icon\"})],2)}),1)],1)],1):_vm._e(),_vm._v(\" \"),(!_vm.isFromOnline)?_c('div',[_c('van-cell-group',[_c('van-field',{attrs:{\"label\":\"题库\",\"type\":\"textarea\",\"placeholder\":\"请输入题库\",\"rows\":\"10\"},model:{value:(_vm.questionLib),callback:function ($$v) {_vm.questionLib=$$v},expression:\"questionLib\"}})],1)],1):_vm._e(),_vm._v(\" \"),_c('div',[_c('van-button',{attrs:{\"type\":\"info\",\"size\":\"small\",\"block\":\"\"},on:{\"click\":_vm.importLib}},[_vm._v(\"导入题库\")])],1),_vm._v(\" \"),_c('div',{staticClass:\"exam-m-top-small\"},[_c('van-button',{attrs:{\"type\":\"primary\",\"size\":\"small\",\"block\":\"\"},on:{\"click\":_vm.importFromExist}},[_vm._v(\"获取在线题库\")])],1)])]),_vm._v(\" \"),_c('van-popup',{attrs:{\"position\":\"bottom\"},model:{value:(_vm.isShowOption),callback:function ($$v) {_vm.isShowOption=$$v},expression:\"isShowOption\"}},[_c('div',{},[_c('van-button',{attrs:{\"type\":\"primary\",\"block\":\"\"},on:{\"click\":function($event){return _vm.doExam(_vm.optionInfo.hashCode)}}},[_vm._v(\"重新测试\\n \")]),_vm._v(\" \"),_c('van-button',{attrs:{\"type\":\"info\",\"block\":\"\"},on:{\"click\":function($event){return _vm.doExam(_vm.optionInfo.hashCode,true)}}},[_vm._v(\"复习错题\\n \")]),_vm._v(\" \"),_c('van-button',{attrs:{\"type\":\"danger\",\"block\":\"\"},on:{\"click\":function($event){return _vm.clearHistory(_vm.optionInfo.hashCode)}}},[_vm._v(\"清空错题\\n \")])],1)])],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-30d414e0\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/home-pages/HomeIndex.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-30d414e0\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./HomeIndex.vue\")\n}\nvar normalizeComponent = require(\"!../../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./HomeIndex.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./HomeIndex.vue\"\n/* template */\nimport __vue_template__ from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-30d414e0\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./HomeIndex.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-30d414e0\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/home-pages/HomeIndex.vue\n// module id = null\n// module chunks = ","<template>\n <div>\n <van-button type=\"default\">默认按钮</van-button>\n <van-button type=\"primary\">主要按钮</van-button>\n <van-button type=\"info\">信息按钮</van-button>\n <van-button type=\"warning\">警告按钮</van-button>\n <van-button type=\"danger\">危险按钮</van-button>\n </div>\n</template>\n\n<script>\n import Vue from 'vue';\n import { Button } from 'vant';\n\n Vue.use(Button);\n\n export default {\n name: 'HelloWorld',\n data() {\n return {\n msg: 'Welcome to Your Vue.js App'\n }\n }\n }\n</script>\n\n\n\n// WEBPACK FOOTER //\n// src/components/HelloWorld.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('van-button',{attrs:{\"type\":\"default\"}},[_vm._v(\"默认按钮\")]),_vm._v(\" \"),_c('van-button',{attrs:{\"type\":\"primary\"}},[_vm._v(\"主要按钮\")]),_vm._v(\" \"),_c('van-button',{attrs:{\"type\":\"info\"}},[_vm._v(\"信息按钮\")]),_vm._v(\" \"),_c('van-button',{attrs:{\"type\":\"warning\"}},[_vm._v(\"警告按钮\")]),_vm._v(\" \"),_c('van-button',{attrs:{\"type\":\"danger\"}},[_vm._v(\"危险按钮\")])],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-a0448bfc\",\"hasScoped\":false,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/HelloWorld.vue\n// module id = null\n// module chunks = ","var normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./HelloWorld.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./HelloWorld.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-a0448bfc\\\",\\\"hasScoped\\\":false,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./HelloWorld.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/HelloWorld.vue\n// module id = null\n// module chunks = ","<template>\n <div>\n <van-nav-bar\n :title=\"activePage.label\"\n fixed\n ></van-nav-bar>\n <div class=\"is-relation\">\n <component :is=\"activePage.api\"></component>\n <p class=\"text-align-center is-absolute\" style=\"color: #efefef;width: 100%\">{{version}}</p>\n </div>\n <van-tabbar v-model=\"activeTabIndex\">\n <van-tabbar-item v-for=\"(page, i) in pages\" :key=\"i\" :icon=\"page.icon\">{{page.label}}</van-tabbar-item>\n </van-tabbar>\n </div>\n</template>\n\n<script>\n import Vue from 'vue';\n import {NavBar} from 'vant';\n import {Tabbar, TabbarItem} from 'vant';\n import HomeIndex from \"@/components/home-pages/HomeIndex\";\n import HelloWorld from \"@/components/HelloWorld\";\n import config from \"@/config\";\n\n Vue.use(NavBar).use(Tabbar).use(TabbarItem);\n\n export default {\n name: \"HomePage\",\n data() {\n return {\n activeTabIndex: 0,\n pages: [\n {title: '主页', label: 'Home', api: HomeIndex, icon: 'home-o'},\n // {title: '搜索', label: '搜索', api: HelloWorld, icon: 'search'},\n // {title: '朋友', label: '朋友', api: HomeIndex, icon: 'friends-o'},\n // {title: '设置', label: '设置', api: HomeIndex, icon: 'setting-o'},\n ],\n }\n },\n computed: {\n activePage() {\n return this.pages[this.activeTabIndex] || {};\n },\n version() {\n return config.version;\n }\n }\n }\n</script>\n\n<style scoped>\n\n</style>\n\n\n// WEBPACK FOOTER //\n// src/components/HomePage.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('van-nav-bar',{attrs:{\"title\":_vm.activePage.label,\"fixed\":\"\"}}),_vm._v(\" \"),_c('div',{staticClass:\"is-relation\"},[_c(_vm.activePage.api,{tag:\"component\"}),_vm._v(\" \"),_c('p',{staticClass:\"text-align-center is-absolute\",staticStyle:{\"color\":\"#efefef\",\"width\":\"100%\"}},[_vm._v(_vm._s(_vm.version))])],1),_vm._v(\" \"),_c('van-tabbar',{model:{value:(_vm.activeTabIndex),callback:function ($$v) {_vm.activeTabIndex=$$v},expression:\"activeTabIndex\"}},_vm._l((_vm.pages),function(page,i){return _c('van-tabbar-item',{key:i,attrs:{\"icon\":page.icon}},[_vm._v(_vm._s(page.label))])}),1)],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-5c9e76e7\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/HomePage.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-5c9e76e7\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./HomePage.vue\")\n}\nvar normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./HomePage.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./HomePage.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-5c9e76e7\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./HomePage.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-5c9e76e7\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/HomePage.vue\n// module id = null\n// module chunks = ","<template>\n <div class=\"exam-root\" v-finger:swipe=\"swipe\">\n <van-nav-bar\n :title=\"examInfo.title\"\n fixed\n left-arrow\n right-text=\"目录\"\n @click-left=\"$router.back()\"\n @click-right=\"showAcButtons = !showAcButtons\"\n ></van-nav-bar>\n <div class=\"ac-qn-backdrop\" v-show=\"showAcButtons\" @click.stop=\"showAcButtons = false\">\n <div class=\"exam-p-around-small ac-qn\" @click.stop>\n <van-row>\n <van-col span=\"4\" v-for=\"(question,i) in questionsInfo\" :key=\"i\">\n <div class=\"exam-circle exam-done\" @click=\"turnTo(i)\"\n :class=\"{'exam-right':question.answer.isPass&&(isShowResult||(question.answer.isChecked&&isPractice)),'exam-error':question.answer.isMistake&&(isShowResult||(question.answer.isChecked&&isPractice)),'exam-current': questionNum === i}\">\n {{ i + 1 }}\n </div>\n </van-col>\n </van-row>\n </div>\n </div>\n <div class=\"question-box\" @dblclick.stop=\"showAcButtons = true\"\n :style=\"`width: ${totalNum*100}%;transform:translate(${-questionNum*100/totalNum}%,0)`\">\n <div class=\"question-item\" v-for=\"(question,i) in questionsInfo\" :key=\"question.hashCode\">\n <van-panel :title=\"getQuestionTitle(question)\" :desc=\"getQuestionDesc(question)\">\n <div v-if=\"question.isMulti\">\n <van-checkbox-group v-model=\"question.answer.multi.apis\" @click.stop @dblclick.stop>\n <van-cell-group>\n <van-cell v-for=\"(option, oi) in question.answerOptions\"\n clickable @click=\"toggleAnswer(i, option.api)\"\n :key=\"oi\">\n <template slot=\"title\">\n <span\n :class=\"{'right-answer':option.isRight&&isShowResult||(option.isRight&&question.answer.isChecked&&isPractice),'error-answer':!option.isRight&&isShowResult||(!option.isRight&&question.answer.isAnswered&&isPractice),'custom-title':true}\">{{\n letterIndex[oi] + '. ' + option.describe\n }}</span>\n </template>\n <van-checkbox slot=\"right-icon\" :name=\"option.api\"\n :checked-color=\"getOptionColor(question,option)\"></van-checkbox>\n </van-cell>\n </van-cell-group>\n </van-checkbox-group>\n </div>\n <div v-if=\"!question.isMulti\">\n <van-radio-group v-model=\"question.answer.single.api\">\n <van-cell-group>\n <van-cell v-for=\"(option, oi) in question.answerOptions\"\n clickable @click=\"setAnswer(i, [option.api])\"\n :key=\"oi\">\n <template slot=\"title\">\n <span\n :class=\"{'right-answer':option.isRight&&isShowResult||(option.isRight&&question.answer.isChecked&&isPractice),'error-answer':!option.isRight&&isShowResult||(!option.isRight&&question.answer.isAnswered&&isPractice),'custom-title':true}\">{{\n letterIndex[oi] + '. ' + option.describe\n }}</span>\n </template>\n <van-radio slot=\"right-icon\" :name=\"option.api\"\n :checked-color=\"getOptionColor(question,option)\"></van-radio>\n </van-cell>\n </van-cell-group>\n </van-radio-group>\n </div>\n </van-panel>\n </div>\n </div>\n <div class=\"text-align-center ac-buttons\" v-if=\"questionsInfo[questionNum]\">\n <van-button size=\"small\" v-if=\"questionNum>0\" @click=\"turnTo(questionNum-1)\">上一题</van-button>\n <van-button size=\"small\" type=\"info\" v-if=\"questionNum<totalNum-1\" @click=\"turnTo(questionNum+1)\">下一题\n </van-button>\n <van-button size=\"small\" type=\"warning\" v-if=\"isPractice&&!questionsInfo[questionNum].answer.isChecked\"\n @click=\"checkResult(questionNum)\">检查该题答案\n </van-button>\n <van-button size=\"small\" type=\"primary\" v-if=\"!hasSubmit\" @click=\"confirmSubmit\">提交\n </van-button>\n </div>\n\n </div>\n</template>\n\n<script>\nimport Vue from 'vue';\nimport {NavBar} from 'vant';\nimport {Panel} from 'vant';\nimport {Button} from 'vant';\nimport {Cell, CellGroup} from 'vant';\nimport {RadioGroup, Radio} from 'vant';\nimport {Checkbox, CheckboxGroup} from 'vant';\nimport {Dialog} from 'vant';\nimport {Row, Col} from 'vant';\nimport utils from '../../utils';\nimport {historyRecordDao, bankDao} from '../../dao'\n\nVue.use(Row).use(Col);\n// 全局注册\nVue.use(Dialog);\nVue.use(Checkbox).use(CheckboxGroup);\nVue.use(RadioGroup);\nVue.use(Radio);\nVue.use(Cell).use(CellGroup);\n\nconst defaultQuestionInfo = {\n required: true,\n score: 1,\n usingScore: false,\n type: 'option', // text, number\n describe: 'Do you love me?Do you love me?Do you love me?Do you love me?Do you love me?Do you love me?Do you love me?Do you love me?Do you love me?Do you love me?Do you love me?Do you love me?Do you love me?',\n answerOptions: [\n {api: 'A', describe: 'Yes', isRight: true},\n {api: 'B', describe: 'No'}\n ]\n};\n\nconst defaultExamInfo = {\n title: '试题测试',\n questions: [defaultQuestionInfo]\n};\n\nVue.use(NavBar).use(Panel).use(Button);\n\nexport default {\n name: \"DoExamPage\",\n data() {\n return {\n answers: [],\n questionNum: 0,\n isShowResult: false,\n letterIndex: [...'ABCDEFGHIJKLMNOPQRSTUVWXYZ'],\n examInfo: {},\n hasSubmit: false,\n examHashCode: 0,\n historyExams: [],\n showAcButtons: false\n }\n },\n computed: {\n totalNum() {\n return this.questions.length;\n },\n questions() {\n return (this.examInfo.questions || []).filter(\n q => this.isReviewError ? this.historyErrorHashCodes.includes(q.hashCode) : true\n ).map((q, i) => ({...q, active: i === this.questionNum}));\n },\n questionsInfo() {\n return this.questions.map(\n (q, i) => {\n if (!this.answers[i]) {\n this.answers[i] = {results: [{}], single: {}, multi: {apis: []}}\n }\n return {\n ...q,\n answer: this.answers[i] || {},\n orderNum: i + 1,\n isMulti: q.answerOptions.filter(opt => opt.isRight).length > 1\n }\n }\n )\n },\n historyErrorHashCodes() {\n return this.historyExams.filter(exam => exam.errorTimes > 0).map(exam => exam.hashCode);\n }\n },\n methods: {\n getQuestionTitle(question) {\n return [`(${this.questionNum + 1}/${this.totalNum})`, question.describe].join(' ');\n },\n getQuestionDesc(question) {\n let result = '';\n if (!question.required) {\n result += '(可选)'\n }\n if (question.type === 'option') {\n if (question.isMulti) {\n result += '多选题'\n } else {\n result += '单选题'\n }\n }\n let errorExam = this.historyExams.find(exam => exam.hashCode === question.hashCode);\n if (errorExam) {\n if (this.isReviewError) {\n if (errorExam.errorTimes) {\n result += ` (做错次数: ${errorExam.errorTimes})`;\n }\n }\n const totalTimes = errorExam.errorTimes + errorExam.rightTimes;\n if (totalTimes > 0) {\n result += `(历史正确率:${(errorExam.rightTimes / totalTimes * 100).toFixed(0)}%)`;\n }\n }\n return result;\n },\n /**\n * @param i\n * @param api {Array}\n */\n setAnswer(i, api) {\n this.answers = [...this.answers].map((answer, ai) => {\n if (ai === i) {\n answer.results = api.map(a => ({api: a}));\n answer.single.api = api[0];\n answer.multi.apis = api;\n }\n return answer;\n });\n },\n toggleAnswer(i, api) {\n let apis = this.answers[i].multi.apis;\n if (apis.includes(api)) {\n apis = apis.filter(a => a !== api);\n } else {\n apis.push(api);\n apis = [...apis];\n }\n this.setAnswer(i, apis);\n },\n checkResult(i) {\n this.answers = [...this.answers].map((answer, ai) => {\n if (i !== ai && i != null) {\n return answer;\n }\n let question = this.questions[ai];\n let rightAnswers = question.answerOptions.filter(option => option.isRight).map(option => option.api);\n answer.results.forEach(res => {\n res.isMistake = !rightAnswers.includes(res.api);\n });\n answer.isAnswered = answer.results.filter(res => res.api).length > 0;\n if (!answer.isChecked && answer.isAnswered) {\n answer.isMistake = answer.results.length !== rightAnswers.length || !!answer.results.find(res => res.isMistake);\n answer.isPass = answer.isAnswered && !answer.isMistake;\n answer.isChecked = true;\n }\n return answer;\n })\n },\n turnTo(i) {\n this.questionNum = i;\n },\n confirmSubmit() {\n Dialog.confirm({\n title: '提交答案',\n message: '确认提交?'\n }).then(() => {\n this.submit();\n }).catch(e => {\n console.log(e);\n });\n },\n submit() {\n this.checkResult();\n let answeredNum = this.questionsInfo.filter(q => q.answer.isAnswered).length;\n if (answeredNum < this.totalNum && this.requireAllDone) {\n Dialog.alert({message: '题目还没有答完:' + `${answeredNum}/${this.totalNum}`});\n return;\n }\n let rightNum = this.questionsInfo.filter(q => q.answer.isPass).length;\n let rightRate = (rightNum / this.totalNum) * 100 + '%';\n\n // 录入错误信息\n let checkedQuestion = this.questionsInfo.filter(q => q.answer.isChecked);\n checkedQuestion.forEach(question => {\n historyRecordDao.queryByHashCode(question.hashCode).then(\n codeInfo => {\n if (!codeInfo) {\n codeInfo = {relatedQuestion: question.hashCode, errorTimes: 0};\n }\n if (question.answer.isPass) {\n codeInfo.rightTimes++;\n } else {\n codeInfo.errorTimes++;\n }\n historyRecordDao.upsert(codeInfo)\n .then(() => {\n console.log('做题信息已保存');\n });\n }\n );\n });\n\n // 显示答题结果\n this.isShowResult = true;\n Dialog.alert({message: '答题结束,成绩如下:' + `正确:${rightNum}(总共:${this.totalNum})(正确率:${rightRate})`});\n this.hasSubmit = true;\n },\n adaptExamConfig() {\n let examInfo = {...defaultExamInfo, ...this.examConfig};\n examInfo.questions = examInfo.questions.map(q => ({\n ...defaultQuestionInfo, ...q, hashCode: q.hashCode,\n answerOptions: !q.answerOptions ? [] : q.answerOptions.map(a => ({\n ...a,\n api: utils.getHashCode(a) + ''\n }))\n })).filter(q => {\n if (!q.describe || q.answerOptions.length === 0) {\n console.log('错误的题目(无描述或无答案).', q);\n return false;\n }\n // 去掉无正确答案的问题\n const checkNoAnswer = utils.groupArray(q.answerOptions, 'isRight');\n if (checkNoAnswer.length === 1 && !checkNoAnswer[0][0].isRight) {\n console.log('错误的题目(无正确答案).', q);\n return false;\n }\n // 去掉问题中重复的答案\n const checkDuplicate = utils.groupArray(q.answerOptions, 'describe');\n const resultAnswers = checkDuplicate.map(checks => {\n if (checks.length > 1) {\n const result = {...checks[0]};\n if (utils.groupArray(checks, 'isRight').length !== checks.length) {\n result.invalid = true;\n }\n return result;\n }\n return checks[0];\n });\n // 去掉答案中有重复描述且对错不一的问题\n if (resultAnswers.find(r => r.invalid)) {\n console.log('错误的题目(答案中有重复描述且对错不一).', q);\n return false;\n }\n q.answerOptions = utils.randomSort(resultAnswers);\n return true;\n });\n examInfo.questions = utils.randomSort(examInfo.questions);\n\n this.examInfo = examInfo;\n this.examHashCode = this.examConfig.hashCode;\n this.loadHistoryExamInfo();\n },\n getOptionColor(question, option) {\n if (this.isShowResult || (this.isPractice && question.answer.isChecked)) {\n return question.answer.results.map(res => res.api).includes(option.api) && option.isRight ? '#44af11' : '#cd0000'\n }\n return '#1989fa';\n },\n loadHistoryExamInfo() {\n historyRecordDao.queryMany(this.examConfig.questions.map(q => q.hashCode))\n .then(records => {\n // console.log(records.map(r => r.relatedQuestion));\n this.historyExams = records.map(r => ({...r, hashCode: r.relatedQuestion}));\n // console.log(this.historyExams);\n });\n // const errorMapKey = 'errorMap_' + this.examHashCode;\n // let errorMap = utils.storage.getItem(errorMapKey);\n // if (errorMap) {\n // this.historyExams = Object.entries(errorMap).map(([key, value]) => ({hashCode: key, ...value}));\n // }\n },\n swipe: function (evt) {\n switch (evt.direction) {\n case 'Left':\n if (this.questionNum < this.totalNum - 1) {\n this.turnTo(this.questionNum + 1);\n }\n break;\n case 'Right':\n if (this.questionNum > 0) {\n this.turnTo(this.questionNum - 1);\n }\n break;\n case 'Up':\n this.showAcButtons = false\n break;\n case 'Down':\n this.showAcButtons = true\n break\n default:\n }\n }\n },\n props: {\n examConfig: {\n type: Object,\n default() {\n return defaultExamInfo;\n }\n },\n isReviewError: {\n type: Boolean,\n default: false\n },\n isNew: {\n type: Boolean,\n default: false\n },\n requireAllDone: {\n type: Boolean,\n default: false\n },\n isPractice: {\n type: Boolean,\n default: true\n }\n },\n watch: {\n examConfig() {\n this.adaptExamConfig();\n }\n },\n mounted() {\n this.adaptExamConfig();\n console.log('开始答题');\n try {\n plus.device.setWakelock(true);\n console.log('打开屏幕常亮');\n } catch (e) {\n // ignore\n }\n },\n destroyed() {\n console.log('结束答题');\n try {\n plus.device.setWakelock(false);\n console.log('关闭屏幕常亮');\n } catch (e) {\n // ignore\n }\n }\n}\n</script>\n\n<style scoped>\n.exam-root {\n overflow-x: hidden;\n top: 0;\n bottom: 0\n}\n\nspan.error-answer {\n color: #cd0000;\n}\n\nspan.right-answer {\n color: #44af11;\n}\n\nspan.custom-title {\n word-break: break-word;\n}\n\n.exam-circle {\n height: 2rem;\n width: 2rem;\n border: 1px solid #1989fa;\n border-radius: 50%;\n line-height: 2rem;\n text-align: center;\n color: #1989fa;\n cursor: pointer;\n margin-bottom: .5rem;\n}\n\n.exam-circle.exam-error {\n color: #cd0000;\n border-color: #cd0000;\n}\n\n.exam-circle.exam-right {\n color: #44af11;\n border-color: #44af11;\n}\n\n.exam-circle.exam-current {\n background-color: #1989fa;\n color: white;\n}\n\n.exam-circle.exam-error.exam-current {\n background-color: #cd0000;\n color: white;\n}\n\n.exam-circle.exam-right.exam-current {\n background-color: #44af11;\n color: white;\n}\n\n.question-box {\n position: relative;\n width: 100%;\n display: flex;\n transition: transform .35s;\n padding-bottom: 70px;\n padding-top: 46px;\n}\n\n.question-item {\n width: 100%;\n}\n\n.question-enter, .question-leave-to {\n opacity: 0;\n}\n\n.ac-buttons {\n position: fixed;\n bottom: 0;\n left: 0;\n width: 100%;\n padding: 20px;\n box-sizing: border-box;\n background: #fff;\n box-shadow: 0 -1px 5px 0 rgba(0, 0, 0, .1);\n}\n\n.ac-qn {\n z-index: 100;\n background: #fff;\n box-shadow: 0 1px 5px 0 rgba(0, 0, 0, .1);\n}\n\n.ac-qn-backdrop{\n position: fixed;\n top: 46px;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, .5);\n z-index: 1;\n}\n\n</style>\n\n\n// WEBPACK FOOTER //\n// src/components/exam/DoExamPage.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"finger\",rawName:\"v-finger:swipe\",value:(_vm.swipe),expression:\"swipe\",arg:\"swipe\"}],staticClass:\"exam-root\"},[_c('van-nav-bar',{attrs:{\"title\":_vm.examInfo.title,\"fixed\":\"\",\"left-arrow\":\"\",\"right-text\":\"目录\"},on:{\"click-left\":function($event){return _vm.$router.back()},\"click-right\":function($event){_vm.showAcButtons = !_vm.showAcButtons}}}),_vm._v(\" \"),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showAcButtons),expression:\"showAcButtons\"}],staticClass:\"ac-qn-backdrop\",on:{\"click\":function($event){$event.stopPropagation();_vm.showAcButtons = false}}},[_c('div',{staticClass:\"exam-p-around-small ac-qn\",on:{\"click\":function($event){$event.stopPropagation();}}},[_c('van-row',_vm._l((_vm.questionsInfo),function(question,i){return _c('van-col',{key:i,attrs:{\"span\":\"4\"}},[_c('div',{staticClass:\"exam-circle exam-done\",class:{'exam-right':question.answer.isPass&&(_vm.isShowResult||(question.answer.isChecked&&_vm.isPractice)),'exam-error':question.answer.isMistake&&(_vm.isShowResult||(question.answer.isChecked&&_vm.isPractice)),'exam-current': _vm.questionNum === i},on:{\"click\":function($event){return _vm.turnTo(i)}}},[_vm._v(\"\\n \"+_vm._s(i + 1)+\"\\n \")])])}),1)],1)]),_vm._v(\" \"),_c('div',{staticClass:\"question-box\",style:((\"width: \" + (_vm.totalNum*100) + \"%;transform:translate(\" + (-_vm.questionNum*100/_vm.totalNum) + \"%,0)\")),on:{\"dblclick\":function($event){$event.stopPropagation();_vm.showAcButtons = true}}},_vm._l((_vm.questionsInfo),function(question,i){return _c('div',{key:question.hashCode,staticClass:\"question-item\"},[_c('van-panel',{attrs:{\"title\":_vm.getQuestionTitle(question),\"desc\":_vm.getQuestionDesc(question)}},[(question.isMulti)?_c('div',[_c('van-checkbox-group',{on:{\"click\":function($event){$event.stopPropagation();},\"dblclick\":function($event){$event.stopPropagation();}},model:{value:(question.answer.multi.apis),callback:function ($$v) {_vm.$set(question.answer.multi, \"apis\", $$v)},expression:\"question.answer.multi.apis\"}},[_c('van-cell-group',_vm._l((question.answerOptions),function(option,oi){return _c('van-cell',{key:oi,attrs:{\"clickable\":\"\"},on:{\"click\":function($event){return _vm.toggleAnswer(i, option.api)}}},[_c('template',{slot:\"title\"},[_c('span',{class:{'right-answer':option.isRight&&_vm.isShowResult||(option.isRight&&question.answer.isChecked&&_vm.isPractice),'error-answer':!option.isRight&&_vm.isShowResult||(!option.isRight&&question.answer.isAnswered&&_vm.isPractice),'custom-title':true}},[_vm._v(_vm._s(_vm.letterIndex[oi] + '. ' + option.describe))])]),_vm._v(\" \"),_c('van-checkbox',{attrs:{\"slot\":\"right-icon\",\"name\":option.api,\"checked-color\":_vm.getOptionColor(question,option)},slot:\"right-icon\"})],2)}),1)],1)],1):_vm._e(),_vm._v(\" \"),(!question.isMulti)?_c('div',[_c('van-radio-group',{model:{value:(question.answer.single.api),callback:function ($$v) {_vm.$set(question.answer.single, \"api\", $$v)},expression:\"question.answer.single.api\"}},[_c('van-cell-group',_vm._l((question.answerOptions),function(option,oi){return _c('van-cell',{key:oi,attrs:{\"clickable\":\"\"},on:{\"click\":function($event){return _vm.setAnswer(i, [option.api])}}},[_c('template',{slot:\"title\"},[_c('span',{class:{'right-answer':option.isRight&&_vm.isShowResult||(option.isRight&&question.answer.isChecked&&_vm.isPractice),'error-answer':!option.isRight&&_vm.isShowResult||(!option.isRight&&question.answer.isAnswered&&_vm.isPractice),'custom-title':true}},[_vm._v(_vm._s(_vm.letterIndex[oi] + '. ' + option.describe))])]),_vm._v(\" \"),_c('van-radio',{attrs:{\"slot\":\"right-icon\",\"name\":option.api,\"checked-color\":_vm.getOptionColor(question,option)},slot:\"right-icon\"})],2)}),1)],1)],1):_vm._e()])],1)}),0),_vm._v(\" \"),(_vm.questionsInfo[_vm.questionNum])?_c('div',{staticClass:\"text-align-center ac-buttons\"},[(_vm.questionNum>0)?_c('van-button',{attrs:{\"size\":\"small\"},on:{\"click\":function($event){return _vm.turnTo(_vm.questionNum-1)}}},[_vm._v(\"上一题\")]):_vm._e(),_vm._v(\" \"),(_vm.questionNum<_vm.totalNum-1)?_c('van-button',{attrs:{\"size\":\"small\",\"type\":\"info\"},on:{\"click\":function($event){return _vm.turnTo(_vm.questionNum+1)}}},[_vm._v(\"下一题\\n \")]):_vm._e(),_vm._v(\" \"),(_vm.isPractice&&!_vm.questionsInfo[_vm.questionNum].answer.isChecked)?_c('van-button',{attrs:{\"size\":\"small\",\"type\":\"warning\"},on:{\"click\":function($event){return _vm.checkResult(_vm.questionNum)}}},[_vm._v(\"检查该题答案\\n \")]):_vm._e(),_vm._v(\" \"),(!_vm.hasSubmit)?_c('van-button',{attrs:{\"size\":\"small\",\"type\":\"primary\"},on:{\"click\":_vm.confirmSubmit}},[_vm._v(\"提交\\n \")]):_vm._e()],1):_vm._e()],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-4b469db2\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/exam/DoExamPage.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-4b469db2\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./DoExamPage.vue\")\n}\nvar normalizeComponent = require(\"!../../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./DoExamPage.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./DoExamPage.vue\"\n/* template */\nimport __vue_template__ from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-4b469db2\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./DoExamPage.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-4b469db2\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/exam/DoExamPage.vue\n// module id = null\n// module chunks = ","import Vue from 'vue'\nimport Router from 'vue-router'\nimport HomePage from \"@/components/HomePage\";\nimport DoExamPage from \"@/components/exam/DoExamPage\";\n\nVue.use(Router);\n\nexport default new Router({\n routes: [\n {\n path: '/',\n name: 'HomePage',\n component: HomePage\n },\n {\n path: '/exam',\n name: 'DoExamPage',\n component: DoExamPage,\n props: true\n }\n ]\n})\n\n\n\n// WEBPACK FOOTER //\n// ./src/router/index.js","import Vue from 'vue'\nimport axios from 'axios'\nimport jsonp from 'jsonp'\nimport Utils from '../utils'\nimport AlloyFinger from 'alloyfinger'\nimport AlloyFingerPlugin from 'alloyfinger/vue/alloy_finger_vue'\n\nVue.use(AlloyFingerPlugin,{\n AlloyFinger\n});\n\nVue.prototype.$http = axios;\nVue.prototype.$http.jsonp = jsonp;\n\nif (!Object.fromEntries) {\n Object.fromEntries = Utils.fromEntries;\n}\n\nif (!Array.prototype.flat) {\n try {\n Object.defineProperty(Array.prototype, 'flat', {\n value: function (deep) {\n return Utils.flat(this, deep);\n },\n enumerable: false\n })\n } catch (e) {\n Array.prototype.flat = function (deep) {\n return Utils.flat(this, deep);\n }\n }\n}\n\n\n// WEBPACK FOOTER //\n// ./src/plugins/index.js","// The Vue build version to load with the `import` command\n// (runtime-only or standalone) has been set in webpack.base.conf with an alias.\nimport Vue from 'vue'\nimport App from './App'\nimport router from './router'\nimport './assets/common.css';\nimport './plugins';\n\nVue.config.productionTip = false;\n\n/* eslint-disable no-new */\nnew Vue({\n el: '#app',\n router,\n components: { App },\n template: '<App/>'\n});\n\n\n\n// WEBPACK FOOTER //\n// ./src/main.js"],"sourceRoot":""}
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack:///webpack/bootstrap 0fd4665f98ed9c6bbef2"],"names":["parentJsonpFunction","window","chunkIds","moreModules","executeModules","moduleId","chunkId","result","i","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","call","modules","shift","__webpack_require__","s","installedModules","2","exports","module","l","m","c","d","name","getter","o","defineProperty","configurable","enumerable","get","n","__esModule","object","property","p","oe","err","console","error"],"mappings":"aACA,IAAAA,EAAAC,OAAA,aACAA,OAAA,sBAAAC,EAAAC,EAAAC,GAIA,IADA,IAAAC,EAAAC,EAAAC,EAAAC,EAAA,EAAAC,KACQD,EAAAN,EAAAQ,OAAoBF,IAC5BF,EAAAJ,EAAAM,GACAG,EAAAL,IACAG,EAAAG,KAAAD,EAAAL,GAAA,IAEAK,EAAAL,GAAA,EAEA,IAAAD,KAAAF,EACAU,OAAAC,UAAAC,eAAAC,KAAAb,EAAAE,KACAY,EAAAZ,GAAAF,EAAAE,IAIA,IADAL,KAAAE,EAAAC,EAAAC,GACAK,EAAAC,QACAD,EAAAS,OAAAT,GAEA,GAAAL,EACA,IAAAI,EAAA,EAAYA,EAAAJ,EAAAM,OAA2BF,IACvCD,EAAAY,IAAAC,EAAAhB,EAAAI,IAGA,OAAAD,GAIA,IAAAc,KAGAV,GACAW,EAAA,GAIA,SAAAH,EAAAd,GAGA,GAAAgB,EAAAhB,GACA,OAAAgB,EAAAhB,GAAAkB,QAGA,IAAAC,EAAAH,EAAAhB,IACAG,EAAAH,EACAoB,GAAA,EACAF,YAUA,OANAN,EAAAZ,GAAAW,KAAAQ,EAAAD,QAAAC,IAAAD,QAAAJ,GAGAK,EAAAC,GAAA,EAGAD,EAAAD,QAKAJ,EAAAO,EAAAT,EAGAE,EAAAQ,EAAAN,EAGAF,EAAAS,EAAA,SAAAL,EAAAM,EAAAC,GACAX,EAAAY,EAAAR,EAAAM,IACAhB,OAAAmB,eAAAT,EAAAM,GACAI,cAAA,EACAC,YAAA,EACAC,IAAAL,KAMAX,EAAAiB,EAAA,SAAAZ,GACA,IAAAM,EAAAN,KAAAa,WACA,WAA2B,OAAAb,EAAA,SAC3B,WAAiC,OAAAA,GAEjC,OADAL,EAAAS,EAAAE,EAAA,IAAAA,GACAA,GAIAX,EAAAY,EAAA,SAAAO,EAAAC,GAAsD,OAAA1B,OAAAC,UAAAC,eAAAC,KAAAsB,EAAAC,IAGtDpB,EAAAqB,EAAA,KAGArB,EAAAsB,GAAA,SAAAC,GAA8D,MAApBC,QAAAC,MAAAF,GAAoBA","file":"static/js/manifest.3ad1d5771e9b13dbdad2.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) {\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [], result;\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules);\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n \t\tif(executeModules) {\n \t\t\tfor(i=0; i < executeModules.length; i++) {\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = executeModules[i]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t};\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// objects to store loaded and loading chunks\n \tvar installedChunks = {\n \t\t2: 0\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"./\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 0fd4665f98ed9c6bbef2"],"sourceRoot":""}
1
+ {"version":3,"sources":["webpack:///webpack/bootstrap dc988fe622650e14cb1d"],"names":["parentJsonpFunction","window","chunkIds","moreModules","executeModules","moduleId","chunkId","result","i","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","call","modules","shift","__webpack_require__","s","installedModules","2","exports","module","l","m","c","d","name","getter","o","defineProperty","configurable","enumerable","get","n","__esModule","object","property","p","oe","err","console","error"],"mappings":"aACA,IAAAA,EAAAC,OAAA,aACAA,OAAA,sBAAAC,EAAAC,EAAAC,GAIA,IADA,IAAAC,EAAAC,EAAAC,EAAAC,EAAA,EAAAC,KACQD,EAAAN,EAAAQ,OAAoBF,IAC5BF,EAAAJ,EAAAM,GACAG,EAAAL,IACAG,EAAAG,KAAAD,EAAAL,GAAA,IAEAK,EAAAL,GAAA,EAEA,IAAAD,KAAAF,EACAU,OAAAC,UAAAC,eAAAC,KAAAb,EAAAE,KACAY,EAAAZ,GAAAF,EAAAE,IAIA,IADAL,KAAAE,EAAAC,EAAAC,GACAK,EAAAC,QACAD,EAAAS,OAAAT,GAEA,GAAAL,EACA,IAAAI,EAAA,EAAYA,EAAAJ,EAAAM,OAA2BF,IACvCD,EAAAY,IAAAC,EAAAhB,EAAAI,IAGA,OAAAD,GAIA,IAAAc,KAGAV,GACAW,EAAA,GAIA,SAAAH,EAAAd,GAGA,GAAAgB,EAAAhB,GACA,OAAAgB,EAAAhB,GAAAkB,QAGA,IAAAC,EAAAH,EAAAhB,IACAG,EAAAH,EACAoB,GAAA,EACAF,YAUA,OANAN,EAAAZ,GAAAW,KAAAQ,EAAAD,QAAAC,IAAAD,QAAAJ,GAGAK,EAAAC,GAAA,EAGAD,EAAAD,QAKAJ,EAAAO,EAAAT,EAGAE,EAAAQ,EAAAN,EAGAF,EAAAS,EAAA,SAAAL,EAAAM,EAAAC,GACAX,EAAAY,EAAAR,EAAAM,IACAhB,OAAAmB,eAAAT,EAAAM,GACAI,cAAA,EACAC,YAAA,EACAC,IAAAL,KAMAX,EAAAiB,EAAA,SAAAZ,GACA,IAAAM,EAAAN,KAAAa,WACA,WAA2B,OAAAb,EAAA,SAC3B,WAAiC,OAAAA,GAEjC,OADAL,EAAAS,EAAAE,EAAA,IAAAA,GACAA,GAIAX,EAAAY,EAAA,SAAAO,EAAAC,GAAsD,OAAA1B,OAAAC,UAAAC,eAAAC,KAAAsB,EAAAC,IAGtDpB,EAAAqB,EAAA,KAGArB,EAAAsB,GAAA,SAAAC,GAA8D,MAApBC,QAAAC,MAAAF,GAAoBA","file":"static/js/manifest.3ad1d5771e9b13dbdad2.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) {\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [], result;\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules);\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n \t\tif(executeModules) {\n \t\t\tfor(i=0; i < executeModules.length; i++) {\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = executeModules[i]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t};\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// objects to store loaded and loading chunks\n \tvar installedChunks = {\n \t\t2: 0\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"./\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap dc988fe622650e14cb1d"],"sourceRoot":""}
@@ -0,0 +1,318 @@
1
+ {
2
+ "title": "Salesforce-Certified-Platform-Developer-1-[Set-1]",
3
+ "category": "Salesforce Dev 1",
4
+ "questions": [
5
+ {
6
+ "describe": "A developer needs to write a method that searches for a phone number that could be on multiple object types.\nWhich method should the developer use to accomplish this task?",
7
+ "answerOptions": [
8
+ {
9
+ "isRight": false,
10
+ "describe": "SOQL Query that includes ALL ROWS"
11
+ },
12
+ {
13
+ "isRight": false,
14
+ "describe": "SOSL Search that includes ALL ROWS"
15
+ },
16
+ {
17
+ "isRight": true,
18
+ "describe": "SOSL Search"
19
+ },
20
+ {
21
+ "isRight": false,
22
+ "describe": "SOQL Query on each object"
23
+ }
24
+ ]
25
+ },
26
+ {
27
+ "describe": "Given the code block:\nInteger x;\nfor(x = 0; x<10; x+=2)\n{\nif(x==8) break; if(x==10) break;\n}\nsystem.debug(x);\nWhich value will the system.debug statement display?",
28
+ "answerOptions": [
29
+ {
30
+ "isRight": false,
31
+ "describe": "4"
32
+ },
33
+ {
34
+ "isRight": false,
35
+ "describe": "2"
36
+ },
37
+ {
38
+ "isRight": true,
39
+ "describe": "8"
40
+ },
41
+ {
42
+ "isRight": false,
43
+ "describe": "10"
44
+ }
45
+ ]
46
+ },
47
+ {
48
+ "describe": "What are two correct examples of the Model in the Salesforce MVC architecture?\nChoose 2 answers",
49
+ "answerOptions": [
50
+ {
51
+ "isRight": true,
52
+ "describe": "Custom field on the custom Wizard _c object"
53
+ },
54
+ {
55
+ "isRight": true,
56
+ "describe": "Standard Account lookup on the Contact object"
57
+ },
58
+ {
59
+ "isRight": false,
60
+ "describe": "Workflow rule on the Contact object"
61
+ },
62
+ {
63
+ "isRight": false,
64
+ "describe": "Standard Lightning component"
65
+ }
66
+ ]
67
+ },
68
+ {
69
+ "describe": "A Visualforce page uses the Contact standard controller.\nHow can a developer display the Name from the parent Account record on the page?",
70
+ "answerOptions": [
71
+ {
72
+ "isRight": false,
73
+ "describe": "Use an additional standard controller for Accounts."
74
+ },
75
+ {
76
+ "isRight": false,
77
+ "describe": "Use SOQL syntax to find the related Accounts Name field."
78
+ },
79
+ {
80
+ "isRight": true,
81
+ "describe": "Use the {!contact.Account.Name} merge field syntax."
82
+ },
83
+ {
84
+ "isRight": false,
85
+ "describe": "Use additional Apex logic within the controller to query for the Name field."
86
+ }
87
+ ]
88
+ },
89
+ {
90
+ "describe": "What is the output of the following code?\nInteger index = 1;\nInteger counter = 2;\ndo\n{\nSystem.debug('index:: '+index);\nindex++;\ncounter++;\n} while (index == 20 && counter == 21);",
91
+ "answerOptions": [
92
+ {
93
+ "isRight": true,
94
+ "describe": "The debug statement will output 1."
95
+ },
96
+ {
97
+ "isRight": false,
98
+ "describe": "The debug statement will repeat outputs from 1 to 20."
99
+ },
100
+ {
101
+ "isRight": false,
102
+ "describe": "The debug statement will repeat outputs from 1 to 21."
103
+ },
104
+ {
105
+ "isRight": false,
106
+ "describe": "The debug statement will output 20."
107
+ }
108
+ ]
109
+ },
110
+ {
111
+ "describe": "When would the use of Heroku Postgres be appropriate?",
112
+ "answerOptions": [
113
+ {
114
+ "isRight": false,
115
+ "describe": "To store user generated pictures and word documents"
116
+ },
117
+ {
118
+ "isRight": false,
119
+ "describe": "To interconnect Microsoft SQL servers to Heroku Applications"
120
+ },
121
+ {
122
+ "isRight": true,
123
+ "describe": "To store and retrieve data using the Structured Query Language"
124
+ },
125
+ {
126
+ "isRight": false,
127
+ "describe": "To cache commonly accessed data for faster retrieval"
128
+ }
129
+ ]
130
+ },
131
+ {
132
+ "describe": "A user selects a value from a multi-select picklist.\nHow is this selected value represented in Apex?",
133
+ "answerOptions": [
134
+ {
135
+ "isRight": false,
136
+ "describe": "As a string ending with a comma"
137
+ },
138
+ {
139
+ "isRight": false,
140
+ "describe": "As a set<string> with one element"
141
+ },
142
+ {
143
+ "isRight": true,
144
+ "describe": "As a String"
145
+ },
146
+ {
147
+ "isRight": false,
148
+ "describe": "As a List<string> with one element"
149
+ }
150
+ ]
151
+ },
152
+ {
153
+ "describe": ". A developer writes the following code:\nList<Account> acc = [SELECT Id FROM Account LIMIT 10];\nDelete acc;\nDatabase.emptyRecycleBin(acc);\nSystem.Debug[Limits.getDMLStatements() +', '+ Limits.getLimitDMLStatements());\nWhat is the result of the debug statement?",
154
+ "answerOptions": [
155
+ {
156
+ "isRight": true,
157
+ "describe": "2, 150"
158
+ },
159
+ {
160
+ "isRight": false,
161
+ "describe": "1, 100"
162
+ },
163
+ {
164
+ "isRight": false,
165
+ "describe": "1, 150"
166
+ },
167
+ {
168
+ "isRight": false,
169
+ "describe": "2, 200"
170
+ }
171
+ ]
172
+ },
173
+ {
174
+ "describe": "Universal Containers (UC) wants to automate the Sales Operations process for Closed Won Opportunities. When an Opportunity is marked as Closed Won, UC wants to update the Account to mark it as a Customer. In addition, UC wants all of the Opportunity Line Items from a Closed Won Opportunity to be added automatically as Assets.\nWhat is appropriate for automating this process?",
175
+ "answerOptions": [
176
+ {
177
+ "isRight": true,
178
+ "describe": "Process Builder with an Auto launched Flow"
179
+ },
180
+ {
181
+ "isRight": false,
182
+ "describe": "Workflow Rules"
183
+ },
184
+ {
185
+ "isRight": false,
186
+ "describe": "Workflow Rules and Process Builder"
187
+ },
188
+ {
189
+ "isRight": false,
190
+ "describe": "Process Builder"
191
+ }
192
+ ]
193
+ },
194
+ {
195
+ "describe": "Users report multiple intermittent errors and unexpected results when saving a record. Upon investigation, the developer finds that triggers are executing more than once.\nWhat is a potential solution to solve this situation?",
196
+ "answerOptions": [
197
+ {
198
+ "isRight": false,
199
+ "describe": "Use a one trigger per object approach."
200
+ },
201
+ {
202
+ "isRight": false,
203
+ "describe": "Use a private class variable to ensure that the trigger only runs once."
204
+ },
205
+ {
206
+ "isRight": true,
207
+ "describe": "Use a static variable to check if the trigger has already run."
208
+ },
209
+ {
210
+ "isRight": false,
211
+ "describe": "Disable all triggers and use workflows."
212
+ }
213
+ ]
214
+ },
215
+ {
216
+ "describe": "Which two are true regarding a Dyno?\nChoose 2 answers",
217
+ "answerOptions": [
218
+ {
219
+ "isRight": false,
220
+ "describe": "Is a lightweight linux container used in a collection to run Heroku applications?"
221
+ },
222
+ {
223
+ "isRight": false,
224
+ "describe": "Is a light weight VM used to run code on the Heroku Platform?"
225
+ },
226
+ {
227
+ "isRight": false,
228
+ "describe": "Has the ability to sleep as a standard and performance Dyno."
229
+ },
230
+ {
231
+ "isRight": true,
232
+ "describe": "Has Ephemeral filesystems and is rebooted every 24 hours."
233
+ }
234
+ ]
235
+ },
236
+ {
237
+ "describe": "Which two queries can a developer use in a Visualforce controller to protect against SOQL injection vulnerabilities?\nChoose 2 answers\nA: String qryName = '%' + String.escapeSingleQuotes(name) + '%';\nString qryString = 'SELECT Id FROM Contact WHERE Name LIKE \\'%' + qryName + '%\\' ';\nList<Contact> queryResult = Database.query(qryString);\nString qryString = 'SELECT Id FROM Contact WHERE Name LIKE :qryName';\nList<Contact> queryResult = Database.query(qryString);\nList<Contact> queryResult = Database.query(qryString);\nString qryString = 'SELECT Id FROM Contact WHERE Name LIKE :qryName';\nList<Contact> queryResult = Database.query(qryString);",
238
+ "answerOptions": [
239
+ null,
240
+ {
241
+ "isRight": true,
242
+ "describe": "String qryName = '%' + name + '%';"
243
+ },
244
+ {
245
+ "isRight": false,
246
+ "describe": "String qryString = 'SELECT Id FROM Contact WHERE Name LIKE \\'%' + name + '%\\' ';"
247
+ },
248
+ {
249
+ "isRight": false,
250
+ "describe": "String qryName = '%' + String.enforceSecurityChecks(name) + '%';"
251
+ }
252
+ ]
253
+ },
254
+ {
255
+ "describe": "A developer is asked to write negative tests as part of the unit testing for a method that calculates a person's age based on birth date.\nWhat should the negative tests include?",
256
+ "answerOptions": [
257
+ {
258
+ "isRight": false,
259
+ "describe": "Assert that past dates are accepted by the method."
260
+ },
261
+ {
262
+ "isRight": false,
263
+ "describe": "Assert that a null value is accepted by the method."
264
+ },
265
+ {
266
+ "isRight": true,
267
+ "describe": "Assert that future dates are rejected by the method."
268
+ },
269
+ {
270
+ "isRight": false,
271
+ "describe": "Throwing a custom exception in the unit test."
272
+ }
273
+ ]
274
+ },
275
+ {
276
+ "describe": "A lead object has a custom field Prior_Email_c. The following trigger is intended to copy the current Email into the Prior_Email_c field any time the Email field is changed:\ntrigger test on Lead (before update){\nfor(Lead id: trigger.new)\n{\nif(Id.Email != trigger.oldMap.get(Id.id).email)\n{\nId.Prior_Email__c = trigger.oldMap.get(Id.id).email;\nupdate Id;\n}\n}\n}\nWhich type of exception will this trigger cause?",
277
+ "answerOptions": [
278
+ {
279
+ "isRight": true,
280
+ "describe": "A DML exception"
281
+ },
282
+ {
283
+ "isRight": false,
284
+ "describe": "A compile time exception"
285
+ },
286
+ {
287
+ "isRight": false,
288
+ "describe": "A null reference exception"
289
+ },
290
+ {
291
+ "isRight": false,
292
+ "describe": "A limit exception when doing a bulk update"
293
+ }
294
+ ]
295
+ },
296
+ {
297
+ "describe": "A developer encounters APEX heap limit errors in a trigger.\nWhich two methods should the developer use to avoid this error?\nChoose 2 answers",
298
+ "answerOptions": [
299
+ {
300
+ "isRight": false,
301
+ "describe": "Remove or set collections to null after use."
302
+ },
303
+ {
304
+ "isRight": true,
305
+ "describe": "Use SOQL for loops instead of assigning large queries results to a single collection and looping through the collection."
306
+ },
307
+ {
308
+ "isRight": true,
309
+ "describe": "Use the transient keyword when declaring variables."
310
+ },
311
+ {
312
+ "isRight": false,
313
+ "describe": "Query and store fields from the related object in a collection when updating related objects."
314
+ }
315
+ ]
316
+ }
317
+ ]
318
+ }